htmldoc-1.8.27/0040775000212600000240000000000010464177330011732 5ustar mikeuserhtmldoc-1.8.27/vcnet/0040775000212600000240000000000010464177303013051 5ustar mikeuserhtmldoc-1.8.27/vcnet/ghtmldoc.vcproj0100664000212600000240000003220010331511272016057 0ustar mikeuser htmldoc-1.8.27/vcnet/zlib.vcproj0100664000212600000240000000677310125103267015240 0ustar mikeuser htmldoc-1.8.27/vcnet/icons.h0100664000212600000240000000066610035061631014330 0ustar mikeuser//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by icons.rc // #define IDI_ICON 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif htmldoc-1.8.27/vcnet/htmldoc.vcproj0100664000212600000240000003151310331511272015716 0ustar mikeuser htmldoc-1.8.27/vcnet/htmldoc.sln0100664000212600000240000000652010035061631015207 0ustar mikeuserMicrosoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ghtmldoc", "ghtmldoc.vcproj", "{A45127A6-7A50-48AE-820A-E0D821516AD4}" ProjectSection(ProjectDependencies) = postProject {287D2FB4-9941-4B64-B973-55A6EC04EAFC} = {287D2FB4-9941-4B64-B973-55A6EC04EAFC} {F4B8B6F3-8198-4FC3-92A3-C944644B570A} = {F4B8B6F3-8198-4FC3-92A3-C944644B570A} {1132A142-F8A1-4464-881C-7F50D77A1CD2} = {1132A142-F8A1-4464-881C-7F50D77A1CD2} {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58} = {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "htmldoc", "htmldoc.vcproj", "{287D2FB4-9941-4B64-B973-55A6EC04EAFC}" ProjectSection(ProjectDependencies) = postProject {F4B8B6F3-8198-4FC3-92A3-C944644B570A} = {F4B8B6F3-8198-4FC3-92A3-C944644B570A} {1132A142-F8A1-4464-881C-7F50D77A1CD2} = {1132A142-F8A1-4464-881C-7F50D77A1CD2} {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58} = {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg", "jpeg.vcproj", "{07169A72-08A9-4EC8-BC6C-CCBC1F01EA58}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "libpng.vcproj", "{1132A142-F8A1-4464-881C-7F50D77A1CD2}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcproj", "{F4B8B6F3-8198-4FC3-92A3-C944644B570A}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {A45127A6-7A50-48AE-820A-E0D821516AD4}.Debug.ActiveCfg = Debug|Win32 {A45127A6-7A50-48AE-820A-E0D821516AD4}.Debug.Build.0 = Debug|Win32 {A45127A6-7A50-48AE-820A-E0D821516AD4}.Release.ActiveCfg = Release|Win32 {A45127A6-7A50-48AE-820A-E0D821516AD4}.Release.Build.0 = Release|Win32 {287D2FB4-9941-4B64-B973-55A6EC04EAFC}.Debug.ActiveCfg = Debug|Win32 {287D2FB4-9941-4B64-B973-55A6EC04EAFC}.Debug.Build.0 = Debug|Win32 {287D2FB4-9941-4B64-B973-55A6EC04EAFC}.Release.ActiveCfg = Release|Win32 {287D2FB4-9941-4B64-B973-55A6EC04EAFC}.Release.Build.0 = Release|Win32 {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58}.Debug.ActiveCfg = Debug|Win32 {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58}.Debug.Build.0 = Debug|Win32 {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58}.Release.ActiveCfg = Release|Win32 {07169A72-08A9-4EC8-BC6C-CCBC1F01EA58}.Release.Build.0 = Release|Win32 {1132A142-F8A1-4464-881C-7F50D77A1CD2}.Debug.ActiveCfg = Debug|Win32 {1132A142-F8A1-4464-881C-7F50D77A1CD2}.Debug.Build.0 = Debug|Win32 {1132A142-F8A1-4464-881C-7F50D77A1CD2}.Release.ActiveCfg = Release|Win32 {1132A142-F8A1-4464-881C-7F50D77A1CD2}.Release.Build.0 = Release|Win32 {F4B8B6F3-8198-4FC3-92A3-C944644B570A}.Debug.ActiveCfg = Debug|Win32 {F4B8B6F3-8198-4FC3-92A3-C944644B570A}.Debug.Build.0 = Debug|Win32 {F4B8B6F3-8198-4FC3-92A3-C944644B570A}.Release.ActiveCfg = Release|Win32 {F4B8B6F3-8198-4FC3-92A3-C944644B570A}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal htmldoc-1.8.27/vcnet/jpeg.vcproj0100664000212600000240000005762510276441335015237 0ustar mikeuser htmldoc-1.8.27/vcnet/about.txt0100664000212600000240000000033510035061631014710 0ustar mikeuserHTMLDOC is a HTML processing program that generates HTML, PostScript, and PDF files with a table of contents. Yearly memberships for HTMLDOC are available from Easy Software Products at "http://www.easysw.com/htmldoc/". htmldoc-1.8.27/vcnet/config.h0100664000212600000240000000603610441614401014457 0ustar mikeuser/* * "$Id: config.h 1493 2006-06-07 18:20:49Z mike $" * * Configuration file for HTMLDOC. * * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ /* * What is the version number for this software? */ #define SVERSION "1.8.27" /* * Limits for the output "engines"... */ #define MAX_CHAPTERS 1000 /* Maximum number of chapters or files */ #define MAX_COLUMNS 200 /* Maximum number of columns in a table */ #define MAX_HF_IMAGES 10 /* Maximum number of header/footer images */ /* * Memory allocation units for other stuff... */ #define ALLOC_FILES 10 /* Temporary/image files */ #define ALLOC_HEADINGS 50 /* Headings */ #define ALLOC_LINKS 100 /* Web links */ #define ALLOC_OBJECTS 100 /* PDF objects */ #define ALLOC_PAGES 10 /* PS/PDF pages */ #define ALLOC_ROWS 20 /* Table rows */ /* * Locations of files (overridden by the registry...) */ #define DOCUMENTATION "C:/Program Files/Easy Software Products/HTMLDOC/doc" #define HTML_DATA "C:/Program Files/Easy Software Products/HTMLDOC" /* * Do we have the FLTK library? */ #ifndef _CONSOLE # define HAVE_LIBFLTK #endif /* !_CONSOLE */ /* * Do we have the Xpm library? */ #undef HAVE_LIBXPM /* * Which encryption libraries do we have? */ #undef HAVE_CDSASSL #undef HAVE_GNUTLS #define HAVE_LIBSSL #define HAVE_SSL /* * Do we need to use ? */ #undef HAVE_STRINGS_H /* * Do we have the header file? */ #define HAVE_LOCALE_H /* * Do we have some of the "standard" string functions? */ #define HAVE_STRDUP #define HAVE_STRCASECMP #define HAVE_STRNCASECMP /* * How about snprintf() and vsnprintf()? */ #define HAVE_SNPRINTF #define HAVE_VSNPRINTF /* * Does the "tm" structure contain the "tm_gmtoff" member? */ #undef HAVE_TM_GMTOFF /* * Do we have hstrerror()? */ #undef HAVE_HSTRERROR /* * Do we have getaddrinfo()? */ #define HAVE_GETADDRINFO /* * Do we have getnameinfo()? */ #define HAVE_GETNAMEINFO /* * Do we have the long long type? */ #undef HAVE_LONG_LONG #ifdef HAVE_LONG_LONG # define HTMLDOC_LLFMT "%lld" # define HTMLDOC_LLCAST (long long) #else # define HTMLDOC_LLFMT "%ld" # define HTMLDOC_LLCAST (long) #endif /* HAVE_LONG_LONG */ /* * Do we have the strtoll() function? */ #undef HAVE_STRTOLL #ifndef HAVE_STRTOLL # define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base)) #endif /* !HAVE_STRTOLL */ /* * End of "$Id: config.h 1493 2006-06-07 18:20:49Z mike $". */ htmldoc-1.8.27/vcnet/libpng.vcproj0100664000212600000240000002336310276441335015555 0ustar mikeuser htmldoc-1.8.27/vcnet/dialog.txt0100664000212600000240000000006610035061631015036 0ustar mikeuserClick on the Setup button to install HTMLDOC v1.8.24. htmldoc-1.8.27/vcnet/icons.rc0100664000212600000240000000316110062145531014500 0ustar mikeuser//Microsoft Developer Studio generated resource script. // #include "icons.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // //#include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 //LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "icons.h\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON ICON DISCARDABLE "../desktop/htmldoc.ico" #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED htmldoc-1.8.27/png/0040775000212600000240000000000010464177305012520 5ustar mikeuserhtmldoc-1.8.27/png/pngrtran.c0100664000212600000240000042650310124712606014516 0ustar mikeuser /* pngrtran.c - transforms the data in a row for PNG readers * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file contains functions optionally called by an application * in order to tell libpng how to handle data when reading a PNG. * Transformations that are used in both reading and writing are * in pngtrans.c. */ #define PNG_INTERNAL #include "png.h" /* Set the action on getting a CRC error for an ancillary or critical chunk. */ void PNGAPI png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action) { png_debug(1, "in png_set_crc_action\n"); /* Tell libpng how we react to CRC errors in critical chunks */ switch (crit_action) { case PNG_CRC_NO_CHANGE: /* leave setting as is */ break; case PNG_CRC_WARN_USE: /* warn/use data */ png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE; break; case PNG_CRC_QUIET_USE: /* quiet/use data */ png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE | PNG_FLAG_CRC_CRITICAL_IGNORE; break; case PNG_CRC_WARN_DISCARD: /* not a valid action for critical data */ png_warning(png_ptr, "Can't discard critical data on CRC error."); case PNG_CRC_ERROR_QUIT: /* error/quit */ case PNG_CRC_DEFAULT: default: png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; break; } switch (ancil_action) { case PNG_CRC_NO_CHANGE: /* leave setting as is */ break; case PNG_CRC_WARN_USE: /* warn/use data */ png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE; break; case PNG_CRC_QUIET_USE: /* quiet/use data */ png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN; break; case PNG_CRC_ERROR_QUIT: /* error/quit */ png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN; break; case PNG_CRC_WARN_DISCARD: /* warn/discard data */ case PNG_CRC_DEFAULT: default: png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; break; } } #if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ defined(PNG_FLOATING_POINT_SUPPORTED) /* handle alpha and tRNS via a background color */ void PNGAPI png_set_background(png_structp png_ptr, png_color_16p background_color, int background_gamma_code, int need_expand, double background_gamma) { png_debug(1, "in png_set_background\n"); if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN) { png_warning(png_ptr, "Application must supply a known background gamma"); return; } png_ptr->transformations |= PNG_BACKGROUND; png_memcpy(&(png_ptr->background), background_color, png_sizeof(png_color_16)); png_ptr->background_gamma = (float)background_gamma; png_ptr->background_gamma_type = (png_byte)(background_gamma_code); png_ptr->transformations |= (need_expand ? PNG_BACKGROUND_EXPAND : 0); /* Note: if need_expand is set and color_type is either RGB or RGB_ALPHA * (in which case need_expand is superfluous anyway), the background color * might actually be gray yet not be flagged as such. This is not a problem * for the current code, which uses PNG_BACKGROUND_IS_GRAY only to * decide when to do the png_do_gray_to_rgb() transformation. */ if ((need_expand && !(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) || (!need_expand && background_color->red == background_color->green && background_color->red == background_color->blue)) png_ptr->mode |= PNG_BACKGROUND_IS_GRAY; } #endif #if defined(PNG_READ_16_TO_8_SUPPORTED) /* strip 16 bit depth files to 8 bit depth */ void PNGAPI png_set_strip_16(png_structp png_ptr) { png_debug(1, "in png_set_strip_16\n"); png_ptr->transformations |= PNG_16_TO_8; } #endif #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) void PNGAPI png_set_strip_alpha(png_structp png_ptr) { png_debug(1, "in png_set_strip_alpha\n"); png_ptr->transformations |= PNG_STRIP_ALPHA; } #endif #if defined(PNG_READ_DITHER_SUPPORTED) /* Dither file to 8 bit. Supply a palette, the current number * of elements in the palette, the maximum number of elements * allowed, and a histogram if possible. If the current number * of colors is greater then the maximum number, the palette will be * modified to fit in the maximum number. "full_dither" indicates * whether we need a dithering cube set up for RGB images, or if we * simply are reducing the number of colors in a paletted image. */ typedef struct png_dsort_struct { struct png_dsort_struct FAR * next; png_byte left; png_byte right; } png_dsort; typedef png_dsort FAR * png_dsortp; typedef png_dsort FAR * FAR * png_dsortpp; void PNGAPI png_set_dither(png_structp png_ptr, png_colorp palette, int num_palette, int maximum_colors, png_uint_16p histogram, int full_dither) { png_debug(1, "in png_set_dither\n"); png_ptr->transformations |= PNG_DITHER; if (!full_dither) { int i; png_ptr->dither_index = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_palette * png_sizeof (png_byte))); for (i = 0; i < num_palette; i++) png_ptr->dither_index[i] = (png_byte)i; } if (num_palette > maximum_colors) { if (histogram != NULL) { /* This is easy enough, just throw out the least used colors. Perhaps not the best solution, but good enough. */ int i; /* initialize an array to sort colors */ png_ptr->dither_sort = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_palette * png_sizeof (png_byte))); /* initialize the dither_sort array */ for (i = 0; i < num_palette; i++) png_ptr->dither_sort[i] = (png_byte)i; /* Find the least used palette entries by starting a bubble sort, and running it until we have sorted out enough colors. Note that we don't care about sorting all the colors, just finding which are least used. */ for (i = num_palette - 1; i >= maximum_colors; i--) { int done; /* to stop early if the list is pre-sorted */ int j; done = 1; for (j = 0; j < i; j++) { if (histogram[png_ptr->dither_sort[j]] < histogram[png_ptr->dither_sort[j + 1]]) { png_byte t; t = png_ptr->dither_sort[j]; png_ptr->dither_sort[j] = png_ptr->dither_sort[j + 1]; png_ptr->dither_sort[j + 1] = t; done = 0; } } if (done) break; } /* swap the palette around, and set up a table, if necessary */ if (full_dither) { int j = num_palette; /* put all the useful colors within the max, but don't move the others */ for (i = 0; i < maximum_colors; i++) { if ((int)png_ptr->dither_sort[i] >= maximum_colors) { do j--; while ((int)png_ptr->dither_sort[j] >= maximum_colors); palette[i] = palette[j]; } } } else { int j = num_palette; /* move all the used colors inside the max limit, and develop a translation table */ for (i = 0; i < maximum_colors; i++) { /* only move the colors we need to */ if ((int)png_ptr->dither_sort[i] >= maximum_colors) { png_color tmp_color; do j--; while ((int)png_ptr->dither_sort[j] >= maximum_colors); tmp_color = palette[j]; palette[j] = palette[i]; palette[i] = tmp_color; /* indicate where the color went */ png_ptr->dither_index[j] = (png_byte)i; png_ptr->dither_index[i] = (png_byte)j; } } /* find closest color for those colors we are not using */ for (i = 0; i < num_palette; i++) { if ((int)png_ptr->dither_index[i] >= maximum_colors) { int min_d, k, min_k, d_index; /* find the closest color to one we threw out */ d_index = png_ptr->dither_index[i]; min_d = PNG_COLOR_DIST(palette[d_index], palette[0]); for (k = 1, min_k = 0; k < maximum_colors; k++) { int d; d = PNG_COLOR_DIST(palette[d_index], palette[k]); if (d < min_d) { min_d = d; min_k = k; } } /* point to closest color */ png_ptr->dither_index[i] = (png_byte)min_k; } } } png_free(png_ptr, png_ptr->dither_sort); png_ptr->dither_sort=NULL; } else { /* This is much harder to do simply (and quickly). Perhaps we need to go through a median cut routine, but those don't always behave themselves with only a few colors as input. So we will just find the closest two colors, and throw out one of them (chosen somewhat randomly). [We don't understand this at all, so if someone wants to work on improving it, be our guest - AED, GRP] */ int i; int max_d; int num_new_palette; png_dsortp t; png_dsortpp hash; t=NULL; /* initialize palette index arrays */ png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_palette * png_sizeof (png_byte))); png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_palette * png_sizeof (png_byte))); /* initialize the sort array */ for (i = 0; i < num_palette; i++) { png_ptr->index_to_palette[i] = (png_byte)i; png_ptr->palette_to_index[i] = (png_byte)i; } hash = (png_dsortpp)png_malloc(png_ptr, (png_uint_32)(769 * png_sizeof (png_dsortp))); for (i = 0; i < 769; i++) hash[i] = NULL; /* png_memset(hash, 0, 769 * png_sizeof (png_dsortp)); */ num_new_palette = num_palette; /* initial wild guess at how far apart the farthest pixel pair we will be eliminating will be. Larger numbers mean more areas will be allocated, Smaller numbers run the risk of not saving enough data, and having to do this all over again. I have not done extensive checking on this number. */ max_d = 96; while (num_new_palette > maximum_colors) { for (i = 0; i < num_new_palette - 1; i++) { int j; for (j = i + 1; j < num_new_palette; j++) { int d; d = PNG_COLOR_DIST(palette[i], palette[j]); if (d <= max_d) { t = (png_dsortp)png_malloc_warn(png_ptr, (png_uint_32)(png_sizeof(png_dsort))); if (t == NULL) break; t->next = hash[d]; t->left = (png_byte)i; t->right = (png_byte)j; hash[d] = t; } } if (t == NULL) break; } if (t != NULL) for (i = 0; i <= max_d; i++) { if (hash[i] != NULL) { png_dsortp p; for (p = hash[i]; p; p = p->next) { if ((int)png_ptr->index_to_palette[p->left] < num_new_palette && (int)png_ptr->index_to_palette[p->right] < num_new_palette) { int j, next_j; if (num_new_palette & 0x01) { j = p->left; next_j = p->right; } else { j = p->right; next_j = p->left; } num_new_palette--; palette[png_ptr->index_to_palette[j]] = palette[num_new_palette]; if (!full_dither) { int k; for (k = 0; k < num_palette; k++) { if (png_ptr->dither_index[k] == png_ptr->index_to_palette[j]) png_ptr->dither_index[k] = png_ptr->index_to_palette[next_j]; if ((int)png_ptr->dither_index[k] == num_new_palette) png_ptr->dither_index[k] = png_ptr->index_to_palette[j]; } } png_ptr->index_to_palette[png_ptr->palette_to_index [num_new_palette]] = png_ptr->index_to_palette[j]; png_ptr->palette_to_index[png_ptr->index_to_palette[j]] = png_ptr->palette_to_index[num_new_palette]; png_ptr->index_to_palette[j] = (png_byte)num_new_palette; png_ptr->palette_to_index[num_new_palette] = (png_byte)j; } if (num_new_palette <= maximum_colors) break; } if (num_new_palette <= maximum_colors) break; } } for (i = 0; i < 769; i++) { if (hash[i] != NULL) { png_dsortp p = hash[i]; while (p) { t = p->next; png_free(png_ptr, p); p = t; } } hash[i] = 0; } max_d += 96; } png_free(png_ptr, hash); png_free(png_ptr, png_ptr->palette_to_index); png_free(png_ptr, png_ptr->index_to_palette); png_ptr->palette_to_index=NULL; png_ptr->index_to_palette=NULL; } num_palette = maximum_colors; } if (png_ptr->palette == NULL) { png_ptr->palette = palette; } png_ptr->num_palette = (png_uint_16)num_palette; if (full_dither) { int i; png_bytep distance; int total_bits = PNG_DITHER_RED_BITS + PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS; int num_red = (1 << PNG_DITHER_RED_BITS); int num_green = (1 << PNG_DITHER_GREEN_BITS); int num_blue = (1 << PNG_DITHER_BLUE_BITS); png_size_t num_entries = ((png_size_t)1 << total_bits); png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr, (png_uint_32)(num_entries * png_sizeof (png_byte))); png_memset(png_ptr->palette_lookup, 0, num_entries * png_sizeof (png_byte)); distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries * png_sizeof(png_byte))); png_memset(distance, 0xff, num_entries * png_sizeof(png_byte)); for (i = 0; i < num_palette; i++) { int ir, ig, ib; int r = (palette[i].red >> (8 - PNG_DITHER_RED_BITS)); int g = (palette[i].green >> (8 - PNG_DITHER_GREEN_BITS)); int b = (palette[i].blue >> (8 - PNG_DITHER_BLUE_BITS)); for (ir = 0; ir < num_red; ir++) { /* int dr = abs(ir - r); */ int dr = ((ir > r) ? ir - r : r - ir); int index_r = (ir << (PNG_DITHER_BLUE_BITS + PNG_DITHER_GREEN_BITS)); for (ig = 0; ig < num_green; ig++) { /* int dg = abs(ig - g); */ int dg = ((ig > g) ? ig - g : g - ig); int dt = dr + dg; int dm = ((dr > dg) ? dr : dg); int index_g = index_r | (ig << PNG_DITHER_BLUE_BITS); for (ib = 0; ib < num_blue; ib++) { int d_index = index_g | ib; /* int db = abs(ib - b); */ int db = ((ib > b) ? ib - b : b - ib); int dmax = ((dm > db) ? dm : db); int d = dmax + dt + db; if (d < (int)distance[d_index]) { distance[d_index] = (png_byte)d; png_ptr->palette_lookup[d_index] = (png_byte)i; } } } } } png_free(png_ptr, distance); } } #endif #if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) /* Transform the image from the file_gamma to the screen_gamma. We * only do transformations on images where the file_gamma and screen_gamma * are not close reciprocals, otherwise it slows things down slightly, and * also needlessly introduces small errors. * * We will turn off gamma transformation later if no semitransparent entries * are present in the tRNS array for palette images. We can't do it here * because we don't necessarily have the tRNS chunk yet. */ void PNGAPI png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma) { png_debug(1, "in png_set_gamma\n"); if ((fabs(scrn_gamma * file_gamma - 1.0) > PNG_GAMMA_THRESHOLD) || (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) || (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)) png_ptr->transformations |= PNG_GAMMA; png_ptr->gamma = (float)file_gamma; png_ptr->screen_gamma = (float)scrn_gamma; } #endif #if defined(PNG_READ_EXPAND_SUPPORTED) /* Expand paletted images to RGB, expand grayscale images of * less than 8-bit depth to 8-bit depth, and expand tRNS chunks * to alpha channels. */ void PNGAPI png_set_expand(png_structp png_ptr) { png_debug(1, "in png_set_expand\n"); png_ptr->transformations |= PNG_EXPAND; } /* GRR 19990627: the following three functions currently are identical * to png_set_expand(). However, it is entirely reasonable that someone * might wish to expand an indexed image to RGB but *not* expand a single, * fully transparent palette entry to a full alpha channel--perhaps instead * convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace * the transparent color with a particular RGB value, or drop tRNS entirely. * IOW, a future version of the library may make the transformations flag * a bit more fine-grained, with separate bits for each of these three * functions. * * More to the point, these functions make it obvious what libpng will be * doing, whereas "expand" can (and does) mean any number of things. */ /* Expand paletted images to RGB. */ void PNGAPI png_set_palette_to_rgb(png_structp png_ptr) { png_debug(1, "in png_set_expand\n"); png_ptr->transformations |= PNG_EXPAND; } /* Expand grayscale images of less than 8-bit depth to 8 bits. */ void PNGAPI png_set_gray_1_2_4_to_8(png_structp png_ptr) { png_debug(1, "in png_set_expand\n"); png_ptr->transformations |= PNG_EXPAND; } /* Expand tRNS chunks to alpha channels. */ void PNGAPI png_set_tRNS_to_alpha(png_structp png_ptr) { png_debug(1, "in png_set_expand\n"); png_ptr->transformations |= PNG_EXPAND; } #endif /* defined(PNG_READ_EXPAND_SUPPORTED) */ #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) void PNGAPI png_set_gray_to_rgb(png_structp png_ptr) { png_debug(1, "in png_set_gray_to_rgb\n"); png_ptr->transformations |= PNG_GRAY_TO_RGB; } #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) #if defined(PNG_FLOATING_POINT_SUPPORTED) /* Convert a RGB image to a grayscale of the same width. This allows us, * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image. */ void PNGAPI png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red, double green) { int red_fixed = (int)((float)red*100000.0 + 0.5); int green_fixed = (int)((float)green*100000.0 + 0.5); png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed); } #endif void PNGAPI png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action, png_fixed_point red, png_fixed_point green) { png_debug(1, "in png_set_rgb_to_gray\n"); switch(error_action) { case 1: png_ptr->transformations |= PNG_RGB_TO_GRAY; break; case 2: png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN; break; case 3: png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR; } if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) #if defined(PNG_READ_EXPAND_SUPPORTED) png_ptr->transformations |= PNG_EXPAND; #else { png_warning(png_ptr, "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED."); png_ptr->transformations &= ~PNG_RGB_TO_GRAY; } #endif { png_uint_16 red_int, green_int; if(red < 0 || green < 0) { red_int = 6968; /* .212671 * 32768 + .5 */ green_int = 23434; /* .715160 * 32768 + .5 */ } else if(red + green < 100000L) { red_int = (png_uint_16)(((png_uint_32)red*32768L)/100000L); green_int = (png_uint_16)(((png_uint_32)green*32768L)/100000L); } else { png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients"); red_int = 6968; green_int = 23434; } png_ptr->rgb_to_gray_red_coeff = red_int; png_ptr->rgb_to_gray_green_coeff = green_int; png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(32768-red_int-green_int); } } #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED) void PNGAPI png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr read_user_transform_fn) { png_debug(1, "in png_set_read_user_transform_fn\n"); #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) png_ptr->transformations |= PNG_USER_TRANSFORM; png_ptr->read_user_transform_fn = read_user_transform_fn; #endif #ifdef PNG_LEGACY_SUPPORTED if(read_user_transform_fn) png_warning(png_ptr, "This version of libpng does not support user transforms"); #endif } #endif /* Initialize everything needed for the read. This includes modifying * the palette. */ void /* PRIVATE */ png_init_read_transformations(png_structp png_ptr) { png_debug(1, "in png_init_read_transformations\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if(png_ptr != NULL) #endif { #if defined(PNG_READ_BACKGROUND_SUPPORTED) || defined(PNG_READ_SHIFT_SUPPORTED) \ || defined(PNG_READ_GAMMA_SUPPORTED) int color_type = png_ptr->color_type; #endif #if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED) if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) && (png_ptr->transformations & PNG_EXPAND)) { if (!(color_type & PNG_COLOR_MASK_COLOR)) /* i.e., GRAY or GRAY_ALPHA */ { /* expand background chunk. */ switch (png_ptr->bit_depth) { case 1: png_ptr->background.gray *= (png_uint_16)0xff; png_ptr->background.red = png_ptr->background.green = png_ptr->background.blue = png_ptr->background.gray; break; case 2: png_ptr->background.gray *= (png_uint_16)0x55; png_ptr->background.red = png_ptr->background.green = png_ptr->background.blue = png_ptr->background.gray; break; case 4: png_ptr->background.gray *= (png_uint_16)0x11; png_ptr->background.red = png_ptr->background.green = png_ptr->background.blue = png_ptr->background.gray; break; case 8: case 16: png_ptr->background.red = png_ptr->background.green = png_ptr->background.blue = png_ptr->background.gray; break; } } else if (color_type == PNG_COLOR_TYPE_PALETTE) { png_ptr->background.red = png_ptr->palette[png_ptr->background.index].red; png_ptr->background.green = png_ptr->palette[png_ptr->background.index].green; png_ptr->background.blue = png_ptr->palette[png_ptr->background.index].blue; #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_ALPHA) { #if defined(PNG_READ_EXPAND_SUPPORTED) if (!(png_ptr->transformations & PNG_EXPAND)) #endif { /* invert the alpha channel (in tRNS) unless the pixels are going to be expanded, in which case leave it for later */ int i,istop; istop=(int)png_ptr->num_trans; for (i=0; itrans[i] = (png_byte)(255 - png_ptr->trans[i]); } } #endif } } #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED) png_ptr->background_1 = png_ptr->background; #endif #if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0) && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0) < PNG_GAMMA_THRESHOLD)) { int i,k; k=0; for (i=0; inum_trans; i++) { if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff) k=1; /* partial transparency is present */ } if (k == 0) png_ptr->transformations &= (~PNG_GAMMA); } if (png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) { png_build_gamma_table(png_ptr); #if defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->transformations & PNG_BACKGROUND) { if (color_type == PNG_COLOR_TYPE_PALETTE) { /* could skip if no transparency and */ png_color back, back_1; png_colorp palette = png_ptr->palette; int num_palette = png_ptr->num_palette; int i; if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) { back.red = png_ptr->gamma_table[png_ptr->background.red]; back.green = png_ptr->gamma_table[png_ptr->background.green]; back.blue = png_ptr->gamma_table[png_ptr->background.blue]; back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; } else { double g, gs; switch (png_ptr->background_gamma_type) { case PNG_BACKGROUND_GAMMA_SCREEN: g = (png_ptr->screen_gamma); gs = 1.0; break; case PNG_BACKGROUND_GAMMA_FILE: g = 1.0 / (png_ptr->gamma); gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); break; case PNG_BACKGROUND_GAMMA_UNIQUE: g = 1.0 / (png_ptr->background_gamma); gs = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma); break; default: g = 1.0; /* back_1 */ gs = 1.0; /* back */ } if ( fabs(gs - 1.0) < PNG_GAMMA_THRESHOLD) { back.red = (png_byte)png_ptr->background.red; back.green = (png_byte)png_ptr->background.green; back.blue = (png_byte)png_ptr->background.blue; } else { back.red = (png_byte)(pow( (double)png_ptr->background.red/255, gs) * 255.0 + .5); back.green = (png_byte)(pow( (double)png_ptr->background.green/255, gs) * 255.0 + .5); back.blue = (png_byte)(pow( (double)png_ptr->background.blue/255, gs) * 255.0 + .5); } back_1.red = (png_byte)(pow( (double)png_ptr->background.red/255, g) * 255.0 + .5); back_1.green = (png_byte)(pow( (double)png_ptr->background.green/255, g) * 255.0 + .5); back_1.blue = (png_byte)(pow( (double)png_ptr->background.blue/255, g) * 255.0 + .5); } for (i = 0; i < num_palette; i++) { if (i < (int)png_ptr->num_trans && png_ptr->trans[i] != 0xff) { if (png_ptr->trans[i] == 0) { palette[i] = back; } else /* if (png_ptr->trans[i] != 0xff) */ { png_byte v, w; v = png_ptr->gamma_to_1[palette[i].red]; png_composite(w, v, png_ptr->trans[i], back_1.red); palette[i].red = png_ptr->gamma_from_1[w]; v = png_ptr->gamma_to_1[palette[i].green]; png_composite(w, v, png_ptr->trans[i], back_1.green); palette[i].green = png_ptr->gamma_from_1[w]; v = png_ptr->gamma_to_1[palette[i].blue]; png_composite(w, v, png_ptr->trans[i], back_1.blue); palette[i].blue = png_ptr->gamma_from_1[w]; } } else { palette[i].red = png_ptr->gamma_table[palette[i].red]; palette[i].green = png_ptr->gamma_table[palette[i].green]; palette[i].blue = png_ptr->gamma_table[palette[i].blue]; } } } /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */ else /* color_type != PNG_COLOR_TYPE_PALETTE */ { double m = (double)(((png_uint_32)1 << png_ptr->bit_depth) - 1); double g = 1.0; double gs = 1.0; switch (png_ptr->background_gamma_type) { case PNG_BACKGROUND_GAMMA_SCREEN: g = (png_ptr->screen_gamma); gs = 1.0; break; case PNG_BACKGROUND_GAMMA_FILE: g = 1.0 / (png_ptr->gamma); gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); break; case PNG_BACKGROUND_GAMMA_UNIQUE: g = 1.0 / (png_ptr->background_gamma); gs = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma); break; } png_ptr->background_1.gray = (png_uint_16)(pow( (double)png_ptr->background.gray / m, g) * m + .5); png_ptr->background.gray = (png_uint_16)(pow( (double)png_ptr->background.gray / m, gs) * m + .5); if ((png_ptr->background.red != png_ptr->background.green) || (png_ptr->background.red != png_ptr->background.blue) || (png_ptr->background.red != png_ptr->background.gray)) { /* RGB or RGBA with color background */ png_ptr->background_1.red = (png_uint_16)(pow( (double)png_ptr->background.red / m, g) * m + .5); png_ptr->background_1.green = (png_uint_16)(pow( (double)png_ptr->background.green / m, g) * m + .5); png_ptr->background_1.blue = (png_uint_16)(pow( (double)png_ptr->background.blue / m, g) * m + .5); png_ptr->background.red = (png_uint_16)(pow( (double)png_ptr->background.red / m, gs) * m + .5); png_ptr->background.green = (png_uint_16)(pow( (double)png_ptr->background.green / m, gs) * m + .5); png_ptr->background.blue = (png_uint_16)(pow( (double)png_ptr->background.blue / m, gs) * m + .5); } else { /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */ png_ptr->background_1.red = png_ptr->background_1.green = png_ptr->background_1.blue = png_ptr->background_1.gray; png_ptr->background.red = png_ptr->background.green = png_ptr->background.blue = png_ptr->background.gray; } } } else /* transformation does not include PNG_BACKGROUND */ #endif /* PNG_READ_BACKGROUND_SUPPORTED */ if (color_type == PNG_COLOR_TYPE_PALETTE) { png_colorp palette = png_ptr->palette; int num_palette = png_ptr->num_palette; int i; for (i = 0; i < num_palette; i++) { palette[i].red = png_ptr->gamma_table[palette[i].red]; palette[i].green = png_ptr->gamma_table[palette[i].green]; palette[i].blue = png_ptr->gamma_table[palette[i].blue]; } } } #if defined(PNG_READ_BACKGROUND_SUPPORTED) else #endif #endif /* PNG_READ_GAMMA_SUPPORTED && PNG_FLOATING_POINT_SUPPORTED */ #if defined(PNG_READ_BACKGROUND_SUPPORTED) /* No GAMMA transformation */ if ((png_ptr->transformations & PNG_BACKGROUND) && (color_type == PNG_COLOR_TYPE_PALETTE)) { int i; int istop = (int)png_ptr->num_trans; png_color back; png_colorp palette = png_ptr->palette; back.red = (png_byte)png_ptr->background.red; back.green = (png_byte)png_ptr->background.green; back.blue = (png_byte)png_ptr->background.blue; for (i = 0; i < istop; i++) { if (png_ptr->trans[i] == 0) { palette[i] = back; } else if (png_ptr->trans[i] != 0xff) { /* The png_composite() macro is defined in png.h */ png_composite(palette[i].red, palette[i].red, png_ptr->trans[i], back.red); png_composite(palette[i].green, palette[i].green, png_ptr->trans[i], back.green); png_composite(palette[i].blue, palette[i].blue, png_ptr->trans[i], back.blue); } } } #endif /* PNG_READ_BACKGROUND_SUPPORTED */ #if defined(PNG_READ_SHIFT_SUPPORTED) if ((png_ptr->transformations & PNG_SHIFT) && (color_type == PNG_COLOR_TYPE_PALETTE)) { png_uint_16 i; png_uint_16 istop = png_ptr->num_palette; int sr = 8 - png_ptr->sig_bit.red; int sg = 8 - png_ptr->sig_bit.green; int sb = 8 - png_ptr->sig_bit.blue; if (sr < 0 || sr > 8) sr = 0; if (sg < 0 || sg > 8) sg = 0; if (sb < 0 || sb > 8) sb = 0; for (i = 0; i < istop; i++) { png_ptr->palette[i].red >>= sr; png_ptr->palette[i].green >>= sg; png_ptr->palette[i].blue >>= sb; } } #endif /* PNG_READ_SHIFT_SUPPORTED */ } #if !defined(PNG_READ_GAMMA_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) \ && !defined(PNG_READ_BACKGROUND_SUPPORTED) if(png_ptr) return; #endif } /* Modify the info structure to reflect the transformations. The * info should be updated so a PNG file could be written with it, * assuming the transformations result in valid PNG data. */ void /* PRIVATE */ png_read_transform_info(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_read_transform_info\n"); #if defined(PNG_READ_EXPAND_SUPPORTED) if (png_ptr->transformations & PNG_EXPAND) { if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { if (png_ptr->num_trans) info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA; else info_ptr->color_type = PNG_COLOR_TYPE_RGB; info_ptr->bit_depth = 8; info_ptr->num_trans = 0; } else { if (png_ptr->num_trans) info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; if (info_ptr->bit_depth < 8) info_ptr->bit_depth = 8; info_ptr->num_trans = 0; } } #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->transformations & PNG_BACKGROUND) { info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; info_ptr->num_trans = 0; info_ptr->background = png_ptr->background; } #endif #if defined(PNG_READ_GAMMA_SUPPORTED) if (png_ptr->transformations & PNG_GAMMA) { #ifdef PNG_FLOATING_POINT_SUPPORTED info_ptr->gamma = png_ptr->gamma; #endif #ifdef PNG_FIXED_POINT_SUPPORTED info_ptr->int_gamma = png_ptr->int_gamma; #endif } #endif #if defined(PNG_READ_16_TO_8_SUPPORTED) if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16)) info_ptr->bit_depth = 8; #endif #if defined(PNG_READ_DITHER_SUPPORTED) if (png_ptr->transformations & PNG_DITHER) { if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) || (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) && png_ptr->palette_lookup && info_ptr->bit_depth == 8) { info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; } } #endif #if defined(PNG_READ_PACK_SUPPORTED) if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8)) info_ptr->bit_depth = 8; #endif #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) if (png_ptr->transformations & PNG_GRAY_TO_RGB) info_ptr->color_type |= PNG_COLOR_MASK_COLOR; #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) if (png_ptr->transformations & PNG_RGB_TO_GRAY) info_ptr->color_type &= ~PNG_COLOR_MASK_COLOR; #endif if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) info_ptr->channels = 1; else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) info_ptr->channels = 3; else info_ptr->channels = 1; #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_STRIP_ALPHA) info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; #endif if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) info_ptr->channels++; #if defined(PNG_READ_FILLER_SUPPORTED) /* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */ if ((png_ptr->transformations & PNG_FILLER) && ((info_ptr->color_type == PNG_COLOR_TYPE_RGB) || (info_ptr->color_type == PNG_COLOR_TYPE_GRAY))) { info_ptr->channels++; /* if adding a true alpha channel not just filler */ #if !defined(PNG_1_0_X) if (png_ptr->transformations & PNG_ADD_ALPHA) info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; #endif } #endif #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \ defined(PNG_READ_USER_TRANSFORM_SUPPORTED) if(png_ptr->transformations & PNG_USER_TRANSFORM) { if(info_ptr->bit_depth < png_ptr->user_transform_depth) info_ptr->bit_depth = png_ptr->user_transform_depth; if(info_ptr->channels < png_ptr->user_transform_channels) info_ptr->channels = png_ptr->user_transform_channels; } #endif info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth); info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,info_ptr->width); #if !defined(PNG_READ_EXPAND_SUPPORTED) if(png_ptr) return; #endif } /* Transform the row. The order of transformations is significant, * and is very touchy. If you add a transformation, take care to * decide how it fits in with the other transformations here. */ void /* PRIVATE */ png_do_read_transformations(png_structp png_ptr) { png_debug(1, "in png_do_read_transformations\n"); #if !defined(PNG_USELESS_TESTS_SUPPORTED) if (png_ptr->row_buf == NULL) { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char msg[50]; sprintf(msg, "NULL row buffer for row %ld, pass %d", png_ptr->row_number, png_ptr->pass); png_error(png_ptr, msg); #else png_error(png_ptr, "NULL row buffer"); #endif } #endif #if defined(PNG_READ_EXPAND_SUPPORTED) if (png_ptr->transformations & PNG_EXPAND) { if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE) { png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->palette, png_ptr->trans, png_ptr->num_trans); } else { if (png_ptr->num_trans) png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, &(png_ptr->trans_values)); else png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, NULL); } } #endif #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_STRIP_ALPHA) png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, PNG_FLAG_FILLER_AFTER); #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) if (png_ptr->transformations & PNG_RGB_TO_GRAY) { int rgb_error = png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info), png_ptr->row_buf + 1); if(rgb_error) { png_ptr->rgb_to_gray_status=1; if(png_ptr->transformations == PNG_RGB_TO_GRAY_WARN) png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel"); if(png_ptr->transformations == PNG_RGB_TO_GRAY_ERR) png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel"); } } #endif /* From Andreas Dilger e-mail to png-implement, 26 March 1998: In most cases, the "simple transparency" should be done prior to doing gray-to-RGB, or you will have to test 3x as many bytes to check if a pixel is transparent. You would also need to make sure that the transparency information is upgraded to RGB. To summarize, the current flow is: - Gray + simple transparency -> compare 1 or 2 gray bytes and composite with background "in place" if transparent, convert to RGB if necessary - Gray + alpha -> composite with gray background and remove alpha bytes, convert to RGB if necessary To support RGB backgrounds for gray images we need: - Gray + simple transparency -> convert to RGB + simple transparency, compare 3 or 6 bytes and composite with background "in place" if transparent (3x compare/pixel compared to doing composite with gray bkgrnd) - Gray + alpha -> convert to RGB + alpha, composite with background and remove alpha bytes (3x float operations/pixel compared with composite on gray background) Greg's change will do this. The reason it wasn't done before is for performance, as this increases the per-pixel operations. If we would check in advance if the background was gray or RGB, and position the gray-to-RGB transform appropriately, then it would save a lot of work/time. */ #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) /* if gray -> RGB, do so now only if background is non-gray; else do later * for performance reasons */ if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY)) png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) if ((png_ptr->transformations & PNG_BACKGROUND) && ((png_ptr->num_trans != 0 ) || (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1, &(png_ptr->trans_values), &(png_ptr->background) #if defined(PNG_READ_GAMMA_SUPPORTED) , &(png_ptr->background_1), png_ptr->gamma_table, png_ptr->gamma_from_1, png_ptr->gamma_to_1, png_ptr->gamma_16_table, png_ptr->gamma_16_from_1, png_ptr->gamma_16_to_1, png_ptr->gamma_shift #endif ); #endif #if defined(PNG_READ_GAMMA_SUPPORTED) if ((png_ptr->transformations & PNG_GAMMA) && #if defined(PNG_READ_BACKGROUND_SUPPORTED) !((png_ptr->transformations & PNG_BACKGROUND) && ((png_ptr->num_trans != 0) || (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) && #endif (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)) png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->gamma_table, png_ptr->gamma_16_table, png_ptr->gamma_shift); #endif #if defined(PNG_READ_16_TO_8_SUPPORTED) if (png_ptr->transformations & PNG_16_TO_8) png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_DITHER_SUPPORTED) if (png_ptr->transformations & PNG_DITHER) { png_do_dither((png_row_infop)&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->palette_lookup, png_ptr->dither_index); if(png_ptr->row_info.rowbytes == (png_uint_32)0) png_error(png_ptr, "png_do_dither returned rowbytes=0"); } #endif #if defined(PNG_READ_INVERT_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_MONO) png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_SHIFT_SUPPORTED) if (png_ptr->transformations & PNG_SHIFT) png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1, &(png_ptr->shift)); #endif #if defined(PNG_READ_PACK_SUPPORTED) if (png_ptr->transformations & PNG_PACK) png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_BGR_SUPPORTED) if (png_ptr->transformations & PNG_BGR) png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) /* if gray -> RGB, do so now only if we did not do so above */ if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && (png_ptr->mode & PNG_BACKGROUND_IS_GRAY)) png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_FILLER_SUPPORTED) if (png_ptr->transformations & PNG_FILLER) png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, (png_uint_32)png_ptr->filler, png_ptr->flags); #endif #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_ALPHA) png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_SWAP_ALPHA) png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_SWAP_SUPPORTED) if (png_ptr->transformations & PNG_SWAP_BYTES) png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) if (png_ptr->transformations & PNG_USER_TRANSFORM) { if(png_ptr->read_user_transform_fn != NULL) (*(png_ptr->read_user_transform_fn)) /* user read transform function */ (png_ptr, /* png_ptr */ &(png_ptr->row_info), /* row_info: */ /* png_uint_32 width; width of row */ /* png_uint_32 rowbytes; number of bytes in row */ /* png_byte color_type; color type of pixels */ /* png_byte bit_depth; bit depth of samples */ /* png_byte channels; number of channels (1-4) */ /* png_byte pixel_depth; bits per pixel (depth*channels) */ png_ptr->row_buf + 1); /* start of pixel data for row */ #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) if(png_ptr->user_transform_depth) png_ptr->row_info.bit_depth = png_ptr->user_transform_depth; if(png_ptr->user_transform_channels) png_ptr->row_info.channels = png_ptr->user_transform_channels; #endif png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth * png_ptr->row_info.channels); png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->row_info.width); } #endif } #if defined(PNG_READ_PACK_SUPPORTED) /* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel, * without changing the actual values. Thus, if you had a row with * a bit depth of 1, you would end up with bytes that only contained * the numbers 0 or 1. If you would rather they contain 0 and 255, use * png_do_shift() after this. */ void /* PRIVATE */ png_do_unpack(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_unpack\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL && row_info->bit_depth < 8) #else if (row_info->bit_depth < 8) #endif { png_uint_32 i; png_uint_32 row_width=row_info->width; switch (row_info->bit_depth) { case 1: { png_bytep sp = row + (png_size_t)((row_width - 1) >> 3); png_bytep dp = row + (png_size_t)row_width - 1; png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07); for (i = 0; i < row_width; i++) { *dp = (png_byte)((*sp >> shift) & 0x01); if (shift == 7) { shift = 0; sp--; } else shift++; dp--; } break; } case 2: { png_bytep sp = row + (png_size_t)((row_width - 1) >> 2); png_bytep dp = row + (png_size_t)row_width - 1; png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); for (i = 0; i < row_width; i++) { *dp = (png_byte)((*sp >> shift) & 0x03); if (shift == 6) { shift = 0; sp--; } else shift += 2; dp--; } break; } case 4: { png_bytep sp = row + (png_size_t)((row_width - 1) >> 1); png_bytep dp = row + (png_size_t)row_width - 1; png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2); for (i = 0; i < row_width; i++) { *dp = (png_byte)((*sp >> shift) & 0x0f); if (shift == 4) { shift = 0; sp--; } else shift = 4; dp--; } break; } } row_info->bit_depth = 8; row_info->pixel_depth = (png_byte)(8 * row_info->channels); row_info->rowbytes = row_width * row_info->channels; } } #endif #if defined(PNG_READ_SHIFT_SUPPORTED) /* Reverse the effects of png_do_shift. This routine merely shifts the * pixels back to their significant bits values. Thus, if you have * a row of bit depth 8, but only 5 are significant, this will shift * the values back to 0 through 31. */ void /* PRIVATE */ png_do_unshift(png_row_infop row_info, png_bytep row, png_color_8p sig_bits) { png_debug(1, "in png_do_unshift\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && sig_bits != NULL && #endif row_info->color_type != PNG_COLOR_TYPE_PALETTE) { int shift[4]; int channels = 0; int c; png_uint_16 value = 0; png_uint_32 row_width = row_info->width; if (row_info->color_type & PNG_COLOR_MASK_COLOR) { shift[channels++] = row_info->bit_depth - sig_bits->red; shift[channels++] = row_info->bit_depth - sig_bits->green; shift[channels++] = row_info->bit_depth - sig_bits->blue; } else { shift[channels++] = row_info->bit_depth - sig_bits->gray; } if (row_info->color_type & PNG_COLOR_MASK_ALPHA) { shift[channels++] = row_info->bit_depth - sig_bits->alpha; } for (c = 0; c < channels; c++) { if (shift[c] <= 0) shift[c] = 0; else value = 1; } if (!value) return; switch (row_info->bit_depth) { case 2: { png_bytep bp; png_uint_32 i; png_uint_32 istop = row_info->rowbytes; for (bp = row, i = 0; i < istop; i++) { *bp >>= 1; *bp++ &= 0x55; } break; } case 4: { png_bytep bp = row; png_uint_32 i; png_uint_32 istop = row_info->rowbytes; png_byte mask = (png_byte)((((int)0xf0 >> shift[0]) & (int)0xf0) | (png_byte)((int)0xf >> shift[0])); for (i = 0; i < istop; i++) { *bp >>= shift[0]; *bp++ &= mask; } break; } case 8: { png_bytep bp = row; png_uint_32 i; png_uint_32 istop = row_width * channels; for (i = 0; i < istop; i++) { *bp++ >>= shift[i%channels]; } break; } case 16: { png_bytep bp = row; png_uint_32 i; png_uint_32 istop = channels * row_width; for (i = 0; i < istop; i++) { value = (png_uint_16)((*bp << 8) + *(bp + 1)); value >>= shift[i%channels]; *bp++ = (png_byte)(value >> 8); *bp++ = (png_byte)(value & 0xff); } break; } } } } #endif #if defined(PNG_READ_16_TO_8_SUPPORTED) /* chop rows of bit depth 16 down to 8 */ void /* PRIVATE */ png_do_chop(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_chop\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL && row_info->bit_depth == 16) #else if (row_info->bit_depth == 16) #endif { png_bytep sp = row; png_bytep dp = row; png_uint_32 i; png_uint_32 istop = row_info->width * row_info->channels; for (i = 0; i> 8)) >> 8; * * Approximate calculation with shift/add instead of multiply/divide: * *dp = ((((png_uint_32)(*sp) << 8) | * (png_uint_32)((int)(*(sp + 1)) - *sp)) + 128) >> 8; * * What we actually do to avoid extra shifting and conversion: */ *dp = *sp + ((((int)(*(sp + 1)) - *sp) > 128) ? 1 : 0); #else /* Simply discard the low order byte */ *dp = *sp; #endif } row_info->bit_depth = 8; row_info->pixel_depth = (png_byte)(8 * row_info->channels); row_info->rowbytes = row_info->width * row_info->channels; } } #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) void /* PRIVATE */ png_do_read_swap_alpha(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_read_swap_alpha\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { png_uint_32 row_width = row_info->width; if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { /* This converts from RGBA to ARGB */ if (row_info->bit_depth == 8) { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_byte save; png_uint_32 i; for (i = 0; i < row_width; i++) { save = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = save; } } /* This converts from RRGGBBAA to AARRGGBB */ else { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_byte save[2]; png_uint_32 i; for (i = 0; i < row_width; i++) { save[0] = *(--sp); save[1] = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = save[0]; *(--dp) = save[1]; } } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { /* This converts from GA to AG */ if (row_info->bit_depth == 8) { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_byte save; png_uint_32 i; for (i = 0; i < row_width; i++) { save = *(--sp); *(--dp) = *(--sp); *(--dp) = save; } } /* This converts from GGAA to AAGG */ else { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_byte save[2]; png_uint_32 i; for (i = 0; i < row_width; i++) { save[0] = *(--sp); save[1] = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = save[0]; *(--dp) = save[1]; } } } } } #endif #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) void /* PRIVATE */ png_do_read_invert_alpha(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_read_invert_alpha\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { png_uint_32 row_width = row_info->width; if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { /* This inverts the alpha channel in RGBA */ if (row_info->bit_depth == 8) { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_uint_32 i; for (i = 0; i < row_width; i++) { *(--dp) = (png_byte)(255 - *(--sp)); /* This does nothing: *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); We can replace it with: */ sp-=3; dp=sp; } } /* This inverts the alpha channel in RRGGBBAA */ else { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_uint_32 i; for (i = 0; i < row_width; i++) { *(--dp) = (png_byte)(255 - *(--sp)); *(--dp) = (png_byte)(255 - *(--sp)); /* This does nothing: *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); We can replace it with: */ sp-=6; dp=sp; } } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { /* This inverts the alpha channel in GA */ if (row_info->bit_depth == 8) { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_uint_32 i; for (i = 0; i < row_width; i++) { *(--dp) = (png_byte)(255 - *(--sp)); *(--dp) = *(--sp); } } /* This inverts the alpha channel in GGAA */ else { png_bytep sp = row + row_info->rowbytes; png_bytep dp = sp; png_uint_32 i; for (i = 0; i < row_width; i++) { *(--dp) = (png_byte)(255 - *(--sp)); *(--dp) = (png_byte)(255 - *(--sp)); /* *(--dp) = *(--sp); *(--dp) = *(--sp); */ sp-=2; dp=sp; } } } } } #endif #if defined(PNG_READ_FILLER_SUPPORTED) /* Add filler channel if we have RGB color */ void /* PRIVATE */ png_do_read_filler(png_row_infop row_info, png_bytep row, png_uint_32 filler, png_uint_32 flags) { png_uint_32 i; png_uint_32 row_width = row_info->width; png_byte hi_filler = (png_byte)((filler>>8) & 0xff); png_byte lo_filler = (png_byte)(filler & 0xff); png_debug(1, "in png_do_read_filler\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif row_info->color_type == PNG_COLOR_TYPE_GRAY) { if(row_info->bit_depth == 8) { /* This changes the data from G to GX */ if (flags & PNG_FLAG_FILLER_AFTER) { png_bytep sp = row + (png_size_t)row_width; png_bytep dp = sp + (png_size_t)row_width; for (i = 1; i < row_width; i++) { *(--dp) = lo_filler; *(--dp) = *(--sp); } *(--dp) = lo_filler; row_info->channels = 2; row_info->pixel_depth = 16; row_info->rowbytes = row_width * 2; } /* This changes the data from G to XG */ else { png_bytep sp = row + (png_size_t)row_width; png_bytep dp = sp + (png_size_t)row_width; for (i = 0; i < row_width; i++) { *(--dp) = *(--sp); *(--dp) = lo_filler; } row_info->channels = 2; row_info->pixel_depth = 16; row_info->rowbytes = row_width * 2; } } else if(row_info->bit_depth == 16) { /* This changes the data from GG to GGXX */ if (flags & PNG_FLAG_FILLER_AFTER) { png_bytep sp = row + (png_size_t)row_width * 2; png_bytep dp = sp + (png_size_t)row_width * 2; for (i = 1; i < row_width; i++) { *(--dp) = hi_filler; *(--dp) = lo_filler; *(--dp) = *(--sp); *(--dp) = *(--sp); } *(--dp) = hi_filler; *(--dp) = lo_filler; row_info->channels = 2; row_info->pixel_depth = 32; row_info->rowbytes = row_width * 4; } /* This changes the data from GG to XXGG */ else { png_bytep sp = row + (png_size_t)row_width * 2; png_bytep dp = sp + (png_size_t)row_width * 2; for (i = 0; i < row_width; i++) { *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = hi_filler; *(--dp) = lo_filler; } row_info->channels = 2; row_info->pixel_depth = 32; row_info->rowbytes = row_width * 4; } } } /* COLOR_TYPE == GRAY */ else if (row_info->color_type == PNG_COLOR_TYPE_RGB) { if(row_info->bit_depth == 8) { /* This changes the data from RGB to RGBX */ if (flags & PNG_FLAG_FILLER_AFTER) { png_bytep sp = row + (png_size_t)row_width * 3; png_bytep dp = sp + (png_size_t)row_width; for (i = 1; i < row_width; i++) { *(--dp) = lo_filler; *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); } *(--dp) = lo_filler; row_info->channels = 4; row_info->pixel_depth = 32; row_info->rowbytes = row_width * 4; } /* This changes the data from RGB to XRGB */ else { png_bytep sp = row + (png_size_t)row_width * 3; png_bytep dp = sp + (png_size_t)row_width; for (i = 0; i < row_width; i++) { *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = lo_filler; } row_info->channels = 4; row_info->pixel_depth = 32; row_info->rowbytes = row_width * 4; } } else if(row_info->bit_depth == 16) { /* This changes the data from RRGGBB to RRGGBBXX */ if (flags & PNG_FLAG_FILLER_AFTER) { png_bytep sp = row + (png_size_t)row_width * 6; png_bytep dp = sp + (png_size_t)row_width * 2; for (i = 1; i < row_width; i++) { *(--dp) = hi_filler; *(--dp) = lo_filler; *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); } *(--dp) = hi_filler; *(--dp) = lo_filler; row_info->channels = 4; row_info->pixel_depth = 64; row_info->rowbytes = row_width * 8; } /* This changes the data from RRGGBB to XXRRGGBB */ else { png_bytep sp = row + (png_size_t)row_width * 6; png_bytep dp = sp + (png_size_t)row_width * 2; for (i = 0; i < row_width; i++) { *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = *(--sp); *(--dp) = hi_filler; *(--dp) = lo_filler; } row_info->channels = 4; row_info->pixel_depth = 64; row_info->rowbytes = row_width * 8; } } } /* COLOR_TYPE == RGB */ } #endif #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) /* expand grayscale files to RGB, with or without alpha */ void /* PRIVATE */ png_do_gray_to_rgb(png_row_infop row_info, png_bytep row) { png_uint_32 i; png_uint_32 row_width = row_info->width; png_debug(1, "in png_do_gray_to_rgb\n"); if (row_info->bit_depth >= 8 && #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif !(row_info->color_type & PNG_COLOR_MASK_COLOR)) { if (row_info->color_type == PNG_COLOR_TYPE_GRAY) { if (row_info->bit_depth == 8) { png_bytep sp = row + (png_size_t)row_width - 1; png_bytep dp = sp + (png_size_t)row_width * 2; for (i = 0; i < row_width; i++) { *(dp--) = *sp; *(dp--) = *sp; *(dp--) = *(sp--); } } else { png_bytep sp = row + (png_size_t)row_width * 2 - 1; png_bytep dp = sp + (png_size_t)row_width * 4; for (i = 0; i < row_width; i++) { *(dp--) = *sp; *(dp--) = *(sp - 1); *(dp--) = *sp; *(dp--) = *(sp - 1); *(dp--) = *(sp--); *(dp--) = *(sp--); } } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { if (row_info->bit_depth == 8) { png_bytep sp = row + (png_size_t)row_width * 2 - 1; png_bytep dp = sp + (png_size_t)row_width * 2; for (i = 0; i < row_width; i++) { *(dp--) = *(sp--); *(dp--) = *sp; *(dp--) = *sp; *(dp--) = *(sp--); } } else { png_bytep sp = row + (png_size_t)row_width * 4 - 1; png_bytep dp = sp + (png_size_t)row_width * 4; for (i = 0; i < row_width; i++) { *(dp--) = *(sp--); *(dp--) = *(sp--); *(dp--) = *sp; *(dp--) = *(sp - 1); *(dp--) = *sp; *(dp--) = *(sp - 1); *(dp--) = *(sp--); *(dp--) = *(sp--); } } } row_info->channels += (png_byte)2; row_info->color_type |= PNG_COLOR_MASK_COLOR; row_info->pixel_depth = (png_byte)(row_info->channels * row_info->bit_depth); row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); } } #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) /* reduce RGB files to grayscale, with or without alpha * using the equation given in Poynton's ColorFAQ at * * Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net * * Y = 0.212671 * R + 0.715160 * G + 0.072169 * B * * We approximate this with * * Y = 0.21268 * R + 0.7151 * G + 0.07217 * B * * which can be expressed with integers as * * Y = (6969 * R + 23434 * G + 2365 * B)/32768 * * The calculation is to be done in a linear colorspace. * * Other integer coefficents can be used via png_set_rgb_to_gray(). */ int /* PRIVATE */ png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row) { png_uint_32 i; png_uint_32 row_width = row_info->width; int rgb_error = 0; png_debug(1, "in png_do_rgb_to_gray\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif (row_info->color_type & PNG_COLOR_MASK_COLOR)) { png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff; png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff; png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff; if (row_info->color_type == PNG_COLOR_TYPE_RGB) { if (row_info->bit_depth == 8) { #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL) { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_byte red = png_ptr->gamma_to_1[*(sp++)]; png_byte green = png_ptr->gamma_to_1[*(sp++)]; png_byte blue = png_ptr->gamma_to_1[*(sp++)]; if(red != green || red != blue) { rgb_error |= 1; *(dp++) = png_ptr->gamma_from_1[ (rc*red+gc*green+bc*blue)>>15]; } else *(dp++) = *(sp-1); } } else #endif { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_byte red = *(sp++); png_byte green = *(sp++); png_byte blue = *(sp++); if(red != green || red != blue) { rgb_error |= 1; *(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>15); } else *(dp++) = *(sp-1); } } } else /* RGB bit_depth == 16 */ { #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL) { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_uint_16 red, green, blue, w; red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; if(red == green && red == blue) w = red; else { png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> png_ptr->gamma_shift][red>>8]; png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >> png_ptr->gamma_shift][green>>8]; png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >> png_ptr->gamma_shift][blue>>8]; png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1 + bc*blue_1)>>15); w = png_ptr->gamma_16_from_1[(gray16&0xff) >> png_ptr->gamma_shift][gray16 >> 8]; rgb_error |= 1; } *(dp++) = (png_byte)((w>>8) & 0xff); *(dp++) = (png_byte)(w & 0xff); } } else #endif { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_uint_16 red, green, blue, gray16; red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; if(red != green || red != blue) rgb_error |= 1; gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); *(dp++) = (png_byte)((gray16>>8) & 0xff); *(dp++) = (png_byte)(gray16 & 0xff); } } } } if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { if (row_info->bit_depth == 8) { #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL) { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_byte red = png_ptr->gamma_to_1[*(sp++)]; png_byte green = png_ptr->gamma_to_1[*(sp++)]; png_byte blue = png_ptr->gamma_to_1[*(sp++)]; if(red != green || red != blue) rgb_error |= 1; *(dp++) = png_ptr->gamma_from_1 [(rc*red + gc*green + bc*blue)>>15]; *(dp++) = *(sp++); /* alpha */ } } else #endif { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_byte red = *(sp++); png_byte green = *(sp++); png_byte blue = *(sp++); if(red != green || red != blue) rgb_error |= 1; *(dp++) = (png_byte)((rc*red + gc*green + bc*blue)>>15); *(dp++) = *(sp++); /* alpha */ } } } else /* RGBA bit_depth == 16 */ { #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL) { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_uint_16 red, green, blue, w; red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; if(red == green && red == blue) w = red; else { png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> png_ptr->gamma_shift][red>>8]; png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >> png_ptr->gamma_shift][green>>8]; png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >> png_ptr->gamma_shift][blue>>8]; png_uint_16 gray16 = (png_uint_16)((rc * red_1 + gc * green_1 + bc * blue_1)>>15); w = png_ptr->gamma_16_from_1[(gray16&0xff) >> png_ptr->gamma_shift][gray16 >> 8]; rgb_error |= 1; } *(dp++) = (png_byte)((w>>8) & 0xff); *(dp++) = (png_byte)(w & 0xff); *(dp++) = *(sp++); /* alpha */ *(dp++) = *(sp++); } } else #endif { png_bytep sp = row; png_bytep dp = row; for (i = 0; i < row_width; i++) { png_uint_16 red, green, blue, gray16; red = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; green = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; blue = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; if(red != green || red != blue) rgb_error |= 1; gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); *(dp++) = (png_byte)((gray16>>8) & 0xff); *(dp++) = (png_byte)(gray16 & 0xff); *(dp++) = *(sp++); /* alpha */ *(dp++) = *(sp++); } } } } row_info->channels -= (png_byte)2; row_info->color_type &= ~PNG_COLOR_MASK_COLOR; row_info->pixel_depth = (png_byte)(row_info->channels * row_info->bit_depth); row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); } return rgb_error; } #endif /* Build a grayscale palette. Palette is assumed to be 1 << bit_depth * large of png_color. This lets grayscale images be treated as * paletted. Most useful for gamma correction and simplification * of code. */ void PNGAPI png_build_grayscale_palette(int bit_depth, png_colorp palette) { int num_palette; int color_inc; int i; int v; png_debug(1, "in png_do_build_grayscale_palette\n"); if (palette == NULL) return; switch (bit_depth) { case 1: num_palette = 2; color_inc = 0xff; break; case 2: num_palette = 4; color_inc = 0x55; break; case 4: num_palette = 16; color_inc = 0x11; break; case 8: num_palette = 256; color_inc = 1; break; default: num_palette = 0; color_inc = 0; break; } for (i = 0, v = 0; i < num_palette; i++, v += color_inc) { palette[i].red = (png_byte)v; palette[i].green = (png_byte)v; palette[i].blue = (png_byte)v; } } /* This function is currently unused. Do we really need it? */ #if defined(PNG_READ_DITHER_SUPPORTED) && defined(PNG_CORRECT_PALETTE_SUPPORTED) void /* PRIVATE */ png_correct_palette(png_structp png_ptr, png_colorp palette, int num_palette) { png_debug(1, "in png_correct_palette\n"); #if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND)) { png_color back, back_1; if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) { back.red = png_ptr->gamma_table[png_ptr->background.red]; back.green = png_ptr->gamma_table[png_ptr->background.green]; back.blue = png_ptr->gamma_table[png_ptr->background.blue]; back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; } else { double g; g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma); if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN || fabs(g - 1.0) < PNG_GAMMA_THRESHOLD) { back.red = png_ptr->background.red; back.green = png_ptr->background.green; back.blue = png_ptr->background.blue; } else { back.red = (png_byte)(pow((double)png_ptr->background.red/255, g) * 255.0 + 0.5); back.green = (png_byte)(pow((double)png_ptr->background.green/255, g) * 255.0 + 0.5); back.blue = (png_byte)(pow((double)png_ptr->background.blue/255, g) * 255.0 + 0.5); } g = 1.0 / png_ptr->background_gamma; back_1.red = (png_byte)(pow((double)png_ptr->background.red/255, g) * 255.0 + 0.5); back_1.green = (png_byte)(pow((double)png_ptr->background.green/255, g) * 255.0 + 0.5); back_1.blue = (png_byte)(pow((double)png_ptr->background.blue/255, g) * 255.0 + 0.5); } if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { png_uint_32 i; for (i = 0; i < (png_uint_32)num_palette; i++) { if (i < png_ptr->num_trans && png_ptr->trans[i] == 0) { palette[i] = back; } else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff) { png_byte v, w; v = png_ptr->gamma_to_1[png_ptr->palette[i].red]; png_composite(w, v, png_ptr->trans[i], back_1.red); palette[i].red = png_ptr->gamma_from_1[w]; v = png_ptr->gamma_to_1[png_ptr->palette[i].green]; png_composite(w, v, png_ptr->trans[i], back_1.green); palette[i].green = png_ptr->gamma_from_1[w]; v = png_ptr->gamma_to_1[png_ptr->palette[i].blue]; png_composite(w, v, png_ptr->trans[i], back_1.blue); palette[i].blue = png_ptr->gamma_from_1[w]; } else { palette[i].red = png_ptr->gamma_table[palette[i].red]; palette[i].green = png_ptr->gamma_table[palette[i].green]; palette[i].blue = png_ptr->gamma_table[palette[i].blue]; } } } else { int i; for (i = 0; i < num_palette; i++) { if (palette[i].red == (png_byte)png_ptr->trans_values.gray) { palette[i] = back; } else { palette[i].red = png_ptr->gamma_table[palette[i].red]; palette[i].green = png_ptr->gamma_table[palette[i].green]; palette[i].blue = png_ptr->gamma_table[palette[i].blue]; } } } } else #endif #if defined(PNG_READ_GAMMA_SUPPORTED) if (png_ptr->transformations & PNG_GAMMA) { int i; for (i = 0; i < num_palette; i++) { palette[i].red = png_ptr->gamma_table[palette[i].red]; palette[i].green = png_ptr->gamma_table[palette[i].green]; palette[i].blue = png_ptr->gamma_table[palette[i].blue]; } } #if defined(PNG_READ_BACKGROUND_SUPPORTED) else #endif #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->transformations & PNG_BACKGROUND) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { png_color back; back.red = (png_byte)png_ptr->background.red; back.green = (png_byte)png_ptr->background.green; back.blue = (png_byte)png_ptr->background.blue; for (i = 0; i < (int)png_ptr->num_trans; i++) { if (png_ptr->trans[i] == 0) { palette[i].red = back.red; palette[i].green = back.green; palette[i].blue = back.blue; } else if (png_ptr->trans[i] != 0xff) { png_composite(palette[i].red, png_ptr->palette[i].red, png_ptr->trans[i], back.red); png_composite(palette[i].green, png_ptr->palette[i].green, png_ptr->trans[i], back.green); png_composite(palette[i].blue, png_ptr->palette[i].blue, png_ptr->trans[i], back.blue); } } } else /* assume grayscale palette (what else could it be?) */ { int i; for (i = 0; i < num_palette; i++) { if (i == (png_byte)png_ptr->trans_values.gray) { palette[i].red = (png_byte)png_ptr->background.red; palette[i].green = (png_byte)png_ptr->background.green; palette[i].blue = (png_byte)png_ptr->background.blue; } } } } #endif } #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) /* Replace any alpha or transparency with the supplied background color. * "background" is already in the screen gamma, while "background_1" is * at a gamma of 1.0. Paletted files have already been taken care of. */ void /* PRIVATE */ png_do_background(png_row_infop row_info, png_bytep row, png_color_16p trans_values, png_color_16p background #if defined(PNG_READ_GAMMA_SUPPORTED) , png_color_16p background_1, png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, png_uint_16pp gamma_16_to_1, int gamma_shift #endif ) { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width=row_info->width; int shift; png_debug(1, "in png_do_background\n"); if (background != NULL && #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif (!(row_info->color_type & PNG_COLOR_MASK_ALPHA) || (row_info->color_type != PNG_COLOR_TYPE_PALETTE && trans_values))) { switch (row_info->color_type) { case PNG_COLOR_TYPE_GRAY: { switch (row_info->bit_depth) { case 1: { sp = row; shift = 7; for (i = 0; i < row_width; i++) { if ((png_uint_16)((*sp >> shift) & 0x01) == trans_values->gray) { *sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); *sp |= (png_byte)(background->gray << shift); } if (!shift) { shift = 7; sp++; } else shift--; } break; } case 2: { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_table != NULL) { sp = row; shift = 6; for (i = 0; i < row_width; i++) { if ((png_uint_16)((*sp >> shift) & 0x03) == trans_values->gray) { *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); *sp |= (png_byte)(background->gray << shift); } else { png_byte p = (png_byte)((*sp >> shift) & 0x03); png_byte g = (png_byte)((gamma_table [p | (p << 2) | (p << 4) | (p << 6)] >> 6) & 0x03); *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); *sp |= (png_byte)(g << shift); } if (!shift) { shift = 6; sp++; } else shift -= 2; } } else #endif { sp = row; shift = 6; for (i = 0; i < row_width; i++) { if ((png_uint_16)((*sp >> shift) & 0x03) == trans_values->gray) { *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); *sp |= (png_byte)(background->gray << shift); } if (!shift) { shift = 6; sp++; } else shift -= 2; } } break; } case 4: { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_table != NULL) { sp = row; shift = 4; for (i = 0; i < row_width; i++) { if ((png_uint_16)((*sp >> shift) & 0x0f) == trans_values->gray) { *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); *sp |= (png_byte)(background->gray << shift); } else { png_byte p = (png_byte)((*sp >> shift) & 0x0f); png_byte g = (png_byte)((gamma_table[p | (p << 4)] >> 4) & 0x0f); *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); *sp |= (png_byte)(g << shift); } if (!shift) { shift = 4; sp++; } else shift -= 4; } } else #endif { sp = row; shift = 4; for (i = 0; i < row_width; i++) { if ((png_uint_16)((*sp >> shift) & 0x0f) == trans_values->gray) { *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); *sp |= (png_byte)(background->gray << shift); } if (!shift) { shift = 4; sp++; } else shift -= 4; } } break; } case 8: { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_table != NULL) { sp = row; for (i = 0; i < row_width; i++, sp++) { if (*sp == trans_values->gray) { *sp = (png_byte)background->gray; } else { *sp = gamma_table[*sp]; } } } else #endif { sp = row; for (i = 0; i < row_width; i++, sp++) { if (*sp == trans_values->gray) { *sp = (png_byte)background->gray; } } } break; } case 16: { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_16 != NULL) { sp = row; for (i = 0; i < row_width; i++, sp += 2) { png_uint_16 v; v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); if (v == trans_values->gray) { /* background is already in screen gamma */ *sp = (png_byte)((background->gray >> 8) & 0xff); *(sp + 1) = (png_byte)(background->gray & 0xff); } else { v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); } } } else #endif { sp = row; for (i = 0; i < row_width; i++, sp += 2) { png_uint_16 v; v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); if (v == trans_values->gray) { *sp = (png_byte)((background->gray >> 8) & 0xff); *(sp + 1) = (png_byte)(background->gray & 0xff); } } } break; } } break; } case PNG_COLOR_TYPE_RGB: { if (row_info->bit_depth == 8) { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_table != NULL) { sp = row; for (i = 0; i < row_width; i++, sp += 3) { if (*sp == trans_values->red && *(sp + 1) == trans_values->green && *(sp + 2) == trans_values->blue) { *sp = (png_byte)background->red; *(sp + 1) = (png_byte)background->green; *(sp + 2) = (png_byte)background->blue; } else { *sp = gamma_table[*sp]; *(sp + 1) = gamma_table[*(sp + 1)]; *(sp + 2) = gamma_table[*(sp + 2)]; } } } else #endif { sp = row; for (i = 0; i < row_width; i++, sp += 3) { if (*sp == trans_values->red && *(sp + 1) == trans_values->green && *(sp + 2) == trans_values->blue) { *sp = (png_byte)background->red; *(sp + 1) = (png_byte)background->green; *(sp + 2) = (png_byte)background->blue; } } } } else /* if (row_info->bit_depth == 16) */ { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_16 != NULL) { sp = row; for (i = 0; i < row_width; i++, sp += 6) { png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1)); png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); if (r == trans_values->red && g == trans_values->green && b == trans_values->blue) { /* background is already in screen gamma */ *sp = (png_byte)((background->red >> 8) & 0xff); *(sp + 1) = (png_byte)(background->red & 0xff); *(sp + 2) = (png_byte)((background->green >> 8) & 0xff); *(sp + 3) = (png_byte)(background->green & 0xff); *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff); *(sp + 5) = (png_byte)(background->blue & 0xff); } else { png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)]; *(sp + 2) = (png_byte)((v >> 8) & 0xff); *(sp + 3) = (png_byte)(v & 0xff); v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)]; *(sp + 4) = (png_byte)((v >> 8) & 0xff); *(sp + 5) = (png_byte)(v & 0xff); } } } else #endif { sp = row; for (i = 0; i < row_width; i++, sp += 6) { png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp+1)); png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); if (r == trans_values->red && g == trans_values->green && b == trans_values->blue) { *sp = (png_byte)((background->red >> 8) & 0xff); *(sp + 1) = (png_byte)(background->red & 0xff); *(sp + 2) = (png_byte)((background->green >> 8) & 0xff); *(sp + 3) = (png_byte)(background->green & 0xff); *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff); *(sp + 5) = (png_byte)(background->blue & 0xff); } } } } break; } case PNG_COLOR_TYPE_GRAY_ALPHA: { if (row_info->bit_depth == 8) { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_to_1 != NULL && gamma_from_1 != NULL && gamma_table != NULL) { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 2, dp++) { png_uint_16 a = *(sp + 1); if (a == 0xff) { *dp = gamma_table[*sp]; } else if (a == 0) { /* background is already in screen gamma */ *dp = (png_byte)background->gray; } else { png_byte v, w; v = gamma_to_1[*sp]; png_composite(w, v, a, background_1->gray); *dp = gamma_from_1[w]; } } } else #endif { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 2, dp++) { png_byte a = *(sp + 1); if (a == 0xff) { *dp = *sp; } #if defined(PNG_READ_GAMMA_SUPPORTED) else if (a == 0) { *dp = (png_byte)background->gray; } else { png_composite(*dp, *sp, a, background_1->gray); } #else *dp = (png_byte)background->gray; #endif } } } else /* if (png_ptr->bit_depth == 16) */ { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_16 != NULL && gamma_16_from_1 != NULL && gamma_16_to_1 != NULL) { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 4, dp += 2) { png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); if (a == (png_uint_16)0xffff) { png_uint_16 v; v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; *dp = (png_byte)((v >> 8) & 0xff); *(dp + 1) = (png_byte)(v & 0xff); } #if defined(PNG_READ_GAMMA_SUPPORTED) else if (a == 0) #else else #endif { /* background is already in screen gamma */ *dp = (png_byte)((background->gray >> 8) & 0xff); *(dp + 1) = (png_byte)(background->gray & 0xff); } #if defined(PNG_READ_GAMMA_SUPPORTED) else { png_uint_16 g, v, w; g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; png_composite_16(v, g, a, background_1->gray); w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8]; *dp = (png_byte)((w >> 8) & 0xff); *(dp + 1) = (png_byte)(w & 0xff); } #endif } } else #endif { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 4, dp += 2) { png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); if (a == (png_uint_16)0xffff) { png_memcpy(dp, sp, 2); } #if defined(PNG_READ_GAMMA_SUPPORTED) else if (a == 0) #else else #endif { *dp = (png_byte)((background->gray >> 8) & 0xff); *(dp + 1) = (png_byte)(background->gray & 0xff); } #if defined(PNG_READ_GAMMA_SUPPORTED) else { png_uint_16 g, v; g = (png_uint_16)(((*sp) << 8) + *(sp + 1)); png_composite_16(v, g, a, background_1->gray); *dp = (png_byte)((v >> 8) & 0xff); *(dp + 1) = (png_byte)(v & 0xff); } #endif } } } break; } case PNG_COLOR_TYPE_RGB_ALPHA: { if (row_info->bit_depth == 8) { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_to_1 != NULL && gamma_from_1 != NULL && gamma_table != NULL) { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 4, dp += 3) { png_byte a = *(sp + 3); if (a == 0xff) { *dp = gamma_table[*sp]; *(dp + 1) = gamma_table[*(sp + 1)]; *(dp + 2) = gamma_table[*(sp + 2)]; } else if (a == 0) { /* background is already in screen gamma */ *dp = (png_byte)background->red; *(dp + 1) = (png_byte)background->green; *(dp + 2) = (png_byte)background->blue; } else { png_byte v, w; v = gamma_to_1[*sp]; png_composite(w, v, a, background_1->red); *dp = gamma_from_1[w]; v = gamma_to_1[*(sp + 1)]; png_composite(w, v, a, background_1->green); *(dp + 1) = gamma_from_1[w]; v = gamma_to_1[*(sp + 2)]; png_composite(w, v, a, background_1->blue); *(dp + 2) = gamma_from_1[w]; } } } else #endif { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 4, dp += 3) { png_byte a = *(sp + 3); if (a == 0xff) { *dp = *sp; *(dp + 1) = *(sp + 1); *(dp + 2) = *(sp + 2); } else if (a == 0) { *dp = (png_byte)background->red; *(dp + 1) = (png_byte)background->green; *(dp + 2) = (png_byte)background->blue; } else { png_composite(*dp, *sp, a, background->red); png_composite(*(dp + 1), *(sp + 1), a, background->green); png_composite(*(dp + 2), *(sp + 2), a, background->blue); } } } } else /* if (row_info->bit_depth == 16) */ { #if defined(PNG_READ_GAMMA_SUPPORTED) if (gamma_16 != NULL && gamma_16_from_1 != NULL && gamma_16_to_1 != NULL) { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 8, dp += 6) { png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6)) << 8) + (png_uint_16)(*(sp + 7))); if (a == (png_uint_16)0xffff) { png_uint_16 v; v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; *dp = (png_byte)((v >> 8) & 0xff); *(dp + 1) = (png_byte)(v & 0xff); v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)]; *(dp + 2) = (png_byte)((v >> 8) & 0xff); *(dp + 3) = (png_byte)(v & 0xff); v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)]; *(dp + 4) = (png_byte)((v >> 8) & 0xff); *(dp + 5) = (png_byte)(v & 0xff); } else if (a == 0) { /* background is already in screen gamma */ *dp = (png_byte)((background->red >> 8) & 0xff); *(dp + 1) = (png_byte)(background->red & 0xff); *(dp + 2) = (png_byte)((background->green >> 8) & 0xff); *(dp + 3) = (png_byte)(background->green & 0xff); *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff); *(dp + 5) = (png_byte)(background->blue & 0xff); } else { png_uint_16 v, w, x; v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; png_composite_16(w, v, a, background_1->red); x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; *dp = (png_byte)((x >> 8) & 0xff); *(dp + 1) = (png_byte)(x & 0xff); v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)]; png_composite_16(w, v, a, background_1->green); x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; *(dp + 2) = (png_byte)((x >> 8) & 0xff); *(dp + 3) = (png_byte)(x & 0xff); v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)]; png_composite_16(w, v, a, background_1->blue); x = gamma_16_from_1[(w & 0xff) >> gamma_shift][w >> 8]; *(dp + 4) = (png_byte)((x >> 8) & 0xff); *(dp + 5) = (png_byte)(x & 0xff); } } } else #endif { sp = row; dp = row; for (i = 0; i < row_width; i++, sp += 8, dp += 6) { png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6)) << 8) + (png_uint_16)(*(sp + 7))); if (a == (png_uint_16)0xffff) { png_memcpy(dp, sp, 6); } else if (a == 0) { *dp = (png_byte)((background->red >> 8) & 0xff); *(dp + 1) = (png_byte)(background->red & 0xff); *(dp + 2) = (png_byte)((background->green >> 8) & 0xff); *(dp + 3) = (png_byte)(background->green & 0xff); *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff); *(dp + 5) = (png_byte)(background->blue & 0xff); } else { png_uint_16 v; png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1)); png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8) + *(sp + 3)); png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8) + *(sp + 5)); png_composite_16(v, r, a, background->red); *dp = (png_byte)((v >> 8) & 0xff); *(dp + 1) = (png_byte)(v & 0xff); png_composite_16(v, g, a, background->green); *(dp + 2) = (png_byte)((v >> 8) & 0xff); *(dp + 3) = (png_byte)(v & 0xff); png_composite_16(v, b, a, background->blue); *(dp + 4) = (png_byte)((v >> 8) & 0xff); *(dp + 5) = (png_byte)(v & 0xff); } } } } break; } } if (row_info->color_type & PNG_COLOR_MASK_ALPHA) { row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; row_info->channels--; row_info->pixel_depth = (png_byte)(row_info->channels * row_info->bit_depth); row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); } } } #endif #if defined(PNG_READ_GAMMA_SUPPORTED) /* Gamma correct the image, avoiding the alpha channel. Make sure * you do this after you deal with the transparency issue on grayscale * or RGB images. If your bit depth is 8, use gamma_table, if it * is 16, use gamma_16_table and gamma_shift. Build these with * build_gamma_table(). */ void /* PRIVATE */ png_do_gamma(png_row_infop row_info, png_bytep row, png_bytep gamma_table, png_uint_16pp gamma_16_table, int gamma_shift) { png_bytep sp; png_uint_32 i; png_uint_32 row_width=row_info->width; png_debug(1, "in png_do_gamma\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif ((row_info->bit_depth <= 8 && gamma_table != NULL) || (row_info->bit_depth == 16 && gamma_16_table != NULL))) { switch (row_info->color_type) { case PNG_COLOR_TYPE_RGB: { if (row_info->bit_depth == 8) { sp = row; for (i = 0; i < row_width; i++) { *sp = gamma_table[*sp]; sp++; *sp = gamma_table[*sp]; sp++; *sp = gamma_table[*sp]; sp++; } } else /* if (row_info->bit_depth == 16) */ { sp = row; for (i = 0; i < row_width; i++) { png_uint_16 v; v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 2; v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 2; v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 2; } } break; } case PNG_COLOR_TYPE_RGB_ALPHA: { if (row_info->bit_depth == 8) { sp = row; for (i = 0; i < row_width; i++) { *sp = gamma_table[*sp]; sp++; *sp = gamma_table[*sp]; sp++; *sp = gamma_table[*sp]; sp++; sp++; } } else /* if (row_info->bit_depth == 16) */ { sp = row; for (i = 0; i < row_width; i++) { png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 2; v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 2; v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 4; } } break; } case PNG_COLOR_TYPE_GRAY_ALPHA: { if (row_info->bit_depth == 8) { sp = row; for (i = 0; i < row_width; i++) { *sp = gamma_table[*sp]; sp += 2; } } else /* if (row_info->bit_depth == 16) */ { sp = row; for (i = 0; i < row_width; i++) { png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 4; } } break; } case PNG_COLOR_TYPE_GRAY: { if (row_info->bit_depth == 2) { sp = row; for (i = 0; i < row_width; i += 4) { int a = *sp & 0xc0; int b = *sp & 0x30; int c = *sp & 0x0c; int d = *sp & 0x03; *sp = (png_byte)( ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)]) ) & 0xc0)| ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) & 0x30)| ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) & 0x0c)| ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) )); sp++; } } if (row_info->bit_depth == 4) { sp = row; for (i = 0; i < row_width; i += 2) { int msb = *sp & 0xf0; int lsb = *sp & 0x0f; *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0) | (((int)gamma_table[(lsb << 4) | lsb]) >> 4)); sp++; } } else if (row_info->bit_depth == 8) { sp = row; for (i = 0; i < row_width; i++) { *sp = gamma_table[*sp]; sp++; } } else if (row_info->bit_depth == 16) { sp = row; for (i = 0; i < row_width; i++) { png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); sp += 2; } } break; } } } } #endif #if defined(PNG_READ_EXPAND_SUPPORTED) /* Expands a palette row to an RGB or RGBA row depending * upon whether you supply trans and num_trans. */ void /* PRIVATE */ png_do_expand_palette(png_row_infop row_info, png_bytep row, png_colorp palette, png_bytep trans, int num_trans) { int shift, value; png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width=row_info->width; png_debug(1, "in png_do_expand_palette\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif row_info->color_type == PNG_COLOR_TYPE_PALETTE) { if (row_info->bit_depth < 8) { switch (row_info->bit_depth) { case 1: { sp = row + (png_size_t)((row_width - 1) >> 3); dp = row + (png_size_t)row_width - 1; shift = 7 - (int)((row_width + 7) & 0x07); for (i = 0; i < row_width; i++) { if ((*sp >> shift) & 0x01) *dp = 1; else *dp = 0; if (shift == 7) { shift = 0; sp--; } else shift++; dp--; } break; } case 2: { sp = row + (png_size_t)((row_width - 1) >> 2); dp = row + (png_size_t)row_width - 1; shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); for (i = 0; i < row_width; i++) { value = (*sp >> shift) & 0x03; *dp = (png_byte)value; if (shift == 6) { shift = 0; sp--; } else shift += 2; dp--; } break; } case 4: { sp = row + (png_size_t)((row_width - 1) >> 1); dp = row + (png_size_t)row_width - 1; shift = (int)((row_width & 0x01) << 2); for (i = 0; i < row_width; i++) { value = (*sp >> shift) & 0x0f; *dp = (png_byte)value; if (shift == 4) { shift = 0; sp--; } else shift += 4; dp--; } break; } } row_info->bit_depth = 8; row_info->pixel_depth = 8; row_info->rowbytes = row_width; } switch (row_info->bit_depth) { case 8: { if (trans != NULL) { sp = row + (png_size_t)row_width - 1; dp = row + (png_size_t)(row_width << 2) - 1; for (i = 0; i < row_width; i++) { if ((int)(*sp) >= num_trans) *dp-- = 0xff; else *dp-- = trans[*sp]; *dp-- = palette[*sp].blue; *dp-- = palette[*sp].green; *dp-- = palette[*sp].red; sp--; } row_info->bit_depth = 8; row_info->pixel_depth = 32; row_info->rowbytes = row_width * 4; row_info->color_type = 6; row_info->channels = 4; } else { sp = row + (png_size_t)row_width - 1; dp = row + (png_size_t)(row_width * 3) - 1; for (i = 0; i < row_width; i++) { *dp-- = palette[*sp].blue; *dp-- = palette[*sp].green; *dp-- = palette[*sp].red; sp--; } row_info->bit_depth = 8; row_info->pixel_depth = 24; row_info->rowbytes = row_width * 3; row_info->color_type = 2; row_info->channels = 3; } break; } } } } /* If the bit depth < 8, it is expanded to 8. Also, if the * transparency value is supplied, an alpha channel is built. */ void /* PRIVATE */ png_do_expand(png_row_infop row_info, png_bytep row, png_color_16p trans_value) { int shift, value; png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width=row_info->width; png_debug(1, "in png_do_expand\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { if (row_info->color_type == PNG_COLOR_TYPE_GRAY) { png_uint_16 gray = (png_uint_16)(trans_value ? trans_value->gray : 0); if (row_info->bit_depth < 8) { switch (row_info->bit_depth) { case 1: { gray = (png_uint_16)(gray*0xff); sp = row + (png_size_t)((row_width - 1) >> 3); dp = row + (png_size_t)row_width - 1; shift = 7 - (int)((row_width + 7) & 0x07); for (i = 0; i < row_width; i++) { if ((*sp >> shift) & 0x01) *dp = 0xff; else *dp = 0; if (shift == 7) { shift = 0; sp--; } else shift++; dp--; } break; } case 2: { gray = (png_uint_16)(gray*0x55); sp = row + (png_size_t)((row_width - 1) >> 2); dp = row + (png_size_t)row_width - 1; shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); for (i = 0; i < row_width; i++) { value = (*sp >> shift) & 0x03; *dp = (png_byte)(value | (value << 2) | (value << 4) | (value << 6)); if (shift == 6) { shift = 0; sp--; } else shift += 2; dp--; } break; } case 4: { gray = (png_uint_16)(gray*0x11); sp = row + (png_size_t)((row_width - 1) >> 1); dp = row + (png_size_t)row_width - 1; shift = (int)((1 - ((row_width + 1) & 0x01)) << 2); for (i = 0; i < row_width; i++) { value = (*sp >> shift) & 0x0f; *dp = (png_byte)(value | (value << 4)); if (shift == 4) { shift = 0; sp--; } else shift = 4; dp--; } break; } } row_info->bit_depth = 8; row_info->pixel_depth = 8; row_info->rowbytes = row_width; } if (trans_value != NULL) { if (row_info->bit_depth == 8) { sp = row + (png_size_t)row_width - 1; dp = row + (png_size_t)(row_width << 1) - 1; for (i = 0; i < row_width; i++) { if (*sp == gray) *dp-- = 0; else *dp-- = 0xff; *dp-- = *sp--; } } else if (row_info->bit_depth == 16) { sp = row + row_info->rowbytes - 1; dp = row + (row_info->rowbytes << 1) - 1; for (i = 0; i < row_width; i++) { if (((png_uint_16)*(sp) | ((png_uint_16)*(sp - 1) << 8)) == gray) { *dp-- = 0; *dp-- = 0; } else { *dp-- = 0xff; *dp-- = 0xff; } *dp-- = *sp--; *dp-- = *sp--; } } row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA; row_info->channels = 2; row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1); row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width); } } else if (row_info->color_type == PNG_COLOR_TYPE_RGB && trans_value) { if (row_info->bit_depth == 8) { sp = row + (png_size_t)row_info->rowbytes - 1; dp = row + (png_size_t)(row_width << 2) - 1; for (i = 0; i < row_width; i++) { if (*(sp - 2) == trans_value->red && *(sp - 1) == trans_value->green && *(sp - 0) == trans_value->blue) *dp-- = 0; else *dp-- = 0xff; *dp-- = *sp--; *dp-- = *sp--; *dp-- = *sp--; } } else if (row_info->bit_depth == 16) { sp = row + row_info->rowbytes - 1; dp = row + (png_size_t)(row_width << 3) - 1; for (i = 0; i < row_width; i++) { if ((((png_uint_16)*(sp - 4) | ((png_uint_16)*(sp - 5) << 8)) == trans_value->red) && (((png_uint_16)*(sp - 2) | ((png_uint_16)*(sp - 3) << 8)) == trans_value->green) && (((png_uint_16)*(sp - 0) | ((png_uint_16)*(sp - 1) << 8)) == trans_value->blue)) { *dp-- = 0; *dp-- = 0; } else { *dp-- = 0xff; *dp-- = 0xff; } *dp-- = *sp--; *dp-- = *sp--; *dp-- = *sp--; *dp-- = *sp--; *dp-- = *sp--; *dp-- = *sp--; } } row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA; row_info->channels = 4; row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2); row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); } } } #endif #if defined(PNG_READ_DITHER_SUPPORTED) void /* PRIVATE */ png_do_dither(png_row_infop row_info, png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup) { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width=row_info->width; png_debug(1, "in png_do_dither\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { if (row_info->color_type == PNG_COLOR_TYPE_RGB && palette_lookup && row_info->bit_depth == 8) { int r, g, b, p; sp = row; dp = row; for (i = 0; i < row_width; i++) { r = *sp++; g = *sp++; b = *sp++; /* this looks real messy, but the compiler will reduce it down to a reasonable formula. For example, with 5 bits per color, we get: p = (((r >> 3) & 0x1f) << 10) | (((g >> 3) & 0x1f) << 5) | ((b >> 3) & 0x1f); */ p = (((r >> (8 - PNG_DITHER_RED_BITS)) & ((1 << PNG_DITHER_RED_BITS) - 1)) << (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) | (((g >> (8 - PNG_DITHER_GREEN_BITS)) & ((1 << PNG_DITHER_GREEN_BITS) - 1)) << (PNG_DITHER_BLUE_BITS)) | ((b >> (8 - PNG_DITHER_BLUE_BITS)) & ((1 << PNG_DITHER_BLUE_BITS) - 1)); *dp++ = palette_lookup[p]; } row_info->color_type = PNG_COLOR_TYPE_PALETTE; row_info->channels = 1; row_info->pixel_depth = row_info->bit_depth; row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); } else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA && palette_lookup != NULL && row_info->bit_depth == 8) { int r, g, b, p; sp = row; dp = row; for (i = 0; i < row_width; i++) { r = *sp++; g = *sp++; b = *sp++; sp++; p = (((r >> (8 - PNG_DITHER_RED_BITS)) & ((1 << PNG_DITHER_RED_BITS) - 1)) << (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) | (((g >> (8 - PNG_DITHER_GREEN_BITS)) & ((1 << PNG_DITHER_GREEN_BITS) - 1)) << (PNG_DITHER_BLUE_BITS)) | ((b >> (8 - PNG_DITHER_BLUE_BITS)) & ((1 << PNG_DITHER_BLUE_BITS) - 1)); *dp++ = palette_lookup[p]; } row_info->color_type = PNG_COLOR_TYPE_PALETTE; row_info->channels = 1; row_info->pixel_depth = row_info->bit_depth; row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); } else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE && dither_lookup && row_info->bit_depth == 8) { sp = row; for (i = 0; i < row_width; i++, sp++) { *sp = dither_lookup[*sp]; } } } } #endif #ifdef PNG_FLOATING_POINT_SUPPORTED #if defined(PNG_READ_GAMMA_SUPPORTED) static int png_gamma_shift[] = {0x10, 0x21, 0x42, 0x84, 0x110, 0x248, 0x550, 0xff0}; /* We build the 8- or 16-bit gamma tables here. Note that for 16-bit * tables, we don't make a full table if we are reducing to 8-bit in * the future. Note also how the gamma_16 tables are segmented so that * we don't need to allocate > 64K chunks for a full 16-bit table. */ void /* PRIVATE */ png_build_gamma_table(png_structp png_ptr) { png_debug(1, "in png_build_gamma_table\n"); if(png_ptr->gamma != 0.0) { if (png_ptr->bit_depth <= 8) { int i; double g; if (png_ptr->screen_gamma > .000001) g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); else g = 1.0; png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr, (png_uint_32)256); for (i = 0; i < 256; i++) { png_ptr->gamma_table[i] = (png_byte)(pow((double)i / 255.0, g) * 255.0 + .5); } #if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY)) { g = 1.0 / (png_ptr->gamma); png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr, (png_uint_32)256); for (i = 0; i < 256; i++) { png_ptr->gamma_to_1[i] = (png_byte)(pow((double)i / 255.0, g) * 255.0 + .5); } png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr, (png_uint_32)256); if(png_ptr->screen_gamma > 0.000001) g = 1.0 / png_ptr->screen_gamma; else g = png_ptr->gamma; /* probably doing rgb_to_gray */ for (i = 0; i < 256; i++) { png_ptr->gamma_from_1[i] = (png_byte)(pow((double)i / 255.0, g) * 255.0 + .5); } } #endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */ } else { double g; int i, j, shift, num; int sig_bit; png_uint_32 ig; if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) { sig_bit = (int)png_ptr->sig_bit.red; if ((int)png_ptr->sig_bit.green > sig_bit) sig_bit = png_ptr->sig_bit.green; if ((int)png_ptr->sig_bit.blue > sig_bit) sig_bit = png_ptr->sig_bit.blue; } else { sig_bit = (int)png_ptr->sig_bit.gray; } if (sig_bit > 0) shift = 16 - sig_bit; else shift = 0; if (png_ptr->transformations & PNG_16_TO_8) { if (shift < (16 - PNG_MAX_GAMMA_8)) shift = (16 - PNG_MAX_GAMMA_8); } if (shift > 8) shift = 8; if (shift < 0) shift = 0; png_ptr->gamma_shift = (png_byte)shift; num = (1 << (8 - shift)); if (png_ptr->screen_gamma > .000001) g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); else g = 1.0; png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr, (png_uint_32)(num * png_sizeof (png_uint_16p))); if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND)) { double fin, fout; png_uint_32 last, max; for (i = 0; i < num; i++) { png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(256 * png_sizeof (png_uint_16))); } g = 1.0 / g; last = 0; for (i = 0; i < 256; i++) { fout = ((double)i + 0.5) / 256.0; fin = pow(fout, g); max = (png_uint_32)(fin * (double)((png_uint_32)num << 8)); while (last <= max) { png_ptr->gamma_16_table[(int)(last & (0xff >> shift))] [(int)(last >> (8 - shift))] = (png_uint_16)( (png_uint_16)i | ((png_uint_16)i << 8)); last++; } } while (last < ((png_uint_32)num << 8)) { png_ptr->gamma_16_table[(int)(last & (0xff >> shift))] [(int)(last >> (8 - shift))] = (png_uint_16)65535L; last++; } } else { for (i = 0; i < num; i++) { png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(256 * png_sizeof (png_uint_16))); ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4); for (j = 0; j < 256; j++) { png_ptr->gamma_16_table[i][j] = (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / 65535.0, g) * 65535.0 + .5); } } } #if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY)) { g = 1.0 / (png_ptr->gamma); png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr, (png_uint_32)(num * png_sizeof (png_uint_16p ))); for (i = 0; i < num; i++) { png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(256 * png_sizeof (png_uint_16))); ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4); for (j = 0; j < 256; j++) { png_ptr->gamma_16_to_1[i][j] = (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / 65535.0, g) * 65535.0 + .5); } } if(png_ptr->screen_gamma > 0.000001) g = 1.0 / png_ptr->screen_gamma; else g = png_ptr->gamma; /* probably doing rgb_to_gray */ png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr, (png_uint_32)(num * png_sizeof (png_uint_16p))); for (i = 0; i < num; i++) { png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(256 * png_sizeof (png_uint_16))); ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4); for (j = 0; j < 256; j++) { png_ptr->gamma_16_from_1[i][j] = (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / 65535.0, g) * 65535.0 + .5); } } } #endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */ } } } #endif /* To do: install integer version of png_build_gamma_table here */ #endif #if defined(PNG_MNG_FEATURES_SUPPORTED) /* undoes intrapixel differencing */ void /* PRIVATE */ png_do_read_intrapixel(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_read_intrapixel\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif (row_info->color_type & PNG_COLOR_MASK_COLOR)) { int bytes_per_pixel; png_uint_32 row_width = row_info->width; if (row_info->bit_depth == 8) { png_bytep rp; png_uint_32 i; if (row_info->color_type == PNG_COLOR_TYPE_RGB) bytes_per_pixel = 3; else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) bytes_per_pixel = 4; else return; for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) { *(rp) = (png_byte)((256 + *rp + *(rp+1))&0xff); *(rp+2) = (png_byte)((256 + *(rp+2) + *(rp+1))&0xff); } } else if (row_info->bit_depth == 16) { png_bytep rp; png_uint_32 i; if (row_info->color_type == PNG_COLOR_TYPE_RGB) bytes_per_pixel = 6; else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) bytes_per_pixel = 8; else return; for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) { png_uint_32 s0 = (*(rp ) << 8) | *(rp+1); png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3); png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5); png_uint_32 red = (png_uint_32)((s0+s1+65536L) & 0xffffL); png_uint_32 blue = (png_uint_32)((s2+s1+65536L) & 0xffffL); *(rp ) = (png_byte)((red >> 8) & 0xff); *(rp+1) = (png_byte)(red & 0xff); *(rp+4) = (png_byte)((blue >> 8) & 0xff); *(rp+5) = (png_byte)(blue & 0xff); } } } } #endif /* PNG_MNG_FEATURES_SUPPORTED */ htmldoc-1.8.27/png/pngget.c0100664000212600000240000006263710124712606014153 0ustar mikeuser /* pngget.c - retrieval of values from info struct * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ #define PNG_INTERNAL #include "png.h" png_uint_32 PNGAPI png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag) { if (png_ptr != NULL && info_ptr != NULL) return(info_ptr->valid & flag); else return(0); } png_uint_32 PNGAPI png_get_rowbytes(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) return(info_ptr->rowbytes); else return(0); } #if defined(PNG_INFO_IMAGE_SUPPORTED) png_bytepp PNGAPI png_get_rows(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) return(info_ptr->row_pointers); else return(0); } #endif #ifdef PNG_EASY_ACCESS_SUPPORTED /* easy access to info, added in libpng-0.99 */ png_uint_32 PNGAPI png_get_image_width(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->width; } return (0); } png_uint_32 PNGAPI png_get_image_height(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->height; } return (0); } png_byte PNGAPI png_get_bit_depth(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->bit_depth; } return (0); } png_byte PNGAPI png_get_color_type(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->color_type; } return (0); } png_byte PNGAPI png_get_filter_type(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->filter_type; } return (0); } png_byte PNGAPI png_get_interlace_type(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->interlace_type; } return (0); } png_byte PNGAPI png_get_compression_type(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) { return info_ptr->compression_type; } return (0); } png_uint_32 PNGAPI png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_pHYs_SUPPORTED) if (info_ptr->valid & PNG_INFO_pHYs) { png_debug1(1, "in %s retrieval function\n", "png_get_x_pixels_per_meter"); if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER) return (0); else return (info_ptr->x_pixels_per_unit); } #else return (0); #endif return (0); } png_uint_32 PNGAPI png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_pHYs_SUPPORTED) if (info_ptr->valid & PNG_INFO_pHYs) { png_debug1(1, "in %s retrieval function\n", "png_get_y_pixels_per_meter"); if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER) return (0); else return (info_ptr->y_pixels_per_unit); } #else return (0); #endif return (0); } png_uint_32 PNGAPI png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_pHYs_SUPPORTED) if (info_ptr->valid & PNG_INFO_pHYs) { png_debug1(1, "in %s retrieval function\n", "png_get_pixels_per_meter"); if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER || info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit) return (0); else return (info_ptr->x_pixels_per_unit); } #else return (0); #endif return (0); } #ifdef PNG_FLOATING_POINT_SUPPORTED float PNGAPI png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_pHYs_SUPPORTED) if (info_ptr->valid & PNG_INFO_pHYs) { png_debug1(1, "in %s retrieval function\n", "png_get_aspect_ratio"); if (info_ptr->x_pixels_per_unit == 0) return ((float)0.0); else return ((float)((float)info_ptr->y_pixels_per_unit /(float)info_ptr->x_pixels_per_unit)); } #else return (0.0); #endif return ((float)0.0); } #endif png_int_32 PNGAPI png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_oFFs_SUPPORTED) if (info_ptr->valid & PNG_INFO_oFFs) { png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns"); if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) return (0); else return (info_ptr->x_offset); } #else return (0); #endif return (0); } png_int_32 PNGAPI png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_oFFs_SUPPORTED) if (info_ptr->valid & PNG_INFO_oFFs) { png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns"); if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) return (0); else return (info_ptr->y_offset); } #else return (0); #endif return (0); } png_int_32 PNGAPI png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_oFFs_SUPPORTED) if (info_ptr->valid & PNG_INFO_oFFs) { png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns"); if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) return (0); else return (info_ptr->x_offset); } #else return (0); #endif return (0); } png_int_32 PNGAPI png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) #if defined(PNG_oFFs_SUPPORTED) if (info_ptr->valid & PNG_INFO_oFFs) { png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns"); if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) return (0); else return (info_ptr->y_offset); } #else return (0); #endif return (0); } #if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) png_uint_32 PNGAPI png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) { return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr) *.0254 +.5)); } png_uint_32 PNGAPI png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) { return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr) *.0254 +.5)); } png_uint_32 PNGAPI png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) { return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr) *.0254 +.5)); } float PNGAPI png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr) { return ((float)png_get_x_offset_microns(png_ptr, info_ptr) *.00003937); } float PNGAPI png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr) { return ((float)png_get_y_offset_microns(png_ptr, info_ptr) *.00003937); } #if defined(PNG_pHYs_SUPPORTED) png_uint_32 PNGAPI png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) { png_uint_32 retval = 0; if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) { png_debug1(1, "in %s retrieval function\n", "pHYs"); if (res_x != NULL) { *res_x = info_ptr->x_pixels_per_unit; retval |= PNG_INFO_pHYs; } if (res_y != NULL) { *res_y = info_ptr->y_pixels_per_unit; retval |= PNG_INFO_pHYs; } if (unit_type != NULL) { *unit_type = (int)info_ptr->phys_unit_type; retval |= PNG_INFO_pHYs; if(*unit_type == 1) { if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50); if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50); } } } return (retval); } #endif /* PNG_pHYs_SUPPORTED */ #endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ /* png_get_channels really belongs in here, too, but it's been around longer */ #endif /* PNG_EASY_ACCESS_SUPPORTED */ png_byte PNGAPI png_get_channels(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) return(info_ptr->channels); else return (0); } png_bytep PNGAPI png_get_signature(png_structp png_ptr, png_infop info_ptr) { if (png_ptr != NULL && info_ptr != NULL) return(info_ptr->signature); else return (NULL); } #if defined(PNG_bKGD_SUPPORTED) png_uint_32 PNGAPI png_get_bKGD(png_structp png_ptr, png_infop info_ptr, png_color_16p *background) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) && background != NULL) { png_debug1(1, "in %s retrieval function\n", "bKGD"); *background = &(info_ptr->background); return (PNG_INFO_bKGD); } return (0); } #endif #if defined(PNG_cHRM_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED png_uint_32 PNGAPI png_get_cHRM(png_structp png_ptr, png_infop info_ptr, double *white_x, double *white_y, double *red_x, double *red_y, double *green_x, double *green_y, double *blue_x, double *blue_y) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) { png_debug1(1, "in %s retrieval function\n", "cHRM"); if (white_x != NULL) *white_x = (double)info_ptr->x_white; if (white_y != NULL) *white_y = (double)info_ptr->y_white; if (red_x != NULL) *red_x = (double)info_ptr->x_red; if (red_y != NULL) *red_y = (double)info_ptr->y_red; if (green_x != NULL) *green_x = (double)info_ptr->x_green; if (green_y != NULL) *green_y = (double)info_ptr->y_green; if (blue_x != NULL) *blue_x = (double)info_ptr->x_blue; if (blue_y != NULL) *blue_y = (double)info_ptr->y_blue; return (PNG_INFO_cHRM); } return (0); } #endif #ifdef PNG_FIXED_POINT_SUPPORTED png_uint_32 PNGAPI png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x, png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y, png_fixed_point *blue_x, png_fixed_point *blue_y) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) { png_debug1(1, "in %s retrieval function\n", "cHRM"); if (white_x != NULL) *white_x = info_ptr->int_x_white; if (white_y != NULL) *white_y = info_ptr->int_y_white; if (red_x != NULL) *red_x = info_ptr->int_x_red; if (red_y != NULL) *red_y = info_ptr->int_y_red; if (green_x != NULL) *green_x = info_ptr->int_x_green; if (green_y != NULL) *green_y = info_ptr->int_y_green; if (blue_x != NULL) *blue_x = info_ptr->int_x_blue; if (blue_y != NULL) *blue_y = info_ptr->int_y_blue; return (PNG_INFO_cHRM); } return (0); } #endif #endif #if defined(PNG_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED png_uint_32 PNGAPI png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) && file_gamma != NULL) { png_debug1(1, "in %s retrieval function\n", "gAMA"); *file_gamma = (double)info_ptr->gamma; return (PNG_INFO_gAMA); } return (0); } #endif #ifdef PNG_FIXED_POINT_SUPPORTED png_uint_32 PNGAPI png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point *int_file_gamma) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) && int_file_gamma != NULL) { png_debug1(1, "in %s retrieval function\n", "gAMA"); *int_file_gamma = info_ptr->int_gamma; return (PNG_INFO_gAMA); } return (0); } #endif #endif #if defined(PNG_sRGB_SUPPORTED) png_uint_32 PNGAPI png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB) && file_srgb_intent != NULL) { png_debug1(1, "in %s retrieval function\n", "sRGB"); *file_srgb_intent = (int)info_ptr->srgb_intent; return (PNG_INFO_sRGB); } return (0); } #endif #if defined(PNG_iCCP_SUPPORTED) png_uint_32 PNGAPI png_get_iCCP(png_structp png_ptr, png_infop info_ptr, png_charpp name, int *compression_type, png_charpp profile, png_uint_32 *proflen) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP) && name != NULL && profile != NULL && proflen != NULL) { png_debug1(1, "in %s retrieval function\n", "iCCP"); *name = info_ptr->iccp_name; *profile = info_ptr->iccp_profile; /* compression_type is a dummy so the API won't have to change if we introduce multiple compression types later. */ *proflen = (int)info_ptr->iccp_proflen; *compression_type = (int)info_ptr->iccp_compression; return (PNG_INFO_iCCP); } return (0); } #endif #if defined(PNG_sPLT_SUPPORTED) png_uint_32 PNGAPI png_get_sPLT(png_structp png_ptr, png_infop info_ptr, png_sPLT_tpp spalettes) { if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL) *spalettes = info_ptr->splt_palettes; return ((png_uint_32)info_ptr->splt_palettes_num); } #endif #if defined(PNG_hIST_SUPPORTED) png_uint_32 PNGAPI png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) && hist != NULL) { png_debug1(1, "in %s retrieval function\n", "hIST"); *hist = info_ptr->hist; return (PNG_INFO_hIST); } return (0); } #endif png_uint_32 PNGAPI png_get_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, int *interlace_type, int *compression_type, int *filter_type) { if (png_ptr != NULL && info_ptr != NULL && width != NULL && height != NULL && bit_depth != NULL && color_type != NULL) { png_debug1(1, "in %s retrieval function\n", "IHDR"); *width = info_ptr->width; *height = info_ptr->height; *bit_depth = info_ptr->bit_depth; if (info_ptr->bit_depth < 1 || info_ptr->bit_depth > 16) png_error(png_ptr, "Invalid bit depth"); *color_type = info_ptr->color_type; if (info_ptr->color_type > 6) png_error(png_ptr, "Invalid color type"); if (compression_type != NULL) *compression_type = info_ptr->compression_type; if (filter_type != NULL) *filter_type = info_ptr->filter_type; if (interlace_type != NULL) *interlace_type = info_ptr->interlace_type; /* check for potential overflow of rowbytes */ if (width == 0 || *width > PNG_UINT_31_MAX) png_error(png_ptr, "Invalid image width"); if (height == 0 || *height > PNG_UINT_31_MAX) png_error(png_ptr, "Invalid image height"); if (info_ptr->width > (PNG_UINT_32_MAX >> 3) /* 8-byte RGBA pixels */ - 64 /* bigrowbuf hack */ - 1 /* filter byte */ - 7*8 /* rounding of width to multiple of 8 pixels */ - 8) /* extra max_pixel_depth pad */ { png_warning(png_ptr, "Width too large for libpng to process image data."); } return (1); } return (0); } #if defined(PNG_oFFs_SUPPORTED) png_uint_32 PNGAPI png_get_oFFs(png_structp png_ptr, png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs) && offset_x != NULL && offset_y != NULL && unit_type != NULL) { png_debug1(1, "in %s retrieval function\n", "oFFs"); *offset_x = info_ptr->x_offset; *offset_y = info_ptr->y_offset; *unit_type = (int)info_ptr->offset_unit_type; return (PNG_INFO_oFFs); } return (0); } #endif #if defined(PNG_pCAL_SUPPORTED) png_uint_32 PNGAPI png_get_pCAL(png_structp png_ptr, png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, png_charp *units, png_charpp *params) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL) && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL && nparams != NULL && units != NULL && params != NULL) { png_debug1(1, "in %s retrieval function\n", "pCAL"); *purpose = info_ptr->pcal_purpose; *X0 = info_ptr->pcal_X0; *X1 = info_ptr->pcal_X1; *type = (int)info_ptr->pcal_type; *nparams = (int)info_ptr->pcal_nparams; *units = info_ptr->pcal_units; *params = info_ptr->pcal_params; return (PNG_INFO_pCAL); } return (0); } #endif #if defined(PNG_sCAL_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED png_uint_32 PNGAPI png_get_sCAL(png_structp png_ptr, png_infop info_ptr, int *unit, double *width, double *height) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL)) { *unit = info_ptr->scal_unit; *width = info_ptr->scal_pixel_width; *height = info_ptr->scal_pixel_height; return (PNG_INFO_sCAL); } return(0); } #else #ifdef PNG_FIXED_POINT_SUPPORTED png_uint_32 PNGAPI png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr, int *unit, png_charpp width, png_charpp height) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL)) { *unit = info_ptr->scal_unit; *width = info_ptr->scal_s_width; *height = info_ptr->scal_s_height; return (PNG_INFO_sCAL); } return(0); } #endif #endif #endif #if defined(PNG_pHYs_SUPPORTED) png_uint_32 PNGAPI png_get_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) { png_uint_32 retval = 0; if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) { png_debug1(1, "in %s retrieval function\n", "pHYs"); if (res_x != NULL) { *res_x = info_ptr->x_pixels_per_unit; retval |= PNG_INFO_pHYs; } if (res_y != NULL) { *res_y = info_ptr->y_pixels_per_unit; retval |= PNG_INFO_pHYs; } if (unit_type != NULL) { *unit_type = (int)info_ptr->phys_unit_type; retval |= PNG_INFO_pHYs; } } return (retval); } #endif png_uint_32 PNGAPI png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette, int *num_palette) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE) && palette != NULL) { png_debug1(1, "in %s retrieval function\n", "PLTE"); *palette = info_ptr->palette; *num_palette = info_ptr->num_palette; png_debug1(3, "num_palette = %d\n", *num_palette); return (PNG_INFO_PLTE); } return (0); } #if defined(PNG_sBIT_SUPPORTED) png_uint_32 PNGAPI png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT) && sig_bit != NULL) { png_debug1(1, "in %s retrieval function\n", "sBIT"); *sig_bit = &(info_ptr->sig_bit); return (PNG_INFO_sBIT); } return (0); } #endif #if defined(PNG_TEXT_SUPPORTED) png_uint_32 PNGAPI png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, int *num_text) { if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0) { png_debug1(1, "in %s retrieval function\n", (png_ptr->chunk_name[0] == '\0' ? "text" : (png_const_charp)png_ptr->chunk_name)); if (text_ptr != NULL) *text_ptr = info_ptr->text; if (num_text != NULL) *num_text = info_ptr->num_text; return ((png_uint_32)info_ptr->num_text); } if (num_text != NULL) *num_text = 0; return(0); } #endif #if defined(PNG_tIME_SUPPORTED) png_uint_32 PNGAPI png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time) { if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME) && mod_time != NULL) { png_debug1(1, "in %s retrieval function\n", "tIME"); *mod_time = &(info_ptr->mod_time); return (PNG_INFO_tIME); } return (0); } #endif #if defined(PNG_tRNS_SUPPORTED) png_uint_32 PNGAPI png_get_tRNS(png_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values) { png_uint_32 retval = 0; if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) { png_debug1(1, "in %s retrieval function\n", "tRNS"); if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { if (trans != NULL) { *trans = info_ptr->trans; retval |= PNG_INFO_tRNS; } if (trans_values != NULL) *trans_values = &(info_ptr->trans_values); } else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */ { if (trans_values != NULL) { *trans_values = &(info_ptr->trans_values); retval |= PNG_INFO_tRNS; } if(trans != NULL) *trans = NULL; } if(num_trans != NULL) { *num_trans = info_ptr->num_trans; retval |= PNG_INFO_tRNS; } } return (retval); } #endif #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) png_uint_32 PNGAPI png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, png_unknown_chunkpp unknowns) { if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL) *unknowns = info_ptr->unknown_chunks; return ((png_uint_32)info_ptr->unknown_chunks_num); } #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) png_byte PNGAPI png_get_rgb_to_gray_status (png_structp png_ptr) { return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0); } #endif #if defined(PNG_USER_CHUNKS_SUPPORTED) png_voidp PNGAPI png_get_user_chunk_ptr(png_structp png_ptr) { return (png_ptr? png_ptr->user_chunk_ptr : NULL); } #endif #ifdef PNG_WRITE_SUPPORTED png_uint_32 PNGAPI png_get_compression_buffer_size(png_structp png_ptr) { return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L); } #endif #ifndef PNG_1_0_X #ifdef PNG_ASSEMBLER_CODE_SUPPORTED /* this function was added to libpng 1.2.0 and should exist by default */ png_uint_32 PNGAPI png_get_asm_flags (png_structp png_ptr) { return (png_uint_32)(png_ptr? png_ptr->asm_flags : 0L); } /* this function was added to libpng 1.2.0 and should exist by default */ png_uint_32 PNGAPI png_get_asm_flagmask (int flag_select) { png_uint_32 settable_asm_flags = 0; if (flag_select & PNG_SELECT_READ) settable_asm_flags |= PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | PNG_ASM_FLAG_MMX_READ_INTERLACE | PNG_ASM_FLAG_MMX_READ_FILTER_SUB | PNG_ASM_FLAG_MMX_READ_FILTER_UP | PNG_ASM_FLAG_MMX_READ_FILTER_AVG | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; /* no non-MMX flags yet */ #if 0 /* GRR: no write-flags yet, either, but someday... */ if (flag_select & PNG_SELECT_WRITE) settable_asm_flags |= PNG_ASM_FLAG_MMX_WRITE_ [whatever] ; #endif /* 0 */ return settable_asm_flags; /* _theoretically_ settable capabilities only */ } #endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ /* this function was added to libpng 1.2.0 */ png_uint_32 PNGAPI png_get_mmx_flagmask (int flag_select, int *compilerID) { png_uint_32 settable_mmx_flags = 0; if (flag_select & PNG_SELECT_READ) settable_mmx_flags |= PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | PNG_ASM_FLAG_MMX_READ_INTERLACE | PNG_ASM_FLAG_MMX_READ_FILTER_SUB | PNG_ASM_FLAG_MMX_READ_FILTER_UP | PNG_ASM_FLAG_MMX_READ_FILTER_AVG | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; #if 0 /* GRR: no MMX write support yet, but someday... */ if (flag_select & PNG_SELECT_WRITE) settable_mmx_flags |= PNG_ASM_FLAG_MMX_WRITE_ [whatever] ; #endif /* 0 */ if (compilerID != NULL) { #ifdef PNG_USE_PNGVCRD *compilerID = 1; /* MSVC */ #else #ifdef PNG_USE_PNGGCCRD *compilerID = 2; /* gcc/gas */ #else *compilerID = -1; /* unknown (i.e., no asm/MMX code compiled) */ #endif #endif } return settable_mmx_flags; /* _theoretically_ settable capabilities only */ } /* this function was added to libpng 1.2.0 */ png_byte PNGAPI png_get_mmx_bitdepth_threshold (png_structp png_ptr) { return (png_byte)(png_ptr? png_ptr->mmx_bitdepth_threshold : 0); } /* this function was added to libpng 1.2.0 */ png_uint_32 PNGAPI png_get_mmx_rowbytes_threshold (png_structp png_ptr) { return (png_uint_32)(png_ptr? png_ptr->mmx_rowbytes_threshold : 0L); } #endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED /* these functions were added to libpng 1.2.6 */ png_uint_32 PNGAPI png_get_user_width_max (png_structp png_ptr) { return (png_ptr? png_ptr->user_width_max : 0); } png_uint_32 PNGAPI png_get_user_height_max (png_structp png_ptr) { return (png_ptr? png_ptr->user_height_max : 0); } #endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */ #endif /* ?PNG_1_0_X */ htmldoc-1.8.27/png/TODO0100664000212600000240000000223607443727415013216 0ustar mikeuserTODO - list of things to do for libpng: Final bug fixes. Improve API by hiding the png_struct and png_info structs. Finish work on the no-floating-point version (including gamma compensation) Better C++ wrapper/full C++ implementation? Fix problem with C++ and EXTERN "C". cHRM transformation. Improve setjmp/longjmp usage or remove it in favor of returning error codes. Add "grayscale->palette" transformation and "palette->grayscale" detection. Improved dithering. Multi-lingual error and warning message support. Complete sRGB transformation (presently it simply uses gamma=0.45455). Man pages for function calls. Better documentation. Better filter selection (counting huffman bits/precompression? filter inertia? filter costs?). Histogram creation. Text conversion between different code pages (Latin-1 -> Mac and DOS). Should we always malloc 2^bit_depth PLTE/tRNS/hIST entries for safety? Build gamma tables using fixed point (and do away with floating point entirely). Use greater precision when changing to linear gamma for compositing against background and doing rgb-to-gray transformation. Investigate pre-incremented loop counters and other loop constructions. htmldoc-1.8.27/png/pngerror.c0100664000212600000240000002064210124712606014513 0ustar mikeuser /* pngerror.c - stub functions for i/o and memory allocation * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file provides a location for all error handling. Users who * need special error handling are expected to write replacement functions * and use png_set_error_fn() to use those functions. See the instructions * at each function. */ #define PNG_INTERNAL #include "png.h" static void /* PRIVATE */ png_default_error PNGARG((png_structp png_ptr, png_const_charp error_message)); static void /* PRIVATE */ png_default_warning PNGARG((png_structp png_ptr, png_const_charp warning_message)); /* This function is called whenever there is a fatal error. This function * should not be changed. If there is a need to handle errors differently, * you should supply a replacement error function and use png_set_error_fn() * to replace the error function at run-time. */ void PNGAPI png_error(png_structp png_ptr, png_const_charp error_message) { #ifdef PNG_ERROR_NUMBERS_SUPPORTED char msg[16]; if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) { if (*error_message == '#') { int offset; for (offset=1; offset<15; offset++) if (*(error_message+offset) == ' ') break; if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) { int i; for (i=0; iflags&PNG_FLAG_STRIP_ERROR_TEXT) { msg[0]='0'; msg[1]='\0'; error_message=msg; } } } #endif if (png_ptr != NULL && png_ptr->error_fn != NULL) (*(png_ptr->error_fn))(png_ptr, error_message); /* If the custom handler doesn't exist, or if it returns, use the default handler, which will not return. */ png_default_error(png_ptr, error_message); } /* This function is called whenever there is a non-fatal error. This function * should not be changed. If there is a need to handle warnings differently, * you should supply a replacement warning function and use * png_set_error_fn() to replace the warning function at run-time. */ void PNGAPI png_warning(png_structp png_ptr, png_const_charp warning_message) { int offset = 0; #ifdef PNG_ERROR_NUMBERS_SUPPORTED if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) #endif { if (*warning_message == '#') { for (offset=1; offset<15; offset++) if (*(warning_message+offset) == ' ') break; } } if (png_ptr != NULL && png_ptr->warning_fn != NULL) (*(png_ptr->warning_fn))(png_ptr, warning_message+offset); else png_default_warning(png_ptr, warning_message+offset); } /* These utilities are used internally to build an error message that relates * to the current chunk. The chunk name comes from png_ptr->chunk_name, * this is used to prefix the message. The message is limited in length * to 63 bytes, the name characters are output as hex digits wrapped in [] * if the character is invalid. */ #define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) static PNG_CONST char png_digit[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static void /* PRIVATE */ png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp error_message) { int iout = 0, iin = 0; while (iin < 4) { int c = png_ptr->chunk_name[iin++]; if (isnonalpha(c)) { buffer[iout++] = '['; buffer[iout++] = png_digit[(c & 0xf0) >> 4]; buffer[iout++] = png_digit[c & 0x0f]; buffer[iout++] = ']'; } else { buffer[iout++] = (png_byte)c; } } if (error_message == NULL) buffer[iout] = 0; else { buffer[iout++] = ':'; buffer[iout++] = ' '; png_strncpy(buffer+iout, error_message, 63); buffer[iout+63] = 0; } } void PNGAPI png_chunk_error(png_structp png_ptr, png_const_charp error_message) { char msg[18+64]; png_format_buffer(png_ptr, msg, error_message); png_error(png_ptr, msg); } void PNGAPI png_chunk_warning(png_structp png_ptr, png_const_charp warning_message) { char msg[18+64]; png_format_buffer(png_ptr, msg, warning_message); png_warning(png_ptr, msg); } /* This is the default error handling function. Note that replacements for * this function MUST NOT RETURN, or the program will likely crash. This * function is used by default, or if the program supplies NULL for the * error function pointer in png_set_error_fn(). */ static void /* PRIVATE */ png_default_error(png_structp png_ptr, png_const_charp error_message) { #ifndef PNG_NO_CONSOLE_IO #ifdef PNG_ERROR_NUMBERS_SUPPORTED if (*error_message == '#') { int offset; char error_number[16]; for (offset=0; offset<15; offset++) { error_number[offset] = *(error_message+offset+1); if (*(error_message+offset) == ' ') break; } if((offset > 1) && (offset < 15)) { error_number[offset-1]='\0'; fprintf(stderr, "libpng error no. %s: %s\n", error_number, error_message+offset); } else fprintf(stderr, "libpng error: %s, offset=%d\n", error_message,offset); } else #endif fprintf(stderr, "libpng error: %s\n", error_message); #endif #ifdef PNG_SETJMP_SUPPORTED # ifdef USE_FAR_KEYWORD { jmp_buf jmpbuf; png_memcpy(jmpbuf,png_ptr->jmpbuf,png_sizeof(jmp_buf)); longjmp(jmpbuf, 1); } # else longjmp(png_ptr->jmpbuf, 1); # endif #else /* make compiler happy */ ; if (png_ptr) PNG_ABORT(); #endif #ifdef PNG_NO_CONSOLE_IO /* make compiler happy */ ; if (&error_message != NULL) return; #endif } /* This function is called when there is a warning, but the library thinks * it can continue anyway. Replacement functions don't have to do anything * here if you don't want them to. In the default configuration, png_ptr is * not used, but it is passed in case it may be useful. */ static void /* PRIVATE */ png_default_warning(png_structp png_ptr, png_const_charp warning_message) { #ifndef PNG_NO_CONSOLE_IO # ifdef PNG_ERROR_NUMBERS_SUPPORTED if (*warning_message == '#') { int offset; char warning_number[16]; for (offset=0; offset<15; offset++) { warning_number[offset]=*(warning_message+offset+1); if (*(warning_message+offset) == ' ') break; } if((offset > 1) && (offset < 15)) { warning_number[offset-1]='\0'; fprintf(stderr, "libpng warning no. %s: %s\n", warning_number, warning_message+offset); } else fprintf(stderr, "libpng warning: %s\n", warning_message); } else # endif fprintf(stderr, "libpng warning: %s\n", warning_message); #else /* make compiler happy */ ; if (warning_message) return; #endif /* make compiler happy */ ; if (png_ptr) return; } /* This function is called when the application wants to use another method * of handling errors and warnings. Note that the error function MUST NOT * return to the calling routine or serious problems will occur. The return * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1) */ void PNGAPI png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn) { png_ptr->error_ptr = error_ptr; png_ptr->error_fn = error_fn; png_ptr->warning_fn = warning_fn; } /* This function returns a pointer to the error_ptr associated with the user * functions. The application should free any memory associated with this * pointer before png_write_destroy and png_read_destroy are called. */ png_voidp PNGAPI png_get_error_ptr(png_structp png_ptr) { return ((png_voidp)png_ptr->error_ptr); } #ifdef PNG_ERROR_NUMBERS_SUPPORTED void PNGAPI png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode) { if(png_ptr != NULL) { png_ptr->flags &= ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode); } } #endif htmldoc-1.8.27/png/pngrio.c0100664000212600000240000001235410124712606014154 0ustar mikeuser /* pngrio.c - functions for data input * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file provides a location for all input. Users who need * special handling are expected to write a function that has the same * arguments as this and performs a similar function, but that possibly * has a different input method. Note that you shouldn't change this * function, but rather write a replacement function and then make * libpng use it at run time with png_set_read_fn(...). */ #define PNG_INTERNAL #include "png.h" /* Read the data from whatever input you are using. The default routine reads from a file pointer. Note that this routine sometimes gets called with very small lengths, so you should implement some kind of simple buffering if you are using unbuffered reads. This should never be asked to read more then 64K on a 16 bit machine. */ void /* PRIVATE */ png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { png_debug1(4,"reading %d bytes\n", (int)length); if (png_ptr->read_data_fn != NULL) (*(png_ptr->read_data_fn))(png_ptr, data, length); else png_error(png_ptr, "Call to NULL read function"); } #if !defined(PNG_NO_STDIO) /* This is the function that does the actual reading of data. If you are not reading from a standard C stream, you should create a replacement read_data function and use it at run time with png_set_read_fn(), rather than changing the library. */ #ifndef USE_FAR_KEYWORD void PNGAPI png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { png_size_t check; /* fread() returns 0 on error, so it is OK to store this in a png_size_t * instead of an int, which is what fread() actually returns. */ #if defined(_WIN32_WCE) if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) check = 0; #else check = (png_size_t)fread(data, (png_size_t)1, length, (png_FILE_p)png_ptr->io_ptr); #endif if (check != length) png_error(png_ptr, "Read Error"); } #else /* this is the model-independent version. Since the standard I/O library can't handle far buffers in the medium and small models, we have to copy the data. */ #define NEAR_BUF_SIZE 1024 #define MIN(a,b) (a <= b ? a : b) static void /* PRIVATE */ png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { int check; png_byte *n_data; png_FILE_p io_ptr; /* Check if data really is near. If so, use usual code. */ n_data = (png_byte *)CVT_PTR_NOCHECK(data); io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); if ((png_bytep)n_data == data) { #if defined(_WIN32_WCE) if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) check = 0; #else check = fread(n_data, 1, length, io_ptr); #endif } else { png_byte buf[NEAR_BUF_SIZE]; png_size_t read, remaining, err; check = 0; remaining = length; do { read = MIN(NEAR_BUF_SIZE, remaining); #if defined(_WIN32_WCE) if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) ) err = 0; #else err = fread(buf, (png_size_t)1, read, io_ptr); #endif png_memcpy(data, buf, read); /* copy far buffer to near buffer */ if(err != read) break; else check += err; data += read; remaining -= read; } while (remaining != 0); } if ((png_uint_32)check != (png_uint_32)length) png_error(png_ptr, "read Error"); } #endif #endif /* This function allows the application to supply a new input function for libpng if standard C streams aren't being used. This function takes as its arguments: png_ptr - pointer to a png input data structure io_ptr - pointer to user supplied structure containing info about the input functions. May be NULL. read_data_fn - pointer to a new input function that takes as its arguments a pointer to a png_struct, a pointer to a location where input data can be stored, and a 32-bit unsigned int that is the number of bytes to be read. To exit and output any fatal error messages the new write function should call png_error(png_ptr, "Error msg"). */ void PNGAPI png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn) { png_ptr->io_ptr = io_ptr; #if !defined(PNG_NO_STDIO) if (read_data_fn != NULL) png_ptr->read_data_fn = read_data_fn; else png_ptr->read_data_fn = png_default_read_data; #else png_ptr->read_data_fn = read_data_fn; #endif /* It is an error to write to a read device */ if (png_ptr->write_data_fn != NULL) { png_ptr->write_data_fn = NULL; png_warning(png_ptr, "It's an error to set both read_data_fn and write_data_fn in the "); png_warning(png_ptr, "same structure. Resetting write_data_fn to NULL."); } #if defined(PNG_WRITE_FLUSH_SUPPORTED) png_ptr->output_flush_fn = NULL; #endif } htmldoc-1.8.27/png/pngconf.h0100664000212600000240000012126610124712606014320 0ustar mikeuser /* pngconf.h - machine configurable file for libpng * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ /* Any machine specific code is near the front of this file, so if you * are configuring libpng for a machine, you may want to read the section * starting here down to where it starts to typedef png_color, png_text, * and png_info. */ #ifndef PNGCONF_H #define PNGCONF_H #ifdef PNG_USER_CONFIG #include "pngusr.h" #endif /* This is the size of the compression buffer, and thus the size of * an IDAT chunk. Make this whatever size you feel is best for your * machine. One of these will be allocated per png_struct. When this * is full, it writes the data to the disk, and does some other * calculations. Making this an extremely small size will slow * the library down, but you may want to experiment to determine * where it becomes significant, if you are concerned with memory * usage. Note that zlib allocates at least 32Kb also. For readers, * this describes the size of the buffer available to read the data in. * Unless this gets smaller than the size of a row (compressed), * it should not make much difference how big this is. */ #ifndef PNG_ZBUF_SIZE # define PNG_ZBUF_SIZE 8192 #endif /* Enable if you want a write-only libpng */ #ifndef PNG_NO_READ_SUPPORTED # define PNG_READ_SUPPORTED #endif /* Enable if you want a read-only libpng */ #ifndef PNG_NO_WRITE_SUPPORTED # define PNG_WRITE_SUPPORTED #endif /* Enabled by default in 1.2.0. You can disable this if you don't need to support PNGs that are embedded in MNG datastreams */ #if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES) # ifndef PNG_MNG_FEATURES_SUPPORTED # define PNG_MNG_FEATURES_SUPPORTED # endif #endif #ifndef PNG_NO_FLOATING_POINT_SUPPORTED # ifndef PNG_FLOATING_POINT_SUPPORTED # define PNG_FLOATING_POINT_SUPPORTED # endif #endif /* If you are running on a machine where you cannot allocate more * than 64K of memory at once, uncomment this. While libpng will not * normally need that much memory in a chunk (unless you load up a very * large file), zlib needs to know how big of a chunk it can use, and * libpng thus makes sure to check any memory allocation to verify it * will fit into memory. #define PNG_MAX_MALLOC_64K */ #if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) # define PNG_MAX_MALLOC_64K #endif /* Special munging to support doing things the 'cygwin' way: * 'Normal' png-on-win32 defines/defaults: * PNG_BUILD_DLL -- building dll * PNG_USE_DLL -- building an application, linking to dll * (no define) -- building static library, or building an * application and linking to the static lib * 'Cygwin' defines/defaults: * PNG_BUILD_DLL -- (ignored) building the dll * (no define) -- (ignored) building an application, linking to the dll * PNG_STATIC -- (ignored) building the static lib, or building an * application that links to the static lib. * ALL_STATIC -- (ignored) building various static libs, or building an * application that links to the static libs. * Thus, * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and * this bit of #ifdefs will define the 'correct' config variables based on * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but * unnecessary. * * Also, the precedence order is: * ALL_STATIC (since we can't #undef something outside our namespace) * PNG_BUILD_DLL * PNG_STATIC * (nothing) == PNG_USE_DLL * * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent * of auto-import in binutils, we no longer need to worry about * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes * to __declspec() stuff. However, we DO need to worry about * PNG_BUILD_DLL and PNG_STATIC because those change some defaults * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed. */ #if defined(__CYGWIN__) # if defined(ALL_STATIC) # if defined(PNG_BUILD_DLL) # undef PNG_BUILD_DLL # endif # if defined(PNG_USE_DLL) # undef PNG_USE_DLL # endif # if defined(PNG_DLL) # undef PNG_DLL # endif # if !defined(PNG_STATIC) # define PNG_STATIC # endif # else # if defined (PNG_BUILD_DLL) # if defined(PNG_STATIC) # undef PNG_STATIC # endif # if defined(PNG_USE_DLL) # undef PNG_USE_DLL # endif # if !defined(PNG_DLL) # define PNG_DLL # endif # else # if defined(PNG_STATIC) # if defined(PNG_USE_DLL) # undef PNG_USE_DLL # endif # if defined(PNG_DLL) # undef PNG_DLL # endif # else # if !defined(PNG_USE_DLL) # define PNG_USE_DLL # endif # if !defined(PNG_DLL) # define PNG_DLL # endif # endif # endif # endif #endif /* This protects us against compilers that run on a windowing system * and thus don't have or would rather us not use the stdio types: * stdin, stdout, and stderr. The only one currently used is stderr * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will * prevent these from being compiled and used. #defining PNG_NO_STDIO * will also prevent these, plus will prevent the entire set of stdio * macros and functions (FILE *, printf, etc.) from being compiled and used, * unless (PNG_DEBUG > 0) has been #defined. * * #define PNG_NO_CONSOLE_IO * #define PNG_NO_STDIO */ #if defined(_WIN32_WCE) # include /* Console I/O functions are not supported on WindowsCE */ # define PNG_NO_CONSOLE_IO # ifdef PNG_DEBUG # undef PNG_DEBUG # endif #endif #ifdef PNG_BUILD_DLL # ifndef PNG_CONSOLE_IO_SUPPORTED # ifndef PNG_NO_CONSOLE_IO # define PNG_NO_CONSOLE_IO # endif # endif #endif # ifdef PNG_NO_STDIO # ifndef PNG_NO_CONSOLE_IO # define PNG_NO_CONSOLE_IO # endif # ifdef PNG_DEBUG # if (PNG_DEBUG > 0) # include # endif # endif # else # if !defined(_WIN32_WCE) /* "stdio.h" functions are not supported on WindowsCE */ # include # endif # endif /* This macro protects us against machines that don't have function * prototypes (ie K&R style headers). If your compiler does not handle * function prototypes, define this macro and use the included ansi2knr. * I've always been able to use _NO_PROTO as the indicator, but you may * need to drag the empty declaration out in front of here, or change the * ifdef to suit your own needs. */ #ifndef PNGARG #ifdef OF /* zlib prototype munger */ # define PNGARG(arglist) OF(arglist) #else #ifdef _NO_PROTO # define PNGARG(arglist) () # ifndef PNG_TYPECAST_NULL # define PNG_TYPECAST_NULL # endif #else # define PNGARG(arglist) arglist #endif /* _NO_PROTO */ #endif /* OF */ #endif /* PNGARG */ /* Try to determine if we are compiling on a Mac. Note that testing for * just __MWERKS__ is not good enough, because the Codewarrior is now used * on non-Mac platforms. */ #ifndef MACOS # if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) # define MACOS # endif #endif /* enough people need this for various reasons to include it here */ #if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE) # include #endif #if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) # define PNG_SETJMP_SUPPORTED #endif #ifdef PNG_SETJMP_SUPPORTED /* This is an attempt to force a single setjmp behaviour on Linux. If * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. */ # ifdef __linux__ # ifdef _BSD_SOURCE # define PNG_SAVE_BSD_SOURCE # undef _BSD_SOURCE # endif # ifdef _SETJMP_H /* If you encounter a compiler error here, see the explanation * near the end of INSTALL. */ __png.h__ already includes setjmp.h; __dont__ include it again.; # endif # endif /* __linux__ */ /* include setjmp.h for error handling */ # include # ifdef __linux__ # ifdef PNG_SAVE_BSD_SOURCE # define _BSD_SOURCE # undef PNG_SAVE_BSD_SOURCE # endif # endif /* __linux__ */ #endif /* PNG_SETJMP_SUPPORTED */ #ifdef BSD # include #else # include #endif /* Other defines for things like memory and the like can go here. */ #ifdef PNG_INTERNAL #include /* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which * aren't usually used outside the library (as far as I know), so it is * debatable if they should be exported at all. In the future, when it is * possible to have run-time registry of chunk-handling functions, some of * these will be made available again. #define PNG_EXTERN extern */ #define PNG_EXTERN /* Other defines specific to compilers can go here. Try to keep * them inside an appropriate ifdef/endif pair for portability. */ #if defined(PNG_FLOATING_POINT_SUPPORTED) # if defined(MACOS) /* We need to check that hasn't already been included earlier * as it seems it doesn't agree with , yet we should really use * if possible. */ # if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) # include # endif # else # include # endif # if defined(_AMIGA) && defined(__SASC) && defined(_M68881) /* Amiga SAS/C: We must include builtin FPU functions when compiling using * MATH=68881 */ # include # endif #endif /* Codewarrior on NT has linking problems without this. */ #if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) # define PNG_ALWAYS_EXTERN #endif /* This provides the non-ANSI (far) memory allocation routines. */ #if defined(__TURBOC__) && defined(__MSDOS__) # include # include #endif /* I have no idea why is this necessary... */ #if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \ defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__)) # include #endif /* This controls how fine the dithering gets. As this allocates * a largish chunk of memory (32K), those who are not as concerned * with dithering quality can decrease some or all of these. */ #ifndef PNG_DITHER_RED_BITS # define PNG_DITHER_RED_BITS 5 #endif #ifndef PNG_DITHER_GREEN_BITS # define PNG_DITHER_GREEN_BITS 5 #endif #ifndef PNG_DITHER_BLUE_BITS # define PNG_DITHER_BLUE_BITS 5 #endif /* This controls how fine the gamma correction becomes when you * are only interested in 8 bits anyway. Increasing this value * results in more memory being used, and more pow() functions * being called to fill in the gamma tables. Don't set this value * less then 8, and even that may not work (I haven't tested it). */ #ifndef PNG_MAX_GAMMA_8 # define PNG_MAX_GAMMA_8 11 #endif /* This controls how much a difference in gamma we can tolerate before * we actually start doing gamma conversion. */ #ifndef PNG_GAMMA_THRESHOLD # define PNG_GAMMA_THRESHOLD 0.05 #endif #endif /* PNG_INTERNAL */ /* The following uses const char * instead of char * for error * and warning message functions, so some compilers won't complain. * If you do not want to use const, define PNG_NO_CONST here. */ #ifndef PNG_NO_CONST # define PNG_CONST const #else # define PNG_CONST #endif /* The following defines give you the ability to remove code from the * library that you will not be using. I wish I could figure out how to * automate this, but I can't do that without making it seriously hard * on the users. So if you are not using an ability, change the #define * to and #undef, and that part of the library will not be compiled. If * your linker can't find a function, you may want to make sure the * ability is defined here. Some of these depend upon some others being * defined. I haven't figured out all the interactions here, so you may * have to experiment awhile to get everything to compile. If you are * creating or using a shared library, you probably shouldn't touch this, * as it will affect the size of the structures, and this will cause bad * things to happen if the library and/or application ever change. */ /* Any features you will not be using can be undef'ed here */ /* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS * on the compile line, then pick and choose which ones to define without * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED * if you only want to have a png-compliant reader/writer but don't need * any of the extra transformations. This saves about 80 kbytes in a * typical installation of the library. (PNG_NO_* form added in version * 1.0.1c, for consistency) */ /* The size of the png_text structure changed in libpng-1.0.6 when * iTXt is supported. It is turned off by default, to support old apps * that malloc the png_text structure instead of calling png_set_text() * and letting libpng malloc it. It will be turned on by default in * libpng-1.3.0. */ #ifndef PNG_iTXt_SUPPORTED # if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt) # define PNG_NO_READ_iTXt # endif # if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt) # define PNG_NO_WRITE_iTXt # endif #endif /* The following support, added after version 1.0.0, can be turned off here en * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility * with old applications that require the length of png_struct and png_info * to remain unchanged. */ #ifdef PNG_LEGACY_SUPPORTED # define PNG_NO_FREE_ME # define PNG_NO_READ_UNKNOWN_CHUNKS # define PNG_NO_WRITE_UNKNOWN_CHUNKS # define PNG_NO_READ_USER_CHUNKS # define PNG_NO_READ_iCCP # define PNG_NO_WRITE_iCCP # define PNG_NO_READ_iTXt # define PNG_NO_WRITE_iTXt # define PNG_NO_READ_sCAL # define PNG_NO_WRITE_sCAL # define PNG_NO_READ_sPLT # define PNG_NO_WRITE_sPLT # define PNG_NO_INFO_IMAGE # define PNG_NO_READ_RGB_TO_GRAY # define PNG_NO_READ_USER_TRANSFORM # define PNG_NO_WRITE_USER_TRANSFORM # define PNG_NO_USER_MEM # define PNG_NO_READ_EMPTY_PLTE # define PNG_NO_MNG_FEATURES # define PNG_NO_FIXED_POINT_SUPPORTED #endif /* Ignore attempt to turn off both floating and fixed point support */ #if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ !defined(PNG_NO_FIXED_POINT_SUPPORTED) # define PNG_FIXED_POINT_SUPPORTED #endif #ifndef PNG_NO_FREE_ME # define PNG_FREE_ME_SUPPORTED #endif #if defined(PNG_READ_SUPPORTED) #if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ !defined(PNG_NO_READ_TRANSFORMS) # define PNG_READ_TRANSFORMS_SUPPORTED #endif #ifdef PNG_READ_TRANSFORMS_SUPPORTED # ifndef PNG_NO_READ_EXPAND # define PNG_READ_EXPAND_SUPPORTED # endif # ifndef PNG_NO_READ_SHIFT # define PNG_READ_SHIFT_SUPPORTED # endif # ifndef PNG_NO_READ_PACK # define PNG_READ_PACK_SUPPORTED # endif # ifndef PNG_NO_READ_BGR # define PNG_READ_BGR_SUPPORTED # endif # ifndef PNG_NO_READ_SWAP # define PNG_READ_SWAP_SUPPORTED # endif # ifndef PNG_NO_READ_PACKSWAP # define PNG_READ_PACKSWAP_SUPPORTED # endif # ifndef PNG_NO_READ_INVERT # define PNG_READ_INVERT_SUPPORTED # endif # ifndef PNG_NO_READ_DITHER # define PNG_READ_DITHER_SUPPORTED # endif # ifndef PNG_NO_READ_BACKGROUND # define PNG_READ_BACKGROUND_SUPPORTED # endif # ifndef PNG_NO_READ_16_TO_8 # define PNG_READ_16_TO_8_SUPPORTED # endif # ifndef PNG_NO_READ_FILLER # define PNG_READ_FILLER_SUPPORTED # endif # ifndef PNG_NO_READ_GAMMA # define PNG_READ_GAMMA_SUPPORTED # endif # ifndef PNG_NO_READ_GRAY_TO_RGB # define PNG_READ_GRAY_TO_RGB_SUPPORTED # endif # ifndef PNG_NO_READ_SWAP_ALPHA # define PNG_READ_SWAP_ALPHA_SUPPORTED # endif # ifndef PNG_NO_READ_INVERT_ALPHA # define PNG_READ_INVERT_ALPHA_SUPPORTED # endif # ifndef PNG_NO_READ_STRIP_ALPHA # define PNG_READ_STRIP_ALPHA_SUPPORTED # endif # ifndef PNG_NO_READ_USER_TRANSFORM # define PNG_READ_USER_TRANSFORM_SUPPORTED # endif # ifndef PNG_NO_READ_RGB_TO_GRAY # define PNG_READ_RGB_TO_GRAY_SUPPORTED # endif #endif /* PNG_READ_TRANSFORMS_SUPPORTED */ #if !defined(PNG_NO_PROGRESSIVE_READ) && \ !defined(PNG_PROGRESSIVE_READ_NOT_SUPPORTED) /* if you don't do progressive */ # define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ #endif /* about interlacing capability! You'll */ /* still have interlacing unless you change the following line: */ #define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */ #ifndef PNG_NO_READ_COMPOSITE_NODIV # ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ # define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ # endif #endif /* Deprecated, will be removed from version 2.0.0. Use PNG_MNG_FEATURES_SUPPORTED instead. */ #ifndef PNG_NO_READ_EMPTY_PLTE # define PNG_READ_EMPTY_PLTE_SUPPORTED #endif #endif /* PNG_READ_SUPPORTED */ #if defined(PNG_WRITE_SUPPORTED) # if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ !defined(PNG_NO_WRITE_TRANSFORMS) # define PNG_WRITE_TRANSFORMS_SUPPORTED #endif #ifdef PNG_WRITE_TRANSFORMS_SUPPORTED # ifndef PNG_NO_WRITE_SHIFT # define PNG_WRITE_SHIFT_SUPPORTED # endif # ifndef PNG_NO_WRITE_PACK # define PNG_WRITE_PACK_SUPPORTED # endif # ifndef PNG_NO_WRITE_BGR # define PNG_WRITE_BGR_SUPPORTED # endif # ifndef PNG_NO_WRITE_SWAP # define PNG_WRITE_SWAP_SUPPORTED # endif # ifndef PNG_NO_WRITE_PACKSWAP # define PNG_WRITE_PACKSWAP_SUPPORTED # endif # ifndef PNG_NO_WRITE_INVERT # define PNG_WRITE_INVERT_SUPPORTED # endif # ifndef PNG_NO_WRITE_FILLER # define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ # endif # ifndef PNG_NO_WRITE_SWAP_ALPHA # define PNG_WRITE_SWAP_ALPHA_SUPPORTED # endif # ifndef PNG_NO_WRITE_INVERT_ALPHA # define PNG_WRITE_INVERT_ALPHA_SUPPORTED # endif # ifndef PNG_NO_WRITE_USER_TRANSFORM # define PNG_WRITE_USER_TRANSFORM_SUPPORTED # endif #endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ #define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant encoders, but can cause trouble if left undefined */ #if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ defined(PNG_FLOATING_POINT_SUPPORTED) # define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED #endif #ifndef PNG_NO_WRITE_FLUSH # define PNG_WRITE_FLUSH_SUPPORTED #endif /* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */ #ifndef PNG_NO_WRITE_EMPTY_PLTE # define PNG_WRITE_EMPTY_PLTE_SUPPORTED #endif #endif /* PNG_WRITE_SUPPORTED */ #ifndef PNG_1_0_X # ifndef PNG_NO_ERROR_NUMBERS # define PNG_ERROR_NUMBERS_SUPPORTED # endif #endif /* PNG_1_0_X */ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) # ifndef PNG_NO_USER_TRANSFORM_PTR # define PNG_USER_TRANSFORM_PTR_SUPPORTED # endif #endif #ifndef PNG_NO_STDIO # define PNG_TIME_RFC1123_SUPPORTED #endif /* This adds extra functions in pngget.c for accessing data from the * info pointer (added in version 0.99) * png_get_image_width() * png_get_image_height() * png_get_bit_depth() * png_get_color_type() * png_get_compression_type() * png_get_filter_type() * png_get_interlace_type() * png_get_pixel_aspect_ratio() * png_get_pixels_per_meter() * png_get_x_offset_pixels() * png_get_y_offset_pixels() * png_get_x_offset_microns() * png_get_y_offset_microns() */ #if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) # define PNG_EASY_ACCESS_SUPPORTED #endif /* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0 even when PNG_USE_PNGVCRD or PNG_USE_PNGGCCRD is not defined */ #if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) # ifndef PNG_ASSEMBLER_CODE_SUPPORTED # define PNG_ASSEMBLER_CODE_SUPPORTED # endif # if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) # define PNG_MMX_CODE_SUPPORTED # endif #endif /* If you are sure that you don't need thread safety and you are compiling with PNG_USE_PNGCCRD for an MMX application, you can define this for faster execution. See pnggccrd.c. #define PNG_THREAD_UNSAFE_OK */ #if !defined(PNG_1_0_X) #if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) # define PNG_USER_MEM_SUPPORTED #endif #endif /* PNG_1_0_X */ /* Added at libpng-1.2.6 */ #if !defined(PNG_1_0_X) #ifndef PNG_SET_USER_LIMITS_SUPPORTED #if !defined(PNG_NO_SET_USER_LIMITS) && !defined(PNG_SET_USER_LIMITS_SUPPORTED) # define PNG_SET_USER_LIMITS_SUPPORTED #endif #endif #endif /* PNG_1_0_X */ /* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGS no matter * how large, set these limits to 0x7fffffffL */ #ifndef PNG_USER_WIDTH_MAX # define PNG_USER_WIDTH_MAX 1000000L #endif #ifndef PNG_USER_HEIGHT_MAX # define PNG_USER_HEIGHT_MAX 1000000L #endif /* These are currently experimental features, define them if you want */ /* very little testing */ /* #ifdef PNG_READ_SUPPORTED # ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED # define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED # endif #endif */ /* This is only for PowerPC big-endian and 680x0 systems */ /* some testing */ /* #ifndef PNG_READ_BIG_ENDIAN_SUPPORTED # define PNG_READ_BIG_ENDIAN_SUPPORTED #endif */ /* Buggy compilers (e.g., gcc 2.7.2.2) need this */ /* #define PNG_NO_POINTER_INDEXING */ /* These functions are turned off by default, as they will be phased out. */ /* #define PNG_USELESS_TESTS_SUPPORTED #define PNG_CORRECT_PALETTE_SUPPORTED */ /* Any chunks you are not interested in, you can undef here. The * ones that allocate memory may be expecially important (hIST, * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info * a bit smaller. */ #if defined(PNG_READ_SUPPORTED) && \ !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ !defined(PNG_NO_READ_ANCILLARY_CHUNKS) # define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED #endif #if defined(PNG_WRITE_SUPPORTED) && \ !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) # define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED #endif #ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED #ifdef PNG_NO_READ_TEXT # define PNG_NO_READ_iTXt # define PNG_NO_READ_tEXt # define PNG_NO_READ_zTXt #endif #ifndef PNG_NO_READ_bKGD # define PNG_READ_bKGD_SUPPORTED # define PNG_bKGD_SUPPORTED #endif #ifndef PNG_NO_READ_cHRM # define PNG_READ_cHRM_SUPPORTED # define PNG_cHRM_SUPPORTED #endif #ifndef PNG_NO_READ_gAMA # define PNG_READ_gAMA_SUPPORTED # define PNG_gAMA_SUPPORTED #endif #ifndef PNG_NO_READ_hIST # define PNG_READ_hIST_SUPPORTED # define PNG_hIST_SUPPORTED #endif #ifndef PNG_NO_READ_iCCP # define PNG_READ_iCCP_SUPPORTED # define PNG_iCCP_SUPPORTED #endif #ifndef PNG_NO_READ_iTXt # ifndef PNG_READ_iTXt_SUPPORTED # define PNG_READ_iTXt_SUPPORTED # endif # ifndef PNG_iTXt_SUPPORTED # define PNG_iTXt_SUPPORTED # endif #endif #ifndef PNG_NO_READ_oFFs # define PNG_READ_oFFs_SUPPORTED # define PNG_oFFs_SUPPORTED #endif #ifndef PNG_NO_READ_pCAL # define PNG_READ_pCAL_SUPPORTED # define PNG_pCAL_SUPPORTED #endif #ifndef PNG_NO_READ_sCAL # define PNG_READ_sCAL_SUPPORTED # define PNG_sCAL_SUPPORTED #endif #ifndef PNG_NO_READ_pHYs # define PNG_READ_pHYs_SUPPORTED # define PNG_pHYs_SUPPORTED #endif #ifndef PNG_NO_READ_sBIT # define PNG_READ_sBIT_SUPPORTED # define PNG_sBIT_SUPPORTED #endif #ifndef PNG_NO_READ_sPLT # define PNG_READ_sPLT_SUPPORTED # define PNG_sPLT_SUPPORTED #endif #ifndef PNG_NO_READ_sRGB # define PNG_READ_sRGB_SUPPORTED # define PNG_sRGB_SUPPORTED #endif #ifndef PNG_NO_READ_tEXt # define PNG_READ_tEXt_SUPPORTED # define PNG_tEXt_SUPPORTED #endif #ifndef PNG_NO_READ_tIME # define PNG_READ_tIME_SUPPORTED # define PNG_tIME_SUPPORTED #endif #ifndef PNG_NO_READ_tRNS # define PNG_READ_tRNS_SUPPORTED # define PNG_tRNS_SUPPORTED #endif #ifndef PNG_NO_READ_zTXt # define PNG_READ_zTXt_SUPPORTED # define PNG_zTXt_SUPPORTED #endif #ifndef PNG_NO_READ_UNKNOWN_CHUNKS # define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED # define PNG_UNKNOWN_CHUNKS_SUPPORTED # endif # ifndef PNG_NO_HANDLE_AS_UNKNOWN # define PNG_HANDLE_AS_UNKNOWN_SUPPORTED # endif #endif #if !defined(PNG_NO_READ_USER_CHUNKS) && \ defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) # define PNG_READ_USER_CHUNKS_SUPPORTED # define PNG_USER_CHUNKS_SUPPORTED # ifdef PNG_NO_READ_UNKNOWN_CHUNKS # undef PNG_NO_READ_UNKNOWN_CHUNKS # endif # ifdef PNG_NO_HANDLE_AS_UNKNOWN # undef PNG_NO_HANDLE_AS_UNKNOWN # endif #endif #ifndef PNG_NO_READ_OPT_PLTE # define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ #endif /* optional PLTE chunk in RGB and RGBA images */ #if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ defined(PNG_READ_zTXt_SUPPORTED) # define PNG_READ_TEXT_SUPPORTED # define PNG_TEXT_SUPPORTED #endif #endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ #ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED #ifdef PNG_NO_WRITE_TEXT # define PNG_NO_WRITE_iTXt # define PNG_NO_WRITE_tEXt # define PNG_NO_WRITE_zTXt #endif #ifndef PNG_NO_WRITE_bKGD # define PNG_WRITE_bKGD_SUPPORTED # ifndef PNG_bKGD_SUPPORTED # define PNG_bKGD_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_cHRM # define PNG_WRITE_cHRM_SUPPORTED # ifndef PNG_cHRM_SUPPORTED # define PNG_cHRM_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_gAMA # define PNG_WRITE_gAMA_SUPPORTED # ifndef PNG_gAMA_SUPPORTED # define PNG_gAMA_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_hIST # define PNG_WRITE_hIST_SUPPORTED # ifndef PNG_hIST_SUPPORTED # define PNG_hIST_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_iCCP # define PNG_WRITE_iCCP_SUPPORTED # ifndef PNG_iCCP_SUPPORTED # define PNG_iCCP_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_iTXt # ifndef PNG_WRITE_iTXt_SUPPORTED # define PNG_WRITE_iTXt_SUPPORTED # endif # ifndef PNG_iTXt_SUPPORTED # define PNG_iTXt_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_oFFs # define PNG_WRITE_oFFs_SUPPORTED # ifndef PNG_oFFs_SUPPORTED # define PNG_oFFs_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_pCAL # define PNG_WRITE_pCAL_SUPPORTED # ifndef PNG_pCAL_SUPPORTED # define PNG_pCAL_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_sCAL # define PNG_WRITE_sCAL_SUPPORTED # ifndef PNG_sCAL_SUPPORTED # define PNG_sCAL_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_pHYs # define PNG_WRITE_pHYs_SUPPORTED # ifndef PNG_pHYs_SUPPORTED # define PNG_pHYs_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_sBIT # define PNG_WRITE_sBIT_SUPPORTED # ifndef PNG_sBIT_SUPPORTED # define PNG_sBIT_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_sPLT # define PNG_WRITE_sPLT_SUPPORTED # ifndef PNG_sPLT_SUPPORTED # define PNG_sPLT_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_sRGB # define PNG_WRITE_sRGB_SUPPORTED # ifndef PNG_sRGB_SUPPORTED # define PNG_sRGB_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_tEXt # define PNG_WRITE_tEXt_SUPPORTED # ifndef PNG_tEXt_SUPPORTED # define PNG_tEXt_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_tIME # define PNG_WRITE_tIME_SUPPORTED # ifndef PNG_tIME_SUPPORTED # define PNG_tIME_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_tRNS # define PNG_WRITE_tRNS_SUPPORTED # ifndef PNG_tRNS_SUPPORTED # define PNG_tRNS_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_zTXt # define PNG_WRITE_zTXt_SUPPORTED # ifndef PNG_zTXt_SUPPORTED # define PNG_zTXt_SUPPORTED # endif #endif #ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS # define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED # define PNG_UNKNOWN_CHUNKS_SUPPORTED # endif # ifndef PNG_NO_HANDLE_AS_UNKNOWN # ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED # define PNG_HANDLE_AS_UNKNOWN_SUPPORTED # endif # endif #endif #if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ defined(PNG_WRITE_zTXt_SUPPORTED) # define PNG_WRITE_TEXT_SUPPORTED # ifndef PNG_TEXT_SUPPORTED # define PNG_TEXT_SUPPORTED # endif #endif #endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ /* Turn this off to disable png_read_png() and * png_write_png() and leave the row_pointers member * out of the info structure. */ #ifndef PNG_NO_INFO_IMAGE # define PNG_INFO_IMAGE_SUPPORTED #endif /* need the time information for reading tIME chunks */ #if defined(PNG_tIME_SUPPORTED) # if !defined(_WIN32_WCE) /* "time.h" functions are not supported on WindowsCE */ # include # endif #endif /* Some typedefs to get us started. These should be safe on most of the * common platforms. The typedefs should be at least as large as the * numbers suggest (a png_uint_32 must be at least 32 bits long), but they * don't have to be exactly that size. Some compilers dislike passing * unsigned shorts as function parameters, so you may be better off using * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may * want to have unsigned int for png_uint_32 instead of unsigned long. */ typedef unsigned long png_uint_32; typedef long png_int_32; typedef unsigned short png_uint_16; typedef short png_int_16; typedef unsigned char png_byte; /* This is usually size_t. It is typedef'ed just in case you need it to change (I'm not sure if you will or not, so I thought I'd be safe) */ #ifdef PNG_SIZE_T typedef PNG_SIZE_T png_size_t; # define png_sizeof(x) png_convert_size(sizeof (x)) #else typedef size_t png_size_t; # define png_sizeof(x) sizeof (x) #endif /* The following is needed for medium model support. It cannot be in the * PNG_INTERNAL section. Needs modification for other compilers besides * MSC. Model independent support declares all arrays and pointers to be * large using the far keyword. The zlib version used must also support * model independent data. As of version zlib 1.0.4, the necessary changes * have been made in zlib. The USE_FAR_KEYWORD define triggers other * changes that are needed. (Tim Wegner) */ /* Separate compiler dependencies (problem here is that zlib.h always defines FAR. (SJT) */ #ifdef __BORLANDC__ # if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) # define LDATA 1 # else # define LDATA 0 # endif /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ # if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) # define PNG_MAX_MALLOC_64K # if (LDATA != 1) # ifndef FAR # define FAR __far # endif # define USE_FAR_KEYWORD # endif /* LDATA != 1 */ /* Possibly useful for moving data out of default segment. * Uncomment it if you want. Could also define FARDATA as * const if your compiler supports it. (SJT) # define FARDATA FAR */ # endif /* __WIN32__, __FLAT__, __CYGWIN__ */ #endif /* __BORLANDC__ */ /* Suggest testing for specific compiler first before testing for * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, * making reliance oncertain keywords suspect. (SJT) */ /* MSC Medium model */ #if defined(FAR) # if defined(M_I86MM) # define USE_FAR_KEYWORD # define FARDATA FAR # include # endif #endif /* SJT: default case */ #ifndef FAR # define FAR #endif /* At this point FAR is always defined */ #ifndef FARDATA # define FARDATA #endif /* Typedef for floating-point numbers that are converted to fixed-point with a multiple of 100,000, e.g., int_gamma */ typedef png_int_32 png_fixed_point; /* Add typedefs for pointers */ typedef void FAR * png_voidp; typedef png_byte FAR * png_bytep; typedef png_uint_32 FAR * png_uint_32p; typedef png_int_32 FAR * png_int_32p; typedef png_uint_16 FAR * png_uint_16p; typedef png_int_16 FAR * png_int_16p; typedef PNG_CONST char FAR * png_const_charp; typedef char FAR * png_charp; typedef png_fixed_point FAR * png_fixed_point_p; #ifndef PNG_NO_STDIO #if defined(_WIN32_WCE) typedef HANDLE png_FILE_p; #else typedef FILE * png_FILE_p; #endif #endif #ifdef PNG_FLOATING_POINT_SUPPORTED typedef double FAR * png_doublep; #endif /* Pointers to pointers; i.e. arrays */ typedef png_byte FAR * FAR * png_bytepp; typedef png_uint_32 FAR * FAR * png_uint_32pp; typedef png_int_32 FAR * FAR * png_int_32pp; typedef png_uint_16 FAR * FAR * png_uint_16pp; typedef png_int_16 FAR * FAR * png_int_16pp; typedef PNG_CONST char FAR * FAR * png_const_charpp; typedef char FAR * FAR * png_charpp; typedef png_fixed_point FAR * FAR * png_fixed_point_pp; #ifdef PNG_FLOATING_POINT_SUPPORTED typedef double FAR * FAR * png_doublepp; #endif /* Pointers to pointers to pointers; i.e., pointer to array */ typedef char FAR * FAR * FAR * png_charppp; /* libpng typedefs for types in zlib. If zlib changes * or another compression library is used, then change these. * Eliminates need to change all the source files. */ typedef charf * png_zcharp; typedef charf * FAR * png_zcharpp; typedef z_stream FAR * png_zstreamp; /* * Define PNG_BUILD_DLL if the module being built is a Windows * LIBPNG DLL. * * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. * It is equivalent to Microsoft predefined macro _DLL that is * automatically defined when you compile using the share * version of the CRT (C Run-Time library) * * The cygwin mods make this behavior a little different: * Define PNG_BUILD_DLL if you are building a dll for use with cygwin * Define PNG_STATIC if you are building a static library for use with cygwin, * -or- if you are building an application that you want to link to the * static library. * PNG_USE_DLL is defined by default (no user action needed) unless one of * the other flags is defined. */ #if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) # define PNG_DLL #endif /* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib. * When building a static lib, default to no GLOBAL ARRAYS, but allow * command-line override */ #if defined(__CYGWIN__) # if !defined(PNG_STATIC) # if defined(PNG_USE_GLOBAL_ARRAYS) # undef PNG_USE_GLOBAL_ARRAYS # endif # if !defined(PNG_USE_LOCAL_ARRAYS) # define PNG_USE_LOCAL_ARRAYS # endif # else # if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS) # if defined(PNG_USE_GLOBAL_ARRAYS) # undef PNG_USE_GLOBAL_ARRAYS # endif # endif # endif # if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) # define PNG_USE_LOCAL_ARRAYS # endif #endif /* Do not use global arrays (helps with building DLL's) * They are no longer used in libpng itself, since version 1.0.5c, * but might be required for some pre-1.0.5c applications. */ #if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) # if defined(PNG_NO_GLOBAL_ARRAYS) || (defined(__GNUC__) && defined(PNG_DLL)) # define PNG_USE_LOCAL_ARRAYS # else # define PNG_USE_GLOBAL_ARRAYS # endif #endif #if defined(__CYGWIN__) # undef PNGAPI # define PNGAPI __cdecl # undef PNG_IMPEXP # define PNG_IMPEXP #endif /* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", * you may get warnings regarding the linkage of png_zalloc and png_zfree. * Don't ignore those warnings; you must also reset the default calling * convention in your compiler to match your PNGAPI, and you must build * zlib and your applications the same way you build libpng. */ #if defined(__MINGW32__) && !defined(PNG_MODULEDEF) # ifndef PNG_NO_MODULEDEF # define PNG_NO_MODULEDEF # endif #endif #if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) # define PNG_IMPEXP #endif #if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ (( defined(_Windows) || defined(_WINDOWS) || \ defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) # ifndef PNGAPI # if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) # define PNGAPI __cdecl # else # define PNGAPI _cdecl # endif # endif # if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) # define PNG_IMPEXP # endif # if !defined(PNG_IMPEXP) # define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol # define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol /* Borland/Microsoft */ # if defined(_MSC_VER) || defined(__BORLANDC__) # if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) # define PNG_EXPORT PNG_EXPORT_TYPE1 # else # define PNG_EXPORT PNG_EXPORT_TYPE2 # if defined(PNG_BUILD_DLL) # define PNG_IMPEXP __export # else # define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in VC++ */ # endif /* Exists in Borland C++ for C++ classes (== huge) */ # endif # endif # if !defined(PNG_IMPEXP) # if defined(PNG_BUILD_DLL) # define PNG_IMPEXP __declspec(dllexport) # else # define PNG_IMPEXP __declspec(dllimport) # endif # endif # endif /* PNG_IMPEXP */ #else /* !(DLL || non-cygwin WINDOWS) */ # if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) # ifndef PNGAPI # define PNGAPI _System # endif # else # if 0 /* ... other platforms, with other meanings */ # endif # endif #endif #ifndef PNGAPI # define PNGAPI #endif #ifndef PNG_IMPEXP # define PNG_IMPEXP #endif #ifndef PNG_EXPORT # define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol #endif #ifdef PNG_USE_GLOBAL_ARRAYS # ifndef PNG_EXPORT_VAR # define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type # endif #endif /* User may want to use these so they are not in PNG_INTERNAL. Any library * functions that are passed far data must be model independent. */ #ifndef PNG_ABORT # define PNG_ABORT() abort() #endif #ifdef PNG_SETJMP_SUPPORTED # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) #else # define png_jmpbuf(png_ptr) \ (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) #endif #if defined(USE_FAR_KEYWORD) /* memory model independent fns */ /* use this to make far-to-near assignments */ # define CHECK 1 # define NOCHECK 0 # define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) # define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) # define png_strcpy _fstrcpy # define png_strncpy _fstrncpy /* Added to v 1.2.6 */ # define png_strlen _fstrlen # define png_memcmp _fmemcmp /* SJT: added */ # define png_memcpy _fmemcpy # define png_memset _fmemset #else /* use the usual functions */ # define CVT_PTR(ptr) (ptr) # define CVT_PTR_NOCHECK(ptr) (ptr) # define png_strcpy strcpy # define png_strncpy strncpy /* Added to v 1.2.6 */ # define png_strlen strlen # define png_memcmp memcmp /* SJT: added */ # define png_memcpy memcpy # define png_memset memset #endif /* End of memory model independent support */ /* Just a little check that someone hasn't tried to define something * contradictory. */ #if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) # undef PNG_ZBUF_SIZE # define PNG_ZBUF_SIZE 65536L #endif #ifdef PNG_READ_SUPPORTED /* Prior to libpng-1.0.9, this block was in pngasmrd.h */ #if defined(PNG_INTERNAL) /* These are the default thresholds before the MMX code kicks in; if either * rowbytes or bitdepth is below the threshold, plain C code is used. These * can be overridden at runtime via the png_set_mmx_thresholds() call in * libpng 1.2.0 and later. The values below were chosen by Intel. */ #ifndef PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT # define PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT 128 /* >= */ #endif #ifndef PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT # define PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT 9 /* >= */ #endif /* Set this in the makefile for VC++ on Pentium, not here. */ /* Platform must be Pentium. Makefile must assemble and load pngvcrd.c . * MMX will be detected at run time and used if present. */ #ifdef PNG_USE_PNGVCRD # define PNG_HAVE_ASSEMBLER_COMBINE_ROW # define PNG_HAVE_ASSEMBLER_READ_INTERLACE # define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW #endif /* Set this in the makefile for gcc/as on Pentium, not here. */ /* Platform must be Pentium. Makefile must assemble and load pnggccrd.c . * MMX will be detected at run time and used if present. */ #ifdef PNG_USE_PNGGCCRD # define PNG_HAVE_ASSEMBLER_COMBINE_ROW # define PNG_HAVE_ASSEMBLER_READ_INTERLACE # define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW #endif /* - see pnggccrd.c for info about what is currently enabled */ #endif /* PNG_INTERNAL */ #endif /* PNG_READ_SUPPORTED */ #endif /* PNGCONF_H */ htmldoc-1.8.27/png/pngwrite.c0100664000212600000240000013542010124712606014515 0ustar mikeuser /* pngwrite.c - general routines to write a PNG file * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ /* get internal access to png.h */ #define PNG_INTERNAL #include "png.h" #ifdef PNG_WRITE_SUPPORTED /* Writes all the PNG information. This is the suggested way to use the * library. If you have a new chunk to add, make a function to write it, * and put it in the correct location here. If you want the chunk written * after the image data, put it in png_write_end(). I strongly encourage * you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing * the chunk, as that will keep the code from breaking if you want to just * write a plain PNG file. If you have long comments, I suggest writing * them in png_write_end(), and compressing them. */ void PNGAPI png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_write_info_before_PLTE\n"); if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE)) { png_write_sig(png_ptr); /* write PNG signature */ #if defined(PNG_MNG_FEATURES_SUPPORTED) if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&(png_ptr->mng_features_permitted)) { png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n"); png_ptr->mng_features_permitted=0; } #endif /* write IHDR information. */ png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height, info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type, info_ptr->filter_type, #if defined(PNG_WRITE_INTERLACING_SUPPORTED) info_ptr->interlace_type); #else 0); #endif /* the rest of these check to see if the valid field has the appropriate flag set, and if it does, writes the chunk. */ #if defined(PNG_WRITE_gAMA_SUPPORTED) if (info_ptr->valid & PNG_INFO_gAMA) { # ifdef PNG_FLOATING_POINT_SUPPORTED png_write_gAMA(png_ptr, info_ptr->gamma); #else #ifdef PNG_FIXED_POINT_SUPPORTED png_write_gAMA_fixed(png_ptr, info_ptr->int_gamma); # endif #endif } #endif #if defined(PNG_WRITE_sRGB_SUPPORTED) if (info_ptr->valid & PNG_INFO_sRGB) png_write_sRGB(png_ptr, (int)info_ptr->srgb_intent); #endif #if defined(PNG_WRITE_iCCP_SUPPORTED) if (info_ptr->valid & PNG_INFO_iCCP) png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_COMPRESSION_TYPE_BASE, info_ptr->iccp_profile, (int)info_ptr->iccp_proflen); #endif #if defined(PNG_WRITE_sBIT_SUPPORTED) if (info_ptr->valid & PNG_INFO_sBIT) png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type); #endif #if defined(PNG_WRITE_cHRM_SUPPORTED) if (info_ptr->valid & PNG_INFO_cHRM) { #ifdef PNG_FLOATING_POINT_SUPPORTED png_write_cHRM(png_ptr, info_ptr->x_white, info_ptr->y_white, info_ptr->x_red, info_ptr->y_red, info_ptr->x_green, info_ptr->y_green, info_ptr->x_blue, info_ptr->y_blue); #else # ifdef PNG_FIXED_POINT_SUPPORTED png_write_cHRM_fixed(png_ptr, info_ptr->int_x_white, info_ptr->int_y_white, info_ptr->int_x_red, info_ptr->int_y_red, info_ptr->int_x_green, info_ptr->int_y_green, info_ptr->int_x_blue, info_ptr->int_y_blue); # endif #endif } #endif #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) if (info_ptr->unknown_chunks_num) { png_unknown_chunk *up; png_debug(5, "writing extra chunks\n"); for (up = info_ptr->unknown_chunks; up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num; up++) { int keep=png_handle_as_unknown(png_ptr, up->name); if (keep != PNG_HANDLE_CHUNK_NEVER && up->location && !(up->location & PNG_HAVE_PLTE) && !(up->location & PNG_HAVE_IDAT) && ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS || (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS))) { png_write_chunk(png_ptr, up->name, up->data, up->size); } } } #endif png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE; } } void PNGAPI png_write_info(png_structp png_ptr, png_infop info_ptr) { #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) int i; #endif png_debug(1, "in png_write_info\n"); png_write_info_before_PLTE(png_ptr, info_ptr); if (info_ptr->valid & PNG_INFO_PLTE) png_write_PLTE(png_ptr, info_ptr->palette, (png_uint_32)info_ptr->num_palette); else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) png_error(png_ptr, "Valid palette required for paletted images\n"); #if defined(PNG_WRITE_tRNS_SUPPORTED) if (info_ptr->valid & PNG_INFO_tRNS) { #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) /* invert the alpha channel (in tRNS) */ if ((png_ptr->transformations & PNG_INVERT_ALPHA) && info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { int j; for (j=0; j<(int)info_ptr->num_trans; j++) info_ptr->trans[j] = (png_byte)(255 - info_ptr->trans[j]); } #endif png_write_tRNS(png_ptr, info_ptr->trans, &(info_ptr->trans_values), info_ptr->num_trans, info_ptr->color_type); } #endif #if defined(PNG_WRITE_bKGD_SUPPORTED) if (info_ptr->valid & PNG_INFO_bKGD) png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type); #endif #if defined(PNG_WRITE_hIST_SUPPORTED) if (info_ptr->valid & PNG_INFO_hIST) png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette); #endif #if defined(PNG_WRITE_oFFs_SUPPORTED) if (info_ptr->valid & PNG_INFO_oFFs) png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset, info_ptr->offset_unit_type); #endif #if defined(PNG_WRITE_pCAL_SUPPORTED) if (info_ptr->valid & PNG_INFO_pCAL) png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0, info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams, info_ptr->pcal_units, info_ptr->pcal_params); #endif #if defined(PNG_WRITE_sCAL_SUPPORTED) if (info_ptr->valid & PNG_INFO_sCAL) #if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) png_write_sCAL(png_ptr, (int)info_ptr->scal_unit, info_ptr->scal_pixel_width, info_ptr->scal_pixel_height); #else #ifdef PNG_FIXED_POINT_SUPPORTED png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit, info_ptr->scal_s_width, info_ptr->scal_s_height); #else png_warning(png_ptr, "png_write_sCAL not supported; sCAL chunk not written.\n"); #endif #endif #endif #if defined(PNG_WRITE_pHYs_SUPPORTED) if (info_ptr->valid & PNG_INFO_pHYs) png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit, info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type); #endif #if defined(PNG_WRITE_tIME_SUPPORTED) if (info_ptr->valid & PNG_INFO_tIME) { png_write_tIME(png_ptr, &(info_ptr->mod_time)); png_ptr->mode |= PNG_WROTE_tIME; } #endif #if defined(PNG_WRITE_sPLT_SUPPORTED) if (info_ptr->valid & PNG_INFO_sPLT) for (i = 0; i < (int)info_ptr->splt_palettes_num; i++) png_write_sPLT(png_ptr, info_ptr->splt_palettes + i); #endif #if defined(PNG_WRITE_TEXT_SUPPORTED) /* Check to see if we need to write text chunks */ for (i = 0; i < info_ptr->num_text; i++) { png_debug2(2, "Writing header text chunk %d, type %d\n", i, info_ptr->text[i].compression); /* an internationalized chunk? */ if (info_ptr->text[i].compression > 0) { #if defined(PNG_WRITE_iTXt_SUPPORTED) /* write international chunk */ png_write_iTXt(png_ptr, info_ptr->text[i].compression, info_ptr->text[i].key, info_ptr->text[i].lang, info_ptr->text[i].lang_key, info_ptr->text[i].text); #else png_warning(png_ptr, "Unable to write international text\n"); #endif /* Mark this chunk as written */ info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; } /* If we want a compressed text chunk */ else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt) { #if defined(PNG_WRITE_zTXt_SUPPORTED) /* write compressed chunk */ png_write_zTXt(png_ptr, info_ptr->text[i].key, info_ptr->text[i].text, 0, info_ptr->text[i].compression); #else png_warning(png_ptr, "Unable to write compressed text\n"); #endif /* Mark this chunk as written */ info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR; } else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE) { #if defined(PNG_WRITE_tEXt_SUPPORTED) /* write uncompressed chunk */ png_write_tEXt(png_ptr, info_ptr->text[i].key, info_ptr->text[i].text, 0); #else png_warning(png_ptr, "Unable to write uncompressed text\n"); #endif /* Mark this chunk as written */ info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; } } #endif #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) if (info_ptr->unknown_chunks_num) { png_unknown_chunk *up; png_debug(5, "writing extra chunks\n"); for (up = info_ptr->unknown_chunks; up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num; up++) { int keep=png_handle_as_unknown(png_ptr, up->name); if (keep != PNG_HANDLE_CHUNK_NEVER && up->location && (up->location & PNG_HAVE_PLTE) && !(up->location & PNG_HAVE_IDAT) && ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS || (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS))) { png_write_chunk(png_ptr, up->name, up->data, up->size); } } } #endif } /* Writes the end of the PNG file. If you don't want to write comments or * time information, you can pass NULL for info. If you already wrote these * in png_write_info(), do not write them again here. If you have long * comments, I suggest writing them here, and compressing them. */ void PNGAPI png_write_end(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_write_end\n"); if (!(png_ptr->mode & PNG_HAVE_IDAT)) png_error(png_ptr, "No IDATs written into file"); /* see if user wants us to write information chunks */ if (info_ptr != NULL) { #if defined(PNG_WRITE_TEXT_SUPPORTED) int i; /* local index variable */ #endif #if defined(PNG_WRITE_tIME_SUPPORTED) /* check to see if user has supplied a time chunk */ if ((info_ptr->valid & PNG_INFO_tIME) && !(png_ptr->mode & PNG_WROTE_tIME)) png_write_tIME(png_ptr, &(info_ptr->mod_time)); #endif #if defined(PNG_WRITE_TEXT_SUPPORTED) /* loop through comment chunks */ for (i = 0; i < info_ptr->num_text; i++) { png_debug2(2, "Writing trailer text chunk %d, type %d\n", i, info_ptr->text[i].compression); /* an internationalized chunk? */ if (info_ptr->text[i].compression > 0) { #if defined(PNG_WRITE_iTXt_SUPPORTED) /* write international chunk */ png_write_iTXt(png_ptr, info_ptr->text[i].compression, info_ptr->text[i].key, info_ptr->text[i].lang, info_ptr->text[i].lang_key, info_ptr->text[i].text); #else png_warning(png_ptr, "Unable to write international text\n"); #endif /* Mark this chunk as written */ info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; } else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt) { #if defined(PNG_WRITE_zTXt_SUPPORTED) /* write compressed chunk */ png_write_zTXt(png_ptr, info_ptr->text[i].key, info_ptr->text[i].text, 0, info_ptr->text[i].compression); #else png_warning(png_ptr, "Unable to write compressed text\n"); #endif /* Mark this chunk as written */ info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR; } else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE) { #if defined(PNG_WRITE_tEXt_SUPPORTED) /* write uncompressed chunk */ png_write_tEXt(png_ptr, info_ptr->text[i].key, info_ptr->text[i].text, 0); #else png_warning(png_ptr, "Unable to write uncompressed text\n"); #endif /* Mark this chunk as written */ info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; } } #endif #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) if (info_ptr->unknown_chunks_num) { png_unknown_chunk *up; png_debug(5, "writing extra chunks\n"); for (up = info_ptr->unknown_chunks; up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num; up++) { int keep=png_handle_as_unknown(png_ptr, up->name); if (keep != PNG_HANDLE_CHUNK_NEVER && up->location && (up->location & PNG_AFTER_IDAT) && ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS || (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS))) { png_write_chunk(png_ptr, up->name, up->data, up->size); } } } #endif } png_ptr->mode |= PNG_AFTER_IDAT; /* write end of PNG file */ png_write_IEND(png_ptr); #if 0 /* This flush, added in libpng-1.0.8, causes some applications to crash because they do not set png_ptr->output_flush_fn */ png_flush(png_ptr); #endif } #if defined(PNG_WRITE_tIME_SUPPORTED) #if !defined(_WIN32_WCE) /* "time.h" functions are not supported on WindowsCE */ void PNGAPI png_convert_from_struct_tm(png_timep ptime, struct tm FAR * ttime) { png_debug(1, "in png_convert_from_struct_tm\n"); ptime->year = (png_uint_16)(1900 + ttime->tm_year); ptime->month = (png_byte)(ttime->tm_mon + 1); ptime->day = (png_byte)ttime->tm_mday; ptime->hour = (png_byte)ttime->tm_hour; ptime->minute = (png_byte)ttime->tm_min; ptime->second = (png_byte)ttime->tm_sec; } void PNGAPI png_convert_from_time_t(png_timep ptime, time_t ttime) { struct tm *tbuf; png_debug(1, "in png_convert_from_time_t\n"); tbuf = gmtime(&ttime); png_convert_from_struct_tm(ptime, tbuf); } #endif #endif /* Initialize png_ptr structure, and allocate any memory needed */ png_structp PNGAPI png_create_write_struct(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn) { #ifdef PNG_USER_MEM_SUPPORTED return (png_create_write_struct_2(user_png_ver, error_ptr, error_fn, warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL)); } /* Alternate initialize png_ptr structure, and allocate any memory needed */ png_structp PNGAPI png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn) { #endif /* PNG_USER_MEM_SUPPORTED */ png_structp png_ptr; #ifdef PNG_SETJMP_SUPPORTED #ifdef USE_FAR_KEYWORD jmp_buf jmpbuf; #endif #endif int i; png_debug(1, "in png_create_write_struct\n"); #ifdef PNG_USER_MEM_SUPPORTED png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG, (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr); #else png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); #endif /* PNG_USER_MEM_SUPPORTED */ if (png_ptr == NULL) return (NULL); #if !defined(PNG_1_0_X) #ifdef PNG_ASSEMBLER_CODE_SUPPORTED png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ #endif #endif /* PNG_1_0_X */ /* added at libpng-1.2.6 */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED png_ptr->user_width_max=PNG_USER_WIDTH_MAX; png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; #endif #ifdef PNG_SETJMP_SUPPORTED #ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf)) #else if (setjmp(png_ptr->jmpbuf)) #endif { png_free(png_ptr, png_ptr->zbuf); png_ptr->zbuf=NULL; png_destroy_struct(png_ptr); return (NULL); } #ifdef USE_FAR_KEYWORD png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); #endif #endif #ifdef PNG_USER_MEM_SUPPORTED png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn); #endif /* PNG_USER_MEM_SUPPORTED */ png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn); i=0; do { if(user_png_ver[i] != png_libpng_ver[i]) png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; } while (png_libpng_ver[i++]); if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH) { /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so * we must recompile any applications that use any older library version. * For versions after libpng 1.0, we will be compatible, so we need * only check the first digit. */ if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] || (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) || (user_png_ver[0] == '0' && user_png_ver[2] < '9')) { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char msg[80]; if (user_png_ver) { sprintf(msg, "Application was compiled with png.h from libpng-%.20s", user_png_ver); png_warning(png_ptr, msg); } sprintf(msg, "Application is running with png.c from libpng-%.20s", png_libpng_ver); png_warning(png_ptr, msg); #endif #ifdef PNG_ERROR_NUMBERS_SUPPORTED png_ptr->flags=0; #endif png_error(png_ptr, "Incompatible libpng version in application and library"); } } /* initialize zbuf - compression buffer */ png_ptr->zbuf_size = PNG_ZBUF_SIZE; png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL, png_flush_ptr_NULL); #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT, 1, png_doublep_NULL, png_doublep_NULL); #endif #ifdef PNG_SETJMP_SUPPORTED /* Applications that neglect to set up their own setjmp() and then encounter a png_error() will longjmp here. Since the jmpbuf is then meaningless we abort instead of returning. */ #ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf)) PNG_ABORT(); png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); #else if (setjmp(png_ptr->jmpbuf)) PNG_ABORT(); #endif #endif return (png_ptr); } /* Initialize png_ptr structure, and allocate any memory needed */ #undef png_write_init void PNGAPI png_write_init(png_structp png_ptr) { /* We only come here via pre-1.0.7-compiled applications */ png_write_init_2(png_ptr, "1.0.6 or earlier", 0, 0); } void PNGAPI png_write_init_2(png_structp png_ptr, png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t png_info_size) { /* We only come here via pre-1.0.12-compiled applications */ #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) if(png_sizeof(png_struct) > png_struct_size || png_sizeof(png_info) > png_info_size) { char msg[80]; png_ptr->warning_fn=NULL; if (user_png_ver) { sprintf(msg, "Application was compiled with png.h from libpng-%.20s", user_png_ver); png_warning(png_ptr, msg); } sprintf(msg, "Application is running with png.c from libpng-%.20s", png_libpng_ver); png_warning(png_ptr, msg); } #endif if(png_sizeof(png_struct) > png_struct_size) { png_ptr->error_fn=NULL; #ifdef PNG_ERROR_NUMBERS_SUPPORTED png_ptr->flags=0; #endif png_error(png_ptr, "The png struct allocated by the application for writing is too small."); } if(png_sizeof(png_info) > png_info_size) { png_ptr->error_fn=NULL; #ifdef PNG_ERROR_NUMBERS_SUPPORTED png_ptr->flags=0; #endif png_error(png_ptr, "The info struct allocated by the application for writing is too small."); } png_write_init_3(&png_ptr, user_png_ver, png_struct_size); } void PNGAPI png_write_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver, png_size_t png_struct_size) { png_structp png_ptr=*ptr_ptr; #ifdef PNG_SETJMP_SUPPORTED jmp_buf tmp_jmp; /* to save current jump buffer */ #endif int i = 0; do { if (user_png_ver[i] != png_libpng_ver[i]) { #ifdef PNG_LEGACY_SUPPORTED png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; #else png_ptr->warning_fn=NULL; png_warning(png_ptr, "Application uses deprecated png_write_init() and should be recompiled."); break; #endif } } while (png_libpng_ver[i++]); png_debug(1, "in png_write_init_3\n"); #ifdef PNG_SETJMP_SUPPORTED /* save jump buffer and error functions */ png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); #endif if (png_sizeof(png_struct) > png_struct_size) { png_destroy_struct(png_ptr); png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); *ptr_ptr = png_ptr; } /* reset all variables to 0 */ png_memset(png_ptr, 0, png_sizeof (png_struct)); /* added at libpng-1.2.6 */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED png_ptr->user_width_max=PNG_USER_WIDTH_MAX; png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; #endif #if !defined(PNG_1_0_X) #ifdef PNG_ASSEMBLER_CODE_SUPPORTED png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ #endif #endif /* PNG_1_0_X */ #ifdef PNG_SETJMP_SUPPORTED /* restore jump buffer */ png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); #endif png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL, png_flush_ptr_NULL); /* initialize zbuf - compression buffer */ png_ptr->zbuf_size = PNG_ZBUF_SIZE; png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT, 1, png_doublep_NULL, png_doublep_NULL); #endif } /* Write a few rows of image data. If the image is interlaced, * either you will have to write the 7 sub images, or, if you * have called png_set_interlace_handling(), you will have to * "write" the image seven times. */ void PNGAPI png_write_rows(png_structp png_ptr, png_bytepp row, png_uint_32 num_rows) { png_uint_32 i; /* row counter */ png_bytepp rp; /* row pointer */ png_debug(1, "in png_write_rows\n"); /* loop through the rows */ for (i = 0, rp = row; i < num_rows; i++, rp++) { png_write_row(png_ptr, *rp); } } /* Write the image. You only need to call this function once, even * if you are writing an interlaced image. */ void PNGAPI png_write_image(png_structp png_ptr, png_bytepp image) { png_uint_32 i; /* row index */ int pass, num_pass; /* pass variables */ png_bytepp rp; /* points to current row */ png_debug(1, "in png_write_image\n"); #if defined(PNG_WRITE_INTERLACING_SUPPORTED) /* intialize interlace handling. If image is not interlaced, this will set pass to 1 */ num_pass = png_set_interlace_handling(png_ptr); #else num_pass = 1; #endif /* loop through passes */ for (pass = 0; pass < num_pass; pass++) { /* loop through image */ for (i = 0, rp = image; i < png_ptr->height; i++, rp++) { png_write_row(png_ptr, *rp); } } } /* called by user to write a row of image data */ void PNGAPI png_write_row(png_structp png_ptr, png_bytep row) { png_debug2(1, "in png_write_row (row %ld, pass %d)\n", png_ptr->row_number, png_ptr->pass); /* initialize transformations and other stuff if first time */ if (png_ptr->row_number == 0 && png_ptr->pass == 0) { /* make sure we wrote the header info */ if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE)) png_error(png_ptr, "png_write_info was never called before png_write_row."); /* check for transforms that have been set but were defined out */ #if !defined(PNG_WRITE_INVERT_SUPPORTED) && defined(PNG_READ_INVERT_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_MONO) png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined."); #endif #if !defined(PNG_WRITE_FILLER_SUPPORTED) && defined(PNG_READ_FILLER_SUPPORTED) if (png_ptr->transformations & PNG_FILLER) png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined."); #endif #if !defined(PNG_WRITE_PACKSWAP_SUPPORTED) && defined(PNG_READ_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) png_warning(png_ptr, "PNG_WRITE_PACKSWAP_SUPPORTED is not defined."); #endif #if !defined(PNG_WRITE_PACK_SUPPORTED) && defined(PNG_READ_PACK_SUPPORTED) if (png_ptr->transformations & PNG_PACK) png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined."); #endif #if !defined(PNG_WRITE_SHIFT_SUPPORTED) && defined(PNG_READ_SHIFT_SUPPORTED) if (png_ptr->transformations & PNG_SHIFT) png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined."); #endif #if !defined(PNG_WRITE_BGR_SUPPORTED) && defined(PNG_READ_BGR_SUPPORTED) if (png_ptr->transformations & PNG_BGR) png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined."); #endif #if !defined(PNG_WRITE_SWAP_SUPPORTED) && defined(PNG_READ_SWAP_SUPPORTED) if (png_ptr->transformations & PNG_SWAP_BYTES) png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined."); #endif png_write_start_row(png_ptr); } #if defined(PNG_WRITE_INTERLACING_SUPPORTED) /* if interlaced and not interested in row, return */ if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) { switch (png_ptr->pass) { case 0: if (png_ptr->row_number & 0x07) { png_write_finish_row(png_ptr); return; } break; case 1: if ((png_ptr->row_number & 0x07) || png_ptr->width < 5) { png_write_finish_row(png_ptr); return; } break; case 2: if ((png_ptr->row_number & 0x07) != 4) { png_write_finish_row(png_ptr); return; } break; case 3: if ((png_ptr->row_number & 0x03) || png_ptr->width < 3) { png_write_finish_row(png_ptr); return; } break; case 4: if ((png_ptr->row_number & 0x03) != 2) { png_write_finish_row(png_ptr); return; } break; case 5: if ((png_ptr->row_number & 0x01) || png_ptr->width < 2) { png_write_finish_row(png_ptr); return; } break; case 6: if (!(png_ptr->row_number & 0x01)) { png_write_finish_row(png_ptr); return; } break; } } #endif /* set up row info for transformations */ png_ptr->row_info.color_type = png_ptr->color_type; png_ptr->row_info.width = png_ptr->usr_width; png_ptr->row_info.channels = png_ptr->usr_channels; png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth; png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth * png_ptr->row_info.channels); png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->row_info.width); png_debug1(3, "row_info->color_type = %d\n", png_ptr->row_info.color_type); png_debug1(3, "row_info->width = %lu\n", png_ptr->row_info.width); png_debug1(3, "row_info->channels = %d\n", png_ptr->row_info.channels); png_debug1(3, "row_info->bit_depth = %d\n", png_ptr->row_info.bit_depth); png_debug1(3, "row_info->pixel_depth = %d\n", png_ptr->row_info.pixel_depth); png_debug1(3, "row_info->rowbytes = %lu\n", png_ptr->row_info.rowbytes); /* Copy user's row into buffer, leaving room for filter byte. */ png_memcpy_check(png_ptr, png_ptr->row_buf + 1, row, png_ptr->row_info.rowbytes); #if defined(PNG_WRITE_INTERLACING_SUPPORTED) /* handle interlacing */ if (png_ptr->interlaced && png_ptr->pass < 6 && (png_ptr->transformations & PNG_INTERLACE)) { png_do_write_interlace(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->pass); /* this should always get caught above, but still ... */ if (!(png_ptr->row_info.width)) { png_write_finish_row(png_ptr); return; } } #endif /* handle other transformations */ if (png_ptr->transformations) png_do_write_transformations(png_ptr); #if defined(PNG_MNG_FEATURES_SUPPORTED) /* Write filter_method 64 (intrapixel differencing) only if * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and * 2. Libpng did not write a PNG signature (this filter_method is only * used in PNG datastreams that are embedded in MNG datastreams) and * 3. The application called png_permit_mng_features with a mask that * included PNG_FLAG_MNG_FILTER_64 and * 4. The filter_method is 64 and * 5. The color_type is RGB or RGBA */ if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING)) { /* Intrapixel differencing */ png_do_write_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1); } #endif /* Find a filter if necessary, filter the row and write it out. */ png_write_find_filter(png_ptr, &(png_ptr->row_info)); if (png_ptr->write_row_fn != NULL) (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass); } #if defined(PNG_WRITE_FLUSH_SUPPORTED) /* Set the automatic flush interval or 0 to turn flushing off */ void PNGAPI png_set_flush(png_structp png_ptr, int nrows) { png_debug(1, "in png_set_flush\n"); png_ptr->flush_dist = (nrows < 0 ? 0 : nrows); } /* flush the current output buffers now */ void PNGAPI png_write_flush(png_structp png_ptr) { int wrote_IDAT; png_debug(1, "in png_write_flush\n"); /* We have already written out all of the data */ if (png_ptr->row_number >= png_ptr->num_rows) return; do { int ret; /* compress the data */ ret = deflate(&png_ptr->zstream, Z_SYNC_FLUSH); wrote_IDAT = 0; /* check for compression errors */ if (ret != Z_OK) { if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } if (!(png_ptr->zstream.avail_out)) { /* write the IDAT and reset the zlib output buffer */ png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; wrote_IDAT = 1; } } while(wrote_IDAT == 1); /* If there is any data left to be output, write it into a new IDAT */ if (png_ptr->zbuf_size != png_ptr->zstream.avail_out) { /* write the IDAT and reset the zlib output buffer */ png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } png_ptr->flush_rows = 0; png_flush(png_ptr); } #endif /* PNG_WRITE_FLUSH_SUPPORTED */ /* free all memory used by the write */ void PNGAPI png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr) { png_structp png_ptr = NULL; png_infop info_ptr = NULL; #ifdef PNG_USER_MEM_SUPPORTED png_free_ptr free_fn = NULL; png_voidp mem_ptr = NULL; #endif png_debug(1, "in png_destroy_write_struct\n"); if (png_ptr_ptr != NULL) { png_ptr = *png_ptr_ptr; #ifdef PNG_USER_MEM_SUPPORTED free_fn = png_ptr->free_fn; mem_ptr = png_ptr->mem_ptr; #endif } if (info_ptr_ptr != NULL) info_ptr = *info_ptr_ptr; if (info_ptr != NULL) { png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) if (png_ptr->num_chunk_list) { png_free(png_ptr, png_ptr->chunk_list); png_ptr->chunk_list=NULL; png_ptr->num_chunk_list=0; } #endif #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn, (png_voidp)mem_ptr); #else png_destroy_struct((png_voidp)info_ptr); #endif *info_ptr_ptr = NULL; } if (png_ptr != NULL) { png_write_destroy(png_ptr); #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn, (png_voidp)mem_ptr); #else png_destroy_struct((png_voidp)png_ptr); #endif *png_ptr_ptr = NULL; } } /* Free any memory used in png_ptr struct (old method) */ void /* PRIVATE */ png_write_destroy(png_structp png_ptr) { #ifdef PNG_SETJMP_SUPPORTED jmp_buf tmp_jmp; /* save jump buffer */ #endif png_error_ptr error_fn; png_error_ptr warning_fn; png_voidp error_ptr; #ifdef PNG_USER_MEM_SUPPORTED png_free_ptr free_fn; #endif png_debug(1, "in png_write_destroy\n"); /* free any memory zlib uses */ deflateEnd(&png_ptr->zstream); /* free our memory. png_free checks NULL for us. */ png_free(png_ptr, png_ptr->zbuf); png_free(png_ptr, png_ptr->row_buf); png_free(png_ptr, png_ptr->prev_row); png_free(png_ptr, png_ptr->sub_row); png_free(png_ptr, png_ptr->up_row); png_free(png_ptr, png_ptr->avg_row); png_free(png_ptr, png_ptr->paeth_row); #if defined(PNG_TIME_RFC1123_SUPPORTED) png_free(png_ptr, png_ptr->time_buffer); #endif #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_free(png_ptr, png_ptr->prev_filters); png_free(png_ptr, png_ptr->filter_weights); png_free(png_ptr, png_ptr->inv_filter_weights); png_free(png_ptr, png_ptr->filter_costs); png_free(png_ptr, png_ptr->inv_filter_costs); #endif #ifdef PNG_SETJMP_SUPPORTED /* reset structure */ png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); #endif error_fn = png_ptr->error_fn; warning_fn = png_ptr->warning_fn; error_ptr = png_ptr->error_ptr; #ifdef PNG_USER_MEM_SUPPORTED free_fn = png_ptr->free_fn; #endif png_memset(png_ptr, 0, png_sizeof (png_struct)); png_ptr->error_fn = error_fn; png_ptr->warning_fn = warning_fn; png_ptr->error_ptr = error_ptr; #ifdef PNG_USER_MEM_SUPPORTED png_ptr->free_fn = free_fn; #endif #ifdef PNG_SETJMP_SUPPORTED png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); #endif } /* Allow the application to select one or more row filters to use. */ void PNGAPI png_set_filter(png_structp png_ptr, int method, int filters) { png_debug(1, "in png_set_filter\n"); #if defined(PNG_MNG_FEATURES_SUPPORTED) if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && (method == PNG_INTRAPIXEL_DIFFERENCING)) method = PNG_FILTER_TYPE_BASE; #endif if (method == PNG_FILTER_TYPE_BASE) { switch (filters & (PNG_ALL_FILTERS | 0x07)) { case 5: case 6: case 7: png_warning(png_ptr, "Unknown row filter for method 0"); case PNG_FILTER_VALUE_NONE: png_ptr->do_filter=PNG_FILTER_NONE; break; case PNG_FILTER_VALUE_SUB: png_ptr->do_filter=PNG_FILTER_SUB; break; case PNG_FILTER_VALUE_UP: png_ptr->do_filter=PNG_FILTER_UP; break; case PNG_FILTER_VALUE_AVG: png_ptr->do_filter=PNG_FILTER_AVG; break; case PNG_FILTER_VALUE_PAETH: png_ptr->do_filter=PNG_FILTER_PAETH;break; default: png_ptr->do_filter = (png_byte)filters; break; } /* If we have allocated the row_buf, this means we have already started * with the image and we should have allocated all of the filter buffers * that have been selected. If prev_row isn't already allocated, then * it is too late to start using the filters that need it, since we * will be missing the data in the previous row. If an application * wants to start and stop using particular filters during compression, * it should start out with all of the filters, and then add and * remove them after the start of compression. */ if (png_ptr->row_buf != NULL) { if ((png_ptr->do_filter & PNG_FILTER_SUB) && png_ptr->sub_row == NULL) { png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB; } if ((png_ptr->do_filter & PNG_FILTER_UP) && png_ptr->up_row == NULL) { if (png_ptr->prev_row == NULL) { png_warning(png_ptr, "Can't add Up filter after starting"); png_ptr->do_filter &= ~PNG_FILTER_UP; } else { png_ptr->up_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->up_row[0] = PNG_FILTER_VALUE_UP; } } if ((png_ptr->do_filter & PNG_FILTER_AVG) && png_ptr->avg_row == NULL) { if (png_ptr->prev_row == NULL) { png_warning(png_ptr, "Can't add Average filter after starting"); png_ptr->do_filter &= ~PNG_FILTER_AVG; } else { png_ptr->avg_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG; } } if ((png_ptr->do_filter & PNG_FILTER_PAETH) && png_ptr->paeth_row == NULL) { if (png_ptr->prev_row == NULL) { png_warning(png_ptr, "Can't add Paeth filter after starting"); png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH); } else { png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH; } } if (png_ptr->do_filter == PNG_NO_FILTERS) png_ptr->do_filter = PNG_FILTER_NONE; } } else png_error(png_ptr, "Unknown custom filter method"); } /* This allows us to influence the way in which libpng chooses the "best" * filter for the current scanline. While the "minimum-sum-of-absolute- * differences metric is relatively fast and effective, there is some * question as to whether it can be improved upon by trying to keep the * filtered data going to zlib more consistent, hopefully resulting in * better compression. */ #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* GRR 970116 */ void PNGAPI png_set_filter_heuristics(png_structp png_ptr, int heuristic_method, int num_weights, png_doublep filter_weights, png_doublep filter_costs) { int i; png_debug(1, "in png_set_filter_heuristics\n"); if (heuristic_method >= PNG_FILTER_HEURISTIC_LAST) { png_warning(png_ptr, "Unknown filter heuristic method"); return; } if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT) { heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED; } if (num_weights < 0 || filter_weights == NULL || heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED) { num_weights = 0; } png_ptr->num_prev_filters = (png_byte)num_weights; png_ptr->heuristic_method = (png_byte)heuristic_method; if (num_weights > 0) { if (png_ptr->prev_filters == NULL) { png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr, (png_uint_32)(png_sizeof(png_byte) * num_weights)); /* To make sure that the weighting starts out fairly */ for (i = 0; i < num_weights; i++) { png_ptr->prev_filters[i] = 255; } } if (png_ptr->filter_weights == NULL) { png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(png_sizeof(png_uint_16) * num_weights)); png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(png_sizeof(png_uint_16) * num_weights)); for (i = 0; i < num_weights; i++) { png_ptr->inv_filter_weights[i] = png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR; } } for (i = 0; i < num_weights; i++) { if (filter_weights[i] < 0.0) { png_ptr->inv_filter_weights[i] = png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR; } else { png_ptr->inv_filter_weights[i] = (png_uint_16)((double)PNG_WEIGHT_FACTOR*filter_weights[i]+0.5); png_ptr->filter_weights[i] = (png_uint_16)((double)PNG_WEIGHT_FACTOR/filter_weights[i]+0.5); } } } /* If, in the future, there are other filter methods, this would * need to be based on png_ptr->filter. */ if (png_ptr->filter_costs == NULL) { png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST)); png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr, (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST)); for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) { png_ptr->inv_filter_costs[i] = png_ptr->filter_costs[i] = PNG_COST_FACTOR; } } /* Here is where we set the relative costs of the different filters. We * should take the desired compression level into account when setting * the costs, so that Paeth, for instance, has a high relative cost at low * compression levels, while it has a lower relative cost at higher * compression settings. The filter types are in order of increasing * relative cost, so it would be possible to do this with an algorithm. */ for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) { if (filter_costs == NULL || filter_costs[i] < 0.0) { png_ptr->inv_filter_costs[i] = png_ptr->filter_costs[i] = PNG_COST_FACTOR; } else if (filter_costs[i] >= 1.0) { png_ptr->inv_filter_costs[i] = (png_uint_16)((double)PNG_COST_FACTOR / filter_costs[i] + 0.5); png_ptr->filter_costs[i] = (png_uint_16)((double)PNG_COST_FACTOR * filter_costs[i] + 0.5); } } } #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ void PNGAPI png_set_compression_level(png_structp png_ptr, int level) { png_debug(1, "in png_set_compression_level\n"); png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_LEVEL; png_ptr->zlib_level = level; } void PNGAPI png_set_compression_mem_level(png_structp png_ptr, int mem_level) { png_debug(1, "in png_set_compression_mem_level\n"); png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL; png_ptr->zlib_mem_level = mem_level; } void PNGAPI png_set_compression_strategy(png_structp png_ptr, int strategy) { png_debug(1, "in png_set_compression_strategy\n"); png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY; png_ptr->zlib_strategy = strategy; } void PNGAPI png_set_compression_window_bits(png_structp png_ptr, int window_bits) { if (window_bits > 15) png_warning(png_ptr, "Only compression windows <= 32k supported by PNG"); else if (window_bits < 8) png_warning(png_ptr, "Only compression windows >= 256 supported by PNG"); #ifndef WBITS_8_OK /* avoid libpng bug with 256-byte windows */ if (window_bits == 8) { png_warning(png_ptr, "Compression window is being reset to 512"); window_bits=9; } #endif png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS; png_ptr->zlib_window_bits = window_bits; } void PNGAPI png_set_compression_method(png_structp png_ptr, int method) { png_debug(1, "in png_set_compression_method\n"); if (method != 8) png_warning(png_ptr, "Only compression method 8 is supported by PNG"); png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_METHOD; png_ptr->zlib_method = method; } void PNGAPI png_set_write_status_fn(png_structp png_ptr, png_write_status_ptr write_row_fn) { png_ptr->write_row_fn = write_row_fn; } #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) void PNGAPI png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr write_user_transform_fn) { png_debug(1, "in png_set_write_user_transform_fn\n"); png_ptr->transformations |= PNG_USER_TRANSFORM; png_ptr->write_user_transform_fn = write_user_transform_fn; } #endif #if defined(PNG_INFO_IMAGE_SUPPORTED) void PNGAPI png_write_png(png_structp png_ptr, png_infop info_ptr, int transforms, voidp params) { #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) /* invert the alpha channel from opacity to transparency */ if (transforms & PNG_TRANSFORM_INVERT_ALPHA) png_set_invert_alpha(png_ptr); #endif /* Write the file header information. */ png_write_info(png_ptr, info_ptr); /* ------ these transformations don't touch the info structure ------- */ #if defined(PNG_WRITE_INVERT_SUPPORTED) /* invert monochrome pixels */ if (transforms & PNG_TRANSFORM_INVERT_MONO) png_set_invert_mono(png_ptr); #endif #if defined(PNG_WRITE_SHIFT_SUPPORTED) /* Shift the pixels up to a legal bit depth and fill in * as appropriate to correctly scale the image. */ if ((transforms & PNG_TRANSFORM_SHIFT) && (info_ptr->valid & PNG_INFO_sBIT)) png_set_shift(png_ptr, &info_ptr->sig_bit); #endif #if defined(PNG_WRITE_PACK_SUPPORTED) /* pack pixels into bytes */ if (transforms & PNG_TRANSFORM_PACKING) png_set_packing(png_ptr); #endif #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) /* swap location of alpha bytes from ARGB to RGBA */ if (transforms & PNG_TRANSFORM_SWAP_ALPHA) png_set_swap_alpha(png_ptr); #endif #if defined(PNG_WRITE_FILLER_SUPPORTED) /* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into * RGB (4 channels -> 3 channels). The second parameter is not used. */ if (transforms & PNG_TRANSFORM_STRIP_FILLER) png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); #endif #if defined(PNG_WRITE_BGR_SUPPORTED) /* flip BGR pixels to RGB */ if (transforms & PNG_TRANSFORM_BGR) png_set_bgr(png_ptr); #endif #if defined(PNG_WRITE_SWAP_SUPPORTED) /* swap bytes of 16-bit files to most significant byte first */ if (transforms & PNG_TRANSFORM_SWAP_ENDIAN) png_set_swap(png_ptr); #endif #if defined(PNG_WRITE_PACKSWAP_SUPPORTED) /* swap bits of 1, 2, 4 bit packed pixel formats */ if (transforms & PNG_TRANSFORM_PACKSWAP) png_set_packswap(png_ptr); #endif /* ----------------------- end of transformations ------------------- */ /* write the bits */ if (info_ptr->valid & PNG_INFO_IDAT) png_write_image(png_ptr, info_ptr->row_pointers); /* It is REQUIRED to call this to finish writing the rest of the file */ png_write_end(png_ptr, info_ptr); if(transforms == 0 || params == NULL) /* quiet compiler warnings */ return; } #endif #endif /* PNG_WRITE_SUPPORTED */ htmldoc-1.8.27/png/Y2KINFO0100664000212600000240000000442310124712606013514 0ustar mikeuser Y2K compliance in libpng: ========================= September 12, 2004 Since the PNG Development group is an ad-hoc body, we can't make an official declaration. This is your unofficial assurance that libpng from version 0.71 and upward through 1.2.7 are Y2K compliant. It is my belief that earlier versions were also Y2K compliant. Libpng only has three year fields. One is a 2-byte unsigned integer that will hold years up to 65535. The other two hold the date in text format, and will hold years up to 9999. The integer is "png_uint_16 year" in png_time_struct. The strings are "png_charp time_buffer" in png_struct and "near_time_buffer", which is a local character string in png.c. There are seven time-related functions: png_convert_to_rfc_1123() in png.c (formerly png_convert_to_rfc_1152() in error) png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c png_convert_from_time_t() in pngwrite.c png_get_tIME() in pngget.c png_handle_tIME() in pngrutil.c, called in pngread.c png_set_tIME() in pngset.c png_write_tIME() in pngwutil.c, called in pngwrite.c All appear to handle dates properly in a Y2K environment. The png_convert_from_time_t() function calls gmtime() to convert from system clock time, which returns (year - 1900), which we properly convert to the full 4-digit year. There is a possibility that applications using libpng are not passing 4-digit years into the png_convert_to_rfc_1123() function, or that they are incorrectly passing only a 2-digit year instead of "year - 1900" into the png_convert_from_struct_tm() function, but this is not under our control. The libpng documentation has always stated that it works with 4-digit years, and the APIs have been documented as such. The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned integer to hold the year, and can hold years as large as 65535. zlib, upon which libpng depends, is also Y2K compliant. It contains no date-related code. Glenn Randers-Pehrson libpng maintainer PNG Development Group htmldoc-1.8.27/png/pngpread.c0100664000212600000240000013157510124712606014465 0ustar mikeuser /* pngpread.c - read a png file in push mode * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ #define PNG_INTERNAL #include "png.h" #ifdef PNG_PROGRESSIVE_READ_SUPPORTED /* push model modes */ #define PNG_READ_SIG_MODE 0 #define PNG_READ_CHUNK_MODE 1 #define PNG_READ_IDAT_MODE 2 #define PNG_SKIP_MODE 3 #define PNG_READ_tEXt_MODE 4 #define PNG_READ_zTXt_MODE 5 #define PNG_READ_DONE_MODE 6 #define PNG_READ_iTXt_MODE 7 #define PNG_ERROR_MODE 8 void PNGAPI png_process_data(png_structp png_ptr, png_infop info_ptr, png_bytep buffer, png_size_t buffer_size) { png_push_restore_buffer(png_ptr, buffer, buffer_size); while (png_ptr->buffer_size) { png_process_some_data(png_ptr, info_ptr); } } /* What we do with the incoming data depends on what we were previously * doing before we ran out of data... */ void /* PRIVATE */ png_process_some_data(png_structp png_ptr, png_infop info_ptr) { switch (png_ptr->process_mode) { case PNG_READ_SIG_MODE: { png_push_read_sig(png_ptr, info_ptr); break; } case PNG_READ_CHUNK_MODE: { png_push_read_chunk(png_ptr, info_ptr); break; } case PNG_READ_IDAT_MODE: { png_push_read_IDAT(png_ptr); break; } #if defined(PNG_READ_tEXt_SUPPORTED) case PNG_READ_tEXt_MODE: { png_push_read_tEXt(png_ptr, info_ptr); break; } #endif #if defined(PNG_READ_zTXt_SUPPORTED) case PNG_READ_zTXt_MODE: { png_push_read_zTXt(png_ptr, info_ptr); break; } #endif #if defined(PNG_READ_iTXt_SUPPORTED) case PNG_READ_iTXt_MODE: { png_push_read_iTXt(png_ptr, info_ptr); break; } #endif case PNG_SKIP_MODE: { png_push_crc_finish(png_ptr); break; } default: { png_ptr->buffer_size = 0; break; } } } /* Read any remaining signature bytes from the stream and compare them with * the correct PNG signature. It is possible that this routine is called * with bytes already read from the signature, either because they have been * checked by the calling application, or because of multiple calls to this * routine. */ void /* PRIVATE */ png_push_read_sig(png_structp png_ptr, png_infop info_ptr) { png_size_t num_checked = png_ptr->sig_bytes, num_to_check = 8 - num_checked; if (png_ptr->buffer_size < num_to_check) { num_to_check = png_ptr->buffer_size; } png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]), num_to_check); png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes+num_to_check); if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) { if (num_checked < 4 && png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) png_error(png_ptr, "Not a PNG file"); else png_error(png_ptr, "PNG file corrupted by ASCII conversion"); } else { if (png_ptr->sig_bytes >= 8) { png_ptr->process_mode = PNG_READ_CHUNK_MODE; } } } void /* PRIVATE */ png_push_read_chunk(png_structp png_ptr, png_infop info_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IHDR; PNG_IDAT; PNG_IEND; PNG_PLTE; #if defined(PNG_READ_bKGD_SUPPORTED) PNG_bKGD; #endif #if defined(PNG_READ_cHRM_SUPPORTED) PNG_cHRM; #endif #if defined(PNG_READ_gAMA_SUPPORTED) PNG_gAMA; #endif #if defined(PNG_READ_hIST_SUPPORTED) PNG_hIST; #endif #if defined(PNG_READ_iCCP_SUPPORTED) PNG_iCCP; #endif #if defined(PNG_READ_iTXt_SUPPORTED) PNG_iTXt; #endif #if defined(PNG_READ_oFFs_SUPPORTED) PNG_oFFs; #endif #if defined(PNG_READ_pCAL_SUPPORTED) PNG_pCAL; #endif #if defined(PNG_READ_pHYs_SUPPORTED) PNG_pHYs; #endif #if defined(PNG_READ_sBIT_SUPPORTED) PNG_sBIT; #endif #if defined(PNG_READ_sCAL_SUPPORTED) PNG_sCAL; #endif #if defined(PNG_READ_sRGB_SUPPORTED) PNG_sRGB; #endif #if defined(PNG_READ_sPLT_SUPPORTED) PNG_sPLT; #endif #if defined(PNG_READ_tEXt_SUPPORTED) PNG_tEXt; #endif #if defined(PNG_READ_tIME_SUPPORTED) PNG_tIME; #endif #if defined(PNG_READ_tRNS_SUPPORTED) PNG_tRNS; #endif #if defined(PNG_READ_zTXt_SUPPORTED) PNG_zTXt; #endif #endif /* PNG_USE_LOCAL_ARRAYS */ /* First we make sure we have enough data for the 4 byte chunk name * and the 4 byte chunk length before proceeding with decoding the * chunk data. To fully decode each of these chunks, we also make * sure we have enough data in the buffer for the 4 byte CRC at the * end of every chunk (except IDAT, which is handled separately). */ if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) { png_byte chunk_length[4]; if (png_ptr->buffer_size < 8) { png_push_save_buffer(png_ptr); return; } png_push_fill_buffer(png_ptr, chunk_length, 4); png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length); png_reset_crc(png_ptr); png_crc_read(png_ptr, png_ptr->chunk_name, 4); png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; } if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length); } else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length); png_ptr->process_mode = PNG_READ_DONE_MODE; png_push_have_end(png_ptr, info_ptr); } #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) png_ptr->mode |= PNG_HAVE_IDAT; png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length); if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) png_ptr->mode |= PNG_HAVE_PLTE; else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) { if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before IDAT"); else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && !(png_ptr->mode & PNG_HAVE_PLTE)) png_error(png_ptr, "Missing PLTE before IDAT"); } } #endif else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length); } else if (!png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) { /* If we reach an IDAT chunk, this means we have read all of the * header chunks, and we can start reading the image (or if this * is called after the image has been read - we have an error). */ if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before IDAT"); else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && !(png_ptr->mode & PNG_HAVE_PLTE)) png_error(png_ptr, "Missing PLTE before IDAT"); if (png_ptr->mode & PNG_HAVE_IDAT) { if (png_ptr->push_length == 0) return; if (png_ptr->mode & PNG_AFTER_IDAT) png_error(png_ptr, "Too many IDAT's found"); } png_ptr->idat_size = png_ptr->push_length; png_ptr->mode |= PNG_HAVE_IDAT; png_ptr->process_mode = PNG_READ_IDAT_MODE; png_push_have_info(png_ptr, info_ptr); png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; png_ptr->zstream.next_out = png_ptr->row_buf; return; } #if defined(PNG_READ_gAMA_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_sBIT_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_cHRM_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_sRGB_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_iCCP_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_sPLT_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_tRNS_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_bKGD_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_hIST_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_pHYs_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_oFFs_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_pCAL_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_sCAL_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_tIME_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_tEXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_push_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_zTXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_push_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length); } #endif #if defined(PNG_READ_iTXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length); } #endif else { if (png_ptr->push_length + 4 > png_ptr->buffer_size) { png_push_save_buffer(png_ptr); return; } png_push_handle_unknown(png_ptr, info_ptr, png_ptr->push_length); } png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; } void /* PRIVATE */ png_push_crc_skip(png_structp png_ptr, png_uint_32 skip) { png_ptr->process_mode = PNG_SKIP_MODE; png_ptr->skip_length = skip; } void /* PRIVATE */ png_push_crc_finish(png_structp png_ptr) { if (png_ptr->skip_length && png_ptr->save_buffer_size) { png_size_t save_size; if (png_ptr->skip_length < (png_uint_32)png_ptr->save_buffer_size) save_size = (png_size_t)png_ptr->skip_length; else save_size = png_ptr->save_buffer_size; png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); png_ptr->skip_length -= save_size; png_ptr->buffer_size -= save_size; png_ptr->save_buffer_size -= save_size; png_ptr->save_buffer_ptr += save_size; } if (png_ptr->skip_length && png_ptr->current_buffer_size) { png_size_t save_size; if (png_ptr->skip_length < (png_uint_32)png_ptr->current_buffer_size) save_size = (png_size_t)png_ptr->skip_length; else save_size = png_ptr->current_buffer_size; png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); png_ptr->skip_length -= save_size; png_ptr->buffer_size -= save_size; png_ptr->current_buffer_size -= save_size; png_ptr->current_buffer_ptr += save_size; } if (!png_ptr->skip_length) { if (png_ptr->buffer_size < 4) { png_push_save_buffer(png_ptr); return; } png_crc_finish(png_ptr, 0); png_ptr->process_mode = PNG_READ_CHUNK_MODE; } } void PNGAPI png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length) { png_bytep ptr; ptr = buffer; if (png_ptr->save_buffer_size) { png_size_t save_size; if (length < png_ptr->save_buffer_size) save_size = length; else save_size = png_ptr->save_buffer_size; png_memcpy(ptr, png_ptr->save_buffer_ptr, save_size); length -= save_size; ptr += save_size; png_ptr->buffer_size -= save_size; png_ptr->save_buffer_size -= save_size; png_ptr->save_buffer_ptr += save_size; } if (length && png_ptr->current_buffer_size) { png_size_t save_size; if (length < png_ptr->current_buffer_size) save_size = length; else save_size = png_ptr->current_buffer_size; png_memcpy(ptr, png_ptr->current_buffer_ptr, save_size); png_ptr->buffer_size -= save_size; png_ptr->current_buffer_size -= save_size; png_ptr->current_buffer_ptr += save_size; } } void /* PRIVATE */ png_push_save_buffer(png_structp png_ptr) { if (png_ptr->save_buffer_size) { if (png_ptr->save_buffer_ptr != png_ptr->save_buffer) { png_size_t i,istop; png_bytep sp; png_bytep dp; istop = png_ptr->save_buffer_size; for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer; i < istop; i++, sp++, dp++) { *dp = *sp; } } } if (png_ptr->save_buffer_size + png_ptr->current_buffer_size > png_ptr->save_buffer_max) { png_size_t new_max; png_bytep old_buffer; if (png_ptr->save_buffer_size > PNG_SIZE_MAX - (png_ptr->current_buffer_size + 256)) { png_error(png_ptr, "Potential overflow of save_buffer"); } new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256; old_buffer = png_ptr->save_buffer; png_ptr->save_buffer = (png_bytep)png_malloc(png_ptr, (png_uint_32)new_max); png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size); png_free(png_ptr, old_buffer); png_ptr->save_buffer_max = new_max; } if (png_ptr->current_buffer_size) { png_memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size, png_ptr->current_buffer_ptr, png_ptr->current_buffer_size); png_ptr->save_buffer_size += png_ptr->current_buffer_size; png_ptr->current_buffer_size = 0; } png_ptr->save_buffer_ptr = png_ptr->save_buffer; png_ptr->buffer_size = 0; } void /* PRIVATE */ png_push_restore_buffer(png_structp png_ptr, png_bytep buffer, png_size_t buffer_length) { png_ptr->current_buffer = buffer; png_ptr->current_buffer_size = buffer_length; png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size; png_ptr->current_buffer_ptr = png_ptr->current_buffer; } void /* PRIVATE */ png_push_read_IDAT(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; #endif if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) { png_byte chunk_length[4]; if (png_ptr->buffer_size < 8) { png_push_save_buffer(png_ptr); return; } png_push_fill_buffer(png_ptr, chunk_length, 4); png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length); png_reset_crc(png_ptr); png_crc_read(png_ptr, png_ptr->chunk_name, 4); png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) { png_ptr->process_mode = PNG_READ_CHUNK_MODE; if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) png_error(png_ptr, "Not enough compressed data"); return; } png_ptr->idat_size = png_ptr->push_length; } if (png_ptr->idat_size && png_ptr->save_buffer_size) { png_size_t save_size; if (png_ptr->idat_size < (png_uint_32)png_ptr->save_buffer_size) { save_size = (png_size_t)png_ptr->idat_size; /* check for overflow */ if((png_uint_32)save_size != png_ptr->idat_size) png_error(png_ptr, "save_size overflowed in pngpread"); } else save_size = png_ptr->save_buffer_size; png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size); png_ptr->idat_size -= save_size; png_ptr->buffer_size -= save_size; png_ptr->save_buffer_size -= save_size; png_ptr->save_buffer_ptr += save_size; } if (png_ptr->idat_size && png_ptr->current_buffer_size) { png_size_t save_size; if (png_ptr->idat_size < (png_uint_32)png_ptr->current_buffer_size) { save_size = (png_size_t)png_ptr->idat_size; /* check for overflow */ if((png_uint_32)save_size != png_ptr->idat_size) png_error(png_ptr, "save_size overflowed in pngpread"); } else save_size = png_ptr->current_buffer_size; png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size); png_ptr->idat_size -= save_size; png_ptr->buffer_size -= save_size; png_ptr->current_buffer_size -= save_size; png_ptr->current_buffer_ptr += save_size; } if (!png_ptr->idat_size) { if (png_ptr->buffer_size < 4) { png_push_save_buffer(png_ptr); return; } png_crc_finish(png_ptr, 0); png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; png_ptr->mode |= PNG_AFTER_IDAT; } } void /* PRIVATE */ png_process_IDAT_data(png_structp png_ptr, png_bytep buffer, png_size_t buffer_length) { int ret; if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length) png_error(png_ptr, "Extra compression data"); png_ptr->zstream.next_in = buffer; png_ptr->zstream.avail_in = (uInt)buffer_length; for(;;) { ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); if (ret != Z_OK) { if (ret == Z_STREAM_END) { if (png_ptr->zstream.avail_in) png_error(png_ptr, "Extra compressed data"); if (!(png_ptr->zstream.avail_out)) { png_push_process_row(png_ptr); } png_ptr->mode |= PNG_AFTER_IDAT; png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; break; } else if (ret == Z_BUF_ERROR) break; else png_error(png_ptr, "Decompression Error"); } if (!(png_ptr->zstream.avail_out)) { if (( #if defined(PNG_READ_INTERLACING_SUPPORTED) png_ptr->interlaced && png_ptr->pass > 6) || (!png_ptr->interlaced && #endif png_ptr->row_number == png_ptr->num_rows)) { if (png_ptr->zstream.avail_in) png_warning(png_ptr, "Too much data in IDAT chunks"); png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; break; } png_push_process_row(png_ptr); png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; png_ptr->zstream.next_out = png_ptr->row_buf; } else break; } } void /* PRIVATE */ png_push_process_row(png_structp png_ptr) { png_ptr->row_info.color_type = png_ptr->color_type; png_ptr->row_info.width = png_ptr->iwidth; png_ptr->row_info.channels = png_ptr->channels; png_ptr->row_info.bit_depth = png_ptr->bit_depth; png_ptr->row_info.pixel_depth = png_ptr->pixel_depth; png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->row_info.width); png_read_filter_row(png_ptr, &(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->prev_row + 1, (int)(png_ptr->row_buf[0])); png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1); if (png_ptr->transformations) png_do_read_transformations(png_ptr); #if defined(PNG_READ_INTERLACING_SUPPORTED) /* blow up interlaced rows to full size */ if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) { if (png_ptr->pass < 6) /* old interface (pre-1.0.9): png_do_read_interlace(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); */ png_do_read_interlace(png_ptr); switch (png_ptr->pass) { case 0: { int i; for (i = 0; i < 8 && png_ptr->pass == 0; i++) { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); /* updates png_ptr->pass */ } if (png_ptr->pass == 2) /* pass 1 might be empty */ { for (i = 0; i < 4 && png_ptr->pass == 2; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } } if (png_ptr->pass == 4 && png_ptr->height <= 4) { for (i = 0; i < 2 && png_ptr->pass == 4; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } } if (png_ptr->pass == 6 && png_ptr->height <= 4) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } break; } case 1: { int i; for (i = 0; i < 8 && png_ptr->pass == 1; i++) { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); } if (png_ptr->pass == 2) /* skip top 4 generated rows */ { for (i = 0; i < 4 && png_ptr->pass == 2; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } } break; } case 2: { int i; for (i = 0; i < 4 && png_ptr->pass == 2; i++) { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); } for (i = 0; i < 4 && png_ptr->pass == 2; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } if (png_ptr->pass == 4) /* pass 3 might be empty */ { for (i = 0; i < 2 && png_ptr->pass == 4; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } } break; } case 3: { int i; for (i = 0; i < 4 && png_ptr->pass == 3; i++) { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); } if (png_ptr->pass == 4) /* skip top two generated rows */ { for (i = 0; i < 2 && png_ptr->pass == 4; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } } break; } case 4: { int i; for (i = 0; i < 2 && png_ptr->pass == 4; i++) { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); } for (i = 0; i < 2 && png_ptr->pass == 4; i++) { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } if (png_ptr->pass == 6) /* pass 5 might be empty */ { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } break; } case 5: { int i; for (i = 0; i < 2 && png_ptr->pass == 5; i++) { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); } if (png_ptr->pass == 6) /* skip top generated row */ { png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } break; } case 6: { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); if (png_ptr->pass != 6) break; png_push_have_row(png_ptr, png_bytep_NULL); png_read_push_finish_row(png_ptr); } } } else #endif { png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_read_push_finish_row(png_ptr); } } void /* PRIVATE */ png_read_push_finish_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* start of interlace block in the y direction */ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; /* offset to next interlace block in the y direction */ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; /* Width of interlace block. This is not currently used - if you need * it, uncomment it here and in png.h const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */ /* Height of interlace block. This is not currently used - if you need * it, uncomment it here and in png.h const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1}; */ #endif png_ptr->row_number++; if (png_ptr->row_number < png_ptr->num_rows) return; if (png_ptr->interlaced) { png_ptr->row_number = 0; png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); do { png_ptr->pass++; if ((png_ptr->pass == 1 && png_ptr->width < 5) || (png_ptr->pass == 3 && png_ptr->width < 3) || (png_ptr->pass == 5 && png_ptr->width < 2)) png_ptr->pass++; if (png_ptr->pass > 7) png_ptr->pass--; if (png_ptr->pass >= 7) break; png_ptr->iwidth = (png_ptr->width + png_pass_inc[png_ptr->pass] - 1 - png_pass_start[png_ptr->pass]) / png_pass_inc[png_ptr->pass]; png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->iwidth) + 1; if (png_ptr->transformations & PNG_INTERLACE) break; png_ptr->num_rows = (png_ptr->height + png_pass_yinc[png_ptr->pass] - 1 - png_pass_ystart[png_ptr->pass]) / png_pass_yinc[png_ptr->pass]; } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0); } } #if defined(PNG_READ_tEXt_SUPPORTED) void /* PRIVATE */ png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) { png_error(png_ptr, "Out of place tEXt"); /* to quiet some compiler warnings */ if(info_ptr == NULL) return; } #ifdef PNG_MAX_MALLOC_64K png_ptr->skip_length = 0; /* This may not be necessary */ if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */ { png_warning(png_ptr, "tEXt chunk too large to fit in memory"); png_ptr->skip_length = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif png_ptr->current_text = (png_charp)png_malloc(png_ptr, (png_uint_32)(length+1)); png_ptr->current_text[length] = '\0'; png_ptr->current_text_ptr = png_ptr->current_text; png_ptr->current_text_size = (png_size_t)length; png_ptr->current_text_left = (png_size_t)length; png_ptr->process_mode = PNG_READ_tEXt_MODE; } void /* PRIVATE */ png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr) { if (png_ptr->buffer_size && png_ptr->current_text_left) { png_size_t text_size; if (png_ptr->buffer_size < png_ptr->current_text_left) text_size = png_ptr->buffer_size; else text_size = png_ptr->current_text_left; png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size); png_ptr->current_text_left -= text_size; png_ptr->current_text_ptr += text_size; } if (!(png_ptr->current_text_left)) { png_textp text_ptr; png_charp text; png_charp key; int ret; if (png_ptr->buffer_size < 4) { png_push_save_buffer(png_ptr); return; } png_push_crc_finish(png_ptr); #if defined(PNG_MAX_MALLOC_64K) if (png_ptr->skip_length) return; #endif key = png_ptr->current_text; for (text = key; *text; text++) /* empty loop */ ; if (text != key + png_ptr->current_text_size) text++; text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)png_sizeof(png_text)); text_ptr->compression = PNG_TEXT_COMPRESSION_NONE; text_ptr->key = key; #ifdef PNG_iTXt_SUPPORTED text_ptr->lang = NULL; text_ptr->lang_key = NULL; #endif text_ptr->text = text; ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1); png_free(png_ptr, key); png_free(png_ptr, text_ptr); png_ptr->current_text = NULL; if (ret) png_warning(png_ptr, "Insufficient memory to store text chunk."); } } #endif #if defined(PNG_READ_zTXt_SUPPORTED) void /* PRIVATE */ png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) { png_error(png_ptr, "Out of place zTXt"); /* to quiet some compiler warnings */ if(info_ptr == NULL) return; } #ifdef PNG_MAX_MALLOC_64K /* We can't handle zTXt chunks > 64K, since we don't have enough space * to be able to store the uncompressed data. Actually, the threshold * is probably around 32K, but it isn't as definite as 64K is. */ if (length > (png_uint_32)65535L) { png_warning(png_ptr, "zTXt chunk too large to fit in memory"); png_push_crc_skip(png_ptr, length); return; } #endif png_ptr->current_text = (png_charp)png_malloc(png_ptr, (png_uint_32)(length+1)); png_ptr->current_text[length] = '\0'; png_ptr->current_text_ptr = png_ptr->current_text; png_ptr->current_text_size = (png_size_t)length; png_ptr->current_text_left = (png_size_t)length; png_ptr->process_mode = PNG_READ_zTXt_MODE; } void /* PRIVATE */ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr) { if (png_ptr->buffer_size && png_ptr->current_text_left) { png_size_t text_size; if (png_ptr->buffer_size < (png_uint_32)png_ptr->current_text_left) text_size = png_ptr->buffer_size; else text_size = png_ptr->current_text_left; png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size); png_ptr->current_text_left -= text_size; png_ptr->current_text_ptr += text_size; } if (!(png_ptr->current_text_left)) { png_textp text_ptr; png_charp text; png_charp key; int ret; png_size_t text_size, key_size; if (png_ptr->buffer_size < 4) { png_push_save_buffer(png_ptr); return; } png_push_crc_finish(png_ptr); key = png_ptr->current_text; for (text = key; *text; text++) /* empty loop */ ; /* zTXt can't have zero text */ if (text == key + png_ptr->current_text_size) { png_ptr->current_text = NULL; png_free(png_ptr, key); return; } text++; if (*text != PNG_TEXT_COMPRESSION_zTXt) /* check compression byte */ { png_ptr->current_text = NULL; png_free(png_ptr, key); return; } text++; png_ptr->zstream.next_in = (png_bytep )text; png_ptr->zstream.avail_in = (uInt)(png_ptr->current_text_size - (text - key)); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; key_size = text - key; text_size = 0; text = NULL; ret = Z_STREAM_END; while (png_ptr->zstream.avail_in) { ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); if (ret != Z_OK && ret != Z_STREAM_END) { inflateReset(&png_ptr->zstream); png_ptr->zstream.avail_in = 0; png_ptr->current_text = NULL; png_free(png_ptr, key); png_free(png_ptr, text); return; } if (!(png_ptr->zstream.avail_out) || ret == Z_STREAM_END) { if (text == NULL) { text = (png_charp)png_malloc(png_ptr, (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out + key_size + 1)); png_memcpy(text + key_size, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); png_memcpy(text, key, key_size); text_size = key_size + png_ptr->zbuf_size - png_ptr->zstream.avail_out; *(text + text_size) = '\0'; } else { png_charp tmp; tmp = text; text = (png_charp)png_malloc(png_ptr, text_size + (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1)); png_memcpy(text, tmp, text_size); png_free(png_ptr, tmp); png_memcpy(text + text_size, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out; *(text + text_size) = '\0'; } if (ret != Z_STREAM_END) { png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } } else { break; } if (ret == Z_STREAM_END) break; } inflateReset(&png_ptr->zstream); png_ptr->zstream.avail_in = 0; if (ret != Z_STREAM_END) { png_ptr->current_text = NULL; png_free(png_ptr, key); png_free(png_ptr, text); return; } png_ptr->current_text = NULL; png_free(png_ptr, key); key = text; text += key_size; text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)png_sizeof(png_text)); text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt; text_ptr->key = key; #ifdef PNG_iTXt_SUPPORTED text_ptr->lang = NULL; text_ptr->lang_key = NULL; #endif text_ptr->text = text; ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1); png_free(png_ptr, key); png_free(png_ptr, text_ptr); if (ret) png_warning(png_ptr, "Insufficient memory to store text chunk."); } } #endif #if defined(PNG_READ_iTXt_SUPPORTED) void /* PRIVATE */ png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) { png_error(png_ptr, "Out of place iTXt"); /* to quiet some compiler warnings */ if(info_ptr == NULL) return; } #ifdef PNG_MAX_MALLOC_64K png_ptr->skip_length = 0; /* This may not be necessary */ if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */ { png_warning(png_ptr, "iTXt chunk too large to fit in memory"); png_ptr->skip_length = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif png_ptr->current_text = (png_charp)png_malloc(png_ptr, (png_uint_32)(length+1)); png_ptr->current_text[length] = '\0'; png_ptr->current_text_ptr = png_ptr->current_text; png_ptr->current_text_size = (png_size_t)length; png_ptr->current_text_left = (png_size_t)length; png_ptr->process_mode = PNG_READ_iTXt_MODE; } void /* PRIVATE */ png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr) { if (png_ptr->buffer_size && png_ptr->current_text_left) { png_size_t text_size; if (png_ptr->buffer_size < png_ptr->current_text_left) text_size = png_ptr->buffer_size; else text_size = png_ptr->current_text_left; png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size); png_ptr->current_text_left -= text_size; png_ptr->current_text_ptr += text_size; } if (!(png_ptr->current_text_left)) { png_textp text_ptr; png_charp key; int comp_flag; png_charp lang; png_charp lang_key; png_charp text; int ret; if (png_ptr->buffer_size < 4) { png_push_save_buffer(png_ptr); return; } png_push_crc_finish(png_ptr); #if defined(PNG_MAX_MALLOC_64K) if (png_ptr->skip_length) return; #endif key = png_ptr->current_text; for (lang = key; *lang; lang++) /* empty loop */ ; if (lang != key + png_ptr->current_text_size) lang++; comp_flag = *lang++; lang++; /* skip comp_type, always zero */ for (lang_key = lang; *lang_key; lang_key++) /* empty loop */ ; lang_key++; /* skip NUL separator */ for (text = lang_key; *text; text++) /* empty loop */ ; if (text != key + png_ptr->current_text_size) text++; text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)png_sizeof(png_text)); text_ptr->compression = comp_flag + 2; text_ptr->key = key; text_ptr->lang = lang; text_ptr->lang_key = lang_key; text_ptr->text = text; text_ptr->text_length = 0; text_ptr->itxt_length = png_strlen(text); ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1); png_ptr->current_text = NULL; png_free(png_ptr, text_ptr); if (ret) png_warning(png_ptr, "Insufficient memory to store iTXt chunk."); } } #endif /* This function is called when we haven't found a handler for this * chunk. If there isn't a problem with the chunk itself (ie a bad chunk * name or a critical chunk), the chunk is (currently) silently ignored. */ void /* PRIVATE */ png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_uint_32 skip=0; png_check_chunk_name(png_ptr, png_ptr->chunk_name); if (!(png_ptr->chunk_name[0] & 0x20)) { #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != PNG_HANDLE_CHUNK_ALWAYS #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) && png_ptr->read_user_chunk_fn == NULL #endif ) #endif png_chunk_error(png_ptr, "unknown critical chunk"); /* to quiet compiler warnings about unused info_ptr */ if (info_ptr == NULL) return; } #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) { png_unknown_chunk chunk; #ifdef PNG_MAX_MALLOC_64K if (length > (png_uint_32)65535L) { png_warning(png_ptr, "unknown chunk too large to fit in memory"); skip = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name); chunk.data = (png_bytep)png_malloc(png_ptr, length); png_crc_read(png_ptr, chunk.data, length); chunk.size = length; #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) if(png_ptr->read_user_chunk_fn != NULL) { /* callback to user unknown chunk handler */ if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0) { if (!(png_ptr->chunk_name[0] & 0x20)) if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != PNG_HANDLE_CHUNK_ALWAYS) png_chunk_error(png_ptr, "unknown critical chunk"); } png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); } else #endif png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); png_free(png_ptr, chunk.data); } else #endif skip=length; png_push_crc_skip(png_ptr, skip); } void /* PRIVATE */ png_push_have_info(png_structp png_ptr, png_infop info_ptr) { if (png_ptr->info_fn != NULL) (*(png_ptr->info_fn))(png_ptr, info_ptr); } void /* PRIVATE */ png_push_have_end(png_structp png_ptr, png_infop info_ptr) { if (png_ptr->end_fn != NULL) (*(png_ptr->end_fn))(png_ptr, info_ptr); } void /* PRIVATE */ png_push_have_row(png_structp png_ptr, png_bytep row) { if (png_ptr->row_fn != NULL) (*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number, (int)png_ptr->pass); } void PNGAPI png_progressive_combine_row (png_structp png_ptr, png_bytep old_row, png_bytep new_row) { #ifdef PNG_USE_LOCAL_ARRAYS const int FARDATA png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; #endif if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */ png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]); } void PNGAPI png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr, png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn) { png_ptr->info_fn = info_fn; png_ptr->row_fn = row_fn; png_ptr->end_fn = end_fn; png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); } png_voidp PNGAPI png_get_progressive_ptr(png_structp png_ptr) { return png_ptr->io_ptr; } #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ htmldoc-1.8.27/png/pngset.c0100664000212600000240000011340010124712606014150 0ustar mikeuser /* pngset.c - storage of image information into info struct * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * The functions here are used during reads to store data from the file * into the info struct, and during writes to store application data * into the info struct for writing into the file. This abstracts the * info struct and allows us to change the structure in the future. */ #define PNG_INTERNAL #include "png.h" #if defined(PNG_bKGD_SUPPORTED) void PNGAPI png_set_bKGD(png_structp png_ptr, png_infop info_ptr, png_color_16p background) { png_debug1(1, "in %s storage function\n", "bKGD"); if (png_ptr == NULL || info_ptr == NULL) return; png_memcpy(&(info_ptr->background), background, png_sizeof(png_color_16)); info_ptr->valid |= PNG_INFO_bKGD; } #endif #if defined(PNG_cHRM_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED void PNGAPI png_set_cHRM(png_structp png_ptr, png_infop info_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y) { png_debug1(1, "in %s storage function\n", "cHRM"); if (png_ptr == NULL || info_ptr == NULL) return; if (white_x < 0.0 || white_y < 0.0 || red_x < 0.0 || red_y < 0.0 || green_x < 0.0 || green_y < 0.0 || blue_x < 0.0 || blue_y < 0.0) { png_warning(png_ptr, "Ignoring attempt to set negative chromaticity value"); return; } if (white_x > 21474.83 || white_y > 21474.83 || red_x > 21474.83 || red_y > 21474.83 || green_x > 21474.83 || green_y > 21474.83 || blue_x > 21474.83 || blue_y > 21474.83) { png_warning(png_ptr, "Ignoring attempt to set chromaticity value exceeding 21474.83"); return; } info_ptr->x_white = (float)white_x; info_ptr->y_white = (float)white_y; info_ptr->x_red = (float)red_x; info_ptr->y_red = (float)red_y; info_ptr->x_green = (float)green_x; info_ptr->y_green = (float)green_y; info_ptr->x_blue = (float)blue_x; info_ptr->y_blue = (float)blue_y; #ifdef PNG_FIXED_POINT_SUPPORTED info_ptr->int_x_white = (png_fixed_point)(white_x*100000.+0.5); info_ptr->int_y_white = (png_fixed_point)(white_y*100000.+0.5); info_ptr->int_x_red = (png_fixed_point)( red_x*100000.+0.5); info_ptr->int_y_red = (png_fixed_point)( red_y*100000.+0.5); info_ptr->int_x_green = (png_fixed_point)(green_x*100000.+0.5); info_ptr->int_y_green = (png_fixed_point)(green_y*100000.+0.5); info_ptr->int_x_blue = (png_fixed_point)( blue_x*100000.+0.5); info_ptr->int_y_blue = (png_fixed_point)( blue_y*100000.+0.5); #endif info_ptr->valid |= PNG_INFO_cHRM; } #endif #ifdef PNG_FIXED_POINT_SUPPORTED void PNGAPI png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x, png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y, png_fixed_point blue_x, png_fixed_point blue_y) { png_debug1(1, "in %s storage function\n", "cHRM"); if (png_ptr == NULL || info_ptr == NULL) return; if (white_x < 0 || white_y < 0 || red_x < 0 || red_y < 0 || green_x < 0 || green_y < 0 || blue_x < 0 || blue_y < 0) { png_warning(png_ptr, "Ignoring attempt to set negative chromaticity value"); return; } if (white_x > (double) PNG_UINT_31_MAX || white_y > (double) PNG_UINT_31_MAX || red_x > (double) PNG_UINT_31_MAX || red_y > (double) PNG_UINT_31_MAX || green_x > (double) PNG_UINT_31_MAX || green_y > (double) PNG_UINT_31_MAX || blue_x > (double) PNG_UINT_31_MAX || blue_y > (double) PNG_UINT_31_MAX) { png_warning(png_ptr, "Ignoring attempt to set chromaticity value exceeding 21474.83"); return; } info_ptr->int_x_white = white_x; info_ptr->int_y_white = white_y; info_ptr->int_x_red = red_x; info_ptr->int_y_red = red_y; info_ptr->int_x_green = green_x; info_ptr->int_y_green = green_y; info_ptr->int_x_blue = blue_x; info_ptr->int_y_blue = blue_y; #ifdef PNG_FLOATING_POINT_SUPPORTED info_ptr->x_white = (float)(white_x/100000.); info_ptr->y_white = (float)(white_y/100000.); info_ptr->x_red = (float)( red_x/100000.); info_ptr->y_red = (float)( red_y/100000.); info_ptr->x_green = (float)(green_x/100000.); info_ptr->y_green = (float)(green_y/100000.); info_ptr->x_blue = (float)( blue_x/100000.); info_ptr->y_blue = (float)( blue_y/100000.); #endif info_ptr->valid |= PNG_INFO_cHRM; } #endif #endif #if defined(PNG_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED void PNGAPI png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma) { double gamma; png_debug1(1, "in %s storage function\n", "gAMA"); if (png_ptr == NULL || info_ptr == NULL) return; /* Check for overflow */ if (file_gamma > 21474.83) { png_warning(png_ptr, "Limiting gamma to 21474.83"); gamma=21474.83; } else gamma=file_gamma; info_ptr->gamma = (float)gamma; #ifdef PNG_FIXED_POINT_SUPPORTED info_ptr->int_gamma = (int)(gamma*100000.+.5); #endif info_ptr->valid |= PNG_INFO_gAMA; if(gamma == 0.0) png_warning(png_ptr, "Setting gamma=0"); } #endif void PNGAPI png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point int_gamma) { png_fixed_point gamma; png_debug1(1, "in %s storage function\n", "gAMA"); if (png_ptr == NULL || info_ptr == NULL) return; if (int_gamma > (png_fixed_point) PNG_UINT_31_MAX) { png_warning(png_ptr, "Limiting gamma to 21474.83"); gamma=PNG_UINT_31_MAX; } else { if (int_gamma < 0) { png_warning(png_ptr, "Setting negative gamma to zero"); gamma=0; } else gamma=int_gamma; } #ifdef PNG_FLOATING_POINT_SUPPORTED info_ptr->gamma = (float)(gamma/100000.); #endif #ifdef PNG_FIXED_POINT_SUPPORTED info_ptr->int_gamma = gamma; #endif info_ptr->valid |= PNG_INFO_gAMA; if(gamma == 0) png_warning(png_ptr, "Setting gamma=0"); } #endif #if defined(PNG_hIST_SUPPORTED) void PNGAPI png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist) { int i; png_debug1(1, "in %s storage function\n", "hIST"); if (png_ptr == NULL || info_ptr == NULL) return; if (info_ptr->num_palette == 0) { png_warning(png_ptr, "Palette size 0, hIST allocation skipped."); return; } #ifdef PNG_FREE_ME_SUPPORTED png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0); #endif /* Changed from info->num_palette to 256 in version 1.2.1 */ png_ptr->hist = (png_uint_16p)png_malloc_warn(png_ptr, (png_uint_32)(256 * png_sizeof (png_uint_16))); if (png_ptr->hist == NULL) { png_warning(png_ptr, "Insufficient memory for hIST chunk data."); return; } for (i = 0; i < info_ptr->num_palette; i++) png_ptr->hist[i] = hist[i]; info_ptr->hist = png_ptr->hist; info_ptr->valid |= PNG_INFO_hIST; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_HIST; #else png_ptr->flags |= PNG_FLAG_FREE_HIST; #endif } #endif void PNGAPI png_set_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_type, int compression_type, int filter_type) { png_debug1(1, "in %s storage function\n", "IHDR"); if (png_ptr == NULL || info_ptr == NULL) return; /* check for width and height valid values */ if (width == 0 || height == 0) png_error(png_ptr, "Image width or height is zero in IHDR"); #ifdef PNG_SET_USER_LIMITS_SUPPORTED if (width > png_ptr->user_width_max || height > png_ptr->user_height_max) png_error(png_ptr, "image size exceeds user limits in IHDR"); #else if (width > PNG_USER_WIDTH_MAX || height > PNG_USER_HEIGHT_MAX) png_error(png_ptr, "image size exceeds user limits in IHDR"); #endif if (width > PNG_UINT_31_MAX || height > PNG_UINT_31_MAX) png_error(png_ptr, "Invalid image size in IHDR"); if ( width > (PNG_UINT_32_MAX >> 3) /* 8-byte RGBA pixels */ - 64 /* bigrowbuf hack */ - 1 /* filter byte */ - 7*8 /* rounding of width to multiple of 8 pixels */ - 8) /* extra max_pixel_depth pad */ png_warning(png_ptr, "Width is too large for libpng to process pixels"); /* check other values */ if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 && bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth in IHDR"); if (color_type < 0 || color_type == 1 || color_type == 5 || color_type > 6) png_error(png_ptr, "Invalid color type in IHDR"); if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) || ((color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_GRAY_ALPHA || color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8)) png_error(png_ptr, "Invalid color type/bit depth combination in IHDR"); if (interlace_type >= PNG_INTERLACE_LAST) png_error(png_ptr, "Unknown interlace method in IHDR"); if (compression_type != PNG_COMPRESSION_TYPE_BASE) png_error(png_ptr, "Unknown compression method in IHDR"); #if defined(PNG_MNG_FEATURES_SUPPORTED) /* Accept filter_method 64 (intrapixel differencing) only if * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and * 2. Libpng did not read a PNG signature (this filter_method is only * used in PNG datastreams that are embedded in MNG datastreams) and * 3. The application called png_permit_mng_features with a mask that * included PNG_FLAG_MNG_FILTER_64 and * 4. The filter_method is 64 and * 5. The color_type is RGB or RGBA */ if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted) png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n"); if(filter_type != PNG_FILTER_TYPE_BASE) { if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && (filter_type == PNG_INTRAPIXEL_DIFFERENCING) && ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) && (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA))) png_error(png_ptr, "Unknown filter method in IHDR"); if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) png_warning(png_ptr, "Invalid filter method in IHDR"); } #else if(filter_type != PNG_FILTER_TYPE_BASE) png_error(png_ptr, "Unknown filter method in IHDR"); #endif info_ptr->width = width; info_ptr->height = height; info_ptr->bit_depth = (png_byte)bit_depth; info_ptr->color_type =(png_byte) color_type; info_ptr->compression_type = (png_byte)compression_type; info_ptr->filter_type = (png_byte)filter_type; info_ptr->interlace_type = (png_byte)interlace_type; if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) info_ptr->channels = 1; else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) info_ptr->channels = 3; else info_ptr->channels = 1; if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) info_ptr->channels++; info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth); /* check for potential overflow */ if ( width > (PNG_UINT_32_MAX >> 3) /* 8-byte RGBA pixels */ - 64 /* bigrowbuf hack */ - 1 /* filter byte */ - 7*8 /* rounding of width to multiple of 8 pixels */ - 8) /* extra max_pixel_depth pad */ info_ptr->rowbytes = (png_size_t)0; else info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,width); } #if defined(PNG_oFFs_SUPPORTED) void PNGAPI png_set_oFFs(png_structp png_ptr, png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, int unit_type) { png_debug1(1, "in %s storage function\n", "oFFs"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->x_offset = offset_x; info_ptr->y_offset = offset_y; info_ptr->offset_unit_type = (png_byte)unit_type; info_ptr->valid |= PNG_INFO_oFFs; } #endif #if defined(PNG_pCAL_SUPPORTED) void PNGAPI png_set_pCAL(png_structp png_ptr, png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp units, png_charpp params) { png_uint_32 length; int i; png_debug1(1, "in %s storage function\n", "pCAL"); if (png_ptr == NULL || info_ptr == NULL) return; length = png_strlen(purpose) + 1; png_debug1(3, "allocating purpose for info (%lu bytes)\n", length); info_ptr->pcal_purpose = (png_charp)png_malloc_warn(png_ptr, length); if (info_ptr->pcal_purpose == NULL) { png_warning(png_ptr, "Insufficient memory for pCAL purpose."); return; } png_memcpy(info_ptr->pcal_purpose, purpose, (png_size_t)length); png_debug(3, "storing X0, X1, type, and nparams in info\n"); info_ptr->pcal_X0 = X0; info_ptr->pcal_X1 = X1; info_ptr->pcal_type = (png_byte)type; info_ptr->pcal_nparams = (png_byte)nparams; length = png_strlen(units) + 1; png_debug1(3, "allocating units for info (%lu bytes)\n", length); info_ptr->pcal_units = (png_charp)png_malloc_warn(png_ptr, length); if (info_ptr->pcal_units == NULL) { png_warning(png_ptr, "Insufficient memory for pCAL units."); return; } png_memcpy(info_ptr->pcal_units, units, (png_size_t)length); info_ptr->pcal_params = (png_charpp)png_malloc_warn(png_ptr, (png_uint_32)((nparams + 1) * png_sizeof(png_charp))); if (info_ptr->pcal_params == NULL) { png_warning(png_ptr, "Insufficient memory for pCAL params."); return; } info_ptr->pcal_params[nparams] = NULL; for (i = 0; i < nparams; i++) { length = png_strlen(params[i]) + 1; png_debug2(3, "allocating parameter %d for info (%lu bytes)\n", i, length); info_ptr->pcal_params[i] = (png_charp)png_malloc_warn(png_ptr, length); if (info_ptr->pcal_params[i] == NULL) { png_warning(png_ptr, "Insufficient memory for pCAL parameter."); return; } png_memcpy(info_ptr->pcal_params[i], params[i], (png_size_t)length); } info_ptr->valid |= PNG_INFO_pCAL; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_PCAL; #endif } #endif #if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED void PNGAPI png_set_sCAL(png_structp png_ptr, png_infop info_ptr, int unit, double width, double height) { png_debug1(1, "in %s storage function\n", "sCAL"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->scal_unit = (png_byte)unit; info_ptr->scal_pixel_width = width; info_ptr->scal_pixel_height = height; info_ptr->valid |= PNG_INFO_sCAL; } #else #ifdef PNG_FIXED_POINT_SUPPORTED void PNGAPI png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr, int unit, png_charp swidth, png_charp sheight) { png_uint_32 length; png_debug1(1, "in %s storage function\n", "sCAL"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->scal_unit = (png_byte)unit; length = png_strlen(swidth) + 1; png_debug1(3, "allocating unit for info (%d bytes)\n", length); info_ptr->scal_s_width = (png_charp)png_malloc_warn(png_ptr, length); if (info_ptr->scal_s_width == NULL) { png_warning(png_ptr, "Memory allocation failed while processing sCAL."); } png_memcpy(info_ptr->scal_s_width, swidth, (png_size_t)length); length = png_strlen(sheight) + 1; png_debug1(3, "allocating unit for info (%d bytes)\n", length); info_ptr->scal_s_height = (png_charp)png_malloc_warn(png_ptr, length); if (info_ptr->scal_s_height == NULL) { png_free (png_ptr, info_ptr->scal_s_width); png_warning(png_ptr, "Memory allocation failed while processing sCAL."); } png_memcpy(info_ptr->scal_s_height, sheight, (png_size_t)length); info_ptr->valid |= PNG_INFO_sCAL; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_SCAL; #endif } #endif #endif #endif #if defined(PNG_pHYs_SUPPORTED) void PNGAPI png_set_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type) { png_debug1(1, "in %s storage function\n", "pHYs"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->x_pixels_per_unit = res_x; info_ptr->y_pixels_per_unit = res_y; info_ptr->phys_unit_type = (png_byte)unit_type; info_ptr->valid |= PNG_INFO_pHYs; } #endif void PNGAPI png_set_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp palette, int num_palette) { png_debug1(1, "in %s storage function\n", "PLTE"); if (png_ptr == NULL || info_ptr == NULL) return; /* * It may not actually be necessary to set png_ptr->palette here; * we do it for backward compatibility with the way the png_handle_tRNS * function used to do the allocation. */ #ifdef PNG_FREE_ME_SUPPORTED png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0); #endif /* Changed in libpng-1.2.1 to allocate 256 instead of num_palette entries, in case of an invalid PNG file that has too-large sample values. */ png_ptr->palette = (png_colorp)png_malloc(png_ptr, 256 * png_sizeof(png_color)); png_memset(png_ptr->palette, 0, 256 * png_sizeof(png_color)); png_memcpy(png_ptr->palette, palette, num_palette * png_sizeof (png_color)); info_ptr->palette = png_ptr->palette; info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_PLTE; #else png_ptr->flags |= PNG_FLAG_FREE_PLTE; #endif info_ptr->valid |= PNG_INFO_PLTE; } #if defined(PNG_sBIT_SUPPORTED) void PNGAPI png_set_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p sig_bit) { png_debug1(1, "in %s storage function\n", "sBIT"); if (png_ptr == NULL || info_ptr == NULL) return; png_memcpy(&(info_ptr->sig_bit), sig_bit, png_sizeof (png_color_8)); info_ptr->valid |= PNG_INFO_sBIT; } #endif #if defined(PNG_sRGB_SUPPORTED) void PNGAPI png_set_sRGB(png_structp png_ptr, png_infop info_ptr, int intent) { png_debug1(1, "in %s storage function\n", "sRGB"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->srgb_intent = (png_byte)intent; info_ptr->valid |= PNG_INFO_sRGB; } void PNGAPI png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr, int intent) { #if defined(PNG_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED float file_gamma; #endif #ifdef PNG_FIXED_POINT_SUPPORTED png_fixed_point int_file_gamma; #endif #endif #if defined(PNG_cHRM_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; #endif #ifdef PNG_FIXED_POINT_SUPPORTED png_fixed_point int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, int_green_y, int_blue_x, int_blue_y; #endif #endif png_debug1(1, "in %s storage function\n", "sRGB_gAMA_and_cHRM"); if (png_ptr == NULL || info_ptr == NULL) return; png_set_sRGB(png_ptr, info_ptr, intent); #if defined(PNG_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED file_gamma = (float).45455; png_set_gAMA(png_ptr, info_ptr, file_gamma); #endif #ifdef PNG_FIXED_POINT_SUPPORTED int_file_gamma = 45455L; png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma); #endif #endif #if defined(PNG_cHRM_SUPPORTED) #ifdef PNG_FIXED_POINT_SUPPORTED int_white_x = 31270L; int_white_y = 32900L; int_red_x = 64000L; int_red_y = 33000L; int_green_x = 30000L; int_green_y = 60000L; int_blue_x = 15000L; int_blue_y = 6000L; png_set_cHRM_fixed(png_ptr, info_ptr, int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, int_green_y, int_blue_x, int_blue_y); #endif #ifdef PNG_FLOATING_POINT_SUPPORTED white_x = (float).3127; white_y = (float).3290; red_x = (float).64; red_y = (float).33; green_x = (float).30; green_y = (float).60; blue_x = (float).15; blue_y = (float).06; png_set_cHRM(png_ptr, info_ptr, white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); #endif #endif } #endif #if defined(PNG_iCCP_SUPPORTED) void PNGAPI png_set_iCCP(png_structp png_ptr, png_infop info_ptr, png_charp name, int compression_type, png_charp profile, png_uint_32 proflen) { png_charp new_iccp_name; png_charp new_iccp_profile; png_debug1(1, "in %s storage function\n", "iCCP"); if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL) return; new_iccp_name = (png_charp)png_malloc_warn(png_ptr, png_strlen(name)+1); if (new_iccp_name == NULL) { png_warning(png_ptr, "Insufficient memory to process iCCP chunk."); return; } png_strcpy(new_iccp_name, name); new_iccp_profile = (png_charp)png_malloc_warn(png_ptr, proflen); if (new_iccp_profile == NULL) { png_free (png_ptr, new_iccp_name); png_warning(png_ptr, "Insufficient memory to process iCCP profile."); return; } png_memcpy(new_iccp_profile, profile, (png_size_t)proflen); png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0); info_ptr->iccp_proflen = proflen; info_ptr->iccp_name = new_iccp_name; info_ptr->iccp_profile = new_iccp_profile; /* Compression is always zero but is here so the API and info structure * does not have to change if we introduce multiple compression types */ info_ptr->iccp_compression = (png_byte)compression_type; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_ICCP; #endif info_ptr->valid |= PNG_INFO_iCCP; } #endif #if defined(PNG_TEXT_SUPPORTED) void PNGAPI png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, int num_text) { int ret; ret=png_set_text_2(png_ptr, info_ptr, text_ptr, num_text); if (ret) png_error(png_ptr, "Insufficient memory to store text"); } int /* PRIVATE */ png_set_text_2(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, int num_text) { int i; png_debug1(1, "in %s storage function\n", (png_ptr->chunk_name[0] == '\0' ? "text" : (png_const_charp)png_ptr->chunk_name)); if (png_ptr == NULL || info_ptr == NULL || num_text == 0) return(0); /* Make sure we have enough space in the "text" array in info_struct * to hold all of the incoming text_ptr objects. */ if (info_ptr->num_text + num_text > info_ptr->max_text) { if (info_ptr->text != NULL) { png_textp old_text; int old_max; old_max = info_ptr->max_text; info_ptr->max_text = info_ptr->num_text + num_text + 8; old_text = info_ptr->text; info_ptr->text = (png_textp)png_malloc_warn(png_ptr, (png_uint_32)(info_ptr->max_text * png_sizeof (png_text))); if (info_ptr->text == NULL) { png_free(png_ptr, old_text); return(1); } png_memcpy(info_ptr->text, old_text, (png_size_t)(old_max * png_sizeof(png_text))); png_free(png_ptr, old_text); } else { info_ptr->max_text = num_text + 8; info_ptr->num_text = 0; info_ptr->text = (png_textp)png_malloc_warn(png_ptr, (png_uint_32)(info_ptr->max_text * png_sizeof (png_text))); if (info_ptr->text == NULL) return(1); #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_TEXT; #endif } png_debug1(3, "allocated %d entries for info_ptr->text\n", info_ptr->max_text); } for (i = 0; i < num_text; i++) { png_size_t text_length,key_len; png_size_t lang_len,lang_key_len; png_textp textp = &(info_ptr->text[info_ptr->num_text]); if (text_ptr[i].key == NULL) continue; key_len = png_strlen(text_ptr[i].key); if(text_ptr[i].compression <= 0) { lang_len = 0; lang_key_len = 0; } else #ifdef PNG_iTXt_SUPPORTED { /* set iTXt data */ if (text_ptr[i].lang != NULL) lang_len = png_strlen(text_ptr[i].lang); else lang_len = 0; if (text_ptr[i].lang_key != NULL) lang_key_len = png_strlen(text_ptr[i].lang_key); else lang_key_len = 0; } #else { png_warning(png_ptr, "iTXt chunk not supported."); continue; } #endif if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0') { text_length = 0; #ifdef PNG_iTXt_SUPPORTED if(text_ptr[i].compression > 0) textp->compression = PNG_ITXT_COMPRESSION_NONE; else #endif textp->compression = PNG_TEXT_COMPRESSION_NONE; } else { text_length = png_strlen(text_ptr[i].text); textp->compression = text_ptr[i].compression; } textp->key = (png_charp)png_malloc_warn(png_ptr, (png_uint_32)(key_len + text_length + lang_len + lang_key_len + 4)); if (textp->key == NULL) return(1); png_debug2(2, "Allocated %lu bytes at %x in png_set_text\n", (png_uint_32)(key_len + lang_len + lang_key_len + text_length + 4), (int)textp->key); png_memcpy(textp->key, text_ptr[i].key, (png_size_t)(key_len)); *(textp->key+key_len) = '\0'; #ifdef PNG_iTXt_SUPPORTED if (text_ptr[i].compression > 0) { textp->lang=textp->key + key_len + 1; png_memcpy(textp->lang, text_ptr[i].lang, lang_len); *(textp->lang+lang_len) = '\0'; textp->lang_key=textp->lang + lang_len + 1; png_memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len); *(textp->lang_key+lang_key_len) = '\0'; textp->text=textp->lang_key + lang_key_len + 1; } else #endif { #ifdef PNG_iTXt_SUPPORTED textp->lang=NULL; textp->lang_key=NULL; #endif textp->text=textp->key + key_len + 1; } if(text_length) png_memcpy(textp->text, text_ptr[i].text, (png_size_t)(text_length)); *(textp->text+text_length) = '\0'; #ifdef PNG_iTXt_SUPPORTED if(textp->compression > 0) { textp->text_length = 0; textp->itxt_length = text_length; } else #endif { textp->text_length = text_length; #ifdef PNG_iTXt_SUPPORTED textp->itxt_length = 0; #endif } info_ptr->text[info_ptr->num_text]= *textp; info_ptr->num_text++; png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text); } return(0); } #endif #if defined(PNG_tIME_SUPPORTED) void PNGAPI png_set_tIME(png_structp png_ptr, png_infop info_ptr, png_timep mod_time) { png_debug1(1, "in %s storage function\n", "tIME"); if (png_ptr == NULL || info_ptr == NULL || (png_ptr->mode & PNG_WROTE_tIME)) return; png_memcpy(&(info_ptr->mod_time), mod_time, png_sizeof (png_time)); info_ptr->valid |= PNG_INFO_tIME; } #endif #if defined(PNG_tRNS_SUPPORTED) void PNGAPI png_set_tRNS(png_structp png_ptr, png_infop info_ptr, png_bytep trans, int num_trans, png_color_16p trans_values) { png_debug1(1, "in %s storage function\n", "tRNS"); if (png_ptr == NULL || info_ptr == NULL) return; if (trans != NULL) { /* * It may not actually be necessary to set png_ptr->trans here; * we do it for backward compatibility with the way the png_handle_tRNS * function used to do the allocation. */ #ifdef PNG_FREE_ME_SUPPORTED png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0); #endif /* Changed from num_trans to 256 in version 1.2.1 */ png_ptr->trans = info_ptr->trans = (png_bytep)png_malloc(png_ptr, (png_uint_32)256); png_memcpy(info_ptr->trans, trans, (png_size_t)num_trans); #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_TRNS; #else png_ptr->flags |= PNG_FLAG_FREE_TRNS; #endif } if (trans_values != NULL) { png_memcpy(&(info_ptr->trans_values), trans_values, png_sizeof(png_color_16)); if (num_trans == 0) num_trans = 1; } info_ptr->num_trans = (png_uint_16)num_trans; info_ptr->valid |= PNG_INFO_tRNS; } #endif #if defined(PNG_sPLT_SUPPORTED) void PNGAPI png_set_sPLT(png_structp png_ptr, png_infop info_ptr, png_sPLT_tp entries, int nentries) { png_sPLT_tp np; int i; np = (png_sPLT_tp)png_malloc_warn(png_ptr, (info_ptr->splt_palettes_num + nentries) * png_sizeof(png_sPLT_t)); if (np == NULL) { png_warning(png_ptr, "No memory for sPLT palettes."); return; } png_memcpy(np, info_ptr->splt_palettes, info_ptr->splt_palettes_num * png_sizeof(png_sPLT_t)); png_free(png_ptr, info_ptr->splt_palettes); info_ptr->splt_palettes=NULL; for (i = 0; i < nentries; i++) { png_sPLT_tp to = np + info_ptr->splt_palettes_num + i; png_sPLT_tp from = entries + i; to->name = (png_charp)png_malloc(png_ptr, png_strlen(from->name) + 1); /* TODO: use png_malloc_warn */ png_strcpy(to->name, from->name); to->entries = (png_sPLT_entryp)png_malloc(png_ptr, from->nentries * png_sizeof(png_sPLT_t)); /* TODO: use png_malloc_warn */ png_memcpy(to->entries, from->entries, from->nentries * png_sizeof(png_sPLT_t)); to->nentries = from->nentries; to->depth = from->depth; } info_ptr->splt_palettes = np; info_ptr->splt_palettes_num += nentries; info_ptr->valid |= PNG_INFO_sPLT; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_SPLT; #endif } #endif /* PNG_sPLT_SUPPORTED */ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) void PNGAPI png_set_unknown_chunks(png_structp png_ptr, png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns) { png_unknown_chunkp np; int i; if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0) return; np = (png_unknown_chunkp)png_malloc_warn(png_ptr, (info_ptr->unknown_chunks_num + num_unknowns) * png_sizeof(png_unknown_chunk)); if (np == NULL) { png_warning(png_ptr, "Out of memory while processing unknown chunk."); return; } png_memcpy(np, info_ptr->unknown_chunks, info_ptr->unknown_chunks_num * png_sizeof(png_unknown_chunk)); png_free(png_ptr, info_ptr->unknown_chunks); info_ptr->unknown_chunks=NULL; for (i = 0; i < num_unknowns; i++) { png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i; png_unknown_chunkp from = unknowns + i; png_strncpy((png_charp)to->name, (png_charp)from->name, 5); to->data = (png_bytep)png_malloc_warn(png_ptr, from->size); if (to->data == NULL) { png_warning(png_ptr, "Out of memory processing unknown chunk."); } else { png_memcpy(to->data, from->data, from->size); to->size = from->size; /* note our location in the read or write sequence */ to->location = (png_byte)(png_ptr->mode & 0xff); } } info_ptr->unknown_chunks = np; info_ptr->unknown_chunks_num += num_unknowns; #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_UNKN; #endif } void PNGAPI png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr, int chunk, int location) { if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk < (int)info_ptr->unknown_chunks_num) info_ptr->unknown_chunks[chunk].location = (png_byte)location; } #endif #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) void PNGAPI png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted) { /* This function is deprecated in favor of png_permit_mng_features() and will be removed from libpng-2.0.0 */ png_debug(1, "in png_permit_empty_plte, DEPRECATED.\n"); if (png_ptr == NULL) return; png_ptr->mng_features_permitted = (png_byte) ((png_ptr->mng_features_permitted & (~(PNG_FLAG_MNG_EMPTY_PLTE))) | ((empty_plte_permitted & PNG_FLAG_MNG_EMPTY_PLTE))); } #endif #if defined(PNG_MNG_FEATURES_SUPPORTED) png_uint_32 PNGAPI png_permit_mng_features (png_structp png_ptr, png_uint_32 mng_features) { png_debug(1, "in png_permit_mng_features\n"); if (png_ptr == NULL) return (png_uint_32)0; png_ptr->mng_features_permitted = (png_byte)(mng_features & PNG_ALL_MNG_FEATURES); return (png_uint_32)png_ptr->mng_features_permitted; } #endif #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) void PNGAPI png_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep chunk_list, int num_chunks) { png_bytep new_list, p; int i, old_num_chunks; if (num_chunks == 0) { if(keep == PNG_HANDLE_CHUNK_ALWAYS || keep == PNG_HANDLE_CHUNK_IF_SAFE) png_ptr->flags |= PNG_FLAG_KEEP_UNKNOWN_CHUNKS; else png_ptr->flags &= ~PNG_FLAG_KEEP_UNKNOWN_CHUNKS; if(keep == PNG_HANDLE_CHUNK_ALWAYS) png_ptr->flags |= PNG_FLAG_KEEP_UNSAFE_CHUNKS; else png_ptr->flags &= ~PNG_FLAG_KEEP_UNSAFE_CHUNKS; return; } if (chunk_list == NULL) return; old_num_chunks=png_ptr->num_chunk_list; new_list=(png_bytep)png_malloc(png_ptr, (png_uint_32)(5*(num_chunks+old_num_chunks))); if(png_ptr->chunk_list != NULL) { png_memcpy(new_list, png_ptr->chunk_list, (png_size_t)(5*old_num_chunks)); png_free(png_ptr, png_ptr->chunk_list); png_ptr->chunk_list=NULL; } png_memcpy(new_list+5*old_num_chunks, chunk_list, (png_size_t)(5*num_chunks)); for (p=new_list+5*old_num_chunks+4, i=0; inum_chunk_list=old_num_chunks+num_chunks; png_ptr->chunk_list=new_list; #ifdef PNG_FREE_ME_SUPPORTED png_ptr->free_me |= PNG_FREE_LIST; #endif } #endif #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) void PNGAPI png_set_read_user_chunk_fn(png_structp png_ptr, png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn) { png_debug(1, "in png_set_read_user_chunk_fn\n"); png_ptr->read_user_chunk_fn = read_user_chunk_fn; png_ptr->user_chunk_ptr = user_chunk_ptr; } #endif #if defined(PNG_INFO_IMAGE_SUPPORTED) void PNGAPI png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers) { png_debug1(1, "in %s storage function\n", "rows"); if (png_ptr == NULL || info_ptr == NULL) return; if(info_ptr->row_pointers && (info_ptr->row_pointers != row_pointers)) png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0); info_ptr->row_pointers = row_pointers; if(row_pointers) info_ptr->valid |= PNG_INFO_IDAT; } #endif #ifdef PNG_WRITE_SUPPORTED void PNGAPI png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size) { if(png_ptr->zbuf) png_free(png_ptr, png_ptr->zbuf); png_ptr->zbuf_size = (png_size_t)size; png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } #endif void PNGAPI png_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask) { if (png_ptr && info_ptr) info_ptr->valid &= ~(mask); } #ifndef PNG_1_0_X #ifdef PNG_ASSEMBLER_CODE_SUPPORTED /* this function was added to libpng 1.2.0 and should always exist by default */ void PNGAPI png_set_asm_flags (png_structp png_ptr, png_uint_32 asm_flags) { png_uint_32 settable_asm_flags; png_uint_32 settable_mmx_flags; settable_mmx_flags = #ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | #endif #ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE PNG_ASM_FLAG_MMX_READ_INTERLACE | #endif #ifdef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW PNG_ASM_FLAG_MMX_READ_FILTER_SUB | PNG_ASM_FLAG_MMX_READ_FILTER_UP | PNG_ASM_FLAG_MMX_READ_FILTER_AVG | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH | #endif 0; /* could be some non-MMX ones in the future, but not currently: */ settable_asm_flags = settable_mmx_flags; if (!(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_COMPILED) || !(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU)) { /* clear all MMX flags if MMX isn't supported */ settable_asm_flags &= ~settable_mmx_flags; png_ptr->asm_flags &= ~settable_mmx_flags; } /* we're replacing the settable bits with those passed in by the user, * so first zero them out of the master copy, then logical-OR in the * allowed subset that was requested */ png_ptr->asm_flags &= ~settable_asm_flags; /* zero them */ png_ptr->asm_flags |= (asm_flags & settable_asm_flags); /* set them */ } #endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ #ifdef PNG_ASSEMBLER_CODE_SUPPORTED /* this function was added to libpng 1.2.0 */ void PNGAPI png_set_mmx_thresholds (png_structp png_ptr, png_byte mmx_bitdepth_threshold, png_uint_32 mmx_rowbytes_threshold) { png_ptr->mmx_bitdepth_threshold = mmx_bitdepth_threshold; png_ptr->mmx_rowbytes_threshold = mmx_rowbytes_threshold; } #endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED /* this function was added to libpng 1.2.6 */ void PNGAPI png_set_user_limits (png_structp png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max) { /* Images with dimensions larger than these limits will be * rejected by png_set_IHDR(). To accept any PNG datastream * regardless of dimensions, set both limits to 0x7ffffffL. */ png_ptr->user_width_max = user_width_max; png_ptr->user_height_max = user_height_max; } #endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */ #endif /* ?PNG_1_0_X */ htmldoc-1.8.27/png/pngwtran.c0100664000212600000240000004122410124712606014514 0ustar mikeuser /* pngwtran.c - transforms the data in a row for PNG writers * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ #define PNG_INTERNAL #include "png.h" #ifdef PNG_WRITE_SUPPORTED /* Transform the data according to the user's wishes. The order of * transformations is significant. */ void /* PRIVATE */ png_do_write_transformations(png_structp png_ptr) { png_debug(1, "in png_do_write_transformations\n"); if (png_ptr == NULL) return; #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) if (png_ptr->transformations & PNG_USER_TRANSFORM) if(png_ptr->write_user_transform_fn != NULL) (*(png_ptr->write_user_transform_fn)) /* user write transform function */ (png_ptr, /* png_ptr */ &(png_ptr->row_info), /* row_info: */ /* png_uint_32 width; width of row */ /* png_uint_32 rowbytes; number of bytes in row */ /* png_byte color_type; color type of pixels */ /* png_byte bit_depth; bit depth of samples */ /* png_byte channels; number of channels (1-4) */ /* png_byte pixel_depth; bits per pixel (depth*channels) */ png_ptr->row_buf + 1); /* start of pixel data for row */ #endif #if defined(PNG_WRITE_FILLER_SUPPORTED) if (png_ptr->transformations & PNG_FILLER) png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->flags); #endif #if defined(PNG_WRITE_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_WRITE_PACK_SUPPORTED) if (png_ptr->transformations & PNG_PACK) png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1, (png_uint_32)png_ptr->bit_depth); #endif #if defined(PNG_WRITE_SWAP_SUPPORTED) if (png_ptr->transformations & PNG_SWAP_BYTES) png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_WRITE_SHIFT_SUPPORTED) if (png_ptr->transformations & PNG_SHIFT) png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1, &(png_ptr->shift)); #endif #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_ALPHA) png_do_write_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) if (png_ptr->transformations & PNG_SWAP_ALPHA) png_do_write_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_WRITE_BGR_SUPPORTED) if (png_ptr->transformations & PNG_BGR) png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif #if defined(PNG_WRITE_INVERT_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_MONO) png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1); #endif } #if defined(PNG_WRITE_PACK_SUPPORTED) /* Pack pixels into bytes. Pass the true bit depth in bit_depth. The * row_info bit depth should be 8 (one pixel per byte). The channels * should be 1 (this only happens on grayscale and paletted images). */ void /* PRIVATE */ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth) { png_debug(1, "in png_do_pack\n"); if (row_info->bit_depth == 8 && #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif row_info->channels == 1) { switch ((int)bit_depth) { case 1: { png_bytep sp, dp; int mask, v; png_uint_32 i; png_uint_32 row_width = row_info->width; sp = row; dp = row; mask = 0x80; v = 0; for (i = 0; i < row_width; i++) { if (*sp != 0) v |= mask; sp++; if (mask > 1) mask >>= 1; else { mask = 0x80; *dp = (png_byte)v; dp++; v = 0; } } if (mask != 0x80) *dp = (png_byte)v; break; } case 2: { png_bytep sp, dp; int shift, v; png_uint_32 i; png_uint_32 row_width = row_info->width; sp = row; dp = row; shift = 6; v = 0; for (i = 0; i < row_width; i++) { png_byte value; value = (png_byte)(*sp & 0x03); v |= (value << shift); if (shift == 0) { shift = 6; *dp = (png_byte)v; dp++; v = 0; } else shift -= 2; sp++; } if (shift != 6) *dp = (png_byte)v; break; } case 4: { png_bytep sp, dp; int shift, v; png_uint_32 i; png_uint_32 row_width = row_info->width; sp = row; dp = row; shift = 4; v = 0; for (i = 0; i < row_width; i++) { png_byte value; value = (png_byte)(*sp & 0x0f); v |= (value << shift); if (shift == 0) { shift = 4; *dp = (png_byte)v; dp++; v = 0; } else shift -= 4; sp++; } if (shift != 4) *dp = (png_byte)v; break; } } row_info->bit_depth = (png_byte)bit_depth; row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels); row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_info->width); } } #endif #if defined(PNG_WRITE_SHIFT_SUPPORTED) /* Shift pixel values to take advantage of whole range. Pass the * true number of bits in bit_depth. The row should be packed * according to row_info->bit_depth. Thus, if you had a row of * bit depth 4, but the pixels only had values from 0 to 7, you * would pass 3 as bit_depth, and this routine would translate the * data to 0 to 15. */ void /* PRIVATE */ png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth) { png_debug(1, "in png_do_shift\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL && #else if ( #endif row_info->color_type != PNG_COLOR_TYPE_PALETTE) { int shift_start[4], shift_dec[4]; int channels = 0; if (row_info->color_type & PNG_COLOR_MASK_COLOR) { shift_start[channels] = row_info->bit_depth - bit_depth->red; shift_dec[channels] = bit_depth->red; channels++; shift_start[channels] = row_info->bit_depth - bit_depth->green; shift_dec[channels] = bit_depth->green; channels++; shift_start[channels] = row_info->bit_depth - bit_depth->blue; shift_dec[channels] = bit_depth->blue; channels++; } else { shift_start[channels] = row_info->bit_depth - bit_depth->gray; shift_dec[channels] = bit_depth->gray; channels++; } if (row_info->color_type & PNG_COLOR_MASK_ALPHA) { shift_start[channels] = row_info->bit_depth - bit_depth->alpha; shift_dec[channels] = bit_depth->alpha; channels++; } /* with low row depths, could only be grayscale, so one channel */ if (row_info->bit_depth < 8) { png_bytep bp = row; png_uint_32 i; png_byte mask; png_uint_32 row_bytes = row_info->rowbytes; if (bit_depth->gray == 1 && row_info->bit_depth == 2) mask = 0x55; else if (row_info->bit_depth == 4 && bit_depth->gray == 3) mask = 0x11; else mask = 0xff; for (i = 0; i < row_bytes; i++, bp++) { png_uint_16 v; int j; v = *bp; *bp = 0; for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0]) { if (j > 0) *bp |= (png_byte)((v << j) & 0xff); else *bp |= (png_byte)((v >> (-j)) & mask); } } } else if (row_info->bit_depth == 8) { png_bytep bp = row; png_uint_32 i; png_uint_32 istop = channels * row_info->width; for (i = 0; i < istop; i++, bp++) { png_uint_16 v; int j; int c = (int)(i%channels); v = *bp; *bp = 0; for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c]) { if (j > 0) *bp |= (png_byte)((v << j) & 0xff); else *bp |= (png_byte)((v >> (-j)) & 0xff); } } } else { png_bytep bp; png_uint_32 i; png_uint_32 istop = channels * row_info->width; for (bp = row, i = 0; i < istop; i++) { int c = (int)(i%channels); png_uint_16 value, v; int j; v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1)); value = 0; for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c]) { if (j > 0) value |= (png_uint_16)((v << j) & (png_uint_16)0xffff); else value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff); } *bp++ = (png_byte)(value >> 8); *bp++ = (png_byte)(value & 0xff); } } } } #endif #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) void /* PRIVATE */ png_do_write_swap_alpha(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_write_swap_alpha\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { /* This converts from ARGB to RGBA */ if (row_info->bit_depth == 8) { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { png_byte save = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = save; } } /* This converts from AARRGGBB to RRGGBBAA */ else { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { png_byte save[2]; save[0] = *(sp++); save[1] = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = save[0]; *(dp++) = save[1]; } } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { /* This converts from AG to GA */ if (row_info->bit_depth == 8) { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { png_byte save = *(sp++); *(dp++) = *(sp++); *(dp++) = save; } } /* This converts from AAGG to GGAA */ else { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { png_byte save[2]; save[0] = *(sp++); save[1] = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = save[0]; *(dp++) = save[1]; } } } } } #endif #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) void /* PRIVATE */ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_write_invert_alpha\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { /* This inverts the alpha channel in RGBA */ if (row_info->bit_depth == 8) { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = (png_byte)(255 - *(sp++)); } } /* This inverts the alpha channel in RRGGBBAA */ else { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = (png_byte)(255 - *(sp++)); *(dp++) = (png_byte)(255 - *(sp++)); } } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { /* This inverts the alpha channel in GA */ if (row_info->bit_depth == 8) { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { *(dp++) = *(sp++); *(dp++) = (png_byte)(255 - *(sp++)); } } /* This inverts the alpha channel in GGAA */ else { png_bytep sp, dp; png_uint_32 i; png_uint_32 row_width = row_info->width; for (i = 0, sp = dp = row; i < row_width; i++) { *(dp++) = *(sp++); *(dp++) = *(sp++); *(dp++) = (png_byte)(255 - *(sp++)); *(dp++) = (png_byte)(255 - *(sp++)); } } } } } #endif #if defined(PNG_MNG_FEATURES_SUPPORTED) /* undoes intrapixel differencing */ void /* PRIVATE */ png_do_write_intrapixel(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_write_intrapixel\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif (row_info->color_type & PNG_COLOR_MASK_COLOR)) { int bytes_per_pixel; png_uint_32 row_width = row_info->width; if (row_info->bit_depth == 8) { png_bytep rp; png_uint_32 i; if (row_info->color_type == PNG_COLOR_TYPE_RGB) bytes_per_pixel = 3; else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) bytes_per_pixel = 4; else return; for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) { *(rp) = (png_byte)((*rp - *(rp+1))&0xff); *(rp+2) = (png_byte)((*(rp+2) - *(rp+1))&0xff); } } else if (row_info->bit_depth == 16) { png_bytep rp; png_uint_32 i; if (row_info->color_type == PNG_COLOR_TYPE_RGB) bytes_per_pixel = 6; else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) bytes_per_pixel = 8; else return; for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) { png_uint_32 s0 = (*(rp ) << 8) | *(rp+1); png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3); png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5); png_uint_32 red = (png_uint_32)((s0-s1) & 0xffffL); png_uint_32 blue = (png_uint_32)((s2-s1) & 0xffffL); *(rp ) = (png_byte)((red >> 8) & 0xff); *(rp+1) = (png_byte)(red & 0xff); *(rp+4) = (png_byte)((blue >> 8) & 0xff); *(rp+5) = (png_byte)(blue & 0xff); } } } } #endif /* PNG_MNG_FEATURES_SUPPORTED */ #endif /* PNG_WRITE_SUPPORTED */ htmldoc-1.8.27/png/LICENSE0100664000212600000240000001001210124712606013504 0ustar mikeuser This copy of the libpng notices is provided for your convenience. In case of any discrepancy between this copy and the notices in the file png.h that is included in the libpng distribution, the latter shall prevail. COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: If you modify libpng you may insert additional notices immediately following this sentence. libpng version 1.2.6, September 12, 2004, is Copyright (c) 2004 Glenn Randers-Pehrson, and is distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors Cosmin Truta libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.0.6 with the following individuals added to the list of Contributing Authors Simon-Pierre Cadieux Eric S. Raymond Gilles Vollant and with the following additions to the disclaimer: There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user. libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-0.96, with the following individuals added to the list of Contributing Authors: Tom Lane Glenn Randers-Pehrson Willem van Schaik libpng versions 0.89, June 1996, through 0.96, May 1997, are Copyright (c) 1996, 1997 Andreas Dilger Distributed according to the same disclaimer and license as libpng-0.88, with the following individuals added to the list of Contributing Authors: John Bowler Kevin Bracey Sam Bushell Magnus Holmgren Greg Roelofs Tom Tanner libpng versions 0.5, May 1995, through 0.88, January 1996, are Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: Andreas Dilger Dave Martindale Guy Eric Schalnat Paul Schmidt Tim Wegner The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors and Group 42, Inc. specifically permit, without fee, and encourage the use of this source code as a component to supporting the PNG file format in commercial products. If you use this source code in a product, acknowledgment is not required but would be appreciated. A "png_get_copyright" function is available, for convenient use in "about" boxes and the like: printf("%s",png_get_copyright(NULL)); Also, the PNG logo (in PNG format, of course) is supplied in the files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a certification mark of the Open Source Initiative. Glenn Randers-Pehrson glennrp@users.sourceforge.net September 12, 2004 htmldoc-1.8.27/png/pngwio.c0100664000212600000240000001642110124712606014160 0ustar mikeuser /* pngwio.c - functions for data output * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file provides a location for all output. Users who need * special handling are expected to write functions that have the same * arguments as these and perform similar functions, but that possibly * use different output methods. Note that you shouldn't change these * functions, but rather write replacement functions and then change * them at run time with png_set_write_fn(...). */ #define PNG_INTERNAL #include "png.h" #ifdef PNG_WRITE_SUPPORTED /* Write the data to whatever output you are using. The default routine writes to a file pointer. Note that this routine sometimes gets called with very small lengths, so you should implement some kind of simple buffering if you are using unbuffered writes. This should never be asked to write more than 64K on a 16 bit machine. */ void /* PRIVATE */ png_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { if (png_ptr->write_data_fn != NULL ) (*(png_ptr->write_data_fn))(png_ptr, data, length); else png_error(png_ptr, "Call to NULL write function"); } #if !defined(PNG_NO_STDIO) /* This is the function that does the actual writing of data. If you are not writing to a standard C stream, you should create a replacement write_data function and use it at run time with png_set_write_fn(), rather than changing the library. */ #ifndef USE_FAR_KEYWORD void PNGAPI png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { png_uint_32 check; #if defined(_WIN32_WCE) if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) check = 0; #else check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); #endif if (check != length) png_error(png_ptr, "Write Error"); } #else /* this is the model-independent version. Since the standard I/O library can't handle far buffers in the medium and small models, we have to copy the data. */ #define NEAR_BUF_SIZE 1024 #define MIN(a,b) (a <= b ? a : b) void PNGAPI png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { png_uint_32 check; png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ png_FILE_p io_ptr; /* Check if data really is near. If so, use usual code. */ near_data = (png_byte *)CVT_PTR_NOCHECK(data); io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); if ((png_bytep)near_data == data) { #if defined(_WIN32_WCE) if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) check = 0; #else check = fwrite(near_data, 1, length, io_ptr); #endif } else { png_byte buf[NEAR_BUF_SIZE]; png_size_t written, remaining, err; check = 0; remaining = length; do { written = MIN(NEAR_BUF_SIZE, remaining); png_memcpy(buf, data, written); /* copy far buffer to near buffer */ #if defined(_WIN32_WCE) if ( !WriteFile(io_ptr, buf, written, &err, NULL) ) err = 0; #else err = fwrite(buf, 1, written, io_ptr); #endif if (err != written) break; else check += err; data += written; remaining -= written; } while (remaining != 0); } if (check != length) png_error(png_ptr, "Write Error"); } #endif #endif /* This function is called to output any data pending writing (normally to disk). After png_flush is called, there should be no data pending writing in any buffers. */ #if defined(PNG_WRITE_FLUSH_SUPPORTED) void /* PRIVATE */ png_flush(png_structp png_ptr) { if (png_ptr->output_flush_fn != NULL) (*(png_ptr->output_flush_fn))(png_ptr); } #if !defined(PNG_NO_STDIO) void PNGAPI png_default_flush(png_structp png_ptr) { #if !defined(_WIN32_WCE) png_FILE_p io_ptr; io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); if (io_ptr != NULL) fflush(io_ptr); #endif } #endif #endif /* This function allows the application to supply new output functions for libpng if standard C streams aren't being used. This function takes as its arguments: png_ptr - pointer to a png output data structure io_ptr - pointer to user supplied structure containing info about the output functions. May be NULL. write_data_fn - pointer to a new output function that takes as its arguments a pointer to a png_struct, a pointer to data to be written, and a 32-bit unsigned int that is the number of bytes to be written. The new write function should call png_error(png_ptr, "Error msg") to exit and output any fatal error messages. flush_data_fn - pointer to a new flush function that takes as its arguments a pointer to a png_struct. After a call to the flush function, there should be no data in any buffers or pending transmission. If the output method doesn't do any buffering of ouput, a function prototype must still be supplied although it doesn't have to do anything. If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time, output_flush_fn will be ignored, although it must be supplied for compatibility. */ void PNGAPI png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) { png_ptr->io_ptr = io_ptr; #if !defined(PNG_NO_STDIO) if (write_data_fn != NULL) png_ptr->write_data_fn = write_data_fn; else png_ptr->write_data_fn = png_default_write_data; #else png_ptr->write_data_fn = write_data_fn; #endif #if defined(PNG_WRITE_FLUSH_SUPPORTED) #if !defined(PNG_NO_STDIO) if (output_flush_fn != NULL) png_ptr->output_flush_fn = output_flush_fn; else png_ptr->output_flush_fn = png_default_flush; #else png_ptr->output_flush_fn = output_flush_fn; #endif #endif /* PNG_WRITE_FLUSH_SUPPORTED */ /* It is an error to read while writing a png file */ if (png_ptr->read_data_fn != NULL) { png_ptr->read_data_fn = NULL; png_warning(png_ptr, "Attempted to set both read_data_fn and write_data_fn in"); png_warning(png_ptr, "the same structure. Resetting read_data_fn to NULL."); } } #if defined(USE_FAR_KEYWORD) #if defined(_MSC_VER) void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) { void *near_ptr; void FAR *far_ptr; FP_OFF(near_ptr) = FP_OFF(ptr); far_ptr = (void FAR *)near_ptr; if(check != 0) if(FP_SEG(ptr) != FP_SEG(far_ptr)) png_error(png_ptr,"segment lost in conversion"); return(near_ptr); } # else void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) { void *near_ptr; void FAR *far_ptr; near_ptr = (void FAR *)ptr; far_ptr = (void FAR *)near_ptr; if(check != 0) if(far_ptr != ptr) png_error(png_ptr,"segment lost in conversion"); return(near_ptr); } # endif # endif #endif /* PNG_WRITE_SUPPORTED */ htmldoc-1.8.27/png/pngrutil.c0100664000212600000240000026171410124712606014530 0ustar mikeuser/* pngrutil.c - utilities to read a PNG file * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file contains routines that are only called from within * libpng itself during the course of reading an image. */ #define PNG_INTERNAL #include "png.h" #if defined(_WIN32_WCE) /* strtod() function is not supported on WindowsCE */ # ifdef PNG_FLOATING_POINT_SUPPORTED __inline double strtod(const char *nptr, char **endptr) { double result = 0; int len; wchar_t *str, *end; len = MultiByteToWideChar(CP_ACP, 0, nptr, -1, NULL, 0); str = (wchar_t *)malloc(len * sizeof(wchar_t)); if ( NULL != str ) { MultiByteToWideChar(CP_ACP, 0, nptr, -1, str, len); result = wcstod(str, &end); len = WideCharToMultiByte(CP_ACP, 0, end, -1, NULL, 0, NULL, NULL); *endptr = (char *)nptr + (png_strlen(nptr) - len + 1); free(str); } return result; } # endif #endif png_uint_32 /* PRIVATE */ png_get_uint_31(png_structp png_ptr, png_bytep buf) { png_uint_32 i = png_get_uint_32(buf); if (i > PNG_UINT_31_MAX) png_error(png_ptr, "PNG unsigned integer out of range.\n"); return (i); } #ifndef PNG_READ_BIG_ENDIAN_SUPPORTED /* Grab an unsigned 32-bit integer from a buffer in big-endian format. */ png_uint_32 /* PRIVATE */ png_get_uint_32(png_bytep buf) { png_uint_32 i = ((png_uint_32)(*buf) << 24) + ((png_uint_32)(*(buf + 1)) << 16) + ((png_uint_32)(*(buf + 2)) << 8) + (png_uint_32)(*(buf + 3)); return (i); } #if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED) /* Grab a signed 32-bit integer from a buffer in big-endian format. The * data is stored in the PNG file in two's complement format, and it is * assumed that the machine format for signed integers is the same. */ png_int_32 /* PRIVATE */ png_get_int_32(png_bytep buf) { png_int_32 i = ((png_int_32)(*buf) << 24) + ((png_int_32)(*(buf + 1)) << 16) + ((png_int_32)(*(buf + 2)) << 8) + (png_int_32)(*(buf + 3)); return (i); } #endif /* PNG_READ_pCAL_SUPPORTED */ /* Grab an unsigned 16-bit integer from a buffer in big-endian format. */ png_uint_16 /* PRIVATE */ png_get_uint_16(png_bytep buf) { png_uint_16 i = (png_uint_16)(((png_uint_16)(*buf) << 8) + (png_uint_16)(*(buf + 1))); return (i); } #endif /* PNG_READ_BIG_ENDIAN_SUPPORTED */ /* Read data, and (optionally) run it through the CRC. */ void /* PRIVATE */ png_crc_read(png_structp png_ptr, png_bytep buf, png_size_t length) { png_read_data(png_ptr, buf, length); png_calculate_crc(png_ptr, buf, length); } /* Optionally skip data and then check the CRC. Depending on whether we are reading a ancillary or critical chunk, and how the program has set things up, we may calculate the CRC on the data and print a message. Returns '1' if there was a CRC error, '0' otherwise. */ int /* PRIVATE */ png_crc_finish(png_structp png_ptr, png_uint_32 skip) { png_size_t i; png_size_t istop = png_ptr->zbuf_size; for (i = (png_size_t)skip; i > istop; i -= istop) { png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); } if (i) { png_crc_read(png_ptr, png_ptr->zbuf, i); } if (png_crc_error(png_ptr)) { if (((png_ptr->chunk_name[0] & 0x20) && /* Ancillary */ !(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) || (!(png_ptr->chunk_name[0] & 0x20) && /* Critical */ (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE))) { png_chunk_warning(png_ptr, "CRC error"); } else { png_chunk_error(png_ptr, "CRC error"); } return (1); } return (0); } /* Compare the CRC stored in the PNG file with that calculated by libpng from the data it has read thus far. */ int /* PRIVATE */ png_crc_error(png_structp png_ptr) { png_byte crc_bytes[4]; png_uint_32 crc; int need_crc = 1; if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ { if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) need_crc = 0; } else /* critical */ { if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) need_crc = 0; } png_read_data(png_ptr, crc_bytes, 4); if (need_crc) { crc = png_get_uint_32(crc_bytes); return ((int)(crc != png_ptr->crc)); } else return (0); } #if defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) || \ defined(PNG_READ_iCCP_SUPPORTED) /* * Decompress trailing data in a chunk. The assumption is that chunkdata * points at an allocated area holding the contents of a chunk with a * trailing compressed part. What we get back is an allocated area * holding the original prefix part and an uncompressed version of the * trailing part (the malloc area passed in is freed). */ png_charp /* PRIVATE */ png_decompress_chunk(png_structp png_ptr, int comp_type, png_charp chunkdata, png_size_t chunklength, png_size_t prefix_size, png_size_t *newlength) { static char msg[] = "Error decoding compressed text"; png_charp text; png_size_t text_size; if (comp_type == PNG_COMPRESSION_TYPE_BASE) { int ret = Z_OK; png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size); png_ptr->zstream.avail_in = (uInt)(chunklength - prefix_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; text_size = 0; text = NULL; while (png_ptr->zstream.avail_in) { ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); if (ret != Z_OK && ret != Z_STREAM_END) { if (png_ptr->zstream.msg != NULL) png_warning(png_ptr, png_ptr->zstream.msg); else png_warning(png_ptr, msg); inflateReset(&png_ptr->zstream); png_ptr->zstream.avail_in = 0; if (text == NULL) { text_size = prefix_size + png_sizeof(msg) + 1; text = (png_charp)png_malloc_warn(png_ptr, text_size); if (text == NULL) { png_free(png_ptr,chunkdata); png_error(png_ptr,"Not enough memory to decompress chunk"); } png_memcpy(text, chunkdata, prefix_size); } text[text_size - 1] = 0x00; /* Copy what we can of the error message into the text chunk */ text_size = (png_size_t)(chunklength - (text - chunkdata) - 1); text_size = png_sizeof(msg) > text_size ? text_size : png_sizeof(msg); png_memcpy(text + prefix_size, msg, text_size + 1); break; } if (!png_ptr->zstream.avail_out || ret == Z_STREAM_END) { if (text == NULL) { text_size = prefix_size + png_ptr->zbuf_size - png_ptr->zstream.avail_out; text = (png_charp)png_malloc_warn(png_ptr, text_size + 1); if (text == NULL) { png_free(png_ptr,chunkdata); png_error(png_ptr,"Not enough memory to decompress chunk."); } png_memcpy(text + prefix_size, png_ptr->zbuf, text_size - prefix_size); png_memcpy(text, chunkdata, prefix_size); *(text + text_size) = 0x00; } else { png_charp tmp; tmp = text; text = (png_charp)png_malloc_warn(png_ptr, (png_uint_32)(text_size + png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1)); if (text == NULL) { png_free(png_ptr, tmp); png_free(png_ptr, chunkdata); png_error(png_ptr,"Not enough memory to decompress chunk.."); } png_memcpy(text, tmp, text_size); png_free(png_ptr, tmp); png_memcpy(text + text_size, png_ptr->zbuf, (png_ptr->zbuf_size - png_ptr->zstream.avail_out)); text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out; *(text + text_size) = 0x00; } if (ret == Z_STREAM_END) break; else { png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } } } if (ret != Z_STREAM_END) { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char umsg[50]; if (ret == Z_BUF_ERROR) sprintf(umsg,"Buffer error in compressed datastream in %s chunk", png_ptr->chunk_name); else if (ret == Z_DATA_ERROR) sprintf(umsg,"Data error in compressed datastream in %s chunk", png_ptr->chunk_name); else sprintf(umsg,"Incomplete compressed datastream in %s chunk", png_ptr->chunk_name); png_warning(png_ptr, umsg); #else png_warning(png_ptr, "Incomplete compressed datastream in chunk other than IDAT"); #endif text_size=prefix_size; if (text == NULL) { text = (png_charp)png_malloc_warn(png_ptr, text_size+1); if (text == NULL) { png_free(png_ptr, chunkdata); png_error(png_ptr,"Not enough memory for text."); } png_memcpy(text, chunkdata, prefix_size); } *(text + text_size) = 0x00; } inflateReset(&png_ptr->zstream); png_ptr->zstream.avail_in = 0; png_free(png_ptr, chunkdata); chunkdata = text; *newlength=text_size; } else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */ { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char umsg[50]; sprintf(umsg, "Unknown zTXt compression type %d", comp_type); png_warning(png_ptr, umsg); #else png_warning(png_ptr, "Unknown zTXt compression type"); #endif *(chunkdata + prefix_size) = 0x00; *newlength=prefix_size; } return chunkdata; } #endif /* read and check the IDHR chunk */ void /* PRIVATE */ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_byte buf[13]; png_uint_32 width, height; int bit_depth, color_type, compression_type, filter_type; int interlace_type; png_debug(1, "in png_handle_IHDR\n"); if (png_ptr->mode & PNG_HAVE_IHDR) png_error(png_ptr, "Out of place IHDR"); /* check the length */ if (length != 13) png_error(png_ptr, "Invalid IHDR chunk"); png_ptr->mode |= PNG_HAVE_IHDR; png_crc_read(png_ptr, buf, 13); png_crc_finish(png_ptr, 0); width = png_get_uint_31(png_ptr, buf); height = png_get_uint_31(png_ptr, buf + 4); bit_depth = buf[8]; color_type = buf[9]; compression_type = buf[10]; filter_type = buf[11]; interlace_type = buf[12]; /* set internal variables */ png_ptr->width = width; png_ptr->height = height; png_ptr->bit_depth = (png_byte)bit_depth; png_ptr->interlaced = (png_byte)interlace_type; png_ptr->color_type = (png_byte)color_type; #if defined(PNG_MNG_FEATURES_SUPPORTED) png_ptr->filter_type = (png_byte)filter_type; #endif png_ptr->compression_type = (png_byte)compression_type; /* find number of channels */ switch (png_ptr->color_type) { case PNG_COLOR_TYPE_GRAY: case PNG_COLOR_TYPE_PALETTE: png_ptr->channels = 1; break; case PNG_COLOR_TYPE_RGB: png_ptr->channels = 3; break; case PNG_COLOR_TYPE_GRAY_ALPHA: png_ptr->channels = 2; break; case PNG_COLOR_TYPE_RGB_ALPHA: png_ptr->channels = 4; break; } /* set up other useful info */ png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth * png_ptr->channels); png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width); png_debug1(3,"bit_depth = %d\n", png_ptr->bit_depth); png_debug1(3,"channels = %d\n", png_ptr->channels); png_debug1(3,"rowbytes = %lu\n", png_ptr->rowbytes); png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_type); } /* read and check the palette */ void /* PRIVATE */ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_color palette[PNG_MAX_PALETTE_LENGTH]; int num, i; #ifndef PNG_NO_POINTER_INDEXING png_colorp pal_ptr; #endif png_debug(1, "in png_handle_PLTE\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before PLTE"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid PLTE after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->mode & PNG_HAVE_PLTE) png_error(png_ptr, "Duplicate PLTE chunk"); png_ptr->mode |= PNG_HAVE_PLTE; if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR)) { png_warning(png_ptr, "Ignoring PLTE chunk in grayscale PNG"); png_crc_finish(png_ptr, length); return; } #if !defined(PNG_READ_OPT_PLTE_SUPPORTED) if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) { png_crc_finish(png_ptr, length); return; } #endif if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3) { if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) { png_warning(png_ptr, "Invalid palette chunk"); png_crc_finish(png_ptr, length); return; } else { png_error(png_ptr, "Invalid palette chunk"); } } num = (int)length / 3; #ifndef PNG_NO_POINTER_INDEXING for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++) { png_byte buf[3]; png_crc_read(png_ptr, buf, 3); pal_ptr->red = buf[0]; pal_ptr->green = buf[1]; pal_ptr->blue = buf[2]; } #else for (i = 0; i < num; i++) { png_byte buf[3]; png_crc_read(png_ptr, buf, 3); /* don't depend upon png_color being any order */ palette[i].red = buf[0]; palette[i].green = buf[1]; palette[i].blue = buf[2]; } #endif /* If we actually NEED the PLTE chunk (ie for a paletted image), we do whatever the normal CRC configuration tells us. However, if we have an RGB image, the PLTE can be considered ancillary, so we will act as though it is. */ #if !defined(PNG_READ_OPT_PLTE_SUPPORTED) if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) #endif { png_crc_finish(png_ptr, 0); } #if !defined(PNG_READ_OPT_PLTE_SUPPORTED) else if (png_crc_error(png_ptr)) /* Only if we have a CRC error */ { /* If we don't want to use the data from an ancillary chunk, we have two options: an error abort, or a warning and we ignore the data in this chunk (which should be OK, since it's considered ancillary for a RGB or RGBA image). */ if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_USE)) { if (png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) { png_chunk_error(png_ptr, "CRC error"); } else { png_chunk_warning(png_ptr, "CRC error"); return; } } /* Otherwise, we (optionally) emit a warning and use the chunk. */ else if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) { png_chunk_warning(png_ptr, "CRC error"); } } #endif png_set_PLTE(png_ptr, info_ptr, palette, num); #if defined(PNG_READ_tRNS_SUPPORTED) if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) { if (png_ptr->num_trans > (png_uint_16)num) { png_warning(png_ptr, "Truncating incorrect tRNS chunk length"); png_ptr->num_trans = (png_uint_16)num; } if (info_ptr->num_trans > (png_uint_16)num) { png_warning(png_ptr, "Truncating incorrect info tRNS chunk length"); info_ptr->num_trans = (png_uint_16)num; } } } #endif } void /* PRIVATE */ png_handle_IEND(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_debug(1, "in png_handle_IEND\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR) || !(png_ptr->mode & PNG_HAVE_IDAT)) { png_error(png_ptr, "No image in file"); } png_ptr->mode |= (PNG_AFTER_IDAT | PNG_HAVE_IEND); if (length != 0) { png_warning(png_ptr, "Incorrect IEND chunk length"); } png_crc_finish(png_ptr, length); if (&info_ptr == NULL) /* quiet compiler warnings about unused info_ptr */ return; } #if defined(PNG_READ_gAMA_SUPPORTED) void /* PRIVATE */ png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_fixed_point igamma; #ifdef PNG_FLOATING_POINT_SUPPORTED float file_gamma; #endif png_byte buf[4]; png_debug(1, "in png_handle_gAMA\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before gAMA"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid gAMA after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->mode & PNG_HAVE_PLTE) /* Should be an error, but we can cope with it */ png_warning(png_ptr, "Out of place gAMA chunk"); if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) #if defined(PNG_READ_sRGB_SUPPORTED) && !(info_ptr->valid & PNG_INFO_sRGB) #endif ) { png_warning(png_ptr, "Duplicate gAMA chunk"); png_crc_finish(png_ptr, length); return; } if (length != 4) { png_warning(png_ptr, "Incorrect gAMA chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 4); if (png_crc_finish(png_ptr, 0)) return; igamma = (png_fixed_point)png_get_uint_32(buf); /* check for zero gamma */ if (igamma == 0) { png_warning(png_ptr, "Ignoring gAMA chunk with gamma=0"); return; } #if defined(PNG_READ_sRGB_SUPPORTED) if (info_ptr->valid & PNG_INFO_sRGB) if (PNG_OUT_OF_RANGE(igamma, 45500L, 500)) { png_warning(png_ptr, "Ignoring incorrect gAMA value when sRGB is also present"); #ifndef PNG_NO_CONSOLE_IO fprintf(stderr, "gamma = (%d/100000)\n", (int)igamma); #endif return; } #endif /* PNG_READ_sRGB_SUPPORTED */ #ifdef PNG_FLOATING_POINT_SUPPORTED file_gamma = (float)igamma / (float)100000.0; # ifdef PNG_READ_GAMMA_SUPPORTED png_ptr->gamma = file_gamma; # endif png_set_gAMA(png_ptr, info_ptr, file_gamma); #endif #ifdef PNG_FIXED_POINT_SUPPORTED png_set_gAMA_fixed(png_ptr, info_ptr, igamma); #endif } #endif #if defined(PNG_READ_sBIT_SUPPORTED) void /* PRIVATE */ png_handle_sBIT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_size_t truelen; png_byte buf[4]; png_debug(1, "in png_handle_sBIT\n"); buf[0] = buf[1] = buf[2] = buf[3] = 0; if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before sBIT"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid sBIT after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->mode & PNG_HAVE_PLTE) { /* Should be an error, but we can cope with it */ png_warning(png_ptr, "Out of place sBIT chunk"); } if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)) { png_warning(png_ptr, "Duplicate sBIT chunk"); png_crc_finish(png_ptr, length); return; } if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) truelen = 3; else truelen = (png_size_t)png_ptr->channels; if (length != truelen || length > 4) { png_warning(png_ptr, "Incorrect sBIT chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, truelen); if (png_crc_finish(png_ptr, 0)) return; if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) { png_ptr->sig_bit.red = buf[0]; png_ptr->sig_bit.green = buf[1]; png_ptr->sig_bit.blue = buf[2]; png_ptr->sig_bit.alpha = buf[3]; } else { png_ptr->sig_bit.gray = buf[0]; png_ptr->sig_bit.red = buf[0]; png_ptr->sig_bit.green = buf[0]; png_ptr->sig_bit.blue = buf[0]; png_ptr->sig_bit.alpha = buf[1]; } png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit)); } #endif #if defined(PNG_READ_cHRM_SUPPORTED) void /* PRIVATE */ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_byte buf[4]; #ifdef PNG_FLOATING_POINT_SUPPORTED float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; #endif png_fixed_point int_x_white, int_y_white, int_x_red, int_y_red, int_x_green, int_y_green, int_x_blue, int_y_blue; png_uint_32 uint_x, uint_y; png_debug(1, "in png_handle_cHRM\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before cHRM"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid cHRM after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->mode & PNG_HAVE_PLTE) /* Should be an error, but we can cope with it */ png_warning(png_ptr, "Missing PLTE before cHRM"); if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM) #if defined(PNG_READ_sRGB_SUPPORTED) && !(info_ptr->valid & PNG_INFO_sRGB) #endif ) { png_warning(png_ptr, "Duplicate cHRM chunk"); png_crc_finish(png_ptr, length); return; } if (length != 32) { png_warning(png_ptr, "Incorrect cHRM chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 4); uint_x = png_get_uint_32(buf); png_crc_read(png_ptr, buf, 4); uint_y = png_get_uint_32(buf); if (uint_x > 80000L || uint_y > 80000L || uint_x + uint_y > 100000L) { png_warning(png_ptr, "Invalid cHRM white point"); png_crc_finish(png_ptr, 24); return; } int_x_white = (png_fixed_point)uint_x; int_y_white = (png_fixed_point)uint_y; png_crc_read(png_ptr, buf, 4); uint_x = png_get_uint_32(buf); png_crc_read(png_ptr, buf, 4); uint_y = png_get_uint_32(buf); if (uint_x > 80000L || uint_y > 80000L || uint_x + uint_y > 100000L) { png_warning(png_ptr, "Invalid cHRM red point"); png_crc_finish(png_ptr, 16); return; } int_x_red = (png_fixed_point)uint_x; int_y_red = (png_fixed_point)uint_y; png_crc_read(png_ptr, buf, 4); uint_x = png_get_uint_32(buf); png_crc_read(png_ptr, buf, 4); uint_y = png_get_uint_32(buf); if (uint_x > 80000L || uint_y > 80000L || uint_x + uint_y > 100000L) { png_warning(png_ptr, "Invalid cHRM green point"); png_crc_finish(png_ptr, 8); return; } int_x_green = (png_fixed_point)uint_x; int_y_green = (png_fixed_point)uint_y; png_crc_read(png_ptr, buf, 4); uint_x = png_get_uint_32(buf); png_crc_read(png_ptr, buf, 4); uint_y = png_get_uint_32(buf); if (uint_x > 80000L || uint_y > 80000L || uint_x + uint_y > 100000L) { png_warning(png_ptr, "Invalid cHRM blue point"); png_crc_finish(png_ptr, 0); return; } int_x_blue = (png_fixed_point)uint_x; int_y_blue = (png_fixed_point)uint_y; #ifdef PNG_FLOATING_POINT_SUPPORTED white_x = (float)int_x_white / (float)100000.0; white_y = (float)int_y_white / (float)100000.0; red_x = (float)int_x_red / (float)100000.0; red_y = (float)int_y_red / (float)100000.0; green_x = (float)int_x_green / (float)100000.0; green_y = (float)int_y_green / (float)100000.0; blue_x = (float)int_x_blue / (float)100000.0; blue_y = (float)int_y_blue / (float)100000.0; #endif #if defined(PNG_READ_sRGB_SUPPORTED) if (info_ptr->valid & PNG_INFO_sRGB) { if (PNG_OUT_OF_RANGE(int_x_white, 31270, 1000) || PNG_OUT_OF_RANGE(int_y_white, 32900, 1000) || PNG_OUT_OF_RANGE(int_x_red, 64000L, 1000) || PNG_OUT_OF_RANGE(int_y_red, 33000, 1000) || PNG_OUT_OF_RANGE(int_x_green, 30000, 1000) || PNG_OUT_OF_RANGE(int_y_green, 60000L, 1000) || PNG_OUT_OF_RANGE(int_x_blue, 15000, 1000) || PNG_OUT_OF_RANGE(int_y_blue, 6000, 1000)) { png_warning(png_ptr, "Ignoring incorrect cHRM value when sRGB is also present"); #ifndef PNG_NO_CONSOLE_IO #ifdef PNG_FLOATING_POINT_SUPPORTED fprintf(stderr,"wx=%f, wy=%f, rx=%f, ry=%f\n", white_x, white_y, red_x, red_y); fprintf(stderr,"gx=%f, gy=%f, bx=%f, by=%f\n", green_x, green_y, blue_x, blue_y); #else fprintf(stderr,"wx=%ld, wy=%ld, rx=%ld, ry=%ld\n", int_x_white, int_y_white, int_x_red, int_y_red); fprintf(stderr,"gx=%ld, gy=%ld, bx=%ld, by=%ld\n", int_x_green, int_y_green, int_x_blue, int_y_blue); #endif #endif /* PNG_NO_CONSOLE_IO */ } png_crc_finish(png_ptr, 0); return; } #endif /* PNG_READ_sRGB_SUPPORTED */ #ifdef PNG_FLOATING_POINT_SUPPORTED png_set_cHRM(png_ptr, info_ptr, white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); #endif #ifdef PNG_FIXED_POINT_SUPPORTED png_set_cHRM_fixed(png_ptr, info_ptr, int_x_white, int_y_white, int_x_red, int_y_red, int_x_green, int_y_green, int_x_blue, int_y_blue); #endif if (png_crc_finish(png_ptr, 0)) return; } #endif #if defined(PNG_READ_sRGB_SUPPORTED) void /* PRIVATE */ png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { int intent; png_byte buf[1]; png_debug(1, "in png_handle_sRGB\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before sRGB"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid sRGB after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->mode & PNG_HAVE_PLTE) /* Should be an error, but we can cope with it */ png_warning(png_ptr, "Out of place sRGB chunk"); if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)) { png_warning(png_ptr, "Duplicate sRGB chunk"); png_crc_finish(png_ptr, length); return; } if (length != 1) { png_warning(png_ptr, "Incorrect sRGB chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 1); if (png_crc_finish(png_ptr, 0)) return; intent = buf[0]; /* check for bad intent */ if (intent >= PNG_sRGB_INTENT_LAST) { png_warning(png_ptr, "Unknown sRGB intent"); return; } #if defined(PNG_READ_gAMA_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED) if ((info_ptr->valid & PNG_INFO_gAMA)) { png_fixed_point igamma; #ifdef PNG_FIXED_POINT_SUPPORTED igamma=info_ptr->int_gamma; #else # ifdef PNG_FLOATING_POINT_SUPPORTED igamma=(png_fixed_point)(info_ptr->gamma * 100000.); # endif #endif if (PNG_OUT_OF_RANGE(igamma, 45500L, 500)) { png_warning(png_ptr, "Ignoring incorrect gAMA value when sRGB is also present"); #ifndef PNG_NO_CONSOLE_IO # ifdef PNG_FIXED_POINT_SUPPORTED fprintf(stderr,"incorrect gamma=(%d/100000)\n",(int)png_ptr->int_gamma); # else # ifdef PNG_FLOATING_POINT_SUPPORTED fprintf(stderr,"incorrect gamma=%f\n",png_ptr->gamma); # endif # endif #endif } } #endif /* PNG_READ_gAMA_SUPPORTED */ #ifdef PNG_READ_cHRM_SUPPORTED #ifdef PNG_FIXED_POINT_SUPPORTED if (info_ptr->valid & PNG_INFO_cHRM) if (PNG_OUT_OF_RANGE(info_ptr->int_x_white, 31270, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_y_white, 32900, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_x_red, 64000L, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_y_red, 33000, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_x_green, 30000, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_y_green, 60000L, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_x_blue, 15000, 1000) || PNG_OUT_OF_RANGE(info_ptr->int_y_blue, 6000, 1000)) { png_warning(png_ptr, "Ignoring incorrect cHRM value when sRGB is also present"); } #endif /* PNG_FIXED_POINT_SUPPORTED */ #endif /* PNG_READ_cHRM_SUPPORTED */ png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, intent); } #endif /* PNG_READ_sRGB_SUPPORTED */ #if defined(PNG_READ_iCCP_SUPPORTED) void /* PRIVATE */ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) /* Note: this does not properly handle chunks that are > 64K under DOS */ { png_charp chunkdata; png_byte compression_type; png_bytep pC; png_charp profile; png_uint_32 skip = 0; png_uint_32 profile_size, profile_length; png_size_t slength, prefix_length, data_length; png_debug(1, "in png_handle_iCCP\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before iCCP"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid iCCP after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->mode & PNG_HAVE_PLTE) /* Should be an error, but we can cope with it */ png_warning(png_ptr, "Out of place iCCP chunk"); if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)) { png_warning(png_ptr, "Duplicate iCCP chunk"); png_crc_finish(png_ptr, length); return; } #ifdef PNG_MAX_MALLOC_64K if (length > (png_uint_32)65535L) { png_warning(png_ptr, "iCCP chunk too large to fit in memory"); skip = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif chunkdata = (png_charp)png_malloc(png_ptr, length + 1); slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)chunkdata, slength); if (png_crc_finish(png_ptr, skip)) { png_free(png_ptr, chunkdata); return; } chunkdata[slength] = 0x00; for (profile = chunkdata; *profile; profile++) /* empty loop to find end of name */ ; ++profile; /* there should be at least one zero (the compression type byte) following the separator, and we should be on it */ if ( profile >= chunkdata + slength) { png_free(png_ptr, chunkdata); png_warning(png_ptr, "Malformed iCCP chunk"); return; } /* compression_type should always be zero */ compression_type = *profile++; if (compression_type) { png_warning(png_ptr, "Ignoring nonzero compression type in iCCP chunk"); compression_type=0x00; /* Reset it to zero (libpng-1.0.6 through 1.0.8 wrote nonzero) */ } prefix_length = profile - chunkdata; chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata, slength, prefix_length, &data_length); profile_length = data_length - prefix_length; if ( prefix_length > data_length || profile_length < 4) { png_free(png_ptr, chunkdata); png_warning(png_ptr, "Profile size field missing from iCCP chunk"); return; } /* Check the profile_size recorded in the first 32 bits of the ICC profile */ pC = (png_bytep)(chunkdata+prefix_length); profile_size = ((*(pC ))<<24) | ((*(pC+1))<<16) | ((*(pC+2))<< 8) | ((*(pC+3)) ); if(profile_size < profile_length) profile_length = profile_size; if(profile_size > profile_length) { png_free(png_ptr, chunkdata); png_warning(png_ptr, "Ignoring truncated iCCP profile.\n"); return; } png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type, chunkdata + prefix_length, profile_length); png_free(png_ptr, chunkdata); } #endif /* PNG_READ_iCCP_SUPPORTED */ #if defined(PNG_READ_sPLT_SUPPORTED) void /* PRIVATE */ png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) /* Note: this does not properly handle chunks that are > 64K under DOS */ { png_bytep chunkdata; png_bytep entry_start; png_sPLT_t new_palette; #ifdef PNG_NO_POINTER_INDEXING png_sPLT_entryp pp; #endif int data_length, entry_size, i; png_uint_32 skip = 0; png_size_t slength; png_debug(1, "in png_handle_sPLT\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before sPLT"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid sPLT after IDAT"); png_crc_finish(png_ptr, length); return; } #ifdef PNG_MAX_MALLOC_64K if (length > (png_uint_32)65535L) { png_warning(png_ptr, "sPLT chunk too large to fit in memory"); skip = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif chunkdata = (png_bytep)png_malloc(png_ptr, length + 1); slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)chunkdata, slength); if (png_crc_finish(png_ptr, skip)) { png_free(png_ptr, chunkdata); return; } chunkdata[slength] = 0x00; for (entry_start = chunkdata; *entry_start; entry_start++) /* empty loop to find end of name */ ; ++entry_start; /* a sample depth should follow the separator, and we should be on it */ if (entry_start > chunkdata + slength) { png_free(png_ptr, chunkdata); png_warning(png_ptr, "malformed sPLT chunk"); return; } new_palette.depth = *entry_start++; entry_size = (new_palette.depth == 8 ? 6 : 10); data_length = (slength - (entry_start - chunkdata)); /* integrity-check the data length */ if (data_length % entry_size) { png_free(png_ptr, chunkdata); png_warning(png_ptr, "sPLT chunk has bad length"); return; } new_palette.nentries = (png_uint_32) (data_length / entry_size); if ((png_uint_32) new_palette.nentries > (png_uint_32) (PNG_SIZE_MAX / png_sizeof(png_sPLT_entry))) { png_warning(png_ptr, "sPLT chunk too long"); return; } new_palette.entries = (png_sPLT_entryp)png_malloc_warn( png_ptr, new_palette.nentries * png_sizeof(png_sPLT_entry)); if (new_palette.entries == NULL) { png_warning(png_ptr, "sPLT chunk requires too much memory"); return; } #ifndef PNG_NO_POINTER_INDEXING for (i = 0; i < new_palette.nentries; i++) { png_sPLT_entryp pp = new_palette.entries + i; if (new_palette.depth == 8) { pp->red = *entry_start++; pp->green = *entry_start++; pp->blue = *entry_start++; pp->alpha = *entry_start++; } else { pp->red = png_get_uint_16(entry_start); entry_start += 2; pp->green = png_get_uint_16(entry_start); entry_start += 2; pp->blue = png_get_uint_16(entry_start); entry_start += 2; pp->alpha = png_get_uint_16(entry_start); entry_start += 2; } pp->frequency = png_get_uint_16(entry_start); entry_start += 2; } #else pp = new_palette.entries; for (i = 0; i < new_palette.nentries; i++) { if (new_palette.depth == 8) { pp[i].red = *entry_start++; pp[i].green = *entry_start++; pp[i].blue = *entry_start++; pp[i].alpha = *entry_start++; } else { pp[i].red = png_get_uint_16(entry_start); entry_start += 2; pp[i].green = png_get_uint_16(entry_start); entry_start += 2; pp[i].blue = png_get_uint_16(entry_start); entry_start += 2; pp[i].alpha = png_get_uint_16(entry_start); entry_start += 2; } pp->frequency = png_get_uint_16(entry_start); entry_start += 2; } #endif /* discard all chunk data except the name and stash that */ new_palette.name = (png_charp)chunkdata; png_set_sPLT(png_ptr, info_ptr, &new_palette, 1); png_free(png_ptr, chunkdata); png_free(png_ptr, new_palette.entries); } #endif /* PNG_READ_sPLT_SUPPORTED */ #if defined(PNG_READ_tRNS_SUPPORTED) void /* PRIVATE */ png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_byte readbuf[PNG_MAX_PALETTE_LENGTH]; png_debug(1, "in png_handle_tRNS\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before tRNS"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid tRNS after IDAT"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) { png_warning(png_ptr, "Duplicate tRNS chunk"); png_crc_finish(png_ptr, length); return; } if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) { png_byte buf[2]; if (length != 2) { png_warning(png_ptr, "Incorrect tRNS chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 2); png_ptr->num_trans = 1; png_ptr->trans_values.gray = png_get_uint_16(buf); } else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) { png_byte buf[6]; if (length != 6) { png_warning(png_ptr, "Incorrect tRNS chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, (png_size_t)length); png_ptr->num_trans = 1; png_ptr->trans_values.red = png_get_uint_16(buf); png_ptr->trans_values.green = png_get_uint_16(buf + 2); png_ptr->trans_values.blue = png_get_uint_16(buf + 4); } else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { if (!(png_ptr->mode & PNG_HAVE_PLTE)) { /* Should be an error, but we can cope with it. */ png_warning(png_ptr, "Missing PLTE before tRNS"); } if (length > (png_uint_32)png_ptr->num_palette || length > PNG_MAX_PALETTE_LENGTH) { png_warning(png_ptr, "Incorrect tRNS chunk length"); png_crc_finish(png_ptr, length); return; } if (length == 0) { png_warning(png_ptr, "Zero length tRNS chunk"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, readbuf, (png_size_t)length); png_ptr->num_trans = (png_uint_16)length; } else { png_warning(png_ptr, "tRNS chunk not allowed with alpha channel"); png_crc_finish(png_ptr, length); return; } if (png_crc_finish(png_ptr, 0)) return; png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans, &(png_ptr->trans_values)); } #endif #if defined(PNG_READ_bKGD_SUPPORTED) void /* PRIVATE */ png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_size_t truelen; png_byte buf[6]; png_debug(1, "in png_handle_bKGD\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before bKGD"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid bKGD after IDAT"); png_crc_finish(png_ptr, length); return; } else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && !(png_ptr->mode & PNG_HAVE_PLTE)) { png_warning(png_ptr, "Missing PLTE before bKGD"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)) { png_warning(png_ptr, "Duplicate bKGD chunk"); png_crc_finish(png_ptr, length); return; } if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) truelen = 1; else if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) truelen = 6; else truelen = 2; if (length != truelen) { png_warning(png_ptr, "Incorrect bKGD chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, truelen); if (png_crc_finish(png_ptr, 0)) return; /* We convert the index value into RGB components so that we can allow * arbitrary RGB values for background when we have transparency, and * so it is easy to determine the RGB values of the background color * from the info_ptr struct. */ if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { png_ptr->background.index = buf[0]; if(info_ptr->num_palette) { if(buf[0] > info_ptr->num_palette) { png_warning(png_ptr, "Incorrect bKGD chunk index value"); return; } png_ptr->background.red = (png_uint_16)png_ptr->palette[buf[0]].red; png_ptr->background.green = (png_uint_16)png_ptr->palette[buf[0]].green; png_ptr->background.blue = (png_uint_16)png_ptr->palette[buf[0]].blue; } } else if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) /* GRAY */ { png_ptr->background.red = png_ptr->background.green = png_ptr->background.blue = png_ptr->background.gray = png_get_uint_16(buf); } else { png_ptr->background.red = png_get_uint_16(buf); png_ptr->background.green = png_get_uint_16(buf + 2); png_ptr->background.blue = png_get_uint_16(buf + 4); } png_set_bKGD(png_ptr, info_ptr, &(png_ptr->background)); } #endif #if defined(PNG_READ_hIST_SUPPORTED) void /* PRIVATE */ png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { unsigned int num, i; png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH]; png_debug(1, "in png_handle_hIST\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before hIST"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid hIST after IDAT"); png_crc_finish(png_ptr, length); return; } else if (!(png_ptr->mode & PNG_HAVE_PLTE)) { png_warning(png_ptr, "Missing PLTE before hIST"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)) { png_warning(png_ptr, "Duplicate hIST chunk"); png_crc_finish(png_ptr, length); return; } num = length / 2 ; if (num != (unsigned int) png_ptr->num_palette || num > (unsigned int) PNG_MAX_PALETTE_LENGTH) { png_warning(png_ptr, "Incorrect hIST chunk length"); png_crc_finish(png_ptr, length); return; } for (i = 0; i < num; i++) { png_byte buf[2]; png_crc_read(png_ptr, buf, 2); readbuf[i] = png_get_uint_16(buf); } if (png_crc_finish(png_ptr, 0)) return; png_set_hIST(png_ptr, info_ptr, readbuf); } #endif #if defined(PNG_READ_pHYs_SUPPORTED) void /* PRIVATE */ png_handle_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_byte buf[9]; png_uint_32 res_x, res_y; int unit_type; png_debug(1, "in png_handle_pHYs\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before pHYs"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid pHYs after IDAT"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) { png_warning(png_ptr, "Duplicate pHYs chunk"); png_crc_finish(png_ptr, length); return; } if (length != 9) { png_warning(png_ptr, "Incorrect pHYs chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 9); if (png_crc_finish(png_ptr, 0)) return; res_x = png_get_uint_32(buf); res_y = png_get_uint_32(buf + 4); unit_type = buf[8]; png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type); } #endif #if defined(PNG_READ_oFFs_SUPPORTED) void /* PRIVATE */ png_handle_oFFs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_byte buf[9]; png_int_32 offset_x, offset_y; int unit_type; png_debug(1, "in png_handle_oFFs\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before oFFs"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid oFFs after IDAT"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) { png_warning(png_ptr, "Duplicate oFFs chunk"); png_crc_finish(png_ptr, length); return; } if (length != 9) { png_warning(png_ptr, "Incorrect oFFs chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 9); if (png_crc_finish(png_ptr, 0)) return; offset_x = png_get_int_32(buf); offset_y = png_get_int_32(buf + 4); unit_type = buf[8]; png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type); } #endif #if defined(PNG_READ_pCAL_SUPPORTED) /* read the pCAL chunk (described in the PNG Extensions document) */ void /* PRIVATE */ png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_charp purpose; png_int_32 X0, X1; png_byte type, nparams; png_charp buf, units, endptr; png_charpp params; png_size_t slength; int i; png_debug(1, "in png_handle_pCAL\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before pCAL"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid pCAL after IDAT"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)) { png_warning(png_ptr, "Duplicate pCAL chunk"); png_crc_finish(png_ptr, length); return; } png_debug1(2, "Allocating and reading pCAL chunk data (%lu bytes)\n", length + 1); purpose = (png_charp)png_malloc_warn(png_ptr, length + 1); if (purpose == NULL) { png_warning(png_ptr, "No memory for pCAL purpose."); return; } slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)purpose, slength); if (png_crc_finish(png_ptr, 0)) { png_free(png_ptr, purpose); return; } purpose[slength] = 0x00; /* null terminate the last string */ png_debug(3, "Finding end of pCAL purpose string\n"); for (buf = purpose; *buf; buf++) /* empty loop */ ; endptr = purpose + slength; /* We need to have at least 12 bytes after the purpose string in order to get the parameter information. */ if (endptr <= buf + 12) { png_warning(png_ptr, "Invalid pCAL data"); png_free(png_ptr, purpose); return; } png_debug(3, "Reading pCAL X0, X1, type, nparams, and units\n"); X0 = png_get_int_32((png_bytep)buf+1); X1 = png_get_int_32((png_bytep)buf+5); type = buf[9]; nparams = buf[10]; units = buf + 11; png_debug(3, "Checking pCAL equation type and number of parameters\n"); /* Check that we have the right number of parameters for known equation types. */ if ((type == PNG_EQUATION_LINEAR && nparams != 2) || (type == PNG_EQUATION_BASE_E && nparams != 3) || (type == PNG_EQUATION_ARBITRARY && nparams != 3) || (type == PNG_EQUATION_HYPERBOLIC && nparams != 4)) { png_warning(png_ptr, "Invalid pCAL parameters for equation type"); png_free(png_ptr, purpose); return; } else if (type >= PNG_EQUATION_LAST) { png_warning(png_ptr, "Unrecognized equation type for pCAL chunk"); } for (buf = units; *buf; buf++) /* Empty loop to move past the units string. */ ; png_debug(3, "Allocating pCAL parameters array\n"); params = (png_charpp)png_malloc_warn(png_ptr, (png_uint_32)(nparams *png_sizeof(png_charp))) ; if (params == NULL) { png_free(png_ptr, purpose); png_warning(png_ptr, "No memory for pCAL params."); return; } /* Get pointers to the start of each parameter string. */ for (i = 0; i < (int)nparams; i++) { buf++; /* Skip the null string terminator from previous parameter. */ png_debug1(3, "Reading pCAL parameter %d\n", i); for (params[i] = buf; *buf != 0x00 && buf <= endptr; buf++) /* Empty loop to move past each parameter string */ ; /* Make sure we haven't run out of data yet */ if (buf > endptr) { png_warning(png_ptr, "Invalid pCAL data"); png_free(png_ptr, purpose); png_free(png_ptr, params); return; } } png_set_pCAL(png_ptr, info_ptr, purpose, X0, X1, type, nparams, units, params); png_free(png_ptr, purpose); png_free(png_ptr, params); } #endif #if defined(PNG_READ_sCAL_SUPPORTED) /* read the sCAL chunk */ void /* PRIVATE */ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_charp buffer, ep; #ifdef PNG_FLOATING_POINT_SUPPORTED double width, height; png_charp vp; #else #ifdef PNG_FIXED_POINT_SUPPORTED png_charp swidth, sheight; #endif #endif png_size_t slength; png_debug(1, "in png_handle_sCAL\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before sCAL"); else if (png_ptr->mode & PNG_HAVE_IDAT) { png_warning(png_ptr, "Invalid sCAL after IDAT"); png_crc_finish(png_ptr, length); return; } else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL)) { png_warning(png_ptr, "Duplicate sCAL chunk"); png_crc_finish(png_ptr, length); return; } png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)\n", length + 1); buffer = (png_charp)png_malloc_warn(png_ptr, length + 1); if (buffer == NULL) { png_warning(png_ptr, "Out of memory while processing sCAL chunk"); return; } slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)buffer, slength); if (png_crc_finish(png_ptr, 0)) { png_free(png_ptr, buffer); return; } buffer[slength] = 0x00; /* null terminate the last string */ ep = buffer + 1; /* skip unit byte */ #ifdef PNG_FLOATING_POINT_SUPPORTED width = strtod(ep, &vp); if (*vp) { png_warning(png_ptr, "malformed width string in sCAL chunk"); return; } #else #ifdef PNG_FIXED_POINT_SUPPORTED swidth = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); if (swidth == NULL) { png_warning(png_ptr, "Out of memory while processing sCAL chunk width"); return; } png_memcpy(swidth, ep, (png_size_t)png_strlen(ep)); #endif #endif for (ep = buffer; *ep; ep++) /* empty loop */ ; ep++; #ifdef PNG_FLOATING_POINT_SUPPORTED height = strtod(ep, &vp); if (*vp) { png_warning(png_ptr, "malformed height string in sCAL chunk"); return; } #else #ifdef PNG_FIXED_POINT_SUPPORTED sheight = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); if (swidth == NULL) { png_warning(png_ptr, "Out of memory while processing sCAL chunk height"); return; } png_memcpy(sheight, ep, (png_size_t)png_strlen(ep)); #endif #endif if (buffer + slength < ep #ifdef PNG_FLOATING_POINT_SUPPORTED || width <= 0. || height <= 0. #endif ) { png_warning(png_ptr, "Invalid sCAL data"); png_free(png_ptr, buffer); #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) png_free(png_ptr, swidth); png_free(png_ptr, sheight); #endif return; } #ifdef PNG_FLOATING_POINT_SUPPORTED png_set_sCAL(png_ptr, info_ptr, buffer[0], width, height); #else #ifdef PNG_FIXED_POINT_SUPPORTED png_set_sCAL_s(png_ptr, info_ptr, buffer[0], swidth, sheight); #endif #endif png_free(png_ptr, buffer); #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) png_free(png_ptr, swidth); png_free(png_ptr, sheight); #endif } #endif #if defined(PNG_READ_tIME_SUPPORTED) void /* PRIVATE */ png_handle_tIME(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_byte buf[7]; png_time mod_time; png_debug(1, "in png_handle_tIME\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Out of place tIME chunk"); else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)) { png_warning(png_ptr, "Duplicate tIME chunk"); png_crc_finish(png_ptr, length); return; } if (png_ptr->mode & PNG_HAVE_IDAT) png_ptr->mode |= PNG_AFTER_IDAT; if (length != 7) { png_warning(png_ptr, "Incorrect tIME chunk length"); png_crc_finish(png_ptr, length); return; } png_crc_read(png_ptr, buf, 7); if (png_crc_finish(png_ptr, 0)) return; mod_time.second = buf[6]; mod_time.minute = buf[5]; mod_time.hour = buf[4]; mod_time.day = buf[3]; mod_time.month = buf[2]; mod_time.year = png_get_uint_16(buf); png_set_tIME(png_ptr, info_ptr, &mod_time); } #endif #if defined(PNG_READ_tEXt_SUPPORTED) /* Note: this does not properly handle chunks that are > 64K under DOS */ void /* PRIVATE */ png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_textp text_ptr; png_charp key; png_charp text; png_uint_32 skip = 0; png_size_t slength; int ret; png_debug(1, "in png_handle_tEXt\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before tEXt"); if (png_ptr->mode & PNG_HAVE_IDAT) png_ptr->mode |= PNG_AFTER_IDAT; #ifdef PNG_MAX_MALLOC_64K if (length > (png_uint_32)65535L) { png_warning(png_ptr, "tEXt chunk too large to fit in memory"); skip = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif key = (png_charp)png_malloc_warn(png_ptr, length + 1); if (key == NULL) { png_warning(png_ptr, "No memory to process text chunk."); return; } slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)key, slength); if (png_crc_finish(png_ptr, skip)) { png_free(png_ptr, key); return; } key[slength] = 0x00; for (text = key; *text; text++) /* empty loop to find end of key */ ; if (text != key + slength) text++; text_ptr = (png_textp)png_malloc_warn(png_ptr, (png_uint_32)png_sizeof(png_text)); if (text_ptr == NULL) { png_warning(png_ptr, "Not enough memory to process text chunk."); png_free(png_ptr, key); return; } text_ptr->compression = PNG_TEXT_COMPRESSION_NONE; text_ptr->key = key; #ifdef PNG_iTXt_SUPPORTED text_ptr->lang = NULL; text_ptr->lang_key = NULL; text_ptr->itxt_length = 0; #endif text_ptr->text = text; text_ptr->text_length = png_strlen(text); ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); png_free(png_ptr, key); png_free(png_ptr, text_ptr); if (ret) png_warning(png_ptr, "Insufficient memory to process text chunk."); } #endif #if defined(PNG_READ_zTXt_SUPPORTED) /* note: this does not correctly handle chunks that are > 64K under DOS */ void /* PRIVATE */ png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_textp text_ptr; png_charp chunkdata; png_charp text; int comp_type; int ret; png_size_t slength, prefix_len, data_len; png_debug(1, "in png_handle_zTXt\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before zTXt"); if (png_ptr->mode & PNG_HAVE_IDAT) png_ptr->mode |= PNG_AFTER_IDAT; #ifdef PNG_MAX_MALLOC_64K /* We will no doubt have problems with chunks even half this size, but there is no hard and fast rule to tell us where to stop. */ if (length > (png_uint_32)65535L) { png_warning(png_ptr,"zTXt chunk too large to fit in memory"); png_crc_finish(png_ptr, length); return; } #endif chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); if (chunkdata == NULL) { png_warning(png_ptr,"Out of memory processing zTXt chunk."); return; } slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)chunkdata, slength); if (png_crc_finish(png_ptr, 0)) { png_free(png_ptr, chunkdata); return; } chunkdata[slength] = 0x00; for (text = chunkdata; *text; text++) /* empty loop */ ; /* zTXt must have some text after the chunkdataword */ if (text == chunkdata + slength) { comp_type = PNG_TEXT_COMPRESSION_NONE; png_warning(png_ptr, "Zero length zTXt chunk"); } else { comp_type = *(++text); if (comp_type != PNG_TEXT_COMPRESSION_zTXt) { png_warning(png_ptr, "Unknown compression type in zTXt chunk"); comp_type = PNG_TEXT_COMPRESSION_zTXt; } text++; /* skip the compression_method byte */ } prefix_len = text - chunkdata; chunkdata = (png_charp)png_decompress_chunk(png_ptr, comp_type, chunkdata, (png_size_t)length, prefix_len, &data_len); text_ptr = (png_textp)png_malloc_warn(png_ptr, (png_uint_32)png_sizeof(png_text)); if (text_ptr == NULL) { png_warning(png_ptr,"Not enough memory to process zTXt chunk."); png_free(png_ptr, chunkdata); return; } text_ptr->compression = comp_type; text_ptr->key = chunkdata; #ifdef PNG_iTXt_SUPPORTED text_ptr->lang = NULL; text_ptr->lang_key = NULL; text_ptr->itxt_length = 0; #endif text_ptr->text = chunkdata + prefix_len; text_ptr->text_length = data_len; ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); png_free(png_ptr, text_ptr); png_free(png_ptr, chunkdata); if (ret) png_error(png_ptr, "Insufficient memory to store zTXt chunk."); } #endif #if defined(PNG_READ_iTXt_SUPPORTED) /* note: this does not correctly handle chunks that are > 64K under DOS */ void /* PRIVATE */ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_textp text_ptr; png_charp chunkdata; png_charp key, lang, text, lang_key; int comp_flag; int comp_type = 0; int ret; png_size_t slength, prefix_len, data_len; png_debug(1, "in png_handle_iTXt\n"); if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before iTXt"); if (png_ptr->mode & PNG_HAVE_IDAT) png_ptr->mode |= PNG_AFTER_IDAT; #ifdef PNG_MAX_MALLOC_64K /* We will no doubt have problems with chunks even half this size, but there is no hard and fast rule to tell us where to stop. */ if (length > (png_uint_32)65535L) { png_warning(png_ptr,"iTXt chunk too large to fit in memory"); png_crc_finish(png_ptr, length); return; } #endif chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); if (chunkdata == NULL) { png_warning(png_ptr, "No memory to process iTXt chunk."); return; } slength = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)chunkdata, slength); if (png_crc_finish(png_ptr, 0)) { png_free(png_ptr, chunkdata); return; } chunkdata[slength] = 0x00; for (lang = chunkdata; *lang; lang++) /* empty loop */ ; lang++; /* skip NUL separator */ /* iTXt must have a language tag (possibly empty), two compression bytes, translated keyword (possibly empty), and possibly some text after the keyword */ if (lang >= chunkdata + slength) { comp_flag = PNG_TEXT_COMPRESSION_NONE; png_warning(png_ptr, "Zero length iTXt chunk"); } else { comp_flag = *lang++; comp_type = *lang++; } for (lang_key = lang; *lang_key; lang_key++) /* empty loop */ ; lang_key++; /* skip NUL separator */ for (text = lang_key; *text; text++) /* empty loop */ ; text++; /* skip NUL separator */ prefix_len = text - chunkdata; key=chunkdata; if (comp_flag) chunkdata = png_decompress_chunk(png_ptr, comp_type, chunkdata, (size_t)length, prefix_len, &data_len); else data_len=png_strlen(chunkdata + prefix_len); text_ptr = (png_textp)png_malloc_warn(png_ptr, (png_uint_32)png_sizeof(png_text)); if (text_ptr == NULL) { png_warning(png_ptr,"Not enough memory to process iTXt chunk."); png_free(png_ptr, chunkdata); return; } text_ptr->compression = (int)comp_flag + 1; text_ptr->lang_key = chunkdata+(lang_key-key); text_ptr->lang = chunkdata+(lang-key); text_ptr->itxt_length = data_len; text_ptr->text_length = 0; text_ptr->key = chunkdata; text_ptr->text = chunkdata + prefix_len; ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); png_free(png_ptr, text_ptr); png_free(png_ptr, chunkdata); if (ret) png_error(png_ptr, "Insufficient memory to store iTXt chunk."); } #endif /* This function is called when we haven't found a handler for a chunk. If there isn't a problem with the chunk itself (ie bad chunk name, CRC, or a critical chunk), the chunk is silently ignored -- unless the PNG_FLAG_UNKNOWN_CHUNKS_SUPPORTED flag is on in which case it will be saved away to be written out later. */ void /* PRIVATE */ png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) { png_uint_32 skip = 0; png_debug(1, "in png_handle_unknown\n"); if (png_ptr->mode & PNG_HAVE_IDAT) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; #endif if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) /* not an IDAT */ png_ptr->mode |= PNG_AFTER_IDAT; } png_check_chunk_name(png_ptr, png_ptr->chunk_name); if (!(png_ptr->chunk_name[0] & 0x20)) { #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != PNG_HANDLE_CHUNK_ALWAYS #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) && png_ptr->read_user_chunk_fn == NULL #endif ) #endif png_chunk_error(png_ptr, "unknown critical chunk"); } #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) { png_unknown_chunk chunk; #ifdef PNG_MAX_MALLOC_64K if (length > (png_uint_32)65535L) { png_warning(png_ptr, "unknown chunk too large to fit in memory"); skip = length - (png_uint_32)65535L; length = (png_uint_32)65535L; } #endif png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name); chunk.data = (png_bytep)png_malloc(png_ptr, length); chunk.size = (png_size_t)length; png_crc_read(png_ptr, (png_bytep)chunk.data, length); #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) if(png_ptr->read_user_chunk_fn != NULL) { /* callback to user unknown chunk handler */ if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0) { if (!(png_ptr->chunk_name[0] & 0x20)) if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != PNG_HANDLE_CHUNK_ALWAYS) { png_free(png_ptr, chunk.data); png_chunk_error(png_ptr, "unknown critical chunk"); } png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); } } else #endif png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); png_free(png_ptr, chunk.data); } else #endif skip = length; png_crc_finish(png_ptr, skip); #if !defined(PNG_READ_USER_CHUNKS_SUPPORTED) if (&info_ptr == NULL) /* quiet compiler warnings about unused info_ptr */ return; #endif } /* This function is called to verify that a chunk name is valid. This function can't have the "critical chunk check" incorporated into it, since in the future we will need to be able to call user functions to handle unknown critical chunks after we check that the chunk name itself is valid. */ #define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) void /* PRIVATE */ png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name) { png_debug(1, "in png_check_chunk_name\n"); if (isnonalpha(chunk_name[0]) || isnonalpha(chunk_name[1]) || isnonalpha(chunk_name[2]) || isnonalpha(chunk_name[3])) { png_chunk_error(png_ptr, "invalid chunk type"); } } /* Combines the row recently read in with the existing pixels in the row. This routine takes care of alpha and transparency if requested. This routine also handles the two methods of progressive display of interlaced images, depending on the mask value. The mask value describes which pixels are to be combined with the row. The pattern always repeats every 8 pixels, so just 8 bits are needed. A one indicates the pixel is to be combined, a zero indicates the pixel is to be skipped. This is in addition to any alpha or transparency value associated with the pixel. If you want all pixels to be combined, pass 0xff (255) in mask. */ #ifndef PNG_HAVE_ASSEMBLER_COMBINE_ROW void /* PRIVATE */ png_combine_row(png_structp png_ptr, png_bytep row, int mask) { png_debug(1,"in png_combine_row\n"); if (mask == 0xff) { png_memcpy(row, png_ptr->row_buf + 1, PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->width)); } else { switch (png_ptr->row_info.pixel_depth) { case 1: { png_bytep sp = png_ptr->row_buf + 1; png_bytep dp = row; int s_inc, s_start, s_end; int m = 0x80; int shift; png_uint_32 i; png_uint_32 row_width = png_ptr->width; #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) { s_start = 0; s_end = 7; s_inc = 1; } else #endif { s_start = 7; s_end = 0; s_inc = -1; } shift = s_start; for (i = 0; i < row_width; i++) { if (m & mask) { int value; value = (*sp >> shift) & 0x01; *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); *dp |= (png_byte)(value << shift); } if (shift == s_end) { shift = s_start; sp++; dp++; } else shift += s_inc; if (m == 1) m = 0x80; else m >>= 1; } break; } case 2: { png_bytep sp = png_ptr->row_buf + 1; png_bytep dp = row; int s_start, s_end, s_inc; int m = 0x80; int shift; png_uint_32 i; png_uint_32 row_width = png_ptr->width; int value; #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) { s_start = 0; s_end = 6; s_inc = 2; } else #endif { s_start = 6; s_end = 0; s_inc = -2; } shift = s_start; for (i = 0; i < row_width; i++) { if (m & mask) { value = (*sp >> shift) & 0x03; *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); *dp |= (png_byte)(value << shift); } if (shift == s_end) { shift = s_start; sp++; dp++; } else shift += s_inc; if (m == 1) m = 0x80; else m >>= 1; } break; } case 4: { png_bytep sp = png_ptr->row_buf + 1; png_bytep dp = row; int s_start, s_end, s_inc; int m = 0x80; int shift; png_uint_32 i; png_uint_32 row_width = png_ptr->width; int value; #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) { s_start = 0; s_end = 4; s_inc = 4; } else #endif { s_start = 4; s_end = 0; s_inc = -4; } shift = s_start; for (i = 0; i < row_width; i++) { if (m & mask) { value = (*sp >> shift) & 0xf; *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); *dp |= (png_byte)(value << shift); } if (shift == s_end) { shift = s_start; sp++; dp++; } else shift += s_inc; if (m == 1) m = 0x80; else m >>= 1; } break; } default: { png_bytep sp = png_ptr->row_buf + 1; png_bytep dp = row; png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); png_uint_32 i; png_uint_32 row_width = png_ptr->width; png_byte m = 0x80; for (i = 0; i < row_width; i++) { if (m & mask) { png_memcpy(dp, sp, pixel_bytes); } sp += pixel_bytes; dp += pixel_bytes; if (m == 1) m = 0x80; else m >>= 1; } break; } } } } #endif /* !PNG_HAVE_ASSEMBLER_COMBINE_ROW */ #ifdef PNG_READ_INTERLACING_SUPPORTED #ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */ /* OLD pre-1.0.9 interface: void png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass, png_uint_32 transformations) */ void /* PRIVATE */ png_do_read_interlace(png_structp png_ptr) { png_row_infop row_info = &(png_ptr->row_info); png_bytep row = png_ptr->row_buf + 1; int pass = png_ptr->pass; png_uint_32 transformations = png_ptr->transformations; #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* offset to next interlace block */ const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; #endif png_debug(1,"in png_do_read_interlace (stock C version)\n"); if (row != NULL && row_info != NULL) { png_uint_32 final_width; final_width = row_info->width * png_pass_inc[pass]; switch (row_info->pixel_depth) { case 1: { png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3); png_bytep dp = row + (png_size_t)((final_width - 1) >> 3); int sshift, dshift; int s_start, s_end, s_inc; int jstop = png_pass_inc[pass]; png_byte v; png_uint_32 i; int j; #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (transformations & PNG_PACKSWAP) { sshift = (int)((row_info->width + 7) & 0x07); dshift = (int)((final_width + 7) & 0x07); s_start = 7; s_end = 0; s_inc = -1; } else #endif { sshift = 7 - (int)((row_info->width + 7) & 0x07); dshift = 7 - (int)((final_width + 7) & 0x07); s_start = 0; s_end = 7; s_inc = 1; } for (i = 0; i < row_info->width; i++) { v = (png_byte)((*sp >> sshift) & 0x01); for (j = 0; j < jstop; j++) { *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff); *dp |= (png_byte)(v << dshift); if (dshift == s_end) { dshift = s_start; dp--; } else dshift += s_inc; } if (sshift == s_end) { sshift = s_start; sp--; } else sshift += s_inc; } break; } case 2: { png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2); png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2); int sshift, dshift; int s_start, s_end, s_inc; int jstop = png_pass_inc[pass]; png_uint_32 i; #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (transformations & PNG_PACKSWAP) { sshift = (int)(((row_info->width + 3) & 0x03) << 1); dshift = (int)(((final_width + 3) & 0x03) << 1); s_start = 6; s_end = 0; s_inc = -2; } else #endif { sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1); dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1); s_start = 0; s_end = 6; s_inc = 2; } for (i = 0; i < row_info->width; i++) { png_byte v; int j; v = (png_byte)((*sp >> sshift) & 0x03); for (j = 0; j < jstop; j++) { *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff); *dp |= (png_byte)(v << dshift); if (dshift == s_end) { dshift = s_start; dp--; } else dshift += s_inc; } if (sshift == s_end) { sshift = s_start; sp--; } else sshift += s_inc; } break; } case 4: { png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1); png_bytep dp = row + (png_size_t)((final_width - 1) >> 1); int sshift, dshift; int s_start, s_end, s_inc; png_uint_32 i; int jstop = png_pass_inc[pass]; #if defined(PNG_READ_PACKSWAP_SUPPORTED) if (transformations & PNG_PACKSWAP) { sshift = (int)(((row_info->width + 1) & 0x01) << 2); dshift = (int)(((final_width + 1) & 0x01) << 2); s_start = 4; s_end = 0; s_inc = -4; } else #endif { sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2); dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2); s_start = 0; s_end = 4; s_inc = 4; } for (i = 0; i < row_info->width; i++) { png_byte v = (png_byte)((*sp >> sshift) & 0xf); int j; for (j = 0; j < jstop; j++) { *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff); *dp |= (png_byte)(v << dshift); if (dshift == s_end) { dshift = s_start; dp--; } else dshift += s_inc; } if (sshift == s_end) { sshift = s_start; sp--; } else sshift += s_inc; } break; } default: { png_size_t pixel_bytes = (row_info->pixel_depth >> 3); png_bytep sp = row + (png_size_t)(row_info->width - 1) * pixel_bytes; png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes; int jstop = png_pass_inc[pass]; png_uint_32 i; for (i = 0; i < row_info->width; i++) { png_byte v[8]; int j; png_memcpy(v, sp, pixel_bytes); for (j = 0; j < jstop; j++) { png_memcpy(dp, v, pixel_bytes); dp -= pixel_bytes; } sp -= pixel_bytes; } break; } } row_info->width = final_width; row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,final_width); } #if !defined(PNG_READ_PACKSWAP_SUPPORTED) if (&transformations == NULL) /* silence compiler warning */ return; #endif } #endif /* !PNG_HAVE_ASSEMBLER_READ_INTERLACE */ #endif /* PNG_READ_INTERLACING_SUPPORTED */ #ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW void /* PRIVATE */ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter) { png_debug(1, "in png_read_filter_row\n"); png_debug2(2,"row = %lu, filter = %d\n", png_ptr->row_number, filter); switch (filter) { case PNG_FILTER_VALUE_NONE: break; case PNG_FILTER_VALUE_SUB: { png_uint_32 i; png_uint_32 istop = row_info->rowbytes; png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; png_bytep rp = row + bpp; png_bytep lp = row; for (i = bpp; i < istop; i++) { *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff); rp++; } break; } case PNG_FILTER_VALUE_UP: { png_uint_32 i; png_uint_32 istop = row_info->rowbytes; png_bytep rp = row; png_bytep pp = prev_row; for (i = 0; i < istop; i++) { *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); rp++; } break; } case PNG_FILTER_VALUE_AVG: { png_uint_32 i; png_bytep rp = row; png_bytep pp = prev_row; png_bytep lp = row; png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; png_uint_32 istop = row_info->rowbytes - bpp; for (i = 0; i < bpp; i++) { *rp = (png_byte)(((int)(*rp) + ((int)(*pp++) / 2 )) & 0xff); rp++; } for (i = 0; i < istop; i++) { *rp = (png_byte)(((int)(*rp) + (int)(*pp++ + *lp++) / 2 ) & 0xff); rp++; } break; } case PNG_FILTER_VALUE_PAETH: { png_uint_32 i; png_bytep rp = row; png_bytep pp = prev_row; png_bytep lp = row; png_bytep cp = prev_row; png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; png_uint_32 istop=row_info->rowbytes - bpp; for (i = 0; i < bpp; i++) { *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); rp++; } for (i = 0; i < istop; i++) /* use leftover rp,pp */ { int a, b, c, pa, pb, pc, p; a = *lp++; b = *pp++; c = *cp++; p = b - c; pc = a - c; #ifdef PNG_USE_ABS pa = abs(p); pb = abs(pc); pc = abs(p + pc); #else pa = p < 0 ? -p : p; pb = pc < 0 ? -pc : pc; pc = (p + pc) < 0 ? -(p + pc) : p + pc; #endif /* if (pa <= pb && pa <= pc) p = a; else if (pb <= pc) p = b; else p = c; */ p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; *rp = (png_byte)(((int)(*rp) + p) & 0xff); rp++; } break; } default: png_warning(png_ptr, "Ignoring bad adaptive filter type"); *row=0; break; } } #endif /* !PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */ void /* PRIVATE */ png_read_finish_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; /* start of interlace block in the y direction */ const int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; /* offset to next interlace block in the y direction */ const int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; #endif png_debug(1, "in png_read_finish_row\n"); png_ptr->row_number++; if (png_ptr->row_number < png_ptr->num_rows) return; if (png_ptr->interlaced) { png_ptr->row_number = 0; png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); do { png_ptr->pass++; if (png_ptr->pass >= 7) break; png_ptr->iwidth = (png_ptr->width + png_pass_inc[png_ptr->pass] - 1 - png_pass_start[png_ptr->pass]) / png_pass_inc[png_ptr->pass]; png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->iwidth) + 1; if (!(png_ptr->transformations & PNG_INTERLACE)) { png_ptr->num_rows = (png_ptr->height + png_pass_yinc[png_ptr->pass] - 1 - png_pass_ystart[png_ptr->pass]) / png_pass_yinc[png_ptr->pass]; if (!(png_ptr->num_rows)) continue; } else /* if (png_ptr->transformations & PNG_INTERLACE) */ break; } while (png_ptr->iwidth == 0); if (png_ptr->pass < 7) return; } if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; #endif char extra; int ret; png_ptr->zstream.next_out = (Byte *)&extra; png_ptr->zstream.avail_out = (uInt)1; for(;;) { if (!(png_ptr->zstream.avail_in)) { while (!png_ptr->idat_size) { png_byte chunk_length[4]; png_crc_finish(png_ptr, 0); png_read_data(png_ptr, chunk_length, 4); png_ptr->idat_size = png_get_uint_31(png_ptr, chunk_length); png_reset_crc(png_ptr); png_crc_read(png_ptr, png_ptr->chunk_name, 4); if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) png_error(png_ptr, "Not enough image data"); } png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_in = png_ptr->zbuf; if (png_ptr->zbuf_size > png_ptr->idat_size) png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size; png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zstream.avail_in); png_ptr->idat_size -= png_ptr->zstream.avail_in; } ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); if (ret == Z_STREAM_END) { if (!(png_ptr->zstream.avail_out) || png_ptr->zstream.avail_in || png_ptr->idat_size) png_warning(png_ptr, "Extra compressed data"); png_ptr->mode |= PNG_AFTER_IDAT; png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; break; } if (ret != Z_OK) png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg : "Decompression Error"); if (!(png_ptr->zstream.avail_out)) { png_warning(png_ptr, "Extra compressed data."); png_ptr->mode |= PNG_AFTER_IDAT; png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; break; } } png_ptr->zstream.avail_out = 0; } if (png_ptr->idat_size || png_ptr->zstream.avail_in) png_warning(png_ptr, "Extra compression data"); inflateReset(&png_ptr->zstream); png_ptr->mode |= PNG_AFTER_IDAT; } void /* PRIVATE */ png_read_start_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; /* start of interlace block in the y direction */ const int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; /* offset to next interlace block in the y direction */ const int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; #endif int max_pixel_depth; png_uint_32 row_bytes; png_debug(1, "in png_read_start_row\n"); png_ptr->zstream.avail_in = 0; png_init_read_transformations(png_ptr); if (png_ptr->interlaced) { if (!(png_ptr->transformations & PNG_INTERLACE)) png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 - png_pass_ystart[0]) / png_pass_yinc[0]; else png_ptr->num_rows = png_ptr->height; png_ptr->iwidth = (png_ptr->width + png_pass_inc[png_ptr->pass] - 1 - png_pass_start[png_ptr->pass]) / png_pass_inc[png_ptr->pass]; row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1; png_ptr->irowbytes = (png_size_t)row_bytes; if((png_uint_32)png_ptr->irowbytes != row_bytes) png_error(png_ptr, "Rowbytes overflow in png_read_start_row"); } else { png_ptr->num_rows = png_ptr->height; png_ptr->iwidth = png_ptr->width; png_ptr->irowbytes = png_ptr->rowbytes + 1; } max_pixel_depth = png_ptr->pixel_depth; #if defined(PNG_READ_PACK_SUPPORTED) if ((png_ptr->transformations & PNG_PACK) && png_ptr->bit_depth < 8) max_pixel_depth = 8; #endif #if defined(PNG_READ_EXPAND_SUPPORTED) if (png_ptr->transformations & PNG_EXPAND) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { if (png_ptr->num_trans) max_pixel_depth = 32; else max_pixel_depth = 24; } else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) { if (max_pixel_depth < 8) max_pixel_depth = 8; if (png_ptr->num_trans) max_pixel_depth *= 2; } else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) { if (png_ptr->num_trans) { max_pixel_depth *= 4; max_pixel_depth /= 3; } } } #endif #if defined(PNG_READ_FILLER_SUPPORTED) if (png_ptr->transformations & (PNG_FILLER)) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) max_pixel_depth = 32; else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) { if (max_pixel_depth <= 8) max_pixel_depth = 16; else max_pixel_depth = 32; } else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) { if (max_pixel_depth <= 32) max_pixel_depth = 32; else max_pixel_depth = 64; } } #endif #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) if (png_ptr->transformations & PNG_GRAY_TO_RGB) { if ( #if defined(PNG_READ_EXPAND_SUPPORTED) (png_ptr->num_trans && (png_ptr->transformations & PNG_EXPAND)) || #endif #if defined(PNG_READ_FILLER_SUPPORTED) (png_ptr->transformations & (PNG_FILLER)) || #endif png_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { if (max_pixel_depth <= 16) max_pixel_depth = 32; else max_pixel_depth = 64; } else { if (max_pixel_depth <= 8) { if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) max_pixel_depth = 32; else max_pixel_depth = 24; } else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) max_pixel_depth = 64; else max_pixel_depth = 48; } } #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) && \ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) if(png_ptr->transformations & PNG_USER_TRANSFORM) { int user_pixel_depth=png_ptr->user_transform_depth* png_ptr->user_transform_channels; if(user_pixel_depth > max_pixel_depth) max_pixel_depth=user_pixel_depth; } #endif /* align the width on the next larger 8 pixels. Mainly used for interlacing */ row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7)); /* calculate the maximum bytes needed, adding a byte and a pixel for safety's sake */ row_bytes = PNG_ROWBYTES(max_pixel_depth,row_bytes) + 1 + ((max_pixel_depth + 7) >> 3); #ifdef PNG_MAX_MALLOC_64K if (row_bytes > (png_uint_32)65536L) png_error(png_ptr, "This image requires a row greater than 64KB"); #endif png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64); png_ptr->row_buf = png_ptr->big_row_buf+32; #if defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD) png_ptr->row_buf_size = row_bytes; #endif #ifdef PNG_MAX_MALLOC_64K if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L) png_error(png_ptr, "This image requires a row greater than 64KB"); #endif if ((png_uint_32)png_ptr->rowbytes + 1 > PNG_SIZE_MAX) png_error(png_ptr, "Row has too many bytes to allocate in memory."); png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)( png_ptr->rowbytes + 1)); png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); png_debug1(3, "width = %lu,\n", png_ptr->width); png_debug1(3, "height = %lu,\n", png_ptr->height); png_debug1(3, "iwidth = %lu,\n", png_ptr->iwidth); png_debug1(3, "num_rows = %lu\n", png_ptr->num_rows); png_debug1(3, "rowbytes = %lu,\n", png_ptr->rowbytes); png_debug1(3, "irowbytes = %lu,\n", png_ptr->irowbytes); png_ptr->flags |= PNG_FLAG_ROW_INIT; } htmldoc-1.8.27/png/png.50100664000212600000240000000451710124712606013366 0ustar mikeuser.TH PNG 5 "September 12, 2004" .SH NAME png \- Portable Network Graphics (PNG) format .SH DESCRIPTION PNG (Portable Network Graphics) is an extensible file format for the lossless, portable, well-compressed storage of raster images. PNG provides a patent-free replacement for GIF and can also replace many common uses of TIFF. Indexed-color, grayscale, and truecolor images are supported, plus an optional alpha channel. Sample depths range from 1 to 16 bits. .br PNG is designed to work well in online viewing applications, such as the World Wide Web, so it is fully streamable with a progressive display option. PNG is robust, providing both full file integrity checking and fast, simple detection of common transmission errors. Also, PNG can store gamma and chromaticity data for improved color matching on heterogeneous platforms. .SH "SEE ALSO" .IR libpng(3), zlib(3), deflate(5), and zlib(5) .LP PNG specification (second edition), November 2003: .IP .br Copyright (c) 1998-2004 Glenn Randers-Pehrson For conditions of distribution and use, see copyright notice in png.h. based on: libpng 1.0 beta 6 version 0.96 May 28, 1997 Updated and distributed by Andreas Dilger Copyright (c) 1996, 1997 Andreas Dilger libpng 1.0 beta 2 - version 0.88 January 26, 1996 For conditions of distribution and use, see copyright notice in png.h. Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. Updated/rewritten per request in the libpng FAQ Copyright (c) 1995, 1996 Frank J. T. Wojcik December 18, 1995 & January 20, 1996 I. Introduction This file describes how to use and modify the PNG reference library (known as libpng) for your own use. There are five sections to this file: introduction, structures, reading, writing, and modification and configuration notes for various special platforms. In addition to this file, example.c is a good starting point for using the library, as it is heavily commented and should include everything most people will need. We assume that libpng is already installed; see the INSTALL file for instructions on how to install libpng. Libpng was written as a companion to the PNG specification, as a way of reducing the amount of time and effort it takes to support the PNG file format in application programs. The PNG specification (second edition), November 2003, is available as a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at The PNG-1.0 specification is available as RFC 2083 and as a W3C Recommendation . Some additional chunks are described in the special-purpose public chunks documents at . Other information about PNG, and the latest version of libpng, can be found at the PNG home page, . Most users will not have to modify the library significantly; advanced users may want to modify it more. All attempts were made to make it as complete as possible, while keeping the code easy to understand. Currently, this library only supports C. Support for other languages is being considered. Libpng has been designed to handle multiple sessions at one time, to be easily modifiable, to be portable to the vast majority of machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy to use. The ultimate goal of libpng is to promote the acceptance of the PNG file format in whatever way possible. While there is still work to be done (see the TODO file), libpng should cover the majority of the needs of its users. Libpng uses zlib for its compression and decompression of PNG files. Further information about zlib, and the latest version of zlib, can be found at the zlib home page, . The zlib compression utility is a general purpose utility that is useful for more than PNG files, and can be used without libpng. See the documentation delivered with zlib for more details. You can usually find the source files for the zlib utility wherever you find the libpng source files. Libpng is thread safe, provided the threads are using different instances of the structures. Each thread should have its own png_struct and png_info instances, and thus its own image. Libpng does not protect itself against two threads using the same instance of a structure. Note: thread safety may be defeated by use of some of the MMX assembler code in pnggccrd.c, which is only compiled when the user defines PNG_THREAD_UNSAFE_OK. II. Structures There are two main structures that are important to libpng, png_struct and png_info. The first, png_struct, is an internal structure that will not, for the most part, be used by a user except as the first variable passed to every libpng function call. The png_info structure is designed to provide information about the PNG file. At one time, the fields of png_info were intended to be directly accessible to the user. However, this tended to cause problems with applications using dynamically loaded libraries, and as a result a set of interface functions for png_info (the png_get_*() and png_set_*() functions) was developed. The fields of png_info are still available for older applications, but it is suggested that applications use the new interfaces if at all possible. Applications that do make direct access to the members of png_struct (except for png_ptr->jmpbuf) must be recompiled whenever the library is updated, and applications that make direct access to the members of png_info must be recompiled if they were compiled or loaded with libpng version 1.0.6, in which the members were in a different order. In version 1.0.7, the members of the png_info structure reverted to the old order, as they were in versions 0.97c through 1.0.5. Starting with version 2.0.0, both structures are going to be hidden, and the contents of the structures will only be accessible through the png_get/png_set functions. The png.h header file is an invaluable reference for programming with libpng. And while I'm on the topic, make sure you include the libpng header file: #include III. Reading We'll now walk you through the possible functions to call when reading in a PNG file sequentially, briefly explaining the syntax and purpose of each one. See example.c and png.h for more detail. While progressive reading is covered in the next section, you will still need some of the functions discussed in this section to read a PNG file. Setup You will want to do the I/O initialization(*) before you get into libpng, so if it doesn't work, you don't have much to undo. Of course, you will also want to insure that you are, in fact, dealing with a PNG file. Libpng provides a simple check to see if a file is a PNG file. To use it, pass in the first 1 to 8 bytes of the file to the function png_sig_cmp(), and it will return 0 if the bytes match the corresponding bytes of the PNG signature, or nonzero otherwise. Of course, the more bytes you pass in, the greater the accuracy of the prediction. If you are intending to keep the file pointer open for use in libpng, you must ensure you don't read more than 8 bytes from the beginning of the file, and you also have to make a call to png_set_sig_bytes_read() with the number of bytes you read from the beginning. Libpng will then only check the bytes (if any) that your program didn't read. (*): If you are not using the standard I/O functions, you will need to replace them with custom functions. See the discussion under Customizing libpng. FILE *fp = fopen(file_name, "rb"); if (!fp) { return (ERROR); } fread(header, 1, number, fp); is_png = !png_sig_cmp(header, 0, number); if (!is_png) { return (NOT_PNG); } Next, png_struct and png_info need to be allocated and initialized. In order to ensure that the size of these structures is correct even with a dynamically linked libpng, there are functions to initialize and allocate the structures. We also pass the library version, optional pointers to error handling functions, and a pointer to a data struct for use by the error functions, if necessary (the pointer and functions can be NULL if the default error handlers are to be used). See the section on Changes to Libpng below regarding the old initialization functions. The structure allocation functions quietly return NULL if they fail to create the structure, so your application should check for that. png_structp png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn); if (!png_ptr) return (ERROR); png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (ERROR); } png_infop end_info = png_create_info_struct(png_ptr); if (!end_info) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (ERROR); } If you want to use your own memory allocation routines, define PNG_USER_MEM_SUPPORTED and use png_create_read_struct_2() instead of png_create_read_struct(): png_structp png_ptr = png_create_read_struct_2 (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn, (png_voidp) user_mem_ptr, user_malloc_fn, user_free_fn); The error handling routines passed to png_create_read_struct() and the memory alloc/free routines passed to png_create_struct_2() are only necessary if you are not using the libpng supplied error handling and memory alloc/free functions. When libpng encounters an error, it expects to longjmp back to your routine. Therefore, you will need to call setjmp and pass your png_jmpbuf(png_ptr). If you read the file from different routines, you will need to update the jmpbuf field every time you enter a new routine that will call a png_*() function. See your documentation of setjmp/longjmp for your compiler for more information on setjmp/longjmp. See the discussion on libpng error handling in the Customizing Libpng section below for more information on the libpng error handling. If an error occurs, and libpng longjmp's back to your setjmp, you will want to call png_destroy_read_struct() to free any memory. if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); fclose(fp); return (ERROR); } If you would rather avoid the complexity of setjmp/longjmp issues, you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case errors will result in a call to PNG_ABORT() which defaults to abort(). Now you need to set up the input code. The default for libpng is to use the C function fread(). If you use this, you will need to pass a valid FILE * in the function png_init_io(). Be sure that the file is opened in binary mode. If you wish to handle reading data in another way, you need not call the png_init_io() function, but you must then implement the libpng I/O methods discussed in the Customizing Libpng section below. png_init_io(png_ptr, fp); If you had previously opened the file and read any of the signature from the beginning in order to see if this was a PNG file, you need to let libpng know that there are some bytes missing from the start of the file. png_set_sig_bytes(png_ptr, number); Setting up callback code You can set up a callback function to handle any unknown chunks in the input stream. You must supply the function read_chunk_callback(png_ptr ptr, png_unknown_chunkp chunk); { /* The unknown chunk structure contains your chunk data: */ png_byte name[5]; png_byte *data; png_size_t size; /* Note that libpng has already taken care of the CRC handling */ /* put your code here. Return one of the following: */ return (-n); /* chunk had an error */ return (0); /* did not recognize */ return (n); /* success */ } (You can give your function another name that you like instead of "read_chunk_callback") To inform libpng about your function, use png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr, read_chunk_callback); This names not only the callback function, but also a user pointer that you can retrieve with png_get_user_chunk_ptr(png_ptr); At this point, you can set up a callback function that will be called after each row has been read, which you can use to control a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void read_row_callback(png_ptr ptr, png_uint_32 row, int pass); { /* put your code here */ } (You can give it another name that you like instead of "read_row_callback") To inform libpng about your function, use png_set_read_status_fn(png_ptr, read_row_callback); Width and height limits The PNG specification allows the width and height of an image to be as large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns. Since very few applications really need to process such large images, we have imposed an arbitrary 1-million limit on rows and columns. Larger images will be rejected immediately with a png_error() call. If you wish to override this limit, you can use png_set_user_limits(png_ptr, width_max, height_max); to set your own limits, or use width_max = height_max = 0x7fffffffL to allow all valid dimensions (libpng may reject some very large images anyway because of potential buffer overflow conditions). You should put this statement after you create the PNG structure and before calling png_read_info(), png_read_png(), or png_process_data(). If you need to retrieve the limits that are being applied, use width_max = png_get_user_width_max(png_ptr); height_max = png_get_user_height_max(png_ptr); Unknown-chunk handling Now you get to set the way the library processes unknown chunks in the input PNG stream. Both known and unknown chunks will be read. Normal behavior is that known chunks will be parsed into information in various info_ptr members; unknown chunks will be discarded. To change this, you can call: png_set_keep_unknown_chunks(png_ptr, keep, chunk_list, num_chunks); keep - 0: do not handle as unknown 1: do not keep 2: keep only if safe-to-copy 3: keep even if unsafe-to-copy You can use these definitions: PNG_HANDLE_CHUNK_AS_DEFAULT 0 PNG_HANDLE_CHUNK_NEVER 1 PNG_HANDLE_CHUNK_IF_SAFE 2 PNG_HANDLE_CHUNK_ALWAYS 3 chunk_list - list of chunks affected (a byte string, five bytes per chunk, NULL or '\0' if num_chunks is 0) num_chunks - number of chunks affected; if 0, all unknown chunks are affected. If nonzero, only the chunks in the list are affected Unknown chunks declared in this way will be saved as raw data onto a list of png_unknown_chunk structures. If a chunk that is normally known to libpng is named in the list, it will be handled as unknown, according to the "keep" directive. If a chunk is named in successive instances of png_set_keep_unknown_chunks(), the final instance will take precedence. The IHDR and IEND chunks should not be named in chunk_list; if they are, libpng will process them normally anyway. The high-level read interface At this point there are two ways to proceed; through the high-level read interface, or through a sequence of low-level read operations. You can use the high-level interface if (a) you are willing to read the entire image into memory, and (b) the input transformations you want to do are limited to the following set: PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to 8 bits PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit samples to bytes PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first PNG_TRANSFORM_EXPAND Perform set_expand() PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples (This excludes setting a background color, doing gamma transformation, dithering, and setting filler.) If this is the case, simply do this: png_read_png(png_ptr, info_ptr, png_transforms, NULL) where png_transforms is an integer containing the logical OR of some set of transformation flags. This call is equivalent to png_read_info(), followed the set of transformations indicated by the transform mask, then png_read_image(), and finally png_read_end(). (The final parameter of this call is not yet used. Someday it might point to transformation parameters required by some future input transform.) You must use png_transforms and not call any png_set_transform() functions when you use png_read_png(). After you have called png_read_png(), you can retrieve the image data with row_pointers = png_get_rows(png_ptr, info_ptr); where row_pointers is an array of pointers to the pixel data for each row: png_bytep row_pointers[height]; If you know your image size and pixel size ahead of time, you can allocate row_pointers prior to calling png_read_png() with if (height > PNG_UINT_32_MAX/png_sizeof(png_byte)) png_error (png_ptr, "Image is too tall to process in memory"); if (width > PNG_UINT_32_MAX/pixel_size) png_error (png_ptr, "Image is too wide to process in memory"); row_pointers = png_malloc(png_ptr, height*png_sizeof(png_bytep)); for (int i=0; i) and png_get_(png_ptr, info_ptr, ...) functions return non-zero if the data has been read, or zero if it is missing. The parameters to the png_get_ are set directly if they are simple data types, or a pointer into the info_ptr is returned for any complex types. png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); palette - the palette for the file (array of png_color) num_palette - number of entries in the palette png_get_gAMA(png_ptr, info_ptr, &gamma); gamma - the gamma the file is written at (PNG_INFO_gAMA) png_get_sRGB(png_ptr, info_ptr, &srgb_intent); srgb_intent - the rendering intent (PNG_INFO_sRGB) The presence of the sRGB chunk means that the pixel data is in the sRGB color space. This chunk also implies specific values of gAMA and cHRM. png_get_iCCP(png_ptr, info_ptr, &name, &compression_type, &profile, &proflen); name - The profile name. compression - The compression type; always PNG_COMPRESSION_TYPE_BASE for PNG 1.0. You may give NULL to this argument to ignore it. profile - International Color Consortium color profile data. May contain NULs. proflen - length of profile data in bytes. png_get_sBIT(png_ptr, info_ptr, &sig_bit); sig_bit - the number of significant bits for (PNG_INFO_sBIT) each of the gray, red, green, and blue channels, whichever are appropriate for the given color type (png_color_16) png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, &trans_values); trans - array of transparent entries for palette (PNG_INFO_tRNS) trans_values - graylevel or color sample values of the single transparent color for non-paletted images (PNG_INFO_tRNS) num_trans - number of transparent entries (PNG_INFO_tRNS) png_get_hIST(png_ptr, info_ptr, &hist); (PNG_INFO_hIST) hist - histogram of palette (array of png_uint_16) png_get_tIME(png_ptr, info_ptr, &mod_time); mod_time - time image was last modified (PNG_VALID_tIME) png_get_bKGD(png_ptr, info_ptr, &background); background - background color (PNG_VALID_bKGD) valid 16-bit red, green and blue values, regardless of color_type num_comments = png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); num_comments - number of comments text_ptr - array of png_text holding image comments text_ptr[i].compression - type of compression used on "text" PNG_TEXT_COMPRESSION_NONE PNG_TEXT_COMPRESSION_zTXt PNG_ITXT_COMPRESSION_NONE PNG_ITXT_COMPRESSION_zTXt text_ptr[i].key - keyword for comment. Must contain 1-79 characters. text_ptr[i].text - text comments for current keyword. Can be empty. text_ptr[i].text_length - length of text string, after decompression, 0 for iTXt text_ptr[i].itxt_length - length of itxt string, after decompression, 0 for tEXt/zTXt text_ptr[i].lang - language of comment (empty string for unknown). text_ptr[i].lang_key - keyword in UTF-8 (empty string for unknown). num_text - number of comments (same as num_comments; you can put NULL here to avoid the duplication) Note while png_set_text() will accept text, language, and translated keywords that can be NULL pointers, the structure returned by png_get_text will always contain regular zero-terminated C strings. They might be empty strings but they will never be NULL pointers. num_spalettes = png_get_sPLT(png_ptr, info_ptr, &palette_ptr); palette_ptr - array of palette structures holding contents of one or more sPLT chunks read. num_spalettes - number of sPLT chunks read. png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y, &unit_type); offset_x - positive offset from the left edge of the screen offset_y - positive offset from the top edge of the screen unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y, &unit_type); res_x - pixels/unit physical resolution in x direction res_y - pixels/unit physical resolution in x direction unit_type - PNG_RESOLUTION_UNKNOWN, PNG_RESOLUTION_METER png_get_sCAL(png_ptr, info_ptr, &unit, &width, &height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are doubles) png_get_sCAL_s(png_ptr, info_ptr, &unit, &width, &height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are strings like "2.54") num_unknown_chunks = png_get_unknown_chunks(png_ptr, info_ptr, &unknowns) unknowns - array of png_unknown_chunk structures holding unknown chunks unknowns[i].name - name of unknown chunk unknowns[i].data - data of unknown chunk unknowns[i].size - size of unknown chunk's data unknowns[i].location - position of chunk in file The value of "i" corresponds to the order in which the chunks were read from the PNG file or inserted with the png_set_unknown_chunks() function. The data from the pHYs chunk can be retrieved in several convenient forms: res_x = png_get_x_pixels_per_meter(png_ptr, info_ptr) res_y = png_get_y_pixels_per_meter(png_ptr, info_ptr) res_x_and_y = png_get_pixels_per_meter(png_ptr, info_ptr) res_x = png_get_x_pixels_per_inch(png_ptr, info_ptr) res_y = png_get_y_pixels_per_inch(png_ptr, info_ptr) res_x_and_y = png_get_pixels_per_inch(png_ptr, info_ptr) aspect_ratio = png_get_pixel_aspect_ratio(png_ptr, info_ptr) (Each of these returns 0 [signifying "unknown"] if the data is not present or if res_x is 0; res_x_and_y is 0 if res_x != res_y) The data from the oFFs chunk can be retrieved in several convenient forms: x_offset = png_get_x_offset_microns(png_ptr, info_ptr); y_offset = png_get_y_offset_microns(png_ptr, info_ptr); x_offset = png_get_x_offset_inches(png_ptr, info_ptr); y_offset = png_get_y_offset_inches(png_ptr, info_ptr); (Each of these returns 0 [signifying "unknown" if both x and y are 0] if the data is not present or if the chunk is present but the unit is the pixel) For more information, see the png_info definition in png.h and the PNG specification for chunk contents. Be careful with trusting rowbytes, as some of the transformations could increase the space needed to hold a row (expand, filler, gray_to_rgb, etc.). See png_read_update_info(), below. A quick word about text_ptr and num_text. PNG stores comments in keyword/text pairs, one pair per chunk, with no limit on the number of text chunks, and a 2^31 byte limit on their size. While there are suggested keywords, there is no requirement to restrict the use to these strings. It is strongly suggested that keywords and text be sensible to humans (that's the point), so don't use abbreviations. Non-printing symbols are not allowed. See the PNG specification for more details. There is also no requirement to have text after the keyword. Keywords should be limited to 79 Latin-1 characters without leading or trailing spaces, but non-consecutive spaces are allowed within the keyword. It is possible to have the same keyword any number of times. The text_ptr is an array of png_text structures, each holding a pointer to a language string, a pointer to a keyword and a pointer to a text string. The text string, language code, and translated keyword may be empty or NULL pointers. The keyword/text pairs are put into the array in the order that they are received. However, some or all of the text chunks may be after the image, so, to make sure you have read all the text chunks, don't mess with these until after you read the stuff after the image. This will be mentioned again below in the discussion that goes with png_read_end(). Input transformations After you've read the header information, you can set up the library to handle any special transformations of the image data. The various ways to transform the data will be described in the order that they should occur. This is important, as some of these change the color type and/or bit depth of the data, and some others only work on certain color types and bit depths. Even though each transformation checks to see if it has data that it can do something with, you should make sure to only enable a transformation if it will be valid for the data. For example, don't swap red and blue on grayscale data. The colors used for the background and transparency values should be supplied in the same format/depth as the current image data. They are stored in the same format/depth as the image data in a bKGD or tRNS chunk, so this is what libpng expects for this data. The colors are transformed to keep in sync with the image data when an application calls the png_read_update_info() routine (see below). Data will be decoded into the supplied row buffers packed into bytes unless the library has been told to transform it into another format. For example, 4 bit/pixel paletted or grayscale data will be returned 2 pixels/byte with the leftmost pixel in the high-order bits of the byte, unless png_set_packing() is called. 8-bit RGB data will be stored in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha() is called to insert filler bytes, either before or after each RGB triplet. 16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant byte of the color value first, unless png_set_strip_16() is called to transform it to regular RGB RGB triplets, or png_set_filler|add alpha() is called to insert filler bytes, either before or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can be modified with png_set_filler(), png_set_add_alpha(), or png_set_strip_16(). The following code transforms grayscale images of less than 8 to 8 bits, changes paletted images to RGB, and adds a full alpha channel if there is transparency information in a tRNS chunk. This is most useful on grayscale images with bit depths of 2 or 4 or if there is a multiple-image viewing application that wishes to treat all images in the same way. if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr); if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); These three functions are actually aliases for png_set_expand(), added in libpng version 1.0.4, with the function names expanded to improve code readability. In some future version they may actually do different things. PNG can have files with 16 bits per channel. If you only can handle 8 bits per channel, this will strip the pixels down to 8 bit. if (bit_depth == 16) png_set_strip_16(png_ptr); If, for some reason, you don't need the alpha channel on an image, and you want to remove it rather than combining it with the background (but the image author certainly had in mind that you *would* combine it with the background, so that's what you should probably do): if (color_type & PNG_COLOR_MASK_ALPHA) png_set_strip_alpha(png_ptr); In PNG files, the alpha channel in an image is the level of opacity. If you need the alpha channel in an image to be the level of transparency instead of opacity, you can invert the alpha channel (or the tRNS chunk data) after it's read, so that 0 is fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit images) is fully transparent, with png_set_invert_alpha(png_ptr); PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as they can, resulting in, for example, 8 pixels per byte for 1 bit files. This code expands to 1 pixel per byte without changing the values of the pixels: if (bit_depth < 8) png_set_packing(png_ptr); PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels stored in a PNG image have been "scaled" or "shifted" up to the next higher possible bit depth (e.g. from 5 bits/sample in the range [0,31] to 8 bits/sample in the range [0, 255]). However, it is also possible to convert the PNG pixel data back to the original bit depth of the image. This call reduces the pixels back down to the original bit depth: png_color_8p sig_bit; if (png_get_sBIT(png_ptr, info_ptr, &sig_bit)) png_set_shift(png_ptr, sig_bit); PNG files store 3-color pixels in red, green, blue order. This code changes the storage of the pixels to blue, green, red: if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_bgr(png_ptr); PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them into 4 or 8 bytes for windowing systems that need them in this format: if (color_type == PNG_COLOR_TYPE_RGB) png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE); where "filler" is the 8 or 16-bit number to fill with, and the location is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether you want the filler before the RGB or after. This transformation does not affect images that already have full alpha channels. To add an opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which will generate RGBA pixels. Note that png_set_filler() does not change the color type. If you want to do that, you can add a true alpha channel with if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_GRAY) png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER); where "filler" contains the alpha value to assign to each pixel. This function became available in libpng-1.2.7. If you are reading an image with an alpha channel, and you need the data as ARGB instead of the normal PNG format RGBA: if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_swap_alpha(png_ptr); For some uses, you may want a grayscale image to be represented as RGB. This code will do that conversion: if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png_ptr); Conversely, you can convert an RGB or RGBA image to grayscale or grayscale with alpha. if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_rgb_to_gray_fixed(png_ptr, error_action, int red_weight, int green_weight); error_action = 1: silently do the conversion error_action = 2: issue a warning if the original image has any pixel where red != green or red != blue error_action = 3: issue an error and abort the conversion if the original image has any pixel where red != green or red != blue red_weight: weight of red component times 100000 green_weight: weight of green component times 100000 If either weight is negative, default weights (21268, 71514) are used. If you have set error_action = 1 or 2, you can later check whether the image really was gray, after processing the image rows, with the png_get_rgb_to_gray_status(png_ptr) function. It will return a png_byte that is zero if the image was gray or 1 if there were any non-gray pixels. bKGD and sBIT data will be silently converted to grayscale, using the green channel data, regardless of the error_action setting. With red_weight+green_weight<=100000, the normalized graylevel is computed: int rw = red_weight * 65536; int gw = green_weight * 65536; int bw = 65536 - (rw + gw); gray = (rw*red + gw*green + bw*blue)/65536; The default values approximate those recommended in the Charles Poynton's Color FAQ, Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net Y = 0.212671 * R + 0.715160 * G + 0.072169 * B Libpng approximates this with Y = 0.21268 * R + 0.7151 * G + 0.07217 * B which can be expressed with integers as Y = (6969 * R + 23434 * G + 2365 * B)/32768 The calculation is done in a linear colorspace, if the image gamma is known. If you have a grayscale and you are using png_set_expand_depth(), png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to a higher bit-depth, you must either supply the background color as a gray value at the original file bit-depth (need_expand = 1) or else supply the background color as an RGB triplet at the final, expanded bit depth (need_expand = 0). Similarly, if you are reading a paletted image, you must either supply the background color as a palette index (need_expand = 1) or as an RGB triplet that may or may not be in the palette (need_expand = 0). png_color_16 my_background; png_color_16p image_background; if (png_get_bKGD(png_ptr, info_ptr, &image_background)) png_set_background(png_ptr, image_background, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); else png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); The png_set_background() function tells libpng to composite images with alpha or simple transparency against the supplied background color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid), you may use this color, or supply another color more suitable for the current display (e.g., the background color from a web page). You need to tell libpng whether the color is in the gamma space of the display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file (PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't know why anyone would use this, but it's here). To properly display PNG images on any kind of system, the application needs to know what the display gamma is. Ideally, the user will know this, and the application will allow them to set it. One method of allowing the user to set the display gamma separately for each system is to check for a SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be correctly set. Note that display_gamma is the overall gamma correction required to produce pleasing results, which depends on the lighting conditions in the surrounding environment. In a dim or brightly lit room, no compensation other than the physical gamma exponent of the monitor is needed, while in a dark room a slightly smaller exponent is better. double gamma, screen_gamma; if (/* We have a user-defined screen gamma value */) { screen_gamma = user_defined_screen_gamma; } /* One way that applications can share the same screen gamma value */ else if ((gamma_str = getenv("SCREEN_GAMMA")) != NULL) { screen_gamma = (double)atof(gamma_str); } /* If we don't have another value */ else { screen_gamma = 2.2; /* A good guess for a PC monitor in a bright office or a dim room */ screen_gamma = 2.0; /* A good guess for a PC monitor in a dark room */ screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */ } The png_set_gamma() function handles gamma transformations of the data. Pass both the file gamma and the current screen_gamma. If the file does not have a gamma value, you can pass one anyway if you have an idea what it is (usually 0.45455 is a good guess for GIF images on PCs). Note that file gammas are inverted from screen gammas. See the discussions on gamma in the PNG specification for an excellent description of what gamma is, and why all applications should support it. It is strongly recommended that PNG viewers support gamma correction. if (png_get_gAMA(png_ptr, info_ptr, &gamma)) png_set_gamma(png_ptr, screen_gamma, gamma); else png_set_gamma(png_ptr, screen_gamma, 0.45455); If you need to reduce an RGB file to a paletted file, or if a paletted file has more entries then will fit on your screen, png_set_dither() will do that. Note that this is a simple match dither that merely finds the closest color available. This should work fairly well with optimized palettes, and fairly badly with linear color cubes. If you pass a palette that is larger then maximum_colors, the file will reduce the number of colors in the palette so it will fit into maximum_colors. If there is a histogram, it will use it to make more intelligent choices when reducing the palette. If there is no histogram, it may not do as good a job. if (color_type & PNG_COLOR_MASK_COLOR) { if (png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE)) { png_uint_16p histogram = NULL; png_get_hIST(png_ptr, info_ptr, &histogram); png_set_dither(png_ptr, palette, num_palette, max_screen_colors, histogram, 1); } else { png_color std_color_cube[MAX_SCREEN_COLORS] = { ... colors ... }; png_set_dither(png_ptr, std_color_cube, MAX_SCREEN_COLORS, MAX_SCREEN_COLORS, NULL,0); } } PNG files describe monochrome as black being zero and white being one. The following code will reverse this (make black be one and white be zero): if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY) png_set_invert_mono(png_ptr); This function can also be used to invert grayscale and gray-alpha images: if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_invert_mono(png_ptr); PNG files store 16 bit pixels in network byte order (big-endian, ie. most significant bits first). This code changes the storage to the other way (little-endian, i.e. least significant bits first, the way PCs store them): if (bit_depth == 16) png_set_swap(png_ptr); If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you need to change the order the pixels are packed into bytes, you can use: if (bit_depth < 8) png_set_packswap(png_ptr); Finally, you can write your own transformation function if none of the existing ones meets your needs. This is done by setting a callback with png_set_read_user_transform_fn(png_ptr, read_transform_fn); You must supply the function void read_transform_fn(png_ptr ptr, row_info_ptr row_info, png_bytep data) See pngtest.c for a working example. Your function will be called after all of the other transformations have been processed. You can also set up a pointer to a user structure for use by your callback function, and you can inform libpng that your transform function will change the number of channels or bit depth with the function png_set_user_transform_info(png_ptr, user_ptr, user_depth, user_channels); The user's application, not libpng, is responsible for allocating and freeing any memory required for the user structure. You can retrieve the pointer via the function png_get_user_transform_ptr(). For example: voidp read_user_transform_ptr = png_get_user_transform_ptr(png_ptr); The last thing to handle is interlacing; this is covered in detail below, but you must call the function here if you want libpng to handle expansion of the interlaced image. number_of_passes = png_set_interlace_handling(png_ptr); After setting the transformations, libpng can update your png_info structure to reflect any transformations you've requested with this call. This is most useful to update the info structure's rowbytes field so you can use it to allocate your image memory. This function will also update your palette with the correct screen_gamma and background if these have been given with the calls above. png_read_update_info(png_ptr, info_ptr); After you call png_read_update_info(), you can allocate any memory you need to hold the image. The row data is simply raw byte data for all forms of images. As the actual allocation varies among applications, no example will be given. If you are allocating one large chunk, you will need to build an array of pointers to each row, as it will be needed for some of the functions below. Reading image data After you've allocated memory, you can read the image data. The simplest way to do this is in one function call. If you are allocating enough memory to hold the whole image, you can just call png_read_image() and libpng will read in all the image data and put it in the memory area supplied. You will need to pass in an array of pointers to each row. This function automatically handles interlacing, so you don't need to call png_set_interlace_handling() or call this function multiple times, or any of that other stuff necessary with png_read_rows(). png_read_image(png_ptr, row_pointers); where row_pointers is: png_bytep row_pointers[height]; You can point to void or char or whatever you use for pixels. If you don't want to read in the whole image at once, you can use png_read_rows() instead. If there is no interlacing (check interlace_type == PNG_INTERLACE_NONE), this is simple: png_read_rows(png_ptr, row_pointers, NULL, number_of_rows); where row_pointers is the same as in the png_read_image() call. If you are doing this just one row at a time, you can do this with a single row_pointer instead of an array of row_pointers: png_bytep row_pointer = row; png_read_row(png_ptr, row_pointer, NULL); If the file is interlaced (interlace_type != 0 in the IHDR chunk), things get somewhat harder. The only current (PNG Specification version 1.2) interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7) is a somewhat complicated 2D interlace scheme, known as Adam7, that breaks down an image into seven smaller images of varying size, based on an 8x8 grid. libpng can fill out those images or it can give them to you "as is". If you want them filled out, there are two ways to do that. The one mentioned in the PNG specification is to expand each pixel to cover those pixels that have not been read yet (the "rectangle" method). This results in a blocky image for the first pass, which gradually smooths out as more pixels are read. The other method is the "sparkle" method, where pixels are drawn only in their final locations, with the rest of the image remaining whatever colors they were initialized to before the start of the read. The first method usually looks better, but tends to be slower, as there are more pixels to put in the rows. If you don't want libpng to handle the interlacing details, just call png_read_rows() seven times to read in all seven images. Each of the images is a valid image by itself, or they can all be combined on an 8x8 grid to form a single image (although if you intend to combine them you would be far better off using the libpng interlace handling). The first pass will return an image 1/8 as wide as the entire image (every 8th column starting in column 0) and 1/8 as high as the original (every 8th row starting in row 0), the second will be 1/8 as wide (starting in column 4) and 1/8 as high (also starting in row 0). The third pass will be 1/4 as wide (every 4th pixel starting in column 0) and 1/8 as high (every 8th row starting in row 4), and the fourth pass will be 1/4 as wide and 1/4 as high (every 4th column starting in column 2, and every 4th row starting in row 0). The fifth pass will return an image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2), while the sixth pass will be 1/2 as wide and 1/2 as high as the original (starting in column 1 and row 0). The seventh and final pass will be as wide as the original, and 1/2 as high, containing all of the odd numbered scanlines. Phew! If you want libpng to expand the images, call this before calling png_start_read_image() or png_read_update_info(): if (interlace_type == PNG_INTERLACE_ADAM7) number_of_passes = png_set_interlace_handling(png_ptr); This will return the number of passes needed. Currently, this is seven, but may change if another interlace type is added. This function can be called even if the file is not interlaced, where it will return one pass. If you are not going to display the image after each pass, but are going to wait until the entire image is read in, use the sparkle effect. This effect is faster and the end result of either method is exactly the same. If you are planning on displaying the image after each pass, the "rectangle" effect is generally considered the better looking one. If you only want the "sparkle" effect, just call png_read_rows() as normal, with the third parameter NULL. Make sure you make pass over the image number_of_passes times, and you don't change the data in the rows between calls. You can change the locations of the data, just not the data. Each pass only writes the pixels appropriate for that pass, and assumes the data from previous passes is still valid. png_read_rows(png_ptr, row_pointers, NULL, number_of_rows); If you only want the first effect (the rectangles), do the same as before except pass the row buffer in the third parameter, and leave the second parameter NULL. png_read_rows(png_ptr, NULL, row_pointers, number_of_rows); Finishing a sequential read After you are finished reading the image through either the high- or low-level interfaces, you can finish reading the file. If you are interested in comments or time, which may be stored either before or after the image data, you should pass the separate png_info struct if you want to keep the comments from before and after the image separate. If you are not interested, you can pass NULL. png_read_end(png_ptr, end_info); When you are done, you can free all memory allocated by libpng like this: png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); It is also possible to individually free the info_ptr members that point to libpng-allocated storage with the following function: png_free_data(png_ptr, info_ptr, mask, seq) mask - identifies data to be freed, a mask containing the logical OR of one or more of PNG_FREE_PLTE, PNG_FREE_TRNS, PNG_FREE_HIST, PNG_FREE_ICCP, PNG_FREE_PCAL, PNG_FREE_ROWS, PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_TEXT, PNG_FREE_UNKN, or simply PNG_FREE_ALL seq - sequence number of item to be freed (-1 for all items) This function may be safely called when the relevant storage has already been freed, or has not yet been allocated, or was allocated by the user and not by libpng, and will in those cases do nothing. The "seq" parameter is ignored if only one item of the selected data type, such as PLTE, is allowed. If "seq" is not -1, and multiple items are allowed for the data type identified in the mask, such as text or sPLT, only the n'th item in the structure is freed, where n is "seq". The default behavior is only to free data that was allocated internally by libpng. This can be changed, so that libpng will not free the data, or so that it will free data that was allocated by the user with png_malloc() or png_zalloc() and passed in via a png_set_*() function, with png_data_freer(png_ptr, info_ptr, freer, mask) mask - which data elements are affected same choices as in png_free_data() freer - one of PNG_DESTROY_WILL_FREE_DATA PNG_SET_WILL_FREE_DATA PNG_USER_WILL_FREE_DATA This function only affects data that has already been allocated. You can call this function after reading the PNG data but before calling any png_set_*() functions, to control whether the user or the png_set_*() function is responsible for freeing any existing data that might be present, and again after the png_set_*() functions to control whether the user or png_destroy_*() is supposed to free the data. When the user assumes responsibility for libpng-allocated data, the application must use png_free() to free it, and when the user transfers responsibility to libpng for data that the user has allocated, the user must have used png_malloc() or png_zalloc() to allocate it. If you allocated your row_pointers in a single block, as suggested above in the description of the high level read interface, you must not transfer responsibility for freeing it to the png_set_rows or png_read_destroy function, because they would also try to free the individual row_pointers[i]. If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword separately, do not transfer responsibility for freeing text_ptr to libpng, because when libpng fills a png_text structure it combines these members with the key member, and png_free_data() will free only text_ptr.key. Similarly, if you transfer responsibility for free'ing text_ptr from libpng to your application, your application must not separately free those members. The png_free_data() function will turn off the "valid" flag for anything it frees. If you need to turn the flag off for a chunk that was freed by your application instead of by libpng, you can use png_set_invalid(png_ptr, info_ptr, mask); mask - identifies the chunks to be made invalid, containing the logical OR of one or more of PNG_INFO_gAMA, PNG_INFO_sBIT, PNG_INFO_cHRM, PNG_INFO_PLTE, PNG_INFO_tRNS, PNG_INFO_bKGD, PNG_INFO_hIST, PNG_INFO_pHYs, PNG_INFO_oFFs, PNG_INFO_tIME, PNG_INFO_pCAL, PNG_INFO_sRGB, PNG_INFO_iCCP, PNG_INFO_sPLT, PNG_INFO_sCAL, PNG_INFO_IDAT For a more compact example of reading a PNG image, see the file example.c. Reading PNG files progressively The progressive reader is slightly different then the non-progressive reader. Instead of calling png_read_info(), png_read_rows(), and png_read_end(), you make one call to png_process_data(), which calls callbacks when it has the info, a row, or the end of the image. You set up these callbacks with png_set_progressive_read_fn(). You don't have to worry about the input/output functions of libpng, as you are giving the library the data directly in png_process_data(). I will assume that you have read the section on reading PNG files above, so I will only highlight the differences (although I will show all of the code). png_structp png_ptr; png_infop info_ptr; /* An example code fragment of how you would initialize the progressive reader in your application. */ int initialize_png_reader() { png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn); if (!png_ptr) return (ERROR); info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (ERROR); } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (ERROR); } /* This one's new. You can provide functions to be called when the header info is valid, when each row is completed, and when the image is finished. If you aren't using all functions, you can specify NULL parameters. Even when all three functions are NULL, you need to call png_set_progressive_read_fn(). You can use any struct as the user_ptr (cast to a void pointer for the function call), and retrieve the pointer from inside the callbacks using the function png_get_progressive_ptr(png_ptr); which will return a void pointer, which you have to cast appropriately. */ png_set_progressive_read_fn(png_ptr, (void *)user_ptr, info_callback, row_callback, end_callback); return 0; } /* A code fragment that you call as you receive blocks of data */ int process_data(png_bytep buffer, png_uint_32 length) { if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (ERROR); } /* This one's new also. Simply give it a chunk of data from the file stream (in order, of course). On machines with segmented memory models machines, don't give it any more than 64K. The library seems to run fine with sizes of 4K. Although you can give it much less if necessary (I assume you can give it chunks of 1 byte, I haven't tried less then 256 bytes yet). When this function returns, you may want to display any rows that were generated in the row callback if you don't already do so there. */ png_process_data(png_ptr, info_ptr, buffer, length); return 0; } /* This function is called (as set by png_set_progressive_read_fn() above) when enough data has been supplied so all of the header has been read. */ void info_callback(png_structp png_ptr, png_infop info) { /* Do any setup here, including setting any of the transformations mentioned in the Reading PNG files section. For now, you _must_ call either png_start_read_image() or png_read_update_info() after all the transformations are set (even if you don't set any). You may start getting rows before png_process_data() returns, so this is your last chance to prepare for that. */ } /* This function is called when each row of image data is complete */ void row_callback(png_structp png_ptr, png_bytep new_row, png_uint_32 row_num, int pass) { /* If the image is interlaced, and you turned on the interlace handler, this function will be called for every row in every pass. Some of these rows will not be changed from the previous pass. When the row is not changed, the new_row variable will be NULL. The rows and passes are called in order, so you don't really need the row_num and pass, but I'm supplying them because it may make your life easier. For the non-NULL rows of interlaced images, you must call png_progressive_combine_row() passing in the row and the old row. You can call this function for NULL rows (it will just return) and for non-interlaced images (it just does the memcpy for you) if it will make the code easier. Thus, you can just do this for all cases: */ png_progressive_combine_row(png_ptr, old_row, new_row); /* where old_row is what was displayed for previously for the row. Note that the first pass (pass == 0, really) will completely cover the old row, so the rows do not have to be initialized. After the first pass (and only for interlaced images), you will have to pass the current row, and the function will combine the old row and the new row. */ } void end_callback(png_structp png_ptr, png_infop info) { /* This function is called after the whole image has been read, including any chunks after the image (up to and including the IEND). You will usually have the same info chunk as you had in the header, although some data may have been added to the comments and time fields. Most people won't do much here, perhaps setting a flag that marks the image as finished. */ } IV. Writing Much of this is very similar to reading. However, everything of importance is repeated here, so you won't have to constantly look back up in the reading section to understand writing. Setup You will want to do the I/O initialization before you get into libpng, so if it doesn't work, you don't have anything to undo. If you are not using the standard I/O functions, you will need to replace them with custom writing functions. See the discussion under Customizing libpng. FILE *fp = fopen(file_name, "wb"); if (!fp) { return (ERROR); } Next, png_struct and png_info need to be allocated and initialized. As these can be both relatively large, you may not want to store these on the stack, unless you have stack space to spare. Of course, you will want to check if they return NULL. If you are also reading, you won't want to name your read structure and your write structure both "png_ptr"; you can call them anything you like, such as "read_ptr" and "write_ptr". Look at pngtest.c, for example. png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn); if (!png_ptr) return (ERROR); png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); return (ERROR); } If you want to use your own memory allocation routines, define PNG_USER_MEM_SUPPORTED and use png_create_write_struct_2() instead of png_create_write_struct(): png_structp png_ptr = png_create_write_struct_2 (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn, (png_voidp) user_mem_ptr, user_malloc_fn, user_free_fn); After you have these structures, you will need to set up the error handling. When libpng encounters an error, it expects to longjmp() back to your routine. Therefore, you will need to call setjmp() and pass the png_jmpbuf(png_ptr). If you write the file from different routines, you will need to update the png_jmpbuf(png_ptr) every time you enter a new routine that will call a png_*() function. See your documentation of setjmp/longjmp for your compiler for more information on setjmp/longjmp. See the discussion on libpng error handling in the Customizing Libpng section below for more information on the libpng error handling. if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp); return (ERROR); } ... return; If you would rather avoid the complexity of setjmp/longjmp issues, you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case errors will result in a call to PNG_ABORT() which defaults to abort(). Now you need to set up the output code. The default for libpng is to use the C function fwrite(). If you use this, you will need to pass a valid FILE * in the function png_init_io(). Be sure that the file is opened in binary mode. Again, if you wish to handle writing data in another way, see the discussion on libpng I/O handling in the Customizing Libpng section below. png_init_io(png_ptr, fp); Write callbacks At this point, you can set up a callback function that will be called after each row has been written, which you can use to control a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void write_row_callback(png_ptr, png_uint_32 row, int pass); { /* put your code here */ } (You can give it another name that you like instead of "write_row_callback") To inform libpng about your function, use png_set_write_status_fn(png_ptr, write_row_callback); You now have the option of modifying how the compression library will run. The following functions are mainly for testing, but may be useful in some cases, like if you need to write PNG files extremely fast and are willing to give up some compression, or if you want to get the maximum possible compression at the expense of slower writing. If you have no special needs in this area, let the library do what it wants by not calling this function at all, as it has been tuned to deliver a good speed/compression ratio. The second parameter to png_set_filter() is the filter method, for which the only valid values are 0 (as of the July 1999 PNG specification, version 1.2) or 64 (if you are writing a PNG datastream that is to be embedded in a MNG datastream). The third parameter is a flag that indicates which filter type(s) are to be tested for each scanline. See the PNG specification for details on the specific filter types. /* turn on or off filtering, and/or choose specific filters. You can use either a single PNG_FILTER_VALUE_NAME or the logical OR of one or more PNG_FILTER_NAME masks. */ png_set_filter(png_ptr, 0, PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE | PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB | PNG_FILTER_UP | PNG_FILTER_VALUE_UP | PNG_FILTER_AVE | PNG_FILTER_VALUE_AVE | PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH| PNG_ALL_FILTERS); If an application wants to start and stop using particular filters during compression, it should start out with all of the filters (to ensure that the previous row of pixels will be stored in case it's needed later), and then add and remove them after the start of compression. If you are writing a PNG datastream that is to be embedded in a MNG datastream, the second parameter can be either 0 or 64. The png_set_compression_*() functions interface to the zlib compression library, and should mostly be ignored unless you really know what you are doing. The only generally useful call is png_set_compression_level() which changes how much time zlib spends on trying to compress the image data. See the Compression Library (zlib.h and algorithm.txt, distributed with zlib) for details on the compression levels. /* set the zlib compression level */ png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); /* set other zlib parameters */ png_set_compression_mem_level(png_ptr, 8); png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY); png_set_compression_window_bits(png_ptr, 15); png_set_compression_method(png_ptr, 8); png_set_compression_buffer_size(png_ptr, 8192) extern PNG_EXPORT(void,png_set_zbuf_size) Setting the contents of info for output You now need to fill in the png_info structure with all the data you wish to write before the actual image. Note that the only thing you are allowed to write after the image is the text chunks and the time chunk (as of PNG Specification 1.2, anyway). See png_write_end() and the latest PNG specification for more information on that. If you wish to write them before the image, fill them in now, and flag that data as being valid. If you want to wait until after the data, don't fill them until png_write_end(). For all the fields in png_info and their data types, see png.h. For explanations of what the fields contain, see the PNG specification. Some of the more important parts of the png_info are: png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_method) width - holds the width of the image in pixels (up to 2^31). height - holds the height of the image in pixels (up to 2^31). bit_depth - holds the bit depth of one of the image channels. (valid values are 1, 2, 4, 8, 16 and depend also on the color_type. See also significant bits (sBIT) below). color_type - describes which color/alpha channels are present. PNG_COLOR_TYPE_GRAY (bit depths 1, 2, 4, 8, 16) PNG_COLOR_TYPE_GRAY_ALPHA (bit depths 8, 16) PNG_COLOR_TYPE_PALETTE (bit depths 1, 2, 4, 8) PNG_COLOR_TYPE_RGB (bit_depths 8, 16) PNG_COLOR_TYPE_RGB_ALPHA (bit_depths 8, 16) PNG_COLOR_MASK_PALETTE PNG_COLOR_MASK_COLOR PNG_COLOR_MASK_ALPHA interlace_type - PNG_INTERLACE_NONE or PNG_INTERLACE_ADAM7 compression_type - (must be PNG_COMPRESSION_TYPE_DEFAULT) filter_method - (must be PNG_FILTER_TYPE_DEFAULT or, if you are writing a PNG to be embedded in a MNG datastream, can also be PNG_INTRAPIXEL_DIFFERENCING) png_set_PLTE(png_ptr, info_ptr, palette, num_palette); palette - the palette for the file (array of png_color) num_palette - number of entries in the palette png_set_gAMA(png_ptr, info_ptr, gamma); gamma - the gamma the image was created at (PNG_INFO_gAMA) png_set_sRGB(png_ptr, info_ptr, srgb_intent); srgb_intent - the rendering intent (PNG_INFO_sRGB) The presence of the sRGB chunk means that the pixel data is in the sRGB color space. This chunk also implies specific values of gAMA and cHRM. Rendering intent is the CSS-1 property that has been defined by the International Color Consortium (http://www.color.org). It can be one of PNG_sRGB_INTENT_SATURATION, PNG_sRGB_INTENT_PERCEPTUAL, PNG_sRGB_INTENT_ABSOLUTE, or PNG_sRGB_INTENT_RELATIVE. png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, srgb_intent); srgb_intent - the rendering intent (PNG_INFO_sRGB) The presence of the sRGB chunk means that the pixel data is in the sRGB color space. This function also causes gAMA and cHRM chunks with the specific values that are consistent with sRGB to be written. png_set_iCCP(png_ptr, info_ptr, name, compression_type, profile, proflen); name - The profile name. compression - The compression type; always PNG_COMPRESSION_TYPE_BASE for PNG 1.0. You may give NULL to this argument to ignore it. profile - International Color Consortium color profile data. May contain NULs. proflen - length of profile data in bytes. png_set_sBIT(png_ptr, info_ptr, sig_bit); sig_bit - the number of significant bits for (PNG_INFO_sBIT) each of the gray, red, green, and blue channels, whichever are appropriate for the given color type (png_color_16) png_set_tRNS(png_ptr, info_ptr, trans, num_trans, trans_values); trans - array of transparent entries for palette (PNG_INFO_tRNS) trans_values - graylevel or color sample values of the single transparent color for non-paletted images (PNG_INFO_tRNS) num_trans - number of transparent entries (PNG_INFO_tRNS) png_set_hIST(png_ptr, info_ptr, hist); (PNG_INFO_hIST) hist - histogram of palette (array of png_uint_16) png_set_tIME(png_ptr, info_ptr, mod_time); mod_time - time image was last modified (PNG_VALID_tIME) png_set_bKGD(png_ptr, info_ptr, background); background - background color (PNG_VALID_bKGD) png_set_text(png_ptr, info_ptr, text_ptr, num_text); text_ptr - array of png_text holding image comments text_ptr[i].compression - type of compression used on "text" PNG_TEXT_COMPRESSION_NONE PNG_TEXT_COMPRESSION_zTXt PNG_ITXT_COMPRESSION_NONE PNG_ITXT_COMPRESSION_zTXt text_ptr[i].key - keyword for comment. Must contain 1-79 characters. text_ptr[i].text - text comments for current keyword. Can be NULL or empty. text_ptr[i].text_length - length of text string, after decompression, 0 for iTXt text_ptr[i].itxt_length - length of itxt string, after decompression, 0 for tEXt/zTXt text_ptr[i].lang - language of comment (NULL or empty for unknown). text_ptr[i].translated_keyword - keyword in UTF-8 (NULL or empty for unknown). num_text - number of comments png_set_sPLT(png_ptr, info_ptr, &palette_ptr, num_spalettes); palette_ptr - array of png_sPLT_struct structures to be added to the list of palettes in the info structure. num_spalettes - number of palette structures to be added. png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type); offset_x - positive offset from the left edge of the screen offset_y - positive offset from the top edge of the screen unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type); res_x - pixels/unit physical resolution in x direction res_y - pixels/unit physical resolution in y direction unit_type - PNG_RESOLUTION_UNKNOWN, PNG_RESOLUTION_METER png_set_sCAL(png_ptr, info_ptr, unit, width, height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are doubles) png_set_sCAL_s(png_ptr, info_ptr, unit, width, height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are strings like "2.54") png_set_unknown_chunks(png_ptr, info_ptr, &unknowns, num_unknowns) unknowns - array of png_unknown_chunk structures holding unknown chunks unknowns[i].name - name of unknown chunk unknowns[i].data - data of unknown chunk unknowns[i].size - size of unknown chunk's data unknowns[i].location - position to write chunk in file 0: do not write chunk PNG_HAVE_IHDR: before PLTE PNG_HAVE_PLTE: before IDAT PNG_AFTER_IDAT: after IDAT The "location" member is set automatically according to what part of the output file has already been written. You can change its value after calling png_set_unknown_chunks() as demonstrated in pngtest.c. Within each of the "locations", the chunks are sequenced according to their position in the structure (that is, the value of "i", which is the order in which the chunk was either read from the input file or defined with png_set_unknown_chunks). A quick word about text and num_text. text is an array of png_text structures. num_text is the number of valid structures in the array. Each png_text structure holds a language code, a keyword, a text value, and a compression type. The compression types have the same valid numbers as the compression types of the image data. Currently, the only valid number is zero. However, you can store text either compressed or uncompressed, unlike images, which always have to be compressed. So if you don't want the text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE. Because tEXt and zTXt chunks don't have a language field, if you specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt any language code or translated keyword will not be written out. Until text gets around 1000 bytes, it is not worth compressing it. After the text has been written out to the file, the compression type is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR, so that it isn't written out again at the end (in case you are calling png_write_end() with the same struct. The keywords that are given in the PNG Specification are: Title Short (one line) title or caption for image Author Name of image's creator Description Description of image (possibly long) Copyright Copyright notice Creation Time Time of original image creation (usually RFC 1123 format, see below) Software Software used to create the image Disclaimer Legal disclaimer Warning Warning of nature of content Source Device used to create the image Comment Miscellaneous comment; conversion from other image format The keyword-text pairs work like this. Keywords should be short simple descriptions of what the comment is about. Some typical keywords are found in the PNG specification, as is some recommendations on keywords. You can repeat keywords in a file. You can even write some text before the image and some after. For example, you may want to put a description of the image before the image, but leave the disclaimer until after, so viewers working over modem connections don't have to wait for the disclaimer to go over the modem before they start seeing the image. Finally, keywords should be full words, not abbreviations. Keywords and text are in the ISO 8859-1 (Latin-1) character set (a superset of regular ASCII) and can not contain NUL characters, and should not contain control or other unprintable characters. To make the comments widely readable, stick with basic ASCII, and avoid machine specific character set extensions like the IBM-PC character set. The keyword must be present, but you can leave off the text string on non-compressed pairs. Compressed pairs must have a text string, as only the text string is compressed anyway, so the compression would be meaningless. PNG supports modification time via the png_time structure. Two conversion routines are provided, png_convert_from_time_t() for time_t and png_convert_from_struct_tm() for struct tm. The time_t routine uses gmtime(). You don't have to use either of these, but if you wish to fill in the png_time structure directly, you should provide the time in universal time (GMT) if possible instead of your local time. Note that the year number is the full year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and that months start with 1. If you want to store the time of the original image creation, you should use a plain tEXt chunk with the "Creation Time" keyword. This is necessary because the "creation time" of a PNG image is somewhat vague, depending on whether you mean the PNG file, the time the image was created in a non-PNG format, a still photo from which the image was scanned, or possibly the subject matter itself. In order to facilitate machine-readable dates, it is recommended that the "Creation Time" tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"), although this isn't a requirement. Unlike the tIME chunk, the "Creation Time" tEXt chunk is not expected to be automatically changed by the software. To facilitate the use of RFC 1123 dates, a function png_convert_to_rfc1123(png_timep) is provided to convert from PNG time to an RFC 1123 format string. Writing unknown chunks You can use the png_set_unknown_chunks function to queue up chunks for writing. You give it a chunk name, raw data, and a size; that's all there is to it. The chunks will be written by the next following png_write_info_before_PLTE, png_write_info, or png_write_end function. Any chunks previously read into the info structure's unknown-chunk list will also be written out in a sequence that satisfies the PNG specification's ordering rules. The high-level write interface At this point there are two ways to proceed; through the high-level write interface, or through a sequence of low-level write operations. You can use the high-level interface if your image data is present in the info structure. All defined output transformations are permitted, enabled by the following masks. PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes. If you have valid image data in the info structure (you can use png_set_rows() to put image data in the info structure), simply do this: png_write_png(png_ptr, info_ptr, png_transforms, NULL) where png_transforms is an integer containing the logical OR of some set of transformation flags. This call is equivalent to png_write_info(), followed the set of transformations indicated by the transform mask, then png_write_image(), and finally png_write_end(). (The final parameter of this call is not yet used. Someday it might point to transformation parameters required by some future output transform.) You must use png_transforms and not call any png_set_transform() functions when you use png_write_png(). The low-level write interface If you are going the low-level route instead, you are now ready to write all the file information up to the actual image data. You do this with a call to png_write_info(). png_write_info(png_ptr, info_ptr); Note that there is one transformation you may need to do before png_write_info(). In PNG files, the alpha channel in an image is the level of opacity. If your data is supplied as a level of transparency, you can invert the alpha channel before you write it, so that 0 is fully transparent and 255 (in 8-bit or paletted images) or 65535 (in 16-bit images) is fully opaque, with png_set_invert_alpha(png_ptr); This must appear before png_write_info() instead of later with the other transformations because in the case of paletted images the tRNS chunk data has to be inverted before the tRNS chunk is written. If your image is not a paletted image, the tRNS data (which in such cases represents a single color to be rendered as transparent) won't need to be changed, and you can safely do this transformation after your png_write_info() call. If you need to write a private chunk that you want to appear before the PLTE chunk when PLTE is present, you can write the PNG info in two steps, and insert code to write your own chunk between them: png_write_info_before_PLTE(png_ptr, info_ptr); png_set_unknown_chunks(png_ptr, info_ptr, ...); png_write_info(png_ptr, info_ptr); After you've written the file information, you can set up the library to handle any special transformations of the image data. The various ways to transform the data will be described in the order that they should occur. This is important, as some of these change the color type and/or bit depth of the data, and some others only work on certain color types and bit depths. Even though each transformation checks to see if it has data that it can do something with, you should make sure to only enable a transformation if it will be valid for the data. For example, don't swap red and blue on grayscale data. PNG files store RGB pixels packed into 3 or 6 bytes. This code tells the library to strip input data that has 4 or 8 bytes per pixel down to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2 bytes per pixel). png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); where the 0 is unused, and the location is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel is stored XRGB or RGBX. PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as they can, resulting in, for example, 8 pixels per byte for 1 bit files. If the data is supplied at 1 pixel per byte, use this code, which will correctly pack the pixels into a single byte: png_set_packing(png_ptr); PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your data is of another bit depth, you can write an sBIT chunk into the file so that decoders can recover the original data if desired. /* Set the true bit depth of the image data */ if (color_type & PNG_COLOR_MASK_COLOR) { sig_bit.red = true_bit_depth; sig_bit.green = true_bit_depth; sig_bit.blue = true_bit_depth; } else { sig_bit.gray = true_bit_depth; } if (color_type & PNG_COLOR_MASK_ALPHA) { sig_bit.alpha = true_bit_depth; } png_set_sBIT(png_ptr, info_ptr, &sig_bit); If the data is stored in the row buffer in a bit depth other than one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG), this will scale the values to appear to be the correct bit depth as is required by PNG. png_set_shift(png_ptr, &sig_bit); PNG files store 16 bit pixels in network byte order (big-endian, ie. most significant bits first). This code would be used if they are supplied the other way (little-endian, i.e. least significant bits first, the way PCs store them): if (bit_depth > 8) png_set_swap(png_ptr); If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you need to change the order the pixels are packed into bytes, you can use: if (bit_depth < 8) png_set_packswap(png_ptr); PNG files store 3 color pixels in red, green, blue order. This code would be used if they are supplied as blue, green, red: png_set_bgr(png_ptr); PNG files describe monochrome as black being zero and white being one. This code would be used if the pixels are supplied with this reversed (black being one and white being zero): png_set_invert_mono(png_ptr); Finally, you can write your own transformation function if none of the existing ones meets your needs. This is done by setting a callback with png_set_write_user_transform_fn(png_ptr, write_transform_fn); You must supply the function void write_transform_fn(png_ptr ptr, row_info_ptr row_info, png_bytep data) See pngtest.c for a working example. Your function will be called before any of the other transformations are processed. You can also set up a pointer to a user structure for use by your callback function. png_set_user_transform_info(png_ptr, user_ptr, 0, 0); The user_channels and user_depth parameters of this function are ignored when writing; you can set them to zero as shown. You can retrieve the pointer via the function png_get_user_transform_ptr(). For example: voidp write_user_transform_ptr = png_get_user_transform_ptr(png_ptr); It is possible to have libpng flush any pending output, either manually, or automatically after a certain number of lines have been written. To flush the output stream a single time call: png_write_flush(png_ptr); and to have libpng flush the output stream periodically after a certain number of scanlines have been written, call: png_set_flush(png_ptr, nrows); Note that the distance between rows is from the last time png_write_flush() was called, or the first row of the image if it has never been called. So if you write 50 lines, and then png_set_flush 25, it will flush the output on the next scanline, and every 25 lines thereafter, unless png_write_flush() is called before 25 more lines have been written. If nrows is too small (less than about 10 lines for a 640 pixel wide RGB image) the image compression may decrease noticeably (although this may be acceptable for real-time applications). Infrequent flushing will only degrade the compression performance by a few percent over images that do not use flushing. Writing the image data That's it for the transformations. Now you can write the image data. The simplest way to do this is in one function call. If you have the whole image in memory, you can just call png_write_image() and libpng will write the image. You will need to pass in an array of pointers to each row. This function automatically handles interlacing, so you don't need to call png_set_interlace_handling() or call this function multiple times, or any of that other stuff necessary with png_write_rows(). png_write_image(png_ptr, row_pointers); where row_pointers is: png_byte *row_pointers[height]; You can point to void or char or whatever you use for pixels. If you don't want to write the whole image at once, you can use png_write_rows() instead. If the file is not interlaced, this is simple: png_write_rows(png_ptr, row_pointers, number_of_rows); row_pointers is the same as in the png_write_image() call. If you are just writing one row at a time, you can do this with a single row_pointer instead of an array of row_pointers: png_bytep row_pointer = row; png_write_row(png_ptr, row_pointer); When the file is interlaced, things can get a good deal more complicated. The only currently (as of the PNG Specification version 1.2, dated July 1999) defined interlacing scheme for PNG files is the "Adam7" interlace scheme, that breaks down an image into seven smaller images of varying size. libpng will build these images for you, or you can do them yourself. If you want to build them yourself, see the PNG specification for details of which pixels to write when. If you don't want libpng to handle the interlacing details, just use png_set_interlace_handling() and call png_write_rows() the correct number of times to write all seven sub-images. If you want libpng to build the sub-images, call this before you start writing any rows: number_of_passes = png_set_interlace_handling(png_ptr); This will return the number of passes needed. Currently, this is seven, but may change if another interlace type is added. Then write the complete image number_of_passes times. png_write_rows(png_ptr, row_pointers, number_of_rows); As some of these rows are not used, and thus return immediately, you may want to read about interlacing in the PNG specification, and only update the rows that are actually used. Finishing a sequential write After you are finished writing the image, you should finish writing the file. If you are interested in writing comments or time, you should pass an appropriately filled png_info pointer. If you are not interested, you can pass NULL. png_write_end(png_ptr, info_ptr); When you are done, you can free all memory used by libpng like this: png_destroy_write_struct(&png_ptr, &info_ptr); It is also possible to individually free the info_ptr members that point to libpng-allocated storage with the following function: png_free_data(png_ptr, info_ptr, mask, seq) mask - identifies data to be freed, a mask containing the logical OR of one or more of PNG_FREE_PLTE, PNG_FREE_TRNS, PNG_FREE_HIST, PNG_FREE_ICCP, PNG_FREE_PCAL, PNG_FREE_ROWS, PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_TEXT, PNG_FREE_UNKN, or simply PNG_FREE_ALL seq - sequence number of item to be freed (-1 for all items) This function may be safely called when the relevant storage has already been freed, or has not yet been allocated, or was allocated by the user and not by libpng, and will in those cases do nothing. The "seq" parameter is ignored if only one item of the selected data type, such as PLTE, is allowed. If "seq" is not -1, and multiple items are allowed for the data type identified in the mask, such as text or sPLT, only the n'th item in the structure is freed, where n is "seq". If you allocated data such as a palette that you passed in to libpng with png_set_*, you must not free it until just before the call to png_destroy_write_struct(). The default behavior is only to free data that was allocated internally by libpng. This can be changed, so that libpng will not free the data, or so that it will free data that was allocated by the user with png_malloc() or png_zalloc() and passed in via a png_set_*() function, with png_data_freer(png_ptr, info_ptr, freer, mask) mask - which data elements are affected same choices as in png_free_data() freer - one of PNG_DESTROY_WILL_FREE_DATA PNG_SET_WILL_FREE_DATA PNG_USER_WILL_FREE_DATA For example, to transfer responsibility for some data from a read structure to a write structure, you could use png_data_freer(read_ptr, read_info_ptr, PNG_USER_WILL_FREE_DATA, PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST) png_data_freer(write_ptr, write_info_ptr, PNG_DESTROY_WILL_FREE_DATA, PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST) thereby briefly reassigning responsibility for freeing to the user but immediately afterwards reassigning it once more to the write_destroy function. Having done this, it would then be safe to destroy the read structure and continue to use the PLTE, tRNS, and hIST data in the write structure. This function only affects data that has already been allocated. You can call this function before calling after the png_set_*() functions to control whether the user or png_destroy_*() is supposed to free the data. When the user assumes responsibility for libpng-allocated data, the application must use png_free() to free it, and when the user transfers responsibility to libpng for data that the user has allocated, the user must have used png_malloc() or png_zalloc() to allocate it. If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword separately, do not transfer responsibility for freeing text_ptr to libpng, because when libpng fills a png_text structure it combines these members with the key member, and png_free_data() will free only text_ptr.key. Similarly, if you transfer responsibility for free'ing text_ptr from libpng to your application, your application must not separately free those members. For a more compact example of writing a PNG image, see the file example.c. V. Modifying/Customizing libpng: There are three issues here. The first is changing how libpng does standard things like memory allocation, input/output, and error handling. The second deals with more complicated things like adding new chunks, adding new transformations, and generally changing how libpng works. Both of those are compile-time issues; that is, they are generally determined at the time the code is written, and there is rarely a need to provide the user with a means of changing them. The third is a run-time issue: choosing between and/or tuning one or more alternate versions of computationally intensive routines; specifically, optimized assembly-language (and therefore compiler- and platform-dependent) versions. Memory allocation, input/output, and error handling All of the memory allocation, input/output, and error handling in libpng goes through callbacks that are user-settable. The default routines are in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change these functions, call the appropriate png_set_*_fn() function. Memory allocation is done through the functions png_malloc() and png_free(). These currently just call the standard C functions. If your pointers can't access more then 64K at a time, you will want to set MAXSEG_64K in zlib.h. Since it is unlikely that the method of handling memory allocation on a platform will change between applications, these functions must be modified in the library at compile time. If you prefer to use a different method of allocating and freeing data, you can use png_create_read_struct_2() or png_create_write_struct_2() to register your own functions as described above. These functions also provide a void pointer that can be retrieved via mem_ptr=png_get_mem_ptr(png_ptr); Your replacement memory functions must have prototypes as follows: png_voidp malloc_fn(png_structp png_ptr, png_size_t size); void free_fn(png_structp png_ptr, png_voidp ptr); Your malloc_fn() must return NULL in case of failure. The png_malloc() function will normally call png_error() if it receives a NULL from the system memory allocator or from your replacement malloc_fn(). Input/Output in libpng is done through png_read() and png_write(), which currently just call fread() and fwrite(). The FILE * is stored in png_struct and is initialized via png_init_io(). If you wish to change the method of I/O, the library supplies callbacks that you can set through the function png_set_read_fn() and png_set_write_fn() at run time, instead of calling the png_init_io() function. These functions also provide a void pointer that can be retrieved via the function png_get_io_ptr(). For example: png_set_read_fn(png_structp read_ptr, voidp read_io_ptr, png_rw_ptr read_data_fn) png_set_write_fn(png_structp write_ptr, voidp write_io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn); voidp read_io_ptr = png_get_io_ptr(read_ptr); voidp write_io_ptr = png_get_io_ptr(write_ptr); The replacement I/O functions must have prototypes as follows: void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length); void user_write_data(png_structp png_ptr, png_bytep data, png_size_t length); void user_flush_data(png_structp png_ptr); Supplying NULL for the read, write, or flush functions sets them back to using the default C stream functions. It is an error to read from a write stream, and vice versa. Error handling in libpng is done through png_error() and png_warning(). Errors handled through png_error() are fatal, meaning that png_error() should never return to its caller. Currently, this is handled via setjmp() and longjmp() (unless you have compiled libpng with PNG_SETJMP_NOT_SUPPORTED, in which case it is handled via PNG_ABORT()), but you could change this to do things like exit() if you should wish. On non-fatal errors, png_warning() is called to print a warning message, and then control returns to the calling code. By default png_error() and png_warning() print a message on stderr via fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined (because you don't want the messages) or PNG_NO_STDIO defined (because fprintf() isn't available). If you wish to change the behavior of the error functions, you will need to set up your own message callbacks. These functions are normally supplied at the time that the png_struct is created. It is also possible to redirect errors and warnings to your own replacement functions after png_create_*_struct() has been called by calling: png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn); png_voidp error_ptr = png_get_error_ptr(png_ptr); If NULL is supplied for either error_fn or warning_fn, then the libpng default function will be used, calling fprintf() and/or longjmp() if a problem is encountered. The replacement error functions should have parameters as follows: void user_error_fn(png_structp png_ptr, png_const_charp error_msg); void user_warning_fn(png_structp png_ptr, png_const_charp warning_msg); The motivation behind using setjmp() and longjmp() is the C++ throw and catch exception handling methods. This makes the code much easier to write, as there is no need to check every return code of every function call. However, there are some uncertainties about the status of local variables after a longjmp, so the user may want to be careful about doing anything after setjmp returns non-zero besides returning itself. Consult your compiler documentation for more details. For an alternative approach, you may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net). Custom chunks If you need to read or write custom chunks, you may need to get deeper into the libpng code. The library now has mechanisms for storing and writing chunks of unknown type; you can even declare callbacks for custom chunks. Hoewver, this may not be good enough if the library code itself needs to know about interactions between your chunk and existing `intrinsic' chunks. If you need to write a new intrinsic chunk, first read the PNG specification. Acquire a first level of understanding of how it works. Pay particular attention to the sections that describe chunk names, and look at how other chunks were designed, so you can do things similarly. Second, check out the sections of libpng that read and write chunks. Try to find a chunk that is similar to yours and use it as a template. More details can be found in the comments inside the code. It is best to handle unknown chunks in a generic method, via callback functions, instead of by modifying libpng functions. If you wish to write your own transformation for the data, look through the part of the code that does the transformations, and check out some of the simpler ones to get an idea of how they work. Try to find a similar transformation to the one you want to add and copy off of it. More details can be found in the comments inside the code itself. Configuring for 16 bit platforms You will want to look into zconf.h to tell zlib (and thus libpng) that it cannot allocate more then 64K at a time. Even if you can, the memory won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K. Configuring for DOS For DOS users who only have access to the lower 640K, you will have to limit zlib's memory usage via a png_set_compression_mem_level() call. See zlib.h or zconf.h in the zlib library for more information. Configuring for Medium Model Libpng's support for medium model has been tested on most of the popular compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets defined, and FAR gets defined to far in pngconf.h, and you should be all set. Everything in the library (except for zlib's structure) is expecting far data. You must use the typedefs with the p or pp on the end for pointers (or at least look at them and be careful). Make note that the rows of data are defined as png_bytepp, which is an unsigned char far * far *. Configuring for gui/windowing platforms: You will need to write new error and warning functions that use the GUI interface, as described previously, and set them to be the error and warning functions at the time that png_create_*_struct() is called, in order to have them available during the structure initialization. They can be changed later via png_set_error_fn(). On some compilers, you may also have to change the memory allocators (png_malloc, etc.). Configuring for compiler xxx: All includes for libpng are in pngconf.h. If you need to add/change/delete an include, this is the place to do it. The includes that are not needed outside libpng are protected by the PNG_INTERNAL definition, which is only defined for those routines inside libpng itself. The files in libpng proper only include png.h, which includes pngconf.h. Configuring zlib: There are special functions to configure the compression. Perhaps the most useful one changes the compression level, which currently uses input compression values in the range 0 - 9. The library normally uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests have shown that for a large majority of images, compression values in the range 3-6 compress nearly as well as higher levels, and do so much faster. For online applications it may be desirable to have maximum speed (Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also specify no compression (Z_NO_COMPRESSION = 0), but this would create files larger than just storing the raw bitmap. You can specify the compression level by calling: png_set_compression_level(png_ptr, level); Another useful one is to reduce the memory level used by the library. The memory level defaults to 8, but it can be lowered if you are short on memory (running DOS, for example, where you only have 640K). Note that the memory level does have an effect on compression; among other things, lower levels will result in sections of incompressible data being emitted in smaller stored blocks, with a correspondingly larger relative overhead of up to 15% in the worst case. png_set_compression_mem_level(png_ptr, level); The other functions are for configuring zlib. They are not recommended for normal use and may result in writing an invalid PNG file. See zlib.h for more information on what these mean. png_set_compression_strategy(png_ptr, strategy); png_set_compression_window_bits(png_ptr, window_bits); png_set_compression_method(png_ptr, method); png_set_compression_buffer_size(png_ptr, size); Controlling row filtering If you want to control whether libpng uses filtering or not, which filters are used, and how it goes about picking row filters, you can call one of these functions. The selection and configuration of row filters can have a significant impact on the size and encoding speed and a somewhat lesser impact on the decoding speed of an image. Filtering is enabled by default for RGB and grayscale images (with and without alpha), but not for paletted images nor for any images with bit depths less than 8 bits/pixel. The 'method' parameter sets the main filtering method, which is currently only '0' in the PNG 1.2 specification. The 'filters' parameter sets which filter(s), if any, should be used for each scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS to turn filtering on and off, respectively. Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB, PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise ORed together with '|' to specify one or more filters to use. These filters are described in more detail in the PNG specification. If you intend to change the filter type during the course of writing the image, you should start with flags set for all of the filters you intend to use so that libpng can initialize its internal structures appropriately for all of the filter types. (Note that this means the first row must always be adaptively filtered, because libpng currently does not allocate the filter buffers until png_write_row() is called for the first time.) filters = PNG_FILTER_NONE | PNG_FILTER_SUB PNG_FILTER_UP | PNG_FILTER_AVE | PNG_FILTER_PAETH | PNG_ALL_FILTERS; png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, filters); The second parameter can also be PNG_INTRAPIXEL_DIFFERENCING if you are writing a PNG to be embedded in a MNG datastream. This parameter must be the same as the value of filter_method used in png_set_IHDR(). It is also possible to influence how libpng chooses from among the available filters. This is done in one or both of two ways - by telling it how important it is to keep the same filter for successive rows, and by telling it the relative computational costs of the filters. double weights[3] = {1.5, 1.3, 1.1}, costs[PNG_FILTER_VALUE_LAST] = {1.0, 1.3, 1.3, 1.5, 1.7}; png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_WEIGHTED, 3, weights, costs); The weights are multiplying factors that indicate to libpng that the row filter should be the same for successive rows unless another row filter is that many times better than the previous filter. In the above example, if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a "sum of absolute differences" 1.5 x 1.3 times higher than other filters and still be chosen, while the NONE filter could have a sum 1.1 times higher than other filters and still be chosen. Unspecified weights are taken to be 1.0, and the specified weights should probably be declining like those above in order to emphasize recent filters over older filters. The filter costs specify for each filter type a relative decoding cost to be considered when selecting row filters. This means that filters with higher costs are less likely to be chosen over filters with lower costs, unless their "sum of absolute differences" is that much smaller. The costs do not necessarily reflect the exact computational speeds of the various filters, since this would unduly influence the final image size. Note that the numbers above were invented purely for this example and are given only to help explain the function usage. Little testing has been done to find optimum values for either the costs or the weights. Removing unwanted object code There are a bunch of #define's in pngconf.h that control what parts of libpng are compiled. All the defines end in _SUPPORTED. If you are never going to use a capability, you can change the #define to #undef before recompiling libpng and save yourself code and data space, or you can turn off individual capabilities with defines that begin with PNG_NO_. You can also turn all of the transforms and ancillary chunk capabilities off en masse with compiler directives that define PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS, or all four, along with directives to turn on any of the capabilities that you do want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the extra transformations but still leave the library fully capable of reading and writing PNG files with all known public chunks Use of the PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library that is incapable of reading or writing ancillary chunks. If you are not using the progressive reading capability, you can turn that off with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING capability, which you'll still have). All the reading and writing specific code are in separate files, so the linker should only grab the files it needs. However, if you want to make sure, or if you are building a stand alone library, all the reading files start with pngr and all the writing files start with pngw. The files that don't match either (like png.c, pngtrans.c, etc.) are used for both reading and writing, and always need to be included. The progressive reader is in pngpread.c If you are creating or distributing a dynamically linked library (a .so or DLL file), you should not remove or disable any parts of the library, as this will cause applications linked with different versions of the library to fail if they call functions not available in your library. The size of the library itself should not be an issue, because only those sections that are actually used will be loaded into memory. Requesting debug printout The macro definition PNG_DEBUG can be used to request debugging printout. Set it to an integer value in the range 0 to 3. Higher numbers result in increasing amounts of debugging information. The information is printed to the "stderr" file, unless another file name is specified in the PNG_DEBUG_FILE macro definition. When PNG_DEBUG > 0, the following functions (macros) become available: png_debug(level, message) png_debug1(level, message, p1) png_debug2(level, message, p1, p2) in which "level" is compared to PNG_DEBUG to decide whether to print the message, "message" is the formatted string to be printed, and p1 and p2 are parameters that are to be embedded in the string according to printf-style formatting directives. For example, png_debug1(2, "foo=%d\n", foo); is expanded to if(PNG_DEBUG > 2) fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo); When PNG_DEBUG is defined but is zero, the macros aren't defined, but you can still use PNG_DEBUG to control your own debugging: #ifdef PNG_DEBUG fprintf(stderr, ... #endif When PNG_DEBUG = 1, the macros are defined, but only png_debug statements having level = 0 will be printed. There aren't any such statements in this version of libpng, but if you insert some they will be printed. VI. Runtime optimization A new feature in libpng 1.2.0 is the ability to dynamically switch between standard and optimized versions of some routines. Currently these are limited to three computationally intensive tasks when reading PNG files: decoding row filters, expanding interlacing, and combining interlaced or transparent row data with previous row data. Currently the optimized versions are available only for x86 (Intel, AMD, etc.) platforms with MMX support, though this may change in future versions. (For example, the non-MMX assembler optimizations for zlib might become similarly runtime-selectable in future releases, in which case libpng could be extended to support them. Alternatively, the compile-time choice of floating-point versus integer routines for gamma correction might become runtime-selectable.) Because such optimizations tend to be very platform- and compiler-dependent, both in how they are written and in how they perform, the new runtime code in libpng has been written to allow programs to query, enable, and disable either specific optimizations or all such optimizations. For example, to enable all possible optimizations (bearing in mind that some "optimizations" may actually run more slowly in rare cases): #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) png_uint_32 mask, flags; flags = png_get_asm_flags(png_ptr); mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE); png_set_asm_flags(png_ptr, flags | mask); #endif To enable only optimizations relevant to reading PNGs, use PNG_SELECT_READ by itself when calling png_get_asm_flagmask(); similarly for optimizing only writing. To disable all optimizations: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) flags = png_get_asm_flags(png_ptr); mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE); png_set_asm_flags(png_ptr, flags & ~mask); #endif To enable or disable only MMX-related features, use png_get_mmx_flagmask() in place of png_get_asm_flagmask(). The mmx version takes one additional parameter: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) int selection = PNG_SELECT_READ | PNG_SELECT_WRITE; int compilerID; mask = png_get_mmx_flagmask(selection, &compilerID); #endif On return, compilerID will indicate which version of the MMX assembler optimizations was compiled. Currently two flavors exist: Microsoft Visual C++ (compilerID == 1) and GNU C (a.k.a. gcc/gas, compilerID == 2). On non-x86 platforms or on systems compiled without MMX optimizations, a value of -1 is used. Note that both png_get_asm_flagmask() and png_get_mmx_flagmask() return all valid, settable optimization bits for the version of the library that's currently in use. In the case of shared (dynamically linked) libraries, this may include optimizations that did not exist at the time the code was written and compiled. It is also possible, of course, to enable only known, specific optimizations; for example: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) flags = PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ | PNG_ASM_FLAG_MMX_READ_INTERLACE \ | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; png_set_asm_flags(png_ptr, flags); #endif This method would enable only the MMX read-optimizations available at the time of libpng 1.2.0's release, regardless of whether a later version of the DLL were actually being used. (Also note that these functions did not exist in versions older than 1.2.0, so any attempt to run a dynamically linked app on such an older version would fail.) To determine whether the processor supports MMX instructions at all, use the png_mmx_support() function: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) mmxsupport = png_mmx_support(); #endif It returns -1 if MMX support is not compiled into libpng, 0 if MMX code is compiled but MMX is not supported by the processor, or 1 if MMX support is fully available. Note that png_mmx_support(), png_get_mmx_flagmask(), and png_get_asm_flagmask() all may be called without allocating and ini- tializing any PNG structures (for example, as part of a usage screen or "about" box). The following code can be used to prevent an application from using the thread_unsafe features, even if libpng was built with PNG_THREAD_UNSAFE_OK defined: #if defined(PNG_USE_PNGGCCRD) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) \ && defined(PNG_THREAD_UNSAFE_OK) /* Disable thread-unsafe features of pnggccrd */ if (png_access_version() >= 10200) { png_uint_32 mmx_disable_mask = 0; png_uint_32 asm_flags; mmx_disable_mask |= ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ); asm_flags = png_get_asm_flags(png_ptr); png_set_asm_flags(png_ptr, asm_flags & ~mmx_disable_mask); } #endif For more extensive examples of runtime querying, enabling and disabling of optimized features, see contrib/gregbook/readpng2.c in the libpng source-code distribution. VII. MNG support The MNG specification (available at http://www.libpng.org/pub/mng) allows certain extensions to PNG for PNG images that are embedded in MNG datastreams. Libpng can support some of these extensions. To enable them, use the png_permit_mng_features() function: feature_set = png_permit_mng_features(png_ptr, mask) mask is a png_uint_32 containing the logical OR of the features you want to enable. These include PNG_FLAG_MNG_EMPTY_PLTE PNG_FLAG_MNG_FILTER_64 PNG_ALL_MNG_FEATURES feature_set is a png_uint_32 that is the logical AND of your mask with the set of MNG features that is supported by the version of libpng that you are using. It is an error to use this function when reading or writing a standalone PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped in a MNG datastream. As a minimum, it must have the MNG 8-byte signature and the MHDR and MEND chunks. Libpng does not provide support for these or any other MNG chunks; your application must provide its own support for them. You may wish to consider using libmng (available at http://www.libmng.com) instead. VIII. Changes to Libpng from version 0.88 It should be noted that versions of libpng later than 0.96 are not distributed by the original libpng author, Guy Schalnat, nor by Andreas Dilger, who had taken over from Guy during 1996 and 1997, and distributed versions 0.89 through 0.96, but rather by another member of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are still alive and well, but they have moved on to other things. The old libpng functions png_read_init(), png_write_init(), png_info_init(), png_read_destroy(), and png_write_destroy() have been moved to PNG_INTERNAL in version 0.95 to discourage their use. These functions will be removed from libpng version 2.0.0. The preferred method of creating and initializing the libpng structures is via the png_create_read_struct(), png_create_write_struct(), and png_create_info_struct() because they isolate the size of the structures from the application, allow version error checking, and also allow the use of custom error handling routines during the initialization, which the old functions do not. The functions png_read_destroy() and png_write_destroy() do not actually free the memory that libpng allocated for these structs, but just reset the data structures, so they can be used instead of png_destroy_read_struct() and png_destroy_write_struct() if you feel there is too much system overhead allocating and freeing the png_struct for each image read. Setting the error callbacks via png_set_message_fn() before png_read_init() as was suggested in libpng-0.88 is no longer supported because this caused applications that do not use custom error functions to fail if the png_ptr was not initialized to zero. It is still possible to set the error callbacks AFTER png_read_init(), or to change them with png_set_error_fn(), which is essentially the same function, but with a new name to force compilation errors with applications that try to use the old method. Starting with version 1.0.7, you can find out which version of the library you are using at run-time: png_uint_32 libpng_vn = png_access_version_number(); The number libpng_vn is constructed from the major version, minor version with leading zero, and release number with leading zero, (e.g., libpng_vn for version 1.0.7 is 10007). You can also check which version of png.h you used when compiling your application: png_uint_32 application_vn = PNG_LIBPNG_VER; IX. Y2K Compliance in libpng September 12, 2004 Since the PNG Development group is an ad-hoc body, we can't make an official declaration. This is your unofficial assurance that libpng from version 0.71 and upward through 1.2.7 are Y2K compliant. It is my belief that earlier versions were also Y2K compliant. Libpng only has three year fields. One is a 2-byte unsigned integer that will hold years up to 65535. The other two hold the date in text format, and will hold years up to 9999. The integer is "png_uint_16 year" in png_time_struct. The strings are "png_charp time_buffer" in png_struct and "near_time_buffer", which is a local character string in png.c. There are seven time-related functions: png_convert_to_rfc_1123() in png.c (formerly png_convert_to_rfc_1152() in error) png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c png_convert_from_time_t() in pngwrite.c png_get_tIME() in pngget.c png_handle_tIME() in pngrutil.c, called in pngread.c png_set_tIME() in pngset.c png_write_tIME() in pngwutil.c, called in pngwrite.c All appear to handle dates properly in a Y2K environment. The png_convert_from_time_t() function calls gmtime() to convert from system clock time, which returns (year - 1900), which we properly convert to the full 4-digit year. There is a possibility that applications using libpng are not passing 4-digit years into the png_convert_to_rfc_1123() function, or that they are incorrectly passing only a 2-digit year instead of "year - 1900" into the png_convert_from_struct_tm() function, but this is not under our control. The libpng documentation has always stated that it works with 4-digit years, and the APIs have been documented as such. The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned integer to hold the year, and can hold years as large as 65535. zlib, upon which libpng depends, is also Y2K compliant. It contains no date-related code. Glenn Randers-Pehrson libpng maintainer PNG Development Group htmldoc-1.8.27/png/KNOWNBUG0100664000212600000240000000062210124712606013662 0ustar mikeuser Known bugs in libpng version 1.2.7 1. April 22, 2001: pnggccrd.c has been reported to crash on NetBSD when reading interlaced PNG files, when assembler code is enabled but running on a non-MMX i386 platform. STATUS: Under investigation. The change to pnggccrd.c in libpng-1.2.1 fixed a problem under FreeBSD but not the problem with NetBSD, which still fails as of libpng-1.2.2rc1. htmldoc-1.8.27/png/pngwutil.c0100664000212600000240000024310610124712606014530 0ustar mikeuser /* pngwutil.c - utilities to write a PNG file * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ #define PNG_INTERNAL #include "png.h" #ifdef PNG_WRITE_SUPPORTED /* Place a 32-bit number into a buffer in PNG byte order. We work * with unsigned numbers for convenience, although one supported * ancillary chunk uses signed (two's complement) numbers. */ void /* PRIVATE */ png_save_uint_32(png_bytep buf, png_uint_32 i) { buf[0] = (png_byte)((i >> 24) & 0xff); buf[1] = (png_byte)((i >> 16) & 0xff); buf[2] = (png_byte)((i >> 8) & 0xff); buf[3] = (png_byte)(i & 0xff); } #if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED) /* The png_save_int_32 function assumes integers are stored in two's * complement format. If this isn't the case, then this routine needs to * be modified to write data in two's complement format. */ void /* PRIVATE */ png_save_int_32(png_bytep buf, png_int_32 i) { buf[0] = (png_byte)((i >> 24) & 0xff); buf[1] = (png_byte)((i >> 16) & 0xff); buf[2] = (png_byte)((i >> 8) & 0xff); buf[3] = (png_byte)(i & 0xff); } #endif /* Place a 16-bit number into a buffer in PNG byte order. * The parameter is declared unsigned int, not png_uint_16, * just to avoid potential problems on pre-ANSI C compilers. */ void /* PRIVATE */ png_save_uint_16(png_bytep buf, unsigned int i) { buf[0] = (png_byte)((i >> 8) & 0xff); buf[1] = (png_byte)(i & 0xff); } /* Write a PNG chunk all at once. The type is an array of ASCII characters * representing the chunk name. The array must be at least 4 bytes in * length, and does not need to be null terminated. To be safe, pass the * pre-defined chunk names here, and if you need a new one, define it * where the others are defined. The length is the length of the data. * All the data must be present. If that is not possible, use the * png_write_chunk_start(), png_write_chunk_data(), and png_write_chunk_end() * functions instead. */ void PNGAPI png_write_chunk(png_structp png_ptr, png_bytep chunk_name, png_bytep data, png_size_t length) { png_write_chunk_start(png_ptr, chunk_name, (png_uint_32)length); png_write_chunk_data(png_ptr, data, length); png_write_chunk_end(png_ptr); } /* Write the start of a PNG chunk. The type is the chunk type. * The total_length is the sum of the lengths of all the data you will be * passing in png_write_chunk_data(). */ void PNGAPI png_write_chunk_start(png_structp png_ptr, png_bytep chunk_name, png_uint_32 length) { png_byte buf[4]; png_debug2(0, "Writing %s chunk (%lu bytes)\n", chunk_name, length); /* write the length */ png_save_uint_32(buf, length); png_write_data(png_ptr, buf, (png_size_t)4); /* write the chunk name */ png_write_data(png_ptr, chunk_name, (png_size_t)4); /* reset the crc and run it over the chunk name */ png_reset_crc(png_ptr); png_calculate_crc(png_ptr, chunk_name, (png_size_t)4); } /* Write the data of a PNG chunk started with png_write_chunk_start(). * Note that multiple calls to this function are allowed, and that the * sum of the lengths from these calls *must* add up to the total_length * given to png_write_chunk_start(). */ void PNGAPI png_write_chunk_data(png_structp png_ptr, png_bytep data, png_size_t length) { /* write the data, and run the CRC over it */ if (data != NULL && length > 0) { png_calculate_crc(png_ptr, data, length); png_write_data(png_ptr, data, length); } } /* Finish a chunk started with png_write_chunk_start(). */ void PNGAPI png_write_chunk_end(png_structp png_ptr) { png_byte buf[4]; /* write the crc */ png_save_uint_32(buf, png_ptr->crc); png_write_data(png_ptr, buf, (png_size_t)4); } /* Simple function to write the signature. If we have already written * the magic bytes of the signature, or more likely, the PNG stream is * being embedded into another stream and doesn't need its own signature, * we should call png_set_sig_bytes() to tell libpng how many of the * bytes have already been written. */ void /* PRIVATE */ png_write_sig(png_structp png_ptr) { png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; /* write the rest of the 8 byte signature */ png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes], (png_size_t)8 - png_ptr->sig_bytes); if(png_ptr->sig_bytes < 3) png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE; } #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_iCCP_SUPPORTED) /* * This pair of functions encapsulates the operation of (a) compressing a * text string, and (b) issuing it later as a series of chunk data writes. * The compression_state structure is shared context for these functions * set up by the caller in order to make the whole mess thread-safe. */ typedef struct { char *input; /* the uncompressed input data */ int input_len; /* its length */ int num_output_ptr; /* number of output pointers used */ int max_output_ptr; /* size of output_ptr */ png_charpp output_ptr; /* array of pointers to output */ } compression_state; /* compress given text into storage in the png_ptr structure */ static int /* PRIVATE */ png_text_compress(png_structp png_ptr, png_charp text, png_size_t text_len, int compression, compression_state *comp) { int ret; comp->num_output_ptr = comp->max_output_ptr = 0; comp->output_ptr = NULL; comp->input = NULL; /* we may just want to pass the text right through */ if (compression == PNG_TEXT_COMPRESSION_NONE) { comp->input = text; comp->input_len = text_len; return((int)text_len); } if (compression >= PNG_TEXT_COMPRESSION_LAST) { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char msg[50]; sprintf(msg, "Unknown compression type %d", compression); png_warning(png_ptr, msg); #else png_warning(png_ptr, "Unknown compression type"); #endif } /* We can't write the chunk until we find out how much data we have, * which means we need to run the compressor first and save the * output. This shouldn't be a problem, as the vast majority of * comments should be reasonable, but we will set up an array of * malloc'd pointers to be sure. * * If we knew the application was well behaved, we could simplify this * greatly by assuming we can always malloc an output buffer large * enough to hold the compressed text ((1001 * text_len / 1000) + 12) * and malloc this directly. The only time this would be a bad idea is * if we can't malloc more than 64K and we have 64K of random input * data, or if the input string is incredibly large (although this * wouldn't cause a failure, just a slowdown due to swapping). */ /* set up the compression buffers */ png_ptr->zstream.avail_in = (uInt)text_len; png_ptr->zstream.next_in = (Bytef *)text; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_out = (Bytef *)png_ptr->zbuf; /* this is the same compression loop as in png_write_row() */ do { /* compress the data */ ret = deflate(&png_ptr->zstream, Z_NO_FLUSH); if (ret != Z_OK) { /* error */ if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } /* check to see if we need more room */ if (!png_ptr->zstream.avail_out && png_ptr->zstream.avail_in) { /* make sure the output array has room */ if (comp->num_output_ptr >= comp->max_output_ptr) { int old_max; old_max = comp->max_output_ptr; comp->max_output_ptr = comp->num_output_ptr + 4; if (comp->output_ptr != NULL) { png_charpp old_ptr; old_ptr = comp->output_ptr; comp->output_ptr = (png_charpp)png_malloc(png_ptr, (png_uint_32)(comp->max_output_ptr * png_sizeof (png_charpp))); png_memcpy(comp->output_ptr, old_ptr, old_max * png_sizeof (png_charp)); png_free(png_ptr, old_ptr); } else comp->output_ptr = (png_charpp)png_malloc(png_ptr, (png_uint_32)(comp->max_output_ptr * png_sizeof (png_charp))); } /* save the data */ comp->output_ptr[comp->num_output_ptr] = (png_charp)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf, png_ptr->zbuf_size); comp->num_output_ptr++; /* and reset the buffer */ png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_out = png_ptr->zbuf; } /* continue until we don't have any more to compress */ } while (png_ptr->zstream.avail_in); /* finish the compression */ do { /* tell zlib we are finished */ ret = deflate(&png_ptr->zstream, Z_FINISH); if (ret == Z_OK) { /* check to see if we need more room */ if (!(png_ptr->zstream.avail_out)) { /* check to make sure our output array has room */ if (comp->num_output_ptr >= comp->max_output_ptr) { int old_max; old_max = comp->max_output_ptr; comp->max_output_ptr = comp->num_output_ptr + 4; if (comp->output_ptr != NULL) { png_charpp old_ptr; old_ptr = comp->output_ptr; /* This could be optimized to realloc() */ comp->output_ptr = (png_charpp)png_malloc(png_ptr, (png_uint_32)(comp->max_output_ptr * png_sizeof (png_charpp))); png_memcpy(comp->output_ptr, old_ptr, old_max * png_sizeof (png_charp)); png_free(png_ptr, old_ptr); } else comp->output_ptr = (png_charpp)png_malloc(png_ptr, (png_uint_32)(comp->max_output_ptr * png_sizeof (png_charp))); } /* save off the data */ comp->output_ptr[comp->num_output_ptr] = (png_charp)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf, png_ptr->zbuf_size); comp->num_output_ptr++; /* and reset the buffer pointers */ png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_out = png_ptr->zbuf; } } else if (ret != Z_STREAM_END) { /* we got an error */ if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } } while (ret != Z_STREAM_END); /* text length is number of buffers plus last buffer */ text_len = png_ptr->zbuf_size * comp->num_output_ptr; if (png_ptr->zstream.avail_out < png_ptr->zbuf_size) text_len += png_ptr->zbuf_size - (png_size_t)png_ptr->zstream.avail_out; return((int)text_len); } /* ship the compressed text out via chunk writes */ static void /* PRIVATE */ png_write_compressed_data_out(png_structp png_ptr, compression_state *comp) { int i; /* handle the no-compression case */ if (comp->input) { png_write_chunk_data(png_ptr, (png_bytep)comp->input, (png_size_t)comp->input_len); return; } /* write saved output buffers, if any */ for (i = 0; i < comp->num_output_ptr; i++) { png_write_chunk_data(png_ptr,(png_bytep)comp->output_ptr[i], png_ptr->zbuf_size); png_free(png_ptr, comp->output_ptr[i]); comp->output_ptr[i]=NULL; } if (comp->max_output_ptr != 0) png_free(png_ptr, comp->output_ptr); comp->output_ptr=NULL; /* write anything left in zbuf */ if (png_ptr->zstream.avail_out < (png_uint_32)png_ptr->zbuf_size) png_write_chunk_data(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); /* reset zlib for another zTXt/iTXt or the image data */ deflateReset(&png_ptr->zstream); } #endif /* Write the IHDR chunk, and update the png_struct with the necessary * information. Note that the rest of this code depends upon this * information being correct. */ void /* PRIVATE */ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int compression_type, int filter_type, int interlace_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IHDR; #endif png_byte buf[13]; /* buffer to store the IHDR info */ png_debug(1, "in png_write_IHDR\n"); /* Check that we have valid input data from the application info */ switch (color_type) { case PNG_COLOR_TYPE_GRAY: switch (bit_depth) { case 1: case 2: case 4: case 8: case 16: png_ptr->channels = 1; break; default: png_error(png_ptr,"Invalid bit depth for grayscale image"); } break; case PNG_COLOR_TYPE_RGB: if (bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth for RGB image"); png_ptr->channels = 3; break; case PNG_COLOR_TYPE_PALETTE: switch (bit_depth) { case 1: case 2: case 4: case 8: png_ptr->channels = 1; break; default: png_error(png_ptr, "Invalid bit depth for paletted image"); } break; case PNG_COLOR_TYPE_GRAY_ALPHA: if (bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth for grayscale+alpha image"); png_ptr->channels = 2; break; case PNG_COLOR_TYPE_RGB_ALPHA: if (bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth for RGBA image"); png_ptr->channels = 4; break; default: png_error(png_ptr, "Invalid image color type specified"); } if (compression_type != PNG_COMPRESSION_TYPE_BASE) { png_warning(png_ptr, "Invalid compression type specified"); compression_type = PNG_COMPRESSION_TYPE_BASE; } /* Write filter_method 64 (intrapixel differencing) only if * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and * 2. Libpng did not write a PNG signature (this filter_method is only * used in PNG datastreams that are embedded in MNG datastreams) and * 3. The application called png_permit_mng_features with a mask that * included PNG_FLAG_MNG_FILTER_64 and * 4. The filter_method is 64 and * 5. The color_type is RGB or RGBA */ if ( #if defined(PNG_MNG_FEATURES_SUPPORTED) !((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) && (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) && (filter_type == PNG_INTRAPIXEL_DIFFERENCING)) && #endif filter_type != PNG_FILTER_TYPE_BASE) { png_warning(png_ptr, "Invalid filter type specified"); filter_type = PNG_FILTER_TYPE_BASE; } #ifdef PNG_WRITE_INTERLACING_SUPPORTED if (interlace_type != PNG_INTERLACE_NONE && interlace_type != PNG_INTERLACE_ADAM7) { png_warning(png_ptr, "Invalid interlace type specified"); interlace_type = PNG_INTERLACE_ADAM7; } #else interlace_type=PNG_INTERLACE_NONE; #endif /* save off the relevent information */ png_ptr->bit_depth = (png_byte)bit_depth; png_ptr->color_type = (png_byte)color_type; png_ptr->interlaced = (png_byte)interlace_type; #if defined(PNG_MNG_FEATURES_SUPPORTED) png_ptr->filter_type = (png_byte)filter_type; #endif png_ptr->compression_type = (png_byte)compression_type; png_ptr->width = width; png_ptr->height = height; png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels); png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width); /* set the usr info, so any transformations can modify it */ png_ptr->usr_width = png_ptr->width; png_ptr->usr_bit_depth = png_ptr->bit_depth; png_ptr->usr_channels = png_ptr->channels; /* pack the header information into the buffer */ png_save_uint_32(buf, width); png_save_uint_32(buf + 4, height); buf[8] = (png_byte)bit_depth; buf[9] = (png_byte)color_type; buf[10] = (png_byte)compression_type; buf[11] = (png_byte)filter_type; buf[12] = (png_byte)interlace_type; /* write the chunk */ png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13); /* initialize zlib with PNG info */ png_ptr->zstream.zalloc = png_zalloc; png_ptr->zstream.zfree = png_zfree; png_ptr->zstream.opaque = (voidpf)png_ptr; if (!(png_ptr->do_filter)) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE || png_ptr->bit_depth < 8) png_ptr->do_filter = PNG_FILTER_NONE; else png_ptr->do_filter = PNG_ALL_FILTERS; } if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_STRATEGY)) { if (png_ptr->do_filter != PNG_FILTER_NONE) png_ptr->zlib_strategy = Z_FILTERED; else png_ptr->zlib_strategy = Z_DEFAULT_STRATEGY; } if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_LEVEL)) png_ptr->zlib_level = Z_DEFAULT_COMPRESSION; if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL)) png_ptr->zlib_mem_level = 8; if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS)) png_ptr->zlib_window_bits = 15; if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_METHOD)) png_ptr->zlib_method = 8; deflateInit2(&png_ptr->zstream, png_ptr->zlib_level, png_ptr->zlib_method, png_ptr->zlib_window_bits, png_ptr->zlib_mem_level, png_ptr->zlib_strategy); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->mode = PNG_HAVE_IHDR; } /* write the palette. We are careful not to trust png_color to be in the * correct order for PNG, so people can redefine it to any convenient * structure. */ void /* PRIVATE */ png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_PLTE; #endif png_uint_32 i; png_colorp pal_ptr; png_byte buf[3]; png_debug(1, "in png_write_PLTE\n"); if (( #if defined(PNG_MNG_FEATURES_SUPPORTED) !(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) && #endif num_pal == 0) || num_pal > 256) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { png_error(png_ptr, "Invalid number of colors in palette"); } else { png_warning(png_ptr, "Invalid number of colors in palette"); return; } } if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR)) { png_warning(png_ptr, "Ignoring request to write a PLTE chunk in grayscale PNG"); return; } png_ptr->num_palette = (png_uint_16)num_pal; png_debug1(3, "num_palette = %d\n", png_ptr->num_palette); png_write_chunk_start(png_ptr, (png_bytep)png_PLTE, num_pal * 3); #ifndef PNG_NO_POINTER_INDEXING for (i = 0, pal_ptr = palette; i < num_pal; i++, pal_ptr++) { buf[0] = pal_ptr->red; buf[1] = pal_ptr->green; buf[2] = pal_ptr->blue; png_write_chunk_data(png_ptr, buf, (png_size_t)3); } #else /* This is a little slower but some buggy compilers need to do this instead */ pal_ptr=palette; for (i = 0; i < num_pal; i++) { buf[0] = pal_ptr[i].red; buf[1] = pal_ptr[i].green; buf[2] = pal_ptr[i].blue; png_write_chunk_data(png_ptr, buf, (png_size_t)3); } #endif png_write_chunk_end(png_ptr); png_ptr->mode |= PNG_HAVE_PLTE; } /* write an IDAT chunk */ void /* PRIVATE */ png_write_IDAT(png_structp png_ptr, png_bytep data, png_size_t length) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; #endif png_debug(1, "in png_write_IDAT\n"); /* Optimize the CMF field in the zlib stream. */ /* This hack of the zlib stream is compliant to the stream specification. */ if (!(png_ptr->mode & PNG_HAVE_IDAT) && png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE) { unsigned int z_cmf = data[0]; /* zlib compression method and flags */ if ((z_cmf & 0x0f) == 8 && (z_cmf & 0xf0) <= 0x70) { /* Avoid memory underflows and multiplication overflows. */ /* The conditions below are practically always satisfied; however, they still must be checked. */ if (length >= 2 && png_ptr->height < 16384 && png_ptr->width < 16384) { png_uint_32 uncompressed_idat_size = png_ptr->height * ((png_ptr->width * png_ptr->channels * png_ptr->bit_depth + 15) >> 3); unsigned int z_cinfo = z_cmf >> 4; unsigned int half_z_window_size = 1 << (z_cinfo + 7); while (uncompressed_idat_size <= half_z_window_size && half_z_window_size >= 256) { z_cinfo--; half_z_window_size >>= 1; } z_cmf = (z_cmf & 0x0f) | (z_cinfo << 4); if (data[0] != (png_byte)z_cmf) { data[0] = (png_byte)z_cmf; data[1] &= 0xe0; data[1] += (png_byte)(0x1f - ((z_cmf << 8) + data[1]) % 0x1f); } } } else png_error(png_ptr, "Invalid zlib compression method or flags in IDAT"); } png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length); png_ptr->mode |= PNG_HAVE_IDAT; } /* write an IEND chunk */ void /* PRIVATE */ png_write_IEND(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IEND; #endif png_debug(1, "in png_write_IEND\n"); png_write_chunk(png_ptr, (png_bytep)png_IEND, png_bytep_NULL, (png_size_t)0); png_ptr->mode |= PNG_HAVE_IEND; } #if defined(PNG_WRITE_gAMA_SUPPORTED) /* write a gAMA chunk */ #ifdef PNG_FLOATING_POINT_SUPPORTED void /* PRIVATE */ png_write_gAMA(png_structp png_ptr, double file_gamma) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_gAMA; #endif png_uint_32 igamma; png_byte buf[4]; png_debug(1, "in png_write_gAMA\n"); /* file_gamma is saved in 1/100,000ths */ igamma = (png_uint_32)(file_gamma * 100000.0 + 0.5); png_save_uint_32(buf, igamma); png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4); } #endif #ifdef PNG_FIXED_POINT_SUPPORTED void /* PRIVATE */ png_write_gAMA_fixed(png_structp png_ptr, png_fixed_point file_gamma) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_gAMA; #endif png_byte buf[4]; png_debug(1, "in png_write_gAMA\n"); /* file_gamma is saved in 1/100,000ths */ png_save_uint_32(buf, (png_uint_32)file_gamma); png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4); } #endif #endif #if defined(PNG_WRITE_sRGB_SUPPORTED) /* write a sRGB chunk */ void /* PRIVATE */ png_write_sRGB(png_structp png_ptr, int srgb_intent) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_sRGB; #endif png_byte buf[1]; png_debug(1, "in png_write_sRGB\n"); if(srgb_intent >= PNG_sRGB_INTENT_LAST) png_warning(png_ptr, "Invalid sRGB rendering intent specified"); buf[0]=(png_byte)srgb_intent; png_write_chunk(png_ptr, (png_bytep)png_sRGB, buf, (png_size_t)1); } #endif #if defined(PNG_WRITE_iCCP_SUPPORTED) /* write an iCCP chunk */ void /* PRIVATE */ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type, png_charp profile, int profile_len) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_iCCP; #endif png_size_t name_len; png_charp new_name; compression_state comp; png_debug(1, "in png_write_iCCP\n"); if (name == NULL || (name_len = png_check_keyword(png_ptr, name, &new_name)) == 0) { png_warning(png_ptr, "Empty keyword in iCCP chunk"); return; } if (compression_type != PNG_COMPRESSION_TYPE_BASE) png_warning(png_ptr, "Unknown compression type in iCCP chunk"); if (profile == NULL) profile_len = 0; if (profile_len) profile_len = png_text_compress(png_ptr, profile, (png_size_t)profile_len, PNG_COMPRESSION_TYPE_BASE, &comp); /* make sure we include the NULL after the name and the compression type */ png_write_chunk_start(png_ptr, (png_bytep)png_iCCP, (png_uint_32)name_len+profile_len+2); new_name[name_len+1]=0x00; png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 2); if (profile_len) png_write_compressed_data_out(png_ptr, &comp); png_write_chunk_end(png_ptr); png_free(png_ptr, new_name); } #endif #if defined(PNG_WRITE_sPLT_SUPPORTED) /* write a sPLT chunk */ void /* PRIVATE */ png_write_sPLT(png_structp png_ptr, png_sPLT_tp spalette) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_sPLT; #endif png_size_t name_len; png_charp new_name; png_byte entrybuf[10]; int entry_size = (spalette->depth == 8 ? 6 : 10); int palette_size = entry_size * spalette->nentries; png_sPLT_entryp ep; #ifdef PNG_NO_POINTER_INDEXING int i; #endif png_debug(1, "in png_write_sPLT\n"); if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr, spalette->name, &new_name))==0) { png_warning(png_ptr, "Empty keyword in sPLT chunk"); return; } /* make sure we include the NULL after the name */ png_write_chunk_start(png_ptr, (png_bytep)png_sPLT, (png_uint_32)(name_len + 2 + palette_size)); png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 1); png_write_chunk_data(png_ptr, (png_bytep)&spalette->depth, 1); /* loop through each palette entry, writing appropriately */ #ifndef PNG_NO_POINTER_INDEXING for (ep = spalette->entries; epentries+spalette->nentries; ep++) { if (spalette->depth == 8) { entrybuf[0] = (png_byte)ep->red; entrybuf[1] = (png_byte)ep->green; entrybuf[2] = (png_byte)ep->blue; entrybuf[3] = (png_byte)ep->alpha; png_save_uint_16(entrybuf + 4, ep->frequency); } else { png_save_uint_16(entrybuf + 0, ep->red); png_save_uint_16(entrybuf + 2, ep->green); png_save_uint_16(entrybuf + 4, ep->blue); png_save_uint_16(entrybuf + 6, ep->alpha); png_save_uint_16(entrybuf + 8, ep->frequency); } png_write_chunk_data(png_ptr, entrybuf, (png_size_t)entry_size); } #else ep=spalette->entries; for (i=0; i>spalette->nentries; i++) { if (spalette->depth == 8) { entrybuf[0] = (png_byte)ep[i].red; entrybuf[1] = (png_byte)ep[i].green; entrybuf[2] = (png_byte)ep[i].blue; entrybuf[3] = (png_byte)ep[i].alpha; png_save_uint_16(entrybuf + 4, ep[i].frequency); } else { png_save_uint_16(entrybuf + 0, ep[i].red); png_save_uint_16(entrybuf + 2, ep[i].green); png_save_uint_16(entrybuf + 4, ep[i].blue); png_save_uint_16(entrybuf + 6, ep[i].alpha); png_save_uint_16(entrybuf + 8, ep[i].frequency); } png_write_chunk_data(png_ptr, entrybuf, entry_size); } #endif png_write_chunk_end(png_ptr); png_free(png_ptr, new_name); } #endif #if defined(PNG_WRITE_sBIT_SUPPORTED) /* write the sBIT chunk */ void /* PRIVATE */ png_write_sBIT(png_structp png_ptr, png_color_8p sbit, int color_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_sBIT; #endif png_byte buf[4]; png_size_t size; png_debug(1, "in png_write_sBIT\n"); /* make sure we don't depend upon the order of PNG_COLOR_8 */ if (color_type & PNG_COLOR_MASK_COLOR) { png_byte maxbits; maxbits = (png_byte)(color_type==PNG_COLOR_TYPE_PALETTE ? 8 : png_ptr->usr_bit_depth); if (sbit->red == 0 || sbit->red > maxbits || sbit->green == 0 || sbit->green > maxbits || sbit->blue == 0 || sbit->blue > maxbits) { png_warning(png_ptr, "Invalid sBIT depth specified"); return; } buf[0] = sbit->red; buf[1] = sbit->green; buf[2] = sbit->blue; size = 3; } else { if (sbit->gray == 0 || sbit->gray > png_ptr->usr_bit_depth) { png_warning(png_ptr, "Invalid sBIT depth specified"); return; } buf[0] = sbit->gray; size = 1; } if (color_type & PNG_COLOR_MASK_ALPHA) { if (sbit->alpha == 0 || sbit->alpha > png_ptr->usr_bit_depth) { png_warning(png_ptr, "Invalid sBIT depth specified"); return; } buf[size++] = sbit->alpha; } png_write_chunk(png_ptr, (png_bytep)png_sBIT, buf, size); } #endif #if defined(PNG_WRITE_cHRM_SUPPORTED) /* write the cHRM chunk */ #ifdef PNG_FLOATING_POINT_SUPPORTED void /* PRIVATE */ png_write_cHRM(png_structp png_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_cHRM; #endif png_byte buf[32]; png_uint_32 itemp; png_debug(1, "in png_write_cHRM\n"); /* each value is saved in 1/100,000ths */ if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 || white_x + white_y > 1.0) { png_warning(png_ptr, "Invalid cHRM white point specified"); #if !defined(PNG_NO_CONSOLE_IO) fprintf(stderr,"white_x=%f, white_y=%f\n",white_x, white_y); #endif return; } itemp = (png_uint_32)(white_x * 100000.0 + 0.5); png_save_uint_32(buf, itemp); itemp = (png_uint_32)(white_y * 100000.0 + 0.5); png_save_uint_32(buf + 4, itemp); if (red_x < 0 || red_x > 0.8 || red_y < 0 || red_y > 0.8 || red_x + red_y > 1.0) { png_warning(png_ptr, "Invalid cHRM red point specified"); return; } itemp = (png_uint_32)(red_x * 100000.0 + 0.5); png_save_uint_32(buf + 8, itemp); itemp = (png_uint_32)(red_y * 100000.0 + 0.5); png_save_uint_32(buf + 12, itemp); if (green_x < 0 || green_x > 0.8 || green_y < 0 || green_y > 0.8 || green_x + green_y > 1.0) { png_warning(png_ptr, "Invalid cHRM green point specified"); return; } itemp = (png_uint_32)(green_x * 100000.0 + 0.5); png_save_uint_32(buf + 16, itemp); itemp = (png_uint_32)(green_y * 100000.0 + 0.5); png_save_uint_32(buf + 20, itemp); if (blue_x < 0 || blue_x > 0.8 || blue_y < 0 || blue_y > 0.8 || blue_x + blue_y > 1.0) { png_warning(png_ptr, "Invalid cHRM blue point specified"); return; } itemp = (png_uint_32)(blue_x * 100000.0 + 0.5); png_save_uint_32(buf + 24, itemp); itemp = (png_uint_32)(blue_y * 100000.0 + 0.5); png_save_uint_32(buf + 28, itemp); png_write_chunk(png_ptr, (png_bytep)png_cHRM, buf, (png_size_t)32); } #endif #ifdef PNG_FIXED_POINT_SUPPORTED void /* PRIVATE */ png_write_cHRM_fixed(png_structp png_ptr, png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x, png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y, png_fixed_point blue_x, png_fixed_point blue_y) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_cHRM; #endif png_byte buf[32]; png_debug(1, "in png_write_cHRM\n"); /* each value is saved in 1/100,000ths */ if (white_x > 80000L || white_y > 80000L || white_x + white_y > 100000L) { png_warning(png_ptr, "Invalid fixed cHRM white point specified"); #if !defined(PNG_NO_CONSOLE_IO) fprintf(stderr,"white_x=%ld, white_y=%ld\n",white_x, white_y); #endif return; } png_save_uint_32(buf, (png_uint_32)white_x); png_save_uint_32(buf + 4, (png_uint_32)white_y); if (red_x > 80000L || red_y > 80000L || red_x + red_y > 100000L) { png_warning(png_ptr, "Invalid cHRM fixed red point specified"); return; } png_save_uint_32(buf + 8, (png_uint_32)red_x); png_save_uint_32(buf + 12, (png_uint_32)red_y); if (green_x > 80000L || green_y > 80000L || green_x + green_y > 100000L) { png_warning(png_ptr, "Invalid fixed cHRM green point specified"); return; } png_save_uint_32(buf + 16, (png_uint_32)green_x); png_save_uint_32(buf + 20, (png_uint_32)green_y); if (blue_x > 80000L || blue_y > 80000L || blue_x + blue_y > 100000L) { png_warning(png_ptr, "Invalid fixed cHRM blue point specified"); return; } png_save_uint_32(buf + 24, (png_uint_32)blue_x); png_save_uint_32(buf + 28, (png_uint_32)blue_y); png_write_chunk(png_ptr, (png_bytep)png_cHRM, buf, (png_size_t)32); } #endif #endif #if defined(PNG_WRITE_tRNS_SUPPORTED) /* write the tRNS chunk */ void /* PRIVATE */ png_write_tRNS(png_structp png_ptr, png_bytep trans, png_color_16p tran, int num_trans, int color_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_tRNS; #endif png_byte buf[6]; png_debug(1, "in png_write_tRNS\n"); if (color_type == PNG_COLOR_TYPE_PALETTE) { if (num_trans <= 0 || num_trans > (int)png_ptr->num_palette) { png_warning(png_ptr,"Invalid number of transparent colors specified"); return; } /* write the chunk out as it is */ png_write_chunk(png_ptr, (png_bytep)png_tRNS, trans, (png_size_t)num_trans); } else if (color_type == PNG_COLOR_TYPE_GRAY) { /* one 16 bit value */ if(tran->gray >= (1 << png_ptr->bit_depth)) { png_warning(png_ptr, "Ignoring attempt to write tRNS chunk out-of-range for bit_depth"); return; } png_save_uint_16(buf, tran->gray); png_write_chunk(png_ptr, (png_bytep)png_tRNS, buf, (png_size_t)2); } else if (color_type == PNG_COLOR_TYPE_RGB) { /* three 16 bit values */ png_save_uint_16(buf, tran->red); png_save_uint_16(buf + 2, tran->green); png_save_uint_16(buf + 4, tran->blue); if(png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4])) { png_warning(png_ptr, "Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8"); return; } png_write_chunk(png_ptr, (png_bytep)png_tRNS, buf, (png_size_t)6); } else { png_warning(png_ptr, "Can't write tRNS with an alpha channel"); } } #endif #if defined(PNG_WRITE_bKGD_SUPPORTED) /* write the background chunk */ void /* PRIVATE */ png_write_bKGD(png_structp png_ptr, png_color_16p back, int color_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_bKGD; #endif png_byte buf[6]; png_debug(1, "in png_write_bKGD\n"); if (color_type == PNG_COLOR_TYPE_PALETTE) { if ( #if defined(PNG_MNG_FEATURES_SUPPORTED) (png_ptr->num_palette || (!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) && #endif back->index > png_ptr->num_palette) { png_warning(png_ptr, "Invalid background palette index"); return; } buf[0] = back->index; png_write_chunk(png_ptr, (png_bytep)png_bKGD, buf, (png_size_t)1); } else if (color_type & PNG_COLOR_MASK_COLOR) { png_save_uint_16(buf, back->red); png_save_uint_16(buf + 2, back->green); png_save_uint_16(buf + 4, back->blue); if(png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4])) { png_warning(png_ptr, "Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8"); return; } png_write_chunk(png_ptr, (png_bytep)png_bKGD, buf, (png_size_t)6); } else { if(back->gray >= (1 << png_ptr->bit_depth)) { png_warning(png_ptr, "Ignoring attempt to write bKGD chunk out-of-range for bit_depth"); return; } png_save_uint_16(buf, back->gray); png_write_chunk(png_ptr, (png_bytep)png_bKGD, buf, (png_size_t)2); } } #endif #if defined(PNG_WRITE_hIST_SUPPORTED) /* write the histogram */ void /* PRIVATE */ png_write_hIST(png_structp png_ptr, png_uint_16p hist, int num_hist) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_hIST; #endif int i; png_byte buf[3]; png_debug(1, "in png_write_hIST\n"); if (num_hist > (int)png_ptr->num_palette) { png_debug2(3, "num_hist = %d, num_palette = %d\n", num_hist, png_ptr->num_palette); png_warning(png_ptr, "Invalid number of histogram entries specified"); return; } png_write_chunk_start(png_ptr, (png_bytep)png_hIST, (png_uint_32)(num_hist * 2)); for (i = 0; i < num_hist; i++) { png_save_uint_16(buf, hist[i]); png_write_chunk_data(png_ptr, buf, (png_size_t)2); } png_write_chunk_end(png_ptr); } #endif #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) /* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification, * and if invalid, correct the keyword rather than discarding the entire * chunk. The PNG 1.0 specification requires keywords 1-79 characters in * length, forbids leading or trailing whitespace, multiple internal spaces, * and the non-break space (0x80) from ISO 8859-1. Returns keyword length. * * The new_key is allocated to hold the corrected keyword and must be freed * by the calling routine. This avoids problems with trying to write to * static keywords without having to have duplicate copies of the strings. */ png_size_t /* PRIVATE */ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) { png_size_t key_len; png_charp kp, dp; int kflag; int kwarn=0; png_debug(1, "in png_check_keyword\n"); *new_key = NULL; if (key == NULL || (key_len = png_strlen(key)) == 0) { png_warning(png_ptr, "zero length keyword"); return ((png_size_t)0); } png_debug1(2, "Keyword to be checked is '%s'\n", key); *new_key = (png_charp)png_malloc_warn(png_ptr, (png_uint_32)(key_len + 2)); if (*new_key == NULL) { png_warning(png_ptr, "Out of memory while procesing keyword"); return ((png_size_t)0); } /* Replace non-printing characters with a blank and print a warning */ for (kp = key, dp = *new_key; *kp != '\0'; kp++, dp++) { if (*kp < 0x20 || (*kp > 0x7E && (png_byte)*kp < 0xA1)) { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char msg[40]; sprintf(msg, "invalid keyword character 0x%02X", *kp); png_warning(png_ptr, msg); #else png_warning(png_ptr, "invalid character in keyword"); #endif *dp = ' '; } else { *dp = *kp; } } *dp = '\0'; /* Remove any trailing white space. */ kp = *new_key + key_len - 1; if (*kp == ' ') { png_warning(png_ptr, "trailing spaces removed from keyword"); while (*kp == ' ') { *(kp--) = '\0'; key_len--; } } /* Remove any leading white space. */ kp = *new_key; if (*kp == ' ') { png_warning(png_ptr, "leading spaces removed from keyword"); while (*kp == ' ') { kp++; key_len--; } } png_debug1(2, "Checking for multiple internal spaces in '%s'\n", kp); /* Remove multiple internal spaces. */ for (kflag = 0, dp = *new_key; *kp != '\0'; kp++) { if (*kp == ' ' && kflag == 0) { *(dp++) = *kp; kflag = 1; } else if (*kp == ' ') { key_len--; kwarn=1; } else { *(dp++) = *kp; kflag = 0; } } *dp = '\0'; if(kwarn) png_warning(png_ptr, "extra interior spaces removed from keyword"); if (key_len == 0) { png_free(png_ptr, *new_key); *new_key=NULL; png_warning(png_ptr, "Zero length keyword"); } if (key_len > 79) { png_warning(png_ptr, "keyword length must be 1 - 79 characters"); new_key[79] = '\0'; key_len = 79; } return (key_len); } #endif #if defined(PNG_WRITE_tEXt_SUPPORTED) /* write a tEXt chunk */ void /* PRIVATE */ png_write_tEXt(png_structp png_ptr, png_charp key, png_charp text, png_size_t text_len) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_tEXt; #endif png_size_t key_len; png_charp new_key; png_debug(1, "in png_write_tEXt\n"); if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0) { png_warning(png_ptr, "Empty keyword in tEXt chunk"); return; } if (text == NULL || *text == '\0') text_len = 0; else text_len = png_strlen(text); /* make sure we include the 0 after the key */ png_write_chunk_start(png_ptr, (png_bytep)png_tEXt, (png_uint_32)key_len+text_len+1); /* * We leave it to the application to meet PNG-1.0 requirements on the * contents of the text. PNG-1.0 through PNG-1.2 discourage the use of * any non-Latin-1 characters except for NEWLINE. ISO PNG will forbid them. * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG. */ png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1); if (text_len) png_write_chunk_data(png_ptr, (png_bytep)text, text_len); png_write_chunk_end(png_ptr); png_free(png_ptr, new_key); } #endif #if defined(PNG_WRITE_zTXt_SUPPORTED) /* write a compressed text chunk */ void /* PRIVATE */ png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text, png_size_t text_len, int compression) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_zTXt; #endif png_size_t key_len; char buf[1]; png_charp new_key; compression_state comp; png_debug(1, "in png_write_zTXt\n"); if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0) { png_warning(png_ptr, "Empty keyword in zTXt chunk"); return; } if (text == NULL || *text == '\0' || compression==PNG_TEXT_COMPRESSION_NONE) { png_write_tEXt(png_ptr, new_key, text, (png_size_t)0); png_free(png_ptr, new_key); return; } text_len = png_strlen(text); png_free(png_ptr, new_key); /* compute the compressed data; do it now for the length */ text_len = png_text_compress(png_ptr, text, text_len, compression, &comp); /* write start of chunk */ png_write_chunk_start(png_ptr, (png_bytep)png_zTXt, (png_uint_32) (key_len+text_len+2)); /* write key */ png_write_chunk_data(png_ptr, (png_bytep)key, key_len + 1); buf[0] = (png_byte)compression; /* write compression */ png_write_chunk_data(png_ptr, (png_bytep)buf, (png_size_t)1); /* write the compressed data */ png_write_compressed_data_out(png_ptr, &comp); /* close the chunk */ png_write_chunk_end(png_ptr); } #endif #if defined(PNG_WRITE_iTXt_SUPPORTED) /* write an iTXt chunk */ void /* PRIVATE */ png_write_iTXt(png_structp png_ptr, int compression, png_charp key, png_charp lang, png_charp lang_key, png_charp text) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_iTXt; #endif png_size_t lang_len, key_len, lang_key_len, text_len; png_charp new_lang, new_key; png_byte cbuf[2]; compression_state comp; png_debug(1, "in png_write_iTXt\n"); if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0) { png_warning(png_ptr, "Empty keyword in iTXt chunk"); return; } if (lang == NULL || (lang_len = png_check_keyword(png_ptr, lang, &new_lang))==0) { png_warning(png_ptr, "Empty language field in iTXt chunk"); new_lang = NULL; lang_len = 0; } if (lang_key == NULL) lang_key_len = 0; else lang_key_len = png_strlen(lang_key); if (text == NULL) text_len = 0; else text_len = png_strlen(text); /* compute the compressed data; do it now for the length */ text_len = png_text_compress(png_ptr, text, text_len, compression-2, &comp); /* make sure we include the compression flag, the compression byte, * and the NULs after the key, lang, and lang_key parts */ png_write_chunk_start(png_ptr, (png_bytep)png_iTXt, (png_uint_32)( 5 /* comp byte, comp flag, terminators for key, lang and lang_key */ + key_len + lang_len + lang_key_len + text_len)); /* * We leave it to the application to meet PNG-1.0 requirements on the * contents of the text. PNG-1.0 through PNG-1.2 discourage the use of * any non-Latin-1 characters except for NEWLINE. ISO PNG will forbid them. * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG. */ png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1); /* set the compression flag */ if (compression == PNG_ITXT_COMPRESSION_NONE || \ compression == PNG_TEXT_COMPRESSION_NONE) cbuf[0] = 0; else /* compression == PNG_ITXT_COMPRESSION_zTXt */ cbuf[0] = 1; /* set the compression method */ cbuf[1] = 0; png_write_chunk_data(png_ptr, cbuf, 2); cbuf[0] = 0; png_write_chunk_data(png_ptr, (new_lang ? (png_bytep)new_lang : cbuf), lang_len + 1); png_write_chunk_data(png_ptr, (lang_key ? (png_bytep)lang_key : cbuf), lang_key_len + 1); png_write_compressed_data_out(png_ptr, &comp); png_write_chunk_end(png_ptr); png_free(png_ptr, new_key); if (new_lang) png_free(png_ptr, new_lang); } #endif #if defined(PNG_WRITE_oFFs_SUPPORTED) /* write the oFFs chunk */ void /* PRIVATE */ png_write_oFFs(png_structp png_ptr, png_int_32 x_offset, png_int_32 y_offset, int unit_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_oFFs; #endif png_byte buf[9]; png_debug(1, "in png_write_oFFs\n"); if (unit_type >= PNG_OFFSET_LAST) png_warning(png_ptr, "Unrecognized unit type for oFFs chunk"); png_save_int_32(buf, x_offset); png_save_int_32(buf + 4, y_offset); buf[8] = (png_byte)unit_type; png_write_chunk(png_ptr, (png_bytep)png_oFFs, buf, (png_size_t)9); } #endif #if defined(PNG_WRITE_pCAL_SUPPORTED) /* write the pCAL chunk (described in the PNG extensions document) */ void /* PRIVATE */ png_write_pCAL(png_structp png_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp units, png_charpp params) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_pCAL; #endif png_size_t purpose_len, units_len, total_len; png_uint_32p params_len; png_byte buf[10]; png_charp new_purpose; int i; png_debug1(1, "in png_write_pCAL (%d parameters)\n", nparams); if (type >= PNG_EQUATION_LAST) png_warning(png_ptr, "Unrecognized equation type for pCAL chunk"); purpose_len = png_check_keyword(png_ptr, purpose, &new_purpose) + 1; png_debug1(3, "pCAL purpose length = %d\n", (int)purpose_len); units_len = png_strlen(units) + (nparams == 0 ? 0 : 1); png_debug1(3, "pCAL units length = %d\n", (int)units_len); total_len = purpose_len + units_len + 10; params_len = (png_uint_32p)png_malloc(png_ptr, (png_uint_32)(nparams *png_sizeof(png_uint_32))); /* Find the length of each parameter, making sure we don't count the null terminator for the last parameter. */ for (i = 0; i < nparams; i++) { params_len[i] = png_strlen(params[i]) + (i == nparams - 1 ? 0 : 1); png_debug2(3, "pCAL parameter %d length = %lu\n", i, params_len[i]); total_len += (png_size_t)params_len[i]; } png_debug1(3, "pCAL total length = %d\n", (int)total_len); png_write_chunk_start(png_ptr, (png_bytep)png_pCAL, (png_uint_32)total_len); png_write_chunk_data(png_ptr, (png_bytep)new_purpose, purpose_len); png_save_int_32(buf, X0); png_save_int_32(buf + 4, X1); buf[8] = (png_byte)type; buf[9] = (png_byte)nparams; png_write_chunk_data(png_ptr, buf, (png_size_t)10); png_write_chunk_data(png_ptr, (png_bytep)units, (png_size_t)units_len); png_free(png_ptr, new_purpose); for (i = 0; i < nparams; i++) { png_write_chunk_data(png_ptr, (png_bytep)params[i], (png_size_t)params_len[i]); } png_free(png_ptr, params_len); png_write_chunk_end(png_ptr); } #endif #if defined(PNG_WRITE_sCAL_SUPPORTED) /* write the sCAL chunk */ #if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) void /* PRIVATE */ png_write_sCAL(png_structp png_ptr, int unit, double width,double height) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_sCAL; #endif png_size_t total_len; char wbuf[32], hbuf[32]; png_byte bunit = unit; png_debug(1, "in png_write_sCAL\n"); #if defined(_WIN32_WCE) /* sprintf() function is not supported on WindowsCE */ { wchar_t wc_buf[32]; swprintf(wc_buf, TEXT("%12.12e"), width); WideCharToMultiByte(CP_ACP, 0, wc_buf, -1, wbuf, 32, NULL, NULL); swprintf(wc_buf, TEXT("%12.12e"), height); WideCharToMultiByte(CP_ACP, 0, wc_buf, -1, hbuf, 32, NULL, NULL); } #else sprintf(wbuf, "%12.12e", width); sprintf(hbuf, "%12.12e", height); #endif total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf); png_debug1(3, "sCAL total length = %d\n", (int)total_len); png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len); png_write_chunk_data(png_ptr, (png_bytep)&bunit, 1); png_write_chunk_data(png_ptr, (png_bytep)wbuf, png_strlen(wbuf)+1); png_write_chunk_data(png_ptr, (png_bytep)hbuf, png_strlen(hbuf)); png_write_chunk_end(png_ptr); } #else #ifdef PNG_FIXED_POINT_SUPPORTED void /* PRIVATE */ png_write_sCAL_s(png_structp png_ptr, int unit, png_charp width, png_charp height) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_sCAL; #endif png_size_t total_len; char wbuf[32], hbuf[32]; png_byte bunit = unit; png_debug(1, "in png_write_sCAL_s\n"); png_strcpy(wbuf,(const char *)width); png_strcpy(hbuf,(const char *)height); total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf); png_debug1(3, "sCAL total length = %d\n", total_len); png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len); png_write_chunk_data(png_ptr, (png_bytep)&bunit, 1); png_write_chunk_data(png_ptr, (png_bytep)wbuf, png_strlen(wbuf)+1); png_write_chunk_data(png_ptr, (png_bytep)hbuf, png_strlen(hbuf)); png_write_chunk_end(png_ptr); } #endif #endif #endif #if defined(PNG_WRITE_pHYs_SUPPORTED) /* write the pHYs chunk */ void /* PRIVATE */ png_write_pHYs(png_structp png_ptr, png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, int unit_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_pHYs; #endif png_byte buf[9]; png_debug(1, "in png_write_pHYs\n"); if (unit_type >= PNG_RESOLUTION_LAST) png_warning(png_ptr, "Unrecognized unit type for pHYs chunk"); png_save_uint_32(buf, x_pixels_per_unit); png_save_uint_32(buf + 4, y_pixels_per_unit); buf[8] = (png_byte)unit_type; png_write_chunk(png_ptr, (png_bytep)png_pHYs, buf, (png_size_t)9); } #endif #if defined(PNG_WRITE_tIME_SUPPORTED) /* Write the tIME chunk. Use either png_convert_from_struct_tm() * or png_convert_from_time_t(), or fill in the structure yourself. */ void /* PRIVATE */ png_write_tIME(png_structp png_ptr, png_timep mod_time) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_tIME; #endif png_byte buf[7]; png_debug(1, "in png_write_tIME\n"); if (mod_time->month > 12 || mod_time->month < 1 || mod_time->day > 31 || mod_time->day < 1 || mod_time->hour > 23 || mod_time->second > 60) { png_warning(png_ptr, "Invalid time specified for tIME chunk"); return; } png_save_uint_16(buf, mod_time->year); buf[2] = mod_time->month; buf[3] = mod_time->day; buf[4] = mod_time->hour; buf[5] = mod_time->minute; buf[6] = mod_time->second; png_write_chunk(png_ptr, (png_bytep)png_tIME, buf, (png_size_t)7); } #endif /* initializes the row writing capability of libpng */ void /* PRIVATE */ png_write_start_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; /* start of interlace block in the y direction */ int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; /* offset to next interlace block in the y direction */ int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; #endif png_size_t buf_size; png_debug(1, "in png_write_start_row\n"); buf_size = (png_size_t)(PNG_ROWBYTES( png_ptr->usr_channels*png_ptr->usr_bit_depth,png_ptr->width)+1); /* set up row buffer */ png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size); png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE; /* set up filtering buffer, if using this filter */ if (png_ptr->do_filter & PNG_FILTER_SUB) { png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB; } /* We only need to keep the previous row if we are using one of these. */ if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH)) { /* set up previous row buffer */ png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size); png_memset(png_ptr->prev_row, 0, buf_size); if (png_ptr->do_filter & PNG_FILTER_UP) { png_ptr->up_row = (png_bytep )png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->up_row[0] = PNG_FILTER_VALUE_UP; } if (png_ptr->do_filter & PNG_FILTER_AVG) { png_ptr->avg_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG; } if (png_ptr->do_filter & PNG_FILTER_PAETH) { png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH; } } #ifdef PNG_WRITE_INTERLACING_SUPPORTED /* if interlaced, we need to set up width and height of pass */ if (png_ptr->interlaced) { if (!(png_ptr->transformations & PNG_INTERLACE)) { png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 - png_pass_ystart[0]) / png_pass_yinc[0]; png_ptr->usr_width = (png_ptr->width + png_pass_inc[0] - 1 - png_pass_start[0]) / png_pass_inc[0]; } else { png_ptr->num_rows = png_ptr->height; png_ptr->usr_width = png_ptr->width; } } else #endif { png_ptr->num_rows = png_ptr->height; png_ptr->usr_width = png_ptr->width; } png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_out = png_ptr->zbuf; } /* Internal use only. Called when finished processing a row of data. */ void /* PRIVATE */ png_write_finish_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; /* start of interlace block in the y direction */ int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; /* offset to next interlace block in the y direction */ int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; #endif int ret; png_debug(1, "in png_write_finish_row\n"); /* next row */ png_ptr->row_number++; /* see if we are done */ if (png_ptr->row_number < png_ptr->num_rows) return; #ifdef PNG_WRITE_INTERLACING_SUPPORTED /* if interlaced, go to next pass */ if (png_ptr->interlaced) { png_ptr->row_number = 0; if (png_ptr->transformations & PNG_INTERLACE) { png_ptr->pass++; } else { /* loop until we find a non-zero width or height pass */ do { png_ptr->pass++; if (png_ptr->pass >= 7) break; png_ptr->usr_width = (png_ptr->width + png_pass_inc[png_ptr->pass] - 1 - png_pass_start[png_ptr->pass]) / png_pass_inc[png_ptr->pass]; png_ptr->num_rows = (png_ptr->height + png_pass_yinc[png_ptr->pass] - 1 - png_pass_ystart[png_ptr->pass]) / png_pass_yinc[png_ptr->pass]; if (png_ptr->transformations & PNG_INTERLACE) break; } while (png_ptr->usr_width == 0 || png_ptr->num_rows == 0); } /* reset the row above the image for the next pass */ if (png_ptr->pass < 7) { if (png_ptr->prev_row != NULL) png_memset(png_ptr->prev_row, 0, (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels* png_ptr->usr_bit_depth,png_ptr->width))+1); return; } } #endif /* if we get here, we've just written the last row, so we need to flush the compressor */ do { /* tell the compressor we are done */ ret = deflate(&png_ptr->zstream, Z_FINISH); /* check for an error */ if (ret == Z_OK) { /* check to see if we need more room */ if (!(png_ptr->zstream.avail_out)) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } } else if (ret != Z_STREAM_END) { if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } } while (ret != Z_STREAM_END); /* write any extra space */ if (png_ptr->zstream.avail_out < png_ptr->zbuf_size) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); } deflateReset(&png_ptr->zstream); } #if defined(PNG_WRITE_INTERLACING_SUPPORTED) /* Pick out the correct pixels for the interlace pass. * The basic idea here is to go through the row with a source * pointer and a destination pointer (sp and dp), and copy the * correct pixels for the pass. As the row gets compacted, * sp will always be >= dp, so we should never overwrite anything. * See the default: case for the easiest code to understand. */ void /* PRIVATE */ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass) { #ifdef PNG_USE_LOCAL_ARRAYS /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; #endif png_debug(1, "in png_do_write_interlace\n"); /* we don't have to do anything on the last pass (6) */ #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL && pass < 6) #else if (pass < 6) #endif { /* each pixel depth is handled separately */ switch (row_info->pixel_depth) { case 1: { png_bytep sp; png_bytep dp; int shift; int d; int value; png_uint_32 i; png_uint_32 row_width = row_info->width; dp = row; d = 0; shift = 7; for (i = png_pass_start[pass]; i < row_width; i += png_pass_inc[pass]) { sp = row + (png_size_t)(i >> 3); value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01; d |= (value << shift); if (shift == 0) { shift = 7; *dp++ = (png_byte)d; d = 0; } else shift--; } if (shift != 7) *dp = (png_byte)d; break; } case 2: { png_bytep sp; png_bytep dp; int shift; int d; int value; png_uint_32 i; png_uint_32 row_width = row_info->width; dp = row; shift = 6; d = 0; for (i = png_pass_start[pass]; i < row_width; i += png_pass_inc[pass]) { sp = row + (png_size_t)(i >> 2); value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03; d |= (value << shift); if (shift == 0) { shift = 6; *dp++ = (png_byte)d; d = 0; } else shift -= 2; } if (shift != 6) *dp = (png_byte)d; break; } case 4: { png_bytep sp; png_bytep dp; int shift; int d; int value; png_uint_32 i; png_uint_32 row_width = row_info->width; dp = row; shift = 4; d = 0; for (i = png_pass_start[pass]; i < row_width; i += png_pass_inc[pass]) { sp = row + (png_size_t)(i >> 1); value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f; d |= (value << shift); if (shift == 0) { shift = 4; *dp++ = (png_byte)d; d = 0; } else shift -= 4; } if (shift != 4) *dp = (png_byte)d; break; } default: { png_bytep sp; png_bytep dp; png_uint_32 i; png_uint_32 row_width = row_info->width; png_size_t pixel_bytes; /* start at the beginning */ dp = row; /* find out how many bytes each pixel takes up */ pixel_bytes = (row_info->pixel_depth >> 3); /* loop through the row, only looking at the pixels that matter */ for (i = png_pass_start[pass]; i < row_width; i += png_pass_inc[pass]) { /* find out where the original pixel is */ sp = row + (png_size_t)i * pixel_bytes; /* move the pixel */ if (dp != sp) png_memcpy(dp, sp, pixel_bytes); /* next pixel */ dp += pixel_bytes; } break; } } /* set new row width */ row_info->width = (row_info->width + png_pass_inc[pass] - 1 - png_pass_start[pass]) / png_pass_inc[pass]; row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_info->width); } } #endif /* This filters the row, chooses which filter to use, if it has not already * been specified by the application, and then writes the row out with the * chosen filter. */ #define PNG_MAXSUM (~((png_uint_32)0) >> 1) #define PNG_HISHIFT 10 #define PNG_LOMASK ((png_uint_32)0xffffL) #define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT)) void /* PRIVATE */ png_write_find_filter(png_structp png_ptr, png_row_infop row_info) { png_bytep prev_row, best_row, row_buf; png_uint_32 mins, bpp; png_byte filter_to_do = png_ptr->do_filter; png_uint_32 row_bytes = row_info->rowbytes; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) int num_p_filters = (int)png_ptr->num_prev_filters; #endif png_debug(1, "in png_write_find_filter\n"); /* find out how many bytes offset each pixel is */ bpp = (row_info->pixel_depth + 7) >> 3; prev_row = png_ptr->prev_row; best_row = row_buf = png_ptr->row_buf; mins = PNG_MAXSUM; /* The prediction method we use is to find which method provides the * smallest value when summing the absolute values of the distances * from zero, using anything >= 128 as negative numbers. This is known * as the "minimum sum of absolute differences" heuristic. Other * heuristics are the "weighted minimum sum of absolute differences" * (experimental and can in theory improve compression), and the "zlib * predictive" method (not implemented yet), which does test compressions * of lines using different filter methods, and then chooses the * (series of) filter(s) that give minimum compressed data size (VERY * computationally expensive). * * GRR 980525: consider also * (1) minimum sum of absolute differences from running average (i.e., * keep running sum of non-absolute differences & count of bytes) * [track dispersion, too? restart average if dispersion too large?] * (1b) minimum sum of absolute differences from sliding average, probably * with window size <= deflate window (usually 32K) * (2) minimum sum of squared differences from zero or running average * (i.e., ~ root-mean-square approach) */ /* We don't need to test the 'no filter' case if this is the only filter * that has been chosen, as it doesn't actually do anything to the data. */ if ((filter_to_do & PNG_FILTER_NONE) && filter_to_do != PNG_FILTER_NONE) { png_bytep rp; png_uint_32 sum = 0; png_uint_32 i; int v; for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++) { v = *rp; sum += (v < 128) ? v : 256 - v; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { png_uint_32 sumhi, sumlo; int j; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; /* Gives us some footroom */ /* Reduce the sum if we match any of the previous rows */ for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } /* Factor in the cost of this filter (this is here for completeness, * but it makes no sense to have a "cost" for the NONE filter, as * it has the minimum possible computational cost - none). */ sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif mins = sum; } /* sub filter */ if (filter_to_do == PNG_FILTER_SUB) /* it's the only filter so no testing is needed */ { png_bytep rp, lp, dp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp; i++, rp++, dp++) { *dp = *rp; } for (lp = row_buf + 1; i < row_bytes; i++, rp++, lp++, dp++) { *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff); } best_row = png_ptr->sub_row; } else if (filter_to_do & PNG_FILTER_SUB) { png_bytep rp, dp, lp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* We temporarily increase the "minimum sum" by the factor we * would reduce the sum of this filter, so that we can do the * early exit comparison without scaling the sum each time. */ if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp; i++, rp++, dp++) { v = *dp = *rp; sum += (v < 128) ? v : 256 - v; } for (lp = row_buf + 1; i < row_bytes; i++, rp++, lp++, dp++) { v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) /* We are already worse, don't continue. */ break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB) { sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { mins = sum; best_row = png_ptr->sub_row; } } /* up filter */ if (filter_to_do == PNG_FILTER_UP) { png_bytep rp, dp, pp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1, pp = prev_row + 1; i < row_bytes; i++, rp++, pp++, dp++) { *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff); } best_row = png_ptr->up_row; } else if (filter_to_do & PNG_FILTER_UP) { png_bytep rp, dp, pp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1, pp = prev_row + 1; i < row_bytes; i++) { v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) /* We are already worse, don't continue. */ break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { mins = sum; best_row = png_ptr->up_row; } } /* avg filter */ if (filter_to_do == PNG_FILTER_AVG) { png_bytep rp, dp, pp, lp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1, pp = prev_row + 1; i < bpp; i++) { *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff); } for (lp = row_buf + 1; i < row_bytes; i++) { *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff); } best_row = png_ptr->avg_row; } else if (filter_to_do & PNG_FILTER_AVG) { png_bytep rp, dp, pp, lp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1, pp = prev_row + 1; i < bpp; i++) { v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff); sum += (v < 128) ? v : 256 - v; } for (lp = row_buf + 1; i < row_bytes; i++) { v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) /* We are already worse, don't continue. */ break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { mins = sum; best_row = png_ptr->avg_row; } } /* Paeth filter */ if (filter_to_do == PNG_FILTER_PAETH) { png_bytep rp, dp, pp, cp, lp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1, pp = prev_row + 1; i < bpp; i++) { *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); } for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++) { int a, b, c, pa, pb, pc, p; b = *pp++; c = *cp++; a = *lp++; p = b - c; pc = a - c; #ifdef PNG_USE_ABS pa = abs(p); pb = abs(pc); pc = abs(p + pc); #else pa = p < 0 ? -p : p; pb = pc < 0 ? -pc : pc; pc = (p + pc) < 0 ? -(p + pc) : p + pc; #endif p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; *dp++ = (png_byte)(((int)*rp++ - p) & 0xff); } best_row = png_ptr->paeth_row; } else if (filter_to_do & PNG_FILTER_PAETH) { png_bytep rp, dp, pp, cp, lp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1, pp = prev_row + 1; i < bpp; i++) { v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); sum += (v < 128) ? v : 256 - v; } for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++) { int a, b, c, pa, pb, pc, p; b = *pp++; c = *cp++; a = *lp++; #ifndef PNG_SLOW_PAETH p = b - c; pc = a - c; #ifdef PNG_USE_ABS pa = abs(p); pb = abs(pc); pc = abs(p + pc); #else pa = p < 0 ? -p : p; pb = pc < 0 ? -pc : pc; pc = (p + pc) < 0 ? -(p + pc) : p + pc; #endif p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; #else /* PNG_SLOW_PAETH */ p = a + b - c; pa = abs(p - a); pb = abs(p - b); pc = abs(p - c); if (pa <= pb && pa <= pc) p = a; else if (pb <= pc) p = b; else p = c; #endif /* PNG_SLOW_PAETH */ v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) /* We are already worse, don't continue. */ break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { best_row = png_ptr->paeth_row; } } /* Do the actual writing of the filtered row data from the chosen filter. */ png_write_filtered_row(png_ptr, best_row); #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* Save the type of filter we picked this time for future calculations */ if (png_ptr->num_prev_filters > 0) { int j; for (j = 1; j < num_p_filters; j++) { png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1]; } png_ptr->prev_filters[j] = best_row[0]; } #endif } /* Do the actual writing of a previously filtered row. */ void /* PRIVATE */ png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row) { png_debug(1, "in png_write_filtered_row\n"); png_debug1(2, "filter = %d\n", filtered_row[0]); /* set up the zlib input buffer */ png_ptr->zstream.next_in = filtered_row; png_ptr->zstream.avail_in = (uInt)png_ptr->row_info.rowbytes + 1; /* repeat until we have compressed all the data */ do { int ret; /* return of zlib */ /* compress the data */ ret = deflate(&png_ptr->zstream, Z_NO_FLUSH); /* check for compression errors */ if (ret != Z_OK) { if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } /* see if it is time to write another IDAT */ if (!(png_ptr->zstream.avail_out)) { /* write the IDAT and reset the zlib output buffer */ png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } /* repeat until all data has been compressed */ } while (png_ptr->zstream.avail_in); /* swap the current and previous rows */ if (png_ptr->prev_row != NULL) { png_bytep tptr; tptr = png_ptr->prev_row; png_ptr->prev_row = png_ptr->row_buf; png_ptr->row_buf = tptr; } /* finish row - updates counters and flushes zlib if last row */ png_write_finish_row(png_ptr); #if defined(PNG_WRITE_FLUSH_SUPPORTED) png_ptr->flush_rows++; if (png_ptr->flush_dist > 0 && png_ptr->flush_rows >= png_ptr->flush_dist) { png_write_flush(png_ptr); } #endif } #endif /* PNG_WRITE_SUPPORTED */ htmldoc-1.8.27/png/README0100664000212600000240000003301610124712606013370 0ustar mikeuserREADME for libpng version 1.2.7 - September 12, 2004 (shared library 12.0) See the note about version numbers near the top of png.h See INSTALL for instructions on how to install libpng. Libpng comes in several distribution formats. Get libpng-*.tar.gz or libpng-*.tar.bz2 if you want UNIX-style line endings in the text files, or lpng*.zip if you want DOS-style line endings. Version 0.89 was the first official release of libpng. Don't let the fact that it's the first release fool you. The libpng library has been in extensive use and testing since mid-1995. By late 1997 it had finally gotten to the stage where there hadn't been significant changes to the API in some time, and people have a bad feeling about libraries with versions < 1.0. Version 1.0.0 was released in March 1998. **** Note that some of the changes to the png_info structure render this version of the library binary incompatible with libpng-0.89 or earlier versions if you are using a shared library. The type of the "filler" parameter for png_set_filler() has changed from png_byte to png_uint_32, which will affect shared-library applications that use this function. To avoid problems with changes to the internals of png_info_struct, new APIs have been made available in 0.95 to avoid direct application access to info_ptr. These functions are the png_set_ and png_get_ functions. These functions should be used when accessing/storing the info_struct data, rather than manipulating it directly, to avoid such problems in the future. It is important to note that the APIs do not make current programs that access the info struct directly incompatible with the new library. However, it is strongly suggested that new programs use the new APIs (as shown in example.c and pngtest.c), and older programs be converted to the new format, to facilitate upgrades in the future. **** Additions since 0.90 include the ability to compile libpng as a Windows DLL, and new APIs for accessing data in the info struct. Experimental functions include the ability to set weighting and cost factors for row filter selection, direct reads of integers from buffers on big-endian processors that support misaligned data access, faster methods of doing alpha composition, and more accurate 16->8 bit color conversion. The additions since 0.89 include the ability to read from a PNG stream which has had some (or all) of the signature bytes read by the calling application. This also allows the reading of embedded PNG streams that do not have the PNG file signature. As well, it is now possible to set the library action on the detection of chunk CRC errors. It is possible to set different actions based on whether the CRC error occurred in a critical or an ancillary chunk. The changes made to the library, and bugs fixed are based on discussions on the PNG-implement mailing list and not on material submitted privately to Guy, Andreas, or Glenn. They will forward any good suggestions to the list. For a detailed description on using libpng, read libpng.txt. For examples of libpng in a program, see example.c and pngtest.c. For usage information and restrictions (what little they are) on libpng, see png.h. For a description on using zlib (the compression library used by libpng) and zlib's restrictions, see zlib.h I have included a general makefile, as well as several machine and compiler specific ones, but you may have to modify one for your own needs. You should use zlib 1.0.4 or later to run this, but it MAY work with versions as old as zlib 0.95. Even so, there are bugs in older zlib versions which can cause the output of invalid compression streams for some images. You will definitely need zlib 1.0.4 or later if you are taking advantage of the MS-DOS "far" structure allocation for the small and medium memory models. You should also note that zlib is a compression library that is useful for more things than just PNG files. You can use zlib as a drop-in replacement for fread() and fwrite() if you are so inclined. zlib should be available at the same place that libpng is, or at. ftp://ftp.info-zip.org/pub/infozip/zlib You may also want a copy of the PNG specification. It is available as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find these at http://www.libpng.org/pub/png/documents/ This code is currently being archived at libpng.sf.net in the [DOWNLOAD] area, and on CompuServe, Lib 20 (PNG SUPPORT) at GO GRAPHSUP. If you can't find it in any of those places, e-mail me, and I'll help you find it. If you have any code changes, requests, problems, etc., please e-mail them to me. Also, I'd appreciate any make files or project files, and any modifications you needed to make to get libpng to compile, along with a #define variable to tell what compiler/system you are on. If you needed to add transformations to libpng, or wish libpng would provide the image in a different way, drop me a note (and code, if possible), so I can consider supporting the transformation. Finally, if you get any warning messages when compiling libpng (note: not zlib), and they are easy to fix, I'd appreciate the fix. Please mention "libpng" somewhere in the subject line. Thanks. This release was created and will be supported by myself (of course based in a large way on Guy's and Andreas' earlier work), and the PNG group. glennrp@users.sourceforge.net png-implement@ccrc.wustl.edu (subscription required; write to majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message). You can't reach Guy, the original libpng author, at the addresses given in previous versions of this document. He and Andreas will read mail addressed to the png-implement list, however. Please do not send general questions about PNG. Send them to the (png-list@ccrc.wustl.edu, subscription required, write to majordomo@ccrc.wustl.edu with "subscribe png-list" in your message). On the other hand, please do not send libpng questions to that address, send them to me or to the png-implement list. I'll get them in the end anyway. If you have a question about something in the PNG specification that is related to using libpng, send it to me. Send me any questions that start with "I was using libpng, and ...". If in doubt, send questions to me. I'll bounce them to others, if necessary. Please do not send suggestions on how to change PNG. We have been discussing PNG for nine years now, and it is official and finished. If you have suggestions for libpng, however, I'll gladly listen. Even if your suggestion is not used immediately, it may be used later. Files in this distribution: ANNOUNCE => Announcement of this version, with recent changes CHANGES => Description of changes between libpng versions KNOWNBUG => List of known bugs and deficiencies LICENSE => License to use and redistribute libpng README => This file TODO => Things not implemented in the current library Y2KINFO => Statement of Y2K compliance example.c => Example code for using libpng functions libpng.3 => manual page for libpng (includes libpng.txt) libpng.txt => Description of libpng and its functions libpngpf.3 => manual page for libpng's private functions png.5 => manual page for the PNG format png.c => Basic interface functions common to library png.h => Library function and interface declarations pngconf.h => System specific library configuration pngasmrd.h => Header file for assembler-coded functions pngerror.c => Error/warning message I/O functions pngget.c => Functions for retrieving info from struct pngmem.c => Memory handling functions pngbar.png => PNG logo, 88x31 pngnow.png => PNG logo, 98x31 pngpread.c => Progressive reading functions pngread.c => Read data/helper high-level functions pngrio.c => Lowest-level data read I/O functions pngrtran.c => Read data transformation functions pngrutil.c => Read data utility functions pngset.c => Functions for storing data into the info_struct pngtest.c => Library test program pngtest.png => Library test sample image pngtrans.c => Common data transformation functions pngwio.c => Lowest-level write I/O functions pngwrite.c => High-level write functions pngwtran.c => Write data transformations pngwutil.c => Write utility functions contrib => Contributions gregbook => source code for PNG reading and writing, from Greg Roelofs' "PNG: The Definitive Guide", O'Reilly, 1999 msvctest => Builds and runs pngtest using a MSVC workspace pngminus => Simple pnm2png and png2pnm programs pngsuite => Test images visupng => Contains a MSVC workspace for VisualPng projects => Contains project files and workspaces for building DLL beos => Contains a Beos workspace for building libpng c5builder => Contains a Borland workspace for building libpng and zlib visualc6 => Contains a Microsoft Visual C++ (MSVC) workspace for building libpng and zlib netware.txt => Contains instructions for downloading a set of project files for building libpng and zlib on Netware. wince.txt => Contains instructions for downloading a Microsoft Visual C++ (Windows CD Toolkit) workspace for building libpng and zlib on WindowsCE scripts => Directory containing scripts for building libpng: descrip.mms => VMS makefile for MMS or MMK makefile.std => Generic UNIX makefile (cc, creates static libpng.a) makefile.linux => Linux/ELF makefile (gcc, creates libpng12.so.0.1.2.7) makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng12.so.0.1.2.7, uses assembler code tuned for Intel MMX platform) makefile.gcc => Generic makefile (gcc, creates static libpng.a) makefile.knr => Archaic UNIX Makefile that converts files with ansi2knr (Requires ansi2knr.c from ftp://ftp.cs.wisc.edu/ghost) makefile.aix => AIX makefile makefile.cygwin => Cygwin/gcc makefile makefile.darwin => Darwin makefile makefile.dec => DEC Alpha UNIX makefile makefile.freebsd => FreeBSD makefile makefile.hpgcc => HPUX makefile using gcc makefile.hpux => HPUX (10.20 and 11.00) makefile makefile.hp64 => HPUX (10.20 and 11.00) makefile, 64 bit makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static) makefile.intel => Intel C/C++ version 4.0 and later libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later makefile.netbsd => NetBSD/cc makefile, PNGGCCRD, makes libpng.so. makefile.ne12bsd => NetBSD/cc makefile, PNGGCCRD, makes libpng12.so makefile.openbsd => OpenBSD makefile makefile.sgi => Silicon Graphics IRIX (cc, creates static lib) makefile.sggcc => Silicon Graphics (gcc, creates libpng12.so.0.1.2.7) makefile.sunos => Sun makefile makefile.solaris => Solaris 2.X makefile (gcc, creates libpng12.so.0.1.2.7) makefile.so9 => Solaris 9 makefile (gcc, creates libpng12.so.0.1.2.7) makefile.32sunu => Sun Ultra 32-bit makefile makefile.64sunu => Sun Ultra 64-bit makefile makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc makefile.mips => MIPS makefile makefile.acorn => Acorn makefile makefile.amiga => Amiga makefile smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler (Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc) makefile.atari => Atari makefile makefile.beos => BEOS makefile for X86 makefile.bor => Borland makefile (uses bcc) makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode) makefile.tc3 => Turbo C 3.0 makefile makefile.dj2 => DJGPP 2 makefile makefile.msc => Microsoft C makefile makefile.vcawin32=> makefile for Microsoft Visual C++ 5.0 and later (uses assembler code tuned for Intel MMX platform) makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later (does not use assembler code) makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def) pngos2.def => OS/2 module definition file used by makefile.os2 makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model makevms.com => VMS build script SCOPTIONS.ppc => Used with smakefile.ppc Good luck, and happy coding. -Glenn Randers-Pehrson (current maintainer) Internet: glennrp@users.sourceforge.net -Andreas Eric Dilger (former maintainer, 1996-1997) Internet: adilger@enel.ucalgary.ca Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/ -Guy Eric Schalnat (original author and former maintainer, 1995-1996) (formerly of Group 42, Inc) Internet: gschal@infinet.com htmldoc-1.8.27/png/pngread.c0100664000212600000240000013236410124712606014302 0ustar mikeuser /* pngread.c - read a PNG file * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file contains routines that an application calls directly to * read a PNG file or stream. */ #define PNG_INTERNAL #include "png.h" /* Create a PNG structure for reading, and allocate any memory needed. */ png_structp PNGAPI png_create_read_struct(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn) { #ifdef PNG_USER_MEM_SUPPORTED return (png_create_read_struct_2(user_png_ver, error_ptr, error_fn, warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL)); } /* Alternate create PNG structure for reading, and allocate any memory needed. */ png_structp PNGAPI png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn) { #endif /* PNG_USER_MEM_SUPPORTED */ png_structp png_ptr; #ifdef PNG_SETJMP_SUPPORTED #ifdef USE_FAR_KEYWORD jmp_buf jmpbuf; #endif #endif int i; png_debug(1, "in png_create_read_struct\n"); #ifdef PNG_USER_MEM_SUPPORTED png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG, (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr); #else png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); #endif if (png_ptr == NULL) return (NULL); #if !defined(PNG_1_0_X) #ifdef PNG_ASSEMBLER_CODE_SUPPORTED png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ #endif #endif /* PNG_1_0_X */ /* added at libpng-1.2.6 */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED png_ptr->user_width_max=PNG_USER_WIDTH_MAX; png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; #endif #ifdef PNG_SETJMP_SUPPORTED #ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf)) #else if (setjmp(png_ptr->jmpbuf)) #endif { png_free(png_ptr, png_ptr->zbuf); png_ptr->zbuf=NULL; #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn, (png_voidp)mem_ptr); #else png_destroy_struct((png_voidp)png_ptr); #endif return (NULL); } #ifdef USE_FAR_KEYWORD png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); #endif #endif #ifdef PNG_USER_MEM_SUPPORTED png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn); #endif png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn); i=0; do { if(user_png_ver[i] != png_libpng_ver[i]) png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; } while (png_libpng_ver[i++]); if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH) { /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so * we must recompile any applications that use any older library version. * For versions after libpng 1.0, we will be compatible, so we need * only check the first digit. */ if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] || (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) || (user_png_ver[0] == '0' && user_png_ver[2] < '9')) { #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) char msg[80]; if (user_png_ver) { sprintf(msg, "Application was compiled with png.h from libpng-%.20s", user_png_ver); png_warning(png_ptr, msg); } sprintf(msg, "Application is running with png.c from libpng-%.20s", png_libpng_ver); png_warning(png_ptr, msg); #endif #ifdef PNG_ERROR_NUMBERS_SUPPORTED png_ptr->flags=0; #endif png_error(png_ptr, "Incompatible libpng version in application and library"); } } /* initialize zbuf - compression buffer */ png_ptr->zbuf_size = PNG_ZBUF_SIZE; png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); png_ptr->zstream.zalloc = png_zalloc; png_ptr->zstream.zfree = png_zfree; png_ptr->zstream.opaque = (voidpf)png_ptr; switch (inflateInit(&png_ptr->zstream)) { case Z_OK: /* Do nothing */ break; case Z_MEM_ERROR: case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error"); break; case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error"); break; default: png_error(png_ptr, "Unknown zlib error"); } png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL); #ifdef PNG_SETJMP_SUPPORTED /* Applications that neglect to set up their own setjmp() and then encounter a png_error() will longjmp here. Since the jmpbuf is then meaningless we abort instead of returning. */ #ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf)) PNG_ABORT(); png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); #else if (setjmp(png_ptr->jmpbuf)) PNG_ABORT(); #endif #endif return (png_ptr); } /* Initialize PNG structure for reading, and allocate any memory needed. This interface is deprecated in favour of the png_create_read_struct(), and it will eventually disappear. */ #undef png_read_init void PNGAPI png_read_init(png_structp png_ptr) { /* We only come here via pre-1.0.7-compiled applications */ png_read_init_2(png_ptr, "1.0.6 or earlier", 0, 0); } void PNGAPI png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t png_info_size) { /* We only come here via pre-1.0.12-compiled applications */ #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) if(png_sizeof(png_struct) > png_struct_size || png_sizeof(png_info) > png_info_size) { char msg[80]; png_ptr->warning_fn=NULL; if (user_png_ver) { sprintf(msg, "Application was compiled with png.h from libpng-%.20s", user_png_ver); png_warning(png_ptr, msg); } sprintf(msg, "Application is running with png.c from libpng-%.20s", png_libpng_ver); png_warning(png_ptr, msg); } #endif if(png_sizeof(png_struct) > png_struct_size) { png_ptr->error_fn=NULL; #ifdef PNG_ERROR_NUMBERS_SUPPORTED png_ptr->flags=0; #endif png_error(png_ptr, "The png struct allocated by the application for reading is too small."); } if(png_sizeof(png_info) > png_info_size) { png_ptr->error_fn=NULL; #ifdef PNG_ERROR_NUMBERS_SUPPORTED png_ptr->flags=0; #endif png_error(png_ptr, "The info struct allocated by application for reading is too small."); } png_read_init_3(&png_ptr, user_png_ver, png_struct_size); } void PNGAPI png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver, png_size_t png_struct_size) { #ifdef PNG_SETJMP_SUPPORTED jmp_buf tmp_jmp; /* to save current jump buffer */ #endif int i=0; png_structp png_ptr=*ptr_ptr; do { if(user_png_ver[i] != png_libpng_ver[i]) { #ifdef PNG_LEGACY_SUPPORTED png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; #else png_ptr->warning_fn=NULL; png_warning(png_ptr, "Application uses deprecated png_read_init() and should be recompiled."); break; #endif } } while (png_libpng_ver[i++]); png_debug(1, "in png_read_init_3\n"); #ifdef PNG_SETJMP_SUPPORTED /* save jump buffer and error functions */ png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); #endif if(png_sizeof(png_struct) > png_struct_size) { png_destroy_struct(png_ptr); *ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); png_ptr = *ptr_ptr; } /* reset all variables to 0 */ png_memset(png_ptr, 0, png_sizeof (png_struct)); #ifdef PNG_SETJMP_SUPPORTED /* restore jump buffer */ png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); #endif /* added at libpng-1.2.6 */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED png_ptr->user_width_max=PNG_USER_WIDTH_MAX; png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; #endif /* initialize zbuf - compression buffer */ png_ptr->zbuf_size = PNG_ZBUF_SIZE; png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); png_ptr->zstream.zalloc = png_zalloc; png_ptr->zstream.zfree = png_zfree; png_ptr->zstream.opaque = (voidpf)png_ptr; switch (inflateInit(&png_ptr->zstream)) { case Z_OK: /* Do nothing */ break; case Z_MEM_ERROR: case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory"); break; case Z_VERSION_ERROR: png_error(png_ptr, "zlib version"); break; default: png_error(png_ptr, "Unknown zlib error"); } png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL); } #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* Read the information before the actual image data. This has been * changed in v0.90 to allow reading a file that already has the magic * bytes read from the stream. You can tell libpng how many bytes have * been read from the beginning of the stream (up to the maximum of 8) * via png_set_sig_bytes(), and we will only check the remaining bytes * here. The application can then have access to the signature bytes we * read if it is determined that this isn't a valid PNG file. */ void PNGAPI png_read_info(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_read_info\n"); /* If we haven't checked all of the PNG signature bytes, do so now. */ if (png_ptr->sig_bytes < 8) { png_size_t num_checked = png_ptr->sig_bytes, num_to_check = 8 - num_checked; png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check); png_ptr->sig_bytes = 8; if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) { if (num_checked < 4 && png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) png_error(png_ptr, "Not a PNG file"); else png_error(png_ptr, "PNG file corrupted by ASCII conversion"); } if (num_checked < 3) png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE; } for(;;) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IHDR; PNG_IDAT; PNG_IEND; PNG_PLTE; #if defined(PNG_READ_bKGD_SUPPORTED) PNG_bKGD; #endif #if defined(PNG_READ_cHRM_SUPPORTED) PNG_cHRM; #endif #if defined(PNG_READ_gAMA_SUPPORTED) PNG_gAMA; #endif #if defined(PNG_READ_hIST_SUPPORTED) PNG_hIST; #endif #if defined(PNG_READ_iCCP_SUPPORTED) PNG_iCCP; #endif #if defined(PNG_READ_iTXt_SUPPORTED) PNG_iTXt; #endif #if defined(PNG_READ_oFFs_SUPPORTED) PNG_oFFs; #endif #if defined(PNG_READ_pCAL_SUPPORTED) PNG_pCAL; #endif #if defined(PNG_READ_pHYs_SUPPORTED) PNG_pHYs; #endif #if defined(PNG_READ_sBIT_SUPPORTED) PNG_sBIT; #endif #if defined(PNG_READ_sCAL_SUPPORTED) PNG_sCAL; #endif #if defined(PNG_READ_sPLT_SUPPORTED) PNG_sPLT; #endif #if defined(PNG_READ_sRGB_SUPPORTED) PNG_sRGB; #endif #if defined(PNG_READ_tEXt_SUPPORTED) PNG_tEXt; #endif #if defined(PNG_READ_tIME_SUPPORTED) PNG_tIME; #endif #if defined(PNG_READ_tRNS_SUPPORTED) PNG_tRNS; #endif #if defined(PNG_READ_zTXt_SUPPORTED) PNG_zTXt; #endif #endif /* PNG_GLOBAL_ARRAYS */ png_byte chunk_length[4]; png_uint_32 length; png_read_data(png_ptr, chunk_length, 4); length = png_get_uint_31(png_ptr,chunk_length); png_reset_crc(png_ptr); png_crc_read(png_ptr, png_ptr->chunk_name, 4); png_debug2(0, "Reading %s chunk, length=%lu.\n", png_ptr->chunk_name, length); /* This should be a binary subdivision search or a hash for * matching the chunk name rather than a linear search. */ if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) png_handle_IHDR(png_ptr, info_ptr, length); else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) png_handle_IEND(png_ptr, info_ptr, length); #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) { if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) png_ptr->mode |= PNG_HAVE_IDAT; png_handle_unknown(png_ptr, info_ptr, length); if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) png_ptr->mode |= PNG_HAVE_PLTE; else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) { if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before IDAT"); else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && !(png_ptr->mode & PNG_HAVE_PLTE)) png_error(png_ptr, "Missing PLTE before IDAT"); break; } } #endif else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) png_handle_PLTE(png_ptr, info_ptr, length); else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) { if (!(png_ptr->mode & PNG_HAVE_IHDR)) png_error(png_ptr, "Missing IHDR before IDAT"); else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && !(png_ptr->mode & PNG_HAVE_PLTE)) png_error(png_ptr, "Missing PLTE before IDAT"); png_ptr->idat_size = length; png_ptr->mode |= PNG_HAVE_IDAT; break; } #if defined(PNG_READ_bKGD_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) png_handle_bKGD(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_cHRM_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) png_handle_cHRM(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_gAMA_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) png_handle_gAMA(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_hIST_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) png_handle_hIST(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_oFFs_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) png_handle_oFFs(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_pCAL_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) png_handle_pCAL(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sCAL_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) png_handle_sCAL(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_pHYs_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) png_handle_pHYs(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sBIT_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) png_handle_sBIT(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sRGB_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) png_handle_sRGB(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_iCCP_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) png_handle_iCCP(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sPLT_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) png_handle_sPLT(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_tEXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) png_handle_tEXt(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_tIME_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) png_handle_tIME(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_tRNS_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) png_handle_tRNS(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_zTXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) png_handle_zTXt(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_iTXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) png_handle_iTXt(png_ptr, info_ptr, length); #endif else png_handle_unknown(png_ptr, info_ptr, length); } } #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ /* optional call to update the users info_ptr structure */ void PNGAPI png_read_update_info(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_read_update_info\n"); if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) png_read_start_row(png_ptr); else png_warning(png_ptr, "Ignoring extra png_read_update_info() call; row buffer not reallocated"); png_read_transform_info(png_ptr, info_ptr); } #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* Initialize palette, background, etc, after transformations * are set, but before any reading takes place. This allows * the user to obtain a gamma-corrected palette, for example. * If the user doesn't call this, we will do it ourselves. */ void PNGAPI png_start_read_image(png_structp png_ptr) { png_debug(1, "in png_start_read_image\n"); if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) png_read_start_row(png_ptr); } #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED void PNGAPI png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; const int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; const int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; #endif int ret; png_debug2(1, "in png_read_row (row %lu, pass %d)\n", png_ptr->row_number, png_ptr->pass); if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) png_read_start_row(png_ptr); if (png_ptr->row_number == 0 && png_ptr->pass == 0) { /* check for transforms that have been set but were defined out */ #if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED) if (png_ptr->transformations & PNG_INVERT_MONO) png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined."); #endif #if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED) if (png_ptr->transformations & PNG_FILLER) png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined."); #endif #if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && !defined(PNG_READ_PACKSWAP_SUPPORTED) if (png_ptr->transformations & PNG_PACKSWAP) png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined."); #endif #if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED) if (png_ptr->transformations & PNG_PACK) png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined."); #endif #if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) if (png_ptr->transformations & PNG_SHIFT) png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined."); #endif #if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED) if (png_ptr->transformations & PNG_BGR) png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined."); #endif #if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED) if (png_ptr->transformations & PNG_SWAP_BYTES) png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined."); #endif } #if defined(PNG_READ_INTERLACING_SUPPORTED) /* if interlaced and we do not need a new row, combine row and return */ if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) { switch (png_ptr->pass) { case 0: if (png_ptr->row_number & 0x07) { if (dsp_row != NULL) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); png_read_finish_row(png_ptr); return; } break; case 1: if ((png_ptr->row_number & 0x07) || png_ptr->width < 5) { if (dsp_row != NULL) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); png_read_finish_row(png_ptr); return; } break; case 2: if ((png_ptr->row_number & 0x07) != 4) { if (dsp_row != NULL && (png_ptr->row_number & 4)) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); png_read_finish_row(png_ptr); return; } break; case 3: if ((png_ptr->row_number & 3) || png_ptr->width < 3) { if (dsp_row != NULL) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); png_read_finish_row(png_ptr); return; } break; case 4: if ((png_ptr->row_number & 3) != 2) { if (dsp_row != NULL && (png_ptr->row_number & 2)) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); png_read_finish_row(png_ptr); return; } break; case 5: if ((png_ptr->row_number & 1) || png_ptr->width < 2) { if (dsp_row != NULL) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); png_read_finish_row(png_ptr); return; } break; case 6: if (!(png_ptr->row_number & 1)) { png_read_finish_row(png_ptr); return; } break; } } #endif if (!(png_ptr->mode & PNG_HAVE_IDAT)) png_error(png_ptr, "Invalid attempt to read row data"); png_ptr->zstream.next_out = png_ptr->row_buf; png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; do { if (!(png_ptr->zstream.avail_in)) { while (!png_ptr->idat_size) { png_byte chunk_length[4]; png_crc_finish(png_ptr, 0); png_read_data(png_ptr, chunk_length, 4); png_ptr->idat_size = png_get_uint_31(png_ptr,chunk_length); png_reset_crc(png_ptr); png_crc_read(png_ptr, png_ptr->chunk_name, 4); if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) png_error(png_ptr, "Not enough image data"); } png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_in = png_ptr->zbuf; if (png_ptr->zbuf_size > png_ptr->idat_size) png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size; png_crc_read(png_ptr, png_ptr->zbuf, (png_size_t)png_ptr->zstream.avail_in); png_ptr->idat_size -= png_ptr->zstream.avail_in; } ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); if (ret == Z_STREAM_END) { if (png_ptr->zstream.avail_out || png_ptr->zstream.avail_in || png_ptr->idat_size) png_error(png_ptr, "Extra compressed data"); png_ptr->mode |= PNG_AFTER_IDAT; png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; break; } if (ret != Z_OK) png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg : "Decompression error"); } while (png_ptr->zstream.avail_out); png_ptr->row_info.color_type = png_ptr->color_type; png_ptr->row_info.width = png_ptr->iwidth; png_ptr->row_info.channels = png_ptr->channels; png_ptr->row_info.bit_depth = png_ptr->bit_depth; png_ptr->row_info.pixel_depth = png_ptr->pixel_depth; png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->row_info.width); if(png_ptr->row_buf[0]) png_read_filter_row(png_ptr, &(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->prev_row + 1, (int)(png_ptr->row_buf[0])); png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1); #if defined(PNG_MNG_FEATURES_SUPPORTED) if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING)) { /* Intrapixel differencing */ png_do_read_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1); } #endif if (png_ptr->transformations) png_do_read_transformations(png_ptr); #if defined(PNG_READ_INTERLACING_SUPPORTED) /* blow up interlaced rows to full size */ if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) { if (png_ptr->pass < 6) /* old interface (pre-1.0.9): png_do_read_interlace(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); */ png_do_read_interlace(png_ptr); if (dsp_row != NULL) png_combine_row(png_ptr, dsp_row, png_pass_dsp_mask[png_ptr->pass]); if (row != NULL) png_combine_row(png_ptr, row, png_pass_mask[png_ptr->pass]); } else #endif { if (row != NULL) png_combine_row(png_ptr, row, 0xff); if (dsp_row != NULL) png_combine_row(png_ptr, dsp_row, 0xff); } png_read_finish_row(png_ptr); if (png_ptr->read_row_fn != NULL) (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass); } #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* Read one or more rows of image data. If the image is interlaced, * and png_set_interlace_handling() has been called, the rows need to * contain the contents of the rows from the previous pass. If the * image has alpha or transparency, and png_handle_alpha()[*] has been * called, the rows contents must be initialized to the contents of the * screen. * * "row" holds the actual image, and pixels are placed in it * as they arrive. If the image is displayed after each pass, it will * appear to "sparkle" in. "display_row" can be used to display a * "chunky" progressive image, with finer detail added as it becomes * available. If you do not want this "chunky" display, you may pass * NULL for display_row. If you do not want the sparkle display, and * you have not called png_handle_alpha(), you may pass NULL for rows. * If you have called png_handle_alpha(), and the image has either an * alpha channel or a transparency chunk, you must provide a buffer for * rows. In this case, you do not have to provide a display_row buffer * also, but you may. If the image is not interlaced, or if you have * not called png_set_interlace_handling(), the display_row buffer will * be ignored, so pass NULL to it. * * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.7 */ void PNGAPI png_read_rows(png_structp png_ptr, png_bytepp row, png_bytepp display_row, png_uint_32 num_rows) { png_uint_32 i; png_bytepp rp; png_bytepp dp; png_debug(1, "in png_read_rows\n"); rp = row; dp = display_row; if (rp != NULL && dp != NULL) for (i = 0; i < num_rows; i++) { png_bytep rptr = *rp++; png_bytep dptr = *dp++; png_read_row(png_ptr, rptr, dptr); } else if(rp != NULL) for (i = 0; i < num_rows; i++) { png_bytep rptr = *rp; png_read_row(png_ptr, rptr, png_bytep_NULL); rp++; } else if(dp != NULL) for (i = 0; i < num_rows; i++) { png_bytep dptr = *dp; png_read_row(png_ptr, png_bytep_NULL, dptr); dp++; } } #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* Read the entire image. If the image has an alpha channel or a tRNS * chunk, and you have called png_handle_alpha()[*], you will need to * initialize the image to the current image that PNG will be overlaying. * We set the num_rows again here, in case it was incorrectly set in * png_read_start_row() by a call to png_read_update_info() or * png_start_read_image() if png_set_interlace_handling() wasn't called * prior to either of these functions like it should have been. You can * only call this function once. If you desire to have an image for * each pass of a interlaced image, use png_read_rows() instead. * * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.7 */ void PNGAPI png_read_image(png_structp png_ptr, png_bytepp image) { png_uint_32 i,image_height; int pass, j; png_bytepp rp; png_debug(1, "in png_read_image\n"); #ifdef PNG_READ_INTERLACING_SUPPORTED pass = png_set_interlace_handling(png_ptr); #else if (png_ptr->interlaced) png_error(png_ptr, "Cannot read interlaced image -- interlace handler disabled."); pass = 1; #endif image_height=png_ptr->height; png_ptr->num_rows = image_height; /* Make sure this is set correctly */ for (j = 0; j < pass; j++) { rp = image; for (i = 0; i < image_height; i++) { png_read_row(png_ptr, *rp, png_bytep_NULL); rp++; } } } #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* Read the end of the PNG file. Will not read past the end of the * file, will verify the end is accurate, and will read any comments * or time information at the end of the file, if info is not NULL. */ void PNGAPI png_read_end(png_structp png_ptr, png_infop info_ptr) { png_byte chunk_length[4]; png_uint_32 length; png_debug(1, "in png_read_end\n"); png_crc_finish(png_ptr, 0); /* Finish off CRC from last IDAT chunk */ do { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IHDR; PNG_IDAT; PNG_IEND; PNG_PLTE; #if defined(PNG_READ_bKGD_SUPPORTED) PNG_bKGD; #endif #if defined(PNG_READ_cHRM_SUPPORTED) PNG_cHRM; #endif #if defined(PNG_READ_gAMA_SUPPORTED) PNG_gAMA; #endif #if defined(PNG_READ_hIST_SUPPORTED) PNG_hIST; #endif #if defined(PNG_READ_iCCP_SUPPORTED) PNG_iCCP; #endif #if defined(PNG_READ_iTXt_SUPPORTED) PNG_iTXt; #endif #if defined(PNG_READ_oFFs_SUPPORTED) PNG_oFFs; #endif #if defined(PNG_READ_pCAL_SUPPORTED) PNG_pCAL; #endif #if defined(PNG_READ_pHYs_SUPPORTED) PNG_pHYs; #endif #if defined(PNG_READ_sBIT_SUPPORTED) PNG_sBIT; #endif #if defined(PNG_READ_sCAL_SUPPORTED) PNG_sCAL; #endif #if defined(PNG_READ_sPLT_SUPPORTED) PNG_sPLT; #endif #if defined(PNG_READ_sRGB_SUPPORTED) PNG_sRGB; #endif #if defined(PNG_READ_tEXt_SUPPORTED) PNG_tEXt; #endif #if defined(PNG_READ_tIME_SUPPORTED) PNG_tIME; #endif #if defined(PNG_READ_tRNS_SUPPORTED) PNG_tRNS; #endif #if defined(PNG_READ_zTXt_SUPPORTED) PNG_zTXt; #endif #endif /* PNG_GLOBAL_ARRAYS */ png_read_data(png_ptr, chunk_length, 4); length = png_get_uint_31(png_ptr,chunk_length); png_reset_crc(png_ptr); png_crc_read(png_ptr, png_ptr->chunk_name, 4); png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name); if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) png_handle_IHDR(png_ptr, info_ptr, length); else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) png_handle_IEND(png_ptr, info_ptr, length); #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) { if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) { if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT) png_error(png_ptr, "Too many IDAT's found"); } else png_ptr->mode |= PNG_AFTER_IDAT; png_handle_unknown(png_ptr, info_ptr, length); if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) png_ptr->mode |= PNG_HAVE_PLTE; } #endif else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) { /* Zero length IDATs are legal after the last IDAT has been * read, but not after other chunks have been read. */ if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT) png_error(png_ptr, "Too many IDAT's found"); png_crc_finish(png_ptr, length); } else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) png_handle_PLTE(png_ptr, info_ptr, length); #if defined(PNG_READ_bKGD_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) png_handle_bKGD(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_cHRM_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) png_handle_cHRM(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_gAMA_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) png_handle_gAMA(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_hIST_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) png_handle_hIST(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_oFFs_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) png_handle_oFFs(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_pCAL_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) png_handle_pCAL(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sCAL_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) png_handle_sCAL(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_pHYs_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) png_handle_pHYs(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sBIT_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) png_handle_sBIT(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sRGB_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) png_handle_sRGB(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_iCCP_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) png_handle_iCCP(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_sPLT_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) png_handle_sPLT(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_tEXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) png_handle_tEXt(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_tIME_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) png_handle_tIME(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_tRNS_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) png_handle_tRNS(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_zTXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) png_handle_zTXt(png_ptr, info_ptr, length); #endif #if defined(PNG_READ_iTXt_SUPPORTED) else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) png_handle_iTXt(png_ptr, info_ptr, length); #endif else png_handle_unknown(png_ptr, info_ptr, length); } while (!(png_ptr->mode & PNG_HAVE_IEND)); } #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ /* free all memory used by the read */ void PNGAPI png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr) { png_structp png_ptr = NULL; png_infop info_ptr = NULL, end_info_ptr = NULL; #ifdef PNG_USER_MEM_SUPPORTED png_free_ptr free_fn; png_voidp mem_ptr; #endif png_debug(1, "in png_destroy_read_struct\n"); if (png_ptr_ptr != NULL) png_ptr = *png_ptr_ptr; if (info_ptr_ptr != NULL) info_ptr = *info_ptr_ptr; if (end_info_ptr_ptr != NULL) end_info_ptr = *end_info_ptr_ptr; #ifdef PNG_USER_MEM_SUPPORTED free_fn = png_ptr->free_fn; mem_ptr = png_ptr->mem_ptr; #endif png_read_destroy(png_ptr, info_ptr, end_info_ptr); if (info_ptr != NULL) { #if defined(PNG_TEXT_SUPPORTED) png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); #endif #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn, (png_voidp)mem_ptr); #else png_destroy_struct((png_voidp)info_ptr); #endif *info_ptr_ptr = NULL; } if (end_info_ptr != NULL) { #if defined(PNG_READ_TEXT_SUPPORTED) png_free_data(png_ptr, end_info_ptr, PNG_FREE_TEXT, -1); #endif #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)end_info_ptr, (png_free_ptr)free_fn, (png_voidp)mem_ptr); #else png_destroy_struct((png_voidp)end_info_ptr); #endif *end_info_ptr_ptr = NULL; } if (png_ptr != NULL) { #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn, (png_voidp)mem_ptr); #else png_destroy_struct((png_voidp)png_ptr); #endif *png_ptr_ptr = NULL; } } /* free all memory used by the read (old method) */ void /* PRIVATE */ png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr) { #ifdef PNG_SETJMP_SUPPORTED jmp_buf tmp_jmp; #endif png_error_ptr error_fn; png_error_ptr warning_fn; png_voidp error_ptr; #ifdef PNG_USER_MEM_SUPPORTED png_free_ptr free_fn; #endif png_debug(1, "in png_read_destroy\n"); if (info_ptr != NULL) png_info_destroy(png_ptr, info_ptr); if (end_info_ptr != NULL) png_info_destroy(png_ptr, end_info_ptr); png_free(png_ptr, png_ptr->zbuf); png_free(png_ptr, png_ptr->big_row_buf); png_free(png_ptr, png_ptr->prev_row); #if defined(PNG_READ_DITHER_SUPPORTED) png_free(png_ptr, png_ptr->palette_lookup); png_free(png_ptr, png_ptr->dither_index); #endif #if defined(PNG_READ_GAMMA_SUPPORTED) png_free(png_ptr, png_ptr->gamma_table); #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) png_free(png_ptr, png_ptr->gamma_from_1); png_free(png_ptr, png_ptr->gamma_to_1); #endif #ifdef PNG_FREE_ME_SUPPORTED if (png_ptr->free_me & PNG_FREE_PLTE) png_zfree(png_ptr, png_ptr->palette); png_ptr->free_me &= ~PNG_FREE_PLTE; #else if (png_ptr->flags & PNG_FLAG_FREE_PLTE) png_zfree(png_ptr, png_ptr->palette); png_ptr->flags &= ~PNG_FLAG_FREE_PLTE; #endif #if defined(PNG_tRNS_SUPPORTED) || \ defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) #ifdef PNG_FREE_ME_SUPPORTED if (png_ptr->free_me & PNG_FREE_TRNS) png_free(png_ptr, png_ptr->trans); png_ptr->free_me &= ~PNG_FREE_TRNS; #else if (png_ptr->flags & PNG_FLAG_FREE_TRNS) png_free(png_ptr, png_ptr->trans); png_ptr->flags &= ~PNG_FLAG_FREE_TRNS; #endif #endif #if defined(PNG_READ_hIST_SUPPORTED) #ifdef PNG_FREE_ME_SUPPORTED if (png_ptr->free_me & PNG_FREE_HIST) png_free(png_ptr, png_ptr->hist); png_ptr->free_me &= ~PNG_FREE_HIST; #else if (png_ptr->flags & PNG_FLAG_FREE_HIST) png_free(png_ptr, png_ptr->hist); png_ptr->flags &= ~PNG_FLAG_FREE_HIST; #endif #endif #if defined(PNG_READ_GAMMA_SUPPORTED) if (png_ptr->gamma_16_table != NULL) { int i; int istop = (1 << (8 - png_ptr->gamma_shift)); for (i = 0; i < istop; i++) { png_free(png_ptr, png_ptr->gamma_16_table[i]); } png_free(png_ptr, png_ptr->gamma_16_table); } #if defined(PNG_READ_BACKGROUND_SUPPORTED) if (png_ptr->gamma_16_from_1 != NULL) { int i; int istop = (1 << (8 - png_ptr->gamma_shift)); for (i = 0; i < istop; i++) { png_free(png_ptr, png_ptr->gamma_16_from_1[i]); } png_free(png_ptr, png_ptr->gamma_16_from_1); } if (png_ptr->gamma_16_to_1 != NULL) { int i; int istop = (1 << (8 - png_ptr->gamma_shift)); for (i = 0; i < istop; i++) { png_free(png_ptr, png_ptr->gamma_16_to_1[i]); } png_free(png_ptr, png_ptr->gamma_16_to_1); } #endif #endif #if defined(PNG_TIME_RFC1123_SUPPORTED) png_free(png_ptr, png_ptr->time_buffer); #endif inflateEnd(&png_ptr->zstream); #ifdef PNG_PROGRESSIVE_READ_SUPPORTED png_free(png_ptr, png_ptr->save_buffer); #endif #ifdef PNG_PROGRESSIVE_READ_SUPPORTED #ifdef PNG_TEXT_SUPPORTED png_free(png_ptr, png_ptr->current_text); #endif /* PNG_TEXT_SUPPORTED */ #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ /* Save the important info out of the png_struct, in case it is * being used again. */ #ifdef PNG_SETJMP_SUPPORTED png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); #endif error_fn = png_ptr->error_fn; warning_fn = png_ptr->warning_fn; error_ptr = png_ptr->error_ptr; #ifdef PNG_USER_MEM_SUPPORTED free_fn = png_ptr->free_fn; #endif png_memset(png_ptr, 0, png_sizeof (png_struct)); png_ptr->error_fn = error_fn; png_ptr->warning_fn = warning_fn; png_ptr->error_ptr = error_ptr; #ifdef PNG_USER_MEM_SUPPORTED png_ptr->free_fn = free_fn; #endif #ifdef PNG_SETJMP_SUPPORTED png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); #endif } void PNGAPI png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn) { png_ptr->read_row_fn = read_row_fn; } #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED #if defined(PNG_INFO_IMAGE_SUPPORTED) void PNGAPI png_read_png(png_structp png_ptr, png_infop info_ptr, int transforms, voidp params) { int row; #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) /* invert the alpha channel from opacity to transparency */ if (transforms & PNG_TRANSFORM_INVERT_ALPHA) png_set_invert_alpha(png_ptr); #endif /* png_read_info() gives us all of the information from the * PNG file before the first IDAT (image data chunk). */ png_read_info(png_ptr, info_ptr); if (info_ptr->height > PNG_UINT_32_MAX/png_sizeof(png_bytep)) png_error(png_ptr,"Image is too high to process with png_read_png()"); /* -------------- image transformations start here ------------------- */ #if defined(PNG_READ_16_TO_8_SUPPORTED) /* tell libpng to strip 16 bit/color files down to 8 bits per color */ if (transforms & PNG_TRANSFORM_STRIP_16) png_set_strip_16(png_ptr); #endif #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) /* Strip alpha bytes from the input data without combining with * the background (not recommended). */ if (transforms & PNG_TRANSFORM_STRIP_ALPHA) png_set_strip_alpha(png_ptr); #endif #if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED) /* Extract multiple pixels with bit depths of 1, 2, or 4 from a single * byte into separate bytes (useful for paletted and grayscale images). */ if (transforms & PNG_TRANSFORM_PACKING) png_set_packing(png_ptr); #endif #if defined(PNG_READ_PACKSWAP_SUPPORTED) /* Change the order of packed pixels to least significant bit first * (not useful if you are using png_set_packing). */ if (transforms & PNG_TRANSFORM_PACKSWAP) png_set_packswap(png_ptr); #endif #if defined(PNG_READ_EXPAND_SUPPORTED) /* Expand paletted colors into true RGB triplets * Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel * Expand paletted or RGB images with transparency to full alpha * channels so the data will be available as RGBA quartets. */ if (transforms & PNG_TRANSFORM_EXPAND) if ((png_ptr->bit_depth < 8) || (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) || (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) png_set_expand(png_ptr); #endif /* We don't handle background color or gamma transformation or dithering. */ #if defined(PNG_READ_INVERT_SUPPORTED) /* invert monochrome files to have 0 as white and 1 as black */ if (transforms & PNG_TRANSFORM_INVERT_MONO) png_set_invert_mono(png_ptr); #endif #if defined(PNG_READ_SHIFT_SUPPORTED) /* If you want to shift the pixel values from the range [0,255] or * [0,65535] to the original [0,7] or [0,31], or whatever range the * colors were originally in: */ if ((transforms & PNG_TRANSFORM_SHIFT) && png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT)) { png_color_8p sig_bit; png_get_sBIT(png_ptr, info_ptr, &sig_bit); png_set_shift(png_ptr, sig_bit); } #endif #if defined(PNG_READ_BGR_SUPPORTED) /* flip the RGB pixels to BGR (or RGBA to BGRA) */ if (transforms & PNG_TRANSFORM_BGR) png_set_bgr(png_ptr); #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) /* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */ if (transforms & PNG_TRANSFORM_SWAP_ALPHA) png_set_swap_alpha(png_ptr); #endif #if defined(PNG_READ_SWAP_SUPPORTED) /* swap bytes of 16 bit files to least significant byte first */ if (transforms & PNG_TRANSFORM_SWAP_ENDIAN) png_set_swap(png_ptr); #endif /* We don't handle adding filler bytes */ /* Optional call to gamma correct and add the background to the palette * and update info structure. REQUIRED if you are expecting libpng to * update the palette for you (i.e., you selected such a transform above). */ png_read_update_info(png_ptr, info_ptr); /* -------------- image transformations end here ------------------- */ #ifdef PNG_FREE_ME_SUPPORTED png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0); #endif if(info_ptr->row_pointers == NULL) { info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr, info_ptr->height * png_sizeof(png_bytep)); #ifdef PNG_FREE_ME_SUPPORTED info_ptr->free_me |= PNG_FREE_ROWS; #endif for (row = 0; row < (int)info_ptr->height; row++) { info_ptr->row_pointers[row] = (png_bytep)png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr)); } } png_read_image(png_ptr, info_ptr->row_pointers); info_ptr->valid |= PNG_INFO_IDAT; /* read rest of file, and get additional chunks in info_ptr - REQUIRED */ png_read_end(png_ptr, info_ptr); if(transforms == 0 || params == NULL) /* quiet compiler warnings */ return; } #endif #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ htmldoc-1.8.27/png/libpngpf.30100664000212600000240000006063110124712606014400 0ustar mikeuser.TH LIBPNGPF 3 "September 12, 2004" .SH NAME libpng \- Portable Network Graphics (PNG) Reference Library 1.2.7 (private functions) .SH SYNOPSIS \fB\fB#include \fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_build_gamma_table (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_build_grayscale_palette (int \fP\fI\fP\fIbit_depth\fP\fB\fP\fB, png_colorp \fI\fIpalette\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_calculate_crc (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIptr\fP\fB\fP\fB, png_size_t \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_check_chunk_name (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fI\fIchunk_name\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_size_t png_check_keyword (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIkey\fP\fB\fP\fB, png_charpp \fI\fInew_key\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_combine_row (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, int \fI\fImask\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_correct_palette (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_colorp \fP\fI\fP\fIpalette\fP\fB\fP\fB, int \fI\fInum_palette\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBint png_crc_error (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBint png_crc_finish (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIskip\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_crc_read (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIbuf\fP\fB\fP\fB, png_size_t \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_voidp png_create_struct (int \fI\fItype\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_voidp png_create_struct_2 (int \fP\fI\fP\fItype\fP\fB\fP\fB, png_malloc_ptr \fP\fI\fP\fImalloc_fn\fP\fB\fP\fB, png_voidp \fI\fImem_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_charp png_decompress_chunk (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, int \fP\fI\fP\fIcomp_type\fP\fB\fP\fB, png_charp \fP\fI\fP\fIchunkdata\fP\fB\fP\fB, png_size_t \fP\fI\fP\fIchunklength\fP\fB\fP\fB, png_size_t \fP\fI\fP\fIprefix_length\fP\fB\fP\fB, png_size_t \fI\fI*data_length\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_destroy_struct (png_voidp \fI\fIstruct_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_destroy_struct_2 (png_voidp \fP\fI\fP\fIstruct_ptr\fP\fB\fP\fB, png_free_ptr \fP\fI\fP\fIfree_fn\fP\fB\fP\fB, png_voidp \fI\fImem_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_background (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_color_16p \fP\fI\fP\fItrans_values\fP\fB\fP\fB, png_color_16p \fP\fI\fP\fIbackground\fP\fB\fP\fB, png_color_16p \fP\fI\fP\fIbackground_1\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIgamma_table\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIgamma_from_1\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIgamma_to_1\fP\fB\fP\fB, png_uint_16pp \fP\fI\fP\fIgamma_16\fP\fB\fP\fB, png_uint_16pp \fP\fI\fP\fIgamma_16_from_1\fP\fB\fP\fB, png_uint_16pp \fP\fI\fP\fIgamma_16_to_1\fP\fB\fP\fB, int \fI\fIgamma_shift\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_bgr (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_chop (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_dither (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIpalette_lookup\fP\fB\fP\fB, png_bytep \fI\fIdither_lookup\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_expand (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_color_16p \fI\fItrans_value\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_expand_palette (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_colorp \fP\fI\fP\fIpalette\fP\fB\fP\fB, png_bytep \fP\fI\fP\fItrans\fP\fB\fP\fB, int \fI\fInum_trans\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_gamma (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIgamma_table\fP\fB\fP\fB, png_uint_16pp \fP\fI\fP\fIgamma_16_table\fP\fB\fP\fB, int \fI\fIgamma_shift\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_gray_to_rgb (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_invert (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_pack (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_uint_32 \fI\fIbit_depth\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_packswap (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_read_filler (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIfiller\fP\fB\fP\fB, png_uint_32 \fI\fIflags\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_read_interlace (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, int \fP\fI\fP\fIpass\fP\fB\fP\fB, png_uint_32 \fI\fItransformations\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_read_invert_alpha (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_read_swap_alpha (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_read_transformations (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBint png_do_rgb_to_gray (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_shift (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_color_8p \fI\fIbit_depth\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_strip_filler (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_uint_32 \fI\fIflags\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_swap (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_unpack (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_unshift (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_color_8p \fI\fIsig_bits\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_write_interlace (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, int \fI\fIpass\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_write_invert_alpha (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_write_swap_alpha (png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_do_write_transformations (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid *png_far_to_near (png_structp png_ptr,png_voidp \fP\fI\fP\fIptr\fP\fB\fP\fB, int \fI\fIcheck\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_flush (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_int_32 png_get_int_32 (png_bytep \fI\fIbuf\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_uint_16 png_get_uint_16 (png_bytep \fI\fIbuf\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_uint_32 png_get_uint_31 (png_bytep \fI\fIbuf\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBpng_uint_32 png_get_uint_32 (png_bytep \fI\fIbuf\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_bKGD (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_cHRM (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_gAMA (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_hIST (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_IEND (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_IHDR (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_iCCP (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_iTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_oFFs (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_pCAL (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_pHYs (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_PLTE (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_sBIT (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_sCAL (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_sPLT (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_sRGB (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_tEXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_tIME (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_tRNS (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_unknown (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_handle_zTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_info_destroy (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_init_mmx_flags (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_init_read_transformations (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_process_IDAT_data (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIbuffer\fP\fB\fP\fB, png_size_t \fI\fIbuffer_length\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_process_some_data (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_check_crc (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_crc_finish (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_crc_skip (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_fill_buffer (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIbuffer\fP\fB\fP\fB, png_size_t \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_handle_tEXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_handle_unknown (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_handle_zTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_have_end (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_have_info (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_have_row (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fI\fIrow\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_process_row (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_read_chunk (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_read_end (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_read_IDAT (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_read_sig (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_read_tEXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_read_zTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_restore_buffer (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIbuffer\fP\fB\fP\fB, png_size_t \fI\fIbuffer_length\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_push_save_buffer (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_read_data (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIdata\fP\fB\fP\fB, png_size_t \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_read_filter_row (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_row_infop \fP\fI\fP\fIrow_info\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIrow\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIprev_row\fP\fB\fP\fB, int \fI\fIfilter\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_read_finish_row (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_read_push_finish_row (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_read_start_row (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_read_transform_info (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fI\fIinfo_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_reset_crc (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_save_int_32 (png_bytep \fP\fI\fP\fIbuf\fP\fB\fP\fB, png_int_32 \fI\fIi\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_save_uint_16 (png_bytep \fP\fI\fP\fIbuf\fP\fB\fP\fB, unsigned int \fI\fIi\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_save_uint_32 (png_bytep \fP\fI\fP\fIbuf\fP\fB\fP\fB, png_uint_32 \fI\fIi\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBint png_set_text_2 (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_infop \fP\fI\fP\fIinfo_ptr\fP\fB\fP\fB, png_textp \fP\fI\fP\fItext_ptr\fP\fB\fP\fB, int \fI\fInum_text)\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_cHRM (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, double \fP\fI\fP\fIwhite_x\fP\fB\fP\fB, double \fP\fI\fP\fIwhite_y\fP\fB\fP\fB, double \fP\fI\fP\fIred_x\fP\fB\fP\fB, double \fP\fI\fP\fIred_y\fP\fB\fP\fB, double \fP\fI\fP\fIgreen_x\fP\fB\fP\fB, double \fP\fI\fP\fIgreen_y\fP\fB\fP\fB, double \fP\fI\fP\fIblue_x\fP\fB\fP\fB, double \fI\fIblue_y\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_cHRM_fixed (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIwhite_x\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIwhite_y\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIred_x\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIred_y\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIgreen_x\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIgreen_y\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIblue_x\fP\fB\fP\fB, png_uint_32 \fI\fIblue_y\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_data (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIdata\fP\fB\fP\fB, png_size_t \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_filtered_row (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fI\fIfiltered_row\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_find_filter (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_row_infop \fI\fIrow_info\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_finish_row (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_gAMA (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, double \fI\fIfile_gamma\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_gAMA_fixed (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fI\fIint_file_gamma\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_hIST (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_16p \fP\fI\fP\fIhist\fP\fB\fP\fB, int \fI\fInum_hist\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_iCCP (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIname\fP\fB\fP\fB, int \fP\fI\fP\fIcompression_type\fP\fB\fP\fB, png_charp \fP\fI\fP\fIprofile\fP\fB\fP\fB, int \fI\fIproflen\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_IDAT (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fIdata\fP\fB\fP\fB, png_size_t \fI\fIlength\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_IEND (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_IHDR (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIwidth\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIheight\fP\fB\fP\fB, int \fP\fI\fP\fIbit_depth\fP\fB\fP\fB, int \fP\fI\fP\fIcolor_type\fP\fB\fP\fB, int \fP\fI\fP\fIcompression_type\fP\fB\fP\fB, int \fP\fI\fP\fIfilter_type\fP\fB\fP\fB, int \fI\fIinterlace_type\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_iTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, int \fP\fI\fP\fIcompression\fP\fB\fP\fB, png_charp \fP\fI\fP\fIkey\fP\fB\fP\fB, png_charp \fP\fI\fP\fIlang\fP\fB\fP\fB, png_charp \fP\fI\fP\fItranslated_key\fP\fB\fP\fB, png_charp \fI\fItext)\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_oFFs (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIx_offset\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIy_offset\fP\fB\fP\fB, int \fI\fIunit_type\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_pCAL (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIpurpose\fP\fB\fP\fB, png_int_32 \fP\fI\fP\fIX0\fP\fB\fP\fB, png_int_32 \fP\fI\fP\fIX1\fP\fB\fP\fB, int \fP\fI\fP\fItype\fP\fB\fP\fB, int \fP\fI\fP\fInparams\fP\fB\fP\fB, png_charp \fP\fI\fP\fIunits\fP\fB\fP\fB, png_charpp \fI\fIparams\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_pHYs (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIx_pixels_per_unit\fP\fB\fP\fB, png_uint_32 \fP\fI\fP\fIy_pixels_per_unit\fP\fB\fP\fB, int \fI\fIunit_type\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_PLTE (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_colorp \fP\fI\fP\fIpalette\fP\fB\fP\fB, png_uint_32 \fI\fInum_pal\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_sBIT (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_color_8p \fP\fI\fP\fIsbit\fP\fB\fP\fB, int \fI\fIcolor_type\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_sCAL (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIunit\fP\fB\fP\fB, double \fP\fI\fP\fIwidth\fP\fB\fP\fB, double \fI\fIheight\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_sCAL_s (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIunit\fP\fB\fP\fB, png_charp \fP\fI\fP\fIwidth\fP\fB\fP\fB, png_charp \fI\fIheight\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_sig (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_sRGB (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, int \fI\fIintent\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_sPLT (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_spalette_p \fI\fIpalette\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_start_row (png_structp \fI\fIpng_ptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_tEXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIkey\fP\fB\fP\fB, png_charp \fP\fI\fP\fItext\fP\fB\fP\fB, png_size_t \fI\fItext_len\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_tIME (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_timep \fI\fImod_time\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_tRNS (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_bytep \fP\fI\fP\fItrans\fP\fB\fP\fB, png_color_16p \fP\fI\fP\fIvalues\fP\fB\fP\fB, int \fP\fI\fP\fInumber\fP\fB\fP\fB, int \fI\fIcolor_type\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_write_zTXt (png_structp \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, png_charp \fP\fI\fP\fIkey\fP\fB\fP\fB, png_charp \fP\fI\fP\fItext\fP\fB\fP\fB, png_size_t \fP\fI\fP\fItext_len\fP\fB\fP\fB, int \fI\fIcompression\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoidpf png_zalloc (voidpf \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, uInt \fP\fI\fP\fIitems\fP\fB\fP\fB, uInt \fI\fIsize\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB \fB\fBvoid png_zfree (voidpf \fP\fI\fP\fIpng_ptr\fP\fB\fP\fB, voidpf \fI\fIptr\fP\fB\fP\fB);\fP\fP \fI\fB \fI\fB\fI\fB \fI\fB .SH DESCRIPTION The functions listed above are used privately by libpng and are not recommended for use by applications. They are not "exported" to applications using shared libraries. They are listed alphabetically here as an aid to libpng maintainers. See png.h for more information on these functions. .SH SEE ALSO libpng(3), png(5) .SH AUTHOR Glenn Randers-Pehrson htmldoc-1.8.27/png/pngmem.c0100664000212600000240000004033510124712606014141 0ustar mikeuser /* pngmem.c - stub functions for memory allocation * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * This file provides a location for all memory allocation. Users who * need special memory handling are expected to supply replacement * functions for png_malloc() and png_free(), and to use * png_create_read_struct_2() and png_create_write_struct_2() to * identify the replacement functions. */ #define PNG_INTERNAL #include "png.h" /* Borland DOS special memory handler */ #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) /* if you change this, be sure to change the one in png.h also */ /* Allocate memory for a png_struct. The malloc and memset can be replaced by a single call to calloc() if this is thought to improve performance. */ png_voidp /* PRIVATE */ png_create_struct(int type) { #ifdef PNG_USER_MEM_SUPPORTED return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL)); } /* Alternate version of png_create_struct, for use with user-defined malloc. */ png_voidp /* PRIVATE */ png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr) { #endif /* PNG_USER_MEM_SUPPORTED */ png_size_t size; png_voidp struct_ptr; if (type == PNG_STRUCT_INFO) size = png_sizeof(png_info); else if (type == PNG_STRUCT_PNG) size = png_sizeof(png_struct); else return (png_get_copyright(NULL)); #ifdef PNG_USER_MEM_SUPPORTED if(malloc_fn != NULL) { png_struct dummy_struct; png_structp png_ptr = &dummy_struct; png_ptr->mem_ptr=mem_ptr; struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size); } else #endif /* PNG_USER_MEM_SUPPORTED */ struct_ptr = (png_voidp)farmalloc(size); if (struct_ptr != NULL) png_memset(struct_ptr, 0, size); return (struct_ptr); } /* Free memory allocated by a png_create_struct() call */ void /* PRIVATE */ png_destroy_struct(png_voidp struct_ptr) { #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL); } /* Free memory allocated by a png_create_struct() call */ void /* PRIVATE */ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, png_voidp mem_ptr) { #endif if (struct_ptr != NULL) { #ifdef PNG_USER_MEM_SUPPORTED if(free_fn != NULL) { png_struct dummy_struct; png_structp png_ptr = &dummy_struct; png_ptr->mem_ptr=mem_ptr; (*(free_fn))(png_ptr, struct_ptr); return; } #endif /* PNG_USER_MEM_SUPPORTED */ farfree (struct_ptr); } } /* Allocate memory. For reasonable files, size should never exceed * 64K. However, zlib may allocate more then 64K if you don't tell * it not to. See zconf.h and png.h for more information. zlib does * need to allocate exactly 64K, so whatever you call here must * have the ability to do that. * * Borland seems to have a problem in DOS mode for exactly 64K. * It gives you a segment with an offset of 8 (perhaps to store its * memory stuff). zlib doesn't like this at all, so we have to * detect and deal with it. This code should not be needed in * Windows or OS/2 modes, and only in 16 bit mode. This code has * been updated by Alexander Lehmann for version 0.89 to waste less * memory. * * Note that we can't use png_size_t for the "size" declaration, * since on some systems a png_size_t is a 16-bit quantity, and as a * result, we would be truncating potentially larger memory requests * (which should cause a fatal error) and introducing major problems. */ png_voidp PNGAPI png_malloc(png_structp png_ptr, png_uint_32 size) { png_voidp ret; if (png_ptr == NULL || size == 0) return (NULL); #ifdef PNG_USER_MEM_SUPPORTED if(png_ptr->malloc_fn != NULL) ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); else ret = (png_malloc_default(png_ptr, size)); if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out of memory!"); return (ret); } png_voidp PNGAPI png_malloc_default(png_structp png_ptr, png_uint_32 size) { png_voidp ret; #endif /* PNG_USER_MEM_SUPPORTED */ #ifdef PNG_MAX_MALLOC_64K if (size > (png_uint_32)65536L) { png_warning(png_ptr, "Cannot Allocate > 64K"); ret = NULL; } else #endif if (size != (size_t)size) ret = NULL; else if (size == (png_uint_32)65536L) { if (png_ptr->offset_table == NULL) { /* try to see if we need to do any of this fancy stuff */ ret = farmalloc(size); if (ret == NULL || ((png_size_t)ret & 0xffff)) { int num_blocks; png_uint_32 total_size; png_bytep table; int i; png_byte huge * hptr; if (ret != NULL) { farfree(ret); ret = NULL; } if(png_ptr->zlib_window_bits > 14) num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14)); else num_blocks = 1; if (png_ptr->zlib_mem_level >= 7) num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7)); else num_blocks++; total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16; table = farmalloc(total_size); if (table == NULL) { #ifndef PNG_USER_MEM_SUPPORTED if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out Of Memory."); /* Note "O" and "M" */ else png_warning(png_ptr, "Out Of Memory."); #endif return (NULL); } if ((png_size_t)table & 0xfff0) { #ifndef PNG_USER_MEM_SUPPORTED if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Farmalloc didn't return normalized pointer"); else png_warning(png_ptr, "Farmalloc didn't return normalized pointer"); #endif return (NULL); } png_ptr->offset_table = table; png_ptr->offset_table_ptr = farmalloc(num_blocks * png_sizeof (png_bytep)); if (png_ptr->offset_table_ptr == NULL) { #ifndef PNG_USER_MEM_SUPPORTED if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out Of memory."); /* Note "O" and "M" */ else png_warning(png_ptr, "Out Of memory."); #endif return (NULL); } hptr = (png_byte huge *)table; if ((png_size_t)hptr & 0xf) { hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L); hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */ } for (i = 0; i < num_blocks; i++) { png_ptr->offset_table_ptr[i] = (png_bytep)hptr; hptr = hptr + (png_uint_32)65536L; /* "+=" fails on TC++3.0 */ } png_ptr->offset_table_number = num_blocks; png_ptr->offset_table_count = 0; png_ptr->offset_table_count_free = 0; } } if (png_ptr->offset_table_count >= png_ptr->offset_table_number) { #ifndef PNG_USER_MEM_SUPPORTED if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out of Memory."); /* Note "o" and "M" */ else png_warning(png_ptr, "Out of Memory."); #endif return (NULL); } ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++]; } else ret = farmalloc(size); #ifndef PNG_USER_MEM_SUPPORTED if (ret == NULL) { if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */ else png_warning(png_ptr, "Out of memory."); /* Note "o" and "m" */ } #endif return (ret); } /* free a pointer allocated by png_malloc(). In the default configuration, png_ptr is not used, but is passed in case it is needed. If ptr is NULL, return without taking any action. */ void PNGAPI png_free(png_structp png_ptr, png_voidp ptr) { if (png_ptr == NULL || ptr == NULL) return; #ifdef PNG_USER_MEM_SUPPORTED if (png_ptr->free_fn != NULL) { (*(png_ptr->free_fn))(png_ptr, ptr); return; } else png_free_default(png_ptr, ptr); } void PNGAPI png_free_default(png_structp png_ptr, png_voidp ptr) { #endif /* PNG_USER_MEM_SUPPORTED */ if (png_ptr->offset_table != NULL) { int i; for (i = 0; i < png_ptr->offset_table_count; i++) { if (ptr == png_ptr->offset_table_ptr[i]) { ptr = NULL; png_ptr->offset_table_count_free++; break; } } if (png_ptr->offset_table_count_free == png_ptr->offset_table_count) { farfree(png_ptr->offset_table); farfree(png_ptr->offset_table_ptr); png_ptr->offset_table = NULL; png_ptr->offset_table_ptr = NULL; } } if (ptr != NULL) { farfree(ptr); } } #else /* Not the Borland DOS special memory handler */ /* Allocate memory for a png_struct or a png_info. The malloc and memset can be replaced by a single call to calloc() if this is thought to improve performance noticably. */ png_voidp /* PRIVATE */ png_create_struct(int type) { #ifdef PNG_USER_MEM_SUPPORTED return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL)); } /* Allocate memory for a png_struct or a png_info. The malloc and memset can be replaced by a single call to calloc() if this is thought to improve performance noticably. */ png_voidp /* PRIVATE */ png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr) { #endif /* PNG_USER_MEM_SUPPORTED */ png_size_t size; png_voidp struct_ptr; if (type == PNG_STRUCT_INFO) size = png_sizeof(png_info); else if (type == PNG_STRUCT_PNG) size = png_sizeof(png_struct); else return (NULL); #ifdef PNG_USER_MEM_SUPPORTED if(malloc_fn != NULL) { png_struct dummy_struct; png_structp png_ptr = &dummy_struct; png_ptr->mem_ptr=mem_ptr; struct_ptr = (*(malloc_fn))(png_ptr, size); if (struct_ptr != NULL) png_memset(struct_ptr, 0, size); return (struct_ptr); } #endif /* PNG_USER_MEM_SUPPORTED */ #if defined(__TURBOC__) && !defined(__FLAT__) struct_ptr = (png_voidp)farmalloc(size); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) struct_ptr = (png_voidp)halloc(size,1); # else struct_ptr = (png_voidp)malloc(size); # endif #endif if (struct_ptr != NULL) png_memset(struct_ptr, 0, size); return (struct_ptr); } /* Free memory allocated by a png_create_struct() call */ void /* PRIVATE */ png_destroy_struct(png_voidp struct_ptr) { #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL); } /* Free memory allocated by a png_create_struct() call */ void /* PRIVATE */ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, png_voidp mem_ptr) { #endif /* PNG_USER_MEM_SUPPORTED */ if (struct_ptr != NULL) { #ifdef PNG_USER_MEM_SUPPORTED if(free_fn != NULL) { png_struct dummy_struct; png_structp png_ptr = &dummy_struct; png_ptr->mem_ptr=mem_ptr; (*(free_fn))(png_ptr, struct_ptr); return; } #endif /* PNG_USER_MEM_SUPPORTED */ #if defined(__TURBOC__) && !defined(__FLAT__) farfree(struct_ptr); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) hfree(struct_ptr); # else free(struct_ptr); # endif #endif } } /* Allocate memory. For reasonable files, size should never exceed 64K. However, zlib may allocate more then 64K if you don't tell it not to. See zconf.h and png.h for more information. zlib does need to allocate exactly 64K, so whatever you call here must have the ability to do that. */ png_voidp PNGAPI png_malloc(png_structp png_ptr, png_uint_32 size) { png_voidp ret; #ifdef PNG_USER_MEM_SUPPORTED if (png_ptr == NULL || size == 0) return (NULL); if(png_ptr->malloc_fn != NULL) ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); else ret = (png_malloc_default(png_ptr, size)); if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out of Memory!"); return (ret); } png_voidp PNGAPI png_malloc_default(png_structp png_ptr, png_uint_32 size) { png_voidp ret; #endif /* PNG_USER_MEM_SUPPORTED */ if (png_ptr == NULL || size == 0) return (NULL); #ifdef PNG_MAX_MALLOC_64K if (size > (png_uint_32)65536L) { #ifndef PNG_USER_MEM_SUPPORTED if(png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Cannot Allocate > 64K"); else #endif return NULL; } #endif /* Check for overflow */ #if defined(__TURBOC__) && !defined(__FLAT__) if (size != (unsigned long)size) ret = NULL; else ret = farmalloc(size); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) if (size != (unsigned long)size) ret = NULL; else ret = halloc(size, 1); # else if (size != (size_t)size) ret = NULL; else ret = malloc((size_t)size); # endif #endif #ifndef PNG_USER_MEM_SUPPORTED if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out of Memory"); #endif return (ret); } /* Free a pointer allocated by png_malloc(). If ptr is NULL, return without taking any action. */ void PNGAPI png_free(png_structp png_ptr, png_voidp ptr) { if (png_ptr == NULL || ptr == NULL) return; #ifdef PNG_USER_MEM_SUPPORTED if (png_ptr->free_fn != NULL) { (*(png_ptr->free_fn))(png_ptr, ptr); return; } else png_free_default(png_ptr, ptr); } void PNGAPI png_free_default(png_structp png_ptr, png_voidp ptr) { if (png_ptr == NULL || ptr == NULL) return; #endif /* PNG_USER_MEM_SUPPORTED */ #if defined(__TURBOC__) && !defined(__FLAT__) farfree(ptr); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) hfree(ptr); # else free(ptr); # endif #endif } #endif /* Not Borland DOS special memory handler */ #if defined(PNG_1_0_X) # define png_malloc_warn png_malloc #else /* This function was added at libpng version 1.2.3. The png_malloc_warn() * function will set up png_malloc() to issue a png_warning and return NULL * instead of issuing a png_error, if it fails to allocate the requested * memory. */ png_voidp PNGAPI png_malloc_warn(png_structp png_ptr, png_uint_32 size) { png_voidp ptr; png_uint_32 save_flags=png_ptr->flags; png_ptr->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK; ptr = (png_voidp)png_malloc((png_structp)png_ptr, size); png_ptr->flags=save_flags; return(ptr); } #endif png_voidp PNGAPI png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2, png_uint_32 length) { png_size_t size; size = (png_size_t)length; if ((png_uint_32)size != length) png_error(png_ptr,"Overflow in png_memcpy_check."); return(png_memcpy (s1, s2, size)); } png_voidp PNGAPI png_memset_check (png_structp png_ptr, png_voidp s1, int value, png_uint_32 length) { png_size_t size; size = (png_size_t)length; if ((png_uint_32)size != length) png_error(png_ptr,"Overflow in png_memset_check."); return (png_memset (s1, value, size)); } #ifdef PNG_USER_MEM_SUPPORTED /* This function is called when the application wants to use another method * of allocating and freeing memory. */ void PNGAPI png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn) { png_ptr->mem_ptr = mem_ptr; png_ptr->malloc_fn = malloc_fn; png_ptr->free_fn = free_fn; } /* This function returns a pointer to the mem_ptr associated with the user * functions. The application should free any memory associated with this * pointer before png_write_destroy and png_read_destroy are called. */ png_voidp PNGAPI png_get_mem_ptr(png_structp png_ptr) { return ((png_voidp)png_ptr->mem_ptr); } #endif /* PNG_USER_MEM_SUPPORTED */ htmldoc-1.8.27/png/png.c0100664000212600000240000005616110124712606013446 0ustar mikeuser /* png.c - location for general purpose libpng functions * * libpng version 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ #define PNG_INTERNAL #define PNG_NO_EXTERN #include "png.h" /* Generate a compiler error if there is an old png.h in the search path. */ typedef version_1_2_7 Your_png_h_is_not_version_1_2_7; /* Version information for C files. This had better match the version * string defined in png.h. */ #ifdef PNG_USE_GLOBAL_ARRAYS /* png_libpng_ver was changed to a function in version 1.0.5c */ const char png_libpng_ver[18] = PNG_LIBPNG_VER_STRING; /* png_sig was changed to a function in version 1.0.5c */ /* Place to hold the signature string for a PNG file. */ const png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; /* Invoke global declarations for constant strings for known chunk types */ PNG_IHDR; PNG_IDAT; PNG_IEND; PNG_PLTE; PNG_bKGD; PNG_cHRM; PNG_gAMA; PNG_hIST; PNG_iCCP; PNG_iTXt; PNG_oFFs; PNG_pCAL; PNG_sCAL; PNG_pHYs; PNG_sBIT; PNG_sPLT; PNG_sRGB; PNG_tEXt; PNG_tIME; PNG_tRNS; PNG_zTXt; /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* start of interlace block */ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* offset to next interlace block */ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* start of interlace block in the y direction */ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; /* offset to next interlace block in the y direction */ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; /* width of interlace block (used in assembler routines only) */ #ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; #endif /* Height of interlace block. This is not currently used - if you need * it, uncomment it here and in png.h const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1}; */ /* Mask to determine which pixels are valid in a pass */ const int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; /* Mask to determine which pixels to overwrite while displaying */ const int FARDATA png_pass_dsp_mask[] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; #endif /* Tells libpng that we have already handled the first "num_bytes" bytes * of the PNG file signature. If the PNG data is embedded into another * stream we can set num_bytes = 8 so that libpng will not attempt to read * or write any of the magic bytes before it starts on the IHDR. */ void PNGAPI png_set_sig_bytes(png_structp png_ptr, int num_bytes) { png_debug(1, "in png_set_sig_bytes\n"); if (num_bytes > 8) png_error(png_ptr, "Too many bytes for PNG signature."); png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes); } /* Checks whether the supplied bytes match the PNG signature. We allow * checking less than the full 8-byte signature so that those apps that * already read the first few bytes of a file to determine the file type * can simply check the remaining bytes for extra assurance. Returns * an integer less than, equal to, or greater than zero if sig is found, * respectively, to be less than, to match, or be greater than the correct * PNG signature (this is the same behaviour as strcmp, memcmp, etc). */ int PNGAPI png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check) { png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; if (num_to_check > 8) num_to_check = 8; else if (num_to_check < 1) return (0); if (start > 7) return (0); if (start + num_to_check > 8) num_to_check = 8 - start; return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check))); } /* (Obsolete) function to check signature bytes. It does not allow one * to check a partial signature. This function might be removed in the * future - use png_sig_cmp(). Returns true (nonzero) if the file is a PNG. */ int PNGAPI png_check_sig(png_bytep sig, int num) { return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num)); } /* Function to allocate memory for zlib and clear it to 0. */ #ifdef PNG_1_0_X voidpf PNGAPI #else voidpf /* private */ #endif png_zalloc(voidpf png_ptr, uInt items, uInt size) { png_voidp ptr; png_structp p=png_ptr; png_uint_32 save_flags=p->flags; png_uint_32 num_bytes; if (items > PNG_UINT_32_MAX/size) { png_warning (png_ptr, "Potential overflow in png_zalloc()"); return (NULL); } num_bytes = (png_uint_32)items * size; p->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK; ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes); p->flags=save_flags; #if defined(PNG_1_0_X) && !defined(PNG_NO_ZALLOC_ZERO) if (ptr == NULL) return ((voidpf)ptr); if (num_bytes > (png_uint_32)0x8000L) { png_memset(ptr, 0, (png_size_t)0x8000L); png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0, (png_size_t)(num_bytes - (png_uint_32)0x8000L)); } else { png_memset(ptr, 0, (png_size_t)num_bytes); } #endif return ((voidpf)ptr); } /* function to free memory for zlib */ #ifdef PNG_1_0_X void PNGAPI #else void /* private */ #endif png_zfree(voidpf png_ptr, voidpf ptr) { png_free((png_structp)png_ptr, (png_voidp)ptr); } /* Reset the CRC variable to 32 bits of 1's. Care must be taken * in case CRC is > 32 bits to leave the top bits 0. */ void /* PRIVATE */ png_reset_crc(png_structp png_ptr) { png_ptr->crc = crc32(0, Z_NULL, 0); } /* Calculate the CRC over a section of data. We can only pass as * much data to this routine as the largest single buffer size. We * also check that this data will actually be used before going to the * trouble of calculating it. */ void /* PRIVATE */ png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length) { int need_crc = 1; if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ { if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) need_crc = 0; } else /* critical */ { if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) need_crc = 0; } if (need_crc) png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length); } /* Allocate the memory for an info_struct for the application. We don't * really need the png_ptr, but it could potentially be useful in the * future. This should be used in favour of malloc(png_sizeof(png_info)) * and png_info_init() so that applications that want to use a shared * libpng don't have to be recompiled if png_info changes size. */ png_infop PNGAPI png_create_info_struct(png_structp png_ptr) { png_infop info_ptr; png_debug(1, "in png_create_info_struct\n"); if(png_ptr == NULL) return (NULL); #ifdef PNG_USER_MEM_SUPPORTED info_ptr = (png_infop)png_create_struct_2(PNG_STRUCT_INFO, png_ptr->malloc_fn, png_ptr->mem_ptr); #else info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO); #endif if (info_ptr != NULL) png_info_init_3(&info_ptr, png_sizeof(png_info)); return (info_ptr); } /* This function frees the memory associated with a single info struct. * Normally, one would use either png_destroy_read_struct() or * png_destroy_write_struct() to free an info struct, but this may be * useful for some applications. */ void PNGAPI png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr) { png_infop info_ptr = NULL; png_debug(1, "in png_destroy_info_struct\n"); if (info_ptr_ptr != NULL) info_ptr = *info_ptr_ptr; if (info_ptr != NULL) { png_info_destroy(png_ptr, info_ptr); #ifdef PNG_USER_MEM_SUPPORTED png_destroy_struct_2((png_voidp)info_ptr, png_ptr->free_fn, png_ptr->mem_ptr); #else png_destroy_struct((png_voidp)info_ptr); #endif *info_ptr_ptr = NULL; } } /* Initialize the info structure. This is now an internal function (0.89) * and applications using it are urged to use png_create_info_struct() * instead. */ #undef png_info_init void PNGAPI png_info_init(png_infop info_ptr) { /* We only come here via pre-1.0.12-compiled applications */ png_info_init_3(&info_ptr, 0); } void PNGAPI png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size) { png_infop info_ptr = *ptr_ptr; png_debug(1, "in png_info_init_3\n"); if(png_sizeof(png_info) > png_info_struct_size) { png_destroy_struct(info_ptr); info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO); *ptr_ptr = info_ptr; } /* set everything to 0 */ png_memset(info_ptr, 0, png_sizeof (png_info)); } #ifdef PNG_FREE_ME_SUPPORTED void PNGAPI png_data_freer(png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask) { png_debug(1, "in png_data_freer\n"); if (png_ptr == NULL || info_ptr == NULL) return; if(freer == PNG_DESTROY_WILL_FREE_DATA) info_ptr->free_me |= mask; else if(freer == PNG_USER_WILL_FREE_DATA) info_ptr->free_me &= ~mask; else png_warning(png_ptr, "Unknown freer parameter in png_data_freer."); } #endif void PNGAPI png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, int num) { png_debug(1, "in png_free_data\n"); if (png_ptr == NULL || info_ptr == NULL) return; #if defined(PNG_TEXT_SUPPORTED) /* free text item num or (if num == -1) all text items */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_TEXT) & info_ptr->free_me) #else if (mask & PNG_FREE_TEXT) #endif { if (num != -1) { if (info_ptr->text && info_ptr->text[num].key) { png_free(png_ptr, info_ptr->text[num].key); info_ptr->text[num].key = NULL; } } else { int i; for (i = 0; i < info_ptr->num_text; i++) png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i); png_free(png_ptr, info_ptr->text); info_ptr->text = NULL; info_ptr->num_text=0; } } #endif #if defined(PNG_tRNS_SUPPORTED) /* free any tRNS entry */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_TRNS) & info_ptr->free_me) #else if ((mask & PNG_FREE_TRNS) && (png_ptr->flags & PNG_FLAG_FREE_TRNS)) #endif { png_free(png_ptr, info_ptr->trans); info_ptr->valid &= ~PNG_INFO_tRNS; #ifndef PNG_FREE_ME_SUPPORTED png_ptr->flags &= ~PNG_FLAG_FREE_TRNS; #endif info_ptr->trans = NULL; } #endif #if defined(PNG_sCAL_SUPPORTED) /* free any sCAL entry */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_SCAL) & info_ptr->free_me) #else if (mask & PNG_FREE_SCAL) #endif { #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) png_free(png_ptr, info_ptr->scal_s_width); png_free(png_ptr, info_ptr->scal_s_height); info_ptr->scal_s_width = NULL; info_ptr->scal_s_height = NULL; #endif info_ptr->valid &= ~PNG_INFO_sCAL; } #endif #if defined(PNG_pCAL_SUPPORTED) /* free any pCAL entry */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_PCAL) & info_ptr->free_me) #else if (mask & PNG_FREE_PCAL) #endif { png_free(png_ptr, info_ptr->pcal_purpose); png_free(png_ptr, info_ptr->pcal_units); info_ptr->pcal_purpose = NULL; info_ptr->pcal_units = NULL; if (info_ptr->pcal_params != NULL) { int i; for (i = 0; i < (int)info_ptr->pcal_nparams; i++) { png_free(png_ptr, info_ptr->pcal_params[i]); info_ptr->pcal_params[i]=NULL; } png_free(png_ptr, info_ptr->pcal_params); info_ptr->pcal_params = NULL; } info_ptr->valid &= ~PNG_INFO_pCAL; } #endif #if defined(PNG_iCCP_SUPPORTED) /* free any iCCP entry */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_ICCP) & info_ptr->free_me) #else if (mask & PNG_FREE_ICCP) #endif { png_free(png_ptr, info_ptr->iccp_name); png_free(png_ptr, info_ptr->iccp_profile); info_ptr->iccp_name = NULL; info_ptr->iccp_profile = NULL; info_ptr->valid &= ~PNG_INFO_iCCP; } #endif #if defined(PNG_sPLT_SUPPORTED) /* free a given sPLT entry, or (if num == -1) all sPLT entries */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_SPLT) & info_ptr->free_me) #else if (mask & PNG_FREE_SPLT) #endif { if (num != -1) { if(info_ptr->splt_palettes) { png_free(png_ptr, info_ptr->splt_palettes[num].name); png_free(png_ptr, info_ptr->splt_palettes[num].entries); info_ptr->splt_palettes[num].name = NULL; info_ptr->splt_palettes[num].entries = NULL; } } else { if(info_ptr->splt_palettes_num) { int i; for (i = 0; i < (int)info_ptr->splt_palettes_num; i++) png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i); png_free(png_ptr, info_ptr->splt_palettes); info_ptr->splt_palettes = NULL; info_ptr->splt_palettes_num = 0; } info_ptr->valid &= ~PNG_INFO_sPLT; } } #endif #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_UNKN) & info_ptr->free_me) #else if (mask & PNG_FREE_UNKN) #endif { if (num != -1) { if(info_ptr->unknown_chunks) { png_free(png_ptr, info_ptr->unknown_chunks[num].data); info_ptr->unknown_chunks[num].data = NULL; } } else { int i; if(info_ptr->unknown_chunks_num) { for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++) png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i); png_free(png_ptr, info_ptr->unknown_chunks); info_ptr->unknown_chunks = NULL; info_ptr->unknown_chunks_num = 0; } } } #endif #if defined(PNG_hIST_SUPPORTED) /* free any hIST entry */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_HIST) & info_ptr->free_me) #else if ((mask & PNG_FREE_HIST) && (png_ptr->flags & PNG_FLAG_FREE_HIST)) #endif { png_free(png_ptr, info_ptr->hist); info_ptr->hist = NULL; info_ptr->valid &= ~PNG_INFO_hIST; #ifndef PNG_FREE_ME_SUPPORTED png_ptr->flags &= ~PNG_FLAG_FREE_HIST; #endif } #endif /* free any PLTE entry that was internally allocated */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_PLTE) & info_ptr->free_me) #else if ((mask & PNG_FREE_PLTE) && (png_ptr->flags & PNG_FLAG_FREE_PLTE)) #endif { png_zfree(png_ptr, info_ptr->palette); info_ptr->palette = NULL; info_ptr->valid &= ~PNG_INFO_PLTE; #ifndef PNG_FREE_ME_SUPPORTED png_ptr->flags &= ~PNG_FLAG_FREE_PLTE; #endif info_ptr->num_palette = 0; } #if defined(PNG_INFO_IMAGE_SUPPORTED) /* free any image bits attached to the info structure */ #ifdef PNG_FREE_ME_SUPPORTED if ((mask & PNG_FREE_ROWS) & info_ptr->free_me) #else if (mask & PNG_FREE_ROWS) #endif { if(info_ptr->row_pointers) { int row; for (row = 0; row < (int)info_ptr->height; row++) { png_free(png_ptr, info_ptr->row_pointers[row]); info_ptr->row_pointers[row]=NULL; } png_free(png_ptr, info_ptr->row_pointers); info_ptr->row_pointers=NULL; } info_ptr->valid &= ~PNG_INFO_IDAT; } #endif #ifdef PNG_FREE_ME_SUPPORTED if(num == -1) info_ptr->free_me &= ~mask; else info_ptr->free_me &= ~(mask & ~PNG_FREE_MUL); #endif } /* This is an internal routine to free any memory that the info struct is * pointing to before re-using it or freeing the struct itself. Recall * that png_free() checks for NULL pointers for us. */ void /* PRIVATE */ png_info_destroy(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_info_destroy\n"); png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) if (png_ptr->num_chunk_list) { png_free(png_ptr, png_ptr->chunk_list); png_ptr->chunk_list=NULL; png_ptr->num_chunk_list=0; } #endif png_info_init_3(&info_ptr, png_sizeof(png_info)); } /* This function returns a pointer to the io_ptr associated with the user * functions. The application should free any memory associated with this * pointer before png_write_destroy() or png_read_destroy() are called. */ png_voidp PNGAPI png_get_io_ptr(png_structp png_ptr) { return (png_ptr->io_ptr); } #if !defined(PNG_NO_STDIO) /* Initialize the default input/output functions for the PNG file. If you * use your own read or write routines, you can call either png_set_read_fn() * or png_set_write_fn() instead of png_init_io(). If you have defined * PNG_NO_STDIO, you must use a function of your own because "FILE *" isn't * necessarily available. */ void PNGAPI png_init_io(png_structp png_ptr, png_FILE_p fp) { png_debug(1, "in png_init_io\n"); png_ptr->io_ptr = (png_voidp)fp; } #endif #if defined(PNG_TIME_RFC1123_SUPPORTED) /* Convert the supplied time into an RFC 1123 string suitable for use in * a "Creation Time" or other text-based time string. */ png_charp PNGAPI png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime) { static PNG_CONST char short_months[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; if (png_ptr->time_buffer == NULL) { png_ptr->time_buffer = (png_charp)png_malloc(png_ptr, (png_uint_32)(29* png_sizeof(char))); } #if defined(_WIN32_WCE) { wchar_t time_buf[29]; wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"), ptime->day % 32, short_months[(ptime->month - 1) % 12], ptime->year, ptime->hour % 24, ptime->minute % 60, ptime->second % 61); WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29, NULL, NULL); } #else #ifdef USE_FAR_KEYWORD { char near_time_buf[29]; sprintf(near_time_buf, "%d %s %d %02d:%02d:%02d +0000", ptime->day % 32, short_months[(ptime->month - 1) % 12], ptime->year, ptime->hour % 24, ptime->minute % 60, ptime->second % 61); png_memcpy(png_ptr->time_buffer, near_time_buf, 29*png_sizeof(char)); } #else sprintf(png_ptr->time_buffer, "%d %s %d %02d:%02d:%02d +0000", ptime->day % 32, short_months[(ptime->month - 1) % 12], ptime->year, ptime->hour % 24, ptime->minute % 60, ptime->second % 61); #endif #endif /* _WIN32_WCE */ return ((png_charp)png_ptr->time_buffer); } #endif /* PNG_TIME_RFC1123_SUPPORTED */ #if 0 /* Signature string for a PNG file. */ png_bytep PNGAPI png_sig_bytes(void) { return ((png_bytep)"\211\120\116\107\015\012\032\012"); } #endif png_charp PNGAPI png_get_copyright(png_structp png_ptr) { if (&png_ptr != NULL) /* silence compiler warning about unused png_ptr */ return ((png_charp) "\n libpng version 1.2.7 - September 12, 2004\n\ Copyright (c) 1998-2004 Glenn Randers-Pehrson\n\ Copyright (c) 1996-1997 Andreas Dilger\n\ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n"); return ((png_charp) ""); } /* The following return the library version as a short string in the * format 1.0.0 through 99.99.99zz. To get the version of *.h files * used with your application, print out PNG_LIBPNG_VER_STRING, which * is defined in png.h. * Note: now there is no difference between png_get_libpng_ver() and * png_get_header_ver(). Due to the version_nn_nn_nn typedef guard, * it is guaranteed that png.c uses the correct version of png.h. */ png_charp PNGAPI png_get_libpng_ver(png_structp png_ptr) { /* Version of *.c files used when building libpng */ if (&png_ptr != NULL) /* silence compiler warning about unused png_ptr */ return ((png_charp) PNG_LIBPNG_VER_STRING); return ((png_charp) ""); } png_charp PNGAPI png_get_header_ver(png_structp png_ptr) { /* Version of *.h files used when building libpng */ if (&png_ptr != NULL) /* silence compiler warning about unused png_ptr */ return ((png_charp) PNG_LIBPNG_VER_STRING); return ((png_charp) ""); } png_charp PNGAPI png_get_header_version(png_structp png_ptr) { /* Returns longer string containing both version and date */ if (&png_ptr != NULL) /* silence compiler warning about unused png_ptr */ return ((png_charp) PNG_HEADER_VERSION_STRING); return ((png_charp) ""); } #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED int PNGAPI png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name) { /* check chunk_name and return "keep" value if it's on the list, else 0 */ int i; png_bytep p; if((png_ptr == NULL && chunk_name == NULL) || png_ptr->num_chunk_list<=0) return 0; p=png_ptr->chunk_list+png_ptr->num_chunk_list*5-5; for (i = png_ptr->num_chunk_list; i; i--, p-=5) if (!png_memcmp(chunk_name, p, 4)) return ((int)*(p+4)); return 0; } #endif /* This function, added to libpng-1.0.6g, is untested. */ int PNGAPI png_reset_zstream(png_structp png_ptr) { return (inflateReset(&png_ptr->zstream)); } /* This function was added to libpng-1.0.7 */ png_uint_32 PNGAPI png_access_version_number(void) { /* Version of *.c files used when building libpng */ return((png_uint_32) PNG_LIBPNG_VER); } #if !defined(PNG_1_0_X) #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ /* this INTERNAL function was added to libpng 1.2.0 */ void /* PRIVATE */ png_init_mmx_flags (png_structp png_ptr) { png_ptr->mmx_rowbytes_threshold = 0; png_ptr->mmx_bitdepth_threshold = 0; # if (defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD)) png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_COMPILED; if (png_mmx_support() > 0) { png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU # ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW | PNG_ASM_FLAG_MMX_READ_COMBINE_ROW # endif # ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE | PNG_ASM_FLAG_MMX_READ_INTERLACE # endif # ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW ; # else | PNG_ASM_FLAG_MMX_READ_FILTER_SUB | PNG_ASM_FLAG_MMX_READ_FILTER_UP | PNG_ASM_FLAG_MMX_READ_FILTER_AVG | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; png_ptr->mmx_rowbytes_threshold = PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT; png_ptr->mmx_bitdepth_threshold = PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT; # endif } else { png_ptr->asm_flags &= ~( PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU | PNG_MMX_READ_FLAGS | PNG_MMX_WRITE_FLAGS ); } # else /* !((PNGVCRD || PNGGCCRD) && PNG_ASSEMBLER_CODE_SUPPORTED)) */ /* clear all MMX flags; no support is compiled in */ png_ptr->asm_flags &= ~( PNG_MMX_FLAGS ); # endif /* ?(PNGVCRD || PNGGCCRD) */ } #endif /* !(PNG_ASSEMBLER_CODE_SUPPORTED) */ /* this function was added to libpng 1.2.0 */ #if !defined(PNG_USE_PNGGCCRD) && \ !(defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)) int PNGAPI png_mmx_support(void) { return -1; } #endif #endif /* PNG_1_0_X */ #ifdef PNG_SIZE_T /* Added at libpng version 1.2.6 */ PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); png_size_t PNGAPI png_convert_size(size_t size) { if (size > (png_size_t)-1) PNG_ABORT(); /* We haven't got access to png_ptr, so no png_error() */ return ((png_size_t)size); } #endif /* PNG_SIZE_T */ htmldoc-1.8.27/png/INSTALL0100664000212600000240000001612210124712606013540 0ustar mikeuser Installing libpng version 1.2.7 - September 12, 2004 Before installing libpng, you must first install zlib. zlib can usually be found wherever you got libpng. zlib can be placed in another directory, at the same level as libpng. Note that your system might already have a preinstalled zlib, but you will still need to have access to the zlib.h and zconf.h include files that correspond to the version of zlib that's installed. You can rename the directories that you downloaded (they might be called "libpng-1.2.7" or "lpng109" and "zlib-1.2.1" or "zlib121") so that you have directories called "zlib" and "libpng". Your directory structure should look like this: .. (the parent directory) libpng (this directory) INSTALL (this file) README *.h *.c contrib gregbook pngminus pngsuite visupng projects beos c5builder (Borland) visualc6 (msvc) netware.txt wince.txt scripts makefile.* pngtest.png etc. zlib README *.h *.c contrib etc. If the line endings in the files look funny, you may wish to get the other distribution of libpng. It is available in both tar.gz (UNIX style line endings) and zip (DOS style line endings) formats. If you are building libpng with MSVC, you can enter the libpng projects\visualc6 directory and follow the instructions in projects\visualc6\README.txt. You can build libpng for WindowsCE by downloading and installing the projects\wince directory as instructed in the projects\wince.txt file, and then following the instructions in the README* files. Similarly, you can build libpng for Netware or Beos as instructed in projects\netware.txt or projects\beos. Else enter the zlib directory and follow the instructions in zlib/README, then come back here and choose the appropriate makefile.sys in the scripts directory. The files that are presently available in the scripts directory include makefile.std => Generic UNIX makefile (cc, creates static libpng.a) makefile.linux => Linux/ELF makefile (gcc, creates libpng12.so.0.1.2.7) makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng12.so.0.1.2.7, uses assembler code tuned for Intel MMX platform) makefile.gcc => Generic makefile (gcc, creates static libpng.a) makefile.knr => Archaic UNIX Makefile that converts files with ansi2knr (Requires ansi2knr.c from ftp://ftp.cs.wisc.edu/ghost) makefile.aix => AIX/gcc makefile makefile.cygwin => Cygwin/gcc makefile makefile.darwin => Darwin makefile, can use on MacosX makefile.dec => DEC Alpha UNIX makefile makefile.freebsd => FreeBSD makefile makefile.hpgcc => HPUX makefile using gcc makefile.hpux => HPUX (10.20 and 11.00) makefile makefile.hp64 => HPUX (10.20 and 11.00) makefile, 64-bit makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static) makefile.intel => Intel C/C++ version 4.0 and later libpng.icc => Project file for IBM VisualAge/C++ version 4.0 or later makefile.netbsd => NetBSD/cc makefile, uses PNGGCCRD, makes libpng.so. makefile.ne12bsd => NetBSD/cc makefile, uses PNGGCCRD, makes libpng12.so makefile.openbsd => OpenBSD makefile makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib) makefile.sggcc => Silicon Graphics (gcc, creates libpng12.so.0.1.2.7) makefile.sunos => Sun makefile makefile.solaris => Solaris 2.X makefile (gcc, creates libpng12.so.0.1.2.7) makefile.so9 => Solaris 9 makefile (gcc, creates libpng12.so.0.1.2.7) makefile.32sunu => Sun Ultra 32-bit makefile makefile.64sunu => Sun Ultra 64-bit makefile makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc makefile.mips => MIPS makefile makefile.acorn => Acorn makefile makefile.amiga => Amiga makefile smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler (Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc) makefile.atari => Atari makefile makefile.beos => BEOS makefile for X86 makefile.bor => Borland makefile (uses bcc) makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode) makefile.tc3 => Turbo C 3.0 makefile makefile.dj2 => DJGPP 2 makefile makefile.msc => Microsoft C makefile makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and later (uses assembler code tuned for Intel MMX platform) makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and later (does not use assembler code) makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def) pngos2.def => OS/2 module definition file used by makefile.os2 makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model makevms.com => VMS build script descrip.mms => VMS makefile for MMS or MMK SCOPTIONS.ppc => Used with smakefile.ppc Copy the file (or files) that you need from the scripts directory into this directory, for example MSDOS example: copy scripts\makefile.msc makefile UNIX example: cp scripts/makefile.std makefile Read the makefile to see if you need to change any source or target directories to match your preferences. Then read pngconf.h to see if you want to make any configuration changes. Then just run "make" which will create the libpng library in this directory and "make test" which will run a quick test that reads the "pngtest.png" file and writes a "pngout.png" file that should be identical to it. Look for "9782 zero samples" in the output of the test. For more confidence, you can run another test by typing "pngtest pngnow.png" and looking for "289 zero samples" in the output. Also, you can run "pngtest -m contrib/pngsuite/*.png" and compare your output with the result shown in contrib/pngsuite/README. Most of the makefiles will allow you to run "make install" to put the library in its final resting place (if you want to do that, run "make install" in the zlib directory first if necessary). Some also allow you to run "make test-installed" after you have run "make install". If you encounter a compiler error message complaining about the lines __png.h__ already includes setjmp.h; __dont__ include it again.; This means you have compiled another module that includes setjmp.h, which is hazardous because the two modules might not include exactly the same setjmp.h. If you are sure that you know what you are doing and that they are exactly the same, then you can comment out or delete the two lines. Better yet, use the cexcept interface instead, as demonstrated in contrib/visupng of the libpng distribution. Further information can be found in the README and libpng.txt files, in the individual makefiles, in png.h, and the manual pages libpng.3 and png.5. htmldoc-1.8.27/png/ANNOUNCE0100664000212600000240000000230310124712606013634 0ustar mikeuser Libpng 1.2.7 - September 12, 2004 This is a public release of libpng, intended for use in production codes. Changes since the last public release (1.2.6): Revised pngtest so memory allocation testing is only done when PNG_DEBUG==1. Removed unused pngasmrd.h file. Removed references to uu.net for archived files. Added references to PNG Spec (second edition) and the PNG ISO/IEC Standard. Added "test-dd" target in 15 makefiles, to run pngtest in DESTDIR. Fixed bug with "optimized window size" in the IDAT datastream, that causes libpng to write PNG files with incorrect zlib header bytes. Fixed bug with sCAL chunk and big-endian machines (David Munro). Undid new code added in 1.2.6 to update the color_type in png_set_filler(). Added png_set_add_alpha() that updates color type. Revised png_set_strip_filler() to not remove alpha if color_type has alpha. Added makefile.hp64 Changed projects/msvc/png32ms.def to scripts/png32ms.def in makefile.cygwin Send comments/corrections/commendations to png-implement@ccrc.wustl.edu (subscription required; write to majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message) or to glennrp@users.sourceforge.net Glenn R-P htmldoc-1.8.27/png/CHANGES0100664000212600000240000022641610124712606013513 0ustar mikeuser CHANGES - changes for libpng version 0.2 added reader into png.h fixed small problems in stub file version 0.3 added pull reader split up pngwrite.c to several files added pnglib.txt added example.c cleaned up writer, adding a few new tranformations fixed some bugs in writer interfaced with zlib 0.5 added K&R support added check for 64 KB blocks for 16 bit machines version 0.4 cleaned up code and commented code simplified time handling into png_time created png_color_16 and png_color_8 to handle color needs cleaned up color type defines fixed various bugs made various names more consistant interfaced with zlib 0.71 cleaned up zTXt reader and writer (using zlib's Reset functions) split transformations into pngrtran.c and pngwtran.c version 0.5 interfaced with zlib 0.8 fixed many reading and writing bugs saved using 3 spaces instead of tabs version 0.6 added png_large_malloc() and png_large_free() added png_size_t cleaned up some compiler warnings added png_start_read_image() version 0.7 cleaned up lots of bugs finished dithering and other stuff added test program changed name from pnglib to libpng version 0.71 [June, 1995] changed pngtest.png for zlib 0.93 fixed error in libpng.txt and example.c version 0.8 cleaned up some bugs added png_set_filler() split up pngstub.c into pngmem.c, pngio.c, and pngerror.c added #define's to remove unwanted code moved png_info_init() to png.c added old_size into png_realloc() added functions to manually set filtering and compression info changed compression parameters based on image type optimized filter selection code added version info changed external functions passing floats to doubles (k&r problems?) put all the configurable stuff in pngconf.h enabled png_set_shift to work with paletted images on read added png_read_update_info() - updates info structure with transformations version 0.81 [August, 1995] incorporated Tim Wegner's medium model code (thanks, Tim) version 0.82 [September, 1995] [unspecified changes] version 0.85 [December, 1995] added more medium model code (almost everything's a far) added i/o, error, and memory callback functions fixed some bugs (16 bit, 4 bit interlaced, etc.) added first run progressive reader (barely tested) version 0.86 [January, 1996] fixed bugs improved documentation version 0.87 [January, 1996] fixed medium model bugs fixed other bugs introduced in 0.85 and 0.86 added some minor documentation version 0.88 [January, 1996] fixed progressive bugs replaced tabs with spaces cleaned up documentation added callbacks for read/write and warning/error functions version 0.89 [July, 1996] added new initialization API to make libpng work better with shared libs we now have png_create_read_struct(), png_create_write_struct(), png_create_info_struct(), png_destroy_read_struct(), and png_destroy_write_struct() instead of the separate calls to malloc and png_read_init(), png_info_init(), and png_write_init() changed warning/error callback functions to fix bug - this means you should use the new initialization API if you were using the old png_set_message_fn() calls, and that the old API no longer exists so that people are aware that they need to change their code changed filter selection API to allow selection of multiple filters since it didn't work in previous versions of libpng anyways optimized filter selection code fixed png_set_background() to allow using an arbitrary RGB color for paletted images fixed gamma and background correction for paletted images, so png_correct_palette is not needed unless you are correcting an external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED in pngconf.h) - if nobody uses this, it may disappear in the future. fixed bug with Borland 64K memory allocation (Alexander Lehmann) fixed bug in interlace handling (Smarasderagd, I think) added more error checking for writing and image to reduce invalid files separated read and write functions so that they won't both be linked into a binary when only reading or writing functionality is used new pngtest image also has interlacing and zTXt updated documentation to reflect new API version 0.90 [January, 1997] made CRC errors/warnings on critical and ancillary chunks configurable libpng will use the zlib CRC routines by (compile-time) default changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner) added external C++ wrapper statements to png.h (Gilles Dauphin) allow PNG file to be read when some or all of file signature has already been read from the beginning of the stream. ****This affects the size of info_struct and invalidates all programs that use a shared libpng**** fixed png_filler() declarations fixed? background color conversions fixed order of error function pointers to match documentation current chunk name is now available in png_struct to reduce the number of nearly identical error messages (will simplify multi-lingual support when available) try to get ready for unknown-chunk callback functions: - previously read critical chunks are flagged, so the chunk handling routines can determine if the chunk is in the right place - all chunk handling routines have the same prototypes, so we will be able to handle all chunks via a callback mechanism try to fix Linux "setjmp" buffer size problems removed png_large_malloc, png_large_free, and png_realloc functions. version 0.95 [March, 1997] fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never fixed bug in PNG file signature compares when start != 0 changed parameter type of png_set_filler(...filler...) from png_byte to png_uint_32 added test for MACOS to ensure that both math.h and fp.h are not #included added macros for libpng to be compiled as a Windows DLL (Andreas Kupries) added "packswap" transformation, which changes the endianness of packed-pixel bytes (Kevin Bracey) added "strip_alpha" transformation, which removes the alpha channel of input images without using it (not neccesarily a good idea) added "swap_alpha" transformation, which puts the alpha channel in front of the color bytes instead of after removed all implicit variable tests which assume NULL == 0 (I think) changed several variables to "png_size_t" to show 16/32-bit limitations added new pCAL chunk read/write support added experimental filter selection weighting (Greg Roelofs) removed old png_set_rgbx() and png_set_xrgb() functions that have been obsolete for about 2 years now (use png_set_filler() instead) added macros to read 16- and 32-bit ints directly from buffer, to be used only on those systems that support it (namely PowerPC and 680x0) With some testing, this may become the default for MACOS/PPC systems. only calculate CRC on data if we are going to use it added macros for zTXt compression type PNG_zTXt_COMPRESSION_??? added macros for simple libpng debugging output selectable at compile time removed PNG_READ_END_MODE in progressive reader (Smarasderagd) more description of info_struct in libpng.txt and png.h more instructions in example.c more chunk types tested in pngtest.c renamed pngrcb.c to pngset.c, and all png_read_ functions to be png_set_. We now have corresponding png_get_ functions in pngget.c to get infomation in info_ptr. This isolates the application from the internal organization of png_info_struct (good for shared library implementations). version 0.96 [May, 1997] fixed serious bug with < 8bpp images introduced in 0.95 fixed 256-color transparency bug (Greg Roelofs) fixed up documentation (Greg Roelofs, Laszlo Nyul) fixed "error" in pngconf.h for Linux setjmp() behaviour fixed DOS medium model support (Tim Wegner) fixed png_check_keyword() for case with error in static string text added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul) added typecasts to quiet compiler errors added more debugging info version 0.97 [January, 1998] removed PNG_USE_OWN_CRC capability relocated png_set_crc_action from pngrutil.c to pngrtran.c fixed typecasts of "new_key", etc. (Andreas Dilger) added RFC 1152 [sic] date support fixed bug in gamma handling of 4-bit grayscale added 2-bit grayscale gamma handling (Glenn R-P) added more typecasts. 65536L becomes (png_uint_32)65536L, etc. (Glenn R-P) minor corrections in libpng.txt added simple sRGB support (Glenn R-P) easier conditional compiling, e.g. define PNG_READ/WRITE_NOT_FULLY_SUPPORTED; all configurable options can be selected from command-line instead of having to edit pngconf.h (Glenn R-P) fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P) added more conditions for png_do_background, to avoid changing black pixels to background when a background is supplied and no pixels are transparent repaired PNG_NO_STDIO behaviour tested NODIV support and made it default behaviour (Greg Roelofs) added "-m" option and PNGTEST_DEBUG_MEMORY to pngtest (John Bowler) regularized version numbering scheme and bumped shared-library major version number to 2 to avoid problems with libpng 0.89 apps (Greg Roelofs) version 0.98 [January, 1998] cleaned up some typos in libpng.txt and in code documentation fixed memory leaks in pCAL chunk processing (Glenn R-P and John Bowler) cosmetic change "display_gamma" to "screen_gamma" in pngrtran.c changed recommendation about file_gamma for PC images to .51 from .45, in example.c and libpng.txt, added comments to distinguish between screen_gamma, viewing_gamma, and display_gamma. changed all references to RFC1152 to read RFC1123 and changed the PNG_TIME_RFC1152_SUPPORTED macro to PNG_TIME_RFC1123_SUPPORTED added png_invert_alpha capability (Glenn R-P -- suggestion by Jon Vincent) changed srgb_intent from png_byte to int to avoid compiler bugs version 0.99 [January 30, 1998] free info_ptr->text instead of end_info_ptr->text in pngread.c (John Bowler) fixed a longstanding "packswap" bug in pngtrans.c fixed some inconsistencies in pngconf.h that prevented compiling with PNG_READ_GAMMA_SUPPORTED and PNG_READ_hIST_SUPPORTED undefined fixed some typos and made other minor rearrangement of libpng.txt (Andreas) changed recommendation about file_gamma for PC images to .50 from .51 in example.c and libpng.txt, and changed file_gamma for sRGB images to .45 added a number of functions to access information from the png structure png_get_image_height(), etc. (Glenn R-P, suggestion by Brad Pettit) added TARGET_MACOS similar to zlib-1.0.8 define PNG_ALWAYS_EXTERN when __MWERKS__ && WIN32 are defined added type casting to all png_malloc() function calls version 0.99a [January 31, 1998] Added type casts and parentheses to all returns that return a value.(Tim W.) version 0.99b [February 4, 1998] Added type cast png_uint_32 on malloc function calls where needed. Changed type of num_hist from png_uint_32 to int (same as num_palette). Added checks for rowbytes overflow, in case png_size_t is less than 32 bits. Renamed makefile.elf to makefile.lnx. version 0.99c [February 7, 1998] More type casting. Removed erroneous overflow test in pngmem.c. Added png_buffered_memcpy() and png_buffered_memset(), apply them to rowbytes. Added UNIX manual pages libpng.3 (incorporating libpng.txt) and png.5. version 0.99d [February 11, 1998] Renamed "far_to_near()" "png_far_to_near()" Revised libpng.3 Version 99c "buffered" operations didn't work as intended. Replaced them with png_memcpy_check() and png_memset_check(). Added many "if (png_ptr == NULL) return" to quell compiler warnings about unused png_ptr, mostly in pngget.c and pngset.c. Check for overlength tRNS chunk present when indexed-color PLTE is read. Cleaned up spelling errors in libpng.3/libpng.txt Corrected a problem with png_get_tRNS() which returned undefined trans array version 0.99e [February 28, 1998] Corrected png_get_tRNS() again. Add parentheses for easier reading of pngget.c, fixed "||" should be "&&". Touched up example.c to make more of it compileable, although the entire file still can't be compiled (Willem van Schaik) Fixed a bug in png_do_shift() (Bryan Tsai) Added a space in png.h prototype for png_write_chunk_start() Replaced pngtest.png with one created with zlib 1.1.1 Changed pngtest to report PASS even when file size is different (Jean-loup G.) Corrected some logic errors in png_do_invert_alpha() (Chris Patterson) version 0.99f [March 5, 1998] Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey) Moved makefiles into a "scripts" directory, and added INSTALL instruction file Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok) Added pointers to "note on libpng versions" in makefile.lnx and README Added row callback feature when reading and writing nonprogressive rows and added a test of this feature in pngtest.c Added user transform callbacks, with test of the feature in pngtest.c version 0.99g [March 6, 1998, morning] Minor changes to pngtest.c to suppress compiler warnings. Removed "beta" language from documentation. version 0.99h [March 6, 1998, evening] Minor changes to previous minor changes to pngtest.c Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro Added user transform capability version 1.00 [March 7, 1998] Changed several typedefs in pngrutil.c Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik) replaced "while(1)" with "for(;;)" added PNGARG() to prototypes in pngtest.c and removed some prototypes updated some of the makefiles (Tom Lane) changed some typedefs (s_start, etc.) in pngrutil.c fixed dimensions of "short_months" array in pngwrite.c Replaced ansi2knr.c with the one from jpeg-v6 version 1.0.0 [March 8, 1998] Changed name from 1.00 to 1.0.0 (Adam Costello) Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert) version 1.0.0a [March 9, 1998] Fixed three bugs in pngrtran.c to make gamma+background handling consistent (Greg Roelofs) Changed format of the PNG_LIBPNG_VER integer to xyyzz instead of xyz for major, minor, and bugfix releases. This is 10001. (Adam Costello, Tom Lane) Make months range from 1-12 in png_convert_to_rfc1123 version 1.0.0b [March 13, 1998] Quieted compiler complaints about two empty "for" loops in pngrutil.c Minor changes to makefile.s2x Removed #ifdef/#endif around a png_free() in pngread.c version 1.0.1 [March 14, 1998] Changed makefile.s2x to reduce security risk of using a relative pathname Fixed some typos in the documentation (Greg). Fixed a problem with value of "channels" returned by png_read_update_info() version 1.0.1a [April 21, 1998] Optimized Paeth calculations by replacing abs() function calls with intrinsics plus other loop optimizations. Improves avg decoding speed by about 20%. Commented out i386istic "align" compiler flags in makefile.lnx. Reduced the default warning level in some makefiles, to make them consistent. Removed references to IJG and JPEG in the ansi2knr.c copyright statement. Fixed a bug in png_do_strip_filler with XXRRGGBB => RRGGBB transformation. Added grayscale and 16-bit capability to png_do_read_filler(). Fixed a bug in pngset.c, introduced in version 0.99c, that sets rowbytes too large when writing an image with bit_depth < 8 (Bob Dellaca). Corrected some bugs in the experimental weighted filtering heuristics. Moved a misplaced pngrutil code block that truncates tRNS if it has more than num_palette entries -- test was done before num_palette was defined. Fixed a png_convert_to_rfc1123() bug that converts day 31 to 0 (Steve Eddins). Changed compiler flags in makefile.wat for better optimization (Pawel Mrochen). version 1.0.1b [May 2, 1998] Relocated png_do_gray_to_rgb() within png_do_read_transformations() (Greg). Relocated the png_composite macros from pngrtran.c to png.h (Greg). Added makefile.sco (contributed by Mike Hopkirk). Fixed two bugs (missing definitions of "istop") introduced in libpng-1.0.1a. Fixed a bug in pngrtran.c that would set channels=5 under some circumstances. More work on the Paeth-filtering, achieving imperceptible speedup (A Kleinert). More work on loop optimization which may help when compiled with C++ compilers. Added warnings when people try to use transforms they've defined out. Collapsed 4 "i" and "c" loops into single "i" loops in pngrtran and pngwtran. Revised paragraph about png_set_expand() in libpng.txt and libpng.3 (Greg) version 1.0.1c [May 11, 1998] Fixed a bug in pngrtran.c (introduced in libpng-1.0.1a) where the masks for filler bytes should have been 0xff instead of 0xf. Added max_pixel_depth=32 in pngrutil.c when using FILLER with palette images. Moved PNG_WRITE_WEIGHTED_FILTER_SUPPORTED and PNG_WRITE_FLUSH_SUPPORTED out of the PNG_WRITE_TRANSFORMS_NOT_SUPPORTED block of pngconf.h Added "PNG_NO_WRITE_TRANSFORMS" etc., as alternatives for *_NOT_SUPPORTED, for consistency, in pngconf.h Added individual "ifndef PNG_NO_[CAPABILITY]" in pngconf.h to make it easier to remove unwanted capabilities via the compile line Made some corrections to grammar (which, it's) in documentation (Greg). Corrected example.c, use of row_pointers in png_write_image(). version 1.0.1d [May 24, 1998] Corrected several statements that used side effects illegally in pngrutil.c and pngtrans.c, that were introduced in version 1.0.1b Revised png_read_rows() to avoid repeated if-testing for NULL (A Kleinert) More corrections to example.c, use of row_pointers in png_write_image() and png_read_rows(). Added pngdll.mak and pngdef.pas to scripts directory, contributed by Bob Dellaca, to make a png32bd.dll with Borland C++ 4.5 Fixed error in example.c with png_set_text: num_text is 3, not 2 (Guido V.) Changed several loops from count-down to count-up, for consistency. version 1.0.1e [June 6, 1998] Revised libpng.txt and libpng.3 description of png_set_read|write_fn(), and added warnings when people try to set png_read_fn and png_write_fn in the same structure. Added a test such that png_do_gamma will be done when num_trans==0 for truecolor images that have defined a background. This corrects an error that was introduced in libpng-0.90 that can cause gamma processing to be skipped. Added tests in png.h to include "trans" and "trans_values" in structures when PNG_READ_BACKGROUND_SUPPORTED or PNG_READ_EXPAND_SUPPORTED is defined. Add png_free(png_ptr->time_buffer) in png_destroy_read_struct() Moved png_convert_to_rfc_1123() from pngwrite.c to png.c Added capability for user-provided malloc_fn() and free_fn() functions, and revised pngtest.c to demonstrate their use, replacing the PNGTEST_DEBUG_MEM feature. Added makefile.w32, for Microsoft C++ 4.0 and later (Tim Wegner). version 1.0.2 [June 14, 1998] Fixed two bugs in makefile.bor . version 1.0.2a [December 30, 1998] Replaced and extended code that was removed from png_set_filler() in 1.0.1a. Fixed a bug in png_do_filler() that made it fail to write filler bytes in the left-most pixel of each row (Kevin Bracey). Changed "static pngcharp tIME_string" to "static char tIME_string[30]" in pngtest.c (Duncan Simpson). Fixed a bug in pngtest.c that caused pngtest to try to write a tIME chunk even when no tIME chunk was present in the source file. Fixed a problem in pngrutil.c: gray_to_rgb didn't always work with 16-bit. Fixed a problem in png_read_push_finish_row(), which would not skip some passes that it should skip, for images that are less than 3 pixels high. Interchanged the order of calls to png_do_swap() and png_do_shift() in pngwtran.c (John Cromer). Added #ifdef PNG_DEBUG/#endif surrounding use of PNG_DEBUG in png.h . Changed "bad adaptive filter type" from error to warning in pngrutil.c . Fixed a documentation error about default filtering with 8-bit indexed-color. Separated the PNG_NO_STDIO macro into PNG_NO_STDIO and PNG_NO_CONSOLE_IO (L. Peter Deutsch). Added png_set_rgb_to_gray() and png_get_rgb_to_gray_status() functions. Added png_get_copyright() and png_get_header_version() functions. Revised comments on png_set_progressive_read_fn() in libpng.txt and example.c Added information about debugging in libpng.txt and libpng.3 . Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and makefile.sco. Removed lines after Dynamic Dependencies" in makefile.aco . Revised makefile.dec to make a shared library (Jeremie Petit). Removed trailing blanks from all files. version 1.0.2a [January 6, 1999] Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h Added "if" tests to silence complaints about unused png_ptr in png.h and png.c Changed "check_if_png" function in example.c to return true (nonzero) if PNG. Changed libpng.txt to demonstrate png_sig_cmp() instead of png_check_sig() which is obsolete. version 1.0.3 [January 14, 1999] Added makefile.hux, for Hewlett Packard HPUX 10.20 and 11.00 (Jim Rice) Added a statement of Y2K compliance in png.h, libpng.3, and Y2KINFO. version 1.0.3a [August 12, 1999] Added check for PNG_READ_INTERLACE_SUPPORTED in pngread.c; issue a warning if an attempt is made to read an interlaced image when it's not supported. Added check if png_ptr->trans is defined before freeing it in pngread.c Modified the Y2K statement to include versions back to version 0.71 Fixed a bug in the check for valid IHDR bit_depth/color_types in pngrutil.c Modified makefile.wat (added -zp8 flag, ".symbolic", changed some comments) Replaced leading blanks with tab characters in makefile.hux Changed "dworkin.wustl.edu" to "ccrc.wustl.edu" in various documents. Changed (float)red and (float)green to (double)red, (double)green in png_set_rgb_to_gray() to avoid "promotion" problems in AIX. Fixed a bug in pngconf.h that omitted when PNG_DEBUG==0 (K Bracey). Reformatted libpng.3 and libpngpf.3 with proper fonts (script by J. vanZandt). Updated documentation to refer to the PNG-1.2 specification. Removed ansi2knr.c and left pointers to the latest source for ansi2knr.c in makefile.knr, INSTALL, and README (L. Peter Deutsch) Fixed bugs in calculation of the length of rowbytes when adding alpha channels to 16-bit images, in pngrtran.c (Chris Nokleberg) Added function png_set_user_transform_info() to store user_transform_ptr, user_depth, and user_channels into the png_struct, and a function png_get_user_transform_ptr() to retrieve the pointer (Chris Nokleberg) Added function png_set_empty_plte_permitted() to make libpng useable in MNG applications. Corrected the typedef for png_free_ptr in png.h (Jesse Jones). Correct gamma with srgb is 45455 instead of 45000 in pngrutil.c, to be consistent with PNG-1.2, and allow variance of 500 before complaining. Added assembler code contributed by Intel in file pngvcrd.c and modified makefile.w32 to use it (Nirav Chhatrapati, INTEL Corporation, Gilles Vollant) Changed "ln -s -f" to "ln -f -s" in the makefiles to make Solaris happy. Added some aliases for png_set_expand() in pngrtran.c, namely png_set_expand_PLTE(), png_set_expand_depth(), and png_set_expand_tRNS() (Greg Roelofs, in "PNG: The Definitive Guide"). Added makefile.beo for BEOS on X86, contributed by Sander Stok. version 1.0.3b [August 26, 1999] Replaced 2147483647L several places with PNG_MAX_UINT macro, defined in png.h Changed leading blanks to tabs in all makefiles. Define PNG_USE_PNGVCRD in makefile.w32, to get MMX assembler code. Made alternate versions of png_set_expand() in pngrtran.c, namely png_set_gray_1_2_4_to_8, png_set_palette_to_rgb, and png_set_tRNS_to_alpha (Greg Roelofs, in "PNG: The Definitive Guide"). Deleted the 1.0.3a aliases. Relocated start of 'extern "C"' block in png.h so it doesn't include pngconf.h Revised calculation of num_blocks in pngmem.c to avoid a potentially negative shift distance, whose results are undefined in the C language. Added a check in pngset.c to prevent writing multiple tIME chunks. Added a check in pngwrite.c to detect invalid small window_bits sizes. version 1.0.3d [September 4, 1999] Fixed type casting of igamma in pngrutil.c Added new png_expand functions to scripts/pngdef.pas and pngos2.def Added a demo read_user_transform_fn that examines the row filters in pngtest.c version 1.0.4 [September 24, 1999] Define PNG_ALWAYS_EXTERN in pngconf.h if __STDC__ is defined Delete #define PNG_INTERNAL and include "png.h" from pngasmrd.h Made several minor corrections to pngtest.c Renamed the makefiles with longer but more user friendly extensions. Copied the PNG copyright and license to a separate LICENSE file. Revised documentation, png.h, and example.c to remove reference to "viewing_gamma" which no longer appears in the PNG specification. Revised pngvcrd.c to use MMX code for interlacing only on the final pass. Updated pngvcrd.c to use the faster C filter algorithms from libpng-1.0.1a Split makefile.win32vc into two versions, makefile.vcawin32 (uses MMX assembler code) and makefile.vcwin32 (doesn't). Added a CPU timing report to pngtest.c (enabled by defining PNGTEST_TIMING) Added a copy of pngnow.png to the distribution. version 1.0.4a [September 25, 1999] Increase max_pixel_depth in pngrutil.c if a user transform needs it. Changed several division operations to right-shifts in pngvcrd.c version 1.0.4b [September 30, 1999] Added parentheses in line 3732 of pngvcrd.c Added a comment in makefile.linux warning about buggy -O3 in pgcc 2.95.1 version 1.0.4c [October 1, 1999] Added a "png_check_version" function in png.c and pngtest.c that will generate a helpful compiler error if an old png.h is found in the search path. Changed type of png_user_transform_depth|channels from int to png_byte. version 1.0.4d [October 6, 1999] Changed 0.45 to 0.45455 in png_set_sRGB() Removed unused PLTE entries from pngnow.png Re-enabled some parts of pngvcrd.c (png_combine_row) that work properly. version 1.0.4e [October 10, 1999] Fixed sign error in pngvcrd.c (Greg Roelofs) Replaced some instances of memcpy with simple assignments in pngvcrd (GR-P) version 1.0.4f [October 15, 1999] Surrounded example.c code with #if 0 .. #endif to prevent people from inadvertently trying to compile it. Changed png_get_header_version() from a function to a macro in png.h Added type casting mostly in pngrtran.c and pngwtran.c Removed some pointless "ptr = NULL" in pngmem.c Added a "contrib" directory containing the source code from Greg's book. version 1.0.5 [October 15, 1999] Minor editing of the INSTALL and README files. version 1.0.5a [October 23, 1999] Added contrib/pngsuite and contrib/pngminus (Willem van Schaik) Fixed a typo in the png_set_sRGB() function call in example.c (Jan Nijtmans) Further optimization and bugfix of pngvcrd.c Revised pngset.c so that it does not allocate or free memory in the user's text_ptr structure. Instead, it makes its own copy. Created separate write_end_info_struct in pngtest.c for a more severe test. Added code in pngwrite.c to free info_ptr->text[i].key to stop a memory leak. version 1.0.5b [November 23, 1999] Moved PNG_FLAG_HAVE_CHUNK_HEADER, PNG_FLAG_BACKGROUND_IS_GRAY and PNG_FLAG_WROTE_tIME from flags to mode. Added png_write_info_before_PLTE() function. Fixed some typecasting in contrib/gregbook/*.c Updated scripts/makevms.com and added makevms.com to contrib/gregbook and contrib/pngminus (Martin Zinser) version 1.0.5c [November 26, 1999] Moved png_get_header_version from png.h to png.c, to accomodate ansi2knr. Removed all global arrays (according to PNG_NO_GLOBAL_ARRAYS macro), to accomodate making DLL's: Moved usr_png_ver from global variable to function png_get_header_ver() in png.c. Moved png_sig to png_sig_bytes in png.c and eliminated use of png_sig in pngwutil.c. Moved the various png_CHNK arrays into pngtypes.h. Eliminated use of global png_pass arrays. Declared the png_CHNK and png_pass arrays to be "const". Made the global arrays available to applications (although none are used in libpng itself) when PNG_NO_GLOBAL_ARRAYS is not defined or when PNG_GLOBAL_ARRAYS is defined. Removed some extraneous "-I" from contrib/pngminus/makefile.std Changed the PNG_sRGB_INTENT macros in png.h to be consistent with PNG-1.2. Change PNG_SRGB_INTENT to PNG_sRGB_INTENT in libpng.txt and libpng.3 version 1.0.5d [November 29, 1999] Add type cast (png_const_charp) two places in png.c Eliminated pngtypes.h; use macros instead to declare PNG_CHNK arrays. Renamed "PNG_GLOBAL_ARRAYS" to "PNG_USE_GLOBAL_ARRAYS" and made available to applications a macro "PNG_USE_LOCAL_ARRAYS". #ifdef out all the new declarations when PNG_USE_GLOBAL_ARRAYS is defined. Added PNG_EXPORT_VAR macro to accommodate making DLL's. version 1.0.5e [November 30, 1999] Added iCCP, iTXt, and sPLT support; added "lang" member to the png_text structure; refactored the inflate/deflate support to make adding new chunks with trailing compressed parts easier in the future, and added new functions png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP, png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond). NOTE: Applications that write text chunks MUST define png_text->lang before calling png_set_text(). It must be set to NULL if you want to write tEXt or zTXt chunks. If you want your application to be able to run with older versions of libpng, use #ifdef PNG_iTXt_SUPPORTED png_text[i].lang = NULL; #endif Changed png_get_oFFs() and png_set_oFFs() to use signed rather than unsigned offsets (Eric S. Raymond). Combined PNG_READ_cHNK_SUPPORTED and PNG_WRITE_cHNK_SUPPORTED macros into PNG_cHNK_SUPPORTED and combined the three types of PNG_text_SUPPORTED macros, leaving the separate macros also available. Removed comments on #endifs at the end of many short, non-nested #if-blocks. version 1.0.5f [December 6, 1999] Changed makefile.solaris to issue a warning about potential problems when the ucb "ld" is in the path ahead of the ccs "ld". Removed "- [date]" from the "synopsis" line in libpng.3 and libpngpf.3. Added sCAL chunk support (Eric S. Raymond). version 1.0.5g [December 7, 1999] Fixed "png_free_spallettes" typo in png.h Added code to handle new chunks in pngpread.c Moved PNG_CHNK string macro definitions outside of PNG_NO_EXTERN block Added "translated_key" to png_text structure and png_write_iTXt(). Added code in pngwrite.c to work around a newly discovered zlib bug. version 1.0.5h [December 10, 1999] NOTE: regarding the note for version 1.0.5e, the following must also be included in your code: png_text[i].translated_key = NULL; Unknown chunk handling is now supported. Option to eliminate all floating point support was added. Some new fixed-point functions such as png_set_gAMA_fixed() were added. Expanded tabs and removed trailing blanks in source files. version 1.0.5i [December 13, 1999] Added some type casts to silence compiler warnings. Renamed "png_free_spalette" to "png_free_spalettes" for consistency. Removed leading blanks from a #define in pngvcrd.c Added some parameters to the new png_set_keep_unknown_chunks() function. Added a test for up->location != 0 in the first instance of writing unknown chunks in pngwrite.c Changed "num" to "i" in png_free_spalettes() and png_free_unknowns() to prevent recursion. Added png_free_hIST() function. Various patches to fix bugs in the sCAL and integer cHRM processing, and to add some convenience macros for use with sCAL. version 1.0.5j [December 21, 1999] Changed "unit" parameter of png_write_sCAL from png_byte to int, to work around buggy compilers. Added new type "png_fixed_point" for integers that hold float*100000 values Restored backward compatibility of tEXt/zTXt chunk processing: Restored the first four members of png_text to the same order as v.1.0.5d. Added members "lang_key" and "itxt_length" to png_text struct. Set text_length=0 when "text" contains iTXt data. Use the "compression" member to distinguish among tEXt/zTXt/iTXt types. Added PNG_ITXT_COMPRESSION_NONE (1) and PNG_ITXT_COMPRESSION_zTXt(2) macros. The "Note" above, about backward incompatibility of libpng-1.0.5e, no longer applies. Fixed png_read|write_iTXt() to read|write parameters in the right order, and to write the iTXt chunk after IDAT if it appears in the end_ptr. Added pnggccrd.c, version of pngvcrd.c Intel assembler for gcc (Greg Roelofs) Reversed the order of trying to write floating-point and fixed-point gAMA. version 1.0.5k [December 27, 1999] Added many parentheses, e.g., "if (a && b & c)" becomes "if (a && (b & c))" Added png_handle_as_unknown() function (Glenn) Added png_free_chunk_list() function and chunk_list and num_chunk_list members of png_ptr. Eliminated erroneous warnings about multiple sPLT chunks and sPLT-after-PLTE. Fixed a libpng-1.0.5h bug in pngrutil.c that was issuing erroneous warnings about ignoring incorrect gAMA with sRGB (gAMA was in fact not ignored) Added png_free_tRNS(); png_set_tRNS() now malloc's its own trans array (ESR). Define png_get_int_32 when oFFs chunk is supported as well as when pCAL is. Changed type of proflen from png_int_32 to png_uint_32 in png_get_iCCP(). version 1.0.5l [January 1, 2000] Added functions png_set_read_user_chunk_fn() and png_get_user_chunk_ptr() for setting a callback function to handle unknown chunks and for retrieving the associated user pointer (Glenn). version 1.0.5m [January 7, 2000] Added high-level functions png_read_png(), png_write_png(), png_free_pixels(). version 1.0.5n [January 9, 2000] Added png_free_PLTE() function, and modified png_set_PLTE() to malloc its own memory for info_ptr->palette. This makes it safe for the calling application to free its copy of the palette any time after it calls png_set_PLTE(). version 1.0.5o [January 20, 2000] Cosmetic changes only (removed some trailing blanks and TABs) version 1.0.5p [January 31, 2000] Renamed pngdll.mak to makefile.bd32 Cosmetic changes in pngtest.c version 1.0.5q [February 5, 2000] Relocated the makefile.solaris warning about PATH problems. Fixed pngvcrd.c bug by pushing/popping registers in mmxsupport (Bruce Oberg) Revised makefile.gcmmx Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros version 1.0.5r [February 7, 2000] Removed superfluous prototype for png_get_itxt from png.h Fixed a bug in pngrtran.c that improperly expanded the background color. Return *num_text=0 from png_get_text() when appropriate, and fix documentation of png_get_text() in libpng.txt/libpng.3. version 1.0.5s [February 18, 2000] Added "png_jmp_env()" macro to pngconf.h, to help people migrate to the new error handler that's planned for the next libpng release, and changed example.c, pngtest.c, and contrib programs to use this macro. Revised some of the DLL-export macros in pngconf.h (Greg Roelofs) Fixed a bug in png_read_png() that caused it to fail to expand some images that it should have expanded. Fixed some mistakes in the unused and undocumented INCH_CONVERSIONS functions in pngget.c Changed the allocation of palette, history, and trans arrays back to the version 1.0.5 method (linking instead of copying) which restores backward compatibility with version 1.0.5. Added some remarks about that in example.c. Added "free_me" member to info_ptr and png_ptr and added png_free_data() function. Updated makefile.linux and makefile.gccmmx to make directories conditionally. Made cosmetic changes to pngasmrd.h Added png_set_rows() and png_get_rows(), for use with png_read|write_png(). Modified png_read_png() to allocate info_ptr->row_pointers only if it hasn't already been allocated. version 1.0.5t [March 4, 2000] Changed png_jmp_env() migration aiding macro to png_jmpbuf(). Fixed "interlace" typo (should be "interlaced") in contrib/gregbook/read2-x.c Fixed bug with use of PNG_BEFORE_IHDR bit in png_ptr->mode, introduced when PNG_FLAG_HAVE_CHUNK_HEADER was moved into png_ptr->mode in version 1.0.5b Files in contrib/gregbook were revised to use png_jmpbuf() and to select a 24-bit visual if one is available, and to allow abbreviated options. Files in contrib/pngminus were revised to use the png_jmpbuf() macro. Removed spaces in makefile.linux and makefile.gcmmx, introduced in 1.0.5s version 1.0.5u [March 5, 2000] Simplified the code that detects old png.h in png.c and pngtest.c Renamed png_spalette (_p, _pp) to png_sPLT_t (_tp, _tpp) Increased precision of rgb_to_gray calculations from 8 to 15 bits and added png_set_rgb_to_gray_fixed() function. Added makefile.bc32 (32-bit Borland C++, C mode) version 1.0.5v [March 11, 2000] Added some parentheses to the png_jmpbuf macro definition. Updated references to the zlib home page, which has moved to freesoftware.com. Corrected bugs in documentation regarding png_read_row() and png_write_row(). Updated documentation of png_rgb_to_gray calculations in libpng.3/libpng.txt. Renamed makefile.borland,turboc3 back to makefile.bor,tc3 as in version 1.0.3, revised borland makefiles; added makefile.ibmvac3 and makefile.gcc (Cosmin) version 1.0.6 [March 20, 2000] Minor revisions of makefile.bor, libpng.txt, and gregbook/rpng2-win.c Added makefile.sggcc (SGI IRIX with gcc) version 1.0.6d [April 7, 2000] Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO Added data_length parameter to png_decompress_chunk() function Revised documentation to remove reference to abandoned png_free_chnk functions Fixed an error in png_rgb_to_gray_fixed() Revised example.c, usage of png_destroy_write_struct(). Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file Added a check for info_ptr->free_me&PNG_FREE_TEXT when freeing text in png.c Simplify png_sig_bytes() function to remove use of non-ISO-C strdup(). version 1.0.6e [April 9, 2000] Added png_data_freer() function. In the code that checks for over-length tRNS chunks, added check of info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann) Minor revisions of libpng.txt/libpng.3. Check for existing data and free it if the free_me flag is set, in png_set_*() and png_handle_*(). Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED is defined. Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c and mentioned the purposes of the two macros in libpng.txt/libpng.3. version 1.0.6f [April 14, 2000] Revised png_set_iCCP() and png_set_rows() to avoid prematurely freeing data. Add checks in png_set_text() for NULL members of the input text structure. Revised libpng.txt/libpng.3. Removed superfluous prototype for png_set_itxt from png.h Removed "else" from pngread.c, after png_error(), and changed "0" to "length". Changed several png_errors about malformed ancillary chunks to png_warnings. version 1.0.6g [April 24, 2000] Added png_pass-* arrays to pnggccrd.c when PNG_USE_LOCAL_ARRAYS is defined. Relocated paragraph about png_set_background() in libpng.3/libpng.txt and other revisions (Matthias Benckmann) Relocated info_ptr->free_me, png_ptr->free_me, and other info_ptr and png_ptr members to restore binary compatibility with libpng-1.0.5 (breaks compatibility with libpng-1.0.6). version 1.0.6h [April 24, 2000] Changed shared library so-number pattern from 2.x.y.z to xy.z (this builds libpng.so.10 & libpng.so.10.6h instead of libpng.so.2 & libpng.so.2.1.0.6h) This is a temporary change for test purposes. version 1.0.6i [May 2, 2000] Rearranged some members at the end of png_info and png_struct, to put unknown_chunks_num and free_me within the original size of the png_structs and free_me, png_read_user_fn, and png_free_fn within the original png_info, because some old applications allocate the structs directly instead of using png_create_*(). Added documentation of user memory functions in libpng.txt/libpng.3 Modified png_read_png so that it will use user_allocated row_pointers if present, unless free_me directs that it be freed, and added description of the use of png_set_rows() and png_get_rows() in libpng.txt/libpng.3. Added PNG_LEGACY_SUPPORTED macro, and #ifdef out all new (since version 1.00) members of png_struct and png_info, to regain binary compatibility when you define this macro. Capabilities lost in this event are user transforms (new in version 1.0.0),the user transform pointer (new in version 1.0.2), rgb_to_gray (new in 1.0.5), iCCP, sCAL, sPLT, the high-level interface, and unknown chunks support (all new in 1.0.6). This was necessary because of old applications that allocate the structs directly as authors were instructed to do in libpng-0.88 and earlier, instead of using png_create_*(). Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which can be used to detect codes that directly allocate the structs, and code to check these modes in png_read_init() and png_write_init() and generate a libpng error if the modes aren't set and PNG_LEGACY_SUPPORTED was not defined. Added makefile.intel and updated makefile.watcom (Pawel Mrochen) version 1.0.6j [May 3, 2000] Overloaded png_read_init() and png_write_init() with macros that convert calls to png_read_init_2() or png_write_init_2() that check the version and structure sizes. version 1.0.7beta11 [May 7, 2000] Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes which are no longer used. Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXT_SUPPORTED is defined. Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory overrun when old applications fill the info_ptr->text structure directly. Added PNGAPI macro, and added it to the definitions of all exported functions. Relocated version macro definitions ahead of the includes of zlib.h and pngconf.h in png.h. version 1.0.7beta12 [May 12, 2000] Revised pngset.c to avoid a problem with expanding the png_debug macro. Deleted some extraneous defines from pngconf.h Made PNG_NO_CONSOLE_IO the default condition when PNG_BUILD_DLL is defined. Use MSC _RPTn debugging instead of fprintf if _MSC_VER is defined. Added png_access_version_number() function. Check for mask&PNG_FREE_CHNK (for TEXT, SCAL, PCAL) in png_free_data(). Expanded libpng.3/libpng.txt information about png_data_freer(). version 1.0.7beta14 [May 17, 2000] (beta13 was not published) Changed pnggccrd.c and pngvcrd.c to handle bad adaptive filter types as warnings instead of errors, as pngrutil.c does. Set the PNG_INFO_IDAT valid flag in png_set_rows() so png_write_png() will actually write IDATs. Made the default PNG_USE_LOCAL_ARRAYS depend on PNG_DLL instead of WIN32. Make png_free_data() ignore its final parameter except when freeing data that can have multiple instances (text, sPLT, unknowns). Fixed a new bug in png_set_rows(). Removed info_ptr->valid tests from png_free_data(), as in version 1.0.5. Added png_set_invalid() function. Fixed incorrect illustrations of png_destroy_write_struct() in example.c. version 1.0.7beta15 [May 30, 2000] Revised the deliberately erroneous Linux setjmp code in pngconf.h to produce fewer error messages. Rearranged checks for Z_OK to check the most likely path first in pngpread.c and pngwutil.c. Added checks in pngtest.c for png_create_*() returning NULL, and mentioned in libpng.txt/libpng.3 the need for applications to check this. Changed names of png_default_*() functions in pngtest to pngtest_*(). Changed return type of png_get_x|y_offset_*() from png_uint_32 to png_int_32. Fixed some bugs in the unused PNG_INCH_CONVERSIONS functions in pngget.c Set each pointer to NULL after freeing it in png_free_data(). Worked around a problem in pngconf.h; AIX's strings.h defines an "index" macro that conflicts with libpng's png_color_16.index. (Dimitri Papadapoulos) Added "msvc" directory with MSVC++ project files (Simon-Pierre Cadieux). version 1.0.7beta16 [June 4, 2000] Revised the workaround of AIX string.h "index" bug. Added a check for overlength PLTE chunk in pngrutil.c. Added PNG_NO_POINTER_INDEXING macro to use array-indexing instead of pointer indexing in pngrutil.c and pngwutil.c to accommodate a buggy compiler. Added a warning in png_decompress_chunk() when it runs out of data, e.g. when it tries to read an erroneous PhotoShop iCCP chunk. Added PNG_USE_DLL macro. Revised the copyright/disclaimer/license notice. Added contrib/msvctest directory version 1.0.7rc1 [June 9, 2000] Corrected the definition of PNG_TRANSFORM_INVERT_ALPHA (0x0400 not 0x0200) Added contrib/visupng directory (Willem van Schaik) version 1.0.7beta18 [June 23, 2000] Revised PNGAPI definition, and pngvcrd.c to work with __GCC__ and do not redefine PNGAPI if it is passed in via a compiler directive. Revised visupng/PngFile.c to remove returns from within the Try block. Removed leading underscores from "_PNG_H" and "_PNG_SAVE_BSD_SOURCE" macros. Updated contrib/visupng/cexcept.h to version 1.0.0. Fixed bugs in pngwrite.c and pngwutil.c that prevented writing iCCP chunks. version 1.0.7rc2 [June 28, 2000] Updated license to include disclaimers required by UCITA. Fixed "DJBPP" typo in pnggccrd.c introduced in beta18. version 1.0.7 [July 1, 2000] Revised the definition of "trans_values" in libpng.3/libpng.txt version 1.0.8beta1 [July 8, 2000] Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks. Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and pngwutil.c. Changed PNG_EXPORT_VAR to use PNG_IMPEXP, in pngconf.h. Removed unused "#include " from png.c Added WindowsCE support. Revised pnggccrd.c to work with gcc-2.95.2 and in the Cygwin environment. version 1.0.8beta2 [July 10, 2000] Added project files to the wince directory and made further revisions of pngtest.c, pngrio.c, and pngwio.c in support of WindowsCE. version 1.0.8beta3 [July 11, 2000] Only set the PNG_FLAG_FREE_TRNS or PNG_FREE_TRNS flag in png_handle_tRNS() for indexed-color input files to avoid potential double-freeing trans array under some unusual conditions; problem was introduced in version 1.0.6f. Further revisions to pngtest.c and files in the wince subdirectory. version 1.0.8beta4 [July 14, 2000] Added the files pngbar.png and pngbar.jpg to the distribution. Added makefile.cygwin, and cygwin support in pngconf.h Added PNG_NO_ZALLOC_ZERO macro (makes png_zalloc skip zeroing memory) version 1.0.8rc1 [July 16, 2000] Revised png_debug() macros and statements to eliminate compiler warnings. version 1.0.8 [July 24, 2000] Added png_flush() in pngwrite.c, after png_write_IEND(). Updated makefile.hpux to build a shared library. version 1.0.9beta1 [November 10, 2000] Fixed typo in scripts/makefile.hpux Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser) Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser) Changed "cdrom.com" in documentation to "libpng.org" Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg). Changed type of "params" from voidp to png_voidp in png_read|write_png(). Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h. Revised the 3 instances of WRITEFILE in pngtest.c. Relocated "msvc" and "wince" project subdirectories into "dll" subdirectory. Updated png.rc in dll/msvc project Revised makefile.dec to define and use LIBPATH and INCPATH Increased size of global png_libpng_ver[] array from 12 to 18 chars. Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const. Removed duplicate png_crc_finish() from png_handle_bKGD() function. Added a warning when application calls png_read_update_info() multiple times. Revised makefile.cygwin Fixed bugs in iCCP support in pngrutil.c and pngwutil.c. Replaced png_set_empty_plte_permitted() with png_permit_mng_features(). version 1.0.9beta2 [November 19, 2000] Renamed the "dll" subdirectory "projects". Added borland project files to "projects" subdirectory. Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when appropriate. Add error message in png_set_compression_buffer_size() when malloc fails. version 1.0.9beta3 [November 23, 2000] Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project. Removed the png_flush() in pngwrite.c that crashes some applications that don't set png_output_flush_fn. Added makefile.macosx and makefile.aix to scripts directory. version 1.0.9beta4 [December 1, 2000] Change png_chunk_warning to png_warning in png_check_keyword(). Increased the first part of msg buffer from 16 to 18 in png_chunk_error(). version 1.0.9beta5 [December 15, 2000] Added support for filter method 64 (for PNG datastreams embedded in MNG). version 1.0.9beta6 [December 18, 2000] Revised png_set_filter() to accept filter method 64 when appropriate. Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to help prevent applications from using MNG features in PNG datastreams. Added png_permit_mng_features() function. Revised libpng.3/libpng.txt. Changed "filter type" to "filter method". version 1.0.9rc1 [December 23, 2000] Revised test for PNG_HAVE_PNG_SIGNATURE in pngrutil.c Fixed error handling of unknown compression type in png_decompress_chunk(). In pngconf.h, define __cdecl when _MSC_VER is defined. version 1.0.9beta7 [December 28, 2000] Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several places. Revised memory management in png_set_hIST and png_handle_hIST in a backward compatible manner. PLTE and tRNS were revised similarly. Revised the iCCP chunk reader to ignore trailing garbage. version 1.0.9beta8 [January 12, 2001] Moved pngasmrd.h into pngconf.h. Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop. version 1.0.9beta9 [January 15, 2001] Added png_set_invalid, png_permit_mng_features, and png_mmx_supported to wince and msvc project module definition files. Minor revision of makefile.cygwin. Fixed bug with progressive reading of narrow interlaced images in pngpread.c version 1.0.9beta10 [January 16, 2001] Do not typedef png_FILE_p in pngconf.h when PNG_NO_STDIO is defined. Fixed "png_mmx_supported" typo in project definition files. version 1.0.9beta11 [January 19, 2001] Updated makefile.sgi to make shared library. Removed png_mmx_support() function and disabled PNG_MNG_FEATURES_SUPPORTED by default, for the benefit of DLL forward compatibility. These will be re-enabled in version 1.2.0. version 1.0.9rc2 [January 22, 2001] Revised cygwin support. version 1.0.9 [January 31, 2001] Added check of cygwin's ALL_STATIC in pngconf.h Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos. version 1.0.10beta1 [March 14, 2001] Revised makefile.dec, makefile.sgi, and makefile.sggcc; added makefile.hpgcc. Reformatted libpng.3 to eliminate bad line breaks. Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c Added prototype for png_mmx_support() near the top of pnggccrd.c Moved some error checking from png_handle_IHDR to png_set_IHDR. Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros. Revised png_mmx_support() function in pnggccrd.c Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c Fixed memory leak in contrib/visupng/PngFile.c Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version) Added warnings when retrieving or setting gamma=0. Increased the first part of msg buffer from 16 to 18 in png_chunk_warning(). version 1.0.10rc1 [March 23, 2001] Changed all instances of memcpy, strcpy, and strlen to png_memcpy, png_strcpy, and png_strlen. Revised png_mmx_supported() function in pnggccrd.c to return proper value. Fixed bug in progressive reading (pngpread.c) with small images (height < 8). version 1.0.10 [March 30, 2001] Deleted extraneous space (introduced in 1.0.9) from line 42 of makefile.cygwin Added beos project files (Chris Herborth) version 1.0.11beta1 [April 3, 2001] Added type casts on several png_malloc() calls (Dimitri Papadapoulos). Removed a no-longer needed AIX work-around from pngconf.h Changed several "//" single-line comments to C-style in pnggccrd.c version 1.0.11beta2 [April 11, 2001] Removed PNGAPI from several functions whose prototypes did not have PNGAPI. Updated scripts/pngos2.def version 1.0.11beta3 [April 14, 2001] Added checking the results of many instances of png_malloc() for NULL version 1.0.11beta4 [April 20, 2001] Undid the changes from version 1.0.11beta3. Added a check for NULL return from user's malloc_fn(). Removed some useless type casts of the NULL pointer. Added makefile.netbsd version 1.0.11 [April 27, 2001] Revised makefile.netbsd version 1.0.12beta1 [May 14, 2001] Test for Windows platform in pngconf.h when including malloc.h (Emmanuel Blot) Updated makefile.cygwin and handling of Cygwin's ALL_STATIC in pngconf.h Added some never-to-be-executed code in pnggccrd.c to quiet compiler warnings. Eliminated the png_error about apps using png_read|write_init(). Instead, libpng will reallocate the png_struct and info_struct if they are too small. This retains future binary compatibility for old applications written for libpng-0.88 and earlier. version 1.2.0beta1 [May 6, 2001] Bumped DLLNUM to 2. Re-enabled PNG_MNG_FEATURES_SUPPORTED and enabled PNG_ASSEMBLER_CODE_SUPPORTED by default. Added runtime selection of MMX features. Added png_set_strip_error_numbers function and related macros. version 1.2.0beta2 [May 7, 2001] Finished merging 1.2.0beta1 with version 1.0.11 Added a check for attempts to read or write PLTE in grayscale PNG datastreams. version 1.2.0beta3 [May 17, 2001] Enabled user memory function by default. Modified png_create_struct so it passes user mem_ptr to user memory allocator. Increased png_mng_features flag from png_byte to png_uint_32. Bumped shared-library (so-number) and dll-number to 3. version 1.2.0beta4 [June 23, 2001] Check for missing profile length field in iCCP chunk and free chunk_data in case of truncated iCCP chunk. Bumped shared-library number to 3 in makefile.sgi and makefile.sggcc Bumped dll-number from 2 to 3 in makefile.cygwin Revised contrib/gregbook/rpng*-x.c to avoid a memory leak and to exit cleanly if user attempts to run it on an 8-bit display. Updated contrib/gregbook Use png_malloc instead of png_zalloc to allocate palette in pngset.c Updated makefile.ibmc Added some typecasts to eliminate gcc 3.0 warnings. Changed prototypes of png_write_oFFS width and height from png_uint_32 to png_int_32. Updated example.c Revised prototypes for png_debug_malloc and png_debug_free in pngtest.c version 1.2.0beta5 [August 8, 2001] Revised contrib/gregbook Revised makefile.gcmmx Revised pnggccrd.c to conditionally compile some thread-unsafe code only when PNG_THREAD_UNSAFE_OK is defined. Added tests to prevent pngwutil.c from writing a bKGD or tRNS chunk with value exceeding 2^bit_depth-1 Revised makefile.sgi and makefile.sggcc Replaced calls to fprintf(stderr,...) with png_warning() in pnggccrd.c Removed restriction that do_invert_mono only operate on 1-bit opaque files version 1.2.0 [September 1, 2001] Changed a png_warning() to png_debug() in pnggccrd.c Fixed contrib/gregbook/rpng-x.c, rpng2-x.c to avoid crash with XFreeGC(). version 1.2.1beta1 [October 19, 2001] Revised makefile.std in contrib/pngminus Include background_1 in png_struct regardless of gamma support. Revised makefile.netbsd and makefile.macosx, added makefile.darwin. Revised example.c to provide more details about using row_callback(). version 1.2.1beta2 [October 25, 2001] Added type cast to each NULL appearing in a function call, except for WINCE functions. Added makefile.so9. version 1.2.1beta3 [October 27, 2001] Removed type casts from all NULLs. Simplified png_create_struct_2(). version 1.2.1beta4 [November 7, 2001] Revised png_create_info_struct() and png_creat_struct_2(). Added error message if png_write_info() was omitted. Type cast NULLs appearing in function calls when _NO_PROTO or PNG_TYPECAST_NULL is defined. version 1.2.1rc1 [November 24, 2001] Type cast NULLs appearing in function calls except when PNG_NO_TYPECAST_NULL is defined. Changed typecast of "size" argument to png_size_t in pngmem.c calls to the user malloc_fn, to agree with the prototype in png.h Added a pop/push operation to pnggccrd.c, to preserve Eflag (Maxim Sobolev) Updated makefile.sgi to recognize LIBPATH and INCPATH. Updated various makefiles so "make clean" does not remove previous major version of the shared library. version 1.2.1rc2 [December 4, 2001] Always allocate 256-entry internal palette, hist, and trans arrays, to avoid out-of-bounds memory reference caused by invalid PNG datastreams. Added a check for prefix_length > data_length in iCCP chunk handler. version 1.2.1 [December 7, 2001] None. version 1.2.2beta1 [February 22, 2002] Fixed a bug with reading the length of iCCP profiles (Larry Reeves). Revised makefile.linux, makefile.gcmmx, and makefile.sgi to generate libpng.a, libpng12.so (not libpng.so.3), and libpng12/png.h Revised makefile.darwin to remove "-undefined suppress" option. Added checks for gamma and chromaticity values over 21474.83, which exceed the limit for PNG unsigned 32-bit integers when encoded. Revised calls to png_create_read_struct() and png_create_write_struct() for simpler debugging. Revised png_zalloc() so zlib handles errors (uses PNG_FLAG_MALLOC_NULL_MEM_OK) version 1.2.2beta2 [February 23, 2002] Check chunk_length and idat_size for invalid (over PNG_MAX_UINT) lengths. Check for invalid image dimensions in png_get_IHDR. Added missing "fi;" in the install target of the SGI makefiles. Added install-static to all makefiles that make shared libraries. Always do gamma compensation when image is partially transparent. version 1.2.2beta3 [March 7, 2002] Compute background.gray and background_1.gray even when color_type is RGB in case image gets reduced to gray later. Modified shared-library makefiles to install pkgconfig/libpngNN.pc. Export (with PNGAPI) png_zalloc, png_zfree, and png_handle_as_unknown Removed unused png_write_destroy_info prototype from png.h Eliminated incorrect use of width_mmx from pnggccrd.c in pixel_bytes == 8 case Added install-shared target to all makefiles that make shared libraries. Stopped a double free of palette, hist, and trans when not using free_me. Added makefile.32sunu for Sun Ultra 32 and makefile.64sunu for Sun Ultra 64. version 1.2.2beta4 [March 8, 2002] Compute background.gray and background_1.gray even when color_type is RGB in case image gets reduced to gray later (Jason Summers). Relocated a misplaced /bin/rm in the "install-shared" makefile targets Added PNG_1_0_X macro which can be used to build a 1.0.x-compatible library. version 1.2.2beta5 [March 26, 2002] Added missing PNGAPI to several function definitions. Check for invalid bit_depth or color_type in png_get_IHDR(), and check for missing PLTE or IHDR in png_push_read_chunk() (Matthias Clasen). Revised iTXt support to accept NULL for lang and lang_key. Compute gamma for color components of background even when color_type is gray. Changed "()" to "{}" in scripts/libpng.pc.in. Revised makefiles to put png.h and pngconf.h only in $prefix/include/libpngNN Revised makefiles to make symlink to libpng.so.NN in addition to libpngNN.so version 1.2.2beta6 [March 31, 2002] version 1.0.13beta1 [March 31, 2002] Prevent png_zalloc() from trying to memset memory that it failed to acquire. Add typecasts of PNG_MAX_UINT in pngset_cHRM_fixed() (Matt Holgate). Ensure that the right function (user or default) is used to free the png_struct after an error in png_create_read_struct_2(). version 1.2.2rc1 [April 7, 2002] version 1.0.13rc1 [April 7, 2002] Save the ebx register in pnggccrd.c (Sami Farin) Add "mem_ptr = png_ptr->mem_ptr" in png_destroy_write_struct() (Paul Gardner). Updated makefiles to put headers in include/libpng and remove old include/*.h. version 1.2.2 [April 15, 2002] version 1.0.13 [April 15, 2002] Revised description of png_set_filter() in libpng.3/libpng.txt. Revised makefile.netbsd and added makefile.neNNbsd and makefile.freebsd version 1.0.13patch01 [April 17, 2002] version 1.2.2patch01 [April 17, 2002] Changed ${PNGMAJ}.${PNGVER} bug to ${PNGVER} in makefile.sgi and makefile.sggcc Fixed VER -> PNGVER typo in makefile.macosx and added install-static to install Added install: target to makefile.32sunu and makefile.64sunu version 1.0.13patch03 [April 18, 2002] version 1.2.2patch03 [April 18, 2002] Revised 15 makefiles to link libpng.a to libpngNN.a and the include libpng subdirectory to libpngNN subdirectory without the full pathname. Moved generation of libpng.pc from "install" to "all" in 15 makefiles. version 1.2.3rc1 [April 28, 2002] Added install-man target to 15 makefiles (Dimitri Papadopolous-Orfanos). Added $(DESTDIR) feature to 24 makefiles (Tim Mooney) Fixed bug with $prefix, should be $(prefix) in makefile.hpux. Updated cygwin-specific portion of pngconf.h and revised makefile.cygwin Added a link from libpngNN.pc to libpng.pc in 15 makefiles. Added links from include/libpngNN/*.h to include/*.h in 24 makefiles. Revised makefile.darwin to make relative links without full pathname. Added setjmp() at the end of png_create_*_struct_2() in case user forgets to put one in their application. Restored png_zalloc() and png_zfree() prototypes to version 1.2.1 and removed them from module definition files. version 1.2.3rc2 [May 1, 2002] Fixed bug in reporting number of channels in pngget.c and pngset.c, that was introduced in version 1.2.2beta5. Exported png_zalloc(), png_zfree(), png_default_read(), png_default_write(), png_default_flush(), and png_push_fill_buffer() and included them in module definition files. Added "libpng.pc" dependency to the "install-shared" target in 15 makefiles. version 1.2.3rc3 [May 1, 2002] Revised prototype for png_default_flush() Remove old libpng.pc and libpngNN.pc before installing new ones. version 1.2.3rc4 [May 2, 2002] Typos in *.def files (png_default_read|write -> png_default_read|write_data) In makefiles, changed rm libpng.NN.pc to rm libpngNN.pc Added libpng-config and libpngNN-config and modified makefiles to install them. Changed $(MANPATH) to $(DESTDIR)$(MANPATH) in makefiles Added "Win32 DLL VB" configuration to projects/msvc/libpng.dsp version 1.2.3rc5 [May 11, 2002] Changed "error" and "message" in prototypes to "error_message" and "warning_message" to avoid namespace conflict. Revised 15 makefiles to build libpng-config from libpng-config-*.in Once more restored png_zalloc and png_zfree to regular nonexported form. Restored png_default_read|write_data, png_default_flush, png_read_fill_buffer to nonexported form, but with PNGAPI, and removed them from module def files. version 1.2.3rc6 [May 14, 2002] Removed "PNGAPI" from png_zalloc() and png_zfree() in png.c Changed "Gz" to "Gd" in projects/msvc/libpng.dsp and zlib.dsp. Removed leftover libpng-config "sed" script from four makefiles. Revised libpng-config creating script in 16 makefiles. version 1.2.3 [May 22, 2002] Revised libpng-config target in makefile.cygwin. Removed description of png_set_mem_fn() from documentation. Revised makefile.freebsd. Minor cosmetic changes to 15 makefiles, e.g., $(DI) = $(DESTDIR)/$(INCDIR). Revised projects/msvc/README.txt Changed -lpng to -lpngNN in LDFLAGS in several makefiles. version 1.2.4beta1 [May 24, 2002] Added libpng.pc and libpng-config to "all:" target in 16 makefiles. Fixed bug in 16 makefiles: $(DESTDIR)/$(LIBPATH) to $(DESTDIR)$(LIBPATH) Added missing "\" before closing double quote in makefile.gcmmx. Plugged various memory leaks; added png_malloc_warn() and png_set_text_2() functions. version 1.2.4beta2 [June 25, 2002] Plugged memory leak of png_ptr->current_text (Matt Holgate). Check for buffer overflow before reading CRC in pngpread.c (Warwick Allison) Added -soname to the loader flags in makefile.dec, makefile.sgi, and makefile.sggcc. Added "test-installed" target to makefile.linux, makefile.gcmmx, makefile.sgi, and makefile.sggcc. version 1.2.4beta3 [June 28, 2002] Plugged memory leak of row_buf in pngtest.c when there is a png_error(). Detect buffer overflow in pngpread.c when IDAT is corrupted with extra data. Added "test-installed" target to makefile.32sunu, makefile.64sunu, makefile.beos, makefile.darwin, makefile.dec, makefile.macosx, makefile.solaris, makefile.hpux, makefile.hpgcc, and makefile.so9. version 1.2.4rc1 and 1.0.14rc1 [July 2, 2002] Added "test-installed" target to makefile.cygwin and makefile.sco. Revised pnggccrd.c to be able to back out version 1.0.x via PNG_1_0_X macro. version 1.2.4 and 1.0.14 [July 8, 2002] Changed png_warning() to png_error() when width is too large to process. version 1.2.4patch01 [July 20, 2002] Revised makefile.cygwin to use DLL number 12 instead of 13. version 1.2.5beta1 [August 6, 2002] Added code to contrib/gregbook/readpng2.c to ignore unused chunks. Replaced toucan.png in contrib/gregbook (it has been corrupt since 1.0.11) Removed some stray *.o files from contrib/gregbook. Changed png_error() to png_warning() about "Too much data" in pngpread.c and about "Extra compressed data" in pngrutil.c. Prevent png_ptr->pass from exceeding 7 in png_push_finish_row(). Updated makefile.hpgcc Updated png.c and pnggccrd.c handling of return from png_mmx_support() version 1.2.5beta2 [August 15, 2002] Only issue png_warning() about "Too much data" in pngpread.c when avail_in is nonzero. Updated makefiles to install a separate libpng.so.3 with its own rpath. version 1.2.5rc1 and 1.0.15rc1 [August 24, 2002] Revised makefiles to not remove previous minor versions of shared libraries. version 1.2.5rc2 and 1.0.15rc2 [September 16, 2002] Revised 13 makefiles to remove "-lz" and "-L$(ZLIBLIB)", etc., from shared library loader directive. Added missing "$OBJSDLL" line to makefile.gcmmx. Added missing "; fi" to makefile.32sunu. version 1.2.5rc3 and 1.0.15rc3 [September 18, 2002] Revised libpng-config script. version 1.2.5 and 1.0.15 [October 3, 2002] Revised makefile.macosx, makefile.darwin, makefile.hpgcc, and makefile.hpux, and makefile.aix. Relocated two misplaced PNGAPI lines in pngtest.c version 1.2.6beta1 [October 22, 2002] Commented out warning about uninitialized mmx_support in pnggccrd.c. Changed "IBMCPP__" flag to "__IBMCPP__" in pngconf.h. Relocated two more misplaced PNGAPI lines in pngtest.c Fixed memory overrun bug in png_do_read_filler() with 16-bit datastreams, introduced in version 1.0.2. Revised makefile.macosx, makefile.dec, makefile.aix, and makefile.32sunu. version 1.2.6beta2 [November 1, 2002] Added libpng-config "--ldopts" output. Added "AR=ar" and "ARFLAGS=rc" and changed "ar rc" to "$(AR) $(ARFLAGS)" in makefiles. version 1.2.6beta3 [July 18, 2004] Reverted makefile changes from version 1.2.6beta2 and some of the changes from version 1.2.6beta1; these will be postponed until version 1.2.7. Version 1.2.6 is going to be a simple bugfix release. Changed the one instance of "ln -sf" to "ln -f -s" in each Sun makefile. Fixed potential overrun in pngerror.c by using strncpy instead of memcpy. Added "#!/bin/sh" at the top of configure, for recognition of the 'x' flag under Cygwin (Cosmin). Optimized vacuous tests that silence compiler warnings, in png.c (Cosmin). Added support for PNG_USER_CONFIG, in pngconf.h (Cosmin). Fixed the special memory handler for Borland C under DOS, in pngmem.c (Cosmin). Removed some spurious assignments in pngrutil.c (Cosmin). Replaced 65536 with 65536L, and 0xffff with 0xffffL, to silence warnings on 16-bit platforms (Cosmin). Enclosed shift op expressions in parentheses, to silence warnings (Cosmin). Used proper type png_fixed_point, to avoid problems on 16-bit platforms, in png_handle_sRGB() (Cosmin). Added compression_type to png_struct, and optimized the window size inside the deflate stream (Cosmin). Fixed definition of isnonalpha(), in pngerror.c and pngrutil.c (Cosmin). Fixed handling of unknown chunks that come after IDAT (Cosmin). Allowed png_error() and png_warning() to work even if png_ptr == NULL (Cosmin). Replaced row_info->rowbytes with row_bytes in png_write_find_filter() (Cosmin). Fixed definition of PNG_LIBPNG_VER_DLLNUM (Simon-Pierre). Used PNG_LIBPNG_VER and PNG_LIBPNG_VER_STRING instead of the hardcoded values in png.c (Simon-Pierre, Cosmin). Initialized png_libpng_ver[] with PNG_LIBPNG_VER_STRING (Simon-Pierre). Replaced PNG_LIBPNG_VER_MAJOR with PNG_LIBPNG_VER_DLLNUM in png.rc (Simon-Pierre). Moved the definition of PNG_HEADER_VERSION_STRING near the definitions of the other PNG_LIBPNG_VER_... symbols in png.h (Cosmin). Relocated #ifndef PNGAPI guards in pngconf.h (Simon-Pierre, Cosmin). Updated scripts/makefile.vc(a)win32 (Cosmin). Updated the MSVC project (Simon-Pierre, Cosmin). Updated the Borland C++ Builder project (Cosmin). Avoided access to asm_flags in pngvcrd.c, if PNG_1_0_X is defined (Cosmin). Commented out warning about uninitialized mmx_support in pngvcrd.c (Cosmin). Removed scripts/makefile.bd32 and scripts/pngdef.pas (Cosmin). Added extra guard around inclusion of Turbo C memory headers, in pngconf.h (Cosmin). Renamed projects/msvc/ to projects/visualc6/, and projects/borland/ to projects/cbuilder5/ (Cosmin). Moved projects/visualc6/png32ms.def to scripts/pngw32.def, and projects/visualc6/png.rc to scripts/pngw32.rc (Cosmin). Added projects/visualc6/pngtest.dsp; removed contrib/msvctest/ (Cosmin). Changed line endings to DOS style in cbuilder5 and visualc6 files, even in the tar.* distributions (Cosmin). Updated contrib/visupng/VisualPng.dsp (Cosmin). Updated contrib/visupng/cexcept.h to version 2.0.0 (Cosmin). Added a separate distribution with "configure" and supporting files (Junichi). version 1.2.6beta4 [July 28, 2004] Added user ability to change png_size_t via a PNG_SIZE_T macro. Added png_sizeof() and png_convert_size() functions. Added PNG_SIZE_MAX (maximum value of a png_size_t variable. Added check in png_malloc_default() for (size_t)size != (png_uint_32)size which would indicate an overflow. Changed sPLT failure action from png_error to png_warning and abandon chunk. Changed sCAL and iCCP failures from png_error to png_warning and abandon. Added png_get_uint_31(png_ptr, buf) function. Added PNG_UINT_32_MAX macro. Renamed PNG_MAX_UINT to PNG_UINT_31_MAX. Made png_zalloc() issue a png_warning and return NULL on potential overflow. Turn on PNG_NO_ZALLOC_ZERO by default in version 1.2.x Revised "clobber list" in pnggccrd.c so it will compile under gcc-3.4. Revised Borland portion of png_malloc() to return NULL or issue png_error() according to setting of PNG_FLAG_MALLOC_NULL_MEM_OK. Added PNG_NO_SEQUENTIAL_READ_SUPPORTED macro to conditionally remove sequential read support. Added some "#if PNG_WRITE_SUPPORTED" blocks. #ifdef'ed out some redundancy in png_malloc_default(). Use png_malloc instead of png_zalloc to allocate the pallete. version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004] Fixed buffer overflow vulnerability in png_handle_tRNS() Fixed integer arithmetic overflow vulnerability in png_read_png(). Fixed some harmless bugs in png_handle_sBIT, etc, that would cause duplicate chunk types to go undetected. Fixed some timestamps in the -config version Rearranged order of processing of color types in png_handle_tRNS(). Added ROWBYTES macro to calculate rowbytes without integer overflow. Updated makefile.darwin and removed makefile.macosx from scripts directory. Imposed default one million column, one-million row limits on the image dimensions, and added png_set_user_limits() function to override them. Revised use of PNG_SET_USER_LIMITS_SUPPORTED macro. Fixed wrong cast of returns from png_get_user_width|height_max(). Changed some "keep the compiler happy" from empty statements to returns, Revised libpng.txt to remove 1.2.x stuff from the 1.0.x distribution version 1.0.16rc2 and 1.2.6rc2 [August 7, 2004] Revised makefile.darwin and makefile.solaris. Removed makefile.macosx. Revised pngtest's png_debug_malloc() to use png_malloc() instead of png_malloc_default() which is not supposed to be exported. Fixed off-by-one error in one of the conversions to PNG_ROWBYTES() in pngpread.c. Bug was introduced in 1.2.6rc1. Fixed bug in RGB to RGBX transformation introduced in 1.2.6rc1. Fixed old bug in RGB to Gray transformation. Fixed problem with 64-bit compilers by casting arguments to abs() to png_int_32. Changed "ln -sf" to "ln -f -s" in three makefiles (solaris, sco, so9). Changed "HANDLE_CHUNK_*" to "PNG_HANDLE_CHUNK_*" (Cosmin) Added "-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGMAJ)" to 15 *NIX makefiles. Added code to update the row_info->colortype in png_do_read_filler() (MSB). version 1.0.16rc3 and 1.2.6rc3 [August 9, 2004] Eliminated use of "abs()" in testing cHRM and gAMA values, to avoid trouble with some 64-bit compilers. Created PNG_OUT_OF_RANGE() macro. Revised documentation of png_set_keep_unknown_chunks(). Check handle_as_unknown status in pngpread.c, as in pngread.c previously. Moved "PNG_HANDLE_CHUNK_*" macros out of PNG_INTERNAL section of png.h Added "rim" definitions for CONST4 and CONST6 in pnggccrd.c version 1.0.16rc4 and 1.2.6rc4 [August 10, 2004] Fixed mistake in pngtest.c introduced in 1.2.6rc2 (declaration of "pinfo" was out of place). version 1.0.16rc5 and 1.2.6rc5 [August 10, 2004] Moved "PNG_HANDLE_CHUNK_*" macros out of PNG_ASSEMBLER_CODE_SUPPORTED section of png.h where they were inadvertently placed in version rc3. version 1.0.16 and 1.2.6 [August 15, 2004] Revised pngtest so memory allocation testing is only done when PNG_DEBUG==1. version 1.2.7beta1 [August 26, 2004] Removed unused pngasmrd.h file. Removed references to uu.net for archived files. Added references to PNG Spec (second edition) and the PNG ISO/IEC Standard. Added "test-dd" target in 15 makefiles, to run pngtest in DESTDIR. Fixed bug with "optimized window size" in the IDAT datastream, that causes libpng to write PNG files with incorrect zlib header bytes. version 1.2.7beta2 [August 28, 2004] Fixed bug with sCAL chunk and big-endian machines (David Munro). Undid new code added in 1.2.6rc2 to update the color_type in png_set_filler(). Added png_set_add_alpha() that updates color type. version 1.0.17rc1 and 1.2.7rc1 [September 4, 2004] Revised png_set_strip_filler() to not remove alpha if color_type has alpha. version 1.0.17 and 1.2.7 [September 12, 2004] Added makefile.hp64 Changed projects/msvc/png32ms.def to scripts/png32ms.def in makefile.cygwin Send comments/corrections/commendations to png-implement@ccrc.wustl.edu (subscription required; write to majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message) or to glennrp@users.sourceforge.net Glenn R-P htmldoc-1.8.27/png/png.h0100664000212600000240000042063710124712606013456 0ustar mikeuser/* png.h - header file for PNG reference library * * libpng version 1.2.7 - September 12, 2004 * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * * Authors and maintainers: * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger * libpng versions 0.97, January 1998, through 1.2.7 - September 12, 2004: Glenn * See also "Contributing Authors", below. * * Note about libpng version numbers: * * Due to various miscommunications, unforeseen code incompatibilities * and occasional factors outside the authors' control, version numbering * on the library has not always been consistent and straightforward. * The following table summarizes matters since version 0.89c, which was * the first widely used release: * * source png.h png.h shared-lib * version string int version * ------- ------ ----- ---------- * 0.89c "1.0 beta 3" 0.89 89 1.0.89 * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] * 0.97c 0.97 97 2.0.97 * 0.98 0.98 98 2.0.98 * 0.99 0.99 98 2.0.99 * 0.99a-m 0.99 99 2.0.99 * 1.00 1.00 100 2.1.0 [100 should be 10000] * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] * 1.0.1 png.h string is 10001 2.1.0 * 1.0.1a-e identical to the 10002 from here on, the shared library * 1.0.2 source version) 10002 is 2.V where V is the source code * 1.0.2a-b 10003 version, except as noted. * 1.0.3 10003 * 1.0.3a-d 10004 * 1.0.4 10004 * 1.0.4a-f 10005 * 1.0.5 (+ 2 patches) 10005 * 1.0.5a-d 10006 * 1.0.5e-r 10100 (not source compatible) * 1.0.5s-v 10006 (not binary compatible) * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) * 1.0.6d-f 10007 (still binary incompatible) * 1.0.6g 10007 * 1.0.6h 10007 10.6h (testing xy.z so-numbering) * 1.0.6i 10007 10.6i * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) * 1.0.7 1 10007 (still compatible) * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 * 1.0.8rc1 1 10008 2.1.0.8rc1 * 1.0.8 1 10008 2.1.0.8 * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 * 1.0.9rc1 1 10009 2.1.0.9rc1 * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 * 1.0.9rc2 1 10009 2.1.0.9rc2 * 1.0.9 1 10009 2.1.0.9 * 1.0.10beta1 1 10010 2.1.0.10beta1 * 1.0.10rc1 1 10010 2.1.0.10rc1 * 1.0.10 1 10010 2.1.0.10 * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 * 1.0.11rc1 1 10011 2.1.0.11rc1 * 1.0.11 1 10011 2.1.0.11 * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 * 1.0.12rc1 2 10012 2.1.0.12rc1 * 1.0.12 2 10012 2.1.0.12 * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 * 1.2.0rc1 3 10200 3.1.2.0rc1 * 1.2.0 3 10200 3.1.2.0 * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 * 1.2.1 3 10201 3.1.2.1 * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 * 1.0.13 10 10013 10.so.0.1.0.13 * 1.2.2 12 10202 12.so.0.1.2.2 * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 * 1.2.3 12 10203 12.so.0.1.2.3 * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 * 1.0.14 10 10014 10.so.0.1.0.14 * 1.2.4 13 10204 12.so.0.1.2.4 * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 * 1.0.15 10 10015 10.so.0.1.0.15 * 1.2.5 13 10205 12.so.0.1.2.5 * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 * 1.0.16 10 10016 10.so.0.1.0.16 * 1.2.6 13 10206 12.so.0.1.2.6 * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 * 1.0.17 10 10017 12.so.0.1.0.17 * 1.2.7 13 10207 12.so.0.1.2.7 * * Henceforth the source version will match the shared-library major * and minor numbers; the shared-library major version number will be * used for changes in backward compatibility, as it is intended. The * PNG_LIBPNG_VER macro, which is not used within libpng but is available * for applications, is an unsigned integer of the form xyyzz corresponding * to the source version x.y.z (leading zeros in y and z). Beta versions * were given the previous public release number plus a letter, until * version 1.0.6j; from then on they were given the upcoming public * release number plus "betaNN" or "rcN". * * Binary incompatibility exists only when applications make direct access * to the info_ptr or png_ptr members through png.h, and the compiled * application is loaded with a different version of the library. * * DLLNUM will change each time there are forward or backward changes * in binary compatibility (e.g., when a new feature is added). * * See libpng.txt or libpng.3 for more information. The PNG specification * is available as a W3C Recommendation and as an ISO Specification, * defines should NOT be changed. */ #define PNG_INFO_gAMA 0x0001 #define PNG_INFO_sBIT 0x0002 #define PNG_INFO_cHRM 0x0004 #define PNG_INFO_PLTE 0x0008 #define PNG_INFO_tRNS 0x0010 #define PNG_INFO_bKGD 0x0020 #define PNG_INFO_hIST 0x0040 #define PNG_INFO_pHYs 0x0080 #define PNG_INFO_oFFs 0x0100 #define PNG_INFO_tIME 0x0200 #define PNG_INFO_pCAL 0x0400 #define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ #define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ /* This is used for the transformation routines, as some of them * change these values for the row. It also should enable using * the routines for other purposes. */ typedef struct png_row_info_struct { png_uint_32 width; /* width of row */ png_uint_32 rowbytes; /* number of bytes in row */ png_byte color_type; /* color type of row */ png_byte bit_depth; /* bit depth of row */ png_byte channels; /* number of channels (1, 2, 3, or 4) */ png_byte pixel_depth; /* bits per pixel (depth * channels) */ } png_row_info; typedef png_row_info FAR * png_row_infop; typedef png_row_info FAR * FAR * png_row_infopp; /* These are the function types for the I/O functions and for the functions * that allow the user to override the default I/O functions with his or her * own. The png_error_ptr type should match that of user-supplied warning * and error functions, while the png_rw_ptr type should match that of the * user read/write data functions. */ typedef struct png_struct_def png_struct; typedef png_struct FAR * png_structp; typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, int)); typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, int)); #ifdef PNG_PROGRESSIVE_READ_SUPPORTED typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop)); typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, png_uint_32, int)); #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED) typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, png_row_infop, png_bytep)); #endif #if defined(PNG_USER_CHUNKS_SUPPORTED) typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); #endif #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); #endif /* Transform masks for the high-level interface */ #define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ #define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ #define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ #define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ #define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ #define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ #define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ #define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ #define PNG_TRANSFORM_BGR 0x0080 /* read and write */ #define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ #define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ #define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ #define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ /* Flags for MNG supported features */ #define PNG_FLAG_MNG_EMPTY_PLTE 0x01 #define PNG_FLAG_MNG_FILTER_64 0x04 #define PNG_ALL_MNG_FEATURES 0x05 typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); /* The structure that holds the information to read and write PNG files. * The only people who need to care about what is inside of this are the * people who will be modifying the library for their own special needs. * It should NOT be accessed directly by an application, except to store * the jmp_buf. */ struct png_struct_def { #ifdef PNG_SETJMP_SUPPORTED jmp_buf jmpbuf; /* used in png_error */ #endif png_error_ptr error_fn; /* function for printing errors and aborting */ png_error_ptr warning_fn; /* function for printing warnings */ png_voidp error_ptr; /* user supplied struct for error functions */ png_rw_ptr write_data_fn; /* function for writing output data */ png_rw_ptr read_data_fn; /* function for reading input data */ png_voidp io_ptr; /* ptr to application struct for I/O functions */ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) png_user_transform_ptr read_user_transform_fn; /* user read transform */ #endif #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) png_user_transform_ptr write_user_transform_fn; /* user write transform */ #endif /* These were added in libpng-1.0.2 */ #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) png_voidp user_transform_ptr; /* user supplied struct for user transform */ png_byte user_transform_depth; /* bit depth of user transformed pixels */ png_byte user_transform_channels; /* channels in user transformed pixels */ #endif #endif png_uint_32 mode; /* tells us where we are in the PNG file */ png_uint_32 flags; /* flags indicating various things to libpng */ png_uint_32 transformations; /* which transformations to perform */ z_stream zstream; /* pointer to decompression structure (below) */ png_bytep zbuf; /* buffer for zlib */ png_size_t zbuf_size; /* size of zbuf */ int zlib_level; /* holds zlib compression level */ int zlib_method; /* holds zlib compression method */ int zlib_window_bits; /* holds zlib compression window bits */ int zlib_mem_level; /* holds zlib compression memory level */ int zlib_strategy; /* holds zlib compression strategy */ png_uint_32 width; /* width of image in pixels */ png_uint_32 height; /* height of image in pixels */ png_uint_32 num_rows; /* number of rows in current pass */ png_uint_32 usr_width; /* width of row at start of write */ png_uint_32 rowbytes; /* size of row in bytes */ png_uint_32 irowbytes; /* size of current interlaced row in bytes */ png_uint_32 iwidth; /* width of current interlaced row in pixels */ png_uint_32 row_number; /* current row in interlace pass */ png_bytep prev_row; /* buffer to save previous (unfiltered) row */ png_bytep row_buf; /* buffer to save current (unfiltered) row */ png_bytep sub_row; /* buffer to save "sub" row when filtering */ png_bytep up_row; /* buffer to save "up" row when filtering */ png_bytep avg_row; /* buffer to save "avg" row when filtering */ png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ png_row_info row_info; /* used for transformation routines */ png_uint_32 idat_size; /* current IDAT size for read */ png_uint_32 crc; /* current chunk CRC value */ png_colorp palette; /* palette from the input file */ png_uint_16 num_palette; /* number of color entries in palette */ png_uint_16 num_trans; /* number of transparency values */ png_byte chunk_name[5]; /* null-terminated name of current chunk */ png_byte compression; /* file compression type (always 0) */ png_byte filter; /* file filter type (always 0) */ png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ png_byte pass; /* current interlace pass (0 - 6) */ png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ png_byte color_type; /* color type of file */ png_byte bit_depth; /* bit depth of file */ png_byte usr_bit_depth; /* bit depth of users row */ png_byte pixel_depth; /* number of bits per pixel */ png_byte channels; /* number of channels in file */ png_byte usr_channels; /* channels at start of write */ png_byte sig_bytes; /* magic bytes read/written from start of file */ #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) #ifdef PNG_LEGACY_SUPPORTED png_byte filler; /* filler byte for pixel expansion */ #else png_uint_16 filler; /* filler bytes for pixel expansion */ #endif #endif #if defined(PNG_bKGD_SUPPORTED) png_byte background_gamma_type; # ifdef PNG_FLOATING_POINT_SUPPORTED float background_gamma; # endif png_color_16 background; /* background color in screen gamma space */ #if defined(PNG_READ_GAMMA_SUPPORTED) png_color_16 background_1; /* background normalized to gamma 1.0 */ #endif #endif /* PNG_bKGD_SUPPORTED */ #if defined(PNG_WRITE_FLUSH_SUPPORTED) png_flush_ptr output_flush_fn;/* Function for flushing output */ png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ png_uint_32 flush_rows; /* number of rows written since last flush */ #endif #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ #ifdef PNG_FLOATING_POINT_SUPPORTED float gamma; /* file gamma value */ float screen_gamma; /* screen gamma value (display_exponent) */ #endif #endif #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) png_bytep gamma_table; /* gamma table for 8-bit depth files */ png_bytep gamma_from_1; /* converts from 1.0 to screen */ png_bytep gamma_to_1; /* converts from file to 1.0 */ png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ #endif #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) png_color_8 sig_bit; /* significant bits in each available channel */ #endif #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) png_color_8 shift; /* shift for significant bit tranformation */ #endif #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) png_bytep trans; /* transparency values for paletted files */ png_color_16 trans_values; /* transparency values for non-paletted files */ #endif png_read_status_ptr read_row_fn; /* called after each row is decoded */ png_write_status_ptr write_row_fn; /* called after each row is encoded */ #ifdef PNG_PROGRESSIVE_READ_SUPPORTED png_progressive_info_ptr info_fn; /* called after header data fully read */ png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */ png_progressive_end_ptr end_fn; /* called after image is complete */ png_bytep save_buffer_ptr; /* current location in save_buffer */ png_bytep save_buffer; /* buffer for previously read data */ png_bytep current_buffer_ptr; /* current location in current_buffer */ png_bytep current_buffer; /* buffer for recently used data */ png_uint_32 push_length; /* size of current input chunk */ png_uint_32 skip_length; /* bytes to skip in input data */ png_size_t save_buffer_size; /* amount of data now in save_buffer */ png_size_t save_buffer_max; /* total size of save_buffer */ png_size_t buffer_size; /* total amount of available input data */ png_size_t current_buffer_size; /* amount of data now in current_buffer */ int process_mode; /* what push library is currently doing */ int cur_palette; /* current push library palette index */ # if defined(PNG_TEXT_SUPPORTED) png_size_t current_text_size; /* current size of text input data */ png_size_t current_text_left; /* how much text left to read in input */ png_charp current_text; /* current text chunk buffer */ png_charp current_text_ptr; /* current location in current_text */ # endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */ #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) /* for the Borland special 64K segment handler */ png_bytepp offset_table_ptr; png_bytep offset_table; png_uint_16 offset_table_number; png_uint_16 offset_table_count; png_uint_16 offset_table_count_free; #endif #if defined(PNG_READ_DITHER_SUPPORTED) png_bytep palette_lookup; /* lookup table for dithering */ png_bytep dither_index; /* index translation for palette files */ #endif #if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED) png_uint_16p hist; /* histogram */ #endif #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_byte heuristic_method; /* heuristic for row filter selection */ png_byte num_prev_filters; /* number of weights for previous rows */ png_bytep prev_filters; /* filter type(s) of previous row(s) */ png_uint_16p filter_weights; /* weight(s) for previous line(s) */ png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ png_uint_16p filter_costs; /* relative filter calculation cost */ png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ #endif #if defined(PNG_TIME_RFC1123_SUPPORTED) png_charp time_buffer; /* String to hold RFC 1123 time text */ #endif /* New members added in libpng-1.0.6 */ #ifdef PNG_FREE_ME_SUPPORTED png_uint_32 free_me; /* flags items libpng is responsible for freeing */ #endif #if defined(PNG_USER_CHUNKS_SUPPORTED) png_voidp user_chunk_ptr; png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ #endif #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) int num_chunk_list; png_bytep chunk_list; #endif /* New members added in libpng-1.0.3 */ #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) png_byte rgb_to_gray_status; /* These were changed from png_byte in libpng-1.0.6 */ png_uint_16 rgb_to_gray_red_coeff; png_uint_16 rgb_to_gray_green_coeff; png_uint_16 rgb_to_gray_blue_coeff; #endif /* New member added in libpng-1.0.4 (renamed in 1.0.9) */ #if defined(PNG_MNG_FEATURES_SUPPORTED) || \ defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) /* changed from png_byte to png_uint_32 at version 1.2.0 */ #ifdef PNG_1_0_X png_byte mng_features_permitted; #else png_uint_32 mng_features_permitted; #endif /* PNG_1_0_X */ #endif /* New member added in libpng-1.0.7 */ #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) png_fixed_point int_gamma; #endif /* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ #if defined(PNG_MNG_FEATURES_SUPPORTED) png_byte filter_type; #endif #if defined(PNG_1_0_X) || (defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD)) /* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ png_uint_32 row_buf_size; #endif /* New members added in libpng-1.2.0 */ #if !defined(PNG_1_0_X) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) png_byte mmx_bitdepth_threshold; png_uint_32 mmx_rowbytes_threshold; png_uint_32 asm_flags; #endif /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ #ifdef PNG_USER_MEM_SUPPORTED png_voidp mem_ptr; /* user supplied struct for mem functions */ png_malloc_ptr malloc_fn; /* function for allocating memory */ png_free_ptr free_fn; /* function for freeing memory */ #endif /* New member added in libpng-1.0.13 and 1.2.0 */ png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ #if defined(PNG_READ_DITHER_SUPPORTED) /* The following three members were added at version 1.0.14 and 1.2.4 */ png_bytep dither_sort; /* working sort array */ png_bytep index_to_palette; /* where the original index currently is */ /* in the palette */ png_bytep palette_to_index; /* which original index points to this */ /* palette color */ #endif /* New members added in libpng-1.0.16 and 1.2.6 */ png_byte compression_type; #ifdef PNG_SET_USER_LIMITS_SUPPORTED png_uint_32 user_width_max; png_uint_32 user_height_max; #endif }; /* This triggers a compiler error in png.c, if png.c and png.h * do not agree upon the version number. */ typedef png_structp version_1_2_7; typedef png_struct FAR * FAR * png_structpp; /* Here are the function definitions most commonly used. This is not * the place to find out how to use libpng. See libpng.txt for the * full explanation, see example.c for the summary. This just provides * a simple one line description of the use of each function. */ /* Returns the version number of the library */ extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); /* Tell lib we have already handled the first magic bytes. * Handling more than 8 bytes from the beginning of the file is an error. */ extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, int num_bytes)); /* Check sig[start] through sig[start + num_to_check - 1] to see if it's a * PNG file. Returns zero if the supplied bytes match the 8-byte PNG * signature, and non-zero otherwise. Having num_to_check == 0 or * start > 7 will always fail (ie return non-zero). */ extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, png_size_t num_to_check)); /* Simple signature checking function. This is the same as calling * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). */ extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); /* Allocate and initialize png_ptr struct for reading, and any other memory. */ extern PNG_EXPORT(png_structp,png_create_read_struct) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn)); /* Allocate and initialize png_ptr struct for writing, and any other memory */ extern PNG_EXPORT(png_structp,png_create_write_struct) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn)); #ifdef PNG_WRITE_SUPPORTED extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) PNGARG((png_structp png_ptr)); #endif #ifdef PNG_WRITE_SUPPORTED extern PNG_EXPORT(void,png_set_compression_buffer_size) PNGARG((png_structp png_ptr, png_uint_32 size)); #endif /* Reset the compression stream */ extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); /* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ #ifdef PNG_USER_MEM_SUPPORTED extern PNG_EXPORT(png_structp,png_create_read_struct_2) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); extern PNG_EXPORT(png_structp,png_create_write_struct_2) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); #endif /* Write a PNG chunk - size, type, (optional) data, CRC. */ extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, png_bytep chunk_name, png_bytep data, png_size_t length)); /* Write the start of a PNG chunk - length and chunk name. */ extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, png_bytep chunk_name, png_uint_32 length)); /* Write the data of a PNG chunk started with png_write_chunk_start(). */ extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); /* Finish a chunk started with png_write_chunk_start() (includes CRC). */ extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); /* Allocate and initialize the info structure */ extern PNG_EXPORT(png_infop,png_create_info_struct) PNGARG((png_structp png_ptr)); /* Initialize the info structure (old interface - DEPRECATED) */ extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); #undef png_info_init #define png_info_init(info_ptr) png_info_init_3(&info_ptr,\ png_sizeof(png_info)); extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, png_size_t png_info_struct_size)); /* Writes all the PNG information before the image. */ extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, png_infop info_ptr)); #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* read the information before the actual image data. */ extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif #if defined(PNG_TIME_RFC1123_SUPPORTED) extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) PNGARG((png_structp png_ptr, png_timep ptime)); #endif #if !defined(_WIN32_WCE) /* "time.h" functions are not supported on WindowsCE */ #if defined(PNG_WRITE_tIME_SUPPORTED) /* convert from a struct tm to png_time */ extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, struct tm FAR * ttime)); /* convert from time_t to png_time. Uses gmtime() */ extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, time_t ttime)); #endif /* PNG_WRITE_tIME_SUPPORTED */ #endif /* _WIN32_WCE */ #if defined(PNG_READ_EXPAND_SUPPORTED) /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) /* Use blue, green, red order for pixels. */ extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) /* Expand the grayscale to 24-bit RGB if necessary. */ extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) /* Reduce RGB to grayscale. */ #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, int error_action, double red, double green )); #endif extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, int error_action, png_fixed_point red, png_fixed_point green )); extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp png_ptr)); #endif extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, png_colorp palette)); #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) /* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, png_uint_32 filler, int flags)); /* The values of the PNG_FILLER_ defines should NOT be changed */ #define PNG_FILLER_BEFORE 0 #define PNG_FILLER_AFTER 1 /* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ #if !defined(PNG_1_0_X) extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, png_uint_32 filler, int flags)); #endif #endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) /* Swap bytes in 16-bit depth files. */ extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) /* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) /* Swap packing order of pixels in bytes. */ extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) /* Converts files to legal bit depths. */ extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, png_color_8p true_bits)); #endif #if defined(PNG_READ_INTERLACING_SUPPORTED) || \ defined(PNG_WRITE_INTERLACING_SUPPORTED) /* Have the code handle the interlacing. Returns the number of passes. */ extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) /* Invert monochrome files */ extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) /* Handle alpha and tRNS by replacing with a background color. */ #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, png_color_16p background_color, int background_gamma_code, int need_expand, double background_gamma)); #endif #define PNG_BACKGROUND_GAMMA_UNKNOWN 0 #define PNG_BACKGROUND_GAMMA_SCREEN 1 #define PNG_BACKGROUND_GAMMA_FILE 2 #define PNG_BACKGROUND_GAMMA_UNIQUE 3 #endif #if defined(PNG_READ_16_TO_8_SUPPORTED) /* strip the second byte of information from a 16-bit depth file. */ extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_DITHER_SUPPORTED) /* Turn on dithering, and reduce the palette to the number of colors available. */ extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, png_colorp palette, int num_palette, int maximum_colors, png_uint_16p histogram, int full_dither)); #endif #if defined(PNG_READ_GAMMA_SUPPORTED) /* Handle gamma correction. Screen_gamma=(display_exponent) */ #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, double screen_gamma, double default_file_gamma)); #endif #endif #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) /* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ /* Deprecated and will be removed. Use png_permit_mng_features() instead. */ extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, int empty_plte_permitted)); #endif #if defined(PNG_WRITE_FLUSH_SUPPORTED) /* Set how many lines between output flushes - 0 for no flushing */ extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); /* Flush the current PNG output buffer */ extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); #endif /* optional update palette with requested transformations */ extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); /* optional call to update the users info structure */ extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, png_infop info_ptr)); #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* read one or more rows of image data. */ extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); #endif #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* read a row of data. */ extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, png_bytep row, png_bytep display_row)); #endif #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* read the whole image into memory at once. */ extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, png_bytepp image)); #endif /* write a row of image data */ extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, png_bytep row)); /* write a few rows of image data */ extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, png_bytepp row, png_uint_32 num_rows)); /* write the image data */ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, png_bytepp image)); /* writes the end of the PNG file. */ extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, png_infop info_ptr)); #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED /* read the end of the PNG file. */ extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif /* free any memory associated with the png_info_struct */ extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, png_infopp info_ptr_ptr)); /* free any memory associated with the png_struct and the png_info_structs */ extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); /* free all memory used by the read (old method - NOT DLL EXPORTED) */ extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)); /* free any memory associated with the png_struct and the png_info_structs */ extern PNG_EXPORT(void,png_destroy_write_struct) PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); /* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ extern void png_write_destroy PNGARG((png_structp png_ptr)); /* set the libpng method of handling chunk CRC errors */ extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, int crit_action, int ancil_action)); /* Values for png_set_crc_action() to say how to handle CRC errors in * ancillary and critical chunks, and whether to use the data contained * therein. Note that it is impossible to "discard" data in a critical * chunk. For versions prior to 0.90, the action was always error/quit, * whereas in version 0.90 and later, the action for CRC errors in ancillary * chunks is warn/discard. These values should NOT be changed. * * value action:critical action:ancillary */ #define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ #define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ #define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ #define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ #define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ #define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ /* These functions give the user control over the scan-line filtering in * libpng and the compression methods used by zlib. These functions are * mainly useful for testing, as the defaults should work with most users. * Those users who are tight on memory or want faster performance at the * expense of compression can modify them. See the compression library * header file (zlib.h) for an explination of the compression functions. */ /* set the filtering method(s) used by libpng. Currently, the only valid * value for "method" is 0. */ extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, int filters)); /* Flags for png_set_filter() to say which filters to use. The flags * are chosen so that they don't conflict with real filter types * below, in case they are supplied instead of the #defined constants. * These values should NOT be changed. */ #define PNG_NO_FILTERS 0x00 #define PNG_FILTER_NONE 0x08 #define PNG_FILTER_SUB 0x10 #define PNG_FILTER_UP 0x20 #define PNG_FILTER_AVG 0x40 #define PNG_FILTER_PAETH 0x80 #define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ PNG_FILTER_AVG | PNG_FILTER_PAETH) /* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. * These defines should NOT be changed. */ #define PNG_FILTER_VALUE_NONE 0 #define PNG_FILTER_VALUE_SUB 1 #define PNG_FILTER_VALUE_UP 2 #define PNG_FILTER_VALUE_AVG 3 #define PNG_FILTER_VALUE_PAETH 4 #define PNG_FILTER_VALUE_LAST 5 #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ /* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ * defines, either the default (minimum-sum-of-absolute-differences), or * the experimental method (weighted-minimum-sum-of-absolute-differences). * * Weights are factors >= 1.0, indicating how important it is to keep the * filter type consistent between rows. Larger numbers mean the current * filter is that many times as likely to be the same as the "num_weights" * previous filters. This is cumulative for each previous row with a weight. * There needs to be "num_weights" values in "filter_weights", or it can be * NULL if the weights aren't being specified. Weights have no influence on * the selection of the first row filter. Well chosen weights can (in theory) * improve the compression for a given image. * * Costs are factors >= 1.0 indicating the relative decoding costs of a * filter type. Higher costs indicate more decoding expense, and are * therefore less likely to be selected over a filter with lower computational * costs. There needs to be a value in "filter_costs" for each valid filter * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't * setting the costs. Costs try to improve the speed of decompression without * unduly increasing the compressed image size. * * A negative weight or cost indicates the default value is to be used, and * values in the range [0.0, 1.0) indicate the value is to remain unchanged. * The default values for both weights and costs are currently 1.0, but may * change if good general weighting/cost heuristics can be found. If both * the weights and costs are set to 1.0, this degenerates the WEIGHTED method * to the UNWEIGHTED method, but with added encoding time/computation. */ #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, int heuristic_method, int num_weights, png_doublep filter_weights, png_doublep filter_costs)); #endif #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ /* Heuristic used for row filter selection. These defines should NOT be * changed. */ #define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ #define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ #define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ #define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ /* Set the library compression level. Currently, valid values range from * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 * (0 - no compression, 9 - "maximal" compression). Note that tests have * shown that zlib compression levels 3-6 usually perform as well as level 9 * for PNG images, and do considerably fewer caclulations. In the future, * these values may not correspond directly to the zlib compression levels. */ extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, int level)); extern PNG_EXPORT(void,png_set_compression_mem_level) PNGARG((png_structp png_ptr, int mem_level)); extern PNG_EXPORT(void,png_set_compression_strategy) PNGARG((png_structp png_ptr, int strategy)); extern PNG_EXPORT(void,png_set_compression_window_bits) PNGARG((png_structp png_ptr, int window_bits)); extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, int method)); /* These next functions are called for input/output, memory, and error * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, * and call standard C I/O routines such as fread(), fwrite(), and * fprintf(). These functions can be made to use other I/O routines * at run time for those applications that need to handle I/O in a * different manner by calling png_set_???_fn(). See libpng.txt for * more information. */ #if !defined(PNG_NO_STDIO) /* Initialize the input/output for the PNG file to the default functions. */ extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)); #endif /* Replace the (error and abort), and warning functions with user * supplied functions. If no messages are to be printed you must still * write and use replacement functions. The replacement error_fn should * still do a longjmp to the last setjmp location if you are using this * method of error handling. If error_fn or warning_fn is NULL, the * default function will be used. */ extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); /* Return the user pointer associated with the error functions */ extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); /* Replace the default data output functions with a user supplied one(s). * If buffered output is not used, then output_flush_fn can be set to NULL. * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time * output_flush_fn will be ignored (and thus can be NULL). */ extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); /* Replace the default data input function with a user supplied one. */ extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn)); /* Return the user pointer associated with the I/O functions */ extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, png_read_status_ptr read_row_fn)); extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, png_write_status_ptr write_row_fn)); #ifdef PNG_USER_MEM_SUPPORTED /* Replace the default memory allocation functions with user supplied one(s). */ extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); /* Return the user pointer associated with the memory functions */ extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED) extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp png_ptr, png_user_transform_ptr read_user_transform_fn)); #endif #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED) extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp png_ptr, png_user_transform_ptr write_user_transform_fn)); #endif #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED) extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp png_ptr, png_voidp user_transform_ptr, int user_transform_depth, int user_transform_channels)); /* Return the user pointer associated with the user transform functions */ extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) PNGARG((png_structp png_ptr)); #endif #ifdef PNG_USER_CHUNKS_SUPPORTED extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp png_ptr)); #endif #ifdef PNG_PROGRESSIVE_READ_SUPPORTED /* Sets the function callbacks for the push reader, and a pointer to a * user-defined structure available to the callback functions. */ extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, png_voidp progressive_ptr, png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); /* returns the user pointer associated with the push read functions */ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) PNGARG((png_structp png_ptr)); /* function to be called when data becomes available */ extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); /* function that combines rows. Not very much different than the * png_combine_row() call. Is this even used????? */ extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, png_bytep old_row, png_bytep new_row)); #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, png_uint_32 size)); #if defined(PNG_1_0_X) # define png_malloc_warn png_malloc #else /* Added at libpng version 1.2.4 */ extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, png_uint_32 size)); #endif /* frees a pointer allocated by png_malloc() */ extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); #if defined(PNG_1_0_X) /* Function to allocate memory for zlib. */ extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, uInt size)); /* Function to free memory for zlib */ extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); #endif /* Free data that was allocated internally */ extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 free_me, int num)); #ifdef PNG_FREE_ME_SUPPORTED /* Reassign responsibility for freeing existing data, whether allocated * by libpng or by the application */ extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask)); #endif /* assignments for png_data_freer */ #define PNG_DESTROY_WILL_FREE_DATA 1 #define PNG_SET_WILL_FREE_DATA 1 #define PNG_USER_WILL_FREE_DATA 2 /* Flags for png_ptr->free_me and info_ptr->free_me */ #define PNG_FREE_HIST 0x0008 #define PNG_FREE_ICCP 0x0010 #define PNG_FREE_SPLT 0x0020 #define PNG_FREE_ROWS 0x0040 #define PNG_FREE_PCAL 0x0080 #define PNG_FREE_SCAL 0x0100 #define PNG_FREE_UNKN 0x0200 #define PNG_FREE_LIST 0x0400 #define PNG_FREE_PLTE 0x1000 #define PNG_FREE_TRNS 0x2000 #define PNG_FREE_TEXT 0x4000 #define PNG_FREE_ALL 0x7fff #define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ #ifdef PNG_USER_MEM_SUPPORTED extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, png_uint_32 size)); extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, png_voidp ptr)); #endif extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, png_voidp s1, png_voidp s2, png_uint_32 size)); extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, png_voidp s1, int value, png_uint_32 size)); #if defined(USE_FAR_KEYWORD) /* memory model conversion function */ extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, int check)); #endif /* USE_FAR_KEYWORD */ /* Fatal error in PNG image of libpng - can't continue */ extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, png_const_charp error_message)); /* The same, but the chunk name is prepended to the error string. */ extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, png_const_charp error_message)); /* Non-fatal error in libpng. Can continue, but may have a problem. */ extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, png_const_charp warning_message)); /* Non-fatal error in libpng, chunk name is prepended to message. */ extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, png_const_charp warning_message)); /* The png_set_ functions are for storing values in the png_info_struct. * Similarly, the png_get_ calls are used to read values from the * png_info_struct, either storing the parameters in the passed variables, or * setting pointers into the png_info_struct where the data is stored. The * png_get_ functions return a non-zero value if the data was available * in info_ptr, or return zero and do not change any of the parameters if the * data was not available. * * These functions should be used instead of directly accessing png_info * to avoid problems with future changes in the size and internal layout of * png_info_struct. */ /* Returns "flag" if chunk data is valid in info_ptr. */ extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 flag)); /* Returns number of bytes needed to hold a transformed row. */ extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, png_infop info_ptr)); #if defined(PNG_INFO_IMAGE_SUPPORTED) /* Returns row_pointers, which is an array of pointers to scanlines that was returned from png_read_png(). */ extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Set row_pointers, which is an array of pointers to scanlines for use by png_write_png(). */ extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers)); #endif /* Returns number of color channels in image. */ extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, png_infop info_ptr)); #ifdef PNG_EASY_ACCESS_SUPPORTED /* Returns image width in pixels. */ extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image height in pixels. */ extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image bit_depth. */ extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image color_type. */ extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image filter_type. */ extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image interlace_type. */ extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image compression_type. */ extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns image resolution in pixels per meter, from pHYs chunk data. */ extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp png_ptr, png_infop info_ptr)); /* Returns pixel aspect ratio, computed from pHYs chunk data. */ #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif /* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif /* PNG_EASY_ACCESS_SUPPORTED */ /* Returns pointer to signature string read from PNG header */ extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, png_infop info_ptr)); #if defined(PNG_bKGD_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, png_infop info_ptr, png_color_16p *background)); #endif #if defined(PNG_bKGD_SUPPORTED) extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, png_infop info_ptr, png_color_16p background)); #endif #if defined(PNG_cHRM_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, png_infop info_ptr, double *white_x, double *white_y, double *red_x, double *red_y, double *green_x, double *green_y, double *blue_x, double *blue_y)); #endif #ifdef PNG_FIXED_POINT_SUPPORTED extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point *int_blue_x, png_fixed_point *int_blue_y)); #endif #endif #if defined(PNG_cHRM_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, png_infop info_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y)); #endif #ifdef PNG_FIXED_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, png_fixed_point int_blue_y)); #endif #endif #if defined(PNG_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, png_infop info_ptr, double *file_gamma)); #endif extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, png_infop info_ptr, png_fixed_point *int_file_gamma)); #endif #if defined(PNG_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, png_infop info_ptr, double file_gamma)); #endif extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, png_infop info_ptr, png_fixed_point int_file_gamma)); #endif #if defined(PNG_hIST_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)); #endif #if defined(PNG_hIST_SUPPORTED) extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_16p hist)); #endif extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, int *interlace_method, int *compression_method, int *filter_method)); extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_method, int compression_method, int filter_method)); #if defined(PNG_oFFs_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)); #endif #if defined(PNG_oFFs_SUPPORTED) extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, int unit_type)); #endif #if defined(PNG_pCAL_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, png_charp *units, png_charpp *params)); #endif #if defined(PNG_pCAL_SUPPORTED) extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp units, png_charpp params)); #endif #if defined(PNG_pHYs_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); #endif #if defined(PNG_pHYs_SUPPORTED) extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); #endif extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, png_infop info_ptr, png_colorp *palette, int *num_palette)); extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, png_infop info_ptr, png_colorp palette, int num_palette)); #if defined(PNG_sBIT_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)); #endif #if defined(PNG_sBIT_SUPPORTED) extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, png_infop info_ptr, png_color_8p sig_bit)); #endif #if defined(PNG_sRGB_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, png_infop info_ptr, int *intent)); #endif #if defined(PNG_sRGB_SUPPORTED) extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, png_infop info_ptr, int intent)); extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, png_infop info_ptr, int intent)); #endif #if defined(PNG_iCCP_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, png_infop info_ptr, png_charpp name, int *compression_type, png_charpp profile, png_uint_32 *proflen)); /* Note to maintainer: profile should be png_bytepp */ #endif #if defined(PNG_iCCP_SUPPORTED) extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, png_infop info_ptr, png_charp name, int compression_type, png_charp profile, png_uint_32 proflen)); /* Note to maintainer: profile should be png_bytep */ #endif #if defined(PNG_sPLT_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, png_infop info_ptr, png_sPLT_tpp entries)); #endif #if defined(PNG_sPLT_SUPPORTED) extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, png_infop info_ptr, png_sPLT_tp entries, int nentries)); #endif #if defined(PNG_TEXT_SUPPORTED) /* png_get_text also returns the number of text chunks in *num_text */ extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, int *num_text)); #endif /* * Note while png_set_text() will accept a structure whose text, * language, and translated keywords are NULL pointers, the structure * returned by png_get_text will always contain regular * zero-terminated C strings. They might be empty strings but * they will never be NULL pointers. */ #if defined(PNG_TEXT_SUPPORTED) extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, int num_text)); #endif #if defined(PNG_tIME_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)); #endif #if defined(PNG_tIME_SUPPORTED) extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, png_infop info_ptr, png_timep mod_time)); #endif #if defined(PNG_tRNS_SUPPORTED) extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, png_infop info_ptr, png_bytep *trans, int *num_trans, png_color_16p *trans_values)); #endif #if defined(PNG_tRNS_SUPPORTED) extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, png_infop info_ptr, png_bytep trans, int num_trans, png_color_16p trans_values)); #endif #if defined(PNG_tRNS_SUPPORTED) #endif #if defined(PNG_sCAL_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, png_infop info_ptr, int *unit, double *width, double *height)); #else #ifdef PNG_FIXED_POINT_SUPPORTED extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); #endif #endif #endif /* PNG_sCAL_SUPPORTED */ #if defined(PNG_sCAL_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, png_infop info_ptr, int unit, double width, double height)); #endif #ifdef PNG_FIXED_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); #endif #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) /* provide a list of chunks and how they are to be handled, if the built-in handling or default unknown chunk handling is not desired. Any chunks not listed will be handled in the default manner. The IHDR and IEND chunks must not be listed. keep = 0: follow default behavour = 1: do not keep = 2: keep only if safe-to-copy = 3: keep even if unsafe-to-copy */ extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp png_ptr, int keep, png_bytep chunk_list, int num_chunks)); extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); extern PNG_EXPORT(void, png_set_unknown_chunk_location) PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); #endif #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep chunk_name)); #endif /* Png_free_data() will turn off the "valid" flag for anything it frees. If you need to turn it off for a chunk that your application has freed, you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, png_infop info_ptr, int mask)); #if defined(PNG_INFO_IMAGE_SUPPORTED) /* The "params" pointer is currently not used and is for future expansion. */ extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, png_infop info_ptr, int transforms, png_voidp params)); extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, png_infop info_ptr, int transforms, png_voidp params)); #endif /* Define PNG_DEBUG at compile time for debugging information. Higher * numbers for PNG_DEBUG mean more debugging information. This has * only been added since version 0.95 so it is not implemented throughout * libpng yet, but more support will be added as needed. */ #ifdef PNG_DEBUG #if (PNG_DEBUG > 0) #if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) #include #if (PNG_DEBUG > 1) #define png_debug(l,m) _RPT0(_CRT_WARN,m) #define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1) #define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2) #endif #else /* PNG_DEBUG_FILE || !_MSC_VER */ #ifndef PNG_DEBUG_FILE #define PNG_DEBUG_FILE stderr #endif /* PNG_DEBUG_FILE */ #if (PNG_DEBUG > 1) #define png_debug(l,m) \ { \ int num_tabs=l; \ fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ } #define png_debug1(l,m,p1) \ { \ int num_tabs=l; \ fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ } #define png_debug2(l,m,p1,p2) \ { \ int num_tabs=l; \ fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ } #endif /* (PNG_DEBUG > 1) */ #endif /* _MSC_VER */ #endif /* (PNG_DEBUG > 0) */ #endif /* PNG_DEBUG */ #ifndef png_debug #define png_debug(l, m) #endif #ifndef png_debug1 #define png_debug1(l, m, p1) #endif #ifndef png_debug2 #define png_debug2(l, m, p1, p2) #endif extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((void)); extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); #ifdef PNG_MNG_FEATURES_SUPPORTED extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp png_ptr, png_uint_32 mng_features_permitted)); #endif /* For use in png_set_keep_unknown, added to version 1.2.6 */ #define PNG_HANDLE_CHUNK_AS_DEFAULT 0 #define PNG_HANDLE_CHUNK_NEVER 1 #define PNG_HANDLE_CHUNK_IF_SAFE 2 #define PNG_HANDLE_CHUNK_ALWAYS 3 /* Added to version 1.2.0 */ #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) #define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ #define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ #define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 #define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 #define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 #define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 #define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 #define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 #define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ #define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ | PNG_ASM_FLAG_MMX_READ_INTERLACE \ | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) #define PNG_MMX_WRITE_FLAGS ( 0 ) #define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ | PNG_MMX_READ_FLAGS \ | PNG_MMX_WRITE_FLAGS ) #define PNG_SELECT_READ 1 #define PNG_SELECT_WRITE 2 #if !defined(PNG_1_0_X) /* pngget.c */ extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) PNGARG((int flag_select, int *compilerID)); /* pngget.c */ extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) PNGARG((int flag_select)); /* pngget.c */ extern PNG_EXPORT(png_uint_32,png_get_asm_flags) PNGARG((png_structp png_ptr)); /* pngget.c */ extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) PNGARG((png_structp png_ptr)); /* pngget.c */ extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) PNGARG((png_structp png_ptr)); /* pngset.c */ extern PNG_EXPORT(void,png_set_asm_flags) PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); /* pngset.c */ extern PNG_EXPORT(void,png_set_mmx_thresholds) PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, png_uint_32 mmx_rowbytes_threshold)); #endif /* PNG_1_0_X */ #endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ #if !defined(PNG_1_0_X) /* png.c, pnggccrd.c, or pngvcrd.c */ extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); /* Strip the prepended error numbers ("#nnn ") from error and warning * messages before passing them to the error or warning handler. */ #ifdef PNG_ERROR_NUMBERS_SUPPORTED extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp png_ptr, png_uint_32 strip_mode)); #endif #endif /* PNG_1_0_X */ /* Added at libpng-1.2.6 */ #ifdef PNG_SET_USER_LIMITS_SUPPORTED extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp png_ptr)); #endif /* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED /* With these routines we avoid an integer divide, which will be slower on * most machines. However, it does take more operations than the corresponding * divide method, so it may be slower on a few RISC systems. There are two * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. * * Note that the rounding factors are NOT supposed to be the same! 128 and * 32768 are correct for the NODIV code; 127 and 32767 are correct for the * standard method. * * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] */ /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ # define png_composite(composite, fg, alpha, bg) \ { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ + (png_uint_16)(bg)*(png_uint_16)(255 - \ (png_uint_16)(alpha)) + (png_uint_16)128); \ (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } # define png_composite_16(composite, fg, alpha, bg) \ { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ + (png_uint_32)(bg)*(png_uint_32)(65535L - \ (png_uint_32)(alpha)) + (png_uint_32)32768L); \ (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } #else /* standard method using integer division */ # define png_composite(composite, fg, alpha, bg) \ (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ (png_uint_16)127) / 255) # define png_composite_16(composite, fg, alpha, bg) \ (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ (png_uint_32)32767) / (png_uint_32)65535L) #endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ /* These next functions are used internally in the code. They generally * shouldn't be used unless you are writing code to add or replace some * functionality in libpng. More information about most functions can * be found in the files where the functions are located. */ #if defined(PNG_INTERNAL) /* Various modes of operation. Note that after an init, mode is set to * zero automatically when the structure is created. */ #define PNG_HAVE_IHDR 0x01 #define PNG_HAVE_PLTE 0x02 #define PNG_HAVE_IDAT 0x04 #define PNG_AFTER_IDAT 0x08 #define PNG_HAVE_IEND 0x10 #define PNG_HAVE_gAMA 0x20 #define PNG_HAVE_cHRM 0x40 #define PNG_HAVE_sRGB 0x80 #define PNG_HAVE_CHUNK_HEADER 0x100 #define PNG_WROTE_tIME 0x200 #define PNG_WROTE_INFO_BEFORE_PLTE 0x400 #define PNG_BACKGROUND_IS_GRAY 0x800 #define PNG_HAVE_PNG_SIGNATURE 0x1000 /* flags for the transformations the PNG library does on the image data */ #define PNG_BGR 0x0001 #define PNG_INTERLACE 0x0002 #define PNG_PACK 0x0004 #define PNG_SHIFT 0x0008 #define PNG_SWAP_BYTES 0x0010 #define PNG_INVERT_MONO 0x0020 #define PNG_DITHER 0x0040 #define PNG_BACKGROUND 0x0080 #define PNG_BACKGROUND_EXPAND 0x0100 /* 0x0200 unused */ #define PNG_16_TO_8 0x0400 #define PNG_RGBA 0x0800 #define PNG_EXPAND 0x1000 #define PNG_GAMMA 0x2000 #define PNG_GRAY_TO_RGB 0x4000 #define PNG_FILLER 0x8000L #define PNG_PACKSWAP 0x10000L #define PNG_SWAP_ALPHA 0x20000L #define PNG_STRIP_ALPHA 0x40000L #define PNG_INVERT_ALPHA 0x80000L #define PNG_USER_TRANSFORM 0x100000L #define PNG_RGB_TO_GRAY_ERR 0x200000L #define PNG_RGB_TO_GRAY_WARN 0x400000L #define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ #define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ /* flags for png_create_struct */ #define PNG_STRUCT_PNG 0x0001 #define PNG_STRUCT_INFO 0x0002 /* Scaling factor for filter heuristic weighting calculations */ #define PNG_WEIGHT_SHIFT 8 #define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) #define PNG_COST_SHIFT 3 #define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) /* flags for the png_ptr->flags rather than declaring a byte for each one */ #define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 #define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 #define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 #define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 #define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 #define PNG_FLAG_ZLIB_FINISHED 0x0020 #define PNG_FLAG_ROW_INIT 0x0040 #define PNG_FLAG_FILLER_AFTER 0x0080 #define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 #define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 #define PNG_FLAG_CRC_CRITICAL_USE 0x0400 #define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 #define PNG_FLAG_FREE_PLTE 0x1000 #define PNG_FLAG_FREE_TRNS 0x2000 #define PNG_FLAG_FREE_HIST 0x4000 #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L #define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L #define PNG_FLAG_LIBRARY_MISMATCH 0x20000L #define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L #define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L #define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ PNG_FLAG_CRC_ANCILLARY_NOWARN) #define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ PNG_FLAG_CRC_CRITICAL_IGNORE) #define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ PNG_FLAG_CRC_CRITICAL_MASK) /* save typing and make code easier to understand */ #define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ abs((int)((c1).green) - (int)((c2).green)) + \ abs((int)((c1).blue) - (int)((c2).blue))) /* Added to libpng-1.2.6 JB */ #define PNG_ROWBYTES(pixel_bits, width) \ ((pixel_bits) >= 8 ? \ ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \ (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) ) /* PNG_OUT_OF_RANGE returns true if value is outside the range ideal-delta..ideal+delta. Each argument is evaluated twice. "ideal" and "delta" should be constants, normally simple integers, "value" a variable. Added to libpng-1.2.6 JB */ #define PNG_OUT_OF_RANGE(value, ideal, delta) \ ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) /* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) /* place to hold the signature string for a PNG file. */ #ifdef PNG_USE_GLOBAL_ARRAYS PNG_EXPORT_VAR (const png_byte FARDATA) png_sig[8]; #else #define png_sig png_sig_bytes(NULL) #endif #endif /* PNG_NO_EXTERN */ /* Constant strings for known chunk types. If you need to add a chunk, * define the name here, and add an invocation of the macro in png.c and * wherever it's needed. */ #define PNG_IHDR const png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} #define PNG_IDAT const png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} #define PNG_IEND const png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} #define PNG_PLTE const png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} #define PNG_bKGD const png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} #define PNG_cHRM const png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} #define PNG_gAMA const png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} #define PNG_hIST const png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} #define PNG_iCCP const png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} #define PNG_iTXt const png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} #define PNG_oFFs const png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} #define PNG_pCAL const png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} #define PNG_sCAL const png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} #define PNG_pHYs const png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} #define PNG_sBIT const png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} #define PNG_sPLT const png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} #define PNG_sRGB const png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} #define PNG_tEXt const png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} #define PNG_tIME const png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} #define PNG_tRNS const png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} #define PNG_zTXt const png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} #ifdef PNG_USE_GLOBAL_ARRAYS PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_IDAT[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_IEND[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_PLTE[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_bKGD[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_cHRM[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_gAMA[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_hIST[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_iCCP[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_iTXt[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_oFFs[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_pCAL[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sCAL[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_pHYs[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sBIT[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sPLT[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sRGB[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_tEXt[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5]; #endif /* PNG_USE_GLOBAL_ARRAYS */ /* Inline macros to do direct reads of bytes from the input buffer. These * require that you are using an architecture that uses PNG byte ordering * (MSB first) and supports unaligned data storage. I think that PowerPC * in big-endian mode and 680x0 are the only ones that will support this. * The x86 line of processors definitely do not. The png_get_int_32() * routine also assumes we are using two's complement format for negative * values, which is almost certainly true. */ #if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) # if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) # define png_get_int_32(buf) ( *((png_int_32p) (buf))) # endif # define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) # define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) #else # if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf)); # endif PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf)); PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf)); #endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ PNG_EXTERN png_uint_32 png_get_uint_31 PNGARG((png_structp png_ptr, png_bytep buf)); /* Initialize png_ptr struct for reading, and allocate any other memory. * (old interface - DEPRECATED - use png_create_read_struct instead). */ extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); #undef png_read_init #define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, png_const_charp user_png_ver, png_size_t png_struct_size)); extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t png_info_size)); /* Initialize png_ptr struct for writing, and allocate any other memory. * (old interface - DEPRECATED - use png_create_write_struct instead). */ extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); #undef png_write_init #define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, png_const_charp user_png_ver, png_size_t png_struct_size)); extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t png_info_size)); /* Allocate memory for an internal libpng struct */ PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); /* Free memory from internal libpng struct */ PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)); PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, png_free_ptr free_fn, png_voidp mem_ptr)); /* Free any memory that info_ptr points to and reset struct. */ PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, png_infop info_ptr)); #ifndef PNG_1_0_X /* Function to allocate memory for zlib. */ PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); /* Function to free memory for zlib */ PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); #ifdef PNG_SIZE_T /* Function to convert a sizeof an item to png_sizeof item */ PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); #endif /* Next four functions are used internally as callbacks. PNGAPI is required * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); #ifdef PNG_PROGRESSIVE_READ_SUPPORTED PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, png_bytep buffer, png_size_t length)); #endif PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); #if defined(PNG_WRITE_FLUSH_SUPPORTED) #if !defined(PNG_NO_STDIO) PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); #endif #endif #else /* PNG_1_0_X */ #ifdef PNG_PROGRESSIVE_READ_SUPPORTED PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, png_bytep buffer, png_size_t length)); #endif #endif /* PNG_1_0_X */ /* Reset the CRC variable */ PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); /* Write the "data" buffer to whatever output you are using. */ PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); /* Read data from whatever input you are using into the "data" buffer */ PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); /* Read bytes into buf, and update png_ptr->crc */ PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, png_size_t length)); /* Decompress data in a chunk that uses compression */ #if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, int comp_type, png_charp chunkdata, png_size_t chunklength, png_size_t prefix_length, png_size_t *data_length)); #endif /* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); /* Read the CRC from the file and compare it to the libpng calculated CRC */ PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); /* Calculate the CRC over a section of data. Note that we are only * passing a maximum of 64K on systems that have this as a memory limit, * since this is the maximum buffer size we can specify. */ PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, png_size_t length)); #if defined(PNG_WRITE_FLUSH_SUPPORTED) PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); #endif /* Place a 32-bit number into a buffer in PNG byte order (big-endian). * The only currently known PNG chunks that use signed numbers are * the ancillary extension chunks, oFFs and pCAL. */ PNG_EXTERN void png_save_uint_32 PNGARG((png_bytep buf, png_uint_32 i)); #if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED) PNG_EXTERN void png_save_int_32 PNGARG((png_bytep buf, png_int_32 i)); #endif /* Place a 16-bit number into a buffer in PNG byte order. * The parameter is declared unsigned int, not png_uint_16, * just to avoid potential problems on pre-ANSI C compilers. */ PNG_EXTERN void png_save_uint_16 PNGARG((png_bytep buf, unsigned int i)); /* simple function to write the signature */ PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); /* write various chunks */ /* Write the IHDR chunk, and update the png_struct with the necessary * information. */ PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int compression_method, int filter_method, int interlace_method)); PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)); PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); #if defined(PNG_WRITE_gAMA_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); #endif #ifdef PNG_FIXED_POINT_SUPPORTED PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point file_gamma)); #endif #endif #if defined(PNG_WRITE_sBIT_SUPPORTED) PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, int color_type)); #endif #if defined(PNG_WRITE_cHRM_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y)); #endif #ifdef PNG_FIXED_POINT_SUPPORTED PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, png_fixed_point int_blue_y)); #endif #endif #if defined(PNG_WRITE_sRGB_SUPPORTED) PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, int intent)); #endif #if defined(PNG_WRITE_iCCP_SUPPORTED) PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, png_charp name, int compression_type, png_charp profile, int proflen)); /* Note to maintainer: profile should be png_bytep */ #endif #if defined(PNG_WRITE_sPLT_SUPPORTED) PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, png_sPLT_tp palette)); #endif #if defined(PNG_WRITE_tRNS_SUPPORTED) PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, png_color_16p values, int number, int color_type)); #endif #if defined(PNG_WRITE_bKGD_SUPPORTED) PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, png_color_16p values, int color_type)); #endif #if defined(PNG_WRITE_hIST_SUPPORTED) PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, int num_hist)); #endif #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, png_charp key, png_charpp new_key)); #endif #if defined(PNG_WRITE_tEXt_SUPPORTED) PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, png_charp text, png_size_t text_len)); #endif #if defined(PNG_WRITE_zTXt_SUPPORTED) PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, png_charp text, png_size_t text_len, int compression)); #endif #if defined(PNG_WRITE_iTXt_SUPPORTED) PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, int compression, png_charp key, png_charp lang, png_charp lang_key, png_charp text)); #endif #if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, int num_text)); #endif #if defined(PNG_WRITE_oFFs_SUPPORTED) PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, png_int_32 x_offset, png_int_32 y_offset, int unit_type)); #endif #if defined(PNG_WRITE_pCAL_SUPPORTED) PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp units, png_charpp params)); #endif #if defined(PNG_WRITE_pHYs_SUPPORTED) PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, int unit_type)); #endif #if defined(PNG_WRITE_tIME_SUPPORTED) PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, png_timep mod_time)); #endif #if defined(PNG_WRITE_sCAL_SUPPORTED) #if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, int unit, double width, double height)); #else #ifdef PNG_FIXED_POINT_SUPPORTED PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, int unit, png_charp width, png_charp height)); #endif #endif #endif /* Called when finished processing a row of data */ PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); /* Internal use only. Called before first row of data */ PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); #if defined(PNG_READ_GAMMA_SUPPORTED) PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); #endif /* combine a row of data, dealing with alpha, etc. if requested */ PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, int mask)); #if defined(PNG_READ_INTERLACING_SUPPORTED) /* expand an interlaced row */ /* OLD pre-1.0.9 interface: PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, png_bytep row, int pass, png_uint_32 transformations)); */ PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); #endif /* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ #if defined(PNG_WRITE_INTERLACING_SUPPORTED) /* grab pixels out of a row for an interlaced pass */ PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, png_bytep row, int pass)); #endif /* unfilter a row */ PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); /* Choose the best filter to use and filter the row data */ PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, png_row_infop row_info)); /* Write out the filtered row. */ PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, png_bytep filtered_row)); /* finish a row while reading, dealing with interlacing passes, etc. */ PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); /* initialize the row buffers, etc. */ PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); /* optional call to update the users info structure */ PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, png_infop info_ptr)); /* these are the functions that do the transformations */ #if defined(PNG_READ_FILLER_SUPPORTED) PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, png_bytep row, png_uint_32 filler, png_uint_32 flags)); #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_WRITE_FILLER_SUPPORTED) || \ defined(PNG_READ_STRIP_ALPHA_SUPPORTED) PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, png_bytep row, png_uint_32 flags)); #endif #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_PACK_SUPPORTED) PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_SHIFT_SUPPORTED) PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, png_color_8p sig_bits)); #endif #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_16_TO_8_SUPPORTED) PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_READ_DITHER_SUPPORTED) PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); # if defined(PNG_CORRECT_PALETTE_SUPPORTED) PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, png_colorp palette, int num_palette)); # endif #endif #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_WRITE_PACK_SUPPORTED) PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)); #endif #if defined(PNG_WRITE_SHIFT_SUPPORTED) PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, png_color_8p bit_depth)); #endif #if defined(PNG_READ_BACKGROUND_SUPPORTED) #if defined(PNG_READ_GAMMA_SUPPORTED) PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, png_color_16p trans_values, png_color_16p background, png_color_16p background_1, png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, png_uint_16pp gamma_16_to_1, int gamma_shift)); #else PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, png_color_16p trans_values, png_color_16p background)); #endif #endif #if defined(PNG_READ_GAMMA_SUPPORTED) PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, png_bytep gamma_table, png_uint_16pp gamma_16_table, int gamma_shift)); #endif #if defined(PNG_READ_EXPAND_SUPPORTED) PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, png_bytep row, png_color_16p trans_value)); #endif /* The following decodes the appropriate chunks, and does error correction, * then calls the appropriate callback for the chunk if it is valid. */ /* decode the IHDR chunk */ PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #if defined(PNG_READ_bKGD_SUPPORTED) PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_cHRM_SUPPORTED) PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_gAMA_SUPPORTED) PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_hIST_SUPPORTED) PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_iCCP_SUPPORTED) extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif /* PNG_READ_iCCP_SUPPORTED */ #if defined(PNG_READ_iTXt_SUPPORTED) PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_oFFs_SUPPORTED) PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_pCAL_SUPPORTED) PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_pHYs_SUPPORTED) PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_sBIT_SUPPORTED) PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_sCAL_SUPPORTED) PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_sPLT_SUPPORTED) extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif /* PNG_READ_sPLT_SUPPORTED */ #if defined(PNG_READ_sRGB_SUPPORTED) PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_tEXt_SUPPORTED) PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_tIME_SUPPORTED) PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_tRNS_SUPPORTED) PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif #if defined(PNG_READ_zTXt_SUPPORTED) PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); #endif PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, png_bytep chunk_name)); /* handle the transformations for reading and writing */ PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); #ifdef PNG_PROGRESSIVE_READ_SUPPORTED PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, png_infop info_ptr)); PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, png_infop info_ptr)); PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, png_uint_32 length)); PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, png_bytep buffer, png_size_t buffer_length)); PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, png_bytep buffer, png_size_t buffer_length)); PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, png_infop info_ptr)); PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, png_infop info_ptr)); PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, png_infop info_ptr)); PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, png_infop info_ptr)); PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); #if defined(PNG_READ_tEXt_SUPPORTED) PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif #if defined(PNG_READ_zTXt_SUPPORTED) PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif #if defined(PNG_READ_iTXt_SUPPORTED) PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 length)); PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr)); #endif #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ #ifdef PNG_MNG_FEATURES_SUPPORTED PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, png_bytep row)); PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, png_bytep row)); #endif #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) /* png.c */ /* PRIVATE */ PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); #endif /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ #endif /* PNG_INTERNAL */ #ifdef __cplusplus } #endif #endif /* PNG_VERSION_INFO_ONLY */ /* do not put anything past this line */ #endif /* PNG_H */ htmldoc-1.8.27/png/libpng.30100664000212600000240000050041710124712606014053 0ustar mikeuser.TH LIBPNG 3 "September 12, 2004" .SH NAME libpng \- Portable Network Graphics (PNG) Reference Library 1.2.7 .SH SYNOPSIS \fI\fB \fB#include \fP \fI\fB \fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP \fI\fB \fBint png_check_sig (png_bytep \fP\fIsig\fP\fB, int \fInum\fP\fB);\fP \fI\fB \fBvoid png_chunk_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP \fI\fB \fBvoid png_chunk_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP \fI\fB \fBvoid png_convert_from_struct_tm (png_timep \fP\fIptime\fP\fB, struct tm FAR * \fIttime\fP\fB);\fP \fI\fB \fBvoid png_convert_from_time_t (png_timep \fP\fIptime\fP\fB, time_t \fIttime\fP\fB);\fP \fI\fB \fBpng_charp png_convert_to_rfc1123 (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fIptime\fP\fB);\fP \fI\fB \fBpng_infop png_create_info_struct (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_structp png_create_read_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP \fI\fB \fBpng_structp png_create_read_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP \fI\fB \fBpng_structp png_create_write_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP \fI\fB \fBpng_structp png_create_write_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP \fI\fB \fBint png_debug(int \fP\fIlevel\fP\fB, png_const_charp \fImessage\fP\fB);\fP \fI\fB \fBint png_debug1(int \fP\fIlevel\fP\fB, png_const_charp \fP\fImessage\fP\fB, \fIp1\fP\fB);\fP \fI\fB \fBint png_debug2(int \fP\fIlevel\fP\fB, png_const_charp \fP\fImessage\fP\fB, \fP\fIp1\fP\fB, \fIp2\fP\fB);\fP \fI\fB \fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP \fI\fB \fBvoid png_destroy_read_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fP\fIinfo_ptr_ptr\fP\fB, png_infopp \fIend_info_ptr_ptr\fP\fB);\fP \fI\fB \fBvoid png_destroy_write_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP \fI\fB \fBvoid png_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP \fI\fB \fBvoid png_free (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP \fI\fB \fBvoid png_free_chunk_list (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_free_default(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP \fI\fB \fBvoid png_free_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fInum\fP\fB);\fP \fI\fB \fBpng_byte png_get_bit_depth (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fI*background\fP\fB);\fP \fI\fB \fBpng_byte png_get_channels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fI*white_x\fP\fB, double \fP\fI*white_y\fP\fB, double \fP\fI*red_x\fP\fB, double \fP\fI*red_y\fP\fB, double \fP\fI*green_x\fP\fB, double \fP\fI*green_y\fP\fB, double \fP\fI*blue_x\fP\fB, double \fI*blue_y\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*white_x\fP\fB, png_uint_32 \fP\fI*white_y\fP\fB, png_uint_32 \fP\fI*red_x\fP\fB, png_uint_32 \fP\fI*red_y\fP\fB, png_uint_32 \fP\fI*green_x\fP\fB, png_uint_32 \fP\fI*green_y\fP\fB, png_uint_32 \fP\fI*blue_x\fP\fB, png_uint_32 \fI*blue_y\fP\fB);\fP \fI\fB \fBpng_byte png_get_color_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_byte png_get_compression_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_byte png_get_copyright (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_voidp png_get_error_ptr (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_byte png_get_filter_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fI*file_gamma\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fI*int_file_gamma\fP\fB);\fP \fI\fB \fBpng_byte png_get_header_ver (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_byte png_get_header_version (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fI*hist\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charpp \fP\fIname\fP\fB, int \fP\fI*compression_type\fP\fB, png_charpp \fP\fIprofile\fP\fB, png_uint_32 \fI*proflen\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*width\fP\fB, png_uint_32 \fP\fI*height\fP\fB, int \fP\fI*bit_depth\fP\fB, int \fP\fI*color_type\fP\fB, int \fP\fI*interlace_type\fP\fB, int \fP\fI*compression_type\fP\fB, int \fI*filter_type\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_image_height (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_image_width (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_byte png_get_interlace_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_voidp png_get_io_ptr (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_byte png_get_libpng_ver (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_voidp png_get_mem_ptr(png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*offset_x\fP\fB, png_uint_32 \fP\fI*offset_y\fP\fB, int \fI*unit_type\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fI*purpose\fP\fB, png_int_32 \fP\fI*X0\fP\fB, png_int_32 \fP\fI*X1\fP\fB, int \fP\fI*type\fP\fB, int \fP\fI*nparams\fP\fB, png_charp \fP\fI*units\fP\fB, png_charpp \fI*params\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*res_x\fP\fB, png_uint_32 \fP\fI*res_y\fP\fB, int \fI*unit_type\fP\fB);\fP \fI\fB \fBfloat png_get_pixel_aspect_ratio (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_voidp png_get_progressive_ptr (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fI*palette\fP\fB, int \fI*num_palette\fP\fB);\fP \fI\fB \fBpng_byte png_get_rgb_to_gray_status (png_structp \fIpng_ptr) \fBpng_uint_32 png_get_rowbytes (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_bytepp png_get_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fI*sig_bit\fP\fB);\fP \fI\fB \fBpng_bytep png_get_signature (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fI*splt_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fI*intent\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fI*text_ptr\fP\fB, int \fI*num_text\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fI*mod_time\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fI*trans\fP\fB, int \fP\fI*num_trans\fP\fB, png_color_16p \fI*trans_values\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkpp \fIunknowns\fP\fB);\fP \fI\fB \fBpng_voidp png_get_user_chunk_ptr (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_user_height_max( png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_voidp png_get_user_transform_ptr (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_user_width_max (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_valid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIflag\fP\fB);\fP \fI\fB \fBpng_int_32 png_get_x_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_int_32 png_get_x_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_x_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_int_32 png_get_y_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_int_32 png_get_y_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_y_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_get_compression_buffer_size (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBint png_handle_as_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP \fI\fB \fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_info_init (png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_info_init_2 (png_infopp \fP\fIptr_ptr\fP\fB, png_size_t \fIpng_info_struct_size\fP\fB);\fP \fI\fB \fBpng_voidp png_malloc (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP \fI\fB \fBpng_voidp png_malloc_default(png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP \fI\fB \fBvoidp png_memcpy (png_voidp \fP\fIs1\fP\fB, png_voidp \fP\fIs2\fP\fB, png_size_t \fIsize\fP\fB);\fP \fI\fB \fBpng_voidp png_memcpy_check (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIs1\fP\fB, png_voidp \fP\fIs2\fP\fB, png_uint_32 \fIsize\fP\fB);\fP \fI\fB \fBvoidp png_memset (png_voidp \fP\fIs1\fP\fB, int \fP\fIvalue\fP\fB, png_size_t \fIsize\fP\fB);\fP \fI\fB \fBpng_voidp png_memset_check (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIs1\fP\fB, int \fP\fIvalue\fP\fB, png_uint_32 \fIsize\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_permit_empty_plte (png_structp \fP\fIpng_ptr\fP\fB, int \fIempty_plte_permitted\fP\fB);\fP \fI\fB \fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_size\fP\fB);\fP \fI\fB \fBvoid png_progressive_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIold_row\fP\fB, png_bytep \fInew_row\fP\fB);\fP \fI\fB \fBvoid png_read_destroy (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_infop \fIend_info_ptr\fP\fB);\fP \fI\fB \fBvoid png_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBvoid png_read_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_read_init (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_read_init_2 (png_structpp \fP\fIptr_ptr\fP\fB, png_const_charp \fP\fIuser_png_ver\fP\fB, png_size_t \fP\fIpng_struct_size\fP\fB, png_size_t \fIpng_info_size\fP\fB);\fP \fI\fB \fBvoid png_read_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBvoid png_read_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP \fI\fB \fBvoid png_read_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fIdisplay_row\fP\fB);\fP \fI\fB \fBvoid png_read_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_bytepp \fP\fIdisplay_row\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP \fI\fB \fBvoid png_read_update_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fB#if \fI!defined(PNG_1_0_X) \fBvoid png_set_add_alpha (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP \fI\fB#endif \fI\fB \fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP \fI\fB \fBvoid png_set_bgr (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fIbackground\fP\fB);\fP \fI\fB \fBvoid png_set_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP \fI\fB \fBvoid png_set_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP \fI\fB \fBvoid png_set_compression_level (png_structp \fP\fIpng_ptr\fP\fB, int \fIlevel\fP\fB);\fP \fI\fB \fBvoid png_set_compression_mem_level (png_structp \fP\fIpng_ptr\fP\fB, int \fImem_level\fP\fB);\fP \fI\fB \fBvoid png_set_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\fP\fB);\fP \fI\fB \fBvoid png_set_compression_strategy (png_structp \fP\fIpng_ptr\fP\fB, int \fIstrategy\fP\fB);\fP \fI\fB \fBvoid png_set_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP \fI\fB \fBvoid png_set_crc_action (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcrit_action\fP\fB, int \fIancil_action\fP\fB);\fP \fI\fB \fBvoid png_set_dither (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fP\fInum_palette\fP\fB, int \fP\fImaximum_colors\fP\fB, png_uint_16p \fP\fIhistogram\fP\fB, int \fIfull_dither\fP\fB);\fP \fI\fB \fBvoid png_set_error_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarning_fn\fP\fB);\fP \fI\fB \fBvoid png_set_expand (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_filler (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP \fI\fB \fBvoid png_set_filter (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImethod\fP\fB, int \fIfilters\fP\fB);\fP \fI\fB \fBvoid png_set_filter_heuristics (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_doublep \fP\fIfilter_weights\fP\fB, png_doublep \fIfilter_costs\fP\fB);\fP \fI\fB \fBvoid png_set_flush (png_structp \fP\fIpng_ptr\fP\fB, int \fInrows\fP\fB);\fP \fI\fB \fBvoid png_set_gamma (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIscreen_gamma\fP\fB, double \fIdefault_file_gamma\fP\fB);\fP \fI\fB \fBvoid png_set_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP \fI\fB \fBvoid png_set_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIfile_gamma\fP\fB);\fP \fI\fB \fBvoid png_set_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_gray_to_rgb (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fIhist\fP\fB);\fP \fI\fB \fBvoid png_set_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_charp \fP\fIprofile\fP\fB, png_uint_32 \fIproflen\fP\fB);\fP \fI\fB \fBint png_set_interlace_handling (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_invalid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fImask\fP\fB);\fP \fI\fB \fBvoid png_set_invert_alpha (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_invert_mono (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIinterlace_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fIfilter_type\fP\fB);\fP \fI\fB \fBvoid png_set_keep_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIkeep\fP\fB, png_bytep \fP\fIchunk_list\fP\fB, int \fInum_chunks\fP\fB);\fP \fI\fB \fBvoid png_set_mem_fn(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP \fI\fB \fBvoid png_set_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIoffset_x\fP\fB, png_uint_32 \fP\fIoffset_y\fP\fB, int \fIunit_type\fP\fB);\fP \fI\fB \fBvoid png_set_packing (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_packswap (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_palette_to_rgb(png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP \fI\fB \fBvoid png_set_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIres_x\fP\fB, png_uint_32 \fP\fIres_y\fP\fB, int \fIunit_type\fP\fB);\fP \fI\fB \fBvoid png_set_progressive_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIprogressive_ptr\fP\fB, png_progressive_info_ptr \fP\fIinfo_fn\fP\fB, png_progressive_row_ptr \fP\fIrow_fn\fP\fB, png_progressive_end_ptr \fIend_fn\fP\fB);\fP \fI\fB \fBvoid png_set_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP \fI\fB \fBvoid png_set_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fIread_data_fn\fP\fB);\fP \fI\fB \fBvoid png_set_read_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_read_status_ptr \fIread_row_fn\fP\fB);\fP \fI\fB \fBvoid png_set_read_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIread_user_transform_fn\fP\fB);\fP \fI\fB \fBvoid png_set_rgb_to_gray (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIerror_action\fP\fB, double \fP\fIred\fP\fB, double \fIgreen\fP\fB);\fP \fI\fB \fBvoid png_set_rgb_to_gray_fixed (png_structp \fP\fIpng_ptr\fP\fB, int error_action png_fixed_point \fP\fIred\fP\fB, png_fixed_point \fIgreen\fP\fB);\fP \fI\fB \fBvoid png_set_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytepp \fIrow_pointers\fP\fB);\fP \fI\fB \fBvoid png_set_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fIsig_bit\fP\fB);\fP \fI\fB \fBvoid png_set_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP \fI\fB \fBvoid png_set_shift (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fItrue_bits\fP\fB);\fP \fI\fB \fBvoid png_set_sig_bytes (png_structp \fP\fIpng_ptr\fP\fB, int \fInum_bytes\fP\fB);\fP \fI\fB \fBvoid png_set_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fP\fIsplt_ptr\fP\fB, int \fInum_spalettes\fP\fB);\fP \fI\fB \fBvoid png_set_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP \fI\fB \fBvoid png_set_sRGB_gAMA_and_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP \fI\fB \fBvoid png_set_strip_16 (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_strip_alpha (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_swap (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_swap_alpha (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_set_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP \fI\fB \fBvoid png_set_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP \fI\fB \fBvoid png_set_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fItrans\fP\fB, int \fP\fInum_trans\fP\fB, png_color_16p \fItrans_values\fP\fB);\fP \fI\fB \fBvoid png_set_tRNS_to_alpha(png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBpng_uint_32 png_set_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkp \fP\fIunknowns\fP\fB, int \fP\fInum\fP\fB, int \fIlocation\fP\fB);\fP \fI\fB \fBvoid png_set_unknown_chunk_location(png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIchunk\fP\fB, int \fIlocation\fP\fB);\fP \fI\fB \fBvoid png_set_read_user_chunk_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_chunk_ptr\fP\fB, png_user_chunk_ptr \fIread_user_chunk_fn\fP\fB);\fP \fI\fB \fBvoid png_set_user_limits (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIuser_width_max\fP\fB, png_uint_32 \fIuser_height_max\fP\fB);\fP \fI\fB \fBvoid png_set_user_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_transform_ptr\fP\fB, int \fP\fIuser_transform_depth\fP\fB, int \fIuser_transform_channels\fP\fB);\fP \fI\fB \fBvoid png_set_write_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fP\fIwrite_data_fn\fP\fB, png_flush_ptr \fIoutput_flush_fn\fP\fB);\fP \fI\fB \fBvoid png_set_write_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_write_status_ptr \fIwrite_row_fn\fP\fB);\fP \fI\fB \fBvoid png_set_write_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIwrite_user_transform_fn\fP\fB);\fP \fI\fB \fBvoid png_set_compression_buffer_size(png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP \fI\fB \fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, png_size_t \fP\fIstart\fP\fB, png_size_t \fInum_to_check\fP\fB);\fP \fI\fB \fBvoid png_start_read_image (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP \fI\fB \fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP \fI\fB \fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP \fI\fB \fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_write_chunk_start (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_uint_32 \fIlength\fP\fB);\fP \fI\fB \fBvoid png_write_destroy (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_write_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBvoid png_write_flush (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBvoid png_write_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_write_init (png_structp \fIpng_ptr\fP\fB);\fP \fI\fB \fBDEPRECATED: void png_write_init_2 (png_structpp \fP\fIptr_ptr\fP\fB, png_const_charp \fP\fIuser_png_ver\fP\fB, png_size_t \fP\fIpng_struct_size\fP\fB, png_size_t \fIpng_info_size\fP\fB);\fP \fI\fB \fBvoid png_write_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBvoid png_write_info_before_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fI\fB \fBvoid png_write_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP \fI\fB \fBvoid png_write_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP \fI\fB \fBvoid png_write_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP \fI\fB \fBvoidpf png_zalloc (voidpf \fP\fIpng_ptr\fP\fB, uInt \fP\fIitems\fP\fB, uInt \fIsize\fP\fB);\fP \fI\fB \fBvoid png_zfree (voidpf \fP\fIpng_ptr\fP\fB, voidpf \fIptr\fP\fB);\fP \fI\fB .SH DESCRIPTION The .I libpng library supports encoding, decoding, and various manipulations of the Portable Network Graphics (PNG) format image files. It uses the .IR zlib(3) compression library. Following is a copy of the libpng.txt file that accompanies libpng. .SH LIBPNG.TXT libpng.txt - A description on how to use and modify libpng libpng version 1.2.7 - September 12, 2004 Updated and distributed by Glenn Randers-Pehrson Copyright (c) 1998-2004 Glenn Randers-Pehrson For conditions of distribution and use, see copyright notice in png.h. based on: libpng 1.0 beta 6 version 0.96 May 28, 1997 Updated and distributed by Andreas Dilger Copyright (c) 1996, 1997 Andreas Dilger libpng 1.0 beta 2 - version 0.88 January 26, 1996 For conditions of distribution and use, see copyright notice in png.h. Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. Updated/rewritten per request in the libpng FAQ Copyright (c) 1995, 1996 Frank J. T. Wojcik December 18, 1995 & January 20, 1996 .SH I. Introduction This file describes how to use and modify the PNG reference library (known as libpng) for your own use. There are five sections to this file: introduction, structures, reading, writing, and modification and configuration notes for various special platforms. In addition to this file, example.c is a good starting point for using the library, as it is heavily commented and should include everything most people will need. We assume that libpng is already installed; see the INSTALL file for instructions on how to install libpng. Libpng was written as a companion to the PNG specification, as a way of reducing the amount of time and effort it takes to support the PNG file format in application programs. The PNG specification (second edition), November 2003, is available as a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at The PNG-1.0 specification is available as RFC 2083 and as a W3C Recommendation . Some additional chunks are described in the special-purpose public chunks documents at . Other information about PNG, and the latest version of libpng, can be found at the PNG home page, . Most users will not have to modify the library significantly; advanced users may want to modify it more. All attempts were made to make it as complete as possible, while keeping the code easy to understand. Currently, this library only supports C. Support for other languages is being considered. Libpng has been designed to handle multiple sessions at one time, to be easily modifiable, to be portable to the vast majority of machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy to use. The ultimate goal of libpng is to promote the acceptance of the PNG file format in whatever way possible. While there is still work to be done (see the TODO file), libpng should cover the majority of the needs of its users. Libpng uses zlib for its compression and decompression of PNG files. Further information about zlib, and the latest version of zlib, can be found at the zlib home page, . The zlib compression utility is a general purpose utility that is useful for more than PNG files, and can be used without libpng. See the documentation delivered with zlib for more details. You can usually find the source files for the zlib utility wherever you find the libpng source files. Libpng is thread safe, provided the threads are using different instances of the structures. Each thread should have its own png_struct and png_info instances, and thus its own image. Libpng does not protect itself against two threads using the same instance of a structure. Note: thread safety may be defeated by use of some of the MMX assembler code in pnggccrd.c, which is only compiled when the user defines PNG_THREAD_UNSAFE_OK. .SH II. Structures There are two main structures that are important to libpng, png_struct and png_info. The first, png_struct, is an internal structure that will not, for the most part, be used by a user except as the first variable passed to every libpng function call. The png_info structure is designed to provide information about the PNG file. At one time, the fields of png_info were intended to be directly accessible to the user. However, this tended to cause problems with applications using dynamically loaded libraries, and as a result a set of interface functions for png_info (the png_get_*() and png_set_*() functions) was developed. The fields of png_info are still available for older applications, but it is suggested that applications use the new interfaces if at all possible. Applications that do make direct access to the members of png_struct (except for png_ptr->jmpbuf) must be recompiled whenever the library is updated, and applications that make direct access to the members of png_info must be recompiled if they were compiled or loaded with libpng version 1.0.6, in which the members were in a different order. In version 1.0.7, the members of the png_info structure reverted to the old order, as they were in versions 0.97c through 1.0.5. Starting with version 2.0.0, both structures are going to be hidden, and the contents of the structures will only be accessible through the png_get/png_set functions. The png.h header file is an invaluable reference for programming with libpng. And while I'm on the topic, make sure you include the libpng header file: #include .SH III. Reading We'll now walk you through the possible functions to call when reading in a PNG file sequentially, briefly explaining the syntax and purpose of each one. See example.c and png.h for more detail. While progressive reading is covered in the next section, you will still need some of the functions discussed in this section to read a PNG file. .SS Setup You will want to do the I/O initialization(*) before you get into libpng, so if it doesn't work, you don't have much to undo. Of course, you will also want to insure that you are, in fact, dealing with a PNG file. Libpng provides a simple check to see if a file is a PNG file. To use it, pass in the first 1 to 8 bytes of the file to the function png_sig_cmp(), and it will return 0 if the bytes match the corresponding bytes of the PNG signature, or nonzero otherwise. Of course, the more bytes you pass in, the greater the accuracy of the prediction. If you are intending to keep the file pointer open for use in libpng, you must ensure you don't read more than 8 bytes from the beginning of the file, and you also have to make a call to png_set_sig_bytes_read() with the number of bytes you read from the beginning. Libpng will then only check the bytes (if any) that your program didn't read. (*): If you are not using the standard I/O functions, you will need to replace them with custom functions. See the discussion under Customizing libpng. FILE *fp = fopen(file_name, "rb"); if (!fp) { return (ERROR); } fread(header, 1, number, fp); is_png = !png_sig_cmp(header, 0, number); if (!is_png) { return (NOT_PNG); } Next, png_struct and png_info need to be allocated and initialized. In order to ensure that the size of these structures is correct even with a dynamically linked libpng, there are functions to initialize and allocate the structures. We also pass the library version, optional pointers to error handling functions, and a pointer to a data struct for use by the error functions, if necessary (the pointer and functions can be NULL if the default error handlers are to be used). See the section on Changes to Libpng below regarding the old initialization functions. The structure allocation functions quietly return NULL if they fail to create the structure, so your application should check for that. png_structp png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn); if (!png_ptr) return (ERROR); png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (ERROR); } png_infop end_info = png_create_info_struct(png_ptr); if (!end_info) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (ERROR); } If you want to use your own memory allocation routines, define PNG_USER_MEM_SUPPORTED and use png_create_read_struct_2() instead of png_create_read_struct(): png_structp png_ptr = png_create_read_struct_2 (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn, (png_voidp) user_mem_ptr, user_malloc_fn, user_free_fn); The error handling routines passed to png_create_read_struct() and the memory alloc/free routines passed to png_create_struct_2() are only necessary if you are not using the libpng supplied error handling and memory alloc/free functions. When libpng encounters an error, it expects to longjmp back to your routine. Therefore, you will need to call setjmp and pass your png_jmpbuf(png_ptr). If you read the file from different routines, you will need to update the jmpbuf field every time you enter a new routine that will call a png_*() function. See your documentation of setjmp/longjmp for your compiler for more information on setjmp/longjmp. See the discussion on libpng error handling in the Customizing Libpng section below for more information on the libpng error handling. If an error occurs, and libpng longjmp's back to your setjmp, you will want to call png_destroy_read_struct() to free any memory. if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); fclose(fp); return (ERROR); } If you would rather avoid the complexity of setjmp/longjmp issues, you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case errors will result in a call to PNG_ABORT() which defaults to abort(). Now you need to set up the input code. The default for libpng is to use the C function fread(). If you use this, you will need to pass a valid FILE * in the function png_init_io(). Be sure that the file is opened in binary mode. If you wish to handle reading data in another way, you need not call the png_init_io() function, but you must then implement the libpng I/O methods discussed in the Customizing Libpng section below. png_init_io(png_ptr, fp); If you had previously opened the file and read any of the signature from the beginning in order to see if this was a PNG file, you need to let libpng know that there are some bytes missing from the start of the file. png_set_sig_bytes(png_ptr, number); .SS Setting up callback code You can set up a callback function to handle any unknown chunks in the input stream. You must supply the function read_chunk_callback(png_ptr ptr, png_unknown_chunkp chunk); { /* The unknown chunk structure contains your chunk data: */ png_byte name[5]; png_byte *data; png_size_t size; /* Note that libpng has already taken care of the CRC handling */ /* put your code here. Return one of the following: */ return (-n); /* chunk had an error */ return (0); /* did not recognize */ return (n); /* success */ } (You can give your function another name that you like instead of "read_chunk_callback") To inform libpng about your function, use png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr, read_chunk_callback); This names not only the callback function, but also a user pointer that you can retrieve with png_get_user_chunk_ptr(png_ptr); At this point, you can set up a callback function that will be called after each row has been read, which you can use to control a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void read_row_callback(png_ptr ptr, png_uint_32 row, int pass); { /* put your code here */ } (You can give it another name that you like instead of "read_row_callback") To inform libpng about your function, use png_set_read_status_fn(png_ptr, read_row_callback); .SS Width and height limits The PNG specification allows the width and height of an image to be as large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns. Since very few applications really need to process such large images, we have imposed an arbitrary 1-million limit on rows and columns. Larger images will be rejected immediately with a png_error() call. If you wish to override this limit, you can use png_set_user_limits(png_ptr, width_max, height_max); to set your own limits, or use width_max = height_max = 0x7fffffffL to allow all valid dimensions (libpng may reject some very large images anyway because of potential buffer overflow conditions). You should put this statement after you create the PNG structure and before calling png_read_info(), png_read_png(), or png_process_data(). If you need to retrieve the limits that are being applied, use width_max = png_get_user_width_max(png_ptr); height_max = png_get_user_height_max(png_ptr); .SS Unknown-chunk handling Now you get to set the way the library processes unknown chunks in the input PNG stream. Both known and unknown chunks will be read. Normal behavior is that known chunks will be parsed into information in various info_ptr members; unknown chunks will be discarded. To change this, you can call: png_set_keep_unknown_chunks(png_ptr, keep, chunk_list, num_chunks); keep - 0: do not handle as unknown 1: do not keep 2: keep only if safe-to-copy 3: keep even if unsafe-to-copy You can use these definitions: PNG_HANDLE_CHUNK_AS_DEFAULT 0 PNG_HANDLE_CHUNK_NEVER 1 PNG_HANDLE_CHUNK_IF_SAFE 2 PNG_HANDLE_CHUNK_ALWAYS 3 chunk_list - list of chunks affected (a byte string, five bytes per chunk, NULL or '\0' if num_chunks is 0) num_chunks - number of chunks affected; if 0, all unknown chunks are affected. If nonzero, only the chunks in the list are affected Unknown chunks declared in this way will be saved as raw data onto a list of png_unknown_chunk structures. If a chunk that is normally known to libpng is named in the list, it will be handled as unknown, according to the "keep" directive. If a chunk is named in successive instances of png_set_keep_unknown_chunks(), the final instance will take precedence. The IHDR and IEND chunks should not be named in chunk_list; if they are, libpng will process them normally anyway. .SS The high-level read interface At this point there are two ways to proceed; through the high-level read interface, or through a sequence of low-level read operations. You can use the high-level interface if (a) you are willing to read the entire image into memory, and (b) the input transformations you want to do are limited to the following set: PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to 8 bits PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit samples to bytes PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first PNG_TRANSFORM_EXPAND Perform set_expand() PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples (This excludes setting a background color, doing gamma transformation, dithering, and setting filler.) If this is the case, simply do this: png_read_png(png_ptr, info_ptr, png_transforms, NULL) where png_transforms is an integer containing the logical OR of some set of transformation flags. This call is equivalent to png_read_info(), followed the set of transformations indicated by the transform mask, then png_read_image(), and finally png_read_end(). (The final parameter of this call is not yet used. Someday it might point to transformation parameters required by some future input transform.) You must use png_transforms and not call any png_set_transform() functions when you use png_read_png(). After you have called png_read_png(), you can retrieve the image data with row_pointers = png_get_rows(png_ptr, info_ptr); where row_pointers is an array of pointers to the pixel data for each row: png_bytep row_pointers[height]; If you know your image size and pixel size ahead of time, you can allocate row_pointers prior to calling png_read_png() with if (height > PNG_UINT_32_MAX/png_sizeof(png_byte)) png_error (png_ptr, "Image is too tall to process in memory"); if (width > PNG_UINT_32_MAX/pixel_size) png_error (png_ptr, "Image is too wide to process in memory"); row_pointers = png_malloc(png_ptr, height*png_sizeof(png_bytep)); for (int i=0; i) and png_get_(png_ptr, info_ptr, ...) functions return non-zero if the data has been read, or zero if it is missing. The parameters to the png_get_ are set directly if they are simple data types, or a pointer into the info_ptr is returned for any complex types. png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); palette - the palette for the file (array of png_color) num_palette - number of entries in the palette png_get_gAMA(png_ptr, info_ptr, &gamma); gamma - the gamma the file is written at (PNG_INFO_gAMA) png_get_sRGB(png_ptr, info_ptr, &srgb_intent); srgb_intent - the rendering intent (PNG_INFO_sRGB) The presence of the sRGB chunk means that the pixel data is in the sRGB color space. This chunk also implies specific values of gAMA and cHRM. png_get_iCCP(png_ptr, info_ptr, &name, &compression_type, &profile, &proflen); name - The profile name. compression - The compression type; always PNG_COMPRESSION_TYPE_BASE for PNG 1.0. You may give NULL to this argument to ignore it. profile - International Color Consortium color profile data. May contain NULs. proflen - length of profile data in bytes. png_get_sBIT(png_ptr, info_ptr, &sig_bit); sig_bit - the number of significant bits for (PNG_INFO_sBIT) each of the gray, red, green, and blue channels, whichever are appropriate for the given color type (png_color_16) png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, &trans_values); trans - array of transparent entries for palette (PNG_INFO_tRNS) trans_values - graylevel or color sample values of the single transparent color for non-paletted images (PNG_INFO_tRNS) num_trans - number of transparent entries (PNG_INFO_tRNS) png_get_hIST(png_ptr, info_ptr, &hist); (PNG_INFO_hIST) hist - histogram of palette (array of png_uint_16) png_get_tIME(png_ptr, info_ptr, &mod_time); mod_time - time image was last modified (PNG_VALID_tIME) png_get_bKGD(png_ptr, info_ptr, &background); background - background color (PNG_VALID_bKGD) valid 16-bit red, green and blue values, regardless of color_type num_comments = png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); num_comments - number of comments text_ptr - array of png_text holding image comments text_ptr[i].compression - type of compression used on "text" PNG_TEXT_COMPRESSION_NONE PNG_TEXT_COMPRESSION_zTXt PNG_ITXT_COMPRESSION_NONE PNG_ITXT_COMPRESSION_zTXt text_ptr[i].key - keyword for comment. Must contain 1-79 characters. text_ptr[i].text - text comments for current keyword. Can be empty. text_ptr[i].text_length - length of text string, after decompression, 0 for iTXt text_ptr[i].itxt_length - length of itxt string, after decompression, 0 for tEXt/zTXt text_ptr[i].lang - language of comment (empty string for unknown). text_ptr[i].lang_key - keyword in UTF-8 (empty string for unknown). num_text - number of comments (same as num_comments; you can put NULL here to avoid the duplication) Note while png_set_text() will accept text, language, and translated keywords that can be NULL pointers, the structure returned by png_get_text will always contain regular zero-terminated C strings. They might be empty strings but they will never be NULL pointers. num_spalettes = png_get_sPLT(png_ptr, info_ptr, &palette_ptr); palette_ptr - array of palette structures holding contents of one or more sPLT chunks read. num_spalettes - number of sPLT chunks read. png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y, &unit_type); offset_x - positive offset from the left edge of the screen offset_y - positive offset from the top edge of the screen unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y, &unit_type); res_x - pixels/unit physical resolution in x direction res_y - pixels/unit physical resolution in x direction unit_type - PNG_RESOLUTION_UNKNOWN, PNG_RESOLUTION_METER png_get_sCAL(png_ptr, info_ptr, &unit, &width, &height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are doubles) png_get_sCAL_s(png_ptr, info_ptr, &unit, &width, &height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are strings like "2.54") num_unknown_chunks = png_get_unknown_chunks(png_ptr, info_ptr, &unknowns) unknowns - array of png_unknown_chunk structures holding unknown chunks unknowns[i].name - name of unknown chunk unknowns[i].data - data of unknown chunk unknowns[i].size - size of unknown chunk's data unknowns[i].location - position of chunk in file The value of "i" corresponds to the order in which the chunks were read from the PNG file or inserted with the png_set_unknown_chunks() function. The data from the pHYs chunk can be retrieved in several convenient forms: res_x = png_get_x_pixels_per_meter(png_ptr, info_ptr) res_y = png_get_y_pixels_per_meter(png_ptr, info_ptr) res_x_and_y = png_get_pixels_per_meter(png_ptr, info_ptr) res_x = png_get_x_pixels_per_inch(png_ptr, info_ptr) res_y = png_get_y_pixels_per_inch(png_ptr, info_ptr) res_x_and_y = png_get_pixels_per_inch(png_ptr, info_ptr) aspect_ratio = png_get_pixel_aspect_ratio(png_ptr, info_ptr) (Each of these returns 0 [signifying "unknown"] if the data is not present or if res_x is 0; res_x_and_y is 0 if res_x != res_y) The data from the oFFs chunk can be retrieved in several convenient forms: x_offset = png_get_x_offset_microns(png_ptr, info_ptr); y_offset = png_get_y_offset_microns(png_ptr, info_ptr); x_offset = png_get_x_offset_inches(png_ptr, info_ptr); y_offset = png_get_y_offset_inches(png_ptr, info_ptr); (Each of these returns 0 [signifying "unknown" if both x and y are 0] if the data is not present or if the chunk is present but the unit is the pixel) For more information, see the png_info definition in png.h and the PNG specification for chunk contents. Be careful with trusting rowbytes, as some of the transformations could increase the space needed to hold a row (expand, filler, gray_to_rgb, etc.). See png_read_update_info(), below. A quick word about text_ptr and num_text. PNG stores comments in keyword/text pairs, one pair per chunk, with no limit on the number of text chunks, and a 2^31 byte limit on their size. While there are suggested keywords, there is no requirement to restrict the use to these strings. It is strongly suggested that keywords and text be sensible to humans (that's the point), so don't use abbreviations. Non-printing symbols are not allowed. See the PNG specification for more details. There is also no requirement to have text after the keyword. Keywords should be limited to 79 Latin-1 characters without leading or trailing spaces, but non-consecutive spaces are allowed within the keyword. It is possible to have the same keyword any number of times. The text_ptr is an array of png_text structures, each holding a pointer to a language string, a pointer to a keyword and a pointer to a text string. The text string, language code, and translated keyword may be empty or NULL pointers. The keyword/text pairs are put into the array in the order that they are received. However, some or all of the text chunks may be after the image, so, to make sure you have read all the text chunks, don't mess with these until after you read the stuff after the image. This will be mentioned again below in the discussion that goes with png_read_end(). .SS Input transformations After you've read the header information, you can set up the library to handle any special transformations of the image data. The various ways to transform the data will be described in the order that they should occur. This is important, as some of these change the color type and/or bit depth of the data, and some others only work on certain color types and bit depths. Even though each transformation checks to see if it has data that it can do something with, you should make sure to only enable a transformation if it will be valid for the data. For example, don't swap red and blue on grayscale data. The colors used for the background and transparency values should be supplied in the same format/depth as the current image data. They are stored in the same format/depth as the image data in a bKGD or tRNS chunk, so this is what libpng expects for this data. The colors are transformed to keep in sync with the image data when an application calls the png_read_update_info() routine (see below). Data will be decoded into the supplied row buffers packed into bytes unless the library has been told to transform it into another format. For example, 4 bit/pixel paletted or grayscale data will be returned 2 pixels/byte with the leftmost pixel in the high-order bits of the byte, unless png_set_packing() is called. 8-bit RGB data will be stored in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha() is called to insert filler bytes, either before or after each RGB triplet. 16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant byte of the color value first, unless png_set_strip_16() is called to transform it to regular RGB RGB triplets, or png_set_filler|add alpha() is called to insert filler bytes, either before or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can be modified with png_set_filler(), png_set_add_alpha(), or png_set_strip_16(). The following code transforms grayscale images of less than 8 to 8 bits, changes paletted images to RGB, and adds a full alpha channel if there is transparency information in a tRNS chunk. This is most useful on grayscale images with bit depths of 2 or 4 or if there is a multiple-image viewing application that wishes to treat all images in the same way. if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr); if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); These three functions are actually aliases for png_set_expand(), added in libpng version 1.0.4, with the function names expanded to improve code readability. In some future version they may actually do different things. PNG can have files with 16 bits per channel. If you only can handle 8 bits per channel, this will strip the pixels down to 8 bit. if (bit_depth == 16) png_set_strip_16(png_ptr); If, for some reason, you don't need the alpha channel on an image, and you want to remove it rather than combining it with the background (but the image author certainly had in mind that you *would* combine it with the background, so that's what you should probably do): if (color_type & PNG_COLOR_MASK_ALPHA) png_set_strip_alpha(png_ptr); In PNG files, the alpha channel in an image is the level of opacity. If you need the alpha channel in an image to be the level of transparency instead of opacity, you can invert the alpha channel (or the tRNS chunk data) after it's read, so that 0 is fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit images) is fully transparent, with png_set_invert_alpha(png_ptr); PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as they can, resulting in, for example, 8 pixels per byte for 1 bit files. This code expands to 1 pixel per byte without changing the values of the pixels: if (bit_depth < 8) png_set_packing(png_ptr); PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels stored in a PNG image have been "scaled" or "shifted" up to the next higher possible bit depth (e.g. from 5 bits/sample in the range [0,31] to 8 bits/sample in the range [0, 255]). However, it is also possible to convert the PNG pixel data back to the original bit depth of the image. This call reduces the pixels back down to the original bit depth: png_color_8p sig_bit; if (png_get_sBIT(png_ptr, info_ptr, &sig_bit)) png_set_shift(png_ptr, sig_bit); PNG files store 3-color pixels in red, green, blue order. This code changes the storage of the pixels to blue, green, red: if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_bgr(png_ptr); PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them into 4 or 8 bytes for windowing systems that need them in this format: if (color_type == PNG_COLOR_TYPE_RGB) png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE); where "filler" is the 8 or 16-bit number to fill with, and the location is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether you want the filler before the RGB or after. This transformation does not affect images that already have full alpha channels. To add an opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which will generate RGBA pixels. Note that png_set_filler() does not change the color type. If you want to do that, you can add a true alpha channel with if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_GRAY) png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER); where "filler" contains the alpha value to assign to each pixel. This function became available in libpng-1.2.7. If you are reading an image with an alpha channel, and you need the data as ARGB instead of the normal PNG format RGBA: if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_swap_alpha(png_ptr); For some uses, you may want a grayscale image to be represented as RGB. This code will do that conversion: if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png_ptr); Conversely, you can convert an RGB or RGBA image to grayscale or grayscale with alpha. if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_rgb_to_gray_fixed(png_ptr, error_action, int red_weight, int green_weight); error_action = 1: silently do the conversion error_action = 2: issue a warning if the original image has any pixel where red != green or red != blue error_action = 3: issue an error and abort the conversion if the original image has any pixel where red != green or red != blue red_weight: weight of red component times 100000 green_weight: weight of green component times 100000 If either weight is negative, default weights (21268, 71514) are used. If you have set error_action = 1 or 2, you can later check whether the image really was gray, after processing the image rows, with the png_get_rgb_to_gray_status(png_ptr) function. It will return a png_byte that is zero if the image was gray or 1 if there were any non-gray pixels. bKGD and sBIT data will be silently converted to grayscale, using the green channel data, regardless of the error_action setting. With red_weight+green_weight<=100000, the normalized graylevel is computed: int rw = red_weight * 65536; int gw = green_weight * 65536; int bw = 65536 - (rw + gw); gray = (rw*red + gw*green + bw*blue)/65536; The default values approximate those recommended in the Charles Poynton's Color FAQ, Copyright (c) 1998-01-04 Charles Poynton poynton@inforamp.net Y = 0.212671 * R + 0.715160 * G + 0.072169 * B Libpng approximates this with Y = 0.21268 * R + 0.7151 * G + 0.07217 * B which can be expressed with integers as Y = (6969 * R + 23434 * G + 2365 * B)/32768 The calculation is done in a linear colorspace, if the image gamma is known. If you have a grayscale and you are using png_set_expand_depth(), png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to a higher bit-depth, you must either supply the background color as a gray value at the original file bit-depth (need_expand = 1) or else supply the background color as an RGB triplet at the final, expanded bit depth (need_expand = 0). Similarly, if you are reading a paletted image, you must either supply the background color as a palette index (need_expand = 1) or as an RGB triplet that may or may not be in the palette (need_expand = 0). png_color_16 my_background; png_color_16p image_background; if (png_get_bKGD(png_ptr, info_ptr, &image_background)) png_set_background(png_ptr, image_background, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); else png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); The png_set_background() function tells libpng to composite images with alpha or simple transparency against the supplied background color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid), you may use this color, or supply another color more suitable for the current display (e.g., the background color from a web page). You need to tell libpng whether the color is in the gamma space of the display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file (PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't know why anyone would use this, but it's here). To properly display PNG images on any kind of system, the application needs to know what the display gamma is. Ideally, the user will know this, and the application will allow them to set it. One method of allowing the user to set the display gamma separately for each system is to check for a SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be correctly set. Note that display_gamma is the overall gamma correction required to produce pleasing results, which depends on the lighting conditions in the surrounding environment. In a dim or brightly lit room, no compensation other than the physical gamma exponent of the monitor is needed, while in a dark room a slightly smaller exponent is better. double gamma, screen_gamma; if (/* We have a user-defined screen gamma value */) { screen_gamma = user_defined_screen_gamma; } /* One way that applications can share the same screen gamma value */ else if ((gamma_str = getenv("SCREEN_GAMMA")) != NULL) { screen_gamma = (double)atof(gamma_str); } /* If we don't have another value */ else { screen_gamma = 2.2; /* A good guess for a PC monitor in a bright office or a dim room */ screen_gamma = 2.0; /* A good guess for a PC monitor in a dark room */ screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */ } The png_set_gamma() function handles gamma transformations of the data. Pass both the file gamma and the current screen_gamma. If the file does not have a gamma value, you can pass one anyway if you have an idea what it is (usually 0.45455 is a good guess for GIF images on PCs). Note that file gammas are inverted from screen gammas. See the discussions on gamma in the PNG specification for an excellent description of what gamma is, and why all applications should support it. It is strongly recommended that PNG viewers support gamma correction. if (png_get_gAMA(png_ptr, info_ptr, &gamma)) png_set_gamma(png_ptr, screen_gamma, gamma); else png_set_gamma(png_ptr, screen_gamma, 0.45455); If you need to reduce an RGB file to a paletted file, or if a paletted file has more entries then will fit on your screen, png_set_dither() will do that. Note that this is a simple match dither that merely finds the closest color available. This should work fairly well with optimized palettes, and fairly badly with linear color cubes. If you pass a palette that is larger then maximum_colors, the file will reduce the number of colors in the palette so it will fit into maximum_colors. If there is a histogram, it will use it to make more intelligent choices when reducing the palette. If there is no histogram, it may not do as good a job. if (color_type & PNG_COLOR_MASK_COLOR) { if (png_get_valid(png_ptr, info_ptr, PNG_INFO_PLTE)) { png_uint_16p histogram = NULL; png_get_hIST(png_ptr, info_ptr, &histogram); png_set_dither(png_ptr, palette, num_palette, max_screen_colors, histogram, 1); } else { png_color std_color_cube[MAX_SCREEN_COLORS] = { ... colors ... }; png_set_dither(png_ptr, std_color_cube, MAX_SCREEN_COLORS, MAX_SCREEN_COLORS, NULL,0); } } PNG files describe monochrome as black being zero and white being one. The following code will reverse this (make black be one and white be zero): if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY) png_set_invert_mono(png_ptr); This function can also be used to invert grayscale and gray-alpha images: if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_invert_mono(png_ptr); PNG files store 16 bit pixels in network byte order (big-endian, ie. most significant bits first). This code changes the storage to the other way (little-endian, i.e. least significant bits first, the way PCs store them): if (bit_depth == 16) png_set_swap(png_ptr); If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you need to change the order the pixels are packed into bytes, you can use: if (bit_depth < 8) png_set_packswap(png_ptr); Finally, you can write your own transformation function if none of the existing ones meets your needs. This is done by setting a callback with png_set_read_user_transform_fn(png_ptr, read_transform_fn); You must supply the function void read_transform_fn(png_ptr ptr, row_info_ptr row_info, png_bytep data) See pngtest.c for a working example. Your function will be called after all of the other transformations have been processed. You can also set up a pointer to a user structure for use by your callback function, and you can inform libpng that your transform function will change the number of channels or bit depth with the function png_set_user_transform_info(png_ptr, user_ptr, user_depth, user_channels); The user's application, not libpng, is responsible for allocating and freeing any memory required for the user structure. You can retrieve the pointer via the function png_get_user_transform_ptr(). For example: voidp read_user_transform_ptr = png_get_user_transform_ptr(png_ptr); The last thing to handle is interlacing; this is covered in detail below, but you must call the function here if you want libpng to handle expansion of the interlaced image. number_of_passes = png_set_interlace_handling(png_ptr); After setting the transformations, libpng can update your png_info structure to reflect any transformations you've requested with this call. This is most useful to update the info structure's rowbytes field so you can use it to allocate your image memory. This function will also update your palette with the correct screen_gamma and background if these have been given with the calls above. png_read_update_info(png_ptr, info_ptr); After you call png_read_update_info(), you can allocate any memory you need to hold the image. The row data is simply raw byte data for all forms of images. As the actual allocation varies among applications, no example will be given. If you are allocating one large chunk, you will need to build an array of pointers to each row, as it will be needed for some of the functions below. .SS Reading image data After you've allocated memory, you can read the image data. The simplest way to do this is in one function call. If you are allocating enough memory to hold the whole image, you can just call png_read_image() and libpng will read in all the image data and put it in the memory area supplied. You will need to pass in an array of pointers to each row. This function automatically handles interlacing, so you don't need to call png_set_interlace_handling() or call this function multiple times, or any of that other stuff necessary with png_read_rows(). png_read_image(png_ptr, row_pointers); where row_pointers is: png_bytep row_pointers[height]; You can point to void or char or whatever you use for pixels. If you don't want to read in the whole image at once, you can use png_read_rows() instead. If there is no interlacing (check interlace_type == PNG_INTERLACE_NONE), this is simple: png_read_rows(png_ptr, row_pointers, NULL, number_of_rows); where row_pointers is the same as in the png_read_image() call. If you are doing this just one row at a time, you can do this with a single row_pointer instead of an array of row_pointers: png_bytep row_pointer = row; png_read_row(png_ptr, row_pointer, NULL); If the file is interlaced (interlace_type != 0 in the IHDR chunk), things get somewhat harder. The only current (PNG Specification version 1.2) interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7) is a somewhat complicated 2D interlace scheme, known as Adam7, that breaks down an image into seven smaller images of varying size, based on an 8x8 grid. libpng can fill out those images or it can give them to you "as is". If you want them filled out, there are two ways to do that. The one mentioned in the PNG specification is to expand each pixel to cover those pixels that have not been read yet (the "rectangle" method). This results in a blocky image for the first pass, which gradually smooths out as more pixels are read. The other method is the "sparkle" method, where pixels are drawn only in their final locations, with the rest of the image remaining whatever colors they were initialized to before the start of the read. The first method usually looks better, but tends to be slower, as there are more pixels to put in the rows. If you don't want libpng to handle the interlacing details, just call png_read_rows() seven times to read in all seven images. Each of the images is a valid image by itself, or they can all be combined on an 8x8 grid to form a single image (although if you intend to combine them you would be far better off using the libpng interlace handling). The first pass will return an image 1/8 as wide as the entire image (every 8th column starting in column 0) and 1/8 as high as the original (every 8th row starting in row 0), the second will be 1/8 as wide (starting in column 4) and 1/8 as high (also starting in row 0). The third pass will be 1/4 as wide (every 4th pixel starting in column 0) and 1/8 as high (every 8th row starting in row 4), and the fourth pass will be 1/4 as wide and 1/4 as high (every 4th column starting in column 2, and every 4th row starting in row 0). The fifth pass will return an image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2), while the sixth pass will be 1/2 as wide and 1/2 as high as the original (starting in column 1 and row 0). The seventh and final pass will be as wide as the original, and 1/2 as high, containing all of the odd numbered scanlines. Phew! If you want libpng to expand the images, call this before calling png_start_read_image() or png_read_update_info(): if (interlace_type == PNG_INTERLACE_ADAM7) number_of_passes = png_set_interlace_handling(png_ptr); This will return the number of passes needed. Currently, this is seven, but may change if another interlace type is added. This function can be called even if the file is not interlaced, where it will return one pass. If you are not going to display the image after each pass, but are going to wait until the entire image is read in, use the sparkle effect. This effect is faster and the end result of either method is exactly the same. If you are planning on displaying the image after each pass, the "rectangle" effect is generally considered the better looking one. If you only want the "sparkle" effect, just call png_read_rows() as normal, with the third parameter NULL. Make sure you make pass over the image number_of_passes times, and you don't change the data in the rows between calls. You can change the locations of the data, just not the data. Each pass only writes the pixels appropriate for that pass, and assumes the data from previous passes is still valid. png_read_rows(png_ptr, row_pointers, NULL, number_of_rows); If you only want the first effect (the rectangles), do the same as before except pass the row buffer in the third parameter, and leave the second parameter NULL. png_read_rows(png_ptr, NULL, row_pointers, number_of_rows); .SS Finishing a sequential read After you are finished reading the image through either the high- or low-level interfaces, you can finish reading the file. If you are interested in comments or time, which may be stored either before or after the image data, you should pass the separate png_info struct if you want to keep the comments from before and after the image separate. If you are not interested, you can pass NULL. png_read_end(png_ptr, end_info); When you are done, you can free all memory allocated by libpng like this: png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); It is also possible to individually free the info_ptr members that point to libpng-allocated storage with the following function: png_free_data(png_ptr, info_ptr, mask, seq) mask - identifies data to be freed, a mask containing the logical OR of one or more of PNG_FREE_PLTE, PNG_FREE_TRNS, PNG_FREE_HIST, PNG_FREE_ICCP, PNG_FREE_PCAL, PNG_FREE_ROWS, PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_TEXT, PNG_FREE_UNKN, or simply PNG_FREE_ALL seq - sequence number of item to be freed (-1 for all items) This function may be safely called when the relevant storage has already been freed, or has not yet been allocated, or was allocated by the user and not by libpng, and will in those cases do nothing. The "seq" parameter is ignored if only one item of the selected data type, such as PLTE, is allowed. If "seq" is not -1, and multiple items are allowed for the data type identified in the mask, such as text or sPLT, only the n'th item in the structure is freed, where n is "seq". The default behavior is only to free data that was allocated internally by libpng. This can be changed, so that libpng will not free the data, or so that it will free data that was allocated by the user with png_malloc() or png_zalloc() and passed in via a png_set_*() function, with png_data_freer(png_ptr, info_ptr, freer, mask) mask - which data elements are affected same choices as in png_free_data() freer - one of PNG_DESTROY_WILL_FREE_DATA PNG_SET_WILL_FREE_DATA PNG_USER_WILL_FREE_DATA This function only affects data that has already been allocated. You can call this function after reading the PNG data but before calling any png_set_*() functions, to control whether the user or the png_set_*() function is responsible for freeing any existing data that might be present, and again after the png_set_*() functions to control whether the user or png_destroy_*() is supposed to free the data. When the user assumes responsibility for libpng-allocated data, the application must use png_free() to free it, and when the user transfers responsibility to libpng for data that the user has allocated, the user must have used png_malloc() or png_zalloc() to allocate it. If you allocated your row_pointers in a single block, as suggested above in the description of the high level read interface, you must not transfer responsibility for freeing it to the png_set_rows or png_read_destroy function, because they would also try to free the individual row_pointers[i]. If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword separately, do not transfer responsibility for freeing text_ptr to libpng, because when libpng fills a png_text structure it combines these members with the key member, and png_free_data() will free only text_ptr.key. Similarly, if you transfer responsibility for free'ing text_ptr from libpng to your application, your application must not separately free those members. The png_free_data() function will turn off the "valid" flag for anything it frees. If you need to turn the flag off for a chunk that was freed by your application instead of by libpng, you can use png_set_invalid(png_ptr, info_ptr, mask); mask - identifies the chunks to be made invalid, containing the logical OR of one or more of PNG_INFO_gAMA, PNG_INFO_sBIT, PNG_INFO_cHRM, PNG_INFO_PLTE, PNG_INFO_tRNS, PNG_INFO_bKGD, PNG_INFO_hIST, PNG_INFO_pHYs, PNG_INFO_oFFs, PNG_INFO_tIME, PNG_INFO_pCAL, PNG_INFO_sRGB, PNG_INFO_iCCP, PNG_INFO_sPLT, PNG_INFO_sCAL, PNG_INFO_IDAT For a more compact example of reading a PNG image, see the file example.c. .SS Reading PNG files progressively The progressive reader is slightly different then the non-progressive reader. Instead of calling png_read_info(), png_read_rows(), and png_read_end(), you make one call to png_process_data(), which calls callbacks when it has the info, a row, or the end of the image. You set up these callbacks with png_set_progressive_read_fn(). You don't have to worry about the input/output functions of libpng, as you are giving the library the data directly in png_process_data(). I will assume that you have read the section on reading PNG files above, so I will only highlight the differences (although I will show all of the code). png_structp png_ptr; png_infop info_ptr; /* An example code fragment of how you would initialize the progressive reader in your application. */ int initialize_png_reader() { png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn); if (!png_ptr) return (ERROR); info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (ERROR); } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (ERROR); } /* This one's new. You can provide functions to be called when the header info is valid, when each row is completed, and when the image is finished. If you aren't using all functions, you can specify NULL parameters. Even when all three functions are NULL, you need to call png_set_progressive_read_fn(). You can use any struct as the user_ptr (cast to a void pointer for the function call), and retrieve the pointer from inside the callbacks using the function png_get_progressive_ptr(png_ptr); which will return a void pointer, which you have to cast appropriately. */ png_set_progressive_read_fn(png_ptr, (void *)user_ptr, info_callback, row_callback, end_callback); return 0; } /* A code fragment that you call as you receive blocks of data */ int process_data(png_bytep buffer, png_uint_32 length) { if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (ERROR); } /* This one's new also. Simply give it a chunk of data from the file stream (in order, of course). On machines with segmented memory models machines, don't give it any more than 64K. The library seems to run fine with sizes of 4K. Although you can give it much less if necessary (I assume you can give it chunks of 1 byte, I haven't tried less then 256 bytes yet). When this function returns, you may want to display any rows that were generated in the row callback if you don't already do so there. */ png_process_data(png_ptr, info_ptr, buffer, length); return 0; } /* This function is called (as set by png_set_progressive_read_fn() above) when enough data has been supplied so all of the header has been read. */ void info_callback(png_structp png_ptr, png_infop info) { /* Do any setup here, including setting any of the transformations mentioned in the Reading PNG files section. For now, you _must_ call either png_start_read_image() or png_read_update_info() after all the transformations are set (even if you don't set any). You may start getting rows before png_process_data() returns, so this is your last chance to prepare for that. */ } /* This function is called when each row of image data is complete */ void row_callback(png_structp png_ptr, png_bytep new_row, png_uint_32 row_num, int pass) { /* If the image is interlaced, and you turned on the interlace handler, this function will be called for every row in every pass. Some of these rows will not be changed from the previous pass. When the row is not changed, the new_row variable will be NULL. The rows and passes are called in order, so you don't really need the row_num and pass, but I'm supplying them because it may make your life easier. For the non-NULL rows of interlaced images, you must call png_progressive_combine_row() passing in the row and the old row. You can call this function for NULL rows (it will just return) and for non-interlaced images (it just does the memcpy for you) if it will make the code easier. Thus, you can just do this for all cases: */ png_progressive_combine_row(png_ptr, old_row, new_row); /* where old_row is what was displayed for previously for the row. Note that the first pass (pass == 0, really) will completely cover the old row, so the rows do not have to be initialized. After the first pass (and only for interlaced images), you will have to pass the current row, and the function will combine the old row and the new row. */ } void end_callback(png_structp png_ptr, png_infop info) { /* This function is called after the whole image has been read, including any chunks after the image (up to and including the IEND). You will usually have the same info chunk as you had in the header, although some data may have been added to the comments and time fields. Most people won't do much here, perhaps setting a flag that marks the image as finished. */ } .SH IV. Writing Much of this is very similar to reading. However, everything of importance is repeated here, so you won't have to constantly look back up in the reading section to understand writing. .SS Setup You will want to do the I/O initialization before you get into libpng, so if it doesn't work, you don't have anything to undo. If you are not using the standard I/O functions, you will need to replace them with custom writing functions. See the discussion under Customizing libpng. FILE *fp = fopen(file_name, "wb"); if (!fp) { return (ERROR); } Next, png_struct and png_info need to be allocated and initialized. As these can be both relatively large, you may not want to store these on the stack, unless you have stack space to spare. Of course, you will want to check if they return NULL. If you are also reading, you won't want to name your read structure and your write structure both "png_ptr"; you can call them anything you like, such as "read_ptr" and "write_ptr". Look at pngtest.c, for example. png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn); if (!png_ptr) return (ERROR); png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); return (ERROR); } If you want to use your own memory allocation routines, define PNG_USER_MEM_SUPPORTED and use png_create_write_struct_2() instead of png_create_write_struct(): png_structp png_ptr = png_create_write_struct_2 (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr, user_error_fn, user_warning_fn, (png_voidp) user_mem_ptr, user_malloc_fn, user_free_fn); After you have these structures, you will need to set up the error handling. When libpng encounters an error, it expects to longjmp() back to your routine. Therefore, you will need to call setjmp() and pass the png_jmpbuf(png_ptr). If you write the file from different routines, you will need to update the png_jmpbuf(png_ptr) every time you enter a new routine that will call a png_*() function. See your documentation of setjmp/longjmp for your compiler for more information on setjmp/longjmp. See the discussion on libpng error handling in the Customizing Libpng section below for more information on the libpng error handling. if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp); return (ERROR); } ... return; If you would rather avoid the complexity of setjmp/longjmp issues, you can compile libpng with PNG_SETJMP_NOT_SUPPORTED, in which case errors will result in a call to PNG_ABORT() which defaults to abort(). Now you need to set up the output code. The default for libpng is to use the C function fwrite(). If you use this, you will need to pass a valid FILE * in the function png_init_io(). Be sure that the file is opened in binary mode. Again, if you wish to handle writing data in another way, see the discussion on libpng I/O handling in the Customizing Libpng section below. png_init_io(png_ptr, fp); .SS Write callbacks At this point, you can set up a callback function that will be called after each row has been written, which you can use to control a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void write_row_callback(png_ptr, png_uint_32 row, int pass); { /* put your code here */ } (You can give it another name that you like instead of "write_row_callback") To inform libpng about your function, use png_set_write_status_fn(png_ptr, write_row_callback); You now have the option of modifying how the compression library will run. The following functions are mainly for testing, but may be useful in some cases, like if you need to write PNG files extremely fast and are willing to give up some compression, or if you want to get the maximum possible compression at the expense of slower writing. If you have no special needs in this area, let the library do what it wants by not calling this function at all, as it has been tuned to deliver a good speed/compression ratio. The second parameter to png_set_filter() is the filter method, for which the only valid values are 0 (as of the July 1999 PNG specification, version 1.2) or 64 (if you are writing a PNG datastream that is to be embedded in a MNG datastream). The third parameter is a flag that indicates which filter type(s) are to be tested for each scanline. See the PNG specification for details on the specific filter types. /* turn on or off filtering, and/or choose specific filters. You can use either a single PNG_FILTER_VALUE_NAME or the logical OR of one or more PNG_FILTER_NAME masks. */ png_set_filter(png_ptr, 0, PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE | PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB | PNG_FILTER_UP | PNG_FILTER_VALUE_UP | PNG_FILTER_AVE | PNG_FILTER_VALUE_AVE | PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH| PNG_ALL_FILTERS); If an application wants to start and stop using particular filters during compression, it should start out with all of the filters (to ensure that the previous row of pixels will be stored in case it's needed later), and then add and remove them after the start of compression. If you are writing a PNG datastream that is to be embedded in a MNG datastream, the second parameter can be either 0 or 64. The png_set_compression_*() functions interface to the zlib compression library, and should mostly be ignored unless you really know what you are doing. The only generally useful call is png_set_compression_level() which changes how much time zlib spends on trying to compress the image data. See the Compression Library (zlib.h and algorithm.txt, distributed with zlib) for details on the compression levels. /* set the zlib compression level */ png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); /* set other zlib parameters */ png_set_compression_mem_level(png_ptr, 8); png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY); png_set_compression_window_bits(png_ptr, 15); png_set_compression_method(png_ptr, 8); png_set_compression_buffer_size(png_ptr, 8192) extern PNG_EXPORT(void,png_set_zbuf_size) .SS Setting the contents of info for output You now need to fill in the png_info structure with all the data you wish to write before the actual image. Note that the only thing you are allowed to write after the image is the text chunks and the time chunk (as of PNG Specification 1.2, anyway). See png_write_end() and the latest PNG specification for more information on that. If you wish to write them before the image, fill them in now, and flag that data as being valid. If you want to wait until after the data, don't fill them until png_write_end(). For all the fields in png_info and their data types, see png.h. For explanations of what the fields contain, see the PNG specification. Some of the more important parts of the png_info are: png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_method) width - holds the width of the image in pixels (up to 2^31). height - holds the height of the image in pixels (up to 2^31). bit_depth - holds the bit depth of one of the image channels. (valid values are 1, 2, 4, 8, 16 and depend also on the color_type. See also significant bits (sBIT) below). color_type - describes which color/alpha channels are present. PNG_COLOR_TYPE_GRAY (bit depths 1, 2, 4, 8, 16) PNG_COLOR_TYPE_GRAY_ALPHA (bit depths 8, 16) PNG_COLOR_TYPE_PALETTE (bit depths 1, 2, 4, 8) PNG_COLOR_TYPE_RGB (bit_depths 8, 16) PNG_COLOR_TYPE_RGB_ALPHA (bit_depths 8, 16) PNG_COLOR_MASK_PALETTE PNG_COLOR_MASK_COLOR PNG_COLOR_MASK_ALPHA interlace_type - PNG_INTERLACE_NONE or PNG_INTERLACE_ADAM7 compression_type - (must be PNG_COMPRESSION_TYPE_DEFAULT) filter_method - (must be PNG_FILTER_TYPE_DEFAULT or, if you are writing a PNG to be embedded in a MNG datastream, can also be PNG_INTRAPIXEL_DIFFERENCING) png_set_PLTE(png_ptr, info_ptr, palette, num_palette); palette - the palette for the file (array of png_color) num_palette - number of entries in the palette png_set_gAMA(png_ptr, info_ptr, gamma); gamma - the gamma the image was created at (PNG_INFO_gAMA) png_set_sRGB(png_ptr, info_ptr, srgb_intent); srgb_intent - the rendering intent (PNG_INFO_sRGB) The presence of the sRGB chunk means that the pixel data is in the sRGB color space. This chunk also implies specific values of gAMA and cHRM. Rendering intent is the CSS-1 property that has been defined by the International Color Consortium (http://www.color.org). It can be one of PNG_sRGB_INTENT_SATURATION, PNG_sRGB_INTENT_PERCEPTUAL, PNG_sRGB_INTENT_ABSOLUTE, or PNG_sRGB_INTENT_RELATIVE. png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, srgb_intent); srgb_intent - the rendering intent (PNG_INFO_sRGB) The presence of the sRGB chunk means that the pixel data is in the sRGB color space. This function also causes gAMA and cHRM chunks with the specific values that are consistent with sRGB to be written. png_set_iCCP(png_ptr, info_ptr, name, compression_type, profile, proflen); name - The profile name. compression - The compression type; always PNG_COMPRESSION_TYPE_BASE for PNG 1.0. You may give NULL to this argument to ignore it. profile - International Color Consortium color profile data. May contain NULs. proflen - length of profile data in bytes. png_set_sBIT(png_ptr, info_ptr, sig_bit); sig_bit - the number of significant bits for (PNG_INFO_sBIT) each of the gray, red, green, and blue channels, whichever are appropriate for the given color type (png_color_16) png_set_tRNS(png_ptr, info_ptr, trans, num_trans, trans_values); trans - array of transparent entries for palette (PNG_INFO_tRNS) trans_values - graylevel or color sample values of the single transparent color for non-paletted images (PNG_INFO_tRNS) num_trans - number of transparent entries (PNG_INFO_tRNS) png_set_hIST(png_ptr, info_ptr, hist); (PNG_INFO_hIST) hist - histogram of palette (array of png_uint_16) png_set_tIME(png_ptr, info_ptr, mod_time); mod_time - time image was last modified (PNG_VALID_tIME) png_set_bKGD(png_ptr, info_ptr, background); background - background color (PNG_VALID_bKGD) png_set_text(png_ptr, info_ptr, text_ptr, num_text); text_ptr - array of png_text holding image comments text_ptr[i].compression - type of compression used on "text" PNG_TEXT_COMPRESSION_NONE PNG_TEXT_COMPRESSION_zTXt PNG_ITXT_COMPRESSION_NONE PNG_ITXT_COMPRESSION_zTXt text_ptr[i].key - keyword for comment. Must contain 1-79 characters. text_ptr[i].text - text comments for current keyword. Can be NULL or empty. text_ptr[i].text_length - length of text string, after decompression, 0 for iTXt text_ptr[i].itxt_length - length of itxt string, after decompression, 0 for tEXt/zTXt text_ptr[i].lang - language of comment (NULL or empty for unknown). text_ptr[i].translated_keyword - keyword in UTF-8 (NULL or empty for unknown). num_text - number of comments png_set_sPLT(png_ptr, info_ptr, &palette_ptr, num_spalettes); palette_ptr - array of png_sPLT_struct structures to be added to the list of palettes in the info structure. num_spalettes - number of palette structures to be added. png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type); offset_x - positive offset from the left edge of the screen offset_y - positive offset from the top edge of the screen unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type); res_x - pixels/unit physical resolution in x direction res_y - pixels/unit physical resolution in y direction unit_type - PNG_RESOLUTION_UNKNOWN, PNG_RESOLUTION_METER png_set_sCAL(png_ptr, info_ptr, unit, width, height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are doubles) png_set_sCAL_s(png_ptr, info_ptr, unit, width, height) unit - physical scale units (an integer) width - width of a pixel in physical scale units height - height of a pixel in physical scale units (width and height are strings like "2.54") png_set_unknown_chunks(png_ptr, info_ptr, &unknowns, num_unknowns) unknowns - array of png_unknown_chunk structures holding unknown chunks unknowns[i].name - name of unknown chunk unknowns[i].data - data of unknown chunk unknowns[i].size - size of unknown chunk's data unknowns[i].location - position to write chunk in file 0: do not write chunk PNG_HAVE_IHDR: before PLTE PNG_HAVE_PLTE: before IDAT PNG_AFTER_IDAT: after IDAT The "location" member is set automatically according to what part of the output file has already been written. You can change its value after calling png_set_unknown_chunks() as demonstrated in pngtest.c. Within each of the "locations", the chunks are sequenced according to their position in the structure (that is, the value of "i", which is the order in which the chunk was either read from the input file or defined with png_set_unknown_chunks). A quick word about text and num_text. text is an array of png_text structures. num_text is the number of valid structures in the array. Each png_text structure holds a language code, a keyword, a text value, and a compression type. The compression types have the same valid numbers as the compression types of the image data. Currently, the only valid number is zero. However, you can store text either compressed or uncompressed, unlike images, which always have to be compressed. So if you don't want the text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE. Because tEXt and zTXt chunks don't have a language field, if you specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt any language code or translated keyword will not be written out. Until text gets around 1000 bytes, it is not worth compressing it. After the text has been written out to the file, the compression type is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR, so that it isn't written out again at the end (in case you are calling png_write_end() with the same struct. The keywords that are given in the PNG Specification are: Title Short (one line) title or caption for image Author Name of image's creator Description Description of image (possibly long) Copyright Copyright notice Creation Time Time of original image creation (usually RFC 1123 format, see below) Software Software used to create the image Disclaimer Legal disclaimer Warning Warning of nature of content Source Device used to create the image Comment Miscellaneous comment; conversion from other image format The keyword-text pairs work like this. Keywords should be short simple descriptions of what the comment is about. Some typical keywords are found in the PNG specification, as is some recommendations on keywords. You can repeat keywords in a file. You can even write some text before the image and some after. For example, you may want to put a description of the image before the image, but leave the disclaimer until after, so viewers working over modem connections don't have to wait for the disclaimer to go over the modem before they start seeing the image. Finally, keywords should be full words, not abbreviations. Keywords and text are in the ISO 8859-1 (Latin-1) character set (a superset of regular ASCII) and can not contain NUL characters, and should not contain control or other unprintable characters. To make the comments widely readable, stick with basic ASCII, and avoid machine specific character set extensions like the IBM-PC character set. The keyword must be present, but you can leave off the text string on non-compressed pairs. Compressed pairs must have a text string, as only the text string is compressed anyway, so the compression would be meaningless. PNG supports modification time via the png_time structure. Two conversion routines are provided, png_convert_from_time_t() for time_t and png_convert_from_struct_tm() for struct tm. The time_t routine uses gmtime(). You don't have to use either of these, but if you wish to fill in the png_time structure directly, you should provide the time in universal time (GMT) if possible instead of your local time. Note that the year number is the full year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and that months start with 1. If you want to store the time of the original image creation, you should use a plain tEXt chunk with the "Creation Time" keyword. This is necessary because the "creation time" of a PNG image is somewhat vague, depending on whether you mean the PNG file, the time the image was created in a non-PNG format, a still photo from which the image was scanned, or possibly the subject matter itself. In order to facilitate machine-readable dates, it is recommended that the "Creation Time" tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"), although this isn't a requirement. Unlike the tIME chunk, the "Creation Time" tEXt chunk is not expected to be automatically changed by the software. To facilitate the use of RFC 1123 dates, a function png_convert_to_rfc1123(png_timep) is provided to convert from PNG time to an RFC 1123 format string. .SS Writing unknown chunks You can use the png_set_unknown_chunks function to queue up chunks for writing. You give it a chunk name, raw data, and a size; that's all there is to it. The chunks will be written by the next following png_write_info_before_PLTE, png_write_info, or png_write_end function. Any chunks previously read into the info structure's unknown-chunk list will also be written out in a sequence that satisfies the PNG specification's ordering rules. .SS The high-level write interface At this point there are two ways to proceed; through the high-level write interface, or through a sequence of low-level write operations. You can use the high-level interface if your image data is present in the info structure. All defined output transformations are permitted, enabled by the following masks. PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes. If you have valid image data in the info structure (you can use png_set_rows() to put image data in the info structure), simply do this: png_write_png(png_ptr, info_ptr, png_transforms, NULL) where png_transforms is an integer containing the logical OR of some set of transformation flags. This call is equivalent to png_write_info(), followed the set of transformations indicated by the transform mask, then png_write_image(), and finally png_write_end(). (The final parameter of this call is not yet used. Someday it might point to transformation parameters required by some future output transform.) You must use png_transforms and not call any png_set_transform() functions when you use png_write_png(). .SS The low-level write interface If you are going the low-level route instead, you are now ready to write all the file information up to the actual image data. You do this with a call to png_write_info(). png_write_info(png_ptr, info_ptr); Note that there is one transformation you may need to do before png_write_info(). In PNG files, the alpha channel in an image is the level of opacity. If your data is supplied as a level of transparency, you can invert the alpha channel before you write it, so that 0 is fully transparent and 255 (in 8-bit or paletted images) or 65535 (in 16-bit images) is fully opaque, with png_set_invert_alpha(png_ptr); This must appear before png_write_info() instead of later with the other transformations because in the case of paletted images the tRNS chunk data has to be inverted before the tRNS chunk is written. If your image is not a paletted image, the tRNS data (which in such cases represents a single color to be rendered as transparent) won't need to be changed, and you can safely do this transformation after your png_write_info() call. If you need to write a private chunk that you want to appear before the PLTE chunk when PLTE is present, you can write the PNG info in two steps, and insert code to write your own chunk between them: png_write_info_before_PLTE(png_ptr, info_ptr); png_set_unknown_chunks(png_ptr, info_ptr, ...); png_write_info(png_ptr, info_ptr); After you've written the file information, you can set up the library to handle any special transformations of the image data. The various ways to transform the data will be described in the order that they should occur. This is important, as some of these change the color type and/or bit depth of the data, and some others only work on certain color types and bit depths. Even though each transformation checks to see if it has data that it can do something with, you should make sure to only enable a transformation if it will be valid for the data. For example, don't swap red and blue on grayscale data. PNG files store RGB pixels packed into 3 or 6 bytes. This code tells the library to strip input data that has 4 or 8 bytes per pixel down to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2 bytes per pixel). png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); where the 0 is unused, and the location is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel is stored XRGB or RGBX. PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as they can, resulting in, for example, 8 pixels per byte for 1 bit files. If the data is supplied at 1 pixel per byte, use this code, which will correctly pack the pixels into a single byte: png_set_packing(png_ptr); PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your data is of another bit depth, you can write an sBIT chunk into the file so that decoders can recover the original data if desired. /* Set the true bit depth of the image data */ if (color_type & PNG_COLOR_MASK_COLOR) { sig_bit.red = true_bit_depth; sig_bit.green = true_bit_depth; sig_bit.blue = true_bit_depth; } else { sig_bit.gray = true_bit_depth; } if (color_type & PNG_COLOR_MASK_ALPHA) { sig_bit.alpha = true_bit_depth; } png_set_sBIT(png_ptr, info_ptr, &sig_bit); If the data is stored in the row buffer in a bit depth other than one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG), this will scale the values to appear to be the correct bit depth as is required by PNG. png_set_shift(png_ptr, &sig_bit); PNG files store 16 bit pixels in network byte order (big-endian, ie. most significant bits first). This code would be used if they are supplied the other way (little-endian, i.e. least significant bits first, the way PCs store them): if (bit_depth > 8) png_set_swap(png_ptr); If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you need to change the order the pixels are packed into bytes, you can use: if (bit_depth < 8) png_set_packswap(png_ptr); PNG files store 3 color pixels in red, green, blue order. This code would be used if they are supplied as blue, green, red: png_set_bgr(png_ptr); PNG files describe monochrome as black being zero and white being one. This code would be used if the pixels are supplied with this reversed (black being one and white being zero): png_set_invert_mono(png_ptr); Finally, you can write your own transformation function if none of the existing ones meets your needs. This is done by setting a callback with png_set_write_user_transform_fn(png_ptr, write_transform_fn); You must supply the function void write_transform_fn(png_ptr ptr, row_info_ptr row_info, png_bytep data) See pngtest.c for a working example. Your function will be called before any of the other transformations are processed. You can also set up a pointer to a user structure for use by your callback function. png_set_user_transform_info(png_ptr, user_ptr, 0, 0); The user_channels and user_depth parameters of this function are ignored when writing; you can set them to zero as shown. You can retrieve the pointer via the function png_get_user_transform_ptr(). For example: voidp write_user_transform_ptr = png_get_user_transform_ptr(png_ptr); It is possible to have libpng flush any pending output, either manually, or automatically after a certain number of lines have been written. To flush the output stream a single time call: png_write_flush(png_ptr); and to have libpng flush the output stream periodically after a certain number of scanlines have been written, call: png_set_flush(png_ptr, nrows); Note that the distance between rows is from the last time png_write_flush() was called, or the first row of the image if it has never been called. So if you write 50 lines, and then png_set_flush 25, it will flush the output on the next scanline, and every 25 lines thereafter, unless png_write_flush() is called before 25 more lines have been written. If nrows is too small (less than about 10 lines for a 640 pixel wide RGB image) the image compression may decrease noticeably (although this may be acceptable for real-time applications). Infrequent flushing will only degrade the compression performance by a few percent over images that do not use flushing. .SS Writing the image data That's it for the transformations. Now you can write the image data. The simplest way to do this is in one function call. If you have the whole image in memory, you can just call png_write_image() and libpng will write the image. You will need to pass in an array of pointers to each row. This function automatically handles interlacing, so you don't need to call png_set_interlace_handling() or call this function multiple times, or any of that other stuff necessary with png_write_rows(). png_write_image(png_ptr, row_pointers); where row_pointers is: png_byte *row_pointers[height]; You can point to void or char or whatever you use for pixels. If you don't want to write the whole image at once, you can use png_write_rows() instead. If the file is not interlaced, this is simple: png_write_rows(png_ptr, row_pointers, number_of_rows); row_pointers is the same as in the png_write_image() call. If you are just writing one row at a time, you can do this with a single row_pointer instead of an array of row_pointers: png_bytep row_pointer = row; png_write_row(png_ptr, row_pointer); When the file is interlaced, things can get a good deal more complicated. The only currently (as of the PNG Specification version 1.2, dated July 1999) defined interlacing scheme for PNG files is the "Adam7" interlace scheme, that breaks down an image into seven smaller images of varying size. libpng will build these images for you, or you can do them yourself. If you want to build them yourself, see the PNG specification for details of which pixels to write when. If you don't want libpng to handle the interlacing details, just use png_set_interlace_handling() and call png_write_rows() the correct number of times to write all seven sub-images. If you want libpng to build the sub-images, call this before you start writing any rows: number_of_passes = png_set_interlace_handling(png_ptr); This will return the number of passes needed. Currently, this is seven, but may change if another interlace type is added. Then write the complete image number_of_passes times. png_write_rows(png_ptr, row_pointers, number_of_rows); As some of these rows are not used, and thus return immediately, you may want to read about interlacing in the PNG specification, and only update the rows that are actually used. .SS Finishing a sequential write After you are finished writing the image, you should finish writing the file. If you are interested in writing comments or time, you should pass an appropriately filled png_info pointer. If you are not interested, you can pass NULL. png_write_end(png_ptr, info_ptr); When you are done, you can free all memory used by libpng like this: png_destroy_write_struct(&png_ptr, &info_ptr); It is also possible to individually free the info_ptr members that point to libpng-allocated storage with the following function: png_free_data(png_ptr, info_ptr, mask, seq) mask - identifies data to be freed, a mask containing the logical OR of one or more of PNG_FREE_PLTE, PNG_FREE_TRNS, PNG_FREE_HIST, PNG_FREE_ICCP, PNG_FREE_PCAL, PNG_FREE_ROWS, PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_TEXT, PNG_FREE_UNKN, or simply PNG_FREE_ALL seq - sequence number of item to be freed (-1 for all items) This function may be safely called when the relevant storage has already been freed, or has not yet been allocated, or was allocated by the user and not by libpng, and will in those cases do nothing. The "seq" parameter is ignored if only one item of the selected data type, such as PLTE, is allowed. If "seq" is not -1, and multiple items are allowed for the data type identified in the mask, such as text or sPLT, only the n'th item in the structure is freed, where n is "seq". If you allocated data such as a palette that you passed in to libpng with png_set_*, you must not free it until just before the call to png_destroy_write_struct(). The default behavior is only to free data that was allocated internally by libpng. This can be changed, so that libpng will not free the data, or so that it will free data that was allocated by the user with png_malloc() or png_zalloc() and passed in via a png_set_*() function, with png_data_freer(png_ptr, info_ptr, freer, mask) mask - which data elements are affected same choices as in png_free_data() freer - one of PNG_DESTROY_WILL_FREE_DATA PNG_SET_WILL_FREE_DATA PNG_USER_WILL_FREE_DATA For example, to transfer responsibility for some data from a read structure to a write structure, you could use png_data_freer(read_ptr, read_info_ptr, PNG_USER_WILL_FREE_DATA, PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST) png_data_freer(write_ptr, write_info_ptr, PNG_DESTROY_WILL_FREE_DATA, PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST) thereby briefly reassigning responsibility for freeing to the user but immediately afterwards reassigning it once more to the write_destroy function. Having done this, it would then be safe to destroy the read structure and continue to use the PLTE, tRNS, and hIST data in the write structure. This function only affects data that has already been allocated. You can call this function before calling after the png_set_*() functions to control whether the user or png_destroy_*() is supposed to free the data. When the user assumes responsibility for libpng-allocated data, the application must use png_free() to free it, and when the user transfers responsibility to libpng for data that the user has allocated, the user must have used png_malloc() or png_zalloc() to allocate it. If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword separately, do not transfer responsibility for freeing text_ptr to libpng, because when libpng fills a png_text structure it combines these members with the key member, and png_free_data() will free only text_ptr.key. Similarly, if you transfer responsibility for free'ing text_ptr from libpng to your application, your application must not separately free those members. For a more compact example of writing a PNG image, see the file example.c. .SH V. Modifying/Customizing libpng: There are three issues here. The first is changing how libpng does standard things like memory allocation, input/output, and error handling. The second deals with more complicated things like adding new chunks, adding new transformations, and generally changing how libpng works. Both of those are compile-time issues; that is, they are generally determined at the time the code is written, and there is rarely a need to provide the user with a means of changing them. The third is a run-time issue: choosing between and/or tuning one or more alternate versions of computationally intensive routines; specifically, optimized assembly-language (and therefore compiler- and platform-dependent) versions. Memory allocation, input/output, and error handling All of the memory allocation, input/output, and error handling in libpng goes through callbacks that are user-settable. The default routines are in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change these functions, call the appropriate png_set_*_fn() function. Memory allocation is done through the functions png_malloc() and png_free(). These currently just call the standard C functions. If your pointers can't access more then 64K at a time, you will want to set MAXSEG_64K in zlib.h. Since it is unlikely that the method of handling memory allocation on a platform will change between applications, these functions must be modified in the library at compile time. If you prefer to use a different method of allocating and freeing data, you can use png_create_read_struct_2() or png_create_write_struct_2() to register your own functions as described above. These functions also provide a void pointer that can be retrieved via mem_ptr=png_get_mem_ptr(png_ptr); Your replacement memory functions must have prototypes as follows: png_voidp malloc_fn(png_structp png_ptr, png_size_t size); void free_fn(png_structp png_ptr, png_voidp ptr); Your malloc_fn() must return NULL in case of failure. The png_malloc() function will normally call png_error() if it receives a NULL from the system memory allocator or from your replacement malloc_fn(). Input/Output in libpng is done through png_read() and png_write(), which currently just call fread() and fwrite(). The FILE * is stored in png_struct and is initialized via png_init_io(). If you wish to change the method of I/O, the library supplies callbacks that you can set through the function png_set_read_fn() and png_set_write_fn() at run time, instead of calling the png_init_io() function. These functions also provide a void pointer that can be retrieved via the function png_get_io_ptr(). For example: png_set_read_fn(png_structp read_ptr, voidp read_io_ptr, png_rw_ptr read_data_fn) png_set_write_fn(png_structp write_ptr, voidp write_io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn); voidp read_io_ptr = png_get_io_ptr(read_ptr); voidp write_io_ptr = png_get_io_ptr(write_ptr); The replacement I/O functions must have prototypes as follows: void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length); void user_write_data(png_structp png_ptr, png_bytep data, png_size_t length); void user_flush_data(png_structp png_ptr); Supplying NULL for the read, write, or flush functions sets them back to using the default C stream functions. It is an error to read from a write stream, and vice versa. Error handling in libpng is done through png_error() and png_warning(). Errors handled through png_error() are fatal, meaning that png_error() should never return to its caller. Currently, this is handled via setjmp() and longjmp() (unless you have compiled libpng with PNG_SETJMP_NOT_SUPPORTED, in which case it is handled via PNG_ABORT()), but you could change this to do things like exit() if you should wish. On non-fatal errors, png_warning() is called to print a warning message, and then control returns to the calling code. By default png_error() and png_warning() print a message on stderr via fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined (because you don't want the messages) or PNG_NO_STDIO defined (because fprintf() isn't available). If you wish to change the behavior of the error functions, you will need to set up your own message callbacks. These functions are normally supplied at the time that the png_struct is created. It is also possible to redirect errors and warnings to your own replacement functions after png_create_*_struct() has been called by calling: png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn); png_voidp error_ptr = png_get_error_ptr(png_ptr); If NULL is supplied for either error_fn or warning_fn, then the libpng default function will be used, calling fprintf() and/or longjmp() if a problem is encountered. The replacement error functions should have parameters as follows: void user_error_fn(png_structp png_ptr, png_const_charp error_msg); void user_warning_fn(png_structp png_ptr, png_const_charp warning_msg); The motivation behind using setjmp() and longjmp() is the C++ throw and catch exception handling methods. This makes the code much easier to write, as there is no need to check every return code of every function call. However, there are some uncertainties about the status of local variables after a longjmp, so the user may want to be careful about doing anything after setjmp returns non-zero besides returning itself. Consult your compiler documentation for more details. For an alternative approach, you may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net). .SS Custom chunks If you need to read or write custom chunks, you may need to get deeper into the libpng code. The library now has mechanisms for storing and writing chunks of unknown type; you can even declare callbacks for custom chunks. Hoewver, this may not be good enough if the library code itself needs to know about interactions between your chunk and existing `intrinsic' chunks. If you need to write a new intrinsic chunk, first read the PNG specification. Acquire a first level of understanding of how it works. Pay particular attention to the sections that describe chunk names, and look at how other chunks were designed, so you can do things similarly. Second, check out the sections of libpng that read and write chunks. Try to find a chunk that is similar to yours and use it as a template. More details can be found in the comments inside the code. It is best to handle unknown chunks in a generic method, via callback functions, instead of by modifying libpng functions. If you wish to write your own transformation for the data, look through the part of the code that does the transformations, and check out some of the simpler ones to get an idea of how they work. Try to find a similar transformation to the one you want to add and copy off of it. More details can be found in the comments inside the code itself. .SS Configuring for 16 bit platforms You will want to look into zconf.h to tell zlib (and thus libpng) that it cannot allocate more then 64K at a time. Even if you can, the memory won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K. .SS Configuring for DOS For DOS users who only have access to the lower 640K, you will have to limit zlib's memory usage via a png_set_compression_mem_level() call. See zlib.h or zconf.h in the zlib library for more information. .SS Configuring for Medium Model Libpng's support for medium model has been tested on most of the popular compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets defined, and FAR gets defined to far in pngconf.h, and you should be all set. Everything in the library (except for zlib's structure) is expecting far data. You must use the typedefs with the p or pp on the end for pointers (or at least look at them and be careful). Make note that the rows of data are defined as png_bytepp, which is an unsigned char far * far *. .SS Configuring for gui/windowing platforms: You will need to write new error and warning functions that use the GUI interface, as described previously, and set them to be the error and warning functions at the time that png_create_*_struct() is called, in order to have them available during the structure initialization. They can be changed later via png_set_error_fn(). On some compilers, you may also have to change the memory allocators (png_malloc, etc.). .SS Configuring for compiler xxx: All includes for libpng are in pngconf.h. If you need to add/change/delete an include, this is the place to do it. The includes that are not needed outside libpng are protected by the PNG_INTERNAL definition, which is only defined for those routines inside libpng itself. The files in libpng proper only include png.h, which includes pngconf.h. .SS Configuring zlib: There are special functions to configure the compression. Perhaps the most useful one changes the compression level, which currently uses input compression values in the range 0 - 9. The library normally uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests have shown that for a large majority of images, compression values in the range 3-6 compress nearly as well as higher levels, and do so much faster. For online applications it may be desirable to have maximum speed (Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also specify no compression (Z_NO_COMPRESSION = 0), but this would create files larger than just storing the raw bitmap. You can specify the compression level by calling: png_set_compression_level(png_ptr, level); Another useful one is to reduce the memory level used by the library. The memory level defaults to 8, but it can be lowered if you are short on memory (running DOS, for example, where you only have 640K). Note that the memory level does have an effect on compression; among other things, lower levels will result in sections of incompressible data being emitted in smaller stored blocks, with a correspondingly larger relative overhead of up to 15% in the worst case. png_set_compression_mem_level(png_ptr, level); The other functions are for configuring zlib. They are not recommended for normal use and may result in writing an invalid PNG file. See zlib.h for more information on what these mean. png_set_compression_strategy(png_ptr, strategy); png_set_compression_window_bits(png_ptr, window_bits); png_set_compression_method(png_ptr, method); png_set_compression_buffer_size(png_ptr, size); .SS Controlling row filtering If you want to control whether libpng uses filtering or not, which filters are used, and how it goes about picking row filters, you can call one of these functions. The selection and configuration of row filters can have a significant impact on the size and encoding speed and a somewhat lesser impact on the decoding speed of an image. Filtering is enabled by default for RGB and grayscale images (with and without alpha), but not for paletted images nor for any images with bit depths less than 8 bits/pixel. The 'method' parameter sets the main filtering method, which is currently only '0' in the PNG 1.2 specification. The 'filters' parameter sets which filter(s), if any, should be used for each scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS to turn filtering on and off, respectively. Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB, PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise ORed together with '|' to specify one or more filters to use. These filters are described in more detail in the PNG specification. If you intend to change the filter type during the course of writing the image, you should start with flags set for all of the filters you intend to use so that libpng can initialize its internal structures appropriately for all of the filter types. (Note that this means the first row must always be adaptively filtered, because libpng currently does not allocate the filter buffers until png_write_row() is called for the first time.) filters = PNG_FILTER_NONE | PNG_FILTER_SUB PNG_FILTER_UP | PNG_FILTER_AVE | PNG_FILTER_PAETH | PNG_ALL_FILTERS; png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, filters); The second parameter can also be PNG_INTRAPIXEL_DIFFERENCING if you are writing a PNG to be embedded in a MNG datastream. This parameter must be the same as the value of filter_method used in png_set_IHDR(). It is also possible to influence how libpng chooses from among the available filters. This is done in one or both of two ways - by telling it how important it is to keep the same filter for successive rows, and by telling it the relative computational costs of the filters. double weights[3] = {1.5, 1.3, 1.1}, costs[PNG_FILTER_VALUE_LAST] = {1.0, 1.3, 1.3, 1.5, 1.7}; png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_WEIGHTED, 3, weights, costs); The weights are multiplying factors that indicate to libpng that the row filter should be the same for successive rows unless another row filter is that many times better than the previous filter. In the above example, if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a "sum of absolute differences" 1.5 x 1.3 times higher than other filters and still be chosen, while the NONE filter could have a sum 1.1 times higher than other filters and still be chosen. Unspecified weights are taken to be 1.0, and the specified weights should probably be declining like those above in order to emphasize recent filters over older filters. The filter costs specify for each filter type a relative decoding cost to be considered when selecting row filters. This means that filters with higher costs are less likely to be chosen over filters with lower costs, unless their "sum of absolute differences" is that much smaller. The costs do not necessarily reflect the exact computational speeds of the various filters, since this would unduly influence the final image size. Note that the numbers above were invented purely for this example and are given only to help explain the function usage. Little testing has been done to find optimum values for either the costs or the weights. .SS Removing unwanted object code There are a bunch of #define's in pngconf.h that control what parts of libpng are compiled. All the defines end in _SUPPORTED. If you are never going to use a capability, you can change the #define to #undef before recompiling libpng and save yourself code and data space, or you can turn off individual capabilities with defines that begin with PNG_NO_. You can also turn all of the transforms and ancillary chunk capabilities off en masse with compiler directives that define PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS, or all four, along with directives to turn on any of the capabilities that you do want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the extra transformations but still leave the library fully capable of reading and writing PNG files with all known public chunks Use of the PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library that is incapable of reading or writing ancillary chunks. If you are not using the progressive reading capability, you can turn that off with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING capability, which you'll still have). All the reading and writing specific code are in separate files, so the linker should only grab the files it needs. However, if you want to make sure, or if you are building a stand alone library, all the reading files start with pngr and all the writing files start with pngw. The files that don't match either (like png.c, pngtrans.c, etc.) are used for both reading and writing, and always need to be included. The progressive reader is in pngpread.c If you are creating or distributing a dynamically linked library (a .so or DLL file), you should not remove or disable any parts of the library, as this will cause applications linked with different versions of the library to fail if they call functions not available in your library. The size of the library itself should not be an issue, because only those sections that are actually used will be loaded into memory. .SS Requesting debug printout The macro definition PNG_DEBUG can be used to request debugging printout. Set it to an integer value in the range 0 to 3. Higher numbers result in increasing amounts of debugging information. The information is printed to the "stderr" file, unless another file name is specified in the PNG_DEBUG_FILE macro definition. When PNG_DEBUG > 0, the following functions (macros) become available: png_debug(level, message) png_debug1(level, message, p1) png_debug2(level, message, p1, p2) in which "level" is compared to PNG_DEBUG to decide whether to print the message, "message" is the formatted string to be printed, and p1 and p2 are parameters that are to be embedded in the string according to printf-style formatting directives. For example, png_debug1(2, "foo=%d\n", foo); is expanded to if(PNG_DEBUG > 2) fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo); When PNG_DEBUG is defined but is zero, the macros aren't defined, but you can still use PNG_DEBUG to control your own debugging: #ifdef PNG_DEBUG fprintf(stderr, ... #endif When PNG_DEBUG = 1, the macros are defined, but only png_debug statements having level = 0 will be printed. There aren't any such statements in this version of libpng, but if you insert some they will be printed. .SH VI. Runtime optimization A new feature in libpng 1.2.0 is the ability to dynamically switch between standard and optimized versions of some routines. Currently these are limited to three computationally intensive tasks when reading PNG files: decoding row filters, expanding interlacing, and combining interlaced or transparent row data with previous row data. Currently the optimized versions are available only for x86 (Intel, AMD, etc.) platforms with MMX support, though this may change in future versions. (For example, the non-MMX assembler optimizations for zlib might become similarly runtime-selectable in future releases, in which case libpng could be extended to support them. Alternatively, the compile-time choice of floating-point versus integer routines for gamma correction might become runtime-selectable.) Because such optimizations tend to be very platform- and compiler-dependent, both in how they are written and in how they perform, the new runtime code in libpng has been written to allow programs to query, enable, and disable either specific optimizations or all such optimizations. For example, to enable all possible optimizations (bearing in mind that some "optimizations" may actually run more slowly in rare cases): #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) png_uint_32 mask, flags; flags = png_get_asm_flags(png_ptr); mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE); png_set_asm_flags(png_ptr, flags | mask); #endif To enable only optimizations relevant to reading PNGs, use PNG_SELECT_READ by itself when calling png_get_asm_flagmask(); similarly for optimizing only writing. To disable all optimizations: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) flags = png_get_asm_flags(png_ptr); mask = png_get_asm_flagmask(PNG_SELECT_READ | PNG_SELECT_WRITE); png_set_asm_flags(png_ptr, flags & ~mask); #endif To enable or disable only MMX-related features, use png_get_mmx_flagmask() in place of png_get_asm_flagmask(). The mmx version takes one additional parameter: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) int selection = PNG_SELECT_READ | PNG_SELECT_WRITE; int compilerID; mask = png_get_mmx_flagmask(selection, &compilerID); #endif On return, compilerID will indicate which version of the MMX assembler optimizations was compiled. Currently two flavors exist: Microsoft Visual C++ (compilerID == 1) and GNU C (a.k.a. gcc/gas, compilerID == 2). On non-x86 platforms or on systems compiled without MMX optimizations, a value of -1 is used. Note that both png_get_asm_flagmask() and png_get_mmx_flagmask() return all valid, settable optimization bits for the version of the library that's currently in use. In the case of shared (dynamically linked) libraries, this may include optimizations that did not exist at the time the code was written and compiled. It is also possible, of course, to enable only known, specific optimizations; for example: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) flags = PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ | PNG_ASM_FLAG_MMX_READ_INTERLACE \ | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; png_set_asm_flags(png_ptr, flags); #endif This method would enable only the MMX read-optimizations available at the time of libpng 1.2.0's release, regardless of whether a later version of the DLL were actually being used. (Also note that these functions did not exist in versions older than 1.2.0, so any attempt to run a dynamically linked app on such an older version would fail.) To determine whether the processor supports MMX instructions at all, use the png_mmx_support() function: #if defined(PNG_LIBPNG_VER) && (PNG_LIBPNG_VER >= 10200) mmxsupport = png_mmx_support(); #endif It returns -1 if MMX support is not compiled into libpng, 0 if MMX code is compiled but MMX is not supported by the processor, or 1 if MMX support is fully available. Note that png_mmx_support(), png_get_mmx_flagmask(), and png_get_asm_flagmask() all may be called without allocating and ini- tializing any PNG structures (for example, as part of a usage screen or "about" box). The following code can be used to prevent an application from using the thread_unsafe features, even if libpng was built with PNG_THREAD_UNSAFE_OK defined: #if defined(PNG_USE_PNGGCCRD) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) \ && defined(PNG_THREAD_UNSAFE_OK) /* Disable thread-unsafe features of pnggccrd */ if (png_access_version() >= 10200) { png_uint_32 mmx_disable_mask = 0; png_uint_32 asm_flags; mmx_disable_mask |= ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ); asm_flags = png_get_asm_flags(png_ptr); png_set_asm_flags(png_ptr, asm_flags & ~mmx_disable_mask); } #endif For more extensive examples of runtime querying, enabling and disabling of optimized features, see contrib/gregbook/readpng2.c in the libpng source-code distribution. .SH VII. MNG support The MNG specification (available at http://www.libpng.org/pub/mng) allows certain extensions to PNG for PNG images that are embedded in MNG datastreams. Libpng can support some of these extensions. To enable them, use the png_permit_mng_features() function: feature_set = png_permit_mng_features(png_ptr, mask) mask is a png_uint_32 containing the logical OR of the features you want to enable. These include PNG_FLAG_MNG_EMPTY_PLTE PNG_FLAG_MNG_FILTER_64 PNG_ALL_MNG_FEATURES feature_set is a png_uint_32 that is the logical AND of your mask with the set of MNG features that is supported by the version of libpng that you are using. It is an error to use this function when reading or writing a standalone PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped in a MNG datastream. As a minimum, it must have the MNG 8-byte signature and the MHDR and MEND chunks. Libpng does not provide support for these or any other MNG chunks; your application must provide its own support for them. You may wish to consider using libmng (available at http://www.libmng.com) instead. .SH VIII. Changes to Libpng from version 0.88 It should be noted that versions of libpng later than 0.96 are not distributed by the original libpng author, Guy Schalnat, nor by Andreas Dilger, who had taken over from Guy during 1996 and 1997, and distributed versions 0.89 through 0.96, but rather by another member of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are still alive and well, but they have moved on to other things. The old libpng functions png_read_init(), png_write_init(), png_info_init(), png_read_destroy(), and png_write_destroy() have been moved to PNG_INTERNAL in version 0.95 to discourage their use. These functions will be removed from libpng version 2.0.0. The preferred method of creating and initializing the libpng structures is via the png_create_read_struct(), png_create_write_struct(), and png_create_info_struct() because they isolate the size of the structures from the application, allow version error checking, and also allow the use of custom error handling routines during the initialization, which the old functions do not. The functions png_read_destroy() and png_write_destroy() do not actually free the memory that libpng allocated for these structs, but just reset the data structures, so they can be used instead of png_destroy_read_struct() and png_destroy_write_struct() if you feel there is too much system overhead allocating and freeing the png_struct for each image read. Setting the error callbacks via png_set_message_fn() before png_read_init() as was suggested in libpng-0.88 is no longer supported because this caused applications that do not use custom error functions to fail if the png_ptr was not initialized to zero. It is still possible to set the error callbacks AFTER png_read_init(), or to change them with png_set_error_fn(), which is essentially the same function, but with a new name to force compilation errors with applications that try to use the old method. Starting with version 1.0.7, you can find out which version of the library you are using at run-time: png_uint_32 libpng_vn = png_access_version_number(); The number libpng_vn is constructed from the major version, minor version with leading zero, and release number with leading zero, (e.g., libpng_vn for version 1.0.7 is 10007). You can also check which version of png.h you used when compiling your application: png_uint_32 application_vn = PNG_LIBPNG_VER; .SH IX. Y2K Compliance in libpng September 12, 2004 Since the PNG Development group is an ad-hoc body, we can't make an official declaration. This is your unofficial assurance that libpng from version 0.71 and upward through 1.2.7 are Y2K compliant. It is my belief that earlier versions were also Y2K compliant. Libpng only has three year fields. One is a 2-byte unsigned integer that will hold years up to 65535. The other two hold the date in text format, and will hold years up to 9999. The integer is "png_uint_16 year" in png_time_struct. The strings are "png_charp time_buffer" in png_struct and "near_time_buffer", which is a local character string in png.c. There are seven time-related functions: png_convert_to_rfc_1123() in png.c (formerly png_convert_to_rfc_1152() in error) png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c png_convert_from_time_t() in pngwrite.c png_get_tIME() in pngget.c png_handle_tIME() in pngrutil.c, called in pngread.c png_set_tIME() in pngset.c png_write_tIME() in pngwutil.c, called in pngwrite.c All appear to handle dates properly in a Y2K environment. The png_convert_from_time_t() function calls gmtime() to convert from system clock time, which returns (year - 1900), which we properly convert to the full 4-digit year. There is a possibility that applications using libpng are not passing 4-digit years into the png_convert_to_rfc_1123() function, or that they are incorrectly passing only a 2-digit year instead of "year - 1900" into the png_convert_from_struct_tm() function, but this is not under our control. The libpng documentation has always stated that it works with 4-digit years, and the APIs have been documented as such. The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned integer to hold the year, and can hold years as large as 65535. zlib, upon which libpng depends, is also Y2K compliant. It contains no date-related code. Glenn Randers-Pehrson libpng maintainer PNG Development Group .SH NOTE Note about libpng version numbers: Due to various miscommunications, unforeseen code incompatibilities and occasional factors outside the authors' control, version numbering on the library has not always been consistent and straightforward. The following table summarizes matters since version 0.89c, which was the first widely used release: source png.h png.h shared-lib version string int version ------- ------ ----- ---------- 0.89c ("beta 3") 0.89 89 1.0.89 0.90 ("beta 4") 0.90 90 0.90 0.95 ("beta 5") 0.95 95 0.95 0.96 ("beta 6") 0.96 96 0.96 0.97b ("beta 7") 1.00.97 97 1.0.1 0.97c 0.97 97 2.0.97 0.98 0.98 98 2.0.98 0.99 0.99 98 2.0.99 0.99a-m 0.99 99 2.0.99 1.00 1.00 100 2.1.0 1.0.0 1.0.0 100 2.1.0 1.0.0 (from here on, the 100 2.1.0 1.0.1 png.h string is 10001 2.1.0 1.0.1a-e identical to the 10002 from here on, the 1.0.2 source version) 10002 shared library is 2.V 1.0.2a-b 10003 where V is the source 1.0.1 10001 code version except as 1.0.1a-e 10002 2.1.0.1a-e noted. 1.0.2 10002 2.1.0.2 1.0.2a-b 10003 2.1.0.2a-b 1.0.3 10003 2.1.0.3 1.0.3a-d 10004 2.1.0.3a-d 1.0.4 10004 2.1.0.4 1.0.4a-f 10005 2.1.0.4a-f 1.0.5 (+ 2 patches) 10005 2.1.0.5 1.0.5a-d 10006 2.1.0.5a-d 1.0.5e-r 10100 2.1.0.5e-r 1.0.5s-v 10006 2.1.0.5s-v 1.0.6 (+ 3 patches) 10006 2.1.0.6 1.0.6d-g 10007 2.1.0.6d-g 1.0.6h 10007 10.6h 1.0.6i 10007 10.6i 1.0.6j 10007 2.1.0.6j 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 1.0.7 1 10007 2.1.0.7 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 1.0.8rc1 1 10008 2.1.0.8rc1 1.0.8 1 10008 2.1.0.8 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 1.0.9rc1 1 10009 2.1.0.9rc1 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 1.0.9rc2 1 10009 2.1.0.9rc2 1.0.9 1 10009 2.1.0.9 1.0.10beta1 1 10010 2.1.0.10beta1 1.0.10rc1 1 10010 2.1.0.10rc1 1.0.10 1 10010 2.1.0.10 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 1.0.11rc1 1 10011 2.1.0.11rc1 1.0.11 1 10011 2.1.0.11 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 1.0.12rc1 2 10012 2.1.0.12rc1 1.0.12 2 10012 2.1.0.12 1.1.0a-f - 10100 2.1.1.0a-f abandoned 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 1.2.0rc1 3 10200 3.1.2.0rc1 1.2.0 3 10200 3.1.2.0 1.2.1beta-4 3 10201 3.1.2.1beta1-4 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 1.2.1 3 10201 3.1.2.1 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 1.0.13 10 10013 10.so.0.1.0.13 1.2.2 12 10202 12.so.0.1.2.2 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 1.2.3 12 10203 12.so.0.1.2.3 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 1.0.14 10 10014 10.so.0.1.0.14 1.2.4 13 10204 12.so.0.1.2.4 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 1.0.15rc1 10 10015 10.so.0.1.0.15rc1 1.0.15 10 10015 10.so.0.1.0.15 1.2.5 13 10205 12.so.0.1.2.5 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 1.2.6rc1-5 13 10206 12.so.0.1.2.6rc1-5 1.0.16 10 10016 10.so.0.1.0.16 1.2.6 13 10206 12.so.0.1.2.6 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 1.0.17 10 10017 12.so.0.1.0.17 1.2.7 13 10207 12.so.0.1.2.7 Henceforth the source version will match the shared-library minor and patch numbers; the shared-library major version number will be used for changes in backward compatibility, as it is intended. The PNG_PNGLIB_VER macro, which is not used within libpng but is available for applications, is an unsigned integer of the form xyyzz corresponding to the source version x.y.z (leading zeros in y and z). Beta versions were given the previous public release number plus a letter, until version 1.0.6j; from then on they were given the upcoming public release number plus "betaNN" or "rcN". .SH "SEE ALSO" libpngpf(3), png(5) .LP .IR libpng : .IP http://libpng.sourceforge.net (follow the [DOWNLOAD] link) http://www.libpng.org/pub/png .LP .IR zlib : .IP (generally) at the same location as .I libpng or at .br ftp://ftp.info-zip.org/pub/infozip/zlib .LP .IR PNG specification: RFC 2083 .IP (generally) at the same location as .I libpng or at .br ftp://ds.internic.net/rfc/rfc2083.txt .br or (as a W3C Recommendation) at .br http://www.w3.org/TR/REC-png.html .LP In the case of any inconsistency between the PNG specification and this library, the specification takes precedence. .SH AUTHORS This man page: Glenn Randers-Pehrson The contributing authors would like to thank all those who helped with testing, bug fixes, and patience. This wouldn't have been possible without all of you. Thanks to Frank J. T. Wojcik for helping with the documentation. Libpng version 1.2.7 - September 12, 2004: Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc. Currently maintained by Glenn Randers-Pehrson (glennrp@users.sourceforge.net). Supported by the PNG development group .br png-implement@ccrc.wustl.edu (subscription required; write to majordomo@ccrc.wustl.edu with "subscribe png-implement" in the message). .SH COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: (This copy of the libpng notices is provided for your convenience. In case of any discrepancy between this copy and the notices in the file png.h that is included in the libpng distribution, the latter shall prevail.) If you modify libpng you may insert additional notices immediately following this sentence. libpng version 1.2.6, September 12, 2004, is Copyright (c) 2004 Glenn Randers-Pehrson, and is distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors Cosmin Truta libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.0.6 with the following individuals added to the list of Contributing Authors Simon-Pierre Cadieux Eric S. Raymond Gilles Vollant and with the following additions to the disclaimer: There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user. libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are Copyright (c) 1998, 1999 Glenn Randers-Pehrson Distributed according to the same disclaimer and license as libpng-0.96, with the following individuals added to the list of Contributing Authors: Tom Lane Glenn Randers-Pehrson Willem van Schaik libpng versions 0.89, June 1996, through 0.96, May 1997, are Copyright (c) 1996, 1997 Andreas Dilger Distributed according to the same disclaimer and license as libpng-0.88, with the following individuals added to the list of Contributing Authors: John Bowler Kevin Bracey Sam Bushell Magnus Holmgren Greg Roelofs Tom Tanner libpng versions 0.5, May 1995, through 0.88, January 1996, are Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: Andreas Dilger Dave Martindale Guy Eric Schalnat Paul Schmidt Tim Wegner The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors and Group 42, Inc. specifically permit, without fee, and encourage the use of this source code as a component to supporting the PNG file format in commercial products. If you use this source code in a product, acknowledgment is not required but would be appreciated. A "png_get_copyright" function is available, for convenient use in "about" boxes and the like: printf("%s",png_get_copyright(NULL)); Also, the PNG logo (in PNG format, of course) is supplied in the files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a certification mark of the Open Source Initiative. Glenn Randers-Pehrson glennrp@users.sourceforge.net September 12, 2004 .\" end of man page htmldoc-1.8.27/png/Makefile0100664000212600000240000000276310047553615014164 0ustar mikeuser# # "$Id: Makefile 1202 2004-05-10 01:14:53Z mike $" # # PNG library Makefile for the HTMLDOC software. # # Makefile copyright 1997-2001 by Easy Software Products, all rights reserved. # PNG library copyright 1995 Guy Eric Schalnat, Group 42, Inc. # For conditions of distribution and use, see copyright notice in png.h # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "LICENSE.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: HTMLDOC Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # include ../Makedefs # # Object files... # OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \ pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \ pngwtran.o pngmem.o pngerror.o pngpread.o # # Make all of the targets... # all: libpng.a # # Clean all of the targets and object files... # clean: $(RM) $(OBJS) $(RM) libpng.a # # libpng.a # libpng.a: $(OBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(OBJS) $(RANLIB) $@ $(OBJS): png.h pngconf.h ../Makedefs # # End of "$Id: Makefile 1202 2004-05-10 01:14:53Z mike $". # htmldoc-1.8.27/png/pngtrans.c0100664000212600000240000004714410124712606014517 0ustar mikeuser /* pngtrans.c - transforms the data in a row (used by both readers and writers) * * libpng 1.2.7 - September 12, 2004 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2004 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) */ #define PNG_INTERNAL #include "png.h" #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) /* turn on BGR-to-RGB mapping */ void PNGAPI png_set_bgr(png_structp png_ptr) { png_debug(1, "in png_set_bgr\n"); png_ptr->transformations |= PNG_BGR; } #endif #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) /* turn on 16 bit byte swapping */ void PNGAPI png_set_swap(png_structp png_ptr) { png_debug(1, "in png_set_swap\n"); if (png_ptr->bit_depth == 16) png_ptr->transformations |= PNG_SWAP_BYTES; } #endif #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) /* turn on pixel packing */ void PNGAPI png_set_packing(png_structp png_ptr) { png_debug(1, "in png_set_packing\n"); if (png_ptr->bit_depth < 8) { png_ptr->transformations |= PNG_PACK; png_ptr->usr_bit_depth = 8; } } #endif #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) /* turn on packed pixel swapping */ void PNGAPI png_set_packswap(png_structp png_ptr) { png_debug(1, "in png_set_packswap\n"); if (png_ptr->bit_depth < 8) png_ptr->transformations |= PNG_PACKSWAP; } #endif #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) void PNGAPI png_set_shift(png_structp png_ptr, png_color_8p true_bits) { png_debug(1, "in png_set_shift\n"); png_ptr->transformations |= PNG_SHIFT; png_ptr->shift = *true_bits; } #endif #if defined(PNG_READ_INTERLACING_SUPPORTED) || \ defined(PNG_WRITE_INTERLACING_SUPPORTED) int PNGAPI png_set_interlace_handling(png_structp png_ptr) { png_debug(1, "in png_set_interlace handling\n"); if (png_ptr->interlaced) { png_ptr->transformations |= PNG_INTERLACE; return (7); } return (1); } #endif #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) /* Add a filler byte on read, or remove a filler or alpha byte on write. * The filler type has changed in v0.95 to allow future 2-byte fillers * for 48-bit input data, as well as to avoid problems with some compilers * that don't like bytes as parameters. */ void PNGAPI png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc) { png_debug(1, "in png_set_filler\n"); png_ptr->transformations |= PNG_FILLER; png_ptr->filler = (png_byte)filler; if (filler_loc == PNG_FILLER_AFTER) png_ptr->flags |= PNG_FLAG_FILLER_AFTER; else png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER; /* This should probably go in the "do_read_filler" routine. * I attempted to do that in libpng-1.0.1a but that caused problems * so I restored it in libpng-1.0.2a */ if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) { png_ptr->usr_channels = 4; } /* Also I added this in libpng-1.0.2a (what happens when we expand * a less-than-8-bit grayscale to GA? */ if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8) { png_ptr->usr_channels = 2; } } #if !defined(PNG_1_0_X) /* Added to libpng-1.2.7 */ void PNGAPI png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc) { png_debug(1, "in png_set_add_alpha\n"); png_set_filler(png_ptr, filler, filler_loc); png_ptr->transformations |= PNG_ADD_ALPHA; } #endif #endif #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) void PNGAPI png_set_swap_alpha(png_structp png_ptr) { png_debug(1, "in png_set_swap_alpha\n"); png_ptr->transformations |= PNG_SWAP_ALPHA; } #endif #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) void PNGAPI png_set_invert_alpha(png_structp png_ptr) { png_debug(1, "in png_set_invert_alpha\n"); png_ptr->transformations |= PNG_INVERT_ALPHA; } #endif #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) void PNGAPI png_set_invert_mono(png_structp png_ptr) { png_debug(1, "in png_set_invert_mono\n"); png_ptr->transformations |= PNG_INVERT_MONO; } /* invert monochrome grayscale data */ void /* PRIVATE */ png_do_invert(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_invert\n"); /* This test removed from libpng version 1.0.13 and 1.2.0: * if (row_info->bit_depth == 1 && */ #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row == NULL || row_info == NULL) return; #endif if (row_info->color_type == PNG_COLOR_TYPE_GRAY) { png_bytep rp = row; png_uint_32 i; png_uint_32 istop = row_info->rowbytes; for (i = 0; i < istop; i++) { *rp = (png_byte)(~(*rp)); rp++; } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && row_info->bit_depth == 8) { png_bytep rp = row; png_uint_32 i; png_uint_32 istop = row_info->rowbytes; for (i = 0; i < istop; i+=2) { *rp = (png_byte)(~(*rp)); rp+=2; } } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && row_info->bit_depth == 16) { png_bytep rp = row; png_uint_32 i; png_uint_32 istop = row_info->rowbytes; for (i = 0; i < istop; i+=4) { *rp = (png_byte)(~(*rp)); *(rp+1) = (png_byte)(~(*(rp+1))); rp+=4; } } } #endif #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) /* swaps byte order on 16 bit depth images */ void /* PRIVATE */ png_do_swap(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_swap\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif row_info->bit_depth == 16) { png_bytep rp = row; png_uint_32 i; png_uint_32 istop= row_info->width * row_info->channels; for (i = 0; i < istop; i++, rp += 2) { png_byte t = *rp; *rp = *(rp + 1); *(rp + 1) = t; } } } #endif #if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) static png_byte onebppswaptable[256] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF }; static png_byte twobppswaptable[256] = { 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0, 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0, 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4, 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4, 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8, 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC, 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC, 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1, 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1, 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5, 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5, 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9, 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9, 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD, 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD, 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2, 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2, 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6, 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA, 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE, 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE, 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3, 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3, 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7, 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7, 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB, 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF, 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF }; static png_byte fourbppswaptable[256] = { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1, 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2, 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3, 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5, 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6, 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA, 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB, 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC, 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE, 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF }; /* swaps pixel packing order within bytes */ void /* PRIVATE */ png_do_packswap(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_packswap\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif row_info->bit_depth < 8) { png_bytep rp, end, table; end = row + row_info->rowbytes; if (row_info->bit_depth == 1) table = onebppswaptable; else if (row_info->bit_depth == 2) table = twobppswaptable; else if (row_info->bit_depth == 4) table = fourbppswaptable; else return; for (rp = row; rp < end; rp++) *rp = table[*rp]; } } #endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */ #if defined(PNG_WRITE_FILLER_SUPPORTED) || \ defined(PNG_READ_STRIP_ALPHA_SUPPORTED) /* remove filler or alpha byte(s) */ void /* PRIVATE */ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags) { png_debug(1, "in png_do_strip_filler\n"); #if defined(PNG_USELESS_TESTS_SUPPORTED) if (row != NULL && row_info != NULL) #endif { png_bytep sp=row; png_bytep dp=row; png_uint_32 row_width=row_info->width; png_uint_32 i; if (row_info->color_type == PNG_COLOR_TYPE_RGB && row_info->channels == 4) { if (row_info->bit_depth == 8) { /* This converts from RGBX or RGBA to RGB */ if (flags & PNG_FLAG_FILLER_AFTER) { dp+=3; sp+=4; for (i = 1; i < row_width; i++) { *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; sp++; } } /* This converts from XRGB or ARGB to RGB */ else { for (i = 0; i < row_width; i++) { sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; } } row_info->pixel_depth = 24; row_info->rowbytes = row_width * 3; } else /* if (row_info->bit_depth == 16) */ { if (flags & PNG_FLAG_FILLER_AFTER) { /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */ sp += 8; dp += 6; for (i = 1; i < row_width; i++) { /* This could be (although png_memcpy is probably slower): png_memcpy(dp, sp, 6); sp += 8; dp += 6; */ *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; sp += 2; } } else { /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */ for (i = 0; i < row_width; i++) { /* This could be (although png_memcpy is probably slower): png_memcpy(dp, sp, 6); sp += 8; dp += 6; */ sp+=2; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; } } row_info->pixel_depth = 48; row_info->rowbytes = row_width * 6; } row_info->channels = 3; } else if (row_info->color_type == PNG_COLOR_TYPE_GRAY && row_info->channels == 2) { if (row_info->bit_depth == 8) { /* This converts from GX or GA to G */ if (flags & PNG_FLAG_FILLER_AFTER) { for (i = 0; i < row_width; i++) { *dp++ = *sp++; sp++; } } /* This converts from XG or AG to G */ else { for (i = 0; i < row_width; i++) { sp++; *dp++ = *sp++; } } row_info->pixel_depth = 8; row_info->rowbytes = row_width; } else /* if (row_info->bit_depth == 16) */ { if (flags & PNG_FLAG_FILLER_AFTER) { /* This converts from GGXX or GGAA to GG */ sp += 4; dp += 2; for (i = 1; i < row_width; i++) { *dp++ = *sp++; *dp++ = *sp++; sp += 2; } } else { /* This converts from XXGG or AAGG to GG */ for (i = 0; i < row_width; i++) { sp += 2; *dp++ = *sp++; *dp++ = *sp++; } } row_info->pixel_depth = 16; row_info->rowbytes = row_width * 2; } row_info->channels = 1; } } } #endif #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) /* swaps red and blue bytes within a pixel */ void /* PRIVATE */ png_do_bgr(png_row_infop row_info, png_bytep row) { png_debug(1, "in png_do_bgr\n"); if ( #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif (row_info->color_type & PNG_COLOR_MASK_COLOR)) { png_uint_32 row_width = row_info->width; if (row_info->bit_depth == 8) { if (row_info->color_type == PNG_COLOR_TYPE_RGB) { png_bytep rp; png_uint_32 i; for (i = 0, rp = row; i < row_width; i++, rp += 3) { png_byte save = *rp; *rp = *(rp + 2); *(rp + 2) = save; } } else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { png_bytep rp; png_uint_32 i; for (i = 0, rp = row; i < row_width; i++, rp += 4) { png_byte save = *rp; *rp = *(rp + 2); *(rp + 2) = save; } } } else if (row_info->bit_depth == 16) { if (row_info->color_type == PNG_COLOR_TYPE_RGB) { png_bytep rp; png_uint_32 i; for (i = 0, rp = row; i < row_width; i++, rp += 6) { png_byte save = *rp; *rp = *(rp + 4); *(rp + 4) = save; save = *(rp + 1); *(rp + 1) = *(rp + 5); *(rp + 5) = save; } } else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { png_bytep rp; png_uint_32 i; for (i = 0, rp = row; i < row_width; i++, rp += 8) { png_byte save = *rp; *rp = *(rp + 4); *(rp + 4) = save; save = *(rp + 1); *(rp + 1) = *(rp + 5); *(rp + 5) = save; } } } } } #endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED) void PNGAPI png_set_user_transform_info(png_structp png_ptr, png_voidp user_transform_ptr, int user_transform_depth, int user_transform_channels) { png_debug(1, "in png_set_user_transform_info\n"); #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) png_ptr->user_transform_ptr = user_transform_ptr; png_ptr->user_transform_depth = (png_byte)user_transform_depth; png_ptr->user_transform_channels = (png_byte)user_transform_channels; #else if(user_transform_ptr || user_transform_depth || user_transform_channels) png_warning(png_ptr, "This version of libpng does not support user transform info"); #endif } #endif /* This function returns a pointer to the user_transform_ptr associated with * the user transform functions. The application should free any memory * associated with this pointer before png_write_destroy and png_read_destroy * are called. */ png_voidp PNGAPI png_get_user_transform_ptr(png_structp png_ptr) { #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) return ((png_voidp)png_ptr->user_transform_ptr); #else if(png_ptr) return (NULL); return (NULL); #endif } htmldoc-1.8.27/jpeg/0040775000212600000240000000000010464177307012663 5ustar mikeuserhtmldoc-1.8.27/jpeg/coderules.doc0100664000212600000240000001236406713354635015345 0ustar mikeuserIJG JPEG LIBRARY: CODING RULES Copyright (C) 1991-1996, Thomas G. Lane. This file is part of the Independent JPEG Group's software. For conditions of distribution and use, see the accompanying README file. Since numerous people will be contributing code and bug fixes, it's important to establish a common coding style. The goal of using similar coding styles is much more important than the details of just what that style is. In general we follow the recommendations of "Recommended C Style and Coding Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and Brader). This document is available in the IJG FTP archive (see jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl). Block comments should be laid out thusly: /* * Block comments in this style. */ We indent statements in K&R style, e.g., if (test) { then-part; } else { else-part; } with two spaces per indentation level. (This indentation convention is handled automatically by GNU Emacs and many other text editors.) Multi-word names should be written in lower case with underscores, e.g., multi_word_name (not multiWordName). Preprocessor symbols and enum constants are similar but upper case (MULTI_WORD_NAME). Names should be unique within the first fifteen characters. (On some older systems, global names must be unique within six characters. We accommodate this without cluttering the source code by using macros to substitute shorter names.) We use function prototypes everywhere; we rely on automatic source code transformation to feed prototype-less C compilers. Transformation is done by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript). ansi2knr is not very bright, so it imposes a format requirement on function declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions should be written in the following style: LOCAL(int *) function_name (int a, char *b) { code... } Note that each function definition must begin with GLOBAL(type), LOCAL(type), or METHODDEF(type). These macros expand to "static type" or just "type" as appropriate. They provide a readable indication of the routine's usage and can readily be changed for special needs. (For instance, special linkage keywords can be inserted for use in Windows DLLs.) ansi2knr does not transform method declarations (function pointers in structs). We handle these with a macro JMETHOD, defined as #ifdef HAVE_PROTOTYPES #define JMETHOD(type,methodname,arglist) type (*methodname) arglist #else #define JMETHOD(type,methodname,arglist) type (*methodname) () #endif which is used like this: struct function_pointers { JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp)); JMETHOD(void, term_entropy_encoder, (void)); }; Note the set of parentheses surrounding the parameter list. A similar solution is used for forward and external function declarations (see the EXTERN and JPP macros). If the code is to work on non-ANSI compilers, we cannot rely on a prototype declaration to coerce actual parameters into the right types. Therefore, use explicit casts on actual parameters whenever the actual parameter type is not identical to the formal parameter. Beware of implicit conversions to "int". It seems there are some non-ANSI compilers in which the sizeof() operator is defined to return int, yet size_t is defined as long. Needless to say, this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(), so that the result is guaranteed to be of type size_t. The JPEG library is intended to be used within larger programs. Furthermore, we want it to be reentrant so that it can be used by applications that process multiple images concurrently. The following rules support these requirements: 1. Avoid direct use of file I/O, "malloc", error report printouts, etc; pass these through the common routines provided. 2. Minimize global namespace pollution. Functions should be declared static wherever possible. (Note that our method-based calling conventions help this a lot: in many modules only the initialization function will ever need to be called directly, so only that function need be externally visible.) All global function names should begin with "jpeg_", and should have an abbreviated name (unique in the first six characters) substituted by macro when NEED_SHORT_EXTERNAL_NAMES is set. 3. Don't use global variables; anything that must be used in another module should be in the common data structures. 4. Don't use static variables except for read-only constant tables. Variables that should be private to a module can be placed into private structures (see the system architecture document, structure.doc). 5. Source file names should begin with "j" for files that are part of the library proper; source files that are not part of the library, such as cjpeg.c and djpeg.c, do not begin with "j". Keep source file names to eight characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep compression and decompression code in separate source files --- some applications may want only one half of the library. Note: these rules (particularly #4) are not followed religiously in the modules that are used in cjpeg/djpeg but are not part of the JPEG library proper. Those modules are not really intended to be used in other applications. htmldoc-1.8.27/jpeg/filelist.doc0100664000212600000240000002026006713354635015165 0ustar mikeuserIJG JPEG LIBRARY: FILE LIST Copyright (C) 1994-1998, Thomas G. Lane. This file is part of the Independent JPEG Group's software. For conditions of distribution and use, see the accompanying README file. Here is a road map to the files in the IJG JPEG distribution. The distribution includes the JPEG library proper, plus two application programs ("cjpeg" and "djpeg") which use the library to convert JPEG files to and from some other popular image formats. A third application "jpegtran" uses the library to do lossless conversion between different variants of JPEG. There are also two stand-alone applications, "rdjpgcom" and "wrjpgcom". THE JPEG LIBRARY ================ Include files: jpeglib.h JPEG library's exported data and function declarations. jconfig.h Configuration declarations. Note: this file is not present in the distribution; it is generated during installation. jmorecfg.h Additional configuration declarations; need not be changed for a standard installation. jerror.h Declares JPEG library's error and trace message codes. jinclude.h Central include file used by all IJG .c files to reference system include files. jpegint.h JPEG library's internal data structures. jchuff.h Private declarations for Huffman encoder modules. jdhuff.h Private declarations for Huffman decoder modules. jdct.h Private declarations for forward & reverse DCT subsystems. jmemsys.h Private declarations for memory management subsystem. jversion.h Version information. Applications using the library should include jpeglib.h (which in turn includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included if the application needs to reference individual JPEG error codes. The other include files are intended for internal use and would not normally be included by an application program. (cjpeg/djpeg/etc do use jinclude.h, since its function is to improve portability of the whole IJG distribution. Most other applications will directly include the system include files they want, and hence won't need jinclude.h.) C source code files: These files contain most of the functions intended to be called directly by an application program: jcapimin.c Application program interface: core routines for compression. jcapistd.c Application program interface: standard compression. jdapimin.c Application program interface: core routines for decompression. jdapistd.c Application program interface: standard decompression. jcomapi.c Application program interface routines common to compression and decompression. jcparam.c Compression parameter setting helper routines. jctrans.c API and library routines for transcoding compression. jdtrans.c API and library routines for transcoding decompression. Compression side of the library: jcinit.c Initialization: determines which other modules to use. jcmaster.c Master control: setup and inter-pass sequencing logic. jcmainct.c Main buffer controller (preprocessor => JPEG compressor). jcprepct.c Preprocessor buffer controller. jccoefct.c Buffer controller for DCT coefficient buffer. jccolor.c Color space conversion. jcsample.c Downsampling. jcdctmgr.c DCT manager (DCT implementation selection & control). jfdctint.c Forward DCT using slow-but-accurate integer method. jfdctfst.c Forward DCT using faster, less accurate integer method. jfdctflt.c Forward DCT using floating-point arithmetic. jchuff.c Huffman entropy coding for sequential JPEG. jcphuff.c Huffman entropy coding for progressive JPEG. jcmarker.c JPEG marker writing. jdatadst.c Data destination manager for stdio output. Decompression side of the library: jdmaster.c Master control: determines which other modules to use. jdinput.c Input controller: controls input processing modules. jdmainct.c Main buffer controller (JPEG decompressor => postprocessor). jdcoefct.c Buffer controller for DCT coefficient buffer. jdpostct.c Postprocessor buffer controller. jdmarker.c JPEG marker reading. jdhuff.c Huffman entropy decoding for sequential JPEG. jdphuff.c Huffman entropy decoding for progressive JPEG. jddctmgr.c IDCT manager (IDCT implementation selection & control). jidctint.c Inverse DCT using slow-but-accurate integer method. jidctfst.c Inverse DCT using faster, less accurate integer method. jidctflt.c Inverse DCT using floating-point arithmetic. jidctred.c Inverse DCTs with reduced-size outputs. jdsample.c Upsampling. jdcolor.c Color space conversion. jdmerge.c Merged upsampling/color conversion (faster, lower quality). jquant1.c One-pass color quantization using a fixed-spacing colormap. jquant2.c Two-pass color quantization using a custom-generated colormap. Also handles one-pass quantization to an externally given map. jdatasrc.c Data source manager for stdio input. Support files for both compression and decompression: jerror.c Standard error handling routines (application replaceable). jmemmgr.c System-independent (more or less) memory management code. jutils.c Miscellaneous utility routines. jmemmgr.c relies on a system-dependent memory management module. The IJG distribution includes the following implementations of the system-dependent module: jmemnobs.c "No backing store": assumes adequate virtual memory exists. jmemansi.c Makes temporary files with ANSI-standard routine tmpfile(). jmemname.c Makes temporary files with program-generated file names. jmemdos.c Custom implementation for MS-DOS (16-bit environment only): can use extended and expanded memory as well as temp files. jmemmac.c Custom implementation for Apple Macintosh. Exactly one of the system-dependent modules should be configured into an installed JPEG library (see install.doc for hints about which one to use). On unusual systems you may find it worthwhile to make a special system-dependent memory manager. Non-C source code files: jmemdosa.asm 80x86 assembly code support for jmemdos.c; used only in MS-DOS-specific configurations of the JPEG library. CJPEG/DJPEG/JPEGTRAN ==================== Include files: cdjpeg.h Declarations shared by cjpeg/djpeg/jpegtran modules. cderror.h Additional error and trace message codes for cjpeg et al. transupp.h Declarations for jpegtran support routines in transupp.c. C source code files: cjpeg.c Main program for cjpeg. djpeg.c Main program for djpeg. jpegtran.c Main program for jpegtran. cdjpeg.c Utility routines used by all three programs. rdcolmap.c Code to read a colormap file for djpeg's "-map" switch. rdswitch.c Code to process some of cjpeg's more complex switches. Also used by jpegtran. transupp.c Support code for jpegtran: lossless image manipulations. Image file reader modules for cjpeg: rdbmp.c BMP file input. rdgif.c GIF file input (now just a stub). rdppm.c PPM/PGM file input. rdrle.c Utah RLE file input. rdtarga.c Targa file input. Image file writer modules for djpeg: wrbmp.c BMP file output. wrgif.c GIF file output (a mere shadow of its former self). wrppm.c PPM/PGM file output. wrrle.c Utah RLE file output. wrtarga.c Targa file output. RDJPGCOM/WRJPGCOM ================= C source code files: rdjpgcom.c Stand-alone rdjpgcom application. wrjpgcom.c Stand-alone wrjpgcom application. These programs do not depend on the IJG library. They do use jconfig.h and jinclude.h, only to improve portability. ADDITIONAL FILES ================ Documentation (see README for a guide to the documentation files): README Master documentation file. *.doc Other documentation files. *.1 Documentation in Unix man page format. change.log Version-to-version change highlights. example.c Sample code for calling JPEG library. Configuration/installation files and programs (see install.doc for more info): configure Unix shell script to perform automatic configuration. ltconfig Support scripts for configure (from GNU libtool). ltmain.sh config.guess config.sub install-sh Install shell script for those Unix systems lacking one. ckconfig.c Program to generate jconfig.h on non-Unix systems. jconfig.doc Template for making jconfig.h by hand. makefile.* Sample makefiles for particular systems. jconfig.* Sample jconfig.h for particular systems. ansi2knr.c De-ANSIfier for pre-ANSI C compilers (courtesy of L. Peter Deutsch and Aladdin Enterprises). Test files (see install.doc for test procedure): test*.* Source and comparison files for confidence test. These are binary image files, NOT text files. htmldoc-1.8.27/jpeg/jdatadst.c0100664000212600000240000001177706713354635014642 0ustar mikeuser/* * jdatadst.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains compression data destination routines for the case of * emitting JPEG data to a file (or any stdio stream). While these routines * are sufficient for most applications, some will want to use a different * destination manager. * IMPORTANT: we assume that fwrite() will correctly transcribe an array of * JOCTETs into 8-bit-wide elements on external storage. If char is wider * than 8 bits on your machine, you may need to do some tweaking. */ /* this is not a core library module, so it doesn't define JPEG_INTERNALS */ #include "jinclude.h" #include "jpeglib.h" #include "jerror.h" /* Expanded data destination object for stdio output */ typedef struct { struct jpeg_destination_mgr pub; /* public fields */ FILE * outfile; /* target stream */ JOCTET * buffer; /* start of buffer */ } my_destination_mgr; typedef my_destination_mgr * my_dest_ptr; #define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ /* * Initialize destination --- called by jpeg_start_compress * before any data is actually written. */ METHODDEF(void) init_destination (j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr) cinfo->dest; /* Allocate the output buffer --- it will be released when done with image */ dest->buffer = (JOCTET *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, OUTPUT_BUF_SIZE * SIZEOF(JOCTET)); dest->pub.next_output_byte = dest->buffer; dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; } /* * Empty the output buffer --- called whenever buffer fills up. * * In typical applications, this should write the entire output buffer * (ignoring the current state of next_output_byte & free_in_buffer), * reset the pointer & count to the start of the buffer, and return TRUE * indicating that the buffer has been dumped. * * In applications that need to be able to suspend compression due to output * overrun, a FALSE return indicates that the buffer cannot be emptied now. * In this situation, the compressor will return to its caller (possibly with * an indication that it has not accepted all the supplied scanlines). The * application should resume compression after it has made more room in the * output buffer. Note that there are substantial restrictions on the use of * suspension --- see the documentation. * * When suspending, the compressor will back up to a convenient restart point * (typically the start of the current MCU). next_output_byte & free_in_buffer * indicate where the restart point will be if the current call returns FALSE. * Data beyond this point will be regenerated after resumption, so do not * write it out when emptying the buffer externally. */ METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr) cinfo->dest; if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) != (size_t) OUTPUT_BUF_SIZE) ERREXIT(cinfo, JERR_FILE_WRITE); dest->pub.next_output_byte = dest->buffer; dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; return TRUE; } /* * Terminate destination --- called by jpeg_finish_compress * after all data has been written. Usually needs to flush buffer. * * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding * application must deal with any cleanup that should happen even * for error exit. */ METHODDEF(void) term_destination (j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr) cinfo->dest; size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer; /* Write any data remaining in the buffer */ if (datacount > 0) { if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount) ERREXIT(cinfo, JERR_FILE_WRITE); } fflush(dest->outfile); /* Make sure we wrote the output file OK */ if (ferror(dest->outfile)) ERREXIT(cinfo, JERR_FILE_WRITE); } /* * Prepare for output to a stdio stream. * The caller must have already opened the stream, and is responsible * for closing it after finishing compression. */ GLOBAL(void) jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) { my_dest_ptr dest; /* The destination object is made permanent so that multiple JPEG images * can be written to the same file without re-executing jpeg_stdio_dest. * This makes it dangerous to use this manager and a different destination * manager serially with the same JPEG object, because their private object * sizes may be different. Caveat programmer. */ if (cinfo->dest == NULL) { /* first time for this JPEG object? */ cinfo->dest = (struct jpeg_destination_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_destination_mgr)); } dest = (my_dest_ptr) cinfo->dest; dest->pub.init_destination = init_destination; dest->pub.empty_output_buffer = empty_output_buffer; dest->pub.term_destination = term_destination; dest->outfile = outfile; } htmldoc-1.8.27/jpeg/jdtrans.c0100664000212600000240000001174206713354635014501 0ustar mikeuser/* * jdtrans.c * * Copyright (C) 1995-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains library routines for transcoding decompression, * that is, reading raw DCT coefficient arrays from an input JPEG file. * The routines in jdapimin.c will also be needed by a transcoder. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Forward declarations */ LOCAL(void) transdecode_master_selection JPP((j_decompress_ptr cinfo)); /* * Read the coefficient arrays from a JPEG file. * jpeg_read_header must be completed before calling this. * * The entire image is read into a set of virtual coefficient-block arrays, * one per component. The return value is a pointer to the array of * virtual-array descriptors. These can be manipulated directly via the * JPEG memory manager, or handed off to jpeg_write_coefficients(). * To release the memory occupied by the virtual arrays, call * jpeg_finish_decompress() when done with the data. * * An alternative usage is to simply obtain access to the coefficient arrays * during a buffered-image-mode decompression operation. This is allowed * after any jpeg_finish_output() call. The arrays can be accessed until * jpeg_finish_decompress() is called. (Note that any call to the library * may reposition the arrays, so don't rely on access_virt_barray() results * to stay valid across library calls.) * * Returns NULL if suspended. This case need be checked only if * a suspending data source is used. */ GLOBAL(jvirt_barray_ptr *) jpeg_read_coefficients (j_decompress_ptr cinfo) { if (cinfo->global_state == DSTATE_READY) { /* First call: initialize active modules */ transdecode_master_selection(cinfo); cinfo->global_state = DSTATE_RDCOEFS; } if (cinfo->global_state == DSTATE_RDCOEFS) { /* Absorb whole file into the coef buffer */ for (;;) { int retcode; /* Call progress monitor hook if present */ if (cinfo->progress != NULL) (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); /* Absorb some more input */ retcode = (*cinfo->inputctl->consume_input) (cinfo); if (retcode == JPEG_SUSPENDED) return NULL; if (retcode == JPEG_REACHED_EOI) break; /* Advance progress counter if appropriate */ if (cinfo->progress != NULL && (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { /* startup underestimated number of scans; ratchet up one scan */ cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; } } } /* Set state so that jpeg_finish_decompress does the right thing */ cinfo->global_state = DSTATE_STOPPING; } /* At this point we should be in state DSTATE_STOPPING if being used * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access * to the coefficients during a full buffered-image-mode decompression. */ if ((cinfo->global_state == DSTATE_STOPPING || cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) { return cinfo->coef->coef_arrays; } /* Oops, improper usage */ ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); return NULL; /* keep compiler happy */ } /* * Master selection of decompression modules for transcoding. * This substitutes for jdmaster.c's initialization of the full decompressor. */ LOCAL(void) transdecode_master_selection (j_decompress_ptr cinfo) { /* This is effectively a buffered-image operation. */ cinfo->buffered_image = TRUE; /* Entropy decoding: either Huffman or arithmetic coding. */ if (cinfo->arith_code) { ERREXIT(cinfo, JERR_ARITH_NOTIMPL); } else { if (cinfo->progressive_mode) { #ifdef D_PROGRESSIVE_SUPPORTED jinit_phuff_decoder(cinfo); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else jinit_huff_decoder(cinfo); } /* Always get a full-image coefficient buffer. */ jinit_d_coef_controller(cinfo, TRUE); /* We can now tell the memory manager to allocate virtual arrays. */ (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); /* Initialize input side of decompressor to consume first scan. */ (*cinfo->inputctl->start_input_pass) (cinfo); /* Initialize progress monitoring. */ if (cinfo->progress != NULL) { int nscans; /* Estimate number of scans to set pass_limit. */ if (cinfo->progressive_mode) { /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ nscans = 2 + 3 * cinfo->num_components; } else if (cinfo->inputctl->has_multiple_scans) { /* For a nonprogressive multiscan file, estimate 1 scan per component. */ nscans = cinfo->num_components; } else { nscans = 1; } cinfo->progress->pass_counter = 0L; cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; cinfo->progress->completed_passes = 0; cinfo->progress->total_passes = 1; } } htmldoc-1.8.27/jpeg/jchuff.c0100664000212600000240000006707606713354635014314 0ustar mikeuser/* * jchuff.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains Huffman entropy encoding routines. * * Much of the complexity here has to do with supporting output suspension. * If the data destination module demands suspension, we want to be able to * back up to the start of the current MCU. To do this, we copy state * variables into local working storage, and update them back to the * permanent JPEG objects only upon successful completion of an MCU. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jchuff.h" /* Declarations shared with jcphuff.c */ /* Expanded entropy encoder object for Huffman encoding. * * The savable_state subrecord contains fields that change within an MCU, * but must not be updated permanently until we complete the MCU. */ typedef struct { INT32 put_buffer; /* current bit-accumulation buffer */ int put_bits; /* # of bits now in it */ int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ } savable_state; /* This macro is to work around compilers with missing or broken * structure assignment. You'll need to fix this code if you have * such a compiler and you change MAX_COMPS_IN_SCAN. */ #ifndef NO_STRUCT_ASSIGN #define ASSIGN_STATE(dest,src) ((dest) = (src)) #else #if MAX_COMPS_IN_SCAN == 4 #define ASSIGN_STATE(dest,src) \ ((dest).put_buffer = (src).put_buffer, \ (dest).put_bits = (src).put_bits, \ (dest).last_dc_val[0] = (src).last_dc_val[0], \ (dest).last_dc_val[1] = (src).last_dc_val[1], \ (dest).last_dc_val[2] = (src).last_dc_val[2], \ (dest).last_dc_val[3] = (src).last_dc_val[3]) #endif #endif typedef struct { struct jpeg_entropy_encoder pub; /* public fields */ savable_state saved; /* Bit buffer & DC state at start of MCU */ /* These fields are NOT loaded into local working state. */ unsigned int restarts_to_go; /* MCUs left in this restart interval */ int next_restart_num; /* next restart number to write (0-7) */ /* Pointers to derived tables (these workspaces have image lifespan) */ c_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; c_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; #ifdef ENTROPY_OPT_SUPPORTED /* Statistics tables for optimization */ long * dc_count_ptrs[NUM_HUFF_TBLS]; long * ac_count_ptrs[NUM_HUFF_TBLS]; #endif } huff_entropy_encoder; typedef huff_entropy_encoder * huff_entropy_ptr; /* Working state while writing an MCU. * This struct contains all the fields that are needed by subroutines. */ typedef struct { JOCTET * next_output_byte; /* => next byte to write in buffer */ size_t free_in_buffer; /* # of byte spaces remaining in buffer */ savable_state cur; /* Current bit buffer & DC state */ j_compress_ptr cinfo; /* dump_buffer needs access to this */ } working_state; /* Forward declarations */ METHODDEF(boolean) encode_mcu_huff JPP((j_compress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(void) finish_pass_huff JPP((j_compress_ptr cinfo)); #ifdef ENTROPY_OPT_SUPPORTED METHODDEF(boolean) encode_mcu_gather JPP((j_compress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(void) finish_pass_gather JPP((j_compress_ptr cinfo)); #endif /* * Initialize for a Huffman-compressed scan. * If gather_statistics is TRUE, we do not output anything during the scan, * just count the Huffman symbols used and generate Huffman code tables. */ METHODDEF(void) start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int ci, dctbl, actbl; jpeg_component_info * compptr; if (gather_statistics) { #ifdef ENTROPY_OPT_SUPPORTED entropy->pub.encode_mcu = encode_mcu_gather; entropy->pub.finish_pass = finish_pass_gather; #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else { entropy->pub.encode_mcu = encode_mcu_huff; entropy->pub.finish_pass = finish_pass_huff; } for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; dctbl = compptr->dc_tbl_no; actbl = compptr->ac_tbl_no; if (gather_statistics) { #ifdef ENTROPY_OPT_SUPPORTED /* Check for invalid table indexes */ /* (make_c_derived_tbl does this in the other path) */ if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl); if (actbl < 0 || actbl >= NUM_HUFF_TBLS) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl); /* Allocate and zero the statistics tables */ /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ if (entropy->dc_count_ptrs[dctbl] == NULL) entropy->dc_count_ptrs[dctbl] = (long *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 257 * SIZEOF(long)); MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long)); if (entropy->ac_count_ptrs[actbl] == NULL) entropy->ac_count_ptrs[actbl] = (long *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 257 * SIZEOF(long)); MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long)); #endif } else { /* Compute derived values for Huffman tables */ /* We may do this more than once for a table, but it's not expensive */ jpeg_make_c_derived_tbl(cinfo, TRUE, dctbl, & entropy->dc_derived_tbls[dctbl]); jpeg_make_c_derived_tbl(cinfo, FALSE, actbl, & entropy->ac_derived_tbls[actbl]); } /* Initialize DC predictions to 0 */ entropy->saved.last_dc_val[ci] = 0; } /* Initialize bit buffer to empty */ entropy->saved.put_buffer = 0; entropy->saved.put_bits = 0; /* Initialize restart stuff */ entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num = 0; } /* * Compute the derived values for a Huffman table. * This routine also performs some validation checks on the table. * * Note this is also used by jcphuff.c. */ GLOBAL(void) jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno, c_derived_tbl ** pdtbl) { JHUFF_TBL *htbl; c_derived_tbl *dtbl; int p, i, l, lastp, si, maxsymbol; char huffsize[257]; unsigned int huffcode[257]; unsigned int code; /* Note that huffsize[] and huffcode[] are filled in code-length order, * paralleling the order of the symbols themselves in htbl->huffval[]. */ /* Find the input Huffman table */ if (tblno < 0 || tblno >= NUM_HUFF_TBLS) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); htbl = isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; if (htbl == NULL) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); /* Allocate a workspace if we haven't already done so. */ if (*pdtbl == NULL) *pdtbl = (c_derived_tbl *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(c_derived_tbl)); dtbl = *pdtbl; /* Figure C.1: make table of Huffman code length for each symbol */ p = 0; for (l = 1; l <= 16; l++) { i = (int) htbl->bits[l]; if (i < 0 || p + i > 256) /* protect against table overrun */ ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); while (i--) huffsize[p++] = (char) l; } huffsize[p] = 0; lastp = p; /* Figure C.2: generate the codes themselves */ /* We also validate that the counts represent a legal Huffman code tree. */ code = 0; si = huffsize[0]; p = 0; while (huffsize[p]) { while (((int) huffsize[p]) == si) { huffcode[p++] = code; code++; } /* code is now 1 more than the last code used for codelength si; but * it must still fit in si bits, since no code is allowed to be all ones. */ if (((INT32) code) >= (((INT32) 1) << si)) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); code <<= 1; si++; } /* Figure C.3: generate encoding tables */ /* These are code and size indexed by symbol value */ /* Set all codeless symbols to have code length 0; * this lets us detect duplicate VAL entries here, and later * allows emit_bits to detect any attempt to emit such symbols. */ MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi)); /* This is also a convenient place to check for out-of-range * and duplicated VAL entries. We allow 0..255 for AC symbols * but only 0..15 for DC. (We could constrain them further * based on data depth and mode, but this seems enough.) */ maxsymbol = isDC ? 15 : 255; for (p = 0; p < lastp; p++) { i = htbl->huffval[p]; if (i < 0 || i > maxsymbol || dtbl->ehufsi[i]) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); dtbl->ehufco[i] = huffcode[p]; dtbl->ehufsi[i] = huffsize[p]; } } /* Outputting bytes to the file */ /* Emit a byte, taking 'action' if must suspend. */ #define emit_byte(state,val,action) \ { *(state)->next_output_byte++ = (JOCTET) (val); \ if (--(state)->free_in_buffer == 0) \ if (! dump_buffer(state)) \ { action; } } LOCAL(boolean) dump_buffer (working_state * state) /* Empty the output buffer; return TRUE if successful, FALSE if must suspend */ { struct jpeg_destination_mgr * dest = state->cinfo->dest; if (! (*dest->empty_output_buffer) (state->cinfo)) return FALSE; /* After a successful buffer dump, must reset buffer pointers */ state->next_output_byte = dest->next_output_byte; state->free_in_buffer = dest->free_in_buffer; return TRUE; } /* Outputting bits to the file */ /* Only the right 24 bits of put_buffer are used; the valid bits are * left-justified in this part. At most 16 bits can be passed to emit_bits * in one call, and we never retain more than 7 bits in put_buffer * between calls, so 24 bits are sufficient. */ INLINE LOCAL(boolean) emit_bits (working_state * state, unsigned int code, int size) /* Emit some bits; return TRUE if successful, FALSE if must suspend */ { /* This routine is heavily used, so it's worth coding tightly. */ register INT32 put_buffer = (INT32) code; register int put_bits = state->cur.put_bits; /* if size is 0, caller used an invalid Huffman table entry */ if (size == 0) ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE); put_buffer &= (((INT32) 1)<cur.put_buffer; /* and merge with old buffer contents */ while (put_bits >= 8) { int c = (int) ((put_buffer >> 16) & 0xFF); emit_byte(state, c, return FALSE); if (c == 0xFF) { /* need to stuff a zero byte? */ emit_byte(state, 0, return FALSE); } put_buffer <<= 8; put_bits -= 8; } state->cur.put_buffer = put_buffer; /* update state variables */ state->cur.put_bits = put_bits; return TRUE; } LOCAL(boolean) flush_bits (working_state * state) { if (! emit_bits(state, 0x7F, 7)) /* fill any partial byte with ones */ return FALSE; state->cur.put_buffer = 0; /* and reset bit-buffer to empty */ state->cur.put_bits = 0; return TRUE; } /* Encode a single block's worth of coefficients */ LOCAL(boolean) encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, c_derived_tbl *dctbl, c_derived_tbl *actbl) { register int temp, temp2; register int nbits; register int k, r, i; /* Encode the DC coefficient difference per section F.1.2.1 */ temp = temp2 = block[0] - last_dc_val; if (temp < 0) { temp = -temp; /* temp is abs value of input */ /* For a negative input, want temp2 = bitwise complement of abs(input) */ /* This code assumes we are on a two's complement machine */ temp2--; } /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 0; while (temp) { nbits++; temp >>= 1; } /* Check for out-of-range coefficient values. * Since we're encoding a difference, the range limit is twice as much. */ if (nbits > MAX_COEF_BITS+1) ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); /* Emit the Huffman-coded symbol for the number of bits */ if (! emit_bits(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits])) return FALSE; /* Emit that number of bits of the value, if positive, */ /* or the complement of its magnitude, if negative. */ if (nbits) /* emit_bits rejects calls with size 0 */ if (! emit_bits(state, (unsigned int) temp2, nbits)) return FALSE; /* Encode the AC coefficients per section F.1.2.2 */ r = 0; /* r = run length of zeros */ for (k = 1; k < DCTSIZE2; k++) { if ((temp = block[jpeg_natural_order[k]]) == 0) { r++; } else { /* if run length > 15, must emit special run-length-16 codes (0xF0) */ while (r > 15) { if (! emit_bits(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0])) return FALSE; r -= 16; } temp2 = temp; if (temp < 0) { temp = -temp; /* temp is abs value of input */ /* This code assumes we are on a two's complement machine */ temp2--; } /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 1; /* there must be at least one 1 bit */ while ((temp >>= 1)) nbits++; /* Check for out-of-range coefficient values */ if (nbits > MAX_COEF_BITS) ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); /* Emit Huffman symbol for run length / number of bits */ i = (r << 4) + nbits; if (! emit_bits(state, actbl->ehufco[i], actbl->ehufsi[i])) return FALSE; /* Emit that number of bits of the value, if positive, */ /* or the complement of its magnitude, if negative. */ if (! emit_bits(state, (unsigned int) temp2, nbits)) return FALSE; r = 0; } } /* If the last coef(s) were zero, emit an end-of-block code */ if (r > 0) if (! emit_bits(state, actbl->ehufco[0], actbl->ehufsi[0])) return FALSE; return TRUE; } /* * Emit a restart marker & resynchronize predictions. */ LOCAL(boolean) emit_restart (working_state * state, int restart_num) { int ci; if (! flush_bits(state)) return FALSE; emit_byte(state, 0xFF, return FALSE); emit_byte(state, JPEG_RST0 + restart_num, return FALSE); /* Re-initialize DC predictions to 0 */ for (ci = 0; ci < state->cinfo->comps_in_scan; ci++) state->cur.last_dc_val[ci] = 0; /* The restart counter is not updated until we successfully write the MCU. */ return TRUE; } /* * Encode and output one MCU's worth of Huffman-compressed coefficients. */ METHODDEF(boolean) encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; working_state state; int blkn, ci; jpeg_component_info * compptr; /* Load up working state */ state.next_output_byte = cinfo->dest->next_output_byte; state.free_in_buffer = cinfo->dest->free_in_buffer; ASSIGN_STATE(state.cur, entropy->saved); state.cinfo = cinfo; /* Emit restart marker if needed */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) if (! emit_restart(&state, entropy->next_restart_num)) return FALSE; } /* Encode the MCU data blocks */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { ci = cinfo->MCU_membership[blkn]; compptr = cinfo->cur_comp_info[ci]; if (! encode_one_block(&state, MCU_data[blkn][0], state.cur.last_dc_val[ci], entropy->dc_derived_tbls[compptr->dc_tbl_no], entropy->ac_derived_tbls[compptr->ac_tbl_no])) return FALSE; /* Update last_dc_val */ state.cur.last_dc_val[ci] = MCU_data[blkn][0][0]; } /* Completed MCU, so update state */ cinfo->dest->next_output_byte = state.next_output_byte; cinfo->dest->free_in_buffer = state.free_in_buffer; ASSIGN_STATE(entropy->saved, state.cur); /* Update restart-interval state too */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) { entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num++; entropy->next_restart_num &= 7; } entropy->restarts_to_go--; } return TRUE; } /* * Finish up at the end of a Huffman-compressed scan. */ METHODDEF(void) finish_pass_huff (j_compress_ptr cinfo) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; working_state state; /* Load up working state ... flush_bits needs it */ state.next_output_byte = cinfo->dest->next_output_byte; state.free_in_buffer = cinfo->dest->free_in_buffer; ASSIGN_STATE(state.cur, entropy->saved); state.cinfo = cinfo; /* Flush out the last data */ if (! flush_bits(&state)) ERREXIT(cinfo, JERR_CANT_SUSPEND); /* Update state */ cinfo->dest->next_output_byte = state.next_output_byte; cinfo->dest->free_in_buffer = state.free_in_buffer; ASSIGN_STATE(entropy->saved, state.cur); } /* * Huffman coding optimization. * * We first scan the supplied data and count the number of uses of each symbol * that is to be Huffman-coded. (This process MUST agree with the code above.) * Then we build a Huffman coding tree for the observed counts. * Symbols which are not needed at all for the particular image are not * assigned any code, which saves space in the DHT marker as well as in * the compressed data. */ #ifdef ENTROPY_OPT_SUPPORTED /* Process a single block's worth of coefficients */ LOCAL(void) htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, long dc_counts[], long ac_counts[]) { register int temp; register int nbits; register int k, r; /* Encode the DC coefficient difference per section F.1.2.1 */ temp = block[0] - last_dc_val; if (temp < 0) temp = -temp; /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 0; while (temp) { nbits++; temp >>= 1; } /* Check for out-of-range coefficient values. * Since we're encoding a difference, the range limit is twice as much. */ if (nbits > MAX_COEF_BITS+1) ERREXIT(cinfo, JERR_BAD_DCT_COEF); /* Count the Huffman symbol for the number of bits */ dc_counts[nbits]++; /* Encode the AC coefficients per section F.1.2.2 */ r = 0; /* r = run length of zeros */ for (k = 1; k < DCTSIZE2; k++) { if ((temp = block[jpeg_natural_order[k]]) == 0) { r++; } else { /* if run length > 15, must emit special run-length-16 codes (0xF0) */ while (r > 15) { ac_counts[0xF0]++; r -= 16; } /* Find the number of bits needed for the magnitude of the coefficient */ if (temp < 0) temp = -temp; /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 1; /* there must be at least one 1 bit */ while ((temp >>= 1)) nbits++; /* Check for out-of-range coefficient values */ if (nbits > MAX_COEF_BITS) ERREXIT(cinfo, JERR_BAD_DCT_COEF); /* Count Huffman symbol for run length / number of bits */ ac_counts[(r << 4) + nbits]++; r = 0; } } /* If the last coef(s) were zero, emit an end-of-block code */ if (r > 0) ac_counts[0]++; } /* * Trial-encode one MCU's worth of Huffman-compressed coefficients. * No data is actually output, so no suspension return is possible. */ METHODDEF(boolean) encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int blkn, ci; jpeg_component_info * compptr; /* Take care of restart intervals if needed */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) { /* Re-initialize DC predictions to 0 */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) entropy->saved.last_dc_val[ci] = 0; /* Update restart state */ entropy->restarts_to_go = cinfo->restart_interval; } entropy->restarts_to_go--; } for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { ci = cinfo->MCU_membership[blkn]; compptr = cinfo->cur_comp_info[ci]; htest_one_block(cinfo, MCU_data[blkn][0], entropy->saved.last_dc_val[ci], entropy->dc_count_ptrs[compptr->dc_tbl_no], entropy->ac_count_ptrs[compptr->ac_tbl_no]); entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0]; } return TRUE; } /* * Generate the best Huffman code table for the given counts, fill htbl. * Note this is also used by jcphuff.c. * * The JPEG standard requires that no symbol be assigned a codeword of all * one bits (so that padding bits added at the end of a compressed segment * can't look like a valid code). Because of the canonical ordering of * codewords, this just means that there must be an unused slot in the * longest codeword length category. Section K.2 of the JPEG spec suggests * reserving such a slot by pretending that symbol 256 is a valid symbol * with count 1. In theory that's not optimal; giving it count zero but * including it in the symbol set anyway should give a better Huffman code. * But the theoretically better code actually seems to come out worse in * practice, because it produces more all-ones bytes (which incur stuffed * zero bytes in the final file). In any case the difference is tiny. * * The JPEG standard requires Huffman codes to be no more than 16 bits long. * If some symbols have a very small but nonzero probability, the Huffman tree * must be adjusted to meet the code length restriction. We currently use * the adjustment method suggested in JPEG section K.2. This method is *not* * optimal; it may not choose the best possible limited-length code. But * typically only very-low-frequency symbols will be given less-than-optimal * lengths, so the code is almost optimal. Experimental comparisons against * an optimal limited-length-code algorithm indicate that the difference is * microscopic --- usually less than a hundredth of a percent of total size. * So the extra complexity of an optimal algorithm doesn't seem worthwhile. */ GLOBAL(void) jpeg_gen_optimal_table (j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[]) { #define MAX_CLEN 32 /* assumed maximum initial code length */ UINT8 bits[MAX_CLEN+1]; /* bits[k] = # of symbols with code length k */ int codesize[257]; /* codesize[k] = code length of symbol k */ int others[257]; /* next symbol in current branch of tree */ int c1, c2; int p, i, j; long v; /* This algorithm is explained in section K.2 of the JPEG standard */ MEMZERO(bits, SIZEOF(bits)); MEMZERO(codesize, SIZEOF(codesize)); for (i = 0; i < 257; i++) others[i] = -1; /* init links to empty */ freq[256] = 1; /* make sure 256 has a nonzero count */ /* Including the pseudo-symbol 256 in the Huffman procedure guarantees * that no real symbol is given code-value of all ones, because 256 * will be placed last in the largest codeword category. */ /* Huffman's basic algorithm to assign optimal code lengths to symbols */ for (;;) { /* Find the smallest nonzero frequency, set c1 = its symbol */ /* In case of ties, take the larger symbol number */ c1 = -1; v = 1000000000L; for (i = 0; i <= 256; i++) { if (freq[i] && freq[i] <= v) { v = freq[i]; c1 = i; } } /* Find the next smallest nonzero frequency, set c2 = its symbol */ /* In case of ties, take the larger symbol number */ c2 = -1; v = 1000000000L; for (i = 0; i <= 256; i++) { if (freq[i] && freq[i] <= v && i != c1) { v = freq[i]; c2 = i; } } /* Done if we've merged everything into one frequency */ if (c2 < 0) break; /* Else merge the two counts/trees */ freq[c1] += freq[c2]; freq[c2] = 0; /* Increment the codesize of everything in c1's tree branch */ codesize[c1]++; while (others[c1] >= 0) { c1 = others[c1]; codesize[c1]++; } others[c1] = c2; /* chain c2 onto c1's tree branch */ /* Increment the codesize of everything in c2's tree branch */ codesize[c2]++; while (others[c2] >= 0) { c2 = others[c2]; codesize[c2]++; } } /* Now count the number of symbols of each code length */ for (i = 0; i <= 256; i++) { if (codesize[i]) { /* The JPEG standard seems to think that this can't happen, */ /* but I'm paranoid... */ if (codesize[i] > MAX_CLEN) ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW); bits[codesize[i]]++; } } /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure * Huffman procedure assigned any such lengths, we must adjust the coding. * Here is what the JPEG spec says about how this next bit works: * Since symbols are paired for the longest Huffman code, the symbols are * removed from this length category two at a time. The prefix for the pair * (which is one bit shorter) is allocated to one of the pair; then, * skipping the BITS entry for that prefix length, a code word from the next * shortest nonzero BITS entry is converted into a prefix for two code words * one bit longer. */ for (i = MAX_CLEN; i > 16; i--) { while (bits[i] > 0) { j = i - 2; /* find length of new prefix to be used */ while (bits[j] == 0) j--; bits[i] -= 2; /* remove two symbols */ bits[i-1]++; /* one goes in this length */ bits[j+1] += 2; /* two new symbols in this length */ bits[j]--; /* symbol of this length is now a prefix */ } } /* Remove the count for the pseudo-symbol 256 from the largest codelength */ while (bits[i] == 0) /* find largest codelength still in use */ i--; bits[i]--; /* Return final symbol counts (only for lengths 0..16) */ MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits)); /* Return a list of the symbols sorted by code length */ /* It's not real clear to me why we don't need to consider the codelength * changes made above, but the JPEG spec seems to think this works. */ p = 0; for (i = 1; i <= MAX_CLEN; i++) { for (j = 0; j <= 255; j++) { if (codesize[j] == i) { htbl->huffval[p] = (UINT8) j; p++; } } } /* Set sent_table FALSE so updated table will be written to JPEG file. */ htbl->sent_table = FALSE; } /* * Finish up a statistics-gathering pass and create the new Huffman tables. */ METHODDEF(void) finish_pass_gather (j_compress_ptr cinfo) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int ci, dctbl, actbl; jpeg_component_info * compptr; JHUFF_TBL **htblptr; boolean did_dc[NUM_HUFF_TBLS]; boolean did_ac[NUM_HUFF_TBLS]; /* It's important not to apply jpeg_gen_optimal_table more than once * per table, because it clobbers the input frequency counts! */ MEMZERO(did_dc, SIZEOF(did_dc)); MEMZERO(did_ac, SIZEOF(did_ac)); for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; dctbl = compptr->dc_tbl_no; actbl = compptr->ac_tbl_no; if (! did_dc[dctbl]) { htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl]; if (*htblptr == NULL) *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); jpeg_gen_optimal_table(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]); did_dc[dctbl] = TRUE; } if (! did_ac[actbl]) { htblptr = & cinfo->ac_huff_tbl_ptrs[actbl]; if (*htblptr == NULL) *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); jpeg_gen_optimal_table(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]); did_ac[actbl] = TRUE; } } } #endif /* ENTROPY_OPT_SUPPORTED */ /* * Module initialization routine for Huffman entropy encoding. */ GLOBAL(void) jinit_huff_encoder (j_compress_ptr cinfo) { huff_entropy_ptr entropy; int i; entropy = (huff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(huff_entropy_encoder)); cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; entropy->pub.start_pass = start_pass_huff; /* Mark tables unallocated */ for (i = 0; i < NUM_HUFF_TBLS; i++) { entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; #ifdef ENTROPY_OPT_SUPPORTED entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL; #endif } } htmldoc-1.8.27/jpeg/structure.doc0100664000212600000240000014527006713354635015423 0ustar mikeuserIJG JPEG LIBRARY: SYSTEM ARCHITECTURE Copyright (C) 1991-1995, Thomas G. Lane. This file is part of the Independent JPEG Group's software. For conditions of distribution and use, see the accompanying README file. This file provides an overview of the architecture of the IJG JPEG software; that is, the functions of the various modules in the system and the interfaces between modules. For more precise details about any data structure or calling convention, see the include files and comments in the source code. We assume that the reader is already somewhat familiar with the JPEG standard. The README file includes references for learning about JPEG. The file libjpeg.doc describes the library from the viewpoint of an application programmer using the library; it's best to read that file before this one. Also, the file coderules.doc describes the coding style conventions we use. In this document, JPEG-specific terminology follows the JPEG standard: A "component" means a color channel, e.g., Red or Luminance. A "sample" is a single component value (i.e., one number in the image data). A "coefficient" is a frequency coefficient (a DCT transform output number). A "block" is an 8x8 group of samples or coefficients. An "MCU" (minimum coded unit) is an interleaved set of blocks of size determined by the sampling factors, or a single block in a noninterleaved scan. We do not use the terms "pixel" and "sample" interchangeably. When we say pixel, we mean an element of the full-size image, while a sample is an element of the downsampled image. Thus the number of samples may vary across components while the number of pixels does not. (This terminology is not used rigorously throughout the code, but it is used in places where confusion would otherwise result.) *** System features *** The IJG distribution contains two parts: * A subroutine library for JPEG compression and decompression. * cjpeg/djpeg, two sample applications that use the library to transform JFIF JPEG files to and from several other image formats. cjpeg/djpeg are of no great intellectual complexity: they merely add a simple command-line user interface and I/O routines for several uncompressed image formats. This document concentrates on the library itself. We desire the library to be capable of supporting all JPEG baseline, extended sequential, and progressive DCT processes. Hierarchical processes are not supported. The library does not support the lossless (spatial) JPEG process. Lossless JPEG shares little or no code with lossy JPEG, and would normally be used without the extensive pre- and post-processing provided by this library. We feel that lossless JPEG is better handled by a separate library. Within these limits, any set of compression parameters allowed by the JPEG spec should be readable for decompression. (We can be more restrictive about what formats we can generate.) Although the system design allows for all parameter values, some uncommon settings are not yet implemented and may never be; nonintegral sampling ratios are the prime example. Furthermore, we treat 8-bit vs. 12-bit data precision as a compile-time switch, not a run-time option, because most machines can store 8-bit pixels much more compactly than 12-bit. For legal reasons, JPEG arithmetic coding is not currently supported, but extending the library to include it would be straightforward. By itself, the library handles only interchange JPEG datastreams --- in particular the widely used JFIF file format. The library can be used by surrounding code to process interchange or abbreviated JPEG datastreams that are embedded in more complex file formats. (For example, libtiff uses this library to implement JPEG compression within the TIFF file format.) The library includes a substantial amount of code that is not covered by the JPEG standard but is necessary for typical applications of JPEG. These functions preprocess the image before JPEG compression or postprocess it after decompression. They include colorspace conversion, downsampling/upsampling, and color quantization. This code can be omitted if not needed. A wide range of quality vs. speed tradeoffs are possible in JPEG processing, and even more so in decompression postprocessing. The decompression library provides multiple implementations that cover most of the useful tradeoffs, ranging from very-high-quality down to fast-preview operation. On the compression side we have generally not provided low-quality choices, since compression is normally less time-critical. It should be understood that the low-quality modes may not meet the JPEG standard's accuracy requirements; nonetheless, they are useful for viewers. *** Portability issues *** Portability is an essential requirement for the library. The key portability issues that show up at the level of system architecture are: 1. Memory usage. We want the code to be able to run on PC-class machines with limited memory. Images should therefore be processed sequentially (in strips), to avoid holding the whole image in memory at once. Where a full-image buffer is necessary, we should be able to use either virtual memory or temporary files. 2. Near/far pointer distinction. To run efficiently on 80x86 machines, the code should distinguish "small" objects (kept in near data space) from "large" ones (kept in far data space). This is an annoying restriction, but fortunately it does not impact code quality for less brain-damaged machines, and the source code clutter turns out to be minimal with sufficient use of pointer typedefs. 3. Data precision. We assume that "char" is at least 8 bits, "short" and "int" at least 16, "long" at least 32. The code will work fine with larger data sizes, although memory may be used inefficiently in some cases. However, the JPEG compressed datastream must ultimately appear on external storage as a sequence of 8-bit bytes if it is to conform to the standard. This may pose a problem on machines where char is wider than 8 bits. The library represents compressed data as an array of values of typedef JOCTET. If no data type exactly 8 bits wide is available, custom data source and data destination modules must be written to unpack and pack the chosen JOCTET datatype into 8-bit external representation. *** System overview *** The compressor and decompressor are each divided into two main sections: the JPEG compressor or decompressor proper, and the preprocessing or postprocessing functions. The interface between these two sections is the image data that the official JPEG spec regards as its input or output: this data is in the colorspace to be used for compression, and it is downsampled to the sampling factors to be used. The preprocessing and postprocessing steps are responsible for converting a normal image representation to or from this form. (Those few applications that want to deal with YCbCr downsampled data can skip the preprocessing or postprocessing step.) Looking more closely, the compressor library contains the following main elements: Preprocessing: * Color space conversion (e.g., RGB to YCbCr). * Edge expansion and downsampling. Optionally, this step can do simple smoothing --- this is often helpful for low-quality source data. JPEG proper: * MCU assembly, DCT, quantization. * Entropy coding (sequential or progressive, Huffman or arithmetic). In addition to these modules we need overall control, marker generation, and support code (memory management & error handling). There is also a module responsible for physically writing the output data --- typically this is just an interface to fwrite(), but some applications may need to do something else with the data. The decompressor library contains the following main elements: JPEG proper: * Entropy decoding (sequential or progressive, Huffman or arithmetic). * Dequantization, inverse DCT, MCU disassembly. Postprocessing: * Upsampling. Optionally, this step may be able to do more general rescaling of the image. * Color space conversion (e.g., YCbCr to RGB). This step may also provide gamma adjustment [ currently it does not ]. * Optional color quantization (e.g., reduction to 256 colors). * Optional color precision reduction (e.g., 24-bit to 15-bit color). [This feature is not currently implemented.] We also need overall control, marker parsing, and a data source module. The support code (memory management & error handling) can be shared with the compression half of the library. There may be several implementations of each of these elements, particularly in the decompressor, where a wide range of speed/quality tradeoffs is very useful. It must be understood that some of the best speedups involve merging adjacent steps in the pipeline. For example, upsampling, color space conversion, and color quantization might all be done at once when using a low-quality ordered-dither technique. The system architecture is designed to allow such merging where appropriate. Note: it is convenient to regard edge expansion (padding to block boundaries) as a preprocessing/postprocessing function, even though the JPEG spec includes it in compression/decompression. We do this because downsampling/upsampling can be simplified a little if they work on padded data: it's not necessary to have special cases at the right and bottom edges. Therefore the interface buffer is always an integral number of blocks wide and high, and we expect compression preprocessing to pad the source data properly. Padding will occur only to the next block (8-sample) boundary. In an interleaved-scan situation, additional dummy blocks may be used to fill out MCUs, but the MCU assembly and disassembly logic will create or discard these blocks internally. (This is advantageous for speed reasons, since we avoid DCTing the dummy blocks. It also permits a small reduction in file size, because the compressor can choose dummy block contents so as to minimize their size in compressed form. Finally, it makes the interface buffer specification independent of whether the file is actually interleaved or not.) Applications that wish to deal directly with the downsampled data must provide similar buffering and padding for odd-sized images. *** Poor man's object-oriented programming *** It should be clear by now that we have a lot of quasi-independent processing steps, many of which have several possible behaviors. To avoid cluttering the code with lots of switch statements, we use a simple form of object-style programming to separate out the different possibilities. For example, two different color quantization algorithms could be implemented as two separate modules that present the same external interface; at runtime, the calling code will access the proper module indirectly through an "object". We can get the limited features we need while staying within portable C. The basic tool is a function pointer. An "object" is just a struct containing one or more function pointer fields, each of which corresponds to a method name in real object-oriented languages. During initialization we fill in the function pointers with references to whichever module we have determined we need to use in this run. Then invocation of the module is done by indirecting through a function pointer; on most machines this is no more expensive than a switch statement, which would be the only other way of making the required run-time choice. The really significant benefit, of course, is keeping the source code clean and well structured. We can also arrange to have private storage that varies between different implementations of the same kind of object. We do this by making all the module-specific object structs be separately allocated entities, which will be accessed via pointers in the master compression or decompression struct. The "public" fields or methods for a given kind of object are specified by a commonly known struct. But a module's initialization code can allocate a larger struct that contains the common struct as its first member, plus additional private fields. With appropriate pointer casting, the module's internal functions can access these private fields. (For a simple example, see jdatadst.c, which implements the external interface specified by struct jpeg_destination_mgr, but adds extra fields.) (Of course this would all be a lot easier if we were using C++, but we are not yet prepared to assume that everyone has a C++ compiler.) An important benefit of this scheme is that it is easy to provide multiple versions of any method, each tuned to a particular case. While a lot of precalculation might be done to select an optimal implementation of a method, the cost per invocation is constant. For example, the upsampling step might have a "generic" method, plus one or more "hardwired" methods for the most popular sampling factors; the hardwired methods would be faster because they'd use straight-line code instead of for-loops. The cost to determine which method to use is paid only once, at startup, and the selection criteria are hidden from the callers of the method. This plan differs a little bit from usual object-oriented structures, in that only one instance of each object class will exist during execution. The reason for having the class structure is that on different runs we may create different instances (choose to execute different modules). You can think of the term "method" as denoting the common interface presented by a particular set of interchangeable functions, and "object" as denoting a group of related methods, or the total shared interface behavior of a group of modules. *** Overall control structure *** We previously mentioned the need for overall control logic in the compression and decompression libraries. In IJG implementations prior to v5, overall control was mostly provided by "pipeline control" modules, which proved to be large, unwieldy, and hard to understand. To improve the situation, the control logic has been subdivided into multiple modules. The control modules consist of: 1. Master control for module selection and initialization. This has two responsibilities: 1A. Startup initialization at the beginning of image processing. The individual processing modules to be used in this run are selected and given initialization calls. 1B. Per-pass control. This determines how many passes will be performed and calls each active processing module to configure itself appropriately at the beginning of each pass. End-of-pass processing, where necessary, is also invoked from the master control module. Method selection is partially distributed, in that a particular processing module may contain several possible implementations of a particular method, which it will select among when given its initialization call. The master control code need only be concerned with decisions that affect more than one module. 2. Data buffering control. A separate control module exists for each inter-processing-step data buffer. This module is responsible for invoking the processing steps that write or read that data buffer. Each buffer controller sees the world as follows: input data => processing step A => buffer => processing step B => output data | | | ------------------ controller ------------------ The controller knows the dataflow requirements of steps A and B: how much data they want to accept in one chunk and how much they output in one chunk. Its function is to manage its buffer and call A and B at the proper times. A data buffer control module may itself be viewed as a processing step by a higher-level control module; thus the control modules form a binary tree with elementary processing steps at the leaves of the tree. The control modules are objects. A considerable amount of flexibility can be had by replacing implementations of a control module. For example: * Merging of adjacent steps in the pipeline is done by replacing a control module and its pair of processing-step modules with a single processing- step module. (Hence the possible merges are determined by the tree of control modules.) * In some processing modes, a given interstep buffer need only be a "strip" buffer large enough to accommodate the desired data chunk sizes. In other modes, a full-image buffer is needed and several passes are required. The control module determines which kind of buffer is used and manipulates virtual array buffers as needed. One or both processing steps may be unaware of the multi-pass behavior. In theory, we might be able to make all of the data buffer controllers interchangeable and provide just one set of implementations for all. In practice, each one contains considerable special-case processing for its particular job. The buffer controller concept should be regarded as an overall system structuring principle, not as a complete description of the task performed by any one controller. *** Compression object structure *** Here is a sketch of the logical structure of the JPEG compression library: |-- Colorspace conversion |-- Preprocessing controller --| | |-- Downsampling Main controller --| | |-- Forward DCT, quantize |-- Coefficient controller --| |-- Entropy encoding This sketch also describes the flow of control (subroutine calls) during typical image data processing. Each of the components shown in the diagram is an "object" which may have several different implementations available. One or more source code files contain the actual implementation(s) of each object. The objects shown above are: * Main controller: buffer controller for the subsampled-data buffer, which holds the preprocessed input data. This controller invokes preprocessing to fill the subsampled-data buffer, and JPEG compression to empty it. There is usually no need for a full-image buffer here; a strip buffer is adequate. * Preprocessing controller: buffer controller for the downsampling input data buffer, which lies between colorspace conversion and downsampling. Note that a unified conversion/downsampling module would probably replace this controller entirely. * Colorspace conversion: converts application image data into the desired JPEG color space; also changes the data from pixel-interleaved layout to separate component planes. Processes one pixel row at a time. * Downsampling: performs reduction of chroma components as required. Optionally may perform pixel-level smoothing as well. Processes a "row group" at a time, where a row group is defined as Vmax pixel rows of each component before downsampling, and Vk sample rows afterwards (remember Vk differs across components). Some downsampling or smoothing algorithms may require context rows above and below the current row group; the preprocessing controller is responsible for supplying these rows via proper buffering. The downsampler is responsible for edge expansion at the right edge (i.e., extending each sample row to a multiple of 8 samples); but the preprocessing controller is responsible for vertical edge expansion (i.e., duplicating the bottom sample row as needed to make a multiple of 8 rows). * Coefficient controller: buffer controller for the DCT-coefficient data. This controller handles MCU assembly, including insertion of dummy DCT blocks when needed at the right or bottom edge. When performing Huffman-code optimization or emitting a multiscan JPEG file, this controller is responsible for buffering the full image. The equivalent of one fully interleaved MCU row of subsampled data is processed per call, even when the JPEG file is noninterleaved. * Forward DCT and quantization: Perform DCT, quantize, and emit coefficients. Works on one or more DCT blocks at a time. (Note: the coefficients are now emitted in normal array order, which the entropy encoder is expected to convert to zigzag order as necessary. Prior versions of the IJG code did the conversion to zigzag order within the quantization step.) * Entropy encoding: Perform Huffman or arithmetic entropy coding and emit the coded data to the data destination module. Works on one MCU per call. For progressive JPEG, the same DCT blocks are fed to the entropy coder during each pass, and the coder must emit the appropriate subset of coefficients. In addition to the above objects, the compression library includes these objects: * Master control: determines the number of passes required, controls overall and per-pass initialization of the other modules. * Marker writing: generates JPEG markers (except for RSTn, which is emitted by the entropy encoder when needed). * Data destination manager: writes the output JPEG datastream to its final destination (e.g., a file). The destination manager supplied with the library knows how to write to a stdio stream; for other behaviors, the surrounding application may provide its own destination manager. * Memory manager: allocates and releases memory, controls virtual arrays (with backing store management, where required). * Error handler: performs formatting and output of error and trace messages; determines handling of nonfatal errors. The surrounding application may override some or all of this object's methods to change error handling. * Progress monitor: supports output of "percent-done" progress reports. This object represents an optional callback to the surrounding application: if wanted, it must be supplied by the application. The error handler, destination manager, and progress monitor objects are defined as separate objects in order to simplify application-specific customization of the JPEG library. A surrounding application may override individual methods or supply its own all-new implementation of one of these objects. The object interfaces for these objects are therefore treated as part of the application interface of the library, whereas the other objects are internal to the library. The error handler and memory manager are shared by JPEG compression and decompression; the progress monitor, if used, may be shared as well. *** Decompression object structure *** Here is a sketch of the logical structure of the JPEG decompression library: |-- Entropy decoding |-- Coefficient controller --| | |-- Dequantize, Inverse DCT Main controller --| | |-- Upsampling |-- Postprocessing controller --| |-- Colorspace conversion |-- Color quantization |-- Color precision reduction As before, this diagram also represents typical control flow. The objects shown are: * Main controller: buffer controller for the subsampled-data buffer, which holds the output of JPEG decompression proper. This controller's primary task is to feed the postprocessing procedure. Some upsampling algorithms may require context rows above and below the current row group; when this is true, the main controller is responsible for managing its buffer so as to make context rows available. In the current design, the main buffer is always a strip buffer; a full-image buffer is never required. * Coefficient controller: buffer controller for the DCT-coefficient data. This controller handles MCU disassembly, including deletion of any dummy DCT blocks at the right or bottom edge. When reading a multiscan JPEG file, this controller is responsible for buffering the full image. (Buffering DCT coefficients, rather than samples, is necessary to support progressive JPEG.) The equivalent of one fully interleaved MCU row of subsampled data is processed per call, even when the source JPEG file is noninterleaved. * Entropy decoding: Read coded data from the data source module and perform Huffman or arithmetic entropy decoding. Works on one MCU per call. For progressive JPEG decoding, the coefficient controller supplies the prior coefficients of each MCU (initially all zeroes), which the entropy decoder modifies in each scan. * Dequantization and inverse DCT: like it says. Note that the coefficients buffered by the coefficient controller have NOT been dequantized; we merge dequantization and inverse DCT into a single step for speed reasons. When scaled-down output is asked for, simplified DCT algorithms may be used that emit only 1x1, 2x2, or 4x4 samples per DCT block, not the full 8x8. Works on one DCT block at a time. * Postprocessing controller: buffer controller for the color quantization input buffer, when quantization is in use. (Without quantization, this controller just calls the upsampler.) For two-pass quantization, this controller is responsible for buffering the full-image data. * Upsampling: restores chroma components to full size. (May support more general output rescaling, too. Note that if undersized DCT outputs have been emitted by the DCT module, this module must adjust so that properly sized outputs are created.) Works on one row group at a time. This module also calls the color conversion module, so its top level is effectively a buffer controller for the upsampling->color conversion buffer. However, in all but the highest-quality operating modes, upsampling and color conversion are likely to be merged into a single step. * Colorspace conversion: convert from JPEG color space to output color space, and change data layout from separate component planes to pixel-interleaved. Works on one pixel row at a time. * Color quantization: reduce the data to colormapped form, using either an externally specified colormap or an internally generated one. This module is not used for full-color output. Works on one pixel row at a time; may require two passes to generate a color map. Note that the output will always be a single component representing colormap indexes. In the current design, the output values are JSAMPLEs, so an 8-bit compilation cannot quantize to more than 256 colors. This is unlikely to be a problem in practice. * Color reduction: this module handles color precision reduction, e.g., generating 15-bit color (5 bits/primary) from JPEG's 24-bit output. Not quite clear yet how this should be handled... should we merge it with colorspace conversion??? Note that some high-speed operating modes might condense the entire postprocessing sequence to a single module (upsample, color convert, and quantize in one step). In addition to the above objects, the decompression library includes these objects: * Master control: determines the number of passes required, controls overall and per-pass initialization of the other modules. This is subdivided into input and output control: jdinput.c controls only input-side processing, while jdmaster.c handles overall initialization and output-side control. * Marker reading: decodes JPEG markers (except for RSTn). * Data source manager: supplies the input JPEG datastream. The source manager supplied with the library knows how to read from a stdio stream; for other behaviors, the surrounding application may provide its own source manager. * Memory manager: same as for compression library. * Error handler: same as for compression library. * Progress monitor: same as for compression library. As with compression, the data source manager, error handler, and progress monitor are candidates for replacement by a surrounding application. *** Decompression input and output separation *** To support efficient incremental display of progressive JPEG files, the decompressor is divided into two sections that can run independently: 1. Data input includes marker parsing, entropy decoding, and input into the coefficient controller's DCT coefficient buffer. Note that this processing is relatively cheap and fast. 2. Data output reads from the DCT coefficient buffer and performs the IDCT and all postprocessing steps. For a progressive JPEG file, the data input processing is allowed to get arbitrarily far ahead of the data output processing. (This occurs only if the application calls jpeg_consume_input(); otherwise input and output run in lockstep, since the input section is called only when the output section needs more data.) In this way the application can avoid making extra display passes when data is arriving faster than the display pass can run. Furthermore, it is possible to abort an output pass without losing anything, since the coefficient buffer is read-only as far as the output section is concerned. See libjpeg.doc for more detail. A full-image coefficient array is only created if the JPEG file has multiple scans (or if the application specifies buffered-image mode anyway). When reading a single-scan file, the coefficient controller normally creates only a one-MCU buffer, so input and output processing must run in lockstep in this case. jpeg_consume_input() is effectively a no-op in this situation. The main impact of dividing the decompressor in this fashion is that we must be very careful with shared variables in the cinfo data structure. Each variable that can change during the course of decompression must be classified as belonging to data input or data output, and each section must look only at its own variables. For example, the data output section may not depend on any of the variables that describe the current scan in the JPEG file, because these may change as the data input section advances into a new scan. The progress monitor is (somewhat arbitrarily) defined to treat input of the file as one pass when buffered-image mode is not used, and to ignore data input work completely when buffered-image mode is used. Note that the library has no reliable way to predict the number of passes when dealing with a progressive JPEG file, nor can it predict the number of output passes in buffered-image mode. So the work estimate is inherently bogus anyway. No comparable division is currently made in the compression library, because there isn't any real need for it. *** Data formats *** Arrays of pixel sample values use the following data structure: typedef something JSAMPLE; a pixel component value, 0..MAXJSAMPLE typedef JSAMPLE *JSAMPROW; ptr to a row of samples typedef JSAMPROW *JSAMPARRAY; ptr to a list of rows typedef JSAMPARRAY *JSAMPIMAGE; ptr to a list of color-component arrays The basic element type JSAMPLE will typically be one of unsigned char, (signed) char, or short. Short will be used if samples wider than 8 bits are to be supported (this is a compile-time option). Otherwise, unsigned char is used if possible. If the compiler only supports signed chars, then it is necessary to mask off the value when reading. Thus, all reads of JSAMPLE values must be coded as "GETJSAMPLE(value)", where the macro will be defined as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere. With these conventions, JSAMPLE values can be assumed to be >= 0. This helps simplify correct rounding during downsampling, etc. The JPEG standard's specification that sample values run from -128..127 is accommodated by subtracting 128 just as the sample value is copied into the source array for the DCT step (this will be an array of signed ints). Similarly, during decompression the output of the IDCT step will be immediately shifted back to 0..255. (NB: different values are required when 12-bit samples are in use. The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be defined as 255 and 128 respectively in an 8-bit implementation, and as 4095 and 2048 in a 12-bit implementation.) We use a pointer per row, rather than a two-dimensional JSAMPLE array. This choice costs only a small amount of memory and has several benefits: * Code using the data structure doesn't need to know the allocated width of the rows. This simplifies edge expansion/compression, since we can work in an array that's wider than the logical picture width. * Indexing doesn't require multiplication; this is a performance win on many machines. * Arrays with more than 64K total elements can be supported even on machines where malloc() cannot allocate chunks larger than 64K. * The rows forming a component array may be allocated at different times without extra copying. This trick allows some speedups in smoothing steps that need access to the previous and next rows. Note that each color component is stored in a separate array; we don't use the traditional layout in which the components of a pixel are stored together. This simplifies coding of modules that work on each component independently, because they don't need to know how many components there are. Furthermore, we can read or write each component to a temporary file independently, which is helpful when dealing with noninterleaved JPEG files. In general, a specific sample value is accessed by code such as GETJSAMPLE(image[colorcomponent][row][col]) where col is measured from the image left edge, but row is measured from the first sample row currently in memory. Either of the first two indexings can be precomputed by copying the relevant pointer. Since most image-processing applications prefer to work on images in which the components of a pixel are stored together, the data passed to or from the surrounding application uses the traditional convention: a single pixel is represented by N consecutive JSAMPLE values, and an image row is an array of (# of color components)*(image width) JSAMPLEs. One or more rows of data can be represented by a pointer of type JSAMPARRAY in this scheme. This scheme is converted to component-wise storage inside the JPEG library. (Applications that want to skip JPEG preprocessing or postprocessing will have to contend with component-wise storage.) Arrays of DCT-coefficient values use the following data structure: typedef short JCOEF; a 16-bit signed integer typedef JCOEF JBLOCK[DCTSIZE2]; an 8x8 block of coefficients typedef JBLOCK *JBLOCKROW; ptr to one horizontal row of 8x8 blocks typedef JBLOCKROW *JBLOCKARRAY; ptr to a list of such rows typedef JBLOCKARRAY *JBLOCKIMAGE; ptr to a list of color component arrays The underlying type is at least a 16-bit signed integer; while "short" is big enough on all machines of interest, on some machines it is preferable to use "int" for speed reasons, despite the storage cost. Coefficients are grouped into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than "8" and "64"). The contents of a coefficient block may be in either "natural" or zigzagged order, and may be true values or divided by the quantization coefficients, depending on where the block is in the processing pipeline. In the current library, coefficient blocks are kept in natural order everywhere; the entropy codecs zigzag or dezigzag the data as it is written or read. The blocks contain quantized coefficients everywhere outside the DCT/IDCT subsystems. (This latter decision may need to be revisited to support variable quantization a la JPEG Part 3.) Notice that the allocation unit is now a row of 8x8 blocks, corresponding to eight rows of samples. Otherwise the structure is much the same as for samples, and for the same reasons. On machines where malloc() can't handle a request bigger than 64Kb, this data structure limits us to rows of less than 512 JBLOCKs, or a picture width of 4000+ pixels. This seems an acceptable restriction. On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW) must be declared as "far" pointers, but the upper levels can be "near" (implying that the pointer lists are allocated in the DS segment). We use a #define symbol FAR, which expands to the "far" keyword when compiling on 80x86 machines and to nothing elsewhere. *** Suspendable processing *** In some applications it is desirable to use the JPEG library as an incremental, memory-to-memory filter. In this situation the data source or destination may be a limited-size buffer, and we can't rely on being able to empty or refill the buffer at arbitrary times. Instead the application would like to have control return from the library at buffer overflow/underrun, and then resume compression or decompression at a later time. This scenario is supported for simple cases. (For anything more complex, we recommend that the application "bite the bullet" and develop real multitasking capability.) The libjpeg.doc file goes into more detail about the usage and limitations of this capability; here we address the implications for library structure. The essence of the problem is that the entropy codec (coder or decoder) must be prepared to stop at arbitrary times. In turn, the controllers that call the entropy codec must be able to stop before having produced or consumed all the data that they normally would handle in one call. That part is reasonably straightforward: we make the controller call interfaces include "progress counters" which indicate the number of data chunks successfully processed, and we require callers to test the counter rather than just assume all of the data was processed. Rather than trying to restart at an arbitrary point, the current Huffman codecs are designed to restart at the beginning of the current MCU after a suspension due to buffer overflow/underrun. At the start of each call, the codec's internal state is loaded from permanent storage (in the JPEG object structures) into local variables. On successful completion of the MCU, the permanent state is updated. (This copying is not very expensive, and may even lead to *improved* performance if the local variables can be registerized.) If a suspension occurs, the codec simply returns without updating the state, thus effectively reverting to the start of the MCU. Note that this implies leaving some data unprocessed in the source/destination buffer (ie, the compressed partial MCU). The data source/destination module interfaces are specified so as to make this possible. This also implies that the data buffer must be large enough to hold a worst-case compressed MCU; a couple thousand bytes should be enough. In a successive-approximation AC refinement scan, the progressive Huffman decoder has to be able to undo assignments of newly nonzero coefficients if it suspends before the MCU is complete, since decoding requires distinguishing previously-zero and previously-nonzero coefficients. This is a bit tedious but probably won't have much effect on performance. Other variants of Huffman decoding need not worry about this, since they will just store the same values again if forced to repeat the MCU. This approach would probably not work for an arithmetic codec, since its modifiable state is quite large and couldn't be copied cheaply. Instead it would have to suspend and resume exactly at the point of the buffer end. The JPEG marker reader is designed to cope with suspension at an arbitrary point. It does so by backing up to the start of the marker parameter segment, so the data buffer must be big enough to hold the largest marker of interest. Again, a couple KB should be adequate. (A special "skip" convention is used to bypass COM and APPn markers, so these can be larger than the buffer size without causing problems; otherwise a 64K buffer would be needed in the worst case.) The JPEG marker writer currently does *not* cope with suspension. I feel that this is not necessary; it is much easier simply to require the application to ensure there is enough buffer space before starting. (An empty 2K buffer is more than sufficient for the header markers; and ensuring there are a dozen or two bytes available before calling jpeg_finish_compress() will suffice for the trailer.) This would not work for writing multi-scan JPEG files, but we simply do not intend to support that capability with suspension. *** Memory manager services *** The JPEG library's memory manager controls allocation and deallocation of memory, and it manages large "virtual" data arrays on machines where the operating system does not provide virtual memory. Note that the same memory manager serves both compression and decompression operations. In all cases, allocated objects are tied to a particular compression or decompression master record, and they will be released when that master record is destroyed. The memory manager does not provide explicit deallocation of objects. Instead, objects are created in "pools" of free storage, and a whole pool can be freed at once. This approach helps prevent storage-leak bugs, and it speeds up operations whenever malloc/free are slow (as they often are). The pools can be regarded as lifetime identifiers for objects. Two pools/lifetimes are defined: * JPOOL_PERMANENT lasts until master record is destroyed * JPOOL_IMAGE lasts until done with image (JPEG datastream) Permanent lifetime is used for parameters and tables that should be carried across from one datastream to another; this includes all application-visible parameters. Image lifetime is used for everything else. (A third lifetime, JPOOL_PASS = one processing pass, was originally planned. However it was dropped as not being worthwhile. The actual usage patterns are such that the peak memory usage would be about the same anyway; and having per-pass storage substantially complicates the virtual memory allocation rules --- see below.) The memory manager deals with three kinds of object: 1. "Small" objects. Typically these require no more than 10K-20K total. 2. "Large" objects. These may require tens to hundreds of K depending on image size. Semantically they behave the same as small objects, but we distinguish them for two reasons: * On MS-DOS machines, large objects are referenced by FAR pointers, small objects by NEAR pointers. * Pool allocation heuristics may differ for large and small objects. Note that individual "large" objects cannot exceed the size allowed by type size_t, which may be 64K or less on some machines. 3. "Virtual" objects. These are large 2-D arrays of JSAMPLEs or JBLOCKs (typically large enough for the entire image being processed). The memory manager provides stripwise access to these arrays. On machines without virtual memory, the rest of the array may be swapped out to a temporary file. (Note: JSAMPARRAY and JBLOCKARRAY data structures are a combination of large objects for the data proper and small objects for the row pointers. For convenience and speed, the memory manager provides single routines to create these structures. Similarly, virtual arrays include a small control block and a JSAMPARRAY or JBLOCKARRAY working buffer, all created with one call.) In the present implementation, virtual arrays are only permitted to have image lifespan. (Permanent lifespan would not be reasonable, and pass lifespan is not very useful since a virtual array's raison d'etre is to store data for multiple passes through the image.) We also expect that only "small" objects will be given permanent lifespan, though this restriction is not required by the memory manager. In a non-virtual-memory machine, some performance benefit can be gained by making the in-memory buffers for virtual arrays be as large as possible. (For small images, the buffers might fit entirely in memory, so blind swapping would be very wasteful.) The memory manager will adjust the height of the buffers to fit within a prespecified maximum memory usage. In order to do this in a reasonably optimal fashion, the manager needs to allocate all of the virtual arrays at once. Therefore, there isn't a one-step allocation routine for virtual arrays; instead, there is a "request" routine that simply allocates the control block, and a "realize" routine (called just once) that determines space allocation and creates all of the actual buffers. The realize routine must allow for space occupied by non-virtual large objects. (We don't bother to factor in the space needed for small objects, on the grounds that it isn't worth the trouble.) To support all this, we establish the following protocol for doing business with the memory manager: 1. Modules must request virtual arrays (which may have only image lifespan) during the initial setup phase, i.e., in their jinit_xxx routines. 2. All "large" objects (including JSAMPARRAYs and JBLOCKARRAYs) must also be allocated during initial setup. 3. realize_virt_arrays will be called at the completion of initial setup. The above conventions ensure that sufficient information is available for it to choose a good size for virtual array buffers. Small objects of any lifespan may be allocated at any time. We expect that the total space used for small objects will be small enough to be negligible in the realize_virt_arrays computation. In a virtual-memory machine, we simply pretend that the available space is infinite, thus causing realize_virt_arrays to decide that it can allocate all the virtual arrays as full-size in-memory buffers. The overhead of the virtual-array access protocol is very small when no swapping occurs. A virtual array can be specified to be "pre-zeroed"; when this flag is set, never-yet-written sections of the array are set to zero before being made available to the caller. If this flag is not set, never-written sections of the array contain garbage. (This feature exists primarily because the equivalent logic would otherwise be needed in jdcoefct.c for progressive JPEG mode; we may as well make it available for possible other uses.) The first write pass on a virtual array is required to occur in top-to-bottom order; read passes, as well as any write passes after the first one, may access the array in any order. This restriction exists partly to simplify the virtual array control logic, and partly because some file systems may not support seeking beyond the current end-of-file in a temporary file. The main implication of this restriction is that rearrangement of rows (such as converting top-to-bottom data order to bottom-to-top) must be handled while reading data out of the virtual array, not while putting it in. *** Memory manager internal structure *** To isolate system dependencies as much as possible, we have broken the memory manager into two parts. There is a reasonably system-independent "front end" (jmemmgr.c) and a "back end" that contains only the code likely to change across systems. All of the memory management methods outlined above are implemented by the front end. The back end provides the following routines for use by the front end (none of these routines are known to the rest of the JPEG code): jpeg_mem_init, jpeg_mem_term system-dependent initialization/shutdown jpeg_get_small, jpeg_free_small interface to malloc and free library routines (or their equivalents) jpeg_get_large, jpeg_free_large interface to FAR malloc/free in MSDOS machines; else usually the same as jpeg_get_small/jpeg_free_small jpeg_mem_available estimate available memory jpeg_open_backing_store create a backing-store object read_backing_store, manipulate a backing-store object write_backing_store, close_backing_store On some systems there will be more than one type of backing-store object (specifically, in MS-DOS a backing store file might be an area of extended memory as well as a disk file). jpeg_open_backing_store is responsible for choosing how to implement a given object. The read/write/close routines are method pointers in the structure that describes a given object; this lets them be different for different object types. It may be necessary to ensure that backing store objects are explicitly released upon abnormal program termination. For example, MS-DOS won't free extended memory by itself. To support this, we will expect the main program or surrounding application to arrange to call self_destruct (typically via jpeg_destroy) upon abnormal termination. This may require a SIGINT signal handler or equivalent. We don't want to have the back end module install its own signal handler, because that would pre-empt the surrounding application's ability to control signal handling. The IJG distribution includes several memory manager back end implementations. Usually the same back end should be suitable for all applications on a given system, but it is possible for an application to supply its own back end at need. *** Implications of DNL marker *** Some JPEG files may use a DNL marker to postpone definition of the image height (this would be useful for a fax-like scanner's output, for instance). In these files the SOF marker claims the image height is 0, and you only find out the true image height at the end of the first scan. We could read these files as follows: 1. Upon seeing zero image height, replace it by 65535 (the maximum allowed). 2. When the DNL is found, update the image height in the global image descriptor. This implies that control modules must avoid making copies of the image height, and must re-test for termination after each MCU row. This would be easy enough to do. In cases where image-size data structures are allocated, this approach will result in very inefficient use of virtual memory or much-larger-than-necessary temporary files. This seems acceptable for something that probably won't be a mainstream usage. People might have to forgo use of memory-hogging options (such as two-pass color quantization or noninterleaved JPEG files) if they want efficient conversion of such files. (One could improve efficiency by demanding a user-supplied upper bound for the height, less than 65536; in most cases it could be much less.) The standard also permits the SOF marker to overestimate the image height, with a DNL to give the true, smaller height at the end of the first scan. This would solve the space problems if the overestimate wasn't too great. However, it implies that you don't even know whether DNL will be used. This leads to a couple of very serious objections: 1. Testing for a DNL marker must occur in the inner loop of the decompressor's Huffman decoder; this implies a speed penalty whether the feature is used or not. 2. There is no way to hide the last-minute change in image height from an application using the decoder. Thus *every* application using the IJG library would suffer a complexity penalty whether it cared about DNL or not. We currently do not support DNL because of these problems. A different approach is to insist that DNL-using files be preprocessed by a separate program that reads ahead to the DNL, then goes back and fixes the SOF marker. This is a much simpler solution and is probably far more efficient. Even if one wants piped input, buffering the first scan of the JPEG file needs a lot smaller temp file than is implied by the maximum-height method. For this approach we'd simply treat DNL as a no-op in the decompressor (at most, check that it matches the SOF image height). We will not worry about making the compressor capable of outputting DNL. Something similar to the first scheme above could be applied if anyone ever wants to make that work. htmldoc-1.8.27/jpeg/jchuff.h0100664000212600000240000000304706713354635014305 0ustar mikeuser/* * jchuff.h * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains declarations for Huffman entropy encoding routines * that are shared between the sequential encoder (jchuff.c) and the * progressive encoder (jcphuff.c). No other modules need to see these. */ /* The legal range of a DCT coefficient is * -1024 .. +1023 for 8-bit data; * -16384 .. +16383 for 12-bit data. * Hence the magnitude should always fit in 10 or 14 bits respectively. */ #if BITS_IN_JSAMPLE == 8 #define MAX_COEF_BITS 10 #else #define MAX_COEF_BITS 14 #endif /* Derived data constructed for each Huffman table */ typedef struct { unsigned int ehufco[256]; /* code for each symbol */ char ehufsi[256]; /* length of code for each symbol */ /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ } c_derived_tbl; /* Short forms of external names for systems with brain-damaged linkers. */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jpeg_make_c_derived_tbl jMkCDerived #define jpeg_gen_optimal_table jGenOptTbl #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* Expand a Huffman table definition into the derived format */ EXTERN(void) jpeg_make_c_derived_tbl JPP((j_compress_ptr cinfo, boolean isDC, int tblno, c_derived_tbl ** pdtbl)); /* Generate an optimal table definition given the specified counts */ EXTERN(void) jpeg_gen_optimal_table JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[])); htmldoc-1.8.27/jpeg/jcparam.c0100664000212600000240000005143306713354635014452 0ustar mikeuser/* * jcparam.c * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains optional default-setting code for the JPEG compressor. * Applications do not have to use this file, but those that don't use it * must know a lot more about the innards of the JPEG code. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * Quantization table setup routines */ GLOBAL(void) jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline) /* Define a quantization table equal to the basic_table times * a scale factor (given as a percentage). * If force_baseline is TRUE, the computed quantization table entries * are limited to 1..255 for JPEG baseline compatibility. */ { JQUANT_TBL ** qtblptr; int i; long temp; /* Safety check to ensure start_compress not called yet. */ if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS) ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl); qtblptr = & cinfo->quant_tbl_ptrs[which_tbl]; if (*qtblptr == NULL) *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo); for (i = 0; i < DCTSIZE2; i++) { temp = ((long) basic_table[i] * scale_factor + 50L) / 100L; /* limit the values to the valid range */ if (temp <= 0L) temp = 1L; if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ if (force_baseline && temp > 255L) temp = 255L; /* limit to baseline range if requested */ (*qtblptr)->quantval[i] = (UINT16) temp; } /* Initialize sent_table FALSE so table will be written to JPEG file. */ (*qtblptr)->sent_table = FALSE; } GLOBAL(void) jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, boolean force_baseline) /* Set or change the 'quality' (quantization) setting, using default tables * and a straight percentage-scaling quality scale. In most cases it's better * to use jpeg_set_quality (below); this entry point is provided for * applications that insist on a linear percentage scaling. */ { /* These are the sample quantization tables given in JPEG spec section K.1. * The spec says that the values given produce "good" quality, and * when divided by 2, "very good" quality. */ static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = { 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99 }; static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }; /* Set up two quantization tables using the specified scaling */ jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, scale_factor, force_baseline); jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, scale_factor, force_baseline); } GLOBAL(int) jpeg_quality_scaling (int quality) /* Convert a user-specified quality rating to a percentage scaling factor * for an underlying quantization table, using our recommended scaling curve. * The input 'quality' factor should be 0 (terrible) to 100 (very good). */ { /* Safety limit on quality factor. Convert 0 to 1 to avoid zero divide. */ if (quality <= 0) quality = 1; if (quality > 100) quality = 100; /* The basic table is used as-is (scaling 100) for a quality of 50. * Qualities 50..100 are converted to scaling percentage 200 - 2*Q; * note that at Q=100 the scaling is 0, which will cause jpeg_add_quant_table * to make all the table entries 1 (hence, minimum quantization loss). * Qualities 1..50 are converted to scaling percentage 5000/Q. */ if (quality < 50) quality = 5000 / quality; else quality = 200 - quality*2; return quality; } GLOBAL(void) jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) /* Set or change the 'quality' (quantization) setting, using default tables. * This is the standard quality-adjusting entry point for typical user * interfaces; only those who want detailed control over quantization tables * would use the preceding three routines directly. */ { /* Convert user 0-100 rating to percentage scaling */ quality = jpeg_quality_scaling(quality); /* Set up standard quality tables */ jpeg_set_linear_quality(cinfo, quality, force_baseline); } /* * Huffman table setup routines */ LOCAL(void) add_huff_table (j_compress_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val) /* Define a Huffman table */ { int nsymbols, len; if (*htblptr == NULL) *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); /* Copy the number-of-symbols-of-each-code-length counts */ MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); /* Validate the counts. We do this here mainly so we can copy the right * number of symbols from the val[] array, without risking marching off * the end of memory. jchuff.c will do a more thorough test later. */ nsymbols = 0; for (len = 1; len <= 16; len++) nsymbols += bits[len]; if (nsymbols < 1 || nsymbols > 256) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8)); /* Initialize sent_table FALSE so table will be written to JPEG file. */ (*htblptr)->sent_table = FALSE; } LOCAL(void) std_huff_tables (j_compress_ptr cinfo) /* Set up the standard Huffman tables (cf. JPEG standard section K.3) */ /* IMPORTANT: these are only valid for 8-bit data precision! */ { static const UINT8 bits_dc_luminance[17] = { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; static const UINT8 val_dc_luminance[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; static const UINT8 bits_dc_chrominance[17] = { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; static const UINT8 val_dc_chrominance[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; static const UINT8 bits_ac_luminance[17] = { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d }; static const UINT8 val_ac_luminance[] = { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa }; static const UINT8 bits_ac_chrominance[17] = { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 }; static const UINT8 val_ac_chrominance[] = { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa }; add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0], bits_dc_luminance, val_dc_luminance); add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0], bits_ac_luminance, val_ac_luminance); add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1], bits_dc_chrominance, val_dc_chrominance); add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1], bits_ac_chrominance, val_ac_chrominance); } /* * Default parameter setup for compression. * * Applications that don't choose to use this routine must do their * own setup of all these parameters. Alternately, you can call this * to establish defaults and then alter parameters selectively. This * is the recommended approach since, if we add any new parameters, * your code will still work (they'll be set to reasonable defaults). */ GLOBAL(void) jpeg_set_defaults (j_compress_ptr cinfo) { int i; /* Safety check to ensure start_compress not called yet. */ if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Allocate comp_info array large enough for maximum component count. * Array is made permanent in case application wants to compress * multiple images at same param settings. */ if (cinfo->comp_info == NULL) cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, MAX_COMPONENTS * SIZEOF(jpeg_component_info)); /* Initialize everything not dependent on the color space */ cinfo->data_precision = BITS_IN_JSAMPLE; /* Set up two quantization tables using default quality of 75 */ jpeg_set_quality(cinfo, 75, TRUE); /* Set up two Huffman tables */ std_huff_tables(cinfo); /* Initialize default arithmetic coding conditioning */ for (i = 0; i < NUM_ARITH_TBLS; i++) { cinfo->arith_dc_L[i] = 0; cinfo->arith_dc_U[i] = 1; cinfo->arith_ac_K[i] = 5; } /* Default is no multiple-scan output */ cinfo->scan_info = NULL; cinfo->num_scans = 0; /* Expect normal source image, not raw downsampled data */ cinfo->raw_data_in = FALSE; /* Use Huffman coding, not arithmetic coding, by default */ cinfo->arith_code = FALSE; /* By default, don't do extra passes to optimize entropy coding */ cinfo->optimize_coding = FALSE; /* The standard Huffman tables are only valid for 8-bit data precision. * If the precision is higher, force optimization on so that usable * tables will be computed. This test can be removed if default tables * are supplied that are valid for the desired precision. */ if (cinfo->data_precision > 8) cinfo->optimize_coding = TRUE; /* By default, use the simpler non-cosited sampling alignment */ cinfo->CCIR601_sampling = FALSE; /* No input smoothing */ cinfo->smoothing_factor = 0; /* DCT algorithm preference */ cinfo->dct_method = JDCT_DEFAULT; /* No restart markers */ cinfo->restart_interval = 0; cinfo->restart_in_rows = 0; /* Fill in default JFIF marker parameters. Note that whether the marker * will actually be written is determined by jpeg_set_colorspace. * * By default, the library emits JFIF version code 1.01. * An application that wants to emit JFIF 1.02 extension markers should set * JFIF_minor_version to 2. We could probably get away with just defaulting * to 1.02, but there may still be some decoders in use that will complain * about that; saying 1.01 should minimize compatibility problems. */ cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */ cinfo->JFIF_minor_version = 1; cinfo->density_unit = 0; /* Pixel size is unknown by default */ cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ cinfo->Y_density = 1; /* Choose JPEG colorspace based on input space, set defaults accordingly */ jpeg_default_colorspace(cinfo); } /* * Select an appropriate JPEG colorspace for in_color_space. */ GLOBAL(void) jpeg_default_colorspace (j_compress_ptr cinfo) { switch (cinfo->in_color_space) { case JCS_GRAYSCALE: jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); break; case JCS_RGB: jpeg_set_colorspace(cinfo, JCS_YCbCr); break; case JCS_YCbCr: jpeg_set_colorspace(cinfo, JCS_YCbCr); break; case JCS_CMYK: jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */ break; case JCS_YCCK: jpeg_set_colorspace(cinfo, JCS_YCCK); break; case JCS_UNKNOWN: jpeg_set_colorspace(cinfo, JCS_UNKNOWN); break; default: ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); } } /* * Set the JPEG colorspace, and choose colorspace-dependent default values. */ GLOBAL(void) jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) { jpeg_component_info * compptr; int ci; #define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ (compptr = &cinfo->comp_info[index], \ compptr->component_id = (id), \ compptr->h_samp_factor = (hsamp), \ compptr->v_samp_factor = (vsamp), \ compptr->quant_tbl_no = (quant), \ compptr->dc_tbl_no = (dctbl), \ compptr->ac_tbl_no = (actbl) ) /* Safety check to ensure start_compress not called yet. */ if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* For all colorspaces, we use Q and Huff tables 0 for luminance components, * tables 1 for chrominance components. */ cinfo->jpeg_color_space = colorspace; cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */ cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */ switch (colorspace) { case JCS_GRAYSCALE: cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ cinfo->num_components = 1; /* JFIF specifies component ID 1 */ SET_COMP(0, 1, 1,1, 0, 0,0); break; case JCS_RGB: cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ cinfo->num_components = 3; SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); break; case JCS_YCbCr: cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ cinfo->num_components = 3; /* JFIF specifies component IDs 1,2,3 */ /* We default to 2x2 subsamples of chrominance */ SET_COMP(0, 1, 2,2, 0, 0,0); SET_COMP(1, 2, 1,1, 1, 1,1); SET_COMP(2, 3, 1,1, 1, 1,1); break; case JCS_CMYK: cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */ cinfo->num_components = 4; SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0); SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0); SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0); SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0); break; case JCS_YCCK: cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */ cinfo->num_components = 4; SET_COMP(0, 1, 2,2, 0, 0,0); SET_COMP(1, 2, 1,1, 1, 1,1); SET_COMP(2, 3, 1,1, 1, 1,1); SET_COMP(3, 4, 2,2, 0, 0,0); break; case JCS_UNKNOWN: cinfo->num_components = cinfo->input_components; if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, MAX_COMPONENTS); for (ci = 0; ci < cinfo->num_components; ci++) { SET_COMP(ci, ci, 1,1, 0, 0,0); } break; default: ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); } } #ifdef C_PROGRESSIVE_SUPPORTED LOCAL(jpeg_scan_info *) fill_a_scan (jpeg_scan_info * scanptr, int ci, int Ss, int Se, int Ah, int Al) /* Support routine: generate one scan for specified component */ { scanptr->comps_in_scan = 1; scanptr->component_index[0] = ci; scanptr->Ss = Ss; scanptr->Se = Se; scanptr->Ah = Ah; scanptr->Al = Al; scanptr++; return scanptr; } LOCAL(jpeg_scan_info *) fill_scans (jpeg_scan_info * scanptr, int ncomps, int Ss, int Se, int Ah, int Al) /* Support routine: generate one scan for each component */ { int ci; for (ci = 0; ci < ncomps; ci++) { scanptr->comps_in_scan = 1; scanptr->component_index[0] = ci; scanptr->Ss = Ss; scanptr->Se = Se; scanptr->Ah = Ah; scanptr->Al = Al; scanptr++; } return scanptr; } LOCAL(jpeg_scan_info *) fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al) /* Support routine: generate interleaved DC scan if possible, else N scans */ { int ci; if (ncomps <= MAX_COMPS_IN_SCAN) { /* Single interleaved DC scan */ scanptr->comps_in_scan = ncomps; for (ci = 0; ci < ncomps; ci++) scanptr->component_index[ci] = ci; scanptr->Ss = scanptr->Se = 0; scanptr->Ah = Ah; scanptr->Al = Al; scanptr++; } else { /* Noninterleaved DC scan for each component */ scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al); } return scanptr; } /* * Create a recommended progressive-JPEG script. * cinfo->num_components and cinfo->jpeg_color_space must be correct. */ GLOBAL(void) jpeg_simple_progression (j_compress_ptr cinfo) { int ncomps = cinfo->num_components; int nscans; jpeg_scan_info * scanptr; /* Safety check to ensure start_compress not called yet. */ if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Figure space needed for script. Calculation must match code below! */ if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { /* Custom script for YCbCr color images. */ nscans = 10; } else { /* All-purpose script for other color spaces. */ if (ncomps > MAX_COMPS_IN_SCAN) nscans = 6 * ncomps; /* 2 DC + 4 AC scans per component */ else nscans = 2 + 4 * ncomps; /* 2 DC scans; 4 AC scans per component */ } /* Allocate space for script. * We need to put it in the permanent pool in case the application performs * multiple compressions without changing the settings. To avoid a memory * leak if jpeg_simple_progression is called repeatedly for the same JPEG * object, we try to re-use previously allocated space, and we allocate * enough space to handle YCbCr even if initially asked for grayscale. */ if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) { cinfo->script_space_size = MAX(nscans, 10); cinfo->script_space = (jpeg_scan_info *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, cinfo->script_space_size * SIZEOF(jpeg_scan_info)); } scanptr = cinfo->script_space; cinfo->scan_info = scanptr; cinfo->num_scans = nscans; if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { /* Custom script for YCbCr color images. */ /* Initial DC scan */ scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); /* Initial AC scan: get some luma data out in a hurry */ scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2); /* Chroma data is too small to be worth expending many scans on */ scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1); scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1); /* Complete spectral selection for luma AC */ scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2); /* Refine next bit of luma AC */ scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1); /* Finish DC successive approximation */ scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); /* Finish AC successive approximation */ scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0); scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0); /* Luma bottom bit comes last since it's usually largest scan */ scanptr = fill_a_scan(scanptr, 0, 1, 63, 1, 0); } else { /* All-purpose script for other color spaces. */ /* Successive approximation first pass */ scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2); scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2); /* Successive approximation second pass */ scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1); /* Successive approximation final pass */ scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0); } } #endif /* C_PROGRESSIVE_SUPPORTED */ htmldoc-1.8.27/jpeg/jquant1.c0100664000212600000240000007507606713354635014431 0ustar mikeuser/* * jquant1.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains 1-pass color quantization (color mapping) routines. * These routines provide mapping to a fixed color map using equally spaced * color values. Optional Floyd-Steinberg or ordered dithering is available. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #ifdef QUANT_1PASS_SUPPORTED /* * The main purpose of 1-pass quantization is to provide a fast, if not very * high quality, colormapped output capability. A 2-pass quantizer usually * gives better visual quality; however, for quantized grayscale output this * quantizer is perfectly adequate. Dithering is highly recommended with this * quantizer, though you can turn it off if you really want to. * * In 1-pass quantization the colormap must be chosen in advance of seeing the * image. We use a map consisting of all combinations of Ncolors[i] color * values for the i'th component. The Ncolors[] values are chosen so that * their product, the total number of colors, is no more than that requested. * (In most cases, the product will be somewhat less.) * * Since the colormap is orthogonal, the representative value for each color * component can be determined without considering the other components; * then these indexes can be combined into a colormap index by a standard * N-dimensional-array-subscript calculation. Most of the arithmetic involved * can be precalculated and stored in the lookup table colorindex[]. * colorindex[i][j] maps pixel value j in component i to the nearest * representative value (grid plane) for that component; this index is * multiplied by the array stride for component i, so that the * index of the colormap entry closest to a given pixel value is just * sum( colorindex[component-number][pixel-component-value] ) * Aside from being fast, this scheme allows for variable spacing between * representative values with no additional lookup cost. * * If gamma correction has been applied in color conversion, it might be wise * to adjust the color grid spacing so that the representative colors are * equidistant in linear space. At this writing, gamma correction is not * implemented by jdcolor, so nothing is done here. */ /* Declarations for ordered dithering. * * We use a standard 16x16 ordered dither array. The basic concept of ordered * dithering is described in many references, for instance Dale Schumacher's * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991). * In place of Schumacher's comparisons against a "threshold" value, we add a * "dither" value to the input pixel and then round the result to the nearest * output value. The dither value is equivalent to (0.5 - threshold) times * the distance between output values. For ordered dithering, we assume that * the output colors are equally spaced; if not, results will probably be * worse, since the dither may be too much or too little at a given point. * * The normal calculation would be to form pixel value + dither, range-limit * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual. * We can skip the separate range-limiting step by extending the colorindex * table in both directions. */ #define ODITHER_SIZE 16 /* dimension of dither matrix */ /* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */ #define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE) /* # cells in matrix */ #define ODITHER_MASK (ODITHER_SIZE-1) /* mask for wrapping around counters */ typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE]; typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE]; static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = { /* Bayer's order-4 dither array. Generated by the code given in * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I. * The values in this array must range from 0 to ODITHER_CELLS-1. */ { 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255 }, { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 }, { 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 }, { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 }, { 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247 }, { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 }, { 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 }, { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 }, { 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253 }, { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 }, { 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 }, { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 }, { 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245 }, { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 }, { 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 }, { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 } }; /* Declarations for Floyd-Steinberg dithering. * * Errors are accumulated into the array fserrors[], at a resolution of * 1/16th of a pixel count. The error at a given pixel is propagated * to its not-yet-processed neighbors using the standard F-S fractions, * ... (here) 7/16 * 3/16 5/16 1/16 * We work left-to-right on even rows, right-to-left on odd rows. * * We can get away with a single array (holding one row's worth of errors) * by using it to store the current row's errors at pixel columns not yet * processed, but the next row's errors at columns already processed. We * need only a few extra variables to hold the errors immediately around the * current column. (If we are lucky, those variables are in registers, but * even if not, they're probably cheaper to access than array elements are.) * * The fserrors[] array is indexed [component#][position]. * We provide (#columns + 2) entries per component; the extra entry at each * end saves us from special-casing the first and last pixels. * * Note: on a wide image, we might not have enough room in a PC's near data * segment to hold the error array; so it is allocated with alloc_large. */ #if BITS_IN_JSAMPLE == 8 typedef INT16 FSERROR; /* 16 bits should be enough */ typedef int LOCFSERROR; /* use 'int' for calculation temps */ #else typedef INT32 FSERROR; /* may need more than 16 bits */ typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ #endif typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */ /* Private subobject */ #define MAX_Q_COMPS 4 /* max components I can handle */ typedef struct { struct jpeg_color_quantizer pub; /* public fields */ /* Initially allocated colormap is saved here */ JSAMPARRAY sv_colormap; /* The color map as a 2-D pixel array */ int sv_actual; /* number of entries in use */ JSAMPARRAY colorindex; /* Precomputed mapping for speed */ /* colorindex[i][j] = index of color closest to pixel value j in component i, * premultiplied as described above. Since colormap indexes must fit into * JSAMPLEs, the entries of this array will too. */ boolean is_padded; /* is the colorindex padded for odither? */ int Ncolors[MAX_Q_COMPS]; /* # of values alloced to each component */ /* Variables for ordered dithering */ int row_index; /* cur row's vertical index in dither matrix */ ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ /* Variables for Floyd-Steinberg dithering */ FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ boolean on_odd_row; /* flag to remember which row we are on */ } my_cquantizer; typedef my_cquantizer * my_cquantize_ptr; /* * Policy-making subroutines for create_colormap and create_colorindex. * These routines determine the colormap to be used. The rest of the module * only assumes that the colormap is orthogonal. * * * select_ncolors decides how to divvy up the available colors * among the components. * * output_value defines the set of representative values for a component. * * largest_input_value defines the mapping from input values to * representative values for a component. * Note that the latter two routines may impose different policies for * different components, though this is not currently done. */ LOCAL(int) select_ncolors (j_decompress_ptr cinfo, int Ncolors[]) /* Determine allocation of desired colors to components, */ /* and fill in Ncolors[] array to indicate choice. */ /* Return value is total number of colors (product of Ncolors[] values). */ { int nc = cinfo->out_color_components; /* number of color components */ int max_colors = cinfo->desired_number_of_colors; int total_colors, iroot, i, j; boolean changed; long temp; static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE }; /* We can allocate at least the nc'th root of max_colors per component. */ /* Compute floor(nc'th root of max_colors). */ iroot = 1; do { iroot++; temp = iroot; /* set temp = iroot ** nc */ for (i = 1; i < nc; i++) temp *= iroot; } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */ iroot--; /* now iroot = floor(root) */ /* Must have at least 2 color values per component */ if (iroot < 2) ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp); /* Initialize to iroot color values for each component */ total_colors = 1; for (i = 0; i < nc; i++) { Ncolors[i] = iroot; total_colors *= iroot; } /* We may be able to increment the count for one or more components without * exceeding max_colors, though we know not all can be incremented. * Sometimes, the first component can be incremented more than once! * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.) * In RGB colorspace, try to increment G first, then R, then B. */ do { changed = FALSE; for (i = 0; i < nc; i++) { j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); /* calculate new total_colors if Ncolors[j] is incremented */ temp = total_colors / Ncolors[j]; temp *= Ncolors[j]+1; /* done in long arith to avoid oflo */ if (temp > (long) max_colors) break; /* won't fit, done with this pass */ Ncolors[j]++; /* OK, apply the increment */ total_colors = (int) temp; changed = TRUE; } } while (changed); return total_colors; } LOCAL(int) output_value (j_decompress_ptr cinfo, int ci, int j, int maxj) /* Return j'th output value, where j will range from 0 to maxj */ /* The output values must fall in 0..MAXJSAMPLE in increasing order */ { /* We always provide values 0 and MAXJSAMPLE for each component; * any additional values are equally spaced between these limits. * (Forcing the upper and lower values to the limits ensures that * dithering can't produce a color outside the selected gamut.) */ return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); } LOCAL(int) largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj) /* Return largest input value that should map to j'th output value */ /* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */ { /* Breakpoints are halfway between values returned by output_value */ return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); } /* * Create the colormap. */ LOCAL(void) create_colormap (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; JSAMPARRAY colormap; /* Created colormap */ int total_colors; /* Number of distinct output colors */ int i,j,k, nci, blksize, blkdist, ptr, val; /* Select number of colors for each component */ total_colors = select_ncolors(cinfo, cquantize->Ncolors); /* Report selected color counts */ if (cinfo->out_color_components == 3) TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, total_colors, cquantize->Ncolors[0], cquantize->Ncolors[1], cquantize->Ncolors[2]); else TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); /* Allocate and fill in the colormap. */ /* The colors are ordered in the map in standard row-major order, */ /* i.e. rightmost (highest-indexed) color changes most rapidly. */ colormap = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components); /* blksize is number of adjacent repeated entries for a component */ /* blkdist is distance between groups of identical entries for a component */ blkdist = total_colors; for (i = 0; i < cinfo->out_color_components; i++) { /* fill in colormap entries for i'th color component */ nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ blksize = blkdist / nci; for (j = 0; j < nci; j++) { /* Compute j'th output value (out of nci) for component */ val = output_value(cinfo, i, j, nci-1); /* Fill in all colormap entries that have this value of this component */ for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { /* fill in blksize entries beginning at ptr */ for (k = 0; k < blksize; k++) colormap[i][ptr+k] = (JSAMPLE) val; } } blkdist = blksize; /* blksize of this color is blkdist of next */ } /* Save the colormap in private storage, * where it will survive color quantization mode changes. */ cquantize->sv_colormap = colormap; cquantize->sv_actual = total_colors; } /* * Create the color index table. */ LOCAL(void) create_colorindex (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; JSAMPROW indexptr; int i,j,k, nci, blksize, val, pad; /* For ordered dither, we pad the color index tables by MAXJSAMPLE in * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE). * This is not necessary in the other dithering modes. However, we * flag whether it was done in case user changes dithering mode. */ if (cinfo->dither_mode == JDITHER_ORDERED) { pad = MAXJSAMPLE*2; cquantize->is_padded = TRUE; } else { pad = 0; cquantize->is_padded = FALSE; } cquantize->colorindex = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) (MAXJSAMPLE+1 + pad), (JDIMENSION) cinfo->out_color_components); /* blksize is number of adjacent repeated entries for a component */ blksize = cquantize->sv_actual; for (i = 0; i < cinfo->out_color_components; i++) { /* fill in colorindex entries for i'th color component */ nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ blksize = blksize / nci; /* adjust colorindex pointers to provide padding at negative indexes. */ if (pad) cquantize->colorindex[i] += MAXJSAMPLE; /* in loop, val = index of current output value, */ /* and k = largest j that maps to current val */ indexptr = cquantize->colorindex[i]; val = 0; k = largest_input_value(cinfo, i, 0, nci-1); for (j = 0; j <= MAXJSAMPLE; j++) { while (j > k) /* advance val if past boundary */ k = largest_input_value(cinfo, i, ++val, nci-1); /* premultiply so that no multiplication needed in main processing */ indexptr[j] = (JSAMPLE) (val * blksize); } /* Pad at both ends if necessary */ if (pad) for (j = 1; j <= MAXJSAMPLE; j++) { indexptr[-j] = indexptr[0]; indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; } } } /* * Create an ordered-dither array for a component having ncolors * distinct output values. */ LOCAL(ODITHER_MATRIX_PTR) make_odither_array (j_decompress_ptr cinfo, int ncolors) { ODITHER_MATRIX_PTR odither; int j,k; INT32 num,den; odither = (ODITHER_MATRIX_PTR) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(ODITHER_MATRIX)); /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1). * Hence the dither value for the matrix cell with fill order f * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). * On 16-bit-int machine, be careful to avoid overflow. */ den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); for (j = 0; j < ODITHER_SIZE; j++) { for (k = 0; k < ODITHER_SIZE; k++) { num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) * MAXJSAMPLE; /* Ensure round towards zero despite C's lack of consistency * about rounding negative values in integer division... */ odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); } } return odither; } /* * Create the ordered-dither tables. * Components having the same number of representative colors may * share a dither table. */ LOCAL(void) create_odither_tables (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; ODITHER_MATRIX_PTR odither; int i, j, nci; for (i = 0; i < cinfo->out_color_components; i++) { nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ odither = NULL; /* search for matching prior component */ for (j = 0; j < i; j++) { if (nci == cquantize->Ncolors[j]) { odither = cquantize->odither[j]; break; } } if (odither == NULL) /* need a new table? */ odither = make_odither_array(cinfo, nci); cquantize->odither[i] = odither; } } /* * Map some rows of pixels to the output colormapped representation. */ METHODDEF(void) color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* General case, no dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; JSAMPARRAY colorindex = cquantize->colorindex; register int pixcode, ci; register JSAMPROW ptrin, ptrout; int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; register int nc = cinfo->out_color_components; for (row = 0; row < num_rows; row++) { ptrin = input_buf[row]; ptrout = output_buf[row]; for (col = width; col > 0; col--) { pixcode = 0; for (ci = 0; ci < nc; ci++) { pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); } *ptrout++ = (JSAMPLE) pixcode; } } } METHODDEF(void) color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* Fast path for out_color_components==3, no dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; register int pixcode; register JSAMPROW ptrin, ptrout; JSAMPROW colorindex0 = cquantize->colorindex[0]; JSAMPROW colorindex1 = cquantize->colorindex[1]; JSAMPROW colorindex2 = cquantize->colorindex[2]; int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; for (row = 0; row < num_rows; row++) { ptrin = input_buf[row]; ptrout = output_buf[row]; for (col = width; col > 0; col--) { pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); *ptrout++ = (JSAMPLE) pixcode; } } } METHODDEF(void) quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* General case, with ordered dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; register JSAMPROW input_ptr; register JSAMPROW output_ptr; JSAMPROW colorindex_ci; int * dither; /* points to active row of dither matrix */ int row_index, col_index; /* current indexes into dither matrix */ int nc = cinfo->out_color_components; int ci; int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; for (row = 0; row < num_rows; row++) { /* Initialize output values to 0 so can process components separately */ jzero_far((void FAR *) output_buf[row], (size_t) (width * SIZEOF(JSAMPLE))); row_index = cquantize->row_index; for (ci = 0; ci < nc; ci++) { input_ptr = input_buf[row] + ci; output_ptr = output_buf[row]; colorindex_ci = cquantize->colorindex[ci]; dither = cquantize->odither[ci][row_index]; col_index = 0; for (col = width; col > 0; col--) { /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE, * select output value, accumulate into output code for this pixel. * Range-limiting need not be done explicitly, as we have extended * the colorindex table to produce the right answers for out-of-range * inputs. The maximum dither is +- MAXJSAMPLE; this sets the * required amount of padding. */ *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; input_ptr += nc; output_ptr++; col_index = (col_index + 1) & ODITHER_MASK; } } /* Advance row index for next row */ row_index = (row_index + 1) & ODITHER_MASK; cquantize->row_index = row_index; } } METHODDEF(void) quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* Fast path for out_color_components==3, with ordered dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; register int pixcode; register JSAMPROW input_ptr; register JSAMPROW output_ptr; JSAMPROW colorindex0 = cquantize->colorindex[0]; JSAMPROW colorindex1 = cquantize->colorindex[1]; JSAMPROW colorindex2 = cquantize->colorindex[2]; int * dither0; /* points to active row of dither matrix */ int * dither1; int * dither2; int row_index, col_index; /* current indexes into dither matrix */ int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; for (row = 0; row < num_rows; row++) { row_index = cquantize->row_index; input_ptr = input_buf[row]; output_ptr = output_buf[row]; dither0 = cquantize->odither[0][row_index]; dither1 = cquantize->odither[1][row_index]; dither2 = cquantize->odither[2][row_index]; col_index = 0; for (col = width; col > 0; col--) { pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + dither0[col_index]]); pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + dither1[col_index]]); pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + dither2[col_index]]); *output_ptr++ = (JSAMPLE) pixcode; col_index = (col_index + 1) & ODITHER_MASK; } row_index = (row_index + 1) & ODITHER_MASK; cquantize->row_index = row_index; } } METHODDEF(void) quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* General case, with Floyd-Steinberg dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; register LOCFSERROR cur; /* current error or pixel value */ LOCFSERROR belowerr; /* error for pixel below cur */ LOCFSERROR bpreverr; /* error for below/prev col */ LOCFSERROR bnexterr; /* error for below/next col */ LOCFSERROR delta; register FSERRPTR errorptr; /* => fserrors[] at column before current */ register JSAMPROW input_ptr; register JSAMPROW output_ptr; JSAMPROW colorindex_ci; JSAMPROW colormap_ci; int pixcode; int nc = cinfo->out_color_components; int dir; /* 1 for left-to-right, -1 for right-to-left */ int dirnc; /* dir * nc */ int ci; int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; JSAMPLE *range_limit = cinfo->sample_range_limit; SHIFT_TEMPS for (row = 0; row < num_rows; row++) { /* Initialize output values to 0 so can process components separately */ jzero_far((void FAR *) output_buf[row], (size_t) (width * SIZEOF(JSAMPLE))); for (ci = 0; ci < nc; ci++) { input_ptr = input_buf[row] + ci; output_ptr = output_buf[row]; if (cquantize->on_odd_row) { /* work right to left in this row */ input_ptr += (width-1) * nc; /* so point to rightmost pixel */ output_ptr += width-1; dir = -1; dirnc = -nc; errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ } else { /* work left to right in this row */ dir = 1; dirnc = nc; errorptr = cquantize->fserrors[ci]; /* => entry before first column */ } colorindex_ci = cquantize->colorindex[ci]; colormap_ci = cquantize->sv_colormap[ci]; /* Preset error values: no error propagated to first pixel from left */ cur = 0; /* and no error propagated to row below yet */ belowerr = bpreverr = 0; for (col = width; col > 0; col--) { /* cur holds the error propagated from the previous pixel on the * current line. Add the error propagated from the previous line * to form the complete error correction term for this pixel, and * round the error term (which is expressed * 16) to an integer. * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct * for either sign of the error value. * Note: errorptr points to *previous* column's array entry. */ cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. * The maximum error is +- MAXJSAMPLE; this sets the required size * of the range_limit array. */ cur += GETJSAMPLE(*input_ptr); cur = GETJSAMPLE(range_limit[cur]); /* Select output value, accumulate into output code for this pixel */ pixcode = GETJSAMPLE(colorindex_ci[cur]); *output_ptr += (JSAMPLE) pixcode; /* Compute actual representation error at this pixel */ /* Note: we can do this even though we don't have the final */ /* pixel code, because the colormap is orthogonal. */ cur -= GETJSAMPLE(colormap_ci[pixcode]); /* Compute error fractions to be propagated to adjacent pixels. * Add these into the running sums, and simultaneously shift the * next-line error sums left by 1 column. */ bnexterr = cur; delta = cur * 2; cur += delta; /* form error * 3 */ errorptr[0] = (FSERROR) (bpreverr + cur); cur += delta; /* form error * 5 */ bpreverr = belowerr + cur; belowerr = bnexterr; cur += delta; /* form error * 7 */ /* At this point cur contains the 7/16 error value to be propagated * to the next pixel on the current line, and all the errors for the * next line have been shifted over. We are therefore ready to move on. */ input_ptr += dirnc; /* advance input ptr to next column */ output_ptr += dir; /* advance output ptr to next column */ errorptr += dir; /* advance errorptr to current column */ } /* Post-loop cleanup: we must unload the final error value into the * final fserrors[] entry. Note we need not unload belowerr because * it is for the dummy column before or after the actual array. */ errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ } cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); } } /* * Allocate workspace for Floyd-Steinberg errors. */ LOCAL(void) alloc_fs_workspace (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; size_t arraysize; int i; arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); for (i = 0; i < cinfo->out_color_components; i++) { cquantize->fserrors[i] = (FSERRPTR) (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); } } /* * Initialize for one-pass color quantization. */ METHODDEF(void) start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; size_t arraysize; int i; /* Install my colormap. */ cinfo->colormap = cquantize->sv_colormap; cinfo->actual_number_of_colors = cquantize->sv_actual; /* Initialize for desired dithering mode. */ switch (cinfo->dither_mode) { case JDITHER_NONE: if (cinfo->out_color_components == 3) cquantize->pub.color_quantize = color_quantize3; else cquantize->pub.color_quantize = color_quantize; break; case JDITHER_ORDERED: if (cinfo->out_color_components == 3) cquantize->pub.color_quantize = quantize3_ord_dither; else cquantize->pub.color_quantize = quantize_ord_dither; cquantize->row_index = 0; /* initialize state for ordered dither */ /* If user changed to ordered dither from another mode, * we must recreate the color index table with padding. * This will cost extra space, but probably isn't very likely. */ if (! cquantize->is_padded) create_colorindex(cinfo); /* Create ordered-dither tables if we didn't already. */ if (cquantize->odither[0] == NULL) create_odither_tables(cinfo); break; case JDITHER_FS: cquantize->pub.color_quantize = quantize_fs_dither; cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */ /* Allocate Floyd-Steinberg workspace if didn't already. */ if (cquantize->fserrors[0] == NULL) alloc_fs_workspace(cinfo); /* Initialize the propagated errors to zero. */ arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); for (i = 0; i < cinfo->out_color_components; i++) jzero_far((void FAR *) cquantize->fserrors[i], arraysize); break; default: ERREXIT(cinfo, JERR_NOT_COMPILED); break; } } /* * Finish up at the end of the pass. */ METHODDEF(void) finish_pass_1_quant (j_decompress_ptr cinfo) { /* no work in 1-pass case */ } /* * Switch to a new external colormap between output passes. * Shouldn't get to this module! */ METHODDEF(void) new_color_map_1_quant (j_decompress_ptr cinfo) { ERREXIT(cinfo, JERR_MODE_CHANGE); } /* * Module initialization routine for 1-pass color quantization. */ GLOBAL(void) jinit_1pass_quantizer (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize; cquantize = (my_cquantize_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_cquantizer)); cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; cquantize->pub.start_pass = start_pass_1_quant; cquantize->pub.finish_pass = finish_pass_1_quant; cquantize->pub.new_color_map = new_color_map_1_quant; cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */ cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */ /* Make sure my internal arrays won't overflow */ if (cinfo->out_color_components > MAX_Q_COMPS) ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS); /* Make sure colormap indexes can be represented by JSAMPLEs */ if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1)) ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1); /* Create the colormap and color index table. */ create_colormap(cinfo); create_colorindex(cinfo); /* Allocate Floyd-Steinberg workspace now if requested. * We do this now since it is FAR storage and may affect the memory * manager's space calculations. If the user changes to FS dither * mode in a later pass, we will allocate the space then, and will * possibly overrun the max_memory_to_use setting. */ if (cinfo->dither_mode == JDITHER_FS) alloc_fs_workspace(cinfo); } #endif /* QUANT_1PASS_SUPPORTED */ htmldoc-1.8.27/jpeg/jconfig.doc0100664000212600000240000001237406713354635015000 0ustar mikeuser/* * jconfig.doc * * Copyright (C) 1991-1994, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file documents the configuration options that are required to * customize the JPEG software for a particular system. * * The actual configuration options for a particular installation are stored * in jconfig.h. On many machines, jconfig.h can be generated automatically * or copied from one of the "canned" jconfig files that we supply. But if * you need to generate a jconfig.h file by hand, this file tells you how. * * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING. * EDIT A COPY NAMED JCONFIG.H. */ /* * These symbols indicate the properties of your machine or compiler. * #define the symbol if yes, #undef it if no. */ /* Does your compiler support function prototypes? * (If not, you also need to use ansi2knr, see install.doc) */ #define HAVE_PROTOTYPES /* Does your compiler support the declaration "unsigned char" ? * How about "unsigned short" ? */ #define HAVE_UNSIGNED_CHAR #define HAVE_UNSIGNED_SHORT /* Define "void" as "char" if your compiler doesn't know about type void. * NOTE: be sure to define void such that "void *" represents the most general * pointer type, e.g., that returned by malloc(). */ /* #define void char */ /* Define "const" as empty if your compiler doesn't know the "const" keyword. */ /* #define const */ /* Define this if an ordinary "char" type is unsigned. * If you're not sure, leaving it undefined will work at some cost in speed. * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. */ #undef CHAR_IS_UNSIGNED /* Define this if your system has an ANSI-conforming file. */ #define HAVE_STDDEF_H /* Define this if your system has an ANSI-conforming file. */ #define HAVE_STDLIB_H /* Define this if your system does not have an ANSI/SysV , * but does have a BSD-style . */ #undef NEED_BSD_STRINGS /* Define this if your system does not provide typedef size_t in any of the * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in * instead. */ #undef NEED_SYS_TYPES_H /* For 80x86 machines, you need to define NEED_FAR_POINTERS, * unless you are using a large-data memory model or 80386 flat-memory mode. * On less brain-damaged CPUs this symbol must not be defined. * (Defining this symbol causes large data structures to be referenced through * "far" pointers and to be allocated with a special version of malloc.) */ #undef NEED_FAR_POINTERS /* Define this if your linker needs global names to be unique in less * than the first 15 characters. */ #undef NEED_SHORT_EXTERNAL_NAMES /* Although a real ANSI C compiler can deal perfectly well with pointers to * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you * actually get "missing structure definition" warnings or errors while * compiling the JPEG code. */ #undef INCOMPLETE_TYPES_BROKEN /* * The following options affect code selection within the JPEG library, * but they don't need to be visible to applications using the library. * To minimize application namespace pollution, the symbols won't be * defined unless JPEG_INTERNALS has been defined. */ #ifdef JPEG_INTERNALS /* Define this if your compiler implements ">>" on signed values as a logical * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, * which is the normal and rational definition. */ #undef RIGHT_SHIFT_IS_UNSIGNED #endif /* JPEG_INTERNALS */ /* * The remaining options do not affect the JPEG library proper, * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). * Other applications can ignore these. */ #ifdef JPEG_CJPEG_DJPEG /* These defines indicate which image (non-JPEG) file formats are allowed. */ #define BMP_SUPPORTED /* BMP image file format */ #define GIF_SUPPORTED /* GIF image file format */ #define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ #undef RLE_SUPPORTED /* Utah RLE image file format */ #define TARGA_SUPPORTED /* Targa image file format */ /* Define this if you want to name both input and output files on the command * line, rather than using stdout and optionally stdin. You MUST do this if * your system can't cope with binary I/O to stdin/stdout. See comments at * head of cjpeg.c or djpeg.c. */ #undef TWO_FILE_COMMANDLINE /* Define this if your system needs explicit cleanup of temporary files. * This is crucial under MS-DOS, where the temporary "files" may be areas * of extended memory; on most other systems it's not as important. */ #undef NEED_SIGNAL_CATCHER /* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). * This is necessary on systems that distinguish text files from binary files, * and is harmless on most systems that don't. If you have one of the rare * systems that complains about the "b" spec, define this symbol. */ #undef DONT_USE_B_MODE /* Define this if you want percent-done progress reports from cjpeg/djpeg. */ #undef PROGRESS_REPORT #endif /* JPEG_CJPEG_DJPEG */ htmldoc-1.8.27/jpeg/change.log0100664000212600000240000002210406713354635014612 0ustar mikeuserCHANGE LOG for Independent JPEG Group's JPEG software Version 6b 27-Mar-1998 ----------------------- jpegtran has new features for lossless image transformations (rotation and flipping) as well as "lossless" reduction to grayscale. jpegtran now copies comments by default; it has a -copy switch to enable copying all APPn blocks as well, or to suppress comments. (Formerly it always suppressed comments and APPn blocks.) jpegtran now also preserves JFIF version and resolution information. New decompressor library feature: COM and APPn markers found in the input file can be saved in memory for later use by the application. (Before, you had to code this up yourself with a custom marker processor.) There is an unused field "void * client_data" now in compress and decompress parameter structs; this may be useful in some applications. JFIF version number information is now saved by the decoder and accepted by the encoder. jpegtran uses this to copy the source file's version number, to ensure "jpegtran -copy all" won't create bogus files that contain JFXX extensions but claim to be version 1.01. Applications that generate their own JFXX extension markers also (finally) have a supported way to cause the encoder to emit JFIF version number 1.02. djpeg's trace mode reports JFIF 1.02 thumbnail images as such, rather than as unknown APP0 markers. In -verbose mode, djpeg and rdjpgcom will try to print the contents of APP12 markers as text. Some digital cameras store useful text information in APP12 markers. Handling of truncated data streams is more robust: blocks beyond the one in which the error occurs will be output as uniform gray, or left unchanged if decoding a progressive JPEG. The appearance no longer depends on the Huffman tables being used. Huffman tables are checked for validity much more carefully than before. To avoid the Unisys LZW patent, djpeg's GIF output capability has been changed to produce "uncompressed GIFs", and cjpeg's GIF input capability has been removed altogether. We're not happy about it either, but there seems to be no good alternative. The configure script now supports building libjpeg as a shared library on many flavors of Unix (all the ones that GNU libtool knows how to build shared libraries for). Use "./configure --enable-shared" to try this out. New jconfig file and makefiles for Microsoft Visual C++ and Developer Studio. Also, a jconfig file and a build script for Metrowerks CodeWarrior on Apple Macintosh. makefile.dj has been updated for DJGPP v2, and there are miscellaneous other minor improvements in the makefiles. jmemmac.c now knows how to create temporary files following Mac System 7 conventions. djpeg's -map switch is now able to read raw-format PPM files reliably. cjpeg -progressive -restart no longer generates any unnecessary DRI markers. Multiple calls to jpeg_simple_progression for a single JPEG object no longer leak memory. Version 6a 7-Feb-96 -------------------- Library initialization sequence modified to detect version mismatches and struct field packing mismatches between library and calling application. This change requires applications to be recompiled, but does not require any application source code change. All routine declarations changed to the style "GLOBAL(type) name ...", that is, GLOBAL, LOCAL, METHODDEF, EXTERN are now macros taking the routine's return type as an argument. This makes it possible to add Microsoft-style linkage keywords to all the routines by changing just these macros. Note that any application code that was using these macros will have to be changed. DCT coefficient quantization tables are now stored in normal array order rather than zigzag order. Application code that calls jpeg_add_quant_table, or otherwise manipulates quantization tables directly, will need to be changed. If you need to make such code work with either older or newer versions of the library, a test like "#if JPEG_LIB_VERSION >= 61" is recommended. djpeg's trace capability now dumps DQT tables in natural order, not zigzag order. This allows the trace output to be made into a "-qtables" file more easily. New system-dependent memory manager module for use on Apple Macintosh. Fix bug in cjpeg's -smooth option: last one or two scanlines would be duplicates of the prior line unless the image height mod 16 was 1 or 2. Repair minor problems in VMS, BCC, MC6 makefiles. New configure script based on latest GNU Autoconf. Correct the list of include files needed by MetroWerks C for ccommand(). Numerous small documentation updates. Version 6 2-Aug-95 ------------------- Progressive JPEG support: library can read and write full progressive JPEG files. A "buffered image" mode supports incremental decoding for on-the-fly display of progressive images. Simply recompiling an existing IJG-v5-based decoder with v6 should allow it to read progressive files, though of course without any special progressive display. New "jpegtran" application performs lossless transcoding between different JPEG formats; primarily, it can be used to convert baseline to progressive JPEG and vice versa. In support of jpegtran, the library now allows lossless reading and writing of JPEG files as DCT coefficient arrays. This ability may be of use in other applications. Notes for programmers: * We changed jpeg_start_decompress() to be able to suspend; this makes all decoding modes available to suspending-input applications. However, existing applications that use suspending input will need to be changed to check the return value from jpeg_start_decompress(). You don't need to do anything if you don't use a suspending data source. * We changed the interface to the virtual array routines: access_virt_array routines now take a count of the number of rows to access this time. The last parameter to request_virt_array routines is now interpreted as the maximum number of rows that may be accessed at once, but not necessarily the height of every access. Version 5b 15-Mar-95 --------------------- Correct bugs with grayscale images having v_samp_factor > 1. jpeg_write_raw_data() now supports output suspension. Correct bugs in "configure" script for case of compiling in a directory other than the one containing the source files. Repair bug in jquant1.c: sometimes didn't use as many colors as it could. Borland C makefile and jconfig file work under either MS-DOS or OS/2. Miscellaneous improvements to documentation. Version 5a 7-Dec-94 -------------------- Changed color conversion roundoff behavior so that grayscale values are represented exactly. (This causes test image files to change.) Make ordered dither use 16x16 instead of 4x4 pattern for a small quality improvement. New configure script based on latest GNU Autoconf. Fix configure script to handle CFLAGS correctly. Rename *.auto files to *.cfg, so that configure script still works if file names have been truncated for DOS. Fix bug in rdbmp.c: didn't allow for extra data between header and image. Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data. Fix several bugs in rdrle.c. NEED_SHORT_EXTERNAL_NAMES option was broken. Revise jerror.h/jerror.c for more flexibility in message table. Repair oversight in jmemname.c NO_MKTEMP case: file could be there but unreadable. Version 5 24-Sep-94 -------------------- Version 5 represents a nearly complete redesign and rewrite of the IJG software. Major user-visible changes include: * Automatic configuration simplifies installation for most Unix systems. * A range of speed vs. image quality tradeoffs are supported. This includes resizing of an image during decompression: scaling down by a factor of 1/2, 1/4, or 1/8 is handled very efficiently. * New programs rdjpgcom and wrjpgcom allow insertion and extraction of text comments in a JPEG file. The application programmer's interface to the library has changed completely. Notable improvements include: * We have eliminated the use of callback routines for handling the uncompressed image data. The application now sees the library as a set of routines that it calls to read or write image data on a scanline-by-scanline basis. * The application image data is represented in a conventional interleaved- pixel format, rather than as a separate array for each color channel. This can save a copying step in many programs. * The handling of compressed data has been cleaned up: the application can supply routines to source or sink the compressed data. It is possible to suspend processing on source/sink buffer overrun, although this is not supported in all operating modes. * All static state has been eliminated from the library, so that multiple instances of compression or decompression can be active concurrently. * JPEG abbreviated datastream formats are supported, ie, quantization and Huffman tables can be stored separately from the image data. * And not only that, but the documentation of the library has improved considerably! The last widely used release before the version 5 rewrite was version 4A of 18-Feb-93. Change logs before that point have been discarded, since they are not of much interest after the rewrite. htmldoc-1.8.27/jpeg/jcphuff.c0100664000212600000240000006103306713354635014457 0ustar mikeuser/* * jcphuff.c * * Copyright (C) 1995-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains Huffman entropy encoding routines for progressive JPEG. * * We do not support output suspension in this module, since the library * currently does not allow multiple-scan files to be written with output * suspension. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jchuff.h" /* Declarations shared with jchuff.c */ #ifdef C_PROGRESSIVE_SUPPORTED /* Expanded entropy encoder object for progressive Huffman encoding. */ typedef struct { struct jpeg_entropy_encoder pub; /* public fields */ /* Mode flag: TRUE for optimization, FALSE for actual data output */ boolean gather_statistics; /* Bit-level coding status. * next_output_byte/free_in_buffer are local copies of cinfo->dest fields. */ JOCTET * next_output_byte; /* => next byte to write in buffer */ size_t free_in_buffer; /* # of byte spaces remaining in buffer */ INT32 put_buffer; /* current bit-accumulation buffer */ int put_bits; /* # of bits now in it */ j_compress_ptr cinfo; /* link to cinfo (needed for dump_buffer) */ /* Coding status for DC components */ int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ /* Coding status for AC components */ int ac_tbl_no; /* the table number of the single component */ unsigned int EOBRUN; /* run length of EOBs */ unsigned int BE; /* # of buffered correction bits before MCU */ char * bit_buffer; /* buffer for correction bits (1 per char) */ /* packing correction bits tightly would save some space but cost time... */ unsigned int restarts_to_go; /* MCUs left in this restart interval */ int next_restart_num; /* next restart number to write (0-7) */ /* Pointers to derived tables (these workspaces have image lifespan). * Since any one scan codes only DC or only AC, we only need one set * of tables, not one for DC and one for AC. */ c_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; /* Statistics tables for optimization; again, one set is enough */ long * count_ptrs[NUM_HUFF_TBLS]; } phuff_entropy_encoder; typedef phuff_entropy_encoder * phuff_entropy_ptr; /* MAX_CORR_BITS is the number of bits the AC refinement correction-bit * buffer can hold. Larger sizes may slightly improve compression, but * 1000 is already well into the realm of overkill. * The minimum safe size is 64 bits. */ #define MAX_CORR_BITS 1000 /* Max # of correction bits I can buffer */ /* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. * We assume that int right shift is unsigned if INT32 right shift is, * which should be safe. */ #ifdef RIGHT_SHIFT_IS_UNSIGNED #define ISHIFT_TEMPS int ishift_temp; #define IRIGHT_SHIFT(x,shft) \ ((ishift_temp = (x)) < 0 ? \ (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \ (ishift_temp >> (shft))) #else #define ISHIFT_TEMPS #define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) #endif /* Forward declarations */ METHODDEF(boolean) encode_mcu_DC_first JPP((j_compress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(boolean) encode_mcu_AC_first JPP((j_compress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(boolean) encode_mcu_DC_refine JPP((j_compress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(boolean) encode_mcu_AC_refine JPP((j_compress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(void) finish_pass_phuff JPP((j_compress_ptr cinfo)); METHODDEF(void) finish_pass_gather_phuff JPP((j_compress_ptr cinfo)); /* * Initialize for a Huffman-compressed scan using progressive JPEG. */ METHODDEF(void) start_pass_phuff (j_compress_ptr cinfo, boolean gather_statistics) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; boolean is_DC_band; int ci, tbl; jpeg_component_info * compptr; entropy->cinfo = cinfo; entropy->gather_statistics = gather_statistics; is_DC_band = (cinfo->Ss == 0); /* We assume jcmaster.c already validated the scan parameters. */ /* Select execution routines */ if (cinfo->Ah == 0) { if (is_DC_band) entropy->pub.encode_mcu = encode_mcu_DC_first; else entropy->pub.encode_mcu = encode_mcu_AC_first; } else { if (is_DC_band) entropy->pub.encode_mcu = encode_mcu_DC_refine; else { entropy->pub.encode_mcu = encode_mcu_AC_refine; /* AC refinement needs a correction bit buffer */ if (entropy->bit_buffer == NULL) entropy->bit_buffer = (char *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, MAX_CORR_BITS * SIZEOF(char)); } } if (gather_statistics) entropy->pub.finish_pass = finish_pass_gather_phuff; else entropy->pub.finish_pass = finish_pass_phuff; /* Only DC coefficients may be interleaved, so cinfo->comps_in_scan = 1 * for AC coefficients. */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; /* Initialize DC predictions to 0 */ entropy->last_dc_val[ci] = 0; /* Get table index */ if (is_DC_band) { if (cinfo->Ah != 0) /* DC refinement needs no table */ continue; tbl = compptr->dc_tbl_no; } else { entropy->ac_tbl_no = tbl = compptr->ac_tbl_no; } if (gather_statistics) { /* Check for invalid table index */ /* (make_c_derived_tbl does this in the other path) */ if (tbl < 0 || tbl >= NUM_HUFF_TBLS) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl); /* Allocate and zero the statistics tables */ /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ if (entropy->count_ptrs[tbl] == NULL) entropy->count_ptrs[tbl] = (long *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 257 * SIZEOF(long)); MEMZERO(entropy->count_ptrs[tbl], 257 * SIZEOF(long)); } else { /* Compute derived values for Huffman table */ /* We may do this more than once for a table, but it's not expensive */ jpeg_make_c_derived_tbl(cinfo, is_DC_band, tbl, & entropy->derived_tbls[tbl]); } } /* Initialize AC stuff */ entropy->EOBRUN = 0; entropy->BE = 0; /* Initialize bit buffer to empty */ entropy->put_buffer = 0; entropy->put_bits = 0; /* Initialize restart stuff */ entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num = 0; } /* Outputting bytes to the file. * NB: these must be called only when actually outputting, * that is, entropy->gather_statistics == FALSE. */ /* Emit a byte */ #define emit_byte(entropy,val) \ { *(entropy)->next_output_byte++ = (JOCTET) (val); \ if (--(entropy)->free_in_buffer == 0) \ dump_buffer(entropy); } LOCAL(void) dump_buffer (phuff_entropy_ptr entropy) /* Empty the output buffer; we do not support suspension in this module. */ { struct jpeg_destination_mgr * dest = entropy->cinfo->dest; if (! (*dest->empty_output_buffer) (entropy->cinfo)) ERREXIT(entropy->cinfo, JERR_CANT_SUSPEND); /* After a successful buffer dump, must reset buffer pointers */ entropy->next_output_byte = dest->next_output_byte; entropy->free_in_buffer = dest->free_in_buffer; } /* Outputting bits to the file */ /* Only the right 24 bits of put_buffer are used; the valid bits are * left-justified in this part. At most 16 bits can be passed to emit_bits * in one call, and we never retain more than 7 bits in put_buffer * between calls, so 24 bits are sufficient. */ INLINE LOCAL(void) emit_bits (phuff_entropy_ptr entropy, unsigned int code, int size) /* Emit some bits, unless we are in gather mode */ { /* This routine is heavily used, so it's worth coding tightly. */ register INT32 put_buffer = (INT32) code; register int put_bits = entropy->put_bits; /* if size is 0, caller used an invalid Huffman table entry */ if (size == 0) ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); if (entropy->gather_statistics) return; /* do nothing if we're only getting stats */ put_buffer &= (((INT32) 1)<put_buffer; /* and merge with old buffer contents */ while (put_bits >= 8) { int c = (int) ((put_buffer >> 16) & 0xFF); emit_byte(entropy, c); if (c == 0xFF) { /* need to stuff a zero byte? */ emit_byte(entropy, 0); } put_buffer <<= 8; put_bits -= 8; } entropy->put_buffer = put_buffer; /* update variables */ entropy->put_bits = put_bits; } LOCAL(void) flush_bits (phuff_entropy_ptr entropy) { emit_bits(entropy, 0x7F, 7); /* fill any partial byte with ones */ entropy->put_buffer = 0; /* and reset bit-buffer to empty */ entropy->put_bits = 0; } /* * Emit (or just count) a Huffman symbol. */ INLINE LOCAL(void) emit_symbol (phuff_entropy_ptr entropy, int tbl_no, int symbol) { if (entropy->gather_statistics) entropy->count_ptrs[tbl_no][symbol]++; else { c_derived_tbl * tbl = entropy->derived_tbls[tbl_no]; emit_bits(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]); } } /* * Emit bits from a correction bit buffer. */ LOCAL(void) emit_buffered_bits (phuff_entropy_ptr entropy, char * bufstart, unsigned int nbits) { if (entropy->gather_statistics) return; /* no real work */ while (nbits > 0) { emit_bits(entropy, (unsigned int) (*bufstart), 1); bufstart++; nbits--; } } /* * Emit any pending EOBRUN symbol. */ LOCAL(void) emit_eobrun (phuff_entropy_ptr entropy) { register int temp, nbits; if (entropy->EOBRUN > 0) { /* if there is any pending EOBRUN */ temp = entropy->EOBRUN; nbits = 0; while ((temp >>= 1)) nbits++; /* safety check: shouldn't happen given limited correction-bit buffer */ if (nbits > 14) ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); emit_symbol(entropy, entropy->ac_tbl_no, nbits << 4); if (nbits) emit_bits(entropy, entropy->EOBRUN, nbits); entropy->EOBRUN = 0; /* Emit any buffered correction bits */ emit_buffered_bits(entropy, entropy->bit_buffer, entropy->BE); entropy->BE = 0; } } /* * Emit a restart marker & resynchronize predictions. */ LOCAL(void) emit_restart (phuff_entropy_ptr entropy, int restart_num) { int ci; emit_eobrun(entropy); if (! entropy->gather_statistics) { flush_bits(entropy); emit_byte(entropy, 0xFF); emit_byte(entropy, JPEG_RST0 + restart_num); } if (entropy->cinfo->Ss == 0) { /* Re-initialize DC predictions to 0 */ for (ci = 0; ci < entropy->cinfo->comps_in_scan; ci++) entropy->last_dc_val[ci] = 0; } else { /* Re-initialize all AC-related fields to 0 */ entropy->EOBRUN = 0; entropy->BE = 0; } } /* * MCU encoding for DC initial scan (either spectral selection, * or first pass of successive approximation). */ METHODDEF(boolean) encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; register int temp, temp2; register int nbits; int blkn, ci; int Al = cinfo->Al; JBLOCKROW block; jpeg_component_info * compptr; ISHIFT_TEMPS entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; /* Emit restart marker if needed */ if (cinfo->restart_interval) if (entropy->restarts_to_go == 0) emit_restart(entropy, entropy->next_restart_num); /* Encode the MCU data blocks */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { block = MCU_data[blkn]; ci = cinfo->MCU_membership[blkn]; compptr = cinfo->cur_comp_info[ci]; /* Compute the DC value after the required point transform by Al. * This is simply an arithmetic right shift. */ temp2 = IRIGHT_SHIFT((int) ((*block)[0]), Al); /* DC differences are figured on the point-transformed values. */ temp = temp2 - entropy->last_dc_val[ci]; entropy->last_dc_val[ci] = temp2; /* Encode the DC coefficient difference per section G.1.2.1 */ temp2 = temp; if (temp < 0) { temp = -temp; /* temp is abs value of input */ /* For a negative input, want temp2 = bitwise complement of abs(input) */ /* This code assumes we are on a two's complement machine */ temp2--; } /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 0; while (temp) { nbits++; temp >>= 1; } /* Check for out-of-range coefficient values. * Since we're encoding a difference, the range limit is twice as much. */ if (nbits > MAX_COEF_BITS+1) ERREXIT(cinfo, JERR_BAD_DCT_COEF); /* Count/emit the Huffman-coded symbol for the number of bits */ emit_symbol(entropy, compptr->dc_tbl_no, nbits); /* Emit that number of bits of the value, if positive, */ /* or the complement of its magnitude, if negative. */ if (nbits) /* emit_bits rejects calls with size 0 */ emit_bits(entropy, (unsigned int) temp2, nbits); } cinfo->dest->next_output_byte = entropy->next_output_byte; cinfo->dest->free_in_buffer = entropy->free_in_buffer; /* Update restart-interval state too */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) { entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num++; entropy->next_restart_num &= 7; } entropy->restarts_to_go--; } return TRUE; } /* * MCU encoding for AC initial scan (either spectral selection, * or first pass of successive approximation). */ METHODDEF(boolean) encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; register int temp, temp2; register int nbits; register int r, k; int Se = cinfo->Se; int Al = cinfo->Al; JBLOCKROW block; entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; /* Emit restart marker if needed */ if (cinfo->restart_interval) if (entropy->restarts_to_go == 0) emit_restart(entropy, entropy->next_restart_num); /* Encode the MCU data block */ block = MCU_data[0]; /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */ r = 0; /* r = run length of zeros */ for (k = cinfo->Ss; k <= Se; k++) { if ((temp = (*block)[jpeg_natural_order[k]]) == 0) { r++; continue; } /* We must apply the point transform by Al. For AC coefficients this * is an integer division with rounding towards 0. To do this portably * in C, we shift after obtaining the absolute value; so the code is * interwoven with finding the abs value (temp) and output bits (temp2). */ if (temp < 0) { temp = -temp; /* temp is abs value of input */ temp >>= Al; /* apply the point transform */ /* For a negative coef, want temp2 = bitwise complement of abs(coef) */ temp2 = ~temp; } else { temp >>= Al; /* apply the point transform */ temp2 = temp; } /* Watch out for case that nonzero coef is zero after point transform */ if (temp == 0) { r++; continue; } /* Emit any pending EOBRUN */ if (entropy->EOBRUN > 0) emit_eobrun(entropy); /* if run length > 15, must emit special run-length-16 codes (0xF0) */ while (r > 15) { emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); r -= 16; } /* Find the number of bits needed for the magnitude of the coefficient */ nbits = 1; /* there must be at least one 1 bit */ while ((temp >>= 1)) nbits++; /* Check for out-of-range coefficient values */ if (nbits > MAX_COEF_BITS) ERREXIT(cinfo, JERR_BAD_DCT_COEF); /* Count/emit Huffman symbol for run length / number of bits */ emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + nbits); /* Emit that number of bits of the value, if positive, */ /* or the complement of its magnitude, if negative. */ emit_bits(entropy, (unsigned int) temp2, nbits); r = 0; /* reset zero run length */ } if (r > 0) { /* If there are trailing zeroes, */ entropy->EOBRUN++; /* count an EOB */ if (entropy->EOBRUN == 0x7FFF) emit_eobrun(entropy); /* force it out to avoid overflow */ } cinfo->dest->next_output_byte = entropy->next_output_byte; cinfo->dest->free_in_buffer = entropy->free_in_buffer; /* Update restart-interval state too */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) { entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num++; entropy->next_restart_num &= 7; } entropy->restarts_to_go--; } return TRUE; } /* * MCU encoding for DC successive approximation refinement scan. * Note: we assume such scans can be multi-component, although the spec * is not very clear on the point. */ METHODDEF(boolean) encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; register int temp; int blkn; int Al = cinfo->Al; JBLOCKROW block; entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; /* Emit restart marker if needed */ if (cinfo->restart_interval) if (entropy->restarts_to_go == 0) emit_restart(entropy, entropy->next_restart_num); /* Encode the MCU data blocks */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { block = MCU_data[blkn]; /* We simply emit the Al'th bit of the DC coefficient value. */ temp = (*block)[0]; emit_bits(entropy, (unsigned int) (temp >> Al), 1); } cinfo->dest->next_output_byte = entropy->next_output_byte; cinfo->dest->free_in_buffer = entropy->free_in_buffer; /* Update restart-interval state too */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) { entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num++; entropy->next_restart_num &= 7; } entropy->restarts_to_go--; } return TRUE; } /* * MCU encoding for AC successive approximation refinement scan. */ METHODDEF(boolean) encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; register int temp; register int r, k; int EOB; char *BR_buffer; unsigned int BR; int Se = cinfo->Se; int Al = cinfo->Al; JBLOCKROW block; int absvalues[DCTSIZE2]; entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; /* Emit restart marker if needed */ if (cinfo->restart_interval) if (entropy->restarts_to_go == 0) emit_restart(entropy, entropy->next_restart_num); /* Encode the MCU data block */ block = MCU_data[0]; /* It is convenient to make a pre-pass to determine the transformed * coefficients' absolute values and the EOB position. */ EOB = 0; for (k = cinfo->Ss; k <= Se; k++) { temp = (*block)[jpeg_natural_order[k]]; /* We must apply the point transform by Al. For AC coefficients this * is an integer division with rounding towards 0. To do this portably * in C, we shift after obtaining the absolute value. */ if (temp < 0) temp = -temp; /* temp is abs value of input */ temp >>= Al; /* apply the point transform */ absvalues[k] = temp; /* save abs value for main pass */ if (temp == 1) EOB = k; /* EOB = index of last newly-nonzero coef */ } /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */ r = 0; /* r = run length of zeros */ BR = 0; /* BR = count of buffered bits added now */ BR_buffer = entropy->bit_buffer + entropy->BE; /* Append bits to buffer */ for (k = cinfo->Ss; k <= Se; k++) { if ((temp = absvalues[k]) == 0) { r++; continue; } /* Emit any required ZRLs, but not if they can be folded into EOB */ while (r > 15 && k <= EOB) { /* emit any pending EOBRUN and the BE correction bits */ emit_eobrun(entropy); /* Emit ZRL */ emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); r -= 16; /* Emit buffered correction bits that must be associated with ZRL */ emit_buffered_bits(entropy, BR_buffer, BR); BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ BR = 0; } /* If the coef was previously nonzero, it only needs a correction bit. * NOTE: a straight translation of the spec's figure G.7 would suggest * that we also need to test r > 15. But if r > 15, we can only get here * if k > EOB, which implies that this coefficient is not 1. */ if (temp > 1) { /* The correction bit is the next bit of the absolute value. */ BR_buffer[BR++] = (char) (temp & 1); continue; } /* Emit any pending EOBRUN and the BE correction bits */ emit_eobrun(entropy); /* Count/emit Huffman symbol for run length / number of bits */ emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + 1); /* Emit output bit for newly-nonzero coef */ temp = ((*block)[jpeg_natural_order[k]] < 0) ? 0 : 1; emit_bits(entropy, (unsigned int) temp, 1); /* Emit buffered correction bits that must be associated with this code */ emit_buffered_bits(entropy, BR_buffer, BR); BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ BR = 0; r = 0; /* reset zero run length */ } if (r > 0 || BR > 0) { /* If there are trailing zeroes, */ entropy->EOBRUN++; /* count an EOB */ entropy->BE += BR; /* concat my correction bits to older ones */ /* We force out the EOB if we risk either: * 1. overflow of the EOB counter; * 2. overflow of the correction bit buffer during the next MCU. */ if (entropy->EOBRUN == 0x7FFF || entropy->BE > (MAX_CORR_BITS-DCTSIZE2+1)) emit_eobrun(entropy); } cinfo->dest->next_output_byte = entropy->next_output_byte; cinfo->dest->free_in_buffer = entropy->free_in_buffer; /* Update restart-interval state too */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) { entropy->restarts_to_go = cinfo->restart_interval; entropy->next_restart_num++; entropy->next_restart_num &= 7; } entropy->restarts_to_go--; } return TRUE; } /* * Finish up at the end of a Huffman-compressed progressive scan. */ METHODDEF(void) finish_pass_phuff (j_compress_ptr cinfo) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; entropy->next_output_byte = cinfo->dest->next_output_byte; entropy->free_in_buffer = cinfo->dest->free_in_buffer; /* Flush out any buffered data */ emit_eobrun(entropy); flush_bits(entropy); cinfo->dest->next_output_byte = entropy->next_output_byte; cinfo->dest->free_in_buffer = entropy->free_in_buffer; } /* * Finish up a statistics-gathering pass and create the new Huffman tables. */ METHODDEF(void) finish_pass_gather_phuff (j_compress_ptr cinfo) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; boolean is_DC_band; int ci, tbl; jpeg_component_info * compptr; JHUFF_TBL **htblptr; boolean did[NUM_HUFF_TBLS]; /* Flush out buffered data (all we care about is counting the EOB symbol) */ emit_eobrun(entropy); is_DC_band = (cinfo->Ss == 0); /* It's important not to apply jpeg_gen_optimal_table more than once * per table, because it clobbers the input frequency counts! */ MEMZERO(did, SIZEOF(did)); for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; if (is_DC_band) { if (cinfo->Ah != 0) /* DC refinement needs no table */ continue; tbl = compptr->dc_tbl_no; } else { tbl = compptr->ac_tbl_no; } if (! did[tbl]) { if (is_DC_band) htblptr = & cinfo->dc_huff_tbl_ptrs[tbl]; else htblptr = & cinfo->ac_huff_tbl_ptrs[tbl]; if (*htblptr == NULL) *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); jpeg_gen_optimal_table(cinfo, *htblptr, entropy->count_ptrs[tbl]); did[tbl] = TRUE; } } } /* * Module initialization routine for progressive Huffman entropy encoding. */ GLOBAL(void) jinit_phuff_encoder (j_compress_ptr cinfo) { phuff_entropy_ptr entropy; int i; entropy = (phuff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(phuff_entropy_encoder)); cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; entropy->pub.start_pass = start_pass_phuff; /* Mark tables unallocated */ for (i = 0; i < NUM_HUFF_TBLS; i++) { entropy->derived_tbls[i] = NULL; entropy->count_ptrs[i] = NULL; } entropy->bit_buffer = NULL; /* needed only in AC refinement scan */ } #endif /* C_PROGRESSIVE_SUPPORTED */ htmldoc-1.8.27/jpeg/jccolor.c0100664000212600000240000003500006713354635014460 0ustar mikeuser/* * jccolor.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains input colorspace conversion routines. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Private subobject */ typedef struct { struct jpeg_color_converter pub; /* public fields */ /* Private state for RGB->YCC conversion */ INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */ } my_color_converter; typedef my_color_converter * my_cconvert_ptr; /**************** RGB -> YCbCr conversion: most common case **************/ /* * YCbCr is defined per CCIR 601-1, except that Cb and Cr are * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. * The conversion equations to be implemented are therefore * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2, * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0) * were not represented exactly. Now we sacrifice exact representation of * maximum red and maximum blue in order to get exact grayscales. * * To avoid floating-point arithmetic, we represent the fractional constants * as integers scaled up by 2^16 (about 4 digits precision); we have to divide * the products by 2^16, with appropriate rounding, to get the correct answer. * * For even more speed, we avoid doing any multiplications in the inner loop * by precalculating the constants times R,G,B for all possible values. * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); * for 12-bit samples it is still acceptable. It's not very reasonable for * 16-bit samples, but if you want lossless storage you shouldn't be changing * colorspace anyway. * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included * in the tables to save adding them separately in the inner loop. */ #define SCALEBITS 16 /* speediest right-shift on some machines */ #define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS) #define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define FIX(x) ((INT32) ((x) * (1L< Y section */ #define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */ #define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */ #define R_CB_OFF (3*(MAXJSAMPLE+1)) #define G_CB_OFF (4*(MAXJSAMPLE+1)) #define B_CB_OFF (5*(MAXJSAMPLE+1)) #define R_CR_OFF B_CB_OFF /* B=>Cb, R=>Cr are the same */ #define G_CR_OFF (6*(MAXJSAMPLE+1)) #define B_CR_OFF (7*(MAXJSAMPLE+1)) #define TABLE_SIZE (8*(MAXJSAMPLE+1)) /* * Initialize for RGB->YCC colorspace conversion. */ METHODDEF(void) rgb_ycc_start (j_compress_ptr cinfo) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; INT32 * rgb_ycc_tab; INT32 i; /* Allocate and fill in the conversion tables. */ cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (TABLE_SIZE * SIZEOF(INT32))); for (i = 0; i <= MAXJSAMPLE; i++) { rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i; rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i; rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i; /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr. * This ensures that the maximum output will round to MAXJSAMPLE * not MAXJSAMPLE+1, and thus that we don't have to range-limit. */ rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; /* B=>Cb and R=>Cr tables are the same rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; */ rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; } } /* * Convert some rows of samples to the JPEG colorspace. * * Note that we change from the application's interleaved-pixel format * to our internal noninterleaved, one-plane-per-component format. * The input buffer is therefore three times as wide as the output buffer. * * A starting row offset is provided only for the output buffer. The caller * can easily adjust the passed input_buf value to accommodate any row * offset required on that side. */ METHODDEF(void) rgb_ycc_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; register JSAMPROW inptr; register JSAMPROW outptr0, outptr1, outptr2; register JDIMENSION col; JDIMENSION num_cols = cinfo->image_width; while (--num_rows >= 0) { inptr = *input_buf++; outptr0 = output_buf[0][output_row]; outptr1 = output_buf[1][output_row]; outptr2 = output_buf[2][output_row]; output_row++; for (col = 0; col < num_cols; col++) { r = GETJSAMPLE(inptr[RGB_RED]); g = GETJSAMPLE(inptr[RGB_GREEN]); b = GETJSAMPLE(inptr[RGB_BLUE]); inptr += RGB_PIXELSIZE; /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations * must be too; we do not need an explicit range-limiting operation. * Hence the value being shifted is never negative, and we don't * need the general RIGHT_SHIFT macro. */ /* Y */ outptr0[col] = (JSAMPLE) ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) >> SCALEBITS); /* Cb */ outptr1[col] = (JSAMPLE) ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) >> SCALEBITS); /* Cr */ outptr2[col] = (JSAMPLE) ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) >> SCALEBITS); } } } /**************** Cases other than RGB -> YCbCr **************/ /* * Convert some rows of samples to the JPEG colorspace. * This version handles RGB->grayscale conversion, which is the same * as the RGB->Y portion of RGB->YCbCr. * We assume rgb_ycc_start has been called (we only use the Y tables). */ METHODDEF(void) rgb_gray_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->image_width; while (--num_rows >= 0) { inptr = *input_buf++; outptr = output_buf[0][output_row]; output_row++; for (col = 0; col < num_cols; col++) { r = GETJSAMPLE(inptr[RGB_RED]); g = GETJSAMPLE(inptr[RGB_GREEN]); b = GETJSAMPLE(inptr[RGB_BLUE]); inptr += RGB_PIXELSIZE; /* Y */ outptr[col] = (JSAMPLE) ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) >> SCALEBITS); } } } /* * Convert some rows of samples to the JPEG colorspace. * This version handles Adobe-style CMYK->YCCK conversion, * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same * conversion as above, while passing K (black) unchanged. * We assume rgb_ycc_start has been called. */ METHODDEF(void) cmyk_ycck_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; register JSAMPROW inptr; register JSAMPROW outptr0, outptr1, outptr2, outptr3; register JDIMENSION col; JDIMENSION num_cols = cinfo->image_width; while (--num_rows >= 0) { inptr = *input_buf++; outptr0 = output_buf[0][output_row]; outptr1 = output_buf[1][output_row]; outptr2 = output_buf[2][output_row]; outptr3 = output_buf[3][output_row]; output_row++; for (col = 0; col < num_cols; col++) { r = MAXJSAMPLE - GETJSAMPLE(inptr[0]); g = MAXJSAMPLE - GETJSAMPLE(inptr[1]); b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); /* K passes through as-is */ outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ inptr += 4; /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations * must be too; we do not need an explicit range-limiting operation. * Hence the value being shifted is never negative, and we don't * need the general RIGHT_SHIFT macro. */ /* Y */ outptr0[col] = (JSAMPLE) ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) >> SCALEBITS); /* Cb */ outptr1[col] = (JSAMPLE) ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) >> SCALEBITS); /* Cr */ outptr2[col] = (JSAMPLE) ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) >> SCALEBITS); } } } /* * Convert some rows of samples to the JPEG colorspace. * This version handles grayscale output with no conversion. * The source can be either plain grayscale or YCbCr (since Y == gray). */ METHODDEF(void) grayscale_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->image_width; int instride = cinfo->input_components; while (--num_rows >= 0) { inptr = *input_buf++; outptr = output_buf[0][output_row]; output_row++; for (col = 0; col < num_cols; col++) { outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ inptr += instride; } } } /* * Convert some rows of samples to the JPEG colorspace. * This version handles multi-component colorspaces without conversion. * We assume input_components == num_components. */ METHODDEF(void) null_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; register int ci; int nc = cinfo->num_components; JDIMENSION num_cols = cinfo->image_width; while (--num_rows >= 0) { /* It seems fastest to make a separate pass for each component. */ for (ci = 0; ci < nc; ci++) { inptr = *input_buf; outptr = output_buf[ci][output_row]; for (col = 0; col < num_cols; col++) { outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ inptr += nc; } } input_buf++; output_row++; } } /* * Empty method for start_pass. */ METHODDEF(void) null_method (j_compress_ptr cinfo) { /* no work needed */ } /* * Module initialization routine for input colorspace conversion. */ GLOBAL(void) jinit_color_converter (j_compress_ptr cinfo) { my_cconvert_ptr cconvert; cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_color_converter)); cinfo->cconvert = (struct jpeg_color_converter *) cconvert; /* set start_pass to null method until we find out differently */ cconvert->pub.start_pass = null_method; /* Make sure input_components agrees with in_color_space */ switch (cinfo->in_color_space) { case JCS_GRAYSCALE: if (cinfo->input_components != 1) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; case JCS_RGB: #if RGB_PIXELSIZE != 3 if (cinfo->input_components != RGB_PIXELSIZE) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; #endif /* else share code with YCbCr */ case JCS_YCbCr: if (cinfo->input_components != 3) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; case JCS_CMYK: case JCS_YCCK: if (cinfo->input_components != 4) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; default: /* JCS_UNKNOWN can be anything */ if (cinfo->input_components < 1) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; } /* Check num_components, set conversion method based on requested space */ switch (cinfo->jpeg_color_space) { case JCS_GRAYSCALE: if (cinfo->num_components != 1) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); if (cinfo->in_color_space == JCS_GRAYSCALE) cconvert->pub.color_convert = grayscale_convert; else if (cinfo->in_color_space == JCS_RGB) { cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = rgb_gray_convert; } else if (cinfo->in_color_space == JCS_YCbCr) cconvert->pub.color_convert = grayscale_convert; else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_RGB: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3) cconvert->pub.color_convert = null_convert; else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_YCbCr: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); if (cinfo->in_color_space == JCS_RGB) { cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = rgb_ycc_convert; } else if (cinfo->in_color_space == JCS_YCbCr) cconvert->pub.color_convert = null_convert; else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_CMYK: if (cinfo->num_components != 4) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); if (cinfo->in_color_space == JCS_CMYK) cconvert->pub.color_convert = null_convert; else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_YCCK: if (cinfo->num_components != 4) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); if (cinfo->in_color_space == JCS_CMYK) { cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = cmyk_ycck_convert; } else if (cinfo->in_color_space == JCS_YCCK) cconvert->pub.color_convert = null_convert; else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; default: /* allow null conversion of JCS_UNKNOWN */ if (cinfo->jpeg_color_space != cinfo->in_color_space || cinfo->num_components != cinfo->input_components) ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); cconvert->pub.color_convert = null_convert; break; } } htmldoc-1.8.27/jpeg/Makefile0100664000212600000240000000342410047553615014320 0ustar mikeuser# # "$Id: Makefile 1202 2004-05-10 01:14:53Z mike $" # # JPEG library Makefile for the HTMLDOC software. # # Copyright 1997-2001 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "LICENSE.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: HTMLDOC Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # include ../Makedefs # # Object files... # OBJS = jmemnobs.o \ jcapimin.o jcapistd.o jccoefct.o jccolor.o jcdctmgr.o \ jchuff.o jcinit.o jcmainct.o jcmarker.o jcmaster.o jcomapi.o \ jcparam.o jcphuff.o jcprepct.o jcsample.o jctrans.o \ jdapimin.o jdapistd.o jdatadst.o jdatasrc.o jdcoefct.o \ jdcolor.o jddctmgr.o jdhuff.o jdinput.o jdmainct.o jdmarker.o \ jdmaster.o jdmerge.o jdphuff.o jdpostct.o jdsample.o \ jdtrans.o jerror.o jfdctflt.o jfdctfst.o jfdctint.o \ jidctflt.o jidctfst.o jidctint.o jidctred.o jquant1.o \ jquant2.o jutils.o jmemmgr.o # # Make all targets... # all: libjpeg.a # # Clean all targets and object files... # clean: $(RM) $(OBJS) $(RM) libjpeg.a # # libjpeg.a # libjpeg.a: $(OBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(OBJS) $(RANLIB) $@ $(OBJS): jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h \ jmorecfg.h jpegint.h jpeglib.h jversion.h ../Makedefs # # End of "$Id: Makefile 1202 2004-05-10 01:14:53Z mike $". # htmldoc-1.8.27/jpeg/jmemmgr.c0100664000212600000240000012003406713354635014465 0ustar mikeuser/* * jmemmgr.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the JPEG system-independent memory management * routines. This code is usable across a wide variety of machines; most * of the system dependencies have been isolated in a separate file. * The major functions provided here are: * * pool-based allocation and freeing of memory; * * policy decisions about how to divide available memory among the * virtual arrays; * * control logic for swapping virtual arrays between main memory and * backing storage. * The separate system-dependent file provides the actual backing-storage * access code, and it contains the policy decision about how much total * main memory to use. * This file is system-dependent in the sense that some of its functions * are unnecessary in some systems. For example, if there is enough virtual * memory so that backing storage will never be used, much of the virtual * array control logic could be removed. (Of course, if you have that much * memory then you shouldn't care about a little bit of unused code...) */ #define JPEG_INTERNALS #define AM_MEMORY_MANAGER /* we define jvirt_Xarray_control structs */ #include "jinclude.h" #include "jpeglib.h" #include "jmemsys.h" /* import the system-dependent declarations */ #ifndef NO_GETENV #ifndef HAVE_STDLIB_H /* should declare getenv() */ extern char * getenv JPP((const char * name)); #endif #endif /* * Some important notes: * The allocation routines provided here must never return NULL. * They should exit to error_exit if unsuccessful. * * It's not a good idea to try to merge the sarray and barray routines, * even though they are textually almost the same, because samples are * usually stored as bytes while coefficients are shorts or ints. Thus, * in machines where byte pointers have a different representation from * word pointers, the resulting machine code could not be the same. */ /* * Many machines require storage alignment: longs must start on 4-byte * boundaries, doubles on 8-byte boundaries, etc. On such machines, malloc() * always returns pointers that are multiples of the worst-case alignment * requirement, and we had better do so too. * There isn't any really portable way to determine the worst-case alignment * requirement. This module assumes that the alignment requirement is * multiples of sizeof(ALIGN_TYPE). * By default, we define ALIGN_TYPE as double. This is necessary on some * workstations (where doubles really do need 8-byte alignment) and will work * fine on nearly everything. If your machine has lesser alignment needs, * you can save a few bytes by making ALIGN_TYPE smaller. * The only place I know of where this will NOT work is certain Macintosh * 680x0 compilers that define double as a 10-byte IEEE extended float. * Doing 10-byte alignment is counterproductive because longwords won't be * aligned well. Put "#define ALIGN_TYPE long" in jconfig.h if you have * such a compiler. */ #ifndef ALIGN_TYPE /* so can override from jconfig.h */ #define ALIGN_TYPE double #endif /* * We allocate objects from "pools", where each pool is gotten with a single * request to jpeg_get_small() or jpeg_get_large(). There is no per-object * overhead within a pool, except for alignment padding. Each pool has a * header with a link to the next pool of the same class. * Small and large pool headers are identical except that the latter's * link pointer must be FAR on 80x86 machines. * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE * field. This forces the compiler to make SIZEOF(small_pool_hdr) a multiple * of the alignment requirement of ALIGN_TYPE. */ typedef union small_pool_struct * small_pool_ptr; typedef union small_pool_struct { struct { small_pool_ptr next; /* next in list of pools */ size_t bytes_used; /* how many bytes already used within pool */ size_t bytes_left; /* bytes still available in this pool */ } hdr; ALIGN_TYPE dummy; /* included in union to ensure alignment */ } small_pool_hdr; typedef union large_pool_struct FAR * large_pool_ptr; typedef union large_pool_struct { struct { large_pool_ptr next; /* next in list of pools */ size_t bytes_used; /* how many bytes already used within pool */ size_t bytes_left; /* bytes still available in this pool */ } hdr; ALIGN_TYPE dummy; /* included in union to ensure alignment */ } large_pool_hdr; /* * Here is the full definition of a memory manager object. */ typedef struct { struct jpeg_memory_mgr pub; /* public fields */ /* Each pool identifier (lifetime class) names a linked list of pools. */ small_pool_ptr small_list[JPOOL_NUMPOOLS]; large_pool_ptr large_list[JPOOL_NUMPOOLS]; /* Since we only have one lifetime class of virtual arrays, only one * linked list is necessary (for each datatype). Note that the virtual * array control blocks being linked together are actually stored somewhere * in the small-pool list. */ jvirt_sarray_ptr virt_sarray_list; jvirt_barray_ptr virt_barray_list; /* This counts total space obtained from jpeg_get_small/large */ long total_space_allocated; /* alloc_sarray and alloc_barray set this value for use by virtual * array routines. */ JDIMENSION last_rowsperchunk; /* from most recent alloc_sarray/barray */ } my_memory_mgr; typedef my_memory_mgr * my_mem_ptr; /* * The control blocks for virtual arrays. * Note that these blocks are allocated in the "small" pool area. * System-dependent info for the associated backing store (if any) is hidden * inside the backing_store_info struct. */ struct jvirt_sarray_control { JSAMPARRAY mem_buffer; /* => the in-memory buffer */ JDIMENSION rows_in_array; /* total virtual array height */ JDIMENSION samplesperrow; /* width of array (and of memory buffer) */ JDIMENSION maxaccess; /* max rows accessed by access_virt_sarray */ JDIMENSION rows_in_mem; /* height of memory buffer */ JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ JDIMENSION cur_start_row; /* first logical row # in the buffer */ JDIMENSION first_undef_row; /* row # of first uninitialized row */ boolean pre_zero; /* pre-zero mode requested? */ boolean dirty; /* do current buffer contents need written? */ boolean b_s_open; /* is backing-store data valid? */ jvirt_sarray_ptr next; /* link to next virtual sarray control block */ backing_store_info b_s_info; /* System-dependent control info */ }; struct jvirt_barray_control { JBLOCKARRAY mem_buffer; /* => the in-memory buffer */ JDIMENSION rows_in_array; /* total virtual array height */ JDIMENSION blocksperrow; /* width of array (and of memory buffer) */ JDIMENSION maxaccess; /* max rows accessed by access_virt_barray */ JDIMENSION rows_in_mem; /* height of memory buffer */ JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ JDIMENSION cur_start_row; /* first logical row # in the buffer */ JDIMENSION first_undef_row; /* row # of first uninitialized row */ boolean pre_zero; /* pre-zero mode requested? */ boolean dirty; /* do current buffer contents need written? */ boolean b_s_open; /* is backing-store data valid? */ jvirt_barray_ptr next; /* link to next virtual barray control block */ backing_store_info b_s_info; /* System-dependent control info */ }; #ifdef MEM_STATS /* optional extra stuff for statistics */ LOCAL(void) print_mem_stats (j_common_ptr cinfo, int pool_id) { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; small_pool_ptr shdr_ptr; large_pool_ptr lhdr_ptr; /* Since this is only a debugging stub, we can cheat a little by using * fprintf directly rather than going through the trace message code. * This is helpful because message parm array can't handle longs. */ fprintf(stderr, "Freeing pool %d, total space = %ld\n", pool_id, mem->total_space_allocated); for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL; lhdr_ptr = lhdr_ptr->hdr.next) { fprintf(stderr, " Large chunk used %ld\n", (long) lhdr_ptr->hdr.bytes_used); } for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL; shdr_ptr = shdr_ptr->hdr.next) { fprintf(stderr, " Small chunk used %ld free %ld\n", (long) shdr_ptr->hdr.bytes_used, (long) shdr_ptr->hdr.bytes_left); } } #endif /* MEM_STATS */ LOCAL(void) out_of_memory (j_common_ptr cinfo, int which) /* Report an out-of-memory error and stop execution */ /* If we compiled MEM_STATS support, report alloc requests before dying */ { #ifdef MEM_STATS cinfo->err->trace_level = 2; /* force self_destruct to report stats */ #endif ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); } /* * Allocation of "small" objects. * * For these, we use pooled storage. When a new pool must be created, * we try to get enough space for the current request plus a "slop" factor, * where the slop will be the amount of leftover space in the new pool. * The speed vs. space tradeoff is largely determined by the slop values. * A different slop value is provided for each pool class (lifetime), * and we also distinguish the first pool of a class from later ones. * NOTE: the values given work fairly well on both 16- and 32-bit-int * machines, but may be too small if longs are 64 bits or more. */ static const size_t first_pool_slop[JPOOL_NUMPOOLS] = { 1600, /* first PERMANENT pool */ 16000 /* first IMAGE pool */ }; static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = { 0, /* additional PERMANENT pools */ 5000 /* additional IMAGE pools */ }; #define MIN_SLOP 50 /* greater than 0 to avoid futile looping */ METHODDEF(void *) alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject) /* Allocate a "small" object */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; small_pool_ptr hdr_ptr, prev_hdr_ptr; char * data_ptr; size_t odd_bytes, min_request, slop; /* Check for unsatisfiable request (do now to ensure no overflow below) */ if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); if (odd_bytes > 0) sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; /* See if space is available in any existing pool */ if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ prev_hdr_ptr = NULL; hdr_ptr = mem->small_list[pool_id]; while (hdr_ptr != NULL) { if (hdr_ptr->hdr.bytes_left >= sizeofobject) break; /* found pool with enough space */ prev_hdr_ptr = hdr_ptr; hdr_ptr = hdr_ptr->hdr.next; } /* Time to make a new pool? */ if (hdr_ptr == NULL) { /* min_request is what we need now, slop is what will be leftover */ min_request = sizeofobject + SIZEOF(small_pool_hdr); if (prev_hdr_ptr == NULL) /* first pool in class? */ slop = first_pool_slop[pool_id]; else slop = extra_pool_slop[pool_id]; /* Don't ask for more than MAX_ALLOC_CHUNK */ if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) slop = (size_t) (MAX_ALLOC_CHUNK-min_request); /* Try to get space, if fail reduce slop and try again */ for (;;) { hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); if (hdr_ptr != NULL) break; slop /= 2; if (slop < MIN_SLOP) /* give up when it gets real small */ out_of_memory(cinfo, 2); /* jpeg_get_small failed */ } mem->total_space_allocated += min_request + slop; /* Success, initialize the new pool header and add to end of list */ hdr_ptr->hdr.next = NULL; hdr_ptr->hdr.bytes_used = 0; hdr_ptr->hdr.bytes_left = sizeofobject + slop; if (prev_hdr_ptr == NULL) /* first pool in class? */ mem->small_list[pool_id] = hdr_ptr; else prev_hdr_ptr->hdr.next = hdr_ptr; } /* OK, allocate the object from the current pool */ data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */ data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ hdr_ptr->hdr.bytes_used += sizeofobject; hdr_ptr->hdr.bytes_left -= sizeofobject; return (void *) data_ptr; } /* * Allocation of "large" objects. * * The external semantics of these are the same as "small" objects, * except that FAR pointers are used on 80x86. However the pool * management heuristics are quite different. We assume that each * request is large enough that it may as well be passed directly to * jpeg_get_large; the pool management just links everything together * so that we can free it all on demand. * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY * structures. The routines that create these structures (see below) * deliberately bunch rows together to ensure a large request size. */ METHODDEF(void FAR *) alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject) /* Allocate a "large" object */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; large_pool_ptr hdr_ptr; size_t odd_bytes; /* Check for unsatisfiable request (do now to ensure no overflow below) */ if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); if (odd_bytes > 0) sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; /* Always make a new pool */ if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + SIZEOF(large_pool_hdr)); if (hdr_ptr == NULL) out_of_memory(cinfo, 4); /* jpeg_get_large failed */ mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); /* Success, initialize the new pool header and add to list */ hdr_ptr->hdr.next = mem->large_list[pool_id]; /* We maintain space counts in each pool header for statistical purposes, * even though they are not needed for allocation. */ hdr_ptr->hdr.bytes_used = sizeofobject; hdr_ptr->hdr.bytes_left = 0; mem->large_list[pool_id] = hdr_ptr; return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */ } /* * Creation of 2-D sample arrays. * The pointers are in near heap, the samples themselves in FAR heap. * * To minimize allocation overhead and to allow I/O of large contiguous * blocks, we allocate the sample rows in groups of as many rows as possible * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request. * NB: the virtual array control routines, later in this file, know about * this chunking of rows. The rowsperchunk value is left in the mem manager * object so that it can be saved away if this sarray is the workspace for * a virtual array. */ METHODDEF(JSAMPARRAY) alloc_sarray (j_common_ptr cinfo, int pool_id, JDIMENSION samplesperrow, JDIMENSION numrows) /* Allocate a 2-D sample array */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; JSAMPARRAY result; JSAMPROW workspace; JDIMENSION rowsperchunk, currow, i; long ltemp; /* Calculate max # of rows allowed in one allocation chunk */ ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / ((long) samplesperrow * SIZEOF(JSAMPLE)); if (ltemp <= 0) ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); if (ltemp < (long) numrows) rowsperchunk = (JDIMENSION) ltemp; else rowsperchunk = numrows; mem->last_rowsperchunk = rowsperchunk; /* Get space for row pointers (small object) */ result = (JSAMPARRAY) alloc_small(cinfo, pool_id, (size_t) (numrows * SIZEOF(JSAMPROW))); /* Get the rows themselves (large objects) */ currow = 0; while (currow < numrows) { rowsperchunk = MIN(rowsperchunk, numrows - currow); workspace = (JSAMPROW) alloc_large(cinfo, pool_id, (size_t) ((size_t) rowsperchunk * (size_t) samplesperrow * SIZEOF(JSAMPLE))); for (i = rowsperchunk; i > 0; i--) { result[currow++] = workspace; workspace += samplesperrow; } } return result; } /* * Creation of 2-D coefficient-block arrays. * This is essentially the same as the code for sample arrays, above. */ METHODDEF(JBLOCKARRAY) alloc_barray (j_common_ptr cinfo, int pool_id, JDIMENSION blocksperrow, JDIMENSION numrows) /* Allocate a 2-D coefficient-block array */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; JBLOCKARRAY result; JBLOCKROW workspace; JDIMENSION rowsperchunk, currow, i; long ltemp; /* Calculate max # of rows allowed in one allocation chunk */ ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / ((long) blocksperrow * SIZEOF(JBLOCK)); if (ltemp <= 0) ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); if (ltemp < (long) numrows) rowsperchunk = (JDIMENSION) ltemp; else rowsperchunk = numrows; mem->last_rowsperchunk = rowsperchunk; /* Get space for row pointers (small object) */ result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, (size_t) (numrows * SIZEOF(JBLOCKROW))); /* Get the rows themselves (large objects) */ currow = 0; while (currow < numrows) { rowsperchunk = MIN(rowsperchunk, numrows - currow); workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, (size_t) ((size_t) rowsperchunk * (size_t) blocksperrow * SIZEOF(JBLOCK))); for (i = rowsperchunk; i > 0; i--) { result[currow++] = workspace; workspace += blocksperrow; } } return result; } /* * About virtual array management: * * The above "normal" array routines are only used to allocate strip buffers * (as wide as the image, but just a few rows high). Full-image-sized buffers * are handled as "virtual" arrays. The array is still accessed a strip at a * time, but the memory manager must save the whole array for repeated * accesses. The intended implementation is that there is a strip buffer in * memory (as high as is possible given the desired memory limit), plus a * backing file that holds the rest of the array. * * The request_virt_array routines are told the total size of the image and * the maximum number of rows that will be accessed at once. The in-memory * buffer must be at least as large as the maxaccess value. * * The request routines create control blocks but not the in-memory buffers. * That is postponed until realize_virt_arrays is called. At that time the * total amount of space needed is known (approximately, anyway), so free * memory can be divided up fairly. * * The access_virt_array routines are responsible for making a specific strip * area accessible (after reading or writing the backing file, if necessary). * Note that the access routines are told whether the caller intends to modify * the accessed strip; during a read-only pass this saves having to rewrite * data to disk. The access routines are also responsible for pre-zeroing * any newly accessed rows, if pre-zeroing was requested. * * In current usage, the access requests are usually for nonoverlapping * strips; that is, successive access start_row numbers differ by exactly * num_rows = maxaccess. This means we can get good performance with simple * buffer dump/reload logic, by making the in-memory buffer be a multiple * of the access height; then there will never be accesses across bufferload * boundaries. The code will still work with overlapping access requests, * but it doesn't handle bufferload overlaps very efficiently. */ METHODDEF(jvirt_sarray_ptr) request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero, JDIMENSION samplesperrow, JDIMENSION numrows, JDIMENSION maxaccess) /* Request a virtual 2-D sample array */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; jvirt_sarray_ptr result; /* Only IMAGE-lifetime virtual arrays are currently supported */ if (pool_id != JPOOL_IMAGE) ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ /* get control block */ result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, SIZEOF(struct jvirt_sarray_control)); result->mem_buffer = NULL; /* marks array not yet realized */ result->rows_in_array = numrows; result->samplesperrow = samplesperrow; result->maxaccess = maxaccess; result->pre_zero = pre_zero; result->b_s_open = FALSE; /* no associated backing-store object */ result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ mem->virt_sarray_list = result; return result; } METHODDEF(jvirt_barray_ptr) request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero, JDIMENSION blocksperrow, JDIMENSION numrows, JDIMENSION maxaccess) /* Request a virtual 2-D coefficient-block array */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; jvirt_barray_ptr result; /* Only IMAGE-lifetime virtual arrays are currently supported */ if (pool_id != JPOOL_IMAGE) ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ /* get control block */ result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, SIZEOF(struct jvirt_barray_control)); result->mem_buffer = NULL; /* marks array not yet realized */ result->rows_in_array = numrows; result->blocksperrow = blocksperrow; result->maxaccess = maxaccess; result->pre_zero = pre_zero; result->b_s_open = FALSE; /* no associated backing-store object */ result->next = mem->virt_barray_list; /* add to list of virtual arrays */ mem->virt_barray_list = result; return result; } METHODDEF(void) realize_virt_arrays (j_common_ptr cinfo) /* Allocate the in-memory buffers for any unrealized virtual arrays */ { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; long space_per_minheight, maximum_space, avail_mem; long minheights, max_minheights; jvirt_sarray_ptr sptr; jvirt_barray_ptr bptr; /* Compute the minimum space needed (maxaccess rows in each buffer) * and the maximum space needed (full image height in each buffer). * These may be of use to the system-dependent jpeg_mem_available routine. */ space_per_minheight = 0; maximum_space = 0; for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { if (sptr->mem_buffer == NULL) { /* if not realized yet */ space_per_minheight += (long) sptr->maxaccess * (long) sptr->samplesperrow * SIZEOF(JSAMPLE); maximum_space += (long) sptr->rows_in_array * (long) sptr->samplesperrow * SIZEOF(JSAMPLE); } } for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { if (bptr->mem_buffer == NULL) { /* if not realized yet */ space_per_minheight += (long) bptr->maxaccess * (long) bptr->blocksperrow * SIZEOF(JBLOCK); maximum_space += (long) bptr->rows_in_array * (long) bptr->blocksperrow * SIZEOF(JBLOCK); } } if (space_per_minheight <= 0) return; /* no unrealized arrays, no work */ /* Determine amount of memory to actually use; this is system-dependent. */ avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space, mem->total_space_allocated); /* If the maximum space needed is available, make all the buffers full * height; otherwise parcel it out with the same number of minheights * in each buffer. */ if (avail_mem >= maximum_space) max_minheights = 1000000000L; else { max_minheights = avail_mem / space_per_minheight; /* If there doesn't seem to be enough space, try to get the minimum * anyway. This allows a "stub" implementation of jpeg_mem_available(). */ if (max_minheights <= 0) max_minheights = 1; } /* Allocate the in-memory buffers and initialize backing store as needed. */ for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { if (sptr->mem_buffer == NULL) { /* if not realized yet */ minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; if (minheights <= max_minheights) { /* This buffer fits in memory */ sptr->rows_in_mem = sptr->rows_in_array; } else { /* It doesn't fit in memory, create backing store. */ sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); jpeg_open_backing_store(cinfo, & sptr->b_s_info, (long) sptr->rows_in_array * (long) sptr->samplesperrow * (long) SIZEOF(JSAMPLE)); sptr->b_s_open = TRUE; } sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, sptr->samplesperrow, sptr->rows_in_mem); sptr->rowsperchunk = mem->last_rowsperchunk; sptr->cur_start_row = 0; sptr->first_undef_row = 0; sptr->dirty = FALSE; } } for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { if (bptr->mem_buffer == NULL) { /* if not realized yet */ minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; if (minheights <= max_minheights) { /* This buffer fits in memory */ bptr->rows_in_mem = bptr->rows_in_array; } else { /* It doesn't fit in memory, create backing store. */ bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); jpeg_open_backing_store(cinfo, & bptr->b_s_info, (long) bptr->rows_in_array * (long) bptr->blocksperrow * (long) SIZEOF(JBLOCK)); bptr->b_s_open = TRUE; } bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, bptr->blocksperrow, bptr->rows_in_mem); bptr->rowsperchunk = mem->last_rowsperchunk; bptr->cur_start_row = 0; bptr->first_undef_row = 0; bptr->dirty = FALSE; } } } LOCAL(void) do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) /* Do backing store read or write of a virtual sample array */ { long bytesperrow, file_offset, byte_count, rows, thisrow, i; bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); file_offset = ptr->cur_start_row * bytesperrow; /* Loop to read or write each allocation chunk in mem_buffer */ for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { /* One chunk, but check for short chunk at end of buffer */ rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); /* Transfer no more than is currently defined */ thisrow = (long) ptr->cur_start_row + i; rows = MIN(rows, (long) ptr->first_undef_row - thisrow); /* Transfer no more than fits in file */ rows = MIN(rows, (long) ptr->rows_in_array - thisrow); if (rows <= 0) /* this chunk might be past end of file! */ break; byte_count = rows * bytesperrow; if (writing) (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, (void FAR *) ptr->mem_buffer[i], file_offset, byte_count); else (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, (void FAR *) ptr->mem_buffer[i], file_offset, byte_count); file_offset += byte_count; } } LOCAL(void) do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) /* Do backing store read or write of a virtual coefficient-block array */ { long bytesperrow, file_offset, byte_count, rows, thisrow, i; bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); file_offset = ptr->cur_start_row * bytesperrow; /* Loop to read or write each allocation chunk in mem_buffer */ for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { /* One chunk, but check for short chunk at end of buffer */ rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); /* Transfer no more than is currently defined */ thisrow = (long) ptr->cur_start_row + i; rows = MIN(rows, (long) ptr->first_undef_row - thisrow); /* Transfer no more than fits in file */ rows = MIN(rows, (long) ptr->rows_in_array - thisrow); if (rows <= 0) /* this chunk might be past end of file! */ break; byte_count = rows * bytesperrow; if (writing) (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, (void FAR *) ptr->mem_buffer[i], file_offset, byte_count); else (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, (void FAR *) ptr->mem_buffer[i], file_offset, byte_count); file_offset += byte_count; } } METHODDEF(JSAMPARRAY) access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, JDIMENSION start_row, JDIMENSION num_rows, boolean writable) /* Access the part of a virtual sample array starting at start_row */ /* and extending for num_rows rows. writable is true if */ /* caller intends to modify the accessed area. */ { JDIMENSION end_row = start_row + num_rows; JDIMENSION undef_row; /* debugging check */ if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || ptr->mem_buffer == NULL) ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); /* Make the desired part of the virtual array accessible */ if (start_row < ptr->cur_start_row || end_row > ptr->cur_start_row+ptr->rows_in_mem) { if (! ptr->b_s_open) ERREXIT(cinfo, JERR_VIRTUAL_BUG); /* Flush old buffer contents if necessary */ if (ptr->dirty) { do_sarray_io(cinfo, ptr, TRUE); ptr->dirty = FALSE; } /* Decide what part of virtual array to access. * Algorithm: if target address > current window, assume forward scan, * load starting at target address. If target address < current window, * assume backward scan, load so that target area is top of window. * Note that when switching from forward write to forward read, will have * start_row = 0, so the limiting case applies and we load from 0 anyway. */ if (start_row > ptr->cur_start_row) { ptr->cur_start_row = start_row; } else { /* use long arithmetic here to avoid overflow & unsigned problems */ long ltemp; ltemp = (long) end_row - (long) ptr->rows_in_mem; if (ltemp < 0) ltemp = 0; /* don't fall off front end of file */ ptr->cur_start_row = (JDIMENSION) ltemp; } /* Read in the selected part of the array. * During the initial write pass, we will do no actual read * because the selected part is all undefined. */ do_sarray_io(cinfo, ptr, FALSE); } /* Ensure the accessed part of the array is defined; prezero if needed. * To improve locality of access, we only prezero the part of the array * that the caller is about to access, not the entire in-memory array. */ if (ptr->first_undef_row < end_row) { if (ptr->first_undef_row < start_row) { if (writable) /* writer skipped over a section of array */ ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); undef_row = start_row; /* but reader is allowed to read ahead */ } else { undef_row = ptr->first_undef_row; } if (writable) ptr->first_undef_row = end_row; if (ptr->pre_zero) { size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE); undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ end_row -= ptr->cur_start_row; while (undef_row < end_row) { jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); undef_row++; } } else { if (! writable) /* reader looking at undefined data */ ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); } } /* Flag the buffer dirty if caller will write in it */ if (writable) ptr->dirty = TRUE; /* Return address of proper part of the buffer */ return ptr->mem_buffer + (start_row - ptr->cur_start_row); } METHODDEF(JBLOCKARRAY) access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, JDIMENSION start_row, JDIMENSION num_rows, boolean writable) /* Access the part of a virtual block array starting at start_row */ /* and extending for num_rows rows. writable is true if */ /* caller intends to modify the accessed area. */ { JDIMENSION end_row = start_row + num_rows; JDIMENSION undef_row; /* debugging check */ if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || ptr->mem_buffer == NULL) ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); /* Make the desired part of the virtual array accessible */ if (start_row < ptr->cur_start_row || end_row > ptr->cur_start_row+ptr->rows_in_mem) { if (! ptr->b_s_open) ERREXIT(cinfo, JERR_VIRTUAL_BUG); /* Flush old buffer contents if necessary */ if (ptr->dirty) { do_barray_io(cinfo, ptr, TRUE); ptr->dirty = FALSE; } /* Decide what part of virtual array to access. * Algorithm: if target address > current window, assume forward scan, * load starting at target address. If target address < current window, * assume backward scan, load so that target area is top of window. * Note that when switching from forward write to forward read, will have * start_row = 0, so the limiting case applies and we load from 0 anyway. */ if (start_row > ptr->cur_start_row) { ptr->cur_start_row = start_row; } else { /* use long arithmetic here to avoid overflow & unsigned problems */ long ltemp; ltemp = (long) end_row - (long) ptr->rows_in_mem; if (ltemp < 0) ltemp = 0; /* don't fall off front end of file */ ptr->cur_start_row = (JDIMENSION) ltemp; } /* Read in the selected part of the array. * During the initial write pass, we will do no actual read * because the selected part is all undefined. */ do_barray_io(cinfo, ptr, FALSE); } /* Ensure the accessed part of the array is defined; prezero if needed. * To improve locality of access, we only prezero the part of the array * that the caller is about to access, not the entire in-memory array. */ if (ptr->first_undef_row < end_row) { if (ptr->first_undef_row < start_row) { if (writable) /* writer skipped over a section of array */ ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); undef_row = start_row; /* but reader is allowed to read ahead */ } else { undef_row = ptr->first_undef_row; } if (writable) ptr->first_undef_row = end_row; if (ptr->pre_zero) { size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK); undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ end_row -= ptr->cur_start_row; while (undef_row < end_row) { jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); undef_row++; } } else { if (! writable) /* reader looking at undefined data */ ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); } } /* Flag the buffer dirty if caller will write in it */ if (writable) ptr->dirty = TRUE; /* Return address of proper part of the buffer */ return ptr->mem_buffer + (start_row - ptr->cur_start_row); } /* * Release all objects belonging to a specified pool. */ METHODDEF(void) free_pool (j_common_ptr cinfo, int pool_id) { my_mem_ptr mem = (my_mem_ptr) cinfo->mem; small_pool_ptr shdr_ptr; large_pool_ptr lhdr_ptr; size_t space_freed; if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ #ifdef MEM_STATS if (cinfo->err->trace_level > 1) print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */ #endif /* If freeing IMAGE pool, close any virtual arrays first */ if (pool_id == JPOOL_IMAGE) { jvirt_sarray_ptr sptr; jvirt_barray_ptr bptr; for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { if (sptr->b_s_open) { /* there may be no backing store */ sptr->b_s_open = FALSE; /* prevent recursive close if error */ (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); } } mem->virt_sarray_list = NULL; for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { if (bptr->b_s_open) { /* there may be no backing store */ bptr->b_s_open = FALSE; /* prevent recursive close if error */ (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); } } mem->virt_barray_list = NULL; } /* Release large objects */ lhdr_ptr = mem->large_list[pool_id]; mem->large_list[pool_id] = NULL; while (lhdr_ptr != NULL) { large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next; space_freed = lhdr_ptr->hdr.bytes_used + lhdr_ptr->hdr.bytes_left + SIZEOF(large_pool_hdr); jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); mem->total_space_allocated -= space_freed; lhdr_ptr = next_lhdr_ptr; } /* Release small objects */ shdr_ptr = mem->small_list[pool_id]; mem->small_list[pool_id] = NULL; while (shdr_ptr != NULL) { small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next; space_freed = shdr_ptr->hdr.bytes_used + shdr_ptr->hdr.bytes_left + SIZEOF(small_pool_hdr); jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); mem->total_space_allocated -= space_freed; shdr_ptr = next_shdr_ptr; } } /* * Close up shop entirely. * Note that this cannot be called unless cinfo->mem is non-NULL. */ METHODDEF(void) self_destruct (j_common_ptr cinfo) { int pool; /* Close all backing store, release all memory. * Releasing pools in reverse order might help avoid fragmentation * with some (brain-damaged) malloc libraries. */ for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { free_pool(cinfo, pool); } /* Release the memory manager control block too. */ jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); cinfo->mem = NULL; /* ensures I will be called only once */ jpeg_mem_term(cinfo); /* system-dependent cleanup */ } /* * Memory manager initialization. * When this is called, only the error manager pointer is valid in cinfo! */ GLOBAL(void) jinit_memory_mgr (j_common_ptr cinfo) { my_mem_ptr mem; long max_to_use; int pool; size_t test_mac; cinfo->mem = NULL; /* for safety if init fails */ /* Check for configuration errors. * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably * doesn't reflect any real hardware alignment requirement. * The test is a little tricky: for X>0, X and X-1 have no one-bits * in common if and only if X is a power of 2, ie has only one one-bit. * Some compilers may give an "unreachable code" warning here; ignore it. */ if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0) ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE); /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be * a multiple of SIZEOF(ALIGN_TYPE). * Again, an "unreachable code" warning may be ignored here. * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK. */ test_mac = (size_t) MAX_ALLOC_CHUNK; if ((long) test_mac != MAX_ALLOC_CHUNK || (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ /* Attempt to allocate memory manager's control block */ mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); if (mem == NULL) { jpeg_mem_term(cinfo); /* system-dependent cleanup */ ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); } /* OK, fill in the method pointers */ mem->pub.alloc_small = alloc_small; mem->pub.alloc_large = alloc_large; mem->pub.alloc_sarray = alloc_sarray; mem->pub.alloc_barray = alloc_barray; mem->pub.request_virt_sarray = request_virt_sarray; mem->pub.request_virt_barray = request_virt_barray; mem->pub.realize_virt_arrays = realize_virt_arrays; mem->pub.access_virt_sarray = access_virt_sarray; mem->pub.access_virt_barray = access_virt_barray; mem->pub.free_pool = free_pool; mem->pub.self_destruct = self_destruct; /* Make MAX_ALLOC_CHUNK accessible to other modules */ mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK; /* Initialize working state */ mem->pub.max_memory_to_use = max_to_use; for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { mem->small_list[pool] = NULL; mem->large_list[pool] = NULL; } mem->virt_sarray_list = NULL; mem->virt_barray_list = NULL; mem->total_space_allocated = SIZEOF(my_memory_mgr); /* Declare ourselves open for business */ cinfo->mem = & mem->pub; /* Check for an environment variable JPEGMEM; if found, override the * default max_memory setting from jpeg_mem_init. Note that the * surrounding application may again override this value. * If your system doesn't support getenv(), define NO_GETENV to disable * this feature. */ #ifndef NO_GETENV { char * memenv; if ((memenv = getenv("JPEGMEM")) != NULL) { char ch = 'x'; if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { if (ch == 'm' || ch == 'M') max_to_use *= 1000L; mem->pub.max_memory_to_use = max_to_use * 1000L; } } } #endif } htmldoc-1.8.27/jpeg/jcmarker.c0100664000212600000240000004153506713354635014635 0ustar mikeuser/* * jcmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains routines to write JPEG datastream markers. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" typedef enum { /* JPEG marker codes */ M_SOF0 = 0xc0, M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, M_DHT = 0xc4, M_DAC = 0xcc, M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, M_RST3 = 0xd3, M_RST4 = 0xd4, M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, M_DQT = 0xdb, M_DNL = 0xdc, M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, M_APP3 = 0xe3, M_APP4 = 0xe4, M_APP5 = 0xe5, M_APP6 = 0xe6, M_APP7 = 0xe7, M_APP8 = 0xe8, M_APP9 = 0xe9, M_APP10 = 0xea, M_APP11 = 0xeb, M_APP12 = 0xec, M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef, M_JPG0 = 0xf0, M_JPG13 = 0xfd, M_COM = 0xfe, M_TEM = 0x01, M_ERROR = 0x100 } JPEG_MARKER; /* Private state */ typedef struct { struct jpeg_marker_writer pub; /* public fields */ unsigned int last_restart_interval; /* last DRI value emitted; 0 after SOI */ } my_marker_writer; typedef my_marker_writer * my_marker_ptr; /* * Basic output routines. * * Note that we do not support suspension while writing a marker. * Therefore, an application using suspension must ensure that there is * enough buffer space for the initial markers (typ. 600-700 bytes) before * calling jpeg_start_compress, and enough space to write the trailing EOI * (a few bytes) before calling jpeg_finish_compress. Multipass compression * modes are not supported at all with suspension, so those two are the only * points where markers will be written. */ LOCAL(void) emit_byte (j_compress_ptr cinfo, int val) /* Emit a byte */ { struct jpeg_destination_mgr * dest = cinfo->dest; *(dest->next_output_byte)++ = (JOCTET) val; if (--dest->free_in_buffer == 0) { if (! (*dest->empty_output_buffer) (cinfo)) ERREXIT(cinfo, JERR_CANT_SUSPEND); } } LOCAL(void) emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark) /* Emit a marker code */ { emit_byte(cinfo, 0xFF); emit_byte(cinfo, (int) mark); } LOCAL(void) emit_2bytes (j_compress_ptr cinfo, int value) /* Emit a 2-byte integer; these are always MSB first in JPEG files */ { emit_byte(cinfo, (value >> 8) & 0xFF); emit_byte(cinfo, value & 0xFF); } /* * Routines to write specific marker types. */ LOCAL(int) emit_dqt (j_compress_ptr cinfo, int index) /* Emit a DQT marker */ /* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */ { JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index]; int prec; int i; if (qtbl == NULL) ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index); prec = 0; for (i = 0; i < DCTSIZE2; i++) { if (qtbl->quantval[i] > 255) prec = 1; } if (! qtbl->sent_table) { emit_marker(cinfo, M_DQT); emit_2bytes(cinfo, prec ? DCTSIZE2*2 + 1 + 2 : DCTSIZE2 + 1 + 2); emit_byte(cinfo, index + (prec<<4)); for (i = 0; i < DCTSIZE2; i++) { /* The table entries must be emitted in zigzag order. */ unsigned int qval = qtbl->quantval[jpeg_natural_order[i]]; if (prec) emit_byte(cinfo, (int) (qval >> 8)); emit_byte(cinfo, (int) (qval & 0xFF)); } qtbl->sent_table = TRUE; } return prec; } LOCAL(void) emit_dht (j_compress_ptr cinfo, int index, boolean is_ac) /* Emit a DHT marker */ { JHUFF_TBL * htbl; int length, i; if (is_ac) { htbl = cinfo->ac_huff_tbl_ptrs[index]; index += 0x10; /* output index has AC bit set */ } else { htbl = cinfo->dc_huff_tbl_ptrs[index]; } if (htbl == NULL) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index); if (! htbl->sent_table) { emit_marker(cinfo, M_DHT); length = 0; for (i = 1; i <= 16; i++) length += htbl->bits[i]; emit_2bytes(cinfo, length + 2 + 1 + 16); emit_byte(cinfo, index); for (i = 1; i <= 16; i++) emit_byte(cinfo, htbl->bits[i]); for (i = 0; i < length; i++) emit_byte(cinfo, htbl->huffval[i]); htbl->sent_table = TRUE; } } LOCAL(void) emit_dac (j_compress_ptr cinfo) /* Emit a DAC marker */ /* Since the useful info is so small, we want to emit all the tables in */ /* one DAC marker. Therefore this routine does its own scan of the table. */ { #ifdef C_ARITH_CODING_SUPPORTED char dc_in_use[NUM_ARITH_TBLS]; char ac_in_use[NUM_ARITH_TBLS]; int length, i; jpeg_component_info *compptr; for (i = 0; i < NUM_ARITH_TBLS; i++) dc_in_use[i] = ac_in_use[i] = 0; for (i = 0; i < cinfo->comps_in_scan; i++) { compptr = cinfo->cur_comp_info[i]; dc_in_use[compptr->dc_tbl_no] = 1; ac_in_use[compptr->ac_tbl_no] = 1; } length = 0; for (i = 0; i < NUM_ARITH_TBLS; i++) length += dc_in_use[i] + ac_in_use[i]; emit_marker(cinfo, M_DAC); emit_2bytes(cinfo, length*2 + 2); for (i = 0; i < NUM_ARITH_TBLS; i++) { if (dc_in_use[i]) { emit_byte(cinfo, i); emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4)); } if (ac_in_use[i]) { emit_byte(cinfo, i + 0x10); emit_byte(cinfo, cinfo->arith_ac_K[i]); } } #endif /* C_ARITH_CODING_SUPPORTED */ } LOCAL(void) emit_dri (j_compress_ptr cinfo) /* Emit a DRI marker */ { emit_marker(cinfo, M_DRI); emit_2bytes(cinfo, 4); /* fixed length */ emit_2bytes(cinfo, (int) cinfo->restart_interval); } LOCAL(void) emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) /* Emit a SOF marker */ { int ci; jpeg_component_info *compptr; emit_marker(cinfo, code); emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */ /* Make sure image isn't bigger than SOF field can handle */ if ((long) cinfo->image_height > 65535L || (long) cinfo->image_width > 65535L) ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535); emit_byte(cinfo, cinfo->data_precision); emit_2bytes(cinfo, (int) cinfo->image_height); emit_2bytes(cinfo, (int) cinfo->image_width); emit_byte(cinfo, cinfo->num_components); for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { emit_byte(cinfo, compptr->component_id); emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor); emit_byte(cinfo, compptr->quant_tbl_no); } } LOCAL(void) emit_sos (j_compress_ptr cinfo) /* Emit a SOS marker */ { int i, td, ta; jpeg_component_info *compptr; emit_marker(cinfo, M_SOS); emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */ emit_byte(cinfo, cinfo->comps_in_scan); for (i = 0; i < cinfo->comps_in_scan; i++) { compptr = cinfo->cur_comp_info[i]; emit_byte(cinfo, compptr->component_id); td = compptr->dc_tbl_no; ta = compptr->ac_tbl_no; if (cinfo->progressive_mode) { /* Progressive mode: only DC or only AC tables are used in one scan; * furthermore, Huffman coding of DC refinement uses no table at all. * We emit 0 for unused field(s); this is recommended by the P&M text * but does not seem to be specified in the standard. */ if (cinfo->Ss == 0) { ta = 0; /* DC scan */ if (cinfo->Ah != 0 && !cinfo->arith_code) td = 0; /* no DC table either */ } else { td = 0; /* AC scan */ } } emit_byte(cinfo, (td << 4) + ta); } emit_byte(cinfo, cinfo->Ss); emit_byte(cinfo, cinfo->Se); emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al); } LOCAL(void) emit_jfif_app0 (j_compress_ptr cinfo) /* Emit a JFIF-compliant APP0 marker */ { /* * Length of APP0 block (2 bytes) * Block ID (4 bytes - ASCII "JFIF") * Zero byte (1 byte to terminate the ID string) * Version Major, Minor (2 bytes - major first) * Units (1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm) * Xdpu (2 bytes - dots per unit horizontal) * Ydpu (2 bytes - dots per unit vertical) * Thumbnail X size (1 byte) * Thumbnail Y size (1 byte) */ emit_marker(cinfo, M_APP0); emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */ emit_byte(cinfo, 0x4A); /* Identifier: ASCII "JFIF" */ emit_byte(cinfo, 0x46); emit_byte(cinfo, 0x49); emit_byte(cinfo, 0x46); emit_byte(cinfo, 0); emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */ emit_byte(cinfo, cinfo->JFIF_minor_version); emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */ emit_2bytes(cinfo, (int) cinfo->X_density); emit_2bytes(cinfo, (int) cinfo->Y_density); emit_byte(cinfo, 0); /* No thumbnail image */ emit_byte(cinfo, 0); } LOCAL(void) emit_adobe_app14 (j_compress_ptr cinfo) /* Emit an Adobe APP14 marker */ { /* * Length of APP14 block (2 bytes) * Block ID (5 bytes - ASCII "Adobe") * Version Number (2 bytes - currently 100) * Flags0 (2 bytes - currently 0) * Flags1 (2 bytes - currently 0) * Color transform (1 byte) * * Although Adobe TN 5116 mentions Version = 101, all the Adobe files * now in circulation seem to use Version = 100, so that's what we write. * * We write the color transform byte as 1 if the JPEG color space is * YCbCr, 2 if it's YCCK, 0 otherwise. Adobe's definition has to do with * whether the encoder performed a transformation, which is pretty useless. */ emit_marker(cinfo, M_APP14); emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */ emit_byte(cinfo, 0x41); /* Identifier: ASCII "Adobe" */ emit_byte(cinfo, 0x64); emit_byte(cinfo, 0x6F); emit_byte(cinfo, 0x62); emit_byte(cinfo, 0x65); emit_2bytes(cinfo, 100); /* Version */ emit_2bytes(cinfo, 0); /* Flags0 */ emit_2bytes(cinfo, 0); /* Flags1 */ switch (cinfo->jpeg_color_space) { case JCS_YCbCr: emit_byte(cinfo, 1); /* Color transform = 1 */ break; case JCS_YCCK: emit_byte(cinfo, 2); /* Color transform = 2 */ break; default: emit_byte(cinfo, 0); /* Color transform = 0 */ break; } } /* * These routines allow writing an arbitrary marker with parameters. * The only intended use is to emit COM or APPn markers after calling * write_file_header and before calling write_frame_header. * Other uses are not guaranteed to produce desirable results. * Counting the parameter bytes properly is the caller's responsibility. */ METHODDEF(void) write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen) /* Emit an arbitrary marker header */ { if (datalen > (unsigned int) 65533) /* safety check */ ERREXIT(cinfo, JERR_BAD_LENGTH); emit_marker(cinfo, (JPEG_MARKER) marker); emit_2bytes(cinfo, (int) (datalen + 2)); /* total length */ } METHODDEF(void) write_marker_byte (j_compress_ptr cinfo, int val) /* Emit one byte of marker parameters following write_marker_header */ { emit_byte(cinfo, val); } /* * Write datastream header. * This consists of an SOI and optional APPn markers. * We recommend use of the JFIF marker, but not the Adobe marker, * when using YCbCr or grayscale data. The JFIF marker should NOT * be used for any other JPEG colorspace. The Adobe marker is helpful * to distinguish RGB, CMYK, and YCCK colorspaces. * Note that an application can write additional header markers after * jpeg_start_compress returns. */ METHODDEF(void) write_file_header (j_compress_ptr cinfo) { my_marker_ptr marker = (my_marker_ptr) cinfo->marker; emit_marker(cinfo, M_SOI); /* first the SOI */ /* SOI is defined to reset restart interval to 0 */ marker->last_restart_interval = 0; if (cinfo->write_JFIF_header) /* next an optional JFIF APP0 */ emit_jfif_app0(cinfo); if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */ emit_adobe_app14(cinfo); } /* * Write frame header. * This consists of DQT and SOFn markers. * Note that we do not emit the SOF until we have emitted the DQT(s). * This avoids compatibility problems with incorrect implementations that * try to error-check the quant table numbers as soon as they see the SOF. */ METHODDEF(void) write_frame_header (j_compress_ptr cinfo) { int ci, prec; boolean is_baseline; jpeg_component_info *compptr; /* Emit DQT for each quantization table. * Note that emit_dqt() suppresses any duplicate tables. */ prec = 0; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { prec += emit_dqt(cinfo, compptr->quant_tbl_no); } /* now prec is nonzero iff there are any 16-bit quant tables. */ /* Check for a non-baseline specification. * Note we assume that Huffman table numbers won't be changed later. */ if (cinfo->arith_code || cinfo->progressive_mode || cinfo->data_precision != 8) { is_baseline = FALSE; } else { is_baseline = TRUE; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1) is_baseline = FALSE; } if (prec && is_baseline) { is_baseline = FALSE; /* If it's baseline except for quantizer size, warn the user */ TRACEMS(cinfo, 0, JTRC_16BIT_TABLES); } } /* Emit the proper SOF marker */ if (cinfo->arith_code) { emit_sof(cinfo, M_SOF9); /* SOF code for arithmetic coding */ } else { if (cinfo->progressive_mode) emit_sof(cinfo, M_SOF2); /* SOF code for progressive Huffman */ else if (is_baseline) emit_sof(cinfo, M_SOF0); /* SOF code for baseline implementation */ else emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ } } /* * Write scan header. * This consists of DHT or DAC markers, optional DRI, and SOS. * Compressed data will be written following the SOS. */ METHODDEF(void) write_scan_header (j_compress_ptr cinfo) { my_marker_ptr marker = (my_marker_ptr) cinfo->marker; int i; jpeg_component_info *compptr; if (cinfo->arith_code) { /* Emit arith conditioning info. We may have some duplication * if the file has multiple scans, but it's so small it's hardly * worth worrying about. */ emit_dac(cinfo); } else { /* Emit Huffman tables. * Note that emit_dht() suppresses any duplicate tables. */ for (i = 0; i < cinfo->comps_in_scan; i++) { compptr = cinfo->cur_comp_info[i]; if (cinfo->progressive_mode) { /* Progressive mode: only DC or only AC tables are used in one scan */ if (cinfo->Ss == 0) { if (cinfo->Ah == 0) /* DC needs no table for refinement scan */ emit_dht(cinfo, compptr->dc_tbl_no, FALSE); } else { emit_dht(cinfo, compptr->ac_tbl_no, TRUE); } } else { /* Sequential mode: need both DC and AC tables */ emit_dht(cinfo, compptr->dc_tbl_no, FALSE); emit_dht(cinfo, compptr->ac_tbl_no, TRUE); } } } /* Emit DRI if required --- note that DRI value could change for each scan. * We avoid wasting space with unnecessary DRIs, however. */ if (cinfo->restart_interval != marker->last_restart_interval) { emit_dri(cinfo); marker->last_restart_interval = cinfo->restart_interval; } emit_sos(cinfo); } /* * Write datastream trailer. */ METHODDEF(void) write_file_trailer (j_compress_ptr cinfo) { emit_marker(cinfo, M_EOI); } /* * Write an abbreviated table-specification datastream. * This consists of SOI, DQT and DHT tables, and EOI. * Any table that is defined and not marked sent_table = TRUE will be * emitted. Note that all tables will be marked sent_table = TRUE at exit. */ METHODDEF(void) write_tables_only (j_compress_ptr cinfo) { int i; emit_marker(cinfo, M_SOI); for (i = 0; i < NUM_QUANT_TBLS; i++) { if (cinfo->quant_tbl_ptrs[i] != NULL) (void) emit_dqt(cinfo, i); } if (! cinfo->arith_code) { for (i = 0; i < NUM_HUFF_TBLS; i++) { if (cinfo->dc_huff_tbl_ptrs[i] != NULL) emit_dht(cinfo, i, FALSE); if (cinfo->ac_huff_tbl_ptrs[i] != NULL) emit_dht(cinfo, i, TRUE); } } emit_marker(cinfo, M_EOI); } /* * Initialize the marker writer module. */ GLOBAL(void) jinit_marker_writer (j_compress_ptr cinfo) { my_marker_ptr marker; /* Create the subobject */ marker = (my_marker_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_marker_writer)); cinfo->marker = (struct jpeg_marker_writer *) marker; /* Initialize method pointers */ marker->pub.write_file_header = write_file_header; marker->pub.write_frame_header = write_frame_header; marker->pub.write_scan_header = write_scan_header; marker->pub.write_file_trailer = write_file_trailer; marker->pub.write_tables_only = write_tables_only; marker->pub.write_marker_header = write_marker_header; marker->pub.write_marker_byte = write_marker_byte; /* Initialize private state */ marker->last_restart_interval = 0; } htmldoc-1.8.27/jpeg/jcsample.c0100664000212600000240000004465306713354635014641 0ustar mikeuser/* * jcsample.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains downsampling routines. * * Downsampling input data is counted in "row groups". A row group * is defined to be max_v_samp_factor pixel rows of each component, * from which the downsampler produces v_samp_factor sample rows. * A single row group is processed in each call to the downsampler module. * * The downsampler is responsible for edge-expansion of its output data * to fill an integral number of DCT blocks horizontally. The source buffer * may be modified if it is helpful for this purpose (the source buffer is * allocated wide enough to correspond to the desired output width). * The caller (the prep controller) is responsible for vertical padding. * * The downsampler may request "context rows" by setting need_context_rows * during startup. In this case, the input arrays will contain at least * one row group's worth of pixels above and below the passed-in data; * the caller will create dummy rows at image top and bottom by replicating * the first or last real pixel row. * * An excellent reference for image resampling is * Digital Image Warping, George Wolberg, 1990. * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. * * The downsampling algorithm used here is a simple average of the source * pixels covered by the output pixel. The hi-falutin sampling literature * refers to this as a "box filter". In general the characteristics of a box * filter are not very good, but for the specific cases we normally use (1:1 * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not * nearly so bad. If you intend to use other sampling ratios, you'd be well * advised to improve this code. * * A simple input-smoothing capability is provided. This is mainly intended * for cleaning up color-dithered GIF input files (if you find it inadequate, * we suggest using an external filtering program such as pnmconvol). When * enabled, each input pixel P is replaced by a weighted sum of itself and its * eight neighbors. P's weight is 1-8*SF and each neighbor's weight is SF, * where SF = (smoothing_factor / 1024). * Currently, smoothing is only supported for 2h2v sampling factors. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Pointer to routine to downsample a single component */ typedef JMETHOD(void, downsample1_ptr, (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY output_data)); /* Private subobject */ typedef struct { struct jpeg_downsampler pub; /* public fields */ /* Downsampling method pointers, one per component */ downsample1_ptr methods[MAX_COMPONENTS]; } my_downsampler; typedef my_downsampler * my_downsample_ptr; /* * Initialize for a downsampling pass. */ METHODDEF(void) start_pass_downsample (j_compress_ptr cinfo) { /* no work for now */ } /* * Expand a component horizontally from width input_cols to width output_cols, * by duplicating the rightmost samples. */ LOCAL(void) expand_right_edge (JSAMPARRAY image_data, int num_rows, JDIMENSION input_cols, JDIMENSION output_cols) { register JSAMPROW ptr; register JSAMPLE pixval; register int count; int row; int numcols = (int) (output_cols - input_cols); if (numcols > 0) { for (row = 0; row < num_rows; row++) { ptr = image_data[row] + input_cols; pixval = ptr[-1]; /* don't need GETJSAMPLE() here */ for (count = numcols; count > 0; count--) *ptr++ = pixval; } } } /* * Do downsampling for a whole row group (all components). * * In this version we simply downsample each component independently. */ METHODDEF(void) sep_downsample (j_compress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION in_row_index, JSAMPIMAGE output_buf, JDIMENSION out_row_group_index) { my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample; int ci; jpeg_component_info * compptr; JSAMPARRAY in_ptr, out_ptr; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { in_ptr = input_buf[ci] + in_row_index; out_ptr = output_buf[ci] + (out_row_group_index * compptr->v_samp_factor); (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr); } } /* * Downsample pixel values of a single component. * One row group is processed per call. * This version handles arbitrary integral sampling ratios, without smoothing. * Note that this version is not actually used for customary sampling ratios. */ METHODDEF(void) int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY output_data) { int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v; JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */ JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; JSAMPROW inptr, outptr; INT32 outvalue; h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor; v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor; numpix = h_expand * v_expand; numpix2 = numpix/2; /* Expand input data enough to let all the output samples be generated * by the standard loop. Special-casing padded output would be more * efficient. */ expand_right_edge(input_data, cinfo->max_v_samp_factor, cinfo->image_width, output_cols * h_expand); inrow = 0; for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { outptr = output_data[outrow]; for (outcol = 0, outcol_h = 0; outcol < output_cols; outcol++, outcol_h += h_expand) { outvalue = 0; for (v = 0; v < v_expand; v++) { inptr = input_data[inrow+v] + outcol_h; for (h = 0; h < h_expand; h++) { outvalue += (INT32) GETJSAMPLE(*inptr++); } } *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix); } inrow += v_expand; } } /* * Downsample pixel values of a single component. * This version handles the special case of a full-size component, * without smoothing. */ METHODDEF(void) fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY output_data) { /* Copy the data */ jcopy_sample_rows(input_data, 0, output_data, 0, cinfo->max_v_samp_factor, cinfo->image_width); /* Edge-expand */ expand_right_edge(output_data, cinfo->max_v_samp_factor, cinfo->image_width, compptr->width_in_blocks * DCTSIZE); } /* * Downsample pixel values of a single component. * This version handles the common case of 2:1 horizontal and 1:1 vertical, * without smoothing. * * A note about the "bias" calculations: when rounding fractional values to * integer, we do not want to always round 0.5 up to the next integer. * If we did that, we'd introduce a noticeable bias towards larger values. * Instead, this code is arranged so that 0.5 will be rounded up or down at * alternate pixel locations (a simple ordered dither pattern). */ METHODDEF(void) h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY output_data) { int outrow; JDIMENSION outcol; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; register JSAMPROW inptr, outptr; register int bias; /* Expand input data enough to let all the output samples be generated * by the standard loop. Special-casing padded output would be more * efficient. */ expand_right_edge(input_data, cinfo->max_v_samp_factor, cinfo->image_width, output_cols * 2); for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { outptr = output_data[outrow]; inptr = input_data[outrow]; bias = 0; /* bias = 0,1,0,1,... for successive samples */ for (outcol = 0; outcol < output_cols; outcol++) { *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1]) + bias) >> 1); bias ^= 1; /* 0=>1, 1=>0 */ inptr += 2; } } } /* * Downsample pixel values of a single component. * This version handles the standard case of 2:1 horizontal and 2:1 vertical, * without smoothing. */ METHODDEF(void) h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY output_data) { int inrow, outrow; JDIMENSION outcol; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; register JSAMPROW inptr0, inptr1, outptr; register int bias; /* Expand input data enough to let all the output samples be generated * by the standard loop. Special-casing padded output would be more * efficient. */ expand_right_edge(input_data, cinfo->max_v_samp_factor, cinfo->image_width, output_cols * 2); inrow = 0; for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { outptr = output_data[outrow]; inptr0 = input_data[inrow]; inptr1 = input_data[inrow+1]; bias = 1; /* bias = 1,2,1,2,... for successive samples */ for (outcol = 0; outcol < output_cols; outcol++) { *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]) + bias) >> 2); bias ^= 3; /* 1=>2, 2=>1 */ inptr0 += 2; inptr1 += 2; } inrow += 2; } } #ifdef INPUT_SMOOTHING_SUPPORTED /* * Downsample pixel values of a single component. * This version handles the standard case of 2:1 horizontal and 2:1 vertical, * with smoothing. One row of context is required. */ METHODDEF(void) h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY output_data) { int inrow, outrow; JDIMENSION colctr; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr; INT32 membersum, neighsum, memberscale, neighscale; /* Expand input data enough to let all the output samples be generated * by the standard loop. Special-casing padded output would be more * efficient. */ expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, cinfo->image_width, output_cols * 2); /* We don't bother to form the individual "smoothed" input pixel values; * we can directly compute the output which is the average of the four * smoothed values. Each of the four member pixels contributes a fraction * (1-8*SF) to its own smoothed image and a fraction SF to each of the three * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final * output. The four corner-adjacent neighbor pixels contribute a fraction * SF to just one smoothed pixel, or SF/4 to the final output; while the * eight edge-adjacent neighbors contribute SF to each of two smoothed * pixels, or SF/2 overall. In order to use integer arithmetic, these * factors are scaled by 2^16 = 65536. * Also recall that SF = smoothing_factor / 1024. */ memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */ neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */ inrow = 0; for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { outptr = output_data[outrow]; inptr0 = input_data[inrow]; inptr1 = input_data[inrow+1]; above_ptr = input_data[inrow-1]; below_ptr = input_data[inrow+2]; /* Special case for first column: pretend column -1 is same as column 0 */ membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]); neighsum += neighsum; neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]); membersum = membersum * memberscale + neighsum * neighscale; *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; for (colctr = output_cols - 2; colctr > 0; colctr--) { /* sum of pixels directly mapped to this output element */ membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); /* sum of edge-neighbor pixels */ neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) + GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]); /* The edge-neighbors count twice as much as corner-neighbors */ neighsum += neighsum; /* Add in the corner-neighbors */ neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) + GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]); /* form final output scaled up by 2^16 */ membersum = membersum * memberscale + neighsum * neighscale; /* round, descale and output it */ *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; } /* Special case for last column */ membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) + GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]); neighsum += neighsum; neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) + GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]); membersum = membersum * memberscale + neighsum * neighscale; *outptr = (JSAMPLE) ((membersum + 32768) >> 16); inrow += 2; } } /* * Downsample pixel values of a single component. * This version handles the special case of a full-size component, * with smoothing. One row of context is required. */ METHODDEF(void) fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, JSAMPARRAY input_data, JSAMPARRAY output_data) { int outrow; JDIMENSION colctr; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; register JSAMPROW inptr, above_ptr, below_ptr, outptr; INT32 membersum, neighsum, memberscale, neighscale; int colsum, lastcolsum, nextcolsum; /* Expand input data enough to let all the output samples be generated * by the standard loop. Special-casing padded output would be more * efficient. */ expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, cinfo->image_width, output_cols); /* Each of the eight neighbor pixels contributes a fraction SF to the * smoothed pixel, while the main pixel contributes (1-8*SF). In order * to use integer arithmetic, these factors are multiplied by 2^16 = 65536. * Also recall that SF = smoothing_factor / 1024. */ memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */ neighscale = cinfo->smoothing_factor * 64; /* scaled SF */ for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { outptr = output_data[outrow]; inptr = input_data[outrow]; above_ptr = input_data[outrow-1]; below_ptr = input_data[outrow+1]; /* Special case for first column */ colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) + GETJSAMPLE(*inptr); membersum = GETJSAMPLE(*inptr++); nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + GETJSAMPLE(*inptr); neighsum = colsum + (colsum - membersum) + nextcolsum; membersum = membersum * memberscale + neighsum * neighscale; *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); lastcolsum = colsum; colsum = nextcolsum; for (colctr = output_cols - 2; colctr > 0; colctr--) { membersum = GETJSAMPLE(*inptr++); above_ptr++; below_ptr++; nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + GETJSAMPLE(*inptr); neighsum = lastcolsum + (colsum - membersum) + nextcolsum; membersum = membersum * memberscale + neighsum * neighscale; *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); lastcolsum = colsum; colsum = nextcolsum; } /* Special case for last column */ membersum = GETJSAMPLE(*inptr); neighsum = lastcolsum + (colsum - membersum) + colsum; membersum = membersum * memberscale + neighsum * neighscale; *outptr = (JSAMPLE) ((membersum + 32768) >> 16); } } #endif /* INPUT_SMOOTHING_SUPPORTED */ /* * Module initialization routine for downsampling. * Note that we must select a routine for each component. */ GLOBAL(void) jinit_downsampler (j_compress_ptr cinfo) { my_downsample_ptr downsample; int ci; jpeg_component_info * compptr; boolean smoothok = TRUE; downsample = (my_downsample_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_downsampler)); cinfo->downsample = (struct jpeg_downsampler *) downsample; downsample->pub.start_pass = start_pass_downsample; downsample->pub.downsample = sep_downsample; downsample->pub.need_context_rows = FALSE; if (cinfo->CCIR601_sampling) ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); /* Verify we can handle the sampling factors, and set up method pointers */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { if (compptr->h_samp_factor == cinfo->max_h_samp_factor && compptr->v_samp_factor == cinfo->max_v_samp_factor) { #ifdef INPUT_SMOOTHING_SUPPORTED if (cinfo->smoothing_factor) { downsample->methods[ci] = fullsize_smooth_downsample; downsample->pub.need_context_rows = TRUE; } else #endif downsample->methods[ci] = fullsize_downsample; } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && compptr->v_samp_factor == cinfo->max_v_samp_factor) { smoothok = FALSE; downsample->methods[ci] = h2v1_downsample; } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && compptr->v_samp_factor * 2 == cinfo->max_v_samp_factor) { #ifdef INPUT_SMOOTHING_SUPPORTED if (cinfo->smoothing_factor) { downsample->methods[ci] = h2v2_smooth_downsample; downsample->pub.need_context_rows = TRUE; } else #endif downsample->methods[ci] = h2v2_downsample; } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 && (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) { smoothok = FALSE; downsample->methods[ci] = int_downsample; } else ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); } #ifdef INPUT_SMOOTHING_SUPPORTED if (cinfo->smoothing_factor && !smoothok) TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL); #endif } htmldoc-1.8.27/jpeg/jdsample.c0100664000212600000240000003777506713354635014651 0ustar mikeuser/* * jdsample.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains upsampling routines. * * Upsampling input data is counted in "row groups". A row group * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) * sample rows of each component. Upsampling will normally produce * max_v_samp_factor pixel rows from each row group (but this could vary * if the upsampler is applying a scale factor of its own). * * An excellent reference for image resampling is * Digital Image Warping, George Wolberg, 1990. * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Pointer to routine to upsample a single component */ typedef JMETHOD(void, upsample1_ptr, (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)); /* Private subobject */ typedef struct { struct jpeg_upsampler pub; /* public fields */ /* Color conversion buffer. When using separate upsampling and color * conversion steps, this buffer holds one upsampled row group until it * has been color converted and output. * Note: we do not allocate any storage for component(s) which are full-size, * ie do not need rescaling. The corresponding entry of color_buf[] is * simply set to point to the input data array, thereby avoiding copying. */ JSAMPARRAY color_buf[MAX_COMPONENTS]; /* Per-component upsampling method pointers */ upsample1_ptr methods[MAX_COMPONENTS]; int next_row_out; /* counts rows emitted from color_buf */ JDIMENSION rows_to_go; /* counts rows remaining in image */ /* Height of an input row group for each component. */ int rowgroup_height[MAX_COMPONENTS]; /* These arrays save pixel expansion factors so that int_expand need not * recompute them each time. They are unused for other upsampling methods. */ UINT8 h_expand[MAX_COMPONENTS]; UINT8 v_expand[MAX_COMPONENTS]; } my_upsampler; typedef my_upsampler * my_upsample_ptr; /* * Initialize for an upsampling pass. */ METHODDEF(void) start_pass_upsample (j_decompress_ptr cinfo) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; /* Mark the conversion buffer empty */ upsample->next_row_out = cinfo->max_v_samp_factor; /* Initialize total-height counter for detecting bottom of image */ upsample->rows_to_go = cinfo->output_height; } /* * Control routine to do upsampling (and color conversion). * * In this version we upsample each component independently. * We upsample one row group into the conversion buffer, then apply * color conversion a row at a time. */ METHODDEF(void) sep_upsample (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; int ci; jpeg_component_info * compptr; JDIMENSION num_rows; /* Fill the conversion buffer, if it's empty */ if (upsample->next_row_out >= cinfo->max_v_samp_factor) { for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Invoke per-component upsample method. Notice we pass a POINTER * to color_buf[ci], so that fullsize_upsample can change it. */ (*upsample->methods[ci]) (cinfo, compptr, input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), upsample->color_buf + ci); } upsample->next_row_out = 0; } /* Color-convert and emit rows */ /* How many we have in the buffer: */ num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); /* Not more than the distance to the end of the image. Need this test * in case the image height is not a multiple of max_v_samp_factor: */ if (num_rows > upsample->rows_to_go) num_rows = upsample->rows_to_go; /* And not more than what the client can accept: */ out_rows_avail -= *out_row_ctr; if (num_rows > out_rows_avail) num_rows = out_rows_avail; (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, (JDIMENSION) upsample->next_row_out, output_buf + *out_row_ctr, (int) num_rows); /* Adjust counts */ *out_row_ctr += num_rows; upsample->rows_to_go -= num_rows; upsample->next_row_out += num_rows; /* When the buffer is emptied, declare this input row group consumed */ if (upsample->next_row_out >= cinfo->max_v_samp_factor) (*in_row_group_ctr)++; } /* * These are the routines invoked by sep_upsample to upsample pixel values * of a single component. One row group is processed per call. */ /* * For full-size components, we just make color_buf[ci] point at the * input buffer, and thus avoid copying any data. Note that this is * safe only because sep_upsample doesn't declare the input row group * "consumed" until we are done color converting and emitting it. */ METHODDEF(void) fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { *output_data_ptr = input_data; } /* * This is a no-op version used for "uninteresting" components. * These components will not be referenced by color conversion. */ METHODDEF(void) noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { *output_data_ptr = NULL; /* safety check */ } /* * This version handles any integral sampling ratios. * This is not used for typical JPEG files, so it need not be fast. * Nor, for that matter, is it particularly accurate: the algorithm is * simple replication of the input pixel onto the corresponding output * pixels. The hi-falutin sampling literature refers to this as a * "box filter". A box filter tends to introduce visible artifacts, * so if you are actually going to use 3:1 or 4:1 sampling ratios * you would be well advised to improve this code. */ METHODDEF(void) int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; JSAMPARRAY output_data = *output_data_ptr; register JSAMPROW inptr, outptr; register JSAMPLE invalue; register int h; JSAMPROW outend; int h_expand, v_expand; int inrow, outrow; h_expand = upsample->h_expand[compptr->component_index]; v_expand = upsample->v_expand[compptr->component_index]; inrow = outrow = 0; while (outrow < cinfo->max_v_samp_factor) { /* Generate one output row with proper horizontal expansion */ inptr = input_data[inrow]; outptr = output_data[outrow]; outend = outptr + cinfo->output_width; while (outptr < outend) { invalue = *inptr++; /* don't need GETJSAMPLE() here */ for (h = h_expand; h > 0; h--) { *outptr++ = invalue; } } /* Generate any additional output rows by duplicating the first one */ if (v_expand > 1) { jcopy_sample_rows(output_data, outrow, output_data, outrow+1, v_expand-1, cinfo->output_width); } inrow++; outrow += v_expand; } } /* * Fast processing for the common case of 2:1 horizontal and 1:1 vertical. * It's still a box filter. */ METHODDEF(void) h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { JSAMPARRAY output_data = *output_data_ptr; register JSAMPROW inptr, outptr; register JSAMPLE invalue; JSAMPROW outend; int inrow; for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { inptr = input_data[inrow]; outptr = output_data[inrow]; outend = outptr + cinfo->output_width; while (outptr < outend) { invalue = *inptr++; /* don't need GETJSAMPLE() here */ *outptr++ = invalue; *outptr++ = invalue; } } } /* * Fast processing for the common case of 2:1 horizontal and 2:1 vertical. * It's still a box filter. */ METHODDEF(void) h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { JSAMPARRAY output_data = *output_data_ptr; register JSAMPROW inptr, outptr; register JSAMPLE invalue; JSAMPROW outend; int inrow, outrow; inrow = outrow = 0; while (outrow < cinfo->max_v_samp_factor) { inptr = input_data[inrow]; outptr = output_data[outrow]; outend = outptr + cinfo->output_width; while (outptr < outend) { invalue = *inptr++; /* don't need GETJSAMPLE() here */ *outptr++ = invalue; *outptr++ = invalue; } jcopy_sample_rows(output_data, outrow, output_data, outrow+1, 1, cinfo->output_width); inrow++; outrow += 2; } } /* * Fancy processing for the common case of 2:1 horizontal and 1:1 vertical. * * The upsampling algorithm is linear interpolation between pixel centers, * also known as a "triangle filter". This is a good compromise between * speed and visual quality. The centers of the output pixels are 1/4 and 3/4 * of the way between input pixel centers. * * A note about the "bias" calculations: when rounding fractional values to * integer, we do not want to always round 0.5 up to the next integer. * If we did that, we'd introduce a noticeable bias towards larger values. * Instead, this code is arranged so that 0.5 will be rounded up or down at * alternate pixel locations (a simple ordered dither pattern). */ METHODDEF(void) h2v1_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { JSAMPARRAY output_data = *output_data_ptr; register JSAMPROW inptr, outptr; register int invalue; register JDIMENSION colctr; int inrow; for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { inptr = input_data[inrow]; outptr = output_data[inrow]; /* Special case for first column */ invalue = GETJSAMPLE(*inptr++); *outptr++ = (JSAMPLE) invalue; *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(*inptr) + 2) >> 2); for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { /* General case: 3/4 * nearer pixel + 1/4 * further pixel */ invalue = GETJSAMPLE(*inptr++) * 3; *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(inptr[-2]) + 1) >> 2); *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(*inptr) + 2) >> 2); } /* Special case for last column */ invalue = GETJSAMPLE(*inptr); *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(inptr[-1]) + 1) >> 2); *outptr++ = (JSAMPLE) invalue; } } /* * Fancy processing for the common case of 2:1 horizontal and 2:1 vertical. * Again a triangle filter; see comments for h2v1 case, above. * * It is OK for us to reference the adjacent input rows because we demanded * context from the main buffer controller (see initialization code). */ METHODDEF(void) h2v2_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) { JSAMPARRAY output_data = *output_data_ptr; register JSAMPROW inptr0, inptr1, outptr; #if BITS_IN_JSAMPLE == 8 register int thiscolsum, lastcolsum, nextcolsum; #else register INT32 thiscolsum, lastcolsum, nextcolsum; #endif register JDIMENSION colctr; int inrow, outrow, v; inrow = outrow = 0; while (outrow < cinfo->max_v_samp_factor) { for (v = 0; v < 2; v++) { /* inptr0 points to nearest input row, inptr1 points to next nearest */ inptr0 = input_data[inrow]; if (v == 0) /* next nearest is row above */ inptr1 = input_data[inrow-1]; else /* next nearest is row below */ inptr1 = input_data[inrow+1]; outptr = output_data[outrow++]; /* Special case for first column */ thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 8) >> 4); *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); lastcolsum = thiscolsum; thiscolsum = nextcolsum; for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { /* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */ /* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */ nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); lastcolsum = thiscolsum; thiscolsum = nextcolsum; } /* Special case for last column */ *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 7) >> 4); } inrow++; } } /* * Module initialization routine for upsampling. */ GLOBAL(void) jinit_upsampler (j_decompress_ptr cinfo) { my_upsample_ptr upsample; int ci; jpeg_component_info * compptr; boolean need_buffer, do_fancy; int h_in_group, v_in_group, h_out_group, v_out_group; upsample = (my_upsample_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_upsampler)); cinfo->upsample = (struct jpeg_upsampler *) upsample; upsample->pub.start_pass = start_pass_upsample; upsample->pub.upsample = sep_upsample; upsample->pub.need_context_rows = FALSE; /* until we find out differently */ if (cinfo->CCIR601_sampling) /* this isn't supported */ ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); /* jdmainct.c doesn't support context rows when min_DCT_scaled_size = 1, * so don't ask for it. */ do_fancy = cinfo->do_fancy_upsampling && cinfo->min_DCT_scaled_size > 1; /* Verify we can handle the sampling factors, select per-component methods, * and create storage as needed. */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Compute size of an "input group" after IDCT scaling. This many samples * are to be converted to max_h_samp_factor * max_v_samp_factor pixels. */ h_in_group = (compptr->h_samp_factor * compptr->DCT_scaled_size) / cinfo->min_DCT_scaled_size; v_in_group = (compptr->v_samp_factor * compptr->DCT_scaled_size) / cinfo->min_DCT_scaled_size; h_out_group = cinfo->max_h_samp_factor; v_out_group = cinfo->max_v_samp_factor; upsample->rowgroup_height[ci] = v_in_group; /* save for use later */ need_buffer = TRUE; if (! compptr->component_needed) { /* Don't bother to upsample an uninteresting component. */ upsample->methods[ci] = noop_upsample; need_buffer = FALSE; } else if (h_in_group == h_out_group && v_in_group == v_out_group) { /* Fullsize components can be processed without any work. */ upsample->methods[ci] = fullsize_upsample; need_buffer = FALSE; } else if (h_in_group * 2 == h_out_group && v_in_group == v_out_group) { /* Special cases for 2h1v upsampling */ if (do_fancy && compptr->downsampled_width > 2) upsample->methods[ci] = h2v1_fancy_upsample; else upsample->methods[ci] = h2v1_upsample; } else if (h_in_group * 2 == h_out_group && v_in_group * 2 == v_out_group) { /* Special cases for 2h2v upsampling */ if (do_fancy && compptr->downsampled_width > 2) { upsample->methods[ci] = h2v2_fancy_upsample; upsample->pub.need_context_rows = TRUE; } else upsample->methods[ci] = h2v2_upsample; } else if ((h_out_group % h_in_group) == 0 && (v_out_group % v_in_group) == 0) { /* Generic integral-factors upsampling method */ upsample->methods[ci] = int_upsample; upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group); upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group); } else ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); if (need_buffer) { upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) jround_up((long) cinfo->output_width, (long) cinfo->max_h_samp_factor), (JDIMENSION) cinfo->max_v_samp_factor); } } } htmldoc-1.8.27/jpeg/jdmarker.c0100664000212600000240000012023606713354635014632 0ustar mikeuser/* * jdmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains routines to decode JPEG datastream markers. * Most of the complexity arises from our desire to support input * suspension: if not all of the data for a marker is available, * we must exit back to the application. On resumption, we reprocess * the marker. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" typedef enum { /* JPEG marker codes */ M_SOF0 = 0xc0, M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, M_DHT = 0xc4, M_DAC = 0xcc, M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, M_RST3 = 0xd3, M_RST4 = 0xd4, M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, M_DQT = 0xdb, M_DNL = 0xdc, M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, M_APP3 = 0xe3, M_APP4 = 0xe4, M_APP5 = 0xe5, M_APP6 = 0xe6, M_APP7 = 0xe7, M_APP8 = 0xe8, M_APP9 = 0xe9, M_APP10 = 0xea, M_APP11 = 0xeb, M_APP12 = 0xec, M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef, M_JPG0 = 0xf0, M_JPG13 = 0xfd, M_COM = 0xfe, M_TEM = 0x01, M_ERROR = 0x100 } JPEG_MARKER; /* Private state */ typedef struct { struct jpeg_marker_reader pub; /* public fields */ /* Application-overridable marker processing methods */ jpeg_marker_parser_method process_COM; jpeg_marker_parser_method process_APPn[16]; /* Limit on marker data length to save for each marker type */ unsigned int length_limit_COM; unsigned int length_limit_APPn[16]; /* Status of COM/APPn marker saving */ jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */ unsigned int bytes_read; /* data bytes read so far in marker */ /* Note: cur_marker is not linked into marker_list until it's all read. */ } my_marker_reader; typedef my_marker_reader * my_marker_ptr; /* * Macros for fetching data from the data source module. * * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect * the current restart point; we update them only when we have reached a * suitable place to restart if a suspension occurs. */ /* Declare and initialize local copies of input pointer/count */ #define INPUT_VARS(cinfo) \ struct jpeg_source_mgr * datasrc = (cinfo)->src; \ const JOCTET * next_input_byte = datasrc->next_input_byte; \ size_t bytes_in_buffer = datasrc->bytes_in_buffer /* Unload the local copies --- do this only at a restart boundary */ #define INPUT_SYNC(cinfo) \ ( datasrc->next_input_byte = next_input_byte, \ datasrc->bytes_in_buffer = bytes_in_buffer ) /* Reload the local copies --- used only in MAKE_BYTE_AVAIL */ #define INPUT_RELOAD(cinfo) \ ( next_input_byte = datasrc->next_input_byte, \ bytes_in_buffer = datasrc->bytes_in_buffer ) /* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available. * Note we do *not* do INPUT_SYNC before calling fill_input_buffer, * but we must reload the local copies after a successful fill. */ #define MAKE_BYTE_AVAIL(cinfo,action) \ if (bytes_in_buffer == 0) { \ if (! (*datasrc->fill_input_buffer) (cinfo)) \ { action; } \ INPUT_RELOAD(cinfo); \ } /* Read a byte into variable V. * If must suspend, take the specified action (typically "return FALSE"). */ #define INPUT_BYTE(cinfo,V,action) \ MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ bytes_in_buffer--; \ V = GETJOCTET(*next_input_byte++); ) /* As above, but read two bytes interpreted as an unsigned 16-bit integer. * V should be declared unsigned int or perhaps INT32. */ #define INPUT_2BYTES(cinfo,V,action) \ MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ bytes_in_buffer--; \ V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \ MAKE_BYTE_AVAIL(cinfo,action); \ bytes_in_buffer--; \ V += GETJOCTET(*next_input_byte++); ) /* * Routines to process JPEG markers. * * Entry condition: JPEG marker itself has been read and its code saved * in cinfo->unread_marker; input restart point is just after the marker. * * Exit: if return TRUE, have read and processed any parameters, and have * updated the restart point to point after the parameters. * If return FALSE, was forced to suspend before reaching end of * marker parameters; restart point has not been moved. Same routine * will be called again after application supplies more input data. * * This approach to suspension assumes that all of a marker's parameters * can fit into a single input bufferload. This should hold for "normal" * markers. Some COM/APPn markers might have large parameter segments * that might not fit. If we are simply dropping such a marker, we use * skip_input_data to get past it, and thereby put the problem on the * source manager's shoulders. If we are saving the marker's contents * into memory, we use a slightly different convention: when forced to * suspend, the marker processor updates the restart point to the end of * what it's consumed (ie, the end of the buffer) before returning FALSE. * On resumption, cinfo->unread_marker still contains the marker code, * but the data source will point to the next chunk of marker data. * The marker processor must retain internal state to deal with this. * * Note that we don't bother to avoid duplicate trace messages if a * suspension occurs within marker parameters. Other side effects * require more care. */ LOCAL(boolean) get_soi (j_decompress_ptr cinfo) /* Process an SOI marker */ { int i; TRACEMS(cinfo, 1, JTRC_SOI); if (cinfo->marker->saw_SOI) ERREXIT(cinfo, JERR_SOI_DUPLICATE); /* Reset all parameters that are defined to be reset by SOI */ for (i = 0; i < NUM_ARITH_TBLS; i++) { cinfo->arith_dc_L[i] = 0; cinfo->arith_dc_U[i] = 1; cinfo->arith_ac_K[i] = 5; } cinfo->restart_interval = 0; /* Set initial assumptions for colorspace etc */ cinfo->jpeg_color_space = JCS_UNKNOWN; cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ cinfo->saw_JFIF_marker = FALSE; cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ cinfo->JFIF_minor_version = 1; cinfo->density_unit = 0; cinfo->X_density = 1; cinfo->Y_density = 1; cinfo->saw_Adobe_marker = FALSE; cinfo->Adobe_transform = 0; cinfo->marker->saw_SOI = TRUE; return TRUE; } LOCAL(boolean) get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) /* Process a SOFn marker */ { INT32 length; int c, ci; jpeg_component_info * compptr; INPUT_VARS(cinfo); cinfo->progressive_mode = is_prog; cinfo->arith_code = is_arith; INPUT_2BYTES(cinfo, length, return FALSE); INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); length -= 8; TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, (int) cinfo->image_width, (int) cinfo->image_height, cinfo->num_components); if (cinfo->marker->saw_SOF) ERREXIT(cinfo, JERR_SOF_DUPLICATE); /* We don't support files in which the image height is initially specified */ /* as 0 and is later redefined by DNL. As long as we have to check that, */ /* might as well have a general sanity check. */ if (cinfo->image_height <= 0 || cinfo->image_width <= 0 || cinfo->num_components <= 0) ERREXIT(cinfo, JERR_EMPTY_IMAGE); if (length != (cinfo->num_components * 3)) ERREXIT(cinfo, JERR_BAD_LENGTH); if (cinfo->comp_info == NULL) /* do only once, even if suspend */ cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * SIZEOF(jpeg_component_info)); for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { compptr->component_index = ci; INPUT_BYTE(cinfo, compptr->component_id, return FALSE); INPUT_BYTE(cinfo, c, return FALSE); compptr->h_samp_factor = (c >> 4) & 15; compptr->v_samp_factor = (c ) & 15; INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, compptr->component_id, compptr->h_samp_factor, compptr->v_samp_factor, compptr->quant_tbl_no); } cinfo->marker->saw_SOF = TRUE; INPUT_SYNC(cinfo); return TRUE; } LOCAL(boolean) get_sos (j_decompress_ptr cinfo) /* Process a SOS marker */ { INT32 length; int i, ci, n, c, cc; jpeg_component_info * compptr; INPUT_VARS(cinfo); if (! cinfo->marker->saw_SOF) ERREXIT(cinfo, JERR_SOS_NO_SOF); INPUT_2BYTES(cinfo, length, return FALSE); INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ TRACEMS1(cinfo, 1, JTRC_SOS, n); if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN) ERREXIT(cinfo, JERR_BAD_LENGTH); cinfo->comps_in_scan = n; /* Collect the component-spec parameters */ for (i = 0; i < n; i++) { INPUT_BYTE(cinfo, cc, return FALSE); INPUT_BYTE(cinfo, c, return FALSE); for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { if (cc == compptr->component_id) goto id_found; } ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); id_found: cinfo->cur_comp_info[i] = compptr; compptr->dc_tbl_no = (c >> 4) & 15; compptr->ac_tbl_no = (c ) & 15; TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, compptr->dc_tbl_no, compptr->ac_tbl_no); } /* Collect the additional scan parameters Ss, Se, Ah/Al. */ INPUT_BYTE(cinfo, c, return FALSE); cinfo->Ss = c; INPUT_BYTE(cinfo, c, return FALSE); cinfo->Se = c; INPUT_BYTE(cinfo, c, return FALSE); cinfo->Ah = (c >> 4) & 15; cinfo->Al = (c ) & 15; TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); /* Prepare to scan data & restart markers */ cinfo->marker->next_restart_num = 0; /* Count another SOS marker */ cinfo->input_scan_number++; INPUT_SYNC(cinfo); return TRUE; } #ifdef D_ARITH_CODING_SUPPORTED LOCAL(boolean) get_dac (j_decompress_ptr cinfo) /* Process a DAC marker */ { INT32 length; int index, val; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); length -= 2; while (length > 0) { INPUT_BYTE(cinfo, index, return FALSE); INPUT_BYTE(cinfo, val, return FALSE); length -= 2; TRACEMS2(cinfo, 1, JTRC_DAC, index, val); if (index < 0 || index >= (2*NUM_ARITH_TBLS)) ERREXIT1(cinfo, JERR_DAC_INDEX, index); if (index >= NUM_ARITH_TBLS) { /* define AC table */ cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val; } else { /* define DC table */ cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); cinfo->arith_dc_U[index] = (UINT8) (val >> 4); if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) ERREXIT1(cinfo, JERR_DAC_VALUE, val); } } if (length != 0) ERREXIT(cinfo, JERR_BAD_LENGTH); INPUT_SYNC(cinfo); return TRUE; } #else /* ! D_ARITH_CODING_SUPPORTED */ #define get_dac(cinfo) skip_variable(cinfo) #endif /* D_ARITH_CODING_SUPPORTED */ LOCAL(boolean) get_dht (j_decompress_ptr cinfo) /* Process a DHT marker */ { INT32 length; UINT8 bits[17]; UINT8 huffval[256]; int i, index, count; JHUFF_TBL **htblptr; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); length -= 2; while (length > 16) { INPUT_BYTE(cinfo, index, return FALSE); TRACEMS1(cinfo, 1, JTRC_DHT, index); bits[0] = 0; count = 0; for (i = 1; i <= 16; i++) { INPUT_BYTE(cinfo, bits[i], return FALSE); count += bits[i]; } length -= 1 + 16; TRACEMS8(cinfo, 2, JTRC_HUFFBITS, bits[1], bits[2], bits[3], bits[4], bits[5], bits[6], bits[7], bits[8]); TRACEMS8(cinfo, 2, JTRC_HUFFBITS, bits[9], bits[10], bits[11], bits[12], bits[13], bits[14], bits[15], bits[16]); /* Here we just do minimal validation of the counts to avoid walking * off the end of our table space. jdhuff.c will check more carefully. */ if (count > 256 || ((INT32) count) > length) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); for (i = 0; i < count; i++) INPUT_BYTE(cinfo, huffval[i], return FALSE); length -= count; if (index & 0x10) { /* AC table definition */ index -= 0x10; htblptr = &cinfo->ac_huff_tbl_ptrs[index]; } else { /* DC table definition */ htblptr = &cinfo->dc_huff_tbl_ptrs[index]; } if (index < 0 || index >= NUM_HUFF_TBLS) ERREXIT1(cinfo, JERR_DHT_INDEX, index); if (*htblptr == NULL) *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval)); } if (length != 0) ERREXIT(cinfo, JERR_BAD_LENGTH); INPUT_SYNC(cinfo); return TRUE; } LOCAL(boolean) get_dqt (j_decompress_ptr cinfo) /* Process a DQT marker */ { INT32 length; int n, i, prec; unsigned int tmp; JQUANT_TBL *quant_ptr; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); length -= 2; while (length > 0) { INPUT_BYTE(cinfo, n, return FALSE); prec = n >> 4; n &= 0x0F; TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); if (n >= NUM_QUANT_TBLS) ERREXIT1(cinfo, JERR_DQT_INDEX, n); if (cinfo->quant_tbl_ptrs[n] == NULL) cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo); quant_ptr = cinfo->quant_tbl_ptrs[n]; for (i = 0; i < DCTSIZE2; i++) { if (prec) INPUT_2BYTES(cinfo, tmp, return FALSE); else INPUT_BYTE(cinfo, tmp, return FALSE); /* We convert the zigzag-order table to natural array order. */ quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp; } if (cinfo->err->trace_level >= 2) { for (i = 0; i < DCTSIZE2; i += 8) { TRACEMS8(cinfo, 2, JTRC_QUANTVALS, quant_ptr->quantval[i], quant_ptr->quantval[i+1], quant_ptr->quantval[i+2], quant_ptr->quantval[i+3], quant_ptr->quantval[i+4], quant_ptr->quantval[i+5], quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]); } } length -= DCTSIZE2+1; if (prec) length -= DCTSIZE2; } if (length != 0) ERREXIT(cinfo, JERR_BAD_LENGTH); INPUT_SYNC(cinfo); return TRUE; } LOCAL(boolean) get_dri (j_decompress_ptr cinfo) /* Process a DRI marker */ { INT32 length; unsigned int tmp; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); if (length != 4) ERREXIT(cinfo, JERR_BAD_LENGTH); INPUT_2BYTES(cinfo, tmp, return FALSE); TRACEMS1(cinfo, 1, JTRC_DRI, tmp); cinfo->restart_interval = tmp; INPUT_SYNC(cinfo); return TRUE; } /* * Routines for processing APPn and COM markers. * These are either saved in memory or discarded, per application request. * APP0 and APP14 are specially checked to see if they are * JFIF and Adobe markers, respectively. */ #define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */ #define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */ #define APPN_DATA_LEN 14 /* Must be the largest of the above!! */ LOCAL(void) examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data, unsigned int datalen, INT32 remaining) /* Examine first few bytes from an APP0. * Take appropriate action if it is a JFIF marker. * datalen is # of bytes at data[], remaining is length of rest of marker data. */ { INT32 totallen = (INT32) datalen + remaining; if (datalen >= APP0_DATA_LEN && GETJOCTET(data[0]) == 0x4A && GETJOCTET(data[1]) == 0x46 && GETJOCTET(data[2]) == 0x49 && GETJOCTET(data[3]) == 0x46 && GETJOCTET(data[4]) == 0) { /* Found JFIF APP0 marker: save info */ cinfo->saw_JFIF_marker = TRUE; cinfo->JFIF_major_version = GETJOCTET(data[5]); cinfo->JFIF_minor_version = GETJOCTET(data[6]); cinfo->density_unit = GETJOCTET(data[7]); cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); /* Check version. * Major version must be 1, anything else signals an incompatible change. * (We used to treat this as an error, but now it's a nonfatal warning, * because some bozo at Hijaak couldn't read the spec.) * Minor version should be 0..2, but process anyway if newer. */ if (cinfo->JFIF_major_version != 1) WARNMS2(cinfo, JWRN_JFIF_MAJOR, cinfo->JFIF_major_version, cinfo->JFIF_minor_version); /* Generate trace messages */ TRACEMS5(cinfo, 1, JTRC_JFIF, cinfo->JFIF_major_version, cinfo->JFIF_minor_version, cinfo->X_density, cinfo->Y_density, cinfo->density_unit); /* Validate thumbnail dimensions and issue appropriate messages */ if (GETJOCTET(data[12]) | GETJOCTET(data[13])) TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, GETJOCTET(data[12]), GETJOCTET(data[13])); totallen -= APP0_DATA_LEN; if (totallen != ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); } else if (datalen >= 6 && GETJOCTET(data[0]) == 0x4A && GETJOCTET(data[1]) == 0x46 && GETJOCTET(data[2]) == 0x58 && GETJOCTET(data[3]) == 0x58 && GETJOCTET(data[4]) == 0) { /* Found JFIF "JFXX" extension APP0 marker */ /* The library doesn't actually do anything with these, * but we try to produce a helpful trace message. */ switch (GETJOCTET(data[5])) { case 0x10: TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen); break; case 0x11: TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen); break; case 0x13: TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen); break; default: TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, GETJOCTET(data[5]), (int) totallen); break; } } else { /* Start of APP0 does not match "JFIF" or "JFXX", or too short */ TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); } } LOCAL(void) examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data, unsigned int datalen, INT32 remaining) /* Examine first few bytes from an APP14. * Take appropriate action if it is an Adobe marker. * datalen is # of bytes at data[], remaining is length of rest of marker data. */ { unsigned int version, flags0, flags1, transform; if (datalen >= APP14_DATA_LEN && GETJOCTET(data[0]) == 0x41 && GETJOCTET(data[1]) == 0x64 && GETJOCTET(data[2]) == 0x6F && GETJOCTET(data[3]) == 0x62 && GETJOCTET(data[4]) == 0x65) { /* Found Adobe APP14 marker */ version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); transform = GETJOCTET(data[11]); TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); cinfo->saw_Adobe_marker = TRUE; cinfo->Adobe_transform = (UINT8) transform; } else { /* Start of APP14 does not match "Adobe", or too short */ TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); } } METHODDEF(boolean) get_interesting_appn (j_decompress_ptr cinfo) /* Process an APP0 or APP14 marker without saving it */ { INT32 length; JOCTET b[APPN_DATA_LEN]; unsigned int i, numtoread; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); length -= 2; /* get the interesting part of the marker data */ if (length >= APPN_DATA_LEN) numtoread = APPN_DATA_LEN; else if (length > 0) numtoread = (unsigned int) length; else numtoread = 0; for (i = 0; i < numtoread; i++) INPUT_BYTE(cinfo, b[i], return FALSE); length -= numtoread; /* process it */ switch (cinfo->unread_marker) { case M_APP0: examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length); break; case M_APP14: examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length); break; default: /* can't get here unless jpeg_save_markers chooses wrong processor */ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); break; } /* skip any remaining data -- could be lots */ INPUT_SYNC(cinfo); if (length > 0) (*cinfo->src->skip_input_data) (cinfo, (long) length); return TRUE; } #ifdef SAVE_MARKERS_SUPPORTED METHODDEF(boolean) save_marker (j_decompress_ptr cinfo) /* Save an APPn or COM marker into the marker list */ { my_marker_ptr marker = (my_marker_ptr) cinfo->marker; jpeg_saved_marker_ptr cur_marker = marker->cur_marker; unsigned int bytes_read, data_length; JOCTET FAR * data; INT32 length = 0; INPUT_VARS(cinfo); if (cur_marker == NULL) { /* begin reading a marker */ INPUT_2BYTES(cinfo, length, return FALSE); length -= 2; if (length >= 0) { /* watch out for bogus length word */ /* figure out how much we want to save */ unsigned int limit; if (cinfo->unread_marker == (int) M_COM) limit = marker->length_limit_COM; else limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0]; if ((unsigned int) length < limit) limit = (unsigned int) length; /* allocate and initialize the marker item */ cur_marker = (jpeg_saved_marker_ptr) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(struct jpeg_marker_struct) + limit); cur_marker->next = NULL; cur_marker->marker = (UINT8) cinfo->unread_marker; cur_marker->original_length = (unsigned int) length; cur_marker->data_length = limit; /* data area is just beyond the jpeg_marker_struct */ data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1); marker->cur_marker = cur_marker; marker->bytes_read = 0; bytes_read = 0; data_length = limit; } else { /* deal with bogus length word */ bytes_read = data_length = 0; data = NULL; } } else { /* resume reading a marker */ bytes_read = marker->bytes_read; data_length = cur_marker->data_length; data = cur_marker->data + bytes_read; } while (bytes_read < data_length) { INPUT_SYNC(cinfo); /* move the restart point to here */ marker->bytes_read = bytes_read; /* If there's not at least one byte in buffer, suspend */ MAKE_BYTE_AVAIL(cinfo, return FALSE); /* Copy bytes with reasonable rapidity */ while (bytes_read < data_length && bytes_in_buffer > 0) { *data++ = *next_input_byte++; bytes_in_buffer--; bytes_read++; } } /* Done reading what we want to read */ if (cur_marker != NULL) { /* will be NULL if bogus length word */ /* Add new marker to end of list */ if (cinfo->marker_list == NULL) { cinfo->marker_list = cur_marker; } else { jpeg_saved_marker_ptr prev = cinfo->marker_list; while (prev->next != NULL) prev = prev->next; prev->next = cur_marker; } /* Reset pointer & calc remaining data length */ data = cur_marker->data; length = cur_marker->original_length - data_length; } /* Reset to initial state for next marker */ marker->cur_marker = NULL; /* Process the marker if interesting; else just make a generic trace msg */ switch (cinfo->unread_marker) { case M_APP0: examine_app0(cinfo, data, data_length, length); break; case M_APP14: examine_app14(cinfo, data, data_length, length); break; default: TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) (data_length + length)); break; } /* skip any remaining data -- could be lots */ INPUT_SYNC(cinfo); /* do before skip_input_data */ if (length > 0) (*cinfo->src->skip_input_data) (cinfo, (long) length); return TRUE; } #endif /* SAVE_MARKERS_SUPPORTED */ METHODDEF(boolean) skip_variable (j_decompress_ptr cinfo) /* Skip over an unknown or uninteresting variable-length marker */ { INT32 length; INPUT_VARS(cinfo); INPUT_2BYTES(cinfo, length, return FALSE); length -= 2; TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); INPUT_SYNC(cinfo); /* do before skip_input_data */ if (length > 0) (*cinfo->src->skip_input_data) (cinfo, (long) length); return TRUE; } /* * Find the next JPEG marker, save it in cinfo->unread_marker. * Returns FALSE if had to suspend before reaching a marker; * in that case cinfo->unread_marker is unchanged. * * Note that the result might not be a valid marker code, * but it will never be 0 or FF. */ LOCAL(boolean) next_marker (j_decompress_ptr cinfo) { int c; INPUT_VARS(cinfo); for (;;) { INPUT_BYTE(cinfo, c, return FALSE); /* Skip any non-FF bytes. * This may look a bit inefficient, but it will not occur in a valid file. * We sync after each discarded byte so that a suspending data source * can discard the byte from its buffer. */ while (c != 0xFF) { cinfo->marker->discarded_bytes++; INPUT_SYNC(cinfo); INPUT_BYTE(cinfo, c, return FALSE); } /* This loop swallows any duplicate FF bytes. Extra FFs are legal as * pad bytes, so don't count them in discarded_bytes. We assume there * will not be so many consecutive FF bytes as to overflow a suspending * data source's input buffer. */ do { INPUT_BYTE(cinfo, c, return FALSE); } while (c == 0xFF); if (c != 0) break; /* found a valid marker, exit loop */ /* Reach here if we found a stuffed-zero data sequence (FF/00). * Discard it and loop back to try again. */ cinfo->marker->discarded_bytes += 2; INPUT_SYNC(cinfo); } if (cinfo->marker->discarded_bytes != 0) { WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); cinfo->marker->discarded_bytes = 0; } cinfo->unread_marker = c; INPUT_SYNC(cinfo); return TRUE; } LOCAL(boolean) first_marker (j_decompress_ptr cinfo) /* Like next_marker, but used to obtain the initial SOI marker. */ /* For this marker, we do not allow preceding garbage or fill; otherwise, * we might well scan an entire input file before realizing it ain't JPEG. * If an application wants to process non-JFIF files, it must seek to the * SOI before calling the JPEG library. */ { int c, c2; INPUT_VARS(cinfo); INPUT_BYTE(cinfo, c, return FALSE); INPUT_BYTE(cinfo, c2, return FALSE); if (c != 0xFF || c2 != (int) M_SOI) ERREXIT2(cinfo, JERR_NO_SOI, c, c2); cinfo->unread_marker = c2; INPUT_SYNC(cinfo); return TRUE; } /* * Read markers until SOS or EOI. * * Returns same codes as are defined for jpeg_consume_input: * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. */ METHODDEF(int) read_markers (j_decompress_ptr cinfo) { /* Outer loop repeats once for each marker. */ for (;;) { /* Collect the marker proper, unless we already did. */ /* NB: first_marker() enforces the requirement that SOI appear first. */ if (cinfo->unread_marker == 0) { if (! cinfo->marker->saw_SOI) { if (! first_marker(cinfo)) return JPEG_SUSPENDED; } else { if (! next_marker(cinfo)) return JPEG_SUSPENDED; } } /* At this point cinfo->unread_marker contains the marker code and the * input point is just past the marker proper, but before any parameters. * A suspension will cause us to return with this state still true. */ switch (cinfo->unread_marker) { case M_SOI: if (! get_soi(cinfo)) return JPEG_SUSPENDED; break; case M_SOF0: /* Baseline */ case M_SOF1: /* Extended sequential, Huffman */ if (! get_sof(cinfo, FALSE, FALSE)) return JPEG_SUSPENDED; break; case M_SOF2: /* Progressive, Huffman */ if (! get_sof(cinfo, TRUE, FALSE)) return JPEG_SUSPENDED; break; case M_SOF9: /* Extended sequential, arithmetic */ if (! get_sof(cinfo, FALSE, TRUE)) return JPEG_SUSPENDED; break; case M_SOF10: /* Progressive, arithmetic */ if (! get_sof(cinfo, TRUE, TRUE)) return JPEG_SUSPENDED; break; /* Currently unsupported SOFn types */ case M_SOF3: /* Lossless, Huffman */ case M_SOF5: /* Differential sequential, Huffman */ case M_SOF6: /* Differential progressive, Huffman */ case M_SOF7: /* Differential lossless, Huffman */ case M_JPG: /* Reserved for JPEG extensions */ case M_SOF11: /* Lossless, arithmetic */ case M_SOF13: /* Differential sequential, arithmetic */ case M_SOF14: /* Differential progressive, arithmetic */ case M_SOF15: /* Differential lossless, arithmetic */ ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker); break; case M_SOS: if (! get_sos(cinfo)) return JPEG_SUSPENDED; cinfo->unread_marker = 0; /* processed the marker */ return JPEG_REACHED_SOS; case M_EOI: TRACEMS(cinfo, 1, JTRC_EOI); cinfo->unread_marker = 0; /* processed the marker */ return JPEG_REACHED_EOI; case M_DAC: if (! get_dac(cinfo)) return JPEG_SUSPENDED; break; case M_DHT: if (! get_dht(cinfo)) return JPEG_SUSPENDED; break; case M_DQT: if (! get_dqt(cinfo)) return JPEG_SUSPENDED; break; case M_DRI: if (! get_dri(cinfo)) return JPEG_SUSPENDED; break; case M_APP0: case M_APP1: case M_APP2: case M_APP3: case M_APP4: case M_APP5: case M_APP6: case M_APP7: case M_APP8: case M_APP9: case M_APP10: case M_APP11: case M_APP12: case M_APP13: case M_APP14: case M_APP15: if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[ cinfo->unread_marker - (int) M_APP0]) (cinfo)) return JPEG_SUSPENDED; break; case M_COM: if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) return JPEG_SUSPENDED; break; case M_RST0: /* these are all parameterless */ case M_RST1: case M_RST2: case M_RST3: case M_RST4: case M_RST5: case M_RST6: case M_RST7: case M_TEM: TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker); break; case M_DNL: /* Ignore DNL ... perhaps the wrong thing */ if (! skip_variable(cinfo)) return JPEG_SUSPENDED; break; default: /* must be DHP, EXP, JPGn, or RESn */ /* For now, we treat the reserved markers as fatal errors since they are * likely to be used to signal incompatible JPEG Part 3 extensions. * Once the JPEG 3 version-number marker is well defined, this code * ought to change! */ ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); break; } /* Successfully processed marker, so reset state variable */ cinfo->unread_marker = 0; } /* end loop */ } /* * Read a restart marker, which is expected to appear next in the datastream; * if the marker is not there, take appropriate recovery action. * Returns FALSE if suspension is required. * * This is called by the entropy decoder after it has read an appropriate * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder * has already read a marker from the data source. Under normal conditions * cinfo->unread_marker will be reset to 0 before returning; if not reset, * it holds a marker which the decoder will be unable to read past. */ METHODDEF(boolean) read_restart_marker (j_decompress_ptr cinfo) { /* Obtain a marker unless we already did. */ /* Note that next_marker will complain if it skips any data. */ if (cinfo->unread_marker == 0) { if (! next_marker(cinfo)) return FALSE; } if (cinfo->unread_marker == ((int) M_RST0 + cinfo->marker->next_restart_num)) { /* Normal case --- swallow the marker and let entropy decoder continue */ TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); cinfo->unread_marker = 0; } else { /* Uh-oh, the restart markers have been messed up. */ /* Let the data source manager determine how to resync. */ if (! (*cinfo->src->resync_to_restart) (cinfo, cinfo->marker->next_restart_num)) return FALSE; } /* Update next-restart state */ cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; return TRUE; } /* * This is the default resync_to_restart method for data source managers * to use if they don't have any better approach. Some data source managers * may be able to back up, or may have additional knowledge about the data * which permits a more intelligent recovery strategy; such managers would * presumably supply their own resync method. * * read_restart_marker calls resync_to_restart if it finds a marker other than * the restart marker it was expecting. (This code is *not* used unless * a nonzero restart interval has been declared.) cinfo->unread_marker is * the marker code actually found (might be anything, except 0 or FF). * The desired restart marker number (0..7) is passed as a parameter. * This routine is supposed to apply whatever error recovery strategy seems * appropriate in order to position the input stream to the next data segment. * Note that cinfo->unread_marker is treated as a marker appearing before * the current data-source input point; usually it should be reset to zero * before returning. * Returns FALSE if suspension is required. * * This implementation is substantially constrained by wanting to treat the * input as a data stream; this means we can't back up. Therefore, we have * only the following actions to work with: * 1. Simply discard the marker and let the entropy decoder resume at next * byte of file. * 2. Read forward until we find another marker, discarding intervening * data. (In theory we could look ahead within the current bufferload, * without having to discard data if we don't find the desired marker. * This idea is not implemented here, in part because it makes behavior * dependent on buffer size and chance buffer-boundary positions.) * 3. Leave the marker unread (by failing to zero cinfo->unread_marker). * This will cause the entropy decoder to process an empty data segment, * inserting dummy zeroes, and then we will reprocess the marker. * * #2 is appropriate if we think the desired marker lies ahead, while #3 is * appropriate if the found marker is a future restart marker (indicating * that we have missed the desired restart marker, probably because it got * corrupted). * We apply #2 or #3 if the found marker is a restart marker no more than * two counts behind or ahead of the expected one. We also apply #2 if the * found marker is not a legal JPEG marker code (it's certainly bogus data). * If the found marker is a restart marker more than 2 counts away, we do #1 * (too much risk that the marker is erroneous; with luck we will be able to * resync at some future point). * For any valid non-restart JPEG marker, we apply #3. This keeps us from * overrunning the end of a scan. An implementation limited to single-scan * files might find it better to apply #2 for markers other than EOI, since * any other marker would have to be bogus data in that case. */ GLOBAL(boolean) jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired) { int marker = cinfo->unread_marker; int action = 1; /* Always put up a warning. */ WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); /* Outer loop handles repeated decision after scanning forward. */ for (;;) { if (marker < (int) M_SOF0) action = 2; /* invalid marker */ else if (marker < (int) M_RST0 || marker > (int) M_RST7) action = 3; /* valid non-restart marker */ else { if (marker == ((int) M_RST0 + ((desired+1) & 7)) || marker == ((int) M_RST0 + ((desired+2) & 7))) action = 3; /* one of the next two expected restarts */ else if (marker == ((int) M_RST0 + ((desired-1) & 7)) || marker == ((int) M_RST0 + ((desired-2) & 7))) action = 2; /* a prior restart, so advance */ else action = 1; /* desired restart or too far away */ } TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); switch (action) { case 1: /* Discard marker and let entropy decoder resume processing. */ cinfo->unread_marker = 0; return TRUE; case 2: /* Scan to the next marker, and repeat the decision loop. */ if (! next_marker(cinfo)) return FALSE; marker = cinfo->unread_marker; break; case 3: /* Return without advancing past this marker. */ /* Entropy decoder will be forced to process an empty segment. */ return TRUE; } } /* end loop */ } /* * Reset marker processing state to begin a fresh datastream. */ METHODDEF(void) reset_marker_reader (j_decompress_ptr cinfo) { my_marker_ptr marker = (my_marker_ptr) cinfo->marker; cinfo->comp_info = NULL; /* until allocated by get_sof */ cinfo->input_scan_number = 0; /* no SOS seen yet */ cinfo->unread_marker = 0; /* no pending marker */ marker->pub.saw_SOI = FALSE; /* set internal state too */ marker->pub.saw_SOF = FALSE; marker->pub.discarded_bytes = 0; marker->cur_marker = NULL; } /* * Initialize the marker reader module. * This is called only once, when the decompression object is created. */ GLOBAL(void) jinit_marker_reader (j_decompress_ptr cinfo) { my_marker_ptr marker; int i; /* Create subobject in permanent pool */ marker = (my_marker_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_marker_reader)); cinfo->marker = (struct jpeg_marker_reader *) marker; /* Initialize public method pointers */ marker->pub.reset_marker_reader = reset_marker_reader; marker->pub.read_markers = read_markers; marker->pub.read_restart_marker = read_restart_marker; /* Initialize COM/APPn processing. * By default, we examine and then discard APP0 and APP14, * but simply discard COM and all other APPn. */ marker->process_COM = skip_variable; marker->length_limit_COM = 0; for (i = 0; i < 16; i++) { marker->process_APPn[i] = skip_variable; marker->length_limit_APPn[i] = 0; } marker->process_APPn[0] = get_interesting_appn; marker->process_APPn[14] = get_interesting_appn; /* Reset marker processing state */ reset_marker_reader(cinfo); } /* * Control saving of COM and APPn markers into marker_list. */ #ifdef SAVE_MARKERS_SUPPORTED GLOBAL(void) jpeg_save_markers (j_decompress_ptr cinfo, int marker_code, unsigned int length_limit) { my_marker_ptr marker = (my_marker_ptr) cinfo->marker; long maxlength; jpeg_marker_parser_method processor; /* Length limit mustn't be larger than what we can allocate * (should only be a concern in a 16-bit environment). */ maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct); if (((long) length_limit) > maxlength) length_limit = (unsigned int) maxlength; /* Choose processor routine to use. * APP0/APP14 have special requirements. */ if (length_limit) { processor = save_marker; /* If saving APP0/APP14, save at least enough for our internal use. */ if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN) length_limit = APP0_DATA_LEN; else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN) length_limit = APP14_DATA_LEN; } else { processor = skip_variable; /* If discarding APP0/APP14, use our regular on-the-fly processor. */ if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14) processor = get_interesting_appn; } if (marker_code == (int) M_COM) { marker->process_COM = processor; marker->length_limit_COM = length_limit; } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) { marker->process_APPn[marker_code - (int) M_APP0] = processor; marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit; } else ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); } #endif /* SAVE_MARKERS_SUPPORTED */ /* * Install a special processing method for COM or APPn markers. */ GLOBAL(void) jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code, jpeg_marker_parser_method routine) { my_marker_ptr marker = (my_marker_ptr) cinfo->marker; if (marker_code == (int) M_COM) marker->process_COM = routine; else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) marker->process_APPn[marker_code - (int) M_APP0] = routine; else ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); } htmldoc-1.8.27/jpeg/jfdctflt.c0100664000212600000240000001255606713354635014640 0ustar mikeuser/* * jfdctflt.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains a floating-point implementation of the * forward DCT (Discrete Cosine Transform). * * This implementation should be more accurate than either of the integer * DCT implementations. However, it may not give the same results on all * machines because of differences in roundoff behavior. Speed will depend * on the hardware's floating point capacity. * * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT * on each column. Direct algorithms are also available, but they are * much more complex and seem not to be any faster when reduced to code. * * This implementation is based on Arai, Agui, and Nakajima's algorithm for * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in * Japanese, but the algorithm is described in the Pennebaker & Mitchell * JPEG textbook (see REFERENCES section in file README). The following code * is based directly on figure 4-8 in P&M. * While an 8-point DCT cannot be done in less than 11 multiplies, it is * possible to arrange the computation so that many of the multiplies are * simple scalings of the final outputs. These multiplies can then be * folded into the multiplications or divisions by the JPEG quantization * table entries. The AA&N method leaves only 5 multiplies and 29 adds * to be done in the DCT itself. * The primary disadvantage of this method is that with a fixed-point * implementation, accuracy is lost due to imprecise representation of the * scaled quantization values. However, that problem does not arise if * we use floating point arithmetic. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef DCT_FLOAT_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* * Perform the forward DCT on one block of samples. */ GLOBAL(void) jpeg_fdct_float (FAST_FLOAT * data) { FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FAST_FLOAT tmp10, tmp11, tmp12, tmp13; FAST_FLOAT z1, z2, z3, z4, z5, z11, z13; FAST_FLOAT *dataptr; int ctr; /* Pass 1: process rows. */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { tmp0 = dataptr[0] + dataptr[7]; tmp7 = dataptr[0] - dataptr[7]; tmp1 = dataptr[1] + dataptr[6]; tmp6 = dataptr[1] - dataptr[6]; tmp2 = dataptr[2] + dataptr[5]; tmp5 = dataptr[2] - dataptr[5]; tmp3 = dataptr[3] + dataptr[4]; tmp4 = dataptr[3] - dataptr[4]; /* Even part */ tmp10 = tmp0 + tmp3; /* phase 2 */ tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; dataptr[0] = tmp10 + tmp11; /* phase 3 */ dataptr[4] = tmp10 - tmp11; z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ dataptr[2] = tmp13 + z1; /* phase 5 */ dataptr[6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ z11 = tmp7 + z3; /* phase 5 */ z13 = tmp7 - z3; dataptr[5] = z13 + z2; /* phase 6 */ dataptr[3] = z13 - z2; dataptr[1] = z11 + z4; dataptr[7] = z11 - z4; dataptr += DCTSIZE; /* advance pointer to next row */ } /* Pass 2: process columns. */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; /* Even part */ tmp10 = tmp0 + tmp3; /* phase 2 */ tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ dataptr[DCTSIZE*4] = tmp10 - tmp11; z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ dataptr[DCTSIZE*6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ z11 = tmp7 + z3; /* phase 5 */ z13 = tmp7 - z3; dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ dataptr[DCTSIZE*3] = z13 - z2; dataptr[DCTSIZE*1] = z11 + z4; dataptr[DCTSIZE*7] = z11 - z4; dataptr++; /* advance pointer to next column */ } } #endif /* DCT_FLOAT_SUPPORTED */ htmldoc-1.8.27/jpeg/jmorecfg.h0100664000212600000240000002620507202351136014620 0ustar mikeuser/* * jmorecfg.h * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains additional configuration options that customize the * JPEG software for special applications or support machine-dependent * optimizations. Most users will not need to touch this file. */ /* * Define BITS_IN_JSAMPLE as either * 8 for 8-bit sample values (the usual setting) * 12 for 12-bit sample values * Only 8 and 12 are legal data precisions for lossy JPEG according to the * JPEG standard, and the IJG code does not support anything else! * We do not support run-time selection of data precision, sorry. */ #define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ /* * Maximum number of components (color channels) allowed in JPEG image. * To meet the letter of the JPEG spec, set this to 255. However, darn * few applications need more than 4 channels (maybe 5 for CMYK + alpha * mask). We recommend 10 as a reasonable compromise; use 4 if you are * really short on memory. (Each allowed component costs a hundred or so * bytes of storage, whether actually used in an image or not.) */ #define MAX_COMPONENTS 10 /* maximum number of image components */ /* * Basic data types. * You may need to change these if you have a machine with unusual data * type sizes; for example, "char" not 8 bits, "short" not 16 bits, * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, * but it had better be at least 16. */ /* Representation of a single sample (pixel element value). * We frequently allocate large arrays of these, so it's important to keep * them small. But if you have memory to burn and access to char or short * arrays is very slow on your hardware, you might want to change these. */ #if BITS_IN_JSAMPLE == 8 /* JSAMPLE should be the smallest type that will hold the values 0..255. * You can use a signed char by having GETJSAMPLE mask it with 0xFF. */ typedef unsigned char JSAMPLE; #define GETJSAMPLE(value) ((int) (value)) #define MAXJSAMPLE 255 #define CENTERJSAMPLE 128 #endif /* BITS_IN_JSAMPLE == 8 */ #if BITS_IN_JSAMPLE == 12 /* JSAMPLE should be the smallest type that will hold the values 0..4095. * On nearly all machines "short" will do nicely. */ typedef short JSAMPLE; #define GETJSAMPLE(value) ((int) (value)) #define MAXJSAMPLE 4095 #define CENTERJSAMPLE 2048 #endif /* BITS_IN_JSAMPLE == 12 */ /* Representation of a DCT frequency coefficient. * This should be a signed value of at least 16 bits; "short" is usually OK. * Again, we allocate large arrays of these, but you can change to int * if you have memory to burn and "short" is really slow. */ typedef short JCOEF; /* Compressed datastreams are represented as arrays of JOCTET. * These must be EXACTLY 8 bits wide, at least once they are written to * external storage. Note that when using the stdio data source/destination * managers, this is also the data type passed to fread/fwrite. */ typedef unsigned char JOCTET; #define GETJOCTET(value) (value) /* These typedefs are used for various table entries and so forth. * They must be at least as wide as specified; but making them too big * won't cost a huge amount of memory, so we don't provide special * extraction code like we did for JSAMPLE. (In other words, these * typedefs live at a different point on the speed/space tradeoff curve.) */ /* UINT8 must hold at least the values 0..255. */ typedef unsigned char UINT8; /* UINT16 must hold at least the values 0..65535. */ typedef unsigned short UINT16; /* INT16 must hold at least the values -32768..32767. */ #ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ typedef short INT16; #endif /* INT32 must hold at least signed 32-bit values. */ #ifndef XMD_H typedef int INT32; #endif /* Datatype used for image dimensions. The JPEG standard only supports * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore * "unsigned int" is sufficient on all machines. However, if you need to * handle larger images and you don't mind deviating from the spec, you * can change this datatype. */ typedef unsigned int JDIMENSION; #define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ /* These macros are used in all function definitions and extern declarations. * You could modify them if you need to change function linkage conventions; * in particular, you'll need to do that to make the library a Windows DLL. * Another application is to make all functions global for use with debuggers * or code profilers that require it. */ /* a function called through method pointers: */ #define METHODDEF(type) static type /* a function used only in its module: */ #define LOCAL(type) static type /* a function referenced thru EXTERNs: */ #define GLOBAL(type) type /* a reference to a GLOBAL function: */ #define EXTERN(type) extern type /* This macro is used to declare a "method", that is, a function pointer. * We want to supply prototype parameters if the compiler can cope. * Note that the arglist parameter must be parenthesized! * Again, you can customize this if you need special linkage keywords. */ #define JMETHOD(type,methodname,arglist) type (*methodname) arglist /* Here is the pseudo-keyword for declaring pointers that must be "far" * on 80x86 machines. Most of the specialized coding for 80x86 is handled * by just saying "FAR *" where such a pointer is needed. In a few places * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. */ #undef FAR #define FAR /* * On a few systems, type boolean and/or its values FALSE, TRUE may appear * in standard header files. Or you may have conflicts with application- * specific header files that you want to include together with these files. * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. */ #ifndef HAVE_BOOLEAN typedef char boolean; #endif #ifndef FALSE /* in case these macros already exist */ #define FALSE 0 /* values of boolean */ #endif #ifndef TRUE #define TRUE 1 #endif /* * The remaining options affect code selection within the JPEG library, * but they don't need to be visible to most applications using the library. * To minimize application namespace pollution, the symbols won't be * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. */ #ifdef JPEG_INTERNALS #define JPEG_INTERNAL_OPTIONS #endif #ifdef JPEG_INTERNAL_OPTIONS /* * These defines indicate whether to include various optional functions. * Undefining some of these symbols will produce a smaller but less capable * library. Note that you can leave certain source files out of the * compilation/linking process if you've #undef'd the corresponding symbols. * (You may HAVE to do that if your compiler doesn't like null source files.) */ /* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ /* Capability options common to encoder and decoder: */ #define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ #define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ #define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ /* Encoder capability options: */ #undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ #define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ #define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ #define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ /* Note: if you selected 12-bit data precision, it is dangerous to turn off * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit * precision, so jchuff.c normally uses entropy optimization to compute * usable tables for higher precision. If you don't want to do optimization, * you'll have to supply different default Huffman tables. * The exact same statements apply for progressive JPEG: the default tables * don't work for progressive mode. (This may get fixed, however.) */ #define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ /* Decoder capability options: */ #undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ #define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ #define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ #define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ #define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ #undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ #define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ #define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ #define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ /* more capability options later, no doubt */ /* * Ordering of RGB data in scanlines passed to or from the application. * If your application wants to deal with data in the order B,G,R, just * change these macros. You can also deal with formats such as R,G,B,X * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing * the offsets will also change the order in which colormap data is organized. * RESTRICTIONS: * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not * useful if you are using JPEG color spaces other than YCbCr or grayscale. * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE * is not 3 (they don't understand about dummy color components!). So you * can't use color quantization if you change that value. */ #define RGB_RED 0 /* Offset of Red in an RGB scanline element */ #define RGB_GREEN 1 /* Offset of Green */ #define RGB_BLUE 2 /* Offset of Blue */ #define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ /* Definitions for speed-related optimizations. */ /* If your compiler supports inline functions, define INLINE * as the inline keyword; otherwise define it as empty. */ #ifndef INLINE #ifdef __GNUC__ /* for instance, GNU C knows about inline */ #define INLINE __inline__ #endif #ifndef INLINE #define INLINE /* default is to define it as empty */ #endif #endif /* On some machines (notably 68000 series) "int" is 32 bits, but multiplying * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER * as short on such a machine. MULTIPLIER must be at least 16 bits wide. */ #ifndef MULTIPLIER #define MULTIPLIER int /* type for fastest integer multiply */ #endif /* FAST_FLOAT should be either float or double, whichever is done faster * by your compiler. (Note that this type is only used in the floating point * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) * Typically, float is faster in ANSI C compilers, while double is faster in * pre-ANSI compilers (because they insist on converting to double anyway). * The code below therefore chooses float if we have ANSI-style prototypes. */ #ifndef FAST_FLOAT #ifdef HAVE_PROTOTYPES #define FAST_FLOAT float #else #define FAST_FLOAT double #endif #endif #endif /* JPEG_INTERNAL_OPTIONS */ htmldoc-1.8.27/jpeg/jinclude.h0100664000212600000240000000626206713354635014637 0ustar mikeuser/* * jinclude.h * * Copyright (C) 1991-1994, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file exists to provide a single place to fix any problems with * including the wrong system include files. (Common problems are taken * care of by the standard jconfig symbols, but on really weird systems * you may have to edit this file.) * * NOTE: this file is NOT intended to be included by applications using the * JPEG library. Most applications need only include jpeglib.h. */ /* Include auto-config file to find out which system include files we need. */ #include "jconfig.h" /* auto configuration options */ #define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ /* * We need the NULL macro and size_t typedef. * On an ANSI-conforming system it is sufficient to include . * Otherwise, we get them from or ; we may have to * pull in as well. * Note that the core JPEG library does not require ; * only the default error handler and data source/destination modules do. * But we must pull it in because of the references to FILE in jpeglib.h. * You can remove those references if you want to compile without . */ #ifdef HAVE_STDDEF_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef NEED_SYS_TYPES_H #include #endif #include /* * We need memory copying and zeroing functions, plus strncpy(). * ANSI and System V implementations declare these in . * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). * Some systems may declare memset and memcpy in . * * NOTE: we assume the size parameters to these functions are of type size_t. * Change the casts in these macros if not! */ #ifdef NEED_BSD_STRINGS #include #define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) #define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) #else /* not BSD, assume ANSI/SysV string lib */ #include #define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) #define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) #endif /* * In ANSI C, and indeed any rational implementation, size_t is also the * type returned by sizeof(). However, it seems there are some irrational * implementations out there, in which sizeof() returns an int even though * size_t is defined as long or unsigned long. To ensure consistent results * we always use this SIZEOF() macro in place of using sizeof() directly. */ #define SIZEOF(object) ((size_t) sizeof(object)) /* * The modules that use fread() and fwrite() always invoke them through * these macros. On some systems you may need to twiddle the argument casts. * CAUTION: argument order is different from underlying functions! */ #define JFREAD(file,buf,sizeofbuf) \ ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) #define JFWRITE(file,buf,sizeofbuf) \ ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) htmldoc-1.8.27/jpeg/libjpeg.doc0100664000212600000240000046715206713354635015005 0ustar mikeuserUSING THE IJG JPEG LIBRARY Copyright (C) 1994-1998, Thomas G. Lane. This file is part of the Independent JPEG Group's software. For conditions of distribution and use, see the accompanying README file. This file describes how to use the IJG JPEG library within an application program. Read it if you want to write a program that uses the library. The file example.c provides heavily commented skeleton code for calling the JPEG library. Also see jpeglib.h (the include file to be used by application programs) for full details about data structures and function parameter lists. The library source code, of course, is the ultimate reference. Note that there have been *major* changes from the application interface presented by IJG version 4 and earlier versions. The old design had several inherent limitations, and it had accumulated a lot of cruft as we added features while trying to minimize application-interface changes. We have sacrificed backward compatibility in the version 5 rewrite, but we think the improvements justify this. TABLE OF CONTENTS ----------------- Overview: Functions provided by the library Outline of typical usage Basic library usage: Data formats Compression details Decompression details Mechanics of usage: include files, linking, etc Advanced features: Compression parameter selection Decompression parameter selection Special color spaces Error handling Compressed data handling (source and destination managers) I/O suspension Progressive JPEG support Buffered-image mode Abbreviated datastreams and multiple images Special markers Raw (downsampled) image data Really raw data: DCT coefficients Progress monitoring Memory management Memory usage Library compile-time options Portability considerations Notes for MS-DOS implementors You should read at least the overview and basic usage sections before trying to program with the library. The sections on advanced features can be read if and when you need them. OVERVIEW ======== Functions provided by the library --------------------------------- The IJG JPEG library provides C code to read and write JPEG-compressed image files. The surrounding application program receives or supplies image data a scanline at a time, using a straightforward uncompressed image format. All details of color conversion and other preprocessing/postprocessing can be handled by the library. The library includes a substantial amount of code that is not covered by the JPEG standard but is necessary for typical applications of JPEG. These functions preprocess the image before JPEG compression or postprocess it after decompression. They include colorspace conversion, downsampling/upsampling, and color quantization. The application indirectly selects use of this code by specifying the format in which it wishes to supply or receive image data. For example, if colormapped output is requested, then the decompression library automatically invokes color quantization. A wide range of quality vs. speed tradeoffs are possible in JPEG processing, and even more so in decompression postprocessing. The decompression library provides multiple implementations that cover most of the useful tradeoffs, ranging from very-high-quality down to fast-preview operation. On the compression side we have generally not provided low-quality choices, since compression is normally less time-critical. It should be understood that the low-quality modes may not meet the JPEG standard's accuracy requirements; nonetheless, they are useful for viewers. A word about functions *not* provided by the library. We handle a subset of the ISO JPEG standard; most baseline, extended-sequential, and progressive JPEG processes are supported. (Our subset includes all features now in common use.) Unsupported ISO options include: * Hierarchical storage * Lossless JPEG * Arithmetic entropy coding (unsupported for legal reasons) * DNL marker * Nonintegral subsampling ratios We support both 8- and 12-bit data precision, but this is a compile-time choice rather than a run-time choice; hence it is difficult to use both precisions in a single application. By itself, the library handles only interchange JPEG datastreams --- in particular the widely used JFIF file format. The library can be used by surrounding code to process interchange or abbreviated JPEG datastreams that are embedded in more complex file formats. (For example, this library is used by the free LIBTIFF library to support JPEG compression in TIFF.) Outline of typical usage ------------------------ The rough outline of a JPEG compression operation is: Allocate and initialize a JPEG compression object Specify the destination for the compressed data (eg, a file) Set parameters for compression, including image size & colorspace jpeg_start_compress(...); while (scan lines remain to be written) jpeg_write_scanlines(...); jpeg_finish_compress(...); Release the JPEG compression object A JPEG compression object holds parameters and working state for the JPEG library. We make creation/destruction of the object separate from starting or finishing compression of an image; the same object can be re-used for a series of image compression operations. This makes it easy to re-use the same parameter settings for a sequence of images. Re-use of a JPEG object also has important implications for processing abbreviated JPEG datastreams, as discussed later. The image data to be compressed is supplied to jpeg_write_scanlines() from in-memory buffers. If the application is doing file-to-file compression, reading image data from the source file is the application's responsibility. The library emits compressed data by calling a "data destination manager", which typically will write the data into a file; but the application can provide its own destination manager to do something else. Similarly, the rough outline of a JPEG decompression operation is: Allocate and initialize a JPEG decompression object Specify the source of the compressed data (eg, a file) Call jpeg_read_header() to obtain image info Set parameters for decompression jpeg_start_decompress(...); while (scan lines remain to be read) jpeg_read_scanlines(...); jpeg_finish_decompress(...); Release the JPEG decompression object This is comparable to the compression outline except that reading the datastream header is a separate step. This is helpful because information about the image's size, colorspace, etc is available when the application selects decompression parameters. For example, the application can choose an output scaling ratio that will fit the image into the available screen size. The decompression library obtains compressed data by calling a data source manager, which typically will read the data from a file; but other behaviors can be obtained with a custom source manager. Decompressed data is delivered into in-memory buffers passed to jpeg_read_scanlines(). It is possible to abort an incomplete compression or decompression operation by calling jpeg_abort(); or, if you do not need to retain the JPEG object, simply release it by calling jpeg_destroy(). JPEG compression and decompression objects are two separate struct types. However, they share some common fields, and certain routines such as jpeg_destroy() can work on either type of object. The JPEG library has no static variables: all state is in the compression or decompression object. Therefore it is possible to process multiple compression and decompression operations concurrently, using multiple JPEG objects. Both compression and decompression can be done in an incremental memory-to- memory fashion, if suitable source/destination managers are used. See the section on "I/O suspension" for more details. BASIC LIBRARY USAGE =================== Data formats ------------ Before diving into procedural details, it is helpful to understand the image data format that the JPEG library expects or returns. The standard input image format is a rectangular array of pixels, with each pixel having the same number of "component" or "sample" values (color channels). You must specify how many components there are and the colorspace interpretation of the components. Most applications will use RGB data (three components per pixel) or grayscale data (one component per pixel). PLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE. A remarkable number of people manage to miss this, only to find that their programs don't work with grayscale JPEG files. There is no provision for colormapped input. JPEG files are always full-color or full grayscale (or sometimes another colorspace such as CMYK). You can feed in a colormapped image by expanding it to full-color format. However JPEG often doesn't work very well with source data that has been colormapped, because of dithering noise. This is discussed in more detail in the JPEG FAQ and the other references mentioned in the README file. Pixels are stored by scanlines, with each scanline running from left to right. The component values for each pixel are adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color. Each scanline is an array of data type JSAMPLE --- which is typically "unsigned char", unless you've changed jmorecfg.h. (You can also change the RGB pixel layout, say to B,G,R order, by modifying jmorecfg.h. But see the restrictions listed in that file before doing so.) A 2-D array of pixels is formed by making a list of pointers to the starts of scanlines; so the scanlines need not be physically adjacent in memory. Even if you process just one scanline at a time, you must make a one-element pointer array to conform to this structure. Pointers to JSAMPLE rows are of type JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY. The library accepts or supplies one or more complete scanlines per call. It is not possible to process part of a row at a time. Scanlines are always processed top-to-bottom. You can process an entire image in one call if you have it all in memory, but usually it's simplest to process one scanline at a time. For best results, source data values should have the precision specified by BITS_IN_JSAMPLE (normally 8 bits). For instance, if you choose to compress data that's only 6 bits/channel, you should left-justify each value in a byte before passing it to the compressor. If you need to compress data that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12. (See "Library compile-time options", later.) The data format returned by the decompressor is the same in all details, except that colormapped output is supported. (Again, a JPEG file is never colormapped. But you can ask the decompressor to perform on-the-fly color quantization to deliver colormapped output.) If you request colormapped output then the returned data array contains a single JSAMPLE per pixel; its value is an index into a color map. The color map is represented as a 2-D JSAMPARRAY in which each row holds the values of one color component, that is, colormap[i][j] is the value of the i'th color component for pixel value (map index) j. Note that since the colormap indexes are stored in JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE (ie, at most 256 colors for an 8-bit JPEG library). Compression details ------------------- Here we revisit the JPEG compression outline given in the overview. 1. Allocate and initialize a JPEG compression object. A JPEG compression object is a "struct jpeg_compress_struct". (It also has a bunch of subsidiary structures which are allocated via malloc(), but the application doesn't control those directly.) This struct can be just a local variable in the calling routine, if a single routine is going to execute the whole JPEG compression sequence. Otherwise it can be static or allocated from malloc(). You will also need a structure representing a JPEG error handler. The part of this that the library cares about is a "struct jpeg_error_mgr". If you are providing your own error handler, you'll typically want to embed the jpeg_error_mgr struct in a larger structure; this is discussed later under "Error handling". For now we'll assume you are just using the default error handler. The default error handler will print JPEG error/warning messages on stderr, and it will call exit() if a fatal error occurs. You must initialize the error handler structure, store a pointer to it into the JPEG object's "err" field, and then call jpeg_create_compress() to initialize the rest of the JPEG object. Typical code for this step, if you are using the default error handler, is struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; ... cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_create_compress allocates a small amount of memory, so it could fail if you are out of memory. In that case it will exit via the error handler; that's why the error handler must be initialized first. 2. Specify the destination for the compressed data (eg, a file). As previously mentioned, the JPEG library delivers compressed data to a "data destination" module. The library includes one data destination module which knows how to write to a stdio stream. You can use your own destination module if you want to do something else, as discussed later. If you use the standard destination module, you must open the target stdio stream beforehand. Typical code for this step looks like: FILE * outfile; ... if ((outfile = fopen(filename, "wb")) == NULL) { fprintf(stderr, "can't open %s\n", filename); exit(1); } jpeg_stdio_dest(&cinfo, outfile); where the last line invokes the standard destination module. WARNING: it is critical that the binary compressed data be delivered to the output file unchanged. On non-Unix systems the stdio library may perform newline translation or otherwise corrupt binary data. To suppress this behavior, you may need to use a "b" option to fopen (as shown above), or use setmode() or another routine to put the stdio stream in binary mode. See cjpeg.c and djpeg.c for code that has been found to work on many systems. You can select the data destination after setting other parameters (step 3), if that's more convenient. You may not change the destination between calling jpeg_start_compress() and jpeg_finish_compress(). 3. Set parameters for compression, including image size & colorspace. You must supply information about the source image by setting the following fields in the JPEG object (cinfo structure): image_width Width of image, in pixels image_height Height of image, in pixels input_components Number of color channels (samples per pixel) in_color_space Color space of source image The image dimensions are, hopefully, obvious. JPEG supports image dimensions of 1 to 64K pixels in either direction. The input color space is typically RGB or grayscale, and input_components is 3 or 1 accordingly. (See "Special color spaces", later, for more info.) The in_color_space field must be assigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or JCS_GRAYSCALE. JPEG has a large number of compression parameters that determine how the image is encoded. Most applications don't need or want to know about all these parameters. You can set all the parameters to reasonable defaults by calling jpeg_set_defaults(); then, if there are particular values you want to change, you can do so after that. The "Compression parameter selection" section tells about all the parameters. You must set in_color_space correctly before calling jpeg_set_defaults(), because the defaults depend on the source image colorspace. However the other three source image parameters need not be valid until you call jpeg_start_compress(). There's no harm in calling jpeg_set_defaults() more than once, if that happens to be convenient. Typical code for a 24-bit RGB source image is cinfo.image_width = Width; /* image width and height, in pixels */ cinfo.image_height = Height; cinfo.input_components = 3; /* # of color components per pixel */ cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ jpeg_set_defaults(&cinfo); /* Make optional parameter settings here */ 4. jpeg_start_compress(...); After you have established the data destination and set all the necessary source image info and other parameters, call jpeg_start_compress() to begin a compression cycle. This will initialize internal state, allocate working storage, and emit the first few bytes of the JPEG datastream header. Typical code: jpeg_start_compress(&cinfo, TRUE); The "TRUE" parameter ensures that a complete JPEG interchange datastream will be written. This is appropriate in most cases. If you think you might want to use an abbreviated datastream, read the section on abbreviated datastreams, below. Once you have called jpeg_start_compress(), you may not alter any JPEG parameters or other fields of the JPEG object until you have completed the compression cycle. 5. while (scan lines remain to be written) jpeg_write_scanlines(...); Now write all the required image data by calling jpeg_write_scanlines() one or more times. You can pass one or more scanlines in each call, up to the total image height. In most applications it is convenient to pass just one or a few scanlines at a time. The expected format for the passed data is discussed under "Data formats", above. Image data should be written in top-to-bottom scanline order. The JPEG spec contains some weasel wording about how top and bottom are application-defined terms (a curious interpretation of the English language...) but if you want your files to be compatible with everyone else's, you WILL use top-to-bottom order. If the source data must be read in bottom-to-top order, you can use the JPEG library's virtual array mechanism to invert the data efficiently. Examples of this can be found in the sample application cjpeg. The library maintains a count of the number of scanlines written so far in the next_scanline field of the JPEG object. Usually you can just use this variable as the loop counter, so that the loop test looks like "while (cinfo.next_scanline < cinfo.image_height)". Code for this step depends heavily on the way that you store the source data. example.c shows the following code for the case of a full-size 2-D source array containing 3-byte RGB pixels: JSAMPROW row_pointer[1]; /* pointer to a single row */ int row_stride; /* physical row width in buffer */ row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ while (cinfo.next_scanline < cinfo.image_height) { row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_write_scanlines() returns the number of scanlines actually written. This will normally be equal to the number passed in, so you can usually ignore the return value. It is different in just two cases: * If you try to write more scanlines than the declared image height, the additional scanlines are ignored. * If you use a suspending data destination manager, output buffer overrun will cause the compressor to return before accepting all the passed lines. This feature is discussed under "I/O suspension", below. The normal stdio destination manager will NOT cause this to happen. In any case, the return value is the same as the change in the value of next_scanline. 6. jpeg_finish_compress(...); After all the image data has been written, call jpeg_finish_compress() to complete the compression cycle. This step is ESSENTIAL to ensure that the last bufferload of data is written to the data destination. jpeg_finish_compress() also releases working memory associated with the JPEG object. Typical code: jpeg_finish_compress(&cinfo); If using the stdio destination manager, don't forget to close the output stdio stream (if necessary) afterwards. If you have requested a multi-pass operating mode, such as Huffman code optimization, jpeg_finish_compress() will perform the additional passes using data buffered by the first pass. In this case jpeg_finish_compress() may take quite a while to complete. With the default compression parameters, this will not happen. It is an error to call jpeg_finish_compress() before writing the necessary total number of scanlines. If you wish to abort compression, call jpeg_abort() as discussed below. After completing a compression cycle, you may dispose of the JPEG object as discussed next, or you may use it to compress another image. In that case return to step 2, 3, or 4 as appropriate. If you do not change the destination manager, the new datastream will be written to the same target. If you do not change any JPEG parameters, the new datastream will be written with the same parameters as before. Note that you can change the input image dimensions freely between cycles, but if you change the input colorspace, you should call jpeg_set_defaults() to adjust for the new colorspace; and then you'll need to repeat all of step 3. 7. Release the JPEG compression object. When you are done with a JPEG compression object, destroy it by calling jpeg_destroy_compress(). This will free all subsidiary memory (regardless of the previous state of the object). Or you can call jpeg_destroy(), which works for either compression or decompression objects --- this may be more convenient if you are sharing code between compression and decompression cases. (Actually, these routines are equivalent except for the declared type of the passed pointer. To avoid gripes from ANSI C compilers, jpeg_destroy() should be passed a j_common_ptr.) If you allocated the jpeg_compress_struct structure from malloc(), freeing it is your responsibility --- jpeg_destroy() won't. Ditto for the error handler structure. Typical code: jpeg_destroy_compress(&cinfo); 8. Aborting. If you decide to abort a compression cycle before finishing, you can clean up in either of two ways: * If you don't need the JPEG object any more, just call jpeg_destroy_compress() or jpeg_destroy() to release memory. This is legitimate at any point after calling jpeg_create_compress() --- in fact, it's safe even if jpeg_create_compress() fails. * If you want to re-use the JPEG object, call jpeg_abort_compress(), or call jpeg_abort() which works on both compression and decompression objects. This will return the object to an idle state, releasing any working memory. jpeg_abort() is allowed at any time after successful object creation. Note that cleaning up the data destination, if required, is your responsibility; neither of these routines will call term_destination(). (See "Compressed data handling", below, for more about that.) jpeg_destroy() and jpeg_abort() are the only safe calls to make on a JPEG object that has reported an error by calling error_exit (see "Error handling" for more info). The internal state of such an object is likely to be out of whack. Either of these two routines will return the object to a known state. Decompression details --------------------- Here we revisit the JPEG decompression outline given in the overview. 1. Allocate and initialize a JPEG decompression object. This is just like initialization for compression, as discussed above, except that the object is a "struct jpeg_decompress_struct" and you call jpeg_create_decompress(). Error handling is exactly the same. Typical code: struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; ... cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); (Both here and in the IJG code, we usually use variable name "cinfo" for both compression and decompression objects.) 2. Specify the source of the compressed data (eg, a file). As previously mentioned, the JPEG library reads compressed data from a "data source" module. The library includes one data source module which knows how to read from a stdio stream. You can use your own source module if you want to do something else, as discussed later. If you use the standard source module, you must open the source stdio stream beforehand. Typical code for this step looks like: FILE * infile; ... if ((infile = fopen(filename, "rb")) == NULL) { fprintf(stderr, "can't open %s\n", filename); exit(1); } jpeg_stdio_src(&cinfo, infile); where the last line invokes the standard source module. WARNING: it is critical that the binary compressed data be read unchanged. On non-Unix systems the stdio library may perform newline translation or otherwise corrupt binary data. To suppress this behavior, you may need to use a "b" option to fopen (as shown above), or use setmode() or another routine to put the stdio stream in binary mode. See cjpeg.c and djpeg.c for code that has been found to work on many systems. You may not change the data source between calling jpeg_read_header() and jpeg_finish_decompress(). If you wish to read a series of JPEG images from a single source file, you should repeat the jpeg_read_header() to jpeg_finish_decompress() sequence without reinitializing either the JPEG object or the data source module; this prevents buffered input data from being discarded. 3. Call jpeg_read_header() to obtain image info. Typical code for this step is just jpeg_read_header(&cinfo, TRUE); This will read the source datastream header markers, up to the beginning of the compressed data proper. On return, the image dimensions and other info have been stored in the JPEG object. The application may wish to consult this information before selecting decompression parameters. More complex code is necessary if * A suspending data source is used --- in that case jpeg_read_header() may return before it has read all the header data. See "I/O suspension", below. The normal stdio source manager will NOT cause this to happen. * Abbreviated JPEG files are to be processed --- see the section on abbreviated datastreams. Standard applications that deal only in interchange JPEG files need not be concerned with this case either. It is permissible to stop at this point if you just wanted to find out the image dimensions and other header info for a JPEG file. In that case, call jpeg_destroy() when you are done with the JPEG object, or call jpeg_abort() to return it to an idle state before selecting a new data source and reading another header. 4. Set parameters for decompression. jpeg_read_header() sets appropriate default decompression parameters based on the properties of the image (in particular, its colorspace). However, you may well want to alter these defaults before beginning the decompression. For example, the default is to produce full color output from a color file. If you want colormapped output you must ask for it. Other options allow the returned image to be scaled and allow various speed/quality tradeoffs to be selected. "Decompression parameter selection", below, gives details. If the defaults are appropriate, nothing need be done at this step. Note that all default values are set by each call to jpeg_read_header(). If you reuse a decompression object, you cannot expect your parameter settings to be preserved across cycles, as you can for compression. You must set desired parameter values each time. 5. jpeg_start_decompress(...); Once the parameter values are satisfactory, call jpeg_start_decompress() to begin decompression. This will initialize internal state, allocate working memory, and prepare for returning data. Typical code is just jpeg_start_decompress(&cinfo); If you have requested a multi-pass operating mode, such as 2-pass color quantization, jpeg_start_decompress() will do everything needed before data output can begin. In this case jpeg_start_decompress() may take quite a while to complete. With a single-scan (non progressive) JPEG file and default decompression parameters, this will not happen; jpeg_start_decompress() will return quickly. After this call, the final output image dimensions, including any requested scaling, are available in the JPEG object; so is the selected colormap, if colormapped output has been requested. Useful fields include output_width image width and height, as scaled output_height out_color_components # of color components in out_color_space output_components # of color components returned per pixel colormap the selected colormap, if any actual_number_of_colors number of entries in colormap output_components is 1 (a colormap index) when quantizing colors; otherwise it equals out_color_components. It is the number of JSAMPLE values that will be emitted per pixel in the output arrays. Typically you will need to allocate data buffers to hold the incoming image. You will need output_width * output_components JSAMPLEs per scanline in your output buffer, and a total of output_height scanlines will be returned. Note: if you are using the JPEG library's internal memory manager to allocate data buffers (as djpeg does), then the manager's protocol requires that you request large buffers *before* calling jpeg_start_decompress(). This is a little tricky since the output_XXX fields are not normally valid then. You can make them valid by calling jpeg_calc_output_dimensions() after setting the relevant parameters (scaling, output color space, and quantization flag). 6. while (scan lines remain to be read) jpeg_read_scanlines(...); Now you can read the decompressed image data by calling jpeg_read_scanlines() one or more times. At each call, you pass in the maximum number of scanlines to be read (ie, the height of your working buffer); jpeg_read_scanlines() will return up to that many lines. The return value is the number of lines actually read. The format of the returned data is discussed under "Data formats", above. Don't forget that grayscale and color JPEGs will return different data formats! Image data is returned in top-to-bottom scanline order. If you must write out the image in bottom-to-top order, you can use the JPEG library's virtual array mechanism to invert the data efficiently. Examples of this can be found in the sample application djpeg. The library maintains a count of the number of scanlines returned so far in the output_scanline field of the JPEG object. Usually you can just use this variable as the loop counter, so that the loop test looks like "while (cinfo.output_scanline < cinfo.output_height)". (Note that the test should NOT be against image_height, unless you never use scaling. The image_height field is the height of the original unscaled image.) The return value always equals the change in the value of output_scanline. If you don't use a suspending data source, it is safe to assume that jpeg_read_scanlines() reads at least one scanline per call, until the bottom of the image has been reached. If you use a buffer larger than one scanline, it is NOT safe to assume that jpeg_read_scanlines() fills it. (The current implementation returns only a few scanlines per call, no matter how large a buffer you pass.) So you must always provide a loop that calls jpeg_read_scanlines() repeatedly until the whole image has been read. 7. jpeg_finish_decompress(...); After all the image data has been read, call jpeg_finish_decompress() to complete the decompression cycle. This causes working memory associated with the JPEG object to be released. Typical code: jpeg_finish_decompress(&cinfo); If using the stdio source manager, don't forget to close the source stdio stream if necessary. It is an error to call jpeg_finish_decompress() before reading the correct total number of scanlines. If you wish to abort decompression, call jpeg_abort() as discussed below. After completing a decompression cycle, you may dispose of the JPEG object as discussed next, or you may use it to decompress another image. In that case return to step 2 or 3 as appropriate. If you do not change the source manager, the next image will be read from the same source. 8. Release the JPEG decompression object. When you are done with a JPEG decompression object, destroy it by calling jpeg_destroy_decompress() or jpeg_destroy(). The previous discussion of destroying compression objects applies here too. Typical code: jpeg_destroy_decompress(&cinfo); 9. Aborting. You can abort a decompression cycle by calling jpeg_destroy_decompress() or jpeg_destroy() if you don't need the JPEG object any more, or jpeg_abort_decompress() or jpeg_abort() if you want to reuse the object. The previous discussion of aborting compression cycles applies here too. Mechanics of usage: include files, linking, etc ----------------------------------------------- Applications using the JPEG library should include the header file jpeglib.h to obtain declarations of data types and routines. Before including jpeglib.h, include system headers that define at least the typedefs FILE and size_t. On ANSI-conforming systems, including is sufficient; on older Unix systems, you may need to define size_t. If the application needs to refer to individual JPEG library error codes, also include jerror.h to define those symbols. jpeglib.h indirectly includes the files jconfig.h and jmorecfg.h. If you are installing the JPEG header files in a system directory, you will want to install all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h. The most convenient way to include the JPEG code into your executable program is to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix machines) and reference it at your link step. If you use only half of the library (only compression or only decompression), only that much code will be included from the library, unless your linker is hopelessly brain-damaged. The supplied makefiles build libjpeg.a automatically (see install.doc). While you can build the JPEG library as a shared library if the whim strikes you, we don't really recommend it. The trouble with shared libraries is that at some point you'll probably try to substitute a new version of the library without recompiling the calling applications. That generally doesn't work because the parameter struct declarations usually change with each new version. In other words, the library's API is *not* guaranteed binary compatible across versions; we only try to ensure source-code compatibility. (In hindsight, it might have been smarter to hide the parameter structs from applications and introduce a ton of access functions instead. Too late now, however.) On some systems your application may need to set up a signal handler to ensure that temporary files are deleted if the program is interrupted. This is most critical if you are on MS-DOS and use the jmemdos.c memory manager back end; it will try to grab extended memory for temp files, and that space will NOT be freed automatically. See cjpeg.c or djpeg.c for an example signal handler. It may be worth pointing out that the core JPEG library does not actually require the stdio library: only the default source/destination managers and error handler need it. You can use the library in a stdio-less environment if you replace those modules and use jmemnobs.c (or another memory manager of your own devising). More info about the minimum system library requirements may be found in jinclude.h. ADVANCED FEATURES ================= Compression parameter selection ------------------------------- This section describes all the optional parameters you can set for JPEG compression, as well as the "helper" routines provided to assist in this task. Proper setting of some parameters requires detailed understanding of the JPEG standard; if you don't know what a parameter is for, it's best not to mess with it! See REFERENCES in the README file for pointers to more info about JPEG. It's a good idea to call jpeg_set_defaults() first, even if you plan to set all the parameters; that way your code is more likely to work with future JPEG libraries that have additional parameters. For the same reason, we recommend you use a helper routine where one is provided, in preference to twiddling cinfo fields directly. The helper routines are: jpeg_set_defaults (j_compress_ptr cinfo) This routine sets all JPEG parameters to reasonable defaults, using only the input image's color space (field in_color_space, which must already be set in cinfo). Many applications will only need to use this routine and perhaps jpeg_set_quality(). jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) Sets the JPEG file's colorspace (field jpeg_color_space) as specified, and sets other color-space-dependent parameters appropriately. See "Special color spaces", below, before using this. A large number of parameters, including all per-component parameters, are set by this routine; if you want to twiddle individual parameters you should call jpeg_set_colorspace() before rather than after. jpeg_default_colorspace (j_compress_ptr cinfo) Selects an appropriate JPEG colorspace based on cinfo->in_color_space, and calls jpeg_set_colorspace(). This is actually a subroutine of jpeg_set_defaults(). It's broken out in case you want to change just the colorspace-dependent JPEG parameters. jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) Constructs JPEG quantization tables appropriate for the indicated quality setting. The quality value is expressed on the 0..100 scale recommended by IJG (cjpeg's "-quality" switch uses this routine). Note that the exact mapping from quality values to tables may change in future IJG releases as more is learned about DCT quantization. If the force_baseline parameter is TRUE, then the quantization table entries are constrained to the range 1..255 for full JPEG baseline compatibility. In the current implementation, this only makes a difference for quality settings below 25, and it effectively prevents very small/low quality files from being generated. The IJG decoder is capable of reading the non-baseline files generated at low quality settings when force_baseline is FALSE, but other decoders may not be. jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, boolean force_baseline) Same as jpeg_set_quality() except that the generated tables are the sample tables given in the JPEC spec section K.1, multiplied by the specified scale factor (which is expressed as a percentage; thus scale_factor = 100 reproduces the spec's tables). Note that larger scale factors give lower quality. This entry point is useful for conforming to the Adobe PostScript DCT conventions, but we do not recommend linear scaling as a user-visible quality scale otherwise. force_baseline again constrains the computed table entries to 1..255. int jpeg_quality_scaling (int quality) Converts a value on the IJG-recommended quality scale to a linear scaling percentage. Note that this routine may change or go away in future releases --- IJG may choose to adopt a scaling method that can't be expressed as a simple scalar multiplier, in which case the premise of this routine collapses. Caveat user. jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline) Allows an arbitrary quantization table to be created. which_tbl indicates which table slot to fill. basic_table points to an array of 64 unsigned ints given in normal array order. These values are multiplied by scale_factor/100 and then clamped to the range 1..65535 (or to 1..255 if force_baseline is TRUE). CAUTION: prior to library version 6a, jpeg_add_quant_table expected the basic table to be given in JPEG zigzag order. If you need to write code that works with either older or newer versions of this routine, you must check the library version number. Something like "#if JPEG_LIB_VERSION >= 61" is the right test. jpeg_simple_progression (j_compress_ptr cinfo) Generates a default scan script for writing a progressive-JPEG file. This is the recommended method of creating a progressive file, unless you want to make a custom scan sequence. You must ensure that the JPEG color space is set correctly before calling this routine. Compression parameters (cinfo fields) include: J_DCT_METHOD dct_method Selects the algorithm used for the DCT step. Choices are: JDCT_ISLOW: slow but accurate integer algorithm JDCT_IFAST: faster, less accurate integer method JDCT_FLOAT: floating-point method JDCT_DEFAULT: default method (normally JDCT_ISLOW) JDCT_FASTEST: fastest method (normally JDCT_IFAST) The FLOAT method is very slightly more accurate than the ISLOW method, but may give different results on different machines due to varying roundoff behavior. The integer methods should give the same results on all machines. On machines with sufficiently fast FP hardware, the floating-point method may also be the fastest. The IFAST method is considerably less accurate than the other two; its use is not recommended if high quality is a concern. JDCT_DEFAULT and JDCT_FASTEST are macros configurable by each installation. J_COLOR_SPACE jpeg_color_space int num_components The JPEG color space and corresponding number of components; see "Special color spaces", below, for more info. We recommend using jpeg_set_color_space() if you want to change these. boolean optimize_coding TRUE causes the compressor to compute optimal Huffman coding tables for the image. This requires an extra pass over the data and therefore costs a good deal of space and time. The default is FALSE, which tells the compressor to use the supplied or default Huffman tables. In most cases optimal tables save only a few percent of file size compared to the default tables. Note that when this is TRUE, you need not supply Huffman tables at all, and any you do supply will be overwritten. unsigned int restart_interval int restart_in_rows To emit restart markers in the JPEG file, set one of these nonzero. Set restart_interval to specify the exact interval in MCU blocks. Set restart_in_rows to specify the interval in MCU rows. (If restart_in_rows is not 0, then restart_interval is set after the image width in MCUs is computed.) Defaults are zero (no restarts). One restart marker per MCU row is often a good choice. NOTE: the overhead of restart markers is higher in grayscale JPEG files than in color files, and MUCH higher in progressive JPEGs. If you use restarts, you may want to use larger intervals in those cases. const jpeg_scan_info * scan_info int num_scans By default, scan_info is NULL; this causes the compressor to write a single-scan sequential JPEG file. If not NULL, scan_info points to an array of scan definition records of length num_scans. The compressor will then write a JPEG file having one scan for each scan definition record. This is used to generate noninterleaved or progressive JPEG files. The library checks that the scan array defines a valid JPEG scan sequence. (jpeg_simple_progression creates a suitable scan definition array for progressive JPEG.) This is discussed further under "Progressive JPEG support". int smoothing_factor If non-zero, the input image is smoothed; the value should be 1 for minimal smoothing to 100 for maximum smoothing. Consult jcsample.c for details of the smoothing algorithm. The default is zero. boolean write_JFIF_header If TRUE, a JFIF APP0 marker is emitted. jpeg_set_defaults() and jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space (ie, YCbCr or grayscale) is selected, otherwise FALSE. UINT8 JFIF_major_version UINT8 JFIF_minor_version The version number to be written into the JFIF marker. jpeg_set_defaults() initializes the version to 1.01 (major=minor=1). You should set it to 1.02 (major=1, minor=2) if you plan to write any JFIF 1.02 extension markers. UINT8 density_unit UINT16 X_density UINT16 Y_density The resolution information to be written into the JFIF marker; not used otherwise. density_unit may be 0 for unknown, 1 for dots/inch, or 2 for dots/cm. The default values are 0,1,1 indicating square pixels of unknown size. boolean write_Adobe_marker If TRUE, an Adobe APP14 marker is emitted. jpeg_set_defaults() and jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK, or YCCK is selected, otherwise FALSE. It is generally a bad idea to set both write_JFIF_header and write_Adobe_marker. In fact, you probably shouldn't change the default settings at all --- the default behavior ensures that the JPEG file's color space can be recognized by the decoder. JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS] Pointers to coefficient quantization tables, one per table slot, or NULL if no table is defined for a slot. Usually these should be set via one of the above helper routines; jpeg_add_quant_table() is general enough to define any quantization table. The other routines will set up table slot 0 for luminance quality and table slot 1 for chrominance. JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS] JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS] Pointers to Huffman coding tables, one per table slot, or NULL if no table is defined for a slot. Slots 0 and 1 are filled with the JPEG sample tables by jpeg_set_defaults(). If you need to allocate more table structures, jpeg_alloc_huff_table() may be used. Note that optimal Huffman tables can be computed for an image by setting optimize_coding, as discussed above; there's seldom any need to mess with providing your own Huffman tables. There are some additional cinfo fields which are not documented here because you currently can't change them; for example, you can't set arith_code TRUE because arithmetic coding is unsupported. Per-component parameters are stored in the struct cinfo.comp_info[i] for component number i. Note that components here refer to components of the JPEG color space, *not* the source image color space. A suitably large comp_info[] array is allocated by jpeg_set_defaults(); if you choose not to use that routine, it's up to you to allocate the array. int component_id The one-byte identifier code to be recorded in the JPEG file for this component. For the standard color spaces, we recommend you leave the default values alone. int h_samp_factor int v_samp_factor Horizontal and vertical sampling factors for the component; must be 1..4 according to the JPEG standard. Note that larger sampling factors indicate a higher-resolution component; many people find this behavior quite unintuitive. The default values are 2,2 for luminance components and 1,1 for chrominance components, except for grayscale where 1,1 is used. int quant_tbl_no Quantization table number for component. The default value is 0 for luminance components and 1 for chrominance components. int dc_tbl_no int ac_tbl_no DC and AC entropy coding table numbers. The default values are 0 for luminance components and 1 for chrominance components. int component_index Must equal the component's index in comp_info[]. (Beginning in release v6, the compressor library will fill this in automatically; you don't have to.) Decompression parameter selection --------------------------------- Decompression parameter selection is somewhat simpler than compression parameter selection, since all of the JPEG internal parameters are recorded in the source file and need not be supplied by the application. (Unless you are working with abbreviated files, in which case see "Abbreviated datastreams", below.) Decompression parameters control the postprocessing done on the image to deliver it in a format suitable for the application's use. Many of the parameters control speed/quality tradeoffs, in which faster decompression may be obtained at the price of a poorer-quality image. The defaults select the highest quality (slowest) processing. The following fields in the JPEG object are set by jpeg_read_header() and may be useful to the application in choosing decompression parameters: JDIMENSION image_width Width and height of image JDIMENSION image_height int num_components Number of color components J_COLOR_SPACE jpeg_color_space Colorspace of image boolean saw_JFIF_marker TRUE if a JFIF APP0 marker was seen UINT8 JFIF_major_version Version information from JFIF marker UINT8 JFIF_minor_version UINT8 density_unit Resolution data from JFIF marker UINT16 X_density UINT16 Y_density boolean saw_Adobe_marker TRUE if an Adobe APP14 marker was seen UINT8 Adobe_transform Color transform code from Adobe marker The JPEG color space, unfortunately, is something of a guess since the JPEG standard proper does not provide a way to record it. In practice most files adhere to the JFIF or Adobe conventions, and the decoder will recognize these correctly. See "Special color spaces", below, for more info. The decompression parameters that determine the basic properties of the returned image are: J_COLOR_SPACE out_color_space Output color space. jpeg_read_header() sets an appropriate default based on jpeg_color_space; typically it will be RGB or grayscale. The application can change this field to request output in a different colorspace. For example, set it to JCS_GRAYSCALE to get grayscale output from a color file. (This is useful for previewing: grayscale output is faster than full color since the color components need not be processed.) Note that not all possible color space transforms are currently implemented; you may need to extend jdcolor.c if you want an unusual conversion. unsigned int scale_num, scale_denom Scale the image by the fraction scale_num/scale_denom. Default is 1/1, or no scaling. Currently, the only supported scaling ratios are 1/1, 1/2, 1/4, and 1/8. (The library design allows for arbitrary scaling ratios but this is not likely to be implemented any time soon.) Smaller scaling ratios permit significantly faster decoding since fewer pixels need be processed and a simpler IDCT method can be used. boolean quantize_colors If set TRUE, colormapped output will be delivered. Default is FALSE, meaning that full-color output will be delivered. The next three parameters are relevant only if quantize_colors is TRUE. int desired_number_of_colors Maximum number of colors to use in generating a library-supplied color map (the actual number of colors is returned in a different field). Default 256. Ignored when the application supplies its own color map. boolean two_pass_quantize If TRUE, an extra pass over the image is made to select a custom color map for the image. This usually looks a lot better than the one-size- fits-all colormap that is used otherwise. Default is TRUE. Ignored when the application supplies its own color map. J_DITHER_MODE dither_mode Selects color dithering method. Supported values are: JDITHER_NONE no dithering: fast, very low quality JDITHER_ORDERED ordered dither: moderate speed and quality JDITHER_FS Floyd-Steinberg dither: slow, high quality Default is JDITHER_FS. (At present, ordered dither is implemented only in the single-pass, standard-colormap case. If you ask for ordered dither when two_pass_quantize is TRUE or when you supply an external color map, you'll get F-S dithering.) When quantize_colors is TRUE, the target color map is described by the next two fields. colormap is set to NULL by jpeg_read_header(). The application can supply a color map by setting colormap non-NULL and setting actual_number_of_colors to the map size. Otherwise, jpeg_start_decompress() selects a suitable color map and sets these two fields itself. [Implementation restriction: at present, an externally supplied colormap is only accepted for 3-component output color spaces.] JSAMPARRAY colormap The color map, represented as a 2-D pixel array of out_color_components rows and actual_number_of_colors columns. Ignored if not quantizing. CAUTION: if the JPEG library creates its own colormap, the storage pointed to by this field is released by jpeg_finish_decompress(). Copy the colormap somewhere else first, if you want to save it. int actual_number_of_colors The number of colors in the color map. Additional decompression parameters that the application may set include: J_DCT_METHOD dct_method Selects the algorithm used for the DCT step. Choices are the same as described above for compression. boolean do_fancy_upsampling If TRUE, do careful upsampling of chroma components. If FALSE, a faster but sloppier method is used. Default is TRUE. The visual impact of the sloppier method is often very small. boolean do_block_smoothing If TRUE, interblock smoothing is applied in early stages of decoding progressive JPEG files; if FALSE, not. Default is TRUE. Early progression stages look "fuzzy" with smoothing, "blocky" without. In any case, block smoothing ceases to be applied after the first few AC coefficients are known to full accuracy, so it is relevant only when using buffered-image mode for progressive images. boolean enable_1pass_quant boolean enable_external_quant boolean enable_2pass_quant These are significant only in buffered-image mode, which is described in its own section below. The output image dimensions are given by the following fields. These are computed from the source image dimensions and the decompression parameters by jpeg_start_decompress(). You can also call jpeg_calc_output_dimensions() to obtain the values that will result from the current parameter settings. This can be useful if you are trying to pick a scaling ratio that will get close to a desired target size. It's also important if you are using the JPEG library's memory manager to allocate output buffer space, because you are supposed to request such buffers *before* jpeg_start_decompress(). JDIMENSION output_width Actual dimensions of output image. JDIMENSION output_height int out_color_components Number of color components in out_color_space. int output_components Number of color components returned. int rec_outbuf_height Recommended height of scanline buffer. When quantizing colors, output_components is 1, indicating a single color map index per pixel. Otherwise it equals out_color_components. The output arrays are required to be output_width * output_components JSAMPLEs wide. rec_outbuf_height is the recommended minimum height (in scanlines) of the buffer passed to jpeg_read_scanlines(). If the buffer is smaller, the library will still work, but time will be wasted due to unnecessary data copying. In high-quality modes, rec_outbuf_height is always 1, but some faster, lower-quality modes set it to larger values (typically 2 to 4). If you are going to ask for a high-speed processing mode, you may as well go to the trouble of honoring rec_outbuf_height so as to avoid data copying. (An output buffer larger than rec_outbuf_height lines is OK, but won't provide any material speed improvement over that height.) Special color spaces -------------------- The JPEG standard itself is "color blind" and doesn't specify any particular color space. It is customary to convert color data to a luminance/chrominance color space before compressing, since this permits greater compression. The existing de-facto JPEG file format standards specify YCbCr or grayscale data (JFIF), or grayscale, RGB, YCbCr, CMYK, or YCCK (Adobe). For special applications such as multispectral images, other color spaces can be used, but it must be understood that such files will be unportable. The JPEG library can handle the most common colorspace conversions (namely RGB <=> YCbCr and CMYK <=> YCCK). It can also deal with data of an unknown color space, passing it through without conversion. If you deal extensively with an unusual color space, you can easily extend the library to understand additional color spaces and perform appropriate conversions. For compression, the source data's color space is specified by field in_color_space. This is transformed to the JPEG file's color space given by jpeg_color_space. jpeg_set_defaults() chooses a reasonable JPEG color space depending on in_color_space, but you can override this by calling jpeg_set_colorspace(). Of course you must select a supported transformation. jccolor.c currently supports the following transformations: RGB => YCbCr RGB => GRAYSCALE YCbCr => GRAYSCALE CMYK => YCCK plus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB, YCbCr => YCbCr, CMYK => CMYK, YCCK => YCCK, and UNKNOWN => UNKNOWN. The de-facto file format standards (JFIF and Adobe) specify APPn markers that indicate the color space of the JPEG file. It is important to ensure that these are written correctly, or omitted if the JPEG file's color space is not one of the ones supported by the de-facto standards. jpeg_set_colorspace() will set the compression parameters to include or omit the APPn markers properly, so long as it is told the truth about the JPEG color space. For example, if you are writing some random 3-component color space without conversion, don't try to fake out the library by setting in_color_space and jpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN. You may want to write an APPn marker of your own devising to identify the colorspace --- see "Special markers", below. When told that the color space is UNKNOWN, the library will default to using luminance-quality compression parameters for all color components. You may well want to change these parameters. See the source code for jpeg_set_colorspace(), in jcparam.c, for details. For decompression, the JPEG file's color space is given in jpeg_color_space, and this is transformed to the output color space out_color_space. jpeg_read_header's setting of jpeg_color_space can be relied on if the file conforms to JFIF or Adobe conventions, but otherwise it is no better than a guess. If you know the JPEG file's color space for certain, you can override jpeg_read_header's guess by setting jpeg_color_space. jpeg_read_header also selects a default output color space based on (its guess of) jpeg_color_space; set out_color_space to override this. Again, you must select a supported transformation. jdcolor.c currently supports YCbCr => GRAYSCALE YCbCr => RGB GRAYSCALE => RGB YCCK => CMYK as well as the null transforms. (Since GRAYSCALE=>RGB is provided, an application can force grayscale JPEGs to look like color JPEGs if it only wants to handle one case.) The two-pass color quantizer, jquant2.c, is specialized to handle RGB data (it weights distances appropriately for RGB colors). You'll need to modify the code if you want to use it for non-RGB output color spaces. Note that jquant2.c is used to map to an application-supplied colormap as well as for the normal two-pass colormap selection process. CAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG files: 0 represents 100% ink coverage, rather than 0% ink as you'd expect. This is arguably a bug in Photoshop, but if you need to work with Photoshop CMYK files, you will have to deal with it in your application. We cannot "fix" this in the library by inverting the data during the CMYK<=>YCCK transform, because that would break other applications, notably Ghostscript. Photoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK data in the same inverted-YCCK representation used in bare JPEG files, but the surrounding PostScript code performs an inversion using the PS image operator. I am told that Photoshop 3.0 will write uninverted YCCK in EPS/JPEG files, and will omit the PS-level inversion. (But the data polarity used in bare JPEG files will not change in 3.0.) In either case, the JPEG library must not invert the data itself, or else Ghostscript would read these EPS files incorrectly. Error handling -------------- When the default error handler is used, any error detected inside the JPEG routines will cause a message to be printed on stderr, followed by exit(). You can supply your own error handling routines to override this behavior and to control the treatment of nonfatal warnings and trace/debug messages. The file example.c illustrates the most common case, which is to have the application regain control after an error rather than exiting. The JPEG library never writes any message directly; it always goes through the error handling routines. Three classes of messages are recognized: * Fatal errors: the library cannot continue. * Warnings: the library can continue, but the data is corrupt, and a damaged output image is likely to result. * Trace/informational messages. These come with a trace level indicating the importance of the message; you can control the verbosity of the program by adjusting the maximum trace level that will be displayed. You may, if you wish, simply replace the entire JPEG error handling module (jerror.c) with your own code. However, you can avoid code duplication by only replacing some of the routines depending on the behavior you need. This is accomplished by calling jpeg_std_error() as usual, but then overriding some of the method pointers in the jpeg_error_mgr struct, as illustrated by example.c. All of the error handling routines will receive a pointer to the JPEG object (a j_common_ptr which points to either a jpeg_compress_struct or a jpeg_decompress_struct; if you need to tell which, test the is_decompressor field). This struct includes a pointer to the error manager struct in its "err" field. Frequently, custom error handler routines will need to access additional data which is not known to the JPEG library or the standard error handler. The most convenient way to do this is to embed either the JPEG object or the jpeg_error_mgr struct in a larger structure that contains additional fields; then casting the passed pointer provides access to the additional fields. Again, see example.c for one way to do it. (Beginning with IJG version 6b, there is also a void pointer "client_data" in each JPEG object, which the application can also use to find related data. The library does not touch client_data at all.) The individual methods that you might wish to override are: error_exit (j_common_ptr cinfo) Receives control for a fatal error. Information sufficient to generate the error message has been stored in cinfo->err; call output_message to display it. Control must NOT return to the caller; generally this routine will exit() or longjmp() somewhere. Typically you would override this routine to get rid of the exit() default behavior. Note that if you continue processing, you should clean up the JPEG object with jpeg_abort() or jpeg_destroy(). output_message (j_common_ptr cinfo) Actual output of any JPEG message. Override this to send messages somewhere other than stderr. Note that this method does not know how to generate a message, only where to send it. format_message (j_common_ptr cinfo, char * buffer) Constructs a readable error message string based on the error info stored in cinfo->err. This method is called by output_message. Few applications should need to override this method. One possible reason for doing so is to implement dynamic switching of error message language. emit_message (j_common_ptr cinfo, int msg_level) Decide whether or not to emit a warning or trace message; if so, calls output_message. The main reason for overriding this method would be to abort on warnings. msg_level is -1 for warnings, 0 and up for trace messages. Only error_exit() and emit_message() are called from the rest of the JPEG library; the other two are internal to the error handler. The actual message texts are stored in an array of strings which is pointed to by the field err->jpeg_message_table. The messages are numbered from 0 to err->last_jpeg_message, and it is these code numbers that are used in the JPEG library code. You could replace the message texts (for instance, with messages in French or German) by changing the message table pointer. See jerror.h for the default texts. CAUTION: this table will almost certainly change or grow from one library version to the next. It may be useful for an application to add its own message texts that are handled by the same mechanism. The error handler supports a second "add-on" message table for this purpose. To define an addon table, set the pointer err->addon_message_table and the message numbers err->first_addon_message and err->last_addon_message. If you number the addon messages beginning at 1000 or so, you won't have to worry about conflicts with the library's built-in messages. See the sample applications cjpeg/djpeg for an example of using addon messages (the addon messages are defined in cderror.h). Actual invocation of the error handler is done via macros defined in jerror.h: ERREXITn(...) for fatal errors WARNMSn(...) for corrupt-data warnings TRACEMSn(...) for trace and informational messages. These macros store the message code and any additional parameters into the error handler struct, then invoke the error_exit() or emit_message() method. The variants of each macro are for varying numbers of additional parameters. The additional parameters are inserted into the generated message using standard printf() format codes. See jerror.h and jerror.c for further details. Compressed data handling (source and destination managers) ---------------------------------------------------------- The JPEG compression library sends its compressed data to a "destination manager" module. The default destination manager just writes the data to a stdio stream, but you can provide your own manager to do something else. Similarly, the decompression library calls a "source manager" to obtain the compressed data; you can provide your own source manager if you want the data to come from somewhere other than a stdio stream. In both cases, compressed data is processed a bufferload at a time: the destination or source manager provides a work buffer, and the library invokes the manager only when the buffer is filled or emptied. (You could define a one-character buffer to force the manager to be invoked for each byte, but that would be rather inefficient.) The buffer's size and location are controlled by the manager, not by the library. For example, if you desired to decompress a JPEG datastream that was all in memory, you could just make the buffer pointer and length point to the original data in memory. Then the buffer-reload procedure would be invoked only if the decompressor ran off the end of the datastream, which would indicate an erroneous datastream. The work buffer is defined as an array of datatype JOCTET, which is generally "char" or "unsigned char". On a machine where char is not exactly 8 bits wide, you must define JOCTET as a wider data type and then modify the data source and destination modules to transcribe the work arrays into 8-bit units on external storage. A data destination manager struct contains a pointer and count defining the next byte to write in the work buffer and the remaining free space: JOCTET * next_output_byte; /* => next byte to write in buffer */ size_t free_in_buffer; /* # of byte spaces remaining in buffer */ The library increments the pointer and decrements the count until the buffer is filled. The manager's empty_output_buffer method must reset the pointer and count. The manager is expected to remember the buffer's starting address and total size in private fields not visible to the library. A data destination manager provides three methods: init_destination (j_compress_ptr cinfo) Initialize destination. This is called by jpeg_start_compress() before any data is actually written. It must initialize next_output_byte and free_in_buffer. free_in_buffer must be initialized to a positive value. empty_output_buffer (j_compress_ptr cinfo) This is called whenever the buffer has filled (free_in_buffer reaches zero). In typical applications, it should write out the *entire* buffer (use the saved start address and buffer length; ignore the current state of next_output_byte and free_in_buffer). Then reset the pointer & count to the start of the buffer, and return TRUE indicating that the buffer has been dumped. free_in_buffer must be set to a positive value when TRUE is returned. A FALSE return should only be used when I/O suspension is desired (this operating mode is discussed in the next section). term_destination (j_compress_ptr cinfo) Terminate destination --- called by jpeg_finish_compress() after all data has been written. In most applications, this must flush any data remaining in the buffer. Use either next_output_byte or free_in_buffer to determine how much data is in the buffer. term_destination() is NOT called by jpeg_abort() or jpeg_destroy(). If you want the destination manager to be cleaned up during an abort, you must do it yourself. You will also need code to create a jpeg_destination_mgr struct, fill in its method pointers, and insert a pointer to the struct into the "dest" field of the JPEG compression object. This can be done in-line in your setup code if you like, but it's probably cleaner to provide a separate routine similar to the jpeg_stdio_dest() routine of the supplied destination manager. Decompression source managers follow a parallel design, but with some additional frammishes. The source manager struct contains a pointer and count defining the next byte to read from the work buffer and the number of bytes remaining: const JOCTET * next_input_byte; /* => next byte to read from buffer */ size_t bytes_in_buffer; /* # of bytes remaining in buffer */ The library increments the pointer and decrements the count until the buffer is emptied. The manager's fill_input_buffer method must reset the pointer and count. In most applications, the manager must remember the buffer's starting address and total size in private fields not visible to the library. A data source manager provides five methods: init_source (j_decompress_ptr cinfo) Initialize source. This is called by jpeg_read_header() before any data is actually read. Unlike init_destination(), it may leave bytes_in_buffer set to 0 (in which case a fill_input_buffer() call will occur immediately). fill_input_buffer (j_decompress_ptr cinfo) This is called whenever bytes_in_buffer has reached zero and more data is wanted. In typical applications, it should read fresh data into the buffer (ignoring the current state of next_input_byte and bytes_in_buffer), reset the pointer & count to the start of the buffer, and return TRUE indicating that the buffer has been reloaded. It is not necessary to fill the buffer entirely, only to obtain at least one more byte. bytes_in_buffer MUST be set to a positive value if TRUE is returned. A FALSE return should only be used when I/O suspension is desired (this mode is discussed in the next section). skip_input_data (j_decompress_ptr cinfo, long num_bytes) Skip num_bytes worth of data. The buffer pointer and count should be advanced over num_bytes input bytes, refilling the buffer as needed. This is used to skip over a potentially large amount of uninteresting data (such as an APPn marker). In some applications it may be possible to optimize away the reading of the skipped data, but it's not clear that being smart is worth much trouble; large skips are uncommon. bytes_in_buffer may be zero on return. A zero or negative skip count should be treated as a no-op. resync_to_restart (j_decompress_ptr cinfo, int desired) This routine is called only when the decompressor has failed to find a restart (RSTn) marker where one is expected. Its mission is to find a suitable point for resuming decompression. For most applications, we recommend that you just use the default resync procedure, jpeg_resync_to_restart(). However, if you are able to back up in the input data stream, or if you have a-priori knowledge about the likely location of restart markers, you may be able to do better. Read the read_restart_marker() and jpeg_resync_to_restart() routines in jdmarker.c if you think you'd like to implement your own resync procedure. term_source (j_decompress_ptr cinfo) Terminate source --- called by jpeg_finish_decompress() after all data has been read. Often a no-op. For both fill_input_buffer() and skip_input_data(), there is no such thing as an EOF return. If the end of the file has been reached, the routine has a choice of exiting via ERREXIT() or inserting fake data into the buffer. In most cases, generating a warning message and inserting a fake EOI marker is the best course of action --- this will allow the decompressor to output however much of the image is there. In pathological cases, the decompressor may swallow the EOI and again demand data ... just keep feeding it fake EOIs. jdatasrc.c illustrates the recommended error recovery behavior. term_source() is NOT called by jpeg_abort() or jpeg_destroy(). If you want the source manager to be cleaned up during an abort, you must do it yourself. You will also need code to create a jpeg_source_mgr struct, fill in its method pointers, and insert a pointer to the struct into the "src" field of the JPEG decompression object. This can be done in-line in your setup code if you like, but it's probably cleaner to provide a separate routine similar to the jpeg_stdio_src() routine of the supplied source manager. For more information, consult the stdio source and destination managers in jdatasrc.c and jdatadst.c. I/O suspension -------------- Some applications need to use the JPEG library as an incremental memory-to- memory filter: when the compressed data buffer is filled or emptied, they want control to return to the outer loop, rather than expecting that the buffer can be emptied or reloaded within the data source/destination manager subroutine. The library supports this need by providing an "I/O suspension" mode, which we describe in this section. The I/O suspension mode is not a panacea: nothing is guaranteed about the maximum amount of time spent in any one call to the library, so it will not eliminate response-time problems in single-threaded applications. If you need guaranteed response time, we suggest you "bite the bullet" and implement a real multi-tasking capability. To use I/O suspension, cooperation is needed between the calling application and the data source or destination manager; you will always need a custom source/destination manager. (Please read the previous section if you haven't already.) The basic idea is that the empty_output_buffer() or fill_input_buffer() routine is a no-op, merely returning FALSE to indicate that it has done nothing. Upon seeing this, the JPEG library suspends operation and returns to its caller. The surrounding application is responsible for emptying or refilling the work buffer before calling the JPEG library again. Compression suspension: For compression suspension, use an empty_output_buffer() routine that returns FALSE; typically it will not do anything else. This will cause the compressor to return to the caller of jpeg_write_scanlines(), with the return value indicating that not all the supplied scanlines have been accepted. The application must make more room in the output buffer, adjust the output buffer pointer/count appropriately, and then call jpeg_write_scanlines() again, pointing to the first unconsumed scanline. When forced to suspend, the compressor will backtrack to a convenient stopping point (usually the start of the current MCU); it will regenerate some output data when restarted. Therefore, although empty_output_buffer() is only called when the buffer is filled, you should NOT write out the entire buffer after a suspension. Write only the data up to the current position of next_output_byte/free_in_buffer. The data beyond that point will be regenerated after resumption. Because of the backtracking behavior, a good-size output buffer is essential for efficiency; you don't want the compressor to suspend often. (In fact, an overly small buffer could lead to infinite looping, if a single MCU required more data than would fit in the buffer.) We recommend a buffer of at least several Kbytes. You may want to insert explicit code to ensure that you don't call jpeg_write_scanlines() unless there is a reasonable amount of space in the output buffer; in other words, flush the buffer before trying to compress more data. The compressor does not allow suspension while it is trying to write JPEG markers at the beginning and end of the file. This means that: * At the beginning of a compression operation, there must be enough free space in the output buffer to hold the header markers (typically 600 or so bytes). The recommended buffer size is bigger than this anyway, so this is not a problem as long as you start with an empty buffer. However, this restriction might catch you if you insert large special markers, such as a JFIF thumbnail image, without flushing the buffer afterwards. * When you call jpeg_finish_compress(), there must be enough space in the output buffer to emit any buffered data and the final EOI marker. In the current implementation, half a dozen bytes should suffice for this, but for safety's sake we recommend ensuring that at least 100 bytes are free before calling jpeg_finish_compress(). A more significant restriction is that jpeg_finish_compress() cannot suspend. This means you cannot use suspension with multi-pass operating modes, namely Huffman code optimization and multiple-scan output. Those modes write the whole file during jpeg_finish_compress(), which will certainly result in buffer overrun. (Note that this restriction applies only to compression, not decompression. The decompressor supports input suspension in all of its operating modes.) Decompression suspension: For decompression suspension, use a fill_input_buffer() routine that simply returns FALSE (except perhaps during error recovery, as discussed below). This will cause the decompressor to return to its caller with an indication that suspension has occurred. This can happen at four places: * jpeg_read_header(): will return JPEG_SUSPENDED. * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE. * jpeg_read_scanlines(): will return the number of scanlines already completed (possibly 0). * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE. The surrounding application must recognize these cases, load more data into the input buffer, and repeat the call. In the case of jpeg_read_scanlines(), increment the passed pointers past any scanlines successfully read. Just as with compression, the decompressor will typically backtrack to a convenient restart point before suspending. When fill_input_buffer() is called, next_input_byte/bytes_in_buffer point to the current restart point, which is where the decompressor will backtrack to if FALSE is returned. The data beyond that position must NOT be discarded if you suspend; it needs to be re-read upon resumption. In most implementations, you'll need to shift this data down to the start of your work buffer and then load more data after it. Again, this behavior means that a several-Kbyte work buffer is essential for decent performance; furthermore, you should load a reasonable amount of new data before resuming decompression. (If you loaded, say, only one new byte each time around, you could waste a LOT of cycles.) The skip_input_data() source manager routine requires special care in a suspension scenario. This routine is NOT granted the ability to suspend the decompressor; it can decrement bytes_in_buffer to zero, but no more. If the requested skip distance exceeds the amount of data currently in the input buffer, then skip_input_data() must set bytes_in_buffer to zero and record the additional skip distance somewhere else. The decompressor will immediately call fill_input_buffer(), which should return FALSE, which will cause a suspension return. The surrounding application must then arrange to discard the recorded number of bytes before it resumes loading the input buffer. (Yes, this design is rather baroque, but it avoids complexity in the far more common case where a non-suspending source manager is used.) If the input data has been exhausted, we recommend that you emit a warning and insert dummy EOI markers just as a non-suspending data source manager would do. This can be handled either in the surrounding application logic or within fill_input_buffer(); the latter is probably more efficient. If fill_input_buffer() knows that no more data is available, it can set the pointer/count to point to a dummy EOI marker and then return TRUE just as though it had read more data in a non-suspending situation. The decompressor does not attempt to suspend within standard JPEG markers; instead it will backtrack to the start of the marker and reprocess the whole marker next time. Hence the input buffer must be large enough to hold the longest standard marker in the file. Standard JPEG markers should normally not exceed a few hundred bytes each (DHT tables are typically the longest). We recommend at least a 2K buffer for performance reasons, which is much larger than any correct marker is likely to be. For robustness against damaged marker length counts, you may wish to insert a test in your application for the case that the input buffer is completely full and yet the decoder has suspended without consuming any data --- otherwise, if this situation did occur, it would lead to an endless loop. (The library can't provide this test since it has no idea whether "the buffer is full", or even whether there is a fixed-size input buffer.) The input buffer would need to be 64K to allow for arbitrary COM or APPn markers, but these are handled specially: they are either saved into allocated memory, or skipped over by calling skip_input_data(). In the former case, suspension is handled correctly, and in the latter case, the problem of buffer overrun is placed on skip_input_data's shoulders, as explained above. Note that if you provide your own marker handling routine for large markers, you should consider how to deal with buffer overflow. Multiple-buffer management: In some applications it is desirable to store the compressed data in a linked list of buffer areas, so as to avoid data copying. This can be handled by having empty_output_buffer() or fill_input_buffer() set the pointer and count to reference the next available buffer; FALSE is returned only if no more buffers are available. Although seemingly straightforward, there is a pitfall in this approach: the backtrack that occurs when FALSE is returned could back up into an earlier buffer. For example, when fill_input_buffer() is called, the current pointer & count indicate the backtrack restart point. Since fill_input_buffer() will set the pointer and count to refer to a new buffer, the restart position must be saved somewhere else. Suppose a second call to fill_input_buffer() occurs in the same library call, and no additional input data is available, so fill_input_buffer must return FALSE. If the JPEG library has not moved the pointer/count forward in the current buffer, then *the correct restart point is the saved position in the prior buffer*. Prior buffers may be discarded only after the library establishes a restart point within a later buffer. Similar remarks apply for output into a chain of buffers. The library will never attempt to backtrack over a skip_input_data() call, so any skipped data can be permanently discarded. You still have to deal with the case of skipping not-yet-received data, however. It's much simpler to use only a single buffer; when fill_input_buffer() is called, move any unconsumed data (beyond the current pointer/count) down to the beginning of this buffer and then load new data into the remaining buffer space. This approach requires a little more data copying but is far easier to get right. Progressive JPEG support ------------------------ Progressive JPEG rearranges the stored data into a series of scans of increasing quality. In situations where a JPEG file is transmitted across a slow communications link, a decoder can generate a low-quality image very quickly from the first scan, then gradually improve the displayed quality as more scans are received. The final image after all scans are complete is identical to that of a regular (sequential) JPEG file of the same quality setting. Progressive JPEG files are often slightly smaller than equivalent sequential JPEG files, but the possibility of incremental display is the main reason for using progressive JPEG. The IJG encoder library generates progressive JPEG files when given a suitable "scan script" defining how to divide the data into scans. Creation of progressive JPEG files is otherwise transparent to the encoder. Progressive JPEG files can also be read transparently by the decoder library. If the decoding application simply uses the library as defined above, it will receive a final decoded image without any indication that the file was progressive. Of course, this approach does not allow incremental display. To perform incremental display, an application needs to use the decoder library's "buffered-image" mode, in which it receives a decoded image multiple times. Each displayed scan requires about as much work to decode as a full JPEG image of the same size, so the decoder must be fairly fast in relation to the data transmission rate in order to make incremental display useful. However, it is possible to skip displaying the image and simply add the incoming bits to the decoder's coefficient buffer. This is fast because only Huffman decoding need be done, not IDCT, upsampling, colorspace conversion, etc. The IJG decoder library allows the application to switch dynamically between displaying the image and simply absorbing the incoming bits. A properly coded application can automatically adapt the number of display passes to suit the time available as the image is received. Also, a final higher-quality display cycle can be performed from the buffered data after the end of the file is reached. Progressive compression: To create a progressive JPEG file (or a multiple-scan sequential JPEG file), set the scan_info cinfo field to point to an array of scan descriptors, and perform compression as usual. Instead of constructing your own scan list, you can call the jpeg_simple_progression() helper routine to create a recommended progression sequence; this method should be used by all applications that don't want to get involved in the nitty-gritty of progressive scan sequence design. (If you want to provide user control of scan sequences, you may wish to borrow the scan script reading code found in rdswitch.c, so that you can read scan script files just like cjpeg's.) When scan_info is not NULL, the compression library will store DCT'd data into a buffer array as jpeg_write_scanlines() is called, and will emit all the requested scans during jpeg_finish_compress(). This implies that multiple-scan output cannot be created with a suspending data destination manager, since jpeg_finish_compress() does not support suspension. We should also note that the compressor currently forces Huffman optimization mode when creating a progressive JPEG file, because the default Huffman tables are unsuitable for progressive files. Progressive decompression: When buffered-image mode is not used, the decoder library will read all of a multi-scan file during jpeg_start_decompress(), so that it can provide a final decoded image. (Here "multi-scan" means either progressive or multi-scan sequential.) This makes multi-scan files transparent to the decoding application. However, existing applications that used suspending input with version 5 of the IJG library will need to be modified to check for a suspension return from jpeg_start_decompress(). To perform incremental display, an application must use the library's buffered-image mode. This is described in the next section. Buffered-image mode ------------------- In buffered-image mode, the library stores the partially decoded image in a coefficient buffer, from which it can be read out as many times as desired. This mode is typically used for incremental display of progressive JPEG files, but it can be used with any JPEG file. Each scan of a progressive JPEG file adds more data (more detail) to the buffered image. The application can display in lockstep with the source file (one display pass per input scan), or it can allow input processing to outrun display processing. By making input and display processing run independently, it is possible for the application to adapt progressive display to a wide range of data transmission rates. The basic control flow for buffered-image decoding is jpeg_create_decompress() set data source jpeg_read_header() set overall decompression parameters cinfo.buffered_image = TRUE; /* select buffered-image mode */ jpeg_start_decompress() for (each output pass) { adjust output decompression parameters if required jpeg_start_output() /* start a new output pass */ for (all scanlines in image) { jpeg_read_scanlines() display scanlines } jpeg_finish_output() /* terminate output pass */ } jpeg_finish_decompress() jpeg_destroy_decompress() This differs from ordinary unbuffered decoding in that there is an additional level of looping. The application can choose how many output passes to make and how to display each pass. The simplest approach to displaying progressive images is to do one display pass for each scan appearing in the input file. In this case the outer loop condition is typically while (! jpeg_input_complete(&cinfo)) and the start-output call should read jpeg_start_output(&cinfo, cinfo.input_scan_number); The second parameter to jpeg_start_output() indicates which scan of the input file is to be displayed; the scans are numbered starting at 1 for this purpose. (You can use a loop counter starting at 1 if you like, but using the library's input scan counter is easier.) The library automatically reads data as necessary to complete each requested scan, and jpeg_finish_output() advances to the next scan or end-of-image marker (hence input_scan_number will be incremented by the time control arrives back at jpeg_start_output()). With this technique, data is read from the input file only as needed, and input and output processing run in lockstep. After reading the final scan and reaching the end of the input file, the buffered image remains available; it can be read additional times by repeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output() sequence. For example, a useful technique is to use fast one-pass color quantization for display passes made while the image is arriving, followed by a final display pass using two-pass quantization for highest quality. This is done by changing the library parameters before the final output pass. Changing parameters between passes is discussed in detail below. In general the last scan of a progressive file cannot be recognized as such until after it is read, so a post-input display pass is the best approach if you want special processing in the final pass. When done with the image, be sure to call jpeg_finish_decompress() to release the buffered image (or just use jpeg_destroy_decompress()). If input data arrives faster than it can be displayed, the application can cause the library to decode input data in advance of what's needed to produce output. This is done by calling the routine jpeg_consume_input(). The return value is one of the following: JPEG_REACHED_SOS: reached an SOS marker (the start of a new scan) JPEG_REACHED_EOI: reached the EOI marker (end of image) JPEG_ROW_COMPLETED: completed reading one MCU row of compressed data JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan JPEG_SUSPENDED: suspended before completing any of the above (JPEG_SUSPENDED can occur only if a suspending data source is used.) This routine can be called at any time after initializing the JPEG object. It reads some additional data and returns when one of the indicated significant events occurs. (If called after the EOI marker is reached, it will immediately return JPEG_REACHED_EOI without attempting to read more data.) The library's output processing will automatically call jpeg_consume_input() whenever the output processing overtakes the input; thus, simple lockstep display requires no direct calls to jpeg_consume_input(). But by adding calls to jpeg_consume_input(), you can absorb data in advance of what is being displayed. This has two benefits: * You can limit buildup of unprocessed data in your input buffer. * You can eliminate extra display passes by paying attention to the state of the library's input processing. The first of these benefits only requires interspersing calls to jpeg_consume_input() with your display operations and any other processing you may be doing. To avoid wasting cycles due to backtracking, it's best to call jpeg_consume_input() only after a hundred or so new bytes have arrived. This is discussed further under "I/O suspension", above. (Note: the JPEG library currently is not thread-safe. You must not call jpeg_consume_input() from one thread of control if a different library routine is working on the same JPEG object in another thread.) When input arrives fast enough that more than one new scan is available before you start a new output pass, you may as well skip the output pass corresponding to the completed scan. This occurs for free if you pass cinfo.input_scan_number as the target scan number to jpeg_start_output(). The input_scan_number field is simply the index of the scan currently being consumed by the input processor. You can ensure that this is up-to-date by emptying the input buffer just before calling jpeg_start_output(): call jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or JPEG_REACHED_EOI. The target scan number passed to jpeg_start_output() is saved in the cinfo.output_scan_number field. The library's output processing calls jpeg_consume_input() whenever the current input scan number and row within that scan is less than or equal to the current output scan number and row. Thus, input processing can "get ahead" of the output processing but is not allowed to "fall behind". You can achieve several different effects by manipulating this interlock rule. For example, if you pass a target scan number greater than the current input scan number, the output processor will wait until that scan starts to arrive before producing any output. (To avoid an infinite loop, the target scan number is automatically reset to the last scan number when the end of image is reached. Thus, if you specify a large target scan number, the library will just absorb the entire input file and then perform an output pass. This is effectively the same as what jpeg_start_decompress() does when you don't select buffered-image mode.) When you pass a target scan number equal to the current input scan number, the image is displayed no faster than the current input scan arrives. The final possibility is to pass a target scan number less than the current input scan number; this disables the input/output interlock and causes the output processor to simply display whatever it finds in the image buffer, without waiting for input. (However, the library will not accept a target scan number less than one, so you can't avoid waiting for the first scan.) When data is arriving faster than the output display processing can advance through the image, jpeg_consume_input() will store data into the buffered image beyond the point at which the output processing is reading data out again. If the input arrives fast enough, it may "wrap around" the buffer to the point where the input is more than one whole scan ahead of the output. If the output processing simply proceeds through its display pass without paying attention to the input, the effect seen on-screen is that the lower part of the image is one or more scans better in quality than the upper part. Then, when the next output scan is started, you have a choice of what target scan number to use. The recommended choice is to use the current input scan number at that time, which implies that you've skipped the output scans corresponding to the input scans that were completed while you processed the previous output scan. In this way, the decoder automatically adapts its speed to the arriving data, by skipping output scans as necessary to keep up with the arriving data. When using this strategy, you'll want to be sure that you perform a final output pass after receiving all the data; otherwise your last display may not be full quality across the whole screen. So the right outer loop logic is something like this: do { absorb any waiting input by calling jpeg_consume_input() final_pass = jpeg_input_complete(&cinfo); adjust output decompression parameters if required jpeg_start_output(&cinfo, cinfo.input_scan_number); ... jpeg_finish_output() } while (! final_pass); rather than quitting as soon as jpeg_input_complete() returns TRUE. This arrangement makes it simple to use higher-quality decoding parameters for the final pass. But if you don't want to use special parameters for the final pass, the right loop logic is like this: for (;;) { absorb any waiting input by calling jpeg_consume_input() jpeg_start_output(&cinfo, cinfo.input_scan_number); ... jpeg_finish_output() if (jpeg_input_complete(&cinfo) && cinfo.input_scan_number == cinfo.output_scan_number) break; } In this case you don't need to know in advance whether an output pass is to be the last one, so it's not necessary to have reached EOF before starting the final output pass; rather, what you want to test is whether the output pass was performed in sync with the final input scan. This form of the loop will avoid an extra output pass whenever the decoder is able (or nearly able) to keep up with the incoming data. When the data transmission speed is high, you might begin a display pass, then find that much or all of the file has arrived before you can complete the pass. (You can detect this by noting the JPEG_REACHED_EOI return code from jpeg_consume_input(), or equivalently by testing jpeg_input_complete().) In this situation you may wish to abort the current display pass and start a new one using the newly arrived information. To do so, just call jpeg_finish_output() and then start a new pass with jpeg_start_output(). A variant strategy is to abort and restart display if more than one complete scan arrives during an output pass; this can be detected by noting JPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number. This idea should be employed with caution, however, since the display process might never get to the bottom of the image before being aborted, resulting in the lower part of the screen being several passes worse than the upper. In most cases it's probably best to abort an output pass only if the whole file has arrived and you want to begin the final output pass immediately. When receiving data across a communication link, we recommend always using the current input scan number for the output target scan number; if a higher-quality final pass is to be done, it should be started (aborting any incomplete output pass) as soon as the end of file is received. However, many other strategies are possible. For example, the application can examine the parameters of the current input scan and decide whether to display it or not. If the scan contains only chroma data, one might choose not to use it as the target scan, expecting that the scan will be small and will arrive quickly. To skip to the next scan, call jpeg_consume_input() until it returns JPEG_REACHED_SOS or JPEG_REACHED_EOI. Or just use the next higher number as the target scan for jpeg_start_output(); but that method doesn't let you inspect the next scan's parameters before deciding to display it. In buffered-image mode, jpeg_start_decompress() never performs input and thus never suspends. An application that uses input suspension with buffered-image mode must be prepared for suspension returns from these routines: * jpeg_start_output() performs input only if you request 2-pass quantization and the target scan isn't fully read yet. (This is discussed below.) * jpeg_read_scanlines(), as always, returns the number of scanlines that it was able to produce before suspending. * jpeg_finish_output() will read any markers following the target scan, up to the end of the file or the SOS marker that begins another scan. (But it reads no input if jpeg_consume_input() has already reached the end of the file or a SOS marker beyond the target output scan.) * jpeg_finish_decompress() will read until the end of file, and thus can suspend if the end hasn't already been reached (as can be tested by calling jpeg_input_complete()). jpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress() all return TRUE if they completed their tasks, FALSE if they had to suspend. In the event of a FALSE return, the application must load more input data and repeat the call. Applications that use non-suspending data sources need not check the return values of these three routines. It is possible to change decoding parameters between output passes in the buffered-image mode. The decoder library currently supports only very limited changes of parameters. ONLY THE FOLLOWING parameter changes are allowed after jpeg_start_decompress() is called: * dct_method can be changed before each call to jpeg_start_output(). For example, one could use a fast DCT method for early scans, changing to a higher quality method for the final scan. * dither_mode can be changed before each call to jpeg_start_output(); of course this has no impact if not using color quantization. Typically one would use ordered dither for initial passes, then switch to Floyd-Steinberg dither for the final pass. Caution: changing dither mode can cause more memory to be allocated by the library. Although the amount of memory involved is not large (a scanline or so), it may cause the initial max_memory_to_use specification to be exceeded, which in the worst case would result in an out-of-memory failure. * do_block_smoothing can be changed before each call to jpeg_start_output(). This setting is relevant only when decoding a progressive JPEG image. During the first DC-only scan, block smoothing provides a very "fuzzy" look instead of the very "blocky" look seen without it; which is better seems a matter of personal taste. But block smoothing is nearly always a win during later stages, especially when decoding a successive-approximation image: smoothing helps to hide the slight blockiness that otherwise shows up on smooth gradients until the lowest coefficient bits are sent. * Color quantization mode can be changed under the rules described below. You *cannot* change between full-color and quantized output (because that would alter the required I/O buffer sizes), but you can change which quantization method is used. When generating color-quantized output, changing quantization method is a very useful way of switching between high-speed and high-quality display. The library allows you to change among its three quantization methods: 1. Single-pass quantization to a fixed color cube. Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL. 2. Single-pass quantization to an application-supplied colormap. Selected by setting cinfo.colormap to point to the colormap (the value of two_pass_quantize is ignored); also set cinfo.actual_number_of_colors. 3. Two-pass quantization to a colormap chosen specifically for the image. Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL. (This is the default setting selected by jpeg_read_header, but it is probably NOT what you want for the first pass of progressive display!) These methods offer successively better quality and lesser speed. However, only the first method is available for quantizing in non-RGB color spaces. IMPORTANT: because the different quantizer methods have very different working-storage requirements, the library requires you to indicate which one(s) you intend to use before you call jpeg_start_decompress(). (If we did not require this, the max_memory_to_use setting would be a complete fiction.) You do this by setting one or more of these three cinfo fields to TRUE: enable_1pass_quant Fixed color cube colormap enable_external_quant Externally-supplied colormap enable_2pass_quant Two-pass custom colormap All three are initialized FALSE by jpeg_read_header(). But jpeg_start_decompress() automatically sets TRUE the one selected by the current two_pass_quantize and colormap settings, so you only need to set the enable flags for any other quantization methods you plan to change to later. After setting the enable flags correctly at jpeg_start_decompress() time, you can change to any enabled quantization method by setting two_pass_quantize and colormap properly just before calling jpeg_start_output(). The following special rules apply: 1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass or 2-pass mode from a different mode, or when you want the 2-pass quantizer to be re-run to generate a new colormap. 2. To switch to an external colormap, or to change to a different external colormap than was used on the prior pass, you must call jpeg_new_colormap() after setting cinfo.colormap. NOTE: if you want to use the same colormap as was used in the prior pass, you should not do either of these things. This will save some nontrivial switchover costs. (These requirements exist because cinfo.colormap will always be non-NULL after completing a prior output pass, since both the 1-pass and 2-pass quantizers set it to point to their output colormaps. Thus you have to do one of these two things to notify the library that something has changed. Yup, it's a bit klugy, but it's necessary to do it this way for backwards compatibility.) Note that in buffered-image mode, the library generates any requested colormap during jpeg_start_output(), not during jpeg_start_decompress(). When using two-pass quantization, jpeg_start_output() makes a pass over the buffered image to determine the optimum color map; it therefore may take a significant amount of time, whereas ordinarily it does little work. The progress monitor hook is called during this pass, if defined. It is also important to realize that if the specified target scan number is greater than or equal to the current input scan number, jpeg_start_output() will attempt to consume input as it makes this pass. If you use a suspending data source, you need to check for a FALSE return from jpeg_start_output() under these conditions. The combination of 2-pass quantization and a not-yet-fully-read target scan is the only case in which jpeg_start_output() will consume input. Application authors who support buffered-image mode may be tempted to use it for all JPEG images, even single-scan ones. This will work, but it is inefficient: there is no need to create an image-sized coefficient buffer for single-scan images. Requesting buffered-image mode for such an image wastes memory. Worse, it can cost time on large images, since the buffered data has to be swapped out or written to a temporary file. If you are concerned about maximum performance on baseline JPEG files, you should use buffered-image mode only when the incoming file actually has multiple scans. This can be tested by calling jpeg_has_multiple_scans(), which will return a correct result at any time after jpeg_read_header() completes. It is also worth noting that when you use jpeg_consume_input() to let input processing get ahead of output processing, the resulting pattern of access to the coefficient buffer is quite nonsequential. It's best to use the memory manager jmemnobs.c if you can (ie, if you have enough real or virtual main memory). If not, at least make sure that max_memory_to_use is set as high as possible. If the JPEG memory manager has to use a temporary file, you will probably see a lot of disk traffic and poor performance. (This could be improved with additional work on the memory manager, but we haven't gotten around to it yet.) In some applications it may be convenient to use jpeg_consume_input() for all input processing, including reading the initial markers; that is, you may wish to call jpeg_consume_input() instead of jpeg_read_header() during startup. This works, but note that you must check for JPEG_REACHED_SOS and JPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes. Once the first SOS marker has been reached, you must call jpeg_start_decompress() before jpeg_consume_input() will consume more input; it'll just keep returning JPEG_REACHED_SOS until you do. If you read a tables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI without ever returning JPEG_REACHED_SOS; be sure to check for this case. If this happens, the decompressor will not read any more input until you call jpeg_abort() to reset it. It is OK to call jpeg_consume_input() even when not using buffered-image mode, but in that case it's basically a no-op after the initial markers have been read: it will just return JPEG_SUSPENDED. Abbreviated datastreams and multiple images ------------------------------------------- A JPEG compression or decompression object can be reused to process multiple images. This saves a small amount of time per image by eliminating the "create" and "destroy" operations, but that isn't the real purpose of the feature. Rather, reuse of an object provides support for abbreviated JPEG datastreams. Object reuse can also simplify processing a series of images in a single input or output file. This section explains these features. A JPEG file normally contains several hundred bytes worth of quantization and Huffman tables. In a situation where many images will be stored or transmitted with identical tables, this may represent an annoying overhead. The JPEG standard therefore permits tables to be omitted. The standard defines three classes of JPEG datastreams: * "Interchange" datastreams contain an image and all tables needed to decode the image. These are the usual kind of JPEG file. * "Abbreviated image" datastreams contain an image, but are missing some or all of the tables needed to decode that image. * "Abbreviated table specification" (henceforth "tables-only") datastreams contain only table specifications. To decode an abbreviated image, it is necessary to load the missing table(s) into the decoder beforehand. This can be accomplished by reading a separate tables-only file. A variant scheme uses a series of images in which the first image is an interchange (complete) datastream, while subsequent ones are abbreviated and rely on the tables loaded by the first image. It is assumed that once the decoder has read a table, it will remember that table until a new definition for the same table number is encountered. It is the application designer's responsibility to figure out how to associate the correct tables with an abbreviated image. While abbreviated datastreams can be useful in a closed environment, their use is strongly discouraged in any situation where data exchange with other applications might be needed. Caveat designer. The JPEG library provides support for reading and writing any combination of tables-only datastreams and abbreviated images. In both compression and decompression objects, a quantization or Huffman table will be retained for the lifetime of the object, unless it is overwritten by a new table definition. To create abbreviated image datastreams, it is only necessary to tell the compressor not to emit some or all of the tables it is using. Each quantization and Huffman table struct contains a boolean field "sent_table", which normally is initialized to FALSE. For each table used by the image, the header-writing process emits the table and sets sent_table = TRUE unless it is already TRUE. (In normal usage, this prevents outputting the same table definition multiple times, as would otherwise occur because the chroma components typically share tables.) Thus, setting this field to TRUE before calling jpeg_start_compress() will prevent the table from being written at all. If you want to create a "pure" abbreviated image file containing no tables, just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the tables. If you want to emit some but not all tables, you'll need to set the individual sent_table fields directly. To create an abbreviated image, you must also call jpeg_start_compress() with a second parameter of FALSE, not TRUE. Otherwise jpeg_start_compress() will force all the sent_table fields to FALSE. (This is a safety feature to prevent abbreviated images from being created accidentally.) To create a tables-only file, perform the same parameter setup that you normally would, but instead of calling jpeg_start_compress() and so on, call jpeg_write_tables(&cinfo). This will write an abbreviated datastream containing only SOI, DQT and/or DHT markers, and EOI. All the quantization and Huffman tables that are currently defined in the compression object will be emitted unless their sent_tables flag is already TRUE, and then all the sent_tables flags will be set TRUE. A sure-fire way to create matching tables-only and abbreviated image files is to proceed as follows: create JPEG compression object set JPEG parameters set destination to tables-only file jpeg_write_tables(&cinfo); set destination to image file jpeg_start_compress(&cinfo, FALSE); write data... jpeg_finish_compress(&cinfo); Since the JPEG parameters are not altered between writing the table file and the abbreviated image file, the same tables are sure to be used. Of course, you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence many times to produce many abbreviated image files matching the table file. You cannot suppress output of the computed Huffman tables when Huffman optimization is selected. (If you could, there'd be no way to decode the image...) Generally, you don't want to set optimize_coding = TRUE when you are trying to produce abbreviated files. In some cases you might want to compress an image using tables which are not stored in the application, but are defined in an interchange or tables-only file readable by the application. This can be done by setting up a JPEG decompression object to read the specification file, then copying the tables into your compression object. See jpeg_copy_critical_parameters() for an example of copying quantization tables. To read abbreviated image files, you simply need to load the proper tables into the decompression object before trying to read the abbreviated image. If the proper tables are stored in the application program, you can just allocate the table structs and fill in their contents directly. For example, to load a fixed quantization table into table slot "n": if (cinfo.quant_tbl_ptrs[n] == NULL) cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo); quant_ptr = cinfo.quant_tbl_ptrs[n]; /* quant_ptr is JQUANT_TBL* */ for (i = 0; i < 64; i++) { /* Qtable[] is desired quantization table, in natural array order */ quant_ptr->quantval[i] = Qtable[i]; } Code to load a fixed Huffman table is typically (for AC table "n"): if (cinfo.ac_huff_tbl_ptrs[n] == NULL) cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo); huff_ptr = cinfo.ac_huff_tbl_ptrs[n]; /* huff_ptr is JHUFF_TBL* */ for (i = 1; i <= 16; i++) { /* counts[i] is number of Huffman codes of length i bits, i=1..16 */ huff_ptr->bits[i] = counts[i]; } for (i = 0; i < 256; i++) { /* symbols[] is the list of Huffman symbols, in code-length order */ huff_ptr->huffval[i] = symbols[i]; } (Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a constant JQUANT_TBL object is not safe. If the incoming file happened to contain a quantization table definition, your master table would get overwritten! Instead allocate a working table copy and copy the master table into it, as illustrated above. Ditto for Huffman tables, of course.) You might want to read the tables from a tables-only file, rather than hard-wiring them into your application. The jpeg_read_header() call is sufficient to read a tables-only file. You must pass a second parameter of FALSE to indicate that you do not require an image to be present. Thus, the typical scenario is create JPEG decompression object set source to tables-only file jpeg_read_header(&cinfo, FALSE); set source to abbreviated image file jpeg_read_header(&cinfo, TRUE); set decompression parameters jpeg_start_decompress(&cinfo); read data... jpeg_finish_decompress(&cinfo); In some cases, you may want to read a file without knowing whether it contains an image or just tables. In that case, pass FALSE and check the return value from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found, JPEG_HEADER_TABLES_ONLY if only tables were found. (A third return value, JPEG_SUSPENDED, is possible when using a suspending data source manager.) Note that jpeg_read_header() will not complain if you read an abbreviated image for which you haven't loaded the missing tables; the missing-table check occurs later, in jpeg_start_decompress(). It is possible to read a series of images from a single source file by repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence, without releasing/recreating the JPEG object or the data source module. (If you did reinitialize, any partial bufferload left in the data source buffer at the end of one image would be discarded, causing you to lose the start of the next image.) When you use this method, stored tables are automatically carried forward, so some of the images can be abbreviated images that depend on tables from earlier images. If you intend to write a series of images into a single destination file, you might want to make a specialized data destination module that doesn't flush the output buffer at term_destination() time. This would speed things up by some trifling amount. Of course, you'd need to remember to flush the buffer after the last image. You can make the later images be abbreviated ones by passing FALSE to jpeg_start_compress(). Special markers --------------- Some applications may need to insert or extract special data in the JPEG datastream. The JPEG standard provides marker types "COM" (comment) and "APP0" through "APP15" (application) to hold application-specific data. Unfortunately, the use of these markers is not specified by the standard. COM markers are fairly widely used to hold user-supplied text. The JFIF file format spec uses APP0 markers with specified initial strings to hold certain data. Adobe applications use APP14 markers beginning with the string "Adobe" for miscellaneous data. Other APPn markers are rarely seen, but might contain almost anything. If you wish to store user-supplied text, we recommend you use COM markers and place readable 7-bit ASCII text in them. Newline conventions are not standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR (Mac style). A robust COM reader should be able to cope with random binary garbage, including nulls, since some applications generate COM markers containing non-ASCII junk. (But yours should not be one of them.) For program-supplied data, use an APPn marker, and be sure to begin it with an identifying string so that you can tell whether the marker is actually yours. It's probably best to avoid using APP0 or APP14 for any private markers. (NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you not use APP8 markers for any private purposes, either.) Keep in mind that at most 65533 bytes can be put into one marker, but you can have as many markers as you like. By default, the IJG compression library will write a JFIF APP0 marker if the selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if the selected colorspace is RGB, CMYK, or YCCK. You can disable this, but we don't recommend it. The decompression library will recognize JFIF and Adobe markers and will set the JPEG colorspace properly when one is found. You can write special markers immediately following the datastream header by calling jpeg_write_marker() after jpeg_start_compress() and before the first call to jpeg_write_scanlines(). When you do this, the markers appear after the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before all else. Specify the marker type parameter as "JPEG_COM" for COM or "JPEG_APP0 + n" for APPn. (Actually, jpeg_write_marker will let you write any marker type, but we don't recommend writing any other kinds of marker.) For example, to write a user comment string pointed to by comment_text: jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text)); If it's not convenient to store all the marker data in memory at once, you can instead call jpeg_write_m_header() followed by multiple calls to jpeg_write_m_byte(). If you do it this way, it's your responsibility to call jpeg_write_m_byte() exactly the number of times given in the length parameter to jpeg_write_m_header(). (This method lets you empty the output buffer partway through a marker, which might be important when using a suspending data destination module. In any case, if you are using a suspending destination, you should flush its buffer after inserting any special markers. See "I/O suspension".) Or, if you prefer to synthesize the marker byte sequence yourself, you can just cram it straight into the data destination module. If you are writing JFIF 1.02 extension markers (thumbnail images), don't forget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the correct JFIF version number in the JFIF header marker. The library's default is to write version 1.01, but that's wrong if you insert any 1.02 extension markers. (We could probably get away with just defaulting to 1.02, but there used to be broken decoders that would complain about unknown minor version numbers. To reduce compatibility risks it's safest not to write 1.02 unless you are actually using 1.02 extensions.) When reading, two methods of handling special markers are available: 1. You can ask the library to save the contents of COM and/or APPn markers into memory, and then examine them at your leisure afterwards. 2. You can supply your own routine to process COM and/or APPn markers on-the-fly as they are read. The first method is simpler to use, especially if you are using a suspending data source; writing a marker processor that copes with input suspension is not easy (consider what happens if the marker is longer than your available input buffer). However, the second method conserves memory since the marker data need not be kept around after it's been processed. For either method, you'd normally set up marker handling after creating a decompression object and before calling jpeg_read_header(), because the markers of interest will typically be near the head of the file and so will be scanned by jpeg_read_header. Once you've established a marker handling method, it will be used for the life of that decompression object (potentially many datastreams), unless you change it. Marker handling is determined separately for COM markers and for each APPn marker code. To save the contents of special markers in memory, call jpeg_save_markers(cinfo, marker_code, length_limit) where marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n. (To arrange to save all the special marker types, you need to call this routine 17 times, for COM and APP0-APP15.) If the incoming marker is longer than length_limit data bytes, only length_limit bytes will be saved; this parameter allows you to avoid chewing up memory when you only need to see the first few bytes of a potentially large marker. If you want to save all the data, set length_limit to 0xFFFF; that is enough since marker lengths are only 16 bits. As a special case, setting length_limit to 0 prevents that marker type from being saved at all. (That is the default behavior, in fact.) After jpeg_read_header() completes, you can examine the special markers by following the cinfo->marker_list pointer chain. All the special markers in the file appear in this list, in order of their occurrence in the file (but omitting any markers of types you didn't ask for). Both the original data length and the saved data length are recorded for each list entry; the latter will not exceed length_limit for the particular marker type. Note that these lengths exclude the marker length word, whereas the stored representation within the JPEG file includes it. (Hence the maximum data length is really only 65533.) It is possible that additional special markers appear in the file beyond the SOS marker at which jpeg_read_header stops; if so, the marker list will be extended during reading of the rest of the file. This is not expected to be common, however. If you are short on memory you may want to reset the length limit to zero for all marker types after finishing jpeg_read_header, to ensure that the max_memory_to_use setting cannot be exceeded due to addition of later markers. The marker list remains stored until you call jpeg_finish_decompress or jpeg_abort, at which point the memory is freed and the list is set to empty. (jpeg_destroy also releases the storage, of course.) Note that the library is internally interested in APP0 and APP14 markers; if you try to set a small nonzero length limit on these types, the library will silently force the length up to the minimum it wants. (But you can set a zero length limit to prevent them from being saved at all.) Also, in a 16-bit environment, the maximum length limit may be constrained to less than 65533 by malloc() limitations. It is therefore best not to assume that the effective length limit is exactly what you set it to be. If you want to supply your own marker-reading routine, you do it by calling jpeg_set_marker_processor(). A marker processor routine must have the signature boolean jpeg_marker_parser_method (j_decompress_ptr cinfo) Although the marker code is not explicitly passed, the routine can find it in cinfo->unread_marker. At the time of call, the marker proper has been read from the data source module. The processor routine is responsible for reading the marker length word and the remaining parameter bytes, if any. Return TRUE to indicate success. (FALSE should be returned only if you are using a suspending data source and it tells you to suspend. See the standard marker processors in jdmarker.c for appropriate coding methods if you need to use a suspending data source.) If you override the default APP0 or APP14 processors, it is up to you to recognize JFIF and Adobe markers if you want colorspace recognition to occur properly. We recommend copying and extending the default processors if you want to do that. (A better idea is to save these marker types for later examination by calling jpeg_save_markers(); that method doesn't interfere with the library's own processing of these markers.) jpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive --- if you call one it overrides any previous call to the other, for the particular marker type specified. A simple example of an external COM processor can be found in djpeg.c. Also, see jpegtran.c for an example of using jpeg_save_markers. Raw (downsampled) image data ---------------------------- Some applications need to supply already-downsampled image data to the JPEG compressor, or to receive raw downsampled data from the decompressor. The library supports this requirement by allowing the application to write or read raw data, bypassing the normal preprocessing or postprocessing steps. The interface is different from the standard one and is somewhat harder to use. If your interest is merely in bypassing color conversion, we recommend that you use the standard interface and simply set jpeg_color_space = in_color_space (or jpeg_color_space = out_color_space for decompression). The mechanism described in this section is necessary only to supply or receive downsampled image data, in which not all components have the same dimensions. To compress raw data, you must supply the data in the colorspace to be used in the JPEG file (please read the earlier section on Special color spaces) and downsampled to the sampling factors specified in the JPEG parameters. You must supply the data in the format used internally by the JPEG library, namely a JSAMPIMAGE array. This is an array of pointers to two-dimensional arrays, each of type JSAMPARRAY. Each 2-D array holds the values for one color component. This structure is necessary since the components are of different sizes. If the image dimensions are not a multiple of the MCU size, you must also pad the data correctly (usually, this is done by replicating the last column and/or row). The data must be padded to a multiple of a DCT block in each component: that is, each downsampled row must contain a multiple of 8 valid samples, and there must be a multiple of 8 sample rows for each component. (For applications such as conversion of digital TV images, the standard image size is usually a multiple of the DCT block size, so that no padding need actually be done.) The procedure for compression of raw data is basically the same as normal compression, except that you call jpeg_write_raw_data() in place of jpeg_write_scanlines(). Before calling jpeg_start_compress(), you must do the following: * Set cinfo->raw_data_in to TRUE. (It is set FALSE by jpeg_set_defaults().) This notifies the library that you will be supplying raw data. * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace() call is a good idea. Note that since color conversion is bypassed, in_color_space is ignored, except that jpeg_set_defaults() uses it to choose the default jpeg_color_space setting. * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and cinfo->comp_info[i].v_samp_factor, are correct. Since these indicate the dimensions of the data you are supplying, it's wise to set them explicitly, rather than assuming the library's defaults are what you want. To pass raw data to the library, call jpeg_write_raw_data() in place of jpeg_write_scanlines(). The two routines work similarly except that jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY. The scanlines count passed to and returned from jpeg_write_raw_data is measured in terms of the component with the largest v_samp_factor. jpeg_write_raw_data() processes one MCU row per call, which is to say v_samp_factor*DCTSIZE sample rows of each component. The passed num_lines value must be at least max_v_samp_factor*DCTSIZE, and the return value will be exactly that amount (or possibly some multiple of that amount, in future library versions). This is true even on the last call at the bottom of the image; don't forget to pad your data as necessary. The required dimensions of the supplied data can be computed for each component as cinfo->comp_info[i].width_in_blocks*DCTSIZE samples per row cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image after jpeg_start_compress() has initialized those fields. If the valid data is smaller than this, it must be padded appropriately. For some sampling factors and image sizes, additional dummy DCT blocks are inserted to make the image a multiple of the MCU dimensions. The library creates such dummy blocks itself; it does not read them from your supplied data. Therefore you need never pad by more than DCTSIZE samples. An example may help here. Assume 2h2v downsampling of YCbCr data, that is cinfo->comp_info[0].h_samp_factor = 2 for Y cinfo->comp_info[0].v_samp_factor = 2 cinfo->comp_info[1].h_samp_factor = 1 for Cb cinfo->comp_info[1].v_samp_factor = 1 cinfo->comp_info[2].h_samp_factor = 1 for Cr cinfo->comp_info[2].v_samp_factor = 1 and suppose that the nominal image dimensions (cinfo->image_width and cinfo->image_height) are 101x101 pixels. Then jpeg_start_compress() will compute downsampled_width = 101 and width_in_blocks = 13 for Y, downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same for the height fields). You must pad the Y data to at least 13*8 = 104 columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows. The MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16 scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual sample rows of Y and 8 each of Cb and Cr. A total of 7 MCU rows are needed, so you must pass a total of 7*16 = 112 "scanlines". The last DCT block row of Y data is dummy, so it doesn't matter what you pass for it in the data arrays, but the scanlines count must total up to 112 so that all of the Cb and Cr data gets passed. Output suspension is supported with raw-data compression: if the data destination module suspends, jpeg_write_raw_data() will return 0. In this case the same data rows must be passed again on the next call. Decompression with raw data output implies bypassing all postprocessing: you cannot ask for rescaling or color quantization, for instance. More seriously, you must deal with the color space and sampling factors present in the incoming file. If your application only handles, say, 2h1v YCbCr data, you must check for and fail on other color spaces or other sampling factors. The library will not convert to a different color space for you. To obtain raw data output, set cinfo->raw_data_out = TRUE before jpeg_start_decompress() (it is set FALSE by jpeg_read_header()). Be sure to verify that the color space and sampling factors are ones you can handle. Then call jpeg_read_raw_data() in place of jpeg_read_scanlines(). The decompression process is otherwise the same as usual. jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a buffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is the same as for raw-data compression). The buffer you pass must be large enough to hold the actual data plus padding to DCT-block boundaries. As with compression, any entirely dummy DCT blocks are not processed so you need not allocate space for them, but the total scanline count includes them. The above example of computing buffer dimensions for raw-data compression is equally valid for decompression. Input suspension is supported with raw-data decompression: if the data source module suspends, jpeg_read_raw_data() will return 0. You can also use buffered-image mode to read raw data in multiple passes. Really raw data: DCT coefficients --------------------------------- It is possible to read or write the contents of a JPEG file as raw DCT coefficients. This facility is mainly intended for use in lossless transcoding between different JPEG file formats. Other possible applications include lossless cropping of a JPEG image, lossless reassembly of a multi-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc. To read the contents of a JPEG file as DCT coefficients, open the file and do jpeg_read_header() as usual. But instead of calling jpeg_start_decompress() and jpeg_read_scanlines(), call jpeg_read_coefficients(). This will read the entire image into a set of virtual coefficient-block arrays, one array per component. The return value is a pointer to an array of virtual-array descriptors. Each virtual array can be accessed directly using the JPEG memory manager's access_virt_barray method (see Memory management, below, and also read structure.doc's discussion of virtual array handling). Or, for simple transcoding to a different JPEG file format, the array list can just be handed directly to jpeg_write_coefficients(). Each block in the block arrays contains quantized coefficient values in normal array order (not JPEG zigzag order). The block arrays contain only DCT blocks containing real data; any entirely-dummy blocks added to fill out interleaved MCUs at the right or bottom edges of the image are discarded during reading and are not stored in the block arrays. (The size of each block array can be determined from the width_in_blocks and height_in_blocks fields of the component's comp_info entry.) This is also the data format expected by jpeg_write_coefficients(). When you are done using the virtual arrays, call jpeg_finish_decompress() to release the array storage and return the decompression object to an idle state; or just call jpeg_destroy() if you don't need to reuse the object. If you use a suspending data source, jpeg_read_coefficients() will return NULL if it is forced to suspend; a non-NULL return value indicates successful completion. You need not test for a NULL return value when using a non-suspending data source. It is also possible to call jpeg_read_coefficients() to obtain access to the decoder's coefficient arrays during a normal decode cycle in buffered-image mode. This frammish might be useful for progressively displaying an incoming image and then re-encoding it without loss. To do this, decode in buffered- image mode as discussed previously, then call jpeg_read_coefficients() after the last jpeg_finish_output() call. The arrays will be available for your use until you call jpeg_finish_decompress(). To write the contents of a JPEG file as DCT coefficients, you must provide the DCT coefficients stored in virtual block arrays. You can either pass block arrays read from an input JPEG file by jpeg_read_coefficients(), or allocate virtual arrays from the JPEG compression object and fill them yourself. In either case, jpeg_write_coefficients() is substituted for jpeg_start_compress() and jpeg_write_scanlines(). Thus the sequence is * Create compression object * Set all compression parameters as necessary * Request virtual arrays if needed * jpeg_write_coefficients() * jpeg_finish_compress() * Destroy or re-use compression object jpeg_write_coefficients() is passed a pointer to an array of virtual block array descriptors; the number of arrays is equal to cinfo.num_components. The virtual arrays need only have been requested, not realized, before jpeg_write_coefficients() is called. A side-effect of jpeg_write_coefficients() is to realize any virtual arrays that have been requested from the compression object's memory manager. Thus, when obtaining the virtual arrays from the compression object, you should fill the arrays after calling jpeg_write_coefficients(). The data is actually written out when you call jpeg_finish_compress(); jpeg_write_coefficients() only writes the file header. When writing raw DCT coefficients, it is crucial that the JPEG quantization tables and sampling factors match the way the data was encoded, or the resulting file will be invalid. For transcoding from an existing JPEG file, we recommend using jpeg_copy_critical_parameters(). This routine initializes all the compression parameters to default values (like jpeg_set_defaults()), then copies the critical information from a source decompression object. The decompression object should have just been used to read the entire JPEG input file --- that is, it should be awaiting jpeg_finish_decompress(). jpeg_write_coefficients() marks all tables stored in the compression object as needing to be written to the output file (thus, it acts like jpeg_start_compress(cinfo, TRUE)). This is for safety's sake, to avoid emitting abbreviated JPEG files by accident. If you really want to emit an abbreviated JPEG file, call jpeg_suppress_tables(), or set the tables' individual sent_table flags, between calling jpeg_write_coefficients() and jpeg_finish_compress(). Progress monitoring ------------------- Some applications may need to regain control from the JPEG library every so often. The typical use of this feature is to produce a percent-done bar or other progress display. (For a simple example, see cjpeg.c or djpeg.c.) Although you do get control back frequently during the data-transferring pass (the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes will occur inside jpeg_finish_compress or jpeg_start_decompress; those routines may take a long time to execute, and you don't get control back until they are done. You can define a progress-monitor routine which will be called periodically by the library. No guarantees are made about how often this call will occur, so we don't recommend you use it for mouse tracking or anything like that. At present, a call will occur once per MCU row, scanline, or sample row group, whichever unit is convenient for the current processing mode; so the wider the image, the longer the time between calls. During the data transferring pass, only one call occurs per call of jpeg_read_scanlines or jpeg_write_scanlines, so don't pass a large number of scanlines at once if you want fine resolution in the progress count. (If you really need to use the callback mechanism for time-critical tasks like mouse tracking, you could insert additional calls inside some of the library's inner loops.) To establish a progress-monitor callback, create a struct jpeg_progress_mgr, fill in its progress_monitor field with a pointer to your callback routine, and set cinfo->progress to point to the struct. The callback will be called whenever cinfo->progress is non-NULL. (This pointer is set to NULL by jpeg_create_compress or jpeg_create_decompress; the library will not change it thereafter. So if you allocate dynamic storage for the progress struct, make sure it will live as long as the JPEG object does. Allocating from the JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.) You can use the same callback routine for both compression and decompression. The jpeg_progress_mgr struct contains four fields which are set by the library: long pass_counter; /* work units completed in this pass */ long pass_limit; /* total number of work units in this pass */ int completed_passes; /* passes completed so far */ int total_passes; /* total number of passes expected */ During any one pass, pass_counter increases from 0 up to (not including) pass_limit; the step size is usually but not necessarily 1. The pass_limit value may change from one pass to another. The expected total number of passes is in total_passes, and the number of passes already completed is in completed_passes. Thus the fraction of work completed may be estimated as completed_passes + (pass_counter/pass_limit) -------------------------------------------- total_passes ignoring the fact that the passes may not be equal amounts of work. When decompressing, pass_limit can even change within a pass, because it depends on the number of scans in the JPEG file, which isn't always known in advance. The computed fraction-of-work-done may jump suddenly (if the library discovers it has overestimated the number of scans) or even decrease (in the opposite case). It is not wise to put great faith in the work estimate. When using the decompressor's buffered-image mode, the progress monitor work estimate is likely to be completely unhelpful, because the library has no way to know how many output passes will be demanded of it. Currently, the library sets total_passes based on the assumption that there will be one more output pass if the input file end hasn't yet been read (jpeg_input_complete() isn't TRUE), but no more output passes if the file end has been reached when the output pass is started. This means that total_passes will rise as additional output passes are requested. If you have a way of determining the input file size, estimating progress based on the fraction of the file that's been read will probably be more useful than using the library's value. Memory management ----------------- This section covers some key facts about the JPEG library's built-in memory manager. For more info, please read structure.doc's section about the memory manager, and consult the source code if necessary. All memory and temporary file allocation within the library is done via the memory manager. If necessary, you can replace the "back end" of the memory manager to control allocation yourself (for example, if you don't want the library to use malloc() and free() for some reason). Some data is allocated "permanently" and will not be freed until the JPEG object is destroyed. Most data is allocated "per image" and is freed by jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort. You can call the memory manager yourself to allocate structures that will automatically be freed at these times. Typical code for this is ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size); Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object. Use alloc_large instead of alloc_small for anything bigger than a few Kbytes. There are also alloc_sarray and alloc_barray routines that automatically build 2-D sample or block arrays. The library's minimum space requirements to process an image depend on the image's width, but not on its height, because the library ordinarily works with "strip" buffers that are as wide as the image but just a few rows high. Some operating modes (eg, two-pass color quantization) require full-image buffers. Such buffers are treated as "virtual arrays": only the current strip need be in memory, and the rest can be swapped out to a temporary file. If you use the simplest memory manager back end (jmemnobs.c), then no temporary files are used; virtual arrays are simply malloc()'d. Images bigger than memory can be processed only if your system supports virtual memory. The other memory manager back ends support temporary files of various flavors and thus work in machines without virtual memory. They may also be useful on Unix machines if you need to process images that exceed available swap space. When using temporary files, the library will make the in-memory buffers for its virtual arrays just big enough to stay within a "maximum memory" setting. Your application can set this limit by setting cinfo->mem->max_memory_to_use after creating the JPEG object. (Of course, there is still a minimum size for the buffers, so the max-memory setting is effective only if it is bigger than the minimum space needed.) If you allocate any large structures yourself, you must allocate them before jpeg_start_compress() or jpeg_start_decompress() in order to have them counted against the max memory limit. Also keep in mind that space allocated with alloc_small() is ignored, on the assumption that it's too small to be worth worrying about; so a reasonable safety margin should be left when setting max_memory_to_use. If you use the jmemname.c or jmemdos.c memory manager back end, it is important to clean up the JPEG object properly to ensure that the temporary files get deleted. (This is especially crucial with jmemdos.c, where the "temporary files" may be extended-memory segments; if they are not freed, DOS will require a reboot to recover the memory.) Thus, with these memory managers, it's a good idea to provide a signal handler that will trap any early exit from your program. The handler should call either jpeg_abort() or jpeg_destroy() for any active JPEG objects. A handler is not needed with jmemnobs.c, and shouldn't be necessary with jmemansi.c or jmemmac.c either, since the C library is supposed to take care of deleting files made with tmpfile(). Memory usage ------------ Working memory requirements while performing compression or decompression depend on image dimensions, image characteristics (such as colorspace and JPEG process), and operating mode (application-selected options). As of v6b, the decompressor requires: 1. About 24K in more-or-less-fixed-size data. This varies a bit depending on operating mode and image characteristics (particularly color vs. grayscale), but it doesn't depend on image dimensions. 2. Strip buffers (of size proportional to the image width) for IDCT and upsampling results. The worst case for commonly used sampling factors is about 34 bytes * width in pixels for a color image. A grayscale image only needs about 8 bytes per pixel column. 3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG file (including progressive JPEGs), or whenever you select buffered-image mode. This takes 2 bytes/coefficient. At typical 2x2 sampling, that's 3 bytes per pixel for a color image. Worst case (1x1 sampling) requires 6 bytes/pixel. For grayscale, figure 2 bytes/pixel. 4. To perform 2-pass color quantization, the decompressor also needs a 128K color lookup table and a full-image pixel buffer (3 bytes/pixel). This does not count any memory allocated by the application, such as a buffer to hold the final output image. The above figures are valid for 8-bit JPEG data precision and a machine with 32-bit ints. For 12-bit JPEG data, double the size of the strip buffers and quantization pixel buffer. The "fixed-size" data will be somewhat smaller with 16-bit ints, larger with 64-bit ints. Also, CMYK or other unusual color spaces will require different amounts of space. The full-image coefficient and pixel buffers, if needed at all, do not have to be fully RAM resident; you can have the library use temporary files instead when the total memory usage would exceed a limit you set. (But if your OS supports virtual memory, it's probably better to just use jmemnobs and let the OS do the swapping.) The compressor's memory requirements are similar, except that it has no need for color quantization. Also, it needs a full-image DCT coefficient buffer if Huffman-table optimization is asked for, even if progressive mode is not requested. If you need more detailed information about memory usage in a particular situation, you can enable the MEM_STATS code in jmemmgr.c. Library compile-time options ---------------------------- A number of compile-time options are available by modifying jmorecfg.h. The JPEG standard provides for both the baseline 8-bit DCT process and a 12-bit DCT process. The IJG code supports 12-bit lossy JPEG if you define BITS_IN_JSAMPLE as 12 rather than 8. Note that this causes JSAMPLE to be larger than a char, so it affects the surrounding application's image data. The sample applications cjpeg and djpeg can support 12-bit mode only for PPM and GIF file formats; you must disable the other file formats to compile a 12-bit cjpeg or djpeg. (install.doc has more information about that.) At present, a 12-bit library can handle *only* 12-bit images, not both precisions. (If you need to include both 8- and 12-bit libraries in a single application, you could probably do it by defining NEED_SHORT_EXTERNAL_NAMES for just one of the copies. You'd have to access the 8-bit and 12-bit copies from separate application source files. This is untested ... if you try it, we'd like to hear whether it works!) Note that a 12-bit library always compresses in Huffman optimization mode, in order to generate valid Huffman tables. This is necessary because our default Huffman tables only cover 8-bit data. If you need to output 12-bit files in one pass, you'll have to supply suitable default Huffman tables. You may also want to supply your own DCT quantization tables; the existing quality-scaling code has been developed for 8-bit use, and probably doesn't generate especially good tables for 12-bit. The maximum number of components (color channels) in the image is determined by MAX_COMPONENTS. The JPEG standard allows up to 255 components, but we expect that few applications will need more than four or so. On machines with unusual data type sizes, you may be able to improve performance or reduce memory space by tweaking the various typedefs in jmorecfg.h. In particular, on some RISC CPUs, access to arrays of "short"s is quite slow; consider trading memory for speed by making JCOEF, INT16, and UINT16 be "int" or "unsigned int". UINT8 is also a candidate to become int. You probably don't want to make JSAMPLE be int unless you have lots of memory to burn. You can reduce the size of the library by compiling out various optional functions. To do this, undefine xxx_SUPPORTED symbols as necessary. You can also save a few K by not having text error messages in the library; the standard error message table occupies about 5Kb. This is particularly reasonable for embedded applications where there's no good way to display a message anyway. To do this, remove the creation of the message table (jpeg_std_message_table[]) from jerror.c, and alter format_message to do something reasonable without it. You could output the numeric value of the message code number, for example. If you do this, you can also save a couple more K by modifying the TRACEMSn() macros in jerror.h to expand to nothing; you don't need trace capability anyway, right? Portability considerations -------------------------- The JPEG library has been written to be extremely portable; the sample applications cjpeg and djpeg are slightly less so. This section summarizes the design goals in this area. (If you encounter any bugs that cause the library to be less portable than is claimed here, we'd appreciate hearing about them.) The code works fine on ANSI C, C++, and pre-ANSI C compilers, using any of the popular system include file setups, and some not-so-popular ones too. See install.doc for configuration procedures. The code is not dependent on the exact sizes of the C data types. As distributed, we make the assumptions that char is at least 8 bits wide short is at least 16 bits wide int is at least 16 bits wide long is at least 32 bits wide (These are the minimum requirements of the ANSI C standard.) Wider types will work fine, although memory may be used inefficiently if char is much larger than 8 bits or short is much bigger than 16 bits. The code should work equally well with 16- or 32-bit ints. In a system where these assumptions are not met, you may be able to make the code work by modifying the typedefs in jmorecfg.h. However, you will probably have difficulty if int is less than 16 bits wide, since references to plain int abound in the code. char can be either signed or unsigned, although the code runs faster if an unsigned char type is available. If char is wider than 8 bits, you will need to redefine JOCTET and/or provide custom data source/destination managers so that JOCTET represents exactly 8 bits of data on external storage. The JPEG library proper does not assume ASCII representation of characters. But some of the image file I/O modules in cjpeg/djpeg do have ASCII dependencies in file-header manipulation; so does cjpeg's select_file_type() routine. The JPEG library does not rely heavily on the C library. In particular, C stdio is used only by the data source/destination modules and the error handler, all of which are application-replaceable. (cjpeg/djpeg are more heavily dependent on stdio.) malloc and free are called only from the memory manager "back end" module, so you can use a different memory allocator by replacing that one file. The code generally assumes that C names must be unique in the first 15 characters. However, global function names can be made unique in the first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES. More info about porting the code may be gleaned by reading jconfig.doc, jmorecfg.h, and jinclude.h. Notes for MS-DOS implementors ----------------------------- The IJG code is designed to work efficiently in 80x86 "small" or "medium" memory models (i.e., data pointers are 16 bits unless explicitly declared "far"; code pointers can be either size). You may be able to use small model to compile cjpeg or djpeg by itself, but you will probably have to use medium model for any larger application. This won't make much difference in performance. You *will* take a noticeable performance hit if you use a large-data memory model (perhaps 10%-25%), and you should avoid "huge" model if at all possible. The JPEG library typically needs 2Kb-3Kb of stack space. It will also malloc about 20K-30K of near heap space while executing (and lots of far heap, but that doesn't count in this calculation). This figure will vary depending on selected operating mode, and to a lesser extent on image size. There is also about 5Kb-6Kb of constant data which will be allocated in the near data segment (about 4Kb of this is the error message table). Thus you have perhaps 20K available for other modules' static data and near heap space before you need to go to a larger memory model. The C library's static data will account for several K of this, but that still leaves a good deal for your needs. (If you are tight on space, you could reduce the sizes of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to 1K. Another possibility is to move the error message table to far memory; this should be doable with only localized hacking on jerror.c.) About 2K of the near heap space is "permanent" memory that will not be released until you destroy the JPEG object. This is only an issue if you save a JPEG object between compression or decompression operations. Far data space may also be a tight resource when you are dealing with large images. The most memory-intensive case is decompression with two-pass color quantization, or single-pass quantization to an externally supplied color map. This requires a 128Kb color lookup table plus strip buffers amounting to about 40 bytes per column for typical sampling ratios (eg, about 25600 bytes for a 640-pixel-wide image). You may not be able to process wide images if you have large data structures of your own. Of course, all of these concerns vanish if you use a 32-bit flat-memory-model compiler, such as DJGPP or Watcom C. We highly recommend flat model if you can use it; the JPEG library is significantly faster in flat model. htmldoc-1.8.27/jpeg/jidctflt.c0100664000212600000240000002040306713354635014631 0ustar mikeuser/* * jidctflt.c * * Copyright (C) 1994-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains a floating-point implementation of the * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine * must also perform dequantization of the input coefficients. * * This implementation should be more accurate than either of the integer * IDCT implementations. However, it may not give the same results on all * machines because of differences in roundoff behavior. Speed will depend * on the hardware's floating point capacity. * * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT * on each row (or vice versa, but it's more convenient to emit a row at * a time). Direct algorithms are also available, but they are much more * complex and seem not to be any faster when reduced to code. * * This implementation is based on Arai, Agui, and Nakajima's algorithm for * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in * Japanese, but the algorithm is described in the Pennebaker & Mitchell * JPEG textbook (see REFERENCES section in file README). The following code * is based directly on figure 4-8 in P&M. * While an 8-point DCT cannot be done in less than 11 multiplies, it is * possible to arrange the computation so that many of the multiplies are * simple scalings of the final outputs. These multiplies can then be * folded into the multiplications or divisions by the JPEG quantization * table entries. The AA&N method leaves only 5 multiplies and 29 adds * to be done in the DCT itself. * The primary disadvantage of this method is that with a fixed-point * implementation, accuracy is lost due to imprecise representation of the * scaled quantization values. However, that problem does not arise if * we use floating point arithmetic. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef DCT_FLOAT_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* Dequantize a coefficient by multiplying it by the multiplier-table * entry; produce a float result. */ #define DEQUANTIZE(coef,quantval) (((FAST_FLOAT) (coef)) * (quantval)) /* * Perform dequantization and inverse DCT on one block of coefficients. */ GLOBAL(void) jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; FAST_FLOAT tmp10, tmp11, tmp12, tmp13; FAST_FLOAT z5, z10, z11, z12, z13; JCOEFPTR inptr; FLOAT_MULT_TYPE * quantptr; FAST_FLOAT * wsptr; JSAMPROW outptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); int ctr; FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */ SHIFT_TEMPS /* Pass 1: process columns from input, store into work array. */ inptr = coef_block; quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table; wsptr = workspace; for (ctr = DCTSIZE; ctr > 0; ctr--) { /* Due to quantization, we will usually find that many of the input * coefficients are zero, especially the AC terms. We can exploit this * by short-circuiting the IDCT calculation for any column in which all * the AC terms are zero. In that case each output is equal to the * DC coefficient (with scale factor as needed). * With typical images and quantization tables, half or more of the * column DCT calculations can be simplified this way. */ if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { /* AC terms all zero */ FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); wsptr[DCTSIZE*0] = dcval; wsptr[DCTSIZE*1] = dcval; wsptr[DCTSIZE*2] = dcval; wsptr[DCTSIZE*3] = dcval; wsptr[DCTSIZE*4] = dcval; wsptr[DCTSIZE*5] = dcval; wsptr[DCTSIZE*6] = dcval; wsptr[DCTSIZE*7] = dcval; inptr++; /* advance pointers to next column */ quantptr++; wsptr++; continue; } /* Even part */ tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); tmp10 = tmp0 + tmp2; /* phase 3 */ tmp11 = tmp0 - tmp2; tmp13 = tmp1 + tmp3; /* phases 5-3 */ tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ tmp0 = tmp10 + tmp13; /* phase 2 */ tmp3 = tmp10 - tmp13; tmp1 = tmp11 + tmp12; tmp2 = tmp11 - tmp12; /* Odd part */ tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); z13 = tmp6 + tmp5; /* phase 6 */ z10 = tmp6 - tmp5; z11 = tmp4 + tmp7; z12 = tmp4 - tmp7; tmp7 = z11 + z13; /* phase 5 */ tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ tmp6 = tmp12 - tmp7; /* phase 2 */ tmp5 = tmp11 - tmp6; tmp4 = tmp10 + tmp5; wsptr[DCTSIZE*0] = tmp0 + tmp7; wsptr[DCTSIZE*7] = tmp0 - tmp7; wsptr[DCTSIZE*1] = tmp1 + tmp6; wsptr[DCTSIZE*6] = tmp1 - tmp6; wsptr[DCTSIZE*2] = tmp2 + tmp5; wsptr[DCTSIZE*5] = tmp2 - tmp5; wsptr[DCTSIZE*4] = tmp3 + tmp4; wsptr[DCTSIZE*3] = tmp3 - tmp4; inptr++; /* advance pointers to next column */ quantptr++; wsptr++; } /* Pass 2: process rows from work array, store into output array. */ /* Note that we must descale the results by a factor of 8 == 2**3. */ wsptr = workspace; for (ctr = 0; ctr < DCTSIZE; ctr++) { outptr = output_buf[ctr] + output_col; /* Rows of zeroes can be exploited in the same way as we did with columns. * However, the column calculation has created many nonzero AC terms, so * the simplification applies less often (typically 5% to 10% of the time). * And testing floats for zero is relatively expensive, so we don't bother. */ /* Even part */ tmp10 = wsptr[0] + wsptr[4]; tmp11 = wsptr[0] - wsptr[4]; tmp13 = wsptr[2] + wsptr[6]; tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; tmp0 = tmp10 + tmp13; tmp3 = tmp10 - tmp13; tmp1 = tmp11 + tmp12; tmp2 = tmp11 - tmp12; /* Odd part */ z13 = wsptr[5] + wsptr[3]; z10 = wsptr[5] - wsptr[3]; z11 = wsptr[1] + wsptr[7]; z12 = wsptr[1] - wsptr[7]; tmp7 = z11 + z13; tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ tmp6 = tmp12 - tmp7; tmp5 = tmp11 - tmp6; tmp4 = tmp10 + tmp5; /* Final output stage: scale down by a factor of 8 and range-limit */ outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3) & RANGE_MASK]; outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3) & RANGE_MASK]; outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3) & RANGE_MASK]; outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3) & RANGE_MASK]; outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3) & RANGE_MASK]; outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3) & RANGE_MASK]; outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3) & RANGE_MASK]; outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3) & RANGE_MASK]; wsptr += DCTSIZE; /* advance pointer to next row */ } } #endif /* DCT_FLOAT_SUPPORTED */ htmldoc-1.8.27/jpeg/jctrans.c0100664000212600000240000003323106713354635014475 0ustar mikeuser/* * jctrans.c * * Copyright (C) 1995-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains library routines for transcoding compression, * that is, writing raw DCT coefficient arrays to an output JPEG file. * The routines in jcapimin.c will also be needed by a transcoder. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Forward declarations */ LOCAL(void) transencode_master_selection JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); LOCAL(void) transencode_coef_controller JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); /* * Compression initialization for writing raw-coefficient data. * Before calling this, all parameters and a data destination must be set up. * Call jpeg_finish_compress() to actually write the data. * * The number of passed virtual arrays must match cinfo->num_components. * Note that the virtual arrays need not be filled or even realized at * the time write_coefficients is called; indeed, if the virtual arrays * were requested from this compression object's memory manager, they * typically will be realized during this routine and filled afterwards. */ GLOBAL(void) jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) { if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Mark all tables to be written */ jpeg_suppress_tables(cinfo, FALSE); /* (Re)initialize error mgr and destination modules */ (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); (*cinfo->dest->init_destination) (cinfo); /* Perform master selection of active modules */ transencode_master_selection(cinfo, coef_arrays); /* Wait for jpeg_finish_compress() call */ cinfo->next_scanline = 0; /* so jpeg_write_marker works */ cinfo->global_state = CSTATE_WRCOEFS; } /* * Initialize the compression object with default parameters, * then copy from the source object all parameters needed for lossless * transcoding. Parameters that can be varied without loss (such as * scan script and Huffman optimization) are left in their default states. */ GLOBAL(void) jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, j_compress_ptr dstinfo) { JQUANT_TBL ** qtblptr; jpeg_component_info *incomp, *outcomp; JQUANT_TBL *c_quant, *slot_quant; int tblno, ci, coefi; /* Safety check to ensure start_compress not called yet. */ if (dstinfo->global_state != CSTATE_START) ERREXIT1(dstinfo, JERR_BAD_STATE, dstinfo->global_state); /* Copy fundamental image dimensions */ dstinfo->image_width = srcinfo->image_width; dstinfo->image_height = srcinfo->image_height; dstinfo->input_components = srcinfo->num_components; dstinfo->in_color_space = srcinfo->jpeg_color_space; /* Initialize all parameters to default values */ jpeg_set_defaults(dstinfo); /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB. * Fix it to get the right header markers for the image colorspace. */ jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space); dstinfo->data_precision = srcinfo->data_precision; dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling; /* Copy the source's quantization tables. */ for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { if (srcinfo->quant_tbl_ptrs[tblno] != NULL) { qtblptr = & dstinfo->quant_tbl_ptrs[tblno]; if (*qtblptr == NULL) *qtblptr = jpeg_alloc_quant_table((j_common_ptr) dstinfo); MEMCOPY((*qtblptr)->quantval, srcinfo->quant_tbl_ptrs[tblno]->quantval, SIZEOF((*qtblptr)->quantval)); (*qtblptr)->sent_table = FALSE; } } /* Copy the source's per-component info. * Note we assume jpeg_set_defaults has allocated the dest comp_info array. */ dstinfo->num_components = srcinfo->num_components; if (dstinfo->num_components < 1 || dstinfo->num_components > MAX_COMPONENTS) ERREXIT2(dstinfo, JERR_COMPONENT_COUNT, dstinfo->num_components, MAX_COMPONENTS); for (ci = 0, incomp = srcinfo->comp_info, outcomp = dstinfo->comp_info; ci < dstinfo->num_components; ci++, incomp++, outcomp++) { outcomp->component_id = incomp->component_id; outcomp->h_samp_factor = incomp->h_samp_factor; outcomp->v_samp_factor = incomp->v_samp_factor; outcomp->quant_tbl_no = incomp->quant_tbl_no; /* Make sure saved quantization table for component matches the qtable * slot. If not, the input file re-used this qtable slot. * IJG encoder currently cannot duplicate this. */ tblno = outcomp->quant_tbl_no; if (tblno < 0 || tblno >= NUM_QUANT_TBLS || srcinfo->quant_tbl_ptrs[tblno] == NULL) ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno); slot_quant = srcinfo->quant_tbl_ptrs[tblno]; c_quant = incomp->quant_table; if (c_quant != NULL) { for (coefi = 0; coefi < DCTSIZE2; coefi++) { if (c_quant->quantval[coefi] != slot_quant->quantval[coefi]) ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno); } } /* Note: we do not copy the source's Huffman table assignments; * instead we rely on jpeg_set_colorspace to have made a suitable choice. */ } /* Also copy JFIF version and resolution information, if available. * Strictly speaking this isn't "critical" info, but it's nearly * always appropriate to copy it if available. In particular, * if the application chooses to copy JFIF 1.02 extension markers from * the source file, we need to copy the version to make sure we don't * emit a file that has 1.02 extensions but a claimed version of 1.01. * We will *not*, however, copy version info from mislabeled "2.01" files. */ if (srcinfo->saw_JFIF_marker) { if (srcinfo->JFIF_major_version == 1) { dstinfo->JFIF_major_version = srcinfo->JFIF_major_version; dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version; } dstinfo->density_unit = srcinfo->density_unit; dstinfo->X_density = srcinfo->X_density; dstinfo->Y_density = srcinfo->Y_density; } } /* * Master selection of compression modules for transcoding. * This substitutes for jcinit.c's initialization of the full compressor. */ LOCAL(void) transencode_master_selection (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) { /* Although we don't actually use input_components for transcoding, * jcmaster.c's initial_setup will complain if input_components is 0. */ cinfo->input_components = 1; /* Initialize master control (includes parameter checking/processing) */ jinit_c_master_control(cinfo, TRUE /* transcode only */); /* Entropy encoding: either Huffman or arithmetic coding. */ if (cinfo->arith_code) { ERREXIT(cinfo, JERR_ARITH_NOTIMPL); } else { if (cinfo->progressive_mode) { #ifdef C_PROGRESSIVE_SUPPORTED jinit_phuff_encoder(cinfo); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else jinit_huff_encoder(cinfo); } /* We need a special coefficient buffer controller. */ transencode_coef_controller(cinfo, coef_arrays); jinit_marker_writer(cinfo); /* We can now tell the memory manager to allocate virtual arrays. */ (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); /* Write the datastream header (SOI, JFIF) immediately. * Frame and scan headers are postponed till later. * This lets application insert special markers after the SOI. */ (*cinfo->marker->write_file_header) (cinfo); } /* * The rest of this file is a special implementation of the coefficient * buffer controller. This is similar to jccoefct.c, but it handles only * output from presupplied virtual arrays. Furthermore, we generate any * dummy padding blocks on-the-fly rather than expecting them to be present * in the arrays. */ /* Private buffer controller object */ typedef struct { struct jpeg_c_coef_controller pub; /* public fields */ JDIMENSION iMCU_row_num; /* iMCU row # within image */ JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ int MCU_vert_offset; /* counts MCU rows within iMCU row */ int MCU_rows_per_iMCU_row; /* number of such rows needed */ /* Virtual block array for each component. */ jvirt_barray_ptr * whole_image; /* Workspace for constructing dummy blocks at right/bottom edges. */ JBLOCKROW dummy_buffer[C_MAX_BLOCKS_IN_MCU]; } my_coef_controller; typedef my_coef_controller * my_coef_ptr; LOCAL(void) start_iMCU_row (j_compress_ptr cinfo) /* Reset within-iMCU-row counters for a new row */ { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; /* In an interleaved scan, an MCU row is the same as an iMCU row. * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. * But at the bottom of the image, process only what's left. */ if (cinfo->comps_in_scan > 1) { coef->MCU_rows_per_iMCU_row = 1; } else { if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; else coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; } coef->mcu_ctr = 0; coef->MCU_vert_offset = 0; } /* * Initialize for a processing pass. */ METHODDEF(void) start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; if (pass_mode != JBUF_CRANK_DEST) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); coef->iMCU_row_num = 0; start_iMCU_row(cinfo); } /* * Process some data. * We process the equivalent of one fully interleaved MCU row ("iMCU" row) * per call, ie, v_samp_factor block rows for each component in the scan. * The data is obtained from the virtual arrays and fed to the entropy coder. * Returns TRUE if the iMCU row is completed, FALSE if suspended. * * NB: input_buf is ignored; it is likely to be a NULL pointer. */ METHODDEF(boolean) compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION MCU_col_num; /* index of current MCU within row */ JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; int blkn, ci, xindex, yindex, yoffset, blockcnt; JDIMENSION start_col; JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; JBLOCKROW buffer_ptr; jpeg_component_info *compptr; /* Align the virtual buffers for the components used in this scan. */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; buffer[ci] = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], coef->iMCU_row_num * compptr->v_samp_factor, (JDIMENSION) compptr->v_samp_factor, FALSE); } /* Loop to process one whole iMCU row */ for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; yoffset++) { for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; MCU_col_num++) { /* Construct list of pointers to DCT blocks belonging to this MCU */ blkn = 0; /* index of current DCT block within MCU */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; start_col = MCU_col_num * compptr->MCU_width; blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width : compptr->last_col_width; for (yindex = 0; yindex < compptr->MCU_height; yindex++) { if (coef->iMCU_row_num < last_iMCU_row || yindex+yoffset < compptr->last_row_height) { /* Fill in pointers to real blocks in this row */ buffer_ptr = buffer[ci][yindex+yoffset] + start_col; for (xindex = 0; xindex < blockcnt; xindex++) MCU_buffer[blkn++] = buffer_ptr++; } else { /* At bottom of image, need a whole row of dummy blocks */ xindex = 0; } /* Fill in any dummy blocks needed in this row. * Dummy blocks are filled in the same way as in jccoefct.c: * all zeroes in the AC entries, DC entries equal to previous * block's DC value. The init routine has already zeroed the * AC entries, so we need only set the DC entries correctly. */ for (; xindex < compptr->MCU_width; xindex++) { MCU_buffer[blkn] = coef->dummy_buffer[blkn]; MCU_buffer[blkn][0][0] = MCU_buffer[blkn-1][0][0]; blkn++; } } } /* Try to write the MCU. */ if (! (*cinfo->entropy->encode_mcu) (cinfo, MCU_buffer)) { /* Suspension forced; update state counters and exit */ coef->MCU_vert_offset = yoffset; coef->mcu_ctr = MCU_col_num; return FALSE; } } /* Completed an MCU row, but perhaps not an iMCU row */ coef->mcu_ctr = 0; } /* Completed the iMCU row, advance counters for next one */ coef->iMCU_row_num++; start_iMCU_row(cinfo); return TRUE; } /* * Initialize coefficient buffer controller. * * Each passed coefficient array must be the right size for that * coefficient: width_in_blocks wide and height_in_blocks high, * with unitheight at least v_samp_factor. */ LOCAL(void) transencode_coef_controller (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) { my_coef_ptr coef; JBLOCKROW buffer; int i; coef = (my_coef_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_coef_controller)); cinfo->coef = (struct jpeg_c_coef_controller *) coef; coef->pub.start_pass = start_pass_coef; coef->pub.compress_data = compress_output; /* Save pointer to virtual arrays */ coef->whole_image = coef_arrays; /* Allocate and pre-zero space for dummy DCT blocks. */ buffer = (JBLOCKROW) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); jzero_far((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { coef->dummy_buffer[i] = buffer + i; } } htmldoc-1.8.27/jpeg/jpegint.h0100664000212600000240000003654006713354635014504 0ustar mikeuser/* * jpegint.h * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file provides common declarations for the various JPEG modules. * These declarations are considered internal to the JPEG library; most * applications using the library shouldn't need to include this file. */ /* Declarations for both compression & decompression */ typedef enum { /* Operating modes for buffer controllers */ JBUF_PASS_THRU, /* Plain stripwise operation */ /* Remaining modes require a full-image buffer to have been created */ JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ } J_BUF_MODE; /* Values of global_state field (jdapi.c has some dependencies on ordering!) */ #define CSTATE_START 100 /* after create_compress */ #define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ #define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ #define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ #define DSTATE_START 200 /* after create_decompress */ #define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ #define DSTATE_READY 202 /* found SOS, ready for start_decompress */ #define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ #define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ #define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ #define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ #define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ #define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ #define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ #define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ /* Declarations for compression modules */ /* Master control module */ struct jpeg_comp_master { JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); /* State variables made visible to other modules */ boolean call_pass_startup; /* True if pass_startup must be called */ boolean is_last_pass; /* True during last pass */ }; /* Main buffer control (downsampled-data buffer) */ struct jpeg_c_main_controller { JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); JMETHOD(void, process_data, (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); }; /* Compression preprocessing (downsampling input buffer control) */ struct jpeg_c_prep_controller { JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail, JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, JDIMENSION out_row_groups_avail)); }; /* Coefficient buffer control */ struct jpeg_c_coef_controller { JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, JSAMPIMAGE input_buf)); }; /* Colorspace conversion */ struct jpeg_color_converter { JMETHOD(void, start_pass, (j_compress_ptr cinfo)); JMETHOD(void, color_convert, (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows)); }; /* Downsampling */ struct jpeg_downsampler { JMETHOD(void, start_pass, (j_compress_ptr cinfo)); JMETHOD(void, downsample, (j_compress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION in_row_index, JSAMPIMAGE output_buf, JDIMENSION out_row_group_index)); boolean need_context_rows; /* TRUE if need rows above & below */ }; /* Forward DCT (also controls coefficient quantization) */ struct jpeg_forward_dct { JMETHOD(void, start_pass, (j_compress_ptr cinfo)); /* perhaps this should be an array??? */ JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY sample_data, JBLOCKROW coef_blocks, JDIMENSION start_row, JDIMENSION start_col, JDIMENSION num_blocks)); }; /* Entropy encoding */ struct jpeg_entropy_encoder { JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); }; /* Marker writing */ struct jpeg_marker_writer { JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); /* These routines are exported to allow insertion of extra markers */ /* Probably only COM and APPn markers should be written this way */ JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker, unsigned int datalen)); JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val)); }; /* Declarations for decompression modules */ /* Master control module */ struct jpeg_decomp_master { JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); /* State variables made visible to other modules */ boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ }; /* Input control module */ struct jpeg_input_controller { JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); /* State variables made visible to other modules */ boolean has_multiple_scans; /* True if file has multiple scans */ boolean eoi_reached; /* True when EOI has been consumed */ }; /* Main buffer control (downsampled-data buffer) */ struct jpeg_d_main_controller { JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); JMETHOD(void, process_data, (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); }; /* Coefficient buffer control */ struct jpeg_d_coef_controller { JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); /* Pointer to array of coefficient virtual arrays, or NULL if none */ jvirt_barray_ptr *coef_arrays; }; /* Decompression postprocessing (color quantization buffer control) */ struct jpeg_d_post_controller { JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); }; /* Marker reading & parsing */ struct jpeg_marker_reader { JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); /* Read markers until SOS or EOI. * Returns same codes as are defined for jpeg_consume_input: * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. */ JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); /* Read a restart marker --- exported for use by entropy decoder only */ jpeg_marker_parser_method read_restart_marker; /* State of marker reader --- nominally internal, but applications * supplying COM or APPn handlers might like to know the state. */ boolean saw_SOI; /* found SOI? */ boolean saw_SOF; /* found SOF? */ int next_restart_num; /* next restart number expected (0-7) */ unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ }; /* Entropy decoding */ struct jpeg_entropy_decoder { JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)); /* This is here to share code between baseline and progressive decoders; */ /* other modules probably should not use it */ boolean insufficient_data; /* set TRUE after emitting warning */ }; /* Inverse DCT (also performs dequantization) */ typedef JMETHOD(void, inverse_DCT_method_ptr, (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); struct jpeg_inverse_dct { JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); /* It is useful to allow each component to have a separate IDCT method. */ inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; }; /* Upsampling (note that upsampler must also call color converter) */ struct jpeg_upsampler { JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); JMETHOD(void, upsample, (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); boolean need_context_rows; /* TRUE if need rows above & below */ }; /* Colorspace conversion */ struct jpeg_color_deconverter { JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); JMETHOD(void, color_convert, (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows)); }; /* Color quantization or color precision reduction */ struct jpeg_color_quantizer { JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)); JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); }; /* Miscellaneous useful macros */ #undef MAX #define MAX(a,b) ((a) > (b) ? (a) : (b)) #undef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) /* We assume that right shift corresponds to signed division by 2 with * rounding towards minus infinity. This is correct for typical "arithmetic * shift" instructions that shift in copies of the sign bit. But some * C compilers implement >> with an unsigned shift. For these machines you * must define RIGHT_SHIFT_IS_UNSIGNED. * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. * It is only applied with constant shift counts. SHIFT_TEMPS must be * included in the variables of any routine using RIGHT_SHIFT. */ #ifdef RIGHT_SHIFT_IS_UNSIGNED #define SHIFT_TEMPS INT32 shift_temp; #define RIGHT_SHIFT(x,shft) \ ((shift_temp = (x)) < 0 ? \ (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ (shift_temp >> (shft))) #else #define SHIFT_TEMPS #define RIGHT_SHIFT(x,shft) ((x) >> (shft)) #endif /* Short forms of external names for systems with brain-damaged linkers. */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jinit_compress_master jICompress #define jinit_c_master_control jICMaster #define jinit_c_main_controller jICMainC #define jinit_c_prep_controller jICPrepC #define jinit_c_coef_controller jICCoefC #define jinit_color_converter jICColor #define jinit_downsampler jIDownsampler #define jinit_forward_dct jIFDCT #define jinit_huff_encoder jIHEncoder #define jinit_phuff_encoder jIPHEncoder #define jinit_marker_writer jIMWriter #define jinit_master_decompress jIDMaster #define jinit_d_main_controller jIDMainC #define jinit_d_coef_controller jIDCoefC #define jinit_d_post_controller jIDPostC #define jinit_input_controller jIInCtlr #define jinit_marker_reader jIMReader #define jinit_huff_decoder jIHDecoder #define jinit_phuff_decoder jIPHDecoder #define jinit_inverse_dct jIIDCT #define jinit_upsampler jIUpsampler #define jinit_color_deconverter jIDColor #define jinit_1pass_quantizer jI1Quant #define jinit_2pass_quantizer jI2Quant #define jinit_merged_upsampler jIMUpsampler #define jinit_memory_mgr jIMemMgr #define jdiv_round_up jDivRound #define jround_up jRound #define jcopy_sample_rows jCopySamples #define jcopy_block_row jCopyBlocks #define jzero_far jZeroFar #define jpeg_zigzag_order jZIGTable #define jpeg_natural_order jZAGTable #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* Compression module initialization routines */ EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, boolean transcode_only)); EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, boolean need_full_buffer)); EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, boolean need_full_buffer)); EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, boolean need_full_buffer)); EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); /* Decompression module initialization routines */ EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, boolean need_full_buffer)); EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, boolean need_full_buffer)); EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, boolean need_full_buffer)); EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); /* Memory manager initialization */ EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); /* Utility routines in jutils.c */ EXTERN(long) jdiv_round_up JPP((long a, long b)); EXTERN(long) jround_up JPP((long a, long b)); EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, JSAMPARRAY output_array, int dest_row, int num_rows, JDIMENSION num_cols)); EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, JDIMENSION num_blocks)); EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); /* Constant tables in jutils.c */ #if 0 /* This table is not actually needed in v6a */ extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ #endif extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ /* Suppress undefined-structure complaints if necessary. */ #ifdef INCOMPLETE_TYPES_BROKEN #ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ struct jvirt_sarray_control { long dummy; }; struct jvirt_barray_control { long dummy; }; #endif #endif /* INCOMPLETE_TYPES_BROKEN */ htmldoc-1.8.27/jpeg/jutils.c0100664000212600000240000001217006713354635014342 0ustar mikeuser/* * jutils.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains tables and miscellaneous utility routines needed * for both compression and decompression. * Note we prefix all global names with "j" to minimize conflicts with * a surrounding application. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element * of a DCT block read in natural order (left to right, top to bottom). */ #if 0 /* This table is not actually needed in v6a */ const int jpeg_zigzag_order[DCTSIZE2] = { 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63 }; #endif /* * jpeg_natural_order[i] is the natural-order position of the i'th element * of zigzag order. * * When reading corrupted data, the Huffman decoders could attempt * to reference an entry beyond the end of this array (if the decoded * zero run length reaches past the end of the block). To prevent * wild stores without adding an inner-loop test, we put some extra * "63"s after the real entries. This will cause the extra coefficient * to be stored in location 63 of the block, not somewhere random. * The worst case would be a run-length of 15, which means we need 16 * fake entries. */ const int jpeg_natural_order[DCTSIZE2+16] = { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */ 63, 63, 63, 63, 63, 63, 63, 63 }; /* * Arithmetic utilities */ GLOBAL(long) jdiv_round_up (long a, long b) /* Compute a/b rounded up to next integer, ie, ceil(a/b) */ /* Assumes a >= 0, b > 0 */ { return (a + b - 1L) / b; } GLOBAL(long) jround_up (long a, long b) /* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ /* Assumes a >= 0, b > 0 */ { a += b - 1L; return a - (a % b); } /* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays * and coefficient-block arrays. This won't work on 80x86 because the arrays * are FAR and we're assuming a small-pointer memory model. However, some * DOS compilers provide far-pointer versions of memcpy() and memset() even * in the small-model libraries. These will be used if USE_FMEM is defined. * Otherwise, the routines below do it the hard way. (The performance cost * is not all that great, because these routines aren't very heavily used.) */ #ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ #define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) #define FMEMZERO(target,size) MEMZERO(target,size) #else /* 80x86 case, define if we can */ #ifdef USE_FMEM #define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) #define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) #endif #endif GLOBAL(void) jcopy_sample_rows (JSAMPARRAY input_array, int source_row, JSAMPARRAY output_array, int dest_row, int num_rows, JDIMENSION num_cols) /* Copy some rows of samples from one place to another. * num_rows rows are copied from input_array[source_row++] * to output_array[dest_row++]; these areas may overlap for duplication. * The source and destination arrays must be at least as wide as num_cols. */ { register JSAMPROW inptr, outptr; #ifdef FMEMCOPY register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE)); #else register JDIMENSION count; #endif register int row; input_array += source_row; output_array += dest_row; for (row = num_rows; row > 0; row--) { inptr = *input_array++; outptr = *output_array++; #ifdef FMEMCOPY FMEMCOPY(outptr, inptr, count); #else for (count = num_cols; count > 0; count--) *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ #endif } } GLOBAL(void) jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, JDIMENSION num_blocks) /* Copy a row of coefficient blocks from one place to another. */ { #ifdef FMEMCOPY FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); #else register JCOEFPTR inptr, outptr; register long count; inptr = (JCOEFPTR) input_row; outptr = (JCOEFPTR) output_row; for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) { *outptr++ = *inptr++; } #endif } GLOBAL(void) jzero_far (void FAR * target, size_t bytestozero) /* Zero out a chunk of FAR memory. */ /* This might be sample-array data, block-array data, or alloc_large data. */ { #ifdef FMEMZERO FMEMZERO(target, bytestozero); #else register char FAR * ptr = (char FAR *) target; register size_t count; for (count = bytestozero; count > 0; count--) { *ptr++ = 0; } #endif } htmldoc-1.8.27/jpeg/jcprepct.c0100664000212600000240000002745106713354635014652 0ustar mikeuser/* * jcprepct.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the compression preprocessing controller. * This controller manages the color conversion, downsampling, * and edge expansion steps. * * Most of the complexity here is associated with buffering input rows * as required by the downsampler. See the comments at the head of * jcsample.c for the downsampler's needs. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* At present, jcsample.c can request context rows only for smoothing. * In the future, we might also need context rows for CCIR601 sampling * or other more-complex downsampling procedures. The code to support * context rows should be compiled only if needed. */ #ifdef INPUT_SMOOTHING_SUPPORTED #define CONTEXT_ROWS_SUPPORTED #endif /* * For the simple (no-context-row) case, we just need to buffer one * row group's worth of pixels for the downsampling step. At the bottom of * the image, we pad to a full row group by replicating the last pixel row. * The downsampler's last output row is then replicated if needed to pad * out to a full iMCU row. * * When providing context rows, we must buffer three row groups' worth of * pixels. Three row groups are physically allocated, but the row pointer * arrays are made five row groups high, with the extra pointers above and * below "wrapping around" to point to the last and first real row groups. * This allows the downsampler to access the proper context rows. * At the top and bottom of the image, we create dummy context rows by * copying the first or last real pixel row. This copying could be avoided * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the * trouble on the compression side. */ /* Private buffer controller object */ typedef struct { struct jpeg_c_prep_controller pub; /* public fields */ /* Downsampling input buffer. This buffer holds color-converted data * until we have enough to do a downsample step. */ JSAMPARRAY color_buf[MAX_COMPONENTS]; JDIMENSION rows_to_go; /* counts rows remaining in source image */ int next_buf_row; /* index of next row to store in color_buf */ #ifdef CONTEXT_ROWS_SUPPORTED /* only needed for context case */ int this_row_group; /* starting row index of group to process */ int next_buf_stop; /* downsample when we reach this index */ #endif } my_prep_controller; typedef my_prep_controller * my_prep_ptr; /* * Initialize for a processing pass. */ METHODDEF(void) start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode) { my_prep_ptr prep = (my_prep_ptr) cinfo->prep; if (pass_mode != JBUF_PASS_THRU) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); /* Initialize total-height counter for detecting bottom of image */ prep->rows_to_go = cinfo->image_height; /* Mark the conversion buffer empty */ prep->next_buf_row = 0; #ifdef CONTEXT_ROWS_SUPPORTED /* Preset additional state variables for context mode. * These aren't used in non-context mode, so we needn't test which mode. */ prep->this_row_group = 0; /* Set next_buf_stop to stop after two row groups have been read in. */ prep->next_buf_stop = 2 * cinfo->max_v_samp_factor; #endif } /* * Expand an image vertically from height input_rows to height output_rows, * by duplicating the bottom row. */ LOCAL(void) expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols, int input_rows, int output_rows) { register int row; for (row = input_rows; row < output_rows; row++) { jcopy_sample_rows(image_data, input_rows-1, image_data, row, 1, num_cols); } } /* * Process some data in the simple no-context case. * * Preprocessor output data is counted in "row groups". A row group * is defined to be v_samp_factor sample rows of each component. * Downsampling will produce this much data from each max_v_samp_factor * input rows. */ METHODDEF(void) pre_process_data (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail, JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, JDIMENSION out_row_groups_avail) { my_prep_ptr prep = (my_prep_ptr) cinfo->prep; int numrows, ci; JDIMENSION inrows; jpeg_component_info * compptr; while (*in_row_ctr < in_rows_avail && *out_row_group_ctr < out_row_groups_avail) { /* Do color conversion to fill the conversion buffer. */ inrows = in_rows_avail - *in_row_ctr; numrows = cinfo->max_v_samp_factor - prep->next_buf_row; numrows = (int) MIN((JDIMENSION) numrows, inrows); (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, prep->color_buf, (JDIMENSION) prep->next_buf_row, numrows); *in_row_ctr += numrows; prep->next_buf_row += numrows; prep->rows_to_go -= numrows; /* If at bottom of image, pad to fill the conversion buffer. */ if (prep->rows_to_go == 0 && prep->next_buf_row < cinfo->max_v_samp_factor) { for (ci = 0; ci < cinfo->num_components; ci++) { expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, prep->next_buf_row, cinfo->max_v_samp_factor); } prep->next_buf_row = cinfo->max_v_samp_factor; } /* If we've filled the conversion buffer, empty it. */ if (prep->next_buf_row == cinfo->max_v_samp_factor) { (*cinfo->downsample->downsample) (cinfo, prep->color_buf, (JDIMENSION) 0, output_buf, *out_row_group_ctr); prep->next_buf_row = 0; (*out_row_group_ctr)++; } /* If at bottom of image, pad the output to a full iMCU height. * Note we assume the caller is providing a one-iMCU-height output buffer! */ if (prep->rows_to_go == 0 && *out_row_group_ctr < out_row_groups_avail) { for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { expand_bottom_edge(output_buf[ci], compptr->width_in_blocks * DCTSIZE, (int) (*out_row_group_ctr * compptr->v_samp_factor), (int) (out_row_groups_avail * compptr->v_samp_factor)); } *out_row_group_ctr = out_row_groups_avail; break; /* can exit outer loop without test */ } } } #ifdef CONTEXT_ROWS_SUPPORTED /* * Process some data in the context case. */ METHODDEF(void) pre_process_context (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail, JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, JDIMENSION out_row_groups_avail) { my_prep_ptr prep = (my_prep_ptr) cinfo->prep; int numrows, ci; int buf_height = cinfo->max_v_samp_factor * 3; JDIMENSION inrows; while (*out_row_group_ctr < out_row_groups_avail) { if (*in_row_ctr < in_rows_avail) { /* Do color conversion to fill the conversion buffer. */ inrows = in_rows_avail - *in_row_ctr; numrows = prep->next_buf_stop - prep->next_buf_row; numrows = (int) MIN((JDIMENSION) numrows, inrows); (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, prep->color_buf, (JDIMENSION) prep->next_buf_row, numrows); /* Pad at top of image, if first time through */ if (prep->rows_to_go == cinfo->image_height) { for (ci = 0; ci < cinfo->num_components; ci++) { int row; for (row = 1; row <= cinfo->max_v_samp_factor; row++) { jcopy_sample_rows(prep->color_buf[ci], 0, prep->color_buf[ci], -row, 1, cinfo->image_width); } } } *in_row_ctr += numrows; prep->next_buf_row += numrows; prep->rows_to_go -= numrows; } else { /* Return for more data, unless we are at the bottom of the image. */ if (prep->rows_to_go != 0) break; /* When at bottom of image, pad to fill the conversion buffer. */ if (prep->next_buf_row < prep->next_buf_stop) { for (ci = 0; ci < cinfo->num_components; ci++) { expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, prep->next_buf_row, prep->next_buf_stop); } prep->next_buf_row = prep->next_buf_stop; } } /* If we've gotten enough data, downsample a row group. */ if (prep->next_buf_row == prep->next_buf_stop) { (*cinfo->downsample->downsample) (cinfo, prep->color_buf, (JDIMENSION) prep->this_row_group, output_buf, *out_row_group_ctr); (*out_row_group_ctr)++; /* Advance pointers with wraparound as necessary. */ prep->this_row_group += cinfo->max_v_samp_factor; if (prep->this_row_group >= buf_height) prep->this_row_group = 0; if (prep->next_buf_row >= buf_height) prep->next_buf_row = 0; prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor; } } } /* * Create the wrapped-around downsampling input buffer needed for context mode. */ LOCAL(void) create_context_buffer (j_compress_ptr cinfo) { my_prep_ptr prep = (my_prep_ptr) cinfo->prep; int rgroup_height = cinfo->max_v_samp_factor; int ci, i; jpeg_component_info * compptr; JSAMPARRAY true_buffer, fake_buffer; /* Grab enough space for fake row pointers for all the components; * we need five row groups' worth of pointers for each component. */ fake_buffer = (JSAMPARRAY) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (cinfo->num_components * 5 * rgroup_height) * SIZEOF(JSAMPROW)); for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Allocate the actual buffer space (3 row groups) for this component. * We make the buffer wide enough to allow the downsampler to edge-expand * horizontally within the buffer, if it so chooses. */ true_buffer = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * cinfo->max_h_samp_factor) / compptr->h_samp_factor), (JDIMENSION) (3 * rgroup_height)); /* Copy true buffer row pointers into the middle of the fake row array */ MEMCOPY(fake_buffer + rgroup_height, true_buffer, 3 * rgroup_height * SIZEOF(JSAMPROW)); /* Fill in the above and below wraparound pointers */ for (i = 0; i < rgroup_height; i++) { fake_buffer[i] = true_buffer[2 * rgroup_height + i]; fake_buffer[4 * rgroup_height + i] = true_buffer[i]; } prep->color_buf[ci] = fake_buffer + rgroup_height; fake_buffer += 5 * rgroup_height; /* point to space for next component */ } } #endif /* CONTEXT_ROWS_SUPPORTED */ /* * Initialize preprocessing controller. */ GLOBAL(void) jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer) { my_prep_ptr prep; int ci; jpeg_component_info * compptr; if (need_full_buffer) /* safety check */ ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); prep = (my_prep_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_prep_controller)); cinfo->prep = (struct jpeg_c_prep_controller *) prep; prep->pub.start_pass = start_pass_prep; /* Allocate the color conversion buffer. * We make the buffer wide enough to allow the downsampler to edge-expand * horizontally within the buffer, if it so chooses. */ if (cinfo->downsample->need_context_rows) { /* Set up to provide context rows */ #ifdef CONTEXT_ROWS_SUPPORTED prep->pub.pre_process_data = pre_process_context; create_context_buffer(cinfo); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else { /* No context, just make it tall enough for one row group */ prep->pub.pre_process_data = pre_process_data; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { prep->color_buf[ci] = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * cinfo->max_h_samp_factor) / compptr->h_samp_factor), (JDIMENSION) cinfo->max_v_samp_factor); } } } htmldoc-1.8.27/jpeg/jdinput.c0100664000212600000240000003227406713354635014514 0ustar mikeuser/* * jdinput.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains input control logic for the JPEG decompressor. * These routines are concerned with controlling the decompressor's input * processing (marker reading and coefficient decoding). The actual input * reading is done in jdmarker.c, jdhuff.c, and jdphuff.c. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Private state */ typedef struct { struct jpeg_input_controller pub; /* public fields */ boolean inheaders; /* TRUE until first SOS is reached */ } my_input_controller; typedef my_input_controller * my_inputctl_ptr; /* Forward declarations */ METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo)); /* * Routines to calculate various quantities related to the size of the image. */ LOCAL(void) initial_setup (j_decompress_ptr cinfo) /* Called once, when first SOS marker is reached */ { int ci; jpeg_component_info *compptr; /* Make sure image isn't bigger than I can handle */ if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); /* For now, precision must match compiled-in value... */ if (cinfo->data_precision != BITS_IN_JSAMPLE) ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); /* Check that number of components won't exceed internal array sizes */ if (cinfo->num_components > MAX_COMPONENTS) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, MAX_COMPONENTS); /* Compute maximum sampling factors; check factor validity */ cinfo->max_h_samp_factor = 1; cinfo->max_v_samp_factor = 1; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) ERREXIT(cinfo, JERR_BAD_SAMPLING); cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, compptr->h_samp_factor); cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, compptr->v_samp_factor); } /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE. * In the full decompressor, this will be overridden by jdmaster.c; * but in the transcoder, jdmaster.c is not used, so we must do it here. */ cinfo->min_DCT_scaled_size = DCTSIZE; /* Compute dimensions of components */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { compptr->DCT_scaled_size = DCTSIZE; /* Size in DCT blocks */ compptr->width_in_blocks = (JDIMENSION) jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, (long) (cinfo->max_h_samp_factor * DCTSIZE)); compptr->height_in_blocks = (JDIMENSION) jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, (long) (cinfo->max_v_samp_factor * DCTSIZE)); /* downsampled_width and downsampled_height will also be overridden by * jdmaster.c if we are doing full decompression. The transcoder library * doesn't use these values, but the calling application might. */ /* Size in samples */ compptr->downsampled_width = (JDIMENSION) jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, (long) cinfo->max_h_samp_factor); compptr->downsampled_height = (JDIMENSION) jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, (long) cinfo->max_v_samp_factor); /* Mark component needed, until color conversion says otherwise */ compptr->component_needed = TRUE; /* Mark no quantization table yet saved for component */ compptr->quant_table = NULL; } /* Compute number of fully interleaved MCU rows. */ cinfo->total_iMCU_rows = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, (long) (cinfo->max_v_samp_factor*DCTSIZE)); /* Decide whether file contains multiple scans */ if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) cinfo->inputctl->has_multiple_scans = TRUE; else cinfo->inputctl->has_multiple_scans = FALSE; } LOCAL(void) per_scan_setup (j_decompress_ptr cinfo) /* Do computations that are needed before processing a JPEG scan */ /* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */ { int ci, mcublks, tmp; jpeg_component_info *compptr; if (cinfo->comps_in_scan == 1) { /* Noninterleaved (single-component) scan */ compptr = cinfo->cur_comp_info[0]; /* Overall image size in MCUs */ cinfo->MCUs_per_row = compptr->width_in_blocks; cinfo->MCU_rows_in_scan = compptr->height_in_blocks; /* For noninterleaved scan, always one block per MCU */ compptr->MCU_width = 1; compptr->MCU_height = 1; compptr->MCU_blocks = 1; compptr->MCU_sample_width = compptr->DCT_scaled_size; compptr->last_col_width = 1; /* For noninterleaved scans, it is convenient to define last_row_height * as the number of block rows present in the last iMCU row. */ tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); if (tmp == 0) tmp = compptr->v_samp_factor; compptr->last_row_height = tmp; /* Prepare array describing MCU composition */ cinfo->blocks_in_MCU = 1; cinfo->MCU_membership[0] = 0; } else { /* Interleaved (multi-component) scan */ if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, MAX_COMPS_IN_SCAN); /* Overall image size in MCUs */ cinfo->MCUs_per_row = (JDIMENSION) jdiv_round_up((long) cinfo->image_width, (long) (cinfo->max_h_samp_factor*DCTSIZE)); cinfo->MCU_rows_in_scan = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, (long) (cinfo->max_v_samp_factor*DCTSIZE)); cinfo->blocks_in_MCU = 0; for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; /* Sampling factors give # of blocks of component in each MCU */ compptr->MCU_width = compptr->h_samp_factor; compptr->MCU_height = compptr->v_samp_factor; compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_scaled_size; /* Figure number of non-dummy blocks in last MCU column & row */ tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); if (tmp == 0) tmp = compptr->MCU_width; compptr->last_col_width = tmp; tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); if (tmp == 0) tmp = compptr->MCU_height; compptr->last_row_height = tmp; /* Prepare array describing MCU composition */ mcublks = compptr->MCU_blocks; if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU) ERREXIT(cinfo, JERR_BAD_MCU_SIZE); while (mcublks-- > 0) { cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; } } } } /* * Save away a copy of the Q-table referenced by each component present * in the current scan, unless already saved during a prior scan. * * In a multiple-scan JPEG file, the encoder could assign different components * the same Q-table slot number, but change table definitions between scans * so that each component uses a different Q-table. (The IJG encoder is not * currently capable of doing this, but other encoders might.) Since we want * to be able to dequantize all the components at the end of the file, this * means that we have to save away the table actually used for each component. * We do this by copying the table at the start of the first scan containing * the component. * The JPEG spec prohibits the encoder from changing the contents of a Q-table * slot between scans of a component using that slot. If the encoder does so * anyway, this decoder will simply use the Q-table values that were current * at the start of the first scan for the component. * * The decompressor output side looks only at the saved quant tables, * not at the current Q-table slots. */ LOCAL(void) latch_quant_tables (j_decompress_ptr cinfo) { int ci, qtblno; jpeg_component_info *compptr; JQUANT_TBL * qtbl; for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; /* No work if we already saved Q-table for this component */ if (compptr->quant_table != NULL) continue; /* Make sure specified quantization table is present */ qtblno = compptr->quant_tbl_no; if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || cinfo->quant_tbl_ptrs[qtblno] == NULL) ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); /* OK, save away the quantization table */ qtbl = (JQUANT_TBL *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(JQUANT_TBL)); MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); compptr->quant_table = qtbl; } } /* * Initialize the input modules to read a scan of compressed data. * The first call to this is done by jdmaster.c after initializing * the entire decompressor (during jpeg_start_decompress). * Subsequent calls come from consume_markers, below. */ METHODDEF(void) start_input_pass (j_decompress_ptr cinfo) { per_scan_setup(cinfo); latch_quant_tables(cinfo); (*cinfo->entropy->start_pass) (cinfo); (*cinfo->coef->start_input_pass) (cinfo); cinfo->inputctl->consume_input = cinfo->coef->consume_data; } /* * Finish up after inputting a compressed-data scan. * This is called by the coefficient controller after it's read all * the expected data of the scan. */ METHODDEF(void) finish_input_pass (j_decompress_ptr cinfo) { cinfo->inputctl->consume_input = consume_markers; } /* * Read JPEG markers before, between, or after compressed-data scans. * Change state as necessary when a new scan is reached. * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. * * The consume_input method pointer points either here or to the * coefficient controller's consume_data routine, depending on whether * we are reading a compressed data segment or inter-segment markers. */ METHODDEF(int) consume_markers (j_decompress_ptr cinfo) { my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; int val; if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */ return JPEG_REACHED_EOI; val = (*cinfo->marker->read_markers) (cinfo); switch (val) { case JPEG_REACHED_SOS: /* Found SOS */ if (inputctl->inheaders) { /* 1st SOS */ initial_setup(cinfo); inputctl->inheaders = FALSE; /* Note: start_input_pass must be called by jdmaster.c * before any more input can be consumed. jdapimin.c is * responsible for enforcing this sequencing. */ } else { /* 2nd or later SOS marker */ if (! inputctl->pub.has_multiple_scans) ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */ start_input_pass(cinfo); } break; case JPEG_REACHED_EOI: /* Found EOI */ inputctl->pub.eoi_reached = TRUE; if (inputctl->inheaders) { /* Tables-only datastream, apparently */ if (cinfo->marker->saw_SOF) ERREXIT(cinfo, JERR_SOF_NO_SOS); } else { /* Prevent infinite loop in coef ctlr's decompress_data routine * if user set output_scan_number larger than number of scans. */ if (cinfo->output_scan_number > cinfo->input_scan_number) cinfo->output_scan_number = cinfo->input_scan_number; } break; case JPEG_SUSPENDED: break; } return val; } /* * Reset state to begin a fresh datastream. */ METHODDEF(void) reset_input_controller (j_decompress_ptr cinfo) { my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; inputctl->pub.consume_input = consume_markers; inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ inputctl->pub.eoi_reached = FALSE; inputctl->inheaders = TRUE; /* Reset other modules */ (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); (*cinfo->marker->reset_marker_reader) (cinfo); /* Reset progression state -- would be cleaner if entropy decoder did this */ cinfo->coef_bits = NULL; } /* * Initialize the input controller module. * This is called only once, when the decompression object is created. */ GLOBAL(void) jinit_input_controller (j_decompress_ptr cinfo) { my_inputctl_ptr inputctl; /* Create subobject in permanent pool */ inputctl = (my_inputctl_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_input_controller)); cinfo->inputctl = (struct jpeg_input_controller *) inputctl; /* Initialize method pointers */ inputctl->pub.consume_input = consume_markers; inputctl->pub.reset_input_controller = reset_input_controller; inputctl->pub.start_input_pass = start_input_pass; inputctl->pub.finish_input_pass = finish_input_pass; /* Initialize state: can't use reset_input_controller since we don't * want to try to reset other modules yet. */ inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ inputctl->pub.eoi_reached = FALSE; inputctl->inheaders = TRUE; } htmldoc-1.8.27/jpeg/jpeglib.h0100664000212600000240000013217506713354635014461 0ustar mikeuser/* * jpeglib.h * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file defines the application interface for the JPEG library. * Most applications using the library need only include this file, * and perhaps jerror.h if they want to know the exact error codes. */ #ifndef JPEGLIB_H #define JPEGLIB_H /* * First we include the configuration files that record how this * installation of the JPEG library is set up. jconfig.h can be * generated automatically for many systems. jmorecfg.h contains * manual configuration options that most people need not worry about. */ #ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ #include "jconfig.h" /* widely used configuration options */ #endif #include "jmorecfg.h" /* seldom changed options */ /* Version ID for the JPEG library. * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". */ #define JPEG_LIB_VERSION 62 /* Version 6b */ /* Various constants determining the sizes of things. * All of these are specified by the JPEG standard, so don't change them * if you want to be compatible. */ #define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ #define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ #define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ #define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ #define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ #define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ #define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ /* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU * to handle it. We even let you do this from the jconfig.h file. However, * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe * sometimes emits noncompliant files doesn't mean you should too. */ #define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ #ifndef D_MAX_BLOCKS_IN_MCU #define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ #endif /* Data structures for images (arrays of samples and of DCT coefficients). * On 80x86 machines, the image arrays are too big for near pointers, * but the pointer arrays can fit in near memory. */ typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ /* Types for JPEG compression parameters and working tables. */ /* DCT coefficient quantization tables. */ typedef struct { /* This array gives the coefficient quantizers in natural array order * (not the zigzag order in which they are stored in a JPEG DQT marker). * CAUTION: IJG versions prior to v6a kept this array in zigzag order. */ UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ /* This field is used only during compression. It's initialized FALSE when * the table is created, and set TRUE when it's been output to the file. * You could suppress output of a table by setting this to TRUE. * (See jpeg_suppress_tables for an example.) */ boolean sent_table; /* TRUE when table has been output */ } JQUANT_TBL; /* Huffman coding tables. */ typedef struct { /* These two fields directly represent the contents of a JPEG DHT marker */ UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ /* length k bits; bits[0] is unused */ UINT8 huffval[256]; /* The symbols, in order of incr code length */ /* This field is used only during compression. It's initialized FALSE when * the table is created, and set TRUE when it's been output to the file. * You could suppress output of a table by setting this to TRUE. * (See jpeg_suppress_tables for an example.) */ boolean sent_table; /* TRUE when table has been output */ } JHUFF_TBL; /* Basic info about one component (color channel). */ typedef struct { /* These values are fixed over the whole image. */ /* For compression, they must be supplied by parameter setup; */ /* for decompression, they are read from the SOF marker. */ int component_id; /* identifier for this component (0..255) */ int component_index; /* its index in SOF or cinfo->comp_info[] */ int h_samp_factor; /* horizontal sampling factor (1..4) */ int v_samp_factor; /* vertical sampling factor (1..4) */ int quant_tbl_no; /* quantization table selector (0..3) */ /* These values may vary between scans. */ /* For compression, they must be supplied by parameter setup; */ /* for decompression, they are read from the SOS marker. */ /* The decompressor output side may not use these variables. */ int dc_tbl_no; /* DC entropy table selector (0..3) */ int ac_tbl_no; /* AC entropy table selector (0..3) */ /* Remaining fields should be treated as private by applications. */ /* These values are computed during compression or decompression startup: */ /* Component's size in DCT blocks. * Any dummy blocks added to complete an MCU are not counted; therefore * these values do not depend on whether a scan is interleaved or not. */ JDIMENSION width_in_blocks; JDIMENSION height_in_blocks; /* Size of a DCT block in samples. Always DCTSIZE for compression. * For decompression this is the size of the output from one DCT block, * reflecting any scaling we choose to apply during the IDCT step. * Values of 1,2,4,8 are likely to be supported. Note that different * components may receive different IDCT scalings. */ int DCT_scaled_size; /* The downsampled dimensions are the component's actual, unpadded number * of samples at the main buffer (preprocessing/compression interface), thus * downsampled_width = ceil(image_width * Hi/Hmax) * and similarly for height. For decompression, IDCT scaling is included, so * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) */ JDIMENSION downsampled_width; /* actual width in samples */ JDIMENSION downsampled_height; /* actual height in samples */ /* This flag is used only for decompression. In cases where some of the * components will be ignored (eg grayscale output from YCbCr image), * we can skip most computations for the unused components. */ boolean component_needed; /* do we need the value of this component? */ /* These values are computed before starting a scan of the component. */ /* The decompressor output side may not use these variables. */ int MCU_width; /* number of blocks per MCU, horizontally */ int MCU_height; /* number of blocks per MCU, vertically */ int MCU_blocks; /* MCU_width * MCU_height */ int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ int last_col_width; /* # of non-dummy blocks across in last MCU */ int last_row_height; /* # of non-dummy blocks down in last MCU */ /* Saved quantization table for component; NULL if none yet saved. * See jdinput.c comments about the need for this information. * This field is currently used only for decompression. */ JQUANT_TBL * quant_table; /* Private per-component storage for DCT or IDCT subsystem. */ void * dct_table; } jpeg_component_info; /* The script for encoding a multiple-scan file is an array of these: */ typedef struct { int comps_in_scan; /* number of components encoded in this scan */ int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ int Ss, Se; /* progressive JPEG spectral selection parms */ int Ah, Al; /* progressive JPEG successive approx. parms */ } jpeg_scan_info; /* The decompressor can save APPn and COM markers in a list of these: */ typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; struct jpeg_marker_struct { jpeg_saved_marker_ptr next; /* next in list, or NULL */ UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ unsigned int original_length; /* # bytes of data in the file */ unsigned int data_length; /* # bytes of data saved at data[] */ JOCTET FAR * data; /* the data contained in the marker */ /* the marker length word is not counted in data_length or original_length */ }; /* Known color spaces. */ typedef enum { JCS_UNKNOWN, /* error/unspecified */ JCS_GRAYSCALE, /* monochrome */ JCS_RGB, /* red/green/blue */ JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ JCS_CMYK, /* C/M/Y/K */ JCS_YCCK /* Y/Cb/Cr/K */ } J_COLOR_SPACE; /* DCT/IDCT algorithm options. */ typedef enum { JDCT_ISLOW, /* slow but accurate integer algorithm */ JDCT_IFAST, /* faster, less accurate integer method */ JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ } J_DCT_METHOD; #ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ #define JDCT_DEFAULT JDCT_ISLOW #endif #ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ #define JDCT_FASTEST JDCT_IFAST #endif /* Dithering options for decompression. */ typedef enum { JDITHER_NONE, /* no dithering */ JDITHER_ORDERED, /* simple ordered dither */ JDITHER_FS /* Floyd-Steinberg error diffusion dither */ } J_DITHER_MODE; /* Common fields between JPEG compression and decompression master structs. */ #define jpeg_common_fields \ struct jpeg_error_mgr * err; /* Error handler module */\ struct jpeg_memory_mgr * mem; /* Memory manager module */\ struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ void * client_data; /* Available for use by application */\ boolean is_decompressor; /* So common code can tell which is which */\ int global_state /* For checking call sequence validity */ /* Routines that are to be used by both halves of the library are declared * to receive a pointer to this structure. There are no actual instances of * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. */ struct jpeg_common_struct { jpeg_common_fields; /* Fields common to both master struct types */ /* Additional fields follow in an actual jpeg_compress_struct or * jpeg_decompress_struct. All three structs must agree on these * initial fields! (This would be a lot cleaner in C++.) */ }; typedef struct jpeg_common_struct * j_common_ptr; typedef struct jpeg_compress_struct * j_compress_ptr; typedef struct jpeg_decompress_struct * j_decompress_ptr; /* Master record for a compression instance */ struct jpeg_compress_struct { jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ /* Destination for compressed data */ struct jpeg_destination_mgr * dest; /* Description of source image --- these fields must be filled in by * outer application before starting compression. in_color_space must * be correct before you can even call jpeg_set_defaults(). */ JDIMENSION image_width; /* input image width */ JDIMENSION image_height; /* input image height */ int input_components; /* # of color components in input image */ J_COLOR_SPACE in_color_space; /* colorspace of input image */ double input_gamma; /* image gamma of input image */ /* Compression parameters --- these fields must be set before calling * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to * initialize everything to reasonable defaults, then changing anything * the application specifically wants to change. That way you won't get * burnt when new parameters are added. Also note that there are several * helper routines to simplify changing parameters. */ int data_precision; /* bits of precision in image data */ int num_components; /* # of color components in JPEG image */ J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ jpeg_component_info * comp_info; /* comp_info[i] describes component that appears i'th in SOF */ JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; /* ptrs to coefficient quantization tables, or NULL if not defined */ JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; /* ptrs to Huffman coding tables, or NULL if not defined */ UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ int num_scans; /* # of entries in scan_info array */ const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ /* The default value of scan_info is NULL, which causes a single-scan * sequential JPEG file to be emitted. To create a multi-scan file, * set num_scans and scan_info to point to an array of scan definitions. */ boolean raw_data_in; /* TRUE=caller supplies downsampled data */ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ boolean CCIR601_sampling; /* TRUE=first samples are cosited */ int smoothing_factor; /* 1..100, or 0 for no input smoothing */ J_DCT_METHOD dct_method; /* DCT algorithm selector */ /* The restart interval can be specified in absolute MCUs by setting * restart_interval, or in MCU rows by setting restart_in_rows * (in which case the correct restart_interval will be figured * for each scan). */ unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ int restart_in_rows; /* if > 0, MCU rows per restart interval */ /* Parameters controlling emission of special markers. */ boolean write_JFIF_header; /* should a JFIF marker be written? */ UINT8 JFIF_major_version; /* What to write for the JFIF version number */ UINT8 JFIF_minor_version; /* These three values are not used by the JPEG code, merely copied */ /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ /* ratio is defined by X_density/Y_density even when density_unit=0. */ UINT8 density_unit; /* JFIF code for pixel size units */ UINT16 X_density; /* Horizontal pixel density */ UINT16 Y_density; /* Vertical pixel density */ boolean write_Adobe_marker; /* should an Adobe marker be written? */ /* State variable: index of next scanline to be written to * jpeg_write_scanlines(). Application may use this to control its * processing loop, e.g., "while (next_scanline < image_height)". */ JDIMENSION next_scanline; /* 0 .. image_height-1 */ /* Remaining fields are known throughout compressor, but generally * should not be touched by a surrounding application. */ /* * These fields are computed during compression startup */ boolean progressive_mode; /* TRUE if scan script uses progressive mode */ int max_h_samp_factor; /* largest h_samp_factor */ int max_v_samp_factor; /* largest v_samp_factor */ JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ /* The coefficient controller receives data in units of MCU rows as defined * for fully interleaved scans (whether the JPEG file is interleaved or not). * There are v_samp_factor * DCTSIZE sample rows of each component in an * "iMCU" (interleaved MCU) row. */ /* * These fields are valid during any one scan. * They describe the components and MCUs actually appearing in the scan. */ int comps_in_scan; /* # of JPEG components in this scan */ jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; /* *cur_comp_info[i] describes component that appears i'th in SOS */ JDIMENSION MCUs_per_row; /* # of MCUs across the image */ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ int blocks_in_MCU; /* # of DCT blocks per MCU */ int MCU_membership[C_MAX_BLOCKS_IN_MCU]; /* MCU_membership[i] is index in cur_comp_info of component owning */ /* i'th block in an MCU */ int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ /* * Links to compression subobjects (methods and private variables of modules) */ struct jpeg_comp_master * master; struct jpeg_c_main_controller * main; struct jpeg_c_prep_controller * prep; struct jpeg_c_coef_controller * coef; struct jpeg_marker_writer * marker; struct jpeg_color_converter * cconvert; struct jpeg_downsampler * downsample; struct jpeg_forward_dct * fdct; struct jpeg_entropy_encoder * entropy; jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ int script_space_size; }; /* Master record for a decompression instance */ struct jpeg_decompress_struct { jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ /* Source of compressed data */ struct jpeg_source_mgr * src; /* Basic description of image --- filled in by jpeg_read_header(). */ /* Application may inspect these values to decide how to process image. */ JDIMENSION image_width; /* nominal image width (from SOF marker) */ JDIMENSION image_height; /* nominal image height */ int num_components; /* # of color components in JPEG image */ J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ /* Decompression processing parameters --- these fields must be set before * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes * them to default values. */ J_COLOR_SPACE out_color_space; /* colorspace for output */ unsigned int scale_num, scale_denom; /* fraction by which to scale image */ double output_gamma; /* image gamma wanted in output */ boolean buffered_image; /* TRUE=multiple output passes */ boolean raw_data_out; /* TRUE=downsampled data wanted */ J_DCT_METHOD dct_method; /* IDCT algorithm selector */ boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ boolean quantize_colors; /* TRUE=colormapped output wanted */ /* the following are ignored if not quantize_colors: */ J_DITHER_MODE dither_mode; /* type of color dithering to use */ boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ int desired_number_of_colors; /* max # colors to use in created colormap */ /* these are significant only in buffered-image mode: */ boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ boolean enable_external_quant;/* enable future use of external colormap */ boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ /* Description of actual output image that will be returned to application. * These fields are computed by jpeg_start_decompress(). * You can also use jpeg_calc_output_dimensions() to determine these values * in advance of calling jpeg_start_decompress(). */ JDIMENSION output_width; /* scaled image width */ JDIMENSION output_height; /* scaled image height */ int out_color_components; /* # of color components in out_color_space */ int output_components; /* # of color components returned */ /* output_components is 1 (a colormap index) when quantizing colors; * otherwise it equals out_color_components. */ int rec_outbuf_height; /* min recommended height of scanline buffer */ /* If the buffer passed to jpeg_read_scanlines() is less than this many rows * high, space and time will be wasted due to unnecessary data copying. * Usually rec_outbuf_height will be 1 or 2, at most 4. */ /* When quantizing colors, the output colormap is described by these fields. * The application can supply a colormap by setting colormap non-NULL before * calling jpeg_start_decompress; otherwise a colormap is created during * jpeg_start_decompress or jpeg_start_output. * The map has out_color_components rows and actual_number_of_colors columns. */ int actual_number_of_colors; /* number of entries in use */ JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ /* State variables: these variables indicate the progress of decompression. * The application may examine these but must not modify them. */ /* Row index of next scanline to be read from jpeg_read_scanlines(). * Application may use this to control its processing loop, e.g., * "while (output_scanline < output_height)". */ JDIMENSION output_scanline; /* 0 .. output_height-1 */ /* Current input scan number and number of iMCU rows completed in scan. * These indicate the progress of the decompressor input side. */ int input_scan_number; /* Number of SOS markers seen so far */ JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ /* The "output scan number" is the notional scan being displayed by the * output side. The decompressor will not allow output scan/row number * to get ahead of input scan/row, but it can fall arbitrarily far behind. */ int output_scan_number; /* Nominal scan number being displayed */ JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ /* Current progression status. coef_bits[c][i] indicates the precision * with which component c's DCT coefficient i (in zigzag order) is known. * It is -1 when no data has yet been received, otherwise it is the point * transform (shift) value for the most recent scan of the coefficient * (thus, 0 at completion of the progression). * This pointer is NULL when reading a non-progressive file. */ int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ /* Internal JPEG parameters --- the application usually need not look at * these fields. Note that the decompressor output side may not use * any parameters that can change between scans. */ /* Quantization and Huffman tables are carried forward across input * datastreams when processing abbreviated JPEG datastreams. */ JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; /* ptrs to coefficient quantization tables, or NULL if not defined */ JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; /* ptrs to Huffman coding tables, or NULL if not defined */ /* These parameters are never carried across datastreams, since they * are given in SOF/SOS markers or defined to be reset by SOI. */ int data_precision; /* bits of precision in image data */ jpeg_component_info * comp_info; /* comp_info[i] describes component that appears i'th in SOF */ boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ /* These fields record data obtained from optional markers recognized by * the JPEG library. */ boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ UINT8 JFIF_major_version; /* JFIF version number */ UINT8 JFIF_minor_version; UINT8 density_unit; /* JFIF code for pixel size units */ UINT16 X_density; /* Horizontal pixel density */ UINT16 Y_density; /* Vertical pixel density */ boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ UINT8 Adobe_transform; /* Color transform code from Adobe marker */ boolean CCIR601_sampling; /* TRUE=first samples are cosited */ /* Aside from the specific data retained from APPn markers known to the * library, the uninterpreted contents of any or all APPn and COM markers * can be saved in a list for examination by the application. */ jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ /* Remaining fields are known throughout decompressor, but generally * should not be touched by a surrounding application. */ /* * These fields are computed during decompression startup */ int max_h_samp_factor; /* largest h_samp_factor */ int max_v_samp_factor; /* largest v_samp_factor */ int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ /* The coefficient controller's input and output progress is measured in * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows * in fully interleaved JPEG scans, but are used whether the scan is * interleaved or not. We define an iMCU row as v_samp_factor DCT block * rows of each component. Therefore, the IDCT output contains * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. */ JSAMPLE * sample_range_limit; /* table for fast range-limiting */ /* * These fields are valid during any one scan. * They describe the components and MCUs actually appearing in the scan. * Note that the decompressor output side must not use these fields. */ int comps_in_scan; /* # of JPEG components in this scan */ jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; /* *cur_comp_info[i] describes component that appears i'th in SOS */ JDIMENSION MCUs_per_row; /* # of MCUs across the image */ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ int blocks_in_MCU; /* # of DCT blocks per MCU */ int MCU_membership[D_MAX_BLOCKS_IN_MCU]; /* MCU_membership[i] is index in cur_comp_info of component owning */ /* i'th block in an MCU */ int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ /* This field is shared between entropy decoder and marker parser. * It is either zero or the code of a JPEG marker that has been * read from the data source, but has not yet been processed. */ int unread_marker; /* * Links to decompression subobjects (methods, private variables of modules) */ struct jpeg_decomp_master * master; struct jpeg_d_main_controller * main; struct jpeg_d_coef_controller * coef; struct jpeg_d_post_controller * post; struct jpeg_input_controller * inputctl; struct jpeg_marker_reader * marker; struct jpeg_entropy_decoder * entropy; struct jpeg_inverse_dct * idct; struct jpeg_upsampler * upsample; struct jpeg_color_deconverter * cconvert; struct jpeg_color_quantizer * cquantize; }; /* "Object" declarations for JPEG modules that may be supplied or called * directly by the surrounding application. * As with all objects in the JPEG library, these structs only define the * publicly visible methods and state variables of a module. Additional * private fields may exist after the public ones. */ /* Error handler object */ struct jpeg_error_mgr { /* Error exit handler: does not return to caller */ JMETHOD(void, error_exit, (j_common_ptr cinfo)); /* Conditionally emit a trace or warning message */ JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); /* Routine that actually outputs a trace or error message */ JMETHOD(void, output_message, (j_common_ptr cinfo)); /* Format a message string for the most recent JPEG error or message */ JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); #define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ /* Reset error state variables at start of a new image */ JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); /* The message ID code and any parameters are saved here. * A message can have one string parameter or up to 8 int parameters. */ int msg_code; #define JMSG_STR_PARM_MAX 80 union { int i[8]; char s[JMSG_STR_PARM_MAX]; } msg_parm; /* Standard state variables for error facility */ int trace_level; /* max msg_level that will be displayed */ /* For recoverable corrupt-data errors, we emit a warning message, * but keep going unless emit_message chooses to abort. emit_message * should count warnings in num_warnings. The surrounding application * can check for bad data by seeing if num_warnings is nonzero at the * end of processing. */ long num_warnings; /* number of corrupt-data warnings */ /* These fields point to the table(s) of error message strings. * An application can change the table pointer to switch to a different * message list (typically, to change the language in which errors are * reported). Some applications may wish to add additional error codes * that will be handled by the JPEG library error mechanism; the second * table pointer is used for this purpose. * * First table includes all errors generated by JPEG library itself. * Error code 0 is reserved for a "no such error string" message. */ const char * const * jpeg_message_table; /* Library errors */ int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ /* Second table can be added by application (see cjpeg/djpeg for example). * It contains strings numbered first_addon_message..last_addon_message. */ const char * const * addon_message_table; /* Non-library errors */ int first_addon_message; /* code for first string in addon table */ int last_addon_message; /* code for last string in addon table */ }; /* Progress monitor object */ struct jpeg_progress_mgr { JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); long pass_counter; /* work units completed in this pass */ long pass_limit; /* total number of work units in this pass */ int completed_passes; /* passes completed so far */ int total_passes; /* total number of passes expected */ }; /* Data destination object for compression */ struct jpeg_destination_mgr { JOCTET * next_output_byte; /* => next byte to write in buffer */ size_t free_in_buffer; /* # of byte spaces remaining in buffer */ JMETHOD(void, init_destination, (j_compress_ptr cinfo)); JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); JMETHOD(void, term_destination, (j_compress_ptr cinfo)); }; /* Data source object for decompression */ struct jpeg_source_mgr { const JOCTET * next_input_byte; /* => next byte to read from buffer */ size_t bytes_in_buffer; /* # of bytes remaining in buffer */ JMETHOD(void, init_source, (j_decompress_ptr cinfo)); JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); JMETHOD(void, term_source, (j_decompress_ptr cinfo)); }; /* Memory manager object. * Allocates "small" objects (a few K total), "large" objects (tens of K), * and "really big" objects (virtual arrays with backing store if needed). * The memory manager does not allow individual objects to be freed; rather, * each created object is assigned to a pool, and whole pools can be freed * at once. This is faster and more convenient than remembering exactly what * to free, especially where malloc()/free() are not too speedy. * NB: alloc routines never return NULL. They exit to error_exit if not * successful. */ #define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ #define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ #define JPOOL_NUMPOOLS 2 typedef struct jvirt_sarray_control * jvirt_sarray_ptr; typedef struct jvirt_barray_control * jvirt_barray_ptr; struct jpeg_memory_mgr { /* Method pointers */ JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, size_t sizeofobject)); JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, size_t sizeofobject)); JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, JDIMENSION samplesperrow, JDIMENSION numrows)); JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, JDIMENSION blocksperrow, JDIMENSION numrows)); JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, int pool_id, boolean pre_zero, JDIMENSION samplesperrow, JDIMENSION numrows, JDIMENSION maxaccess)); JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, int pool_id, boolean pre_zero, JDIMENSION blocksperrow, JDIMENSION numrows, JDIMENSION maxaccess)); JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, jvirt_sarray_ptr ptr, JDIMENSION start_row, JDIMENSION num_rows, boolean writable)); JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, jvirt_barray_ptr ptr, JDIMENSION start_row, JDIMENSION num_rows, boolean writable)); JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); JMETHOD(void, self_destruct, (j_common_ptr cinfo)); /* Limit on memory allocation for this JPEG object. (Note that this is * merely advisory, not a guaranteed maximum; it only affects the space * used for virtual-array buffers.) May be changed by outer application * after creating the JPEG object. */ long max_memory_to_use; /* Maximum allocation request accepted by alloc_large. */ long max_alloc_chunk; }; /* Routine signature for application-supplied marker processing methods. * Need not pass marker code since it is stored in cinfo->unread_marker. */ typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); /* Declarations for routines called by application. * The JPP macro hides prototype parameters from compilers that can't cope. * Note JPP requires double parentheses. */ #ifdef HAVE_PROTOTYPES #define JPP(arglist) arglist #else #define JPP(arglist) () #endif /* Short forms of external names for systems with brain-damaged linkers. * We shorten external names to be unique in the first six letters, which * is good enough for all known systems. * (If your compiler itself needs names to be unique in less than 15 * characters, you are out of luck. Get a better compiler.) */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jpeg_std_error jStdError #define jpeg_CreateCompress jCreaCompress #define jpeg_CreateDecompress jCreaDecompress #define jpeg_destroy_compress jDestCompress #define jpeg_destroy_decompress jDestDecompress #define jpeg_stdio_dest jStdDest #define jpeg_stdio_src jStdSrc #define jpeg_set_defaults jSetDefaults #define jpeg_set_colorspace jSetColorspace #define jpeg_default_colorspace jDefColorspace #define jpeg_set_quality jSetQuality #define jpeg_set_linear_quality jSetLQuality #define jpeg_add_quant_table jAddQuantTable #define jpeg_quality_scaling jQualityScaling #define jpeg_simple_progression jSimProgress #define jpeg_suppress_tables jSuppressTables #define jpeg_alloc_quant_table jAlcQTable #define jpeg_alloc_huff_table jAlcHTable #define jpeg_start_compress jStrtCompress #define jpeg_write_scanlines jWrtScanlines #define jpeg_finish_compress jFinCompress #define jpeg_write_raw_data jWrtRawData #define jpeg_write_marker jWrtMarker #define jpeg_write_m_header jWrtMHeader #define jpeg_write_m_byte jWrtMByte #define jpeg_write_tables jWrtTables #define jpeg_read_header jReadHeader #define jpeg_start_decompress jStrtDecompress #define jpeg_read_scanlines jReadScanlines #define jpeg_finish_decompress jFinDecompress #define jpeg_read_raw_data jReadRawData #define jpeg_has_multiple_scans jHasMultScn #define jpeg_start_output jStrtOutput #define jpeg_finish_output jFinOutput #define jpeg_input_complete jInComplete #define jpeg_new_colormap jNewCMap #define jpeg_consume_input jConsumeInput #define jpeg_calc_output_dimensions jCalcDimensions #define jpeg_save_markers jSaveMarkers #define jpeg_set_marker_processor jSetMarker #define jpeg_read_coefficients jReadCoefs #define jpeg_write_coefficients jWrtCoefs #define jpeg_copy_critical_parameters jCopyCrit #define jpeg_abort_compress jAbrtCompress #define jpeg_abort_decompress jAbrtDecompress #define jpeg_abort jAbort #define jpeg_destroy jDestroy #define jpeg_resync_to_restart jResyncRestart #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* Default error-management setup */ EXTERN(struct jpeg_error_mgr *) jpeg_std_error JPP((struct jpeg_error_mgr * err)); /* Initialization of JPEG compression objects. * jpeg_create_compress() and jpeg_create_decompress() are the exported * names that applications should call. These expand to calls on * jpeg_CreateCompress and jpeg_CreateDecompress with additional information * passed for version mismatch checking. * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. */ #define jpeg_create_compress(cinfo) \ jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ (size_t) sizeof(struct jpeg_compress_struct)) #define jpeg_create_decompress(cinfo) \ jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ (size_t) sizeof(struct jpeg_decompress_struct)) EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, int version, size_t structsize)); EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, int version, size_t structsize)); /* Destruction of JPEG compression objects */ EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); /* Standard data source and destination managers: stdio streams. */ /* Caller is responsible for opening the file before and closing after. */ EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); /* Default parameter setup for compression */ EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); /* Compression parameter setup aids */ EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, J_COLOR_SPACE colorspace)); EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, boolean force_baseline)); EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, int scale_factor, boolean force_baseline)); EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline)); EXTERN(int) jpeg_quality_scaling JPP((int quality)); EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, boolean suppress)); EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); /* Main entry points for compression */ EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, boolean write_all_tables)); EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION num_lines)); EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); /* Replaces jpeg_write_scanlines when writing raw downsampled data. */ EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, JSAMPIMAGE data, JDIMENSION num_lines)); /* Write a special marker. See libjpeg.doc concerning safe usage. */ EXTERN(void) jpeg_write_marker JPP((j_compress_ptr cinfo, int marker, const JOCTET * dataptr, unsigned int datalen)); /* Same, but piecemeal. */ EXTERN(void) jpeg_write_m_header JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); EXTERN(void) jpeg_write_m_byte JPP((j_compress_ptr cinfo, int val)); /* Alternate compression function: just write an abbreviated table file */ EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); /* Decompression startup: read start of JPEG datastream to see what's there */ EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, boolean require_image)); /* Return value is one of: */ #define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ #define JPEG_HEADER_OK 1 /* Found valid image datastream */ #define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ /* If you pass require_image = TRUE (normal case), you need not check for * a TABLES_ONLY return code; an abbreviated file will cause an error exit. * JPEG_SUSPENDED is only possible if you use a data source module that can * give a suspension return (the stdio source module doesn't). */ /* Main entry points for decompression */ EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines)); EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); /* Replaces jpeg_read_scanlines when reading raw downsampled data. */ EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, JSAMPIMAGE data, JDIMENSION max_lines)); /* Additional entry points for buffered-image mode. */ EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, int scan_number)); EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); /* Return value is one of: */ /* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ #define JPEG_REACHED_SOS 1 /* Reached start of new scan */ #define JPEG_REACHED_EOI 2 /* Reached end of image */ #define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ #define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ /* Precalculate output dimensions for current decompression parameters. */ EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); /* Control saving of COM and APPn markers into marker_list. */ EXTERN(void) jpeg_save_markers JPP((j_decompress_ptr cinfo, int marker_code, unsigned int length_limit)); /* Install a special processing method for COM or APPn markers. */ EXTERN(void) jpeg_set_marker_processor JPP((j_decompress_ptr cinfo, int marker_code, jpeg_marker_parser_method routine)); /* Read or write raw DCT coefficients --- useful for lossless transcoding. */ EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo)); /* If you choose to abort compression or decompression before completing * jpeg_finish_(de)compress, then you need to clean up to release memory, * temporary files, etc. You can just call jpeg_destroy_(de)compress * if you're done with the JPEG object, but if you want to clean it up and * reuse it, call this: */ EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); /* Generic versions of jpeg_abort and jpeg_destroy that work on either * flavor of JPEG object. These may be more convenient in some places. */ EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); /* Default restart-marker-resync procedure for use by data source modules */ EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, int desired)); /* These marker codes are exported since applications and data source modules * are likely to want to use them. */ #define JPEG_RST0 0xD0 /* RST0 marker code */ #define JPEG_EOI 0xD9 /* EOI marker code */ #define JPEG_APP0 0xE0 /* APP0 marker code */ #define JPEG_COM 0xFE /* COM marker code */ /* If we have a brain-damaged compiler that emits warnings (or worse, errors) * for structure definitions that are never filled in, keep it quiet by * supplying dummy definitions for the various substructures. */ #ifdef INCOMPLETE_TYPES_BROKEN #ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ struct jvirt_sarray_control { long dummy; }; struct jvirt_barray_control { long dummy; }; struct jpeg_comp_master { long dummy; }; struct jpeg_c_main_controller { long dummy; }; struct jpeg_c_prep_controller { long dummy; }; struct jpeg_c_coef_controller { long dummy; }; struct jpeg_marker_writer { long dummy; }; struct jpeg_color_converter { long dummy; }; struct jpeg_downsampler { long dummy; }; struct jpeg_forward_dct { long dummy; }; struct jpeg_entropy_encoder { long dummy; }; struct jpeg_decomp_master { long dummy; }; struct jpeg_d_main_controller { long dummy; }; struct jpeg_d_coef_controller { long dummy; }; struct jpeg_d_post_controller { long dummy; }; struct jpeg_input_controller { long dummy; }; struct jpeg_marker_reader { long dummy; }; struct jpeg_entropy_decoder { long dummy; }; struct jpeg_inverse_dct { long dummy; }; struct jpeg_upsampler { long dummy; }; struct jpeg_color_deconverter { long dummy; }; struct jpeg_color_quantizer { long dummy; }; #endif /* JPEG_INTERNALS */ #endif /* INCOMPLETE_TYPES_BROKEN */ /* * The JPEG library modules define JPEG_INTERNALS before including this file. * The internal structure declarations are read only when that is true. * Applications using the library should not include jpegint.h, but may wish * to include jerror.h. */ #ifdef JPEG_INTERNALS #include "jpegint.h" /* fetch private declarations */ #include "jerror.h" /* fetch error codes too */ #endif #endif /* JPEGLIB_H */ htmldoc-1.8.27/jpeg/wizard.doc0100664000212600000240000002303706713354635014657 0ustar mikeuserAdvanced usage instructions for the Independent JPEG Group's JPEG software ========================================================================== This file describes cjpeg's "switches for wizards". The "wizard" switches are intended for experimentation with JPEG by persons who are reasonably knowledgeable about the JPEG standard. If you don't know what you are doing, DON'T USE THESE SWITCHES. You'll likely produce files with worse image quality and/or poorer compression than you'd get from the default settings. Furthermore, these switches must be used with caution when making files intended for general use, because not all JPEG decoders will support unusual JPEG parameter settings. Quantization Table Adjustment ----------------------------- Ordinarily, cjpeg starts with a default set of tables (the same ones given as examples in the JPEG standard) and scales them up or down according to the -quality setting. The details of the scaling algorithm can be found in jcparam.c. At very low quality settings, some quantization table entries can get scaled up to values exceeding 255. Although 2-byte quantization values are supported by the IJG software, this feature is not in baseline JPEG and is not supported by all implementations. If you need to ensure wide compatibility of low-quality files, you can constrain the scaled quantization values to no more than 255 by giving the -baseline switch. Note that use of -baseline will result in poorer quality for the same file size, since more bits than necessary are expended on higher AC coefficients. You can substitute a different set of quantization values by using the -qtables switch: -qtables file Use the quantization tables given in the named file. The specified file should be a text file containing decimal quantization values. The file should contain one to four tables, each of 64 elements. The tables are implicitly numbered 0,1,etc. in order of appearance. Table entries appear in normal array order (NOT in the zigzag order in which they will be stored in the JPEG file). Quantization table files are free format, in that arbitrary whitespace can appear between numbers. Also, comments can be included: a comment starts with '#' and extends to the end of the line. Here is an example file that duplicates the default quantization tables: # Quantization tables given in JPEG spec, section K.1 # This is table 0 (the luminance table): 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99 # This is table 1 (the chrominance table): 17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 If the -qtables switch is used without -quality, then the specified tables are used exactly as-is. If both -qtables and -quality are used, then the tables taken from the file are scaled in the same fashion that the default tables would be scaled for that quality setting. If -baseline appears, then the quantization values are constrained to the range 1-255. By default, cjpeg will use quantization table 0 for luminance components and table 1 for chrominance components. To override this choice, use the -qslots switch: -qslots N[,...] Select which quantization table to use for each color component. The -qslots switch specifies a quantization table number for each color component, in the order in which the components appear in the JPEG SOF marker. For example, to create a separate table for each of Y,Cb,Cr, you could provide a -qtables file that defines three quantization tables and say "-qslots 0,1,2". If -qslots gives fewer table numbers than there are color components, then the last table number is repeated as necessary. Sampling Factor Adjustment -------------------------- By default, cjpeg uses 2:1 horizontal and vertical downsampling when compressing YCbCr data, and no downsampling for all other color spaces. You can override this default with the -sample switch: -sample HxV[,...] Set JPEG sampling factors for each color component. The -sample switch specifies the JPEG sampling factors for each color component, in the order in which they appear in the JPEG SOF marker. If you specify fewer HxV pairs than there are components, the remaining components are set to 1x1 sampling. For example, the default YCbCr setting is equivalent to "-sample 2x2,1x1,1x1", which can be abbreviated to "-sample 2x2". There are still some JPEG decoders in existence that support only 2x1 sampling (also called 4:2:2 sampling). Compatibility with such decoders can be achieved by specifying "-sample 2x1". This is not recommended unless really necessary, since it increases file size and encoding/decoding time with very little quality gain. Multiple Scan / Progression Control ----------------------------------- By default, cjpeg emits a single-scan sequential JPEG file. The -progressive switch generates a progressive JPEG file using a default series of progression parameters. You can create multiple-scan sequential JPEG files or progressive JPEG files with custom progression parameters by using the -scans switch: -scans file Use the scan sequence given in the named file. The specified file should be a text file containing a "scan script". The script specifies the contents and ordering of the scans to be emitted. Each entry in the script defines one scan. A scan definition specifies the components to be included in the scan, and for progressive JPEG it also specifies the progression parameters Ss,Se,Ah,Al for the scan. Scan definitions are separated by semicolons (';'). A semicolon after the last scan definition is optional. Each scan definition contains one to four component indexes, optionally followed by a colon (':') and the four progressive-JPEG parameters. The component indexes denote which color component(s) are to be transmitted in the scan. Components are numbered in the order in which they appear in the JPEG SOF marker, with the first component being numbered 0. (Note that these indexes are not the "component ID" codes assigned to the components, just positional indexes.) The progression parameters for each scan are: Ss Zigzag index of first coefficient included in scan Se Zigzag index of last coefficient included in scan Ah Zero for first scan of a coefficient, else Al of prior scan Al Successive approximation low bit position for scan If the progression parameters are omitted, the values 0,63,0,0 are used, producing a sequential JPEG file. cjpeg automatically determines whether the script represents a progressive or sequential file, by observing whether Ss and Se values other than 0 and 63 appear. (The -progressive switch is not needed to specify this; in fact, it is ignored when -scans appears.) The scan script must meet the JPEG restrictions on progression sequences. (cjpeg checks that the spec's requirements are obeyed.) Scan script files are free format, in that arbitrary whitespace can appear between numbers and around punctuation. Also, comments can be included: a comment starts with '#' and extends to the end of the line. For additional legibility, commas or dashes can be placed between values. (Actually, any single punctuation character other than ':' or ';' can be inserted.) For example, the following two scan definitions are equivalent: 0 1 2: 0 63 0 0; 0,1,2 : 0-63, 0,0 ; Here is an example of a scan script that generates a partially interleaved sequential JPEG file: 0; # Y only in first scan 1 2; # Cb and Cr in second scan Here is an example of a progressive scan script using only spectral selection (no successive approximation): # Interleaved DC scan for Y,Cb,Cr: 0,1,2: 0-0, 0, 0 ; # AC scans: 0: 1-2, 0, 0 ; # First two Y AC coefficients 0: 3-5, 0, 0 ; # Three more 1: 1-63, 0, 0 ; # All AC coefficients for Cb 2: 1-63, 0, 0 ; # All AC coefficients for Cr 0: 6-9, 0, 0 ; # More Y coefficients 0: 10-63, 0, 0 ; # Remaining Y coefficients Here is an example of a successive-approximation script. This is equivalent to the default script used by "cjpeg -progressive" for YCbCr images: # Initial DC scan for Y,Cb,Cr (lowest bit not sent) 0,1,2: 0-0, 0, 1 ; # First AC scan: send first 5 Y AC coefficients, minus 2 lowest bits: 0: 1-5, 0, 2 ; # Send all Cr,Cb AC coefficients, minus lowest bit: # (chroma data is usually too small to be worth subdividing further; # but note we send Cr first since eye is least sensitive to Cb) 2: 1-63, 0, 1 ; 1: 1-63, 0, 1 ; # Send remaining Y AC coefficients, minus 2 lowest bits: 0: 6-63, 0, 2 ; # Send next-to-lowest bit of all Y AC coefficients: 0: 1-63, 2, 1 ; # At this point we've sent all but the lowest bit of all coefficients. # Send lowest bit of DC coefficients 0,1,2: 0-0, 1, 0 ; # Send lowest bit of AC coefficients 2: 1-63, 1, 0 ; 1: 1-63, 1, 0 ; # Y AC lowest bit scan is last; it's usually the largest scan 0: 1-63, 1, 0 ; It may be worth pointing out that this script is tuned for quality settings of around 50 to 75. For lower quality settings, you'd probably want to use a script with fewer stages of successive approximation (otherwise the initial scans will be really bad). For higher quality settings, you might want to use more stages of successive approximation (so that the initial scans are not too large). htmldoc-1.8.27/jpeg/jcmainct.c0100664000212600000240000002200007304163614014601 0ustar mikeuser/* * jcmainct.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the main buffer controller for compression. * The main buffer lies between the pre-processor and the JPEG * compressor proper; it holds downsampled data in the JPEG colorspace. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Note: currently, there is no operating mode in which a full-image buffer * is needed at this step. If there were, that mode could not be used with * "raw data" input, since this module is bypassed in that case. However, * we've left the code here for possible use in special applications. */ #undef FULL_MAIN_BUFFER_SUPPORTED /* Private buffer controller object */ typedef struct { struct jpeg_c_main_controller pub; /* public fields */ JDIMENSION cur_iMCU_row; /* number of current iMCU row */ JDIMENSION rowgroup_ctr; /* counts row groups received in iMCU row */ boolean suspended; /* remember if we suspended output */ J_BUF_MODE pass_mode; /* current operating mode */ /* If using just a strip buffer, this points to the entire set of buffers * (we allocate one for each component). In the full-image case, this * points to the currently accessible strips of the virtual arrays. */ JSAMPARRAY buffer[MAX_COMPONENTS]; #ifdef FULL_MAIN_BUFFER_SUPPORTED /* If using full-image storage, this array holds pointers to virtual-array * control blocks for each component. Unused if not full-image storage. */ jvirt_sarray_ptr whole_image[MAX_COMPONENTS]; #endif } my_main_controller; typedef my_main_controller * my_main_ptr; /* Forward declarations */ METHODDEF(void) process_data_simple_main JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); #ifdef FULL_MAIN_BUFFER_SUPPORTED METHODDEF(void) process_data_buffer_main JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); #endif /* * Initialize for a processing pass. */ METHODDEF(void) start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) { my_main_ptr jmain = (my_main_ptr) cinfo->main; /* Do nothing in raw-data mode. */ if (cinfo->raw_data_in) return; jmain->cur_iMCU_row = 0; /* initialize counters */ jmain->rowgroup_ctr = 0; jmain->suspended = FALSE; jmain->pass_mode = pass_mode; /* save mode for use by process_data */ switch (pass_mode) { case JBUF_PASS_THRU: #ifdef FULL_MAIN_BUFFER_SUPPORTED if (jmain->whole_image[0] != NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); #endif jmain->pub.process_data = process_data_simple_main; break; #ifdef FULL_MAIN_BUFFER_SUPPORTED case JBUF_SAVE_SOURCE: case JBUF_CRANK_DEST: case JBUF_SAVE_AND_PASS: if (jmain->whole_image[0] == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); jmain->pub.process_data = process_data_buffer_main; break; #endif default: ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); break; } } /* * Process some data. * This routine handles the simple pass-through mode, * where we have only a strip buffer. */ METHODDEF(void) process_data_simple_main (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail) { my_main_ptr jmain = (my_main_ptr) cinfo->main; while (jmain->cur_iMCU_row < cinfo->total_iMCU_rows) { /* Read input data if we haven't filled the main buffer yet */ if (jmain->rowgroup_ctr < DCTSIZE) (*cinfo->prep->pre_process_data) (cinfo, input_buf, in_row_ctr, in_rows_avail, jmain->buffer, &jmain->rowgroup_ctr, (JDIMENSION) DCTSIZE); /* If we don't have a full iMCU row buffered, return to application for * more data. Note that preprocessor will always pad to fill the iMCU row * at the bottom of the image. */ if (jmain->rowgroup_ctr != DCTSIZE) return; /* Send the completed row to the compressor */ if (! (*cinfo->coef->compress_data) (cinfo, jmain->buffer)) { /* If compressor did not consume the whole row, then we must need to * suspend processing and return to the application. In this situation * we pretend we didn't yet consume the last input row; otherwise, if * it happened to be the last row of the image, the application would * think we were done. */ if (! jmain->suspended) { (*in_row_ctr)--; jmain->suspended = TRUE; } return; } /* We did finish the row. Undo our little suspension hack if a previous * call suspended; then mark the main buffer empty. */ if (jmain->suspended) { (*in_row_ctr)++; jmain->suspended = FALSE; } jmain->rowgroup_ctr = 0; jmain->cur_iMCU_row++; } } #ifdef FULL_MAIN_BUFFER_SUPPORTED /* * Process some data. * This routine handles all of the modes that use a full-size buffer. */ METHODDEF(void) process_data_buffer_main (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail) { my_main_ptr jmain = (my_main_ptr) cinfo->main; int ci; jpeg_component_info *compptr; boolean writing = (jmain->pass_mode != JBUF_CRANK_DEST); while (jmain->cur_iMCU_row < cinfo->total_iMCU_rows) { /* Realign the virtual buffers if at the start of an iMCU row. */ if (jmain->rowgroup_ctr == 0) { for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { jmain->buffer[ci] = (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, jmain->whole_image[ci], jmain->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE), (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing); } /* In a read pass, pretend we just read some source data. */ if (! writing) { *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; jmain->rowgroup_ctr = DCTSIZE; } } /* If a write pass, read input data until the current iMCU row is full. */ /* Note: preprocessor will pad if necessary to fill the last iMCU row. */ if (writing) { (*cinfo->prep->pre_process_data) (cinfo, input_buf, in_row_ctr, in_rows_avail, jmain->buffer, &jmain->rowgroup_ctr, (JDIMENSION) DCTSIZE); /* Return to application if we need more data to fill the iMCU row. */ if (jmain->rowgroup_ctr < DCTSIZE) return; } /* Emit data, unless this is a sink-only pass. */ if (jmain->pass_mode != JBUF_SAVE_SOURCE) { if (! (*cinfo->coef->compress_data) (cinfo, jmain->buffer)) { /* If compressor did not consume the whole row, then we must need to * suspend processing and return to the application. In this situation * we pretend we didn't yet consume the last input row; otherwise, if * it happened to be the last row of the image, the application would * think we were done. */ if (! jmain->suspended) { (*in_row_ctr)--; jmain->suspended = TRUE; } return; } /* We did finish the row. Undo our little suspension hack if a previous * call suspended; then mark the main buffer empty. */ if (jmain->suspended) { (*in_row_ctr)++; jmain->suspended = FALSE; } } /* If get here, we are done with this iMCU row. Mark buffer empty. */ jmain->rowgroup_ctr = 0; jmain->cur_iMCU_row++; } } #endif /* FULL_MAIN_BUFFER_SUPPORTED */ /* * Initialize main buffer controller. */ GLOBAL(void) jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) { my_main_ptr jmain; int ci; jpeg_component_info *compptr; jmain = (my_main_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_main_controller)); cinfo->main = (struct jpeg_c_main_controller *) jmain; jmain->pub.start_pass = start_pass_main; /* We don't need to create a buffer in raw-data mode. */ if (cinfo->raw_data_in) return; /* Create the buffer. It holds downsampled data, so each component * may be of a different size. */ if (need_full_buffer) { #ifdef FULL_MAIN_BUFFER_SUPPORTED /* Allocate a full-image virtual array for each component */ /* Note we pad the bottom to a multiple of the iMCU height */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { jmain->whole_image[ci] = (*cinfo->mem->request_virt_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, compptr->width_in_blocks * DCTSIZE, (JDIMENSION) jround_up((long) compptr->height_in_blocks, (long) compptr->v_samp_factor) * DCTSIZE, (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); } #else ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); #endif } else { #ifdef FULL_MAIN_BUFFER_SUPPORTED jmain->whole_image[0] = NULL; /* flag for no virtual arrays */ #endif /* Allocate a strip buffer for each component */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { jmain->buffer[ci] = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, compptr->width_in_blocks * DCTSIZE, (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); } } } htmldoc-1.8.27/jpeg/jdmainct.c0100664000212600000240000004772507304163614014627 0ustar mikeuser/* * jdmainct.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the main buffer controller for decompression. * The main buffer lies between the JPEG decompressor proper and the * post-processor; it holds downsampled data in the JPEG colorspace. * * Note that this code is bypassed in raw-data mode, since the application * supplies the equivalent of the main buffer in that case. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * In the current system design, the main buffer need never be a full-image * buffer; any full-height buffers will be found inside the coefficient or * postprocessing controllers. Nonetheless, the main controller is not * trivial. Its responsibility is to provide context rows for upsampling/ * rescaling, and doing this in an efficient fashion is a bit tricky. * * Postprocessor input data is counted in "row groups". A row group * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) * sample rows of each component. (We require DCT_scaled_size values to be * chosen such that these numbers are integers. In practice DCT_scaled_size * values will likely be powers of two, so we actually have the stronger * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.) * Upsampling will typically produce max_v_samp_factor pixel rows from each * row group (times any additional scale factor that the upsampler is * applying). * * The coefficient controller will deliver data to us one iMCU row at a time; * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or * exactly min_DCT_scaled_size row groups. (This amount of data corresponds * to one row of MCUs when the image is fully interleaved.) Note that the * number of sample rows varies across components, but the number of row * groups does not. Some garbage sample rows may be included in the last iMCU * row at the bottom of the image. * * Depending on the vertical scaling algorithm used, the upsampler may need * access to the sample row(s) above and below its current input row group. * The upsampler is required to set need_context_rows TRUE at global selection * time if so. When need_context_rows is FALSE, this controller can simply * obtain one iMCU row at a time from the coefficient controller and dole it * out as row groups to the postprocessor. * * When need_context_rows is TRUE, this controller guarantees that the buffer * passed to postprocessing contains at least one row group's worth of samples * above and below the row group(s) being processed. Note that the context * rows "above" the first passed row group appear at negative row offsets in * the passed buffer. At the top and bottom of the image, the required * context rows are manufactured by duplicating the first or last real sample * row; this avoids having special cases in the upsampling inner loops. * * The amount of context is fixed at one row group just because that's a * convenient number for this controller to work with. The existing * upsamplers really only need one sample row of context. An upsampler * supporting arbitrary output rescaling might wish for more than one row * group of context when shrinking the image; tough, we don't handle that. * (This is justified by the assumption that downsizing will be handled mostly * by adjusting the DCT_scaled_size values, so that the actual scale factor at * the upsample step needn't be much less than one.) * * To provide the desired context, we have to retain the last two row groups * of one iMCU row while reading in the next iMCU row. (The last row group * can't be processed until we have another row group for its below-context, * and so we have to save the next-to-last group too for its above-context.) * We could do this most simply by copying data around in our buffer, but * that'd be very slow. We can avoid copying any data by creating a rather * strange pointer structure. Here's how it works. We allocate a workspace * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number * of row groups per iMCU row). We create two sets of redundant pointers to * the workspace. Labeling the physical row groups 0 to M+1, the synthesized * pointer lists look like this: * M+1 M-1 * master pointer --> 0 master pointer --> 0 * 1 1 * ... ... * M-3 M-3 * M-2 M * M-1 M+1 * M M-2 * M+1 M-1 * 0 0 * We read alternate iMCU rows using each master pointer; thus the last two * row groups of the previous iMCU row remain un-overwritten in the workspace. * The pointer lists are set up so that the required context rows appear to * be adjacent to the proper places when we pass the pointer lists to the * upsampler. * * The above pictures describe the normal state of the pointer lists. * At top and bottom of the image, we diddle the pointer lists to duplicate * the first or last sample row as necessary (this is cheaper than copying * sample rows around). * * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1. In that * situation each iMCU row provides only one row group so the buffering logic * must be different (eg, we must read two iMCU rows before we can emit the * first row group). For now, we simply do not support providing context * rows when min_DCT_scaled_size is 1. That combination seems unlikely to * be worth providing --- if someone wants a 1/8th-size preview, they probably * want it quick and dirty, so a context-free upsampler is sufficient. */ /* Private buffer controller object */ typedef struct { struct jpeg_d_main_controller pub; /* public fields */ /* Pointer to allocated workspace (M or M+2 row groups). */ JSAMPARRAY buffer[MAX_COMPONENTS]; boolean buffer_full; /* Have we gotten an iMCU row from decoder? */ JDIMENSION rowgroup_ctr; /* counts row groups output to postprocessor */ /* Remaining fields are only used in the context case. */ /* These are the master pointers to the funny-order pointer lists. */ JSAMPIMAGE xbuffer[2]; /* pointers to weird pointer lists */ int whichptr; /* indicates which pointer set is now in use */ int context_state; /* process_data state machine status */ JDIMENSION rowgroups_avail; /* row groups available to postprocessor */ JDIMENSION iMCU_row_ctr; /* counts iMCU rows to detect image top/bot */ } my_main_controller; typedef my_main_controller * my_main_ptr; /* context_state values: */ #define CTX_PREPARE_FOR_IMCU 0 /* need to prepare for MCU row */ #define CTX_PROCESS_IMCU 1 /* feeding iMCU to postprocessor */ #define CTX_POSTPONED_ROW 2 /* feeding postponed row group */ /* Forward declarations */ METHODDEF(void) process_data_simple_main JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); METHODDEF(void) process_data_context_main JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); #ifdef QUANT_2PASS_SUPPORTED METHODDEF(void) process_data_crank_post JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); #endif LOCAL(void) alloc_funny_pointers (j_decompress_ptr cinfo) /* Allocate space for the funny pointer lists. * This is done only once, not once per pass. */ { my_main_ptr jmain = (my_main_ptr) cinfo->main; int ci, rgroup; int M = cinfo->min_DCT_scaled_size; jpeg_component_info *compptr; JSAMPARRAY xbuf; /* Get top-level space for component array pointers. * We alloc both arrays with one call to save a few cycles. */ jmain->xbuffer[0] = (JSAMPIMAGE) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); jmain->xbuffer[1] = jmain->xbuffer[0] + cinfo->num_components; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / cinfo->min_DCT_scaled_size; /* height of a row group of component */ /* Get space for pointer lists --- M+4 row groups in each list. * We alloc both pointer lists with one call to save a few cycles. */ xbuf = (JSAMPARRAY) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); xbuf += rgroup; /* want one row group at negative offsets */ jmain->xbuffer[0][ci] = xbuf; xbuf += rgroup * (M + 4); jmain->xbuffer[1][ci] = xbuf; } } LOCAL(void) make_funny_pointers (j_decompress_ptr cinfo) /* Create the funny pointer lists discussed in the comments above. * The actual workspace is already allocated (in jmain->buffer), * and the space for the pointer lists is allocated too. * This routine just fills in the curiously ordered lists. * This will be repeated at the beginning of each pass. */ { my_main_ptr jmain = (my_main_ptr) cinfo->main; int ci, i, rgroup; int M = cinfo->min_DCT_scaled_size; jpeg_component_info *compptr; JSAMPARRAY buf, xbuf0, xbuf1; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / cinfo->min_DCT_scaled_size; /* height of a row group of component */ xbuf0 = jmain->xbuffer[0][ci]; xbuf1 = jmain->xbuffer[1][ci]; /* First copy the workspace pointers as-is */ buf = jmain->buffer[ci]; for (i = 0; i < rgroup * (M + 2); i++) { xbuf0[i] = xbuf1[i] = buf[i]; } /* In the second list, put the last four row groups in swapped order */ for (i = 0; i < rgroup * 2; i++) { xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i]; } /* The wraparound pointers at top and bottom will be filled later * (see set_wraparound_pointers, below). Initially we want the "above" * pointers to duplicate the first actual data line. This only needs * to happen in xbuffer[0]. */ for (i = 0; i < rgroup; i++) { xbuf0[i - rgroup] = xbuf0[0]; } } } LOCAL(void) set_wraparound_pointers (j_decompress_ptr cinfo) /* Set up the "wraparound" pointers at top and bottom of the pointer lists. * This changes the pointer list state from top-of-image to the normal state. */ { my_main_ptr jmain = (my_main_ptr) cinfo->main; int ci, i, rgroup; int M = cinfo->min_DCT_scaled_size; jpeg_component_info *compptr; JSAMPARRAY xbuf0, xbuf1; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / cinfo->min_DCT_scaled_size; /* height of a row group of component */ xbuf0 = jmain->xbuffer[0][ci]; xbuf1 = jmain->xbuffer[1][ci]; for (i = 0; i < rgroup; i++) { xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; xbuf0[rgroup*(M+2) + i] = xbuf0[i]; xbuf1[rgroup*(M+2) + i] = xbuf1[i]; } } } LOCAL(void) set_bottom_pointers (j_decompress_ptr cinfo) /* Change the pointer lists to duplicate the last sample row at the bottom * of the image. whichptr indicates which xbuffer holds the final iMCU row. * Also sets rowgroups_avail to indicate number of nondummy row groups in row. */ { my_main_ptr jmain = (my_main_ptr) cinfo->main; int ci, i, rgroup, iMCUheight, rows_left; jpeg_component_info *compptr; JSAMPARRAY xbuf; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Count sample rows in one iMCU row and in one row group */ iMCUheight = compptr->v_samp_factor * compptr->DCT_scaled_size; rgroup = iMCUheight / cinfo->min_DCT_scaled_size; /* Count nondummy sample rows remaining for this component */ rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight); if (rows_left == 0) rows_left = iMCUheight; /* Count nondummy row groups. Should get same answer for each component, * so we need only do it once. */ if (ci == 0) { jmain->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); } /* Duplicate the last real sample row rgroup*2 times; this pads out the * last partial rowgroup and ensures at least one full rowgroup of context. */ xbuf = jmain->xbuffer[jmain->whichptr][ci]; for (i = 0; i < rgroup * 2; i++) { xbuf[rows_left + i] = xbuf[rows_left-1]; } } } /* * Initialize for a processing pass. */ METHODDEF(void) start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) { my_main_ptr jmain = (my_main_ptr) cinfo->main; switch (pass_mode) { case JBUF_PASS_THRU: if (cinfo->upsample->need_context_rows) { jmain->pub.process_data = process_data_context_main; make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ jmain->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ jmain->context_state = CTX_PREPARE_FOR_IMCU; jmain->iMCU_row_ctr = 0; } else { /* Simple case with no context needed */ jmain->pub.process_data = process_data_simple_main; } jmain->buffer_full = FALSE; /* Mark buffer empty */ jmain->rowgroup_ctr = 0; break; #ifdef QUANT_2PASS_SUPPORTED case JBUF_CRANK_DEST: /* For last pass of 2-pass quantization, just crank the postprocessor */ jmain->pub.process_data = process_data_crank_post; break; #endif default: ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); break; } } /* * Process some data. * This handles the simple case where no context is required. */ METHODDEF(void) process_data_simple_main (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { my_main_ptr jmain = (my_main_ptr) cinfo->main; JDIMENSION rowgroups_avail; /* Read input data if we haven't filled the main buffer yet */ if (! jmain->buffer_full) { if (! (*cinfo->coef->decompress_data) (cinfo, jmain->buffer)) return; /* suspension forced, can do nothing more */ jmain->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ } /* There are always min_DCT_scaled_size row groups in an iMCU row. */ rowgroups_avail = (JDIMENSION) cinfo->min_DCT_scaled_size; /* Note: at the bottom of the image, we may pass extra garbage row groups * to the postprocessor. The postprocessor has to check for bottom * of image anyway (at row resolution), so no point in us doing it too. */ /* Feed the postprocessor */ (*cinfo->post->post_process_data) (cinfo, jmain->buffer, &jmain->rowgroup_ctr, rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ if (jmain->rowgroup_ctr >= rowgroups_avail) { jmain->buffer_full = FALSE; jmain->rowgroup_ctr = 0; } } /* * Process some data. * This handles the case where context rows must be provided. */ METHODDEF(void) process_data_context_main (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { my_main_ptr jmain = (my_main_ptr) cinfo->main; /* Read input data if we haven't filled the main buffer yet */ if (! jmain->buffer_full) { if (! (*cinfo->coef->decompress_data) (cinfo, jmain->xbuffer[jmain->whichptr])) return; /* suspension forced, can do nothing more */ jmain->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ jmain->iMCU_row_ctr++; /* count rows received */ } /* Postprocessor typically will not swallow all the input data it is handed * in one call (due to filling the output buffer first). Must be prepared * to exit and restart. This switch lets us keep track of how far we got. * Note that each case falls through to the next on successful completion. */ switch (jmain->context_state) { case CTX_POSTPONED_ROW: /* Call postprocessor using previously set pointers for postponed row */ (*cinfo->post->post_process_data) (cinfo, jmain->xbuffer[jmain->whichptr], &jmain->rowgroup_ctr, jmain->rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (jmain->rowgroup_ctr < jmain->rowgroups_avail) return; /* Need to suspend */ jmain->context_state = CTX_PREPARE_FOR_IMCU; if (*out_row_ctr >= out_rows_avail) return; /* Postprocessor exactly filled output buf */ /*FALLTHROUGH*/ case CTX_PREPARE_FOR_IMCU: /* Prepare to process first M-1 row groups of this iMCU row */ jmain->rowgroup_ctr = 0; jmain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1); /* Check for bottom of image: if so, tweak pointers to "duplicate" * the last sample row, and adjust rowgroups_avail to ignore padding rows. */ if (jmain->iMCU_row_ctr == cinfo->total_iMCU_rows) set_bottom_pointers(cinfo); jmain->context_state = CTX_PROCESS_IMCU; /*FALLTHROUGH*/ case CTX_PROCESS_IMCU: /* Call postprocessor using previously set pointers */ (*cinfo->post->post_process_data) (cinfo, jmain->xbuffer[jmain->whichptr], &jmain->rowgroup_ctr, jmain->rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); if (jmain->rowgroup_ctr < jmain->rowgroups_avail) return; /* Need to suspend */ /* After the first iMCU, change wraparound pointers to normal state */ if (jmain->iMCU_row_ctr == 1) set_wraparound_pointers(cinfo); /* Prepare to load new iMCU row using other xbuffer list */ jmain->whichptr ^= 1; /* 0=>1 or 1=>0 */ jmain->buffer_full = FALSE; /* Still need to process last row group of this iMCU row, */ /* which is saved at index M+1 of the other xbuffer */ jmain->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_scaled_size + 1); jmain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size + 2); jmain->context_state = CTX_POSTPONED_ROW; } } /* * Process some data. * Final pass of two-pass quantization: just call the postprocessor. * Source data will be the postprocessor controller's internal buffer. */ #ifdef QUANT_2PASS_SUPPORTED METHODDEF(void) process_data_crank_post (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL, (JDIMENSION *) NULL, (JDIMENSION) 0, output_buf, out_row_ctr, out_rows_avail); } #endif /* QUANT_2PASS_SUPPORTED */ /* * Initialize main buffer controller. */ GLOBAL(void) jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) { my_main_ptr jmain; int ci, rgroup, ngroups; jpeg_component_info *compptr; jmain = (my_main_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_main_controller)); cinfo->main = (struct jpeg_d_main_controller *) jmain; jmain->pub.start_pass = start_pass_main; if (need_full_buffer) /* shouldn't happen */ ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); /* Allocate the workspace. * ngroups is the number of row groups we need. */ if (cinfo->upsample->need_context_rows) { if (cinfo->min_DCT_scaled_size < 2) /* unsupported, see comments above */ ERREXIT(cinfo, JERR_NOTIMPL); alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ ngroups = cinfo->min_DCT_scaled_size + 2; } else { ngroups = cinfo->min_DCT_scaled_size; } for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / cinfo->min_DCT_scaled_size; /* height of a row group of component */ jmain->buffer[ci] = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, compptr->width_in_blocks * compptr->DCT_scaled_size, (JDIMENSION) (rgroup * ngroups)); } } htmldoc-1.8.27/jpeg/jdpostct.c0100664000212600000240000002277306713354635014674 0ustar mikeuser/* * jdpostct.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the decompression postprocessing controller. * This controller manages the upsampling, color conversion, and color * quantization/reduction steps; specifically, it controls the buffering * between upsample/color conversion and color quantization/reduction. * * If no color quantization/reduction is required, then this module has no * work to do, and it just hands off to the upsample/color conversion code. * An integrated upsample/convert/quantize process would replace this module * entirely. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Private buffer controller object */ typedef struct { struct jpeg_d_post_controller pub; /* public fields */ /* Color quantization source buffer: this holds output data from * the upsample/color conversion step to be passed to the quantizer. * For two-pass color quantization, we need a full-image buffer; * for one-pass operation, a strip buffer is sufficient. */ jvirt_sarray_ptr whole_image; /* virtual array, or NULL if one-pass */ JSAMPARRAY buffer; /* strip buffer, or current strip of virtual */ JDIMENSION strip_height; /* buffer size in rows */ /* for two-pass mode only: */ JDIMENSION starting_row; /* row # of first row in current strip */ JDIMENSION next_row; /* index of next row to fill/empty in strip */ } my_post_controller; typedef my_post_controller * my_post_ptr; /* Forward declarations */ METHODDEF(void) post_process_1pass JPP((j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); #ifdef QUANT_2PASS_SUPPORTED METHODDEF(void) post_process_prepass JPP((j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); METHODDEF(void) post_process_2pass JPP((j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); #endif /* * Initialize for a processing pass. */ METHODDEF(void) start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) { my_post_ptr post = (my_post_ptr) cinfo->post; switch (pass_mode) { case JBUF_PASS_THRU: if (cinfo->quantize_colors) { /* Single-pass processing with color quantization. */ post->pub.post_process_data = post_process_1pass; /* We could be doing buffered-image output before starting a 2-pass * color quantization; in that case, jinit_d_post_controller did not * allocate a strip buffer. Use the virtual-array buffer as workspace. */ if (post->buffer == NULL) { post->buffer = (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, post->whole_image, (JDIMENSION) 0, post->strip_height, TRUE); } } else { /* For single-pass processing without color quantization, * I have no work to do; just call the upsampler directly. */ post->pub.post_process_data = cinfo->upsample->upsample; } break; #ifdef QUANT_2PASS_SUPPORTED case JBUF_SAVE_AND_PASS: /* First pass of 2-pass quantization */ if (post->whole_image == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); post->pub.post_process_data = post_process_prepass; break; case JBUF_CRANK_DEST: /* Second pass of 2-pass quantization */ if (post->whole_image == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); post->pub.post_process_data = post_process_2pass; break; #endif /* QUANT_2PASS_SUPPORTED */ default: ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); break; } post->starting_row = post->next_row = 0; } /* * Process some data in the one-pass (strip buffer) case. * This is used for color precision reduction as well as one-pass quantization. */ METHODDEF(void) post_process_1pass (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { my_post_ptr post = (my_post_ptr) cinfo->post; JDIMENSION num_rows, max_rows; /* Fill the buffer, but not more than what we can dump out in one go. */ /* Note we rely on the upsampler to detect bottom of image. */ max_rows = out_rows_avail - *out_row_ctr; if (max_rows > post->strip_height) max_rows = post->strip_height; num_rows = 0; (*cinfo->upsample->upsample) (cinfo, input_buf, in_row_group_ctr, in_row_groups_avail, post->buffer, &num_rows, max_rows); /* Quantize and emit data. */ (*cinfo->cquantize->color_quantize) (cinfo, post->buffer, output_buf + *out_row_ctr, (int) num_rows); *out_row_ctr += num_rows; } #ifdef QUANT_2PASS_SUPPORTED /* * Process some data in the first pass of 2-pass quantization. */ METHODDEF(void) post_process_prepass (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { my_post_ptr post = (my_post_ptr) cinfo->post; JDIMENSION old_next_row, num_rows; /* Reposition virtual buffer if at start of strip. */ if (post->next_row == 0) { post->buffer = (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, post->whole_image, post->starting_row, post->strip_height, TRUE); } /* Upsample some data (up to a strip height's worth). */ old_next_row = post->next_row; (*cinfo->upsample->upsample) (cinfo, input_buf, in_row_group_ctr, in_row_groups_avail, post->buffer, &post->next_row, post->strip_height); /* Allow quantizer to scan new data. No data is emitted, */ /* but we advance out_row_ctr so outer loop can tell when we're done. */ if (post->next_row > old_next_row) { num_rows = post->next_row - old_next_row; (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, (JSAMPARRAY) NULL, (int) num_rows); *out_row_ctr += num_rows; } /* Advance if we filled the strip. */ if (post->next_row >= post->strip_height) { post->starting_row += post->strip_height; post->next_row = 0; } } /* * Process some data in the second pass of 2-pass quantization. */ METHODDEF(void) post_process_2pass (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { my_post_ptr post = (my_post_ptr) cinfo->post; JDIMENSION num_rows, max_rows; /* Reposition virtual buffer if at start of strip. */ if (post->next_row == 0) { post->buffer = (*cinfo->mem->access_virt_sarray) ((j_common_ptr) cinfo, post->whole_image, post->starting_row, post->strip_height, FALSE); } /* Determine number of rows to emit. */ num_rows = post->strip_height - post->next_row; /* available in strip */ max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ if (num_rows > max_rows) num_rows = max_rows; /* We have to check bottom of image here, can't depend on upsampler. */ max_rows = cinfo->output_height - post->starting_row; if (num_rows > max_rows) num_rows = max_rows; /* Quantize and emit data. */ (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + post->next_row, output_buf + *out_row_ctr, (int) num_rows); *out_row_ctr += num_rows; /* Advance if we filled the strip. */ post->next_row += num_rows; if (post->next_row >= post->strip_height) { post->starting_row += post->strip_height; post->next_row = 0; } } #endif /* QUANT_2PASS_SUPPORTED */ /* * Initialize postprocessing controller. */ GLOBAL(void) jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer) { my_post_ptr post; post = (my_post_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_post_controller)); cinfo->post = (struct jpeg_d_post_controller *) post; post->pub.start_pass = start_pass_dpost; post->whole_image = NULL; /* flag for no virtual arrays */ post->buffer = NULL; /* flag for no strip buffer */ /* Create the quantization buffer, if needed */ if (cinfo->quantize_colors) { /* The buffer strip height is max_v_samp_factor, which is typically * an efficient number of rows for upsampling to return. * (In the presence of output rescaling, we might want to be smarter?) */ post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; if (need_full_buffer) { /* Two-pass color quantization: need full-image storage. */ /* We round up the number of rows to a multiple of the strip height. */ #ifdef QUANT_2PASS_SUPPORTED post->whole_image = (*cinfo->mem->request_virt_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, cinfo->output_width * cinfo->out_color_components, (JDIMENSION) jround_up((long) cinfo->output_height, (long) post->strip_height), post->strip_height); #else ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); #endif /* QUANT_2PASS_SUPPORTED */ } else { /* One-pass color quantization: just make a strip buffer. */ post->buffer = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->output_width * cinfo->out_color_components, post->strip_height); } } } htmldoc-1.8.27/jpeg/jcapimin.c0100664000212600000240000002164106713354635014625 0ustar mikeuser/* * jcapimin.c * * Copyright (C) 1994-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains application interface code for the compression half * of the JPEG library. These are the "minimum" API routines that may be * needed in either the normal full-compression case or the transcoding-only * case. * * Most of the routines intended to be called directly by an application * are in this file or in jcapistd.c. But also see jcparam.c for * parameter-setup helper routines, jcomapi.c for routines shared by * compression and decompression, and jctrans.c for the transcoding case. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * Initialization of a JPEG compression object. * The error manager must already be set up (in case memory manager fails). */ GLOBAL(void) jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize) { int i; /* Guard against version mismatches between library and caller. */ cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ if (version != JPEG_LIB_VERSION) ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); if (structsize != SIZEOF(struct jpeg_compress_struct)) ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, (int) SIZEOF(struct jpeg_compress_struct), (int) structsize); /* For debugging purposes, we zero the whole master structure. * But the application has already set the err pointer, and may have set * client_data, so we have to save and restore those fields. * Note: if application hasn't set client_data, tools like Purify may * complain here. */ { struct jpeg_error_mgr * err = cinfo->err; void * client_data = cinfo->client_data; /* ignore Purify complaint here */ MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct)); cinfo->err = err; cinfo->client_data = client_data; } cinfo->is_decompressor = FALSE; /* Initialize a memory manager instance for this object */ jinit_memory_mgr((j_common_ptr) cinfo); /* Zero out pointers to permanent structures. */ cinfo->progress = NULL; cinfo->dest = NULL; cinfo->comp_info = NULL; for (i = 0; i < NUM_QUANT_TBLS; i++) cinfo->quant_tbl_ptrs[i] = NULL; for (i = 0; i < NUM_HUFF_TBLS; i++) { cinfo->dc_huff_tbl_ptrs[i] = NULL; cinfo->ac_huff_tbl_ptrs[i] = NULL; } cinfo->script_space = NULL; cinfo->input_gamma = 1.0; /* in case application forgets */ /* OK, I'm ready */ cinfo->global_state = CSTATE_START; } /* * Destruction of a JPEG compression object */ GLOBAL(void) jpeg_destroy_compress (j_compress_ptr cinfo) { jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ } /* * Abort processing of a JPEG compression operation, * but don't destroy the object itself. */ GLOBAL(void) jpeg_abort_compress (j_compress_ptr cinfo) { jpeg_abort((j_common_ptr) cinfo); /* use common routine */ } /* * Forcibly suppress or un-suppress all quantization and Huffman tables. * Marks all currently defined tables as already written (if suppress) * or not written (if !suppress). This will control whether they get emitted * by a subsequent jpeg_start_compress call. * * This routine is exported for use by applications that want to produce * abbreviated JPEG datastreams. It logically belongs in jcparam.c, but * since it is called by jpeg_start_compress, we put it here --- otherwise * jcparam.o would be linked whether the application used it or not. */ GLOBAL(void) jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress) { int i; JQUANT_TBL * qtbl; JHUFF_TBL * htbl; for (i = 0; i < NUM_QUANT_TBLS; i++) { if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL) qtbl->sent_table = suppress; } for (i = 0; i < NUM_HUFF_TBLS; i++) { if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL) htbl->sent_table = suppress; if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL) htbl->sent_table = suppress; } } /* * Finish JPEG compression. * * If a multipass operating mode was selected, this may do a great deal of * work including most of the actual output. */ GLOBAL(void) jpeg_finish_compress (j_compress_ptr cinfo) { JDIMENSION iMCU_row; if (cinfo->global_state == CSTATE_SCANNING || cinfo->global_state == CSTATE_RAW_OK) { /* Terminate first pass */ if (cinfo->next_scanline < cinfo->image_height) ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); (*cinfo->master->finish_pass) (cinfo); } else if (cinfo->global_state != CSTATE_WRCOEFS) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Perform any remaining passes */ while (! cinfo->master->is_last_pass) { (*cinfo->master->prepare_for_pass) (cinfo); for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) { if (cinfo->progress != NULL) { cinfo->progress->pass_counter = (long) iMCU_row; cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows; (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); } /* We bypass the main controller and invoke coef controller directly; * all work is being done from the coefficient buffer. */ if (! (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL)) ERREXIT(cinfo, JERR_CANT_SUSPEND); } (*cinfo->master->finish_pass) (cinfo); } /* Write EOI, do final cleanup */ (*cinfo->marker->write_file_trailer) (cinfo); (*cinfo->dest->term_destination) (cinfo); /* We can use jpeg_abort to release memory and reset global_state */ jpeg_abort((j_common_ptr) cinfo); } /* * Write a special marker. * This is only recommended for writing COM or APPn markers. * Must be called after jpeg_start_compress() and before * first call to jpeg_write_scanlines() or jpeg_write_raw_data(). */ GLOBAL(void) jpeg_write_marker (j_compress_ptr cinfo, int marker, const JOCTET *dataptr, unsigned int datalen) { JMETHOD(void, write_marker_byte, (j_compress_ptr info, int val)); if (cinfo->next_scanline != 0 || (cinfo->global_state != CSTATE_SCANNING && cinfo->global_state != CSTATE_RAW_OK && cinfo->global_state != CSTATE_WRCOEFS)) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); write_marker_byte = cinfo->marker->write_marker_byte; /* copy for speed */ while (datalen--) { (*write_marker_byte) (cinfo, *dataptr); dataptr++; } } /* Same, but piecemeal. */ GLOBAL(void) jpeg_write_m_header (j_compress_ptr cinfo, int marker, unsigned int datalen) { if (cinfo->next_scanline != 0 || (cinfo->global_state != CSTATE_SCANNING && cinfo->global_state != CSTATE_RAW_OK && cinfo->global_state != CSTATE_WRCOEFS)) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); } GLOBAL(void) jpeg_write_m_byte (j_compress_ptr cinfo, int val) { (*cinfo->marker->write_marker_byte) (cinfo, val); } /* * Alternate compression function: just write an abbreviated table file. * Before calling this, all parameters and a data destination must be set up. * * To produce a pair of files containing abbreviated tables and abbreviated * image data, one would proceed as follows: * * initialize JPEG object * set JPEG parameters * set destination to table file * jpeg_write_tables(cinfo); * set destination to image file * jpeg_start_compress(cinfo, FALSE); * write data... * jpeg_finish_compress(cinfo); * * jpeg_write_tables has the side effect of marking all tables written * (same as jpeg_suppress_tables(..., TRUE)). Thus a subsequent start_compress * will not re-emit the tables unless it is passed write_all_tables=TRUE. */ GLOBAL(void) jpeg_write_tables (j_compress_ptr cinfo) { if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* (Re)initialize error mgr and destination modules */ (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); (*cinfo->dest->init_destination) (cinfo); /* Initialize the marker writer ... bit of a crock to do it here. */ jinit_marker_writer(cinfo); /* Write them tables! */ (*cinfo->marker->write_tables_only) (cinfo); /* And clean up. */ (*cinfo->dest->term_destination) (cinfo); /* * In library releases up through v6a, we called jpeg_abort() here to free * any working memory allocated by the destination manager and marker * writer. Some applications had a problem with that: they allocated space * of their own from the library memory manager, and didn't want it to go * away during write_tables. So now we do nothing. This will cause a * memory leak if an app calls write_tables repeatedly without doing a full * compression cycle or otherwise resetting the JPEG object. However, that * seems less bad than unexpectedly freeing memory in the normal case. * An app that prefers the old behavior can call jpeg_abort for itself after * each call to jpeg_write_tables(). */ } htmldoc-1.8.27/jpeg/jdapimin.c0100664000212600000240000003053506713354635014630 0ustar mikeuser/* * jdapimin.c * * Copyright (C) 1994-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains application interface code for the decompression half * of the JPEG library. These are the "minimum" API routines that may be * needed in either the normal full-decompression case or the * transcoding-only case. * * Most of the routines intended to be called directly by an application * are in this file or in jdapistd.c. But also see jcomapi.c for routines * shared by compression and decompression, and jdtrans.c for the transcoding * case. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * Initialization of a JPEG decompression object. * The error manager must already be set up (in case memory manager fails). */ GLOBAL(void) jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) { int i; /* Guard against version mismatches between library and caller. */ cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ if (version != JPEG_LIB_VERSION) ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); if (structsize != SIZEOF(struct jpeg_decompress_struct)) ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize); /* For debugging purposes, we zero the whole master structure. * But the application has already set the err pointer, and may have set * client_data, so we have to save and restore those fields. * Note: if application hasn't set client_data, tools like Purify may * complain here. */ { struct jpeg_error_mgr * err = cinfo->err; void * client_data = cinfo->client_data; /* ignore Purify complaint here */ MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); cinfo->err = err; cinfo->client_data = client_data; } cinfo->is_decompressor = TRUE; /* Initialize a memory manager instance for this object */ jinit_memory_mgr((j_common_ptr) cinfo); /* Zero out pointers to permanent structures. */ cinfo->progress = NULL; cinfo->src = NULL; for (i = 0; i < NUM_QUANT_TBLS; i++) cinfo->quant_tbl_ptrs[i] = NULL; for (i = 0; i < NUM_HUFF_TBLS; i++) { cinfo->dc_huff_tbl_ptrs[i] = NULL; cinfo->ac_huff_tbl_ptrs[i] = NULL; } /* Initialize marker processor so application can override methods * for COM, APPn markers before calling jpeg_read_header. */ cinfo->marker_list = NULL; jinit_marker_reader(cinfo); /* And initialize the overall input controller. */ jinit_input_controller(cinfo); /* OK, I'm ready */ cinfo->global_state = DSTATE_START; } /* * Destruction of a JPEG decompression object */ GLOBAL(void) jpeg_destroy_decompress (j_decompress_ptr cinfo) { jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ } /* * Abort processing of a JPEG decompression operation, * but don't destroy the object itself. */ GLOBAL(void) jpeg_abort_decompress (j_decompress_ptr cinfo) { jpeg_abort((j_common_ptr) cinfo); /* use common routine */ } /* * Set default decompression parameters. */ LOCAL(void) default_decompress_parms (j_decompress_ptr cinfo) { /* Guess the input colorspace, and set output colorspace accordingly. */ /* (Wish JPEG committee had provided a real way to specify this...) */ /* Note application may override our guesses. */ switch (cinfo->num_components) { case 1: cinfo->jpeg_color_space = JCS_GRAYSCALE; cinfo->out_color_space = JCS_GRAYSCALE; break; case 3: if (cinfo->saw_JFIF_marker) { cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ } else if (cinfo->saw_Adobe_marker) { switch (cinfo->Adobe_transform) { case 0: cinfo->jpeg_color_space = JCS_RGB; break; case 1: cinfo->jpeg_color_space = JCS_YCbCr; break; default: WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ break; } } else { /* Saw no special markers, try to guess from the component IDs */ int cid0 = cinfo->comp_info[0].component_id; int cid1 = cinfo->comp_info[1].component_id; int cid2 = cinfo->comp_info[2].component_id; if (cid0 == 1 && cid1 == 2 && cid2 == 3) cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ else if (cid0 == 82 && cid1 == 71 && cid2 == 66) cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ else { TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ } } /* Always guess RGB is proper output colorspace. */ cinfo->out_color_space = JCS_RGB; break; case 4: if (cinfo->saw_Adobe_marker) { switch (cinfo->Adobe_transform) { case 0: cinfo->jpeg_color_space = JCS_CMYK; break; case 2: cinfo->jpeg_color_space = JCS_YCCK; break; default: WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ break; } } else { /* No special markers, assume straight CMYK. */ cinfo->jpeg_color_space = JCS_CMYK; } cinfo->out_color_space = JCS_CMYK; break; default: cinfo->jpeg_color_space = JCS_UNKNOWN; cinfo->out_color_space = JCS_UNKNOWN; break; } /* Set defaults for other decompression parameters. */ cinfo->scale_num = 1; /* 1:1 scaling */ cinfo->scale_denom = 1; cinfo->output_gamma = 1.0; cinfo->buffered_image = FALSE; cinfo->raw_data_out = FALSE; cinfo->dct_method = JDCT_DEFAULT; cinfo->do_fancy_upsampling = TRUE; cinfo->do_block_smoothing = TRUE; cinfo->quantize_colors = FALSE; /* We set these in case application only sets quantize_colors. */ cinfo->dither_mode = JDITHER_FS; #ifdef QUANT_2PASS_SUPPORTED cinfo->two_pass_quantize = TRUE; #else cinfo->two_pass_quantize = FALSE; #endif cinfo->desired_number_of_colors = 256; cinfo->colormap = NULL; /* Initialize for no mode change in buffered-image mode. */ cinfo->enable_1pass_quant = FALSE; cinfo->enable_external_quant = FALSE; cinfo->enable_2pass_quant = FALSE; } /* * Decompression startup: read start of JPEG datastream to see what's there. * Need only initialize JPEG object and supply a data source before calling. * * This routine will read as far as the first SOS marker (ie, actual start of * compressed data), and will save all tables and parameters in the JPEG * object. It will also initialize the decompression parameters to default * values, and finally return JPEG_HEADER_OK. On return, the application may * adjust the decompression parameters and then call jpeg_start_decompress. * (Or, if the application only wanted to determine the image parameters, * the data need not be decompressed. In that case, call jpeg_abort or * jpeg_destroy to release any temporary space.) * If an abbreviated (tables only) datastream is presented, the routine will * return JPEG_HEADER_TABLES_ONLY upon reaching EOI. The application may then * re-use the JPEG object to read the abbreviated image datastream(s). * It is unnecessary (but OK) to call jpeg_abort in this case. * The JPEG_SUSPENDED return code only occurs if the data source module * requests suspension of the decompressor. In this case the application * should load more source data and then re-call jpeg_read_header to resume * processing. * If a non-suspending data source is used and require_image is TRUE, then the * return code need not be inspected since only JPEG_HEADER_OK is possible. * * This routine is now just a front end to jpeg_consume_input, with some * extra error checking. */ GLOBAL(int) jpeg_read_header (j_decompress_ptr cinfo, boolean require_image) { int retcode; if (cinfo->global_state != DSTATE_START && cinfo->global_state != DSTATE_INHEADER) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); retcode = jpeg_consume_input(cinfo); switch (retcode) { case JPEG_REACHED_SOS: retcode = JPEG_HEADER_OK; break; case JPEG_REACHED_EOI: if (require_image) /* Complain if application wanted an image */ ERREXIT(cinfo, JERR_NO_IMAGE); /* Reset to start state; it would be safer to require the application to * call jpeg_abort, but we can't change it now for compatibility reasons. * A side effect is to free any temporary memory (there shouldn't be any). */ jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ retcode = JPEG_HEADER_TABLES_ONLY; break; case JPEG_SUSPENDED: /* no work */ break; } return retcode; } /* * Consume data in advance of what the decompressor requires. * This can be called at any time once the decompressor object has * been created and a data source has been set up. * * This routine is essentially a state machine that handles a couple * of critical state-transition actions, namely initial setup and * transition from header scanning to ready-for-start_decompress. * All the actual input is done via the input controller's consume_input * method. */ GLOBAL(int) jpeg_consume_input (j_decompress_ptr cinfo) { int retcode = JPEG_SUSPENDED; /* NB: every possible DSTATE value should be listed in this switch */ switch (cinfo->global_state) { case DSTATE_START: /* Start-of-datastream actions: reset appropriate modules */ (*cinfo->inputctl->reset_input_controller) (cinfo); /* Initialize application's data source module */ (*cinfo->src->init_source) (cinfo); cinfo->global_state = DSTATE_INHEADER; /*FALLTHROUGH*/ case DSTATE_INHEADER: retcode = (*cinfo->inputctl->consume_input) (cinfo); if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ /* Set up default parameters based on header data */ default_decompress_parms(cinfo); /* Set global state: ready for start_decompress */ cinfo->global_state = DSTATE_READY; } break; case DSTATE_READY: /* Can't advance past first SOS until start_decompress is called */ retcode = JPEG_REACHED_SOS; break; case DSTATE_PRELOAD: case DSTATE_PRESCAN: case DSTATE_SCANNING: case DSTATE_RAW_OK: case DSTATE_BUFIMAGE: case DSTATE_BUFPOST: case DSTATE_STOPPING: retcode = (*cinfo->inputctl->consume_input) (cinfo); break; default: ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); } return retcode; } /* * Have we finished reading the input file? */ GLOBAL(boolean) jpeg_input_complete (j_decompress_ptr cinfo) { /* Check for valid jpeg object */ if (cinfo->global_state < DSTATE_START || cinfo->global_state > DSTATE_STOPPING) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); return cinfo->inputctl->eoi_reached; } /* * Is there more than one scan? */ GLOBAL(boolean) jpeg_has_multiple_scans (j_decompress_ptr cinfo) { /* Only valid after jpeg_read_header completes */ if (cinfo->global_state < DSTATE_READY || cinfo->global_state > DSTATE_STOPPING) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); return cinfo->inputctl->has_multiple_scans; } /* * Finish JPEG decompression. * * This will normally just verify the file trailer and release temp storage. * * Returns FALSE if suspended. The return value need be inspected only if * a suspending data source is used. */ GLOBAL(boolean) jpeg_finish_decompress (j_decompress_ptr cinfo) { if ((cinfo->global_state == DSTATE_SCANNING || cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { /* Terminate final pass of non-buffered mode */ if (cinfo->output_scanline < cinfo->output_height) ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); (*cinfo->master->finish_output_pass) (cinfo); cinfo->global_state = DSTATE_STOPPING; } else if (cinfo->global_state == DSTATE_BUFIMAGE) { /* Finishing after a buffered-image operation */ cinfo->global_state = DSTATE_STOPPING; } else if (cinfo->global_state != DSTATE_STOPPING) { /* STOPPING = repeat call after a suspension, anything else is error */ ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); } /* Read until EOI */ while (! cinfo->inputctl->eoi_reached) { if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) return FALSE; /* Suspend, come back later */ } /* Do final cleanup */ (*cinfo->src->term_source) (cinfo); /* We can use jpeg_abort to release memory and reset global_state */ jpeg_abort((j_common_ptr) cinfo); return TRUE; } htmldoc-1.8.27/jpeg/jmemsys.h0100664000212600000240000002004606713354635014525 0ustar mikeuser/* * jmemsys.h * * Copyright (C) 1992-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This include file defines the interface between the system-independent * and system-dependent portions of the JPEG memory manager. No other * modules need include it. (The system-independent portion is jmemmgr.c; * there are several different versions of the system-dependent portion.) * * This file works as-is for the system-dependent memory managers supplied * in the IJG distribution. You may need to modify it if you write a * custom memory manager. If system-dependent changes are needed in * this file, the best method is to #ifdef them based on a configuration * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR * and USE_MAC_MEMMGR. */ /* Short forms of external names for systems with brain-damaged linkers. */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jpeg_get_small jGetSmall #define jpeg_free_small jFreeSmall #define jpeg_get_large jGetLarge #define jpeg_free_large jFreeLarge #define jpeg_mem_available jMemAvail #define jpeg_open_backing_store jOpenBackStore #define jpeg_mem_init jMemInit #define jpeg_mem_term jMemTerm #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* * These two functions are used to allocate and release small chunks of * memory. (Typically the total amount requested through jpeg_get_small is * no more than 20K or so; this will be requested in chunks of a few K each.) * Behavior should be the same as for the standard library functions malloc * and free; in particular, jpeg_get_small must return NULL on failure. * On most systems, these ARE malloc and free. jpeg_free_small is passed the * size of the object being freed, just in case it's needed. * On an 80x86 machine using small-data memory model, these manage near heap. */ EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject)); EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object, size_t sizeofobject)); /* * These two functions are used to allocate and release large chunks of * memory (up to the total free space designated by jpeg_mem_available). * The interface is the same as above, except that on an 80x86 machine, * far pointers are used. On most other machines these are identical to * the jpeg_get/free_small routines; but we keep them separate anyway, * in case a different allocation strategy is desirable for large chunks. */ EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo, size_t sizeofobject)); EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object, size_t sizeofobject)); /* * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may * be requested in a single call to jpeg_get_large (and jpeg_get_small for that * matter, but that case should never come into play). This macro is needed * to model the 64Kb-segment-size limit of far addressing on 80x86 machines. * On those machines, we expect that jconfig.h will provide a proper value. * On machines with 32-bit flat address spaces, any large constant may be used. * * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type * size_t and will be a multiple of sizeof(align_type). */ #ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */ #define MAX_ALLOC_CHUNK 1000000000L #endif /* * This routine computes the total space still available for allocation by * jpeg_get_large. If more space than this is needed, backing store will be * used. NOTE: any memory already allocated must not be counted. * * There is a minimum space requirement, corresponding to the minimum * feasible buffer sizes; jmemmgr.c will request that much space even if * jpeg_mem_available returns zero. The maximum space needed, enough to hold * all working storage in memory, is also passed in case it is useful. * Finally, the total space already allocated is passed. If no better * method is available, cinfo->mem->max_memory_to_use - already_allocated * is often a suitable calculation. * * It is OK for jpeg_mem_available to underestimate the space available * (that'll just lead to more backing-store access than is really necessary). * However, an overestimate will lead to failure. Hence it's wise to subtract * a slop factor from the true available space. 5% should be enough. * * On machines with lots of virtual memory, any large constant may be returned. * Conversely, zero may be returned to always use the minimum amount of memory. */ EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo, long min_bytes_needed, long max_bytes_needed, long already_allocated)); /* * This structure holds whatever state is needed to access a single * backing-store object. The read/write/close method pointers are called * by jmemmgr.c to manipulate the backing-store object; all other fields * are private to the system-dependent backing store routines. */ #define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */ #ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */ typedef unsigned short XMSH; /* type of extended-memory handles */ typedef unsigned short EMSH; /* type of expanded-memory handles */ typedef union { short file_handle; /* DOS file handle if it's a temp file */ XMSH xms_handle; /* handle if it's a chunk of XMS */ EMSH ems_handle; /* handle if it's a chunk of EMS */ } handle_union; #endif /* USE_MSDOS_MEMMGR */ #ifdef USE_MAC_MEMMGR /* Mac-specific junk */ #include #endif /* USE_MAC_MEMMGR */ typedef struct backing_store_struct * backing_store_ptr; typedef struct backing_store_struct { /* Methods for reading/writing/closing this backing-store object */ JMETHOD(void, read_backing_store, (j_common_ptr cinfo, backing_store_ptr info, void FAR * buffer_address, long file_offset, long byte_count)); JMETHOD(void, write_backing_store, (j_common_ptr cinfo, backing_store_ptr info, void FAR * buffer_address, long file_offset, long byte_count)); JMETHOD(void, close_backing_store, (j_common_ptr cinfo, backing_store_ptr info)); /* Private fields for system-dependent backing-store management */ #ifdef USE_MSDOS_MEMMGR /* For the MS-DOS manager (jmemdos.c), we need: */ handle_union handle; /* reference to backing-store storage object */ char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ #else #ifdef USE_MAC_MEMMGR /* For the Mac manager (jmemmac.c), we need: */ short temp_file; /* file reference number to temp file */ FSSpec tempSpec; /* the FSSpec for the temp file */ char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ #else /* For a typical implementation with temp files, we need: */ FILE * temp_file; /* stdio reference to temp file */ char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */ #endif #endif } backing_store_info; /* * Initial opening of a backing-store object. This must fill in the * read/write/close pointers in the object. The read/write routines * may take an error exit if the specified maximum file size is exceeded. * (If jpeg_mem_available always returns a large value, this routine can * just take an error exit.) */ EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed)); /* * These routines take care of any system-dependent initialization and * cleanup required. jpeg_mem_init will be called before anything is * allocated (and, therefore, nothing in cinfo is of use except the error * manager pointer). It should return a suitable default value for * max_memory_to_use; this may subsequently be overridden by the surrounding * application. (Note that max_memory_to_use is only important if * jpeg_mem_available chooses to consult it ... no one else will.) * jpeg_mem_term may assume that all requested memory has been freed and that * all opened backing-store objects have been closed. */ EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo)); EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo)); htmldoc-1.8.27/jpeg/jcdctmgr.c0100664000212600000240000003026506713354635014632 0ustar mikeuser/* * jcdctmgr.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the forward-DCT management logic. * This code selects a particular DCT implementation to be used, * and it performs related housekeeping chores including coefficient * quantization. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ /* Private subobject for this module */ typedef struct { struct jpeg_forward_dct pub; /* public fields */ /* Pointer to the DCT routine actually in use */ forward_DCT_method_ptr do_dct; /* The actual post-DCT divisors --- not identical to the quant table * entries, because of scaling (especially for an unnormalized DCT). * Each table is given in normal array order. */ DCTELEM * divisors[NUM_QUANT_TBLS]; #ifdef DCT_FLOAT_SUPPORTED /* Same as above for the floating-point case. */ float_DCT_method_ptr do_float_dct; FAST_FLOAT * float_divisors[NUM_QUANT_TBLS]; #endif } my_fdct_controller; typedef my_fdct_controller * my_fdct_ptr; /* * Initialize for a processing pass. * Verify that all referenced Q-tables are present, and set up * the divisor table for each one. * In the current implementation, DCT of all components is done during * the first pass, even if only some components will be output in the * first scan. Hence all components should be examined here. */ METHODDEF(void) start_pass_fdctmgr (j_compress_ptr cinfo) { my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; int ci, qtblno, i; jpeg_component_info *compptr; JQUANT_TBL * qtbl; DCTELEM * dtbl; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { qtblno = compptr->quant_tbl_no; /* Make sure specified quantization table is present */ if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || cinfo->quant_tbl_ptrs[qtblno] == NULL) ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); qtbl = cinfo->quant_tbl_ptrs[qtblno]; /* Compute divisors for this quant table */ /* We may do this more than once for same table, but it's not a big deal */ switch (cinfo->dct_method) { #ifdef DCT_ISLOW_SUPPORTED case JDCT_ISLOW: /* For LL&M IDCT method, divisors are equal to raw quantization * coefficients multiplied by 8 (to counteract scaling). */ if (fdct->divisors[qtblno] == NULL) { fdct->divisors[qtblno] = (DCTELEM *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, DCTSIZE2 * SIZEOF(DCTELEM)); } dtbl = fdct->divisors[qtblno]; for (i = 0; i < DCTSIZE2; i++) { dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3; } break; #endif #ifdef DCT_IFAST_SUPPORTED case JDCT_IFAST: { /* For AA&N IDCT method, divisors are equal to quantization * coefficients scaled by scalefactor[row]*scalefactor[col], where * scalefactor[0] = 1 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 * We apply a further scale factor of 8. */ #define CONST_BITS 14 static const INT16 aanscales[DCTSIZE2] = { /* precomputed values scaled up by 14 bits */ 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 }; SHIFT_TEMPS if (fdct->divisors[qtblno] == NULL) { fdct->divisors[qtblno] = (DCTELEM *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, DCTSIZE2 * SIZEOF(DCTELEM)); } dtbl = fdct->divisors[qtblno]; for (i = 0; i < DCTSIZE2; i++) { dtbl[i] = (DCTELEM) DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], (INT32) aanscales[i]), CONST_BITS-3); } } break; #endif #ifdef DCT_FLOAT_SUPPORTED case JDCT_FLOAT: { /* For float AA&N IDCT method, divisors are equal to quantization * coefficients scaled by scalefactor[row]*scalefactor[col], where * scalefactor[0] = 1 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 * We apply a further scale factor of 8. * What's actually stored is 1/divisor so that the inner loop can * use a multiplication rather than a division. */ FAST_FLOAT * fdtbl; int row, col; static const double aanscalefactor[DCTSIZE] = { 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 }; if (fdct->float_divisors[qtblno] == NULL) { fdct->float_divisors[qtblno] = (FAST_FLOAT *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, DCTSIZE2 * SIZEOF(FAST_FLOAT)); } fdtbl = fdct->float_divisors[qtblno]; i = 0; for (row = 0; row < DCTSIZE; row++) { for (col = 0; col < DCTSIZE; col++) { fdtbl[i] = (FAST_FLOAT) (1.0 / (((double) qtbl->quantval[i] * aanscalefactor[row] * aanscalefactor[col] * 8.0))); i++; } } } break; #endif default: ERREXIT(cinfo, JERR_NOT_COMPILED); break; } } } /* * Perform forward DCT on one or more blocks of a component. * * The input samples are taken from the sample_data[] array starting at * position start_row/start_col, and moving to the right for any additional * blocks. The quantized coefficients are returned in coef_blocks[]. */ METHODDEF(void) forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY sample_data, JBLOCKROW coef_blocks, JDIMENSION start_row, JDIMENSION start_col, JDIMENSION num_blocks) /* This version is used for integer DCT implementations. */ { /* This routine is heavily used, so it's worth coding it tightly. */ my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; forward_DCT_method_ptr do_dct = fdct->do_dct; DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no]; DCTELEM workspace[DCTSIZE2]; /* work area for FDCT subroutine */ JDIMENSION bi; sample_data += start_row; /* fold in the vertical offset once */ for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { /* Load data into workspace, applying unsigned->signed conversion */ { register DCTELEM *workspaceptr; register JSAMPROW elemptr; register int elemr; workspaceptr = workspace; for (elemr = 0; elemr < DCTSIZE; elemr++) { elemptr = sample_data[elemr] + start_col; #if DCTSIZE == 8 /* unroll the inner loop */ *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; #else { register int elemc; for (elemc = DCTSIZE; elemc > 0; elemc--) { *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; } } #endif } } /* Perform the DCT */ (*do_dct) (workspace); /* Quantize/descale the coefficients, and store into coef_blocks[] */ { register DCTELEM temp, qval; register int i; register JCOEFPTR output_ptr = coef_blocks[bi]; for (i = 0; i < DCTSIZE2; i++) { qval = divisors[i]; temp = workspace[i]; /* Divide the coefficient value by qval, ensuring proper rounding. * Since C does not specify the direction of rounding for negative * quotients, we have to force the dividend positive for portability. * * In most files, at least half of the output values will be zero * (at default quantization settings, more like three-quarters...) * so we should ensure that this case is fast. On many machines, * a comparison is enough cheaper than a divide to make a special test * a win. Since both inputs will be nonnegative, we need only test * for a < b to discover whether a/b is 0. * If your machine's division is fast enough, define FAST_DIVIDE. */ #ifdef FAST_DIVIDE #define DIVIDE_BY(a,b) a /= b #else #define DIVIDE_BY(a,b) if (a >= b) a /= b; else a = 0 #endif if (temp < 0) { temp = -temp; temp += qval>>1; /* for rounding */ DIVIDE_BY(temp, qval); temp = -temp; } else { temp += qval>>1; /* for rounding */ DIVIDE_BY(temp, qval); } output_ptr[i] = (JCOEF) temp; } } } } #ifdef DCT_FLOAT_SUPPORTED METHODDEF(void) forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr, JSAMPARRAY sample_data, JBLOCKROW coef_blocks, JDIMENSION start_row, JDIMENSION start_col, JDIMENSION num_blocks) /* This version is used for floating-point DCT implementations. */ { /* This routine is heavily used, so it's worth coding it tightly. */ my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; float_DCT_method_ptr do_dct = fdct->do_float_dct; FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no]; FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */ JDIMENSION bi; sample_data += start_row; /* fold in the vertical offset once */ for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { /* Load data into workspace, applying unsigned->signed conversion */ { register FAST_FLOAT *workspaceptr; register JSAMPROW elemptr; register int elemr; workspaceptr = workspace; for (elemr = 0; elemr < DCTSIZE; elemr++) { elemptr = sample_data[elemr] + start_col; #if DCTSIZE == 8 /* unroll the inner loop */ *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); #else { register int elemc; for (elemc = DCTSIZE; elemc > 0; elemc--) { *workspaceptr++ = (FAST_FLOAT) (GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); } } #endif } } /* Perform the DCT */ (*do_dct) (workspace); /* Quantize/descale the coefficients, and store into coef_blocks[] */ { register FAST_FLOAT temp; register int i; register JCOEFPTR output_ptr = coef_blocks[bi]; for (i = 0; i < DCTSIZE2; i++) { /* Apply the quantization and scaling factor */ temp = workspace[i] * divisors[i]; /* Round to nearest integer. * Since C does not specify the direction of rounding for negative * quotients, we have to force the dividend positive for portability. * The maximum coefficient size is +-16K (for 12-bit data), so this * code should work for either 16-bit or 32-bit ints. */ output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384); } } } } #endif /* DCT_FLOAT_SUPPORTED */ /* * Initialize FDCT manager. */ GLOBAL(void) jinit_forward_dct (j_compress_ptr cinfo) { my_fdct_ptr fdct; int i; fdct = (my_fdct_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_fdct_controller)); cinfo->fdct = (struct jpeg_forward_dct *) fdct; fdct->pub.start_pass = start_pass_fdctmgr; switch (cinfo->dct_method) { #ifdef DCT_ISLOW_SUPPORTED case JDCT_ISLOW: fdct->pub.forward_DCT = forward_DCT; fdct->do_dct = jpeg_fdct_islow; break; #endif #ifdef DCT_IFAST_SUPPORTED case JDCT_IFAST: fdct->pub.forward_DCT = forward_DCT; fdct->do_dct = jpeg_fdct_ifast; break; #endif #ifdef DCT_FLOAT_SUPPORTED case JDCT_FLOAT: fdct->pub.forward_DCT = forward_DCT_float; fdct->do_float_dct = jpeg_fdct_float; break; #endif default: ERREXIT(cinfo, JERR_NOT_COMPILED); break; } /* Mark divisor tables unallocated */ for (i = 0; i < NUM_QUANT_TBLS; i++) { fdct->divisors[i] = NULL; #ifdef DCT_FLOAT_SUPPORTED fdct->float_divisors[i] = NULL; #endif } } htmldoc-1.8.27/jpeg/jddctmgr.c0100664000212600000240000002014506713354635014627 0ustar mikeuser/* * jddctmgr.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the inverse-DCT management logic. * This code selects a particular IDCT implementation to be used, * and it performs related housekeeping chores. No code in this file * is executed per IDCT step, only during output pass setup. * * Note that the IDCT routines are responsible for performing coefficient * dequantization as well as the IDCT proper. This module sets up the * dequantization multiplier table needed by the IDCT routine. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ /* * The decompressor input side (jdinput.c) saves away the appropriate * quantization table for each component at the start of the first scan * involving that component. (This is necessary in order to correctly * decode files that reuse Q-table slots.) * When we are ready to make an output pass, the saved Q-table is converted * to a multiplier table that will actually be used by the IDCT routine. * The multiplier table contents are IDCT-method-dependent. To support * application changes in IDCT method between scans, we can remake the * multiplier tables if necessary. * In buffered-image mode, the first output pass may occur before any data * has been seen for some components, and thus before their Q-tables have * been saved away. To handle this case, multiplier tables are preset * to zeroes; the result of the IDCT will be a neutral gray level. */ /* Private subobject for this module */ typedef struct { struct jpeg_inverse_dct pub; /* public fields */ /* This array contains the IDCT method code that each multiplier table * is currently set up for, or -1 if it's not yet set up. * The actual multiplier tables are pointed to by dct_table in the * per-component comp_info structures. */ int cur_method[MAX_COMPONENTS]; } my_idct_controller; typedef my_idct_controller * my_idct_ptr; /* Allocated multiplier tables: big enough for any supported variant */ typedef union { ISLOW_MULT_TYPE islow_array[DCTSIZE2]; #ifdef DCT_IFAST_SUPPORTED IFAST_MULT_TYPE ifast_array[DCTSIZE2]; #endif #ifdef DCT_FLOAT_SUPPORTED FLOAT_MULT_TYPE float_array[DCTSIZE2]; #endif } multiplier_table; /* The current scaled-IDCT routines require ISLOW-style multiplier tables, * so be sure to compile that code if either ISLOW or SCALING is requested. */ #ifdef DCT_ISLOW_SUPPORTED #define PROVIDE_ISLOW_TABLES #else #ifdef IDCT_SCALING_SUPPORTED #define PROVIDE_ISLOW_TABLES #endif #endif /* * Prepare for an output pass. * Here we select the proper IDCT routine for each component and build * a matching multiplier table. */ METHODDEF(void) start_pass (j_decompress_ptr cinfo) { my_idct_ptr idct = (my_idct_ptr) cinfo->idct; int ci, i; jpeg_component_info *compptr; int method = 0; inverse_DCT_method_ptr method_ptr = NULL; JQUANT_TBL * qtbl; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Select the proper IDCT routine for this component's scaling */ switch (compptr->DCT_scaled_size) { #ifdef IDCT_SCALING_SUPPORTED case 1: method_ptr = jpeg_idct_1x1; method = JDCT_ISLOW; /* jidctred uses islow-style table */ break; case 2: method_ptr = jpeg_idct_2x2; method = JDCT_ISLOW; /* jidctred uses islow-style table */ break; case 4: method_ptr = jpeg_idct_4x4; method = JDCT_ISLOW; /* jidctred uses islow-style table */ break; #endif case DCTSIZE: switch (cinfo->dct_method) { #ifdef DCT_ISLOW_SUPPORTED case JDCT_ISLOW: method_ptr = jpeg_idct_islow; method = JDCT_ISLOW; break; #endif #ifdef DCT_IFAST_SUPPORTED case JDCT_IFAST: method_ptr = jpeg_idct_ifast; method = JDCT_IFAST; break; #endif #ifdef DCT_FLOAT_SUPPORTED case JDCT_FLOAT: method_ptr = jpeg_idct_float; method = JDCT_FLOAT; break; #endif default: ERREXIT(cinfo, JERR_NOT_COMPILED); break; } break; default: ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->DCT_scaled_size); break; } idct->pub.inverse_DCT[ci] = method_ptr; /* Create multiplier table from quant table. * However, we can skip this if the component is uninteresting * or if we already built the table. Also, if no quant table * has yet been saved for the component, we leave the * multiplier table all-zero; we'll be reading zeroes from the * coefficient controller's buffer anyway. */ if (! compptr->component_needed || idct->cur_method[ci] == method) continue; qtbl = compptr->quant_table; if (qtbl == NULL) /* happens if no data yet for component */ continue; idct->cur_method[ci] = method; switch (method) { #ifdef PROVIDE_ISLOW_TABLES case JDCT_ISLOW: { /* For LL&M IDCT method, multipliers are equal to raw quantization * coefficients, but are stored as ints to ensure access efficiency. */ ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; for (i = 0; i < DCTSIZE2; i++) { ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; } } break; #endif #ifdef DCT_IFAST_SUPPORTED case JDCT_IFAST: { /* For AA&N IDCT method, multipliers are equal to quantization * coefficients scaled by scalefactor[row]*scalefactor[col], where * scalefactor[0] = 1 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 * For integer operation, the multiplier table is to be scaled by * IFAST_SCALE_BITS. */ IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; #define CONST_BITS 14 static const INT16 aanscales[DCTSIZE2] = { /* precomputed values scaled up by 14 bits */ 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 }; SHIFT_TEMPS for (i = 0; i < DCTSIZE2; i++) { ifmtbl[i] = (IFAST_MULT_TYPE) DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], (INT32) aanscales[i]), CONST_BITS-IFAST_SCALE_BITS); } } break; #endif #ifdef DCT_FLOAT_SUPPORTED case JDCT_FLOAT: { /* For float AA&N IDCT method, multipliers are equal to quantization * coefficients scaled by scalefactor[row]*scalefactor[col], where * scalefactor[0] = 1 * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 */ FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; int row, col; static const double aanscalefactor[DCTSIZE] = { 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 }; i = 0; for (row = 0; row < DCTSIZE; row++) { for (col = 0; col < DCTSIZE; col++) { fmtbl[i] = (FLOAT_MULT_TYPE) ((double) qtbl->quantval[i] * aanscalefactor[row] * aanscalefactor[col]); i++; } } } break; #endif default: ERREXIT(cinfo, JERR_NOT_COMPILED); break; } } } /* * Initialize IDCT manager. */ GLOBAL(void) jinit_inverse_dct (j_decompress_ptr cinfo) { my_idct_ptr idct; int ci; jpeg_component_info *compptr; idct = (my_idct_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_idct_controller)); cinfo->idct = (struct jpeg_inverse_dct *) idct; idct->pub.start_pass = start_pass; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Allocate and pre-zero a multiplier table for each component */ compptr->dct_table = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(multiplier_table)); MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); /* Mark multiplier table not yet set up for any method */ idct->cur_method[ci] = -1; } } htmldoc-1.8.27/jpeg/jerror.c0100664000212600000240000001721507232317116014326 0ustar mikeuser/* * jerror.c * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains simple error-reporting and trace-message routines. * These are suitable for Unix-like systems and others where writing to * stderr is the right thing to do. Many applications will want to replace * some or all of these routines. * * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile, * you get a Windows-specific hack to display error messages in a dialog box. * It ain't much, but it beats dropping error messages into the bit bucket, * which is what happens to output to stderr under most Windows C compilers. * * These routines are used by both the compression and decompression code. */ /* this is not a core library module, so it doesn't define JPEG_INTERNALS */ #include "jinclude.h" #include "jpeglib.h" #include "jversion.h" #include "jerror.h" #include #ifdef USE_WINDOWS_MESSAGEBOX #include #endif #ifndef EXIT_FAILURE /* define exit() codes if not provided */ #define EXIT_FAILURE 1 #endif /* * Create the message string table. * We do this from the master message list in jerror.h by re-reading * jerror.h with a suitable definition for macro JMESSAGE. * The message table is made an external symbol just in case any applications * want to refer to it directly. */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jpeg_std_message_table jMsgTable #endif #define JMESSAGE(code,string) string , const char * const jpeg_std_message_table[] = { #include "jerror.h" NULL }; /* * Error exit handler: must not return to caller. * * Applications may override this if they want to get control back after * an error. Typically one would longjmp somewhere instead of exiting. * The setjmp buffer can be made a private field within an expanded error * handler object. Note that the info needed to generate an error message * is stored in the error object, so you can generate the message now or * later, at your convenience. * You should make sure that the JPEG object is cleaned up (with jpeg_abort * or jpeg_destroy) at some point. */ METHODDEF(void) error_exit (j_common_ptr cinfo) { /* Always display the message */ (*cinfo->err->output_message) (cinfo); /* Let the memory manager delete any temp files before we die */ jpeg_destroy(cinfo); exit(EXIT_FAILURE); } /* * Actual output of an error or trace message. * Applications may override this method to send JPEG messages somewhere * other than stderr. * * On Windows, printing to stderr is generally completely useless, * so we provide optional code to produce an error-dialog popup. * Most Windows applications will still prefer to override this routine, * but if they don't, it'll do something at least marginally useful. * * NOTE: to use the library in an environment that doesn't support the * C stdio library, you may have to delete the call to fprintf() entirely, * not just not use this routine. */ METHODDEF(void) output_message (j_common_ptr cinfo) { char buffer[JMSG_LENGTH_MAX]; /* Create the message */ (*cinfo->err->format_message) (cinfo, buffer); #ifdef USE_WINDOWS_MESSAGEBOX /* Display it in a message dialog box */ MessageBox(GetActiveWindow(), buffer, "JPEG Library Error", MB_OK | MB_ICONERROR); #else /* Send it to stderr, adding a newline */ fprintf(stderr, "%s\n", buffer); #endif } /* * Decide whether to emit a trace or warning message. * msg_level is one of: * -1: recoverable corrupt-data warning, may want to abort. * 0: important advisory messages (always display to user). * 1: first level of tracing detail. * 2,3,...: successively more detailed tracing messages. * An application might override this method if it wanted to abort on warnings * or change the policy about which messages to display. */ METHODDEF(void) emit_message (j_common_ptr cinfo, int msg_level) { struct jpeg_error_mgr * err = cinfo->err; if (msg_level < 0) { /* It's a warning message. Since corrupt files may generate many warnings, * the policy implemented here is to show only the first warning, * unless trace_level >= 3. */ if (err->num_warnings == 0 || err->trace_level >= 3) (*err->output_message) (cinfo); /* Always count warnings in num_warnings. */ err->num_warnings++; } else { /* It's a trace message. Show it if trace_level >= msg_level. */ if (err->trace_level >= msg_level) (*err->output_message) (cinfo); } } /* * Format a message string for the most recent JPEG error or message. * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX * characters. Note that no '\n' character is added to the string. * Few applications should need to override this method. */ METHODDEF(void) format_message (j_common_ptr cinfo, char * buffer) { struct jpeg_error_mgr * err = cinfo->err; int msg_code = err->msg_code; const char * msgtext = NULL; const char * msgptr; char ch; boolean isstring; /* Look up message string in proper table */ if (msg_code > 0 && msg_code <= err->last_jpeg_message) { msgtext = err->jpeg_message_table[msg_code]; } else if (err->addon_message_table != NULL && msg_code >= err->first_addon_message && msg_code <= err->last_addon_message) { msgtext = err->addon_message_table[msg_code - err->first_addon_message]; } /* Defend against bogus message number */ if (msgtext == NULL) { err->msg_parm.i[0] = msg_code; msgtext = err->jpeg_message_table[0]; } /* Check for string parameter, as indicated by %s in the message text */ isstring = FALSE; msgptr = msgtext; while ((ch = *msgptr++) != '\0') { if (ch == '%') { if (*msgptr == 's') isstring = TRUE; break; } } /* Format the message into the passed buffer */ if (isstring) sprintf(buffer, msgtext, err->msg_parm.s); else sprintf(buffer, msgtext, err->msg_parm.i[0], err->msg_parm.i[1], err->msg_parm.i[2], err->msg_parm.i[3], err->msg_parm.i[4], err->msg_parm.i[5], err->msg_parm.i[6], err->msg_parm.i[7]); } /* * Reset error state variables at start of a new image. * This is called during compression startup to reset trace/error * processing to default state, without losing any application-specific * method pointers. An application might possibly want to override * this method if it has additional error processing state. */ METHODDEF(void) reset_error_mgr (j_common_ptr cinfo) { cinfo->err->num_warnings = 0; /* trace_level is not reset since it is an application-supplied parameter */ cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ } /* * Fill in the standard error-handling methods in a jpeg_error_mgr object. * Typical call is: * struct jpeg_compress_struct cinfo; * struct jpeg_error_mgr err; * * cinfo.err = jpeg_std_error(&err); * after which the application may override some of the methods. */ GLOBAL(struct jpeg_error_mgr *) jpeg_std_error (struct jpeg_error_mgr * err) { err->error_exit = error_exit; err->emit_message = emit_message; err->output_message = output_message; err->format_message = format_message; err->reset_error_mgr = reset_error_mgr; err->trace_level = 0; /* default = no tracing */ err->num_warnings = 0; /* no warnings emitted yet */ err->msg_code = 0; /* may be useful as a flag for "no error" */ /* Initialize message table pointers */ err->jpeg_message_table = jpeg_std_message_table; err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; err->addon_message_table = NULL; err->first_addon_message = 0; /* for safety */ err->last_addon_message = 0; return err; } htmldoc-1.8.27/jpeg/jdhuff.c0100664000212600000240000005060206713354635014300 0ustar mikeuser/* * jdhuff.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains Huffman entropy decoding routines. * * Much of the complexity here has to do with supporting input suspension. * If the data source module demands suspension, we want to be able to back * up to the start of the current MCU. To do this, we copy state variables * into local working storage, and update them back to the permanent * storage only upon successful completion of an MCU. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdhuff.h" /* Declarations shared with jdphuff.c */ /* * Expanded entropy decoder object for Huffman decoding. * * The savable_state subrecord contains fields that change within an MCU, * but must not be updated permanently until we complete the MCU. */ typedef struct { int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ } savable_state; /* This macro is to work around compilers with missing or broken * structure assignment. You'll need to fix this code if you have * such a compiler and you change MAX_COMPS_IN_SCAN. */ #ifndef NO_STRUCT_ASSIGN #define ASSIGN_STATE(dest,src) ((dest) = (src)) #else #if MAX_COMPS_IN_SCAN == 4 #define ASSIGN_STATE(dest,src) \ ((dest).last_dc_val[0] = (src).last_dc_val[0], \ (dest).last_dc_val[1] = (src).last_dc_val[1], \ (dest).last_dc_val[2] = (src).last_dc_val[2], \ (dest).last_dc_val[3] = (src).last_dc_val[3]) #endif #endif typedef struct { struct jpeg_entropy_decoder pub; /* public fields */ /* These fields are loaded into local variables at start of each MCU. * In case of suspension, we exit WITHOUT updating them. */ bitread_perm_state bitstate; /* Bit buffer at start of MCU */ savable_state saved; /* Other state at start of MCU */ /* These fields are NOT loaded into local working state. */ unsigned int restarts_to_go; /* MCUs left in this restart interval */ /* Pointers to derived tables (these workspaces have image lifespan) */ d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; /* Precalculated info set up by start_pass for use in decode_mcu: */ /* Pointers to derived tables to be used for each block within an MCU */ d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU]; d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU]; /* Whether we care about the DC and AC coefficient values for each block */ boolean dc_needed[D_MAX_BLOCKS_IN_MCU]; boolean ac_needed[D_MAX_BLOCKS_IN_MCU]; } huff_entropy_decoder; typedef huff_entropy_decoder * huff_entropy_ptr; /* * Initialize for a Huffman-compressed scan. */ METHODDEF(void) start_pass_huff_decoder (j_decompress_ptr cinfo) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int ci, blkn, dctbl, actbl; jpeg_component_info * compptr; /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. * This ought to be an error condition, but we make it a warning because * there are some baseline files out there with all zeroes in these bytes. */ if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 || cinfo->Ah != 0 || cinfo->Al != 0) WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; dctbl = compptr->dc_tbl_no; actbl = compptr->ac_tbl_no; /* Compute derived values for Huffman tables */ /* We may do this more than once for a table, but it's not expensive */ jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl, & entropy->dc_derived_tbls[dctbl]); jpeg_make_d_derived_tbl(cinfo, FALSE, actbl, & entropy->ac_derived_tbls[actbl]); /* Initialize DC predictions to 0 */ entropy->saved.last_dc_val[ci] = 0; } /* Precalculate decoding info for each block in an MCU of this scan */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { ci = cinfo->MCU_membership[blkn]; compptr = cinfo->cur_comp_info[ci]; /* Precalculate which table to use for each block */ entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; /* Decide whether we really care about the coefficient values */ if (compptr->component_needed) { entropy->dc_needed[blkn] = TRUE; /* we don't need the ACs if producing a 1/8th-size image */ entropy->ac_needed[blkn] = (compptr->DCT_scaled_size > 1); } else { entropy->dc_needed[blkn] = entropy->ac_needed[blkn] = FALSE; } } /* Initialize bitread state variables */ entropy->bitstate.bits_left = 0; entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ entropy->pub.insufficient_data = FALSE; /* Initialize restart counter */ entropy->restarts_to_go = cinfo->restart_interval; } /* * Compute the derived values for a Huffman table. * This routine also performs some validation checks on the table. * * Note this is also used by jdphuff.c. */ GLOBAL(void) jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno, d_derived_tbl ** pdtbl) { JHUFF_TBL *htbl; d_derived_tbl *dtbl; int p, i, l, si, numsymbols; int lookbits, ctr; char huffsize[257]; unsigned int huffcode[257]; unsigned int code; /* Note that huffsize[] and huffcode[] are filled in code-length order, * paralleling the order of the symbols themselves in htbl->huffval[]. */ /* Find the input Huffman table */ if (tblno < 0 || tblno >= NUM_HUFF_TBLS) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); htbl = isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; if (htbl == NULL) ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); /* Allocate a workspace if we haven't already done so. */ if (*pdtbl == NULL) *pdtbl = (d_derived_tbl *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(d_derived_tbl)); dtbl = *pdtbl; dtbl->pub = htbl; /* fill in back link */ /* Figure C.1: make table of Huffman code length for each symbol */ p = 0; for (l = 1; l <= 16; l++) { i = (int) htbl->bits[l]; if (i < 0 || p + i > 256) /* protect against table overrun */ ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); while (i--) huffsize[p++] = (char) l; } huffsize[p] = 0; numsymbols = p; /* Figure C.2: generate the codes themselves */ /* We also validate that the counts represent a legal Huffman code tree. */ code = 0; si = huffsize[0]; p = 0; while (huffsize[p]) { while (((int) huffsize[p]) == si) { huffcode[p++] = code; code++; } /* code is now 1 more than the last code used for codelength si; but * it must still fit in si bits, since no code is allowed to be all ones. */ if (((INT32) code) >= (((INT32) 1) << si)) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); code <<= 1; si++; } /* Figure F.15: generate decoding tables for bit-sequential decoding */ p = 0; for (l = 1; l <= 16; l++) { if (htbl->bits[l]) { /* valoffset[l] = huffval[] index of 1st symbol of code length l, * minus the minimum code of length l */ dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; p += htbl->bits[l]; dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ } else { dtbl->maxcode[l] = -1; /* -1 if no codes of this length */ } } dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ /* Compute lookahead tables to speed up decoding. * First we set all the table entries to 0, indicating "too long"; * then we iterate through the Huffman codes that are short enough and * fill in all the entries that correspond to bit sequences starting * with that code. */ MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); p = 0; for (l = 1; l <= HUFF_LOOKAHEAD; l++) { for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { /* l = current code's length, p = its index in huffcode[] & huffval[]. */ /* Generate left-justified code followed by all possible bit sequences */ lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { dtbl->look_nbits[lookbits] = l; dtbl->look_sym[lookbits] = htbl->huffval[p]; lookbits++; } } } /* Validate symbols as being reasonable. * For AC tables, we make no check, but accept all byte values 0..255. * For DC tables, we require the symbols to be in range 0..15. * (Tighter bounds could be applied depending on the data depth and mode, * but this is sufficient to ensure safe decoding.) */ if (isDC) { for (i = 0; i < numsymbols; i++) { int sym = htbl->huffval[i]; if (sym < 0 || sym > 15) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); } } } /* * Out-of-line code for bit fetching (shared with jdphuff.c). * See jdhuff.h for info about usage. * Note: current values of get_buffer and bits_left are passed as parameters, * but are returned in the corresponding fields of the state struct. * * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width * of get_buffer to be used. (On machines with wider words, an even larger * buffer could be used.) However, on some machines 32-bit shifts are * quite slow and take time proportional to the number of places shifted. * (This is true with most PC compilers, for instance.) In this case it may * be a win to set MIN_GET_BITS to the minimum value of 15. This reduces the * average shift distance at the cost of more calls to jpeg_fill_bit_buffer. */ #ifdef SLOW_SHIFT_32 #define MIN_GET_BITS 15 /* minimum allowable value */ #else #define MIN_GET_BITS (BIT_BUF_SIZE-7) #endif GLOBAL(boolean) jpeg_fill_bit_buffer (bitread_working_state * state, register bit_buf_type get_buffer, register int bits_left, int nbits) /* Load up the bit buffer to a depth of at least nbits */ { /* Copy heavily used state fields into locals (hopefully registers) */ register const JOCTET * next_input_byte = state->next_input_byte; register size_t bytes_in_buffer = state->bytes_in_buffer; j_decompress_ptr cinfo = state->cinfo; /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */ /* (It is assumed that no request will be for more than that many bits.) */ /* We fail to do so only if we hit a marker or are forced to suspend. */ if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ while (bits_left < MIN_GET_BITS) { register int c; /* Attempt to read a byte */ if (bytes_in_buffer == 0) { if (! (*cinfo->src->fill_input_buffer) (cinfo)) return FALSE; next_input_byte = cinfo->src->next_input_byte; bytes_in_buffer = cinfo->src->bytes_in_buffer; } bytes_in_buffer--; c = GETJOCTET(*next_input_byte++); /* If it's 0xFF, check and discard stuffed zero byte */ if (c == 0xFF) { /* Loop here to discard any padding FF's on terminating marker, * so that we can save a valid unread_marker value. NOTE: we will * accept multiple FF's followed by a 0 as meaning a single FF data * byte. This data pattern is not valid according to the standard. */ do { if (bytes_in_buffer == 0) { if (! (*cinfo->src->fill_input_buffer) (cinfo)) return FALSE; next_input_byte = cinfo->src->next_input_byte; bytes_in_buffer = cinfo->src->bytes_in_buffer; } bytes_in_buffer--; c = GETJOCTET(*next_input_byte++); } while (c == 0xFF); if (c == 0) { /* Found FF/00, which represents an FF data byte */ c = 0xFF; } else { /* Oops, it's actually a marker indicating end of compressed data. * Save the marker code for later use. * Fine point: it might appear that we should save the marker into * bitread working state, not straight into permanent state. But * once we have hit a marker, we cannot need to suspend within the * current MCU, because we will read no more bytes from the data * source. So it is OK to update permanent state right away. */ cinfo->unread_marker = c; /* See if we need to insert some fake zero bits. */ goto no_more_bytes; } } /* OK, load c into get_buffer */ get_buffer = (get_buffer << 8) | c; bits_left += 8; } /* end while */ } else { no_more_bytes: /* We get here if we've read the marker that terminates the compressed * data segment. There should be enough bits in the buffer register * to satisfy the request; if so, no problem. */ if (nbits > bits_left) { /* Uh-oh. Report corrupted data to user and stuff zeroes into * the data stream, so that we can produce some kind of image. * We use a nonvolatile flag to ensure that only one warning message * appears per data segment. */ if (! cinfo->entropy->insufficient_data) { WARNMS(cinfo, JWRN_HIT_MARKER); cinfo->entropy->insufficient_data = TRUE; } /* Fill the buffer with zero bits */ get_buffer <<= MIN_GET_BITS - bits_left; bits_left = MIN_GET_BITS; } } /* Unload the local registers */ state->next_input_byte = next_input_byte; state->bytes_in_buffer = bytes_in_buffer; state->get_buffer = get_buffer; state->bits_left = bits_left; return TRUE; } /* * Out-of-line code for Huffman code decoding. * See jdhuff.h for info about usage. */ GLOBAL(int) jpeg_huff_decode (bitread_working_state * state, register bit_buf_type get_buffer, register int bits_left, d_derived_tbl * htbl, int min_bits) { register int l = min_bits; register INT32 code; /* HUFF_DECODE has determined that the code is at least min_bits */ /* bits long, so fetch that many bits in one swoop. */ CHECK_BIT_BUFFER(*state, l, return -1); code = GET_BITS(l); /* Collect the rest of the Huffman code one bit at a time. */ /* This is per Figure F.16 in the JPEG spec. */ while (code > htbl->maxcode[l]) { code <<= 1; CHECK_BIT_BUFFER(*state, 1, return -1); code |= GET_BITS(1); l++; } /* Unload the local registers */ state->get_buffer = get_buffer; state->bits_left = bits_left; /* With garbage input we may reach the sentinel value l = 17. */ if (l > 16) { WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); return 0; /* fake a zero as the safest result */ } return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; } /* * Figure F.12: extend sign bit. * On some machines, a shift and add will be faster than a table lookup. */ #ifdef AVOID_TABLES #define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) #else #define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) static const int extend_test[16] = /* entry n is 2**(n-1) */ { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; #endif /* AVOID_TABLES */ /* * Check for a restart marker & resynchronize decoder. * Returns FALSE if must suspend. */ LOCAL(boolean) process_restart (j_decompress_ptr cinfo) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int ci; /* Throw away any unused bits remaining in bit buffer; */ /* include any full bytes in next_marker's count of discarded bytes */ cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; entropy->bitstate.bits_left = 0; /* Advance past the RSTn marker */ if (! (*cinfo->marker->read_restart_marker) (cinfo)) return FALSE; /* Re-initialize DC predictions to 0 */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) entropy->saved.last_dc_val[ci] = 0; /* Reset restart counter */ entropy->restarts_to_go = cinfo->restart_interval; /* Reset out-of-data flag, unless read_restart_marker left us smack up * against a marker. In that case we will end up treating the next data * segment as empty, and we can avoid producing bogus output pixels by * leaving the flag set. */ if (cinfo->unread_marker == 0) entropy->pub.insufficient_data = FALSE; return TRUE; } /* * Decode and return one MCU's worth of Huffman-compressed coefficients. * The coefficients are reordered from zigzag order into natural array order, * but are not dequantized. * * The i'th block of the MCU is stored into the block pointed to by * MCU_data[i]. WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER. * (Wholesale zeroing is usually a little faster than retail...) * * Returns FALSE if data source requested suspension. In that case no * changes have been made to permanent state. (Exception: some output * coefficients may already have been assigned. This is harmless for * this module, since we'll just re-assign them on the next call.) */ METHODDEF(boolean) decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) { huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; int blkn; BITREAD_STATE_VARS; savable_state state; /* Process restart marker if needed; may have to suspend */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) if (! process_restart(cinfo)) return FALSE; } /* If we've run out of data, just leave the MCU set to zeroes. * This way, we return uniform gray for the remainder of the segment. */ if (! entropy->pub.insufficient_data) { /* Load up working state */ BITREAD_LOAD_STATE(cinfo,entropy->bitstate); ASSIGN_STATE(state, entropy->saved); /* Outer loop handles each block in the MCU */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { JBLOCKROW block = MCU_data[blkn]; d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn]; d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn]; register int s, k, r; /* Decode a single block's worth of coefficients */ /* Section F.2.2.1: decode the DC coefficient difference */ HUFF_DECODE(s, br_state, dctbl, return FALSE, label1); if (s) { CHECK_BIT_BUFFER(br_state, s, return FALSE); r = GET_BITS(s); s = HUFF_EXTEND(r, s); } if (entropy->dc_needed[blkn]) { /* Convert DC difference to actual value, update last_dc_val */ int ci = cinfo->MCU_membership[blkn]; s += state.last_dc_val[ci]; state.last_dc_val[ci] = s; /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */ (*block)[0] = (JCOEF) s; } if (entropy->ac_needed[blkn]) { /* Section F.2.2.2: decode the AC coefficients */ /* Since zeroes are skipped, output area must be cleared beforehand */ for (k = 1; k < DCTSIZE2; k++) { HUFF_DECODE(s, br_state, actbl, return FALSE, label2); r = s >> 4; s &= 15; if (s) { k += r; CHECK_BIT_BUFFER(br_state, s, return FALSE); r = GET_BITS(s); s = HUFF_EXTEND(r, s); /* Output coefficient in natural (dezigzagged) order. * Note: the extra entries in jpeg_natural_order[] will save us * if k >= DCTSIZE2, which could happen if the data is corrupted. */ (*block)[jpeg_natural_order[k]] = (JCOEF) s; } else { if (r != 15) break; k += 15; } } } else { /* Section F.2.2.2: decode the AC coefficients */ /* In this path we just discard the values */ for (k = 1; k < DCTSIZE2; k++) { HUFF_DECODE(s, br_state, actbl, return FALSE, label3); r = s >> 4; s &= 15; if (s) { k += r; CHECK_BIT_BUFFER(br_state, s, return FALSE); DROP_BITS(s); } else { if (r != 15) break; k += 15; } } } } /* Completed MCU, so update state */ BITREAD_SAVE_STATE(cinfo,entropy->bitstate); ASSIGN_STATE(entropy->saved, state); } /* Account for restart interval (no-op if not using restarts) */ entropy->restarts_to_go--; return TRUE; } /* * Module initialization routine for Huffman entropy decoding. */ GLOBAL(void) jinit_huff_decoder (j_decompress_ptr cinfo) { huff_entropy_ptr entropy; int i; entropy = (huff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(huff_entropy_decoder)); cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; entropy->pub.start_pass = start_pass_huff_decoder; entropy->pub.decode_mcu = decode_mcu; /* Mark tables unallocated */ for (i = 0; i < NUM_HUFF_TBLS; i++) { entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; } } htmldoc-1.8.27/jpeg/jfdctfst.c0100664000212600000240000001663206713354635014646 0ustar mikeuser/* * jfdctfst.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains a fast, not so accurate integer implementation of the * forward DCT (Discrete Cosine Transform). * * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT * on each column. Direct algorithms are also available, but they are * much more complex and seem not to be any faster when reduced to code. * * This implementation is based on Arai, Agui, and Nakajima's algorithm for * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in * Japanese, but the algorithm is described in the Pennebaker & Mitchell * JPEG textbook (see REFERENCES section in file README). The following code * is based directly on figure 4-8 in P&M. * While an 8-point DCT cannot be done in less than 11 multiplies, it is * possible to arrange the computation so that many of the multiplies are * simple scalings of the final outputs. These multiplies can then be * folded into the multiplications or divisions by the JPEG quantization * table entries. The AA&N method leaves only 5 multiplies and 29 adds * to be done in the DCT itself. * The primary disadvantage of this method is that with fixed-point math, * accuracy is lost due to imprecise representation of the scaled * quantization values. The smaller the quantization table entry, the less * precise the scaled value, so this implementation does worse with high- * quality-setting files than with low-quality ones. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef DCT_IFAST_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* Scaling decisions are generally the same as in the LL&M algorithm; * see jfdctint.c for more details. However, we choose to descale * (right shift) multiplication products as soon as they are formed, * rather than carrying additional fractional bits into subsequent additions. * This compromises accuracy slightly, but it lets us save a few shifts. * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) * everywhere except in the multiplications proper; this saves a good deal * of work on 16-bit-int machines. * * Again to save a few shifts, the intermediate results between pass 1 and * pass 2 are not upscaled, but are represented only to integral precision. * * A final compromise is to represent the multiplicative constants to only * 8 fractional bits, rather than 13. This saves some shifting work on some * machines, and may also reduce the cost of multiplication (since there * are fewer one-bits in the constants). */ #define CONST_BITS 8 /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus * causing a lot of useless floating-point operations at run time. * To get around this we use the following pre-calculated constants. * If you change CONST_BITS you may want to add appropriate values. * (With a reasonable C compiler, you can just rely on the FIX() macro...) */ #if CONST_BITS == 8 #define FIX_0_382683433 ((INT32) 98) /* FIX(0.382683433) */ #define FIX_0_541196100 ((INT32) 139) /* FIX(0.541196100) */ #define FIX_0_707106781 ((INT32) 181) /* FIX(0.707106781) */ #define FIX_1_306562965 ((INT32) 334) /* FIX(1.306562965) */ #else #define FIX_0_382683433 FIX(0.382683433) #define FIX_0_541196100 FIX(0.541196100) #define FIX_0_707106781 FIX(0.707106781) #define FIX_1_306562965 FIX(1.306562965) #endif /* We can gain a little more speed, with a further compromise in accuracy, * by omitting the addition in a descaling shift. This yields an incorrectly * rounded result half the time... */ #ifndef USE_ACCURATE_ROUNDING #undef DESCALE #define DESCALE(x,n) RIGHT_SHIFT(x, n) #endif /* Multiply a DCTELEM variable by an INT32 constant, and immediately * descale to yield a DCTELEM result. */ #define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) /* * Perform the forward DCT on one block of samples. */ GLOBAL(void) jpeg_fdct_ifast (DCTELEM * data) { DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; DCTELEM tmp10, tmp11, tmp12, tmp13; DCTELEM z1, z2, z3, z4, z5, z11, z13; DCTELEM *dataptr; int ctr; SHIFT_TEMPS /* Pass 1: process rows. */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { tmp0 = dataptr[0] + dataptr[7]; tmp7 = dataptr[0] - dataptr[7]; tmp1 = dataptr[1] + dataptr[6]; tmp6 = dataptr[1] - dataptr[6]; tmp2 = dataptr[2] + dataptr[5]; tmp5 = dataptr[2] - dataptr[5]; tmp3 = dataptr[3] + dataptr[4]; tmp4 = dataptr[3] - dataptr[4]; /* Even part */ tmp10 = tmp0 + tmp3; /* phase 2 */ tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; dataptr[0] = tmp10 + tmp11; /* phase 3 */ dataptr[4] = tmp10 - tmp11; z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ dataptr[2] = tmp13 + z1; /* phase 5 */ dataptr[6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ z11 = tmp7 + z3; /* phase 5 */ z13 = tmp7 - z3; dataptr[5] = z13 + z2; /* phase 6 */ dataptr[3] = z13 - z2; dataptr[1] = z11 + z4; dataptr[7] = z11 - z4; dataptr += DCTSIZE; /* advance pointer to next row */ } /* Pass 2: process columns. */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; /* Even part */ tmp10 = tmp0 + tmp3; /* phase 2 */ tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ dataptr[DCTSIZE*4] = tmp10 - tmp11; z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ dataptr[DCTSIZE*6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ z11 = tmp7 + z3; /* phase 5 */ z13 = tmp7 - z3; dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ dataptr[DCTSIZE*3] = z13 - z2; dataptr[DCTSIZE*1] = z11 + z4; dataptr[DCTSIZE*7] = z11 - z4; dataptr++; /* advance pointer to next column */ } } #endif /* DCT_IFAST_SUPPORTED */ htmldoc-1.8.27/jpeg/jerror.h0100664000212600000240000003316006713354635014342 0ustar mikeuser/* * jerror.h * * Copyright (C) 1994-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file defines the error and message codes for the JPEG library. * Edit this file to add new codes, or to translate the message strings to * some other language. * A set of error-reporting macros are defined too. Some applications using * the JPEG library may wish to include this file to get the error codes * and/or the macros. */ /* * To define the enum list of message codes, include this file without * defining macro JMESSAGE. To create a message string table, include it * again with a suitable JMESSAGE definition (see jerror.c for an example). */ #ifndef JMESSAGE #ifndef JERROR_H /* First time through, define the enum list */ #define JMAKE_ENUM_LIST #else /* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ #define JMESSAGE(code,string) #endif /* JERROR_H */ #endif /* JMESSAGE */ #ifdef JMAKE_ENUM_LIST typedef enum { #define JMESSAGE(code,string) code , #endif /* JMAKE_ENUM_LIST */ JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ /* For maintenance convenience, list is alphabetical by message code name */ JMESSAGE(JERR_ARITH_NOTIMPL, "Sorry, there are legal restrictions on arithmetic coding") JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") JMESSAGE(JERR_BAD_LIB_VERSION, "Wrong JPEG library version: library is %d, caller expects %d") JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") JMESSAGE(JERR_BAD_PROGRESSION, "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") JMESSAGE(JERR_BAD_PROG_SCRIPT, "Invalid progressive parameters at scan script entry %d") JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") JMESSAGE(JERR_BAD_STRUCT_SIZE, "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") JMESSAGE(JERR_EMS_READ, "Read from EMS failed") JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") JMESSAGE(JERR_FILE_READ, "Input file read error") JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, "Cannot transcode due to multiple use of quantization table %d") JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") JMESSAGE(JERR_NOTIMPL, "Not implemented yet") JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") JMESSAGE(JERR_QUANT_COMPONENTS, "Cannot quantize more than %d color components") JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") JMESSAGE(JERR_TFILE_WRITE, "Write failed on temporary file --- out of disk space?") JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") JMESSAGE(JERR_XMS_READ, "Read from XMS failed") JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) JMESSAGE(JMSG_VERSION, JVERSION) JMESSAGE(JTRC_16BIT_TABLES, "Caution: quantization tables are too coarse for baseline JPEG") JMESSAGE(JTRC_ADOBE, "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") JMESSAGE(JTRC_DRI, "Define Restart Interval %u") JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") JMESSAGE(JTRC_EOI, "End Of Image") JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, "Warning: thumbnail image size does not match data length %u") JMESSAGE(JTRC_JFIF_EXTENSION, "JFIF extension marker: type 0x%02x, length %u") JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") JMESSAGE(JTRC_RST, "RST%d") JMESSAGE(JTRC_SMOOTH_NOTIMPL, "Smoothing not supported with nonstandard sampling ratios") JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") JMESSAGE(JTRC_SOI, "Start of Image") JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") JMESSAGE(JTRC_THUMB_JPEG, "JFIF extension marker: JPEG-compressed thumbnail image, length %u") JMESSAGE(JTRC_THUMB_PALETTE, "JFIF extension marker: palette thumbnail image, length %u") JMESSAGE(JTRC_THUMB_RGB, "JFIF extension marker: RGB thumbnail image, length %u") JMESSAGE(JTRC_UNKNOWN_IDS, "Unrecognized component IDs %d %d %d, assuming YCbCr") JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") JMESSAGE(JWRN_BOGUS_PROGRESSION, "Inconsistent progression sequence for component %d coefficient %d") JMESSAGE(JWRN_EXTRANEOUS_DATA, "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") JMESSAGE(JWRN_MUST_RESYNC, "Corrupt JPEG data: found marker 0x%02x instead of RST%d") JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") #ifdef JMAKE_ENUM_LIST JMSG_LASTMSGCODE } J_MESSAGE_CODE; #undef JMAKE_ENUM_LIST #endif /* JMAKE_ENUM_LIST */ /* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ #undef JMESSAGE #ifndef JERROR_H #define JERROR_H /* Macros to simplify using the error and trace message stuff */ /* The first parameter is either type of cinfo pointer */ /* Fatal errors (print message and exit) */ #define ERREXIT(cinfo,code) \ ((cinfo)->err->msg_code = (code), \ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) #define ERREXIT1(cinfo,code,p1) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) #define ERREXIT2(cinfo,code,p1,p2) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (cinfo)->err->msg_parm.i[1] = (p2), \ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) #define ERREXIT3(cinfo,code,p1,p2,p3) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (cinfo)->err->msg_parm.i[1] = (p2), \ (cinfo)->err->msg_parm.i[2] = (p3), \ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) #define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (cinfo)->err->msg_parm.i[1] = (p2), \ (cinfo)->err->msg_parm.i[2] = (p3), \ (cinfo)->err->msg_parm.i[3] = (p4), \ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) #define ERREXITS(cinfo,code,str) \ ((cinfo)->err->msg_code = (code), \ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) #define MAKESTMT(stuff) do { stuff } while (0) /* Nonfatal errors (we can keep going, but the data is probably corrupt) */ #define WARNMS(cinfo,code) \ ((cinfo)->err->msg_code = (code), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) #define WARNMS1(cinfo,code,p1) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) #define WARNMS2(cinfo,code,p1,p2) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (cinfo)->err->msg_parm.i[1] = (p2), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) /* Informational/debugging messages */ #define TRACEMS(cinfo,lvl,code) \ ((cinfo)->err->msg_code = (code), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) #define TRACEMS1(cinfo,lvl,code,p1) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) #define TRACEMS2(cinfo,lvl,code,p1,p2) \ ((cinfo)->err->msg_code = (code), \ (cinfo)->err->msg_parm.i[0] = (p1), \ (cinfo)->err->msg_parm.i[1] = (p2), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) #define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ (cinfo)->err->msg_code = (code); \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) #define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ (cinfo)->err->msg_code = (code); \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) #define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ _mp[4] = (p5); \ (cinfo)->err->msg_code = (code); \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) #define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ (cinfo)->err->msg_code = (code); \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) #define TRACEMSS(cinfo,lvl,code,str) \ ((cinfo)->err->msg_code = (code), \ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) #endif /* JERROR_H */ htmldoc-1.8.27/jpeg/jcmaster.c0100664000212600000240000004666106713354635014654 0ustar mikeuser/* * jcmaster.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains master control logic for the JPEG compressor. * These routines are concerned with parameter validation, initial setup, * and inter-pass control (determining the number of passes and the work * to be done in each pass). */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Private state */ typedef enum { main_pass, /* input data, also do first output step */ huff_opt_pass, /* Huffman code optimization pass */ output_pass /* data output pass */ } c_pass_type; typedef struct { struct jpeg_comp_master pub; /* public fields */ c_pass_type pass_type; /* the type of the current pass */ int pass_number; /* # of passes completed */ int total_passes; /* total # of passes needed */ int scan_number; /* current index in scan_info[] */ } my_comp_master; typedef my_comp_master * my_master_ptr; /* * Support routines that do various essential calculations. */ LOCAL(void) initial_setup (j_compress_ptr cinfo) /* Do computations that are needed before master selection phase */ { int ci; jpeg_component_info *compptr; long samplesperrow; JDIMENSION jd_samplesperrow; /* Sanity check on image dimensions */ if (cinfo->image_height <= 0 || cinfo->image_width <= 0 || cinfo->num_components <= 0 || cinfo->input_components <= 0) ERREXIT(cinfo, JERR_EMPTY_IMAGE); /* Make sure image isn't bigger than I can handle */ if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); /* Width of an input scanline must be representable as JDIMENSION. */ samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; jd_samplesperrow = (JDIMENSION) samplesperrow; if ((long) jd_samplesperrow != samplesperrow) ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); /* For now, precision must match compiled-in value... */ if (cinfo->data_precision != BITS_IN_JSAMPLE) ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); /* Check that number of components won't exceed internal array sizes */ if (cinfo->num_components > MAX_COMPONENTS) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, MAX_COMPONENTS); /* Compute maximum sampling factors; check factor validity */ cinfo->max_h_samp_factor = 1; cinfo->max_v_samp_factor = 1; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) ERREXIT(cinfo, JERR_BAD_SAMPLING); cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, compptr->h_samp_factor); cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, compptr->v_samp_factor); } /* Compute dimensions of components */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Fill in the correct component_index value; don't rely on application */ compptr->component_index = ci; /* For compression, we never do DCT scaling. */ compptr->DCT_scaled_size = DCTSIZE; /* Size in DCT blocks */ compptr->width_in_blocks = (JDIMENSION) jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, (long) (cinfo->max_h_samp_factor * DCTSIZE)); compptr->height_in_blocks = (JDIMENSION) jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, (long) (cinfo->max_v_samp_factor * DCTSIZE)); /* Size in samples */ compptr->downsampled_width = (JDIMENSION) jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, (long) cinfo->max_h_samp_factor); compptr->downsampled_height = (JDIMENSION) jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, (long) cinfo->max_v_samp_factor); /* Mark component needed (this flag isn't actually used for compression) */ compptr->component_needed = TRUE; } /* Compute number of fully interleaved MCU rows (number of times that * main controller will call coefficient controller). */ cinfo->total_iMCU_rows = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, (long) (cinfo->max_v_samp_factor*DCTSIZE)); } #ifdef C_MULTISCAN_FILES_SUPPORTED LOCAL(void) validate_script (j_compress_ptr cinfo) /* Verify that the scan script in cinfo->scan_info[] is valid; also * determine whether it uses progressive JPEG, and set cinfo->progressive_mode. */ { const jpeg_scan_info * scanptr; int scanno, ncomps, ci, coefi, thisi; int Ss, Se, Ah, Al; boolean component_sent[MAX_COMPONENTS]; #ifdef C_PROGRESSIVE_SUPPORTED int * last_bitpos_ptr; int last_bitpos[MAX_COMPONENTS][DCTSIZE2]; /* -1 until that coefficient has been seen; then last Al for it */ #endif if (cinfo->num_scans <= 0) ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, 0); /* For sequential JPEG, all scans must have Ss=0, Se=DCTSIZE2-1; * for progressive JPEG, no scan can have this. */ scanptr = cinfo->scan_info; if (scanptr->Ss != 0 || scanptr->Se != DCTSIZE2-1) { #ifdef C_PROGRESSIVE_SUPPORTED cinfo->progressive_mode = TRUE; last_bitpos_ptr = & last_bitpos[0][0]; for (ci = 0; ci < cinfo->num_components; ci++) for (coefi = 0; coefi < DCTSIZE2; coefi++) *last_bitpos_ptr++ = -1; #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else { cinfo->progressive_mode = FALSE; for (ci = 0; ci < cinfo->num_components; ci++) component_sent[ci] = FALSE; } for (scanno = 1; scanno <= cinfo->num_scans; scanptr++, scanno++) { /* Validate component indexes */ ncomps = scanptr->comps_in_scan; if (ncomps <= 0 || ncomps > MAX_COMPS_IN_SCAN) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, ncomps, MAX_COMPS_IN_SCAN); for (ci = 0; ci < ncomps; ci++) { thisi = scanptr->component_index[ci]; if (thisi < 0 || thisi >= cinfo->num_components) ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); /* Components must appear in SOF order within each scan */ if (ci > 0 && thisi <= scanptr->component_index[ci-1]) ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); } /* Validate progression parameters */ Ss = scanptr->Ss; Se = scanptr->Se; Ah = scanptr->Ah; Al = scanptr->Al; if (cinfo->progressive_mode) { #ifdef C_PROGRESSIVE_SUPPORTED /* The JPEG spec simply gives the ranges 0..13 for Ah and Al, but that * seems wrong: the upper bound ought to depend on data precision. * Perhaps they really meant 0..N+1 for N-bit precision. * Here we allow 0..10 for 8-bit data; Al larger than 10 results in * out-of-range reconstructed DC values during the first DC scan, * which might cause problems for some decoders. */ #if BITS_IN_JSAMPLE == 8 #define MAX_AH_AL 10 #else #define MAX_AH_AL 13 #endif if (Ss < 0 || Ss >= DCTSIZE2 || Se < Ss || Se >= DCTSIZE2 || Ah < 0 || Ah > MAX_AH_AL || Al < 0 || Al > MAX_AH_AL) ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); if (Ss == 0) { if (Se != 0) /* DC and AC together not OK */ ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); } else { if (ncomps != 1) /* AC scans must be for only one component */ ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); } for (ci = 0; ci < ncomps; ci++) { last_bitpos_ptr = & last_bitpos[scanptr->component_index[ci]][0]; if (Ss != 0 && last_bitpos_ptr[0] < 0) /* AC without prior DC scan */ ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); for (coefi = Ss; coefi <= Se; coefi++) { if (last_bitpos_ptr[coefi] < 0) { /* first scan of this coefficient */ if (Ah != 0) ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); } else { /* not first scan */ if (Ah != last_bitpos_ptr[coefi] || Al != Ah-1) ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); } last_bitpos_ptr[coefi] = Al; } } #endif } else { /* For sequential JPEG, all progression parameters must be these: */ if (Ss != 0 || Se != DCTSIZE2-1 || Ah != 0 || Al != 0) ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); /* Make sure components are not sent twice */ for (ci = 0; ci < ncomps; ci++) { thisi = scanptr->component_index[ci]; if (component_sent[thisi]) ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); component_sent[thisi] = TRUE; } } } /* Now verify that everything got sent. */ if (cinfo->progressive_mode) { #ifdef C_PROGRESSIVE_SUPPORTED /* For progressive mode, we only check that at least some DC data * got sent for each component; the spec does not require that all bits * of all coefficients be transmitted. Would it be wiser to enforce * transmission of all coefficient bits?? */ for (ci = 0; ci < cinfo->num_components; ci++) { if (last_bitpos[ci][0] < 0) ERREXIT(cinfo, JERR_MISSING_DATA); } #endif } else { for (ci = 0; ci < cinfo->num_components; ci++) { if (! component_sent[ci]) ERREXIT(cinfo, JERR_MISSING_DATA); } } } #endif /* C_MULTISCAN_FILES_SUPPORTED */ LOCAL(void) select_scan_parameters (j_compress_ptr cinfo) /* Set up the scan parameters for the current scan */ { int ci; #ifdef C_MULTISCAN_FILES_SUPPORTED if (cinfo->scan_info != NULL) { /* Prepare for current scan --- the script is already validated */ my_master_ptr master = (my_master_ptr) cinfo->master; const jpeg_scan_info * scanptr = cinfo->scan_info + master->scan_number; cinfo->comps_in_scan = scanptr->comps_in_scan; for (ci = 0; ci < scanptr->comps_in_scan; ci++) { cinfo->cur_comp_info[ci] = &cinfo->comp_info[scanptr->component_index[ci]]; } cinfo->Ss = scanptr->Ss; cinfo->Se = scanptr->Se; cinfo->Ah = scanptr->Ah; cinfo->Al = scanptr->Al; } else #endif { /* Prepare for single sequential-JPEG scan containing all components */ if (cinfo->num_components > MAX_COMPS_IN_SCAN) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, MAX_COMPS_IN_SCAN); cinfo->comps_in_scan = cinfo->num_components; for (ci = 0; ci < cinfo->num_components; ci++) { cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci]; } cinfo->Ss = 0; cinfo->Se = DCTSIZE2-1; cinfo->Ah = 0; cinfo->Al = 0; } } LOCAL(void) per_scan_setup (j_compress_ptr cinfo) /* Do computations that are needed before processing a JPEG scan */ /* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */ { int ci, mcublks, tmp; jpeg_component_info *compptr; if (cinfo->comps_in_scan == 1) { /* Noninterleaved (single-component) scan */ compptr = cinfo->cur_comp_info[0]; /* Overall image size in MCUs */ cinfo->MCUs_per_row = compptr->width_in_blocks; cinfo->MCU_rows_in_scan = compptr->height_in_blocks; /* For noninterleaved scan, always one block per MCU */ compptr->MCU_width = 1; compptr->MCU_height = 1; compptr->MCU_blocks = 1; compptr->MCU_sample_width = DCTSIZE; compptr->last_col_width = 1; /* For noninterleaved scans, it is convenient to define last_row_height * as the number of block rows present in the last iMCU row. */ tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); if (tmp == 0) tmp = compptr->v_samp_factor; compptr->last_row_height = tmp; /* Prepare array describing MCU composition */ cinfo->blocks_in_MCU = 1; cinfo->MCU_membership[0] = 0; } else { /* Interleaved (multi-component) scan */ if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, MAX_COMPS_IN_SCAN); /* Overall image size in MCUs */ cinfo->MCUs_per_row = (JDIMENSION) jdiv_round_up((long) cinfo->image_width, (long) (cinfo->max_h_samp_factor*DCTSIZE)); cinfo->MCU_rows_in_scan = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, (long) (cinfo->max_v_samp_factor*DCTSIZE)); cinfo->blocks_in_MCU = 0; for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; /* Sampling factors give # of blocks of component in each MCU */ compptr->MCU_width = compptr->h_samp_factor; compptr->MCU_height = compptr->v_samp_factor; compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; compptr->MCU_sample_width = compptr->MCU_width * DCTSIZE; /* Figure number of non-dummy blocks in last MCU column & row */ tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); if (tmp == 0) tmp = compptr->MCU_width; compptr->last_col_width = tmp; tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); if (tmp == 0) tmp = compptr->MCU_height; compptr->last_row_height = tmp; /* Prepare array describing MCU composition */ mcublks = compptr->MCU_blocks; if (cinfo->blocks_in_MCU + mcublks > C_MAX_BLOCKS_IN_MCU) ERREXIT(cinfo, JERR_BAD_MCU_SIZE); while (mcublks-- > 0) { cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; } } } /* Convert restart specified in rows to actual MCU count. */ /* Note that count must fit in 16 bits, so we provide limiting. */ if (cinfo->restart_in_rows > 0) { long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row; cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L); } } /* * Per-pass setup. * This is called at the beginning of each pass. We determine which modules * will be active during this pass and give them appropriate start_pass calls. * We also set is_last_pass to indicate whether any more passes will be * required. */ METHODDEF(void) prepare_for_pass (j_compress_ptr cinfo) { my_master_ptr master = (my_master_ptr) cinfo->master; switch (master->pass_type) { case main_pass: /* Initial pass: will collect input data, and do either Huffman * optimization or data output for the first scan. */ select_scan_parameters(cinfo); per_scan_setup(cinfo); if (! cinfo->raw_data_in) { (*cinfo->cconvert->start_pass) (cinfo); (*cinfo->downsample->start_pass) (cinfo); (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU); } (*cinfo->fdct->start_pass) (cinfo); (*cinfo->entropy->start_pass) (cinfo, cinfo->optimize_coding); (*cinfo->coef->start_pass) (cinfo, (master->total_passes > 1 ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); if (cinfo->optimize_coding) { /* No immediate data output; postpone writing frame/scan headers */ master->pub.call_pass_startup = FALSE; } else { /* Will write frame/scan headers at first jpeg_write_scanlines call */ master->pub.call_pass_startup = TRUE; } break; #ifdef ENTROPY_OPT_SUPPORTED case huff_opt_pass: /* Do Huffman optimization for a scan after the first one. */ select_scan_parameters(cinfo); per_scan_setup(cinfo); if (cinfo->Ss != 0 || cinfo->Ah == 0 || cinfo->arith_code) { (*cinfo->entropy->start_pass) (cinfo, TRUE); (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); master->pub.call_pass_startup = FALSE; break; } /* Special case: Huffman DC refinement scans need no Huffman table * and therefore we can skip the optimization pass for them. */ master->pass_type = output_pass; master->pass_number++; /*FALLTHROUGH*/ #endif case output_pass: /* Do a data-output pass. */ /* We need not repeat per-scan setup if prior optimization pass did it. */ if (! cinfo->optimize_coding) { select_scan_parameters(cinfo); per_scan_setup(cinfo); } (*cinfo->entropy->start_pass) (cinfo, FALSE); (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); /* We emit frame/scan headers now */ if (master->scan_number == 0) (*cinfo->marker->write_frame_header) (cinfo); (*cinfo->marker->write_scan_header) (cinfo); master->pub.call_pass_startup = FALSE; break; default: ERREXIT(cinfo, JERR_NOT_COMPILED); } master->pub.is_last_pass = (master->pass_number == master->total_passes-1); /* Set up progress monitor's pass info if present */ if (cinfo->progress != NULL) { cinfo->progress->completed_passes = master->pass_number; cinfo->progress->total_passes = master->total_passes; } } /* * Special start-of-pass hook. * This is called by jpeg_write_scanlines if call_pass_startup is TRUE. * In single-pass processing, we need this hook because we don't want to * write frame/scan headers during jpeg_start_compress; we want to let the * application write COM markers etc. between jpeg_start_compress and the * jpeg_write_scanlines loop. * In multi-pass processing, this routine is not used. */ METHODDEF(void) pass_startup (j_compress_ptr cinfo) { cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */ (*cinfo->marker->write_frame_header) (cinfo); (*cinfo->marker->write_scan_header) (cinfo); } /* * Finish up at end of pass. */ METHODDEF(void) finish_pass_master (j_compress_ptr cinfo) { my_master_ptr master = (my_master_ptr) cinfo->master; /* The entropy coder always needs an end-of-pass call, * either to analyze statistics or to flush its output buffer. */ (*cinfo->entropy->finish_pass) (cinfo); /* Update state for next pass */ switch (master->pass_type) { case main_pass: /* next pass is either output of scan 0 (after optimization) * or output of scan 1 (if no optimization). */ master->pass_type = output_pass; if (! cinfo->optimize_coding) master->scan_number++; break; case huff_opt_pass: /* next pass is always output of current scan */ master->pass_type = output_pass; break; case output_pass: /* next pass is either optimization or output of next scan */ if (cinfo->optimize_coding) master->pass_type = huff_opt_pass; master->scan_number++; break; } master->pass_number++; } /* * Initialize master compression control. */ GLOBAL(void) jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) { my_master_ptr master; master = (my_master_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_comp_master)); cinfo->master = (struct jpeg_comp_master *) master; master->pub.prepare_for_pass = prepare_for_pass; master->pub.pass_startup = pass_startup; master->pub.finish_pass = finish_pass_master; master->pub.is_last_pass = FALSE; /* Validate parameters, determine derived values */ initial_setup(cinfo); if (cinfo->scan_info != NULL) { #ifdef C_MULTISCAN_FILES_SUPPORTED validate_script(cinfo); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else { cinfo->progressive_mode = FALSE; cinfo->num_scans = 1; } if (cinfo->progressive_mode) /* TEMPORARY HACK ??? */ cinfo->optimize_coding = TRUE; /* assume default tables no good for progressive mode */ /* Initialize my private state */ if (transcode_only) { /* no main pass in transcoding */ if (cinfo->optimize_coding) master->pass_type = huff_opt_pass; else master->pass_type = output_pass; } else { /* for normal compression, first pass is always this type: */ master->pass_type = main_pass; } master->scan_number = 0; master->pass_number = 0; if (cinfo->optimize_coding) master->total_passes = cinfo->num_scans * 2; else master->total_passes = cinfo->num_scans; } htmldoc-1.8.27/jpeg/jdmaster.c0100664000212600000240000004637606713354635014660 0ustar mikeuser/* * jdmaster.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains master control logic for the JPEG decompressor. * These routines are concerned with selecting the modules to be executed * and with determining the number of passes and the work to be done in each * pass. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Private state */ typedef struct { struct jpeg_decomp_master pub; /* public fields */ int pass_number; /* # of passes completed */ boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ /* Saved references to initialized quantizer modules, * in case we need to switch modes. */ struct jpeg_color_quantizer * quantizer_1pass; struct jpeg_color_quantizer * quantizer_2pass; } my_decomp_master; typedef my_decomp_master * my_master_ptr; /* * Determine whether merged upsample/color conversion should be used. * CRUCIAL: this must match the actual capabilities of jdmerge.c! */ LOCAL(boolean) use_merged_upsample (j_decompress_ptr cinfo) { #ifdef UPSAMPLE_MERGING_SUPPORTED /* Merging is the equivalent of plain box-filter upsampling */ if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) return FALSE; /* jdmerge.c only supports YCC=>RGB color conversion */ if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || cinfo->out_color_space != JCS_RGB || cinfo->out_color_components != RGB_PIXELSIZE) return FALSE; /* and it only handles 2h1v or 2h2v sampling ratios */ if (cinfo->comp_info[0].h_samp_factor != 2 || cinfo->comp_info[1].h_samp_factor != 1 || cinfo->comp_info[2].h_samp_factor != 1 || cinfo->comp_info[0].v_samp_factor > 2 || cinfo->comp_info[1].v_samp_factor != 1 || cinfo->comp_info[2].v_samp_factor != 1) return FALSE; /* furthermore, it doesn't work if we've scaled the IDCTs differently */ if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size || cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size || cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size) return FALSE; /* ??? also need to test for upsample-time rescaling, when & if supported */ return TRUE; /* by golly, it'll work... */ #else return FALSE; #endif } /* * Compute output image dimensions and related values. * NOTE: this is exported for possible use by application. * Hence it mustn't do anything that can't be done twice. * Also note that it may be called before the master module is initialized! */ GLOBAL(void) jpeg_calc_output_dimensions (j_decompress_ptr cinfo) /* Do computations that are needed before master selection phase */ { #ifdef IDCT_SCALING_SUPPORTED int ci; jpeg_component_info *compptr; #endif /* Prevent application from calling me at wrong times */ if (cinfo->global_state != DSTATE_READY) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); #ifdef IDCT_SCALING_SUPPORTED /* Compute actual output image dimensions and DCT scaling choices. */ if (cinfo->scale_num * 8 <= cinfo->scale_denom) { /* Provide 1/8 scaling */ cinfo->output_width = (JDIMENSION) jdiv_round_up((long) cinfo->image_width, 8L); cinfo->output_height = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, 8L); cinfo->min_DCT_scaled_size = 1; } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { /* Provide 1/4 scaling */ cinfo->output_width = (JDIMENSION) jdiv_round_up((long) cinfo->image_width, 4L); cinfo->output_height = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, 4L); cinfo->min_DCT_scaled_size = 2; } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { /* Provide 1/2 scaling */ cinfo->output_width = (JDIMENSION) jdiv_round_up((long) cinfo->image_width, 2L); cinfo->output_height = (JDIMENSION) jdiv_round_up((long) cinfo->image_height, 2L); cinfo->min_DCT_scaled_size = 4; } else { /* Provide 1/1 scaling */ cinfo->output_width = cinfo->image_width; cinfo->output_height = cinfo->image_height; cinfo->min_DCT_scaled_size = DCTSIZE; } /* In selecting the actual DCT scaling for each component, we try to * scale up the chroma components via IDCT scaling rather than upsampling. * This saves time if the upsampler gets to use 1:1 scaling. * Note this code assumes that the supported DCT scalings are powers of 2. */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { int ssize = cinfo->min_DCT_scaled_size; while (ssize < DCTSIZE && (compptr->h_samp_factor * ssize * 2 <= cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) && (compptr->v_samp_factor * ssize * 2 <= cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) { ssize = ssize * 2; } compptr->DCT_scaled_size = ssize; } /* Recompute downsampled dimensions of components; * application needs to know these if using raw downsampled data. */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Size in samples, after IDCT scaling */ compptr->downsampled_width = (JDIMENSION) jdiv_round_up((long) cinfo->image_width * (long) (compptr->h_samp_factor * compptr->DCT_scaled_size), (long) (cinfo->max_h_samp_factor * DCTSIZE)); compptr->downsampled_height = (JDIMENSION) jdiv_round_up((long) cinfo->image_height * (long) (compptr->v_samp_factor * compptr->DCT_scaled_size), (long) (cinfo->max_v_samp_factor * DCTSIZE)); } #else /* !IDCT_SCALING_SUPPORTED */ /* Hardwire it to "no scaling" */ cinfo->output_width = cinfo->image_width; cinfo->output_height = cinfo->image_height; /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, * and has computed unscaled downsampled_width and downsampled_height. */ #endif /* IDCT_SCALING_SUPPORTED */ /* Report number of components in selected colorspace. */ /* Probably this should be in the color conversion module... */ switch (cinfo->out_color_space) { case JCS_GRAYSCALE: cinfo->out_color_components = 1; break; case JCS_RGB: #if RGB_PIXELSIZE != 3 cinfo->out_color_components = RGB_PIXELSIZE; break; #endif /* else share code with YCbCr */ case JCS_YCbCr: cinfo->out_color_components = 3; break; case JCS_CMYK: case JCS_YCCK: cinfo->out_color_components = 4; break; default: /* else must be same colorspace as in file */ cinfo->out_color_components = cinfo->num_components; break; } cinfo->output_components = (cinfo->quantize_colors ? 1 : cinfo->out_color_components); /* See if upsampler will want to emit more than one row at a time */ if (use_merged_upsample(cinfo)) cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; else cinfo->rec_outbuf_height = 1; } /* * Several decompression processes need to range-limit values to the range * 0..MAXJSAMPLE; the input value may fall somewhat outside this range * due to noise introduced by quantization, roundoff error, etc. These * processes are inner loops and need to be as fast as possible. On most * machines, particularly CPUs with pipelines or instruction prefetch, * a (subscript-check-less) C table lookup * x = sample_range_limit[x]; * is faster than explicit tests * if (x < 0) x = 0; * else if (x > MAXJSAMPLE) x = MAXJSAMPLE; * These processes all use a common table prepared by the routine below. * * For most steps we can mathematically guarantee that the initial value * of x is within MAXJSAMPLE+1 of the legal range, so a table running from * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial * limiting step (just after the IDCT), a wildly out-of-range value is * possible if the input data is corrupt. To avoid any chance of indexing * off the end of memory and getting a bad-pointer trap, we perform the * post-IDCT limiting thus: * x = range_limit[x & MASK]; * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit * samples. Under normal circumstances this is more than enough range and * a correct output will be generated; with bogus input data the mask will * cause wraparound, and we will safely generate a bogus-but-in-range output. * For the post-IDCT step, we want to convert the data from signed to unsigned * representation by adding CENTERJSAMPLE at the same time that we limit it. * So the post-IDCT limiting table ends up looking like this: * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), * 0,1,...,CENTERJSAMPLE-1 * Negative inputs select values from the upper half of the table after * masking. * * We can save some space by overlapping the start of the post-IDCT table * with the simpler range limiting table. The post-IDCT table begins at * sample_range_limit + CENTERJSAMPLE. * * Note that the table is allocated in near data space on PCs; it's small * enough and used often enough to justify this. */ LOCAL(void) prepare_range_limit_table (j_decompress_ptr cinfo) /* Allocate and fill in the sample_range_limit table */ { JSAMPLE * table; int i; table = (JSAMPLE *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE)); table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ cinfo->sample_range_limit = table; /* First segment of "simple" table: limit[x] = 0 for x < 0 */ MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); /* Main part of "simple" table: limit[x] = x */ for (i = 0; i <= MAXJSAMPLE; i++) table[i] = (JSAMPLE) i; table += CENTERJSAMPLE; /* Point to where post-IDCT table starts */ /* End of simple table, rest of first half of post-IDCT table */ for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) table[i] = MAXJSAMPLE; /* Second half of post-IDCT table */ MEMZERO(table + (2 * (MAXJSAMPLE+1)), (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE)); MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE)); } /* * Master selection of decompression modules. * This is done once at jpeg_start_decompress time. We determine * which modules will be used and give them appropriate initialization calls. * We also initialize the decompressor input side to begin consuming data. * * Since jpeg_read_header has finished, we know what is in the SOF * and (first) SOS markers. We also have all the application parameter * settings. */ LOCAL(void) master_selection (j_decompress_ptr cinfo) { my_master_ptr master = (my_master_ptr) cinfo->master; boolean use_c_buffer; long samplesperrow; JDIMENSION jd_samplesperrow; /* Initialize dimensions and other stuff */ jpeg_calc_output_dimensions(cinfo); prepare_range_limit_table(cinfo); /* Width of an output scanline must be representable as JDIMENSION. */ samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components; jd_samplesperrow = (JDIMENSION) samplesperrow; if ((long) jd_samplesperrow != samplesperrow) ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); /* Initialize my private state */ master->pass_number = 0; master->using_merged_upsample = use_merged_upsample(cinfo); /* Color quantizer selection */ master->quantizer_1pass = NULL; master->quantizer_2pass = NULL; /* No mode changes if not using buffered-image mode. */ if (! cinfo->quantize_colors || ! cinfo->buffered_image) { cinfo->enable_1pass_quant = FALSE; cinfo->enable_external_quant = FALSE; cinfo->enable_2pass_quant = FALSE; } if (cinfo->quantize_colors) { if (cinfo->raw_data_out) ERREXIT(cinfo, JERR_NOTIMPL); /* 2-pass quantizer only works in 3-component color space. */ if (cinfo->out_color_components != 3) { cinfo->enable_1pass_quant = TRUE; cinfo->enable_external_quant = FALSE; cinfo->enable_2pass_quant = FALSE; cinfo->colormap = NULL; } else if (cinfo->colormap != NULL) { cinfo->enable_external_quant = TRUE; } else if (cinfo->two_pass_quantize) { cinfo->enable_2pass_quant = TRUE; } else { cinfo->enable_1pass_quant = TRUE; } if (cinfo->enable_1pass_quant) { #ifdef QUANT_1PASS_SUPPORTED jinit_1pass_quantizer(cinfo); master->quantizer_1pass = cinfo->cquantize; #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } /* We use the 2-pass code to map to external colormaps. */ if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) { #ifdef QUANT_2PASS_SUPPORTED jinit_2pass_quantizer(cinfo); master->quantizer_2pass = cinfo->cquantize; #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } /* If both quantizers are initialized, the 2-pass one is left active; * this is necessary for starting with quantization to an external map. */ } /* Post-processing: in particular, color conversion first */ if (! cinfo->raw_data_out) { if (master->using_merged_upsample) { #ifdef UPSAMPLE_MERGING_SUPPORTED jinit_merged_upsampler(cinfo); /* does color conversion too */ #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else { jinit_color_deconverter(cinfo); jinit_upsampler(cinfo); } jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); } /* Inverse DCT */ jinit_inverse_dct(cinfo); /* Entropy decoding: either Huffman or arithmetic coding. */ if (cinfo->arith_code) { ERREXIT(cinfo, JERR_ARITH_NOTIMPL); } else { if (cinfo->progressive_mode) { #ifdef D_PROGRESSIVE_SUPPORTED jinit_phuff_decoder(cinfo); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else jinit_huff_decoder(cinfo); } /* Initialize principal buffer controllers. */ use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; jinit_d_coef_controller(cinfo, use_c_buffer); if (! cinfo->raw_data_out) jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); /* We can now tell the memory manager to allocate virtual arrays. */ (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); /* Initialize input side of decompressor to consume first scan. */ (*cinfo->inputctl->start_input_pass) (cinfo); #ifdef D_MULTISCAN_FILES_SUPPORTED /* If jpeg_start_decompress will read the whole file, initialize * progress monitoring appropriately. The input step is counted * as one pass. */ if (cinfo->progress != NULL && ! cinfo->buffered_image && cinfo->inputctl->has_multiple_scans) { int nscans; /* Estimate number of scans to set pass_limit. */ if (cinfo->progressive_mode) { /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ nscans = 2 + 3 * cinfo->num_components; } else { /* For a nonprogressive multiscan file, estimate 1 scan per component. */ nscans = cinfo->num_components; } cinfo->progress->pass_counter = 0L; cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; cinfo->progress->completed_passes = 0; cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); /* Count the input pass as done */ master->pass_number++; } #endif /* D_MULTISCAN_FILES_SUPPORTED */ } /* * Per-pass setup. * This is called at the beginning of each output pass. We determine which * modules will be active during this pass and give them appropriate * start_pass calls. We also set is_dummy_pass to indicate whether this * is a "real" output pass or a dummy pass for color quantization. * (In the latter case, jdapistd.c will crank the pass to completion.) */ METHODDEF(void) prepare_for_output_pass (j_decompress_ptr cinfo) { my_master_ptr master = (my_master_ptr) cinfo->master; if (master->pub.is_dummy_pass) { #ifdef QUANT_2PASS_SUPPORTED /* Final pass of 2-pass quantization */ master->pub.is_dummy_pass = FALSE; (*cinfo->cquantize->start_pass) (cinfo, FALSE); (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif /* QUANT_2PASS_SUPPORTED */ } else { if (cinfo->quantize_colors && cinfo->colormap == NULL) { /* Select new quantization method */ if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { cinfo->cquantize = master->quantizer_2pass; master->pub.is_dummy_pass = TRUE; } else if (cinfo->enable_1pass_quant) { cinfo->cquantize = master->quantizer_1pass; } else { ERREXIT(cinfo, JERR_MODE_CHANGE); } } (*cinfo->idct->start_pass) (cinfo); (*cinfo->coef->start_output_pass) (cinfo); if (! cinfo->raw_data_out) { if (! master->using_merged_upsample) (*cinfo->cconvert->start_pass) (cinfo); (*cinfo->upsample->start_pass) (cinfo); if (cinfo->quantize_colors) (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); (*cinfo->post->start_pass) (cinfo, (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); } } /* Set up progress monitor's pass info if present */ if (cinfo->progress != NULL) { cinfo->progress->completed_passes = master->pass_number; cinfo->progress->total_passes = master->pass_number + (master->pub.is_dummy_pass ? 2 : 1); /* In buffered-image mode, we assume one more output pass if EOI not * yet reached, but no more passes if EOI has been reached. */ if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); } } } /* * Finish up at end of an output pass. */ METHODDEF(void) finish_output_pass (j_decompress_ptr cinfo) { my_master_ptr master = (my_master_ptr) cinfo->master; if (cinfo->quantize_colors) (*cinfo->cquantize->finish_pass) (cinfo); master->pass_number++; } #ifdef D_MULTISCAN_FILES_SUPPORTED /* * Switch to a new external colormap between output passes. */ GLOBAL(void) jpeg_new_colormap (j_decompress_ptr cinfo) { my_master_ptr master = (my_master_ptr) cinfo->master; /* Prevent application from calling me at wrong times */ if (cinfo->global_state != DSTATE_BUFIMAGE) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (cinfo->quantize_colors && cinfo->enable_external_quant && cinfo->colormap != NULL) { /* Select 2-pass quantizer for external colormap use */ cinfo->cquantize = master->quantizer_2pass; /* Notify quantizer of colormap change */ (*cinfo->cquantize->new_color_map) (cinfo); master->pub.is_dummy_pass = FALSE; /* just in case */ } else ERREXIT(cinfo, JERR_MODE_CHANGE); } #endif /* D_MULTISCAN_FILES_SUPPORTED */ /* * Initialize master decompression control and select active modules. * This is performed at the start of jpeg_start_decompress. */ GLOBAL(void) jinit_master_decompress (j_decompress_ptr cinfo) { my_master_ptr master; master = (my_master_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_decomp_master)); cinfo->master = (struct jpeg_decomp_master *) master; master->pub.prepare_for_output_pass = prepare_for_output_pass; master->pub.finish_output_pass = finish_output_pass; master->pub.is_dummy_pass = FALSE; master_selection(cinfo); } htmldoc-1.8.27/jpeg/jmemnobs.c0100664000212600000240000000532406713354635014645 0ustar mikeuser/* * jmemnobs.c * * Copyright (C) 1992-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file provides a really simple implementation of the system- * dependent portion of the JPEG memory manager. This implementation * assumes that no backing-store files are needed: all required space * can be obtained from malloc(). * This is very portable in the sense that it'll compile on almost anything, * but you'd better have lots of main memory (or virtual memory) if you want * to process big images. * Note that the max_memory_to_use option is ignored by this implementation. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jmemsys.h" /* import the system-dependent declarations */ #ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ extern void * malloc JPP((size_t size)); extern void free JPP((void *ptr)); #endif /* * Memory allocation and freeing are controlled by the regular library * routines malloc() and free(). */ GLOBAL(void *) jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) { return (void *) malloc(sizeofobject); } GLOBAL(void) jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) { free(object); } /* * "Large" objects are treated the same as "small" ones. * NB: although we include FAR keywords in the routine declarations, * this file won't actually work in 80x86 small/medium model; at least, * you probably won't be able to process useful-size images in only 64KB. */ GLOBAL(void FAR *) jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) { return (void FAR *) malloc(sizeofobject); } GLOBAL(void) jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) { free(object); } /* * This routine computes the total memory space available for allocation. * Here we always say, "we got all you want bud!" */ GLOBAL(long) jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, long max_bytes_needed, long already_allocated) { return max_bytes_needed; } /* * Backing store (temporary file) management. * Since jpeg_mem_available always promised the moon, * this should never be called and we can just error out. */ GLOBAL(void) jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed) { ERREXIT(cinfo, JERR_NO_BACKING_STORE); } /* * These routines take care of any system-dependent initialization and * cleanup required. Here, there isn't any. */ GLOBAL(long) jpeg_mem_init (j_common_ptr cinfo) { return 0; /* just set max_memory_to_use to 0 */ } GLOBAL(void) jpeg_mem_term (j_common_ptr cinfo) { /* no work */ } htmldoc-1.8.27/jpeg/jidctfst.c0100664000212600000240000003156206713354635014650 0ustar mikeuser/* * jidctfst.c * * Copyright (C) 1994-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains a fast, not so accurate integer implementation of the * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine * must also perform dequantization of the input coefficients. * * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT * on each row (or vice versa, but it's more convenient to emit a row at * a time). Direct algorithms are also available, but they are much more * complex and seem not to be any faster when reduced to code. * * This implementation is based on Arai, Agui, and Nakajima's algorithm for * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in * Japanese, but the algorithm is described in the Pennebaker & Mitchell * JPEG textbook (see REFERENCES section in file README). The following code * is based directly on figure 4-8 in P&M. * While an 8-point DCT cannot be done in less than 11 multiplies, it is * possible to arrange the computation so that many of the multiplies are * simple scalings of the final outputs. These multiplies can then be * folded into the multiplications or divisions by the JPEG quantization * table entries. The AA&N method leaves only 5 multiplies and 29 adds * to be done in the DCT itself. * The primary disadvantage of this method is that with fixed-point math, * accuracy is lost due to imprecise representation of the scaled * quantization values. The smaller the quantization table entry, the less * precise the scaled value, so this implementation does worse with high- * quality-setting files than with low-quality ones. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef DCT_IFAST_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* Scaling decisions are generally the same as in the LL&M algorithm; * see jidctint.c for more details. However, we choose to descale * (right shift) multiplication products as soon as they are formed, * rather than carrying additional fractional bits into subsequent additions. * This compromises accuracy slightly, but it lets us save a few shifts. * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) * everywhere except in the multiplications proper; this saves a good deal * of work on 16-bit-int machines. * * The dequantized coefficients are not integers because the AA&N scaling * factors have been incorporated. We represent them scaled up by PASS1_BITS, * so that the first and second IDCT rounds have the same input scaling. * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to * avoid a descaling shift; this compromises accuracy rather drastically * for small quantization table entries, but it saves a lot of shifts. * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway, * so we use a much larger scaling factor to preserve accuracy. * * A final compromise is to represent the multiplicative constants to only * 8 fractional bits, rather than 13. This saves some shifting work on some * machines, and may also reduce the cost of multiplication (since there * are fewer one-bits in the constants). */ #if BITS_IN_JSAMPLE == 8 #define CONST_BITS 8 #define PASS1_BITS 2 #else #define CONST_BITS 8 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */ #endif /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus * causing a lot of useless floating-point operations at run time. * To get around this we use the following pre-calculated constants. * If you change CONST_BITS you may want to add appropriate values. * (With a reasonable C compiler, you can just rely on the FIX() macro...) */ #if CONST_BITS == 8 #define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */ #define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */ #define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */ #define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */ #else #define FIX_1_082392200 FIX(1.082392200) #define FIX_1_414213562 FIX(1.414213562) #define FIX_1_847759065 FIX(1.847759065) #define FIX_2_613125930 FIX(2.613125930) #endif /* We can gain a little more speed, with a further compromise in accuracy, * by omitting the addition in a descaling shift. This yields an incorrectly * rounded result half the time... */ #ifndef USE_ACCURATE_ROUNDING #undef DESCALE #define DESCALE(x,n) RIGHT_SHIFT(x, n) #endif /* Multiply a DCTELEM variable by an INT32 constant, and immediately * descale to yield a DCTELEM result. */ #define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) /* Dequantize a coefficient by multiplying it by the multiplier-table * entry; produce a DCTELEM result. For 8-bit data a 16x16->16 * multiplication will do. For 12-bit data, the multiplier table is * declared INT32, so a 32-bit multiply will be used. */ #if BITS_IN_JSAMPLE == 8 #define DEQUANTIZE(coef,quantval) (((IFAST_MULT_TYPE) (coef)) * (quantval)) #else #define DEQUANTIZE(coef,quantval) \ DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS) #endif /* Like DESCALE, but applies to a DCTELEM and produces an int. * We assume that int right shift is unsigned if INT32 right shift is. */ #ifdef RIGHT_SHIFT_IS_UNSIGNED #define ISHIFT_TEMPS DCTELEM ishift_temp; #if BITS_IN_JSAMPLE == 8 #define DCTELEMBITS 16 /* DCTELEM may be 16 or 32 bits */ #else #define DCTELEMBITS 32 /* DCTELEM must be 32 bits */ #endif #define IRIGHT_SHIFT(x,shft) \ ((ishift_temp = (x)) < 0 ? \ (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \ (ishift_temp >> (shft))) #else #define ISHIFT_TEMPS #define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) #endif #ifdef USE_ACCURATE_ROUNDING #define IDESCALE(x,n) ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n)) #else #define IDESCALE(x,n) ((int) IRIGHT_SHIFT(x, n)) #endif /* * Perform dequantization and inverse DCT on one block of coefficients. */ GLOBAL(void) jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; DCTELEM tmp10, tmp11, tmp12, tmp13; DCTELEM z5, z10, z11, z12, z13; JCOEFPTR inptr; IFAST_MULT_TYPE * quantptr; int * wsptr; JSAMPROW outptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); int ctr; int workspace[DCTSIZE2]; /* buffers data between passes */ SHIFT_TEMPS /* for DESCALE */ ISHIFT_TEMPS /* for IDESCALE */ /* Pass 1: process columns from input, store into work array. */ inptr = coef_block; quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; wsptr = workspace; for (ctr = DCTSIZE; ctr > 0; ctr--) { /* Due to quantization, we will usually find that many of the input * coefficients are zero, especially the AC terms. We can exploit this * by short-circuiting the IDCT calculation for any column in which all * the AC terms are zero. In that case each output is equal to the * DC coefficient (with scale factor as needed). * With typical images and quantization tables, half or more of the * column DCT calculations can be simplified this way. */ if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { /* AC terms all zero */ int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); wsptr[DCTSIZE*0] = dcval; wsptr[DCTSIZE*1] = dcval; wsptr[DCTSIZE*2] = dcval; wsptr[DCTSIZE*3] = dcval; wsptr[DCTSIZE*4] = dcval; wsptr[DCTSIZE*5] = dcval; wsptr[DCTSIZE*6] = dcval; wsptr[DCTSIZE*7] = dcval; inptr++; /* advance pointers to next column */ quantptr++; wsptr++; continue; } /* Even part */ tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); tmp10 = tmp0 + tmp2; /* phase 3 */ tmp11 = tmp0 - tmp2; tmp13 = tmp1 + tmp3; /* phases 5-3 */ tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ tmp0 = tmp10 + tmp13; /* phase 2 */ tmp3 = tmp10 - tmp13; tmp1 = tmp11 + tmp12; tmp2 = tmp11 - tmp12; /* Odd part */ tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); z13 = tmp6 + tmp5; /* phase 6 */ z10 = tmp6 - tmp5; z11 = tmp4 + tmp7; z12 = tmp4 - tmp7; tmp7 = z11 + z13; /* phase 5 */ tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ tmp6 = tmp12 - tmp7; /* phase 2 */ tmp5 = tmp11 - tmp6; tmp4 = tmp10 + tmp5; wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5); wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); inptr++; /* advance pointers to next column */ quantptr++; wsptr++; } /* Pass 2: process rows from work array, store into output array. */ /* Note that we must descale the results by a factor of 8 == 2**3, */ /* and also undo the PASS1_BITS scaling. */ wsptr = workspace; for (ctr = 0; ctr < DCTSIZE; ctr++) { outptr = output_buf[ctr] + output_col; /* Rows of zeroes can be exploited in the same way as we did with columns. * However, the column calculation has created many nonzero AC terms, so * the simplification applies less often (typically 5% to 10% of the time). * On machines with very fast multiplication, it's possible that the * test takes more time than it's worth. In that case this section * may be commented out. */ #ifndef NO_ZERO_ROW_TEST if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { /* AC terms all zero */ JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) & RANGE_MASK]; outptr[0] = dcval; outptr[1] = dcval; outptr[2] = dcval; outptr[3] = dcval; outptr[4] = dcval; outptr[5] = dcval; outptr[6] = dcval; outptr[7] = dcval; wsptr += DCTSIZE; /* advance pointer to next row */ continue; } #endif /* Even part */ tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) - tmp13; tmp0 = tmp10 + tmp13; tmp3 = tmp10 - tmp13; tmp1 = tmp11 + tmp12; tmp2 = tmp11 - tmp12; /* Odd part */ z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; tmp7 = z11 + z13; /* phase 5 */ tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ tmp6 = tmp12 - tmp7; /* phase 2 */ tmp5 = tmp11 - tmp6; tmp4 = tmp10 + tmp5; /* Final output stage: scale down by a factor of 8 and range-limit */ outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) & RANGE_MASK]; outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) & RANGE_MASK]; outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) & RANGE_MASK]; outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) & RANGE_MASK]; outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) & RANGE_MASK]; outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) & RANGE_MASK]; outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) & RANGE_MASK]; outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) & RANGE_MASK]; wsptr += DCTSIZE; /* advance pointer to next row */ } } #endif /* DCT_IFAST_SUPPORTED */ htmldoc-1.8.27/jpeg/jdhuff.h0100664000212600000240000001771206713354635014312 0ustar mikeuser/* * jdhuff.h * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains declarations for Huffman entropy decoding routines * that are shared between the sequential decoder (jdhuff.c) and the * progressive decoder (jdphuff.c). No other modules need to see these. */ /* Short forms of external names for systems with brain-damaged linkers. */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jpeg_make_d_derived_tbl jMkDDerived #define jpeg_fill_bit_buffer jFilBitBuf #define jpeg_huff_decode jHufDecode #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* Derived data constructed for each Huffman table */ #define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */ typedef struct { /* Basic tables: (element [0] of each array is unused) */ INT32 maxcode[18]; /* largest code of length k (-1 if none) */ /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */ INT32 valoffset[17]; /* huffval[] offset for codes of length k */ /* valoffset[k] = huffval[] index of 1st symbol of code length k, less * the smallest code of length k; so given a code of length k, the * corresponding symbol is huffval[code + valoffset[k]] */ /* Link to public Huffman table (needed only in jpeg_huff_decode) */ JHUFF_TBL *pub; /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of * the input data stream. If the next Huffman code is no more * than HUFF_LOOKAHEAD bits long, we can obtain its length and * the corresponding symbol directly from these tables. */ int look_nbits[1< 32 bits on your machine, and shifting/masking longs is * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE * appropriately should be a win. Unfortunately we can't define the size * with something like #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8) * because not all machines measure sizeof in 8-bit bytes. */ typedef struct { /* Bitreading state saved across MCUs */ bit_buf_type get_buffer; /* current bit-extraction buffer */ int bits_left; /* # of unused bits in it */ } bitread_perm_state; typedef struct { /* Bitreading working state within an MCU */ /* Current data source location */ /* We need a copy, rather than munging the original, in case of suspension */ const JOCTET * next_input_byte; /* => next byte to read from source */ size_t bytes_in_buffer; /* # of bytes remaining in source buffer */ /* Bit input buffer --- note these values are kept in register variables, * not in this struct, inside the inner loops. */ bit_buf_type get_buffer; /* current bit-extraction buffer */ int bits_left; /* # of unused bits in it */ /* Pointer needed by jpeg_fill_bit_buffer. */ j_decompress_ptr cinfo; /* back link to decompress master record */ } bitread_working_state; /* Macros to declare and load/save bitread local variables. */ #define BITREAD_STATE_VARS \ register bit_buf_type get_buffer; \ register int bits_left; \ bitread_working_state br_state #define BITREAD_LOAD_STATE(cinfop,permstate) \ br_state.cinfo = cinfop; \ br_state.next_input_byte = cinfop->src->next_input_byte; \ br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \ get_buffer = permstate.get_buffer; \ bits_left = permstate.bits_left; #define BITREAD_SAVE_STATE(cinfop,permstate) \ cinfop->src->next_input_byte = br_state.next_input_byte; \ cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \ permstate.get_buffer = get_buffer; \ permstate.bits_left = bits_left /* * These macros provide the in-line portion of bit fetching. * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer * before using GET_BITS, PEEK_BITS, or DROP_BITS. * The variables get_buffer and bits_left are assumed to be locals, * but the state struct might not be (jpeg_huff_decode needs this). * CHECK_BIT_BUFFER(state,n,action); * Ensure there are N bits in get_buffer; if suspend, take action. * val = GET_BITS(n); * Fetch next N bits. * val = PEEK_BITS(n); * Fetch next N bits without removing them from the buffer. * DROP_BITS(n); * Discard next N bits. * The value N should be a simple variable, not an expression, because it * is evaluated multiple times. */ #define CHECK_BIT_BUFFER(state,nbits,action) \ { if (bits_left < (nbits)) { \ if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \ { action; } \ get_buffer = (state).get_buffer; bits_left = (state).bits_left; } } #define GET_BITS(nbits) \ (((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1)) #define PEEK_BITS(nbits) \ (((int) (get_buffer >> (bits_left - (nbits)))) & ((1<<(nbits))-1)) #define DROP_BITS(nbits) \ (bits_left -= (nbits)) /* Load up the bit buffer to a depth of at least nbits */ EXTERN(boolean) jpeg_fill_bit_buffer JPP((bitread_working_state * state, register bit_buf_type get_buffer, register int bits_left, int nbits)); /* * Code for extracting next Huffman-coded symbol from input bit stream. * Again, this is time-critical and we make the main paths be macros. * * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits * without looping. Usually, more than 95% of the Huffman codes will be 8 * or fewer bits long. The few overlength codes are handled with a loop, * which need not be inline code. * * Notes about the HUFF_DECODE macro: * 1. Near the end of the data segment, we may fail to get enough bits * for a lookahead. In that case, we do it the hard way. * 2. If the lookahead table contains no entry, the next code must be * more than HUFF_LOOKAHEAD bits long. * 3. jpeg_huff_decode returns -1 if forced to suspend. */ #define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \ { register int nb, look; \ if (bits_left < HUFF_LOOKAHEAD) { \ if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \ get_buffer = state.get_buffer; bits_left = state.bits_left; \ if (bits_left < HUFF_LOOKAHEAD) { \ nb = 1; goto slowlabel; \ } \ } \ look = PEEK_BITS(HUFF_LOOKAHEAD); \ if ((nb = htbl->look_nbits[look]) != 0) { \ DROP_BITS(nb); \ result = htbl->look_sym[look]; \ } else { \ nb = HUFF_LOOKAHEAD+1; \ slowlabel: \ if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \ { failaction; } \ get_buffer = state.get_buffer; bits_left = state.bits_left; \ } \ } /* Out-of-line case for Huffman code fetching */ EXTERN(int) jpeg_huff_decode JPP((bitread_working_state * state, register bit_buf_type get_buffer, register int bits_left, d_derived_tbl * htbl, int min_bits)); htmldoc-1.8.27/jpeg/jcinit.c0100664000212600000240000000445506713354635014317 0ustar mikeuser/* * jcinit.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains initialization logic for the JPEG compressor. * This routine is in charge of selecting the modules to be executed and * making an initialization call to each one. * * Logically, this code belongs in jcmaster.c. It's split out because * linking this routine implies linking the entire compression library. * For a transcoding-only application, we want to be able to use jcmaster.c * without linking in the whole library. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * Master selection of compression modules. * This is done once at the start of processing an image. We determine * which modules will be used and give them appropriate initialization calls. */ GLOBAL(void) jinit_compress_master (j_compress_ptr cinfo) { /* Initialize master control (includes parameter checking/processing) */ jinit_c_master_control(cinfo, FALSE /* full compression */); /* Preprocessing */ if (! cinfo->raw_data_in) { jinit_color_converter(cinfo); jinit_downsampler(cinfo); jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */); } /* Forward DCT */ jinit_forward_dct(cinfo); /* Entropy encoding: either Huffman or arithmetic coding. */ if (cinfo->arith_code) { ERREXIT(cinfo, JERR_ARITH_NOTIMPL); } else { if (cinfo->progressive_mode) { #ifdef C_PROGRESSIVE_SUPPORTED jinit_phuff_encoder(cinfo); #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else jinit_huff_encoder(cinfo); } /* Need a full-image coefficient buffer in any multi-pass mode. */ jinit_c_coef_controller(cinfo, (boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding)); jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */); jinit_marker_writer(cinfo); /* We can now tell the memory manager to allocate virtual arrays. */ (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); /* Write the datastream header (SOI) immediately. * Frame and scan headers are postponed till later. * This lets application insert special markers after the SOI. */ (*cinfo->marker->write_file_header) (cinfo); } htmldoc-1.8.27/jpeg/jquant2.c0100664000212600000240000013645506713354635014431 0ustar mikeuser/* * jquant2.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains 2-pass color quantization (color mapping) routines. * These routines provide selection of a custom color map for an image, * followed by mapping of the image to that color map, with optional * Floyd-Steinberg dithering. * It is also possible to use just the second pass to map to an arbitrary * externally-given color map. * * Note: ordered dithering is not supported, since there isn't any fast * way to compute intercolor distances; it's unclear that ordered dither's * fundamental assumptions even hold with an irregularly spaced color map. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #ifdef QUANT_2PASS_SUPPORTED /* * This module implements the well-known Heckbert paradigm for color * quantization. Most of the ideas used here can be traced back to * Heckbert's seminal paper * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display", * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304. * * In the first pass over the image, we accumulate a histogram showing the * usage count of each possible color. To keep the histogram to a reasonable * size, we reduce the precision of the input; typical practice is to retain * 5 or 6 bits per color, so that 8 or 4 different input values are counted * in the same histogram cell. * * Next, the color-selection step begins with a box representing the whole * color space, and repeatedly splits the "largest" remaining box until we * have as many boxes as desired colors. Then the mean color in each * remaining box becomes one of the possible output colors. * * The second pass over the image maps each input pixel to the closest output * color (optionally after applying a Floyd-Steinberg dithering correction). * This mapping is logically trivial, but making it go fast enough requires * considerable care. * * Heckbert-style quantizers vary a good deal in their policies for choosing * the "largest" box and deciding where to cut it. The particular policies * used here have proved out well in experimental comparisons, but better ones * may yet be found. * * In earlier versions of the IJG code, this module quantized in YCbCr color * space, processing the raw upsampled data without a color conversion step. * This allowed the color conversion math to be done only once per colormap * entry, not once per pixel. However, that optimization precluded other * useful optimizations (such as merging color conversion with upsampling) * and it also interfered with desired capabilities such as quantizing to an * externally-supplied colormap. We have therefore abandoned that approach. * The present code works in the post-conversion color space, typically RGB. * * To improve the visual quality of the results, we actually work in scaled * RGB space, giving G distances more weight than R, and R in turn more than * B. To do everything in integer math, we must use integer scale factors. * The 2/3/1 scale factors used here correspond loosely to the relative * weights of the colors in the NTSC grayscale equation. * If you want to use this code to quantize a non-RGB color space, you'll * probably need to change these scale factors. */ #define R_SCALE 2 /* scale R distances by this much */ #define G_SCALE 3 /* scale G distances by this much */ #define B_SCALE 1 /* and B by this much */ /* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B * and B,G,R orders. If you define some other weird order in jmorecfg.h, * you'll get compile errors until you extend this logic. In that case * you'll probably want to tweak the histogram sizes too. */ #if RGB_RED == 0 #define C0_SCALE R_SCALE #endif #if RGB_BLUE == 0 #define C0_SCALE B_SCALE #endif #if RGB_GREEN == 1 #define C1_SCALE G_SCALE #endif #if RGB_RED == 2 #define C2_SCALE R_SCALE #endif #if RGB_BLUE == 2 #define C2_SCALE B_SCALE #endif /* * First we have the histogram data structure and routines for creating it. * * The number of bits of precision can be adjusted by changing these symbols. * We recommend keeping 6 bits for G and 5 each for R and B. * If you have plenty of memory and cycles, 6 bits all around gives marginally * better results; if you are short of memory, 5 bits all around will save * some space but degrade the results. * To maintain a fully accurate histogram, we'd need to allocate a "long" * (preferably unsigned long) for each cell. In practice this is overkill; * we can get by with 16 bits per cell. Few of the cell counts will overflow, * and clamping those that do overflow to the maximum value will give close- * enough results. This reduces the recommended histogram size from 256Kb * to 128Kb, which is a useful savings on PC-class machines. * (In the second pass the histogram space is re-used for pixel mapping data; * in that capacity, each cell must be able to store zero to the number of * desired colors. 16 bits/cell is plenty for that too.) * Since the JPEG code is intended to run in small memory model on 80x86 * machines, we can't just allocate the histogram in one chunk. Instead * of a true 3-D array, we use a row of pointers to 2-D arrays. Each * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that * on 80x86 machines, the pointer row is in near memory but the actual * arrays are in far memory (same arrangement as we use for image arrays). */ #define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */ /* These will do the right thing for either R,G,B or B,G,R color order, * but you may not like the results for other color orders. */ #define HIST_C0_BITS 5 /* bits of precision in R/B histogram */ #define HIST_C1_BITS 6 /* bits of precision in G histogram */ #define HIST_C2_BITS 5 /* bits of precision in B/R histogram */ /* Number of elements along histogram axes. */ #define HIST_C0_ELEMS (1<cquantize; register JSAMPROW ptr; register histptr histp; register hist3d histogram = cquantize->histogram; int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; for (row = 0; row < num_rows; row++) { ptr = input_buf[row]; for (col = width; col > 0; col--) { /* get pixel value and index into the histogram */ histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] [GETJSAMPLE(ptr[1]) >> C1_SHIFT] [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; /* increment, check for overflow and undo increment if so. */ if (++(*histp) <= 0) (*histp)--; ptr += 3; } } } /* * Next we have the really interesting routines: selection of a colormap * given the completed histogram. * These routines work with a list of "boxes", each representing a rectangular * subset of the input color space (to histogram precision). */ typedef struct { /* The bounds of the box (inclusive); expressed as histogram indexes */ int c0min, c0max; int c1min, c1max; int c2min, c2max; /* The volume (actually 2-norm) of the box */ INT32 volume; /* The number of nonzero histogram cells within this box */ long colorcount; } box; typedef box * boxptr; LOCAL(boxptr) find_biggest_color_pop (boxptr boxlist, int numboxes) /* Find the splittable box with the largest color population */ /* Returns NULL if no splittable boxes remain */ { register boxptr boxp; register int i; register long maxc = 0; boxptr which = NULL; for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { if (boxp->colorcount > maxc && boxp->volume > 0) { which = boxp; maxc = boxp->colorcount; } } return which; } LOCAL(boxptr) find_biggest_volume (boxptr boxlist, int numboxes) /* Find the splittable box with the largest (scaled) volume */ /* Returns NULL if no splittable boxes remain */ { register boxptr boxp; register int i; register INT32 maxv = 0; boxptr which = NULL; for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { if (boxp->volume > maxv) { which = boxp; maxv = boxp->volume; } } return which; } LOCAL(void) update_box (j_decompress_ptr cinfo, boxptr boxp) /* Shrink the min/max bounds of a box to enclose only nonzero elements, */ /* and recompute its volume and population */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; hist3d histogram = cquantize->histogram; histptr histp; int c0,c1,c2; int c0min,c0max,c1min,c1max,c2min,c2max; INT32 dist0,dist1,dist2; long ccount; c0min = boxp->c0min; c0max = boxp->c0max; c1min = boxp->c1min; c1max = boxp->c1max; c2min = boxp->c2min; c2max = boxp->c2max; if (c0max > c0min) for (c0 = c0min; c0 <= c0max; c0++) for (c1 = c1min; c1 <= c1max; c1++) { histp = & histogram[c0][c1][c2min]; for (c2 = c2min; c2 <= c2max; c2++) if (*histp++ != 0) { boxp->c0min = c0min = c0; goto have_c0min; } } have_c0min: if (c0max > c0min) for (c0 = c0max; c0 >= c0min; c0--) for (c1 = c1min; c1 <= c1max; c1++) { histp = & histogram[c0][c1][c2min]; for (c2 = c2min; c2 <= c2max; c2++) if (*histp++ != 0) { boxp->c0max = c0max = c0; goto have_c0max; } } have_c0max: if (c1max > c1min) for (c1 = c1min; c1 <= c1max; c1++) for (c0 = c0min; c0 <= c0max; c0++) { histp = & histogram[c0][c1][c2min]; for (c2 = c2min; c2 <= c2max; c2++) if (*histp++ != 0) { boxp->c1min = c1min = c1; goto have_c1min; } } have_c1min: if (c1max > c1min) for (c1 = c1max; c1 >= c1min; c1--) for (c0 = c0min; c0 <= c0max; c0++) { histp = & histogram[c0][c1][c2min]; for (c2 = c2min; c2 <= c2max; c2++) if (*histp++ != 0) { boxp->c1max = c1max = c1; goto have_c1max; } } have_c1max: if (c2max > c2min) for (c2 = c2min; c2 <= c2max; c2++) for (c0 = c0min; c0 <= c0max; c0++) { histp = & histogram[c0][c1min][c2]; for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) if (*histp != 0) { boxp->c2min = c2min = c2; goto have_c2min; } } have_c2min: if (c2max > c2min) for (c2 = c2max; c2 >= c2min; c2--) for (c0 = c0min; c0 <= c0max; c0++) { histp = & histogram[c0][c1min][c2]; for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) if (*histp != 0) { boxp->c2max = c2max = c2; goto have_c2max; } } have_c2max: /* Update box volume. * We use 2-norm rather than real volume here; this biases the method * against making long narrow boxes, and it has the side benefit that * a box is splittable iff norm > 0. * Since the differences are expressed in histogram-cell units, * we have to shift back to JSAMPLE units to get consistent distances; * after which, we scale according to the selected distance scale factors. */ dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; /* Now scan remaining volume of box and compute population */ ccount = 0; for (c0 = c0min; c0 <= c0max; c0++) for (c1 = c1min; c1 <= c1max; c1++) { histp = & histogram[c0][c1][c2min]; for (c2 = c2min; c2 <= c2max; c2++, histp++) if (*histp != 0) { ccount++; } } boxp->colorcount = ccount; } LOCAL(int) median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes, int desired_colors) /* Repeatedly select and split the largest box until we have enough boxes */ { int n,lb; int c0,c1,c2,cmax; register boxptr b1,b2; while (numboxes < desired_colors) { /* Select box to split. * Current algorithm: by population for first half, then by volume. */ if (numboxes*2 <= desired_colors) { b1 = find_biggest_color_pop(boxlist, numboxes); } else { b1 = find_biggest_volume(boxlist, numboxes); } if (b1 == NULL) /* no splittable boxes left! */ break; b2 = &boxlist[numboxes]; /* where new box will go */ /* Copy the color bounds to the new box. */ b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max; b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min; /* Choose which axis to split the box on. * Current algorithm: longest scaled axis. * See notes in update_box about scaling distances. */ c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; /* We want to break any ties in favor of green, then red, blue last. * This code does the right thing for R,G,B or B,G,R color orders only. */ #if RGB_RED == 0 cmax = c1; n = 1; if (c0 > cmax) { cmax = c0; n = 0; } if (c2 > cmax) { n = 2; } #else cmax = c1; n = 1; if (c2 > cmax) { cmax = c2; n = 2; } if (c0 > cmax) { n = 0; } #endif /* Choose split point along selected axis, and update box bounds. * Current algorithm: split at halfway point. * (Since the box has been shrunk to minimum volume, * any split will produce two nonempty subboxes.) * Note that lb value is max for lower box, so must be < old max. */ switch (n) { case 0: lb = (b1->c0max + b1->c0min) / 2; b1->c0max = lb; b2->c0min = lb+1; break; case 1: lb = (b1->c1max + b1->c1min) / 2; b1->c1max = lb; b2->c1min = lb+1; break; case 2: lb = (b1->c2max + b1->c2min) / 2; b1->c2max = lb; b2->c2min = lb+1; break; } /* Update stats for boxes */ update_box(cinfo, b1); update_box(cinfo, b2); numboxes++; } return numboxes; } LOCAL(void) compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor) /* Compute representative color for a box, put it in colormap[icolor] */ { /* Current algorithm: mean weighted by pixels (not colors) */ /* Note it is important to get the rounding correct! */ my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; hist3d histogram = cquantize->histogram; histptr histp; int c0,c1,c2; int c0min,c0max,c1min,c1max,c2min,c2max; long count; long total = 0; long c0total = 0; long c1total = 0; long c2total = 0; c0min = boxp->c0min; c0max = boxp->c0max; c1min = boxp->c1min; c1max = boxp->c1max; c2min = boxp->c2min; c2max = boxp->c2max; for (c0 = c0min; c0 <= c0max; c0++) for (c1 = c1min; c1 <= c1max; c1++) { histp = & histogram[c0][c1][c2min]; for (c2 = c2min; c2 <= c2max; c2++) { if ((count = *histp++) != 0) { total += count; c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; c1total += ((c1 << C1_SHIFT) + ((1<>1)) * count; c2total += ((c2 << C2_SHIFT) + ((1<>1)) * count; } } } cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); } LOCAL(void) select_colors (j_decompress_ptr cinfo, int desired_colors) /* Master routine for color selection */ { boxptr boxlist; int numboxes; int i; /* Allocate workspace for box list */ boxlist = (boxptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box)); /* Initialize one box containing whole space */ numboxes = 1; boxlist[0].c0min = 0; boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; boxlist[0].c1min = 0; boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT; boxlist[0].c2min = 0; boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT; /* Shrink it to actually-used volume and set its statistics */ update_box(cinfo, & boxlist[0]); /* Perform median-cut to produce final box list */ numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors); /* Compute the representative color for each box, fill colormap */ for (i = 0; i < numboxes; i++) compute_color(cinfo, & boxlist[i], i); cinfo->actual_number_of_colors = numboxes; TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); } /* * These routines are concerned with the time-critical task of mapping input * colors to the nearest color in the selected colormap. * * We re-use the histogram space as an "inverse color map", essentially a * cache for the results of nearest-color searches. All colors within a * histogram cell will be mapped to the same colormap entry, namely the one * closest to the cell's center. This may not be quite the closest entry to * the actual input color, but it's almost as good. A zero in the cache * indicates we haven't found the nearest color for that cell yet; the array * is cleared to zeroes before starting the mapping pass. When we find the * nearest color for a cell, its colormap index plus one is recorded in the * cache for future use. The pass2 scanning routines call fill_inverse_cmap * when they need to use an unfilled entry in the cache. * * Our method of efficiently finding nearest colors is based on the "locally * sorted search" idea described by Heckbert and on the incremental distance * calculation described by Spencer W. Thomas in chapter III.1 of Graphics * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that * the distances from a given colormap entry to each cell of the histogram can * be computed quickly using an incremental method: the differences between * distances to adjacent cells themselves differ by a constant. This allows a * fairly fast implementation of the "brute force" approach of computing the * distance from every colormap entry to every histogram cell. Unfortunately, * it needs a work array to hold the best-distance-so-far for each histogram * cell (because the inner loop has to be over cells, not colormap entries). * The work array elements have to be INT32s, so the work array would need * 256Kb at our recommended precision. This is not feasible in DOS machines. * * To get around these problems, we apply Thomas' method to compute the * nearest colors for only the cells within a small subbox of the histogram. * The work array need be only as big as the subbox, so the memory usage * problem is solved. Furthermore, we need not fill subboxes that are never * referenced in pass2; many images use only part of the color gamut, so a * fair amount of work is saved. An additional advantage of this * approach is that we can apply Heckbert's locality criterion to quickly * eliminate colormap entries that are far away from the subbox; typically * three-fourths of the colormap entries are rejected by Heckbert's criterion, * and we need not compute their distances to individual cells in the subbox. * The speed of this approach is heavily influenced by the subbox size: too * small means too much overhead, too big loses because Heckbert's criterion * can't eliminate as many colormap entries. Empirically the best subbox * size seems to be about 1/512th of the histogram (1/8th in each direction). * * Thomas' article also describes a refined method which is asymptotically * faster than the brute-force method, but it is also far more complex and * cannot efficiently be applied to small subboxes. It is therefore not * useful for programs intended to be portable to DOS machines. On machines * with plenty of memory, filling the whole histogram in one shot with Thomas' * refined method might be faster than the present code --- but then again, * it might not be any faster, and it's certainly more complicated. */ /* log2(histogram cells in update box) for each axis; this can be adjusted */ #define BOX_C0_LOG (HIST_C0_BITS-3) #define BOX_C1_LOG (HIST_C1_BITS-3) #define BOX_C2_LOG (HIST_C2_BITS-3) #define BOX_C0_ELEMS (1<actual_number_of_colors; int maxc0, maxc1, maxc2; int centerc0, centerc1, centerc2; int i, x, ncolors; INT32 minmaxdist, min_dist, max_dist, tdist; INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */ /* Compute true coordinates of update box's upper corner and center. * Actually we compute the coordinates of the center of the upper-corner * histogram cell, which are the upper bounds of the volume we care about. * Note that since ">>" rounds down, the "center" values may be closer to * min than to max; hence comparisons to them must be "<=", not "<". */ maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT)); centerc0 = (minc0 + maxc0) >> 1; maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT)); centerc1 = (minc1 + maxc1) >> 1; maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT)); centerc2 = (minc2 + maxc2) >> 1; /* For each color in colormap, find: * 1. its minimum squared-distance to any point in the update box * (zero if color is within update box); * 2. its maximum squared-distance to any point in the update box. * Both of these can be found by considering only the corners of the box. * We save the minimum distance for each color in mindist[]; * only the smallest maximum distance is of interest. */ minmaxdist = 0x7FFFFFFFL; for (i = 0; i < numcolors; i++) { /* We compute the squared-c0-distance term, then add in the other two. */ x = GETJSAMPLE(cinfo->colormap[0][i]); if (x < minc0) { tdist = (x - minc0) * C0_SCALE; min_dist = tdist*tdist; tdist = (x - maxc0) * C0_SCALE; max_dist = tdist*tdist; } else if (x > maxc0) { tdist = (x - maxc0) * C0_SCALE; min_dist = tdist*tdist; tdist = (x - minc0) * C0_SCALE; max_dist = tdist*tdist; } else { /* within cell range so no contribution to min_dist */ min_dist = 0; if (x <= centerc0) { tdist = (x - maxc0) * C0_SCALE; max_dist = tdist*tdist; } else { tdist = (x - minc0) * C0_SCALE; max_dist = tdist*tdist; } } x = GETJSAMPLE(cinfo->colormap[1][i]); if (x < minc1) { tdist = (x - minc1) * C1_SCALE; min_dist += tdist*tdist; tdist = (x - maxc1) * C1_SCALE; max_dist += tdist*tdist; } else if (x > maxc1) { tdist = (x - maxc1) * C1_SCALE; min_dist += tdist*tdist; tdist = (x - minc1) * C1_SCALE; max_dist += tdist*tdist; } else { /* within cell range so no contribution to min_dist */ if (x <= centerc1) { tdist = (x - maxc1) * C1_SCALE; max_dist += tdist*tdist; } else { tdist = (x - minc1) * C1_SCALE; max_dist += tdist*tdist; } } x = GETJSAMPLE(cinfo->colormap[2][i]); if (x < minc2) { tdist = (x - minc2) * C2_SCALE; min_dist += tdist*tdist; tdist = (x - maxc2) * C2_SCALE; max_dist += tdist*tdist; } else if (x > maxc2) { tdist = (x - maxc2) * C2_SCALE; min_dist += tdist*tdist; tdist = (x - minc2) * C2_SCALE; max_dist += tdist*tdist; } else { /* within cell range so no contribution to min_dist */ if (x <= centerc2) { tdist = (x - maxc2) * C2_SCALE; max_dist += tdist*tdist; } else { tdist = (x - minc2) * C2_SCALE; max_dist += tdist*tdist; } } mindist[i] = min_dist; /* save away the results */ if (max_dist < minmaxdist) minmaxdist = max_dist; } /* Now we know that no cell in the update box is more than minmaxdist * away from some colormap entry. Therefore, only colors that are * within minmaxdist of some part of the box need be considered. */ ncolors = 0; for (i = 0; i < numcolors; i++) { if (mindist[i] <= minmaxdist) colorlist[ncolors++] = (JSAMPLE) i; } return ncolors; } LOCAL(void) find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2, int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[]) /* Find the closest colormap entry for each cell in the update box, * given the list of candidate colors prepared by find_nearby_colors. * Return the indexes of the closest entries in the bestcolor[] array. * This routine uses Thomas' incremental distance calculation method to * find the distance from a colormap entry to successive cells in the box. */ { int ic0, ic1, ic2; int i, icolor; register INT32 * bptr; /* pointer into bestdist[] array */ JSAMPLE * cptr; /* pointer into bestcolor[] array */ INT32 dist0, dist1; /* initial distance values */ register INT32 dist2; /* current distance in inner loop */ INT32 xx0, xx1; /* distance increments */ register INT32 xx2; INT32 inc0, inc1, inc2; /* initial values for increments */ /* This array holds the distance to the nearest-so-far color for each cell */ INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; /* Initialize best-distance for each cell of the update box */ bptr = bestdist; for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) *bptr++ = 0x7FFFFFFFL; /* For each color selected by find_nearby_colors, * compute its distance to the center of each cell in the box. * If that's less than best-so-far, update best distance and color number. */ /* Nominal steps between cell centers ("x" in Thomas article) */ #define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE) #define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE) #define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE) for (i = 0; i < numcolors; i++) { icolor = GETJSAMPLE(colorlist[i]); /* Compute (square of) distance from minc0/c1/c2 to this color */ inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; dist0 = inc0*inc0; inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; dist0 += inc1*inc1; inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; dist0 += inc2*inc2; /* Form the initial difference increments */ inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1; inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; /* Now loop over all cells in box, updating distance per Thomas method */ bptr = bestdist; cptr = bestcolor; xx0 = inc0; for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { dist1 = dist0; xx1 = inc1; for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) { dist2 = dist1; xx2 = inc2; for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { if (dist2 < *bptr) { *bptr = dist2; *cptr = (JSAMPLE) icolor; } dist2 += xx2; xx2 += 2 * STEP_C2 * STEP_C2; bptr++; cptr++; } dist1 += xx1; xx1 += 2 * STEP_C1 * STEP_C1; } dist0 += xx0; xx0 += 2 * STEP_C0 * STEP_C0; } } } LOCAL(void) fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2) /* Fill the inverse-colormap entries in the update box that contains */ /* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */ /* we can fill as many others as we wish.) */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; hist3d histogram = cquantize->histogram; int minc0, minc1, minc2; /* lower left corner of update box */ int ic0, ic1, ic2; register JSAMPLE * cptr; /* pointer into bestcolor[] array */ register histptr cachep; /* pointer into main cache array */ /* This array lists the candidate colormap indexes. */ JSAMPLE colorlist[MAXNUMCOLORS]; int numcolors; /* number of candidate colors */ /* This array holds the actually closest colormap index for each cell. */ JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; /* Convert cell coordinates to update box ID */ c0 >>= BOX_C0_LOG; c1 >>= BOX_C1_LOG; c2 >>= BOX_C2_LOG; /* Compute true coordinates of update box's origin corner. * Actually we compute the coordinates of the center of the corner * histogram cell, which are the lower bounds of the volume we care about. */ minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); /* Determine which colormap entries are close enough to be candidates * for the nearest entry to some cell in the update box. */ numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist); /* Determine the actually nearest colors. */ find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist, bestcolor); /* Save the best color numbers (plus 1) in the main cache array */ c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ c1 <<= BOX_C1_LOG; c2 <<= BOX_C2_LOG; cptr = bestcolor; for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { cachep = & histogram[c0+ic0][c1+ic1][c2]; for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); } } } } /* * Map some rows of pixels to the output colormapped representation. */ METHODDEF(void) pass2_no_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* This version performs no dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; hist3d histogram = cquantize->histogram; register JSAMPROW inptr, outptr; register histptr cachep; register int c0, c1, c2; int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; for (row = 0; row < num_rows; row++) { inptr = input_buf[row]; outptr = output_buf[row]; for (col = width; col > 0; col--) { /* get pixel value and index into the cache */ c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; cachep = & histogram[c0][c1][c2]; /* If we have not seen this color before, find nearest colormap entry */ /* and update the cache */ if (*cachep == 0) fill_inverse_cmap(cinfo, c0,c1,c2); /* Now emit the colormap index for this cell */ *outptr++ = (JSAMPLE) (*cachep - 1); } } } METHODDEF(void) pass2_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) /* This version performs Floyd-Steinberg dithering */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; hist3d histogram = cquantize->histogram; register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */ LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */ LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */ register FSERRPTR errorptr; /* => fserrors[] at column before current */ JSAMPROW inptr; /* => current input pixel */ JSAMPROW outptr; /* => current output pixel */ histptr cachep; int dir; /* +1 or -1 depending on direction */ int dir3; /* 3*dir, for advancing inptr & errorptr */ int row; JDIMENSION col; JDIMENSION width = cinfo->output_width; JSAMPLE *range_limit = cinfo->sample_range_limit; int *error_limit = cquantize->error_limiter; JSAMPROW colormap0 = cinfo->colormap[0]; JSAMPROW colormap1 = cinfo->colormap[1]; JSAMPROW colormap2 = cinfo->colormap[2]; SHIFT_TEMPS for (row = 0; row < num_rows; row++) { inptr = input_buf[row]; outptr = output_buf[row]; if (cquantize->on_odd_row) { /* work right to left in this row */ inptr += (width-1) * 3; /* so point to rightmost pixel */ outptr += width-1; dir = -1; dir3 = -3; errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ cquantize->on_odd_row = FALSE; /* flip for next time */ } else { /* work left to right in this row */ dir = 1; dir3 = 3; errorptr = cquantize->fserrors; /* => entry before first real column */ cquantize->on_odd_row = TRUE; /* flip for next time */ } /* Preset error values: no error propagated to first pixel from left */ cur0 = cur1 = cur2 = 0; /* and no error propagated to row below yet */ belowerr0 = belowerr1 = belowerr2 = 0; bpreverr0 = bpreverr1 = bpreverr2 = 0; for (col = width; col > 0; col--) { /* curN holds the error propagated from the previous pixel on the * current line. Add the error propagated from the previous line * to form the complete error correction term for this pixel, and * round the error term (which is expressed * 16) to an integer. * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct * for either sign of the error value. * Note: errorptr points to *previous* column's array entry. */ cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); /* Limit the error using transfer function set by init_error_limit. * See comments with init_error_limit for rationale. */ cur0 = error_limit[cur0]; cur1 = error_limit[cur1]; cur2 = error_limit[cur2]; /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. * The maximum error is +- MAXJSAMPLE (or less with error limiting); * this sets the required size of the range_limit array. */ cur0 += GETJSAMPLE(inptr[0]); cur1 += GETJSAMPLE(inptr[1]); cur2 += GETJSAMPLE(inptr[2]); cur0 = GETJSAMPLE(range_limit[cur0]); cur1 = GETJSAMPLE(range_limit[cur1]); cur2 = GETJSAMPLE(range_limit[cur2]); /* Index into the cache with adjusted pixel value */ cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; /* If we have not seen this color before, find nearest colormap */ /* entry and update the cache */ if (*cachep == 0) fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT); /* Now emit the colormap index for this cell */ { register int pixcode = *cachep - 1; *outptr = (JSAMPLE) pixcode; /* Compute representation error for this pixel */ cur0 -= GETJSAMPLE(colormap0[pixcode]); cur1 -= GETJSAMPLE(colormap1[pixcode]); cur2 -= GETJSAMPLE(colormap2[pixcode]); } /* Compute error fractions to be propagated to adjacent pixels. * Add these into the running sums, and simultaneously shift the * next-line error sums left by 1 column. */ { register LOCFSERROR bnexterr, delta; bnexterr = cur0; /* Process component 0 */ delta = cur0 * 2; cur0 += delta; /* form error * 3 */ errorptr[0] = (FSERROR) (bpreverr0 + cur0); cur0 += delta; /* form error * 5 */ bpreverr0 = belowerr0 + cur0; belowerr0 = bnexterr; cur0 += delta; /* form error * 7 */ bnexterr = cur1; /* Process component 1 */ delta = cur1 * 2; cur1 += delta; /* form error * 3 */ errorptr[1] = (FSERROR) (bpreverr1 + cur1); cur1 += delta; /* form error * 5 */ bpreverr1 = belowerr1 + cur1; belowerr1 = bnexterr; cur1 += delta; /* form error * 7 */ bnexterr = cur2; /* Process component 2 */ delta = cur2 * 2; cur2 += delta; /* form error * 3 */ errorptr[2] = (FSERROR) (bpreverr2 + cur2); cur2 += delta; /* form error * 5 */ bpreverr2 = belowerr2 + cur2; belowerr2 = bnexterr; cur2 += delta; /* form error * 7 */ } /* At this point curN contains the 7/16 error value to be propagated * to the next pixel on the current line, and all the errors for the * next line have been shifted over. We are therefore ready to move on. */ inptr += dir3; /* Advance pixel pointers to next column */ outptr += dir; errorptr += dir3; /* advance errorptr to current column */ } /* Post-loop cleanup: we must unload the final error values into the * final fserrors[] entry. Note we need not unload belowerrN because * it is for the dummy column before or after the actual array. */ errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ errorptr[1] = (FSERROR) bpreverr1; errorptr[2] = (FSERROR) bpreverr2; } } /* * Initialize the error-limiting transfer function (lookup table). * The raw F-S error computation can potentially compute error values of up to * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be * much less, otherwise obviously wrong pixels will be created. (Typical * effects include weird fringes at color-area boundaries, isolated bright * pixels in a dark area, etc.) The standard advice for avoiding this problem * is to ensure that the "corners" of the color cube are allocated as output * colors; then repeated errors in the same direction cannot cause cascading * error buildup. However, that only prevents the error from getting * completely out of hand; Aaron Giles reports that error limiting improves * the results even with corner colors allocated. * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty * well, but the smoother transfer function used below is even better. Thanks * to Aaron Giles for this idea. */ LOCAL(void) init_error_limit (j_decompress_ptr cinfo) /* Allocate and fill in the error_limiter table */ { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; int * table; int in, out; table = (int *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int)); table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */ cquantize->error_limiter = table; #define STEPSIZE ((MAXJSAMPLE+1)/16) /* Map errors 1:1 up to +- MAXJSAMPLE/16 */ out = 0; for (in = 0; in < STEPSIZE; in++, out++) { table[in] = out; table[-in] = -out; } /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */ for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { table[in] = out; table[-in] = -out; } /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */ for (; in <= MAXJSAMPLE; in++) { table[in] = out; table[-in] = -out; } #undef STEPSIZE } /* * Finish up at the end of each pass. */ METHODDEF(void) finish_pass1 (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; /* Select the representative colors and fill in cinfo->colormap */ cinfo->colormap = cquantize->sv_colormap; select_colors(cinfo, cquantize->desired); /* Force next pass to zero the color index table */ cquantize->needs_zeroed = TRUE; } METHODDEF(void) finish_pass2 (j_decompress_ptr cinfo) { /* no work */ } /* * Initialize for each processing pass. */ METHODDEF(void) start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; hist3d histogram = cquantize->histogram; int i; /* Only F-S dithering or no dithering is supported. */ /* If user asks for ordered dither, give him F-S. */ if (cinfo->dither_mode != JDITHER_NONE) cinfo->dither_mode = JDITHER_FS; if (is_pre_scan) { /* Set up method pointers */ cquantize->pub.color_quantize = prescan_quantize; cquantize->pub.finish_pass = finish_pass1; cquantize->needs_zeroed = TRUE; /* Always zero histogram */ } else { /* Set up method pointers */ if (cinfo->dither_mode == JDITHER_FS) cquantize->pub.color_quantize = pass2_fs_dither; else cquantize->pub.color_quantize = pass2_no_dither; cquantize->pub.finish_pass = finish_pass2; /* Make sure color count is acceptable */ i = cinfo->actual_number_of_colors; if (i < 1) ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1); if (i > MAXNUMCOLORS) ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); if (cinfo->dither_mode == JDITHER_FS) { size_t arraysize = (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR))); /* Allocate Floyd-Steinberg workspace if we didn't already. */ if (cquantize->fserrors == NULL) cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); /* Initialize the propagated errors to zero. */ jzero_far((void FAR *) cquantize->fserrors, arraysize); /* Make the error-limit table if we didn't already. */ if (cquantize->error_limiter == NULL) init_error_limit(cinfo); cquantize->on_odd_row = FALSE; } } /* Zero the histogram or inverse color map, if necessary */ if (cquantize->needs_zeroed) { for (i = 0; i < HIST_C0_ELEMS; i++) { jzero_far((void FAR *) histogram[i], HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); } cquantize->needs_zeroed = FALSE; } } /* * Switch to a new external colormap between output passes. */ METHODDEF(void) new_color_map_2_quant (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; /* Reset the inverse color map */ cquantize->needs_zeroed = TRUE; } /* * Module initialization routine for 2-pass color quantization. */ GLOBAL(void) jinit_2pass_quantizer (j_decompress_ptr cinfo) { my_cquantize_ptr cquantize; int i; cquantize = (my_cquantize_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_cquantizer)); cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; cquantize->pub.start_pass = start_pass_2_quant; cquantize->pub.new_color_map = new_color_map_2_quant; cquantize->fserrors = NULL; /* flag optional arrays not allocated */ cquantize->error_limiter = NULL; /* Make sure jdmaster didn't give me a case I can't handle */ if (cinfo->out_color_components != 3) ERREXIT(cinfo, JERR_NOTIMPL); /* Allocate the histogram/inverse colormap storage */ cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d)); for (i = 0; i < HIST_C0_ELEMS; i++) { cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); } cquantize->needs_zeroed = TRUE; /* histogram is garbage now */ /* Allocate storage for the completed colormap, if required. * We do this now since it is FAR storage and may affect * the memory manager's space calculations. */ if (cinfo->enable_2pass_quant) { /* Make sure color count is acceptable */ int desired = cinfo->desired_number_of_colors; /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */ if (desired < 8) ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8); /* Make sure colormap indexes can be represented by JSAMPLEs */ if (desired > MAXNUMCOLORS) ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); cquantize->sv_colormap = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3); cquantize->desired = desired; } else cquantize->sv_colormap = NULL; /* Only F-S dithering or no dithering is supported. */ /* If user asks for ordered dither, give him F-S. */ if (cinfo->dither_mode != JDITHER_NONE) cinfo->dither_mode = JDITHER_FS; /* Allocate Floyd-Steinberg workspace if necessary. * This isn't really needed until pass 2, but again it is FAR storage. * Although we will cope with a later change in dither_mode, * we do not promise to honor max_memory_to_use if dither_mode changes. */ if (cinfo->dither_mode == JDITHER_FS) { cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR)))); /* Might as well create the error-limiting table too. */ init_error_limit(cinfo); } } #endif /* QUANT_2PASS_SUPPORTED */ htmldoc-1.8.27/jpeg/usage.doc0100664000212600000240000006504306713354635014466 0ustar mikeuserUSAGE instructions for the Independent JPEG Group's JPEG software ================================================================= This file describes usage of the JPEG conversion programs cjpeg and djpeg, as well as the utility programs jpegtran, rdjpgcom and wrjpgcom. (See the other documentation files if you wish to use the JPEG library within your own programs.) If you are on a Unix machine you may prefer to read the Unix-style manual pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1. INTRODUCTION These programs implement JPEG image compression and decompression. JPEG (pronounced "jay-peg") is a standardized compression method for full-color and gray-scale images. JPEG is designed to handle "real-world" scenes, for example scanned photographs. Cartoons, line drawings, and other non-realistic images are not JPEG's strong suit; on that sort of material you may get poor image quality and/or little compression. JPEG is lossy, meaning that the output image is not necessarily identical to the input image. Hence you should not use JPEG if you have to have identical output bits. However, on typical real-world images, very good compression levels can be obtained with no visible change, and amazingly high compression is possible if you can tolerate a low-quality image. You can trade off image quality against file size by adjusting the compressor's "quality" setting. GENERAL USAGE We provide two programs, cjpeg to compress an image file into JPEG format, and djpeg to decompress a JPEG file back into a conventional image format. On Unix-like systems, you say: cjpeg [switches] [imagefile] >jpegfile or djpeg [switches] [jpegfile] >imagefile The programs read the specified input file, or standard input if none is named. They always write to standard output (with trace/error messages to standard error). These conventions are handy for piping images between programs. On most non-Unix systems, you say: cjpeg [switches] imagefile jpegfile or djpeg [switches] jpegfile imagefile i.e., both the input and output files are named on the command line. This style is a little more foolproof, and it loses no functionality if you don't have pipes. (You can get this style on Unix too, if you prefer, by defining TWO_FILE_COMMANDLINE when you compile the programs; see install.doc.) You can also say: cjpeg [switches] -outfile jpegfile imagefile or djpeg [switches] -outfile imagefile jpegfile This syntax works on all systems, so it is useful for scripts. The currently supported image file formats are: PPM (PBMPLUS color format), PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster Toolkit format). (RLE is supported only if the URT library is available.) cjpeg recognizes the input image format automatically, with the exception of some Targa-format files. You have to tell djpeg which format to generate. JPEG files are in the defacto standard JFIF file format. There are other, less widely used JPEG-based file formats, but we don't support them. All switch names may be abbreviated; for example, -grayscale may be written -gray or -gr. Most of the "basic" switches can be abbreviated to as little as one letter. Upper and lower case are equivalent (-BMP is the same as -bmp). British spellings are also accepted (e.g., -greyscale), though for brevity these are not mentioned below. CJPEG DETAILS The basic command line switches for cjpeg are: -quality N Scale quantization tables to adjust image quality. Quality is 0 (worst) to 100 (best); default is 75. (See below for more info.) -grayscale Create monochrome JPEG file from color input. Be sure to use this switch when compressing a grayscale BMP file, because cjpeg isn't bright enough to notice whether a BMP file uses only shades of gray. By saying -grayscale, you'll get a smaller JPEG file that takes less time to process. -optimize Perform optimization of entropy encoding parameters. Without this, default encoding parameters are used. -optimize usually makes the JPEG file a little smaller, but cjpeg runs somewhat slower and needs much more memory. Image quality and speed of decompression are unaffected by -optimize. -progressive Create progressive JPEG file (see below). -targa Input file is Targa format. Targa files that contain an "identification" field will not be automatically recognized by cjpeg; for such files you must specify -targa to make cjpeg treat the input as Targa format. For most Targa files, you won't need this switch. The -quality switch lets you trade off compressed file size against quality of the reconstructed image: the higher the quality setting, the larger the JPEG file, and the closer the output image will be to the original input. Normally you want to use the lowest quality setting (smallest file) that decompresses into something visually indistinguishable from the original image. For this purpose the quality setting should be between 50 and 95; the default of 75 is often about right. If you see defects at -quality 75, then go up 5 or 10 counts at a time until you are happy with the output image. (The optimal setting will vary from one image to another.) -quality 100 will generate a quantization table of all 1's, minimizing loss in the quantization step (but there is still information loss in subsampling, as well as roundoff error). This setting is mainly of interest for experimental purposes. Quality values above about 95 are NOT recommended for normal use; the compressed file size goes up dramatically for hardly any gain in output image quality. In the other direction, quality values below 50 will produce very small files of low image quality. Settings around 5 to 10 might be useful in preparing an index of a large image library, for example. Try -quality 2 (or so) for some amusing Cubist effects. (Note: quality values below about 25 generate 2-byte quantization tables, which are considered optional in the JPEG standard. cjpeg emits a warning message when you give such a quality value, because some other JPEG programs may be unable to decode the resulting file. Use -baseline if you need to ensure compatibility at low quality values.) The -progressive switch creates a "progressive JPEG" file. In this type of JPEG file, the data is stored in multiple scans of increasing quality. If the file is being transmitted over a slow communications link, the decoder can use the first scan to display a low-quality image very quickly, and can then improve the display with each subsequent scan. The final image is exactly equivalent to a standard JPEG file of the same quality setting, and the total file size is about the same --- often a little smaller. CAUTION: progressive JPEG is not yet widely implemented, so many decoders will be unable to view a progressive JPEG file at all. Switches for advanced users: -dct int Use integer DCT method (default). -dct fast Use fast integer DCT (less accurate). -dct float Use floating-point DCT method. The float method is very slightly more accurate than the int method, but is much slower unless your machine has very fast floating-point hardware. Also note that results of the floating-point method may vary slightly across machines, while the integer methods should give the same results everywhere. The fast integer method is much less accurate than the other two. -restart N Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is attached to the number. -restart 0 (the default) means no restart markers. -smooth N Smooth the input image to eliminate dithering noise. N, ranging from 1 to 100, indicates the strength of smoothing. 0 (the default) means no smoothing. -maxmemory N Set limit for amount of memory to use in processing large images. Value is in thousands of bytes, or millions of bytes if "M" is attached to the number. For example, -max 4m selects 4000000 bytes. If more space is needed, temporary files will be used. -verbose Enable debug printout. More -v's give more printout. or -debug Also, version information is printed at startup. The -restart option inserts extra markers that allow a JPEG decoder to resynchronize after a transmission error. Without restart markers, any damage to a compressed file will usually ruin the image from the point of the error to the end of the image; with restart markers, the damage is usually confined to the portion of the image up to the next restart marker. Of course, the restart markers occupy extra space. We recommend -restart 1 for images that will be transmitted across unreliable networks such as Usenet. The -smooth option filters the input to eliminate fine-scale noise. This is often useful when converting dithered images to JPEG: a moderate smoothing factor of 10 to 50 gets rid of dithering patterns in the input file, resulting in a smaller JPEG file and a better-looking image. Too large a smoothing factor will visibly blur the image, however. Switches for wizards: -baseline Force baseline-compatible quantization tables to be generated. This clamps quantization values to 8 bits even at low quality settings. (This switch is poorly named, since it does not ensure that the output is actually baseline JPEG. For example, you can use -baseline and -progressive together.) -qtables file Use the quantization tables given in the specified text file. -qslots N[,...] Select which quantization table to use for each color component. -sample HxV[,...] Set JPEG sampling factors for each color component. -scans file Use the scan script given in the specified text file. The "wizard" switches are intended for experimentation with JPEG. If you don't know what you are doing, DON'T USE THEM. These switches are documented further in the file wizard.doc. DJPEG DETAILS The basic command line switches for djpeg are: -colors N Reduce image to at most N colors. This reduces the or -quantize N number of colors used in the output image, so that it can be displayed on a colormapped display or stored in a colormapped file format. For example, if you have an 8-bit display, you'd need to reduce to 256 or fewer colors. (-colors is the recommended name, -quantize is provided only for backwards compatibility.) -fast Select recommended processing options for fast, low quality output. (The default options are chosen for highest quality output.) Currently, this is equivalent to "-dct fast -nosmooth -onepass -dither ordered". -grayscale Force gray-scale output even if JPEG file is color. Useful for viewing on monochrome displays; also, djpeg runs noticeably faster in this mode. -scale M/N Scale the output image by a factor M/N. Currently the scale factor must be 1/1, 1/2, 1/4, or 1/8. Scaling is handy if the image is larger than your screen; also, djpeg runs much faster when scaling down the output. -bmp Select BMP output format (Windows flavor). 8-bit colormapped format is emitted if -colors or -grayscale is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color format is emitted. -gif Select GIF output format. Since GIF does not support more than 256 colors, -colors 256 is assumed (unless you specify a smaller number of colors). If you specify -fast, the default number of colors is 216. -os2 Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is emitted if -colors or -grayscale is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color format is emitted. -pnm Select PBMPLUS (PPM/PGM) output format (this is the default format). PGM is emitted if the JPEG file is gray-scale or if -grayscale is specified; otherwise PPM is emitted. -rle Select RLE output format. (Requires URT library.) -targa Select Targa output format. Gray-scale format is emitted if the JPEG file is gray-scale or if -grayscale is specified; otherwise, colormapped format is emitted if -colors is specified; otherwise, 24-bit full-color format is emitted. Switches for advanced users: -dct int Use integer DCT method (default). -dct fast Use fast integer DCT (less accurate). -dct float Use floating-point DCT method. The float method is very slightly more accurate than the int method, but is much slower unless your machine has very fast floating-point hardware. Also note that results of the floating-point method may vary slightly across machines, while the integer methods should give the same results everywhere. The fast integer method is much less accurate than the other two. -dither fs Use Floyd-Steinberg dithering in color quantization. -dither ordered Use ordered dithering in color quantization. -dither none Do not use dithering in color quantization. By default, Floyd-Steinberg dithering is applied when quantizing colors; this is slow but usually produces the best results. Ordered dither is a compromise between speed and quality; no dithering is fast but usually looks awful. Note that these switches have no effect unless color quantization is being done. Ordered dither is only available in -onepass mode. -map FILE Quantize to the colors used in the specified image file. This is useful for producing multiple files with identical color maps, or for forcing a predefined set of colors to be used. The FILE must be a GIF or PPM file. This option overrides -colors and -onepass. -nosmooth Use a faster, lower-quality upsampling routine. -onepass Use one-pass instead of two-pass color quantization. The one-pass method is faster and needs less memory, but it produces a lower-quality image. -onepass is ignored unless you also say -colors N. Also, the one-pass method is always used for gray-scale output (the two-pass method is no improvement then). -maxmemory N Set limit for amount of memory to use in processing large images. Value is in thousands of bytes, or millions of bytes if "M" is attached to the number. For example, -max 4m selects 4000000 bytes. If more space is needed, temporary files will be used. -verbose Enable debug printout. More -v's give more printout. or -debug Also, version information is printed at startup. HINTS FOR CJPEG Color GIF files are not the ideal input for JPEG; JPEG is really intended for compressing full-color (24-bit) images. In particular, don't try to convert cartoons, line drawings, and other images that have only a few distinct colors. GIF works great on these, JPEG does not. If you want to convert a GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options to get a satisfactory conversion. -smooth 10 or so is often helpful. Avoid running an image through a series of JPEG compression/decompression cycles. Image quality loss will accumulate; after ten or so cycles the image may be noticeably worse than it was after one cycle. It's best to use a lossless format while manipulating an image, then convert to JPEG format when you are ready to file the image away. The -optimize option to cjpeg is worth using when you are making a "final" version for posting or archiving. It's also a win when you are using low quality settings to make very small JPEG files; the percentage improvement is often a lot more than it is on larger files. (At present, -optimize mode is always selected when generating progressive JPEG files.) GIF input files are no longer supported, to avoid the Unisys LZW patent. Use a Unisys-licensed program if you need to read a GIF file. (Conversion of GIF files to JPEG is usually a bad idea anyway.) HINTS FOR DJPEG To get a quick preview of an image, use the -grayscale and/or -scale switches. "-grayscale -scale 1/8" is the fastest case. Several options are available that trade off image quality to gain speed. "-fast" turns on the recommended settings. "-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality. When producing a color-quantized image, "-onepass -dither ordered" is fast but much lower quality than the default behavior. "-dither none" may give acceptable results in two-pass mode, but is seldom tolerable in one-pass mode. If you are fortunate enough to have very fast floating point hardware, "-dct float" may be even faster than "-dct fast". But on most machines "-dct float" is slower than "-dct int"; in this case it is not worth using, because its theoretical accuracy advantage is too small to be significant in practice. Two-pass color quantization requires a good deal of memory; on MS-DOS machines it may run out of memory even with -maxmemory 0. In that case you can still decompress, with some loss of image quality, by specifying -onepass for one-pass quantization. To avoid the Unisys LZW patent, djpeg produces uncompressed GIF files. These are larger than they should be, but are readable by standard GIF decoders. HINTS FOR BOTH PROGRAMS If more space is needed than will fit in the available main memory (as determined by -maxmemory), temporary files will be used. (MS-DOS versions will try to get extended or expanded memory first.) The temporary files are often rather large: in typical cases they occupy three bytes per pixel, for example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough free disk space, leave out -progressive and -optimize (for cjpeg) or specify -onepass (for djpeg). On MS-DOS, the temporary files are created in the directory named by the TMP or TEMP environment variable, or in the current directory if neither of those exist. Amiga implementations put the temp files in the directory named by JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free space. The default memory usage limit (-maxmemory) is set when the software is compiled. If you get an "insufficient memory" error, try specifying a smaller -maxmemory value, even -maxmemory 0 to use the absolute minimum space. You may want to recompile with a smaller default value if this happens often. On machines that have "environment" variables, you can define the environment variable JPEGMEM to set the default memory limit. The value is specified as described for the -maxmemory switch. JPEGMEM overrides the default value specified when the program was compiled, and itself is overridden by an explicit -maxmemory switch. On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to use. (Extended or expanded memory is also used if available.) Most DOS-specific versions of this software do their own memory space estimation and do not need you to specify -maxmemory. JPEGTRAN jpegtran performs various useful transformations of JPEG files. It can translate the coded representation from one variant of JPEG to another, for example from baseline JPEG to progressive JPEG or vice versa. It can also perform some rearrangements of the image data, for example turning an image from landscape to portrait format by rotation. jpegtran works by rearranging the compressed data (DCT coefficients), without ever fully decoding the image. Therefore, its transformations are lossless: there is no image degradation at all, which would not be true if you used djpeg followed by cjpeg to accomplish the same conversion. But by the same token, jpegtran cannot perform lossy operations such as changing the image quality. jpegtran uses a command line syntax similar to cjpeg or djpeg. On Unix-like systems, you say: jpegtran [switches] [inputfile] >outputfile On most non-Unix systems, you say: jpegtran [switches] inputfile outputfile where both the input and output files are JPEG files. To specify the coded JPEG representation used in the output file, jpegtran accepts a subset of the switches recognized by cjpeg: -optimize Perform optimization of entropy encoding parameters. -progressive Create progressive JPEG file. -restart N Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is attached to the number. -scans file Use the scan script given in the specified text file. See the previous discussion of cjpeg for more details about these switches. If you specify none of these switches, you get a plain baseline-JPEG output file. The quality setting and so forth are determined by the input file. The image can be losslessly transformed by giving one of these switches: -flip horizontal Mirror image horizontally (left-right). -flip vertical Mirror image vertically (top-bottom). -rotate 90 Rotate image 90 degrees clockwise. -rotate 180 Rotate image 180 degrees. -rotate 270 Rotate image 270 degrees clockwise (or 90 ccw). -transpose Transpose image (across UL-to-LR axis). -transverse Transverse transpose (across UR-to-LL axis). The transpose transformation has no restrictions regarding image dimensions. The other transformations operate rather oddly if the image dimensions are not a multiple of the iMCU size (usually 8 or 16 pixels), because they can only transform complete blocks of DCT coefficient data in the desired way. jpegtran's default behavior when transforming an odd-size image is designed to preserve exact reversibility and mathematical consistency of the transformation set. As stated, transpose is able to flip the entire image area. Horizontal mirroring leaves any partial iMCU column at the right edge untouched, but is able to flip all rows of the image. Similarly, vertical mirroring leaves any partial iMCU row at the bottom edge untouched, but is able to flip all columns. The other transforms can be built up as sequences of transpose and flip operations; for consistency, their actions on edge pixels are defined to be the same as the end result of the corresponding transpose-and-flip sequence. For practical use, you may prefer to discard any untransformable edge pixels rather than having a strange-looking strip along the right and/or bottom edges of a transformed image. To do this, add the -trim switch: -trim Drop non-transformable edge blocks. Obviously, a transformation with -trim is not reversible, so strictly speaking jpegtran with this switch is not lossless. Also, the expected mathematical equivalences between the transformations no longer hold. For example, "-rot 270 -trim" trims only the bottom edge, but "-rot 90 -trim" followed by "-rot 180 -trim" trims both edges. Another not-strictly-lossless transformation switch is: -grayscale Force grayscale output. This option discards the chrominance channels if the input image is YCbCr (ie, a standard color JPEG), resulting in a grayscale JPEG file. The luminance channel is preserved exactly, so this is a better method of reducing to grayscale than decompression, conversion, and recompression. This switch is particularly handy for fixing a monochrome picture that was mistakenly encoded as a color JPEG. (In such a case, the space savings from getting rid of the near-empty chroma channels won't be large; but the decoding time for a grayscale JPEG is substantially less than that for a color JPEG.) jpegtran also recognizes these switches that control what to do with "extra" markers, such as comment blocks: -copy none Copy no extra markers from source file. This setting suppresses all comments and other excess baggage present in the source file. -copy comments Copy only comment markers. This setting copies comments from the source file, but discards any other inessential data. -copy all Copy all extra markers. This setting preserves miscellaneous markers found in the source file, such as JFIF thumbnails and Photoshop settings. In some files these extra markers can be sizable. The default behavior is -copy comments. (Note: in IJG releases v6 and v6a, jpegtran always did the equivalent of -copy none.) Additional switches recognized by jpegtran are: -outfile filename -maxmemory N -verbose -debug These work the same as in cjpeg or djpeg. THE COMMENT UTILITIES The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. Although the standard doesn't actually define what COM blocks are for, they are widely used to hold user-supplied text strings. This lets you add annotations, titles, index terms, etc to your JPEG files, and later retrieve them as text. COM blocks do not interfere with the image stored in the JPEG file. The maximum size of a COM block is 64K, but you can have as many of them as you like in one JPEG file. We provide two utility programs to display COM block contents and add COM blocks to a JPEG file. rdjpgcom searches a JPEG file and prints the contents of any COM blocks on standard output. The command line syntax is rdjpgcom [-verbose] [inputfilename] The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG image dimensions. If you omit the input file name from the command line, the JPEG file is read from standard input. (This may not work on some operating systems, if binary data can't be read from stdin.) wrjpgcom adds a COM block, containing text you provide, to a JPEG file. Ordinarily, the COM block is added after any existing COM blocks, but you can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG file; it does not modify the input file. DO NOT try to overwrite the input file by directing wrjpgcom's output back into it; on most systems this will just destroy your file. The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like systems, it is wrjpgcom [switches] [inputfilename] The output file is written to standard output. The input file comes from the named file, or from standard input if no input file is named. On most non-Unix systems, the syntax is wrjpgcom [switches] inputfilename outputfilename where both input and output file names must be given explicitly. wrjpgcom understands three switches: -replace Delete any existing COM blocks from the file. -comment "Comment text" Supply new COM text on command line. -cfile name Read text for new COM block from named file. (Switch names can be abbreviated.) If you have only one line of comment text to add, you can provide it on the command line with -comment. The comment text must be surrounded with quotes so that it is treated as a single argument. Longer comments can be read from a text file. If you give neither -comment nor -cfile, then wrjpgcom will read the comment text from standard input. (In this case an input image file name MUST be supplied, so that the source JPEG file comes from somewhere else.) You can enter multiple lines, up to 64KB worth. Type an end-of-file indicator (usually control-D or control-Z) to terminate the comment text entry. wrjpgcom will not add a COM block if the provided comment string is empty. Therefore -replace -comment "" can be used to delete all COM blocks from a file. These utility programs do not depend on the IJG JPEG library. In particular, the source code for rdjpgcom is intended as an illustration of the minimum amount of code required to parse a JPEG file header correctly. htmldoc-1.8.27/jpeg/jdct.h0100664000212600000240000001560106713354635013763 0ustar mikeuser/* * jdct.h * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This include file contains common declarations for the forward and * inverse DCT modules. These declarations are private to the DCT managers * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms. * The individual DCT algorithms are kept in separate files to ease * machine-dependent tuning (e.g., assembly coding). */ /* * A forward DCT routine is given a pointer to a work area of type DCTELEM[]; * the DCT is to be performed in-place in that buffer. Type DCTELEM is int * for 8-bit samples, INT32 for 12-bit samples. (NOTE: Floating-point DCT * implementations use an array of type FAST_FLOAT, instead.) * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE). * The DCT outputs are returned scaled up by a factor of 8; they therefore * have a range of +-8K for 8-bit data, +-128K for 12-bit data. This * convention improves accuracy in integer implementations and saves some * work in floating-point ones. * Quantization of the output coefficients is done by jcdctmgr.c. */ #if BITS_IN_JSAMPLE == 8 typedef int DCTELEM; /* 16 or 32 bits is fine */ #else typedef INT32 DCTELEM; /* must have 32 bits */ #endif typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data)); typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data)); /* * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer * to an output sample array. The routine must dequantize the input data as * well as perform the IDCT; for dequantization, it uses the multiplier table * pointed to by compptr->dct_table. The output data is to be placed into the * sample array starting at a specified column. (Any row offset needed will * be applied to the array pointer before it is passed to the IDCT code.) * Note that the number of samples emitted by the IDCT routine is * DCT_scaled_size * DCT_scaled_size. */ /* typedef inverse_DCT_method_ptr is declared in jpegint.h */ /* * Each IDCT routine has its own ideas about the best dct_table element type. */ typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */ #if BITS_IN_JSAMPLE == 8 typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ #define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ #else typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ #define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ #endif typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ /* * Each IDCT routine is responsible for range-limiting its results and * converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could * be quite far out of range if the input data is corrupt, so a bulletproof * range-limiting step is required. We use a mask-and-table-lookup method * to do the combined operations quickly. See the comments with * prepare_range_limit_table (in jdmaster.c) for more info. */ #define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE) #define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */ /* Short forms of external names for systems with brain-damaged linkers. */ #ifdef NEED_SHORT_EXTERNAL_NAMES #define jpeg_fdct_islow jFDislow #define jpeg_fdct_ifast jFDifast #define jpeg_fdct_float jFDfloat #define jpeg_idct_islow jRDislow #define jpeg_idct_ifast jRDifast #define jpeg_idct_float jRDfloat #define jpeg_idct_4x4 jRD4x4 #define jpeg_idct_2x2 jRD2x2 #define jpeg_idct_1x1 jRD1x1 #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* Extern declarations for the forward and inverse DCT routines. */ EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data)); EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data)); EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data)); EXTERN(void) jpeg_idct_islow JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_ifast JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_float JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_4x4 JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_2x2 JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_1x1 JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); /* * Macros for handling fixed-point arithmetic; these are used by many * but not all of the DCT/IDCT modules. * * All values are expected to be of type INT32. * Fractional constants are scaled left by CONST_BITS bits. * CONST_BITS is defined within each module using these macros, * and may differ from one module to the next. */ #define ONE ((INT32) 1) #define CONST_SCALE (ONE << CONST_BITS) /* Convert a positive real constant to an integer scaled by CONST_SCALE. * Caution: some C compilers fail to reduce "FIX(constant)" at compile time, * thus causing a lot of useless floating-point operations at run time. */ #define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) /* Descale and correctly round an INT32 value that's scaled by N bits. * We assume RIGHT_SHIFT rounds towards minus infinity, so adding * the fudge factor is correct for either sign of X. */ #define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) /* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. * This macro is used only when the two inputs will actually be no more than * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a * full 32x32 multiply. This provides a useful speedup on many machines. * Unfortunately there is no way to specify a 16x16->32 multiply portably * in C, but some C compilers will do the right thing if you provide the * correct combination of casts. */ #ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ #define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) #endif #ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ #define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) #endif #ifndef MULTIPLY16C16 /* default definition */ #define MULTIPLY16C16(var,const) ((var) * (const)) #endif /* Same except both inputs are variables. */ #ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ #define MULTIPLY16V16(var1,var2) (((INT16) (var1)) * ((INT16) (var2))) #endif #ifndef MULTIPLY16V16 /* default definition */ #define MULTIPLY16V16(var1,var2) ((var1) * (var2)) #endif htmldoc-1.8.27/jpeg/jdatasrc.c0100664000212600000240000001666406713354635014637 0ustar mikeuser/* * jdatasrc.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains decompression data source routines for the case of * reading JPEG data from a file (or any stdio stream). While these routines * are sufficient for most applications, some will want to use a different * source manager. * IMPORTANT: we assume that fread() will correctly transcribe an array of * JOCTETs from 8-bit-wide elements on external storage. If char is wider * than 8 bits on your machine, you may need to do some tweaking. */ /* this is not a core library module, so it doesn't define JPEG_INTERNALS */ #include "jinclude.h" #include "jpeglib.h" #include "jerror.h" /* Expanded data source object for stdio input */ typedef struct { struct jpeg_source_mgr pub; /* public fields */ FILE * infile; /* source stream */ JOCTET * buffer; /* start of buffer */ boolean start_of_file; /* have we gotten any data yet? */ } my_source_mgr; typedef my_source_mgr * my_src_ptr; #define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */ /* * Initialize source --- called by jpeg_read_header * before any data is actually read. */ METHODDEF(void) init_source (j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr) cinfo->src; /* We reset the empty-input-file flag for each image, * but we don't clear the input buffer. * This is correct behavior for reading a series of images from one source. */ src->start_of_file = TRUE; } /* * Fill the input buffer --- called whenever buffer is emptied. * * In typical applications, this should read fresh data into the buffer * (ignoring the current state of next_input_byte & bytes_in_buffer), * reset the pointer & count to the start of the buffer, and return TRUE * indicating that the buffer has been reloaded. It is not necessary to * fill the buffer entirely, only to obtain at least one more byte. * * There is no such thing as an EOF return. If the end of the file has been * reached, the routine has a choice of ERREXIT() or inserting fake data into * the buffer. In most cases, generating a warning message and inserting a * fake EOI marker is the best course of action --- this will allow the * decompressor to output however much of the image is there. However, * the resulting error message is misleading if the real problem is an empty * input file, so we handle that case specially. * * In applications that need to be able to suspend compression due to input * not being available yet, a FALSE return indicates that no more data can be * obtained right now, but more may be forthcoming later. In this situation, * the decompressor will return to its caller (with an indication of the * number of scanlines it has read, if any). The application should resume * decompression after it has loaded more data into the input buffer. Note * that there are substantial restrictions on the use of suspension --- see * the documentation. * * When suspending, the decompressor will back up to a convenient restart point * (typically the start of the current MCU). next_input_byte & bytes_in_buffer * indicate where the restart point will be if the current call returns FALSE. * Data beyond this point must be rescanned after resumption, so move it to * the front of the buffer rather than discarding it. */ METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr) cinfo->src; size_t nbytes; nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); if (nbytes <= 0) { if (src->start_of_file) /* Treat empty input file as fatal error */ ERREXIT(cinfo, JERR_INPUT_EMPTY); WARNMS(cinfo, JWRN_JPEG_EOF); /* Insert a fake EOI marker */ src->buffer[0] = (JOCTET) 0xFF; src->buffer[1] = (JOCTET) JPEG_EOI; nbytes = 2; } src->pub.next_input_byte = src->buffer; src->pub.bytes_in_buffer = nbytes; src->start_of_file = FALSE; return TRUE; } /* * Skip data --- used to skip over a potentially large amount of * uninteresting data (such as an APPn marker). * * Writers of suspendable-input applications must note that skip_input_data * is not granted the right to give a suspension return. If the skip extends * beyond the data currently in the buffer, the buffer can be marked empty so * that the next read will cause a fill_input_buffer call that can suspend. * Arranging for additional bytes to be discarded before reloading the input * buffer is the application writer's problem. */ METHODDEF(void) skip_input_data (j_decompress_ptr cinfo, long num_bytes) { my_src_ptr src = (my_src_ptr) cinfo->src; /* Just a dumb implementation for now. Could use fseek() except * it doesn't work on pipes. Not clear that being smart is worth * any trouble anyway --- large skips are infrequent. */ if (num_bytes > 0) { while (num_bytes > (long) src->pub.bytes_in_buffer) { num_bytes -= (long) src->pub.bytes_in_buffer; (void) fill_input_buffer(cinfo); /* note we assume that fill_input_buffer will never return FALSE, * so suspension need not be handled. */ } src->pub.next_input_byte += (size_t) num_bytes; src->pub.bytes_in_buffer -= (size_t) num_bytes; } } /* * An additional method that can be provided by data source modules is the * resync_to_restart method for error recovery in the presence of RST markers. * For the moment, this source module just uses the default resync method * provided by the JPEG library. That method assumes that no backtracking * is possible. */ /* * Terminate source --- called by jpeg_finish_decompress * after all data has been read. Often a no-op. * * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding * application must deal with any cleanup that should happen even * for error exit. */ METHODDEF(void) term_source (j_decompress_ptr cinfo) { /* no work necessary here */ } /* * Prepare for input from a stdio stream. * The caller must have already opened the stream, and is responsible * for closing it after finishing decompression. */ GLOBAL(void) jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile) { my_src_ptr src; /* The source object and input buffer are made permanent so that a series * of JPEG images can be read from the same file by calling jpeg_stdio_src * only before the first one. (If we discarded the buffer at the end of * one image, we'd likely lose the start of the next one.) * This makes it unsafe to use this manager and a different source * manager serially with the same JPEG object. Caveat programmer. */ if (cinfo->src == NULL) { /* first time for this JPEG object? */ cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_source_mgr)); src = (my_src_ptr) cinfo->src; src->buffer = (JOCTET *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, INPUT_BUF_SIZE * SIZEOF(JOCTET)); } src = (my_src_ptr) cinfo->src; src->pub.init_source = init_source; src->pub.fill_input_buffer = fill_input_buffer; src->pub.skip_input_data = skip_input_data; src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ src->pub.term_source = term_source; src->infile = infile; src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ src->pub.next_input_byte = NULL; /* until buffer loaded */ } htmldoc-1.8.27/jpeg/jcapistd.c0100664000212600000240000001337106713354635014635 0ustar mikeuser/* * jcapistd.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains application interface code for the compression half * of the JPEG library. These are the "standard" API routines that are * used in the normal full-compression case. They are not used by a * transcoding-only application. Note that if an application links in * jpeg_start_compress, it will end up linking in the entire compressor. * We thus must separate this file from jcapimin.c to avoid linking the * whole compression library into a transcoder. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * Compression initialization. * Before calling this, all parameters and a data destination must be set up. * * We require a write_all_tables parameter as a failsafe check when writing * multiple datastreams from the same compression object. Since prior runs * will have left all the tables marked sent_table=TRUE, a subsequent run * would emit an abbreviated stream (no tables) by default. This may be what * is wanted, but for safety's sake it should not be the default behavior: * programmers should have to make a deliberate choice to emit abbreviated * images. Therefore the documentation and examples should encourage people * to pass write_all_tables=TRUE; then it will take active thought to do the * wrong thing. */ GLOBAL(void) jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables) { if (cinfo->global_state != CSTATE_START) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (write_all_tables) jpeg_suppress_tables(cinfo, FALSE); /* mark all tables to be written */ /* (Re)initialize error mgr and destination modules */ (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); (*cinfo->dest->init_destination) (cinfo); /* Perform master selection of active modules */ jinit_compress_master(cinfo); /* Set up for the first pass */ (*cinfo->master->prepare_for_pass) (cinfo); /* Ready for application to drive first pass through jpeg_write_scanlines * or jpeg_write_raw_data. */ cinfo->next_scanline = 0; cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING); } /* * Write some scanlines of data to the JPEG compressor. * * The return value will be the number of lines actually written. * This should be less than the supplied num_lines only in case that * the data destination module has requested suspension of the compressor, * or if more than image_height scanlines are passed in. * * Note: we warn about excess calls to jpeg_write_scanlines() since * this likely signals an application programmer error. However, * excess scanlines passed in the last valid call are *silently* ignored, * so that the application need not adjust num_lines for end-of-image * when using a multiple-scanline buffer. */ GLOBAL(JDIMENSION) jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION num_lines) { JDIMENSION row_ctr, rows_left; if (cinfo->global_state != CSTATE_SCANNING) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (cinfo->next_scanline >= cinfo->image_height) WARNMS(cinfo, JWRN_TOO_MUCH_DATA); /* Call progress monitor hook if present */ if (cinfo->progress != NULL) { cinfo->progress->pass_counter = (long) cinfo->next_scanline; cinfo->progress->pass_limit = (long) cinfo->image_height; (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); } /* Give master control module another chance if this is first call to * jpeg_write_scanlines. This lets output of the frame/scan headers be * delayed so that application can write COM, etc, markers between * jpeg_start_compress and jpeg_write_scanlines. */ if (cinfo->master->call_pass_startup) (*cinfo->master->pass_startup) (cinfo); /* Ignore any extra scanlines at bottom of image. */ rows_left = cinfo->image_height - cinfo->next_scanline; if (num_lines > rows_left) num_lines = rows_left; row_ctr = 0; (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines); cinfo->next_scanline += row_ctr; return row_ctr; } /* * Alternate entry point to write raw data. * Processes exactly one iMCU row per call, unless suspended. */ GLOBAL(JDIMENSION) jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, JDIMENSION num_lines) { JDIMENSION lines_per_iMCU_row; if (cinfo->global_state != CSTATE_RAW_OK) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (cinfo->next_scanline >= cinfo->image_height) { WARNMS(cinfo, JWRN_TOO_MUCH_DATA); return 0; } /* Call progress monitor hook if present */ if (cinfo->progress != NULL) { cinfo->progress->pass_counter = (long) cinfo->next_scanline; cinfo->progress->pass_limit = (long) cinfo->image_height; (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); } /* Give master control module another chance if this is first call to * jpeg_write_raw_data. This lets output of the frame/scan headers be * delayed so that application can write COM, etc, markers between * jpeg_start_compress and jpeg_write_raw_data. */ if (cinfo->master->call_pass_startup) (*cinfo->master->pass_startup) (cinfo); /* Verify that at least one iMCU row has been passed. */ lines_per_iMCU_row = cinfo->max_v_samp_factor * DCTSIZE; if (num_lines < lines_per_iMCU_row) ERREXIT(cinfo, JERR_BUFFER_SIZE); /* Directly compress the row. */ if (! (*cinfo->coef->compress_data) (cinfo, data)) { /* If compressor did not consume the whole row, suspend processing. */ return 0; } /* OK, we processed one iMCU row. */ cinfo->next_scanline += lines_per_iMCU_row; return lines_per_iMCU_row; } htmldoc-1.8.27/jpeg/jdapistd.c0100664000212600000240000002220406713354635014631 0ustar mikeuser/* * jdapistd.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains application interface code for the decompression half * of the JPEG library. These are the "standard" API routines that are * used in the normal full-decompression case. They are not used by a * transcoding-only application. Note that if an application links in * jpeg_start_decompress, it will end up linking in the entire decompressor. * We thus must separate this file from jdapimin.c to avoid linking the * whole decompression library into a transcoder. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Forward declarations */ LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo)); /* * Decompression initialization. * jpeg_read_header must be completed before calling this. * * If a multipass operating mode was selected, this will do all but the * last pass, and thus may take a great deal of time. * * Returns FALSE if suspended. The return value need be inspected only if * a suspending data source is used. */ GLOBAL(boolean) jpeg_start_decompress (j_decompress_ptr cinfo) { if (cinfo->global_state == DSTATE_READY) { /* First call: initialize master control, select active modules */ jinit_master_decompress(cinfo); if (cinfo->buffered_image) { /* No more work here; expecting jpeg_start_output next */ cinfo->global_state = DSTATE_BUFIMAGE; return TRUE; } cinfo->global_state = DSTATE_PRELOAD; } if (cinfo->global_state == DSTATE_PRELOAD) { /* If file has multiple scans, absorb them all into the coef buffer */ if (cinfo->inputctl->has_multiple_scans) { #ifdef D_MULTISCAN_FILES_SUPPORTED for (;;) { int retcode; /* Call progress monitor hook if present */ if (cinfo->progress != NULL) (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); /* Absorb some more input */ retcode = (*cinfo->inputctl->consume_input) (cinfo); if (retcode == JPEG_SUSPENDED) return FALSE; if (retcode == JPEG_REACHED_EOI) break; /* Advance progress counter if appropriate */ if (cinfo->progress != NULL && (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { /* jdmaster underestimated number of scans; ratchet up one scan */ cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; } } } #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif /* D_MULTISCAN_FILES_SUPPORTED */ } cinfo->output_scan_number = cinfo->input_scan_number; } else if (cinfo->global_state != DSTATE_PRESCAN) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Perform any dummy output passes, and set up for the final pass */ return output_pass_setup(cinfo); } /* * Set up for an output pass, and perform any dummy pass(es) needed. * Common subroutine for jpeg_start_decompress and jpeg_start_output. * Entry: global_state = DSTATE_PRESCAN only if previously suspended. * Exit: If done, returns TRUE and sets global_state for proper output mode. * If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN. */ LOCAL(boolean) output_pass_setup (j_decompress_ptr cinfo) { if (cinfo->global_state != DSTATE_PRESCAN) { /* First call: do pass setup */ (*cinfo->master->prepare_for_output_pass) (cinfo); cinfo->output_scanline = 0; cinfo->global_state = DSTATE_PRESCAN; } /* Loop over any required dummy passes */ while (cinfo->master->is_dummy_pass) { #ifdef QUANT_2PASS_SUPPORTED /* Crank through the dummy pass */ while (cinfo->output_scanline < cinfo->output_height) { JDIMENSION last_scanline; /* Call progress monitor hook if present */ if (cinfo->progress != NULL) { cinfo->progress->pass_counter = (long) cinfo->output_scanline; cinfo->progress->pass_limit = (long) cinfo->output_height; (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); } /* Process some data */ last_scanline = cinfo->output_scanline; (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, &cinfo->output_scanline, (JDIMENSION) 0); if (cinfo->output_scanline == last_scanline) return FALSE; /* No progress made, must suspend */ } /* Finish up dummy pass, and set up for another one */ (*cinfo->master->finish_output_pass) (cinfo); (*cinfo->master->prepare_for_output_pass) (cinfo); cinfo->output_scanline = 0; #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif /* QUANT_2PASS_SUPPORTED */ } /* Ready for application to drive output pass through * jpeg_read_scanlines or jpeg_read_raw_data. */ cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; return TRUE; } /* * Read some scanlines of data from the JPEG decompressor. * * The return value will be the number of lines actually read. * This may be less than the number requested in several cases, * including bottom of image, data source suspension, and operating * modes that emit multiple scanlines at a time. * * Note: we warn about excess calls to jpeg_read_scanlines() since * this likely signals an application programmer error. However, * an oversize buffer (max_lines > scanlines remaining) is not an error. */ GLOBAL(JDIMENSION) jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines) { JDIMENSION row_ctr; if (cinfo->global_state != DSTATE_SCANNING) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (cinfo->output_scanline >= cinfo->output_height) { WARNMS(cinfo, JWRN_TOO_MUCH_DATA); return 0; } /* Call progress monitor hook if present */ if (cinfo->progress != NULL) { cinfo->progress->pass_counter = (long) cinfo->output_scanline; cinfo->progress->pass_limit = (long) cinfo->output_height; (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); } /* Process some data */ row_ctr = 0; (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); cinfo->output_scanline += row_ctr; return row_ctr; } /* * Alternate entry point to read raw data. * Processes exactly one iMCU row per call, unless suspended. */ GLOBAL(JDIMENSION) jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, JDIMENSION max_lines) { JDIMENSION lines_per_iMCU_row; if (cinfo->global_state != DSTATE_RAW_OK) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); if (cinfo->output_scanline >= cinfo->output_height) { WARNMS(cinfo, JWRN_TOO_MUCH_DATA); return 0; } /* Call progress monitor hook if present */ if (cinfo->progress != NULL) { cinfo->progress->pass_counter = (long) cinfo->output_scanline; cinfo->progress->pass_limit = (long) cinfo->output_height; (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); } /* Verify that at least one iMCU row can be returned. */ lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size; if (max_lines < lines_per_iMCU_row) ERREXIT(cinfo, JERR_BUFFER_SIZE); /* Decompress directly into user's buffer. */ if (! (*cinfo->coef->decompress_data) (cinfo, data)) return 0; /* suspension forced, can do nothing more */ /* OK, we processed one iMCU row. */ cinfo->output_scanline += lines_per_iMCU_row; return lines_per_iMCU_row; } /* Additional entry points for buffered-image mode. */ #ifdef D_MULTISCAN_FILES_SUPPORTED /* * Initialize for an output pass in buffered-image mode. */ GLOBAL(boolean) jpeg_start_output (j_decompress_ptr cinfo, int scan_number) { if (cinfo->global_state != DSTATE_BUFIMAGE && cinfo->global_state != DSTATE_PRESCAN) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); /* Limit scan number to valid range */ if (scan_number <= 0) scan_number = 1; if (cinfo->inputctl->eoi_reached && scan_number > cinfo->input_scan_number) scan_number = cinfo->input_scan_number; cinfo->output_scan_number = scan_number; /* Perform any dummy output passes, and set up for the real pass */ return output_pass_setup(cinfo); } /* * Finish up after an output pass in buffered-image mode. * * Returns FALSE if suspended. The return value need be inspected only if * a suspending data source is used. */ GLOBAL(boolean) jpeg_finish_output (j_decompress_ptr cinfo) { if ((cinfo->global_state == DSTATE_SCANNING || cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) { /* Terminate this pass. */ /* We do not require the whole pass to have been completed. */ (*cinfo->master->finish_output_pass) (cinfo); cinfo->global_state = DSTATE_BUFPOST; } else if (cinfo->global_state != DSTATE_BUFPOST) { /* BUFPOST = repeat call after a suspension, anything else is error */ ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); } /* Read markers looking for SOS or EOI */ while (cinfo->input_scan_number <= cinfo->output_scan_number && ! cinfo->inputctl->eoi_reached) { if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) return FALSE; /* Suspend, come back later */ } cinfo->global_state = DSTATE_BUFIMAGE; return TRUE; } #endif /* D_MULTISCAN_FILES_SUPPORTED */ htmldoc-1.8.27/jpeg/jversion.h0100664000212600000240000000055006713354635014673 0ustar mikeuser/* * jversion.h * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains software version identification. */ #define JVERSION "6b 27-Mar-1998" #define JCOPYRIGHT "Copyright (C) 1998, Thomas G. Lane" htmldoc-1.8.27/jpeg/jfdctint.c0100664000212600000240000002547206713354635014646 0ustar mikeuser/* * jfdctint.c * * Copyright (C) 1991-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains a slow-but-accurate integer implementation of the * forward DCT (Discrete Cosine Transform). * * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT * on each column. Direct algorithms are also available, but they are * much more complex and seem not to be any faster when reduced to code. * * This implementation is based on an algorithm described in * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. * The primary algorithm described there uses 11 multiplies and 29 adds. * We use their alternate method with 12 multiplies and 32 adds. * The advantage of this method is that no data path contains more than one * multiplication; this allows a very simple and accurate implementation in * scaled fixed-point arithmetic, with a minimal number of shifts. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef DCT_ISLOW_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* * The poop on this scaling stuff is as follows: * * Each 1-D DCT step produces outputs which are a factor of sqrt(N) * larger than the true DCT outputs. The final outputs are therefore * a factor of N larger than desired; since N=8 this can be cured by * a simple right shift at the end of the algorithm. The advantage of * this arrangement is that we save two multiplications per 1-D DCT, * because the y0 and y4 outputs need not be divided by sqrt(N). * In the IJG code, this factor of 8 is removed by the quantization step * (in jcdctmgr.c), NOT in this module. * * We have to do addition and subtraction of the integer inputs, which * is no problem, and multiplication by fractional constants, which is * a problem to do in integer arithmetic. We multiply all the constants * by CONST_SCALE and convert them to integer constants (thus retaining * CONST_BITS bits of precision in the constants). After doing a * multiplication we have to divide the product by CONST_SCALE, with proper * rounding, to produce the correct output. This division can be done * cheaply as a right shift of CONST_BITS bits. We postpone shifting * as long as possible so that partial sums can be added together with * full fractional precision. * * The outputs of the first pass are scaled up by PASS1_BITS bits so that * they are represented to better-than-integral precision. These outputs * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word * with the recommended scaling. (For 12-bit sample data, the intermediate * array is INT32 anyway.) * * To avoid overflow of the 32-bit intermediate results in pass 2, we must * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis * shows that the values given below are the most effective. */ #if BITS_IN_JSAMPLE == 8 #define CONST_BITS 13 #define PASS1_BITS 2 #else #define CONST_BITS 13 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */ #endif /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus * causing a lot of useless floating-point operations at run time. * To get around this we use the following pre-calculated constants. * If you change CONST_BITS you may want to add appropriate values. * (With a reasonable C compiler, you can just rely on the FIX() macro...) */ #if CONST_BITS == 13 #define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ #define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ #define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ #define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ #define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ #define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ #define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ #define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ #define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ #define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ #define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ #define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ #else #define FIX_0_298631336 FIX(0.298631336) #define FIX_0_390180644 FIX(0.390180644) #define FIX_0_541196100 FIX(0.541196100) #define FIX_0_765366865 FIX(0.765366865) #define FIX_0_899976223 FIX(0.899976223) #define FIX_1_175875602 FIX(1.175875602) #define FIX_1_501321110 FIX(1.501321110) #define FIX_1_847759065 FIX(1.847759065) #define FIX_1_961570560 FIX(1.961570560) #define FIX_2_053119869 FIX(2.053119869) #define FIX_2_562915447 FIX(2.562915447) #define FIX_3_072711026 FIX(3.072711026) #endif /* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. * For 8-bit samples with the recommended scaling, all the variable * and constant values involved are no more than 16 bits wide, so a * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. * For 12-bit samples, a full 32-bit multiplication will be needed. */ #if BITS_IN_JSAMPLE == 8 #define MULTIPLY(var,const) MULTIPLY16C16(var,const) #else #define MULTIPLY(var,const) ((var) * (const)) #endif /* * Perform the forward DCT on one block of samples. */ GLOBAL(void) jpeg_fdct_islow (DCTELEM * data) { INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; INT32 tmp10, tmp11, tmp12, tmp13; INT32 z1, z2, z3, z4, z5; DCTELEM *dataptr; int ctr; SHIFT_TEMPS /* Pass 1: process rows. */ /* Note results are scaled up by sqrt(8) compared to a true DCT; */ /* furthermore, we scale the results by 2**PASS1_BITS. */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { tmp0 = dataptr[0] + dataptr[7]; tmp7 = dataptr[0] - dataptr[7]; tmp1 = dataptr[1] + dataptr[6]; tmp6 = dataptr[1] - dataptr[6]; tmp2 = dataptr[2] + dataptr[5]; tmp5 = dataptr[2] - dataptr[5]; tmp3 = dataptr[3] + dataptr[4]; tmp4 = dataptr[3] - dataptr[4]; /* Even part per LL&M figure 1 --- note that published figure is faulty; * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". */ tmp10 = tmp0 + tmp3; tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS); dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), CONST_BITS-PASS1_BITS); dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), CONST_BITS-PASS1_BITS); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). * cK represents cos(K*pi/16). * i0..i3 in the paper are tmp4..tmp7 here. */ z1 = tmp4 + tmp7; z2 = tmp5 + tmp6; z3 = tmp4 + tmp6; z4 = tmp5 + tmp7; z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ z3 += z5; z4 += z5; dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS); dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS); dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS); dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS); dataptr += DCTSIZE; /* advance pointer to next row */ } /* Pass 2: process columns. * We remove the PASS1_BITS scaling, but leave the results scaled up * by an overall factor of 8. */ dataptr = data; for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; /* Even part per LL&M figure 1 --- note that published figure is faulty; * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". */ tmp10 = tmp0 + tmp3; tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), CONST_BITS+PASS1_BITS); dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), CONST_BITS+PASS1_BITS); /* Odd part per figure 8 --- note paper omits factor of sqrt(2). * cK represents cos(K*pi/16). * i0..i3 in the paper are tmp4..tmp7 here. */ z1 = tmp4 + tmp7; z2 = tmp5 + tmp6; z3 = tmp4 + tmp6; z4 = tmp5 + tmp7; z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ z3 += z5; z4 += z5; dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS+PASS1_BITS); dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS+PASS1_BITS); dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS+PASS1_BITS); dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS+PASS1_BITS); dataptr++; /* advance pointer to next column */ } } #endif /* DCT_ISLOW_SUPPORTED */ htmldoc-1.8.27/jpeg/jidctint.c0100664000212600000240000003473706713354635014655 0ustar mikeuser/* * jidctint.c * * Copyright (C) 1991-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains a slow-but-accurate integer implementation of the * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine * must also perform dequantization of the input coefficients. * * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT * on each row (or vice versa, but it's more convenient to emit a row at * a time). Direct algorithms are also available, but they are much more * complex and seem not to be any faster when reduced to code. * * This implementation is based on an algorithm described in * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. * The primary algorithm described there uses 11 multiplies and 29 adds. * We use their alternate method with 12 multiplies and 32 adds. * The advantage of this method is that no data path contains more than one * multiplication; this allows a very simple and accurate implementation in * scaled fixed-point arithmetic, with a minimal number of shifts. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef DCT_ISLOW_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* * The poop on this scaling stuff is as follows: * * Each 1-D IDCT step produces outputs which are a factor of sqrt(N) * larger than the true IDCT outputs. The final outputs are therefore * a factor of N larger than desired; since N=8 this can be cured by * a simple right shift at the end of the algorithm. The advantage of * this arrangement is that we save two multiplications per 1-D IDCT, * because the y0 and y4 inputs need not be divided by sqrt(N). * * We have to do addition and subtraction of the integer inputs, which * is no problem, and multiplication by fractional constants, which is * a problem to do in integer arithmetic. We multiply all the constants * by CONST_SCALE and convert them to integer constants (thus retaining * CONST_BITS bits of precision in the constants). After doing a * multiplication we have to divide the product by CONST_SCALE, with proper * rounding, to produce the correct output. This division can be done * cheaply as a right shift of CONST_BITS bits. We postpone shifting * as long as possible so that partial sums can be added together with * full fractional precision. * * The outputs of the first pass are scaled up by PASS1_BITS bits so that * they are represented to better-than-integral precision. These outputs * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word * with the recommended scaling. (To scale up 12-bit sample data further, an * intermediate INT32 array would be needed.) * * To avoid overflow of the 32-bit intermediate results in pass 2, we must * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis * shows that the values given below are the most effective. */ #if BITS_IN_JSAMPLE == 8 #define CONST_BITS 13 #define PASS1_BITS 2 #else #define CONST_BITS 13 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */ #endif /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus * causing a lot of useless floating-point operations at run time. * To get around this we use the following pre-calculated constants. * If you change CONST_BITS you may want to add appropriate values. * (With a reasonable C compiler, you can just rely on the FIX() macro...) */ #if CONST_BITS == 13 #define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ #define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ #define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ #define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ #define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ #define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ #define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ #define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ #define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ #define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ #define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ #define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ #else #define FIX_0_298631336 FIX(0.298631336) #define FIX_0_390180644 FIX(0.390180644) #define FIX_0_541196100 FIX(0.541196100) #define FIX_0_765366865 FIX(0.765366865) #define FIX_0_899976223 FIX(0.899976223) #define FIX_1_175875602 FIX(1.175875602) #define FIX_1_501321110 FIX(1.501321110) #define FIX_1_847759065 FIX(1.847759065) #define FIX_1_961570560 FIX(1.961570560) #define FIX_2_053119869 FIX(2.053119869) #define FIX_2_562915447 FIX(2.562915447) #define FIX_3_072711026 FIX(3.072711026) #endif /* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. * For 8-bit samples with the recommended scaling, all the variable * and constant values involved are no more than 16 bits wide, so a * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. * For 12-bit samples, a full 32-bit multiplication will be needed. */ #if BITS_IN_JSAMPLE == 8 #define MULTIPLY(var,const) MULTIPLY16C16(var,const) #else #define MULTIPLY(var,const) ((var) * (const)) #endif /* Dequantize a coefficient by multiplying it by the multiplier-table * entry; produce an int result. In this module, both inputs and result * are 16 bits or less, so either int or short multiply will work. */ #define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) /* * Perform dequantization and inverse DCT on one block of coefficients. */ GLOBAL(void) jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { INT32 tmp0, tmp1, tmp2, tmp3; INT32 tmp10, tmp11, tmp12, tmp13; INT32 z1, z2, z3, z4, z5; JCOEFPTR inptr; ISLOW_MULT_TYPE * quantptr; int * wsptr; JSAMPROW outptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); int ctr; int workspace[DCTSIZE2]; /* buffers data between passes */ SHIFT_TEMPS /* Pass 1: process columns from input, store into work array. */ /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ /* furthermore, we scale the results by 2**PASS1_BITS. */ inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; for (ctr = DCTSIZE; ctr > 0; ctr--) { /* Due to quantization, we will usually find that many of the input * coefficients are zero, especially the AC terms. We can exploit this * by short-circuiting the IDCT calculation for any column in which all * the AC terms are zero. In that case each output is equal to the * DC coefficient (with scale factor as needed). * With typical images and quantization tables, half or more of the * column DCT calculations can be simplified this way. */ if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { /* AC terms all zero */ int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; wsptr[DCTSIZE*0] = dcval; wsptr[DCTSIZE*1] = dcval; wsptr[DCTSIZE*2] = dcval; wsptr[DCTSIZE*3] = dcval; wsptr[DCTSIZE*4] = dcval; wsptr[DCTSIZE*5] = dcval; wsptr[DCTSIZE*6] = dcval; wsptr[DCTSIZE*7] = dcval; inptr++; /* advance pointers to next column */ quantptr++; wsptr++; continue; } /* Even part: reverse the even part of the forward DCT. */ /* The rotator is sqrt(2)*c(-6). */ z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); z1 = MULTIPLY(z2 + z3, FIX_0_541196100); tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); tmp0 = (z2 + z3) << CONST_BITS; tmp1 = (z2 - z3) << CONST_BITS; tmp10 = tmp0 + tmp3; tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; /* Odd part per figure 8; the matrix is unitary and hence its * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. */ tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); z1 = tmp0 + tmp3; z2 = tmp1 + tmp2; z3 = tmp0 + tmp2; z4 = tmp1 + tmp3; z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ z3 += z5; z4 += z5; tmp0 += z1 + z3; tmp1 += z2 + z4; tmp2 += z2 + z3; tmp3 += z1 + z4; /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); wsptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); inptr++; /* advance pointers to next column */ quantptr++; wsptr++; } /* Pass 2: process rows from work array, store into output array. */ /* Note that we must descale the results by a factor of 8 == 2**3, */ /* and also undo the PASS1_BITS scaling. */ wsptr = workspace; for (ctr = 0; ctr < DCTSIZE; ctr++) { outptr = output_buf[ctr] + output_col; /* Rows of zeroes can be exploited in the same way as we did with columns. * However, the column calculation has created many nonzero AC terms, so * the simplification applies less often (typically 5% to 10% of the time). * On machines with very fast multiplication, it's possible that the * test takes more time than it's worth. In that case this section * may be commented out. */ #ifndef NO_ZERO_ROW_TEST if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { /* AC terms all zero */ JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) & RANGE_MASK]; outptr[0] = dcval; outptr[1] = dcval; outptr[2] = dcval; outptr[3] = dcval; outptr[4] = dcval; outptr[5] = dcval; outptr[6] = dcval; outptr[7] = dcval; wsptr += DCTSIZE; /* advance pointer to next row */ continue; } #endif /* Even part: reverse the even part of the forward DCT. */ /* The rotator is sqrt(2)*c(-6). */ z2 = (INT32) wsptr[2]; z3 = (INT32) wsptr[6]; z1 = MULTIPLY(z2 + z3, FIX_0_541196100); tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); tmp0 = ((INT32) wsptr[0] + (INT32) wsptr[4]) << CONST_BITS; tmp1 = ((INT32) wsptr[0] - (INT32) wsptr[4]) << CONST_BITS; tmp10 = tmp0 + tmp3; tmp13 = tmp0 - tmp3; tmp11 = tmp1 + tmp2; tmp12 = tmp1 - tmp2; /* Odd part per figure 8; the matrix is unitary and hence its * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. */ tmp0 = (INT32) wsptr[7]; tmp1 = (INT32) wsptr[5]; tmp2 = (INT32) wsptr[3]; tmp3 = (INT32) wsptr[1]; z1 = tmp0 + tmp3; z2 = tmp1 + tmp2; z3 = tmp0 + tmp2; z4 = tmp1 + tmp3; z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ z3 += z5; z4 += z5; tmp0 += z1 + z3; tmp1 += z2 + z4; tmp2 += z2 + z3; tmp3 += z1 + z4; /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[7] = range_limit[(int) DESCALE(tmp10 - tmp3, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[1] = range_limit[(int) DESCALE(tmp11 + tmp2, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[6] = range_limit[(int) DESCALE(tmp11 - tmp2, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[2] = range_limit[(int) DESCALE(tmp12 + tmp1, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[5] = range_limit[(int) DESCALE(tmp12 - tmp1, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[3] = range_limit[(int) DESCALE(tmp13 + tmp0, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; outptr[4] = range_limit[(int) DESCALE(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3) & RANGE_MASK]; wsptr += DCTSIZE; /* advance pointer to next row */ } } #endif /* DCT_ISLOW_SUPPORTED */ htmldoc-1.8.27/jpeg/README0100664000212600000240000004675106713354635013560 0ustar mikeuserThe Independent JPEG Group's JPEG software ========================================== README for release 6b of 27-Mar-1998 ==================================== This distribution contains the sixth public release of the Independent JPEG Group's free JPEG software. You are welcome to redistribute this software and to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. Serious users of this software (particularly those incorporating it into larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to our electronic mailing list. Mailing list members are notified of updates and have a chance to participate in technical discussions, etc. This software is the work of Tom Lane, Philip Gladstone, Jim Boucher, Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG Group. IJG is not affiliated with the official ISO JPEG standards committee. DOCUMENTATION ROADMAP ===================== This file contains the following sections: OVERVIEW General description of JPEG and the IJG software. LEGAL ISSUES Copyright, lack of warranty, terms of distribution. REFERENCES Where to learn more about JPEG. ARCHIVE LOCATIONS Where to find newer versions of this software. RELATED SOFTWARE Other stuff you should get. FILE FORMAT WARS Software *not* to get. TO DO Plans for future IJG releases. Other documentation files in the distribution are: User documentation: install.doc How to configure and install the IJG software. usage.doc Usage instructions for cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom. *.1 Unix-style man pages for programs (same info as usage.doc). wizard.doc Advanced usage instructions for JPEG wizards only. change.log Version-to-version change highlights. Programmer and internal documentation: libjpeg.doc How to use the JPEG library in your own programs. example.c Sample code for calling the JPEG library. structure.doc Overview of the JPEG library's internal structure. filelist.doc Road map of IJG files. coderules.doc Coding style rules --- please read if you contribute code. Please read at least the files install.doc and usage.doc. Useful information can also be found in the JPEG FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find out where to obtain the FAQ article. If you want to understand how the JPEG code works, we suggest reading one or more of the REFERENCES, then looking at the documentation files (in roughly the order listed) before diving into the code. OVERVIEW ======== This package contains C software to implement JPEG image compression and decompression. JPEG (pronounced "jay-peg") is a standardized compression method for full-color and gray-scale images. JPEG is intended for compressing "real-world" scenes; line drawings, cartoons and other non-realistic images are not its strong suit. JPEG is lossy, meaning that the output image is not exactly identical to the input image. Hence you must not use JPEG if you have to have identical output bits. However, on typical photographic images, very good compression levels can be obtained with no visible change, and remarkably high compression levels are possible if you can tolerate a low-quality image. For more details, see the references, or just experiment with various compression settings. This software implements JPEG baseline, extended-sequential, and progressive compression processes. Provision is made for supporting all variants of these processes, although some uncommon parameter settings aren't implemented yet. For legal reasons, we are not distributing code for the arithmetic-coding variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting the hierarchical or lossless processes defined in the standard. We provide a set of library routines for reading and writing JPEG image files, plus two sample applications "cjpeg" and "djpeg", which use the library to perform conversion between JPEG and some other popular image file formats. The library is intended to be reused in other applications. In order to support file conversion and viewing software, we have included considerable functionality beyond the bare JPEG coding/decoding capability; for example, the color quantization modules are not strictly part of JPEG decoding, but they are essential for output to colormapped file formats or colormapped displays. These extra functions can be compiled out of the library if not required for a particular application. We have also included "jpegtran", a utility for lossless transcoding between different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple applications for inserting and extracting textual comments in JFIF files. The emphasis in designing this software has been on achieving portability and flexibility, while also making it fast enough to be useful. In particular, the software is not intended to be read as a tutorial on JPEG. (See the REFERENCES section for introductory material.) Rather, it is intended to be reliable, portable, industrial-strength code. We do not claim to have achieved that goal in every aspect of the software, but we strive for it. We welcome the use of this software as a component of commercial products. No royalty is required, but we do ask for an acknowledgement in product documentation, as described under LEGAL ISSUES. LEGAL ISSUES ============ In plain English: 1. We don't promise that this software works. (But if you find any bugs, please let us know!) 2. You can use this software for whatever you want. You don't have to pay us. 3. You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code. In legalese: The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. This software is copyright (C) 1991-1998, Thomas G. Lane. All Rights Reserved except as specified below. Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. ansi2knr.c is NOT covered by the above copyright and conditions, but instead by the usual distribution terms of the Free Software Foundation; principally, that you must include source code if you redistribute it. (See the file ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do. The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltconfig, ltmain.sh). Another support script, install-sh, is copyright by M.I.T. but is also freely distributable. It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining one or more licenses. For this reason, support for arithmetic coding has been removed from the free JPEG software. (Since arithmetic coding provides only a marginal gain over the unpatented Huffman mode, it is unlikely that very many implementations will support it.) So far as we are aware, there are no patent restrictions on the remaining code. The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders. We are required to state that "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated." REFERENCES ========== We highly recommend reading one or more of these references before trying to understand the innards of the JPEG software. The best short technical introduction to the JPEG compression algorithm is Wallace, Gregory K. "The JPEG Still Picture Compression Standard", Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. (Adjacent articles in that issue discuss MPEG motion picture compression, applications of JPEG, and related topics.) If you don't have the CACM issue handy, a PostScript file containing a revised version of Wallace's article is available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz. The file (actually a preprint for an article that appeared in IEEE Trans. Consumer Electronics) omits the sample images that appeared in CACM, but it includes corrections and some added material. Note: the Wallace article is copyright ACM and IEEE, and it may not be used for commercial purposes. A somewhat less technical, more leisurely introduction to JPEG can be found in "The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides good explanations and example C code for a multitude of compression methods including JPEG. It is an excellent source if you are comfortable reading C code but don't know much about data compression in general. The book's JPEG sample code is far from industrial-strength, but when you are ready to look at a full implementation, you've got one here... The best full description of JPEG is the textbook "JPEG Still Image Data Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG standards (DIS 10918-1 and draft DIS 10918-2). This is by far the most complete exposition of JPEG in existence, and we highly recommend it. The JPEG standard itself is not available electronically; you must order a paper copy through ISO or ITU. (Unless you feel a need to own a certified official copy, we recommend buying the Pennebaker and Mitchell book instead; it's much cheaper and includes a great deal of useful explanatory material.) In the USA, copies of the standard may be ordered from ANSI Sales at (212) 642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI doesn't take credit card orders, but Global does.) It's not cheap: as of 1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7% shipping/handling. The standard is divided into two parts, Part 1 being the actual specification, while Part 2 covers compliance testing methods. Part 1 is titled "Digital Compression and Coding of Continuous-tone Still Images, Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS 10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of Continuous-tone Still Images, Part 2: Compliance testing" and has document numbers ISO/IEC IS 10918-2, ITU-T T.83. Some extensions to the original JPEG standard are defined in JPEG Part 3, a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84. IJG currently does not support any Part 3 extensions. The JPEG standard does not specify all details of an interchangeable file format. For the omitted details we follow the "JFIF" conventions, revision 1.02. A copy of the JFIF spec is available from: Literature Department C-Cube Microsystems, Inc. 1778 McCarthy Blvd. Milpitas, CA 95035 phone (408) 944-6300, fax (408) 944-6314 A PostScript version of this document is available by FTP at ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz. There is also a plain text version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing the figures. The TIFF 6.0 file format specification can be obtained by FTP from ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 (Compression tag 7). Copies of this Note can be obtained from ftp.sgi.com or from ftp://ftp.uu.net/graphics/jpeg/. It is expected that the next revision of the TIFF spec will replace the 6.0 JPEG design with the Note's design. Although IJG's own code does not support TIFF/JPEG, the free libtiff library uses our library to implement TIFF/JPEG per the Note. libtiff is available from ftp://ftp.sgi.com/graphics/tiff/. ARCHIVE LOCATIONS ================= The "official" archive site for this software is ftp.uu.net (Internet address 192.48.96.9). The most recent released version can always be found there in directory graphics/jpeg. This particular version will be archived as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz. If you don't have direct Internet access, UUNET's archives are also available via UUCP; contact help@uunet.uu.net for information on retrieving files that way. Numerous Internet sites maintain copies of the UUNET files. However, only ftp.uu.net is guaranteed to have the latest official version. You can also obtain this software in DOS-compatible "zip" archive format from the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 "JPEG Tools". Again, these versions may sometimes lag behind the ftp.uu.net release. The JPEG FAQ (Frequently Asked Questions) article is a useful source of general information about JPEG. It is updated constantly and therefore is not included in this distribution. The FAQ is posted every two weeks to Usenet newsgroups comp.graphics.misc, news.answers, and other groups. It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/ and other news.answers archive sites, including the official news.answers archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu with body send usenet/news.answers/jpeg-faq/part1 send usenet/news.answers/jpeg-faq/part2 RELATED SOFTWARE ================ Numerous viewing and image manipulation programs now support JPEG. (Quite a few of them use this library to do so.) The JPEG FAQ described above lists some of the more popular free and shareware viewers, and tells where to obtain them on Internet. If you are on a Unix machine, we highly recommend Jef Poskanzer's free PBMPLUS software, which provides many useful operations on PPM-format image files. In particular, it can convert PPM images to and from a wide range of other formats, thus making cjpeg/djpeg considerably more useful. The latest version is distributed by the NetPBM group, and is available from numerous sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/. Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is; you are likely to have difficulty making it work on any non-Unix machine. A different free JPEG implementation, written by the PVRG group at Stanford, is available from ftp://havefun.stanford.edu/pub/jpeg/. This program is designed for research and experimentation rather than production use; it is slower, harder to use, and less portable than the IJG code, but it is easier to read and modify. Also, the PVRG code supports lossless JPEG, which we do not. (On the other hand, it doesn't do progressive JPEG.) FILE FORMAT WARS ================ Some JPEG programs produce files that are not compatible with our library. The root of the problem is that the ISO JPEG committee failed to specify a concrete file format. Some vendors "filled in the blanks" on their own, creating proprietary formats that no one else could read. (For example, none of the early commercial JPEG implementations for the Macintosh were able to exchange compressed files.) The file format we have adopted is called JFIF (see REFERENCES). This format has been agreed to by a number of major commercial JPEG vendors, and it has become the de facto standard. JFIF is a minimal or "low end" representation. We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF Technical Note #2) for "high end" applications that need to record a lot of additional data about an image. TIFF/JPEG is fairly new and not yet widely supported, unfortunately. The upcoming JPEG Part 3 standard defines a file format called SPIFF. SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should be able to read the most common variant of SPIFF. SPIFF has some technical advantages over JFIF, but its major claim to fame is simply that it is an official standard rather than an informal one. At this point it is unclear whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto standard. IJG intends to support SPIFF once the standard is frozen, but we have not decided whether it should become our default output format or not. (In any case, our decoder will remain capable of reading JFIF indefinitely.) Various proprietary file formats incorporating JPEG compression also exist. We have little or no sympathy for the existence of these formats. Indeed, one of the original reasons for developing this free software was to help force convergence on common, open format standards for JPEG files. Don't use a proprietary file format! TO DO ===== The major thrust for v7 will probably be improvement of visual quality. The current method for scaling the quantization tables is known not to be very good at low Q values. We also intend to investigate block boundary smoothing, "poor man's variable quantization", and other means of improving quality-vs-file-size performance without sacrificing compatibility. In future versions, we are considering supporting some of the upcoming JPEG Part 3 extensions --- principally, variable quantization and the SPIFF file format. As always, speeding things up is of great interest. Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net. htmldoc-1.8.27/jpeg/jdmerge.c0100664000212600000240000003313406713354635014450 0ustar mikeuser/* * jdmerge.c * * Copyright (C) 1994-1996, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains code for merged upsampling/color conversion. * * This file combines functions from jdsample.c and jdcolor.c; * read those files first to understand what's going on. * * When the chroma components are to be upsampled by simple replication * (ie, box filtering), we can save some work in color conversion by * calculating all the output pixels corresponding to a pair of chroma * samples at one time. In the conversion equations * R = Y + K1 * Cr * G = Y + K2 * Cb + K3 * Cr * B = Y + K4 * Cb * only the Y term varies among the group of pixels corresponding to a pair * of chroma samples, so the rest of the terms can be calculated just once. * At typical sampling ratios, this eliminates half or three-quarters of the * multiplications needed for color conversion. * * This file currently provides implementations for the following cases: * YCbCr => RGB color conversion only. * Sampling ratios of 2h1v or 2h2v. * No scaling needed at upsample time. * Corner-aligned (non-CCIR601) sampling alignment. * Other special cases could be added, but in most applications these are * the only common cases. (For uncommon cases we fall back on the more * general code in jdsample.c and jdcolor.c.) */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #ifdef UPSAMPLE_MERGING_SUPPORTED /* Private subobject */ typedef struct { struct jpeg_upsampler pub; /* public fields */ /* Pointer to routine to do actual upsampling/conversion of one row group */ JMETHOD(void, upmethod, (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf)); /* Private state for YCC->RGB conversion */ int * Cr_r_tab; /* => table for Cr to R conversion */ int * Cb_b_tab; /* => table for Cb to B conversion */ INT32 * Cr_g_tab; /* => table for Cr to G conversion */ INT32 * Cb_g_tab; /* => table for Cb to G conversion */ /* For 2:1 vertical sampling, we produce two output rows at a time. * We need a "spare" row buffer to hold the second output row if the * application provides just a one-row buffer; we also use the spare * to discard the dummy last row if the image height is odd. */ JSAMPROW spare_row; boolean spare_full; /* T if spare buffer is occupied */ JDIMENSION out_row_width; /* samples per output row */ JDIMENSION rows_to_go; /* counts rows remaining in image */ } my_upsampler; typedef my_upsampler * my_upsample_ptr; #define SCALEBITS 16 /* speediest right-shift on some machines */ #define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. * This is taken directly from jdcolor.c; see that file for more info. */ LOCAL(void) build_ycc_rgb_table (j_decompress_ptr cinfo) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; int i; INT32 x; SHIFT_TEMPS upsample->Cr_r_tab = (int *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(int)); upsample->Cb_b_tab = (int *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(int)); upsample->Cr_g_tab = (INT32 *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); upsample->Cb_g_tab = (INT32 *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ /* Cr=>R value is nearest int to 1.40200 * x */ upsample->Cr_r_tab[i] = (int) RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); /* Cb=>B value is nearest int to 1.77200 * x */ upsample->Cb_b_tab[i] = (int) RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); /* Cr=>G value is scaled-up -0.71414 * x */ upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; /* Cb=>G value is scaled-up -0.34414 * x */ /* We also add in ONE_HALF so that need not do it in inner loop */ upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; } } /* * Initialize for an upsampling pass. */ METHODDEF(void) start_pass_merged_upsample (j_decompress_ptr cinfo) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; /* Mark the spare buffer empty */ upsample->spare_full = FALSE; /* Initialize total-height counter for detecting bottom of image */ upsample->rows_to_go = cinfo->output_height; } /* * Control routine to do upsampling (and color conversion). * * The control routine just handles the row buffering considerations. */ METHODDEF(void) merged_2v_upsample (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) /* 2:1 vertical sampling case: may need a spare row. */ { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; JSAMPROW work_ptrs[2]; JDIMENSION num_rows; /* number of rows returned to caller */ if (upsample->spare_full) { /* If we have a spare row saved from a previous cycle, just return it. */ jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, 1, upsample->out_row_width); num_rows = 1; upsample->spare_full = FALSE; } else { /* Figure number of rows to return to caller. */ num_rows = 2; /* Not more than the distance to the end of the image. */ if (num_rows > upsample->rows_to_go) num_rows = upsample->rows_to_go; /* And not more than what the client can accept: */ out_rows_avail -= *out_row_ctr; if (num_rows > out_rows_avail) num_rows = out_rows_avail; /* Create output pointer array for upsampler. */ work_ptrs[0] = output_buf[*out_row_ctr]; if (num_rows > 1) { work_ptrs[1] = output_buf[*out_row_ctr + 1]; } else { work_ptrs[1] = upsample->spare_row; upsample->spare_full = TRUE; } /* Now do the upsampling. */ (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); } /* Adjust counts */ *out_row_ctr += num_rows; upsample->rows_to_go -= num_rows; /* When the buffer is emptied, declare this input row group consumed */ if (! upsample->spare_full) (*in_row_group_ctr)++; } METHODDEF(void) merged_1v_upsample (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, JDIMENSION in_row_groups_avail, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) /* 1:1 vertical sampling case: much easier, never need a spare row. */ { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; /* Just do the upsampling. */ (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, output_buf + *out_row_ctr); /* Adjust counts */ (*out_row_ctr)++; (*in_row_group_ctr)++; } /* * These are the routines invoked by the control routines to do * the actual upsampling/conversion. One row group is processed per call. * * Note: since we may be writing directly into application-supplied buffers, * we have to be honest about the output width; we can't assume the buffer * has been rounded up to an even width. */ /* * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical. */ METHODDEF(void) h2v1_merged_upsample (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; register int y, cred, cgreen, cblue; int cb, cr; register JSAMPROW outptr; JSAMPROW inptr0, inptr1, inptr2; JDIMENSION col; /* copy these pointers into registers if possible */ register JSAMPLE * range_limit = cinfo->sample_range_limit; int * Crrtab = upsample->Cr_r_tab; int * Cbbtab = upsample->Cb_b_tab; INT32 * Crgtab = upsample->Cr_g_tab; INT32 * Cbgtab = upsample->Cb_g_tab; SHIFT_TEMPS inptr0 = input_buf[0][in_row_group_ctr]; inptr1 = input_buf[1][in_row_group_ctr]; inptr2 = input_buf[2][in_row_group_ctr]; outptr = output_buf[0]; /* Loop for each pair of output pixels */ for (col = cinfo->output_width >> 1; col > 0; col--) { /* Do the chroma part of the calculation */ cb = GETJSAMPLE(*inptr1++); cr = GETJSAMPLE(*inptr2++); cred = Crrtab[cr]; cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); cblue = Cbbtab[cb]; /* Fetch 2 Y values and emit 2 pixels */ y = GETJSAMPLE(*inptr0++); outptr[RGB_RED] = range_limit[y + cred]; outptr[RGB_GREEN] = range_limit[y + cgreen]; outptr[RGB_BLUE] = range_limit[y + cblue]; outptr += RGB_PIXELSIZE; y = GETJSAMPLE(*inptr0++); outptr[RGB_RED] = range_limit[y + cred]; outptr[RGB_GREEN] = range_limit[y + cgreen]; outptr[RGB_BLUE] = range_limit[y + cblue]; outptr += RGB_PIXELSIZE; } /* If image width is odd, do the last output column separately */ if (cinfo->output_width & 1) { cb = GETJSAMPLE(*inptr1); cr = GETJSAMPLE(*inptr2); cred = Crrtab[cr]; cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); cblue = Cbbtab[cb]; y = GETJSAMPLE(*inptr0); outptr[RGB_RED] = range_limit[y + cred]; outptr[RGB_GREEN] = range_limit[y + cgreen]; outptr[RGB_BLUE] = range_limit[y + cblue]; } } /* * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical. */ METHODDEF(void) h2v2_merged_upsample (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, JSAMPARRAY output_buf) { my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; register int y, cred, cgreen, cblue; int cb, cr; register JSAMPROW outptr0, outptr1; JSAMPROW inptr00, inptr01, inptr1, inptr2; JDIMENSION col; /* copy these pointers into registers if possible */ register JSAMPLE * range_limit = cinfo->sample_range_limit; int * Crrtab = upsample->Cr_r_tab; int * Cbbtab = upsample->Cb_b_tab; INT32 * Crgtab = upsample->Cr_g_tab; INT32 * Cbgtab = upsample->Cb_g_tab; SHIFT_TEMPS inptr00 = input_buf[0][in_row_group_ctr*2]; inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; inptr1 = input_buf[1][in_row_group_ctr]; inptr2 = input_buf[2][in_row_group_ctr]; outptr0 = output_buf[0]; outptr1 = output_buf[1]; /* Loop for each group of output pixels */ for (col = cinfo->output_width >> 1; col > 0; col--) { /* Do the chroma part of the calculation */ cb = GETJSAMPLE(*inptr1++); cr = GETJSAMPLE(*inptr2++); cred = Crrtab[cr]; cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); cblue = Cbbtab[cb]; /* Fetch 4 Y values and emit 4 pixels */ y = GETJSAMPLE(*inptr00++); outptr0[RGB_RED] = range_limit[y + cred]; outptr0[RGB_GREEN] = range_limit[y + cgreen]; outptr0[RGB_BLUE] = range_limit[y + cblue]; outptr0 += RGB_PIXELSIZE; y = GETJSAMPLE(*inptr00++); outptr0[RGB_RED] = range_limit[y + cred]; outptr0[RGB_GREEN] = range_limit[y + cgreen]; outptr0[RGB_BLUE] = range_limit[y + cblue]; outptr0 += RGB_PIXELSIZE; y = GETJSAMPLE(*inptr01++); outptr1[RGB_RED] = range_limit[y + cred]; outptr1[RGB_GREEN] = range_limit[y + cgreen]; outptr1[RGB_BLUE] = range_limit[y + cblue]; outptr1 += RGB_PIXELSIZE; y = GETJSAMPLE(*inptr01++); outptr1[RGB_RED] = range_limit[y + cred]; outptr1[RGB_GREEN] = range_limit[y + cgreen]; outptr1[RGB_BLUE] = range_limit[y + cblue]; outptr1 += RGB_PIXELSIZE; } /* If image width is odd, do the last output column separately */ if (cinfo->output_width & 1) { cb = GETJSAMPLE(*inptr1); cr = GETJSAMPLE(*inptr2); cred = Crrtab[cr]; cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); cblue = Cbbtab[cb]; y = GETJSAMPLE(*inptr00); outptr0[RGB_RED] = range_limit[y + cred]; outptr0[RGB_GREEN] = range_limit[y + cgreen]; outptr0[RGB_BLUE] = range_limit[y + cblue]; y = GETJSAMPLE(*inptr01); outptr1[RGB_RED] = range_limit[y + cred]; outptr1[RGB_GREEN] = range_limit[y + cgreen]; outptr1[RGB_BLUE] = range_limit[y + cblue]; } } /* * Module initialization routine for merged upsampling/color conversion. * * NB: this is called under the conditions determined by use_merged_upsample() * in jdmaster.c. That routine MUST correspond to the actual capabilities * of this module; no safety checks are made here. */ GLOBAL(void) jinit_merged_upsampler (j_decompress_ptr cinfo) { my_upsample_ptr upsample; upsample = (my_upsample_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_upsampler)); cinfo->upsample = (struct jpeg_upsampler *) upsample; upsample->pub.start_pass = start_pass_merged_upsample; upsample->pub.need_context_rows = FALSE; upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; if (cinfo->max_v_samp_factor == 2) { upsample->pub.upsample = merged_2v_upsample; upsample->upmethod = h2v2_merged_upsample; /* Allocate a spare row buffer */ upsample->spare_row = (JSAMPROW) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, (size_t) (upsample->out_row_width * SIZEOF(JSAMPLE))); } else { upsample->pub.upsample = merged_1v_upsample; upsample->upmethod = h2v1_merged_upsample; /* No spare row needed */ upsample->spare_row = NULL; } build_ycc_rgb_table(cinfo); } #endif /* UPSAMPLE_MERGING_SUPPORTED */ htmldoc-1.8.27/jpeg/jccoefct.c0100664000212600000240000004002006713354635014603 0ustar mikeuser/* * jccoefct.c * * Copyright (C) 1994-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the coefficient buffer controller for compression. * This controller is the top level of the JPEG compressor proper. * The coefficient buffer lies between forward-DCT and entropy encoding steps. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* We use a full-image coefficient buffer when doing Huffman optimization, * and also for writing multiple-scan JPEG files. In all cases, the DCT * step is run during the first pass, and subsequent passes need only read * the buffered coefficients. */ #ifdef ENTROPY_OPT_SUPPORTED #define FULL_COEF_BUFFER_SUPPORTED #else #ifdef C_MULTISCAN_FILES_SUPPORTED #define FULL_COEF_BUFFER_SUPPORTED #endif #endif /* Private buffer controller object */ typedef struct { struct jpeg_c_coef_controller pub; /* public fields */ JDIMENSION iMCU_row_num; /* iMCU row # within image */ JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ int MCU_vert_offset; /* counts MCU rows within iMCU row */ int MCU_rows_per_iMCU_row; /* number of such rows needed */ /* For single-pass compression, it's sufficient to buffer just one MCU * (although this may prove a bit slow in practice). We allocate a * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each * MCU constructed and sent. (On 80x86, the workspace is FAR even though * it's not really very big; this is to keep the module interfaces unchanged * when a large coefficient buffer is necessary.) * In multi-pass modes, this array points to the current MCU's blocks * within the virtual arrays. */ JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; /* In multi-pass modes, we need a virtual block array for each component. */ jvirt_barray_ptr whole_image[MAX_COMPONENTS]; } my_coef_controller; typedef my_coef_controller * my_coef_ptr; /* Forward declarations */ METHODDEF(boolean) compress_data JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); #ifdef FULL_COEF_BUFFER_SUPPORTED METHODDEF(boolean) compress_first_pass JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); METHODDEF(boolean) compress_output JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); #endif LOCAL(void) start_iMCU_row (j_compress_ptr cinfo) /* Reset within-iMCU-row counters for a new row */ { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; /* In an interleaved scan, an MCU row is the same as an iMCU row. * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. * But at the bottom of the image, process only what's left. */ if (cinfo->comps_in_scan > 1) { coef->MCU_rows_per_iMCU_row = 1; } else { if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; else coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; } coef->mcu_ctr = 0; coef->MCU_vert_offset = 0; } /* * Initialize for a processing pass. */ METHODDEF(void) start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; coef->iMCU_row_num = 0; start_iMCU_row(cinfo); switch (pass_mode) { case JBUF_PASS_THRU: if (coef->whole_image[0] != NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); coef->pub.compress_data = compress_data; break; #ifdef FULL_COEF_BUFFER_SUPPORTED case JBUF_SAVE_AND_PASS: if (coef->whole_image[0] == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); coef->pub.compress_data = compress_first_pass; break; case JBUF_CRANK_DEST: if (coef->whole_image[0] == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); coef->pub.compress_data = compress_output; break; #endif default: ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); break; } } /* * Process some data in the single-pass case. * We process the equivalent of one fully interleaved MCU row ("iMCU" row) * per call, ie, v_samp_factor block rows for each component in the image. * Returns TRUE if the iMCU row is completed, FALSE if suspended. * * NB: input_buf contains a plane for each component in image, * which we index according to the component's SOF position. */ METHODDEF(boolean) compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION MCU_col_num; /* index of current MCU within row */ JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; int blkn, bi, ci, yindex, yoffset, blockcnt; JDIMENSION ypos, xpos; jpeg_component_info *compptr; /* Loop to write as much as one whole iMCU row */ for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; yoffset++) { for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col; MCU_col_num++) { /* Determine where data comes from in input_buf and do the DCT thing. * Each call on forward_DCT processes a horizontal row of DCT blocks * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks * sequentially. Dummy blocks at the right or bottom edge are filled in * specially. The data in them does not matter for image reconstruction, * so we fill them with values that will encode to the smallest amount of * data, viz: all zeroes in the AC entries, DC entries equal to previous * block's DC value. (Thanks to Thomas Kinsman for this idea.) */ blkn = 0; for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width : compptr->last_col_width; xpos = MCU_col_num * compptr->MCU_sample_width; ypos = yoffset * DCTSIZE; /* ypos == (yoffset+yindex) * DCTSIZE */ for (yindex = 0; yindex < compptr->MCU_height; yindex++) { if (coef->iMCU_row_num < last_iMCU_row || yoffset+yindex < compptr->last_row_height) { (*cinfo->fdct->forward_DCT) (cinfo, compptr, input_buf[compptr->component_index], coef->MCU_buffer[blkn], ypos, xpos, (JDIMENSION) blockcnt); if (blockcnt < compptr->MCU_width) { /* Create some dummy blocks at the right edge of the image. */ jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt], (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); for (bi = blockcnt; bi < compptr->MCU_width; bi++) { coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0]; } } } else { /* Create a row of dummy blocks at the bottom of the image. */ jzero_far((void FAR *) coef->MCU_buffer[blkn], compptr->MCU_width * SIZEOF(JBLOCK)); for (bi = 0; bi < compptr->MCU_width; bi++) { coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0]; } } blkn += compptr->MCU_width; ypos += DCTSIZE; } } /* Try to write the MCU. In event of a suspension failure, we will * re-DCT the MCU on restart (a bit inefficient, could be fixed...) */ if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { /* Suspension forced; update state counters and exit */ coef->MCU_vert_offset = yoffset; coef->mcu_ctr = MCU_col_num; return FALSE; } } /* Completed an MCU row, but perhaps not an iMCU row */ coef->mcu_ctr = 0; } /* Completed the iMCU row, advance counters for next one */ coef->iMCU_row_num++; start_iMCU_row(cinfo); return TRUE; } #ifdef FULL_COEF_BUFFER_SUPPORTED /* * Process some data in the first pass of a multi-pass case. * We process the equivalent of one fully interleaved MCU row ("iMCU" row) * per call, ie, v_samp_factor block rows for each component in the image. * This amount of data is read from the source buffer, DCT'd and quantized, * and saved into the virtual arrays. We also generate suitable dummy blocks * as needed at the right and lower edges. (The dummy blocks are constructed * in the virtual arrays, which have been padded appropriately.) This makes * it possible for subsequent passes not to worry about real vs. dummy blocks. * * We must also emit the data to the entropy encoder. This is conveniently * done by calling compress_output() after we've loaded the current strip * of the virtual arrays. * * NB: input_buf contains a plane for each component in image. All * components are DCT'd and loaded into the virtual arrays in this pass. * However, it may be that only a subset of the components are emitted to * the entropy encoder during this first pass; be careful about looking * at the scan-dependent variables (MCU dimensions, etc). */ METHODDEF(boolean) compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; JDIMENSION blocks_across, MCUs_across, MCUindex; int bi, ci, h_samp_factor, block_row, block_rows, ndummy; JCOEF lastDC; jpeg_component_info *compptr; JBLOCKARRAY buffer; JBLOCKROW thisblockrow, lastblockrow; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Align the virtual buffer for this component. */ buffer = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[ci], coef->iMCU_row_num * compptr->v_samp_factor, (JDIMENSION) compptr->v_samp_factor, TRUE); /* Count non-dummy DCT block rows in this iMCU row. */ if (coef->iMCU_row_num < last_iMCU_row) block_rows = compptr->v_samp_factor; else { /* NB: can't use last_row_height here, since may not be set! */ block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); if (block_rows == 0) block_rows = compptr->v_samp_factor; } blocks_across = compptr->width_in_blocks; h_samp_factor = compptr->h_samp_factor; /* Count number of dummy blocks to be added at the right margin. */ ndummy = (int) (blocks_across % h_samp_factor); if (ndummy > 0) ndummy = h_samp_factor - ndummy; /* Perform DCT for all non-dummy blocks in this iMCU row. Each call * on forward_DCT processes a complete horizontal row of DCT blocks. */ for (block_row = 0; block_row < block_rows; block_row++) { thisblockrow = buffer[block_row]; (*cinfo->fdct->forward_DCT) (cinfo, compptr, input_buf[ci], thisblockrow, (JDIMENSION) (block_row * DCTSIZE), (JDIMENSION) 0, blocks_across); if (ndummy > 0) { /* Create dummy blocks at the right edge of the image. */ thisblockrow += blocks_across; /* => first dummy block */ jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); lastDC = thisblockrow[-1][0]; for (bi = 0; bi < ndummy; bi++) { thisblockrow[bi][0] = lastDC; } } } /* If at end of image, create dummy block rows as needed. * The tricky part here is that within each MCU, we want the DC values * of the dummy blocks to match the last real block's DC value. * This squeezes a few more bytes out of the resulting file... */ if (coef->iMCU_row_num == last_iMCU_row) { blocks_across += ndummy; /* include lower right corner */ MCUs_across = blocks_across / h_samp_factor; for (block_row = block_rows; block_row < compptr->v_samp_factor; block_row++) { thisblockrow = buffer[block_row]; lastblockrow = buffer[block_row-1]; jzero_far((void FAR *) thisblockrow, (size_t) (blocks_across * SIZEOF(JBLOCK))); for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) { lastDC = lastblockrow[h_samp_factor-1][0]; for (bi = 0; bi < h_samp_factor; bi++) { thisblockrow[bi][0] = lastDC; } thisblockrow += h_samp_factor; /* advance to next MCU in row */ lastblockrow += h_samp_factor; } } } } /* NB: compress_output will increment iMCU_row_num if successful. * A suspension return will result in redoing all the work above next time. */ /* Emit data to the entropy encoder, sharing code with subsequent passes */ return compress_output(cinfo, input_buf); } /* * Process some data in subsequent passes of a multi-pass case. * We process the equivalent of one fully interleaved MCU row ("iMCU" row) * per call, ie, v_samp_factor block rows for each component in the scan. * The data is obtained from the virtual arrays and fed to the entropy coder. * Returns TRUE if the iMCU row is completed, FALSE if suspended. * * NB: input_buf is ignored; it is likely to be a NULL pointer. */ METHODDEF(boolean) compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION MCU_col_num; /* index of current MCU within row */ int blkn, ci, xindex, yindex, yoffset; JDIMENSION start_col; JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; JBLOCKROW buffer_ptr; jpeg_component_info *compptr; /* Align the virtual buffers for the components used in this scan. * NB: during first pass, this is safe only because the buffers will * already be aligned properly, so jmemmgr.c won't need to do any I/O. */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; buffer[ci] = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], coef->iMCU_row_num * compptr->v_samp_factor, (JDIMENSION) compptr->v_samp_factor, FALSE); } /* Loop to process one whole iMCU row */ for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; yoffset++) { for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; MCU_col_num++) { /* Construct list of pointers to DCT blocks belonging to this MCU */ blkn = 0; /* index of current DCT block within MCU */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; start_col = MCU_col_num * compptr->MCU_width; for (yindex = 0; yindex < compptr->MCU_height; yindex++) { buffer_ptr = buffer[ci][yindex+yoffset] + start_col; for (xindex = 0; xindex < compptr->MCU_width; xindex++) { coef->MCU_buffer[blkn++] = buffer_ptr++; } } } /* Try to write the MCU. */ if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { /* Suspension forced; update state counters and exit */ coef->MCU_vert_offset = yoffset; coef->mcu_ctr = MCU_col_num; return FALSE; } } /* Completed an MCU row, but perhaps not an iMCU row */ coef->mcu_ctr = 0; } /* Completed the iMCU row, advance counters for next one */ coef->iMCU_row_num++; start_iMCU_row(cinfo); return TRUE; } #endif /* FULL_COEF_BUFFER_SUPPORTED */ /* * Initialize coefficient buffer controller. */ GLOBAL(void) jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer) { my_coef_ptr coef; coef = (my_coef_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_coef_controller)); cinfo->coef = (struct jpeg_c_coef_controller *) coef; coef->pub.start_pass = start_pass_coef; /* Create the coefficient buffer. */ if (need_full_buffer) { #ifdef FULL_COEF_BUFFER_SUPPORTED /* Allocate a full-image virtual array for each component, */ /* padded to a multiple of samp_factor DCT blocks in each direction. */ int ci; jpeg_component_info *compptr; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, (JDIMENSION) jround_up((long) compptr->width_in_blocks, (long) compptr->h_samp_factor), (JDIMENSION) jround_up((long) compptr->height_in_blocks, (long) compptr->v_samp_factor), (JDIMENSION) compptr->v_samp_factor); } #else ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); #endif } else { /* We only need a single-MCU buffer. */ JBLOCKROW buffer; int i; buffer = (JBLOCKROW) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { coef->MCU_buffer[i] = buffer + i; } coef->whole_image[0] = NULL; /* flag for no virtual arrays */ } } htmldoc-1.8.27/jpeg/jdcoefct.c0100664000212600000240000006110306713354635014611 0ustar mikeuser/* * jdcoefct.c * * Copyright (C) 1994-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains the coefficient buffer controller for decompression. * This controller is the top level of the JPEG decompressor proper. * The coefficient buffer lies between entropy decoding and inverse-DCT steps. * * In buffered-image mode, this controller is the interface between * input-oriented processing and output-oriented processing. * Also, the input side (only) is used when reading a file for transcoding. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Block smoothing is only applicable for progressive JPEG, so: */ #ifndef D_PROGRESSIVE_SUPPORTED #undef BLOCK_SMOOTHING_SUPPORTED #endif /* Private buffer controller object */ typedef struct { struct jpeg_d_coef_controller pub; /* public fields */ /* These variables keep track of the current location of the input side. */ /* cinfo->input_iMCU_row is also used for this. */ JDIMENSION MCU_ctr; /* counts MCUs processed in current row */ int MCU_vert_offset; /* counts MCU rows within iMCU row */ int MCU_rows_per_iMCU_row; /* number of such rows needed */ /* The output side's location is represented by cinfo->output_iMCU_row. */ /* In single-pass modes, it's sufficient to buffer just one MCU. * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks, * and let the entropy decoder write into that workspace each time. * (On 80x86, the workspace is FAR even though it's not really very big; * this is to keep the module interfaces unchanged when a large coefficient * buffer is necessary.) * In multi-pass modes, this array points to the current MCU's blocks * within the virtual arrays; it is used only by the input side. */ JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU]; #ifdef D_MULTISCAN_FILES_SUPPORTED /* In multi-pass modes, we need a virtual block array for each component. */ jvirt_barray_ptr whole_image[MAX_COMPONENTS]; #endif #ifdef BLOCK_SMOOTHING_SUPPORTED /* When doing block smoothing, we latch coefficient Al values here */ int * coef_bits_latch; #define SAVED_COEFS 6 /* we save coef_bits[0..5] */ #endif } my_coef_controller; typedef my_coef_controller * my_coef_ptr; /* Forward declarations */ METHODDEF(int) decompress_onepass JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); #ifdef D_MULTISCAN_FILES_SUPPORTED METHODDEF(int) decompress_data JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); #endif #ifdef BLOCK_SMOOTHING_SUPPORTED LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo)); METHODDEF(int) decompress_smooth_data JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); #endif LOCAL(void) start_iMCU_row (j_decompress_ptr cinfo) /* Reset within-iMCU-row counters for a new row (input side) */ { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; /* In an interleaved scan, an MCU row is the same as an iMCU row. * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. * But at the bottom of the image, process only what's left. */ if (cinfo->comps_in_scan > 1) { coef->MCU_rows_per_iMCU_row = 1; } else { if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; else coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; } coef->MCU_ctr = 0; coef->MCU_vert_offset = 0; } /* * Initialize for an input processing pass. */ METHODDEF(void) start_input_pass (j_decompress_ptr cinfo) { cinfo->input_iMCU_row = 0; start_iMCU_row(cinfo); } /* * Initialize for an output processing pass. */ METHODDEF(void) start_output_pass (j_decompress_ptr cinfo) { #ifdef BLOCK_SMOOTHING_SUPPORTED my_coef_ptr coef = (my_coef_ptr) cinfo->coef; /* If multipass, check to see whether to use block smoothing on this pass */ if (coef->pub.coef_arrays != NULL) { if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) coef->pub.decompress_data = decompress_smooth_data; else coef->pub.decompress_data = decompress_data; } #endif cinfo->output_iMCU_row = 0; } /* * Decompress and return some data in the single-pass case. * Always attempts to emit one fully interleaved MCU row ("iMCU" row). * Input and output must run in lockstep since we have only a one-MCU buffer. * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. * * NB: output_buf contains a plane for each component in image, * which we index according to the component's SOF position. */ METHODDEF(int) decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION MCU_col_num; /* index of current MCU within row */ JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; int blkn, ci, xindex, yindex, yoffset, useful_width; JSAMPARRAY output_ptr; JDIMENSION start_col, output_col; jpeg_component_info *compptr; inverse_DCT_method_ptr inverse_DCT; /* Loop to process as much as one whole iMCU row */ for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; yoffset++) { for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; MCU_col_num++) { /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */ jzero_far((void FAR *) coef->MCU_buffer[0], (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { /* Suspension forced; update state counters and exit */ coef->MCU_vert_offset = yoffset; coef->MCU_ctr = MCU_col_num; return JPEG_SUSPENDED; } /* Determine where data should go in output_buf and do the IDCT thing. * We skip dummy blocks at the right and bottom edges (but blkn gets * incremented past them!). Note the inner loop relies on having * allocated the MCU_buffer[] blocks sequentially. */ blkn = 0; /* index of current DCT block within MCU */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; /* Don't bother to IDCT an uninteresting component. */ if (! compptr->component_needed) { blkn += compptr->MCU_blocks; continue; } inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width : compptr->last_col_width; output_ptr = output_buf[compptr->component_index] + yoffset * compptr->DCT_scaled_size; start_col = MCU_col_num * compptr->MCU_sample_width; for (yindex = 0; yindex < compptr->MCU_height; yindex++) { if (cinfo->input_iMCU_row < last_iMCU_row || yoffset+yindex < compptr->last_row_height) { output_col = start_col; for (xindex = 0; xindex < useful_width; xindex++) { (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) coef->MCU_buffer[blkn+xindex], output_ptr, output_col); output_col += compptr->DCT_scaled_size; } } blkn += compptr->MCU_width; output_ptr += compptr->DCT_scaled_size; } } } /* Completed an MCU row, but perhaps not an iMCU row */ coef->MCU_ctr = 0; } /* Completed the iMCU row, advance counters for next one */ cinfo->output_iMCU_row++; if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { start_iMCU_row(cinfo); return JPEG_ROW_COMPLETED; } /* Completed the scan */ (*cinfo->inputctl->finish_input_pass) (cinfo); return JPEG_SCAN_COMPLETED; } /* * Dummy consume-input routine for single-pass operation. */ METHODDEF(int) dummy_consume_data (j_decompress_ptr cinfo) { return JPEG_SUSPENDED; /* Always indicate nothing was done */ } #ifdef D_MULTISCAN_FILES_SUPPORTED /* * Consume input data and store it in the full-image coefficient buffer. * We read as much as one fully interleaved MCU row ("iMCU" row) per call, * ie, v_samp_factor block rows for each component in the scan. * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. */ METHODDEF(int) consume_data (j_decompress_ptr cinfo) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION MCU_col_num; /* index of current MCU within row */ int blkn, ci, xindex, yindex, yoffset; JDIMENSION start_col; JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; JBLOCKROW buffer_ptr; jpeg_component_info *compptr; /* Align the virtual buffers for the components used in this scan. */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; buffer[ci] = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], cinfo->input_iMCU_row * compptr->v_samp_factor, (JDIMENSION) compptr->v_samp_factor, TRUE); /* Note: entropy decoder expects buffer to be zeroed, * but this is handled automatically by the memory manager * because we requested a pre-zeroed array. */ } /* Loop to process one whole iMCU row */ for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; yoffset++) { for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row; MCU_col_num++) { /* Construct list of pointers to DCT blocks belonging to this MCU */ blkn = 0; /* index of current DCT block within MCU */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; start_col = MCU_col_num * compptr->MCU_width; for (yindex = 0; yindex < compptr->MCU_height; yindex++) { buffer_ptr = buffer[ci][yindex+yoffset] + start_col; for (xindex = 0; xindex < compptr->MCU_width; xindex++) { coef->MCU_buffer[blkn++] = buffer_ptr++; } } } /* Try to fetch the MCU. */ if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { /* Suspension forced; update state counters and exit */ coef->MCU_vert_offset = yoffset; coef->MCU_ctr = MCU_col_num; return JPEG_SUSPENDED; } } /* Completed an MCU row, but perhaps not an iMCU row */ coef->MCU_ctr = 0; } /* Completed the iMCU row, advance counters for next one */ if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { start_iMCU_row(cinfo); return JPEG_ROW_COMPLETED; } /* Completed the scan */ (*cinfo->inputctl->finish_input_pass) (cinfo); return JPEG_SCAN_COMPLETED; } /* * Decompress and return some data in the multi-pass case. * Always attempts to emit one fully interleaved MCU row ("iMCU" row). * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. * * NB: output_buf contains a plane for each component in image. */ METHODDEF(int) decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; JDIMENSION block_num; int ci, block_row, block_rows; JBLOCKARRAY buffer; JBLOCKROW buffer_ptr; JSAMPARRAY output_ptr; JDIMENSION output_col; jpeg_component_info *compptr; inverse_DCT_method_ptr inverse_DCT; /* Force some input to be done if we are getting ahead of the input. */ while (cinfo->input_scan_number < cinfo->output_scan_number || (cinfo->input_scan_number == cinfo->output_scan_number && cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) { if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) return JPEG_SUSPENDED; } /* OK, output from the virtual arrays. */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Don't bother to IDCT an uninteresting component. */ if (! compptr->component_needed) continue; /* Align the virtual buffer for this component. */ buffer = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[ci], cinfo->output_iMCU_row * compptr->v_samp_factor, (JDIMENSION) compptr->v_samp_factor, FALSE); /* Count non-dummy DCT block rows in this iMCU row. */ if (cinfo->output_iMCU_row < last_iMCU_row) block_rows = compptr->v_samp_factor; else { /* NB: can't use last_row_height here; it is input-side-dependent! */ block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); if (block_rows == 0) block_rows = compptr->v_samp_factor; } inverse_DCT = cinfo->idct->inverse_DCT[ci]; output_ptr = output_buf[ci]; /* Loop over all DCT blocks to be processed. */ for (block_row = 0; block_row < block_rows; block_row++) { buffer_ptr = buffer[block_row]; output_col = 0; for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr, output_ptr, output_col); buffer_ptr++; output_col += compptr->DCT_scaled_size; } output_ptr += compptr->DCT_scaled_size; } } if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) return JPEG_ROW_COMPLETED; return JPEG_SCAN_COMPLETED; } #endif /* D_MULTISCAN_FILES_SUPPORTED */ #ifdef BLOCK_SMOOTHING_SUPPORTED /* * This code applies interblock smoothing as described by section K.8 * of the JPEG standard: the first 5 AC coefficients are estimated from * the DC values of a DCT block and its 8 neighboring blocks. * We apply smoothing only for progressive JPEG decoding, and only if * the coefficients it can estimate are not yet known to full precision. */ /* Natural-order array positions of the first 5 zigzag-order coefficients */ #define Q01_POS 1 #define Q10_POS 8 #define Q20_POS 16 #define Q11_POS 9 #define Q02_POS 2 /* * Determine whether block smoothing is applicable and safe. * We also latch the current states of the coef_bits[] entries for the * AC coefficients; otherwise, if the input side of the decompressor * advances into a new scan, we might think the coefficients are known * more accurately than they really are. */ LOCAL(boolean) smoothing_ok (j_decompress_ptr cinfo) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; boolean smoothing_useful = FALSE; int ci, coefi; jpeg_component_info *compptr; JQUANT_TBL * qtable; int * coef_bits; int * coef_bits_latch; if (! cinfo->progressive_mode || cinfo->coef_bits == NULL) return FALSE; /* Allocate latch area if not already done */ if (coef->coef_bits_latch == NULL) coef->coef_bits_latch = (int *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * (SAVED_COEFS * SIZEOF(int))); coef_bits_latch = coef->coef_bits_latch; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* All components' quantization values must already be latched. */ if ((qtable = compptr->quant_table) == NULL) return FALSE; /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */ if (qtable->quantval[0] == 0 || qtable->quantval[Q01_POS] == 0 || qtable->quantval[Q10_POS] == 0 || qtable->quantval[Q20_POS] == 0 || qtable->quantval[Q11_POS] == 0 || qtable->quantval[Q02_POS] == 0) return FALSE; /* DC values must be at least partly known for all components. */ coef_bits = cinfo->coef_bits[ci]; if (coef_bits[0] < 0) return FALSE; /* Block smoothing is helpful if some AC coefficients remain inaccurate. */ for (coefi = 1; coefi <= 5; coefi++) { coef_bits_latch[coefi] = coef_bits[coefi]; if (coef_bits[coefi] != 0) smoothing_useful = TRUE; } coef_bits_latch += SAVED_COEFS; } return smoothing_useful; } /* * Variant of decompress_data for use when doing block smoothing. */ METHODDEF(int) decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) { my_coef_ptr coef = (my_coef_ptr) cinfo->coef; JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; JDIMENSION block_num, last_block_column; int ci, block_row, block_rows, access_rows; JBLOCKARRAY buffer; JBLOCKROW buffer_ptr, prev_block_row, next_block_row; JSAMPARRAY output_ptr; JDIMENSION output_col; jpeg_component_info *compptr; inverse_DCT_method_ptr inverse_DCT; boolean first_row, last_row; JBLOCK workspace; int *coef_bits; JQUANT_TBL *quanttbl; INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; int Al, pred; /* Force some input to be done if we are getting ahead of the input. */ while (cinfo->input_scan_number <= cinfo->output_scan_number && ! cinfo->inputctl->eoi_reached) { if (cinfo->input_scan_number == cinfo->output_scan_number) { /* If input is working on current scan, we ordinarily want it to * have completed the current row. But if input scan is DC, * we want it to keep one row ahead so that next block row's DC * values are up to date. */ JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0; if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta) break; } if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) return JPEG_SUSPENDED; } /* OK, output from the virtual arrays. */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { /* Don't bother to IDCT an uninteresting component. */ if (! compptr->component_needed) continue; /* Count non-dummy DCT block rows in this iMCU row. */ if (cinfo->output_iMCU_row < last_iMCU_row) { block_rows = compptr->v_samp_factor; access_rows = block_rows * 2; /* this and next iMCU row */ last_row = FALSE; } else { /* NB: can't use last_row_height here; it is input-side-dependent! */ block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); if (block_rows == 0) block_rows = compptr->v_samp_factor; access_rows = block_rows; /* this iMCU row only */ last_row = TRUE; } /* Align the virtual buffer for this component. */ if (cinfo->output_iMCU_row > 0) { access_rows += compptr->v_samp_factor; /* prior iMCU row too */ buffer = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[ci], (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor, (JDIMENSION) access_rows, FALSE); buffer += compptr->v_samp_factor; /* point to current iMCU row */ first_row = FALSE; } else { buffer = (*cinfo->mem->access_virt_barray) ((j_common_ptr) cinfo, coef->whole_image[ci], (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE); first_row = TRUE; } /* Fetch component-dependent info */ coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); quanttbl = compptr->quant_table; Q00 = quanttbl->quantval[0]; Q01 = quanttbl->quantval[Q01_POS]; Q10 = quanttbl->quantval[Q10_POS]; Q20 = quanttbl->quantval[Q20_POS]; Q11 = quanttbl->quantval[Q11_POS]; Q02 = quanttbl->quantval[Q02_POS]; inverse_DCT = cinfo->idct->inverse_DCT[ci]; output_ptr = output_buf[ci]; /* Loop over all DCT blocks to be processed. */ for (block_row = 0; block_row < block_rows; block_row++) { buffer_ptr = buffer[block_row]; if (first_row && block_row == 0) prev_block_row = buffer_ptr; else prev_block_row = buffer[block_row-1]; if (last_row && block_row == block_rows-1) next_block_row = buffer_ptr; else next_block_row = buffer[block_row+1]; /* We fetch the surrounding DC values using a sliding-register approach. * Initialize all nine here so as to do the right thing on narrow pics. */ DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; DC7 = DC8 = DC9 = (int) next_block_row[0][0]; output_col = 0; last_block_column = compptr->width_in_blocks - 1; for (block_num = 0; block_num <= last_block_column; block_num++) { /* Fetch current DCT block into workspace so we can modify it. */ jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); /* Update DC values */ if (block_num < last_block_column) { DC3 = (int) prev_block_row[1][0]; DC6 = (int) buffer_ptr[1][0]; DC9 = (int) next_block_row[1][0]; } /* Compute coefficient estimates per K.8. * An estimate is applied only if coefficient is still zero, * and is not known to be fully accurate. */ /* AC01 */ if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) { num = 36 * Q00 * (DC4 - DC6); if (num >= 0) { pred = (int) (((Q01<<7) + num) / (Q01<<8)); if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { pred = (int) (((Q10<<7) + num) / (Q10<<8)); if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { pred = (int) (((Q20<<7) + num) / (Q20<<8)); if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { pred = (int) (((Q11<<7) + num) / (Q11<<8)); if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { pred = (int) (((Q02<<7) + num) / (Q02<<8)); if (Al > 0 && pred >= (1< 0 && pred >= (1<DCT_scaled_size; } output_ptr += compptr->DCT_scaled_size; } } if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) return JPEG_ROW_COMPLETED; return JPEG_SCAN_COMPLETED; } #endif /* BLOCK_SMOOTHING_SUPPORTED */ /* * Initialize coefficient buffer controller. */ GLOBAL(void) jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) { my_coef_ptr coef; coef = (my_coef_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_coef_controller)); cinfo->coef = (struct jpeg_d_coef_controller *) coef; coef->pub.start_input_pass = start_input_pass; coef->pub.start_output_pass = start_output_pass; #ifdef BLOCK_SMOOTHING_SUPPORTED coef->coef_bits_latch = NULL; #endif /* Create the coefficient buffer. */ if (need_full_buffer) { #ifdef D_MULTISCAN_FILES_SUPPORTED /* Allocate a full-image virtual array for each component, */ /* padded to a multiple of samp_factor DCT blocks in each direction. */ /* Note we ask for a pre-zeroed array. */ int ci, access_rows; jpeg_component_info *compptr; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { access_rows = compptr->v_samp_factor; #ifdef BLOCK_SMOOTHING_SUPPORTED /* If block smoothing could be used, need a bigger window */ if (cinfo->progressive_mode) access_rows *= 3; #endif coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) ((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE, (JDIMENSION) jround_up((long) compptr->width_in_blocks, (long) compptr->h_samp_factor), (JDIMENSION) jround_up((long) compptr->height_in_blocks, (long) compptr->v_samp_factor), (JDIMENSION) access_rows); } coef->pub.consume_data = consume_data; coef->pub.decompress_data = decompress_data; coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ #else ERREXIT(cinfo, JERR_NOT_COMPILED); #endif } else { /* We only need a single-MCU buffer. */ JBLOCKROW buffer; int i; buffer = (JBLOCKROW) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { coef->MCU_buffer[i] = buffer + i; } coef->pub.consume_data = dummy_consume_data; coef->pub.decompress_data = decompress_onepass; coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ } } htmldoc-1.8.27/jpeg/jcomapi.c0100664000212600000240000000604606713354635014457 0ustar mikeuser/* * jcomapi.c * * Copyright (C) 1994-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains application interface routines that are used for both * compression and decompression. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* * Abort processing of a JPEG compression or decompression operation, * but don't destroy the object itself. * * For this, we merely clean up all the nonpermanent memory pools. * Note that temp files (virtual arrays) are not allowed to belong to * the permanent pool, so we will be able to close all temp files here. * Closing a data source or destination, if necessary, is the application's * responsibility. */ GLOBAL(void) jpeg_abort (j_common_ptr cinfo) { int pool; /* Do nothing if called on a not-initialized or destroyed JPEG object. */ if (cinfo->mem == NULL) return; /* Releasing pools in reverse order might help avoid fragmentation * with some (brain-damaged) malloc libraries. */ for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { (*cinfo->mem->free_pool) (cinfo, pool); } /* Reset overall state for possible reuse of object */ if (cinfo->is_decompressor) { cinfo->global_state = DSTATE_START; /* Try to keep application from accessing now-deleted marker list. * A bit kludgy to do it here, but this is the most central place. */ ((j_decompress_ptr) cinfo)->marker_list = NULL; } else { cinfo->global_state = CSTATE_START; } } /* * Destruction of a JPEG object. * * Everything gets deallocated except the master jpeg_compress_struct itself * and the error manager struct. Both of these are supplied by the application * and must be freed, if necessary, by the application. (Often they are on * the stack and so don't need to be freed anyway.) * Closing a data source or destination, if necessary, is the application's * responsibility. */ GLOBAL(void) jpeg_destroy (j_common_ptr cinfo) { /* We need only tell the memory manager to release everything. */ /* NB: mem pointer is NULL if memory mgr failed to initialize. */ if (cinfo->mem != NULL) (*cinfo->mem->self_destruct) (cinfo); cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ cinfo->global_state = 0; /* mark it destroyed */ } /* * Convenience routines for allocating quantization and Huffman tables. * (Would jutils.c be a more reasonable place to put these?) */ GLOBAL(JQUANT_TBL *) jpeg_alloc_quant_table (j_common_ptr cinfo) { JQUANT_TBL *tbl; tbl = (JQUANT_TBL *) (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); tbl->sent_table = FALSE; /* make sure this is false in any new table */ return tbl; } GLOBAL(JHUFF_TBL *) jpeg_alloc_huff_table (j_common_ptr cinfo) { JHUFF_TBL *tbl; tbl = (JHUFF_TBL *) (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); tbl->sent_table = FALSE; /* make sure this is false in any new table */ return tbl; } htmldoc-1.8.27/jpeg/jconfig.h0100664000212600000240000000270510332502147014440 0ustar mikeuser/* jconfig.cfg --- source file edited by configure script */ /* see jconfig.doc for explanations */ #define HAVE_PROTOTYPES #define HAVE_UNSIGNED_CHAR #define HAVE_UNSIGNED_SHORT #ifdef __CHAR_UNSIGNED__ # define CHAR_IS_UNSIGNED #endif /* __CHAR_UNSIGNED__ */ /* Define this if you get warnings about undefined structures. */ #undef INCOMPLETE_TYPES_BROKEN #if defined(WIN32) || defined(__EMX__) /* Define "boolean" as unsigned char, not int, per Windows custom */ # ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ typedef unsigned char boolean; # endif # define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ #endif /* WIN32 || __EMX__ */ #ifdef JPEG_INTERNALS #undef RIGHT_SHIFT_IS_UNSIGNED #undef INLINE /* These are for configuring the JPEG memory manager. */ #undef DEFAULT_MAX_MEM #undef NO_MKTEMP #endif /* JPEG_INTERNALS */ #ifdef JPEG_CJPEG_DJPEG #define BMP_SUPPORTED /* BMP image file format */ #define GIF_SUPPORTED /* GIF image file format */ #define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ #undef RLE_SUPPORTED /* Utah RLE image file format */ #define TARGA_SUPPORTED /* Targa image file format */ #undef TWO_FILE_COMMANDLINE #undef NEED_SIGNAL_CATCHER #undef DONT_USE_B_MODE #if defined(WIN32) || defined(__EMX__) # define USE_SETMODE #endif /* WIN32 || __EMX__ */ /* Define this if you want percent-done progress reports from cjpeg/djpeg. */ #undef PROGRESS_REPORT #endif /* JPEG_CJPEG_DJPEG */ htmldoc-1.8.27/jpeg/jdphuff.c0100664000212600000240000005011706713354635014461 0ustar mikeuser/* * jdphuff.c * * Copyright (C) 1995-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains Huffman entropy decoding routines for progressive JPEG. * * Much of the complexity here has to do with supporting input suspension. * If the data source module demands suspension, we want to be able to back * up to the start of the current MCU. To do this, we copy state variables * into local working storage, and update them back to the permanent * storage only upon successful completion of an MCU. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdhuff.h" /* Declarations shared with jdhuff.c */ #ifdef D_PROGRESSIVE_SUPPORTED /* * Expanded entropy decoder object for progressive Huffman decoding. * * The savable_state subrecord contains fields that change within an MCU, * but must not be updated permanently until we complete the MCU. */ typedef struct { unsigned int EOBRUN; /* remaining EOBs in EOBRUN */ int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ } savable_state; /* This macro is to work around compilers with missing or broken * structure assignment. You'll need to fix this code if you have * such a compiler and you change MAX_COMPS_IN_SCAN. */ #ifndef NO_STRUCT_ASSIGN #define ASSIGN_STATE(dest,src) ((dest) = (src)) #else #if MAX_COMPS_IN_SCAN == 4 #define ASSIGN_STATE(dest,src) \ ((dest).EOBRUN = (src).EOBRUN, \ (dest).last_dc_val[0] = (src).last_dc_val[0], \ (dest).last_dc_val[1] = (src).last_dc_val[1], \ (dest).last_dc_val[2] = (src).last_dc_val[2], \ (dest).last_dc_val[3] = (src).last_dc_val[3]) #endif #endif typedef struct { struct jpeg_entropy_decoder pub; /* public fields */ /* These fields are loaded into local variables at start of each MCU. * In case of suspension, we exit WITHOUT updating them. */ bitread_perm_state bitstate; /* Bit buffer at start of MCU */ savable_state saved; /* Other state at start of MCU */ /* These fields are NOT loaded into local working state. */ unsigned int restarts_to_go; /* MCUs left in this restart interval */ /* Pointers to derived tables (these workspaces have image lifespan) */ d_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */ } phuff_entropy_decoder; typedef phuff_entropy_decoder * phuff_entropy_ptr; /* Forward declarations */ METHODDEF(boolean) decode_mcu_DC_first JPP((j_decompress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(boolean) decode_mcu_AC_first JPP((j_decompress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(boolean) decode_mcu_DC_refine JPP((j_decompress_ptr cinfo, JBLOCKROW *MCU_data)); METHODDEF(boolean) decode_mcu_AC_refine JPP((j_decompress_ptr cinfo, JBLOCKROW *MCU_data)); /* * Initialize for a Huffman-compressed scan. */ METHODDEF(void) start_pass_phuff_decoder (j_decompress_ptr cinfo) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; boolean is_DC_band, bad; int ci, coefi, tbl; int *coef_bit_ptr; jpeg_component_info * compptr; is_DC_band = (cinfo->Ss == 0); /* Validate scan parameters */ bad = FALSE; if (is_DC_band) { if (cinfo->Se != 0) bad = TRUE; } else { /* need not check Ss/Se < 0 since they came from unsigned bytes */ if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2) bad = TRUE; /* AC scans may have only one component */ if (cinfo->comps_in_scan != 1) bad = TRUE; } if (cinfo->Ah != 0) { /* Successive approximation refinement scan: must have Al = Ah-1. */ if (cinfo->Al != cinfo->Ah-1) bad = TRUE; } if (cinfo->Al > 13) /* need not check for < 0 */ bad = TRUE; /* Arguably the maximum Al value should be less than 13 for 8-bit precision, * but the spec doesn't say so, and we try to be liberal about what we * accept. Note: large Al values could result in out-of-range DC * coefficients during early scans, leading to bizarre displays due to * overflows in the IDCT math. But we won't crash. */ if (bad) ERREXIT4(cinfo, JERR_BAD_PROGRESSION, cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); /* Update progression status, and verify that scan order is legal. * Note that inter-scan inconsistencies are treated as warnings * not fatal errors ... not clear if this is right way to behave. */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) { int cindex = cinfo->cur_comp_info[ci]->component_index; coef_bit_ptr = & cinfo->coef_bits[cindex][0]; if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; if (cinfo->Ah != expected) WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); coef_bit_ptr[coefi] = cinfo->Al; } } /* Select MCU decoding routine */ if (cinfo->Ah == 0) { if (is_DC_band) entropy->pub.decode_mcu = decode_mcu_DC_first; else entropy->pub.decode_mcu = decode_mcu_AC_first; } else { if (is_DC_band) entropy->pub.decode_mcu = decode_mcu_DC_refine; else entropy->pub.decode_mcu = decode_mcu_AC_refine; } for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; /* Make sure requested tables are present, and compute derived tables. * We may build same derived table more than once, but it's not expensive. */ if (is_DC_band) { if (cinfo->Ah == 0) { /* DC refinement needs no table */ tbl = compptr->dc_tbl_no; jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, & entropy->derived_tbls[tbl]); } } else { tbl = compptr->ac_tbl_no; jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, & entropy->derived_tbls[tbl]); /* remember the single active table */ entropy->ac_derived_tbl = entropy->derived_tbls[tbl]; } /* Initialize DC predictions to 0 */ entropy->saved.last_dc_val[ci] = 0; } /* Initialize bitread state variables */ entropy->bitstate.bits_left = 0; entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ entropy->pub.insufficient_data = FALSE; /* Initialize private state variables */ entropy->saved.EOBRUN = 0; /* Initialize restart counter */ entropy->restarts_to_go = cinfo->restart_interval; } /* * Figure F.12: extend sign bit. * On some machines, a shift and add will be faster than a table lookup. */ #ifdef AVOID_TABLES #define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) #else #define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) static const int extend_test[16] = /* entry n is 2**(n-1) */ { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; #endif /* AVOID_TABLES */ /* * Check for a restart marker & resynchronize decoder. * Returns FALSE if must suspend. */ LOCAL(boolean) process_restart (j_decompress_ptr cinfo) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; int ci; /* Throw away any unused bits remaining in bit buffer; */ /* include any full bytes in next_marker's count of discarded bytes */ cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; entropy->bitstate.bits_left = 0; /* Advance past the RSTn marker */ if (! (*cinfo->marker->read_restart_marker) (cinfo)) return FALSE; /* Re-initialize DC predictions to 0 */ for (ci = 0; ci < cinfo->comps_in_scan; ci++) entropy->saved.last_dc_val[ci] = 0; /* Re-init EOB run count, too */ entropy->saved.EOBRUN = 0; /* Reset restart counter */ entropy->restarts_to_go = cinfo->restart_interval; /* Reset out-of-data flag, unless read_restart_marker left us smack up * against a marker. In that case we will end up treating the next data * segment as empty, and we can avoid producing bogus output pixels by * leaving the flag set. */ if (cinfo->unread_marker == 0) entropy->pub.insufficient_data = FALSE; return TRUE; } /* * Huffman MCU decoding. * Each of these routines decodes and returns one MCU's worth of * Huffman-compressed coefficients. * The coefficients are reordered from zigzag order into natural array order, * but are not dequantized. * * The i'th block of the MCU is stored into the block pointed to by * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. * * We return FALSE if data source requested suspension. In that case no * changes have been made to permanent state. (Exception: some output * coefficients may already have been assigned. This is harmless for * spectral selection, since we'll just re-assign them on the next call. * Successive approximation AC refinement has to be more careful, however.) */ /* * MCU decoding for DC initial scan (either spectral selection, * or first pass of successive approximation). */ METHODDEF(boolean) decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; int Al = cinfo->Al; register int s, r; int blkn, ci; JBLOCKROW block; BITREAD_STATE_VARS; savable_state state; d_derived_tbl * tbl; jpeg_component_info * compptr; /* Process restart marker if needed; may have to suspend */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) if (! process_restart(cinfo)) return FALSE; } /* If we've run out of data, just leave the MCU set to zeroes. * This way, we return uniform gray for the remainder of the segment. */ if (! entropy->pub.insufficient_data) { /* Load up working state */ BITREAD_LOAD_STATE(cinfo,entropy->bitstate); ASSIGN_STATE(state, entropy->saved); /* Outer loop handles each block in the MCU */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { block = MCU_data[blkn]; ci = cinfo->MCU_membership[blkn]; compptr = cinfo->cur_comp_info[ci]; tbl = entropy->derived_tbls[compptr->dc_tbl_no]; /* Decode a single block's worth of coefficients */ /* Section F.2.2.1: decode the DC coefficient difference */ HUFF_DECODE(s, br_state, tbl, return FALSE, label1); if (s) { CHECK_BIT_BUFFER(br_state, s, return FALSE); r = GET_BITS(s); s = HUFF_EXTEND(r, s); } /* Convert DC difference to actual value, update last_dc_val */ s += state.last_dc_val[ci]; state.last_dc_val[ci] = s; /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */ (*block)[0] = (JCOEF) (s << Al); } /* Completed MCU, so update state */ BITREAD_SAVE_STATE(cinfo,entropy->bitstate); ASSIGN_STATE(entropy->saved, state); } /* Account for restart interval (no-op if not using restarts) */ entropy->restarts_to_go--; return TRUE; } /* * MCU decoding for AC initial scan (either spectral selection, * or first pass of successive approximation). */ METHODDEF(boolean) decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; int Se = cinfo->Se; int Al = cinfo->Al; register int s, k, r; unsigned int EOBRUN; JBLOCKROW block; BITREAD_STATE_VARS; d_derived_tbl * tbl; /* Process restart marker if needed; may have to suspend */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) if (! process_restart(cinfo)) return FALSE; } /* If we've run out of data, just leave the MCU set to zeroes. * This way, we return uniform gray for the remainder of the segment. */ if (! entropy->pub.insufficient_data) { /* Load up working state. * We can avoid loading/saving bitread state if in an EOB run. */ EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ /* There is always only one block per MCU */ if (EOBRUN > 0) /* if it's a band of zeroes... */ EOBRUN--; /* ...process it now (we do nothing) */ else { BITREAD_LOAD_STATE(cinfo,entropy->bitstate); block = MCU_data[0]; tbl = entropy->ac_derived_tbl; for (k = cinfo->Ss; k <= Se; k++) { HUFF_DECODE(s, br_state, tbl, return FALSE, label2); r = s >> 4; s &= 15; if (s) { k += r; CHECK_BIT_BUFFER(br_state, s, return FALSE); r = GET_BITS(s); s = HUFF_EXTEND(r, s); /* Scale and output coefficient in natural (dezigzagged) order */ (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al); } else { if (r == 15) { /* ZRL */ k += 15; /* skip 15 zeroes in band */ } else { /* EOBr, run length is 2^r + appended bits */ EOBRUN = 1 << r; if (r) { /* EOBr, r > 0 */ CHECK_BIT_BUFFER(br_state, r, return FALSE); r = GET_BITS(r); EOBRUN += r; } EOBRUN--; /* this band is processed at this moment */ break; /* force end-of-band */ } } } BITREAD_SAVE_STATE(cinfo,entropy->bitstate); } /* Completed MCU, so update state */ entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ } /* Account for restart interval (no-op if not using restarts) */ entropy->restarts_to_go--; return TRUE; } /* * MCU decoding for DC successive approximation refinement scan. * Note: we assume such scans can be multi-component, although the spec * is not very clear on the point. */ METHODDEF(boolean) decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ int blkn; JBLOCKROW block; BITREAD_STATE_VARS; /* Process restart marker if needed; may have to suspend */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) if (! process_restart(cinfo)) return FALSE; } /* Not worth the cycles to check insufficient_data here, * since we will not change the data anyway if we read zeroes. */ /* Load up working state */ BITREAD_LOAD_STATE(cinfo,entropy->bitstate); /* Outer loop handles each block in the MCU */ for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { block = MCU_data[blkn]; /* Encoded data is simply the next bit of the two's-complement DC value */ CHECK_BIT_BUFFER(br_state, 1, return FALSE); if (GET_BITS(1)) (*block)[0] |= p1; /* Note: since we use |=, repeating the assignment later is safe */ } /* Completed MCU, so update state */ BITREAD_SAVE_STATE(cinfo,entropy->bitstate); /* Account for restart interval (no-op if not using restarts) */ entropy->restarts_to_go--; return TRUE; } /* * MCU decoding for AC successive approximation refinement scan. */ METHODDEF(boolean) decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) { phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; int Se = cinfo->Se; int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ int m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ register int s, k, r; unsigned int EOBRUN; JBLOCKROW block; JCOEFPTR thiscoef; BITREAD_STATE_VARS; d_derived_tbl * tbl; int num_newnz; int newnz_pos[DCTSIZE2]; /* Process restart marker if needed; may have to suspend */ if (cinfo->restart_interval) { if (entropy->restarts_to_go == 0) if (! process_restart(cinfo)) return FALSE; } /* If we've run out of data, don't modify the MCU. */ if (! entropy->pub.insufficient_data) { /* Load up working state */ BITREAD_LOAD_STATE(cinfo,entropy->bitstate); EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ /* There is always only one block per MCU */ block = MCU_data[0]; tbl = entropy->ac_derived_tbl; /* If we are forced to suspend, we must undo the assignments to any newly * nonzero coefficients in the block, because otherwise we'd get confused * next time about which coefficients were already nonzero. * But we need not undo addition of bits to already-nonzero coefficients; * instead, we can test the current bit to see if we already did it. */ num_newnz = 0; /* initialize coefficient loop counter to start of band */ k = cinfo->Ss; if (EOBRUN == 0) { for (; k <= Se; k++) { HUFF_DECODE(s, br_state, tbl, goto undoit, label3); r = s >> 4; s &= 15; if (s) { if (s != 1) /* size of new coef should always be 1 */ WARNMS(cinfo, JWRN_HUFF_BAD_CODE); CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) s = p1; /* newly nonzero coef is positive */ else s = m1; /* newly nonzero coef is negative */ } else { if (r != 15) { EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */ if (r) { CHECK_BIT_BUFFER(br_state, r, goto undoit); r = GET_BITS(r); EOBRUN += r; } break; /* rest of block is handled by EOB logic */ } /* note s = 0 for processing ZRL */ } /* Advance over already-nonzero coefs and r still-zero coefs, * appending correction bits to the nonzeroes. A correction bit is 1 * if the absolute value of the coefficient must be increased. */ do { thiscoef = *block + jpeg_natural_order[k]; if (*thiscoef != 0) { CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ if (*thiscoef >= 0) *thiscoef += p1; else *thiscoef += m1; } } } else { if (--r < 0) break; /* reached target zero coefficient */ } k++; } while (k <= Se); if (s) { int pos = jpeg_natural_order[k]; /* Output newly nonzero coefficient */ (*block)[pos] = (JCOEF) s; /* Remember its position in case we have to suspend */ newnz_pos[num_newnz++] = pos; } } } if (EOBRUN > 0) { /* Scan any remaining coefficient positions after the end-of-band * (the last newly nonzero coefficient, if any). Append a correction * bit to each already-nonzero coefficient. A correction bit is 1 * if the absolute value of the coefficient must be increased. */ for (; k <= Se; k++) { thiscoef = *block + jpeg_natural_order[k]; if (*thiscoef != 0) { CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ if (*thiscoef >= 0) *thiscoef += p1; else *thiscoef += m1; } } } } /* Count one block completed in EOB run */ EOBRUN--; } /* Completed MCU, so update state */ BITREAD_SAVE_STATE(cinfo,entropy->bitstate); entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ } /* Account for restart interval (no-op if not using restarts) */ entropy->restarts_to_go--; return TRUE; undoit: /* Re-zero any output coefficients that we made newly nonzero */ while (num_newnz > 0) (*block)[newnz_pos[--num_newnz]] = 0; return FALSE; } /* * Module initialization routine for progressive Huffman entropy decoding. */ GLOBAL(void) jinit_phuff_decoder (j_decompress_ptr cinfo) { phuff_entropy_ptr entropy; int *coef_bit_ptr; int ci, i; entropy = (phuff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(phuff_entropy_decoder)); cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; entropy->pub.start_pass = start_pass_phuff_decoder; /* Mark derived tables unallocated */ for (i = 0; i < NUM_HUFF_TBLS; i++) { entropy->derived_tbls[i] = NULL; } /* Create progression status table */ cinfo->coef_bits = (int (*)[DCTSIZE2]) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components*DCTSIZE2*SIZEOF(int)); coef_bit_ptr = & cinfo->coef_bits[0][0]; for (ci = 0; ci < cinfo->num_components; ci++) for (i = 0; i < DCTSIZE2; i++) *coef_bit_ptr++ = -1; } #endif /* D_PROGRESSIVE_SUPPORTED */ htmldoc-1.8.27/jpeg/jidctred.c0100664000212600000240000003233006713354635014620 0ustar mikeuser/* * jidctred.c * * Copyright (C) 1994-1998, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains inverse-DCT routines that produce reduced-size output: * either 4x4, 2x2, or 1x1 pixels from an 8x8 DCT block. * * The implementation is based on the Loeffler, Ligtenberg and Moschytz (LL&M) * algorithm used in jidctint.c. We simply replace each 8-to-8 1-D IDCT step * with an 8-to-4 step that produces the four averages of two adjacent outputs * (or an 8-to-2 step producing two averages of four outputs, for 2x2 output). * These steps were derived by computing the corresponding values at the end * of the normal LL&M code, then simplifying as much as possible. * * 1x1 is trivial: just take the DC coefficient divided by 8. * * See jidctint.c for additional comments. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" #include "jdct.h" /* Private declarations for DCT subsystem */ #ifdef IDCT_SCALING_SUPPORTED /* * This module is specialized to the case DCTSIZE = 8. */ #if DCTSIZE != 8 Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ #endif /* Scaling is the same as in jidctint.c. */ #if BITS_IN_JSAMPLE == 8 #define CONST_BITS 13 #define PASS1_BITS 2 #else #define CONST_BITS 13 #define PASS1_BITS 1 /* lose a little precision to avoid overflow */ #endif /* Some C compilers fail to reduce "FIX(constant)" at compile time, thus * causing a lot of useless floating-point operations at run time. * To get around this we use the following pre-calculated constants. * If you change CONST_BITS you may want to add appropriate values. * (With a reasonable C compiler, you can just rely on the FIX() macro...) */ #if CONST_BITS == 13 #define FIX_0_211164243 ((INT32) 1730) /* FIX(0.211164243) */ #define FIX_0_509795579 ((INT32) 4176) /* FIX(0.509795579) */ #define FIX_0_601344887 ((INT32) 4926) /* FIX(0.601344887) */ #define FIX_0_720959822 ((INT32) 5906) /* FIX(0.720959822) */ #define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ #define FIX_0_850430095 ((INT32) 6967) /* FIX(0.850430095) */ #define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ #define FIX_1_061594337 ((INT32) 8697) /* FIX(1.061594337) */ #define FIX_1_272758580 ((INT32) 10426) /* FIX(1.272758580) */ #define FIX_1_451774981 ((INT32) 11893) /* FIX(1.451774981) */ #define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ #define FIX_2_172734803 ((INT32) 17799) /* FIX(2.172734803) */ #define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ #define FIX_3_624509785 ((INT32) 29692) /* FIX(3.624509785) */ #else #define FIX_0_211164243 FIX(0.211164243) #define FIX_0_509795579 FIX(0.509795579) #define FIX_0_601344887 FIX(0.601344887) #define FIX_0_720959822 FIX(0.720959822) #define FIX_0_765366865 FIX(0.765366865) #define FIX_0_850430095 FIX(0.850430095) #define FIX_0_899976223 FIX(0.899976223) #define FIX_1_061594337 FIX(1.061594337) #define FIX_1_272758580 FIX(1.272758580) #define FIX_1_451774981 FIX(1.451774981) #define FIX_1_847759065 FIX(1.847759065) #define FIX_2_172734803 FIX(2.172734803) #define FIX_2_562915447 FIX(2.562915447) #define FIX_3_624509785 FIX(3.624509785) #endif /* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. * For 8-bit samples with the recommended scaling, all the variable * and constant values involved are no more than 16 bits wide, so a * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. * For 12-bit samples, a full 32-bit multiplication will be needed. */ #if BITS_IN_JSAMPLE == 8 #define MULTIPLY(var,const) MULTIPLY16C16(var,const) #else #define MULTIPLY(var,const) ((var) * (const)) #endif /* Dequantize a coefficient by multiplying it by the multiplier-table * entry; produce an int result. In this module, both inputs and result * are 16 bits or less, so either int or short multiply will work. */ #define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) /* * Perform dequantization and inverse DCT on one block of coefficients, * producing a reduced-size 4x4 output block. */ GLOBAL(void) jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { INT32 tmp0, tmp2, tmp10, tmp12; INT32 z1, z2, z3, z4; JCOEFPTR inptr; ISLOW_MULT_TYPE * quantptr; int * wsptr; JSAMPROW outptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); int ctr; int workspace[DCTSIZE*4]; /* buffers data between passes */ SHIFT_TEMPS /* Pass 1: process columns from input, store into work array. */ inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { /* Don't bother to process column 4, because second pass won't use it */ if (ctr == DCTSIZE-4) continue; if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { /* AC terms all zero; we need not examine term 4 for 4x4 output */ int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; wsptr[DCTSIZE*0] = dcval; wsptr[DCTSIZE*1] = dcval; wsptr[DCTSIZE*2] = dcval; wsptr[DCTSIZE*3] = dcval; continue; } /* Even part */ tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); tmp0 <<= (CONST_BITS+1); z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); tmp2 = MULTIPLY(z2, FIX_1_847759065) + MULTIPLY(z3, - FIX_0_765366865); tmp10 = tmp0 + tmp2; tmp12 = tmp0 - tmp2; /* Odd part */ z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); z2 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); z4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ /* Final output stage */ wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp2, CONST_BITS-PASS1_BITS+1); wsptr[DCTSIZE*3] = (int) DESCALE(tmp10 - tmp2, CONST_BITS-PASS1_BITS+1); wsptr[DCTSIZE*1] = (int) DESCALE(tmp12 + tmp0, CONST_BITS-PASS1_BITS+1); wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 - tmp0, CONST_BITS-PASS1_BITS+1); } /* Pass 2: process 4 rows from work array, store into output array. */ wsptr = workspace; for (ctr = 0; ctr < 4; ctr++) { outptr = output_buf[ctr] + output_col; /* It's not clear whether a zero row test is worthwhile here ... */ #ifndef NO_ZERO_ROW_TEST if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { /* AC terms all zero */ JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) & RANGE_MASK]; outptr[0] = dcval; outptr[1] = dcval; outptr[2] = dcval; outptr[3] = dcval; wsptr += DCTSIZE; /* advance pointer to next row */ continue; } #endif /* Even part */ tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1); tmp2 = MULTIPLY((INT32) wsptr[2], FIX_1_847759065) + MULTIPLY((INT32) wsptr[6], - FIX_0_765366865); tmp10 = tmp0 + tmp2; tmp12 = tmp0 - tmp2; /* Odd part */ z1 = (INT32) wsptr[7]; z2 = (INT32) wsptr[5]; z3 = (INT32) wsptr[3]; z4 = (INT32) wsptr[1]; tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ /* Final output stage */ outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp2, CONST_BITS+PASS1_BITS+3+1) & RANGE_MASK]; outptr[3] = range_limit[(int) DESCALE(tmp10 - tmp2, CONST_BITS+PASS1_BITS+3+1) & RANGE_MASK]; outptr[1] = range_limit[(int) DESCALE(tmp12 + tmp0, CONST_BITS+PASS1_BITS+3+1) & RANGE_MASK]; outptr[2] = range_limit[(int) DESCALE(tmp12 - tmp0, CONST_BITS+PASS1_BITS+3+1) & RANGE_MASK]; wsptr += DCTSIZE; /* advance pointer to next row */ } } /* * Perform dequantization and inverse DCT on one block of coefficients, * producing a reduced-size 2x2 output block. */ GLOBAL(void) jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { INT32 tmp0, tmp10, z1; JCOEFPTR inptr; ISLOW_MULT_TYPE * quantptr; int * wsptr; JSAMPROW outptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); int ctr; int workspace[DCTSIZE*2]; /* buffers data between passes */ SHIFT_TEMPS /* Pass 1: process columns from input, store into work array. */ inptr = coef_block; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; wsptr = workspace; for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { /* Don't bother to process columns 2,4,6 */ if (ctr == DCTSIZE-2 || ctr == DCTSIZE-4 || ctr == DCTSIZE-6) continue; if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*7] == 0) { /* AC terms all zero; we need not examine terms 2,4,6 for 2x2 output */ int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; wsptr[DCTSIZE*0] = dcval; wsptr[DCTSIZE*1] = dcval; continue; } /* Even part */ z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); tmp10 = z1 << (CONST_BITS+2); /* Odd part */ z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); tmp0 = MULTIPLY(z1, - FIX_0_720959822); /* sqrt(2) * (c7-c5+c3-c1) */ z1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); tmp0 += MULTIPLY(z1, FIX_0_850430095); /* sqrt(2) * (-c1+c3+c5+c7) */ z1 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); tmp0 += MULTIPLY(z1, - FIX_1_272758580); /* sqrt(2) * (-c1+c3-c5-c7) */ z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); tmp0 += MULTIPLY(z1, FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ /* Final output stage */ wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp0, CONST_BITS-PASS1_BITS+2); wsptr[DCTSIZE*1] = (int) DESCALE(tmp10 - tmp0, CONST_BITS-PASS1_BITS+2); } /* Pass 2: process 2 rows from work array, store into output array. */ wsptr = workspace; for (ctr = 0; ctr < 2; ctr++) { outptr = output_buf[ctr] + output_col; /* It's not clear whether a zero row test is worthwhile here ... */ #ifndef NO_ZERO_ROW_TEST if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) { /* AC terms all zero */ JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) & RANGE_MASK]; outptr[0] = dcval; outptr[1] = dcval; wsptr += DCTSIZE; /* advance pointer to next row */ continue; } #endif /* Even part */ tmp10 = ((INT32) wsptr[0]) << (CONST_BITS+2); /* Odd part */ tmp0 = MULTIPLY((INT32) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */ + MULTIPLY((INT32) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */ + MULTIPLY((INT32) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */ + MULTIPLY((INT32) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ /* Final output stage */ outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp0, CONST_BITS+PASS1_BITS+3+2) & RANGE_MASK]; outptr[1] = range_limit[(int) DESCALE(tmp10 - tmp0, CONST_BITS+PASS1_BITS+3+2) & RANGE_MASK]; wsptr += DCTSIZE; /* advance pointer to next row */ } } /* * Perform dequantization and inverse DCT on one block of coefficients, * producing a reduced-size 1x1 output block. */ GLOBAL(void) jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col) { int dcval; ISLOW_MULT_TYPE * quantptr; JSAMPLE *range_limit = IDCT_range_limit(cinfo); SHIFT_TEMPS /* We hardly need an inverse DCT routine for this: just take the * average pixel value, which is one-eighth of the DC coefficient. */ quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; dcval = DEQUANTIZE(coef_block[0], quantptr[0]); dcval = (int) DESCALE((INT32) dcval, 3); output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; } #endif /* IDCT_SCALING_SUPPORTED */ htmldoc-1.8.27/jpeg/jdcolor.c0100664000212600000240000003124206713354635014465 0ustar mikeuser/* * jdcolor.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains output colorspace conversion routines. */ #define JPEG_INTERNALS #include "jinclude.h" #include "jpeglib.h" /* Private subobject */ typedef struct { struct jpeg_color_deconverter pub; /* public fields */ /* Private state for YCC->RGB conversion */ int * Cr_r_tab; /* => table for Cr to R conversion */ int * Cb_b_tab; /* => table for Cb to B conversion */ INT32 * Cr_g_tab; /* => table for Cr to G conversion */ INT32 * Cb_g_tab; /* => table for Cb to G conversion */ } my_color_deconverter; typedef my_color_deconverter * my_cconvert_ptr; /**************** YCbCr -> RGB conversion: most common case **************/ /* * YCbCr is defined per CCIR 601-1, except that Cb and Cr are * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. * The conversion equations to be implemented are therefore * R = Y + 1.40200 * Cr * G = Y - 0.34414 * Cb - 0.71414 * Cr * B = Y + 1.77200 * Cb * where Cb and Cr represent the incoming values less CENTERJSAMPLE. * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) * * To avoid floating-point arithmetic, we represent the fractional constants * as integers scaled up by 2^16 (about 4 digits precision); we have to divide * the products by 2^16, with appropriate rounding, to get the correct answer. * Notice that Y, being an integral input, does not contribute any fraction * so it need not participate in the rounding. * * For even more speed, we avoid doing any multiplications in the inner loop * by precalculating the constants times Cb and Cr for all possible values. * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); * for 12-bit samples it is still acceptable. It's not very reasonable for * 16-bit samples, but if you want lossless storage you shouldn't be changing * colorspace anyway. * The Cr=>R and Cb=>B values can be rounded to integers in advance; the * values for the G calculation are left scaled up, since we must add them * together before rounding. */ #define SCALEBITS 16 /* speediest right-shift on some machines */ #define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. */ LOCAL(void) build_ycc_rgb_table (j_decompress_ptr cinfo) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; int i; INT32 x; SHIFT_TEMPS cconvert->Cr_r_tab = (int *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(int)); cconvert->Cb_b_tab = (int *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(int)); cconvert->Cr_g_tab = (INT32 *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); cconvert->Cb_g_tab = (INT32 *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE+1) * SIZEOF(INT32)); for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ /* Cr=>R value is nearest int to 1.40200 * x */ cconvert->Cr_r_tab[i] = (int) RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); /* Cb=>B value is nearest int to 1.77200 * x */ cconvert->Cb_b_tab[i] = (int) RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); /* Cr=>G value is scaled-up -0.71414 * x */ cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; /* Cb=>G value is scaled-up -0.34414 * x */ /* We also add in ONE_HALF so that need not do it in inner loop */ cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; } } /* * Convert some rows of samples to the output colorspace. * * Note that we change from noninterleaved, one-plane-per-component format * to interleaved-pixel format. The output buffer is therefore three times * as wide as the input buffer. * A starting row offset is provided only for the input buffer. The caller * can easily adjust the passed output_buf value to accommodate any row * offset required on that side. */ METHODDEF(void) ycc_rgb_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; register int y, cb, cr; register JSAMPROW outptr; register JSAMPROW inptr0, inptr1, inptr2; register JDIMENSION col; JDIMENSION num_cols = cinfo->output_width; /* copy these pointers into registers if possible */ register JSAMPLE * range_limit = cinfo->sample_range_limit; register int * Crrtab = cconvert->Cr_r_tab; register int * Cbbtab = cconvert->Cb_b_tab; register INT32 * Crgtab = cconvert->Cr_g_tab; register INT32 * Cbgtab = cconvert->Cb_g_tab; SHIFT_TEMPS while (--num_rows >= 0) { inptr0 = input_buf[0][input_row]; inptr1 = input_buf[1][input_row]; inptr2 = input_buf[2][input_row]; input_row++; outptr = *output_buf++; for (col = 0; col < num_cols; col++) { y = GETJSAMPLE(inptr0[col]); cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); /* Range-limiting is essential due to noise introduced by DCT losses. */ outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; outptr[RGB_GREEN] = range_limit[y + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS))]; outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; outptr += RGB_PIXELSIZE; } } } /**************** Cases other than YCbCr -> RGB **************/ /* * Color conversion for no colorspace change: just copy the data, * converting from separate-planes to interleaved representation. */ METHODDEF(void) null_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { register JSAMPROW inptr, outptr; register JDIMENSION count; register int num_components = cinfo->num_components; JDIMENSION num_cols = cinfo->output_width; int ci; while (--num_rows >= 0) { for (ci = 0; ci < num_components; ci++) { inptr = input_buf[ci][input_row]; outptr = output_buf[0] + ci; for (count = num_cols; count > 0; count--) { *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ outptr += num_components; } } input_row++; output_buf++; } } /* * Color conversion for grayscale: just copy the data. * This also works for YCbCr -> grayscale conversion, in which * we just copy the Y (luminance) component and ignore chrominance. */ METHODDEF(void) grayscale_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0, num_rows, cinfo->output_width); } /* * Convert grayscale to RGB: just duplicate the graylevel three times. * This is provided to support applications that don't want to cope * with grayscale as a separate case. */ METHODDEF(void) gray_rgb_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { register JSAMPROW inptr, outptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->output_width; while (--num_rows >= 0) { inptr = input_buf[0][input_row++]; outptr = *output_buf++; for (col = 0; col < num_cols; col++) { /* We can dispense with GETJSAMPLE() here */ outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; outptr += RGB_PIXELSIZE; } } } /* * Adobe-style YCCK->CMYK conversion. * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same * conversion as above, while passing K (black) unchanged. * We assume build_ycc_rgb_table has been called. */ METHODDEF(void) ycck_cmyk_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; register int y, cb, cr; register JSAMPROW outptr; register JSAMPROW inptr0, inptr1, inptr2, inptr3; register JDIMENSION col; JDIMENSION num_cols = cinfo->output_width; /* copy these pointers into registers if possible */ register JSAMPLE * range_limit = cinfo->sample_range_limit; register int * Crrtab = cconvert->Cr_r_tab; register int * Cbbtab = cconvert->Cb_b_tab; register INT32 * Crgtab = cconvert->Cr_g_tab; register INT32 * Cbgtab = cconvert->Cb_g_tab; SHIFT_TEMPS while (--num_rows >= 0) { inptr0 = input_buf[0][input_row]; inptr1 = input_buf[1][input_row]; inptr2 = input_buf[2][input_row]; inptr3 = input_buf[3][input_row]; input_row++; outptr = *output_buf++; for (col = 0; col < num_cols; col++) { y = GETJSAMPLE(inptr0[col]); cb = GETJSAMPLE(inptr1[col]); cr = GETJSAMPLE(inptr2[col]); /* Range-limiting is essential due to noise introduced by DCT losses. */ outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS)))]; outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */ /* K passes through unchanged */ outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ outptr += 4; } } } /* * Empty method for start_pass. */ METHODDEF(void) start_pass_dcolor (j_decompress_ptr cinfo) { /* no work needed */ } /* * Module initialization routine for output colorspace conversion. */ GLOBAL(void) jinit_color_deconverter (j_decompress_ptr cinfo) { my_cconvert_ptr cconvert; int ci; cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_color_deconverter)); cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; cconvert->pub.start_pass = start_pass_dcolor; /* Make sure num_components agrees with jpeg_color_space */ switch (cinfo->jpeg_color_space) { case JCS_GRAYSCALE: if (cinfo->num_components != 1) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); break; case JCS_RGB: case JCS_YCbCr: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); break; case JCS_CMYK: case JCS_YCCK: if (cinfo->num_components != 4) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); break; default: /* JCS_UNKNOWN can be anything */ if (cinfo->num_components < 1) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); break; } /* Set out_color_components and conversion method based on requested space. * Also clear the component_needed flags for any unused components, * so that earlier pipeline stages can avoid useless computation. */ switch (cinfo->out_color_space) { case JCS_GRAYSCALE: cinfo->out_color_components = 1; if (cinfo->jpeg_color_space == JCS_GRAYSCALE || cinfo->jpeg_color_space == JCS_YCbCr) { cconvert->pub.color_convert = grayscale_convert; /* For color->grayscale conversion, only the Y (0) component is needed */ for (ci = 1; ci < cinfo->num_components; ci++) cinfo->comp_info[ci].component_needed = FALSE; } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_RGB: cinfo->out_color_components = RGB_PIXELSIZE; if (cinfo->jpeg_color_space == JCS_YCbCr) { cconvert->pub.color_convert = ycc_rgb_convert; build_ycc_rgb_table(cinfo); } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { cconvert->pub.color_convert = gray_rgb_convert; } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { cconvert->pub.color_convert = null_convert; } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_CMYK: cinfo->out_color_components = 4; if (cinfo->jpeg_color_space == JCS_YCCK) { cconvert->pub.color_convert = ycck_cmyk_convert; build_ycc_rgb_table(cinfo); } else if (cinfo->jpeg_color_space == JCS_CMYK) { cconvert->pub.color_convert = null_convert; } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; default: /* Permit null conversion to same output space */ if (cinfo->out_color_space == cinfo->jpeg_color_space) { cinfo->out_color_components = cinfo->num_components; cconvert->pub.color_convert = null_convert; } else /* unsupported non-null conversion */ ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; } if (cinfo->quantize_colors) cinfo->output_components = 1; /* single colormapped output component */ else cinfo->output_components = cinfo->out_color_components; } htmldoc-1.8.27/zlib/0040775000212600000240000000000010464177321012672 5ustar mikeuserhtmldoc-1.8.27/zlib/inffast.c0100664000212600000240000002764010124711246014467 0ustar mikeuser/* inffast.c -- fast decoding * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "inftrees.h" #include "inflate.h" #include "inffast.h" #ifndef ASMINF /* Allow machine dependent optimization for post-increment or pre-increment. Based on testing to date, Pre-increment preferred for: - PowerPC G3 (Adler) - MIPS R5000 (Randers-Pehrson) Post-increment preferred for: - none No measurable difference: - Pentium III (Anderson) - 68060 (Nikl) */ #ifdef POSTINC # define OFF 0 # define PUP(a) *(a)++ #else # define OFF 1 # define PUP(a) *++(a) #endif /* Decode literal, length, and distance codes and write out the resulting literal and match bytes until either not enough input or output is available, an end-of-block is encountered, or a data error is encountered. When large enough input and output buffers are supplied to inflate(), for example, a 16K input buffer and a 64K output buffer, more than 95% of the inflate execution time is spent in this routine. Entry assumptions: state->mode == LEN strm->avail_in >= 6 strm->avail_out >= 258 start >= strm->avail_out state->bits < 8 On return, state->mode is one of: LEN -- ran out of enough output space or enough available input TYPE -- reached end of block code, inflate() to interpret next block BAD -- error in block data Notes: - The maximum input bits used by a length/distance pair is 15 bits for the length code, 5 bits for the length extra, 15 bits for the distance code, and 13 bits for the distance extra. This totals 48 bits, or six bytes. Therefore if strm->avail_in >= 6, then there is enough input to avoid checking for available input while decoding. - The maximum bytes that a single length/distance pair can output is 258 bytes, which is the maximum length that can be coded. inflate_fast() requires strm->avail_out >= 258 for each loop to avoid checking for output space. */ void inflate_fast(strm, start) z_streamp strm; unsigned start; /* inflate()'s starting value for strm->avail_out */ { struct inflate_state FAR *state; unsigned char FAR *in; /* local strm->next_in */ unsigned char FAR *last; /* while in < last, enough input available */ unsigned char FAR *out; /* local strm->next_out */ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ unsigned char FAR *end; /* while out < end, enough space available */ unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */ unsigned write; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ unsigned long hold; /* local strm->hold */ unsigned bits; /* local strm->bits */ code const FAR *lcode; /* local strm->lencode */ code const FAR *dcode; /* local strm->distcode */ unsigned lmask; /* mask for first level of length codes */ unsigned dmask; /* mask for first level of distance codes */ code this; /* retrieved table entry */ unsigned op; /* code bits, operation, extra bits, or */ /* window position, window bytes to copy */ unsigned len; /* match length, unused bytes */ unsigned dist; /* match distance */ unsigned char FAR *from; /* where to copy match from */ /* copy state to local variables */ state = (struct inflate_state FAR *)strm->state; in = strm->next_in - OFF; last = in + (strm->avail_in - 5); out = strm->next_out - OFF; beg = out - (start - strm->avail_out); end = out + (strm->avail_out - 257); wsize = state->wsize; whave = state->whave; write = state->write; window = state->window; hold = state->hold; bits = state->bits; lcode = state->lencode; dcode = state->distcode; lmask = (1U << state->lenbits) - 1; dmask = (1U << state->distbits) - 1; /* decode literals and length/distances until end-of-block or not enough input data or output space */ do { if (bits < 15) { hold += (unsigned long)(PUP(in)) << bits; bits += 8; hold += (unsigned long)(PUP(in)) << bits; bits += 8; } this = lcode[hold & lmask]; dolen: op = (unsigned)(this.bits); hold >>= op; bits -= op; op = (unsigned)(this.op); if (op == 0) { /* literal */ Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? "inflate: literal '%c'\n" : "inflate: literal 0x%02x\n", this.val)); PUP(out) = (unsigned char)(this.val); } else if (op & 16) { /* length base */ len = (unsigned)(this.val); op &= 15; /* number of extra bits */ if (op) { if (bits < op) { hold += (unsigned long)(PUP(in)) << bits; bits += 8; } len += (unsigned)hold & ((1U << op) - 1); hold >>= op; bits -= op; } Tracevv((stderr, "inflate: length %u\n", len)); if (bits < 15) { hold += (unsigned long)(PUP(in)) << bits; bits += 8; hold += (unsigned long)(PUP(in)) << bits; bits += 8; } this = dcode[hold & dmask]; dodist: op = (unsigned)(this.bits); hold >>= op; bits -= op; op = (unsigned)(this.op); if (op & 16) { /* distance base */ dist = (unsigned)(this.val); op &= 15; /* number of extra bits */ if (bits < op) { hold += (unsigned long)(PUP(in)) << bits; bits += 8; if (bits < op) { hold += (unsigned long)(PUP(in)) << bits; bits += 8; } } dist += (unsigned)hold & ((1U << op) - 1); hold >>= op; bits -= op; Tracevv((stderr, "inflate: distance %u\n", dist)); op = (unsigned)(out - beg); /* max distance in output */ if (dist > op) { /* see if copy from window */ op = dist - op; /* distance back in window */ if (op > whave) { strm->msg = (char *)"invalid distance too far back"; state->mode = BAD; break; } from = window - OFF; if (write == 0) { /* very common case */ from += wsize - op; if (op < len) { /* some from window */ len -= op; do { PUP(out) = PUP(from); } while (--op); from = out - dist; /* rest from output */ } } else if (write < op) { /* wrap around window */ from += wsize + write - op; op -= write; if (op < len) { /* some from end of window */ len -= op; do { PUP(out) = PUP(from); } while (--op); from = window - OFF; if (write < len) { /* some from start of window */ op = write; len -= op; do { PUP(out) = PUP(from); } while (--op); from = out - dist; /* rest from output */ } } } else { /* contiguous in window */ from += write - op; if (op < len) { /* some from window */ len -= op; do { PUP(out) = PUP(from); } while (--op); from = out - dist; /* rest from output */ } } while (len > 2) { PUP(out) = PUP(from); PUP(out) = PUP(from); PUP(out) = PUP(from); len -= 3; } if (len) { PUP(out) = PUP(from); if (len > 1) PUP(out) = PUP(from); } } else { from = out - dist; /* copy direct from output */ do { /* minimum length is three */ PUP(out) = PUP(from); PUP(out) = PUP(from); PUP(out) = PUP(from); len -= 3; } while (len > 2); if (len) { PUP(out) = PUP(from); if (len > 1) PUP(out) = PUP(from); } } } else if ((op & 64) == 0) { /* 2nd level distance code */ this = dcode[this.val + (hold & ((1U << op) - 1))]; goto dodist; } else { strm->msg = (char *)"invalid distance code"; state->mode = BAD; break; } } else if ((op & 64) == 0) { /* 2nd level length code */ this = lcode[this.val + (hold & ((1U << op) - 1))]; goto dolen; } else if (op & 32) { /* end-of-block */ Tracevv((stderr, "inflate: end of block\n")); state->mode = TYPE; break; } else { strm->msg = (char *)"invalid literal/length code"; state->mode = BAD; break; } } while (in < last && out < end); /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ len = bits >> 3; in -= len; bits -= len << 3; hold &= (1U << bits) - 1; /* update state and return */ strm->next_in = in + OFF; strm->next_out = out + OFF; strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); strm->avail_out = (unsigned)(out < end ? 257 + (end - out) : 257 - (out - end)); state->hold = hold; state->bits = bits; return; } /* inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): - Using bit fields for code structure - Different op definition to avoid & for extra bits (do & for table bits) - Three separate decoding do-loops for direct, window, and write == 0 - Special case for distance > 1 copies to do overlapped load and store copy - Explicit branch predictions (based on measured branch probabilities) - Deferring match copy and interspersed it with decoding subsequent codes - Swapping literal/length else - Swapping window/direct else - Larger unrolled copy loops (three is about right) - Moving len -= 3 statement into middle of loop */ #endif /* !ASMINF */ htmldoc-1.8.27/zlib/trees.h0100664000212600000240000002037406713350451014167 0ustar mikeuser/* header created automatically with -DGEN_TREES_H */ local const ct_data static_ltree[L_CODES+2] = { {{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, {{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, {{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, {{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, {{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, {{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, {{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, {{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, {{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, {{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, {{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, {{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, {{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, {{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, {{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, {{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, {{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, {{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, {{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, {{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, {{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, {{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, {{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, {{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, {{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, {{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, {{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, {{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, {{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, {{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, {{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, {{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, {{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, {{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, {{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, {{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, {{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, {{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, {{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, {{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, {{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, {{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, {{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, {{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, {{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, {{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, {{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, {{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, {{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, {{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, {{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, {{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, {{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, {{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, {{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, {{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, {{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, {{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} }; local const ct_data static_dtree[D_CODES] = { {{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, {{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, {{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, {{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, {{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} }; const uch _dist_code[DIST_CODE_LEN] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 }; local const int base_length[LENGTH_CODES] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 }; local const int base_dist[D_CODES] = { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 }; htmldoc-1.8.27/zlib/FAQ0100664000212600000240000000701107443725625013231 0ustar mikeuser Frequently Asked Questions about zlib If your question is not there, please check the zlib home page http://www.zlib.org which may have more recent information. The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 1. Is zlib Y2K-compliant? Yes. zlib doesn't handle dates. 2. Where can I get a Windows DLL version? The zlib sources can be compiled without change to produce a DLL. If you want a precompiled DLL, see http://www.winimage.com/zLibDll/ . Questions about the zlib DLL should be sent to Gilles Vollant (info@winimage.com). 3. Where can I get a Visual Basic interface to zlib? See * http://www.winimage.com/zLibDll/cmp-z-it.zip * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm * contrib/visual-basic.txt in the zlib distribution 4. compress() returns Z_BUF_ERROR Make sure that before the call of compress, the length of the compressed buffer is equal to the total size of the compressed buffer and not zero. For Visual Basic, check that this parameter is passed by reference ("as any"), not by value ("as long"). 5. deflate() or inflate() returns Z_BUF_ERROR Before making the call, make sure that avail_in and avail_out are not zero. When setting the parameter flush equal to Z_FINISH, also make sure that avail_out is big enough to allow processing all pending input. 6. Where's the zlib documentation (man pages, etc.)? It's in zlib.h for the moment, and Francis S. Lin has converted it to a web page zlib.html. Volunteers to transform this to Unix-style man pages, please contact Jean-loup Gailly (jloup@gzip.org). Examples of zlib usage are in the files example.c and minigzip.c. 7. Why don't you use GNU autoconf or libtool or ...? Because we would like to keep zlib as a very small and simple package. zlib is rather portable and doesn't need much configuration. 8. I found a bug in zlib. Most of the time, such problems are due to an incorrect usage of zlib. Please try to reproduce the problem with a small program and send the corresponding source to us at zlib@gzip.org . Do not send multi-megabyte data files without prior agreement. 9. Why do I get "undefined reference to gzputc"? If "make test" produces something like example.o(.text+0x154): undefined reference to `gzputc' check that you don't have old files libz.* in /usr/lib, /usr/local/lib or /usr/X11R6/lib. Remove any old versions, then do "make install". 10. I need a Delphi interface to zlib. See the directories contrib/delphi and contrib/delphi2 in the zlib distribution. 11. Can zlib handle .zip archives? See the directory contrib/minizip in the zlib distribution. 12. Can zlib handle .Z files? No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt the code of uncompress on your own. 13. How can I make a Unix shared library? make clean ./configure -s make 14. Why does "make test" fail on Mac OS X? Mac OS X already includes zlib as a shared library, and so -lz links the shared library instead of the one that the "make" compiled. For zlib 1.1.3, the two are incompatible due to different compile-time options. Simply change the -lz in the Makefile to libz.a, and it will use the compiled library instead of the shared one and the "make test" will succeed. 15. I have a question about OttoPDF We are not the authors of OttoPDF. The real author is on the OttoPDF web site Joel Hainley jhainley@myndkryme.com. htmldoc-1.8.27/zlib/inffast.h0100664000212600000240000000062710124711246014470 0ustar mikeuser/* inffast.h -- header to use inffast.c * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ void inflate_fast OF((z_streamp strm, unsigned start)); htmldoc-1.8.27/zlib/inffixed.h0100664000212600000240000001430710124711246014632 0ustar mikeuser /* inffixed.h -- table for decoding fixed codes * Generated automatically by makefixed(). */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ static const code lenfix[512] = { {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, {0,9,255} }; static const code distfix[32] = { {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, {22,5,193},{64,5,0} }; htmldoc-1.8.27/zlib/deflate.c0100664000212600000240000015333710233324641014444 0ustar mikeuser/* deflate.c -- compress data using the deflation algorithm * Copyright (C) 1995-2003 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* * ALGORITHM * * The "deflation" process depends on being able to identify portions * of the input text which are identical to earlier input (within a * sliding window trailing behind the input currently being processed). * * The most straightforward technique turns out to be the fastest for * most input files: try all possible matches and select the longest. * The key feature of this algorithm is that insertions into the string * dictionary are very simple and thus fast, and deletions are avoided * completely. Insertions are performed at each input character, whereas * string matches are performed only when the previous match ends. So it * is preferable to spend more time in matches to allow very fast string * insertions and avoid deletions. The matching algorithm for small * strings is inspired from that of Rabin & Karp. A brute force approach * is used to find longer strings when a small match has been found. * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze * (by Leonid Broukhis). * A previous version of this file used a more sophisticated algorithm * (by Fiala and Greene) which is guaranteed to run in linear amortized * time, but has a larger average cost, uses more memory and is patented. * However the F&G algorithm may be faster for some highly redundant * files if the parameter max_chain_length (described below) is too large. * * ACKNOWLEDGEMENTS * * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and * I found it in 'freeze' written by Leonid Broukhis. * Thanks to many people for bug reports and testing. * * REFERENCES * * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". * Available in http://www.ietf.org/rfc/rfc1951.txt * * A description of the Rabin and Karp algorithm is given in the book * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. * * Fiala,E.R., and Greene,D.H. * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 * */ /* @(#) $Id: deflate.c 1403 2005-04-26 02:38:25Z mike $ */ #include "deflate.h" const char deflate_copyright[] = " deflate 1.2.1 Copyright 1995-2003 Jean-loup Gailly "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot include such an acknowledgment, I would appreciate that you keep this copyright string in the executable of your product. */ /* =========================================================================== * Function prototypes. */ typedef enum { need_more, /* block not completed, need more input or more output */ block_done, /* block flush performed */ finish_started, /* finish started, need only more output at next deflate */ finish_done /* finish done, accept no more input or output */ } block_state; typedef block_state (*compress_func) OF((deflate_state *s, int flush)); /* Compression function. Returns the block state after the call. */ local void fill_window OF((deflate_state *s)); local block_state deflate_stored OF((deflate_state *s, int flush)); local block_state deflate_fast OF((deflate_state *s, int flush)); #ifndef FASTEST local block_state deflate_slow OF((deflate_state *s, int flush)); #endif local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); #ifndef FASTEST #ifdef ASMV void match_init OF((void)); /* asm code initialization */ uInt longest_match OF((deflate_state *s, IPos cur_match)); #else local uInt longest_match OF((deflate_state *s, IPos cur_match)); #endif #endif local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); #ifdef DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, int length)); #endif /* =========================================================================== * Local data */ #define NIL 0 /* Tail of hash chains */ #ifndef TOO_FAR # define TOO_FAR 4096 #endif /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) /* Minimum amount of lookahead, except at the end of the input file. * See deflate.c for comments about the MIN_MATCH+1. */ /* Values for max_lazy_match, good_match and max_chain_length, depending on * the desired pack level (0..9). The values given below have been tuned to * exclude worst case performance for pathological files. Better values may be * found for specific files. */ typedef struct config_s { ush good_length; /* reduce lazy search above this match length */ ush max_lazy; /* do not perform lazy search above this match length */ ush nice_length; /* quit search above this match length */ ush max_chain; compress_func func; } config; #ifdef FASTEST local const config configuration_table[2] = { /* good lazy nice chain */ /* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ /* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ #else local const config configuration_table[10] = { /* good lazy nice chain */ /* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ /* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ /* 2 */ {4, 5, 16, 8, deflate_fast}, /* 3 */ {4, 6, 32, 32, deflate_fast}, /* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ /* 5 */ {8, 16, 32, 32, deflate_slow}, /* 6 */ {8, 16, 128, 128, deflate_slow}, /* 7 */ {8, 32, 128, 256, deflate_slow}, /* 8 */ {32, 128, 258, 1024, deflate_slow}, /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ #endif /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different * meaning. */ #define EQUAL 0 /* result of memcmp for equal strings */ #ifndef NO_DUMMY_DECL struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ #endif /* =========================================================================== * Update a hash value with the given input byte * IN assertion: all calls to to UPDATE_HASH are made with consecutive * input characters, so that a running hash key can be computed from the * previous key instead of complete recalculation each time. */ #define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) /* =========================================================================== * Insert string str in the dictionary and set match_head to the previous head * of the hash chain (the most recent string with same hash key). Return * the previous length of the hash chain. * If this file is compiled with -DFASTEST, the compression level is forced * to 1, and no hash chains are maintained. * IN assertion: all calls to to INSERT_STRING are made with consecutive * input characters and the first MIN_MATCH bytes of str are valid * (except for the last MIN_MATCH-1 bytes of the input file). */ #ifdef FASTEST #define INSERT_STRING(s, str, match_head) \ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ match_head = s->head[s->ins_h], \ s->head[s->ins_h] = (Pos)(str)) #else #define INSERT_STRING(s, str, match_head) \ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ s->head[s->ins_h] = (Pos)(str)) #endif /* =========================================================================== * Initialize the hash table (avoiding 64K overflow for 16 bit systems). * prev[] will be initialized on the fly. */ #define CLEAR_HASH(s) \ s->head[s->hash_size-1] = NIL; \ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); /* ========================================================================= */ int ZEXPORT deflateInit_(strm, level, version, stream_size) z_streamp strm; int level; const char *version; int stream_size; { return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */ } /* ========================================================================= */ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, version, stream_size) z_streamp strm; int level; int method; int windowBits; int memLevel; int strategy; const char *version; int stream_size; { deflate_state *s; int wrap = 1; static const char my_version[] = ZLIB_VERSION; ushf *overlay; /* We overlay pending_buf and d_buf+l_buf. This works since the average * output size for (length,distance) codes is <= 24 bits. */ if (version == Z_NULL || version[0] != my_version[0] || stream_size != sizeof(z_stream)) { return Z_VERSION_ERROR; } if (strm == Z_NULL) return Z_STREAM_ERROR; strm->msg = Z_NULL; if (strm->zalloc == (alloc_func)0) { strm->zalloc = zcalloc; strm->opaque = (voidpf)0; } if (strm->zfree == (free_func)0) strm->zfree = zcfree; #ifdef FASTEST if (level != 0) level = 1; #else if (level == Z_DEFAULT_COMPRESSION) level = 6; #endif if (windowBits < 0) { /* suppress zlib wrapper */ wrap = 0; windowBits = -windowBits; } #ifdef GZIP else if (windowBits > 15) { wrap = 2; /* write gzip wrapper instead */ windowBits -= 16; } #endif if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_RLE) { return Z_STREAM_ERROR; } if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); if (s == Z_NULL) return Z_MEM_ERROR; strm->state = (struct internal_state FAR *)s; s->strm = strm; s->wrap = wrap; s->w_bits = windowBits; s->w_size = 1 << s->w_bits; s->w_mask = s->w_size - 1; s->hash_bits = memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); s->pending_buf = (uchf *) overlay; s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || s->pending_buf == Z_NULL) { s->status = FINISH_STATE; strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); deflateEnd (strm); return Z_MEM_ERROR; } s->d_buf = overlay + s->lit_bufsize/sizeof(ush); s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; s->level = level; s->strategy = strategy; s->method = (Byte)method; return deflateReset(strm); } /* ========================================================================= */ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) z_streamp strm; const Bytef *dictionary; uInt dictLength; { deflate_state *s; uInt length = dictLength; uInt n; IPos hash_head = 0; if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || strm->state->wrap == 2 || (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) return Z_STREAM_ERROR; s = strm->state; if (s->wrap) strm->adler = adler32(strm->adler, dictionary, dictLength); if (length < MIN_MATCH) return Z_OK; if (length > MAX_DIST(s)) { length = MAX_DIST(s); #ifndef USE_DICT_HEAD dictionary += dictLength - length; /* use the tail of the dictionary */ #endif } zmemcpy(s->window, dictionary, length); s->strstart = length; s->block_start = (long)length; /* Insert all strings in the hash table (except for the last two bytes). * s->lookahead stays null, so s->ins_h will be recomputed at the next * call of fill_window. */ s->ins_h = s->window[0]; UPDATE_HASH(s, s->ins_h, s->window[1]); for (n = 0; n <= length - MIN_MATCH; n++) { INSERT_STRING(s, n, hash_head); } if (hash_head) hash_head = 0; /* to make compiler happy */ return Z_OK; } /* ========================================================================= */ int ZEXPORT deflateReset (strm) z_streamp strm; { deflate_state *s; if (strm == Z_NULL || strm->state == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { return Z_STREAM_ERROR; } strm->total_in = strm->total_out = 0; strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ strm->data_type = Z_UNKNOWN; s = (deflate_state *)strm->state; s->pending = 0; s->pending_out = s->pending_buf; if (s->wrap < 0) { s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ } s->status = s->wrap ? INIT_STATE : BUSY_STATE; strm->adler = #ifdef GZIP s->wrap == 2 ? crc32(0L, Z_NULL, 0) : #endif adler32(0L, Z_NULL, 0); s->last_flush = Z_NO_FLUSH; _tr_init(s); lm_init(s); return Z_OK; } /* ========================================================================= */ int ZEXPORT deflatePrime (strm, bits, value) z_streamp strm; int bits; int value; { if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; strm->state->bi_valid = bits; strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); return Z_OK; } /* ========================================================================= */ int ZEXPORT deflateParams(strm, level, strategy) z_streamp strm; int level; int strategy; { deflate_state *s; compress_func func; int err = Z_OK; if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; s = strm->state; #ifdef FASTEST if (level != 0) level = 1; #else if (level == Z_DEFAULT_COMPRESSION) level = 6; #endif if (level < 0 || level > 9 || strategy < 0 || strategy > Z_RLE) { return Z_STREAM_ERROR; } func = configuration_table[s->level].func; if (func != configuration_table[level].func && strm->total_in != 0) { /* Flush the last buffer: */ err = deflate(strm, Z_PARTIAL_FLUSH); } if (s->level != level) { s->level = level; s->max_lazy_match = configuration_table[level].max_lazy; s->good_match = configuration_table[level].good_length; s->nice_match = configuration_table[level].nice_length; s->max_chain_length = configuration_table[level].max_chain; } s->strategy = strategy; return err; } /* ========================================================================= * For the default windowBits of 15 and memLevel of 8, this function returns * a close to exact, as well as small, upper bound on the compressed size. * They are coded as constants here for a reason--if the #define's are * changed, then this function needs to be changed as well. The return * value for 15 and 8 only works for those exact settings. * * For any setting other than those defaults for windowBits and memLevel, * the value returned is a conservative worst case for the maximum expansion * resulting from using fixed blocks instead of stored blocks, which deflate * can emit on compressed data for some combinations of the parameters. * * This function could be more sophisticated to provide closer upper bounds * for every combination of windowBits and memLevel, as well as wrap. * But even the conservative upper bound of about 14% expansion does not * seem onerous for output buffer allocation. */ uLong ZEXPORT deflateBound(strm, sourceLen) z_streamp strm; uLong sourceLen; { deflate_state *s; uLong destLen; /* conservative upper bound */ destLen = sourceLen + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; /* if can't get parameters, return conservative bound */ if (strm == Z_NULL || strm->state == Z_NULL) return destLen; /* if not default parameters, return conservative bound */ s = strm->state; if (s->w_bits != 15 || s->hash_bits != 8 + 7) return destLen; /* default settings: return tight bound for that case */ return compressBound(sourceLen); } /* ========================================================================= * Put a short in the pending buffer. The 16-bit value is put in MSB order. * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ local void putShortMSB (s, b) deflate_state *s; uInt b; { put_byte(s, (Byte)(b >> 8)); put_byte(s, (Byte)(b & 0xff)); } /* ========================================================================= * Flush as much pending output as possible. All deflate() output goes * through this function so some applications may wish to modify it * to avoid allocating a large strm->next_out buffer and copying into it. * (See also read_buf()). */ local void flush_pending(strm) z_streamp strm; { unsigned len = strm->state->pending; if (len > strm->avail_out) len = strm->avail_out; if (len == 0) return; zmemcpy(strm->next_out, strm->state->pending_out, len); strm->next_out += len; strm->state->pending_out += len; strm->total_out += len; strm->avail_out -= len; strm->state->pending -= len; if (strm->state->pending == 0) { strm->state->pending_out = strm->state->pending_buf; } } /* ========================================================================= */ int ZEXPORT deflate (strm, flush) z_streamp strm; int flush; { int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; if (strm == Z_NULL || strm->state == Z_NULL || flush > Z_FINISH || flush < 0) { return Z_STREAM_ERROR; } s = strm->state; if (strm->next_out == Z_NULL || (strm->next_in == Z_NULL && strm->avail_in != 0) || (s->status == FINISH_STATE && flush != Z_FINISH)) { ERR_RETURN(strm, Z_STREAM_ERROR); } if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); s->strm = strm; /* just in case */ old_flush = s->last_flush; s->last_flush = flush; /* Write the header */ if (s->status == INIT_STATE) { #ifdef GZIP if (s->wrap == 2) { put_byte(s, 31); put_byte(s, 139); put_byte(s, 8); put_byte(s, 0); put_byte(s, 0); put_byte(s, 0); put_byte(s, 0); put_byte(s, 0); put_byte(s, s->level == 9 ? 2 : (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? 4 : 0)); put_byte(s, 255); s->status = BUSY_STATE; strm->adler = crc32(0L, Z_NULL, 0); } else #endif { uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; uInt level_flags; if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) level_flags = 0; else if (s->level < 6) level_flags = 1; else if (s->level == 6) level_flags = 2; else level_flags = 3; header |= (level_flags << 6); if (s->strstart != 0) header |= PRESET_DICT; header += 31 - (header % 31); s->status = BUSY_STATE; putShortMSB(s, header); /* Save the adler32 of the preset dictionary: */ if (s->strstart != 0) { putShortMSB(s, (uInt)(strm->adler >> 16)); putShortMSB(s, (uInt)(strm->adler & 0xffff)); } strm->adler = adler32(0L, Z_NULL, 0); } } /* Flush as much pending output as possible */ if (s->pending != 0) { flush_pending(strm); if (strm->avail_out == 0) { /* Since avail_out is 0, deflate will be called again with * more output space, but possibly with both pending and * avail_in equal to zero. There won't be anything to do, * but this is not an error situation so make sure we * return OK instead of BUF_ERROR at next call of deflate: */ s->last_flush = -1; return Z_OK; } /* Make sure there is something to do and avoid duplicate consecutive * flushes. For repeated and useless calls with Z_FINISH, we keep * returning Z_STREAM_END instead of Z_BUF_ERROR. */ } else if (strm->avail_in == 0 && flush <= old_flush && flush != Z_FINISH) { ERR_RETURN(strm, Z_BUF_ERROR); } /* User must not provide more input after the first FINISH: */ if (s->status == FINISH_STATE && strm->avail_in != 0) { ERR_RETURN(strm, Z_BUF_ERROR); } /* Start a new block or continue the current one. */ if (strm->avail_in != 0 || s->lookahead != 0 || (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { block_state bstate; bstate = (*(configuration_table[s->level].func))(s, flush); if (bstate == finish_started || bstate == finish_done) { s->status = FINISH_STATE; } if (bstate == need_more || bstate == finish_started) { if (strm->avail_out == 0) { s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ } return Z_OK; /* If flush != Z_NO_FLUSH && avail_out == 0, the next call * of deflate should use the same flush parameter to make sure * that the flush is complete. So we don't have to output an * empty block here, this will be done at next call. This also * ensures that for a very small output buffer, we emit at most * one empty block. */ } if (bstate == block_done) { if (flush == Z_PARTIAL_FLUSH) { _tr_align(s); } else { /* FULL_FLUSH or SYNC_FLUSH */ _tr_stored_block(s, (char*)0, 0L, 0); /* For a full flush, this empty block will be recognized * as a special marker by inflate_sync(). */ if (flush == Z_FULL_FLUSH) { CLEAR_HASH(s); /* forget history */ } } flush_pending(strm); if (strm->avail_out == 0) { s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ return Z_OK; } } } Assert(strm->avail_out > 0, "bug2"); if (flush != Z_FINISH) return Z_OK; if (s->wrap <= 0) return Z_STREAM_END; /* Write the trailer */ #ifdef GZIP if (s->wrap == 2) { put_byte(s, (Byte)(strm->adler & 0xff)); put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); put_byte(s, (Byte)(strm->total_in & 0xff)); put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); } else #endif { putShortMSB(s, (uInt)(strm->adler >> 16)); putShortMSB(s, (uInt)(strm->adler & 0xffff)); } flush_pending(strm); /* If avail_out is zero, the application will call deflate again * to flush the rest. */ if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ return s->pending != 0 ? Z_OK : Z_STREAM_END; } /* ========================================================================= */ int ZEXPORT deflateEnd (strm) z_streamp strm; { int status; if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; status = strm->state->status; if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) { return Z_STREAM_ERROR; } /* Deallocate in reverse order of allocations: */ TRY_FREE(strm, strm->state->pending_buf); TRY_FREE(strm, strm->state->head); TRY_FREE(strm, strm->state->prev); TRY_FREE(strm, strm->state->window); ZFREE(strm, strm->state); strm->state = Z_NULL; return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; } /* ========================================================================= * Copy the source state to the destination state. * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ int ZEXPORT deflateCopy (dest, source) z_streamp dest; z_streamp source; { #ifdef MAXSEG_64K return Z_STREAM_ERROR; #else deflate_state *ds; deflate_state *ss; ushf *overlay; if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { return Z_STREAM_ERROR; } ss = source->state; *dest = *source; ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); if (ds == Z_NULL) return Z_MEM_ERROR; dest->state = (struct internal_state FAR *) ds; *ds = *ss; ds->strm = dest; ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); ds->pending_buf = (uchf *) overlay; if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { deflateEnd (dest); return Z_MEM_ERROR; } /* following zmemcpy do not work for 16-bit MSDOS */ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; ds->bl_desc.dyn_tree = ds->bl_tree; return Z_OK; #endif /* MAXSEG_64K */ } /* =========================================================================== * Read a new buffer from the current input stream, update the adler32 * and total number of bytes read. All deflate() input goes through * this function so some applications may wish to modify it to avoid * allocating a large strm->next_in buffer and copying from it. * (See also flush_pending()). */ local int read_buf(strm, buf, size) z_streamp strm; Bytef *buf; unsigned size; { unsigned len = strm->avail_in; if (len > size) len = size; if (len == 0) return 0; strm->avail_in -= len; if (strm->state->wrap == 1) { strm->adler = adler32(strm->adler, strm->next_in, len); } #ifdef GZIP else if (strm->state->wrap == 2) { strm->adler = crc32(strm->adler, strm->next_in, len); } #endif zmemcpy(buf, strm->next_in, len); strm->next_in += len; strm->total_in += len; return (int)len; } /* =========================================================================== * Initialize the "longest match" routines for a new zlib stream */ local void lm_init (s) deflate_state *s; { s->window_size = (ulg)2L*s->w_size; CLEAR_HASH(s); /* Set the default configuration parameters: */ s->max_lazy_match = configuration_table[s->level].max_lazy; s->good_match = configuration_table[s->level].good_length; s->nice_match = configuration_table[s->level].nice_length; s->max_chain_length = configuration_table[s->level].max_chain; s->strstart = 0; s->block_start = 0L; s->lookahead = 0; s->match_length = s->prev_length = MIN_MATCH-1; s->match_available = 0; s->ins_h = 0; #ifdef ASMV match_init(); /* initialize the asm code */ #endif } #ifndef FASTEST /* =========================================================================== * Set match_start to the longest match starting at the given string and * return its length. Matches shorter or equal to prev_length are discarded, * in which case the result is equal to prev_length and match_start is * garbage. * IN assertions: cur_match is the head of the hash chain for the current * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ #ifndef ASMV /* For 80x86 and 680x0, an optimized version will be provided in match.asm or * match.S. The code will be functionally equivalent. */ local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ int best_len = s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? s->strstart - (IPos)MAX_DIST(s) : NIL; /* Stop when cur_match becomes <= limit. To simplify the code, * we prevent matches with the string of window index 0. */ Posf *prev = s->prev; uInt wmask = s->w_mask; #ifdef UNALIGNED_OK /* Compare two bytes at a time. Note: this is not always beneficial. * Try with and without -DUNALIGNED_OK to check. */ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; register ush scan_start = *(ushf*)scan; register ush scan_end = *(ushf*)(scan+best_len-1); #else register Bytef *strend = s->window + s->strstart + MAX_MATCH; register Byte scan_end1 = scan[best_len-1]; register Byte scan_end = scan[best_len]; #endif /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); /* Do not waste too much time if we already have a good match: */ if (s->prev_length >= s->good_match) { chain_length >>= 2; } /* Do not look for matches beyond the end of the input. This is necessary * to make deflate deterministic. */ if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); do { Assert(cur_match < s->strstart, "no future"); match = s->window + cur_match; /* Skip to next match if the match length cannot increase * or if the match length is less than 2: */ #if (defined(UNALIGNED_OK) && MAX_MATCH == 258) /* This code assumes sizeof(unsigned short) == 2. Do not use * UNALIGNED_OK if your compiler uses a different size. */ if (*(ushf*)(match+best_len-1) != scan_end || *(ushf*)match != scan_start) continue; /* It is not necessary to compare scan[2] and match[2] since they are * always equal when the other bytes match, given that the hash keys * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at * strstart+3, +5, ... up to strstart+257. We check for insufficient * lookahead only every 4th comparison; the 128th check will be made * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is * necessary to put more guard bytes at the end of the window, or * to check more often for insufficient lookahead. */ Assert(scan[2] == match[2], "scan[2]?"); scan++, match++; do { } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && scan < strend); /* The funny "do {}" generates better code on most compilers */ /* Here, scan <= window+strstart+257 */ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); if (*scan == *match) scan++; len = (MAX_MATCH - 1) - (int)(strend-scan); scan = strend - (MAX_MATCH-1); #else /* UNALIGNED_OK */ if (match[best_len] != scan_end || match[best_len-1] != scan_end1 || *match != *scan || *++match != scan[1]) continue; /* The check at best_len-1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that * the hash keys are equal and that HASH_BITS >= 8. */ scan += 2, match++; Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; * the 256th check will be made at strstart+258. */ do { } while (*++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && scan < strend); Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); scan = strend - MAX_MATCH; #endif /* UNALIGNED_OK */ if (len > best_len) { s->match_start = cur_match; best_len = len; if (len >= nice_match) break; #ifdef UNALIGNED_OK scan_end = *(ushf*)(scan+best_len-1); #else scan_end1 = scan[best_len-1]; scan_end = scan[best_len]; #endif } } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length != 0); if ((uInt)best_len <= s->lookahead) return (uInt)best_len; return s->lookahead; } #endif /* ASMV */ #endif /* FASTEST */ /* --------------------------------------------------------------------------- * Optimized version for level == 1 or strategy == Z_RLE only */ local uInt longest_match_fast(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ register Bytef *strend = s->window + s->strstart + MAX_MATCH; /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); Assert(cur_match < s->strstart, "no future"); match = s->window + cur_match; /* Return failure if the match length is less than 2: */ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; /* The check at best_len-1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that * the hash keys are equal and that HASH_BITS >= 8. */ scan += 2, match += 2; Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; * the 256th check will be made at strstart+258. */ do { } while (*++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && scan < strend); Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); if (len < MIN_MATCH) return MIN_MATCH - 1; s->match_start = cur_match; return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; } #ifdef DEBUG /* =========================================================================== * Check that the match at match_start is indeed a match. */ local void check_match(s, start, match, length) deflate_state *s; IPos start, match; int length; { /* check that the match is indeed a match */ if (zmemcmp(s->window + match, s->window + start, length) != EQUAL) { fprintf(stderr, " start %u, match %u, length %d\n", start, match, length); do { fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); } while (--length != 0); z_error("invalid match"); } if (z_verbose > 1) { fprintf(stderr,"\\[%d,%d]", start-match, length); do { putc(s->window[start++], stderr); } while (--length != 0); } } #else # define check_match(s, start, match, length) #endif /* DEBUG */ /* =========================================================================== * Fill the window when the lookahead becomes insufficient. * Updates strstart and lookahead. * * IN assertion: lookahead < MIN_LOOKAHEAD * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD * At least one byte has been read, or avail_in == 0; reads are * performed for at least two bytes (required for the zip translate_eol * option -- not supported here). */ local void fill_window(s) deflate_state *s; { register unsigned n, m; register Posf *p; unsigned more; /* Amount of free space at the end of the window. */ uInt wsize = s->w_size; do { more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); /* Deal with !@#$% 64K limit: */ if (sizeof(int) <= 2) { if (more == 0 && s->strstart == 0 && s->lookahead == 0) { more = wsize; } else if (more == (unsigned)(-1)) { /* Very unlikely, but possible on 16 bit machine if * strstart == 0 && lookahead == 1 (input done a byte at time) */ more--; } } /* If the window is almost full and there is insufficient lookahead, * move the upper half to the lower one to make room in the upper half. */ if (s->strstart >= wsize+MAX_DIST(s)) { zmemcpy(s->window, s->window+wsize, (unsigned)wsize); s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; /* Slide the hash table (could be avoided with 32 bit values at the expense of memory usage). We slide even when level == 0 to keep the hash table consistent if we switch back to level > 0 later. (Using level 0 permanently is not an optimal usage of zlib, so we don't care about this pathological case.) */ n = s->hash_size; p = &s->head[n]; do { m = *--p; *p = (Pos)(m >= wsize ? m-wsize : NIL); } while (--n); n = wsize; #ifndef FASTEST p = &s->prev[n]; do { m = *--p; *p = (Pos)(m >= wsize ? m-wsize : NIL); /* If n is not on any hash chain, prev[n] is garbage but * its value will never be used. */ } while (--n); #endif more += wsize; } if (s->strm->avail_in == 0) return; /* If there was no sliding: * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && * more == window_size - lookahead - strstart * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) * => more >= window_size - 2*WSIZE + 2 * In the BIG_MEM or MMAP case (not yet supported), * window_size == input_size + MIN_LOOKAHEAD && * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. * Otherwise, window_size == 2*WSIZE so more >= 2. * If there was sliding, more >= WSIZE. So in all cases, more >= 2. */ Assert(more >= 2, "more < 2"); n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); s->lookahead += n; /* Initialize the hash value now that we have some input: */ if (s->lookahead >= MIN_MATCH) { s->ins_h = s->window[s->strstart]; UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif } /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, * but this is not important since only literal bytes will be emitted. */ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); } /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. */ #define FLUSH_BLOCK_ONLY(s, eof) { \ _tr_flush_block(s, (s->block_start >= 0L ? \ (charf *)&s->window[(unsigned)s->block_start] : \ (charf *)Z_NULL), \ (ulg)((long)s->strstart - s->block_start), \ (eof)); \ s->block_start = s->strstart; \ flush_pending(s->strm); \ Tracev((stderr,"[FLUSH]")); \ } /* Same but force premature exit if necessary. */ #define FLUSH_BLOCK(s, eof) { \ FLUSH_BLOCK_ONLY(s, eof); \ if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ } /* =========================================================================== * Copy without compression as much as possible from the input stream, return * the current block state. * This function does not insert new strings in the dictionary since * uncompressible data is probably not useful. This function is used * only for the level=0 compression option. * NOTE: this function should be optimized to avoid extra copying from * window to pending_buf. */ local block_state deflate_stored(s, flush) deflate_state *s; int flush; { /* Stored blocks are limited to 0xffff bytes, pending_buf is limited * to pending_buf_size, and each stored block has a 5 byte header: */ ulg max_block_size = 0xffff; ulg max_start; if (max_block_size > s->pending_buf_size - 5) { max_block_size = s->pending_buf_size - 5; } /* Copy as much as possible from input to output: */ for (;;) { /* Fill the window as much as possible: */ if (s->lookahead <= 1) { Assert(s->strstart < s->w_size+MAX_DIST(s) || s->block_start >= (long)s->w_size, "slide too late"); fill_window(s); if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; if (s->lookahead == 0) break; /* flush the current block */ } Assert(s->block_start >= 0L, "block gone"); s->strstart += s->lookahead; s->lookahead = 0; /* Emit a stored block if pending_buf will be full: */ max_start = s->block_start + max_block_size; if (s->strstart == 0 || (ulg)s->strstart >= max_start) { /* strstart == 0 is possible when wraparound on 16-bit machine */ s->lookahead = (uInt)(s->strstart - max_start); s->strstart = (uInt)max_start; FLUSH_BLOCK(s, 0); } /* Flush if we may have to slide, otherwise block_start may become * negative and the data will be gone: */ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { FLUSH_BLOCK(s, 0); } } FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } /* =========================================================================== * Compress as much as possible from the input stream, return the current * block state. * This function does not perform lazy evaluation of matches and inserts * new strings in the dictionary only for unmatched strings or for short * matches. It is used only for the fast compression options. */ local block_state deflate_fast(s, flush) deflate_state *s; int flush; { IPos hash_head = NIL; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ for (;;) { /* Make sure that we always have enough lookahead, except * at the end of the input file. We need MAX_MATCH bytes * for the next match, plus MIN_MATCH bytes to insert the * string following the next match. */ if (s->lookahead < MIN_LOOKAHEAD) { fill_window(s); if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { return need_more; } if (s->lookahead == 0) break; /* flush the current block */ } /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } /* Find the longest match, discarding those <= prev_length. * At this point we have always match_length < MIN_MATCH */ if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { /* To simplify the code, we prevent matches with the string * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ #ifdef FASTEST if ((s->strategy < Z_HUFFMAN_ONLY) || (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { s->match_length = longest_match_fast (s, hash_head); } #else if (s->strategy < Z_HUFFMAN_ONLY) { s->match_length = longest_match (s, hash_head); } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { s->match_length = longest_match_fast (s, hash_head); } #endif /* longest_match() or longest_match_fast() sets match_start */ } if (s->match_length >= MIN_MATCH) { check_match(s, s->strstart, s->match_start, s->match_length); _tr_tally_dist(s, s->strstart - s->match_start, s->match_length - MIN_MATCH, bflush); s->lookahead -= s->match_length; /* Insert new strings in the hash table only if the match length * is not too large. This saves time but degrades compression. */ #ifndef FASTEST if (s->match_length <= s->max_insert_length && s->lookahead >= MIN_MATCH) { s->match_length--; /* string at strstart already in table */ do { s->strstart++; INSERT_STRING(s, s->strstart, hash_head); /* strstart never exceeds WSIZE-MAX_MATCH, so there are * always MIN_MATCH bytes ahead. */ } while (--s->match_length != 0); s->strstart++; } else #endif { s->strstart += s->match_length; s->match_length = 0; s->ins_h = s->window[s->strstart]; UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not * matter since it will be recomputed at next deflate call. */ } } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); _tr_tally_lit (s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } if (bflush) FLUSH_BLOCK(s, 0); } FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } #ifndef FASTEST /* =========================================================================== * Same as above, but achieves better compression. We use a lazy * evaluation for matches: a match is finally adopted only if there is * no better match at the next window position. */ local block_state deflate_slow(s, flush) deflate_state *s; int flush; { IPos hash_head = NIL; /* head of hash chain */ int bflush; /* set if current block must be flushed */ /* Process the input block. */ for (;;) { /* Make sure that we always have enough lookahead, except * at the end of the input file. We need MAX_MATCH bytes * for the next match, plus MIN_MATCH bytes to insert the * string following the next match. */ if (s->lookahead < MIN_LOOKAHEAD) { fill_window(s); if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { return need_more; } if (s->lookahead == 0) break; /* flush the current block */ } /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } /* Find the longest match, discarding those <= prev_length. */ s->prev_length = s->match_length, s->prev_match = s->match_start; s->match_length = MIN_MATCH-1; if (hash_head != NIL && s->prev_length < s->max_lazy_match && s->strstart - hash_head <= MAX_DIST(s)) { /* To simplify the code, we prevent matches with the string * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ if (s->strategy < Z_HUFFMAN_ONLY) { s->match_length = longest_match (s, hash_head); } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { s->match_length = longest_match_fast (s, hash_head); } /* longest_match() or longest_match_fast() sets match_start */ if (s->match_length <= 5 && (s->strategy == Z_FILTERED #if TOO_FAR <= 32767 || (s->match_length == MIN_MATCH && s->strstart - s->match_start > TOO_FAR) #endif )) { /* If prev_match is also MIN_MATCH, match_start is garbage * but we will ignore the current match anyway. */ s->match_length = MIN_MATCH-1; } } /* If there was a match at the previous step and the current * match is not better, output the previous match: */ if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; /* Do not insert strings in hash table beyond this. */ check_match(s, s->strstart-1, s->prev_match, s->prev_length); _tr_tally_dist(s, s->strstart -1 - s->prev_match, s->prev_length - MIN_MATCH, bflush); /* Insert in hash table all strings up to the end of the match. * strstart-1 and strstart are already inserted. If there is not * enough lookahead, the last two strings are not inserted in * the hash table. */ s->lookahead -= s->prev_length-1; s->prev_length -= 2; do { if (++s->strstart <= max_insert) { INSERT_STRING(s, s->strstart, hash_head); } } while (--s->prev_length != 0); s->match_available = 0; s->match_length = MIN_MATCH-1; s->strstart++; if (bflush) FLUSH_BLOCK(s, 0); } else if (s->match_available) { /* If there was no match at the previous position, output a * single literal. If there was a match but the current match * is longer, truncate the previous match to a single literal. */ Tracevv((stderr,"%c", s->window[s->strstart-1])); _tr_tally_lit(s, s->window[s->strstart-1], bflush); if (bflush) { FLUSH_BLOCK_ONLY(s, 0); } s->strstart++; s->lookahead--; if (s->strm->avail_out == 0) return need_more; } else { /* There is no previous match to compare with, wait for * the next step to decide. */ s->match_available = 1; s->strstart++; s->lookahead--; } } Assert (flush != Z_NO_FLUSH, "no flush?"); if (s->match_available) { Tracevv((stderr,"%c", s->window[s->strstart-1])); _tr_tally_lit(s, s->window[s->strstart-1], bflush); s->match_available = 0; } FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } #endif /* FASTEST */ htmldoc-1.8.27/zlib/zlib.h0100664000212600000240000016061310124711246014000 0ustar mikeuser/* zlib.h -- interface of the 'zlib' general purpose compression library version 1.2.1, November 17th, 2003 Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). */ #ifndef ZLIB_H #define ZLIB_H #include "zconf.h" #ifdef __cplusplus extern "C" { #endif #define ZLIB_VERSION "1.2.1" #define ZLIB_VERNUM 0x1210 /* The 'zlib' compression library provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) but other algorithms will be added later and will have the same stream interface. Compression can be done in a single step if the buffers are large enough (for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. The compressed data format used by the in-memory functions is the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped around a deflate stream, which is itself documented in RFC 1951. The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio using the functions that start with "gz". The gzip format is different from the zlib format. gzip is a gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single- file compression on file systems, has a larger header than zlib to maintain directory information, and uses a different, slower check method than zlib. This library does not provide any functions to write gzip files in memory. However such functions could be easily written using zlib's deflate function, the documentation in the gzip RFC, and the examples in gzio.c. The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash even in case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); typedef void (*free_func) OF((voidpf opaque, voidpf address)); struct internal_state; typedef struct z_stream_s { Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ uLong total_in; /* total nb of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ uInt avail_out; /* remaining free space at next_out */ uLong total_out; /* total nb of bytes output so far */ char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ int data_type; /* best guess about the data type: ascii or binary */ uLong adler; /* adler32 value of the uncompressed data */ uLong reserved; /* reserved for future use */ } z_stream; typedef z_stream FAR *z_streamp; /* The application must update next_in and avail_in when avail_in has dropped to zero. It must update next_out and avail_out when avail_out has dropped to zero. The application must initialize zalloc, zfree and opaque before calling the init function. All other fields are set by the compression library and must not be updated by the application. The opaque value provided by the application will be passed as the first parameter for calls of zalloc and zfree. This can be useful for custom memory management. The compression library attaches no meaning to the opaque value. zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be thread safe. On 16-bit systems, the functions zalloc and zfree must be able to allocate exactly 65536 bytes, but will not be required to allocate more than this if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers returned by zalloc for objects of exactly 65536 bytes *must* have their offset normalized to zero. The default allocation function provided by this library ensures this (see zutil.c). To reduce memory requirements and avoid any allocation of 64K objects, at the expense of compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). The fields total_in and total_out can be used for statistics or progress reports. After compression, total_in holds the total size of the uncompressed data and may be saved for use in the decompressor (particularly if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 #define Z_BLOCK 5 /* Allowed flush values; see deflate() and inflate() below for details */ #define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) /* Return codes for the compression/decompression functions. Negative * values are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) /* compression levels */ #define Z_FILTERED 1 #define Z_HUFFMAN_ONLY 2 #define Z_RLE 3 #define Z_DEFAULT_STRATEGY 0 /* compression strategy; see deflateInit2() below for details */ #define Z_BINARY 0 #define Z_ASCII 1 #define Z_UNKNOWN 2 /* Possible values of the data_type field (though see inflate()) */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ /* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check is automatically made by deflateInit and inflateInit. */ /* ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION requests a default compromise between speed and compression (currently equivalent to level 6). deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if level is not a valid compression level, Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible with the version assumed by the caller (ZLIB_VERSION). msg is set to null if there is no error message. deflateInit does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter should be set only when necessary (in interactive applications). Some output may be provided even if flush is not set. Before the call of deflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating avail_in or avail_out accordingly; avail_out should never be zero before the call. The application can consume the compressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so that the decompressor can get all input data available so far. (In particular avail_in is zero after the call if enough output space has been provided before the call.) Flushing may degrade compression for some compression algorithms and so it should be used only when necessary. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if random access is desired. Using Z_FULL_FLUSH too often can seriously degrade the compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out is greater than six to avoid repeated flush markers due to avail_out == 0 on return. If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was enough output space; if deflate returns with Z_OK, this function must be called again with Z_FINISH and more output space (updated avail_out) but no more input data, until it returns with Z_STREAM_END or an error. After deflate has returned Z_STREAM_END, the only possible operations on the stream are deflateReset or deflateEnd. Z_FINISH can be used immediately after deflateInit if all the compression is to be done in a single step. In this case, avail_out must be at least the value returned by deflateBound (see below). If deflate does not return Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). deflate() may update data_type if it can make a good guess about the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered binary. This field is only for information purposes and does not affect the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and deflate() can be called again with more input and more output space to continue compressing. */ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed prematurely (some input or output was discarded). In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. If next_in is not Z_NULL and avail_in is large enough (the exact value depends on the compression method), inflateInit determines the compression method from the zlib header and allocates all data structures accordingly; otherwise the allocation will be deferred to the first call of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to use default allocation functions. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the version assumed by the caller. msg is set to null if there is no error message. inflateInit does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in is updated and processing will resume at this point for the next call of inflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. inflate() provides as much output as possible, until there is no more input data or no more space in the output buffer (see below about the flush parameter). Before the call of inflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating the next_* and avail_* values accordingly. The application can consume the uncompressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of inflate(). If inflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much output as possible to the output buffer. Z_BLOCK requests that inflate() stop if and when it get to the next deflate block boundary. When decoding the zlib or gzip format, this will cause inflate() to return immediately after the header and before the first block. When doing a raw inflate, inflate() will go ahead and process the first block, and will return when it gets to the end of that block, or when it runs out of data. The Z_BLOCK option assists in appending to or combining deflate streams. Also to assist in this, on return inflate() will set strm->data_type to the number of unused bits in the last byte taken from strm->next_in, plus 64 if inflate() is currently decoding the last block in the deflate stream, plus 128 if inflate() returned immediately after decoding an end-of-block code or decoding the complete header up to just before the first byte of the deflate stream. The end-of-block will not be indicated until all of the uncompressed data from that block has been written to strm->next_out. The number of unused bits may in general be greater than seven, except when bit 7 of data_type is set, in which case the number of unused bits will be less than eight. inflate() should normally be called until it returns Z_STREAM_END or an error. However if all decompression is to be performed in a single step (a single call of inflate), the parameter flush should be set to Z_FINISH. In this case all pending input is processed and all pending output is flushed; avail_out must be large enough to hold all the uncompressed data. (The size of the uncompressed data may have been saved by the compressor for this purpose.) The next operation on this stream must be inflateEnd to deallocate the decompression state. The use of Z_FINISH is never required, but can be used to inform inflate that a faster approach may be used for the single inflate() call. In this implementation, inflate() always flushes as much output as possible to the output buffer, and always uses the faster approach on the first call. So the only effect of the flush parameter in this implementation is on the return value of inflate(), as noted below, or when it returns early because Z_BLOCK is used. If a preset dictionary is needed after this call (see inflateSetDictionary below), inflate sets strm-adler to the adler32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the adler32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. inflate() will decompress and check either zlib-wrapped or gzip-wrapped deflate data. The header type is detected automatically. Any information contained in the gzip header is not retained, so applications that need that information should instead use raw inflate, see inflateInit2() below, or inflateBack() and perform their own processing of the gzip header and trailer. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has been reached and all uncompressed output has been produced, Z_NEED_DICT if a preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check value), Z_STREAM_ERROR if the stream structure was inconsistent (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no progress is possible or if there was not enough room in the output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and inflate() can be called again with more input and more output space to continue decompressing. If Z_DATA_ERROR is returned, the application may then call inflateSync() to look for a good compression block if a partial recovery of the data is desired. */ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* Advanced functions */ /* The following functions are needed only in some special applications. */ /* ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy)); This is another version of deflateInit with more compression options. The fields next_in, zalloc, zfree and opaque must be initialized before by the caller. The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. Larger values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. windowBits can also be -8..-15 for raw deflate. In this case, -windowBits determines the window size. deflate() will then generate raw deflate data with no zlib header or trailer, and will not compute an adler32 check value. windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the compressed data instead of a zlib wrapper. The gzip header will have no file name, no extra data, no comment, no modification time (set to zero), no header crc, and the operating system will be set to 255 (unknown). The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel. The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no string match), or Z_RLE to limit match distances to one (run-length encoding). Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately. deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid method). msg is set to null if there is no error message. deflateInit2 does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. This function must be called immediately after deflateInit, deflateInit2 or deflateReset, before any call of deflate. The compressor and decompressor must use exactly the same dictionary (see inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be discarded, for example if the dictionary is larger than the window size in deflate or deflate2. Thus the strings most likely to be useful should be put at the end of the dictionary, not at the front. Upon return of this function, strm->adler is set to the adler32 value of the dictionary; the decompressor may later use this value to determine which dictionary has been used by the compressor. (The adler32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) If a raw deflate was requested, then the adler32 value is not computed and strm->adler is not set. deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent (for example if deflate has already been called for this stream or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, z_streamp source)); /* Sets the destination stream as a complete copy of the source stream. This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal compression state which can be quite large, so this strategy is slow and can consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate all the internal compression state. The stream will keep the same compression level and any other attributes that may have been set by deflateInit2. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, int level, int strategy)); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. If the compression level is changed, the input available so far is compressed with the old level (and may be flushed); the new level will take effect only at the next call of deflate(). Before the call of deflateParams, the stream state must be set as for a call of deflate(), since the currently available input may have to be compressed and flushed. In particular, strm->avail_out must be non-zero. deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if strm->avail_out was zero. */ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen)); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or deflateInit2(). This would be used to allocate an output buffer for deflation in a single pass, and so would be called before deflate(). */ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, int bits, int value)); /* deflatePrime() inserts bits in the deflate output stream. The intent is that this function is used to start off the deflate output with the bits leftover from a previous deflate stream when appending to it. As such, this function can only be used for raw deflate, and must be used before the first deflate() call after a deflateInit2() or deflateReset(). bits must be less than or equal to 16, and that many of the least significant bits of value will be inserted in the output. deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ /* ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. The default value is 15 if inflateInit is used instead. windowBits must be greater than or equal to the windowBits value provided to deflateInit2() while compressing, or it must be equal to 15 if deflateInit2() was not used. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. windowBits can also be -8..-15 for raw inflate. In this case, -windowBits determines the window size. inflate() will then process raw deflate data, not looking for a zlib or gzip header, not generating a check value, and not looking for any check values for comparison at the end of the stream. This is for use with other formats that use the deflate compressed data format such as zip. Those formats provide their own check values. If a custom format is developed using the raw deflate format for compressed data, it is recommended that a check value such as an adler32 or a crc32 be applied to the uncompressed data as is done in the zlib, gzip, and zip formats. For most applications, the zlib format should be used as is. Note that comments above on the use in deflateInit2() applies to the magnitude of windowBits. windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format (the zlib format will return a Z_DATA_ERROR). inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative memLevel). msg is set to null if there is no error message. inflateInit2 does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the adler32 value returned by this call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the expected one (incorrect adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); /* Skips invalid compressed data until a full flush point (see above the description of deflate with Z_FULL_FLUSH) can be found, or until all available input is skipped. No output is provided. inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the success case, the application may save the current current value of total_in which indicates where valid compressed data was found. In the error case, the application may repeatedly call inflateSync, providing more input each time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, z_streamp source)); /* Sets the destination stream as a complete copy of the source stream. This function can be useful when randomly accessing a large stream. The first pass through the stream can periodically record the inflate state, allowing restarting inflate at those points when randomly accessing the stream. inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate all the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ /* ZEXTERN int ZEXPORT inflateBackInit OF((z_stream FAR *strm, int windowBits, unsigned char FAR *window)); Initialize the internal stream state for decompression using inflateBack() calls. The fields zalloc, zfree and opaque in strm must be initialized before the call. If zalloc and zfree are Z_NULL, then the default library- derived memory allocation routines are used. windowBits is the base two logarithm of the window size, in the range 8..15. window is a caller supplied buffer of that size. Except for special applications where it is assured that deflate was used with small window sizes, windowBits must be 15 and a 32K byte window must be supplied to be able to decompress general deflate streams. See inflateBack() for the usage of these routines. inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of the paramaters are invalid, Z_MEM_ERROR if the internal state could not be allocated, or Z_VERSION_ERROR if the version of the library does not match the version of the header file. */ typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); ZEXTERN int ZEXPORT inflateBack OF((z_stream FAR *strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc)); /* inflateBack() does a raw inflate with a single call using a call-back interface for input and output. This is more efficient than inflate() for file i/o applications in that it avoids copying between the output and the sliding window by simply making the window itself the output buffer. This function trusts the application to not change the output buffer passed by the output function, at least until inflateBack() returns. inflateBackInit() must be called first to allocate the internal state and to initialize the state with the user-provided window buffer. inflateBack() may then be used multiple times to inflate a complete, raw deflate stream with each call. inflateBackEnd() is then called to free the allocated state. A raw deflate stream is one with no zlib or gzip header or trailer. This routine would normally be used in a utility that reads zip or gzip files and writes out uncompressed files. The utility would decode the header and process the trailer on its own, hence this routine expects only the raw deflate stream to decompress. This is different from the normal behavior of inflate(), which expects either a zlib or gzip header and trailer around the deflate stream. inflateBack() uses two subroutines supplied by the caller that are then called by inflateBack() for input and output. inflateBack() calls those routines until it reads a complete deflate stream and writes out all of the uncompressed data, or until it encounters an error. The function's parameters and return types are defined above in the in_func and out_func typedefs. inflateBack() will call in(in_desc, &buf) which should return the number of bytes of provided input, and a pointer to that input in buf. If there is no input available, in() must return zero--buf is ignored in that case--and inflateBack() will return a buffer error. inflateBack() will call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() should return zero on success, or non-zero on failure. If out() returns non-zero, inflateBack() will return with an error. Neither in() nor out() are permitted to change the contents of the window provided to inflateBackInit(), which is also the buffer that out() uses to write from. The length written by out() will be at most the window size. Any non-zero amount of input may be provided by in(). For convenience, inflateBack() can be provided input on the first call by setting strm->next_in and strm->avail_in. If that input is exhausted, then in() will be called. Therefore strm->next_in must be initialized before calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in must also be initialized, and then if strm->avail_in is not zero, input will initially be taken from strm->next_in[0 .. strm->avail_in - 1]. The in_desc and out_desc parameters of inflateBack() is passed as the first parameter of in() and out() respectively when they are called. These descriptors can be optionally used to pass any information that the caller- supplied in() and out() functions need to do their job. On return, inflateBack() will set strm->next_in and strm->avail_in to pass back any unused input that was provided by the last in() call. The return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR if in() or out() returned an error, Z_DATA_ERROR if there was a format error in the deflate stream (in which case strm->msg is set to indicate the nature of the error), or Z_STREAM_ERROR if the stream was not properly initialized. In the case of Z_BUF_ERROR, an input or output error can be distinguished using strm->next_in which will be Z_NULL only if in() returned an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to out() returning non-zero. (in() will always be called before out(), so strm->next_in is assured to be defined if out() returns non-zero.) Note that inflateBack() cannot return Z_OK. */ ZEXTERN int ZEXPORT inflateBackEnd OF((z_stream FAR *strm)); /* All memory allocated by inflateBackInit() is freed. inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream state was inconsistent. */ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); /* Return flags indicating compile-time options. Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: 1.0: size of uInt 3.2: size of uLong 5.4: size of voidpf (pointer) 7.6: size of z_off_t Compiler, assembler, and debug options: 8: DEBUG 9: ASMV or ASMINF -- use ASM code 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention 11: 0 (reserved) One-time table building (smaller code, but not thread-safe if true): 12: BUILDFIXED -- build static block decoding tables when needed 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed 14,15: 0 (reserved) Library content (indicates missing functionality): 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking deflate code when not needed) 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect and decode gzip streams (to avoid linking crc code) 18-19: 0 (reserved) Operation variations (changes in library functionality): 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate 21: FASTEST -- deflate algorithm with only one, lowest compression level 22,23: 0 (reserved) The sprintf variant used by gzprintf (zero is best): 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! 26: 0 = returns value, 1 = void -- 1 means inferred string length returned Remainder: 27-31: 0 (reserved) */ /* utility functions */ /* The following utility functions are implemented on top of the basic stream-oriented functions. To simplify the interface, some default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can easily be modified if you need special options. */ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. This function can be used to compress a whole file at once if the input file is mmap'ed. compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. */ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen). Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); /* compressBound() returns an upper bound on the compressed size after compress() or compress2() on sourceLen bytes. It would be used before a compress() or compress2() call to allocate the destination buffer. */ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. This function can be used to decompress a whole file at once if the input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. */ typedef voidp gzFile; ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman only compression as in "wb1h", or 'R' for run-length encoding as in "wb1R". (See the description of deflateInit2 for more information about the strategy parameter.) gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression. gzopen returns NULL if the file could not be opened or if there was insufficient memory to allocate the (de)compression state; errno can be checked to distinguish the two cases (if errno is zero, the zlib error is Z_MEM_ERROR). */ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* gzdopen() associates a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (in the file has been previously opened with fopen). The mode parameter is as in gzopen. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd), mode) closes the file descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). gzdopen returns NULL if there was insufficient memory to allocate the (de)compression state. */ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. */ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* Reads the given number of uncompressed bytes from the compressed file. If the input file was not in gzip format, gzread copies the given number of bytes into the buffer. gzread returns the number of uncompressed bytes actually read (0 for end of file, -1 for error). */ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of uncompressed bytes actually written (0 in case of error). */ ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); /* Converts, formats, and writes the args to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of uncompressed bytes actually written (0 in case of error). The number of uncompressed bytes written is limited to 4095. The caller should assure that this limit is not exceeded. If it is exceeded, then gzprintf() will return return an error (0) with nothing written. In this case, there may also be a buffer overflow with unpredictable consequences, which is possible only if zlib was compiled with the insecure functions sprintf() or vsprintf() because the secure snprintf() or vsnprintf() functions were not available. */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* Writes the given null-terminated string to the compressed file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. */ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* Reads bytes from the compressed file until len-1 characters are read, or a newline character is read and transferred to buf, or an end-of-file condition is encountered. The string is then terminated with a null character. gzgets returns buf, or Z_NULL in case of error. */ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* Writes c, converted to an unsigned char, into the compressed file. gzputc returns the value that was written, or -1 in case of error. */ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* Reads one byte from the compressed file. gzgetc returns this byte or -1 in case of end of file or error. */ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); /* Push one character back onto the stream to be read again later. Only one character of push-back is allowed. gzungetc() returns the character pushed, or -1 on failure. gzungetc() will fail if a character has been pushed but not read yet, or if c is -1. The pushed character will be discarded if the stream is repositioned with gzseek() or gzrewind(). */ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* Flushes all pending output into the compressed file. The parameter flush is as in the deflate() function. The return value is the zlib error number (see function gzerror below). gzflush returns Z_OK if the flush parameter is Z_FINISH and all output could be flushed. gzflush should be called only when strictly necessary because it can degrade compression. */ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence)); /* Sets the starting position for the next gzread or gzwrite on the given compressed file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. */ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); /* Returns the starting position for the next gzread or gzwrite on the given compressed file. This position represents a number of bytes in the uncompressed data stream. gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* Returns 1 when EOF has previously been detected reading the given input stream, otherwise zero. */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* Flushes all pending output if necessary, closes the compressed file and deallocates all the (de)compression state. The return value is the zlib error number (see function gzerror below). */ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* Returns the error message for the last error which occurred on the given compressed file. errnum is set to zlib error number. If an error occurred in the file system and not in the compression library, errnum is set to Z_ERRNO and the application may consult errno to get the exact error code. */ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); /* Clears the error and end-of-file flags for file. This is analogous to the clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ /* checksum functions */ /* These functions are not related to compression but are exported anyway because they might be useful in applications using the compression library. */ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. If buf is NULL, this function returns the required initial value for the checksum. An Adler-32 checksum is almost as reliable as a CRC32 but can be computed much faster. Usage example: uLong adler = adler32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { adler = adler32(adler, buffer, length); } if (adler != original_adler) error(); */ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running crc with the bytes buf[0..len-1] and return the updated crc. If buf is NULL, this function returns the required initial value for the crc. Pre- and post-conditioning (one's complement) is performed within this function so it shouldn't be done by the application. Usage example: uLong crc = crc32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { crc = crc32(crc, buffer, length); } if (crc != original_crc) error(); */ /* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, const char *version, int stream_size)); ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateBackInit_ OF((z_stream FAR *strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)); #define deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit(strm) \ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ (strategy), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit2(strm, windowBits) \ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #define inflateBackInit(strm, windowBits, window) \ inflateBackInit_((strm), (windowBits), (window), \ ZLIB_VERSION, sizeof(z_stream)) #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) struct internal_state {int dummy;}; /* hack for buggy compilers */ #endif ZEXTERN const char * ZEXPORT zError OF((int err)); ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); #ifdef __cplusplus } #endif #endif /* ZLIB_H */ htmldoc-1.8.27/zlib/ChangeLog0100664000212600000240000010627010233324641014440 0ustar mikeuser ChangeLog file for zlib Changes in 1.2.1 (17 November 2003) - Remove a tab in contrib/gzappend/gzappend.c - Update some interfaces in contrib for new zlib functions - Update zlib version number in some contrib entries - Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta] - Support shared libraries on Hurd and KFreeBSD [Brown] - Fix error in NO_DIVIDE option of adler32.c Changes in 1.2.0.8 (4 November 2003) - Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas - Add experimental NO_DIVIDE #define in adler32.c - Possibly faster on some processors (let me know if it is) - Correct Z_BLOCK to not return on first inflate call if no wrap - Fix strm->data_type on inflate() return to correctly indicate EOB - Add deflatePrime() function for appending in the middle of a byte - Add contrib/gzappend for an example of appending to a stream - Update win32/DLL_FAQ.txt [Truta] - Delete Turbo C comment in README [Truta] - Improve some indentation in zconf.h [Truta] - Fix infinite loop on bad input in configure script [Church] - Fix gzeof() for concatenated gzip files [Johnson] - Add example to contrib/visual-basic.txt [Michael B.] - Add -p to mkdir's in Makefile.in [vda] - Fix configure to properly detect presence or lack of printf functions - Add AS400 support [Monnerat] - Add a little Cygwin support [Wilson] Changes in 1.2.0.7 (21 September 2003) - Correct some debug formats in contrib/infback9 - Cast a type in a debug statement in trees.c - Change search and replace delimiter in configure from % to # [Beebe] - Update contrib/untgz to 0.2 with various fixes [Truta] - Add build support for Amiga [Nikl] - Remove some directories in old that have been updated to 1.2 - Add dylib building for Mac OS X in configure and Makefile.in - Remove old distribution stuff from Makefile - Update README to point to DLL_FAQ.txt, and add comment on Mac OS X - Update links in README Changes in 1.2.0.6 (13 September 2003) - Minor FAQ updates - Update contrib/minizip to 1.00 [Vollant] - Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta] - Update POSTINC comment for 68060 [Nikl] - Add contrib/infback9 with deflate64 decoding (unsupported) - For MVS define NO_vsnprintf and undefine FAR [van Burik] - Add pragma for fdopen on MVS [van Burik] Changes in 1.2.0.5 (8 September 2003) - Add OF to inflateBackEnd() declaration in zlib.h - Remember start when using gzdopen in the middle of a file - Use internal off_t counters in gz* functions to properly handle seeks - Perform more rigorous check for distance-too-far in inffast.c - Add Z_BLOCK flush option to return from inflate at block boundary - Set strm->data_type on return from inflate - Indicate bits unused, if at block boundary, and if in last block - Replace size_t with ptrdiff_t in crc32.c, and check for correct size - Add condition so old NO_DEFLATE define still works for compatibility - FAQ update regarding the Windows DLL [Truta] - INDEX update: add qnx entry, remove aix entry [Truta] - Install zlib.3 into mandir [Wilson] - Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta] - Adapt the zlib interface to the new DLL convention guidelines [Truta] - Introduce ZLIB_WINAPI macro to allow the export of functions using the WINAPI calling convention, for Visual Basic [Vollant, Truta] - Update msdos and win32 scripts and makefiles [Truta] - Export symbols by name, not by ordinal, in win32/zlib.def [Truta] - Add contrib/ada [Anisimkov] - Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta] - Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant] - Add contrib/masm686 [Truta] - Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm [Truta, Vollant] - Update contrib/delphi; rename to contrib/pascal; add example [Truta] - Remove contrib/delphi2; add a new contrib/delphi [Truta] - Avoid inclusion of the nonstandard in contrib/iostream, and fix some method prototypes [Truta] - Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip [Truta] - Avoid the use of backslash (\) in contrib/minizip [Vollant] - Fix file time handling in contrib/untgz; update makefiles [Truta] - Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines [Vollant] - Remove contrib/vstudio/vc15_16 [Vollant] - Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta] - Update README.contrib [Truta] - Invert the assignment order of match_head and s->prev[...] in INSERT_STRING [Truta] - Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings [Truta] - Compare function pointers with 0, not with NULL or Z_NULL [Truta] - Fix prototype of syncsearch in inflate.c [Truta] - Introduce ASMINF macro to be enabled when using an ASM implementation of inflate_fast [Truta] - Change NO_DEFLATE to NO_GZCOMPRESS [Truta] - Modify test_gzio in example.c to take a single file name as a parameter [Truta] - Exit the example.c program if gzopen fails [Truta] - Add type casts around strlen in example.c [Truta] - Remove casting to sizeof in minigzip.c; give a proper type to the variable compared with SUFFIX_LEN [Truta] - Update definitions of STDC and STDC99 in zconf.h [Truta] - Synchronize zconf.h with the new Windows DLL interface [Truta] - Use SYS16BIT instead of __32BIT__ to distinguish between 16- and 32-bit platforms [Truta] - Use far memory allocators in small 16-bit memory models for Turbo C [Truta] - Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in zlibCompileFlags [Truta] - Cygwin has vsnprintf [Wilson] - In Windows16, OS_CODE is 0, as in MSDOS [Truta] - In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson] Changes in 1.2.0.4 (10 August 2003) - Minor FAQ updates - Be more strict when checking inflateInit2's windowBits parameter - Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well - Add gzip wrapper option to deflateInit2 using windowBits - Add updated QNX rule in configure and qnx directory [Bonnefoy] - Make inflate distance-too-far checks more rigorous - Clean up FAR usage in inflate - Add casting to sizeof() in gzio.c and minigzip.c Changes in 1.2.0.3 (19 July 2003) - Fix silly error in gzungetc() implementation [Vollant] - Update contrib/minizip and contrib/vstudio [Vollant] - Fix printf format in example.c - Correct cdecl support in zconf.in.h [Anisimkov] - Minor FAQ updates Changes in 1.2.0.2 (13 July 2003) - Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons - Attempt to avoid warnings in crc32.c for pointer-int conversion - Add AIX to configure, remove aix directory [Bakker] - Add some casts to minigzip.c - Improve checking after insecure sprintf() or vsprintf() calls - Remove #elif's from crc32.c - Change leave label to inf_leave in inflate.c and infback.c to avoid library conflicts - Remove inflate gzip decoding by default--only enable gzip decoding by special request for stricter backward compatibility - Add zlibCompileFlags() function to return compilation information - More typecasting in deflate.c to avoid warnings - Remove leading underscore from _Capital #defines [Truta] - Fix configure to link shared library when testing - Add some Windows CE target adjustments [Mai] - Remove #define ZLIB_DLL in zconf.h [Vollant] - Add zlib.3 [Rodgers] - Update RFC URL in deflate.c and algorithm.txt [Mai] - Add zlib_dll_FAQ.txt to contrib [Truta] - Add UL to some constants [Truta] - Update minizip and vstudio [Vollant] - Remove vestigial NEED_DUMMY_RETURN from zconf.in.h - Expand use of NO_DUMMY_DECL to avoid all dummy structures - Added iostream3 to contrib [Schwardt] - Replace rewind() with fseek() for WinCE [Truta] - Improve setting of zlib format compression level flags - Report 0 for huffman and rle strategies and for level == 0 or 1 - Report 2 only for level == 6 - Only deal with 64K limit when necessary at compile time [Truta] - Allow TOO_FAR check to be turned off at compile time [Truta] - Add gzclearerr() function [Souza] - Add gzungetc() function Changes in 1.2.0.1 (17 March 2003) - Add Z_RLE strategy for run-length encoding [Truta] - When Z_RLE requested, restrict matches to distance one - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE - Correct FASTEST compilation to allow level == 0 - Clean up what gets compiled for FASTEST - Incorporate changes to zconf.in.h [Vollant] - Refine detection of Turbo C need for dummy returns - Refine ZLIB_DLL compilation - Include additional header file on VMS for off_t typedef - Try to use _vsnprintf where it supplants vsprintf [Vollant] - Add some casts in inffast.c - Enchance comments in zlib.h on what happens if gzprintf() tries to write more than 4095 bytes before compression - Remove unused state from inflateBackEnd() - Remove exit(0) from minigzip.c, example.c - Get rid of all those darn tabs - Add "check" target to Makefile.in that does the same thing as "test" - Add "mostlyclean" and "maintainer-clean" targets to Makefile.in - Update contrib/inflate86 [Anderson] - Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant] - Add msdos and win32 directories with makefiles [Truta] - More additions and improvements to the FAQ Changes in 1.2.0 (9 March 2003) - New and improved inflate code - About 20% faster - Does not allocate 32K window unless and until needed - Automatically detects and decompresses gzip streams - Raw inflate no longer needs an extra dummy byte at end - Added inflateBack functions using a callback interface--even faster than inflate, useful for file utilities (gzip, zip) - Added inflateCopy() function to record state for random access on externally generated deflate streams (e.g. in gzip files) - More readable code (I hope) - New and improved crc32() - About 50% faster, thanks to suggestions from Rodney Brown - Add deflateBound() and compressBound() functions - Fix memory leak in deflateInit2() - Permit setting dictionary for raw deflate (for parallel deflate) - Fix const declaration for gzwrite() - Check for some malloc() failures in gzio.c - Fix bug in gzopen() on single-byte file 0x1f - Fix bug in gzread() on concatenated file with 0x1f at end of buffer and next buffer doesn't start with 0x8b - Fix uncompress() to return Z_DATA_ERROR on truncated input - Free memory at end of example.c - Remove MAX #define in trees.c (conflicted with some libraries) - Fix static const's in deflate.c, gzio.c, and zutil.[ch] - Declare malloc() and free() in gzio.c if STDC not defined - Use malloc() instead of calloc() in zutil.c if int big enough - Define STDC for AIX - Add aix/ with approach for compiling shared library on AIX - Add HP-UX support for shared libraries in configure - Add OpenUNIX support for shared libraries in configure - Use $cc instead of gcc to build shared library - Make prefix directory if needed when installing - Correct Macintosh avoidance of typedef Byte in zconf.h - Correct Turbo C memory allocation when under Linux - Use libz.a instead of -lz in Makefile (assure use of compiled library) - Update configure to check for snprintf or vsnprintf functions and their return value, warn during make if using an insecure function - Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that is lost when library is used--resolution is to build new zconf.h - Documentation improvements (in zlib.h): - Document raw deflate and inflate - Update RFCs URL - Point out that zlib and gzip formats are different - Note that Z_BUF_ERROR is not fatal - Document string limit for gzprintf() and possible buffer overflow - Note requirement on avail_out when flushing - Note permitted values of flush parameter of inflate() - Add some FAQs (and even answers) to the FAQ - Add contrib/inflate86/ for x86 faster inflate - Add contrib/blast/ for PKWare Data Compression Library decompression - Add contrib/puff/ simple inflate for deflate format description Changes in 1.1.4 (11 March 2002) - ZFREE was repeated on same allocation on some error conditions. This creates a security problem described in http://www.zlib.org/advisory-2002-03-11.txt - Returned incorrect error (Z_MEM_ERROR) on some invalid data - Avoid accesses before window for invalid distances with inflate window less than 32K. - force windowBits > 8 to avoid a bug in the encoder for a window size of 256 bytes. (A complete fix will be available in 1.1.5). Changes in 1.1.3 (9 July 1998) - fix "an inflate input buffer bug that shows up on rare but persistent occasions" (Mark) - fix gzread and gztell for concatenated .gz files (Didier Le Botlan) - fix gzseek(..., SEEK_SET) in write mode - fix crc check after a gzeek (Frank Faubert) - fix miniunzip when the last entry in a zip file is itself a zip file (J Lillge) - add contrib/asm586 and contrib/asm686 (Brian Raiter) See http://www.muppetlabs.com/~breadbox/software/assembly.html - add support for Delphi 3 in contrib/delphi (Bob Dellaca) - add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) - do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) - use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) - added a FAQ file - Support gzdopen on Mac with Metrowerks (Jason Linhart) - Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) - define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) - avoid some warnings with Borland C (Tom Tanner) - fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) - emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) - allow several arguments to configure (Tim Mooney, Frodo Looijaard) - use libdir and includedir in Makefile.in (Tim Mooney) - support shared libraries on OSF1 V4 (Tim Mooney) - remove so_locations in "make clean" (Tim Mooney) - fix maketree.c compilation error (Glenn, Mark) - Python interface to zlib now in Python 1.5 (Jeremy Hylton) - new Makefile.riscos (Rich Walker) - initialize static descriptors in trees.c for embedded targets (Nick Smith) - use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) - add the OS/2 files in Makefile.in too (Andrew Zabolotny) - fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) - fix maketree.c to allow clean compilation of inffixed.h (Mark) - fix parameter check in deflateCopy (Gunther Nikl) - cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) - Many portability patches by Christian Spieler: . zutil.c, zutil.h: added "const" for zmem* . Make_vms.com: fixed some typos . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists . msdos/Makefile.msc: remove "default rtl link library" info from obj files . msdos/Makefile.*: use model-dependent name for the built zlib library . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) - use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) - replace __far with _far for better portability (Christian Spieler, Tom Lane) - fix test for errno.h in configure (Tim Newsham) Changes in 1.1.2 (19 March 98) - added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) See http://www.winimage.com/zLibDll/unzip.html - preinitialize the inflate tables for fixed codes, to make the code completely thread safe (Mark) - some simplifications and slight speed-up to the inflate code (Mark) - fix gzeof on non-compressed files (Allan Schrum) - add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) - use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) - added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) - add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) - do not wrap extern "C" around system includes (Tom Lane) - mention zlib binding for TCL in README (Andreas Kupries) - added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) - allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) - allow "configure --prefix $HOME" (Tim Mooney) - remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) - move Makefile.sas to amiga/Makefile.sas Changes in 1.1.1 (27 Feb 98) - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) - remove block truncation heuristic which had very marginal effect for zlib (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the compression ratio on some files. This also allows inlining _tr_tally for matches in deflate_slow. - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) Changes in 1.1.0 (24 Feb 98) - do not return STREAM_END prematurely in inflate (John Bowler) - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) - compile with -DFASTEST to get compression code optimized for speed only - in minigzip, try mmap'ing the input file first (Miguel Albrecht) - increase size of I/O buffers in minigzip.c and gzio.c (not a big gain on Sun but significant on HP) - add a pointer to experimental unzip library in README (Gilles Vollant) - initialize variable gcc in configure (Chris Herborth) Changes in 1.0.9 (17 Feb 1998) - added gzputs and gzgets functions - do not clear eof flag in gzseek (Mark Diekhans) - fix gzseek for files in transparent mode (Mark Diekhans) - do not assume that vsprintf returns the number of bytes written (Jens Krinke) - replace EXPORT with ZEXPORT to avoid conflict with other programs - added compress2 in zconf.h, zlib.def, zlib.dnt - new asm code from Gilles Vollant in contrib/asm386 - simplify the inflate code (Mark): . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() . ZALLOC the length list in inflate_trees_fixed() instead of using stack . ZALLOC the value area for huft_build() instead of using stack . Simplify Z_FINISH check in inflate() - Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 - in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) - in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with the declaration of FAR (Gilles VOllant) - install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) - read_buf buf parameter of type Bytef* instead of charf* - zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) - do not redeclare unlink in minigzip.c for WIN32 (John Bowler) - fix check for presence of directories in "make install" (Ian Willis) Changes in 1.0.8 (27 Jan 1998) - fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) - fix gzgetc and gzputc for big endian systems (Markus Oberhumer) - added compress2() to allow setting the compression level - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) - use constant arrays for the static trees in trees.c instead of computing them at run time (thanks to Ken Raeburn for this suggestion). To create trees.h, compile with GEN_TREES_H and run "make test". - check return code of example in "make test" and display result - pass minigzip command line options to file_compress - simplifying code of inflateSync to avoid gcc 2.8 bug - support CC="gcc -Wall" in configure -s (QingLong) - avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) - fix test for shared library support to avoid compiler warnings - zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) - check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) - do not use fdopen for Metrowerks on Mac (Brad Pettit)) - add checks for gzputc and gzputc in example.c - avoid warnings in gzio.c and deflate.c (Andreas Kleinert) - use const for the CRC table (Ken Raeburn) - fixed "make uninstall" for shared libraries - use Tracev instead of Trace in infblock.c - in example.c use correct compressed length for test_sync - suppress +vnocompatwarnings in configure for HPUX (not always supported) Changes in 1.0.7 (20 Jan 1998) - fix gzseek which was broken in write mode - return error for gzseek to negative absolute position - fix configure for Linux (Chun-Chung Chen) - increase stack space for MSC (Tim Wegner) - get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) - define EXPORTVA for gzprintf (Gilles Vollant) - added man page zlib.3 (Rick Rodgers) - for contrib/untgz, fix makedir() and improve Makefile - check gzseek in write mode in example.c - allocate extra buffer for seeks only if gzseek is actually called - avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) - add inflateSyncPoint in zconf.h - fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def Changes in 1.0.6 (19 Jan 1998) - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) - Fix a deflate bug occuring only with compression level 0 (thanks to Andy Buckler for finding this one). - In minigzip, pass transparently also the first byte for .Z files. - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() - check Z_FINISH in inflate (thanks to Marc Schluper) - Implement deflateCopy (thanks to Adam Costello) - make static libraries by default in configure, add --shared option. - move MSDOS or Windows specific files to directory msdos - suppress the notion of partial flush to simplify the interface (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) - suppress history buffer provided by application to simplify the interface (this feature was not implemented anyway in 1.0.4) - next_in and avail_in must be initialized before calling inflateInit or inflateInit2 - add EXPORT in all exported functions (for Windows DLL) - added Makefile.nt (thanks to Stephen Williams) - added the unsupported "contrib" directory: contrib/asm386/ by Gilles Vollant 386 asm code replacing longest_match(). contrib/iostream/ by Kevin Ruland A C++ I/O streams interface to the zlib gz* functions contrib/iostream2/ by Tyge Løvset Another C++ I/O streams interface contrib/untgz/ by "Pedro A. Aranda Guti\irrez" A very simple tar.gz file extractor using zlib contrib/visual-basic.txt by Carlos Rios How to use compress(), uncompress() and the gz* functions from VB. - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression level) in minigzip (thanks to Tom Lane) - use const for rommable constants in deflate - added test for gzseek and gztell in example.c - add undocumented function inflateSyncPoint() (hack for Paul Mackerras) - add undocumented function zError to convert error code to string (for Tim Smithers) - Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. - Use default memcpy for Symantec MSDOS compiler. - Add EXPORT keyword for check_func (needed for Windows DLL) - add current directory to LD_LIBRARY_PATH for "make test" - create also a link for libz.so.1 - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) - added -soname for Linux in configure (Chun-Chung Chen, - assign numbers to the exported functions in zlib.def (for Windows DLL) - add advice in zlib.h for best usage of deflateSetDictionary - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) - allow compilation with ANSI keywords only enabled for TurboC in large model - avoid "versionString"[0] (Borland bug) - add NEED_DUMMY_RETURN for Borland - use variable z_verbose for tracing in debug mode (L. Peter Deutsch). - allow compilation with CC - defined STDC for OS/2 (David Charlap) - limit external names to 8 chars for MVS (Thomas Lund) - in minigzip.c, use static buffers only for 16-bit systems - fix suffix check for "minigzip -d foo.gz" - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) - added makelcc.bat for lcc-win32 (Tom St Denis) - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) - Avoid expanded $Id: ChangeLog 1403 2005-04-26 02:38:25Z mike $. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. - check for unistd.h in configure (for off_t) - remove useless check parameter in inflate_blocks_free - avoid useless assignment of s->check to itself in inflate_blocks_new - do not flush twice in gzclose (thanks to Ken Raeburn) - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h - use NO_ERRNO_H instead of enumeration of operating systems with errno.h - work around buggy fclose on pipes for HP/UX - support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) - fix configure if CC is already equal to gcc Changes in 1.0.5 (3 Jan 98) - Fix inflate to terminate gracefully when fed corrupted or invalid data - Use const for rommable constants in inflate - Eliminate memory leaks on error conditions in inflate - Removed some vestigial code in inflate - Update web address in README Changes in 1.0.4 (24 Jul 96) - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF bit, so the decompressor could decompress all the correct data but went on to attempt decompressing extra garbage data. This affected minigzip too. - zlibVersion and gzerror return const char* (needed for DLL) - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) - use z_error only for DEBUG (avoid problem with DLLs) Changes in 1.0.3 (2 Jul 96) - use z_streamp instead of z_stream *, which is now a far pointer in MSDOS small and medium models; this makes the library incompatible with previous versions for these models. (No effect in large model or on other systems.) - return OK instead of BUF_ERROR if previous deflate call returned with avail_out as zero but there is nothing to do - added memcmp for non STDC compilers - define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) - define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) - better check for 16-bit mode MSC (avoids problem with Symantec) Changes in 1.0.2 (23 May 96) - added Windows DLL support - added a function zlibVersion (for the DLL support) - fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) - Bytef is define's instead of typedef'd only for Borland C - avoid reading uninitialized memory in example.c - mention in README that the zlib format is now RFC1950 - updated Makefile.dj2 - added algorithm.doc Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] - fix array overlay in deflate.c which sometimes caused bad compressed data - fix inflate bug with empty stored block - fix MSDOS medium model which was broken in 0.99 - fix deflateParams() which could generated bad compressed data. - Bytef is define'd instead of typedef'ed (work around Borland bug) - added an INDEX file - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) - speed up adler32 for modern machines without auto-increment - added -ansi for IRIX in configure - static_init_done in trees.c is an int - define unlink as delete for VMS - fix configure for QNX - add configure branch for SCO and HPUX - avoid many warnings (unused variables, dead assignments, etc...) - no fdopen for BeOS - fix the Watcom fix for 32 bit mode (define FAR as empty) - removed redefinition of Byte for MKWERKS - work around an MWKERKS bug (incorrect merge of all .h files) Changes in 0.99 (27 Jan 96) - allow preset dictionary shared between compressor and decompressor - allow compression level 0 (no compression) - add deflateParams in zlib.h: allow dynamic change of compression level and compression strategy. - test large buffers and deflateParams in example.c - add optional "configure" to build zlib as a shared library - suppress Makefile.qnx, use configure instead - fixed deflate for 64-bit systems (detected on Cray) - fixed inflate_blocks for 64-bit systems (detected on Alpha) - declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) - always return Z_BUF_ERROR when deflate() has nothing to do - deflateInit and inflateInit are now macros to allow version checking - prefix all global functions and types with z_ with -DZ_PREFIX - make falloc completely reentrant (inftrees.c) - fixed very unlikely race condition in ct_static_init - free in reverse order of allocation to help memory manager - use zlib-1.0/* instead of zlib/* inside the tar.gz - make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion -Wstrict-prototypes -Wmissing-prototypes" - allow gzread on concatenated .gz files - deflateEnd now returns Z_DATA_ERROR if it was premature - deflate is finally (?) fully deterministic (no matches beyond end of input) - Document Z_SYNC_FLUSH - add uninstall in Makefile - Check for __cpluplus in zlib.h - Better test in ct_align for partial flush - avoid harmless warnings for Borland C++ - initialize hash_head in deflate.c - avoid warning on fdopen (gzio.c) for HP cc -Aa - include stdlib.h for STDC compilers - include errno.h for Cray - ignore error if ranlib doesn't exist - call ranlib twice for NeXTSTEP - use exec_prefix instead of prefix for libz.a - renamed ct_* as _tr_* to avoid conflict with applications - clear z->msg in inflateInit2 before any error return - initialize opaque in example.c, gzio.c, deflate.c and inflate.c - fixed typo in zconf.h (_GNUC__ => __GNUC__) - check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) - fix typo in Make_vms.com (f$trnlnm -> f$getsyi) - in fcalloc, normalize pointer if size > 65520 bytes - don't use special fcalloc for 32 bit Borland C++ - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... - use Z_BINARY instead of BINARY - document that gzclose after gzdopen will close the file - allow "a" as mode in gzopen. - fix error checking in gzread - allow skipping .gz extra-field on pipes - added reference to Perl interface in README - put the crc table in FAR data (I dislike more and more the medium model :) - added get_crc_table - added a dimension to all arrays (Borland C can't count). - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast - guard against multiple inclusion of *.h (for precompiled header on Mac) - Watcom C pretends to be Microsoft C small model even in 32 bit mode. - don't use unsized arrays to avoid silly warnings by Visual C++: warning C4746: 'inflate_mask' : unsized array treated as '__far' (what's wrong with far data in far model?). - define enum out of inflate_blocks_state to allow compilation with C++ Changes in 0.95 (16 Aug 95) - fix MSDOS small and medium model (now easier to adapt to any compiler) - inlined send_bits - fix the final (:-) bug for deflate with flush (output was correct but not completely flushed in rare occasions). - default window size is same for compression and decompression (it's now sufficient to set MAX_WBITS in zconf.h). - voidp -> voidpf and voidnp -> voidp (for consistency with other typedefs and because voidnp was not near in large model). Changes in 0.94 (13 Aug 95) - support MSDOS medium model - fix deflate with flush (could sometimes generate bad output) - fix deflateReset (zlib header was incorrectly suppressed) - added support for VMS - allow a compression level in gzopen() - gzflush now calls fflush - For deflate with flush, flush even if no more input is provided. - rename libgz.a as libz.a - avoid complex expression in infcodes.c triggering Turbo C bug - work around a problem with gcc on Alpha (in INSERT_STRING) - don't use inline functions (problem with some gcc versions) - allow renaming of Byte, uInt, etc... with #define. - avoid warning about (unused) pointer before start of array in deflate.c - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c - avoid reserved word 'new' in trees.c Changes in 0.93 (25 June 95) - temporarily disable inline functions - make deflate deterministic - give enough lookahead for PARTIAL_FLUSH - Set binary mode for stdin/stdout in minigzip.c for OS/2 - don't even use signed char in inflate (not portable enough) - fix inflate memory leak for segmented architectures Changes in 0.92 (3 May 95) - don't assume that char is signed (problem on SGI) - Clear bit buffer when starting a stored block - no memcpy on Pyramid - suppressed inftest.c - optimized fill_window, put longest_match inline for gcc - optimized inflate on stored blocks. - untabify all sources to simplify patches Changes in 0.91 (2 May 95) - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h - Document the memory requirements in zconf.h - added "make install" - fix sync search logic in inflateSync - deflate(Z_FULL_FLUSH) now works even if output buffer too short - after inflateSync, don't scare people with just "lo world" - added support for DJGPP Changes in 0.9 (1 May 95) - don't assume that zalloc clears the allocated memory (the TurboC bug was Mark's bug after all :) - let again gzread copy uncompressed data unchanged (was working in 0.71) - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented - added a test of inflateSync in example.c - moved MAX_WBITS to zconf.h because users might want to change that. - document explicitly that zalloc(64K) on MSDOS must return a normalized pointer (zero offset) - added Makefiles for Microsoft C, Turbo C, Borland C++ - faster crc32() Changes in 0.8 (29 April 95) - added fast inflate (inffast.c) - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this is incompatible with previous versions of zlib which returned Z_OK. - work around a TurboC compiler bug (bad code for b << 0, see infutil.h) (actually that was not a compiler bug, see 0.81 above) - gzread no longer reads one extra byte in certain cases - In gzio destroy(), don't reference a freed structure - avoid many warnings for MSDOS - avoid the ERROR symbol which is used by MS Windows Changes in 0.71 (14 April 95) - Fixed more MSDOS compilation problems :( There is still a bug with TurboC large model. Changes in 0.7 (14 April 95) - Added full inflate support. - Simplified the crc32() interface. The pre- and post-conditioning (one's complement) is now done inside crc32(). WARNING: this is incompatible with previous versions; see zlib.h for the new usage. Changes in 0.61 (12 April 95) - workaround for a bug in TurboC. example and minigzip now work on MSDOS. Changes in 0.6 (11 April 95) - added minigzip.c - added gzdopen to reopen a file descriptor as gzFile - added transparent reading of non-gziped files in gzread. - fixed bug in gzread (don't read crc as data) - fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). - don't allocate big arrays in the stack (for MSDOS) - fix some MSDOS compilation problems Changes in 0.5: - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but not yet Z_FULL_FLUSH. - support decompression but only in a single step (forced Z_FINISH) - added opaque object for zalloc and zfree. - added deflateReset and inflateReset - added a variable zlib_version for consistency checking. - renamed the 'filter' parameter of deflateInit2 as 'strategy'. Added Z_FILTERED and Z_HUFFMAN_ONLY constants. Changes in 0.4: - avoid "zip" everywhere, use zlib instead of ziplib. - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush if compression method == 8. - added adler32 and crc32 - renamed deflateOptions as deflateInit2, call one or the other but not both - added the method parameter for deflateInit2. - added inflateInit2 - simplied considerably deflateInit and inflateInit by not supporting user-provided history buffer. This is supported only in deflateInit2 and inflateInit2. Changes in 0.3: - prefix all macro names with Z_ - use Z_FINISH instead of deflateEnd to finish compression. - added Z_HUFFMAN_ONLY - added gzerror() htmldoc-1.8.27/zlib/zutil.c0100664000212600000240000001561010233324641014176 0ustar mikeuser/* zutil.c -- target dependent utility functions for the compression library * Copyright (C) 1995-2003 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: zutil.c 1403 2005-04-26 02:38:25Z mike $ */ #include "zutil.h" #ifndef NO_DUMMY_DECL struct internal_state {int dummy;}; /* for buggy compilers */ #endif #ifndef STDC extern void exit OF((int)); #endif const char * const z_errmsg[10] = { "need dictionary", /* Z_NEED_DICT 2 */ "stream end", /* Z_STREAM_END 1 */ "", /* Z_OK 0 */ "file error", /* Z_ERRNO (-1) */ "stream error", /* Z_STREAM_ERROR (-2) */ "data error", /* Z_DATA_ERROR (-3) */ "insufficient memory", /* Z_MEM_ERROR (-4) */ "buffer error", /* Z_BUF_ERROR (-5) */ "incompatible version",/* Z_VERSION_ERROR (-6) */ ""}; const char * ZEXPORT zlibVersion() { return ZLIB_VERSION; } uLong ZEXPORT zlibCompileFlags() { uLong flags; flags = 0; switch (sizeof(uInt)) { case 2: break; case 4: flags += 1; break; case 8: flags += 2; break; default: flags += 3; } switch (sizeof(uLong)) { case 2: break; case 4: flags += 1 << 2; break; case 8: flags += 2 << 2; break; default: flags += 3 << 2; } switch (sizeof(voidpf)) { case 2: break; case 4: flags += 1 << 4; break; case 8: flags += 2 << 4; break; default: flags += 3 << 4; } switch (sizeof(z_off_t)) { case 2: break; case 4: flags += 1 << 6; break; case 8: flags += 2 << 6; break; default: flags += 3 << 6; } #ifdef DEBUG flags += 1 << 8; #endif #if defined(ASMV) || defined(ASMINF) flags += 1 << 9; #endif #ifdef ZLIB_WINAPI flags += 1 << 10; #endif #ifdef BUILDFIXED flags += 1 << 12; #endif #ifdef DYNAMIC_CRC_TABLE flags += 1 << 13; #endif #ifdef NO_GZCOMPRESS flags += 1 << 16; #endif #ifdef NO_GZIP flags += 1 << 17; #endif #ifdef PKZIP_BUG_WORKAROUND flags += 1 << 20; #endif #ifdef FASTEST flags += 1 << 21; #endif #ifdef STDC # ifdef NO_vsnprintf flags += 1 << 25; # ifdef HAS_vsprintf_void flags += 1 << 26; # endif # else # ifdef HAS_vsnprintf_void flags += 1 << 26; # endif # endif #else flags += 1 << 24; # ifdef NO_snprintf flags += 1 << 25; # ifdef HAS_sprintf_void flags += 1 << 26; # endif # else # ifdef HAS_snprintf_void flags += 1 << 26; # endif # endif #endif return flags; } #ifdef DEBUG # ifndef verbose # define verbose 0 # endif int z_verbose = verbose; void z_error (m) char *m; { fprintf(stderr, "%s\n", m); exit(1); } #endif /* exported to allow conversion of error code to string for compress() and * uncompress() */ const char * ZEXPORT zError(err) int err; { return ERR_MSG(err); } #if defined(_WIN32_WCE) /* does not exist on WCE */ int errno = 0; #endif #ifndef HAVE_MEMCPY void zmemcpy(dest, source, len) Bytef* dest; const Bytef* source; uInt len; { if (len == 0) return; do { *dest++ = *source++; /* ??? to be unrolled */ } while (--len != 0); } int zmemcmp(s1, s2, len) const Bytef* s1; const Bytef* s2; uInt len; { uInt j; for (j = 0; j < len; j++) { if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; } return 0; } void zmemzero(dest, len) Bytef* dest; uInt len; { if (len == 0) return; do { *dest++ = 0; /* ??? to be unrolled */ } while (--len != 0); } #endif #ifdef SYS16BIT #ifdef __TURBOC__ /* Turbo C in 16-bit mode */ # define MY_ZCALLOC /* Turbo C malloc() does not allow dynamic allocation of 64K bytes * and farmalloc(64K) returns a pointer with an offset of 8, so we * must fix the pointer. Warning: the pointer must be put back to its * original form in order to free it, use zcfree(). */ #define MAX_PTR 10 /* 10*64K = 640K */ local int next_ptr = 0; typedef struct ptr_table_s { voidpf org_ptr; voidpf new_ptr; } ptr_table; local ptr_table table[MAX_PTR]; /* This table is used to remember the original form of pointers * to large buffers (64K). Such pointers are normalized with a zero offset. * Since MSDOS is not a preemptive multitasking OS, this table is not * protected from concurrent access. This hack doesn't work anyway on * a protected system like OS/2. Use Microsoft C instead. */ voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) { voidpf buf = opaque; /* just to make some compilers happy */ ulg bsize = (ulg)items*size; /* If we allocate less than 65520 bytes, we assume that farmalloc * will return a usable pointer which doesn't have to be normalized. */ if (bsize < 65520L) { buf = farmalloc(bsize); if (*(ush*)&buf != 0) return buf; } else { buf = farmalloc(bsize + 16L); } if (buf == NULL || next_ptr >= MAX_PTR) return NULL; table[next_ptr].org_ptr = buf; /* Normalize the pointer to seg:0 */ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; *(ush*)&buf = 0; table[next_ptr++].new_ptr = buf; return buf; } void zcfree (voidpf opaque, voidpf ptr) { int n; if (*(ush*)&ptr != 0) { /* object < 64K */ farfree(ptr); return; } /* Find the original pointer */ for (n = 0; n < next_ptr; n++) { if (ptr != table[n].new_ptr) continue; farfree(table[n].org_ptr); while (++n < next_ptr) { table[n-1] = table[n]; } next_ptr--; return; } ptr = opaque; /* just to make some compilers happy */ Assert(0, "zcfree: ptr not found"); } #endif /* __TURBOC__ */ #ifdef M_I86 /* Microsoft C in 16-bit mode */ # define MY_ZCALLOC #if (!defined(_MSC_VER) || (_MSC_VER <= 600)) # define _halloc halloc # define _hfree hfree #endif voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) { if (opaque) opaque = 0; /* to make compiler happy */ return _halloc((long)items, size); } void zcfree (voidpf opaque, voidpf ptr) { if (opaque) opaque = 0; /* to make compiler happy */ _hfree(ptr); } #endif /* M_I86 */ #endif /* SYS16BIT */ #ifndef MY_ZCALLOC /* Any system without a special alloc function */ #ifndef STDC extern voidp malloc OF((uInt size)); extern voidp calloc OF((uInt items, uInt size)); extern void free OF((voidpf ptr)); #endif voidpf zcalloc (opaque, items, size) voidpf opaque; unsigned items; unsigned size; { if (opaque) items += size - size; /* make compiler happy */ return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : (voidpf)calloc(items, size); } void zcfree (opaque, ptr) voidpf opaque; voidpf ptr; { free(ptr); if (opaque) return; /* make compiler happy */ } #endif /* MY_ZCALLOC */ htmldoc-1.8.27/zlib/gzio.c0100664000212600000240000007355010233324641014006 0ustar mikeuser/* gzio.c -- IO on .gz files * Copyright (C) 1995-2003 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h * * Compile this file with -DNO_GZCOMPRESS to avoid the compression code. */ /* @(#) $Id: gzio.c 1403 2005-04-26 02:38:25Z mike $ */ #include #include "zutil.h" #ifdef NO_DEFLATE /* for compatiblity with old definition */ # define NO_GZCOMPRESS #endif #ifndef NO_DUMMY_DECL struct internal_state {int dummy;}; /* for buggy compilers */ #endif #ifndef Z_BUFSIZE # ifdef MAXSEG_64K # define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ # else # define Z_BUFSIZE 16384 # endif #endif #ifndef Z_PRINTF_BUFSIZE # define Z_PRINTF_BUFSIZE 4096 #endif #ifdef __MVS__ # pragma map (fdopen , "\174\174FDOPEN") FILE *fdopen(int, const char *); #endif #ifndef STDC extern voidp malloc OF((uInt size)); extern void free OF((voidpf ptr)); #endif #define ALLOC(size) malloc(size) #define TRYFREE(p) {if (p) free(p);} static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ /* gzip flag byte */ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define RESERVED 0xE0 /* bits 5..7: reserved */ typedef struct gz_stream { z_stream stream; int z_err; /* error code for last stream operation */ int z_eof; /* set if end of input file */ FILE *file; /* .gz file */ Byte *inbuf; /* input buffer */ Byte *outbuf; /* output buffer */ uLong crc; /* crc32 of uncompressed data */ char *msg; /* error message */ char *path; /* path name for debugging only */ int transparent; /* 1 if input file is not a .gz file */ char mode; /* 'w' or 'r' */ z_off_t start; /* start of compressed data in file (header skipped) */ z_off_t in; /* bytes into deflate or inflate */ z_off_t out; /* bytes out of deflate or inflate */ int back; /* one character push-back */ int last; /* true if push-back is last character */ } gz_stream; local gzFile gz_open OF((const char *path, const char *mode, int fd)); local int do_flush OF((gzFile file, int flush)); local int get_byte OF((gz_stream *s)); local void check_header OF((gz_stream *s)); local int destroy OF((gz_stream *s)); local void putLong OF((FILE *file, uLong x)); local uLong getLong OF((gz_stream *s)); /* =========================================================================== Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb"). The file is given either by file descriptor or path name (if fd == -1). gz_open returns NULL if the file could not be opened or if there was insufficient memory to allocate the (de)compression state; errno can be checked to distinguish the two cases (if errno is zero, the zlib error is Z_MEM_ERROR). */ local gzFile gz_open (path, mode, fd) const char *path; const char *mode; int fd; { int err; int level = Z_DEFAULT_COMPRESSION; /* compression level */ int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */ char *p = (char*)mode; gz_stream *s; char fmode[80]; /* copy of mode, without the compression level */ char *m = fmode; if (!path || !mode) return Z_NULL; s = (gz_stream *)ALLOC(sizeof(gz_stream)); if (!s) return Z_NULL; s->stream.zalloc = (alloc_func)0; s->stream.zfree = (free_func)0; s->stream.opaque = (voidpf)0; s->stream.next_in = s->inbuf = Z_NULL; s->stream.next_out = s->outbuf = Z_NULL; s->stream.avail_in = s->stream.avail_out = 0; s->file = NULL; s->z_err = Z_OK; s->z_eof = 0; s->in = 0; s->out = 0; s->back = EOF; s->crc = crc32(0L, Z_NULL, 0); s->msg = NULL; s->transparent = 0; s->path = (char*)ALLOC(strlen(path)+1); if (s->path == NULL) { return destroy(s), (gzFile)Z_NULL; } strcpy(s->path, path); /* do this early for debugging */ s->mode = '\0'; do { if (*p == 'r') s->mode = 'r'; if (*p == 'w' || *p == 'a') s->mode = 'w'; if (*p >= '0' && *p <= '9') { level = *p - '0'; } else if (*p == 'f') { strategy = Z_FILTERED; } else if (*p == 'h') { strategy = Z_HUFFMAN_ONLY; } else if (*p == 'R') { strategy = Z_RLE; } else { *m++ = *p; /* copy the mode */ } } while (*p++ && m != fmode + sizeof(fmode)); if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; if (s->mode == 'w') { #ifdef NO_GZCOMPRESS err = Z_STREAM_ERROR; #else err = deflateInit2(&(s->stream), level, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy); /* windowBits is passed < 0 to suppress zlib header */ s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); #endif if (err != Z_OK || s->outbuf == Z_NULL) { return destroy(s), (gzFile)Z_NULL; } } else { s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); err = inflateInit2(&(s->stream), -MAX_WBITS); /* windowBits is passed < 0 to tell that there is no zlib header. * Note that in this case inflate *requires* an extra "dummy" byte * after the compressed stream in order to complete decompression and * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are * present after the compressed stream. */ if (err != Z_OK || s->inbuf == Z_NULL) { return destroy(s), (gzFile)Z_NULL; } } s->stream.avail_out = Z_BUFSIZE; errno = 0; s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); if (s->file == NULL) { return destroy(s), (gzFile)Z_NULL; } if (s->mode == 'w') { /* Write a very simple .gz header: */ fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); s->start = 10L; /* We use 10L instead of ftell(s->file) to because ftell causes an * fflush on some systems. This version of the library doesn't use * start anyway in write mode, so this initialization is not * necessary. */ } else { check_header(s); /* skip the .gz header */ s->start = ftell(s->file) - s->stream.avail_in; } return (gzFile)s; } /* =========================================================================== Opens a gzip (.gz) file for reading or writing. */ gzFile ZEXPORT gzopen (path, mode) const char *path; const char *mode; { return gz_open (path, mode, -1); } /* =========================================================================== Associate a gzFile with the file descriptor fd. fd is not dup'ed here to mimic the behavio(u)r of fdopen. */ gzFile ZEXPORT gzdopen (fd, mode) int fd; const char *mode; { char name[20]; if (fd < 0) return (gzFile)Z_NULL; sprintf(name, "", fd); /* for debugging */ return gz_open (name, mode, fd); } /* =========================================================================== * Update the compression level and strategy */ int ZEXPORT gzsetparams (file, level, strategy) gzFile file; int level; int strategy; { gz_stream *s = (gz_stream*)file; if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; /* Make room to allow flushing */ if (s->stream.avail_out == 0) { s->stream.next_out = s->outbuf; if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { s->z_err = Z_ERRNO; } s->stream.avail_out = Z_BUFSIZE; } return deflateParams (&(s->stream), level, strategy); } /* =========================================================================== Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been sucessfully opened for reading. */ local int get_byte(s) gz_stream *s; { if (s->z_eof) return EOF; if (s->stream.avail_in == 0) { errno = 0; s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file); if (s->stream.avail_in == 0) { s->z_eof = 1; if (ferror(s->file)) s->z_err = Z_ERRNO; return EOF; } s->stream.next_in = s->inbuf; } s->stream.avail_in--; return *(s->stream.next_in)++; } /* =========================================================================== Check the gzip header of a gz_stream opened for reading. Set the stream mode to transparent if the gzip magic header is not present; set s->err to Z_DATA_ERROR if the magic header is present but the rest of the header is incorrect. IN assertion: the stream s has already been created sucessfully; s->stream.avail_in is zero for the first time, but may be non-zero for concatenated .gz files. */ local void check_header(s) gz_stream *s; { int method; /* method byte */ int flags; /* flags byte */ uInt len; int c; /* Assure two bytes in the buffer so we can peek ahead -- handle case where first byte of header is at the end of the buffer after the last gzip segment */ len = s->stream.avail_in; if (len < 2) { if (len) s->inbuf[0] = s->stream.next_in[0]; errno = 0; len = fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file); if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO; s->stream.avail_in += len; s->stream.next_in = s->inbuf; if (s->stream.avail_in < 2) { s->transparent = s->stream.avail_in; return; } } /* Peek ahead to check the gzip magic header */ if (s->stream.next_in[0] != gz_magic[0] || s->stream.next_in[1] != gz_magic[1]) { s->transparent = 1; return; } s->stream.avail_in -= 2; s->stream.next_in += 2; /* Check the rest of the gzip header */ method = get_byte(s); flags = get_byte(s); if (method != Z_DEFLATED || (flags & RESERVED) != 0) { s->z_err = Z_DATA_ERROR; return; } /* Discard time, xflags and OS code: */ for (len = 0; len < 6; len++) (void)get_byte(s); if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ len = (uInt)get_byte(s); len += ((uInt)get_byte(s))<<8; /* len is garbage if EOF but the loop below will quit anyway */ while (len-- != 0 && get_byte(s) != EOF) ; } if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ while ((c = get_byte(s)) != 0 && c != EOF) ; } if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ while ((c = get_byte(s)) != 0 && c != EOF) ; } if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ for (len = 0; len < 2; len++) (void)get_byte(s); } s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; } /* =========================================================================== * Cleanup then free the given gz_stream. Return a zlib error code. Try freeing in the reverse order of allocations. */ local int destroy (s) gz_stream *s; { int err = Z_OK; if (!s) return Z_STREAM_ERROR; TRYFREE(s->msg); if (s->stream.state != NULL) { if (s->mode == 'w') { #ifdef NO_GZCOMPRESS err = Z_STREAM_ERROR; #else err = deflateEnd(&(s->stream)); #endif } else if (s->mode == 'r') { err = inflateEnd(&(s->stream)); } } if (s->file != NULL && fclose(s->file)) { #ifdef ESPIPE if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ #endif err = Z_ERRNO; } if (s->z_err < 0) err = s->z_err; TRYFREE(s->inbuf); TRYFREE(s->outbuf); TRYFREE(s->path); TRYFREE(s); return err; } /* =========================================================================== Reads the given number of uncompressed bytes from the compressed file. gzread returns the number of bytes actually read (0 for end of file). */ int ZEXPORT gzread (file, buf, len) gzFile file; voidp buf; unsigned len; { gz_stream *s = (gz_stream*)file; Bytef *start = (Bytef*)buf; /* starting point for crc computation */ Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1; if (s->z_err == Z_STREAM_END) return 0; /* EOF */ next_out = (Byte*)buf; s->stream.next_out = (Bytef*)buf; s->stream.avail_out = len; if (s->stream.avail_out && s->back != EOF) { *next_out++ = s->back; s->stream.next_out++; s->stream.avail_out--; s->back = EOF; s->out++; if (s->last) { s->z_err = Z_STREAM_END; return 1; } } while (s->stream.avail_out != 0) { if (s->transparent) { /* Copy first the lookahead bytes: */ uInt n = s->stream.avail_in; if (n > s->stream.avail_out) n = s->stream.avail_out; if (n > 0) { zmemcpy(s->stream.next_out, s->stream.next_in, n); next_out += n; s->stream.next_out = next_out; s->stream.next_in += n; s->stream.avail_out -= n; s->stream.avail_in -= n; } if (s->stream.avail_out > 0) { s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out, s->file); } len -= s->stream.avail_out; s->in += len; s->out += len; if (len == 0) s->z_eof = 1; return (int)len; } if (s->stream.avail_in == 0 && !s->z_eof) { errno = 0; s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file); if (s->stream.avail_in == 0) { s->z_eof = 1; if (ferror(s->file)) { s->z_err = Z_ERRNO; break; } } s->stream.next_in = s->inbuf; } s->in += s->stream.avail_in; s->out += s->stream.avail_out; s->z_err = inflate(&(s->stream), Z_NO_FLUSH); s->in -= s->stream.avail_in; s->out -= s->stream.avail_out; if (s->z_err == Z_STREAM_END) { /* Check CRC and original size */ s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); start = s->stream.next_out; if (getLong(s) != s->crc) { s->z_err = Z_DATA_ERROR; } else { (void)getLong(s); /* The uncompressed length returned by above getlong() may be * different from s->out in case of concatenated .gz files. * Check for such files: */ check_header(s); if (s->z_err == Z_OK) { inflateReset(&(s->stream)); s->crc = crc32(0L, Z_NULL, 0); } } } if (s->z_err != Z_OK || s->z_eof) break; } s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); return (int)(len - s->stream.avail_out); } /* =========================================================================== Reads one byte from the compressed file. gzgetc returns this byte or -1 in case of end of file or error. */ int ZEXPORT gzgetc(file) gzFile file; { unsigned char c; return gzread(file, &c, 1) == 1 ? c : -1; } /* =========================================================================== Push one byte back onto the stream. */ int ZEXPORT gzungetc(c, file) int c; gzFile file; { gz_stream *s = (gz_stream*)file; if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF; s->back = c; s->out--; s->last = (s->z_err == Z_STREAM_END); if (s->last) s->z_err = Z_OK; s->z_eof = 0; return c; } /* =========================================================================== Reads bytes from the compressed file until len-1 characters are read, or a newline character is read and transferred to buf, or an end-of-file condition is encountered. The string is then terminated with a null character. gzgets returns buf, or Z_NULL in case of error. The current implementation is not optimized at all. */ char * ZEXPORT gzgets(file, buf, len) gzFile file; char *buf; int len; { char *b = buf; if (buf == Z_NULL || len <= 0) return Z_NULL; while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ; *buf = '\0'; return b == buf && len > 0 ? Z_NULL : b; } #ifndef NO_GZCOMPRESS /* =========================================================================== Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of bytes actually written (0 in case of error). */ int ZEXPORT gzwrite (file, buf, len) gzFile file; voidpc buf; unsigned len; { gz_stream *s = (gz_stream*)file; if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; s->stream.next_in = (Bytef*)buf; s->stream.avail_in = len; while (s->stream.avail_in != 0) { if (s->stream.avail_out == 0) { s->stream.next_out = s->outbuf; if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { s->z_err = Z_ERRNO; break; } s->stream.avail_out = Z_BUFSIZE; } s->in += s->stream.avail_in; s->out += s->stream.avail_out; s->z_err = deflate(&(s->stream), Z_NO_FLUSH); s->in -= s->stream.avail_in; s->out -= s->stream.avail_out; if (s->z_err != Z_OK) break; } s->crc = crc32(s->crc, (const Bytef *)buf, len); return (int)(len - s->stream.avail_in); } /* =========================================================================== Converts, formats, and writes the args to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of uncompressed bytes actually written (0 in case of error). */ #ifdef STDC #include int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) { char buf[Z_PRINTF_BUFSIZE]; va_list va; int len; buf[sizeof(buf) - 1] = 0; va_start(va, format); #ifdef NO_vsnprintf # ifdef HAS_vsprintf_void (void)vsprintf(buf, format, va); va_end(va); for (len = 0; len < sizeof(buf); len++) if (buf[len] == 0) break; # else len = vsprintf(buf, format, va); va_end(va); # endif #else # ifdef HAS_vsnprintf_void (void)vsnprintf(buf, sizeof(buf), format, va); va_end(va); len = strlen(buf); # else len = vsnprintf(buf, sizeof(buf), format, va); va_end(va); # endif #endif if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) return 0; return gzwrite(file, buf, (unsigned)len); } #else /* not ANSI C */ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) gzFile file; const char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; { char buf[Z_PRINTF_BUFSIZE]; int len; buf[sizeof(buf) - 1] = 0; #ifdef NO_snprintf # ifdef HAS_sprintf_void sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); for (len = 0; len < sizeof(buf); len++) if (buf[len] == 0) break; # else len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); # endif #else # ifdef HAS_snprintf_void snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); len = strlen(buf); # else len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); # endif #endif if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) return 0; return gzwrite(file, buf, len); } #endif /* =========================================================================== Writes c, converted to an unsigned char, into the compressed file. gzputc returns the value that was written, or -1 in case of error. */ int ZEXPORT gzputc(file, c) gzFile file; int c; { unsigned char cc = (unsigned char) c; /* required for big endian systems */ return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1; } /* =========================================================================== Writes the given null-terminated string to the compressed file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. */ int ZEXPORT gzputs(file, s) gzFile file; const char *s; { return gzwrite(file, (char*)s, (unsigned)strlen(s)); } /* =========================================================================== Flushes all pending output into the compressed file. The parameter flush is as in the deflate() function. */ local int do_flush (file, flush) gzFile file; int flush; { uInt len; int done = 0; gz_stream *s = (gz_stream*)file; if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; s->stream.avail_in = 0; /* should be zero already anyway */ for (;;) { len = Z_BUFSIZE - s->stream.avail_out; if (len != 0) { if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) { s->z_err = Z_ERRNO; return Z_ERRNO; } s->stream.next_out = s->outbuf; s->stream.avail_out = Z_BUFSIZE; } if (done) break; s->out += s->stream.avail_out; s->z_err = deflate(&(s->stream), flush); s->out -= s->stream.avail_out; /* Ignore the second of two consecutive flushes: */ if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; /* deflate has finished flushing only when it hasn't used up * all the available space in the output buffer: */ done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; } return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; } int ZEXPORT gzflush (file, flush) gzFile file; int flush; { gz_stream *s = (gz_stream*)file; int err = do_flush (file, flush); if (err) return err; fflush(s->file); return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; } #endif /* NO_GZCOMPRESS */ /* =========================================================================== Sets the starting position for the next gzread or gzwrite on the given compressed file. The offset represents a number of bytes in the gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error. SEEK_END is not implemented, returns error. In this version of the library, gzseek can be extremely slow. */ z_off_t ZEXPORT gzseek (file, offset, whence) gzFile file; z_off_t offset; int whence; { gz_stream *s = (gz_stream*)file; if (s == NULL || whence == SEEK_END || s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) { return -1L; } if (s->mode == 'w') { #ifdef NO_GZCOMPRESS return -1L; #else if (whence == SEEK_SET) { offset -= s->in; } if (offset < 0) return -1L; /* At this point, offset is the number of zero bytes to write. */ if (s->inbuf == Z_NULL) { s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */ if (s->inbuf == Z_NULL) return -1L; zmemzero(s->inbuf, Z_BUFSIZE); } while (offset > 0) { uInt size = Z_BUFSIZE; if (offset < Z_BUFSIZE) size = (uInt)offset; size = gzwrite(file, s->inbuf, size); if (size == 0) return -1L; offset -= size; } return s->in; #endif } /* Rest of function is for reading only */ /* compute absolute position */ if (whence == SEEK_CUR) { offset += s->out; } if (offset < 0) return -1L; if (s->transparent) { /* map to fseek */ s->back = EOF; s->stream.avail_in = 0; s->stream.next_in = s->inbuf; if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; s->in = s->out = offset; return offset; } /* For a negative seek, rewind and use positive seek */ if (offset >= s->out) { offset -= s->out; } else if (gzrewind(file) < 0) { return -1L; } /* offset is now the number of bytes to skip. */ if (offset != 0 && s->outbuf == Z_NULL) { s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); if (s->outbuf == Z_NULL) return -1L; } if (offset && s->back != EOF) { s->back = EOF; s->out++; offset--; if (s->last) s->z_err = Z_STREAM_END; } while (offset > 0) { int size = Z_BUFSIZE; if (offset < Z_BUFSIZE) size = (int)offset; size = gzread(file, s->outbuf, (uInt)size); if (size <= 0) return -1L; offset -= size; } return s->out; } /* =========================================================================== Rewinds input file. */ int ZEXPORT gzrewind (file) gzFile file; { gz_stream *s = (gz_stream*)file; if (s == NULL || s->mode != 'r') return -1; s->z_err = Z_OK; s->z_eof = 0; s->back = EOF; s->stream.avail_in = 0; s->stream.next_in = s->inbuf; s->crc = crc32(0L, Z_NULL, 0); if (!s->transparent) (void)inflateReset(&s->stream); s->in = 0; s->out = 0; return fseek(s->file, s->start, SEEK_SET); } /* =========================================================================== Returns the starting position for the next gzread or gzwrite on the given compressed file. This position represents a number of bytes in the uncompressed data stream. */ z_off_t ZEXPORT gztell (file) gzFile file; { return gzseek(file, 0L, SEEK_CUR); } /* =========================================================================== Returns 1 when EOF has previously been detected reading the given input stream, otherwise zero. */ int ZEXPORT gzeof (file) gzFile file; { gz_stream *s = (gz_stream*)file; /* With concatenated compressed files that can have embedded * crc trailers, z_eof is no longer the only/best indicator of EOF * on a gz_stream. Handle end-of-stream error explicitly here. */ if (s == NULL || s->mode != 'r') return 0; if (s->z_eof) return 1; return s->z_err == Z_STREAM_END; } /* =========================================================================== Outputs a long in LSB order to the given file */ local void putLong (file, x) FILE *file; uLong x; { int n; for (n = 0; n < 4; n++) { fputc((int)(x & 0xff), file); x >>= 8; } } /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets z_err in case of error. */ local uLong getLong (s) gz_stream *s; { uLong x = (uLong)get_byte(s); int c; x += ((uLong)get_byte(s))<<8; x += ((uLong)get_byte(s))<<16; c = get_byte(s); if (c == EOF) s->z_err = Z_DATA_ERROR; x += ((uLong)c)<<24; return x; } /* =========================================================================== Flushes all pending output if necessary, closes the compressed file and deallocates all the (de)compression state. */ int ZEXPORT gzclose (file) gzFile file; { int err; gz_stream *s = (gz_stream*)file; if (s == NULL) return Z_STREAM_ERROR; if (s->mode == 'w') { #ifdef NO_GZCOMPRESS return Z_STREAM_ERROR; #else err = do_flush (file, Z_FINISH); if (err != Z_OK) return destroy((gz_stream*)file); putLong (s->file, s->crc); putLong (s->file, (uLong)(s->in & 0xffffffff)); #endif } return destroy((gz_stream*)file); } /* =========================================================================== Returns the error message for the last error which occured on the given compressed file. errnum is set to zlib error number. If an error occured in the file system and not in the compression library, errnum is set to Z_ERRNO and the application may consult errno to get the exact error code. */ const char * ZEXPORT gzerror (file, errnum) gzFile file; int *errnum; { char *m; gz_stream *s = (gz_stream*)file; if (s == NULL) { *errnum = Z_STREAM_ERROR; return (const char*)ERR_MSG(Z_STREAM_ERROR); } *errnum = s->z_err; if (*errnum == Z_OK) return (const char*)""; m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg); if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err); TRYFREE(s->msg); s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3); if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR); strcpy(s->msg, s->path); strcat(s->msg, ": "); strcat(s->msg, m); return (const char*)s->msg; } /* =========================================================================== Clear the error and end-of-file flags, and do the same for the real file. */ void ZEXPORT gzclearerr (file) gzFile file; { gz_stream *s = (gz_stream*)file; if (s == NULL) return; if (s->z_err != Z_STREAM_END) s->z_err = Z_OK; s->z_eof = 0; clearerr(s->file); } htmldoc-1.8.27/zlib/deflate.h0100664000212600000240000002732110233324641014442 0ustar mikeuser/* deflate.h -- internal compression state * Copyright (C) 1995-2002 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* @(#) $Id: deflate.h 1403 2005-04-26 02:38:25Z mike $ */ #ifndef DEFLATE_H #define DEFLATE_H #include "zutil.h" /* define NO_GZIP when compiling if you want to disable gzip header and trailer creation by deflate(). NO_GZIP would be used to avoid linking in the crc code when it is not needed. For shared libraries, gzip encoding should be left enabled. */ #ifndef NO_GZIP # define GZIP #endif /* =========================================================================== * Internal compression state. */ #define LENGTH_CODES 29 /* number of length codes, not counting the special END_BLOCK code */ #define LITERALS 256 /* number of literal bytes 0..255 */ #define L_CODES (LITERALS+1+LENGTH_CODES) /* number of Literal or Length codes, including the END_BLOCK code */ #define D_CODES 30 /* number of distance codes */ #define BL_CODES 19 /* number of codes used to transfer the bit lengths */ #define HEAP_SIZE (2*L_CODES+1) /* maximum heap size */ #define MAX_BITS 15 /* All codes must not exceed MAX_BITS bits */ #define INIT_STATE 42 #define BUSY_STATE 113 #define FINISH_STATE 666 /* Stream status */ /* Data structure describing a single value and its code string. */ typedef struct ct_data_s { union { ush freq; /* frequency count */ ush code; /* bit string */ } fc; union { ush dad; /* father node in Huffman tree */ ush len; /* length of bit string */ } dl; } FAR ct_data; #define Freq fc.freq #define Code fc.code #define Dad dl.dad #define Len dl.len typedef struct static_tree_desc_s static_tree_desc; typedef struct tree_desc_s { ct_data *dyn_tree; /* the dynamic tree */ int max_code; /* largest code with non zero frequency */ static_tree_desc *stat_desc; /* the corresponding static tree */ } FAR tree_desc; typedef ush Pos; typedef Pos FAR Posf; typedef unsigned IPos; /* A Pos is an index in the character window. We use short instead of int to * save space in the various tables. IPos is used only for parameter passing. */ typedef struct internal_state { z_streamp strm; /* pointer back to this zlib stream */ int status; /* as the name implies */ Bytef *pending_buf; /* output still pending */ ulg pending_buf_size; /* size of pending_buf */ Bytef *pending_out; /* next pending byte to output to the stream */ int pending; /* nb of bytes in the pending buffer */ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ Byte data_type; /* UNKNOWN, BINARY or ASCII */ Byte method; /* STORED (for zip only) or DEFLATED */ int last_flush; /* value of flush param for previous deflate call */ /* used by deflate.c: */ uInt w_size; /* LZ77 window size (32K by default) */ uInt w_bits; /* log2(w_size) (8..16) */ uInt w_mask; /* w_size - 1 */ Bytef *window; /* Sliding window. Input bytes are read into the second half of the window, * and move to the first half later to keep a dictionary of at least wSize * bytes. With this organization, matches are limited to a distance of * wSize-MAX_MATCH bytes, but this ensures that IO is always * performed with a length multiple of the block size. Also, it limits * the window size to 64K, which is quite useful on MSDOS. * To do: use the user input buffer as sliding window. */ ulg window_size; /* Actual size of window: 2*wSize, except when the user input buffer * is directly used as sliding window. */ Posf *prev; /* Link to older string with same hash index. To limit the size of this * array to 64K, this link is maintained only for the last 32K strings. * An index in this array is thus a window index modulo 32K. */ Posf *head; /* Heads of the hash chains or NIL. */ uInt ins_h; /* hash index of string to be inserted */ uInt hash_size; /* number of elements in hash table */ uInt hash_bits; /* log2(hash_size) */ uInt hash_mask; /* hash_size-1 */ uInt hash_shift; /* Number of bits by which ins_h must be shifted at each input * step. It must be such that after MIN_MATCH steps, the oldest * byte no longer takes part in the hash key, that is: * hash_shift * MIN_MATCH >= hash_bits */ long block_start; /* Window position at the beginning of the current output block. Gets * negative when the window is moved backwards. */ uInt match_length; /* length of best match */ IPos prev_match; /* previous match */ int match_available; /* set if previous match exists */ uInt strstart; /* start of string to insert */ uInt match_start; /* start of matching string */ uInt lookahead; /* number of valid bytes ahead in window */ uInt prev_length; /* Length of the best match at previous step. Matches not greater than this * are discarded. This is used in the lazy match evaluation. */ uInt max_chain_length; /* To speed up deflation, hash chains are never searched beyond this * length. A higher limit improves compression ratio but degrades the * speed. */ uInt max_lazy_match; /* Attempt to find a better match only when the current match is strictly * smaller than this value. This mechanism is used only for compression * levels >= 4. */ # define max_insert_length max_lazy_match /* Insert new strings in the hash table only if the match length is not * greater than this length. This saves time but degrades compression. * max_insert_length is used only for compression levels <= 3. */ int level; /* compression level (1..9) */ int strategy; /* favor or force Huffman coding*/ uInt good_match; /* Use a faster search when the previous match is longer than this */ int nice_match; /* Stop searching when current match exceeds this */ /* used by trees.c: */ /* Didn't use ct_data typedef below to supress compiler warning */ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ struct tree_desc_s l_desc; /* desc. for literal tree */ struct tree_desc_s d_desc; /* desc. for distance tree */ struct tree_desc_s bl_desc; /* desc. for bit length tree */ ush bl_count[MAX_BITS+1]; /* number of codes at each bit length for an optimal tree */ int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ int heap_len; /* number of elements in the heap */ int heap_max; /* element of largest frequency */ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. * The same heap array is used to build all trees. */ uch depth[2*L_CODES+1]; /* Depth of each subtree used as tie breaker for trees of equal frequency */ uchf *l_buf; /* buffer for literals or lengths */ uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for * limiting lit_bufsize to 64K: * - frequencies can be kept in 16 bit counters * - if compression is not successful for the first block, all input * data is still in the window so we can still emit a stored block even * when input comes from standard input. (This can also be done for * all blocks if lit_bufsize is not greater than 32K.) * - if compression is not successful for a file smaller than 64K, we can * even emit a stored file instead of a stored block (saving 5 bytes). * This is applicable only for zip (not gzip or zlib). * - creating new Huffman trees less frequently may not provide fast * adaptation to changes in the input data statistics. (Take for * example a binary file with poorly compressible code followed by * a highly compressible string table.) Smaller buffer sizes give * fast adaptation but have of course the overhead of transmitting * trees more frequently. * - I can't count above 4 */ uInt last_lit; /* running index in l_buf */ ushf *d_buf; /* Buffer for distances. To simplify the code, d_buf and l_buf have * the same number of elements. To use different lengths, an extra flag * array would be necessary. */ ulg opt_len; /* bit length of current block with optimal trees */ ulg static_len; /* bit length of current block with static trees */ uInt matches; /* number of string matches in current block */ int last_eob_len; /* bit length of EOB code for last block */ #ifdef DEBUG ulg compressed_len; /* total bit length of compressed file mod 2^32 */ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ #endif ush bi_buf; /* Output buffer. bits are inserted starting at the bottom (least * significant bits). */ int bi_valid; /* Number of valid bits in bi_buf. All bits above the last valid bit * are always zero. */ } FAR deflate_state; /* Output a byte on the stream. * IN assertion: there is enough room in pending_buf. */ #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) /* Minimum amount of lookahead, except at the end of the input file. * See deflate.c for comments about the MIN_MATCH+1. */ #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) /* In order to simplify the code, particularly on 16 bit machines, match * distances are limited to MAX_DIST instead of WSIZE. */ /* in trees.c */ void _tr_init OF((deflate_state *s)); int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, int eof)); void _tr_align OF((deflate_state *s)); void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, int eof)); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) /* Mapping from a distance to a distance code. dist is the distance - 1 and * must not have side effects. _dist_code[256] and _dist_code[257] are never * used. */ #ifndef DEBUG /* Inline versions of _tr_tally for speed: */ #if defined(GEN_TREES_H) || !defined(STDC) extern uch _length_code[]; extern uch _dist_code[]; #else extern const uch _length_code[]; extern const uch _dist_code[]; #endif # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ s->d_buf[s->last_lit] = 0; \ s->l_buf[s->last_lit++] = cc; \ s->dyn_ltree[cc].Freq++; \ flush = (s->last_lit == s->lit_bufsize-1); \ } # define _tr_tally_dist(s, distance, length, flush) \ { uch len = (length); \ ush dist = (distance); \ s->d_buf[s->last_lit] = dist; \ s->l_buf[s->last_lit++] = len; \ dist--; \ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ s->dyn_dtree[d_code(dist)].Freq++; \ flush = (s->last_lit == s->lit_bufsize-1); \ } #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) # define _tr_tally_dist(s, distance, length, flush) \ flush = _tr_tally(s, distance, length) #endif #endif /* DEFLATE_H */ htmldoc-1.8.27/zlib/crc32.c0100664000212600000240000002304410233324641013743 0ustar mikeuser/* crc32.c -- compute the CRC-32 of a data stream * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * Thanks to Rodney Brown for his contribution of faster * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing * tables for updating the shift register in one step with three exclusive-ors * instead of four steps with four exclusive-ors. This results about a factor * of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. */ /* @(#) $Id: crc32.c 1403 2005-04-26 02:38:25Z mike $ */ #ifdef MAKECRCH # include # ifndef DYNAMIC_CRC_TABLE # define DYNAMIC_CRC_TABLE # endif /* !DYNAMIC_CRC_TABLE */ #endif /* MAKECRCH */ #include "zutil.h" /* for STDC and FAR definitions */ #define local static /* Find a four-byte integer type for crc32_little() and crc32_big(). */ #ifndef NOBYFOUR # ifdef STDC /* need ANSI C limits.h to determine sizes */ # include # define BYFOUR # if (UINT_MAX == 0xffffffffUL) typedef unsigned int u4; # else # if (ULONG_MAX == 0xffffffffUL) typedef unsigned long u4; # else # if (USHRT_MAX == 0xffffffffUL) typedef unsigned short u4; # else # undef BYFOUR /* can't find a four-byte integer type! */ # endif # endif # endif # endif /* STDC */ #endif /* !NOBYFOUR */ /* Definitions for doing the crc four data bytes at a time. */ #ifdef BYFOUR # define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ (((w)&0xff00)<<8)+(((w)&0xff)<<24)) local unsigned long crc32_little OF((unsigned long, const unsigned char FAR *, unsigned)); local unsigned long crc32_big OF((unsigned long, const unsigned char FAR *, unsigned)); # define TBLS 8 #else # define TBLS 1 #endif /* BYFOUR */ #ifdef DYNAMIC_CRC_TABLE local int crc_table_empty = 1; local unsigned long FAR crc_table[TBLS][256]; local void make_crc_table OF((void)); #ifdef MAKECRCH local void write_table OF((FILE *, const unsigned long FAR *)); #endif /* MAKECRCH */ /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x (which is shifting right by one and adding x^32 mod p if the bit shifted out is a one). We start with the highest power (least significant bit) of q and repeat for all eight bits of q. The first table is simply the CRC of all possible eight bit values. This is all the information needed to generate CRCs on data a byte at a time for all combinations of CRC register values and incoming bytes. The remaining tables allow for word-at-a-time CRC calculation for both big-endian and little- endian machines, where a word is four bytes. */ local void make_crc_table() { unsigned long c; int n, k; unsigned long poly; /* polynomial exclusive-or pattern */ /* terms of polynomial defining this crc (except x^32): */ static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; /* make exclusive-or pattern from polynomial (0xedb88320UL) */ poly = 0UL; for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) poly |= 1UL << (31 - p[n]); /* generate a crc for every 8-bit value */ for (n = 0; n < 256; n++) { c = (unsigned long)n; for (k = 0; k < 8; k++) c = c & 1 ? poly ^ (c >> 1) : c >> 1; crc_table[0][n] = c; } #ifdef BYFOUR /* generate crc for each value followed by one, two, and three zeros, and then the byte reversal of those as well as the first table */ for (n = 0; n < 256; n++) { c = crc_table[0][n]; crc_table[4][n] = REV(c); for (k = 1; k < 4; k++) { c = crc_table[0][c & 0xff] ^ (c >> 8); crc_table[k][n] = c; crc_table[k + 4][n] = REV(c); } } #endif /* BYFOUR */ crc_table_empty = 0; #ifdef MAKECRCH /* write out CRC tables to crc32.h */ { FILE *out; out = fopen("crc32.h", "w"); if (out == NULL) return; fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); fprintf(out, "local const unsigned long FAR "); fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); write_table(out, crc_table[0]); # ifdef BYFOUR fprintf(out, "#ifdef BYFOUR\n"); for (k = 1; k < 8; k++) { fprintf(out, " },\n {\n"); write_table(out, crc_table[k]); } fprintf(out, "#endif\n"); # endif /* BYFOUR */ fprintf(out, " }\n};\n"); fclose(out); } #endif /* MAKECRCH */ } #ifdef MAKECRCH local void write_table(out, table) FILE *out; const unsigned long FAR *table; { int n; for (n = 0; n < 256; n++) fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); } #endif /* MAKECRCH */ #else /* !DYNAMIC_CRC_TABLE */ /* ======================================================================== * Tables of CRC-32s of all single-byte values, made by make_crc_table(). */ #include "crc32.h" #endif /* DYNAMIC_CRC_TABLE */ /* ========================================================================= * This function can be used by asm versions of crc32() */ const unsigned long FAR * ZEXPORT get_crc_table() { #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif /* DYNAMIC_CRC_TABLE */ return (const unsigned long FAR *)crc_table; } /* ========================================================================= */ #define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 /* ========================================================================= */ unsigned long ZEXPORT crc32(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; unsigned len; { if (buf == Z_NULL) return 0UL; #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif /* DYNAMIC_CRC_TABLE */ #ifdef BYFOUR if (sizeof(void *) == sizeof(ptrdiff_t)) { u4 endian; endian = 1; if (*((unsigned char *)(&endian))) return crc32_little(crc, buf, len); else return crc32_big(crc, buf, len); } #endif /* BYFOUR */ crc = crc ^ 0xffffffffUL; while (len >= 8) { DO8; len -= 8; } if (len) do { DO1; } while (--len); return crc ^ 0xffffffffUL; } #ifdef BYFOUR /* ========================================================================= */ #define DOLIT4 c ^= *buf4++; \ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 /* ========================================================================= */ local unsigned long crc32_little(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; unsigned len; { register u4 c; register const u4 FAR *buf4; c = (u4)crc; c = ~c; while (len && ((ptrdiff_t)buf & 3)) { c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); len--; } buf4 = (const u4 FAR *)buf; while (len >= 32) { DOLIT32; len -= 32; } while (len >= 4) { DOLIT4; len -= 4; } buf = (const unsigned char FAR *)buf4; if (len) do { c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); } while (--len); c = ~c; return (unsigned long)c; } /* ========================================================================= */ #define DOBIG4 c ^= *++buf4; \ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 /* ========================================================================= */ local unsigned long crc32_big(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; unsigned len; { register u4 c; register const u4 FAR *buf4; c = REV((u4)crc); c = ~c; while (len && ((ptrdiff_t)buf & 3)) { c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); len--; } buf4 = (const u4 FAR *)buf; buf4--; while (len >= 32) { DOBIG32; len -= 32; } while (len >= 4) { DOBIG4; len -= 4; } buf4++; buf = (const unsigned char FAR *)buf4; if (len) do { c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); } while (--len); c = ~c; return (unsigned long)(REV(c)); } #endif /* BYFOUR */ htmldoc-1.8.27/zlib/README0100664000212600000240000001312210124711246013537 0ustar mikeuserZLIB DATA COMPRESSION LIBRARY zlib 1.2.1 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). These documents are also available in other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html All functions of the compression library are documented in the file zlib.h (volunteer to write man pages welcome, contact zlib@gzip.org). A usage example of the library is given in the file example.c which also tests that the library is working correctly. Another example is given in the file minigzip.c. The compression library itself is composed of all source files except example.c and minigzip.c. To compile all files and run the test program, follow the instructions given at the top of Makefile. In short "make test; make install" should work for most machines. For Unix: "./configure; make test; make install" For MSDOS, use one of the special makefiles such as Makefile.msc. For VMS, use Make_vms.com or descrip.mms. Questions about zlib should be sent to , or to Gilles Vollant for the Windows DLL version. The zlib home page is http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, please check this site to verify that you have the latest version of zlib; otherwise get the latest version and check whether the problem still exists or not. PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking for help. Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available in http://dogma.net/markn/articles/zlibtool/zlibtool.htm The changes made in version 1.2.1 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory "contrib". A Java implementation of zlib is available in the Java Development Kit http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html See the zlib home page http://www.zlib.org for details. A Perl interface to zlib written by Paul Marquess is in the CPAN (Comprehensive Perl Archive Network) sites http://www.cpan.org/modules/by-module/Compress/ A Python interface to zlib written by A.M. Kuchling is available in Python 1.5 and later versions, see http://www.python.org/doc/lib/module-zlib.html A zlib binding for TCL written by Andreas Kupries is availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html An experimental package to read and write files in .zip format, written on top of zlib by Gilles Vollant , is available in the contrib/minizip directory of zlib. Notes for some targets: - For Windows DLL versions, please see win32/DLL_FAQ.txt - For 64-bit Irix, deflate.c must be compiled without any optimization. With -O, one libpng test fails. The test works in 32 bit mode (with the -n32 compiler flag). The compiler bug has been reported to SGI. - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works when compiled with cc. - On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is necessary to get gzprintf working correctly. This is done by configure. - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with other compilers. Use "make test" to check your compiler. - gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. - For PalmOs, see http://palmzlib.sourceforge.net/ - When building a shared, i.e. dynamic library on Mac OS X, the library must be installed before testing (do "make install" before "make test"), since the library location is specified in the library. Acknowledgments: The deflate format used by zlib was defined by Phil Katz. The deflate and zlib specifications were written by L. Peter Deutsch. Thanks to all the people who reported problems and suggested various improvements in zlib; they are too numerous to cite here. Copyright notice: (C) 1995-2003 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu If you use the zlib library in a product, we would appreciate *not* receiving lengthy legal documents to sign. The sources are provided for free but without warranty of any kind. The library has been entirely written by Jean-loup Gailly and Mark Adler; it does not include third-party code. If you redistribute modified sources, we would appreciate that you include in the file ChangeLog history information documenting your changes. Please read the FAQ for more information on the distribution of modified source versions. htmldoc-1.8.27/zlib/zutil.h0100664000212600000240000001461110233324641014203 0ustar mikeuser/* zutil.h -- internal interface and configuration of the compression library * Copyright (C) 1995-2003 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* @(#) $Id: zutil.h 1403 2005-04-26 02:38:25Z mike $ */ #ifndef ZUTIL_H #define ZUTIL_H #define ZLIB_INTERNAL #include "zlib.h" #ifdef STDC # include # include # include #endif #ifdef NO_ERRNO_H extern int errno; #else # include #endif #ifndef local # define local static #endif /* compile with -Dlocal if your debugger can't find static symbols */ typedef unsigned char uch; typedef uch FAR uchf; typedef unsigned short ush; typedef ush FAR ushf; typedef unsigned long ulg; extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] #define ERR_RETURN(strm,err) \ return (strm->msg = (char*)ERR_MSG(err), (err)) /* To be used only when the state is known to be valid */ /* common constants */ #ifndef DEF_WBITS # define DEF_WBITS MAX_WBITS #endif /* default windowBits for decompression. MAX_WBITS is for compression only */ #if MAX_MEM_LEVEL >= 8 # define DEF_MEM_LEVEL 8 #else # define DEF_MEM_LEVEL MAX_MEM_LEVEL #endif /* default memLevel */ #define STORED_BLOCK 0 #define STATIC_TREES 1 #define DYN_TREES 2 /* The three kinds of block type */ #define MIN_MATCH 3 #define MAX_MATCH 258 /* The minimum and maximum match lengths */ #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ /* target dependencies */ #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) # define OS_CODE 0x00 # if defined(__TURBOC__) || defined(__BORLANDC__) # if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) /* Allow compilation with ANSI keywords only enabled */ void _Cdecl farfree( void *block ); void *_Cdecl farmalloc( unsigned long nbytes ); # else # include # endif # else /* MSC or DJGPP */ # include # endif #endif #ifdef AMIGA # define OS_CODE 0x01 #endif #if defined(VAXC) || defined(VMS) # define OS_CODE 0x02 # define F_OPEN(name, mode) \ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") #endif #if defined(ATARI) || defined(atarist) # define OS_CODE 0x05 #endif #ifdef OS2 # define OS_CODE 0x06 #endif #if defined(MACOS) || defined(TARGET_OS_MAC) # define OS_CODE 0x07 # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os # include /* for fdopen */ # else # ifndef fdopen # define fdopen(fd,mode) NULL /* No fdopen() */ # endif # endif #endif #ifdef TOPS20 # define OS_CODE 0x0a #endif #ifdef WIN32 # ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ # define OS_CODE 0x0b # endif #endif #ifdef __50SERIES /* Prime/PRIMOS */ # define OS_CODE 0x0f #endif #if defined(_BEOS_) || defined(RISCOS) # define fdopen(fd,mode) NULL /* No fdopen() */ #endif #if (defined(_MSC_VER) && (_MSC_VER > 600)) # if defined(_WIN32_WCE) # define fdopen(fd,mode) NULL /* No fdopen() */ # ifndef _PTRDIFF_T_DEFINED typedef int ptrdiff_t; # define _PTRDIFF_T_DEFINED # endif # else # define fdopen(fd,type) _fdopen(fd,type) # endif #endif /* common defaults */ #ifndef OS_CODE # define OS_CODE 0x03 /* assume Unix */ #endif #ifndef F_OPEN # define F_OPEN(name, mode) fopen((name), (mode)) #endif /* functions */ #if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) # ifndef HAVE_VSNPRINTF # define HAVE_VSNPRINTF # endif #endif #if defined(__CYGWIN__) # ifndef HAVE_VSNPRINTF # define HAVE_VSNPRINTF # endif #endif #ifndef HAVE_VSNPRINTF # ifdef MSDOS /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), but for now we just assume it doesn't. */ # define NO_vsnprintf # endif # ifdef __TURBOC__ # define NO_vsnprintf # endif # ifdef WIN32 /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ # if !defined(vsnprintf) && !defined(NO_vsnprintf) # define vsnprintf _vsnprintf # endif # endif # ifdef __SASC # define NO_vsnprintf # endif #endif #ifdef HAVE_STRERROR extern char *strerror OF((int)); # define zstrerror(errnum) strerror(errnum) #else # define zstrerror(errnum) "" #endif #if defined(pyr) # define NO_MEMCPY #endif #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) /* Use our own functions for small and medium model with MSC <= 5.0. * You may have to use the same strategy for Borland C (untested). * The __SC__ check is for Symantec. */ # define NO_MEMCPY #endif #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) # define HAVE_MEMCPY #endif #ifdef HAVE_MEMCPY # ifdef SMALL_MEDIUM /* MSDOS small or medium model */ # define zmemcpy _fmemcpy # define zmemcmp _fmemcmp # define zmemzero(dest, len) _fmemset(dest, 0, len) # else # define zmemcpy memcpy # define zmemcmp memcmp # define zmemzero(dest, len) memset(dest, 0, len) # endif #else extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); extern void zmemzero OF((Bytef* dest, uInt len)); #endif /* Diagnostic functions */ #ifdef DEBUG # include extern int z_verbose; extern void z_error OF((char *m)); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} # define Tracevv(x) {if (z_verbose>1) fprintf x ;} # define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} # define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} #else # define Assert(cond,msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) # define Tracec(c,x) # define Tracecv(c,x) #endif voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); void zcfree OF((voidpf opaque, voidpf ptr)); #define ZALLOC(strm, items, size) \ (*((strm)->zalloc))((strm)->opaque, (items), (size)) #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) #define TRY_FREE(s, p) {if (p) ZFREE(s, p);} #endif /* ZUTIL_H */ htmldoc-1.8.27/zlib/inftrees.c0100664000212600000240000003200110265052074014642 0ustar mikeuser/* inftrees.c -- generate Huffman trees for efficient decoding * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "inftrees.h" #define MAXBITS 15 const char inflate_copyright[] = " inflate 1.2.1 Copyright 1995-2003 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot include such an acknowledgment, I would appreciate that you keep this copyright string in the executable of your product. */ /* Build a set of tables to decode the provided canonical Huffman code. The code lengths are lens[0..codes-1]. The result starts at *table, whose indices are 0..2^bits-1. work is a writable array of at least lens shorts, which is used as a work area. type is the type of code to be generated, CODES, LENS, or DISTS. On return, zero is success, -1 is an invalid code, and +1 means that ENOUGH isn't enough. table on return points to the next available entry's address. bits is the requested root table index bits, and on return it is the actual root table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ int inflate_table(type, lens, codes, table, bits, work) codetype type; unsigned short FAR *lens; unsigned codes; code FAR * FAR *table; unsigned FAR *bits; unsigned short FAR *work; { unsigned len; /* a code's length in bits */ unsigned sym; /* index of code symbols */ unsigned min, max; /* minimum and maximum code lengths */ unsigned root; /* number of index bits for root table */ unsigned curr; /* number of index bits for current table */ unsigned drop; /* code bits to drop for sub-table */ int left; /* number of prefix codes available */ unsigned used; /* code entries in table used */ unsigned huff; /* Huffman code */ unsigned incr; /* for incrementing code, index */ unsigned fill; /* index for replicating entries */ unsigned low; /* low bits for current root entry */ unsigned mask; /* mask for low root bits */ code this; /* table entry for duplication */ code FAR *next; /* next available space in table */ const unsigned short FAR *base; /* base value table to use */ const unsigned short FAR *extra; /* extra bits table to use */ int end; /* use base and extra for symbol > end */ unsigned short count[MAXBITS+1]; /* number of codes of each length */ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 76, 66}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0}; static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64}; /* Process a set of code lengths to create a canonical Huffman code. The code lengths are lens[0..codes-1]. Each length corresponds to the symbols 0..codes-1. The Huffman code is generated by first sorting the symbols by length from short to long, and retaining the symbol order for codes with equal lengths. Then the code starts with all zero bits for the first code of the shortest length, and the codes are integer increments for the same length, and zeros are appended as the length increases. For the deflate format, these bits are stored backwards from their more natural integer increment ordering, and so when the decoding tables are built in the large loop below, the integer codes are incremented backwards. This routine assumes, but does not check, that all of the entries in lens[] are in the range 0..MAXBITS. The caller must assure this. 1..MAXBITS is interpreted as that code length. zero means that that symbol does not occur in this code. The codes are sorted by computing a count of codes for each length, creating from that a table of starting indices for each length in the sorted table, and then entering the symbols in order in the sorted table. The sorted table is work[], with that space being provided by the caller. The length counts are used for other purposes as well, i.e. finding the minimum and maximum length codes, determining if there are any codes at all, checking for a valid set of lengths, and looking ahead at length counts to determine sub-table sizes when building the decoding tables. */ /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ for (len = 0; len <= MAXBITS; len++) count[len] = 0; for (sym = 0; sym < codes; sym++) count[lens[sym]]++; /* bound code lengths, force root to be within code lengths */ root = *bits; for (max = MAXBITS; max >= 1; max--) if (count[max] != 0) break; if (root > max) root = max; if (max == 0) return -1; /* no codes! */ for (min = 1; min <= MAXBITS; min++) if (count[min] != 0) break; if (root < min) root = min; /* check for an over-subscribed or incomplete set of lengths */ left = 1; for (len = 1; len <= MAXBITS; len++) { left <<= 1; left -= count[len]; if (left < 0) return -1; /* over-subscribed */ } if (left > 0 && (type == CODES || max != 1)) return -1; /* incomplete set */ /* generate offsets into symbol table for each length for sorting */ offs[1] = 0; for (len = 1; len < MAXBITS; len++) offs[len + 1] = offs[len] + count[len]; /* sort symbols by length, by symbol order within each length */ for (sym = 0; sym < codes; sym++) if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; /* Create and fill in decoding tables. In this loop, the table being filled is at next and has curr index bits. The code being used is huff with length len. That code is converted to an index by dropping drop bits off of the bottom. For codes where len is less than drop + curr, those top drop + curr - len bits are incremented through all values to fill the table with replicated entries. root is the number of index bits for the root table. When len exceeds root, sub-tables are created pointed to by the root entry with an index of the low root bits of huff. This is saved in low to check for when a new sub-table should be started. drop is zero when the root table is being filled, and drop is root when sub-tables are being filled. When a new sub-table is needed, it is necessary to look ahead in the code lengths to determine what size sub-table is needed. The length counts are used for this, and so count[] is decremented as codes are entered in the tables. used keeps track of how many table entries have been allocated from the provided *table space. It is checked when a LENS table is being made against the space in *table, ENOUGH, minus the maximum space needed by the worst case distance code, MAXD. This should never happen, but the sufficiency of ENOUGH has not been proven exhaustively, hence the check. This assumes that when type == LENS, bits == 9. sym increments through all symbols, and the loop terminates when all codes of length max, i.e. all codes, have been processed. This routine permits incomplete codes, so another loop after this one fills in the rest of the decoding tables with invalid code markers. */ /* set up for code type */ switch (type) { case CODES: base = extra = work; /* dummy value--not used */ end = 19; break; case LENS: base = lbase; base -= 257; extra = lext; extra -= 257; end = 256; break; default: /* DISTS */ base = dbase; extra = dext; end = -1; } /* initialize state for loop */ huff = 0; /* starting code */ sym = 0; /* starting code symbol */ len = min; /* starting code length */ next = *table; /* current table to fill in */ curr = root; /* current table index bits */ drop = 0; /* current bits to drop from code for index */ low = (unsigned)(-1); /* trigger new sub-table when len > root */ used = 1U << root; /* use root table entries */ mask = used - 1; /* mask for comparing low */ /* check available table space */ if (type == LENS && used >= ENOUGH - MAXD) return 1; /* process all codes and make table entries */ for (;;) { /* create table entry */ this.bits = (unsigned char)(len - drop); if ((int)(work[sym]) < end) { this.op = (unsigned char)0; this.val = work[sym]; } else if ((int)(work[sym]) > end) { this.op = (unsigned char)(extra[work[sym]]); this.val = base[work[sym]]; } else { this.op = (unsigned char)(32 + 64); /* end of block */ this.val = 0; } /* replicate for those indices with low len bits equal to huff */ incr = 1U << (len - drop); fill = 1U << curr; do { fill -= incr; next[(huff >> drop) + fill] = this; } while (fill != 0); /* backwards increment the len-bit code huff */ incr = 1U << (len - 1); while (huff & incr) incr >>= 1; if (incr != 0) { huff &= incr - 1; huff += incr; } else huff = 0; /* go to next symbol, update count, len */ sym++; if (--(count[len]) == 0) { if (len == max) break; len = lens[work[sym]]; } /* create new sub-table if needed */ if (len > root && (huff & mask) != low) { /* if first time, transition to sub-tables */ if (drop == 0) drop = root; /* increment past last table */ next += 1U << curr; /* determine length of next table */ curr = len - drop; left = (int)(1 << curr); while (curr + drop < max) { left -= count[curr + drop]; if (left <= 0) break; curr++; left <<= 1; } /* check for enough space */ used += 1U << curr; if (type == LENS && used >= ENOUGH - MAXD) return 1; /* point entry in root table to sub-table */ low = huff & mask; (*table)[low].op = (unsigned char)curr; (*table)[low].bits = (unsigned char)root; (*table)[low].val = (unsigned short)(next - *table); } } /* Fill in rest of table for incomplete codes. This loop is similar to the loop above in incrementing huff for table indices. It is assumed that len is equal to curr + drop, so there is no loop needed to increment through high index bits. When the current sub-table is filled, the loop drops back to the root table to fill in any remaining entries there. */ this.op = (unsigned char)64; /* invalid code marker */ this.bits = (unsigned char)(len - drop); this.val = (unsigned short)0; while (huff != 0) { /* when done with sub-table, drop back to root table */ if (drop != 0 && (huff & mask) != low) { drop = 0; len = root; next = *table; curr = root; this.bits = (unsigned char)len; } /* put invalid code marker in table */ next[huff >> drop] = this; /* backwards increment the len-bit code huff */ incr = 1U << (len - 1); while (huff & incr) incr >>= 1; if (incr != 0) { huff &= incr - 1; huff += incr; } else huff = 0; } /* set return parameters */ *table += used; *bits = root; return 0; } htmldoc-1.8.27/zlib/zlib.30100664000212600000240000001061210124711246013704 0ustar mikeuser.TH ZLIB 3 "17 November 2003" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS [see .I zlib.h for full description] .SH DESCRIPTION The .I zlib library is a general purpose data compression library. The code is thread safe. It provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) but other algorithms will be added later and will have the same stream interface. .LP Compression can be done in a single step if the buffers are large enough (for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. .LP The library also supports reading and writing files in .IR gzip (1) (.gz) format with an interface similar to that of stdio. .LP The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash even in case of corrupted input. .LP All functions of the compression library are documented in the file .IR zlib.h . The distribution source includes examples of use of the library in the files .I example.c and .IR minigzip.c . .LP Changes to this version are documented in the file .I ChangeLog that accompanies the source, and are concerned primarily with bug fixes and portability enhancements. .LP A Java implementation of .I zlib is available in the Java Development Kit 1.1: .IP http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html .LP A Perl interface to .IR zlib , written by Paul Marquess (pmqs@cpan.org), is available at CPAN (Comprehensive Perl Archive Network) sites, including: .IP http://www.cpan.org/modules/by-module/Compress/ .LP A Python interface to .IR zlib , written by A.M. Kuchling (amk@magnet.com), is available in Python 1.5 and later versions: .IP http://www.python.org/doc/lib/module-zlib.html .LP A .I zlib binding for .IR tcl (1), written by Andreas Kupries (a.kupries@westend.com), is availlable at: .IP http://www.westend.com/~kupries/doc/trf/man/man.html .LP An experimental package to read and write files in .zip format, written on top of .I zlib by Gilles Vollant (info@winimage.com), is available at: .IP http://www.winimage.com/zLibDll/unzip.html and also in the .I contrib/minizip directory of the main .I zlib web site. .SH "SEE ALSO" The .I zlib web site can be found at either of these locations: .IP http://www.zlib.org .br http://www.gzip.org/zlib/ .LP The data format used by the zlib library is described by RFC (Request for Comments) 1950 to 1952 in the files: .IP http://www.ietf.org/rfc/rfc1950.txt (concerning zlib format) .br http://www.ietf.org/rfc/rfc1951.txt (concerning deflate format) .br http://www.ietf.org/rfc/rfc1952.txt (concerning gzip format) .LP These documents are also available in other formats from: .IP ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html .LP Mark Nelson (markn@ieee.org) wrote an article about .I zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at: .IP http://dogma.net/markn/articles/zlibtool/zlibtool.htm .SH "REPORTING PROBLEMS" Before reporting a problem, please check the .I zlib web site to verify that you have the latest version of .IR zlib ; otherwise, obtain the latest version and see if the problem still exists. Please read the .I zlib FAQ at: .IP http://www.gzip.org/zlib/zlib_faq.html .LP before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). .SH AUTHORS Version 1.2.1 Copyright (C) 1995-2003 Jean-loup Gailly (jloup@gzip.org) and Mark Adler (madler@alumni.caltech.edu). .LP This software is provided "as-is," without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. See the distribution directory with respect to requirements governing redistribution. The deflate format used by .I zlib was defined by Phil Katz. The deflate and .I zlib specifications were written by L. Peter Deutsch. Thanks to all the people who reported problems and suggested various improvements in .IR zlib ; who are too numerous to cite here. .LP UNIX manual page by R. P. C. Rodgers, U.S. National Library of Medicine (rodgers@nlm.nih.gov). .\" end of man page htmldoc-1.8.27/zlib/crc32.h0100664000212600000240000007355010124711361013755 0ustar mikeuser/* crc32.h -- tables for rapid CRC calculation * Generated automatically by crc32.c */ local const unsigned long FAR crc_table[TBLS][256] = { { 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, 0x2d02ef8dUL #ifdef BYFOUR }, { 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, 0x9324fd72UL }, { 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, 0xbe9834edUL }, { 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, 0xde0506f1UL }, { 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, 0x8def022dUL }, { 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, 0x72fd2493UL }, { 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, 0xed3498beUL }, { 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, 0xf10605deUL #endif } }; htmldoc-1.8.27/zlib/inflate.c0100664000212600000240000013045310124711246014454 0ustar mikeuser/* inflate.c -- zlib decompression * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* * Change history: * * 1.2.beta0 24 Nov 2002 * - First version -- complete rewrite of inflate to simplify code, avoid * creation of window when not needed, minimize use of window when it is * needed, make inffast.c even faster, implement gzip decoding, and to * improve code readability and style over the previous zlib inflate code * * 1.2.beta1 25 Nov 2002 * - Use pointers for available input and output checking in inffast.c * - Remove input and output counters in inffast.c * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 * - Remove unnecessary second byte pull from length extra in inffast.c * - Unroll direct copy to three copies per loop in inffast.c * * 1.2.beta2 4 Dec 2002 * - Change external routine names to reduce potential conflicts * - Correct filename to inffixed.h for fixed tables in inflate.c * - Make hbuf[] unsigned char to match parameter type in inflate.c * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) * to avoid negation problem on Alphas (64 bit) in inflate.c * * 1.2.beta3 22 Dec 2002 * - Add comments on state->bits assertion in inffast.c * - Add comments on op field in inftrees.h * - Fix bug in reuse of allocated window after inflateReset() * - Remove bit fields--back to byte structure for speed * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths * - Change post-increments to pre-increments in inflate_fast(), PPC biased? * - Add compile time option, POSTINC, to use post-increments instead (Intel?) * - Make MATCH copy in inflate() much faster for when inflate_fast() not used * - Use local copies of stream next and avail values, as well as local bit * buffer and bit count in inflate()--for speed when inflate_fast() not used * * 1.2.beta4 1 Jan 2003 * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings * - Move a comment on output buffer sizes from inffast.c to inflate.c * - Add comments in inffast.c to introduce the inflate_fast() routine * - Rearrange window copies in inflate_fast() for speed and simplification * - Unroll last copy for window match in inflate_fast() * - Use local copies of window variables in inflate_fast() for speed * - Pull out common write == 0 case for speed in inflate_fast() * - Make op and len in inflate_fast() unsigned for consistency * - Add FAR to lcode and dcode declarations in inflate_fast() * - Simplified bad distance check in inflate_fast() * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new * source file infback.c to provide a call-back interface to inflate for * programs like gzip and unzip -- uses window as output buffer to avoid * window copying * * 1.2.beta5 1 Jan 2003 * - Improved inflateBack() interface to allow the caller to provide initial * input in strm. * - Fixed stored blocks bug in inflateBack() * * 1.2.beta6 4 Jan 2003 * - Added comments in inffast.c on effectiveness of POSTINC * - Typecasting all around to reduce compiler warnings * - Changed loops from while (1) or do {} while (1) to for (;;), again to * make compilers happy * - Changed type of window in inflateBackInit() to unsigned char * * * 1.2.beta7 27 Jan 2003 * - Changed many types to unsigned or unsigned short to avoid warnings * - Added inflateCopy() function * * 1.2.0 9 Mar 2003 * - Changed inflateBack() interface to provide separate opaque descriptors * for the in() and out() functions * - Changed inflateBack() argument and in_func typedef to swap the length * and buffer address return values for the input function * - Check next_in and next_out for Z_NULL on entry to inflate() * * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. */ #include "zutil.h" #include "inftrees.h" #include "inflate.h" #include "inffast.h" #ifdef MAKEFIXED # ifndef BUILDFIXED # define BUILDFIXED # endif #endif /* function prototypes */ local void fixedtables OF((struct inflate_state FAR *state)); local int updatewindow OF((z_streamp strm, unsigned out)); #ifdef BUILDFIXED void makefixed OF((void)); #endif local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, unsigned len)); int ZEXPORT inflateReset(strm) z_streamp strm; { struct inflate_state FAR *state; if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; strm->total_in = strm->total_out = state->total = 0; strm->msg = Z_NULL; state->mode = HEAD; state->last = 0; state->havedict = 0; state->wsize = 0; state->whave = 0; state->hold = 0; state->bits = 0; state->lencode = state->distcode = state->next = state->codes; Tracev((stderr, "inflate: reset\n")); return Z_OK; } int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) z_streamp strm; int windowBits; const char *version; int stream_size; { struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || stream_size != (int)(sizeof(z_stream))) return Z_VERSION_ERROR; if (strm == Z_NULL) return Z_STREAM_ERROR; strm->msg = Z_NULL; /* in case we return an error */ if (strm->zalloc == (alloc_func)0) { strm->zalloc = zcalloc; strm->opaque = (voidpf)0; } if (strm->zfree == (free_func)0) strm->zfree = zcfree; state = (struct inflate_state FAR *) ZALLOC(strm, 1, sizeof(struct inflate_state)); if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (voidpf)state; if (windowBits < 0) { state->wrap = 0; windowBits = -windowBits; } else { state->wrap = (windowBits >> 4) + 1; #ifdef GUNZIP if (windowBits < 48) windowBits &= 15; #endif } if (windowBits < 8 || windowBits > 15) { ZFREE(strm, state); strm->state = Z_NULL; return Z_STREAM_ERROR; } state->wbits = (unsigned)windowBits; state->window = Z_NULL; return inflateReset(strm); } int ZEXPORT inflateInit_(strm, version, stream_size) z_streamp strm; const char *version; int stream_size; { return inflateInit2_(strm, DEF_WBITS, version, stream_size); } /* Return state with length and distance decoding tables and index sizes set to fixed code decoding. Normally this returns fixed tables from inffixed.h. If BUILDFIXED is defined, then instead this routine builds the tables the first time it's called, and returns those tables the first time and thereafter. This reduces the size of the code by about 2K bytes, in exchange for a little execution time. However, BUILDFIXED should not be used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ local void fixedtables(state) struct inflate_state FAR *state; { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; static code fixed[544]; /* build fixed huffman tables if first call (may not be thread safe) */ if (virgin) { unsigned sym, bits; static code *next; /* literal/length table */ sym = 0; while (sym < 144) state->lens[sym++] = 8; while (sym < 256) state->lens[sym++] = 9; while (sym < 280) state->lens[sym++] = 7; while (sym < 288) state->lens[sym++] = 8; next = fixed; lenfix = next; bits = 9; inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); /* distance table */ sym = 0; while (sym < 32) state->lens[sym++] = 5; distfix = next; bits = 5; inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); /* do this just once */ virgin = 0; } #else /* !BUILDFIXED */ # include "inffixed.h" #endif /* BUILDFIXED */ state->lencode = lenfix; state->lenbits = 9; state->distcode = distfix; state->distbits = 5; } #ifdef MAKEFIXED #include /* Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also defines BUILDFIXED, so the tables are built on the fly. makefixed() writes those tables to stdout, which would be piped to inffixed.h. A small program can simply call makefixed to do this: void makefixed(void); int main(void) { makefixed(); return 0; } Then that can be linked with zlib built with MAKEFIXED defined and run: a.out > inffixed.h */ void makefixed() { unsigned low, size; struct inflate_state state; fixedtables(&state); puts(" /* inffixed.h -- table for decoding fixed codes"); puts(" * Generated automatically by makefixed()."); puts(" */"); puts(""); puts(" /* WARNING: this file should *not* be used by applications."); puts(" It is part of the implementation of this library and is"); puts(" subject to change. Applications should only use zlib.h."); puts(" */"); puts(""); size = 1U << 9; printf(" static const code lenfix[%u] = {", size); low = 0; for (;;) { if ((low % 7) == 0) printf("\n "); printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits, state.lencode[low].val); if (++low == size) break; putchar(','); } puts("\n };"); size = 1U << 5; printf("\n static const code distfix[%u] = {", size); low = 0; for (;;) { if ((low % 6) == 0) printf("\n "); printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, state.distcode[low].val); if (++low == size) break; putchar(','); } puts("\n };"); } #endif /* MAKEFIXED */ /* Update the window with the last wsize (normally 32K) bytes written before returning. If window does not exist yet, create it. This is only called when a window is already in use, or when output has been written during this inflate call, but the end of the deflate stream has not been reached yet. It is also called to create a window for dictionary data when a dictionary is loaded. Providing output buffers larger than 32K to inflate() should provide a speed advantage, since only the last 32K of output is copied to the sliding window upon return from inflate(), and since all distances after the first 32K of output will fall in the output data, making match copies simpler and faster. The advantage may be dependent on the size of the processor's data caches. */ local int updatewindow(strm, out) z_streamp strm; unsigned out; { struct inflate_state FAR *state; unsigned copy, dist; state = (struct inflate_state FAR *)strm->state; /* if it hasn't been done already, allocate space for the window */ if (state->window == Z_NULL) { state->window = (unsigned char FAR *) ZALLOC(strm, 1U << state->wbits, sizeof(unsigned char)); if (state->window == Z_NULL) return 1; } /* if window not in use yet, initialize */ if (state->wsize == 0) { state->wsize = 1U << state->wbits; state->write = 0; state->whave = 0; } /* copy state->wsize or less output bytes into the circular window */ copy = out - strm->avail_out; if (copy >= state->wsize) { zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); state->write = 0; state->whave = state->wsize; } else { dist = state->wsize - state->write; if (dist > copy) dist = copy; zmemcpy(state->window + state->write, strm->next_out - copy, dist); copy -= dist; if (copy) { zmemcpy(state->window, strm->next_out - copy, copy); state->write = copy; state->whave = state->wsize; } else { state->write += dist; if (state->write == state->wsize) state->write = 0; if (state->whave < state->wsize) state->whave += dist; } } return 0; } /* Macros for inflate(): */ /* check function to use adler32() for zlib or crc32() for gzip */ #ifdef GUNZIP # define UPDATE(check, buf, len) \ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) #else # define UPDATE(check, buf, len) adler32(check, buf, len) #endif /* check macros for header crc */ #ifdef GUNZIP # define CRC2(check, word) \ do { \ hbuf[0] = (unsigned char)(word); \ hbuf[1] = (unsigned char)((word) >> 8); \ check = crc32(check, hbuf, 2); \ } while (0) # define CRC4(check, word) \ do { \ hbuf[0] = (unsigned char)(word); \ hbuf[1] = (unsigned char)((word) >> 8); \ hbuf[2] = (unsigned char)((word) >> 16); \ hbuf[3] = (unsigned char)((word) >> 24); \ check = crc32(check, hbuf, 4); \ } while (0) #endif /* Load registers with state in inflate() for speed */ #define LOAD() \ do { \ put = strm->next_out; \ left = strm->avail_out; \ next = strm->next_in; \ have = strm->avail_in; \ hold = state->hold; \ bits = state->bits; \ } while (0) /* Restore state from registers in inflate() */ #define RESTORE() \ do { \ strm->next_out = put; \ strm->avail_out = left; \ strm->next_in = next; \ strm->avail_in = have; \ state->hold = hold; \ state->bits = bits; \ } while (0) /* Clear the input bit accumulator */ #define INITBITS() \ do { \ hold = 0; \ bits = 0; \ } while (0) /* Get a byte of input into the bit accumulator, or return from inflate() if there is no input available. */ #define PULLBYTE() \ do { \ if (have == 0) goto inf_leave; \ have--; \ hold += (unsigned long)(*next++) << bits; \ bits += 8; \ } while (0) /* Assure that there are at least n bits in the bit accumulator. If there is not enough available input to do that, then return from inflate(). */ #define NEEDBITS(n) \ do { \ while (bits < (unsigned)(n)) \ PULLBYTE(); \ } while (0) /* Return the low n bits of the bit accumulator (n < 16) */ #define BITS(n) \ ((unsigned)hold & ((1U << (n)) - 1)) /* Remove n bits from the bit accumulator */ #define DROPBITS(n) \ do { \ hold >>= (n); \ bits -= (unsigned)(n); \ } while (0) /* Remove zero to seven bits as needed to go to a byte boundary */ #define BYTEBITS() \ do { \ hold >>= bits & 7; \ bits -= bits & 7; \ } while (0) /* Reverse the bytes in a 32-bit value */ #define REVERSE(q) \ ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) /* inflate() uses a state machine to process as much input data and generate as much output data as possible before returning. The state machine is structured roughly as follows: for (;;) switch (state) { ... case STATEn: if (not enough input data or output space to make progress) return; ... make progress ... state = STATEm; break; ... } so when inflate() is called again, the same case is attempted again, and if the appropriate resources are provided, the machine proceeds to the next state. The NEEDBITS() macro is usually the way the state evaluates whether it can proceed or should return. NEEDBITS() does the return if the requested bits are not available. The typical use of the BITS macros is: NEEDBITS(n); ... do something with BITS(n) ... DROPBITS(n); where NEEDBITS(n) either returns from inflate() if there isn't enough input left to load n bits into the accumulator, or it continues. BITS(n) gives the low n bits in the accumulator. When done, DROPBITS(n) drops the low n bits off the accumulator. INITBITS() clears the accumulator and sets the number of available bits to zero. BYTEBITS() discards just enough bits to put the accumulator on a byte boundary. After BYTEBITS() and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return if there is no input available. The decoding of variable length codes uses PULLBYTE() directly in order to pull just enough bytes to decode the next code, and no more. Some states loop until they get enough input, making sure that enough state information is maintained to continue the loop where it left off if NEEDBITS() returns in the loop. For example, want, need, and keep would all have to actually be part of the saved state in case NEEDBITS() returns: case STATEw: while (want < need) { NEEDBITS(n); keep[want++] = BITS(n); DROPBITS(n); } state = STATEx; case STATEx: As shown above, if the next state is also the next case, then the break is omitted. A state may also return if there is not enough output space available to complete that state. Those states are copying stored data, writing a literal byte, and copying a matching string. When returning, a "goto inf_leave" is used to update the total counters, update the check value, and determine whether any progress has been made during that inflate() call in order to return the proper return code. Progress is defined as a change in either strm->avail_in or strm->avail_out. When there is a window, goto inf_leave will update the window with the last output written. If a goto inf_leave occurs in the middle of decompression and there is no window currently, goto inf_leave will create one and copy output to the window for the next call of inflate(). In this implementation, the flush parameter of inflate() only affects the return code (per zlib.h). inflate() always writes as much as possible to strm->next_out, given the space available and the provided input--the effect documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers the allocation of and copying into a sliding window until necessary, which provides the effect documented in zlib.h for Z_FINISH when the entire input stream available. So the only thing the flush parameter actually does is: when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it will return Z_BUF_ERROR if it has not reached the end of the stream. */ int ZEXPORT inflate(strm, flush) z_streamp strm; int flush; { struct inflate_state FAR *state; unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ unsigned have, left; /* available input and output */ unsigned long hold; /* bit buffer */ unsigned bits; /* bits in bit buffer */ unsigned in, out; /* save starting available input and output */ unsigned copy; /* number of stored or match bytes to copy */ unsigned char FAR *from; /* where to copy match bytes from */ code this; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ int ret; /* return code */ #ifdef GUNZIP unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ #endif static const unsigned short order[19] = /* permutation of code lengths */ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || (strm->next_in == Z_NULL && strm->avail_in != 0)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ LOAD(); in = have; out = left; ret = Z_OK; for (;;) switch (state->mode) { case HEAD: if (state->wrap == 0) { state->mode = TYPEDO; break; } NEEDBITS(16); #ifdef GUNZIP if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ state->check = crc32(0L, Z_NULL, 0); CRC2(state->check, hold); INITBITS(); state->mode = FLAGS; break; } state->flags = 0; /* expect zlib header */ if (!(state->wrap & 1) || /* check if zlib header allowed */ #else if ( #endif ((BITS(8) << 8) + (hold >> 8)) % 31) { strm->msg = (char *)"incorrect header check"; state->mode = BAD; break; } if (BITS(4) != Z_DEFLATED) { strm->msg = (char *)"unknown compression method"; state->mode = BAD; break; } DROPBITS(4); if (BITS(4) + 8 > state->wbits) { strm->msg = (char *)"invalid window size"; state->mode = BAD; break; } Tracev((stderr, "inflate: zlib header ok\n")); strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = hold & 0x200 ? DICTID : TYPE; INITBITS(); break; #ifdef GUNZIP case FLAGS: NEEDBITS(16); state->flags = (int)(hold); if ((state->flags & 0xff) != Z_DEFLATED) { strm->msg = (char *)"unknown compression method"; state->mode = BAD; break; } if (state->flags & 0xe000) { strm->msg = (char *)"unknown header flags set"; state->mode = BAD; break; } if (state->flags & 0x0200) CRC2(state->check, hold); INITBITS(); state->mode = TIME; case TIME: NEEDBITS(32); if (state->flags & 0x0200) CRC4(state->check, hold); INITBITS(); state->mode = OS; case OS: NEEDBITS(16); if (state->flags & 0x0200) CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; case EXLEN: if (state->flags & 0x0400) { NEEDBITS(16); state->length = (unsigned)(hold); if (state->flags & 0x0200) CRC2(state->check, hold); INITBITS(); } state->mode = EXTRA; case EXTRA: if (state->flags & 0x0400) { copy = state->length; if (copy > have) copy = have; if (copy) { if (state->flags & 0x0200) state->check = crc32(state->check, next, copy); have -= copy; next += copy; state->length -= copy; } if (state->length) goto inf_leave; } state->mode = NAME; case NAME: if (state->flags & 0x0800) { if (have == 0) goto inf_leave; copy = 0; do { len = (unsigned)(next[copy++]); } while (len && copy < have); if (state->flags & 0x02000) state->check = crc32(state->check, next, copy); have -= copy; next += copy; if (len) goto inf_leave; } state->mode = COMMENT; case COMMENT: if (state->flags & 0x1000) { if (have == 0) goto inf_leave; copy = 0; do { len = (unsigned)(next[copy++]); } while (len && copy < have); if (state->flags & 0x02000) state->check = crc32(state->check, next, copy); have -= copy; next += copy; if (len) goto inf_leave; } state->mode = HCRC; case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); if (hold != (state->check & 0xffff)) { strm->msg = (char *)"header crc mismatch"; state->mode = BAD; break; } INITBITS(); } strm->adler = state->check = crc32(0L, Z_NULL, 0); state->mode = TYPE; break; #endif case DICTID: NEEDBITS(32); strm->adler = state->check = REVERSE(hold); INITBITS(); state->mode = DICT; case DICT: if (state->havedict == 0) { RESTORE(); return Z_NEED_DICT; } strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; case TYPE: if (flush == Z_BLOCK) goto inf_leave; case TYPEDO: if (state->last) { BYTEBITS(); state->mode = CHECK; break; } NEEDBITS(3); state->last = BITS(1); DROPBITS(1); switch (BITS(2)) { case 0: /* stored block */ Tracev((stderr, "inflate: stored block%s\n", state->last ? " (last)" : "")); state->mode = STORED; break; case 1: /* fixed block */ fixedtables(state); Tracev((stderr, "inflate: fixed codes block%s\n", state->last ? " (last)" : "")); state->mode = LEN; /* decode codes */ break; case 2: /* dynamic block */ Tracev((stderr, "inflate: dynamic codes block%s\n", state->last ? " (last)" : "")); state->mode = TABLE; break; case 3: strm->msg = (char *)"invalid block type"; state->mode = BAD; } DROPBITS(2); break; case STORED: BYTEBITS(); /* go to byte boundary */ NEEDBITS(32); if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { strm->msg = (char *)"invalid stored block lengths"; state->mode = BAD; break; } state->length = (unsigned)hold & 0xffff; Tracev((stderr, "inflate: stored length %u\n", state->length)); INITBITS(); state->mode = COPY; case COPY: copy = state->length; if (copy) { if (copy > have) copy = have; if (copy > left) copy = left; if (copy == 0) goto inf_leave; zmemcpy(put, next, copy); have -= copy; next += copy; left -= copy; put += copy; state->length -= copy; break; } Tracev((stderr, "inflate: stored end\n")); state->mode = TYPE; break; case TABLE: NEEDBITS(14); state->nlen = BITS(5) + 257; DROPBITS(5); state->ndist = BITS(5) + 1; DROPBITS(5); state->ncode = BITS(4) + 4; DROPBITS(4); #ifndef PKZIP_BUG_WORKAROUND if (state->nlen > 286 || state->ndist > 30) { strm->msg = (char *)"too many length or distance symbols"; state->mode = BAD; break; } #endif Tracev((stderr, "inflate: table sizes ok\n")); state->have = 0; state->mode = LENLENS; case LENLENS: while (state->have < state->ncode) { NEEDBITS(3); state->lens[order[state->have++]] = (unsigned short)BITS(3); DROPBITS(3); } while (state->have < 19) state->lens[order[state->have++]] = 0; state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 7; ret = inflate_table(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work); if (ret) { strm->msg = (char *)"invalid code lengths set"; state->mode = BAD; break; } Tracev((stderr, "inflate: code lengths ok\n")); state->have = 0; state->mode = CODELENS; case CODELENS: while (state->have < state->nlen + state->ndist) { for (;;) { this = state->lencode[BITS(state->lenbits)]; if ((unsigned)(this.bits) <= bits) break; PULLBYTE(); } if (this.val < 16) { NEEDBITS(this.bits); DROPBITS(this.bits); state->lens[state->have++] = this.val; } else { if (this.val == 16) { NEEDBITS(this.bits + 2); DROPBITS(this.bits); if (state->have == 0) { strm->msg = (char *)"invalid bit length repeat"; state->mode = BAD; break; } len = state->lens[state->have - 1]; copy = 3 + BITS(2); DROPBITS(2); } else if (this.val == 17) { NEEDBITS(this.bits + 3); DROPBITS(this.bits); len = 0; copy = 3 + BITS(3); DROPBITS(3); } else { NEEDBITS(this.bits + 7); DROPBITS(this.bits); len = 0; copy = 11 + BITS(7); DROPBITS(7); } if (state->have + copy > state->nlen + state->ndist) { strm->msg = (char *)"invalid bit length repeat"; state->mode = BAD; break; } while (copy--) state->lens[state->have++] = (unsigned short)len; } } /* build code tables */ state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 9; ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), &(state->lenbits), state->work); if (ret) { strm->msg = (char *)"invalid literal/lengths set"; state->mode = BAD; break; } state->distcode = (code const FAR *)(state->next); state->distbits = 6; ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, &(state->next), &(state->distbits), state->work); if (ret) { strm->msg = (char *)"invalid distances set"; state->mode = BAD; break; } Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN; case LEN: if (have >= 6 && left >= 258) { RESTORE(); inflate_fast(strm, out); LOAD(); break; } for (;;) { this = state->lencode[BITS(state->lenbits)]; if ((unsigned)(this.bits) <= bits) break; PULLBYTE(); } if (this.op && (this.op & 0xf0) == 0) { last = this; for (;;) { this = state->lencode[last.val + (BITS(last.bits + last.op) >> last.bits)]; if ((unsigned)(last.bits + this.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } DROPBITS(this.bits); state->length = (unsigned)this.val; if ((int)(this.op) == 0) { Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? "inflate: literal '%c'\n" : "inflate: literal 0x%02x\n", this.val)); state->mode = LIT; break; } if (this.op & 32) { Tracevv((stderr, "inflate: end of block\n")); state->mode = TYPE; break; } if (this.op & 64) { strm->msg = (char *)"invalid literal/length code"; state->mode = BAD; break; } state->extra = (unsigned)(this.op) & 15; state->mode = LENEXT; case LENEXT: if (state->extra) { NEEDBITS(state->extra); state->length += BITS(state->extra); DROPBITS(state->extra); } Tracevv((stderr, "inflate: length %u\n", state->length)); state->mode = DIST; case DIST: for (;;) { this = state->distcode[BITS(state->distbits)]; if ((unsigned)(this.bits) <= bits) break; PULLBYTE(); } if ((this.op & 0xf0) == 0) { last = this; for (;;) { this = state->distcode[last.val + (BITS(last.bits + last.op) >> last.bits)]; if ((unsigned)(last.bits + this.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } DROPBITS(this.bits); if (this.op & 64) { strm->msg = (char *)"invalid distance code"; state->mode = BAD; break; } state->offset = (unsigned)this.val; state->extra = (unsigned)(this.op) & 15; state->mode = DISTEXT; case DISTEXT: if (state->extra) { NEEDBITS(state->extra); state->offset += BITS(state->extra); DROPBITS(state->extra); } if (state->offset > state->whave + out - left) { strm->msg = (char *)"invalid distance too far back"; state->mode = BAD; break; } Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; case MATCH: if (left == 0) goto inf_leave; copy = out - left; if (state->offset > copy) { /* copy from window */ copy = state->offset - copy; if (copy > state->write) { copy -= state->write; from = state->window + (state->wsize - copy); } else from = state->window + (state->write - copy); if (copy > state->length) copy = state->length; } else { /* copy from output */ from = put - state->offset; copy = state->length; } if (copy > left) copy = left; left -= copy; state->length -= copy; do { *put++ = *from++; } while (--copy); if (state->length == 0) state->mode = LEN; break; case LIT: if (left == 0) goto inf_leave; *put++ = (unsigned char)(state->length); left--; state->mode = LEN; break; case CHECK: if (state->wrap) { NEEDBITS(32); out -= left; strm->total_out += out; state->total += out; if (out) strm->adler = state->check = UPDATE(state->check, put - out, out); out = left; if (( #ifdef GUNZIP state->flags ? hold : #endif REVERSE(hold)) != state->check) { strm->msg = (char *)"incorrect data check"; state->mode = BAD; break; } INITBITS(); Tracev((stderr, "inflate: check matches trailer\n")); } #ifdef GUNZIP state->mode = LENGTH; case LENGTH: if (state->wrap && state->flags) { NEEDBITS(32); if (hold != (state->total & 0xffffffffUL)) { strm->msg = (char *)"incorrect length check"; state->mode = BAD; break; } INITBITS(); Tracev((stderr, "inflate: length matches trailer\n")); } #endif state->mode = DONE; case DONE: ret = Z_STREAM_END; goto inf_leave; case BAD: ret = Z_DATA_ERROR; goto inf_leave; case MEM: return Z_MEM_ERROR; case SYNC: default: return Z_STREAM_ERROR; } /* Return from inflate(), updating the total counts and the check value. If there was no progress during the inflate() call, return a buffer error. Call updatewindow() to create and/or update the window state. Note: a memory error from inflate() is non-recoverable. */ inf_leave: RESTORE(); if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) if (updatewindow(strm, out)) { state->mode = MEM; return Z_MEM_ERROR; } in -= strm->avail_in; out -= strm->avail_out; strm->total_in += in; strm->total_out += out; state->total += out; if (state->wrap && out) strm->adler = state->check = UPDATE(state->check, strm->next_out - out, out); strm->data_type = state->bits + (state->last ? 64 : 0) + (state->mode == TYPE ? 128 : 0); if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) ret = Z_BUF_ERROR; return ret; } int ZEXPORT inflateEnd(strm) z_streamp strm; { struct inflate_state FAR *state; if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->window != Z_NULL) ZFREE(strm, state->window); ZFREE(strm, strm->state); strm->state = Z_NULL; Tracev((stderr, "inflate: end\n")); return Z_OK; } int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) z_streamp strm; const Bytef *dictionary; uInt dictLength; { struct inflate_state FAR *state; unsigned long id; /* check state */ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->mode != DICT) return Z_STREAM_ERROR; /* check for correct dictionary id */ id = adler32(0L, Z_NULL, 0); id = adler32(id, dictionary, dictLength); if (id != state->check) return Z_DATA_ERROR; /* copy dictionary to window */ if (updatewindow(strm, strm->avail_out)) { state->mode = MEM; return Z_MEM_ERROR; } if (dictLength > state->wsize) { zmemcpy(state->window, dictionary + dictLength - state->wsize, state->wsize); state->whave = state->wsize; } else { zmemcpy(state->window + state->wsize - dictLength, dictionary, dictLength); state->whave = dictLength; } state->havedict = 1; Tracev((stderr, "inflate: dictionary set\n")); return Z_OK; } /* Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found or when out of input. When called, *have is the number of pattern bytes found in order so far, in 0..3. On return *have is updated to the new state. If on return *have equals four, then the pattern was found and the return value is how many bytes were read including the last byte of the pattern. If *have is less than four, then the pattern has not been found yet and the return value is len. In the latter case, syncsearch() can be called again with more data and the *have state. *have is initialized to zero for the first call. */ local unsigned syncsearch(have, buf, len) unsigned FAR *have; unsigned char FAR *buf; unsigned len; { unsigned got; unsigned next; got = *have; next = 0; while (next < len && got < 4) { if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) got++; else if (buf[next]) got = 0; else got = 4 - got; next++; } *have = got; return next; } int ZEXPORT inflateSync(strm) z_streamp strm; { unsigned len; /* number of bytes to look at or looked at */ unsigned long in, out; /* temporary to save total_in and total_out */ unsigned char buf[4]; /* to restore bit buffer to byte string */ struct inflate_state FAR *state; /* check parameters */ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; /* if first time, start search in bit buffer */ if (state->mode != SYNC) { state->mode = SYNC; state->hold <<= state->bits & 7; state->bits -= state->bits & 7; len = 0; while (state->bits >= 8) { buf[len++] = (unsigned char)(state->hold); state->hold >>= 8; state->bits -= 8; } state->have = 0; syncsearch(&(state->have), buf, len); } /* search available input */ len = syncsearch(&(state->have), strm->next_in, strm->avail_in); strm->avail_in -= len; strm->next_in += len; strm->total_in += len; /* return no joy or set up to restart inflate() on a new block */ if (state->have != 4) return Z_DATA_ERROR; in = strm->total_in; out = strm->total_out; inflateReset(strm); strm->total_in = in; strm->total_out = out; state->mode = TYPE; return Z_OK; } /* Returns true if inflate is currently at the end of a block generated by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored block. When decompressing, PPP checks that at the end of input packet, inflate is waiting for these length bytes. */ int ZEXPORT inflateSyncPoint(strm) z_streamp strm; { struct inflate_state FAR *state; if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; return state->mode == STORED && state->bits == 0; } int ZEXPORT inflateCopy(dest, source) z_streamp dest; z_streamp source; { struct inflate_state FAR *state; struct inflate_state FAR *copy; unsigned char FAR *window; /* check input */ if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)source->state; /* allocate space */ copy = (struct inflate_state FAR *) ZALLOC(source, 1, sizeof(struct inflate_state)); if (copy == Z_NULL) return Z_MEM_ERROR; window = Z_NULL; if (state->window != Z_NULL) { window = (unsigned char FAR *) ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); if (window == Z_NULL) { ZFREE(source, copy); return Z_MEM_ERROR; } } /* copy state */ *dest = *source; *copy = *state; copy->lencode = copy->codes + (state->lencode - state->codes); copy->distcode = copy->codes + (state->distcode - state->codes); copy->next = copy->codes + (state->next - state->codes); if (window != Z_NULL) zmemcpy(window, state->window, 1U << state->wbits); copy->window = window; dest->state = (voidpf)copy; return Z_OK; } htmldoc-1.8.27/zlib/trees.c0100664000212600000240000012606210233324641014155 0ustar mikeuser/* trees.c -- output deflated data using Huffman coding * Copyright (C) 1995-2003 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ /* * ALGORITHM * * The "deflation" process uses several Huffman trees. The more * common source values are represented by shorter bit sequences. * * Each code tree is stored in a compressed form which is itself * a Huffman encoding of the lengths of all the code strings (in * ascending order by source values). The actual code strings are * reconstructed from the lengths in the inflate process, as described * in the deflate specification. * * REFERENCES * * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc * * Storer, James A. * Data Compression: Methods and Theory, pp. 49-50. * Computer Science Press, 1988. ISBN 0-7167-8156-5. * * Sedgewick, R. * Algorithms, p290. * Addison-Wesley, 1983. ISBN 0-201-06672-6. */ /* @(#) $Id: trees.c 1403 2005-04-26 02:38:25Z mike $ */ /* #define GEN_TREES_H */ #include "deflate.h" #ifdef DEBUG # include #endif /* =========================================================================== * Constants */ #define MAX_BL_BITS 7 /* Bit length codes must not exceed MAX_BL_BITS bits */ #define END_BLOCK 256 /* end of block literal code */ #define REP_3_6 16 /* repeat previous bit length 3-6 times (2 bits of repeat count) */ #define REPZ_3_10 17 /* repeat a zero length 3-10 times (3 bits of repeat count) */ #define REPZ_11_138 18 /* repeat a zero length 11-138 times (7 bits of repeat count) */ local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; local const int extra_dbits[D_CODES] /* extra bits for each distance code */ = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; local const uch bl_order[BL_CODES] = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; /* The lengths of the bit length codes are sent in order of decreasing * probability, to avoid transmitting the lengths for unused bit length codes. */ #define Buf_size (8 * 2*sizeof(char)) /* Number of bits used within bi_buf. (bi_buf might be implemented on * more than 16 bits on some systems.) */ /* =========================================================================== * Local data. These are initialized only once. */ #define DIST_CODE_LEN 512 /* see definition of array dist_code below */ #if defined(GEN_TREES_H) || !defined(STDC) /* non ANSI compilers may not accept trees.h */ local ct_data static_ltree[L_CODES+2]; /* The static literal tree. Since the bit lengths are imposed, there is no * need for the L_CODES extra codes used during heap construction. However * The codes 286 and 287 are needed to build a canonical tree (see _tr_init * below). */ local ct_data static_dtree[D_CODES]; /* The static distance tree. (Actually a trivial tree since all codes use * 5 bits.) */ uch _dist_code[DIST_CODE_LEN]; /* Distance codes. The first 256 values correspond to the distances * 3 .. 258, the last 256 values correspond to the top 8 bits of * the 15 bit distances. */ uch _length_code[MAX_MATCH-MIN_MATCH+1]; /* length code for each normalized match length (0 == MIN_MATCH) */ local int base_length[LENGTH_CODES]; /* First normalized length for each code (0 = MIN_MATCH) */ local int base_dist[D_CODES]; /* First normalized distance for each code (0 = distance of 1) */ #else # include "trees.h" #endif /* GEN_TREES_H */ struct static_tree_desc_s { const ct_data *static_tree; /* static tree or NULL */ const intf *extra_bits; /* extra bits for each code or NULL */ int extra_base; /* base index for extra_bits */ int elems; /* max number of elements in the tree */ int max_length; /* max bit length for the codes */ }; local static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; local static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; local static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== * Local (static) routines in this file. */ local void tr_static_init OF((void)); local void init_block OF((deflate_state *s)); local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); local void build_tree OF((deflate_state *s, tree_desc *desc)); local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); local int build_bl_tree OF((deflate_state *s)); local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, int blcodes)); local void compress_block OF((deflate_state *s, ct_data *ltree, ct_data *dtree)); local void set_data_type OF((deflate_state *s)); local unsigned bi_reverse OF((unsigned value, int length)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); local void copy_block OF((deflate_state *s, charf *buf, unsigned len, int header)); #ifdef GEN_TREES_H local void gen_trees_header OF((void)); #endif #ifndef DEBUG # define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) /* Send a code of the given tree. c and tree must not have side effects */ #else /* DEBUG */ # define send_code(s, c, tree) \ { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ send_bits(s, tree[c].Code, tree[c].Len); } #endif /* =========================================================================== * Output a short LSB first on the stream. * IN assertion: there is enough room in pendingBuf. */ #define put_short(s, w) { \ put_byte(s, (uch)((w) & 0xff)); \ put_byte(s, (uch)((ush)(w) >> 8)); \ } /* =========================================================================== * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ #ifdef DEBUG local void send_bits OF((deflate_state *s, int value, int length)); local void send_bits(s, value, length) deflate_state *s; int value; /* value to send */ int length; /* number of bits */ { Tracevv((stderr," l %2d v %4x ", length, value)); Assert(length > 0 && length <= 15, "invalid length"); s->bits_sent += (ulg)length; /* If not enough room in bi_buf, use (valid) bits from bi_buf and * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { s->bi_buf |= (value << s->bi_valid); put_short(s, s->bi_buf); s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); s->bi_valid += length - Buf_size; } else { s->bi_buf |= value << s->bi_valid; s->bi_valid += length; } } #else /* !DEBUG */ #define send_bits(s, value, length) \ { int len = length;\ if (s->bi_valid > (int)Buf_size - len) {\ int val = value;\ s->bi_buf |= (val << s->bi_valid);\ put_short(s, s->bi_buf);\ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ s->bi_valid += len - Buf_size;\ } else {\ s->bi_buf |= (value) << s->bi_valid;\ s->bi_valid += len;\ }\ } #endif /* DEBUG */ /* the arguments must not have side effects */ /* =========================================================================== * Initialize the various 'constant' tables. */ local void tr_static_init() { #if defined(GEN_TREES_H) || !defined(STDC) static int static_init_done = 0; int n; /* iterates over tree elements */ int bits; /* bit counter */ int length; /* length value */ int code; /* code value */ int dist; /* distance index */ ush bl_count[MAX_BITS+1]; /* number of codes at each bit length for an optimal tree */ if (static_init_done) return; /* For some embedded targets, global variables are not initialized: */ static_l_desc.static_tree = static_ltree; static_l_desc.extra_bits = extra_lbits; static_d_desc.static_tree = static_dtree; static_d_desc.extra_bits = extra_dbits; static_bl_desc.extra_bits = extra_blbits; /* Initialize the mapping length (0..255) -> length code (0..28) */ length = 0; for (code = 0; code < LENGTH_CODES-1; code++) { base_length[code] = length; for (n = 0; n < (1< dist code (0..29) */ dist = 0; for (code = 0 ; code < 16; code++) { base_dist[code] = dist; for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ for ( ; code < D_CODES; code++) { base_dist[code] = dist << 7; for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { _dist_code[256 + dist++] = (uch)code; } } Assert (dist == 256, "tr_static_init: 256+dist != 512"); /* Construct the codes of the static literal tree */ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; n = 0; while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; /* Codes 286 and 287 do not exist, but we must include them in the * tree construction to get a canonical Huffman tree (longest code * all ones) */ gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); /* The static distance tree is trivial: */ for (n = 0; n < D_CODES; n++) { static_dtree[n].Len = 5; static_dtree[n].Code = bi_reverse((unsigned)n, 5); } static_init_done = 1; # ifdef GEN_TREES_H gen_trees_header(); # endif #endif /* defined(GEN_TREES_H) || !defined(STDC) */ } /* =========================================================================== * Genererate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H # ifndef DEBUG # include # endif # define SEPARATOR(i, last, width) \ ((i) == (last)? "\n};\n\n" : \ ((i) % (width) == (width)-1 ? ",\n" : ", ")) void gen_trees_header() { FILE *header = fopen("trees.h", "w"); int i; Assert (header != NULL, "Can't open trees.h"); fprintf(header, "/* header created automatically with -DGEN_TREES_H */\n\n"); fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); for (i = 0; i < L_CODES+2; i++) { fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); } fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); for (i = 0; i < D_CODES; i++) { fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); } fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); for (i = 0; i < DIST_CODE_LEN; i++) { fprintf(header, "%2u%s", _dist_code[i], SEPARATOR(i, DIST_CODE_LEN-1, 20)); } fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { fprintf(header, "%2u%s", _length_code[i], SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); } fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); for (i = 0; i < LENGTH_CODES; i++) { fprintf(header, "%1u%s", base_length[i], SEPARATOR(i, LENGTH_CODES-1, 20)); } fprintf(header, "local const int base_dist[D_CODES] = {\n"); for (i = 0; i < D_CODES; i++) { fprintf(header, "%5u%s", base_dist[i], SEPARATOR(i, D_CODES-1, 10)); } fclose(header); } #endif /* GEN_TREES_H */ /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ void _tr_init(s) deflate_state *s; { tr_static_init(); s->l_desc.dyn_tree = s->dyn_ltree; s->l_desc.stat_desc = &static_l_desc; s->d_desc.dyn_tree = s->dyn_dtree; s->d_desc.stat_desc = &static_d_desc; s->bl_desc.dyn_tree = s->bl_tree; s->bl_desc.stat_desc = &static_bl_desc; s->bi_buf = 0; s->bi_valid = 0; s->last_eob_len = 8; /* enough lookahead for inflate */ #ifdef DEBUG s->compressed_len = 0L; s->bits_sent = 0L; #endif /* Initialize the first block of the first file: */ init_block(s); } /* =========================================================================== * Initialize a new block. */ local void init_block(s) deflate_state *s; { int n; /* iterates over tree elements */ /* Initialize the trees. */ for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; s->dyn_ltree[END_BLOCK].Freq = 1; s->opt_len = s->static_len = 0L; s->last_lit = s->matches = 0; } #define SMALLEST 1 /* Index within the heap array of least frequent node in the Huffman tree */ /* =========================================================================== * Remove the smallest element from the heap and recreate the heap with * one less element. Updates heap and heap_len. */ #define pqremove(s, tree, top) \ {\ top = s->heap[SMALLEST]; \ s->heap[SMALLEST] = s->heap[s->heap_len--]; \ pqdownheap(s, tree, SMALLEST); \ } /* =========================================================================== * Compares to subtrees, using the tree depth as tie breaker when * the subtrees have equal frequency. This minimizes the worst case length. */ #define smaller(tree, n, m, depth) \ (tree[n].Freq < tree[m].Freq || \ (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) /* =========================================================================== * Restore the heap property by moving down the tree starting at node k, * exchanging a node with the smallest of its two sons if necessary, stopping * when the heap property is re-established (each father smaller than its * two sons). */ local void pqdownheap(s, tree, k) deflate_state *s; ct_data *tree; /* the tree to restore */ int k; /* node to move down */ { int v = s->heap[k]; int j = k << 1; /* left son of k */ while (j <= s->heap_len) { /* Set j to the smallest of the two sons: */ if (j < s->heap_len && smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { j++; } /* Exit if v is smaller than both sons */ if (smaller(tree, v, s->heap[j], s->depth)) break; /* Exchange v with the smallest son */ s->heap[k] = s->heap[j]; k = j; /* And continue down the tree, setting j to the left son of k */ j <<= 1; } s->heap[k] = v; } /* =========================================================================== * Compute the optimal bit lengths for a tree and update the total bit length * for the current block. * IN assertion: the fields freq and dad are set, heap[heap_max] and * above are the tree nodes sorted by increasing frequency. * OUT assertions: the field len is set to the optimal bit length, the * array bl_count contains the frequencies for each bit length. * The length opt_len is updated; static_len is also updated if stree is * not null. */ local void gen_bitlen(s, desc) deflate_state *s; tree_desc *desc; /* the tree descriptor */ { ct_data *tree = desc->dyn_tree; int max_code = desc->max_code; const ct_data *stree = desc->stat_desc->static_tree; const intf *extra = desc->stat_desc->extra_bits; int base = desc->stat_desc->extra_base; int max_length = desc->stat_desc->max_length; int h; /* heap index */ int n, m; /* iterate over the tree elements */ int bits; /* bit length */ int xbits; /* extra bits */ ush f; /* frequency */ int overflow = 0; /* number of elements with bit length too large */ for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; /* In a first pass, compute the optimal bit lengths (which may * overflow in the case of the bit length tree). */ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ for (h = s->heap_max+1; h < HEAP_SIZE; h++) { n = s->heap[h]; bits = tree[tree[n].Dad].Len + 1; if (bits > max_length) bits = max_length, overflow++; tree[n].Len = (ush)bits; /* We overwrite tree[n].Dad which is no longer needed */ if (n > max_code) continue; /* not a leaf node */ s->bl_count[bits]++; xbits = 0; if (n >= base) xbits = extra[n-base]; f = tree[n].Freq; s->opt_len += (ulg)f * (bits + xbits); if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); } if (overflow == 0) return; Trace((stderr,"\nbit length overflow\n")); /* This happens for example on obj2 and pic of the Calgary corpus */ /* Find the first bit length which could increase: */ do { bits = max_length-1; while (s->bl_count[bits] == 0) bits--; s->bl_count[bits]--; /* move one leaf down the tree */ s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ s->bl_count[max_length]--; /* The brother of the overflow item also moves one step up, * but this does not affect bl_count[max_length] */ overflow -= 2; } while (overflow > 0); /* Now recompute all bit lengths, scanning in increasing frequency. * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all * lengths instead of fixing only the wrong ones. This idea is taken * from 'ar' written by Haruhiko Okumura.) */ for (bits = max_length; bits != 0; bits--) { n = s->bl_count[bits]; while (n != 0) { m = s->heap[--h]; if (m > max_code) continue; if (tree[m].Len != (unsigned) bits) { Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); s->opt_len += ((long)bits - (long)tree[m].Len) *(long)tree[m].Freq; tree[m].Len = (ush)bits; } n--; } } } /* =========================================================================== * Generate the codes for a given tree and bit counts (which need not be * optimal). * IN assertion: the array bl_count contains the bit length statistics for * the given tree and the field len is set for all tree elements. * OUT assertion: the field code is set for all tree elements of non * zero code length. */ local void gen_codes (tree, max_code, bl_count) ct_data *tree; /* the tree to decorate */ int max_code; /* largest code with non zero frequency */ ushf *bl_count; /* number of codes at each bit length */ { ush next_code[MAX_BITS+1]; /* next code value for each bit length */ ush code = 0; /* running code value */ int bits; /* bit index */ int n; /* code index */ /* The distribution counts are first used to generate the code values * without bit reversal. */ for (bits = 1; bits <= MAX_BITS; bits++) { next_code[bits] = code = (code + bl_count[bits-1]) << 1; } /* Check that the bit counts in bl_count are consistent. The last code * must be all ones. */ Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; const ct_data *stree = desc->stat_desc->static_tree; int elems = desc->stat_desc->elems; int n, m; /* iterate over heap elements */ int max_code = -1; /* largest code with non zero frequency */ int node; /* new node being created */ /* Construct the initial heap, with least frequent element in * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. * heap[0] is not used. */ s->heap_len = 0, s->heap_max = HEAP_SIZE; for (n = 0; n < elems; n++) { if (tree[n].Freq != 0) { s->heap[++(s->heap_len)] = max_code = n; s->depth[n] = 0; } else { tree[n].Len = 0; } } /* The pkzip format requires that at least one distance code exists, * and that at least one bit should be sent even if there is only one * possible code. So to avoid special checks later on we force at least * two codes of non zero frequency. */ while (s->heap_len < 2) { node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); tree[node].Freq = 1; s->depth[node] = 0; s->opt_len--; if (stree) s->static_len -= stree[node].Len; /* node is 0 or 1 so it does not have extra bits */ } desc->max_code = max_code; /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, * establish sub-heaps of increasing lengths: */ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); /* Construct the Huffman tree by repeatedly combining the least two * frequent nodes. */ node = elems; /* next internal node of the tree */ do { pqremove(s, tree, n); /* n = node of least frequency */ m = s->heap[SMALLEST]; /* m = node of next least frequency */ s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ s->heap[--(s->heap_max)] = m; /* Create a new node father of n and m */ tree[node].Freq = tree[n].Freq + tree[m].Freq; s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? s->depth[n] : s->depth[m]) + 1); tree[n].Dad = tree[m].Dad = (ush)node; #ifdef DUMP_BL_TREE if (tree == s->bl_tree) { fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); } #endif /* and insert the new node in the heap */ s->heap[SMALLEST] = node++; pqdownheap(s, tree, SMALLEST); } while (s->heap_len >= 2); s->heap[--(s->heap_max)] = s->heap[SMALLEST]; /* At this point, the fields freq and dad are set. We can now * generate the bit lengths. */ gen_bitlen(s, (tree_desc *)desc); /* The field len is now set, we can generate the bit codes */ gen_codes ((ct_data *)tree, max_code, s->bl_count); } /* =========================================================================== * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ local void scan_tree (s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ int nextlen = tree[0].Len; /* length of next code */ int count = 0; /* repeat count of the current code */ int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ if (nextlen == 0) max_count = 138, min_count = 3; tree[max_code+1].Len = (ush)0xffff; /* guard */ for (n = 0; n <= max_code; n++) { curlen = nextlen; nextlen = tree[n+1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { s->bl_tree[curlen].Freq += count; } else if (curlen != 0) { if (curlen != prevlen) s->bl_tree[curlen].Freq++; s->bl_tree[REP_3_6].Freq++; } else if (count <= 10) { s->bl_tree[REPZ_3_10].Freq++; } else { s->bl_tree[REPZ_11_138].Freq++; } count = 0; prevlen = curlen; if (nextlen == 0) { max_count = 138, min_count = 3; } else if (curlen == nextlen) { max_count = 6, min_count = 3; } else { max_count = 7, min_count = 4; } } } /* =========================================================================== * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ local void send_tree (s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ int nextlen = tree[0].Len; /* length of next code */ int count = 0; /* repeat count of the current code */ int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ /* tree[max_code+1].Len = -1; */ /* guard already set */ if (nextlen == 0) max_count = 138, min_count = 3; for (n = 0; n <= max_code; n++) { curlen = nextlen; nextlen = tree[n+1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { do { send_code(s, curlen, s->bl_tree); } while (--count != 0); } else if (curlen != 0) { if (curlen != prevlen) { send_code(s, curlen, s->bl_tree); count--; } Assert(count >= 3 && count <= 6, " 3_6?"); send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); } else if (count <= 10) { send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); } else { send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); } count = 0; prevlen = curlen; if (nextlen == 0) { max_count = 138, min_count = 3; } else if (curlen == nextlen) { max_count = 6, min_count = 3; } else { max_count = 7, min_count = 4; } } } /* =========================================================================== * Construct the Huffman tree for the bit lengths and return the index in * bl_order of the last bit length code to send. */ local int build_bl_tree(s) deflate_state *s; { int max_blindex; /* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */ scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); /* Build the bit length tree: */ build_tree(s, (tree_desc *)(&(s->bl_desc))); /* opt_len now includes the length of the tree representations, except * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. */ /* Determine the number of bit length codes to send. The pkzip format * requires that at least 4 bit length codes be sent. (appnote.txt says * 3 but the actual value used is 4.) */ for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ s->opt_len += 3*(max_blindex+1) + 5+5+4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); return max_blindex; } /* =========================================================================== * Send the header for a block using dynamic Huffman trees: the counts, the * lengths of the bit length codes, the literal tree and the distance tree. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. */ local void send_all_trees(s, lcodes, dcodes, blcodes) deflate_state *s; int lcodes, dcodes, blcodes; /* number of codes for each tree */ { int rank; /* index in bl_order */ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes"); Tracev((stderr, "\nbl counts: ")); send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ send_bits(s, dcodes-1, 5); send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ for (rank = 0; rank < blcodes; rank++) { Tracev((stderr, "\nbl code %2d ", bl_order[rank])); send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); } Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); } /* =========================================================================== * Send a stored block */ void _tr_stored_block(s, buf, stored_len, eof) deflate_state *s; charf *buf; /* input block */ ulg stored_len; /* length of input block */ int eof; /* true if this is the last block for a file */ { send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ #ifdef DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; #endif copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ } /* =========================================================================== * Send one empty static block to give enough lookahead for inflate. * This takes 10 bits, of which 7 may remain in the bit buffer. * The current inflate code requires 9 bits of lookahead. If the * last two codes for the previous block (real code plus EOB) were coded * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode * the last real code. In this case we send two empty static blocks instead * of one. (There are no problems if the previous block is stored or fixed.) * To simplify the code, we assume the worst case of last real code encoded * on one bit only. */ void _tr_align(s) deflate_state *s; { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef DEBUG s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ #endif bi_flush(s); /* Of the 10 bits for the empty block, we have already sent * (10 - bi_valid) bits. The lookahead for the last real code (before * the EOB of the previous block) was thus at least one plus the length * of the EOB plus what we have just sent of the empty static block. */ if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef DEBUG s->compressed_len += 10L; #endif bi_flush(s); } s->last_eob_len = 7; } /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static * trees or store, and output the encoded block to the zip file. */ void _tr_flush_block(s, buf, stored_len, eof) deflate_state *s; charf *buf; /* input block, or NULL if too old */ ulg stored_len; /* length of input block */ int eof; /* true if this is the last block for a file */ { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ /* Build the Huffman trees unless a stored block is forced */ if (s->level > 0) { /* Check if the file is ascii or binary */ if (s->data_type == Z_UNKNOWN) set_data_type(s); /* Construct the literal and distance trees */ build_tree(s, (tree_desc *)(&(s->l_desc))); Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, s->static_len)); build_tree(s, (tree_desc *)(&(s->d_desc))); Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, s->static_len)); /* At this point, opt_len and static_len are the total bit lengths of * the compressed block data, excluding the tree representations. */ /* Build the bit length tree for the above two trees, and get the index * in bl_order of the last bit length code to send. */ max_blindex = build_bl_tree(s); /* Determine the best encoding. Compute the block lengths in bytes. */ opt_lenb = (s->opt_len+3+7)>>3; static_lenb = (s->static_len+3+7)>>3; Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, s->last_lit)); if (static_lenb <= opt_lenb) opt_lenb = static_lenb; } else { Assert(buf != (char*)0, "lost buf"); opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ } #ifdef FORCE_STORED if (buf != (char*)0) { /* force stored block */ #else if (stored_len+4 <= opt_lenb && buf != (char*)0) { /* 4: two words for the lengths */ #endif /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. * Otherwise we can't have processed more than WSIZE input bytes since * the last block flush, because compression would have been * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to * transform a block into a stored block. */ _tr_stored_block(s, buf, stored_len, eof); #ifdef FORCE_STATIC } else if (static_lenb >= 0) { /* force static trees */ #else } else if (static_lenb == opt_lenb) { #endif send_bits(s, (STATIC_TREES<<1)+eof, 3); compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); #ifdef DEBUG s->compressed_len += 3 + s->static_len; #endif } else { send_bits(s, (DYN_TREES<<1)+eof, 3); send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, max_blindex+1); compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); #ifdef DEBUG s->compressed_len += 3 + s->opt_len; #endif } Assert (s->compressed_len == s->bits_sent, "bad compressed size"); /* The above check is made mod 2^32, for files larger than 512 MB * and uLong implemented on 32 bits. */ init_block(s); if (eof) { bi_windup(s); #ifdef DEBUG s->compressed_len += 7; /* align on byte boundary */ #endif } Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, s->compressed_len-7*eof)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ int _tr_tally (s, dist, lc) deflate_state *s; unsigned dist; /* distance of matched string */ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ { s->d_buf[s->last_lit] = (ush)dist; s->l_buf[s->last_lit++] = (uch)lc; if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; } else { s->matches++; /* Here, lc is the match length - MIN_MATCH */ dist--; /* dist = match distance - 1 */ Assert((ush)dist < (ush)MAX_DIST(s) && (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; s->dyn_dtree[d_code(dist)].Freq++; } #ifdef TRUNCATE_BLOCK /* Try to guess if it is profitable to stop the current block here */ if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { /* Compute an upper bound for the compressed length */ ulg out_length = (ulg)s->last_lit*8L; ulg in_length = (ulg)((long)s->strstart - s->block_start); int dcode; for (dcode = 0; dcode < D_CODES; dcode++) { out_length += (ulg)s->dyn_dtree[dcode].Freq * (5L+extra_dbits[dcode]); } out_length >>= 3; Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", s->last_lit, in_length, out_length, 100L - out_length*100L/in_length)); if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; } #endif return (s->last_lit == s->lit_bufsize-1); /* We avoid equality with lit_bufsize because of wraparound at 64K * on 16 bit machines and because stored blocks are restricted to * 64K-1 bytes. */ } /* =========================================================================== * Send the block data compressed using the given Huffman trees */ local void compress_block(s, ltree, dtree) deflate_state *s; ct_data *ltree; /* literal tree */ ct_data *dtree; /* distance tree */ { unsigned dist; /* distance of matched string */ int lc; /* match length or unmatched char (if dist == 0) */ unsigned lx = 0; /* running index in l_buf */ unsigned code; /* the code to send */ int extra; /* number of extra bits to send */ if (s->last_lit != 0) do { dist = s->d_buf[lx]; lc = s->l_buf[lx++]; if (dist == 0) { send_code(s, lc, ltree); /* send a literal byte */ Tracecv(isgraph(lc), (stderr," '%c' ", lc)); } else { /* Here, lc is the match length - MIN_MATCH */ code = _length_code[lc]; send_code(s, code+LITERALS+1, ltree); /* send the length code */ extra = extra_lbits[code]; if (extra != 0) { lc -= base_length[code]; send_bits(s, lc, extra); /* send the extra length bits */ } dist--; /* dist is now the match distance - 1 */ code = d_code(dist); Assert (code < D_CODES, "bad d_code"); send_code(s, code, dtree); /* send the distance code */ extra = extra_dbits[code]; if (extra != 0) { dist -= base_dist[code]; send_bits(s, dist, extra); /* send the extra distance bits */ } } /* literal or match pair ? */ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, "pendingBuf overflow"); } while (lx < s->last_lit); send_code(s, END_BLOCK, ltree); s->last_eob_len = ltree[END_BLOCK].Len; } /* =========================================================================== * Set the data type to ASCII or BINARY, using a crude approximation: * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. * IN assertion: the fields freq of dyn_ltree are set and the total of all * frequencies does not exceed 64K (to fit in an int on 16 bit machines). */ local void set_data_type(s) deflate_state *s; { int n = 0; unsigned ascii_freq = 0; unsigned bin_freq = 0; while (n < 7) bin_freq += s->dyn_ltree[n++].Freq; while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq; while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); } /* =========================================================================== * Reverse the first len bits of a code, using straightforward code (a faster * method would use a table) * IN assertion: 1 <= len <= 15 */ local unsigned bi_reverse(code, len) unsigned code; /* the value to invert */ int len; /* its bit length */ { register unsigned res = 0; do { res |= code & 1; code >>= 1, res <<= 1; } while (--len > 0); return res >> 1; } /* =========================================================================== * Flush the bit buffer, keeping at most 7 bits in it. */ local void bi_flush(s) deflate_state *s; { if (s->bi_valid == 16) { put_short(s, s->bi_buf); s->bi_buf = 0; s->bi_valid = 0; } else if (s->bi_valid >= 8) { put_byte(s, (Byte)s->bi_buf); s->bi_buf >>= 8; s->bi_valid -= 8; } } /* =========================================================================== * Flush the bit buffer and align the output on a byte boundary */ local void bi_windup(s) deflate_state *s; { if (s->bi_valid > 8) { put_short(s, s->bi_buf); } else if (s->bi_valid > 0) { put_byte(s, (Byte)s->bi_buf); } s->bi_buf = 0; s->bi_valid = 0; #ifdef DEBUG s->bits_sent = (s->bits_sent+7) & ~7; #endif } /* =========================================================================== * Copy a stored block, storing first the length and its * one's complement if requested. */ local void copy_block(s, buf, len, header) deflate_state *s; charf *buf; /* the input data */ unsigned len; /* its length */ int header; /* true if block header must be written */ { bi_windup(s); /* align on byte boundary */ s->last_eob_len = 8; /* enough lookahead for inflate */ if (header) { put_short(s, (ush)len); put_short(s, (ush)~len); #ifdef DEBUG s->bits_sent += 2*16; #endif } #ifdef DEBUG s->bits_sent += (ulg)len<<3; #endif while (len--) { put_byte(s, *buf++); } } htmldoc-1.8.27/zlib/uncompr.c0100664000212600000240000000412210233324641014506 0ustar mikeuser/* uncompr.c -- decompress a memory buffer * Copyright (C) 1995-2003 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: uncompr.c 1403 2005-04-26 02:38:25Z mike $ */ #define ZLIB_INTERNAL #include "zlib.h" /* =========================================================================== Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. This function can be used to decompress a whole file at once if the input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted. */ int ZEXPORT uncompress (dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; uLong sourceLen; { z_stream stream; int err; stream.next_in = (Bytef*)source; stream.avail_in = (uInt)sourceLen; /* Check for source > 64K on 16-bit machine: */ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; stream.next_out = dest; stream.avail_out = (uInt)*destLen; if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; err = inflateInit(&stream); if (err != Z_OK) return err; err = inflate(&stream, Z_FINISH); if (err != Z_STREAM_END) { inflateEnd(&stream); if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) return Z_DATA_ERROR; return err; } *destLen = stream.total_out; err = inflateEnd(&stream); return err; } htmldoc-1.8.27/zlib/algorithm.txt0100664000212600000240000002217010124711246015411 0ustar mikeuser1. Compression algorithm (deflate) The deflation algorithm used by gzip (also zip and zlib) is a variation of LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in the input data. The second occurrence of a string is replaced by a pointer to the previous string, in the form of a pair (distance, length). Distances are limited to 32K bytes, and lengths are limited to 258 bytes. When a string does not occur anywhere in the previous 32K bytes, it is emitted as a sequence of literal bytes. (In this description, `string' must be taken as an arbitrary sequence of bytes, and is not restricted to printable characters.) Literals or match lengths are compressed with one Huffman tree, and match distances are compressed with another tree. The trees are stored in a compact form at the start of each block. The blocks can have any size (except that the compressed data for one block must fit in available memory). A block is terminated when deflate() determines that it would be useful to start another block with fresh trees. (This is somewhat similar to the behavior of LZW-based _compress_.) Duplicated strings are found using a hash table. All input strings of length 3 are inserted in the hash table. A hash index is computed for the next 3 bytes. If the hash chain for this index is not empty, all strings in the chain are compared with the current input string, and the longest match is selected. The hash chains are searched starting with the most recent strings, to favor small distances and thus take advantage of the Huffman encoding. The hash chains are singly linked. There are no deletions from the hash chains, the algorithm simply discards matches that are too old. To avoid a worst-case situation, very long hash chains are arbitrarily truncated at a certain length, determined by a runtime option (level parameter of deflateInit). So deflate() does not always find the longest possible match but generally finds a match which is long enough. deflate() also defers the selection of matches with a lazy evaluation mechanism. After a match of length N has been found, deflate() searches for a longer match at the next input byte. If a longer match is found, the previous match is truncated to a length of one (thus producing a single literal byte) and the process of lazy evaluation begins again. Otherwise, the original match is kept, and the next match search is attempted only N steps later. The lazy match evaluation is also subject to a runtime parameter. If the current match is long enough, deflate() reduces the search for a longer match, thus speeding up the whole process. If compression ratio is more important than speed, deflate() attempts a complete second search even if the first match is already long enough. The lazy match evaluation is not performed for the fastest compression modes (level parameter 1 to 3). For these fast modes, new strings are inserted in the hash table only when no match was found, or when the match is not too long. This degrades the compression ratio but saves time since there are both fewer insertions and fewer searches. 2. Decompression algorithm (inflate) 2.1 Introduction The key question is how to represent a Huffman code (or any prefix code) so that you can decode fast. The most important characteristic is that shorter codes are much more common than longer codes, so pay attention to decoding the short codes fast, and let the long codes take longer to decode. inflate() sets up a first level table that covers some number of bits of input less than the length of longest code. It gets that many bits from the stream, and looks it up in the table. The table will tell if the next code is that many bits or less and how many, and if it is, it will tell the value, else it will point to the next level table for which inflate() grabs more bits and tries to decode a longer code. How many bits to make the first lookup is a tradeoff between the time it takes to decode and the time it takes to build the table. If building the table took no time (and if you had infinite memory), then there would only be a first level table to cover all the way to the longest code. However, building the table ends up taking a lot longer for more bits since short codes are replicated many times in such a table. What inflate() does is simply to make the number of bits in the first table a variable, and then to set that variable for the maximum speed. For inflate, which has 286 possible codes for the literal/length tree, the size of the first table is nine bits. Also the distance trees have 30 possible values, and the size of the first table is six bits. Note that for each of those cases, the table ended up one bit longer than the ``average'' code length, i.e. the code length of an approximately flat code which would be a little more than eight bits for 286 symbols and a little less than five bits for 30 symbols. 2.2 More details on the inflate table lookup Ok, you want to know what this cleverly obfuscated inflate tree actually looks like. You are correct that it's not a Huffman tree. It is simply a lookup table for the first, let's say, nine bits of a Huffman symbol. The symbol could be as short as one bit or as long as 15 bits. If a particular symbol is shorter than nine bits, then that symbol's translation is duplicated in all those entries that start with that symbol's bits. For example, if the symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a symbol is nine bits long, it appears in the table once. If the symbol is longer than nine bits, then that entry in the table points to another similar table for the remaining bits. Again, there are duplicated entries as needed. The idea is that most of the time the symbol will be short and there will only be one table look up. (That's whole idea behind data compression in the first place.) For the less frequent long symbols, there will be two lookups. If you had a compression method with really long symbols, you could have as many levels of lookups as is efficient. For inflate, two is enough. So a table entry either points to another table (in which case nine bits in the above example are gobbled), or it contains the translation for the symbol and the number of bits to gobble. Then you start again with the next ungobbled bit. You may wonder: why not just have one lookup table for how ever many bits the longest symbol is? The reason is that if you do that, you end up spending more time filling in duplicate symbol entries than you do actually decoding. At least for deflate's output that generates new trees every several 10's of kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code would take too long if you're only decoding several thousand symbols. At the other extreme, you could make a new table for every bit in the code. In fact, that's essentially a Huffman tree. But then you spend two much time traversing the tree while decoding, even for short symbols. So the number of bits for the first lookup table is a trade of the time to fill out the table vs. the time spent looking at the second level and above of the table. Here is an example, scaled down: The code being decoded, with 10 symbols, from 1 to 6 bits long: A: 0 B: 10 C: 1100 D: 11010 E: 11011 F: 11100 G: 11101 H: 11110 I: 111110 J: 111111 Let's make the first table three bits long (eight entries): 000: A,1 001: A,1 010: A,1 011: A,1 100: B,2 101: B,2 110: -> table X (gobble 3 bits) 111: -> table Y (gobble 3 bits) Each entry is what the bits decode as and how many bits that is, i.e. how many bits to gobble. Or the entry points to another table, with the number of bits to gobble implicit in the size of the table. Table X is two bits long since the longest code starting with 110 is five bits long: 00: C,1 01: C,1 10: D,2 11: E,2 Table Y is three bits long since the longest code starting with 111 is six bits long: 000: F,2 001: F,2 010: G,2 011: G,2 100: H,2 101: H,2 110: I,3 111: J,3 So what we have here are three tables with a total of 20 entries that had to be constructed. That's compared to 64 entries for a single table. Or compared to 16 entries for a Huffman tree (six two entry tables and one four entry table). Assuming that the code ideally represents the probability of the symbols, it takes on the average 1.25 lookups per symbol. That's compared to one lookup for the single table, or 1.66 lookups per symbol for the Huffman tree. There, I think that gives you a picture of what's going on. For inflate, the meaning of a particular symbol is often more than just a letter. It can be a byte (a "literal"), or it can be either a length or a distance which indicates a base value and a number of bits to fetch after the code that is added to the base value. Or it might be the special end-of-block code. The data structures created in inftrees.c try to encode all that information compactly in the tables. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu References: [LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, pp. 337-343. ``DEFLATE Compressed Data Format Specification'' available in http://www.ietf.org/rfc/rfc1951.txt htmldoc-1.8.27/zlib/inftrees.h0100664000212600000240000000450510124711246014654 0ustar mikeuser/* inftrees.h -- header to use inftrees.c * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* Structure for decoding tables. Each entry provides either the information needed to do the operation requested by the code that indexed that table entry, or it provides a pointer to another table that indexes more bits of the code. op indicates whether the entry is a pointer to another table, a literal, a length or distance, an end-of-block, or an invalid code. For a table pointer, the low four bits of op is the number of index bits of that table. For a length or distance, the low four bits of op is the number of extra bits to get after the code. bits is the number of bits in this code or part of the code to drop off of the bit buffer. val is the actual byte to output in the case of a literal, the base length or distance, or the offset from the current table to the next table. Each entry is four bytes. */ typedef struct { unsigned char op; /* operation, extra bits, table bits */ unsigned char bits; /* bits in this part of the code */ unsigned short val; /* offset in table or code value */ } code; /* op values as set by inflate_table(): 00000000 - literal 0000tttt - table link, tttt != 0 is the number of table index bits 0001eeee - length or distance, eeee is the number of extra bits 01100000 - end of block 01000000 - invalid code */ /* Maximum size of dynamic tree. The maximum found in a long but non- exhaustive search was 1004 code structures (850 for length/literals and 154 for distances, the latter actually the result of an exhaustive search). The true maximum is not known, but the value below is more than safe. */ #define ENOUGH 1440 #define MAXD 154 /* Type of code to build for inftable() */ typedef enum { CODES, LENS, DISTS } codetype; extern int inflate_table OF((codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work)); htmldoc-1.8.27/zlib/zconf.h0100664000212600000240000002141710233324641014155 0ustar mikeuser/* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-2003 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: zconf.h 1403 2005-04-26 02:38:25Z mike $ */ #ifndef ZCONF_H #define ZCONF_H /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. */ #ifdef Z_PREFIX # define deflateInit_ z_deflateInit_ # define deflate z_deflate # define deflateEnd z_deflateEnd # define inflateInit_ z_inflateInit_ # define inflate z_inflate # define inflateEnd z_inflateEnd # define deflateInit2_ z_deflateInit2_ # define deflateSetDictionary z_deflateSetDictionary # define deflateCopy z_deflateCopy # define deflateReset z_deflateReset # define deflatePrime z_deflatePrime # define deflateParams z_deflateParams # define deflateBound z_deflateBound # define inflateInit2_ z_inflateInit2_ # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateCopy z_inflateCopy # define inflateReset z_inflateReset # define compress z_compress # define compress2 z_compress2 # define compressBound z_compressBound # define uncompress z_uncompress # define adler32 z_adler32 # define crc32 z_crc32 # define get_crc_table z_get_crc_table # define Byte z_Byte # define uInt z_uInt # define uLong z_uLong # define Bytef z_Bytef # define charf z_charf # define intf z_intf # define uIntf z_uIntf # define uLongf z_uLongf # define voidpf z_voidpf # define voidp z_voidp #endif #if defined(__MSDOS__) && !defined(MSDOS) # define MSDOS #endif #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) # define OS2 #endif #if defined(_WINDOWS) && !defined(WINDOWS) # define WINDOWS #endif #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) # define WIN32 #endif #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) # if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) # ifndef SYS16BIT # define SYS16BIT # endif # endif #endif /* * Compile with -DMAXSEG_64K if the alloc function cannot allocate more * than 64k bytes at a time (needed on systems with 16-bit int). */ #ifdef SYS16BIT # define MAXSEG_64K #endif #ifdef MSDOS # define UNALIGNED_OK #endif #ifdef __STDC_VERSION__ # ifndef STDC # define STDC # endif # if __STDC_VERSION__ >= 199901L # ifndef STDC99 # define STDC99 # endif # endif #endif #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) # define STDC #endif #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) # define STDC #endif #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) # define STDC #endif #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) # define STDC #endif #if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ # define STDC #endif #ifndef STDC # ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ # define const /* note: need a more gentle solution here */ # endif #endif /* Some Mac compilers merge all .h files incorrectly: */ #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) # define NO_DUMMY_DECL #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL # ifdef MAXSEG_64K # define MAX_MEM_LEVEL 8 # else # define MAX_MEM_LEVEL 9 # endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files * created by gzip. (Files created by minigzip can still be extracted by * gzip.) */ #ifndef MAX_WBITS # define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects. For example, if you want to reduce the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits that is, 32K for windowBits=15 (default value) plus a few kilobytes for small objects. */ /* Type declarations */ #ifndef OF /* function prototypes */ # ifdef STDC # define OF(args) args # else # define OF(args) () # endif #endif /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, * just define FAR to be empty. */ #ifdef SYS16BIT # if defined(M_I86SM) || defined(M_I86MM) /* MSC small or medium model */ # define SMALL_MEDIUM # ifdef _MSC_VER # define FAR _far # else # define FAR far # endif # endif # if (defined(__SMALL__) || defined(__MEDIUM__)) /* Turbo C small or medium model */ # define SMALL_MEDIUM # ifdef __BORLANDC__ # define FAR _far # else # define FAR far # endif # endif #endif #if defined(WINDOWS) || defined(WIN32) /* If building or using zlib as a DLL, define ZLIB_DLL. * This is not mandatory, but it offers a little performance increase. */ # ifdef ZLIB_DLL # if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) # ifdef ZLIB_INTERNAL # define ZEXTERN extern __declspec(dllexport) # else # define ZEXTERN extern __declspec(dllimport) # endif # endif # endif /* ZLIB_DLL */ /* If building or using zlib with the WINAPI/WINAPIV calling convention, * define ZLIB_WINAPI. * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. */ # ifdef ZLIB_WINAPI # ifdef FAR # undef FAR # endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ # define ZEXPORT WINAPI # ifdef WIN32 # define ZEXPORTVA WINAPIV # else # define ZEXPORTVA FAR CDECL # endif # endif #endif #if defined (__BEOS__) # ifdef ZLIB_DLL # ifdef ZLIB_INTERNAL # define ZEXPORT __declspec(dllexport) # define ZEXPORTVA __declspec(dllexport) # else # define ZEXPORT __declspec(dllimport) # define ZEXPORTVA __declspec(dllimport) # endif # endif #endif #ifndef ZEXTERN # define ZEXTERN extern #endif #ifndef ZEXPORT # define ZEXPORT #endif #ifndef ZEXPORTVA # define ZEXPORTVA #endif #ifndef FAR # define FAR #endif #if !defined(__MACTYPES__) typedef unsigned char Byte; /* 8 bits */ #endif typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ # define Bytef Byte FAR #else typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC typedef void const *voidpc; typedef void FAR *voidpf; typedef void *voidp; #else typedef Byte const *voidpc; typedef Byte FAR *voidpf; typedef Byte *voidp; #endif #if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ # include /* for off_t */ # include /* for SEEK_* and off_t */ # ifdef VMS # include /* for off_t */ # endif # define z_off_t off_t #endif #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t # define z_off_t long #endif #if defined(__OS400__) #define NO_vsnprintf #endif #if defined(__MVS__) # define NO_vsnprintf # ifdef FAR # undef FAR # endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) # pragma map(deflateInit_,"DEIN") # pragma map(deflateInit2_,"DEIN2") # pragma map(deflateEnd,"DEEND") # pragma map(deflateBound,"DEBND") # pragma map(inflateInit_,"ININ") # pragma map(inflateInit2_,"ININ2") # pragma map(inflateEnd,"INEND") # pragma map(inflateSync,"INSY") # pragma map(inflateSetDictionary,"INSEDI") # pragma map(compressBound,"CMBND") # pragma map(inflate_table,"INTABL") # pragma map(inflate_fast,"INFA") # pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ htmldoc-1.8.27/zlib/INDEX0100664000212600000240000000221210124711246013447 0ustar mikeuserChangeLog history of changes FAQ Frequently Asked Questions about zlib INDEX this file Makefile makefile for Unix (generated by configure) Makefile.in makefile for Unix (template for configure) README guess what algorithm.txt description of the (de)compression algorithm configure configure script for Unix zconf.in.h template for zconf.h (used by configure) msdos/ makefiles for MSDOS old/ makefiles for various architectures and zlib documentation files that have not yet been updated for zlib 1.2.x qnx/ makefiles for QNX win32/ makefiles for Windows zlib public header files (must be kept): zconf.h zlib.h private source files used to build the zlib library: adler32.c compress.c crc32.c crc32.h deflate.c deflate.h gzio.c infback.c inffast.c inffast.h inffixed.h inflate.c inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zutil.c zutil.h source files for sample programs: example.c minigzip.c unsupported contribution by third parties See contrib/README.contrib htmldoc-1.8.27/zlib/inflate.h0100664000212600000240000001325210124711361014454 0ustar mikeuser/* inflate.h -- internal inflate state definition * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* define NO_GZIP when compiling if you want to disable gzip header and trailer decoding by inflate(). NO_GZIP would be used to avoid linking in the crc code when it is not needed. For shared libraries, gzip decoding should be left enabled. */ #ifndef NO_GZIP # define GUNZIP #endif /* Possible inflate modes between inflate() calls */ typedef enum { HEAD, /* i: waiting for magic header */ #ifdef GUNZIP FLAGS, /* i: waiting for method and flags (gzip) */ TIME, /* i: waiting for modification time (gzip) */ OS, /* i: waiting for extra flags and operating system (gzip) */ EXLEN, /* i: waiting for extra length (gzip) */ EXTRA, /* i: waiting for extra bytes (gzip) */ NAME, /* i: waiting for end of file name (gzip) */ COMMENT, /* i: waiting for end of comment (gzip) */ HCRC, /* i: waiting for header crc (gzip) */ #endif DICTID, /* i: waiting for dictionary check value */ DICT, /* waiting for inflateSetDictionary() call */ TYPE, /* i: waiting for type bits, including last-flag bit */ TYPEDO, /* i: same, but skip check to exit inflate on new block */ STORED, /* i: waiting for stored size (length and complement) */ COPY, /* i/o: waiting for input or output to copy stored block */ TABLE, /* i: waiting for dynamic block table lengths */ LENLENS, /* i: waiting for code length code lengths */ CODELENS, /* i: waiting for length/lit and distance code lengths */ LEN, /* i: waiting for length/lit code */ LENEXT, /* i: waiting for length extra bits */ DIST, /* i: waiting for distance code */ DISTEXT, /* i: waiting for distance extra bits */ MATCH, /* o: waiting for output space to copy string */ LIT, /* o: waiting for output space to write literal */ CHECK, /* i: waiting for 32-bit check value */ #ifdef GUNZIP LENGTH, /* i: waiting for 32-bit length (gzip) */ #endif DONE, /* finished check, done -- remain here until reset */ BAD, /* got a data error -- remain here until reset */ MEM, /* got an inflate() memory error -- remain here until reset */ SYNC /* looking for synchronization bytes to restart inflate() */ } inflate_mode; /* State transitions between above modes - (most modes can go to the BAD or MEM mode -- not shown for clarity) Process header: HEAD -> (gzip) or (zlib) (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME NAME -> COMMENT -> HCRC -> TYPE (zlib) -> DICTID or TYPE DICTID -> DICT -> TYPE Read deflate blocks: TYPE -> STORED or TABLE or LEN or CHECK STORED -> COPY -> TYPE TABLE -> LENLENS -> CODELENS -> LEN Read deflate codes: LEN -> LENEXT or LIT or TYPE LENEXT -> DIST -> DISTEXT -> MATCH -> LEN LIT -> LEN Process trailer: CHECK -> LENGTH -> DONE */ /* state maintained between inflate() calls. Approximately 7K bytes. */ struct inflate_state { inflate_mode mode; /* current inflate mode */ int last; /* true if processing last block */ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ int havedict; /* true if dictionary provided */ int flags; /* gzip header method and flags (0 if zlib) */ unsigned long check; /* protected copy of check value */ unsigned long total; /* protected copy of output count */ /* sliding window */ unsigned wbits; /* log base 2 of requested window size */ unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */ unsigned write; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if needed */ /* bit accumulator */ unsigned long hold; /* input bit accumulator */ unsigned bits; /* number of bits in "in" */ /* for string and stored block copying */ unsigned length; /* literal or length of data to copy */ unsigned offset; /* distance back to copy string from */ /* for table and code decoding */ unsigned extra; /* extra bits needed */ /* fixed and dynamic code tables */ code const FAR *lencode; /* starting table for length/literal codes */ code const FAR *distcode; /* starting table for distance codes */ unsigned lenbits; /* index bits for lencode */ unsigned distbits; /* index bits for distcode */ /* dynamic table building */ unsigned ncode; /* number of code length code lengths */ unsigned nlen; /* number of length code lengths */ unsigned ndist; /* number of distance code lengths */ unsigned have; /* number of code lengths in lens[] */ code FAR *next; /* next available space in codes[] */ unsigned short lens[320]; /* temporary storage for code lengths */ unsigned short work[288]; /* work area for code table building */ code codes[ENOUGH]; /* space for code tables */ }; htmldoc-1.8.27/zlib/compress.c0100664000212600000240000000474510233324641014671 0ustar mikeuser/* compress.c -- compress a memory buffer * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: compress.c 1403 2005-04-26 02:38:25Z mike $ */ #define ZLIB_INTERNAL #include "zlib.h" /* =========================================================================== Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) Bytef *dest; uLongf *destLen; const Bytef *source; uLong sourceLen; int level; { z_stream stream; int err; stream.next_in = (Bytef*)source; stream.avail_in = (uInt)sourceLen; #ifdef MAXSEG_64K /* Check for source > 64K on 16-bit machine: */ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; #endif stream.next_out = dest; stream.avail_out = (uInt)*destLen; if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; stream.opaque = (voidpf)0; err = deflateInit(&stream, level); if (err != Z_OK) return err; err = deflate(&stream, Z_FINISH); if (err != Z_STREAM_END) { deflateEnd(&stream); return err == Z_OK ? Z_BUF_ERROR : err; } *destLen = stream.total_out; err = deflateEnd(&stream); return err; } /* =========================================================================== */ int ZEXPORT compress (dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; uLong sourceLen; { return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); } /* =========================================================================== If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ uLong ZEXPORT compressBound (sourceLen) uLong sourceLen; { return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; } htmldoc-1.8.27/zlib/adler32.c0100664000212600000240000000435010233324641014262 0ustar mikeuser/* adler32.c -- compute the Adler-32 checksum of a data stream * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id: adler32.c 1403 2005-04-26 02:38:25Z mike $ */ #define ZLIB_INTERNAL #include "zlib.h" #define BASE 65521UL /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ #define DO1(buf,i) {s1 += buf[i]; s2 += s1;} #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); #define DO16(buf) DO8(buf,0); DO8(buf,8); #ifdef NO_DIVIDE # define MOD(a) \ do { \ if (a >= (BASE << 16)) a -= (BASE << 16); \ if (a >= (BASE << 15)) a -= (BASE << 15); \ if (a >= (BASE << 14)) a -= (BASE << 14); \ if (a >= (BASE << 13)) a -= (BASE << 13); \ if (a >= (BASE << 12)) a -= (BASE << 12); \ if (a >= (BASE << 11)) a -= (BASE << 11); \ if (a >= (BASE << 10)) a -= (BASE << 10); \ if (a >= (BASE << 9)) a -= (BASE << 9); \ if (a >= (BASE << 8)) a -= (BASE << 8); \ if (a >= (BASE << 7)) a -= (BASE << 7); \ if (a >= (BASE << 6)) a -= (BASE << 6); \ if (a >= (BASE << 5)) a -= (BASE << 5); \ if (a >= (BASE << 4)) a -= (BASE << 4); \ if (a >= (BASE << 3)) a -= (BASE << 3); \ if (a >= (BASE << 2)) a -= (BASE << 2); \ if (a >= (BASE << 1)) a -= (BASE << 1); \ if (a >= BASE) a -= BASE; \ } while (0) #else # define MOD(a) a %= BASE #endif /* ========================================================================= */ uLong ZEXPORT adler32(adler, buf, len) uLong adler; const Bytef *buf; uInt len; { unsigned long s1 = adler & 0xffff; unsigned long s2 = (adler >> 16) & 0xffff; int k; if (buf == Z_NULL) return 1L; while (len > 0) { k = len < NMAX ? (int)len : NMAX; len -= k; while (k >= 16) { DO16(buf); buf += 16; k -= 16; } if (k != 0) do { s1 += *buf++; s2 += s1; } while (--k); MOD(s1); MOD(s2); } return (s2 << 16) | s1; } htmldoc-1.8.27/zlib/Makefile0100664000212600000240000000325510124711246014325 0ustar mikeuser# # "$Id: Makefile 1334 2004-09-24 03:21:10Z mike $" # # ZIP library Makefile for the HTMLDOC software. # # Makefile copyright 1997-2001 by Easy Software Products, all rights # reserved. # ZIP library copyright 1995-1998 Jean-loup Gailly. # For conditions of distribution and use, see copyright notice in zlib.h # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "LICENSE.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: HTMLDOC Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # include ../Makedefs # # Object files... # OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o \ trees.o zutil.o inflate.o inftrees.o inffast.o # # Make all targets... # all: libz.a # # Clean all targets and object files... # clean: $(RM) $(OBJS) $(RM) libz.a # # libz.a # libz.a: $(OBJS) echo Archiving $@... $(RM) $@ $(AR) $(ARFLAGS) $@ $(OBJS) $(RANLIB) $@ $(OBJS): zlib.h zconf.h ../Makedefs crc32.o: zutil.h crc32.h gzio.o: zutil.h deflate.o: deflate.h zutil.h trees.o: deflate.h zutil.h trees.h zutil.o: zutil.h inflate.o: zutil.h inftrees.h inflate.h inffast.h inffixed.h inftrees.o: zutil.h inftrees.h inffast.o: zutil.h inftrees.h inflate.h inffast.h # # End of "$Id: Makefile 1334 2004-09-24 03:21:10Z mike $". # htmldoc-1.8.27/htmldoc.eula0100664000212600000240000001654310130761203014226 0ustar mikeuser HTMLDOC END-USER LICENSE AGREEMENT PLEASE READ THIS DOCUMENT CAREFULLY. THIS IS A LEGAL AGREEMENT BETWEEN YOU AND EASY SOFTWARE PRODUCTS ("ESP"). BY INSTALLING THIS PACKAGE, AND USING THE HTMLDOC SOFTWARE AND DOCUMENTATION ("SOFTWARE") CONTAINED IN THIS PACKAGE, YOU ARE AGREEING TO BECOME BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT. THIS AGREEMENT REPRESENTS THE ENTIRE AND SOLE AGREEMENT CONCERNING THE ESP SOFTWARE, AND IT SUPERSEDES ANY PRIOR PROPOSAL, REPRESENTATION OR UNDERSTANDING REGARDING THE SOFTWARE BETWEEN YOU AND ESP OR ANY OTHER PARTY. IF YOU (hereafter in this document referred to as "LICENSEE") ARE NOT WILLING TO BE BOUND BY THE TERMS OF THIS LICENSE AGREEMENT, PLEASE DO NOT INSTALL OR USE THIS SOFTWARE. TERMS AND CONDITIONS OF SOFTWARE LICENSE 1. GRANT OF LICENSE; USE RESTRICTIONS. In consideration for the payment of a license fee, ESP grants to LICENSEE a personal, nontransferable (except as provided below) and nonexclusive right to use the SOFTWARE on one (1) computer system, solely for LICENSEE's internal business purposes. LICENSEE agrees that it shall not reverse compile or disassemble any portion of the SOFTWARE not already provided by ESP in source code form. 2. OWNERSHIP OF SOFTWARE. LICENSEE agrees that no title to the SOFTWARE, or the intellectual property in any of the SOFTWARE, or in any SOFTWARE copy, is transferred to LICENSEE, and that all rights not expressly granted to LICENSEE hereunder are reserved by ESP. This license is not a sale of the original SOFTWARE or any copy thereof. 3. TRANSFER RESTRICTIONS. If LICENSEE transfers ownership, or otherwise disposes, of a computer system for which a license for the SOFTWARE was purchased, provided that the transferee agrees to accept the terms and conditions of this AGREEMENT, LICENSEE may transfer the SOFTWARE and all licenses and rights in SOFTWARE granted under this AGREEMENT to such transferee, provided that all SOFTWARE copies are also transferred. 4. DISCLOSURE RESTRICTIONS. LICENSEE agrees to not disclose or otherwise disseminate software licensing information, including the so-called "license key" provided to LICENSEE by ESP, to third parties other than ESP or its official distributors. Should LICENSEE violate this restriction, LICENSEE shall comply with the termination clause of this license and pay a penalty fee of $1000 US per offense or $100,000 US, whichever is greater. This restriction does not apply if the license is being transferred according to the rules in paragraph 3. 5. TERMINATION. If licensee fails to fulfill any of LICENSEE's material obligations under this AGREEMENT, ESP may, at any time thereafter, and in addition to any other available remedies, terminate this AGREEMENT and all licenses and rights granted to LICENSEE under this AGREEMENT. Upon termination of this AGREEMENT, LICENSEE shall, within thirty (30) days after termination, deliver to ESP all removable media and documentation containing the SOFTWARE, and shall render unusable all copies of the SOFTWARE placed in any storage apparatus. 6. GOVERNING LAW. This License is governed by the laws of the State of Maryland, U.S.A., excluding choice of law rules. If any part of this License is found to be in conflict with the law, that part shall be interpreted in its broadest meaning consistent with the law, and no other parts of the License shall be affected. 7. U.S. GOVERNMENT USERS. This SOFTWARE is provided with RESTRICTED RIGHTS. If you are a unit or agency of the United States Government or are acquiring the Software for any such unit or agency, the following applies: If the unit or agency is the Department of Defense ("DOD"), the SOFTWARE and its documentation are classified as "commercial computer software" and "commercial computer software documentation" respectively and, pursuant to DFAR Section 227.7202, the Government is acquiring the SOFTWARE and its documentation in accordance with the terms of this License. If the unit or agency is other than DOD, the SOFTWARE and its documentation are classified as "commercial computer software" and "commercial computer software documentation" respectively and, pursuant to FAR Section 12.212, the Government is acquiring the SOFTWARE and its documentation in accordance with the terms of this License. LIMITED WARRANTY AND DISCLAIMER OF WARRANTY; LIMITATION OF LIABILITY ESP warrants that it has the authority and right to license the SOFTWARE, and that the SOFTWARE will conform to the material printed specifications therefore which are in effect on the date of original delivery of such SOFTWARE. ESP's warranty and obligation shall extend for a period of ninety (90) days after the date of the original delivery of SOFTWARE to LICENSEE by ESP, and is solely for the benefit of LICENSEE, who has no authority to assign or pass through this warranty to any other person or entity. Except as provided in this Section, the SOFTWARE is provided to LICENSEE on an "AS IS" basis, and ESP makes no other warranty of any kind, express or implied, with regard to the SOFTWARE licensed hereunder. ESP warrants that the SOFTWARE properly processes date and time information between the years 1970 and 2038. ESP does not warrant or represent that the SOFTWARE will operate uninterrupted or error free or that all defects in the SOFTWARE are correctable or will be corrected. This warranty shall not apply if SOFTWARE is used other than in accordance with ESP's written instructions, or if any of LICENSEE's hardware equipment or other software malfunctions. ESP's entire liability and LICENSEE's exclusive remedy for any defects in the SOFTWARE shall be to obtain ESP's SOFTWARE updates via the Internet or pay a media update fee for each copy of the SOFTWARE. THE FORGOING WARRANTIES ARE IN LIEU OF, AND ESP DISCLAIMS, ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow the exclusion of implied warranties, so the exclusion above may not apply to LICENSEE. This warranty gives LICENSEE specific legal rights, and LICENSEE may have other rights which vary from state to state. IN NO EVENT SHALL ESP OR ESP'S LICENSORS BE LIABLE TO LICENSEE FOR ANY SPECIAL, CONSEQUENTIAL, INCIDENTAL OR INDIRECT DAMAGES OF ANY KIND (INCLUDING WITHOUT LIMITATION LOSS OF PROFITS OR DATA AND PERSONAL INJURY), WHETHER OR NOT ESP HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ARISING OUT OF THIS AGREEMENT. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY LIMITED REMEDY. In no event will ESP be liable for any claim against LICENSEE by a third party, and LICENSEE hereby agrees to indemnify and hold ESP harmless for any claims for cost, damage, expense or liability arising out of or in connection with the installation, use and performance of the SOFTWARE licensed hereunder, whether alone or in combination with any other product or service. Some states do not allow the limitation or exclusion of liability for incidental or consequential damages, so the limitation above may not apply to LICENSEE. htmldoc-1.8.27/fonts/0040775000212600000240000000000010464177315013066 5ustar mikeuserhtmldoc-1.8.27/fonts/Symbol.afm0100664000212600000240000002267007477306250015026 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright URW Software, Copyright 1997 by URW Comment Creation Date: 10/21/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Symbol FullName Symbol FamilyName Symbol Weight Regular ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -229 UnderlineThickness 46 Version 001.005 Notice URW Software, Copyright 1997 by URW EncodingScheme FontSpecific FontBBox -180 -293 1090 1010 CapHeight 673 XHeight 500 Descender -222 Ascender 673 StartCharMetrics 190 C 32 ; WX 250 ; N space ; B 0 0 0 0 ; C 33 ; WX 333 ; N exclam ; B 128 -13 240 686 ; C 34 ; WX 713 ; N universal ; B 31 0 681 673 ; C 35 ; WX 500 ; N numbersign ; B 20 0 481 631 ; C 36 ; WX 549 ; N existential ; B 25 0 478 673 ; C 37 ; WX 833 ; N percent ; B 63 -7 771 673 ; C 38 ; WX 778 ; N ampersand ; B 41 -13 750 675 ; C 39 ; WX 439 ; N suchthat ; B 48 -13 414 503 ; C 40 ; WX 333 ; N parenleft ; B 53 -172 300 680 ; C 41 ; WX 333 ; N parenright ; B 30 -172 277 680 ; C 42 ; WX 500 ; N asteriskmath ; B 65 127 427 546 ; C 43 ; WX 549 ; N plus ; B 10 0 539 533 ; C 44 ; WX 250 ; N comma ; B 56 -120 194 102 ; C 45 ; WX 549 ; N minus ; B 11 239 535 294 ; C 46 ; WX 250 ; N period ; B 69 -13 181 100 ; C 47 ; WX 278 ; N slash ; B 0 0 254 673 ; C 48 ; WX 500 ; N zero ; B 23 -13 471 686 ; C 49 ; WX 500 ; N one ; B 117 0 390 673 ; C 50 ; WX 500 ; N two ; B 25 0 475 686 ; C 51 ; WX 500 ; N three ; B 39 -13 435 686 ; C 52 ; WX 500 ; N four ; B 16 0 469 680 ; C 53 ; WX 500 ; N five ; B 29 -13 443 699 ; C 54 ; WX 500 ; N six ; B 36 -13 468 685 ; C 55 ; WX 500 ; N seven ; B 24 -7 448 673 ; C 56 ; WX 500 ; N eight ; B 54 -13 440 686 ; C 57 ; WX 500 ; N nine ; B 31 -13 460 686 ; C 58 ; WX 278 ; N colon ; B 81 -13 193 463 ; C 59 ; WX 278 ; N semicolon ; B 83 -120 221 463 ; C 60 ; WX 549 ; N less ; B 26 0 523 522 ; C 61 ; WX 549 ; N equal ; B 11 142 537 391 ; C 62 ; WX 549 ; N greater ; B 26 0 523 522 ; C 63 ; WX 444 ; N question ; B 70 -13 412 686 ; C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ; C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ; C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ; C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ; C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ; C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ; C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ; C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ; C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ; C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ; C 74 ; WX 631 ; N theta1 ; B 18 -13 623 686 ; C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ; C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ; C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ; C 78 ; WX 722 ; N Nu ; B 29 0 720 673 ; C 79 ; WX 722 ; N Omicron ; B 41 -13 715 686 ; C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ; C 81 ; WX 741 ; N Theta ; B 41 -13 715 686 ; C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ; C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ; C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ; C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ; C 86 ; WX 439 ; N sigma1 ; B 40 -222 436 513 ; C 87 ; WX 768 ; N Omega ; B 34 0 736 686 ; C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ; C 89 ; WX 795 ; N Psi ; B 15 0 781 686 ; C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ; C 91 ; WX 333 ; N bracketleft ; B 86 -165 299 673 ; C 92 ; WX 863 ; N therefore ; B 163 -13 701 433 ; C 93 ; WX 333 ; N bracketright ; B 33 -165 246 673 ; C 94 ; WX 658 ; N perpendicular ; B 15 0 652 673 ; C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ; C 96 ; WX 500 ; N radicalex ; B 480 857 1090 913 ; C 97 ; WX 631 ; N alpha ; B 41 -13 622 513 ; C 98 ; WX 549 ; N beta ; B 61 -222 515 740 ; C 99 ; WX 549 ; N chi ; B 12 -210 522 513 ; C 100 ; WX 494 ; N delta ; B 40 -13 481 740 ; C 101 ; WX 439 ; N epsilon ; B 22 -13 427 513 ; C 102 ; WX 521 ; N phi ; B 27 -222 490 686 ; C 103 ; WX 411 ; N gamma ; B 5 -219 484 513 ; C 104 ; WX 603 ; N eta ; B 0 -222 527 513 ; C 105 ; WX 329 ; N iota ; B 0 -13 301 513 ; C 106 ; WX 603 ; N phi1 ; B 36 -222 587 513 ; C 107 ; WX 549 ; N kappa ; B 33 0 558 513 ; C 108 ; WX 549 ; N lambda ; B 24 -13 548 740 ; C 109 ; WX 576 ; N mu ; B 33 -219 567 500 ; C 110 ; WX 521 ; N nu ; B -9 -13 475 513 ; C 111 ; WX 549 ; N omicron ; B 35 -13 501 513 ; C 112 ; WX 549 ; N pi ; B 10 -13 530 500 ; C 113 ; WX 521 ; N theta ; B 43 -13 485 686 ; C 114 ; WX 549 ; N rho ; B 50 -220 490 513 ; C 115 ; WX 603 ; N sigma ; B 30 -13 588 500 ; C 116 ; WX 439 ; N tau ; B 10 -13 418 500 ; C 117 ; WX 576 ; N upsilon ; B 7 -13 535 513 ; C 118 ; WX 713 ; N omega1 ; B 12 -13 671 583 ; C 119 ; WX 686 ; N omega ; B 42 -13 684 513 ; C 120 ; WX 493 ; N xi ; B 27 -222 469 766 ; C 121 ; WX 686 ; N psi ; B 12 -222 701 513 ; C 122 ; WX 494 ; N zeta ; B 60 -222 467 756 ; C 123 ; WX 480 ; N braceleft ; B 58 -165 397 673 ; C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ; C 125 ; WX 480 ; N braceright ; B 79 -165 418 673 ; C 126 ; WX 549 ; N similar ; B 17 196 529 325 ; C 160 ; WX 762 ; N Euro ; B 53 -4 722 671 ; C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 687 ; C 162 ; WX 247 ; N minute ; B 27 476 228 735 ; C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ; C 164 ; WX 167 ; N fraction ; B -180 0 340 673 ; C 165 ; WX 713 ; N infinity ; B 26 115 688 414 ; C 166 ; WX 500 ; N florin ; B 2 -174 494 687 ; C 167 ; WX 753 ; N club ; B 86 -26 660 544 ; C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ; C 169 ; WX 753 ; N heart ; B 117 -33 631 528 ; C 170 ; WX 753 ; N spade ; B 113 -36 629 591 ; C 171 ; WX 1042 ; N arrowboth ; B 24 -16 1024 512 ; C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ; C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ; C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ; C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ; C 176 ; WX 400 ; N degree ; B 50 380 350 686 ; C 177 ; WX 549 ; N plusminus ; B 10 0 539 662 ; C 178 ; WX 411 ; N second ; B 20 476 413 735 ; C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ; C 180 ; WX 549 ; N multiply ; B 17 9 533 525 ; C 181 ; WX 713 ; N proportional ; B 27 114 639 416 ; C 182 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ; C 183 ; WX 460 ; N bullet ; B 50 155 410 518 ; C 184 ; WX 549 ; N divide ; B 10 2 536 525 ; C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ; C 186 ; WX 549 ; N equivalence ; B 14 87 538 446 ; C 187 ; WX 549 ; N approxequal ; B 14 121 527 408 ; C 188 ; WX 1000 ; N ellipsis ; B 111 -13 889 100 ; C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ; C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ; C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ; C 192 ; WX 823 ; N aleph ; B 175 0 662 689 ; C 193 ; WX 686 ; N Ifraktur ; B 10 -54 578 736 ; C 194 ; WX 795 ; N Rfraktur ; B 26 -16 759 730 ; C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 574 ; C 196 ; WX 768 ; N circlemultiply ; B 43 0 733 691 ; C 197 ; WX 768 ; N circleplus ; B 43 0 733 689 ; C 198 ; WX 823 ; N emptyset ; B 39 -24 781 718 ; C 199 ; WX 768 ; N intersection ; B 40 0 732 507 ; C 200 ; WX 768 ; N union ; B 40 -18 732 489 ; C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ; C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ; C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ; C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ; C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ; C 206 ; WX 713 ; N element ; B 45 0 505 470 ; C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ; C 208 ; WX 768 ; N angle ; B 26 -1 738 672 ; C 209 ; WX 713 ; N gradient ; B 36 0 681 687 ; C 210 ; WX 790 ; N registerserif ; B 50 -13 740 690 ; C 211 ; WX 790 ; N copyrightserif ; B 51 -13 741 690 ; C 212 ; WX 890 ; N trademarkserif ; B 18 269 855 673 ; C 213 ; WX 823 ; N product ; B 25 -124 803 751 ; C 214 ; WX 549 ; N radical ; B 10 -35 515 913 ; C 215 ; WX 250 ; N dotmath ; B 69 209 169 311 ; C 216 ; WX 713 ; N logicalnot ; B 15 40 680 367 ; C 217 ; WX 603 ; N logicaland ; B 23 -1 583 476 ; C 218 ; WX 603 ; N logicalor ; B 30 -1 578 476 ; C 219 ; WX 1042 ; N arrowdblboth ; B 27 -19 1023 506 ; C 220 ; WX 987 ; N arrowdblleft ; B 30 -19 939 506 ; C 221 ; WX 603 ; N arrowdblup ; B 39 0 567 909 ; C 222 ; WX 987 ; N arrowdblright ; B 45 -19 954 506 ; C 223 ; WX 603 ; N arrowdbldown ; B 44 0 572 909 ; C 224 ; WX 494 ; N lozenge ; B 18 -1 466 740 ; C 225 ; WX 329 ; N angleleft ; B 25 -152 306 757 ; C 226 ; WX 790 ; N registersans ; B 50 -12 740 679 ; C 227 ; WX 790 ; N copyrightsans ; B 49 -12 739 679 ; C 228 ; WX 786 ; N trademarksans ; B 5 277 725 673 ; C 229 ; WX 713 ; N summation ; B 14 -123 695 752 ; C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ; C 231 ; WX 384 ; N parenleftex ; B 40 -79 92 925 ; C 232 ; WX 384 ; N parenleftbt ; B 40 -293 436 926 ; C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 341 926 ; C 234 ; WX 384 ; N bracketleftex ; B 0 -85 55 925 ; C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 340 926 ; C 236 ; WX 494 ; N bracelefttp ; B 201 -75 439 926 ; C 237 ; WX 494 ; N braceleftmid ; B 14 -85 255 935 ; C 238 ; WX 494 ; N braceleftbt ; B 201 -70 439 926 ; C 239 ; WX 494 ; N braceex ; B 201 -79 255 925 ; C 241 ; WX 329 ; N angleright ; B 21 -152 302 757 ; C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ; C 243 ; WX 686 ; N integraltp ; B 332 -83 715 922 ; C 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ; C 245 ; WX 686 ; N integralbt ; B 39 -81 415 921 ; C 246 ; WX 384 ; N parenrighttp ; B 54 -293 450 926 ; C 247 ; WX 384 ; N parenrightex ; B 398 -70 450 935 ; C 248 ; WX 384 ; N parenrightbt ; B 54 -293 450 926 ; C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 360 926 ; C 250 ; WX 384 ; N bracketrightex ; B 305 -85 360 925 ; C 251 ; WX 384 ; N bracketrightbt ; B 20 -80 360 926 ; C 252 ; WX 494 ; N bracerighttp ; B 17 -75 255 926 ; C 253 ; WX 494 ; N bracerightmid ; B 201 -85 442 935 ; C 254 ; WX 494 ; N bracerightbt ; B 17 -70 255 926 ; C -1 ; WX 250 ; N .notdef ; B 0 0 0 0 ; EndCharMetrics EndFontMetrics htmldoc-1.8.27/fonts/Sans.afm0100664000212600000240000027572210330505373014462 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Sans FullName Sans FamilyName Sans Weight Book Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle 0 IsFixedPitch false UnderlinePosition -213 UnderlineThickness 143 Version 1.15 EncodingScheme ISO10646-1 FontBBox -184 -505 1352 1037 CapHeight 729 XHeight 546 Ascender 759 Descender -208 StartCharMetrics 823 C 0 ; WX 600 ; N .notdef ; B 49 -177 550 706 ; C 32 ; WX 317 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 400 ; N exclam ; B 150 0 250 730 ; C 34 ; WX 459 ; N quotedbl ; B 96 458 364 730 ; C 35 ; WX 837 ; N numbersign ; B 77 0 762 718 ; C 36 ; WX 636 ; N dollar ; B 83 -147 554 760 ; C 37 ; WX 950 ; N percent ; B 55 -15 896 743 ; C 38 ; WX 779 ; N ampersand ; B 62 -15 750 743 ; C 39 ; WX 274 ; N quotesingle ; B 96 458 180 730 ; C 40 ; WX 390 ; N parenleft ; B 85 -132 311 759 ; C 41 ; WX 390 ; N parenright ; B 80 -132 305 759 ; C 42 ; WX 500 ; N asterisk ; B 29 286 471 743 ; C 43 ; WX 837 ; N plus ; B 105 0 732 627 ; C 44 ; WX 317 ; N comma ; B 77 -117 221 125 ; C 45 ; WX 360 ; N hyphen ; B 48 233 313 314 ; C 46 ; WX 317 ; N period ; B 106 0 210 125 ; C 47 ; WX 336 ; N slash ; B 0 -93 337 730 ; C 48 ; WX 636 ; N zero ; B 65 -15 570 743 ; C 49 ; WX 636 ; N one ; B 109 0 544 730 ; C 50 ; WX 636 ; N two ; B 73 0 537 743 ; C 51 ; WX 636 ; N three ; B 76 -15 557 743 ; C 52 ; WX 636 ; N four ; B 48 0 581 730 ; C 53 ; WX 636 ; N five ; B 77 -15 549 730 ; C 54 ; WX 636 ; N six ; B 69 -15 574 743 ; C 55 ; WX 636 ; N seven ; B 82 0 551 730 ; C 56 ; WX 636 ; N eight ; B 67 -15 568 743 ; C 57 ; WX 636 ; N nine ; B 62 -15 566 743 ; C 58 ; WX 336 ; N colon ; B 117 0 221 518 ; C 59 ; WX 336 ; N semicolon ; B 77 -117 221 518 ; C 60 ; WX 837 ; N less ; B 105 45 732 582 ; C 61 ; WX 837 ; N equal ; B 105 171 732 455 ; C 62 ; WX 837 ; N greater ; B 105 45 732 582 ; C 63 ; WX 530 ; N question ; B 71 0 461 743 ; C 64 ; WX 1000 ; N at ; B 65 -174 931 705 ; C 65 ; WX 684 ; N A ; B 7 0 676 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 686 ; N B ; B 98 0 616 730 ; C 67 ; WX 698 ; N C ; B 56 -15 645 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 770 ; N D ; B 98 0 711 730 ; L zcaron uni01C5 ; L Zcaron uni01C4 ; L uni030C Dcaron ; C 69 ; WX 631 ; N E ; B 98 0 568 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 575 ; N F ; B 98 0 518 730 ; C 71 ; WX 774 ; N G ; B 56 -15 693 743 ; L uni0306 Gbreve ; C 72 ; WX 751 ; N H ; B 98 0 654 730 ; C 73 ; WX 294 ; N I ; B 98 0 197 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 294 ; N J ; B -52 -201 197 730 ; C 75 ; WX 655 ; N K ; B 98 0 677 730 ; C 76 ; WX 557 ; N L ; B 98 0 552 730 ; L j uni01C8 ; L J uni01C7 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 862 ; N M ; B 98 0 766 730 ; C 78 ; WX 748 ; N N ; B 98 0 650 730 ; L j uni01CB ; L J uni01CA ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 787 ; N O ; B 56 -15 731 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 603 ; N P ; B 98 0 569 730 ; C 81 ; WX 787 ; N Q ; B 56 -129 731 743 ; C 82 ; WX 694 ; N R ; B 98 0 667 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 634 ; N S ; B 65 -15 580 743 ; L uni030C Scaron ; C 84 ; WX 610 ; N T ; B -3 0 614 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 731 ; N U ; B 86 -15 646 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 684 ; N V ; B 7 0 676 730 ; C 87 ; WX 988 ; N W ; B 33 0 957 730 ; C 88 ; WX 685 ; N X ; B 29 0 654 730 ; C 89 ; WX 610 ; N Y ; B -2 0 613 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 685 ; N Z ; B 44 0 641 730 ; L uni030C Zcaron ; C 91 ; WX 390 ; N bracketleft ; B 85 -132 293 760 ; C 92 ; WX 336 ; N backslash ; B 0 -93 337 730 ; C 93 ; WX 390 ; N bracketright ; B 97 -132 305 760 ; C 94 ; WX 837 ; N asciicircum ; B 105 457 732 730 ; C 95 ; WX 500 ; N underscore ; B -10 -236 510 -166 ; C 96 ; WX 500 ; N grave ; B 83 617 317 800 ; C 97 ; WX 612 ; N a ; B 60 -15 522 561 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 634 ; N b ; B 90 -15 581 760 ; C 99 ; WX 549 ; N c ; B 55 -15 488 561 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 634 ; N d ; B 55 -15 544 760 ; L zcaron uni01C6 ; L uni030C dcaron ; C 101 ; WX 615 ; N e ; B 55 -15 563 561 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 352 ; N f ; B 22 0 372 760 ; L l fl ; L i fi ; C 103 ; WX 634 ; N g ; B 55 -209 544 561 ; L uni0306 gbreve ; C 104 ; WX 633 ; N h ; B 90 0 549 760 ; C 105 ; WX 277 ; N i ; B 94 0 185 760 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 277 ; N j ; B -19 -209 185 760 ; C 107 ; WX 579 ; N k ; B 90 0 577 760 ; C 108 ; WX 277 ; N l ; B 94 0 185 760 ; L j uni01C9 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 974 ; N m ; B 90 0 890 561 ; C 110 ; WX 633 ; N n ; B 90 0 549 561 ; L j uni01CC ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 611 ; N o ; B 55 -15 558 561 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 634 ; N p ; B 90 -209 581 561 ; C 113 ; WX 634 ; N q ; B 55 -209 544 561 ; C 114 ; WX 411 ; N r ; B 90 0 412 561 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 520 ; N s ; B 54 -15 473 561 ; L uni030C scaron ; C 116 ; WX 392 ; N t ; B 26 0 369 703 ; L uni030C tcaron ; C 117 ; WX 633 ; N u ; B 84 -15 543 547 ; L uni030C uni01D4 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 591 ; N v ; B 29 0 563 547 ; C 119 ; WX 817 ; N w ; B 41 0 776 547 ; C 120 ; WX 591 ; N x ; B 28 0 560 547 ; C 121 ; WX 591 ; N y ; B 29 -209 563 547 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 524 ; N z ; B 42 0 482 547 ; L uni030C zcaron ; C 123 ; WX 636 ; N braceleft ; B 125 -164 512 760 ; C 124 ; WX 336 ; N bar ; B 126 -236 210 765 ; C 125 ; WX 636 ; N braceright ; B 125 -164 512 760 ; C 126 ; WX 837 ; N asciitilde ; B 105 228 732 399 ; C 160 ; WX 636 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 400 ; N exclamdown ; B 150 0 250 730 ; C 162 ; WX 636 ; N cent ; B 83 -153 518 700 ; C 163 ; WX 636 ; N sterling ; B 62 0 548 743 ; C 164 ; WX 636 ; N currency ; B 45 40 592 587 ; C 165 ; WX 636 ; N yen ; B 40 0 596 730 ; C 166 ; WX 336 ; N brokenbar ; B 126 -171 210 700 ; C 167 ; WX 500 ; N section ; B 44 -96 455 743 ; C 168 ; WX 500 ; N dieresis ; B 104 659 396 758 ; C 169 ; WX 1000 ; N copyright ; B 138 0 862 726 ; C 170 ; WX 471 ; N ordfeminine ; B 56 229 404 743 ; C 171 ; WX 611 ; N guillemotleft ; B 77 68 519 518 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 421 ; C 173 ; WX 360 ; N sfthyphen ; B 48 233 313 314 ; C 174 ; WX 1000 ; N registered ; B 138 0 862 726 ; C 175 ; WX 500 ; N macron ; B 104 672 396 746 ; C 176 ; WX 500 ; N degree ; B 95 432 405 743 ; C 177 ; WX 837 ; N plusminus ; B 105 0 732 627 ; C 178 ; WX 400 ; N twosuperior ; B 45 326 338 743 ; C 179 ; WX 400 ; N threesuperior ; B 47 318 351 743 ; C 180 ; WX 500 ; N acute ; B 181 616 416 800 ; C 181 ; WX 636 ; N mu ; B 84 -209 612 547 ; C 182 ; WX 636 ; N paragraph ; B 77 -97 528 730 ; C 183 ; WX 317 ; N periodcentered ; B 106 285 210 410 ; C 184 ; WX 500 ; N cedilla ; B 142 -193 345 0 ; C 185 ; WX 400 ; N onesuperior ; B 66 326 347 734 ; C 186 ; WX 471 ; N ordmasculine ; B 46 229 424 743 ; C 187 ; WX 611 ; N guillemotright ; B 94 68 536 518 ; C 188 ; WX 969 ; N onequarter ; B 66 -15 938 743 ; C 189 ; WX 969 ; N onehalf ; B 66 -15 906 743 ; C 190 ; WX 969 ; N threequarters ; B 47 -15 938 743 ; C 191 ; WX 530 ; N questiondown ; B 69 -15 459 730 ; C 192 ; WX 684 ; N Agrave ; B 7 0 676 928 ; C 193 ; WX 684 ; N Aacute ; B 7 0 676 928 ; C 194 ; WX 684 ; N Acircumflex ; B 7 0 676 929 ; C 195 ; WX 684 ; N Atilde ; B 7 0 676 921 ; C 196 ; WX 684 ; N Adieresis ; B 7 0 676 914 ; C 197 ; WX 684 ; N Aring ; B 7 0 676 929 ; C 198 ; WX 974 ; N AE ; B 3 0 911 730 ; C 199 ; WX 698 ; N Ccedilla ; B 56 -193 645 743 ; C 200 ; WX 631 ; N Egrave ; B 98 0 568 928 ; C 201 ; WX 631 ; N Eacute ; B 98 0 568 928 ; C 202 ; WX 631 ; N Ecircumflex ; B 98 0 568 929 ; C 203 ; WX 631 ; N Edieresis ; B 98 0 568 914 ; C 204 ; WX 294 ; N Igrave ; B 28 0 216 928 ; C 205 ; WX 294 ; N Iacute ; B 79 0 266 928 ; C 206 ; WX 294 ; N Icircumflex ; B -1 0 297 929 ; C 207 ; WX 294 ; N Idieresis ; B 2 0 293 914 ; C 208 ; WX 774 ; N Eth ; B 4 0 716 730 ; C 209 ; WX 748 ; N Ntilde ; B 98 0 650 921 ; C 210 ; WX 787 ; N Ograve ; B 56 -15 731 928 ; C 211 ; WX 787 ; N Oacute ; B 56 -15 731 928 ; C 212 ; WX 787 ; N Ocircumflex ; B 56 -15 731 929 ; C 213 ; WX 787 ; N Otilde ; B 56 -15 731 921 ; C 214 ; WX 787 ; N Odieresis ; B 56 -15 731 914 ; C 215 ; WX 837 ; N multiply ; B 137 30 702 597 ; C 216 ; WX 787 ; N Oslash ; B 49 -35 737 762 ; C 217 ; WX 731 ; N Ugrave ; B 86 -15 646 928 ; C 218 ; WX 731 ; N Uacute ; B 86 -15 646 928 ; C 219 ; WX 731 ; N Ucircumflex ; B 86 -15 646 929 ; C 220 ; WX 731 ; N Udieresis ; B 86 -15 646 914 ; C 221 ; WX 610 ; N Yacute ; B -2 0 613 928 ; C 222 ; WX 604 ; N Thorn ; B 98 0 569 730 ; C 223 ; WX 629 ; N germandbls ; B 90 -15 584 760 ; C 224 ; WX 612 ; N agrave ; B 60 -15 522 800 ; C 225 ; WX 612 ; N aacute ; B 60 -15 522 800 ; C 226 ; WX 612 ; N acircumflex ; B 60 -15 522 800 ; C 227 ; WX 612 ; N atilde ; B 60 -15 522 777 ; C 228 ; WX 612 ; N adieresis ; B 60 -15 522 758 ; C 229 ; WX 612 ; N aring ; B 60 -15 522 878 ; C 230 ; WX 981 ; N ae ; B 60 -15 930 561 ; C 231 ; WX 549 ; N ccedilla ; B 55 -193 488 561 ; C 232 ; WX 615 ; N egrave ; B 55 -15 563 800 ; C 233 ; WX 615 ; N eacute ; B 55 -15 563 800 ; C 234 ; WX 615 ; N ecircumflex ; B 55 -15 563 800 ; C 235 ; WX 615 ; N edieresis ; B 55 -15 563 758 ; C 236 ; WX 277 ; N igrave ; B -28 0 207 800 ; C 237 ; WX 277 ; N iacute ; B 70 0 305 800 ; C 238 ; WX 277 ; N icircumflex ; B -17 0 295 800 ; C 239 ; WX 277 ; N idieresis ; B -6 0 285 758 ; C 240 ; WX 611 ; N eth ; B 55 -15 558 760 ; C 241 ; WX 633 ; N ntilde ; B 90 0 549 777 ; C 242 ; WX 611 ; N ograve ; B 55 -15 558 800 ; C 243 ; WX 611 ; N oacute ; B 55 -15 558 800 ; C 244 ; WX 611 ; N ocircumflex ; B 55 -15 558 800 ; C 245 ; WX 611 ; N otilde ; B 55 -15 558 777 ; C 246 ; WX 611 ; N odieresis ; B 55 -15 558 758 ; C 247 ; WX 837 ; N divide ; B 105 73 732 555 ; C 248 ; WX 611 ; N oslash ; B 35 -46 577 592 ; C 249 ; WX 633 ; N ugrave ; B 84 -15 543 800 ; C 250 ; WX 633 ; N uacute ; B 84 -15 543 800 ; C 251 ; WX 633 ; N ucircumflex ; B 84 -15 543 800 ; C 252 ; WX 633 ; N udieresis ; B 84 -15 543 758 ; C 253 ; WX 591 ; N yacute ; B 29 -209 563 800 ; C 254 ; WX 634 ; N thorn ; B 90 -209 581 760 ; C 255 ; WX 591 ; N ydieresis ; B 29 -209 563 758 ; C -1 ; WX 684 ; N Amacron ; B 7 0 676 899 ; C -1 ; WX 612 ; N amacron ; B 60 -15 522 746 ; C -1 ; WX 684 ; N Abreve ; B 7 0 676 947 ; C -1 ; WX 612 ; N abreve ; B 60 -15 522 766 ; C -1 ; WX 684 ; N Aogonek ; B 7 -193 706 730 ; C -1 ; WX 612 ; N aogonek ; B 60 -193 563 561 ; C -1 ; WX 698 ; N Cacute ; B 56 -15 645 928 ; C -1 ; WX 549 ; N cacute ; B 55 -15 488 800 ; C -1 ; WX 698 ; N Ccircumflex ; B 56 -15 645 929 ; C -1 ; WX 549 ; N ccircumflex ; B 55 -15 488 800 ; C -1 ; WX 698 ; N Cdotaccent ; B 56 -15 645 915 ; C -1 ; WX 549 ; N cdotaccent ; B 55 -15 488 758 ; C -1 ; WX 698 ; N Ccaron ; B 56 -15 645 929 ; C -1 ; WX 549 ; N ccaron ; B 55 -15 488 800 ; C -1 ; WX 770 ; N Dcaron ; B 98 0 711 938 ; C -1 ; WX 634 ; N dcaron ; B 55 -15 732 760 ; C -1 ; WX 774 ; N Dcroat ; B 4 0 716 730 ; C -1 ; WX 634 ; N dcroat ; B 55 -15 620 760 ; C -1 ; WX 631 ; N Emacron ; B 98 0 568 900 ; C -1 ; WX 615 ; N emacron ; B 55 -15 563 746 ; C -1 ; WX 631 ; N Ebreve ; B 98 0 568 929 ; C -1 ; WX 615 ; N ebreve ; B 55 -15 563 786 ; C -1 ; WX 631 ; N Edotaccent ; B 98 0 568 915 ; C -1 ; WX 615 ; N edotaccent ; B 55 -15 563 758 ; C -1 ; WX 631 ; N Eogonek ; B 98 -193 569 730 ; C -1 ; WX 615 ; N eogonek ; B 55 -193 563 561 ; C -1 ; WX 631 ; N Ecaron ; B 98 0 568 926 ; C -1 ; WX 615 ; N ecaron ; B 55 -15 563 798 ; C -1 ; WX 774 ; N Gcircumflex ; B 56 -15 693 929 ; C -1 ; WX 634 ; N gcircumflex ; B 55 -209 544 800 ; C -1 ; WX 774 ; N Gbreve ; B 56 -15 693 929 ; C -1 ; WX 634 ; N gbreve ; B 55 -209 544 786 ; C -1 ; WX 774 ; N Gdotaccent ; B 56 -15 693 915 ; C -1 ; WX 634 ; N gdotaccent ; B 55 -209 544 758 ; C -1 ; WX 774 ; N Gcommaaccent ; B 56 -230 693 743 ; C -1 ; WX 634 ; N gcommaaccent ; B 55 -209 544 776 ; C -1 ; WX 751 ; N Hcircumflex ; B 98 0 654 929 ; C -1 ; WX 633 ; N hcircumflex ; B -14 0 549 929 ; C -1 ; WX 916 ; N Hbar ; B 98 0 818 730 ; C -1 ; WX 694 ; N hbar ; B 58 0 578 760 ; C -1 ; WX 294 ; N Itilde ; B -14 0 309 921 ; C -1 ; WX 277 ; N itilde ; B -22 0 301 777 ; C -1 ; WX 294 ; N Imacron ; B 1 0 294 899 ; C -1 ; WX 277 ; N imacron ; B -7 0 286 745 ; C -1 ; WX 294 ; N Ibreve ; B -6 0 301 929 ; C -1 ; WX 277 ; N ibreve ; B -14 0 292 786 ; C -1 ; WX 294 ; N Iogonek ; B 85 -193 269 730 ; C -1 ; WX 277 ; N iogonek ; B 73 -193 256 760 ; C -1 ; WX 294 ; N Idotaccent ; B 98 0 198 915 ; C -1 ; WX 277 ; N dotlessi ; B 94 0 185 547 ; C -1 ; WX 589 ; N IJ ; B 98 -201 492 730 ; C -1 ; WX 555 ; N ij ; B 94 -209 462 760 ; C -1 ; WX 294 ; N Jcircumflex ; B -52 -201 297 929 ; C -1 ; WX 277 ; N jcircumflex ; B -19 -209 295 800 ; C -1 ; WX 655 ; N Kcommaaccent ; B 98 -216 677 730 ; C -1 ; WX 579 ; N kcommaaccent ; B 90 -216 577 760 ; C -1 ; WX 579 ; N kgreenlandic ; B 90 0 577 547 ; C -1 ; WX 557 ; N Lacute ; B 98 0 552 928 ; C -1 ; WX 292 ; N lacute ; B 94 0 287 928 ; C -1 ; WX 557 ; N Lcommaaccent ; B 98 -216 552 730 ; C -1 ; WX 277 ; N lcommaaccent ; B 67 -216 211 760 ; C -1 ; WX 557 ; N Lcaron ; B 98 0 552 730 ; C -1 ; WX 375 ; N lcaron ; B 94 0 375 760 ; C -1 ; WX 557 ; N Ldot ; B 98 0 552 730 ; C -1 ; WX 341 ; N ldot ; B 94 0 315 760 ; C -1 ; WX 562 ; N Lslash ; B -7 0 558 730 ; C -1 ; WX 284 ; N lslash ; B 0 0 286 760 ; C -1 ; WX 748 ; N Nacute ; B 98 0 650 928 ; C -1 ; WX 633 ; N nacute ; B 90 0 549 804 ; C -1 ; WX 748 ; N Ncommaaccent ; B 98 -216 650 730 ; C -1 ; WX 633 ; N ncommaaccent ; B 90 -216 549 561 ; C -1 ; WX 748 ; N Ncaron ; B 98 0 650 922 ; C -1 ; WX 633 ; N ncaron ; B 90 0 549 800 ; C -1 ; WX 813 ; N napostrophe ; B 100 0 716 730 ; C -1 ; WX 748 ; N Eng ; B 104 -209 645 730 ; C -1 ; WX 633 ; N eng ; B 90 -209 549 561 ; C -1 ; WX 787 ; N Omacron ; B 56 -15 731 899 ; C -1 ; WX 611 ; N omacron ; B 55 -15 558 745 ; C -1 ; WX 787 ; N Obreve ; B 56 -15 731 929 ; C -1 ; WX 611 ; N obreve ; B 55 -15 558 786 ; C -1 ; WX 787 ; N Ohungarumlaut ; B 56 -15 731 928 ; C -1 ; WX 611 ; N ohungarumlaut ; B 55 -15 558 800 ; C -1 ; WX 1069 ; N OE ; B 56 0 1006 730 ; C -1 ; WX 1022 ; N oe ; B 55 -15 971 561 ; C -1 ; WX 694 ; N Racute ; B 98 0 667 928 ; C -1 ; WX 411 ; N racute ; B 90 0 448 804 ; C -1 ; WX 694 ; N Rcommaaccent ; B 98 -216 667 730 ; C -1 ; WX 411 ; N rcommaaccent ; B 64 -216 412 561 ; C -1 ; WX 694 ; N Rcaron ; B 98 0 667 922 ; C -1 ; WX 411 ; N rcaron ; B 90 0 419 800 ; C -1 ; WX 634 ; N Sacute ; B 65 -15 580 928 ; C -1 ; WX 520 ; N sacute ; B 54 -15 473 804 ; C -1 ; WX 634 ; N Scircumflex ; B 65 -15 580 929 ; C -1 ; WX 520 ; N scircumflex ; B 54 -15 473 800 ; C -1 ; WX 634 ; N Scedilla ; B 65 -193 580 743 ; C -1 ; WX 520 ; N scedilla ; B 54 -193 473 561 ; C -1 ; WX 634 ; N Scaron ; B 65 -15 580 929 ; C -1 ; WX 520 ; N scaron ; B 54 -15 473 800 ; C -1 ; WX 610 ; N Tcommaaccent ; B -3 -193 614 730 ; C -1 ; WX 392 ; N tcommaaccent ; B 26 -193 369 703 ; C -1 ; WX 610 ; N Tcaron ; B -3 0 614 922 ; C -1 ; WX 392 ; N tcaron ; B 26 0 375 814 ; C -1 ; WX 610 ; N Tbar ; B -3 0 614 730 ; C -1 ; WX 392 ; N tbar ; B 26 0 369 703 ; C -1 ; WX 731 ; N Utilde ; B 86 -15 646 921 ; C -1 ; WX 633 ; N utilde ; B 84 -15 543 777 ; C -1 ; WX 731 ; N Umacron ; B 86 -15 646 899 ; C -1 ; WX 633 ; N umacron ; B 84 -15 543 745 ; C -1 ; WX 731 ; N Ubreve ; B 86 -15 646 929 ; C -1 ; WX 633 ; N ubreve ; B 84 -15 543 786 ; C -1 ; WX 731 ; N Uring ; B 86 -15 646 1037 ; C -1 ; WX 633 ; N uring ; B 84 -15 543 849 ; C -1 ; WX 731 ; N Uhungarumlaut ; B 86 -15 646 928 ; C -1 ; WX 633 ; N uhungarumlaut ; B 84 -15 546 800 ; C -1 ; WX 731 ; N Uogonek ; B 86 -201 646 730 ; C -1 ; WX 633 ; N uogonek ; B 84 -193 614 547 ; C -1 ; WX 988 ; N Wcircumflex ; B 33 0 957 932 ; C -1 ; WX 817 ; N wcircumflex ; B 41 0 776 804 ; C -1 ; WX 610 ; N Ycircumflex ; B -2 0 613 932 ; C -1 ; WX 591 ; N ycircumflex ; B 29 -209 563 804 ; C -1 ; WX 610 ; N Ydieresis ; B -2 0 613 914 ; C -1 ; WX 685 ; N Zacute ; B 44 0 641 928 ; C -1 ; WX 524 ; N zacute ; B 42 0 482 804 ; C -1 ; WX 685 ; N Zdotaccent ; B 44 0 641 905 ; C -1 ; WX 524 ; N zdotaccent ; B 42 0 482 758 ; C -1 ; WX 685 ; N Zcaron ; B 44 0 641 929 ; C -1 ; WX 524 ; N zcaron ; B 42 0 482 800 ; C -1 ; WX 352 ; N longs ; B 22 0 372 760 ; C -1 ; WX 698 ; N uni0186 ; B 56 -15 645 743 ; C -1 ; WX 636 ; N uni0190 ; B 76 -15 557 743 ; C -1 ; WX 636 ; N florin ; B 15 -209 626 760 ; C -1 ; WX 685 ; N uni0194 ; B 62 -210 639 661 ; C -1 ; WX 1421 ; N uni01C4 ; B 98 0 1352 929 ; C -1 ; WX 1298 ; N uni01C5 ; B 98 0 1211 800 ; C -1 ; WX 1154 ; N uni01C6 ; B 55 -15 1071 800 ; C -1 ; WX 835 ; N uni01C7 ; B 98 -201 768 730 ; C -1 ; WX 786 ; N uni01C8 ; B 98 -209 734 760 ; C -1 ; WX 456 ; N uni01C9 ; B 94 -209 367 760 ; C -1 ; WX 931 ; N uni01CA ; B 98 -201 869 730 ; C -1 ; WX 923 ; N uni01CB ; B 98 -209 840 760 ; C -1 ; WX 797 ; N uni01CC ; B 90 -209 734 760 ; C -1 ; WX 684 ; N uni01CD ; B 7 0 676 929 ; C -1 ; WX 612 ; N uni01CE ; B 60 -15 522 800 ; C -1 ; WX 294 ; N uni01CF ; B -1 0 297 929 ; C -1 ; WX 277 ; N uni01D0 ; B -16 0 296 800 ; C -1 ; WX 787 ; N uni01D1 ; B 56 -15 731 929 ; C -1 ; WX 611 ; N uni01D2 ; B 55 -15 558 800 ; C -1 ; WX 731 ; N uni01D3 ; B 86 -15 646 929 ; C -1 ; WX 633 ; N uni01D4 ; B 84 -15 543 800 ; C -1 ; WX 633 ; N uni01D6 ; B 84 -15 543 899 ; C -1 ; WX 612 ; N uni01DF ; B 60 -15 522 899 ; C -1 ; WX 974 ; N uni01E2 ; B 3 0 911 901 ; C -1 ; WX 981 ; N uni01E3 ; B 60 -15 930 744 ; C -1 ; WX 787 ; N uni01EA ; B 56 -201 731 743 ; C -1 ; WX 611 ; N uni01EB ; B 55 -201 558 561 ; C -1 ; WX 787 ; N uni01EC ; B 56 -201 731 899 ; C -1 ; WX 611 ; N uni01ED ; B 55 -201 558 745 ; C -1 ; WX 634 ; N Scommaaccent ; B 65 -221 580 743 ; C -1 ; WX 520 ; N scommaaccent ; B 54 -221 473 561 ; C -1 ; WX 610 ; N uni021A ; B -3 -221 614 730 ; C -1 ; WX 392 ; N uni021B ; B 26 -221 369 703 ; C -1 ; WX 611 ; N uni022B ; B 55 -15 558 899 ; C -1 ; WX 611 ; N uni022D ; B 55 -15 558 899 ; C -1 ; WX 787 ; N uni022E ; B 56 -15 731 914 ; C -1 ; WX 611 ; N uni022F ; B 55 -15 558 758 ; C -1 ; WX 611 ; N uni0231 ; B 55 -15 558 899 ; C -1 ; WX 610 ; N uni0232 ; B -2 0 613 899 ; C -1 ; WX 591 ; N uni0233 ; B 29 -209 563 745 ; C -1 ; WX 277 ; N dotlessj ; B -19 -209 185 547 ; C -1 ; WX 612 ; N uni0250 ; B 60 -15 522 561 ; C -1 ; WX 634 ; N uni0251 ; B 55 -15 544 561 ; C -1 ; WX 634 ; N uni0252 ; B 55 -15 544 561 ; C -1 ; WX 634 ; N uni0253 ; B 90 -15 581 760 ; C -1 ; WX 549 ; N uni0254 ; B 55 -15 488 561 ; C -1 ; WX 549 ; N uni0255 ; B 55 -71 488 561 ; C -1 ; WX 634 ; N uni0256 ; B 55 -209 657 760 ; C -1 ; WX 727 ; N uni0257 ; B 55 -15 747 760 ; C -1 ; WX 615 ; N uni0258 ; B 55 -15 563 561 ; C -1 ; WX 615 ; N uni0259 ; B 55 -15 563 561 ; C -1 ; WX 795 ; N uni025A ; B 60 -15 815 561 ; C -1 ; WX 540 ; N uni025B ; B 64 -15 473 561 ; C -1 ; WX 544 ; N uni025C ; B 55 -11 493 561 ; C -1 ; WX 765 ; N uni025D ; B 55 -11 785 561 ; C -1 ; WX 681 ; N uni025E ; B 55 -21 630 560 ; C -1 ; WX 363 ; N uni025F ; B -19 -209 271 547 ; C -1 ; WX 637 ; N uni0260 ; B 55 -209 657 760 ; C -1 ; WX 634 ; N uni0261 ; B 55 -209 544 547 ; C -1 ; WX 629 ; N uni0262 ; B 55 0 539 575 ; C -1 ; WX 685 ; N uni0263 ; B 100 -211 603 547 ; C -1 ; WX 591 ; N uni0264 ; B 46 0 549 547 ; C -1 ; WX 633 ; N uni0265 ; B 84 -209 543 547 ; C -1 ; WX 633 ; N uni0266 ; B 90 0 549 760 ; C -1 ; WX 633 ; N uni0267 ; B 90 -209 549 760 ; C -1 ; WX 371 ; N uni0268 ; B 56 0 315 760 ; C -1 ; WX 387 ; N uni0269 ; B 94 0 297 547 ; C -1 ; WX 371 ; N uni026A ; B 56 0 315 547 ; C -1 ; WX 487 ; N uni026B ; B 85 0 409 760 ; C -1 ; WX 487 ; N uni026C ; B 37 0 417 760 ; C -1 ; WX 278 ; N uni026D ; B 94 -209 297 760 ; C -1 ; WX 706 ; N uni026E ; B 94 -213 652 760 ; C -1 ; WX 974 ; N uni026F ; B 90 -13 890 548 ; C -1 ; WX 974 ; N uni0270 ; B 90 -209 890 548 ; C -1 ; WX 974 ; N uni0271 ; B 90 -209 890 561 ; C -1 ; WX 645 ; N uni0272 ; B -19 -209 553 561 ; C -1 ; WX 642 ; N uni0273 ; B 90 -209 662 561 ; C -1 ; WX 633 ; N uni0274 ; B 87 0 549 561 ; C -1 ; WX 611 ; N uni0275 ; B 55 -15 558 561 ; C -1 ; WX 857 ; N uni0276 ; B 55 0 768 547 ; C -1 ; WX 728 ; N uni0277 ; B 74 -15 656 561 ; C -1 ; WX 611 ; N uni0278 ; B 55 -208 558 760 ; C -1 ; WX 469 ; N uni0279 ; B 55 -14 376 547 ; C -1 ; WX 469 ; N uni027A ; B 55 -14 376 755 ; C -1 ; WX 468 ; N uni027B ; B 55 -209 488 547 ; C -1 ; WX 469 ; N uni027C ; B 55 -209 376 561 ; C -1 ; WX 469 ; N uni027D ; B 54 -209 376 561 ; C -1 ; WX 440 ; N uni027E ; B 54 0 347 561 ; C -1 ; WX 440 ; N uni027F ; B 54 0 347 561 ; C -1 ; WX 601 ; N uni0280 ; B 24 0 508 547 ; C -1 ; WX 601 ; N uni0281 ; B 24 0 508 547 ; C -1 ; WX 520 ; N uni0282 ; B 54 -209 473 561 ; C -1 ; WX 335 ; N uni0283 ; B -19 -209 355 760 ; C -1 ; WX 380 ; N uni0284 ; B 26 -209 400 760 ; C -1 ; WX 461 ; N uni0285 ; B 26 -209 400 550 ; C -1 ; WX 335 ; N uni0286 ; B -132 -209 355 760 ; C -1 ; WX 392 ; N uni0287 ; B 26 -156 369 547 ; C -1 ; WX 392 ; N uni0288 ; B 26 -208 369 703 ; C -1 ; WX 633 ; N uni0289 ; B 0 -15 634 547 ; C -1 ; WX 617 ; N uni028A ; B 55 -15 565 547 ; C -1 ; WX 598 ; N uni028B ; B 94 0 545 547 ; C -1 ; WX 591 ; N uni028C ; B 29 0 563 547 ; C -1 ; WX 817 ; N uni028D ; B 41 0 776 547 ; C -1 ; WX 591 ; N uni028E ; B 29 0 563 755 ; C -1 ; WX 610 ; N uni028F ; B 49 0 553 562 ; C -1 ; WX 524 ; N uni0290 ; B 42 -209 594 547 ; C -1 ; WX 524 ; N uni0291 ; B 42 -55 482 547 ; C -1 ; WX 577 ; N uni0292 ; B 42 -213 523 547 ; C -1 ; WX 577 ; N uni0293 ; B 53 -213 553 547 ; C -1 ; WX 510 ; N uni0294 ; B 42 0 456 759 ; C -1 ; WX 510 ; N uni0295 ; B 42 0 456 759 ; C -1 ; WX 510 ; N uni0296 ; B 42 0 456 759 ; C -1 ; WX 510 ; N uni0297 ; B 42 -213 456 760 ; C -1 ; WX 602 ; N uni0298 ; B 46 22 557 533 ; C -1 ; WX 579 ; N uni0299 ; B 87 0 486 562 ; C -1 ; WX 681 ; N uni029A ; B 55 -21 630 560 ; C -1 ; WX 708 ; N uni029B ; B 55 0 728 759 ; C -1 ; WX 633 ; N uni029C ; B 87 0 549 561 ; C -1 ; WX 366 ; N uni029D ; B -132 -209 273 760 ; C -1 ; WX 666 ; N uni029E ; B 90 -213 577 547 ; C -1 ; WX 583 ; N uni029F ; B 87 0 499 561 ; C -1 ; WX 727 ; N uni02A0 ; B 55 -209 747 759 ; C -1 ; WX 510 ; N uni02A1 ; B 42 0 456 759 ; C -1 ; WX 510 ; N uni02A2 ; B 42 0 456 759 ; C -1 ; WX 1014 ; N uni02A3 ; B 55 -15 971 760 ; C -1 ; WX 1057 ; N uni02A4 ; B 55 -213 1014 760 ; C -1 ; WX 1012 ; N uni02A5 ; B 55 -55 970 760 ; C -1 ; WX 824 ; N uni02A6 ; B 26 -15 782 703 ; C -1 ; WX 609 ; N uni02A7 ; B 26 -209 629 760 ; C -1 ; WX 778 ; N uni02A8 ; B 26 -71 724 703 ; C -1 ; WX 848 ; N uni02A9 ; B 22 -209 805 760 ; C -1 ; WX 640 ; N uni02AA ; B 94 -15 599 760 ; C -1 ; WX 654 ; N uni02AB ; B 94 0 611 760 ; C -1 ; WX 515 ; N uni02AC ; B 26 -15 489 641 ; C -1 ; WX 515 ; N uni02AD ; B 26 84 489 641 ; C -1 ; WX 570 ; N uni02AE ; B 0 -214 571 760 ; C -1 ; WX 663 ; N uni02AF ; B 0 -209 683 760 ; C -1 ; WX 398 ; N uni02B0 ; B 57 452 346 878 ; C -1 ; WX 633 ; N uni02B1 ; B 57 451 346 877 ; C -1 ; WX 174 ; N uni02B2 ; B -12 335 116 878 ; C -1 ; WX 258 ; N uni02B3 ; B 57 452 260 766 ; C -1 ; WX 295 ; N uni02B4 ; B 34 444 237 759 ; C -1 ; WX 295 ; N uni02B5 ; B 34 335 308 759 ; C -1 ; WX 378 ; N uni02B6 ; B 15 452 320 759 ; C -1 ; WX 515 ; N uni02B7 ; B 26 452 489 759 ; C -1 ; WX 372 ; N uni02B8 ; B 18 335 355 759 ; C -1 ; WX 317 ; N uni02BB ; B 84 488 229 730 ; C -1 ; WX 317 ; N afii57929 ; B 86 499 230 730 ; L n napostrophe ; C -1 ; WX 369 ; N uni02C0 ; B 57 452 318 878 ; C -1 ; WX 369 ; N uni02C1 ; B 57 452 318 878 ; C -1 ; WX 500 ; N circumflex ; B 94 616 406 800 ; C -1 ; WX 500 ; N caron ; B 94 616 406 800 ; C -1 ; WX 336 ; N uni02D0 ; B 54 0 229 518 ; C -1 ; WX 336 ; N uni02D1 ; B 54 355 229 518 ; C -1 ; WX 500 ; N breve ; B 97 645 403 786 ; C -1 ; WX 500 ; N dotaccent ; B 200 658 300 758 ; C -1 ; WX 500 ; N ring ; B 116 609 384 878 ; C -1 ; WX 500 ; N ogonek ; B 162 -193 345 0 ; C -1 ; WX 500 ; N tilde ; B 88 639 412 777 ; C -1 ; WX 500 ; N hungarumlaut ; B 117 616 460 800 ; C -1 ; WX 425 ; N uni02E0 ; B 57 334 374 759 ; C -1 ; WX 166 ; N uni02E1 ; B 57 452 114 878 ; C -1 ; WX 373 ; N uni02E2 ; B 57 452 321 774 ; C -1 ; WX 443 ; N uni02E3 ; B 57 452 392 759 ; C -1 ; WX 369 ; N uni02E4 ; B 57 452 318 878 ; C -1 ; WX 500 ; N gravecomb ; B 83 617 317 800 ; C -1 ; WX 500 ; N acutecomb ; B 181 616 416 800 ; C -1 ; WX 500 ; N uni0302 ; B 94 616 406 800 ; C -1 ; WX 500 ; N tildecomb ; B 88 639 412 777 ; C -1 ; WX 500 ; N uni0304 ; B 104 672 396 746 ; C -1 ; WX 500 ; N uni0306 ; B 97 645 403 786 ; C -1 ; WX 500 ; N uni0307 ; B 200 658 300 758 ; C -1 ; WX 500 ; N uni0308 ; B 104 659 396 758 ; C -1 ; WX 500 ; N uni030A ; B 116 609 384 878 ; C -1 ; WX 500 ; N uni030B ; B 117 616 460 800 ; C -1 ; WX 500 ; N uni030C ; B 94 616 406 800 ; C -1 ; WX 317 ; N uni0312 ; B 84 488 229 645 ; C -1 ; WX 500 ; N uni0321 ; B 256 -209 549 63 ; C -1 ; WX 500 ; N uni0322 ; B 91 -209 384 63 ; C -1 ; WX 500 ; N uni0326 ; B 177 -221 321 -64 ; C -1 ; WX 278 ; N uni0374 ; B 78 556 203 800 ; C -1 ; WX 278 ; N uni0375 ; B 78 -209 203 36 ; C -1 ; WX 361 ; N uni037A ; B 126 -209 234 -44 ; C -1 ; WX 336 ; N uni037E ; B 77 -117 221 518 ; C -1 ; WX 500 ; N tonos ; B 181 616 416 800 ; C -1 ; WX 500 ; N dieresistonos ; B 104 659 416 978 ; C -1 ; WX 692 ; N Alphatonos ; B 7 0 676 800 ; C -1 ; WX 317 ; N anoteleia ; B 106 285 210 410 ; C -1 ; WX 746 ; N Epsilontonos ; B -13 0 683 800 ; C -1 ; WX 871 ; N Etatonos ; B -7 0 766 800 ; C -1 ; WX 408 ; N Iotatonos ; B -10 0 312 800 ; C -1 ; WX 812 ; N Omicrontonos ; B -7 -15 751 800 ; C -1 ; WX 824 ; N Upsilontonos ; B -16 0 821 800 ; C -1 ; WX 825 ; N Omegatonos ; B -19 0 753 800 ; C -1 ; WX 292 ; N iotadieresistonos ; B 2 0 313 978 ; C -1 ; WX 684 ; N Alpha ; B 7 0 676 730 ; C -1 ; WX 686 ; N Beta ; B 98 0 616 730 ; C -1 ; WX 557 ; N Gamma ; B 98 0 552 730 ; C -1 ; WX 684 ; N uni0394 ; B 7 0 676 730 ; C -1 ; WX 631 ; N Epsilon ; B 98 0 568 730 ; C -1 ; WX 685 ; N Zeta ; B 44 0 641 730 ; C -1 ; WX 751 ; N Eta ; B 98 0 654 730 ; C -1 ; WX 787 ; N Theta ; B 56 -15 731 743 ; C -1 ; WX 294 ; N Iota ; B 98 0 197 730 ; C -1 ; WX 655 ; N Kappa ; B 98 0 677 730 ; C -1 ; WX 684 ; N Lambda ; B 7 0 676 730 ; C -1 ; WX 862 ; N Mu ; B 98 0 766 730 ; C -1 ; WX 748 ; N Nu ; B 98 0 650 730 ; C -1 ; WX 631 ; N Xi ; B 98 0 548 730 ; C -1 ; WX 787 ; N Omicron ; B 56 -15 731 743 ; C -1 ; WX 751 ; N Pi ; B 98 0 654 730 ; C -1 ; WX 603 ; N Rho ; B 98 0 569 730 ; C -1 ; WX 631 ; N Sigma ; B 98 0 568 730 ; C -1 ; WX 610 ; N Tau ; B -3 0 614 730 ; C -1 ; WX 610 ; N Upsilon ; B -2 0 613 730 ; C -1 ; WX 787 ; N Phi ; B 56 0 731 730 ; C -1 ; WX 685 ; N Chi ; B 29 0 654 730 ; C -1 ; WX 787 ; N Psi ; B 56 0 732 730 ; C -1 ; WX 764 ; N Omega ; B 38 0 727 738 ; C -1 ; WX 294 ; N Iotadieresis ; B 2 0 293 914 ; C -1 ; WX 610 ; N Upsilondieresis ; B -2 0 613 914 ; C -1 ; WX 637 ; N alphatonos ; B 55 -15 559 800 ; C -1 ; WX 548 ; N epsilontonos ; B 64 -15 473 800 ; C -1 ; WX 654 ; N etatonos ; B 90 -209 549 800 ; C -1 ; WX 289 ; N iotatonos ; B 90 0 325 800 ; C -1 ; WX 633 ; N upsilondieresistonos ; B 84 -15 543 978 ; C -1 ; WX 611 ; N alpha ; B 55 -15 559 561 ; C -1 ; WX 638 ; N beta ; B 93 -209 567 768 ; C -1 ; WX 591 ; N gamma ; B 29 -209 563 547 ; C -1 ; WX 611 ; N delta ; B 55 -15 558 743 ; C -1 ; WX 540 ; N epsilon ; B 64 -15 473 561 ; C -1 ; WX 625 ; N zeta ; B 93 -209 538 760 ; C -1 ; WX 633 ; N eta ; B 90 -209 549 561 ; C -1 ; WX 611 ; N theta ; B 55 -12 558 768 ; C -1 ; WX 277 ; N iota ; B 94 0 185 547 ; C -1 ; WX 604 ; N kappa ; B 93 0 579 547 ; C -1 ; WX 591 ; N lambda ; B 29 0 563 760 ; C -1 ; WX 633 ; N uni03BC ; B 84 -209 543 547 ; C -1 ; WX 591 ; N nu ; B 29 0 563 547 ; C -1 ; WX 625 ; N xi ; B 93 -209 538 760 ; C -1 ; WX 611 ; N omicron ; B 55 -15 558 561 ; C -1 ; WX 659 ; N pi ; B 94 0 567 547 ; C -1 ; WX 634 ; N rho ; B 90 -209 581 561 ; C -1 ; WX 586 ; N sigma1 ; B 66 -209 511 553 ; C -1 ; WX 633 ; N sigma ; B 55 -15 605 561 ; C -1 ; WX 528 ; N tau ; B 2 0 527 547 ; C -1 ; WX 633 ; N upsilon ; B 84 -15 543 547 ; C -1 ; WX 688 ; N phi ; B 84 -209 620 552 ; C -1 ; WX 591 ; N chi ; B 28 -209 560 548 ; C -1 ; WX 697 ; N psi ; B 93 -209 643 547 ; C -1 ; WX 837 ; N omega ; B 98 -1 736 547 ; C -1 ; WX 290 ; N iotadieresis ; B 2 0 293 758 ; C -1 ; WX 633 ; N upsilondieresis ; B 84 -15 543 758 ; C -1 ; WX 611 ; N omicrontonos ; B 55 -15 558 800 ; C -1 ; WX 633 ; N upsilontonos ; B 84 -15 543 800 ; C -1 ; WX 837 ; N omegatonos ; B 98 -1 736 800 ; C -1 ; WX 614 ; N uni03D0 ; B 81 -12 541 768 ; C -1 ; WX 619 ; N theta1 ; B 54 -12 558 768 ; C -1 ; WX 698 ; N Upsilon1 ; B 0 0 695 733 ; C -1 ; WX 886 ; N uni03D3 ; B -13 0 903 800 ; C -1 ; WX 698 ; N uni03D4 ; B 0 0 695 914 ; C -1 ; WX 611 ; N phi1 ; B 55 -209 558 760 ; C -1 ; WX 866 ; N omega1 ; B 93 -1 780 547 ; C -1 ; WX 662 ; N uni03D7 ; B 59 -201 579 554 ; C -1 ; WX 787 ; N uni03D8 ; B 56 -208 731 743 ; C -1 ; WX 611 ; N uni03D9 ; B 55 -209 558 561 ; C -1 ; WX 652 ; N uni03DA ; B 93 -211 566 730 ; C -1 ; WX 596 ; N uni03DB ; B 66 -209 511 622 ; C -1 ; WX 575 ; N uni03DC ; B 98 0 518 730 ; C -1 ; WX 524 ; N uni03DD ; B 90 -209 449 548 ; C -1 ; WX 659 ; N uni03DE ; B 87 -2 604 730 ; C -1 ; WX 659 ; N uni03DF ; B 93 0 567 760 ; C -1 ; WX 865 ; N uni03E0 ; B 55 -209 797 743 ; C -1 ; WX 627 ; N uni03E1 ; B 58 -180 574 559 ; C -1 ; WX 662 ; N uni03F0 ; B 56 0 579 554 ; C -1 ; WX 634 ; N uni03F1 ; B 89 -209 581 561 ; C -1 ; WX 549 ; N uni03F2 ; B 55 -15 488 561 ; C -1 ; WX 277 ; N uni03F3 ; B -19 -209 185 760 ; C -1 ; WX 787 ; N uni03F4 ; B 56 -15 731 743 ; C -1 ; WX 615 ; N uni03F5 ; B 55 -15 481 561 ; C -1 ; WX 615 ; N uni03F6 ; B 95 -15 521 561 ; C -1 ; WX 604 ; N uni03F7 ; B 98 0 569 730 ; C -1 ; WX 634 ; N uni03F8 ; B 90 -209 581 760 ; C -1 ; WX 698 ; N uni03F9 ; B 56 -15 645 743 ; C -1 ; WX 862 ; N uni03FA ; B 98 0 766 730 ; C -1 ; WX 696 ; N uni03FB ; B 93 -209 612 547 ; C -1 ; WX 634 ; N uni03FC ; B 41 -209 581 561 ; C -1 ; WX 698 ; N uni03FD ; B 59 -15 647 743 ; C -1 ; WX 698 ; N uni03FE ; B 56 -15 645 743 ; C -1 ; WX 698 ; N uni03FF ; B 57 -15 646 743 ; C -1 ; WX 631 ; N uni0400 ; B 98 0 568 928 ; C -1 ; WX 631 ; N afii10023 ; B 98 0 568 914 ; C -1 ; WX 786 ; N afii10051 ; B -3 -201 709 730 ; C -1 ; WX 557 ; N afii10052 ; B 98 0 552 928 ; C -1 ; WX 698 ; N afii10053 ; B 56 -15 645 743 ; C -1 ; WX 634 ; N afii10054 ; B 65 -15 580 743 ; C -1 ; WX 294 ; N afii10055 ; B 98 0 197 730 ; C -1 ; WX 294 ; N afii10056 ; B 2 0 293 914 ; C -1 ; WX 294 ; N afii10057 ; B -52 -201 197 730 ; C -1 ; WX 1093 ; N afii10058 ; B 26 -15 1023 730 ; C -1 ; WX 1044 ; N afii10059 ; B 98 0 975 730 ; C -1 ; WX 786 ; N afii10060 ; B -3 0 709 730 ; C -1 ; WX 655 ; N afii10061 ; B 98 0 677 928 ; C -1 ; WX 748 ; N uni040D ; B 98 0 650 928 ; C -1 ; WX 609 ; N afii10062 ; B 17 -15 593 929 ; C -1 ; WX 751 ; N afii10145 ; B 98 -209 654 730 ; C -1 ; WX 684 ; N afii10017 ; B 7 0 676 730 ; C -1 ; WX 686 ; N afii10018 ; B 98 0 616 730 ; C -1 ; WX 686 ; N afii10019 ; B 98 0 616 730 ; C -1 ; WX 557 ; N afii10020 ; B 98 0 552 730 ; C -1 ; WX 776 ; N afii10021 ; B 23 -209 752 730 ; C -1 ; WX 631 ; N afii10022 ; B 98 0 568 730 ; C -1 ; WX 863 ; N afii10024 ; B 28 0 835 730 ; C -1 ; WX 636 ; N afii10025 ; B 76 -15 557 743 ; C -1 ; WX 748 ; N afii10026 ; B 98 0 650 730 ; C -1 ; WX 748 ; N afii10027 ; B 98 0 650 929 ; C -1 ; WX 655 ; N afii10028 ; B 98 0 677 730 ; C -1 ; WX 751 ; N afii10029 ; B 26 -14 654 730 ; C -1 ; WX 862 ; N afii10030 ; B 98 0 766 730 ; C -1 ; WX 751 ; N afii10031 ; B 98 0 654 730 ; C -1 ; WX 787 ; N afii10032 ; B 56 -15 731 743 ; C -1 ; WX 751 ; N afii10033 ; B 98 0 654 730 ; C -1 ; WX 603 ; N afii10034 ; B 98 0 569 730 ; C -1 ; WX 698 ; N afii10035 ; B 56 -15 645 743 ; C -1 ; WX 610 ; N afii10036 ; B -3 0 614 730 ; C -1 ; WX 609 ; N afii10037 ; B 17 -15 593 730 ; C -1 ; WX 787 ; N afii10038 ; B 56 0 731 730 ; C -1 ; WX 685 ; N afii10039 ; B 29 0 654 730 ; C -1 ; WX 776 ; N afii10040 ; B 98 -209 752 730 ; C -1 ; WX 685 ; N afii10041 ; B 85 0 588 730 ; C -1 ; WX 1002 ; N afii10042 ; B 98 0 903 730 ; C -1 ; WX 1025 ; N afii10043 ; B 98 -209 1001 730 ; C -1 ; WX 832 ; N afii10044 ; B 24 0 762 730 ; C -1 ; WX 882 ; N afii10045 ; B 98 0 785 730 ; C -1 ; WX 686 ; N afii10046 ; B 98 0 616 730 ; C -1 ; WX 698 ; N afii10047 ; B 54 -15 643 743 ; C -1 ; WX 1030 ; N afii10048 ; B 103 -15 975 743 ; C -1 ; WX 694 ; N afii10049 ; B 28 0 597 730 ; C -1 ; WX 612 ; N afii10065 ; B 60 -15 522 561 ; C -1 ; WX 611 ; N afii10066 ; B 55 -15 558 743 ; C -1 ; WX 585 ; N afii10067 ; B 90 0 531 547 ; C -1 ; WX 491 ; N afii10068 ; B 90 0 477 547 ; C -1 ; WX 671 ; N afii10069 ; B 24 -209 648 547 ; C -1 ; WX 615 ; N afii10070 ; B 55 -15 563 561 ; C -1 ; WX 733 ; N afii10072 ; B 24 0 710 547 ; C -1 ; WX 540 ; N afii10073 ; B 64 -15 473 561 ; C -1 ; WX 656 ; N afii10074 ; B 94 0 563 547 ; C -1 ; WX 656 ; N afii10075 ; B 94 0 563 760 ; C -1 ; WX 604 ; N afii10076 ; B 93 0 579 547 ; C -1 ; WX 639 ; N afii10077 ; B 22 -15 557 547 ; C -1 ; WX 754 ; N afii10078 ; B 94 0 661 547 ; C -1 ; WX 660 ; N afii10079 ; B 94 0 567 547 ; C -1 ; WX 611 ; N afii10080 ; B 55 -15 558 561 ; C -1 ; WX 659 ; N afii10081 ; B 94 0 567 547 ; C -1 ; WX 634 ; N afii10082 ; B 90 -209 581 561 ; C -1 ; WX 549 ; N afii10083 ; B 55 -15 488 561 ; C -1 ; WX 528 ; N afii10084 ; B 2 0 527 547 ; C -1 ; WX 591 ; N afii10085 ; B 29 -209 563 547 ; C -1 ; WX 916 ; N afii10086 ; B 55 -209 862 730 ; C -1 ; WX 591 ; N afii10087 ; B 28 0 560 547 ; C -1 ; WX 680 ; N afii10088 ; B 94 -209 657 547 ; C -1 ; WX 590 ; N afii10089 ; B 73 0 500 547 ; C -1 ; WX 872 ; N afii10090 ; B 94 0 779 547 ; C -1 ; WX 892 ; N afii10091 ; B 94 -209 869 547 ; C -1 ; WX 703 ; N afii10092 ; B 20 0 648 547 ; C -1 ; WX 765 ; N afii10093 ; B 94 0 677 547 ; C -1 ; WX 589 ; N afii10094 ; B 94 0 534 547 ; C -1 ; WX 615 ; N afii10095 ; B 74 -15 561 561 ; C -1 ; WX 812 ; N afii10096 ; B 94 -15 758 561 ; C -1 ; WX 601 ; N afii10097 ; B 24 0 508 547 ; C -1 ; WX 615 ; N uni0450 ; B 55 -15 563 803 ; C -1 ; WX 615 ; N afii10071 ; B 55 -15 563 758 ; C -1 ; WX 644 ; N afii10099 ; B 19 -209 553 760 ; C -1 ; WX 491 ; N afii10100 ; B 90 0 481 804 ; C -1 ; WX 615 ; N afii10101 ; B 55 -15 542 561 ; C -1 ; WX 520 ; N afii10102 ; B 54 -15 473 561 ; C -1 ; WX 277 ; N afii10103 ; B 94 0 185 760 ; C -1 ; WX 277 ; N afii10104 ; B -6 0 285 758 ; C -1 ; WX 277 ; N afii10105 ; B -19 -209 185 760 ; C -1 ; WX 898 ; N afii10106 ; B 22 -15 843 547 ; C -1 ; WX 891 ; N afii10107 ; B 94 0 842 547 ; C -1 ; WX 637 ; N afii10108 ; B 19 0 553 760 ; C -1 ; WX 604 ; N afii10109 ; B 93 0 579 804 ; C -1 ; WX 656 ; N uni045D ; B 94 0 563 803 ; C -1 ; WX 591 ; N afii10110 ; B 29 -209 563 760 ; C -1 ; WX 662 ; N afii10193 ; B 94 -209 567 547 ; C -1 ; WX 557 ; N afii10050 ; B 98 0 552 879 ; C -1 ; WX 491 ; N afii10098 ; B 90 0 477 701 ; C -1 ; WX 557 ; N uni0492 ; B 34 0 552 730 ; C -1 ; WX 491 ; N uni0493 ; B 27 0 477 547 ; C -1 ; WX 655 ; N uni049A ; B 98 -209 677 730 ; C -1 ; WX 604 ; N uni049B ; B 93 -209 579 547 ; C -1 ; WX 685 ; N uni04B2 ; B 29 -209 654 730 ; C -1 ; WX 591 ; N uni04B3 ; B 28 -209 560 547 ; C -1 ; WX 770 ; N uni1E12 ; B 98 -190 711 730 ; C -1 ; WX 634 ; N uni1E13 ; B 55 -239 544 760 ; C -1 ; WX 557 ; N uni1E3C ; B 98 -190 552 730 ; C -1 ; WX 277 ; N uni1E3D ; B -17 -239 295 760 ; C -1 ; WX 748 ; N uni1E44 ; B 98 0 650 902 ; C -1 ; WX 633 ; N uni1E45 ; B 90 0 549 720 ; C -1 ; WX 748 ; N uni1E4A ; B 98 -190 650 730 ; C -1 ; WX 633 ; N uni1E4B ; B 90 -240 549 561 ; C -1 ; WX 610 ; N uni1E70 ; B -3 -190 614 730 ; C -1 ; WX 392 ; N uni1E71 ; B 26 -241 394 703 ; C -1 ; WX 988 ; N Wgrave ; B 33 0 957 985 ; C -1 ; WX 817 ; N wgrave ; B 41 0 776 803 ; C -1 ; WX 988 ; N Wacute ; B 33 0 957 986 ; C -1 ; WX 817 ; N wacute ; B 41 0 776 804 ; C -1 ; WX 988 ; N Wdieresis ; B 33 0 957 901 ; C -1 ; WX 817 ; N wdieresis ; B 41 0 776 719 ; C -1 ; WX 610 ; N Ygrave ; B -2 0 613 985 ; C -1 ; WX 591 ; N ygrave ; B 29 -209 563 803 ; C -1 ; WX 360 ; N uni2010 ; B 48 233 313 314 ; C -1 ; WX 360 ; N uni2011 ; B 48 233 313 314 ; C -1 ; WX 500 ; N figuredash ; B 0 238 500 310 ; C -1 ; WX 500 ; N endash ; B 0 238 500 310 ; C -1 ; WX 1000 ; N emdash ; B 0 238 1000 310 ; C -1 ; WX 1000 ; N afii00208 ; B 0 238 1000 310 ; C -1 ; WX 317 ; N quoteleft ; B 84 488 229 730 ; C -1 ; WX 317 ; N quoteright ; B 86 499 230 730 ; C -1 ; WX 317 ; N quotesinglbase ; B 84 -117 229 125 ; C -1 ; WX 518 ; N quotedblleft ; B 84 488 429 730 ; C -1 ; WX 518 ; N quotedblright ; B 84 488 429 730 ; C -1 ; WX 518 ; N quotedblbase ; B 84 -117 429 125 ; C -1 ; WX 500 ; N dagger ; B 27 -97 473 730 ; C -1 ; WX 500 ; N daggerdbl ; B 27 -97 473 730 ; C -1 ; WX 589 ; N bullet ; B 149 227 440 517 ; C -1 ; WX 1000 ; N ellipsis ; B 115 0 885 125 ; C -1 ; WX 1341 ; N perthousand ; B 55 -15 1288 743 ; C -1 ; WX 399 ; N guilsinglleft ; B 77 68 307 518 ; C -1 ; WX 399 ; N guilsinglright ; B 94 68 324 518 ; C -1 ; WX 398 ; N uni207F ; B 57 452 346 766 ; C -1 ; WX 636 ; N Euro ; B 0 -15 570 743 ; C -1 ; WX 1000 ; N trademark ; B 144 446 785 730 ; C -1 ; WX 517 ; N partialdiff ; B 50 -13 470 647 ; C -1 ; WX 668 ; N Delta ; B -3 0 672 720 ; C -1 ; WX 756 ; N product ; B 76 -192 681 720 ; C -1 ; WX 673 ; N summation ; B 12 -192 654 720 ; C -1 ; WX 837 ; N minus ; B 105 271 732 355 ; C -1 ; WX 166 ; N fraction ; B -184 -15 351 743 ; C -1 ; WX 317 ; N periodcentered ; B 106 285 210 410 ; C -1 ; WX 637 ; N radical ; B 29 -21 638 812 ; C -1 ; WX 833 ; N infinity ; B 107 107 727 492 ; C -1 ; WX 520 ; N integral ; B 22 -182 498 757 ; C -1 ; WX 837 ; N approxequal ; B 105 132 732 495 ; C -1 ; WX 837 ; N notequal ; B 105 19 732 608 ; C -1 ; WX 837 ; N lessequal ; B 105 0 732 583 ; C -1 ; WX 837 ; N greaterequal ; B 105 0 732 583 ; C -1 ; WX 634 ; N house ; B 71 0 564 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 421 ; C -1 ; WX 513 ; N uni2311 ; B 2 126 511 634 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 421 ; C -1 ; WX 757 ; N uni237D ; B 12 -228 745 102 ; C -1 ; WX 634 ; N uni2423 ; B 71 -228 564 102 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 2 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 629 ; N fi ; B 22 0 537 760 ; C -1 ; WX 629 ; N fl ; B 22 0 537 760 ; C -1 ; WX 1025 ; N uniFFFD ; B 14 -84 1011 913 ; C -1 ; WX 634 ; N dlLtcaron ; B 600 575 732 759 ; C -1 ; WX 500 ; N Dieresis ; B 104 631 396 731 ; C -1 ; WX 500 ; N Acute ; B 181 616 368 746 ; C -1 ; WX 500 ; N Tilde ; B 88 631 412 739 ; C -1 ; WX 500 ; N Grave ; B 130 616 318 746 ; C -1 ; WX 500 ; N Circumflex ; B 101 616 399 747 ; C -1 ; WX 500 ; N Caron ; B 101 616 399 747 ; C -1 ; WX 400 ; N c6467 ; B 30 326 370 734 ; C -1 ; WX 500 ; N Breve ; B 97 627 403 747 ; C -1 ; WX 500 ; N Dotaccent ; B 200 631 300 732 ; C -1 ; WX 500 ; N Hungarumlaut ; B 112 616 462 746 ; C -1 ; WX 500 ; N Doubleacute ; B 38 616 388 746 ; EndCharMetrics StartKernData StartKernPairs 2558 KPX hyphen Amacron -21 KPX hyphen Abreve -21 KPX hyphen Aogonek -21 KPX hyphen Tcaron -91 KPX hyphen Gbreve 36 KPX hyphen yacute -17 KPX hyphen Yacute -118 KPX hyphen Ograve 27 KPX hyphen Ocircumflex 27 KPX hyphen Oacute 27 KPX hyphen Aacute -21 KPX hyphen Acircumflex -21 KPX hyphen Ydieresis -118 KPX hyphen ydieresis -17 KPX hyphen Otilde 27 KPX hyphen Atilde -21 KPX hyphen Agrave -21 KPX hyphen otilde 18 KPX hyphen odieresis 18 KPX hyphen ocircumflex 18 KPX hyphen ograve 18 KPX hyphen oacute 18 KPX hyphen Odieresis 27 KPX hyphen Adieresis -21 KPX hyphen y -17 KPX hyphen v -26 KPX hyphen o 18 KPX hyphen Y -118 KPX hyphen X -49 KPX hyphen W -40 KPX hyphen V -58 KPX hyphen T -91 KPX hyphen Q 36 KPX hyphen O 27 KPX hyphen J 55 KPX hyphen G 36 KPX hyphen B -35 KPX hyphen A -21 KPX A Gdotaccent -17 KPX A Gcircumflex -17 KPX A ygrave -67 KPX A uni0231 -17 KPX A uni0232 -77 KPX A uni0233 -67 KPX A ycircumflex -67 KPX A wdieresis -40 KPX A wacute -40 KPX A wgrave -40 KPX A wcircumflex -40 KPX A uni021B -17 KPX A tcommaaccent -17 KPX A uni01ED -17 KPX A uni01EB -17 KPX A ohungarumlaut -17 KPX A obreve -17 KPX A omacron -17 KPX A eogonek -17 KPX A edotaccent -17 KPX A ebreve -17 KPX A emacron -17 KPX A uni01C6 -17 KPX A dcroat -17 KPX A cdotaccent -17 KPX A ccircumflex -17 KPX A Ygrave -77 KPX A Ycircumflex -77 KPX A Wdieresis -54 KPX A Wacute -54 KPX A Wgrave -54 KPX A Wcircumflex -54 KPX A uni021A -77 KPX A Tcommaaccent -77 KPX A uni022E -17 KPX A uni01EC -17 KPX A uni01EA -17 KPX A Ohungarumlaut -17 KPX A Obreve -17 KPX A Omacron -17 KPX A Cdotaccent -17 KPX A Ccircumflex -17 KPX A Aogonek 27 KPX A Abreve 27 KPX A Amacron 27 KPX A tcaron -17 KPX A Tcaron -77 KPX A ecaron -17 KPX A dcaron -17 KPX A ccaron -17 KPX A Ccaron -17 KPX A cacute -17 KPX A Cacute -17 KPX A Gbreve -17 KPX A yacute -67 KPX A Yacute -77 KPX A Ograve -17 KPX A Ocircumflex -17 KPX A Oacute -17 KPX A Aacute 27 KPX A Acircumflex 27 KPX A quotedblbase 22 KPX A Ydieresis -77 KPX A ydieresis -67 KPX A quotedblright -123 KPX A quotedblleft -128 KPX A Otilde -17 KPX A Atilde 27 KPX A Agrave 27 KPX A guillemotleft -35 KPX A otilde -17 KPX A odieresis -17 KPX A ocircumflex -17 KPX A ograve -17 KPX A oacute -17 KPX A edieresis -17 KPX A ecircumflex -17 KPX A egrave -17 KPX A eacute -17 KPX A ccedilla -17 KPX A Odieresis -17 KPX A Ccedilla -17 KPX A Adieresis 27 KPX A y -67 KPX A w -40 KPX A v -58 KPX A t -17 KPX A q -17 KPX A o -17 KPX A f -35 KPX A e -17 KPX A d -17 KPX A c -17 KPX A Y -77 KPX A W -54 KPX A V -63 KPX A T -77 KPX A Q -17 KPX A O -17 KPX A G -17 KPX A C -17 KPX A A 27 KPX A colon -17 KPX A period -17 KPX A hyphen -21 KPX B uni022E -17 KPX B uni01EC -17 KPX B uni01EA -17 KPX B Ygrave -54 KPX B Ycircumflex -54 KPX B Wdieresis -35 KPX B Wacute -35 KPX B Wgrave -35 KPX B Wcircumflex -35 KPX B Scommaaccent -17 KPX B Scircumflex -17 KPX B Sacute -17 KPX B Ohungarumlaut -17 KPX B Obreve -17 KPX B Omacron -17 KPX B Gcommaaccent -17 KPX B Gdotaccent -17 KPX B Gcircumflex -17 KPX B Cdotaccent -17 KPX B Ccircumflex -17 KPX B Ccaron -17 KPX B Cacute -17 KPX B Scedilla -17 KPX B Gbreve -17 KPX B Yacute -54 KPX B Scaron -17 KPX B Ograve -17 KPX B Ocircumflex -17 KPX B Oacute -17 KPX B quotedblbase -40 KPX B Ydieresis -54 KPX B quotedblright -54 KPX B quotedblleft -54 KPX B Otilde -17 KPX B guillemotright -17 KPX B guillemotleft -30 KPX B Odieresis -17 KPX B Ccedilla -17 KPX B Y -54 KPX B W -35 KPX B V -30 KPX B S -17 KPX B O -17 KPX B G -17 KPX B C -17 KPX C uni0232 -17 KPX C Ygrave -17 KPX C Ycircumflex -17 KPX C Yacute -17 KPX C Ydieresis -17 KPX C quotedblright 18 KPX C guillemotright -17 KPX C guillemotleft -17 KPX C Y -17 KPX D Ygrave -54 KPX D uni0232 -54 KPX D Ycircumflex -54 KPX D Aogonek -17 KPX D Abreve -17 KPX D Amacron -17 KPX D Yacute -54 KPX D Aacute -17 KPX D Acircumflex -17 KPX D quotedblbase -91 KPX D Ydieresis -54 KPX D quotedblright -26 KPX D quotedblleft -21 KPX D Atilde -17 KPX D Agrave -17 KPX D guillemotright -17 KPX D guillemotleft -17 KPX D Adieresis -17 KPX D Y -54 KPX D V -17 KPX D A -17 KPX F ygrave -91 KPX F uni0233 -91 KPX F ycircumflex -91 KPX F uogonek -54 KPX F uhungarumlaut -54 KPX F ubreve -54 KPX F umacron -54 KPX F utilde -54 KPX F rcommaaccent -72 KPX F uni022F -35 KPX F uni01ED -35 KPX F uni01EB -35 KPX F ohungarumlaut -35 KPX F obreve -35 KPX F omacron -35 KPX F uni021A -17 KPX F ij -72 KPX F iogonek -72 KPX F eogonek -54 KPX F edotaccent -54 KPX F ebreve -54 KPX F emacron -54 KPX F aogonek -91 KPX F abreve -91 KPX F amacron -91 KPX F Tbar -17 KPX F Tcommaaccent -17 KPX F Scommaaccent -17 KPX F Scircumflex -17 KPX F Sacute -17 KPX F Aogonek -91 KPX F Abreve -91 KPX F Amacron -91 KPX F udieresis -54 KPX F aring -91 KPX F ograve -35 KPX F ocircumflex -35 KPX F quotedblbase -183 KPX F uring -54 KPX F otilde -35 KPX F edieresis -54 KPX F ugrave -54 KPX F colon -77 KPX F agrave -91 KPX F Atilde -91 KPX F ecircumflex -54 KPX F Scaron -17 KPX F racute -72 KPX F egrave -54 KPX F Adieresis -91 KPX F Scedilla -17 KPX F Aacute -91 KPX F rcaron -72 KPX F ucircumflex -54 KPX F yacute -91 KPX F atilde -91 KPX F Acircumflex -91 KPX F A -91 KPX F a -91 KPX F adieresis -91 KPX F quotedblleft -21 KPX F odieresis -35 KPX F uacute -54 KPX F aacute -91 KPX F period -160 KPX F S -17 KPX F T -17 KPX F acircumflex -91 KPX F eacute -54 KPX F Tcaron -17 KPX F ecaron -54 KPX F e -54 KPX F i -72 KPX F ydieresis -91 KPX F o -35 KPX F r -72 KPX F u -54 KPX F Agrave -91 KPX F y -91 KPX F oacute -35 KPX G Tcaron -35 KPX G Yacute -49 KPX G quotedblbase -26 KPX G Ydieresis -49 KPX G quotedblright -21 KPX G quotedblleft -21 KPX G guillemotright -17 KPX G guillemotleft -17 KPX G Y -49 KPX G T -35 KPX H quotedblbase -35 KPX H quotedblright -30 KPX H quotedblleft -35 KPX H period -17 KPX J Aacute -17 KPX J Acircumflex -17 KPX J quotedblbase -54 KPX J quotedblright -30 KPX J quotedblleft -35 KPX J Atilde -17 KPX J Agrave -17 KPX J guillemotright -17 KPX J guillemotleft -17 KPX J Adieresis -17 KPX J A -17 KPX J hyphen -35 KPX K uring -49 KPX K Uring -26 KPX K Tcaron -77 KPX K ecaron -49 KPX K Ccaron -54 KPX K Cacute -54 KPX K yacute -72 KPX K Yacute -35 KPX K Ugrave -26 KPX K Ucircumflex -26 KPX K Uacute -26 KPX K Ograve -54 KPX K Ocircumflex -54 KPX K Oacute -54 KPX K Aacute -17 KPX K Acircumflex -17 KPX K Ydieresis -35 KPX K ydieresis -72 KPX K quotedblright -30 KPX K quotedblleft -30 KPX K Otilde -54 KPX K Atilde -17 KPX K Agrave -17 KPX K guillemotleft -63 KPX K udieresis -49 KPX K ucircumflex -49 KPX K ugrave -49 KPX K uacute -49 KPX K otilde -49 KPX K odieresis -49 KPX K ocircumflex -49 KPX K ograve -49 KPX K oacute -49 KPX K edieresis -49 KPX K ecircumflex -49 KPX K egrave -49 KPX K eacute -49 KPX K aring -17 KPX K atilde -17 KPX K adieresis -17 KPX K acircumflex -17 KPX K agrave -17 KPX K aacute -17 KPX K Udieresis -26 KPX K Odieresis -54 KPX K Ccedilla -54 KPX K Adieresis -17 KPX K y -72 KPX K u -49 KPX K o -49 KPX K e -49 KPX K a -17 KPX K Y -35 KPX K W -35 KPX K U -26 KPX K T -77 KPX K O -54 KPX K C -54 KPX K A -17 KPX K hyphen -104 KPX L uring -17 KPX L Uring -49 KPX L Tcaron -137 KPX L ecaron -17 KPX L yacute -91 KPX L Yacute -132 KPX L Ugrave -49 KPX L Ucircumflex -49 KPX L Uacute -49 KPX L Ograve -35 KPX L Ocircumflex -35 KPX L Oacute -35 KPX L Aacute 22 KPX L Acircumflex 22 KPX L Ydieresis -132 KPX L ydieresis -91 KPX L quotedblright -262 KPX L quotedblleft -202 KPX L Otilde -35 KPX L Atilde 22 KPX L Agrave 22 KPX L udieresis -17 KPX L ucircumflex -17 KPX L ugrave -17 KPX L uacute -17 KPX L otilde -17 KPX L odieresis -17 KPX L ocircumflex -17 KPX L ograve -17 KPX L oacute -17 KPX L edieresis -17 KPX L ecircumflex -17 KPX L egrave -17 KPX L eacute -17 KPX L Udieresis -49 KPX L Odieresis -35 KPX L Adieresis 22 KPX L y -91 KPX L u -17 KPX L o -17 KPX L e -17 KPX L Y -132 KPX L W -91 KPX L V -109 KPX L U -49 KPX L T -137 KPX L O -35 KPX L A 22 KPX L hyphen -17 KPX O Yacute -54 KPX O Aacute -17 KPX O Acircumflex -17 KPX O quotedblbase -91 KPX O Ydieresis -54 KPX O quotedblright -17 KPX O quotedblleft -21 KPX O Atilde -17 KPX O Agrave -17 KPX O guillemotleft -17 KPX O Adieresis -17 KPX O Y -54 KPX O X -63 KPX O V -17 KPX O A -17 KPX O colon -17 KPX O period -40 KPX O hyphen 27 KPX P udieresis -17 KPX P aring -44 KPX P ograve -35 KPX P hyphen -21 KPX P quotedblbase -160 KPX P uring -17 KPX P otilde -35 KPX P edieresis -35 KPX P acircumflex -44 KPX P ugrave -17 KPX P Yacute -21 KPX P agrave -44 KPX P Atilde -63 KPX P ecircumflex -35 KPX P racute -17 KPX P quotedblright 18 KPX P egrave -35 KPX P Adieresis -63 KPX P ntilde -17 KPX P Aacute -63 KPX P rcaron -17 KPX P eacute -35 KPX P ucircumflex -17 KPX P atilde -44 KPX P Acircumflex -63 KPX P ocircumflex -35 KPX P scaron -17 KPX P A -63 KPX P a -44 KPX P adieresis -44 KPX P quotedblleft 18 KPX P odieresis -35 KPX P uacute -17 KPX P scedilla -17 KPX P Ydieresis -21 KPX P aacute -44 KPX P period -155 KPX P Y -21 KPX P e -35 KPX P ecaron -35 KPX P guillemotleft -17 KPX P i -21 KPX P o -35 KPX P n -17 KPX P s -17 KPX P r -17 KPX P u -17 KPX P Agrave -63 KPX P ncaron -17 KPX P oacute -35 KPX Q quotedblbase -63 KPX Q quotedblright -17 KPX Q quotedblleft -21 KPX Q hyphen 27 KPX R uring -44 KPX R Tcaron -72 KPX R ecaron -44 KPX R Ccaron -49 KPX R Cacute -49 KPX R yacute -54 KPX R Yacute -63 KPX R Aacute -40 KPX R Acircumflex -40 KPX R quotedblbase -17 KPX R Ydieresis -63 KPX R ydieresis -54 KPX R quotedblright -63 KPX R quotedblleft -72 KPX R Atilde -40 KPX R Agrave -40 KPX R guillemotright -17 KPX R guillemotleft -54 KPX R udieresis -44 KPX R ucircumflex -44 KPX R ugrave -44 KPX R uacute -44 KPX R otilde -44 KPX R odieresis -44 KPX R ocircumflex -44 KPX R ograve -44 KPX R oacute -44 KPX R edieresis -44 KPX R ecircumflex -44 KPX R egrave -44 KPX R eacute -44 KPX R aring -21 KPX R atilde -21 KPX R adieresis -21 KPX R acircumflex -21 KPX R agrave -21 KPX R aacute -21 KPX R Ccedilla -49 KPX R Adieresis -40 KPX R y -54 KPX R u -44 KPX R o -44 KPX R e -44 KPX R a -21 KPX R Y -63 KPX R W -40 KPX R V -54 KPX R T -72 KPX R C -49 KPX R A -40 KPX R colon -30 KPX R period -35 KPX R hyphen -40 KPX S Aacute 18 KPX S Acircumflex 18 KPX S Atilde 18 KPX S Agrave 18 KPX S Adieresis 18 KPX S A 18 KPX T udieresis -151 KPX T aring -165 KPX T ograve -169 KPX T hyphen -91 KPX T quotedblbase -128 KPX T Ccaron -58 KPX T otilde -169 KPX T edieresis -169 KPX T ugrave -151 KPX T colon -109 KPX T agrave -165 KPX T Atilde -77 KPX T ecircumflex -169 KPX T ccedilla -169 KPX T racute -146 KPX T quotedblright -21 KPX T egrave -169 KPX T Adieresis -77 KPX T Cacute -58 KPX T Aacute -77 KPX T ccaron -169 KPX T rcaron -146 KPX T eacute -169 KPX T ucircumflex -151 KPX T yacute -155 KPX T atilde -165 KPX T Acircumflex -77 KPX T uring -151 KPX T ocircumflex -169 KPX T scaron -165 KPX T A -77 KPX T ecaron -169 KPX T C -58 KPX T scedilla -165 KPX T adieresis -165 KPX T w -165 KPX T odieresis -169 KPX T uacute -151 KPX T cacute -169 KPX T aacute -165 KPX T period -118 KPX T guillemotright -54 KPX T T -17 KPX T acircumflex -165 KPX T e -169 KPX T Tcaron -17 KPX T a -165 KPX T c -169 KPX T guillemotleft -91 KPX T i -30 KPX T ydieresis -155 KPX T o -169 KPX T s -165 KPX T r -146 KPX T u -151 KPX T Agrave -77 KPX T y -155 KPX T Ccedilla -58 KPX T oacute -169 KPX U Zcaron -17 KPX U Z -17 KPX V uring -67 KPX V ecaron -77 KPX V yacute -26 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -63 KPX V Acircumflex -63 KPX V quotedblbase -137 KPX V ydieresis -26 KPX V Otilde -17 KPX V Atilde -63 KPX V Agrave -63 KPX V guillemotright -54 KPX V guillemotleft -86 KPX V udieresis -67 KPX V ucircumflex -67 KPX V ugrave -67 KPX V uacute -67 KPX V otilde -77 KPX V odieresis -77 KPX V ocircumflex -77 KPX V ograve -77 KPX V oacute -77 KPX V edieresis -77 KPX V ecircumflex -77 KPX V egrave -77 KPX V eacute -77 KPX V aring -77 KPX V atilde -77 KPX V adieresis -77 KPX V acircumflex -77 KPX V agrave -77 KPX V aacute -77 KPX V Odieresis -17 KPX V Adieresis -63 KPX V y -26 KPX V u -67 KPX V o -77 KPX V i -21 KPX V e -77 KPX V a -77 KPX V O -17 KPX V A -63 KPX V colon -81 KPX V period -128 KPX V hyphen -58 KPX W udieresis -35 KPX W aring -63 KPX W ograve -58 KPX W hyphen -40 KPX W quotedblbase -128 KPX W uring -35 KPX W otilde -58 KPX W edieresis -58 KPX W ugrave -35 KPX W colon -58 KPX W agrave -63 KPX W Atilde -54 KPX W ecircumflex -58 KPX W racute -44 KPX W egrave -58 KPX W Adieresis -54 KPX W Aacute -54 KPX W rcaron -44 KPX W eacute -58 KPX W ucircumflex -35 KPX W yacute -17 KPX W atilde -63 KPX W Acircumflex -54 KPX W ocircumflex -58 KPX W A -54 KPX W a -63 KPX W guillemotright -17 KPX W adieresis -63 KPX W quotedblleft -17 KPX W odieresis -58 KPX W uacute -35 KPX W aacute -63 KPX W period -114 KPX W acircumflex -63 KPX W e -58 KPX W ecaron -58 KPX W guillemotleft -54 KPX W i -21 KPX W ydieresis -17 KPX W o -58 KPX W r -44 KPX W u -35 KPX W Agrave -54 KPX W y -17 KPX W oacute -58 KPX X Tcaron -17 KPX X ecaron -44 KPX X Ccaron -72 KPX X Cacute -72 KPX X Ograve -63 KPX X Ocircumflex -63 KPX X Oacute -63 KPX X quotedblbase -21 KPX X quotedblright -40 KPX X quotedblleft -77 KPX X Otilde -63 KPX X guillemotleft -54 KPX X edieresis -44 KPX X ecircumflex -44 KPX X egrave -44 KPX X eacute -44 KPX X Odieresis -63 KPX X Ccedilla -72 KPX X e -44 KPX X T -17 KPX X O -63 KPX X C -72 KPX X hyphen -49 KPX Y uring -114 KPX Y ecaron -132 KPX Y Ccaron -54 KPX Y Cacute -54 KPX Y Ograve -54 KPX Y Ocircumflex -54 KPX Y Oacute -54 KPX Y Aacute -77 KPX Y Acircumflex -77 KPX Y quotedblbase -128 KPX Y quotedblright -17 KPX Y quotedblleft -54 KPX Y Otilde -54 KPX Y Atilde -77 KPX Y Agrave -77 KPX Y guillemotright -72 KPX Y guillemotleft -109 KPX Y udieresis -114 KPX Y ucircumflex -114 KPX Y ugrave -114 KPX Y uacute -114 KPX Y otilde -132 KPX Y odieresis -132 KPX Y ocircumflex -132 KPX Y ograve -132 KPX Y oacute -132 KPX Y edieresis -132 KPX Y ecircumflex -132 KPX Y egrave -132 KPX Y eacute -132 KPX Y aring -137 KPX Y atilde -137 KPX Y adieresis -137 KPX Y acircumflex -137 KPX Y agrave -137 KPX Y aacute -137 KPX Y Odieresis -54 KPX Y Ccedilla -54 KPX Y Adieresis -77 KPX Y u -114 KPX Y o -132 KPX Y i -35 KPX Y e -132 KPX Y a -137 KPX Y O -54 KPX Y C -54 KPX Y A -77 KPX Y colon -132 KPX Y period -202 KPX Y hyphen -118 KPX Z quotedblbase -17 KPX Z quotedblright -17 KPX Z quotedblleft -17 KPX Z hyphen -17 KPX e x -17 KPX f tcaron -17 KPX f yacute -17 KPX f quotedblbase -114 KPX f ydieresis -17 KPX f quotedblleft 31 KPX f guillemotright -17 KPX f guillemotleft -35 KPX f y -17 KPX f w -17 KPX f t -17 KPX f colon -35 KPX f period -72 KPX f hyphen -54 KPX k uring -30 KPX k ecaron -35 KPX k yacute -35 KPX k ydieresis -35 KPX k udieresis -30 KPX k ucircumflex -30 KPX k ugrave -30 KPX k uacute -30 KPX k otilde -35 KPX k odieresis -35 KPX k ocircumflex -35 KPX k ograve -35 KPX k oacute -35 KPX k edieresis -35 KPX k ecircumflex -35 KPX k egrave -35 KPX k eacute -35 KPX k aring -17 KPX k atilde -17 KPX k adieresis -17 KPX k acircumflex -17 KPX k agrave -17 KPX k aacute -17 KPX k y -35 KPX k u -30 KPX k o -35 KPX k e -35 KPX k a -17 KPX n quotedblbase -44 KPX n quotedblright -54 KPX n quotedblleft -72 KPX o quotedblbase -63 KPX o quotedblright -35 KPX o quotedblleft -72 KPX o x -30 KPX o period -17 KPX o hyphen 18 KPX r ograve -21 KPX r hyphen -63 KPX r quotedblbase -151 KPX r edieresis -21 KPX r colon -17 KPX r eacute -21 KPX r ccedilla -21 KPX r racute -17 KPX r quotedblright 41 KPX r egrave -21 KPX r otilde -21 KPX r ccaron -21 KPX r dcaron 35 KPX r rcaron -17 KPX r ntilde -17 KPX r ocircumflex -21 KPX r gbreve -17 KPX r ecircumflex -21 KPX r odieresis -21 KPX r cacute -21 KPX r period -91 KPX r x -26 KPX r e -21 KPX r ecaron -21 KPX r c -21 KPX r guillemotleft -35 KPX r d -17 KPX r g -17 KPX r h -17 KPX r m -17 KPX r o -21 KPX r n -17 KPX r q -17 KPX r r -17 KPX r ncaron -17 KPX r oacute -21 KPX v quotedblbase -132 KPX v quotedblright -17 KPX v guillemotright -17 KPX v guillemotleft -17 KPX v colon -54 KPX v period -77 KPX v hyphen -26 KPX w quotedblbase -104 KPX w guillemotright -17 KPX w guillemotleft -17 KPX w colon -54 KPX w period -91 KPX x ecaron -30 KPX x ccaron -17 KPX x cacute -17 KPX x otilde -30 KPX x odieresis -30 KPX x ocircumflex -30 KPX x ograve -30 KPX x oacute -30 KPX x edieresis -30 KPX x ecircumflex -30 KPX x egrave -30 KPX x eacute -30 KPX x ccedilla -17 KPX x o -30 KPX x e -30 KPX x c -17 KPX y quotedblbase -146 KPX y guillemotright -17 KPX y guillemotleft -17 KPX y colon -72 KPX y period -142 KPX y hyphen -17 KPX guillemotleft Tcaron -54 KPX guillemotleft Dcaron -17 KPX guillemotleft Ccaron -17 KPX guillemotleft Cacute -17 KPX guillemotleft Gbreve -17 KPX guillemotleft yacute -17 KPX guillemotleft Yacute -72 KPX guillemotleft Ydieresis -72 KPX guillemotleft ydieresis -17 KPX guillemotleft AE 73 KPX guillemotleft Ccedilla -17 KPX guillemotleft y -17 KPX guillemotleft w -17 KPX guillemotleft v -17 KPX guillemotleft Y -72 KPX guillemotleft W -17 KPX guillemotleft V -54 KPX guillemotleft T -54 KPX guillemotleft J -17 KPX guillemotleft G -17 KPX guillemotleft D -17 KPX guillemotleft C -17 KPX guillemotleft B -17 KPX guillemotright Tcaron -91 KPX guillemotright Dcaron -17 KPX guillemotright Ccaron -17 KPX guillemotright Cacute -17 KPX guillemotright yacute -17 KPX guillemotright Yacute -109 KPX guillemotright Ograve -17 KPX guillemotright Ocircumflex -17 KPX guillemotright Oacute -17 KPX guillemotright Aacute -35 KPX guillemotright Acircumflex -35 KPX guillemotright Ydieresis -109 KPX guillemotright ydieresis -17 KPX guillemotright Otilde -17 KPX guillemotright Atilde -35 KPX guillemotright Agrave -35 KPX guillemotright Odieresis -17 KPX guillemotright Ccedilla -17 KPX guillemotright Adieresis -35 KPX guillemotright y -17 KPX guillemotright w -17 KPX guillemotright v -17 KPX guillemotright Y -109 KPX guillemotright X -54 KPX guillemotright W -54 KPX guillemotright V -86 KPX guillemotright T -91 KPX guillemotright O -17 KPX guillemotright J -17 KPX guillemotright D -17 KPX guillemotright C -17 KPX guillemotright B -35 KPX guillemotright A -35 KPX Agrave ygrave -67 KPX Agrave ycircumflex -67 KPX Agrave wdieresis -40 KPX Agrave wacute -40 KPX Agrave wcircumflex -40 KPX Agrave tcommaaccent -17 KPX Agrave uni022F -17 KPX Agrave ohungarumlaut -17 KPX Agrave obreve -17 KPX Agrave omacron -17 KPX Agrave eogonek -17 KPX Agrave edotaccent -17 KPX Agrave ebreve -17 KPX Agrave emacron -17 KPX Agrave cdotaccent -17 KPX Agrave Ygrave -77 KPX Agrave Ycircumflex -77 KPX Agrave Wcircumflex -54 KPX Agrave Wdieresis -54 KPX Agrave Wgrave -54 KPX Agrave Tcommaaccent -77 KPX Agrave uni022E -17 KPX Agrave Ohungarumlaut -17 KPX Agrave Obreve -17 KPX Agrave Omacron -17 KPX Agrave Gdotaccent -17 KPX Agrave Gcircumflex -17 KPX Agrave Cdotaccent -17 KPX Agrave Ccircumflex -17 KPX Agrave Aogonek 27 KPX Agrave Abreve 27 KPX Agrave Amacron 27 KPX Agrave tcaron -17 KPX Agrave Tcaron -77 KPX Agrave ecaron -17 KPX Agrave dcaron -17 KPX Agrave ccaron -17 KPX Agrave Ccaron -17 KPX Agrave cacute -17 KPX Agrave Cacute -17 KPX Agrave Gbreve -17 KPX Agrave yacute -67 KPX Agrave Yacute -77 KPX Agrave Ograve -17 KPX Agrave Ocircumflex -17 KPX Agrave Oacute -17 KPX Agrave Aacute 27 KPX Agrave Acircumflex 27 KPX Agrave quotedblbase 22 KPX Agrave Ydieresis -77 KPX Agrave ydieresis -67 KPX Agrave quotedblright -123 KPX Agrave quotedblleft -128 KPX Agrave Otilde -17 KPX Agrave Atilde 27 KPX Agrave Agrave 27 KPX Agrave guillemotleft -35 KPX Agrave otilde -17 KPX Agrave odieresis -17 KPX Agrave ocircumflex -17 KPX Agrave ograve -17 KPX Agrave oacute -17 KPX Agrave edieresis -17 KPX Agrave ecircumflex -17 KPX Agrave egrave -17 KPX Agrave eacute -17 KPX Agrave ccedilla -17 KPX Agrave Odieresis -17 KPX Agrave Ccedilla -17 KPX Agrave Adieresis 27 KPX Agrave y -67 KPX Agrave w -40 KPX Agrave v -58 KPX Agrave t -17 KPX Agrave q -17 KPX Agrave o -17 KPX Agrave f -35 KPX Agrave e -17 KPX Agrave d -17 KPX Agrave c -17 KPX Agrave Y -77 KPX Agrave W -54 KPX Agrave V -63 KPX Agrave T -77 KPX Agrave Q -17 KPX Agrave O -17 KPX Agrave G -17 KPX Agrave C -17 KPX Agrave A 27 KPX Agrave colon -17 KPX Agrave period -17 KPX Agrave hyphen -21 KPX Aacute ygrave -67 KPX Aacute ycircumflex -67 KPX Aacute wdieresis -40 KPX Aacute wacute -40 KPX Aacute wcircumflex -40 KPX Aacute tcommaaccent -17 KPX Aacute uni022F -17 KPX Aacute ohungarumlaut -17 KPX Aacute obreve -17 KPX Aacute omacron -17 KPX Aacute eogonek -17 KPX Aacute edotaccent -17 KPX Aacute ebreve -17 KPX Aacute emacron -17 KPX Aacute cdotaccent -17 KPX Aacute Ygrave -77 KPX Aacute Ycircumflex -77 KPX Aacute Wcircumflex -54 KPX Aacute Wdieresis -54 KPX Aacute Wacute -54 KPX Aacute Wgrave -54 KPX Aacute Tcommaaccent -77 KPX Aacute uni022E -17 KPX Aacute Ohungarumlaut -17 KPX Aacute Obreve -17 KPX Aacute Omacron -17 KPX Aacute Gdotaccent -17 KPX Aacute Gcircumflex -17 KPX Aacute Cdotaccent -17 KPX Aacute Ccircumflex -17 KPX Aacute Aogonek 27 KPX Aacute Abreve 27 KPX Aacute Amacron 27 KPX Aacute tcaron -17 KPX Aacute Tcaron -77 KPX Aacute ecaron -17 KPX Aacute dcaron -17 KPX Aacute ccaron -17 KPX Aacute Ccaron -17 KPX Aacute cacute -17 KPX Aacute Cacute -17 KPX Aacute Gbreve -17 KPX Aacute yacute -67 KPX Aacute Yacute -77 KPX Aacute Ograve -17 KPX Aacute Ocircumflex -17 KPX Aacute Oacute -17 KPX Aacute Aacute 27 KPX Aacute Acircumflex 27 KPX Aacute quotedblbase 22 KPX Aacute Ydieresis -77 KPX Aacute ydieresis -67 KPX Aacute quotedblright -123 KPX Aacute quotedblleft -128 KPX Aacute Otilde -17 KPX Aacute Atilde 27 KPX Aacute Agrave 27 KPX Aacute guillemotleft -35 KPX Aacute otilde -17 KPX Aacute odieresis -17 KPX Aacute ocircumflex -17 KPX Aacute ograve -17 KPX Aacute oacute -17 KPX Aacute edieresis -17 KPX Aacute ecircumflex -17 KPX Aacute egrave -17 KPX Aacute eacute -17 KPX Aacute ccedilla -17 KPX Aacute Odieresis -17 KPX Aacute Ccedilla -17 KPX Aacute Adieresis 27 KPX Aacute y -67 KPX Aacute w -40 KPX Aacute v -58 KPX Aacute t -17 KPX Aacute q -17 KPX Aacute o -17 KPX Aacute f -35 KPX Aacute e -17 KPX Aacute d -17 KPX Aacute c -17 KPX Aacute Y -77 KPX Aacute W -54 KPX Aacute V -63 KPX Aacute T -77 KPX Aacute Q -17 KPX Aacute O -17 KPX Aacute G -17 KPX Aacute C -17 KPX Aacute A 27 KPX Aacute colon -17 KPX Aacute period -17 KPX Aacute hyphen -21 KPX Acircumflex ygrave -67 KPX Acircumflex ycircumflex -67 KPX Acircumflex wdieresis -40 KPX Acircumflex wacute -40 KPX Acircumflex wcircumflex -40 KPX Acircumflex tcommaaccent -17 KPX Acircumflex uni022F -17 KPX Acircumflex ohungarumlaut -17 KPX Acircumflex obreve -17 KPX Acircumflex omacron -17 KPX Acircumflex eogonek -17 KPX Acircumflex edotaccent -17 KPX Acircumflex ebreve -17 KPX Acircumflex emacron -17 KPX Acircumflex cdotaccent -17 KPX Acircumflex Ygrave -77 KPX Acircumflex Ycircumflex -77 KPX Acircumflex Wcircumflex -54 KPX Acircumflex Wdieresis -54 KPX Acircumflex Wacute -54 KPX Acircumflex Wgrave -54 KPX Acircumflex Tcommaaccent -77 KPX Acircumflex uni022E -17 KPX Acircumflex Ohungarumlaut -17 KPX Acircumflex Obreve -17 KPX Acircumflex Omacron -17 KPX Acircumflex Gdotaccent -17 KPX Acircumflex Gcircumflex -17 KPX Acircumflex Cdotaccent -17 KPX Acircumflex Ccircumflex -17 KPX Acircumflex Aogonek 27 KPX Acircumflex Abreve 27 KPX Acircumflex Amacron 27 KPX Acircumflex tcaron -17 KPX Acircumflex Tcaron -77 KPX Acircumflex ecaron -17 KPX Acircumflex dcaron -17 KPX Acircumflex ccaron -17 KPX Acircumflex Ccaron -17 KPX Acircumflex cacute -17 KPX Acircumflex Cacute -17 KPX Acircumflex Gbreve -17 KPX Acircumflex yacute -67 KPX Acircumflex Yacute -77 KPX Acircumflex Ograve -17 KPX Acircumflex Ocircumflex -17 KPX Acircumflex Oacute -17 KPX Acircumflex Aacute 27 KPX Acircumflex Acircumflex 27 KPX Acircumflex quotedblbase 22 KPX Acircumflex Ydieresis -77 KPX Acircumflex ydieresis -67 KPX Acircumflex quotedblright -123 KPX Acircumflex quotedblleft -128 KPX Acircumflex Otilde -17 KPX Acircumflex Atilde 27 KPX Acircumflex Agrave 27 KPX Acircumflex guillemotleft -35 KPX Acircumflex otilde -17 KPX Acircumflex odieresis -17 KPX Acircumflex ocircumflex -17 KPX Acircumflex ograve -17 KPX Acircumflex oacute -17 KPX Acircumflex edieresis -17 KPX Acircumflex ecircumflex -17 KPX Acircumflex egrave -17 KPX Acircumflex eacute -17 KPX Acircumflex ccedilla -17 KPX Acircumflex Odieresis -17 KPX Acircumflex Ccedilla -17 KPX Acircumflex Adieresis 27 KPX Acircumflex y -67 KPX Acircumflex w -40 KPX Acircumflex v -58 KPX Acircumflex t -17 KPX Acircumflex q -17 KPX Acircumflex o -17 KPX Acircumflex f -35 KPX Acircumflex e -17 KPX Acircumflex d -17 KPX Acircumflex c -17 KPX Acircumflex Y -77 KPX Acircumflex W -54 KPX Acircumflex V -63 KPX Acircumflex T -77 KPX Acircumflex Q -17 KPX Acircumflex O -17 KPX Acircumflex G -17 KPX Acircumflex C -17 KPX Acircumflex A 27 KPX Acircumflex colon -17 KPX Acircumflex period -17 KPX Acircumflex hyphen -21 KPX Atilde ygrave -67 KPX Atilde ycircumflex -67 KPX Atilde wdieresis -40 KPX Atilde wacute -40 KPX Atilde wcircumflex -40 KPX Atilde tcommaaccent -17 KPX Atilde ohungarumlaut -17 KPX Atilde obreve -17 KPX Atilde omacron -17 KPX Atilde eogonek -17 KPX Atilde edotaccent -17 KPX Atilde ebreve -17 KPX Atilde emacron -17 KPX Atilde cdotaccent -17 KPX Atilde Ygrave -77 KPX Atilde Ycircumflex -77 KPX Atilde Wcircumflex -54 KPX Atilde Wdieresis -54 KPX Atilde Wacute -54 KPX Atilde Wgrave -54 KPX Atilde Tcommaaccent -77 KPX Atilde uni022E -17 KPX Atilde Ohungarumlaut -17 KPX Atilde Obreve -17 KPX Atilde Omacron -17 KPX Atilde Gdotaccent -17 KPX Atilde Gcircumflex -17 KPX Atilde Cdotaccent -17 KPX Atilde Ccircumflex -17 KPX Atilde Aogonek 27 KPX Atilde Abreve 27 KPX Atilde Amacron 27 KPX Atilde tcaron -17 KPX Atilde Tcaron -77 KPX Atilde ecaron -17 KPX Atilde dcaron -17 KPX Atilde ccaron -17 KPX Atilde Ccaron -17 KPX Atilde cacute -17 KPX Atilde Cacute -17 KPX Atilde Gbreve -17 KPX Atilde yacute -67 KPX Atilde Yacute -77 KPX Atilde Ograve -17 KPX Atilde Ocircumflex -17 KPX Atilde Oacute -17 KPX Atilde Aacute 27 KPX Atilde Acircumflex 27 KPX Atilde quotedblbase 22 KPX Atilde Ydieresis -77 KPX Atilde ydieresis -67 KPX Atilde quotedblright -123 KPX Atilde quotedblleft -128 KPX Atilde Otilde -17 KPX Atilde Atilde 27 KPX Atilde Agrave 27 KPX Atilde guillemotleft -35 KPX Atilde otilde -17 KPX Atilde odieresis -17 KPX Atilde ocircumflex -17 KPX Atilde ograve -17 KPX Atilde oacute -17 KPX Atilde edieresis -17 KPX Atilde ecircumflex -17 KPX Atilde egrave -17 KPX Atilde eacute -17 KPX Atilde ccedilla -17 KPX Atilde Odieresis -17 KPX Atilde Ccedilla -17 KPX Atilde Adieresis 27 KPX Atilde y -67 KPX Atilde w -40 KPX Atilde v -58 KPX Atilde t -17 KPX Atilde q -17 KPX Atilde o -17 KPX Atilde f -35 KPX Atilde e -17 KPX Atilde d -17 KPX Atilde c -17 KPX Atilde Y -77 KPX Atilde W -54 KPX Atilde V -63 KPX Atilde T -77 KPX Atilde Q -17 KPX Atilde O -17 KPX Atilde G -17 KPX Atilde C -17 KPX Atilde A 27 KPX Atilde colon -17 KPX Atilde period -17 KPX Atilde hyphen -21 KPX Adieresis ygrave -67 KPX Adieresis ycircumflex -67 KPX Adieresis wdieresis -40 KPX Adieresis wacute -40 KPX Adieresis wcircumflex -40 KPX Adieresis tcommaaccent -17 KPX Adieresis uni022F -17 KPX Adieresis ohungarumlaut -17 KPX Adieresis obreve -17 KPX Adieresis omacron -17 KPX Adieresis eogonek -17 KPX Adieresis edotaccent -17 KPX Adieresis ebreve -17 KPX Adieresis emacron -17 KPX Adieresis cdotaccent -17 KPX Adieresis Ygrave -77 KPX Adieresis Ycircumflex -77 KPX Adieresis Wcircumflex -54 KPX Adieresis Wdieresis -54 KPX Adieresis Wacute -54 KPX Adieresis Wgrave -54 KPX Adieresis Tcommaaccent -77 KPX Adieresis uni022E -17 KPX Adieresis Ohungarumlaut -17 KPX Adieresis Obreve -17 KPX Adieresis Omacron -17 KPX Adieresis Gdotaccent -17 KPX Adieresis Gcircumflex -17 KPX Adieresis Cdotaccent -17 KPX Adieresis Ccircumflex -17 KPX Adieresis Aogonek 27 KPX Adieresis Abreve 27 KPX Adieresis Amacron 27 KPX Adieresis tcaron -17 KPX Adieresis Tcaron -77 KPX Adieresis ecaron -17 KPX Adieresis dcaron -17 KPX Adieresis ccaron -17 KPX Adieresis Ccaron -17 KPX Adieresis cacute -17 KPX Adieresis Cacute -17 KPX Adieresis Gbreve -17 KPX Adieresis yacute -67 KPX Adieresis Yacute -77 KPX Adieresis Ograve -17 KPX Adieresis Ocircumflex -17 KPX Adieresis Oacute -17 KPX Adieresis Aacute 27 KPX Adieresis Acircumflex 27 KPX Adieresis quotedblbase 22 KPX Adieresis Ydieresis -77 KPX Adieresis ydieresis -67 KPX Adieresis quotedblright -123 KPX Adieresis quotedblleft -128 KPX Adieresis Otilde -17 KPX Adieresis Atilde 27 KPX Adieresis Agrave 27 KPX Adieresis guillemotleft -35 KPX Adieresis otilde -17 KPX Adieresis odieresis -17 KPX Adieresis ocircumflex -17 KPX Adieresis ograve -17 KPX Adieresis oacute -17 KPX Adieresis edieresis -17 KPX Adieresis ecircumflex -17 KPX Adieresis egrave -17 KPX Adieresis eacute -17 KPX Adieresis ccedilla -17 KPX Adieresis Odieresis -17 KPX Adieresis Ccedilla -17 KPX Adieresis Adieresis 27 KPX Adieresis y -67 KPX Adieresis w -40 KPX Adieresis v -58 KPX Adieresis t -17 KPX Adieresis q -17 KPX Adieresis o -17 KPX Adieresis f -35 KPX Adieresis e -17 KPX Adieresis d -17 KPX Adieresis c -17 KPX Adieresis Y -77 KPX Adieresis W -54 KPX Adieresis V -63 KPX Adieresis T -77 KPX Adieresis Q -17 KPX Adieresis O -17 KPX Adieresis G -17 KPX Adieresis C -17 KPX Adieresis A 27 KPX Adieresis colon -17 KPX Adieresis period -17 KPX Adieresis hyphen -21 KPX AE quotedblbase -54 KPX AE quotedblright -44 KPX AE quotedblleft -40 KPX Ccedilla Yacute -17 KPX Ccedilla Ydieresis -17 KPX Ccedilla quotedblright 18 KPX Ccedilla guillemotright -17 KPX Ccedilla guillemotleft -17 KPX Ccedilla Y -17 KPX Eth Ygrave -54 KPX Eth uni0232 -54 KPX Eth Ycircumflex -54 KPX Eth Aogonek -17 KPX Eth Abreve -17 KPX Eth Amacron -17 KPX Eth Yacute -54 KPX Eth Aacute -17 KPX Eth Acircumflex -17 KPX Eth quotedblbase -91 KPX Eth Ydieresis -54 KPX Eth quotedblright -26 KPX Eth quotedblleft -21 KPX Eth Atilde -17 KPX Eth Agrave -17 KPX Eth guillemotright -17 KPX Eth guillemotleft -17 KPX Eth Adieresis -17 KPX Eth Y -54 KPX Eth V -17 KPX Eth A -17 KPX Ograve Yacute -54 KPX Ograve Aacute -17 KPX Ograve Acircumflex -17 KPX Ograve quotedblbase -91 KPX Ograve Ydieresis -54 KPX Ograve quotedblright -17 KPX Ograve quotedblleft -21 KPX Ograve Atilde -17 KPX Ograve Agrave -17 KPX Ograve guillemotleft -17 KPX Ograve Adieresis -17 KPX Ograve Y -54 KPX Ograve X -63 KPX Ograve V -17 KPX Ograve A -17 KPX Ograve colon -17 KPX Ograve period -40 KPX Ograve hyphen 27 KPX Oacute Yacute -54 KPX Oacute Aacute -17 KPX Oacute Acircumflex -17 KPX Oacute quotedblbase -91 KPX Oacute Ydieresis -54 KPX Oacute quotedblright -17 KPX Oacute quotedblleft -21 KPX Oacute Atilde -17 KPX Oacute Agrave -17 KPX Oacute guillemotleft -17 KPX Oacute Adieresis -17 KPX Oacute Y -54 KPX Oacute X -63 KPX Oacute V -17 KPX Oacute A -17 KPX Oacute colon -17 KPX Oacute period -40 KPX Oacute hyphen 27 KPX Ocircumflex Yacute -54 KPX Ocircumflex Aacute -17 KPX Ocircumflex Acircumflex -17 KPX Ocircumflex quotedblbase -91 KPX Ocircumflex Ydieresis -54 KPX Ocircumflex quotedblright -17 KPX Ocircumflex quotedblleft -21 KPX Ocircumflex Atilde -17 KPX Ocircumflex Agrave -17 KPX Ocircumflex guillemotleft -17 KPX Ocircumflex Adieresis -17 KPX Ocircumflex Y -54 KPX Ocircumflex X -63 KPX Ocircumflex V -17 KPX Ocircumflex A -17 KPX Ocircumflex colon -17 KPX Ocircumflex period -40 KPX Ocircumflex hyphen 27 KPX Otilde Yacute -54 KPX Otilde Aacute -17 KPX Otilde Acircumflex -17 KPX Otilde quotedblbase -91 KPX Otilde Ydieresis -54 KPX Otilde quotedblright -17 KPX Otilde quotedblleft -21 KPX Otilde Atilde -17 KPX Otilde Agrave -17 KPX Otilde guillemotleft -17 KPX Otilde Adieresis -17 KPX Otilde Y -54 KPX Otilde X -63 KPX Otilde V -17 KPX Otilde A -17 KPX Otilde colon -17 KPX Otilde period -40 KPX Otilde hyphen 27 KPX Odieresis Yacute -54 KPX Odieresis Aacute -17 KPX Odieresis Acircumflex -17 KPX Odieresis quotedblbase -91 KPX Odieresis Ydieresis -54 KPX Odieresis quotedblright -17 KPX Odieresis quotedblleft -21 KPX Odieresis Atilde -17 KPX Odieresis Agrave -17 KPX Odieresis guillemotleft -17 KPX Odieresis Adieresis -17 KPX Odieresis Y -54 KPX Odieresis X -63 KPX Odieresis V -17 KPX Odieresis A -17 KPX Odieresis colon -17 KPX Odieresis period -40 KPX Odieresis hyphen 27 KPX Ugrave Zcaron -17 KPX Ugrave Z -17 KPX Uacute Zcaron -17 KPX Uacute Z -17 KPX Ucircumflex Zcaron -17 KPX Ucircumflex Z -17 KPX Udieresis Zcaron -17 KPX Udieresis Z -17 KPX Yacute uring -114 KPX Yacute ecaron -132 KPX Yacute Ccaron -54 KPX Yacute Cacute -54 KPX Yacute Ograve -54 KPX Yacute Ocircumflex -54 KPX Yacute Oacute -54 KPX Yacute Aacute -77 KPX Yacute Acircumflex -77 KPX Yacute quotedblbase -128 KPX Yacute quotedblright -17 KPX Yacute quotedblleft -54 KPX Yacute Otilde -54 KPX Yacute Atilde -77 KPX Yacute Agrave -77 KPX Yacute guillemotright -72 KPX Yacute guillemotleft -109 KPX Yacute udieresis -114 KPX Yacute ucircumflex -114 KPX Yacute ugrave -114 KPX Yacute uacute -114 KPX Yacute otilde -132 KPX Yacute odieresis -132 KPX Yacute ocircumflex -132 KPX Yacute ograve -132 KPX Yacute oacute -132 KPX Yacute edieresis -132 KPX Yacute ecircumflex -132 KPX Yacute egrave -132 KPX Yacute eacute -132 KPX Yacute aring -137 KPX Yacute atilde -137 KPX Yacute adieresis -137 KPX Yacute acircumflex -137 KPX Yacute agrave -137 KPX Yacute aacute -137 KPX Yacute Odieresis -54 KPX Yacute Ccedilla -54 KPX Yacute Adieresis -77 KPX Yacute u -114 KPX Yacute o -132 KPX Yacute i -35 KPX Yacute e -132 KPX Yacute a -137 KPX Yacute O -54 KPX Yacute C -54 KPX Yacute A -77 KPX Yacute colon -132 KPX Yacute period -202 KPX Yacute hyphen -118 KPX Thorn quotedblbase -91 KPX Thorn quotedblleft -17 KPX Thorn colon -35 KPX Thorn period -72 KPX germandbls quotedblbase -40 KPX germandbls quotedblright -54 KPX germandbls quotedblleft -54 KPX germandbls hyphen 18 KPX egrave x -17 KPX eacute x -17 KPX ecircumflex x -17 KPX edieresis x -17 KPX eth quotedblbase -35 KPX eth quotedblright -54 KPX eth quotedblleft -44 KPX ntilde quotedblbase -44 KPX ntilde quotedblright -54 KPX ntilde quotedblleft -72 KPX ograve quotedblbase -63 KPX ograve quotedblright -35 KPX ograve quotedblleft -72 KPX ograve x -30 KPX ograve period -17 KPX ograve hyphen 18 KPX oacute quotedblbase -63 KPX oacute quotedblright -35 KPX oacute quotedblleft -72 KPX oacute x -30 KPX oacute period -17 KPX oacute hyphen 18 KPX ocircumflex quotedblbase -63 KPX ocircumflex quotedblright -35 KPX ocircumflex quotedblleft -72 KPX ocircumflex x -30 KPX ocircumflex period -17 KPX ocircumflex hyphen 18 KPX otilde quotedblbase -63 KPX otilde quotedblright -35 KPX otilde quotedblleft -72 KPX otilde x -30 KPX otilde period -17 KPX otilde hyphen 18 KPX odieresis quotedblbase -63 KPX odieresis quotedblright -35 KPX odieresis quotedblleft -72 KPX odieresis x -30 KPX odieresis period -17 KPX odieresis hyphen 18 KPX yacute quotedblbase -146 KPX yacute guillemotright -17 KPX yacute guillemotleft -17 KPX yacute colon -72 KPX yacute period -142 KPX yacute hyphen -17 KPX ydieresis quotedblbase -146 KPX ydieresis guillemotright -17 KPX ydieresis guillemotleft -17 KPX ydieresis colon -72 KPX ydieresis period -142 KPX ydieresis hyphen -17 KPX Amacron quotedblbase 22 KPX Amacron quotedblright -124 KPX Amacron quotedblleft -128 KPX Amacron guillemotleft -35 KPX Amacron ygrave -67 KPX Amacron ycircumflex -67 KPX Amacron wdieresis -40 KPX Amacron wacute -40 KPX Amacron wcircumflex -40 KPX Amacron tcaron -17 KPX Amacron tcommaaccent -17 KPX Amacron uni022F -17 KPX Amacron ohungarumlaut -17 KPX Amacron obreve -17 KPX Amacron omacron -17 KPX Amacron ecaron -17 KPX Amacron eogonek -17 KPX Amacron edotaccent -17 KPX Amacron ebreve -17 KPX Amacron emacron -17 KPX Amacron cdotaccent -17 KPX Amacron Ygrave -77 KPX Amacron Ydieresis -77 KPX Amacron Ycircumflex -77 KPX Amacron Yacute -77 KPX Amacron Wcircumflex -54 KPX Amacron Wdieresis -54 KPX Amacron Wacute -54 KPX Amacron Wgrave -54 KPX Amacron ydieresis -67 KPX Amacron yacute -67 KPX Amacron y -67 KPX Amacron w -40 KPX Amacron v -58 KPX Amacron t -17 KPX Amacron q -17 KPX Amacron odieresis -17 KPX Amacron otilde -17 KPX Amacron ocircumflex -17 KPX Amacron oacute -17 KPX Amacron ograve -17 KPX Amacron o -17 KPX Amacron f -35 KPX Amacron edieresis -17 KPX Amacron ecircumflex -17 KPX Amacron eacute -17 KPX Amacron egrave -17 KPX Amacron ccedilla -17 KPX Amacron e -17 KPX Amacron dcroat -17 KPX Amacron dcaron -17 KPX Amacron d -17 KPX Amacron c -17 KPX Amacron Adieresis 27 KPX Amacron Atilde 27 KPX Amacron Acircumflex 27 KPX Amacron Aacute 27 KPX Amacron Agrave 27 KPX Amacron Y -77 KPX Amacron V -63 KPX Amacron W -54 KPX Amacron T -77 KPX Amacron Q -17 KPX Amacron Odieresis -17 KPX Amacron Otilde -17 KPX Amacron Ocircumflex -17 KPX Amacron Oacute -17 KPX Amacron Ograve -17 KPX Amacron O -17 KPX Amacron G -17 KPX Amacron C -17 KPX Amacron A 27 KPX Amacron colon -17 KPX Amacron period -17 KPX Amacron hyphen -21 KPX Amacron Tcaron -77 KPX Amacron Tcommaaccent -77 KPX Amacron uni022E -17 KPX Amacron Ohungarumlaut -17 KPX Amacron Obreve -17 KPX Amacron Omacron -17 KPX Amacron Gdotaccent -17 KPX Amacron Gcircumflex -17 KPX Amacron Ccaron -17 KPX Amacron Cdotaccent -17 KPX Amacron Ccircumflex -17 KPX Amacron Cacute -17 KPX Amacron Aogonek 27 KPX Amacron Abreve 27 KPX Amacron Amacron 27 KPX Abreve quotedblbase 22 KPX Abreve quotedblright -124 KPX Abreve quotedblleft -128 KPX Abreve guillemotleft -35 KPX Abreve ygrave -67 KPX Abreve ycircumflex -67 KPX Abreve wdieresis -40 KPX Abreve wacute -40 KPX Abreve wcircumflex -40 KPX Abreve tcaron -17 KPX Abreve tcommaaccent -17 KPX Abreve uni022F -17 KPX Abreve ohungarumlaut -17 KPX Abreve obreve -17 KPX Abreve omacron -17 KPX Abreve ecaron -17 KPX Abreve eogonek -17 KPX Abreve edotaccent -17 KPX Abreve ebreve -17 KPX Abreve emacron -17 KPX Abreve cdotaccent -17 KPX Abreve Ygrave -77 KPX Abreve Ydieresis -77 KPX Abreve Ycircumflex -77 KPX Abreve Yacute -77 KPX Abreve Wcircumflex -54 KPX Abreve Wdieresis -54 KPX Abreve Wacute -54 KPX Abreve Wgrave -54 KPX Abreve ydieresis -67 KPX Abreve yacute -67 KPX Abreve y -67 KPX Abreve w -40 KPX Abreve v -58 KPX Abreve t -17 KPX Abreve q -17 KPX Abreve odieresis -17 KPX Abreve otilde -17 KPX Abreve ocircumflex -17 KPX Abreve oacute -17 KPX Abreve ograve -17 KPX Abreve o -17 KPX Abreve f -35 KPX Abreve edieresis -17 KPX Abreve ecircumflex -17 KPX Abreve eacute -17 KPX Abreve egrave -17 KPX Abreve ccedilla -17 KPX Abreve e -17 KPX Abreve dcroat -17 KPX Abreve dcaron -17 KPX Abreve d -17 KPX Abreve c -17 KPX Abreve Adieresis 27 KPX Abreve Atilde 27 KPX Abreve Acircumflex 27 KPX Abreve Aacute 27 KPX Abreve Agrave 27 KPX Abreve Y -77 KPX Abreve V -63 KPX Abreve W -54 KPX Abreve T -77 KPX Abreve Q -17 KPX Abreve Odieresis -17 KPX Abreve Otilde -17 KPX Abreve Ocircumflex -17 KPX Abreve Oacute -17 KPX Abreve Ograve -17 KPX Abreve O -17 KPX Abreve G -17 KPX Abreve C -17 KPX Abreve A 27 KPX Abreve colon -17 KPX Abreve period -17 KPX Abreve hyphen -21 KPX Abreve Tcaron -77 KPX Abreve Tcommaaccent -77 KPX Abreve uni022E -17 KPX Abreve Ohungarumlaut -17 KPX Abreve Obreve -17 KPX Abreve Omacron -17 KPX Abreve Gdotaccent -17 KPX Abreve Gcircumflex -17 KPX Abreve Ccaron -17 KPX Abreve Cdotaccent -17 KPX Abreve Ccircumflex -17 KPX Abreve Cacute -17 KPX Abreve Aogonek 27 KPX Abreve Abreve 27 KPX Abreve Amacron 27 KPX Aogonek quotedblbase 22 KPX Aogonek quotedblright -124 KPX Aogonek quotedblleft -128 KPX Aogonek guillemotleft -35 KPX Aogonek wdieresis -40 KPX Aogonek wacute -40 KPX Aogonek wcircumflex -40 KPX Aogonek tcaron -17 KPX Aogonek tcommaaccent -17 KPX Aogonek uni022F -17 KPX Aogonek ohungarumlaut -17 KPX Aogonek obreve -17 KPX Aogonek omacron -17 KPX Aogonek ecaron -17 KPX Aogonek eogonek -17 KPX Aogonek edotaccent -17 KPX Aogonek ebreve -17 KPX Aogonek emacron -17 KPX Aogonek cdotaccent -17 KPX Aogonek Ygrave -77 KPX Aogonek Ydieresis -77 KPX Aogonek Ycircumflex -77 KPX Aogonek Yacute -77 KPX Aogonek Wcircumflex -54 KPX Aogonek Wdieresis -54 KPX Aogonek Wacute -54 KPX Aogonek Wgrave -54 KPX Aogonek w -40 KPX Aogonek v -58 KPX Aogonek t -17 KPX Aogonek q -17 KPX Aogonek odieresis -17 KPX Aogonek otilde -17 KPX Aogonek ocircumflex -17 KPX Aogonek oacute -17 KPX Aogonek ograve -17 KPX Aogonek o -17 KPX Aogonek f -35 KPX Aogonek edieresis -17 KPX Aogonek ecircumflex -17 KPX Aogonek eacute -17 KPX Aogonek egrave -17 KPX Aogonek ccedilla -17 KPX Aogonek e -17 KPX Aogonek dcroat -17 KPX Aogonek dcaron -17 KPX Aogonek d -17 KPX Aogonek c -17 KPX Aogonek Adieresis 27 KPX Aogonek Atilde 27 KPX Aogonek Acircumflex 27 KPX Aogonek Aacute 27 KPX Aogonek Agrave 27 KPX Aogonek Y -77 KPX Aogonek V -63 KPX Aogonek W -54 KPX Aogonek T -77 KPX Aogonek Q -17 KPX Aogonek Odieresis -17 KPX Aogonek Otilde -17 KPX Aogonek Ocircumflex -17 KPX Aogonek Ograve -17 KPX Aogonek Oacute -17 KPX Aogonek O -17 KPX Aogonek G -17 KPX Aogonek C -17 KPX Aogonek colon -17 KPX Aogonek period -17 KPX Aogonek hyphen -21 KPX Aogonek Tcaron -77 KPX Aogonek Tcommaaccent -77 KPX Aogonek uni022E -17 KPX Aogonek Obreve -17 KPX Aogonek Omacron -17 KPX Aogonek Gdotaccent -17 KPX Aogonek Gcircumflex -17 KPX Aogonek Ccaron -17 KPX Aogonek Cdotaccent -17 KPX Aogonek Ccircumflex -17 KPX Aogonek Cacute -17 KPX Aogonek Aogonek 27 KPX Aogonek Abreve 27 KPX Aogonek A 27 KPX Aogonek Amacron 27 KPX Cacute Yacute -17 KPX Cacute Ydieresis -17 KPX Cacute quotedblright 18 KPX Cacute guillemotright -17 KPX Cacute guillemotleft -17 KPX Cacute Y -17 KPX Ccaron Yacute -17 KPX Ccaron Ydieresis -17 KPX Ccaron quotedblright 18 KPX Ccaron guillemotright -17 KPX Ccaron guillemotleft -17 KPX Ccaron Y -17 KPX Dcaron Ygrave -54 KPX Dcaron uni0232 -54 KPX Dcaron Ycircumflex -54 KPX Dcaron Aogonek -17 KPX Dcaron Abreve -17 KPX Dcaron Amacron -17 KPX Dcaron Yacute -54 KPX Dcaron Aacute -17 KPX Dcaron Acircumflex -17 KPX Dcaron quotedblbase -91 KPX Dcaron Ydieresis -54 KPX Dcaron quotedblright -26 KPX Dcaron quotedblleft -21 KPX Dcaron Atilde -17 KPX Dcaron Agrave -17 KPX Dcaron guillemotright -17 KPX Dcaron guillemotleft -17 KPX Dcaron Adieresis -17 KPX Dcaron Y -54 KPX Dcaron V -17 KPX Dcaron A -17 KPX Dcroat Yacute -54 KPX Dcroat Aacute -17 KPX Dcroat Acircumflex -17 KPX Dcroat quotedblbase -91 KPX Dcroat Ydieresis -54 KPX Dcroat quotedblright -26 KPX Dcroat quotedblleft -21 KPX Dcroat Atilde -17 KPX Dcroat Agrave -17 KPX Dcroat guillemotright -17 KPX Dcroat guillemotleft -17 KPX Dcroat Adieresis -17 KPX Dcroat Y -54 KPX Dcroat V -17 KPX Dcroat A -17 KPX ecaron x -17 KPX Gbreve Tcaron -35 KPX Gbreve Yacute -49 KPX Gbreve quotedblbase -26 KPX Gbreve Ydieresis -49 KPX Gbreve quotedblright -21 KPX Gbreve quotedblleft -21 KPX Gbreve guillemotright -17 KPX Gbreve guillemotleft -17 KPX Gbreve Y -49 KPX Gbreve T -35 KPX Lacute udieresis -17 KPX Lacute o -17 KPX Lacute ograve -17 KPX Lacute hyphen -17 KPX Lacute Otilde -35 KPX Lacute uring -17 KPX Lacute Aacute 22 KPX Lacute edieresis -17 KPX Lacute ugrave -17 KPX Lacute Ucircumflex -49 KPX Lacute Yacute -132 KPX Lacute Atilde 22 KPX Lacute quotedblright -262 KPX Lacute egrave -17 KPX Lacute Adieresis 22 KPX Lacute Odieresis -35 KPX Lacute Uacute -49 KPX Lacute otilde -17 KPX Lacute ucircumflex -17 KPX Lacute yacute -91 KPX Lacute Acircumflex 22 KPX Lacute Oacute -35 KPX Lacute ocircumflex -17 KPX Lacute A 22 KPX Lacute ecaron -17 KPX Lacute ecircumflex -17 KPX Lacute quotedblleft -202 KPX Lacute odieresis -17 KPX Lacute uacute -17 KPX Lacute Ydieresis -132 KPX Lacute O -35 KPX Lacute U -49 KPX Lacute T -137 KPX Lacute W -91 KPX Lacute V -109 KPX Lacute Y -132 KPX Lacute eacute -17 KPX Lacute Tcaron -137 KPX Lacute Udieresis -49 KPX Lacute e -17 KPX Lacute Ograve -35 KPX Lacute Ocircumflex -35 KPX Lacute ydieresis -91 KPX Lacute Uring -49 KPX Lacute Ugrave -49 KPX Lacute u -17 KPX Lacute Agrave 22 KPX Lacute y -91 KPX Lacute oacute -17 KPX Lcaron udieresis -17 KPX Lcaron o -17 KPX Lcaron ograve -17 KPX Lcaron hyphen -17 KPX Lcaron Otilde -35 KPX Lcaron uring -17 KPX Lcaron Aacute 22 KPX Lcaron edieresis -17 KPX Lcaron ugrave -17 KPX Lcaron Ucircumflex -49 KPX Lcaron Yacute -132 KPX Lcaron Atilde 22 KPX Lcaron quotedblright -262 KPX Lcaron egrave -17 KPX Lcaron Adieresis 22 KPX Lcaron Odieresis -35 KPX Lcaron Uacute -49 KPX Lcaron otilde -17 KPX Lcaron ucircumflex -17 KPX Lcaron yacute -91 KPX Lcaron Acircumflex 22 KPX Lcaron Oacute -35 KPX Lcaron ocircumflex -17 KPX Lcaron A 22 KPX Lcaron ecaron -17 KPX Lcaron ecircumflex -17 KPX Lcaron quotedblleft -202 KPX Lcaron odieresis -17 KPX Lcaron uacute -17 KPX Lcaron Ydieresis -132 KPX Lcaron O -35 KPX Lcaron U -49 KPX Lcaron T -137 KPX Lcaron W -91 KPX Lcaron V -109 KPX Lcaron Y -132 KPX Lcaron eacute -17 KPX Lcaron Tcaron -137 KPX Lcaron Udieresis -49 KPX Lcaron e -17 KPX Lcaron Ograve -35 KPX Lcaron Ocircumflex -35 KPX Lcaron ydieresis -91 KPX Lcaron Uring -49 KPX Lcaron Ugrave -49 KPX Lcaron u -17 KPX Lcaron Agrave 22 KPX Lcaron y -91 KPX Lcaron oacute -17 KPX ldot l -94 KPX ncaron quotedblbase -44 KPX ncaron quotedblright -54 KPX ncaron quotedblleft -72 KPX Racute udieresis -44 KPX Racute aring -21 KPX Racute ograve -44 KPX Racute hyphen -40 KPX Racute quotedblbase -17 KPX Racute Ccaron -49 KPX Racute Aacute -40 KPX Racute edieresis -44 KPX Racute Y -63 KPX Racute ugrave -44 KPX Racute colon -30 KPX Racute Yacute -63 KPX Racute agrave -21 KPX Racute Atilde -40 KPX Racute adieresis -21 KPX Racute quotedblright -63 KPX Racute egrave -44 KPX Racute Adieresis -40 KPX Racute Cacute -49 KPX Racute otilde -44 KPX Racute ucircumflex -44 KPX Racute yacute -54 KPX Racute atilde -21 KPX Racute Acircumflex -40 KPX Racute ocircumflex -44 KPX Racute A -40 KPX Racute ecaron -44 KPX Racute C -49 KPX Racute ecircumflex -44 KPX Racute quotedblleft -72 KPX Racute odieresis -44 KPX Racute uacute -44 KPX Racute Ydieresis -63 KPX Racute aacute -21 KPX Racute period -35 KPX Racute guillemotright -17 KPX Racute uring -44 KPX Racute W -40 KPX Racute V -54 KPX Racute acircumflex -21 KPX Racute eacute -44 KPX Racute Tcaron -72 KPX Racute a -21 KPX Racute e -44 KPX Racute guillemotleft -54 KPX Racute ydieresis -54 KPX Racute o -44 KPX Racute u -44 KPX Racute Agrave -40 KPX Racute oacute -44 KPX Racute y -54 KPX Racute Ccedilla -49 KPX Racute T -72 KPX racute ograve -21 KPX racute hyphen -63 KPX racute quotedblbase -151 KPX racute edieresis -21 KPX racute colon -17 KPX racute ccedilla -21 KPX racute racute -17 KPX racute quotedblright 41 KPX racute egrave -21 KPX racute otilde -21 KPX racute ccaron -21 KPX racute dcaron 35 KPX racute ntilde -17 KPX racute ocircumflex -21 KPX racute gbreve -17 KPX racute ecircumflex -21 KPX racute odieresis -21 KPX racute cacute -21 KPX racute rcaron -17 KPX racute ncaron -17 KPX racute eacute -21 KPX racute ecaron -21 KPX racute c -21 KPX racute e -21 KPX racute d -17 KPX racute g -17 KPX racute guillemotleft -35 KPX racute m -17 KPX racute o -21 KPX racute n -17 KPX racute q -17 KPX racute r -17 KPX racute period -91 KPX racute h -17 KPX racute x -26 KPX racute oacute -21 KPX Rcaron uring -44 KPX Rcaron Tcaron -72 KPX Rcaron ecaron -44 KPX Rcaron Ccaron -49 KPX Rcaron Cacute -49 KPX Rcaron yacute -54 KPX Rcaron Yacute -63 KPX Rcaron Aacute -40 KPX Rcaron Acircumflex -40 KPX Rcaron quotedblbase -17 KPX Rcaron Ydieresis -63 KPX Rcaron ydieresis -54 KPX Rcaron quotedblright -63 KPX Rcaron quotedblleft -72 KPX Rcaron Atilde -40 KPX Rcaron Agrave -40 KPX Rcaron guillemotright -17 KPX Rcaron guillemotleft -54 KPX Rcaron udieresis -44 KPX Rcaron ucircumflex -44 KPX Rcaron ugrave -44 KPX Rcaron uacute -44 KPX Rcaron otilde -44 KPX Rcaron odieresis -44 KPX Rcaron ocircumflex -44 KPX Rcaron ograve -44 KPX Rcaron oacute -44 KPX Rcaron edieresis -44 KPX Rcaron ecircumflex -44 KPX Rcaron egrave -44 KPX Rcaron eacute -44 KPX Rcaron aring -21 KPX Rcaron atilde -21 KPX Rcaron adieresis -21 KPX Rcaron acircumflex -21 KPX Rcaron agrave -21 KPX Rcaron aacute -21 KPX Rcaron Ccedilla -49 KPX Rcaron Adieresis -40 KPX Rcaron y -54 KPX Rcaron u -44 KPX Rcaron o -44 KPX Rcaron e -44 KPX Rcaron a -21 KPX Rcaron Y -63 KPX Rcaron W -40 KPX Rcaron V -54 KPX Rcaron T -72 KPX Rcaron C -49 KPX Rcaron A -40 KPX Rcaron colon -30 KPX Rcaron period -35 KPX Rcaron hyphen -40 KPX rcaron ograve -21 KPX rcaron hyphen -63 KPX rcaron quotedblbase -151 KPX rcaron edieresis -21 KPX rcaron colon -17 KPX rcaron eacute -21 KPX rcaron ccedilla -21 KPX rcaron racute -17 KPX rcaron quotedblright 41 KPX rcaron egrave -21 KPX rcaron otilde -21 KPX rcaron ccaron -21 KPX rcaron dcaron -17 KPX rcaron rcaron -17 KPX rcaron ntilde -17 KPX rcaron ocircumflex -21 KPX rcaron gbreve -17 KPX rcaron ecircumflex -21 KPX rcaron odieresis -21 KPX rcaron cacute -21 KPX rcaron period -91 KPX rcaron x -26 KPX rcaron e -21 KPX rcaron ecaron -21 KPX rcaron c -21 KPX rcaron guillemotleft -35 KPX rcaron d -17 KPX rcaron g -17 KPX rcaron h -17 KPX rcaron m -17 KPX rcaron o -21 KPX rcaron n -17 KPX rcaron q -17 KPX rcaron r -17 KPX rcaron ncaron -17 KPX rcaron oacute -21 KPX Scedilla Aacute 18 KPX Scedilla Acircumflex 18 KPX Scedilla Atilde 18 KPX Scedilla Agrave 18 KPX Scedilla Adieresis 18 KPX Scedilla A 18 KPX Scaron Aacute 18 KPX Scaron Acircumflex 18 KPX Scaron Atilde 18 KPX Scaron Agrave 18 KPX Scaron Adieresis 18 KPX Scaron A 18 KPX Tcaron udieresis -151 KPX Tcaron aring -165 KPX Tcaron ograve -169 KPX Tcaron hyphen -91 KPX Tcaron quotedblbase -128 KPX Tcaron Ccaron -58 KPX Tcaron otilde -169 KPX Tcaron edieresis -169 KPX Tcaron ugrave -151 KPX Tcaron colon -109 KPX Tcaron agrave -165 KPX Tcaron Atilde -77 KPX Tcaron ecircumflex -169 KPX Tcaron ccedilla -169 KPX Tcaron racute -146 KPX Tcaron quotedblright -21 KPX Tcaron egrave -169 KPX Tcaron Adieresis -77 KPX Tcaron Cacute -58 KPX Tcaron Aacute -77 KPX Tcaron ccaron -169 KPX Tcaron rcaron -146 KPX Tcaron eacute -169 KPX Tcaron ucircumflex -151 KPX Tcaron yacute -155 KPX Tcaron atilde -165 KPX Tcaron Acircumflex -77 KPX Tcaron uring -151 KPX Tcaron ocircumflex -169 KPX Tcaron scaron -165 KPX Tcaron A -77 KPX Tcaron ecaron -169 KPX Tcaron C -58 KPX Tcaron scedilla -165 KPX Tcaron adieresis -165 KPX Tcaron w -165 KPX Tcaron odieresis -169 KPX Tcaron uacute -151 KPX Tcaron cacute -169 KPX Tcaron aacute -165 KPX Tcaron period -118 KPX Tcaron guillemotright -54 KPX Tcaron T -17 KPX Tcaron acircumflex -165 KPX Tcaron e -169 KPX Tcaron Tcaron -17 KPX Tcaron a -165 KPX Tcaron c -169 KPX Tcaron guillemotleft -91 KPX Tcaron i -30 KPX Tcaron ydieresis -155 KPX Tcaron o -169 KPX Tcaron s -165 KPX Tcaron r -146 KPX Tcaron u -151 KPX Tcaron Agrave -77 KPX Tcaron y -155 KPX Tcaron Ccedilla -58 KPX Tcaron oacute -169 KPX Uring Zcaron -17 KPX Uring Z -17 KPX Ydieresis uring -114 KPX Ydieresis ecaron -132 KPX Ydieresis Ccaron -54 KPX Ydieresis Cacute -54 KPX Ydieresis Ograve -54 KPX Ydieresis Ocircumflex -54 KPX Ydieresis Oacute -54 KPX Ydieresis Aacute -77 KPX Ydieresis Acircumflex -77 KPX Ydieresis quotedblbase -128 KPX Ydieresis quotedblright -17 KPX Ydieresis quotedblleft -54 KPX Ydieresis Otilde -54 KPX Ydieresis Atilde -77 KPX Ydieresis Agrave -77 KPX Ydieresis guillemotright -72 KPX Ydieresis guillemotleft -109 KPX Ydieresis udieresis -114 KPX Ydieresis ucircumflex -114 KPX Ydieresis ugrave -114 KPX Ydieresis uacute -114 KPX Ydieresis otilde -132 KPX Ydieresis odieresis -132 KPX Ydieresis ocircumflex -132 KPX Ydieresis ograve -132 KPX Ydieresis oacute -132 KPX Ydieresis edieresis -132 KPX Ydieresis ecircumflex -132 KPX Ydieresis egrave -132 KPX Ydieresis eacute -132 KPX Ydieresis aring -137 KPX Ydieresis atilde -137 KPX Ydieresis adieresis -137 KPX Ydieresis acircumflex -137 KPX Ydieresis agrave -137 KPX Ydieresis aacute -137 KPX Ydieresis Odieresis -54 KPX Ydieresis Ccedilla -54 KPX Ydieresis Adieresis -77 KPX Ydieresis u -114 KPX Ydieresis o -132 KPX Ydieresis i -35 KPX Ydieresis e -132 KPX Ydieresis a -137 KPX Ydieresis O -54 KPX Ydieresis C -54 KPX Ydieresis A -77 KPX Ydieresis colon -132 KPX Ydieresis period -202 KPX Ydieresis hyphen -118 KPX Zcaron quotedblbase -17 KPX Zcaron quotedblright -17 KPX Zcaron quotedblleft -17 KPX Zcaron hyphen -17 KPX uni2010 Tcaron -91 KPX uni2010 Gbreve 36 KPX uni2010 yacute -17 KPX uni2010 Yacute -118 KPX uni2010 Ograve 27 KPX uni2010 Ocircumflex 27 KPX uni2010 Oacute 27 KPX uni2010 Aacute -21 KPX uni2010 Acircumflex -21 KPX uni2010 Ydieresis -118 KPX uni2010 ydieresis -17 KPX uni2010 Otilde 27 KPX uni2010 Atilde -21 KPX uni2010 Agrave -21 KPX uni2010 otilde 18 KPX uni2010 odieresis 18 KPX uni2010 ocircumflex 18 KPX uni2010 ograve 18 KPX uni2010 oacute 18 KPX uni2010 Odieresis 27 KPX uni2010 Adieresis -21 KPX uni2010 y -17 KPX uni2010 v -26 KPX uni2010 o 18 KPX uni2010 Y -118 KPX uni2010 X -49 KPX uni2010 W -40 KPX uni2010 V -58 KPX uni2010 T -91 KPX uni2010 Q 36 KPX uni2010 O 27 KPX uni2010 J 55 KPX uni2010 G 36 KPX uni2010 B -35 KPX uni2010 A -21 KPX quotedblleft Racute -30 KPX quotedblleft ograve -72 KPX quotedblleft ocircumflex -72 KPX quotedblleft Otilde -35 KPX quotedblleft Ccaron -35 KPX quotedblleft Dcaron -30 KPX quotedblleft Lacute -30 KPX quotedblleft Atilde -128 KPX quotedblleft racute -54 KPX quotedblleft Gbreve -35 KPX quotedblleft Adieresis -128 KPX quotedblleft germandbls -30 KPX quotedblleft Odieresis -35 KPX quotedblleft Cacute -35 KPX quotedblleft Aacute -128 KPX quotedblleft Lcaron -30 KPX quotedblleft ntilde -54 KPX quotedblleft yacute -35 KPX quotedblleft Acircumflex -128 KPX quotedblleft Thorn -30 KPX quotedblleft A -128 KPX quotedblleft Zcaron -17 KPX quotedblleft C -35 KPX quotedblleft B -30 KPX quotedblleft AE -188 KPX quotedblleft D -30 KPX quotedblleft G -35 KPX quotedblleft F -30 KPX quotedblleft H -30 KPX quotedblleft K -30 KPX quotedblleft J -30 KPX quotedblleft L -30 KPX quotedblleft O -35 KPX quotedblleft rcaron -54 KPX quotedblleft Q -35 KPX quotedblleft P -30 KPX quotedblleft R -30 KPX quotedblleft X -58 KPX quotedblleft Z -17 KPX quotedblleft otilde -72 KPX quotedblleft Oacute -35 KPX quotedblleft f -35 KPX quotedblleft Ograve -35 KPX quotedblleft Ocircumflex -35 KPX quotedblleft ydieresis -35 KPX quotedblleft Rcaron -30 KPX quotedblleft o -72 KPX quotedblleft n -54 KPX quotedblleft odieresis -72 KPX quotedblleft w -35 KPX quotedblleft r -54 KPX quotedblleft Agrave -128 KPX quotedblleft v -35 KPX quotedblleft y -35 KPX quotedblleft ncaron -54 KPX quotedblleft eth -35 KPX quotedblleft Ccedilla -35 KPX quotedblleft oacute -72 KPX quotedblbase Racute -35 KPX quotedblbase ograve -35 KPX quotedblbase ocircumflex -35 KPX quotedblbase Otilde -54 KPX quotedblbase Ccaron -54 KPX quotedblbase Dcaron -35 KPX quotedblbase Yacute -183 KPX quotedblbase Lacute -35 KPX quotedblbase Atilde 18 KPX quotedblbase racute -35 KPX quotedblbase Gbreve -35 KPX quotedblbase Adieresis 18 KPX quotedblbase germandbls -35 KPX quotedblbase Odieresis -54 KPX quotedblbase Cacute -54 KPX quotedblbase Aacute 18 KPX quotedblbase Lcaron -35 KPX quotedblbase ntilde -35 KPX quotedblbase yacute -54 KPX quotedblbase Acircumflex 18 KPX quotedblbase Tcaron -137 KPX quotedblbase Thorn -35 KPX quotedblbase A 18 KPX quotedblbase C -54 KPX quotedblbase B -35 KPX quotedblbase AE 18 KPX quotedblbase D -35 KPX quotedblbase G -35 KPX quotedblbase F -35 KPX quotedblbase H -35 KPX quotedblbase K -35 KPX quotedblbase J 22 KPX quotedblbase Ydieresis -183 KPX quotedblbase L -35 KPX quotedblbase O -54 KPX quotedblbase rcaron -35 KPX quotedblbase Q -54 KPX quotedblbase P -35 KPX quotedblbase R -35 KPX quotedblbase T -137 KPX quotedblbase W -123 KPX quotedblbase V -183 KPX quotedblbase Y -183 KPX quotedblbase X -35 KPX quotedblbase otilde -35 KPX quotedblbase Oacute -54 KPX quotedblbase f -17 KPX quotedblbase Ograve -54 KPX quotedblbase Ocircumflex -54 KPX quotedblbase ydieresis -54 KPX quotedblbase Rcaron -35 KPX quotedblbase o -35 KPX quotedblbase n -35 KPX quotedblbase odieresis -35 KPX quotedblbase w -95 KPX quotedblbase r -35 KPX quotedblbase Agrave 18 KPX quotedblbase v -114 KPX quotedblbase y -54 KPX quotedblbase ncaron -35 KPX quotedblbase eth -35 KPX quotedblbase Ccedilla -54 KPX quotedblbase oacute -35 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Monospace-Oblique.afm0100664000212600000240000011626310330505373017072 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:21 2005 FontName Monospace-Oblique FullName Monospace Oblique FamilyName Monospace Weight Book Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle -11 IsFixedPitch true UnderlinePosition -213 UnderlineThickness 141 Version 1.15 EncodingScheme ISO10646-1 FontBBox -117 -505 739 1028 CapHeight 729 XHeight 546 Ascender 765 Descender -208 StartCharMetrics 835 C 0 ; WX 602 ; N .notdef ; B 50 -177 551 706 ; C 32 ; WX 602 ; N space ; B 0 0 0 0 ; C 33 ; WX 602 ; N exclam ; B 181 0 422 730 ; C 34 ; WX 602 ; N quotedbl ; B 165 458 438 730 ; C 35 ; WX 602 ; N numbersign ; B -3 0 603 718 ; C 36 ; WX 602 ; N dollar ; B 15 -147 529 760 ; C 37 ; WX 602 ; N percent ; B 16 0 586 700 ; C 38 ; WX 602 ; N ampersand ; B -10 -15 582 743 ; C 39 ; WX 602 ; N quotesingle ; B 257 458 343 730 ; C 40 ; WX 602 ; N parenleft ; B 182 -132 509 759 ; C 41 ; WX 602 ; N parenright ; B 73 -132 400 759 ; C 42 ; WX 602 ; N asterisk ; B 81 286 521 743 ; C 43 ; WX 602 ; N plus ; B 42 55 560 572 ; C 44 ; WX 602 ; N comma ; B 99 -141 327 148 ; C 45 ; WX 602 ; N hyphen ; B 147 233 419 314 ; C 46 ; WX 602 ; N period ; B 172 0 326 148 ; C 47 ; WX 602 ; N slash ; B 7 -93 518 730 ; C 48 ; WX 602 ; N zero ; B 47 -15 555 743 ; C 49 ; WX 602 ; N one ; B 60 0 479 730 ; C 50 ; WX 602 ; N two ; B 2 0 550 743 ; C 51 ; WX 602 ; N three ; B -9 -15 539 743 ; C 52 ; WX 602 ; N four ; B 12 0 531 730 ; C 53 ; WX 602 ; N five ; B 1 -15 542 730 ; C 54 ; WX 602 ; N six ; B 44 -15 551 743 ; C 55 ; WX 602 ; N seven ; B 84 0 592 730 ; C 56 ; WX 602 ; N eight ; B 20 -15 550 743 ; C 57 ; WX 602 ; N nine ; B 30 -15 538 743 ; C 58 ; WX 602 ; N colon ; B 167 0 393 519 ; C 59 ; WX 602 ; N semicolon ; B 99 -141 393 520 ; C 60 ; WX 602 ; N less ; B 42 68 560 559 ; C 61 ; WX 602 ; N equal ; B 42 171 560 455 ; C 62 ; WX 602 ; N greater ; B 42 68 560 559 ; C 63 ; WX 602 ; N question ; B 159 0 547 743 ; C 64 ; WX 602 ; N at ; B -15 -155 593 683 ; C 65 ; WX 602 ; N A ; B -52 0 514 730 ; C 66 ; WX 602 ; N B ; B 11 0 570 730 ; C 67 ; WX 602 ; N C ; B 56 -15 592 743 ; C 68 ; WX 602 ; N D ; B -4 0 552 730 ; C 69 ; WX 602 ; N E ; B 25 0 601 730 ; C 70 ; WX 602 ; N F ; B 44 0 617 730 ; C 71 ; WX 602 ; N G ; B 38 -15 575 743 ; C 72 ; WX 602 ; N H ; B -4 0 606 730 ; C 73 ; WX 602 ; N I ; B 27 0 575 730 ; C 74 ; WX 602 ; N J ; B -13 -15 539 730 ; C 75 ; WX 602 ; N K ; B -4 0 662 730 ; C 76 ; WX 602 ; N L ; B 38 0 505 730 ; C 77 ; WX 602 ; N M ; B -29 0 631 730 ; C 78 ; WX 602 ; N N ; B -3 0 605 730 ; C 79 ; WX 602 ; N O ; B 40 -15 563 743 ; C 80 ; WX 602 ; N P ; B 24 0 588 730 ; C 81 ; WX 602 ; N Q ; B 40 -132 563 743 ; C 82 ; WX 602 ; N R ; B 5 0 563 730 ; C 83 ; WX 602 ; N S ; B 12 -15 561 743 ; C 84 ; WX 602 ; N T ; B 78 0 651 730 ; C 85 ; WX 602 ; N U ; B 39 -15 602 730 ; C 86 ; WX 602 ; N V ; B 97 0 646 730 ; C 87 ; WX 602 ; N W ; B 40 0 672 730 ; C 88 ; WX 602 ; N X ; B -63 0 653 730 ; C 89 ; WX 602 ; N Y ; B 95 0 659 730 ; C 90 ; WX 602 ; N Z ; B -3 0 623 730 ; C 91 ; WX 602 ; N bracketleft ; B 128 -132 510 760 ; C 92 ; WX 602 ; N backslash ; B 173 -93 355 730 ; C 93 ; WX 602 ; N bracketright ; B 71 -132 454 760 ; C 94 ; WX 602 ; N asciicircum ; B 35 457 567 730 ; C 95 ; WX 602 ; N underscore ; B 0 -236 500 -196 ; C 96 ; WX 602 ; N grave ; B 221 616 415 800 ; C 97 ; WX 602 ; N a ; B 35 -15 531 561 ; C 98 ; WX 602 ; N b ; B 28 -15 542 760 ; C 99 ; WX 602 ; N c ; B 76 -15 556 561 ; C 100 ; WX 602 ; N d ; B 58 -15 612 760 ; C 101 ; WX 602 ; N e ; B 47 -15 550 562 ; C 102 ; WX 602 ; N f ; B 128 0 608 760 ; C 103 ; WX 602 ; N g ; B 28 -215 560 561 ; C 104 ; WX 602 ; N h ; B 41 0 536 760 ; C 105 ; WX 602 ; N i ; B 29 0 491 760 ; C 106 ; WX 602 ; N j ; B 1 -209 482 760 ; C 107 ; WX 602 ; N k ; B 43 0 588 760 ; C 108 ; WX 602 ; N l ; B 151 0 478 766 ; C 109 ; WX 602 ; N m ; B -7 0 576 561 ; C 110 ; WX 602 ; N n ; B 41 0 536 561 ; C 111 ; WX 602 ; N o ; B 57 -15 544 561 ; C 112 ; WX 602 ; N p ; B -1 -209 551 561 ; C 113 ; WX 602 ; N q ; B 47 -209 561 561 ; C 114 ; WX 602 ; N r ; B 105 0 596 561 ; C 115 ; WX 602 ; N s ; B 56 -15 526 561 ; C 116 ; WX 602 ; N t ; B 95 0 549 703 ; C 117 ; WX 602 ; N u ; B 61 -14 554 547 ; C 118 ; WX 602 ; N v ; B 88 0 593 547 ; C 119 ; WX 602 ; N w ; B 44 0 643 547 ; C 120 ; WX 602 ; N x ; B -35 0 590 547 ; C 121 ; WX 602 ; N y ; B -20 -209 599 547 ; C 122 ; WX 602 ; N z ; B 38 0 554 547 ; C 123 ; WX 602 ; N braceleft ; B 89 -164 575 760 ; C 124 ; WX 602 ; N bar ; B 258 -236 343 765 ; C 125 ; WX 602 ; N braceright ; B -7 -164 478 760 ; C 126 ; WX 602 ; N asciitilde ; B 42 240 560 381 ; C 160 ; WX 602 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 602 ; N exclamdown ; B 189 0 432 730 ; C 162 ; WX 602 ; N cent ; B 60 -153 531 700 ; C 163 ; WX 602 ; N sterling ; B -4 0 601 743 ; C 164 ; WX 602 ; N currency ; B 100 95 538 533 ; C 165 ; WX 602 ; N yen ; B 22 0 622 730 ; C 166 ; WX 602 ; N brokenbar ; B 258 -171 343 700 ; C 167 ; WX 602 ; N section ; B 48 -99 522 738 ; C 168 ; WX 602 ; N dieresis ; B 212 659 522 758 ; C 169 ; WX 602 ; N copyright ; B 0 61 603 664 ; C 170 ; WX 602 ; N ordfeminine ; B 108 229 506 743 ; C 171 ; WX 602 ; N guillemotleft ; B 36 68 541 518 ; C 172 ; WX 602 ; N logicalnot ; B 42 181 560 421 ; C 173 ; WX 602 ; N sfthyphen ; B 147 233 419 314 ; C 174 ; WX 602 ; N registered ; B 0 61 603 664 ; C 175 ; WX 602 ; N macron ; B 214 672 521 746 ; C 176 ; WX 602 ; N degree ; B 145 432 457 743 ; C 177 ; WX 602 ; N plusminus ; B 42 0 560 572 ; C 178 ; WX 602 ; N twosuperior ; B 149 326 484 743 ; C 179 ; WX 602 ; N threesuperior ; B 140 318 480 743 ; C 180 ; WX 602 ; N acute ; B 280 616 550 800 ; C 181 ; WX 602 ; N mu ; B -20 -209 566 547 ; C 182 ; WX 602 ; N paragraph ; B 61 -97 558 730 ; C 183 ; WX 602 ; N periodcentered ; B 222 272 375 422 ; C 184 ; WX 602 ; N cedilla ; B 88 -193 307 0 ; C 185 ; WX 602 ; N onesuperior ; B 169 326 451 734 ; C 186 ; WX 602 ; N ordmasculine ; B 108 229 521 743 ; C 187 ; WX 602 ; N guillemotright ; B 40 68 544 518 ; C 188 ; WX 602 ; N onequarter ; B 22 -132 554 811 ; C 189 ; WX 602 ; N onehalf ; B 22 -132 560 811 ; C 190 ; WX 602 ; N threequarters ; B 22 -132 554 819 ; C 191 ; WX 602 ; N questiondown ; B 69 -14 459 730 ; C 192 ; WX 602 ; N Agrave ; B -52 0 514 928 ; C 193 ; WX 602 ; N Aacute ; B -52 0 534 928 ; C 194 ; WX 602 ; N Acircumflex ; B -52 0 525 929 ; C 195 ; WX 602 ; N Atilde ; B -52 0 565 921 ; C 196 ; WX 602 ; N Adieresis ; B -52 0 538 914 ; C 197 ; WX 602 ; N Aring ; B -52 0 514 929 ; C 198 ; WX 602 ; N AE ; B -71 0 639 730 ; C 199 ; WX 602 ; N Ccedilla ; B 56 -193 592 743 ; C 200 ; WX 602 ; N Egrave ; B 25 0 601 928 ; C 201 ; WX 602 ; N Eacute ; B 25 0 601 928 ; C 202 ; WX 602 ; N Ecircumflex ; B 25 0 601 929 ; C 203 ; WX 602 ; N Edieresis ; B 25 0 601 914 ; C 204 ; WX 602 ; N Igrave ; B 27 0 575 928 ; C 205 ; WX 602 ; N Iacute ; B 27 0 575 928 ; C 206 ; WX 602 ; N Icircumflex ; B 27 0 575 929 ; C 207 ; WX 602 ; N Idieresis ; B 27 0 575 914 ; C 208 ; WX 602 ; N Eth ; B -4 0 552 730 ; C 209 ; WX 602 ; N Ntilde ; B -3 0 605 921 ; C 210 ; WX 602 ; N Ograve ; B 40 -15 563 928 ; C 211 ; WX 602 ; N Oacute ; B 40 -15 563 928 ; C 212 ; WX 602 ; N Ocircumflex ; B 40 -15 563 929 ; C 213 ; WX 602 ; N Otilde ; B 40 -15 563 921 ; C 214 ; WX 602 ; N Odieresis ; B 40 -15 563 914 ; C 215 ; WX 602 ; N multiply ; B 73 84 529 542 ; C 216 ; WX 602 ; N Oslash ; B 6 -35 586 762 ; C 217 ; WX 602 ; N Ugrave ; B 39 -15 602 928 ; C 218 ; WX 602 ; N Uacute ; B 39 -15 602 928 ; C 219 ; WX 602 ; N Ucircumflex ; B 39 -15 602 929 ; C 220 ; WX 602 ; N Udieresis ; B 39 -15 602 914 ; C 221 ; WX 602 ; N Yacute ; B 95 0 659 928 ; C 222 ; WX 602 ; N Thorn ; B 24 0 566 730 ; C 223 ; WX 602 ; N germandbls ; B 26 -15 550 760 ; C 224 ; WX 602 ; N agrave ; B 35 -15 531 800 ; C 225 ; WX 602 ; N aacute ; B 35 -15 552 800 ; C 226 ; WX 602 ; N acircumflex ; B 35 -15 531 800 ; C 227 ; WX 602 ; N atilde ; B 35 -15 544 777 ; C 228 ; WX 602 ; N adieresis ; B 35 -15 531 758 ; C 229 ; WX 602 ; N aring ; B 35 -15 531 914 ; C 230 ; WX 602 ; N ae ; B -23 -15 593 561 ; C 231 ; WX 602 ; N ccedilla ; B 76 -193 556 561 ; C 232 ; WX 602 ; N egrave ; B 47 -15 550 800 ; C 233 ; WX 602 ; N eacute ; B 47 -15 550 800 ; C 234 ; WX 602 ; N ecircumflex ; B 47 -15 550 800 ; C 235 ; WX 602 ; N edieresis ; B 47 -15 550 758 ; C 236 ; WX 602 ; N igrave ; B 29 0 491 800 ; C 237 ; WX 602 ; N iacute ; B 29 0 536 800 ; C 238 ; WX 602 ; N icircumflex ; B 29 0 491 800 ; C 239 ; WX 602 ; N idieresis ; B 29 0 508 758 ; C 240 ; WX 602 ; N eth ; B 58 -15 552 760 ; C 241 ; WX 602 ; N ntilde ; B 41 0 542 777 ; C 242 ; WX 602 ; N ograve ; B 57 -15 544 800 ; C 243 ; WX 602 ; N oacute ; B 57 -15 550 800 ; C 244 ; WX 602 ; N ocircumflex ; B 57 -15 544 800 ; C 245 ; WX 602 ; N otilde ; B 57 -15 544 777 ; C 246 ; WX 602 ; N odieresis ; B 57 -15 544 758 ; C 247 ; WX 602 ; N divide ; B 42 73 560 555 ; C 248 ; WX 602 ; N oslash ; B 22 -47 574 592 ; C 249 ; WX 602 ; N ugrave ; B 61 -14 554 800 ; C 250 ; WX 602 ; N uacute ; B 61 -14 554 800 ; C 251 ; WX 602 ; N ucircumflex ; B 61 -14 554 800 ; C 252 ; WX 602 ; N udieresis ; B 61 -14 554 758 ; C 253 ; WX 602 ; N yacute ; B -20 -209 599 800 ; C 254 ; WX 602 ; N thorn ; B -1 -209 551 766 ; C 255 ; WX 602 ; N ydieresis ; B -20 -209 599 758 ; C -1 ; WX 602 ; N Amacron ; B -52 0 522 899 ; C -1 ; WX 602 ; N amacron ; B 35 -15 531 746 ; C -1 ; WX 602 ; N Abreve ; B -52 0 554 936 ; C -1 ; WX 602 ; N abreve ; B 35 -15 533 786 ; C -1 ; WX 602 ; N Aogonek ; B -52 -193 523 730 ; C -1 ; WX 602 ; N aogonek ; B 35 -193 531 561 ; C -1 ; WX 602 ; N Cacute ; B 56 -15 594 928 ; C -1 ; WX 602 ; N cacute ; B 76 -15 594 800 ; C -1 ; WX 602 ; N Ccircumflex ; B 56 -15 605 929 ; C -1 ; WX 602 ; N ccircumflex ; B 76 -15 556 800 ; C -1 ; WX 602 ; N Cdotaccent ; B 56 -15 592 940 ; C -1 ; WX 602 ; N cdotaccent ; B 76 -15 556 758 ; C -1 ; WX 602 ; N Ccaron ; B 56 -15 611 929 ; C -1 ; WX 602 ; N ccaron ; B 76 -15 583 800 ; C -1 ; WX 602 ; N Dcaron ; B -4 0 552 929 ; C -1 ; WX 602 ; N dcaron ; B 58 -15 739 760 ; C -1 ; WX 602 ; N Dcroat ; B -4 0 552 730 ; C -1 ; WX 602 ; N dcroat ; B 58 -15 691 760 ; C -1 ; WX 602 ; N Emacron ; B 25 0 601 899 ; C -1 ; WX 602 ; N emacron ; B 47 -15 550 746 ; C -1 ; WX 602 ; N Ebreve ; B 25 0 601 929 ; C -1 ; WX 602 ; N ebreve ; B 47 -15 550 786 ; C -1 ; WX 602 ; N Edotaccent ; B 25 0 601 940 ; C -1 ; WX 602 ; N edotaccent ; B 47 -15 550 758 ; C -1 ; WX 602 ; N Eogonek ; B 25 -193 601 730 ; C -1 ; WX 602 ; N eogonek ; B 47 -193 550 562 ; C -1 ; WX 602 ; N Ecaron ; B 25 0 601 929 ; C -1 ; WX 602 ; N ecaron ; B 47 -15 565 800 ; C -1 ; WX 602 ; N Gcircumflex ; B 38 -15 575 929 ; C -1 ; WX 602 ; N gcircumflex ; B 28 -215 560 800 ; C -1 ; WX 602 ; N Gbreve ; B 38 -15 575 929 ; C -1 ; WX 602 ; N gbreve ; B 28 -215 560 786 ; C -1 ; WX 602 ; N Gdotaccent ; B 38 -15 575 940 ; C -1 ; WX 602 ; N gdotaccent ; B 28 -215 560 758 ; C -1 ; WX 602 ; N Gcommaaccent ; B 38 -243 575 743 ; C -1 ; WX 602 ; N gcommaaccent ; B 28 -215 560 789 ; C -1 ; WX 602 ; N Hcircumflex ; B -4 0 606 929 ; C -1 ; WX 602 ; N hcircumflex ; B 41 0 536 929 ; C -1 ; WX 602 ; N Hbar ; B -4 0 651 730 ; C -1 ; WX 602 ; N hbar ; B 21 0 515 760 ; C -1 ; WX 602 ; N Itilde ; B 27 0 575 921 ; C -1 ; WX 602 ; N itilde ; B 29 0 528 777 ; C -1 ; WX 602 ; N Imacron ; B 27 0 575 900 ; C -1 ; WX 602 ; N imacron ; B 29 0 491 746 ; C -1 ; WX 602 ; N Ibreve ; B 27 0 575 929 ; C -1 ; WX 602 ; N ibreve ; B 29 0 522 786 ; C -1 ; WX 602 ; N Iogonek ; B 45 -193 592 730 ; C -1 ; WX 602 ; N iogonek ; B 31 -193 493 760 ; C -1 ; WX 602 ; N Idotaccent ; B 27 0 575 915 ; C -1 ; WX 602 ; N dotlessi ; B 29 0 491 547 ; C -1 ; WX 602 ; N IJ ; B 1 -14 705 730 ; C -1 ; WX 602 ; N ij ; B 1 -210 737 761 ; C -1 ; WX 602 ; N Jcircumflex ; B -13 -15 566 929 ; C -1 ; WX 602 ; N jcircumflex ; B 1 -209 488 800 ; C -1 ; WX 602 ; N Kcommaaccent ; B -4 -229 662 730 ; C -1 ; WX 602 ; N kcommaaccent ; B 43 -229 588 760 ; C -1 ; WX 602 ; N kgreenlandic ; B 62 0 607 547 ; C -1 ; WX 602 ; N Lacute ; B 38 0 536 928 ; C -1 ; WX 602 ; N lacute ; B 151 0 536 929 ; C -1 ; WX 602 ; N Lcommaaccent ; B 38 -229 505 730 ; C -1 ; WX 602 ; N lcommaaccent ; B 151 -229 478 766 ; C -1 ; WX 602 ; N Lcaron ; B 38 0 541 730 ; C -1 ; WX 602 ; N lcaron ; B 151 0 604 766 ; C -1 ; WX 602 ; N Ldot ; B 38 0 548 730 ; C -1 ; WX 602 ; N ldot ; B 151 0 653 766 ; C -1 ; WX 602 ; N Lslash ; B -15 0 507 729 ; C -1 ; WX 602 ; N lslash ; B 42 0 544 766 ; C -1 ; WX 602 ; N Nacute ; B -3 0 605 931 ; C -1 ; WX 602 ; N nacute ; B 41 0 547 804 ; C -1 ; WX 602 ; N Ncommaaccent ; B -3 -229 605 730 ; C -1 ; WX 602 ; N ncommaaccent ; B 41 -229 536 561 ; C -1 ; WX 602 ; N Ncaron ; B -3 0 605 929 ; C -1 ; WX 602 ; N ncaron ; B 41 0 562 800 ; C -1 ; WX 602 ; N napostrophe ; B -17 0 596 760 ; C -1 ; WX 602 ; N Eng ; B 1 -209 601 730 ; C -1 ; WX 602 ; N eng ; B 61 -209 554 561 ; C -1 ; WX 602 ; N Omacron ; B 40 -15 563 900 ; C -1 ; WX 602 ; N omacron ; B 57 -15 544 746 ; C -1 ; WX 602 ; N Obreve ; B 40 -15 563 929 ; C -1 ; WX 602 ; N obreve ; B 57 -15 544 771 ; C -1 ; WX 602 ; N Ohungarumlaut ; B 40 -15 608 928 ; C -1 ; WX 602 ; N ohungarumlaut ; B 57 -15 599 800 ; C -1 ; WX 602 ; N OE ; B 17 0 661 730 ; C -1 ; WX 602 ; N oe ; B -3 -15 622 561 ; C -1 ; WX 602 ; N Racute ; B 5 0 563 928 ; C -1 ; WX 602 ; N racute ; B 105 0 652 804 ; C -1 ; WX 602 ; N Rcommaaccent ; B 5 -229 563 730 ; C -1 ; WX 602 ; N rcommaaccent ; B 25 -229 596 561 ; C -1 ; WX 602 ; N Rcaron ; B 5 0 563 929 ; C -1 ; WX 602 ; N rcaron ; B 105 0 596 800 ; C -1 ; WX 602 ; N Sacute ; B 12 -15 561 931 ; C -1 ; WX 602 ; N sacute ; B 56 -15 547 804 ; C -1 ; WX 602 ; N Scircumflex ; B 12 -15 561 929 ; C -1 ; WX 602 ; N scircumflex ; B 56 -15 536 814 ; C -1 ; WX 602 ; N Scedilla ; B 12 -193 561 743 ; C -1 ; WX 602 ; N scedilla ; B 56 -193 526 561 ; C -1 ; WX 602 ; N Scaron ; B 12 -15 561 929 ; C -1 ; WX 602 ; N scaron ; B 56 -15 539 800 ; C -1 ; WX 602 ; N Tcommaaccent ; B 78 -193 651 730 ; C -1 ; WX 602 ; N tcommaaccent ; B 95 -193 549 703 ; C -1 ; WX 602 ; N Tcaron ; B 78 0 651 929 ; C -1 ; WX 602 ; N tcaron ; B 95 0 626 821 ; C -1 ; WX 602 ; N Tbar ; B 77 0 650 730 ; C -1 ; WX 602 ; N tbar ; B 86 0 542 703 ; C -1 ; WX 602 ; N Utilde ; B 39 -15 602 921 ; C -1 ; WX 602 ; N utilde ; B 61 -14 554 777 ; C -1 ; WX 602 ; N Umacron ; B 39 -15 602 899 ; C -1 ; WX 602 ; N umacron ; B 61 -14 554 745 ; C -1 ; WX 602 ; N Ubreve ; B 39 -15 602 929 ; C -1 ; WX 602 ; N ubreve ; B 61 -14 554 786 ; C -1 ; WX 602 ; N Uring ; B 39 -15 602 1028 ; C -1 ; WX 602 ; N uring ; B 61 -14 554 848 ; C -1 ; WX 602 ; N Uhungarumlaut ; B 39 -15 614 928 ; C -1 ; WX 602 ; N uhungarumlaut ; B 61 -14 597 800 ; C -1 ; WX 602 ; N Uogonek ; B 39 -201 602 730 ; C -1 ; WX 602 ; N uogonek ; B 61 -194 554 547 ; C -1 ; WX 602 ; N Wcircumflex ; B 40 0 672 932 ; C -1 ; WX 602 ; N wcircumflex ; B 44 0 643 804 ; C -1 ; WX 602 ; N Ycircumflex ; B 95 0 659 932 ; C -1 ; WX 602 ; N ycircumflex ; B -20 -209 599 804 ; C -1 ; WX 602 ; N Ydieresis ; B 95 0 659 914 ; C -1 ; WX 602 ; N Zacute ; B -3 0 623 931 ; C -1 ; WX 602 ; N zacute ; B 38 0 554 804 ; C -1 ; WX 602 ; N Zdotaccent ; B -3 0 623 915 ; C -1 ; WX 602 ; N zdotaccent ; B 38 0 554 758 ; C -1 ; WX 602 ; N Zcaron ; B -3 0 623 929 ; C -1 ; WX 602 ; N zcaron ; B 38 0 554 800 ; C -1 ; WX 602 ; N longs ; B 128 0 608 760 ; C -1 ; WX 602 ; N uni0186 ; B 2 -15 537 743 ; C -1 ; WX 602 ; N uni0190 ; B 30 -15 573 743 ; C -1 ; WX 602 ; N florin ; B 0 -209 586 760 ; C -1 ; WX 602 ; N uni0194 ; B 34 -210 674 661 ; C -1 ; WX 602 ; N uni01CD ; B -52 0 554 929 ; C -1 ; WX 602 ; N uni01CE ; B 35 -15 553 800 ; C -1 ; WX 602 ; N uni01CF ; B 27 0 575 929 ; C -1 ; WX 602 ; N uni01D0 ; B 29 0 539 800 ; C -1 ; WX 602 ; N uni01D1 ; B 40 -15 571 929 ; C -1 ; WX 602 ; N uni01D2 ; B 57 -15 563 800 ; C -1 ; WX 602 ; N uni01D3 ; B 39 -15 602 929 ; C -1 ; WX 602 ; N uni01D4 ; B 61 -14 554 800 ; C -1 ; WX 602 ; N uni01D6 ; B 61 -14 554 900 ; C -1 ; WX 602 ; N uni01DF ; B 35 -15 540 900 ; C -1 ; WX 602 ; N uni01E2 ; B -71 0 639 899 ; C -1 ; WX 602 ; N uni01E3 ; B -23 -15 593 745 ; C -1 ; WX 602 ; N uni01EA ; B 40 -201 563 743 ; C -1 ; WX 602 ; N uni01EB ; B 57 -201 544 561 ; C -1 ; WX 602 ; N uni01EC ; B 40 -201 563 899 ; C -1 ; WX 602 ; N uni01ED ; B 57 -201 544 745 ; C -1 ; WX 602 ; N Scommaaccent ; B 12 -228 561 743 ; C -1 ; WX 602 ; N scommaaccent ; B 56 -228 526 561 ; C -1 ; WX 602 ; N uni021A ; B 78 -228 651 730 ; C -1 ; WX 602 ; N uni021B ; B 95 -228 549 703 ; C -1 ; WX 602 ; N uni022B ; B 57 -15 544 900 ; C -1 ; WX 602 ; N uni022D ; B 57 -15 544 900 ; C -1 ; WX 602 ; N uni022E ; B 40 -15 563 914 ; C -1 ; WX 602 ; N uni022F ; B 57 -15 544 758 ; C -1 ; WX 602 ; N uni0231 ; B 57 -15 544 900 ; C -1 ; WX 602 ; N uni0232 ; B 95 0 659 899 ; C -1 ; WX 602 ; N uni0233 ; B -20 -209 599 745 ; C -1 ; WX 602 ; N dotlessj ; B 1 -209 441 547 ; C -1 ; WX 602 ; N uni0250 ; B 54 -15 554 561 ; C -1 ; WX 602 ; N uni0251 ; B 66 -15 579 561 ; C -1 ; WX 602 ; N uni0252 ; B 23 -15 536 561 ; C -1 ; WX 602 ; N uni0253 ; B 4 -15 517 760 ; C -1 ; WX 602 ; N uni0254 ; B 41 -15 521 561 ; C -1 ; WX 602 ; N uni0255 ; B 82 -73 572 559 ; C -1 ; WX 602 ; N uni0256 ; B 64 -209 530 760 ; C -1 ; WX 602 ; N uni0257 ; B 45 -15 601 760 ; C -1 ; WX 602 ; N uni0258 ; B 32 -15 551 561 ; C -1 ; WX 602 ; N uni0259 ; B 47 -15 551 561 ; C -1 ; WX 602 ; N uni025A ; B -4 -15 595 561 ; C -1 ; WX 602 ; N uni025B ; B 56 -11 551 561 ; C -1 ; WX 602 ; N uni025C ; B 32 -11 535 561 ; C -1 ; WX 602 ; N uni025D ; B -23 -11 582 561 ; C -1 ; WX 602 ; N uni025E ; B 78 -21 546 560 ; C -1 ; WX 602 ; N uni025F ; B 24 -209 488 547 ; C -1 ; WX 602 ; N uni0260 ; B 36 -215 621 760 ; C -1 ; WX 602 ; N uni0261 ; B 69 -215 600 545 ; C -1 ; WX 602 ; N uni0262 ; B 51 0 574 575 ; C -1 ; WX 602 ; N uni0263 ; B 50 -211 626 547 ; C -1 ; WX 602 ; N uni0264 ; B 103 0 606 547 ; C -1 ; WX 602 ; N uni0265 ; B 90 -210 584 546 ; C -1 ; WX 602 ; N uni0266 ; B 18 0 512 760 ; C -1 ; WX 602 ; N uni0267 ; B 38 -209 532 760 ; C -1 ; WX 602 ; N uni0268 ; B 4 0 504 760 ; C -1 ; WX 602 ; N uni0269 ; B 136 0 467 547 ; C -1 ; WX 602 ; N uni026A ; B 24 0 578 547 ; C -1 ; WX 602 ; N uni026B ; B 15 0 559 766 ; C -1 ; WX 602 ; N uni026C ; B 77 0 467 766 ; C -1 ; WX 602 ; N uni026D ; B 168 -209 435 766 ; C -1 ; WX 602 ; N uni026E ; B 101 -213 601 766 ; C -1 ; WX 602 ; N uni026F ; B 26 0 606 561 ; C -1 ; WX 602 ; N uni0270 ; B 46 -210 627 561 ; C -1 ; WX 602 ; N uni0271 ; B 16 -209 596 561 ; C -1 ; WX 602 ; N uni0272 ; B 12 -209 556 561 ; C -1 ; WX 602 ; N uni0273 ; B 52 -209 471 561 ; C -1 ; WX 602 ; N uni0274 ; B 15 0 587 561 ; C -1 ; WX 602 ; N uni0275 ; B 56 -15 546 561 ; C -1 ; WX 602 ; N uni0276 ; B 24 0 617 547 ; C -1 ; WX 602 ; N uni0277 ; B 62 -15 524 561 ; C -1 ; WX 602 ; N uni0278 ; B 48 -208 561 760 ; C -1 ; WX 602 ; N uni0279 ; B 87 -14 516 547 ; C -1 ; WX 602 ; N uni027A ; B 67 -207 536 562 ; C -1 ; WX 602 ; N uni027B ; B 50 -209 479 547 ; C -1 ; WX 602 ; N uni027C ; B 66 -209 535 561 ; C -1 ; WX 602 ; N uni027D ; B 96 -209 535 561 ; C -1 ; WX 602 ; N uni027E ; B 23 0 579 561 ; C -1 ; WX 602 ; N uni027F ; B 23 0 484 561 ; C -1 ; WX 602 ; N uni0280 ; B 6 0 490 547 ; C -1 ; WX 602 ; N uni0281 ; B 6 0 596 547 ; C -1 ; WX 602 ; N uni0282 ; B 47 -209 550 561 ; C -1 ; WX 602 ; N uni0283 ; B 20 -209 582 760 ; C -1 ; WX 602 ; N uni0284 ; B 20 -209 582 760 ; C -1 ; WX 602 ; N uni0285 ; B 173 -209 429 550 ; C -1 ; WX 602 ; N uni0286 ; B -19 -209 639 760 ; C -1 ; WX 602 ; N uni0287 ; B 92 -156 448 547 ; C -1 ; WX 602 ; N uni0288 ; B 135 -208 530 703 ; C -1 ; WX 602 ; N uni0289 ; B -25 -15 625 547 ; C -1 ; WX 602 ; N uni028A ; B 41 -15 611 547 ; C -1 ; WX 602 ; N uni028B ; B 52 0 530 547 ; C -1 ; WX 602 ; N uni028C ; B -19 0 514 547 ; C -1 ; WX 602 ; N uni028D ; B -46 0 542 547 ; C -1 ; WX 602 ; N uni028E ; B -39 0 592 755 ; C -1 ; WX 602 ; N uni028F ; B 104 0 607 562 ; C -1 ; WX 602 ; N uni0290 ; B 61 -209 498 547 ; C -1 ; WX 602 ; N uni0291 ; B 33 -55 579 547 ; C -1 ; WX 602 ; N uni0292 ; B -6 -213 572 547 ; C -1 ; WX 602 ; N uni0293 ; B 15 -213 552 547 ; C -1 ; WX 602 ; N uni0294 ; B 144 0 542 759 ; C -1 ; WX 602 ; N uni0295 ; B 119 0 575 759 ; C -1 ; WX 602 ; N uni0296 ; B 27 0 483 759 ; C -1 ; WX 602 ; N uni0297 ; B 39 -214 596 759 ; C -1 ; WX 602 ; N uni0298 ; B 40 22 562 533 ; C -1 ; WX 602 ; N uni0299 ; B 47 0 508 562 ; C -1 ; WX 602 ; N uni029A ; B 56 -21 526 560 ; C -1 ; WX 602 ; N uni029B ; B 20 0 627 759 ; C -1 ; WX 602 ; N uni029C ; B 15 0 587 561 ; C -1 ; WX 602 ; N uni029D ; B 23 -209 509 760 ; C -1 ; WX 602 ; N uni029E ; B 38 -213 618 547 ; C -1 ; WX 602 ; N uni029F ; B 65 0 445 561 ; C -1 ; WX 602 ; N uni02A0 ; B 30 -209 655 759 ; C -1 ; WX 602 ; N uni02A1 ; B 58 0 542 759 ; C -1 ; WX 602 ; N uni02A2 ; B 119 0 575 759 ; C -1 ; WX 602 ; N uni02A3 ; B -18 -15 609 760 ; C -1 ; WX 602 ; N uni02A4 ; B -1 -213 616 760 ; C -1 ; WX 602 ; N uni02A5 ; B -3 -55 613 760 ; C -1 ; WX 602 ; N uni02A6 ; B 71 -15 547 703 ; C -1 ; WX 602 ; N uni02A7 ; B 95 -209 620 760 ; C -1 ; WX 602 ; N uni02A8 ; B 90 -71 550 703 ; C -1 ; WX 602 ; N uni02A9 ; B 64 -209 558 760 ; C -1 ; WX 602 ; N uni02AA ; B 39 -15 499 760 ; C -1 ; WX 602 ; N uni02AB ; B 33 0 527 760 ; C -1 ; WX 602 ; N uni02AC ; B 65 -15 596 641 ; C -1 ; WX 602 ; N uni02AD ; B 15 84 587 641 ; C -1 ; WX 602 ; N uni02AE ; B 149 -214 568 760 ; C -1 ; WX 602 ; N uni02AF ; B 139 -209 491 760 ; C -1 ; WX 602 ; N uni02B0 ; B 115 333 445 760 ; C -1 ; WX 602 ; N uni02B1 ; B 115 333 445 759 ; C -1 ; WX 602 ; N uni02B2 ; B 184 217 418 760 ; C -1 ; WX 602 ; N uni02B3 ; B 169 333 432 648 ; C -1 ; WX 602 ; N uni02B4 ; B 170 326 433 641 ; C -1 ; WX 602 ; N uni02B5 ; B 145 217 408 641 ; C -1 ; WX 602 ; N uni02B6 ; B 119 333 483 641 ; C -1 ; WX 602 ; N uni02B7 ; B 99 333 562 641 ; C -1 ; WX 602 ; N uni02B8 ; B 123 217 510 641 ; C -1 ; WX 602 ; N uni02BB ; B 226 472 454 760 ; C -1 ; WX 602 ; N afii57929 ; B 198 472 425 760 ; C -1 ; WX 602 ; N uni02C0 ; B 199 452 451 878 ; C -1 ; WX 602 ; N uni02C1 ; B 185 452 469 878 ; C -1 ; WX 602 ; N circumflex ; B 193 616 502 800 ; C -1 ; WX 602 ; N caron ; B 229 616 539 800 ; C -1 ; WX 602 ; N uni02D0 ; B 163 0 439 518 ; C -1 ; WX 602 ; N uni02D1 ; B 229 355 404 518 ; C -1 ; WX 602 ; N breve ; B 229 645 537 786 ; C -1 ; WX 602 ; N dotaccent ; B 308 658 429 758 ; C -1 ; WX 602 ; N ring ; B 246 645 515 914 ; C -1 ; WX 602 ; N ogonek ; B 112 -193 293 0 ; C -1 ; WX 602 ; N tilde ; B 195 638 542 777 ; C -1 ; WX 602 ; N hungarumlaut ; B 214 616 599 800 ; C -1 ; WX 602 ; N uni02E0 ; B 147 334 501 759 ; C -1 ; WX 602 ; N uni02E1 ; B 231 452 371 878 ; C -1 ; WX 602 ; N uni02E2 ; B 141 452 443 774 ; C -1 ; WX 602 ; N uni02E3 ; B 104 452 492 759 ; C -1 ; WX 602 ; N uni02E4 ; B 185 452 469 878 ; C -1 ; WX 602 ; N gravecomb ; B 221 616 415 800 ; C -1 ; WX 602 ; N acutecomb ; B 280 616 550 800 ; C -1 ; WX 602 ; N uni0302 ; B 193 616 502 800 ; C -1 ; WX 602 ; N tildecomb ; B 195 638 542 777 ; C -1 ; WX 602 ; N uni0304 ; B 214 672 521 746 ; C -1 ; WX 602 ; N uni0306 ; B 229 645 537 786 ; C -1 ; WX 602 ; N uni0307 ; B 308 658 429 758 ; C -1 ; WX 602 ; N uni0308 ; B 212 659 522 758 ; C -1 ; WX 602 ; N uni030A ; B 246 645 515 914 ; C -1 ; WX 602 ; N uni030B ; B 214 616 599 800 ; C -1 ; WX 602 ; N uni030C ; B 229 616 539 800 ; C -1 ; WX 602 ; N uni0312 ; B 229 472 425 641 ; C -1 ; WX 602 ; N uni0321 ; B 151 -209 472 63 ; C -1 ; WX 602 ; N uni0322 ; B 32 -209 284 63 ; C -1 ; WX 602 ; N uni0326 ; B 84 -228 281 -58 ; C -1 ; WX 602 ; N Omega ; B 36 0 566 713 ; C -1 ; WX 602 ; N pi ; B 39 -20 578 538 ; C -1 ; WX 602 ; N uni0400 ; B 25 0 601 986 ; C -1 ; WX 602 ; N afii10023 ; B 25 0 601 901 ; C -1 ; WX 602 ; N afii10051 ; B 39 -230 561 730 ; C -1 ; WX 602 ; N afii10052 ; B 34 0 628 986 ; C -1 ; WX 602 ; N afii10053 ; B 54 -15 590 743 ; C -1 ; WX 602 ; N afii10054 ; B 12 -15 561 743 ; C -1 ; WX 602 ; N afii10055 ; B 27 0 574 730 ; C -1 ; WX 602 ; N afii10056 ; B 27 0 574 901 ; C -1 ; WX 602 ; N afii10057 ; B -11 -15 540 730 ; C -1 ; WX 602 ; N afii10058 ; B -117 -15 603 730 ; C -1 ; WX 602 ; N afii10059 ; B -27 0 606 730 ; C -1 ; WX 602 ; N afii10060 ; B 16 0 539 730 ; C -1 ; WX 602 ; N afii10061 ; B 36 0 702 986 ; C -1 ; WX 602 ; N uni040D ; B -3 0 606 986 ; C -1 ; WX 602 ; N afii10062 ; B 18 0 634 942 ; C -1 ; WX 602 ; N afii10145 ; B 10 -153 621 730 ; C -1 ; WX 602 ; N afii10017 ; B -53 0 514 730 ; C -1 ; WX 602 ; N afii10018 ; B 10 0 593 730 ; C -1 ; WX 602 ; N afii10019 ; B 10 0 569 730 ; C -1 ; WX 602 ; N afii10020 ; B 34 0 628 730 ; C -1 ; WX 602 ; N afii10021 ; B -72 -169 617 730 ; C -1 ; WX 602 ; N afii10022 ; B 25 0 601 730 ; C -1 ; WX 602 ; N afii10024 ; B -63 0 657 730 ; C -1 ; WX 602 ; N afii10025 ; B 0 -15 550 743 ; C -1 ; WX 602 ; N afii10026 ; B -3 0 606 730 ; C -1 ; WX 602 ; N afii10027 ; B -3 0 606 942 ; C -1 ; WX 602 ; N afii10028 ; B -4 0 661 730 ; C -1 ; WX 602 ; N afii10029 ; B -92 -15 621 730 ; C -1 ; WX 602 ; N afii10030 ; B -29 0 630 730 ; C -1 ; WX 602 ; N afii10031 ; B -4 0 607 730 ; C -1 ; WX 602 ; N afii10032 ; B 39 -15 563 743 ; C -1 ; WX 602 ; N afii10033 ; B -4 0 607 730 ; C -1 ; WX 602 ; N afii10034 ; B 25 0 592 730 ; C -1 ; WX 602 ; N afii10035 ; B 54 -15 590 743 ; C -1 ; WX 602 ; N afii10036 ; B 77 0 650 730 ; C -1 ; WX 602 ; N afii10037 ; B 18 0 634 730 ; C -1 ; WX 602 ; N afii10038 ; B 36 -138 565 800 ; C -1 ; WX 602 ; N afii10039 ; B -63 0 648 730 ; C -1 ; WX 602 ; N afii10040 ; B 10 -153 621 730 ; C -1 ; WX 602 ; N afii10041 ; B 86 0 606 730 ; C -1 ; WX 602 ; N afii10042 ; B -59 0 668 730 ; C -1 ; WX 602 ; N afii10043 ; B -44 -153 683 730 ; C -1 ; WX 602 ; N afii10044 ; B 70 0 535 730 ; C -1 ; WX 602 ; N afii10045 ; B -40 0 692 730 ; C -1 ; WX 602 ; N afii10046 ; B 25 0 535 730 ; C -1 ; WX 602 ; N afii10047 ; B 2 -15 537 743 ; C -1 ; WX 602 ; N afii10048 ; B -91 -15 603 743 ; C -1 ; WX 602 ; N afii10049 ; B -2 0 673 730 ; C -1 ; WX 602 ; N afii10065 ; B 38 -15 538 561 ; C -1 ; WX 602 ; N afii10066 ; B 37 -15 576 761 ; C -1 ; WX 602 ; N afii10067 ; B 43 0 510 547 ; C -1 ; WX 602 ; N afii10068 ; B 72 0 546 547 ; C -1 ; WX 602 ; N afii10069 ; B -11 -123 570 547 ; C -1 ; WX 602 ; N afii10070 ; B 51 -15 556 561 ; C -1 ; WX 602 ; N afii10072 ; B -17 0 615 547 ; C -1 ; WX 602 ; N afii10073 ; B 38 -15 519 553 ; C -1 ; WX 602 ; N afii10074 ; B 42 0 566 547 ; C -1 ; WX 602 ; N afii10075 ; B 42 0 566 760 ; C -1 ; WX 602 ; N afii10076 ; B 62 0 607 547 ; C -1 ; WX 602 ; N afii10077 ; B -64 -10 567 547 ; C -1 ; WX 602 ; N afii10078 ; B -24 0 629 547 ; C -1 ; WX 602 ; N afii10079 ; B 42 0 566 547 ; C -1 ; WX 602 ; N afii10080 ; B 56 -15 546 561 ; C -1 ; WX 602 ; N afii10081 ; B 42 0 566 547 ; C -1 ; WX 602 ; N afii10082 ; B 18 -209 570 561 ; C -1 ; WX 602 ; N afii10083 ; B 86 -15 566 561 ; C -1 ; WX 602 ; N afii10084 ; B 146 0 557 547 ; C -1 ; WX 602 ; N afii10085 ; B 16 -209 637 547 ; C -1 ; WX 602 ; N afii10086 ; B 38 -113 559 639 ; C -1 ; WX 602 ; N afii10087 ; B -17 0 600 547 ; C -1 ; WX 602 ; N afii10088 ; B 55 -135 579 547 ; C -1 ; WX 602 ; N afii10089 ; B 114 0 567 548 ; C -1 ; WX 602 ; N afii10090 ; B -24 0 629 547 ; C -1 ; WX 602 ; N afii10091 ; B -11 -135 642 547 ; C -1 ; WX 602 ; N afii10092 ; B 78 0 562 548 ; C -1 ; WX 602 ; N afii10093 ; B -7 0 600 548 ; C -1 ; WX 602 ; N afii10094 ; B 43 0 497 548 ; C -1 ; WX 602 ; N afii10095 ; B 47 -15 527 561 ; C -1 ; WX 602 ; N afii10096 ; B -15 -15 583 561 ; C -1 ; WX 602 ; N afii10097 ; B 19 0 534 547 ; C -1 ; WX 602 ; N uni0450 ; B 51 -15 556 804 ; C -1 ; WX 602 ; N afii10071 ; B 51 -15 556 719 ; C -1 ; WX 602 ; N afii10099 ; B 41 -204 514 760 ; C -1 ; WX 602 ; N afii10100 ; B 72 0 590 804 ; C -1 ; WX 602 ; N afii10101 ; B 86 -15 566 561 ; C -1 ; WX 602 ; N afii10102 ; B 54 -15 525 561 ; C -1 ; WX 602 ; N afii10103 ; B 13 0 473 760 ; C -1 ; WX 602 ; N afii10104 ; B 29 0 501 719 ; C -1 ; WX 602 ; N afii10105 ; B -4 -209 477 760 ; C -1 ; WX 602 ; N afii10106 ; B -64 -10 592 547 ; C -1 ; WX 602 ; N afii10107 ; B -1 0 578 547 ; C -1 ; WX 602 ; N afii10108 ; B 21 0 494 760 ; C -1 ; WX 602 ; N afii10109 ; B 62 0 607 804 ; C -1 ; WX 602 ; N uni045D ; B 42 0 566 804 ; C -1 ; WX 602 ; N afii10110 ; B 16 -209 637 760 ; C -1 ; WX 602 ; N afii10193 ; B 55 -135 579 547 ; C -1 ; WX 602 ; N afii10050 ; B 34 0 657 879 ; C -1 ; WX 602 ; N afii10098 ; B 72 0 577 701 ; C -1 ; WX 602 ; N uni0492 ; B 34 0 628 730 ; C -1 ; WX 602 ; N uni0493 ; B 56 0 546 547 ; C -1 ; WX 602 ; N uni049A ; B -4 -153 661 730 ; C -1 ; WX 602 ; N uni049B ; B 62 -135 607 547 ; C -1 ; WX 602 ; N uni04B2 ; B -63 -153 648 730 ; C -1 ; WX 602 ; N uni04B3 ; B -17 -135 600 547 ; C -1 ; WX 602 ; N uni1E12 ; B -60 -190 552 730 ; C -1 ; WX 602 ; N uni1E13 ; B 24 -258 612 760 ; C -1 ; WX 602 ; N uni1E3C ; B 38 -190 505 730 ; C -1 ; WX 602 ; N uni1E3D ; B 126 -240 478 766 ; C -1 ; WX 602 ; N uni1E44 ; B -3 0 605 876 ; C -1 ; WX 602 ; N uni1E45 ; B 41 0 536 720 ; C -1 ; WX 602 ; N uni1E4A ; B -3 -190 605 730 ; C -1 ; WX 602 ; N uni1E4B ; B 41 -244 536 561 ; C -1 ; WX 602 ; N uni1E70 ; B 39 -190 651 730 ; C -1 ; WX 602 ; N uni1E71 ; B 87 -243 549 703 ; C -1 ; WX 602 ; N Wgrave ; B 40 0 672 986 ; C -1 ; WX 602 ; N wgrave ; B 44 0 643 804 ; C -1 ; WX 602 ; N Wacute ; B 40 0 672 986 ; C -1 ; WX 602 ; N wacute ; B 44 0 643 804 ; C -1 ; WX 602 ; N Wdieresis ; B 40 0 672 901 ; C -1 ; WX 602 ; N wdieresis ; B 44 0 643 719 ; C -1 ; WX 602 ; N Ygrave ; B 95 0 659 986 ; C -1 ; WX 602 ; N ygrave ; B -20 -209 599 804 ; C -1 ; WX 602 ; N uni2010 ; B 147 233 419 314 ; C -1 ; WX 602 ; N uni2011 ; B 147 233 419 314 ; C -1 ; WX 602 ; N figuredash ; B -25 240 591 310 ; C -1 ; WX 602 ; N endash ; B -25 240 591 310 ; C -1 ; WX 602 ; N emdash ; B -25 240 591 310 ; C -1 ; WX 602 ; N afii00208 ; B -25 240 591 310 ; C -1 ; WX 602 ; N quoteleft ; B 226 472 454 760 ; C -1 ; WX 602 ; N quoteright ; B 226 472 454 760 ; C -1 ; WX 602 ; N quotesinglbase ; B 99 -141 327 148 ; C -1 ; WX 602 ; N quotedblleft ; B 120 472 571 760 ; C -1 ; WX 602 ; N quotedblright ; B 107 472 560 760 ; C -1 ; WX 602 ; N quotedblbase ; B -8 -141 443 148 ; C -1 ; WX 602 ; N dagger ; B 95 -97 555 730 ; C -1 ; WX 602 ; N daggerdbl ; B 28 -97 555 730 ; C -1 ; WX 602 ; N bullet ; B 155 227 446 517 ; C -1 ; WX 602 ; N ellipsis ; B -33 0 521 148 ; C -1 ; WX 602 ; N perthousand ; B 0 0 603 700 ; C -1 ; WX 602 ; N guilsinglleft ; B 150 68 429 518 ; C -1 ; WX 602 ; N guilsinglright ; B 154 68 432 518 ; C -1 ; WX 602 ; N uni207F ; B 126 333 460 648 ; C -1 ; WX 602 ; N Euro ; B -5 -15 583 743 ; C -1 ; WX 602 ; N trademark ; B 0 446 550 730 ; C -1 ; WX 602 ; N partialdiff ; B 92 -13 512 647 ; C -1 ; WX 602 ; N Delta ; B -3 0 606 695 ; C -1 ; WX 602 ; N product ; B 74 -213 528 742 ; C -1 ; WX 602 ; N summation ; B 69 -213 530 742 ; C -1 ; WX 602 ; N minus ; B 42 271 560 355 ; C -1 ; WX 602 ; N fraction ; B 7 -93 518 730 ; C -1 ; WX 602 ; N periodcentered ; B 222 272 375 422 ; C -1 ; WX 602 ; N radical ; B 28 -20 579 829 ; C -1 ; WX 602 ; N infinity ; B 20 122 583 493 ; C -1 ; WX 602 ; N integral ; B 62 -182 538 757 ; C -1 ; WX 602 ; N approxequal ; B 42 148 560 471 ; C -1 ; WX 602 ; N notequal ; B 42 18 560 608 ; C -1 ; WX 602 ; N lessequal ; B 41 0 559 531 ; C -1 ; WX 602 ; N greaterequal ; B 42 0 560 531 ; C -1 ; WX 602 ; N house ; B 71 0 531 596 ; C -1 ; WX 602 ; N revlogicalnot ; B 42 181 560 421 ; C -1 ; WX 602 ; N uni2311 ; B 47 126 555 634 ; C -1 ; WX 602 ; N uni2319 ; B 42 181 560 421 ; C -1 ; WX 602 ; N uni237D ; B 4 -228 598 89 ; C -1 ; WX 602 ; N uni2423 ; B 28 -228 546 89 ; C -1 ; WX 602 ; N SF100000 ; B -10 39 612 124 ; C -1 ; WX 602 ; N uni2501 ; B -10 -3 612 166 ; C -1 ; WX 602 ; N SF110000 ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni2503 ; B 222 -505 379 770 ; C -1 ; WX 602 ; N uni2504 ; B -10 39 612 124 ; C -1 ; WX 602 ; N uni2505 ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni2506 ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni2507 ; B 222 -505 379 770 ; C -1 ; WX 602 ; N uni2508 ; B -11 39 612 124 ; C -1 ; WX 602 ; N uni2509 ; B -10 -3 613 166 ; C -1 ; WX 602 ; N uni250A ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni250B ; B 222 -505 379 770 ; C -1 ; WX 602 ; N SF010000 ; B 261 -505 612 124 ; C -1 ; WX 602 ; N uni250D ; B 261 -505 612 166 ; C -1 ; WX 602 ; N uni250E ; B 222 -505 612 124 ; C -1 ; WX 602 ; N uni250F ; B 222 -505 612 166 ; C -1 ; WX 602 ; N SF030000 ; B -10 -505 340 124 ; C -1 ; WX 602 ; N uni2511 ; B -10 -505 340 166 ; C -1 ; WX 602 ; N uni2512 ; B -10 -505 379 124 ; C -1 ; WX 602 ; N uni2513 ; B -10 -505 379 166 ; C -1 ; WX 602 ; N SF020000 ; B 261 39 612 770 ; C -1 ; WX 602 ; N uni2515 ; B 261 -3 612 770 ; C -1 ; WX 602 ; N uni2516 ; B 222 39 612 770 ; C -1 ; WX 602 ; N uni2517 ; B 222 -3 612 770 ; C -1 ; WX 602 ; N SF040000 ; B -10 39 340 770 ; C -1 ; WX 602 ; N uni2519 ; B -10 -3 340 770 ; C -1 ; WX 602 ; N uni251A ; B -10 39 379 770 ; C -1 ; WX 602 ; N uni251B ; B -10 -3 379 770 ; C -1 ; WX 602 ; N SF080000 ; B 261 -505 612 770 ; C -1 ; WX 602 ; N uni251D ; B 261 -505 612 770 ; C -1 ; WX 602 ; N uni251E ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni251F ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2520 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2521 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2522 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2523 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N SF090000 ; B -10 -505 340 770 ; C -1 ; WX 602 ; N uni2525 ; B -10 -505 340 770 ; C -1 ; WX 602 ; N uni2526 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni2527 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni2528 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni2529 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni252A ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni252B ; B -10 -505 379 770 ; C -1 ; WX 602 ; N SF060000 ; B -10 -505 612 124 ; C -1 ; WX 602 ; N uni252D ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni252E ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni252F ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni2530 ; B -10 -505 612 124 ; C -1 ; WX 602 ; N uni2531 ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni2532 ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni2533 ; B -10 -505 612 166 ; C -1 ; WX 602 ; N SF070000 ; B -10 39 612 770 ; C -1 ; WX 602 ; N uni2535 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni2536 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni2537 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni2538 ; B -10 39 612 770 ; C -1 ; WX 602 ; N uni2539 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni253A ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni253B ; B -10 -3 612 770 ; C -1 ; WX 602 ; N SF050000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni253D ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni253E ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni253F ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2540 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2541 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2542 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2543 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2544 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2545 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2546 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2547 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2548 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2549 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni254A ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni254B ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni254C ; B -10 39 612 124 ; C -1 ; WX 602 ; N uni254D ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni254E ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni254F ; B 222 -505 379 770 ; C -1 ; WX 602 ; N SF430000 ; B -10 -45 612 208 ; C -1 ; WX 602 ; N SF240000 ; B 183 -505 418 770 ; C -1 ; WX 602 ; N SF510000 ; B 261 -505 612 208 ; C -1 ; WX 602 ; N SF520000 ; B 183 -505 612 124 ; C -1 ; WX 602 ; N SF390000 ; B 183 -505 612 208 ; C -1 ; WX 602 ; N SF220000 ; B -10 -505 340 208 ; C -1 ; WX 602 ; N SF210000 ; B -10 -505 418 124 ; C -1 ; WX 602 ; N SF250000 ; B -10 -505 418 208 ; C -1 ; WX 602 ; N SF500000 ; B 261 -45 612 770 ; C -1 ; WX 602 ; N SF490000 ; B 183 39 612 770 ; C -1 ; WX 602 ; N SF380000 ; B 183 -45 612 770 ; C -1 ; WX 602 ; N SF280000 ; B -10 -45 340 770 ; C -1 ; WX 602 ; N SF270000 ; B -10 39 418 770 ; C -1 ; WX 602 ; N SF260000 ; B -10 -45 418 770 ; C -1 ; WX 602 ; N SF360000 ; B 261 -505 612 770 ; C -1 ; WX 602 ; N SF370000 ; B 183 -505 612 770 ; C -1 ; WX 602 ; N SF420000 ; B 183 -505 612 770 ; C -1 ; WX 602 ; N SF190000 ; B -10 -505 340 770 ; C -1 ; WX 602 ; N SF200000 ; B -10 -505 418 770 ; C -1 ; WX 602 ; N SF230000 ; B -10 -505 418 770 ; C -1 ; WX 602 ; N SF470000 ; B -10 -505 612 208 ; C -1 ; WX 602 ; N SF480000 ; B -10 -505 612 124 ; C -1 ; WX 602 ; N SF410000 ; B -10 -505 612 208 ; C -1 ; WX 602 ; N SF450000 ; B -10 -45 612 770 ; C -1 ; WX 602 ; N SF460000 ; B -10 39 612 770 ; C -1 ; WX 602 ; N SF400000 ; B -10 -45 612 770 ; C -1 ; WX 602 ; N SF540000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N SF530000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N SF440000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni256D ; B 261 -505 612 124 ; C -1 ; WX 602 ; N uni256E ; B -10 -505 340 124 ; C -1 ; WX 602 ; N uni256F ; B -10 39 340 770 ; C -1 ; WX 602 ; N uni2570 ; B 261 39 612 770 ; C -1 ; WX 602 ; N uni2571 ; B -54 -505 656 770 ; C -1 ; WX 602 ; N uni2572 ; B -54 -505 656 770 ; C -1 ; WX 602 ; N uni2573 ; B -54 -505 656 770 ; C -1 ; WX 602 ; N uni2574 ; B -10 39 311 124 ; C -1 ; WX 602 ; N uni2575 ; B 261 81 340 770 ; C -1 ; WX 602 ; N uni2576 ; B 310 39 612 124 ; C -1 ; WX 602 ; N uni2577 ; B 261 -505 340 82 ; C -1 ; WX 602 ; N uni2578 ; B -10 -3 311 166 ; C -1 ; WX 602 ; N uni2579 ; B 222 81 379 770 ; C -1 ; WX 602 ; N uni257A ; B 310 -3 612 166 ; C -1 ; WX 602 ; N uni257B ; B 222 -505 379 82 ; C -1 ; WX 602 ; N uni257C ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni257D ; B 222 -505 379 770 ; C -1 ; WX 602 ; N uni257E ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni257F ; B 222 -505 379 770 ; C -1 ; WX 602 ; N upblock ; B -10 132 612 770 ; C -1 ; WX 602 ; N uni2581 ; B -10 -505 612 -345 ; C -1 ; WX 602 ; N uni2582 ; B -10 -505 612 -186 ; C -1 ; WX 602 ; N uni2583 ; B -10 -505 612 -26 ; C -1 ; WX 602 ; N dnblock ; B -10 -505 612 133 ; C -1 ; WX 602 ; N uni2585 ; B -10 -505 612 292 ; C -1 ; WX 602 ; N uni2586 ; B -10 -505 612 451 ; C -1 ; WX 602 ; N uni2587 ; B -10 -505 612 611 ; C -1 ; WX 602 ; N block ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2589 ; B -10 -505 535 770 ; C -1 ; WX 602 ; N uni258A ; B -10 -505 457 770 ; C -1 ; WX 602 ; N uni258B ; B -10 -505 379 770 ; C -1 ; WX 602 ; N lfblock ; B -10 -505 301 770 ; C -1 ; WX 602 ; N uni258D ; B -10 -505 224 770 ; C -1 ; WX 602 ; N uni258E ; B -10 -505 146 770 ; C -1 ; WX 602 ; N uni258F ; B -10 -505 68 770 ; C -1 ; WX 602 ; N rtblock ; B 301 -505 612 770 ; C -1 ; WX 602 ; N ltshade ; B -10 -505 535 770 ; C -1 ; WX 602 ; N shade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N dkshade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2594 ; B -10 610 612 770 ; C -1 ; WX 602 ; N uni2595 ; B 534 -505 612 770 ; C -1 ; WX 602 ; N uni2596 ; B -10 -505 301 133 ; C -1 ; WX 602 ; N uni2597 ; B 301 -505 612 133 ; C -1 ; WX 602 ; N uni2598 ; B -10 132 301 770 ; C -1 ; WX 602 ; N uni2599 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259A ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259B ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259C ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259D ; B 301 132 612 770 ; C -1 ; WX 602 ; N uni259E ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259F ; B -10 -505 612 770 ; C -1 ; WX 602 ; N lozenge ; B 57 -233 545 808 ; C -1 ; WX 602 ; N uni2638 ; B 17 103 586 657 ; C -1 ; WX 602 ; N fi ; B 47 0 613 760 ; C -1 ; WX 602 ; N fl ; B 47 0 613 760 ; C -1 ; WX 602 ; N uniFFFD ; B -17 -84 602 887 ; C -1 ; WX 602 ; N dlLtcaron ; B 280 616 459 800 ; C -1 ; WX 602 ; N Dieresis ; B 203 631 513 731 ; C -1 ; WX 602 ; N Acute ; B 280 616 509 746 ; C -1 ; WX 602 ; N Tilde ; B 190 631 541 739 ; C -1 ; WX 602 ; N Grave ; B 244 616 405 746 ; C -1 ; WX 602 ; N Circumflex ; B 190 616 500 747 ; C -1 ; WX 602 ; N Caron ; B 215 616 526 747 ; C -1 ; WX 602 ; N fractionslash ; B 22 246 554 425 ; C -1 ; WX 602 ; N foursuperior ; B 134 326 459 734 ; C -1 ; WX 602 ; N Breve ; B 220 627 526 747 ; C -1 ; WX 602 ; N Dotabove ; B 303 631 422 732 ; C -1 ; WX 602 ; N Hungarumlaut ; B 202 616 587 746 ; C -1 ; WX 602 ; N Doubleacute ; B 176 616 473 746 ; EndCharMetrics EndFontMetrics htmldoc-1.8.27/fonts/Monospace-Oblique.pfa0100664000212600000240000055172510330505373017103 0ustar mikeuser%!PS-AdobeFont-1.0: Monospace-Oblique 1.15 %%DocumentSuppliedResources: font Monospace-Oblique %%Title: Monospace-Oblique %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:21 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Monospace-Oblique known{/Monospace-Oblique findfont dup/UniqueID known{dup /UniqueID get 4136343 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Monospace-Oblique def /FontBBox {-239 -1034 1512 2105 }readonly def /UniqueID 4136343 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Monospace Oblique) readonly def /FamilyName (Monospace) readonly def /Weight (Book) readonly def /FSType 0 def /ItalicAngle -11 def /isFixedPitch true def /UnderlinePosition -213 def /UnderlineThickness 141 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 12D37711F3EF58D4B0160CA0E8A8B30BEAB80C582DE4028394F513096550F71FA11E0919 505AD6B7CD35BB9BC351DECCB83DC12688E510CD157D892C101B29A3F7371CD20D496932 3EB249027679D3DB7582D953F033C85D9B05B2E5B9E3F8CC14BCEA62C23DCEDB24A737CE 0B749199BDC0ED14B3F80C24B773C7D94E0C32CB6CABC70B74F04C589AE25F78DAF2C485 03C9800E9816B03D596C6E3855892618845E5102FF46233B460979463BD7A820DDD6835A 95C220225DFE27AA6BB31E99C60F679AC7C5A3363C40EF4C555EB47B0B8DB21ABCDD571D 28DE4719336D102E1E7D1EDCC5B3B0E60354D35EB856F234AB60D3C84342CB01D8747F93 73140C128A546250AD327045F7903E144A248D16DBC150EBAAE66ED529E3E69214BF4A15 12C2CA07FCF9A1CA5DD6D5A3577FF552FCE29E2CE9236A470FD258273428609693228B91 5420FBA3ECF0A2406B4484196374D33A6C4ECFB322185AB88BAE99CB4FF8147A0C4D3274 29B1B69D3985E21294AC5BF3777F72FD8986BCFF6374642612A36E01B5F19A4C313C684F B4A10E6D366CE685E4D566655263E514862031506A3B886388753592B0F9A5D61EE9C644 3E5E6BCD8E4FB03ECBF8955C142520D0F71F7E4DC8C45E335345B990BE35EEF99170556D 05A25CFF99E21151C7C1407675D515921EDD3FA3B98A58FBD14CDF1AB6AEFF424587D2F3 CCBAA445F12ACC21F1AFB0EBA2D9D9EFED2C77A01C7B4FF0042E9BF457442297D0989DE2 DC27042B646D45A9BCB9D9B80AAD373DC283EF83A52BBC4FF0B2E17194CF18618BEB8CCB BA24F7B836924BAF4DA12D018EB41F3307ED0F6B29C51B20D92FE58C27CF5E7D8A3386EB 04685234F0D2D1704EFDE3C72CAEE80A17BFC25C4ECE7DA8A4F9044856A19794E13B9199 279CDE03A30495084E75DB7C213CEA250A5DE3A17D168335FEF9BE57291A770F53502F9F 78ADC6BAA3223B013B120789D9672B286D7713F8AE9802A4424B889344D6D06B280F60AC A1A81A0D8ED436C84543D86A866C981A4A8ABD3488FE907F39B32311E4C2EE313AE91061 A1FE81235477F816259BA0D0151DCB3F28B2F59518B09E249369379B19E5DFC19EE63BEA CBB0636880CB367BB50ACF4767E2A9E9BD7F0339D4128C54E622D4C39C5FB383438B4A73 9BC3A717D1E3F8A8CE7AC4FB789C7531FCDF82C32E4C8591C3D707E6CEB702C2D210627C 558FB139108437B8E9D99B2F8532F76709E821391A07BB1A9305F62EE8F9E1EA1844FFAC C5205E5428D155457F451A8177E75D61195BC5A9F564297E4C36C9D3F730D1ECDF921096 C42A26E66BFDB9AE5682CE255B0DF1265A763798CAEA7A3138CAE6A7F6711899EE2FE701 D825DF705F2BA8D8C6A6FC077C7F63C35D0CC5A183A03EEDB7A81D71092717E60CCD03D9 D7EA295AE3407BFA22C26CF4D7689B46CB49FFCDC43F3BF5B3A49E53387FF86B4267B880 361199FE0B20B7955DE33F541FFFA0DAD7917CD64ABBABF977ED46127DBCFCB179757EB8 BC08D07CA46AAF440882C7ACC9B93C575C363FA81F381CCBA6B3ED329D349D8D7E3E1884 8327A19CA6C83DDC89005AB7D6725D11AC8BD6F2C7CE8B10131F7A82484D03A3C6D854AD 4E173EC6852F0E46D46F6B85B2641AE69CA53069AE2B330F57223C297E09358F7DE81F08 CAE980A507F685FB2156714E7E9E88D88FBCAACF86ED25335647B1238F31BDD5D820EE43 821F5CF2F7D9A67586D99E9D4931AAA7C2D32FAEE392CD9FA4DB8F69D76C3BBB48A10CAF BA3E78F64701913B414845FE6A5F78A24CF5CD29097FE21032C5FFB34F107F51B3D8C848 2100FE54272E0E17B79419FC0AC8966CCB7AFCF723A8F721B06CC80CE0B07B92DFD20E93 BF01ED0C72F6385A49524A7AF5EDF658FCEA7475FC6CA315926826FAD3A90FEB182B6651 B1966E20F7300D288DB7A53402D5D8D0A748E3C0D21B9DD078FE8560B40C06B2A7037659 A8603518F2A67C62BBD9A29F452723A8EFE6CFA2C356EDFACDC8AE936533498DB168588B 6B96C1FA3A2740E3BAF4470783C49202FB9D1A9A9DC3B375F1187CC1DFECBC616584EE00 BD76FE39C6EF0B7A7ED422042C1EBD392A51BB458F920DC197915A74CE8E6635EAA0A772 426427212311ADCEFEE54E075B8E03ABF3D4F7939D35809F0B6AAFFD9C08562B9E6BF8CB B6E3303A1B3851920EEA8EA61B081D22A585403C8D25E645987434DA4A16E57A585B4097 3FE63FF99E2BB9B860DEC906F8FC183A6C57570859D7E381A6CEDCECFD566DD50CA67801 ACC6151D9C6D7D5A3A19C5A283EF37F1F418A469BA10E45EBAB0432A366C1549CB402F12 DD99AC7F802EB9D2B56899BEEB60C65C6B22EEB9A00C680E94E8B190B1C3A395B6535C3A 3831D857819FC23F840B273D3133F1BF243EDCF846D8E308E04F6A38B5C73502F34C6680 0AF88F2E920E39CE4C31DB700CE6A2777048E4B2509EDD822FB0036D888B86ADD2A01C8C AD1EDAF950AA9EE999B4EECA0DBF02064602085C18FFF27707F09511AF5611DC76220CF9 FA55BB850E7F4359A9B597ED3E3298B765D9AEA76484DCC7338551FAA0F1BB8CA3D0A628 5BA8BD8E8342155B682CD6C8FBE6631D627C4616E80114385D6B52E2C827D5E7A2C1CDE2 B32BF8686B1E6A3E8689D1C2191C6C3E9697633E65521500EC357746647364248682F2CC 37AE635B876025B85622049F99B824C32D060CC599FD4CDD9BB51530FAE7EA750DFB07AC A3226EA764D547F7158AD27B0187FB701626E7364C72377402A88754F1D3B5842031E319 9DC3FAB04D7A3C1FF486AC03EDE9CB78A5E911F56B06635ADF5867E64C2871317AA8B298 3F0FEB5251C244D589A8C9BE5A9C6382F9B409CE2D4F19AF79FDD4157C326A43EC78BC27 FA5384398C5F927955B2B67EE653CC6EFDCAF7C23C0D08B8C3DC41CB5844E057EE1A277F 8DC7FA99594391BA6DFF30FC9FEA550E58F39934675E587698AF82F00F428AC930567362 B401C42AA7B9B4FEC9443E9AF5FB3E999A94ED088D97CB11E6955BC9E561D59EE34BA1ED A6C9217EF560D154BA8F19865CB8C913F12986A48DE78E9D284C0885C8B69DB0CB47560F D88FC212B29C91E004D18376A09A184ED29866DC4A179293A52A1BA548E6F8439B326A16 2FA0CE6AED75A05FA30EF09A72CFE06124BDF8016C638725770D529A0163954177D45382 3A74FD8E44B3773EA1280431E880CD2398A944C4D045AE91138244E0BC15343D6AD7225C 20406C0AA1A4257FB281C2FC949CC3D215F827F782F9F4BD121F67794A8F13F19FEA800B 6C7240E804D6FBACC9A2CDB6E7D24F6C61E89CB47C94D8E961ACB9355A12B42486447C02 7AF9D7B1C4F0E4CAA8E28BE31684D721083208D76482B9BE451A4F0426F5DA9A2413D98F CA9BFC29E1A8680172ECF33C7218D796D6447FB643974250FE831F4D5F0ED8ACD2B0E9E8 DC6479E203625F2C5D62F96244773D954ED8F9B4D74A0D8426A9A61176EE6AA0DB4BB3FD 8E0F9F49119F2F2F1EDFAF9FCE35316F718A3DBCD0DA416574C87366E3321DAE1798F437 7FF418523E807C3D80C80A5057F16781ED3CDE4EA1AF173093712B3F76DA73D0FE64E273 C4309D9BF5CB0308A3BFCDC1D7BF1830D22C77414BEAF5868006615536737E20C438265E 74B43F267E748B834FB03691FE68D944561F1DEB1CA295E442C6EBC274B6D9A0D4C2BCC6 5D6401049EBC97F0F7A5678389267B0D6C10757954FAD66FEB12875BF4349BBC775A0804 00E25D70A165C7ABE5F5F4427DBE548C9701E20CE28356478DFFA5F08C30FC08228CD6F3 C6B030734A683BC5196F3D29C43E80F96D4EE3DD54785633987F385340098B5498A7DC1E 07D42614FE6F1BA7068B0677345C695A494BBF150C8E4F91EAD66E387856CB09986439A4 03A2EA248EDD1D00A4D490B9DC4BD11E36E155EBCA715B513D991A19548B417539B36308 0D7E8E3ADECC1073EAF675C90D5897E13CA0AAAB196E8A48F867F0F71E5E5E24C36D5492 E476ED92090842D327E4682E483F082FF71BD290542C19242F596801E9B67386498D3855 BD5AFDF1A0A6AC211B38278F7ABDEB586EE5FD5ED91382EED8677D8A1792B270A46812DC BA8A1379D5E5B7413CD43C6CB3E447E49F35CF2E7BC2E99229286B2A636F83C16BECF6E8 63E23449DB08CD8FDF0F5F8EDE5A410131B866B55C6BBA8528C17072EAA042662D855A3E 5D164BA81ECD230EEFBD2A37F823D410469B05F3198B56400B89B6637BEDE2A19465F240 338ABE767699529CECBBAEF4879AC00A6639589927A1CA91298FD051FF15223EC94FBB3C 1C61D1611D05E59ED9BE06C0C9DB3C311CDA93CFD321508D1187007207A02EE50F422383 DCE98954FF609844A8AE9C29B56C1AAC1238D45FA35A3DA527E3FB618CAEC32EE156BFB6 2E8F66F6FCA7EA0B9BCF0A144A05FD8FE25BFF681E3AE6784D6A670FA08776299E0ADA1B A972D1E35CE0BDA9F06F8A8B96C8750CF25E24F69A0A49C65F7A9716FA4C5F3CEF3512F7 AC82BE0C5F21A6876F73880FC7CEA205B4286929ED2513D38A5695208A5CD4DE401B214A BE67DA7B8B2C63F5B06BB039D7294DC883723FB83F736A5EE8A02C9F968FCFE5556E52D7 9E070ED53CF85FE574F52C9446E61BC83DDE8C5AB547B08E19561E6F4B84D422DE6DF197 3B2572006AAE0CC1F19E342389DF278FF04BDC5CBE51E27FA51D696B123DA5B342648532 FAD98EBE03894533AFE4BECE638CA5785DDC9D7ECEB71E59B01285978563920DBF542794 6B13DF1BD0C0D349B77290CE840C17E9F71A7E34F3EF3472AB04E9DEC00BC4C258F522AB 15C73CF78CCB3A83D7A2047FA52A4C7196C4E750C14D77EBF5C799702BB84B646BF7F9A1 2A6D27166F7AC9B7A2D6B6062627331C8435A64C04096FEEF7867334828680E41990E319 334217DE53F32DD9FE73537D000A5493EBC0B5282FC1D72E0DFEEB51694F6B2DF87F3E80 858DADF97EA3E4A864AC9AF980B1BA0159E7E046EF395143D2C2AAC26A0FC3A8F1ADB37B 6E3AF132D51D9ACBABDB4244AD14C837A30C3B9CA47CEA267845DFD9FD5A0522BB50BC0B CADD7730E893A06E8F175DF29B4092EDAE7CB28F8FD389C14EACC8FFDC815355B9FB564A F8C33D5871ECFC0CD0E33A0AAFD6F7323A3FD696B4EE641249BFDF82EAC73D0D823A5BC0 EC34C42269F5699F129273CC384C8A17BEDC4BA4E384BE7D6213EB49FFFC5C98FBE27877 85F64405CA64B5F2C10470B82BC1471F59C8EEEC668D88CF0441451E275328E3903A54D9 216F0F70F63DCE071BA66B31E59EF5731CC778455222D441C0809C690AA9E70AEB6546AB 6B6D27A66004E67813F7509A3F2B2FFD717A77FBE48A7480FE4F2E0E9DF61D378D817928 926F8F202341E945DDD9F747F6AA931A9369326C3AEECFAE75D289691683E6635E215E10 9C76807AA3B71450BDEAC4AC8A55F7B6B7933745E2F3F2F3049CE858B10E17F8C236B247 FAC04A7C3E6298C1A2036E14EE164AE8478FA4AE6F24A9E542D3D2B450E4EDEE099AA693 16E89A308123CC5DF3E4822A5B57C7FEC21271BFA0168C3309ADF2DABEA0610FB18ABF69 5622E7A1C371B3EC501D52A1DFB94AC84E30A500449867BEFCB5A07DC54A2F961F296DF4 9829E92B8E0928315D60103EAF984847A6FF6185F8C1EEAC3A114F7588AD864F3A16B94E 3AE4E0738E13B6190AF3A27427DEA99F8A6491CF60C2F8F5C8A524CDDFC5AF2F7304DF82 DD8E2F273DC82A9F0F7812297C485AE2B330DBE5B0C2E91922484FAC56649226FE104F57 E88622612FD6CC084725C3C717D6B04432D13EC9DD5BDE98FA56EBFD2C7FC973AB611168 C43379538659B695DEC62E8D58BEFCF44F9F0F52273D998C6BD8766BF4B26E479DA21563 04B1248C80C58E7A9609B64934AD07C1945F03AD258D32D4D47B6C1A95D44B135F380A64 C7ACDDD22D510DCD056A38C8400F21900F1692BF2210F6B161EB8C6E7702291C0CD2123F 6EDA46B95BAB323A99784F32A3FAADE6599CAF43F3CF39D43776A205B6024F6DCB27349E C394FD27D389C1CED32138732AF2EDD4215A8E81A058BDF9797E0EE81D13B7773897EEAA B71BF9D0D6D913DC0887442A470D5878766BC30C065E64456A88F88F754C3B6CC402BD8F BE60B69F6CF942EC531A6768887DC1D6C08A690109E86D08D9470B9A684D751101A2821E 48805AD36D0E6D3BFF33FFC4994645AD2B599188B30649ADF04EF349B934E99E3D767C6F 95DB404233259FFA5BF4CD809B4E08F51653D72C2C24B7419B49585672244128A45AF33A 82BF11CF4B402B322D7DD20410A85B28CD32DBBCBAD192079514ED52996086747DEDB275 8C8CD1F05B82B0BB80F5A0BD1C7A2F726B29F6D8DBDC9E199C494A8682D3A12F3430388E 845B4878CF87871AC6914DCE0E7AC20407F04B3A41EA5EE88C23AB19D61E5446ECA0CD77 0D6992CA5DFEE0265BF81AD4EAF93BD5C068D1A0FB1704499AC8F16E26754ABBF318E528 D7B12C0CE352E4FB67A1F6DBAF06C9EE5C0A04A926EB75A2E76E1050CF4300721B0F130C E912C53166696D93B131CE8D487FE3B5A8450EC7A8961479FBF29E63DA9B03E79F2FE5C7 14B57DAAB035A0D2A6A9BB5FED68F49C58360E5E974709D12AAD0680E1C0145526CE2C88 36FC489C50D8D3FC5C0AE2C517030391268B306D231A9BB1E881928727235C693FC86B6F A9A62D337FCD128CFE1BCACDABE9F384B90C10DF4967A447D53828F62E753D639E4432AF 361F680C212BFB50065241FD8403C80D5FD3F57A60643D586449C76238BAD444D1282943 FBF39869CCADCDCD0815A484C494FA16930F3636FE854A1530277D1232303C0A86365066 89FFD5E3C5AC028CDD18A3FB360C8973AEE50FA93127D6C7B3F323689F3075CEB2017BF8 BF827381B96044E245DA2A845A536E053A1D5B540A8A27745547FF27CC9368EEACA827C7 A47E56107A68B58A4ADC9B4A56C69C16A061F50C79A7034D317FA0F61A123D749AE3A140 4D8A29EF631D5F925C8116256B40B81EAA31C326F4902BF46D68C5D6930EC624F3F50587 9CB9DE9740CA93D36B8C84FF21E7E2AE48FAB457A8973106BA5A4A9D35D19AEAB1AE1E2E 8794C96BEA993A03C1CAC00697D95BF3287D7B14701DF8EF79683F2771A444D334E7074E 0B1602CC3D08293FCC6815946798BA56470783A0BCEEF3BBAE34D9ADDD47EC0E23E63505 67965078615B540448EFE238DF5F70F1439123534B37B01D7189DFB6B21E783474B476F1 9857F50753D49ACB4EA73BAFD9727E3EDB0ABD056CA73046DD3743451C0C2E54AC8646A9 C1E269B570605A92E28FF146F6C9E49FEBC2B0D1946D673064640F610FC762ECBF415845 E80463295D0EC0F6CDD35852CC9126E08DA99B91A75CF7EBD86466AE0C381E87E9D99BEA 1F6D35F3603AF79212C5146712B20727A4CA38A6CD684B5503BA1C18590EDF890902448D ED527E7EB9A15623500BDA827261BEC6E0AFC5D644DD384BA6B3BBA29EF93FEAC2BA6C56 82AAD04CA8FEC95DC915B8566A268801A7242DACB08C0A47122DFE37EFE10B721CF410A0 471163142D46D3FEA4282739312E53BF815FA207F0DDFD7200FE6F7730D33F25ECCCE770 2765D198251988F9D85E4828719243D6275E563E439F7F7162BDCC0BE33CF25EDA87DB8B D51D0B64335C358ADAE488D997D3ED523C3187A50D1E287E00552844DC66F3417D145635 3984699130F9B7E860359DE4B14195307288A8EED3BE2AE04339CE84BC1C1D02861C32BA 47C050474FA44D746FB2BCC7A1469C9246DF0725F6B854FA1AB68D68E96228E2CB7834E8 01684DDB14552974A23ECA2254EF2B6D195650ABF1E2BD69B2BBE1BF520CA77E748C0152 FC5665C36AEBD0002190FA221DD3115ECAF905114FA7222822523711E48DC71EF5FF7BC0 9BF1C3DEA0283B5868357DBBFF7B4C6F91C47F941B40F03259AD826AE6FF057EF4B07B9A 058C4B7BDF58C6FE1D71FE9F5E96ACEDF8DB833A4CBE46BDF8009F0FBECA3314AFBB162F 0545C10E45F1F697A2B895849DE0EA02F2770349317E43BE527A3B1D808785CA305E06F6 84935F0E7AA4E015A8A4FF3E8F7E6E5472D161EA42B964F48D1450F9E52D5CB33C5D84B1 4138225527E6680BB40D7E73B2CB4BEC73EEF10629E9C614DDF422DCE8E4B6F64DFC4ECC 3C48660A9E1983F4A84E4EB254D5EDA7E1A6736D98D878502A6320CC661E4F47418B4D4A 9D0DD2A9733C000A0AD41583095DFF2D1AFDCF6ECF69C85E5C9BB3F202BDDFB142E6C18E 60B07D7EA40340938542A5EA036B354AB35FA8FA0B9391765A8C498B85F454AEC3F177F6 8A122FFC8976D4AC99A370B3B7D706EB1BD36B3AE5D51C9482FFADA8DC7584795E8696F2 81A0F0E3E9912BEA16AA15597B801EE5571F4BD4FB95052049A663FFF72DF8FC6FA0CBFD A15889F230C5AA3B25F4DA1500DC0302010956C520A7F73E1A7A938E895784C05399030B D4452FF0BA27AC1563BFF0BA19B2C5427E2E6B8A06BBAB6137DB007FC4692267B0D10ED3 1C0341AAA6F3BF586940AACD797830468685029B2284346296F1500FE92FABCDAB796F35 46274B8A69AEA68FBC6E1EBAE3957865D7DC284EA7A6CED43CFC91B1CFA4038F413DFB36 491FBDB1902914D92F2E45BCE9EBCC1484C97058783BA2C17F42B57A180C0F4E35B71090 CB0A51F6AAD0A5B01E9AA7B8E69FA463B54A124AC05B01A942526B070244A2ECB6DBA5F8 01DB459733371F92936CDFB4F35F7DC4ACDFE02A4002186F98A1000FA168B6B409D152ED D5BE9141CBE10E0EA1C17687E011FFA488E8D9DA7D75E847770AD67132F8DBA4DAB8E567 54CE8BD5B72DEA699E2EDB0BC2868B71E012E631C747F23F5C221BE43E034DE187BDD469 E712F4FFFF09597BDEA4E71E76693FC639F758606E99774C1FEDBB5F121AB9B0240D1AF3 86B28EB0024E13C0CCB25457F4996665A9F68682995960BBBB9622C70E1910C36BF19E5D AE05BA5AA16E07F1E26F00C5009F6D5BF8B2AB9A3A34ABCC391B1EED111BB98B0A357D67 91EDB58EA4B24336B4C0CD8994CD552E29288AB0A7FBF948891C41639412F0F2B70FC00D 2C509270C53B5EA1306176290600581E0E7A793FF3C6A085B9C627F941E36C4D6D31154F 6CD00209EFB60C1AAE01636B10484C673C58881FF8B54AA1EDAACC309F1C72C434247C7D ACA423249AFFC2ED1E53D1B862FB553E583C4694C99B6116AE9F6BAF64D2B512C9C624FD EAD7A00D757B5526D4AC98137C875D0E0E051ACBDE4996DF3B4D5719114C22D5DCF02A06 4DBF81847FB12C931C2D8F6E9C557666DD6AF7B28E7E763DA7BE334EB3FB89DC1D5D8F12 6ABFCDB56CE31A41E098375CD932B9ED53E5DCFD6A943A983F071F8B6EC1C35DAC748BFD 32B8FAA674B8F902B433BF12F554D391B56A3C8E36B6AADCD9489CFF80136FC575D7E64A 957656B2C4FC270F23AD3790BCC95E85894C61108A9EDA8EC4D22E9846ABE07A528583E3 3084991834D424B8D52EA04CF93C1275FBAF578710888BAB0E447C395F0988035DBF6B79 D65169437CD509EFFF8D61A333C909BAD589AA1069281E3DD8A266D4809471F65218DFB9 9CF1D4A6C4C07B0A508DE36F53D506B25268058512AADAD9E9EEA08EE51C0B12977CC9DA DC195E944C659D2E847FA471A403D3069BCFAC82479AD29FCBEF4EF6C93EDEE4F0C0E44A 34F25718B7158938A3A9CE183D707D4F789A5BD28F331C23B3290AFC5E4504794654A814 BCD943F786F603E24C01E81C1E8577047C3E85BB4D861278CE2E7E32193D1849A9A310C8 419214AB037971D051A9355EADEE4F56DECF0B20C0AE7A396797480EE47FF822F96DFDB2 39122A3C8F8A83B8B3E105B3950C8E5703BFC5E591437422FD417A71797DCD2872FDD9FF 28EFB8E20B2EC948F0D4EB1C67E7E16CEA436DEDE1B17E0C4A11F1E91D3CE839DEC8390A FF3C58953D098B24597766D01BD59A89ADA6F1040482EBA4157EF2FE71B220551809013A B5B47CFFA33546A676DFF72EC6D1A04D82750805E38EAEDFAD935833B94133FD5FF8A58A 5A01CD5715627E74E0856D1F8455F6379F2E8256CE604480CA874DBA0D06E190833A8015 7BB75CA24E95175821FE790DF854F15E7EDE318E0C0171FAC8BEB5390B47D5814E4D1F13 0FDCA640E0FDB9D0A5068E98158FE775AF2D0C7D9136087E00E07B67AFC8FF6DD8FD9CCE ECA3ABCD3DD58DF9F14C032941B13E01BF6EA44844D52FBC037A47BD94310EC47A1F7B54 B6BC07C7092D8946CF949C654EC1AA520804F8531C1534BFA935FAAD3B9D7EC925BB0C4E 2C7E8E205C09104B8FDD7F8AE970107E94EC5C2D5A7F28DD7C0BD6C911CCAD24CC303D5F 0C6C9A4A585247D5EBE57AC01E7D8E3A384DAE4803718C1C81D3035324BDCA7BB452A030 89FDFEB64728A25EACA1F4AB96A6749C4BFD6DF72102371863F719D55825AE83673701D7 C5139567073180C72C6CF38A0CBEBDDB043D2B412BFC25A08CBB18FDA0AE80554DC1082D E4D70908AA0C667073F0CEC5655C947CDBE6C501B1E38BE843A5A8CB02312EB04CB098F0 638ECBF704DEB82CB1AE8CFB27B368D95A72757162884704BC4A74DC7ECCCFD1842D8957 BB1AF1B020A97A149AAC0E0BA7699703E9879E49F122A838BC7465161E9C4C62E02B38AA 396C1E65209428DC112B08AA731031B4198BF48048132ACA9B40FAAC94A236BD16BEB9C6 83A511F57E22ECE0C6C63C0A3C5366FBC488DD3CCB19CA471ECD0B895B644C2735C8D008 945C02FB39F91ED4D633C151251CAE4E82B18B55D978E6A7DAFD6F4D5497EFC807AE9AC4 2BB5E96A8630756DD2EF1A7529AAB9DC1CD2A98C9F70ECC97D8D1F920A5EDAB809C7BEAD 04B8E0C3266E1C2601FCDC61B73007294ED1176FA5C5E94075A95BABC2589B04B2DC6A7F 2A244975EB7CED7636A6216A7CEBE34CE405D1C2BBDCF3D30D0B65AB3F92357B9AF56455 2F36A611924DBC9C90AEF0F6DA64EBB58510AA8AD7BC633B8340A942721C69B39A01A69C 28E44C520708800484B236420555098D369EAF3A1251B128881C6A71F464B0DC77B9D1B0 68B476024784DF5B722667126F0ED991F123124FEEF22BEE19DA1869CA12E0C94229BBA5 B2CDCDE1BAD1DD53B2A713C4EFBDE270F0C8AB7F9AA27FA800DB025FA10B2FDBFE4B8A98 A1283CDCF35BDB1A6291884C494FC6224B965B55742FC5DAC852C0D014CBE5D8E64406AA 5845853F669A1667A543E64D5F86444D0CC1C4F796B0F51C0BBEFC8A7195C72566851BFD 01D5A7F44A707448E67D202D89994F2BDA312FF16B5287D1D13E4FF8CA905D012B2DCC06 42DD1A85636EE7981F13C099535D935C1A1FF5218CB190A58BAB01C2F502323676ED3AC6 AA4485008B7D142EB15455355811F1FE8B7FBBE5D93534A4936308067A6F6C1D80F6A287 696606946C8D61C244DFFFA6FAB178513EC0F1724B24B3F26F1725471AE031FF8E15109E A992D90EFDEDF8796BE5C16425E1E1391680C229067BA9C69CDC20077C02364C6E62EEA2 CC5A7EFAE6A9493FB1FCC5C93228AB5DBDA8A2BF8161FEC4492B02B4F29CE42BA9C5ACB6 8708C055BA56CF6210662112EBAF899E62CDB2EB8A685EFBD1BE151B4F2CCA5DEBB90B5E 55FEC92DAABBFAF7C3778BA79A59B131682568FD96640F3794EB7C57A508DDEA025C7120 89F193118946022A9024289B2FD5D6FBB8B8413B0DF5F65227DC12E99B7B657F846D798B F5E74A3DCFFF1B9E1EADBE5A22268846CB5749B22A96CB7C2A7E1BF47E9E8F5FF7354314 3112230BA9E8A3218442BB7DDA51AB8641BCC1A4F6D25B53A4ECDC171F1B384C6546F6D8 7239CF09E6C8573BD593FBA1ED2C42443F6090EA7A5F4AF4781270BFD801F57F42A7C51B AA65AFCADED310E6F29FFF5D641C2807B8CC4DF05D45CA5BB072F73E5A7364851C7DEFF5 270D676F9F86E425D14171E3862B7FAAC43E181CE165BF319EF549BC8B5C3D3EC51017B5 8FCC9817F9E527D8DD01F33C9B99A98F675312D26BB76FA0DFF8B239A1CC7AD1A5AA9333 8AC724B6A4C9B5CADFBFF718A5593C51E476468BBCF2E5E77A151DD9DA236E5765CC545B AD8D10D62B238BB574D665D0A6CEC479D1719D587C1362C2AF7C04793B2A7B20C297D5AC 0F96F6019E1648B603AD04F8817F6A6F5E568A775850DEE71372303059B137BB129580D7 D10134DECD6D801AA62089EF6A573DE96E0958552DE214E3615A306B798B6D68314DBF57 4305E2B09CE8816EA4515CD6D2FECD2EA452FC01F62464E73FA7006117556487B6F58197 5EE9CA6DCA4480FB0B9450FA07B5FED7528ECC235BD8D3A24CA63382B0DDCADAC78384D1 E5A6EA0646E3655E6C86C323CEED8F76A53677A70AC54CCFB97A3713E5209E1A0F9B6863 289A62261BAD054A7A495C3D0F883735284B7ED4A624C39C8A03B93FA9BB91BB396C0E4F E3A173A5100CC25ACD1E3967588C56F6F3E70AA6E9F5621E4B9F3A25C0ED1B89054EE11B ED849B16F521BD9A143D0B29796D66BD57B4011EC290045DDE9C4800C2D0D1DE24501859 50DEDB737635EDE2D1559E0BA7C0B361BBAC80FCE4E4B35746B8865813930ABAA5BEB288 1D820EDA6A683CA4A94EECDB1BD0415D0586C844C66736751640C5E8055C6093FED9F84D EADE6273926A863D231C9B461B41EFEB4D945D529AF5BF494858A5E5E0A0BF1B179B697A F25A3E29991DA1DE79DF293961AB7CA49846941E82FC59B1C06B9BE8BA005138F6979DF2 7909F57060DE9028ED61B1EDC811A60090CDEBD7781D628BAF2C540FC7B4783BB1763630 96B50637075013D726F9D0EFA2ACF762929C06075D5992B5E386496B381858B6AB040CEC 184571C870023678728ED7332630969C86BF521693DE56D09D6D8B0B37511C7D714E9932 6DD501DC3AF262A1837BEB8AE03DC161F61251A615103EFFFBA7757615F60F7AF5DFEE44 5F9E832E4794299721776D643A4395D21F905685BA9038521F05E3C3E5BD1D3EF9C229CA 695BCA0132C4A64A71334D9E76C48F6F4D5901CBD9DAEBE194071FB0FE7D2C5C395DF93A C1C64AA36EEDF18B1CA6E2B510E52A35091AE7673924F36F7AAEB981B9957A3EF3123C5E 05AFF67CDB142D00CD16E03754BF6C68CFA2D734333AD69B3A3296EC597C8B76CC3232AB 45ECC8B2C90253A7001485D49E6310FDB5DAD3E7EEB4305BE7DF36342C4B1E11E0945B5D EB63198EE676FEB7D3382D0CA6EC11E11E8130AA9740FA070EB518CEAD8C85D8BE693FC7 15B31D6CEB164254D322B7032075DE964C94AD8B28BA58A3A30EA9DE79234F4DE0CCE216 DC09F22CFFC1E740B082DF65F10F9D9D173E1F4A996F16D5DDE396179B4CE389A555C3BF BA3B9059418EE567C4DC661C151F9EBD8F2E006288A6CF3B86D8F260E15E77682FE2976F 14D4E69ECE6B15C1042EBDABA1D24D9758EC60EA675421D5556C26A83CAC3B003F8426F7 98195AF444EE55CA608A69408D69B7B103FE873A1CBDE862A7F7C4B27E778D4ECEB1F596 C4796B37DDA26AE61A4579506AC65F72BE3D01C2BFC79556913780F541E26E5316F6A56B 5C92DABA9B7B9A9E80BDD4FF1D3F27559F83021D89CE8497F665F2CF2FED3805F8CA7D36 355E41188F853B192CC64320849EA08D09BC87D24DEFFA9196F75F00893DF4A069BB4340 A9A451102003DC8FEDDDE6B648EE1675851310D15FE319BFD1E411DAC0402698598396EC 9B01FAA040F37D13D65D9F88120D6212C7BE51B98FECC29CBEFBA669EF8B73A39EF24D86 8C692FBD3C55724FCC7BA3912B87998A4E50566ED69BB2742FCD60FD3BAD55EBFAAA0E9C 8BB15FD2BB7BD82D65E722297E9173E09D8C228A76755A3611170CE15924D3F2BC9FFDDE B0F2CDFC4CE44B6507B03916E334B4FE336473D0DAD959DBF3B11684D09C67872EB406DC E8AADD34D2A0FE88056B2184D2B07825749A3131CFBA4A6885CF4D84D914DEA0A4DEBD54 F35F031C2B4C18D2C0E5DA80463FC86645A3B63209C53BD98B394398E506D8E34F0637C6 BD702B6BAB0E45F12EA06112EDD4983034410D96D3EF907D32C71AD4953A8C90FB289510 70AD7E985BE69AB6D180E110FDF29770905DDEC7DF995FF72724A275CE8CE825B9322B9E B301DD7E90A6075123279F9EA89333E39457333EBDFC5F07AB1563003D0E766A010F2342 A5E210C256CA182DF768439CCBFC43477E25E15BFDB3A224BC1C9D67B0A0EE160B7142B3 58330DC30E49446C18969AB491CBEAA64AE611F587A3A7F7BD3B206CD034D0EFDC12C992 4FC9F60EB7A7B7BDD94E900C5A58AAC8C17B3588A95D614197E1D5D1013888DCBD84F7C2 51DDBDB5E1EE146350A94679DBE6A67BD7EFF924C402C23DB55C00664754CC9E4D3B1422 16AEB7A712CE85947C4680102B651F83DFE71428028B258E722D827C2C347CE087C741CD F0846675E34D56EF99E21854CA02AE9BF9B41B34E58A1D5144A6E9D698172FC2D8E8DC49 098B77980978D67285DA23F821896D3ACFE7ACB6FD5DD87AE6D07F5FDE7AA553A869E594 BC2EBEA2E0ABDD5E747FCF0F7D1381F9E121E97B11456F80215AC688AC777CFB9419D95C DAB35AF315C5C83114FF51BD583F17EC51A911F255521B3DE63C5B0A016EDB98722E0B15 FE68117B4406CAE3F29DF6CC813569882C169070F6F499DAD42E1ED6DEDBFD464D352B53 0BB28FE2554FAFDD48FFB9E1A433E94681A5B9DB2AA285BC5CDA48C1BF7AE7999E5A6678 D9ABB9A68BD4A60756C13ED1975E2107F6D1FC4FCB2E18FC25E68DD2E53A623D15B95541 31F1DD74E82AF748119B40F6E4E703DEE1856BACBBFF672DF548327A95F3B52DD40105C3 604A24047CD989DDDBBCCA27D28F3BCD681CD55AFAA1CC5F29B39FE1D6B59FBADAE71196 CD83F5329C9B969A5BA06BA67AFC193C4BDA78A275C64E2D82F373EDB713498ACCA9FE26 9FC4736828D55A98AB9FE487AF40164FC38085F9DE01332E3710F22EA52DA9CAA28DDB5E 3AA72EE9444F818DB13EAEE426543DAD3C78D48B513DFF77C18555DA53B33B04C8887199 7B2C9E86E12E94AF3F379D196532D2CDB84741211A584B7560DEBA3C53CC78E240186671 8D295EA11162384F00A727EA4B7EE6527DD7DFBBF5966FB4372A35BD2FA7BB7A6FCFE23D AAB6570FA52506E3EF532E7E7930298FFBE47D48641C0E26D1BA636AEDCDE13DDFB3C822 DC32C43759F016752DE8F256DF5B57EC3C623C05037F1E41C38C66D18A27610CA8BC0E5E FE4FA49EB0E287E855990B9C83A103A1151727B192496B318A0730AC902D7C4B154155A9 47AEF1B7255276631566EE5B995D9596517E42DE25FFC666FC0703336FCFCAA2B97031EF 9B95FD714ACB1A47A249DA377A6EC9338558939C6327B90B77249CFB4CE6FC947BF1E88F 17F20A194DDD37657E8D5BC31F624B6976A0078063FF707BADEF04391782C6660BCA4623 17BC929F6411D2351B9DD2F67CE4BE04D251829BA6E5ABE574FB3D3D8D2858AC7B87F3E9 951F0FAD71060D85DD3BF22DF505778932D2C7CEE2BD318C0E9601D085FD258C6ABC091F EC3F44C639B2852EBB31BA5522AF78BEDDBBC52E804D5DDF23DD119B951551695BE44C23 5DCD52729FE0FD451F9CEF413EE55AF45128E35BB451D654496CF1C8C2BEA6C95F87040D 928EE96A22AA91E8166577727896E7A26EA5298620E50832956DC5B4B95986C69079A1B6 8F64DDDCC518AAEC30D9E908BEA76C19D54388435012C2F8ABAC88BD1F82A1083F729569 0A4076112B601F35B1E104720EB73D88E0E62CC0FE278EAF5BE953AD8D44604C35D05A14 7123538297A5B80677AE45EBE1620302B8248F2B0CCFA068CBF76C863CDCEDF677AFEF18 F4934012F795C9CD39EED5915DDAD4F640BF75DC91CE77E4B449703C1FBED867745F67C9 BC48C987BCE8B838D35930735744DB987AA4E8EDC83236D764D1237028F6AE8A6CCCA003 692C28CD708F1C9F4B0468140AECAEEDC465455D8C69159ED0AD0D0B004A8B51ADFDEB3D 82220B8D2DBCC5E1CC0F550E44B83FA668B30044A2E9978A810D4EF995490065DCFDEE41 E94DAA51D26F13EB8218220FCB1F0F32D5B5C15E715A4FCC605B2F8800F44B82633A83DE FA4C3430104CE6650AF07AB2668E751DA4845205FD29B7B03F46B51DEDC3B6DB3E534E15 AA0B33BD6E0D2C5F8442EF326828B9A3188EB15DB04F301A98E00710AC5CFBFB9B2B99BD 5AED103DE636341AB7B03E24016228C0DD81EC95D5A8B8EE1C44944858784C024BE6C8FB D038801D2423D09711C5FAAB0E16C87D307B53FA9F874E6FBF1004E47C6A6907DF86BA73 9DAAD79101866EF02234D746C72BC60A69F7BFC111C5C26B87440D836432E283EB0CB8A9 39ACB06AF4FF3857EEC12A1BD1189514CD518060FC75DDB601F545CCC37676ABE3EDD86A 7FA54DA5C33D42861E585D05EFD8B41D42F7A9A904F48FD96E30EF9C74433B35B1EC9F3F 15607376F04695749F917ACA32779CE1CD986051E43C2EE748542E4C7CD50E3C30DD46B7 C6F809D1051F977E7D351C67403B913BE5273A97429416656D83C0BE7C08CBEF00BB4651 D0D5CE1E8885A32CBC72DD26CAB330BE9845425E048B1EE1AC7591F0F0CC9F73E1EBF665 76591E3DD449304DAFDFB6A44C7BC4DCD9202AA223C9128A961792E3C0DFDA3515BCABBA 78F38651862266E779C228C596BBF3903F097765DA142C99E5185BE9DE2F01AFFF441965 198BD1FBE9BB8D61BA6C685BEBCBD4381C20F71F8DEBEFF62D7946B04C7D357E54ECAF48 A49EEF2ED25179C1C3FD45268363FA20D07A84D60484C712A43D224C57551FBDAF4973BE EC02A16076184E3108DCADFA44B93710DB3388E633AFA06AFEC76802F05EFAE2CFC74A5B AF3600A46B026AB514EFBB7184C75BD39FE9427F6F0F9D2435BE1B26BBD4816A72B8AB67 DA7A6960F5A7A0E7FB1F83DCA6E3E8E8F1BB11E22D378FA743B7791E981D117A2E8126A0 F3CF5C9B0C35BAF8B66211813FE63B029E2A3913CAAC2603AA4AC900EB8428FDF58DE83C D998B69BCB6ABB67FAB1647806FE19FD695372D671EA0B6566719938456CC79D265C9791 725AD53DF396BFA79E945F4AD42DEE0C69C995EE8DC3D8E85BF383DA9C1256AB133CECC2 49A3BCBF384F53AD50B3A58606F4A92D68DF6C072E66997978A92EF5124DFAC8B3938E60 94C0FAF7556D0F75925FE99AB3E80FEA8042A977931E75635051DC896059C30D7ADC38E8 90131D3472CE1BBBBABF231728199245250B618AA5F830D20C8B1117E4406C97F59A9A76 205946764DECECD486D1C217242CF8C58263535485E89344DEFAB9D94079EC177AF6DC31 051EA610E81026B7569A061E99309A04CC3977C9BBA45E88B6AAEBF585B5C79E42548C23 060E0E103CE6EA0897B43EAA35366DEFC5B1E5E673424D707F05C770F31218BF56855627 8C9F75A113F5DB640C2EDB7F9D3138A5C314243030CE2BC58F4EFC9B546E407A1764118F F9D2208C6219D088CD8A214CBC0C1DF55772A04DFABD89E08F7C98455E8A5F1F82BA749C 7C5C5E6CEDABDB9B3F6E1D717ED97A50D0906BD4682D9A529B3530F29113A35D5681980B 8D099BAC264E382DCFAB0419F3313453A080795E7CF66860ECCB8782191F4CB0EB2D2965 F14D28EB35DBF1C95437674D84C1C331F4EE99C8DECD6946069B3A4A7DEEE0E48E817AF3 08C28DF99E67A4413655CEB10BECCB27448530B1688517F0C5DBDB97A17C6F12C6AFBF55 AB5AC791F5363E56AFDC38DAB07B7A47B9FBEA91427847C5EC1D584FF56E6F2735FCEC80 DEB8D89F90090A11819D08591A37EC3948E36AFD44237CAB16533CFB51B50E1EBFC4A6D7 BFA520FDA738662AE6C0214DBB2723FBFFC986E9DD47A493FC0090575CCDDD6C38EAA038 3858C077F57E1DFDA8DA95C9A18D9432DA2C86DE069CB675D9C8189EF01C567CE476E0B5 31FE688044569D34362235F894E746E6306C03E76E615571D9CE6FB31D63BF1DAF29AB76 27C0D02D7760EFE583C8C2FAD4AF0A90AE91642F2F20725858CBC2FABB5A5A36F19A3C6E 455DDEBAF968A90312E83193605CE8E5454E396C2C59557EFA1BE1E0F8A0AADD060F77E3 C642635484956025266155DE24655C44BB0B4D07099D81760DD0823EB9EBABBA27A559F4 8803E6999B782A4D91C388B46E1EBA6E8BF7CE9080F46B539A507F5DD17AAA05D05A551C B57918F3AF43390187E3765548F4E5A3360A95C80DD6AE1B26E1F90B8391A3872ECFBA2A 087415ABEBB9119CAA1D411EF7E0F0737AB30979A30B2ECBC8EA42F38B41421CFC94BFB1 FD30BAEB6AE340D043A15138AC4A7FB12CC0AB80547DA81D91166B09CB56A5504C048DF4 D4E1E7083B5EF010A38F4BD375A3918D25B05026FFEF87AC25AB554EE74AEED323B4AE63 0F1320CC97909D2819A8EB0A90AB5F1147DD888AEC5D42C8C5F2B2728A80AE8673831189 D76571F665756C2C01AD4F936EE0E607C27FA9B8E38BA5C67B52E7A50E09AFB2D0610A00 863C59F7A1BF14A5D3FF8954CBBC3D13F709B433822DB8CA2E64BA1FDA4F9478A5AF24FC A4427F49F39EBEDD3BA9DF9B2ACE9FCB01BCC9153A7DE685AC5284427B0C573A6E5D9013 86834552B2356F11011083B65724EF7F8C7D7CA259E0C03793B9EEEDA5B6DA8376E72EB8 033A415DE664EA5CF53B88655FC02AE5E530C6A90F443F740444956B60F6ED760294DBC1 9F492DB3A5D4E532D0DBD9EE8139092D3E89D7CA7490400FA4EBE56334B1A17C9826AEB7 74749C9193FBEE0414C7E7877E26B8274283F14A14AC7CA27139CBB8CB89A6D38DA283DD 3D421153DB2D917391215433E356E64E4A07F6D82EED542FBEDAFD11D0BD4EF3041C6865 2ACBB1FE71C6B7B3850FF45176850FFD64D18D4D55BA5E74D037D3CDFC62563CE2929233 1E42E636DEBE14DE81804C1A15903CFBE782409A1E8684819BE6AD86F1C0EABC03F4CCA3 A959E0B6C57F02D29062A6F0E3E5978C4726C01F607307C16F5F64460E81042B8E2F6524 EA16F9BC21AE861DEE4013959FBA74E40B750AEAD9607FF6D15D96F6C28F4E9398C70CF4 1B654A2A337FC8AEC523F27F6C5F0DA4B2D4A3758A0DAC65BF2167DEA823C3D108D3661C CC47D80C948444701335BC4DF8A8A8E433776FBBBDF0C97E985DA1311451CC85AF9E5BD2 FFF576BC8E4A79C92A00678761D47D093A26796DE0316A80BA5CE0BB69E188F4C38E7BEE 45C8DE646991071844CBB503847613EC82BCD6950F44D64D8117B52E3A63402C09931410 D7A1AA9A04F9815D52C3BB9FBC829F9DFA76ACD77BC751475979D82275B709AF02783A64 A633CD8F213DDE9216664C22E9F9AE3370B282E9098B86D4FDE991FB9D16D04C0C7F5262 D539102F6529D73F20D1996061515A8F1219B228502590166332AE7D27CC822ACCF92861 5091818F53CE6A7F1C5A68CCC3D6C7BFC81167C3C2294C9591B71CEFFC88A245E16484DD 1080375D15B6A3BBDE47CD198D0BE312AE1F5F6EF6DE4A2CA38A717D7104466509C8593B FA6B5DB6DF788C6952A28E25CA9E20D636EF9E84FE3CE4D3A4647464F79111A610A1AF84 E0BD4B8F7BA06C3AF012C74C91DEC0C597E6F4C19546D258D9E53E7943D6694EE85C74B4 93276817411892299BC02A2CFB065F5655DD87E69743313801CAF098FA1C56841174EF0D 4A7F27B2E91762069656895B9FCC9434434ED722BB9A532606688F303D0C514B31D179CB DED0DFF008F09184FA548FE7C276989AF46C9C63000814F90372A1295717CE87B2D9EA55 34C0A4D467A0F6A32482B8139AC4240E3569476BD4F8D5CA5CD62F28BD2FD820602FB678 69D696EEFFF2C173D2C7EBA377390670908EA07A7E90BA16790314AA8A923B234C8ADA37 25888BC9A631A4A5B308378369C29B79966AB44E3F4DF846B0438C31B6143C9C3A003C86 A2119FC5FC1509BACEE7A9A1EF43945214A1E37879CABF18B7A18E8BFF45E9C5E7CF05C1 81F2BF236310B0AC2B1D45E0F6E3961AFA34CD8597914B6D503F7F5BB964B7DDF195A95B FD5F3FE49340767491F213D849B3299AE439801B84A2718489868599F29DB6849A5471D9 043C6B4BCB4AAA48DC6CA3DCDBE782D3113463400F09399DB804AA81FAEA98C6C7FF513E 1CEFDDD822C4A5ED4F0EC1AD96EBC6A713BB82FAD69C3E914AE2CE2AD2DE8FA301364658 0987D4836813D3DF7BA9A77601FE3DD487408794D7167D6297BB19C8ECA466D56F130AB5 E0ACE40D575558A8221EF634AA1D43CB10B8CB8ABE6EB2EBF97C8ECBCA498BD740A73DF4 0CDE64C2C0F2D1468C01047ECC2320A9FB6D965C83A2CC768323CD1FF3590D6DE86AAA5A 4ADF258AFA132E8D8C04AA614E11D26466CD9F265AAE7D8F3629857C73946C1CDE7EE21E 15C1ABC4A1F591DC1CBC14B66269525A664419D0C9AA2C4713790AF5E23B566EE38D0530 886A48F041B8B009C5522B55E63813023C763C68545AEF0FBDF2674C94219D0233EE3D3D 165B31C9BD4B9F27649B860D935D77557035BDF4238B499C5CEE68E946454034E4841914 987B718F237862C350178B8FCBFDDDE9E184B3EA11240ACAA8AB1880410F42E0C66D7A2F CD1DF1A3E421353590D9880F7A5A0065314D2E892D45090526A1378ED18A694F6820EDAA 5599C2EAA34954D28B021848397DADFB07F7529EE0C975F5AEB815D91BB7CEACD2888F3C 9EB8BFC41EEF2883618CCBAA18890E36B6CD9973E0A0665387DDD9829DABD9DE59C20652 6608C3FE3D5033C33DF477762D37F080E3CC292D9E18348B2200956458F0CE0987B39876 733331F948C4F15C818AEB8F829C03DA8BE6EEB40AF79A1686AB9A289FFA67BE3A42C396 D5D24246959921707E84C9D4BA448BD725D6DDF0F735C9ACA2FF7CC28B75A81100CB2B6E 05B75DECBC1204C68ADD1B324CD24F99E5ADF9DD3A41CDF704184E27303DA98C72037B29 276445BE607B12363036C6EA298E2B47890FE0C3948DD0AA3D0FAC17ADA775F58FCC520C 3B289ABB6315218DD1D5A6F36198EF93C58096B8A4A97D6B49278A7E41E0ED9C9D28186C C8B5D8DC860505D94B5BE90D1765C154C43238EEFD91F5A385B6FCDD19272F1E9E3E50D3 83C523509B45D8A166727E8022861AB6D8A8DA71EF875A19362015DA1672CAB7E9D80E0F 93A00867BF6A4B2894CBC866BD744013E8FED49596E6D0CE6D18D5CF56CFFB2BBC53FCBD 9F2B1D7221A7F5B539AA962F74E002DFDB8A1425A881DA6D62DB3E1E43CD9C20C4B8C0BE FCE4B01FADC43B7406529B30BDD270098761F3BEC88EA6AC40C5143AFF3B926512F2D560 F381B90202556D8E3AAE54712179B1C33131D52A4423676F83EEB850FD9D3281F4E092C4 A3B402DEA3D01774B5BC9AA527D7E2A28EA9E6097064DF15F9A0F5B1AAE25ABA18689AC4 2F1E2F1BEFF552DC96BFF8798FCD5877FB4F4B5082AF6D3F24293C7D34344959BA691E53 8575D64484F2B36F1223DBC2A9959793C29DAC7C28E334775A1081818099D1CA68B693D9 ED1D3163BEE2611E01B87E8B443A0D8AD12F251752E7850C29F2A535971E4BF055EF7322 652B71CDFA987F4A51269AE8783EBD530F6180AD15739754EADD4811134E25FF8D2C6FC8 9FB63D240BA9E80CFAEA02523BAE484EEF08045792885AD55A5D77F4A6645001DF9A596C 877DF33EBA8E728567A4C4FE3D848C7C16E8A3B156AFFBCCAE51E668656929F9D061648B 27093B54604B900461B0E9ECF73718C3B5FB199592BC7C59466F041BA9963920E2174F59 7F943A02728D5B7FF69735757F5071904A2F6FA79DFD8F35E96DD4F92ECAF58A184CD6F3 C05E50A25BE5E77BB2856AF8C71C69BDB8EFCC82EE65BA7841387E9CD655FDCA5707DD67 26B96EF73B36B83362698C5945C75AAFDBBDA1ECA470512B7E11CAC4FFA3C3C66A07BFB0 1F927E762871045195410E088ECB16884172E616721D58A5F51B5CC0AD3B3858180E1A36 76CE2B46D4D91D06B146F81BED26358E5301AFD2DBB78D60F9F1A6185B50BF7A18CD41C1 DD9065950F64ACDE99EBDCA136676247E455813438395B2D3FFEB24A2DE4D8D742EBADC7 CEA283AD867A1239C224B59D55BEB159D6E4F5E588AD01DD7D398AD7BA539E6F82F8AAAF 9F5F1A7444DEDCBFD014548440DF870D701E9485467492E832E235FDC1AA087952B7126A 017E73A40F8CF1EB23E9BE25B942B2CAD61746F5277B807FFCD1C99CE3B2EC69FE5A648E 92A04C71CDB188935DCFC4D261DCD29215431D80A7979C571CB7E1CCBB7E3627DDCE9717 148CA0E8BD7F7F22BE4ECF15E8B6CF1B0B98D55A3285DC2819172495EFE082B32E72FD3A 91986A13CCEDC5D832C77A4B559175C53EEE61089B4580FC39F34997A4DF83E427FE668C 3D89C417FE22308176F895549F6E5BCE6EB9AC04675AA645BFB2D81A22CB7B30CA206A3F 01B9FDABC7055B295236A79DF2522E4BB918AB2643351186D695E56E61CFF970A4118686 E85A4D2E34C515D0203848CD2E92566F38E1D0DA886DC2BBDABF5B3D7B4BDEC68C5FE6C1 8EA7E92F5470CA95AA5CDDB9936632E9DDDBC7FDDB86D4E96CCE3E8C579874BEED51CBE4 D861D6657AE53192DB369EA930F87A9CD2FD7F9361D7CD884062870D4149126AC714B191 1AC77CAFDD1C48686AC3474BDB9ED4B73EF67193714A392C4B273E919AFFA7EFBE7C690C 82E547D56C79ACC4935BAD6C4F333FB5774FE84084EB940DD7E002410132F4A84894E2E7 4661DC6CA73050FF3BFC04AA8959E9C91D2EABD7447839F3B32E1ACF1482E6DB7ECF37BB EE26C27AC90BDAFE91F8D92534DAE644CFC38E2A2C540A3868B0E16A6DDB60B02628A94D 5702C1EC2211AFC1A9F7E888B90263734588B6FA7BD2CFFF5B56F91A70633C1353885C24 8C5FDF9CA938673645E3D320D7C5566F4CF7C9C6E86C9945386A16FCB72D342D936B0E30 6EBECF12E4F45A6CEC4947A71D674128FB0F72C198E4F4227CF98E2F3CDB7E7AB55AE127 1C2A39C526CDDFB66A183B6589505CA7F5EE98C400A6C760441B01000F2ECE968EBA5DE5 102C3974AD4716D7789E07AA39A3458740D9F55D5B35DC0B557CBA9661B6588B37F63173 7579616AB866890E1AF0B90399F1F7E95E18703E6F723E70B2C00B6640EBB44353DC5A25 D007F285A25B3241BD80CF83C220ADB9288AE09FA0DBACA187671CAE9C04B61AFA10337E 75FE9FF0A4BF03605D0FFE41DEEB2F2DB93CF868CC7155DE51819D14FE17986BD187DA95 96C1904E8AECA0F6DEEE83C9D8CEBEF4C0D13D5D5A13E6F3839CF955A6AAE6F7F5DE124F 0174F811324CDDBFF0247214BA4A343959EECD37D67EAB103B4B9CBDE0FB77ECD1AC24A2 C9FDB80D0C07AFE58C4839CF9D4CE6B78A1173AE2F05C51F17827754A8EF22B5FA54F3E5 9ADD2A1103F898664DE8ACDB89929B04776F51E241134E9A77F071CA83DEF1E04EF457C7 56A29D540B3ED164BAE4BA2C56967BCF5BA142CF8640CD829A952063BF1D9714AD903999 F3B59167E2B440BA083635B6A11A652E94AA1135F9E00B0BEB10B533811FEBC64C7107EE 7A2B4CEB6D019A305F633A9229121A9E1097C289129181CA5EDFDB7F9EAC133C6025FEB9 9C9BBA2BFA67603A7790A146174C061889EC6A77DAE40C6C4E002263203BD6BD05D3699C 7C21644A24D562DB3C2CEBDABD3DA2F607458CD4EDB1FF6F9275F767B8FF38AF5DDEA7FD A18A1CC091BEDABC7C1A959031009969572A97AC1C6836F3C24F6960ADB94D89C5FFEE9B 3391C4671A09EA87B8675CE4D3C473E3B8A750671BC95439E75243100CCD0E0873A6A218 C8E574583C968E46EC6115266614DCF130AF7F2CB1DB978B409846735D7B29F1F8042921 7C32639EBF476E5B0EF1367F65F0600DD11C0142BA2386FB01479DED4F8AB419AB5A82DD 66295577726A4C30D92A8972B72D0EC338487B630E86FD7984A97502583B27F5D1BA3A0A 8236ED3B99EF2AFC4018CF8EA12D89158A04353B33FAB1E638F1817E72E8B6AD3C58A86E 0DF708B6F1EAB273E746FDA3A8013271F16D3F0DBA72A07FB48CA2E0815F5635EEF35FBF 27DF180FE2F9522E57CB690E4DF7BAB0C4F07D34BB8984D569340061B64C6D1B5B5E2090 31A81A794634F445055CAFCE9E72BC0724EE4C9CE1F94D461E9619B3CFB47B5C404D15E0 3C61B1F11D23808893679372E8BF24AA8D6D443F9A29C2908331F799593CBFD1AC2EAD9D 855295E0B486E8AD72F570B3D768D775D4EDE2B9E48FAB6EF2C3A72F458D8B2DC2D534A8 55FC77ACB99BDA7B5FD432D848815D327BE30A97556203F1C4276993E1A83329E62E8288 7ABC85C17622A83B380B8E0C381376DA627C5852F0A031B80E22273170CA4D1367B183FA 169F6EA37C541C3E4EC299A8F34835D56AAE798E69B233309FFA71761469CC4736E2D627 073DB92380000DA1B9D6353AD27DB894F3DCA36918E7CA103B60B1AEC505D6BA9B22A92F BD69B9B2EFFD277157AEBE234B579E82D829D06DC06E67A4AF366F76D9321CFEF7DB3167 3024556E61DD0FF006848A044D80407DDD75F123B155681F47C15283A44286FAE9549D8E 49477A38347F5AC9940F511E0222BDF46263DE6DBE16990D0975C2279487BCAA41177833 C54F854836CD22346F409021DD7424D157B2E6DC9CD664EABD2B5352B1326C1C046D6E91 306E84D44B798DFACAFABCF352426442DA14795EE6EE5A1E451238E946943534A0E4D53F 5CFF56D8AA689FE7E45D8974C5CE1D4DD9608AA42A873D0A0257D8766E7DEE544C350556 5E58D358F0AB8DC7038795861DDADC8B0387D823F3AB985FFAE915019CE53B91A2666F39 73143D04434D1B572ACF9B335F0B921E1E49428DA8AB0BD8D09B351C8BCA247A86FF7253 4EF78A5150BA14BDBA2D535D5A46017518104E810EC678C9202699159CD05060C1C9A5DF 7421F17177B9141550BC2B2D9F2BC5DA1346AF811667AA0F5DDE7F690B366F6FC9C3A488 B88D827C24ADE4AF85A5D5CEC82BED8485EFADAB9D9CBFA07A879A9D6141EBCB10028BDB 83DC99174B710E444714AA5D275073EFD6C542654E303D4F61826E7C505FDECB175C31F3 455A2E835D12123392DB79B22ADCB30658228C0142B6D271FEACA94A186539740AEE942D 11F4B10B00C6DA85D934FDA37B37332E61C66AB95EBB5473308E3F2E33F220CF1960202E 5A2A81C85E8E831D4A48A7A9CB178A3F59AEFC408EC69D76722CE9FE89F5B7F1A31C7606 32EAFE6DB673C6E76B0E472B2F0844506A481EAB5479CF0C559F02718F76D41F78B2CED2 19D72BD4D9CFA3F99F1B8869E0A8AE58F40DCFBEB1B8FDB98032C3430E7402B9B1A93141 74557B5A1CA485CFCF20D6830140FE0FFDE105A08DDB301E2109E5E371C2EB2568481443 51F989472D19D12AB51C7F23AD18B592118EBB0945747EBD9F4DABE0C8EF4F3B8AAF5FA0 34B3FDB56EC249523B1A3C32BC4A6719AE510FB82BE0CC27D6D4FA2A806941EA8E3CDEB8 A30F91078D22260FFD25E57D8B3BF7A743031731EB7396D5E9A949039FB9ED19E38D5C5C 644696E3EC29B78591F522484829BD1A58FA3595AB26E0566838DA3ECD428D905824B697 3FBF19090E11E99B789B61C0BC97C86C7FFB32FAB5C7FE00EECB9C8C126C55C959A6B06B C709F0923589F9E540E746AC6949DE143744799EBEF6761AB9DA2E06127C18617324286C 874740B4B5F82DEC59585397A4B75A5FCE31AB26478A7BF1AEE14AF3098F589C1FB7C010 ADF80512E936F57CDE3B8E244B00A80054664EF33B5BA3E4FF2F43DE74496A57C0F13B65 A60A2F4CE599BB104E72EDBF9BEDE7B943F9404760B7A79AC38AC19086516CB33AF7F962 0157DAD4D4AA68B8C96A66AC15C526A1711081F56738F3238EF37EF609BEB0792D41941F 6F1C7D95E0391CFF720A51755979EBE6323C653EDAF0808644E41FACCC09C29E1A210B10 881AA79E4D9714F33A96735C3B2D0B13EE6272BD4D157E7FADE7F6BE9825E5655E80A018 5EB33917002B5342002CE5D24859B6EA11E571FBD6F1F753974F965E7B5A8E0B3BAA8AC4 A6C6D56EC55E44BC9D42C8A9AA29249B420DADF448F6DE76D1DC62763D5B01A4030A7D78 28BBF81417BB287B267F64F8676174097E43E99785609F9C542ED5D29121D5626A9C7461 5B145C86C2AEE98A127B25A990D9D73987958DF6831FC937B06AEFEEE14583B91590C768 7A9FC1CEA0EAAD6F29FFAE96F8ADAA658DE66B8567E8A9E56D866B8A9A08C3D389B3373A AF2D0AABBAD35D8F3AAD5D04B69CD31F7BE8ACFF96CE6DB8C42E9F842E4254EB34C2DB18 F0BD1D6EFF4ECDDCB5E77E92CE64F20260E68903EA705FBACBDAAC6CDD7FB431948F1504 876DCAE96AA501F25FC5707CAE2DA29E995B6C4BC6CE6C641CED312FA02000D9057627ED 14D531443C740E7CA081652087E0360C095652A1CC56A27B7FA61B3420ABACDAF14E02AC C80FD7B412A97CE4F33DAD5C747EF14281EBEFD492468839338802E42FBF554DA46DDE16 88D26DB26DD3613986E9D28D14D4BAF9F739F93E8EC34A2BBA207294D8212D2CFE560918 A72DDF5A537C4571281DAB8743A487D8C370D67C0EFD1698BFAB848E86D24DA2D213712B BA731CA3F76B657051083119FDA759A58F8CEF458085052FB1440D6938E438774FF94EF8 896FB0AC6A92DAEA2E7C00BD76000C5BA8BAB7E5282952B4F16BB9AE8265F8637118A4FB F229CA87AE41C6ACDF9F8D318D6C3028A70BBB245DFB2E1137E3BE90284B26E8FF4CF77D 66231F1BAFF98284128D08E8FA4FA75981A22F45CC026B1906FAB73C2FC219D3F7253831 17A24392036B26AEBF3495F3300F63AFB9F0FA950673F5584FB20CDB57EB0E947F31DD76 945838D69875CD1A4E7D2AF5382044DFDE866E37CCE23F3D06B1F5A941FD06CC0550D64F 312A9D6A655414490AB1B1FD54E34748E1D408782FCF8FA6A611232CC7218B4A0EB93CD2 09876191651777FB56BE434096B02918A658A7403E45F59A1CDDAC1BA53DD186DB8E35A6 4078C11DC0DE5165205CBE612FF365C193BA540F5C6CDCAD0255E361622E94607400A330 BCFABF835275473D4C7767015963CE0FB7DC88B4AEB660FBE4F86039E51DEA6DB4DD229F 73D4A0A322C6D349A4C8BB304B96B32DC129DDF372FC424D1815C4EC51C9B0743D6831E2 6BB5E28E89DAFC8845F00E47992877FD57EE0C02A76FBE2FDE8802A176E8A03509AE57D2 0CE44217026FE28F2E06435ABF13D27875C5B4C6057DB1E1F70163C1011972A9C0DECED7 6C8B547B8202977D802062E4189713D7F579093F4B9A72C69516F1179DC3512584977589 461AC3D1BE8BE1C05867EF6FDC26E3B82D9CF9D159DC0CC1F9D6F94166A60E6CB9FF3FA6 0D2B136FB725DE769BC3A8B64722456F049421CB7F863A357B318A979C3513C9065F5CA5 93022DF125C9DBFBB822B1F84936DC5314F17DDF2960FEE70CA3E7289409EA5AE6F15DA6 0E407C6262D41D52C864705B7DD26AF2CB813689E24E9673686ACB1970FB41CAA49378F4 31C53F3A08AC7AF4D13F7FA81B6C3F71FF999380205C74E1B29B5A4FBD349783DF613FE7 E2CBC7AA7B424965C42EF2CA80C60E0EC6F7665BB3CBC009F0F5C6D4E8ED5CFEF0E5DB9E 3DC006C98706723B2BEC309ED20CF1CDC60D66BB478B87E8947419ABD499CCE74F80FE97 89041D176C3BEDC9EEF152024E3678134EDF755D8C247E3332F7ECE95E649E73A54C5BAD 228A629F5F6C8EF48935C8591910230DC5D04C395325F0C211BEC315F26F84AE8DE9DC91 A9B5796CA0ABCD4774CC3DE12C39C2FC257165DD8A7E458E87CB67B6A487F10C351C4881 0A636E4109845E0C664C47A2E11F9C99BD72570B26E854B4BCBB49F4011CB2CA4464FA72 6DD8C1F05C69527991D634487D48BC554A80DC32B334D3BF6D65F1AC32D0E764825C8760 8B6317DCDC713644DA60322D68CE38FAB781D24E14B19E711BCDB629AF7DB032CC9C4393 195992B6ED1AF8B84AA21B5E3BB12EBA01DAB58DCC2E9549747FD222454D0327C66D62E2 7EEA7AD48B09DE56F0968E271E59E8965E16862B7968A14078BBA821C2A4487F877E3932 1D56C51B010AFB2844BB7E4AA57E3AECEAF7213B1C70F6EB993706C4F2A613257027370F CCA30A862ADC2D07E4619A8F753B13B94C275A14403C97CC131A924EEDF78933502A8E93 344E91F5A238B236B228DC9FB65C60F8888DCA6B8A1EA897530D193537FF73E8DC70B3EC 4CE290AAAABFAC0EB4C9534C7F3EDE90E840A1CE7975204FE70B52ED5576B0956E62EE25 7857BB5DEF2AFD8D46228E9625C5C0FE48311A07CA246ADFD9BA1435340914455C0CAA4E 92914E7AF31E25438AA05FA2656094BB31855A27BCDC45683EFF1291934C3C115D8CF919 7A245EFEFE3F7FDEC037ECDFE70737A4D961CA634AE153B01F03B1A9F72B602A8358D258 E03E54AF79090DB322ECE0CE33377E42E5373F443E851550E5D44F06C1C513173CD04D47 9A9E70C9774780821872EFC100F5F5F34A1E0754E037F6F5917EF5126E5F12D46BDDC038 2D11C217839C1DFE8D34BE69124B3934B22B4E8225BFCB2F265E197474B9349BAF2C1FCA 352EF3F4AFAF1074DDB24E8A70218C83DA835CC97F6C55B6FC10C199BC9EE1033F6F2890 FEFC3998D9F2941E350297F56B377A0EB5BA47A8195331A7CF3BFE934A97B88F18A38551 3EA97201C200B5419E83D8AE47D6D6F3E864CFCA8A874DEEA5CADECD31CECFD46771E9FA 7B24F3509E6B0B04F8C4C1C8E27DB0F2F9E0A422988B2D525670841C73E5D11F4B1DF7AE 9AE2D8A3B5C354446C86862C687A3C21CA35FF2E962FB591310B8C0213A914278B65C7C2 83E1CC558F6091BF4B159428BA249CDC3395D72E1D5E998C88F379A5C0DBFFE5833349FD 5C61034AC1EEA717B26646D9024C3D8763F3B33E60A5BADFB514937B9AEA89009F5F6779 8D5D92AB0CB3D57FB123DD852BA04E3C0AE9D8021F0735B69289822FE2727140AD5B911E 376B13EAFACC44BB0F0A8DB9079DF3F3720779B5BF1C02CE47463281F6E496AB7695291F 26C2E02A026A104C8EC76E0DE5D7272A3B83A947E3568DD72E8B2DA7869D1FF74F6E6C0C 70CF5EB3D5D650498D267117C37DD3FB5870C84FB972E5C52DC3E0CCE6FA398D4807F1ED F253D014AFFE0C5EF86A8E431D1EB82D6D223809BCEA39DAF9AC1CD37243CF73E0635BB6 6B8887C9C2B2C740F8373237B52A89E589D811C40C5170A7B7ADC6C5643F76C4D5031862 961B7E211127BD0F716CAC04C4F8D8D0958FCF4D420947354D495BAB0C0D2D76030FA004 910DC71A861857B1B073C6CC56691822B8749EC78741ED8EB2FE26F37E1F9A3B36947EAD 661BA045810DAE798DAB615C0FA2B242209D8EE04BA06A78FDA985402076CB3A893E5364 2C998BBA5F530C8944EEBCCF46B9BA42AA25E0D859953A948E85A8022C68EBD496553B68 2555030C9336F53FE11C84168F19533F5AA4BA9C94FD120491D55C1D3FAB459F80F70034 48F1AAAD448969D1DDC31D65619CD33070EC9BBF9B4A53C180015AB0D807744FB32AC68A DFD7986E082D57C22EAD0C5352E86911E8088BF50E5F9E1D70241959CD3C18145B258B50 261CC153E7CAB9BD1E723209024540E123C2333D5A5C4C45ACA1358790816CC30F3D9BBD 8453E76263FC425F7C2E41F79B402DD79552BE2C837B3048BD534F90B3AE2CB1F15A559E C00F1E783101866534B0039C433AF1DEA08C4CBAB477327EB3A56AD0F7AF75CDEE8D96A8 0BF499251B400B85B4D157DB4E54184AEC11547522A187287E945DBC7E31CE99E8499737 2675C3059133BAE517DC46AE28E735C72E31B30AAF58CE26BAD1FC878E54A72D0C44F980 4C9D5D93947A846B01F61AD1325CFA2DE62664F181557BCB92050CD697A26133B06D6C6B 2B2CDF60CE774CC5EF0CE86EA4E4879ECFE1C9B03E3EC73E35D53F5A1DC2AC8105953D02 277742EE13CC39195503F2F5C8C29CDA7E4D54AD44DF4BAF5006FB9C081A938A5B51EDF0 A20A005D40125960D589531F23CBA7C55CCF78C72DDBC8E9D84BC2A0C95DC0134FC564CD B08777FFD70A0EF725693F54E8C46CD77A5B9FDC91E83AD010DBA9802E3E140943706AA9 2FE69EC2474E61FBFDDECD7FA0641290E709A9145D8ABF5DC42285CD98CEC24BA9A7345E BAF82D4461F027FD8C609CDC0EFDB7696CDB4116EBB91F0FD74676DD5E5C880CC9531A26 D0256575BC551C3CB40BC4382B30302AB0B891201F818BFDF6D4BC88DA3E4CCCD97DFA0B C01A7FD9BF8DAA71C8D18B08E213AA8FC7ED8E3172F80615EB510FCD5AC5D508047BE71E 5C0E2F8E200E2BB4A8BD0C4ACE1D5CDFBBF09C74516F09AD40BB4DCB48310BD33D28B81F B6D0D04144E925C43A7CEE48D7772344EEBCF29D226ACACF8E693C74A0C11DA4177FB477 6148575C305615CC381612776C6C6ADF8A92408F434717F365CD54EC0507D77032A1EEB6 6478EC198AAE86D1DD2719CB3AB7A34757C07DAC27ED8A2EE44C55EB3F7074DBC98738E6 175EBE6393151DF9EEBFFA3B8F5CACE947311B9CAA3C9BD0FB3B359EB30A910D2128D437 E9216956AE6574F55D25E0E5D8A8E0C96293CBE723960A373ECE00A392D78456EFD6E287 D57562DB3BC3D2A7E767ABEA1D7231C4888B7F7DA7DB7ADF3EDDA0815CFF72C4A40E6CB1 2D55239788BCDC55F9F4FA9772782128F15E16E71F33F6C5B75BE8DEF23D8B4E0DFD8173 879DB3411147841801D556A6390538919D7D2608F5140F564EADF2DC08DF0AD03F8C126F FC49829551BFBF7EF652359414F56CBB309705B39D719A5DACD7401D6AB251FCC278936F 5A0DAE9A899AB62B9A33FCF22092DA0984A4BBC5C90C6F0448D48BF510E9FC8C9B67C447 1271E9ABCCBB65A4D92DD146C910AC34752CE16939378F0030039D7DC4187B66257475C6 AB2E3883693090DF350A42D3ABEDE7E84B3EE9187FF09775889B28DF0C1F289AA28E9EFC ECE418B40D7AE3EBDA065B2C1B0AFEC58B67199E52E33FA3A305708BE5A2B5C88795617C DA1EF1314095D09920B6EAC7FFE58978DEDDA2F17E598278DA325949A4C14C5C0EB76029 1E325DA7F4DD83F453B6DC912C790EEFF754F69B308DAE37ED42DEE308EFE13437599F15 406532D885197F621DD87FEEFFBC70BD47AB8FA0FAE972242FBA4F7A7F09D01628F87645 1D3A6B885B11F74B42C8FDE4DC02F0E677F0A7132B751720464BC97DE5BD08EE4170E7F5 036BEEF0824340EAB34A358635B8279825717994AE76928D15502BBAC200294388F53B1B C01EDEBC38390B986B27E68AEF3C05883E851BF71A6EC8A3DA59A3767D40005DD98704CB EE22059B92062B96273D77BA9BCDC6D856102AC322CED73033E6E86DE0CF2B015570C46F 9BB93DD4979472A4BB5DF56ACA2F9636B6A11253421FA471BB93A5561874B43C99BC2EDF 333511242334B62A0BD58E9161260561B9CB3CED25518A3CF7691ABFA61980BD4E5B6FA0 7ABB135421400F7086EB0C4FF44E220A7FE7D92A159BFC63E4D01700E719D56BB6F440E4 142852FFBE5ECC6B6A1A66D20C7F07A5AE5909685A3A71922C7AB0D1C18A27BB6E6044CB B8D2C5A86785378EF5CC4167479142722523E12132F03E5D408F69CDAAFA5C55FB6E8AF5 8EFB0D41B8448A2E30C66C99B5524AF66BC0F8C5BDEF2B8F0877C5E316ADE6BF0FC19DDA AF9F915CF3119AED62D21C33DCE3F7EFAFF5A7B0CDC005CE387D4B16C6030F751DF94863 99BC7E769FAF52EAD494C8154AF2CA80A6982C7F5B2206D9D4B39B6E61956ADFC144723F 99BA540F0C9D1DE18921A04A3206DECFF8D04C727FC9E88DEA9C056E2179B22AD2607017 9A901B66146D0951DDFD1B9E384EB181D7945A4F83F2A06EB41A2459903FB0AC43CBCA77 1F62A2E9727007042980C7FF98F349CE0CDCFF6F3447C3AF2712CA82D6828DB71C48A1EE E331572A4591BD9D3FA077E2F29D0DCF9C68CFE2B6A71FBAFB0E02C241582E09E3C848B2 CB8AB75D633C42598FA07F85D5EC3F577079CF2F0E68162E66D83176EF3B23291D741AA5 77D747220835A8B966049F3AA22CFC0D6B1F55EBB917EF80B50487FF81BA7ADDB90CC430 CAD43AD6199CF4CDE68193659F7E4860F259EB99B56C0E62390597DE3E05983AD165982B E8305FF7E77363A9CE624FBC98626C21F6723F61352E036656B96277E783D4E6BD0EDF58 5611C8D7BB3132B9E7C21B65B6EC5E3BF908677F6A5C5DD76BB16CDE31232CF2DD3F437B BCBA6901A99D9692EF82FF0F8CDF49DAB5A947DC27007F604C3D2CA84455F9F30A75BA00 71B9C36D21B4080D1C9CD31712527B8A6B5D6C39C29690E92E036D49E186D640E2F45673 789BE4F96524657EC01BBF37F792212AC8688FCB572D26D10ECB727A316DD79CAD673E6D 2897D77D5EA7723E541C0BD23F4CD3DC2A5B9E2EFA15A024E825CDCC81CCB5B588CE4B18 1D6E90D3EC7CCD947D371B98CC18A30C33E90EB7A5C180A6D500758CADE6787D5E89779A 067C2DEC491D78466EFC113586C71C5B7E2697685BF5AF1C6806BD2FD63DD7A5202F3C50 93EC7D2C129E0C3A8CC8950CCB2901894B1233AB3F71CA25E34BED65930899A695EBBC51 2F28FE435C99ACDB6CFBF1836CFC762BA9FEF40EC118CA6B8ED46BBF94082D4CB52FA712 397BC0C630D77283AF633364F319FBCCDF6756304CB60B8A14AC86F62AC180AADBCAC4E0 077C3299BD7486A05378F35430E5E1FB84A01A7C4A0B48DCD72BA02699B8087B5858C7FD A52A85F08BD02409CE14EF70619E0D344612BA9971C830A0FA719F6EA5F3ADDB460C1430 4A987565651FC9D13B307E48B7BDD9EC6CE1459E6062C2267D20D5D17992A4B84027B410 36DDBAA9670152215FA62B5054356BDFFFA7F623EDDFE2BB20A935AED52A2EC844973BB6 BEB38FBD1D4B21B9D802569D6255049FD9175DAFB66E7FB6E30170D872BDD64BAA1B16FE 81AC65EE9053D339A0C009DC5364D958ABF3E87D38A4E9ADCE9037BF4FC62E8D3D1812EA 8028CCA0852526736660713DA8E3B4C0CF2940659E8BB23F3B553D4FCD40EDE971697C27 E41F2A6C0C29139B2209D091003326D69A2F081AC4B7F61BE46AC6662574D463DB86338F 40BC2640EF0CAC42C1DEE896C41DC6DC5A86B1A0E5CED10D826660947B11AA1E9AA44692 E63082D4527C7CF7ABCD388E7ADC0C1EA3E4845469B19505F5E5FD66B65C50F9AB02BBAA 73B8EAB789D7F226365500A2E9ECD9A220BE7BE3D04635E9C95CC1196749F6B07151AD92 12ECA4122683808000AD54E24730571C9BACE4A563029DB9B921CFD536954CE064DA5D1B B49D74C55D08B1753124965A402A52188F44A14D9C28449C665266E999D7605E719175C7 6070B3A4A28B6ED3513322386B2B65689A4B65788A6BD0A869468B4F3544C6E6E6ECE246 506B988CC39625ED5148E0F620482A198DFD8CDDECC485F003B7A752B1B46B00DE60FE76 D86911A37A0C26EE72968C5783CDB1744192EFD434CE8BF0B1C45DCF7226F120E85C800D 0C97EFC7159B9CC14EE505042F371750E32F98485337BB26D4BB702BEDA217CAF9F0863D 733B2406270DA91A556BEA4D620A8155258DB0DC3C11EBCE82561957B2AC8204DDA993E7 58CCEFA6989442B696635B7D29AAAE8E14396E72F838E305E79F25B5AD19D4310A368419 E3F773930F2D6BAF2C8DAC2F2C7F3420594BD9E1AC2D6CD7A185F7F673984ED76D18B836 388084525C12BAB5BFA4844121E86E4C747B283ACA5C61E672679AE73940CB44ACB61CD7 18DC458AA1CFB314A0769445D0D06EBA26549A4EE1AF27005D27ADDADE65EF1FC6EE7BDC CFA6881D20F2B22972FC4357BF445008069FC6AE550B2D9BA16D565667364E1800167E33 0A36ED921DDF850A3F993F0B00B1C378004CB008A631D30FD498D676AC38783DE7103FE4 F314BA9168C19B0FC49363EE43704A9A119B360B5203EDAA03E7DEE736D7E6E94CB80CA6 42C856E2AF8D68315141E7E9E9F63B48A9F3AEE965F0B62483F3C5AF47CF61DC4EEDBAA9 F70846E660A7FED078BD46445CE45ED58C63AC224AAC16885D3F4E3F94F0779E180693E8 B4A15469CEB06D6ADBC5DEFD221406A8C48B95A72303F54DA54B745B504DFC5F522CE50A EDC0D27842FDE517791D8389ABF07F352EA4A752D4DB20B50CDEF5CEF9C6C8EF510FEE9B F1737412D9CDE528A66B37A4BB9272BF9C8292BAC9EC2F66E730C3D038E981638C503993 FF43DDA2C59AD94337CA7B45FE8C270334D4B330682344E372B08A09BF9AFCA47B68656C 1428369C660EFF4392C79DA407B29373D09D4EA1157A8A8D1D81D38034DE3E7272DB3525 4547B81EA3B0E2C89E60992C4E95D17968EEFA64BF116B4A9A2C0C0B242DF6A571CCBBB7 6A58E80D84D48D18C5B2F75CA84A7B7AACAEB5548F2A13D95C8918C4EA6C8087F866DF76 46538BDCF0B13A918A64E00AEDC53F222D8BA4AA75D90121FC69AA03E8B07E1FD92A67B5 02B9BC301225181043E987D5930FC2E3C77553BE300959CD767FF441D019828837680A8D DBAE996F1B3739EEBCA8CAE9AEDCE3E3784EDDCFA86EC38BD460F979CFF0347BBBD36DEA F8DB645DC277536BF8F1BA745EB4A2127CA7B71253C6539A31299156F12E07E5C9591C45 0C0E804503F8F4520C9FA55A490F6C827004FE2413123851B780FF78743B72C9E1499B81 77773A6788D1101D8551E12C46BFAAC185F7B6C9916796B3A351DBACF4A69A515EA1F765 67B5A62DD9D6FBDC9574F8CC8DD20EC6AF803477B8C78497EA757DB04EEDB5F3522B1CF2 E4EDCF923B14A6E4AAC3413D841EB5ECBA4116CE6549E55BDCA1DA667AE75F9626998ECB 5D82C4D207BF45C16A728847E952E8200194A04288336F8FC2AAD5FEDD5D17287B77882C 42E5F956B9DEEFD55ECDD8354C0CA47BC0164B2294C4B2DED139084B4C1213B74CF02E17 C4B43FFC034A2051CFAE1CF99D72492C567A750C704AB26AEEAD7A06D3D98616FDB0C0E3 34D99387EBB43874FC89A225720BDFE02090EFFF13CAA7EAD31827B6DE1E98E450DAADD1 515D7A65B28AF7057C7B26720025A8918D1A6810F2147D64230FF7925FB42A7AE373C210 5C99311C02EA1B33361D538B7742BC02B68E238BB4B62A4785B27F071D3F1AF43BEDEE81 F7717E213F352B861562C314EA8E03B8EDF986E488A1664547CFE7A59DB4B657FAFD0DAE 15ED435D89355108E44135142B60C2FFBEDF32F28DF01F02F2DE4C3C40E95CB0D8D64E23 672A423743DDBDD3AED5E910E634C9BAA69C8F6B33C8D0DEBF5FA56D7E6D51E7EC3A8DE7 14DA3A104DDF5FBF10EEFDF85520ED2B71F11EB46ED74F70BA58146EF447CF88E92D99BF 681D3DC3DB4AD32D0915FD7C458D3AE35A060C59FD3A8B0B7E99A3A7F8978CBF381A6235 D7534A4D11472936DBFDCD33844B8E36205089FABA95BDADBB0B55F9C8814E5F283413A7 08CC3D15F487E170DD7DFE8C471FE85C06383D444F65298EBA6FC3761D7F8D6F18916A16 EA794043EFFCB72B5837672E8999904EEA79EBE0D3464CB48E9AEDCDDD2FD9CF7C111C57 2C280A48DC5B83052ABEF370DC98EDB610EA5E43C5A9A8BBFCF10917003E4E25943534A0 E4D281F2CF61C6E7C0C10AAEBF23B7CAB563CE25555B82462A71A2D0C511390117AFC3D9 3C948C1F37F052C17EC23E87B3B43B4E874A723DBD01DC97602F498A1993D8E6A5AF7426 9E487DF83C45F7F9DE891963DDC7099951AD3E59AC9E5586AFB026A66E6FF8B3A9DDBC51 79E697BA2B46BC285AD67722E8087F813B774AA31E66BBD187AD9876315619C33138DA8D 834BC729A8948E617CD7A4B802D0F7FB484807D09CD337097462B9690533562506B7DC80 7CE404B4A1C2899535B13540A75DD666E1ED18CF75D95A3FEB472B7A596A007455682108 01948D18DF7E008D8086552D5F472341BEC1A3E2856B445C0099339B9FE2ACDCBFF172FC 5BFA8A63067E9EAF13AC8D6F0FEAB24FF4E326A252BAE6F48175927E7D45F2A84CCC0AAA 1400A922DFBB601E2129A649464C417901D7EE4B66B91A6DF5B787F9B6B758E2DDF58724 37F4658116E04EFACCADA54863E874F314AC25C4D10858A2EAF9687A4C45AAFB755251B0 E2A298855AA83D44F254C832073A4E065694BF538C63CCC8CB0C3AE89663E24906614A15 2DB4E4EC5FCB83A229285C1CE0B52954FB21A166142D8F82B60997DD39ABEDB4D3A8680B 8BED2755297909B1D66724FF4B556FE99D26C655F7BF055A529562F4B1DFD7A16166CF1F 75606228E96A320CAD4C2589BC86C4940FE50CDFE12BD5EB50A5A2B0223A6358FE07FCD6 C791193E83A8B66766BA2F2E3D15E3275C27ADF65E2088D058082ACD6B7AA272B26967F1 7606DA71E7CA51EBF5662FB025419DC26D155113947B966933287A14F066AC40D7028A08 07130DA33A7DFA24144A05BFFB1D979252E83F21A493F7149C33D7508523CD56C09F3963 322C64BC63B8CCCD8FE84E0DB44917107B6567579983BE44F73C9E524F44956C93D85975 E4531A3DC0FA9CDB9916DA0432E4EF9C48FC9FC482BC9744F6D818889C4B5D0B766D2243 B50B9EA3F0D20DE6A86F7D0C0F4B58E3B526C2DD36E01BCBC6EB8364B15909C335D8FCA4 7845F72F203AE4FE8F9D0FD1F1364DEBF7EF7CB08D6BFA764A7E79B9D76A412D879D2709 0F4D54A848C5EFD424C553A5CE0486D29AC6F2C6B372DFE8DF265097F184F2B88CB3C690 052719F268460D78153B97D77F824C82B466DAFF2630CB263115406B8B91C9FE8E9AE54C A2C96C85789610964525453B9D902ACFE6EB379887C72B472189B9E7CD6033F2E57E9C90 206E218B9834ED77760A12FA0A5A6F86D2C226E1DDA31A5CF2D0EFBC4AA20242D662A869 CC6A8C5E4B3732A9985A2BC6DEF9A1FE49309CF5557695B66955CBC49938FF605AB6F57D CC7D570CC84A8F10C50D2DEC2BF6746CA9F256725BA75D273325E24D04AAF0F2DD9AA3F5 F282773B5CB4B5DB26ABE691245BE7A3FF07C4AF6817725B03419F1B72068A5EA81870C9 93E040F4BC52C454FD43AC24E3A7B909582F2AB3584FA66031EABC8CEEDB7DE30D3FA311 A41DAC1CC909AEA330FCFA89BEF8D0D5217172BE25BCB3DC180DAAC52B9A95E588ABEE17 105E3DA435AD2698CF07035DD5C19C8DCD58480CCD20C1FF529D37B5BF95716DD5B36F74 B58FE28847962E7C3E2ADD93C91B529C48233EADBC2668AF421CEAFC5D8C65DFCB6493E0 5A86E7A5CDAC1CB839DF0E099E67A2F8A7CB966BE497C573A5506AB4944AF2FD770F5834 ED14B897BBAD1F3218007AB429C3250F7EB284AA16149DE1E6B6B540B5AEC33C4BE0A12A 11C3D63B8574C6B2B4155629FC9C13EFADB572BF35C2939226A90310A067B4F47A8719B6 63035EC0FA87AB6FE5515F1B1419C12F06BF3D49393481B7F45534B71FED5E1B8F8B6480 28AED0652F5C7FC254C25858EDCC0B92C6E6145A8DECF4CC54C822A6EA80F62122A58FD3 1BFC6FBD5DE46F258D4215FC361C0B8BA50E3D63E7423EBD6EBDEF07696D25A6FB25F44A 5D747225006F4AEEE6EC177CEAC8DDB0A7D9F536BC69B59A5AC650AF57F92798785D44E5 79EE905CB999C568B7DB553BD63184F22E59FFBE661535B35770A1EFB0F6530B455DFC54 1A4CA7E19136D9F3ED1A7C8F58752296CF5232C45902E6129AF4380E677A74D06E2A3A01 9C72A32A8555E52F5113112FBC4A2A42BCE68F7F5484D650CD206B0787C1875E7BF15183 3FCE25FFA474F67497605D6C6517BFF948E873E4AC2BDB6995045E489D6310C22F6B4582 906FB0A5484C4BBCE8FA61D80E4277EF0D37D09B869C0A174B97BB3E127776A0FFA4D941 B0BC194C78F189369E13D86645749416506452668810DFB0B4011A40E60CBF7CFA855CA0 F36C517B959FD11587B9C6C6EDA0FA01FEBDA786B36F3E21948F878D6DCAFA94E10509FF 5F8DDF25EEE7CB8E058F0BE6FB4DA87C28F225763AEB26BA7BFD8A52467F096A759F4379 C150E63BBE70940EBD573424ED3559B16F83D22068E16633D95A0267E18EF9391B9199B5 80A91B7A74BBF60CF13E4EF71AD3FFF9ED5604D73BD0C5A15812A439A3FE6641F2DE8B52 EF0BC70B7693FEA9CA49F93525D29B037AA40A33FC2199C3F29139FA63408048F29B7F3C 6EB0CCEAF6C51D4AD842A315257AEFFEE6D5A02C9A56A144B0AB2837402ECDFE10B85F84 88A87D9512E0FDA5CA64AB541E1BE99C9B89EFE7D3F17874F7593FDFBDE867653562CFA9 C06BC81560883D1F051CFB128310229768A77E87DAD9A45810446E4E116341AAA3D4B332 68322B7DC8984E41EAA6826393C2319424202AFF4928CEFDC24D7EFF4B64533FBC25164C E0083FC7DBF81E663C4E1746A7A7E4D7C0EC4CB4D9FD396508D6A96CD400C85212F522CA F4F6290CC2843E2B632571FAE0ADFD99A7E3F9831B0EE07340BF0C7D6EDF95DEDAD7D492 DCD83D871ECE63ADC0A50C3E76E5157D3872E0F78E036B3A36459E78484C9307B3DCB831 A99D9411C1CF4EAE117D651BE3BC04C2AB067E512F0F89A566F275DBBEB231DB42A0A197 C301F33F4E65EFDDAEF015999BBC1FB75E1F6A7925D3E2075E98E314BCC10C94877F0B0A 007708984B326817A532F7AAE87E026AA715FE64373BBEBAE99A0F83CD0C77173DB845C1 028F25015FC3DA0488676715D3EC8D1149A90AE16F418218404CC465D4EE8BEDEEE36F47 DFDC27D07FB5F4EC0BB8DB4601DCFD54A2BE85A9476000D20181311F5B6F4111CFE1A850 DAC7C23D30B674627F1A852FAC1F0437D18E6B3CE4FC7911FE7255390E0739D2A83DEAC7 02185389034889A8A437BF74BFC3A5BA6BB8735A8FEC009D55492F7D43C5C6F92E469260 4723A88723FD31B20AFBD42C150EE51108B05E8F7027ED40735A1D63931FD3CD5833FA1E C77980CFA0F7A8C47164639255AD00AEC0764BAEB2045025B7C6536309CC9A38291A1F6C 141D1A42F33BAF14C5844C13E8AFF8A7CB4AEC72E6039A60CC67F03DB21AAF2976BDA0A3 9D92A848D743DAAA36C288ECBDFB46D53E958762B1FD0F570F40154838506B656A081473 18FF01FFBE5D17C131949F5489E4C74EED3369A496D05E0C9256EE92D3424E95A30485F9 A00B0595FDBF84B03BC9672A4816D2D290AD1DF00E54C668DFE765D9EC28815477D7FB69 781C0A050660946AB8AB1E29EE5ECB2C1A272591CC48EDBB5EBF26D765E24F5CF4BF43ED 17E5BBB55C55DAF106C46E4D8241E4AA01AF7CCF79176FB4BEE78D5299C313E2DC300237 D1E149743E16081CF124BBCD7D9325125C9C9AAD57E86A94D18CF62D4E0785F820A9B7F9 E3AE3FAF0F7DB0262BE9BA917540B8CD3421643A01CB26F81555B05DA466F1136A7F3E80 3461C2F063ABF750BC814579689D3CAA094035CA96298F7F264C6546143DA15C6E085DB5 2065E8ECACDEB3ED4FC0D1AA4B01E3ED36211DE438DD1B3712EC858D66BD3779C96D4994 234A8FD8C1340CA9EA51A2750A6B0C65EE1C54C321F4D060F7F5F07B49C9528AE0A1D45B 5549FD72B0A15BF903B1F70B92458817DB0FD9F1731E82885835A717B0A1304BC067338B 1638D51E99D5C23872D4CE5097B89635C3BF28D6D2FC96BBD80C26BEA1968B8A59C278A9 8BA49B1E59E3584E54DA5998C5E70AF167DAE2710F7656169647D2781AD1C27766703FC9 6C08A0739EC521182A77410F2E2A788B47C745B4B0A2313F49AC8802EA461F04F3D54FE5 58D2B21E9348C19FF519939154AA3ED07E24D3C15971F380551408C897D618749CB38BAF 625434B73061407AC05E0D7B0885791153FC0AD5C3275C03F528FCEA3BE91D9CA9C3B402 3C931D467854D68DDBC0FBAF70D38365C0C76344472A876E74C04CEA12DAB0A55E776BAB CAEEFE1CB7E834BEE48DBC155599C4A0BC00E6B8746D7D0B9CDBABC463D8E2688F46F126 520ACADDFAE65101EDA0F523C6B9503D8FD1A5B9F0B6DBF0C286358D92FDE66720F5AF47 CA87A0B6E04E46BFBF21EBD5CDEA194B6425B5ECF81518178E0259E386F5F852C6870E7E 034582EC658F59C2E07428737B36B77B9AD3BD6D28EB1742453C5D4867FE879805A80331 C6E52C0557E5D036DB1EE67E7274AF769DEBEB23121AD503E3023A8515FD5ADEA11AA020 2BCFE0AE826A09874CCE19AD2A2A188C7331127751342E542258D3996DABBA1B6DF80323 5B6A223DE4F193B862224F807F99C0749994F0C72CC784AF11C411D34D649FDA1C77CB0D BE519001F9E757BD8035A0C9AEA86609B71A4622D5C78589502CD2DD58709544A76526F1 603F205AACDCB62EEF46D9042A2C9E76B887826827C6F22D73760CDCDD0FBEB827BD2E1C 3B5B0726A08DD2AEB614FFFD02C36F9E8B404160C909B70414BC8DE600A5D56479B83015 9B8E61AADC8C8AA077816ECB6317A9B16D30DD8D4499FFAEE87CE97F72453A37D187D91F A0C29A65A8F9C88ED22CF19CC0B40324449CA4E7751D77A0D76669AD420216EBDA92CFFC 50454E7EDDC5C4DAF66B67675B576ED2C90EDD9F8182589ACEF1B034D2F848D0CBFAF84E 38B7C42D2670D0A5E382FA11AD3F2FD6BC79EA02C074644F35842D1DAEF70507A361A0DA 03F5517B789C5684461F698F2FB20A7801CA9EE12981B5A793A481F48E33B596832AE4EB 7AF3681CC464F6895127CF10D14477611CF8AA88D0F6888225DBE342A708BD62EED4FF31 CCC1ADB38DAB151C94E9A1554980B3C077683DCC0513ED4C55D57BBBA0ADB8A5E79A1B4A BE43C703948452C44F1734F1C433797315C644A8E76D13DDF5E0296143F61FAD14E16ADE 97BC12ACC5DDEE482231A9E9145E69D63CFE889A1BEE0907362C60ABF581EA8541E36ECB 30457098E7DA18D6FFD57901AEB7913C59AF691D1A1FD3DF485F7EE669A5915EABA6456F 955F2D2F7D56CE0E349EA743B3F44ED555AAEB7F2A71711E08FB67B9738928AB842F6111 2B9126C7474753CFB458EBF75D817175179B3FA956F1D998C52FC9CEC7217440889D0481 CB91C8A8D1D1C6967964C7DCE3D9EB0BE6598DA5708DBDEE4EDF76CE91E128732A8CF56E C8BA08828E9B270A818F98FABCA757BF3C3855C6DB448F7A4A6853522F7541D46AF3818D B905D64847078757E0110C0BE6AF4BFF722FBAF5D8A4138BFFF94C7678A10F9FD850998D B710D5BBF763B8A70491CA4D53124CB95A953B080CC31174646AD474BBF5BDF057A1186D B083E6E762C669E935A02D60EC62FB71B6990D25BE44E949C85D1582611D826197E8F617 CF2FC506489E59CB380E2ECA368916347B1E1B59DC1AC765676B904A63D7F8CCB1F7E2B9 B8290B30E53B28F6FBF55D191BFBCB51F3BDDA71C7A9B1152F686191B0AD05FEDD3FC37D 42AFD7B3021D255DB7A00E6C2B3E714BAF7E61BFE8B7A88BD5B6EDE4C1DCADCC30565AFA 1E2458F35E44CB6F7228BA384CC1B7A64CE912998D42572F45A30B2C4F919BB21F66E1AE 6C787773E419E1AC1AD41A3DDC044C1BEC45CA2D0382A11C1543683F9DE1302FEB0C9DF1 8BF8B9F0272132E1CFEB54E38A8B90C3F5630A3EF083C73C4E83BF0C312F09D5352F41CA 7C8EBF842E7F46F3D97C4AB03040640B95D465D50789EFD68A12F1A450AF35844A7A2302 3F25728A85EEA2D9D124C4B04AFA44205E110CF923A4D713552FFAEDAECFED8898AFF89D BB682A961D1F815C3F978B9C190006959D4330D772C884F6B0C77B2D1FF722DD86448C76 A68AF642A08994966D3C2836D7063A59B168AABF47179CDD6D6F902C601A89FEF38E5A69 9753828649B3470B5A03A2B58AA910B758ADCD5739611894DAE786D5AA005A5826DBFE38 8B0F4105BC76C0437FEE9CA6C861FFB1EEF6620B7562B44AA0D29D1DBFE7B7954971087F E8D291A0DB5E4CB0512B104EA6044CB75C099716AABCB5EC89B14BD18F5D1A73E9A8DF5C A593BDA22FA28D8837519C38432667684C7C23594AEA6B39E3A819B72A00652C205B02B6 F8127CA0C7381B8D433B86E6DDAE2ED9482345792276F4604A9208AD8CABAE8B0A0BD0D2 7D0D5955C20C6E4425E295F5AF9FCA7DF682FBDD5B8B107B5FDBCBB0D751B2D2BDA99314 A9CC66F9E92FF5048E5A6AE2B8B03611C7000B0903491DA44123CCBBC67B1D4086C22ACD 08599534BC98EDEE0A73117ED20679CF3D9ED1506774C67526D9AF3DEC36B9FF799479DC 52A70429F79C8878509E8DFB756BDA3D76B31B9BBD77DAD3956B1D951C157F02EDF252E8 D02AD799A9DED7B38B352FD0841B96DAB3A3562F68178448DD8F1F5FE40438933F97530D 0E6C918C571B921F9F7B054B798CA04426237F4085044F7395D0E4FE3CAB961348D11912 E5FC311138A82F470FF3C8DF00B1B0563BE81C25AB58E95CC392203F9668BF187DF43482 BCEA0456394E31DA0819AB3E71FB8E02FDD90E05A39D0D5B4EF919E958B862C3A96A1275 F66C689964B85C4C60A9E6D44EC9900B85245C8CAC2847882497A97043255228B8C29529 12EA890FF254BD8C584126DAD1B2AC1AACF528564883F0C15C41A8749EE4AEF5FB514940 060D3397DDAB08DB2113F942B03375B4A2AAAF9501734C17DC220BC97E367C2160982356 2ED3C739164B659C480317952AFF044A4550DF79113B4F7FDBEC7B332EDFCAB7DA5B4AA1 469479B4490EA5462191AD1B336DB782BF7A2CBFD7D4B885E2083110511FDE57459457D6 68D29B1E31E734B30E4EE6AC28E8D74A2DEDD48BA964776BECDED8A86934A88D60A85279 9E9C65EE342F2555ACCC0E47202CE451274D76C6FAA943BDDB5C35855499141FA589F452 C5F424280D5863C7ED7544701C4B0660AC835D58905E458947DC5C220540D1FEBB4F18BF 7649596ED3C3F8D76CD146E5B5995F406CDC2F8D1D0D7CD4FD1BFF5907BBA5AD0B475F85 D4C75829E57476F12E1315742C875008A96A06A76627DD694E1EFC09D05159B101C8613B F0FA5E027B1C7F089D07B48BAFB047E4A75B101B417F82FF32BAAB877D7798A2DFA48A40 85C47A5DA67FF503552D60295D5C61803C2700879C685494886505DB291413B22C7CDD3E 9C36F74A88E53FD9AE6E4AD73025C80555094DD7D1A171A1F85833A390793DCC86DC25B3 1BF605ED87669F1D4D44FE035636746A80865E4320BAB50B42B6A6037B1A7134AA8B42F6 4A85B58C318E600D80E892B337786190C009CDA82D95786A6F723408E1F79C330221E753 F1A30D90450D9FCE6539A7E4B2AD69557746FDE8E4E6207FDC9068C400244A0CBF276F84 A2286A98A9B4A60457D3C1C2B1FFBEBBA67DA76E0B3D1027B914755CA8152E1CA4542714 9F709EE182D12B9D653D960F7242567EFE61643037028C97B19D96BE9F5EDA4230A329B2 78CA496D0C8894CF6FF8A410AA93EBD0F54CDA812CB5935DAC06DC7968F1FD4DA26B621B CB0C9FDD45A51E5043E501E17A042CC421E80413C5861941796E1F0213C02A968CB5CF10 EEA25AA24095839B12D6C260D99B5C42B65C40824D408464B30D6F9E02E8686294CEA8A9 39AF573CFFCAE51DFCF51D229D3753F144CBB1ACFE9253F5E36CB4199CB5768E6E1CE224 396923C6E1C9B1ACDAD64CE0DF19C102CCBE2F7D206EEE22350016B1DFD13EC06891C41A 353318C8744A912692209F590799C99741F3656DE0110C310E8F460C3B94C7F5EC4598D3 786D7C297707C6CA9CD9AA80A18141C9937EA927FFD3586CA76ECA5E5335DF22CB4AFBC1 8DAAA401CA2CB71E1E97BAA78CA4D1AB912028138B9901EEAA6E17263C540958263A509C 1E3C266138BC36DFB2B82E145C794AF0606D7B9724E40BD70E3B83D7B32E32E0BE470279 C05473C3649009D96F47300ED3668B9F140E65746CEE1DEEE623734F93E1C309B3F5E5BA EFA93C4E96DDB8E14DB661CC2D23995A845F8916079EB740DF80158A8740C15DE4B367F8 85B1755C69254BEB14DBDEDA5279C0A4BD93D43B940AC1AB933C20EC96B8B833DAB56BD9 15C46666D22E72B629E97EB44CD41B441F6E079E40FA868F3D74CE320D23402BED7C4A49 4468869683DD4BF0C4B59BECAD9706D091FF749B749DFCCADAAA2907457760A7A2269285 F31D4D815E0AF703CF9A0D671F4637881245B134D4E25A8DFB7E58F7DD06912E6FB27CB4 1B137208E30C0BF65FC3C078E9AD98BA6A46E3D29F035FB6A430964B84D9CE91A03F6719 614D8F12760A8EEA1999780E00AD8FEE24095D7FEF3BD669042F0D03010814916A66401A 3183CC41D8EA4423A97EFD187FC1D832146031D4837294C35EE6E1E0E8ABE8F68CEFB5D5 97C10241B7D8D83F281221F1B84FBA400A586364C58E1B611CE0E2092E0734FA0EA881F4 2A8E82E9B02C0A5BBB21940EB06554D01940FE87BD2BC7D03032646D583028436B495E6C A8F58566A946BD076D693177F13DF96B3A43C1650085A23D199A4773C717DE2A19BD8C46 C0D6487698620D89A1A07FA0205D14870AA43C6ABFA2599A84AB5CDD18A66F6540320B28 A1A9904402F62213DD74DEF28E2260842BA1F5ECC26C2450352EC67BC2C956C325B1F996 4051364A7592346F0C28DD2C52BA5123691B47B857284B4862961504778C8B5E06ABD1C6 F37E2343C185BCB458D42DA166D9479F8E529BFAB0AC782010BE8E526F5E4C17BF9A6BDA F8BD46522BB6A877C54ECCE890C389FCC576B605B65C7D17A483FDA2C826A6E8F27915FC 9E006666AD30D11B31AEF6DD8BB9FCEFB655F4D7DB73767FE1FACFE15CEF7FB27C3ACFE3 4E761F9BACEDC1CDEC22B0F50619FF7AED2689F2EE768CB0BAFB857680B15D9CE8AB0A24 36450529F86FE3A7CCCCFF0287092F18AD672F424DB6EDFD50AE8EDD481022EA1FFD016E E3B4BC8583BCFB45436471B5B4340892F390E061E0F28B4019812B0CC299C3D70151F87F 15018D49097A50B1EB5B90A736ECBD060A802A30632C2A681FF14E1ED5AC77726CC1B76D 378180CBEC15DEBD4CA283F2441B1E02CF8CC7D91A212EF2E0B1F194C196D731EF43A420 2E0A1BAE1C3C1F060688BCEC9C24B07984F8EC84242EF6660E7966DAED4AD845FC859DB0 71F1EA8C7E9E5235058EC9C42ABB815C699A883344E95504F9C5F6BF340DF54AB9BDD438 B8D63DEA04CBBCE565E3D78B71C6E2C04D4E1EA83DDB824C8AE8E9CC621CC1C75906F900 D2152DF36AE9390162C3DDDD20E79F9402FFF7A1D66377037D2A5E8F9E0889F55C711DB6 38AFACC568A1B4E4EA06E3A3B749DF4026A0EFD2AD56BD458D9A5837F046F81ADB9C1872 71238A54CDB3290187DB1504008362EFBB553C0167B5B58DDD5DD0788B4806D02AFDACB7 78DC36578DB5486BFF8FA27ED2705587C3B0A471DC74A47479EF2B7F0D35A77D9683CCCA F64C5E79F57F96DA3EE6666053089561CC89A0AD22E9DDD5AAE38F6ABDA3476E5BF7EA15 B4D782E42F6B1E778C9CD33436D1B2B72FE8B01E18E01C6558816D0ADE36FDF34B8D8F2A A15E028CE59BD9DE568683CFCB8ED3CFA289CDF4525A46BB7B0A91A62491A09821633CE5 C54994009761A3E6DD30D61612EF66F49E190A2EF1D189D75C9EAEF9CD21E505F9CF63B9 5B399B25C2808CED1FC3F6BCD950156394711567792045A8C90A10A193650379B5F44F80 B9D3C265064754B0390963D2A060AAD443CF6C377C6DD81E4B313D94CD22DE546C56CE4F 06FFB5C4D703D1CEB9E9957ACDA546D0B327450F212252B3686FA87442CA18B2B0D2C1E0 F91CCD54AD769C78D4E719BBC32554B6F486ACC1EFF4C8A3DEC5C359821715C2B64C2CD8 43D25F4899375AD2011C3A89914CBEA23970C20ABFC55AC3318BB03FE1B061CC5E1C6BCF B4E5A9488F08845DC4B03A79CCD15CA393BFF66051555DA32B68BE66DB340662F445782E EEBEE5CFDB73AE4F9864435B828D168F17B59E9ED6B1E4DBBEBED2075911DFEECF1D97F2 C57D0D5EB64FCDF7BD4F2F390F0182C997AEA6B3D5C5AB9CA14A3928F6358CCE901D205A ED5C22BC9838128C8631B69B02787A956865F15EBDB937DFBEBAC70381767AA7EF592146 BE4EC825A96C8695E9DF2490962D6A9F877E260A19362995C03E00B44DAE22F3E1AFFECC ECF056319ABDD8009FE30466EAD5BFF178E43BEE8445C0F3A4CFADC000CB29A66736B803 46E6BBA25CB8EDADED812DE0D7962C2C05A0DAFFE6AE2604F628F823659537651DEE00FF 795ABFB6C2FAA5E2531A36DD12AA069E8E0EAD1C6737FAA3B412F97E6D5DAB28460AB7E8 160E0656C551452575ED47630A545FDFBB6763F61CC4BE7BD81AFD6861AEF0B34044B583 836311C2BD2F0A5C74A455962A1991DC75DFF5BD46265C8805FCABE04238795013F09F40 D2F2F7C5D12F251752D938DC7C9BE00E5F7506E51E0EC4A7AED0FFBE5353DD0A6FC560E8 3FEEEEAF01316D5386633AE96A5609FBA122684608F90C54E9E3C1700ACD31686FAF7BA4 84AE837057BB3FBEB1B6C9AEE7412A74C5EC366F682BAE51CA425FB274D17C41D0DA1632 751E2D58CB0837549DD2296065176FEE15365363284E0F4778575C464110F5CFB186E92C B488958079B3DDF229F4448C19B24023C1EE9F226EED46316480F01DAE2D4A5EA42A3DB3 85E3668A3CDFDAAB384BD79DF85A103A8E09561B4E826D3079658295512DDCDB7AC7ED56 0966855109359E217E44805FB55FCC926CBBD27D34D5D1339D9306CEB6BF3468616AF144 765C64DBCFA2BE91F92AD7DB47DC92CCB3297AA99593851BBD29C07E7011584945C5F390 E048B582367C97BEDC1B31BBB1D2D8C038C05DD28E3915D6E35ECA809B335190DAB354AD 3D3EF2A5E3FFC5D8F0F7A87A8EE9C6F9E07154919054DCE87D8FFE62E279CC05A4DA0BD8 B933A49F7FEFD11E241DC1E4786B73D15FABD2915541B9019AF06EA28A1DB0FC3ADDE1B8 A370187BC285F66D544A23184D17E346CDD21C0B1ADAD499D78EE0258279A8FBB802EB50 887CE8290DE6F29AB3F6D0884BF63AC982A21682CCA88BBA82A237F39AC8D1EC827CBB72 559AF2F5E640B1E43AF7448258469187427A600608E5FFCFB50D3406D453D30B830D0B44 B7BBDBF0A5F00A33A4BA6429C9D3460BD6DCA861970E123E67CDC85ED1A304FCD0C18B1B 19CA443F0B85423F4EA44E0A31DCD363CF59630319D2ABA44E822902062C4194D1B4A04D DF98F54946C5769EDEA86028E88DADC98D785521AB79728C029FE0515C9BB6DBDCA26033 1B28F70CE1445AEDCC0E267903013BA6F98A564E6FB70FAD1343200A4E3AFF261381434F 4C8E3DCC87F1482C99E9E2EFC4A0D7352DAC825045D1CB8E102D9FF018467759C808D863 55C4D25B3D1097317FDD11BA90BED164B5204A40110751287F19926A82FDC6E8216584CF CB1B805BA9237ADA8D5BED21A89F6628495EE78DBBEC0163316E7301AAF1315E00302F64 D22A33EE587C3116003CFBE41718A07DC7CE295DF8D7CDF05245C46893759E0F2DD35507 CCA29752106D0CF2DBC8CCF6ABA8826EA7B0455585B26DCBCF0F598A7DBA8FBF04879EE1 82637DB44C1FD37E7A74481A333CBEFE4B413D8AB6A3F4DFFC471A611CC70C55618499B6 5EF14ABA68839AB4656971DF193FBC70467BEB52171F3E140FF40BA1C77BF02500842784 4A06AD4F0ADE586113BB339DDA9FA72FD99DA3B1FCD26D25E79B28069013D8FBF48897D5 2B92448BECA722F486F3EF5C751FD6DFD0560987137C75E466FF9F2002B7CE576A9282B1 ED5450AF132C858CC092E7CE3CEBF5C78E3DE84D130CB8E1C9A9D08495FA3918969D06A7 8D10750170BC3ADBB4628BFFAEDB8F47A2197D95DB975DDE5FEB8FD97AAA479AEEC667A4 8DC0D8D44C02F7B7497A394944AB7094F3396623AE275B60F32AE74A3ED40FAC1B465F26 6A8FE9162EA850F4DE855DC492315E3DB9390000F84363328D4891009B8F10AB08F1E4FF DFCD0B78719F59B0FEF3F2D7990F388EAFEB85C6F8383D3E50F3317EDD0B44AB566F798F F7B1CF7C9CD522350CD1D92E56061D508E66FAB2756999B57075108DC7A0AAB4D77849E1 00B8B7B5690763983245CE5B96853F7E1E90D5807B02C0E44FB50170AD7AFC8CA8229AD7 941453154232B97C0CFFB5D710DD5B4AF78146FAEB62DC9E73F72BCD539713B683311ACB BFBC5533E9800939175CDC5634FEF7D7BD135D6347EE83118C6FECD86799534165E063CA 5461B7AB4002D1972C22665FE8F75B4A6E7CD2D868311ACC98E29AED65A9DD734A55E7D9 43A4F53D0602F79E2EEFD38BA394581DF5895435A9E8FA35DBF89F3F7E00E09EC5858D12 6D0993DC87BB9331168488F7B12BA780D07450007F067B824CD0D7F0FCD3EF8D5DABA99E BFD130AC89B20F0E2BFD4F8256D1B4041F90E3E145DF48A61BBE573394B2E70CF92F274F 4639A6910E6E6945DA69476BA89E1CE00241213B739E1C9A0A9B352DE885B04A47B10BFA 4A040533606F2585F78DAC66EA103984E5484A06D583AEE68BD0D8415B0F6CE4505E571F 3A21899D8CE43837035AECF430D1AB85A8AB0080BB31D421FC1818C32CC591417CBB595A 7FB281122ACC1742E7A7B6807AE5AF3F98C94B85ABC8FE8482F5CD9F7A0A18DA819D2A8E A1841FB1255E3F4DCD1FC2BD3E182A45AFF9E888D7B3D49F4C5272722BF9CFBA654CEE4B 09C0C9897B4495BB6D38B00F0E4CF7891D61CE6542FD8F84C2590C62C47E967790F812E5 D0DC81571ED64FB311336B154421EDCE032F253098D7360F2079719047F9A47F2AE63CA8 DFBF90423BCC6630F75CA70936096BBB9719034946F340464563DCA8ED94EAC3837C497A 50315ABFF0CEDC6CB3B7B1C30A8442648734645999BA94AB7EAA67798AB5407CB484344B 86204DBB56D3627091D3709FAAE6CA20AB5733F556C40059E56B42DAF823CD0F5139B240 7CB44AF4DDC58EB2499525536E01363B4E1A36331838E88C6F0BCF423F70DAA9ED12B5FC 98C606C301616A1DCE9DAB545FA0ECDD8B967DFD1C1F096D242CB1368A7075BF72E12B91 A953923276693A46023276B9BCD24108A524C40026E305427EFBA8D9A8C87D1AEEEA0AA9 F4BD27476FACEB36ACE046FD8A5AFE4123B6944DA5E7BBE7C4F608EB0DA74DF816ED7453 6DD277F8E59F65AEA8541DA98E492DFD48504D645345E957129E2A60FC5BAB29BFFE74E6 4D66EF0BEBA0B02A78BDFF4CDA36A04C20AD552AA92BB75D52A78745C7B47F7D399C17FD C56C1588083E04035263D46D90144165184F0E630A4FB68874E4C715A3708E84A8C08142 988557DE1FE684AEA24BED59A1AF602A04F7E916FECB96D2D2149E71642AAFE15B0E399D 3C66A5944B4B0BA234670AE5D78380041161A606B33BD1B38D9F53A592D3C021F6636731 6110C7E4DF35E8BB85F649E568ADFF1736A1B27E5B13AFF8C4504230D877FDE932AEFC2F F9E0BFC61BFA1541A6F2C6F53A22311DBA8A8067D67EC1A240E27F85FC0D46C4DD2F519D 7B72897EA5B38704848B4834AE19C7BD5E19E5C65BE109EB9B02CB0376E603B1B6BD18A3 CF63B906F8BA66BB52B1BCAAFE70BD7A2A184424DC53C91582F47173486998947B074A87 B49FB5148B6FF3FB34FCCD25CF2940042E7E90EF0E9DA4B520F123CFDABD3B3CD2DD8CA8 039F6CB5E379D17FF8C3E7F9F597A25201332F0062A0E6A06CA14750DA000B4570B4B3D4 859038CCA94E63854AD5DF2AEB672F92D99F6E5B03A8A174D64695141A12F8D6E0BAD839 D104B24B2B02F83B30910AAE4978C9558D256F12A120EFCC8BBC9FE8122DA3BB72C7A77A F47200C9C18DC6560B9D3B82AACB581A4F3735B4D2D215CCA7046DFCB3468917E96B6A67 865B57BD51428A0221225C3A79D3D129B52497ED727331C1924340B127752929C29EEF01 677C812CC6AEFCBFF1E3D24594D430E0164B6B933EC66A7FD00B4E701657F6766A186BCB 872F32AB18CEEBD3E14574AA775B3A73B3BA7BE94916FEA42716105E6326C21A59B62AD1 681A9672934A3EE224B4E634B6B4DA3EF82969768B243092A98BCEAD10097659B9264DC7 E83CA911201CF43984F4384DDD10F5E7741F78F3013591AE7541965489C0CE0B2C78228E 2148182930C04ACA997CB303C5C096147E25E0773262E62A8FBB81351EE809D416F63B48 615E95245EFAE2FE041D10F0755A3FBED883200C13537A1FC5B1CA14BB847C8BA1049B6F 7CFD9784512E4D2582198F8594B4B689772DAA8EC2AC7969E3B20DAF8A17D36C91F1A5E7 4FA921F611BFEE1982F590D8BC0613CA86B0338CA0F5FA6107B9CABEE94D143C98DAC455 F64B2D213C5F3CE2F7430673D5E2224765ED4341D8FD04864F8861369ABE41DB25207682 C81BFE06C3513FA019456A976CD751B29F4E65C7853DC7E5AA99539926284A316DAAC56F 64767BC4BEDACCE77C7D8C774F0896034ECF9B9E418203D94B94018D126ED69E431D792B 89FAD0AD799A0660B1282C226C03EA2E2EAD24432912D2D405A7A5130525AB9A4C6BE1B3 CCF9094EE61401F04BAE9CDE3CFB0A0A1D33054F993EF6A6A8F1E026E744F19F19F8DD45 01199F97E79F711C1C219532B448CCEDB409AA0EA129135C1791AF1BE7FECC1C9B1D89E0 906EC96620278EF044C18228F5CBB67DBB36C7BD10DA5378224949CB6B2EDFAC66404F22 42AF5508383B90080331ED71451BB59A8A2B91E05365884DDA3A23C9BA8A043C9A5E399E 5A4350138459B562729D850CAF38D18C4DD8B6F9D8D69402099C0791C82FD8F1937B1F8B 05E3D4E22DF453D2E8CE4248BB5A61CAC9E36908DD9049CA1EAA4E7773D54F9BF82D4447 010C37DC6CB5A199B0BCA9AA3743592E651B69D1D4BD2563135944545A1DD8CA0B1928A4 93361DEE737C834868A6CC2B6BA3A44E198D1EC12123BB95103C8699B4B76D7062ECADF3 13FC6AFB6D364ACEE2091991D4045CA2A5E33C7BBFC82149C437FC423ABDEDD7E4BCA0F7 BD1ACA371A129F11735758E0E88F453DB813998F91CDC3428B5D8FFDBAC983213F9C35C9 C6B5B1DA85C0F0FF0089BFFE9269AA245A8F8BA47E373D2AEAF9F492835B1A3B3AD9AD49 076B2DA90C516B95C8D603B758D285B811C97A3B28BD0DFD924F4F4A6C6B1C1E0F7E51EB 582914400A9B2610D008D43D9623BFA18A64B6160A72606CEF0A31DF88C7ECB3327A0F48 3B0DBF54F1A02BD3DF36AADE1A65D4ABBCFC72149DA3992CFBF54D1DA3DAC66DB428DF19 90F4C7923A23EFAB36FEA4B00661289D7FB382ACFBB03C6C82B58A46701FB75E36E1C697 7026DF6B66554C2C36397230657BFF069FD03DFF9128A2240EBE1B838512F48F1482991D E0AD6B6590DDB2052564F6798C1BB88C06D53C4D4C76A4BB1C35355468B3C71547D76010 C8902F5DF9C07A43E99230DA6CC708BEEF6D3E976C07404DE4A1C7BBF11CEAD519AA6006 EEFD89D2CC4351FC3E72415E8965B1785AD0E29EE59032F6D0487941940FD8EB73B9CE70 704AE65D7C3E7E30FC066DAFAF38E2A19025F628E7FE6054694D7AD21ADA5B747E54AD1D 4DD57BFCADCDAD35E795A23BAA5171B8081EC9803B8FE6242AB1B421A20C6CD6A107572C 9DA40E22D64E0D053972699180A9B5062CF460A715CF99CFDA1861BA3876047D969CD8F5 889104DC3CD6A91E6765BD2CCF49F21BAABCCCC6984D5DDC1F872F85A45D42C490352D53 70695AA4420AC5E6A0CE1C5B72186FD1FDFC64CB7680ABAFFB390C494FDA8852E6523BB8 E184A625027F79620D9712D570AA5E2DE15863B222F7F5880DCB462BBEC2B5198E005DD1 17B6867C218FD965BEC790161999B8D27E7694909828261593BE4DCE97FE5868285EEDEF EAB74A5707DC3C7824C1D4B170F729D9E04A3891E2C90FBA545FBB6F8883C60ADAEFD251 6453F30B02B63D0438F927ADD8CABC0F78290C5D0433A1C611E4754BB72DB7A96364D9AB 8B698A63CFABED083D9DB7B3934DA6FED9C162D33BC52D95F98632C93A8B6611C5C3CFAD B32DE2F520ACC68788CEB420269963C96B341D7702F7830FAE6CE78D23A99258FCBC3955 9EA5748F18B560FBB1557019420217FC3FF9E1F98FA219728C74FFB024771CAB8A1675AB F57B229870ABE51416A8D5906D27EBF989A3F4C6A94E0B9CC383C5F161B0079868B17D03 2C992D39EEF4FF295EE6331E26022D098D1753BC6F949C0FA5567C8CBB382A92D13881F8 734E4AFD1E7157D9ED6DE9EE7DA0B8A08F54B7C8121D9D4A5805373016BE8DAA8B2C20A2 CCC748F20209A63A4A7988AAC44D829241E0033FE88CD314A751EA836287DB68B32C9F5D 0808946D8706556B3E597F70857C9C1ABC8728E256E9A34CA4D88D08A12AD64C1344E0A6 7FCAF84A2E338B6734319ABB816F50BFAF49009AD63FCF1C9A4C7889485D7D6A3804A5C3 52534EEE795E391609D1B6500321D29935FC49B937C061D556BBA407DF6A79C3372E1B91 9539E5C21B816C060642188482BA31D8F3C4CAF759F7710E269235EB9F47C2699CB14C6E 0CB2DBA8CA246D4F8A4D95B4452A4AA20FED42E66C415FF1FB74BBB434FFF1831BECD82B 23B04ED0C66B5E1CCE3E166EC586CDB122D6FBDCDE2444230D932261DA28CA59BA47B23C 461E0EF7AD3E03C501EDD54727F14196906C9413FEA8E2DDB9C7B955B3A7B83D91DA4BD0 2C7FD4A96FD70634E2069AD2189A546F0B4FCF0DCB00C0E5F3527A3F0FCAD178C8D2BC4F 4ABEB2250B4EEFBA149604B1A3D2178279E28B7E91E859E110510CD6C87D52E74CAF03AE 69A5D08D4F6A45B3DA591EC6198259C39E4ABA9D417336E18E0E07CFC28C84B466F034AF A8541DDCFA4038288A6BA7A2503AA194DBAEBF3DEEF9BE93EFCDC351442B48AA8C0C9B67 EAB4F75821E1FD55E60757D11BA394F8F336242890254F43F598650EE6EE730FA54E7EE7 AF00FF3F55703D39B2623C7657E4CBB969AA8D7CE187C0119E485E391F57A6A42B2EBEB8 F22B0F46012D822C8EC9ED9FB4085AE3C5FD36A9628B07B1A963337BA95E1EE89FD3ACBE 4921FAC06134DDBF72062F31B1D351020C16B886A36CA9D5EEAA6470CF5044C7B6710392 1577D9D5CC9E49A36C30ADF473FE06CAF00A5DDB44475F74152D2E520A1975CD1C0A15F6 A47893FEC6BC00E1A44E8F6A1651D39BEE76E67C83B735872BECCCF0F907207778C4664E 85C7D637FD201814BBC7D1C6200038B17F75E08B23F4AD0737259F9C07C47556FAE21B18 1A110F056B1A612375A511FDAD2C291CF389622FD073F292ED09953B11E2A6626E6A4CDB 8B50B8F9C7147114DF64C9FD8CD2E064CD9A3EB95555FB2B8D6E8A4BCDDC54E97E9F0B5D D3815077F6A825F924FCA5821E78BBB3E493F77CC71FCB3A5D9092453A0084AFA1ECF49C 384A274B9B2CE36C0B1413C473D041B4BE0080B561F7A03F5A1641A6FCD1959506EFE270 88ACA5283BF1D38901F2E071BBA4B2E35BB79D9CE9CD3B776C7348EE014D21BE0421CBE0 4026C044120006AE1816528B353850C3577F4A0CD8BBABA169DE487AFBDA975B850736F9 1345BE2B5ED8D94DC2505B8D6218F3167050BFE7E723008CA3C29E3244509D0893C580F9 4FAE8F724DEB1EE280AE8993C9502E9F40477FBAAE9C3F9DFD0A78FC38D537FC0BD23851 8499DD3CC9E583C292D200B9A082008E52604EE8AABDF15DB108C8D5A693CD829C8812F1 0CE53781E50A9D234AB33BE6693C3FB59B921DB35FDD87A393F137D0CE119CE835138F18 7F2338E0AED3D973652DBB79D7761D39B8A819BCED55B483BEA6B5E971E06475D03E2B9B B3B9D6677636111D4725EE36A077BE72347358A1EF91E5FFB77A0ED25542DD3FE9D7BC18 596E2DF47A12A43F324444FE90226A63DC1CD5F265CD7EF81FE20A592D5A181B7AA251A8 0CFDCDFA15B8A43A88F6889D2EDF93093DF25CC232BD1DB179536A1E3C46274F7F36A443 86A764B04DFA73FF34D7BCF86C0A5122EA5332CA1D797DCCE9BDC7C8516BF80532BBDCEE A7C2A883683CC3CBBF1E96490C2B7D21DA99A3D6A0ED78252B12E1C97CE41D2B837E948E 94BAB7BD87C929D8FAED67A8FAC5AF8E73F2518428646B0A70387CF9DF41DF0F4B5E7A5E 786909F6FF0CB78649EC9F653FE445B4D588370E86EFDCB1EDAAD1D2601725EDD7CB78E7 E815A4B76528F51FB88CF25A44B187001C63988B6E32531DD4E961DF683D794C0AE3DF76 D0C29D5A279E668E08501979650610050BE7FAA5B67B93E47C807D22B26CE24B9BEB46F5 B09C4A4683ECE59E931850DFB86108AD5937DA19A2132BC076AEFADF3AE07F65451E7A69 5A583E0741864156E31C4DB9795ED7BCEDEEAE6ACD259FBDEFD4B4F4F187726A7A247974 7B22593130F566D3DFD71E500EDCA19CD8B7B7FB5EBAD025660F5D8B3F24A224D741BB9E 84942742D9D88E771B721E72859DF2CFFE2B288EABC083FAA26D815BA98A7A9F701395A9 7A8058CDC1CF51740E293F51B6F0D61666A365235AE1296E1C9485A0043F651DF417CB94 E53A1D79AA96CD5D8AFA0637EDC6CDAA761FD5F4E712745FAA66F74E7CA9D4C7929884D5 32E12C92625B882AE1B60E0BFCB317DA1704F8A9337A42A8BE38DBDDEDC1E6FA9EB01F4C FB0BA8A2B29D02D9DBE63D2D592348A645747C55A939E94753887A853D3DBE03C0BF8BB6 C4892B94415E60C3B7927B3B7BDCF56B45189044192DD6CF8FD192C5929C1741B6E53FE0 7B4CD9EF8409287D791BE417165B54D5FFEF0F742984E18340AA54EC8D3E0D7A479F269D B8FBD0671C09E265CBE33A64CA9BF752D334803C09D32EA7EB774C32EC2E2D8706173E56 C6A9690179F2191453DA57206855397146877BC55A562AF975C3715AA39F85C39A681FBE F83A7377E88E569732533A5EA193CCB76318E9D6ADD7400BB9CFF14D698C4179033570C6 D00D70E5EEF63015399E5F49C4DEBF22666D76B6D60F801D023FF4EE8D63A1DC0709481D 491F88979DC7AF7260BC0EE1CAD6A7A3EB0CE78C93865884383489F457F2AC5CE0C832F3 F4B81820F37DDDB712560F066ED63777198E3491EBF087DA503CD59812FB082ED11E072C 1C1482D879AE9F461ABBD5D4BE7D8B50D50C55DDF9C49D64FF968207614A85DF8DD56502 809FA54B200F7DD9A6D4262AD7F0CF61F87A69DEE18A9B8C67F1CC152A8509E64211A064 F39F3CCE5894A8EC0E23C9A557DF5FD50E2A5CAA3338C1781D04CB638A47C7A5A6FF8230 1867BFD856A6BF11BA8DF56963D17291AA202C991F7EC97B501F79CEEAE44474806A06C4 00BA8E8C5AC49448ED4C248327E2CD223B9199ADA618FF99F8DB84065C36A8205F5D3356 C690D972B139D97449C080821798A70E55801EB4532D0EA1C05DC635932D1848310C063E 05BB58B016A99FDD3102CF2BF2AFC5C6FAD3C031FA24F9BDAAC454529565E4EB52F838EB D4A61A32FFB3A5768F3B1135629AFFB808AA85788B3BA755AA51A6580803B6CE45D94581 849CF2FA75442E759F1A544237938E831F504BF6408034B034009BD82E623AA31B66D128 2741C8692C56E3F251BE3D582C32A9B770D5DB3E9DA9BF50A527B37DD41C425623F3B787 7186F26937B3E04E291EE805DCEDDFA214158DFE50A3ACCD0DABAB73F5F51BFCA200C466 B9A786E7CFF65F4B24C29D39A844A6F6D6BE41C298C2BCCC5CBDBF3C3B731121F834E230 C8AA3BF6E2C40EBFFF4723BC0B2AC407B93DBEBEDD49CD639EEC65777A5B6F94B8DC1C59 05040D8E4B205068BDBD5F812058D4D8BC2E16114D22D81701D36665CEC878D148AE79B0 F67957B5505708ED3D98FA55BAB6FD20E2C8BA1C326F514AF29CE979DF66BF1F71A579C2 EEAA176A3632CE7F136885EF3D530C15DDB59C28CC8E820F55E31667E8D8555DF76807CE 3B37007E37A06AB32A21B2DD297C72785A88AD6F45784224D29241B013663073D8E1F7C1 DD2BF95BF7C74B8743B31EF48655049EAD7BB13B87E648BF938059202183DD2970BCE1ED 3018733F8E5B7EF9255A29ACF581426DDB9224858BB380AC7BFFA1DC8D2589A83FAF5ACB A4985D845B3F635046887AA62327FE0B0F020239E9FC7477821F7BD43EA2EBF1DC9CCF32 FF6111507BF24557126C3BEAF30DCAFA051E3E9C26882BC3F4915F54AF9965505D89D11A 562EA74783739F0C788D0BE3547F16F9BD13F96D861B2DAB90A4BD23043D588D9B583C8E 15E9530D006DB4F17E0B4EA0A851397C4B781D707F98179B6E212A6FD87E2509B6AE4CF9 EEEC87747374BB2144CE2E7A70B0F2C03A69493F9DD476675AF200F15EBEA4F7770001F5 461B9079488E9FC1FE2EBC86DFE8CA2D2ACA5F746804F639228E813C8A1D1680F0A12499 CE56678DFCF24FFC05C80F78989CDFB4F0CDA8E66428511E9BB0ACB8EC04161CC575AEA7 522A229C75815C78B3248031DE073E0C5E538BD886F85555AA2E0A0456C2933A95E83AF7 D16C8F8DA487452AC84487EC764A1A2EB1CC754F517FAD18C7F76769E67E3363D8881823 6949A35827574BD65623CD4FE89C0F11AC2E050584CA49DEF1C513A8F7690652F963447E DC79D866F8C42EC7F3092DF52EBCF6E64D19E44CE1403BBC3A29C56CAFA903D315D42058 A01E6124B82F1093A3027891C49FF06C8C1638563F92BA051AA5F750FF5F6108F6C0071C E9CA1CC669841592DE89A5383CEA9207C9DEF1A4FD137847A80630FECCE16A6454F4E857 80A9B166DCFC50AD94E332CBC546CBC0A39507C8205050473351C6263B33FD705594E654 06B19A80DBDD061D12BB89775D6BF4933B3FBF3BAF6B287A32EA01ED2B5B33C48715EF5F 4650C9B92EEDE15F46DC093FDE463578EB377697703D7ED7C0E576001487567316B333E9 CCD75BCBA59E69E1AB62F39D0546EE67FD4C1339A93E01951F0C2A38A994406406D2C64B D719DAF35CBB25BBC68E6DA6016ED0AD7E1930CB951C1CC22A8D82E144969FF25FF153F5 D7A7A6608471BC31ED1F4B4E6E58173FDD83FCAC6FA079FE172CAB3BF667C0FAA4827244 1445223D78002593602829313EEB37EF4EF8C96129E96484E36328213B9DD5F55B731167 FA55DBCE903768321B2F375FF1323016F7A8C0B401BF8E2A983EBAC57AA4CE5668BBE152 E1BAF5615559760ADAAFBBF1EA43703AAC9A74F21383017152EA311AC3D3F8762E1D8918 887A0BD9E880D3C052A48B4EDEE667370097EFDE700B49D0A19F32AA3B43C9B58A3EC400 DED3BA2829B90F54D8F0B3BECED9136941272DC0332FDDEAABBE38A0F8BE05287CB0D281 DF55F4E8AB705B54DD026BC09E5831A64C728D9895D21E1FBD24D198ECD475CEEA216726 E8BB15D4F8E946B5B097CC9C89E79470F0DEE451DB14D96C994DAFB07A0221BD48F79587 DFC722BE7B360A93B98B42443494076BA779417DA3C17BFBE69B4B547A3EFAC6552E4D4B 9B03D51C863CCB46A8ED112C0B19608879DEAC918544B43B4199B2C0DA7B318FF13E0CF8 47612E7279C334F681AC44CEBAB0D6E141506AB98322FE9F41430E69FA2F482CEFD68F3B 1280C9B6EA383C053F9474397E8800A6DB961655D18ABB68600F570C2D02E4750622174D 6A9AB48B05DDB2D56D74DAA537A642E1FBB63E55FDCD54615D08EAC22EF484FADB9862C8 6FE2E6C300A367EECFE4337110796C21F60F9CA9D034917B1C98FA45EC79DA8DCDB216E4 A3DD97F0C51F7828743AA768F2E442D2264DE35D7F191AE874B856C8473ECFF241A46AA3 C2261E74BAEC485E0602ACDF8FF0A0077E84E6C8330951209C87E117DC57D6018E7D4EDB E79E6F59C75D8D030B442B65B3513F74610B98C40E3C2D500D41ACECA44257F8E24B0B19 4B6C8E20C51E61AE4F633F8586B52CF2D9438958C52F7DB15B499E69FE3BDC8E983CC34F 80B57FE1279254A228E7286CE78E771BF9436154847370D7DAEA0D995D9D7FC2F0637731 29E076BF10576E480C1D82C29648A2AD8CD36814C67045E4A67737C22B5B5EA48387D991 E35B8DB9695290D7CA13B1106C6FFE40A6EFF1DAF1A841F3A5F75B68D441687872E91EAD 4AE10D047756DECBFBE4F87262C2008D4ABEE51A0641AA309631D7E54258182E56901E59 D1F6C7F15E8D3FB2CA70AE578B2CA08C65FFE542A479407F98D06F398DF54DCC16FBE30C 67FDD4A3227238EED53CFE2AE0088A1E2F9AA08917947C4CF795D3E464D55987C4DFD14E EEE7C9EABC34C4F4C77B56C8E486BC35E38DCAB4E7FA1746C5854175AF400460BF82BDE3 C9E066F4ABA7E1DAF6C04035AB86B1289E3702FF3DFE4FA431238AE487D486150A1C52D1 047B1663D12962B478BB1E4B750FAA1E2A09ACE4AE89058F3E2B928167FEF099922EA552 6435952A7ACECF1650B319BB3BB8734F9F54696B556BEA7EEC47E4A77D81280415E02DC2 3F4D9A73F44AAA9646671EFEA5549FCC9A5915239DDA6E1C872F742B28A203AA88401DB7 00C36DD78CEA2A9293E8768D5C59721D16A41000A2E1B230DFAF4A1BAC797DDB85BCC5A5 A38BE413D0270D7259289AD4788D1D9769234BAE6CBA1DF835601A76CFA75C005C0EB325 6A100B43C0AC0D0051084902D68F0517C91EA5F4161961644230055C97947D5756C62F12 C550E113B2A88EC56345C965D81EDC09F62AE036C18AAD798250E5A0A07E607F3E2D0ED7 B889CC2961339149DA012D74F290574735CF2706FAFF605861571D78FB92A8CDDC84C83C BEBFC000D43211962C578111F8FB8E8506EB1871A518CC7313242FA11F8D51BFC3797637 F5E1AC8EC1435B36D98BF1BF34C960C6CE650D5115A7A244ED7489BDB7F6514BE25372F0 9E3F378CF95A0E462C0E0E1B4E84696F1977059079AA626D0F441D2CE7F4B52A49B14FA1 19762B9FF8966772E936F0C6BBB0B24F7846FA1109562BB57A995AB8DA48C9EDD5E90FC3 4C51EE9DFF7A2D4AC959320FE10B800C83E9B83FC89FA220F965DB0495A4EB5EB1AA21DE 5EB75C0CC0619C9C38F942CD525ABD40EAC721322D47D7117D750325AECC9A021D1A12D9 D439AFC0425F9046622EA9F34FE1FAE58C428311D62DF1FACA2127AA627E91F5063FE47D F727DEE5B989E1D4A89B900FA7A9CE3259A3A86D966609FC254CBE319DBF40FCB0515567 A54AFDCA6CB575C49E893A136D1680BA06CD3C427E1D1DD707AEF67C44B89A4CCC1F40BD 64820463144AFF0DB7CF78F08BEC8C7DB7356EBE85A0DFFAD4D3DFA0F7F4AD70E7A5B49D 9E51D73AF08C7B65B9914071A837733C0819ED07223BCEC52D623D29CFC3463233DA8E44 02C013306E90993BB54CD78043BFCE18E490443AB6D7567FDBB9C5ED761968B39DD21669 EC5DBB5DC7205B279B3095460CEE2273600AD169C649D846A1DB9E6524A7FD5D9EA9C9F1 A02CBF4D9874ABDDCCE5F70F7B3F408F6186A0CBF83EC8A342D7CCC022C55BCB472D5896 069976044EE83A88622CB1C774EA75B34DE55D618E7D22D50ADD05328B59F9AA9B683EBF 4741311B7C07541228ED36A71F9175F4D0EFE9C11B0AAA03403F1BD623F43B4E8C8A9E5D 8D2B43F240C89DECE40B79C64DF6FDA815F08D51BACDD7D6932B73F74A3486993CDA0834 3812F920486140EE379675C07291435631EEB4E03CB5DAB603EFE0545CF4130F9D7D421D 5114A4FEE9E4B2897BC6D232ADB685C55EDF8C2A8C47814A38B8C7BF34FB777360449448 90946A15CDE17EF60BA40E77DAF5BECFDCA9A09FFCB93D0010A161BFDD40EBF7605EBA0A 50C3BFC9B8A48CFB895FA52EDDD86221D6EBEB0E9A3D8D0F80B88DA1B8099DCDD7703C53 0C90F979DA5A2CF528B610B5645087D2CCF5D8F639E420AACF09F97231C3250DEFF28978 43F44E473AEE74810B77D8449877E45AB5A30E29A4E98CD78F57A47A195C3CE22A5BDED9 1B3C576D10D7467B3940542E70A7DFC92F4876E384131982D7680FE05A5812C80621EFC0 A2F0BEA16B3D4D9C07B8AC4A540C803246CE437DA13FE610EF3211F81CB7801C642279E4 9CF563ADD932DE6ECA45918DDBE97DA17B443C7BA15FCF39D91F9C4501B03E56B9F6DD75 F3A47EFA6B7D9702EDF6C79C9183F37DFC805E5689F27B53D5487767B276AA037A210C02 AE23A2C4C89E6CCDD49FF5FC857B2E8B8A9976C238456D000DBD35B00A9401657DF88913 BE616D0800945CE1404968E78028B727B6DB6547F5155F4C5E0C97C3FEC8882EDFEF555E 98E76A3BEEBE09DBCDA40C2C35BC1A8C7A6B7812AFCB1468D527F723C947F56B9B1B4A45 BC11CE5C3CA9D950E4729A242866E226A66E3D8F71D9AE73F0F8740E2974CAD28FE613C6 B67BDFAEC416CF799EABCA17EC183A0FC013A16EA73B5156AD203C2D07898D20AC23D03E C5E4534F153440C72D3DB5DAB3EF1AF626472D039892379A39E894B10BE22EB8296E209A 8C823E4999F6BF0A1D3CD90825C752A98AA190A2E19266329A49014C772510AFB6B85D23 FC3811B1BE5CACAB09B5D46E3813DDFF41B8ABBF8E8ECC2CB14D48632DA2E5F5F748E14A 8877B8E5F2E2621014B93A7AF3113E3A8B3BCDDB1CAB7E7FEDEB79E1825E27151E7C74B4 CBCB8B40A82F1F333AD206F18835FA8EE49BAF6E22E851DF09857DD303CA2CCDABE607FA 78740F70DD481DBD1EE04F730B5A3762082B1B47E69F39201D42A8E21F0F48CB5EF716F2 4E3B4B20E53CAC08BF494E71495B4E95E46B6AC1802F01DBCFA8DBD1A3ED82894A5DC263 700908A3AB700075586F3F3406496A1DBF40121744A9A1C51D3E135CBDBB5BA68D3BABA6 21AAAB308EF3B0287A32AB2E584FECA9A3E00E0A3A7C038C225C51788C3D13232240EADD 63C8FB02A0471517FFC82E8E2AF6AC526F0A3DEE7726821ED3627638AD691FD4B240B9FF 613B72C089D11C22C610F9B9E244EDC11BFEBEB5B1C5E4B4A4362683363B14FCFFD748AD 339C432D31744B43591ED1DAC1721A9FAB9DA2B016070D89914C0EDDA9EFC894440C8B4F 3CE96EC4DEFCC4C57AF0DF67C40575095323A5D73D671D2A716A787DDC6837A6AF455F6E B524888B98EE8E8F48FC9443899D3CC6FCF6EA214CF462BE414302FA0B39C1DB687B5186 EC46781405BED3DD98FA23D796D197E9CA2287D4494E876F8AE61898792E3794AF5B3901 815FBC50E7876043D1F14E61A6F998617EB751C113739F035F4E9DA35DD53DBAAA91056D 1EEC865258540B185DF50A01862EED02EE626051FBAE63DF6D94666EFAF4ECE522CC8066 EBEC91734715C3919932E28169F49981D7316E982C287F716FFA8D61B939F8A47899D57A C3D845FFDB0F21BBF2AFB9980EB0D4E180B4A22A902299FCA5B157AF5DDACDF2C9DD3E58 2AEC6BBC869919860893B9FCFA4881FF8AD0D10066CCA51A0B63D478D1DD7BFDED04DF2F 58186AF02494A6EEE99FB66AF9F3B7C6A9E1BBA52AF2FA10596044F7A9D4B0CB337AD6AC 5BF8CDBB69390F7536B977311C6C9127F26DEE4378A17CC931587F77F14DDEAD5DDEE1E8 B57FCBE1382D9529880BEE3DF9FDDC6A3F9C6056988E5FDD101A54459F6932133871851C 4871EF219571A1FC43A42BF14E8B029D8AD6EF458B59057FD6BA634ABA8D6C11EEF4BCD9 402F47D4739BDDF22948A9D5E7754F621D27565CFC92BEBD62555B12BEE04955923A9E8D 6B0C3D336E8345FBDD40B8E7C9A43DB83A895EEDDE6211EB1360FB016A9DC23F5055839A 9A71775D8A45056735F14F87600916F187A53C323C86CDE455356176FB014584B4A04126 3FA11150B2DEA71B44BB130243973600B3A9204C13304853D33A15CCC111C0F08360DA8A A2C615A72FC79C1B128D04ABA0E92A138CBFB37253EE80A18BC9D92B5845E895A7DC4060 41AB37F3D4827254BAC860D6EDE8C5912D8DAE2F943A4430269FC9F9894024C73C90D77F 0FC81E16F618BF7DFC1AF1CB2EC0972F62B30F5B37747A8AE2C7A2C7C34595B8F1DF513B 973BE2F1ED822FD4BD7D5B07BDDA6006019700257B103BA495F9148012C4CDB2C3180DE0 B395BCACDE2FFFBC1C64DA5D7ED1738B68AE483E5007EF90C9A770D73988849F2D2D6EC7 734422A7D0BD41042988E4F215A81B4D2545A2C84A1CB218825221D3E33D5D5A2DA7E91F 90B275B9F73571286905C58ACE35E0FCAEA9A9BAC32784C8CFF609B09114D6836AE6315E 4943E9AFAE0905E0516603C5CC2C54C364CDF9282DB7BA8DFE921D7B4833C48A8045A60E ADFE47F9E1818BC4F97657007DEEAB9DCA84280E3014EEBF7D4D0D1DBFEDB072B20CC4C2 BDC4414DA5070757F4EB8F65B1DC1D8C934F9BC20F516A9C6295724DCAB93A9CFB0D75CE A6237E7F225DB1CBAA18C679E2C6F0121FC59D090E5DED3306F50DD0F92D5D9FA2003095 CE6C5157C569F3E5FC02D4F3FA115B9B294C74CF95DDED62CF1E5490A6FBC97065247D4E 23D1E39B0EFEC6663C27674AFCEFBEA9E482909EF6B6B8E3AAB9FC169B0DCC8449B50A08 221406F001A4D140579FA9338C675DAD54E854CF359452C07D07EC05F28301D94FCB46DA 0D0F5502DB24BBA0364EFF694A7F4E86FEB6845CD59493BCDE8BBC61A30FA209B890F097 5600D91FD896E6E0DD0626B4BCA3487AE1C577320E0C251AEDCB44910510CE89CCFAAFAA CB88770FA29636576011B67C6FBEA6A310AD45A006100C4473E844ED4DDF69341BDB9FC8 3D37F678B9F7A2BEF245F823186C56AB3667795C79EC85D68B9A34E9779E29889E67DF20 26B22D42C423C1425A678D8868543E96DFF0EA75C3666B0EC85A015B7048F5ADD08EFB1D B674AF6D008808168A8EF8EAA7D43F942043F3508D6AAE60CAC9C9950B81C5ED863B6653 0C98AEBE1942E63CBA37FA6E02DA11AB27F8579BBA5220635D424AE097A88C830B3D42BD 6B7D89F6F40F63B362E5215373F943ECEF08666D86D2D3AF045EDA7F9F796A5522608F6E 3FAD8953F166C11FD0688B127AC306770C934311A4890C48ED4EA8D12D04C5E2FF9B6DE1 5253DFA7627F3600C89884B2B3861B364FEB31805A1D91B95D2DAAE9D16538DDCB94EBC1 23F63ADE7C1B9D48E526EAEC0FFD822160DE068723170F5B753B5C10A0A79CD09ABF1E96 A8811EB377BA65F37ECBC966A054A65FBE686C3BE9FA4573BF86865A5D997FFB690841A1 F273016436C3D76351BAE06BA745BF00F27428B1113B5351567C9B254948D8A91F6927DA 381F993B0F941458CE5F5189091A65B5D90FEF01051919863C47FB4EB11D18CCF8E5C8AB 3E518A0923BF4AA13F83BB3FE88A4C3D680B7FD65D649E0159C6C9151FE7959E77699105 B8E4E1B10C0C5B56C400325D32EB5716BD0FB13AFC7A424222B970A894C7D33BABF63B59 EF13538F526CEA62F5856F1BB23A00D7E65220E5241D7EBCD0F84C44ED3EB468DA011023 4358E69CB5AD8C0B53F2AC1D014358CA2C2A3C901AC5B2850DF73455D690D3944BB641E6 995053A40D4A513425BE0A17D619DF7ED39076E9FF9163282CBABEB14BF7E4A49A5D93C8 69B9F57C9D86AAD074633AA533F5734F2B98B0CFF7ACD4726BB1CB239032FBA59B3D0FEB 3F3C169C667807380CAF379766B5984B4CD3D71975B62EBEFF09056E62917083E35CAFD5 6FEB1C7A89658F46733CDA47E99797EFB6E48332D24C1B9766F92D4D4AC4EF17CF6418BB CD0694C26CD6B5421AFFDC33764719826667B6F88E604F982049D286A35B5EC47E07605C A8D53448C6A436B183BAD32E8138CF289C5D0ECAE1A2818BC3CAFA0B02C9097BDF043F15 8625F6B756D85C81A4B42865A4AF790BE63EB95C72BE08598898E801FABABC845EBBA1B4 4D4ED41CFF1CD460612F8C2B249B1A206656B2CFC3910C57465343DCA6DF0DCDA3F6DE56 8D6AD6F83DDFEE9DE523EC0BC45138BB80B7315D894B27D73C4C1DC582BBA0A8917E2E10 F94369E0A956F61EE11CBB2B45ED6027D448538B36C471D2D3BB6BAF447B60F6023F55A3 24A5C71573438FBF1A7B40A746A73F5E1B51FA3F38DC9A2806BCA0B8B6817B1A265826B3 27D425929BDEAC8136A91329B43EAB1AF325960D105915D185E0522CAEF00A15A2014F6D E29C3093AFF98028F5061818F8783B37FD1881ED44D6516EFBADD5D6B500D5502BFE6A5D 908A07BABD50514A1484901A51AF83C338624298070D04C1DC09D03E565C7D25726E37AC 1D1A9F5DB891126F9944BFA1080C7906A263BA892363087DFCBF6B92D9AF9CA1D7781A99 9DD794B3385C18AD819D9558CEEBC46F9097E9B6CE6A00F1BD43C98730CB80D48937D0D7 36862809C16C794C4435B41DFC392291E699EBE1AA54537375B6FBB27F1230B77A0A05F9 2BFA166CDB8B180036DB3F48E4851A538C628C8D5D9CD556317A0CF0E6C28183E07249E6 D6D47F35F1C3220596EF0CC1F0580ACB2B029B5A5B0C10DAEAD5D3F698CFEC641F16D80C 0225611726C1D8C4482A00038BEC8E0B9EF7263C32DF0F80E01473C41307FD9C10742079 9F2E0486F5C937EBFA48B7B61DBA9094AFF525790B61C3858F76685675BC6ABD1B9E9A8C A17C98CF85E49D6CB5A6B7CEE52D67EC249CC2681F802C06FFC639BF3A0EEF23AE39AF5D C3E77F63D07EC30E4B3E06F74E707DBDE5B6DC0DC1A9DB02ECA2FBA6C87CDF278EA55812 40495E2C138BE9CD3AE2A1A427151A5EE3CDCE28421B137B1427CC48EEE8EC1355B48FB2 86F40371EB9DCAA5E163C65967FFD4FBDF7B358463D00AB081ECE83596C2EA2F3CBBD847 6D6EEFF31FD8A0E3CF4B6362BE42331CC2737891CFA525B1CE62F2FA4B1F2FCBA54D0452 B77579DD1C56DDDD6DFB2DCB816B47FEFE0E84D3A19FEAD6290FBF751BAA095C068334BD 77F0F04DEB6443DA99E84D250849045DBE0ED267F2789B475127E6C57059359EB08AA04D 3FCEE5B1E61EAFD90B19668647CC52FE842FB9D5A58E3E50E4CD7A2EBF1FC9DDF4CA4B0D 29AAAFC8344627C9BC74C49BD24774EB0CC6DA70B3F3BEE134F298528373CA8B96121B31 2C5D02525A1166E8A644D04194DF8E1D9323FE92DAC4833CF0E08C716716069AAC65A421 142B305E97E668A32B397244555BB14653C18384550BB417C05EC9343BE28E62845ECB49 AE6AFD50A5619CD1F5779FE6AE1C2A2C10420F0E9426AF4614FE2E6E925214E0ED5C6133 E9E44ABC962770A4E598E8D4300F9C93CC152C5067FFAE77FE9A171A5E463D1E9E5A332A 564281F49055D0A99F49A20368EA7C75285EF8215FC37FA69A66101EE4E2E32A1A2AA753 8EE3FAE3D4C31F96C34A74677BC9221FB904F777F69D2B85825E09C8BEBC973E4AE85EFD 123507D5D428372188270978D9C7ACEE75DB5D1F1E2988832870B7EE4F5366DE20237EF3 E526DC33E2A4FA186A43325779EE8253D76DD1C4FB007F1A2B8E0272334A5956C488ACB1 1D09C8399B4181B626636F6EFED9A5086BDA64AFA3677A48D13464C2E0813421D96B08F5 F3B7D2CBF5B2875A1C217F4677B026B21A07A8C61140B1A91D552A1947952448D7492460 FCFAB5A22A7E9BFC577ADAFEE42FB8C0EAD717071E54493AA7BFAE960641332AFF9AD94F 9FA05A94FD5CB6014FBC8D274ABD58DE566F621672550D2453ED92AC8E317D6D28F5A443 D211A3A65005F8A18006D2EC7749AC8F57FA4142BDD1D62EB99A2C4A2EA448AD5DECCAD8 7B54EE483B40CE76CE2CC0239B0B50C8AF29E007A10FADC1863D9844B2380052383F333A 29A7168871919497C878D7DDFE5D22667C51FFF6C2926B3D219D3A3C02EDF6A9FAD14E90 90D293156E00F6292F11808EF0E73CA26147998707EA4ABFF7B77A5E29ABACC005EF74DA D402BB1AACE7CDFA12F93421506980C275BACC61B292DD800E07E1D640A187E73A0B682F 0005D5BD5F6E53171C376B1573B9F1FEF247AC3494D828991A9050C2B85870A9C2E08C14 A92632C3553AFE16C771A3FF2DE42949E1AD0665A0BAC07C8B1C9622873C54DCAC6D642C 1F050F2CF566713BC4C09E28AD0E7CC6986CDCF68D5D8DAA0B20B6310E4198A1B95BB262 7B1816093B84234255C361928DB4BC5AC3A67A487C540394E833E3D879B3C96ABD4ECC4C 95FE7718D1D6443C84458B694AD25EF8824F947569C001931C133D999D6DB574698BB17C B86246A3559E4E4EFC079D0BC9FBE3A8668DF9311E7EFFE4316B47C4982168D69331CEFB AB51A1BE03A6C2CCCCAFE7BFA2A836AB5819FC8E18E33C4CA59955247D0EF9AF810141E7 B60D58D38A2A5F4686C1FBCC929A2601EEED2A4A4DE9AC90F726F1D1A16BDCCFF5280A6D 52B626B3D927E606189991FF548FAC99C1DAC6B894B4BAA370678060B1D6CE7D1F74E251 920D7279E493017DFB862ACA5BA417A9A975E4D6736C2DEA7418CC1A07DD3812BBBE56C6 F3CE5DBC16353009E547376D99F03FE9A087C29A1161F2629D00206C219300B1D09F4BF2 AD8475A269466201C57EDB25D8A458E4FF1424FDF09B1879F5AC6512952D56EA719263D6 F8BD77D3B5C04A2D9E27EEF0FF3F42484F667DD1B3E483C45DA8057AF1C3746820D7C663 5C363BCBF2106DC618AA1F46C34E9562F33EE3D392A6072FA236BDFED8D8FFE526694AAD A68AF0ED535F0E1E2CE19ECABC2FC66ACB07E44FDFF7111639117086B1876725BEA99E8B D0CD8055DB154A8A7BE4165118C104A5C1B2629B4C948EF51A68C7A3B5ED70C2AB40F0A7 53B75AF07F4248699B03A7654C366AA3A25121D8590E787FA902D5E29516BAD7C842C649 41EB1350B2BAC0E28946943E0D5C227326D7B1C3939FA481245B19E7959B770DB9355DE2 E5B6FB5F66E273BB9CC91527F87F35E95AAD29D867A0D35E9E6B1BE8F1EAA06FDEF2BF33 E694D4747D525AFFF997EC367C1E1D0B55C2146BBE47581FF99824269E43B795FB02F80F 83B1BB3222C6A48B9651325E4A6274BE9047DABB7FC9F85751DC9239E82CBC5ECA22358C 8EB9DA76B9CBF92894268C49CDE4F67B6299CB46FAF1A8E42FD584BA74C47767613325EC 95CBE6A43BEA5FF97C7C2195E970504893EAC878AAEC0CC2E86CCEC442DB62FA15C4BEBF 35D8AD91711A689415A84DA6AD6D1E2646E363D143FFCE360B3E9D282A84559B1202AFC8 41A603E80631FA5F1914411B13811ECAB8CEF64906B0361F5F558A22026F46FC88A389CD E0B23523E884686C7D4D9FEB4C3D66BC410E2111A73988E73CE96CC26A9ABAF3C860D8F2 658FD13A44F3DA9B5E53E348FA51B64299FCBF16D16E07CFD4C5446614FFAED07FFE9E25 A10696029806CE3E23582A1FFC5B83185A0411E8353BE08D7AC131E2BC7B7A8EA6B36653 82B2C4C217CA8A09ABADE43A7A5249643758B7FD0CEAB8A9AD8E8ADF1A9D13C2E5EAEBE6 D29ED3734EDF200A92E19490CF4E42DFEA28AFEEA7FEBCBEC1645C6A101B51303BAFB113 8D90761074D935F9F553787C1F653FFA3DE1A8808D185F38D57DB5E1B16C1EE5B1385C4F 3C9FAD7CB2460DEAD9DEB549303502AFF17660B9330D162C891F1039B68ED4682BE6BC89 7800F158A24B07539CA9CFC6324D52054527406D915BC0932F1D7A86E2FD1F649386CA6C 6E27C50CB7A63862D606CDFC3ED8C6328A756AFB01865C264FA74B586E5A6D34CA48CC74 24B5EE73BEACE92A3A4D97BFBAE51EDC60643B8FCF024EF05E263C0BF15AC37665BE3428 86F6B507B63463EB2DBBB5B2EC5CA4F227F9D5CB0124BDCE2C0AB3D4358273910E916D43 6FF95985D564BB420489DD1A0919C8100EA03EC5702A9925C68C86B4972C118B04016533 BD9726054B7B563BEBBCD62CCC5A08F133ED0554872DE4188F1F15D52CB5592B1E35A319 C6E5EFBC10CEC89E9DD78884E18FBCC408378351B276FB389136ABAC62515C1F5C3D3755 3E0FF12DC19621DC4E6C148FC4F56F8FE32CDF567DA11F80ABB91D224D4AA7ECDA2A5035 9825F25B2150EE449C101935B44549EB3E6830D551C551E1501D7CE5B3968B770016F605 8F0CD392393DE4576167DF1061732E9F7A42464610BF841387941487AB1BDF04AD40EA13 90A50F076215B6DBA43231647418BDBFD39FB143D43E0B8912F36348FC7A1CA96DEA49AF 416D8A6CE75EA49395667E19CABC2B8D43543A488B130A2D85386518D86987BDF99A26D8 B4EE1E29A4BBB8AD0AD4A27B346FB5F9E8E5F180F0D5748FD98A64715954A3125A749A43 EA2B18CD4DAD93656B8FD9CE27E5EED5BBC369C060BBB43B4038ACFEAE8D437A354CC373 66B2715885DDE1BE0F5DCF688E5AFE08E163264DAC1BCCFE9666B01970F2F16B47772ECF 751055380EF0002FC3877CD3F89FB0D9E018A6541FB71AA3F6CE602C4DE2920386F01185 E2CF256CD8F8EB24F460270B6CB8982C46CA5E58566ACF504EED68FEB0255B6D58B33687 551FACECF40487D58D4DB520A1BF372DD3B66710DF6224E9B6D2EC15B31EB4E41A6CFD53 42E3FF218807059B0EC60B96CA5F9F4CEBDB3ADA79C16624824F479F5FFF981B0E109BCF 8C15D2254FF75BCDBDD4AFFB96CEA4968C38611FC2204054673FA7AF01DADAF779AE58E6 8600044320439E79D45D56352B704E5F12E56ED1788E0817DB76B80F134C9752F0082CC1 D4205003C0B2E73BD54138B10E0A16CB57A0ECBD17DED50FCDF7BDD848576E87868A911C C5F0B1C36BFDDCE813366DED05732C46C9DADA44D71E94C3C4A5030EF7061684CA509C70 8A242B8A39D649530F379E81A1F5B4456A452038BE180E35889AB052D14823392AEE2379 FF3564A86A2F50AFF40962F665F3C005CFF6992FB85040E6601D20135D7227F05892F344 2578C821EE1F00E68E0475C0266FE10458A18634B226AF224A80FA07A1E3A29FF6AD2838 CCCCEE4E5E9035220AE9F53C02DCA89F00418FDF632653C5C64BEED2209ED102489720BB D735B06159B60BB162997140BB6AA99CD063B94A7DE5098A8CEE9A1AC5ECCB0E0D12D399 27FF2FF621919638D4205E39DEED766108D63938FAB0DB2B2C9D1BDFCB14517C7E98369A 7BD3E31ACCCCEAFB954D92A22209C9E825CB38C9B5A529823B0A85BAC2605864B022BE5B B8DAA6312E8DEFE04593F4E8D0284DBBA42CDFB7C189F280FF48B79891EEF4FCF59A413B 7CFAA37EF7A154DF78808E4AB8CDA33FC51F6E389227BA952469AD2D7BAC328342467482 FE311D122B9AFE8A16E9B6F5551CBEE36A3EADD5FE7A524A556F3D7AB3217FD8C574DF32 083E0D1EA61A8E01E3BE1392BD2955486E289C3E1727FE71C50D1B50E4B7D945C5555851 AFE225EAC181B0EA541AF40AE45309B4BE2DE1BC9B36E0B7849D0844330F3850572B3869 FCA1BFDA818FFE1CB7095423D611D85890BDAC15318028FE9F3033D1DCAD9381B9237247 D65829AB81AFB878C7EF54CBB6CA38526AFFF404662434D7714FD8A5D0800C8FCDF69A5B A6938079F41D08E80746259C7D7D24E149E2C55424223CCC1AB2008545CB8C5B51CEB8FE DAC374E94A7836030F536F34A55352ED405D9C31AC2F82FF072B9B885968D534C9792F45 1BC48E942D28CFF06246597246776530F72392C98D29CCDDBD9063EC24D559437B844430 0D2D742E08C0126F4116198C72AD9D95E83A534A6D353FE873038825687C3AB0281600CD FB2558D70450E14684F610E144A7568C471334FBEDE0CBFE913297A657321182AFD4045B D5D205551C6F9B904781B32529C2AB0FE1DEE6269CF6009203027C9425262CA5AF2EB250 493B9C1018F2907DCC656816D57FE4C987CBE7F7F1BF0EAF8AA40E23B456093B3DA29C21 5CC7F911ABD9ED34866EAEA9E1E7998C4126CB3B44F7A8075C37640E0AABFF1B9B0EF003 96A9CA8999EFEC2FDE533584B5F49BB4DB1E121B581E12F2392E7ABBCEB56B35E8D0E507 980457C24100377B95668B167C6E5388760883BB173A6993A88104A3E08747F1B75F553E 65E448C8188A3942182FEF0593BDFDAD67691E125012714A0B4A61F5E918980E1A167A32 D7CC3D46435CF3F2A84458F309661A2095792F79D1CA6378DF864A308E162F1D8B35CA85 98045B55B19BFB7D18C05B0216F5A7B75167E7866537F3F8F6BFCEC95B946B4AB1B0B015 E45ACFBA6F4E24FFBD0FC639591A95337ACD84FCA6A164857EAFFF41D00138A582E321A1 D6205B3E73E2A55882FD873FDAD0F9D205D47F75055FA3863E5210EF6A56F8D12397E3BD EDBBF54C8A328E62E03BE58D301B285E398A7AC55F6E08493099CCF7A70E79CA81E275BC 86805E22DC3126C98916CC09B06CCCEEC5B66469CCB92AA21B71A49A2596076818B17ADB 301590C5CA8635CFB881832F8621E6C15EF5D59F20F75098FBC0A7E79690CB5CB3F746FD D8B0A8B92AC145E9303ACF6FC91820119325FF5D8BEDA62446311A73D89739E628B907DD AD9B8CB60E076AC1092DE241A56495D0C1A5EBC43888BB8DD087BD6CDF38E1DE93630923 CD7F57AF1604A42B70D2E073935E66025F44ABB3E8B620E065810AE1D2415D7A58175D06 B7CB4C211499F9F9EC43B92C3E93DCDF03699D731DD288C1651A62A25AA9BAEB1B79AC89 974C233D6ABEE67B4729A746A700348845A42953CD858ED53F385288ED83EC2B54C2F416 3D4E2E5011485D9293567429D4BA52F1F4CCCD80BA8B59B501C629AE567F24C3AAFEAA0B 4612ECA7694CBDFF876C3B9B5391D6EC38DD10166C3CF3CFEB02DAF1EDFB661899D3EBC2 556EAD791F18381618D14F7B7B115A35DC0E8E282B8D1B4C9E68B09E9C8589837660444C 89E477BA7BD0CDB39EA9FADEA33A9990458A06660A30EDB737BD11627B68DF9445A34D4E 4993BA9E24CEDF0FD6955CECA5C9C79A340AB31096FCE9FFD84B2F49C8D504F55F413860 7BC83217782E1A269E662DE79C67506F14AF71EF7302282256C1894AFA5DEADE51BF4222 F2D0F1F4FC1EA7E128D7645E07941187D5CF65EC19667F2D204222C6958BF58525124ECC 17C02EFB44881DBFC89A8D5D73A05295B71AD83BD9C54ACF1FF0C542D13DD9CD6957078B FC5F8A0BA938AB3466F44919BD38C5A0B14E899208598792AC43F532D41C6B8C4393DBE4 472B5339C02B620F6D49C0B0BA93BEAC6373539881206C1F8E5A0F4241D0116737C4EE62 575A47D79F1DE2569516D24FCEE9B7829CD545FE71D3DAE6FCE4BD780437E597F5849135 D69B7E51E2D6A83FD3A8E67FDB1825D2A56E4BD7D6ABC291D052997EEDFF0DD618211607 1D1CE4B60708315358C989BDE51C97FF5F2B2141893287F822D6AE440A811FEB93E0E600 AF51552FE111FA4AB014A89EF562FA552A8CFA6E5CFBE95D81B7E50C04BE883DA4E460E0 83438DF33E15F8D759FCB651B18357B40094736416124FF1D59B4B7BE4940CC5875676CA EE4A30F059BC59596E693595CC889B2627B3392C5EB267863CB753908FEF7712BA9ADC4B E47B18FE8807AFF106669E8EED7E0DC5AEB3DA3FFD8AD8D8B841626B800B5B82292D8A56 D5E9FA394EB1686C441CE523407401BB4044C4C5BC448888BF122AC6D703AD6333EABC52 C999312CB3E16FE4FF2FC8859D8662CCD6E35DA8B02BD22E776020C3BDD774E9A24EB72F 7231F1B9B3A096E4A47AF15B4AAE20946F8358BCAB1D5E3FF566D361508DE82D46038A28 BC879A9E75016FE30A8AFBCB1F2ABDECB4ABA14CAA2323A5DA6C57A712EC6CAFB1FEDF0C 235E50B30127F62CF88E77362F6CCA0810E29B35EE5B7BB29920BAF6FFAB5EB3FF5377CD A310FBD9AF79001E8583748164CD7C4138DCBA043B67CA3993C385B9F054585517E4F73C C5F63F46F78235501F636BA4BB41BD0CA9BCEF79F0CFBFA446E09EF8C6B915AD718CA59D B97A78CEA2195C968842C94B36EBA1F3DADE4872E3FD7542D6E477EE9343CE5F801BAE59 CBE5A2F66DA2177389308B526493A523A9496C7C928F021542A1D6676CB3207979AFD6CE 2E4B37B3E3621312782607BE9F9598D470564F6C3E502FA2067C1DB36C0928D7491F5119 72EA2A488D3A4A0BAAAFC021FC89DEBE05D7E992122A5887ABD7C88AAF0B12E3A0E6457D E7BDDDAE5C4449AD3D0EBC9B0BA6C5A72C2EF5048238A8595B33F570FE36F1C9A3ADC38A 1EC604428BECD165520FE81172BBD2DC01EE2A923F88DF8A6CD992DE1875FE3C122B42A8 2F4CD38D5336DE782586385878CEF7124AF8454C75E92B4AA8786F40B0414497A099F755 F1BA0AB892066BBE83E472880AD336EA7012100B03D06E9BC9904651AA7F93B107EFF61F 6A2F7CA20240BF1D3E83B3256398CBECC74F8882E40B3E10C0535ED23A8214E19464082A DDF3F590F9CBB75F06820A1DAF1DBBA19CA4D57B7CDB841980BE2E879E8D83E74FBB3EF9 7D644DFCA51DAD4F342534160CF07F8822082DF31D8A6282711D849DA3F583B32ACB48E3 0C130028571B9565E61BBF8253E97435F60AC0C91934C5A3FFECA5155B25455D59C18CF4 66AE7A467EB5799BF2488B1568340F368267625F1ACB7FA34A8E582B0528FDFF256154C2 F4F2D0F61A03D13A58E01548646D6B4659B4613E83476159E8E597546BD1F7902FD0DFB1 71390A36A8389E25388391BAE75567201CD1A6225F774AF5E3132222EB969BCE588E1E18 15BC60934C8E132627D342B1F7D780F9B5DC657A975387202EE08E957F3D123B4C115F71 CA9CD0A5ED37C7626C8596E9A4DA7FF5A114A85E545F89C3694F3FB28A5224CA6F930538 9B76D686F13C370887F75F88F50C98974857520DD8806736D034C188403234F1CEC012A1 17F9DC0B03346D88401DFEA09A28944CBDF75E79EC6B26F204CD6D4F7CF02FB3066E7085 BC35AD0CF7CF47AF38524C05B13E51A8BECD2B4EB4E9AA3A7FBF08A1E71A61B2ABBBB10B 714A0E46FFDF3FFEE96BAE962C10B8FD824E700E3ED94FBB1E03AECF77CDF572F623ABF6 9D1AF511F65408CCCF16BFB2F1A0895D5CF069A78A3ABF523D4053F8A4F6DA0F3C6247A4 5F2F6F21C964B50EF4615BF41283B6C655E55397A6FBC23249D306151A4E5F57C26AB256 345B45B3D81AB1AA64C80F09C6000ADE9948C42E03356C0377EE74E17281985B8ACBC958 EB9289159091E36937DF725063C434D30DADEDC3007066C7302D0B12F8CCCDBAFC57BB30 261918964E42F08D1345D4018BB1E84E31B0F57210033C0EF479D1ED0AD35CB7178B173C 6AF59A4824FE5FAA88AA847FF999B3152F7C12F7258F7C5DA155B8BC0F166D9B6AD20188 3154BFCC9E3B9B267FF8831BFB906C6CBA7D05842E95129D60B562678A322B94BC988601 E8E32A6C507F02005BB1CB8B220A6903B4F621ECA9FA513FA4ABA25D107A39ADD5D32593 5D8875831F02E4556E6EF278C01E8A7FFFFCD1D5EB4689A2DD86D291F473120B984218F7 DBCFD434EAB3EF19D1A67F4EE9D239FBC0BAE239D0C634D29950EEB6FC06F0481A10B225 7B80E1F0395CCE4C4291A54A5154FF1B0896D2E0CAF112D0E534F014FCD73082FE9E8A67 ED23FDD4F7C37651FDBEDF999D44D9BD7D57EF6038598BCE94ACC2B6C0BCE60433F834E3 524E3FA6028B6D5DE7631B10A2BB1C77BAEE351FC7373C175D3878502C2DC5D40596ED3D 8940052DCDC8EBE7F1853D85B06AF9114FD739E558F0FCA26F3817A990605F9C9807F900 A18C71248300BCFD22D7857C390431356FA4BF993357647D9A094763D668B7908CA93E2E EAB15E34E48B1EAF8082C6FCBA7DA5E9848B33BC59D6B50C9CB5108F3C356A45A854338D 81881FC425875EC59D361ED95CE99FD7A279A807671C8141A000A5419E8B9549F3617114 6077CAF18A152CD041F94E113DEE2932F1AD09D55359B7B39F4771F15521DE58C311D143 AFA24A92D36037968DED5FA71402B34442F9820F31D1C608124C2B50EED276FD06CB04B2 3D0579FAC4ACD7C674EC5E6527AA352E38B35B14FD647E645CBE09C5D3EBC76D35D02820 C91A1E422057E99A86EFC9845EBD5735B8F61A957B44C33F7CA9502E08F39E24111E73DD 7C5BF59212BE06698913B89C221944A9E539B1E79038B3E2D2FC40DC4D9115256D8BEED0 343FFE190D6242A3054711C86A20E0C4DFE2C270375DBD1009A6ED640D505F25F475E0A4 DBC0D9840A68F2E657C1AD8AAD7A260AD74DFBDB32B2C6CCA9A49361755DFBC09935041C BC531A5924CF763C29DBE8F169BBE77A261B1DFBF1504A04CE7C3EFBC0E36DB1CD256AB7 F40C272E2C3C217779A2D45E1A33E504A32183552ECB71EB562040C03D276A91590A286D 2A90E7A292B21AC7FC70082F18903E2B3246A66D95C47F7FA0099524F38018566485DDE1 4FBB810C07BBBC487546F0C2BB295D1BEC35D797B0A6AE0616ED8465BBF239A46FEFE3F2 E20F85E3E383C16D6F97044B6E4E80DB26953D609F8AE0FDDC92A41FF2A7EA7744585B51 27F7D1D756487DF4D75289DC3FB822A16E1A8063D5BD6B2D7201DBF78BF4A34FD17D8133 F8662DD9704ABE347C405D6111474E69C5F22552E4C6EBAB4A6537B46FA2EFADB55485BE A4359C8BE0B2A696BB946E89A5AB3EC81AB9B584E6EC841BCF4192EF82EFCEA357C90039 3AD2705B9BEBC894E42369F7CDB749E1A174EE4CB77454CE86BAB1B631899C547321C9EE 0499149D87F3FF59D13335D54177268569DE1AD675BCDB9281C21ADADDF54B32E62B3EA1 2FC565A670778959ACB4C4A36B6FEB86B174D3FFB0B2617B2A84EA37BA5B4DAE6B7F1DA7 36C01E446799F135BD5573B086D61B5D902097E93C9460E586BC8C5FB863507F7938B02D 90EE19C51E00DEFF3764A3483F52777644D3F20C0B99A8807F25FD6080373B09C68B45A7 BEA9F0731DE751BDF4147C690A9E767DB679A8F51849D094DC1E8209EF159084231610F4 187ED2875D1E93A2C977C3F1C86614B60F81B31CFCF2086E91C3A09456F376DF76F6F4C5 6F6D96CA852C7B749255150C5C16453A84B9FADBBF40273B18FF8E61F309B649BE8C8BE3 75F739C6CABCC9FF39CFAB9997E77507A7EE5D521C769F6A9A03472C51AF83D6682700F3 9D1114A04992A23768D8547D668A9C1302DFE2A2011E3B0A101ECA1A41A79C2AD80DA863 CBC5D77DB3FDA136ABFA30603EFB15F99F848F18B2B55D3038E7E7F6B691350D3C0D6766 4D0849BFE0CE481B1B732326AB02CE44BB2C15122A57D42264349E72BD47BE006DACE8F2 A0ADAC696138227F9ECFFABC0466C2EB581211CC0A24061CDB43FBF37A4E8BA1434A35E0 2AF6B5914D493F64328F8590CDCD38169368F805D5B64AC0F4B996ADA8879157AA0EE3EA 605553CAEFB6D31B01F66016C64F7188556D66F185A29164AAB1ADFC1FFE71934CEC127B 147F36AF98AA9A7877A7188EE0160EE26705D1AD9B5F86D8B6BEE71C1BA240FC2A903D65 0C3C69CCCDDF00222CB01141C0F03958D9BD5524D8C31D4554073E2DB0169849487244D2 2A28987A82DDAA0CD060C8A8740F1A11509152B4602A6D0DDC4456849FE5E402F9ED88E1 DDF8E5AD854B5FC77575AD955C95BD033D69F4A2D2EA6B6EF587EB16ED3E0F52E7578FC7 F22324AFB86353B1EA4C51179440F2CC64A37A92BDE6A88B24104CB8EC78C660A40E43E0 27E0EB69D813A3C29C9C3614E6408532FA474CF9FC5AD498F8335DF4A04BAD633110405E EE6A5E40D6BD7E23337B1B623735BC3130720DFD1FD1A86C4A90145EE483728278C48E5A CCC333FBE140DDBE0A28168D6B2BDB902491E0340DC052C28FEBB140B85BF1FC4DC35582 1752E935381556DFE0A1439A0BC810F9527331CA35508E3D0A451B3D285D37A25F1F949B 9C9ED1BEF8289E5AA1A3BA045CA7CB647F1C1A528D85938E04ACB1E7F08F5ED3D18C9E86 7AB607E8BACF757C98BB71878979DE3862927977A0CE431174DF24872B21988D6AD35B07 42C01ECC82FD805CBF22BA02CF596876EE1E135254A8BB6DAEEBB2BFF9911EFD7C3A25B8 55B95EDAAB6F25A31BB29BDF2B0FC3E0F4479DD96BEF601E4DF77A459B73B69A9C55A87C D63851038A7ABCC475BBA0365C4CEF17A742D1371131397AA139032620E16D89B3BB7A1F 7B018BDC6EC29A8FC02D6C6E943EC1B1A718DB6AC51BD7C5FDCBF2BF792CF9ADCE89D130 DC5C200FE8625BB13A02F45E06A53B7D186838EEC83906E8298CF83CF5A28EBA36D67F56 64EC006E350266F7D2C81ED295F572CAA52FCBCA9B605E421DF4E9393D1E775838992B7F 63BA394188312C75E64F9BF0217E6E31905945D27BACA0693E0660563A0BE2868E22A604 C901BD00FD8E9088C4255B2583EEC2417AF39CBDB672845EF9BE24901D270059E7EF3C99 0BDCED89538A8CCFA5A0BEBBEB671720576DD349566E591ED760FBFFEAD66148F05D37E2 0833FDE02A4E85F2CE08B0E03DCEF68D454E135F8F07BF93724E0B7E0FE769A0AAC5B513 F4A763347B10B50B88792E1CB3E6E948B75A8835DBCF188436153A2C2B44CB18D8996FEA 75324C8973D1F0E4A3942E2A05E43B3C4AA46EF7B54039542193CF76CAF775DFB15B31F0 41AD173F8821FDDBD7275618B37F2693A29C9A990B7BDE96FC532242929F81B1B61025CA 717236C5D41ABD690EC853317D21B20C2CD6E9701202305CC34F5855934E03F1F58A0D32 D73602B07ABB1904173E09D799769D7127B665537FD6FCBE10E725CF814B83475FB8E443 027F490BB8488157A4208D031ED3992E2E0EE89C5E19AE11B16E95452F86B04C3E233A13 02B300C9A21E2D920B49DB479AD034860B77C8C1279EF314FB4073B6077625270113848F BFA4C6D1CC72D3DD8DAB5298D5A5BAF7E832FB36B13875D241286EB56495FA62909539F8 9D043095F5B32E10F59B8204F0C598FCD78FBAE872D833662FE913E595E3A2073A41CB74 5AF21AF5790DFC9D3CB011FEEC385B5DCED039630C8BEDF0790C235CF0174F3DF205DFC9 A621B1A32351499845F888DCA445879AF5871EDD1572FB6B07B52A583A288434502D0333 FF418B95580F4DE9B2F5BA2906F074AC91F566E5E394AA7695A161D01DEC146BFDE0448D E6DD22D7A3C0BE7D02A29EBE15AD1F302299D673379CA3C2E500C573B8F81E0ADE5F59CB BB8E0B5EDFFE4797C763D4FF7CE0117EE17E80CAC2A3EE7840C03867DC19B51885FC6ACB FC0EC204489CD1A6ECACA8112FC1603C254E40049812D1BA5C561C1224BA56B97FD66DFF C43D96FDD510AC6DF46A9C7AB22FDD5E9318C4A5F598E34A3E60989577333E2CF7AF6129 FAEF2704C1C3B997691E484675D62AFCD81F86A6EF5FA4DAE7D4F690BDA5E35D0C3EAB49 A377A2A0B6019DDDD8E293738FA7503120A91AE095F613B3F925BB4D433A67090AD6AA88 37979DC1DBE9FD46CAB54F1D9AB5B9E20CEB07AA93346801BF8EE52977FE36EB1CC51587 FE57ADAB168CF8A7B95665F65FEC3F3EA5920401402D8D22A3D4000DDCB5D06C5A901430 865872360B37C1277EA4C31B32C16C9EDCC6162049204A9A028943915A7753F72452ABB9 901712C494B0E175E27B99F6F34A232A826ABDA15D82D4FD0AD88BA50545A5D9A4E3A90F 51987EBFFF48CC52D8E7FBF1121DEDE46BCC71F7F3941EE02897013189FD60D9F41C2F3D 86A0C693DACAA72D68404118DBE5524D07B1D2EFFA1F54EF0D0205FDECE28BB1080F2112 AD17E04A000C581BDBA02571C412DBC9BDF10FBFDE1CB328239362BB008ED70FE062B84C E93030327374F47D62D4740DFD23B3F1FBAEEC619ED18446690E0339D2BCCDCFE3DA5D5A 215224657F8CB4587553B7344A4CCA78DF1D955679F3C308317D8EC48269D5E1A9917E0C 46BD6D7284BA185DEC43E31CE9B148CF708C722AB59CE7429617978F678E7B42B6DAFE8D CA1690208AF9541B8EF5C8057A459A6D6BB3F0410DD1DAAE469A71B7A416CACE53E775AD CA8787E88CEE3F57834B13D46A5DC1215DDFF7668A9CEC79FBBA1964F794F71D7BC2567B 10AAA3EFBC22781C66B3C89B7973748CC35978F844A5EE16CDD95BD4AF3C6C63C79577A1 20B893398A583BDEFC646E917250AFE307E1FB053C3A8EFB26CD4F65D58DAE816549C502 DCEFE24A4DDED6ABC44FDFBEA9A92B2F78F20710997E683F8D9BDB7C603A9204CD90E932 7ADF5B551419354EF67AFF7225026D2703874F841A034FBCB33267D8794C1C1BB9B26F16 04BBCEE30D6D2BA30AB3F8E03E0DB4D57190A570686C420FA4775B5F8D984C4C7505DF4D 309ED3BF16BB32B62241928BB3D978E10CEEC6AA72A00F786AC72F6ADC5E1BF1A234B6E2 06FD0F6DB21BBB5D0D800BC43197CEBAE8AF770BBFAD4E41488AE5A8283EBD2E58BB4BC4 5DBAE530D05418381BB610F5AD1AC375681618A7913CEFDB93815EAD3006729FD89DF4B2 39E5DE1DCCB4BEC942EDBFCCC34C46704F5B31BEECC45558BD2E2DF554E6130112161BDA 86C779B47D9E79EE1A6C41A722F1C8710C5470F02B98B6A102A962E456827E7A8E9C2527 5F9EF9B0D3420A3CF1F96B798CE32F47C076A1973AA532ED91B44B6627D5ECDB94E488CC A0E54247BD99B1035769E7DCBC91BA655EBC0576E42738B7BAF5F7A19EFFFB78E0DD567B 51C9064ACCF00AA9D6AA5F8EE73AC3FDDC1F501DC67D9257629C767B9AE582A1BBEE8C0C 1B4BA4D5830FDC6C3A3D164EC1B30B8EA721ECDE61AECAF5DEDE7CE02F336A22E302D711 AC6B83152A1B41C67A5D3EF767153F5FB882D0448B39B8507ECEEA86CE74EAACC8AC3E78 E20FB23FD92C81D2EBD9014530F0AEED1595039D94AD48CCA8BE1C77233A9AC19CAF5A45 CE5E96C5B2A962E8DC39339A2B10975C18C5B6162226221AD8BB4307F64E2B2C4F01FDF3 1A6DC4966C9D6D2E3D5E92F0D21DF7779E35404C97B632DFF66716FBF8993294CA6B09BA 8F7F840DAC99DF3D75413A0F417416C7FEC264D6CC58355B1290692666A47E47F0BA3CFF 5DBC8EE2F4FA068D8059C1CF153C65BAEEC4F8196600B9D5C09DA14C8D5F87D88FC7DFEF B797D33E292D4A6201AC0DFA4B50285805501F3AF1E2A48C3493FE2DB06589B0C045B0BE 5A2C5601F2F4644E6FBA9263BAEC6008760AD7833187540BDE0DA3EC762393EA778DF052 BB978B708C7A2DAC5D62B2B4BC6EDA8DE77E548366C34411463BF5DACFAB701D0F64E937 F5188E46151F8D47932243856F3727904404BD99EFC5F0AC5DD895CFD4067B7F338E2DF2 BA69A84D26FCA6DA0ADF101669B9B502DA75D202F863D2AB8F821937F180352211F24835 707B5D821DD71A74E4B9562370F2C61A228FA42F12983E32C15B13AF9F2D59CFE9FFE1D2 4412F40E1BC6D90E8D943DFB8D5A36EFBDC7836025D6193A8B7AFDBA1EC3455F2EC95A6C BCADD64C7D41322C98479EFF511BD4BD70C06EAED0DEFFA2790649282EDCC5F3ECFBB70E 7D62E1184DF3A46B154DD1AED7BA74CA7841DE08B4DB92DCF4F1C2EA54738F2BBD8A7B70 0EC21D05AC8650A7F1802EF604A9DE97E8BCA273D26D97972ED752E3E9CA7D3FC11AF401 D01398DEF5206AA94D0A79DE65F02C3E9A02C2DEAA900017DB7C0AD39F93BC2EB27F2E64 3BF0FA8AE458C73B62B7709AB58D8AF25511B5C3FFDC5F45C4DF09400AB5E69054AB6BAE 57D427BFC6A6A65DCAC262E99797304D660B672E72BF8BEC5FCFD074A5D1E949634D1DDD 3399A80D693E3494DE56E1D0CCDD217FC6C6A2F4D6ECB7E3636E438ACD4E6B7166B27342 2298824C5C547423EEBAA5FAFF2FF810A73C2BCC057F7FA1E96F21D665D377F727CA2FB8 93307ADB216DB69824B72312242DE1105C4D7B048476E64C71F4C4659F084916660CD035 85B922CB2EB7FE0E940A7A122313A85E0AAAA7A2699B4D1227D8A2F8F59B8FA5F6CFB63B 7ED2F9AAEFB6A71D186815A0CE5816A787E25288A9CCBCFA886423F776DE6C09B17858FF CDBB8A52CD54BDDA98CE2BBE25849A2B4B113B6B7044431419512A00CBC8E5703E5A4A1F 954BABB0CA465884524BD70CE67D6FC9E2BD7E0615DF712866788A17AF26D842CEDC9EEB B0A3061963958B9140BE41E74B7893265FAA57FE53140658DC931F0B897D0E857AE3A337 F04D884ABE8D8E1DF1632DCFC2BB65E4BB2791B215957D5EDAD04A4D1F4372414D26CD68 3CD89B893EF0CA895C2D36FF87A1CFB2E9F1A628CD59432046022B3E44BF2B5D5DE76F51 5165FC2EBB07FBB23F262C07066D215DC73EDF780FFBC54502E57C69DDFC77D9896D3824 D4749482FDBDEB40058FBF293BBEDC8C7AAFACCBEB160334D29AA7F61F34B929F020F8FF 17CE610B0E0D1823DF605B2E145C9E78AF8396E4AFB267C7679ACB0B7BCA258F7AEFBDA5 E49F3C3A17F0290F9DC6C5F51F193E2DB779CF8081C733BA0D7FFBB9EA3A2FE3ABFB4782 B2510CA124ADFE0BFBA82C46A0BFC430C2CFBFE41DC3DFC070FA9DB38F0D33982127C8CF 74AF1001B096849C8A518B6CA05445858EF78DE8B3B6F3019CEC8E10775EF9842DCB56AF 982AB270C89644AA55B486BCD8616B440105FA6C34298422C994EF6C30C1574ADEBC0F43 85029231FF5FA84AAEFAD31442120059A7A1D24BB44D14844A039F366ABCA742A6279402 7B53DD4431B167F07AC0EFC75ED8545431371D5FEEF2E51649D1AC862FD5E8C18ED86FC9 9639B861D2B502A2B5F75062891ACAD88D39729CE2CB515DF3C49413A974476A515E3F15 E071A6A82D5A51036FABDCFF62659D0B54DC1B9E68945E87A4CFC0E4D285D23BD9583126 4D2B4E4515A7B34F83A077F848306AD71CDB2B5E6F701DF84AC82CE1096B987E2DA09727 CBD0DACE976AB94EE6B133C09B787C80F275DA36605CF5955FC706A332E3140B43AF9C02 9C23C489C5C15F77F076C6A21DF7B91E9249E93854406CDCF2EAA68DEA68BABDF5AFB702 CD9457BC4FDEC0251834A5FE1EBC40D1C8F21C3C56B2558E1EBA3AFD3E0B53AC7793E078 73F8A219C6057DBF6BC066367D953F44EBCE2704D2258344AD65CA865CAC50085E5E321F B66E4404028E313876B65E5CCE58DDECD17DE76874030B63B267639147EBDA692745AE09 775C4CC4C0B44469A01BA55B87913D834952541CC527D6D24238A5CAA83CDEAC1D7B5449 7B6F9F57E0AEBCC7EE2DF0CECCFFC7FDB46DE41FA6E6D41AEC58E9A2CF359F9762ADC653 5C52FE93E9FFE3225887009B596AC2B29336E0EEFF29738D4181D339F0FBEF72D29C750D FE1318CA42C5393D639E7650AB689225BCE2072C88526B9AF5B970CAAB8331D89B888345 BC5E839314B671E70CD895F56D945E8584A7A956EF105BCEC436117D4BDB3791A741B7BB 5B2F0033241EC02B40B75BBAA4C99D5F48FB370569C6E42B8747476E405B9D683D2FAADC 7C4A02FCB91C654F47C80AFFEE61D2310619E72C36695090BBBBFB5E0B7169B96BDBC9EC 4E8AD00B36B4FBB0B849CC04675277733D2FEF6A6EE9C83BE4900D02B95B516DD10A53FF 4431B3BE8C68AE823BA121DBC6C22470BEAE5AF5441CA8208D3DBBC3C444704E7644F8C6 11B0890325648B2EC17FBAE41012E7D49566E5016D94336D4C701DE2805AA001E79C9032 C64838049D8D065A171C11F06BE58A478B9299B3A517C73CE84EF38D07F291EDE3535CB8 D769308C2252C63839CCAC3BC9E8A24E871D90398F3187E3557E40A24FB1C61FCA55BB70 5EC3B1ADE33F0C6340338B197654B373EF588D43E710869321FCCE8A00596981C49B185C DA92F64E0A65CD32D9448491EEEF78E4F410806EF4D6DC5F7804E99B87E640CFC46B6975 AD18A05C470D233D23A20B4F85E8E008301D9763C4CB53A6CB6F380A439DDF64E4F69367 446A0B57A0E98A6ADD0CF0CAEEC82BDEA2D130AA246EA0E4FA2E8DBB4459D5FFDFD7798F 842CA8BC7458DDAE4C28FF65568617C25E0CE82CE644B3F6445C7408E257FA1791199F5E 711023E5BC7E5AB961E867B06B83418954EF9A59EAC6566D572B4E97B5C6750A49636929 562C6E0E2737F5B9BC06EBEF9FE62D9CF4FA509A42D192482B878757B319F886FA9EEF7A 563DE61A0BABBD76B9A9FC2009A9049FC6662C32434B6C8F4E410C2F5A146EB951D25138 47D03A64A453B748A14D2A2FC9AE56A9585F1E6725ECFAAB26E99418F8F2F944AFFF32D8 AFED5E292F40728B8804D91737AA9CDC05485F9F7031841B12F431355EA522C674101B83 09CF71D8D27477286DC05428F7E8443EC7E4471CF97ABB18753524A79A1B331CAB1E3FE3 6D19BFE3724777670FA07CAA0A501E1B5524E62C15D0B888414300EAB0DEA137D43A0B70 FB6563163E0AE68D160B96B4A71817DCBD24BDD8FAD76ED2ACF5E0CE1DBB5AD9A1AD4B98 997987FBB15346F93053314D53CF4BA6A9FC6B3EEC4E5DE20393D00A6D69FD55B98E3045 C27469B46C39C40B0F5BF53DC1142AF67212F469FE7F7334A39CF19443C1243FAF6B05AD 1FDC50457F06D14F119EC724269EAC946793DA2CFF0C1AE736320C5F01B51F2780277D4F A77680C81BCB7FA34A8F4F63F07CC619DB4BA4AE94420E532E6D06558D8B0D9299DF88E5 479F1C82178C7FDB90830CEAB719A0EC4DA5E66DE2D4B97F11113E0DDA557353222E6329 8F21D925AEE6FAF6121AD7F2E7F805F88901E53E353152729A737C197937EF857257BC70 0890EABC66A8DDD6F4636DF744612B2E744BCA5D376D2CE87993132742B66FEA1AA5A4D1 0A5DB79DC3EC04D88B5B5CCC988AD647B7719AFF1F2FDC55B7DD113655F19E6D47D2CFD7 B2BDF4FD564A6798D3696B5BAD5F7A3E8609B9D9D0DDC4F32F2798052ECF1EF3793B16C1 F489004AB008CA729064EA7193D2AAFFA934AC2DE6CB00FFC86A54B11426A97A5E161899 4DD7FD85144308CC4C376272E86849BDB4351A9CB9BAC62C53FF3D06580CD2CAC229FDAC CF8BABD15E1D7D81A2388597FCF2508AF5F8D189B5E5A86441E73002DCE94CF0DD953575 470ED6D6AD57F62FAB4EEA0EE65C5C2FFB9FCFD5F850DEF261314A155A18AAD1B47EAB24 FB7C0408B1C3DC80C6FF2D6CAA3348BF792803DDBD9258C694FA9A4FEB1D3BE1E22562D9 46D3BF713B8ECC1532BACC2ACA978761621A122252F5CF0A658C06EFFD96B39B7EAA7C0C E691FFE170A91871B6DED3BAB734E733ADC503B5AF97D595247FA80B81AF8ED77F99B192 0731917779642446DA30FC7DD5A5661F9268302D2B812D750A3F144C89038A6F573B0C62 EC227C3C5970D8EA34781CF49E56E1ADF0743CE23940279CCDD27AFB7BB7B740F579D9FA B7BF912D52F35DFAA22B7D182C022E2FAB7BD0D90F7B6A03D0D6EBA225C70E07CC00F2A4 599DC63A9218C17AB08927C0AFE57C6D3F0E7E2240A8E0C3CC6CD9854BE51B7F69040BB4 ADEF206D2110DD52D5746D0085D583E67DF440125C26EB27BB8EC054A2AFEAAAB3139B53 653E4C82D085D35BE137B6E30FA4C81EB3F968B12B2F4DB0AC653BB3E13BCBD9994C47DD 99727A7BB5908BFAACCA7EDEC566AB58DEE6B4CA521699CB6C3C7460440A522145347A0B 9B572D96702B497B8F9C3EE612B3445781F3FA7AAC78DA64950EFAF975623382BB6FF724 3B1078C354E6F4CFE12BB8F374100D8E9033460B5911D4A18BAEE611272EB961EDABF97F F350744757DA2435292D03C54CBA103EB72626EC2680077B5DA99E248BC7581F791F157D 0F0A359070827288F6961A8B42F98C948AAEE02CA29166EBED6F41CC2B14274CC8CBE8BE 70EACDEF5DED806EBEF4FDB794A1A9EF45E6BB01183CC4058DD5D6BF33CB6A195DC97AAB 72DAAA73A8922281DAEFEE6EFBE9E66F1B4C6D5A72830D9CBDAF7CC287ABB0753DBA936A B515518C6C121E52BD84359EC983A7DEC5E395DBECDD837788A01387CA0CA84F6984A9DA 4D93CB543AA1101AF32021F2D2530300C6A16C7B27FC6D98E8E192AD089E9D10F10243A0 1403222518D2B80A79360F81472FBAAFF0348BD16D8AD6888CF4971C2B61A8DA0A469009 45F508DF6DE8F7A061EE437A227887D1C24BF05EA03A0B79CED06821B6A53F8275C885E9 F5891E8DFFE67F22BDFE05507F478C90D8A90424097FA970E2B5C88820520C79AD9B539A A10EF6701499CB72F33021E5066D86EF1B2AEE8165CAC5A97E3C20E24229C072A41B515D 3B1AD941352CA33927D63A7B0065AA432994EF31520C80F4FA3E68CA9CA548AAD31A64E8 D383F59BFEBC0288E76332EDF7DCEDBABB3E068DF02D19FD7D0FDAD1BE7EF4947524554E EA87550C141BF3EA6A20FF4834D2044AC7733FFCBF34EE678ACA19A3A8FE3D943C2B3505 242111C2B6307A00989A20E8CB7E4267AECDC4E6F5F9CD70568C5AA8A4E899E404C7CEED 9989C788AFE029340B6A3D6376476181D19844598ED5CCF1AD2CF4A676FBFD17C0EF5BE4 66CBA814647C2E0B5A2D85F3D3C8C16242848ACC70063D67918F800424305F2140A76BE5 AC8A5CE0E32E26618F308EA578CDCB1CFED7CD12AFEABC6F6A236BE927BD11AD0A961943 56C174C7881373770078D3D9BDF23CB838C5D64F923EC5831B791D5604931A8834AA6D95 A79FC44C7DFC090CBBCB177A42A22E6897CE9376D17FE945E1E813AA473CC1530A7A834D 0EC298E73517624640BB35203A089D9483D047A87CA2646DBD18EB02BB9F0EE711FA83BB BE07B54F1B7AFF9F36575BA99F81F75326F59D9EE26D4E4F642004285B6BAF192396F4C7 731C5504593DF687B274EF80F27105F4569AF2EF4C5C5E88D476A73EC4444ABAD8E9AB3F 950C9CF21BD78ACE310C328F988CF22A7EC165E724DDA3F25D403B28A1B61F668C013524 32458C657E8FA6CBD2E6E91106AF5B9C8EE170FD1FB323404E4101CC134FE8F0887AEEF2 3013CCFDFFDCFD5FF60897B720A00204E8544F51735C976EC497BDDC085BD209F756C77E 296716650CC169558746490D024BD14FA54EB4E0CB75E8E91FA2E256F3DB4844308C7998 A0EFE04FC6B14B73A43AE16D586C6683520A82286BA58D24ECEC212CDD93D2810EB4856B 13D432AA6CDF05600A12C7FEAF7B990E9E8CBB8AAE023FCBDF953180AF6913D0DE5B8660 E23AC2B170320467ADC89CD584E9A366F063ACDFD5FD44E5BAB3B7167254ECFB222AB3FF 2187E43CBA6FB705317EE5DAA8D9F5DB83957CD64508A61EDA6B5D5BDEEFB2C6214DD059 8AF10A03A486022A8DB111374E8442CA13D467BE84BB1001E7B9DBCAF50F767330FD3F62 A310CDF232600D7DFAD998A0EA10EFFC49A702347E6C23BE9027C2BDE2E9A14CD55788CB 0C8B4891930AE2BB346CAC0A2CA7C904D2343316A6F4202E22D4E448049B18EBE76FE3D9 7EC95EC99264B6F938108A36CDC5C4D7DB364F89E9371EABC18B1CE08CE519BB2C4973DC 4C0ECA366D8C6CC07A2DD320B997D5987297B330703D2A2DFE33EFAE86200B750D1A2D2F 762E43A94523A2136492B440F6551374F3591FCE4D37F7C192C592133B3315D3435A9DF0 F2F3F621ADCDF53F9CEB8E7B332E701AFFF13641C88DF71858352BA45506D267877FDD8E BEE4E80EBF692631C7C7133012E4CA6082B90533BE3082C34084385CD16C7A4B7123EDFB 66EE5F20C2C66226542B98B437C6925E7CB65C02F4C659DAB78FC4ED155C312DBCD5BC7A F588D049D52655E57D3964D3BB713C6F7B33296292BB6273D626EFDB0CC6E0D346F8383F 315C275FC9FE745C9CC2416F3E1B896CE9D4621E0B1798959434E380E5672C9301474FE5 C50B8344DC9BAD4ED7A57F965ECB1F9DBE601D2967701D4C083529B6DE730D9940D03381 EFCD0F2E5632CD6948F1C7D3B624A248786D69E581B916263DF67B7AD6C34F034B3F48E4 D26F64BBAD4B57E5E3E4B11BBE3EADF529E0473547DFA0781ABACA0F03AEAE3C14884A2B 47AEFD5174D2A5F45530A8C9A0B7C66DCA9CCB84AD031574B6D3FC3E6F1B0D794D061CC3 3FBF13B5CFC934C0561396DC77DC2AA6FE3AB54B6215EE21A65582A8A9585AFA2CAF8194 B3B887EA4C7F71696F93642371258BDD862C0CF23B819B194777DA8503A584CB26B849F9 5CF461F3321BBCCBCA5DFCB054837FB3C288ACC2F394158F2263A8D4956ED155081F1A93 B5180BFB3B694BFFD214C63D1CC0AC82521BA89EFE47A573D8FADF7C7B31CC98ACB47E9A 517CD04C18F8A8116592704192274FA9D817D49AFF1BF2EDA8273B04A86E308F51336DA5 FC70705D6142F000986593A7BBD524A4A03F5A1831E7434B0700B89EC3D45BFC3CBE0841 06E053FB46BED0AE359A76CFB808CCB22DE78B1A88415AC79249BA9F9BC5BE2C3041DAE1 9F6B46545F534821E0BF703A6AC49F4DF2D24A4A90AED84C71F87799BCC37ED9FEADEF35 97ABB6D731757C04C00002C40F34DA0F35E39F6330A1651F89C321627DF1D1289C1C6782 35D205CDBDE6BE95F64A2510AD7CE06D51BFB98E7AEAAAD4E2AC15E631BF136E4082B01E 409BD78C495C88D3B62E3112B7B72268C4B1BF55E4FF2EB726ACD3A99148B0D0DC516294 1E9B8C97C861AD1551703D9B1B17D1613F8BA6917B319BC2910728C5B46EF2CF9E1A06E3 645C52A5D4F72494C1C18F858D211D2EE721FE457969D9A9BAECB4A0058780025142153E 9B94CF1B20B717D5F9AC5BA9271B4CD61628402FC3883ED1D43BB2EE931614D871E7814E 5ECC895E6CD9BB8A27F55004E7BB3E4A09B1D9C5D6B49140BA231B867F68F3A3C9981BF3 9D9BCDDDB6330C8329FD52B1F1B6A7E392AD3EAA4D8E63BF3A895365FFAF54F297126CA6 3FC07DB3763E7D2B79D2974BD0A380AAB25DB48F06BED0CD275640E5759C966A22E2437C 11E92131BDDA040BAEDA876D8861FC551F32591621A14BE6EEA790B77752FA636B8A627F 51428CD373F2ECC19DC714100A200E098E262FCDDCA6328A18B060219FF495AD46AB95DB 2E33D5A697E5D25CB5F0FCF988D62C9AC53E415735BF0DFFDEE23ECA22528B3D66DFF37C 77EDA16945BC694775901CFA106809ED3B59312B4A1023AB13738FF47921A0601D0A56A7 4FB9F6B73F1564EFA5F2A31DB04365A577A1D9DF9FFFE6A4692E2ABF7DA3876BA90B7FB3 168962EB38E03DC5E06E1633947848968BD649CE9B3064CDD5F88477195EDD4018F60FB3 D2BA8190C9B2165FB5DB5AD79240CFBA8D4B2DC061F5392759EA162CE0FBDAB3D8EC991D 3238D835F27F6440F50942305538B3EB8B4C9CB46ADC7A0DEF82807C277B9CDAEB65B874 1E3CCA532A619367426CAAFADE5756F0C22E6FBA7CA826E663ED6716308482C957703BA0 FD4322B105202352E9091B44793A849E17B9D4931D7E4FFBAAFF32D1705FF5D82A878139 0B5CBB1E5E00A02E80C299CC3C9612FFC9AE200C4F4B919E958039D4628480A7A0279EAA DD0D28BD5E1D07BC18D66FA86EC9843665066045DC5DEE15146D9B4CEC6B0CA6EC946967 3A464C46BCFF5451383B65B62D348907887BDD77931996B56645F118E9392215662998D8 51AE73BC084FF9931D22E5012F6D18ABF618DFB01CFCBFE1A2C53B61B84D3B85A5D04196 FC8A0E507A87560ECB8E2DB3CA84A2C97AFEE1005F6A44E00E3924527B1FCB8A3954C746 D6F0E4266940814355AB8B57D3AB85A89EFFD1E384FD8E832E6A846D6B8DAF0C99C3803C F9BC1CC4A1B611DB8B3B3F1763F6BB877952ADE48CD9BEDEF049137CC2F0D859CB4EB075 2A1E581D835921533C868480469430E3AE90B9C965B4130B20E22A060A182827628CFA56 FBED3BE7A4C078E939BD9F79D1A51017DB08B27472B813B5D94CE9CEDCEF61AD4AC1DFA2 37261EB3360CAA70EB0AEBB1777928B2199791EB0F4E0DA70F0A59DDB0B7FBD49AEF255C BF51C0F35AE0A242100AB96E0A2B51F82D5413FA7AA2C603F913066AB8AC55FD474829EE 82E5DBC360130AF5FAE5EE9159B5E09ECE9678DE75A50F49EA5C24FEA536658D48417F7B 5DC4737FAF73D41EA93B3889B9FE272D79788E337120691A76D0820E24F5657DF5CF2BA4 BCE1799E533A991BC20CC52CEF9142186FBFB77E214A4311A243CFB5AD566995DE9CF7C4 06D4235FA3ADE98D6C6CF3DAA3AF13106D38C4FBA7DD764FA38225DC7C41BEA8E87F6013 8D320F004E832F52EE5D716F21C47ED0BE801523BB94D9691B393704380A58722C70E0CB F70EAAF9B5CABA0D298A0152E246CF19A63DDFCE9D45E691EBD404B4EF6F14B3AB70329C 286C3CF24CED4D7591E4FC548ECB3B7864677028CD1073C949F6E334E528D62EB1EF23CD E94DBB71E289FD419A9D51579BEE2F1E66C0EDBD29A32859F1E5CAB29264EC3D6AD03E0B 7BCA83FE20945CA48A4BF76C1F89B747DDD06BD000373561D123AB04AF26D1A785AB792A 95ECEA3DC6F5E36A143204A17492A6C3C9F974D73919F4830BC2ADF839B83753C3C58011 BA6975CEE5655357AA6981C18EAB50DD25E4956D2912BDC0B401BF8E3E719D34D4543E00 6570D7F59EE1E6E683B53B0DB9A8DD3C188FBF57C719C8E1A35EB957151D5CA1208DC55F F81AE455B267013FE1515015206F1DA5E7F9F56C1F0A2FE55C1724CDE3E00C9FD055F198 ED0E75DABCBCA26D558C90BEBAEF6F67D9DBE1758FA9C67FD49528CFA39AA21A4CB6D797 C5E81AAAEADA6E7EC773F9C5ED0D2B0E722BBC8D449F5692E6FD2E90EB3673648EC34907 8D99E469FEC7D6F63606E607BF946C78C1347CE1CF45DF42036AF0DEBA6AB19ECF358DD8 C691742D3A0FB495C0947C3528B0AF579C16598750E475F169C1A36E8DCB33D2151CBE14 52496F4F9414BC8EFFEB38D22714D2388B56035A4D431EF4D07D126CA898324F2BE44E42 BDD930AD74363F011B2EA953CA48A7065C5E21B0B0E9C87FEDCFCA17AB6DEE77B167F31F 6E157B289EDC38F47D836250303B7A6662825E184A464B3B6BAF6A31627EEC2E932E617B 16806DAF25E7A6CEB17E89C602FBB0191592BDC0244293F46E0E698281FA9B697EA945FD 9063410A495A75AF971B7F50331D3FE964B3B2E7C6EA890198D4AB7D515F58936D7104AB 67013017B699EB3F3DF5F49744076536B951160156CB7F9D64B035C6BF0C3119ABACE506 F15605840976E567A1ABA8B94B3B956A2982806AA50413B5F89514E0B065A6710FCF6173 5C91FA417686324F69A98BD4EF2B0EB1A3CE20DEBAF35E592CFC68CB3F1640B91D20D415 08DFC28FC3AD0143A8EB9BCDCD2D2BB45844D387845FEC9A6C9E26F495573F7435B6C62E 93DAC158FFDB41A137F5DAF1F8FA134C26A1A40BCB646E26A513C76A6EB07B559522863A 6373062B7C033FB23364CD9540C146CC7D0C1F33A137E5BE097F7FDE6281EB9B9C2F8203 6DC40494242533C561CF736393C54CA3306FB4974FD76685D26BFA885CAF41AEE3B4230F DF98BA4EC7646D3F25A8A337C557E4AD260C6246EECDBCF0BED340BFAE2A0BE007640D51 A583D0747A5F354406DF9D3544CEE1A8E45E0C3ED5B5727171DE29E75ED1E06E4B878C08 1EA5AF1FBC2CEEF821380656867929E482C13FE6D3FCECA67CC16450E0BDDC5996D7B281 7E15F29F94780F3E4561A3F0D53DCAD7295D68013E2A12F73E2887F500C5C40497802B5C 69FE8CA2F4EBEC94CEF708EB00D4E44C73741A432687036ADDD9021FC35ED215E742BA4C D8093F29B90132352A60AA49F1A6351C80D63BFCDD2C4E136F18D605FC406EEBD81FF609 F396669F082D83B9E1C9573A21C8BFF715FA8401CD7B5DF1BB56C709A32AA27DA08F2BFC 4CC9D74491D7452C51C19D585407E97414FF616B8EB4FDB31672B93EF09B1478907D3B22 8AFC23A38B48E0B1AEED91089548C135CF3BE546F737BBDAF3A3DB727B8AEED13A2CE344 56ECCE70D653AEBF7B71EAC15074263FB58C10985830EAEE832E65609A6651374DFFB88A CFD2FA6BB43ACAE247BBD826E54B6F6AB6DDFF4A51F5DCA90062BD3E033AC713FB95862B 540B9EF93991984FB86936A0841FD6491989B55980D917A53663A63952B9CCB826ADAB9B DC71EAE0BD3B580E767F7CDAD1E0EE09C9A5F015610FF572B4778D19260E5C5154AEB615 F494F6905F04B1420E9C4531A7F6A8840E79A83AA20DC7BC86C9F51B0D10F6F0DA001852 FDFFB7E60D675CEEAD92F73756A91D67A760145DC0EF8565833F84C50D0E17A3A1F33676 E467012444D09186160B317F0D6063194E46E5A484CEF017C919D3E063AE2E79171D937B 1536CA40EC4E4C71FB24CC038B20CE25504189986C5195E7C89D71DA60F40C8E34BD62EE 44018745746F174D3E30E8F2AC3CB4165474B456A8E4BD62244C4698B6C18630122561F4 6A5776B7961FE532C7DCCED058CDF95197466C2D6B5ADCC3A2BB6487B5DFFF6E95612798 18FB8D213AF93B346458431C42C697F3E98EF51A234B8D717718B7EC360F181BCCA72A74 C99FC0BE536FBC7F71B32AC4F85035EAC720C49C03CAC855FA49D1BEEF2799B86D21F3DE 5F3BA47568811A2909D19CB06A3B62A285744DDAD31745AC58AB7D9BBFDAFF5E86EF4806 5BA5BA3E78F6B85DED5261177F0B7D20B03ED496B3957A34A4ED1D493FF084653D014BE4 1DEA598AD3EE6907A53828B49DF06C3BF1CEF5AB6946BF2E56D646077AFA325482FF16F7 93656A895E24CB4263E382CDE6D67C5506FA7E0BD0B20BDFE0766803BC9DF615E456FCA4 8BC2E2AD6E4348414F748F031E23854AE6FC92650A55DE479AFAD409836481881C04729F DC49DF2D9FC46D2BFB3B68DA59CED1280D0A97C7BFFFEBFC72E9BBED16C24B734343C111 4A999791D052352ED194974774876A84B7B9339B85E6566B1C721A535A378AF89D834374 78DAA191261D4C83E12F372EB245CBB39AF956E9A28289BDA6399BD2390618BCF9AC4EDD 18CAA6EA6AF116C9560FA860C615467195720014657D4767D70F6817979FEED7A181CCAB AF11554132B382423713EA8F05092EB14DFF6F06E1A813BBC84091E76038D6E3DA10DCFF 81E750DAAA2BF7BB75C4B1A3347DC8436E47D1B9780DA48842492B86E7D9DD848E1E8F62 4BA0B054DBBE5328F208952E19707BDC6012F04A475D47D8C7EB6A64C2AFAE3A363CAD97 936DF3D6347D8CF1862818495A6836AE1343272EB8F34BB4C3F9B0A631E922C920446DA8 34E9C2F3551BF71677176A1F414188645F43BAD39FBC3453265C05EAF83C3F8B85CB80B4 B3B5AC99B901E6E2C9A1C065848A814033FA6D5551954D4B36BE89E01C1CD16949005298 CDA21D4BA36577A9784DAA57DFDFD0621EAEE192200CD5932A18442B6E925280A7B52D2E 8C7116DC0CAE26B92A9A81B5B6B62836E3857CD38F2F5AB075E642760C0B442725756915 413B2636001AC3D87FBFABC43D6EDD8D111B01942EB7FA47D71AA4520026FB22834DF914 791FDB207DF0897D89A0057B2BA1DBDDDDE182DD14C85EF10D35F6ED8CD2398171EE25C7 9C54D90C059A566A0936B8716CA905803FBD950BC4595D9F4CB59C37574AAE4055D5B472 DE1E6DD3A7C58CED64FFE344AF8B8698F8F1D2FBFEAAEA7F136EA0044472CDE262C7FC8A 0416A868086A5A9A2669B7C6B97482C570FB3192255D5DA008C9E13D1F5A4A3EDB7A5C35 F71797DAC5B5F32A5C03C429198D56BC5B8BBFBF890C6A29A4DF397B2863B75FFD8DA751 95F747DFC65379BA575CFE55A02C589CC8E62B8A8623FCC135E90ABD9900782B42378CA2 C55BFCEED08EBCACB61C53C5678787DC29D2455EC3A379C1ECA2707DD3E8C008E26C42E6 C48C8E3B9E0F667C541B963313F4FEF02BD67EFEFC63A1A0093A95F15FD139398A4CAC17 83471AC10E3598688E1A6E261AE763A28C58E8A5B9CE4DD7B8971764340B9862AF36C89D F6708F535653BA9CE2711624A646B1D1BE8AB250275A1718841830BFABA2A900AD276D4D 592A5D7164C6A7B00A62B08C7F27ACBC78C91E91298AA4B56D090B0A8546549B2BD2E3BB 6FB39B6CDC7EBFB5798FC9589DD707C01842E40FFD597F2BB1B3EE4408F9D38600804C82 2ABEEDAD6AA6EA75BAEF32E3C33CDA01847303D9C142140FA1B6E71E2BD3C78F5ABEC001 66B2D689A8C4B0A7A1C32F3AB9DE8CEB7D20B59524656606DB340F4B7727FB35D2176112 F91C3AABAC27DE231F74AEE1F6CDB49E2844F40F5F01FC9E96465FAD1D10E1A921D81F9B 3F13CF82DC97DEE3462F58797B21E6DE4279A153669FE49D78CFEA9835D5A85ADE360B6B 4EBA9BB8E9FF8AFD2287EE69877FC6C5593A69114EB174AD40F150282B1939D8A3BCFDF9 74A8864679AFA7619D7EF1F347AD39E2899DDA9EA99E112D15E809E899A2294CC42F4EC1 251631ED566907E1947F95ED61DD306F67BE79407AF36F34DAECABF7057555BDBE1DF645 433F5DC42894C3CCF54D21C17B64FBDDB881A2C27765017B51BFA8147BF24157E7CE1314 79D5C001348767CF1E82A9A43BECDF2F173A42292C8145FDB705CCEFD9ED6CC945A4CB6F 6DAF4DDECB1DEBB0ABD084011D033F0A06F66D9E2C40DACDC790BD663A2436F50B3A91BB 27B40F6B05B4D84169CA16CA7C7E609957A918BD60284C78DA035DC6215AA76115F0FAF5 4C90315EB8A8F3FF25734F79300F0E676D06836B5FD19BED6CC7DF74548575820A735D25 89F676D0129D8A44EB47AC1B673657EFDCE874541E2179437B9393978525FBB93A1CDB32 1D1E47B3B6FDE0924CAD789284CE6F18837E89CD0E1739CEDA90AF44ADA49DB336934144 D8BED19D5090A3E79B6A96E303A45E0DF44E795A08E1B5612BD05BE52E0508D60E5979ED B9BB44EB5851737FD5660B71661FC76DB3F9347FD7CFDD2E9C23AC26F805AD8E70A52F73 B11DE295E3285A08BBEDFBD62C67A540400A01D6FD969896C8D5C46C7093646E530824E2 C9DFF21E870EEF04CABCB2F62EAC60C1B62CE5403A1B5620DF7A3065B44C7D28366AC821 86E49974DBA9CAD1249E3EDD876981C595BAC7D05F18D6430F31B96879DFE16021590211 9F228B03E1378D8E9F7080D517F8C668CC27A9A60F74134827F37CC38C65E577D1DCEEDF 2A207906E90A51A72AC31C4431BBB18242DE354DCAF50978E619E8A06CA801937B522396 AD588A1FDEB567116CDFF51876FA3640027CE40CBE18D9423F05EDA77E876433F496FF70 0D89FD7B47B848C5336C80A5EC644FEDB3F4A9EA02AA43A6EEFCDD27762051D2DE2DA02F A03CD491478948B3039FD532751EA70F56C254893A034971CA7F65BFF5662D4A61AF91BF 752BAB772A556644F711EEF61958DA954494C50941CE83C6B7B6B2859AE7E9754FABA903 35437EFE4C7B2B36B99251E0C8122A16E4F9C883DC4CD72B5E2A854622B73E6E3C4DA098 1B208CBCEF104F5777F2BAF65746B7EC51F3C51AD38A12089E4971BAED178A9302F20DC4 88CEDEB2CD8BF9607912EBF7B0BFC3F226228C96C0C128C498FA351081022E47F62EFB15 23545AA028A8CE0F56C85BE3186D6811E4B86B31EE3234C595D34164B27D40295D2C2DC8 1BED866C6A0405C4742CDF5A2563524C93AB0D350CD8B3DF7D219379F302A3A1C12E0954 09698ACDAC5A2A89B7F54C846A0378E44E923CFFDE69B53F62FC661571E22880B065261C B0929D4E234503B81FCD8771685310EF5CFCB2210073EE65770F445B93EACC6DE6556C80 59794A7499C2402066996593653192CE60E4907FED614060F4A9F68F0B949C33A7D5672C 60317CC5AD98FF3301C2176E6CEAB2EF6ACEF60B6FB96F553CD8CCB05C2B1EED6044CB83 40DF43DB21B567EF0A5657704E4DE711FC3EA7933BAEE7744234A369326D1B0BDE34A8C7 2E328F30FE150DFD111D75122F29CED31C666793100CC8B69A17CFE330BCA55848B86397 F9DD4950D6DF2B4486E26AA8FFB58445EBB14BBCCA683F3DCF2AC64025ECA14151D278C2 977A9E046EAA361E658451DF157386033AD47B48C674EBCCDB79B8032A7D8FC01C8AD15F E1B9A410C5D4B51E20AC8E8DDAC4BF6020A2751114FB024A96B95E3053F38A3E9444CF7C C666B514EFDCCC3E167CA0B5F8095EB8D4060937718F6D8705A15B3E515201D9CB804467 25B98EA469785969D46E24F05EA3AFDB074901774745286056761846B80553F0D3460CF8 29C7794E4A360D3C731448086638214DC101591F4531543E9DB6BBEB1B91DF1FB3D1C4EF B13058C4B339935CFB4660CDB385C473BF7ABA5B5BC69083FEA6A17C6D04B23E9437C8ED 14C680DFC74453C4FF2A6BEED2BB7DE8B346EA2DEAE4435DF08305BCE245ED67E41DBBF2 96E3E10562A55D667D3F9CD286FDC42624B4BAF764E3C3378C8135A99F314C1CAC47B3B2 E1FB39499594B223CC03EAC5F75BA3D91D892883D2843B29397BE6E06842D48B75DF75E5 480F6501AF694E0E76D228DF52219C15E7F33267A9D1C3515308EF73D3DB303FCB9497AB FA1236E8DBE95DE4EC90A9592CE96949D0DC55EF858A18DD37AF76A51EB3B98BDE0ED83E 7F4C6297245315E685559B4AA1D37E47053657E710D0AA3CCD41ECCCECC286BD133B64A2 E8583148702FA532121E1E7B058BA1D24E7DF660A9E130BB8BE6DD87D005CEBAB1C8E87C 34C3EA39378893ED7752DC543535761B4A237ABD04B53080196D79D692DE2E53B7167B6D 76DA2279335AC5BF986E1AEADD9EE3A100756B15353BECE08FA788CAB5F63BC7AD58C442 4AB03866AE0E18D4DC71BDF4B58A79C75D616933A31BD5BC14A2743E4A1EB88D90DB1854 F132A946B090E2A092F71CD84239403C0CAFE30A7900061AF680F855DA5E91B023830B93 48050178113D7831EFB051CA8534A3FA88222FB85D1A1E9D99936C49DE0A1DD7C8383F29 B9B2EE1CD7064488D60C7E76F4F2DB018A4B9C95CCBE2F9CD7DEDE9501BEAA9C0D08C590 1F9211AEF3AAC99DEFBD5F9C431EAA31798BD7D3A3A5604892F44CB3B736E8F8F79202B1 6E9ED3ED418EF08539CD3DD9E624BADD761A44835AC95D5D07F7D67B93EB70AD8E86E0EB 5AC1D4263F51E84583E424D0444B673747A8B353A780A6F8549F11A4962641A47CB1C3E3 C4A241D244BA92AB05E6BA17BE0D6DC648C1F9D5F88EC20E103D1589D0E86D2B27CC077D 810BD20514BE94853BCCFEF33D7655EE94DB8559BE3FC78C539E70F84E20534E7A5D6930 A02889A4A82BA058888AB3EC75769BF961283481CF006D73FFA088EE019BB4AA990FC858 621437BFB2D79C49157B5757CDC8EEAAD540E02BE1404EEBDC0B7BF094B80789D03B5F7F 5756535B392A64F9617ED0856A7D167A78032855ADF1E672851A439D9DF57967EFC56D44 FCC6D878C31CE7904C70433721C4E981F2643C08D96E4753850A4F427FA3D984E00832BD 53437FDAB0A491C81CD6CF81D8BF5247E01CAD335A6DC9A69962B5830DEE96B57C9B08A0 A5F401CC9CE286D3FB2B24F8E77508E4182551B4EE7B8139B80B805B64923ACE685CD576 BF57A5F538B3F03C38B7DDFDE686B8F79271F8E4E909960D6D36523D4A217E4036AD4C84 1E228DEC38AD432162211F5BA65FE03E0796A29EB8A8C4DB9BEA37E5C15A4AFF900A3456 723DD6CB1F8BE7C5372A815691A92B5F1DD97BFC89FA5EBCDCC61AE4EF0245684ED4FC18 7631D4292A94C9E3BBA81159E3688CAF6FC988236FAD971D774B54626DA436D10BD42A1E 86036DB36914728E66B8EEA3B432126A5C1F0FF3928557A3D7583BE21007D81D40D8359D 83075211A8366B16613E1B40EB840DFCCED4063CF06117963EF200E0FC0A558B1B69DED6 08A00C25C68AA7EA0D902047A0981330DB2788E994E2196FED97CE2E777C0213532CB19C A28B07792F57F19433A14D1E6506958E8B6483D3651A1EA10D988C541CDA715DE138B612 76926F9793C603B1836E4E9A4DE110A69D60E0F9BB0D5DB9F4B67209EFBE8D69D4C20B15 0640052CD4367DDCE4722A87E9914B7DF541DEFA52278ECEB60572E0CC31AFC6C30ADEF7 5898DB0B4A5D00F169688EC5212983AD3DCA6604CD2B3FD4A351EB4661F025716B2DCA8A F52CE6D269979C1F7E7942F583B2CB678F8DC52CB250C603D48B206D5547816C220AF203 609BFE7B53CE4C88178C95A4E8F2F8B4BACB1CA5EF4CC1E76347AA958F2789D441AA1193 C56ED7B27A0099B3EEBAC6AA6302891D3F16A913D980522CDDD8E3303437EC9AFBC4858E D3DD92E3E329B34B344718E4950DE3829812896AA20A9480582570DC88FD7F4AC2F46B24 CDDD8EC6BE4862DE1412F427B698B83AF5A0EA767778564F3C3CA40EA60281099297E104 E46E308BBF5EF23CCA84F9D6A6F773157582EE0F1BC477274999637E199E269DAD3D67BF D3EBBE840CD906E73A31EC7EB044E41F6B72367F6EABF54DA9F1664A1664338E202105FE E7F071026D12CEDC2D86D581C496B400D58CFCBB7B2A551BDABAFAC1125090DDDEFD4F55 55B21AC1F6E5DDAE6700935C521AE129F886598539C41D07FE2680F25442BC29BDE2902A 07FEEEB0A14E4F0201483BDD99D4142194BA2FB991F76B35D0DC31526A417212E5151E31 60F3AD665ED99E0C7E50A43F58B2D6A8A075A96DFAFEA84C12EAD776CC6A3445771DE987 DD0775A8DA30A1D0B92ED1D1A8B3E0133198B33C58A9E79943083C1EF44C0AE8A12D3BF6 7CE1EF00C97E220DF31245B47F4720DA1F1B66A11A1AECBC9183C654DCEE7A16D47A3503 74458A7303ECAC951588D2DEFE51919ACE2093697639CF60467FE9E43DC30B9FD53D4C22 DB1F7B81EC206548C1E6E6B6CFE038764C4702F62CC23C38AFBC762D24E7625804867B40 1626B14B8E45C6D9641B591D868FBADB07FCBE00C193F2F13F174648665CDA538E8977FE E8B54B74CD4F84BDF7A1D2D1E64539F146D3D116BEBBAAEA5FED99C5DE42526EEFBB78CB F8AAEC9F769B94FEF470C60E0B2F79C7F99D8C9C7C32A68302B352496255FB3785F74B43 B4A173961F9018930515E6D1A57897420C404F32B3A0E2CDBBF8B53DCCDA0F0954BF6F80 2638FBACAE414DB6C63F60ABFF719EAC3831C7D5AE46AAA7BECE1B71875D46504E61C29A 3AFA16498509FC57DF4B4BF40CD4D8D59399EEF835D97EEF06B373F6E006EC22FC61BD13 99EB69F248D991725232C1C5BBFFEBF0477A08BDD42F32FA43C5F5C06C2BF639E1C86F0D 8E49B70E134B038781A1E85AE2A16FD1364479A5A46EEB1191390F469D0C573079523D1E F2B049171F9345AC5FAD682E4CAE51E1717FB19F8AAED47B7572EFD188806BD9FAE5AB42 37683C9797DEB62E1FD9DD5CD1D477918D19D004AE0334E7F6A705C4B6D01FEDD05DA5FA 063F81B6C6842D81A774C04531F708045021B8F11243E2C3F3EF7FAF5BA95C117B9DD6E1 AABBC678F5046CBB55FB58849B6500A1A9593AB0BE9E2CD823FD35F60A485C3DDA2A36E4 D13984CFFDC0992E39CBE5CD18076A92820D874E2576C83A6B02384D33F07DF51788BBF8 27DD031A3520EAA36248860261133BAB4441635E255AE14B59B37B35CACB94688809FC1E DFAD40EB2307B2E0B8303BD47A15F736F58A4B7D8ACC44141E5E7D85D24B6CD12591633B 7A005A49120406ED1CE82835C70426862D94F10BE0A51C894074506444BC899136DCE869 D20F94E6E1D67F579E94D83DBD0B2230E55B90E01088DDA3748DEB1A7FBEB2D9D5625149 06F512CAB6655C97060CE906ABD62996B2F1EFB10585C49EB019986CD391C1250C9E290F 435A19B3035A30B415C614D64E396E5AF2970E36BB508E4AA4A030C9A38ED4D04B967E2C F5BDFC66833DCC48BC43772864DC29337040BC9AFBBA5E6272CEB78222394AF8362D32AF C1AA0E3359A4DCF2A98F14C1876631E2C98E8E29C41655F970963592C4BA3D028420B197 559C882A42896CA2FCAE8919352A02C39BF565A6841E3B181234E3750125F983E415A065 137F3C67B80FBF6390B53BEDBD3ABF8E11C807C89B1420C37C790BAFFDE9EFFDE9092673 DFC748B14ADE1A7B9883C545C0C145DA0D404571F94F4A161F7A747EFC311D1F52C33CF5 993D987161F2AF52920FE97AEFC3651767C8750FDB45920C972401A337517BB88B3B65EC B1E6A67B6B0728E3A1E46B1FDCBBE1D3757D715F91AE74F3740D2329944246FFC50665A3 87B472AB71CA71539C2D15C56AEE7951666BB869FDDB6D91FB4F90A00163E7F1F4634472 46DC61B4B08ED312157BA05105B93F0F8DE781CFB59480E1B8596A3354C8783CEF52EFDC 74C9D143C16088448B8A9CBBCEC59900B16961E845CC92AAF400943EEDFE174CB3E465DA 6D92240D8CEED8557EC7631EA9D2B4F0758CDD9847D703A5623FC1C96D321482243A6E9C 853FA07459B8DF72F6D6CADDE4D92A8B110566984A4B8678B8CC8FF4B2F4665030FC2B47 A0102CBB3D8F4E0C40D761D05BF4B9A684FCE51A5F750093AE65299413225E64BB20D6C3 E287D934DD3040DEFDA92AFBA6E79483DF64FE3CB9B265F7CDDB2F5DEA767D5967CF0393 B7405BE70F810DEF309C5D2EE786DBD819EA4A4253125AEA8DDE8F9AC42AB35E11773CC8 434462261939FE3EE8F30383450E3C6CBB033FC839332F6B6092E724274A89C86BB4ECCE 2FF70EF35268E9EFD66F1A75222BAA8CC9F9F4BB4943CB28207C633004F31E0721FA48B7 D1E9D10A0694EF6A58A1F01EAA6BE615F2B1BAC49B9CC0A77FE251B7CF5611ACB1A0BD53 8ABF1BE4F584AABB038F4FE84606BD96CF25FE9146651587023F868B13557E4153F2FAE2 070BE3D081C4CC5410E803F04FC2284EDEE54DD387DD61F0B3C2A1815B35DBE6FFE337D0 7C50DFF344C2A4D9921DC7FD0FBA8CA06FB07CED571BE57E89C3E429B40F0D8EDE7B522A 32AF6249D1EB966D27A5424495A82F15DBC8FC90B8619C0363AFA45C26D60FBB408606D9 A37B385582513B61641595F7328A1EC830E90BB7C8B186552E2F645E2F09553BAA432558 DEAEDDD0591CA23F19E6B9D2143F0CFC9550A43DE70F69A66A89C4E505E02FDF77C87E3F A3768B12B7B7137C5DF761978563CC1C81AF9B7721D1E21A7E18CFD583EE4BC928E75AE8 3F4DEF7A587D0AF30DE0CF4D74872360DB3BCD6529906995C1294DB90C93B44EBFB95527 3D0B704C529EE441EA8E1EE2E3B03B7BA50CEC0C34AC176EB56AADB692EE9A53C215AB0C 5736A3A4EC7E37F2ED5E4BDC7B82D0E35E06915E068FD974F225E70461D780906A7B7831 AA07687C177FE71B84A4136C7A6BF2FE6408A9C7049795C49326069BF24244430A960ABC ACE67533486D6D5C6CA89D71904C5C48D02969628A2184F6B36C5FFB64A671116196BBE7 4FA57CA9CC66378C0CF086FBDF05DFA609BCED01EF21DB027551B888242BDD941C302340 0C2622E8557A0E12DDF981313D1F5953B57835592C8828C102C16EC39D06B63F31C373A2 5077672A1134EFE0D4437E8F38AB373B214EB5F2BE1F6D80A07E1AA296AB7F974EE1DD76 EED4B86A3CBA0E3C9D9F1A12F5E58913054D4557C2CC1C2C147196C7CB1435CC90C5D7CB D2379FE287CE562D9B7660E157E175ECCE8AA94B1173665484D19D65A9B191D4C09D43B7 90D1DA313C09025020B2315B0112B8E059E01525EE0AF0189CE06A307801725A26B2B3D1 F0A1BFA9056E1D7DF67B1A8E82946D5328AAB07A9D90E21F5163B1E3DD6D789068C8A1DB 553FCEA69C14609A69805B3333EB608E4744C58C454DE66723A7794D09DEF7C6C981DDF8 1B84B3E498D055ECEB6E8372D331861437AA69AE7D9A0932F4E71B9930D6F2DC38161257 A32B87A7D37D200A5B9B5B257C0C9833BF04F91496BBAE83E9AE742362D8E74E0A4AE5CA 029B5CA078EA6D8F00B1ABB84A08FF1C03BA539128A42166D06E09FA8AE71B74A216ECCC 82DB316C9589BC68456F8ECD9B4BEF1E12506D537B6BE4CBB15C969B05D2F220B6E2678F 4F2D497DFB72D8F9584FBF0D363547F84E1B28FEA0C869A090FADD5B90E36B88326F6589 BCFD8FDAB3993532F04949DB9EC2D2F2F1360E2E75AE76A6796A2E7AFED4DAB1B7B10D54 33AB4C76331AABAE0D3ACAAA62C1BC3F72662EC71B76568BF3450B45C2D09BECB562A49D 3428A9DEED6D956CE1AFD83D90A0FC021957B45B8C03CDE0579EDADAB4BA570B29809545 3A1D56FB60FCF22C038803ED3908D09A5E4E3EACD180A6D355FD7EB96B05305E841DED98 07F75F133A6CA5D3415D0376504634B8DC2AC7A5BB53F9A3A032A878DFFA224FAD7A22B6 9416767480B814D12E7D316D07AE8AA5117C04503B2E194F5CE94EFEE005DA30AD9114C8 BA99323CF76547C24D607E40B62C51D86B672675E6F0730ABDC9B7B186D7EFDC4BEE86A6 6456C4074BAF42818B46DB83D70FC8D1CA702CBB672B38BF0E776B52755468462B2EA034 DA32113FC26E122261018D3A125D174D301FF7B16B57A406CD70110AD35710C2B67B7330 CEC7B6B33770572AA9227AC52B0D6C6D0E25515C5844FD5D24140E01F3A4099BE114B94F DB65580BAB585F3561FC997C5DFC1A27A5AB4CC6DAB5DF46F3D575316C81A2049089FCD4 1E4740F4D16EEB08F117EEED488A6A9DE20B498CB60E48EB5A0839134B9F102BFBBBA982 74ECB5679EBC7CD178B6F179ED979AE8E9A41763A97B4E14A7AB6A2C1A446615786CA3FA 32BAC716808B486702635502AA9F336C101A6E6A5F3033F5A92E13B9DFEEA4E7E98422E3 3D051264262DAF41BDE94B43E0A375A42C59702EF2C43445C5EC7B6002BDE7C342F52AC3 A5844A0EE75F5670C8B80AEBDDB2FE3D28BD6961037C0C54BE5ED708F683D1494DDFBCDC 976AB35442BB049A5ABAD1246996AB4E56CB0DC9596EE6ED06D02BB2DF9A7C9CD5B07BDB 7AD345607291736909E194D93DC68A1C612945A264A81603A9D0DFD5435DDB97F42957BC AB7D6B400E2943A3F455918135E6EFFB0AA5E9C3509860CB5727363AC596CA1D08979225 814CBD4A22CB979E1A6F6B9BD0359E782E852F51DAB107EFB2C2F1CE5D69D5471704572B 65A8B8B45305088AF7FA401348962022C952067504E39F3E879025FBE8E5ADD940B6D4D1 737101C3999B9C6F58B259219AF84F1C146AE2DDF02C492FB5F582E739F1D1A3A0752CBD 5C401C91BFA7BE13F936DDA112AD87ACFAA7DF7CDB341443967E8CE3091F024329934DA6 AE431187CF6C1955744518EDEFA73ED94EF60764C59EC21CBB08EA73512314A7E0658DCD B61CDF37259EDE297DDDD7022DF5174DE5FA5216E566D1AF3249DE12E3A4EEF90A125EB0 5633B85E3A12463693D5E2D6C01F5353761DE77FC8BDEF35FE0432E1CE3254F0F50A1B77 C2245BB6DAA558E893F89AD98296C328D37C816CA808943AC488BC0090A4DB29DB0EAE82 C89337A7C3FD1B4000202C42489974411B7B63D69BCB12E7EE7173E51D1DA17D7C82E6D9 F810E76A97A9F118F1989B9DF448249BA2AD095A9698BB74D744C9ABCADAD6260E069C9C 73B05D41228C475C1207FB4AA8A14562FDC889D6870F5D045073F18D8716944B52A7F9C5 0005002C0D1032B7F3ED2F60E9B27D056D1BF9AE3B1C9B4AE9A76EFAB3EB926376080C14 5100DBBA2FAFB47E119443AAC33CD4A49DBB8C0E8629C56B8427AA94A6E076EDD6A16574 336E6AC1D23E04E9BDA3CD2C926604C4E8170A3B9599FBFA9D3C8BD6192020E0296968C2 EFA8C621C0FB0AFD399FD8E14CCDD94D5C6406D6B1A2564507BC818467322EDC55C3A3EE E343DC08142264D205F542C023F8C82CAFAF6DC194E2016202247696F03CAD55224FDBCB 0E8DD2C9DC53F5BA9DAB23C033C788CBA2382EEA7390EE61A9672345EE2749CCA136632B 34AA12A5FC16974E9EB835A5598ADA0898BA5C87757D5EADAB5D0F71E4B75B8B1D711128 E277A973EC136CAFFEF269A28B00881991B33CC8C5DF618B95C049CD97D746978B6C3AC0 CB9EF6A51BD9702D0C14AB484DA4AC2400BDC557CD5E57A2421ADEC7F2326370E6F5D5C2 9DAC782AB9255D0F4D0C98E7F9E0D7D31B114B1BD18AA2510E4F4A97582A15F170C12EFE 80842C1D3FB9C74F40DDCC8517FB123EDCA605305E841DDB1E5AD5448DD4972A20045021 196CC951B8C99E3F000CF984252686EBBDE5DA0593C8514F131FA94949AAE1AED3E780CB 0504CFAD74171757769C8B2F51D54DBDE3EEB48E75486B4A75E4431F8BCD1A985C4484BB 1B5CA35F1BFE7B3A7C41A42B66756A229A7A5A0DA6B7A5084EEF6B8AC804C17F1E88E5C3 D0C1D55BD687A9803A1AA74A60C0360873B37C79B09A1B823C3C8AA322BFA2E9B77701D2 BD815C11DF5C55C393B73F98B73A500EEE6CBDC9E4F5405C73C3B635D6D0CA58BB47D41B 25149C3962190A1CB6FE7A8D6D4E26A205733F42BE8A2B0A8B4573C92CC98FDD07318671 F3D3D5C7C757DD5AC7350F64E70381D190A05C674AAA796DE36886AA50955B422BF5995B 6F8EAD32715151456AEF2AD3D16FA3120B0E95D817F9CCCF7B2A55D529272B1E1BC060B9 9F6342A1229DD8EC1DDFE9B59DBDF216006E98EC1AA5A1F55EA3D7EDCE63ADE2D4A3BE57 E45A1FFFC04D1C9F1466583BB2AD58AF695DB3DC075327144B35BC40EADC993BF3BB97EC A3F7756324E46DC6F4A13CE5266433C90FDEF6F46D38A9CE9DBD993B941AABE630ACA87B B14EE46C977EAF512A769611F269A17D6A7889F28F4D38CB9F20580F6F4F5324FBF8F6B4 F6C101ED306407463004171F3C8EEC70B9A2FBAFE213D1450F9E368E56183F4449780F4C 20171C3354E3AFD7D31B9CD7979F57FE545B06F40AB613B5B91D21D9E50B7B01E057F02D DE24F4720972007D62736223D8C3C442CA0BBC8F31D29387399CEEC87700982A394A11CC C73E118113558A4D44BA30924C4310F7C83F2C6D3FF570FCB031C12322CBD38CF98053AF BEC2E7DA168EAB3B646713AD5C3FB0CAC7BE1D7CC779FDBEDA2FB78CADFB0EDE7BC13C17 531C20EFA0C63BC58AA447545EB89FE0271198D71AE26924F939A063521C082560D97EE9 6130A6F6EB7CB75BADBA1A8A00736860986EC623DA35F8210E26B843345B941C0C0B262E B8EEB95482CB4EB437431E541F1C2820699258B1D17229E1DC8D7B170742CA64773F8062 330A53950E929080661E588C1E4B85B5235130D50876837EF131D3F01CB0508954F39838 ED8A7F38E5E7AEC8A74FC71EFE42E03E01B3CE075AC305B223B03944F9C39193A9EB6334 FE05EFB242FECDEB2CFB62E0852B8AE333A92B8CD54F33318B1B22A8FBE47619A40D2CE1 226735134BD860754D2804FC482441D48F1239B2D53E0ABD6FA1D556E4551203DDC5C79A F0169D0306F1BD451D9FAF5A200FAC1C833CD3E72E37AF7D95860D2D04A1FCAE8EDCC522 255D759C135B7812CBD0A6EA9BDCC084E528A533B79FE9CE5BA00E86448CA798C6CA5B05 5EF88EEB8EB276D2E84524D64468EA6D25F062CE4D47C1E15CD734BBD04308FF67DA439D 577A00E4824EBFCB2EA5A00B55655157AFA0DA8FBBBC520A39B37D9FAE15A2CC90DE8B11 9F69965BD22F20B63A3DC8C71A15510F85AC76F3248D2E5593266D9874E3C099649F78A1 85F07DC3D9C1CA1FB2FCDF2808945571904E3E37A00EAF493BFDF11E9B6D4DD951C76EB9 9BA671641E4A3FFA7C16F3AF41ECE3EDAEB91B0D8065D2324856C13B02C6666AE0DE50A2 EB8380E0CF9665C3005EBFBC1AC075D05713A70CDD5590E7B9A54CDAA5F5BD2463AE744A A12F29C1C2D241712C3A80DC860C4BE572905586FCF974241213D073D3AFE446608B31B9 E4F368D5627A50E0D55F22899B18E8BBD1DC96EA7EE8411650950B38E5E977E25A210070 B8BCD0C109AAA5E1D838AFB35A25B0C32267672D34D5E1F139DFC10AE6D23F14B07190A6 0DA8E6522D3050EACCE19A9D1C762BFF247CADBD1D1F172C006DB745A3F4D05D33957DFB 471AE4ACE69B8AE49D8257B8B88D36865C0301D3DBF8114850A2B05D2A8121B3335DD399 067962216367A8E8CC834D69BF7E16D06B4C7F602F908DA3903FEAC017228C976741A421 C49048140D1B8D484153AB948A01CD7113C0AB9BD5466F8A26557E9F984BEA514EBE72E8 C38FAB5F634EAB033C960539945FFDCF63E1DF47A8C6BF4460F6DB6778BE2D90B90BAEF4 6AADCACBC8D1DE9BA3E9D4A2A8EB70F5CC3F02ECF6D76BCFDCAB9BBD36DF52DF860D64E1 F0958B74361BA4298D792AF1D119905FE6D3067BFA8146CE1633D5C4658847F3F9E18143 F1AB4D35C953AA5105FF94FC0C345E478B5B1D4584CA7BC050A31740EDE0FAC5EFA57126 2CDAE360AB92ACBFD23807A0394160A8EF0B0F320CE3685040D091289DBCE3454B1ED51C 83D8EDB2C86C71805DDBD584BB61E88A673ECD1535F5891EF7695F182F783B59ECBB0DA0 B445D7AB5DF5C9BD042929611182301813145BAAC4D54644E93BC8FD2CEDE0207B5D60ED FF95CE7CC60DA632FEA04F8BC518E4A5197BBE065062556EADE480A86B8A2E0C9F1BF739 1102D97C4D6A33B05C2EC5F457306266572C06274ABA9EEDB8F3C4E405EB5F132AB3E947 CFF44017C6D8B79980DDEB698BB03BEB0C864A0766EDE34FED65FA889C5F149736CB7640 B13BDA9CC6D5BF72FBC3009CB4FF5A877CA3E973A2A08FF25B212B8665DC4D6630B6EB48 0D6E1E8DCA6F34AC6EAA482A4C6AD1763E17665BDE15BC08806A3FF8BE68584C8EABDFB1 1E415329EFD07459890671D21872E0B0CB2EE1577B4A9283F224E3D0CA7106ED0C91FFFB 4A3B8CBDB5E528C8D95D19741F16DF780F6D49FF6815351D0F0D92A0CD72FD14A19E1DB9 97C3CC11BD6FB2AEB5281951D508A3EAAAFBB048B87AFC7CAB9BBE1D1C407D52978B6AC4 6136E779209453BC2A6A86C198D1DFD8818526715228EBB5F411E1554004F48FDDD2607B E0D3979B82E35B78985FAC19CC95022D1F0AB9358CFE21C27BAB89AE4B03CD35565BC65B E6E25BBC43F5298B14000AC0867BAE57BCBC40E938C304F37D9AC390A90BB5ACC906599E 789066315EEC0C15FDEC2F6E637A3082C85B2ED6BCFD621F033396CF1B7330D97265F873 C92A64271C6CD63635758B05C10F67831EE579EF0B4AEAC245BC87541C1E7561E24B5E01 B323E220BF1170BE5A4319684883C910556AB899372CF97C572D1AA86A34D826D6D4A048 AE28B9D3E63A00A6CD36A5C4472E1B7840FD3B09A16190BB63588E98921E17D4180AA540 56457195934F082F0C0F7D104E9271FB8E7D0CECCD395BCFF6539B76EC3FDBB1363A56ED 366E8F9DD48A9349E4DD8A78C5B683E8365F3D0B4F2F8DE3D70B0B8825667406898EFF52 A957499AE83E6FD2037CBDBE6B9265B0CB7323F86AD386F7A65CBFA93DD00255BBA82F96 34A80487F68BC69000869F6CBDD217096BBE6BD9179DEEBE12422C308CE023854FBC077B BF1B820172633D8F70B26A302EE6B64258FE46DA73AB8C384756200C95A5623D0F2A41E4 7EE54394A784941A06F082C737B9C6C5855C5F11729D6777E38A6B5F061C8E324CD2469C 37B564AED2568502B980A054BA7007E8D9ED7733D3956BF5A3AD62C262CFA0BA9BFE0772 7B67909D59A0084BBB85DE630245D514D86A920891417AB9FBC93863498E04E1DB27EC92 6F5455BF6A5D09BB6C4968E10A177CA4B057E7D360F4646C986BDC5FB0C7ADA94D69F257 96A37E10F1C62FE65D66790A0599D0A20ACD87AE4ECAD36C45678542E8D8E364DA954F9E E832D403BAD839441AA6F7118FD8C18B5C36F20EA984755E672FD1C2DECC0F6764711C3E 7F6710BB8C7911BBDDB001B9CCBDD363B8CD618CF15ED57B63E5436047E7FB5BAE45D062 D2EDEC99D9335118AC31D73AC1770FD0E5618608C7F42507753B5115520D4E220339B3B8 AC54C83451996E8A489FA86B1E6C990A5000614688D4C29AD6EF8010131BEC1AD2670F9C DBAC78485175F999CDFFB8572F30648EB8F49548850B6CBED30114EFB970C8A58E814239 CB0C1A855ECB24E0E38A6F4AC9EA5D255A9EE180F41213F8168F03E4F646411AB5B4AFFB B17C2533092A51313D3556E734FA0970E0760CE24A573A511EDF00457F348C5E465C1AF1 198BCBA0CA6DB414B66EBF68E557E2EA72E80D7615B3A3017214BF1525A6CCCD1BBB3925 C42E13E162797DC077B2674BCA2265F48F72407B24CA2002C2DBD2DAEFE4D0BF1B1D682E 40B74BAD6C4B69328848F208D5ECA1A49B6F59E89B306FC5C47E6C007A5B0E5380538B38 1DAAB61199AF1857C9D0649570534B486FB5144D9588547716F848A8015C8C2D21995D4C 860802DFB07E4DF45E09C7D7FD5EE824CE4128ADF624250D69ACC87A0A10F647E7575DF1 E7ADE6B0BCF063411797D563441EBCFB213F200A4CE96623BD6CF127727364E0450EFE99 288E9A3B1FA4A1E776C9BC581931B72749EF0DF7D786F898CEB10158B705BD15B6A9ADC9 9C7E2E3624905EC361BEEBA65E43FEDA49EB8F8A85187973C5D19FB54BDDCD79E42E2C08 130865F10D7D600246548D33303B617CD6F81E0A11F4BC23DA3B167E5B2FBDA8BE051C49 536C4B0940C61A954418AFAD8B0B19D85DEB12B1219DE27FF75797D0DA16F00F80AC113D F19AE8BF86FCBB602F3BC696611935FDCB61F05EE17FDC36E0B1087187F80D5C3EAE1B17 DC1BA5817CBA5C3CBAB6BD6455AA2C3B44B57494B8BD08859C1213B24A62755F7CCA048F 63F3F430CCEB00BBF39343F25AD4B6C62039A3F7B943344F86312E7566620694B77C5B69 2AB977A7331B5F38D883F9B7C4F89E4A66F725E0EBD8E988AB9AAECF32D31C75A3E6849C 32E4F06196DB937008FFA15DA36CA90BECBE909AEF6CA20E2315C82BA27385D08720E1FC BD5652AE843BE5F3D457B7F488E7AFDDDCD29BDF7ACEDF1075ED819674E47D0FC92DB7FE 0AFDE6D58685F855FFDF52CE51B9C2720A82712A4B7BD96DE3EA95CD1635ECF7663C1D54 A885A6AE72D84462639C52F987138050CBF73A5504F66D1430DFACF226FF12069A80ABDD 0141CC2E05524BAC464CA4C59AF2912A2A4EA112F8C8A0BC4C908BD6C0BBA0123110F3E9 CE3A216081892A19AC53FAD507E34110EFC7D4699A98849C5502F9DCD4418FA81EAC9481 E4C20B4F46BE4DD134FFB03E47D6547D6540E1EA036167460F2922629E01ED36553AF423 0050BBA670A4B74790B213D70D7ED543F9787E8920551C4703DB62110EF2E30DF12E91F6 8AE86C3C6F9EB3043C162C0A0CFF7D4FA90CFDA5278D2B47D265D06CC33FCDDFDF3C68D3 6BEDCBABB491F89962A46F90923C51EFEACB39FA22A36CDDEA38855682F126AEBEC06558 94CE26C769392D71F1C4CBC34E3A4565EE74D67AB272327B457D346B756322FCA806938F BFB118244CE3B164ABB58135A96B7E1211220995376CD058DDBC291AEFEE79A41501AA17 BE5200BA08E047BF985A97A8DCC1640E279DD35938B57C186918F163012A4C947D665449 5CAC149C96F6A40502ACF8BE05D671777DCD218EF7FFF41AF93A80418A2AB81FA89120BC 91A462F034E8801E1251BC3327321C7C0652ED3B26CB8B6CADF42AE3D97A8DB1A732E452 FF187A97A2E03372667F91825FF3CC861B4122A1A0A3F4564323209DCB8FD2A886E95F58 1539C74E4F5A0EC5B63DFB416F3859B46DCDBE7D724DACA0C5B6483FEABF3F36D6B13D2A 49DACF1EAC4FA6C7B161A22CD876F5D511C2C2FC96C8B3AE53311E2D9468874BBB9E6B4B D18C5DA32F4E00923F59D2FC2079BD4BEDFA9E960249C650EADF2937CF7E339FD103CF71 AF2549D4E9763E75A84744E73F70B669B6808258677265A9C2A48D95CF90D1E1585B4B60 D19CA105909FE1D0EBCF533562ED6953C71C3CBD9CC474B6F6418A87C6B608E9D62CD3B4 15565A14EAA18B23199A1521B101314B38A6662F5EE6390C9DEB538F5AF1BCC84DC9CA33 E2D403FB1FB1A2E12D485D534F1A8A27447B5F9F13ECE527F7CD3CD9144AC5F137637659 8199D0EE633CCD95797F4D55447D3105AA87498F1FC8B8750A440C46ABF820EF499F9D5A 2818FFC414EEABC029AD6F961CA43BF94BFAEEDB8962A6124A192E1343E16A5E20204016 B5175FF8252310B60F276148849E8556BBBD44CB9E59F5992AC845CDB2BC3B33BD7F0816 2C36B7D91BD17A37F77A7938A5209FE92DEAD16A595E91917F6E49ECAD8C7B01F1565089 815BAD961827931E718DF2B1F9743B938ACA21B648916FA76C5C99BFAC1DA9526A8F8793 733B8CB1123A12E1FAEFE75332D850FB7F296539E76031DDEA6851EA00D97F7B83945C3E 5C29D9B7F31B9A7B541B7640C17347CB2E39C15FDCF8C8B8ECE605239020783F333064E9 ABBF3236976CC021E852C2D1C1A95D6DFD5746E076D14E75D2D31D0E93260802D9B4B846 865DDE6FD59150562F6EF062B5DFE7C136978FB4A84ECB6AD463E199CB6ED2A9EDD7CBED D8BB618DA4E68319C7F194C0DEE2AF19A36943837505AA05FCFA86550C704A7EF74227D6 58BFB33945D1E1FF102C91F6378D54AF74F1CEB81BEE7A848B8C933E4F9AB1D6914D9010 9FF6C47194AFE0004A7245ABA2CE53A6C0B8636FB445E1D27E631618DCEE6E1FAFA19B28 A3FF71FE46241F832D43FA786CAA4B5125821F13BA3023B54DC4E59CBB027C1720432DED 5D53E05E2E830F53F6CEFFA0F17394A13EDC3ED8EE8493523394C5C73CA15C428E481D73 FD4BAC226F9B923A1BC380535B19161F12034CC22DB93B335E1D603F8FAFF5BAF4410A02 C8D0391C8B118EFBE289DD957956EF0CAC55D68F2069FF4D24ADE54DC83286E790F7EC12 2EA9CE466BDD9175E8D50EF54A5219997A440C689634B35CB4C440327CD35CB05AE77E39 87D742854CEC4E4784D4C1B06340295D19C1944BCF826E96FF84B4C80E173892B6DEAB45 DFC0BF6CE1142215881A64D73D10AE8BB835CAFEED23A7810FB3FA4E8D811809BECD7062 2C9C6CE8725C331F42F991BC35674C0E451EB19887FF4792D738D4E22E4BB897C03E79BA 7F79F5CBFC2FB014BB58DEFF61A4AF62F3029F6829CF1DF5BD69FB1C73C68E36F2B3B1B2 30B1D436D6DCA96563DA655E275ABB2AFD15D313D000D8E3F0D3461421D52B2A22623249 E155D6276A5E6E0B5746C1BAB10B628092CD035976220A0121A3D16BC6B6F222511DA119 E245943C5E7D68E32308EFD355CA3438436A5942292295282CB1FCDAE8B7A3AD3CB39CCC 5A6DDC8FC771700383C268F4D676E9DBDC33C14688F23179089396251728AF49BE24D02A 7CA4B1AA3CC148FB87E7C87EE41FE22723009FE89BD2DC689DDC9F034931ED7802B014F1 C20D8F53EC110CDF35B8360FB1C58C9AA0F366260F36D21232E89FA1314476FFBA7F3AB8 935147AF814D3BFF97635B11AB9EA47F6EF5952ABE438B536CF0FF25848F7480DFF36F43 7CE6BD8701F4394A80E4D62731086ADAEEC41E6017A8AB72F890E9ED036C13BE24A7F2D0 ABF1999B865B61349C501A9024FD08A319FB8E5DBA6E7283E8FC0BE48B9672CECD1F1091 23A155914F163FD67AA466048A46DE447257D86C493B90178F37A23D66D192E552E46CB8 E3C6D39B4CF574DF2C38CA6C74D0881E6E5C068766AC2898185BB326890F530984F3F31F 57F80C0220E2CDC14CE937420869C037B4C197C44B59FF91FAD5DAA875A7802A293679A8 2AF31176B3DBDCA9FB5BF5C40038E7F119C61B7554F35DA79D942B9BE756497B3C9B7A19 E5BCFFFD7BDD046EED61780D4CC5A7F8E3A78B7B2414212870BA0D27FF3C01B2AB030EEB 8F036B48673D6AB3460BB45939214BAB345B8D1FD6D2CDD3CAB37376244A7AC0FA3DF861 60A193EE77CCCA93B2D984FA9CF07A54E9207EE127EF5B877A561216609567F9BD907BB2 11A7383579FAB14FFACCFCC0E260DDCE27377C32FC039FF52A5D8059E7D4CFC880B0D634 51482FC24A8E711B3D962A0926F4A0FBDF29036E0499FE6F5D115B7A95A059D6FCC36C87 03DB34BB67B65F511637D91C428EED31371E9E9A00FA82BAC36AE2FDD0ADAD995E0E96FB C909C5AC04BB213EBB5865A2CCE6942DD92EC73AF8C7D554A4B32910C7CE57EE79D11ACB 26D7CADECC469CF16953A50DDB0FF9A909F0382FC342CB38E2F3D8EDD0DC5919433386D1 14B708E1AE5F01C2F08B8C8741D67BD1F02B4934A76D79B095AF43B68958BDE13D0F570B 71128A40A050BFF9C5D944C09A4B5D8AD0758B497771699B4E577436B15E31EF7D804663 F768B9F5C9829EFFD5B479E1A0813E49D48705EFCCBCB2B23A7F0C39DAC69E7E35D7F4BA 770945D9F36A39D251B6CB76C88AD374E177B0F9D703865A69CEB6C0157419E781888F73 47D0D641C43FF3521C3F380E26ADA5237ADE8C5FEEC8AF046C1B46903941181D958F16D1 908D95A62869DE2DFD0AAC4D7441238B2ED50CDF729B10961883EC733F806C587C2D8F7D B205AA3E7F6E34D5A2A2003E8CFDD22A63DAC1B04A11D77A6830CED7D9DA87BBD9E8D278 275D1626D31054A23E9283FEC3D634BA1544AC5AD0E28DBD03C5CABF697DEAAE65D6167D 0E2EC4BC6C3B91581AC32B45F7ABA1B825848552D1413D1B5111168959A23F54C5B8E5E1 B49C4096D5F546388E1279891E01D1FFDF63940F7AA520570B408C9C2CDA7F5A4B058919 53B35D7523EA69927469DC90F6D8E15782204AE32885DC6BE6107D5EEFB29F69FBFECE44 70CEFB37D0093844BE3ED424EFF064CF724A54B6B720ED020E70ADAC6716787FEEA1F22C 84A5E59BC6A643A29F50E3B76E6658D5BD8CA3554EA68CBFACD0CA0882B8E3389EE7945B AC71B219233EE299C4C8FFB3BEB77BD483DE2A89DE4E697FA3A057EC47448CB99A7F1696 00BBE4735D36408548405A8D4CE4209445DD0C4FFAA271ADCD14DDAA1598D44247156649 1009AFC9B40874D4499857EF50BA7038F25A2159AAF9AC535EE1BC83E515D1439057F042 C62DCB063AF8F014090AC771CC83DDFFFE0336CD4F14E3B6397E7AA442FF3C385A5A4B59 2080801CC0BD5EA5F608A7936BD16248E3CAA7B49A475BEC9720EE44A06921A93375F344 013752C467DB023F3F01FA7F427121DE5C4AFF495A06932C52FAA62C043B22ADA265BC90 61B7702F9E44E326B54A423A472D23817F6135E05C1DDE477A9E27F42F5555E8FC22060B D53ECBCA45C31C09BACC68EEA5126EE5E73502F2CF42BC5916B95590B778D556C4DB817B 2780787590B62405840D01F6B5301260E1EF0856219246C2CA7FBFB307FA728241E9A08F F8FE0F6E708228172358EB98895B3C3C7FBAB501BEA9911A6C6769456E491C89B2FBD751 C9339E174850B679B47118416AF8E849438FA52C4E2A0D1D8AB94385FED3747F9A8E78E5 47FA728DA9C44F5D2296072A8ED789FAFFD237802988A20A8C16F78A50D2AB87A2BF8EC2 8503F757AC6E9E556686A37D84D7B9DD81345E70D212D3D83E7D074A2BD9191D05205B27 56E74664E1C3169AA601EE6276EB238E3EB9586C37ED4089E5C7AF97021FDADB6AAAF8ED 54CF169A574A7A6066EA74B3A255CFE9B6FDC2EABF4915325BEC03173370C41B71A65C08 C4C809A78F52E89A27514E2771572235B8CE4E21229953786A90542924444BF56C163D41 BCBDA2BD5981499D1BBFC7F7FDCD4EBAE43341EE9EBC04A5B3E86ABAACEE27AAAAEEA722 63298EF83E19321B7CF9B1FAE2520159C2731E6023FBDDC81296BD2303788705D7A6FF72 5ACD9365879F3742C0A375E23B124F85E2E533F958EDD9CEF05698E4F7E2C035EE665851 E1B9B324D381BECE9AE126892F2B51826E44B80DF026FED2832BE1414CDC410B142E9248 380FB3EF59A1CB8944C21E3B8F0450293E6FCE004AC4B002989C877AC2648964D137D881 7C37A778E0EB56D243F6606A883875808323739C0B55B5F82C5BBC389566B7C24604D9E1 9070CD37A2199B77BD81C6C0E4317AA361CD7F3D4CB2EEACF59D09FCB317C2E5656DD9EE 54D8D9C2FE364E21FDCC38F9FBE33457A70B75A4F9BE1DF8B6577B9E103F2276B77BDCA6 0AB499915F331113F04C81F9572AFD95245AD3573A195D9CD1AF7D26FAB028F7A821DE62 8132A99E8B39D4597457CBA2281394CF68069397BFB22BCF992989D8AFAFF25129A9F9CE 040FCB4752291D822EBD224DAC909194EAA4A07FC65F1EDC6C2D376190875FB8D2D19820 7F71663705D83FE18CCAB848C11C5E112193D753B6A2BD9183054AE6021629E7927E4064 9CEB4114C9B59F9827B98A70052FB67B5C45360C9C272DCD0C7DAC2A515707F6B63B2718 B53B84441A28F777122D848B490C796185AD91E8474267D48B36DA7E3A7F70FC0F9319D3 F937FD90AB3859794AC608FB96E283ED974159234761B8A114C8856FA00353C44D5C3976 54488B0CFDBBC5A243595E2950E2ADFF06568551EC636B7D18FC1E68130F6623EB109415 5F58F46A636EB98B30DE84A313ED1ED0EC0C8032B21ECFD11F2292A31E24E702D4723F50 632F9D91DFF52142CFE2749A16B5B81F0ECEF869A7486191A3A910AE94C24471231B733D FD6645C3856F341C0E1ECC17432635133CF66336D3C2C4F103C3EFE59FC7E45545A0A5A0 CA19C0DBBF2B8CD3CBB482CD5BA7EBCA2CD5AC9E0C201FA4ACE28F00EB491ECEC3871AA9 C0A303D585F94FCE1365117A59BD2644CE990F0A04239ED4B52CB5A0639BE554A2FFB03A B9BC1E6C7989680B41BE26D2B01EFFE47819E737BBDB28868E0CEA2FFE4C7300B82E3016 3BEEAA5EC834B2A2509BE99FCA5B087861C63EE1F84AACFA6FD77543D91C9C2E525BE531 C02FF04A1F50C50B1F9CA7157F8A7787DD417868E48A035904BDA647EACC821F0ABB4053 F19B502075211F1E1BD2714EE43D1AE7E19F8D13354D331E1935BB1246544EFA1DE7390F 7A561A6CC3F48C222A9C6C0B3A89714A16B3F61B6E26E3238FD641D431C7F6EC8005ECB3 113C00A96AD8842746CF3D457F0F951D90C797716C3E8A08059207DBBB40D9095D8074E1 069E36841ECC7EBF2081F293C194A044F5FD536D0F3B6551AD3CEA2FB84A5A32E20E34E2 CDC9AF5E6839C3521EBECE2F4B39788F313FAB6D0F089BE45A7F4FB021D15C2661BA55F8 691E8A9E5AE18FA617E5AC262F24962132E051BA7DDBBD3C5E7B3256ED5BBF7A670E0091 B3AA0F6860559521C858CE6FC640029FD9D5FE03D1CC485A27080DE3BA08A36DDF87C81E CE731AF1CE3F87FB19F91E324FF044110AE7C39110F9787C7F69E9C09FFBE37BA8B3DD17 9B1EA5E176D6562DAC43992B8B5AED68898B6D56189426727100A36D92E2CB96672F58EE EF30E90EC2569CEE9DA1B590F16B88E5E55FAEE2477E36E9CECA4D4DD9E969FC0D27CB94 B5C3E738635D3C9AB4A0191CB553399EBB25D1D43DDA545A732B66DCF18A913EB214AAE9 A408BC1E04449C07E114142FC22AC8639359B2413F3ADF5303088B00DBCD6AAF1ED46964 F749F420207CE7CB3A27A4C260E174E17C6892695B3167B65271C232F1C67BCAD83B0216 278FAD19834B58E7E1A2813EAB45DAC586EDEF11FF9CFC828811CC290C4EA40017A4BBD8 889D5373B0002C0DCE55B2EABAB80E58B4341F386781264AD72C9B251255C0983AEB350B 03410B4C7E7E2ABE655E3A7AAB548D49C1EC489006EF4167BE2EA41CAD999E4CD6328ED0 726C61B51EDF0952909C38480A6E801ADC241B50A972D31C7AC63BEB3746172F1CAFFA20 D6E1009B9B1E79308ED3CD70D3F2975B0D241D8CDFD191A934E83E0BF3A938E19B3C461F 566B19516C068AD6BA4DF7CB37EA8343DB1ECD5CAEE329432E15147CE61AC4EEC2866463 557C05CD59FCE1659245B7D8AB628F2ED8B24F6AD0B1AD37797FC20C098445EA1F43E3B3 388550D0AFD24C74AAB269C1FE7596CF8F010D665111305ECFDEF52E89C240510D5D83F8 FFC38DD47A537F55F7F79CB460F36812A1E3C26E8A7DD6131DA076BFA93D6C03E6E4C279 D720B41A9CCD6A58EE1BD43A3035CDCE464BDC7CEBD79B867F30B0D15400B897A5ED7324 A4A75568BD1211D036A5710F23C7A2E1D3F7E45C929FDA7ED13EFBEC7604427BCF853F92 D954E627D0ED842663CFB64A2A6358C86F80FFB6A955C17B04B096D76B03DA9660D93004 C44AAB74C40F99C702BBF33C4FE471ED4E6A0ABF3B15B340708D5D16FAB80D1E51F7D1A3 8C7AC19A871C5D47963CE3CB961AF75A47C09B7AE97A3EB1C16D64D12A0798D5CAB48F68 0E6B2DD1F7BCF7FD97719CBD7FCA4BC1CF31640675AB798F7A7CCD4E4A109E0E00A806F5 8888F7A7091A9B7CFD350599C9AA0E7F679AB200035F48A57172C499737631A4F442F3A1 BF5A3E5A2B77E02B66768DB9E76AE46E403E0E4BFBC1F14256ECD89BDF623F266389DF28 AAC38991DDD4743F4A3B8EAEA45BF38EEFD1B7D3998B9B8542E78EB9FEFCB9D256EA8EA7 6B56BA2A4849598F03483C59ED550D3508D12B35E4B82C2703883BBAFC0885BAE8B1440C D2E368939FFE45BFEB172FCC597F19B089FC567332C97C3567C9DA05A3B99DADAB2BA61E B9CFC9C1407322118C7B7BE2686FB5DBF0D31C5116F2F232AC8C3B6B1ED3E36AE2E9A638 1E714212A76D2733DCF8F2BA8C1BB345A8B3D98162EE87C308539AEC3EC8EDA6CFDC423F BDF208A89A906314950C1877A12E14C1DCBE5033474850128DFECB859E33F6EE578BB384 DDC252AF788BD61E95E5375D134D6457B0A4690D7239440FF37E9F67CF10D1EE312653A0 22702614C537EE7FFC677F630A079A98139EAA23FA2764B1D37CF5360002711890C12374 CE980C83FF11E102C7AC31E4D96862CD3B8A77FB59FB8F3932750F21929B00912332196F D9AABC0E4703C7BBB695FB1EC820CB6F69B9869FB819DD43AB4000BF70FA0320B5D3D2DF 8801021F0B0A45EEBCA8BFE6B616DCA4641358A4A18CFC749B17058929CAEFE146183C73 BFD0BC668BE2EB8CC7003FBFC5F79373DAA86E4D9B65953031DCED7595D7779FA985FB1F 176161B955D22591CD434DA21E63FD9DF743B49B16A5ABE84E74293B1CE2BB4E2481770C 9B90A6641984001AF9E6DFB280D37922ED6A77D3C92F9E0F82B4CEC5FE92CFDCDF708EA3 47EE98261C07F434E88A2042877D47C813992A1DBED99A6898288156CA26C7E473988BE2 F5EC8DDD0FEE7D552832B69523330C12C6F0A307CDA286454EEBEB0B236AF69390B6FD9D 3546DE7015FBA1D36B08769D5DF07FFCC8AAAC31825F0F515813221E1D467F126CB9BDCD E95DF5C7D64FF789BDB3A3339130A974D96606CBB812C8AEE855F29C5BDD9BA49FBDD481 14DB68A228B685F35B5C33A9CE2CA9E0C30690831780284D6A75C9F9D86CC5A492EA5264 09E1A2736EABD5FEF257F027B7363F8BF39519DB2940A1DFF0B3DCEC5CFBEE09633B4DF2 6C29184ABEC66BB894F685BCF2AAF1301B1AB15398050C86A84E87491489F15FD2907D7D ADD73C36FD0F7A40E021077CDD8AAA237DC9CB5E13C00EB7E91353BC58E0B8870BB319F5 074B651F0D5179AABF87D023AFE75B3AA68D62FB959A5B6EFEA8D204C09F72B038A8C5D0 9977F1457ED158E3BB57CE63EC2EE4577DE42F9D91AA5ADF0460374A36C972C33616D040 2D8C1257C018B736CAD8BC182ECF63CEA524C8B3835E9CBF7618D930717C9DF018778787 B5BD608E6DDE644B3CEC092A232B66420872C1412751FE7A72D604B7C01CB200506DD521 F45DAE82F0C7CD4AB3B8E2E1B5A9B3D13546DA5A45A3195DC9A550D428882299614F9E8D 47E1674C7A95FE4B8E5EDA9D9499614A78DC322870B32E916C14088CFA3A76BA4F7CE4B6 5C979130800F2F2D998F48DC5A2EC1CD18496402265677FD28F48CB38145EBDB30D2BBFF 15CA9FAEC6802D7BDC7F1A281DB9A6553B7D3F757A1FAA6AB91C0D31757FBE705EFE4C71 AB0749AEFFE6768B35A0AC03636F4757B38C2F4C0A78EAA3557473913AC1AD37B72E79FB 75E2DA3A4A7AA867032A952D519BC5FC9BB684D0F21A661DEBE79B1C1513A16D8E32EB13 E8DBB3F132C87ECE0972BF63001E8B9DC6C3F445191D536F8983B142BD94DD8F41C8756E EFDB106BDEE3224FA448DAC03ACA80AE79B7DA40347D3C3A643B915C51BFCB861438C546 1A59FB26B538BDFBB8D7DE77955A8FE6016F770BAB928D277CD4C2B3FD3839FE75308F21 826B36084E485927C5DB75AA7B6133F468C71D218307B40CFE1BB6AD24E3C2240EE17084 AF6C1E0D83CCE1699FDDB4763BC15F722D0383F5F4638785268FC439EB0A8C6B5AF7B938 957DD111A83BA935CCF13A9DCBCAC9188CA67EDF1A6D18A34C956DE87418EA5E4796E59B D981015C8D276CF4D8884AE423314AD62781108BA767131E08302A926C44B858B792DC52 FBD6D15B5E9C4CABAA159FB5BCA5CAD068A5A718613598B518D015D3B6C43A01A5540849 EC15F399A1DDEA9BDC47B409B10067FCCDA5932FD02BEF518433D8E7C83BA8567A2248DC 2271BB39F07414DF7655BCA33FA7811592168ABD559F49EC0F7968E87130093E607C2F1F 087154DA681D1C92C1B5EB87BFFF15C7DB4F8E319E42BDEC5B95A2F816BFC0A0CE997CB8 BCCEA3DF23280D4C922482CA09EDA8C31F9C5FD9C22480DE591A3649A29F0293F976F366 7A66D3923D6BEBD0C1A1F06C11C2C4207B2981E91DF0C0ABC84CE8B7B23B4837C51E2A94 A7E3AB209AB5B99D40F39B1DE342502818A23235455B56BDCED3ACD910CD92E9E71DEF41 0E3A01D9B7156F9DE0FC8916AB29D79F5B093C1CDD19CC1FDD6FFBD050ED563CA3C60022 404A2E53E9EA3186A3177A57FB4B726DAFA37A4FD45D2C191E3E771C0CDA22EFAD7915B2 15CCBD2A35E04CDF4779FE80B980ADE2D2E71B8F936D905AD7382B08C43A3ED6BBC5578C 80417621C7A3A87079ADF2B635671C36A1F57B971FF2918E14E80549150AB492D9709508 ED98B983A9D40188F93847967A10FD16DFFE2C1276EACD959435C36899210DBEA62023A7 ED706126E4E5E005B7608F078E3F0A42E87C84B37215F883E0F078127D47C4B362CEE951 69F92B2887F67A3F1D02BEBF0277BA479264E7AD5E1087F613330246606F4907D3BA39C4 644B7F9BC608BAC3107D9C66FF7CD9E9D624703055DFE0262E96B17BF017579001A7EE29 4F4217B697CD9A397D35D8CB781D9FE282D9082D273AB082CCD017D7843E1AE3A41613F1 F69AE113E8A993C83FFDBEDEFA92A9101B54D1AFB5BC7B41F3AB3C610E60AC17861E45B7 34D7706BF6971921CF0E5344DC613EB31AB4E31775D990CEC15AF459BE474959EB24CABD ED3B7D6A6540AA81B806D326D7614808FA2039A6675AC11F4E90EED294E867A84116FB5D 89BEB45F738B1275BBB4106108FB19D6EA4CA71E3B0C2BEA1EAC19D27EB928EBACA9DD62 75865C4B86025B626202116190ECF58F149257C62C70EEEC110B540C636BBF747801A21F B32A82CCF24062325AEB3B5DFEDD49AE625635C34CC330A93F1029F3A3A731537A0BF076 C938773406C1670F4976AD1AAA5D3629EFE797A1133A683FBEC7DB8C480B32CA888ABB6F 049CDD5D65EAB1E23EABAEF26756618BF3CBA5D62286C938D3F6F20C731DB6044B89AF92 F58FE18DC156E0F0D7A548C6D838F57899D7A693A6D158E5B9A19D4CCE4CE574FA1F9570 7092879FA2C3F4AC5F223E3E0A174B97BB2CBC7815A20FF509B43D6EA17D515BDD9B3CF9 4827C88EB2AC1FD13192752DB92070FBF319E4DD93EC6C9287108E248BC3F814CF3F85A4 F6EEDCF1B78BBEE9987BB0767968894F13E299C79F50E052B7627584F1C78BC8EA588B4C FB6C1204AAD2D47B42955EEE8563913BDC8167B5E82B48F3243F218E8832BCEED22BEEB6 1B434A2AA2E93CB5654868F0A7E049852EE328F6A555AE92CB23702AE1B71B5E6EDF1BDE ED68CA1E96EDD0A9B214C02A429479FE612C312D8B8BBE3DFD711D25D816709B78125476 4AC1676AEB53B4CE261AD842C485829A8DBB25956041C5BBACB27B75F0659622F2791718 110991560C261EC4834C976182843A56DC1918191840DFE95A5FA00624A6C24228805545 4E7EDDCC9CA865B10991C4B73BBC16BBF6F0F4D4058FE9163BAC69EFB2A3269FE9F2A092 BE8F9D59D9AD9F434998B44AB3892EA4360C38BFB150DA95EEEBA94B419D9D126410188B 475E794541F41D5C9D12D96BEDA86DF04640E6D766F0276BA1D0EE6E3B47A758D8D2D6DA 90B97B6ACFFA7D7BFEDF0BF7101F32248C7C72560F770D52AFCDC8F285846E00F5B0A83F 346B85D71DD49927304D228E2BE7980904A813AD23D5EE752D210FA2EBF72200914C8AA8 ACD6B586437EAC4287C0D3C569E1969E71797949592DD7E1A65096819C7F3ED6218F1D0E 6FAFF3597787C9AF1C875E66878D55C64B2140B873C14F9D344E80F6E1434D0814B3C55C 7FF47038B2DD9104B7E836E0804B3E4042F5E1627E4C871AF0C42B498BD34475CDFD89CE 72E8D6DEAE27C84CBC4270348B684D5DB84C025A0CDD01F010F345ED7C75251990AC320B AFF49806BAC46C8E87895DAD7D223A89AACBC9745439B6FB5B8603010AB29F2F9D3EB3D8 24E2471720BC1ED2EE9BB61682AD6328D642B131780AB02A598BA9806C8327C43E1880D8 37C5CDEB36BFD7812569F2FCBDF7B68934689238D59AB7D111FBF5BAD7DB4E85148373C9 6016A50269968F2DB4824C1BA985C6FF1AC4BBB99F57232795F390BEA26222E79BB218A2 23E68505A11925BCB27A403E5D27C9FB0EAFB29B7B6396CC58431D267FDB5DA11A64662A EF150E3C268732F5EAC6C2FDF28FA507531ECAEBD55F4B0AB89D8F4C4CD41EAA211EDFD6 65091948FF530681FBE7919E476C4DBE1397C51E4AA2C4BA1F0BBA3ED714E766E2638ECE 21B08E93C2EE29FB886C75B9436D2ADEB232736CFB5BAEED34EB47FF78CE41C6444377DE 8B7970BB19E9B52F5422305F14BB7AF0BF98F46D1D1E17B13E679C99112388F39827338E E36498823D40CAB56D7C2749AAFF144D3F89A703F2F416C34592AAA4C6C30A96F3287868 CE6F6EAA22A55E06F5D353F441E62A851A138B6E26631EF586EFA6952D428AF7D71901A9 7E5BA59D462E10388C233E191AEEA380D9E2E23579C4345DB63F7691D0378F950B9CD2C2 C0C17A8CF6144A7E81CDB3A5DAF7F2AE6A5F92E6910CA0D7A50569EA890FF71DD49D5012 BD3FA623A1331BDE94EA4D2CD2C538AF787632B6339925FD6CBFD8ECBA7CC464B31DFFCA F79AB027945A2C1E9C058ED8F0F3221A0353961BB2B2EA75876B74EDDDAFB7ABFEA39F38 36A8E19C9372D3CD704A19B301BAD2801B16BEFF75BCADC90D2EEA514A199105FDAB37EC 8A75B14E67B638CAF1ADFBAF70D38355A66B513BFEDBBA2CC6981C25E364297C873C908E A288D930A8A18AF24C38B92F520DB5A41D708A438BC39356730D028198A08AD3430237FB 8EC675CE19EAF97C06CDF706B138EAD722EAD2C7C6108A4C474210CE38A7A4EB0FF573DA 59B024BED3579A7C870AFF17EB284527030EAD8F515D18EE490FD5D32545527F38BE7B7D CE9C1D1283B1771AAD8953E6D89EBC068E1C42C8431D6EC365F736652C4D74C627BC0689 A3F273D9D9D94FF32CC504AADE91D4E17105EBA804952F566F0849A34B4E150223E5ED27 786FD43209CC4F4EE8F4DB98D2C1DB336AE17E745DD8EB3D95A9984A632475430B0E80AE 49A5118C73F0E060C7AC98A8F03E9E7BCA9492AE7D5CED0AA5F177E5EA1F6FFB5AA43A13 76C8FAD9344ECD8E6B64EDA15AA52B37DDE5AEF3242C236D2C5B401000EE78D62A889665 2553636E765463181099C47679428ED39AD2F77F8F35DC07A726666751D8DF804635DB17 C4A81D61036E8CE9CE5E441226584EC469082C6C765909DCE05DD9C9D932F295EB587B37 C7C32818BA4126B809ED89CEC7F14494720018DC93BC5F2635B5F1ADECFC9B4D2B028FFE AC248B2663FCD7A43E5468B43FA11E3BC439A5B519DFCDDE7403AB81F0771A7D85BCDF08 B2C1DF316723EBCB4FBCEAA61454F48D6A354FCAA92E58757D9CE79F92166468522C00BC FFD765E0F3BCCE1C41E1717BDAD21746C86310CB9490510FCE6DB36CAD377215650FD82B 9E3FD5E1188EB4D87A216B9B475DF5B634C39C87DD4B89EBF8DD52E7850E680F9CC7E610 774D1F96C682B067FDC4456954D74B9D1FF2C18CCB9FB0C059517D174974D58D3376C32A 53A2F6C1E6844152C3EB1E954A095D9EFCF72158B0C58A1B55EB29741FFD07F55030A9EC 945C351CEE57273FBD4ECFDA6EB2A4FC374E1763B50648C68678B5FB5CDA2DA8D87EC85F 738F2C2F2DFD4F93E44CD2BC2BB5B8103073EC603487DB06311F97BBFBACF934E3524EC4 3006CC8A613AD9DDADE1023D0044F0C27F577900A62888C75FCA2B1F7DC59683028FE95F 78039BACCF4E9710D3594B1205B5B08AAB01B04827A82516467C561E80484C2AF83781E0 F947645951BC5CA167AADE20C8AE192CF9F800C409971D09BD173FE2FB130D8C543F4B57 D7170BF0146B6138A12D9B04B717CB244E68A023E96E30918A1CBBC4A17EB994398BD47D CE04656333D38F705EE4ED3A75E569A68409CBD18DF1FD537ABAE8E5D4E67D45FE12CD4B 5ADE49AA221D208F8C0C93FA8D659A01F2B9AC7869AAB3A69C1DC5B48FB8A91039BBA6E8 3FE9985115B0B304F0E5293FFE5BC54CC84840EF951EAE7E4A1F0D4D1231E0A2F505F54B 9CC2E373991495EED14DCF911DB949E4FA0016D5DD8D1126BE6A149AACD3B51F26347320 A064FA81697B41AA19D5EBB8500022559BBCFFEA94E6F6F5C8755D9B669418107341FB18 6855A75AAB2D1FBCCD70DE7120277E9B9D8C9BAE1CED962255F61D28EE29C001D0758578 0B24E2F7B0CD7EBE33EE42A55A217C5832730B414D5109844A5E9934CA865AD2AE9127C7 CAC28FE451C17A44C8C79395762EB7747B2DD7780DA0B2145CD2732B2D62724271FE4B5D 96B882BF2C73F1E2BB9D700B83CE16AE2D6AB9726E12B09872EA940C1FADFEF125F89D09 1FE5580E48ABF5493F9D8CC50CCCE629D6F8ACAF3998943225C5D2D795A1A10E2C1AC6D8 B057F4A8225F0B24E4D6410F4A38D75D14601250E427EBFDD43AAF5E5C1EE0CCDB6D4504 E3F854ED2EF4E8BDFA1F7422AB86B17896E6D3D0B14B81C515B489C3BE5B471461D6901D B39949A0B137BF9AF0C3A8124BB3FB4C1DC43A9ECCC48DB999E5FEB94B60DF942AE440AA 4E69A70EEE8860EE2CE8570ABFA7519AC16AA1991540596881033B01CDB54E4DB401430B 20696CD808C73AEBB6E61A5C41C96D7FC338E6E92A112ABF427C6E0EB23E278B3E5967BE 13998C6786382093F74E2B067D428E9877F44DF94F6FEC76109987F3D7F13CE7C4C24648 61128BB2C51BC858F4B87C3B3938698B4CE4CEAC0A73D872D5A43269B11B95D85FDB1F49 545527BB2AA699944776B9A623DF59DB1B3035A6177A713667D78F7457C950D2664BA6DB 1076009612A6806B24AB931A8466BE6EED4BC7776F1AB926213490BDA0F8E65E84B960D2 625E6FC88744371574FC22DE9CAC8E37D0F0BEDACE16C034A588888EBA681CB89FB9D2E5 3F04BAE4629739F91C372321D3F2653E4D24439E6B8AAFD71184436B86AA3D9C0B170A54 728385BF8B6ECCDB25ED1D3363837400E80789F16FC73CD235568FE7F51385693E41555A F53AB56069EBF4F2B5D0C7859E988DCCAA37F0AD98EB34169D3E9BF7C664BE123640569D 89F1C34BACC3B967853750B3627FD055A2AE8B2BBD6DDC2F6AC54BC7FF5122A540D0D200 FF8FCF17DFD821E8034BFFEC18E1CD7DF35D4E1D80614347D92743B7CBE2910AD330A5B1 C1D5DC95379F601A289069159AC6183E283257AB2C97C8BB3D6500B012BC6A9F47B0A57F 2639AAD56552486847B304AD088CB8AEB07D032C4C275029A69563E350F3D64A67A7B88D 561AB9C9DE1FC593DFC448FAD9E42063AF99A70DC8EFDB928FEFF2225FA1DE159DE073E6 3A55D312B9B1810B375E116D79617D0F348EB2184E8A150E94223C792193E1A096646EE2 A0D82C33EBB19E422988824963C50BAAA8598B9D51DB4149A366F621852EF0B17B4A41A2 3436A438D8E65735F6B4D1E2EF89A12E4002AC8E585BC407EE6F34CD2D7046E042C463EE EBC4971A00B9A5F29102455E787BC66620D627385BAA3812F6B0BCF03AF1728064E1A8B7 D7F5574C5DC22F5C0472CBD0E351F430823302827B31BF2338D85F80DDCCD3EA5E49B9A8 8B8BBE6B0132C8198DA4436F609C27D13E7E561F05E783F04630B3EC03272F33E3F08419 D5B4C16B386DCA42D17E89D7ACF46F6F4A79BBA082700F7F98327F2C7E62D8B1E6BFAF8C 212819FB632C3DCB4AC92A8A0F94F350FB0BE0C89503CD0A52B3AE4817C2CA7193563FE9 20CC6F4E24C116AB47AF0E3313702E1E96BD9817C1297C30FC7178314E401E4CB3847ACB 1CBB1A672D928C1945E6629F626F66A679E9E39263C3A6804BA6A7D18F0CD0F1E01FEAFA 7786ECD7026C94DD0310F20E8BF525CF5EB072E1EE59E66FDBF54880401F7F66A4C5D019 297B0EF4C6D3478BFE76B93FACE72F5CDEFFABEBD78DD06E377787E873CB76C7F5130748 E42599B216AF2254DDFC5AA8146EA01E76FFA094DD65EBF264C301F1311A53E86082E20A 9B5E98CADFA0A10BE2A96CA3D0A33104911C1EF4CAE7E4E7CE3F6A765952D3E72E914DEB FC50474634A05EC92FA59914A798E42044484FB6F7E3E5D1AF45828422B971D5E7B91601 848A2624DC276C47F14441338E47FF6F1741A38939A8B75ADC8702F0553ACD787BD49F4C D4D2CA40759C000A619BE27C2923D72438EB49D684DBBE48DBC67AF1935C9833B9E25252 1E2869C7E808FC1ACD822659AC94F94FF2E11174FB7A7D199EDE962C61672D9F5D2C93F1 BC99052FB782D94B08617E3C7BF232D9EDD6FD466A2ED7E55318F6E789E4A09F636B91E9 6EE41F556224A8108BE1CFB2A83A57BA6C8995B6F7A5BE1D454A18CBF2E71FFC4D23A3B4 9A202FEFF154CCE053BFABCC83CE4FE091E31B4759761F3D535348EF85AE276108592DCA 9A84E1EA28786F871636712C1B85B412DFE705AC768AC8F5B65BD49CE921CDDB5C4D41DF BB2A7F14263AD2295F25ACFBF3F621D19437F0DDCB174280EA65836E9DCE638364E04085 29F239946EB500E4455E7B79A412EB03C72D7D18A1EFC6A5C86AA2987C43E3987A5EF3F4 F35712C790EB5137ABC92B2DAE1CD4E06E21B0DC03E2503687BA0DB73A4DDDEFB41C3BF5 199ED14731480556C59F1127993C587517CC2406EFA6529122D90D9A9E4C1400B97B5DA0 3A17AC4C5E238267969046365CA9ADE8D7C76746091704DF72709098602891ED11EE7AF8 FD7B26DDE5E9CBD0BAB0E2E8C2B6BD49F2FF4CD016EE88B55F087152E7B2E4F67D081FAB 847050548D26D0FE5365833D2A4791018284552C1F40D9ECE2605A3BE0EE2ED5DECE4D4D A8D5D81ED6101786D8AF3E5EBEB78FBECD7D3B471FF8C6900E12D0F45671D44DA582421F 9BBD5759CDCC9FEE1991520E8F84BB8ACA4A370237E4C4FF92BE8EE6C307DFC47078E167 DA4C7B2740B9A429012F4BB8519507F2A18F51BDD82168B9576E29531A5B26CD7B0FD7DB 6E346CAB301B33CEBEE1F3D61D73B7D6145F89985653445FA519F91597A0F984DADE3094 7109124D39A2A7E6D1CFDAF96A73FA0849075111F1ABC010A6871CC05709441C20CEF9B9 A9AD1A8B1C207D0FE1E7D9D238D0A65EDAFE0BB3802D68CBF0B4CC151A8B330DD04E07DE C3329735761D7FDE1ACC1B0E86566891E6AE571EB4936A3BC13A3684A52CAF7B7BD84C73 C68F436156F5A1F05A1898FEAD0F35CF7778CC824139B47484C71C4EE3625F86D1B12317 7620B46984D92F7C1D38D392F8981CA76FD1678CFDD43FA5F2A5B5F92FEDFF593F699866 F063DA7E0AD329FF3C45A2236A3F7A6D420E3A66B2BE1BFBF1CC584BE3B68BA2714DB085 1B803EB1A075C6B1495099C0A5CC7C51369BE2A79E23D793BCD72A8BD7DEC3E180ABF90D D5D4137A796716083BBDD2C75EAEE01531EABFBD93F8D442525DD798E799D7EA30AB15BD 9A20FE527E524FD7D6BD01884C12044BD7E81DE8293F50F63201D31838FDC0C7B20EEB93 2372EA2F80F325EBE41BFC037B9FFB5150E421E2E785B5DDB910C3569DCE72A9441AA858 D0325B3BF2FB3FE83A3D558A63AED58F48C5ACD609D5E1B048A6B519E061E601F4387F03 7049B8CD97F402EED07DF88A9FB133E9DE42A205727495050C9C6B9D346E0B159C704A3B 99F4F4A11A7B530F48BA5EFE0C6141F6F973C844BD43119D3AF52E22D2C6B615E53FB90B E1683719BC94124D51559326EDCFE600F75B0427CCE88D215A5B57F6DC59F504F2A7AC5B 2B90F94AD673C8872A03DCDEB8712634E1BA3CB2E227ED6535160B62FABBC22B7FBA8174 70E62F61792B40AAA5454010B2B008FB1DB7C11038CB98C8CD5401C95DB173A4AFD3CC0F 7E5F19B6DFDC8BDF118786ECE351307B0E4C30233C0177781085FA1B2C5D1EF51BF9490B B6D1CD1C18F0782098F9E484F9420D635C79D6AC0740B7AE70BBBFEAF8B8958BD921D2A9 798546BDD7858F810FEB5D84CF411AA3827A50420FE741BC3812CDE1865F4A2EF6A25A4C ED7EB24CCD38095AFE425D3B0A90539A1CD93DE3F35B020D047EFCE7E1C5C18633B419A2 1167ACFD3CC3EE0629C0717AE994F151BEFF9EF0AF6E0F14358FBFBA8B61D669ADA8C47C AA03859AD7E8C07FC39514A8A85E5C5D02B5DDB48725BC15B70AB80FF7F563D481106810 D8DF1EE07EAF9DB56374124F654CCB454E3C7B0BB490E0D9CB50460E1857C32C95021954 35C010736A65A00FC28A348ECD4B494F5FEF4D236FBCB951535C546F248F0BAA11F372DD 67F838667C2657A7ABC4631530F275D7A5ED73DEC263A1749630C251ED3F5B9708876730 0ED8DBD0F588D874267EE87E8486B700B58DE87DA46980B752B5EAA853699AE65D50A6D5 1A41D217244B8BC5C39D98272731E8D605EEABE0E6E487BC89F5962D2423DAF0C580D424 719EBA7E9FC3C8C49AA2ED9BF1B679C51EC07D7C4F4401DA63B66AF7061BAE89C443718E EEA6FBD03E21DDAD5A1B2C251FF101AADE3FF3243F71CA14F19F71E3CB8689BE24E506C3 C2E9BF2ADC82BFDBAD0C07082B75EAE1ECD31A8B90B9A582FEC64B65A8DF81E54B867EEB E71C191443897E25FAC6EDE419F11912D284F8819AF00617BB03330055E5C49023BD472E B32FE903E2C3A3BD9452389DA13CB1E4662ABFE88ABCA6DF0E55878CADFE425B8BF42313 9107696719E947249B70C02251E24CBB3F3E027245651181113F3C2DDA0FF61B1243B6C4 CDB870D3E05B7DA867C1853A6F8E53CDDD654831048A6F58EEDE299A70E0C18C02600DA3 7D1507535286BD1C167BF37F925C8468967709EDBF94DFE0BFCFF11F0B715C77BF1FF7D7 0BD8258DBDEE61ED4785F85DF2C52157FEC3C01282226FCC96E0ED8CDC8874A209E54A9C 0E8EDA0887E0561CE0B3ECBAB1019F39132E6DA0FE6761379C4424EFC66C36EB4AD7D125 B88A0A7C19ABABD4A60FBDF0CC1414A77837EB57609D6E4C5DA8A37D18B05B4F755776FC 1930C15DFA2B545D8DCC65B7C8C4A3B9A8DBFC8C64CF90C1047828084070516FF3897E5C CD223CA4E5DE09834C960D0483F48156CB48B73EB3387A01208AC9991949027675AB9AAF B3D1AE8791DDA72EEA9053C50218F89B65935D6E40979F583456658C00C593034A067B3F 5B9F7177E6032F1F6BC96AD544F8B98472724D7F48C91D08B4CE91B5EE736A22996CD971 34E2D4221E0891CA4C8708A6059DB1C48350106A304F7000A1D165D44CCD6F6EE7EA5434 4F5506C13BA5D12A04548D75D266E0A027DE905EB4DF15ECA1CDFA1D4EE0B9D650AFF4A6 3ED6A0AD78D63938669B505CD5B799DDB4A3BAD89CAB921F18D26DC9B581B0E28EA395A2 349B5909107EE11E9CC364961A335C913A34094E63C9163E45A5FF43D3B58E5101E8E2F0 AFCE604BC96F676F942301846A6F3C54AF5A4D60F37B7A4C3BE982FDEE76F0B8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Helvetica-Bold.afm0100664000212600000240000007554207477306250016351 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Helvetica-Bold FullName Helvetica Bold FamilyName Helvetica Weight Bold ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -155 UnderlineThickness 69 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -173 -307 1003 949 CapHeight 729 XHeight 540 Descender -217 Ascender 729 StartCharMetrics 316 C 32 ; WX 278 ; N space ; B 214 0 214 0 ; C 33 ; WX 333 ; N exclam ; B 112 0 262 726 ; C 34 ; WX 474 ; N quotedbl ; B 50 470 424 729 ; C 35 ; WX 556 ; N numbersign ; B 3 -32 553 697 ; C 36 ; WX 556 ; N dollar ; B 22 -126 527 763 ; C 37 ; WX 889 ; N percent ; B 22 -20 863 709 ; C 38 ; WX 722 ; N ampersand ; B 55 -23 694 723 ; C 39 ; WX 278 ; N quoteright ; B 66 469 201 729 ; C 40 ; WX 333 ; N parenleft ; B 40 -200 303 729 ; C 41 ; WX 333 ; N parenright ; B 22 -200 285 729 ; C 42 ; WX 389 ; N asterisk ; B 23 407 357 729 ; C 43 ; WX 584 ; N plus ; B 50 -10 533 473 ; C 44 ; WX 278 ; N comma ; B 64 -174 214 146 ; C 45 ; WX 333 ; N hyphen ; B 26 207 298 342 ; C 46 ; WX 278 ; N period ; B 64 0 214 146 ; C 47 ; WX 278 ; N slash ; B 2 -14 275 714 ; C 48 ; WX 556 ; N zero ; B 29 -23 517 724 ; C 49 ; WX 556 ; N one ; B 68 0 378 709 ; C 50 ; WX 556 ; N two ; B 30 0 515 724 ; C 51 ; WX 556 ; N three ; B 29 -23 516 724 ; C 52 ; WX 556 ; N four ; B 24 0 522 709 ; C 53 ; WX 556 ; N five ; B 27 -23 517 709 ; C 54 ; WX 556 ; N six ; B 32 -23 519 724 ; C 55 ; WX 556 ; N seven ; B 29 0 528 709 ; C 56 ; WX 556 ; N eight ; B 22 -23 525 724 ; C 57 ; WX 556 ; N nine ; B 28 -24 516 724 ; C 58 ; WX 333 ; N colon ; B 113 0 263 520 ; C 59 ; WX 333 ; N semicolon ; B 113 -174 263 520 ; C 60 ; WX 584 ; N less ; B 40 -10 529 474 ; C 61 ; WX 584 ; N equal ; B 50 52 534 411 ; C 62 ; WX 584 ; N greater ; B 40 -10 529 474 ; C 63 ; WX 611 ; N question ; B 64 0 556 744 ; C 64 ; WX 975 ; N at ; B 27 -138 947 745 ; C 65 ; WX 722 ; N A ; B 26 0 703 729 ; C 66 ; WX 722 ; N B ; B 82 0 666 729 ; C 67 ; WX 722 ; N C ; B 44 -23 685 741 ; C 68 ; WX 722 ; N D ; B 77 0 681 729 ; C 69 ; WX 667 ; N E ; B 79 0 624 729 ; C 70 ; WX 611 ; N F ; B 74 0 586 729 ; C 71 ; WX 778 ; N G ; B 42 -23 711 741 ; C 72 ; WX 722 ; N H ; B 68 0 657 729 ; C 73 ; WX 278 ; N I ; B 63 0 213 729 ; C 74 ; WX 556 ; N J ; B 24 -23 486 729 ; C 75 ; WX 722 ; N K ; B 74 0 717 729 ; C 76 ; WX 611 ; N L ; B 80 0 579 729 ; C 77 ; WX 833 ; N M ; B 66 0 776 729 ; C 78 ; WX 722 ; N N ; B 68 0 661 729 ; C 79 ; WX 778 ; N O ; B 40 -23 742 741 ; C 80 ; WX 667 ; N P ; B 76 0 633 729 ; C 81 ; WX 778 ; N Q ; B 43 -54 745 741 ; C 82 ; WX 722 ; N R ; B 80 0 677 729 ; C 83 ; WX 667 ; N S ; B 32 -23 633 741 ; C 84 ; WX 611 ; N T ; B 14 0 598 729 ; C 85 ; WX 722 ; N U ; B 76 -23 654 729 ; C 86 ; WX 667 ; N V ; B 24 0 647 729 ; C 87 ; WX 944 ; N W ; B 13 0 932 729 ; C 88 ; WX 667 ; N X ; B 22 0 653 729 ; C 89 ; WX 667 ; N Y ; B 27 0 650 729 ; C 90 ; WX 611 ; N Z ; B 30 0 578 729 ; C 91 ; WX 333 ; N bracketleft ; B 66 -200 308 729 ; C 92 ; WX 278 ; N backslash ; B -12 -14 289 714 ; C 93 ; WX 333 ; N bracketright ; B 18 -200 260 729 ; C 94 ; WX 584 ; N asciicircum ; B 61 270 522 695 ; C 95 ; WX 556 ; N underscore ; B -22 -189 578 -120 ; C 96 ; WX 278 ; N quoteleft ; B 67 469 202 729 ; C 97 ; WX 556 ; N a ; B 28 -23 524 549 ; C 98 ; WX 611 ; N b ; B 59 -23 575 729 ; C 99 ; WX 556 ; N c ; B 34 -23 522 549 ; C 100 ; WX 611 ; N d ; B 29 -23 545 729 ; C 101 ; WX 556 ; N e ; B 22 -23 525 549 ; C 102 ; WX 333 ; N f ; B 14 0 313 729 ; C 103 ; WX 611 ; N g ; B 34 -218 541 549 ; C 104 ; WX 611 ; N h ; B 67 0 541 729 ; C 105 ; WX 278 ; N i ; B 67 0 207 729 ; C 106 ; WX 278 ; N j ; B 4 -218 210 729 ; C 107 ; WX 556 ; N k ; B 59 0 548 729 ; C 108 ; WX 278 ; N l ; B 67 0 207 729 ; C 109 ; WX 889 ; N m ; B 60 0 824 549 ; C 110 ; WX 611 ; N n ; B 63 0 546 549 ; C 111 ; WX 611 ; N o ; B 35 -23 569 549 ; C 112 ; WX 611 ; N p ; B 58 -218 574 549 ; C 113 ; WX 611 ; N q ; B 28 -218 544 549 ; C 114 ; WX 389 ; N r ; B 63 0 370 549 ; C 115 ; WX 556 ; N s ; B 29 -23 520 549 ; C 116 ; WX 333 ; N t ; B 14 -23 301 674 ; C 117 ; WX 611 ; N u ; B 58 -23 541 540 ; C 118 ; WX 556 ; N v ; B 14 0 536 540 ; C 119 ; WX 778 ; N w ; B 5 0 766 540 ; C 120 ; WX 556 ; N x ; B 16 0 535 540 ; C 121 ; WX 556 ; N y ; B 9 -219 538 540 ; C 122 ; WX 500 ; N z ; B 21 0 468 540 ; C 123 ; WX 389 ; N braceleft ; B 37 -200 317 729 ; C 124 ; WX 280 ; N bar ; B 100 -200 180 729 ; C 125 ; WX 389 ; N braceright ; B 72 -200 352 729 ; C 126 ; WX 584 ; N asciitilde ; B 60 142 519 314 ; C 161 ; WX 333 ; N exclamdown ; B 66 -186 216 540 ; C 162 ; WX 556 ; N cent ; B 36 -124 522 634 ; C 163 ; WX 556 ; N sterling ; B 31 -23 537 715 ; C 164 ; WX 167 ; N fraction ; B -173 -20 337 715 ; C 165 ; WX 556 ; N yen ; B 5 0 552 704 ; C 166 ; WX 556 ; N florin ; B 21 -220 535 744 ; C 167 ; WX 556 ; N section ; B 33 -201 518 723 ; C 168 ; WX 556 ; N currency ; B 26 100 530 604 ; C 169 ; WX 238 ; N quotesingle ; B 50 470 188 729 ; C 170 ; WX 500 ; N quotedblleft ; B 71 469 433 729 ; C 171 ; WX 556 ; N guillemotleft ; B 88 72 468 481 ; C 172 ; WX 333 ; N guilsinglleft ; B 83 72 250 481 ; C 173 ; WX 333 ; N guilsinglright ; B 80 72 247 481 ; C 174 ; WX 611 ; N fi ; B 9 0 548 729 ; C 175 ; WX 611 ; N fl ; B 12 0 546 729 ; C 177 ; WX 556 ; N endash ; B -9 207 557 311 ; C 178 ; WX 556 ; N dagger ; B 31 -194 523 709 ; C 179 ; WX 556 ; N daggerdbl ; B 28 -194 520 709 ; C 180 ; WX 278 ; N periodcentered ; B 64 169 188 292 ; C 182 ; WX 556 ; N paragraph ; B 19 -191 529 729 ; C 183 ; WX 350 ; N bullet ; B 50 175 300 425 ; C 184 ; WX 278 ; N quotesinglbase ; B 66 -135 201 125 ; C 185 ; WX 500 ; N quotedblbase ; B 72 -135 432 125 ; C 186 ; WX 500 ; N quotedblright ; B 73 469 440 729 ; C 187 ; WX 556 ; N guillemotright ; B 88 72 462 481 ; C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ; C 189 ; WX 1000 ; N perthousand ; B 11 -22 990 739 ; C 191 ; WX 611 ; N questiondown ; B 51 -204 544 540 ; C 193 ; WX 333 ; N grave ; B 17 607 213 757 ; C 194 ; WX 333 ; N acute ; B 121 607 317 757 ; C 195 ; WX 333 ; N circumflex ; B 8 607 326 757 ; C 196 ; WX 333 ; N tilde ; B -9 621 345 749 ; C 197 ; WX 333 ; N macron ; B 16 640 315 719 ; C 198 ; WX 333 ; N breve ; B 35 605 299 748 ; C 199 ; WX 333 ; N dotaccent ; B 112 621 222 743 ; C 200 ; WX 333 ; N dieresis ; B 18 621 314 743 ; C 202 ; WX 333 ; N ring ; B 77 590 257 770 ; C 203 ; WX 333 ; N cedilla ; B 27 -220 294 0 ; C 205 ; WX 333 ; N hungarumlaut ; B -44 610 340 757 ; C 206 ; WX 333 ; N ogonek ; B 45 -234 268 0 ; C 207 ; WX 333 ; N caron ; B 9 607 327 757 ; C 208 ; WX 1000 ; N emdash ; B -7 207 1003 311 ; C 225 ; WX 1000 ; N AE ; B 1 0 966 729 ; C 227 ; WX 370 ; N ordfeminine ; B 31 262 329 729 ; C 232 ; WX 611 ; N Lslash ; B 0 0 597 729 ; C 233 ; WX 778 ; N Oslash ; B 31 -39 755 749 ; C 234 ; WX 1000 ; N OE ; B 28 -23 970 741 ; C 235 ; WX 365 ; N ordmasculine ; B 23 262 343 729 ; C 241 ; WX 889 ; N ae ; B 27 -24 857 549 ; C 245 ; WX 278 ; N dotlessi ; B 67 0 207 540 ; C 248 ; WX 278 ; N lslash ; B 0 0 252 729 ; C 249 ; WX 611 ; N oslash ; B 11 -38 598 557 ; C 250 ; WX 944 ; N oe ; B 23 -23 920 549 ; C 251 ; WX 611 ; N germandbls ; B 67 -17 575 729 ; C -1 ; WX 722 ; N Udieresis ; B 76 -23 654 922 ; C -1 ; WX 722 ; N Uacute ; B 76 -23 654 936 ; C -1 ; WX 667 ; N Scedilla ; B 32 -220 633 741 ; C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ; C -1 ; WX 667 ; N Scaron ; B 32 -23 633 936 ; C -1 ; WX 722 ; N Rcaron ; B 80 0 677 936 ; C -1 ; WX 722 ; N Racute ; B 80 0 677 936 ; C -1 ; WX 667 ; N Sacute ; B 32 -23 633 936 ; C -1 ; WX 778 ; N Otilde ; B 40 -23 742 928 ; C -1 ; WX 611 ; N ucircumflex ; B 58 -23 541 757 ; C -1 ; WX 778 ; N Ohungarumlaut ; B 40 -23 742 936 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 76 -23 654 936 ; C -1 ; WX 667 ; N Yacute ; B 27 0 650 936 ; C -1 ; WX 722 ; N Eth ; B 0 0 681 729 ; C -1 ; WX 722 ; N Dcroat ; B 0 0 681 729 ; C -1 ; WX 611 ; N Zacute ; B 30 0 578 936 ; C -1 ; WX 722 ; N Uring ; B 76 -23 654 949 ; C -1 ; WX 611 ; N gbreve ; B 34 -218 541 748 ; C -1 ; WX 556 ; N eogonek ; B 21 -234 525 549 ; C -1 ; WX 556 ; N edotaccent ; B 22 -23 525 743 ; C -1 ; WX 556 ; N ecaron ; B 22 -23 525 757 ; C -1 ; WX 722 ; N Ugrave ; B 76 -23 654 936 ; C -1 ; WX 667 ; N Thorn ; B 76 0 633 729 ; C -1 ; WX 556 ; N eacute ; B 22 -23 525 757 ; C -1 ; WX 556 ; N edieresis ; B 22 -23 525 743 ; C -1 ; WX 707 ; N dcaron ; B 29 -23 720 729 ; C -1 ; WX 556 ; N ccedilla ; B 34 -220 522 549 ; C -1 ; WX 556 ; N ccaron ; B 34 -23 522 757 ; C -1 ; WX 556 ; N cacute ; B 34 -23 522 757 ; C -1 ; WX 556 ; N aogonek ; B 28 -233 548 549 ; C -1 ; WX 556 ; N aring ; B 28 -23 524 770 ; C -1 ; WX 556 ; N atilde ; B 28 -23 524 749 ; C -1 ; WX 556 ; N abreve ; B 28 -23 524 748 ; C -1 ; WX 556 ; N egrave ; B 22 -23 525 757 ; C -1 ; WX 556 ; N agrave ; B 28 -23 524 757 ; C -1 ; WX 556 ; N aacute ; B 28 -23 524 757 ; C -1 ; WX 556 ; N adieresis ; B 28 -23 524 743 ; C -1 ; WX 722 ; N Uogonek ; B 76 -234 654 729 ; C -1 ; WX 611 ; N ugrave ; B 58 -23 541 757 ; C -1 ; WX 611 ; N uacute ; B 58 -23 541 757 ; C -1 ; WX 611 ; N udieresis ; B 58 -23 541 743 ; C -1 ; WX 385 ; N tcaron ; B 14 -23 398 829 ; C -1 ; WX 556 ; N scommaaccent ; B 29 -307 520 549 ; C -1 ; WX 611 ; N Zcaron ; B 30 0 578 936 ; C -1 ; WX 556 ; N ecircumflex ; B 22 -23 525 757 ; C -1 ; WX 722 ; N Ucircumflex ; B 76 -23 654 936 ; C -1 ; WX 556 ; N acircumflex ; B 28 -23 524 757 ; C -1 ; WX 611 ; N Zdotaccent ; B 30 0 578 922 ; C -1 ; WX 556 ; N scaron ; B 29 -23 520 757 ; C -1 ; WX 722 ; N Amacron ; B 26 0 703 898 ; C -1 ; WX 556 ; N sacute ; B 29 -23 520 757 ; C -1 ; WX 611 ; N Tcommaaccent ; B 14 -307 598 729 ; C -1 ; WX 667 ; N Ydieresis ; B 27 0 650 922 ; C -1 ; WX 611 ; N thorn ; B 58 -218 574 729 ; C -1 ; WX 667 ; N Emacron ; B 79 0 624 898 ; C -1 ; WX 778 ; N Ograve ; B 40 -23 742 936 ; C -1 ; WX 778 ; N Oacute ; B 40 -23 742 936 ; C -1 ; WX 778 ; N Odieresis ; B 40 -23 742 922 ; C -1 ; WX 722 ; N Ntilde ; B 68 0 661 928 ; C -1 ; WX 722 ; N Ncaron ; B 68 0 661 936 ; C -1 ; WX 722 ; N Nacute ; B 68 0 661 936 ; C -1 ; WX 611 ; N Lcaron ; B 80 0 579 729 ; C -1 ; WX 611 ; N Lacute ; B 80 0 579 936 ; C -1 ; WX 278 ; N Idotaccent ; B 63 0 213 922 ; C -1 ; WX 389 ; N racute ; B 63 0 370 757 ; C -1 ; WX 278 ; N Icircumflex ; B -19 0 299 936 ; C -1 ; WX 611 ; N ohungarumlaut ; B 35 -23 569 757 ; C -1 ; WX 611 ; N otilde ; B 35 -23 569 749 ; C -1 ; WX 556 ; N Euro ; B 6 -23 546 724 ; C -1 ; WX 611 ; N ocircumflex ; B 35 -23 569 757 ; C -1 ; WX 351 ; N onesuperior ; B 40 284 242 709 ; C -1 ; WX 351 ; N twosuperior ; B 16 284 328 718 ; C -1 ; WX 351 ; N threesuperior ; B 15 271 329 718 ; C -1 ; WX 278 ; N Igrave ; B -10 0 213 936 ; C -1 ; WX 278 ; N Iacute ; B 63 0 290 936 ; C -1 ; WX 278 ; N Imacron ; B 2 0 274 898 ; C -1 ; WX 278 ; N Iogonek ; B 34 -233 237 729 ; C -1 ; WX 278 ; N Idieresis ; B -9 0 287 922 ; C -1 ; WX 778 ; N Gbreve ; B 42 -23 711 927 ; C -1 ; WX 722 ; N Umacron ; B 76 -23 654 898 ; C -1 ; WX 722 ; N Kcommaaccent ; B 74 -307 717 729 ; C -1 ; WX 611 ; N ograve ; B 35 -23 569 757 ; C -1 ; WX 667 ; N Scommaaccent ; B 32 -307 633 741 ; C -1 ; WX 667 ; N Eogonek ; B 79 -233 648 729 ; C -1 ; WX 611 ; N oacute ; B 35 -23 569 757 ; C -1 ; WX 667 ; N Edotaccent ; B 79 0 624 922 ; C -1 ; WX 278 ; N iogonek ; B 34 -233 231 729 ; C -1 ; WX 611 ; N gcommaaccent ; B 34 -218 541 853 ; C -1 ; WX 611 ; N odieresis ; B 35 -23 569 743 ; C -1 ; WX 611 ; N ntilde ; B 63 0 546 749 ; C -1 ; WX 611 ; N ncaron ; B 63 0 546 757 ; C -1 ; WX 667 ; N Ecaron ; B 79 0 624 936 ; C -1 ; WX 667 ; N Ecircumflex ; B 79 0 624 936 ; C -1 ; WX 556 ; N scedilla ; B 29 -220 520 549 ; C -1 ; WX 389 ; N rcaron ; B 54 0 372 757 ; C -1 ; WX 667 ; N Egrave ; B 79 0 624 936 ; C -1 ; WX 667 ; N Eacute ; B 79 0 624 936 ; C -1 ; WX 778 ; N Gcommaaccent ; B 42 -307 711 741 ; C -1 ; WX 722 ; N Rcommaaccent ; B 80 -307 677 729 ; C -1 ; WX 667 ; N Edieresis ; B 79 0 624 922 ; C -1 ; WX 611 ; N nacute ; B 63 0 546 757 ; C -1 ; WX 611 ; N uogonek ; B 58 -233 564 540 ; C -1 ; WX 611 ; N umacron ; B 58 -23 541 719 ; C -1 ; WX 722 ; N Dcaron ; B 77 0 681 936 ; C -1 ; WX 369 ; N lcaron ; B 67 0 382 729 ; C -1 ; WX 722 ; N Ccaron ; B 44 -23 685 936 ; C -1 ; WX 722 ; N Cacute ; B 44 -23 685 936 ; C -1 ; WX 722 ; N Ccedilla ; B 44 -220 685 741 ; C -1 ; WX 606 ; N degree ; B 151 383 454 686 ; C -1 ; WX 722 ; N Aogonek ; B 26 -233 723 729 ; C -1 ; WX 584 ; N minus ; B 40 172 544 291 ; C -1 ; WX 584 ; N multiply ; B 79 18 505 444 ; C -1 ; WX 584 ; N divide ; B 50 -11 534 474 ; C -1 ; WX 722 ; N Aring ; B 26 0 703 949 ; C -1 ; WX 1000 ; N trademark ; B 71 273 929 729 ; C -1 ; WX 389 ; N rcommaaccent ; B 63 -307 370 549 ; C -1 ; WX 278 ; N lacute ; B 67 0 278 936 ; C -1 ; WX 611 ; N omacron ; B 35 -23 569 719 ; C -1 ; WX 722 ; N Atilde ; B 26 0 703 928 ; C -1 ; WX 278 ; N icircumflex ; B -19 0 299 757 ; C -1 ; WX 278 ; N igrave ; B -10 0 207 757 ; C -1 ; WX 611 ; N ncommaaccent ; B 63 -307 546 549 ; C -1 ; WX 278 ; N lcommaaccent ; B 67 -307 207 729 ; C -1 ; WX 584 ; N plusminus ; B 56 -16 527 608 ; C -1 ; WX 869 ; N onehalf ; B 40 -20 846 715 ; C -1 ; WX 869 ; N onequarter ; B 40 -20 850 715 ; C -1 ; WX 869 ; N threequarters ; B 15 -20 850 718 ; C -1 ; WX 278 ; N iacute ; B 67 0 290 757 ; C -1 ; WX 722 ; N Abreve ; B 26 0 703 927 ; C -1 ; WX 556 ; N kcommaaccent ; B 59 -307 548 729 ; C -1 ; WX 778 ; N Omacron ; B 40 -23 742 898 ; C -1 ; WX 278 ; N imacron ; B 7 0 266 719 ; C -1 ; WX 556 ; N emacron ; B 22 -23 525 719 ; C -1 ; WX 556 ; N amacron ; B 28 -23 524 719 ; C -1 ; WX 333 ; N tcommaaccent ; B 14 -307 301 674 ; C -1 ; WX 556 ; N ydieresis ; B 9 -219 538 743 ; C -1 ; WX 500 ; N zdotaccent ; B 21 0 468 743 ; C -1 ; WX 500 ; N zcaron ; B 21 0 468 757 ; C -1 ; WX 500 ; N zacute ; B 21 0 468 757 ; C -1 ; WX 556 ; N yacute ; B 9 -219 538 757 ; C -1 ; WX 611 ; N uhungarumlaut ; B 58 -23 559 757 ; C -1 ; WX 611 ; N eth ; B 35 -23 569 744 ; C -1 ; WX 611 ; N uring ; B 58 -23 541 770 ; C -1 ; WX 778 ; N Ocircumflex ; B 40 -23 742 936 ; C -1 ; WX 333 ; N commaaccent ; B 112 -307 234 -60 ; C -1 ; WX 737 ; N copyright ; B -14 -22 751 743 ; C -1 ; WX 737 ; N registered ; B -14 -22 751 743 ; C -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ; C -1 ; WX 278 ; N idieresis ; B -9 0 287 743 ; C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ; C -1 ; WX 729 ; N Delta ; B 8 0 721 729 ; C -1 ; WX 548 ; N notequal ; B 50 -69 534 528 ; C -1 ; WX 542 ; N radical ; B 7 -36 512 913 ; C -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ; C -1 ; WX 722 ; N Aacute ; B 26 0 703 936 ; C -1 ; WX 584 ; N lessequal ; B 45 -10 534 639 ; C -1 ; WX 584 ; N greaterequal ; B 45 -10 534 639 ; C -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ; C -1 ; WX 711 ; N summation ; B 17 -96 694 760 ; C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ; C -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 661 729 ; C -1 ; WX 611 ; N dcroat ; B 29 -23 605 729 ; C -1 ; WX 280 ; N brokenbar ; B 100 -200 180 729 ; C -1 ; WX 611 ; N Lcommaaccent ; B 80 -307 579 729 ; C -1 ; WX 722 ; N Adieresis ; B 26 0 703 922 ; C -1 ; WX 611 ; N mu ; B 58 -220 573 540 ; C -1 ; WX 278 ; N .notdef ; B 214 0 214 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -33 KPX A Ccedilla -33 KPX A G -35 KPX A O -34 KPX A Odieresis -34 KPX A Q -35 KPX A T -81 KPX A U -32 KPX A Uacute -32 KPX A Ucircumflex -32 KPX A Udieresis -32 KPX A Ugrave -32 KPX A V -66 KPX A W -51 KPX A Y -90 KPX A a -1 KPX A b -1 KPX A c -14 KPX A ccedilla -14 KPX A comma 19 KPX A d -13 KPX A e -9 KPX A g -14 KPX A guillemotleft -43 KPX A guilsinglleft -40 KPX A hyphen 7 KPX A o -16 KPX A period 19 KPX A q -12 KPX A quotedblright -65 KPX A quoteright -61 KPX A t -18 KPX A u -12 KPX A v -37 KPX A w -23 KPX A y -35 KPX Aacute C -33 KPX Aacute G -35 KPX Aacute O -34 KPX Aacute Q -35 KPX Aacute T -81 KPX Aacute U -32 KPX Aacute V -66 KPX Aacute W -51 KPX Aacute Y -90 KPX Aacute a -1 KPX Aacute b -1 KPX Aacute c -14 KPX Aacute comma 19 KPX Aacute d -13 KPX Aacute e -9 KPX Aacute g -14 KPX Aacute guillemotleft -43 KPX Aacute guilsinglleft -40 KPX Aacute hyphen 7 KPX Aacute o -16 KPX Aacute period 19 KPX Aacute q -12 KPX Aacute quoteright -61 KPX Aacute t -18 KPX Aacute u -12 KPX Aacute v -37 KPX Aacute w -23 KPX Aacute y -35 KPX Acircumflex C -33 KPX Acircumflex G -35 KPX Acircumflex O -34 KPX Acircumflex Q -35 KPX Acircumflex T -81 KPX Acircumflex U -32 KPX Acircumflex V -66 KPX Acircumflex W -51 KPX Acircumflex Y -90 KPX Acircumflex comma 19 KPX Acircumflex period 19 KPX Adieresis C -33 KPX Adieresis G -35 KPX Adieresis O -34 KPX Adieresis Q -35 KPX Adieresis T -81 KPX Adieresis U -32 KPX Adieresis V -66 KPX Adieresis W -51 KPX Adieresis Y -90 KPX Adieresis a -1 KPX Adieresis b -1 KPX Adieresis c -14 KPX Adieresis comma 19 KPX Adieresis d -13 KPX Adieresis g -14 KPX Adieresis guillemotleft -43 KPX Adieresis guilsinglleft -40 KPX Adieresis hyphen 7 KPX Adieresis o -16 KPX Adieresis period 19 KPX Adieresis q -12 KPX Adieresis quotedblright -65 KPX Adieresis quoteright -61 KPX Adieresis t -18 KPX Adieresis u -12 KPX Adieresis v -37 KPX Adieresis w -23 KPX Adieresis y -35 KPX Agrave C -33 KPX Agrave G -35 KPX Agrave O -34 KPX Agrave Q -35 KPX Agrave T -81 KPX Agrave U -32 KPX Agrave V -66 KPX Agrave W -51 KPX Agrave Y -90 KPX Agrave comma 19 KPX Agrave period 19 KPX Aring C -33 KPX Aring G -35 KPX Aring O -34 KPX Aring Q -35 KPX Aring T -81 KPX Aring U -32 KPX Aring V -66 KPX Aring W -51 KPX Aring Y -90 KPX Aring a -1 KPX Aring b -1 KPX Aring c -14 KPX Aring comma 19 KPX Aring d -13 KPX Aring e -9 KPX Aring g -14 KPX Aring guillemotleft -43 KPX Aring guilsinglleft -40 KPX Aring hyphen 7 KPX Aring o -16 KPX Aring period 19 KPX Aring q -12 KPX Aring quotedblright -65 KPX Aring quoteright -61 KPX Aring t -18 KPX Aring u -12 KPX Aring v -37 KPX Aring w -23 KPX Aring y -35 KPX Atilde C -33 KPX Atilde G -35 KPX Atilde O -34 KPX Atilde Q -35 KPX Atilde T -81 KPX Atilde U -32 KPX Atilde V -66 KPX Atilde W -51 KPX Atilde Y -90 KPX Atilde comma 19 KPX Atilde period 19 KPX B A -32 KPX B AE -20 KPX B Aacute -32 KPX B Acircumflex -32 KPX B Adieresis -32 KPX B Aring -32 KPX B Atilde -32 KPX B O -11 KPX B OE -2 KPX B Oacute -11 KPX B Ocircumflex -11 KPX B Odieresis -11 KPX B Ograve -11 KPX B Oslash -5 KPX B V -39 KPX B W -27 KPX B Y -51 KPX C A -29 KPX C AE -17 KPX C Aacute -29 KPX C Adieresis -29 KPX C Aring -29 KPX C H 5 KPX C K 2 KPX C O -6 KPX C Oacute -6 KPX C Odieresis -6 KPX Ccedilla A -28 KPX D A -37 KPX D Aacute -37 KPX D Acircumflex -37 KPX D Adieresis -37 KPX D Agrave -37 KPX D Aring -37 KPX D Atilde -37 KPX D J 2 KPX D T -17 KPX D V -35 KPX D W -20 KPX D X -35 KPX D Y -56 KPX F A -63 KPX F Aacute -63 KPX F Acircumflex -63 KPX F Adieresis -63 KPX F Agrave -63 KPX F Aring -63 KPX F Atilde -63 KPX F J -25 KPX F O -16 KPX F Odieresis -16 KPX F a -15 KPX F aacute -15 KPX F adieresis -15 KPX F ae -17 KPX F aring -15 KPX F comma -76 KPX F e -7 KPX F eacute -7 KPX F hyphen 11 KPX F i -7 KPX F j -9 KPX F o -14 KPX F oacute -14 KPX F odieresis -14 KPX F oe -8 KPX F oslash -15 KPX F period -75 KPX F r -27 KPX F u -24 KPX G A -8 KPX G AE 4 KPX G Aacute -8 KPX G Acircumflex -8 KPX G Adieresis -8 KPX G Agrave -8 KPX G Aring -8 KPX G Atilde -8 KPX G T -17 KPX G V -36 KPX G W -20 KPX G Y -56 KPX J A -32 KPX J AE -20 KPX J Adieresis -32 KPX J Aring -32 KPX K C -53 KPX K G -55 KPX K O -54 KPX K OE -44 KPX K Oacute -54 KPX K Odieresis -54 KPX K S -30 KPX K T 13 KPX K a -3 KPX K adieresis -3 KPX K ae 0 KPX K aring -3 KPX K e -25 KPX K hyphen -44 KPX K o -33 KPX K oacute -33 KPX K odieresis -33 KPX K u -23 KPX K udieresis -23 KPX K y -65 KPX L A 9 KPX L AE 21 KPX L Aacute 9 KPX L Adieresis 9 KPX L Aring 9 KPX L C -26 KPX L Ccedilla -26 KPX L G -30 KPX L O -29 KPX L Oacute -29 KPX L Ocircumflex -29 KPX L Odieresis -29 KPX L Ograve -29 KPX L Otilde -29 KPX L S -2 KPX L T -95 KPX L U -24 KPX L Udieresis -24 KPX L V -90 KPX L W -68 KPX L Y -112 KPX L hyphen -12 KPX L quotedblright -141 KPX L quoteright -138 KPX L u -7 KPX L udieresis -7 KPX L y -55 KPX N A -5 KPX N AE 7 KPX N Aacute -5 KPX N Adieresis -5 KPX N Aring -5 KPX N C 9 KPX N Ccedilla 9 KPX N G 8 KPX N O 8 KPX N Oacute 8 KPX N Odieresis 8 KPX N a 13 KPX N aacute 13 KPX N adieresis 13 KPX N ae 13 KPX N aring 13 KPX N comma 15 KPX N e 18 KPX N eacute 18 KPX N o 11 KPX N oacute 11 KPX N odieresis 11 KPX N oslash 11 KPX N period 16 KPX N u 12 KPX N udieresis 12 KPX O A -37 KPX O AE -26 KPX O Aacute -37 KPX O Adieresis -37 KPX O Aring -37 KPX O T -20 KPX O V -36 KPX O W -21 KPX O X -36 KPX O Y -59 KPX Oacute A -37 KPX Oacute T -20 KPX Oacute V -36 KPX Oacute W -21 KPX Oacute Y -59 KPX Ocircumflex T -20 KPX Ocircumflex V -36 KPX Ocircumflex Y -59 KPX Odieresis A -37 KPX Odieresis T -20 KPX Odieresis V -36 KPX Odieresis W -21 KPX Odieresis X -36 KPX Odieresis Y -59 KPX Ograve T -20 KPX Ograve V -36 KPX Ograve Y -59 KPX Oslash A -32 KPX Otilde T -20 KPX Otilde V -36 KPX Otilde Y -59 KPX P A -65 KPX P AE -54 KPX P Aacute -65 KPX P Adieresis -65 KPX P Aring -65 KPX P J -44 KPX P a -7 KPX P aacute -7 KPX P adieresis -7 KPX P ae -8 KPX P aring -7 KPX P comma -94 KPX P e -8 KPX P eacute -8 KPX P hyphen 0 KPX P o -14 KPX P oacute -14 KPX P odieresis -14 KPX P oe -8 KPX P oslash -17 KPX P period -94 KPX R C -5 KPX R Ccedilla -5 KPX R G -6 KPX R O -6 KPX R OE 3 KPX R Oacute -6 KPX R Odieresis -6 KPX R T 0 KPX R U -4 KPX R Udieresis -4 KPX R V -26 KPX R W -17 KPX R Y -37 KPX R a 0 KPX R aacute 0 KPX R adieresis 0 KPX R ae 0 KPX R aring 0 KPX R e 2 KPX R eacute 2 KPX R hyphen 15 KPX R o -4 KPX R oacute -4 KPX R odieresis -4 KPX R oe 1 KPX R u 0 KPX R uacute 0 KPX R udieresis 0 KPX R y 5 KPX S A -20 KPX S AE -8 KPX S Aacute -20 KPX S Adieresis -20 KPX S Aring -20 KPX S T -5 KPX S V -31 KPX S W -17 KPX S Y -43 KPX S t 1 KPX T A -87 KPX T AE -75 KPX T Aacute -87 KPX T Acircumflex -87 KPX T Adieresis -87 KPX T Agrave -87 KPX T Aring -87 KPX T Atilde -87 KPX T C -20 KPX T G -22 KPX T J -87 KPX T O -22 KPX T OE -11 KPX T Oacute -22 KPX T Ocircumflex -22 KPX T Odieresis -22 KPX T Ograve -22 KPX T Oslash -23 KPX T Otilde -22 KPX T S 3 KPX T V 18 KPX T W 24 KPX T Y 16 KPX T a -73 KPX T ae -73 KPX T c -74 KPX T colon -97 KPX T comma -67 KPX T e -69 KPX T g -75 KPX T guillemotleft -101 KPX T guilsinglleft -98 KPX T hyphen -48 KPX T i -1 KPX T j -3 KPX T o -76 KPX T oslash -73 KPX T period -67 KPX T r -71 KPX T s -74 KPX T semicolon -98 KPX T u -72 KPX T v -82 KPX T w -77 KPX T y -80 KPX U A -34 KPX U AE -22 KPX U Aacute -34 KPX U Acircumflex -34 KPX U Adieresis -34 KPX U Aring -34 KPX U Atilde -34 KPX U comma -7 KPX U m 6 KPX U n 5 KPX U p 7 KPX U period -4 KPX U r 5 KPX Uacute A -34 KPX Uacute comma -7 KPX Uacute m 6 KPX Uacute n 5 KPX Uacute p 7 KPX Uacute period -4 KPX Uacute r 5 KPX Ucircumflex A -34 KPX Udieresis A -34 KPX Udieresis b 6 KPX Udieresis comma -7 KPX Udieresis m 6 KPX Udieresis n 5 KPX Udieresis p 7 KPX Udieresis period -4 KPX Udieresis r 5 KPX Ugrave A -34 KPX V A -71 KPX V AE -59 KPX V Aacute -71 KPX V Acircumflex -71 KPX V Adieresis -71 KPX V Agrave -71 KPX V Aring -71 KPX V Atilde -71 KPX V C -36 KPX V G -38 KPX V O -37 KPX V Oacute -37 KPX V Ocircumflex -37 KPX V Odieresis -37 KPX V Ograve -37 KPX V Oslash -31 KPX V Otilde -37 KPX V S -21 KPX V T 21 KPX V a -47 KPX V ae -48 KPX V colon -65 KPX V comma -69 KPX V e -43 KPX V g -49 KPX V guillemotleft -74 KPX V guilsinglleft -72 KPX V hyphen -21 KPX V i -5 KPX V o -50 KPX V oslash -48 KPX V period -69 KPX V r -34 KPX V semicolon -67 KPX V u -34 KPX V y -10 KPX W A -54 KPX W AE -43 KPX W Aacute -54 KPX W Acircumflex -54 KPX W Adieresis -54 KPX W Agrave -54 KPX W Aring -54 KPX W Atilde -54 KPX W C -20 KPX W G -22 KPX W O -21 KPX W Oacute -21 KPX W Ocircumflex -21 KPX W Odieresis -21 KPX W Ograve -21 KPX W Oslash -15 KPX W Otilde -21 KPX W S -12 KPX W T 25 KPX W a -29 KPX W ae -29 KPX W colon -53 KPX W comma -45 KPX W e -24 KPX W g -30 KPX W guillemotleft -55 KPX W guilsinglleft -53 KPX W hyphen -3 KPX W i -1 KPX W o -31 KPX W oslash -29 KPX W period -45 KPX W r -24 KPX W semicolon -54 KPX W u -23 KPX W y 0 KPX X C -34 KPX X O -35 KPX X Odieresis -35 KPX X Q -37 KPX X a -5 KPX X e -25 KPX X hyphen -27 KPX X o -32 KPX X u -25 KPX X y -40 KPX Y A -86 KPX Y AE -74 KPX Y Aacute -86 KPX Y Acircumflex -86 KPX Y Adieresis -86 KPX Y Agrave -86 KPX Y Aring -86 KPX Y Atilde -86 KPX Y C -52 KPX Y G -54 KPX Y O -54 KPX Y Oacute -54 KPX Y Ocircumflex -54 KPX Y Odieresis -54 KPX Y Ograve -54 KPX Y Oslash -47 KPX Y Otilde -54 KPX Y S -29 KPX Y T 22 KPX Y a -66 KPX Y ae -67 KPX Y colon -81 KPX Y comma -78 KPX Y e -63 KPX Y g -68 KPX Y guillemotleft -98 KPX Y guilsinglleft -96 KPX Y hyphen -50 KPX Y i -3 KPX Y o -70 KPX Y oslash -67 KPX Y p -45 KPX Y period -78 KPX Y semicolon -83 KPX Y u -48 KPX Y v -27 KPX Z v -11 KPX Z y -9 KPX a j -1 KPX a quoteright -11 KPX a v -19 KPX a w -5 KPX a y -17 KPX aacute v -19 KPX aacute w -5 KPX aacute y -17 KPX adieresis v -19 KPX adieresis w -5 KPX adieresis y -17 KPX ae v -21 KPX ae w -7 KPX ae y -19 KPX agrave v -19 KPX agrave w -5 KPX agrave y -17 KPX aring v -19 KPX aring w -5 KPX aring y -17 KPX b v -20 KPX b w -7 KPX b y -20 KPX c h 0 KPX c k 3 KPX comma one -73 KPX comma quotedblright -33 KPX comma quoteright -30 KPX e quoteright -12 KPX e t -4 KPX e v -19 KPX e w -6 KPX e x -21 KPX e y -17 KPX eacute v -19 KPX eacute w -6 KPX eacute y -17 KPX ecircumflex v -19 KPX ecircumflex w -6 KPX ecircumflex y -17 KPX eight four 10 KPX eight one -23 KPX eight seven -6 KPX f a 1 KPX f aacute 1 KPX f adieresis 1 KPX f ae 0 KPX f aring 1 KPX f e -3 KPX f eacute -3 KPX f f 21 KPX f i -3 KPX f j -6 KPX f l -3 KPX f o -9 KPX f oacute -9 KPX f odieresis -9 KPX f oe -3 KPX f oslash -9 KPX f quoteright 10 KPX f s -1 KPX f t 21 KPX five four 6 KPX five one -29 KPX five seven -10 KPX four four 9 KPX four one -50 KPX four seven -28 KPX g a 3 KPX g adieresis 3 KPX g ae 3 KPX g aring 3 KPX g e 8 KPX g eacute 8 KPX g l 0 KPX g oacute 1 KPX g odieresis 1 KPX g r 1 KPX guillemotright A -51 KPX guillemotright AE -39 KPX guillemotright Aacute -51 KPX guillemotright Adieresis -51 KPX guillemotright Aring -51 KPX guillemotright T -108 KPX guillemotright V -78 KPX guillemotright W -60 KPX guillemotright Y -111 KPX guilsinglright A -46 KPX guilsinglright AE -35 KPX guilsinglright Aacute -46 KPX guilsinglright Adieresis -46 KPX guilsinglright Aring -46 KPX guilsinglright T -104 KPX guilsinglright V -74 KPX guilsinglright W -56 KPX guilsinglright Y -107 KPX h quoteright -14 KPX h y -21 KPX hyphen A -1 KPX hyphen AE 10 KPX hyphen Aacute -1 KPX hyphen Adieresis -1 KPX hyphen Aring -1 KPX hyphen T -57 KPX hyphen V -27 KPX hyphen W -9 KPX hyphen Y -64 KPX i T -4 KPX i j -2 KPX k a -2 KPX k aacute -2 KPX k adieresis -2 KPX k ae 1 KPX k aring -2 KPX k comma 7 KPX k e -15 KPX k eacute -15 KPX k g -21 KPX k hyphen -25 KPX k o -22 KPX k oacute -22 KPX k odieresis -22 KPX k period 6 KPX k s -10 KPX k u -1 KPX k udieresis -1 KPX l v -5 KPX l y -2 KPX m p 6 KPX m v -19 KPX m w -6 KPX m y -18 KPX n T -80 KPX n p 5 KPX n quoteright -12 KPX n v -20 KPX n w -7 KPX n y -19 KPX nine four 4 KPX nine one -21 KPX nine seven -17 KPX o T -84 KPX o quoteright -17 KPX o t -8 KPX o v -23 KPX o w -10 KPX o x -25 KPX o y -22 KPX oacute v -23 KPX oacute w -10 KPX oacute y -22 KPX ocircumflex t -8 KPX odieresis t -8 KPX odieresis v -23 KPX odieresis w -10 KPX odieresis x -25 KPX odieresis y -22 KPX ograve v -23 KPX ograve w -10 KPX ograve y -22 KPX one comma -42 KPX one eight -37 KPX one five -43 KPX one four -56 KPX one nine -39 KPX one one -85 KPX one period -42 KPX one seven -65 KPX one six -37 KPX one three -44 KPX one two -47 KPX one zero -34 KPX p t -5 KPX p y -20 KPX period one -73 KPX period quotedblright -32 KPX period quoteright -29 KPX q c 4 KPX q u 4 KPX quotedblbase A 12 KPX quotedblbase AE 24 KPX quotedblbase T -75 KPX quotedblbase V -73 KPX quotedblbase W -51 KPX quotedblbase Y -92 KPX quotedblleft A -68 KPX quotedblleft AE -57 KPX quotedblleft Aacute -68 KPX quotedblleft Adieresis -68 KPX quotedblleft Aring -68 KPX quotedblleft T -2 KPX quotedblleft V 6 KPX quotedblleft W 16 KPX quotedblleft Y -9 KPX quotedblright A -69 KPX quotedblright AE -57 KPX quotedblright Aacute -69 KPX quotedblright Adieresis -69 KPX quotedblright Aring -69 KPX quotedblright T 1 KPX quotedblright V 7 KPX quotedblright W 17 KPX quotedblright Y -7 KPX quoteleft A -73 KPX quoteleft AE -62 KPX quoteleft Aacute -73 KPX quoteleft Adieresis -73 KPX quoteleft Aring -73 KPX quoteleft T -7 KPX quoteleft V 2 KPX quoteleft W 11 KPX quoteleft Y -13 KPX quoteright A -77 KPX quoteright AE -66 KPX quoteright Aacute -77 KPX quoteright Adieresis -77 KPX quoteright Aring -77 KPX quoteright comma -46 KPX quoteright d -27 KPX quoteright o -30 KPX quoteright period -45 KPX quoteright r -15 KPX quoteright s -22 KPX quoteright t -4 KPX quoteright v -5 KPX quoteright w 1 KPX quoteright y -3 KPX r a 6 KPX r aacute 6 KPX r acircumflex 6 KPX r adieresis 6 KPX r ae 4 KPX r agrave 6 KPX r aring 6 KPX r c 0 KPX r ccedilla 0 KPX r colon -27 KPX r comma -57 KPX r d 0 KPX r e 4 KPX r eacute 4 KPX r ecircumflex 4 KPX r egrave 4 KPX r f 22 KPX r g -2 KPX r h -4 KPX r hyphen -35 KPX r i -4 KPX r j -6 KPX r k 0 KPX r l -4 KPX r m -1 KPX r n -2 KPX r o -1 KPX r oacute -1 KPX r ocircumflex -1 KPX r odieresis -1 KPX r oe 5 KPX r ograve -1 KPX r oslash -4 KPX r p 0 KPX r period -57 KPX r q 1 KPX r quoteright 14 KPX r r -2 KPX r s 3 KPX r semicolon -27 KPX r t 22 KPX r u 0 KPX r v 21 KPX r w 26 KPX r x 17 KPX r y 23 KPX r z 9 KPX s quoteright -12 KPX s t -1 KPX seven colon -63 KPX seven comma -88 KPX seven eight -3 KPX seven five -21 KPX seven four -62 KPX seven one -14 KPX seven period -87 KPX seven seven 9 KPX seven six -13 KPX seven three 0 KPX seven two -4 KPX six four 7 KPX six one -21 KPX six seven -3 KPX t S 0 KPX t a 6 KPX t aacute 6 KPX t adieresis 6 KPX t ae 7 KPX t aring 6 KPX t colon -25 KPX t e -3 KPX t eacute -3 KPX t h 2 KPX t o -10 KPX t oacute -10 KPX t odieresis -10 KPX t quoteright 4 KPX t semicolon -25 KPX three four 6 KPX three one -27 KPX three seven -10 KPX two four -9 KPX two one -16 KPX two seven -3 KPX u quoteright -2 KPX v a -15 KPX v aacute -15 KPX v acircumflex -15 KPX v adieresis -15 KPX v ae -16 KPX v agrave -15 KPX v aring -15 KPX v atilde -15 KPX v c -20 KPX v colon -32 KPX v comma -51 KPX v e -15 KPX v eacute -15 KPX v ecircumflex -15 KPX v egrave -15 KPX v g -21 KPX v hyphen 0 KPX v l -5 KPX v o -22 KPX v oacute -22 KPX v odieresis -22 KPX v ograve -22 KPX v oslash -20 KPX v period -50 KPX v s -17 KPX v semicolon -34 KPX w a -7 KPX w aacute -7 KPX w acircumflex -7 KPX w adieresis -7 KPX w ae -8 KPX w agrave -7 KPX w aring -7 KPX w atilde -7 KPX w c -8 KPX w colon -27 KPX w comma -33 KPX w e -3 KPX w eacute -3 KPX w ecircumflex -3 KPX w egrave -3 KPX w g -9 KPX w hyphen 11 KPX w l -1 KPX w o -10 KPX w oacute -10 KPX w odieresis -10 KPX w ograve -10 KPX w oslash -8 KPX w period -32 KPX w s -9 KPX w semicolon -29 KPX x a -9 KPX x c -22 KPX x e -17 KPX x eacute -17 KPX x o -24 KPX x q -20 KPX y a -14 KPX y aacute -14 KPX y acircumflex -14 KPX y adieresis -14 KPX y ae -15 KPX y agrave -14 KPX y aring -14 KPX y atilde -14 KPX y c -21 KPX y colon -31 KPX y comma -51 KPX y e -16 KPX y eacute -16 KPX y ecircumflex -16 KPX y egrave -16 KPX y g -21 KPX y hyphen 0 KPX y l -4 KPX y o -22 KPX y oacute -22 KPX y odieresis -22 KPX y ograve -22 KPX y oslash -20 KPX y period -50 KPX y s -16 KPX y semicolon -33 KPX zero four 5 KPX zero one -19 KPX zero seven -10 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-Italic.afm0100664000212600000240000007622007477306250016045 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Times-Italic FullName Times Roman Italic FamilyName Times Roman Weight Regular ItalicAngle -15.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -169 -270 1010 924 CapHeight 653 XHeight 432 Descender -205 Ascender 683 StartCharMetrics 316 C 32 ; WX 250 ; N space ; B 125 0 125 0 ; C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ; C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ; C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ; C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ; C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ; C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ; C 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ; C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ; C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ; C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ; C 43 ; WX 675 ; N plus ; B 86 0 590 506 ; C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ; C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ; C 46 ; WX 250 ; N period ; B 27 -11 138 100 ; C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ; C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ; C 49 ; WX 500 ; N one ; B 49 0 409 676 ; C 50 ; WX 500 ; N two ; B 12 0 452 676 ; C 51 ; WX 500 ; N three ; B 15 -7 466 676 ; C 52 ; WX 500 ; N four ; B 1 0 479 676 ; C 53 ; WX 500 ; N five ; B 15 -7 491 666 ; C 54 ; WX 500 ; N six ; B 30 -7 521 686 ; C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ; C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ; C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ; C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ; C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ; C 60 ; WX 675 ; N less ; B 84 -10 592 516 ; C 61 ; WX 675 ; N equal ; B 86 120 590 386 ; C 62 ; WX 675 ; N greater ; B 84 -10 592 516 ; C 63 ; WX 500 ; N question ; B 132 -12 472 664 ; C 64 ; WX 920 ; N at ; B 118 -18 806 666 ; C 65 ; WX 611 ; N A ; B -51 0 564 668 ; C 66 ; WX 611 ; N B ; B -8 0 588 653 ; C 67 ; WX 667 ; N C ; B 66 -18 689 666 ; C 68 ; WX 722 ; N D ; B -8 0 700 653 ; C 69 ; WX 611 ; N E ; B -1 0 634 653 ; C 70 ; WX 611 ; N F ; B 8 0 645 653 ; C 71 ; WX 722 ; N G ; B 52 -18 722 666 ; C 72 ; WX 722 ; N H ; B -8 0 767 653 ; C 73 ; WX 333 ; N I ; B -8 0 384 653 ; C 74 ; WX 444 ; N J ; B -6 -18 491 653 ; C 75 ; WX 667 ; N K ; B 7 0 722 653 ; C 76 ; WX 556 ; N L ; B -8 0 559 653 ; C 77 ; WX 833 ; N M ; B -18 0 873 653 ; C 78 ; WX 667 ; N N ; B -20 -15 727 653 ; C 79 ; WX 722 ; N O ; B 60 -18 706 666 ; C 80 ; WX 611 ; N P ; B 0 0 605 653 ; C 81 ; WX 722 ; N Q ; B 59 -183 699 666 ; C 82 ; WX 611 ; N R ; B -13 0 588 653 ; C 83 ; WX 500 ; N S ; B 17 -18 508 667 ; C 84 ; WX 556 ; N T ; B 59 0 633 653 ; C 85 ; WX 722 ; N U ; B 102 -18 765 653 ; C 86 ; WX 611 ; N V ; B 76 -18 688 653 ; C 87 ; WX 833 ; N W ; B 71 -18 906 653 ; C 88 ; WX 611 ; N X ; B -29 0 655 653 ; C 89 ; WX 556 ; N Y ; B 78 0 633 653 ; C 90 ; WX 556 ; N Z ; B -6 0 606 653 ; C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ; C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ; C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ; C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ; C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; C 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ; C 97 ; WX 500 ; N a ; B 17 -11 476 441 ; C 98 ; WX 500 ; N b ; B 23 -11 473 683 ; C 99 ; WX 444 ; N c ; B 30 -11 425 441 ; C 100 ; WX 500 ; N d ; B 15 -13 527 683 ; C 101 ; WX 444 ; N e ; B 31 -11 412 441 ; C 102 ; WX 278 ; N f ; B -147 -207 424 678 ; C 103 ; WX 500 ; N g ; B 8 -206 472 441 ; C 104 ; WX 500 ; N h ; B 19 -9 478 683 ; C 105 ; WX 278 ; N i ; B 49 -11 264 654 ; C 106 ; WX 278 ; N j ; B -124 -207 276 654 ; C 107 ; WX 444 ; N k ; B 14 -11 461 683 ; C 108 ; WX 278 ; N l ; B 40 -11 279 683 ; C 109 ; WX 722 ; N m ; B 12 -9 704 441 ; C 110 ; WX 500 ; N n ; B 14 -9 474 441 ; C 111 ; WX 500 ; N o ; B 27 -11 468 441 ; C 112 ; WX 500 ; N p ; B -75 -205 469 442 ; C 113 ; WX 500 ; N q ; B 25 -209 483 441 ; C 114 ; WX 389 ; N r ; B 45 0 412 441 ; C 115 ; WX 389 ; N s ; B 16 -13 366 442 ; C 116 ; WX 278 ; N t ; B 37 -11 296 546 ; C 117 ; WX 500 ; N u ; B 42 -11 475 441 ; C 118 ; WX 444 ; N v ; B 21 -18 426 441 ; C 119 ; WX 667 ; N w ; B 16 -18 648 441 ; C 120 ; WX 444 ; N x ; B -27 -11 447 441 ; C 121 ; WX 444 ; N y ; B -24 -206 426 441 ; C 122 ; WX 389 ; N z ; B -2 -81 380 428 ; C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ; C 124 ; WX 275 ; N bar ; B 105 -18 171 666 ; C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ; C 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 ; C 161 ; WX 389 ; N exclamdown ; B 59 -205 321 474 ; C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ; C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ; C 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ; C 165 ; WX 500 ; N yen ; B 27 0 603 653 ; C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ; C 167 ; WX 500 ; N section ; B 53 -162 461 666 ; C 168 ; WX 500 ; N currency ; B -22 53 522 597 ; C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ; C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ; C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ; C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ; C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ; C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ; C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ; C 177 ; WX 500 ; N endash ; B -6 197 505 243 ; C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ; C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ; C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ; C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ; C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ; C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ; C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ; C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ; C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ; C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ; C 191 ; WX 500 ; N questiondown ; B 28 -205 367 473 ; C 193 ; WX 333 ; N grave ; B 121 492 311 664 ; C 194 ; WX 333 ; N acute ; B 180 494 403 664 ; C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ; C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ; C 197 ; WX 333 ; N macron ; B 99 532 411 583 ; C 198 ; WX 333 ; N breve ; B 117 492 418 650 ; C 199 ; WX 333 ; N dotaccent ; B 207 508 305 606 ; C 200 ; WX 333 ; N dieresis ; B 107 508 405 606 ; C 202 ; WX 333 ; N ring ; B 155 508 355 707 ; C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ; C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ; C 206 ; WX 333 ; N ogonek ; B -20 -169 200 40 ; C 207 ; WX 333 ; N caron ; B 121 492 426 661 ; C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ; C 225 ; WX 889 ; N AE ; B -27 0 911 653 ; C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ; C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ; C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ; C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ; C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ; C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ; C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ; C 248 ; WX 278 ; N lslash ; B 37 -11 307 683 ; C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ; C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ; C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ; C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ; C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ; C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ; C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ; C -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ; C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ; C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ; C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ; C -1 ; WX 722 ; N Otilde ; B 60 -18 706 836 ; C -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ; C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 706 876 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ; C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ; C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ; C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ; C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ; C -1 ; WX 722 ; N Uring ; B 102 -18 765 919 ; C -1 ; WX 500 ; N gbreve ; B 8 -206 502 650 ; C -1 ; WX 444 ; N eogonek ; B 31 -169 444 441 ; C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ; C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ; C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ; C -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ; C -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ; C -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ; C -1 ; WX 521 ; N dcaron ; B 15 -13 641 683 ; C -1 ; WX 444 ; N ccedilla ; B 26 -217 425 441 ; C -1 ; WX 444 ; N ccaron ; B 30 -11 484 661 ; C -1 ; WX 444 ; N cacute ; B 30 -11 458 664 ; C -1 ; WX 500 ; N aogonek ; B 17 -169 500 441 ; C -1 ; WX 500 ; N aring ; B 17 -11 476 707 ; C -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ; C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ; C -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ; C -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ; C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ; C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ; C -1 ; WX 722 ; N Uogonek ; B 102 -169 765 653 ; C -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ; C -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ; C -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ; C -1 ; WX 278 ; N tcaron ; B 37 -11 378 666 ; C -1 ; WX 389 ; N scommaaccent ; B 16 -270 366 442 ; C -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ; C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ; C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ; C -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ; C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ; C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ; C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ; C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ; C -1 ; WX 556 ; N Tcommaaccent ; B 59 -270 633 653 ; C -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ; C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ; C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ; C -1 ; WX 722 ; N Ograve ; B 60 -18 706 876 ; C -1 ; WX 722 ; N Oacute ; B 60 -18 706 876 ; C -1 ; WX 722 ; N Odieresis ; B 60 -18 706 818 ; C -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ; C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ; C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ; C -1 ; WX 556 ; N Lcaron ; B -8 0 596 666 ; C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ; C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ; C -1 ; WX 389 ; N racute ; B 45 0 431 664 ; C -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ; C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 570 664 ; C -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ; C -1 ; WX 500 ; N Euro ; B 57 0 668 693 ; C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ; C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ; C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ; C -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ; C -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ; C -1 ; WX 333 ; N Iacute ; B -8 0 403 876 ; C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ; C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ; C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ; C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ; C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ; C -1 ; WX 667 ; N Kcommaaccent ; B 7 -270 722 653 ; C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ; C -1 ; WX 500 ; N Scommaaccent ; B 17 -270 508 667 ; C -1 ; WX 611 ; N Eogonek ; B -1 -169 651 653 ; C -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ; C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ; C -1 ; WX 278 ; N iogonek ; B 49 -169 278 654 ; C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ; C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ; C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ; C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ; C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ; C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ; C -1 ; WX 389 ; N scedilla ; B -2 -217 366 442 ; C -1 ; WX 389 ; N rcaron ; B 45 0 454 661 ; C -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ; C -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ; C -1 ; WX 722 ; N Gcommaaccent ; B 52 -270 722 666 ; C -1 ; WX 611 ; N Rcommaaccent ; B -13 -270 588 653 ; C -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ; C -1 ; WX 500 ; N nacute ; B 14 -9 487 664 ; C -1 ; WX 500 ; N uogonek ; B 42 -169 500 441 ; C -1 ; WX 500 ; N umacron ; B 42 -11 495 583 ; C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ; C -1 ; WX 278 ; N lcaron ; B 40 -11 395 683 ; C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ; C -1 ; WX 667 ; N Cacute ; B 66 -18 689 876 ; C -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ; C -1 ; WX 400 ; N degree ; B 101 390 387 676 ; C -1 ; WX 611 ; N Aogonek ; B -51 -169 707 668 ; C -1 ; WX 675 ; N minus ; B 86 220 590 286 ; C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ; C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ; C -1 ; WX 611 ; N Aring ; B -51 0 564 904 ; C -1 ; WX 980 ; N trademark ; B 30 247 957 653 ; C -1 ; WX 389 ; N rcommaaccent ; B 35 -270 412 441 ; C -1 ; WX 278 ; N lacute ; B 40 -11 376 876 ; C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ; C -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ; C -1 ; WX 278 ; N icircumflex ; B 34 -11 328 661 ; C -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ; C -1 ; WX 500 ; N ncommaaccent ; B 14 -270 474 441 ; C -1 ; WX 278 ; N lcommaaccent ; B -21 -270 279 683 ; C -1 ; WX 675 ; N plusminus ; B 86 0 590 568 ; C -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ; C -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ; C -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ; C -1 ; WX 278 ; N iacute ; B 49 -11 356 664 ; C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ; C -1 ; WX 444 ; N kcommaaccent ; B 14 -270 461 683 ; C -1 ; WX 722 ; N Omacron ; B 60 -18 706 795 ; C -1 ; WX 278 ; N imacron ; B 49 -11 384 583 ; C -1 ; WX 444 ; N emacron ; B 31 -11 467 583 ; C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ; C -1 ; WX 278 ; N tcommaaccent ; B -21 -270 296 546 ; C -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ; C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ; C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ; C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ; C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ; C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 570 664 ; C -1 ; WX 500 ; N eth ; B 27 -11 482 683 ; C -1 ; WX 500 ; N uring ; B 42 -11 475 707 ; C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 706 873 ; C -1 ; WX 333 ; N commaaccent ; B 7 -270 146 -40 ; C -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ; C -1 ; WX 760 ; N registered ; B 41 -18 719 666 ; C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ; C -1 ; WX 278 ; N idieresis ; B 49 -11 353 606 ; C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ; C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; C -1 ; WX 564 ; N notequal ; B 30 -3 534 509 ; C -1 ; WX 549 ; N radical ; B -2 -65 526 924 ; C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ; C -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ; C -1 ; WX 675 ; N lessequal ; B 84 0 592 628 ; C -1 ; WX 675 ; N greaterequal ; B 84 0 592 628 ; C -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ; C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ; C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ; C -1 ; WX 667 ; N Ncommaaccent ; B -20 -270 727 653 ; C -1 ; WX 500 ; N dcroat ; B 15 -13 558 683 ; C -1 ; WX 275 ; N brokenbar ; B 105 -18 171 666 ; C -1 ; WX 556 ; N Lcommaaccent ; B -8 -270 559 653 ; C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ; C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ; C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -50 KPX A Ccedilla -50 KPX A G -44 KPX A O -45 KPX A Odieresis -45 KPX A Q -44 KPX A T -14 KPX A U -57 KPX A Uacute -57 KPX A Ucircumflex -57 KPX A Udieresis -57 KPX A Ugrave -57 KPX A V -81 KPX A W -75 KPX A Y -21 KPX A a -4 KPX A b 0 KPX A c -18 KPX A ccedilla -28 KPX A comma 8 KPX A d -4 KPX A e -17 KPX A g -25 KPX A guillemotleft -44 KPX A guilsinglleft -43 KPX A hyphen -13 KPX A o -17 KPX A period 8 KPX A q -12 KPX A quotedblright -92 KPX A quoteright -92 KPX A t -6 KPX A u -9 KPX A v -50 KPX A w -44 KPX A y -57 KPX Aacute C -50 KPX Aacute G -44 KPX Aacute O -45 KPX Aacute Q -44 KPX Aacute T -14 KPX Aacute U -57 KPX Aacute V -81 KPX Aacute W -75 KPX Aacute Y -21 KPX Aacute a -4 KPX Aacute b 0 KPX Aacute c -18 KPX Aacute comma 8 KPX Aacute d -4 KPX Aacute e -17 KPX Aacute g -25 KPX Aacute guillemotleft -44 KPX Aacute guilsinglleft -43 KPX Aacute hyphen -13 KPX Aacute o -17 KPX Aacute period 8 KPX Aacute q -12 KPX Aacute quoteright -92 KPX Aacute t -6 KPX Aacute u -9 KPX Aacute v -50 KPX Aacute w -44 KPX Aacute y -57 KPX Acircumflex C -50 KPX Acircumflex G -44 KPX Acircumflex O -45 KPX Acircumflex Q -44 KPX Acircumflex T -14 KPX Acircumflex U -57 KPX Acircumflex V -81 KPX Acircumflex W -75 KPX Acircumflex Y -21 KPX Acircumflex comma 8 KPX Acircumflex period 8 KPX Adieresis C -50 KPX Adieresis G -44 KPX Adieresis O -45 KPX Adieresis Q -44 KPX Adieresis T -14 KPX Adieresis U -57 KPX Adieresis V -81 KPX Adieresis W -75 KPX Adieresis Y -21 KPX Adieresis a -4 KPX Adieresis b 0 KPX Adieresis c -18 KPX Adieresis comma 8 KPX Adieresis d -4 KPX Adieresis g -25 KPX Adieresis guillemotleft -44 KPX Adieresis guilsinglleft -43 KPX Adieresis hyphen -13 KPX Adieresis o -17 KPX Adieresis period 8 KPX Adieresis q -12 KPX Adieresis quotedblright -92 KPX Adieresis quoteright -92 KPX Adieresis t -6 KPX Adieresis u -9 KPX Adieresis v -50 KPX Adieresis w -44 KPX Adieresis y -57 KPX Agrave C -50 KPX Agrave G -44 KPX Agrave O -45 KPX Agrave Q -44 KPX Agrave T -14 KPX Agrave U -57 KPX Agrave V -81 KPX Agrave W -75 KPX Agrave Y -21 KPX Agrave comma 8 KPX Agrave period 8 KPX Aring C -50 KPX Aring G -44 KPX Aring O -45 KPX Aring Q -44 KPX Aring T -14 KPX Aring U -57 KPX Aring V -81 KPX Aring W -75 KPX Aring Y -21 KPX Aring a -4 KPX Aring b 0 KPX Aring c -18 KPX Aring comma 8 KPX Aring d -4 KPX Aring e -17 KPX Aring g -25 KPX Aring guillemotleft -44 KPX Aring guilsinglleft -43 KPX Aring hyphen -13 KPX Aring o -17 KPX Aring period 8 KPX Aring q -12 KPX Aring quotedblright -92 KPX Aring quoteright -92 KPX Aring t -6 KPX Aring u -9 KPX Aring v -50 KPX Aring w -44 KPX Aring y -57 KPX Atilde C -50 KPX Atilde G -44 KPX Atilde O -45 KPX Atilde Q -44 KPX Atilde T -14 KPX Atilde U -57 KPX Atilde V -81 KPX Atilde W -75 KPX Atilde Y -21 KPX Atilde comma 7 KPX Atilde period 7 KPX B A -23 KPX B AE -35 KPX B Aacute -23 KPX B Acircumflex -23 KPX B Adieresis -23 KPX B Aring -23 KPX B Atilde -23 KPX B O -14 KPX B OE -6 KPX B Oacute -14 KPX B Ocircumflex -14 KPX B Odieresis -14 KPX B Ograve -14 KPX B Oslash -14 KPX B V -32 KPX B W -29 KPX B Y -39 KPX C A -14 KPX C AE -30 KPX C Aacute -14 KPX C Adieresis -14 KPX C Aring -14 KPX C H -13 KPX C K -21 KPX C O -19 KPX C Oacute -19 KPX C Odieresis -19 KPX Ccedilla A -18 KPX D A -36 KPX D Aacute -36 KPX D Acircumflex -36 KPX D Adieresis -36 KPX D Agrave -36 KPX D Aring -36 KPX D Atilde -36 KPX D J -32 KPX D T -9 KPX D V -42 KPX D W -36 KPX D X -40 KPX D Y -50 KPX F A -72 KPX F Aacute -72 KPX F Acircumflex -72 KPX F Adieresis -72 KPX F Agrave -72 KPX F Aring -72 KPX F Atilde -72 KPX F J -60 KPX F O -40 KPX F Odieresis -40 KPX F a -77 KPX F aacute -78 KPX F adieresis -52 KPX F ae -82 KPX F aring -70 KPX F comma -95 KPX F e -83 KPX F eacute -83 KPX F hyphen -45 KPX F i -36 KPX F j -41 KPX F o -79 KPX F oacute -79 KPX F odieresis -52 KPX F oe -75 KPX F oslash -80 KPX F period -99 KPX F r -52 KPX F u -50 KPX G A -17 KPX G AE -29 KPX G Aacute -17 KPX G Acircumflex -17 KPX G Adieresis -17 KPX G Agrave -17 KPX G Aring -17 KPX G Atilde -17 KPX G T -13 KPX G V -5 KPX G W -2 KPX G Y -12 KPX J A -40 KPX J AE -52 KPX J Adieresis -40 KPX J Aring -40 KPX K C -55 KPX K G -53 KPX K O -46 KPX K OE -45 KPX K Oacute -46 KPX K Odieresis -46 KPX K S 6 KPX K T 21 KPX K a -5 KPX K adieresis -5 KPX K ae -5 KPX K aring -5 KPX K e -18 KPX K hyphen -57 KPX K o -18 KPX K oacute -18 KPX K odieresis -18 KPX K u -10 KPX K udieresis -10 KPX K y -89 KPX L A 44 KPX L AE 32 KPX L Aacute 44 KPX L Adieresis 44 KPX L Aring 44 KPX L C 6 KPX L Ccedilla 4 KPX L G 11 KPX L O 10 KPX L Oacute 10 KPX L Ocircumflex 10 KPX L Odieresis 10 KPX L Ograve 10 KPX L Otilde 10 KPX L S 20 KPX L T -13 KPX L U -8 KPX L Udieresis -8 KPX L V -55 KPX L W -48 KPX L Y -20 KPX L hyphen 47 KPX L quotedblright -92 KPX L quoteright -92 KPX L u 12 KPX L udieresis 10 KPX L y -26 KPX N A -20 KPX N AE -32 KPX N Aacute -20 KPX N Adieresis -20 KPX N Aring -20 KPX N C -21 KPX N Ccedilla -20 KPX N G -14 KPX N O -20 KPX N Oacute -20 KPX N Odieresis -20 KPX N a -22 KPX N aacute -23 KPX N adieresis -23 KPX N ae -27 KPX N aring -23 KPX N comma -13 KPX N e -28 KPX N eacute -30 KPX N o -25 KPX N oacute -27 KPX N odieresis -27 KPX N oslash -27 KPX N period -16 KPX N u -24 KPX N udieresis -25 KPX O A -38 KPX O AE -70 KPX O Aacute -38 KPX O Adieresis -38 KPX O Aring -38 KPX O T -3 KPX O V -45 KPX O W -39 KPX O X -41 KPX O Y -51 KPX Oacute A -38 KPX Oacute T -3 KPX Oacute V -45 KPX Oacute W -39 KPX Oacute Y -51 KPX Ocircumflex T -3 KPX Ocircumflex V -45 KPX Ocircumflex Y -51 KPX Odieresis A -38 KPX Odieresis T -3 KPX Odieresis V -45 KPX Odieresis W -39 KPX Odieresis X -41 KPX Odieresis Y -51 KPX Ograve T -3 KPX Ograve V -45 KPX Ograve Y -51 KPX Oslash A -38 KPX Otilde T -3 KPX Otilde V -45 KPX Otilde Y -51 KPX P A -79 KPX P AE -116 KPX P Aacute -79 KPX P Adieresis -79 KPX P Aring -79 KPX P J -89 KPX P a -74 KPX P aacute -74 KPX P adieresis -64 KPX P ae -80 KPX P aring -74 KPX P comma -118 KPX P e -79 KPX P eacute -79 KPX P hyphen -64 KPX P o -73 KPX P oacute -73 KPX P odieresis -64 KPX P oe -67 KPX P oslash -74 KPX P period -121 KPX R C -26 KPX R Ccedilla -25 KPX R G -20 KPX R O -26 KPX R OE -18 KPX R Oacute -26 KPX R Odieresis -26 KPX R T 0 KPX R U -36 KPX R Udieresis -36 KPX R V -31 KPX R W -28 KPX R Y -19 KPX R a -3 KPX R aacute -3 KPX R adieresis -3 KPX R ae -3 KPX R aring -3 KPX R e -15 KPX R eacute -15 KPX R hyphen -29 KPX R o -15 KPX R oacute -15 KPX R odieresis -15 KPX R oe -15 KPX R u -7 KPX R uacute -7 KPX R udieresis -7 KPX R y 0 KPX S A -2 KPX S AE -14 KPX S Aacute -2 KPX S Adieresis -2 KPX S Aring -2 KPX S T 1 KPX S V 5 KPX S W 8 KPX S Y -1 KPX S t -13 KPX T A -33 KPX T AE -45 KPX T Aacute -33 KPX T Acircumflex -33 KPX T Adieresis -33 KPX T Agrave -33 KPX T Aring -33 KPX T Atilde -33 KPX T C -15 KPX T G -7 KPX T J -39 KPX T O -20 KPX T OE -8 KPX T Oacute -20 KPX T Ocircumflex -20 KPX T Odieresis -20 KPX T Ograve -20 KPX T Oslash -20 KPX T Otilde -20 KPX T S -2 KPX T V 41 KPX T W 43 KPX T Y 33 KPX T a -81 KPX T ae -81 KPX T c -86 KPX T colon -84 KPX T comma -70 KPX T e -90 KPX T g -102 KPX T guillemotleft -102 KPX T guilsinglleft -101 KPX T hyphen -68 KPX T i -16 KPX T j -20 KPX T o -87 KPX T oslash -89 KPX T period -71 KPX T r -87 KPX T s -74 KPX T semicolon -92 KPX T u -86 KPX T v -72 KPX T w -69 KPX T y -70 KPX U A -50 KPX U AE -69 KPX U Aacute -50 KPX U Acircumflex -50 KPX U Adieresis -50 KPX U Aring -50 KPX U Atilde -50 KPX U comma -35 KPX U m -28 KPX U n -29 KPX U p -32 KPX U period -39 KPX U r -41 KPX Uacute A -50 KPX Uacute comma -35 KPX Uacute m -28 KPX Uacute n -29 KPX Uacute p -32 KPX Uacute period -39 KPX Uacute r -41 KPX Ucircumflex A -50 KPX Udieresis A -50 KPX Udieresis b 1 KPX Udieresis comma -35 KPX Udieresis m -28 KPX Udieresis n -29 KPX Udieresis p -32 KPX Udieresis period -39 KPX Udieresis r -41 KPX Ugrave A -50 KPX V A -66 KPX V AE -102 KPX V Aacute -66 KPX V Acircumflex -66 KPX V Adieresis -66 KPX V Agrave -66 KPX V Aring -66 KPX V Atilde -66 KPX V C -48 KPX V G -42 KPX V O -48 KPX V Oacute -48 KPX V Ocircumflex -48 KPX V Odieresis -48 KPX V Ograve -48 KPX V Oslash -48 KPX V Otilde -48 KPX V S -15 KPX V T 32 KPX V a -67 KPX V ae -72 KPX V colon -82 KPX V comma -76 KPX V e -74 KPX V g -84 KPX V guillemotleft -82 KPX V guilsinglleft -81 KPX V hyphen -45 KPX V i -16 KPX V o -70 KPX V oslash -72 KPX V period -80 KPX V r -45 KPX V semicolon -79 KPX V u -40 KPX V y -16 KPX W A -57 KPX W AE -85 KPX W Aacute -57 KPX W Acircumflex -57 KPX W Adieresis -57 KPX W Agrave -57 KPX W Aring -57 KPX W Atilde -57 KPX W C -39 KPX W G -33 KPX W O -39 KPX W Oacute -39 KPX W Ocircumflex -39 KPX W Odieresis -39 KPX W Ograve -39 KPX W Oslash -39 KPX W Otilde -39 KPX W S -17 KPX W T 30 KPX W a -53 KPX W ae -58 KPX W colon -77 KPX W comma -58 KPX W e -60 KPX W g -75 KPX W guillemotleft -68 KPX W guilsinglleft -67 KPX W hyphen -32 KPX W i -18 KPX W o -56 KPX W oslash -58 KPX W period -62 KPX W r -40 KPX W semicolon -74 KPX W u -35 KPX W y -11 KPX X C -50 KPX X O -44 KPX X Odieresis -44 KPX X Q -42 KPX X a -3 KPX X e -15 KPX X hyphen -41 KPX X o -15 KPX X u -7 KPX X y -67 KPX Y A -27 KPX Y AE -39 KPX Y Aacute -27 KPX Y Acircumflex -27 KPX Y Adieresis -27 KPX Y Agrave -27 KPX Y Aring -27 KPX Y Atilde -27 KPX Y C -52 KPX Y G -45 KPX Y O -52 KPX Y Oacute -52 KPX Y Ocircumflex -52 KPX Y Odieresis -52 KPX Y Ograve -52 KPX Y Oslash -52 KPX Y Otilde -52 KPX Y S -15 KPX Y T 32 KPX Y a -72 KPX Y ae -75 KPX Y colon -78 KPX Y comma -64 KPX Y e -78 KPX Y g -94 KPX Y guillemotleft -93 KPX Y guilsinglleft -92 KPX Y hyphen -60 KPX Y i -16 KPX Y o -75 KPX Y oslash -77 KPX Y p -52 KPX Y period -65 KPX Y semicolon -86 KPX Y u -58 KPX Y v -32 KPX Z v -12 KPX Z y -28 KPX a j -22 KPX a quoteright -28 KPX a v 1 KPX a w 4 KPX a y 2 KPX aacute v 1 KPX aacute w 4 KPX aacute y 2 KPX adieresis v 1 KPX adieresis w 4 KPX adieresis y 2 KPX ae v 2 KPX ae w 5 KPX ae y 6 KPX agrave v 1 KPX agrave w 4 KPX agrave y 2 KPX aring v 1 KPX aring w 4 KPX aring y 2 KPX b v -10 KPX b w -7 KPX b y -3 KPX c h -30 KPX c k -29 KPX comma one -40 KPX comma quotedblright -39 KPX comma quoteright -39 KPX e quoteright -21 KPX e t -16 KPX e v 0 KPX e w 2 KPX e x -10 KPX e y 4 KPX eacute v 0 KPX eacute w 2 KPX eacute y 4 KPX ecircumflex v 0 KPX ecircumflex w 2 KPX ecircumflex y 4 KPX eight four 13 KPX eight one -50 KPX eight seven -1 KPX f a -26 KPX f aacute -27 KPX f adieresis -2 KPX f ae -30 KPX f aring -17 KPX f e -32 KPX f eacute -34 KPX f f 30 KPX f i 17 KPX f j 13 KPX f l 42 KPX f o -29 KPX f oacute -30 KPX f odieresis -2 KPX f oe -24 KPX f oslash -31 KPX f quoteright 18 KPX f s -20 KPX f t 18 KPX five four -5 KPX five one -71 KPX five seven -28 KPX four four 12 KPX four one -69 KPX four seven -27 KPX g a -41 KPX g adieresis -42 KPX g ae -46 KPX g aring -42 KPX g e -45 KPX g eacute -45 KPX g l -46 KPX g oacute -41 KPX g odieresis -41 KPX g r -21 KPX guillemotright A -25 KPX guillemotright AE -51 KPX guillemotright Aacute -25 KPX guillemotright Adieresis -25 KPX guillemotright Aring -25 KPX guillemotright T -77 KPX guillemotright V -76 KPX guillemotright W -67 KPX guillemotright Y -81 KPX guilsinglright A -24 KPX guilsinglright AE -50 KPX guilsinglright Aacute -24 KPX guilsinglright Adieresis -24 KPX guilsinglright Aring -24 KPX guilsinglright T -76 KPX guilsinglright V -75 KPX guilsinglright W -66 KPX guilsinglright Y -80 KPX h quoteright -31 KPX h y -4 KPX hyphen A 3 KPX hyphen AE -23 KPX hyphen Aacute 3 KPX hyphen Adieresis 3 KPX hyphen Aring 3 KPX hyphen T -46 KPX hyphen V -43 KPX hyphen W -34 KPX hyphen Y -53 KPX i T -10 KPX i j -31 KPX k a 12 KPX k aacute 12 KPX k adieresis 12 KPX k ae 9 KPX k aring 12 KPX k comma 27 KPX k e 5 KPX k eacute 5 KPX k g -27 KPX k hyphen -27 KPX k o 6 KPX k oacute 6 KPX k odieresis 6 KPX k period 26 KPX k s 7 KPX k u 8 KPX k udieresis 8 KPX l v -12 KPX l y -11 KPX m p -4 KPX m v -6 KPX m w -4 KPX m y -3 KPX n T -41 KPX n p -7 KPX n quoteright -34 KPX n v -10 KPX n w -7 KPX n y -6 KPX nine four 2 KPX nine one -64 KPX nine seven -5 KPX o T -63 KPX o quoteright -24 KPX o t -15 KPX o v -18 KPX o w -15 KPX o x -33 KPX o y -10 KPX oacute v -18 KPX oacute w -15 KPX oacute y -10 KPX ocircumflex t -16 KPX odieresis t -16 KPX odieresis v -18 KPX odieresis w -15 KPX odieresis x -33 KPX odieresis y -10 KPX ograve v -18 KPX ograve w -15 KPX ograve y -10 KPX one comma -52 KPX one eight -57 KPX one five -55 KPX one four -69 KPX one nine -61 KPX one one -69 KPX one period -56 KPX one seven -60 KPX one six -50 KPX one three -55 KPX one two -50 KPX one zero -41 KPX p t -14 KPX p y -4 KPX period one -39 KPX period quotedblright -38 KPX period quoteright -38 KPX q c -13 KPX q u -11 KPX quotedblbase A 1 KPX quotedblbase AE -13 KPX quotedblbase T -64 KPX quotedblbase V -96 KPX quotedblbase W -84 KPX quotedblbase Y -69 KPX quotedblleft A -88 KPX quotedblleft AE -141 KPX quotedblleft Aacute -88 KPX quotedblleft Adieresis -88 KPX quotedblleft Aring -88 KPX quotedblleft T -19 KPX quotedblleft V -17 KPX quotedblleft W -15 KPX quotedblleft Y -25 KPX quotedblright A -94 KPX quotedblright AE -147 KPX quotedblright Aacute -94 KPX quotedblright Adieresis -94 KPX quotedblright Aring -94 KPX quotedblright T -21 KPX quotedblright V -22 KPX quotedblright W -19 KPX quotedblright Y -30 KPX quoteleft A -78 KPX quoteleft AE -131 KPX quoteleft Aacute -78 KPX quoteleft Adieresis -78 KPX quoteleft Aring -78 KPX quoteleft T -9 KPX quoteleft V -8 KPX quoteleft W -5 KPX quoteleft Y -15 KPX quoteright A -87 KPX quoteright AE -140 KPX quoteright Aacute -87 KPX quoteright Adieresis -87 KPX quoteright Aring -87 KPX quoteright comma -73 KPX quoteright d -79 KPX quoteright o -78 KPX quoteright period -78 KPX quoteright r -57 KPX quoteright s -63 KPX quoteright t -49 KPX quoteright v -28 KPX quoteright w -26 KPX quoteright y -28 KPX r a -29 KPX r aacute -29 KPX r acircumflex -29 KPX r adieresis -29 KPX r ae -36 KPX r agrave -29 KPX r aring -29 KPX r c -26 KPX r ccedilla -17 KPX r colon -28 KPX r comma -68 KPX r d -31 KPX r e -35 KPX r eacute -35 KPX r ecircumflex -35 KPX r egrave -35 KPX r f 23 KPX r g -21 KPX r h -17 KPX r hyphen -52 KPX r i 8 KPX r j 4 KPX r k -15 KPX r l -21 KPX r m 17 KPX r n 16 KPX r o -28 KPX r oacute -28 KPX r ocircumflex -28 KPX r odieresis -28 KPX r oe -23 KPX r ograve -28 KPX r oslash -29 KPX r p 13 KPX r period -72 KPX r q -31 KPX r quoteright -4 KPX r r 4 KPX r s -17 KPX r semicolon -28 KPX r t 12 KPX r u 11 KPX r v 30 KPX r w 32 KPX r x 7 KPX r y 33 KPX r z 0 KPX s quoteright -20 KPX s t -12 KPX seven colon -88 KPX seven comma -79 KPX seven eight -32 KPX seven five -53 KPX seven four -65 KPX seven one -47 KPX seven period -83 KPX seven seven -11 KPX seven six -37 KPX seven three -42 KPX seven two -13 KPX six four 17 KPX six one -64 KPX six seven -37 KPX t S -9 KPX t a -6 KPX t aacute -6 KPX t adieresis -6 KPX t ae -10 KPX t aring -6 KPX t colon -29 KPX t e -13 KPX t eacute -13 KPX t h -11 KPX t o -11 KPX t oacute -11 KPX t odieresis -11 KPX t quoteright -19 KPX t semicolon -26 KPX three four -9 KPX three one -76 KPX three seven -15 KPX two four -12 KPX two one -45 KPX two seven -22 KPX u quoteright -31 KPX v a -24 KPX v aacute -26 KPX v acircumflex -26 KPX v adieresis -26 KPX v ae -29 KPX v agrave -26 KPX v aring -26 KPX v atilde -26 KPX v c -26 KPX v colon -48 KPX v comma -46 KPX v e -30 KPX v eacute -32 KPX v ecircumflex -32 KPX v egrave -32 KPX v g -36 KPX v hyphen 0 KPX v l -29 KPX v o -26 KPX v oacute -28 KPX v odieresis -28 KPX v ograve -28 KPX v oslash -29 KPX v period -51 KPX v s -30 KPX v semicolon -48 KPX w a -26 KPX w aacute -28 KPX w acircumflex -28 KPX w adieresis -28 KPX w ae -31 KPX w agrave -28 KPX w aring -28 KPX w atilde -28 KPX w c -28 KPX w colon -49 KPX w comma -47 KPX w e -32 KPX w eacute -34 KPX w ecircumflex -34 KPX w egrave -34 KPX w g -38 KPX w hyphen -4 KPX w l -30 KPX w o -28 KPX w oacute -30 KPX w odieresis -30 KPX w ograve -30 KPX w oslash -31 KPX w period -51 KPX w s -32 KPX w semicolon -49 KPX x a 6 KPX x c 0 KPX x e 0 KPX x eacute 0 KPX x o 1 KPX x q 2 KPX y a -12 KPX y aacute -12 KPX y acircumflex -12 KPX y adieresis -12 KPX y ae -17 KPX y agrave -12 KPX y aring -12 KPX y atilde -12 KPX y c -15 KPX y colon -48 KPX y comma -21 KPX y e -19 KPX y eacute -19 KPX y ecircumflex -19 KPX y egrave -19 KPX y g -34 KPX y hyphen 7 KPX y l -18 KPX y o -15 KPX y oacute -15 KPX y odieresis -15 KPX y ograve -15 KPX y oslash -16 KPX y period -25 KPX y s -19 KPX y semicolon -45 KPX zero four 14 KPX zero one -50 KPX zero seven -3 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-BoldItalic.afm0100664000212600000240000007640607477306250016654 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Times-BoldItalic FullName Times Roman Bold Italic FamilyName Times Roman Weight Bold ItalicAngle -15.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -200 -324 996 964 CapHeight 669 XHeight 449 Descender -205 Ascender 699 StartCharMetrics 316 C 32 ; WX 250 ; N space ; B 125 0 125 0 ; C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ; C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ; C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ; C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ; C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ; C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ; C 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ; C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ; C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ; C 42 ; WX 500 ; N asterisk ; B 65 252 456 685 ; C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ; C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ; C 46 ; WX 250 ; N period ; B -9 -13 139 135 ; C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ; C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ; C 49 ; WX 500 ; N one ; B 5 0 419 683 ; C 50 ; WX 500 ; N two ; B -27 0 446 683 ; C 51 ; WX 500 ; N three ; B -15 -13 450 683 ; C 52 ; WX 500 ; N four ; B -15 0 503 683 ; C 53 ; WX 500 ; N five ; B -11 -13 487 669 ; C 54 ; WX 500 ; N six ; B 23 -15 509 679 ; C 55 ; WX 500 ; N seven ; B 52 0 525 669 ; C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ; C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ; C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ; C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ; C 60 ; WX 570 ; N less ; B 31 -12 539 518 ; C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; C 62 ; WX 570 ; N greater ; B 31 -12 539 518 ; C 63 ; WX 500 ; N question ; B 79 -13 470 684 ; C 64 ; WX 832 ; N at ; B 63 -18 770 685 ; C 65 ; WX 667 ; N A ; B -67 0 593 683 ; C 66 ; WX 667 ; N B ; B -24 0 624 669 ; C 67 ; WX 667 ; N C ; B 32 -18 677 685 ; C 68 ; WX 722 ; N D ; B -46 0 685 669 ; C 69 ; WX 667 ; N E ; B -27 0 653 669 ; C 70 ; WX 667 ; N F ; B -13 0 660 669 ; C 71 ; WX 722 ; N G ; B 21 -18 706 685 ; C 72 ; WX 778 ; N H ; B -24 0 799 669 ; C 73 ; WX 389 ; N I ; B -32 0 406 669 ; C 74 ; WX 500 ; N J ; B -46 -99 524 669 ; C 75 ; WX 667 ; N K ; B -21 0 702 669 ; C 76 ; WX 611 ; N L ; B -22 0 590 669 ; C 77 ; WX 889 ; N M ; B -29 -12 917 669 ; C 78 ; WX 722 ; N N ; B -27 -15 748 669 ; C 79 ; WX 722 ; N O ; B 27 -18 691 685 ; C 80 ; WX 611 ; N P ; B -27 0 613 669 ; C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ; C 82 ; WX 667 ; N R ; B -29 0 623 669 ; C 83 ; WX 556 ; N S ; B 2 -18 526 685 ; C 84 ; WX 611 ; N T ; B 50 0 650 669 ; C 85 ; WX 722 ; N U ; B 67 -18 744 669 ; C 86 ; WX 667 ; N V ; B 65 -18 715 669 ; C 87 ; WX 889 ; N W ; B 65 -18 940 669 ; C 88 ; WX 667 ; N X ; B -24 0 694 669 ; C 89 ; WX 611 ; N Y ; B 73 0 659 669 ; C 90 ; WX 611 ; N Z ; B -11 0 590 669 ; C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ; C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ; C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ; C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ; C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; C 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ; C 97 ; WX 500 ; N a ; B -21 -14 455 462 ; C 98 ; WX 500 ; N b ; B -14 -13 444 699 ; C 99 ; WX 444 ; N c ; B -5 -13 392 462 ; C 100 ; WX 500 ; N d ; B -21 -13 517 699 ; C 101 ; WX 444 ; N e ; B 5 -13 398 462 ; C 102 ; WX 333 ; N f ; B -169 -205 446 698 ; C 103 ; WX 500 ; N g ; B -52 -203 478 462 ; C 104 ; WX 556 ; N h ; B -13 -9 498 699 ; C 105 ; WX 278 ; N i ; B 2 -9 263 685 ; C 106 ; WX 278 ; N j ; B -189 -207 279 685 ; C 107 ; WX 500 ; N k ; B -23 -8 483 699 ; C 108 ; WX 278 ; N l ; B 2 -9 290 699 ; C 109 ; WX 778 ; N m ; B -14 -9 722 462 ; C 110 ; WX 556 ; N n ; B -6 -9 493 462 ; C 111 ; WX 500 ; N o ; B -3 -13 441 462 ; C 112 ; WX 500 ; N p ; B -120 -205 446 462 ; C 113 ; WX 500 ; N q ; B 1 -205 471 462 ; C 114 ; WX 389 ; N r ; B -21 0 389 462 ; C 115 ; WX 389 ; N s ; B -19 -13 333 462 ; C 116 ; WX 278 ; N t ; B -11 -9 281 594 ; C 117 ; WX 556 ; N u ; B 15 -9 492 462 ; C 118 ; WX 444 ; N v ; B 16 -13 401 462 ; C 119 ; WX 667 ; N w ; B 16 -13 614 462 ; C 120 ; WX 500 ; N x ; B -46 -13 469 462 ; C 121 ; WX 444 ; N y ; B -94 -205 392 462 ; C 122 ; WX 389 ; N z ; B -43 -78 368 449 ; C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ; C 124 ; WX 220 ; N bar ; B 66 -18 154 685 ; C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ; C 126 ; WX 570 ; N asciitilde ; B 54 175 516 331 ; C 161 ; WX 389 ; N exclamdown ; B 19 -205 320 494 ; C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ; C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ; C 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ; C 165 ; WX 500 ; N yen ; B 33 0 628 669 ; C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ; C 167 ; WX 500 ; N section ; B 36 -143 459 685 ; C 168 ; WX 500 ; N currency ; B -26 34 526 586 ; C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ; C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ; C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ; C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ; C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ; C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ; C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ; C 177 ; WX 500 ; N endash ; B -40 178 477 269 ; C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ; C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ; C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ; C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ; C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ; C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ; C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ; C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ; C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ; C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ; C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ; C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ; C 193 ; WX 333 ; N grave ; B 85 516 297 697 ; C 194 ; WX 333 ; N acute ; B 139 516 379 697 ; C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ; C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ; C 197 ; WX 333 ; N macron ; B 51 553 393 623 ; C 198 ; WX 333 ; N breve ; B 71 516 387 678 ; C 199 ; WX 333 ; N dotaccent ; B 163 525 293 655 ; C 200 ; WX 333 ; N dieresis ; B 55 525 397 655 ; C 202 ; WX 333 ; N ring ; B 127 540 340 754 ; C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ; C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ; C 206 ; WX 333 ; N ogonek ; B -40 -173 189 44 ; C 207 ; WX 333 ; N caron ; B 79 516 411 690 ; C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ; C 225 ; WX 944 ; N AE ; B -64 0 918 669 ; C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ; C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ; C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ; C 234 ; WX 944 ; N OE ; B 23 -9 946 677 ; C 235 ; WX 300 ; N ordmasculine ; B 56 400 350 685 ; C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ; C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ; C 248 ; WX 278 ; N lslash ; B -13 -9 301 699 ; C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ; C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ; C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ; C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ; C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ; C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ; C -1 ; WX 611 ; N Tcaron ; B 50 0 650 900 ; C -1 ; WX 556 ; N Scaron ; B 2 -18 526 897 ; C -1 ; WX 667 ; N Rcaron ; B -29 0 623 900 ; C -1 ; WX 667 ; N Racute ; B -29 0 623 907 ; C -1 ; WX 556 ; N Sacute ; B 2 -18 526 907 ; C -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ; C -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ; C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 693 907 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 907 ; C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ; C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ; C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ; C -1 ; WX 611 ; N Zacute ; B -11 0 590 907 ; C -1 ; WX 722 ; N Uring ; B 67 -18 744 964 ; C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ; C -1 ; WX 444 ; N eogonek ; B 5 -173 404 462 ; C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ; C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ; C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ; C -1 ; WX 611 ; N Thorn ; B -27 0 574 669 ; C -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ; C -1 ; WX 444 ; N edieresis ; B 5 -13 443 655 ; C -1 ; WX 600 ; N dcaron ; B -21 -13 664 699 ; C -1 ; WX 444 ; N ccedilla ; B -24 -218 392 462 ; C -1 ; WX 444 ; N ccaron ; B -5 -13 468 690 ; C -1 ; WX 444 ; N cacute ; B -5 -13 444 697 ; C -1 ; WX 500 ; N aogonek ; B -21 -173 500 462 ; C -1 ; WX 500 ; N aring ; B -21 -14 455 754 ; C -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ; C -1 ; WX 500 ; N abreve ; B -21 -14 470 678 ; C -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ; C -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ; C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ; C -1 ; WX 500 ; N adieresis ; B -21 -14 471 655 ; C -1 ; WX 722 ; N Uogonek ; B 67 -173 744 669 ; C -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ; C -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ; C -1 ; WX 556 ; N udieresis ; B 15 -9 494 655 ; C -1 ; WX 345 ; N tcaron ; B -11 -9 409 685 ; C -1 ; WX 389 ; N scommaaccent ; B -26 -324 333 462 ; C -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ; C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ; C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ; C -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ; C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 865 ; C -1 ; WX 389 ; N scaron ; B -19 -13 439 690 ; C -1 ; WX 667 ; N Amacron ; B -67 0 593 833 ; C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ; C -1 ; WX 611 ; N Tcommaaccent ; B 50 -324 650 669 ; C -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ; C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ; C -1 ; WX 667 ; N Emacron ; B -27 0 653 833 ; C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ; C -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ; C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ; C -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ; C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 900 ; C -1 ; WX 722 ; N Nacute ; B -27 -15 748 907 ; C -1 ; WX 611 ; N Lcaron ; B -22 0 651 685 ; C -1 ; WX 611 ; N Lacute ; B -22 0 590 907 ; C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 865 ; C -1 ; WX 389 ; N racute ; B -21 0 407 697 ; C -1 ; WX 389 ; N Icircumflex ; B -32 0 420 897 ; C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ; C -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ; C -1 ; WX 500 ; N Euro ; B 53 -5 666 689 ; C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ; C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ; C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ; C -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ; C -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ; C -1 ; WX 389 ; N Iacute ; B -32 0 407 907 ; C -1 ; WX 389 ; N Imacron ; B -32 0 461 833 ; C -1 ; WX 389 ; N Iogonek ; B -32 -173 406 669 ; C -1 ; WX 389 ; N Idieresis ; B -32 0 445 862 ; C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 888 ; C -1 ; WX 722 ; N Umacron ; B 67 -18 744 833 ; C -1 ; WX 667 ; N Kcommaaccent ; B -21 -324 702 669 ; C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ; C -1 ; WX 556 ; N Scommaaccent ; B 2 -324 526 685 ; C -1 ; WX 667 ; N Eogonek ; B -27 -173 667 669 ; C -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ; C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 865 ; C -1 ; WX 278 ; N iogonek ; B 2 -173 278 685 ; C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 765 ; C -1 ; WX 500 ; N odieresis ; B -3 -13 466 655 ; C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ; C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ; C -1 ; WX 667 ; N Ecaron ; B -27 0 653 900 ; C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ; C -1 ; WX 389 ; N scedilla ; B -40 -218 333 462 ; C -1 ; WX 389 ; N rcaron ; B -21 0 439 690 ; C -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ; C -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ; C -1 ; WX 722 ; N Gcommaaccent ; B 21 -324 706 685 ; C -1 ; WX 667 ; N Rcommaaccent ; B -29 -324 623 669 ; C -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ; C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ; C -1 ; WX 556 ; N uogonek ; B 15 -173 556 462 ; C -1 ; WX 556 ; N umacron ; B 15 -9 505 623 ; C -1 ; WX 722 ; N Dcaron ; B -46 0 685 900 ; C -1 ; WX 382 ; N lcaron ; B 2 -9 446 699 ; C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 900 ; C -1 ; WX 667 ; N Cacute ; B 32 -18 677 907 ; C -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ; C -1 ; WX 400 ; N degree ; B 83 397 369 683 ; C -1 ; WX 667 ; N Aogonek ; B -67 -173 729 683 ; C -1 ; WX 606 ; N minus ; B 51 209 555 297 ; C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ; C -1 ; WX 667 ; N Aring ; B -67 0 593 950 ; C -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ; C -1 ; WX 389 ; N rcommaaccent ; B -80 -324 389 462 ; C -1 ; WX 278 ; N lacute ; B 2 -9 392 907 ; C -1 ; WX 500 ; N omacron ; B -3 -13 477 623 ; C -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ; C -1 ; WX 278 ; N icircumflex ; B -2 -9 325 690 ; C -1 ; WX 278 ; N igrave ; B 2 -9 260 697 ; C -1 ; WX 556 ; N ncommaaccent ; B -6 -324 493 462 ; C -1 ; WX 278 ; N lcommaaccent ; B -81 -324 290 699 ; C -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ; C -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ; C -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ; C -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ; C -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ; C -1 ; WX 667 ; N Abreve ; B -67 0 593 888 ; C -1 ; WX 500 ; N kcommaaccent ; B -23 -324 483 699 ; C -1 ; WX 722 ; N Omacron ; B 27 -18 691 833 ; C -1 ; WX 278 ; N imacron ; B 2 -9 366 623 ; C -1 ; WX 444 ; N emacron ; B 5 -13 449 623 ; C -1 ; WX 500 ; N amacron ; B -21 -14 477 623 ; C -1 ; WX 278 ; N tcommaaccent ; B -81 -324 281 594 ; C -1 ; WX 444 ; N ydieresis ; B -94 -205 438 655 ; C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ; C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ; C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ; C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ; C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ; C -1 ; WX 500 ; N eth ; B -3 -13 454 699 ; C -1 ; WX 556 ; N uring ; B 15 -9 492 754 ; C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ; C -1 ; WX 333 ; N commaaccent ; B -54 -324 130 -40 ; C -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ; C -1 ; WX 747 ; N registered ; B 30 -18 718 685 ; C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ; C -1 ; WX 278 ; N idieresis ; B 2 -9 360 655 ; C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ; C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; C -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ; C -1 ; WX 549 ; N radical ; B -17 -35 535 916 ; C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ; C -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ; C -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ; C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ; C -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ; C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ; C -1 ; WX 494 ; N partialdiff ; B 16 -20 472 743 ; C -1 ; WX 722 ; N Ncommaaccent ; B -27 -324 748 669 ; C -1 ; WX 500 ; N dcroat ; B -21 -13 540 699 ; C -1 ; WX 220 ; N brokenbar ; B 66 -18 154 685 ; C -1 ; WX 611 ; N Lcommaaccent ; B -22 -324 590 669 ; C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ; C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ; C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -61 KPX A Ccedilla -63 KPX A G -59 KPX A O -53 KPX A Odieresis -53 KPX A Q -54 KPX A T -33 KPX A U -61 KPX A Uacute -61 KPX A Ucircumflex -61 KPX A Udieresis -61 KPX A Ugrave -61 KPX A V -110 KPX A W -107 KPX A Y -44 KPX A a -5 KPX A b -1 KPX A c -20 KPX A ccedilla -29 KPX A comma 0 KPX A d -5 KPX A e -25 KPX A g -20 KPX A guillemotleft -58 KPX A guilsinglleft -68 KPX A hyphen -23 KPX A o -23 KPX A period 1 KPX A q -18 KPX A quotedblright -78 KPX A quoteright -101 KPX A t -4 KPX A u -18 KPX A v -51 KPX A w -56 KPX A y -67 KPX Aacute C -61 KPX Aacute G -59 KPX Aacute O -53 KPX Aacute Q -54 KPX Aacute T -33 KPX Aacute U -61 KPX Aacute V -110 KPX Aacute W -107 KPX Aacute Y -44 KPX Aacute a -5 KPX Aacute b -1 KPX Aacute c -20 KPX Aacute comma 0 KPX Aacute d -5 KPX Aacute e -25 KPX Aacute g -20 KPX Aacute guillemotleft -58 KPX Aacute guilsinglleft -68 KPX Aacute hyphen -23 KPX Aacute o -23 KPX Aacute period 1 KPX Aacute q -18 KPX Aacute quoteright -101 KPX Aacute t -4 KPX Aacute u -18 KPX Aacute v -51 KPX Aacute w -56 KPX Aacute y -67 KPX Acircumflex C -61 KPX Acircumflex G -59 KPX Acircumflex O -53 KPX Acircumflex Q -54 KPX Acircumflex T -33 KPX Acircumflex U -61 KPX Acircumflex V -110 KPX Acircumflex W -107 KPX Acircumflex Y -44 KPX Acircumflex comma 0 KPX Acircumflex period 1 KPX Adieresis C -61 KPX Adieresis G -59 KPX Adieresis O -53 KPX Adieresis Q -54 KPX Adieresis T -33 KPX Adieresis U -61 KPX Adieresis V -110 KPX Adieresis W -107 KPX Adieresis Y -44 KPX Adieresis a -5 KPX Adieresis b -1 KPX Adieresis c -20 KPX Adieresis comma 0 KPX Adieresis d -5 KPX Adieresis g -20 KPX Adieresis guillemotleft -58 KPX Adieresis guilsinglleft -68 KPX Adieresis hyphen -23 KPX Adieresis o -23 KPX Adieresis period 1 KPX Adieresis q -18 KPX Adieresis quotedblright -78 KPX Adieresis quoteright -101 KPX Adieresis t -4 KPX Adieresis u -18 KPX Adieresis v -51 KPX Adieresis w -56 KPX Adieresis y -67 KPX Agrave C -61 KPX Agrave G -59 KPX Agrave O -53 KPX Agrave Q -54 KPX Agrave T -33 KPX Agrave U -61 KPX Agrave V -110 KPX Agrave W -107 KPX Agrave Y -44 KPX Agrave comma 0 KPX Agrave period 1 KPX Aring C -61 KPX Aring G -59 KPX Aring O -53 KPX Aring Q -54 KPX Aring T -33 KPX Aring U -61 KPX Aring V -110 KPX Aring W -107 KPX Aring Y -44 KPX Aring a -5 KPX Aring b -1 KPX Aring c -20 KPX Aring comma 0 KPX Aring d -5 KPX Aring e -25 KPX Aring g -20 KPX Aring guillemotleft -58 KPX Aring guilsinglleft -68 KPX Aring hyphen -23 KPX Aring o -23 KPX Aring period 1 KPX Aring q -18 KPX Aring quotedblright -78 KPX Aring quoteright -101 KPX Aring t -4 KPX Aring u -18 KPX Aring v -51 KPX Aring w -56 KPX Aring y -67 KPX Atilde C -61 KPX Atilde G -59 KPX Atilde O -53 KPX Atilde Q -54 KPX Atilde T -33 KPX Atilde U -61 KPX Atilde V -110 KPX Atilde W -107 KPX Atilde Y -44 KPX Atilde comma 0 KPX Atilde period 1 KPX B A -34 KPX B AE -40 KPX B Aacute -34 KPX B Acircumflex -34 KPX B Adieresis -34 KPX B Aring -34 KPX B Atilde -34 KPX B O -22 KPX B OE -20 KPX B Oacute -22 KPX B Ocircumflex -22 KPX B Odieresis -22 KPX B Ograve -22 KPX B Oslash -23 KPX B V -46 KPX B W -46 KPX B Y -50 KPX C A -24 KPX C AE -31 KPX C Aacute -24 KPX C Adieresis -24 KPX C Aring -24 KPX C H -26 KPX C K -28 KPX C O -25 KPX C Oacute -25 KPX C Odieresis -25 KPX Ccedilla A -30 KPX D A -54 KPX D Aacute -54 KPX D Acircumflex -54 KPX D Adieresis -54 KPX D Agrave -54 KPX D Aring -54 KPX D Atilde -54 KPX D J -67 KPX D T -27 KPX D V -60 KPX D W -58 KPX D X -64 KPX D Y -64 KPX F A -101 KPX F Aacute -101 KPX F Acircumflex -101 KPX F Adieresis -101 KPX F Agrave -101 KPX F Aring -101 KPX F Atilde -101 KPX F J -88 KPX F O -48 KPX F Odieresis -48 KPX F a -75 KPX F aacute -75 KPX F adieresis -48 KPX F ae -83 KPX F aring -75 KPX F comma -96 KPX F e -86 KPX F eacute -86 KPX F hyphen -54 KPX F i -29 KPX F j -34 KPX F o -81 KPX F oacute -82 KPX F odieresis -45 KPX F oe -86 KPX F oslash -79 KPX F period -98 KPX F r -38 KPX F u -42 KPX G A -14 KPX G AE -20 KPX G Aacute -14 KPX G Acircumflex -14 KPX G Adieresis -14 KPX G Agrave -14 KPX G Aring -14 KPX G Atilde -14 KPX G T -42 KPX G V -27 KPX G W -27 KPX G Y -31 KPX J A -39 KPX J AE -42 KPX J Adieresis -39 KPX J Aring -39 KPX K C -51 KPX K G -46 KPX K O -43 KPX K OE -42 KPX K Oacute -43 KPX K Odieresis -43 KPX K S -1 KPX K T 0 KPX K a 3 KPX K adieresis 3 KPX K ae -4 KPX K aring 3 KPX K e -16 KPX K hyphen -30 KPX K o -13 KPX K oacute -13 KPX K odieresis -13 KPX K u -8 KPX K udieresis -8 KPX K y -68 KPX L A 28 KPX L AE 25 KPX L Aacute 28 KPX L Adieresis 28 KPX L Aring 28 KPX L C 0 KPX L Ccedilla 0 KPX L G 4 KPX L O 4 KPX L Oacute 4 KPX L Ocircumflex 4 KPX L Odieresis 4 KPX L Ograve 4 KPX L Otilde 4 KPX L S 1 KPX L T -30 KPX L U -17 KPX L Udieresis -17 KPX L V -77 KPX L W -74 KPX L Y -41 KPX L hyphen 41 KPX L quotedblright -45 KPX L quoteright -67 KPX L u 5 KPX L udieresis 5 KPX L y -23 KPX N A -39 KPX N AE -42 KPX N Aacute -39 KPX N Adieresis -39 KPX N Aring -39 KPX N C -32 KPX N Ccedilla -30 KPX N G -26 KPX N O -32 KPX N Oacute -32 KPX N Odieresis -32 KPX N a -25 KPX N aacute -27 KPX N adieresis -27 KPX N ae -34 KPX N aring -27 KPX N comma -24 KPX N e -37 KPX N eacute -38 KPX N o -32 KPX N oacute -34 KPX N odieresis -34 KPX N oslash -32 KPX N period -26 KPX N u -33 KPX N udieresis -33 KPX O A -57 KPX O AE -67 KPX O Aacute -57 KPX O Adieresis -57 KPX O Aring -57 KPX O T -18 KPX O V -52 KPX O W -52 KPX O X -63 KPX O Y -56 KPX Oacute A -57 KPX Oacute T -18 KPX Oacute V -52 KPX Oacute W -52 KPX Oacute Y -56 KPX Ocircumflex T -18 KPX Ocircumflex V -52 KPX Ocircumflex Y -56 KPX Odieresis A -57 KPX Odieresis T -18 KPX Odieresis V -52 KPX Odieresis W -52 KPX Odieresis X -63 KPX Odieresis Y -56 KPX Ograve T -18 KPX Ograve V -52 KPX Ograve Y -56 KPX Oslash A -57 KPX Otilde T -18 KPX Otilde V -52 KPX Otilde Y -56 KPX P A -89 KPX P AE -104 KPX P Aacute -89 KPX P Adieresis -89 KPX P Aring -89 KPX P J -105 KPX P a -50 KPX P aacute -50 KPX P adieresis -38 KPX P ae -58 KPX P aring -50 KPX P comma -107 KPX P e -57 KPX P eacute -57 KPX P hyphen -54 KPX P o -52 KPX P oacute -52 KPX P odieresis -35 KPX P oe -57 KPX P oslash -47 KPX P period -109 KPX R C -33 KPX R Ccedilla -32 KPX R G -28 KPX R O -34 KPX R OE -32 KPX R Oacute -34 KPX R Odieresis -34 KPX R T -24 KPX R U -44 KPX R Udieresis -44 KPX R V -46 KPX R W -46 KPX R Y -40 KPX R a -1 KPX R aacute -1 KPX R adieresis -1 KPX R ae -9 KPX R aring -1 KPX R e -21 KPX R eacute -21 KPX R hyphen -30 KPX R o -18 KPX R oacute -18 KPX R odieresis -18 KPX R oe -23 KPX R u -13 KPX R uacute -13 KPX R udieresis -13 KPX R y -12 KPX S A -11 KPX S AE -17 KPX S Aacute -11 KPX S Adieresis -11 KPX S Aring -11 KPX S T -34 KPX S V -20 KPX S W -20 KPX S Y -24 KPX S t -6 KPX T A -52 KPX T AE -54 KPX T Aacute -52 KPX T Acircumflex -52 KPX T Adieresis -52 KPX T Agrave -52 KPX T Aring -52 KPX T Atilde -52 KPX T C -15 KPX T G -9 KPX T J -63 KPX T O -22 KPX T OE -18 KPX T Oacute -22 KPX T Ocircumflex -22 KPX T Odieresis -22 KPX T Ograve -22 KPX T Oslash -22 KPX T Otilde -22 KPX T S -16 KPX T V 15 KPX T W 15 KPX T Y 11 KPX T a -83 KPX T ae -91 KPX T c -89 KPX T colon -98 KPX T comma -77 KPX T e -94 KPX T g -95 KPX T guillemotleft -110 KPX T guilsinglleft -120 KPX T hyphen -74 KPX T i -19 KPX T j -27 KPX T o -90 KPX T oslash -90 KPX T period -79 KPX T r -76 KPX T s -78 KPX T semicolon -98 KPX T u -91 KPX T v -89 KPX T w -89 KPX T y -86 KPX U A -65 KPX U AE -71 KPX U Aacute -65 KPX U Acircumflex -65 KPX U Adieresis -65 KPX U Aring -65 KPX U Atilde -65 KPX U comma -40 KPX U m -35 KPX U n -39 KPX U p -30 KPX U period -41 KPX U r -32 KPX Uacute A -65 KPX Uacute comma -40 KPX Uacute m -35 KPX Uacute n -39 KPX Uacute p -30 KPX Uacute period -41 KPX Uacute r -32 KPX Ucircumflex A -65 KPX Udieresis A -65 KPX Udieresis b 1 KPX Udieresis comma -40 KPX Udieresis m -35 KPX Udieresis n -39 KPX Udieresis p -30 KPX Udieresis period -41 KPX Udieresis r -32 KPX Ugrave A -65 KPX V A -100 KPX V AE -111 KPX V Aacute -100 KPX V Acircumflex -100 KPX V Adieresis -100 KPX V Agrave -100 KPX V Aring -100 KPX V Atilde -100 KPX V C -60 KPX V G -53 KPX V O -64 KPX V Oacute -64 KPX V Ocircumflex -64 KPX V Odieresis -64 KPX V Ograve -64 KPX V Oslash -64 KPX V Otilde -64 KPX V S -25 KPX V T 7 KPX V a -76 KPX V ae -84 KPX V colon -96 KPX V comma -96 KPX V e -87 KPX V g -83 KPX V guillemotleft -99 KPX V guilsinglleft -109 KPX V hyphen -62 KPX V i -12 KPX V o -83 KPX V oslash -81 KPX V period -97 KPX V r -44 KPX V semicolon -96 KPX V u -47 KPX V y -34 KPX W A -83 KPX W AE -87 KPX W Aacute -83 KPX W Acircumflex -83 KPX W Adieresis -83 KPX W Agrave -83 KPX W Aring -83 KPX W Atilde -83 KPX W C -46 KPX W G -41 KPX W O -47 KPX W Oacute -47 KPX W Ocircumflex -47 KPX W Odieresis -47 KPX W Ograve -47 KPX W Oslash -48 KPX W Otilde -47 KPX W S -24 KPX W T 8 KPX W a -51 KPX W ae -60 KPX W colon -78 KPX W comma -62 KPX W e -62 KPX W g -63 KPX W guillemotleft -74 KPX W guilsinglleft -84 KPX W hyphen -37 KPX W i -11 KPX W o -58 KPX W oslash -57 KPX W period -64 KPX W r -34 KPX W semicolon -79 KPX W u -38 KPX W y -25 KPX X C -58 KPX X O -56 KPX X Odieresis -56 KPX X Q -58 KPX X a -9 KPX X e -29 KPX X hyphen -46 KPX X o -26 KPX X u -21 KPX X y -81 KPX Y A -45 KPX Y AE -47 KPX Y Aacute -45 KPX Y Acircumflex -45 KPX Y Adieresis -45 KPX Y Agrave -45 KPX Y Aring -45 KPX Y Atilde -45 KPX Y C -59 KPX Y G -54 KPX Y O -61 KPX Y Oacute -61 KPX Y Ocircumflex -61 KPX Y Odieresis -61 KPX Y Ograve -61 KPX Y Oslash -61 KPX Y Otilde -61 KPX Y S -25 KPX Y T 7 KPX Y a -69 KPX Y ae -77 KPX Y colon -91 KPX Y comma -67 KPX Y e -80 KPX Y g -81 KPX Y guillemotleft -97 KPX Y guilsinglleft -107 KPX Y hyphen -63 KPX Y i -12 KPX Y o -76 KPX Y oslash -75 KPX Y p -54 KPX Y period -69 KPX Y semicolon -91 KPX Y u -59 KPX Y v -54 KPX Z v -29 KPX Z y -39 KPX a j -2 KPX a quoteright -22 KPX a v -5 KPX a w -5 KPX a y -3 KPX aacute v -5 KPX aacute w -5 KPX aacute y -3 KPX adieresis v -5 KPX adieresis w -5 KPX adieresis y -3 KPX ae v -5 KPX ae w -5 KPX ae y -8 KPX agrave v -5 KPX agrave w -5 KPX agrave y -3 KPX aring v -5 KPX aring w -5 KPX aring y -3 KPX b v -12 KPX b w -12 KPX b y -17 KPX c h -20 KPX c k -16 KPX comma one -26 KPX comma quotedblright -1 KPX comma quoteright -23 KPX e quoteright -12 KPX e t -3 KPX e v -3 KPX e w -3 KPX e x -15 KPX e y -6 KPX eacute v -3 KPX eacute w -3 KPX eacute y -6 KPX ecircumflex v -3 KPX ecircumflex w -3 KPX ecircumflex y -6 KPX eight four -4 KPX eight one -52 KPX eight seven -13 KPX f a -23 KPX f aacute -24 KPX f adieresis 17 KPX f ae -32 KPX f aring -20 KPX f e -35 KPX f eacute -36 KPX f f 2 KPX f i 20 KPX f j 12 KPX f l 43 KPX f o -30 KPX f oacute -31 KPX f odieresis 20 KPX f oe -35 KPX f oslash -29 KPX f quoteright 12 KPX f s -14 KPX f t 9 KPX five four -13 KPX five one -56 KPX five seven -37 KPX four four 1 KPX four one -50 KPX four seven -21 KPX g a -25 KPX g adieresis -25 KPX g ae -34 KPX g aring -25 KPX g e -32 KPX g eacute -32 KPX g l -21 KPX g oacute -27 KPX g odieresis -27 KPX g r 3 KPX guillemotright A -30 KPX guillemotright AE -39 KPX guillemotright Aacute -30 KPX guillemotright Adieresis -30 KPX guillemotright Aring -30 KPX guillemotright T -76 KPX guillemotright V -79 KPX guillemotright W -75 KPX guillemotright Y -83 KPX guilsinglright A -40 KPX guilsinglright AE -49 KPX guilsinglright Aacute -40 KPX guilsinglright Adieresis -40 KPX guilsinglright Aring -40 KPX guilsinglright T -86 KPX guilsinglright V -89 KPX guilsinglright W -85 KPX guilsinglright Y -93 KPX h quoteright -32 KPX h y -20 KPX hyphen A -13 KPX hyphen AE -22 KPX hyphen Aacute -13 KPX hyphen Adieresis -13 KPX hyphen Aring -13 KPX hyphen T -59 KPX hyphen V -62 KPX hyphen W -59 KPX hyphen Y -69 KPX i T -20 KPX i j -5 KPX k a 10 KPX k aacute 10 KPX k adieresis 10 KPX k ae 2 KPX k aring 10 KPX k comma 19 KPX k e -2 KPX k eacute -2 KPX k g -14 KPX k hyphen 1 KPX k o 1 KPX k oacute 1 KPX k odieresis 1 KPX k period 17 KPX k s 1 KPX k u 2 KPX k udieresis 2 KPX l v -12 KPX l y -8 KPX m p -1 KPX m v -16 KPX m w -16 KPX m y -16 KPX n T -59 KPX n p -4 KPX n quoteright -32 KPX n v -20 KPX n w -20 KPX n y -20 KPX nine four -18 KPX nine one -67 KPX nine seven -12 KPX o T -75 KPX o quoteright -22 KPX o t -2 KPX o v -21 KPX o w -21 KPX o x -26 KPX o y -29 KPX oacute v -21 KPX oacute w -21 KPX oacute y -29 KPX ocircumflex t -4 KPX odieresis t -4 KPX odieresis v -21 KPX odieresis w -21 KPX odieresis x -26 KPX odieresis y -29 KPX ograve v -21 KPX ograve w -21 KPX ograve y -29 KPX one comma -38 KPX one eight -56 KPX one five -45 KPX one four -75 KPX one nine -40 KPX one one -48 KPX one period -39 KPX one seven -65 KPX one six -62 KPX one three -43 KPX one two -32 KPX one zero -48 KPX p t -2 KPX p y -13 KPX period one -32 KPX period quotedblright -5 KPX period quoteright -27 KPX q c -6 KPX q u -5 KPX quotedblbase A 24 KPX quotedblbase AE 19 KPX quotedblbase T -37 KPX quotedblbase V -79 KPX quotedblbase W -74 KPX quotedblbase Y -48 KPX quotedblleft A -76 KPX quotedblleft AE -98 KPX quotedblleft Aacute -76 KPX quotedblleft Adieresis -76 KPX quotedblleft Aring -76 KPX quotedblleft T -11 KPX quotedblleft V 3 KPX quotedblleft W 3 KPX quotedblleft Y 0 KPX quotedblright A -72 KPX quotedblright AE -94 KPX quotedblright Aacute -72 KPX quotedblright Adieresis -72 KPX quotedblright Aring -72 KPX quotedblright T -1 KPX quotedblright V 6 KPX quotedblright W 6 KPX quotedblright Y 2 KPX quoteleft A -83 KPX quoteleft AE -105 KPX quoteleft Aacute -83 KPX quoteleft Adieresis -83 KPX quoteleft Aring -83 KPX quoteleft T -18 KPX quoteleft V -3 KPX quoteleft W -3 KPX quoteleft Y -7 KPX quoteright A -94 KPX quoteright AE -116 KPX quoteright Aacute -94 KPX quoteright Adieresis -94 KPX quoteright Aring -94 KPX quoteright comma -57 KPX quoteright d -50 KPX quoteright o -50 KPX quoteright period -59 KPX quoteright r -26 KPX quoteright s -26 KPX quoteright t -19 KPX quoteright v -23 KPX quoteright w -23 KPX quoteright y -18 KPX r a -13 KPX r aacute -13 KPX r acircumflex -13 KPX r adieresis -13 KPX r ae -22 KPX r agrave -13 KPX r aring -13 KPX r c -15 KPX r ccedilla -8 KPX r colon -30 KPX r comma -67 KPX r d -14 KPX r e -20 KPX r eacute -20 KPX r ecircumflex -20 KPX r egrave -20 KPX r f 8 KPX r g -4 KPX r h -16 KPX r hyphen -13 KPX r i 17 KPX r j 12 KPX r k -11 KPX r l -12 KPX r m 10 KPX r n 6 KPX r o -15 KPX r oacute -15 KPX r ocircumflex -15 KPX r odieresis -15 KPX r oe -19 KPX r ograve -15 KPX r oslash -12 KPX r p 16 KPX r period -69 KPX r q -19 KPX r quoteright 0 KPX r r 14 KPX r s 1 KPX r semicolon -30 KPX r t 12 KPX r u 11 KPX r v 20 KPX r w 20 KPX r x 7 KPX r y 20 KPX r z 10 KPX s quoteright -22 KPX s t -6 KPX seven colon -90 KPX seven comma -80 KPX seven eight -46 KPX seven five -60 KPX seven four -79 KPX seven one -43 KPX seven period -81 KPX seven seven -27 KPX seven six -60 KPX seven three -42 KPX seven two -30 KPX six four 2 KPX six one -52 KPX six seven -32 KPX t S -11 KPX t a 10 KPX t aacute 10 KPX t adieresis 10 KPX t ae 2 KPX t aring 10 KPX t colon -22 KPX t e -2 KPX t eacute -2 KPX t h -5 KPX t o 1 KPX t oacute 1 KPX t odieresis 1 KPX t quoteright -19 KPX t semicolon -23 KPX three four -15 KPX three one -67 KPX three seven -27 KPX two four -8 KPX two one -48 KPX two seven -27 KPX u quoteright -33 KPX v a -20 KPX v aacute -20 KPX v acircumflex -20 KPX v adieresis -20 KPX v ae -28 KPX v agrave -20 KPX v aring -20 KPX v atilde -20 KPX v c -24 KPX v colon -51 KPX v comma -51 KPX v e -28 KPX v eacute -28 KPX v ecircumflex -28 KPX v egrave -28 KPX v g -20 KPX v hyphen -1 KPX v l -24 KPX v o -24 KPX v oacute -24 KPX v odieresis -24 KPX v ograve -24 KPX v oslash -22 KPX v period -51 KPX v s -19 KPX v semicolon -51 KPX w a -24 KPX w aacute -24 KPX w acircumflex -24 KPX w adieresis -24 KPX w ae -32 KPX w agrave -24 KPX w aring -24 KPX w atilde -24 KPX w c -30 KPX w colon -56 KPX w comma -53 KPX w e -34 KPX w eacute -34 KPX w ecircumflex -34 KPX w egrave -34 KPX w g -26 KPX w hyphen -7 KPX w l -28 KPX w o -30 KPX w oacute -30 KPX w odieresis -30 KPX w ograve -30 KPX w oslash -28 KPX w period -53 KPX w s -24 KPX w semicolon -56 KPX x a -1 KPX x c -10 KPX x e -14 KPX x eacute -14 KPX x o -11 KPX x q -12 KPX y a -11 KPX y aacute -12 KPX y acircumflex -12 KPX y adieresis -12 KPX y ae -19 KPX y agrave -12 KPX y aring -12 KPX y atilde -12 KPX y c -17 KPX y colon -43 KPX y comma -25 KPX y e -22 KPX y eacute -23 KPX y ecircumflex -23 KPX y egrave -23 KPX y g -23 KPX y hyphen 2 KPX y l -16 KPX y o -17 KPX y oacute -19 KPX y odieresis -19 KPX y ograve -19 KPX y oslash -17 KPX y period -26 KPX y s -13 KPX y semicolon -44 KPX zero four -1 KPX zero one -50 KPX zero seven -12 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Helvetica-Bold.pfa0100664000212600000240000021222307477306250016341 0ustar mikeuser%!PS-AdobeFont-1.0: Helvetica-Bold 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Helvetica Bold) readonly def /FamilyName (Helvetica) readonly def /Weight (Bold) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -155 def /UnderlineThickness 69 def end readonly def /FontName /Helvetica-Bold def /PaintType 0 def /WMode 0 def /FontBBox {-173 -307 1003 949} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020904 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6e6592e5a3b79f68c96d8210cd36cf35744c3d374279236deaae637757 f315a4017bcdaa87b015f5c6b4cb91d4ee47f0386e712e21985e3126d93a 4b34217dd5550eb0b671529618855bd1befa276e041984a6cfd75f9af3bd f392a7f8cfa3e29c081002e741997bfb13ce7aeeb8990c2fa67f0cc195bc e6db51cea8c5153679e26bc87762e0fff5515c654007ac4c90ed6f04f907 f7ea22c3c780e52aa2c683579c304bcb44865499a75a7e8683433235cf3c 12b02b6376d06e16d248259bd783a4918f5ed78b17bebd14f220092814b4 aff6b73653e0637c3e5409d02bc684ace7aa4f12235e2d15513ab0e4a20f 4e30ba7226ec15c508cf10d9c81b66f4d7a90b2e341f6b0d77c8a232f3a2 c99a66534c6aef2d130f403fbe0acb674fed2062ac989bb6b8819cc8461f 50e608ea96f4cfd22778ba9d12ad84c0dc78f70094baefe58cd185cf9698 fb68e7834904e64cbc2256f8dd1024bd80d547174ddaa1477c68aca8f27f 7a02c514672136a008e19064d5546b2dde061cef1fc6e8960a4d8364cbf2 5e4393363628fd1592bfc5c5ff8e40ceee601006977b39d80b452cede57c 5a73f96fa5e1e04488659f70a972cd7f99a37bc7019efd90aafac0375bc6 c9162797641c9848a70e8b009db4303d248980fd3e917a46f700fb7d4866 0a291b842c0c9b12d1b9ff790e175e7aa6a2910d1fbdb378bef3808b87d3 c8ebc458dec72ca5763589135a15ba60b0aaf5ce7ad34acea44c5bb4ae5e db8ca0dc050be1579d74aa7c0252bb836bf6fb0fdfe3f4e1bbe9e9be6d5e e2102cd25cbd43cbfdfb9fa2d13bd195121cd703510cb2d275c17b4ff905 1e7867fb0106a16a1dc677a89c20b09dee4e99530d89a0ee8e07a4771d04 a07a547f14646b90536c759f1d26f044f790024aaa525700042208a1a1cc ae4847e24173d2014f0bab1b3d68036495a58d20bce23bca3b930fa73466 b848bc4fff499f2438b169f9e6bc9c1858ba09d614c679676620c4d2d4cf 6e18d63cf46dacbba65dff07c966b61b011883f6e5a4b53c9abc3d4252ea 422919acdaaf2cf94a6dfe87d711e29a39c572d0b9cb60f5a58d8467322e b65a2f8bc66bd83a33c2716533c6c38a1c3d766b48121bd284a592e459c3 9c778b31f949b07ef1bd466dc49db36df165eadd0831ca0deabe21398fda ef3dd27b780c78559ec68dfa698eb700f7fc9c10950f934dadbb67ef97cd dd4d906248feaa2268e365b0c0e555caa49c4fa90229fddab166058080d4 2f629bde82a5a237fc6c5511859f3dafaba5076969f99a80caa40fe2e30b 6ae41238d71653b267add9d3450e6502a0edff080df11be3b275986bb831 6d26afeb983e715757c594fc5eecbe80f4f0307a3691941bd85eb23f645b 188e0293273ac148edb62e86e4e06bcff708b6dcd5c47f7d75551848f00c 95c68426592d07637dc90e8a98a37039ff938277ae848fd40f8a58803d87 48ae411f5dffe22d324b203d3bc8741c9455b48094d29266c7cb49fd9ffd 260f563f198352fe14cd3de00e9baf28224e0b588cc6fe268840400b8685 83fc5062e4723fc51bb3472fc48a1e95c3ee1cc817a1b84974e4e154a612 c95c776157b2644c24c2a9c3855ceceb5f2a7fdba108784f7c51a80bc733 2532432002b58740dcc4ba984cc2763c23200a911ae147cc5a94ceec7a6c 9c67c95a518a4ea344a660cb05dedc4924f4833b360bf67b989638a37897 aa761e7e79596ecac374a4f9548004642d040a8c1c2d9d926a714e5ae96e ec38a4d74c78f6555f88a95a19e48c5db0adf747de44560dcb7d63ad476b ee7b15885eba619ebff899a1462f868661c356c6a9887806a06c0bb879d4 5ce54c92d61bdc6be3fd98c5ef085fffb120d36b0df99f2615332481e981 46a7f3aa81126a7f500621f5ad8cf4505c45a38d5b38cbc85dab92a3b1a8 766f50b68cd08dd8caec5ddc62831631003b0e6adccc42b1694c39fe0fba ac60ed88bba4d0f1fbb0c7f6b6894504d08f43cc580213beb5e283660b83 c02cd75160f3527039530a3c9b160d225c15ae84a640f4ee508d19b02f8f 063d3f62d1d4c5274434de2c2d4e2836ab7b80dc8038421108c077cf0989 b13d83cb07c66a6dfdc1a8bc506115f336f20ff71591391ca12d39f19413 eba19c9cd6ddb10d9d786c5f97a2e585125011477edd99d86dc88f11fd5f a1d5cf7f3cae82407719f13e7ddf766330b6584ccf4564d0043a15e28703 7992f66d2e75e43898fceb7195f607090b2786e5848d7d0c7f8472fa3ae7 2249ccb26c14e63bce8a9363d2fa7bf30e87d529ab63859964277a9afd23 39bd5006b93daeb9149a3bbf9037a15db62cb722fe2a5cdbbb4354027f79 ad30883772ac6b11a9aecf1094249bad804390e0f2d829671502b3837f35 5eee0fc6860726e1893f59221410c1732cc679badfaf6d1b30c9499e9d35 4128ed7ee8f7ff6d8ae39e6a7ffd6f47bbca8d8e8c9ab3714c3abb808865 6d3ecacbb7e570e746adfbb96fc84415a7710dbb2776fbb4183b9de8ca1b 9ae5449dbcf4d2b47b97af804e69b1ada04c0bb923a90da0b8bb3f616533 5c2edf2442fdfae5ed8cc48f1dbe46014a352d4b3fcfb2c97c06de287678 88d23b2a05d4269338fc7c986c84f135a1086b85406cc4b1b1e5ee5315c3 163a5e1a69bfe25286d9a9543b7a811ef948cf74a723dbd1aa2e2f1d141d da6046174312f4d39b6d5fc5e1bb12d0811eebae2b1fb3ae2963ee86db9f 5ef893b74c1983f22ff76f91a4815ffeb76eeaafde90584346db968b5356 56e3972788f6fe0088dd02acc80a5a4be54ad45356fb5afb05f10c889883 a007b1bacaeebab832ef2f0244601a184877683f285f019946616a35617a a1d9350b12e3843b5fc1b30f31acfad75513aa563704800d638b4e1a5258 58554a46a2373ab54dcb90b74992b34ffb6273ef4f017d78db18b8802db6 1a6d1e4f91acd9ca3a9e359c641425a583a918d339c1df491744974862cf 101dd32e6b0ee70802c43f5f52310a5599658f955bf73f3836e0eb1f466c 9b3d939f6f3a2afad15c24e79ecbf333306d4d80efc41b863696fe1f507d a6416ce7d589f8e701f1f8c1873fa2abf1ad34324cf7a9443f3587bdd4cd 96eeeaa8fa3927e631b1f34ad444c5fa6e23a2eb8934e3decb02c6e0a19b 83b0fd74f9554b6faa2bb679a83cc5bb1bff5fd445eee3b5ced62176fc20 54f5817029ffc4cf0cbb277ec1d81975029926639d38e8116e8b3901f846 47319c3fb81e6d49d4f4d92f7da23bcfb4fb5a5279043e68ffb9dedb0717 71a545b59c27fdc2f833c7d60205472f428c8527d209830461a4ead1913c 7954b5c60ba350c7ce5c1b43eb9623db36e2ea0ce4a74d5519b552a6c9af f627f677a8669206047613efc7da22861704b134511bd8b13ffaaec1a49f 3dda0460043e97949b69ee744eb298b9b96a3e00af9d2af2726ab16e27c2 de950f759df2e87b5da17382c03bfd8d943f6d788f536ad804e7da10ab47 318c3769d48f573775102c1614afb9a8133a9cc9aab2233008c9d567381f 194d5602761ef93bbec6442616a2dec84aafbd92007f72f70f211e09f6f4 cf8031a9a4eb2bdc0d5b9243ecb73945e82974d0bd03064027995c89eb3e 44b78c50316ce162579138377efe39f1ccd659baa9dc651b4f9a2345bca1 c72231f0c4e85875298cfb8ad0db6335fc4a6b271ac3d3582654c27549c0 383c4c0e07d2173ab72df9b4401371aa5443b1e4d45977780716848c8902 497b6c5f459c200cc7ed31415f3a8407a32d9e95971ca9b103f0ff7d24a1 602776acc1d9788b79f8fb897f4f0c3c0fa01943bd60bf079e2ab714a4e9 4decfbe3e8b57d73088dc071e4c358727f21f5e546cf55536ea2b9464f47 5d03765046ae4ccc91ed7caeb2f35a2c983031ebd1e319973c7886e55d3b a5976e4d90c5ad5c4754bf0b028abd6fdfb38b6888fde3c3ad472c9b7efd 9d409f6c91b8503a858a7ce125d39695628a20493bcc9a4c551f80bd3879 0a0d1fcf115a27fabaf0f00d1ac5dc2599a504de4cc0f29f57380f9a0adc 5cd31aa6bdec64ccaedc176dc308f8372bc33eb0cb6517fe54f2898d4d82 0146b76046e203561018f0ce719ec478ed0c87705c1928cbc8cb39e1e041 b29f39bdb423fda4539f1cc4d51744a45d9859d28629dec75d2a0e8b214a 3be3e4171d31a98f000c855cd364ab21fa62cd54826526a9abbb491c413b 5cc4eceec281194a84a9ecef95bd839c1426b20bb6cc7a5f984b754ecb15 b99e4297887c580335647c46f81f71e37e6a0c5afe016321718f2e988b2c 4973711e6474520acfea1f4cea825a4ddbb568f49d45ac9e496428a04acf ca936d8b204e9bdadcb1527e708d92e3dc78a53161cb12d6ae304f696e55 b08b672a11989ec3b90763bc3449abc93a7523009680bda28408a3482e8f 040b22f37e8febd41a3272aa72f47bc434baea4c4d14ebfc40327d8b2e3a 8eff5c780c63129b05912c2e21b215c418e45e85fe8e0dcdb41f8f9f5787 37051c7289a53f6e854308cc2074859eb49313b8e8d7aa6da0401c545607 1b3e4603d51dbfafb291d87efb1e877efff20d231234e9cc535506f960a3 2337b1055fcdfbd8134e7a8f263936745ba79fcb77621175da8134db980f 9119fac6a39573e6ce68968dec483d4dcddd17c88ee1dbc53dc48832660b aa5fedbe6432754f23eb771e290d9e1774a095af7c18448fc639e3219f2d 79029c1d33cc9540531c0d3ca099deb71a9ffda153ed7238f6820e181477 87bbc20195f16620e6ff655e75ee884a824855d271fd0376fe59d79e24ef 13d6591f6d81fe9755578c3478dd5f8729f3a82d48ca829aeddecec3db0c db39307fbdbdfa629f7e543917f7b1a55673487ef94069dd05f3f4aca876 567ecec3d81fdd57dc25a032b0509a629613a3a76654dd7ad69273b839f8 3da3c93dd3adb200c6bd1e1b4e2646a5c90baab889e9408a55320c5cc684 e472df545d211b529f4d377d4db74734fad1504f32dc290fd5222b77b51b 94d9b4a70693785890d0f24c199db2b51245863a324d188c8e1a48aac380 5fdfcec5a8bcd429c70421bf9b5f3a7e7ecf58cf3b487fe55bb657183cbf 73f2fbca24ca8b688c066438c6da2c8c8ad0d51e6f3324e9681d0ad23dc7 096692f02ace519edbb8ac2129df1360676180c29927e22e33cce651ce24 557da31a46fd5f2b911645415c21c8c2adbe3b027eb9156705d5c3664c59 f2e515a89f7145d62dd8b420643f2d88951504778cc6cad1422185f25e2a e9885b21e0f4fe26e00811311143a6bbbe372c54ee7ac4fb789c7531ff5f 70dfdf664ba6db13755321d30d4d064c477067be33eeeffcf946c6dadbc1 a69720cadb59b77cb7a8592b80a64735bac65189ba0bd36695ad9912a0da 55686d8f59beb531a076037755496ccd16ded2e26f785dfa7e96887ef817 19e7f0c61916c291206608a7910d6af985471d22fd178993c5d8258fc6ef 1098df955825a4cda2190a7c4a0ebb56e9b7b4e5b768ea4b1fce978658f2 29a859cc371593bbf2bee6ad71a814c56cc522144db6bc0e579511e0a438 4749a7d88e0512d60a455aeeb30cdd6e61fa08b857ffe5f1c7c37669cd87 40019c03727de0ab561760e687c3bf89cfb1f73808231102e217dcc1c6cb 5d310cbad5873329b24a2646495f9c632c06bf8e25c03d370d6cbb8659b7 2602c4c4a91bc788fc914ceafc91becc56716c206e77f5cfb01080a6d82f ec930729fa331f9586277166e8dea11862e2123095e25d758f7ee3808c7e 562186181f8c2a30d55042cab563bf88acd26ec19b7940b186c2a136817f c5c7552af5415b7f30b1cabb6e09e9a78487cbc560b325777d521da140c4 93e72c0716c67901cf1ab4ddf4392dd8bdb704d032c4e96971e635457ba0 950dcbd5a945447efba1f662d12434557d23ee9790a3654d0896776a3cd7 14be786ca46d3416b1474deab4096c1b91b6657e2e462de047739a0c92ef 6ec7be777948e447a8ce3e8d4ef3f9374a7752712312b87322dc2d7dedb5 83b2094d7548bd0a4feb3dcdf835d49a1d6e337e35506dbf6f429b6b943a 2c712842b953602628fa17ea42c40d8b3ed3de2efad93bbb2f29bd26344a 1561dbaea98a0fe64fad2f51d2218f801834e25fd7e5081a85a41d8306d6 e00479f73d6fb6e9e02b20c8e7fd9faba222ad0fd1ee2d747e519052413e f1fea4cecf54ca0db91f83e9025b8488013dccaf1c3e18af25762f911a55 03fd2e8621a2054516464c6fbd4149c65667ecab561760e687c3bf875890 8d513eb967002b94d9f4ca39b8dec4c548caf7cf9bad07616b6cb0dd2b7f 1b859f13cf627adbc300b739bb2f7d7b9649d481dc9122b7cb561db1e8a9 ff283413a413a9ffe8b45c25fe36b2867e0b88169aaa520fcb087d0bab1b 52c837eb404e264a11007bcfda083065bc013cc1fbfad835349208b6b481 d549e8c1b378a989b7ce5ea7e47873beada491de7df6382d15f87750f86c 74ba4a72bc8916fe4f5f94724c1b42144bde881a65e0ac01235e81006402 f1927b7de426e7c2e7eee6d14ebfb9c16c8bdd5e9763a4af799eb1a56604 9d588f8074ffdb71236885656562517e2c792595a52c9b3fbabb9017e6e9 d2b009b08e81df6b37608043b7a223047743fdf112525d90cccfd8a87ec7 d1cb41004ed96601b1902f23373679ac8e7b036729dab83e8c884fbee53c 56ae4aaaaaa3f0005492cc3f5f2b48388aea3470e77666f303543416652b 456b036bd611edb6e4cf288284997523a914c69c88ae840736301fe85675 ca7a06772b8f4f335a8ca50de8aa86a46eb9094d45437707b48de067f8b4 cc3c291b91bab8164345771137e20626a74307692094de000681912b1912 2c992b73248dbefbe0e0f5ecc07f012bb9e29351c90eabcdb65a20aa8016 86d3ea488a389d0f351d3c74a03e111ee7d242de7ecdd22e277ba6ce0a57 3a81848b52317d76fbeba106dda0d1dff6b9affa3e9950914cb04b733636 b7dce17380f8af2fe52320bf094a2c04326b44c4f0bbc16496f4d4c6b536 73e3f38c351e7b18bf083d44af5490be6a51c3fd71ccfe20b1874af3270f cc67c130c2a20fc44a28ec8b8c25ea80ada78e78a654db7a0e0e2fc67eba 0774b32009c0f795385a56b21fa57b55bca10aa8d7df149e8e3ece84be00 2653c904c769a67e818428cc1585e33427b225b87690a759e2ad1981013b 1f93d49b47dbb0baad79b1aa9088ef87b51605b08c84b3a4671a4af57d80 80fb78bcd800eef2627baf10be50ae23cdd6bc657fbf6b53c3c81cd9e761 ccbb696861ef18644e80e57d49e95c03b9851529f56fb527a353b71e82d1 a53ccf9e0fb99b4c0c0fe29e6dd2c9cf8c46db237ab98afa086745d82323 fdc640428c733806f6e50cd5e02f03937bb0e4ad653e069fa2f084bc7abb 8a19a43d89acd8edeaa3945dc3de3005ade59df6c91a08df9ee216963f93 1c6ddabbc27c3bfc71598fcce668886402ad3b1fe6fb76f11979c7744e54 1695b73d0f7516749205dc27a2ecdf8979c2c77291a4a54129df2a34ca9c fbdba9cfe2de67febe4cb0517cce15d262d3268bffeab8c826d811728cb1 482d560e75d1acae4243e8e6eba7a586cc480dfcffcc6ccf45cf63d6bc5b eb0029f1f4ecd2c05998bdab17a59e7b46cac82c60376236c2121ef0d31b 4065c41c4281c67d69d0e0c6d80d89e0eae7bb26824ccdbde6ac1753e7d9 855e01803a2eba63297300cd28e5bdb29a9aa4d7a1d974b4ef6763b5c624 18d8bde36f4599bc8da58602cacded847f6b8aed9940a81a2b56e071c1fd 80c22f021f0def4ef5fb3161510d1051e48505891086618044448c5c8287 bed213e1a2f2d57dc0dc976ec165a8e4d357e690b8a5d878a7bd6cab5ea6 2a2eb3d16635220fb98495b26419cfb6ae39eeca1537b5a3b72823de1f7c 66ff784dc3faddd523fe710ff61d769d202c0409bdc05fcf0f8dc47ebb5d 3f92fed23b1d61f0832a4659b60ce2f24e352661944de103b92a3e1df0c1 c992ae77657b87305a90141467a71207ad663014792145dcb55e913d3138 ec2f79967bedbfaebc88d0138e6fafc8f092c53b80c96df517b4ea9b2be0 82c984fcd8f51a8cdcfc44af189a05d42de9c6b614926bebcdae2ee6ea1f bf971ccae487154e4c21ba3b2fd9dd0eb938131afa1d8afa684c252aa2e7 cd05c0fa0f4b3803511252844a195552a53082d3f4b0b5455462fe52bdff c1d8cf2ab856a2312e4353b122c8e1f517a22e38c789438ba50702a9c9ef a8cbc4d0234c3244974998688026c71e69b536fdfa4ffa35be1081a7c1e3 d8a064249bd96f5a4d0b757b603bd0a3222c3dd8ba8985edbd0f01b0777c 316529b5c14f4cfb7614c859099bb3e6f306ec12f62083af31cd2dc6af65 e421861f92ec34243ec8482de8bdbdf5c9977d820e70cb60053576fe315f f8625adc0f6891a9ba8069a46b73781319d7515464988f025a5a38a9f93e 4a4a2a061f5d409ece66484824c6ccdfa25165223fb033bef8e5827bb68e a6e35c50ae3cb1bcdd4120e32a838877d7d99c18bf9637b1abd2316941e3 d3d7a1e4f906341326179cad9b799d6ff28ffe98242da25b55d058d05193 4eb7a1b68385b1c4bfdfe8088285f965562689ab423702dc55424b15a76d c4a4fccc29386254de26606144b05ff30d9c29ebbbf32be5f670f6114838 b333ef11afc184c3bc4d70a853844934d843fac065402b6607efa11ee01d ed0e5d46187563a77bd2a30f712db33be4197677ae7224b0ca01880fb98d 8e4005699b0b3d7d502d719cf3070af36f3bbf4a936f08587415ae89bcda 7c122b7b46e8206c04b7c52a3acdc8fa0cff16147a859b82a4d869576d44 3325e4ca57ac65498839cfd7b3aaf7290b33c530f14c44e6641f38dce60c ca697ddd287a4b8ebff3689da85d09d61ca0de671b20bffb3c79f9489738 472a8f1a94a91a8b4d59e0b9a81e4164f827f35924cac7f85aa2e103fced 89ffa13034b8cff86f54cc6566f2a87f902f2836154de2dad3f162de6f2c 587a5f5b97749f8b879a422dbffa2b7cf52b8c787f6bd1436b8124a80bbf 26c1b91a4983e27ae87a1879f88a56252ec19b0845d2e8ba2a1a2778df18 24eb4cf0dd9598a9036b84c8bdaf45505b52ebbfee5c8f074cb7052c82c1 7e1fca3afd65da452d7b6440ab68be345036c0a8ef5bdfba0486ab7cb4ed 988f593d5356e29ae14da21f3593b0c11eba605add4dfe740f0f5536fd74 11c565837dcb8fccf1ca42c8edb7655264e5a5cbfffdaad2dce9d9a1b72d 46b04f44da6cce2a72a1eaebb00092ddd505c9dbe2e42506ab1ac18ae626 91152b022c06d8bc584ce8300a83812beddeaa3e177c51b14566db8445ba da400aba40adff979c8cbba45f832e3485a4c21b389f41bd0e096490e1e7 4fe7d7c93284d612decc0b1676794bfe08df489647faff364d271031bb48 225e110640a81c8fb4ef4e0ea9138d539757677d93ade145ce6083c565dc c9e07f228ad47080b2e02e75e521547f18705c84b315a82c4a88b76623f0 7a3502da3aa2b11f35bbe7ecddda6e7f30e61e70fda645065792fb5f3a48 df5e0c7bc7a091fc92603962d53ec8903176faee9f0a0b4ae9968c4f91a1 0bd557d0a45d1dfdc69fa7591445e93555250a462f16c74045bb87f744d9 6549b1a9ab489605919efb604bdc3d79244a6831368e653964e65e2d9ec7 b86193998c9af646e19ce3a9ec4c943f57445743e729b27b32cfc272bd7e 898ba3a235e795a2d32193dcaeaf8f4c653d2e8142c573b915779d7a5d61 f95b95d8b351e4d7e02762a656c0e1e62dc9dac4eb6aa2253606503fa1e7 04ffce32dfff62dad560d11fa0439ae64c86b9c2fbcb5f15d022a8472c28 1dae2ef98a632da2e3bc27f9c72cee3fe78496926ccb1905b2a93b3d7c52 f6702d65c7a590d6c817424aab877751e1bfe1dcd5ba27645318df42486d 1d7cc72cfccbc726bf3995869ab166c961bf468f25a8286265f85c46b6d7 0eb017fbdeb9417cbd106fb1a591df8d64988faad85ba7af6e375b2aaf8a 4bbfbeeebab8f63f2b0335b34c75864aa8071bbfd19c1a39b19f562db56f 43c1a3a778c266e7e119a2c25516c08ac9a31029f8e45d5a20ead3cd2d85 9b55b923b16f999acbe22b15dc77bbd70995df003b77ec73258333ed5e72 5365f007e68cb353b18b5c3d2f952dbf771ff894d02f5787b76c1ee108de 2c796658293725d36ae55877aec7686e7239ae982bcea06467ff199c73fc 8f97ccfbf0024bb96087f236b049cc836c975808963bd296d80421ad8d5e b0911ad65a5e184d7383d4b4899b02154c58e6471fc04a204153b94a2fe6 c39234df5bd6232b0b734bd7a55ccc2aeddef7fba2546ab2d71be9de6303 d056cdc1fa9ebf602b3e2e137b1db6ff17b222945546d0472a01fe93ea14 c89246063286e21903a38b0b390f41d5d9ccebbd7df39d2f61fc97e29fa6 98b4855dcbf342a53b3e5c0eb0a042e469d778cd58cedd5b6de6379f4ecb 76258590f5f3284f9a18f657f49d025882ce01a6bd0963e90efa3bd3fb5a 530833a191bd45318b6bc70445f92a42f13233c8753e7d0c16f80e2abb8b 7103ea9012ad3d9ef3c4869933bb3d373aedc78ac0ce9967d9e702265f84 bc68b3d23b0e1f411c7e68e6cdf6f1605bf2978777ef21f47ba87d55c524 317debab2c9e9bd65067023fe1abdc1120bf54866a4c7fd3d4d3a68b7822 d3dddb2ed58214b161282982c96003f3ccebfa41a13ef3e4546ca84069d6 68e90db9985f1d7f03b117d567b03118c2c88a955a6054dc1053028404ca 1d054d596a8de85ddea64355c85d9087809540c40220bd0cbedb0cea3af8 0e182633300ac7ed9690b2d70e2a3ca5e277b1dc568baae26ce788bfaeff 0a584f6bcc0d819bb27ff66edb08674679a39ebfe2277b9169d3f36c6296 9a67cb0e7d99247aa85bbce4c8ddf4223250962679c494d424d764755b2d 2dd66eb241d926b76c5772d6085e8e51430abb78156d5809a68d46fa81ad 28a89fb909880b99d9b52bdb8cdffae0154e8689e8cbcc04fbad712d67b2 be2373c8507b79b21b30359a6669f9e9dd385505f1a589b2418558c2c229 b743198e811b28fb7cc78320f5c24e2b365e530e41b75679e203c35164dc c9e07f228ad470ef8aa5859025b62560f813c0b25f72b8f4325d4738695e ed42e02ce9a27e8bbe7289e4f09bcf30b0de40ce29fbbab8d65ad92fd662 0d00411e5f3545294c6397000b07382b048ab9488731b8cb47b74739d914 e569f04c54d59077b8827af265c8db7218971819c58624f40f945e0744a1 ed592992caea1f7b3854fe184da34f277019c052b8b3ceaf5cea7c45ff50 205e93a9edfe82ee33f136dabb124f8cbf10a57458a93307c5bb001ff37b 29237ec6b1b341865568766168c6572c55c7eab03e236982543ba9f60cea 2854e531dacd25aaad8279bb3402e17d51557b1f65f8dfdeb84b251b3a52 2785f73b4eec2651c5240ca115b18039d2c3956923c92ddbf22cd7857285 6369ee81ae29b26e97d5ca3d3d0004057bf9dc328ea1af8011f5f08b830b c949367e64a051e7270becc657743a6d860d5479a701bbe4c809a8b7f9fe 042b95362c5b7976b1aa9df4b4cda18e1cf7c47e71b8e84244cacbce9ac1 ff69f8ef9429592dc01bd037f6e7fcb6eedddbd1a75e44ea088c1d292b1a c8942ff089eb927ddade2f5af3da22057e16c7309217d5bc45fcd0057656 8262b2289ba7e129ed87fa1a3196c04f7b5abf82b72d7e0736f704e817d2 4de4910584444449db76a321ede57f956c0b10b178193ca5fb1d8574f35e 29d4eaf9a45e5454864994913354c7646ff1d758da802a5e912186a923cb e9c689540f833a375c058d61354ac5f74ce793e8bab9b506a5a9702be425 f86224d004e35ab8060b2c0a8b7b549211c25db36d46ef1dd0ce263d6ae5 a184f464d0087d6e6f1277ed9f5e7f93a9b74aef3f5d38202a50a8912dea 75cd1aecb6bfa4c87079ce9a1e30845b51c25d0b664a616a36508eabe37d a4d64abb59b85453242d006f357b174f86306c4e5e8c2b1b80e1cbf510ac 7767b2769ea3b3c20ca9acdedda95baa3307b895687a3f0dea8bd1b18240 a90905a02112fe3cf306f8b95d8d682fb1348b54213236f978d3708b7480 fdee3e46dd584faab1bdb6908e45afe310a49f73c4507353b219fb116492 d7b96699f48b106d5420e100997f59ca49c2f6d06661ecb6c626f236b819 eef2a71ba937022a92cfbb31d943292e2331cf385cb2e80266a0c5520328 d93dfa5837c96e7e2ba310affa57355ab2d51db24bbf351810a19acf31ab 7b1cd5e55a477c185de38001216224572d3f6c27f9ca8273acfff2f308b7 0a82f3812cb709ac3e5b9bc2d55a732abcc68bd8d75f8d3368411980dfb3 a94e17ad6ae1db659335f6220e677c58c8c9cbd3d9c394ffda8ba0b00241 452459fa7b6f028ade9c9d04454a09fa1ee605430366e332f5d5ff7defd5 19999c7b4475a9cc0bc82bd75150cfa80694ca83506a145ac8f77fea9d2f 42fd6fc88a09f8daa7883dc7b3ffdfeb71b17ab6126cba131cc5490d7eab 8c630e06a470c288af655a14a8a089a61f98aee330c390eaa19673da8c65 ad1756dff44d36b5e6175f110b284ed371585b7d99febebafee61404238b 957722b4670a6d7609d2e61c46ac7eb7c9bfb447bd9b716041905f6d6cf3 21c248b9cbe11f3aec45a34216bf0e7c637c817015ec00b61c5420f0117f ccec5dccfa8ed1c4e0aa02706bb2c2c7d05deb703a240040c9e7ef930876 402e54c9f2a372242e09f0fd77885e467009de558722adf54bfdcc936d63 5d749649b582c063ed6e9c8aff9f6a7816d6090f1acd293c7b6c5f5ff818 43bdfe5f15b24b28f8bd3fc198a13102322862e11c9dce7f505135e758af 27b646838cbf32d839ce07a606b7d0dc0b9a5e725f920da5b1b19bfeba52 aa630226ba308d349e0ba331369e24f60ff1efaf25fc841fcc3c583e62bb f5d902f7b090085d9f011420ef0a952e8ec1dcc51742ab3fb84f48f915c1 e2801d383dafc303c476f3588c5528194da58d971f57a8070ca8f4562f32 1d00db9ad202b77af30536e0c5f90aa30f0746788fe54478b7b42f2bc39b 6a39b21070244e6a4d3b38558c62567cfe37532082fc15666c17e869a5b1 6be4643abeb87ed298ed4891dab22e3261a6a2d9e0809e87f107ea539918 5be1a7fce62826659c7a87d236ca765f82e51171db30f3d85aff514e541e a02fbbaa82c5904bd21709f0c7dc2cc2a8f97d648d7ad4887c570bb263d0 75ab92254cb45e84c8d74ccecee3956b21d2e1e6be6909ba17189d28310b 5cb39299463981280d46714def379c1942cdc2c950e5093f77354d2d28d2 8ccbb72a0cedb0f3aabe28655f8f25c89e65079bda875e4b5a6095c3f136 2cda3eda6028d0dcee8973a81c676612ae2d9205013f6458ae3de5cd9348 4edfe36214cb261fd61f1ee5e539ad6825dc619c70f252d11d6bc0deabbe 36a076b02fb93e2fe8db3e91cb8527d3f9f24f9b609a0c4707744bcd65b3 7c157dd0d95d8effba95254d988f3b8659dd5ce8c6c2681906bd573c7a47 89e059715db1f83a4281145ca0ab674a36280eb63ba220ea372f90f93f66 7d86c4b078ff06b78bda74919c866d9aa46e89996bf4eb3e0abd5a1f3cc5 9a9830aad9fd9489d4c5489e6453dfd029925e145d88ca762ecacef5ba41 15d92fe70332080f171a0e22d89fbad65b6245b0ba123534ce2ff795e529 306e0677f081043b7ab08557ad489a5a397ececb79e025c3d54743a37112 929e2c7d0258e056fcd1b73a838783c007678809147b7eb37f7b04def0a7 e6730fc438108ebde88312aca149725ce351d7d0e6a83ebcc8518a24089e 153c89f0e44094230accbff0142ebecf5f77f6018ccf43b967cb1888c141 103066128c040941b620d9c97c0af8fbeb8ba8a8d7e042463a331dd01285 df6a0534a31b09c716bf45a72418746a7316af388ec5d83f1cd498450823 05ef94e17e6c51cbba713de3333baa770adbeb8b9179d9855c5f110c492e 71ddad0f1691c41e33a1f66f931feb6bbba66a1ed6b318b2da994003a739 41b1d04af31a5f5da462695ac4f8605b0859928ae5f290578c4d0b883235 56bc8cf18761cd6d8f5e2295995143c62437fb4619cf9fd0ddb3c19a067b 9a054948328218074632f6bb063932c9a7385c9c4a2f432e753899395d6a 1fdb03823ad3fb4ddd0d9d06e0928f7a9afdab46d2ba3d7b7809fc251378 dec6ca05988598015191f69008aac0ef3d782cbb5a9aad6964019e887d4b a687c142d0c6e351f9925fb963493c5713530d2afab1e0bdcc0452b5f480 0390299f4f92f49961fba558106fafe20625fae389a1b0b2c2aef6a73c55 16a118a6d6b7f7797d6c33e1bfbf870f5018e520d0c556943069ca4c0e18 6c54ecee8cb19af08d3665b519cdb7e23737817f3a92d9545cbe3c2b0118 54601a93ecca1a86c324d4262c819c18496211fddce4cafde4667aa6ec77 fd3eefdc15e6da7639452a6404a287dcfdf1b364cb423a072eeaa2685e12 a4837dd1418de8a3f0504dc6092e53f9278358144635421ce91a0e65a413 f8be5f5b53a705ae57a2e668f38d657a4d89c1138a4a16922698bdaeddfb 9ad52b22bdf25cfb5620121970a31f97247574900565ee60f40dd390a121 bd9b63bd59843fe088f8c4c154f2163108068e42523f7d982c82358ed571 ba0c66069df8bfdc99696dbe739683515580e5761eeb00b1aa79c5f3f381 b00557df7a1bd42213757e16ce47c3fcc6d0c09d2ee1c578a9167396a9d0 7672f5d185830ff0e3ae12c1c3cc46195c0962bab12d2476a6c63418425a 63cd66e59c1d19c56d2eef8e7d6945b5dd972910b9a4703838ac49007e9e afafcd3c827862866d63f7231c5ee450c5162a43c82bce915f94f351deaf 53f52867d55fe0bd1fadd0b0afcebeca316eb57e69034f70493410067f27 dd3a192a076b6315147dbfe2aa347fa39eec1e3e2f1438ff2c98cf1e6ee8 9daf4f6f06eca4b320bda45bfc75ba8636843ce0c707c3050b2e7914a383 f4e7574aa1542d7b23d36ccb68429728e30056cdda9a764b2bebaacf3b43 107183304022512db622dd21bb1aed97d9775b765deb44342924811d68fe 8a3c8418b30213773603fb456e6ed6a77067867a5aaaf1f3b9e7563f9f03 188aa841e86eefe81434491063bd942e88a9c0ed99335a65ddb64d0ef2cb 1a7ea8d3476c81a0deeca7f22fbd5a879f025edcf3a89016dccd6eb5c2c1 8e190a956f3c44875e708f1e93a629b5041aad5583cb07a5f9e8f4fb5397 4aee3c38303b41da8a38aa8d758712a29054e5bbb8d6ae531025ebda5584 50f80ad2dc6f5b7d7cccbd566cd68727714ebcda235e7bcd4c8c509c8e95 d248bc8613408de7c519f0410465d510bde86db4ec9480861aeb2e95e264 67ccf181f457d45f4b90a0eb9523d9371f938480fab365dddd435a937def c5b6dd3e9441259b887fe67219cfcdad06744bae758b478e229b1fb48d44 9d50e9622419648f35c2bc431d487c5e569dd145c75d2dde195e9a820dbe bb45ed454df06cd96a261e9088998e5dadbe8c8d84c9385186eab456b30b ef82253c1b06388f57170d4baca603e6922ef30eedb860ce1ebf2a6a2014 24fd8a214311131e4595648fb0c60e00bcabb308f58cea45fed02e21fb22 9c2226468128f4c0cfec2c5474292a14b277d4058521d154b0e29996ed12 9111348b218ff7785e72cbec3eb26c9b3551a466e388c7c193c88a044cf3 3fb6ecacd4e84bea61a9f0724a72b8be108979663ddf2a211ce350d63a08 ef0b9670d1d273eb6c5e74c8b12c071fd54a9890567cdcac4d023ccda7ea 41d03a58c392c7d7a399bdafdb971770b96e62c2fc5a08ba9d1289879997 86486c28f1beaa874d0b185fa6fd73c38576fe35c10582b01d530210ebd8 e77bd4b7faedd90ae401976b09090574df9c0f631fe127bbb939b858f312 33f1c08391814de697051a9dade4b64ed316d8e1af739ae155e8e35cbdda 945e38b85cb726b21b9ca65f06e43faa040f20131393b107efc2eef1e22a e538b9a44b6009f314570bd06f63f36c352aa945b6f268f8efcce665d2fd fa3b0acf6b0a36f3866071bb0a1b66efa73f187bad9648d447c9c4fb88be 1f2c07aa0a48fa9399d66f20741063d105a7d3ea4a623579eaf01433cb95 4500379f2b1f0f82ae512e95afdd68f99d29a659756a22088422dbcbaa1d 878be8f2b7d12c48188fdce93447c576ba66e3cdf18761b00d1270269699 5a42aa41b447e6bff46082c5fdbb7753b5583f089317738cfbf54988d6a6 aa6804bf600fc000c8f8cffe56a9619c21cc885172a3fbd5c43bd8bf57c1 935efa8983cabbb06f48159cf469698539d39a2a00b04fbafbea60e8f445 42fca9a857b1d36d6c3cb17f2b2a09d080cdac287bb3eee507dee6f40a6d 72af988291b1e4d6a969f2b6cdab86cc4d31bbc3c5c605e3bfa0b97d085f e68d0516a0f7ab55c59b7acf73ee5c495b8eecd3ff0bdf91675e4f802ade b778118cdddafc767bf3c6b8d796042c0c5ff1c455bf672ba367434f03b2 00644e51512ac3e13d3476ec5a03f948ba9a91ae31a5c2eb6bbe1ad828dc 7695cb2ff10d91537ece2647efe6e6f277e803573d8971d7a97c79928f4b e32669363ad28dceb89be0353924a74c0d7c712c1367086fde0ae6bdd685 6a5c424993e03dd36beec0512058dda60aabd155d76cc950de2ac25dc1b4 ba17b7fef6c8c832e01aa330b13e566f44104b1550caf33d6d3cbabbf6f1 95392e38b0620a9533b9da6276313f0ed9043a123b0ee5869125ed967e28 1fd21984d255daabad720d54d630181c9622c70e56ccb5bb8672af449156 87d23697ec63d48d7c5b130c3a38b8774cbb92b873035460d5fa93446770 c3dd743129eb47ef0571098acfae284f4a9a72bc602ffbe0e0cc6aad716a 4c6fdd5664db9668990d34536852463068c51bc612fcca90d78e299dddd8 504e5649166d0972d7d03cad4593d34fa2ffc5fa60ff52f2dc5dd190e84b e777be26a205f96fd21b10a4935ed92e290d8162aae56a4d2ad6cb325d9c 43bf195741597160f9eb7bbf87bfad4e199f13dd47936b65d9423811e67f 1961dcc1403ea94c9b96cc8d244fb5ac451d4fb6af69d8c0a1338f9feca2 9cf78c650fe0661be04cf131126b2c8c2824e85b62c1ca66a2f698416b57 4f1c922ebf8d04db079229254812d359052a65eaf871375cad3567c4bd18 57c4784117aa1b05d392dff3abcfcc6cc8cdee8fa8ab2f6eabe8259b018e 082aa64f7f8f8cd072511873c6baae3569aae931effab6c103f9cadb725a 969de0e3230e458520128b9c07da520feeeb35879c38d887ca82ac039f77 fea1130e6d6ef48418fccfc9bec4fefdf43b8ec8695152651665376dbb0d bf9831b37f121d1aa5d92ad17b63e54344f80d583838855e58a15dc8a9e6 91ed515b471968bd82f4eec31871be25c8c19ccd9110da066f16583e31ed 164953e7588a0b9164365a4381201f67bfb30bb1b693b0a4c9991a7d95a3 3805e0f1c8fc2813e79c08908a0030f9e6471527b5c08b99ceffedca2604 0acb4b4d4304090ceb3936794e54f2354242b731f3b29979ed65f8084d96 0d85df4c0993ea113f36f2f304b9a4f2111619f52cae0fd7135318680646 5e3e43ed3de0846481881c077895361d47ebdc7fe2df4b1c349a5d19c2d6 f22d5c03f8c15d3b3be3898092b223cd1d047b5143da355a241e6a95aa40 17dca923fd27d920a89017413fe28f730c827c26deacf1a53eb3253d93c8 7b3a1192f9bbc6cd79cab292a5c5e44f8236f55938c362b5fe4ae21a162b 853db8a5c59dec72ecb203f7f225fcdf0332b6557e5ae02657d0de135b13 b91beb8772dfc542e47109e77807c855863b787bf9553ee67d371e85606f 123027df3bfdd597478f8a105afc9e477820c118b92221ff8c5511afe2c7 0235eb032fb6fdb6b594ce9f1ad1aa8a4d687bcb1baae64a7378b4f4c0e9 094e7c430ae5d1af95791778b932e71a090f76f398bb26ec6c9640c9ac8a 3ac2a77162a64a30f40b2709cef43e539ef36d9a5bc6a3c0f65588354109 ba77b7ab661ace4afa719b82b33c443ab58cd03274801c1f4e083632f158 b7e06cd2285ce9088f075f4c75d7b9426f419a971dc110ab7ebcbdb52264 c7e9f0fd964fb35706cbbc5733a5fe5b9872dfa929fec3c6838ac1204f34 0066e4eb1ad8241bf0c336b9218aab32a9f611a415a8a84c800c5fa00d74 c6cccb655dda22bf421c98205483bd1572100a517275d475eb7d3268fe0f 2096e3d9f8fb6038ee0e22f84d8023c5f1f44ed89cdc515baee7350f70f0 8e8900c9c4f7a9d7feafd6f42ec5a41482f52e4572d0cea68fe753bf0e48 ffb6730bf62949ef245c94fbfaffc9abd3b721f923ddebcaa0394b1cd807 47a2d17c01a2ac0b0f74cc758634523d544157cb3ae6dfd035271deed3ec b805a8966dfc2c7812e6852b938713cabd01a17db0c12b6ba72180b35696 d2f27b3789ca8f93718565b3b856c9e415d2e09184c721c8c0a692f18061 2fdfd7384fd949e33c29c4c37bed66d33166356e3e80afa379f36ab4ea93 7edd0afc3e6c90f5c92c686f122df3b5fd6169b9c1b73aa3c254c0ebbabe f406a31e9a587ba564fe5780710f5e2ab38da749b4361a42e3db03ae3038 b34ec856983bc7ad8769c3e314d31fe740640309bd5b891cfef8daa80f72 a6bc44a2a865481778614d372b0437cb06f2003a0d2fdd57666165053868 bab972f37702c08a00e042f7dd3f2cb39bf500278821b02a4c0e29ff5fd9 870cffdf612d345cfec6e32e2cdb29d8df55e996e5e56d379c657ee723b9 b4249264099731f4a535c0ed43366b07ebadcac45967a15e1dce43b63d8e fd9e7ebe2004c70b30dddfba1590da47adfe6d37d41dbeec75234e4abd82 f2071661ca5050c126032fcaee499e5356777a2eaeeda22d743a63d2a6d8 18152e9ffe7c76db751fac6528ad90e833f39724c5ee10d2298dc723fb01 c543a7a0e1fc99c715e9d46626d4cdafefb3d1d6b70ea30be6f464585310 31d1d0be693a50d6d9e83a6c40d91aa3d68a607cf3cc62c4cb085a2882a8 dc8ffec722cc997d5d62a38cf6d8502759919cef2d2dc3690c0190d2cddd bb157fd03ebf007277e9d57277a8dcd2f261d5b45b6a48ee3065e41334c9 684521d32134be51b7d9246c1c9236e5a3da97efe56e04497b4a30a914b6 64aceeb849ad9d8732a093863c724bef3cec4ed58c876f257708a8d43911 fac80608482c2ccd945c0bfee09a51ff1356d5cc4243f1edd2eadf99f86e b4ad822adbc25f04067fc7b458b9c187f3c6fa0e0cb97d7fa008f74be02e 55b9a8f102798e0cfaf28d673fff0003e1940ffd6d4e1c2a3aeb4df1d5a8 6f6a3dc08ce29898593aaa0df3261f823372ffabf3964897a4cf8732c5a1 4d3797093bcae6f1040d9dedbfeee235f122a2cfa348509849eecc61b4ff a8afb5bc44cfd289d13cda71ff3d7a64b5d6f7e3e2018988e03a0dc5a416 b2aadf17750e53e61a74be0c89d72a21e023cf37793fba70b5b24759a802 f25c8295282a70161aa2739b8a28ad357db7710ea7d40c6f0c6fdcadba6a 021b10dd66277ec480f7caa82fb7c5206065a604bef0eff30efe7369f7c7 a7e296a6de9ec5b01b6b7f0b2927f46ce627721f1045ee4844abfb6dc454 19909575a2b92a033283641fbfe9436fce6579998ffa9370d66280d63024 9e9bde6f118dc4406159f721c2f6a5ddc631018f30b1577e861373a1884f 2cb7530466fd76f594bb43c2de823059a5169889d0dd08d5907595579db1 e5e842183e8906466db5b27b5b4d1fb855661d1f606574233deb4340630b e5da3c4591b203fec93c2a55b89bf1667c064a67a7c42aa3c78f468e0ecc 3da178a1afd41f3846ddf4634d8da561f1c389cd51e7b2bc2d6c0c48b787 1d96f932c9238d452a6c391225392c88d3d4319413c5c9a6ff283919a707 4ac1f62cfc778be51d9a5a4657dedfbc436657f0d044e8dd5a78c236bd8b f98e4f64af63c2d34420b78cdb8646d204370a30cd7ab167f8253a4b660a 9b1f46de808c35d6bdf083503159c6df2d0bac725f3aa5e9fc7b9b761580 4f4ccebbd778fc9d408297302124c102414fc65b1d0ede6f8e1adcbe5ad8 9bdfa6c11dd37b20ed0cffcfbfe00195ab3f531e7dbcc773cdaa6f44bdda 376149d1f97d5345bec3276d541017fbf36fbcdeece88ddd6bc5c4733b48 c6614e9e9ce9366e469ca56915620cbf2f43dc9547e75c1731f12dc95625 da64058e4ea6f91f0f7560c11a86bb61b216eca4229f8358fd63e7ec85f6 3789f4e6ba949cab8f8f0f21398368984863a21c2ee29659e6e76af2e09a f6ec3f194659627ab5dd40464691b4dadd8e3d4cfbb6d71332cb7a1d666e b8538060090ec0d1451b9a90829f82913407d711822cc66e34748915856f e50d44eaf1fa57f87548d2b9cb3e8c1909e821719a1958edb9cc2584de4a 32472a0263910c91e6df15400f3554f04357ffb550e44b31b2274dcb58e6 8b89f2c78dba924d19a3cdb6f1357558d65739a29ddad51970fddf77cee3 33591f65d52636d2273807570cefcb2bf79266f4be6ab9b9140f5dc9ae8d 7d78c590bd3b098cce53df66106a275a65d449da0e7a1675c226f452a51d 51506bec6aa90b0b66fd414bfcdbee1c1aa85760ca24f15d739e3d691f57 f420e643fdce40a8ab9780091d0187ca5605281d82c5602a95829c91c431 4e38ecc0df12a9600c3d1519189c57d8e1c25fc745cd391971bed481b3c9 cd4efd854c8082754cb11990c5c187e14d5e799acfdd5629067b6c415019 894218e473f937bc5cd1fd4e828d323882fb907705e1f5f363e4f2ef2175 cda6869df95942422b5853c0ac605c2aa9df86bf4f740fb1353ab59ca4c7 a23382616dd1c7d997898c2ecf1ceae06e82dd297901ab6e61cbfeadf93e 17cb4749401cee43a39c5bd79f8d4191493a35c9d646df2cb4cbcfc30338 49788168f98638f1533660fec5f37bf19b3d195004b36422eec2281e4da5 f756047be7f6dc5ea26ed9d52272628f12f3e7434cb7f33e3c64dbfa1ac7 aa8be071c359c221d0ff882a06668ce6875bb352a5c611a52ae12a4696ac 47c66c96e3392617dd3ac8d9e7393393383be8acc0e34c84fcc819b519a6 89a83eaa4d8ebb26e20b2f0e3cb403c8cd60b6ac4c5d3ef596bbbc91adb7 98e49a115d648c8f84a7e7b06813c25f483e6923656e924ab199a28b797f 6bd46c39fa372e5aa2c8f58631fce6f28de01a505028c26b4dd3324e6f10 3af57ed0f5b6ae3e1c754eebc54a4e5f3a087c9faac746a84e945ec22403 9abaf9c6b71e3db0c06fb40495189b2839579cc1d94ad59b640eef83f14f 9c604db3bd365d53d688f129e38d429b8e92089f064b584870f7fd66cc91 ca75e0807bdcba38f72e7cee33cf2810647622abfb014a9a1fd4e3a42548 8a81ebc46fd10dc531f7161cfdd91b97819232702010a371ceb74d102a5b c5a65d0894c560014bf12aad96247a394d752fce588829c064d197a635c9 2c7f97e3ef652872f11c6d35082e4cf4074ce8e4de1e51ee88d9cfa6eeea e3633fd2b98e8314fd02740d8fe795579dfef93b492feef569feb5b38ccb b72e10a4673fe14a3989c9b84d8e370480f54fda92edf7d7d212cde40bda 7901157af5c085fa91139a2c9d4d0204f6aa2767231a8ac80c098b5faf69 a995f9d3760e649b0ada67326e936ed6d26a5b00d0774f0bdb3f978a6978 86b57d58719a438d7f12ef7b845c85cf6649a40dc275980f7d55da381939 7c7e169b77da862b1e2ef21a0d551f94ed290a548d228cd4200d69e1a10f 5918ab0b25b5c43db78bdcbbaffa3e9950914cb0b51806fdda7e624c69c0 df76bfe44b57fdfee6d18cb617d721973222b59f1b82346be7375694dce4 9e61350afbb947175013ca4ff08a25b6b242e36d6fc9d1452e9e3c5c4120 a3f60f72e9a39ba0c5691eaa48172195ee49e4e758873190c080ba5702fe cd6d50b7de73bdb977e398a48e5761d90a00d012f3b30fc256750a06ed9c ceaa32904e7ac5350f59c997057b92c9d44d831570a98dcf072ec9b4b46f e4bdd1becb4f0858e0d9b640d6d15cf2f02fee5bba7a5f9dd6f1ff96a72d 88e71b4e68f583706ff44982e0735b4c9e51592246d38a735bf80b09c0ec 5f43dc92b39b05b148c05a32e21decbbd167fd52e1fb09ac61181f66331e fda9faa276e144ac4f6e45760df12d6945afb5191a51723300ea98735aed 887532cc3c6f0b61c4aeacda02c19311bb9cf48408b02e896b8a562caf1a c7b4ad3c3dd43c201eae95acf3b2804acc066d422ea006d05bba4d9a93dd 35a76f1f2970cf2ffc8a91eba9fe8ebb28e54e3bbc1ca21fed042c0858b6 da24b907e3c6b78c2cf2b3afa44889de12b1a5084697c6b2521083aa4998 ab1441ea5fdee3bd720319d583954b7bdcd1d4b4b82c9a24b5fd5ec56a78 306f8140ddda2ebfd907e31f6a6223e41fd54d2ab3dc87a2cc2203d649d9 9a73524b5fbbbab176e86c3fa5f7ebd0a7deda59331c7f7254c5e0bc03dd 049b4ec682a3d570489e416a6406375658c13751dd118379270f39f2c0dc 0b5e71a629f11c1cb5f07c57dae50b6993a495a7404125a173f613a44a36 b5936f565a2c0afcb9c61599e03104e3798ce304c809a99fe17001d54c4f acf96435c293035a4bcfaf915d649ac83fb8301155a05b7a29120ace7df0 46c649a12bb7ae1a557e181c8e2912231fd12a80d1c673deabf66cfff3e6 0009f80492803a4d3422a774b4d9ae64407fc34a3c5ebc0da2789da876c2 fcc3abd525badbc94d3090e9bcb299d9f3e800aba1592c5a6dae8e59d8e8 5301b74d6f791a6a542bde41897c0fc0ae9727f555fa666a1a6561c3053e cc41cd2c6d72ee34119f159e9ceae995336505b0bb2355927ade33173968 7d1ca9fb1c131bf1eef4a7230aa1e78b7532f820db4c70da8418bc73bcd8 16401c60975e61b7f890bfe8b070066c29b221492a093ff58867310048f0 4c0beab20d1b49ce7b4014439c8a9ff6ba35cf1e1d4013bdacb599abd6dc 63b3d125c01080176b227b46a648a1514abcc4a6cbd408ab8a26dd2e0921 954c7b7ff2b9585cf8613e31af65455bbffc7ae33aea835c6b43cad96a54 c42e086cbd3653035649bd0cc04d09fb6d15301d35599652e8c571709538 e3b2e1ea0f7083a62338dfa6738d7d8dfe3d9171bd2e4da3a2b336acc163 4154feb8612b4511b02a9095627532f6a3c8cb8b63d2812e11e83ec1f3ee 7c01c0f28b47641a43bfecc2c39188cd4b34ea3ae9220a4531ab3a9ce8c3 6492e93aff27bbda861f0707a6b4219c69e33ec3587009f27ad5b2ace376 982b1d3219a9176c167a534d0e466f1fb5efc98b46e61bdd0340a49c41b7 aec3069e9cf9c9165a2265c5f28219d8b0bc1172cc49dc1f247c8ebc4bd8 342d85e5dad08b25df0fadfed326541cbd0aa5dfddc2a555e1e98491f08b 007f9801c9573dc624c8049f10f9cb306d857ed10af0aee3b35c6d243beb 2961be7fd5006b8fdca0df3c5cd7270920ab111e975f39660a16136ac58e e598d144ed51cc04023e39063e60d905e13c8a98824f05e55b7882d6a3b7 24d971ac67272f925377ca51a142dce660ab7e1f3b2b141745a1fd846982 19fd99a69dc2fc4f321af260eaff5f4ce30b3e354a8f91df442309937c82 f251a507963d1f788f62fc24ebcb41be71ac6d66ba097143d147ccd3ef7d da46265be94963dd1eda9c43df41474e57f282a1de20496fe2b9374b0f02 e0503dafd5a3c66ef4f47ceed6c32cb790767db7d4df7b0e3f59ebb57918 8eba888d6a49865198cd5ce628329e25e2c027945a2c2c1c96fd5cd8ca02 ae363a07dd87f414b1dd7f16daef78f44f65dba6dd21d2d261f204e656f6 59c6948cdc049b27ba9bcb97b8c8dec3b8c66621754ac5177a11c4b0669f c94274e3f8176e3274a9b9ad8bdd769878ff5e6ef592d523076b78ee2eac 10342812cd3123a0aee6f3302699eb4228a10a62e3bef8a942b8a4b8c076 e2ce4654285d2273449fe7d2bad341990e24ae8deb51fd4ef643be9ec07d 6784055dc5ed65434cdc8fa9c0b8746baf863ea492f09d856cdcef84cc47 e2c58e7d8d1df5bc96e9010cd6c36ac22c37c4c25ffff5905cf602e97ca8 7bbac814b7718c344cbb1f5799cb5f419221494b4da2e3e3fa4916bc841b 586b40102db1b62c755ee2ec0ae264f769ec9742d48a8c8480d9137fe5ff 06f7336808a6308aaa9ca309232a5cc76f37431197174c8ae0ab3479ecc4 16f4541127c33b108c195968f04559b0ad764a7fbd919d80d7a0c57dd9c8 2e485d29d9ea702348ad472341c6319c50a06bffa5d6494703db39c30645 9afa396d366f05caaea1a9e516f113e8ab79c3e5f3cd8a5cea833fb46e38 b23db75f4fcc8e377e0298c5930dae4a96a19ef175214eb392aad221d6a8 20e50d65a696b1371f4ade78cab93956de299fe165daac89c456f3d84958 d14d13716ae5c841ea06b76ebc61cdd4cbdfd7332c9546532d84e2f04379 00510b63db2a5947ff52b9e7fad9e0f940e39cd3d4db0fb6374ca3f700f1 457de57741e5f4b852f34e48622b6d535e71807b45a8f1f8a76a367bb2ea 832caca62fa2febda8d8be62c5bad76ea978db6d5d085a511eea6e8d25b3 8e3f66e33d90a0a076f0bc74c4b042aba82a14067ae14634006cf8754eb3 c62727b47dd0f0a8768515e4f8f33400ea68a9a9f4ca66f83946dbaf3ae5 6fe575010246a74e3834ce962060393154d74da8eeeb93bcdf20ad1e95f4 7dd271a5ef0576c7ddd2ebbade6c54ea936d8b31e69f1a51a79a73d6ae24 c15111aee860e7edb9362e53b2a3876642828eaa55c7ea8e9f656e43dbe0 2536e476ba7b97cfaa96af75b087b57de35bc1cbfb04ce17f02844d5a06f 34de233562f26ea5854f2da4b35abd279a56b35b19dc32eb9c7b4eda9f3e 4cc0773606a5acd4b8f329f55f7cc32229014be7d5e753fa835a2eb7f7cc 7cc9bfa3dc2d8a9bd3217fd41e301c039abb3054422a6e387e925b872024 b83b80e6e32c99c5380b22cc27939212dbd2c96b8d4e2e04e5b64ed316d8 e1af73ab79645b62f15d391ef24504b17730f801c36f2c0769ce5e870611 33f92017edda1c23f750263a92c8c2888ae93794434c63512e0b2574d9ad e9eaf6008d4bae6d1ee3a827758b220fdb4914f21548d17ac5e874c97123 7c7f00f1f3c32e5b6e01a01335488ac3bb4810dcd0614191427fbf06ac70 e3263e4265141a1469050e2fe51d2a960996421b854312d064a57c3ed398 4cf967ed27a9049121f7412f2a917b97a9202a0505b7e937898a2edc9a95 f93605bce7b5800b580b827ab2618f74f1c463cb7b2a0741aef43acebfbc c80b52f894806c9d06a2a0ea8babecdf11fc1ffee05a63335de1e157abc8 512466c2cbb9f72366c04caf0b35ad8a7cf8f5e44ffdddb96262c7efcb36 0964df89426a4deb87ee98ee0c4d8231a0f0af9a6f9111da7c2b54a3d39e c87bae4de6204aae11fdc482b54ea52395de7806b4a24963841798a9a479 7cc6747a2785eb2b5bf77e37143b2e5822f128411553558f6025f2d7eb0d d8684e12154c58061e18c9a86609c75c2a21b81ebe674d0aaaff51d480cd 547b163a21a7ede467b2ff028a87d64b8bd099b927981f2fa76fdc734e53 b309653ed6263cd1782e58610be79beab7cbbb7edb8aab8de98d7342aaff 40795a4e42484259138d3c3606aef64a53dc66455e46253e7f12b810ac37 ec63de295d06125e82fa5ff521747e7496c5686a1aaa0790e65aee056e42 8573541e3f7d4b7dc3718367c58a537837d783ce36280c8ab3d2cec3d920 9548cf52cf304589cc3906c83ac07445479f808453bc1c8154d0c7094f45 0eff201db7593e2efaaa3ac8d9c654129fad3ca2f9c492c8a76e71ea463e b12e4d3c0f337436db58f8b49423cc9efae716558b90a53fdb3c2063fdc4 ec954e99de2476a064899a2d6a16ef402585f3167f9328477784f5d78bba 428d2220dc375bf0c567beae7bf7d27cddc9ca734d5ff5764606600cfa03 915cf7a937beb1482eab2da65f91374a2b72776e9d233c23fd273bfb574d 4d19e54108fe4d671fc51aec63e43dfb3bdaa338a3e0c19377b11a556ca8 6ed0e181461dc968c7e38cc9a5551cfbf08e1019ddc3893495d0c7363713 1f7e7ccbf59be7cd5a64f607a18cd1d63e5c360e0b4ec28d1abc9207ec24 d6559947750453b9672bde83f0232aab73d96d032bd35a6b1dc37d38dde2 b1bd884dda95093d064b0e691c8a0613bf42462f524dcba9aadf99b03b78 b8b9e83e37443dc92c9571743128d1a7dd9d75b9a7c67383cae368a2cec2 7d9dcd3504e23758204c079a8944abb055038976602c78d4f6eea23a55b7 a7c1af4abb1849d31e79662da726914abb987d234e50d33f1b77557bc872 61ee9840a814dfc5c4c5e0e5895a4a142e8c21defb15f99fbda4adb69567 95809618a84a313834e9e349d33a593ee7da7462288eda60840c549c6af6 9ad2fe75413917d535c1877a829079b4c0573e0d7417b543bf0a5724afd9 98527f069467dcfbef01626cb8b459ee7b2d9a43954fdceba49fa0dbedbc ec5599c6913703fe4eb3d67a0825009e1def3a5adea6151f1b40d8df8258 f4327b77a31f11079c0b8e926caf334608370ee8a08bfaae137769ecaa18 216f78b681a0df741bb2805e3308f3e16bb1d2ff56d18694a64b31029d4a 6d36469729fbec5b0bbeb70090e7f70ad2e7947e4f61e7ec67cfd4bce9b6 9a17595672317d878c1d0b2c9e1dba278901e33e16d59f60b06db842de61 6a92c01bc78165538702cdf4990721bcdcceabed42772b332aabce0824fe 01376ba6642aff89e7a2350818fa1d5e61e11e587322769fede442d6f818 ee44738290a8fcdc2cbb5b4df30fdbf3b6b398ba13d4ed8ac53465d27e40 81ce5f85423ae571c41bd2ea078a7d54b6b670f3f5efda7ca04768d09cc0 d6246d1548cf376f47f3ea9c8ec42816814fa16147589a2d3dad7d4dacb8 895e025cd60b2b02fd686281128d75dc16a87b4e08cae59e83a9b4561ab0 90b4a7d0e2b531d5fbe628d1991de7717a578942c2267899726e65c61211 9862349651184ea01a551803d0368020f07b01cfbbc126c142e2738e70c1 f788f7f21b0e8b1b4aaa6acf5c9f0a37c28aead2fb5efc19bccd9a29747a c90800d7567343ff3fd311915e940a71398db46356200bacd8c99e78a8db 51e6407256a013d78cb6d103cd10cab4eecf7dec00fd78230381a7231d90 94ffb193151e3faac1f111a239bcbbbc09c78140183c3febd0454c4c2461 31706415219adc9366eed44a4045e1536c5a62cf469b625dc44646639ee9 8b1f5bb641957b0e6724bdf90c827920b1f6806172393fc01703a336e865 dfe191114af9ec2a3ca0d004e39f0d88c533f59c11876501dd3b87205d0f 03079987dc01fa7d7b52e7551906bdc1ce9032d7bf1c5243f84dc4d1a6f2 9699aa497cf9f409dff33f625082b4a788d1f55284ab3f9acdfbc66c6152 9c52c8545d8b3392dfe506e4beea71f4580835d1901fde3270cea0747369 01177cd019c925a87980bf23670a876bffb94473391b5f599bf6f14db203 c0694e0310df2d64f17f68f801454f7990c573d743796711c0a172908e14 83ddd79413d2bbb6905704cff037d08149b3472a2a5a756f06735bc87a59 5367cb91ba9e97d0f275210048d79411a19e0c5cc85c2949b48b0e6f09ac 2336807a5a2337a72984d24e5d68fc0df2e809ed7ccd17df062327b1ecc4 7368a63a6e0e3ce898fbf8958afcb0433e8a395e0ff76885f9df4a588939 fb40362450be66293e5d8d4d218d0c0d1011e1f569a4c00ee81f199e5955 f5aff80c1da8388fd407f03e4d208736e93f2b651a3fd725919e2b603a03 e91700cf66be4bbd46e8081a5c5f1470fa1379e09802bf4be4a57bdb39f0 2f68c813cf1d3d69fb798542d354085c3bb1365e184607dc1a60c1d342c9 4322ee8f96fccf9285576f4f47ce11a1786a2c9e817b90eb43df586638b5 c49f5641e9fef24232427d5b0f423dcb97d77611cde844b60e89463ee213 5c2d34cfaf1da80bc1a6cbf46e5b8adf7c512ee3e90094a92d564dadbf07 a83323acf2050bb1994f391504a10d67b4b32db4abd8cef70ab9d1bc9491 6d5ef2a997e3755fce257e850af0901ad8fd89b7db3815d16552c2333bc4 a1a73261955f3c842cdf9f8de9c8bf4bab2fe4f2b6eb650bb88c0392fffd 9d33a77be1bba11edb6bce336afd614a986f539d4ab9097917a598acdc34 1ecbdb2fad7448eed3bfb44bf03f18d4570d5dbb9899fb3df18b375c8025 83dcea90ac383e4487835bdb7daa9370ced3fde2a702ba67439763f81bd0 f49a22811915c4009f95875f34622bb1dbc254419e1e36c636bc321a3c1f 765dde7429dea1500b7257f490b53c1a65bf55d958d02c06e6df8be72e9d e0747bb813857f8884f538184312b7a0c449bb950e2c7790ff4b18b67901 4f030337f0adc5eadd12f7688b02909cd10131b7f04b888b6b40916f416d f9253b4308edefd9b02f1aec8ea020b229125ee05f2103a84f118960075d f1b41bda01d777861cc7feb450285540e80afccaf8e0bdfddab31ec44e5d 25c383a26be62e1d4129e163d98d2c969185a1e21fda40f61dd59cdebf56 a1a5601ce728189afa62ccf3efb28e94a4566a1ff654a9c7c34b7c34d7c6 31d66baa48ebe51a46fcc96310d319d3ea1bb69b14d005af738fb1e207be 3ff9b56d3e0807e8c7bc4e4e297230823848faabe55016634e57512859b8 4c4760d9e09d2099f8627118ef4dc5f124fdf741cdbf372cc640cfa91cf7 bf068f2d7e7f16d57c3164763bb0d99df51470339f02b8933f27f0f64ff6 82ac8edec3f3b0435104536053acc5c0ff62061f8c9eeb713dbcb5b5df04 d94f99f314501dfe6c4314460839f894cc5cbf876e4edf6935b3b2e2bb57 1025f15123d58a0b2b4d5d3c26a128e3ae5b67ccdd884c507a5a37fd6fd8 f6759f9d927afd8a82b0aa78498ce099f8e70bb1b088bd8fe90bec704f8e 84e8e156e960be3c6cbca1bf33f6a1bbc1ad45cce5cfdfaa5d56ec35f420 b591c657c63b5851a995b267bf56093462a88a181106d3c5d122b6844e87 02b80c7f9b97cb8583a1753c2686877f554131c9be24e74955905113234e f83ddcf29c246ff7004416b7f85e9a91b605cfae369170285c613633589f 724a2bb82a805f3ed5b310a19056caf97f62d620f03069f609132600863d 64c726c983b337ff09478f8ff639898e0b3dcaf84d0c6fe29bdaabfcb1b6 3564769becf6d5dd92a288034c052db463952d25e1539cdb26646b8c5caf 445c1990d386c85704f761ddeed3117c2aa3702d42c3adcf9bc2afb14b20 c5201b34ea549f7b858b55ad4d6085edb31e652ee6291cf2feeb3204d5e3 a66e31799264bc9c565f056e0e2f26b23764021a33fa81347c3ae791ae8d 35aec41dcd8924593635e28daa5a037ac4846b00ce5878e34eecfeec89a5 49aa4d03b3c0034c54646001226425fb1b73bb21eb832a2ae25fd4f9f1a3 6725f318f52e16e5b781319d8faf6d57b0509ca55c40faf8c59852523803 b98721e5ef32608501f2d9a64f92b8a0cd2f12f885b6351cb782dbc599ee d616d456ed101006981c7b0afa4c83b967aec96c93f8a5e4ed3e6bbd9061 a3c10231c2d1e567917f62656a5ea34578577cced18cd5ee1fa0b3f7dd15 b29dc1e41471c1713961d3c9b664a904b88aa087660296240cfbed1577b0 cde9a4ee6b7a7373afa82c3e06b2dd6fffefff926c65325d289740f1996e 3a214247cc284a545ac6c3d38f628333ac0ffd19ad52d2348ca838b36442 d69b296b80e600bae632e3f058db43e4110771944caca99066ddcc7db8cb 31bf1bac473086ea0feb680e49ddeb960d0aee054db2adc7bac86caaaac0 8f8c90862de1f87105c123f7573afe6933adf38f301af50fd21fb5dc7227 2968e5cb0e7cbad45cd8449bd7ad1a9cb5ee80a94c41ad389e6798d553a7 41a629f37315db92e2499b47395f36429227e274d97a34853d2ccf16d37c ada20bd11e7efc181ca0042e22bf041cd548a50e597c02208914d573af85 482df6d9c164bb48e55dabfdb38bd5451ef305e1cad322afa81444886b4a 3f947cb151419ab9023026c3bdef10546f9abe56700e4ac467e856ff1fa1 68210d585c577bed273acb076b430ae24b39e73b6dab1a049dfda192f6c6 34610151b414ac481e8390576fbd0e3f1be2b2af9adf730a1861d46ce03a 29897617acf655ff494c7837fb85b1b9346d74c756a1abcecd4766315012 11ebac6589c81549411bf365575bec7f209e670fef01c0080abd2b852c4b cfa42b0c4ab90fdf99e3de19562313e8aad697be25bca2ba9e860d9c9702 108e80dd0701a488663faf8b2150d768381facf398873cd9b46cd93c9bea 2d576cabdd91bf0e3cf806369bd4c3e9dfe0617087eb033d2064806110a0 56b151c15f895b6c9ac6183f17dac941f1060e6d1276a0ced4d17e844bc6 a25873c4ff83f1b5a55bd3ebf6e5659afa0823700b6131b99b9a92af31e6 804e0e5d88524a546564670fa27a6bd3c0fdb650bc77e1d687d2e9b11d77 a56d044140a0e38c9ab469f6a9597d2fd97185c8626bec1183f16411c11a 1936ddb94f0eb86ea0342c48d9738fd5d1dcfb9b2451db44bc63c5e50c1d 5f67f05d5f68690f505f1fd09a2605b325b840c8fe97e1caf542868f65bb ecbec7171d689a0f8fad457c605fa5b14429996701648ea16f0f59cb28bc d1a2c077d3c5c7267befe1f46337fd234bc82b83190a6b57cbf74175aef0 d390ad9c30a79f3287f9ff6713113f43a5b60d9f21ebec2e3d79bbc94ad0 5b576213349de238df9351fd48f669157aa453c1062c8f49a26dcfaaa05c f71a6981abb9399402c33278fd224a0fa76f3e091c508695cc7afc0df694 9a43641e2c91acce0c2c66fcb538173ed1c3b517d07c316dd8ce38a4eee4 8129d57a1b98a9110f3c64105e86697f0551ee3c9f6e6d4ecc20f0eafe9a d88a249091af17f980facf37d64d8e97026abc4d232338effcc8f6273ff7 ece93e13ed1170357bbeadfbd0f8e4d3e2ccfacc203af7b54ba5bfb9db30 54a39fd681913dd8d904fa4433b62569bc083563fd199d8e29f3ea16d90a d87af6e44b4b1805d2ddc25427d756f38d2abf79cdcf331f376126c0b927 46e8267fa78b57965d0b237de456e84b8f32144ed85df5eb0b659c23a542 d53f238e32c01eca5dfddb0542ef45fe642d8dfc118dc68879aa48a1d4c5 b764583a99d6a1ffdb0e7df569e7cb1d23f1f1e793e561882de734da7797 b12d057f57276b6df859d1e922d7f26a381c95e504e78bcaad546ec64cea 96892bef87f11e04b32523766ed6c0fb179c8875b820149cf827b588eeda cb4bbaefe3603189d63ba54fb032cfa42e5234cdd1da0d7cc26ad093e509 73c1d83c1a9473ddf625ef785e859daeced59610b2c1ea9180baa54c8f0d 178ca3ec39635ed89dccc541e1c7f71e9dc343cbfea28ba0a5e06e3e78e3 aca3d3b9731d7562f3241b356ce9b1a4fa9f4f6a0297ded27575bbd70dd3 53a99bd42acc6b9e0fe266fb1a45940c95f7bb5e441059a4602bdd2ebe32 a336407db06e8503ec3af98092314866320064be36414ef2fc6efefdad1f 379795de5c6ea183a9b6d00faf632c28c213eac75a50b61a100013aa6143 bcd66f81dbde1964cb16eb0d50caaf7cf539954ce73e1b55b630d9b6f122 ce9782a15db006187bf204c79220f447748b3fe14a4c5e6f9379655eb143 7bf286e47d8c8998ca41a518b5f8d065cf5df7846edcee85e22e960e8453 9ca244beb3def647d479a4d40d84c8adbea431a4bb546bc0fe0bfb53ca74 615be07c2c87ad67160ca19ab4a06c0e03bac9bbf062849a62e03982b01c e729ec85487d2f222cdf85968fcb4f1f87f6b1263fa9a04f22a06500fa85 52da332ef7991810a5b29ae78d1c4b53607b0c5409e2ccada731372ad7f3 6ef0936cdb272c8cc8f6e29919935f5fff57d92e78fa8eb2d04d4370f9ed 43c0cfeee1b88645a6f56ac4f8faddb340e3a03b3e50b990574eeb5508e7 884c3c27b4058e263e6c989ec6a348949487be4f4a88e8585900ef4094c0 db6d274cc055aa946478b78973e0648c75fa0b4674094614cfd805afbcfb b3cc180651ad15ad49063b4f1d6f50b153fd4861b2c742f5cec4ee7b1754 cddf05d3fb3054dff46f20cbb5af2c5d1e10ee907df6787f641cb77bc8e8 2eb3fe665ddcc48ec82bd01bde5abd201ea93363aa2df2444d1f18ae3be6 5412a3af64a21e67b8d146dfb1617cf9cac83fef796157123febe6d71ccf e09656b4c87abbe23115017818fa065f2a6b4599f14cef2290e71b9be51c b9ebd0c2f05efc4881ac13292e6a4af76ed14cb4ea6fdcf0733f4c259ef5 2d72bc11c9a3e4c290df2710983f6affacaf0057ef56a549081b2f74ca07 df9a04d8855b1caaeb1595b1094c63c92d18482b1ab323dd292366636c6a db9c08c9cb20a299edf1cf269a61aec452db3dd4a057aebc071914b28ce4 771d483917757c53bed287eadab5a8b324aee981eef88c18c18a98e8d986 48b0907a62508b1e19eafa4c67c929deb2cc19eeef3dec3f7b916fc16b30 6db539911f76a6e87871dfa491842f783e28758583fe247592022e56159d d76ea06eaaadb965be839d7f92636df29838cf32fd3afc54595dcb2a6d04 a71158f46eccdadbcef2db8ba70c94a8d0fe9f7eabe0262af495899e0eef 986940a8414e5ee3382bbed1454d0b6802b1c7dbf268ebd1821082c5d8c7 670c31ba9c1d972521569844012bab169ebb75f505ed2653d7b2b9f5258d 4e4e32beb9d5b75792e091cecd8ac11197328342db17af3ecaa2ff79b90f 93f6b5d2a9ea181b3c7b01bce28f68f6a6e922644e4a8c8539f6c0bd7dae 91d59bc9a96d934b2a5b6dfb7bd0c59108ecd22110a3ae00a24b93166938 30c0c7fafeae4f0ec087b9788064f03bf8c63b558c11bb184d902fd54318 6ba0bc1fdfd63c372667717a5bded4066fbc329132a2e115e530523d6876 408dfcc7e67c946590f6c12be526784fed8e6b550616173a5f68ba261896 5b1a3e06ec99ff60888f059d4e5fea718b80b993e3e7ebd78923557fd4b8 01259a0004f174b80b14066f2433bce0792ca73ef45c7135c30c2c55a3af 9c3a1cda8c73955f7ee1d621b5c475a0b6a6159cb7961df712d1ed1835df 21894b9d505a57b3dafff6cc091d6bc733d7470260451c20d3c6a5384a40 6037098fd4a016b43104c50a3340291080c8ef12c22f408ec97816c380e2 0d179deabe32be087046366175178ed2e26eaac402cb436c545fa134d0bf f0114d18ad1d6c5481c4346f2b1d34156e40e52ed730e9bb819a69ddb3bc dfeceba921689cddea1fc1ddd0cd3c66c21426637245cfa04e7978ecebf7 1bd335f4a8b3fa0bf945ece94d3f072640fb34696891bc9159fecdccfa53 7282a6f21e3a213cc7cf501b05bae3e066e14290ffcca3f55ccef2f48d7c 0c938dae18344907d039eddcf8fd4aa85a494cc26e2e41f4440a351f5a32 7c7a64d38d9a439a84b1bcb7ed9b8684e2581589c0b20cf7008efc5c5390 1a0b9e9bb15052c6baee571ad778eb0588b1d73863da33150b59e2d8f55d 73a699b48717ab49510d2b0f724c65a02731d1f53802837050afc26dd0b3 437abf213660ad63a6f21cdaee9cb7c317905c11655c16c071c5ba9e08b4 65a362649f217f0a646ca4ca243e7cdd625311e7919109f3425f7ad41fad 5d9145f653982091b82c16e0de8ab50088f69173544d9e098ea1c497ac46 70c57526aa83ed4a606866cf2bad0c97d9bfb430cfcb1fe31296b760c254 f4d56214f1b9d335dbe843de75c68c105922cb4763f19a05d88a677206b4 d94dddb0f482e7e9cdc8f1fac05bc6de3d5d06cf8727008f43e32c457403 8a9e20857ed0aa3939952f27f00344ad3677b36a9c91cd42feddeaaa335d 8666f3d74806fa4ed35cc39ace26a12d8918cccc09dca06d5e882b25c089 e3549ae92983bb1ca2086849070f948491e0f4383f779695c9a96944c145 9382e542a701ed9e432a8568f7f3b88fb5b5f09b9ea2c6f43e3a80259e26 89f9bc5f5aa62354b9b7794c4021e655e98cb7b893c30d9ffa7fa640ad4d dea01065a4c51fd2842990c2b0d7cc268ed9989d79735382284eabd0be51 f0b55f9f3ece26838ed6ed4e56d66430a034f39487ba90d02aaf928e22aa f6f3d42d4fad50a562f573844dd221c8b0ec1599108b1044deae3cf5920e c93df837c8502177eee7b97b116d94fb26931414475e9ee4972e95bfa4b4 75f5cd99b213bbdd6af8f0d9e81081b3a699a5c22c88a7091d6e51ccef5d 14319e11e126a07ff01167206de290e1706e5f3168f3f2256ad74b5f5a8a f9762b898cfc0b122845351f1e852b8cd9c5949d6c7986954bf1d3d008a3 ca9067dcae5a2512fb9a769c396166049f9dfcb4f46f1ace9c2b8568cb37 13ff7cd8676e821ad67248f819d81e8734903a7658d2e52999cc3573b78a cd974f24f71e3555d34ac5195aade9a95d9e981dafd503506d77732d3e17 fd28a49f29059882380b66b7efc3565c58dc6cdf73ad2725389a7ae3832d 3c32b9d1a79b904de39a0ed496c1e5e2abbf6e86db6c161dadebdedd0562 9045b83a868896e731167e71f4cfeb525c6cc0dad76969b1ef9e2da6a788 2ee4997b91c474dfe1a4e7efc6b3cb3c4e52ed157475896748deb398d91c 5ce72884f4e26ccdc1257098e16fdaea1b9cc1f377f2a760bc7f789ee475 e76a6f00a02e3ae1a352e91fbab529ea92cc6b0672f56a8fbc9205f42959 5578fa30b5ba735226cf3ad7809d9860163df91e05d8a42b8d0aea71152f dfdfdf57d54e9f77d4f9af77cbc0dbf05785185ad7d017138f1e33527af1 0c57142d75406e437f1bd1d23b5e973ff5da6f1d32f969f1f363e3ee866a 17f350b8ef85203e4d6b0f5bfee454ffc541ec0f2e2b869ececdd1867ae3 49aeafe6351dde9ea8172dbe5fc93d48d67f1071a2e5d6d0c62f0a400b0a e53d7a6b66c830f358754c1b54f022f6ff41db958658c94f167cf40966b1 67db22894f93d55ec7fe55c13f1eda5c6a7619a3bba3d4e6edc8961e9dd7 b90ca7f816493829a9ef5b253d1a9b5d741a9fd0c1c78ef029d3487df78c 29fdc54924bd8ce3acb8273f629127dada5845fc201b4da5272bb139834c 9488b261aaf18d9beb7596064701587e9d34bab6d90e6ca89be84d018ef0 84f5d4c1fde64be6cee0db3bbb59f65a871a47b3aa6ab8a30470d1b932e2 6638506c90ac37982f7566d04b90c9cc2098d1605dccac76a75523184f81 8a5a593db48974e28c4917f2568e27a8484b032e686607857a6bdf2e1efc 036bed083de8fbfee305944496aefd090df1bfc9bcc796896c6efba68515 097c6e20f62bd144d59aa23a265ddbe395b0641843bc670a6831ad33eb76 5ae09c9cff7bbbb79ceb912bd9b7424044c0dae8369f2e4e535075c86e43 f8e0a0514862fd3595384c35e8f044eaffce54ae162ea6a459836a924e4b c9d72c4e24bfe843cc212c697d91fa63d6202cfd298eb95079438729e75e 81932b516df90ddb9c1afd7b65516d23f6d7fdef243f3977b6546f376475 ccd0d5f854d83d65b8e3050a6d087fce654269b34cba9695768416f86d93 e4394e692b8edab13cf573941e956003d1a1a0795636270760a3e3213f1d 9bb7f09bab813c97db8dab81c4d1687c5f0abcca8ba65f5d44d717e98b7f 88c561904c165543b7fe4c969f17cfe9cd5d2cd34c314cb6deb1931fd577 83b5d209f892aea0660e195c73664ee4818838e64e33a6cb376b3161ab9d 446cf0d54ca7fe4f4e78e2fac0dd135e56d425d74c307ebcddbb265bcce5 fad5a2d4ca97f5ca2ce9e559ceffb4f7cd55125be438e8b515ab02723594 fa3347490136cb4fdd5bc2bded7079b6bdcf7cf54b9dbaf2cf2a3b999fcb 815956e579cd7103ab26319d3082b3ed699e8048f0bbbee127f8c704f214 a0a2b1b15a104158290969281b890182046e34f6445a9284be62fe4cf439 c8b96396e6a48be68f02bfe5587d1077d7946e9163e68610a1e6a91c3716 60359845f16492f4013bc4589fd576a32500b001992a99bed798596b9fea c5c6d04f1b233527bd39c561eb79b545545baf1656de017546b2c6c59bf5 01b750bc870b80d7756ada6ed0982f4f27a1dafa2bb73f639440279f5a5e 69bd10f3748855c6e31b6896b31479d7fe922205b50c43a5820e1024abfa c79bf22096860c1bee306f9bcfe562c7ad7b7dc8218d7572f6e7eb0f4316 7b2f0555cb4ab6c79b620fc9f014b71079f8f06ade3655e8eca1f67caf27 862853fbb7d0dcf92aae3ab5a6e50fde64083aa70d348b788227f69e1c3b d80bfca9754d4f8a0f1af7e5719e62fc360b308df9bc0c91460c8a6db72f 7bcb8944145dcfc42c3c0180194b039ba5b79892c533a29f69b481658dbf 64684782e4d6d8f3376eb2f4c5b014d366cf1c0bff24be0dc3065d579c63 1989c794b5646aa26d9e675695a098e0df75384d0806e78be8726c2da715 51b71f926b4393a044a4f6e40695c690fa147f7f0242a18f1aba5f8f905f aee6eb60f3e7943bdf8ead8ccbab99aab3238e894f962e233686cbbb936e 8669eaa2213d1c2e375a0537454b8b8ef5b01f405b1790199f0bb940e452 9f65ea0c1f6f4f3f37afbd6f418e306614a3d03dd4d877127f220a338f1a 733f94558a0fbd2eda91a9e243ba327ecdcb563937ff30565a9c32fd884f dd7d264e9492544783aecc6d9f2fd05731b9e30c2523fd58287b64d07b5d 2ed6329eb65ed0ec566f41d7f494a0f1ee7f9821e19bc0aea3fb1a878a16 608af779e4c8c49f274694872477de79d8c139b5d1d0322b08c6f8ce1b92 35706028f8eaf3526e80a2b021c7e88cb7f8114aa03cf8b7a0a2a6f575f6 b37f68c3df432d217aa086f7b97c4ff9dcbf9879065d0bfe8a8ba23ae621 ca77c85a1db400b01951857e8e41ec6504d41973f487d4c165f1cad3e936 4d2d3a559e08a9e7a8dd9a1f85f9a57bf029421897095cf361d1d8f4085d 618555e02d4317f3257a8802b1cc17d4acbcf38cc4a173a9ad864fdcb34a 20d450f02164ac84a6c854a13b9f13f30fe76c364add8f581f8669c0597e 0f9411e9c8f0b8e2f1e520e0f0f50c28fc883a550d5da461f8e53b4ba492 a7c8547d14659788d346eee2f83df0a6a24aafaa024c265b018e584a4ca5 b0b05e9e0841135d046e2841e44dc9873d051c66fbba29675b80ce1a85c0 d554e6018e7d867363e4e16ff2d28374cfad56286f55eff0565e88dc664b fe9cdbfa56c3f1bf3c9c5964c263cc424083c2ba9b156b42d57727d38b9e e253f394799eb0b6131c9b33b64d03335e47f840ac8e010df12ee5527868 a7c2efde5c0045103f679283368a8e087d65343c1ff813deee96caf63c64 2a6d809762988b7fb0d562873ce9a895ce09176169c9609a0ed03d26286f 7903964c68670049c49239f66efd8348286bd80921cbc265d3989fbe9a33 e198ce32c67c7d4953533936dbe80447b96dd4806b82d7a7230eca49be99 9553f466bd6c614c825c09cb102d90fe5c1f44a95aaa1aac3d58d35c78e5 6413ad9ae2a14088f53936ccd0aa1a8246e9623f5a4c4f9bb889b638e830 91b9af073d79eca99b9e7aebdac87d5e257f6f8becc0218b8cdc43908881 77eb238bd7fd03fc4088d29e93cab213783b10c51796a81fe35c1378cb2a ac0a35626f2d51e3ddb9b667020da8c06c7f04d82ba5229e9f8d23bdebe6 6c32c0031d85e2d389f1d6911b9980753d53b57a7eb72dd294f358f143b7 ce2c21fa326544cd578549e98b8ec1593680bc7614cc2b24fb20f747ec99 431d5c18853b62933e9fbaea57b98eaf000bd67c58ce5d1ea6030199a43e 86c40160d24f6a30d45a26ffb30906a9a80e2fa23f0ece4cb63e3b1aa994 cf6989335baf6cbde381bebd59b2eb6a5645a2e57e888b0ea25f1c8e9244 bd025300ca6a5f061a92c0adc7d600b4e9ddcf977e8349216d7ed3cf8829 1f5ad17178660b24bd15524b8c07324d3948c86d75ea73016051bab50695 53772c14a1c9b23cd4344cdffb8dce1eaa78a914642ce92f0599d84766eb 920f1e59e6493137432982610c84d1266cc16b0c89992fde8af2f8704c42 d68e19133fa9c52909e9916a37ffee3370986f43c9bb29dbf59dab200796 f761b2b96799e498be1b868f6dd4dd2ef3a294fec707da55ce59dcae5da7 84adff55fdde7e23d1fdc41f735302467e7432c0324589bdca1d9e542128 462077ea545a09ec2d2cc554d00d778fa29cc27e8b76be4b74764a1db73d 829f39f0530ee032753b798d3d6c57e5e890e4792a4c7d434f84fa29d39a 220c6891366bf614127f4070d340212b5f15ffa1149c013fb8ce17c26968 cc2b334a24c8ff24c039b361981b159b4cc8ea4a3a7a749bf19ae3303d37 3f556c4df6ba6dae50adee28a7c5fa164ab93922f87589c418018de954bc 271a436ae7a3d8f880205018f84ca0e3471d3ad7c81b19611542e3447d0c 01a3f0b7fa898e2a350aa83a742eaa6de233ca76d98e5dea2a459a6db1ea d8d20c9398468b50fda35d25eb7c10aefcce293afb8be2da3febc5f6fa8e 00b394c4a78d69fe430b4f77f6e12dab21a191239de0d2663543599e6bdb 3394d58bd0601d88794f76a13e9cea57cffcce19c4144299d7512a7b7c52 4320935a2749f3e99aa5ed2babf6b1cfd983367f6232d6e7e869eff12b7d 83fb2a063f206846d05e0fbff9c08946b743ff90db52140563dd926433dc acc3f89aa9ab1f8c02d075d15c8ee1c7c937ed823785717f50fdf72519cb 9087c586efff08ebb1614b1738d2931596586da4c50cb78d6d0ac81f7e09 d40b5adf5f35c3e1da7615b8e4e8e5d71a6c865c0c36c835c61b04948e96 4260ff7862337bb4a27507330d1ee9c645c55f487297842fa29e8b6e526a d0bd01c8472120c29e4cae19ab0543516933bf150915e240fbb97283dd1c 58bc51e25fdede6046f537d552ecf17ad28bf4840a60fc3aee18c58deefb 2c01fcf627a37b62963347c55561a99d091a221e50816b3a7a0fbabddce0 16a2762576ff8a282a582281ae0669581a8d9dd34b2543083b82a86cb1b2 c7c6b728d63adc82e72cab878771c1d3884757baf66b800730a6c31c3b10 91c119579973c5be07b44fc10f432ac7b3da94ffd121e0f2d694cddbd180 6729103be8cabcce3610ffcf9a11773d6369a809943495232239a41b8aa6 2b02f0ead43486b031500491f30e22fe022c6fa05ef2c9b12e14d708770f be139b8d833a91aa486c5149c6feb164479a6e3cf95b8ea0ddcc170537f4 a6cdaa6b7994ff8b02dc9230eae11a873fb83cb5155926a235ff815b2e65 cca3ac1dc42acdd2da7e5d9ede4393ae01e2ca7e70a2264e7273b19f90c1 35656feef5841e7bb2b96d8ac44ec9ed5c3c116ce0008cc1e4996c8de2bc a3773f721a059ec9fb77c653aeb664fd9f046dc0fa212109c84b3b96a7f4 cf592c1b423c3c47990e46f701da0d5c1ac08ad31e967c66da9dcf4060db 7f42f3392e8bd574bb806bbbcf8d5215948a21ae0b0f848cbbbc8219e7cb 1ff081157a1a2bac97037753b55b9d22f52a73cf08db9d76a6d5ac89d5f8 86d469969689808c43694df7f301446fe76dab8d82c2f1ccd16c95b1cbef c74d1f61d788da67a36f2b9caf854f6451f4510190e17b8e93c925882e1a cc320be35fedfb7df4d60ea6bb57a6aec21df02d3cb84eb682423f19d4e7 5cb6d14f6b7fe085957ff284a0160b54b4896ff72318cbf7066be5fef5ee fe592d3df6c35e659ad0bd23127b6655813cd9b192e6a175054554dccc17 e06dd399993ae71548fc7703ad5e1b48224a5bdee9982c8bb9062db0bcd2 3725539802a33cc0ef8857232d47c508cfebeb79f7364b9c72a72eb34e64 1c8a30c3eeb48883dea2e86bbb34287229a38b219518277358f6f1369a01 e81fd310b6b32728366885ce0e4ee300a81dcb4b6ee61e755ec4de251128 8bc78a1a871f207bd050a88c0be636cdde883e1c65c10ca1056fca6b024b 333b5fb8d52b696fcf87a2314f0e08725405cd5775c44cc38de93961400e 81fd58b625f74881e8eadc3331f9169c11dc2b5601ff0f910af540ca50fb c944a09d573bb077085030d11df2acd5c1ae26d43533a0e1a0cb254fafbc a0141d7401a82d061496d532373545e9114c34130343a3ce7ea3fc3be002 73fe2eebe02c3582a907faee623740c60066f120a19501b50abce1248bf2 de59cc296bd8d69ae3528afebb0ef6ac70476af6698a0ebda881a87c5a28 6e7db1a4e3c4822e54627c51837aab6597eccc6f28477c6673e5cf363da2 801d53038f01fb10b7e5b883e4f7581f4ace47308a38a6aa253a1daee569 e80300871777b84cf33abae7c48d9192b35293c006e4c1c85d7de37ef807 4198f69ba4c469af48e5dd5e53efae47c03e9855a1c217543b10ee5e4751 fc9db00b236b1571fc00a0f712cb21216227c29168423398e4838f750169 1c0425a75bafa3d91d32d0f6b7bb9851bdd33d81776161f6ebc362f23f07 8c374d841603eee95efd0d2057070eae2c42dd73fd78e9be697d2b09bba8 37d023b8bb94f6bf8b89eec8914b82223ef74de949d5e3e05259a790ff23 ee7475ce269618c7271bb6665897a40641d1e0db93bd6a2d87ecdd4ce2fa 17e50f2bff7b14621181fb2b863bd5db3a9b393aac1a7ed69599b1d6361c d44711e8a2baf10e769cc1d87f7ed3bc54d3422f3bc9ae9a569a91bc4999 82b2ced2d684e7cc791763e4c874fb6f236e0c5f214c4544b125ba554330 4d4ff7b3fa2fbc3002c4e830fcd9ab56e4f3c7b86172c6ff2e7b9ea18c63 b982ba8c116fe3911509571033f59828d93826135d88d8ab7374e485e982 712ce5dc8863350a7d9df467d206bb28d5facff28d07a8a760f17cfb624c 4890bbf7713bc48a590bf0441a6ee528fb05827cc29c0067f546f1e2fe21 e1d9808f0283897aaef7baebae81cea9f5c758f00010860d4b3b6d10c444 3f982dd457633497dacbd5b2a340af256097cd0244fb36dd8cdfa3ac8686 444b80df7686469bf6b7bdac7616aa5ea70736e0b3c29dbe7626e9c178fa 9defa253d25d952f089c062d236c234e5c574ef19b202a8ab4a5408c59ad 677c48d6c8b411d720d465f14fa6af25bb2cc285099f5e04bbcfceff01b4 7fa33e4b381c313f8070a04e2d57e2c10e93c3b20aed7b6c00b865239494 3256926be520871a1bc8e02831a00fa1906778ab6a0df77b0e73180a2898 5c43316119d1e4bd658e9e6d14857eb1833dd2973b3e7d444f22ec893280 80545bb70eafdd4ae29c4f140c15de910c220c988d3e79e9131d09e1142e 3d68963088d2b9ca05d6dc2a1922d8173516d88041728dba5fa4d314adf8 fc1a80e1b880443dac8bacd565cfaa2dc1ca4e418044653b71043401f07e d21093c7ca2136c751f263fc796618fd8e65c94fe07b3b4f4d89c6047702 2d3d72fdd88b9e2ba9b5cadb4ae5b584c3114bbeb2d0024533e5e5b37d81 d7c005e85218cfe4951630f3d0a081394b36926b9394ba5b793745324e51 4e2f69e8799437fb06948da30f74d98b89ad9361f11d80a03c292eb75e33 93a7b91958fb0ff1fc327a8a58e20e03a8cd30a0690683cea5cef168caef 1b751dd2e40405a518a06b576cc3e2c0f8164ec31a627ea7f1ede02ab5a4 d5f9078d0e4c9870ae9a90e6520e496da60e8b47f8f3732ddfe80b8fe37c ffdb983e406a9974f9d6665df51600b12654ccece1dba54ed08abdfbec2d 8223e07560739d0d69ba289cefc536897a421e6807121cef8288b08cb6e2 540aa9ab42f1bfeed8818007d0def589c611801af7870ca5859abb505e06 d459597cd2bb4efca685619babf32a44be6c9cea1a1e5905df12294e398c 6b5837989facb5b4342187ab66190c8a20ff12c756bfa2bf406038082485 12b5e323bb96fd229dc5a5a2478c46f1d5abf8ad76b3eab49c6a630e8d4a 28eb62e3a0be2923622bbdc3dedd3bbe06422d1c075d84eda2d6efa41bae 1ccf9644c68f85234c9ae0068e2ee5c7e7be7a86a3c4cd6bd2dfae8e52ad 43525f16591786b4a9a5c9dfc89d86deb5d3e1bff3122a9a9d9534c7bffe 16ade9929b5658ffbe10ebf66f7a3d675af55aab186ebe8911242342fbba 8f2784c780bcdbb2fadbe81b1b5cd92ff427e966ef13fc8ad166dbef1f12 8d3f370781238f98cca3424ef907eeaa42a29af535bd50428922957ae183 4db4b00be5f7b8438b8de9c65cb9fb0d893f79f39b16fbe7c6770bf64c69 886c0202b9cda7128c5b437f1b804c9fcce7c0c8aeb6c01dd793e8373d02 1e7eb810f8e90f58ff0105b424e247e17cb3a97f026600199d77fdec948f 015ce8e3f79359331463f1c9ca56f5c712204750f685b0dc0e413c7aa3be 4cc5ef8d0d2ffc827d9bb3f43c5a7ad5fab92cc5ed7360cd5de5a8340318 f9074692c5ca8f6804080575a369768b9925f28c20174628b3319fdd1b0b 15e64e99c0e2e4ca1de15fb9f8f346c0c1a7b1f47ee27ece6cd9db590b82 d0179bb53fc882928a1183cb4ce6c9ca8917bf0fc2f568d07b197e34374b 9e6a6d1eea556a6781fe01ffbcb72298b315b27b33df918034f68be233b7 f86d3f091a16c736af476611546e48ce2c9768b4d1d8d038e58367563236 7f2fb750d7292bc0a8a2db8a280895b210026524cc72d98306545326bd45 a708b13750be16764d34ef8e172d8f27dceda2c2f7feb7cf9b50332ecec5 8537bdd91ba70e841159d9274761b172c88e90075d29052cc2b9f39a939c b0faefb13425ac0870f0301f9e2ad7de528e348c12ec7b87024bb6b520b3 555d79b2ca8de435be52e62e8d85ecc8010fbcea6c07d6eb48aa047321fd 752abebc9cba15c659d2f7fd547942d1fd7c01099befe9127d1198919d96 5789d3ff680667a0b027611cb7844ea467c145baf2d4c3df8a9def531d7b 82e3103af9fa6fa1d20588f9871ddb5b411d71a7896ec660696f5fe75cdf cc352597ca7fc7bf5fe938a576c7b3c7486e7a1e8810dddf15f7df8eb817 8210c451c8da6bd3750f4f16838f5d713c6c0742f973919865887d4ef8aa 7a7bff6359fa8b6b435817d5b9ad01d47fb807ed92f7b53671521b130684 c5e4598ce5b2819dfc9112fa7ad656511eb5d37bd493d22b9d54c87492d3 e9831ecb8c5c86a680dd31136cb06ad056b401a066c78af73768d4c8dd1f 0c00d81ca62dad220eec4cdfb5409a135a5df332d0048bac9c5603eb7295 87f6f5fd5f5e0dbb77a34bdf96863db546f9372b4919d7c762dd7f902c54 889882c7504051a3e60c8415539ede342c56f0968b550039c0b7c3ceb97f d64cd0d245adda3fa0925f0185d582030f14130d4cdb8b805f532d29d19a 9ea12064cf5d8d0a80b6452b889665258b1f0dee9158b28c1b4017c1abdf 7d3512d8e5513502bc4c32e3fb7b852ebe216439cdb4efc30ada70e32847 b3ce5b6f1bc2b90809963ab1b87da13759b46aebfbce7d1c9e6db7bead3c 1fd43a0a36d70ee12ea881fbaff7ebc10a130158c65d01888024e8921cce 114095e51cf568eb9b5aaf17b17f5fa640a0c5a475dc10091c21fea96006 d6e3446842ef4addf88bbb0a55f5593d1424a27b88690b26ea51468fa1f7 3a6d0819ba12ab6f3d3e27d752b33d203d3190ee92a37dabdb444ce938bd de783f6203f032d3c18e84defa5e2414472028cd5ad2a47248baaa2a6ddb 8123dfea8c2934d5f746f72c2b19f7d2c5d1c906d0f3a85f2adff816d656 1944b8a83f414e43d2f9acb300ad75a156a687428c458b53a2240c096ea1 24fda51d58bda541051c9dd4abb43b31a7a2bd924a4095cacf697f6112ce 82e67cf096a37f3a9ffad96290105ff2ddd012005294f6fdf59d9bcfef84 85afe9279d56e00b31ef122ac115b0e998738d8e3998855bcaa50b921b65 5a28a0e15b7672373f994c54d4ecd1f946a8d7b6762187ad110637d48c63 5e3433329882c89c75b3d90e3f357944b30b03ee8488ef2d66fefeeb60d2 a400987254a683c13f81cd59ecf031a45c6e5eb8ef51a246589f67b5fcef 202970d584451a52f6090bfa42cebfccc0bbb0280d22a2e538fc8c0f4347 d39a04fab9e03aed9491111fa39934152d5aade2729173113978bf478f0d b97c453ff54caa73f79b42332c48482ef493ca61d0bfb51c3efc9cd572d6 6f581eef6cc4ca013e62cea28b6edaa41f10bc7e95385810f5e8e5b0b22b 1974064d85941e257c874d50b3c4863c0b7bbb916526a7cb9a82e7105128 50384f2b0f471efc83a428bb022b49e512ceb3846c4bdc15db1a0ee0774b 790cb6222e10fa7cb72e1720f803b326f8b604c95f7a6acf028432a90489 a9d0b49375d0ac9412843b82c90a94668115161888779c310a7fb017a5ca a28a6ee990085937c5c482493b1bd3bf23d487713ec4526a68d03c1188a1 2d26f7d156f851c1c2a3d6242ea976633d8db87ca7e6ff581ae9b9edf5e6 98347490e5e287e9f23e0e6947dc87a9f70beba1dfaaa1d698f962a632d1 4f353ecde63ec25a4e45e59cb71e62181a4d6c3cec07b1fd6e37e9513431 e0a1d6b633cf2a7f8ab1278acd87c575a818a52dd4f58abba16c5f1debe1 9c1c517c645bbfe5b6c1c3d421577d3776c0b75a36b97c1e24c624006481 81956a86510200d81d5356b46a38b44b780bc54f32be1e55e284c71f2c7c 55d28d0d66253043d76e8fb12038aca093d1395e2e65dfa665ead75509d4 6d93d03c5f0a8dbdef20f2742d73b035d7db7b58e298586c1f13db816f53 011e4d59d129839679250f3f65d3645691774a1cc8e8feae0466809e34c6 29666f06a0cc997157c5c87f85e36193cdda42f17d1aece29c42c3d19ed0 63c41e4805cd4e440c8a1350dd4919338ebd56dd693f16eeafb812c83eaa 9800ad55a6939389e7f2aca8da3625271bf0b537e517cec3ae1766f29e7d 1ad7fe23af7ce0b126bf34c14cfe62f8ec0d9ccd4ac86878c9d4a1c6cd5d 9119b3aeb5336398ce04893e61e8d4d9a3439320582721837745d222dd7f b5c5bc6f1f0198bfd5de6e10da63ba8b744f84c54b2cf54b3eb1976c63b3 b40c66ebb88f927e19842007e94870ba474f64899d402e67cd5ffd342545 77e1d5cb50dc2c049a2d2a5b10577283cfa90832eb0661ec3b371fe7cecf 27d57ab42de57311076c52815f42a4cc56d9b46c7df8c1eb1484e0280439 723cd9cda4809f3cef1f6a6f063579eb8f12fc324e8a3906733a92966c99 007f4597ade1e741b02cacefaefb7474d8a45057a46dabb2e6663ff03b03 80afec7f345f90541ddc7d89b8266d1d527656f266f02f3b6703a3062f65 3d4371c06da8f85d6e6141deb6c4087b4e653fa72b2e7c5bfaed69497edb 92536d9ec9f3bf0f349208e7739cb1aca708a32a5ac7a99ba03fcb08aa60 592bc8b23d170bb3a74ccec7011e64c99d1118e53c834935ad27153d17ff 8c1f434e3ff24d0318b84918326199aacd62724b1057d91c6628ad4263a8 58a46f0a1e842e78a3167e139143fb0edacc64348402076a800363baed29 be5f0af6fe140a6ae50e487e23fee8b5ea9fa916b18f890ccaca45c9686f d4af5e668c5d102734ced7c58b0b790666153e3b54fcd9ab2b1c2b112329 3ea2df4d753d7d87be812c756a9eebfdd9a52c2ec0596b04d4993dcb8777 711e6d09a3f7d1a6e767977a8e58e4bbc1acb0344c75f7191b8b689bf195 ced6d4df1b894408f53b3641de108a760374a375d04a2acb47b78ad52656 c89e851ffdde61449ce7aca8e80a516c9594b7c1c0eb7d676bb081f5f021 681c01402f8a521f56e8c00fdfde0c61bd1942209cb9aa750e67aba1f36d cbc295036bb899205bdb733618f0317db8fe1f81ab41feab018b19db35bf b69288f19f4b09b1a2fe2d73b2928ec9c1c530dcedcb2880df1f032ececb 75eccb49f081129dedb9a655eea3e98a5fa2b437558818fbf05e9a848a3a fd4472901db17bddc4c0b3391e129e5130e3990a17e48c8ad5e1aea5bb24 e4af974054775eae52d859e4bb06985e3bed044755d011312f9f1446e4a9 91785f4e9f2bc714384c98fee7084058f9d5da4d79a0a5fdcf099887ada2 020d92495bccef6ac7370f69a9d42bafda9028bd002b71c6d0e14a141a52 73536f63af71329d877c25c4e9547e12a136c5a05d5244d146aed305a58c 412f193d9a5403a0dbe9154141461fbd5616aba81c186a2ded307ee16640 7bc33a758d0b1007da8ec3a0a6b17fa375ad799743499a61a41f9d9890e2 e6e59a8bb7b372e61301431ffc11d280f1d5735a5949447a73d7238c6fbe b042843471ea76b4a25c1674e16d1ddcd6f292934dcc74bb0300eecab1fb 92fb7491cc6488b99775c88d8fe615497c76387786ba73bf2d626d2100d5 788e8d30e54b9b9f963fa968e6933c6fb4c99f763d60a3cb94f9b1c4014a 08c28be9e7ad0f27a345d2aeb390e3715cd68ddae50695fd089f8e46e72c b886e346f1c295eac1a5d42b1a0ebbd207862ac8d979591975b9e08de4d7 8f8baa16b244337e748995a74e9dd966c86e83d916a1b38084ed80639116 90cce71c3c9c5d1293947929fe340bf1fcf06d03aa772f77be387bcccf09 22a6f9af3119de3d32ec7dd98ac689f11f50fd5275411777c84f31e52abe 56ca22e3f9e29dd56cf452e4189065e7298133304c431962e2404384cb70 707f4fc3eec63539f8e315434f2a217badb7dd759a9227a66d8aa9596479 21d2f44d78df5dddcdfcbd8fbccbfa907f25ba4f3ff84644ebc11f5e4fdb ed3003517fc60e59ce66f68236126b4aec8ff539c6ad2c669223b85d5e37 f03532158b30e33cbdb0258cdc1607ac68c41de9760c253e9ad40b28b267 417c53b0c3e27bb32c7540935db1c364746b55f9acf7ca6b9ec35ac3248d 42a8cf51a1d8f93319698b92ff717e1117f0e072605092db4700abab7ef4 89bfc35ec68ad63d95fa16b6a2f0183e5c3b5b1bddba31e60482267a5bf2 de244452fd08d7d9029c0f429e76d5c4d6c852f8ed771d8ac6bf267ff098 6c66b93fd61c810b091ca85058ad63a98e864fc24a25aaff389346be3864 4278f4bbdb0b4e21215f51ad0b1c4008d8f15b60eb2fc107883e24e4511f 9eefba9cd16dae7e45784403b7c69c60c7494dc023aa5627b1728e8195cb 1bde34f8fd21a0910464665dcaa57c827667719ed07c2340ee0fbe21f598 1380cb82d77140f7025492a7de0800cd 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Times-BoldItalic.pfa0100664000212600000240000025462607477306250016661 0ustar mikeuser%!PS-AdobeFont-1.0: Times-BoldItalic 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Times Roman Bold Italic) readonly def /FamilyName (Times Roman) readonly def /Weight (Bold) readonly def /ItalicAngle -15.3 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Times-BoldItalic def /PaintType 0 def /WMode 0 def /FontBBox {-200 -324 996 964} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020939 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6dbb5088bae0aa68aba1c98a9e50a32963d64af5f6c5262fafa9f6df46 46b95a1fcee4b9180d3e6f5e8dd941eb8a39be76841358f4206639263747 bc7e32917a05a0159f0d3caac96efea031fed7d2a107cba18e10585affdc 28afbf20e0611993d512df24aa3a030c15f33b3a3c7368570928fe9851a0 438ca25aa546ac198d73ecc2e37ecafd8520917c7c45b85ec67cd4c21e8f f5109d6ab77b0b7889eacb8723fc2502afe684e99e183faa14ed68cca6d0 2eeb4e48a310de6f88efb458168bbae3ed2f04c97caeb2c032cb2bf29be9 1f84f2bfaaf89b7b565192455c3fa175596576c9ec359ab917dc5bdeb655 dbb92b334036c443797dda7c4119232573f2d94529b20ecc64586bdfdbc7 5bb451b0e6e7624163d33db9e44e466399efc6b505d7d276ef7bd5af25a5 c87f116d3a2dd56b49bcf3cf6e8c2522b963363594e5aa16eba6002e51cd affe4ceb202cabe200d99d5c62621eaf81cfea33adcd482426f9eb5d8492 65b1b35b002ab9b048db42f320ca76b9051f1d3349399d2f1843e443b83e 3344e900ddd8bcd4af91d206eec3af49c02fd0dc436aafdbde33b96ef24f 7aaae7d92d1b8a47396bb0e13045fd5360dbd9bc95226d2a092625be017b b408c87fb163326e341814a27a798168a7be3e043875291745222b15ad19 fb2dc1cbee769ea8d22fe806cc06174fa482353ae453e79a61d2de96a2e6 f3691e73261b46d330d0ba7848129e8ea2f8c2c9e2d2fda603d82044920b e6f52769f8c5f34063cc77dd8a5398e280077ac39ab6351890416b38feb9 507b8e267d3540f1cee9b495fbfbd947baaf8f930005ddd2543f9654185b 9f4e3bf3c57d8178638bc43df70757d71bc30e829ece6c0f954272e80267 fb09dc852b4c19c036e3b3e099792891a3d685df4b476728e2a49d57d3c7 3629da99031ee0d51379ea63922430601290c694b8640631b9e87d607d07 c778be25810fe125b5476b96b01ddb30de8db74e903dd23479a3581bc1b9 30db9a6a39db65e5e88f357465de0c3c995e7b4f96bf99ba99a20c3f1f5e d1877ef97546971ebe827c4a232cc20b2622e855369903061ac7fa6f07f6 3d81f2a942b31cfdcd5113471f069cea40bf25f7319d2d498047066ef0af b220fe1b14f8f48761f29435c7425b7684d450d5a58c5f62cc294457e880 549b057ea29542ef514dfaf36d6d520c012669610e996185bc11f2378160 c9c3fda54f7270b70b7f694482bc0a5511768b4a2ef7c92f8403980b6ba3 6d13ddaac0213092b9fbf1d9403ecc072c1812f284dd1b240596246b514b 0e2adb99f2a0cdc311119fd650aafd811949d87232c0bace9ba5854a34c4 67095b7bd8811bf36116e847a1cf8bf9cff966d27f7f80b09e9e6a19fdf7 19b2ec3fb764ef4142e5cbb9216f4f3a0f0b9e49d3d70cd83c74e62bb9ac 97f0f688cfd92119d251d8b5684eb1ed3941d660705c7573cd81f021313a f24378365a722d2747ca27a1fa8f9014ea3308f9608f46ae9bc294d1647d 5fd38e5f0fed6c52831b1bdfdc6bd0fae29857a410d4bddda03a186218c7 cd9533db03ddff8daacbc824815820a6a2c9c88ceb74a7e91ee7536c29dd 87a1c7481fed1441315d76042ee90b6808e241bf1c65156f655e24cfba3c 38244c89abad9672a14e50d6aac461ac1b5a71c555012dd01af647089ace 5987704f3ef38f0d3f11ab1fec4cb2013f6dd69ab3eef8e7edc376ceb157 765baf324e0c21a10bafcf511263b3a76aeebcd5496a1177a2269ae20bf9 e7329fe6b541f50ec43bec286f639c979c0625e00d3221c7853767ba0fe2 4d41d94166ad674fdf61ee8bf523d5911ba998ef4f4894f6bfed08a0aad2 8bce3f83611e060f031a5249e552449f2952e87ed8551da9bb94726c903a 4149a98701f91abc98a3506a10ac2a582f0ae9a881ff0ec66e12e659f19e bf70573f49025b34d0689cbced68482e5238db8929f2e389124ab038ced3 abe2627efe2c9b084e0a28f516f40fa87d2d2425bf187a9200c9da440f8f 4df036115e9069f2def33f946990605c4341ffde6184f2a747cbbe4d5a8c 16337714b4f3e1b1158fd2588bbe14b4e9319cf8bca7558bc395c3bd9c0e cd3ec75326188e2d3d8c4468095eed5449c6319fdd0a2be7a0ef5db31684 836fb6c6fa45f9c185e373b326b25b14a69631499fb05bb370016606b0b4 70642e3f575f4cd1c5c643cd44cac8861f608745ebc139c295ec4d115442 6f74b2d05be675b1d22f687066170f5eff326a166361313dc446fbe30a1e 10a0c22d4aaeb3b1ff93b1b4cd0a062050d19479b82b287839b5bae11366 0222b437da2f497795a38db9212a53bf4569ab2eadf1d4927fdb4555d14d f67e4354e3f1d72d6e862094cf205071a4382c3dce4ca5157ba122c98ad3 330cf3978e53a378f4ddaab49c3d0aeac847467858898ad57026224c450a ce9fd11005efb2cf4ab0bcc43ca687b89f31bf698063ad87a5eb5ba0431c 918a87184cd482a3c57d2f48c657b87b462d00792647c9db8e4802c8e6a9 2fe4e3cdbc99204aa6ad139b396f73a448ff4b8f7f2af04c651ecc6e1213 9fe30a904567ff408b7f3b150526a08ae5c666f6e0c4e2abc8b9937aacfb d4700551f49489083d111411861570428746a8723489331ad686244f3318 e015aa68590c329864cfd49c74fc5145f6afe48d10d190d41eeed2981899 dd3d83ee44e8532b2cd412e9668d8fbb6fb74cebcffd035a619c12b3536e ce5fdf1d750b1c4150aece1b6398f6ea9b2451db44bc63c5e50ce44bc0a9 1c3fe63c62d6a7327ab24fa1c9ed9184a42c3bffe5ce955989ee4009eba2 f1d9f013833dc34d8a7b132034872c862de85597b0056d4663ba03589ebf 0671e17644832137dc03414d853303b562d7a696f490521899fa4bcc9e87 8cd4c688a5c5310e07fcda1c34e03d3ed0ba2418f5db9aae5419e0b43fc3 0958490d3b5122494d7858e133a6f52206f1f120e6af97ba9992507c0371 d1d672eb3b04b950684b4e874ee1812b3f153e00a8bffcd8b593349b4fb4 bb20955446b4b41128a67d51032c05e7d42514c9df2974f9fe454c48dcab 35b8b99e487a77deaa73c1340abf1b79651f4da7bb92ee841f5a92eaceb4 b5ba258462b2faeae8ed2e276722d8a58dddab8de963de76186e765c9d82 a6201e560c81824c8bca1cc9d9062db958393c3bdc7b14a065935924aee2 5c8543ed829185d01fad61710a45917668b2fd8a7f8e0330e1eefa8d4ee7 b2773399c0f1656e87270fe7f7100f88c94f6a89b894978be0e185ebe9c1 0a99b98734870fba6b2e381b24bb71a3f8c1f135b2ed07179b76c3d9bcda c1b8584e423809ad7c1119068cbb7dfc8df26da8fd26d9bf3d41b814b8dd e80d462ef1c5cf5fafb1f1288ee3b359ed8579b250dc7acfcd460aa15777 bfe79cda6681006e9f8f68a43e89131f8ea01e61e67d704ed3f1263d81ac 1d8846b3ea6de871a02aa8b940573a01d7bf4ecc9e5a312bb5977608b8b8 87b5fe6e628c44c50d00ed8881ca2657a80f1cfb288e554075f6491be959 f1418f54f04359dfa0d73c19b678da317aa3082968be52f23229a3a1a114 91a2c1679bdde7f8ec2c7c2e74af02298fd6faab985a6eb0d21e2ec887ba c7a28337220fe27703602f844c4dc80e999307ead913cfb5479c16ee3eca 77ea4191bd34cef772c476a78ec1a81284e87a1895d25d1dd3275167ced1 e3809379fad31899539796d233de4656e4ccc15e0444d2e867a3f9ef95aa 52d5be939c20f6a8a812c1cc027c87e8747ecc95bf73eabf9d402949efcb 50d3180e756c6d42c6ef8d65e85f1799bceffcb8b8ccf9504c2ec3b35dd2 ded9fc158d6d975007bf6efc3be02f926f77b91a870bab62af3da89831f0 011b4f14b0a6e50fde64083aa73dbab35fda72ee54ee7953b7f6ff8b652c b86b33d062126a29f16e312a04bbd5973a50e36c6320400695136e05a366 6b921b42cdebba1ba43e0a213a911586d40d195049bcda709659723cfec3 b1fe5a314c5927bf5ca1c21bb3ec84cd5ad79f6ac2e3231296f67b8d9393 6cdfb4f35f7d6497774b504a9aa17da93a0a9efd69bc5cd82a0374d8d91c 1b692431a2d2d22440a4d7da345aef9160f2dde9e05d99ca68ea46e59f6b a4bc4cfa3ef92d8d230f092df6f457c42d07a5f9fe229bec74fb2a3b05a9 7fe2c494344023773431052171f987fa7abf7cec836beba659eb47502f4f c0ee38d2a8bb08460e1cb433f4d93ef7ae65766cdcc3e2343f1841a4d7df bd5b99978515bd2b3aacc6d42124e41264307d9b341494bdec0be6de1ff8 68b9be7762de9cded15e9f2f8a3a0d596f4e1d93e070e9ab2c3cf601b945 2fd36411cf2863b14beef69a6e99106f1577a93e12c0617bcf81f53f8cf6 f267b357151ece86049f80703f86d95ac0c8d25588f1689224de351f4809 e811e0ca2e52a0eb2b3c3be687635f20d1bbbaff41ce8d066223b055918f e876ec97ca0624cad91d5eb88bac70d705c4d3f531d07467736df61e2b7e d60bc15b50514a2aaf3606677e9d3bf573431d0209b9263894d479af0c07 a50e5ce5214dcfa874dd8807284072431e32d324798c85e6c74604c450b3 dd6ae28deb333f6f379b3a20e10c27ffc54e11aa2548c6211cd77ffaf275 cfb1fb7fd7ff059814c123ca6247f71a2fbc94bcaf8e51b6bf90b42a6eda 9c6fe71cf6d1e942bf9f71447ef48ffa74f2544ee4055cac7b82f4a1bc26 c35af903d2c3ca995cb736cc32476a34dc2a65970b02be397859d7e9e027 87dde3149a18f99d9b67c660257e468fcde628d01c5b0e8ff5f6c8bab4e5 a2e2e6b3a1e3269ed804833421b5d3e797493f65e76e4475599e328d04db 544aeb59b33864c34e06da75aff572461e995f67cd59c596bddef0d1b041 6c66b222ada402bc0b5159683bb839a15e6c7d5f58863075ac88d9d8915f bca2edb4b5fb1029c16fe8d493436ab1a02f514c222603c8f0fe51f979dd f21400fa58ef6ce32d227a9532a0524e49a4d6c693eb34f5732f8a8f7fa2 d301b1ad95c63aec4e9a3ba942c581b6f74b4f0070a9b4f23b20305874d4 aec96704bd467d77526855fa74975d1cd5e70d0185a6119f111895943c6c e54ebe5b53299ab3ccb5b29e1345d852b6798e14cc1a2af15e3bf527e54c 4d533015571e37ce7b96efa96e1657045a61b3ae7b78a1e281fdac3782da 8eb727b1fa6899480f7f7d7932256bfe41fbda11b55a76f99e8e87eaef22 d1e6f506eee60f663d5d3d317cdc741654704a4035ac805daaf80be4d955 78b4c5a9bae0e537653bdab16ba039e2424373157f32509a39c1207832b7 07a236c7a4e1cfcfc4674dc58ca6ace17a6881b9433c1c1fdf3da43b1bb0 f0c2a99bcdd4822c3a2fc4e97ed6c8d5bae6b4850839ba86f876fbe909cd bb834a35bdd8ad500441d9cbfb7beaefb3cc220e27af143ee9f596c60653 701f05f08d12dac4c7da4c8500c9a90571ad05fe0e2ea6e2fd72ecebc07e 57b5d698353161b2d12fcf47f32b55f3cc3f1a225a568f8a766c50b7f7c2 ca077d8042c157326cba68f0691ad0bcb6b0005c459e9ac76a8ea1241165 8b88a43b5cf4aa3cf428a33cf966f052f14faae731825b6b5e829a607128 98de924ca3d65214b7c2ebd1ef94022c6ce0b181e67c0ddcaf06035a4d4c 5e1a92ca7818a607f58155196580ed78145ef8d6bc4b048b874317bab8e9 4389ba38f67594c717ee522fa72bae5b3baef5e0ce1dd74f1c60015eae64 4a992b8be9af44d989bcaeccb8a343bef060b969d4438a98dee0a9f64266 106bcb763cf272310aca9d9c7d7ba141220f16facf2b3578cb6700c6ee32 25355434f327bc311d682f9a1e185dee7aff69a0c1d02469da6cebd01779 b630bb6d351fe0b61de54384a3d74612a0bf2c3dab0bf069a90d731e5dcb b866f3148ae22a3183a92ab1ad223975bd5b0561510d62f881b628ef7eda 13beea0264d39e3d03892503896926fc81cd88878a18ade069ced5693a78 83667a2e1b4816ac86cd6ac64f60ffeb3beb93b7c90420ff4b8ad0a180f0 584fbf0d451cacc594ed0f95e0b1d04f3116c29836f93edb9942b6d1c29b bc3ba6a809985606afcbdbac7ac3fa3d49b168cfcd0af00cffc96c999556 763110cfcb4dceb30903460fb833746be3f92a7e6205fce0ced173c9308f 1df5e5a0ef05cafd7da967de31957a1f5c4ebf4b84fcf61b1d8175bae49d 664f520a7e2b714e3acbbe03a602a022ad96ef70286b79e5d363ee7bc6e9 dc5257cc074c4cad8a1a210c272d26c26d4c11fe2da74d7c703959d8bb82 cb6f3ee0e32840e995cb1dc5a151ef8f92815a6bafedc399c8b306fc163a 4313c58d9f29b5b51604bec08b85c56a274b0a450c89496a7e8d07d3ebaa 99866690c88d2882eef4b698bb17ddce5fc28225b3690abfa11ace685d7d 153d09606d6bfb0a63c348b445b13b0f6c8a0d96772094f23a1e80976ce3 d3c3afad0869003ac62efce53b685672e5b5dd03439af4c5b7dc59d7a575 ffaf546f13f014ea6901356ba3acb5514c5c1c04d76866f630992c406fa0 1708d11f2931999775ff6755a8784b811ac6c56f6c96b950da83c8ca3333 62aeb0d04016345d7a1738fb69999639f3f393e433120865acc384468b2c aef1b21009974ffc614605318dbb427c5c96e7ad2234ea5a9bb4105200bb aa3695aedc0b64e64739e74d1ee55df5bbd8d6b0fde9eef2539f751dc7c3 2d14573175702f4eaa7e090095b38e12aadef8f3e3da250b8b02835e7485 97cd52979cd36d762418912bb9f84ddcb38a0777598c7dd62413949fa31f 846507cff5d5fdeb26ace31dc708628dfc22f7cc279907e39b68aa616f4a 90552aabda55ce5511a8404da1cde9c48dfc3ca9b953ca37669b3eb67459 c199b0cef0d9792c597dfd48cef6189f1181192cc4db326fc1900c105151 6f3f031c9bba5bd661830684de5ad2d072a940aaf926e44349d25f46b152 2eda7d735014536d8399b6ec98caafb7993ba7795d34cfc528a6e3a14f8b 5a74400e175c7ec3ec3de7c0ba866518648aa5eaaaa78e62ba4676860d0f dfc756b5785e1c8e4eae001303c0a8ac17241b259d199346b2d3460e6568 c6e7319c47f245d19d7215448a7d2f2202ac68605cbd9998240df6cf1849 e6b996db2bbaef9759936d34eccf14ee2ff0443b0465c38b8834994227fd 7bc1fd3b3780d69b4adf316b992fa73cfb8f58d5b391a5d2df077c527b61 5d77b4e31498cac8bb6191044046fcce22e495799ce1ce32e5c6c043c47c eb610e9cfbe48ad184022d4b08012fafe960d2f889018aa4c91353576501 5916bfed2fb82c3c3532bd5cace10e8fae8a2967490d8eda73fa30e2f19d dc0167ffe4e012c7b19f1b1be554d35109aee96d3dc32de5f77abe35b2d6 75483bc68ab11ec6790da9a6456a252c4a6838006a3c116a184d3fbd05af d18df56f31b4379f3d8b41768aa815396c31aa47f84dae7e4ac9c4011550 a86e0afa01afb021904119b2bd4ca9de59f0833e91d0f8cf89f452cf17d3 3124317757ca210893d4ea7e93a251d30daf7877f9b2740c269e844fff85 f2131a87c59ba47e5c785f011e8d201c6b53f3189e89ab216e3756509346 128ebaaf089392bcbeb9829b34188b59cc2ab21f204778226d706c54ab61 4798bcfcd4eebbf072c00ba2fa7d3a21262641294038363bc01a8f689695 9edb9aadd846e13afbf52b8d31b1ce37f50a741a58c2e3781c06c014f2d2 d9a39e59bf2a65a354c0dc142427ef0435febb0eb380b176600c94fecf40 50149725eee83b0da1dfe87ccf5fa0c948b9023bead04cf20af491ce10c5 653f5712663cec67179a9728a5c7ae19c3d10909c21e85600dcb7be31838 f1abf883222a8596b5b29511cfdb4804de8bc8db0185939fc0d4d4655bbb 21caea44ea8828fb7dca1520147293dd611f3ce69bca28f84b07e1bd82fc 0a1236de7d6037eadcdf7db54f670b84052e9f9489831f056f8239952812 ef76f52b28a204109148f6d2fe27e75213e3b96ce288c5b2486d61bed35c 2a95b64d0c20ba59432e00a1f74563faf831b150e96eebab82c0fb4ef007 ebb868daf4ebb2818e2c0c8982cf88a517fe6f9c5499d8652795e1e684cd 9c7f7376ff473c5487dcb050f5c4cc5ecd0413f9a5fbc82b059538c1f908 7e6fc61edfe9d2516f54f9b1cd78f24ab76ffe8e34b60e52dd1c85174e44 59a37bc7bc424822026f829f0724db6a11a79be3e5f8e7d70fbd3f9cf91f 9d1f6cb00c9d4bdb9dd6f10c49706e459cd8fb6e5842aadaddb6097995a0 50f5067ac435a21c85eaa399b95831dcc57f755f72df783c5332685ac437 e3ea626fa43c4655e7a10dd9c3195a4932fd665c0ca1954f5a24c6a22a11 5362a59d535b543bc7d882a7d9dbae40c0c90ed97227d7937d767422a85d 9c7b24118376cf969be68daeb153cb7a8515d5d09dd107f682d9dc59d342 ab2009f06b678ee10a09e39b25d0c34420991f3b1f900ab338c1d9fd6253 04db7a01f8d0563d78c0e86ff48cdda49b50cfe1d123d7b13fa06628c398 625d50b3dbd091c7d41b0d7b1a4cf9f496aa481c8e24206437851031c10d e091babcd3e5e6ab284a1dab3bb85a731c394ebb1c858ffa6c7f46b0530c 469818a7ccc2a7333528c085084cbd7192d9f1a771d377800c44d387cb98 602286aedfb9365729bebce14eeb8e75675311b3bc90eff986855ebc2399 832b2eb217d03d9402e653aad4d0804f5438481c7c0a0100f1978e04dbf8 3e152a7105f942dc1cd1aaa32df573602fb6ae19afbd3c471f00dcd6c71a 5101a5d7c9a8dd9084a736e6f3ec679e1c63e82438f720a509101d0163dc 13086b9815b1826b266ba638f8c68c4af0ab3852919a194b12e82ddc0bc6 2667e92a27b7f38fa45b8809b4dd9dac22a845dd964eea06b2327b5dc9ca 9b9fe3b884bf80addc075445138b798cb89395e7e88750be13e676691b0e 2c17f33eeafebed8278da20c8bc5df0d4cb2b54a4ec5ecfebd5ffc8d9d95 fbb46a1b4bb573801d786504653919c927c312b266ffe0ac6a3370ecf390 3ad1d410f6b457c96532cfacaebb9470f1b0af793af5a6be91177da620a3 b1458ea90d6842a2147da3d57fbb153f6538042784a035cbc17a0e076daf 98e3d4fc1443a8fb01545ac0b54da62032499b6f71c62f10c9da9f386fcf ceade669d0b8d1af02e0dd56b7724dca7bb1a05c63d87b3d0319c4cda678 d624e404d15dc69e6050cb19da8fdfeabb3d9642b216878a539376c546f6 29608a38b98066d482f9153a1cf9f09fd921c45dbe46077708ceb1cbd2c8 5d08348f6a3a2c8768cc3af9a0c1d6bd6b267dbf19b026750cfb8ad196ab d39ff295ba6e0847b026921c86098b1dba71e1cd6cf25bde9e44e59ea03a b6934e9a4e61102effc01c73c28d704e326b7254ba0f3b361d081512ebbf 896d8d149bc0ab88d400a9a7cd1e7b799ec63b8fd94ff5507f935cefe1de 64b58701f3dc345326b366c1272fbdeaf27c46f87abea06e1752d09d0eba 4343f18ce2e4842a213abf3fd144c3855f03fb9022945f2b09902afe1351 d4bf5f7f13e4900620fed62cfe37a2df1c5eed06067f01a2207230805977 3194ce207c0d5e50634a4bf71d0eb3d91cd2e9cb17614d0a1ae919babd5b 5835c0a8e0a51abf7d6cedb8b5d34050c0c994d2fa8f4ec80eba60b53cae ce14a5cb22c8665ba4656c87bac12d1d9c92a2758e3d836af415cd15167d 226ec0c1e39269ec07168a48469c15c96ee4800bc0d4c634d6b8f9070944 0ce0357adee5988cef57c9b93c575c363fae254c73a806318fe113c2fee0 be1370a1f1a0fa9d56c43517e133208d707d3760f03b232567a7b4f7b016 4faf03accd147ff9d021efdfb71c0364e8637f9cc5c2a27c339f3d048374 cdad6c3c935e56c0717392c38e714a5389d7449a56cc7cdc43c756a23824 ebdf1a7b6417060f6439e9cca612b4de2e30874557ceea8ef20c2720a26b b671ac6d925e5d040c555b0bdf365b59a6715fad45dd00f6b1816d65fd67 293bc5e9fb34e483c46fcab70c61fda3d8c8515d5faa2e5b50ac727a8a8a 847b6d86f6651bf9499d69f1be48daabef39849c3d457cf3f74d107a733f 4526920a0d1398d6c5334add54923003211a0f39767226febb6f6ebd4d32 82f62fe4d0e64fd16520e3e467c5a02e688f4779285fa444f1b6a11a2b99 5cff0b3ce94aef84057fac50c252b485d193903bb4359029e4eba8e4670a cd9c429087212e70f0576438cb5a376e555e91177cd50a2d6801f5efa651 94687a16e20092782517e0f9cbb56b785c2323cfb528cf15b8b7ef9cd064 ed724dbc1069c9c32931e72cd6aa4287bd3e8d4506c98335ab3d2ee3b1d9 16e9ebf6f668003e3196a1b01f68fb0f2da61764cf5e131ce6938f44572a dce969585b790bd378ff21e57359ad72a5b7835d5a5829385fe5b1dffe7f 54afa3f8683814823cb35b4ca32862350cbc515b62727d0099c166d1f23b e1c2a88f617db461c1a2469824dff97f4576d8d1dc16e3129ec1bd137e3a 872753ccdb3c2efe27e940920f7eb24ec803c99c0cb1da7f1843186bde80 323de5e45654c8272c940f443031771cab8413d12661ba6b9fcfc996caa0 bed017d96daa87806581229a37468af3690085d9860088e2cfa1f7634d7e d6f11ae685f193917168c263e497aa58ecf0d7a456c2383e7a1815ab4f43 972ff9574666b301feec1c2e5d4b2cbafd43edbb75ad763f03f97849e00b 52fbd4f15ca338024ff81e95cf9ae82f636510aa13f753d10e1d5d11bd5a 31df11d90bb96813e9063b238cd649793f15aa6d75b75ad02dc3b506c4f3 9a27cc83525adf39385a224e1e736333759c4a3969d0fc9e413dffed3ee1 e7216d98df1c6e67c042209940f8b786fe09a92276d9ce14d2c65c3e39a7 fdb718319b111f0513a860ee8e3403f751163593c05f3f8b0dc4ee7fa4fe 6b27f185ed655644ffa2aa91b436a7467c32d1632b0b2b0ab15a872f6819 a3f89d792da8aa542cf7599061c8b3d69a6dda20e104b0800c18b1d27224 9e588415416f03d78b525b256291c90bee28e06d063b65b26a95c303f864 e7299c1f51ba84eb4aafd128e4877a544a146adea4a2304347ce9c90ef6c 927b65657faccadf78b148d3270dd6648fe01022a68ab171815a8df0cfd5 43413b7671074f78e59a64d799517209b34c9c141dd85131f164a94f846b 4d4613c61f0de31f28bddb7684f92a4b74262d7729d166c999f2a0c76c4d fc4334632b6929d06f08595bfb45fe60751f8fc5dee3f331785361473b2e 005097e61d792603d95e7cb7d566ed89249efdcbcbb7211c9a36b98799c9 2a119de1968b67b9beb86d821b4e162ad6b781d2c10e5d4a3ee0cbfc5ac3 7ea614c9b79c0e9fe98246ee4f8799d35d535912bf92560bfbc47833d608 5f407c13a308c0c5bc5674ab7919c27abdf45c9b464b9da1d991931cd995 ea948fb4950b66be5c47e19b535f7ec419f14a2550121894b9d280c4f1ff b2fb1aca6cc39139b2030e8f48c22e28f53e04abb31c0a3a72748d798c5a 8ec6acf106117a0bee9a4ce185cd300b44e19bc25c3796ebcc83564e66e5 57a3bfac4dd9aad725dfeb6325578b3b1a857c70986fd4e2702cc3434e69 81d3cc15cf1889114efbce2bba0621c7ac7478991e86881e0e834fe0a951 551c7b59de6ecf14016e49684418493c3e027a0a02c934709c64b6264235 f1f6b38dc3f22f5ba2b9ca7f93d0f5a4d321f59f7b19cf2d0d26a7deda6f e033e905fa7999b5d756a60e6273708525360ec912b9df1dccfa2c45b210 9c47a1bba82f0a25f42ab9eb8a06f585e3fd126f8ee2a55f361bff5e6da4 dd836030f60fe243ce6378a20ce9dae2de2d6366ec7dbd412702eee11d94 053c8a1976450fdae131afb818cf6eb6719fc2d7c8d25588f1689221b3aa c1ce3d7d9ec4b765bd8cbd4de866ec7d925d3c5ce13aff9e14526b19e4ec 1554228213fbe0ac14d1c5ca1feecfeac23257beab9b222bf96ba398672b d99c91405f87e8d60974bef5c8743351dc6698bbecd9ce51b2c79a29f579 c8005984e598c9c34e74ddf7a6a7280f6688da93e576a15779d5e0207905 34d6b02078918c665673c1ce114fd04f0011cb92583c2fb0134527426997 d63deef79695a5cebdeef87161de49d2cd5297bc7f3690705bfad2dc280f fcbd19901f159724def31fd5387406af5b0442385ff59b4084c5218de81a 335cea5b19c198cd43a7765e950bec166e5bdc88971dcac07c8f2e9c86cf 3adc86bd1d7323c985d44cd03bdf9d3bcb5e2e3df7b7972e0e80fd1961ae 8eea499305725e525f5352e919566a2724b6c79c59c2f18ff32de5d3b1c3 94915d68b7c66507e5a07c603969800cc374352069c9b2f82fc8813512a0 4d4aaecc4c407e1dace3eb09aca94cb2a7fb9a199be31002111487962e6a 400787ca943b67265cc791bd94c957dfeb1a87a7fe32f7fdcb39fb3da3ea f20fd0845307ccf1dc6d4ca34133443c01542a535058362326398fe89d82 30f746961e09ae676967cfc73af2c454efe42b59065f86dd596bb538d5f8 31d38b77816f33b60b95513e6b184e1293f5e2b60ed7977217f36c213557 5e582db27e6c1a558a20a17062aa252a603b3e95eb859ad75067dcd97129 627cdcbb1b3e2abf1e45f197d3edab16ed7a01ea4cb727f3a7dd943069b9 d6f6420d7fda0f0c074d708353321f1546df5ef9c84385ec704eb7e47d99 aece768b4a8246a5a18de65034d0ccb761ddac5f467d36a00143d8b633b5 d9a805bb877a0cdc7cad1e1d37af98748a0662b49abe0e3f7c9f4a3995ce 61372b639c08849144eeec6439d7ad08e0ecaa23f8f38b609e0b30687a22 9daac0a995104214b86e9f3f47c65d56bc06286039e75042d510070fa5e1 3993d5141e6576a6d10e7638ee0170f185d81256994028557305aaf3401b aabaa93d8f683f37e826431374cb906c7c47bc40ce5118e26d948b09ba08 e047bf014bbeaf4cba51781f64216ac0985d23498582dfd200384ec6230f 6e64611477cdccab9751fb2ba90eaa09300778ea354af4c34ac367036829 9a1732d9b557f48818dd76a3f20ef4ce623ed6b11ecd26a06103b4aae5f3 d674adac9f6eb1ff563ff47aeb55e074e02e79d6f00a3e34b0ac1ab592c6 3b205a57438f46929a1709c8ada33d971ad09bb340dadab077724f20b3a9 42a45c17941ebddba2af88984c142f25116869fcba7e405259e681af60d6 070ed54b7752319b9c8daa85e8a9b16604e56f26766abc2bafe77be26d4e 3a5d9b158c28d91a506fd7a795869bb9091ef2709fc659e171b0bc0e1c62 f813ea22aa11a489b87ab5ad63dc39f4e5c494f780ee4b8b1106d9e42e1b d39884b6278cac3a9319c5612f3dbf84743d8671a20a003c46a7c5c1b69a ac2294a0a9f2b62b6923d571ef958527cc1d7fe6cde591b06b03f31716e0 a60e4c6b11ee779eb9d278001c95f437b61f624acb308aaee24253d36c60 cbbe3d935a9a90db441fceac6dc0c39fc0d939b52249165f2b6e7741d380 1a60dd3fe13ec203e354fc2b143705ec32268b134cd3ed6683b95a2f77ec 3e049d27e77fb596a80d6eaad8616bc597141adacc7696f9ca7d43935f21 cef0917e1cc01500d424c338197642502bd861fea77636909872fb24d3ae 324faa94f2c41cf57cb356a86cecd27472ce534e0db95151759abd758517 db477b119746fb146094982ee751da35c88828f18dde3ddb4c8a7216c37f a27d3cae0f76e2193fc87971e62de87da14f9680b07ab82159c3f2bdfa43 d3b3bcd936328fedb5c7c893972c4da1b0981afe60c32a63cc082c43aa27 5dbeb3bb876a0e9001007ffa851430cbb70e2f28a1e29641c53a94c45174 04cba88bf57a4c96d212b70ad8a907dfe8a447843e0f26ebed8d6fc80a05 e2cad6d445c50f356ff1d431ab8c25488fb707256fb5cf708380df7685e6 3f714a543cd8ff8da4018785cc4db014c7146b4a81cfdd3f55ae45367869 c2faeff9b4feeb59cafdb45d6bc44417e8cb8ed72c4d468f68cbfd7fb3f7 7b812b053ee8c58bf1775d611158d7cb16db43307e76c13ed37655f4589a 30cd3645335ea6ee0e8702604ae05dace3c825390f07d76fad7828e5e203 f3a3a84f23a2478212a432ae10e49d192707b1ba6a2f2d025f99db291992 37b98da402c40292c95e214c477558ec48370eab4e184a123a2029a6c4db f7f71098081f337716a9da7b6b91350e36d51020dbbcc762f2bc930f952b d567d56929a551b8807915ea7af15e92aa40425812c5c575d09ce2d3a970 6ba7f342ada8501b88fe9c704d8f5c5a0906a770f825e069bd75033d7bbe cdbed4082d1d829e2b4ea74b5559f4f15566ac294e18232dce1b5334de3e 7a5190bea3934ca554a39d2c5d50ca56b96a92b104d2b653b93af7686668 a2d6119f271856bb02f9481dafc1502a19e0bd113aff03aba04fbe5db5f2 bd66726a54bf05ad37cf73b3a7c85c5d1483348aaaaf5267393609ef1dc1 009c1e9d2844aaf27cd5726c968c337729bb91a865a734b112305512e2a4 60620b8ed037a7bfb7cd2400645cd0adf89a99427fba1baaa19a8dc2e5a2 a507afaea49680117e4856db7836d1d582e8806377b017d1bb234c757708 0c4f83209f1fcde1bdb9000b7868464ef04b9c18141c7f6497c55f56124c b69ed9eff9324959b46661fa891884a23f5e1906a2930b434e45d2595faa 9ec77fc8c498c1cddc41aefd449a9478c7c1a1d15b52371cc53301616a89 77415431379dad60cef748e7c0f0595b0720394286119ce3acc1c0a3fb8b 3bb425b27d2628e67dee035ef7522b4ad681e4b436bd2442e2437f7b4fe8 c528adec08de1424d24209102c7ea70a9b5a647481d3840274689a9c6e45 b13679a33a0326d7afab31d801e9168d49b60ca4a27116086893d983b781 0016138457a72c26a77c049a82a9b52cab3d5bca4f5a684b6f77868435f8 ad09dd24f6f9102551498a8d4d4438ea50fc3859c0ccd70443e22dbeec0c 5ddcbf32123012c2123c601d57f7527cfb15f906b15860828d60cc8c0c17 923c4cd6305c60c7eb703d42b4c1064dde56c76baa89895969c0737c4233 931f124f65bc5c2f712723dff34f95248127a8103fdcd079db68ca8d687a c6fe2462898732a500cb5f7cb4982a85ea9ceb5363e5feb2374ff8aacd6d 3e12e6e78669ce32a80cf0b4eb92433f3ac823513adaaf6848eeacd2b6ea 9bf913721d199f2fb6fd85c20dd3a2f5ed78363d3d0004057bf9dc3cfd2b f882e59cdf6ed7f482f67370bf0233024e1816aa39d6035d8618e3439a17 784ab2f2b4bc8684c22d57ebc7fb4f3c9ffc8023acf64f2ece90e8563121 ef4692c92e37044942e48d776a1f569dbf05a43e5d468c4ada7ca6ececbe 0e6851d907d1505553f11ab78d178b3fe8aa7d7c5cfdf2877200096ff021 40aea93fcf1a68b2e0a02f62ccb1538c5d066613880901c6608660adb158 5d75bace027759dc72692f08f06e099ab83badb2dd5547f6e56e7286503a 1805b8d45486fcf80287a984afe3ccd57ee1a51ec82d2d463013e89955be 3a47cd6e088a48922e121a9294b46fd8dfd5c6668c60e47ed88400147cd1 0bc6536c8e7f4970b162ed1921407d335c441c245dcfc3afb76a9a634a87 42972260d9a9ef2a95b7d9c42b1635560860caffe765ccc39e7a432abdb2 190122a031f02c2d7eccfb31cc4d94ea9cff6dabb363bc8dcfc86a56c56c 00907bb5c38d0ff5219546939019d7e73e4520fba7f6edede21e8bf96803 9b2b119da89fcc1ec6eb569c3df440661694c481f08f3ab5836fc4a88c47 34ad5f53c85a6c9c50e4ac3c9907bb7b68304a325677c4c96c5c07595264 eeb6635d7f143c82f4e25eda556dc2168c190506c6295069482d5560a85e fe9ff1743c357a4a202a3431e84d61ad3dfaa97577744c53b8da607fb2df 10de0e41854dccc40f4d35f1786deee5186c94bc37019e22204c0695cf9a d54d367e5f26d9fff84abe4585dea9410e54ab6409602efba2b9687ae99b 82baed3c5a6a7898904f052a50ef849274e44b17c8ca204a98b1304b2e78 47fc3b36a5ed0db07b2d44b663f1bdeb19980b5ab2819069a272f5308061 a3747afdf656f9376102742021db344544aa437424e1b323d0f6a6a38a3b 0f1e406b729e1fa36b42f208c5d43bf231c8446db9a82707fb94e4ca2fd2 a66f5107b8032471c9ed286c67e5d8b436b3a048655773ebdc0a22d39b49 d853f19ae2f535d428051342905716f28e2d508750b2db223c118181237f 2728bc8ee0cbf74ac55ae68ff87d85d03d1885d01f9f6d5155e8a6803f28 5a07873b7b225e35c4a5149d7fce46247af5e7b3e099a29ce800a7a45bfb 99eee5f6deb919387204a1e5776c1a65ce161b77fa8864bfe5d5576a1c14 5be76551d0402d5acd7a0a246b5a3706e009d9e9b8206273003c836d5df4 66a273cb4402322e1ee6c9c655715d60d96de0ca29a6baf97e6d7b2f84d5 4af1483237673cac6aaf719317f08e0405d2e32d64846399da5fc3ad0611 be905bd5978996dffae412ad5ee39ef176e3d7b780db51a7bf0aafb3f2b1 4f46c6a62f8fe85e65a7c7e70605a435cb7c19df29f51492fd6f8d26d145 a5fba9f331a24401ad839a37f9ac2cf49403c896b1072ebb93c2b00224b6 a3e02f690279f95bf7860458e675b1d22f68706617c91c27f0f4beb8b3b4 d68e0e5422997b199dfb746dbc360d926250ff7251a2a22ea0f73a2399f6 ca502604bbaa71df39d2484f7c59353cc416ddfe3bc9c6938b3690e8b306 dd6e7f7b4429b031a12efe54d294768de05a784ac9395a2547f22f494d71 e5678b7d3e34ed4ba3f4b54a8bc1841f7ea0c2f5d3512364d24c09c8b5b1 d02a8dbfeab77b617076475098fd899df43421ee9e7176e67756755aa973 221d28c8ac522b3bd5df1d7ebf6f454e4ae91213e899646004cf0e149388 742ea9f28e4c7d52fca4c1f525f0040b502175dafe7cbf0bd3f3368bf839 c4f64fd56857fe050c7d0d883d41ddbda68c9100fa5ff093aeeca4f71c93 497dc2e2fb2d734ea2527c9f05d8493432aa9ae04569d3fec846357419ff 1d1f1e3433cb3276fcb7cf60dec6be62bdcba84ef1e71ca7424d972e95b2 1cf9ea37d5e5b1810d702188f3140e955288728cc740bb8f4372ed8187dd 138be4a71d9add2f68a75ff2aa16f28bf4a6405100dcb9680cfc3430ad23 083d265f29304ce2aa48c6ad238f976039cb8c7d53881794686712c31f77 c072939cf0f5224fc7a2cc16b5aaa1aff3bf370890eb2a1db166a79ca91b cd3ed8ea008aaa9103769219cdaa19b5a234ea42977cdd220ee810e8d859 e992e6e1ce491f475fe015389c9d167f19d14320c423e3fd728e334dd54a 1a9c4c4685632eeaccba1f1b99f9278325d7ce359b6fb86d5c64f381155a cab886627a50056fd5cd0daa1bcadae27da9d55c214671499773b07863d8 0a18fc41009f866d81d9b58bd224f31fdb7f10a66af452d8b8689b0db48b f7e959e9c9df3e306a650e750bfaef43b4d46666ccfae58ce08516131348 d3d78edeadbf3c637cb2a860ff8ca96975e0b0d84337fefe2bbf4229ce78 a5dc7f718ab580d076ce9e38e0ecb73664581bc1446755e4d512c2deeac1 8c024094fb9670a21a4e3746d36b71b841e1926c5c17ae463b3ab9a5ea29 a76a625f12780ab76bf0f637790461cf71047014aaa8670f1149ed46b0c9 d97241c9a90cb9ea4dd9081b1cda98b098bc47d6a58bab0e5807602d00e7 9c4246b3d97a0c33a9f3d4d9341e980b98253b4504ff428a4922917feff5 5d83f9b150ba18e5ca0d6e7a3b874f6beec95452e12b2274742538754784 dce1f2e55fd7e5081a85a41d69b77877896941f29c292c2062a660e2240c 2361ce6d849133b20f20e3a57929e21e860d87f717b628305839d417a039 0c87b4101788d51f4f2617ec04859b50d47e97afc99d01d8806682e2c0c0 f7e5fee545ff0e75efb1378e1f161fb5112654a9f61f01ebad6ea1185ebf 546834278bc966ee0245ebdadcdb33032c1fe6c3f4e69f9c379a3d27bea6 07035946bf8cb6eb474b074199c9df32ebe0ecb26952f784c649f65ca60e bb5a4e74ccf55bc6aa713b0552780b6a91c7be84f8aae55b584c81040ad7 3656b07e5a174dc918b0eaec7d5aba0750f2a1da4f48f385f67a43bf52a9 a5d1a524c931c07fa1ba8fb8b75bfd9748d19f4fc45371a2eabe996f5e76 9f8495a638ca25032d8c64f4b84d4be3eb97f82850c6def4ad51c0d7a920 1787a91ab09882a558c4901c0dc0d75214a33d67bb3a87be474679828289 4a73c6a16a47172474e61800bf56b9d0cd1befeae26d641d49ccf989c7d7 d4acf7e56c9b3ba5a45476a488ffe45ea3e2055b63685497cb5e7db5f5e8 1ea6caeae75d77bda5bbd5b56d32b90e02d0f1725e018aa97473c3540142 a635b53962e58f75c2aeb34c51ba71cb957bd4ae7d2b0bdfea1fc99651ee 17f8fc39653b5f4373ff17b3ff9a035cef3b158697bf24e5b4f018fcd3a6 38295a8bbb41eb29655d8c91cf08eb5bbf22a1a0a802cc42cfafb7283f64 370eb8aa917c262c9217979b038df420eb6e74a936a35d7acf908662b4ff fb8eba05a1090725bedeeafd0114a7ab36734cfc404e563606a735a10f7c 7b7345560c58ad8ee472b30bd64da6c1046d61f3cdbe0be22cef4365ff70 bda2b0c6b6f355fb0f0c66ae3b206576f5002e3d6be96eaa9e1da4a910c3 e1296d4f6d3ac184bd15e25a63e54338a601445b3703480a9aff8548173c d76e1150aa0f12e6b43a7eda11e62a9d8e6729dbaae8da11fb674ceb44a2 cb216c130ac48f6c6071c85486a799efa8c8e69697d1e6eda91ecfec0ecf 0b366efb3d0c59a708b4246cfca768e04329eeab6f8beaaf192ee10c2239 dba290f604d26465a3b7c450a0302737d07cdc4021cb0e26385440ac7e51 9046217f26b1c28c62a14143d1121fd2d84ce582ed3407e1a27e08a4f2c6 ff4772e897a5000bf8d099038614e920254e52ccc997afa39beda0456e36 e9127419f274eff5fdf14b9a0429bfcf5b071b9ace7128452f7cec1d83cf 2469c3a5e5bc3ccaebc8ec2de61d1a0f3b272acb0534918fe4ce8afcf790 5013d1aad92d75a47a7ad75ed9ac62bd2ee9822eb97fbc36465ef2f60295 2d682ad077ffa8b9e944ce8d279e9331bec3789d4426a89ae62692345374 0e273c9eccdd25e0593ad9d231418feed022edcaef265c1c5128e2f8fb6d 49dfdd6cf2d80641bf613304bacc4296df19912e4906ca224b8a2489a856 980b7e36923bf251b0df7c6cd4f3b456ad83d95047dd5b70ffeae3024c97 3cf42c1ab1c537e1166724c5880eeb77f1e9bf6ba0d8d5865aa251efedb9 23d071e8844fccad3b578d900e890c4d69651ff8b44efd289b035dfebcfc b058feb56122bbe0260ad74bf1a07065b4a147795bb62e6dddb3235f5881 4028a4a52b56b34b9e54cf8f0d53efd1cb46a02f9ec1e7c1cc5bc498f3ab 1331de153dac1e779f65abd2a37c80ab3336237e0cf77abdb391e38bfd4b 616defd8dc3d3b7a66620c252c5a061a23256f4e607dca51568db058e17f d6ccce0f03c71ae55a5479af7ff8ef408200cf5311083b89c8a8cdf9c9e3 4310fa567fb2d04790f1c392349911398e0cd3c7d51fe780b8f4c24360f3 546638478d23e48a74f2c7ead1e700dddd14c1af14804c37db079d958202 1509ef63174bd1b95e1e061135ef1073bc902817ac2ebe86762f5f471630 65b2dc6c03724a2edd5fc08cf95b7c38e0879ce85d81919301dd5b026a6f 3200a315a3d612258a540b6ce0190281ba4c2e9361e72a25011e8337336c 04689d5421bc4f39b7ecf590a972178c9d0968473c019f9bf0e9b3109370 3881667342c6948ea5a01c8c77a7a58e0f25971a0566fc12ecebfebe18cc db77ee479c6e657a4d887496251b06a5fc3771991e18f305e2ffbbd811ea 2feec2dda6b06cac2c76dcde70654566bf3406d2af6de54cd5e68ea811b9 746716ddc71e1ae60d42d5573c647519457f6f7b7fc1ca0e54fb938195fc 10b4c71e24bcfed9e54eb420a3519acc52cd977e9c530b420366fe47a867 e0e844d2c35b270b43d275bfa978243c52d4e02e82e7e9cf360da1f94ddf aef4d752f97df30a4c8de80824d89f8669f2b2df69bfb61b4aa69071c35a 7b8879d56c8ce2aa33b2561867a9e967131a1997131e7dd39ef73850a080 a20db2a814c4d623b9b3204d95de13955f4e5c0a2242259972ccf3326488 dd6c0e742b8bf2ff2213dea42b81be7888d1337e8a19a30e68607942905c 3a9f19890ebb461e89a9bd2693d0403fde31bc694628c273aefe25a7edef 2ef4891d42e2784a410c9daa8024e95b2fdf7b286699b53d1377625511ed 1f9672d53431de441e0d14adb6784a28a09c820ee1f51bcbb7e00c524af2 4f94de4eae9d23684b0fe8f0f34c11c67e1ff7f83b6122331684561f9742 380ee8bf54485761163832ac896c1a93a8a35e2c7f647c732382bbaba1dc 047c6c22f572b5a709c5e2a875574d04ba6adb2845e6ee0a12b0bcf96cdb 60f3d79fbd08f54b079be7066e8cc3cee35ec55eaea8a84520679e467f85 0649f9d77f2ce1aeb5b10b151e2bf8492ff5cc97c05e2369aedc72fc004f 1af0cc5b995c7f30731e1aa668f842115ec7a093d88ed2544c2bfa618876 edcaa35a1bd01d98ab553ee25f913c074eeaebe390690e6396006797aef3 c5c8551be8b08b56c91157a2ae336f7bd39a287c0dcc7ee9b334968c051c 2b091dbe029cecb9343965f010f68823edff3975813f813610f64919674f 74b4116e805386cdcc679be19007d742d81b589611dc0a84475089a6392a d08da6e7f09c140d5145a4d83ff35f7beac56942f0234c7130e993b6ea3a 068a2cdec5653d9c26ceff6a955664bbe1c42608f69e631dba425f82c9d2 11266b4cd54a4ac6bdb276c5ea897f58494ee519f6990240aa9d2e1bd056 37f157faa4bbc818c3a87aec6ce1d640748f1c3bcd9f71b78d579369c7a0 0be7366912edee79a5fce088b86a2e87c1077a71e5c95228bae27ab49ce1 0933f392d508f2fe66da598ac9e86d52016067fd10b728e298da237a4598 26d9ccd763f5ba7632fa15889d49304f884f8a5a1831c831d6c64597e513 45ed0d907717c57a1be6da7f81c2f6952b38a63adc44869cb51198cfd8b2 345d79c24afad268bb76322586ae97019a18e3f4bee660b10fbe12f0d59f 99dd3a67c41bbfcb7158ebb0785bcdb9af44096c36ef9396fa30206fd26b ef5ca20f3e32e28aadef487689053ee2397c5a729bf27da4cc20f7de34bd 5eca53a3b45aeb7d1297a431e39f8e498aa87cd53fe39c557e890905ddc7 68cf14ec44be6deac684d766ac08ccd8d78b166f548165d757297bf8f245 2df86b65e91c799e1b4520687817c6d1cee36074576a05d84b06f394a5a2 127897418fc475b56b92eb1e4b49b7a9d981789175232af0ff6a7ec67a88 bca125ec26a1fb8577d0a0c6955f02ec84bf9a4c38a667fd903432a3a9a5 4a0c4b5550166e05dc3f42936f63b3221966b9edec775b2e29ec73cebe32 d83a9fcd08ea19cb3777c6eaeb207caa1c2c81edffbf4fc9261b8f0bccd7 5829c17395c0d50241f17251362a8118a9f1fc8e1ff6e6160cc2b113f5c9 89d3bf602caa01f0d5139a48c8b1f51a6efcc8ac0a7759a56a48c3e9c8ce 9849cfea3d6823a88e8c2289567906fe1c98bd81051a6c088dacadec9f1e b6b2cf8f27afb3441d3af89a392d5a5357039793e2ceac47428b184824ed d22aa147508761f96d2273fd1cab0c5c9b919516b9cee037e6cc50f4d7be 110f0b1639a6826f5604b25b3433db6921aaf7c702ca844a44146c0bc8ff 77c47dfedb801415eb3fea0d59f150cb9c1372d6249dc8fb0254c396584b b7997b693afeb2c407fca08a4f174e26d129b53daa0013c7ec196d7e85cd ae6901bf3eec7307b9d24d2188688292830f18a75e5e31c34a63af42fb99 7aaf3060671dbd3bdb7a34d407ab19830613864731c161e34e9c9916319e f2699a2b28a08f44b55e4b41843091bc4adb2a4474e4ade7dc67107876a0 e7d9f07b0d328fbff3cd9ef9d78ff1e117059b3994a6ec989f9e1ce9c257 b037f916a4e3bb82bb499c853e071cd7fc19c0408563f38cc79f5e3dde64 14a6991cd6ad3231eb618a5a4ff34d869882b371c091b8de4af0077e2c57 8fcfc64c6ca8513e3e507ed201312a45d5bc2148914187918fafe68894ae 2ff993fb8a42814e785eaeb9406f2d1af0204590db299dba94ec3a97147c d6637b5d9618f1c8c5447d11272a45f1b3d83c153c1696007a9c362031dc d02aa48e40118d81f1fdde2f02fac4afdb90fab7fee16f5c5d6110da76a2 be3241b36269ce7865ee97c05230849e8fed75c4b0c4e6d0823193526d6c 61ceb3a91ee13286e74e75d61036020aedcfeb6a6cef5617a2fbb7ffd75d 568948f7180d11fdb69393100bfb715e6ffeaeaffb31552b84504d3b6a5c d2a0a3ecf48ecc9dbc8b5aa3aaf5c232ad38999d691b420b2af71bea66b1 473b25c9235ad4f26b37c6fcda9fc4e29686456cffdd167c870fafd0b742 d831bbc2082f8ea7d43dd9462d3e881508d9a222990b4d74bbe99aa82c07 cb75e88ee124256b34090e3f9a3a6bbf527a5824953c2342f21fa33c0433 75bb26748f19bc292def5a4af3c428d4ca0c84684781ca9624c87fe81873 b5ef85829850cafe183060cefac958dcde5998e5d8511c54ec6b7326faa5 7189c4910fbe48d1bb73b39766728134b7d5034391202e5e3aa8e60af89a 2a967c8c103f69724e5b9b138bd177c7beaeb88e0c39e792cb75b40406b5 49babfd2b708c468e9e7fd946d4e73652a4ad21f2bdc60279e9b84dc8945 749689ef2bc9b9a583bf0320ad25a7749c04d5abf8243efd3bc3f9281fde 3e035b9b3a9510d008b8df64c3da058e808c81b4b41ffff471d87387372b f704f2a35c80732a8e4acf8991f8f72d8e4e1e1ceaeee2474fe577198e08 9221bcd100e0c23d6407c71faf5f2fa89469f7990df99fa816c902b53613 8294f5e511f7ec2a4ab0dacf13705b87f4cf9f1aab8b477d1a3647815503 3a1ea6d5127ab8366bd5a063498c855460fa8eb342797e0f0c40c1590921 9f147ea3fb4c6a74ad12c83dca69730b20ef3071707af037cf81b888b529 c21536cf0f43d16e0d780da82537e1fc211c5edc21f073a4159ed3e6f7ab 489d722dddaa00749b6d428537f73d93de8362e1333e34d86c37ef4bf494 42bf4c18bb83a1e7f9a0320afffbd9c31f184b091d14371eba5779a5261f 489d944211e285e999a33b3deee3cbbf285267c6e6ca2e6e0f50855e7366 6bafb7c8306ee77c10c1ae0eb037fd698630084941f0907bbe87bb10bb6d 349d06e674a54b5c5c28c439f5d96018043105c9d2d7883574fa5b2e2490 e327eb82960f9b51cf06b0776ab1296716fce2c4d66646265bd8465fc53e 50f199a76011f7036faf29b0be19e80f362dd197264285cb47be9f9c5291 50040e4259fb8c7387924305d353e20a58359e9fcf908fcd532f97ce527a d4f44b38f1ad2b6c2121f7fbaa72f3db94d328a8be72652da8554d3e4de3 48c89e56bc4f41858ce471cde859b3b931f76903cebaeb29ad6f3abe8400 024528c218c3e31ade6e80ff80bce020e8df345f77bb65e89d354da92afa f3bb4eabdd622e0c0d945d1e09154159078f8b1cc4c68fd4f061ebdc1613 a6a3fc4323ea1b314c403cd40e5f86b82b2c4d2bc508f5c15b8c71fd2fb1 8bdffca2292b26f9e4604c9580910f67422a7d9d744d4b7fce0971613643 30a7a89a5d55e49438875d923c1fb1d9643bf558675eeaf84f33556b2f9f 6edb62d05fac3f93236aef0190bc5da9b67d1641e56d511d48f5f620f015 f8ff69f4f4aad32424f0bb509687b044db3e62b9a5c7afd713ee90396642 ea522981cbbf69e31c97aa7d388cebc6b27d23213bc6f6b61224cf635028 50d7d066fc95a9eb92ed5e694d451757d2c8030b6d2c88b35dd8dd300f45 6d1af3fc44992a6febcea3e4394da412571c3aeb3c7265faeef316e6c6d7 693b6f47c00dec2778d210c3a24c8bf51285d7deeae3b8270fc13b3d0876 7a9847048ef4d0d51604e264da9fa1d0ff8192f83bada938446ef5bbcf15 8756bd3ba58d0f6cd35743db65e166656164e3209323773d03dab1a15cab 0d00d721e09de569a2595cd2dc57880c20fd5523504c746d801c6be0c24f 9484b0f9331cc4333b4043f8852e5d1a16a189f4ab6fe2216d6f4d822bc9 cddef28e8b1df45ea09f22c5a98b6b2e7a03f20f0512cab43c97e6ed0a29 3434f2f1814f39ee5797853d2cd31bc49f3f6d36a577ed672cd579494ccf dbf96def672cd9fe7dba67a71996cbd519cbe5a54754735af7ad31658c1d 39e152fff05f7eba48fb20b41c00f9c2d19527df6964adf978321c99bd55 7fbef5406e0cdbb8e65180cd35cae2ac97ca91af1d65b2b82a10b0317e21 1d0d38f9817e696e6c77b463d1bc527d92c70aa8027c2fb3f357514a1d4f 5f232d821d7ed60d954f44abc5417525f084ee48f9c479d6b7c906c70e85 d24ab17b80a32d069610d28b8b7d6d4e9b69c80a5084afa8a975db30a4c7 529dc7ba629f24350b22c74785ac965ec54128f00415f6d5e8a0af4b4fa9 90313e70594eb5c3d7c211196a7266035ca7f5893015e395e0ce1c185b14 514f5d18c311d0b50926d7c087c707d14735d554c5262b70178356943255 d62f0c84fe09388ac5a285d1745826acf968a99558c613a0d5d38bc58b91 bff73880ded648d53c8dd8710acdb3781734eab16c6d8ae1b73721deeaee 4ac9fe96d73e74883285eeaa405951e04fa819dac1403ea94c9b96cc227f 0b23684292e34b89a9ac9552649d1c65bf21436e997c56427b97bc442613 f17297f94cbb55fca7617f54b3039e353085aad592555595d9b1ee0f70e3 360ac3c239f81bde90bad2b19014b0b8ce8346069489cf13e020c9decf71 c7cb21cf13eebc1dc5eb61612c0f118b32e70a66ef84b897a8c91feaf863 075a84197b2384ca84cab55413b18ec10b7f1684e44d573bf4208422acc2 25fc1ca8e9a3ca9de6fafbb7c3bf437f09ac01bc36008e4061b691751a61 214afd9dd11174673d1ec6bb1a29c6019beb1969144335d8dba57b5b00be 335b5c8fde26a045d5bd65e14d6f0af50f1fbfe6176f849341137b052e7b ce4878175e3adb3426132d6d03fe156ab5b1f2c4bd2e55f5ba9207f0aabf 60b75f91cc384a93f27b2c7deee81c7e1ce540c967dd643ff0a8b8bad24f 13b713d0704c5c2305c7da7391f779ee1ab707d3c373094673f0a06c3ab5 ab903b2303633008545fe7eb6813b96ec4a23ab47a050b4c410cf6fa31fd 1b4e058936d1d75a45ae7c296904cfbe35350570a28d5d543104966499ac f431c0c2dce01b77be9cb1939231d19bbf8b3d1a9650c08ee0b7288ef75c 95313af599915e7d6ac3d84d73c8b009231feabf3b1450065a0725246275 8acf4c3ea62035562bf0113f1588b4117216dedfd57a6625f6ef7c2894de ea50b3a25b21ca583928714f3fa341dd84022317e336e9038576a241ee75 7d5c28f243e1ed5f94f046ac1ba162d8a7351f0cc3ce5d8621a8b29f9d0e a35d4be263dfd8ffecf4c49e78358497deeef61db84758a879efdaa36e7b 2bb80594503392e2d3f7c369ab8b2568da5051f02c1ec71f2da18b593baf 10eb1fd9f9026123f561560de02eccf7ef240f5574d4cb603e739f07385a 6fd630bf9fa4967f3c8c099a6dce285f9eb76414e2e048686c56d1b14c9d 851b4bd0befc448f4aeb0ba604a0cf33c594d5a5223891581b39990653e1 542f1ec7874b4e87247cea7e6f3905acee0ec5cdc792dd7ea0fdbd47eabb 2f158c5286f7aa5c14f74f1ff757b6ca66656042b6fc00b59a90f1652c7d b8438a3f18ff0d53722339e4336bf61af382f01a7bcf80ec0b1a1f886f2b 2bbdceb086e4efac8d06bcff7b4edfb4e935c9cf8548f26c7b267079d53d 270ed7b1e5bf6ba7d382439af172f4d03ebc720ca0fd65c8accc331497de 5068439678ab4dc8c1d4c03d7c044b9c1135bfb5e29b6a5bf6b667f72168 dac8caa4ea22facf49db7e9b6cdf3aea133ca64eb1dbb960cf90529f5b16 7bcb7fe21056472aada68f6a0ddc1bf869f4ff2f64bbb60f12bab2832054 c5dcf63b5fd3249981ca864cf5e723a63b8a3fd609261f0d800126fc145d f78ddf51207727695c0bf829e0f26d75af0e7c8276cc1f91cb36febeda0d d28bf1da6379921bfc6099183c1ec05ddd65f7785c79a58cabe3508f62ee 68ee01e732a46793445139c92b49acc21dd8de74fcaaa258f180c6651b16 b3c6936b4f53ef1fa4b3b62ab3faf104a9c0e43238ed852388c7988a0e78 78eec1fb30698cda4983b0c85b6d9be3625d240669a849854b0dbe8a58ac 617556db73f8bc06142559ef9845734314fc81390a98205b497028fd0a30 6f62dee59ab43468c0529600bfa182340acfd9417ea8d695c2529485cbcc 179194a7d881fbaff080aa9b199712015db7f2b1dc55e47f15166452321c aa003e70fabf77f492a66ec87fe221ddd248654c2f00873276d91cd6768c 220a848933f102bdb173c31a1f4f6ab57ec2d1af7825d029c3f827829c25 ea162a689dc8e4537dcfcee074c6bd44b8366a5c2df8334eff637238abed 39e39a3150b66c13bdf79e283f45a4f6dd39f210711d2395d88de2683212 71df5cd4af0a8d449cdb453c95404a73c62cd14855df4338974e839a0ead 62261c02890f597d3d9e34716b5ba9f96f9147156c24e561d0adc9a25fc5 6f015f375821a10a819a95a17b7b634585f3525f908d0a1916f345b767fe 27a06de0f2fbbd5cfed63023baf6e242e6840c931f43a6627e4241b9e80c 5ae380b07811555e3a214b566532bfb264ee86ad8f6cabbf5b78f54d4d32 c48366d88aa5944e72302e7f78ddd8d4ec5281835cb0aa613c9b745102a2 d35797a855c69882c92c073a75aa9a7cd776ecb4fad81687b61f1013cc61 2b9914dd21a642155c8a1988c51d24a220be3ffc3e1e4041de6d707acd42 a68f30db28d2f3a3c9c2c7243c655d68b87b2186b6abdd867e14af543b39 e227d176ae20b43e788d97085a435e3f15e27d7dc15ca0ac6d5358fa5830 b38f39870841fdd99dba85d85ec1d1e5e93fa4cc59513ab8b448887c9633 a701e382590c424421bebfc6b09ecdaf1b6aff6e5c675b534f3a2de76ffb 6897fdfa0f4247fb81399731c9fe1a95425ce789303dcf333b5cac01a4e2 58624134e6f6f42303aa88c9c29d4316dbef8976e0335434cedc1b3ddd6d 8320216827a57cd36c8c92830d30d8a4b7423dd47a1c9cfcad73bd275594 5f9d22859927de1f3a5079b064b13c463c0758ca8669bf927aab632104cd bfb9c4e86b9b855580ec8ed33dcc9eb06d16963c31be1b0543daf7f18819 07f13d285e01df1e27761838be06422d1c075d84c4c7f9ee2dbd335be153 80b023e79d18be1efbceb0add4d4f42584ab456a3dc88c47a7f7e40b0cff 7eaca0bdff8d10161889f23347d5b62da25fbfa27a8d3e89137032e85b29 a9e7f794333f1c7b2443a93db3d9e1d3680402e496bea64db1a866efeb11 594a609b92eb97bacd44ef8d05f213350c81d5bf21d250cd025cbee4cd00 eea6582fe0463d84045437f45a7b832b05a59f174143934026660e6c6921 26988373334088e665bb1dab92697d7594ede19ff699de719cdd63246555 57ff00bf888c981705a3d9775ec9dc3dbed665eb5790861a97a24f175766 e1e7cc7267f4eaab3b6001625a980c49033122b46779111729119574187b 6da9bce442713b7aff62d1a6076e07016ad3341bbd58b45289eaaa0b485c 7057f9c47d5a248f482f71162f928871b0217b3089139c4eb9d23ab50403 c59d531de7f02c0a527fb43597b8e5ada73a4adf7b0625da50e2822aff9d 6a9f38af50314201815f79eef626a1268031082b1fb1980cb50bf75d394e 21a8bae163067045bfd0a5cee5bd6db04accd15be2d2cdc82c9276b8c67e 0342d1b0d5fcec98a056537e6588e74d57214ebad1c99216719b35222738 8406116790c43b56bd6a5be5f4b80fa692482db8c01cc3d1748137d7a30a ac609a0aea9c7b16f6fd46b58ba8c08621b52c284fd5aab326a485c72414 df635f018c50a509acfc513f7d24d0414ab79a0db70d7f85027b28621617 f9d05c06052e4d426da0cab93e6927e9aee91bdcca597bb3277c2cd59466 d292eb9c6b0e809d9250e146fced2dbace6522a736ea1d5c4fe5f2da638e 5d408828304fb28f771b910ee9c79e21905fbccd481263365db560fbb147 b61f42187aa31dc49ff67367080fc653373f102e3952cec74d949f650640 4839beac59df8229c3ab813ae02c210362d3da0af846ca41177843ced722 bed937fa03ce286a49c1180d856730e9ab9a449d5ea54c13742a8d54ce72 a36739041299ba73932ada4603eb7d2896e1d5ade75ce7bac5d7e515ead8 31ef75214adb37c917410c7e54f2b2b8dd7d852c408444fb4f4723a5ce6f e3e80504660be78a9c5d310382e62c8c12c9e47bcb34f3b341e61c561a1e 6bcf125f530cf9c65c8d1f1eec65f23f5db4847f4c3dacac8abc62641e55 a261c899803cfc4b8a9e37b9860e5cb173b4a03e3c2a0a0c4d8371ba7669 d75f4eefd4c9d09407a1e2e74585521797129cd86ea31470986bc2daee82 1aca47451cc8919dff9e9845085928038897d872aee2884927a34448f4de cac1135d2a5bb6daa544104684ed95b4c582da0326acef7e996bfe08a11b 0051a9ae0c4add1d974400a8c21ca9ad710f5c53b81683160d191f9f19d8 1bb9df4764a85d848d72eddcbd998cf72d3606ac24d965eddf4459504415 e0611c299c37a5930636294a4698725db987d55efc2ae0fe2beaca90342f 1ff5fe33a28ad97883f3cd5f8d649566e9372dbfe3cc5c95fd48cc83bfae 07a3637a4a4ba841076a82c9a54afe98261d0a795c7932f56d21ea06f8fb 076456699131d51e6b320f00e799d3354f6700ca687f11c0d54e1cf3cbb4 d6b9ff956cf3487a0dd2f98d2616444dc17f557401e509a12f3dd3eff90a 9c32613fa46fbb1403ab6c43b114f1e1ddff16f1781785213d442ca426e0 af87bacbb2225df22f7b64f404ef0b195f3de922b435b4d7d91eb1291b24 b5de406fd5d5d94de83d9e8bcad5086e274ed8a404b8b45b2daf6317dc05 f48708cd45d7fabf78d6cb4a65ca973420bd0cbd0dda3f3f7061c1541532 b1314ae91873fa9f4fe299e41e971ecc59b141aa41f9a00db2fda8562cec f72a7ce790e2ab46301a2dbb671efb26f6ad63b401bba2ea7d83ef47062e a54da3c35048f33e95e8891ee2d480a634e63e854bf6b2f292c2016741f5 dd6053dca3f545d841db494769f5753286a0d223eef63b3cd646b996666a 6e4ae1157e1360ce82a31b7dacd97f099a33681c67474a914540a4adfdb5 c1a41e417f4fb795ec4d085701732098df95e5a3a84a4d27e162a5f13bfb 685eb38b0b5205f9e44d43dbc6a12a7f2f09c145ca37f2aafaf11b5ad9d7 f6d4146d0f615a8383a660d8feaab767098676696d02c8c595858a1644be 9fa65feee43b99c2de03e115c41f0ed9ee9d3e9f7797b44db0b6b99b264e 271a00a7c82c0ed3a99648d6ffb4d8849dbf48aea2e03bb81464fbfec861 540fd273ecc64b389481e77c5653ebe11024200247c377acc20470f36299 b23d90dc660ac752096ffa1b118eac29fa230d4ff6926acc49ef3a249f1c 619752333f84f8d3935918bd6d59890d1d24943493667d537bde5d390601 7ca640ff1ca77068e28d4aa10e6f93d0bf12a258e1fb58df4f1bd6b52b0f 5d9dc9d0a91bc55c1b7048a0624f5485e466c6a85f56716111528394f436 0dc8c314ab2da477996fb6fe1bc918ab5f8166ea10bb7641ff2e6497ab33 fbf10d9031e4117fccb3d706ecdc49a8de53bf11a67b9d68599ef1c74315 a8b1942c75ba47e8304747551f37d0b7447fb0c5d9b3e9f11db8088280e1 fa70ed8fdb631066b1482289181d89cf748497a85c08af0a9aa8d1274d2f a1a8ce474f19ca47dcb38b4b56a05bcf4d702c1b330de72587134ccafc8c db521ae74347cdcc04a7fecac1191eee5356070b6c6a3c9ed42d6922e96e 69604363d58ef8c035e4ecb7b3acd995f7fb21561503af795c3cc0957743 f894968dc52667f43f1c89168a935f6917836348be5ecd4ed327b46ddfe5 87909cac2bb958214b75e3f5621cd66c49f2ae335526eec4c2abbb84ab65 b6223466ff659ebf4dabfb82c0c61dbf798503d298ad21c536d036c7eda2 55b4e0b1f875bdef0ab995b83b2fbf91eea70eaf809552d71f923ebc7674 e6862001eee42a161f6a6c8cd35db329f93747ebd5dc614feac84bfa0444 3334f2008af28d5c941ba31e11edcf9cf0a52a7708599bcb2b2e495f3a01 57e54c51485a1bd63bc3e0e591b98d777f79616f63a8771d9c20d2a5cded 6881430612613bd002777d9a3e3c36bb9546368bea0cd16c671f61b88c28 f39a3caf0a700c50254bb1fc3f725f2bcf39581e8d9f6281df4f22bdfbac 7ad7caab434a2725197befca7f1d2b16f7a378d9e058bf78e2e3095f56b0 b0840fa8061065eccb109a33d3c6aedf391925493c28add11be1853a0b9c 14333949cb6d2b1b893aeee480490acec73297637fa716f1f4e0cc05ab56 425fa7e6c871c98603815a24eab6b1f226dc9d5eb5cfd486ac8f771105f0 84de3ee04132bd14ca085ab6e2b9ce13c13c6664414dc3cf3afbe7060f88 e3f059574e0bc25bc84ffbb7c040bffbffca0b3a5318566dc969e449b17c c05745a22cc75e4c5ede7f8b3e04cec69253b5338fd2751d484239949bd8 c6dac6e3f8e8c39a5623e118f357cdea2ea5818246d04213ad2db3b285cb 235027df03bb9826069fcabaf5363613e23dbe65d80f158bac74fec3e4af 6ed3b93000015f8911c2991a0671dfc2ff17a8f9d2cdded925739b6067ee 81a9e7bacd849ecf6a8c0dcca4c3c1e2e75c3f53011eee949f37f65c82c9 a1fd013ceea54f25d5c716356c09b7a353bcdd97ce4041e3e38e0f5b87da e1ba23c4974fa0949262a20129ae3e4ba0ebe12cc1ff7206b01ad3b71e10 18ca294989ff0602cea15fc3cbb1e61418a7ac16cd679254975954486c27 d0ad5b1b3cc95d713d856e805477c60f2a8dfbc70ad09420a9ea92e8f93e 8857f29a557538e5b7d20aa6e7225aeb8d4012c85f5e213ce1d04326077e 90d0a7e48c55e546b72c48395cd926237bb8cae10a027833f1661267ca69 c23ac4fb10f2960a48f4b6904ff7ee0bab7c71c6cf35a64f6cdda9a4579a c6b6f1dd4f8155b6f0bf23742b95477de0d9eda8bc96f27f16cdbea56284 200f14f31db1dc5c40fb8ab7682aa37c6a9b6191363f88b03c3b9d96dc64 12035c3a577542fb5a4f5af9a4b30ae504c80e578734c43e5817447f9104 2f5f76c426b10236eb1259d00747eb8d5d52bd682a004248846173276c4f c030ba20b47cb638bf4d0c8053098e3beb9ed906c7e5ee337cf1c46c0691 d109cc9790613d79aca4f45dc01b4cee12254dd6ec68a6c4da851657636a 4775cf92f8bc510ee6a0736c4af6e5f9f3e771ec4b745b5b78f744003ed8 8a33fca09ecdcadd614be61599d618f57944ec17b89f2385bcf8e40f21cc 30fd3d1cc46325680d15d2e3bbccc4e544f8b0a17ccbc41e0d81ec04460b 938414be237db0a854ad286deebe04c07a15d9726400497855306ab81189 4c4566159f56ff2519a12c2d65fca07ec8c167d9d33e982ec184187b542a 18ad3d5b63a4df48b801789fc49b8661490efecfc1e39f21bbc00cdbe8c3 9afab1b0c83259942b460a7114e13f2258d50c4bdc0ce8c572e3e9878bcc 41bd463fbaa7c7997daf090bf54fd4e73ba8e15c2821a263568ecd6f32c2 0a8f18008abac030ebce2c1a64e1cfad9c242b9f0f4d538668ca8cf8a18e ccc857e6c9713fbb78332a088e66ea893a4a6a6cc3f5b93eee4530fbec5d add146a4470a2c449a46aae167af2087dacdcd06fd81ce33f72a432549bd 6c9a6a0ce656e8f137857fa32f9b7f76bddafef97a5b0a71df72d42d7c59 84c7797e4f058ef65ae7beea2d2224dfd72f425d8bfd068e44405c64872e 3eef001ad8abb887d3ff520fdd520047ea579ae45d33cc687ed3c303b14f 685f7d18e3350074fc8608dfd817deeba3750fba4abf0b8b5164ea09e9e8 c9b1698c8a6186e9d0fc208cb6a7fde690ebade902ac28bb2cd806136c10 7a922326e9475a3ef4a6aa8807faee4f24ab5e1980f45ae7755895e351ae 2c4c07989e65fb5b69c9e5f976c13c7b41f45a6c0d5920225c32ebadf0d3 77fc00a85bafa497c911700187c975100e5228662f00652ff8a390485cd2 94360fc50a766074eaf02c834dbe250839636f169bf5aa0a1f10f99520e2 2c54478da957fb625d48f6875bf287c11b399820d3f488ac96b6076d48e0 7479659af2e733682b56dc0745bd52f32158e50025229dec67b15be242d4 ea09404ec5dac3477366249c6525c3558b643715fca62821c3a3c316c27e 93194a6f4f152bff095055637d9a73684c7709a9f37de58fc0091c08edd0 5b9a9e14bf423b82b021500e23bda43b419c62cfa5a125590b181573d6df 81d5bd9b3caf94bd1a873c31d1266d872b2c1e899b679d76391531967a90 9ab59feb477286eb7914b7bfe76e3aea9c1ad168c03c003ce5d88a6149b8 f06100f1d7086a8d33974a347ed273973f4bb21327881c80d33289501096 88d5f2c9d290e3f22b60d6a99ec7263d9576ceac5dc789a4a783f91b89ce fd2358a9ef7d003256c6037aafe7d7008fe4fbdc1e5c7dc7e57cfd851e5a 136a6f82eeb2f5901e18d708092141c29681bd3a2d0a65598fbd7dab166b 677e7b39d8e1b545c881578da74be57f872bc31e13873854c95cc3b774c6 323b8196468cc2c0f1420f4b48d5c118173fe7aa239b16f7ad42461f6227 7e4bd93aa7590e06e7682033b4376575338fd56593318834530238b7035f ce7e59279de3658aed0d9068a29f9277a7d922e5e3adf50c2c241406b60c 7a5b9046b7ef876580cbdd0bec78b15cca0f2fdedc6d66bb4385c709bd75 2085f8d2a17a20f1efdb3a0875887abd568c96c03432932bddd81b5735dd 471bff14ba88e9430e69583803ac95f61c96a5fd28a94d07f2ae6548cf95 8627af751c5d267407eebd265dff5465f19d8348fbf84dbeb16b689a8841 654914a1d13161e92a7e4d9d2c6234b253a36d828733fa1de290b9fff5e3 112b2e6caf8198eeeaf0cc51f6303c0a60b749f9665463c14d412ad5a26b 81485e2971e8fefd82d02be16cb1ad2a96a016c26af3e01ec54d0adbc61c bb07b3db0570d8ca4824e106a75362ebac1d4dc36e4b92b58361f90dc8db d7231a3d7ee3ab0174688d85a1c21ae7bb96e2166dfeb66482e396f2bf0c 9e4be1deec38c2a59b5f66869d9503110f61daca4019287a276e4b6c0cfb 2acb168ff6e553e69b0066cba02e5d8bcb1da764db623d1e0a27ca6c0efd ce742735f55ebc4e1f0ae84c8136d353b7d0d0a26228e32574857e24f215 5e3b43cc81f0a986d76e97a5efd1c0786a938b64c2d8cb6de16438392b4b 885659cd110de217297a0f52d55fa28fd853949e901ed8ad0ddc5768dacf ace88f2c40e66da9ad64510d4bd07ad8534d96de36fd6f1dc0ca6a4a6861 6bf6bee7b985877a199b8dcffc131afb188b8ec1202c05c19aee6ab4a8a0 775133632bb3727537e356858fd9889a5f0448f74516b3cbfc9555937773 97b12c3b4c4e5b7d2367762250d0f98e592c855b0e1092f2f7db952f096e 99f802037c422578640b6e45bd1133a3f8cffcc9abba479ecb583f380ca1 1fcaf2f87997aebbe740b2bf35c07654c8192196664bb0d4a36ac54ff084 e01bafbabfc5245ed195d1c3e6d66d433ff4236bd9fdabcc2cfc9f1a29f7 b7c3f5ea76c9f6a01866c815075dc70668414e2aa122c93155c77e8ac995 3a35783c8f73341ee01e06185329ee446b400573243d3956963b21dbc690 4aee4b01a9f172d8677842605aacee40e25d387b1b03592fba12fadeb02a 71e514e999c14390b85e5c42198877ac41750b814a869ad9959066a6b8d6 50bbf0d88909ba6ec2c04649900ba15ad3a03ae07438fdc444e956061441 211904e4c533fc46979de795fc6b6391463d2a3e91ca05f0e7c9cf3beeb3 1c3cd7f5131b24880eff1670fe6967f980f57518488a7481c54dc4e064b8 78d12e4da9e19dff1be23b6140a7762385ec61597051db54a68e037df5b9 42265142a0b33138883570e9d286e4250031f2f491ae108bed9e3d7eec9f a7b3ba9fa1400f8118090c962d87282a84f5c76b5818c9f2b958256545a2 b023dee119bf9575a1391983519d0da2392a294f793d0e714d86b3bbb55a c86977dd66d50d08f3ee60ecdd3e41fa0996c130feb4dc5e791639ea0cf1 70a384c9942baf16f12df508b3a54804fab838d042a23951c269c1d8bce9 39dbd91de20843f97ee04f904d9a62ce015076479d6902e310a621047695 841d08b79b9b586739b0927511ab734262e89217afa5f0c5f7d31cfa3125 bd921a7a94983c0c942cd12fd97904642bd42010f58d24532005d2712d8f 4578d097461ec4db58550e89ff62765322535a290c666ee60fc526011fe9 2c1cbed8a2c68a4d523edaac1f28bc96b2ca3129a495d2bb571e345cb36b 2c2043546ad577d72eca81fc58e080258c4dc5fa9fa077c9df2e858eae52 e312548b4043a67cf9b613415806cccbbd4ab434a8e35db06018fad364fa ded774f212c0e9a68a50e8e74cb6b68367fe2e9cceb7827c5f6ffda8ab7b d86b2615ef351a40bb4554ce13b55dd988b5e9e747feb4548e27a763d466 4b3fe0f86c320b651a645d6c115e0f094534b0e9e77c01b02b84fe4bfa10 9f01cf56cbc5d737876087e4d704a6556baee230f3533c36572ce260f902 2d36c246aa6ef0cc4954ad90697977174aa8217d28340f4a1b6af5d53ff4 19a3f58a23b7056130c2d7a891d00a6d778fe46f2c6d8b6db8a732bd462c ba70c139c3cf4765f2d7c5a4c2cda1336a1030dd782a563dc1885ee5cb84 3910a4e71d8e111ccb2bfb1504a90feaea2da21f39ced3a60bc6fca6b097 e840fe0072623040d237713140f13b2950db491be4775b609f9ee5b00cdc 1a77081e32e889ae0e2adf0234b3e421f2a8a478d4e5221f72cc4d683842 07e51b3786cb57b256da3ef9b68364fc10ced9da69a0fb76aacf7fa4cbfc 96a849b5f61026c56dddd1c433e7bc2150b89579444dc3a4075c86a125f1 b75c7a21e18ecc73313eeb4e39115e53a1e079bf14dcc4124f7cc3df48e6 23a99f84dd56adf3b8c172ae28ecdec01584dde16a564e987097f447a890 a1a3b726a59186dca890eb230924ba3695b70b6fdf45bdc3d7bfeab2e287 c68a6084001169ce200870b36c9bd5dfe31ad57f653cb7510b4019e3380a cc2fe5a409f057000f145ba76a87cbb59c453039ce2a6f73ecc6c474396c c451362ebb9d670ceb5cdfcaef023c1ae50aef59ce99767c2b03ca0f05b8 9f67a8475a830653fd8c5dbbb2addce77bdc9317d216ab17d5266b0aedac a3d1c3541aaf1825806b8ee0c1e38bb9cc0cf54b1e0ebca316876ab87c50 c118cb298e9e3b8753434a0882c4c26bc28ec0b62e412016d4549461ac98 348b7b5ac21ee549487d0c5fbf67e7df7e6cdec495e34c56f18f4b87df2b 97ab0eb8a64302bdef9b3a62f22bfd1721a388f60537d68313506060ef1d 4ae592e78483d4020efbf3bb4db202bcfd4e029d8486afdb1857b689c465 6169d16657ad6a213d49d79c9339329ae8e43bbb6020f93bfd6b94b1a54c 4417486f59082aa368742496102f3a28add9e78e54d2667adee3ec11a204 85ebbe4ff5547fcacc12f6c5c3e5e00fbd6d04619b81578c0ea33385fd55 ffd17b435782cc90e946df811aba41e90c2a74eac256a0901daf4e36a41b 69e8ba712678a85f8f080b8d25c0001ee9b4e6f37a9c0a8144ae0bff97bf 2933951f883b34d3033c5eeb3a5e08ec6b77b882fa5f5f1e788b2c77a5f8 b49fc98355d9284d16a76868ae8912842d99caffb428fbae21fcc119aff7 9c6d0fb691676d730a4f57233e1dee94e92ad501aed9d9d3a692217643c4 3d39b3eec1c8a6fde10995c366afd32a5ae3185e2058d0fc8f166464e2fa 747ee9a891e6d8be33497ee202dc38e5ee1952de71fd9865729f1cd1ada9 f7ae38c8fb17da6b66785e91f96cb63f9f244007855814529136ba9ed11a b22016dd95c7a2bbce9d68a1bbe24c8da009a03bae47b03bda4048b31b54 a41881f6e84f724c479b70e48fde6774bdbd01c8f8c23e271985debee139 c77a394d4ab1e4fcbbb9e0de5f7e07c89f87d28eb58d40d42948968ff9b6 be9acf59ccf465d5938d21ed6da02f4588f53de2a6a95d76089b8c6d8c4c 4b8f8cd58469a3b95c7e2e31ca578278f3c40ac9f36582dd5c44fa3993d3 ceefe9af5fa77a6985f8a67f934398723ec6a3d9f84e225993cf43b02073 c51a2e1b6eea792c162be37391c5df63847b913e2640c22d6299159bf1ec 11e7864b1296df8eeaaae892cc2394c8596e67278fceafd441e3273735c7 e36f5a9588307e8706a23e33c553b3847c7c1c96b61b4d433f66663f2f48 a09c5b8cc64c244c218ff7a1b17bd92bd7e3e5ab664b78a26de86544ba0a 7d40d081c722cb1270f3a107f5d07b009c1433a39e61e6892cd7be228200 560c38fc558f7e84beb1f400ff4bbc2b82d22fc4687b4a2dfa41ad9984e5 47ea85e9b1ba5e4014fc918b01c051a404fd56f3cce2611be6570c320cde b99454a34639c70c73bdd27b8ef322f052f3e523054314c1cd1377711875 247257162b8deb44fd9906562114011e93ca1d988e52ba6dd477a4100c4f ab8aac1dc831ba7bf78b34568ef9ae461661549339b59592957291499156 3495372d4a5165ec81eae79f8d1978af738cf11aa52ba4c37724442f125d 19677a9c00e61b2185ea390cd1ac3131eb8ba38baafe9763d752adab2f88 8d3dc4f5e3f9e83768b624246f42852462ab70f3055293d9ec7c92986b0b 338375fc526aa8ab3f0ae601bc79bb9fb6046ba5f45710ce94f812df4cac 245eba8d1eec85ca1430d15b96778e83235baeb02bed36c34221a80a6191 658c46578f026146e5a7612d532723ff02c3ff620263a2310947ca78dbb4 2c4898950a463ce07fb121eecedef3f1a541e3315d552bf23974ff14a2e3 49e45ceab0f3fffa71e4bd2cb5cf9fa0f1bb3e67e862f6df9cec7a2a898c 6c340e759f5024209b32629008fd04e002c16baba3504848192317139d6c eab9bb4d4add9ebe7b8a2360b2013356a3189275a6b9f6c45bdf1ecd5899 0824504e43a2d1e3b263c2f51d24f0f5492c69006b0602d1126707bd06d0 17907eb276105ce6378a2ed913d7e1eda9c9a7b513052e08d0dddc376539 6536aa403bb4ac8b8fc25115c2b59b7dfee2afa410ada4bb166a3e6ee063 a88e8f853f9ddac0c6630cfd380be8da45a770b3fb15eb658bdc4fecf20c f38258bf0c5fc2bb0777cfb9c9a54f2c362f21171e6c460c48ec7fb53c2c ba8f4915b5133b55d14fe3b70f95138f013e7a14ca92908e23b0d6db57fb ed3e9738089c071d999e90cfddb3f4ee4de5f02e53fd2ae4a131f5ca91ad 88a49571b3c38406d05deb023808044491830d8d5b80c33f1f6e8a4ca420 77f7c1b228598abce823e36ae62c9ce738e5b2265b992f68642db9e9e7a0 817651640c27e553c71a4c3285e0d780fa0351dcbf68b7344e41cc133c27 98af3db2659f7bb7bb409eafd727d79277f4d2d12e8ffc2361238175609a a1a5251407ebbab6f0a0f00da2fc8509cd8d79180fa08b6149ad4a7e3bd2 ca30bbb1b53f3578fe06ee99f64e025662d2f056dc2bc4f2e4d5ca502ac9 3f7abc2b3060330495f484d48ef7430a7be20109fd08a326906ecef30a4c a4dea9e3b9b40f8ef490b955cf8538a80a8dafabaa2dc7c38758ef1ead70 9d6fe7c48c800f20bf5ca5aee54756325a892ff5f2ac57d19849927aa0b7 a81fd3a4d04a7a24ba7b41208d70986a065dd77d893e36c521087142333b 34f741fee8b2ddba8dbb259b62470114b20695c1ccfd79bdc952d9404851 648c9477da9fb3445f92329a92297ee2b430054d29a1c42b6c2893838c9a 954aab658ae048bcdc5b5313be915ad59feab3ea6ff7b6d9d837fcbc3a3d f75b7bb618b457d710c2b85fa8f33ee3ca1d051f6df37e203cec56b637c5 9e08c0ccdc5fc807121d238a5dc7daab5387e5957ea640affde5c42e4061 537e2836d4d8186aa137bf166fa320a2bb8f06ea475e0a2e4905434dcc2a 3291bd90a3fcbde8acd2464a1f6ea0ef950e1712d59f75e60e50d62adafa 086fbfc3ad00ff8dce7c0743a32b07e938d3b2cec06075568604ae125466 77150645b2da8010dd9fc9d23fca924b4ce5a03360e134c9a79cab854beb e83cb43a600591f4801104a1249f3175e65964f83717d86220309e575182 a1bc339787919c4676615bd554e9e5afd701d279dc92788a008e49f68cf5 06bb95b6a849962631f4dee24e610d0db85097beb760d8a4087079bbb53c ec5573832f4821720d3152a968b7c97d861098c024bd76ca1326dc634edd 0a4e7fe2ac20c025f94fa920b4b77777e4766659dc35f08f77a2ce04ff60 7e564e608e25c8672d48451bd4bcaad2e2b040ccbb7fa33246581143095f 7010a6662747d4b055dbe79f6aed28dee8b7c0a26d79078f4c722a02109f 4fe93fcd639cb306015fe17a5c206f63f30370ad4956bbe75b714b16ca56 9f3b6eb992d85a67d57d62d50928e184c36de2313c3d02d6a98f16ef3617 0c19d0071038d6c9d192b4dc1ef0cceade311348fe726a502dff2d532d1b dc36c490d817379760f9ecbe787e7a6830e3203d6e92ea8e268b4a82cb79 12803026a64fdae2a0a2b45cf7c3549311b354cede4773a87a406f57a46e 114136685b6317c9f3c126bea738d473bb336d70ed30de165dc41a99ab9c fce10b62a97d2c132946ff4df8f45b7650e711cdbe9a4ac346d6bb6c44a5 e8214b76c8bfa9975d6b08748822a586a87cb0a8b4379d77858794c92901 f9dc1461d7f022b4641ba8d546c04f5133f35abed3f16cd5374027420350 03388be91ef5c8d73dcfd71b424fb2c7c19e26f54511b38a130a7489e19e 74372a1db5037ca15c3dc36cfa661bccb43fd8d9569dbfb96d41d3b7ff57 b96e7cbce610b1b7b119823b0302352f2e16a2dec84aafbd9200238e78e7 19aeb809bbe5f060f26e32d4799e48f265405b47633dbd54723604a653bf e56817c8fabdb83447c60c96c38c91b4c082740cb6ac6628f28477526180 31ced19e30625ad91e88235c9c088325bea766a2acdfd7c513ac97273d57 5404b2683ce0a63ae306856d82809a4060b0629318016eb2d2cc9f835e29 9d63c667d23ab07b54fcc944e0d8783ed5c7353647ba2b3859135ea28445 b57753905ab5b14e507d904ed11a0cefa5afc9e512f3ed5d0b44e5e3f490 875361388f7af1a7f8dd3c2f9d751a3ba90ed2b4fd1657c41fc7417b0234 522fede2a6677a5834233c33a9a692e45cf29d137ebddc0845e02ecde856 d488905be5a9105c3164b40fd89a5fb8942b26d27d141ca69dc05ba55a05 da8edf63973e44f0212780647c96b388859ad8b597dd7b0c332012822a6a 3cbceaebf11d3740acbd018709f48fc174c5b02c3b5c14faec3da3e0ce8f c0fceeb5c735f4c5a3e209067f0972a02701b82285101decdf16f70df0ac 98bfd772c8b6136540c8600ea4ee2580548d9823b77dfd42c07d6de98bc6 99547ae4ecc6e3432bbb8d79715d365b5049c54f3ac925783fca40923eba dfc8b8b2fbdfd13ad45b0561c84d8fa1fd0588ae154b80b65484446a34e6 de20305fa4ee9721a41027b3d6c53bfb670ba91359bdef044ed4c81b758d 4def9c44b21b093e879cb5a38461b34c8c9b476d70f8de3c694bebe92c5c 0d441361f8fe4095b4fbb53a1174f16e0079958173ae8e239eacf738562f e1499618081af7856124299b4e40c4b0891b4530cc50809f640ab35ebc59 ba7b9c58783e02e6deef5d1fecb07cfc015d5e0324d71b6ed73d26f775fd 9c985f7022a6a6bcb28a1b48d3f1a595ef6fce7da625f13d9c50c5b6e11b 61e72fa4cd3b4af115fe107c8b2157206ac2dd5b8f46ac902ad0a216bf7b 289b69f86e32b9b1e363ea355b76815252336dab4431bce747c666dbf852 b646cf013a23a7efd76b28d76087320daeb53af0d8aef859c86c9d4fe269 ac08950a465f30eff007319e61d76d518327f950cc3f0268f24cb55b768e a05da4cb73dc69e3d9bf219b3e59be45495a10a4315198a746843f02df13 06e9631348d470d7343427815a222be811b4b8507a4ca137b71353401c3c 5752ba0086b3f633515ddf522d50f0a54e15d83c452b12f9bf4e38d6e305 844052fce53bae641bc75996a6e012109fad3fae4218e71563304b913fb7 a09ee9b1e42c478ff10d692bcf708152cc2f46d09273bcd80f7044cf4a69 fc54eb214443f68f147f4c7deedaad63a4cff4e05137775771a2c03ea067 22a695dae046cd26258dbb6d34c918a60149a73381615614a82feb1a0040 0d55b806fcbb1aa83037f1d93d544905d7993c4e6440ccee637583405c87 5538a8acd0f0f716a4898cd5e9d490f1031e70fa0d6d7416cf4b4a00e883 77047c4ce71dbe50cf7a8cee2b9d72eea95125f17bea8f43a62c2e4b183a ef9e33e1d81fc73794a2e44e19b4de91b3daf98bdcc808f4d7bea1362a7c 5803b56f4058a1e4e75f91b97d4c37eba801fb470c1c8cc8e32be83a378d 8ad1f396b3adae3f8c814fbcfd2e99f4990e4f086bc0ab90f745988487f7 ec5d952f67f79bf7b258cd02531fd70b908aac82b253e85d024a69296fcf 9ab6f5e7223d4d5de747f571bf20278e04503c1413491c79a01a7d92ddd1 941cec32d3213b8a30ac2c213de9fbc9a88acaf52969d61b2401d0eacb18 bffa9de616a50d65bc1596b0a40c2a2c93ea0f8ed2c30eb52c5937a42366 c5efc6ac5ec213673ae4c543a6f3bb34f090b8489485e4b9d0bcfcea0774 2fb84f85cba53d89e0e428f3a31b594961db958dbf2edd34da6456e1327a cc53eba8d6447fb42dacd1bd8b24a112b802ec759f55accc5eed2c25245f 573e614f28f9d9c2775e0a1c46d246ec3c0e5c70ef98241b488082a55366 c20281ca6f5ad5bb88decdeda4926d4e170977df91511a8f61cb3a9e63df fda5397aad6fd3b5910c47134a4c337c04d47413412ffe82ca84edc8531b a11fea6ff7b6d000b498c15ce555a511c38c5e844f5373c3ce0b6f882374 5272bd4630517355f629fd424769b28841f299fa651b39e4780ac50c9eee f6ab1421007ea1f7c57b8efea7a9aed85978d3754a783624f2a927c1008e d321d673be1d0522a03de2af037e32339014325754faaa0b61b51471de27 81cb03016085a24d5a21b63237223e6c9a4a5f752e9a7ce92220ffa3ea6c 9a5a377f6b20f45d1328e06f546945dc1fc4f3c85a6255e216e193d73921 90c0ce775f8608041313ab0fe005ec4ad07825433c845fbb6a617d62cd3b 255f7282b26870c1a549bdb2e5cf2d139abbcbf0eaa00d621b3db0d7bf59 55f94b283413bb89307227443d96edbe2d9a98d75644507ca9bfaccdab84 675f25edf4da0ebacb43da209b0c124cb7a223c63a895fe66e14d002d715 ad4cfcec9f037e68644984d70c5de3e1af4e47a494dbc6bbdeb7c11df090 bce61c393776f4a15e5b4a1a89d5e7bcdb5d0b68c512918c64027ad9b00b 33d1d7079a97f85237de69ed4f00d0a40e9d42cc47a1a68e1bec9d4da68d 21c299a9d98a799b912e0454a018c5eb0ec79f4b4f339ebc889cb91aebbf 1274cc18a828b78f0bb9b988ab95036fe04eacfe03a2b320dcb2ce8a88b1 87650d2c9d537ed43f0385b0d9e93c1a0777f83e14a6084f2777e3229cfe 7b6e739410d512f577961c52ba53ac5f6dc4c21c15da6fb4b5a7c0506fd4 9437ab4dbc2d93a6f25c4169edbcbbf37347b0500da070ed4fe8252fad6a 16d0bcd21a3dd5cc11547e020699005f6c0d10a31e501a42de6957f7ff00 78d72693e88fd851d66fb4b14d397ba4d8d47cfd7c52e7f1cb425fa0fdc9 e016b9d517e63210da4ced814271bd3fdb90826d435d54286660bc2f681d 24339245724afd721c6f423deec3376cdb121e758088a5bf38784092451c 8036b8957c7d90ed1f05f3c652680477caca79051d5933fec1612dca6295 50bead999fcf068b15c200e3c6282fa854d072a7ee5a77684688d4c2abc3 da2b32648477b4f3fae1c11d228984ef3aa3ff6df75422a5dded258dd68c 83062af939637b267c6c11dcb84485ad7245883ca68462a6fbb82d2ea23b 03f9207a58a418cc80f09760aa10de47ccc8d8e23e4c71d308e320f993f1 5c5be970d9a88e72f9f15f0ea2ca054cdb8c77ee6feccb2eb26cd611aa4a 62dc725f3dcce6bad69141aa32f9e3d4193954e87405f8c33729816dde1b c61b943fb453cfda98290d6cc096e54c02c81cee72b89e6e4bb7b073ee4a 204ea935fd9a3faf7ea06bf8009283e572ad03b4880229191169726f26a6 e615d7df683026c2a68834f9cf1ad1beb971fa5666076638815a5690bc1e 7b8a07278b83c48723cafc93645c0fbec0e847e6bbfa6f3be59d24f1d2ce 9aeaacf29c0a35a9988d9229724d2cf39c5d5a2e014ed214adca33cbc174 f33f49f1d04738425cfeb39946148dbae9fe7e200b6445adba7344a9ca73 d2d4e7ff3810b5a2051096d51277914a49a0609bab8d03f9fb709bfd874e 9823cd2216f39ad35cc74addc8f1b00432a1f190240d3676e334d67cd33d 980ba1679515f00df6698efda5022e81d2faa8c6df1bbd1cb23b677968b0 56396335014ef05274e0d3280e9b55029429fd64a009c7f61fef5237280a 392c3e403f9f59ca52a4f6ce81a007b5adec7658e13ae98dc946bb7a65b0 12b12175b1ca88bcba7e6732dae14f3d3ed5de586dc9ce6c9958b14b8d59 87e7e202ef36b9fd1ac7b68b419ce33a4e5bd0144163e46531a96b7b08f5 c65601f909dbba194cec9acb2d6c05c427e507fff04503b9ae8d15974773 ba2ab8c57d53a3103e1e06f0d46cc7d2a7dad34cf7632f03e33d75ab0e2a d9bb490baa2290b2082f99deb8b90a53b200013ffcd90e5ef28252275654 4daae4aef05bbea594c6533017a3b13d2a0832ce2dbbc85473c2d8232979 80c844f113abf5562168a8169d15b5f431b1e552bd644517339871b79fc9 c109021c0304916eec8875cd3e0502c19b8943faff42f427815594782665 56bccb54e1644422df8fe6b746f411e9728ce19dd82a54e0139ea36e8512 34687a8a302b37f5e2b91448aa8fcb017600b62b4554c63ee973e7cbecac ef6164d0c3f7d458e0c608993e5908b73d80ebfbf640d93e943321da3683 ca5f436362f0fab74265415d462a1363c7f03de17b20b3cbcde705e35a08 d54b6f2d5ba49ed53a8948a65b49931e3cd472aee535b91bea1a4b03076e 394431b71aa60e33a73d82888717f56374a0c560eae6ffb54d483221fcf6 cedc3fe9267adfdc62a8a1a16c9c502f0eddb61c796e94ec9495cac77c18 30f606be0e76e5b3cf25be7990fc8a26e5d6cd107bc242f0a7859d313457 73c2fb5ef2e2c0e45edf2cc3bc6528e0197a544cd18fc5805f33300b2e27 5d8a20a6df54a9e2a5fb74f52aac755baa565dc733e3c1e3e1ecf93b729e e0d8646e4fc82f996ba697fb28e528f9545323c21ba2a475497bcbd3668f 7d5f606e88bc869053e57840e8c45232de4de5fdafff06553438bfe8b4c1 41e8e2fa9642fdddba6560972079dbeb4ea5b41aed165e452c76cf838dc0 4edd49c7d60669d2bac553bd424438e23d53244a224f58ff57e4c8cc2c1b 9e53aa4cb44a8ec31042616268539d858de9705e2f3604019c1e6ebcf1cf 9e480b2e50d426beac87a2c8865ec971d884b24b3042a81ce3612e7d4821 18a5df38780685ed0ce6618404892f41dacb38d0b1819147fa2874d63a32 856cc263a2946624e73dd5380e1042265842b95a1eefacd61bed8de48045 ddee4b0047a1ef6415d06898bfbe0281dda5b5eeaf8116092a4225e56994 c7aeaa327feec9d282933772def7f79dc96a1ca2697a9ea53aa6e2a9394a 6221b66d9d6031f44fbe869b340ed98fd96f0d20422a3b0b6863d83d99d6 672bef9e87114b67fd3a1da8d6c95f5714100fa6e2976727b9010ba0657b 1ed94e49c7cf32bbf165270817cb23daaee704af648871ced8c916877491 c80379b6c5b34de8758fdc350512a8c8434cb26aaae521c17636907d3b25 c27d104bf1f7f34806b60233b310071d96be708ed4e60bb2dd90a75de67d a6682fe837974ba4a855408b09accfa82f1c20f2234be72d46ca0302f3cc caf659f7c962e8e4ece4391bcae4c10642394266f8d46113ef487834734f e6b17fb80c006a4b06243907477dca882af227609e16d33baebb66c91f77 f794b848925b9bcbffec7fda118f522ec6e8e804e7f9bdbb22ed90e8748a 6f8d0840a73bd2db0498e97ab9497ef7a6e2733073979ece79cdd57c7e80 d3dcd60165cc36ab883a99c7578cbb01856c93ada1908cec187a2f240f98 444c7007c10736f471153f473fb56aa2483014f78b9633532f3bb1f39c78 8e23f40906733583aea40cddd2913e41755476ea08522449a4ab8cde77d4 762a31ae2ec8a1977a697f98ee707b1c48292b274e78be72c30be8a6cdae 9f7eb8ad71e1cf621ad39f7c58c22e7dc7a574934368ed5655bf2bca2917 ed2369f329a035c5f6eb1d321143cfc997245e37d9cef904edec7e169c4e 95c2a0644a2578a959c8b90829b9c8d8eb430b73d95ed9fe2bdad7b339ec 10ba7c21e13aa8cba2a2205d54bbee397827dd1c3d01dafd004aedfa3bc3 0cfdeb3b283775efc9ed1bb937b8673ed5e1363bece8b7f1764758a7a394 8383a2fedd862f93b03a24c94184b6d6ac3e6f47e8e6273dcfcaa57cc012 f044a61904ef6e3da7fcc32c2d6effac21ecf8c83f356418e30a0d27cb83 4856a2a46d837448e35cd3d9fd181f6cb4fd61f87b51b3a006a3f2e453cb 9999df3b42c4f6801f463e166b1e501252bc7fd0e322cf0b7ca139de4852 13fef8b334ad24e65bc5cb664fa6ea819867f557c8a3dde6a6b0fc8dd705 182a7957a2e20c0efea58e0d2dff1aa72bbd991d72eab240f696bcddd1a9 b4f79c458756dece8a3b642c7d3c8c727eadcc0a7103cb4d47a5b1fb903d 110aea05cfb27aa4e30fbd7c7763ecdd2065ce4ef7cf20cccbaf37eea6a3 e4201a5357cd4c4fb87316bc320387c8d112076821e4321d4c3abdf05c8d c4622ff259a3327e90f6dfaf439b6f40453db10874cbe08af2ec84a92ba7 24306bfbf717dccb9abc0d66e8c26c792b2883f5892705cf96c2ec54364d 685d043c04147827e0c3707a58b79479cd357f117256361741f348377a60 2a2da01033db1314382779dee089c88a3685a31de3e0da208fa7a6fcde4f f19c2e4ff08a15af2f1cf4129f68dc5cc044eb27d10f1f6bc69350c58dff c970a3dce95a8e68085e4035e15466e8c54f4dcfa46dd8d89c6903c49ad0 efd7db9bb70da38d121986d4f0df973e88158387bac2064d7ed5d8351cad 5bf7bcecd4f4a9277ce934779ddf8e32497f58b97e5cf4416062d0b756b8 cd2e9aeab243ed3766c941c22c99cd35299d185e573bda0e53003b5789aa 6f6a373a74af4ef906c8c5cc41ec337cd3fa5c1d69a275139f5e9d9d7d02 929176b0fbe0feec02443b48ec33359a68107ab9e24df7e13060e1c3b393 c815b2a81adc57cfceab980242bb7108f9f91392263092dfb89d35f036be 14b59fa6bc36ca7646d1cf08ab8722be67d1b572babce266328f229ce302 67af4b0b36b5c5efffb951e91cca4811a2c1a04cf12e9ab754a2fd06a398 88122a244a44a8bf52da16557aeb4aed91a686fd73741ceabfeff6db5f9b 2722d461ef2ee43c1908b53090e746166bce2fabf0fb3d6008ef7459909b d888f05424541f9274da33d96c8359f396bf347e61ecb10ac0be33d22716 022582167ac99c8cce6e6a2bf1a32a4f2ba6b27205cf9f9765b17f7a9b49 860dfb9dba1812d84c7cae90ccc0ac3bd9d9171f60794cf905613a5fa14d c72f52a06cdb331d14fae10e039363e51177208646c21822f26c7bb9d587 8697bf259ed4f4c6f4ea2dcca46f2052aac2d3e2ad0178c1d515d1a59226 8ce2a4cbc8e4811342731984860b768574e71a1ca13c766c630c4755b4fb 1a2cbade31fe45e54036f6aea43159c3f39fc1fc1a3bfd2ba20803705a9c 3fe693afe4b00b6b1368057e4a56f4219151c6b88c045dc69a7bc9fd8685 3b11fe52d272cbabb4601ffbfbb21b16ce2c5592fe32a44bd86478c81a07 0cd785e4222df9107604faa212b442c65e48d4841308e2ccd859279c2b4f 5af2ec0a92f8eb931efbf7a1b4ea4513894bb6c30000042b8ee583be3fd3 facb9e3440e190974da06dbadfcf549cbf256017568f2fe8196859a6394a 2b87c3e3f028d9bee8b274d1ee7c212c9ed7527c73ad52e4fdaed705b6de 48f3adf32637bb927b7b311623e151433285646c97093b5bfacec6c9ec60 4c8912ccc63a147992e0dbf4551d1fe623662be148d08c6a8f5911637abd 5a6967e6a209cf087eea22cba03d9cc4923c1cbb9944d7c14bba4cc5de61 8b2884817199b9c98739291cb30022009b9f4b38e81171a97cbf8556aabe 06e428490181a93f621231e1de4197777fbe1efb72e16b80a60858a0d40f 3c3c47b9ef66f120425a462bce704fe7f8b9c5ec32d401edb5a57a13b237 f44164a42dc92b7167312af2d0e41acc252334447673819c5d607eb16a1e 3c96f7f99491bf8e0c4d5b9578091f53e887500870d45a25c374d070ce6d d433b6decd275d97bdbe385e3ad7eef69f3e43e1c338860aa02edbf37e79 290c8932b4293203f796e3a755904819cf1fc1f8cc5e87d19e65b3b9168b dd3a7c07c84f39007424fcc63a5ee279822fb203a760ec89aa8f47c259b9 1e79297e4d563e78b80121a534a65b027be6c42c82cd6628743d810ba4ff 603eda736e2583f8536a6a5a49de5e24dca8b7fcf2d8e2b2759d4224be65 cb7a322d0fcee0aa2b5a7187a04aaf44919f930ed4dd509d2f3c03d81742 347427a3cc462cead3435c62198cb907fe586946a1c6ce4446d9098ff837 ab61a81256109609d36e86e90f1063f2a6abe821836005b1a18d237e989f cfddd74b1dd8717b3c61687888921a49817965ddcad988fd647ca9515460 b87acf56c50167182c06a0003ef4545c7d18a4b3e708d529be183d07e20b 3000545d92c98255b8e6466cc90979f78f8e66290d969f995108490f8ab2 afe5f89fa90ab05c576853fed0637def6b3568c6b3ce54ac3f3f767430c4 9c956766c7bd3bfc6ca3168850e32f4f8e653de3a325a515533b30c58a60 c79989d8db333a25e8c13c480fb183ee2bac091e460f60d4f42b90b6c3ef 1fe79488fbbe04ba7e22a9525741d5e1dd9723379ececfbd03c4d316f24c 26914cc3ddadde45bbf90c91de0a1513a49b3c52124eedbb0bb15d3a0ac5 b5dc740ce0b5155c51fdca5a5456e59e89fc7369e93db26786a8d9456d52 1a86c9fa8df6a74d4938ead1ed97e1a6ae1e8b3e49a616307aa3b1847711 99cb16378307f1de39c9c0b0bd8ed61fd3f7f73c87c1dbfa07c1a1c71d76 9589b85b6c21520ee50c80e46ae3ae63509b930cc15b11d2831f51046178 f4ceb3c45d4d50bb70ae7b592018d2edf3e1c2c07a22a9161530478d1b6c 777c58a44ee4a49280213a0eeacfc8fae140dcc7f1437026935e978294a1 5f8b3153aff72f86fcd71148393f2cfa24faf01013f8419547df2f025fd5 7d1d0545219af7b79ded68a8d454e5ce991e813c30e0ffd474926ba5c4b4 efe1d6cbbd7fd24c0555df2d2d3adb4cd61325a564719f4462b0963869f4 0bf19dcb578e5fee0b390909deb9a3f8907e2c63acc20da7306dd137156f 100db45a1bc8c049e9d9bf1f603a862e3a718104b8273b5922ec098d34ce a5f87cd20ef26918276c31363b5cc644a10abb7cbc3a03ebd218f264c54b 4b3b07176899b30f711efb806554a7b5833f3e035df5457457e15f44f14b 99403d54ba74e6183feeed19145bffbf5d2ff480e19c619f61ab9247389f ed2cfa6385f654238b3499f8e371e7174872a09e9355d599719bc63dc7b1 86f54ac835bfa4564ee9d1a7006059bee0048cf8eec5ff1de986788bc366 dff711930e1cc54890e6c82034edd84cc10566df5795f37be69a2e65eb10 ba6e4c38e0adcfd467c3a3a31697c2da51c535cd6171ae8e5d60afd1dac1 d9edebf9fd2c8d40a48104e9befe0965cbdc8eb02d62991361b4a1ac76f6 4f832ed6ffdca5bc7d57037bb80daec5d891591b80dff070dd1b99b4fb08 478eb4e8b30204a9b9e4ec33105bae9d7cded15c68243f7e35c2eb438ef2 e1d110b318b2c8f08ae8ed2e5b6bda72d8723f7e57481280954f75a815e1 6f1c6143efee6b879ff14d56251bd97ed8e6d9b640820c91d76573c8e529 0ada9d3126e76b36ccd671dbdcc91f5fa518ea6776f6e74282113c00a5b4 7acc3017b69bccb828bba8e1781aa7245e116868a5530530580bfd3d51e3 d4bf72ef94104691e48e4e568d43b3a15fcb9f9178d888670734ec990522 66d662379ac45ae049f8eafe1fbc2adbb6144abaf462b1b697c9de0b7aba e451a1254e0f1a02d6cfc855b30b1acdf670e7fe061a25feb19445458a8d fe7cab9f86625b3a9f60c22a13c14792924fd003d451cd1dc141fb91914a a6496a46fdafdd8ada54e8bd6bd5460205bf29411e0a908d10e7776ed21f 3d70a22aa6399b589e03ee1ec9e1a3cf8a30ffd5576637a8246733b91c1e e81536a29c893b4cca71c5e1f5900be1ec21dc201b7c0332024572599f03 8a8424182c9ab600b2696beb3f102f0990e74f9063e149bd63d31875fd6f b6c7e05ec95af42c11a2e87a96360135ede486b53c82f45e0bc514c2856b f1d7cdc64e7a84ef48624dce56a0378e12aa007d93b0436b3960aeaf0f87 0e4ec03b8e2e3283419a703bfe499e634d77e3c708db54e8966a2c59af72 d26d66361749223ba0aae5eaca600b4a0e136569fe5a41221b0e7e83e5ea 27de7f86eef2fc60ddc85ce259c57851105012d5ba71a826576e6c9f4462 3543651b6e1fbac22c6ff42f9ce9e8e9d62dad0950121002d8db8fae3dad b85d218be8e8856b21d0515c8c07d51e1cb50b873fc54725e2e031d9ad0a 1808dce89be294f410a0b0fc0ea827eed4570d731a66aeb47f9ff4009772 920a733119736b9b93117e28061f4f7865f390341848cdbf7e9806867fec ab3a606f9f60ddcb1f71e66f86873c64806ab2d60cfce7a22bd8a51e0929 511b465b11e712dad8b2a2d8e6f708c5a2bbdf5fcd9a25dc68cb4904a7af 80005b6e2916f97738626c460955a2fd07ddffcd38287e6c188608b8a1fa 24430b52db72e000713cc5328e38d51dd58e5c47be68654264cc3064b9f7 4dba7b6b883c3afae41c007d0b27882c968e975fbbee887e21a48fd49fe1 fa3d9367de1fddeaf40fb6b5dcdfaa10a2448f20319993851d477216689d db1c7f575e83d609998c312c95e9153e6745922a39d025aac5e5843f99bc 7764b81cdea5f2fb1fc3ff34878c6250866e31d3f7972e851804aa641aa3 a4c968c3df00c3e3a6a83f2acb9095973b6eefe7920b07e6826d6d3b50a4 b776b50f9ffa7d471c350caa1c29eb9d936744f5e57632544fc5a4366300 ee7db1a1968a28c264ad23ed300575905f6998f1d4a51efc3eeeca468213 824d035ea783488d9439b3c9b19237b1e23ac0ff2d8c3797716bb661b4de 7d4a1080f092a4b86dddaa6535e496e950c4dd13e38c23812b3ed668523a 1a8222e8445d825977f9e4b1a2eb3ab933d388d6976027f6947ec337fec7 c2667d9517fce68d55f79196c6f51f9b8e74ad9001839e0afbdb5e505d61 10da76a2be320bbd1776e78984664f210a3f4e86375d50db12d89dfe058f e9ce5303f1449acdb485bb164581a123d935e574e5c49236ccf906c818b2 eee776c0db456730b75507dc52f68cb9c63e9af0dc36011e1b29d9b4cbbb ffc39ea482a01d8083e4e31991c5b792855214b5ff1a868257a76e7c6606 8d3215aa709b58663f705c8a9d3769e22960dadba3704f7fe536f086d78f 9f149d12624a530cbb303c8a3e13a35e67e39746e9666977489242595d49 4c3ecc61f93b4b944a23c362e951d2de8606163940d196b8579baa23f762 ea4714e24833e4afa1b6d22e7abb8cd11fa4aa835b9af6dfa6c16f99d9ff 093db894e1d008582aec048c433ee5af0bf6e2122ff4ca2b157a45e18f4a 91ff8e66c6c319a0f77fa382120bda2a217b83057bf19dace98684261474 31e5881c3b26363a098af361b99666bf29b7e1f6bf4ff20e67abf319eaf4 b3415d5094bad3bbeb351cb5e0fa2d08f160c44d51ec7483107a19194cb1 44e69ddff4d66b46027e9c6561337a0644acaccb9988570f9f959bf8ca43 87ebd2b666e9da9642c370050597fff6d03c73cf62058fa31c821e2f06d2 b0bb6d383bbb59119d57e9439f4d4c07e1d4c10aaff7e5411382f27143d5 94ee300b2d8157a2918aed5d9ce3584898560ececcfe5f7859ecb9ed4d16 effb0de354ba940b5b92abfd6644c0343a03e5ab573b36cccd6e4a8c4912 be9fd5512bd86452f8fdc68b79efaab67560be25d01242be7588a1ebf943 5d0f810a9a03c91f4717b21819b3bc7a3a6eb7d899f0b67a7b713396d654 2e2f108943322e86117baa40ec49b8952d6a2f66a40be95d6442655fb0dc 3ab63bc961c7ddaf78650e3713eb1a208f25721d1a4ab10dbefd058accbe ee1e86a3265ca3a96e5d2d08a2c6818bf95e9b8a658a387203cf19a693a1 cb9214b01d554223c7cd23eba7fee22440fae527db24cb5fcf73f6b54f0c 1f70e8a8bd0377e2b143fb0f57da9bd57c650f6092cd505fa27e3f4ca330 b28d69f588ae559278cb2dc77592358046d7ea62ce622ce8868c1cf7905f 03db088b1215de98c17d45825ee6d046777866bf5beef1d2f14c7b816111 982bcda0cc0c6f931e8e6c1120b3022fc342494d45f0d1feb37d68a08e52 8d19e0fa5245f1d07ee4f4820fd23c26fed3da3270ed57a9b42bec489344 013bcb4a7b0db2184997b30ce02d523725f3a90d2760ef6c90e8951cdb64 05139be5af5845366d6f6b3f07019b87120b72e7bc8b0916e163ea5d0e52 6fc9b4cfceb4c8bcab1d24becfc8709089f9d17820914a005c91e225becb 401371ac4ee4bc6e8f369fdc02e3c95e11d4502352209436c81868b57339 d8ae8652f11ba0d382439af172f4d03e7018ee0c9aa03cb4ab276e0e15b7 a608d97079163d8fb251e37dc9ed822f0ee3e582dc53472ee99791ef9674 485ce9aa8192522cb715d4a36863eea69297139103fbdf1b4da7ce9e13a4 d5e47c4a51b242fe94ba4937af7ebafc3b2327e939edf1f8c39ce9c62261 bc125bfcaf466136460a8abd74ddd3453adb686c6107e4d92199a308a00f 94059741aafd0ba89220ae2c972f3c3744528a55d9b7487bbcaeb1c57576 8eda14e764d5e6862c47fdcc0cbeb0a014ecbcff5b34aa8fc8fb38ab35ba 2483f14215f6ab73fd123455b8e6dccda8e57960dfd49ccad4918e69b1d7 573a07ff806e3c7d2a31c6b8183d3455870ff01bf4a23a2c2c106e81cd9e a384c84727a1a13c606a0d6181ddbff41b01503bf952add2c60bf1f9e078 f05387b7c91b1fc9fb4e2199f5f63caec3e3a8d730ca33ba3a896538c04c d5ed749c879f33de586f69d8c6e6eb1e93ac80b4b1b14c709f0f5a845657 d280707938fdfabf33fbcc8581feb9998d73203744ae21b3212a3ebe87c1 ffff187ba4bd748e94b0ec3b9b6856b2d9c8b28dd322105cf50eaa2e74a0 5fa19887d2f709544be4f7134e0885361ed5b413de7304ce4b33237af426 98d43b7da528b6a115f5b99afaadf8b58584f7280209c77122392cb467a3 a5311d64b25250ac42f77a15b583ad71b2f254dd16b6c433b85d88b08112 c797e19b74d2355c123c628d41849109ed47a2df0402d5c12d730569673b b8589020812cd82b0312aa2d548b88c7fdc7a4f01cce81e7ed616f0b1103 d90aac08d6de07002e86961d20116bff97166566a155a88036e6539fe015 637f8cf70b4461bac3ef793a6e76237d3058e44022c139683c632f5c862c 7fe1b13123679071d77c26fa4a0e0fd534791aee395ae5cb891445919e5c 73ec16add964aa02dbb1a758463775f5b6581dcd8e2d8accccfbe633277e 73f844c1e3336efe7abce955d3ed3b46af141ae13620199f325e1decd66a 135685fe8b39ad0f2e23d0cb7e10118af1683f0a713718643f7ff4e828f6 f4b08c85982d06d6974c5bfa533171fe97b3a83cd4eaed1969e174247359 68228595ca921e5cd8e1ea8a9cceeaf8ef85a8cc946d78f65972d698b0a9 badced937b71ca6862ba0e88860fdcf03f9ed7978a9bdaaa506f95f853e8 c019faedcf177e63f3070c1c575781a88a72b354e1c579d56dc91e64266c 9c9eb299a9e68f9479702cd01f5d5e3a4157267085967a7de0026db20adf 5ff32062fe4e07d263ddd929d0f757c202000e6918dfe78cad543c6e78bb de4a9337a7ecdab439582938bd2884f82c17579883a88e98542fc0c2e51f 698b039cf420ee08547ef103259fdcbbfedb862c0c1fdd9686facafdad35 ca3ea60be104cb8ab6da2290336722f58738d66ebba67a4a58fba92fba96 ec15059438f8ef6081c67f6c2e1d8b517cc50f03fe151c8f0bfdef72ab2b e014a2be0f62763a6c79dc5e38a1900ea98efc31a04041230d572358ef6d dac5790ed70b34c81e4b3a93849e38675c638eb9785a5a4e6f6e62f599bc 2353e26cb147ce5a3a74a96f429b2e946cf81da19026c9951f8adb5a058f 2126f68b335cd34a67126e28aeaaa9e4ab578c6045a476eb312733b37de4 1e13a03a64a3029be530331983a8f69db325cad943bd44dbf667184c1b5c be71a01afaefca76f07dbcccb9fbd6b9d5e2557f8ae54afd826ca6bbc64c 05adaccabe3d5ac2f8e444bbc8e6656531331d362fabdf91785d2fe75d35 4e53fc2eb1ef7610acaf6d1ca17b9bcbdf8ddb2ebbde230d6b256d2c6bcc 3f415a872b28dfb17854d352474b4963d8e5143ed56ed7aedb945f51f897 a5e93bd27431bd61442a88ba0402ec9d1a533e48bc0c8cf98e6ab2b10938 267dbd154906e1ba120edefd48e25824365bab1bcd48bda464dc88230780 3581796d449876412663a29ae2d7c164097c997cfdebac31e26d3bbc541f 53e7a518eca928d39b2f81be2ac107a4fc808f6784ecf9edb710bb060561 a3ece48242c6c40c7894307c019d54112ba346f413dbc2eebbaa8eabfe23 4e464881ac520336a378b0517eb27d800edb071a327a7a43b1740b9e457a 2c1e08c4084edf6bc53d7701ab630f3879b8d79015c35fd294e9d45923c2 88ad0945909580e0a4320304087277329a09f195c51ed3f7ae39f4d7d312 0b5c1331261dfec417e4d685e1d0e5068ed5f4e7b6aa3fe8b92fa4644520 cb0b307770cf49cd227535614bac799fd747387eb222db28b43b48578c4b d6cfa5ea8c9131213463932df2e809c42df45683f4477414f469f3ad67e5 0f3645e94236aad349a243d91dcfb90c47d7c6a20b02724d77ed084d2ca9 f21b087a2882747c5247fc949e1b9008beddb3774ee95fb7f1295dc93d9d 7a69cdfbbd385d0419bec4a0d0d882ff3dd2e747b2eeae696ca15e345581 ecd1f4340e020a2c3da3dad86d2e7b9e4f0b529a778af3373c9f2c04b9c1 59a235b0dc109b02a806262003b3b24532c2bc275c80b5d68c102025d943 03c558c0e8be9b740d635890e5da58192fe1f8a2e72f251b9b607c0561be 33278b4c601533d8dd7c39c4d4f55c50f25e4a6ba67b17b47de78bfbcb20 6faff39c29fe750dd8aa5ceac880c56063c99164d08a8265b3a550f640ff 288ce35448c3f7e2f1cb7a1b279277cd6db09143a742164f9f88caf9be08 9a6d7d2b47a0f17c4c129979caa8df95f6621d44a27a0d4ea04cc0e81789 049869b2a6355b33217bdf225e7d3a24e9802e28e52afabcb6d09bd90e82 b75abc9772eb5b3c671b0a3af187c72b119b7cd8ceaecc730db8341bdc65 cdeee8f4fa9ad00a707d11908872f0c8f5ce5071745bc88592b08a7886e5 6d88b3c659130b532bba745cc6600b4357c52d0ae4d5da5fa7bdc15934de 08f732fc467d9fbe318e4b732d88dab715f4ca3a6bb1d0e8ba04683690af ec3c9d916a59b9b97061186fff6fc675535aaffdada9313f91b7030f980e 43cbbc6b47f609c3a1d5bc5989e217a3337213dd198ac52db310fb634d81 bd53157c03f820c1370fba547a18c9a7e353e233a79cd1d05bd20c2f6b11 703857189571dc6c79a6345be926a86c7fd013a430eb9a4b5aa4d842b1e0 d2a4522928c093f665cde74ccde3ce933f7ab3c8e6a7e666b8bd265a5439 1ab21e5b56a15ec1822734c58dc3bfc9c347589e70c9c08c0b2a301b7d5f 483f6a2f5d00f969cffd844ec3910c6e14b3936577aa809335f07542166f 4d1d11d0ca1bb4d0921a37044dc46d0708dc278ab743c7cbb3adb14e025b d362691ff00e47ec10c116a60580f44d3059ef0ecdf1527e5ee44cdbb8e1 1e7d5129726a069f209bfb2ca93ea0cc92a60791feaf534ca528e5281ec3 22d5dd4835053a99eefdb3ccc4a384521311f78bdaf2be004ff6a8cde383 d60dd24a3a5c8ff96fd07de5acecfae9f3cd8a2b386badb34ffc2bb96db6 f6d68154917d3363d855208d49ef64a18b89c5c69ff698c9d7fd51f946cd d14b06e7b59e26a17d514d04b117e7de65e64de69f3de0c00f16fcfe7d96 7b649c8d59bec9ac1d0ccfc1079db44adde902116364b61a90458705b1f0 76256527529498973ebe9b8cc747ce752d2aa3263626cc6a0036c3f5e00f c758ae19b7c3fb54d6eb8d1cd1bd55f5210f6e75ff9bcddad5f58dce901b 4e501f2b8564bf2d8b85cb3447104d2cfd7cdb8629a53ea3db3ab1d48e64 abe735eea6f8f16278ff4eff64e568d42b5fca24cdbcdd8105aac45e4910 b40abdb32475b413c56e1a4b093359191930fafab32a986a68d39fa5063d 42ce59dbfaa082b68c9406a971ea84b0633460821b114c4b0a72c65989c9 afc085443347fd4f6f5cf17f3ff5b291b558707d0831b8accc8e388049b9 bf6d60b403cad3af1d15d99957a1d80b934b43d0f812ce544ea30665533f 6ed8c35aa5c19ef1fea293dafac0e7d4827e7ba7f06767db015211314373 1807de150d69ce33027d12c346754b1e6feacce9b1db31d91b714f90f117 9475bd9533f302b09db2708038e62731196692edaa98547acb08a999d3be 5e85b29ad31e1a90c89831aab6de1530314a026227eec84eff32e51bee08 d81970bf96bf4c4319ebe678d0672654e26a3afcc60d3290813119ed3be6 340257986f56ad321b7be265d481713c471060ee9c339a05adb9bf438e96 da2b76d431c1f0ce24d0ca9a3397fbea5874380de0c1c8863e966760d622 72e04666730a5188cc070cba1b170f7eb64679c161e2735e45e40e097fa0 949e5df76f0df65ac805d03ee310353acff306f253e8042049cca316c751 2238d65265f922e438f9644467eb14a7d28dac9aa3520593aa0b4faa1fe5 7c32f15ef171165db77d34b7932e8186962f288c2dd8e4af1af4fbdc358e 923894b65c30054793b82ebde2dacb0afd2f09d5378f5acfbbb98764bd96 b837e08681df09ff6c341bee01da1a65d57ef1fce7ce2acd88f728cef86b 18d165c8d9e1297374d748b9cd7b18c88e19314dfae0b81c9982c81b4042 6ecdeb16146fdfbdd93f62e1b4e37b48e66aa5c67cde428654771b3cabde becf573d5869157a96113a6b377f4ed576c6fd56077c00902c4d13aebdd6 0bc988f689c338b12c03e1cae9ca46a84a023750fc31931ee72d93afd1c8 e263e2d8af3906825a228b8abb942df1a01bec02ac7467796e52bcc61b14 c231ecbca2dcb65b535efbbb1eedf80608b0c88d5eed8d0096ae9a7e2553 6f506606366a2fd51ff7a1a2011b2d6e4abbd839eee76cb8fd74b2b200d6 343cf43ab56a939cea081fefead2ddee2e16475ab4fe1f52c780a62e88af 434cf870796727b0b3b98f668724e76d01937f9cfee749b69174ba521d7e e4565fde217dc83ab8ab63392d4331b95c6c7d106ab4a2cc33d4694a0de7 def49f1c4cc27579bff5a5bd3c31a0010c5df620423d21ec6588a4eb1be0 5ba37d4c5d4fc007e3e703c150e6bdfc426772c7260e089b76399725d782 d4377686f5b4b5cc368d2acee8491148f0949673e5568b4e7e04c23731dd dbfa0a0b01fded78222baf674dc0b24ec11565e5a61b8faa02ba9e812b14 5a3d339eb928466be09ccdc178278bd11f2a996e7868c35c338bd23698c5 63379a25ba048c001839ba6bdd8b6c4b87b1a0d7302eeb54b58aaa3ab2ca 5d96fe57967dd26d45bee77b40ce5328cd514077dca3fd3896dab8720527 bb318f1c3edfc51e55f4900c2dfd875bb0ca59a59d93608e66a645e65457 11da372f4330644d1ec827e16cdbaa6933e68d6b12087f8d5443b5ea52c1 5f5aefcdef3549f72098371eb91cf0051f3c9883eae32957594e6287e81d 8722e878a360a1c4828d032cf68a5bb04f7aaf652bdf29a0dc0e37c68a09 bbcabdcf3b0a75bb1d99450ed5777cf5fa555d6041ef7bd48c6e645b1197 57e75b735c99db6e4f16418401959a9d35ae04eb6cfe65a481595987e41b 15548c932ebec14fcd779d6ce29afa578e0a82b8136b10e4d66f4c659be4 249c1314c4376cf941799aad3a6aef7227f5ec936e16e06de609d54452d5 5c81b81bc936f09b32a60dc601aaefde44b75730e2f383ecdc206fab6c92 9c3b894447a9cd1c4f12145e0dc1644902a2c562f4920b79c41d048f202c f3e3c6245879f29c8cd6a1b73b2bfeaa9d8f609530bb7c2c5097365e082e 36f2ac79640b586b90c76e50b839173de22140ba272f2133b9d914e49d68 bc3b6c4ecdbeb79f7a6e4dcfe5c07015544ace62718d887f398aab697cc3 ebbe7f79a5cdc9f0d69a83be5c543372b7550e45cbed560f52af79838dfa 3292271cbd12c1386841b20a95bbbd09dc06bf9efaab5aaf16dca6d793fe cbba3c0654fb5289529933ed0a8e55e3ef14575b51e12e17f94a5513096d 8c91813f80553cf21faa3bbb9911b2828fd9f36efe25eff5e84b30edf885 7b1024616ddc2b199cf76c70718d6b8f7572d8d3e05605fbeb1c845e36a0 ce595241bcb90c35f4e0321bb4040ad46aedc425729da503b35216f84d0f 5e3e6b5a912eb8af31dd081fd1bef75cadf4bee8e4b902efe26b967c16cc a0add43e55836a1a214b7b423ed5c25045c1f64f058ad9f8132b3395dde2 866d81090c51be57bfd66db5d7842353c45133cf048dc7a3d77e459c6a5c 87acfe54a5cb694336732534f33bb05b4296da616036e8016d0e99e86e40 3d04e5aa851cc51deb6ef8f0a0423c5b0280cb3a7217ab4000bf6be3ae83 f8a82782adabc12b2fb301628aae6f968e5e034792dfe53983b9fa03d5c8 daf76d393721a18a7be7bc87599d9f21909ac5ee936b5ef0b5aa10d42704 55ab89d7f1ba3d9ecab85196f2d34c82bb7ca0dcfaa15ae28406f2fb47ba 9d848ca5c4ccf4df48b665792c6aad0b1a5d2ec97518bf3919824ea773a6 f74e9df89423f14c719dd0e6ab16268320b930ad32494fa4d5648f164bc0 9e8bca7f1923fa8ea342e7be87ec831cef240677571c65c53689615b27ef 8561de5e65956e0508146f0ae62e149d655a729e274a8719cabc1aef549e b6808d35ed77c4c63e6362a8d8af2c8cd5272a0ec6360f0f3c3148863b34 bdc131762c9e9fce819614ab4aecd0ec148c81cabb68f62d235cf60b0add 1ccdfa4a46425f63a763033929a8f3627857f6e0a636beb6f9c7b8c68abe 789de600e26b3dbd6dba229555bebb1526a54564faf485126307b2f34a26 992d8a9eb70e68530f1ddf39eb30275b7430737b20e7a3f6bbd95862f288 4fffa1dd528a001a63cf4aad880f8970920873ac8ef2f3e869a28dbdaab4 c40d88bc43283d89d9df440409f9cb966f7dba90b78d3dae8913b14d6dde 8a29f4052abd32473f5376ec13d4824c3a2fd0f8015fc9661539fd55b24c 6d3aec1fc79bd842bb6d1e27524886ef91c368f96cb0be7365081b62ff08 8a38162ea0fa9505d9a09c8f445834a1de185de752228e038dcf3221612b d185c37ed3195c2e45b45908b0bbbbb3eea049dbd33b1ba89c6d03e0d065 5d8ce9f84d5ea52e213b48d42af5f43ac881af2dcf000da33a6bf6182097 77d6aa8be5f2531fb2ff9cb4183b040641a99e5e09087a897294c6cc7044 b402f5b5aab3ad43c7560e3c8bcb4785b12a8e5b15966b9c762286273e02 4d3383c6bed4008cedad27095b305239fb7b78386376e26d9885f37439ee a42359e5c8f671e2602a86a0979ee2b4f22f1f08b531cdb8109ee39645df 0c539684c0eb15526895686027d9cc0d0ca7dd6c84a902951549fd1048c2 177d6ff5f17d2863877975c76a496125cb3c0559d317c938ca34e1f17214 1a51529904b65a4d3c3b1f13c4e74733aef8542c98db691fb1bb98b1ab55 3bc5e0baafba68b40014f747860c7ad21651ef12a2d234c4ebcecb4c7b68 c7c81ce38a04a58db47d375a13e515eb91c7ff3317f4a4b3a1e5bd07ba20 0efe7579413c5175923f5a8194af2aec660dfd24e449c5f8da72d61c930f e786b3445b02e27ac2a238ee53496553fe444a8f4edb3e66a4b09319087c aa3bfee5656ba0780fc3eedef5f5f68ab2ee3e73f6f456b08c06fe6132a7 e7cf377a02654412e6d469b1811ddae28f5eed468aca3b8ea9937c366685 3cd0df8c7e9c98d5df3516bfbb4f0013933e0865ec988c52de63a06b1b76 d54f6b7336d6cc5d577a5d40aa981f13ce827cd2d3bd9f2955dbd4515216 f4b65d0842189dc202a251328abdeb92a16eb65d525fb97eb0f310ceab2e cdd64eb45cf9834d9584e27aeea53fd83e22661a7c04431d14112dc9ca5e e63a730abec9246dde55dc096b547540264f9cd0ed84d4206056f317fb31 4a922d292ae454d9c65d4799db19ee716c9d57366a7e8fc2567569ac92d1 1d529926401a7604b2427db94d2149ad181e9106b4cf83381da06387903c 8fdc17ff61f71824f513a1a3184e810823efbde3405fb668be09b0b3b800 5776e3a0a08c0aaea464524f7a798f1b8294bf9f037684d2d8830175dcaa bf3d4c1d8c57c29a2dc572db8c61dd3333e0bb606b41560cba3ed7f6414f be43833793a646261b86dbfda229a98461fbfd95351a51b681cc517a830b 27b6d8d15ebffc567307873d0a42c22c794f6320002979151777a49d137a 96584ee89762f7cefde6085a3ff1615e20c5d07aeac413ff211d26e38b3a 7bec8c18ca5543dffda4853e480f9b087fb76439bcb38643f376966a4419 76066c3ab8af87edbc66395977f724d5600bb5e489b1d39e9d1756 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Courier-Bold.afm0100664000212600000240000007602407477306250016051 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Courier-Bold FullName Courier Bold FamilyName Courier Weight Bold ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -43 -278 681 871 CapHeight 583 XHeight 437 Descender -205 Ascender 624 StartCharMetrics 316 C 32 ; WX 600 ; N space ; B 375 0 375 0 ; C 33 ; WX 600 ; N exclam ; B 220 -15 381 638 ; C 34 ; WX 600 ; N quotedbl ; B 136 312 464 602 ; C 35 ; WX 600 ; N numbersign ; B 62 -92 538 675 ; C 36 ; WX 600 ; N dollar ; B 83 -123 517 684 ; C 37 ; WX 600 ; N percent ; B 80 -15 521 617 ; C 38 ; WX 600 ; N ampersand ; B 75 -14 508 550 ; C 39 ; WX 600 ; N quoteright ; B 147 331 351 623 ; C 40 ; WX 600 ; N parenleft ; B 264 -153 488 632 ; C 41 ; WX 600 ; N parenright ; B 117 -153 341 632 ; C 42 ; WX 600 ; N asterisk ; B 83 208 517 622 ; C 43 ; WX 600 ; N plus ; B 42 0 558 560 ; C 44 ; WX 600 ; N comma ; B 147 -158 351 134 ; C 45 ; WX 600 ; N hyphen ; B 42 229 558 329 ; C 46 ; WX 600 ; N period ; B 225 -15 375 117 ; C 47 ; WX 600 ; N slash ; B 83 -113 517 695 ; C 48 ; WX 600 ; N zero ; B 83 -15 517 638 ; C 49 ; WX 600 ; N one ; B 83 0 517 638 ; C 50 ; WX 600 ; N two ; B 54 0 508 638 ; C 51 ; WX 600 ; N three ; B 66 -15 529 638 ; C 52 ; WX 600 ; N four ; B 75 0 508 622 ; C 53 ; WX 600 ; N five ; B 66 -15 529 622 ; C 54 ; WX 600 ; N six ; B 105 -15 540 638 ; C 55 ; WX 600 ; N seven ; B 75 -1 508 622 ; C 56 ; WX 600 ; N eight ; B 83 -15 517 638 ; C 57 ; WX 600 ; N nine ; B 106 -15 541 638 ; C 58 ; WX 600 ; N colon ; B 225 -15 375 437 ; C 59 ; WX 600 ; N semicolon ; B 147 -158 351 437 ; C 60 ; WX 600 ; N less ; B 42 54 544 501 ; C 61 ; WX 600 ; N equal ; B 42 138 558 422 ; C 62 ; WX 600 ; N greater ; B 56 53 558 500 ; C 63 ; WX 600 ; N question ; B 104 -15 517 598 ; C 64 ; WX 600 ; N at ; B 76 -152 509 620 ; C 65 ; WX 600 ; N A ; B -21 0 621 583 ; C 66 ; WX 600 ; N B ; B 13 0 571 583 ; C 67 ; WX 600 ; N C ; B 33 -14 564 597 ; C 68 ; WX 600 ; N D ; B 13 0 550 583 ; C 69 ; WX 600 ; N E ; B 13 0 550 583 ; C 70 ; WX 600 ; N F ; B 13 0 550 583 ; C 71 ; WX 600 ; N G ; B 33 -14 592 597 ; C 72 ; WX 600 ; N H ; B 23 0 581 583 ; C 73 ; WX 600 ; N I ; B 83 0 517 583 ; C 74 ; WX 600 ; N J ; B 54 -14 613 583 ; C 75 ; WX 600 ; N K ; B 13 0 602 583 ; C 76 ; WX 600 ; N L ; B 33 0 571 583 ; C 77 ; WX 600 ; N M ; B -19 0 623 584 ; C 78 ; WX 600 ; N N ; B -8 0 592 583 ; C 79 ; WX 600 ; N O ; B 21 -14 579 597 ; C 80 ; WX 600 ; N P ; B 13 0 529 583 ; C 81 ; WX 600 ; N Q ; B 21 -145 579 597 ; C 82 ; WX 600 ; N R ; B 13 0 619 583 ; C 83 ; WX 600 ; N S ; B 62 -14 538 597 ; C 84 ; WX 600 ; N T ; B 42 0 558 583 ; C 85 ; WX 600 ; N U ; B 10 -14 590 583 ; C 86 ; WX 600 ; N V ; B -21 0 621 583 ; C 87 ; WX 600 ; N W ; B -10 0 610 583 ; C 88 ; WX 600 ; N X ; B 10 0 590 583 ; C 89 ; WX 600 ; N Y ; B 21 0 579 583 ; C 90 ; WX 600 ; N Z ; B 73 0 527 583 ; C 91 ; WX 600 ; N bracketleft ; B 250 -148 475 627 ; C 92 ; WX 600 ; N backslash ; B 83 -113 517 695 ; C 93 ; WX 600 ; N bracketright ; B 125 -148 350 627 ; C 94 ; WX 600 ; N asciicircum ; B 83 325 517 652 ; C 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ; C 96 ; WX 600 ; N quoteleft ; B 249 348 453 602 ; C 97 ; WX 600 ; N a ; B 42 -16 571 450 ; C 98 ; WX 600 ; N b ; B -8 -14 571 624 ; C 99 ; WX 600 ; N c ; B 54 -16 565 450 ; C 100 ; WX 600 ; N d ; B 33 -14 613 624 ; C 101 ; WX 600 ; N e ; B 33 -16 550 450 ; C 102 ; WX 600 ; N f ; B 75 0 571 623 ; C 103 ; WX 600 ; N g ; B 33 -205 592 451 ; C 104 ; WX 600 ; N h ; B 13 0 581 624 ; C 105 ; WX 600 ; N i ; B 62 0 538 623 ; C 106 ; WX 600 ; N j ; B 117 -205 488 623 ; C 107 ; WX 600 ; N k ; B 33 0 571 624 ; C 108 ; WX 600 ; N l ; B 62 0 538 624 ; C 109 ; WX 600 ; N m ; B -19 0 623 450 ; C 110 ; WX 600 ; N n ; B 23 0 571 450 ; C 111 ; WX 600 ; N o ; B 42 -16 558 450 ; C 112 ; WX 600 ; N p ; B -8 -205 571 450 ; C 113 ; WX 600 ; N q ; B 33 -205 613 450 ; C 114 ; WX 600 ; N r ; B 54 0 571 449 ; C 115 ; WX 600 ; N s ; B 73 -16 527 450 ; C 116 ; WX 600 ; N t ; B 13 -16 529 591 ; C 117 ; WX 600 ; N u ; B 13 -13 571 437 ; C 118 ; WX 600 ; N v ; B 0 0 600 437 ; C 119 ; WX 600 ; N w ; B 0 0 600 437 ; C 120 ; WX 600 ; N x ; B 21 0 579 437 ; C 121 ; WX 600 ; N y ; B 21 -205 579 437 ; C 122 ; WX 600 ; N z ; B 85 0 519 437 ; C 123 ; WX 600 ; N braceleft ; B 167 -153 433 623 ; C 124 ; WX 600 ; N bar ; B 250 -153 350 622 ; C 125 ; WX 600 ; N braceright ; B 167 -153 433 623 ; C 126 ; WX 600 ; N asciitilde ; B 62 179 538 385 ; C 161 ; WX 600 ; N exclamdown ; B 220 -227 381 426 ; C 162 ; WX 600 ; N cent ; B 83 -44 499 661 ; C 163 ; WX 600 ; N sterling ; B 33 0 550 598 ; C 164 ; WX 600 ; N fraction ; B 21 102 580 500 ; C 165 ; WX 600 ; N yen ; B 21 0 579 580 ; C 166 ; WX 600 ; N florin ; B 57 -123 548 638 ; C 167 ; WX 600 ; N section ; B 36 -170 564 583 ; C 168 ; WX 600 ; N currency ; B 73 64 527 519 ; C 169 ; WX 600 ; N quotesingle ; B 236 312 364 602 ; C 170 ; WX 600 ; N quotedblleft ; B 98 348 502 602 ; C 171 ; WX 600 ; N guillemotleft ; B 33 20 571 415 ; C 172 ; WX 600 ; N guilsinglleft ; B 33 20 342 415 ; C 173 ; WX 600 ; N guilsinglright ; B 263 20 571 415 ; C 174 ; WX 600 ; N fi ; B -14 0 619 624 ; C 175 ; WX 600 ; N fl ; B -17 0 617 623 ; C 177 ; WX 600 ; N endash ; B 42 229 558 329 ; C 178 ; WX 600 ; N dagger ; B 94 -92 506 622 ; C 179 ; WX 600 ; N daggerdbl ; B 94 -92 506 622 ; C 180 ; WX 600 ; N periodcentered ; B 225 214 375 346 ; C 182 ; WX 600 ; N paragraph ; B 49 -174 558 583 ; C 183 ; WX 600 ; N bullet ; B 150 154 449 453 ; C 184 ; WX 600 ; N quotesinglbase ; B 147 -158 351 134 ; C 185 ; WX 600 ; N quotedblbase ; B 87 -120 491 134 ; C 186 ; WX 600 ; N quotedblright ; B 87 348 491 602 ; C 187 ; WX 600 ; N guillemotright ; B 33 20 571 415 ; C 188 ; WX 600 ; N ellipsis ; B 25 -15 575 117 ; C 189 ; WX 600 ; N perthousand ; B 0 0 600 618 ; C 191 ; WX 600 ; N questiondown ; B 83 -227 496 386 ; C 193 ; WX 600 ; N grave ; B 125 496 350 696 ; C 194 ; WX 600 ; N acute ; B 250 496 475 696 ; C 195 ; WX 600 ; N circumflex ; B 125 497 476 696 ; C 196 ; WX 600 ; N tilde ; B 115 523 485 656 ; C 197 ; WX 600 ; N macron ; B 125 546 475 626 ; C 198 ; WX 600 ; N breve ; B 125 503 475 687 ; C 199 ; WX 600 ; N dotaccent ; B 240 534 360 654 ; C 200 ; WX 600 ; N dieresis ; B 136 534 464 654 ; C 202 ; WX 600 ; N ring ; B 177 486 423 727 ; C 203 ; WX 600 ; N cedilla ; B 180 -229 407 0 ; C 205 ; WX 600 ; N hungarumlaut ; B 125 496 475 694 ; C 206 ; WX 600 ; N ogonek ; B 250 -208 463 0 ; C 207 ; WX 600 ; N caron ; B 125 497 476 696 ; C 208 ; WX 600 ; N emdash ; B -29 229 629 329 ; C 225 ; WX 600 ; N AE ; B -20 0 614 583 ; C 227 ; WX 600 ; N ordfeminine ; B 118 182 489 595 ; C 232 ; WX 600 ; N Lslash ; B 12 0 571 583 ; C 233 ; WX 600 ; N Oslash ; B 9 -70 590 638 ; C 234 ; WX 600 ; N OE ; B -20 0 612 583 ; C 235 ; WX 600 ; N ordmasculine ; B 122 182 480 595 ; C 241 ; WX 600 ; N ae ; B -13 -16 612 450 ; C 245 ; WX 600 ; N dotlessi ; B 62 0 538 437 ; C 248 ; WX 600 ; N lslash ; B 62 0 538 624 ; C 249 ; WX 600 ; N oslash ; B 23 -70 573 494 ; C 250 ; WX 600 ; N oe ; B -11 -16 613 450 ; C 251 ; WX 600 ; N germandbls ; B 13 -16 529 623 ; C -1 ; WX 600 ; N Udieresis ; B 10 -14 590 798 ; C -1 ; WX 600 ; N Uacute ; B 10 -14 590 839 ; C -1 ; WX 600 ; N Scedilla ; B 62 -229 538 597 ; C -1 ; WX 600 ; N Tcaron ; B 42 0 558 839 ; C -1 ; WX 600 ; N Scaron ; B 62 -14 538 839 ; C -1 ; WX 600 ; N Rcaron ; B 13 0 619 839 ; C -1 ; WX 600 ; N Racute ; B 13 0 619 839 ; C -1 ; WX 600 ; N Sacute ; B 62 -14 538 839 ; C -1 ; WX 600 ; N Otilde ; B 21 -14 579 799 ; C -1 ; WX 600 ; N ucircumflex ; B 13 -13 571 696 ; C -1 ; WX 600 ; N Ohungarumlaut ; B 21 -14 579 838 ; C -1 ; WX 600 ; N Uhungarumlaut ; B 10 -14 590 838 ; C -1 ; WX 600 ; N Yacute ; B 21 0 579 839 ; C -1 ; WX 600 ; N Eth ; B 0 0 550 583 ; C -1 ; WX 600 ; N Dcroat ; B 0 0 550 583 ; C -1 ; WX 600 ; N Zacute ; B 73 0 527 839 ; C -1 ; WX 600 ; N Uring ; B 10 -14 590 871 ; C -1 ; WX 600 ; N gbreve ; B 33 -205 592 687 ; C -1 ; WX 600 ; N eogonek ; B 33 -208 550 450 ; C -1 ; WX 600 ; N edotaccent ; B 33 -16 550 654 ; C -1 ; WX 600 ; N ecaron ; B 33 -16 550 696 ; C -1 ; WX 600 ; N Ugrave ; B 10 -14 590 839 ; C -1 ; WX 600 ; N Thorn ; B 14 0 523 583 ; C -1 ; WX 600 ; N eacute ; B 33 -16 550 696 ; C -1 ; WX 600 ; N edieresis ; B 33 -16 550 654 ; C -1 ; WX 600 ; N dcaron ; B 33 -14 681 637 ; C -1 ; WX 600 ; N ccedilla ; B 54 -229 565 450 ; C -1 ; WX 600 ; N ccaron ; B 54 -16 565 696 ; C -1 ; WX 600 ; N cacute ; B 54 -16 565 696 ; C -1 ; WX 600 ; N aogonek ; B 42 -208 580 450 ; C -1 ; WX 600 ; N aring ; B 42 -16 571 727 ; C -1 ; WX 600 ; N atilde ; B 42 -16 571 656 ; C -1 ; WX 600 ; N abreve ; B 42 -16 571 687 ; C -1 ; WX 600 ; N egrave ; B 33 -16 550 696 ; C -1 ; WX 600 ; N agrave ; B 42 -16 571 696 ; C -1 ; WX 600 ; N aacute ; B 42 -16 571 696 ; C -1 ; WX 600 ; N adieresis ; B 42 -16 571 654 ; C -1 ; WX 600 ; N Uogonek ; B 10 -208 590 583 ; C -1 ; WX 600 ; N ugrave ; B 13 -13 571 696 ; C -1 ; WX 600 ; N uacute ; B 13 -13 571 696 ; C -1 ; WX 600 ; N udieresis ; B 13 -13 571 654 ; C -1 ; WX 600 ; N tcaron ; B 13 -16 530 637 ; C -1 ; WX 600 ; N scommaaccent ; B 73 -278 527 450 ; C -1 ; WX 600 ; N Zcaron ; B 73 0 527 839 ; C -1 ; WX 600 ; N ecircumflex ; B 33 -16 550 696 ; C -1 ; WX 600 ; N Ucircumflex ; B 10 -14 590 839 ; C -1 ; WX 600 ; N acircumflex ; B 42 -16 571 696 ; C -1 ; WX 600 ; N Zdotaccent ; B 73 0 527 798 ; C -1 ; WX 600 ; N scaron ; B 73 -16 527 696 ; C -1 ; WX 600 ; N Amacron ; B -21 0 621 769 ; C -1 ; WX 600 ; N sacute ; B 73 -16 527 696 ; C -1 ; WX 600 ; N Tcommaaccent ; B 42 -278 558 583 ; C -1 ; WX 600 ; N Ydieresis ; B 21 0 579 798 ; C -1 ; WX 600 ; N thorn ; B -8 -205 571 624 ; C -1 ; WX 600 ; N Emacron ; B 13 0 550 769 ; C -1 ; WX 600 ; N Ograve ; B 21 -14 579 839 ; C -1 ; WX 600 ; N Oacute ; B 21 -14 579 839 ; C -1 ; WX 600 ; N Odieresis ; B 21 -14 579 798 ; C -1 ; WX 600 ; N Ntilde ; B -8 0 592 799 ; C -1 ; WX 600 ; N Ncaron ; B -8 0 592 839 ; C -1 ; WX 600 ; N Nacute ; B -8 0 592 839 ; C -1 ; WX 600 ; N Lcaron ; B 33 0 571 598 ; C -1 ; WX 600 ; N Lacute ; B 33 0 571 839 ; C -1 ; WX 600 ; N Idotaccent ; B 83 0 517 798 ; C -1 ; WX 600 ; N racute ; B 54 0 571 696 ; C -1 ; WX 600 ; N Icircumflex ; B 83 0 517 839 ; C -1 ; WX 600 ; N ohungarumlaut ; B 42 -16 558 694 ; C -1 ; WX 600 ; N otilde ; B 42 -16 558 656 ; C -1 ; WX 600 ; N Euro ; B 4 -14 538 597 ; C -1 ; WX 600 ; N ocircumflex ; B 42 -16 558 696 ; C -1 ; WX 600 ; N onesuperior ; B 166 247 434 638 ; C -1 ; WX 600 ; N twosuperior ; B 149 247 429 637 ; C -1 ; WX 600 ; N threesuperior ; B 157 238 442 637 ; C -1 ; WX 600 ; N Igrave ; B 83 0 517 839 ; C -1 ; WX 600 ; N Iacute ; B 83 0 517 839 ; C -1 ; WX 600 ; N Imacron ; B 83 0 517 769 ; C -1 ; WX 600 ; N Iogonek ; B 83 -208 517 583 ; C -1 ; WX 600 ; N Idieresis ; B 83 0 517 798 ; C -1 ; WX 600 ; N Gbreve ; B 33 -14 592 831 ; C -1 ; WX 600 ; N Umacron ; B 10 -14 590 769 ; C -1 ; WX 600 ; N Kcommaaccent ; B 13 -278 602 583 ; C -1 ; WX 600 ; N ograve ; B 42 -16 558 696 ; C -1 ; WX 600 ; N Scommaaccent ; B 62 -278 538 597 ; C -1 ; WX 600 ; N Eogonek ; B 13 -208 587 583 ; C -1 ; WX 600 ; N oacute ; B 42 -16 558 696 ; C -1 ; WX 600 ; N Edotaccent ; B 13 0 550 798 ; C -1 ; WX 600 ; N iogonek ; B 62 -208 540 623 ; C -1 ; WX 600 ; N gcommaaccent ; B 33 -205 592 721 ; C -1 ; WX 600 ; N odieresis ; B 42 -16 558 654 ; C -1 ; WX 600 ; N ntilde ; B 23 0 571 656 ; C -1 ; WX 600 ; N ncaron ; B 23 0 571 696 ; C -1 ; WX 600 ; N Ecaron ; B 13 0 550 839 ; C -1 ; WX 600 ; N Ecircumflex ; B 13 0 550 839 ; C -1 ; WX 600 ; N scedilla ; B 73 -229 527 450 ; C -1 ; WX 600 ; N rcaron ; B 54 0 571 696 ; C -1 ; WX 600 ; N Egrave ; B 13 0 550 839 ; C -1 ; WX 600 ; N Eacute ; B 13 0 550 839 ; C -1 ; WX 600 ; N Gcommaaccent ; B 33 -278 592 597 ; C -1 ; WX 600 ; N Rcommaaccent ; B 13 -278 619 583 ; C -1 ; WX 600 ; N Edieresis ; B 13 0 550 798 ; C -1 ; WX 600 ; N nacute ; B 23 0 571 696 ; C -1 ; WX 600 ; N uogonek ; B 13 -208 571 437 ; C -1 ; WX 600 ; N umacron ; B 13 -13 571 626 ; C -1 ; WX 600 ; N Dcaron ; B 13 0 550 839 ; C -1 ; WX 600 ; N lcaron ; B 62 0 538 637 ; C -1 ; WX 600 ; N Ccaron ; B 33 -14 564 839 ; C -1 ; WX 600 ; N Cacute ; B 33 -14 564 839 ; C -1 ; WX 600 ; N Ccedilla ; B 33 -229 564 597 ; C -1 ; WX 600 ; N degree ; B 125 243 475 596 ; C -1 ; WX 600 ; N Aogonek ; B -21 -208 621 583 ; C -1 ; WX 600 ; N minus ; B 42 230 558 330 ; C -1 ; WX 600 ; N multiply ; B 100 80 500 480 ; C -1 ; WX 600 ; N divide ; B 42 28 558 532 ; C -1 ; WX 600 ; N Aring ; B -21 0 621 871 ; C -1 ; WX 600 ; N trademark ; B -33 220 620 583 ; C -1 ; WX 600 ; N rcommaaccent ; B 54 -278 571 449 ; C -1 ; WX 600 ; N lacute ; B 62 0 538 840 ; C -1 ; WX 600 ; N omacron ; B 42 -16 558 626 ; C -1 ; WX 600 ; N Atilde ; B -21 0 621 799 ; C -1 ; WX 600 ; N icircumflex ; B 62 0 538 696 ; C -1 ; WX 600 ; N igrave ; B 62 0 538 696 ; C -1 ; WX 600 ; N ncommaaccent ; B 23 -278 571 450 ; C -1 ; WX 600 ; N lcommaaccent ; B 62 -278 538 624 ; C -1 ; WX 600 ; N plusminus ; B 42 0 558 624 ; C -1 ; WX 600 ; N onehalf ; B -34 0 629 638 ; C -1 ; WX 600 ; N onequarter ; B -34 0 629 638 ; C -1 ; WX 600 ; N threequarters ; B -43 0 630 637 ; C -1 ; WX 600 ; N iacute ; B 62 0 538 696 ; C -1 ; WX 600 ; N Abreve ; B -21 0 621 831 ; C -1 ; WX 600 ; N kcommaaccent ; B 33 -278 571 624 ; C -1 ; WX 600 ; N Omacron ; B 21 -14 579 769 ; C -1 ; WX 600 ; N imacron ; B 62 0 538 626 ; C -1 ; WX 600 ; N emacron ; B 33 -16 550 626 ; C -1 ; WX 600 ; N amacron ; B 42 -16 571 626 ; C -1 ; WX 600 ; N tcommaaccent ; B 13 -278 529 591 ; C -1 ; WX 600 ; N ydieresis ; B 21 -205 579 654 ; C -1 ; WX 600 ; N zdotaccent ; B 85 0 519 654 ; C -1 ; WX 600 ; N zcaron ; B 85 0 519 696 ; C -1 ; WX 600 ; N zacute ; B 85 0 519 696 ; C -1 ; WX 600 ; N yacute ; B 21 -205 579 696 ; C -1 ; WX 600 ; N uhungarumlaut ; B 13 -13 571 694 ; C -1 ; WX 600 ; N eth ; B 42 -16 558 646 ; C -1 ; WX 600 ; N uring ; B 13 -13 571 727 ; C -1 ; WX 600 ; N Ocircumflex ; B 21 -14 579 839 ; C -1 ; WX 600 ; N commaaccent ; B 183 -278 351 -59 ; C -1 ; WX 600 ; N copyright ; B -7 -15 606 598 ; C -1 ; WX 600 ; N registered ; B -7 -15 606 598 ; C -1 ; WX 600 ; N Acircumflex ; B -21 0 621 839 ; C -1 ; WX 600 ; N idieresis ; B 62 0 538 654 ; C -1 ; WX 600 ; N lozenge ; B 72 -19 529 593 ; C -1 ; WX 600 ; N Delta ; B 15 0 585 583 ; C -1 ; WX 600 ; N notequal ; B 42 22 558 525 ; C -1 ; WX 600 ; N radical ; B 12 -60 642 697 ; C -1 ; WX 600 ; N Agrave ; B -21 0 621 839 ; C -1 ; WX 600 ; N Aacute ; B -21 0 621 839 ; C -1 ; WX 600 ; N lessequal ; B 3 0 549 591 ; C -1 ; WX 600 ; N greaterequal ; B 35 0 582 591 ; C -1 ; WX 600 ; N logicalnot ; B 42 115 465 445 ; C -1 ; WX 600 ; N summation ; B 45 -97 538 671 ; C -1 ; WX 600 ; N partialdiff ; B 102 -16 524 590 ; C -1 ; WX 600 ; N Ncommaaccent ; B -8 -278 592 583 ; C -1 ; WX 600 ; N dcroat ; B 33 -16 613 624 ; C -1 ; WX 600 ; N brokenbar ; B 250 -153 350 622 ; C -1 ; WX 600 ; N Lcommaaccent ; B 33 -278 571 583 ; C -1 ; WX 600 ; N Adieresis ; B -21 0 621 798 ; C -1 ; WX 600 ; N mu ; B 13 -153 571 437 ; C -1 ; WX 600 ; N .notdef ; B 375 0 375 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -14 KPX A Ccedilla -22 KPX A G -10 KPX A O -15 KPX A Odieresis -15 KPX A Q -16 KPX A T -27 KPX A U -23 KPX A Uacute -23 KPX A Ucircumflex -23 KPX A Udieresis -23 KPX A Ugrave -23 KPX A V -59 KPX A W -13 KPX A Y -27 KPX A a 15 KPX A b 45 KPX A c -4 KPX A ccedilla -8 KPX A comma -47 KPX A d 4 KPX A e 2 KPX A g 0 KPX A guillemotleft -40 KPX A guilsinglleft -40 KPX A hyphen -19 KPX A o -3 KPX A period -62 KPX A q -4 KPX A quotedblright -84 KPX A quoteright -113 KPX A t -20 KPX A u -12 KPX A v -39 KPX A w -13 KPX A y -39 KPX Aacute C -14 KPX Aacute G -10 KPX Aacute O -15 KPX Aacute Q -16 KPX Aacute T -27 KPX Aacute U -23 KPX Aacute V -59 KPX Aacute W -13 KPX Aacute Y -27 KPX Aacute a 15 KPX Aacute b 45 KPX Aacute c -4 KPX Aacute comma -47 KPX Aacute d 4 KPX Aacute e 2 KPX Aacute g 0 KPX Aacute guillemotleft -40 KPX Aacute guilsinglleft -40 KPX Aacute hyphen -19 KPX Aacute o -3 KPX Aacute period -62 KPX Aacute q -4 KPX Aacute quoteright -113 KPX Aacute t -20 KPX Aacute u -12 KPX Aacute v -39 KPX Aacute w -13 KPX Aacute y -39 KPX Acircumflex C -14 KPX Acircumflex G -10 KPX Acircumflex O -15 KPX Acircumflex Q -16 KPX Acircumflex T -27 KPX Acircumflex U -23 KPX Acircumflex V -59 KPX Acircumflex W -13 KPX Acircumflex Y -27 KPX Acircumflex comma -47 KPX Acircumflex period -62 KPX Adieresis C -14 KPX Adieresis G -10 KPX Adieresis O -15 KPX Adieresis Q -16 KPX Adieresis T -27 KPX Adieresis U -23 KPX Adieresis V -59 KPX Adieresis W -13 KPX Adieresis Y -27 KPX Adieresis a 15 KPX Adieresis b 45 KPX Adieresis c -4 KPX Adieresis comma -47 KPX Adieresis d 4 KPX Adieresis g 0 KPX Adieresis guillemotleft -40 KPX Adieresis guilsinglleft -40 KPX Adieresis hyphen -19 KPX Adieresis o -3 KPX Adieresis period -62 KPX Adieresis q -4 KPX Adieresis quotedblright -84 KPX Adieresis quoteright -113 KPX Adieresis t -20 KPX Adieresis u -12 KPX Adieresis v -39 KPX Adieresis w -13 KPX Adieresis y -39 KPX Agrave C -14 KPX Agrave G -10 KPX Agrave O -15 KPX Agrave Q -16 KPX Agrave T -27 KPX Agrave U -23 KPX Agrave V -59 KPX Agrave W -13 KPX Agrave Y -27 KPX Agrave comma -47 KPX Agrave period -62 KPX Aring C -14 KPX Aring G -10 KPX Aring O -15 KPX Aring Q -16 KPX Aring T -27 KPX Aring U -23 KPX Aring V -59 KPX Aring W -13 KPX Aring Y -27 KPX Aring a 15 KPX Aring b 45 KPX Aring c -4 KPX Aring comma -47 KPX Aring d 4 KPX Aring e 2 KPX Aring g 0 KPX Aring guillemotleft -40 KPX Aring guilsinglleft -40 KPX Aring hyphen -19 KPX Aring o -3 KPX Aring period -62 KPX Aring q -4 KPX Aring quotedblright -84 KPX Aring quoteright -113 KPX Aring t -20 KPX Aring u -12 KPX Aring v -39 KPX Aring w -13 KPX Aring y -39 KPX Atilde C -14 KPX Atilde G -10 KPX Atilde O -15 KPX Atilde Q -16 KPX Atilde T -27 KPX Atilde U -23 KPX Atilde V -59 KPX Atilde W -13 KPX Atilde Y -27 KPX Atilde comma -47 KPX Atilde period -62 KPX B A 4 KPX B AE 3 KPX B Aacute 4 KPX B Acircumflex 4 KPX B Adieresis 4 KPX B Aring 4 KPX B Atilde 4 KPX B O -9 KPX B OE 11 KPX B Oacute -9 KPX B Ocircumflex -9 KPX B Odieresis -9 KPX B Ograve -9 KPX B Oslash -5 KPX B V -18 KPX B W -6 KPX B Y -39 KPX C A 8 KPX C AE 7 KPX C Aacute 8 KPX C Adieresis 8 KPX C Aring 8 KPX C H -13 KPX C K -8 KPX C O -14 KPX C Oacute -14 KPX C Odieresis -14 KPX Ccedilla A 3 KPX D A -25 KPX D Aacute -25 KPX D Acircumflex -25 KPX D Adieresis -25 KPX D Agrave -25 KPX D Aring -25 KPX D Atilde -25 KPX D J -32 KPX D T -27 KPX D V -30 KPX D W -13 KPX D X -37 KPX D Y -51 KPX F A -39 KPX F Aacute -39 KPX F Acircumflex -39 KPX F Adieresis -39 KPX F Agrave -39 KPX F Aring -39 KPX F Atilde -39 KPX F J -78 KPX F O -24 KPX F Odieresis -24 KPX F a -40 KPX F aacute -40 KPX F adieresis -40 KPX F ae -18 KPX F aring -40 KPX F comma -168 KPX F e -47 KPX F eacute -47 KPX F hyphen -55 KPX F i -46 KPX F j -54 KPX F o -51 KPX F oacute -51 KPX F odieresis -51 KPX F oe -16 KPX F oslash -51 KPX F period -187 KPX F r -32 KPX F u -1 KPX G A 6 KPX G AE 5 KPX G Aacute 6 KPX G Acircumflex 6 KPX G Adieresis 6 KPX G Agrave 6 KPX G Aring 6 KPX G Atilde 6 KPX G T -25 KPX G V 6 KPX G W 6 KPX G Y -14 KPX J A -8 KPX J AE -16 KPX J Adieresis -8 KPX J Aring -8 KPX K C -24 KPX K G -19 KPX K O -25 KPX K OE -4 KPX K Oacute -25 KPX K Odieresis -25 KPX K S -9 KPX K T -13 KPX K a 6 KPX K adieresis 6 KPX K ae 31 KPX K aring 6 KPX K e -6 KPX K hyphen -44 KPX K o -12 KPX K oacute -12 KPX K odieresis -12 KPX K u -22 KPX K udieresis -22 KPX K y -50 KPX L A 16 KPX L AE 16 KPX L Aacute 16 KPX L Adieresis 16 KPX L Aring 16 KPX L C -10 KPX L Ccedilla -11 KPX L G -10 KPX L O -7 KPX L Oacute -7 KPX L Ocircumflex -7 KPX L Odieresis -7 KPX L Ograve -7 KPX L Otilde -7 KPX L S -24 KPX L T -52 KPX L U -29 KPX L Udieresis -29 KPX L V -57 KPX L W -22 KPX L Y -52 KPX L hyphen 9 KPX L quotedblright -72 KPX L quoteright -99 KPX L u -10 KPX L udieresis -11 KPX L y -33 KPX N A -3 KPX N AE -3 KPX N Aacute -3 KPX N Adieresis -3 KPX N Aring -3 KPX N C -7 KPX N Ccedilla -6 KPX N G -6 KPX N O -5 KPX N Oacute -5 KPX N Odieresis -5 KPX N a -11 KPX N aacute -11 KPX N adieresis -11 KPX N ae 18 KPX N aring -11 KPX N comma -75 KPX N e -3 KPX N eacute -3 KPX N o -8 KPX N oacute -8 KPX N odieresis -8 KPX N oslash -3 KPX N period -93 KPX N u -8 KPX N udieresis -8 KPX O A -14 KPX O AE -14 KPX O Aacute -14 KPX O Adieresis -14 KPX O Aring -14 KPX O T -15 KPX O V -23 KPX O W -2 KPX O X -26 KPX O Y -43 KPX Oacute A -14 KPX Oacute T -15 KPX Oacute V -23 KPX Oacute W -2 KPX Oacute Y -43 KPX Ocircumflex T -15 KPX Ocircumflex V -23 KPX Ocircumflex Y -43 KPX Odieresis A -14 KPX Odieresis T -15 KPX Odieresis V -23 KPX Odieresis W -2 KPX Odieresis X -26 KPX Odieresis Y -43 KPX Ograve T -15 KPX Ograve V -23 KPX Ograve Y -43 KPX Oslash A -10 KPX Otilde T -15 KPX Otilde V -23 KPX Otilde Y -43 KPX P A -61 KPX P AE -59 KPX P Aacute -61 KPX P Adieresis -61 KPX P Aring -61 KPX P J -73 KPX P a -49 KPX P aacute -49 KPX P adieresis -49 KPX P ae -27 KPX P aring -49 KPX P comma -160 KPX P e -38 KPX P eacute -38 KPX P hyphen -33 KPX P o -42 KPX P oacute -42 KPX P odieresis -42 KPX P oe -13 KPX P oslash -42 KPX P period -178 KPX R C -14 KPX R Ccedilla -17 KPX R G -10 KPX R O -14 KPX R OE 5 KPX R Oacute -14 KPX R Odieresis -14 KPX R T -28 KPX R U -16 KPX R Udieresis -17 KPX R V -24 KPX R W -8 KPX R Y -28 KPX R a 14 KPX R aacute 14 KPX R adieresis 14 KPX R ae 40 KPX R aring 14 KPX R e 2 KPX R eacute 2 KPX R hyphen -25 KPX R o -3 KPX R oacute -3 KPX R odieresis -3 KPX R oe 29 KPX R u -7 KPX R uacute -8 KPX R udieresis -8 KPX R y -18 KPX S A -10 KPX S AE -10 KPX S Aacute -10 KPX S Adieresis -10 KPX S Aring -10 KPX S T -41 KPX S V -10 KPX S W -12 KPX S Y -31 KPX S t -17 KPX T A -28 KPX T AE -28 KPX T Aacute -28 KPX T Acircumflex -28 KPX T Adieresis -28 KPX T Agrave -28 KPX T Aring -28 KPX T Atilde -28 KPX T C -19 KPX T G -19 KPX T J -65 KPX T O -14 KPX T OE 6 KPX T Oacute -14 KPX T Ocircumflex -14 KPX T Odieresis -14 KPX T Ograve -14 KPX T Oslash -14 KPX T Otilde -14 KPX T S -41 KPX T V 10 KPX T W 4 KPX T Y -10 KPX T a -34 KPX T ae -12 KPX T c -37 KPX T colon -112 KPX T comma -130 KPX T e -26 KPX T g -24 KPX T guillemotleft -73 KPX T guilsinglleft -73 KPX T hyphen -91 KPX T i -42 KPX T j -49 KPX T o -31 KPX T oslash -31 KPX T period -148 KPX T r -28 KPX T s -39 KPX T semicolon -100 KPX T u 4 KPX T v 10 KPX T w 10 KPX T y 0 KPX U A -19 KPX U AE -18 KPX U Aacute -19 KPX U Acircumflex -19 KPX U Adieresis -19 KPX U Aring -19 KPX U Atilde -19 KPX U comma -95 KPX U m 16 KPX U n -8 KPX U p 0 KPX U period -114 KPX U r -34 KPX Uacute A -19 KPX Uacute comma -95 KPX Uacute m 16 KPX Uacute n -8 KPX Uacute p 0 KPX Uacute period -114 KPX Uacute r -34 KPX Ucircumflex A -19 KPX Udieresis A -19 KPX Udieresis b 27 KPX Udieresis comma -95 KPX Udieresis m 16 KPX Udieresis n -8 KPX Udieresis p 0 KPX Udieresis period -114 KPX Udieresis r -34 KPX Ugrave A -19 KPX V A -4 KPX V AE -12 KPX V Aacute -4 KPX V Acircumflex -4 KPX V Adieresis -4 KPX V Agrave -4 KPX V Aring -4 KPX V Atilde -4 KPX V C -24 KPX V G -24 KPX V O -23 KPX V Oacute -23 KPX V Ocircumflex -23 KPX V Odieresis -23 KPX V Ograve -23 KPX V Oslash -23 KPX V Otilde -23 KPX V S -27 KPX V T 10 KPX V a -54 KPX V ae -27 KPX V colon -132 KPX V comma -146 KPX V e -47 KPX V g -46 KPX V guillemotleft -75 KPX V guilsinglleft -75 KPX V hyphen -39 KPX V i -59 KPX V o -52 KPX V oslash -48 KPX V period -164 KPX V r -45 KPX V semicolon -120 KPX V u -15 KPX V y -17 KPX W A -9 KPX W AE -9 KPX W Aacute -9 KPX W Acircumflex -9 KPX W Adieresis -9 KPX W Agrave -9 KPX W Aring -9 KPX W Atilde -9 KPX W C -4 KPX W G -3 KPX W O -2 KPX W Oacute -2 KPX W Ocircumflex -2 KPX W Odieresis -2 KPX W Ograve -2 KPX W Oslash 2 KPX W Otilde -2 KPX W S -17 KPX W T 4 KPX W a -11 KPX W ae 17 KPX W colon -99 KPX W comma -83 KPX W e -3 KPX W g -3 KPX W guillemotleft -31 KPX W guilsinglleft -31 KPX W hyphen 1 KPX W i -38 KPX W o -8 KPX W oslash -4 KPX W period -101 KPX W r -25 KPX W semicolon -82 KPX W u 1 KPX W y -2 KPX X C -28 KPX X O -26 KPX X Odieresis -26 KPX X Q -26 KPX X a 0 KPX X e -12 KPX X hyphen -50 KPX X o -18 KPX X u -28 KPX X y -43 KPX Y A -25 KPX Y AE -28 KPX Y Aacute -25 KPX Y Acircumflex -25 KPX Y Adieresis -25 KPX Y Agrave -25 KPX Y Aring -25 KPX Y Atilde -25 KPX Y C -45 KPX Y G -45 KPX Y O -44 KPX Y Oacute -44 KPX Y Ocircumflex -44 KPX Y Odieresis -44 KPX Y Ograve -44 KPX Y Oslash -43 KPX Y Otilde -44 KPX Y S -48 KPX Y T -10 KPX Y a -53 KPX Y ae -28 KPX Y colon -150 KPX Y comma -118 KPX Y e -59 KPX Y g -59 KPX Y guillemotleft -94 KPX Y guilsinglleft -94 KPX Y hyphen -81 KPX Y i -58 KPX Y o -64 KPX Y oslash -51 KPX Y p -30 KPX Y period -136 KPX Y semicolon -133 KPX Y u -43 KPX Y v -33 KPX Z v -41 KPX Z y -52 KPX a j -81 KPX a quoteright -78 KPX a v -21 KPX a w -12 KPX a y -31 KPX aacute v -21 KPX aacute w -12 KPX aacute y -31 KPX adieresis v -21 KPX adieresis w -12 KPX adieresis y -31 KPX ae v 28 KPX ae w 32 KPX ae y 18 KPX agrave v -21 KPX agrave w -12 KPX agrave y -31 KPX aring v -21 KPX aring w -12 KPX aring y -31 KPX b v 0 KPX b w 4 KPX b y -10 KPX c h 11 KPX c k 6 KPX comma one -128 KPX comma quotedblright -137 KPX comma quoteright -166 KPX e quoteright -65 KPX e t -16 KPX e v -9 KPX e w -3 KPX e x 6 KPX e y -20 KPX eacute v -9 KPX eacute w -3 KPX eacute y -20 KPX ecircumflex v -9 KPX ecircumflex w -3 KPX ecircumflex y -20 KPX eight four -58 KPX eight one -72 KPX eight seven -65 KPX f a -32 KPX f aacute -32 KPX f adieresis -32 KPX f ae -7 KPX f aring -32 KPX f e -43 KPX f eacute -43 KPX f f -43 KPX f i -37 KPX f j -60 KPX f l -25 KPX f o -47 KPX f oacute -47 KPX f odieresis -42 KPX f oe -15 KPX f oslash -29 KPX f quoteright -73 KPX f s -42 KPX f t -6 KPX five four -52 KPX five one -73 KPX five seven -73 KPX four four -62 KPX four one -66 KPX four seven -93 KPX g a -4 KPX g adieresis -4 KPX g ae 23 KPX g aring -4 KPX g e 1 KPX g eacute 1 KPX g l -34 KPX g oacute -3 KPX g odieresis -3 KPX g r 0 KPX guillemotright A -37 KPX guillemotright AE -34 KPX guillemotright Aacute -37 KPX guillemotright Adieresis -37 KPX guillemotright Aring -37 KPX guillemotright T -71 KPX guillemotright V -72 KPX guillemotright W -29 KPX guillemotright Y -92 KPX guilsinglright A -37 KPX guilsinglright AE -34 KPX guilsinglright Aacute -37 KPX guilsinglright Adieresis -37 KPX guilsinglright Aring -37 KPX guilsinglright T -71 KPX guilsinglright V -72 KPX guilsinglright W -29 KPX guilsinglright Y -92 KPX h quoteright -69 KPX h y -23 KPX hyphen A -18 KPX hyphen AE -14 KPX hyphen Aacute -18 KPX hyphen Adieresis -18 KPX hyphen Aring -18 KPX hyphen T -90 KPX hyphen V -38 KPX hyphen W 1 KPX hyphen Y -81 KPX i T -58 KPX i j -143 KPX k a 1 KPX k aacute 1 KPX k adieresis 1 KPX k ae 26 KPX k aring 1 KPX k comma -63 KPX k e -11 KPX k eacute -11 KPX k g -14 KPX k hyphen -50 KPX k o -17 KPX k oacute -17 KPX k odieresis -17 KPX k period -75 KPX k s -9 KPX k u -3 KPX k udieresis -3 KPX l v -77 KPX l y -77 KPX m p 32 KPX m v 18 KPX m w 22 KPX m y 8 KPX n T -40 KPX n p 4 KPX n quoteright -68 KPX n v -12 KPX n w -5 KPX n y -22 KPX nine four -53 KPX nine one -66 KPX nine seven -57 KPX o T -31 KPX o quoteright -62 KPX o t -13 KPX o v -6 KPX o w -3 KPX o x -10 KPX o y -17 KPX oacute v -6 KPX oacute w -3 KPX oacute y -17 KPX ocircumflex t -13 KPX odieresis t -13 KPX odieresis v -6 KPX odieresis w -3 KPX odieresis x -10 KPX odieresis y -17 KPX ograve v -6 KPX ograve w -3 KPX ograve y -17 KPX one comma -99 KPX one eight -74 KPX one five -55 KPX one four -87 KPX one nine -73 KPX one one -62 KPX one period -114 KPX one seven -141 KPX one six -98 KPX one three -53 KPX one two -47 KPX one zero -86 KPX p t -3 KPX p y -6 KPX period one -113 KPX period quotedblright -131 KPX period quoteright -161 KPX q c 2 KPX q u 41 KPX quotedblbase A -6 KPX quotedblbase AE -7 KPX quotedblbase T -90 KPX quotedblbase V -104 KPX quotedblbase W -43 KPX quotedblbase Y -78 KPX quotedblleft A -62 KPX quotedblleft AE -60 KPX quotedblleft Aacute -62 KPX quotedblleft Adieresis -62 KPX quotedblleft Aring -62 KPX quotedblleft T -24 KPX quotedblleft V -22 KPX quotedblleft W -13 KPX quotedblleft Y -49 KPX quotedblright A -76 KPX quotedblright AE -75 KPX quotedblright Aacute -76 KPX quotedblright Adieresis -76 KPX quotedblright Aring -76 KPX quotedblright T -39 KPX quotedblright V -30 KPX quotedblright W -26 KPX quotedblright Y -51 KPX quoteleft A -87 KPX quoteleft AE -85 KPX quoteleft Aacute -87 KPX quoteleft Adieresis -87 KPX quoteleft Aring -87 KPX quoteleft T -49 KPX quoteleft V -46 KPX quoteleft W -38 KPX quoteleft Y -73 KPX quoteright A -154 KPX quoteright AE -153 KPX quoteright Aacute -154 KPX quoteright Adieresis -154 KPX quoteright Aring -154 KPX quoteright comma -227 KPX quoteright d -140 KPX quoteright o -143 KPX quoteright period -244 KPX quoteright r -149 KPX quoteright s -150 KPX quoteright t -117 KPX quoteright v -110 KPX quoteright w -105 KPX quoteright y -116 KPX r a -17 KPX r aacute -17 KPX r acircumflex -17 KPX r adieresis -17 KPX r ae 4 KPX r agrave -17 KPX r aring -17 KPX r c -18 KPX r ccedilla -15 KPX r colon -95 KPX r comma -108 KPX r d -8 KPX r e -7 KPX r eacute -7 KPX r ecircumflex -7 KPX r egrave -7 KPX r f -16 KPX r g -5 KPX r h -20 KPX r hyphen -41 KPX r i -25 KPX r j -33 KPX r k -30 KPX r l -47 KPX r m 36 KPX r n 10 KPX r o -12 KPX r oacute -12 KPX r ocircumflex -12 KPX r odieresis -12 KPX r oe 18 KPX r ograve -12 KPX r oslash -12 KPX r p 30 KPX r period -122 KPX r q -4 KPX r quoteright -41 KPX r r -11 KPX r s -21 KPX r semicolon -83 KPX r t 20 KPX r u 20 KPX r v 26 KPX r w 26 KPX r x 7 KPX r y 16 KPX r z -21 KPX s quoteright -60 KPX s t -11 KPX seven colon -156 KPX seven comma -157 KPX seven eight -74 KPX seven five -82 KPX seven four -101 KPX seven one -67 KPX seven period -176 KPX seven seven -62 KPX seven six -93 KPX seven three -72 KPX seven two -64 KPX six four -49 KPX six one -54 KPX six seven -46 KPX t S -35 KPX t a -16 KPX t aacute -16 KPX t adieresis -16 KPX t ae 9 KPX t aring -16 KPX t colon -117 KPX t e -24 KPX t eacute -24 KPX t h -5 KPX t o -30 KPX t oacute -30 KPX t odieresis -30 KPX t quoteright -102 KPX t semicolon -103 KPX three four -52 KPX three one -71 KPX three seven -64 KPX two four -67 KPX two one -66 KPX two seven -68 KPX u quoteright -56 KPX v a -3 KPX v aacute -3 KPX v acircumflex -3 KPX v adieresis -3 KPX v ae 18 KPX v agrave -3 KPX v aring -3 KPX v atilde -3 KPX v c -11 KPX v colon -81 KPX v comma -136 KPX v e 0 KPX v eacute 0 KPX v ecircumflex 0 KPX v egrave 0 KPX v g 1 KPX v hyphen -23 KPX v l -77 KPX v o -5 KPX v oacute -5 KPX v odieresis -5 KPX v ograve -5 KPX v oslash -5 KPX v period -156 KPX v s -11 KPX v semicolon -69 KPX w a -3 KPX w aacute -3 KPX w acircumflex -3 KPX w adieresis -3 KPX w ae 23 KPX w agrave -3 KPX w aring -3 KPX w atilde -3 KPX w c -6 KPX w colon -81 KPX w comma -90 KPX w e 2 KPX w eacute 2 KPX w ecircumflex 2 KPX w egrave 2 KPX w g 3 KPX w hyphen 3 KPX w l -48 KPX w o -2 KPX w oacute -2 KPX w odieresis -2 KPX w ograve -2 KPX w oslash 2 KPX w period -109 KPX w s -11 KPX w semicolon -69 KPX x a 5 KPX x c -14 KPX x e -5 KPX x eacute -5 KPX x o -10 KPX x q -8 KPX y a -13 KPX y aacute -13 KPX y acircumflex -13 KPX y adieresis -13 KPX y ae 8 KPX y agrave -13 KPX y aring -13 KPX y atilde -13 KPX y c -21 KPX y colon -91 KPX y comma -134 KPX y e -11 KPX y eacute -11 KPX y ecircumflex -11 KPX y egrave -11 KPX y g -9 KPX y hyphen -19 KPX y l -78 KPX y o -15 KPX y oacute -15 KPX y odieresis -15 KPX y ograve -15 KPX y oslash -15 KPX y period -155 KPX y s -21 KPX y semicolon -79 KPX zero four -59 KPX zero one -76 KPX zero seven -68 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-Italic.pfa0100664000212600000240000025774207477306250016062 0ustar mikeuser%!PS-AdobeFont-1.0: Times-Italic 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Times Roman Italic) readonly def /FamilyName (Times Roman) readonly def /Weight (Regular) readonly def /ItalicAngle -15.5 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Times-Italic def /PaintType 0 def /WMode 0 def /FontBBox {-169 -270 1010 924} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020937 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6db5b99c8d5fabb6066de5990492cdee63626b0faf2475d8b58fc403fd cf43c0348075d66cba692295aa62638faabb428f7c9cc22a2f3fb81f3bc2 669d02dbf7d22db2a9dfa34934de038e82df426b4733d3ffd3efb008c3f6 0a2b5fa2763dadd86064c3deb881fa33e082f278fee68b46f610b25654ae 96207d8148e0f54ef9bb782963feeb6cbd36641842195b4b1e4217397272 61e57f4a50f6296987de8f665f58233888af1ffb3dbd577c9770533bac06 a0e3cb91dfb6e0310e8df1da1fdb5c325bba612404b398e392cdec45a457 d1e2b72f4dadce4d48c43955d4c194def0c1d5f3b40bc53ccf660877acca ec25cde63b33c38cf4e727d84c5418bbed72af5111eaa1537bcb69831045 1db0ec512861aedece7e48f2e48b528123e0545dbac961f68f4602cd0d94 d47578878e51c06a2b43c9edef2919a68f789d21cd07e9a3dde43b761d33 882ffd73cbd2a644ebe9c1eaf6fd5cee48b22b417d7db7f30d8ff9e7d7b1 8a21ad859a1f04eea0fb3b508729a5fe2d6382f2b0f8e078803a9d245355 da02d3016ab2c8b2583b4d77d3acfbc34a559d35bbd037e9c5705ce727c2 649420777b2043dc95e32684e59e30009545ce008e5891890f30e59b0985 c16ab218d4374b99e81447040ac678bb0aa5843f206885479cce7cdb533f aa80d625f159c27f8641bdc765f7080d35bdbc9c2d15a31c66870829a70e 7fcf61488935e535b672ec5728c67de8cea921b493d08dd33b9024a6a257 acbcff3d9a0d6227df1e8c8cf1b2149a9eafa162f18b5ae849c7a9696d4c 71af9b462c7c0da5471b18bb99f2ae765516fa03b98756b7df760ac4d0b9 f8852bbc678696ff9c957c64b2939ecd6ddc18855de06747b2f5f5c4fc04 51f69fa610ec68bf0e923dcf36b57d3292f291f44d33c5a6b5be7f5065e4 1c6cafb0657c2cf8ecf8c642a3b1e11e9a7f0d44b65a678b1de0eb0519a2 31ae5e966d8e84c66e20f2df9900f7dc83859820e8f6d0d7fa8a242ebdff 0a69d770c6ca0e358e076e35e0630b4b9e93b649abd98fe29e46a3635d2a 635e286cb732e4e03247da024575164e1697aafccf124af3c06828fa7aef 0464f80a95552b4f2b9552c806af8680ce1eac41a1a559e5d0e27b52300e fdb9918c6d4846b602e7940bade081b99605a1f4ad4e6f66f0327e8d5a46 87ee5fdc06571fbc736fd8ca50cffb6e2e8b871b96fd4e0f3cdf59ac8808 26a8988e1f237a39ef3ecd2d2b56bd0f2fc2d4f911675deb0974193c7fd6 2a8396479dadf9dd5006af2867ae6c287d16f96007afa65af4fb64ea49d4 85368169d55005a0244ae35b4523785da7aff8145444a2c612daddbb09f2 5a5b1d963f485828963774d226c9b3fbbfe9df3dd37d59fd4dba1940ac1f 53a8ef48b84d001f5c97b6581dbbe3195f06c3587717c29fee0a4e3f64a9 95c6d077e0df80aebb5ca9b4c497adee9adec8cb817c4ad526603ae51ff4 426632f2f6fbb680bb0fb087e059c17278b43013da06ff4118ec9651c470 60c70fa58a0ce12cf22f8d02be07adcc9c5623e7da53453ee1e6728c071f c3fa6574e2ca1c359295c7d2962074334a8440885f2c8528c88376c6f93d 578b47fabb11f5f0538fff547163299a0821e42c97cca2ccd7b129e427fd 7abafe5a74a5a1df48bbd172cce6cd2b60ec21265faf50eca186aba6ce6f b63d700743231d3033be611c8ad16fa9a2f524f11d3fc367e461abf565bd deabaf385bb0ffb6345b783695300e4961e43f3e7435b795579ee351d997 da5811cd456ac416551912a89d32739d03e8e2430c77ce97ac77b38ae5bb 03e3a67eef8fb207acb0e1dd1147476262043a642d66a4fdacfb0e9abfda 1218dd625b64fce5d4b24c2504050a881ca07ecea13b67c3822772b678e7 fd5223b956d945808f9b97c735a3ab88db31a8b14c2ac67da0c5174fc49f e41b612fcc052d08c17604ab43dbe2063e39e2799db1e76b603b08f34a21 fe4300aa0d7a911cfae6ce35291645afbed9cd00204e7eb0343b6547fcce 9c3e73dce418dcba81d1a03fce8732de5440ff98356c0634a125c64881dc 0549e29a82c82eb4af99987f6ffd515fbe57d39086772753239f9236a2b6 aabbdbc419efe2bdaa0c2bde84c433f4d753f6cc0f03e79f5a59210082cb bd6d84ac4caa22ea30f3df4d6bb4207cbc1b67e40986cd4f213504b0cc32 fe842d8965a9e3b5f238bfe2fa4f587283ee75b0c6f18fecc1ce3734872c dba530e9795cbed2c7caa8e2922117ab0157a1d97a8ad9ed4c845b477a52 f0be7d2214e91ddf9801006cf6fd7e4ef8ba4ac311b5750f3cea17e6f6eb 068e9ad2cb30d4a4e0afdc3aa7aab249f706de2168108804a4dc1bf522b8 6092e5c99098345eb21237689c914cdacd8e52a807417d43415fc06b0ec1 69281f6fca7941d7cc38b09dfe5e3cd9ee8412902cb88d44319fba9047e9 03c3467e51d901ee474fc8ae5cc9fc7b4a29ffb9e50326442c14948f7980 665a358233c65bda5d6f0654d9b875e95ca816a915718068feb35ba118be b45603a398e058050763750247aa49a18f12305879e230e5aa5ac17423a7 c17bbe83af56902823cd38fdf53c8156ddd196596d0d5281c2984218bc4e 5201e588d573297fe1e34b277eb41146ccbda370828086ffb68307839389 4e9e2937267938388528c52b67e78dcd0d60af90c8f19534ca691720430e 0de1278cd568a9aa711e31c5767879aa6ddabcfb2984be7ef3d89a201062 384d0b6bca5c7763b28359186518d1017d0ef0f497d69c28e043c0bdb388 34a8fce1729b582ff527734514542f01e4857f59dba86060e9f099fa715d ece26b0efac454c540e1aeb8531da9e87c2f0d7a036fe448d261af1adebb c6e77a74aad646fa533bee10914b3d3b2b71ffdff66475e9faeac89a6443 959faef43337ee1687e2171333081b920096a06093296fd3c466e270b015 6f725a68f40c472416b3130584c9632319b253dbb32940be1617b011a11d 2bad11620244340aeac1870145504a622a658fcf9f2578a330601bed127c 7018c598eb3799cedd132c551abbddeb38a67ecc57c584231a822804975c 496325e5496f54ef7a0051ff6a11e738d45edece8a9243e3d16697c5ffbc ebc4c4bdaaedfd2ebf7d48dbbed951be96ec19e862a1c38033999c989dc0 cdaa30a087c58e7640ea8b3244aae13776a9b86438345ed1c4eb709d05aa 5ec0d36aa6dc6c20b35a3f2ba95bc253cc230cdc7418e8d63836515b8d0e 14a206f4acd6787f9d4c4dc9431532d75b0cb458962cae3f3fce4a2e4485 6ddad0847efe44c702b0de3d937218b87a6781dd38b1a4ace4b124110bea d6fe772cf269047b3fe1143cc184c9760aba9cbeabde34716dd5bac48330 0d650bbd1e19b5c738f9b1b04beda4502abd12e6b30297624c5113014dcc e47a8abae0f4661fd2cfdf35ad4422b28cf287a1523c5735ab621c8ece6f 56e4cbf37d63824f810895dd57380d2e2c383a6207f7f13477a446a70821 ba6b908524f6641bdd9ccb9ec2529eff72c8662a6949f31cb82f4dbe7088 25c7ba991fc6477af591d430edb85117673812e01cb8317adbb429d00846 8c8329bbc0763dba53d02803ddf1eac2ede077c75d5bc1dc52c234447142 409dc834c644c5f2295c6534898b5144e33af266d6a2019486768fe0b166 62c5d7417178bea626ec1acc4486c4fee1726335ad03612d394da6de7a3c 89496634459e0b3ec764139419373923d56ad25dd4a8058e91e45069bcb0 a337e54c03d56ced11115af77db53f805a873ffd60f5a383d3dec58b0c4f d93aac08fbdbfcb9252fccda3cd2a9c193cb0e2cba2c6eb20a0e0036fc3c d9e2fde3840aa42d119754daeb4c88c606d751e954c8188d1de4e9613951 aacf66c8093b0a916a041db544f6d202e9816f86d9e12374254308f659d2 704470f23f1cc45ee5b729ee502a8624fc6c0c94202ba46032a8168901ec 7e2bb13915745c7f21f12bf83b0e54ada573ff3d409c86fcaf5fabaaeae9 980806e40379f41806b7c3d7320a6e6b02537543c6e39e8254edfbacc5e3 e949720731dce4f70a221eecd425ff9cd995deafe9e00b01fad7705d8dfa e1a46c550bae09979cb4c13fdd7715edde1ad0b260d25730f879cf67a7f4 ab46dcad0a0688e058ab32e21b718fcb38c849b8278a81f054bc8c3f6993 0b65cfb7bb935b1a117bff50584363edb20e745b26cd2fa9d7c44ea4be12 bd86fe4cd039bb4580394ddbb064bb5e6f16a2c51d968e0cd8dca043db40 19bc8122654f03f9bff9c51ba366d42a861894bb91797f680afb037bb627 e0fb3de8ca3704086fa4178145dc1ac8c0d948fb905a29621d12f2d9f85f dbee9826da01dd0fe1b05c8ead9f9ea9dc1f2f27941c58e4f50b906d8e5e 7ef91ac1ac380f35cb7d4e382e2a48159ddd4f4dfcbc72b82bc4e4edddd3 5cc4dd387786809abca2129f5ec24894ffecdab2d422aada50611fc0f25b 04713d5f1c87794f4256020bf23c575cc008c1a2335114436eceef9eaebe d9eb9cbe9f32c0ebac9e3d59e8527d06fac91d318228f3030032fb297dc9 9f2b26f8411756565563d16c615b77449b5e608c6b63701c3add500bc6e3 21a55cb96fc2bf57c5f64cb95368a12024c04910999120470eafaf209f7f 80cc9309ca2ba555e27da08ab9deb0f3292a8ad108d8460a373a2b77e650 707358c4388a9d238b4e1f92bc16e39f3b32b66bae2f8add3f32e0e93481 53fb077b469d61a3888e39a9141cc83dc9049b8dd9fae040e979cffa8444 786aa4742639d3c2cd4bc7c546dbae97761bf7e78587ac7ef9152ee74722 3df56ca4b6cb6b7a1f5f8bc5a74d8e4ed3ce14b5388ce25faf9331de6304 f2feeb9099e44c14bba537938b87694374e58a660d3462075132e73df7b9 f235484c9dbe8fe0ad9e35b296a4de3e192b959462736704852c8c9a134b 5b43df5ce8d39d618f4f7661739221853dfdfa07fe94011a0b876529a175 0e1df3fc94548d3739b260ccead202aaba714eeaf60b11b3c118c2bc7b3a 45d6ff0a6a203271b958621131d0f119df86b62f46e3848b7367df68c3de 2065a77273b362026d4deaddba6923fd8c6e26cf9fb0039da5f622f9314a fe4285c73135133a1c8436d711790155e107a43ef479058ec320ecbd7c97 93c9a568c402e5b64ed316d8e1af73b8b829859639fef4ebffffbb746400 3a1be4e678af68ffdb416935bfd2b3b74cf6fa8d0f19a6c891c4d8973379 d1448d9add63ffcce9adf1169c1f28cfc48932999c66cfc07b594f1a911f 391538e068aba684ac5e85317f48f27038684e1b46092fbeef78144f371f 16a47e871f3a89b413fc97cc45ea81bc6d2c1af8f72103f1a7412d2145ef 4db3f9b37e139800831fd25a9a7ccf0716c4e0ac33b369ebfa1babc13a4b ed15f25beae9af303adfa555f1a0e6c5e3171b41936a66af8d1f298f6b8b e4c4db5c986cadd0d06fe74a703e3e8f3efdbb956d2d74780b2ac2932d11 a21774e80246d6269dd5b9fe30b4feb6d7a4aa90b2723a407158c768f795 c68919fbc1663c75d78916ba9834f74c1674202b46061e5411ef37d4fa20 250a5d2f30bd0f9fbc32a5bb70b29a73adc2f97f87c592940c6c133a5179 ba96d4c42b00e36521feb945a806edde41fbf8349aaef5fb687d68e9470f 037fdd15e6d9fd2e7205fdd53d48f4f01209a423664cbf2912d6851e2260 22cf03d569738c38354e93c16a7e2e35cfc24c280e8e5cfcdface98710d7 3170a77cf1b30bbce9ec43065c7c610af11ab675c1cf653d3ae02a7d7c13 ed17eb13890a038262c3690a85a9b859811165c2c193a89399ac37b4c9b4 0b1020a8e627418ec906431abc2d0bdd0e56a0321de0cf39a32316087b4c afadefb379456632e7fd1a24e655696615e875b537976e514621de2901e0 07eff0280dc344d432f6974342aa55f6927d6953f3f01d02c6ddbb790dc8 3232834e08f9518545bbfb802752b608d66a0403ea8dff3e2f65c94e6323 1d22b87e61852277408931dc7485e70e8c8047e8507ef8d68d5724704531 253bfad3180d4f242df751e705e9dae32d3c3d177eadf9bb1ae6f5715fdc c377b141964717a10f7792ddbf4fcb46d727a663ca5efb5c8cca320f1449 d3e011298420d151c7b11ed3d58484e55e33e186c11fbf27d20658d5a23f 784d2fe10c3e3a09ff2296a41005122c3b92bb9600c99683c0be7180b2e3 dfe4da23982fbac372177585f9b7fafa7189521c78aef47de1694b408603 a034fd3de55d970df79bc4d1af63aa200dd685de7016c087612b34880a96 7421a508d17d0a4763f1d491d888691e4552a6a7c43f552dae340f4bca14 6032124287af5e3b967ac56372f17974a60b542adbd631ae13434b4dce44 82e9bad1ce4cb6ad281919ffb80ee166cc4c4d11a98cbb6359170d2e2b3e 3b67190bf6fda39fef53ec495cb9b98d0e31289873820d464c433aad8dbd 44f6f2e02f8bf025ec90aa68b9a56d1d114a0963e5910a062d99517a35bc 451816d0433af5de899aa43e91980c466b3ec220c719b63a9740ac31ce60 d218a8996ecddceb98c24966a8e2d0b7cb989518b5493d7e35073c97bd2a 39a813fc4891b49efca34abe7e913acfc797eb01a877c8242eeedf74c1b8 a528d59d8cd75108cdd5b31738fa5d97371f514ffe00c1aa1be341898d78 fbfb091f44ab56f534982def61189a72126f5b232b0005a55c6717502545 03bb0caf4df44152e610af7ea15ca32450810706729ab4c9bafeeabba132 1ede0bfe5d54a61f1f6b7e608e060463d2342a00e6025c1c47714db0919b 66c5f92695faa335ddcedfaa27ae6bbc628d6dd9ed2c6d26da3ac275ee39 f427bff7ba5d861cd42bedb3b9b121323e2388e2622b8166eace5f1891e5 410c7856d540b61473d521261e05b1d7688e09f529e3b69b892aa43f56fe 5f85bc040258db2e60dba907b50b15e56d1f8f02d7892e18e918b6e50deb cf3d40b0039de5820950aeb0d89e7b1d0a1d88ee21125f794fbc44d41bd7 1f804a791705bcd9e873051c73fcb1535a06c53f9c312498acfef6faac6d e941c9ad6125a562914f7903255b39742cea99ed044724c2c86d6cec57ff e84c98363ea4b83116d297c7612b2afcef84e03c60be701376c87b2a9919 b97882e8f13ab34835cc4f393e530139be17dbcbe7eb1f9e4fa5120104d5 f4827069912c58d59c1b379f79741e4df1d6d5064271899310b937a850c7 22af53d42eec27e6e85bb8930faa87a50c937b508695f13c778a1a810dcd 86cc3ce70ec9643466bd585c4b0575065588c73cd0aeec3e466ae803b110 62229d8b601db8c3a3a58e15e2c908b95602f465d1ad4b202faab043cc27 2fa607c489d65554795f38fe2fd8b5c7d408179bc98936db13a93a8416de f7479e06708b2ef4fd61571677488b5e44873efda293380b5a04a493f637 ffbb682df46c8a208fc3144053d4ca6a2d6812d4676f3b1a60dcf27e87b2 186d931d9120910e2155ad4ffd646a4ea0e4242c63886da7006eb5c004b5 4f366e18b496ac776043184f9780b67d11924aaf00565eb0e70f93aad979 d9536774d682c6cd1123cba53e92cbdf7486ac8ad384b47bcce8a5bf312b a43459bb4f6588fc33a468747f56796a8f4342517fd755a08dce6713f652 48abaf07920176a676195c669e792c0dfe5c3c5126fd07ca410186f4cb4e fa669ebcc51623ee0252768805131f575f5bbdd2758550ae675f41efed99 cfc4e44ed5b37688a0e24f14a9e44e6c4badb3b04f25a0c718281d4379e5 92de7b72eec6306a7cb17029a576877ebc5d15d540bf416a86f976dd9981 0a9c8251112452c18f8d0c621457dca1a67f1a289db48dff26f3b2c66e9a 0db67b0f3dd5abf55cbd8942c6ab92bd3f909ee664aae37d292f2255fe35 b8f883ffc6bbb366c7058037ad15947ecc1dcfa6067b190414b5f7627c19 c5925bfe66128da72c914fd1ef0b798ce9f1787ab743d7e91ff0046d4d88 c5d92fb9e03556b28480d266cf5c2e8349b79da14810706d14484bd5931e 4bb382401fbd211c8193749505604fd2945dcdc5f03905a10d198900baa9 0f3bf0022e6657ee69ead327dfa3c487fbaeb5d4fbf2ee58850e6c6cf9e5 ca44ec10cabf5758b99e4c91ade9be3019fa326ad992f8753156c33f877c d724ef19539813df686fdf8891a7b1a98402daeb5b13e1cc298d9a77fd6b 341c7ba043979e1c46e86fe01eb1934b8463140c6a70aa047af017f693de 407d800751c3f4c27340b373d41701689c1490a16ba415b317ff3a708faa d8d28fa0a6f52e8dccd48dd8db0df3d49e3eb95a7a1a13b70d6e8202b9d1 465a23e00b1013d4aabc7c56c278ac81f838334725f385e636f82c6b497e 6e3082d39e712d8caf5400d4d5405f0ef0eec7b125c06c576a74d4d6ddee f36d6b2cbacb4c6c628d6321925f7b9913d195a15ead6cdf49dc8604360a 79271e136a82f7e225114216ddb46abe9207b0b8d54b3f83a230c40cdb98 2539bdf435a4d0d820348fb4e583b80ec6a6c9e16dc5ab2162ce97229115 bd6e9bdfce2464d64368288211749e5a5b5853aa7b9b74aabd7e59ec6730 a1d2e5b15b0525d2d4aa8e19d8d68ba661840c485805252c44082db818c1 74a70370d8d3c36666ef6167db36536854c1d344205b564133d4f0f52185 7fa3fcb767befc65b243f4d528f1772c9c9632a5178c68ada74d20f31720 4f821e4a5b72971c253b5a055b9e90f52b197ab30ce153914af96ced96bf cc647b0a7ae103714b11313de19952f42780a606875139dbbd8d209131ef d3ae979b799cd918367925b112fd2f8c34f7515373ff6b40dbe66af06759 dfaae44eae1e4aea5208180b59b8289a8491eca67e58ed91925ed77a3b65 651cdf7f7ae9594c688025ba4f6eabb46865a4ae4168ac9fc7ea55e4097c 82083af9fdf9a01b3b94c8f4d2eecab688df3864bf8a14ab6e55b0b8a1f6 fd942fb25f199c07b365afb83a5a78e68cb0dea65668085d7ed7e5b7d498 0f2c258dcd0af2990562bc36359936f0aedaec6c2b3ec9786be1f6cca1ec c80632be5307e9797836ca0b1d52a4a286f4bc36324e1ae948c65c3631d4 4e81a06e49d7813c8515e085df143d359663efe28c234fa2e075b9feea55 5eaca4d78dac108ca1ff94f0888b1a92ef94aea9dadaf2ff708aff68a83c fcf748be47a6c4d0d57b09ef8ff4c6ae6e0ccb3267b2be5b8178e6f20a17 a97d3569731fe4ab8933f9ba889bbf7e29df5782de2259c14f16a0e2eb06 fcefac8ab58dcb2448eb997aee6f829cce987b2ab44e9422618c8cb64dcf 396d73f50cfcf90cbd29e62193581e39587cefecb6efcc51b53c00de8f82 3f424973663b6e6ef6fb64c2bfbe15e51433cdf1a3ed82613dad26c6852b 9993f2d99244a5ef5cbe62f5041e6e17532123a3a7a8d0357a5bd5439954 1a4c709b9ad3b776fb0086e2ce1cb74b466afdc4207d4921c40d0a9eafb6 0a90faaf51be3c1feedae7ce14627efbe3befd3cebc66fcd0073affa3264 8d816a10b0a35124964778296d06cd41aa187deec0cccf6e0f27e1b56c45 110caaf143cac6d16f84091f71bb36d94e529fa60793e822a39e107c77db dbfee4fa1e22c450761bca9287ca88d8197b11e1b0aad10d63e92f095815 dc0751a926104671e848144e4c96ee702b63831c4fcb8fffa566cbd10f4f 7b2093d836879d67f94dfc9b0e7c8127be4cd66ca31cc766f2ae36ebb69b 05a244db7f0ed126c854bd086fa4698e1ca316cae9b68253309a09be1b8a 6132884958f2026f7776889f27ea5a327bde58d9343209c70f69cb94d169 3328b9525ca4f55776440b9864e745c8cb2e43d3ec6eac821f837228423a 0341aefd2a2388fafefa1d42241e8bbec335da34e109699ebbcfdaddf381 f3372017033a600ed4ca6da725728428ba45feb5e7c4a1264ee649e0f00e f3bc70855c0dfdd023e9216b616a01e37adfe665bd13d51a13a05710bce3 8063798f7a6d4b808ef4024ead5cbf3f5e3d893adea05cc2a9642871fbd4 1dd7156c5ed84af8adc4ded1331a8acfd51dd8f9d928249fe18150314eca a4e291eb13e7bb5fdb2a259178e5f1371fe7807f8382ad1491f86958db2a 0fc1d7028125f94fb7236008e70b16bb3b6715ce73f6320e7fbce98f23a1 d71b56561311d10933961ce1224d0201b95bc7f862a23b28dcb747be5fe3 7d6b426676ae9af48747283e1df09afde4a269d63295c7c15f3a45f56b27 e7d2cd63afb0ac8a2563a4b6cce4ff3306a28b307a0d4bd5071fb1c65b94 f5de32a5859ccb826f8c894737bfe6a332c384c21f6ed7a3afcb0fcee237 868c9529634f6aa9152b168b3b05ee7a768db38bc4efcd36e4f381c2725e 3333fa6d055225e1deaffb9fcf46d124be0f86647526b3b011366f1a19de ba9726f75e78b3765d421c915d74df1e3b464be5016b74116233e831bd68 a9d04cb4ba468a19c2f1c7edb35f5def54e7c1e78b8d8327398188f50a85 b4c0d42c697f52cf1eab42c6f244f6b09b2df36c7ad418dc113f53ec50c6 b1c92c97e9d328a680212761a27bd3be976d4963bf18d6d3044f358e7e6c ec1c9416b6c1c49c9609f4ea1e06811bc69adea3d300ad997b92dd4ff82f fc2f5557d8575f70cc34a7f99167c03491999aa972845db3773d98d2542c 9e8c1d354d1c6c5986e6fab38fe948557d2cb6c5c0b8183d649d9266beb9 644731bda580bd4729516520c72152058048a2076432d65de113755aa329 28a75ed4880821cc7d3bc051bbbf44036500e7a662a76914ab2892cec27f 195072b789585f11f24ab09867214440f3ca15db2280108b1b25482916af 8d3959699ed443d867d3930796ce5ed4b7317f9f80c3205a4250bd7a32b4 39a8fb5600caebe2ed3f227cfb61b5fcf0d15e0f233a7910e361770f7112 d357412c0d6bfdc83f65b0e6bf7a628e75de2deda66420c2cb7febf7c1e0 d8431440bbb85e9492fd6a9182a687b43dd2e1ddfc2159b8b0734b0bdc36 ee8fece6d95a2b7a44bc1716c14cc06f047ff6bca7d2b3f8cbfea4a5d4f4 0fac671bc4e38e09d1cfa5c8267cdd6ebfbe9c6fb2b8487c2466c2f5dbd4 983d889b5db9683faf29c86d876536b55707f5d0256ec290dd5745c61429 907f123a9c133ae213a9ab2bca0a3911b8d993621ca0093b88522b831795 e90852a49805a22dc41b66ff6953784c8e97bcb549efa7c42a477aa559a6 b88d8bdcdb606ab8b305e5aa6955a33da79a752a3cc5fa05b218e1f44344 c3841afadf7f783529bb13c13c8e7570da9803cc1136c8c9bfc5ad9daaf1 829a133e54803cabb64351b46bec60c27d22fc1aa2ee5830de10afb77e5b 81fd2b536c53c1e351ce8e7ab5847ab1053f4dcd133e02d6123b3674769f 467503835ffd047a921fd567782d57552888e0942ae759005f0794346ba9 37cd4ffe26d2a5aff34e7189a304b577bd767381341cd3ab1918a4b0de4f 61a3e58cc805dee6641eb7cf4231d316ed13df03c997676540c52e5014e5 04edbd3984b475c0442b4d65dd3eaaa87ad37c4f7bfc090da7bb42c8aa74 4e9878cd5ab9321c7847a360592c6e6302547be4aa12ee7717fbb84d8ebc 66f4c4090cc41413dbd28f31ef37af7cc1540a773f571a74fd3e6a444e5f 19b5084324e215a4114c700fbb29df2fb18227619408b137772858d1a89a 5b1278d0bb570f85c80f63acbfe07003034093c367ee0f0d572d861c7a2d 64046083828b8edf6b6d15cf088783b8d79dc3b99d7e681a9b31d07103ec f70ac43bb1d4751fde1851d798912fdd5d1f886ac858ea44141e00faf487 d17629b7064eaae94f0fec4657d69f1d886b71d5c8426f880f8c0921d7d1 15c24ca054d45e77ce24b554a675d3f7955c92de6e2162269dd84e8fd220 8e93f9eb3243ecff53941dc04bf384f535f58eda336205077347f703b3a6 30f4af8b84ece7f1dc84e9aa71e2113453514e0ebe04185d531fa596718c e3ea7f67e65f93f286f930da0acaf831c91f3f60763a05d182a938ddfb52 9078e2a3b6c8a37ad076e9a419f08a8348389d305234496e430a1a2957d3 ffa255a16d3ff608334bb3b1a5c6bc7aace9ae959f7e51bb51334e4a7572 f11f702bc27e3a6698ea5ae5405d617722f999aa465f81686df16b28d497 315e10b8da21b43aef4cf33b3f3e08e07d3a7406866fa38bc8b33cc13b88 9efed6a6cd2ebcab42d1b7944dc1054a0e6548c613ecf1a481cdf9b0c41e cd3036483dec3b44374ac2f72594f6a5532cda3a3e3516b949b461a711f4 67bf82321f35f9b242cc2b575f40fb939b428b112f1a12bbdcb60dca81c0 6d1aa400ae5b9837a5efb1f189def4f8a058bb8af601f0f0dbd591a617ec 7403733c89d2700816edca68fffbbdd683da66e8eaa12d2fb818a2c6b7c0 039abdad8789152867003f57061ad356845f819c1d73dce4c72c13ac5e8c 97d02f832d798b05c0403f858582a754772eab6cc8486485ecb62ead8973 ae77b32b2e81b3f42013cdbc288fb1579a856a142ebac05040997ed259f9 2dbf49504fceddee84e1cddcaa222b4bc677fb9181a09e90c408032993ef 569b96a74f966fd3535c4c4dfe68b612731772db996ad71090d7fffd6aca b9bfd4cfd27e683db1531cce1a08a96fc42b961540d45d3f9b39005f176a 71729f09ba38a0c320169ff2224282ba19e9b52f29c4a4a9f8efeb14cb82 660b7e8622ad531a9573cc39e8a6ac03bc49dd482b26c72bcfb727f0d299 cf9c02b4c1c5203c5c6e58d3e84cf762927cfcccd8010fc849cf95c41e8d 65ca6e9920516deb3b72b532478e0a6cdd28ba5744d55b6b4b8d468f6910 fccf022c46bb70fdbe71a2ad3b0a68a1f88d15e44e4b37c71d8ab718ddc7 1ff14f58f2211f8f50177b3cda57d42ebc5621dcf60e20b2d3b85fe5ebe1 26d8c0cb04a40e5dd4c21ebf668d15837bdd095605a37a3039eb167df9f5 ebfd7cb5850108125afe10b68abd7295f452fa4ef3fbf24bd39e74381760 6025b3a0ec8f0a6e4d26953c11ac109d19658bd278e67696156f041fda5b 3b1ba1cc3f5ac379087a73d2f7abeaad4379cc9acad20192271d10fce104 5f52315738c8ef1666ca8b3ee1411d81cdaed30ff6321ae30043352f6d6c 0517dbafcb55bf98316730f6cfb9eaae7981dc8846d9328d92f22f6586a9 f338bafa812af571fc497c352b7a2826cea8a8555e50e3b3fcc7524ee553 93019e1e0407dd13435c05f81420f3cc7a74643feda358171eae1348d1fd 78328a7625aafa39c60ee153a08bce1cdb0249c126be081e74ed7464cecf 04955c25cb0c5ec175431cb1b67298a8964fde98e13fa11927389f1e876d e3d06cc2cee5cf740be6d85f8f6f76f737d8978aab6d40b6a5027b1f5992 fbc17d2c074997acf48a8d443bccb38c704fba1e229f0e8eff1b44d7a592 e8a522b6e07e1ea889e06e4f7addae54156b9e7cc8c0418d82f545a0d14e c1ac1c5b617f5ef87796178c43762e81fbad438217097f8582534e57df99 5f8733bc4430d1a1bbdb91912ec5cd778c286374763e171832da0943d254 fe64be0e05559d9fca77184640f61c0ca8c2a31e6042dbcdbd19bdb6669e ac5c515886fa6ca422582144d7cce87f49908728ba9a840e37a7d4cd54d2 b0b9c9ae5b6ceb2b2a3c2ad859cf34f85c5aae8171e2cad94f47f5e03448 36331ac3861351b6b6aebc41ccfc5f28fa5ce258bc8e5c4aeda6146245c5 6915536946e1a0ff876aeeb9c1de2149724c8ae6f00b91aba33c2ade2770 c74169f7d1e0e8714449de2ba0037b79e36d3f05ca0dff5ab14989516e88 0c6103c3bef7eebd525766e58f0af33b2240d257110ab63ffee2308ff9ea 69ba2a52f2a7241a7f52498b031f8ffb6ae0d271f30024c0480725810803 c0166b98f35e6f6ee24a3f375e7c54bde1018aad846216191026a9bed74b 9ad11e5c7f523d407e98ad2f24620366f20c191650f8b4134e3301899d29 b46fa52985dad322f94b9d3e52890abcd188d09fe4d1fcc0b7a50fe263bb e5ee5315c3163a5eee3052836be6a1ae010ecc80481218ded448f0bd7a12 e7d2b52b6c2ecf8d7eaed62367a9094883116cc9ef04aaf526a992a2088c f9027a5f84ae6c0dd55e46da7a473bcbe4830ab5d2e26a82ae4c5e53bd01 0181dac9b956457d7b64805cdd22beb684e317cd595009e52cce501f5e33 913590079870c02b33aeda96c0da8c32828b94e7865da5939bfa435fe5e9 c8cedf17c9b0914e268711c31fe55f7c9ec4efa5119dbb413aede8015f53 dd5994514c8c87148dd1f3456ee3aaee9aa677863b0397d52763eb01fa7a a5beea5dfc9e470cbfccfbe560a014a2b7580c82f75bbe0c3240860951c7 143fcb03b9a0e4bbb81c89e783a6a46f73cce5e95f788d2b13eb1fe866ab 710605b463fed1a01b1078cdb36cfa524eaa49a502889edcdd324e112da8 6e1a97c3bd4fca3437e8d5615c4042cdce88f6e464663af7a14d50425917 fcb5eac6fb4a789eb88fc1923fbfc001daf37cf39b845cf6733d3da5ca5a 2ef768bd776eee1ea4b5b44e5d11b083e17aa5f20f25b1e2d0382e90dc91 09939beeb451e1d081d58da932b2523baf12c466940ed136f05cd26862aa 6885e852fa7e6287d0fbd3bc15657fcc991c2ae34c46c2a763daff664222 b8d784652252da743849552527808dcc5c70b12cb9f2887b8dabe303f21c 10b677b1b5490b4390eded64c850eea36696e017de1c5be010a15d08a98a 05da37d8f238836749b842ec17ed6e76fbad5c57b1f7c5272f7663066d76 acb1ef8e75ba709844970a42bab44eed737aa4149edf805cd03dd41454ac 4ca92840d965e5119f276293ebfbef1509fe3d58c7aeeb2801b885b3239b a49d9d26dc2ffe307be4a3db9649ef7521d2f58e6a7b33f1d9a3e7927c14 541ce2ec94d8f61d0bb35c2c429709a6476cbf11c9f35445aa4fc8366e98 b256e229329b66d23cede35fdb1971bde1a628fc91fede30fa047661c308 c0373a7cac1e110d9c45b1482692e8c4487e1f750376e3a135d682693107 d12e721b6e27887b689c295db72601d24720c6ccb4d5f290842b8e7bd503 52c9af2aedefbb00496e40162ba9a86a1deae138c7fa83170dac105ef2fd 4c3e733a3b3715ec5e97e0f0b44d87d1846535939358d6798818c7f00075 e77a06a2ec0b7118b3244deb5a73180004848c84394776f9fff730731d5d 8af0a5e4ee45019ba6ff7df479709544360fd9b1241d4684def708a7f73c 5be5410f367fc1d74bdea77930f4d20c1f43128575e9f15d3a4943d4c286 04e044677cc7006169e25306e0646863caef93134601fb726b876d7368d4 c91d1b7cbc9683e0ed86a61279d544ef2785f7c428882f638e1120207cbc 62f3696b0af9f25038910f21cc2ad3478ec279e6ff83d3417a757d6b334b 6bb3bfe3bdcce68977c42402bd7c97e6cd9d78aa2899de05955ac431c893 607df8e5d4831f87cef6a6126230b7b9f80ad0988257b0c70bee3b17f838 96892eb69f7a9e7f04e8eeb764e93fadd0a30835ad79fb7fcc6c9e1c2dd8 be123899c46aa2d5c440a62f75807453ca78e465c6b22c87d39591a626c9 2413999fb7671f3dcb141fa3ee2be44d7a4a0245d03beeb3ddea95e8cc49 5588489a80a3b608231d2920b26ef2cecc49b1d69b96d07f2d618e096e6a bbb8b9c07a8eb7b092a1645e4d10dfe007e8178f3fae9dda4237fe8c363d 9eac414db43400eb1b5d61617b557fc3fb574539a0416d6a10e35a109638 457c5672027cb9093cd02931932be27c4da04a58dca7f73a5712fe9635cc d959315de7ce560f446805bc6c7e6b4c3aee414049261e9be2f76bbb20f0 df2534afd617912b83677e091dce521cd1fb17c81ee7a31e4510f519ab6a 447c85716a62f327a1018ac691782eb7a807172475f1a3c264df12648477 2203f3ce757e02660b8192f37463df15e7017ef3d77328cb54efda16bca2 3306fcc2edf2d2cbffa77d888281bafe06e64d78514a3c40a1c1756ad232 c5560abb83388fe8d06ed8e44bc7b08eb8285b3eeaac582b3bfd1ab04e0b 939404ce3f29ff082ebb694db719e4fedba7f8021f21b61dd8112012d9d0 0424d61ffbb85fdc05b07534e7a74b3c6cbd509889362719bc38b54a2b6c 99bd06a9aca5c5774e8b5f065493480fda1c5053ff6ebbf806bad1d0c5c9 9c05d0007ac81ad9a5cb9458742017ca1e0ea4002ff7b465d4a21b059870 60acabf184b0d4afb602504c2313a44a238fd76bd6f484905ab1f8a923e4 e526ad8bfb6f8c130a857b057d019bb4c3c50b63bc3978a763b6f500fd4c 413c0863f69b3cffb57a8ba28837696e3d2f78bb76470d5646dc3e3aed2e 52a98957c410fcbbe2f64aa33831938e9392de7df3e9a852696ffebbb6ba 17d3af4bcab5f909ab46ae58378fd3699ad27d6ceffb6b0728eafd8899c1 32de33e84ad9432dfa08ffb247c7a6f7e43303a12a8c3a0fd71aaee1541a b6b5ef2212e464b7b1a73dba72edc0aa69a7d8bffb64f97f6603bfc4eb17 68c6cbd417f3e4ff8e17d0df4273c241b7f6830d6771f103b9179d6fd2c8 929f92013954faa8706c1082240fed348cb9c1e45da6b23a0ea9bc2bb778 3e87f30d2d553bd748bcb517ee8320a9d370bb1a1792d2f9ea5a7c699074 5b6a824effe94c2d2d6e2c351ff9a5635b5302f84c01e85b789565368aa9 f3728df44fdac4bac4f0ab43da439def9b16d4a890313e70594eb5c30740 9f9ab35057b5b0d594fd6142bfc43cd49665a722cb35a02323dd10d99f16 beee42649898bf267f2d7534c5486448fcd50f1502d15a10bec9b61bc33e 2362d5a8e01c8aa80785f0f012d752716a01211d6659b5012f5468eebe9f 1eba0d3519ab0abe2fa3b00233aca4bce5d5fb4ff1a9bb6bda13626ca9d7 433ef2bb0f069a9d6185644f69c8495ce19391338c51207b01be7bdb797b 60118502287590305eb0cf0d549362f107541e13c079dfe3c05dcef9c806 3efe23c71fe12676490da4f8a95238ac0e05654eae77ff6292478002a78c 7eb8529cef3bbb7bec0de2afc5f7274200db71a62937894ca4917858b33b ea8d7cfc88eedeeab7cf1b0d1adb9986e826b6d98d590ce216acd64edc87 33ea8c1a14be261fb5ff94801e915ff1fcc9b18bdfcb5a9d4bbde02ea52e d202f98d00fdfd175169e83b9ed1b049914a39eecbbbc90596ef6c38e667 dea6a5d0d09d23fcd6997eea1751b3fd758b5396b0cd05ed9986f4dd4d1d ad62c707975a650bd4f0f14ad68f62b4a676c0d6a9957bfdbf3950824296 c8b7d11919508b320c3ed57901c7acf207125fc99115f72823318e104536 d81ac47decc4d5801d190762c8c814fd8e063a49ed58d04f4eea87e7b8d0 6fa7c3f6cf21e442121b17cff089792eb5aa7e7a0da90931d79ee078e934 6ac218549084e62cbb56547fb4628b9bdbd906ab5aae637435bd1bcbbc83 2203ccd62e174481a40acc745d7b2457ee24c9a2c7bda35775e8e9c7bdcc 8f238a6c4cc98b81c86c34e13db0a0ae52ae9c4a212981fe5b29385c3978 4ea774cad2eca458ddf153f0c65cfae3fb542e693404260933197b71ed10 cfc372df1cfd5d481fec65aa30ef505f246f215b8eedcb5d842fa3568ca2 d296af8552db7c51d1f0fbd7c5c85e9ca9630565ad7fb8e20546c1cbdbf6 6eef501e330533c34ae83998fb883fca2f33451b2fa72d2369cdca5f0fe2 11f6f5c5ec38779d5bc4a88a8ecbf003f86658192fa198340b8abd5ff9d0 2678682d93c29d85a3195adbd45a4b43a3be3bbc4aa687b1ec5948823a17 6d8387ca420ac5a71f40262ad778584fb0b20578303b48bf976610bff5ef 8e34ca32e74a44fc55924626682b26fd05c8fc76d9f1e43b5a682f1f4d14 ffb11947b0d0d7c8e76be5200a99555bdb3e705b53210c5cd7228de43228 548e00800d600bd51ed2eaa3204adafb2a225507bd924deb849ff64018ac 97b6aa99843f7f1b5a120f8eaecda46b810065262dc4c2cac37851da1640 ff391bab386b357f25872d577bbae1a244db8ab24add355c01c4f70d1157 256221933178f7e4a7fc0e38b95077fb44eb9c07ae4c74e947fb947a849a 0b1450123b819adbc519db491f3d8a1290eea1c245721a3c8f758051cc1a 5caf06ce36617f8cf75f64ff70a42d4adb2ce967817c231ad6c4a5492f61 6c9658e32032917f59f83b99a78a61128678b0eeab5dbcee0ea0eb9867cc 2b4766020ef3f7b385cc3c5eee133ea083e04a6ffe7a240677d7f1cab4fe f76d7d1313842c386b52509a43da777357bea7408415c4aae745ee4af384 fcecf1a9c75430b9498947ae10b806c90b7f96fda4ff65fdfe2d19cab63d be96334d7ace73942bce46c25dc84a9c2bc4efd7a344b682de527e40ba30 63a65b9a1c1b39778132983bca551326f4f4187e29365421499c105a9b12 f4e2deb8ae751e6e5f5e569dd159a46ec69b6ea595f27a94717677c8b8de 4e6950342886f331ecaea82a16f04137af395ab5c3125882bdedf1fd0ac2 be6625d8280cf58c4f6b935c86087fa50647f928dcb7fcd9e49af9ae32fc a451a3110637919db7a06c97604ae276fa75c3ea4dccd1748c5fb1375c5c a4c30403986de2428caabb96e662f5d4b6b7c94671f0b27b07e263e0abb5 d20095f0c857c0c3eed54ad9e22b3d3d9c46dd246a04d02540528b6736ab f562a73f01f30bcc09cd5d16f0657f61e9ed6ec379e07c2cf9ada146c4ba ad0ba14f45cd406c701efd9d2ad4ebeb386f1e0d34075214aca375eaa756 b7bdd8dba59e561900c70047cb244a9a9bfbdc11362589602ba4769da80f a9f8215b682aca36360ac99b1a2859c05d3fbafc80c045b30ba30637ca84 3f12e4a3d5681a306dc3e9cbf2d730b5b062da350a36aa9d2d42942d584c 13d2ec4acd3cdbbef016a7ff1363a9f010753204dcda61ee501e2c668e96 59f6b7fe5e0ce0fd6ddf0f78f41b2cac60758b3e401d47666065b5d6165d 7ce50e16fa475938b2a1c11402138f3dcbdc699da30122884a75daad41b7 151a36c20f49689fec1560a4012082a100e4bbdab083071c89df5ee8afef 36b98db6d4ef44040a10ccb7c3b5ca803f032d204ec47cfe62534f5700c3 1d6ddf73ff9d1b205ac46f1e7a5199dae7c0b342475cdb626c5ccfdbc443 7d125eb1f7f4161ada5b74453768e44e6b2c62b398810c37376f6daa1e7d 45385deb7d67966d9e75d5759c83b1271ecf700423fdbf5ec8a240d96c0a 9a2dc66619ef6f81eda91073a136700139bd2029d02a86d34954f880fcd4 9a19f3eb9160d2cdf47bc86f66e48e6e15e52e659020212f78e3d8411a25 f27335a6e4f812454833722a0e5e426c294c4dc02c99474362ac6b9cd92e 9c6dee3adfc7f1a8273f902a265be63a2a2fc87464cdc35d1b310703bf27 512bd012baf86401a30463515fef83c6ce23e01350e93c7261ca0a627131 b95e5deeb8f88c61f3949818a770b4f1cc3acdfc23876b05cf521c2a78b0 2076392863dce7c2b3d69a6dda20e10409a005964323120235a35e7eddb2 3a867a483ec41d5989d0fcacd443240dae823564f20c1f30d9a85149a62c 2042f8068718549de1d4987066f6ab21c652f244869bca04ed04a7a51f21 045b0f2172eb2663bb8de85af02adc50c76043e1c72403823b7c3cf6d435 8333c1b2b908417bb8a82f9c7e9bc2c911747bf51cd2352c5aff3594afe8 3c605102b5b7401bb44b6b384ee949254957f9c772ae76d220ac6f306e28 767ea54b1fbef6167862a987d153ae682d99301ae78ef3bf03f81dc1622a 8abe573484bb27dcd643fc7a840af061e3896ff2f506e3db3d67a246b3d9 d764f1084a2256c0453fe996625b270a8173f0d609fd51553d0ba9c9e26a 31f3a3cf5b0f58b4c250f214df7af8123ec66a26f8080bf86b9ee572545b e8f4c619d9378f87a1e96e66d94ad2266c012a7a9e7db82c7123d13d1322 ec112e282d85c10118949ea6e76ebff3353aaa27d40787ccc074f5fc8cbd e32391d0528cb7692092c9807c77a48297726ac27f2a4a52f5dcdbaaacc6 61d9755c2285f0115e638f2179e702cd35842f3a7447274fc58c7a742c10 9304c64a7b04ea2a85db7ab1ba2209d9653e6ba614bfa085199eaf0103b8 77db8ea8ef10f773712038121f33dc35a389cd8bc0bbe7ac48f1be4e3997 9a5ecc938f5e88fe357132c4734af09d074bf133ae8fb13a7ae04f04156d 684f4a23812a4884f301d7b621ad633f9b0095c94d3258a9a44f0bcb1e82 9bf56317697a4b7a90b22d78f9dfc8fbb5e3e55a5797e1e5a8b467f6a05a 5e53b0f8ed59696a31f9a2d0050c752afb9c979f9467764138e11ab8f729 d9a7ab67d0c3ce7a4be86e4a67e9f453f1a526499c82fdb7ae34ebe79001 ae2d9dc1c2ade18fa090b8361d448568da58e49ca7981ce986878b5e2121 4b74b1de63835056d105e9134295fc3421c6dc510cacb61ccf3d04bc1ba6 cf22c26800f41ef111c1f3edfd1e1ae2ccc9cc290fc9dc3bb8611edb66eb bbcdc32ff14bb6262ae8a94a622637eb0cdf3d8a9eb2e68751997e96f9ed 801754403f691f7d63c917c826265fba2650ab8d2ddad4730f12ca0f9fbc 705f41926594ad9e1914f085ef83ec5bc65584d6a4d3c9a06aca80791ffc 1ff8583b3eb6515e70b7d3345458372d745ab5734cf40e8d306f97c2b3b2 37c6925e0cb5bd96c62d9414f4034992bf1630c7793d0ea2857aac6428c3 6af722e58dac6a556e9e270b7563d3e69fbccc8be69d8a4daf2c6b0bff18 8b7ad36e00480d44dca74bfa1d1c029f53344ff23bf5b010131bbd9138f5 40d7bb41d3df8e7cc5b804ec5b2ca52162a7e6c8497366d8abbe7e31beef b3189db4438932c670ff646390144c2f45b5fbbc0ef981c76f3227619ad8 c6870e7e3c780b84a8b8d14461e86a8cb6f8af8007b3f27a5946456dfbe5 45b72e344fbddaf1cd58780936daf8f4d67a642776244dd92d05cf914977 959639cc4ec34ba4b9b7c7c19773c4fc189172b38c3b6c183a6baa9deb8a 2226d59a7f3d6016336b1b07a8024efc719bf73168c5a929ff918fc60843 d1751d1df0886b0d7c29a57e3ba2d758adaf2ceed4c933485a6390ecdb39 1948164f050ff54485d3a97f82516242f0334a5d1d2a26e9981b0332d7d3 c53c9b1d013eafa8652e252fe846134e3e0715ece378780b06666e738c4e b1803e3c1ef42d93df45100d0777209b4b0647bad5bb5f8d0ae3a6f462f5 6917b0bbe2f49bb39cf3994d68b4c3e37b5d8812737434c5b5daca560db3 d1b0c1fd860c760b3a1183d55941cec0f997b8d69694115daed65c1b387c 8e6b65c0996139c1a714060f6439e9cca61254fa7456fae329a7b1674ba5 85308762d69edea1492f2d2de84732d6f1ec01df29f4420060ae80a4eb0b de61c5370240a0752a2dda6964cca900eef87481c25c611044f2e312c773 6f38403a2214dbbb77c69e8802884a52ad12a51c757ab0e0d29a49aa8238 86caeee43da98bb483fec25afc2646d439612cd002ba7a5533ab35e887ce a1de97e960ac925335f35b9182454d6d6f0b205131193191c98f59305f2d b1a6bd77ace79d0bb331fdab15bc1e4b601a9bc051a30c9bc2092357d42e 3a53ae7ad9f459c54082552312816c97ac37f4b1e65ec6eaa9ffc22810d1 9f38601689b73bd75116966f8bc5fd8852178681f53cb3e527943769232c 777a62c4df10ebd76d736c7f49c01c08b56a29e42c98b1e0fb6e26e46dcc e3ddfadba9fe0446ae6afecb2ea0ec6df7202c02883c5e49b6a37ad6ca37 a3bd7ecc1acf6315c5eab0aced832fe5e8812edae4ba28eabeab94bab263 fa2680a5a1e7fea401320f0d3f0f5a2e73bd0bffbf984d8bca2d79c46f2e 3f0084c3ddb2ae753ccd4e52d678492ef0633d73c071ce111db4ef525ed3 820f4664822392b804332a80488bdfcc5b2bbc7561e2510e4d04473b26fd 8d7c552c5fb5acff10ee83f50db121b0e453bd7beace5ab6bc43f2b7cfad b1ab63ff728ab6d20a2afefd196be0d34398ca76f8c38ca8468e61678b4e e41546ab9ef514b1c491aa687930514b9b8361a047e291e6881ce10b688a 17d00953732c6814e535c9189e41676e5e19ab2fb30ae657994843bb197d 8d507d658ae2893568d83fc4e5826ebeea1b50d167f07f7e9da5565a0e15 bb71ee8b5fe5fd6705cc3369f5a5967e417a352210d0a2b117f26c5369a9 49f583bd9b5f9d17ec0f7f5b9a42f68e13685dfb01d7dafa5cb01ac46c81 c700b3d879c7244c6ddd3f92758d2c5a432e0d9d5216b89e5c4f433b9b72 604ec9cfe7a62b5d0bf925ecdefbf69bc4f90b44f27bf7ac67682a8b9a63 2781821658a98f292d381b4889a86fb6786f62f742691aba2acfe9edb880 a6577eb43c1c8164ba99f2ad525ac6cd396f19fdde0957cfecd700d02038 b081b75d6a20c60658d61e4ec1bffed07531390b616e6dab23df6d310094 28efc4457f1c2f0a8b20609d09609634f067511cb2498f5edf6e0c13aaff 75b703ecf55bbf89e2c976a77431ba695d05ab804325cc24339d8f9524e3 70b5b63003140560fb45f23289e422b194e71a7521a78d1dc9c161a74c3c 8ceda5b2494b74d45f702df198f4ed2bdacbfbcdadf6ae398854fcca460c c71d4d09ed15bfcb1dc5531588a884d6ad9a71f4ce5f5a04a774b850357e 1373000734783944585394d4e870b57a361dd63f032b53ed2c2e95398c0b e92bd8f85c17e372dda5f1183dc01d3185d97960fd0e1971a6040fe1cf98 c1db23449a532baa45f2db595e1f85305297040876fb5abc3660c73871e2 fde15bcaf434e4a9ba5f3818a1ba4964be12f577754816b8dfe62976198e fb3d29f43d57f70718498f4facfa0ab4f50e68a3b3c8bb731db052db9340 93d294eb1356a4d8fbce0daf7204023fd8f6675c4f64cefe8a848c9027b0 c5124e303be7d0b2dc7edd57df1756e8c43fe1af159dab14bc03b3119997 2d78be71d16e8cd7a183429fa528cbccb1df12545a2225d787e09294b846 49acc8b65d557a417fb3088e011efab31f77788332f4b759b73fafdeb998 4fca0deec87974c9509c4b0dd221f889cd5591f11bcc236bef813994c42b 657d8cac66311b87b78c52eef285216cfa63d71ff72ea4592f3bc42bcc4f a17a7c03c471e3651d17fbd3a18bfc05b7d7f8da2ebba0c035142741d7f6 1d56ad79c0547227de9ff96147f7f2a169d483e8705832b2a3412b9bd9a6 ff7f8398414154e20f167ef25c6042992b3d5b42da61ed844ec399bb8e5b 26813cc27d955deb7b451cd0e08924ad9921e51b0280ece073e3162be1b9 b9ebf4bb9bae143c981e10159aea3da39d07ceed88855265199ec85477a7 fef0d64c99d39af79f97ed1e89a8d163edd7a857676ae2fcb2280b00a32f a43b0e37a6c27cee0c19e881a87e3a66e9ab54b8e47e07c4af9c0aeaae3d 9acaeb93a224a721f272715c90f24e6a540c211a07c918d37ea7df854148 0d8a522373b930ccd58c0adbfa223cf6e170765467d564f36847829f1b74 588735b833c3c5e3e49093435eec77bd3982b344e146815a74db34b2911b cefd87f10c93bd6ef0bc7b83530447362f036574d4c506b8e78f3dac8c65 efb656143cd5bc7371f40aa31896c6debbe3df9d869966c2856cde2582ea 92f5ff23600d7bafa0d9fa593fe7c6f5cd736144e0249dc6932ee1e60007 b01cb922571b8e5edcf83471b0adc057998e6f8ccea355720a853d41a6ab ace3498ac497b5e48c58a312ef2105c8d4a9ee59a12f6b06b8223930301a d53916405006fc254f7c36697040a2c6e7090ee03944ca06e7db2994b577 dfe653b3c65dc3adc7bdb8e2830239f3363569b06b72cb6e5c08106656b4 95d7e83b1ea66d9acf20e92a72ecf09cdca68f8229d3329f142a1819d7a0 472e8b17b5de1b8d5a413226aebed2570d73c52b1e47364e24508d72cf2c 4b080da7b2c16533ddc721fb0e7cd408414f93d8dd14bc728a7eb38ec991 b3d0f78076eb5c91e778d20f38f9bd7769498117556efcfa09f0d7e9d6b6 5a6afcb46375f2d2cf970aeb67a2b34c187ab30ce153914af98561573b2f 4c5f06319b372d447daa1c935c6aaab6951a3973b77caa0e318773964efb 00c49c1636a77020759b6c5b45077e4dbdb8cfb4b4cbb876e3022d834a65 d30c1406cdca14b0f6a86fd2619b9f4b4e4fc22f099310fcb7b6159f8763 c06b1ae498cc5a71a2872262c41fe68c0a9790a1e2baab221883537995dd 3b5e17617120b2579c33f73a3e2fdc6f435be9b687bd486efed6de5b9d54 d9cb5ff4c50f5a2834ba9d8cb6f26d99d66eb1364ccbf929427751e4dcfb 2034c51a405a355b5c38a7f0c5df898df7d93d0ad18a13d70fbe66a304ef 6d4f3b69385c2eccd01e9f5aaf17b17f5fa640ebe6e573716e95ad7ae21d f812ee24c655b3e6c5d6433d8d46691dec7a1128c8340ef602f6c4a56044 cb0e3671d5faf6cde696534896f7a976c32d93254aab9faf1124b60ba924 dca75a2fdbe7d974487516fccb0a8d1dfea3827b6755dcb9254c7f606dea 258040c7d949edeecc3ac66288cfbcfd1b538cdd8a7a79039a216bf4153f 84e29e1969dcef35fd5099b680dc1fe95a1495e5f7518a94bf91de85d0ed db49e8772ff0e67ee1943b00f954802899ef3ca2531dae11522a09f9d030 c2d3b0c9d5ca18176270b6992ab761560b93e2423f233887f72283750deb d9bccce9d0dd59060089988b66598b968776c0dd4ca51ffbc5de2429ec09 3e7af7ee930ea2e67026769a4f030d4b313b493a8da18eaebc869e2eb434 dbf72ccb8ff445ad94016f148135a883bf18df02518193a44bb34356e59f 9bb88e11018447430b58189937c770d6479c7b425ffdc7eeb5fd73c40f11 5d910dcd1414653e3ce63c5f1c1771da3f42634d72def554957b69ab7dc6 1fe984aade365177c4be697edb5a835c7114b113d8001ec7691a8cc0f29c 602ed747ca593028bafa52219dc50e6fa079530fef9fde48d952b403b2f3 39592e6ea8e59b6ae611eca51e9c779000e5c8b47c632bc6b1a10717b492 1026312abff2bb9ec9c7217fed5dd5c1a49476c69cae50ddbea05ec2b928 f8d4d952e8a570a9c7e345fc86d94ca8b39332b22f2c43c315d6cc12d6c1 088facf6d970606196041f5b361a45ae0032425bef2cb5ae674ee6b2b1bd 5f26a1e727fcbf1716bc831084a0297bcd9029e295c9beeba9204955274b f30e49ab70cac085c076c19ed07441525029a625f457901d653843a05dce 23e944396a1d15491af9d970a7b6acf79a0b984d1194109bb552174ef0fa 29dec2a9c46f56ebbde9660ae9f2e3e580cdf8e9b9eacf3c30e696bdd314 e462fc5c9f799e35c2ffe45a0713690e4207cfdf708cb0a465d045e7596e fb164139cb6ce7d45c6b832124d895488c23d634c305c3a3e1ee505ca8a4 b43a8ea76cccaeb897d160f126d7b20b9249dfd6628f0a83efa9220d1472 f6404b1aa60336dba61b8887d6699209586e25599008b36bcf151f2bd2fd aaf675db5d7ac6f51f9b80dc27257bc07a69bfb8699653b19211bc16feab c2d348ed888827dc2fe7e031e9144d4e60e72e91d8062d12be7390fa6d96 a656d7fac76cb242a434c9becc29ab2ea990f9fc04c6f00bdd11dbc010e3 d63c46bd079ab9a1b5caeee4009cbb8ef0230443af3bc541fbbb546fe8b9 c97fefbe9ae51f8017aca1f1241d3b5dca7d37b65b2f5270199f34abd689 4fbf96cfacfdc5c48601354befb786acd8543160c11279ed139d653820fb 3eea992ff8ab735e65daf9d9891a5f5c4cca3f58af1f66d60938840467df cc7a4d30c8f0fc5e902904bc414bf06b51219284ed45185c9a53572ad9d9 d1a6e2f953bc12f559c129828703566d074bd07603eb03acb6345a1a0c2a deef96e5530528642a1d939e5cba62cd2221d6ee28d15083e4adf9492b8f c7c5ebeeb6ed2a5e28f0fd028a3b5435f560e1dbefaf44f3da19f7736121 dedd5e9c4a15ebe737051c55625ad169cb421a11fe8ab080e0a0d44a9e65 8c8fd637d16166d871694b56af5928b7d26cc3602338c74ff13b6be02dfc 18bbdb6fd96dc38fdbbd829fda7265e8acf006ae20c7030b8e52faa35167 a4c7c0c7908fe19116f25614a03490ff025a7291da713692179ab5368ff4 1481d6285000c5d72211e13cf5ba286e24ecbd508437dadaa073ed8f6d6f 42f12d6896b1c8d9396b2470522a8ab9c066e1527cbd93851a5f15c69cf2 6ba8e2070e13a6afd364cccc1056811be4f17a3b5bcdff1e0bd760fb424d de6761d7d722db82fe341f1adba24e4aae909fafc0249669db0e6a4499a4 3b10b49e091a02c7f8d1c73d93876b8fc60f57581ca689686f3f263bc002 c8367765a287b316f06949d08d25115a0283c27312e5148bc71953baa94d 1bda841ff3c0b4e29930b0596b846d71e22d7c32dd6a25afee76e8cb3d50 4d2d25512ef2cfa17d023be4ea8ea7e5bac59fa73b480da6087d4ec32b20 87eacc0ca44e8c1d3abf4c10c183245f1b733c176d7fba0b7917c844454d 943dcabba56ef28603c37f62ed2d6c34f5c8696d7f10c76099c5547dc0cf a5806ff8c8669eb2de84b708ce909545a0072fd5da35963e9f2194c1b486 42f2f39509124521c10c13dd0bfc0d91554b69fa13f9ef7a80fa9d4eaba3 bb08546c3577e87ade93d4e3fbb48bebe7a8e668c0b54c6ae771773e8687 5ca4fcc6475d377830b8234a8a55d44411d23b5f21283951901eb6c6f477 75cbd59e7ebd7234d8e4596ddac5b83637e7362e2f83e4a07adfeb8cdfa7 076ceac06a2adb72e7cb92aac726bca8f537da7e77180e3fc71efcbac035 271e337dc8d62480d561eaab579070be8fd763b38144c60d51f25668b788 625155f29ca6d6abe3064f74de76b61dadb20bace6e1be315b60aac93322 6bcce53224bc500e40bb77d27f88d56bd154f36b4da94717298c8de272ee 140668eb0bd821f8b99582635bc31621c2c5dc14902f3af28901664bcd2e 119fdfe700423ba627898a4e54e2071ebfa6bcf422c9a4a46bcb42788670 489da5c489b611b22893ee11429cdf48aa8b639b4ff5687dd435e0ee14e9 573730dbe705f86d44fa650f61f2d32bada65dbf0c00eba9def3c63fa1d7 876909ca5a5efc2502e88d9f94296415af72148785aa3abf5a20a813df2f 70f35bdceedaeb514d441050da0b7837ff376875631587c5d5df9de5a236 3389aab4e2d9bf4f27e16afe4ac31f5835eb469b485751972e0a94700327 bcaa43411d4ac605d442c9ef72b3a8ea0849560c815a17c3f00fcf8c6a63 bf3817a763f20c6159d155f3267b563111e4cb70384b5abb6585280aae7e efc65c7d28bdca2d324f5e059e4dcde0ec3bba9b7607f59078cbb6585126 f5302b0872ad55773c7caf63691a209d974e71475fd700c7690d0b0ca448 6420a4c0a2e42063e1397f2a89d9a36afc1d2c0b1960b286c97e15894fa9 61059d54f4b6dc044f227068666798972826f4878f62b95b876046298119 b3e2cc9a4d4ce73f50efd024917af07ac9ee89024899bc2e3d1045f2b55b 0a105ab2a91a6fe86c99d1733539c1f03aad15d387da751940faf01a70f9 47ec64e7490410437dffccc8d6784d8bcd7694e4b50ea4d6e5f2d6efdb26 44b99e7e542cbb6e509449107b10c19536140e5e80a594e9094a8b4fc87b 56900657f018ff22777c1f6d90ce1617a3180f7b3890ee53e41d29f04cef 68599d9d1616cef0cd1e1c587637aabe97813869968812a1e1b2bbbc9ef1 cab023f2f6fab0ee693f38549643a7614abd3382baabce20a4e4b793585f f4cf670aed8ef632f58c9fc91713a98ee4a2743f7a35c74c85014b3c3760 6322fbfff14a72f3b6d8c10a09e4eb94a12f520dc7020024cb80195c9e28 31d34d1c26c5fc4ea447666b82e84ec645044d3f23339547bebcab0832ef 073e359783b35254add0a00de14b7700ca444a7d7153efa565082970a5c9 f62461f1e3422d78326304d76978b921aaf148cba8b148d1e703d34af5ba a5dd2e17634c88258c830ed0d87b848c62dd7738190c495709a65bad2acd 72cde9375560a8a25edc5229215414ac13fa5b1ec2e387a5df0a2503dd93 d26e18e219a012b555e24520da7c88bab40c7b23530f4ce2fcd1eb013b1f fd978fe4349be77d9875a6e12d962494bcab58aaa56d0ff82aa827adb64c 5cffe8695e34d72f88a2bf6e8b83b136b4fff0256ba10e8e4166375bd0e1 8bb7276e919e9cc0721c33b41a9ffc7118dc66f206fa91ed309fadf5cd95 6ee9181aee35b8ae92178d79f98fc71cc52e70e31187214662a2fcf50077 2e00a8dd83226c25c3264343ab97d9a888cc80b42fcc14c30456c0aaf327 7ddef033e6b56114f9f12080784153f6f72f80f1d79982ab680809fb596a f00c0f5c7d6388f85b933cdd10eb8c92d97384f59f37bcec8c869ed63e02 c0024fa2abe046a3ae97557e8054b1c93b4c2ce34bfbe3c22e002b9b0e32 a3fce442519b4f43cac24c23afa39021caeed2a23cb66cd30ec9cb4d98c8 91b9a7f28a1edc5247f67926c3053eb0354a7d5b315d9fafdb4f20476ca0 a6f32391b07ae85aa3eda2afbe3988602557aa8ab649c893519172da176a ccc0a6f0f0347161a7827581750cb9979be680b4b310d5d63601e0e05d4a b0bff5a788b1be8a4246a98ed82a1a0b151b1da723cfddf876d0cd1d2fba a0c213d6216afb2d17a89f2b9862a1244536e7914655635553ede9ccd27d e8cea8614d5185d02dea03d890ff379741476a588307c40f86198d843a14 dbc8438cfc7597fb719783f1bcc67119c5ddc67f6c2037e4d747bec17094 21f0c9da1404ea8b8d21c7a1dde8bcedfa65fcaef1ba70ba1717fb2c95c4 64194f748ef7aa53498bec317f392a871aa597219b7685fe2460a5dfafb8 e84c7464dd5aef096a83d669c943059dc738f7f785437ed4f92e100faeaf 3ea4eabc199c0e2c65139c38ae9c6435c7d3e0ed51c0a03fc93a1a3af6c7 cebf141b4fa9e7d841c3da6e2972d19473d838832d2857fe2f08f28b8d47 12be4842f967bb71a2a5a965e8781172605cb60ad1291dc0ab91db49dee2 97d1d9d005ad9df76c7e9c4bc350b5aa2dae0de97fbc4994aca26ce2d1b1 d9a797ab14e9c58e73c14b9c1e3d6bf3093d9d435a3ff74a5ae9d29ec0a9 8377ba743bfaf49b8d68433757f1c93cb57b4a765788bafdf92d590f5753 a48303b4854c5bbe1d368b873ff815f970369b76dcc14ae308a9de8e0657 9cf665fe4074e2f2107c0d1aa1b46eb89ff1e41381edba939e42f93db975 08ed9bf01b4e0f88eeb9c954a6b6302d1e2cafe3709b337c012708f19352 5c20635dba7d2969561443aa35572abb5d7a24dab16f13d9d09454c536ac 30299ed2ab97924e34bb5b945fd258f326a6bd3f70b280e75b38d7494f11 f63efd4f7c3da98b25b8d9d355be2c657b93ecc15ccc82849c5cea96f41b 2471ac085b144345b88f4be0efb617f34e89bc92271bc9660c3a18253fc0 6eebd1e3ad1f176dec303dbb5de469b706933a17fbf0bf196a54bb716b95 235c9285436e5868e7567827ba707746e3175bb622b93e3abfb861e97444 0356c6ec5eb0ce208b7b9ec592f01f976929ad6c61709ef6a889998ffeb1 546cd2c9becc0a4ad045a1578d2c468943ae045dd8d48c5adfb09297af58 d22559bfa6ec1a4addd45be0ea2cb355a51f091cf3a01ced7f043499bd80 151070b21483ce706efc5ab2295554faecff383565dcb2a596b660f1c522 cf6d37e7144c524cf7c849fc1c23da6a5db51c92d9c841c7851a94ef7c8c 688dfcbb0306722d6208510fc31dd810b0d5334cf58b254900cd7535317d 5a33d196f7c41b9a6c2bd857b1f687864da6577f072ca099980b2b1cb4ee 526a2eae2466c640cb490c27b0bdb44503a5d9b5e9eff69317d23eec47bd 02257b60a843aa6a1d3035d3ba6049a3b9a8285a2c44dc36c236272f12ed 734b0344ed3e59e7690cf9edafd0d3e0520630905e5b894645deaf7229a5 4e486b5986d0a96ef6d69c143b1b77e41f8b2e31ecf2355935040facb606 a38d146e6b6b4c9adb605841b3f2ac705ecfefc62b12d122158c723c6934 bb44e2078655daf57bf9bcf9528ed3a287b0c365524043143047f0a31d05 61e978e1fa3897b45a61087bdea1c1ef965dd31a2af81162619cf82f519b e13254352a4cec0abf30fd920b2e2188d0d40c3bed6b162cc13c74b90e2a eb44b3250558108f3e5ca600c13749f63af096a9d30ff28fbacbd066098a f0164e8ce031595a5169d7b7fdc80bf8c410af559c1ac6862c8625fa8ca9 83f12afb11300b924632a1570345d926a1cdb3b666a382a029d5c35aa8a5 83830d996ddc74a9177b97bd8cce3b5263a7148c799dc219b8a1958caee1 598e204ae50d85872aae0930b96513755044dd58cd9a8d8538cce4a4cfaa 4ccad5430516db8fe7f03c4b712c709430663b57d4f9ad3e691667ac1202 57d25e4d112d84b270949e004f18551c950c8874a9ceeb61d46e4a7f2ec8 75c905f5ddc6f4596a17485fabddb561d1441941c75d77a4b4cf4be4c478 d962e56fa5e0b30e87361daed0cab26083cbaeb938f2031086ea914eed1c 38d2e8651806f615d57a9c59631d4636b2687b40b1729917267a096389b0 a801ce30e5ee03368c16f541869e3ae9cc7b60093b1866b6cb71a41f08a5 1b240ffd98b3d9a57e81b92da16acb7b0e71fc84061a2d680b07bc3487c8 8c66ef10020431d72dbd3668c285b16cdc6d8535c89fdeddff7802ffbb30 825472cb709c786b0def3fbf78fb2877636e45d224b38503aa5f17e9eec7 594f39cac1320ee2da89e6d3b031c8ecfb5ad654286d5c2c2d8ef3830b24 3ab5b713b4926a559605d6e0a4675ee9cb429a0e72a8c67ec09ad19f2b93 52ae76a0e881dac1498cbaa642d1b6c750a86d372cc0e84bca862719914f bd8b4f8c675bb2b4fb86d7b7c88d10ae46b8091a590e7e0d46fb150eb1ed 2995efbdc0b3543cd8b1d946fde72c6868a456d6f86988aa24d1d3aaa886 a8074ad6920c912eaf1b1e34b92f3c340b57c19d929e9ab96b21fe429689 ec30a1ffe7a6dbae1326ed476d030f48adcab3e3e2dbc81f7bb6641b6314 78a820e096e987f51e7b92c9f4a8cd3e0f3b6180a7e7e9a51b077a36d45e eac8b9b6ebe286fc9d8a157dd339a1f2ab6afc42b7d216347820516e0700 25541f6892b8d402a7f53da3bc84a4b0a07be8b094cfe2ae9afe137851f0 2a2d5549dddcf623bbe507d21521604be019a51f0f5b353f613515689663 cc4040bda516b660300c6db6f0bd72f627feb15e68f1b04bdc40b54c4c26 c4061a89fb9347138479b38a59918ae562ee32d931902ac2a0b5aeaf6bf4 b2b0afe1b513a35a6e9fa244895db3da7898f11e3e9531fe9cbbb4b0e665 edc4c6b567fcea28a5ef1409a2489904532f50c91bcd6fe7042c47fa2032 f253f67498f7d76e64125dc1af07d122ae6b8278e1468b3f86067325b1b6 fb64d1b94bec96107e64f6ec3a63af734f39d64d7eb2c415c9fe3164736e 6bb3d5b2d2465f4b794ca085c7627f882d8711a41ed148fdd53721b81051 26fe58042357bb4991fdf33326df3b1b2480e08e53215deb5136ce0aabc6 40aa2a6769ac37898c008756ae217b59c6e8fb0adc6cdcf90db804e51e84 feac91eba74b3ee1beec0a3fa44f18a30340bbc61769f662ecf0b16b1cbc f4059f38fe933eeabdd92770f4defdfcd8441f7f596d1dc095f927595d70 b89da3e97594b33a33689f488d7cfb7a6c73bec4623568dd17cfa3984561 eb285551afde35381aeb0e8256bd3ba58d0f6cd3a4a9c8073d414bda5b79 2628fe5a0c894d33eb79760817c2afea036aba15059bcb814cf2ee9da9ea 143390764f95ce235dec4928e560f529b5a02261e95a0408c4f428c5f1c8 637a6a878fe24d2a6cbb22aa078dc8aab00146af3389be3ffb5d6cd90698 438f5b5af7da0899bf3b7b0d4fa04fe263e9d7281e74ae210d8a4ae7b290 de17eaee36cf35899b1575dd6273dc509d8c15067796823cac82d76f3359 f802cf1c69dc24ff7605453938a6ac8bbc2addf28f27c9bafa2afa01ab43 997a819333f6a4966286e798417f2fbfbc14c4380ee965ed213aa5ca64dc 9e61d451d10743b052c39f033ecdeefd268f42bdd37ee3c29f8a23d5f4b8 f7df196d35a2fafbd288e5552472164943034c7410f34a422667eaf452b6 2bda60e9c08e9a72391b125d7c4a69fd2ad5b80b66b0489b0a798d62b131 febe76418774d4aa3dbc47b4be9aa1d8f4c623b44cfed8663005714db65f 1f5ee383fb5890df2220423c883ef76edd60c5094fcac612c0b01c4e4d74 0c668d127af274cdcd1a56cf4feaa7a872d7c977a144002c7d2dadf1064d 78eb35e7738d997c0553ff74db30f1943e21e6e478177201344bd5d9b50d 72bcdf01628f77f89ee5f7549975ea7239b256a2f3ec8eae02a8b4d208dd 59ed45086343eba7feee1513d0d6470d844fc3f4625acfdb02ad6f1cbd3a 377bc3b40caf1af08871ab3b5ca4e8385ffb3176a90c7eced28391023ad4 c51570e57011a2cd8e095e4db0b0899976ea241105cc5ce73f96a8cdd3c5 10bd9ab974dfee1cf88d84289ab1e905f72cd1417ab863c2615fffe8d5f5 53764004f6415b59e40db711103d0bdd75b9b81878acadc8abe11222653a f4dc64c5d105b503cd854529d50d5cb436033995e4064cd4dc5903812210 4644bb563511e15b29d391932d7974108ca90b7eec2ae3e471a3264cf3d0 e9269ea57e5a0e387aae85ad0c5cbafd83844386953d8d791fb0acf38798 1ba0a8910b176408f76417c89fbc45b2712ac5def863f3c86bd04e3fd586 38bcef832d811618048c30c9dfc83073c2389b6d2829a52e9279be9866a8 d62378d000b3087ce09ce92cbfd0a46092bf04cbabfed2d748aaa9fa204d 448eb6ce63ab7f466bd89dff50ce779d760e247f7f18312be41b336e7ec1 54f3f4fcd6bee141bab05db77121a003a1607fe6b32a0080bc95b8686b53 25b8e1aa41f816a77f16e2266eacd9b5910e24aa06dd7b96903b97df29e0 97dc2bdc4740658d60f2b8dacd4e390820b14fb96126eb9791e4664b2404 cee4ea140debc5ffaa5f38b76f354e4997aa420a80353145460cc94a2a5c 0bc7721554f23ac7dacf008b1248c14a8527add836692d3c02f08892c79e 63cc20eca29b98c357374cffca2076fb0533976d7c030b8e07ec4b180e24 2c60b3d612c08d6644dc307fef9aaa28c081499a3cbf419b4ad5a0a60f68 a9d613117719da0a47d042445dc3490e9a1d781590eddad43dd4612ca40f d471e53c41ae83374b43f1c13db65423fbffba092f2b7aa60f2eaa5eb3f2 bd3aa995c17c59d92025ecfcac2b9ea9d1a32146b87298e7699ef4f917bf 1922cae950631c706c73193782df942355a2d4517aa2725f29a6688a811d 471e7a775498d614dd5cb81e89a529e3669d6eeb74da69e3624d0f733209 bebec51ab68f4d43fb139a7296f71ad4f7023f23ddbb5596f354cffdca3a 96fce628b654fec008399a535404e2a6042c7947bdc80c69224025dcdd25 47705a6ef9e7aa13a19fec4799a66968a1c24558998e02bbf8352e16a233 9aa8bdc9a501b466d4ca9df2963d6536169b126b45997f928f53add9e5a4 cc182bb474ff7490b473c95e75f5a79bdca000e8d7416cf7fba38090f1ee 4f5fde9bcce9a40dd54899d5e2028268be486b4415a67163ebffb3f673a7 33ba12fe80bb833dd6d3d2abd44a226034a09424a6c01e91dcd771aba42a 1d8e415c95412115d88739f79f194dbbc3a00dcec840c06ec199d79e05b2 f561f475fd716477f27f81e5a440675f5183307c7221ce16e65f0e6cbb56 bc66731c22c4c232ab403467869c8da9192fbe1bb08b479a3d74822fdea5 942e217cb214c1d92fa29cca366a6b829015680f2a4812c51ece8d01d4e0 add8654c99c244a6c28ab09edd827cbef7ed69ed19f7a0e129725d0b5ba8 87e2ce9cd41f01fa90eb92eefb419d6e66f2cc91356d5f98eb99bba7a0b5 5feb828c24fa37d0b9ce765d0a4ee58f34510740d5d3f95f553f0b1e7cf5 48519f9406a44040bf835c80ac5d21336d81bf2d2a2adb3a93dcad504abe 7adab8369cfdd375e8dc2c39451ab58b658c2f0626cb3d334f53861ff898 134344f40f9682d7e31eaee8df4be9ba7cb01ed2c83307fb842e43b750bd 5b359a8a700543a27fd9d9296863f46279d8d66b5b3d1f585519d71a1e24 7c4f1ffd128f620531ee5fd94783c19172d67f0e72684d0b404c687b93d0 f6bab243cecac4fb85ef5d25a09f41c43d06daf0701e0596631e92a5f0a3 1ceecc72ee88388fe53622ce82baf6da5b175fd13c15960684006e3531f8 cadd90720758b42feb90edf259e09a562d294cac14dd59e7c0c9e8c11c92 3bb673f9f34f6534b06dd775397c8446f8264a939f3cfa3caad36311359c 26662cddac388779f6827829a0330345f21d6b6bd5313b589510fd5e431a db628820252069f99b5691dd656c548dbf15df8169e1c3632e5f9ab94081 24b3199a285a2f1a3cea278300be84cc3a96bedc7c606a6a092df42eec84 941af1f1c035ed03434c6f9caa6a2a121961545796651bf1f9f242da4b9f 729103f1109e64acab6ccbd961d1cd1f97b18ee879e544442cfffdd02864 b0fe1cecc01dc3956d3a26262a1e18260425976c12c80e4d0d5f9ce367ff 7a7111d871d6976a8d3007c76ba3da3d5f50b6b6fc28ef779de8fa4e6a6c 314620558cac46bf1c4b611eb143b2b719d0bd0a6b469ec7c4c292e1a1d9 a5f9a3a9dee4e5eb9def92839bf1bf1e61c9a2959675561b06c5e7a60df1 6e5c52c5353d13d7f8469b769af4c5f1e7bbf3a11987a867bff7e8e4e828 58069ba2961835877e7e3185f9c69e792cc81561205db0d16c781f12b696 451964b2565a6cd07a01d9d0b44cd9cffbfc4ea4476b306ffb5d06470e7c d2b15121d70fc35d5b884756f6c70f4507d864566ca60e746451a79f4041 baf24231ae71ed71608cd1321edc1ff317a2694dccbccdd3af4b0dbc9d59 a559130420b76cf2a8550b862f01a390d3b08ede39f71ff6ecfb43ad7ceb aa1e8a39c1b38d4bb13d29a630bf86825ae0b5e8b9e34c8128895817e34e 53d92fe6e3f16ace7d80b3d74a3c22c17c3882859564ea8607e4c77bfb30 19d91dc34d240a8cd30d53ab2bf059f1e7ebe2a96ceea78ce67d21f2d5a3 b727f733c7eb06aa5ef457e099c90820585cde2f75237adf23a9ae44c987 60e323f9241d675c9d6fc470c955fc7ed3702f2944e64222fa3d034b7bab 7aabaae5540c6edd1ee474367fbb7c43fdf124efe5c7fd42dbc565e056a7 8b313191fa11ac539b7c3d7fd6d40af264d760492c0fd34db08edf111f85 30462ee9b86050f7e0153523b720917a03361b672caf066400fdf1c00ae2 ea55cdbebc351672d92a41b8903a5dc04b3b3334bde01d822b8c117331e8 679e95920421495c3c7754417a333fa54d99f691fdab417d52d54f2ff294 7da7c6e5bf564ebe4af9b899dda9cdd537905004a54f8949d4ecb4f57884 ece070144d7da67bf379e43b79b6fc1bcc61b5d28a38327ae327dfc079f7 fb112a6515bdd97ab0d99739fca5c032a8ef4c9b96a212a0a5b3301ca9b7 95626fff7bda9c0024c1c73692718aa183d1e33763ffdacfce699b46b5bb 660f468334eaef6ba53723d19fd1702a8e8567629f91f9466821705ba7c5 2f9e67b51855d3d5bbc882c298f102cb8bb1021bd8fbeb98b42fb8107f58 497c008c685c5d68c8fee12717ae7dd6231d71003ea44e0cbe0c40aee2b5 c675db753cb9222638361dfb1856794f0c383b4c528a80e8189cb189bc49 67fe6b1e84351914eacf78b224e58d08bee7506e6c50b123c1825157511f 83118b7085fef33d311c93e1a51e763259fcb63ae4258f49eda1ed097336 3430050d2e4552b655e38ee6151544974444da9a04423fe9b644a027747c 7c15029e0415585c3bc8bb91cbac3350251e4b66421a12762b37c7c4e8ca 943990335a660a5ebbca5c7b2b463a2603b0873b7dca794fa29a012a7d46 4a89bc888b969b711cdaab92ac49b71b69f6aebee7b880e8f21c47307ae5 59c695dcaf115fbb1b5ca36a7ba92b9f30fed66bd9299132ebe8247a53d7 c071d3e53163401083e1e44a77ed47af7b9534e2d2508337a4e2373e6b84 ea34995820bd31cf99de47cc343ee7ac5d795686ff6d3946f6a718a2b4e1 388e6a36613bd00be98c0107af5690434fb0f8d641dc58f475a382b24fe1 84b906b0011462d8da5875d2928479999cc01bcafb0c15ebd5afc412cbf4 11d11cd2f37879a177d1eb1e19516b0c874eaaa5a53fb40ce33753e2e993 6187e4de51486872470b15bf54c6745b4386d5685b810fa71fa68f2508fb 5ba2ce9b29758b6da523b895d67c01d31c98df4dee69296438e720be3874 26c7d656d2762e5acbc2a9846d2efa8e494074a1814773bccaaffcb20c82 d7f728a9cdeeb9c4c731e7744f9457f5b575eb8b1920d259c0095b365caa 3549080a515bb4a2e1edb5da080e12b2d60541a7125f364237560ecaf4a3 b6d4b5525ea1144c7c1d669bdb1462553f9a01b5d1e037d612dad9059a3d 7f706d8de49b234e0bac63dbf6edd78a7de200dc68fed3deb91cb27586e0 46b7eb1c293bc04b668c135c1764bcbefe049cfdfd4869d624bb8845aab8 aadad9b1825e831915c6bf2796d59b7d090320a7d5407f7c3a5cdee2ab74 8d54e11857f6419b7b0169fbd1556bfe701f52b54a2b82ea01f0c8a1a161 b49ae4cb7111ab3efc90f7be3599594dda6bc70d364539fa6ffa042d7374 dc24bd86baf9beae5b1110a5a4ae4dee32fc660748526f73262ce72937d8 3c6c64bd2d5ce1224e54119f529e5a1ef4fd1dd50bdc1e834c9417d730c7 dde8eed57a9411b6e88c18cf76b1230a572492d21285fd1e9f76418677f8 476d744a636644c9ddb19addad1644f1367c0f20deaee492e4ca2deff947 616a1821896831344259f68ccf245acea770cf27e7ea1c7600301510ba40 9df28bbe5b437e93ddcbd47de1ad0d2c6cbaf73edb0a34aa91b230745f4a 67911e4e80b048648ecd8a8e40b90beaeb72af2043422f66e3a591962a74 9b9547e095161f77423185ee544e73d1549418d190b1c581951ff36201eb 817425a77323d804160249dbce898de395f5ceff173f2489640a60e52902 ab805b936148a4eecb67ebf39b9378bcf881a22de96084d718a2d0447b7e 55c10b8e6d9daa654d96ce1113f6bdd045e40dd885343d6def5357f1af85 85cfcd1e6d23d9fd205882549a610b790e6180ac842e3a36da8cb5e590f9 105e43d8954071df068f0dbaac1fa396232c59e008d8c8869bd8117241b1 07245456c9f6f7446728a1ac21d4a838df8596e00a9814adc888027a9054 cfc8617eaf1d2feb66bc31d02a93ada4cc5828ccd6ea05551a3c31570ff8 c724cc6f6397328fb78cf610b63fd1ee823b9c75f032e018593cca771975 ff0fe7c1616536f45b9a5e298539e34336fc9da7b20402b1d3f6285decf5 0455002a79b8824e2b7ba0069ff39b3d41f0533ea9d7ead72014656e0a62 5061e828235f112d63632a19dd808c26911804dba1c751b378f9d328e841 d3942809e4d92105f22cf415556b9b0d5d6af43e2c621de6ba34f5b04026 8961be56ed891310d8bce7789be40d3c9f2146fbd98c6d6a87ce61f6507c 8db46f1ff450476d16a814ae6453884e1b0615ee4702cd8566b3ea55cb13 ad72250da19e966bbfc23d9fa73dd4357e3d53f9276323a93908c967b2b0 ccb3c4815ae8123dc8e02807bc06c2fd43298d2abf715aaa5070d34a9458 b7c5fa3137ef11e4819cc5be17cd2a17615d64c6fdbec6dc61f5d6e381a9 66f0fe99ec62135561230583f4057cfccaba3a65d2fb309213c28dd1d16f e98e7459340c86da56ec83f66f59a37eadd52325b541e1b95d91a59117e0 38d20db82f036aad19f6ccca0323669e651150b43c916073f53c0efee9dc 5dc8862624b73d5bc33135cb728f15566a7e64f8dec3edb616f12e23f25a 8daf6c3b0978d7a51a33bcf1fd9e4fed0b05b8ee953c37a8238ce6ff43d9 b7e0f0a4a41e10641ba5f2fe8d0ebd43fb6fd6fcca4195d6f9b356f6b75d cbb8ea6a20ff50e576dfa6db1ccdd76474c9b23beaa5d0fe716305ad6d61 1b2d81175426a65d1ef35ebfb61600db185116afd316a7af27ca3c1faadc 051c46be460118757ea159d840655378a628913e8f8b9e20064b76d72f76 3e8cf31d0e84f581cf65d8a917efad74ef03ca0efcc2605215342457451e fdcbfc1da61f0a81d58bc93c7f12399702161f3259fad68e9856a2eb6492 5b5effccba01c9dc11350b41ca6774001f74876c0a054e616054bff23d73 fe04eb8679b3b2d2fbd1aad1abb0e05a84630aad1c64bfff4cb9b31d8a27 152775ebd2d34862c84f2c8e3e11a415611f92910875b9cd861583b283cc fc9e807146b39b0a429a80c2c64fdf7051026e7e773ae10ff54f48c67d69 b705ea6098aed88ffb83977ac6a220ea21297db202ce9149d0079aee290a e08c63fa1abbe9c1ee00c6f1247bf7c4bbe0c52e0230ea7363a47696a331 8a6fd8e32f1b23da731a2c0cc17904c82df9e7106219d8600ebe4c4bac34 fd580965969c21fe63ef6d627373bd9527930adee266df364b9a8b03f3f4 c61e85f94b3f17c212c3a1e67b5c2eeadabbf720e9ddb9b1afa4a13d9fc0 412c15172b15e59abb67514d2d182030ab477d1c283de1d0677dc6933c3c f52a118819967ae5ec16d2902eb49f20592a3397b0b6ad67d26c2eb68ef4 4712e44c16c8bf3cecfa3653a403b5ffc77d6bcd80eaa5c4806c67ee06cf 69623582cd7eb43e4940549a747f26beddd60a6d1adb57402529a9ba6470 87a56f965a93516bcf2e27ab237e2b9f61cc89d5c6cb006f0667d142bee8 9af8009a56ff4dc269657b11f0bf57f1fd7beac27af3fbe85bf3fff15566 ac294e1823f5604257084bb7ad3838eee6cc0aa0c1ddcf717a921461a4ed 56a5ba79af2836d3c22a4771b3f08514832cddb096540da63eb95033d07f f6a046e25c9879df7ff76207d21cff63971ff87502f913a6298384543b13 75125b4adc3dddb931dd881aa281c8b74b99942163c8d93c1a166142c431 56f6a4e815e2ad3bd291349bab539aa8fc3cf02b02189d15b8f72b1ec7cb 953abf27ce0171ca6368434ed5c39f5a4dfb27b2a8506206b92031bfb2dc bb25ea6a50922414cf23a28d8c5c13ef018bbaf4ac9548e04342610d9e9f 37d28585b6d59163ed5e3f6abf0329e2208b952f2d2a1a8c11752b0578ac 88284662257a5e218380d35d35666c1de92c37ca37c1da677680be6304f6 0f790f1eee4d04f15500cebe6cddc9b3e7b673488bcb04922ad719f1242d d94f9791426d66a2ba0841c563c99e576547cd25e28d0b90c5abec22189b 433685db741a966ab30e15b82dcf49a8d91585c88e0c31c0276f7fb9189e 5fb3491f15be259cd502e9b45b47de10bc878c0e7c5b4c88ebe09071edff 2e2410e9141bdd055ab449e00de80145924f1716d40154f66793136b3250 81e7315b87944f72f25666e02710cb9659998ab58d908488b6252bd5ef5d c3086197cb09bf88fe533efa08d0a83d7423b9088a259d35aa0847b7e913 a543c2ad5d0211c7a1c0e03b71ddcac5175b96762011ff2fd416dc8ef9bb 6e5c448f84a65ef2528f8cd34cabbfdf688f14b0dde94fef3a49044ff2e2 ccb1c82d3969a7caf28fee5f651000352a451d035b6829292ac0aa645691 b0a5a65d19f07c9d8842268a10f11ecde12658d7a1d99756ebf5788f0355 ff1fe4225dad3e19775afcf7ea92bfcd370483c20f5f65851d1441ae94d2 5f5e78bf1753b6d30bc1d540e545a9a5e49849fa185eaea3201f12f1f95a 4c4d98443995b6ff84d774866540c3016472f8de1c62ae4a58a39a3acb42 c506863927eb5828e75f0e56b4a287f63a99884a616d77e05f4bd017ea05 7fd5f691a62777e3ba4b2840861abbceeade83391633e409a13423c3609e 860211c682caedfc6ee7812a4d97f12c136c0efd89a9386cf1a67d08c06d 5f9483dc440b77728d76069daede8e14f0895e9097b6b920266099a210a7 1592371a8f30b1b39da941432f9912f99ac451a7657310389126e02f1a45 645526e718ad3875fc0f755dbde9dcb98be7c6034e6775c2f133ea673d8c 4f007a6221eff0d891cf9394048bf95f8805df3151b0e0494cf42164ae5e f3e68135b327e0e2a7fc8ef57eba3115b5743eebe8a9e0df52554ee22d49 e409b96b535bfa0eb1d27744bee8c9772f18b99891d0c6929d22fe1f59b7 92c695e082df16578df8688bd4f590647858ad4344efd0ba62f438e02350 1646d4f022b1dbab67478ff2fb652760a5e08bf4021e5b2c772ea9a15e76 74711918eec2d51bfb323bd07959bba5dba61bbb22f07a3bd1722e30f686 2780f6ea6963ed424bf510501fc3b3cab61034eca455059c472591c3c9d5 4ec4462e1c6e8fb90224604a5d1a2512e6fccc5e689e06f9cf78eab29d61 65ba2bdbe9b9c2214f031777e35175379c2373af982e15084159ff8d2fe6 556fc365c57f60cae10ef18da34b5bbe0a81487a0d1c9a6b6b468fd87e10 e47fcdfe711048ef1500750cfd5a477cc41ce3091e6b09d269dded666a45 5bd328a96d8b3ea43814503ee91c7c6db023b6f5b6d6a3bb10668836d9f3 5f6f5d34097321a4cd5a2f06f94218bd5287d3b7056571bdd9c04fffbee3 ea6b02ef27e117b6eb5661e2fa4522d4490dd2041d9d69eee5db1a7d7185 ca32f2085184ddaec68c11a9e9e8c1f136d938db2e0f8fe8e5ff72e1feb6 6cb5ae71431015eba6004192bc26db9e4565ec1a1f76a186a8acef7377ad 6d9279fc9194e28466ce660e7c386701ec5764f7eddc55eca68ac18cc531 5a70b9178e71cf27511c1c98f40edb1a1d621776ebbd1b2e37d86b0ac66a c5a57e0ec609f712805daea5842c2d80c732c112ee8e38d959f2c777a189 2414ae823af0e4ba8a0463dd47afd57b360f02dd428622ef24f21a79cd69 b4f4e1cc041f88e73d8afd1312e764fec8411846ce9253df4f89e9a27de6 48af6035431a46a8545a88337c898dda8d2a2cbfd8329307980de1a08835 2be61863ced7c52a9a2fccd5e7c4fd3a3ff8191ebfdcdd9667bc8973a02e f6cbe978ac9b1cd4cb94b2333638e06259fdbf7951e9edb933003e5051c9 b265a79c78300bef42ee42f3be5fb4ad88b3a2b672fb2bd3e1dfb8ebc717 0e1aa3d2b459a3bb54ad4c55b4a3c2fdb298746360eb7e9df2ad5c997b79 0614b89b18d944a1e910c90143e7365f8877424dc028dfa89182f89b2f1e e63a41585be6e09944885181b901bd4e031c6e2523e724bb084d703bc6cc dc0943cfc94cb21155815376a951645f8ad816962d1e515a8fcf9d67d011 36cd85d4ff2add96bc52fc594aab6f5b10328c130ae36186ad71a20dc245 60f676a4d95710173d8882bc105bc6cbf6da468720b505296c2fb9532972 d2922d1c9647ced47da32309c115461c18cf544ca48a392223f75fa90e90 3f85c656635277b83ffb30c49c098bf364ef5c74e73c6732f673e958f2e4 8feea1e8f4edbaf268768f81dfde2c7ef5b37209878c353f6739b011815d 1e267278db7e7df94ca3173091643a4bf69c5fe0078455a6b9e6df13d2f2 989a6ae7415c3bb74ac85d36ab061d437da836167de6c0df79d4c28d1fcf cca59b571438650fe3be00de5cc45cb24def52b49c7c14ee3def0ad68bee 51dc42480752ff2e10e0480f6fd7943510fb7b2a08bf687e7a805f13cf0e 2e0501a2391115dbe171dea3b9a106e872e6416c8373be8dafa57c627b24 182fbdccee8fb9ced4eadd3a6012291c211743d5c11e0d8b0c78bf61f682 116925bf2e525fcacf232bc532ec67a1b07d72c559f571ab4c2a65c8e0e2 0a0c2055c57a873051b9280bee54ad9e8dba06aa1c135b6efad50e92e334 708aa9be84d7a5b8293a5201dc38e6dca9dd6fec7e9ddaba803f9623cb63 1f46a8c6ac54dc01f82cc3c9bea5e1e0f3d47ab5c055d2a9bae6bbc9b7e7 78e948a9ab9c810bc8060cdacab8f60f4961617e3eeddc439de685de9e6e 96a7a743e8a98f305f847597a5b0c5437895d973a9c08c2be752bb110d05 27ee9e945eeb0522ae3444a6f00630b4ea47644c536ca7664ebe03f0680e 0aa6f78f775e73200717c096dabb2bd5beca18a35d6b80d5f228edac1ef1 361770c544fa8a4a7b832021069ed3e0a9eebe2f00b23eb30b7261fe0e6a 1a402d9f2f7f1fb71d9bed230371ef1f7e2f64f051346f7286056bc98fc9 e57fca50849b417d6226820eaf0fa97ac2e7b94e32f7e501fee35323efcd 9d21030d29fef6fd6aef534165d3fbe604ab2adc8d9b1f1f50ad86fb800f 093bc6d13250a4656fbc8f7c48811cf452d964f1d76e6b2090092778d6de 56a8e389efbb04c7ab90a2425ace2b6ec04215bffe5659c8025108041d06 6f9a30dca5df20e5c5c4e231c1aa1aa16796f489babd45b788d378309b8e 278722155af34d2875d4e6e83eda7ec468855eaf1d633bac3dca70e86b47 e22625fec8f32a3ba5b9dce3b902e125d495667793974e68c786883c6111 f33fba023931d599bc4d5b5e985a96ea052054d97985327b54ea03c14b9d 95d8f82d0bb2c277f292dcd089be5cf2da9318f2da6a3bec77c2dbd872ae eb6ec790ec0340231957a01147e4a1555fdb4c1f10122af169ad54163d48 d2b85a7acb5c30a9e79e8516e691f448be5203d3e7565a091de788ae1620 6f45d9d2b95b5a56ecf66819feec60059a999ef746e611fbf09f813581d1 be2b28f44e4988a4429314dbeee8b6394b8bd9364298fe4fb32eb826f8de b8c6dc0e823ad8d963a5ddfda3ac5b243e376d0f94529a573932ec736855 c778ebbe76c555ed7b20de73e1d37fd41b61af1b42dbb721e4ff29534f7d 26b8f19434cd997ecdbee3590405049c09840c91f17fb7beb2de1f587d65 4c93b8b85334b37a1bb666f446606eb24e38672f8de12fa0d2e9383e02a3 de40f75ebb18576cd829dcfec5be1eb93671d8ee16690ad44523aa4d9510 72e283127ff075a18f5595d5bc9621fa184b818f269f582c6a0ed09d86f3 8711c453b9123da0da1143ca33afc5bb55e647a6127e19cdb2f04fc96746 a33fc352fbed41afca8d20aeb4e71ecdedd796254303a2419a37a421b8c2 8b6c237562b86b735aa7a2a8e15eb580b8c83951b550b4194f9521c5661e 77fd675b9bfc50191694dbea42cc38f7873d29ccdde3fa7db7617e4697e4 bc36deaf07d72cec1c82649cea10074fd2fdf352b115282ce35acfc24a3f e6132186ac82ce8bfeab9b506088db9cd8d728b8ce2a7a293cb019022c03 c9e6a66bee1fee6d0e8064ec6018456639d41d9c5b376541eda707acc920 3f799f4212330a539348afa4d6297e01dbb4e27f2c84025c1d678b0e2607 a2a7da299c59a0949f384f247a2b5b19f2691688b767c0c1ff8e07e22f95 af66bb03377b9ddb30f97e6b41bdad0890e17a3fda799f40f54161f1b747 b9451a807525ff5e4bdf1df9a3487cca3a4b51b285b4cf147fdd88747dbc 51a1d41bb7a4d9f1760181c191466a640dc70a74bd33e910b926e4c840bd fccd0bb2ab01d9a48cf785c1db3afc49565aad18915f9dac228b9b735628 ce614f5022b7bc1d8e9b90fd7ff4a5566703da9e4406919dcbbe317b4e31 0502d0de5bec879570aaf594212dd4097bebc19559682ca7d5ba66277955 af3dd25e582e2372987b6dbfc9168df86a123502a2ffa7a88ee987fb4c5d d1c0f2b5d3b7357c6de31fbdf0a1b59e614d664c1a29ddb7cfc59018d55c 36646fe21bc02d8ed533dc0e8d85f9da5d25f304ba1fad2274011dc97173 9668d59a161e6880b2c75777b1ee0a86347540a973c4bda4306a6c7468be 8241051b80d51d38b606731900ebac8b4062c56f3e774bece67ddfad297e c314fe050faf08e580ba1a29bfd407b5c8ed5e7d3b8721c4d38e860b4557 10e471e3cd82bfbbd107903d9265d5fd1d453ed8f75d4de04332126f7109 7cf854c2d6fe73620721602d84957c4bd6beee7ddb069754818512f7ad93 2097af963b3ec025367141b74013d5ee33633d7c36a0aa6d726837f43eac 036715ec18fd6facae3361f54cd037bf82ff09d5f4e00392cc4ccb90707a 605077cc28aea0625b34e8ea5d2a0c1ee0f15fa171cccdea3a548587c2a9 7c3bef7a3df2ef903ca475bdc0c944b84dbac69a6088c7d1dac5f1f7154e ef0f1f852f7ba8ad55b868e08047ea3ddda0d0b0ecba07380f932e611fc7 36d8a735d5c0f3a064c8720e0f698e1ae68c7f03624403bc6f842ffd9440 a4a06017815a4c31c8a0a175d0ef5bbfef2379f649c92d9caf94a3a76adf 8094632e1d81ee6314c19074b2fe553d83cb22b1e85ec2f094ab06d488c2 7b9027c8e7b40863e3ce9f668ad37e8ca204157d9ce6f292090089eec1b6 3174625baad7da73eceb6e807d62657bb374edc2fe15546c37fd359b68de 4625a96ac2b70b943a42a19fbadda96a20829e80c3fd0773b0f5213f4b0f c1fd4ea1d3a6236343ba7918e5d8f3150815e99f729fe0dd96bd10d2a1a0 d728d1514f218a7047541f7090792bdef3fd46f739a76876861f0a99dde9 3377f9852b43c8af474447459271eca42a12a372e2c9294b74b8a8b051e2 830b3f019f9bf0e9b31093604d411d91da0d9ef2a786d36664979b7b9083 899c081a338d5bff036167a54c30c3b1224b256fdc694b2dd99f14749960 f056ff294402386d9816a78cece1f728704ff5d20867d4c613dd68ee57f2 c9e3db811eceef958e063b6a78a5761eec627466a4a53cec74e90d4be689 9c611a8a3bba6fcb039d10cae4898b933aa4c1410afe4dbe7e44d50a0c84 8d3376ce2124aa48134ae6d2e5468c3148cd5a9aeba7885aaf32e65ca7c1 62c25bb8e6c381a397002c1e146db418ba03a88d2756501efe284df3eb31 bcf84fcc4747a8476de7b0a0220cc63e8e0b9319a6b18f870037dc1745b0 fb34478c4078fde540baa672c487337005c30cb6cba113fa949f212e71ec c39e7179081f640a18f0d8d4bb7491900253bb13580cada0a63795c4c6ae 171d80be08ef005076d9b12dedee185324727911ea6d755b0114b647046a 2b006d7bced2b124304bec42cd6f6261e805988f19fbe1e8aae17fc8fccb 64fcc7f57ce022cbdce68e27183f7cae6161a5111f405b53b2ad823721ed d0ba94b5d30029d54b8fc7b05cf7fbef68a558a021764155bc4eed03f180 9d0978ebd58b07381e95e95d0e66f187035d43fc481d47fe86d685bf92a0 6b31db6eb8c093df78884017a0e3a6cb6ddea051de57086c5e587bb22737 f30db3a615b0a26921a49e72c3fb80713a029e966e3ca931609364b491f0 c2fad5d6d3d6930ced6e62dd11b7498916250da93946cfa859858c7028c1 d2b5e95ac912eee3165125ea0334426a08bea0ffdcf8a9a18984a859f053 e37c4e4f0a2fc23931d8ada6dac6046ee298298a002088175c13b8c07ba1 3ce46772ee4ab48998b4373460c2b63a8c21903f0136e5b33ddb8d277566 978814c16bbf3e8e784a2731e0fc00695b98a830d631e9a8d37aad385a27 423b711207ca497004205c44dacf0a08744dbdcf3cd6140a22bdfecf198a a5c28d09ffeca41e8e2315789c0de0fee9dd533ea6b7027be61130a7f094 6094ed71bbab7afaae7ca2c6cadf695834d49dccd3af751c94d84f01df75 4ed508be5bf7d290e041f9c77a94589c93c5c477aba06d8998b62f60928b ba557791b1ef0b0c58b08f65f9da267e834447a7ce45afc95bc6bce24e2e a25079def5ccf1c0f1ce362cc9a701f5885c50213cdf0fa6dfce80bd5e12 5b5da8eb8cfdd91b158e5a8a1ef0328db42c4e19f7b48410e1bed592549d 991f0fa27f53327175ed8e012c13d6d0d98abf81a8c0cca884dc1263ec77 6f159a6343619afa7d123b500e50b11667bacf5e07d371904dbc404932df 7e355d1a7ac23e237a6a85cd0f7a6015c8e3b3b5620731e36c40754a939c a9122afcc6f216c9972f4ee6317ba968cf1f2512a920f5931e3cdb60d05c c275023e22c3312f46a962cc06bbaf0685fe5139ff8d9b09f189ad19c027 ba6163290029e54db0b132af0324cdd46b3ef44b2ce916915f64ad963d01 eb49a960bf65f92c54cc2e86bd13998c676f5633d4e79464fbcc8995e14e ec6d5a168092e2021333db8e798a3c634c5e9113aaf13352ccc7b5af0269 7d1e48b8f9130e2bd175fb878bd6c64c9ed338b66b96761b0ff737c9a49f d5a8ccb391ecfea2027de59c696fc72d604059956091e40139269a8b1518 70f58ce9726f1fcceb541872ea718c21ec35de69584355d6f62fc6bce9ff 71f0af35ed2192a39e05ee9e90c13b8d5b4783afb0b7ff097c5e17f2028f 250c0918c07edba5da426d346940d2736c151e239065e32b17ae1e4cae42 4f234e38a69e0e83aabb06c51dc2c5fac29936f431c77f88a5122e689455 4ba4b0f681f52020c50dd07e28ca15bd9a53712f12b9b5861a0a828ef221 fc57798fe7ee81768decb31e06594e163d815bdfef21db026525df8abdf8 08643806393843205f6c7a1f1d0c22995e89fe5b4689a239e851878d5ba4 d9b26a6d0a89a272f7f04d9428ec63800bd213903da5401df153cdace8af 9c4a6416da0724c1f709e6f7913acbbcc5860de435a411638ddd7bf0913a 94bbe866eeb4d3f920e55ff2a8e65fe227cd22c4902e755f653a43c6111e 2d76f9c2c7cbf857872d0b318d3d971666ed8f97aa49e77f3f48f5473dc6 4fb4fbf446eea3dac510fc2e095e4f62a274d92a0d1315250090dce2b28a e6e796ea17ea4e7163481a2106895ac73202edee685d6391f1baeadee68f 34d185c51ae64cc44cc58817c5e2c69174395c63b4b0973754664be82b62 93b5ac47387c67a33e07424461abada6f5c84f322795129e72374a9c9f9a 97f9910a1fc5ec060c8832929cb861a96d78b654417edc56d9b2880ea43f 7a1309978115d083d35bc659b1b0d4ae05191dc1a3b3ef1eb3709ed64671 6c17f2f658ed4a143bc2384dbef84a8ffce1d32d5a7179d025981d7f9f88 5754b2c573805c62140f4f2c505bb07de980520b926d6e42073003632bfb 1116972f56015f797f89706695743b91f8336a855bd2f0a2f80415462d0d 12e4c5078324fe59d9573dd1a1f9b246a5077df0c5028f4daa2027b53b69 ba5bc8895baba7195f2e6344f6181c5c535ec909f219aa6f71834958b9fb e0cc72b9aabf3ec7201bdfbe6e13e9af314f9f36fa2e35d73eebfc30744f 10a45d4854907c63156134aa49a5cea9e430eaad6338eccc2cd786532e86 717aa0b4b3afad466a4312c63ce6296035ef85cd9c034c42675856702c9e aed6cee24d0fc37af3466e65f8b4ff373cb89b4525cb4d52451e2317a08f 967134fb66ef81e8e84a44987d2eea692657368f488d2225078740ecd8b1 0b9907c4c8efed6b9c108fc34c76e1c0d2e0f1827ad68d65e4c66ccec9b3 1d4846bf37a49f79c3a851e3cc27b40d679360b5335974d384cc986fcd62 5553aedbbe5c13a3dde7ef55536c8146ad20904b6bb1c160090a55123f9b fda59d92727705ce55c06de330a6f1799ea2a44728f9be2a6ff733451c30 977145cf5a35eb885ce07eb1174005ed467d8f96512e8436ed9fb256d9b4 bbdc623bdda6341c37412143ede724fb6a01e1488dbee95ef524594d2ac8 c49e1aa3c582825bbeda652a5b62ea7ada3f032f8346262e9acd8cda7e9e d4517905dd4e7f5a00a1424dc83ba1d8cbc411689bb8247dd93365ca4dde f03ee5f1695a0f2e63628954bf7657f8ca69f95884afccc0e346917b40e5 14a2e932bd02d966cd12de857de93d55c7e9a7c03a725ef01687a1edb406 7805450cfb752ac468f138c13523083b9c5a03ea906f6ac4025318b8b1d2 cd339b23cc412d0f60a7fbde080e662f4d43a5fd2deef926e7869a78bc61 3202dfb40b503cf085f9ae85700c5bcfeaa14ab8a0d0beb428a89d00c10a 5d4693b52e50be54fecd47935b3179bc02f835486d58621dd9866a494344 7e1c71ddc43346b745f868deda7a86e5f5465d83ebd16582577c2eb0be1a 62206c29c894400aff5536d8bd027380641fd5242d20d3bb2f59c9ca2cf2 2bb06881d7a257b2014c12f5883fa37d696a58c3da34f1b2059600c95c2c 9f9880b8069e2b0e88f4731be495b3a08646fd3e3a6dbfb4fd579a6f9348 8bac8b6c6f075c7a00fb81e4302db3ede6a96430e05836a6d19eec2f284a 95800cb1aff0ae7676f7ac7754d8e447b41de66a1afd7b188f400b7542dc 4df89093901416167ea135e986824a7ba6f8f777b38175b013e782f7a447 baaf0f722081b6fe0ee9ccb6e00419c8c631eb61aee550487ae151761e07 7975a31815279225d55ca401d73c4bb3ff75d3b43809bf38b74e79e11e24 3808fb178a0fa1fc532d2261ac7fb4a779253bfc4eb8e55f453c6b236841 3fb8b3463db9a51695fabdf914a611dae367e70adda35452cabd02ad4126 439d28303eb89312033906392f0d0cd8e873e3f392f7555012845e480391 23c06f1fea9bb0323b60882b0df43d37a324e3c674b7e44d3ab1f6dd32cf 9e8f715766b60a485a9c65a9c99fdd5a2eb36c805dd5b6ce48bc00778abe 0b468f718df9bba2fccea313cffc773e3528881f34853f8278fe753d3008 2ffcc0b9adf7b063a87060a5f89bfb887cebcf8583e7a2506418cbd1dfd0 83739d4caac0f17c41aea7a72f8e080a2670c7e31ae848ccd1a52b514514 db81a59dc6741a4877f495756a440b8174163e7037cd504030703de50734 312773ddc406759715044eccf647689c6afa4545dc623adaba5cf8551d74 b01c611e8c166da2464e73a4a5075d2f8cd7fab00441e52d3ce397601251 897c43307f2834b9714bb65634cfa0eb3627423dfd0f824e89ebb98f6dd3 bdaf7171a4d5cfaabfbe5e8f59a233d7ee419efcc521ac64d07d363648a3 5e50d82719cc3db15c22355e4efdde0f7bbb3fae368308486a5a3da63811 7eb558e3ba1748614ad41c3393ce89d5f82f0d80af04c7f913578fa46acb d53e26c4f00ff61ca247e5efd45a55a2e211dd108ca41cc89a118ad97e63 cabfa185d2e53377a8eed6f3b6f9d42e4d3d4aa46dc75f8a301bc7359eee a17742ce5d035dbd466b9d0171dc3f03770227bb3d46263e9688e3f9c5fe 182d1cc02a6a6ab436c4375ffcda28ea3c9d93b81c03c25c6963ce27a37c a281ca496a28a7d728daa768df3ec6b2e38bf611c151ba4c5650783c5da9 2912d2210718d570bdce6d3650629789c783d8fac3069ab6aff14ac73404 7136531e8bb2cf623002a45d029f1c7e2a46c2a1101735f93f0895e0078e 1ee3c4c16d91c3d7b089410d5804cb13d7f44c3dfd0f5362ee584cf1facf 0f74284715fe0165e0cffd94a2e14786fed7344fceadac96270e22927b86 e96fe4e693792e47b7cbc9a09b75b7d67791aa12f033a1d5d20ebf85ac33 6630c291128376a187cc52e186e96e00861e2f1720395a717572e8f8fe93 9b996fbd7e03b8fac7faf3a950a52999a5dd1e7f3d07d85a198c57a294d6 34a58d4e5f236559c7125d0aeabb91b00d89a9c4746392e862e823c107fe 793604fed7fd0e4424d257813ddb3166e7f74d436f74e5ac96140aa7d760 d5ff4398f7ca09126b7797996f0a0d34267f8d4c59933e5cebdd53658726 4725189b22a8c8ac75034fe3f581094665663de8496da09b5856b753908a ab1a32a17126fa74150337c6527ce883afe09a699e4b29fcd4fbb3c93f4a 082ff2d01961a91e64b63cbf159a16b97d9b73b73bb95921c2b7a518e5fa ebcaee2fa2863c5c71a1d714dcc1300ca0a83c2f447393e5508da0760468 bde3979c8bc94a3ab723f975b1d2a7102ca79e5d8f660cfc9b260216e066 5ad371c05e61c465c2a918d21a93d861d396674504e6cc40446a81e1a5a4 544b6eba26f2ab31124edb937588dc4cf96e31f2af730f0b935557d5b5ae 4f8e7a10bc294031b4266d1cb84a3f66ce30b40f3dc5f94a42088b4172d4 222cafea61b158e585f9847f1f357bd37279942db4e782fddfd695137c2a 3de5ef0962fd119c203007e9c078b9eb184f98e398e7d1db65ad2be7f47f e2871bd9a4caeb7d5c48889bc793c766c97527b5cccd613c170116023f8e ff05f083038a0150e092459c331c9166571130e4f087bd15539b8278475a 95d95a96f5f5fd2d82d8d14a990a8cd9c22284aa50bcb95a9af243501b14 0af9b1ff665b27b9d76891f906cbcd05d480258f33d2ceb34724bd5d7ebf ad4936d522eb36f4b889727e7f55b9a3bd31560f61dcc0e8a3161c5c7c79 f1e25c028517ce916b4d089f5aa8be7a44a5b2efd9abf093327658542535 6157e83ed817d40246d6244c8185e98e9577de9228ef0759d244a4f7cd17 15166437038d78930f492d760b6c143ba0330cff4b38687a523ad0275511 69e7ad97f691af58f29d098788681cc282a7a7cff8c9019f015ca8ac02c4 cb87f2faf06e3f299ebdffc19fbd2f49a3809ccf633c821fdf009d398476 c8972affff141b40c93a02b98a88a96c4a34fa324486434dd452aab43ac5 bd0b11ce5c2396eb672071eb05887b9eb295076d275089b4df99e0f83750 b319faef56e5e4e423e4dfd8f670e63b82aa6dc4877f95a507b0e9eda953 b62e7df78fbc5a98405a3e8d011ea3c504b1f757926e121bef57eba5a9bc 77ab4e4d83f240ba1c12b5e0953de9e07e20fac717608d47c4cf21d5a922 3d56743f233762ac51bd08763f380db325578cbe14fa59e20fcee5d750ec 74a0e07bb30da483b30bb9d9c83ffc56c846e3d688f765154b224dfd9912 7214dc32574706d64bfe216828ddb7cb8c05c50147941cc9005f303f6f4d 84e757d220f1fd1ea3b3c2ce8f9f6fbb2ce1189e1ed976dcabebc9791add 2eb7661f243897d1403656e8d0c854bf240c21c357a9dfd3749f3f261aaa e87d97b892d83acf9e8c78e29ab203365746ecd27376945d66594ec1c843 ef867eecefd15ed6b8cfe03b0ddcdc8862c9fa0487228f723e4b3d8781b3 dfb27a64ecc7c087704885562ed041cfc7d27b9d166a088caef9bb760ef0 ad83a46950ca34b56425c011814138f8d85143f251165dec06df98359eeb c8900a30c2a5081314739085365e23dfc8ab95c6c51c72d26c6f835fcfb1 fe71c614310afbadd5c88d178f642a898d99fdd87a5b3dba07cc6a35eea7 62118a8e7e03bd3816d734f366aa98168b15732539a38c63489bb5fd2512 a92a019aab58fb78a91f09e7ecc7ff5b9245db2c12b8bc25b41f5d6ed3b7 d6a88708be3c8bc6c03e6d4a78315b57d4d27c91c2b7ad0848bd2d26bd5f 78a2f13a33d60b7a25b35ec5602e8114d7b6569d7b44154ce2990ce99b99 df148e4a0afd46ba3a67cf3149b024d757ebe4695ee5672a213c53427e62 1658c353d7450378cea87f8e5b957bef1adf2858310c6f5080f1e3070dbd 40757b1d1c6ea767ee5fcde2a5fe6a4c69f39c736218cbe2f5cfab57a789 55c468d846f8ee0c87539d96bf89b334593e51bf261eeff916512ab52f65 601d58722637d4ff67a04277ee7ef2d0c99ecea41e63556995a7b49090ac 2434080577f3ec42556c69cd5df54d5e7f4afdc392c2b113e5f07c8b0b21 8c392af853feb3964bb98ea50f0733ab3264b5a27b5d03dff77c292699a7 17538d676fb92fdcaee1664fcc37167f24e11669b0b43f04ee8f8f893aa7 3b5ef8459c8cdbffcdb5c7d5884f4772d8a4b46b853262fd0d3ccbb3e4da 40d01d028fca6e3b19da5c1e918c053897aba5bb79aca1c6f567e8995d46 6bf21d616181dbfafbfe0b97a7c2b366ca51438bf0ff77a5bc3128143ddf e7d2ec4a3c1fb0df4f4f5bf1c82744d375840bc82a0664be00807df65be5 978e27e9218fe4ca569c13d849305276cd9a01e912f54b09dd4ad5edb0ff 9f84e4bd7f2a85ec0886095174bb12539c356ceab0feff7dc963f44bcc0e 1612f7de9bd8c0977cb35d87b9a75f33faf60ef82a7493c0924750ef9a5b 6b98f9bdce8c40d0e5a610629c3937ad007bb3b276144bb3e77e64845351 14713132c5567dd62edc24102e51e9a02645836c5f94b0ff9dd966a36819 13a8129f6b151648534bf536ee29935d69f28e0d2dff172862bb8889e246 707b235d3e77a308fc31a15f849fc4b01456a8eb26612a99744f82c14486 246f8fe4e210ecbdc12e24c85526fc3d21a3f3055e37c097865a74c735e2 efb25f2c88e65469bf66a84c80035c0acc3f81d2cc7de185e55488c0144e d68df3eefa171a34817ff87293ca2de4f83e5c801afbdc439ace43c460e9 a0766ac65f70be0f192876d78874558635e14824bceb453d2e8739d9bd57 a4d6850d6dd5cf38decec109813982a12be32207fe01b4268b80c5c474b6 04c0121e70c63443b5513ce1a11cd0cf093749cdca150f78cf1a85f705d8 e80daf3dfa0bc32ac389d5f5c7d63aac07c12408c79b3d6a0508f7c93612 b799a4c79709815fe9c107a4db6d8cd911cb7674f34e760c0a8917011949 aaf0c740f13929ce1b2d364383777be3b7b8347dd9374556821b9237083d 607410502b1f128d874c1dfb6fc1cfa6d5bc01cc767e3411e1a87da4e921 e064ea58fcad035e5470f392c3b6c7b706f75a5726e516e2bc076bcfb306 778536e27c93a9dcd06fde1f8803c50ff7cf74ee89e9d304e69c72c3e30d de7104b223d81204f3f6af6466bd3decfb07fca06506c9d1c821c0d1b6ba 8e35001a383a90eb46a5c38e81f3c54031de6f05304fb5d136b9f864d92c 144623eac6073014d806e1eeb54830a5e0cee3d31ccda933e9b8a3741a80 3c370ef9e138163c8a8eed58159786e51d0a9f5eb25f55dc4a41f358189d 525b2f304c12e2b9a65589a7094a66f9625e230870ce655b4bf53f63a48c 952461010f94e3e69601831498641503a8bf278a3c51c10f8763855907ff 9baa384cc1a1f79d280335b96a8c4ff9b9324f747ba02a9ee72068523e0f a5ec09ba9d67fb63208dae29be0d035c6f2b82d0676f11d1fc1b5a31f6e3 bd3cc3f4e02b7cfb32af673231162a4c55c7ef7e06b3809164330bc4a2ba aab3ec0845e54fd93dc600aeaee58ff30ebfa06ff00a7abb55946391d3f4 079621e014b60be69d3b6412dc8b8c22d3643533637665f1173781956b15 6bb6bc1e073c6675a65d91f7e66874403baa53f28d5c3aa21aec34066340 ae15300d11e1a6dde8f19283120f3942b93beb6c34bee9e6dfecae45c348 632a700a4596e1ab52de94fe6a3b79f0ac82c5a5010266862cf39fbb6cf6 8727c2f4482d30f2540c3743714dc35d60480539189983f1180b2c54ae5b 3a239d042bbc5f4e47d2d5fd5514e5bdd367bd4bbd520e15786cce67ef15 9541525f626cd5ac5f4d1947c1922459ca0cfebe319f21b6ac7cabeef65b f2d08d7aaba437572f1d2e6dc5c7044c82a76ee2b66a02b1c19cd9cb9eb8 4059383ff5a74301ae2136a873875f7b34d1b616146a8c65f849e02ab621 e52143e2af0f734dcbcdb8b304e279b31e65c40242f2e64697b48efd77c6 ae62fd742eb1ca422822bbfbec4248d6b6e45bf2fc8c309a693e5bbf0567 1ffdbeeb0200a38bd24760cf837180a858e92db8b51f2c84765275b16018 8bf3dcb5e384df828ccd9a5601daecc66ac1b29238157ff0f34bedd718ec 8a2c25b62f42ef7f4444cc768d23b41087c9c91b594325300142264bd5c4 3869b4e31eb726c615a59f6f564d95190466102a7d664a9d1c770d6c0fa2 ddc5b9aa2c87f1d0b04e8a398c5bdaab9690edb25069644487b786a616a4 543e4d90fccc3a87c12826f73adc342ebe5e5c48195f6f6ba5106821c8c4 8edad0a4cdf4b9ccbbdfb6ca68c0566c4637c4398fc7aa4eb72c63bfb41b 76e82e39a813fc4891b49e8bfa71c256cf4b4f2ea54f93324e5e575609d4 25682b1479f1db4d909f5b9c0d28c9624030e3fd4f113567f964dcaab80b 89198c6f7f6195e53e3cc9ce488b63d792299c17c9ea6044d7f75151398b 14a652a194c8819fd1d4c37df64471db13f24c33e38fd41a965dea7c56f5 6c7c9154c23f903816d2191206a27f04c218219f5185a3833296c254d4e3 c32c1eec1ebd1c9fb581d1ce1e08dd7b706eb7b701ed9eb31aeb5c451d2c 4251e3b449d3c122ac16b8234c3eeb1d13b6a7db545667b8ba3d1646146b 7dc454992ae25ec3c499bf0df1fe5dae03e81ff8eb6ae4310e1d2e0ed330 ab8c79e320b141eaa16a16c4ab94c11b28797024719986a29d3c2b1295f2 38c3b9793f96f5ca2a20c9148d7924515f11967ee1a598659143d422f939 65fc76acf1c404bd8752025f13602ffabde7531cddbad9a5af5e921a11e9 4e94a450e0211b2d2c0f3a37c2dd43415054494574049121286e13feaa56 082ed48dc22d4580791afe92698502bd57a59839e0c316476b32838ccd1b d68562aee7a547a5c29288c6285ef4a496b7a8267ec8f65d4d7a3701cdb7 2498e9e0060b4f17e36b71a4c8cfbaf492148a9f620871b93a64006423b9 696f178e2d2c51f8f0d3a760a94d1883a4383b29c041fbc090cd67531175 26496a2cc9fd2f72b4fd02e83f5da82c545c536eef08ef88f3607f5d3285 35bb1183291f2205ded2886f5392e54af3eb24b2366d960b1b546d7f0a7b 7d6955840eafc8c2481dc60f4045e6fa7628eb8f3b97d429f5afa5492cb0 9ccaeff013e68c98a6542078fadf439ffef7c3ce25a153f73b9ae3d14b56 92f22e7764050a0f5a7852ea00375093d497fef49d30e26d6d47f739ae2e 75edc2c277611732c81444f9434ed89743a3b4116b436dd83c476d487ada dee3d8b8cac324c27259622234c91fc0b3743d5367a35cd0d6ab7d36e5cf 5c7a2e8395aebd047f155bc25955b085b1469cd2fe0d47ad8e7849c529a9 8345bbd60aa1ddf0fd8514711129d9df13f0feb37432a41677708ef372e5 9bcff21598c7ca1062b8f5c281f07c3ed24222452fed2e818e3e570da2c7 7bf0f5df2f18cd3c67505b818c8df1317bc47a4fa41bbce347b20d170aee c2927a2cbfbf99c8c664d5a97585934a84624f27968b67eebe55b531ada5 13ec5b1beed4577c6761c858715ff3121bf567cb31ff77f9fcd95803d20d 3373d1eaf9fb9f73a16de6460b79e963cbeb5095bab4c41c5ce1073d549b 111136be227aac54140b81bdee0921ab5ad51ad4f499c3680729199399c0 b577cf8930b7eb9b6752fceae82a7bf48441305696a4dd7d4a8560fa50e4 ddf4ad1c9b5ef83cc8b936098693e6b905240d96e2f59e5cf96e5d07de74 c7f96470956c34c64b8838f3fffceae8604a0b2164dba1801b3613eaf6df 4e2175f26029e796bba87ce480f53bd9542ab4a9c67f423591a2bf1d0afe ae85bb54ad015aa92ebb721906962bf4decb101c43f3bebdbe00891eea01 0466fadf57f52e4b13a810317c661cffa57c0afbbc0e820461290280bbcb 86a54fe1ca89e4a0372af01fc4608da847a3fb2915a9a18be0ad5770670a 3dd43343d38a51edfb5790104197a1247bf40c8a0a99492714a03875edd0 c690aa259c63087d1335adcbabc6f756686b78111e109ff5e27f7e31aa7d 4dd2fddcce8da6390ca28f696bf991291b1b368f0a30c3377eb7450aa2bc c63815358d3ba2b5fce36ef6cf06e0e88b1251db92f52e0bc8f1eb0e62e9 ca32c3584caa5448e04e28cbe16e0eef6dc44ee4f75ba5a7852296882b0d e94541c804a6ac1373503e6b7b68b34fd5c1f7e4abc96ac6811b7d590c03 a1afbc328e7b6dad7f3dee671ab1cf213153557a22f5e47b7b01b1909f25 19899f4fbf2836141301fdd89c93ec35ae517b5d16c890fe0b6703595d7a 9dc1a362f0a914e4be2b0969db2e7425170c7254643f98eec951d81c7653 cb1f7f4deaeab17d9d615aeaf0a80f832f29f6fceaf957230693f46dd636 02abd0b0d2cff4b1526937e3a3c85492fa65ee11a8a16e941cd74e9d50c9 ea478d17b7950a30b3467f2f05061dedbb71c853d9c33d080a6b1a856d42 91b5d13ce015d84c255d1f4329fe92c81452f45c9dbf665ebc67d3c9d2bc 6e4fe42763554f371998787e05477aac652a35275f9eaa23f0f95fb371e7 58ac73d2d607c1ac8c46c6ce605a6657fe910244a8dc8a3dfcbafc275ba9 08848454d5d21a3a6427d6a7e39016eb59bcd716caae8a6402bcd7b04baf 56feff071bd8cee802ad8a0f067ed01ca945383ac8978016f02e02771787 12e95013b0c0f494988b4d2918875ad62a5686b44b3cdf32924a6dea5b45 3533183dd598ec37fa8b63385d8898674ae56c2c528a3e630d46fc945284 e32f37b19b8d92acc7bb835f9dcb6f29e6b794030e556a804215fd5f2964 08f68077234c131e0598689826ab552627aa7fdf157e54eb9120a913ef18 5cccdf94d3d28856a8fd6ceac351956f56809b0335b6d88b5f779906cae6 be7b3c89184b4b6aa6b68298e03604ad2b3d192d951dd777216d9c3d595d f825f51a0018236f67bc1036be572e0883d72fd47e403a59cd15f1735a91 41bf2494cd7b2ea83e58f70728920a9cc26fc35a27165024899a04cefdb0 f08970b89787f9dcdacca804f6dfd75ccce5c63416aa3772f82eaa8cf815 330e462be4a73fe40940082041b6aadccd78b7a77ad7e3769ff500641408 09a8994f970e834a76424e5f4cf465b80d154a800d7f238d0356d23ce1cc 19dd485b7ecc538e5415dd578f8de81542653a1eea4ac0095e1fbd35727e 46ae67f0a32b466db867207b2ba3939c6c7e92875f0f80cdede647bb0a9e 147ce70136468b02bcf3ce7d9c092dfa483b80ab4fc37a13284f03f6f009 d98abc3f78d393b1f3a457acd3ac4ced3bbce0e7fe8559dacb9ddcb099c3 e6bed9a352ae923aba60431a6e0209499f482e21e5e5d5ee94c0a46a3687 57db6c539a6493dd1472d16aa89e3626c542f440e8599a4afaeb977b44ea ea40a48d3c7785d00c79714d6f84ee7f0bc763345d84dee7153fc69bf63c 1d6e7f72c895212beeec8eb37f6b062a40df4a37bc534ae7ebb12b33e7d9 023b3b8c069bb5bb70340d41564498f05399b866b0ada1d53bbec6455afd dc9b71f813469904235c1c772b9419fce1b8a63c736e42961e30fc3c5cbd b5828948a60f07e67b8c973b1af10c31d14d6dc98cca2d040955d3cb9d08 709ebb2d3cd744b100d85f75bf5f32b3ac1e2662eb53a9f10e9ac59acb47 6e3eef1fd11a0a8755cd52bd847473b650c674e7bcd40135abbc5332abea a1d861a0367f734bb47d7c0db00554fe84e24fde2a2bc498d274adc1d97a fd781c960281789832df5ae5e181fdd837e513b7d304b7f8f0e5c897b23f c7b2daff9eddd55b7eff6b311e3a04c0ac8acdbadd771423786af083e445 c22fcad37fc498ad7d74bd5b7e41b3b73cc1a7210909e766181bcc5588fa 1c3cd6bfcda449c547b8a5cf52d9d7509b65b5af2bdc7364c2fe10f1770e b10c1498d08209bb2cb6fb6afd8b628429d3cd448697ed68b33a6c3ec01a fbccb53ce7354eadb63a26bb4ba01bbbefbc0d513365f634a8962ef0db61 8eeedf5614dfe58519df74cc6bbe0fdead75de3bcc51123f093992c9c3da d94d9427fd13dc161efb48147f24beb9cc2a387bd2239edbf1af9bb06eb7 840e143eb8f0aa70b724c26ee6b362f9f9a16a469bbf4b752e1054b9a04a 67c78d79d30c7b3adcab60ad0a9a890db03d940674eb78bb4526b57a4a6a d6bd275796dc82a1974c7301cd33f1e22b090a72a81146c83846d3d41313 e206f932b74094c57a5f867a18234fc20bf12df63f01a5d5de3818e473e0 7ccd701ebe0afe588040eb9d8bcccf08ac056e57bec68296dc8ed09b4416 7da9efe211ffa48845c0a7ffb7540dd3da75ea81f757db43e3c9b1a14793 dea9d5aa93ef2a75298cbdc8524d89c39b10ee24be83c20c69c5d2bbf5d6 f6b29d4b4d467e01b4ebb3c62b26076fe4b0c4c6649640ba3e418f7f227b 883bec2124997668445eb4357739b591f12144fc38dc6b8ab07f7f857268 8726bf750e91ed5593d1579d12b468a7ee5263e2beb466f764a1a6ae505f bb445f187f392cf0559c369a06bee2b0886f93fb0c4d9f848b7f11c1dac3 682ea037b920cac2977b60e596fbcadf5b8ccd90c089d586cdc83b00c40a ecf32ff126bd4fd88142edf42dd24efa2b956a2b4925552160d8b23515de e4ae4433e72875d03868bf8763d7c4e89f7ec0737aca3e85edb9cf0e2219 6925754302d5fc3cd747779fd1c9c54c58cf7fcaddfd9389f8f974752d6f 66b53e6ac38caa5389191e76a5055f6f780d2aa7f5fd70b8faf564e6af38 26204904d9b71bec1157fb0e1d18e3da682812bab337a8c145d694a2c93a 9e786ee8faf8c57d2ac8f99c7fe108354652a6d0a69bc344d660cefd7067 17ab8aa50181e08bc5852f73099d4f5bcc0c46a8e1ddd013ec62a2a7b083 9d4de65c5583e4e3eec1dd426e388fad8921988f9c5adbde5e3d30528035 c74727679a260a6c0390ac68a8f0a68abba195b63fbe6d3ddbf8fc2753a7 1309bb7f18264cf3dc47e7feaf20d683a26bbd62ed2b9ed3a5b68a4aa340 0dd10669b21a1bbf69b2899003b3bc7be15467dce60e2ba57f515c427498 0ec7aa40f2d25506a0020199f14e400cedb9583518e0cff7f2b3ac0b77ca 50a74c20d28dffd98600c722ef7a665c4b5e508ba65a489bfebfc105c3c0 71555432cfbd665a68ad5edab13e49b6eb2e27b9898964b05cc2906497aa d789ca8ee0b8b47736d2983e7e326cebef2a6ea327d3abd5cd2d7e9a62a2 0129ae3e4ba0c7cf0a9242b02e9557b67ea947ed77512d66d88b82ece627 287220db3282e611386d8e94fd5fb284f1cf51d6fe7ba534247808ab750e 41b77997bbf54c13b479ef52fed71ee1cee4a8891279b4050e8f812f4b20 07207c677cbdcd1cc1d037e840387deed97f21041fc78a52cf70226f90ec c28f48eea549977786a002e14ceb3b725ea938d63e75aaf7073250fc74b3 29107bfe34abcc9624aeb7824d5b0a6b5b5e9a19374463c77d9cbbafb90c 4bd8111d661eb3adacccebf995a40a96a61f0ebdfed45787fe1e6a045495 f06e42167f571ebbdc53a427f1d6c5a59760fd144a146f784fbd87ee9322 b896a3ec2e7d41579c2cea507d55483b2f228a2f67732cf33c3a1b31da9c cd8f7af8845cf78d9f94ddb84a4151eea1ad173b713715173bf16b8c6ce7 1ec6ef33ecb9544454272d6272bf41dac1b3ba5bc134827d04e1db0abc53 6afc7cfa6701590638a80067bb55ea679b8719e3308494536d9d4b09447e 740f4746e7c6e6b2009b3a26dd9494d1c90b4ba2708e560cd62f81752d02 2df2bc8a54e40249ff72c6cf8891d104f883777ad1648645c4fbac3345b2 0ab9c44c3afedee6a7b6c59a8df8caa9a39cbbe6cae032e5af889ad160ce bd7c8cc00701d9f3324551254538765b02b0bcc0511dd96786176b20c5ea 3f5a5fc8b1c54dd93856c5913ffbd2a89c9cc7584cbb9319d4382b9be2c5 b0d201028427ec74e9e01e4b04a6bb8fe439219726cae72a9d41a40b32d5 ada623e47a44587a065265aa87d54483fb0e96d4a5d2bd077c4c72ff73e8 d660584851074a4e2a641ee44fcd4efb58eb6ad6e0070ec163cdb2f0af5a f0be4bda69bc787c3b3f1a21f16c13b361621f6f10c19e909a43aeb1bcdb 677cef6bc7453597a1f20d7354c43138ec02cafbc3ddd82585c1482ec72e 5e05252fa1a823af811e2758153a1127f66b4c5d37d58c53f5152914ec95 81310345a96343e5c76be3cb4a04133d101282d4319ef3b68b02967df9fd 711f6197a6ae278239ca2af8404cd026ca85cdced7a0d5c18ff169dacc89 e1d1bc09f0bc30e40c3bb9a265f336cd65a86f6c3305a1692281f83870f9 2eed2eef32cb15bfc2d2bd9d07a62faa6f44675cdde0105dc91743c6df86 68a0401c5456071b3e31acb960b2974e98f828ab7af97c9386038f7686ea d00e0f9d6cc63c5ccc4040763dd6aad3cb7d5c340c36225e5324a2a7df82 c1709d96cdc2246d046f83347b43ffce7a498d5f04b40c6287c8477626fa 35f561cb50505ee69144ae3670819ab8c94e1abf95d33b8369c7a6bf4964 a7fa1a9db6f2249fbba5f0f221c0c1c880980fa1b4b0e074f2a850e3c2df 6d181d1457ed36a9c1587863270bbb1615aeef3795c69de57744aa6d6191 dfc50326d7aee410512dd03c0e7c2668020480355696b2f5fbbb78436a5d 6c462aa196a7dc3322d5778407da44f7c594a3f58653ad83613fbf71061b 33e82faa2d992bca1d3f2e26bbe4db03ea9255743a825dea367b7aa675f5 36bac2cbe031526356007dc9b9ed4f96779b3bca7173c073ff5d14a135aa 54fb35e54cfe790775f74e83a08486e779a12fc0340c6c5bcd80fd14a5b5 24adfb70b73b0569b5e8214f5887706dd92ed4008e6d052a8130194c1ae8 01dd112d2f43efc911bd9c73650f37053175ee622a859bbc4cadf4eea341 6af0606ffec9521ca88f820267a6518f8404362247132e6199595b64903c 05a96ea73d6229146ef8f28f9a5b1d7856f7af2bdb1358322ef3aa8bcf39 d99838c88000be983085210984cd72a071bed3072fb2d9034ff94139d5ee 87b5e24e0c0706947d0b24ae4a78940f1c4dfd74b1077724560a5af12d68 cf50ec2582f16ebccf10b60df89867beade63af05e39d8e3727012a9983e c6220752cbbfa652215aa6838e8e223c57890d18c5d18bf4b7a6aa5fb232 c5f135a3a6e3b813f8858247fba6d6938f6dcf1ad545f290ec7a50652a1f 3dc01f976ac8bef60353f32d584b 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Dingbats.afm0100664000212600000240000002224510330505373015277 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright URW Software, Copyright 1997 by URW Comment Creation Date: 10/19/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Dingbats FullName Dingbats FamilyName Dingbats Weight Regular ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -72 UnderlineThickness 36 Version 001.005 Notice URW Software, Copyright 1997 by URW EncodingScheme FontSpecific FontBBox -1 -143 981 819 CapHeight 691 XHeight 567 Descender -143 Ascender 691 StartCharMetrics 203 C 32 ; WX 278 ; N space ; B 0 0 0 0 ; C 33 ; WX 974 ; N a1 ; B 35 71 939 617 ; C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ; C 35 ; WX 974 ; N a202 ; B 35 69 939 615 ; C 36 ; WX 980 ; N a3 ; B 35 0 945 691 ; C 37 ; WX 719 ; N a4 ; B 34 138 685 566 ; C 38 ; WX 789 ; N a5 ; B 35 -13 755 707 ; C 39 ; WX 790 ; N a119 ; B 35 -14 755 706 ; C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ; C 41 ; WX 690 ; N a117 ; B 35 137 655 556 ; C 42 ; WX 960 ; N a11 ; B 35 122 925 568 ; C 43 ; WX 939 ; N a12 ; B 35 133 904 559 ; C 44 ; WX 549 ; N a13 ; B 29 -10 516 706 ; C 45 ; WX 855 ; N a14 ; B 33 59 820 632 ; C 46 ; WX 911 ; N a15 ; B 35 51 876 641 ; C 47 ; WX 933 ; N a16 ; B 35 141 899 550 ; C 48 ; WX 911 ; N a105 ; B 35 49 876 636 ; C 49 ; WX 945 ; N a17 ; B 35 139 909 550 ; C 50 ; WX 974 ; N a18 ; B 35 103 938 588 ; C 51 ; WX 755 ; N a19 ; B 34 -14 721 706 ; C 52 ; WX 846 ; N a20 ; B 36 -14 811 706 ; C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ; C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ; C 55 ; WX 571 ; N a23 ; B -1 -69 572 660 ; C 56 ; WX 677 ; N a24 ; B 36 -14 642 705 ; C 57 ; WX 763 ; N a25 ; B 35 0 728 694 ; C 58 ; WX 760 ; N a26 ; B 35 0 726 691 ; C 59 ; WX 759 ; N a27 ; B 35 0 725 690 ; C 60 ; WX 754 ; N a28 ; B 35 0 720 685 ; C 61 ; WX 494 ; N a6 ; B 35 0 460 691 ; C 62 ; WX 552 ; N a7 ; B 35 0 517 691 ; C 63 ; WX 537 ; N a8 ; B 35 0 503 691 ; C 64 ; WX 577 ; N a9 ; B 35 96 542 595 ; C 65 ; WX 692 ; N a10 ; B 35 -14 657 702 ; C 66 ; WX 786 ; N a29 ; B 35 -13 751 705 ; C 67 ; WX 788 ; N a30 ; B 35 -14 752 703 ; C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ; C 69 ; WX 790 ; N a32 ; B 35 -14 756 707 ; C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ; C 71 ; WX 794 ; N a34 ; B 35 -14 759 705 ; C 72 ; WX 816 ; N a35 ; B 35 -13 782 707 ; C 73 ; WX 823 ; N a36 ; B 35 2 787 719 ; C 74 ; WX 789 ; N a37 ; B 35 -13 754 706 ; C 75 ; WX 841 ; N a38 ; B 35 -14 807 706 ; C 76 ; WX 823 ; N a39 ; B 35 -12 789 706 ; C 77 ; WX 833 ; N a40 ; B 35 -14 798 706 ; C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ; C 79 ; WX 831 ; N a42 ; B 35 -13 796 707 ; C 80 ; WX 923 ; N a43 ; B 35 -13 888 706 ; C 81 ; WX 744 ; N a44 ; B 35 0 710 691 ; C 82 ; WX 723 ; N a45 ; B 35 0 688 691 ; C 83 ; WX 749 ; N a46 ; B 35 0 714 691 ; C 84 ; WX 790 ; N a47 ; B 34 -15 756 706 ; C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ; C 86 ; WX 695 ; N a49 ; B 35 -16 661 706 ; C 87 ; WX 776 ; N a50 ; B 35 -7 741 698 ; C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ; C 89 ; WX 792 ; N a52 ; B 35 -1 757 720 ; C 90 ; WX 759 ; N a53 ; B 35 0 725 693 ; C 91 ; WX 707 ; N a54 ; B 35 -11 672 704 ; C 92 ; WX 708 ; N a55 ; B 35 -14 672 704 ; C 93 ; WX 682 ; N a56 ; B 35 -3 647 694 ; C 94 ; WX 701 ; N a57 ; B 35 -13 666 708 ; C 95 ; WX 826 ; N a58 ; B 35 -18 791 716 ; C 96 ; WX 815 ; N a59 ; B 35 -16 780 705 ; C 97 ; WX 789 ; N a60 ; B 35 -14 754 704 ; C 98 ; WX 789 ; N a61 ; B 35 -14 754 704 ; C 99 ; WX 707 ; N a62 ; B 33 0 674 717 ; C 100 ; WX 687 ; N a63 ; B 36 0 651 688 ; C 101 ; WX 696 ; N a64 ; B 35 0 661 693 ; C 102 ; WX 689 ; N a65 ; B 35 0 655 681 ; C 103 ; WX 786 ; N a66 ; B 34 -14 751 703 ; C 104 ; WX 787 ; N a67 ; B 35 -15 752 704 ; C 105 ; WX 713 ; N a68 ; B 35 -13 678 709 ; C 106 ; WX 791 ; N a69 ; B 35 -14 756 707 ; C 107 ; WX 785 ; N a70 ; B 36 -14 751 701 ; C 108 ; WX 791 ; N a71 ; B 35 -14 757 708 ; C 109 ; WX 873 ; N a72 ; B 35 -13 838 705 ; C 110 ; WX 761 ; N a73 ; B 35 0 726 691 ; C 111 ; WX 762 ; N a74 ; B 35 0 727 691 ; C 112 ; WX 762 ; N a203 ; B 35 0 727 691 ; C 113 ; WX 759 ; N a75 ; B 35 0 725 691 ; C 114 ; WX 759 ; N a204 ; B 35 0 725 691 ; C 115 ; WX 892 ; N a76 ; B 35 0 858 706 ; C 116 ; WX 892 ; N a77 ; B 35 -14 858 691 ; C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ; C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ; C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ; C 120 ; WX 138 ; N a82 ; B 35 0 104 691 ; C 121 ; WX 277 ; N a83 ; B 35 0 242 691 ; C 122 ; WX 415 ; N a84 ; B 35 0 380 691 ; C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ; C 124 ; WX 392 ; N a98 ; B 34 262 357 705 ; C 125 ; WX 668 ; N a99 ; B 35 263 633 707 ; C 126 ; WX 668 ; N a100 ; B 36 261 634 705 ; C 161 ; WX 732 ; N a101 ; B 35 -143 697 805 ; C 162 ; WX 544 ; N a102 ; B 56 -14 488 705 ; C 163 ; WX 544 ; N a103 ; B 34 -14 508 704 ; C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ; C 165 ; WX 667 ; N a106 ; B 35 -13 633 706 ; C 166 ; WX 760 ; N a107 ; B 35 -13 726 705 ; C 167 ; WX 760 ; N a108 ; B 0 121 758 570 ; C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ; C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ; C 170 ; WX 694 ; N a110 ; B 35 -14 659 704 ; C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ; C 172 ; WX 788 ; N a120 ; B 35 -13 754 706 ; C 173 ; WX 788 ; N a121 ; B 35 -13 754 706 ; C 174 ; WX 788 ; N a122 ; B 35 -13 754 706 ; C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ; C 176 ; WX 788 ; N a124 ; B 35 -13 754 706 ; C 177 ; WX 788 ; N a125 ; B 35 -13 754 706 ; C 178 ; WX 788 ; N a126 ; B 35 -13 754 706 ; C 179 ; WX 788 ; N a127 ; B 35 -13 754 706 ; C 180 ; WX 788 ; N a128 ; B 35 -13 754 706 ; C 181 ; WX 788 ; N a129 ; B 35 -13 754 706 ; C 182 ; WX 788 ; N a130 ; B 35 -13 754 706 ; C 183 ; WX 788 ; N a131 ; B 35 -13 754 706 ; C 184 ; WX 788 ; N a132 ; B 35 -13 754 706 ; C 185 ; WX 788 ; N a133 ; B 35 -13 754 706 ; C 186 ; WX 788 ; N a134 ; B 35 -13 754 706 ; C 187 ; WX 788 ; N a135 ; B 35 -13 754 706 ; C 188 ; WX 788 ; N a136 ; B 35 -13 754 706 ; C 189 ; WX 788 ; N a137 ; B 35 -13 754 706 ; C 190 ; WX 788 ; N a138 ; B 35 -13 754 706 ; C 191 ; WX 788 ; N a139 ; B 35 -13 754 706 ; C 192 ; WX 788 ; N a140 ; B 35 -13 754 706 ; C 193 ; WX 788 ; N a141 ; B 35 -13 754 706 ; C 194 ; WX 788 ; N a142 ; B 35 -13 754 706 ; C 195 ; WX 788 ; N a143 ; B 35 -13 754 706 ; C 196 ; WX 788 ; N a144 ; B 35 -13 754 706 ; C 197 ; WX 788 ; N a145 ; B 35 -13 754 706 ; C 198 ; WX 788 ; N a146 ; B 35 -13 754 706 ; C 199 ; WX 788 ; N a147 ; B 35 -13 754 706 ; C 200 ; WX 788 ; N a148 ; B 35 -13 754 706 ; C 201 ; WX 788 ; N a149 ; B 35 -13 754 706 ; C 202 ; WX 788 ; N a150 ; B 35 -13 755 706 ; C 203 ; WX 788 ; N a151 ; B 34 -13 754 706 ; C 204 ; WX 788 ; N a152 ; B 34 -13 754 706 ; C 205 ; WX 788 ; N a153 ; B 35 -13 754 706 ; C 206 ; WX 788 ; N a154 ; B 35 -13 754 706 ; C 207 ; WX 788 ; N a155 ; B 35 -13 754 706 ; C 208 ; WX 788 ; N a156 ; B 35 -13 754 706 ; C 209 ; WX 788 ; N a157 ; B 35 -13 754 706 ; C 210 ; WX 788 ; N a158 ; B 35 -13 754 706 ; C 211 ; WX 788 ; N a159 ; B 35 -13 754 706 ; C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ; C 213 ; WX 838 ; N a161 ; B 35 151 803 537 ; C 214 ; WX 1016 ; N a163 ; B 34 151 981 537 ; C 215 ; WX 458 ; N a164 ; B 35 -128 422 819 ; C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ; C 217 ; WX 924 ; N a165 ; B 35 140 890 551 ; C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ; C 219 ; WX 918 ; N a166 ; B 35 167 884 526 ; C 220 ; WX 927 ; N a167 ; B 35 28 892 664 ; C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ; C 222 ; WX 928 ; N a169 ; B 35 129 893 561 ; C 223 ; WX 834 ; N a170 ; B 35 154 799 537 ; C 224 ; WX 873 ; N a171 ; B 35 97 838 594 ; C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ; C 226 ; WX 924 ; N a173 ; B 35 82 889 610 ; C 227 ; WX 924 ; N a162 ; B 35 82 889 610 ; C 228 ; WX 917 ; N a174 ; B 35 4 882 688 ; C 229 ; WX 930 ; N a175 ; B 35 83 896 608 ; C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ; C 231 ; WX 463 ; N a177 ; B 35 -100 429 790 ; C 232 ; WX 883 ; N a178 ; B 35 70 848 621 ; C 233 ; WX 836 ; N a179 ; B 35 43 802 648 ; C 234 ; WX 836 ; N a193 ; B 35 43 802 648 ; C 235 ; WX 867 ; N a180 ; B 35 101 832 589 ; C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ; C 237 ; WX 696 ; N a181 ; B 35 44 661 651 ; C 238 ; WX 696 ; N a200 ; B 35 44 661 646 ; C 239 ; WX 874 ; N a182 ; B 35 75 840 613 ; C 241 ; WX 874 ; N a201 ; B 35 75 840 613 ; C 242 ; WX 760 ; N a183 ; B 35 1 725 690 ; C 243 ; WX 946 ; N a184 ; B 35 159 911 532 ; C 244 ; WX 771 ; N a197 ; B 34 36 736 655 ; C 245 ; WX 865 ; N a185 ; B 35 209 830 483 ; C 246 ; WX 771 ; N a194 ; B 34 36 736 655 ; C 247 ; WX 888 ; N a198 ; B 34 -18 853 711 ; C 248 ; WX 967 ; N a186 ; B 35 123 932 568 ; C 249 ; WX 888 ; N a195 ; B 34 -20 853 710 ; C 250 ; WX 831 ; N a187 ; B 35 113 796 578 ; C 251 ; WX 873 ; N a188 ; B 36 116 838 576 ; C 252 ; WX 927 ; N a189 ; B 35 149 891 542 ; C 253 ; WX 970 ; N a190 ; B 35 75 931 615 ; C 254 ; WX 918 ; N a191 ; B 34 99 884 592 ; C -1 ; WX 334 ; N a95 ; B 35 0 299 691 ; C -1 ; WX 234 ; N a88 ; B 35 -14 199 705 ; C -1 ; WX 234 ; N a87 ; B 35 -14 199 705 ; C -1 ; WX 410 ; N a86 ; B 35 0 375 691 ; C -1 ; WX 410 ; N a206 ; B 35 0 375 691 ; C -1 ; WX 509 ; N a85 ; B 35 0 475 691 ; C -1 ; WX 334 ; N a96 ; B 35 0 299 691 ; C -1 ; WX 276 ; N a91 ; B 35 0 242 691 ; C -1 ; WX 317 ; N a94 ; B 35 0 283 691 ; C -1 ; WX 317 ; N a93 ; B 35 0 283 691 ; C -1 ; WX 390 ; N a90 ; B 35 -14 355 705 ; C -1 ; WX 390 ; N a89 ; B 35 -14 356 705 ; C -1 ; WX 276 ; N a92 ; B 35 0 242 691 ; C -1 ; WX 509 ; N a205 ; B 35 0 475 691 ; C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ; EndCharMetrics EndFontMetrics htmldoc-1.8.27/fonts/Courier-Bold.pfa0100664000212600000240000030404207477306250016046 0ustar mikeuser%!PS-AdobeFont-1.0: Courier-Bold 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Courier Bold) readonly def /FamilyName (Courier) readonly def /Weight (Bold) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Courier-Bold def /PaintType 0 def /WMode 0 def /FontBBox {-43 -278 681 871} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020946 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6a2153daae5ac3449a45325631b26884c3dba4cc4f3aee0dad2907757c 38746c947e2279cf35bf77cb28bda80e2a1ad4b7a8760262b6922d445d70 152e2bc1747c734a8c63557dd042f7dfdf15714500691c843a6cab7d419e 81febaad7a6fc0a5d78bf6cca52de83b6b9f297caaadf2318311eabb9d4f b4904e2037862be8eef5101f8723cb1f0e5a1d822d32210c6c742311d9c4 5c5ab9c69dd641bf3b15ec3cd3f7bbd331caa9324279943c53fe43dba9bf 08b854f97c47c79b6c241fa72fc1b6b667ee8c41a4e49e903110ff9aefb7 5e10e007be387d5641c74ec987aef698b77eb9de14aada1850e45b854a2a 5c1d9446910aa12bb3612a19b2bde6dca1f480b787ed5ff230ff40c3e1aa 0c0b7a26ec3507d303403057d4b029565a0d0e0f8a3171aa88fb796e21d3 f94cefd66479640c3bb43d915bfa3af6f3916f2aaae39dd4317563c226e3 61ee0dcd828f688724bfb2a5ffadd07d1049440df6068a7d75caf8b11bf4 d52c71c4bc22856d50956b3b892e2435d0d826801540d2b89383e14dd586 03ebd7ead33174da5f0cd69391c18c79cee94a2f66bc5d3251a8ab9725f0 196c6cda25a23e260eac31c9e8589fa4c03a4a98e41c2d53f2a0139f29f8 b72f59fd64170f0271c2cfe03b618252daec5cb272e0db98566c34a6e93c 421b92eaf5552d4ec6d08432407d44468b5c5aef4dd72ba63e738eca67bf bf4bff93864e589f73bc24737c044bba551a41c94ed39cef3f9292dd8b9e 5fab031e7b392f802611b72aaa6a0cf1dbb35482650bdefa7ae93b4bd621 0b8b429e9a5e53d1c1c1e4306f83ca3660abfb71018b1dd39ad40f821f88 6fb4496e31dac11cdee15ada9fa87468c4a4e9840d9d4f5ee6cef4ca0722 38452546db208efc3ce27356df02f47b22c92eab5b6d69870502c2214d01 4d6c3d6e4595795b2fefec32348dabf6da6ce51a95c73b4008f0487abc25 b2d9c6f82a9042d07cf523663083de6aa22a99e11f21127b9c618240f2af 8e4f5297effb39182faa66e1e357891bfc37df032792d3c7de5a16f43940 71bb4c54afa190c5b3fb36e7a809c6b65e03f1f1d6db9e485e0dc5a90d60 9425a985fba03731a0fa9297b4dd5359f8e7ca7146a6eeade722b025d10b 9fcc045b2e8afac2990da3a112217f9f10866856d9ce093f659ce5eb1066 36de5a60831a6103a50105c562bd6612c741d529c5c10f6f3e230253164c 6f65de8b784a9d6a848939ad7580ff0e077ebae7e92450a25490e0a100ad eac5225ef45f9a69da534dd649cabf392010cfd8b1dfac4fc1da6fd8ec70 82c97b30acdc76cb55352057d6893081e9be58c33dab65c69e1aaf0f0da2 0c3f4013056832a6b0a96f888719e9c6f899b491dc190f74896a4417b9f6 6703de1fa0ccc70882bf613bd9e362de9f9085c5bf5d8edf64b9f77dce25 33f64ec53c6d7dce54ae812c0426f70268229bf8f3dc54d583f1605d4e95 10d2452aacf63bfcb630d796357c6a3bd7ab83a4c661e8e1b63d0b014b3d 1bd1712e1fbdcc739ebbf35b81e2b32d0517eca9adaa1c504fac1d374b5b 97c6a8adc41eaf81ef6581c6a8522c2cd145be35c8758391abefb4504e5a 85858019428dc2fb59d25c95792da6bf1c6e0dd74fba9dd74ddebd475e71 e625f9db53600369c23f69fcff80ff39767bcd55d308291d32a0697175e1 1750ce440e80fac6526465a5814897382ee44fac82aedf8e3b035dd4ab9f fec2f70e9f744fbe8041d456e3b8f7b12af06bbeae2dc2419871bb8c7cc1 3edffee6b27e517147c9849d74c89f5dcae2cc2b9330891078393906217c 2ae704845ee7e519052da05798d73988d2c77ee471d72fb10def97e1353c ef2633e1855a2ef29c3848d170590443793248b8b84ee36a33c307fee7e8 e4c02897557062e32da79c001050f22e9c9e8acafb45d7afff506cf43357 aa85a689d62942b7cd3910f4538f9a5c52b9614639ee4d72389630091f30 f85e275d4f08f395887ce66ccdb6e380a93b0519e271339b1c993b74e760 42fd697b818baf83ae980eaf3ae0b8065557aeff5178d73e25e8b728e94e dac70539048fb10e6c7304978eadc4a5d3090a3837fc31b03fbb96d7ed4a e3c0948b27c0122c7fa4d6c8095296c3162eddea27a9997e75237691555a 8a575e542e2d40dc1e20f66bf28c3b09bc1d4612b97310630d01c326d8c7 2efeebec8dc24fdeb0b8d5c9945385a47543e6c4960a02aacf0cf5b01f8a 66c7cafef4b88111ee5c79a76b0c949c0391e2c870b30f3a59ce06c52f95 f6eb7e5aeec243c01b50d159a1b817dda7f6de559e13d63196e81e753264 2e0834f9b13dd10ca06a91943b36afdbd7a4a26181dfed9cc73752982ecf c5bca1513cee9710990be028151445f2e2057457a2baf7e7b321885fd591 cf4281992533ae0e4d4fdcbbce6539a4f26f4ef00e06d57884c77a9003c2 16c0b65c04da36d68cc569edc075eadf9d7079e0f7485f32e0e54627db15 39d4493a5fbbbec8ee69ec7f852822c51584a2f52c77bbba6752ceef68f7 497f61e4a2aae33e5a630c0674bb6dc4c31d58e12d3f95cd3383d49b7bac e7a13694f8ff6ab5a7a683a94e9804c20bfe70740f600e2c5af0ab835c73 a55f7f681d4292e57cf66198f1f3af82cf336c331f091a85796a72943a13 0c3466b4229d4800d7f60f439a327f32afd0fcbe141f653dca1c3bffdb05 509ecf1e419d045c56ac3a90f52700763b9309d2e86e0ad21a368d84ef4c 077899ee5cf201365d3d90de7091ffab2252869ede93fcce320c47fdfab2 311285d5b263140089a9b382f33ca61bc587a57d906c5db91e7a675898ee 240eaede53b28bbac103e0c76df8b12c62a3937fc1aea81ffc30d69793b4 6bbf32e1f05f540e2af2d7d54a77ef02ba9e5133c2ea31d78b041a1ba75c 2d6a7ae1a2352b6101347851164360f1451db5e3e91fea53000210505cc0 221c7c5190a436ac8b81e9a40ee834cd0fde045b0d46aaa4693df0370a98 04ae7643d1de813cfd75cb785884d68687e8849422504e4a4f014ce400da 6c65eebc9d9886dbe502ccef99a7088fe363a185bb75f70b022311917c2a 63e2e41f3e9542cf2e4b35a7b42e2503d6725e7139c1cfa31c3c54c8420b 0ff0e17d2f52b84216ab127e7c10e058ce02192aed9157198dd471f401d2 2ad5efcc80c26a76f1babb2e40a4b8257ffc80a71e61cb8db7ba3fe036b6 a70a9d58fd59bcc1696fba1668191f45835f703175c2cc58a5f190a1c7eb 8e481b9a7d0d52b907b266a3041d20617c2c980809386de78261b9cc8c95 188ed585256db375d9c16150d181e2f6365a6384d6f05d13d485f287c45a 0fffee0c8147f02b65128c59f7d34973c6d5598dbc3d3bdd3614aa4d28f3 3181ef9aa67b791a884ae0fb62437ecd42d1766f45dba8239f7b220558a8 94548653cf8009e774ca4fc93237ee9a79ec3f58870313a0f8ab0c9984a3 d00ceba8dbf3dff581753f75c4baba662175c52e5313e68533c26ac08da9 888699ce6d34e311f71724e39b6b7e7092ff901b94257831d83921875794 cfb5c62c42b8b0b2975aaf8854373f9718877da7a9bbb3dd0279a2bfeae3 55e68a113859646560131d7e8ecbea885694acb6501713ab38b1c20d59f9 0b8325e2c9e1792ea3ccc740d18e89d54fa6327ec913e4094304b197ff22 80c6a3169ac17909a5bb002ac783d567d51da8b77ba223982c816bae1ece bbb77f871a2d205d8a1e74082afedf6b662fb4159326da561465d1848fcb 7fdb8a0b33723525184e1069987c23e4c41ae224a0e4a338fd33d9f4eb5d 718d237af05bea5d867f3b16472aa34e9f705b5463a09154dfbc633d3ecf a46b9986361bbdd5bcd3a8e94880555efc481985d6dc64c77d05ed0aa826 490a079ae4d1ee011ef86bd83f7f9e65433a48dbf124f15ac3da0d5faa6c 6daac1c4feb7db8b844307160e2281ff7a2d2bc6add43b354454d349a334 141b4b1e29536e88f289e5448e5b26813ce07432632b5253393f66796833 2387a1bccb98503f43ab4cc90b12e10f8d7c6435aacd62fc8ef32fb37d13 fa0b0ff18ae20a6f2f2fd6394d55a8faff09ff91abc226412b0051c282b4 b49c558ab001d2496dbab68e6653dbb74d210302a78457eb26ecafcbec89 6fa58f0448387d17608d7a2313c222b413d3f32ed29b683d9dec7927fd93 a8cb0da06b2e17940d195f7cafc6e5edcb31a8e00187900312ee9bb10205 6c15ea233e2d43b7c6abbde44ddad3a1f2cbcd730eb5be1f3691aaaf2efe 94a4736e6c4c753afbe1c005149918a4e5446b31ce005a99d64125c9601c b016a54d3241ab21eeb505c4f1cff6178366b3cbc0cbca2772db7d5b3a76 5dc6db8b7116109f5df210a820aeae41636745344d07cf9ae1ab05a564a6 a9c5eed8130780e93e0fcb2df9ee1b8587d8facbdc4e1927315df3a8816c 955f19417bf508ae0524cd04ac53af19619cd938495e4c7f02c26b69a091 f2f9815e4f8e3b95a610c3ba14a6d7724b88392e6b5edb8e9c333e262ed6 82f249e9df395b94e7db994369ebf559103f9bde51eaabde3854ad5e6705 1fbba7eae4d5968d82538732d640739e1f09d5c0d3d6196b7f39990aee1a 43cfe9872ef0e98bcb8de9377416255ff057188d9f157313cd650451faac 8a1fae3d00814a6aa4adc548177998cba4d0f1fbb0c7f6b3773260e6001c 76b681675f5ec4884a166db439eb25f5d5f59a7124f0b2ed99160e3e779c b63ae2a7f118e90b180b45d097bfdc0bc95bc790fc8d7b32266b2fe22f76 87502d6da4e351a7778cbccd31b3c83250c3d21b0151b77a05792ab50a5f 635b2d932c312eab4b1c06bdff13cc6068e141b03ee8d8638e57d59ca1d8 b8ccadeac057ceff070ff7fd2765b08576774c3ff51d885aa8694e14dc5b ff792430d9298b474e0e1cdbbd4b092341fbda48d12dbfd98bc237e1aff1 8dfa7935261b40906e20738bfdca16b5842e2a1405b22e4990020448bc4b 930912e4bec58028d9d86e7e15a64cfe183a94f81e2088ffdcdf5326bd86 83b303ee08450941ba40646585043d863dd7d4cf0b74e6fcf96976dfef5d 2616577636a468eaa1f41bae3d82f70160d02b28b318aaa9bb74567460a8 cd4306667786f6967f39bdb9f210b5a8068e167b6ee194b0ffc9492ec4ef e96625fd470039a59551b282844c561b26851b9af6b3f3a6fe9aef52d42a 81265004bb64dad894a7d6d0436729330762585664e8e78e4cfbf809919b ae3e4ec70b61444f8e68af00a419ebb7b5aaf66866a7dbe06a5106e9e63f 6f19b0417abf32ab22b02bcf0c27af0e898533115fae686eafca9628bad2 6318f254dd54e876736cebce827de16fd34f2df6afc7a9f39f5ac50164b5 0013f26dda832d091ee0f772d9199d315ebf589507658cd7fcf22989718f 2c31ecc18209d32bea2b29bd1a88202a7fbbcdca2023c79d07b886b675b0 cf820450d6599af701c1f23ac1ab264d9c62352a2cf2db6885ab1b771aa2 f2d037833454d0c6e6ab9e7884bad12959f9d693583432515e9c4e8e1785 1f292b5859762dc093fac6d1c4d75f83e6c47cf73b5fe390a161ef0a2942 640e8683c33cbee292aae8cbce89e2c1e8dc99dd4bcc9a511a7f00455381 9d85c390eacc9596e67103cce2c2e86a4db07462396620c11b6e391652bb 358f82401a7b47fc5693b898df7eb1f7a7df06be166864b82498e7a4a52e 5d78e2b4e379cce4ef1aeddf8093671378edb46ab0f1aa7b79fa1c0e0a12 4711cae6fbe2b56a74010ee3696d112969b81f3aecf99bab36fa9317fd9a 2e590a8d1cc447cd24c42995d7b04454a8fde2e589252027392343a11785 780ade0b3eeb8bb20b63d1bd61be223c44bb8e1353d0d3e37c122aeabe22 45fb231783396f758c9e4d09058b8f63937468b8648c2764a90b5785a729 1600ea0699edde3fce774c77a4e8388cb3ae99570ecbd9811ee8f973a6dc ed78343d1104f0a10a9bc869ea473da3005d36865d01598e1a6909b711c3 77a4b4bc536a581655a1b2c2b995e6632434cfa8ef7a794a0e808e6b53d2 ce9831c720ca03f28c7f0753aae26f5d6a6cb086ea57c92589e9583aa6bc 3c119436870043247073287061f44efd734ae7102c9a090907e3b61b9dd2 527cabc63f2f8515e3f8ec022ad88c6844a731d163af292c8f30ec988735 8f197190cc6933745070799581b7a94f0eac5c9356799ea0f201bd54d1b7 2aa0f4a50b2851d69e6a2642b762a88870319a684e9eaa9a1b064a3bd2e1 1ad4dcdf3a977257b6ad3683d4e9f4f678efe74d4a4488274ed980ee6efc 072708b5358a1da39464757670c3a12f2bcb2505d8bcb8d46ae5a8c88b9f 1754896d8d7eea8b1d76d8e7dedb88d67f796f76c96b2eb6e0e7a8d10cdd d649ff25850fa3834852623e99f264a8daa93ed145f1b6512a75a3ee49d0 ebf73f90eb6bc75ecc057465af931b300389073f54e5e0a5e1340670393b 8333548fb4c94404b16d0813a8481425e9ad09be5d8a4f3eec6239f7b141 a03b428d45b6e3c981c3ee32a065f2d162e25b6bb79e9d46e1838aa510df 9d8c71f3dee637a97c453c0c26ea8af68e3c004c8de997a6f5a0e2713af2 7d8f98031233c6bf5ef5c103e5af0862ce6ea9d598abbd08350b18d9ea84 738d7565cfcfec7f9743b5de7e9de5495555390b0ad89ce01a5a05d6c53a 235aa3d89cf329b2f4350b0d98da4d4973cb5954c6d639ce367e68776d5b a8df9e793c52f381570e909db6121be93919c354722827fbc24aeff4bc70 fcfc4fb7f49759a6cf27dd5f54efdfd060abdc33d0d1f8ce051c0c026e31 17309e09471b463deacd1cd12a345fe382b8ac4ecca1feca0814a4f74bde a00d08e65288b8d05dd0c6d8b2a323c545e646ac06e52f5bfe40e25a7604 fb2bf49b2bf6527cc4f1fa7dbc9e6edcc63a3e5bd951a25eb13ff3bd2446 c8ed32670a19f7d1706994fad9bb9ff448668951ca02edbd950b8233005b aff1768a1cc2a44da8e0125e637a6bcb51bb64af227f6a3f7c7ebe4efa39 5965d49b13b8aa5f1d41fae2904d82092c6c2588b38182891a39d72f1eb2 50827963d6ce5dc80493b3ababb911189a6b73ec0a74d9de15f0dd992fe1 1ade383677d02792a720b83ea21ab3c631c9f7058e69749306a4095eafbd 82b8df219e53243f7cf2efb3c67e169f766302a2084d6ab6dacbdd12a67c a369aaa02d22621481c03a8d43763d62d2be3262d1afba823cfda91992ec f80cdd3656505c5399118ca13502d03b122c20a2bbbf80aa6642773a6255 5fb7cee5debbae611eb2d443f2edc24bb153dc634cb6d6b3724972445ba3 adf97ab075af2a95d2f1bb74cfb2db1e435130296cee19bb8c157eb8db70 bf5cfc1e791f3531d3ae33554a4edf16070a731bc8b7c74a84bb3be0f2bf 45560cda74b4c12dd718c62803fb4f4aba5fe89d6f7cbaafcfe4bb518031 dacdea2ae6c8d0c03bf60a9b060ccebb4858e4cfe1271e316bf7afb05714 c26cfa91bd96d0622da31ed625533b2502064eec23257b4785f4f0132f3f 44b0c2b83bb642dd8852ee7f3777956e984735f5d16175c4a27e9282a4e4 ff0cab7938d921d33dc7e8b62ae24a90b12646b3a5fe88fd944d8309411f 6eb3031abb67fc9bb2889aec45821020561c1519243773b448d65bbdadc1 5a5e155b8d1b368cbd97b756a8952b428a358c398630b46e8afdae238593 c3fd589ec46b77b8d82ec7e1ec5a50cbc77ed54bc1e2426c61d23a08581e c1d71c0908f7759d1da9241b087618e9f756bfb86023daf9a7ca0c4eff0d 45aa95cfde5aac1977911ec6b202bb47547e3b5bf3327e95f7e1a4863e5b 904af4b37a527e34282cb659a22f85ba406bccbe3070ea53f65a876b9d1b 9a1096412fef8706be743153d4dcac1681a40a2c265a729121f2d3fc9efe 0b5c18e002626f3023a5ea705b47ce1a5c537122e7c35af7bf31f66d05e1 aa3362e68c1d259fcacd0079fca7ef501654744e294e6818ca3badcbaeb8 8d44319fba9042e25a8250599a8eed5e1c0cbd9f739b7db31c3b18128176 50e72c970d3090f8325e5ca01fc85e5310787db8dba0ca26d77f403c062a 647f9f998246f26422374859de43542076b459b7fa829d27182324262532 99fd3886ac0448ba12726ccab47af3cdc60fb69dda6513c83e0d1277ab88 4d45ff3976536a13adf80939cf1a1db0a6347f9a4f76ac2674ad49a46ef1 d47ee4fa717c493131e0a5212c3d4ba134a7a6ccaff9982abe9f792a9179 87e59dcd1984b5994c8c89b3f9f0878cc3177489a3b9b41e44673bb253ec deb2083f4293ed9d24223cbfef26cce564499158482912879082806d048f 1ea999ab3cb216a5c27d6027468b8aff4b55fb319fded4ee2d308c0f8c96 fb7feca02b7188bac0ddd4bee03a577e91d258eabad887be25e74c296f63 bfda0da6709aa66b814189443c8b942be557f260606e0e2c5c0822ad4a5b 33facd2b90ac826a768ccc37d2591dd28f1e016032bae587b12849d2f9e5 60e3f8c07cc50f256ff209c9cfb36cf921713e79cf02283e14e52cdc3ada d81e2d2adbfa6f1a2c2ca81cf97fb68d61f8c51f8c2d70c59a940dbc31a1 c0401d41b9c1e5906e6f9d2d4446da96d36a0d4cc8977e665aae5c431657 39b2226ba59807a4e54fe9901d9e3dfaf531ef2b29398d2d10c24fd2529c 474469ca0fc17c2c06f670348545826112e834654bec7f039d11990dc823 c479caf0b9ff71f983457be488a36a54d9dce40b832882eef4b698bb1758 5ab2c981b5b42d99a546a9c50b56227e76786dbcc6a5728009a707a5c8c3 9f65bc6d10474296a93833fee38992deda4cee623ab3e672737be803e984 2003e729a97cffa1a122d9ab0bfa587da67ba7005f51278e3a06a752f86d 5a8b2f0d7a871ea29a2c3b7260fb62017aa44a696d3c4566b179c9eef15b 67ed2961683b8417500b6136815823d50eb25f68363adcdde84ab6560227 69e776795bd5a97122755091c2353598b5e0e5ab0d368fa34cc903993089 a4fb5539f5da5c59babcf26470065e6fb8df09ef54475a3651550331faf5 093f96cee0b9c0e94a894acd650d429672e1d66ad6a0027b7d24e1df6bb5 6e9092928508f4e356275f668ea61dfacc1bd86fe40d9629b8ea84e4c337 88ce61a3fbdef32603ed42a31c12817dfd57561a1ca265fa093b5942881c 2a61d2c536bb7d6941879ef6371e1aca84fbeddfd0712f6bfbdd69020265 aa13bfc463e3fe44558fbd405c69db3cbf18b5ace6a111767f766b8a730d 8b0705cd5e46544446ff78213f9b2844076110f1717cfefbbfef27c2c17e 19bd949688b30f0b4f3f23208331fe6e384d4b4f9bf47290f5941df19888 f78271ed4545b076b96b4e21fd07ca410186f4cb4d723f1ed2cc6c172819 c346f547e74f99c1cf2bdef1df01afd3fad2381035d516d1f02c650105e8 092702a8becd50cc295803140ed1ead5bd6fe180816cce1608a582787ff1 bd66a511b044ad430b97227b61a4177e90f928dcf9c2db0521163be22b5f faf3300ac9c039aa436df8654eabb946f64b6a2c4e5b8cc7fa9c11d2cb20 9b20b92c6e77ab808d474af0041eb80f0b6e635a5f322dd58e1194676999 2a8e58791e2a08bb0dcda337e882ee421947382a10676c69404e420f3dca b6b6cba7bbbd806848fc80ca03eb3a6fdfdf5ebe800f17729f74d72f4e6c dd5ddddb891b3690554c04694d39e05f5e2a1dec0100cdc8f2fa39486353 37d906db314a739f6ddbb748d048e59759c0e5bb93ed6f8313d3aeabf523 545691769560b501f46f622962be61881ec339ecc24ef0d5a3a66a03d31c 48be641406539cf845c3dcf4d8adab1ccf6ea04a642644dbe77ccfff9e9c e5546eeca7b5d11959dc32a1c09f9e499346b2ebf36c91554ee265da452d 7b6479c7cb2474113d050fcec2b826a1b6103a1fdb4aed700586aa0b36ad df8fdfb4006beec2b075cdb86ad3bb56adde2e7063a3996dbb6b763c034e 77ba04142e741592191eab60df5e6913ba69ad04963cce6efad86f260d9a ae0959be0496413c5299ba27f0c96dffbf5a20135a828dfa5bd116f1aef4 075d1c4ba49eb90105bf16686869e6da641e3c2bb4b4deb164817616ba7b e9f1062f85384c1475185b342f8d10ce389b82e97803700e5090007d7521 68bee8e937971e94c01cdea21364c05b37f60b86429005750c6d5272296f 9c3be508d85078c98ed33cbff0411cfc16ee632034fce12ea9c060ec7a12 f843c69f62779c779a1b514a2808f54572756bb8aa743312bfcb0130a6ac 0d4c21f790369847adecf452ba675bf9b863bae1e494bfe82a76ba37e951 7e5ac3418b7f817056fd84906a296c794f77fb8e266ab32f1fb546c9e97e 435588b749c3d279995886f136b2515acf4dd303647a13f142b70652f7e1 b587873fb85dbfb6b8c0eff6d40cea9a4c735a7e0a796b3892a40f6cef4b bf8f98c14811e2b5f72c20fd2d8d13acdd45728be6efd29abdca3774844e 1e1c85291a52ccd541d1842fe987dcfae7aea6b546be6508baac4d1e1f88 c3772f632197600522e10a08771012b39fd2be0dcd415cd93e59c6ee91a1 3000355b9234cc603033dd74577297100892fb8c7745df45d125034fb268 4bd4d46476e437656370e13537114b23575da9ab9c57cd0e7c43865049c3 fbea9b2ad3587da4b5b021384115867408666c11c1bc7e345af1dd4a2593 b76335451f57fc0621e2712fa23112c4ecfcaf3cdc5871d392fc2b3f09ed b5b87105b6de4bf26548925cbf4595bb072429b347586bfa436c10d254e4 cd1542adc1f72c0a15ee0eb3e21de33ed4192fbce905d16fba1202e45c00 7bd1ba5a5bf4f456a40d22d0326f3fa5f57fe5335f7bd2d74c3c62f33d1b 2fb3c3754928f3bbb73396d1e64fc4f9cbf1a57bd2513014c4b49ff68be4 162d8173ad1425afdf02a2aa32003db6103861c935e54655ed11aefdf7fe 421d3e46c2324d0940a6dfd0667dc4c483be82abf8e5eddbde02f5b1a11b 1ec4f2201ca9fda9077aa5be2a637baae83a18e0d07aca462fe53fab3248 4c4d7929f830b6efd789b22311b6141aa20792c29698c0c0c9683827874c 80b97e6c8fafc623f8e2776f34356a32c0e7613ebf491bcfaaadc476ec2e b904c52e3a65d61fcf4d3baaf68dd8a2df3b6b9958ad606dbc16653b1304 f03bac8ee4993492879393dec1c3b9930f0edcba5542c22af1aa4d754f65 3dc8e4f76a9298e0ae859c6c13f8ab24b3349c0abecec29e895516859d5e 276c73fc3804d194ec154caa7fb3803809c6d669d86cb75a0109a25fd481 24be0f89ccd2479961fa11144db0d626e32fee84aafe9ff793254c2c28cc 3208e4c13bf3feef165de8433cd6300fc97ed20e0b482efa38267e0c19a8 02a795c602a0f34d3274dedfc3928949f16dd15b811f61d682ff303c0be3 c9b142e434897e2c25c96b9b313b4642e6295881a5a2660dae267240e8fd e3a4b58dfaa10caa5de3a730486727a40307b4470b94624512485ceecda1 9c9d9ebb68825297aca37aa3e5bec4c497b35dc10e86bbb932d5e6a03f95 0bf45cb19a9f5cf7234f897e163491d733b5510790eb101855b42d82d233 de4656e4ccc15c70d3c19a367c7e8cd97712520831ff302e59c66bd66081 92c29b17f125876a4d00f8404c745f36b87abaafb41b20854b8a71417a45 be9a6d9dff71ac4935e79d30e6657e777bff19363d6c588829af564b1b27 784bf9c5169817ed2183b0cbd4be72575dd484bf6dc8a9234f54bf079d59 d5b82796cee38efdbc30d9f39d0f500582f25a729a1f86021ddc17e00174 d842d05f21c4d6f5d0777c99fd99f5bd7aeb4a8f8997b6aea54a3c336c8e 68585ab5f654648ef3056012f35bd4b322897777806026a0d405f0eaab93 61d8d6754f1b660eee091695f39b8fa5f6fba1d55b33381a567447906bde e9892b2bf755353f893cd9d912bb8ccf1e0d30cca1c6f2d3ff552f56ac75 c3c6e892282910da2df650723f375a68dc9eb64ca74a512741c4a652b223 db2d25ca29d272ed2419944c2f33769926d69f291d2a462d105c53dee439 9172c11aa0763d48401552ecbd9c8babe6b4da26e7f9623355e430768284 fa9b53667ab67b06216c05ee54165892d5cc4435a0e5fe3db1690b8c7043 26def9e9e31a659ae206f8c60cfd663f91688581a0179c9b7b9dab97e1bf 5f24fda6ed339433afb20839458d18bed5491be9fb118bcd3361cdcf03dd f67d11767f7f7a421346dacf711d375bf519fc93753331e1a091fdf603ca b41f0e6c48e100e78157e07eb10b30c6f350a146cec0d3d1d0e944a69e85 2092909fa54f1b4377ad4768fbebdf5334c8f1e326ecb154ee06858342a2 6f3b58a9e0141d57c20df8c4766be3203ced1e6b24fa2a98bca391b85b7f 572d49ac38e4482733726f56d5ef42d3c952db9db82d9129dcc30b4b2fcd d20fca70364907701bd19028622a3aed72569cd8307e23e48e6a9df04da2 4bc0460cf88b75dee4379a7c003a6cba112415385c43058a46899d6302ab 560536e59c67f462528a81213d9c9009fd3975a3b601410e989efe3a68e1 65fa0ae6dd9c0361e0626f1851077e8ed9fc4cd766291c7f3df8e51e2eb3 b8e9274798f32e2dfa3d5a08abb61061d4caf45cc837309747df9b0d565b 34d0c04a2f9ecd64f0df422c7308ed27a7b5fb8a5e5d71c3003914643d25 8895a0e2f136c02e5fc6659dee6c7822dac93f8e0aa4b5a52f09c2f49d7b 9a7192a22fe8efc8f5142d3791d3e11b88fa8c9afc2fc568df02c40a109a b94e59cd467b9b0bd9f94003b21f522cb5c8b191a372ef5583e66f5217a6 5d3c7baa1375d59bbd54dd9af7139501b74a2ba74b87db29ac78f1afa21b 81072b58cac2df329f5a7f3edd6c42839db170cbfbfc575ef172b39c1859 87141f257d0d6d909c1a95fe10d313b8c0846b80c07ed5124adf1d36ad7a f729dec052b2e6c61609211ee576454a86a0c2e6ca0c6c0ff1dabab49143 8b326088d16ea1ff32e69871cd3f5a5cef3848b734ee20e2510c97c5753b 2629b9eb302c488319e384166c59257eb0454af6961b87a7569a5c82e1d9 f1bcd84379a590b4b41166a67ecff44890c105d16f3bc899b652fe115045 983ac7f6b7d63b5339fa99cef588f822516e135ab40fcfaee90577bd878f 92ec143bdb5fe5ffae78390ddc3f7d8361759dfb3996aa5dfd331d9ba36f 2901c65f5e4a6c95a9400d6316ad745e680cf8729f23bfe0b11b148c74b6 0c36c2fed2eb71ec5faf4d05ae962133c1b8776d1d57bbf46fba30a15f33 344f26dd85411b16546e1c9dd963f1b334026cdb09ab973d1fa615381847 1cd310d73575d3e03902f0bdf0048ff5efd1beb2e857f82084b743e10091 d3374593ba944d05ee97bf0ad7568b45a95a24f49f0ba2d93714857665ea 9ac457a90a63577f7293fcc0d5bdccdf610aa823f7db43119263fd591a20 f3f6d2612412bfb5783db3c0865eecd1e7c2ca50d9dea0ba8a50a4a69ee6 7899bfa6b11bc58b31c98a6b8cd63633dd6ba6e41aff7de644496942b7e8 c33320c23f0aaa081098d555df9bf66b4af6cba3a71fc9fdb0a19497ea00 17dfa473bff4ad6badbc6d971157ce98fe123ca2a5711ef9360feaa0f40c 6069d15b5b224f32f74965d97fd48105f43ad74d08b0b2beefbcb3d301da be707da228e802c22734254ece98ad73c080dafa09df15b9340b84154a2d 1ba6992fed3674aa9a9e002c4d40353bdf87edb73e61318aa003ae7b388f e9f8656fdf575e190509727d8385e50b871ccdfcd4fd1813801bfdfd7387 48042133087e98a8c64083a4b908594dec38ac9c6efdd26f1e13cc59a203 abd3887fff0638c51082d32a328c3aacca59e173d56d3b3bf27976c6bc95 4572890d8092e93e35f188e2255d4c223d5d9fca45bdf433121f5f8bdbc3 84f1c0ebef83a8ce7fa186d413d7fbde7a9d2818eee5a305a57afb635b8f f6635f17cb030b0d29ebd19ce29cd932034a3c0c0922c7202288f2a3a13d 1bbe38506a74046dcbacf7d89a2001785f12f3d885871f9950ae34ed028a 98b5373403bc1322d1f2c583a8dc11824b4283c233c8744fd56cb20fd6bf 0ddf76fef1d0eca5a8755a2f15df0329d098033283664aefe0c59eda92bb 25e4681182e20c008c73f9c736711fdf3c5ca41acc70f320949d0a32e5bd 0bf4829de9484836c8183542f12bec32fceb5a3bfdbb1a193831cb7539fc 12f181fab95ba610379821a9a02791dba3b2f154d13788bd248d3b9469df 01bb9ffd8d69c10e347773c781559ba77f50c172e32dd77ade64202ea88f 9b22ccff86f1f221741c4c9de7ee719c223860446539488e6ecf7eec8c71 f82b2a3b54dad191dc7972eec0a571e839c733aebe2c557beeb5a69bffa2 64d60f3f6d1af9fae5e6da55f9b5e54e29c978a6868c02f936b89c8b11ca 876d6595861d293fe9a250e723a09716167f20c00f40a3ffab37b236cdb3 691edafe967e72a69b87f69db6e98d32c976f9448575464c16f43666ce44 76840b89c880acc159e7ea9623c9c49c4cae911baddaf128e4e336e41b5c 76d4df9464f7a66ac0787280f27b2ea2cc03637d6a9e2ac6d28bcada2c5d cb425f99a0b7b7677b2b79c4f59478c1e0bfd24aef199621b2211783ccc1 b4dc56da241203b399cfbc46a80cd1d172c25a76b55d0a070c00a17d9e22 0019121cf06cee286d3582fa02f14b6c0ed78ae52b960f67d6d5331c4e6f 29c51a14b401714874d0dfe0fb24d264e9f705812bc67b634ad558ec2347 35566203199dd558fe5297cf1cf5cd5492c93056c5e0a71226481fe13e5b ba28b11394fced2131ee45efb37e12f0638352ea688cc6881bd182d9094c 88552111bf87f88ebba5ae9679354cda6c8888b172d46635220fb98495b2 6469002cb0575a6360c4b6909672ac06f70ec588df117bea075ec89e865e 577a0def15804badb8d42ef5c6d6fb70ebfd3f49a5b218be90dacb7ab625 353bd54e687c4617fc10a5d5010758c64ea0d6581f4f3d4fccb7b90ca9c8 85b028d29f838a52ad11523310a83d61a73e72a9b12ee941c37906e37b5e 3f5a2aab32f410561f3682a81ccf959ec63d96b89fdf96a78ab04b236e50 05bacc7974f7c62eeaa245ac41958ca8fea6ad3fce5339e1739a53127964 2ceba426ee4ddaf922271152084c4cd08edef50edbfa399de4972844fba6 8287df1a1d98783774f70ba7655a9f89d64bab11ad3b55459db4ab7663e2 ad5dfc78bee42e887a2e76b511a159812e489159acca2f0a249a412b1ee4 a90a46dc9ff832525a9b0913244ac3ce5993e17674d1660563c6d54d66b5 dde6b64aa76f003ff3533a46ee56bb913b6efe0e9da6fa4e5319b607d53e 9d7d9636805cf8c3b3947bf195ea25cde547b4450a9eb8ac84146ef54d76 93213061897bc96ed821fa57c0bda3244fe4a1eea3def679f45ef9f67e10 b5decdd3e4bec89701f553bb4bcc6d4d1e0fb8c9090b9661196059b1bf1a bf1be04d6b74a5cc57e40971884911f452c33b58cb04f2c6fe3e1d71bf5c b13e7537d9fa6d65ea935ed5e96ef72363bf78322a8f87bf7a118a9deb71 b7f246aa676cda52240974e6e9da44d622e4f2a43d7511b83a0126b2b92d 0bf1b02876e523d9d0a492b5a63d96b1f47e962ee7aca6fb9d3f9aec47ad c522dae8aa718bc540cf5d7031a7d3d16f0f6ff33a9768290a90a5fc5e68 95cff9dbab42a770bd11b787b5078db3de917f923c2eb6ea11e76136a8be e36eb784788ea3e2b9d7be95e6d4243b166c494c4b754c6dd160206dbaf3 99ae4902d3dca7424f6d1e7c455d562023465d0aa9de460b1866d7a52b5a f74e923d2fbb49c4470a9e18497bd332f3658806ed19c6077f046c5dc0d0 bccc1d40ddd20d1dd36627d5394f9d38159c84751b355a8e48754c6dd160 206dbaf399ae469b9cc7bd8e3d141479a7012a045ff72d51a448fdff39d7 8be6ffc046e5cf07644c7ed0a1b85cc2398d0f3ad542d1103d2de1f3b341 bec7d28674961f6b7d313b85f908f24f4d18080ab2c46c61f215557c0d81 fda6767552c20b037eb4c97e39dd51300a54cf301af3ae93dd0f958d422a 58e668e91eb14fb295d6923ffd65a2da9a88fa3fe7f9ade3d733f9eeb54a 127a12f0c791d09fb12fd026e09a8232cabec89a8ff39084fe111795518e c8beabcb9e2949d3c58456ff16dd187bc906ed19de8f6d6a2a639e1fd66b 020c5ca8e69adeb77fc55c84ad5826b2919e09bdd99a537f5c92437aa9ad 187ece2d245d29a9a0d54ff6ec7841bbe6d39d1e06b6ce3b19ea98823e0c 31a18bc564dde218b924e38baf75299220b281cabe0c940b404dbcf54d19 ecd6f22e99e9ecbfcd8a5e225d29d4535b20e4fb69b6662a3af13ec34c1b 58b8684aa0c7ce8d84f6e711534861328a5e4673d4bd6cd059a16abfd8e1 573b096a3aaaea3274474fb3a97d7ffb167837a37df2bb69f4d5c31a1bc9 0f07b0458ef6c85e51cf6163a409d01f67513c5808c5772f8502dd958987 ed822784d7be448240dbc2c6a9fb7f6885e34e0b842667c15908ce0fb4e5 ecb4966369ba752e6fc2f39e15caf1a41e441a27d0bd5175e8f50cb46042 5bdb499d75ffcbaa6606e892b21400db3becbf3aa38ee38da4c333c4263d a152f71dc4baff702ea1363a0940a5363ea9b51b1f2a71a1b9a4fdd19152 7fed7e2516c95ebff0e7c2ce92c50399e18386ed3ee39a48b2da92501389 cbc1f6501841e867f8b915a334a0abb7a92b2be3af10de37cba4823f932c 2779c3b008afb65ec03edcec847e412af7787f70c79ac84c58014e8d0e41 6446b36a50c9e6175726468d9f399a1861431a8bd311ff0567723aa35fbb 650b173663ba31bff558375f740346216bffd472986ff37bee4aa3675645 a83eabe1853aa061fb3614b78cc780a471c3c0f5da378ca90ce67f21247b c105a3bd4e4afff439fc158b9aa90fd0e850b1508355bf0152225a2c22af 9e5dedf038f28a11a2a553128c945086e84b4a146617e905a3a16faa485d 6a5749a7067aec3d2def0aada7436fb1e185bc66d0e30a7bb33af458e605 ec978d14b6181d8d7e9debe27751a6f5fac11594f6605cbe638d9a98ab6c 1c3f6c3125a57dc55158dba2bd4d36febe0a8590e80afcbb1340c5553a66 8ef2d6f5b4305a9d8d38afbd5759209f9eb9cd1cee0fbece6de7ad2aaf09 6dbe472f83389d743f0d7aadc6743f7646f7bf3a9f73a23a43f37d471a3d 6d12de84e83d2cf5b41e84f1acc0cbc4cd52d0cec7388f34ead47b45692a 4918b365eb9f6e813d9223a95fec8de3d3ed7ec85227f8217212bec21893 053f74e652bae9299e709fd25b9bcb82e860c0c56bce1f787129628e2499 130fe6ef76418eda7cc648d769c6f54984dea92af4776ebadbe161d180da 9e5f3d65cac4a7a40ec3a3a7c253581597b69e7526f3e10d619e614f0c2d c4f6feba37c1952518fec11b39fbd13ddc21fdeccaaf95ca8fb8d7d6089e 1bcf9b574d9d8fe5c25a82a0b68b90f140b934eb585af7bcf8c88f9c1c1a dd745b02a7e19db4407738a4ed928c83718005a401b77a56622b6c8dcb3b 26cb5f05ec5fba7f85b0a6a81a0d8e75880ef357d7ad551292d37c7eeabd 7220af71edf267760571cd3e39af320bbf13c9ddd8053ef41cc81e425b32 db025cc66649055ae1c6bc468bdcd6d69d3ce334d0b78c45785dfb709ff9 a77a46a8c660f684d61b3643b2bc838b6e983d4950ae20436173e93db372 1721546fcea7a2439024051300067137313b2424e1627e053532bdb9caee 519e9d23ed670d2d5ef3674f225d51e1ed8e082c5fc9f5f9b934c0238cf6 5b3dd364b466b2aeaea3d3241c59c9cbd3ebf9ea9a7dfa2eea9b7ee86f0f 7e256ced10993751286150e663580abb541147835b9f14b21f528999160d 492d9e74b01b55dab2c2e2643f5f20b0f4ec4e8a3a2df47a38fa1d36d755 2ffb34c1d4c8152e29b7235508e01f79d41e1f2dba807e4cf4a5fc87aef5 98ec07f4321a2c17dbcb23748bba86a2acdae6b93086a2e26d52b0a10f83 ff41cd291ad0471f09e62a79bb75e18e680be66da6f3b2a56a8f61cdc1df 9c7fadd0814370dd82648db161d85f8b2a9a0e51deba297a1250deca1af6 944d89b7fba2f313ef3d61757dfb7c2801778f393b2383989f16176eee1a 695f967efe7e04ee79ed936aa121ab47afc0f0809911a290a0fcafd2b0fb 6cfc059ed1b7f70513a49410232413c1dcb607a668cc18043762ef224dcd d7b5d6211ac228650e4607367d4fb15959b8126dec175061a3ca7f7b01db 2dd72dfb56756ece79fa61a7c845336ac412bda4347c582a6f5e25c9cecb 66b6d028528f61f0b77f1bc603d20dc104c9462fcdeb290a5bf9633fe6a2 92b52098f8503bed17548c05d836543f7329dcddb5cad7f89bf26ddefeb4 912d2c1b3bd40f92aab21ae60fe8c375b960f99e499ae14cb92a5ddab808 7ef4d41f4450a680c4549f33f2b650dabb0e06f418fb62bb234c2877ea7c 566e3017b08cb4c381caf984191ba7dfa4e9784ab4543c20a1832e63d0f3 62448cd2ee72f9a45a0cd74801dfb32c6df28b83c2183d13d37a21fe8f55 354e420ad334e5e36ca113a1ff16bd3d142751b50c122254e3bbdce4ff28 85d2c5e4d6a57a37b34a2593f51d6ad89cc225df6b8465f57b6cd034ce66 e5e86ffe880d507d72933ce7c93964becf15481def7e649e4a1cf96d0e78 17357dfa81bac3b335e5eb95be5f0e27aa51bed0bb47d556417fd0079d64 ba1454ff9531c9b090eb6456a8e52544c1bf84a84187671f6c18f7269162 bd002385dd60dcbde7c5fe69c34d004b2a284564a9cde4e3887ea78d5698 ba791a710fbe92c7988b361a335265c707c2f00e4baa3855793fe2798ee5 f3c1af717279ed9d860664996b26095506bd99c8a72ae7ebb45ad74af44d 6ba45a2401c195e44f1aee76743407a12ed6bb80701e68a2ea02f0dd1af6 320b59eca2c51a38f1ce6b8d1cdade6d9a745c219a311d646a3b069c44dc d226f4ec07cc1b249f651f1a3aaded284ddfc8b8f8eb33371a522823fe2b 9275e2ec0f4721522a0704760205e8b924ef1c2df09e43e3985ac4d3d496 0ef19cbc76a77a76ab47e41be9ccd032ed70813c2d4af60f916c510f9df1 7c5bb577ffd1cd9c3f583e8bc0528b87874638621285df554d1f8b16c4d1 183e71a22c772c362dbd1427980c002c3c0112061e8ee485d19a020c6f0c ae75194d3847585efacd14e2a1f5cd1c8d0e9f435edbc06db63f1dcc42b6 b8f381d22191fb0f74e34f73b1be39b61d231fe723315de7074133b1e452 090331eca04f6c383eab1307cd9022ab21e97643c5ff3296613bc3ccd860 1f406578b6797a228acf6663797b7a7592b665fdb2832898c95b5b814fb3 e45f678e37b709a23a5d88c999b8ee47348d60e358f7cf8ee72069a523d6 c74e7c1692dd17ed1cc4535a42636f534f2be5c3b2b15942997a9b12ddfc 28d44f215db9142e31f198c5e6b0d25fb2ea77bc0f9c8ca42d6ff67cb402 33e8396ed168b90a3ae58027944665049e54f29164673c4bfcb602890fae dd938622e099b93f0939b2cad4da410e69c54259286c8ccf3f77384c4e22 fc432b44391bcb5be60a6642970357b89191ccb4e5a85ba87be5ceaf2712 ca6577a55419430c32bdd28b0cd7a6179e833712c0e17f700c31228ff8ea 7446440dc3fd05fda08c17ada33296fcfb38cc26225ce290adea1d4e26b5 361ad604d8b08a80636f5d0ea79e16cca7e1a3f3c59cbacf59d252d989a2 49752d58ce58480dccad56aeeb0a5c75b89a8a6670b7dbf324c0887d3295 d982cbf0e2c4212c697d91fa63d676d3042c68c1b19797b07591050ec23a ff48f141a6a7f3869dd3d9dc93f35ec26b388f43ad1bf2d106e11b35eac1 c20cd5389511ac69973964c761d32c80e5b64e17c1072c8fc219286320ab 0eccb5d6c5e2865c998eac3519359e41b2f4afbc30123bc2d0a0de19ee06 d42dd254db2040e2a2594475fb01b90a52a4178f403bbcd9782c20c8f18d b6d72f9c6442f1d0c41b94036ad8bdf9bfedea0b96117a93f04c3c4206a6 bbe324a255a7f18841d09f976085737b87bb897a984dad2cec5a44c38306 48e373096da6ffe8e637671b820a62d31dcebb108b5a2b62374c746da5fe 380bca1e486c3daeb1b9034abe8980b89e0a466dade7a0eff5c8364df55d 25943937d78fd23bb599fc4d241c7ca6c23f337355d846c3fce08c82e21e e124db9e9f1b416e958d91ed2c21e26c3b6720d18154b8f3c41a0b9d035b 99eb5671d93dd6d366322e15a5bf740c261ad4ed24e89a6df117a414ea0c 1392691a58b068ca538685c646ff893029357fb8e567855720e803528dd6 0040c6f061113d9546f2dba4fa83edf6732c6dca4338e14d3d577291b696 02980b2bd8cfba079e11db2228e473600ed550ae05cd85a1cfcffb645e68 5654ddcf891b8e4ed4545708f683f57fbc680a18992752f5cf2ec471ced0 a16bc4363217f9767b684589803f3e6e9efe5e51e9eb0be493de3ee91c45 61b92a057fb03ed4f0df610ee47f89efd4b1b0e1869dffe2cd55f0e0513c 738a024c9e514db72c6d387dd63f36dbec694179a70bfe8c740ee2a13a95 0601f003b83f07bbd035f8809ae347e589302c1f9e3f3863d66ff1f980c4 8224591a762132041176334ec86f846fbda4db22ea5c4e13c9a80195d4c3 a8379516f766c8078cb77f67467e2c11a90c5d287ba70e9197f9a2cf81d1 34e2d939410940a6dfd0667dc491ec1a705b2d1433ac0ddd052b5d1520de a8d313bed949de251d7090c1efb589d8c7c4460df3f453a88fd966801a24 4249b996ead5d21d7294f4c4b9920252b60b0e8959edd9bbc4cfd971a6cc e8b402eed87bac510d721956f7200e7b6eccc684774e471fc7777463e74a e1e0742f3a9f4110514726ad5d81150234358c95735248e06086770fce74 9cf6034db5e3071af9ee634140303466baa467e5d5716263dd9291b4cfe8 56f352334acd0af4c7d27582b3894d294ab287d3ca49b788d7fdf9dbaca6 34f1a709eb39c3dc65ff732a3dc5b318c9e52dc0b1af189101f02498a1b7 8f3db2ce24f0003f20957a676a67ecaa25f57adf4f1e22c48c66fd6ad0ce 33611a35ff2e1fb51fbf4f8a4e19ea7f4cda91cbd64937a1679789b90baa 549047bee22b3741e3a04d423e041c09afc847156f96d9452bb8e18785d8 c78313e8aba3852ca8dccfc8c8a69d42fc9eb366296ef9f33b42582beb9c 7f021bc6c9d27cd19ad3d88e19e8b8303c550ae07ad8fed1519ff5ca68b0 7e9b97695fe76ba74d04a8101077620ee5a154d1e3d1caa090cb2b50756d ba0bf5c9fedaaa3e7869b8272fcb27b1cafdceb940d825f9b7beb7eaa516 70dbcc38de9ee3b28792e30d2131c8f2f47f79db6ca4b1b5e2f3063e686a 6d6126707eff0a60a8b7ca850b9f8f91414069354ff0ca285743b3fb3e70 aa3f3e58cec9d01cbab862d1856d2cc659d1b8502a64b3f9892d018d700c 3d92030b114b520ee285ff1766db12c1fdc5601c15345c6d33a3c4a994e3 6b427acc7332662596f2d36f24ae18c15820d0fc53e165926f701599a391 26331278e31f5dd3dddf8b0b504a6e4dbdd453630beacce725de85ee0c2d d759444a157f5e75c65188ad0dec71d7ca53fa5d8f6d1a3ff6486340d81e 37d8cdd0400f54faaa350cbc232e62c7953a35495730dba62869a27ca03e 85ec5a01b90848a5adcc9575fb0e60c3d26ade2d72886ceb3561af2b3bb1 2f2eff9358d313cdce228a468da566f95a61987000720c62abd67fb7b9cd 2cb5d5f74be8e0919dcb60a5364b1735d31fb3fdb59f9c22f0622f8df391 294c0c2fed3bcd185c9d932f097bcb2c066b6f2b54613f30ee99cfe0b3b7 08cfdd0565badf6e1e7b2041cf016e3b3ad1a5c03be3316033da091c0da1 7473925e79e78f8a3f48ee2348b2a51cee6bdbe2a22244b3ffd8e2f1f6eb 21a3af001d14e8954e80598937ecaad0fe81a030269f9aeb134350836da4 2df81f22bf35544daf3d62ff87014d3d62ea58686e5e182d930a2dc3fac2 588b49b660a22c3a55bf8c99dec4369d1d678210db13535c0fb346f0cb9a 8c35b29652e763300876287ed1bd8ee4408d586f2c27f3c11c7cae9eb111 3b01d521a91b24c52ed8f9e5e122b159fa7247af419a2378ea09a59d7214 7396372a7d1e6d7d533d0a0939cec9a27c6bacc94bf8eba620a10483b09c a310ca41a6c2606e2029f3ec1e612afcd9e5302680d1fc088ea26d835531 f157e9d4530cc97cac29d0de3bb879970eb3d781a222b006b0fae97e6233 fc47d71f1ab194e672cc5163c4052eeb88a31ab3a3f9a59f8215cc729e27 1e5db50036b810cd95cfd9826884ae6b1d9e9774747a0a9df039a77c7ac8 3406b9d23af796412550524df48b18ac8a24e3c79c464a253fe332a3c183 99fbacf4e2a0c66f152c9f89957a628b359070c773eb7c7b08745028825a fab05b092089a598ceeb34a1f40bcc61e05270be279e50ed9103f313a0ea b820f053b53669330e8f6eef4504a05d08178355f2c5162c0106a46617cd 0b424fc04e3dad6ea66bf3f3aabcc63cd504a4797a7698a486eaf5220445 7f0d1496d62d27a05717b23bab14f37a8082bf9b90b8bc82b19fd98404d9 ac23ac738af0e624808613538d34f0011ae775adb361e330db975713b672 e106228daa1c672eee1883b3a489e9f375143e9563d68d1775ba1513e779 0a7ca7468011420dbe03f372339a5e354aee018dfea076dc8962dffbb443 3506a5bfc44b0512e8a8eb7d0ba0f81f5b123171a69b2d42ff5cf8a81e89 a831e006ff5218daf44f25f7e046c6b06bb1b077778652dcf6855253129a 41884f86db912e57d7c4e06d7dc8a116ce65b628399cb21bf5dd8f9402a5 a116548c5653a3083e412b537fd8324e6db3f15df83e0185cb8d4c5f132d df1f8811e574029f3efa0828f9223e318c0a838b2f9203f707f2254e649b 7b78757e94056d90f65df04c47e73bd7f5cc5772c1253f1f141567ef5435 87add907f206187b611235c634c97761e4834077e659b60ee0f9d37af855 6018cf054eaa400a820d87b72f33137eb2fa3b8c3f8f0e6f21c281cb940c 0fa9fa00589243d32795125aaedad9d7ceba399ba151f8af63bb3820bcf5 e59c2bac5eb8a453c8eba8106a05e6c84603d2f91628878a94810ebc9c75 d951cb4916b4a4c8d471bb739d26984c7e0a0dadcf44aacbf5983a54d979 9b20298c242166c447b82e7552014a615d21091f33961b5b084cf7670a60 cee6af1919e4d128a4e15509607caa802093c5668be1d5fd5403b9cc135d 2ea6c2d9182835e4be3ed5c484b91448aab3ca396f4cbab5b6d2943d7a04 7f51addf7dc9bec7ee4f952bcb09059b2da0b1ad56ba99994bad26ebda9a a2626b6cd881c6b7ca7dc96e7985d7a49c7ee9d035bbdd013ff89bdb181c 1c2d078159d9059fd4459dc967af31310195a3cf9bbde2422338773f5cb4 bbf7fb3723133bd398a39fcdfbcb88acb00080cde1eadb8019f151e3b1fa e7681447c9987afb4df465344590f47d20e47ec4285c5bf828fa3ba2e3a3 3ebeb484f413fe1a0fa6aad97f900e27416302a6aff179260a206999db72 035222b1bcd1ee30f6d202e25599b536dcb10ce7b0c283f2543cb7695726 741d1a477e0c0db1d1ec085f58e6a8ea91e05eda30f0f66ed6f3a7be7117 0643cd058ea61f649bcfd9db22a05e8c0e264ccdb0de198ab6e629ac4c40 43280269f0be430d6adf70b881f56ed5112857fa0ea08ca2bf9e20989c12 4a54c7498bef5b8d627bf0b42d5d03cc063f8eaecd3932956769367c720d 4043d64b68aa996282eee296c7f441a226ed8159b166e1aa996d24aca65e ce80b674e97d6f7e392ad6bf593ab4f38a3b206ca0cc3128d847845873bd 11b4293043a22952dab798352d72cefef8ffe015192ca8f60c90d314a8ab 238a13610382f9f8ec1d8c1fcafad7c2160d7ce47ef373c0c55d7bae9b21 148701f7a8c0e7cc82de5f26d7363d95163de187a5709820e37bbead6e14 80246152f5cc865b819d29512b967a90447d98f971f4c4c28c2979d07cb0 e6ec8d4029dc64aae3dbef8eba571236212600ce0acea3ea444e410c53e9 e5f1d9d52215aa05e690fa3483cbd5451f4311cd0fd23f39d4e106e69d68 1565ac01a60824243990cd9b034d3ed1fdb5c0752b5e64e2e417c6b64d23 c8e45af1b45896ec877c2d87f88f4f4a85d0a407b1d1137f53650c134669 649806886c2eb049edd7f3b676f52345fa6ef9ab4a418066e08a815302f3 aa8ffb5fbb75d12cc3bac7d9ddabbac644c2944a44696f69d130e3278d9a e457c39c9965e27dce8a47966dab125de8e110d266b7fcd6eef2d820c029 fa60dd328084faf8ae3b6bd0f570855bfc557e154c7d4931ba6d2e4aaba5 27e0d098334ca38c9a78edddc086cd1f03bbb8e5ac740d6140f67d749605 54afe94dda9e1bd3a55c4d591c34ecc27277fbd621ab9dab7c9699c11c88 010ec97bc46dd1aad64f0df42c25607b55b88544455aa872819232372508 516f71cfcb5c72b4efdf280fbee2819822cdbbea4caf86273a82d3f050e1 42e1e0b8b628e34f28f43d57f70718498f4690dbb3e2cffed13b81758457 541868a14d0c73b9da8f433ad8a7ff1d1ee38348ce1a6d95f625c8c87287 8c46d87c20e9cd3d2c4222d45bb54d3ebfeb30e53cfa6717b52a9025925c efd17f795f78df3babda2beae6b2c1995751c334fadecba5981755bebdd7 6034871e1445171a71f60282e6785059cb4046ad0bac98d5a1e5668a2fc7 fcca3b915875fcd0d529a635d64cb34387cd90947d3c909f3d32c4eb40a6 0f30c3e1f819bd8aa2a035dbc3ddb269c26270244c224c3a93ba4350316c 664b2ce7153b09ead7d39bc49d6ef04c83703e8b74e6a0232c41a02a7de0 5afe0e94dada8b1fe6208f12b87e00ef8c65d58b02466ff697d6467f66a0 3f34284e6342b211a00225a607a556ab1d4c8c42a101ff675d951d0f5a75 2f2479ce3ed7a4f84488d39f622ee53a54c3202d4e6017832708d41e5338 13a8d67076421fc76eb25c6b6373f413f67b01d6fbc1a86d381efbd14485 c715984a13189d77f70af8035c8df5d1d23bf2535245617911a4bd580689 41e006e7d36650fce069048bb0bcf831d3606f3e730ded0b87a8d3282ccc 5ff5f8f0dc71c4e0f702dc5b8a8eb71825e09b692adae6793f0bd6dcd92f 5ec371159f0d61b7e174977766910a5d2013af40264e55351de8f7b7077b 058918bbddec5e4dc7fd54b83b0af45f11a71ae59646935341bd381b72b1 c64b82472cc9561f1ed5ad6b5df940884f6574d0304e5b9dcc28875a8ae9 7ef3fe34068e2e36fa46aa5cbd3dd87f92ee8b5639941300a1034f50fad4 60024e46c2710dbcff25e3d17a9c0c7697e318b144a77f0a39b1fbe910cc a9a8d8632c0ef2c285d5ab8d014d0b2dce8d7b0689af0449d1a22875cb7a a6d8c03b544e872ba804ade461c9ebff87461641bb7b9e1e68d13adc8f41 13e2e08e79b0dc30d59765814a47a64b6a33143b9994d42b767e000e44a1 a77e5241dc5a9464872b1193df3187c690274520b46c4d2c04d04284b58d 05e7378d471e34444eed398747dae91728b8b1f3099ab3688d4ce7d82705 a6a3df49e761f4c59e071e3e1d771ca1b8a60c359bf076e8061d148a6dd8 04813a596c54149faf1bd2e25dc44ec458af5e2619a418c53b7eaf9cc75f c21387ad8b7f8e5e98483cae7e86853890d74588c87078c58237ec97dbfe 8aab8488138402cbda5c876b43c280efb357342178217879909dfef65a21 979caff8306759d8b475c3dfd7185074c185e4222deb781fca1c2e7b65e3 d7bc788eabd2a74551c5bcd2d07695107673c8b38c53cb425e03e426e1d9 88c4726e6fbb988ea28bdaca5156393213a9cb1c26eaae7b9534e2d25083 37f2bfa574504a4f7a79467e97511ee052586288b2e095c41920ce77034d 52ea9d07dfdbf3f094d7d15f0f3dbdaf3fddf1d44a1f51d470ec0f6723f8 2bc0e874bd5c8d1e5f0530f65e6b675ffab3cd19f1e3bf6a226e3ecfd2b5 018590395fbfbbe588621cdf2e52e1483794c44c6548206079f1b998bf31 11772db5cbb8caf6930f225373d891e19a4fe62cf8a4309561274a329a3b eba8f589bff6cbc5a5d62d2ce038d3b64bef960b4185796f506c9adb0714 f47738c76c30ecca61a019424d6ad5ed46bed1320b665c4840b514692f9a 6bd0f93c53fd71ca297b3f00d9e7ec849a256e63a647fe3164dd2e3ea365 af25a5c1eb26b13b130cae81be1623a0c8db75ecd68806219b7db3acf4e5 5d504212e473044465a6f8bb66f730f28241f3159953ea3ca4af93395bbe 9f1b5a1c3221107ed4cce1c509f522bb17279049041d75eed831a0f6a676 286db0739f5d9efa13a81c3d38cdec6df61eec011451338db2bc6e5c1688 605fab1ccfeb842de110d2047cc89138774a45b3c2b174a4241b9959ab39 d6378d2a1bdd02d200290cff70a5fc3ccabfa166381c47f73e3ef81c359d 35610fe000371e6cd4f38e525aee9c02fca862c8cc0cc548a846928b50e4 a1a5af19a7cab7dd540d59eaa930bfff69cd67294d470bdb0e01090f7d07 11ff287aec4c95f54ecebbef45ae68e07b20e6c9666fb2355a971deaaf5d 0e77114787d579734e39c222a01456756f7d05a079e7c728d8aed34e28b4 faedb5e44b28d3def6f351d4abe40a2b02878a4747b1ad064bb43ac2948c 9d62e3bd6d3ca32c8e062552ab41688e108fd838c969db1ce8435f173349 a96e2f0b156b9c7dc2b1d9a3d5796a664ebf0b6155e5208d976a95c6da4a 80ca7cae016e466fb4ce4ecbc9cfcc9f46f389464ba21e51480286fef055 318d74da79a0612ff316db41855794559ea733ccf0f964626da329b20149 652408ad37595fd2a7869ad30752421110d0f31b395620b82b32e4db7928 0455adf028a57c60cce7323e7024023fe9cb11c4563925c1e69392929faf 046c16813b00516ec1f55fd6544595d1ea9529015a17cc8106709241e35b 69586c1f00555f0fddfa746a26764fd1fecf101f63c4f25a75b2649200fc 5c77003d852501153afba3d2a5b90d44852e14e6b6827e6f714481bdefec 7a68b232bd483565d3a31de86176b2ddf0a42fc9700c643ca6693890127b 842ba5099908bed877d2a2bf21b69e1f9acafe691fa684f40efa7f297f0f 49b9b28e64fdb378e0e66ee7567142969c5cb92fe90fa1905b0a5c354a14 edf705b62ea069248b6d3e7eef1b7b26d2657561a4da5cb3d27ca9be8c28 3e23a0531cbc9992ea589d3a39a629a94dcfda7bfa0347c852a3ada2d631 a2f74dd19a7f96a23d61a73e72a9b12ebe45f3c051f7a100517d5f1ed43c 0a0ac5961fcbc0987f9191fa178acb9d15fd971740952e68eaccbdd70839 6b6b6b3995976fd8a571e5253ee8cf1cc31af523dd223d13d4ae62e93226 d83479d64352d7a51773bc123a58a24fc1190b3a02cc5ebd2d34a40240b1 dd775ab4dd9041592604ec01d5a96de6120b37cf672aa912422003ff4f93 8ee571b98d190c9a43613b11279d586f9d40a0bf94025161363af525a243 023eed308423d27bd6246077ae64d38625443fd13e78915f88e284021009 568b9e2a09d9f750b92eb5b48a60d1d9ae227ba47cb6fe49b1c51bff5a79 7d087fe6c8458465cd3358bbdbb54fd6263c1abac697ac380f7417dfe253 6602f0a76fac74c2492e524fb743fb614cc49f82bf59fee542a6de34c33e bd135318680ec14b77bd72b0a5792f0d505198133884e346d3d3a8da1747 a5e3413563ac750d6d2d633a5c90ab136bf0f4c41e1900e1da555570796d d7c66f4fbc0fdeef00e7754490d589cc4cc257fc437706cc104e00903428 1da81e74fbcd8c2dde3559a5eb59a67192bca9ed49ffc49b605a9daca194 ea025c51c5ecbcb3a7900a3fbf4d1c2b9740fa767704ed75c3b58c7b93a5 35bf43fa7b0e1e0e696b6c3bf8fc8905f4e5eed80c239bd19c9534922c27 86c2f9ff1801d2e1e0890e1a6e61918a4c904ad8f8b79e297cf2beaec87a fbaca9515dc987e2dddc40f21c5a70d2a93d8d0a626e6e6184a2cfe85f86 630b03d237d15295c3c5046f7bd5a24f59a8bcae80909b96ebefdf6ce2c5 823b1352f5a76adfb86a6693cc2cb654ad09cfaba68e2338f5ce117604fc 5c037512857e43ac097fb024cc5146294ea0c753145ea5c2f16a18fc75f6 8d0362d4475a1e902fc341a3c82ee30744179d39c3e529b96b112de50711 954a42ff30ec777feaa3d7c23e0f4da5d0a53bedabd6e46457aa6292585d 3a148a31f0559e85556414bf2e9e0b62c20ab24ae5382a6d25c24a5d54b2 672c5689c3ff74358a6d211f4d44e185c64b9e952ac2d60e6d9c816d5e19 d662d6ef1d18b380935b2ccca31066fd7890f9b4d3c39d7d4a116c16d895 3737edfcf511e94910f1bcc3a53109c6a21e177ad241ba16f5d09c711ede 5943009c7b8b6a02976c33c38d43b873029097dc5a93841898122608fc4c f3acdcca3a2cb082d8aa4539d8243dbf363cfbdee338879da264292edf7e df7776a8d12bf4953f1fe319760a0c6b6275db4ed1b27135132062eb4b7a cfb2bda8b2dd2ba97f524d9103c43e81fc0ef9e08af1acbcf0eee058ec5b ecb04a1cade9c23d5e50dff7a8fb2c813f4f921fe202a9648207e95cb905 8d76c6e34b13ea3c56c1ec3f3bebf98963fc566ae80810bedf064e32b75a 9dcb51426697093f3571af3618619fe007d0c52bf9da695aaf1c2aacdbce 03e88f208a050a02c7eaa946f41acbf5fefc03e790d08867e255e687b664 a130c9f2f7537feaab9a431ff78bd2f70f4e3d39ace81e68a83877e62623 05742e7d16dc3795c6003fabf015ca563916ab7b60fb7f6efceebe4f9f7a 05f120b9638e9d77801ce319d199a1f15dafaf49b53ec272ea1f3629d013 0d31eb4854375f171268866da5ec2ec7fe612bb9f8308c2e0df3481cdb4f 97f8d526eb04dc57d9a84403902967516b7d6ba894583e74c5c9a24623ce a44df1772e2acabb5c0e1fdec582b1430a73587fd5f16b784682c0d02a80 112e2044ffaeab3580f3e4000a25741d0899814832457290be7651b8efd7 2b485f95d405c6515eccedc45b9bbc76b20676a5f6a91a58501e68f96cb0 be65def662cd1db19ea8031feefbcf40353b7059476aafa33ba26af93b60 956aea6d789ff3d80ed3000f266a2d8773eeac7fefd3776da65ed01acf9b 43175602c26a538b1df061bb3b524f2a6ae4dd052e9ba288b2d35feed1a2 f325c203072257db68404dd5b9aeb63d441e41ad385f170ddd4aa559296a cf4266c7e3bbca5b936e6028ab1bba4a44c79b4700b29fa2ed65d8274b8f 54c17de9f4f151ed08c5774c1ac53644777fe675355dab5e54b131d64bbb aa811dac7925e002f62bbda978c6ece9b7c51c22573702bb08bd218606f2 a7c9c8abab1b262b923c483730b4e6235607378a6b770a59845efb645312 9cebc86eb8302e45fcdbdebc88c8b5b3115925044520195a42dc010ad771 b320083a839a7149433f59442a24eec08286051516e97aaf096c4e87ee8e 89365b9d4cc7c81c71e000b153a27e74e0515ff30e401252114dc7d4b1c0 1fae5ef32620d74d9d4c61b63c5d753b3223a9c7267dd516d1cd18f7fe5f a60f8fdbaaa8778d79a87ab8901927ac870d580b3f9900b6eba38e830455 8990ec4a85fda0ca6b3cdf97573e4d0736adbfcf366596f5e34f59f9ea15 d38e4cc24ef808066457986399d309ce2cb7fe2c1d1ba921f1198a91766e 1de4531980f5477770783dace9dec59922614b1fd88988007c6adf10ccee e138efc2346390fc88d1adf8617e4e56ffa72092913c1b263584089b4e1e 214213f56af447678a4573091e3edc3b6438c00539d003006bb17aba98f5 e7b9cbccadff6803b31e6ad941990462fe1b935c67ff9e4aa4b615b2855a d28841b296841a9f1a3bf86f9e3b1659d7e77b4b6e07da31af84c1f57e50 20cf8c5b352fd4124e13117f3456d1ea3fffbe24a86971b712525505104f 44e260553d10d65978a5ebf7ee66c7ac6603e7be95d2b9e8126931ba1389 6987f97caea5b7ebe1c54069dea74b6157f19bfcbea2e59ad575103291eb 36923f31341b9d12c4cedc3ed0383f19e6ddf36ba52652dee81e225691a0 0b49aa3fa21b5d1a3b70663345263fb59bf0d71667a278394d71616312e1 f8b2331572b7902fa2968d69ad3d42a938d7e6f9e9f26309443a6d977c64 613501839d09870f02d282d91027738c17d164384bf49edfbe5859017052 483a385f3d6c23c8ec31ee9e07c5761d85d6702be4231b95fe357bf67271 454d8ba54104291df51c2092823d58d7d450c992eedc2b59a720c7195790 44dae147b760ba9c83f66e2774c36352ca242d4bc6dfb07d15896edf5d07 62a1b9491bc4f4a2ece2a0c44eb8f3a4e206be87c857f3c3ba01e7c1b329 d7553a2f5b8c17ee6e339e5c32c75a914ed933c601676dce75f19f769737 5650fc71a01feb7c88cf93b0870889df962d949ac0c672ca5a63fb9b6e9f 731b075c02bab9297ed2318099bdc3d2eb26821cf90a2f388a6962c12108 9bf34d08e3ce5109992f30b9f8e8b5202ad03d03d0e0001285cc4647d919 b32846ec23fbc8c9106bba7a493c81b3a58bb13dd5d7a43bb6622ad68c84 1d7f1136f895b1d49496887ac7adc49444803a164a0a1faec299da1c1ab9 64fb75314bb9d7d4aa04ffb3575641f77bdd0f7e780eb7cdc17a88218c18 e710e0f8296ade21fbdf35ba06e80aa6bec89f1b2a03076c6daf3f0fba84 5a5b881402d2c0335b687b4030409688963f6dac5445094d66d33d78a763 b6f500fd4c9bc8804d40f52cf4baebc6d35da9cdee7a30b70fded0f18587 a17e08154070b0a38de000351a89f44b6cd66608d8a86844f90d88cb257a 4af9c67f155036e833d5f5d0fc781dc98b1fc1b74c42822e747653d06600 67daa7aa765471929ed4e38d9cd69bddb4707fb1d11d1237b3a5064cf8c1 c628e23de9ee9dfecc4bde42978db529752a3a84b912467569ea3f9d6f40 978896b86417c11424cda3083447f5c2df66c25c5502ea424e3a6ddcd230 e649ffc82b3bc0168bb999bc51081b36bfe61177aeab6cc744d9947bc5a8 938162c79a268e6945c3842dfd87b77d148f9c7941cc629d53547da93086 30eb7bd3e1c0f27f8ac28ccce80ba0aa0060f26bbab71d175707ab60902f fbd9c99c38d852f114f012789673189b246eb64e098c5e9dd197abf6269e e1b4adfcf68c1c7b3e5231780f4dab3d4305a18a898ae3d3fe4053905248 c4ce72a10153702987e2cbfb01cfeef86a19ed5fd00666ff93f1f47846cc bf216d42439218abbc95e456c07491a7c1e46f1d201c2d806649fcd234df 122f89b3b6c0d864053ac7126861a71f40cb271c1499e4651e52a49411be 51c646d59ddd91dde8736a0297885a0e0281432f254408acaaec81a374c5 060d0f077677aa42a06b4dbc477b460f8d661789ff0cfeb829abecd6c06f a1adb76f27fe5381bb009bd05bab346a2d652d2478b0a8c76aa6c998c972 6e87cbda66f9bc62fc440eba14c7347014b26e84f30556b8724bea81bf76 d34263f8e45aea56841ebb601852c082016d5705a7300e8be1276b93c11e 6bff846f1cb5f37734c467bfa64e935897b789d5985ce3da9a8eb80b9736 5df25e5e875ed16584566afa3929d869a3fa9cd7aaf47b78939812fbe18f 2921b393d788f75bf0f0c62a5bd25124cc98844e0e4edecc25d937df5670 0965787fc4d191a33db8c24ffb2ff5504a4e6108e5fb5f6612db56bbd7d2 f433fee1b8f0d780ec4f7640b4ffc01f352eb398b7c4116ff43f93a118e0 56d6d820bf3b41a7c09ead1cc4ff9052421769c56b4599387eb08f750d6a 6937b06cca4352a3f4961616eb1239ef592d72f7a7801295a1ee3e9782bc 95ea6832f1b2715ef1aea0f4722e8516fdad1bf4145cd261032108e7892a 8d040771f86ce98994e1b4b5688d59d6047a513233d86d3608ac4da4cce4 cad778e366271c1609ddc506304c65b750b8bdb935ce9f0e0db5337d2e50 715a21d1dd04920afdbadb6a416932bdc697aae5ccf32e9970ff05a18ec7 6684d125607e26d371ef6e69172bf066f7eb6f527178a09b4077aefe0590 a8bf000a9f2d483689b75cfd02571453435209ec995e6c072c788cb3687d 6306d79f771ccff4214df3e63c74e83dbf2baecd472cb129fab760663a5a 642910713187b42763e8a366c5170a81a2336e9881f5166fd9e0a6ff6c04 b3b76c3562e0f1df47075ca1be9a79d58cb392f9d9f6b55c49054a35ace1 b3ce3e8d3c81ba1959c167823375626eda6ca3f9d64c23de7a9f2e23bd32 15bf3e65830cd8a364fc533ceca8b67b466172d70a891e4b3fe35adcf61e 3e1f77717fa3924b7bbe8043b9815f9777a4f007792d6d6f9942d02445c2 b0dc07b4510ca3352359aa3162320d3470d0147b1568b8a914e0df108c2e 5a76d2bd7d58c8c2d7403e755fe896aa7522053b4cb846bda0a4e9b56b97 a9d089e3e7416e6b1dd014229b90fd319a45fe161a0e3092e604be24125b 51f3e7161c64fffbd2ed9eb48bd14342cac1e3030c633fbd6b87d28529fa 29a5456799bec81d581c3ce827fcda2101419b119a4af6801c945c314f80 f4d7abf36f73e3e75279530636fe09344e98c368240b9e4366d9e66a6105 74ebee6f31cc111e83e0544ad321cf2f62f8c530beccfa91c5f3c5645d62 0ecb35de6fa3dad76964db3a8307e8928c9a18bcb72d919fee70f1b97588 db5c18e16bc7453597a1f20d7a9d9131b002a56d4c368d6bf69e8bad4e0a 445c76fbe0af2af7c74db79ab8f767fdeceffab00c620d038fde8341ad14 6887045489489d680e104129293a3f27e5fcce7529bb4a2772e504054157 2c22532bf50aa2fc7d4b4db9a6b38e2668ced8fd5fb34b26f7ed5f29df43 a5b17f9f1fe1f93304e31a2e17ccd8f25560f16074b1dca25c11e086363d 3ebd6139d32594cd59a2d8b600ac9ee7c020d22b4ace7662b349824c926d 29aa5fdc9c1dc4fc1718b01d7a04ff71fb10181b05cd613ffba439285862 973a020895586a0543281cb6e94ab185d3fee9c8caefdffc959ee7ed5101 8d527b21dca5ba42ba2e3a8a77dba86e64ce0ab27e9b5db014001bddc890 db7f61e0900459821a7c7063db65136e8af05a68d26f6421fa86e4ae6265 3c6577ac9187f3d6410bdbd7c8109c9d244376afd4b783ca00473e2797b3 85c8585c1672932e1547d2183d84adf7e6f8cf420d03a4e78ad171ac8d52 f443c76989ef51a0774c13711143eb00ec544a2b7421728b79502e8bfa2a 394cd0cc15af713b5ce0bb78e716891802a281bb8fe6c5f2145b66e64dff 6509313f3503282460e4c94ccf85569b1ce5840fd638ef514fda9de8b1b1 e877579cd47b8785b991641a481ba0ef4603580c8edb944e27f4e92935ee 027e2a55fbaff992f79e03f7b24268bf93b24ba6c604352d147ea9b337d0 8e02dbc75fec7f50ad4841ae655106764153e6e08c84a2264f2a180c2225 fa1e39ac081f3c4a3e3383bb9d5107ecd076edc61a7a80d9ae7f55975b60 76e245f08ec36445d8f05dd13748995af65fffe75597e98683e688a24053 011bc71b699ae161dcda835a2aadcdf4d9a82750958a39ae685058ce74f8 91626e99497bc82d62d235494dd83f87e46a3756823e23434d47ae4f35a2 dee83146805fb5e28af9e2df7812497ef6a45bad66df7b29e495128031cd 96564323c75a88b98e7333f6f8de1c8e7526fb5f8c1110ffae4bccfe32e5 32f1228f7a094f67b3518e00a071897f4edb688bf9975123cbe1de0895ea 0a88277a69a5d7694c44b15ae4b592cf3a176ab6e9693d80d9b1b89bd35c d888b764920e865e7e9ad0e8266f17044ed652518d87ffee1dc364422f57 621afea9160a8c795d44a6ce0c22623aa8af5a08cb2319f335e7364e1070 6d6c357dfdf082d3ebe3b0503f0648b74aaddd538f5805b11eed58d6e50f 7d7e6e1a631e89c81e321f6ba32e13a2b72e249ab2dc31e73a23bae59615 36f1637d1a1ec1f9f777c755e72510df4e86c0acb8fbda3fa87084fd7153 6ced250a8f31851f0c9b4149a4ff19506ee0d6b5706557b831e09c687bab ce784dcab017c4a62cf39df2bf8b25e81b29f8e11cb5a1f4f3eb0014560f bf1b8e47319677e83064657dc222f4b89f5ecd066f0ef92c1993d16247ce 71aee7c8b464772213ffa7b8ecc9b4fc0bc307832deb605e685f6ee7d54a d064424e1279e2a1ec2d42b1d293e396ee0d8432a5a0dc32e5299aa79113 201aa5d2207af42b4b2e617d80a5aa4b28ba84d0e572ecff34fdc202b672 63b2900e5b8a204af2272fb388c0c1c1c23a8a821b6fb3353bf66c5c01a9 068afe1e8d70107dc1b88461af7412400ea89be6d9ee48b306629683621f af5ad5f9f87b8db31d792108412e4e317b0a4fa1f80fa197315232dc5d4d d2a3a3b16c8767fa33e2f227ccb7e75fbe989d1d51e2322426bae35ae94c a87356c5cf217dde81adf0625386e8104fca2178217879909dfeaf3c4b49 22ff0df7b742fd8e53ff06ce37ce7ab7da7a6bd83e753314b4a5db582300 1d7ae54e696f0fce5006491f9d9fbb4f415f32c6cbaca1e0ece08e6f3536 1ba4cbd36ab700e7d65c9e7e6828c7a05ef347ec2a433f4d14eed7e00669 5638f8c3eb83436d5d47dd655803c25fa1acae75067071cc968969647250 cb082aebfe199d763f534850ad7becc6119c88c36ae5de4dc01631c74b23 bfc0be2062dca0f40c36b986d06f756a8f6ad3ee511b73b94a21653201a8 230c66de11afc5dd11f0c7bbca6eda4e20239610d1b7c39758395577a5d8 34ce808c8175d741d834b184c865c3d8a65c787313a9fb607f977751526a 7384c153d94b6a929db265128ee0eb7da9ceb15f793384790317c87a4a2b 18e765518e928dc5cd257d1734efd5f156134530af79e72004c7b3ef05d0 e1fbcf09213699489e67aaeb39598b718baad866303b5601ea56c178042c 25b5cb585ec12a336bf74bb3e655959e6f859e6312ec1872eac58fe94966 fb2c68e160b4901a6fe701da607eb6e371e2a23d2ea43754178f3bdd6da3 e0dab513f2cc03dde85de5f667a74627dbc8c9324a325ccc52c2ced30c66 15bd70bf7f59869cc9a2d5757b6a14bc8d2596b949be75c3e6a338edf1b1 3cef3fe2a02de729df56cc07b5cf2576e971584a9727b84eae6ed9d353f5 42094c3b11fc9a0751c986f30b10d35a5add9e3102d08c00dda48f942447 a2015d96c78b011ef763d5d44de2ab8c95bb380e74138a936e03e1b8c5b6 bab711c995fedfb910b637145fea1767c9283dc78925142f3e870e0d1399 54b8df666423e5261cb20cafc2898eceb2720cee92aa6277f11282729067 ef3dfee0aa9d4abb321902c457447661ba78526174124f7c9d5566fdab5d df4fb6c08a0cb7808c59bb42de49c87fadd4f75935a0ced714b8f3b5f684 8ae7a605960db4b2bcb477976264e2a84a43cf6854b82844d5096e422a39 0211aff3a6f6271c03c4bdbdb5631767f345d09cce4b4fa0e9c2f9cf36a7 ffb12f2c8ea3136945c087f9c2bde97e5aa7e0781e144ce7bf5efafa7150 d703505bf7412bb932091f92b371539ce444723eac99aa508399d3eddebf 4f4ca90564bba44abe73a50e62ec268b2aee66726ffce232dd4868cd1981 85816064b6316eaed2f4fdbbd4cb75145fda87396baa6e5878154cda0b6d 8bc799ae07d22a85f4b3eadd0501051c0f46c69cc26a68738bb20acb2698 15f97cab493969fc16f0714e37629c835132683b4f5e4d7fcf2b78b6c8f2 f209c4ef075f83ee77d532d6aa7098c893e6f14b0a777abf7c01e9884cee 55066937178356bdf97f9c1b589de16194fc3b152b22bc06e4842ecfde68 47dbe695df25ba700dd75c0e2ec2cc9716dfe2a4e75c558e0e5e521e70d7 305e5379bdb0f5ac30f091a77c64b7bbd94fcd0448865d866f4d241e1921 ef5291c414ae73824607d9965ca185c3005b25838462b937c91ed9c3a649 d52cdbcd20cf6a1d8a30325c97a0f8331af0c41a2365f0e374830346ef9d 895fe924531098876e44079140bc4d7627208b1d09e4662aa45b9796aca2 5e3ff8624f14ee127c6a86377996a4fa8ebd4be5322fecd2f1ff85645a9a 11445dc7328a7a69bff5263ac3b77f968f695e4aa381b8581df3f8faa2ce 465987b1f25689d8b4ff6f79d376a3eae3aac7c8cc6436e5713a61adc6d5 8e8a9e9e9789938bf39dde35f3ad5d2f619d07b6bb5d35277d27d00d15bc 34ab44ee8febc29935f4d78f7183471b32fc327a631cb87697db1bf9ea35 ba099761235bd0fb08c9ecedc02a56f2013280bef6c57c9daccf1cfe2e64 796d4185edc469a71d96889e6446c40c7005399b895ff1e5bcf46ac23010 01791fbf7e895fbf64870937ee66725f2c56712da4d480b8a6382c317eef a0268211664837c0ae48e66886e0490cf8650c136deae13628fa3b01340e 7ed17aee48e3f832409690bbe4ee1e4e30f9d7930fb54ef72ef06fbde9d7 ae68fdae5f146e7adc44b899643cc207c53e14c766075cea41321406abc8 916ad2f763f268886136ab2651125da29348b6bb4d1721203e60f8504935 ce98b7781cece00065b6a2469902026e20fc30ef28ada452f82097ed5da4 874fd5409f7056a02e501895c0f5617682ad95a74013d95fcfc7bf203b5f efe8aded7f2713750bd224b8361d3be7b4eff6ec72c4e484556a5d7d62de c61e7f4f902cb7d15add2d7cf5b9655371384ceca736ae87848d97541ec6 45fc0de7ded4e3c8ba4b8a99716e767a2f4242028b61fa2ac2e810fdca21 ad07a28ea5aba532cd615d0847926c44e7d4fd6bf46063ae725477bbe9ff d01cca116c5d2e35cb91436ba0d713e96e81e188217cbc603c3a1ec453f8 3e958063053c7af403de39a9ed4753db3a876f6da5d7190074c7ce479efd c41bf3448bf859a2dfb482eed009fc38c548abfc54288419ec3b7249b66f 15f5359c461cdd6d77b96e9def3eaec6d526d19f096547061ee7c4cb5a0c 71bc5ddf090c363a8de648d44cb771665259e50573ff945b52291e822522 c0dd255ad3ad4247658ac1bdf71e2c8bb62f43c2f3994411b89884821fbf 963cafa4589a410f8e61317f04cbf9b87ef236724c850a42f9af2f36a850 72bb16911d7810ce35b58a6b3a978c6eeeb379be4451f6260123a56b73fe 54dbbc4f1934fd185fb374a2f4b205ed7838c22477f8eb4cd102c53b4ca5 ad74789a4468cfa7cfddddd23db22ba4315c703763d6b3da578edc4ec040 d4f0484278eff6b2f4b1e318a575dc53bdadb24be8c5a81f48fc9704c963 5a57f2bc8b87921f2b3f5cabe517b7909f6fac3bb85a4ff60d5127e45d9b 38d76620e6ed901ad20fee55a99aec87995f54809f22617b289f303ac768 9719ce10f9d5456f7a4804115abe4cdb5cfe2cc715941a95b8b187b53f74 c2b82eaadca96bd8b902c58e17d1bb5e8e87bb0aa354cbed83753aefde1d 1bf54e3246aa1485f796fe3be9cd5db6992c2647e4d32ba14bfd5ef0cb5f b1f77f0e5d13d70154be1e2be0ea6c6ca71a5024dd4c8092c465913019cc b8d949e2dd5cd87a196640bdf64024ccf38dcab7f022a688b9c670e6b4fb fb0d3c6fc506aa5aa6b9cca0ff2bfdb20a9f876040db7fb7ec2ccbc5304a 152206cf00f98315ea1aa8fa8a4699c26af04ad9455ab67e60cc95b9ff26 30cc7721e80fb4c17e0f9a1b7aafb5cde08a489e47689d5138c6d65297f9 3337b5c6d9917e2d98c65e7328e55b6935e6b81314f88457485f9dc22d69 daa5f7fbee8940521ee723292bafdf69b9172998b7951967001c8c6919f4 3e7aa54f352df65b8130a45d5fefe672291e15f34f8fb865600931d1c751 abd8dca8cc6ec3c7e735a3accb6b407e28ba941276bcd2e221f06aa2e180 20c88a75e02c8751505800a1d8e8dda4c417c48fafd7b285f8771989d0e8 4f89adca1d965ffb37c74f63e08f9e5acb085a66c85b84ad8c3e85354d17 e05494bfaf92dd4e91efa6fc53fe92b7c2cbd93ce69b35cf44bacaa33a59 de80d50046a1240309e261f1fb355e49f9b15b56ca50327a2c62c0b944ef 7d448b62fb75805665a50ddb309cdfc7cb7368172a7542fab7eb9d386019 8874930d428f3751d85c228ac66ca19f3f7b5f2bb93303b2dd1532bf27e6 8639762b9cb525f916d0478ea7ed6ee9735e7681291e17b2d32cae4159cc fe773d9acc97260e721af0943e2bccb8ccbf17077ff7ffd389dcf006064f 8d89e421a2e8d8098f72be9e286c3e824ea0604f895789866cdb26ea01da d4b46faf3804f4ac97ff2a626bc0f059d2143ab05aad944589acb5e15413 2c9392d823c072aa8799940d5c98386a0fd6b4d0b536525e305699f41773 2421bb58a75568ad4edb53268c8168f914be852c86ea02d369315dd59236 3915dc469729f01ef1bffaf4a5d29ee70da632b9e63dd383eecd4ea32114 642c3c4be801265a9e9594ea6dcef082bc99d2cc7e92333aefa43a33d3c4 696a1ce363c9b3915aa8563eb616c897b795d29361f8253c267dcb652f60 5a96d6492ddcac2b13bf904e88c90fd75ec77f7364bb75ae200b61361526 044a94c7e033bb86d44597ed39b1ad3b7bce8e10659cadbf9e07b3fb041c f1a8adc4b74c39306a8590d58d3636ed87299c47cc12a847120ca9f77182 606f86b724792908367255677d56495f22aa1275b2ffaf1cefda123a8984 c607d438cd7c00b769497b9af62194895c6c79819357264c7d0b4ce7a259 dd1696e773cd0722e28a5beafe26c7d04ad867886ac5d9d1f83dfe97f670 1c200007ce81859e8da06505468f25e77cbd0be59194700ec5b39c300018 1398248b39e650376b2fbd9750bb27457fb4cae1615d167b6ade44d5d4b9 b08492e7d2122af169ba8d1f201e0e8333769bf901862ad46ecc9d58b8f7 2b58fec61bdd691cc14aef8f5d7a34113f9b0d08eaa4fbbfd530b73c15f0 feef4c45a7c8c7b68e5310e093667282475da5db6765ff566069215bc09d d0a8e5186cc2c11e3577b56eb13aea6035d2dc3add1d137ae15f8f9aa9b5 0b64c7b7c1dfd5815bdbffacc75b84254804b8be1449b32f45ae3b774cb6 0f3a9ba3450e08a4432ff2527686e3cd04a7f035471bb4bddf4e4ed9309e 708be043539d298106cb4c6e78267b568221cf6458f5a2ee17ce08cba821 d9b872b5b985ee939c10a45db0cbb3a09432bdac2d10b73c29990fdade4a c161a5df44c1bc8d60dfcce175b9fca5fedc347fcf7a9c897b37857f7d8c b1e7af13f4586a23bfc9860b88a28b5cdda25b74b4bb2553e8ed796b0323 13e5c61ff414bb6eee4d9e5f3e8b4b7811d5809a2be4a609e39a0c8facbb ab96619a34df96aaf42ec5bb0f16c92e104b95250ce203aa9c062a409a04 089d02966f454b8fc5f0272ca0f472aa3bff2d55734f9e3e93c9ef83d7c3 0f53b334cc0ae1e8b0ca1cd4c74f5993cab7274fdcdfe86bdbbbf3ea762e 568d9379ddf41f095a5424337277f8e4f110bfdb6544bc603c6a153c2e13 084d333f6aadca51e7b45003d4459478b9510b48d708e12e30c7ae7e4a1f 1f872d31ee76df3204aec196b8365c8f3b6d3f386aa63a149e923c205d78 d7d4c1515782b961927de098c019c865d90c59a24bb2fe821538287cdb9a b703acb82892558b3b1321a31620ebe974dc1a12746a047a5ec793e57c09 1026e8cc0ed07cbf90cf19f792629e55a5a6b7d94e667c870153ca440a72 2f39401aaa9c3ae417e94e2116d97630c289ea43e026b51d0265d38a8488 5800099b144bf37188cfb3e59cd846871d524372a3acc721f9ba5659052c dc2b78f26192b057945495fd2456089c3df9c543a643f39dbc26d532c88a a4fa6936e7579cddc8df83138adaecb0b7096b520ac4d97cef76022200f9 6542100717c47cc0c59e48dc57f8028c453d8d4508ffcd5b3fff8f09a64d a18d08a5f91eb696f169758e35732216736f122192a765b5043a7187c473 0edb5e11c167dbc62fb78cc6d478c79d41645c2012a067a8c895d746c77f d106fe34c2c888020fdc90547dfaf6036027324bfad10157483a0dfa92d5 77102b892e9ad3ce666ce138f8f32d86cba1ed1f3dbd5b46a9b83d7ddeaa 57dc7de7ebd5cedc8804410f6df6dad36706754f0796db56e4f7fd86b603 d68d269004701f81310413a2f78d1e765329c26b37647bb0aae4aeb1d8a2 53bdac2da74790f5020cb9cc18373f145ced54c39a41ad08a31756366bed 27e1c358d61008ec2b666d348d50f3b6db72bc68740e8cab62e172aa9332 27ea0b2b6692ca80d5244e2700de3c5a23f36705efacc566eec594c0fdeb 319b05e48f25aa6b5cbf5f71343fee2932dddbf8bcfe62a38d8302d0d287 529dc0383e8efda45177beb4b1a09e3b6121db5f0a25dec3b8a16889b0d2 dac7ce9ee7339031b5dd48b2e217224cce666a5b218dfaedab6bb9dba36b 6b588ed0ed3804040785f8672ea17a6b2620f653d98e65876452caacebd4 f8d399e8581eea899c59e5f50832dcba0c17141c08a609f47047f33aa20b 815531d7dc90722a2622b03b7e82cf4cfc871f45f7b7f040bf20f2a0db10 0bf9f352233acb1050d142ba5be8a957f1b2af4f3e651b1ab3083f0c7fba cc934863d2845e5071fae1e3989ef2280c56a82f79eee05aa4ebdf6b61c2 5918d704d7f76d0c0d7dbc1b883f614f3544e025499c16967bc66dd59fc7 1efefd9bad3ec24945bc6fe1b58849a819bc544c60d4df10201b2be4b765 9d4c44bbc2bc310105b867c6e8237af12628536c7d4287e7cb3bfc60fdc8 446f310c6aad457f1b420aa61eda74926dc969d752d0b7cf6f36add88ac6 67bf4912a237184bc20d38fca2e50cf9698f9713fb1542759b21024109d0 6d5df512663444ec40b58d828722f0fa752854a4fa27f2e17a3d9d5b6676 96a8871cf2fcee25855233b670e78e401ea8046510a6cdb7f3492e8abc4d 23f5f1189ae5b15bb14307c2aabcde0b398bcdc8cb339ee3fa48bb2fc5b1 a636b30884b342c4d165ba0929eaa8d411f87ab8b36b50a51ba2305e6868 0f7a5b4bc8555052354a1da9a6fda6a2b37bb248237e7418216c388a2a6a 18f27888bd2d5715b26463b3bd2924a319981e687c15dd47e4ea71ebc87f d75c72453b7288c8c5780062b3182b0babb9ce6bd6ede56327d337ba1c3c 7f069932292d77eaa0b515d3ebe13b5bb70e17c6665863ac034feb834c55 d8cd1c078304871bf7d1a782a423b915f670a59cdb30ecc94d2a004f4fb3 9463a2815bcb1a96817b5d105a8d1ca1a81197a3a83cd64bb15cc9bf31cd 7d174d1ea78c95757a607a6d3ce4de004e840ffe790cb98f4000520da3aa 75e0c511567d8d0927e7b0c2cac2de17209481edae918d5d5a76ca6abf5f f352f11a3dec26db4ac6b7286ba45d4de5eddd3862ade7f6bc1374ff5623 fc2749ec4b5fd8e8dec48210511b49ff88aa67a7697a41b75578a6600354 ab3ff8df60ef834a06e0a88f6a9b5050e3dd3224b511797ef82bb0cc72a3 77298a714d0380ec24a66463e8d120ca66bdc4bff401718b89890a4c03e2 a34aad9949db6694aee7d63b32798124e54cdc35aa4ef8fdb748d2c68185 e4222dfcf0b03d3c121558438956292450e7bc60e00c36f3ba5a2558c153 b3a7b3e5b6789941f8c83f65b0e6bf7a626824b0e93008c9909b6d6c7210 f348c72584a67e862d8434840105b28113b5b51e8648e283aa62e60ce215 0467033bde24acb17606e1ed9c15f9d46439dd00cf5b20e8384da2baeec4 8d3cfb0763ff3783a005b9a4e7ec0bf36af1755ffb082c69f0e8f4807a29 87d7a38ce50e1b7fff3d6914dfe2b19ad4b8a4c3582ff4a4a383b15eb15f e5f36134b906b18f6b231eacf47abd1b52ab570ac964141997d84e8754ac b59de5bc277370ef2e203c661d32213b2620e911e5f02c4b2d99ef88271e 5c772ccd6c72487ddf5ade79c61f414c4c20bc55be8e887a577ddb0d8129 49ee3ee14468d2c5e6c2325d25c3a1790eb0dda0d88861a77fd043912065 f06e7292904d964bca5483959f6fd43702d7ef13e046fc674d8fdbf3b9f4 ad11d2b14c1f120ae522ae0b69b01eb1de89b3a794b5feb4d6464bd13802 dd617ab53aa8f1bb962452593456316cf6a9ad6a04c89330bda58ce2ad5b 30cb368fdc8e2b62845e117c965bf052eed29c02c43a88b04460445f3b2d 4935ce4d46f92c9949894661a92c241d088d26a74414400beff55c1ba2c0 ec680d05c5412e753a10566e7c8db2d2303db5161d5f33177105d6ba7cf4 8faccb3a4eaca923d5a123f2951fc37df94a861a70305464567469d54722 fb82a31fe18a65056cad43a872963de7b4085005db0be6978b0284e513a8 9887bad0d8f38bbaa572f6660c7cc52654c706f0b8e198296cc2c6ee6561 7b383a3f491d562746fcbd014db726a50d4f4410e64ed60f10d5e4f5889d 741ededad290c03b9d9ca995f49e260442e7307d7ccd36eacbd507601d66 aaeb232605601aa2b9905f6e7c59453f0e5d6ce8450b8adb3a372b40b765 0b7e81b0980f095209e8dab194014c299d659144afef2cdf5f12c05f3101 c73944d76e9ee2fd92906b25b62857b492b23a66ccff19080c55955fa167 b7aa7e13bf5fa873116695518341a70aa41844ef03c481c2a36f64161d72 5c150e869e280425996038477fc5a6db064b8d2fd9bed3119b8d93d19cfb e418b95d6483bbf8d3047cb788e3b5d3eb2e220eec7b48367a916df77264 59bb90464c6096029d2f781d30502889ac2c9344b8fa45ecfb1f5099551f 3c6dec6357580727e277747e62b757d0ac7232b7dccaa2fd8b20379d1645 799a691c64d47cfc9531451deab72664558a2ae06d90e45e537dbfa1b8f7 f14ff7619310fd5365036abf9f29492eeaa418e1cc87e53ff3e982b9976d adc5f23461dc54d13864bc8bf5fe0e9752870a399d7a9ab81587705ae019 01a66b4d89b39511ea03e144f56ecb2fac87a5337e8fbdc2cc7d53b62edd 53d3cd77f8d8a3be417809c7e27900d1fc4bfc89d3e2185816ba2824bbb0 5de4f0e5781c29ea8262e689c525bb73e7448252fb8573e01b855590bf4a baa076adee94fe895a2c51e57e54bc13f6e3a38d6139711165f5a9e30454 7dd0d41d9304739c4ddec27c07c74c4aa03cedabfe7564b14a65acdabc7c 9862b13e58004b27c0e489fe7ec5ea6d0dfce31c1b500680607372bed66a e33db1ae66a215ef573b52dd07299db401eed536ee4b0b587b910ccc3d51 72b4ac15489098a6ecbdcbeff2c968d26edc339acdfb7c30e4b13e9b5362 40264bcc2a34a2eabd641c9e9aed706f266c491b6ac618c022b23fdf20e5 809f5caf0198876ba92b577b128f81d80affc4b6aa9b8ca747b7832e510f 404cbeb63939b5d8a77f3d7da7f23fb276d5500959a394a2a854da1a361b 8e40d1a0f41fc67d51340d687c2bebcda5bba418694cc392301e28e3c2c2 3e07aeaaf44970e0db8f2e44e67f9f372aff67f735b1df1a228be4dfd3eb c0922df5bece2cb1bc8e784331aa2d405f472bb9edb41b80c784f5a7a7f3 bbda8568b7b2eacba10cfa5728f5a6609ac2a590b74883160cb1f12d1dd3 6e0b54ce388c5c8f3034f885a29979599fe6d59e93739ff98b2eac79785f f9564224d6b454fcc2084320d28c900302379475b911dfd9951b075e4f14 2686a37a437aef3e158140df71353e0f932546ff92b9fbb7c44db1537060 e94a421164e814de32d1f3d408d4345626b8bee38896ff335046aa293185 49ccc78b7ecb2d17d6fc255b69c92781f9a561ddd8bde09f04c4374c0225 7c98e24e2ee407741a8f02b86022d9dcc449b730960fcf1b9b8d65af9e0f 10af8edf7bd3f1cdaa9d5e150416b6334089dc862e3fde6633fad940bf88 5c976185ad5667991e75a2593038fc8c5edac82f06c213b0da990c702244 9b767a619bbee9c29e65d9ca53ce96016d0cd40aaa188aa7c60bce101426 5efd9206ddabb6c0abbe54f1890c4045485d1d4fa003874b1052147cd269 552b663460931b5ef7824cecb7d7b85f6664a7bfec448a7e591daf6891f8 f8b0c5f8c824d506072c9ef683bc85be1e7f4e240ee40bb1e23d4e8f6f8a 31f464f1a5d13989456404ff3a50cde14956db3b24e06af7bdb5527a000f 2a853e9535914d4624cd39ea90a4efdcacae7811370c81309ef360021d0c 79f656bfd42ceef8f2a7ac6f6647482444f58787706be9c7ab844428aabb 6679e4b89827af8cf9550093b0f7ea78a53ca24b8c896709ae2213308520 2c5b5c3e4933092b6c5a2d4ef88cd24697294cd74a7a30571e143277708f 540f4cee7dd8540ac16ec5f4ded4d43dce5f238d2b607d7728a37a4cd110 879325f583c1b370d16ebfba95806ab62bf0fe931ca58e68fc101057cce1 be648ba99d6af6f4f288a81a3e75c2263dc32aab93d4ed052cd9f97f2dd9 127dd32f895a7e760b6c04bca804ec286c31d58850acb783e4227e8fe6a5 5eb50f6bb9aaa25fe46421169a1088c3a60c3f8391ac822c57a4d83f018e d339d5a7f91b2a47c951eea90a736803932641837100c5cd4cb6ceffdf15 7a9835855f53d8bfe1e54a9854d8f7584ed4e97730635497604a9df15642 bb7bbe854c871575556f0bfb3ccf3c8a7ef1aeaff371875ad23014e0e5cf a1d1ecce5ac42bb72ff463333cefb2377be4cd71cc06547dce74827a60bb 3d2c920d918f65b0f4ed436c3a39987965203499728d7f0ba4a3de62b38a 2168914b279c9455959c51f2dc490581312d26f39113e42cfc81787cd39e d884198675298c9970ce6b07a439ae17d346f1a1c4c5417f00d3a285f59b 08be23018072608e8d2103dd6eb5282535246c78c06abee28e8981682319 6f6da9f6d1552ebad2a28633acf3f26b86de651f5a3534923bf54758f394 46fd8c960bc108ff9020c88ad0bf94f24f8c444961bf1742dedf34839a4e 869651294c8c9a8383291a5b460416a6c30fc8b26d74744d3b0699bc7d7d f9af19e6c297032ed61cd9be041d42e1a85272d981176a8d3d028346d2b3 fd6cf3bfeb759a76149f3c83a372b16aa17d8d13275351901e55bef3477d d1440ed8509a565cfe0b4b5d83253a7382b9ea5baed8303b7ab5215a4cd3 acbbd28a3fc24fd8e6eb59003e083c55bab0ace88797a6174208d9adbe6e e313712a611bdddf09fa5d05b9ab89ad94681b536ec836f330dae407625f 5f7fe3edff500507cd28d86d0f7477ecbbd1085c83a849e50aec49759c5c 193a79b8b1e03e808347eac949ce187fa816f69e6ede6eb795f910dbfc5d 85c9f581621b5b7ea982abbf59e7e01eb665695355486d46a3222dccf79e fa05254209034eabb0147bc5e21dbb361296aeb014e2a6247166d27e5643 bfc06ac4b138c0bbdd0aedd15c468eaef74324651aca67c0f7be421226db 7fbf04b2baedaf2fe6752f13d9df1f5e306e539451de6d708e58328d19b8 24e8ef308d3044f8552b5ba5b31eb1faed15dc9a99f0d46e5130b5e63d77 c63d407d277491fb9da2671d24e5cdc15a38b267231914223ffb455f7df8 bb21f965438c3747b7c1f04f8c5a9f7dabe1ea430514733338232567c4a1 234aa8af98e445e267d39af70e9eb8c2a660a2153cce33abe475b3a894e2 3c31fb10c0f0ab994c689b5fdc2b6d07a70f9af7fb4ff8b3e34c5f1de296 8969f1bd834bab5a2626f1f25b196927c680b9438f795e4f1f31c41eabf1 ede62ebc46ba5246d086acd10d32492a129eed911a18a4b3df792a4dbfc8 e44fbc6b71d7dcd6de9156f2030928c7d7c1584ff4f534f221377d8b2e74 df80cb2abdcc685734ab8466efb981a361dfdd859ca67301840f76491f21 c63dd556d47b513aa6bf56dc427ca6cac22809671af909f87c2748bee4c7 ac4dba40239094306f2b40e28dcdbf90cfb22e127cd5f27c1d543ca0c549 963e94d95ca07ff0fa6d1f4afdfeea5289e7a33ab1a3eeaed32bbc576df1 d587aa9c24af350ee5349f1e1ef906adfcddeb97a8af555619b45a8b7c71 420ace89fade1f980797909257083e26232c0cfe0d387e18d4d4d10022a0 01bf7a265012715b0d9cac530d6d6edf2591fecd9ebb19ea15a931f5814c 6e83d63e36cc36521960fbfe697685556376661e354dfecfd153fc87b601 bacd03b1ca8537cc788c4627a47301175aba9d24a606fa5915967e0c47b1 23a5a6552e8f0bfd748ea73f22fe5b5de2efc0251da7d2917c60cdedcaec 63e34d2d16bc177a9e3b2e9be7f25663de708b7492eb9daa0e9c7a7a8c51 17461471a3f8a9d704fdfc6848956f6033e98006d0fb5331453edc8d3854 143ca54940dd26db56c904839af1ce8f7fb2970308a4d16974163c8c86e0 a2b3b5eeaa1f4eab594577b76cf35a1dda9469eb319c2668ba7c57b4ec7b 80c413a384127ba4b9291826d4815a63d987657f9ea870c763cc23cb7401 03ff300a50bbbb30c29a8df5b081d3efd3d8cf64126ba36084fa7cef3f4d 5d4f2d8b26011f854c37774770a6c34ffd0086a50d6b61cec6e25ed85c36 776ad1d522f0069c6f6fb120f3191b0f4a06c0ba50c29a4283c7d876233e 23c1efa55760ca46491b69a30c8e638279a4385b3359ceb5bc4a616a3e1e cebee2ab4279c5ccb2aa5b7576d0777215217cac3f16db73fb1526c4c95b db662448cff24b480b224834f8b2b3e49e42e7b668d95428621411653b40 6bffbd7cd5feaebe10dade204c86bfd3a3c00c12ab790a59d9e47e7798e5 8071ddbbb583e2c96c27876dfd40f6ad8e0821267e4f0a574d8e5e684c9a 45a70f999e3ede8b00c1506b5ef0001c28334aefd1f6309cf290ef58fb07 5379da9fc609c31b1fd0bd33dfae5de4a704e02886a3fda22c0554bde2c7 1f65880362badfea1471b54c064b2dde0361b586b9071554d77e5c45d704 ae13f654a34a9d34c198ce8f56be3f99d3c6a3cda12a6f488baac8ff82b7 ce2b2a341a1eb6d321fce0a1feefb4c1a124a9123f6280db7efef0434fdd 9c1f570c3d1f70855c166b76fcdf37237ec06df0ba289710b1a1467142a3 22ca1412c96b41beb0003b12f6423fa92a4460259bada3702c21e2bb799e 703eac3e7875f673afc8a75293ea9da16f1f87465a8f0984e4457e967ba7 c5d265f2d997eefc517e2766382144673162d6f937bc6d075a79e8f54723 9bd8a42e80a4657c0c927d3e7a71cdb8d49534ce254c1f0b161c6f498766 d11b7e40bb4700ec8ec6f6282535c78ace3fde539ff76d85440cacfe0702 265163de0fed12f3ccd1d5fd5d5404292c5137f389da4e05b751c32197dc 6dfe5ccb4d8016dda6c924815d6d80fdbfd04e1357922ae931293a92559e 6122e0f9a1ab493a4f82ac6290f420c18d24287fec4cd41c226cc06f0512 12fe8e4e33f3e9d53d37e0fc7819ce859f2963e2bebcc47aef3b877df83a d2e7a1e3bec754079ed7f330f684dc53cd2389fea725d1002530f55c4d72 ae385b6e836a38d306e764ea1cc46ca00b06c4a901bdd45cd76e45dc6f7c cc02cee158eae31970bbedc31dabd5fb0dc2e51ff855e53143c726106f38 084affef8cec7ead3de194dcffaf7758390a21ae63bbfcb18c4db3913843 5492781247e29fe2089af2c6cc99fad2af2000f0c1f4b5944e15cc402f99 d7e9eaee03f5a96d4198bdd3dc5140b3abd0b5300db7b40d1a3986d7abdf b59934d7dd00ea54c9867805ba6a29f60efd9873d7ad8ff52399daf45311 c6ddbd2963b3dbe5ade0260209f9fc81ea3a88b4024cb17fb8bcf05e6906 fd95fbc50439daacb2866759e8c8212d0e67a7eb4aadd6bc5d94f8e97f67 05730c3cd2bbd303d6c1714c7ba641eada96dd89cb6fe1d655f4b67354a1 708ff15bc6a45245d57695cd52377e7fd3e38f94a9c4da0a7a921b3a687c 5ee8d0bd2b725c95e8dcb582f79ea5d5a728c6691ea47950614c78c4c377 19defbc6e50bad8165f1ed0dcc0208afd12365e70948d44b14f91bf90cfd e82296c021aa112364369457567bf58497ece9a36f4058c8eb1713969274 d29816680623704d034eaf900c52e04975556b58c3ea63e5447c1974248d 713988c58d1b666321d535be0c5f90e061a2a2f7c36c1e058fb2c01f4d76 7538a6e41ecae22854b83a77101bf865d6dd442f89cfcace8cbda39321ef bc2b79da45fbb39f2d448b03757310283bfb73b97eeb5d160dc002d178eb 3868a293be770fe4b63c014c1b0bbfdf1af1913cd5480d96d09080225183 38f18ae7c3961e1d87cba5b6a4254d225a2c9caf5d976f1764a14276eab0 ff47688a5940c300851424ea934cd53c59869dec2ed89139fed0a1e44037 9059968726cf1c380890796b0e598e5b1e3fe5998a63224905cb8dbe7d95 5ee9e9759e0d8195239a359e8e4da5c783ea2d19d0794692f0d59bf50905 73f7cbdc635429f853f55b75bde37dfb5c1d5642b58f5873d079be65d004 7b01296394aacd4c4ce242d3c0c37427765a7b1cbbe19f4f9153703613bb cc8aa6e1c616df576ff5153c1ebcf9f5d202f42c628e70137837e3a33883 e9fa8f0476e5414cf337650d94b533aa2cb45b7c473f90aa1824c69a2120 5db7f301e8d2d6652685db61513cc3ad11c44900084623958d419f0752c6 7d881df7d20300748f0f53e410d534664c6d13b4c96b49cb991ac1eda4f4 25ad27510d96fe350b9168a536ae9ec6c50be8de32e2ee7fe9f2db8eeca5 db7a80ceedc96d5a0b96f91930dbc00d2cc75069f1590c81d75bb6f7e6aa 720307776f25867fb62e78cdfbaa13eba1fe184efed5f7091c4fa08baca0 86bff83086334332b8a75892a5bdc514b75118222bc71b8f8fdacf984edd d3be4ccd556cc8f30f6a80c2b20c167f577eeee593323e2207694732587a 0e5b016b6ade30be2887b8ed026d2df4c539d1a0308b0b09770be61ddba0 fb20926f07399ae6c9c937401e1e160d0375a89e870917de3cf496597d22 a8ac67138d4313507841ae24ba2c0cf8fc1efc1ac5b8bb51ef6b50b34086 2017759ee174b4bcca9087f5c463198407f41df40eadbfbdd7d73759cc41 a9a43c50b1a0f17deafe0fa93669cb5b11a17bc07667c357b4a22b638592 b721fbf505d8de6c7d69496752cff0317194a3eba37f42627126fa395596 f5c0585cd5e6964a1ef53ca1b8d886f29df91782cb4201f873a7f93a479f c62ef2013e503bea26d1edbed3ff450c9ad21fc04f4f69f6717ed89e0ef9 67620edb859bb0d7efa3b0ed2ba5e4d5ba200e51d987b0502ca4b21f6efe c5d2f471684fae7130eae3e4ed9006ee5cb14e6b9883622872b1be55e09b e1e49f3bb6bf07630c58c59856f23d1f60d44589e7c959210719f7e920fa 067ad3433fdd490f28c9048cd9fa4aa43d134e3058137a09184ee4ff4412 cfc204ff4a9975b96af8be17031ffe148304af1c4e012d72fa65baaa96ee 579ab548ec22d8a40e8fcb2c2efab52984c707730953f866bffc31a81e40 427dcec529a3be22f7772e26ec0fbc26ebc4a3b561ef75e92c777684ea7b 38d33d99d8f7ce4ebbe1ef36cec712605921e0cc42210f738b72b8b06e2c 699d6a786379a2fecea0799175569fe77600fd3fa661f5e9d8e62604f59c 3318cf53e2fafd68fce5448f2f04c3a55b84aee7f2bb12953004aa3b68f8 12ce7f25cf2f8a0902d38d735a0b9efc4752aa3fe822223a72272763d649 6a4e82634b8d5d666c22c8f36d3fa25cb49cd8cb57a6ac7b48d697905780 1e5de91b50dd5fad9999997b63863b73bb9694598dbfe25705b1dd466891 0955a5e6128769448d35dc0ed21fb4c017d10cdcd5d24b386c41e2d06f3e 3c105edadefda6a5ff6e101613be39ba5ef511793e96a5aaecd41ee1bf4b 85a144e147edecc36dfdec820c54bc5ae17b138bfff4a30b5d10b30763cd 944935bf7d3ec0ae8396f1bdf068b51951d2a7deacaade053d0a3c6a3508 1f20c1baf4b76838f98b157d9ccd9ffa669302e92886340a8e0032144968 a3201ec7d3c87d8e5545992b082252acf496eb3eaec509d27d326d5562c6 862a03829660ae967eca18eb4bfe04191ddba3e03fb6dbab09ecc01c66a4 4bfa077433a048b741d98a04f7ea5e7d3104e4d6b1b42cf38f5f4821eb67 32c6def7e2b067c9ee2cb4ac023ca4c329d381a1a7511ecc33b4bb4bd326 7391ba5e4a88d84829c541382d4ec4eee3a4683f7c0bad3f219a3ab5d0f5 a7dc3be313ddd434255d12990a7629c712a55b732ec7651b5fa61fbc6c35 e3f2b7e2c3b62b72c83c67397413d88ae67393e2d8c77eda593f19fbd9a2 5f69ee9883e02ae7e66dec74f7ec9920252281a580374e478beb58118cc5 a11c1c20adc018d0706aa360cabb190d3a9a7dce6ee8c68da7a784358791 850015a3241691dc125436a8c0cb959356f0c32b4ceafe39fc111e6299db 8068bdd8564b1200a62c15856dd8804da7ecf34f7d135cf45614a243cd34 b4e8531da69a62538e6724ad4e3f7a1e2b2c71e77fc686738a4f1d2f51f9 770684fa270a94ceee7c5d5804ca49220a463e7df0a63aace3a2c73f0940 9d002d83115af1347b9909d08c0d547b6643466d119f4296094f4cef0a10 0eb23cbd1cdc7cf6e8bf2363a042c64d8234beb4bbdd329d620c99a65c56 04277780c343b51f842908ef1e66b125b65387885bc152b50566da9c8b71 ce360f7d724821c5a06f98b3d5408c01217e483d2d40063bd2be7c447fbe b398e050e608d2dbfc8ae8b7516d56a85785a6a63ba1d559976e8c699938 631b10b5e314493a46edd7df429a7f7529101e32c57f08bba5bb6e980651 0cc39e14ce46ddb626fd4a5b0e89444409b42334e7d6a587836d1cb0c096 293b0dcfec87d73dc4e9f90ddc2c312a021af05b95f32bdc4b9616fb6db1 44d76a2a29e8cde277a703362088a76db6413c840661b3aae45ee5623158 6c21f8ffe87c30c2f00b6b95537094973f54a5c15375e6549fe45e2e020b 6fc5f624e8c3a9b30d73d0a397e5a32de1920a15997b220276ba3b9d7019 255a884555b77bc27c1241af0af4d61d6c8a4ecdbb158d86e21eede3cc6b 28900b71ac5c945e596c9a8546ab01125f8ab5fb17c9ccf75a8a334aabd7 705a2df1165c97c17ed678a1aa40fde4f4a62b503099727fef5afc32807c 051866ca6f27ac4729ac0191edf00281a914846ea08526ec0d6973012851 e87530591b168b6cd69b0f44a45088ee2ced5d53e05e1ba563351c992222 f23a58a26be2dcec43ce16e281f79184fda1c9e406044127091d5728d7d4 0d6906e0f528e12d8f82a6b175e39bbab45a9653b2b4bbe4681da493b3c1 6a20e5647686be5b07e7f41049a2644befe28a100e4ff5ee34105f736e21 6fe3e81a1e7d2ab8ad823bd537c4b6c2bd9ee406167117c8b3afd2caaa36 595fe353af33d30606db992f4dcc8c74e1c1b5ea0eb4722f6c9d0ab7aa4e 44e61d64ea9cc3ef637aae540d2d0ac7d9cb2dabb1a3be34633601a52d20 6db35f74f1481a54cdeef2ff63bb310283619dcd7b2d52087cfe957b931e 7926efb5c47bed864f5dd8e7e5583ad66b34ee5133dfd7b88c9655f196d4 d5c2d06f478c895c46a27f1ef802f5126477fa407f80d4d2cb55119b8cd8 72272f0ae88ec5c315aa469e37cb7af969d8886851426ae3e6ed5bc44813 5fcc58282fb238672563a96f20c2d38d6b6e431af706efe5944f675cd169 9ecc46444589b0b4ab41c5387b1ae844399ccbafe4cd7772d97448eaa402 cbdf9f7df550aab54d47e2f67d75f2c364318fad9d08e47d1538c7af06d6 01f0c31ca9295849f809e6ea17a113883b5e192ba7eb3f9a0c6b55159e67 c0c085fe7ce9cdee489fbca0662d2ff1a6d55f8a1ee87d0cac3b46bb4f8f b58dfb2cf046f530732af1cb20ebbda80adbb95dff7ec28b57355ffdd42b aa7bb36b277e6c76f1b1da390c3788e42fddd3931785626db52e9406d887 adcceec2ac6ee736bcf3454a8b510718fd0f429a3e06dc3ec9de047bd9e6 0186657b1252647cbf3725767b143ff9bdc0a7b58ada9d94745e75b04cbc dd755e2c1e26b0d6f8a723a04e04bac494b36591aea5c8c7a8388fb83e24 6f983f509a0e9117da0bd21078c3bff245b5e478a2b7331e4f3cbddef0d2 0020081187c2c9dd0a591a380bf3f6956d7b8d65dc13a2d586da84713ae5 5b745853aa09b3f3b53de393c03d4c8fddd829d8409c41e967b65a00690f 9528cb18b3fb94b559c86a820f1792e58bbc45aedc02ebbfa0840c8e7298 1ecca6988b7beb9312e863064b58618eb1cff26b4ddb52a56ac4c364e30e fc20211d6f102622a5378cff950b1b38b8852423ebae51a605487551e4ce 99484df76277917bee1933a1226fa1026b6d7457bd36928079c5fc2bcc28 aec99667d1018da53c906f22b71c52c9ee3dc4e72439155717a6d44510ca 2ba6144601bfa675c5253a4443e18350c6b7a9bc074e8ac973e4b619562a 43a13be8d31e34af31da70cf8bc39909ab80c03e0dc7e8425b1fdfba898e 352aaa0a1c4c38c711b3c3ac60a7725e958c0974908fa30d06200bfb840b 9089e9caba0f3d9b00232516adcf252ea6b73c178e6258eb6a450d29be8c f6f66e21d5309f0b75b49fe6abab4ab07e48ddf778e4fbe197481246d680 e9667c7dd1e420257db762dffe7876f6f8e305d668cf4456b9a0b8ecc6e0 1ff973144f5527a1e6065d2f6797fc3accb88e5e52dde221464fd77823ce f7a0592a408cc0eb37725bb339eea0f792105788b2ff981484d6948d15ba 51efe3eac600c402b6ace16d145f96ee75324a69a77cf8dc43267a56cbdf a156903d2392393a8f12f33ef33f9b9aa7a9d95adf7f2368a34d2c47bacc 93b2a3a90a1260fc3a334218bfeccded1d7f4182ccaa9879f6e006f2fb70 20e1d1915d4fb12cf20695075276d27ece002865faf6061edb14d15bb434 e07197a4a142ea659c24098088be777eafbbe50f2902c12f6fa8fdb57ce4 852442bfe16a25a3ae9a1bf32486cc0448532f53f82179ebcf0fdcd7eb36 ea8b7abcbd95a6e67aee38823dc6323862294473982eeef3fb3eb510183a 7e17e3f87b012c485eb8eb8760007bbd1deaec08106cdab59032ce18aa0e 81efbe09c87a9dfa03e6764fbbae08e72021aa9aea46a48040ea48e66a02 86747dc4636f680606aaf29bcc51943fb09b805caf1534a65be267b94f14 89ad6e8101b9101bedbaca870fc959ce28a2f84e02a88471eeb503d306b1 1ffcd998ca3e4391c188f6d2c7cc6e82475aa5c375d2d1582f98fba2168c 4bf25dc8e2ab69a52fa5114b519d1599fcdf521bb4008acdc91c6164cf3f e4cb77b79ec74b62053e5d546ce1fcfc380e3c0cadcfd0120b5e6c359fdc 2a4189d6954ec7d35510eb09d5d305c96e482431505c91734b965d773e9e 37797951ce86d4e2db76075774bc94da133540d566470e678d8e92cbc97f 567c8e3da28f9e720c807d92475ea4b5a8b08a7b4ea42e77a979b0380eb9 d168735406795ce1470a0eb315e9945afc15e8005a27304799434b75b606 6d051e712b9b92d82ab3fb8907c5cadb75eb597330fa7eedd1645270a80c 602a2aeea063a0af3054d28cab345e25c6171da1f0600a4b7bb1fd40e4ae eaac89416009e991b9c549ce3d9e28fa3c611a79a74592a4f48e5d51ca4b b19415e2031e6d3f5b6279ba838d9c82ed40326aa42d67a89f5555cfd429 9d5d99131ce2bedb3c449989214adadd8989c4905e22475bdbb813e7eef4 794878a7a538d1e0f831d75e7654b981cae483b8c90f5eb8548f76684796 ed8ecf0141d598d029de8aa959f9218a862a10cab525ff8dfe060d197450 965dd3990f96833e583302f20235ab7c04d94d0646b1ee4b2858cf9797a2 83a9f0b2c9b3695faf00845d7da408f5cd55734ad74d160e97432d3d0598 1478ed7361754488a5cc4e3f7ae1a373fc2bb30320aeb8baf42864ed7fcb 4022afa9082a7f0d407b17a7d35e4f7e770b7ffc03ff4091ee9a9d4fef2e 8c745f32358d89f02782b2e50b265c68455c71282b980c51fec4fa7e85ad 61909862295cd90f0ca7efc0833d9e70361f69a83a5325cae0132c90076e fb416fda2645f347f9e29f7e3b200980dc3213bebc6ffd5c459b8cadd0ee 530340f8347db627c7a06e682047a84c364d074a330fa91aa3203b1ec8f8 a96cc9c50b36bf7516b8b3dfb6fcfe504ffb37422a5d2baf01ce5297c38b 0bc1a7ec3e3570c1dec08aec7991ba2c8907d20972278d2edb052e40efff 9538cfaa17fca6a50c22cde6a29c3add743a7200a4d8997624e1f7732c81 3546f4bff9f01c5a9404e86a2b18f7b6759b2878aa4f8a8ff55b36a471be 7f05d5884aa0bf088b87665901ccf35e8ccdce86811c5c4e4f55ca26ce2f 10b667dfd50e6063e9914d8340d9533bc0ccc8ebce39f45d3e442eea4a99 a73e5b54e88969d9d7ef02298c40f600bba274a911cf19532cd01447f05d 1e424ce654458661d98d4cdc1a747224e90e609c3faf44bb29cbdd1e9a97 5b475e25ef46447f43809ba72292540cf81de6cc751aa965142705082524 6291840e4f1a9c6a452bda7ce29d9ef68d0007e7217dfda8cccb40053081 c4e912ab4a7bc5642f898567fc1604c95f35d8852b7fe5f87caaf247623e b6aa53342d231a5047d82dcd33c96b9197b5a41d82acf553f3186fab015e 9fb21c681ac874d236c9382f13fe672ddee53309b5a46a9eff196b426e21 ddd39784aca3f8b90588ac9b04b993533483acb6e3125a5d8e95650b858d 4dd01704388890b26f1e707cc1178f545dc4a3cdf21a9730d3e6d29b6000 66310e49be5018136fbabcb028799b74f7f15c47afbe30e14bc413352450 b3fc874184c5e128032918845b039bf2dfe29ba87a2f25a61e6bef64f2d0 64b1cd13dca3d385443df6d66ddbcbf9ad9774abfdffc05f1227159b8acc 8daf7cc7713e7f763ac899b066683a3fd14ed9c78e1815fe88a7926a8d3b e34481b91febb4c2af569e870da8f964a78b462a52c9a971cff4560a9a46 2f95d49f759772ef75cc1469fcc61c9ddd6c90e68273e1b02493bf38ff9c 114d75e7b84925249861275e2508856a86df8e23f590f2e5a1d2fb10db73 ffa35dddbf1abb002c937ba96effcb828c7bad6eba66ae9337ac5210378c 3447d9b358a6c449ca1ca82712c422173893b9605a3f1faa92946eda7fb2 b8dd8ed5f4e5c60efcdf38a92739e16ce182ff777729514b353265ce21fb b4871033830431ee72422084a67dea902e0eef97ddf955925113eff9548c 9f956325a1ef9dc75d0570f42ad14f7dbd09b2578332bc70b0ee8a675d8c 00e2457576aa2a28d82686773ccc7c89423caa6411fa59ffe01e04f04b97 b322081105bdaa7e09ff85f9e7cf33756d4a7e2542950ce2ae3acaa62c5b 4f1072462370676c25c413b1388890cbf64cc9e21a5844e30791e9cf854d bf6dc8952f6a629ec08cec95dc9fa1eb166a50d13503cc94b4d9be0fa1f9 0d8c914f83fe726806be5492837abd211c18f82ee4edf985e12df873d90b 50d46f1bde2eba9d1823b48e8c67f8e3452600466be39c9b0ab5ea55a9b6 d513b025e199ceb3d3eed9f7b12d4816c1376180f5e3527b326cf112d138 bc925c67b4079832dc086e2c539de03f72fab6f09c92b8e8accf2ed76a5f 055241c205f112686449494de69d6dd01300269b1b054456703c2e82d839 0bc7d46b87c2f02e65ae4a1d4748bf0f01cde328bd0befbd31c3bf30ca09 fb3c18524bc7f61cf2e97cec85045bf8ea9609f3644ee77ef01bf5f3d8dc 1e7ff01370c4d007fcd06e7b0b0d1fa190784e9c5e4c93324cf4fe5eed78 11962ad08a13ef0fd2990737fe01cda020105153609116ce605674d0470b 438d73f3dd61f3b0059f71a291f32cf463c30ae38c20d2f4cd52bf2fded7 4c59f19d7cdb97a0dbfcd13877ae4023cf7ff1db8d7655fde46f3aabf95f 5c4a3050c3f9c35635925f06e820e35899839043fa416b4fc284ec3e6dcf d8b305666b93a072e263d0d2b1dd85593a6742019b9aaa989b7307afbdfe eeb6e1c2429668c177aaa0aa2f4e27495b18188eb77b93f37348e5e9f1c3 de961b5b67b109305d84b1178d35769af4ab928c2ff5773fa7bd00ec7435 87da5c4cbc19bd3cbc4f7c15460213c9103bf7e1bcfd8f3899422f83461f 7a8c0b9d111f64661955f4bdba28783409f6cf5d54f8c6218e0797a03470 2068423a4bfc1b19d0be336d990044f084466a2b2d4198476eecd1309e2c 30e33e8db6202fd31c1484f531056816cd25b80c4b6ed9b1ffde608ddd16 84450eaaf45d813caaf938e4ddf3ede924a22c8014a2633155d90ee23acd 02ccd37f0e991080180191079eb3303ec6c685685debe2ed67efd2461abd 702402a4277fd06381f9165b872f3c77a8468413a5a2dd02a61fcde44538 376f3f6d3cf72d11fbdba81c400f83e7ea6f4386911b3874557af334c774 0a070d3c19767476ef21dbd9ca66b74672371a6541a9f3f30ca4dc3afabc ee30997fe15ea3000f497b4456d219f8492ccdff2b0a8f7b6c865cb890fc 075f715f82b6fb531cbc68d344cae08ec83ed8773be6d2632b239763e463 2307b3207859b2bb1ca39d13bc2763d127339ef4ae22e91adb9cb0b6c614 7ceea07996afaafa19e0bfdfdf9eb0ac43f73d80af7245d80c5b03047e4e 0560fcb832ee1f8ef02d4054e72879a3fd64feebfcad750abc6575585ad5 9d7a21681ee427052ab95ccb1283d2f750bdcfcaf1e66e69c9900514126b 90abc69efe5c976166b8c4c0e18f94ccb014a303c61b80298c661a6642f3 af81766e7dc6d699a7780f93a538863349dff728a0557f30f95cc2b313df c4c8f12e2a94c9e3f324be1b98142b106f190e30783b0858aa51e9ca230d d649883b6f7c2a8dbae39908b34b60a67b147350bf8ae770619f34f9c604 c70086c8aee426ce5a92fa9227fb52ba82fb17cfad27eeb2b5efd0c706f1 462d012447ae3f6837311283d7abc3e866fc68957d3cb4f86175c924218a a95f7593c4277a7d0938869c2e07f10446f2d45ea9a2849721de54105611 b086988dbd56ff72e85c4d01addbaac1b053f9a47dda22ddc6f01ec98df4 0c74743f59d149eb35b71e55e74b5babd36c0e4a24ef5afdb7dd3823d725 e294986a66bd545ccecc5010f8a6ef2eb6047a74e68cf2623b6ce84e6a0b 37933fd249991b018b0b6217975032700c81aae0722f5d915654cb9991c8 0a61625b3742e76c692a042ae42fb7f4ed355f6c3fcffd2acc794de9e08e 9dbbd39559620d2819a23e85f7498f0076b6230b7f93de99264428ade3ff 3272bacfd3b52ffd92280e1d1937971e7243eff8038483de1ac2cc000fb3 94315c35da446f098ce72e8a3f892a71514426abbe6baef9eced76ff16bf b30e8647f0e6ca67a987353c5f8848e036b54999b10d6c7899809ffc6611 76892d7ffd143dc1b0978ad2e6816fcc5edefe51b609f1364a691cd8807b 4e96348e9842ee5c2457e266318d5362d78c17b303d4cda2f8dc91715f0d de5b76c38636605a1a15d1be95d9f23f12fab5e480ded3fed2594a53f852 1b022aff4c1ab2b44b1fbb6c00286c69375e9e0be730676687ff60d6f2f5 6f8a75395e15ce545a0a1e5fb68dcc2ddb647fe9db6169af984829859bc4 2273a34a6806b81d7ca4ded3922cb3e90d9c699d576904132d84c69ef793 097bc90c59a103249ac49fea69300402e5db75b1d6e36ede739d91bc6d83 042db4ecaf5e68e78bfe009a6a6549bfb7d538fa5ac80e27163680d951a4 8aa5420935d71b66244bbdf4b265869761c7aed028429823f530138cf17e 851fd33eefcf1cb7e3a55798f149595f946dae333f37ab8cea8846ab80b0 fd354404b5e5eac4cfe7e6c3e7a66311aa8d8b94e8c59a1e0ce7e3495b17 6f8ee8ed14c1e033fede44f86b1a3017b820d60d76de408b6b01041c49b6 9c715c484aa6add4dc3147ec63e3172bfc2380535e2639d41537b053a880 e99de5c5bdd8c9672a2c384ea8604454b6056492cc866c2fe2f1f9556930 edff9c6db7f08d70addf50b736c927fcbe4397a572d9aea57a07c4dd6a7e a02402fbf21d7281fdecd10faa6cc51965fa70cbd682834227e45cffd154 99aa79774c99c0aa9a3141a222e4db99fc4a91e54980ec9c2b10ba3dde47 3c402dd71dc879782a29c0f75c1b954c8fecd5c181cfcc5bacb3edc38b71 ac74f098fa0a1f0003297ac9209e4ffdde948f0a2350cc846eac61707b07 871590855e555d395efb168a4011c969ae12f90dc87a38e5449fd300f611 1a50af202f1d5ad3a62c71cbf636d82c27c35cb4f703e7773ca334b5c7bc 6a95cadadcb55e9ce68d716bd77083855d0b2a672a29249740977b7d848a 34ad833a1d9ddd4bd81e7b118a62e30da770bd8b2eec33ad1994a581c836 ec81f99243a9ab233b9e2a0f1b10623797600b82cd0569a2da414ab651c8 d6f47c0a81959886555a46204d74cbe4f27de08a4211ad764b9a330e5b6f ecc9482c391ae086e7544ebf566ba40ef67a6ab4526ddfa4cb98733cca0a 589903e2b5d7b82364b5714d7b70e3d94eee6bc2786653cf6591f9feb6a6 d29b3892f33014f2b0227706136b31ec68ac6cd68d556023c8054d8f0863 32df1ff38c028101ed2db0b41b610640cb59921ba2e251bf8d6bdb3c8eac 81892c19e354f74eae8ce11d62ae12dc2a3ea97551467907d10381e4df58 47ffd1046ee994902a4c425ba917f8704ca654cbe93bd04c68b40cf79109 dd2bb3720404239f5a76119b63b397252fc6ac606fdcb408bfba0031ccd2 0ad3e6467a09fe11788d91e0805912389fe2689cbca103e7d10bd3784540 7965f250afde72323921fccb7bdb1196d81fd49f3e99a875e301e683a37a 9a9d95762613561f41ba1c5b7c64362a508a177247ebcd63b618577d252c b442801c379ff346236f4d41a83a1adc16274ffaa4b2f95344116e710b11 9f0f0a1d66f84d0fc97c6060f94ad6e72c4b821d6d7810a24ab2eb94db25 e4cde3b5813cf90da162659effcdd3486f8e451dbdc433e48bea1c5541b5 cb35d5db507b69397bbbfb0e12cd481f21d100b95d20bf3042a9475c9c9d d90d8c4eb78350c96dd2911d15edfab3b465c7a76963aedc862ba628556a 993b335739ce074305e6dea405fdf5d867587b750e401ad170fcbadf948a b92f5924fbca8dd8659fb8d88fcf1044095b3d3ecbb88f4b77070236c514 386c6492334528dbf986efc85f9f8e971790d275e0c7aaf0bafce2f470ad 039413ecf2b39d846949c932346a1b04452ca11f6ce36ef32866ecb65012 55c1daca015bf142bf33956d30098388c817517df95d8d5e51062bf2af3f aa3a8f0ac463725058f1eb6943d6d0a178d690eb13a9ef87fb1f85b0fadb 8b6b2709aedcbbcb58ff7ae6c58370209aa60b152feee0a747b60f0b4252 2526c78231d792f83bce107ecc4e8322597511c7fafd5aba8b3ab0f51902 2adeed89c0e61c899eaf7e509a3dabb399a6f4c5d7ff9a68b50afbdb67b8 9e4c7f39d6574fca0d64c4fcb0e54c1589cef927f983940372f6e21b083b 7bf5a85fe09992677eb32c9fd46277c50fd992c478c292af7e05a3549f71 2c66bd2818b827bbfde2c481bf489737a71e886f37082afc5a8c0b02b7bf a7fc894d8849987758a4fbac084708a62969d7192463538cc4cd31eec7de 061b00da5a09cb1eb97e3c9a2c2041024a620d7ae2baa99cb070fc01bcbf b1243ffd06a4c9ea6a4d4df42f8738fe52a7252cde570a7296aeb5ed351c d4b2f6438812cd61910a4d55d772a881cb186d3a3743cc132b27306bdf60 c3ab4d755e3eff8e10c2ca2431a50f4f4b3bcf60a5112a8ff91bd51eb0c2 c144aee9e927858826e203226987b292c1d7f8fee533b57a9b055084cac6 15915ac3a5a827ee04d91fa9e9e267e3ae44ef1101491a27a07129219e9b 4e20792f1eed42d5ca89c4c49753af7078b6eb6e7a56fff7cecab396b839 8afdd733ad2884f7bcff5b42f64b4b056a709d656b0d5eb40a76a5f665a6 9bdb25e0238aac35c5c0caff832b98e64829319aefb07fb974036e0da982 6129db7ac52292770facaf02bd6afba8862152bf4762425ebbb22d7b6f08 d29928a53b11aa35516eaea9d249509063c539acfe3954e1f965d2714b86 257e9fce32cceb0a50661f875926ad7e57ea55aa202f62f88d51a13e6b91 19391b0753987a5713d7cd96506cd2bc9d9a549e6b6ec7da0d24de9784ff 7538dcf32ca736754cce162d2008a41fa1c7999c2a8f72da2c517e06f0f0 77bd88a2ff890db0586228842a011420efe3e910024492161eb477fbdaff af1e73d24b75ba72be5c14358c455d538585754e9f6816a226f60e6d17c6 6c941f516c1f05a618c022c1a7a8874cb0d3f7acfb6fd79d7601ad6dda61 1d31037f3739bd128616278e7025ca836708c855dee5e3b449c6c5904b95 caf4c2eb09519564c48af781fbcc49f0dede6cb2be8718c515c05608549f d5e54831372076250be22a0fbcdee17fb5849d30205e347e63b8841d1ae5 71b2c372fd9634e9f16b4823f94dfb807b7c09840f92409ed8041b1515db 9df22187451f3e3b42737a11611a4a942dec953cfbf9875d36a363e3a2d5 05d96b6f8f03b7ea1c251bab2ff79dd8cdb28796d1fd364b1103da119bea 64ac34659023685fb8d5b2755ce523b32f8532845e4c3058036f0862cbd7 b7d4dc2020f7d29640b5007a78af6d931512aa015585bf80da89fddce137 02efaaea51c51c856d7c8a7f285a997d749ef5fddb3eb145f51b1071843a ff486c7ade3943ca2ce5387215faadda2db4143311617f6281fbc3f8d261 0272cf235564703f832e85167cb444ed147fae675654fe08945694f9e63e 3f1fc2f6a64f6e36c0ba774a8b20bad6115ac54450e32d35031e7555481d cc0229df599951e758a654282dc75e6242e141a3156a5c98c533228e8b51 1801c716665dfa23fec5aa20f3fba6ba37fc88258dec647c3b4c85b663c8 30d763aaf568bda38558e4314b6b510d974d9f21c783c4498eed62c8db29 bca222f27910b3d196c0e8502b234a739da32a0f6414bfc5e4c9cc167989 48f996f1b30d1765fc99751beb12168832b5f7f91a7df5940eb763731f69 939db425ed380c3ffe2b415a7e960055bbb7ab436e6b8cd66a12a6662cf8 8df26c3890beac4b2b6bc3c075716614d2045a180905eb9270db0f8e42c6 c4114f285927bb03e92c3d9301710dcc17190a1f78151388d70aec38540f 031e376d8f31da955938b22196ae56776826c7a658822582a538aa4752b9 694a5e814ef39c1df410b75d00cb9069cd47b8bf1838f92ef5a1b91daca0 2d8798c1df839c2430e8d0284e1d16ef72b363670ef519d0d06afe326f37 ea048fd2e09c151103117879c2efa268645584ff4a1cd478536493adbcb3 e49e42e7b668d9f0e77ac5a321fd7f339caafdc93267144f9467b605c869 04c3d1b86bc0e1707b47c3a4c1bf991ca356fbc32e635623f44276cc7358 da5441438b5fcb4a675bd60bd112cddb4c8357595f7af082af0924123e67 3a1e74214e7e4198fde4aef1e85e129b6a78a1e975978ef2450c63232588 6da46521b93748413e02185ee061648cdfff10ca5249d19faad78619783f c10cb77554bb502a640e5b243c9e90ff169a855b65d29d25b4d30de4e53a 139e8a20059cdb796369ec40057f74b7dc4b5a4d3dd463c66be4e8a0026d ed6f0110c45baf21f197b649026aee565f47c27a4abc1553790303bc2b34 adb7c6e54723794eefaac4dc7145a7c3ae16c6bb635a704efcb2b9bb6516 7654245ae5d466b436232a47d9a2247c3a5a4ee9a7e6f29b83fcb9d7082f aec5caf6b48976b000ad92199df65742cd8de4af0541461fdf07f44e9117 8e8ff2423e01074704dae7370df7080d1745190cc29435f187afea37e30a a2c5dfd9c4076e15c1d80b688acaee8ac7f4f6f5b5a2eab3978da7c77958 719c696d9a545be2d44b884eb94e873942cef0ff497450fb0ab21c392ea6 4cbec0ab283283ea4b739e36f2fc145fa57eff433e36fbdf217db34f8efd 02f7a15b77311a506749478551f11e1cf0c984ebd27eec2197babc950624 2f7c425bc0bb35a1d332c3d7442433ba809a15a50a6487a1cee900a9b604 747c6821512b934578bebbed7d35d92c35be3ca128dece0dd8e6d61572b5 6c60a75a230932f6c8f13a0c82475d819d419849c046beb618ffd2ba9b4e 35593ece10ebba2a923648ae9d921255277b6e8152837d74782b33ff5ad6 a07d8c6c1e59132d3e5e1f1cce864fad1f7963b5017c7ebb3d29f2af65b0 dd7322dd6e94e812f0ed2770466a41cc40a6cb57453ee0de32a633a867d5 fa5ba2b86736a2d2c7cd94af3dbc925dfc2ddfeb04f40481507a287e1ced bf35ebfba94429ce54e6b636c33d8821708cfec3a450e15c393b5d5bf7cc 848c9c5780dd966d01b34db5f9c3137fa0096368f2ae8883e62cdbfc6132 f7687fd1e9614779274f6b92a12a6d4a8c415f59510913cddef67685cb4f 97fe0f7b8ce990cae9d8b152b1fc223360fa5480e23d62bfa69df11d97ef 8b9d4f8f047301f5db7ee34b4f3996a6e226b8b932a195cc8ecdfbeb34cf 2bc204769a1a1ab2e6be18d156d3c1b0b867ce4ac4e57203585f98ad8ad4 a1c2cd9823f609af8be966f7cc89e787435f312b7c67c2f9efa22f169a5e 81c8f3de74afd45675b477ae9df1983de2474729ec80fd5646058051d8f0 9b253e57be5540ba0b7e9c2a588879d45dac2e94941b47052295ba2909b9 1db7313ba5d3c780113ee736ef57d7a9aa88031ae61411f32ed3ab2cb97a 978abb27b822c44282ef5168148fc32ec991f705288c8cfd6c838a37da4e 2a5dba5d215739005fec9ac00c546884f860db130cfcc1f181cc5f913f78 9bfe610099cde584d5dbb15604665617d1359d611049eff679aed936aae7 c27fcde30555f0ee39edb8512bde5007aa9b1bff6a4b6b56e883bd284e21 3602dfb4465d3111682d4e2b3e339fbb0e0455557281788a6b55eaa5881e 62ad1cbc65d0ebaad4a5600899b9320a0fc98e8ca2e7967c6c2ce48910d1 80bdcf2f616e7536f72797e3b1bf7d4fddd08179f5f3429bc3885307089b 9f4dafb2feaadc8a761f6b41f9d7e6ce750d5d8ffe999da55dc239933bca 1524aa0078ee24881e120d774b293f1593621230fd5294428653eb453fbf 97b275bfea389bac5e8ecae12389b15f64338a59131f6abafe3f632c215e 38f97abe80d3fc93352d0e27702bf83306a03faed8f89160416f1c3ef5f5 388f2831370b64bf7cb737af5ca95a8023815a222be811b4b85cf52beb04 6f0c4587643fc0da77810a69bfac4c0a4a71dfd0c0ab2d5635020d264958 8a8ad4e825478651950a83d5f0f2bd8cc31e825074404d16c05354d18730 fcd42cccd51437a2f2a90a6a9e294d30a5f5e53f18e53ed4b60f0e0f6159 4fea136f2ed0c8af5ef7cae946b33a18d9e2d0c8b8ad3ff0e1908d30ffcd ab58a28e59fb12d1f28e783ed58e344e9105d9bdba8ecfb7b0df61cb7f43 7924ff7160563be7094c769f36fab8dc74207bc789eec011e34ef81e3747 8cc4c9d5a1118ac0a685d25136f7e295b84c060f4fb63ae4cc8af1b96ada 4b183b054df7ef8ca30aefc9b0cd2345b728a622e2424ae0aa578c065e58 e8c34ebd2b6df648a9780dea293977946a9a3cd8ec4779f30f8a4b51000a 55dbefb328e2d5098dbc3f9859d49a463fd24cd8c28ec426088245b09080 c79ba43fc46dd55f2ba2c190f8c13b0d883fb6737bc0f9acb5f0ac3bfa4e 8c346ef5d0a9a617bfb9e2fd9fbc68e39401d5978319fe5279108675e8e7 68f42e01a0b8c133db1c8be7e0a553ed1c1676ed488b0583a3317f233f7a 4335b7b4ee205d1d324957204a51a0b37241938fe2a54d8aec4a81493384 590432d5afadc3a84b4e08771be80f2648acf9fbc777a51b530f0ca34fa7 a8a8a1cb391d0db8f09f10bdfc1935204231718494dba12bddc6fffe20d4 f3b7062feec978a0797804898db2f14279363b72708d6e7fdaef71aaa495 ed16db39e5ccea3090cf20c2c0d66eb908ec814daf3f54b4465956efcdfa 46071a0eae7ab79a2e227f8b2819c1c5ca018646106b35303ecbe73d4923 8cc10f3bbbc943bfb7d547132c4debc1923df4e8120a3226cb99eb8ef162 5468ab720065d6baccca3bf4cdfb2f92b61428b033f26b985e8411820ca0 cd4b5304516465f29c894a6c1bad8942dee1382421a6c06076dd06451ae5 83b9e7abe0e273365247fa24cd68e9b220f2bfa35adbd60259f5a0de4b66 0b0241841e2ff4585c658683dd9e6dc847000b238225990820c1faeef4e7 39789b9e44ab037730dc4f6c60db05e7847360e44b0c14e59af478cf54a9 670ca35d4ee3e3f81ebfc58043478199aa0e35da74b4ee11c01178e44235 2eee2f57a651fb1be5123acc973848dd79b1bf5b69dfc2186662c9a54817 c33cb1a6b589eb64a5885ae8ed5e8ffce9cbc9f1d04faafd0274d5702c22 09ef9e52b357e22f458bd3beb244fe88c36d088dda229e501227caaa72c5 8a7d5a95fb1d7e380819daaba59d2eebdc5f7cc2bcc042e73f13f2dfb19e f5ba70d00e74bed0ad73726dcccd7b3ecd016dc010185bc34aac6722927e c4cfc8d40d5b88cd5f01f20d1bee72b715b9d4931d81dc972c59b3124ca3 5e773612673e4393de8b93b9b3c6b37860330700514cd31919f42a28f9b7 c81431ac8912adcae98269d6a64f82228f0edbc59de4f69066c476fe351f 9869a4bbdbecf649a2e35d019e90a1d280a1fe55bcf528158ffb01facf46 d9f6eb0266149ed40307d9b070ca8c5e434cb7a555b74d18a6069784896e 2f250369fc6b6fc426773c64f33497abae8096e2499bc1f5b087f086dcd3 c5bf9b76d0f50fd3267b319b8363f14a342a90cf0236e8bd8ae8f084af23 7d04e56efbbba1e86d352ff817c67baa3be98fe63fc4d04c7c18a76573b2 c66b347f7548d79607b84d90899dadbaaeb9fcd37b1bff2ca865baf35c8f 3e4be98064e0fe57b8c9d5caab1aa997afe6fb62530ac8833236d5ac7fcd 65dc18e1e02d059179ee02c33cfc6f5dbd06091d08942f420d359753ff2c 9edbe16cc23a97cc6b66d32be0b41e0dcb983aa1cbb6534a16e8f6e8b242 2a95b880c61351a76e1d53e5bfa9aac679b60a7f9b2dfdec878ebb0ad30e 9b6febd33f986526f03e43ddce13ad5264521a8971752c01cae738ec3bd4 e556dc6bee76a8850f0ef738980274448a00d8681787a314dc6b1cfb81e8 3825f3b04ae252ec698187d0a242389eefe1eafc054c9bc0c303a8ec23c0 63307b21b2a98034f6e7c4758be50cd35474eabf2b7c4bae6ea1cd50883d 62a38a22819cd666ac6d2f39b1fad6fa4034416c03d9795e4caf59215672 f2ae88619f172c311a2b7b301f30cc312530762aa42361dbdb7640342928 98955bff38fc2cf6c716ab525118bf0b7257317c8118e9253a1aea6c878b c6377d6428e8ce5fb78544930a46d02b4b08081befc78402ca444c742c20 3dd1fa3dbc351df112dda778b1e5c3984b03ce9e7eab15dc48ddc469c7ef 3543f8e19533ac32a3f6b8b12103582303cb46086d7eb69917b9e22f92b0 7f794b80f5b3a32e44d88d2e66c9e41dc9d60e346e0c99ab6604bbea550f be4a1d9656d3d85cd9b8d632a1354b76dea1d876148d9bfc6d7108aa1b12 6c17dd16a3913fa263fb94274a2aa4ce87a122d72770f3d0afedaccaa121 bfc2f42f7a0ad1787bc858c3f6ab8cdae76d868aa3bbabd1e166a7ea0560 8e5eb1068d4cf2d77264218da1ba33e4f1cc3d24868768747fc08cdcaf57 c67b2498246d7ff6f33acb2f83a970b6b67aee0b2fc0b76c2b4bddbb9b98 6c5a0d2323416dd954f7036237b18cac8a1ceafe4e6fa1d2396b487a03b9 b3301ca9b795626fedb3293b364fcbe29b8e606f35863284322d82bb2075 737e8062454891e245e0f1ec7743f1997b3b36d24d94f69be4ba218a9436 466b79d816e6a72c7306e3c2711849e9a941983cc589e2f19ed18ddff751 36e253edaebf57b674134684d1faa21e014b9d5475ae815f56b606ab62f9 ae1c32315a1448ddd4151d06f4aa1347444d3240df4f82f9fc5dc8709112 938acf9bb25e7a4b0fef0dd2515b15dfb40d174048ed2a3d841bd0e6c821 e07c5e959c17d6f2ba659d792c9767b9172453ae9c415a6aa818f3999167 790321df7695fbea76ec20fb60b516f84d59bfdd09a2fca1bd5eb3ece33e 51ed225a30c349fde4336163d79ba2053343ed04eccdf8453b33f9bf033e ad5bf59225856d7a691657cdfe29eeafb146f41d4cc9c8d4ae0d2d287a93 c16dc85f7308390929bef532aeef8770b9af6ea7fa5e6e968d211d1f0cee 98a09a4547ad609f62dc6b5ba70b9a29ddb3faa15102a56a017b9fdacba8 955f687e2d4ebac571937740f1c6a3e5d9584ec9d7758fd27a467b273e5c 5d2b49a10f4c935f76a0718347ae59f9f5e29e8f2695664cef0a10112636 48d486e5ee9c313b8b2f0ed6e9c9a6a5ae154e1f1db95164fda121feac07 7861c85a765929a69e157e13d25e5e053bd57d16079119329396e4b3ac48 fde80e0954b665d61b7d3beb0e7b3800b4fe7eccc741581bd4ebe45f1d09 0ff8a13ff6ecff9b76ef312ebf48775e6600e8261d57dc898edbec1ce72f 9806ac5a9ab585332133af60ff2ac31b6e97d28bd232a50d28231595d2b2 c21b253a27a7d430a778ff0dd446bbf93c37c1a4fb1ab70ad1c6615b515d 72462d81535145ff27630debb40f8439e093c90fec7ebd04ad81866390ef 8df9d4d4aa47b8da9ff7f5ba3a3a6cc61918639901f4c58c86fd1844c05f e795ecf8824e5ff579b339e18cf298786806e9159bc98694cb45a3c33c51 976a86deacb2abf0ba891471a846ee9f0240ea834f1df61bd439ab8a04f2 35514a667bca49982cbb4afd0f0b0d9042130b4376a8cdc353ee7846cc80 d13b38ff7dc0f722e241eb37e015f2c3c449ae1ac99086ab4d09e359b4e0 cb40fd539c3d95a177fd1b2b6f827dda8f4f37db4d2eb5c9cc0c05ce664a e275272d1f131afe30c97e4c1ae8e40245757cecdda343fbf57f633ff29c cddd45c54eb21a3e8d11356f26c4d6dfc4cc24d14db7d1f569dd504458d6 421241a9460b760cc89182a3be4d5e274fba17b0c66a73a31244f94e0e25 a89a4349fe03bb7b2b76d5087fcf01e23ab8a946541295fe3b8158c19fd5 281982794babd4d8814b278218e89e9338c7031473cb0670c0010c62ecb8 d0c37abb74a68f5532ba49f479dfa276b91dfd95d4689f7553de743227aa 96b674dcec8186556ba8af629a79c624de297c19eaa86e274b4ccb3a6cef 807469a797eae637909c19232f2801b5bfad8a6bdc6565bfc0c217004854 dc654c7d98697831a625b3ee7ce24f5f05b0aa6ae0187c98c221820c5a23 a27533ded30354c4caad3aad261ebb5c0053721407d9eb6bd55380930840 7de038d2c6a6acd77fef74cfb5d961dcbeaa2da6b8deeca64e4adda73672 56c1361c7ea99a6b95503fe901d056267f6e36db78d165b74483576e36ab a19e6801a33e9e0bc21eae2a0e8e56943f4c2fbf9467afed079849635579 ea81fde7e07a1c9bd12c72eb2ffc2250030bedf8d8542ffc4b8ed5268925 c56bff45b33e0bb0f94e12ee694dcfd34a57724cf3b9d347d7a845a0c58d a803b999da53cbc1e3955ead076ce86f62085985c9d9fcfdab90b2d26c73 d767084eba703a13ae41ffdb2a980f3ea0f0b67ed5a0aff4b4186bdcf217 ff575b1508434dfce67a20e40968257359d0c210b28dff561b8ea85aa74f b443daa56f4cc37ac6f5cd3951591acbb84d036170156a6640000982e7aa aea636f726609982cc39cf9f0c42868a69a3a54d180400b29094c43e624f bcb7a087b54cc2ea930f8740828b6b6d7219ac2237838f63df73fb99f4c5 1de03e578cf7047bcba4f08a7c56e008284e95cc 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Dingbats.pfa0100664000212600000240000025353610330505373015313 0ustar mikeuser%!PS-AdobeFont-1.0: Dingbats 001.005 %%CreationDate: Tue Oct 19 1999 % Copyright URW Software, Copyright 1997 by URW % URW Software, Copyright 1997 by URW % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (001.005) readonly def /Notice (URW Software, Copyright 1997 by URW. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright URW Software, Copyright 1997 by URW) readonly def /FullName (Dingbats ) readonly def /FamilyName (Dingbats) readonly def /Weight (Regular) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -72 def /UnderlineThickness 36 def end readonly def /FontName /Dingbats def /PaintType 0 def /WMode 0 def /FontBBox {-1 -143 981 819} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 32 /space put dup 33 /a1 put dup 34 /a2 put dup 35 /a202 put dup 36 /a3 put dup 37 /a4 put dup 38 /a5 put dup 39 /a119 put dup 40 /a118 put dup 41 /a117 put dup 42 /a11 put dup 43 /a12 put dup 44 /a13 put dup 45 /a14 put dup 46 /a15 put dup 47 /a16 put dup 48 /a105 put dup 49 /a17 put dup 50 /a18 put dup 51 /a19 put dup 52 /a20 put dup 53 /a21 put dup 54 /a22 put dup 55 /a23 put dup 56 /a24 put dup 57 /a25 put dup 58 /a26 put dup 59 /a27 put dup 60 /a28 put dup 61 /a6 put dup 62 /a7 put dup 63 /a8 put dup 64 /a9 put dup 65 /a10 put dup 66 /a29 put dup 67 /a30 put dup 68 /a31 put dup 69 /a32 put dup 70 /a33 put dup 71 /a34 put dup 72 /a35 put dup 73 /a36 put dup 74 /a37 put dup 75 /a38 put dup 76 /a39 put dup 77 /a40 put dup 78 /a41 put dup 79 /a42 put dup 80 /a43 put dup 81 /a44 put dup 82 /a45 put dup 83 /a46 put dup 84 /a47 put dup 85 /a48 put dup 86 /a49 put dup 87 /a50 put dup 88 /a51 put dup 89 /a52 put dup 90 /a53 put dup 91 /a54 put dup 92 /a55 put dup 93 /a56 put dup 94 /a57 put dup 95 /a58 put dup 96 /a59 put dup 97 /a60 put dup 98 /a61 put dup 99 /a62 put dup 100 /a63 put dup 101 /a64 put dup 102 /a65 put dup 103 /a66 put dup 104 /a67 put dup 105 /a68 put dup 106 /a69 put dup 107 /a70 put dup 108 /a71 put dup 109 /a72 put dup 110 /a73 put dup 111 /a74 put dup 112 /a203 put dup 113 /a75 put dup 114 /a204 put dup 115 /a76 put dup 116 /a77 put dup 117 /a78 put dup 118 /a79 put dup 119 /a81 put dup 120 /a82 put dup 121 /a83 put dup 122 /a84 put dup 123 /a97 put dup 124 /a98 put dup 125 /a99 put dup 126 /a100 put dup 161 /a101 put dup 162 /a102 put dup 163 /a103 put dup 164 /a104 put dup 165 /a106 put dup 166 /a107 put dup 167 /a108 put dup 168 /a112 put dup 169 /a111 put dup 170 /a110 put dup 171 /a109 put dup 172 /a120 put dup 173 /a121 put dup 174 /a122 put dup 175 /a123 put dup 176 /a124 put dup 177 /a125 put dup 178 /a126 put dup 179 /a127 put dup 180 /a128 put dup 181 /a129 put dup 182 /a130 put dup 183 /a131 put dup 184 /a132 put dup 185 /a133 put dup 186 /a134 put dup 187 /a135 put dup 188 /a136 put dup 189 /a137 put dup 190 /a138 put dup 191 /a139 put dup 192 /a140 put dup 193 /a141 put dup 194 /a142 put dup 195 /a143 put dup 196 /a144 put dup 197 /a145 put dup 198 /a146 put dup 199 /a147 put dup 200 /a148 put dup 201 /a149 put dup 202 /a150 put dup 203 /a151 put dup 204 /a152 put dup 205 /a153 put dup 206 /a154 put dup 207 /a155 put dup 208 /a156 put dup 209 /a157 put dup 210 /a158 put dup 211 /a159 put dup 212 /a160 put dup 213 /a161 put dup 214 /a163 put dup 215 /a164 put dup 216 /a196 put dup 217 /a165 put dup 218 /a192 put dup 219 /a166 put dup 220 /a167 put dup 221 /a168 put dup 222 /a169 put dup 223 /a170 put dup 224 /a171 put dup 225 /a172 put dup 226 /a173 put dup 227 /a162 put dup 228 /a174 put dup 229 /a175 put dup 230 /a176 put dup 231 /a177 put dup 232 /a178 put dup 233 /a179 put dup 234 /a193 put dup 235 /a180 put dup 236 /a199 put dup 237 /a181 put dup 238 /a200 put dup 239 /a182 put dup 241 /a201 put dup 242 /a183 put dup 243 /a184 put dup 244 /a197 put dup 245 /a185 put dup 246 /a194 put dup 247 /a198 put dup 248 /a186 put dup 249 /a195 put dup 250 /a187 put dup 251 /a188 put dup 252 /a189 put dup 253 /a190 put dup 254 /a191 put readonly def /UniqueID 5020164 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 36dc04ce1af82cb5f0bf35ab8be7fcff72ac6d606f2156557485f500302d aff8efe15933791738f1d61531d65c1656d8209f23f09ed1c07593c6ddd3 4cf9f81506267e443a67a9bc9559b7cfdc6ef031e790c4dff207ae4418d0 c61fa0bebdb29d14e686e3d8224fe9f4f6e632ad557f431eb52095b11f92 49b527fc4bf8e0cd41aabe448f0ba06d0be375cba2ff708bea69d1e21e8a 9badc134dc8261db9e0e440ff62f8ba7cb314b790a30ef733db5e3c49ffa c967527c925a623c772d0f351c4ec1812124e7e9ef92468fc1348e3b1018 607bae4ae1b1506092f42b53e489aca2f5488ba6e54a44fbc573abf2ed78 7789e685c6da80f4deec1e044c02443412f458680d03e7f8ce6c767d43e1 b4cb7bac91bcf80dbcce9e506d27f4e6bc2c7fab05ceb46be1007708e855 bfad43b5f29474465f7dd2aa7cabde7df6677c20a7862596ebe0f8d04d0e cf030384281e00fca275eea7971561428c1432ef7bf2f6867493a359fbc5 7e04bfecb9d600dcc5fe0609a48d2abfc90c715787d9c079e0acd4ff6013 3eeb048decc0a6c244f95c70e303997421ef880dcd9cf1d12bb3d0967f33 b2ffae5db6166ffd1a75a2953512658c95c267c615533afdcab1e596bfea 462c2031d17fdcef52b4ab5a7876849571ce1baf76974d00c865f56480cb 3ec443c4ff06dff19057bcdc87edf89d6e4b065938db92fcc991dff2b1d7 10197e7c1f9fa415bf109d6daf07afd73ec28ffbf4c3d113df45488c62d0 f25836e074170f62339e9cc00de90ccb0a25791bda075702013055260633 05de8c05e5de0e79e3744e11acc24d60f3b8f2684a331861a5684bc68e84 77e530b88ba58c6e08118dc5d475a1f8b2c2202ff8cea64911412356b9e9 78badc354f476877a679bdb33ba0f9fbda116cbe048c0206b39ceb34689c c6ef0a479306c74017d2a82ab727be61fbf15a33360dea36dd3d87f33219 fb41e8c6a9b62ed0aec10bad415c035c896fd521a3ffc26dbacc3a335f08 1ea69d0a80893fc9d9125920f1a1d5819e5df6ee87272d5d4f1e5d69d90c 0235270ea6787a4257a8d2168d1299ca31ba75b1db78ec4235bd83873747 801fc6141d5e4b0d10ba8c2349cc03f4b769a90867256e8b8467322eb65a 2f8b35ab20c9a4c95f0591f8f5976fcbb694c518eca7a97394ce61440a19 cee316ebd812d550227c06be250cfdbc212811002b302641d335aae3d038 912d6c7911dfd6984e95892f8ab224600a4bf7e45c90044e36aa59f34d70 33864429328295d65f22d315bee2e784f40abcb5da4b9994b74c3fc275fe b737c00ca2400d04a17ce67c3a55ec3ce3cf6265a1e96eed0e9f43e96112 dd7074511c5727e135c7288b7103b4ff0bcfa0d196179ad3056e273449eb adf2b98258ab549fbeaef52f944c06b56e93483b35288221ab53a1ebdce9 789d82c3319dfee88b39dce86c0b5a5f1b622c385b6065e594b22dbbc171 5016ad5ccab5e6e43bbb6020f93bfd65bae26ae4a23971e7679518619998 62b60ee52821743a44ba9829908948697dfe5bfa2f8da0c65ce7467e369a c65724e0e2e944185b195a0d61a2e5cfc7ed4b33b3bcb7c04db1fa7b7984 4f1056f71ad5548e7c2ab20df5b43037c808bd295195e7d9410790167be5 425bebfc84759160529b6f9715bb26301f730102739356f4902bf46d68c5 d30d717a07188a7649d8d14370b909feb2752029fb9125867f3d69cf0c43 3d2c76a23a33aa83e9996a813bb434d0ffb0deb4493d2beedaed9a2e4968 82520611165aafb7fb09511f1ef1a3e3bd33d2dd56baa0ce4ea15828272a 2874c2e7366c261356d1f3e208cc50abb3f1c3aabdceda355f4fdf1bb77b 89ab8fcbd36257fc8a18928c48545178cd583e098be0f168d4d12950fa7e dc32f7ab66e988d74b3502ccfc408a5814c436b938ac021e39f600f61c14 247e8a2ee9dff010efad428bf3fd01cde74d3ba1e928f230894f75f8110f 32961cd82ec626c936209a52f371f22ec2a6b9f72c9ffbf049f450ab5aa8 ca30ecc8b014415ecb5b0397f728313d2b1cae0c0b38f2859bc702682220 539505a95c9b001ceef16c2aa5c8bcdddfcb6a87c5326ea5a7918277f6ee 607c9185c4d165cc9daf31762278a089ac4dfe640b9ac841571e9cd286f6 cf7f836652d627b5d77067b51ea7ee5a3efd38c40bc34d75f5bccd47a27e 55f21b8ab09941fcaa911e1b9bd32ecd20908f77c0ac759565a66083f00b 331d853d2c54e5ee3ab6ac97133923e9653e30deafd7656ca49c6d7256eb e0df22d90c1a827f8ac87ac0df39b1057ffb922df5f0cef83b055ab5d5ce 24d48d85f6692f098914ae589323a3e2876bef80c01c2a5bb1c83ec67f5f dbcc44450b9fd1d9e7de9735bbf8799a87d62a510b2f7c5b5cfcfa418993 f5643c0999fc6afe02853e36da715d78aab011113992e214ba102649f1e5 aaa057221ce6207735a6e4f81245483334638c47d73c13934d106b5653d2 378dd50c44370b4c1edc2f5df5599776ee9100f2a5a3db8176f9c27151a8 b325efe4eba4a9a2f2f930102b638ab91d536dbc707c8d009ada89f14bd6 d4e383ffd494ca7a44222ae28a71455a7014499706f303606b46e309e552 918dd791b29204e576c58c9b03caadf1c109b2e75a9e9cdfe14d64893669 74c7b963019807590632e98452db25626bb2cb6355dda887a3d7da417c90 6cbaf5acb5f83232e62acc3c6608b15b81f00e3313da7375b4f0797f1009 e532860fd44c20ec6583f7d7ad6dd8c32193ca594e61f0490cd3cc898ec1 ab8ec7b23a97d080c2641947c8e9867822967ec0619a8d4023c812797dac 0ac5a120f822cb58c8e219374baabc92df6c742eb6f09da056be03df0814 fa607275f650ecfc1c9b96c5aa0d95b44215d6e646ec3368d8029fe54ce3 f758e2c8841bf36a58f7c8226b22f64a070eec6a577adff6dea969386f22 c9e11225a807135cbb70b81d3d1884ef0b71c6c53d4ee83e0116b134997e d18add64a0a7af4e323ddc0b91e73a2afd5f8d0909496b73886d86fdaa80 5338e44324f947b246d46e07568586af8f68c03f7158c4e80df2a546be6d d1d53cfe80b06e9d85f8e1a4b32202132c00c3e69d1c8e2ce1f253fd414c 2e2f1fb1f986a5e62d0e4db5a458092b4c9f8be6b66ce593b20f415a911f c16b928d9643032d2cc39085122b8d39bd7faf2c180b2297606cba1a65d9 3b4d3152712b846f6c84c52039204fc7de23929058b8c9103f2aa2ce9769 ed79d4eca8486b14d0a56648f59cd2fc884e32841e6be1a45d8ebdf9a500 5e89ba0ff68661dcbaeac666fa991d932209b3f4c86287556e9d1a13d2fc ff3ce50feabf0382f780cee3b7c9a85ba4fc06cfb3a230e7b2ea651859c7 732bd57f05bdc1c6691c183879cb39765cad2406b1c22f4ad2b3db11faf5 a542d4df16bba10d6eab3cfdf7470e0ccfcbc56c544cb87d284384d6ad08 e288d37d6fcfea5bcba2bb82fad0313003af5b1da4e600ad3e1a3d5b471c ad4672801e6e2c461dba78508c53f5c3a01b3bd2439413edf1d36fffa12c fd0e92474f80796a52d08d2d81c7bfaea52890aaf08a94359362f2470b36 b6dc2aa784f0647f18e3c3615ca7da70971f2764215d5097fc2fd9ac02b2 3e398ea49fcdd412cbb85add21d5a53031f8589e0f0ba59cccfb9d0333db f3f294eb566ddab53f6bc1fbc11bcaac98bcdd759844c5a01a477e2b000e 9607fc168487eeabcea001a3769399dee4abc6c3b838d8c16b71080218a0 48b02b9d104235c85f8f86136a2ca7154fc897aa68dbd9d6d373c2f0fa45 0e13df712b9658d0c1159ee30084946008a877389c96ce54d4084db5fb80 350dbbb55bc4b81df6036096398d8d10d88e4d62cf2bea44963c15d4c948 2cd23cf13580fa1e62e1ebe1993845c1b23ab51bc3a3f2189d97abb9cc66 63c717536acc4108042ac63a94d6ad81cae1936f276e6d336fccecf0bdf6 d942c45923a95e24457a3c8acbd7fe39f3bbfab3e084b967ce31c5f19d6e 5c4a52cfcbe3e614c790f63aeff135a79699f39215fbf502bbf4a5bd6dd4 50447ac4ed4651dc9da320f7e35a798927c2fa660d43cff57a8e4eea71a8 0b3fe23301908032a428500d51ed24bd0ec1b3900a8a6a0b93fd79989521 54d4d39941757e5bd138eb3935f8c3b1a2f617059b1d2317e4b2cba22f25 ada5271ecf6329a785a07cd13f4f32038fc8cf50710c1d6978e2f4976ed7 1b9463789b81d365591646da7d37301bb7ab23f1e3e1a4269e5e441bb828 61e46cc1e57dd4b2a8f7bc1029b3400f90edc399731c74fc711f5b449c37 abf6721560c88625e49470599a3d24878068a9224dbe60d414a3b47e1194 13dd95568a7e17ac444bee959ba666ca3ad0696367851654d826fbc6ee66 8580def3e030bf81d1a1897d0d79e370842dfc2210afab4ffb973056f62f c14593fb1041f151424b7c7ff69dab764d526be06e95c9d59a9afd66a86a 92d3356959db61e264d8d0e44650381e96d9477ea4c4a2a9d9de8ad25d4b ff707700a517e07e5ec7d40f53ac32b6820e6499ee544c1c96d8734a4da1 83db27356393e23cb3bfe79f769571163c469fa29e497ffaa9702e5be4eb 325bebe1948f77146199cc80fda845551fc2620bf3bab59cb624f7bb9ed9 3751230cf93246ca4065b116910f8be9f7891973b9c3b6e2d0512ab6e16f ab0a634e68bfd2d1fdb97ec1173867076d59d4eb83e1a4b7e2c50ba19247 fcda6b7baf861c673b458fd1b8ff553a539f05bfd3672b8a0ad9b2016c80 64e0e1af1ee0369301bf8f1212f6366816880e7838c9e2f1889d14dff6a7 53b44a99443cb300c7db9838098877583fee1b372fcbace0bbc7c7dd2d45 0fe8a8c8b9e0f0301b3e65dac3cb2fe2a6e974d95b0822a0ce3177486a6e ce97d13fcc1befe283ab769f1ae07ff5c813b43027bcb2a20a1378ce89bd dea4dc72614a646707cdeda619912d6e5333fe35e0a67c2e9728abac3910 b8b8e92af0b9183f250ac5cc2d22646eaf8239a0e2dfc13d5b6d1a9ff71a 2cf36bbb01c5a6f69950c2245c4f6dfc2922cc7960160db9731ead73f23a da09aeb356984b03e1b3c9d01028e6f0abe26b1cd068580d5cf5d7ce87fe 0d3e30fd0c7ea0ed9239a9c947b33a528687ef426cba2ffa96163f307145 36daf980dba670e4eb4048902dd3d9e9f30aed6eba73a6f9476348c54dd3 3ef3195a8221fd51a190c8fcf9e6939f082c57b19769b4d1261a589a7ba8 41a1207a4b508a4cce78b613111349a6a03610582380b3ef30307e90665e 57a5ed6c672fa1476e77b227ef983a19c32139e990f820e2e4a23316e973 eb4eec0ebae11a1ce5526f3795aeaa4f8fb74e2894192622d46a9b4c59ba e5f3d935bc9747b6bfa7ea057dfd624ab23eedf3ee8fc0df2b733949c523 1f12eee3fceff227a5a2ecb39e03ebb577d42d0aac4abe0886385bf905c7 d86c5838c445b5513316c81f4e335803861b803f90cf6effa78654a52ba8 16c34540c71dec53e9cf4d2166ec048205e5c2beb7c239ec95daf18bcd09 c33de8f17d8c3900835d3d3d660c840e120b95bec97d34391785de4f3054 cc0b3daed181b66b5cb3ae13ffd8f7228334d8e34c8d9853fe3a118e2097 9a392aa3c3fc4cf0d7955970260830cff7b230912d11bc52c616bafb60d8 72bc4e54b44a149053891453a626af5652398d2aa9fd73f57baa0457fd20 4d6131d366d2b88d6085918df52ddb6d67e0ded450afc95598693392d296 34771933cf5c50ea6cccd9d2b413dc0bed36498a16407999181399acf138 0b9f193df08a9363a9ddd5b58bc893a232f8fae39327701122314d0892a6 ad3111c16b904349c24d217578f97d6e53eef5b278af4f3e3c29b762d6d0 49a73ac94b3be0e14bf5e9aaa0676e75b864cf8acf58a99eed91c4208fb3 264876cd46cddb085360e95d6526a82f84fff0f3795b353f0cefc551018b 4b8f64f9cec02f785b2a5d9b06c7c08a12874c4f2e35928a01ca00229cb0 4e92e329265440ce6f05ba6e68feb9d1026c55b2bfdbe0fea89d4e930b0a 1ac0bdcc590e055a53fe97b947844594724c720743b405cdb1dbada21e45 b9f376130c24d886cd2cababd8625716ec2da67241acfe2422a95de6a7dd 947a60709b9004a3075c75b81555a19f2221b290b3ba4339968e9597ee64 77158404de0dd76733ce6c4904cfc2a1db2380f8bceea1c7c07a0fdbe936 f25ffa83746f21a704bb314d2ea8a37bc25d9ef02294f2fdd7315d27ae29 61671864acc20957dd7377c4d49d89ad1008e83ed7ffcd7da3b5d35fdffd 247c11af8574947151d545bbd8671fe63ec9785c6a94905938c99d8a93dc d8dc1a83f6be818e8aa4f8e6e3825226647695141ea4bc4c03e611ced38e 07d94e4668b10f48b12683965b97e7e5ddb2c099a4b8ac882e319a14ac48 cd7af11945987617144e499e1ab7f1214b93280d9727f8a9476faf26aee3 cdd251ceff6953fd22ea8bf6be4dd79ca12c35846d654d4733e29c64ccc5 ce0a9dba5db0a3f7557d32b1876963c53ae08e523f72e5e3e244099ddcb5 ba23a0af7bb47825dd9a87ae61f34b9895ac2231806200733124b1ac10b4 4087196643372130f0978e3dbcbaa23642e1a47de0f4f12cbf213dc2bdf6 4381d3570e2e563b4aefc965e632f8bb5a36741169329a6a15a051a58217 2ee18cc3ead5117ed61d4772dc89fa4d21db8cf63fcc7ecbbd08c569bac5 10b8e9f03a202c984ab0eb9d4910006d5072874845f2ae9803d86c489a04 a45fdf85ff6267032e3c9bfc806127efa55b35fc642ea995d89e41ee7d67 dba1eaf29e1f361c94d6a43055453d6729d688c8872a71f44b4c098fae7d a6e47e34b163a0f99f07a33381dcd6965211a7c3fd1a0f32988fc2fb72dd 7ae82095d6590427f8004e4e028d611d4547d39a877ddf1a8fe8750e0644 75c0c02c0b447672236c8f3e93a2b5490e4423585e27085d15860578b16c 004f05ee552e01fdc61cde89c59c2ec9ca7004019a47cd9c08a64083abd1 012f787b7f83f61a4f841d567e4fb54613d600674b469d1c2a5fff42aa7a b26fcbaf9d0544c1a66d9451258bde736006c588b06221c0d8b4aa54687d 089f8b48b2653450420e8213ae0de9b7c8cce4d19d6c866c1442308f493c c11ff6ccb33e5d95c83b24b1ee249dce93207723a7b1977151e34f182e9b 7934f4bd2a2697c064e677130cf10ea35737e27117c7e5964953c04139ec cf1f1ec9ddce1b304090419a43b41201b23aa1d79bf85e0d000ecc4edfdf 499c5f1d370cd126e7dadb7f819c26db98084d2af68442f3e845345c5af2 372b378e1147b7b48ff09c9a920d8397f8ac8a7aa235e0c698e7f156b8ea 777e8fe639d206075ecd778c3b785f06b2167090512a48f8bcb29b4af777 11874d0d6cc29550ed81b8c6ca5e71365c19c09700e9ee3039557ff28f1d 4793e55a8a456d802ba84126ff3cc61271e2e960c74942f5636a216f62ac 8016c95242378783d2c9ce3dcd370d9b10b45c4f9a743c026a36ab995847 5e225dc46403034fd2bbaea0cf1b22b93100837169b516eff5f6c9955230 c050368a3baf10d3e06c2805b8ef715dfd55af0cd65061e7a1bc5f7cc7b8 0206c93e492856a41b602f1ba1e98cfe152bd679985deff5b872b8dde037 055ff90cfe0e6ae6ec6e2ddef9c3c5ff3205048ce77544a1cdd7eae4b63c 0a135f81747ff199a82667eee4d830aea2a2d9193c94ed9dd00e9fb2063a 961872993da84cbf61a0896f340d0debad691a3185a6ccfc97383a6803a1 7f3ca5a013d933995239601b7c3f48aadfb4221b5dd7e4af86a75ebb8bc9 505e82e72295018b2c27faf392f686c0d3756330a26a630b25aed6403605 5025319ea2fc1a72ad149f5d5f75153d8480413e14a2275ef0a1ef391744 e343880617d1ceb7b00251ac7973de2552cbb87bae7fad10b84eb30a0409 05d34283d90f4379c2272680013df14d06651e22585f80cfb69cea1b101d 2a7f074792fc8eb6eb8f208c268026a5c3df613b8ff1a33b41871f6478fb 71c809cc32c70b7a1e83254ffa089f35d5a12bc32207a61bc4bb5449bcf4 2d8f8fa3e922a1dac825ab617cad757778e06e9836679428f7253d652dd8 f414977437ce07097165e809bf456b991ce99a9c9e8fe27b42274bae39ec 88bac98eeac9f8f348ffef2c5e293ae749f025cbf2d8571c5d56ec1f5f72 3713ac5816c40eac4a72897af07eaae37bf4f08d578020cec4b2476c9df8 74b614ea501563539ed8bd524119721c3b1f461cf487ce08f8848c0c2ad0 9a504ae8e065c85ac19881288ec619d415b86267843eb919ac2ff1fee211 5f1d2d1f553715acfcfbea18879f9d8ba699a126def7a3fb1db860b3ab24 33e366751bc0b62070a3060fc76a72ea758044b2de0f57d9390e5c0f7279 4fb3debebe9e41a0b15680e3a1624738bb66fd46ab78d77c7a4c141ffb57 707643c9b7ddd54c8b1dc1e5ae9d8f73eeaad25cfd7bca26e952847319ef 06b20ebb71ba9b567a9f299763f737aacfa97ace06fc675dbec011ec44ba 9d06f26dcd729f935972298e0d94df08f55f9362df0a0d3f4fe79b6cb315 1c0d4345e531d051a927b9467f31a204602cde6d981b9c06e11c0ec37a82 e1e8bfc4aad0064390123f003397a42bbe3cd9bbf336f131e941f223b5ab 34ec37512fba2a779051adc9c2f30c0b0978a22314d4cc776f1168ab595f 7e06984081e2f1277dbf121ff0e00b45eb301e207895507485c152d551d8 832b881ac3bc558a5b156e7efe868010eb14237bd944e541b2190c1f0c4d a4a69d908038f98b31a29f77a454ef73e0715a9a444eb6a3921c33a0ffb2 4ef4f1e0382bb8c1517fc614b0b7a0f3f0ab1d302e6d9656426cdb01b4d3 3af9ef7f4434febd1d63cf28ae648180d0d03e9a5e1ea5817c56f3c5c748 5d953995bc9332a3f0bcbb326c9e0def594a3007372af8002d65d191e563 a8c79c578af21851bebe91823f2ec4ed3e55b65316550613a12a0872da4a b50fca44ff4f257cc409e6e2995bc43f995f367f3b95410b3405b4f74b3e 6ad49306798bc451f4baaf13cd4986d875370f3d4a1a5782083d51eb915b 7f32a461b2b8fc256e21295f0a1bacb173984c2c889e4c1d760005aa60e7 471411d151d37a94ed8d14bff0a0a838b73dee745cc2f01715778c57d145 28055fb2d0316a8b0ee9fb1fba06030aa7edc40c59e7113e9589b6d0881f b399614a0f4929ae4b7e912f386989ce13070229180f50f4cc5a71f0142e e654c20a450fb571a74c59fcc2dd428ee314de3090f7ff1205e71ec49667 7bcd56fc9c91d2b522f4dc2d1482aefeb681d7ab8736e5eb407e7efef4c0 20e4577b501c9f54d7de1945715169ac6fc7f5529206548a6202de126e87 09e01e6f2bc3e84d9c813f73674bc9db546fb7abba5240c4166d39a6bb6b 3edb8898cf0e6ba8a55b23c0337ff134c5056d0e4b4ea17fbf24da737b27 01d7a4da7cba2fa4a139464b083d6c7daed630fa06c2b5e2c206811a20dc c40b7588b45f955ea6b633c62cbf36cd930b0a38daf09b4363cb06a57592 b007dd0dc214c1ec74285e9e9c06f2200ac0f60990230454ee001a85eb72 10113050699a28c3e301510ffa29deb0c60484d311e34b57526d260a9431 bc80e1d91803de52ec59ed355bd5fe0c60866c1d382fce22e0b6d8c147ee 511c25afb071d6958e60ea1845469683467c1aa70076629c204a033d94e2 948bb04588b77e99dd13e075faea71fcf1b75354dce05473429d8f6bbe21 8e27e38e3313833a319a8442950588484b2f9b488180f3c292a48d7046cf 781e73267f88ba64ad4a3a6795348a6c321dd50d50ba995c54da0ff85657 0e1fc118e9bb3c104b5c6d9e1121df4bda3366202f3197cca7b365a95cdf f6977ba965e2a6867809f48afd637bd4555adfce322ccee96e9de22e77d8 f6322dd82b0f627ec2273f28df20a201192a1deafdb8cabe17981251257d cb71b4b1a6723786e4acbcc12a6ed661fa1cdc3c8d4edc50296c646621fd fd57398c5ee48e68c5ce3fa79d50b6d6cdcd653b4912ffaf0d5453500e65 9701fd081193f478ae9b88ef1598338597d9cf27ab68bbe789a2ce263fbf 4a31878101379236a3c97cfefdad723f49d24c38264d6e1ea8c3c5c9056f 2501e53790a0f64fe591d50de40a6d9fd0284e3896551e96b7c5c0269626 1b0c7a99a4c729619029e0aedf36c1edbe42d6995c1a4acbb1eacc9f3c0d ebb9ed582b811fec55f2feaa3747e5e2833f2d98fb1d5871a02783784191 3a2b50cd5165c31c9a0f1dec5a0b4bf185d2037fd04b27c4bf707a923de0 c28b6febaebc9f78bc9c11cc4769c18bae18bc4232957a01a4b885911064 6c86cf34995c82dbf00a4045ece0c3b5b9b33a7abd57ab873a6f6614b640 916e3a3a6e38880dda39989ce424adb9660167298e75863f07052ffb99a8 0527c4a803497536ae174598b8ba3d25672e160a03c4fcb066b3c314fe7a 34a0a7113fa92f73ef446e218dc9fda44c93795ecd09e61afddeb3735a6c d903a789cb9cb4fd78514285003a7e349772816b0037b877d5fe0e153af7 69356b6ea59f7f6bc40df9fe2435153c201a6a6b4f52c8e3b110b62c5a8e 89a5f87b8bbf9bbbcc505aba8ac0ae6a086d2a44f2cda0ebd641231b4f7f 8e3f6f4f1900beac50145b2ea93d24b68ac1d26c959475ca3578c799b852 0d12b3cee593194c1c046651b02247236933e205425b7060f5b472b501bc 3190af11f0b491ccb70e4488a0bcb06348f107fa3ab86666a9526ba1d372 b401664a62e2a5f9534af503d0aba0b11297d3362bcaf79bde1e6d3a13bb aa39dc8e83c4e91b98bab300790afbf35b40f252e1db7951e107bb395e9a 6a96e546968103a00eae9230444cee204da991a6d3f1060325002a11d110 b814199c8d45f6f6a1f6e1d61389f17a0dfe53be6d036ece851fa2e20e1a 412be7a3b5b44fdb9fa707f4fffdab3306ddce26ad0295382887f9d527cd 047cb583d2003f41ae26fad6559b3d3aea922fdaf6912dccf186ebde0317 82cd145a37afbc30b60e5d9dfc10566b563e57b8709678086d6c486459f9 23474e321d0737f957b942967d040dcaadd832d49f2b8216d1daa3a4ee28 0baaf863cc3aeaae3cb8544900848d7d2c90b21a4cedab9e617cf7221400 35c62a9ccf3e5b375576e8123e4b019e0923d2e815ff360a798b23308a32 a91942e458a0f1ae4db8cf3129cc33c8aa4ab8f3336166ae1d146b076312 1b4d7e2990f192064db7fbd96475332ff70020cde60f00149c35515754d2 24d19175cfa791642348ce9b8ba3dee210632a69d78eb455f587f8964a9f 4cebe11b9dc6149bef7df781b197ecbf4b9ada78f178c0ce1a27d77facce 9632c0f8752d8852fe2c5a06e147d1400ff5b4b9ff4bf0c5c4be1350d9d2 fde17f1277907a6c3088042a4372ca3e6b82b688e3202f440ffcc16a7e10 551c7ddd3435b9b59e9adaafe3b87de14f3dc31d1b87251dd43c9483f8a4 c61240edac880e5087dddfcd085f0fccfd1b16de94632602f14cbfe70631 62fe6650688f93eb2e2e9e205b37869b150655f22acb4fb344637699791b 94722bc32bb7b4f60390e4d14ba492452684cadd33e570acb3aadd960f89 23ff2f3a29e447a029a3b92e25fca017a1c5bd4faa8cab24e914f50fab59 06fa50b339a0d5a83989771f41a39103a923d5c9563e5bea6ee36e1b4a36 2418040d35c6b0db0238ce972f9515c62f3d6561704ca57081ca41985f17 dd8613a2929ba1739931aa260c3e64eb4d9498d6cc148013669e282e96f5 5da01aeda69499517edc4c52000a5c74d2938dfaf7605f26f799df267a58 a0b9fb307ac206836bf7e0b158cbd3699576de67717f00dd38c3cd085964 e8c5787f9d325eb20dc0b2ea2fc879e7a47c149ed8fa8ede30fbf17cfcd3 9de51625201f9047c50ca3c4ef5ae05db81cda3634934e483aaf7e097bdf e388ccc6585b5c928ffab413c776a8b5a79f3aa72689de1d47f002da7efa 84d8ea9936c23212d7f04098dfca1cf1e04764573385d44be7de222b80e1 0e11486d2c1218e92b6ebfd14b4924d7ed72664bf34563996a96e563ef62 ecad1181f84440f58f41163409d3f1012b7427afaf313797cc109fda0107 39b4445471079310520544190e06158a5886d297393385bb587c7041ca02 e4d97e37347d4fdfa3cc1c4230ac2475e5b281bf844ea7a9b14d5f8ab4ed 2aa0e9e291805afa6648411b5deb86357367c37499c8cb91f1cbeb02bf3c 108e0acfa1118a53bc76f1d3a6052ff8172a08e426a47289d1e8c135f8b2 dc9ea52299f30743997a5e752166507f3eae9f9b9fd794ef1e89ccff2242 877cc180f9ab0b8cc06425c693054557a34caaab27a681080182b48cae13 5e20f9b6f668741e356d31b4dc59c47ac1e6ddfbcba426466c4ddf891cd4 f3d22306fd86702536584651011719014e9efe268b4c6462a8f4ef977638 ef315bffd8a820d62fbbbe634cfa3220b3665773e2572709c66c0d4f4cd7 8de4c02eab094c9a4edc9a59afa4b3b008b027b08b3efcbae6e8a5d9e6d9 186a5429247d7c9d82db9ecae84813aec354187918d9ee11861d612c6503 60b35cbae99747d7f86b3a21da5d3f2e4484d829cf78a71ee7ab1e691118 cb9c7d41184de1a0ed91504168ffea566531744d415e92da25c6b67afa98 4febd32ac82c3cc21153879359ecadf34d61000dd7241026fd97ed950eb4 e22a558aa46739c2eef2333efc88a83271eb588ce127e2c9186facd7506c 8f313c9f98c370de557e63e63e44fb4ffd9c8539f06a23525acbbc91e902 669440eb55c5ff1a0e34b7b9e1120e52f391b2f8bef7638cc2f4cab794ea 3e8c3f14c279ec36fd9ca3a0e9074a6a59e6f8d29094cb567db1f73ab5f4 eeac5beb31e837e4af47e87c98d048c3d5d753f230bb3db527432f4edb07 a636a145b20ecb2b3564ee9c062f0a283c75447e3226a318a0f0b8118c26 79e8b03d4fee86735ca7480a68a43cdec24839e8fdf13c97a10e1cbf3ade 90a2d8fe36c57743dbf0735b214d4b2998864957cbe932324dbaa0c45c7b a9fb6609c6e0879d4d7d6af194df7c412e22808fe0ba5a937dd2ff4f5143 a0913024bb20f4b9e529c9dffe3571fbbbf6267512db475d13b1a61ce427 dc98bdccb8eaddd706f64310dc9cde025c422aac90abc1b500e5f5b1a38a f02340ed4b6d05a1a6b771add1317279f9e236abac99373b9465b012d6a9 e122c6323ec7d3a3afd1a91b374eb52c20c8fb182fdd2cbe7d881882282e dd9c478656ddb59c7bb2ffa4c4407b53569ec22aafba9e19784940f5c674 ce6073be8fd375cf15c0cc88abc92120ba02ec83746464fd726d9c0b7bb9 589fcc34aa3f463fbbe0287f2b3cbf7afe03cec2c72a044903c3246e944b 2923df2b4c7c58ed056648b529564aeb1c2287d5629808b0cea3734edbee 4db34938da8e23c0d439aea4be23879642e75548dc547cfea69413fc9d5d 44f0b625180a08357ce485dcfc7785369f258eee723d7e2fca712db0955b 59bc9488f4eb9eab1d0e8be8292f9101ceaed0868092ba9e743d52834cd4 aa1af00d95913afa4f1dbaef9d68b01b63d04e0ad2588b4cc203eee71873 ad2e5792beb3cb69adde9f995a7b36f103943fc493663c65a30a760f29a6 17336cb17d3f617620dc549b730374f5251ca2ee125b5d048ea9697f9f51 a917ef34c38513cb2d57c9fb38aa4fbd1e8e93d931979ade41ae01569a55 3ca19edb58df779200216d419e7523b97c34a8ae2775512d9d6ce551e55f 6888651221bf998811efe8792bd197230e3747ab6591ed49044778aaf259 7cf495965b328957f5bd2da149619646b14a25bb4071dc70d25c90961f97 238a98c32988d4b1cb9a0b95857afcd5e12c70e07d11899d7b0b8322110d 59fd10df20b1c940b46ee20fedbc91fe0ddb59f2bbd989e5a2d496d66bb3 45ab3314c7bb3453a498b7cc1b1eef09e8866e159ac23f2005c90991b384 c3cee4bf5720acbc8af5a472f138408b2a70d27a0afd828aaff69c096bd0 556d50700e01fafbe786716598d290acf551202090d3b89b2e228b559f3d fce9ac57e34a00f637d6b197342bc8ad10029b38d38bf526e2b5b730740e 9eedc169ff85038fd9bf39224204b3d9f2027e9d535f27d016f0bee909e4 4542b7853eaf5fee968d6a3faf39362995a2029e78749e896f739486b22f ce11a43a6855468e075625d5e8c489eb58b0fc5e1a60945bf5a6eaa019f8 3ebfac5473fa2642358e162f1d8b304c5dc059894b85f1fbf5c71ecb204d 6d0f1dcff0900991061e7ac4923e80e6517c603e3ca4f858bdb774a0c62f 575c315f7b67a6fa3b04dcb29232fdb5945ef22c451aa21ea48b98254279 730c87964f0b458f4724bfd98fe29e46a3635d2a628e3c29cf87b134e06c 9778ccdcb27a3dd5e52616579025d8422db785abc7a44dada40599592160 6a23a61a36fd68a32fae31dd661aeb3133c51a86ed85169426a9900e82d7 3bfdd805245ee636cc77798546394ff16ab41c70df68a2078afd140e7748 3a32626f0fff3048f67cff0671cdbf643b643bf40307b83c640d04966bca 6a53f2ce358f67184f2b5e9b5e07d519dde3d4bfe11b4e2870fc61b91399 828e0198fa2fd6aff4605d16e6a05f0d0e02dab959627da81e5f17ad81d6 e7f77b7e9ad739d41f5af01bea80936f7b8edeb7e87c4a7259eb9bf91ba2 e2d295b5c2128c3f59c6bbaa71f370044f4ca162cfd12fcfacb5f8e8455d 53ac359f7be2d0c8070517404e6585052f436dd37670699e04c0d51e112f c411696be6c1322b7327ade170f97877891765d5885e0dec9e7707ae4b65 932764a2f1067c581d8a68d4e3793f766f4f6cf0cc5e9b17b4d4bbbdbc6f f5de62c9dc9d98210a9930d6799e381148527544e28f808a08070da82f93 2901895c89e98c2865ea9aa8d29df3677bd4f33f44bfe0c354257d9c6613 c7dc18899ced9995707d26b727306b43f55fb8f18204ba75a5f2f610c0fe 55ef44fe989bb8bab4a967428d3415385cea7aac46cc324067665dfd042a 4de5b1d10ec5b2b2de458a90896acd7e0c6f5f2b9d18d62dc9601ab88de8 cd95020f4638bd2b499f29e8146203aeac6a1a26956ffcc36fd1f26cf004 fe06e90def1263f7cdc0838f9410eead49ed793582bd89d065b21789b59d 5f65e17fd7926ece7fe6406740504b770d3c014f37f44bed573938805abf 09af3a9b77fa0cbedc1f8ff545572f35c6cb29f2b8430ef108cb9f9a446d 2a671cd4512df6193af8e5ce84c6e68e7cafb5a5a34ab02f9d86bf198c61 72352c8044a28de62bef10ff36191827515c4d19299872cb7cf98aa8a430 0c721b26e1be1ae710e1b37b37875967796aa903cc4866d6ed387e5b67dc 0b4ef9670334fbdcb81d3083ea3d042c592493785ea334221e5bbfdda6b5 a7a66796ac5b92fe274ea50fafb6b8edbb85fbb177b83573f18c9dfdaea6 1ecc1eccdca9ba9b2de83421b0280e3470ceff15e409ce5ac04126930504 56e720ec603e538b223c0d29d324bf80bcce08a29c639e92892320b67a98 bbd35e09a0306baa59bc401c3fbe9a3cf8a4451fccb76fae8c91b70b3fff acd3b5a1626078e40460b3ece5583f2a97f93d8fcadf61571a5b708bdba5 881c602307197f96fbeb14aac5b11fc0e9e7744d6e6af2dd97d00057dfe7 f95d2015ae2639f9dcb99c7c10f0b4b64ad6e17e4f028b5b1168e4eb4aea 96f3d276929b2fd2a4ff6cb2de0308d2fa07331d3562fd18d7240f5a7586 7483b0e056bd9fec7782d67ddf250e3aabac012d79d24f152c5cd00b7390 cd3c87db8b71b27d4d2d47ac824344222a75a4fe12add480763c91179573 a7d0b87063c708ce01f25c552dc10030b4761950fe7df2cfc3d868a22161 017d1ed65d11a9ad4e7f4c91c807f1a3b29e36e68c3adb98b8e7cf306f5f 5abc54e3fd833e8d86421f05002a9fcf2b4fef304577da434d9eabbbefcb 98deb0a4b440e75f267ea7eb925a71ca9478c7d67e592fdfea68b6b43559 f49e5ede82ed83b20a8bb1ba9686bbeeef3345cfa446c5417c123b9fa79d c6cb289425652094355e12e4bf20d242e022f0a36a1c192e7b81ccd292c5 00abc0190e704de26d93af82d4e1612a7f34b3e9674f90cc8cd168fcc59d 37bdbe2d39d0a3deba0d947d0a040e51c66d6ab1575036304d677429b2d7 780d60060525ff34c8f467102ee464e2420852314c0db2e5177404265a0e cdd0ea023cd5c3e3ebc501b6597357f31ef16f6e8d29cde700131e6c87a6 18cbc2bafadaee8f9dce7328de47f44c34f2dfc7905f4b554b4f1020028c 4b94213c00a3db0bd2ab6ad9132786ba384da8c0d10c0b97b503557dba07 ebe97c4f3f88f2be1d88bf8b2e276c6d609df7e2b76dfa338d28a9d3d625 2154d9d0308516cf2058c059246d2f0bbcd1c86065f641335c5a1bfc1b66 bdc9d23f6e82b820b1806e71af4fc244338a4ba07be5196ca963c11e71e2 990c51aaf58d31c48dfeb200b8a1ff28621a9b158ebb558569d6c2c8f833 4621837f9c5f1932c0ebc51ae41a504660de3148e849f13247dc737ebd2c 08156174c0f9ff78bbf62dd5d20002b64f4968548a5a65cd6c291de4efde 5db8f776ec9313d776d936dc02c5614b313bfe2f5282b2c2026c04ca9301 99629c73a256b8c52294c363f4a7404adb6dcbf27813ea8d8d9512df10c7 ec7cbdce465d9d4c78e72f3a2efa6614f01ede0d23041c4fc16ce4504beb 17063a97052dece31bece5baa58214447fa92a75b9aee80de8c5aeb84416 1006b450c29b756c1de771b3ffd092bbed88c131e54e30915af31a129a15 426f376b074d5b855e19995ab0be1cb2bde423680d2687bbfa6647c39670 412f7952373a46c1f1adf9c2dcca37b360234322060b3818cacd5099c380 1496c2f0d60561842410bafd9ef4a06e0fa0bfb1aef87c812b64daaef701 ad1fd5381086f1012632381d07ab9554d0aca30ed11a20085b141f8d946d 91834cbeceb0927a70aa62c292ec5c2745a81b9c8b9a901320172ae1741f aa52dc9f2827bac18b1b05eb257b38b844f5ff044241591f052b91682222 b3cc2b3f6ee1720b1cf9a28e5c9b91151845ab5bff7465e18f355c00d657 ce61b0f226a5cddad94f0fddfac9503e1687b2bbf7771f6d8eec8ec5a337 7ddcc7275805a60ce26c1ace8bcd8f6406cb00ad46455df9df46defe2d8b 3ff733ddb10496529aadee8b09b9f9d872befb9bbb2898585bf44efe227d 0fa9ecf634302136605489ec2d24646a017c5e827cc7e6b527177b48019c 91e82c80e06408cc524dbe1255dfab32e9a21f393832f1c77cdb74dc1129 e30eb872eaf8c0b14fbcb4c7076a52f2b2fd4bddd625b11fc2d7d790ff04 1519b6f8316dc18f890a8e80c2e5cee9fd19ec9ba63ba91776db26eb3c5a 709d6d78f9fd5a10875efb48fadcf45ba98f6d93321dc9c0b3d6272f2ab5 6caad529d5a35b39455d8334f9c9ae0c7afc5e98503eb960d352265afa5d 602977e90c0f9de82922a69ee6affbd75216c7f53a0c6e119b5204ceae4a d994dbdb65f06999e06045da5686e0f3d2bd21bdd3f9ce1cbc9bb655f0d2 95a7a49871633981d177c9c8693450738924d95447b929b4635835e9cdd9 20b0f7e2c32af58534e2e438967f1cfef4fcc36c0ef73f49998c1497b74e d2d437479dc758b20d8b8eca4f89368b8d4ab3da538f6f8812d4f85a1507 502580667679f2b065e3e80da2ad87af5a6fc70ea1fdd2f2ab917692b7b2 9289760159a2cf9588c5879110d4b21e20241cc30b379d138553489700a0 fff3f635e22077ffaa2457a35cf1abf7c62482f16aa5ad993c8c1efca79c f5186f1ee282d3008b805a0f17edaa33002e6949a0b8c45eb575c3f48f9b 83392eeb3796df066cb6f41c2e2cdb3948d0ab8a12d21ff171784cc10daf 4af538ce67ff43f3c52058ed69c9ea5fe9ca7994a98709457c80da6b31fb 634ff47a5aa24be0cb39f90ec4b6b1b882aad8299f113fa4881ea0c5c1ae e1ee48c4ed37e703d40a41c68e1c8ff8ee17df79b7c44a761a3e94cd4f0c 67dd5a4d70ceb2c39c55c000150b32ed99381cae276e88f43928e113ddfc 95d953ee30461f59a22eb8289e2a424a95f195051c6870bb903857590915 c4cadb39a8ad9e3e389d1aec3757845da5176553c61d88996c9d5fe15087 d501bd06fe449bb7851c737c967c9d4c5409a27f70db7c2cb65d3fd03528 8e5ae0fdf2e40d526a7c8059345dda300645a405a5fd0ccf1f09412980ff 0b2ffb6e814e297853eb3e2403280c4afe1e287e5d7d3218e298625986fc 6f078becdf95c4ba212b877d65ae5f6192f5d0991a9a35763f97793e61a7 f1029fa5e95bdb6c9c8a51a17e5fa7e28fdb47ed58bd17f47c6435c9b4d9 4cab9b6fe9aad8866eb40df2d1d1f22caa967126df87a435c318064aa0b4 3b314624d60d435f78c0f00e6239fe094f414e67c29bdfd5958af80391c5 582b6e6491f2d4894da11506a1fbde033ac95cde7b1d376bf5c26398b99b f9dd95238549ee8ba111fb78bdfc49d00599816364502576b5830c469036 acdd1f0205ddb5ad68cf9baa25767a685bb053061a00d928d71e2c42ade1 61b7fac0cb4dd3b92632d093e2ed9590a214b841e533c24c3a8d6717b80c b61a1ea649393d83c09028b116a2dad7149b177ac000bff1cf31536aee64 c8222cf7762086849529f4d943bdb548eb1c28f17b75f9b1cd74dc93ef4c fbb932a25b5f22e770d270c7de2ad976927b8f7505c3fa6cc8baec08f6b4 841fa81d1660c711a40fe7fe502910290737444131eb93197eeae80089fc 5d324400f2dc4b43d54d3560be9e8b9c1f96133caae4a4a150207f0ba32b 6a6ddbcc9fe2c33103b1f7ccdeaba1780af8fe6163c5143f5ba87302de83 97ee8bde46e2d9e9a93ac883c67862c1cd9a946ae0d5cd7509cd59141d22 b9ed52af3677af23ea6e435c5055ed46add92d2bc688c0c7ab0fe16ed284 986ee4a418e5da08a2c5c063ffd34e47024fd2834b430133fe3fa7861eda f9251acef02db3f2650112470557477a15a585a40d5265014c124f639979 65899076d9d1212eeb164ab09e95ff84c9233db67542ada37ce79c7d2017 e07e5d3d4b440360e498c10e3331da29fbff26de8ca7c53e306aefeebbc5 151a5fa1905a94ed81c0da768feec1b92e3066c339ffb523245f713b93db dab6a438febefba3a0d086186e1dfff29535e9a7135db11d3406e8c94826 3aac9794f2a54c3ac32986b5e311f992284e53ee069b8ef2d86db639d1f7 a003cbbedb1c3bd9c25e1c15567812046f8248dd3bd70b6fb4d0dd6f4e58 de661996858113286fcf45f72ea9d1f17e7c5cc9bf752f54c04dbd85a72d f228edb13fb0d499a082a72f722d9bac565edfdbdbab1a5a076c0b927a57 2cbaf0d1e65a0e52ac7ca7ea91c1728cd3a0823ea34d28538c751e014e6b 6119db6f32417fbc37dd39f879697fb395035044ef926ee9b2f078df8d9e 4bf71436e19089aafb52c1b9690a63c421f0c266dca9dc1cd5c5eaaef1b6 630f3dc181fc9df0439f5129ade137edf9af0058ecdb46d94de274ae8ebf 9107afb5526156ed3564fb55b769751c929c5837f2d017f612224950615d a20338cae636226ccfe5bfee4cc193554ac163e4935cea9bd1a71a704e62 2e02fe3a65442702f2463198426b1df839ea69c4aaf93018412a7ad04838 f200dead9817e1796ccbe4f001e4ec03ef16ef9d6b501817acf4cd122eb7 768fd632f7989213dd28fd194d3ff84a3bff013773a77f0c8ef783a81ab5 bf3cbac9041988dde33e0e23a9118460ae8b149371dd4e31cdee03161b36 a085de774f3c59ed5565f2096b673b33130a09501a4f0a6d0e36b30ced6b b89e470d311d5e2d3d3114549ddaeeb1af4ffe852e7b6be02d0a54ff5fca ff39a734daa925746cb902b555b213a668676397870f7e572b191b02ecbd 09345469bef17eb0e340a57cdd04a9ac6c4de93933019a20328fc9d94e4d 68a6d153a67098a2611d6575150b2a93dccfc202c71dc317be362730dead 14ee732338d6b091b916193939db454fd667f262f05fb87f582d09c8c619 f9086822a217dcff328cb73dde0bcfb6e8bd1ef2c53eb4b7a2bf14eec9d5 99f399a8599f865fe0b37d8e545d883d3fc833d9e697e92b6719fe4af3ef af9382824a4b99122390b75a6f332fd652e746af67e5db23b23a67e4b3b0 40a7da24ec51e80fbfc4f2f9e3622670644fe111ff47a820fec5b721b944 bb31e0d481c154de1b7ae0e5038b40183833348181a7177c4a02751b5f78 e6c25c1da2c16ae4f0c6db057f1c500adfe32483380aad8e980d4355214e 5c3ff20217f4505cf78d9a39eb87fc9a47311642ec8ff7cca0f2e38e993b 049c1eb33baa6e3551b53ba6f339442760384a4562c0d42661bf625ba80e 4d5931cbb8979485a33b586f78733000ab045ae54aa11b31885598609aec 0f2d4c450b7bc6ac2091c4859b83e822594f5979dabb3a06d19a6438f5f5 dcd2066f23ae0111d7741fcd5f7d3b3915d5eb9f754563da012fdbac4ce4 3f18bf6d7b059a4beea673f31e8e07aef90838f2e98a214c25106d5dcd15 dbef8b7fe17d297e375024091ca86bd99c0de5a4be1b90a671c4513e82ed d94296f3f5918ee188e4c9c2ddd0f579fca32614ba56b484bff5a3ea11f5 b76ee7f5bfb1b8e100cc7c499573b961462e564454b7b26893f0f9929a9f defa02fda142c52edbb95f785db38647d87667c8e095ac77d9da34187f84 6a164b537fec8c991d2b009acc2c468847f7d598e1bec549b6816442d7b6 4896d0706aad33773e91683b0d9a127aa26818844889dd26e0869fae0924 a4e2893f620b342eecfd5c032eec315c1b9297e733819beb046d50917033 e46b1d7171518da11cdd3f6bc06a4e7b30e42402da190130a7d4d7a93084 da59fde498f0558426b7be301e723acafaa1549fa341905a6a6aa36d36cf 4c6778ebbdc771c533357eca5d52a8e78732dc34183ab9d641f04bf03738 a4bfa36cd12573cb63552d3f8bef435b488b7ffaeca0fb671346b8af22bf 6304a8b8b076e5e006e23009c93e073df2a01ebc69c5bb80849b85fc635d cd47fbfd2876392cd1b69cc2383f46ef2ec52f1e440786e05cd2c66788d3 05e1680b0e9feb944f48a75068aecc29ac0015237c344b7a16d766f045b1 dc34b1166836404e65c7de50f3303983f0b159dbe883bcd9f15dd4b0f34f e14e3f4565923caa7ad710701051b386f86719b348c59c9fe2eef34a16fe 0e33b03fe56df66553bc0b30db3b96a11ae8e2cc367504e9f911291eea2b 92f60a5a9d9202c1529f39bca861bc37c56029bfbc70d39e6634b11badca 6d78f7b8c7cefbf8013277703dfb3b0b6e2d3fefc6a557e14bfed02a38d6 13433dbd22fda5a8e79e009882623eb8696d9d729f92221cf0de450a97d5 e5bdf4c2063dd5bc6215230894ac6f653e995dc61ad80cc555a9479605d2 fc4256698bd31775f9ffeefb2d8a52a5153d5a927011cb0c2dcc6b380ead 0652744b4cdb57cd7d9881e80569ff5c83e9ab54f849165d7aef960769f0 92c0c1e440c35d3be657e7bb88cd6119310b4a7775e7e55f13d8c281281b aa6516437abe9d9002c67137239dae40d9e4ed6c6ade23bc6e6b3d2cb067 3d1879f8b3e589859c9d2c2389dbedd270e64a0328b7ad43e45aeae5acea e5539ec018bb600392baaaefd50fc16de01a182d947aef115aa3d532bf57 b7c12252e8f0da918fbf71680ab50cffcd61397527f2cc01edefcb4706f3 04ed2f8fb460c2f92979762a7d98c85125699f14ec2643f690e6e51d947c 27cae36ec647e182039986680d0290760f7c95f82bb02ee9255448b7a25f 6f80d5b50d3139827ec5c1abe65fda0efa535d3cf21b044ce90c8b7f4b8d a3ca3824ab0a7e87f35cdb351d7585bfa7affc1c4d0e76ecfa6e03df84e2 674e2c4001a3183fbcfae9c9b906d2c26fbcd04f704c2eada77012fb60c5 e2924ca25c198b5166f56ee9e34cb6e74789d820ec41c3e1d1bf38c751ba 9da7fdb9cc0a38cd4f8aa4a19ff3476568e826cb9df610bf969c03ea534e 6d0a2d977d81f5663243d5bae827f8050bee6b37e11f0dfdfe2025532b06 39471a4659ba2042c46c44e35bb134f3e6cff4202ccb6c678361690928e6 9983ac907ffb69beda6867f52d253c12632735c99cd1716f46e8b9b596fc 1b3e6cdae8be34ace2987c6546eb4edfc09dab489e4faf9e4eff9e50fb89 05966739ae94fd50e3fa7a8a6be054b8b25509bcc542f87830c61d3805d5 9893afb596c5578d7dee60f1e6c9c82c60376236c212c4b1366828b8ac8d a89f4ef17c38d8b0feb4657c95d7632851715703dbbf116379a33852f885 4c488a01e7ad816c30420f5c124f2bf160fe4826169b9785b54758003364 e132d23c31a27672b775b55c893bac42d0582d746321ac7b612472a8b1a6 37ccd068a867730675ebd1b600f2376554dddb7d0d7423f804b30454d4dd 7aaaa8d7f97d53d8cee2363774d7e6b2813da604215a8b3e61cff1680172 766954c2c5bf234e984dd89b18fb957d817e89954c45f1ff8a543e84fac6 3171c69ada01544c6ed74c5ca284bb7c96828ab2c37308d9237277b21e73 5714554dc0b9cb964e5b380f7857e9e1724f3ff62cd5e172a36218f1017f 54e2f27f081b4e07a8a306d4994befc3374b07d7261458c7a629dd5d2369 20df81a8cd26985919aa598fa2755eec8212f9d229b32ed5aa83551fc4d6 97ef0cfa5461161e69d10607f45e84244a799bad9131235bc6f7b1a3b6cc 0d852bd599d85469bb9aa61661d80af8d46ec11eb4915a26512c0008c4ca 382eb6cd1a52617c93165ded0c90cd7407fe722afc2a5b926a23f5045785 962b3b774995e4e38b64217dcb5017fd38b2575fa04c7b3cc0b51f7c90d7 e8fe89b35e536f06b4f31bdbcc31065bddc89a0b0abc6b5c2a2b084deed7 74ddc0f258ca9a09a795e532e662d76852c7c25beb9b7155f12aabd756b3 eee3aa693f7f96228aca62ef3b725085b39ca035a8500f44d4cfb2106406 c14e361f8503c2cdff4e3a761df6d6fddb90fdb394c6eee6a834ba66033e 595ed5ddecb4f4a67ae6b90dea98716270be19d816074e4e4f398471fdbe 9cb09541aa968ddcba9ee634532436605b6846fe94ae01284466486fe358 a3d776248fd57e05df94e844771a6b22ab13d34e96772c4193ea4ee2734d 09745162b53369c5cd67ad3a7d85ac3a1fe8bf030f627075b141d30e3c6e ae85661ef2ba84f4ef3a9bd52ca9a367258c93c5cc64b023f1841c793d4e a86c1c7ed916632bf30c27280db9c5c95a4538db2a85ec19b994d6d45660 d2913356bc864d1267846731f452b0d9d0b94ef5874f62412871793973d1 aecc369cac86011e1fae9a02bab57f15fc40f456655608bd5f2c728e7083 2d354b310f8b8e711369f597e7ae8aac4e2090c6e70fdc517c728796a942 a02984191664e5180c555fc461389c192abb3320bae854530e90d8965922 b1eaf8d88cc7d2bac461974afcdb1f746e3a177f141df5586ccc30bf9c7b 40d611b99704998b4aa2f8df9dc1aa40c12be539cff34524aa93c9afd65b 6f7d2b15ab7fbd95cb3232c27f9cb44117e593b55a794ff63ef2f348f032 3858b23d9d7ba88b9aa2aa2f253c124a1fd2ab2d2b9b1b8df98b847d3bfb d8bb131465889b19507d855cac90330bcb3ed20cb50fbe2fb9f3f35b6aca 6f909ef42678a3d473be7415049054694fbf671e38fe65641e7e24c0144e a28de8b851f5ef47e53cc1aded9a3b944c2621338789d038a1ec955d936b ba617795fd4fe51717df5f8a2e39f41535f6c787bedfc2aed437d0eb811c 91cd1a145f043f2ce706e39f306a92b1501cd23974e76d44dce1ac81ce96 fc8b583e56053335761270652e4b22a3d712b2e61ea22f4edd2fe04be15c 3e9a8e9f44d4fe90f3f7509a628af4b4de4315683e204d5f480f8fc914bc 963e120f1d16be6ecc92a7e32973ccb5ba715d706ac8065edafbbe2a9164 e98a8b706187b3be077c09f7478285be1b1ba089eceb6c626bcd7c5c4c02 629d078e9a93f4e20229121f727aa81ca6accae586abb3c0ae0216f61eb0 b15efa96fa50616ab0a2591edd7b4ab09ac87d5c24de374892a68e026a79 1b45ef3008ffcc06525ff8b5f5465debcdd0c6772f33765717571dc2aab6 61579952cb7d5c4a494614bfe55cb51bfc820a0927aec3f4cafa536d982d d96dbe4788b8262e6a5fea61bfbd6a80947cfbe538c717d4701f758031b9 ebf859ca71975c711484b32a064757607d3be6fa321a3e0189c3d5f916d6 c12751c06441fdd83314e3eba0a229a2a676305a13e19eb6239308ddbbdb bd38a55617bcd4823e47b07903e18c6e83f85d557d1f159df6ce3fcd63f1 82bc45d0b68fe3abf1197fb2b07849c5a551ac4a7d3372d36fd0220ef3eb 167bcd955869b80587d1703d8fe7764118bdd274081c8dd5ad8d20da66a4 6bc296c7800788ffe21e5210a78f167f3872defa3be53b0fd0d437180716 1be12fae1956e222456c997ce52e20f365488e2f682b7dcedea4ffd476b1 fc0eff1f4cac56530a459fbf6d2a8056eddc211ed46b3151bda1da3a0b81 a35a3843f0764c9ce836691171e37622da2e0e8ed27e9c66ef5c220ac231 b28b2f5636231f3d077695d8fa05bc034b1390d7dfe14b7547c22c3eff1b 8da0ed34a1036415fa35c83a411c88fb05a2b4af37c220942d3efe7246a1 7148dd97bf0d1d4ee1ee89b55738b716ee011a3328338220442d847c69d6 af46e85d177e30c7e9c5d92de61adec56510315280f3b7f4b0707d379bde 95558d168c50fa2402159ae89a218ac95fb982fc2d4ee8779fb0b969d94e 97c4ce94937094d2c30096cdb43b357f11dcbac4d8e002e3a6eba63daa9e 77f1dc148830862257a1b07e0dbf24c608f378f921686ae2c67c64c6c37c 64310dd0840ee5949d5d1a7e24700919eedf78225b461270d1f1065de727 4a174ac4981e93a8d60b23a7319639df9de8ce8ce5de5c0349db11a9d584 c58dc5d53eeb440910361e8b4344a1c81d9938940a90663dcd291a162b78 64b9c052e45d4da7112bd2449900677040d3ce35c108fa59b2a1a510c8a2 81bdb36878b7f8f39b4aa8a101d923474249858737f254e3cd7574905a3d 06f31703284bf3e3bdb158ae448e73683e1b14683a759db65aca5d0fe621 50352c9d47d8615c6597d84754bf02f201b765cc78f3a04fe0a79708442f b2f6da97c5fca3c0db50b8eb3b82eebc504fb0cc420b267e2ee51d82efbc 8f30d438a0c0025d8adf0b29eddf42166d95e8c46feb632cfb5efd968011 9d1e380851d2de03ea385dc0285521b9859d25d843151519c5fa4b7eeddc 819648dd8f9c1719d18f34d0205585848c95283d48c53bee86471c81d4f0 5531fb4476fe0857d71c577c133a2584384370382352ece2798f1660a254 36ddc40b94076a9d14ba2df0046ed916e8f076e8e722606545f9c44a3659 1bb1bde1a2038ccc141fab6650863a101db6bdcb958a1f42e5961c10c978 c0a6b62ffed96b4cf75f54823e9ab57b2120be1fbb8f5de4c0f14e160948 a54bd0a3e908caeb64b568fc2a043983e661d75dad80651f6ab9db2f0cae 0b8123a7fe9d6a2402990d22690258fb6a6497a1352a3c410672fbccfac8 72830ddb1c4e8bb2dbb92806f3cac8fa601a0c66838add460198fb595996 b7c77cfc160410cc56395730929778cd483dff94f53a0a803e568fb78ccd 5e60aeca09f9cccc5911760d825c595ddf5f3891610de8eb3513de47526d 6b88ee8effd35c162ae7d0fc2f6bb5fdea4fdb00790207d7795fb3baa3f8 42a5d01a7dfc41eaf3522191b85a64e675d6ccf679b65df5e659c3cbbe03 fbe74dc0b85853d56392be165e4c8e8f9bfbe6477cd9a3678f50894499d5 1c15b7edd4f4ecdf79a152a9233bfcb1213dcbaba9bd216b83241e9cd509 aa1d8a343d5237a5b0914d3a84d3b96c5724be3d72e5f52f5c0b823c46b7 189c3c929d8a9224e077400ef459c137b39c45a4fd6078ccc7a2e485b983 cba0a78195c6151f81670b703f77073d937e01b6cdfb67ee842a50580f67 eaa063b06f68c64bc1647f85bfbcc33b0374f2925db049a072f1f4f03c51 213b13c84e83cc56c49e06a9ba4d572e920b4213e45e1231d49f2203c566 b1227623647f9b692567f79a9c5096520c34f2c4aa57a60260d709e7f020 644180b7f0ecbeeb35c3f3a7bdc6a6f5f60ae6242651b8d8c5f6831ab6d9 02e3f6c8eae28f957cb62cd3cb29bbcfecbecc500ed34aec632e766abe0a 92b36cc62d335249c66610bbfe8b205b17d776dc8c3e64c12ac933059507 f9674453dc187611d97b8ccb731ed5919dda2fa9cadc16aeec2cc1a450c0 f5d1744ec3cbbbb2e31336e98e7aa2d9b1277a79d9423916c915e6c6b501 2fd507924423dcd5054bc4e3952d42264a69856be4bfd266885493ab0aae 7b572d17012935caf83bfb881d2e78d069d86a696081d31fc323e1871ee4 4197726a3d6bc33a1c95e525cdb55a910d06e68f90e4520523ad8c1e82c5 42c3c3d685213cdade5ccceb259298768c742d07981e5fedc14204495a23 7492103735da0e99e1f9c73eee0033cd369fac43a20db279caaa913788cb 57cc87938314cf80f423fcfd5e871f31832f41c7a47a84aa15f101f41c20 0fead50ac4355ba8a300510b8c9e9ca680da9a2939d128e66ae126b9183c 47cae9884796bd5bc2fd7a6b56b289fd1d1987b625d01bb82d669b322084 a04dacc4a27c00c2675254cb5f1a9486f4b4e0e7021a2d0c89970fa7b73a c50a6679266a36a6349b7e4d8a11c126fe7d1a272e291cfd26988ce16f47 498819398c5b58329c8d1144f6cddb8004f4148848460dfd9df24f3115a2 9fe3db12d367c0a7f51972247ba9442e67c5a48e14a9438e9c025f0c1e9a 65e8b0616674ebf8cc66b3f2fe19f61a0c685183d925371a94a544e5f04e afc4869676e4e1eeb871ae8ec782b2fb9117cddec4eff791fe2b26e7e9f1 0db10d8cdd6ee4bcbecd37cf3cf5be1c60e1857bd7c9b9808596a0bd6bea 99134328f8fbd1a1a5f686ccf9a237154bb48e0f93054e3d8ee855c0dd66 5d03b3875fc9837ee0c18ae2b0ddbbf5bb22259c1bc6e8e1da1e3b9fcf8f 3c3dd862e2caac43f590ec960b36c46ff7b610b8cb4a7b6c8d5306af76f9 7288c34082b1ea69128911aeb7947e6a7c1279ccd3570507b8d19065a871 3a48350dbb2dab95da27688abf0aae524cde8bcf939fb1d5ad87463a797d d53435b36618b71dd14657a927bb8554ac87c40d18a1735a30da4d015328 7fa1a965361b541558489dcf3d1ab70968919720d98bfdafe31509710234 3272bee771cbd641bd3de08d6c69f85de1045533fc2b2b973fdf7d5e1dc9 772b98eeecef386aa94b55948dd8a298df85c87e4dbb0a2539c86b54fd81 9dae18d35307e7291d6ea27f85860ee8eb3f594a1edcdef35f2545317506 ce19d594746b675542a311421bd7030aafc4211d35812410713ba66dbf32 4463a48d60be8350e0edf1545335d058f8f4ad1f521f47ab6c4f9c852309 8e4deb4640601b38de7e6ea3f136a8b2f2da40c3d446a5119e9008d1a7a2 a59a108057febbf0475ccef01d929461d68038d7a8c44f4c0f3b66535a7e 1b24e49efc95820fbe6ce0650735b950117314d1e761d1d7c63fa9ea5fa2 fc881b96558b7fa97c899a0dd200aedc591bfaf090edd34a29ba3a6e95fe 970a1855e7dc3df4f380a7e70bdedad551d19587781daa4fcd2d54726a23 279d4210888f1caa04b5d76fb8cd720be7a351f52c9ac66db5c32e3d24d9 5cd6bff61d74f295f2846d450570c58658b58a78fa8d56f2315b4dda4f6e 5eaf4fc9fee48a7858873ca0a32864f262730c27e8df01fc2b4646c99425 d4e59934cc2ed19f2b1d729cdb52be0fe679a1378bdfede8fd9bc33322a3 0e4689ad71b1e521923367d38920ff1a7042b1afec6747b6a7201d149605 a248a53f52a945089c2039d9c539b7387b5cf66bc05d702186c63ed562bf 7ddfcb714334c3b50bf9200c17e750379ba9af6898e453477fb33857a376 c6b33de01cf87c2dcde5aae60d01c591dda0875341358d76b0c5565b6ff9 a64ec37d5ca41b98a4c4e7879f522561cb5a3ae926326d3f8d72a674c3d6 6176cc3dd4dfecb4447c32a88c9cc757915d1c222918720029541c41a765 ab523c3f8299bb6f544af0a2a785bf7db57acb9f26104ad5cbbb80e50c90 16ec37f49a70d1de80305127514dbf55b615d615facb46110a8245e32fbb b4e8d78ccfdf27884da311b8d988f9c5055c7a900126a2c6b12fb7a675b2 f8da344c0c4b5ad1d63b969530b33c3428b94fd718c2a18f925e27ef9c1e 24570d79eacfd5bcfc7f9e6570ce05ff2beeae349eaad296a1f0c278c3d2 1bef9eae57d4169b807daafdb86c9a8b62979484fd61d8947254747cf920 63f6089b12c0a5f470936fda88270043ef33fad65f084412e9cb4b79d61d 51b92ba4845c55a2998746fd7df7866262130792aacc2497536e83b3b383 84141d58717117e0160121b40435c35c5bd60dfab2a0b079a2b41fb075e1 0aaaa2d51d5618942c9d812db621c45cfde0914d0718aa9a2cfa5a5775d7 0f9494f9042b45b4036cdcada93c75230720a0dc6f3f97829b765ea00944 a4bcd483c5ac5da714c02679ed4215b4a32564333bc2968083879f8e6b5f b396d8687fb68f505cad22c49bc58a187592f265db48cb12df51b3989c71 605e9b19591ba584cdca61c543d2c842c077361726a7eb871bebf0a1a6f1 0acf3fd4e9c75a824f52b9d62289b32d4e4d33d0da9ab12ac6a056aa35f4 b48499d5e0f095c04b4531fe56ef9ecdc255320199a813d2be147ca514cd ce2fedc4b753a9a23e30b617737bdb2c7fce421205670b909ab7d6d74e54 71af2e64a4b8f5065be35fc80bd642f35b37696199084cf8ebb3814121a2 b9207c1232fc7a1fd5a4c1c5558917c6ba20c2e6c91d1363a3e14bc92bb6 c7fb61c003df6014e1f1bfe5e3a2f0875e8f2cf42e0669d94fd47ca6c1e6 b6e375573440d9713dacef69edd2e5c1bec85b4993edb474592bbf1593de 4fe4e9c9fff70d1c6bef6fa3cf4db213958967a90f0ad264818594a192b8 83a255d84fc5caa8c5df3559a8158ac911cd239fd16d19c9feb41b1b4bee 22c99ca2aef4a9dca9cd7c31a8d8bb0168c03147c19089f39321fdfde14a 977b3572735584b306823cc36574034331f0687a8981c2121d1bcf6ea59a 223f52ea7195b7030c9c0edb319b8525b9e925385f7fff741351518db714 73bc594658dcf44df76cf25d118d4472263371600ffcb3bf20c6a37bbc6a 13f099fea7e572298e2af1ea1cfeca85e77820ea701fc440f22dd87f6fe0 b0960bf0aaaa129b10da4ed27fb23bd8594d534ab776a63642934b0b06a6 dbb7852472e3c58290b78fe4cafe84ebb97b89949899a7ed18cfee500b2d 138190e80984fb555ecb2a4fbdda4c24206194d5aa7c412cc9211339f8f6 78b1adc94e3b08d62ab500b992b935f73b9c7412702b06d6d036b608b359 484927ef562966ae7f26b9ce379f975710cc2316500e37570ca21a28e960 1905398550c21d13125f9f4665ecbdba9a27b06f9bca08611b1c864445e4 75c59166fa7bfc22c4bdda75f32277a93d2d90d3f7527071fae6232cd8d4 b0ac81e9fe6bf64980e3e582a7a1dd67929e28179ae77404773f92b741cd 4d35ea3e7f5a6076090e756d5e2f1b51ce998873067a15fb14b2160418cf d0259774b332ac124b908de7a3ae628bf97c2e9a867875e4b2d85804fefb 5a88fe5acefe3d5ba2c53a1ff98381166b7cbd1ccf9015d93a074c0f6888 325e02905e72739174f01ddba1ff1f66fb681ef2a2fbd23af6b8af8c766b 2694bbce3239b97482589d3199b136e44c54ec348a1b9d56999381734efa 4a8c8a3922795758d99bb01c5e7ac7c9e04741b936969d771612bcf929e7 0034ef9d789a6687ee9d717bca3139e1b1aefb9e1323e9b8be7550f3480e ee4af722bcd7808e2110402bc1df631a2288e96ef8d8c15ade87f2e20aee 9e6a57d40ac4da08215624c765064e9d2f4689f6b641f0eb32c00d3d4d93 6298e9fb00100a930d0932f25c194f9dfda3960ed8d315865f173a513d4c fa9ed39aaa099035852189d260eb0c47070b3b8f2a7ca36bfd07c1254d90 95dea72338c75dbd8b6a00f02a696fe66f85c80a3d5a5519045136ccb453 280f9156086a3b8fb4d36394a268a079424b1d2fb785360d07aa48dad4df 45e5a886e6adc99c2b395068e4dfa3f31f28cd81e2e44c0f35c52300b18f bddcd8cde482b7ba913847f5018910ba5aa8d68abe4659a2dd5ffda10299 0c01cfb2dd16c9ed7061f55b1242af6efa7f6107a30f049677fec3764de4 940ac6623f03600f5a0e170398bd092dcb2c74ea9c9dd14969cb6322d3cb d39cb732bb7bf3a0e8523009b3bd1e397742dea6fe1250572efbdbe415ab a356ea929f06dab0b6b3a28f6565b6ed2fe7a4fd0e6e2ad2a4c27fb9c039 4d2f2718c52e7cfcce39c5ce3fbe23f2ac07c6ba781744a10612f2dc4d8a 93830e43173ed5495d2d0f01cc4c5c335c14fa07d4711eead44940bfd788 f2954ec922ac32e320c6f2ec23d5114dd238d26ff29f4e5bf63a1f03bbde b8269f3608c345e2156cd3427263e4437dcc60d7c95403054b84d59c83eb 3ce97feb56a6d26cf5a06077a2dfdb240037ac30d4337cf1d0d61ba61ad8 8a2b902c715eccdd8e80118bf9ceb68825f3d422931299581796f775c3d1 d4dab002296a9f6d43c78905ba4e48d868e1dfcd6179243399af504c0b61 dd32fa994bc6391b5c352d46160f6e1f7c2219d387e04e6fa6dc8c0b84ed b8940bb2aa1c03077faebbbaa23611a92b5eee4ee6fb76f176b8fa201d6b db3b8eec6641d9b7771727fe71d126e0079cc9148aa458ead2f07c2f6639 a8739ae9b1c68923a9251491042bbbe99faf6b50d67129d273f16b097eab e8817e3dae4f2022f863d8ec964aac2c27bd999a85a50791a726bb748ce9 02985580e8b53b3d1bbd99233b7d541f8c9edc8de0046b5768d6c8b1ffd2 12971482d5a36eb14332b3d6d71b96f28ce69bb17a5a518ad5deda7a47e2 106ea352e9248c219128fc5e974fe412b7840f1dfc05ac9a8cc324021406 51e53b0f9d9456f04efb59aeba33dd085b7a2ef8d44e141bb862c6bd3f95 8d056f9d613098d90ee8edbc093a1fd266a51bb84e0c06232b8c5c49e303 8e89649601e3e53f4bff8bca04005e727ad04b2afb53cb59084fe69807bc 5f37c3da824b9326fb53c790c5f8707d67cad2bdb73bf15601eda8c63ca0 719a429d2bdae429140b7106eee325bdc4cfa1db47f1e79059c64527a262 86ad748a792ff5ce7ddc9b696156ef03fb7ef73437ee25d537b84b218ae2 7a7bc74216b490c3a083366b3114e999ca5b804d6c16caef84f712887953 3bf5a03f88418f5f198ac06fd935c5f00df64506783d8481cc4708782d95 f57fc88e1bbbe75c04da44200cc5014419ad3ae2b923e7b28e5989112cef 4888416c3073b41a2a814ead06eb0ee19be296fbcc1dbefa592c0c5ca0fc f1237f3cab0bc6df3831d4e22396838f2d236a57d83ae76a4af70fd13c52 d79d659a34f211568d8ce47bad91828d2d5373e726dbca2584063adff12a 1edc061d0dc63312752a4b5b617317832121adf38c3fc6e65e7e7625c8a1 56cbb335afede7b0a3e67f915dbd5002f56db11ec9d68fa37705d89ec24e f520f45903bb67903d95da12e93bfaa553c1e216348ab87bbca40bfe1432 53774e3784aa5ff862173ce4f6a6dd10fa7b05c05aad1183cb1abdefe34c 7d11028f4a963ad0b8a85abe5e30e94975ebc7502b4864d1729b9720b72d afa2c89cbc4d3369101cc0ff77a9902d19060ccd7e0eb11bf9c62d493752 1a35757aa0af5f6a86b67231ca50937fc07ae71c744b2a7736206387e1d4 eda2dd1e55b93de5e8388625959b89c90252574c850543af45f229b2625a 269b4ac60d5723a99d68aac6a4a0bd1acec97433964158e4f2dbc5b1577b 89c2241ff9199a313376d40f27771f7fe44bf8fd437612d3f4188ff19278 19b7d54152414c11122216e0bf293cebf5c32d84287fc49e48fa1620c4b7 805f69d06580ee25ad4a503b1524437170ef3b22524960eafdd512d5d2f9 7645df166568124f48223816b9f2c86e92a058b2390166ecb6f84b991bfa 69583ed5cdb3c99cc0817d781472cf7fc601a12b2ca1c8f5a130a17c6880 4ee4b51900bd2138970be7b13643629051d64404b0dafcce3f8bb94b8e41 c7e3bf3eeac349c76ccc132c835c2050c6e465dd52d5631fba593aa9ee61 00a9a33f1c12a39275aa2e7899ba5a0a60acd9c3919b08666569640d3e82 6500bfb1ceecc8e05e217301b6a64ee8ec8f8947008782f0f17d323fb617 d21dbcd3296c77cb0652c0c019e87a235c463d60f8de9b803a7bfd309723 d2de2bb54f84b5d13f527bcde9ae1874eafc955488ed2c5a2e881d9a8e94 909d81ac5fbd16f29892b6d81865de52fc673d8dc46020c174b667f18452 eb71e2247e4ee5045bf5857a61d1675c79133bb6dd3b39411c986d3f46c7 a2da25e509ca897ae1def890b729e48fe3948e97a362950bf28a61f08340 28db36ec4e9059dd26aac4fff58390f0073bf4bfb48645061aa5e294bc11 662ec90f690577cac46c7e278dd787d606acbf4300b957c060e081ec6d19 3b6d608b785299184141189f1103ee6ea5d7fb693c9a7c7bfc790bf01421 8dfda207590a2e98f53d794f59d7f2a90818a45fe0b62fb2ac5dd0d3491e e95bb03beb0c805ec5c3cc6206ecc1be90299649246b7fd0e5fe1663724f 310932f447a954f79248bf7f7cba8e00df25cf431b79074453edf5e34cef 8fc2bb535a5c3ff6093420dc5e911962acdb83fb23fa93cbeeb78a2f8e54 373f9718877da7fc1ae88a733d571de6f0a475a33db95362dc725ecf3ddc 4b809104cf9c2779a819c9126e8cbda4e7abaa1ecef50cca6133f2e53781 1eee0a4a926a4d054b83ba873130073951c59f3e09157f224de0d449800e 3e2a819dc95b81ce934ee731337b90ea53a019259e40b4ad31e6c82991be d5e77e07c36e6947498b34644621a360c2145965c19f20aa6c98ce7dc271 a2757db571f6f38e80c087713c8c21d9cc04e187bef67ffa0e133f2977b0 75f6821a8c8b4fd85b81165a6fa37cb74e2e0c62bb8ff67c18789f794ba2 784781020d31e6fc60f8c796becfbb997c095f7030c195ddd8d6abdd91dd b011797102f5070d0986d463aaa7fb1270426631005c7b91e5460d498fbf 0a0142420b5c9649760501b03bfd85d704c87ece8e5dbbb32ec4a3db9024 b05a4be4c9e8c840c35d3868e234cd80acf81de8b6c8a3578117d89a475d 3af367496e3407fc96866f1d668e90c7e6e68e5d5bb852ba0fb2df43f2be b8cbb466d7453a3778b5b2a72ccc26770d22c03f40d68002f76782b4e0a6 a3fd2c3c0020fc70be7325ae60bef305ad891b2add616d1b370f59b299d9 0cd405be1a6c02810780cd518080f956771c7b51fa8f32fbb5c021e5d92e fa141fbdd2b891a8436174b45aee93808c660a4f2181238bc2d7f57af37f 264cb6caad8cf485a5abb5580dedc00289c5ed0dce7e04d002592bbbee15 81bae2f79829b56b65c4e95080e8dd5907f444b9094931cb58d762aafd71 593350da9bbf083460fc878870b6b47ec8f141005a6383307e043ae88e1d 47b85d800cc17c309f3667ba0b53993e5396dd9d108c3511742c9ff6f2b3 1cda9044b29ed33b6602ea5297aff727337937f55a98aad0783678cb7fce 8782dbeefa4ae2fc398f742a0d3c85de59f1c4206e3a190c4f1be259ffae 58e93c029640971472f1e29126bbe1986bb2566d2ea7d5d34dca2e1d160c 99fa00ceb4702236ddbc6ed3ba0092a2aaed1811bf45da9deb45dea46639 a75a04670cd696e84ae2eb6898d3c7b545335ca2c4db6597044f84eb90ee ae726c3ca72f886455bdd8043eb2181790ae2f831c37342de244a5b3ba0d 194a778c7a4a53c50ed38eedfd15bd5285ffa9468ee0a150bb81fb3b8f93 169518e6176ae459f5eaafa781c504ec83d96099ebcf89254bb6261cc7fb f094d0f66ea3e5b2429d8e3bec8c2a7bc17cd7e6f43f03de472e5105f4fa 0c1db4163ffd0c6b29f9e26e8fcfb9496524794906acd84dbb89eb762d2d 83a4ce1be9ccbb3c566738cda668cb1da6b4e13ecb19092fa5d81f96ee59 bef00e647bfb5584c4b84728ef405196b603752419ee12cd708eb7469eac 20c6a762c36eecf13cb9f62882d32bcfb0929d94f52ef74294fb777078ba 7d384a012e6b05bb035524168199fc48eb05dfcb45c0bea33abb42367e6c 86388fdcb3be18bf737e98f1146d29a82837f5f9cb7f11309a6e5f5ca82b 695b941a59cb236db41dad3a962cacc4f7ae69604176b63da416bac71f06 688a6d0dcebc2b65401a4d7a6449d75188560b68e7d4ed5383219c33062f 85f0d81ba36cddc287beb087eefdf791d92cb32255b53fde03a04080cf4e f1f942db432eb40819a1cc05d5b785d55f9c99918087be6849ff0271a014 24aa0e58ff89cbf0bd952a50ba6bfc918fc60843d1751d7543ecb0c53fe2 5507ef33b74669ba1bd1d62c95374a99af32ec2e9afde9548f6b9af75375 c78873e5e4857a5b13676a9d5b5bd1f6f1454f48451a7b85754bfd62566d ee1260d4425c26a60178b8e8f8b9393bbc040049e768b2f7452c96eb8a9e 7a96f73bf2caad836c981c346d3feda0422a28fbf89a00a99af034cf0d5d 58d241ee8f4f49599b2b3d6916d9dbdab6a438f447ff9c14c3e4e6819afd 04f0bd320b925066fc2859ebe643add448f6a4e6d29f248af52cd0cffafe bf05ceb4ec4679d4f2d80d6719e9d9e2342429cfbad19df81da3da5d95ed eed652215e346cad6f46b588d8e4819f2472274891f217db7ed7894d9f1b fadc4b8dd7ec9d59870be79f5e0824afb0b53e12e0f2794a05e00be472c3 adb55f4a80348678740e9924f848df7eda26bbea7381c869242cd28f2952 9a35f40b143c5f6fad3e4a3f25b70e53c485529fc0ef13b19f35eb443746 7438dc1b61caa434afa25a449cee8b198ec7cf4a21e95670f5ac0dd54dfa e0d4639b616a81b2e183ec631c3c903b115760a256ece51287c3569190a9 e95c94368a8cfff6661a46f771436662eb72abb420374288b3d459bc5086 cfe6d15ce941db96556840fbc96da477c59a1548d5d1ec1e7bbfda683b77 1f2a9fb46dd7baf01702c958f4300d7aea3608fb0aa55662d112772fd76d 1eb5b38a2a2d8496e9b830902d7802fe35b334b4749b3ba26ec58b2f3545 74aea8f4d7653bce99198d2f9b06bb81a4f756b8e589cac57d720730a217 c15987b59ee54d27aa416bb6ee51faa8dc71cb07a4dab5f2a4640b8261db 1cad73834e932c66e4127905aaeae799432436dc22857d0c60d1d9075b1c e78189e52f529ded81f87f78193b1669173897d79a039797595a602b6a48 3b490017a28759f922e2551d28de9b195d81a4bcf1d8cc1b2433c0602a7a a7a8d28e88ff9ff2acb5c776e5547c9bef0a8144fee9c73529463101c7cf 190e641ce3e0582a0596fdda2cd3a820bb3786008125a5c276424d0bbca5 7fc4e9f13a622b95a5f12d2f397bf716cf02f981e072e3ebd32f0090d278 885bf519067b9e299fe9ee1256c3ccad639bb1a60a18b70331ba4b74b098 fea7036acf68d86d230c6ffb09b31a8b2ce6a4a2707cc793c33b0a3becb8 1ac7934be08600ba3af597bd2045e46cb5d9b934fde3ccb62650c78785b1 b900f7367cd7bbd73129bffecdfb58ba5097f08921e8149ace1ce019f998 f2a5f3f7cd8121971107b91b125ecd501ad5bd2704b78e5e8124f3fcca3d e961bea439f725e8c5e69db96e993881ad21cc9e0a4b2cfc910c86e2839b 0f32b797e16f7b457188112ab83b948696fd75047df212c074667fe1a1da 6d837d7ec5dd298cf400113a3491f5e0d9af01169dbcf0f236c2715cc5a4 8a1337b11e9caf06370208aeff6bd416673be617af15c66a90c93d7bcbcb 6c39c74a191e767ae27713a8ee1bf6b88cd3109bb6fbdc85612431816891 9df175ed40102f08c74f68ddc71e8af131c9d19350d1fedb545d396ce33d e4c7e683bcad3cd63f20752650f2b147bec51bcf9a3f0eea1a4f2c020508 db5faf8a06da9ba2d6bbb08cc162ab6f70f0decf459f5894e76021619142 4231bed5551ff3155333f88f3df96fe03af7ae41da8e4ae4100c137309e2 610aada91360821aca309e6e9920e58e81b5e55e77f2697f39a059127700 fddf312011f19f94f8bdabcdf7a38366614657a57bb0aa018429b7bc686b 1f44b6bb4c0206ea4f2eb44004aee810bdd91f1b8ffaa62bf3b489d54698 f185f15d614b3853224ed24de3aa7e9d4072fcad9b0988a794f81607f0db 2ae2436162da635789e33b98b6b5a26d65c8708e9f99ac8d9b4629e16917 0e4f60be57b869f04817960270b5fafe68744e3803d47c96a2745526fa5e 3431478adf69ab30b5907570a9814080b03d8110736f86738d98c6c65924 0f25e689fb197a0ae7d03f4e0fb72e86c4353cfa44d24489d415215d92a0 7c37390aeb4344c4a70e00292dccb3673215929a36b9677b26093fa8e5b1 366e715c1d791f625c18afadce31bc2d96496a68ef3240ca91ac3e2bcdbe fe3171cb06c9037a75f15ab9d3b191fa0324dc953e18e8c835f87691f033 f28adabe1536b5ddf05439f62e5b15d8a934d23e4e2caa850862a4ae5bb8 2913160162f95bb50cbc58e9ca951307ac57a7e87197a928a88e2fec42fe 2a3681ca393775fc0f392a4062b1f6409e36cd45a5fbd9244a5358f82356 0ab303874268155ae1847e4211533789a77b21a4b5b8fb5bee770c4cddeb 88f341f15a0905abdf5ac83850c464fa59604ec0342b2dea00274087525b 7feb0a038318b0e6f68b88c761b6bf2a2c12b1aec70391b4c959083f4cda 2d8f3355521a8ad271ef938ff664fc8064125ab0780e4a185c1e8004001f d2d513ac9e1b1880a4c662ee5fe9ee7f0d1d9813f2d6e2027160df0f292c 47e066aeb0edd03a163e83584512c0e1cd28ddce95a637d634fbdba37a29 239ccdb8a2544f185a733dad4171b35a69d3d8735cd914da257e555bacf6 3b6d9fdc088f9bb6eda9d79ee766403f7cd1d7527d8aca916b0d78984b8d 4f3e46dd0f8ad83d153735fe956308c2987fff27c658e9965cd0bd124e3e 3e56c6cb1324b30cf31b642cc80669abba5ec96b0fe3ffb9671d92ac996b 0e52b8cf2b201064836b090c4ec48d13ca1776eb1189bd832cd719229b62 52d8d1cf3bbc5f4bfa5264864cd408a08dcfdc2fcb2049c5cac6a54c7f54 a6176188d552131281c755a4b4f8a4543ff772408b9305fe28faae974f5a ae606b223bb2df836b2e09e71334814f6519649b8c429993a8ad7aeb3a19 b4fe692befa92d96441684e64ff23bd66160d31b0f4101e0c8ee46de8c05 4cfa530bf522753d416ccfdc258935c563b5c9637266d5f520ad26be22b3 74c73b4e0961622fde01b6693319c8bc2f811f7713772dc0c5889bf68af5 a3e76f8f6b6b4e7511537b390f878368bf418b7cd95fea7c19881884ae65 180274e0e980b037b9cf683609f24c22d49b5f66f38394b68a509545ac25 21fa69100ff19b4976f8274ba6209e1d488ffcf2f8edcaaeff790f1bffb1 779e030110adabcabb373e7269bfb0fb8a8a590cc5368618da0229ee0deb 600f7059deb094680903177b62cc1a24bfa67065e41e24b1754b4ac23e59 f45621dffbabbb8310940f75d408082671dcf6b612b504d3c0100fb6b193 1c471afb7d4138aab91f70b28dcaa32a8a20a3053a7c6bafd293af020ffc f43e97578f7013cadb613229858ae56f0a491a091f6c090b82c9f9888a83 313ad6c67f6faaf37f53ddbdf68c762cf3021207ae4c33afe25e07ddf341 27d5123ca7cb45cc3ca9cde415c52059c2390373fd3b43a178c86f9a32c6 5af517c43a23f87b4c14d1ad3b16effea243065bdda875132334481d6824 5bb6c527207f53b201eed4f54ef480ae05a6516c497a738221d859b27853 49780329455312f80675542d6de5a162e6626b82011e1a3130c28e4d6c66 be1d0ce30e3af0504bcbc63e49564e26a7c15de885b007298567b883b479 71e8a58ff1cadbd17adc3a03197eca2f4bf79b5ccda3bad8de41b307a808 ddb5946b613bf6647fed0aff1f33fbb58687ddcb2a716737473732469c03 049ce74fb7a35c0b72cfb125cecff39ef7bf948733d773781058c5f2c1c0 3426423f623e1ffc2fca074c3310d47fe56626a091419b9b156b1e15a51d ade4adfbaa1f204c50b7543f9e331209df33b7406a800ce381f73d5cd9b0 854dc8445cdae98869be157fc0a814bc4cde5b44a226f9786268d0504a5b 58ac045a20f954425e6ccdd143dafd3088956d9bb675ddd5ee26f99733a2 1cdd700d2b69a1b0c86e525f9a017a34a18a0df6cf33f2eb2e917599f440 affa7736ee3461caed83ef66fe32703990caeff9cf44dfd1204c93f28a8d fad80a2a64569878def586574eea67c8f0131d4dd038ee5378ff5fd5514c d06849a840b6c8e91c63a50bc6cf9259f3f490737f8d4ef493f2160c9ef2 99ff98388c274c9e7b385fb5f045225c94bbf3cc497675c45c75df4a7b58 dcafac2c0e48591772972b2f607dbeed0cd7b269dd692bb4fbee781f2d0d d631ef746239bfcc7c61dcd1b8586bced12a4e1a7765b2314687657ce656 57b33748826f2261a0d9072943ae0eaf294216669b583d273b3e093c94f1 c5a128b813791c0db793e017556b9cffdb84cf2bc523b0773d7c5954a3d7 b4e439ec66c9da8459fc7d5a9e6ae7f65b8411a81dc36cbe03129c475d3f 2a9096e68da4d3ae1dbc85893d28e4838601709849377ab2b2028705c7ac 1300797f16c5eaf12c1babed5ecd059369ab326fe5a3464310b08ba00c92 ffe714c3b95228231b829e78f5d757c8093e3f8e2c29fdd5395c5dac930f 7b892c69c4220ce39161a6114ad9fa4f751527aa01fe7605575048835238 030027ffbbb2efd4bcd220bb7bd39458a2a1141e7871063708c674518741 179ac9398e36e39a8ee5ad56ef7574775c3e2c95a0b92e5cc70e75bcd058 d30409f43134995c8f7c11a613fd80ab3f63299eaac34412d162a9d386f3 e96d98a2e714cea60da89ed290693b7da78b92afbd9c07162a037062978f 73a964bb40aa6f24fcf044245cdc0d818951d3684015152eeebf6e01c4c4 f6d85252a1ea28041802fc3cc3c61e1f7bb6065777ebc4c7477e899a5af5 1082474adadc998ecaca7d14e268c6e30ecb663645fea35b6f3689ebfb5c a2a1c44d7add4d0dd202289f33addfe20d48992e9d6962ba2636b6c3c824 bd636b0b371a9fb1e5aac43c23e0a8d51f96edf64ef1660ba7ed811ba37e d4280ec3e09f687dc787311ad8cc3acd7df441c0af33863266fa0cca34f3 00746d39e8c45ee1120a1ddb1fb955e3cf8747af7c361026cb5610eec43e bcddd1527bdce23e5edf4598f160295005cb4be6e21ceba07494c10234f7 82f26ee3055a3350ad50330c7d415a804886e9ef6e84aedf2625a27ac243 c7e1bf1d3ca697350f881b89e1096b5f49495e09e17653bda28ecaba7eb7 d80a35bb984277f73b34dfd18e3222bdc976a18e0035d733b19da7eb21e9 6a07418447fedd27370c2c7ee34da3f2f74087b99923c8c0ee5e1cde0c36 1d418f3aa94a1bbfd1e1896696ff327bbeb006d87ef967c65ac7c7edb5bf c4a5b1a21e098aadccf5732049a7dc3f25d41fd43cefc2fe1cfe44c9411a ac1b3c51c75f8e76364bb401edd348fc60e2c2ac03724db8352943013ed7 5db5a42715fd0dbb38d6f6d61050f8609ee4cd84cda6d25c17657a61ab27 461e33f429944c53b958bfdef1b4a2a62baa335e922a017007cd8e385c99 b431ab13b67ccdc1d323cc4630a8bcdd2dd7328d912c9ed0df287b5d6be6 6446cb0aa0c262a40d3fa76715cda74f19d35a5cfba5503c8ef86bd5cbd9 0aaac52c041b514911ab25d32fab4c4f9716c74f565669499c2fddf2cfdd 71bdcbae56cf097685b66b75b814be9a0ec63ab1e64725e195b82a3cabc6 13e1f36cfe6502a2b3115714f676f478a275963e9f66514fd1af33a724a5 d46588183b8e304b4f0c3d95c2095152ac355638967d9d933489fc1afe9a 3d4c8dfd6b0d1155eb198faf05be5de4b53f847694686e0e51bdb8e8d118 f9884ead2f2722d520badb6b00963f1e5ed5357fe505e2bf59a384ba6f27 ac74657026106637b44edd9e148bdab8cb4a9b9ee754168858c644ec6347 59c85607b40801e9dae3b01b78eb0f6576903c127db5937d0e68e8185233 60695d431418856b354536d0a101cfa1bd9fd69cea212c011a5dc367b17e 1e0b3edc32fafe58d1c3086f37fcbc7dfb5e19ad3caec80ed1d06a979eb1 0af931f37a98c3ce1508fc7b8cc94d1625d06dcb961e8d21f93afef3ac71 011026cdf862db8956f71e3b3b616375da5ba66b701edface0c8bbe6e51f 9b991aee4769d9e617fd60fe2fb93093f7f170e5ccb6b0a1a9b1c855210f 96ff2050b5e74768c7651ece6fcec2a2a6247979edbb65d1735a057be826 82dcca16b19069f8b55cecdff9475369f8b0c1cc3bfc45ad8a056dd665ee 22c7a24f0c8caa97266f93e9f0dd295eb5f97dde744d528af799585eed21 6fd3012007aa392bff33cb026bfec0ac072d4141fca80c15eb2b2d304ab7 cd053f52263628b98fd473da93415f628b4d00777a70bb4120a5d16d469a 20ce3d04a4c1d2de84c7e3de14d4e0a249167f3209cf7b76bb9c3cc46da4 d6c7632550e262693cd451b712dc01c889619a083c7c37b629edf12fc4b4 2a231dc506158aa0c83a1ce47ddda901794aa1e9c1974af818ef5a19c4f7 3f898803464fd67c8a1bf0cbb2bed5161e9cca12301991d057e5e93f5578 878c9851802be4ff9e456e015f1732d33cd2c605865c9069efc4b5f702e2 6a556c62d47549643c5e3e51f60d61e488394ac1b405a0cc3091a8c12b22 44ec270bb2a6c5a60f430b29582968d2f65cfb9b6ad2921cfd7d5ebdbc33 2cfd568adec54f61006add0d647c53ff3bd3a0c5489848c5fceec0bc6895 dc6a3a8cfd64c95163abb5f8ac0538a8808d19e61b28fa78fa1ae226b48f 38fdc4bb38c5265da77324be0573bf869ba5e360e40a71089a1c8c6d3daa 2eec7207cb69467eeab37242892d8cd5b5edb3f2f7b011d915c0e8bc03c6 df0499eaffb6b5c641806aca49246087c038ad26453af2aa3952f22bce83 056a0eb7f5738ec1b563c4d57ac28eea08c4e42272beb60a08bed06d3a80 af9045a9d6ec27e265c264b27f92e62ee243d4dbb1623a15ff5d3c78d89f bd3c962e31a9b75e77eb1d74b5624e2bea14c77b825e963225426832cea5 2fc7545755a8701e5cc8ea0c1484edcffc703c7662e309c506730611a3ab fe87cb1da9ea32e95ada9dac0202807e94680461b9ca2e4fd8a303ba44f0 f3de4fe6461c6a6f9c572517a21db828d92a0048c369f13b0ace5b78db4c 16fbe3d4563b60699a239e3d1c7631eaae0f27447f648038c73690a8ebe7 ba256c90bf051cc60fa65800016ef5ae71c342c240179563b3fa28be73a0 31c9eff4b330ae29599e5ed95af5883937820336eb60279a26836b117a92 cfdedf7a204b73adffaef9b162ac5f19498ac335a6f4d9a90a361ca9775a 4fb8bbf3bc7041f5c134e7bf0b95d2812c772fd87aada11926f55bf38a0b d3d83c7bebd9ab9d14daff363a2a38a3eefa69dca098c25068d5434669ee 612979df3888ff2e038f2354b2e349cfbfbfb7f40ea9478ed1b80b911b36 4271c7faa5fabfcfbc94f9fcdee7eb022ecfc771e27a52311c011ad2ef62 b0ba9042fa4ad9530e424a5c32d656865e80eb9a85224d1f41be0952b06c 626880cfce67b272f14fa5174c0243d8a776e6d8041ee77b71d2729c0d33 dda7f9b35dc7463a3ed0f610c4ff726d8456cd88daba5efadf2e591d67e9 dcb4fd4d4575795c1a227ee9d298bf4d2e04b6e1f5d8c3b56aa98feaaa0f 4f786c15d82369126dfd7f844af662fb62af6e00d39f7c5baed5495f0e66 815cbe9dff824fbe4ad0d2a337d24d9175048d053581d7216aacba90ab0d d75f58a8ae4c2d44f1212423ab1d00d0291950ab04ac341c16ef6693a4c4 ce8e5ca5a725dc67d8e7a2bb7b73eade64e4d720d8cba701b6e9ba292dc4 f748be14ba2390b291e44b990ca04865f75434f09485aa344f2e86d30628 9e90942acaf84ae6686eeb06a17d48de48f888a50957f9b118a8a7f282f4 68a9e1002cb5a06fb74e60984874e9f34363d2e8c5e5637f7e1842344abb bfa0356ac819f5ad8d2e92bfeca91d3e798d7a28aa086c3b19f0d2f48a97 d023340838dba505550cb38e7e7f257154a1f0498f3fc896359f3c336c60 a9a4ffd7bb518e5c519103b02f840fb060916d0e2d8933b9642e7da8d6c1 af1be1fdd5d0023f97dfc9d694f2e8cb91a45289c01b46f49415452a6f5b 3983067de697d227ce547860f5168f6b659c2667069fccd0116fa9028b9c a6dcba81766e83f51c94aa52ba98c8dffccdef23a2abda1ca9f5298dc39a 952dd10b93b2433436bc0a13858c8c3e2ed34b9f0600a09687167c4215ce 734843d1a24d8f127d4dcd3533ead3d167d33d57eb3ab9e2908358363a9f 3df154571bd9bd4e90caf42a008f4c218a7db0964770a370007c4c930127 1da189191fbb8bb3f2894d0ccdd5b444afe4a0a5ef47fd8d280583fb2fb5 94b046befae400803d67429c8d15f573ae18d18c10acfbc01df91140b396 6f05b4e06d1e3f0742b8a8ab4d274aa681a7d12d35bf24e9fac48c703553 5be0d419bc9a207b7739616473388273f648259c0ea59c756d0ce15631f6 9b90f431bd23fd8fe596002dababc7f56e329f536a71d28951eb528b7221 5ea357775a2ac693988b6b22c3fca321552adc20931cb4db4971d9ec24d2 74004646627aa1c1200e2625ff96219ccce1a12a8d69efd1e73413210f91 4834e84d6ded8de96d03f58c496217a7b72fb1005905e7ca677e0947343d 36dc178686b1fedee4c4b5b350f220be8e05d54c399d86be32ef1121bd5d 5b1ca5bb119013dfb6aff94e6b5caa51e3dc1a0eac954d752ff3b31251cd 17976c798bfdcb6b5bfa1a4a449deaa42ff71ac5b397dbdb64ab9a9a78f7 55a014ca44a3a28240c7083da716e7a947508c051a4b7002470dd29b6537 0a1fe0311b5faacfda6ea72297ec7aa42c305e07982e5ead6fcf5a650910 01735cb1d077c8c5d5643ab086829e6af25da57b3747990a618b98a28ba3 957c953ff99adb51b9abd24db787da85b030ed6424e36b87384ba91bf544 5b5e3235b5f3383986c413cbf2830f45035fd1282dc6f6c09026bee81cc2 d35bbb865a13671758d4c3b84784f952a242442239738eea25cfa99bc18e c4d135c5357289533dcb225fd5ab334db7bd7fc93964469c4a063765c17f 6e02993898e639b6f3c723cfbb050097a73af9942f4d3c11eba17b294b56 0bce193e2e39b7a017f54d8592d63520e528f559578e6e95007ef6e6be3b df7c470c1873e958342ecab92f02ae42b40553efb4eb4f598ec8ca71ad26 ea1a174651412371e6cbbad58296c73a126314c1bc24787cf94c747346b6 70432773b99a87c49f2820b11ea1ffad64a3592982e92e91e1b88c325378 f6dd6dcfa8e7b73a4236255ee921b479a01af6229bcef65b0af2ca7c4cb1 5ec5f8fda4d1a7d742f7b91c68aa61f87a8649938e8ba92a4b75c93f8109 b3778ee223925f8119175cbeab902640b750d8c23008f23c0c10961335b8 07cf8330fd418e25e1848fcd8d0db1841811b3b0391d39eb566b7ab8c252 609d134eb792ba3622e6304b5fe759b32248df9dda842aa0086d368cc847 882b1d0f9516b5b6aaddc1a820b486af34887249b251e78d3ed2856574c7 b2b81caa6fcc71db34a2ccfc26afb1bd1267f2adb1429c4d934b10cbfd38 22a1ddc58ae75fb14c36178ef5ae0407e1bb99e4677417ba7fe6e5fcb9e6 f42dc3f46f750062906ab948e0d696188b19e10610a8abdf28739c4e6839 aff3483219f3b2dddcaa9d00f67afbf1bb6f1dfa07a52a8528e7f597c1ba 69487b0a9b136afdd7e0cc252b0e5785ecc1fe0cabcfb9906db932a9a766 89d16218d6953f0c3748daeecd6ff7a5e585ab34620e1b07db7c1d664ff1 76f44d362136d36f0b07f0a159635d3fe315ed7610c505b96af2c4ed25f6 13dfc43fee391d25432e6b8aa1ef72b08f2d46c7c4848f327b55a95fea83 79d92bb3d0d9d776b708eca6eb039b45a0b5644a7a9d6d04cfdd4c13f65c 82601d7d7cee742c4cf1f8e5ea12c10cee51f0410706c7ab9f04e7d1b881 05a69b48b3a045f31d36dfb8f353ac2fd63aad1566e76d2475b7cab4986d e08d9501f0faa041b3d278a9cf6376aa8995c0b03930fdeb8bcbaa1d7aad 349a31df1d5259931b54688d95cb36e4e04041f97a726d2708488ed6dbe3 1e9267c946608ae74828c8ef4ba34023e84ea822bbccab1963204d59919a 8299cae988142f427084e9b6329b283a5dbb4a6c699a94060c5ad65ebbaf 449d2cea0dcb9c9966faa6397e8f996adfaafc2aaf5b2b93b67f412d254d 408d242e1cc7c82fc618947688342e825bac6e3a20608450d6312ac58c8c 5ec02d010934bb2a9232d91fe456836c15be03c5066b57e518aea7ec09d0 4a31508c6d0c22b7fee34d77922201658501a309c8dccf4f4defdcf9a86a 8bd44e1868eea74986822cb96fc7d01782e74d45dd4c68ed648eddd121b7 27e89b55dbce35c3ee4d68989f1e90bbbeab6fcda7850aebfe7612a1c6b3 9b3d30b0b4e5031dd2c788324af5caf79751e2daa232cb7291963aae4f26 0ec66a75ca59a70b91f90954c745d80e60488ab1f31c1c76d6e6c73dea17 d128340dac00beceeb647c0e90d5d3acd4d116fde777b6291964e612da14 659e9f2e7c1842d89e2ce53b04a61d8018d1a078d4d444aa150571cabf69 e5522c99b06a537da3e731521f4b144f403bcb3e93581cc36694e39bec0c ae0c036556a3e1d4bb33d9dbac6645ab586210bd9fd2be62e9789b1d529d cd2095e6016cdd8091739cdf0cb21282a23fe956e5a48c12fb3dc763e7b6 67e52892b395d3adeb82c38f3c68b12e1693f77f6e2626041bb3a97ebfe7 07cca0b39686c842167e897cf8debf9af8536d9c04342ab474299f5c6534 08751d8aa3a437e5c5c28954d30561381ea23e78dd3d5c10bf9fccea1c19 0bc869dc6d1e21676d6afe08e98b4fc2d25a14289549c7909f7670bc20b3 cf559c3070a929b1058394874dd922aac193ce97c745ac17b92a5d652fa7 6f64d1a962e39855b304961fdcc60fee9d03f85661f0e1dee52026731138 59a59d783628c81f7105a805672080d0d087931d395d86665241f83c3516 e8d0b49600ec73e5f3c96600921277fc9c45948691f9ab60693142d0b1c4 aa21a3bee9052b07b80b3a7cd60a0ee9245bdb61101b63c9f763e543f0da 9016514dcc12861266041809a3c85b6f2c293ea31ed8c07f0ef884d71b90 7fcc5f55fd3fa5b128d0777d40635c86d288666968ef23de31d101cad7d5 bdffe1579bca42ee4baa923c4ca346fe1358f38ca36509602a18259ad02c db518b014318bb475f5d4837d9a3e289cff39e519ca04e6a32f2538170e9 049586ff87735a0303c8562dfbacc4b974bd37e2389c024f99eeb3b69ebf 69aff73a90cc525de0b1168cfa9aaab157a5fd77ccc5559779d5cf141df1 67c6ab39b9f38091406e90af76c7d2c750882fc0abc057a760170d0dc051 511db8f7353cd07d7bfb1020787b63caf87f360aaf736272f86e8974577a c43b411037ec057eb953a85579b74c620304587672fe72e8dd569fc28f99 3f7fb78bf66bd6e70eef8cb5082f177ff334442ab29e7584773cd6a5d3b9 0e1b5ece448ab88a64a584d08c4ce0761eb6e813faf8a39e9d0dfbbd4c26 6896697511ebb286c3d99dff779d84921dcfbb0990c9a68413b4651e7cdf a8075c9faa63806276207f0434c9599d05f86327cf99b6c0970c60658bfa 48b0485b4881a1d9061118fa1a5449b3bceb18c961eaddc789f7b99d6966 f543ff81ebc2a0873ada3956c97c20b66082b09738032ca52114c30dd456 c1c1decdd35879e4276c7b6142cffecf853d74412499923af91fc62922b7 a15591b197096b40c5f6e180487d60dd1b4c4868ce6f87e1dea999d2f7da 9026213cd55c3d14e44f709d0b69f86b4b8ce15d2e430616d3f1c79c5ad5 c14dd4c7973fb666ee0c4daecd622f9b0c79e463ff0aa57fc470ac0955cc bac085b69b5c5a219a87969065600a979a31aded49ae9e7fb276cf92c333 1c1b8809d499c037d793df6736a87eae2ff12508cf19a55b311800d2cca6 2fa9913562d5efa17c3f0f00be08ee2ed2492da917373378d2256004a7b4 2734ab91f4c7d616f676f5c622a5eaef56eb18633bbc92aaa13034fae9a7 75831f6a8a6836d5f3ccb4834f1ef62b6f7e74ae2eed25cf95e9a1cd5b96 73d92860cd9ff337693df2c30a95fd1d4f7b83b0ca31cb571d18edc2dfd2 a5b8106ce601b40657059446449c9c00814d03c38e1aca5c36c53b6b96df f57a5c409a3f6ae1f17696948cf97a543401ebb01a4cad03666871bdf4b1 b59c854893a28f64cc84f9227a4a1f1db4b0d48299297ed5bbbed809d979 a69db6c1b9942f411237a12d866b0a65dc62c055a0e89cb31c53422aa384 36fdf5676ab2ecdb0f7640b189dbb6e8f5aeda954bc32d3dc18a8ee1650b 5c31b99ce47727ce091318041663ed43a655ed629ebdeab84cfd18384aff 19e828578a9da21337e52a5412ff3067ffb362065e1481cc31c4eef7372f d89014691246636ad9ef431c005a4b299785868d33e7ecdd026213140735 cfdeb1091961e7f2a5debb3db0a56521a32aada588f5763c484618c31226 60490149455792164a88a77ee63808defb4798d11555ced849422330bc79 35ab9c1f210f4f4bb9e9ffe6d59398f50416a5e1264f200c96488aa3c3db aa87058da67d5388834618699e5352a4ed8aa1b6bded935bebd675b72ed7 6b93b826c63ad817620b9d1de2327a9d82d13797699bfd6186239bd82064 489b9e7c80d7b6cbc25436c29c89d7f2cd4ae4902f862de6df30d92fc94c 48b593328e08123affc9bded87039508c5f8c6d28c943d58ef344fb893b6 d3187125bbd8925c0c2bc8768de3daf4bf7d3cd6cea013c71f5153e36eba 79d43f225ef40112ec541ad9071e91231b22bd1ef3985063f9139dd2c6d3 0d10a0967218783955230baed725c9fa1b1fd8cec974ff37e0fd95f3d939 297494e9ee9e090af561d07de45bc2480de743c1d13d3a19768663ff389d 877909bc82bb9aacf75279822370640a62a7203ee17a8053c2d5693f952c a2f9c846d329df2aaaece3762c27efa0149ee43fbb38f672fab26a4bc30a c4b5c2f6c9a5c221679b87b3e911a561c1ad624964504ace5e37f92b6104 baa25121c8ce7f86b49827c9fa6ff4c396c8ba7b244a8c8ef6bf76843ca8 03de79639d68fa81f7fb1243d72ea4de5b5c83d873177c668d50e57ec622 01a0769b4cf3a8dfc215ecb7ae6571bb337cffb0b38b3a4c506f4f4a5a37 c0bab7b7acb95d052bc00f07b50509db5fc519d06c58c3fbfc97ceb03188 07aaeb2f741165b7091e246f3866db42edf735c039833e182dc904b81b87 2917dc29d0d1ef363f7e20075a0de63df9e09b72c1a77bcddf0bafaa03c9 cd67e7a0ad0899e525eaaa004757f82c68809ce4da96df50b7d840017524 886e63023c25b44eafa9f29c2b125a38e8eb6886df9fb9c8f8eb4264c147 aad97ebf2136de44131fc6334a899f0cb3d8afa5f09c89c6040dd6c87ea2 3bd13a31e67e93af03677a4801c7697890ccf8fcbd56250b2fe0c9c9d34b ff1c85c19fa5b3802036b29e595934e2528ab9ebed54cce706a99926166b c1bcb0f134449ed18606b87945f5fdfca8be38549a402464cd8e4077e60b cd6e20d511b0e2773ae2d31fe9b51793b87daccc0a792dfcbd9cd8a68bd7 413c8b059ee67a1079eff8bd8c70f28a00248afe3a8a8c6e829b2ec81c78 b5f30459c21b472f87c78aacd1f278de54e47a7c2ea6a98a8f8e26bf8274 a207330334ea94bf9d12f0b9ba9e7e8e71b5d9b359a46f0943f255b51abd d8a601142843cdf212decaa5e7a53fa849675ea5d5a644469d36b8b0ab9e 2036609b814ff86d6262b3965756ce64db392c2ae39d7469edec93a0ca86 df73007d199ff7d51f584c1250e433004e0280de93fd137d80a7756de659 957d9b396727023c567c20c46c321c9b2a7e6fb76861865fe83bceabeada 0440a13599831902f1c725f68b096c457822efec23cf9a248beaed0ac93f b42e55ffc02af922be3b03bf6df0ea10f80fb0f0a254ac42c792b520a6ec 9ee2364dfcbb1c149d8fd2458759f2d698ad4dbb39c25a7b1d4e8c81f2f7 46dfc06ee8a4f454633b52b445586e01381e15b1f683ad1ca0c11d33e007 ca1d745c551acef27ba6fbc8fba54bc08ab6f0dd97606967b30be073bc95 28bc9f8f99898f28e04e8c11d1f5b1ac9164f52bd636fccbdcf5c3d553d2 280d5094a0157d8b0289107fd7f7d504f08cbb5a71066b9560cbc851e2e0 0fb61a8d7a44c63ed580923ef77c8192cd58c905b906864d2e401384372b c7ac5d03ea0d3c7f276071018cae137de4271af9f9085607d98e6587689a 44ddbdb08803118249b27f5f7baeefa810eae6f6027c0aa702cbc1e71035 6cd6814623b3359190c3c2252c29e9bf868d3ba41e235ba18987be489a9d dbc37cf02a011f56194dd0b47f7be517da0b37a2c0f91673100e8b5a5094 6a3402cdca3b95b311d1bfa1a3c7180061901915c09c4cd04de14480ce58 c3f66e346f7e529ea07b526185a64643a2f81c9c3d787c2655fa31e84351 9295110640ab26853c0cfc0cebbc5516b41d98ba05acfe0b96e5d69c27d8 bd262141529e5d71222f1e827d479b5eacbdee2fefc9494bc8d7b38c5d58 d513edce56674455b0e26711658e3636362b6ba21e66533d88fb2d170525 48bfb0d7180c3ce0801a9daaa48d70b3ec945cdbab4af17403afd5c01c4d a09befc3738412f3d2a9f4d2225e608d112f94d0b63365806139155ae080 4e1f015814bfae8538645dfdbe1dd9372b3d1af4f5d123aeba34b242cf11 4109ad4c3f050bdb76ffbc77ae08490a2c1cf956652563071f9f4884bb02 e7fb1e671a07c094d77c7ae52f92c61b8f30e8852c59bddb22ae05241c08 2f919f47c58c350c4d13557af13533fdca2cfe129c9414d64892ab1ba5a6 68e96b4ac5c8da00ee0e1697c222015a4d0147ae1899400b552697a06ee6 a9d824473231fc68f69b35d78be98c391d83480bcd27952d96f5e0b442ec 2e065b2ccfaa52b20dfee1c49bea4181146996d92fc5ccd8482ec70ca6a0 01254a64c63df001749125cc6685488dcd13cad4a4e03860f9e16ffca4f4 76c757f5168e9906259bfccb2808369f79858a88875628794f47c60ab1b9 5c2e74d130da506a92b250a43f82ce1a052362390a2fef49cbda4ebca43f a929b3ad509dce918f5dc39d6578145dff3b2bbbd1e9277c80818e13b619 f10e82592df34c88e3a60a66d0781bd763fa671ccaa7c60cb2d520ced2da e8ddf195961caf2431b56e4fb577aab30e4944a139ea29f3a44a4719e4e1 d8772998f2bf74aa29c1c41a472afcd134af7261e19e0b78b34e3bf23a90 8a5e96adc3411567bfd04e169ecca040b2b0415c026ce6d0c9e1058e2173 3da38d276fad3810ea1edf96eefab9a07a99eb5c9dda972e1e0b833c8c45 f460672439e74eb8fa1cd0dc93130b9e59b9267b4a9d23c25de6cd9c3800 fb33a517b5eb4a3c6d9969cc4087a0fe072ca81a747bd08d1d1c0d161eef b9eb221da6043b18304b2404f0b54cb888ac45e6605a5784c2276b1f8481 a598237fa1dcdcca99442d8dad02bbc44b453488254ee2740d569bed8f1c 9313d487360a610447b3343ed2379cb770e083a7cd3a93eee6157344e567 2da5ee42abfb4e6af498b543518a6a5d313b1a85452330b067d94c6ec209 f22f7f3e9c109ad78fdda92014d84698874bb8331f972c46a3dab9433c06 34eed2a9261704775de25510f1e13ff8928c4aa20fc4bb59164380740a86 bd4c9a5ffd0e35be9a4b0e2aa4c66ae17de87cf4049bd7a4a278e68890da 791f3d002ab112eb28f7554dfd7c4dc398bed5935e28503e2dc4e7105971 70bf60aec88f68e76cc3bc3d12d94e5961e0dd1d0a92c4385b293f6739e5 08f12528772ff56f7c482a78790a56895868183b299ebeadcef9e4993631 f1a7cbf35623d7d8601e218c0251f2f8dfd81b9208239107c276a5560ef7 6baf915a490e4904e497f19c03f701fb0e47ec3888c03a75b6245adb0e87 8b047d7deb8854fdfcafacd06d34e97dcc43d2fbf381cf19504a0d968464 404a46c721eed86d1f763c3101ec6b838ea6a39427f4071cee96121b1af6 ab74ddee6b4e4b15667c96f1cd1d01dcef2cd530367f5d2a97885e2669da 52179dc4d72e4ba7512c6159b71f4f93eb21bd4f621c562e2f48bfdab39e 713bd64eb17af649ef7df840a439df0b012efa81f1666214c5b450f0a4f7 065a970b6c0a8406797030d6ee947d971d787b62615d685a27d3ae03852e f82e1e517a7612538408ca6983141933c48502fb023662e229fd40777e3e d9968d4d3e99445f0cdd3ebe7be52ed2cb8379054164f000b2ecbac43e01 c8814b40fa4b7cb450a9c45fccb6112c9fc809ea185cd91567cd68a4e80f 0a355786288e4f8edca8166d5c22e1ddf4de286b417cf7f374a4b0996a13 f647449521cbc37aec62541cab6dabdc2ec9f471da5435ea289afdf234ef 49a20043a7fea438eda1d844d350f0de490cb436e714b56505ddffa99a6a 773a5c924208adb8a865901b9bfd166bd9488a228db85643f159818f3eb9 384f839dc46d4bd79acf7e630e99ebf0b205854f9bf1f07ad8c2ced1bf20 35ae6b44bc2281feda7bff65af5e43b652ee172131494726da6d37cb4ace 439de1cbee9a070b1fb9540ea4f7138c3710d04867edb85b95dddcea3cf2 33c7b83beb2a0dfe43c7083fb9de105b6d33888f1b6bf8490da0c23da253 0bc2430a506a97e8cdcf2923448ab2ab4e26c3c5bfba721d658c809c01f0 a84a62c1b723647e4b6026606b8e43ea1eafd3121d8577935523a97e7fd1 d2986c36b25096975460c891e8114966d4397dd8cc2f1dd548ee02451655 9ccc747f91248aaefbbf5783565884b338970154c5e331e2942f4c94edbc d33ad1b957f298c4f97f0f0e11f224de698676527eb0776d6f2f34e9b72c dc1cf8767ea1205c78c5192b97bbe867516ed4cd3223b396b3218be1f88e 976fee7704a2db842fb1af5e4e65bbcba5748afc3c6751d4e7bdfa13336a b8fc7dc35587fc2ce03de63877abbb84c4f1a2261f4f644413c2ed9d0848 8139e9e087252b5d5a720989ca70163f5e388c2b8ad5f1a099a003d56878 c853a5551add7982e2695829fda19b32da576a33bc0aab752fb3ad2946a1 5d2d65611819ebff30d135827d68050b04980c44176673a7f641412936e3 35d6e9ac5363b9f492610fd7ef25ad759c6597739956ac0348706dad0fef 6a06dbfccf26dba3babe9380ab3cc3d4b2258877fc1825fcc6b152dd2208 35eec5adf2eecd8224e689de5e423f89d1d79f2b876a30b2a73f022194cd a14bf3f0da017773e37ee5f6b3bd8058b27783823593da0e6d9ec5b257d4 c48cee4dd73b350a970b89b11f218e4aa37098049a5d4c005fbdae21a858 e66d2d8fe461a7f6689f65b519641d998d37936fe924c9a3af9cd5e165a9 8169426c98c86f0fa00c10f125b43c8b8de4ef91ed6890c8e3234070298c 8591d8a295f6de4f0e4ce579a6035140bb59f6f122a381b3f44ed7bd070f 7a9f3cf289278c191c3166fe0850eab4ecf04eb0dbcdcba3ae1110355310 6a6e11a24b22ac28f3c0e301cdd1560741d3e0a9816d89acfbcb62e2d897 66207ac39413e9609a723364e5734e216ddf707a5f42965f5a5ba4d4f535 08dd8f176d5c05de5469a9f3c912bf9152048d46d506dd0b6719079991d4 bffdf94f3bb64c7889b931f417e79773d85685474bd2eddbd6f439ae4cb6 0b95b0f84057fe5b53654cc944630a285f751daf48e31701634d3d6941ef e852d24df1e568a52158101d395db1c419e72f3f8c5b5404cad1a339be72 f26b7dc54e89408997ec500c2c5af14271974be316f6bf9cc83ba2194f60 4c2b8f82ad7df204a9d6b93362dab064311fb7e4b119d639a435826c0535 61032548a1d1fd1929dd7227108efcbb01af47ac1d59937487d37aa935fa a1b9d1acbc4a9836cbbd6f199460bc32a28a456a36374eb7584f372b3fcb 9cb5e28905d472c302f1b0213e1b6f7796cedaaa67d7740bc90d55acba49 0f8d7ec97e16db6f04673fdc89f358bbed60ce5f4753a9867ae66166c624 cf25e39d3cd1c1ad77e926500a2e14e7e6154694442aaddbb4de0a01c4bb 1a66bd22a5c2726e08f7318554a296c9c944bb1febd6792b5f99675b3f49 04b870f3251f6b86fc3eda524cda9e3e1104f4603b6505aa0a5b148fd53f 54f6c4468a68660e7050c8beeb630b2f2898406dc2a3169ac17909a5bb09 e46d46f4ebc14cedd8d7e13f5f0721b39637def06889cdddd252638fe889 99c3d7015feb37df98c57c174fd46da36beac0d807ba9c39b2b90ffb91c8 a86366378e0cedda99a9821eb461179dd37790439813f131e0acf0a7eed5 a67d88e4351293dcd44d2065f0195c53d70756afd54c0d562401a0f27107 8f3be734590a57ad466ddef0522e25f0f85e090a0a2e4e374c6d10588ebc 32c9900eebb602d544b079403612008a393305c8b0c536cb08a39c246035 ba56d9cb35a2d675fd33989c130343c2a1afd19ef6f775b8107a3eb31b9a 6ed385a486840a0bd0152da1a64e46cf471ed81127863eb71a210832973e a6fa32659990e93f0748da7ad2774f8163faedf153f1760dc9ea570ec034 7a44f6f8ee44a94a0cd0948f341ae233f3197cab250bd96fa76092e87860 b518b8516a24a3e27a49ce8ce936d591530e5f3094600a19e9eb71ad2b14 8e5c0095969777f46301f5ced7b3bab59665943feca8b8d57e15e3396825 2374dd5e407d49f22c3a14845e7398aaa21f73ef8078d72c94f291da27bd 8a28e883e172f826807cb47da3233d0def0efbf9f1a007e3558f6ffc521d 669ab845565804657da83153d63ad0edb4430c2422910f91145ba3d692be acd446aef8142055fab13656ba9b33491bd1293e16bcbddb62484a9992df 986e892c58931ad5583e1ac38075f86feb25c1acb394bd1cbd8f2d7b38c5 a9d8824bd081ee7357f7cd27ada7ea4032ee1d3bee659122117b870466fb c7a1e50c25ff50068db34ecea6f1efa1095e65124218af00446da1b98fcb 6f9a32494d7f1312ebef413278be2acb4c701570d9563168f0c969ba26b7 fa0d34862aa4a0a0f21f6bdd3b9895c59ffd2895ded81fc5a133dcd2db30 fed869238f019a0cc44f35c64ef2d84285036776d65093ea6c82a8577d7a b2c8966c280b06d5f066054d6c6b648333f5cf2f271b6a4b32b3491b7d4e 0794c274f89e4d9191341c85c78fa779718ad5dce5e30d4448d37d25c7c4 c1779e0e4e169b8a6c9ae4544a31271fc62691c79b298f31c4c47d0cfd68 6871f0c39fec0bfa2744790f905b58d25fbfb1dc980f118517c21957c98c 4d6e596b9bc246fd9a961e3ab2d3f4d73709929351ee13f3648d0cac935f f98b5f23ff863aef4db9240a28ad01a0be2c37a7e70e340c9114b22ce747 5596a132038779d925f919e930f4a8b8a2f75f061d050a9218594df99e8f 7ad88546593c944972884f6c6c497f5fff1fe00923cdf5d1e3b9a2ccce03 e81573e0b6f8112f59a91229f2f21b5c26697fc4c62edce935650e56b1af c775077e8cbeb1df1b1be5d1388e3312ab471c48f842b5b82525d03973ba 5ebda3f13779a6c19ddacbc82d5f41564afc2aae90de85281b74f8f286e8 0f606a9e0add05bf905b9a03ff4e214cb422ed0c8c5da765cf7057746251 4d0d3e7afbc5a03ec535d542d38d7e9ee60967aad38ecf189444605f3777 acbcbecef6197d6f5f30578bd5897ef22a7c562f54407ab100537d12b372 ec79be1be615bc1c89263e208a5c16960d293587acbbd9a0d495fea8148b e74371c139eb1af12aa1cdb9b6fb92b6747278f4af5df4e22f9f71eeb3a5 497267c4f97842a491e5668e5f30790813ad4bed38cafaa44c725d239bf2 c60f83ecdee4ab6aedd7471ba49974ae031646c637d54366aea0870d407b 59f19ea281f212351fb42e6d98b7a136db8ad9f3054f72ed0ca0451efbd1 4e3308940054fdfec9aa08efe955cfaa4216d82ec6767432c1515eba50e7 30ff581ec13afdd9fb9b49157f95ae7cad3af37e5d01c317070a05664a34 9ae172b2d3c498abbc821b7dad91fa8c47e3d2c2bab31d2c264930312184 0c0e3df0ee01f0017c88e5c9598bcaa09891ab365af906caec829ca6d26a e41c4d84c7b6487a232f20600322c1684607dd5c50ea4f946fd00aae210d 1f4dea5ed709fdea7ae72eaafd1407f08d8bbe5faa2ec265f5ff0e5a1d0c 4b2f2048e95fff6a581bd07b2d81c4556a150ff8f80b4e96a3bbb42412eb 37d1c91bcac4fc73bd21df9ef46bc2d0ca74032762fbef0f565928e7a08b 681b86ce775c9c87d79853a059ffb2b272eeab398b0ac4e0b8921f89abf2 4129418caf9fed0045d628f874d749bed09f5d79f1edc85407cc1ab67b31 03fbd2c43fd066f20d91b5e9ed86e9e321e08ad11305ff8347aa09eb3180 f9516abe0df558a5685644f4545f7389288e053f3431d08afebd84b005b5 9b18e743ed3b1ca443881fb9bd299ca03da376e4e81fe2c391fd4806c39a 202a5f298591a94046a027e3d6d31bfbfa40063dd5d2d898d7d02aa14563 2d380b33735d2df50f450c081d217a9b2ed60f81ec32d6f19f9d6401f9b6 2da0adc6e7058589501cd313e9cf58b5dc34e12047e25012a8ac95850262 81be3344dbceaac59833e5314dc4d4452c0bbc25c6658c354b1c041649cc 71d3e2ac77406e1903edd21a91d25c2a65b1b21667ba2ca43a11ec43f35c 4c63aec397911c236826bb7fb9ab86fadf9c9e187407caeda78202b09795 edf26daddf574800c392be51748fc2bd67e46c60e83bec5ef854254b3658 e2545b1b62a5dac08ea0aa8ae3c4c1cbb18964baf7a03f93ebeb8a616adc e5c5cffb5e1da8a14ce1bb43f71cb898da01b2743171e4994e7ff02ca8ef ddff485dd1fdab3f9f1f388703333a3feeb799c41aff7700001fc89ec4b4 ba45a298bcf8121276498c9f3b193a16109427dcd7a15af2537da6156c45 7de6182153f8d091a894654d6ee32382810eb8f05e0ab099710320d319ad 5f979a4ab84def5ef1eaf1524b9023bb492bbc8905c50ddf45e6d176edb2 c8c79b4d4e0c848398cd60dda8f346e12231bf957feeddbed7a4bd91ac45 7324fdb2866686fb184055e70ff5871edd01ca4fc8457b87bd77e25c3a78 e6567e905ac355d9a40ed25984b27026b7cad4300c883deec8d409405e3b b52041d51a55ee100f5605374fb0a535e6baffb9862e409a4371ae021201 6e8b69e48a2addb7a32666013c21a6ee610ba35e18d8511bbfcafd8032cf 91e38fcd3a7c8d9729c35b304af009368a41f6f601a03960e63766ae014c 41913f9183d1238eab1447952612c04001b453b42de26bf9674fc3487ce4 d7da2105670b0125d81f8507024061dcdec2be86b70b2c3e86a3222068a9 3a4117c43b325974d40f2b552dfde50db767cca89ea328da7047be4c902d 1e2e7662b5ba3028c78a95e315641d89b0355225dfc3acc69f20ca397896 15cf7ca70e309bdd566e29fe72ba3b4c1eabc13754058e7d4bc9e408f8ec ecb5e1ce5531a46780799f29edd03d6f567c77c19313e2904a8fc0d8cc29 f8bcb69d4e717df7f5f22d921ebb437a6c1de102eb2cf23e30e94825d23b 1dc062cfd35f57c0af1fd0e4dd114a83228f5336759e40a451680be6e5d6 9ecea30db8b6bfa12a94b8e53f1dfbc2e5983ae3b211b3d1e9d7aeec27ee f398664d4e429f505bc2010a1da84cea64b947dadf34946197333d1af439 74ac640ba07cba2f6270c11b27b7bc9df41d4e76cdcff5e5f3ed4ebc0f57 3d31fee28905b1bc0f61703870252bdaba6404d5094aed68fa3c56eecfe6 ab64486b1b2958144970ec94ef05e99253a73e4ca06b20ac796199ce2ac4 2ea2e8cfe7ae0619b1de7b3cc97bb5b34073e1a479afc4a09226edb4c7fe a490ee5c8326b634bb930ffc9551ba25cf3c88a68d8aa84a59f253245784 462fe44a0eb32252bb3851b95d413cb5bf581afd2323791632c765c0a379 d1849c3bed4b66e14e091b1f69d30fead1c395c195590b3f3c36e7de5d3d 1be1c7a64d493a1bdee92ab3e34d389d8fc3bfbc76e4ab623ca7b7fe1fc9 05bc8d71eb1ce6639a614c0fcc357ccc1b614dbcf57172e8f552d843097f 5a44900e54753c1a900532273a3ec43d662b5011ce41e730354eec5c2cc2 219f7d58acdea6aba748752d2d76857495f52962e5f8c165cd0d254d5d84 37b5d5bfe6c95bc8882a4fd2eb865f9ab54cc3f14a4075d07fd4b3af9817 1fb73ec2d7647a246e161b98740d744371f3666c7a7d12f6d7d1566d1125 4224558244c80cf1fac501964c976261db85f6f753741b8b5a268a56a5c5 8e21421ba984dada838cddd86c0a720d1de4b08fb9f49e073cc5c192b909 6fc4300d038c1f320a0395fc1137d58c8262bc41129b142d87f435c588ee 1c7802e7425b3991f84f78802fb1bf6794eb210e41cd4d6951e1457fb31a 85bcda84f7d6de8c5762872b090ecfec681de4e7c17ba1d3c0c7cf7eac95 e9c22c587ff7ab270a8e85ddb482efecd6859d6e0c5665 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Sans-BoldOblique.afm0100664000212600000240000023447610330505373016662 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Sans-BoldOblique FullName Sans Bold Oblique FamilyName Sans Weight Bold Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle -11 IsFixedPitch false UnderlinePosition -227 UnderlineThickness 258 Version 1.15 EncodingScheme ISO10646-1 FontBBox -278 -505 1571 1051 CapHeight 729 XHeight 546 Ascender 759 Descender -208 StartCharMetrics 822 C 0 ; WX 600 ; N .notdef ; B 49 -177 550 706 ; C 32 ; WX 348 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 456 ; N exclam ; B 68 0 388 730 ; C 34 ; WX 520 ; N quotedbl ; B 95 458 426 730 ; C 35 ; WX 695 ; N numbersign ; B 64 0 780 718 ; C 36 ; WX 695 ; N dollar ; B 26 -147 630 760 ; C 37 ; WX 1001 ; N percent ; B 55 -15 947 743 ; C 38 ; WX 872 ; N ampersand ; B 27 -15 813 743 ; C 39 ; WX 306 ; N quotesingle ; B 95 458 211 730 ; C 40 ; WX 457 ; N parenleft ; B 77 -132 468 759 ; C 41 ; WX 457 ; N parenright ; B -27 -132 364 759 ; C 42 ; WX 522 ; N asterisk ; B 20 277 503 743 ; C 43 ; WX 837 ; N plus ; B 105 0 732 627 ; C 44 ; WX 379 ; N comma ; B -35 -143 256 189 ; C 45 ; WX 415 ; N hyphen ; B 24 216 360 359 ; C 46 ; WX 379 ; N period ; B 45 0 259 189 ; C 47 ; WX 365 ; N slash ; B -97 -93 435 730 ; C 48 ; WX 695 ; N zero ; B 36 -15 661 743 ; C 49 ; WX 695 ; N one ; B 42 0 579 730 ; C 50 ; WX 695 ; N two ; B 7 0 641 743 ; C 51 ; WX 695 ; N three ; B 0 -15 638 743 ; C 52 ; WX 695 ; N four ; B -1 0 635 730 ; C 53 ; WX 695 ; N five ; B 13 -15 645 730 ; C 54 ; WX 695 ; N six ; B 49 -16 661 742 ; C 55 ; WX 695 ; N seven ; B 78 0 694 730 ; C 56 ; WX 695 ; N eight ; B 21 -15 660 743 ; C 57 ; WX 695 ; N nine ; B 41 -16 652 742 ; C 58 ; WX 399 ; N colon ; B 41 0 324 547 ; C 59 ; WX 399 ; N semicolon ; B -36 -143 324 547 ; C 60 ; WX 837 ; N less ; B 105 29 732 598 ; C 61 ; WX 837 ; N equal ; B 105 144 732 482 ; C 62 ; WX 837 ; N greater ; B 105 29 732 598 ; C 63 ; WX 580 ; N question ; B 104 0 555 743 ; C 64 ; WX 1000 ; N at ; B 44 -172 927 704 ; C 65 ; WX 773 ; N A ; B -65 0 691 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 762 ; N B ; B 20 0 700 730 ; C 67 ; WX 733 ; N C ; B 36 -15 725 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 830 ; N D ; B 20 0 787 730 ; L uni030C Dcaron ; C 69 ; WX 683 ; N E ; B 20 0 670 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 683 ; N F ; B 20 0 670 730 ; C 71 ; WX 820 ; N G ; B 36 -15 778 743 ; L uni0306 Gbreve ; C 72 ; WX 836 ; N H ; B 20 0 816 730 ; C 73 ; WX 372 ; N I ; B 20 0 352 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 372 ; N J ; B -167 -201 352 730 ; C 75 ; WX 774 ; N K ; B 20 0 837 730 ; C 76 ; WX 637 ; N L ; B 20 0 566 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 995 ; N M ; B 20 0 975 730 ; C 78 ; WX 836 ; N N ; B 20 0 816 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 850 ; N O ; B 36 -15 814 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 732 ; N P ; B 20 0 720 730 ; C 81 ; WX 850 ; N Q ; B 36 -146 814 743 ; C 82 ; WX 770 ; N R ; B 20 0 686 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 720 ; N S ; B 15 -15 666 743 ; L uni030C Scaron ; C 84 ; WX 682 ; N T ; B 47 0 749 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 812 ; N U ; B 67 -15 792 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 773 ; N V ; B 76 0 840 730 ; C 87 ; WX 1103 ; N W ; B 106 0 1144 730 ; C 88 ; WX 770 ; N X ; B -51 0 813 730 ; C 89 ; WX 724 ; N Y ; B 62 0 810 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 725 ; N Z ; B -26 0 741 730 ; L uni030C Zcaron ; C 91 ; WX 457 ; N bracketleft ; B -10 -132 466 760 ; C 92 ; WX 365 ; N backslash ; B 70 -93 276 730 ; C 93 ; WX 457 ; N bracketright ; B -28 -132 449 760 ; C 94 ; WX 837 ; N asciicircum ; B 101 457 737 730 ; C 95 ; WX 500 ; N underscore ; B -10 -236 510 -109 ; C 96 ; WX 500 ; N grave ; B 130 616 372 800 ; C 97 ; WX 674 ; N a ; B 17 -15 611 561 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 715 ; N b ; B 30 -15 677 760 ; C 99 ; WX 592 ; N c ; B 37 -15 582 561 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 715 ; N d ; B 36 -15 725 760 ; L uni030C dcaron ; C 101 ; WX 678 ; N e ; B 36 -15 641 561 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 435 ; N f ; B 49 0 541 760 ; L l fl ; L i fi ; C 103 ; WX 715 ; N g ; B 20 -216 683 560 ; L uni0306 gbreve ; C 104 ; WX 711 ; N h ; B 30 0 654 760 ; C 105 ; WX 342 ; N i ; B 30 0 355 760 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 342 ; N j ; B -128 -216 355 760 ; C 107 ; WX 665 ; N k ; B 30 0 716 760 ; C 108 ; WX 342 ; N l ; B 30 0 355 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 1041 ; N m ; B 30 0 984 561 ; C 110 ; WX 711 ; N n ; B 30 0 654 561 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 687 ; N o ; B 36 -15 651 561 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 715 ; N p ; B -10 -209 677 561 ; C 113 ; WX 715 ; N q ; B 36 -209 683 561 ; C 114 ; WX 493 ; N r ; B 30 0 545 561 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 595 ; N s ; B 9 -15 561 561 ; L uni030C scaron ; C 116 ; WX 478 ; N t ; B 42 0 509 703 ; L uni030C tcaron ; C 117 ; WX 711 ; N u ; B 60 -15 682 547 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 651 ; N v ; B 62 0 679 547 ; C 119 ; WX 923 ; N w ; B 86 0 927 547 ; C 120 ; WX 645 ; N x ; B -42 0 671 547 ; C 121 ; WX 651 ; N y ; B 0 -216 688 547 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 582 ; N z ; B -9 0 586 547 ; L uni030C zcaron ; C 123 ; WX 711 ; N braceleft ; B 105 -164 669 760 ; C 124 ; WX 365 ; N bar ; B 126 -236 238 765 ; C 125 ; WX 711 ; N braceright ; B 43 -164 606 760 ; C 126 ; WX 837 ; N asciitilde ; B 105 211 732 416 ; C 160 ; WX 695 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 456 ; N exclamdown ; B 68 0 388 730 ; C 162 ; WX 695 ; N cent ; B 66 -153 610 700 ; C 163 ; WX 695 ; N sterling ; B 6 0 691 743 ; C 164 ; WX 636 ; N currency ; B 36 29 602 597 ; C 165 ; WX 695 ; N yen ; B 5 0 755 730 ; C 166 ; WX 365 ; N brokenbar ; B 126 -171 238 700 ; C 167 ; WX 500 ; N section ; B -34 -96 495 743 ; C 168 ; WX 500 ; N dieresis ; B 151 653 484 774 ; C 169 ; WX 1000 ; N copyright ; B 138 0 862 726 ; C 170 ; WX 563 ; N ordfeminine ; B 42 182 527 743 ; C 171 ; WX 649 ; N guillemotleft ; B 61 66 595 520 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 444 ; C 173 ; WX 415 ; N sfthyphen ; B 24 216 360 359 ; C 174 ; WX 1000 ; N registered ; B 138 0 862 726 ; C 175 ; WX 500 ; N macron ; B 154 667 481 760 ; C 176 ; WX 500 ; N degree ; B 86 423 413 750 ; C 177 ; WX 837 ; N plusminus ; B 105 0 732 627 ; C 178 ; WX 437 ; N twosuperior ; B 44 326 432 743 ; C 179 ; WX 437 ; N threesuperior ; B 40 318 427 743 ; C 180 ; WX 500 ; N acute ; B 227 616 540 800 ; C 181 ; WX 735 ; N mu ; B -27 -209 670 547 ; C 182 ; WX 636 ; N paragraph ; B 74 -97 604 730 ; C 183 ; WX 379 ; N periodcentered ; B 83 252 297 442 ; C 184 ; WX 500 ; N cedilla ; B 21 -196 259 0 ; C 185 ; WX 437 ; N onesuperior ; B 66 326 396 734 ; C 186 ; WX 563 ; N ordmasculine ; B 45 182 545 743 ; C 187 ; WX 649 ; N guillemotright ; B 57 65 589 520 ; C 188 ; WX 1064 ; N onequarter ; B 66 -15 976 743 ; C 189 ; WX 1064 ; N onehalf ; B 66 -15 1007 743 ; C 190 ; WX 1064 ; N threequarters ; B 43 -15 979 743 ; C 191 ; WX 580 ; N questiondown ; B 37 -14 488 730 ; C 192 ; WX 773 ; N Agrave ; B -65 0 691 928 ; C 193 ; WX 773 ; N Aacute ; B -65 0 691 928 ; C 194 ; WX 773 ; N Acircumflex ; B -65 0 691 928 ; C 195 ; WX 773 ; N Atilde ; B -65 0 691 929 ; C 196 ; WX 773 ; N Adieresis ; B -65 0 691 928 ; C 197 ; WX 773 ; N Aring ; B -65 0 691 929 ; C 198 ; WX 1084 ; N AE ; B -79 0 1072 730 ; C 199 ; WX 733 ; N Ccedilla ; B 36 -196 725 743 ; C 200 ; WX 683 ; N Egrave ; B 20 0 670 928 ; C 201 ; WX 683 ; N Eacute ; B 20 0 670 928 ; C 202 ; WX 683 ; N Ecircumflex ; B 20 0 670 928 ; C 203 ; WX 683 ; N Edieresis ; B 20 0 670 928 ; C 204 ; WX 372 ; N Igrave ; B 20 0 352 928 ; C 205 ; WX 372 ; N Iacute ; B 20 0 448 928 ; C 206 ; WX 372 ; N Icircumflex ; B 20 0 440 928 ; C 207 ; WX 372 ; N Idieresis ; B 20 0 442 928 ; C 208 ; WX 845 ; N Eth ; B -2 0 804 730 ; C 209 ; WX 836 ; N Ntilde ; B 20 0 816 929 ; C 210 ; WX 850 ; N Ograve ; B 36 -15 814 928 ; C 211 ; WX 850 ; N Oacute ; B 36 -15 814 928 ; C 212 ; WX 850 ; N Ocircumflex ; B 36 -15 814 928 ; C 213 ; WX 850 ; N Otilde ; B 36 -15 814 929 ; C 214 ; WX 850 ; N Odieresis ; B 36 -15 814 928 ; C 215 ; WX 837 ; N multiply ; B 125 20 713 607 ; C 216 ; WX 850 ; N Oslash ; B -47 -39 896 771 ; C 217 ; WX 812 ; N Ugrave ; B 67 -15 792 928 ; C 218 ; WX 812 ; N Uacute ; B 67 -15 792 928 ; C 219 ; WX 812 ; N Ucircumflex ; B 67 -15 792 928 ; C 220 ; WX 812 ; N Udieresis ; B 67 -15 792 928 ; C 221 ; WX 724 ; N Yacute ; B 62 0 810 928 ; C 222 ; WX 742 ; N Thorn ; B 20 0 695 730 ; C 223 ; WX 719 ; N germandbls ; B 30 -15 667 760 ; C 224 ; WX 674 ; N agrave ; B 17 -15 611 800 ; C 225 ; WX 674 ; N aacute ; B 17 -15 627 800 ; C 226 ; WX 674 ; N acircumflex ; B 17 -15 611 800 ; C 227 ; WX 674 ; N atilde ; B 17 -15 611 778 ; C 228 ; WX 674 ; N adieresis ; B 17 -15 611 774 ; C 229 ; WX 674 ; N aring ; B 17 -15 611 883 ; C 230 ; WX 1047 ; N ae ; B 17 -15 1008 561 ; C 231 ; WX 592 ; N ccedilla ; B 37 -196 582 561 ; C 232 ; WX 678 ; N egrave ; B 36 -15 641 800 ; C 233 ; WX 678 ; N eacute ; B 36 -15 650 800 ; C 234 ; WX 678 ; N ecircumflex ; B 36 -15 641 800 ; C 235 ; WX 678 ; N edieresis ; B 36 -15 641 774 ; C 236 ; WX 342 ; N igrave ; B 30 0 313 800 ; C 237 ; WX 342 ; N iacute ; B 30 0 471 800 ; C 238 ; WX 342 ; N icircumflex ; B 30 0 415 800 ; C 239 ; WX 342 ; N idieresis ; B 30 0 416 774 ; C 240 ; WX 687 ; N eth ; B 36 -15 679 760 ; C 241 ; WX 711 ; N ntilde ; B 30 0 654 778 ; C 242 ; WX 687 ; N ograve ; B 36 -15 651 800 ; C 243 ; WX 687 ; N oacute ; B 36 -15 651 800 ; C 244 ; WX 687 ; N ocircumflex ; B 36 -15 651 800 ; C 245 ; WX 687 ; N otilde ; B 36 -15 651 778 ; C 246 ; WX 687 ; N odieresis ; B 36 -15 651 774 ; C 247 ; WX 837 ; N divide ; B 105 41 732 585 ; C 248 ; WX 687 ; N oslash ; B -18 -50 701 598 ; C 249 ; WX 711 ; N ugrave ; B 60 -15 682 800 ; C 250 ; WX 711 ; N uacute ; B 60 -15 682 800 ; C 251 ; WX 711 ; N ucircumflex ; B 60 -15 682 800 ; C 252 ; WX 711 ; N udieresis ; B 60 -15 682 774 ; C 253 ; WX 651 ; N yacute ; B 0 -216 688 800 ; C 254 ; WX 715 ; N thorn ; B -10 -209 677 760 ; C 255 ; WX 651 ; N ydieresis ; B 0 -216 688 774 ; C -1 ; WX 773 ; N Amacron ; B -65 0 691 914 ; C -1 ; WX 674 ; N amacron ; B 17 -15 611 763 ; C -1 ; WX 773 ; N Abreve ; B -65 0 691 936 ; C -1 ; WX 674 ; N abreve ; B 17 -15 611 772 ; C -1 ; WX 773 ; N Aogonek ; B -65 -196 691 730 ; C -1 ; WX 674 ; N aogonek ; B 17 -196 611 561 ; C -1 ; WX 733 ; N Cacute ; B 36 -15 725 928 ; C -1 ; WX 592 ; N cacute ; B 37 -15 646 800 ; C -1 ; WX 733 ; N Ccircumflex ; B 36 -15 725 928 ; C -1 ; WX 592 ; N ccircumflex ; B 37 -15 589 800 ; C -1 ; WX 733 ; N Cdotaccent ; B 36 -15 725 928 ; C -1 ; WX 592 ; N cdotaccent ; B 37 -15 582 774 ; C -1 ; WX 733 ; N Ccaron ; B 36 -15 732 928 ; C -1 ; WX 592 ; N ccaron ; B 37 -15 634 800 ; C -1 ; WX 830 ; N Dcaron ; B 20 0 787 928 ; C -1 ; WX 715 ; N dcaron ; B 36 -15 948 760 ; C -1 ; WX 845 ; N Dcroat ; B -2 0 804 730 ; C -1 ; WX 715 ; N dcroat ; B 36 -15 817 760 ; C -1 ; WX 683 ; N Emacron ; B 20 0 670 914 ; C -1 ; WX 678 ; N emacron ; B 36 -15 641 764 ; C -1 ; WX 683 ; N Ebreve ; B 20 0 670 928 ; C -1 ; WX 678 ; N ebreve ; B 36 -15 641 785 ; C -1 ; WX 683 ; N Edotaccent ; B 20 0 670 928 ; C -1 ; WX 678 ; N edotaccent ; B 36 -15 641 774 ; C -1 ; WX 683 ; N Eogonek ; B 20 -196 670 730 ; C -1 ; WX 678 ; N eogonek ; B 36 -196 641 561 ; C -1 ; WX 683 ; N Ecaron ; B 20 0 670 928 ; C -1 ; WX 678 ; N ecaron ; B 36 -15 641 800 ; C -1 ; WX 820 ; N Gcircumflex ; B 36 -15 778 928 ; C -1 ; WX 715 ; N gcircumflex ; B 20 -216 683 800 ; C -1 ; WX 820 ; N Gbreve ; B 36 -15 778 928 ; C -1 ; WX 715 ; N gbreve ; B 20 -216 683 785 ; C -1 ; WX 820 ; N Gdotaccent ; B 36 -15 778 928 ; C -1 ; WX 715 ; N gdotaccent ; B 20 -216 683 774 ; C -1 ; WX 820 ; N Gcommaaccent ; B 36 -220 778 743 ; C -1 ; WX 715 ; N gcommaaccent ; B 20 -216 683 766 ; C -1 ; WX 836 ; N Hcircumflex ; B 20 0 816 928 ; C -1 ; WX 711 ; N hcircumflex ; B 30 0 654 928 ; C -1 ; WX 973 ; N Hbar ; B 89 0 936 730 ; C -1 ; WX 790 ; N hbar ; B 85 0 708 760 ; C -1 ; WX 372 ; N Itilde ; B 20 0 457 929 ; C -1 ; WX 342 ; N itilde ; B 30 0 432 778 ; C -1 ; WX 372 ; N Imacron ; B 20 0 417 914 ; C -1 ; WX 342 ; N imacron ; B 30 0 403 764 ; C -1 ; WX 372 ; N Ibreve ; B 20 0 453 928 ; C -1 ; WX 342 ; N ibreve ; B 30 0 428 785 ; C -1 ; WX 372 ; N Iogonek ; B 20 -196 352 730 ; C -1 ; WX 342 ; N iogonek ; B 30 -196 355 760 ; C -1 ; WX 372 ; N Idotaccent ; B 20 0 355 928 ; C -1 ; WX 342 ; N dotlessi ; B 30 0 313 547 ; C -1 ; WX 744 ; N IJ ; B 20 -201 723 730 ; C -1 ; WX 685 ; N ij ; B 30 -216 697 760 ; C -1 ; WX 372 ; N Jcircumflex ; B -167 -201 454 928 ; C -1 ; WX 342 ; N jcircumflex ; B -128 -216 428 800 ; C -1 ; WX 774 ; N Kcommaaccent ; B 20 -206 837 730 ; C -1 ; WX 665 ; N kcommaaccent ; B 30 -206 716 760 ; C -1 ; WX 665 ; N kgreenlandic ; B 30 0 717 547 ; C -1 ; WX 637 ; N Lacute ; B 20 0 638 928 ; C -1 ; WX 342 ; N lacute ; B 30 0 479 928 ; C -1 ; WX 637 ; N Lcommaaccent ; B 20 -206 566 730 ; C -1 ; WX 342 ; N lcommaaccent ; B -23 -206 355 760 ; C -1 ; WX 637 ; N Lcaron ; B 20 0 624 730 ; C -1 ; WX 458 ; N lcaron ; B 30 0 582 760 ; C -1 ; WX 637 ; N Ldot ; B 20 0 624 730 ; C -1 ; WX 486 ; N ldot ; B 30 0 555 760 ; C -1 ; WX 660 ; N Lslash ; B -23 0 604 730 ; C -1 ; WX 375 ; N lslash ; B -7 0 457 760 ; C -1 ; WX 836 ; N Nacute ; B 20 0 816 928 ; C -1 ; WX 711 ; N nacute ; B 30 0 654 804 ; C -1 ; WX 836 ; N Ncommaaccent ; B 20 -206 816 730 ; C -1 ; WX 711 ; N ncommaaccent ; B 30 -206 654 561 ; C -1 ; WX 836 ; N Ncaron ; B 20 0 816 928 ; C -1 ; WX 711 ; N ncaron ; B 30 0 654 800 ; C -1 ; WX 982 ; N napostrophe ; B 61 0 912 730 ; C -1 ; WX 836 ; N Eng ; B 31 -216 809 730 ; C -1 ; WX 711 ; N eng ; B 50 -216 673 561 ; C -1 ; WX 850 ; N Omacron ; B 36 -15 814 914 ; C -1 ; WX 687 ; N omacron ; B 36 -15 651 764 ; C -1 ; WX 850 ; N Obreve ; B 36 -15 814 928 ; C -1 ; WX 687 ; N obreve ; B 36 -15 651 785 ; C -1 ; WX 850 ; N Ohungarumlaut ; B 36 -15 814 928 ; C -1 ; WX 687 ; N ohungarumlaut ; B 36 -15 658 800 ; C -1 ; WX 1166 ; N OE ; B 41 0 1154 730 ; C -1 ; WX 1094 ; N oe ; B 36 -15 1055 561 ; C -1 ; WX 770 ; N Racute ; B 20 0 686 928 ; C -1 ; WX 493 ; N racute ; B 30 0 618 804 ; C -1 ; WX 770 ; N Rcommaaccent ; B 20 -206 686 730 ; C -1 ; WX 493 ; N rcommaaccent ; B -23 -206 545 561 ; C -1 ; WX 770 ; N Rcaron ; B 20 0 686 928 ; C -1 ; WX 493 ; N rcaron ; B 30 0 602 800 ; C -1 ; WX 720 ; N Sacute ; B 15 -15 666 928 ; C -1 ; WX 595 ; N sacute ; B 9 -15 618 804 ; C -1 ; WX 720 ; N Scircumflex ; B 15 -15 666 928 ; C -1 ; WX 595 ; N scircumflex ; B 9 -15 561 800 ; C -1 ; WX 720 ; N Scedilla ; B 15 -196 666 743 ; C -1 ; WX 595 ; N scedilla ; B 9 -196 561 561 ; C -1 ; WX 720 ; N Scaron ; B 15 -15 666 928 ; C -1 ; WX 595 ; N scaron ; B 9 -15 576 800 ; C -1 ; WX 682 ; N Tcommaaccent ; B 47 -196 749 730 ; C -1 ; WX 478 ; N tcommaaccent ; B 42 -196 509 703 ; C -1 ; WX 682 ; N Tcaron ; B 47 0 749 928 ; C -1 ; WX 478 ; N tcaron ; B 42 0 615 800 ; C -1 ; WX 682 ; N Tbar ; B 48 0 748 730 ; C -1 ; WX 478 ; N tbar ; B -5 0 494 703 ; C -1 ; WX 812 ; N Utilde ; B 67 -15 792 929 ; C -1 ; WX 711 ; N utilde ; B 60 -15 682 778 ; C -1 ; WX 812 ; N Umacron ; B 67 -15 792 914 ; C -1 ; WX 711 ; N umacron ; B 60 -15 682 763 ; C -1 ; WX 812 ; N Ubreve ; B 67 -15 792 928 ; C -1 ; WX 711 ; N ubreve ; B 60 -15 682 785 ; C -1 ; WX 812 ; N Uring ; B 67 -15 792 1051 ; C -1 ; WX 711 ; N uring ; B 60 -15 682 874 ; C -1 ; WX 812 ; N Uhungarumlaut ; B 67 -15 792 928 ; C -1 ; WX 711 ; N uhungarumlaut ; B 60 -15 682 800 ; C -1 ; WX 812 ; N Uogonek ; B 67 -204 792 730 ; C -1 ; WX 711 ; N uogonek ; B 60 -196 682 547 ; C -1 ; WX 1103 ; N Wcircumflex ; B 106 0 1144 931 ; C -1 ; WX 923 ; N wcircumflex ; B 86 0 927 804 ; C -1 ; WX 724 ; N Ycircumflex ; B 62 0 810 931 ; C -1 ; WX 651 ; N ycircumflex ; B 0 -216 688 804 ; C -1 ; WX 724 ; N Ydieresis ; B 62 0 810 928 ; C -1 ; WX 725 ; N Zacute ; B -26 0 741 928 ; C -1 ; WX 582 ; N zacute ; B -9 0 618 804 ; C -1 ; WX 725 ; N Zdotaccent ; B -26 0 741 919 ; C -1 ; WX 582 ; N zdotaccent ; B -9 0 586 760 ; C -1 ; WX 725 ; N Zcaron ; B -26 0 741 928 ; C -1 ; WX 582 ; N zcaron ; B -9 0 586 800 ; C -1 ; WX 435 ; N longs ; B 49 0 541 760 ; C -1 ; WX 733 ; N uni0186 ; B -14 -15 680 743 ; C -1 ; WX 695 ; N uni0190 ; B 31 -15 653 743 ; C -1 ; WX 695 ; N florin ; B -12 -209 662 760 ; C -1 ; WX 751 ; N uni0194 ; B 62 -142 817 730 ; C -1 ; WX 1547 ; N uni01C4 ; B 20 0 1571 928 ; C -1 ; WX 1450 ; N uni01C5 ; B 20 0 1417 800 ; C -1 ; WX 1306 ; N uni01C6 ; B 36 -15 1302 800 ; C -1 ; WX 976 ; N uni01C7 ; B 20 -201 989 730 ; C -1 ; WX 979 ; N uni01C8 ; B 20 -216 992 760 ; C -1 ; WX 669 ; N uni01C9 ; B 30 -216 697 760 ; C -1 ; WX 1193 ; N uni01CA ; B 20 -201 1188 730 ; C -1 ; WX 1212 ; N uni01CB ; B 20 -216 1191 760 ; C -1 ; WX 1063 ; N uni01CC ; B 30 -216 1066 760 ; C -1 ; WX 773 ; N uni01CD ; B -65 0 691 928 ; C -1 ; WX 674 ; N uni01CE ; B 17 -15 616 800 ; C -1 ; WX 372 ; N uni01CF ; B 20 0 473 928 ; C -1 ; WX 342 ; N uni01D0 ; B 30 0 457 800 ; C -1 ; WX 850 ; N uni01D1 ; B 36 -15 814 928 ; C -1 ; WX 687 ; N uni01D2 ; B 36 -15 651 800 ; C -1 ; WX 812 ; N uni01D3 ; B 67 -15 792 928 ; C -1 ; WX 711 ; N uni01D4 ; B 60 -15 682 800 ; C -1 ; WX 711 ; N uni01D6 ; B 60 -15 682 914 ; C -1 ; WX 674 ; N uni01DF ; B 17 -15 611 914 ; C -1 ; WX 1084 ; N uni01E2 ; B -79 0 1072 914 ; C -1 ; WX 1047 ; N uni01E3 ; B 17 -15 1008 759 ; C -1 ; WX 850 ; N uni01EA ; B 36 -204 814 743 ; C -1 ; WX 687 ; N uni01EB ; B 36 -204 651 561 ; C -1 ; WX 850 ; N uni01EC ; B 36 -204 814 914 ; C -1 ; WX 687 ; N uni01ED ; B 36 -204 651 763 ; C -1 ; WX 720 ; N Scommaaccent ; B 15 -232 666 743 ; C -1 ; WX 595 ; N scommaaccent ; B 9 -232 561 561 ; C -1 ; WX 682 ; N uni021A ; B 47 -232 749 730 ; C -1 ; WX 478 ; N uni021B ; B 42 -232 509 703 ; C -1 ; WX 687 ; N uni022B ; B 36 -15 651 914 ; C -1 ; WX 687 ; N uni022D ; B 36 -15 651 915 ; C -1 ; WX 850 ; N uni022E ; B 36 -15 814 928 ; C -1 ; WX 687 ; N uni022F ; B 36 -15 651 774 ; C -1 ; WX 687 ; N uni0231 ; B 36 -15 651 915 ; C -1 ; WX 724 ; N uni0232 ; B 62 0 810 914 ; C -1 ; WX 651 ; N uni0233 ; B 0 -216 688 763 ; C -1 ; WX 342 ; N dotlessj ; B -128 -216 313 547 ; C -1 ; WX 674 ; N uni0250 ; B 27 -15 622 561 ; C -1 ; WX 715 ; N uni0251 ; B 36 -15 686 561 ; C -1 ; WX 715 ; N uni0252 ; B -9 -15 641 561 ; C -1 ; WX 715 ; N uni0253 ; B 11 -15 660 760 ; C -1 ; WX 592 ; N uni0254 ; B -7 -15 534 561 ; C -1 ; WX 592 ; N uni0255 ; B 41 -69 582 561 ; C -1 ; WX 715 ; N uni0256 ; B 17 -15 708 760 ; C -1 ; WX 791 ; N uni0257 ; B 17 -15 877 760 ; C -1 ; WX 678 ; N uni0258 ; B 22 -15 638 561 ; C -1 ; WX 678 ; N uni0259 ; B 35 -15 638 561 ; C -1 ; WX 875 ; N uni025A ; B 37 -15 891 561 ; C -1 ; WX 544 ; N uni025B ; B -29 -11 531 561 ; C -1 ; WX 544 ; N uni025C ; B -51 -11 513 561 ; C -1 ; WX 773 ; N uni025D ; B -51 -11 788 561 ; C -1 ; WX 681 ; N uni025E ; B 22 -21 677 560 ; C -1 ; WX 342 ; N uni025F ; B -108 -216 338 547 ; C -1 ; WX 791 ; N uni0260 ; B 23 -216 896 760 ; C -1 ; WX 715 ; N uni0261 ; B 43 -216 706 547 ; C -1 ; WX 627 ; N uni0262 ; B 36 0 572 547 ; C -1 ; WX 734 ; N uni0263 ; B 48 -203 725 555 ; C -1 ; WX 635 ; N uni0264 ; B 83 -59 679 547 ; C -1 ; WX 711 ; N uni0265 ; B 80 -214 703 546 ; C -1 ; WX 711 ; N uni0266 ; B 10 0 633 760 ; C -1 ; WX 711 ; N uni0267 ; B 31 -216 654 760 ; C -1 ; WX 545 ; N uni0268 ; B 51 0 448 760 ; C -1 ; WX 440 ; N uni0269 ; B 66 -2 326 547 ; C -1 ; WX 545 ; N uni026A ; B 30 0 515 547 ; C -1 ; WX 558 ; N uni026B ; B 70 0 488 760 ; C -1 ; WX 693 ; N uni026C ; B 90 0 613 760 ; C -1 ; WX 342 ; N uni026D ; B 26 -216 357 760 ; C -1 ; WX 841 ; N uni026E ; B 31 -215 789 760 ; C -1 ; WX 1041 ; N uni026F ; B 61 -15 1014 546 ; C -1 ; WX 1041 ; N uni0270 ; B 79 -209 1033 546 ; C -1 ; WX 1041 ; N uni0271 ; B 49 -216 1002 561 ; C -1 ; WX 711 ; N uni0272 ; B -161 -216 673 561 ; C -1 ; WX 792 ; N uni0273 ; B 50 -216 749 561 ; C -1 ; WX 642 ; N uni0274 ; B -33 0 613 547 ; C -1 ; WX 687 ; N uni0275 ; B 35 -15 652 561 ; C -1 ; WX 908 ; N uni0276 ; B 36 -1 872 548 ; C -1 ; WX 681 ; N uni0277 ; B -19 0 585 575 ; C -1 ; WX 772 ; N uni0278 ; B 34 -209 737 760 ; C -1 ; WX 538 ; N uni0279 ; B 30 -14 545 547 ; C -1 ; WX 538 ; N uni027A ; B 10 -14 566 761 ; C -1 ; WX 649 ; N uni027B ; B 50 -216 607 547 ; C -1 ; WX 493 ; N uni027C ; B 9 -209 564 561 ; C -1 ; WX 493 ; N uni027D ; B 44 -216 565 561 ; C -1 ; WX 493 ; N uni027E ; B 30 0 481 547 ; C -1 ; WX 493 ; N uni027F ; B 114 0 444 547 ; C -1 ; WX 642 ; N uni0280 ; B -33 0 513 547 ; C -1 ; WX 642 ; N uni0281 ; B -33 0 613 547 ; C -1 ; WX 595 ; N uni0282 ; B 21 -216 581 561 ; C -1 ; WX 415 ; N uni0283 ; B -127 -216 519 760 ; C -1 ; WX 435 ; N uni0284 ; B -107 -216 539 760 ; C -1 ; WX 604 ; N uni0285 ; B 137 -216 486 561 ; C -1 ; WX 551 ; N uni0286 ; B -102 -217 656 760 ; C -1 ; WX 478 ; N uni0287 ; B -25 -156 442 547 ; C -1 ; WX 478 ; N uni0288 ; B 47 -216 515 703 ; C -1 ; WX 920 ; N uni0289 ; B 73 -15 845 547 ; C -1 ; WX 769 ; N uni028A ; B 16 -51 690 547 ; C -1 ; WX 769 ; N uni028B ; B 66 -2 633 547 ; C -1 ; WX 651 ; N uni028C ; B -39 0 585 547 ; C -1 ; WX 923 ; N uni028D ; B -18 0 837 547 ; C -1 ; WX 651 ; N uni028E ; B -62 0 621 763 ; C -1 ; WX 724 ; N uni028F ; B 53 0 649 547 ; C -1 ; WX 693 ; N uni0290 ; B 12 -216 651 547 ; C -1 ; WX 582 ; N uni0291 ; B -9 0 588 547 ; C -1 ; WX 640 ; N uni0292 ; B -24 -215 609 547 ; C -1 ; WX 640 ; N uni0293 ; B 21 -215 609 547 ; C -1 ; WX 572 ; N uni0294 ; B 59 0 552 760 ; C -1 ; WX 572 ; N uni0295 ; B 51 0 593 760 ; C -1 ; WX 572 ; N uni0296 ; B -32 -1 510 760 ; C -1 ; WX 572 ; N uni0297 ; B -11 -209 613 760 ; C -1 ; WX 665 ; N uni0298 ; B 1 -28 624 582 ; C -1 ; WX 643 ; N uni0299 ; B -33 0 563 547 ; C -1 ; WX 695 ; N uni029A ; B -2 -21 656 560 ; C -1 ; WX 684 ; N uni029B ; B 15 0 768 760 ; C -1 ; WX 642 ; N uni029C ; B -33 0 613 547 ; C -1 ; WX 342 ; N uni029D ; B -241 -217 354 760 ; C -1 ; WX 731 ; N uni029E ; B 72 -213 758 547 ; C -1 ; WX 496 ; N uni029F ; B -54 0 389 547 ; C -1 ; WX 791 ; N uni02A0 ; B 36 -209 895 760 ; C -1 ; WX 572 ; N uni02A1 ; B -4 0 552 760 ; C -1 ; WX 572 ; N uni02A2 ; B 51 0 593 760 ; C -1 ; WX 1155 ; N uni02A3 ; B 17 -15 1142 760 ; C -1 ; WX 1214 ; N uni02A4 ; B 36 -215 1162 760 ; C -1 ; WX 1154 ; N uni02A5 ; B 21 -55 1145 760 ; C -1 ; WX 973 ; N uni02A6 ; B 28 -15 926 703 ; C -1 ; WX 768 ; N uni02A7 ; B 42 -216 873 760 ; C -1 ; WX 929 ; N uni02A8 ; B 33 -69 923 703 ; C -1 ; WX 1026 ; N uni02A9 ; B 48 -216 999 760 ; C -1 ; WX 791 ; N uni02AA ; B 11 -15 739 760 ; C -1 ; WX 779 ; N uni02AB ; B 10 0 765 760 ; C -1 ; WX 590 ; N uni02AC ; B 19 0 632 641 ; C -1 ; WX 415 ; N uni02AD ; B -32 86 400 641 ; C -1 ; WX 676 ; N uni02AE ; B -18 -214 682 760 ; C -1 ; WX 789 ; N uni02AF ; B -18 -216 726 760 ; C -1 ; WX 455 ; N uni02B0 ; B 12 462 405 889 ; C -1 ; WX 455 ; N uni02B1 ; B 12 462 405 889 ; C -1 ; WX 219 ; N uni02B2 ; B -75 341 219 889 ; C -1 ; WX 315 ; N uni02B3 ; B 23 462 344 777 ; C -1 ; WX 315 ; N uni02B4 ; B 24 455 345 770 ; C -1 ; WX 315 ; N uni02B5 ; B 34 341 393 770 ; C -1 ; WX 410 ; N uni02B6 ; B -17 462 388 770 ; C -1 ; WX 590 ; N uni02B7 ; B 52 462 599 770 ; C -1 ; WX 416 ; N uni02B8 ; B 22 341 448 770 ; C -1 ; WX 379 ; N uni02BB ; B 112 417 390 730 ; C -1 ; WX 379 ; N afii57929 ; B 72 417 349 730 ; L n napostrophe ; C -1 ; WX 326 ; N uni02C0 ; B 43 462 351 889 ; C -1 ; WX 326 ; N uni02C1 ; B 31 462 374 889 ; C -1 ; WX 500 ; N circumflex ; B 105 616 483 800 ; C -1 ; WX 500 ; N caron ; B 150 616 528 800 ; C -1 ; WX 336 ; N uni02D0 ; B -8 0 299 547 ; C -1 ; WX 336 ; N uni02D1 ; B 63 361 264 547 ; C -1 ; WX 500 ; N breve ; B 166 639 497 785 ; C -1 ; WX 500 ; N dotaccent ; B 238 653 397 774 ; C -1 ; WX 500 ; N ring ; B 184 604 462 883 ; C -1 ; WX 500 ; N ogonek ; B 73 -196 285 0 ; C -1 ; WX 500 ; N tilde ; B 132 638 500 778 ; C -1 ; WX 500 ; N hungarumlaut ; B 143 616 563 800 ; C -1 ; WX 411 ; N uni02E0 ; B 35 349 458 774 ; C -1 ; WX 219 ; N uni02E1 ; B 12 462 207 889 ; C -1 ; WX 380 ; N uni02E2 ; B 11 455 356 777 ; C -1 ; WX 412 ; N uni02E3 ; B -20 462 427 770 ; C -1 ; WX 326 ; N uni02E4 ; B 31 462 374 889 ; C -1 ; WX 500 ; N gravecomb ; B 241 616 482 800 ; C -1 ; WX 500 ; N acutecomb ; B 337 616 650 800 ; C -1 ; WX 500 ; N uni0302 ; B 216 616 594 800 ; C -1 ; WX 500 ; N tildecomb ; B 243 638 611 778 ; C -1 ; WX 500 ; N uni0304 ; B 265 667 592 760 ; C -1 ; WX 500 ; N uni0306 ; B 276 639 607 785 ; C -1 ; WX 500 ; N uni0307 ; B 349 653 508 774 ; C -1 ; WX 500 ; N uni0308 ; B 262 653 595 774 ; C -1 ; WX 500 ; N uni030A ; B 294 604 573 883 ; C -1 ; WX 500 ; N uni030B ; B 253 616 674 800 ; C -1 ; WX 500 ; N uni030C ; B 261 616 639 800 ; C -1 ; WX 379 ; N uni0312 ; B 116 417 348 564 ; C -1 ; WX 711 ; N uni0321 ; B 195 -216 604 118 ; C -1 ; WX 711 ; N uni0322 ; B 397 -216 728 118 ; C -1 ; WX 500 ; N uni0326 ; B 108 -232 340 -86 ; C -1 ; WX 301 ; N uni0374 ; B 78 556 218 800 ; C -1 ; WX 301 ; N uni0375 ; B 78 -209 218 36 ; C -1 ; WX 361 ; N uni037A ; B 115 -209 247 -44 ; C -1 ; WX 336 ; N uni037E ; B -36 -143 324 547 ; C -1 ; WX 441 ; N tonos ; B 216 616 528 800 ; C -1 ; WX 500 ; N dieresistonos ; B 151 653 590 978 ; C -1 ; WX 797 ; N Alphatonos ; B -42 0 715 800 ; C -1 ; WX 379 ; N anoteleia ; B 83 252 297 442 ; C -1 ; WX 845 ; N Epsilontonos ; B 22 0 832 800 ; C -1 ; WX 1008 ; N Etatonos ; B 28 0 986 800 ; C -1 ; WX 563 ; N Iotatonos ; B 25 0 521 800 ; C -1 ; WX 890 ; N Omicrontonos ; B 28 -15 851 800 ; C -1 ; WX 979 ; N Upsilontonos ; B 19 0 1067 800 ; C -1 ; WX 872 ; N Omegatonos ; B -1 0 779 800 ; C -1 ; WX 353 ; N iotadieresistonos ; B 38 0 535 978 ; C -1 ; WX 773 ; N Alpha ; B -65 0 691 730 ; C -1 ; WX 762 ; N Beta ; B 20 0 700 730 ; C -1 ; WX 637 ; N Gamma ; B 20 0 681 730 ; C -1 ; WX 773 ; N uni0394 ; B -66 0 699 730 ; C -1 ; WX 683 ; N Epsilon ; B 20 0 670 730 ; C -1 ; WX 725 ; N Zeta ; B -26 0 741 730 ; C -1 ; WX 836 ; N Eta ; B 20 0 816 730 ; C -1 ; WX 850 ; N Theta ; B 36 -15 814 743 ; C -1 ; WX 372 ; N Iota ; B 20 0 352 730 ; C -1 ; WX 774 ; N Kappa ; B 20 0 837 730 ; C -1 ; WX 773 ; N Lambda ; B -66 0 699 730 ; C -1 ; WX 995 ; N Mu ; B 20 0 975 730 ; C -1 ; WX 836 ; N Nu ; B 20 0 816 730 ; C -1 ; WX 631 ; N Xi ; B 27 0 619 730 ; C -1 ; WX 850 ; N Omicron ; B 36 -15 814 743 ; C -1 ; WX 836 ; N Pi ; B 20 0 816 730 ; C -1 ; WX 732 ; N Rho ; B 20 0 720 730 ; C -1 ; WX 631 ; N Sigma ; B 20 0 630 730 ; C -1 ; WX 682 ; N Tau ; B 47 0 749 730 ; C -1 ; WX 724 ; N Upsilon ; B 62 0 810 730 ; C -1 ; WX 850 ; N Phi ; B 43 0 807 730 ; C -1 ; WX 770 ; N Chi ; B -51 0 813 730 ; C -1 ; WX 787 ; N Psi ; B 78 0 803 730 ; C -1 ; WX 769 ; N Omega ; B -45 0 735 737 ; C -1 ; WX 372 ; N Iotadieresis ; B 20 0 450 928 ; C -1 ; WX 724 ; N Upsilondieresis ; B 62 0 810 928 ; C -1 ; WX 611 ; N alphatonos ; B 26 -15 612 800 ; C -1 ; WX 556 ; N epsilontonos ; B 27 -15 567 800 ; C -1 ; WX 711 ; N etatonos ; B 49 -209 673 800 ; C -1 ; WX 342 ; N iotatonos ; B 30 0 438 800 ; C -1 ; WX 633 ; N upsilondieresistonos ; B 66 -15 652 978 ; C -1 ; WX 611 ; N alpha ; B 26 -15 612 561 ; C -1 ; WX 670 ; N beta ; B -18 -209 618 767 ; C -1 ; WX 651 ; N gamma ; B 88 -209 711 547 ; C -1 ; WX 687 ; N delta ; B 33 -15 648 743 ; C -1 ; WX 556 ; N epsilon ; B 27 -15 520 561 ; C -1 ; WX 625 ; N zeta ; B 90 -216 632 760 ; C -1 ; WX 711 ; N eta ; B 49 -209 673 561 ; C -1 ; WX 611 ; N theta ; B 39 -12 573 768 ; C -1 ; WX 342 ; N iota ; B 30 0 313 547 ; C -1 ; WX 629 ; N kappa ; B 30 0 680 547 ; C -1 ; WX 591 ; N lambda ; B -45 0 489 760 ; C -1 ; WX 711 ; N uni03BC ; B 4 -209 702 547 ; C -1 ; WX 651 ; N nu ; B 62 0 679 547 ; C -1 ; WX 614 ; N xi ; B 54 -216 606 760 ; C -1 ; WX 687 ; N omicron ; B 36 -15 651 561 ; C -1 ; WX 690 ; N pi ; B 28 0 658 547 ; C -1 ; WX 715 ; N rho ; B 9 -209 699 562 ; C -1 ; WX 551 ; N sigma1 ; B 62 -216 555 553 ; C -1 ; WX 778 ; N sigma ; B 36 -15 782 547 ; C -1 ; WX 579 ; N tau ; B 33 0 626 547 ; C -1 ; WX 633 ; N upsilon ; B 66 -15 598 547 ; C -1 ; WX 782 ; N phi ; B 78 -209 760 552 ; C -1 ; WX 645 ; N chi ; B -59 -209 694 547 ; C -1 ; WX 793 ; N psi ; B 79 -209 798 547 ; C -1 ; WX 837 ; N omega ; B 48 -1 778 547 ; C -1 ; WX 357 ; N iotadieresis ; B 38 0 421 774 ; C -1 ; WX 633 ; N upsilondieresis ; B 66 -15 598 774 ; C -1 ; WX 687 ; N omicrontonos ; B 36 -15 651 800 ; C -1 ; WX 633 ; N upsilontonos ; B 66 -15 598 800 ; C -1 ; WX 837 ; N omegatonos ; B 48 -1 778 800 ; C -1 ; WX 614 ; N uni03D0 ; B 39 -12 543 768 ; C -1 ; WX 619 ; N theta1 ; B 31 -12 573 768 ; C -1 ; WX 842 ; N Upsilon1 ; B 46 0 865 733 ; C -1 ; WX 1059 ; N uni03D3 ; B 22 0 1103 800 ; C -1 ; WX 842 ; N uni03D4 ; B 46 0 865 928 ; C -1 ; WX 796 ; N phi1 ; B 52 -209 737 760 ; C -1 ; WX 908 ; N omega1 ; B 85 -1 908 547 ; C -1 ; WX 662 ; N uni03D7 ; B -17 -202 686 554 ; C -1 ; WX 850 ; N uni03D8 ; B 58 -209 829 743 ; C -1 ; WX 687 ; N uni03D9 ; B 54 -209 671 561 ; C -1 ; WX 652 ; N uni03DA ; B 65 -211 654 730 ; C -1 ; WX 582 ; N uni03DB ; B 56 -216 597 616 ; C -1 ; WX 683 ; N uni03DC ; B 20 0 670 730 ; C -1 ; WX 524 ; N uni03DD ; B 10 -209 522 548 ; C -1 ; WX 659 ; N uni03DE ; B 47 -2 640 730 ; C -1 ; WX 659 ; N uni03DF ; B 67 0 586 760 ; C -1 ; WX 918 ; N uni03E0 ; B 102 -209 844 743 ; C -1 ; WX 627 ; N uni03E1 ; B -15 -180 515 559 ; C -1 ; WX 662 ; N uni03F0 ; B -36 -1 667 554 ; C -1 ; WX 715 ; N uni03F1 ; B 43 -216 700 562 ; C -1 ; WX 592 ; N uni03F2 ; B 37 -15 582 561 ; C -1 ; WX 342 ; N uni03F3 ; B -128 -216 355 760 ; C -1 ; WX 850 ; N uni03F4 ; B 39 -15 811 743 ; C -1 ; WX 644 ; N uni03F5 ; B 59 -15 602 561 ; C -1 ; WX 644 ; N uni03F6 ; B -26 -15 517 561 ; C -1 ; WX 742 ; N uni03F7 ; B 20 0 695 730 ; C -1 ; WX 715 ; N uni03F8 ; B -10 -209 677 760 ; C -1 ; WX 733 ; N uni03F9 ; B 36 -15 725 743 ; C -1 ; WX 995 ; N uni03FA ; B 20 0 974 730 ; C -1 ; WX 731 ; N uni03FB ; B -1 -209 723 547 ; C -1 ; WX 715 ; N uni03FC ; B -31 -209 699 562 ; C -1 ; WX 733 ; N uni03FD ; B -14 -15 680 743 ; C -1 ; WX 733 ; N uni03FE ; B 36 -15 725 743 ; C -1 ; WX 733 ; N uni03FF ; B -14 -15 680 743 ; C -1 ; WX 683 ; N uni0400 ; B 20 0 670 928 ; C -1 ; WX 683 ; N afii10023 ; B 20 0 670 928 ; C -1 ; WX 878 ; N afii10051 ; B 67 -201 798 730 ; C -1 ; WX 637 ; N afii10052 ; B 20 0 681 928 ; C -1 ; WX 733 ; N afii10053 ; B 40 -15 733 743 ; C -1 ; WX 720 ; N afii10054 ; B 15 -15 666 743 ; C -1 ; WX 372 ; N afii10055 ; B 20 0 352 730 ; C -1 ; WX 372 ; N afii10056 ; B 20 0 469 928 ; C -1 ; WX 372 ; N afii10057 ; B -167 -201 352 730 ; C -1 ; WX 1154 ; N afii10058 ; B -46 -14 1083 730 ; C -1 ; WX 1129 ; N afii10059 ; B 20 0 1039 730 ; C -1 ; WX 878 ; N afii10060 ; B 48 0 779 730 ; C -1 ; WX 774 ; N afii10061 ; B 20 0 837 928 ; C -1 ; WX 836 ; N uni040D ; B 20 0 816 928 ; C -1 ; WX 770 ; N afii10062 ; B 17 -15 814 928 ; C -1 ; WX 836 ; N afii10145 ; B 41 -209 837 730 ; C -1 ; WX 773 ; N afii10017 ; B -65 0 691 730 ; C -1 ; WX 762 ; N afii10018 ; B 20 0 671 730 ; C -1 ; WX 762 ; N afii10019 ; B 20 0 700 730 ; C -1 ; WX 637 ; N afii10020 ; B 20 0 681 730 ; C -1 ; WX 954 ; N afii10021 ; B -67 -209 907 730 ; C -1 ; WX 683 ; N afii10022 ; B 20 0 670 730 ; C -1 ; WX 1013 ; N afii10024 ; B -48 0 1036 730 ; C -1 ; WX 695 ; N afii10025 ; B 0 -15 638 743 ; C -1 ; WX 836 ; N afii10026 ; B 20 0 816 730 ; C -1 ; WX 836 ; N afii10027 ; B 20 0 816 928 ; C -1 ; WX 774 ; N afii10028 ; B 20 0 837 730 ; C -1 ; WX 830 ; N afii10029 ; B -46 -14 812 730 ; C -1 ; WX 995 ; N afii10030 ; B 20 0 975 730 ; C -1 ; WX 836 ; N afii10031 ; B 20 0 816 730 ; C -1 ; WX 850 ; N afii10032 ; B 36 -15 814 743 ; C -1 ; WX 836 ; N afii10033 ; B 20 0 816 730 ; C -1 ; WX 732 ; N afii10034 ; B 20 0 720 730 ; C -1 ; WX 733 ; N afii10035 ; B 36 -15 725 743 ; C -1 ; WX 682 ; N afii10036 ; B 47 0 749 730 ; C -1 ; WX 770 ; N afii10037 ; B 17 -15 814 730 ; C -1 ; WX 850 ; N afii10038 ; B 43 0 807 730 ; C -1 ; WX 770 ; N afii10039 ; B -51 0 813 730 ; C -1 ; WX 957 ; N afii10040 ; B 41 -209 910 730 ; C -1 ; WX 808 ; N afii10041 ; B 105 0 788 730 ; C -1 ; WX 1166 ; N afii10042 ; B 20 0 1146 730 ; C -1 ; WX 1286 ; N afii10043 ; B 41 -209 1240 730 ; C -1 ; WX 939 ; N afii10044 ; B 67 0 869 730 ; C -1 ; WX 1036 ; N afii10045 ; B 20 0 1016 730 ; C -1 ; WX 762 ; N afii10046 ; B 20 0 671 730 ; C -1 ; WX 733 ; N afii10047 ; B 0 -15 694 743 ; C -1 ; WX 1134 ; N afii10048 ; B 20 -15 1090 743 ; C -1 ; WX 770 ; N afii10049 ; B -51 0 750 730 ; C -1 ; WX 674 ; N afii10065 ; B 17 -15 611 561 ; C -1 ; WX 687 ; N afii10066 ; B 33 -15 648 743 ; C -1 ; WX 608 ; N afii10067 ; B 28 0 567 547 ; C -1 ; WX 522 ; N afii10068 ; B 28 0 550 547 ; C -1 ; WX 819 ; N afii10069 ; B -72 -209 768 547 ; C -1 ; WX 678 ; N afii10070 ; B 36 -15 641 561 ; C -1 ; WX 820 ; N afii10072 ; B -38 0 833 547 ; C -1 ; WX 556 ; N afii10073 ; B 0 -15 508 561 ; C -1 ; WX 690 ; N afii10074 ; B 28 0 658 547 ; C -1 ; WX 690 ; N afii10075 ; B 28 0 658 765 ; C -1 ; WX 629 ; N afii10076 ; B 30 0 680 547 ; C -1 ; WX 692 ; N afii10077 ; B -38 -15 657 547 ; C -1 ; WX 817 ; N afii10078 ; B 28 0 784 547 ; C -1 ; WX 690 ; N afii10079 ; B 28 0 658 547 ; C -1 ; WX 687 ; N afii10080 ; B 36 -15 651 561 ; C -1 ; WX 690 ; N afii10081 ; B 28 0 658 547 ; C -1 ; WX 715 ; N afii10082 ; B -10 -209 677 561 ; C -1 ; WX 592 ; N afii10083 ; B 37 -15 582 561 ; C -1 ; WX 579 ; N afii10084 ; B 33 0 626 547 ; C -1 ; WX 651 ; N afii10085 ; B 0 -216 688 547 ; C -1 ; WX 915 ; N afii10086 ; B 30 -209 880 730 ; C -1 ; WX 645 ; N afii10087 ; B -42 0 671 547 ; C -1 ; WX 806 ; N afii10088 ; B 28 -209 748 547 ; C -1 ; WX 686 ; N afii10089 ; B 81 0 625 547 ; C -1 ; WX 960 ; N afii10090 ; B 28 0 922 547 ; C -1 ; WX 1070 ; N afii10091 ; B 28 -209 1012 547 ; C -1 ; WX 751 ; N afii10092 ; B 49 0 693 547 ; C -1 ; WX 860 ; N afii10093 ; B 28 0 834 547 ; C -1 ; WX 607 ; N afii10094 ; B 28 0 546 547 ; C -1 ; WX 644 ; N afii10095 ; B 15 -15 595 561 ; C -1 ; WX 918 ; N afii10096 ; B 28 -15 879 561 ; C -1 ; WX 642 ; N afii10097 ; B -35 0 611 547 ; C -1 ; WX 678 ; N uni0450 ; B 36 -15 641 804 ; C -1 ; WX 678 ; N afii10071 ; B 36 -15 641 774 ; C -1 ; WX 711 ; N afii10099 ; B 28 -216 644 760 ; C -1 ; WX 522 ; N afii10100 ; B 28 0 605 804 ; C -1 ; WX 644 ; N afii10101 ; B 35 -15 578 561 ; C -1 ; WX 595 ; N afii10102 ; B 9 -15 561 561 ; C -1 ; WX 342 ; N afii10103 ; B 30 0 355 760 ; C -1 ; WX 342 ; N afii10104 ; B 30 0 406 774 ; C -1 ; WX 342 ; N afii10105 ; B -128 -216 355 760 ; C -1 ; WX 959 ; N afii10106 ; B -38 -15 893 547 ; C -1 ; WX 956 ; N afii10107 ; B 28 0 894 547 ; C -1 ; WX 711 ; N afii10108 ; B 28 0 644 760 ; C -1 ; WX 629 ; N afii10109 ; B 30 0 680 804 ; C -1 ; WX 690 ; N uni045D ; B 28 0 658 804 ; C -1 ; WX 651 ; N afii10110 ; B 0 -216 688 765 ; C -1 ; WX 690 ; N afii10193 ; B 28 -209 658 547 ; C -1 ; WX 636 ; N afii10050 ; B 20 0 710 879 ; C -1 ; WX 522 ; N afii10098 ; B 28 0 579 701 ; C -1 ; WX 637 ; N uni0492 ; B 16 0 681 730 ; C -1 ; WX 522 ; N uni0493 ; B 7 0 550 547 ; C -1 ; WX 774 ; N uni049A ; B 20 -209 837 730 ; C -1 ; WX 629 ; N uni049B ; B 30 -209 680 547 ; C -1 ; WX 770 ; N uni04B2 ; B -51 -209 813 730 ; C -1 ; WX 645 ; N uni04B3 ; B -42 -209 671 547 ; C -1 ; WX 830 ; N uni1E12 ; B 20 -189 787 730 ; C -1 ; WX 715 ; N uni1E13 ; B 35 -258 725 760 ; C -1 ; WX 637 ; N uni1E3C ; B 20 -189 566 730 ; C -1 ; WX 342 ; N uni1E3D ; B -118 -244 355 760 ; C -1 ; WX 836 ; N uni1E44 ; B 20 0 816 922 ; C -1 ; WX 711 ; N uni1E45 ; B 30 0 654 740 ; C -1 ; WX 836 ; N uni1E4A ; B 20 -189 816 730 ; C -1 ; WX 711 ; N uni1E4B ; B 30 -244 654 561 ; C -1 ; WX 682 ; N uni1E70 ; B 47 -189 749 730 ; C -1 ; WX 478 ; N uni1E71 ; B 3 -244 509 703 ; C -1 ; WX 1103 ; N Wgrave ; B 106 0 1144 986 ; C -1 ; WX 923 ; N wgrave ; B 86 0 927 804 ; C -1 ; WX 1103 ; N Wacute ; B 106 0 1144 986 ; C -1 ; WX 923 ; N wacute ; B 86 0 927 804 ; C -1 ; WX 1103 ; N Wdieresis ; B 106 0 1144 922 ; C -1 ; WX 923 ; N wdieresis ; B 86 0 927 740 ; C -1 ; WX 724 ; N Ygrave ; B 62 0 810 986 ; C -1 ; WX 651 ; N ygrave ; B 0 -216 688 804 ; C -1 ; WX 415 ; N uni2010 ; B 24 216 360 359 ; C -1 ; WX 415 ; N uni2011 ; B 24 216 360 359 ; C -1 ; WX 500 ; N figuredash ; B -30 210 496 337 ; C -1 ; WX 500 ; N endash ; B -30 210 496 337 ; C -1 ; WX 1000 ; N emdash ; B -30 210 996 337 ; C -1 ; WX 1000 ; N afii00208 ; B -30 210 996 337 ; C -1 ; WX 379 ; N quoteleft ; B 112 417 390 730 ; C -1 ; WX 379 ; N quoteright ; B 73 417 350 730 ; C -1 ; WX 379 ; N quotesinglbase ; B -35 -123 243 189 ; C -1 ; WX 644 ; N quotedblleft ; B 112 417 652 730 ; C -1 ; WX 644 ; N quotedblright ; B 73 417 612 730 ; C -1 ; WX 644 ; N quotedblbase ; B -35 -123 505 189 ; C -1 ; WX 500 ; N dagger ; B 38 -97 504 730 ; C -1 ; WX 500 ; N daggerdbl ; B -28 -97 504 730 ; C -1 ; WX 639 ; N bullet ; B 144 195 496 547 ; C -1 ; WX 1000 ; N ellipsis ; B 45 0 879 189 ; C -1 ; WX 1454 ; N perthousand ; B 55 -15 1401 743 ; C -1 ; WX 412 ; N guilsinglleft ; B 61 66 355 520 ; C -1 ; WX 412 ; N guilsinglright ; B 38 65 332 520 ; C -1 ; WX 455 ; N uni207F ; B 23 462 416 777 ; C -1 ; WX 695 ; N Euro ; B -42 -15 688 743 ; C -1 ; WX 1000 ; N trademark ; B 144 446 791 730 ; C -1 ; WX 543 ; N partialdiff ; B 28 -13 516 666 ; C -1 ; WX 696 ; N Delta ; B 0 0 697 720 ; C -1 ; WX 787 ; N product ; B 73 -192 712 720 ; C -1 ; WX 717 ; N summation ; B 20 -192 697 720 ; C -1 ; WX 837 ; N minus ; B 105 255 732 372 ; C -1 ; WX 166 ; N fraction ; B -278 -15 445 743 ; C -1 ; WX 379 ; N periodcentered ; B 83 252 297 442 ; C -1 ; WX 666 ; N radical ; B 37 -21 669 837 ; C -1 ; WX 833 ; N infinity ; B 95 90 739 504 ; C -1 ; WX 609 ; N integral ; B 24 -183 586 760 ; C -1 ; WX 837 ; N approxequal ; B 105 109 732 518 ; C -1 ; WX 837 ; N notequal ; B 105 -5 732 631 ; C -1 ; WX 837 ; N lessequal ; B 105 0 732 583 ; C -1 ; WX 837 ; N greaterequal ; B 105 0 732 583 ; C -1 ; WX 715 ; N house ; B 64 0 652 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 444 ; C -1 ; WX 538 ; N uni2311 ; B 2 113 536 647 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 444 ; C -1 ; WX 862 ; N uni237D ; B 1 -228 862 99 ; C -1 ; WX 715 ; N uni2423 ; B 21 -228 673 99 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 2 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 787 ; N fi ; B 49 0 798 760 ; C -1 ; WX 787 ; N fl ; B 49 0 798 760 ; C -1 ; WX 1113 ; N uniFFFD ; B 99 -139 1165 926 ; C -1 ; WX 500 ; N dlLtcaron ; B 227 616 431 800 ; C -1 ; WX 500 ; N Dieresis ; B 145 625 479 746 ; C -1 ; WX 500 ; N Acute ; B 227 616 484 746 ; C -1 ; WX 500 ; N Tilde ; B 125 616 493 747 ; C -1 ; WX 500 ; N Grave ; B 171 616 372 746 ; C -1 ; WX 500 ; N Circumflex ; B 112 616 477 746 ; C -1 ; WX 500 ; N Caron ; B 149 616 506 746 ; C -1 ; WX 500 ; N Breve ; B 163 616 489 746 ; C -1 ; WX 500 ; N Dotaccent ; B 233 625 392 746 ; C -1 ; WX 500 ; N Hungarumlaut ; B 113 616 598 746 ; C -1 ; WX 500 ; N Doublegrave ; B 84 616 459 746 ; EndCharMetrics StartKernData StartKernPairs 1791 KPX hyphen Tcaron -146 KPX hyphen Yacute -165 KPX hyphen Ydieresis -165 KPX hyphen Y -165 KPX hyphen X -100 KPX hyphen W -44 KPX hyphen V -72 KPX hyphen T -146 KPX A ygrave -72 KPX A uni0233 -72 KPX A ycircumflex -72 KPX A wdieresis -44 KPX A wacute -44 KPX A wgrave -44 KPX A wcircumflex -44 KPX A uni021B -54 KPX A tcommaaccent -54 KPX A cdotaccent -30 KPX A ccircumflex -30 KPX A uni0232 -114 KPX A Ygrave -114 KPX A Ycircumflex -114 KPX A Wdieresis -54 KPX A Wacute -54 KPX A Wgrave -54 KPX A Wcircumflex -54 KPX A Uogonek -44 KPX A Uhungarumlaut -44 KPX A Ubreve -44 KPX A Umacron -44 KPX A Utilde -44 KPX A uni021A -95 KPX A Tcommaaccent -95 KPX A uni022E -30 KPX A uni01EC -30 KPX A uni01EA -30 KPX A Ohungarumlaut -30 KPX A Obreve -30 KPX A Omacron -30 KPX A Cdotaccent -30 KPX A Ccircumflex -30 KPX A Uring -44 KPX A tcaron -54 KPX A Tcaron -95 KPX A dcaron -30 KPX A dcroat -30 KPX A ccaron -30 KPX A Ccaron -30 KPX A cacute -30 KPX A Cacute -30 KPX A yacute -72 KPX A Yacute -114 KPX A Ugrave -44 KPX A Ucircumflex -44 KPX A Uacute -44 KPX A Ograve -30 KPX A Ocircumflex -30 KPX A Oacute -30 KPX A quotedblbase 50 KPX A quotesinglbase 50 KPX A Ydieresis -114 KPX A ydieresis -72 KPX A quoteright -123 KPX A quotedblright -123 KPX A OE -30 KPX A Otilde -30 KPX A Oslash -30 KPX A ccedilla -30 KPX A Udieresis -44 KPX A Odieresis -30 KPX A Ccedilla -30 KPX A y -72 KPX A w -44 KPX A v -54 KPX A t -54 KPX A d -30 KPX A c -30 KPX A Y -114 KPX A W -54 KPX A V -67 KPX A U -44 KPX A T -95 KPX A O -30 KPX A C -30 KPX A semicolon 18 KPX A colon 18 KPX A period 18 KPX A comma 18 KPX B Ygrave -54 KPX B uni0232 -54 KPX B Ycircumflex -54 KPX B Wdieresis -54 KPX B Wacute -54 KPX B Wgrave -54 KPX B Wcircumflex -54 KPX B Yacute -54 KPX B Ydieresis -54 KPX B Y -54 KPX B W -54 KPX B V -40 KPX C Scommaaccent -35 KPX C Scircumflex -35 KPX C Sacute -35 KPX C Scedilla -35 KPX C Scaron -35 KPX C S -35 KPX D Ygrave -77 KPX D uni0232 -77 KPX D Ycircumflex -77 KPX D Yacute -77 KPX D quotedblbase -17 KPX D quotesinglbase -17 KPX D Ydieresis -77 KPX D Y -77 KPX D hyphen 18 KPX F uni01E3 -114 KPX F ygrave -91 KPX F uni0233 -91 KPX F ycircumflex -91 KPX F uogonek -95 KPX F uhungarumlaut -95 KPX F ubreve -95 KPX F umacron -95 KPX F utilde -95 KPX F rcommaaccent -109 KPX F uni022F -77 KPX F uni01ED -77 KPX F uni01EB -77 KPX F ohungarumlaut -77 KPX F obreve -77 KPX F omacron -77 KPX F eogonek -77 KPX F edotaccent -77 KPX F ebreve -77 KPX F emacron -77 KPX F aogonek -114 KPX F abreve -114 KPX F amacron -114 KPX F Aogonek -128 KPX F Abreve -128 KPX F Amacron -128 KPX F udieresis -95 KPX F aring -114 KPX F ae -114 KPX F semicolon -54 KPX F ograve -77 KPX F hyphen -49 KPX F quotedblbase -220 KPX F uring -95 KPX F otilde -77 KPX F edieresis -77 KPX F ugrave -95 KPX F comma -216 KPX F agrave -114 KPX F Atilde -128 KPX F ecircumflex -77 KPX F racute -109 KPX F egrave -77 KPX F Adieresis -128 KPX F Aacute -128 KPX F quoteright -17 KPX F ucircumflex -95 KPX F yacute -91 KPX F quotesinglbase -220 KPX F atilde -114 KPX F Acircumflex -128 KPX F oslash -77 KPX F ocircumflex -77 KPX F A -128 KPX F a -114 KPX F adieresis -114 KPX F odieresis -77 KPX F uacute -95 KPX F aacute -114 KPX F rcaron -109 KPX F period -220 KPX F acircumflex -114 KPX F eacute -77 KPX F ecaron -77 KPX F e -77 KPX F oe -77 KPX F ydieresis -91 KPX F o -77 KPX F r -109 KPX F u -95 KPX F Agrave -128 KPX F y -91 KPX F colon -54 KPX F oacute -77 KPX G Tcaron -17 KPX G Yacute -40 KPX G Ydieresis -40 KPX G Y -40 KPX G T -17 KPX K uring -54 KPX K Uring -35 KPX K ecaron -54 KPX K Ccaron -63 KPX K Cacute -63 KPX K yacute -100 KPX K Ugrave -35 KPX K Ucircumflex -35 KPX K Uacute -35 KPX K Ograve -63 KPX K Ocircumflex -63 KPX K Oacute -63 KPX K quotedblbase 18 KPX K quotesinglbase 18 KPX K ydieresis -100 KPX K oe -54 KPX K OE -86 KPX K Otilde -63 KPX K oslash -54 KPX K Oslash -26 KPX K udieresis -54 KPX K ucircumflex -54 KPX K ugrave -54 KPX K uacute -54 KPX K otilde -54 KPX K odieresis -54 KPX K ocircumflex -54 KPX K ograve -54 KPX K oacute -54 KPX K edieresis -54 KPX K ecircumflex -54 KPX K egrave -54 KPX K eacute -54 KPX K Udieresis -35 KPX K Odieresis -63 KPX K Ccedilla -63 KPX K y -100 KPX K u -54 KPX K o -54 KPX K e -54 KPX K W -26 KPX K U -35 KPX K O -63 KPX K C -63 KPX K hyphen -123 KPX L Uring -54 KPX L Tcaron -165 KPX L yacute -123 KPX L Yacute -155 KPX L Ugrave -54 KPX L Ucircumflex -54 KPX L Uacute -54 KPX L Ograve -35 KPX L Ocircumflex -35 KPX L Oacute -35 KPX L Ydieresis -155 KPX L ydieresis -123 KPX L quoteright -248 KPX L quotedblright -257 KPX L OE -35 KPX L Otilde -35 KPX L Oslash -35 KPX L Udieresis -54 KPX L Odieresis -35 KPX L y -123 KPX L Y -155 KPX L W -86 KPX L V -137 KPX L U -54 KPX L T -165 KPX L O -35 KPX O Yacute -72 KPX O Ydieresis -72 KPX O Y -72 KPX O X -35 KPX O V -35 KPX O period -21 KPX O hyphen 18 KPX O comma -21 KPX P udieresis -35 KPX P aring -63 KPX P ae -63 KPX P hyphen -17 KPX P quotedblbase -202 KPX P uring -35 KPX P edieresis -26 KPX P ugrave -35 KPX P comma -257 KPX P agrave -63 KPX P Atilde -91 KPX P ecircumflex -26 KPX P racute -30 KPX P quotedblright 18 KPX P egrave -26 KPX P Adieresis -91 KPX P Aacute -91 KPX P quoteright 27 KPX P ucircumflex -35 KPX P quotesinglbase -202 KPX P atilde -63 KPX P Acircumflex -91 KPX P u -35 KPX P scaron -35 KPX P A -91 KPX P a -63 KPX P adieresis -63 KPX P uacute -35 KPX P scedilla -35 KPX P aacute -63 KPX P rcaron -30 KPX P acircumflex -63 KPX P eacute -26 KPX P ecaron -26 KPX P e -26 KPX P s -35 KPX P r -30 KPX P period -257 KPX P Agrave -91 KPX Q hyphen 18 KPX R uring -54 KPX R Tcaron -44 KPX R ecaron -49 KPX R yacute -63 KPX R Yacute -91 KPX R Ydieresis -91 KPX R ydieresis -63 KPX R oe -49 KPX R oslash -49 KPX R udieresis -54 KPX R ucircumflex -54 KPX R ugrave -54 KPX R uacute -54 KPX R otilde -49 KPX R odieresis -49 KPX R ocircumflex -49 KPX R ograve -49 KPX R oacute -49 KPX R edieresis -49 KPX R ecircumflex -49 KPX R egrave -49 KPX R eacute -49 KPX R y -63 KPX R u -54 KPX R o -49 KPX R e -49 KPX R Y -91 KPX R T -44 KPX R period 18 KPX R comma 18 KPX S Scedilla -35 KPX S Scaron -35 KPX S S -35 KPX T udieresis -128 KPX T aring -118 KPX T ae -118 KPX T semicolon -54 KPX T ograve -128 KPX T hyphen -146 KPX T quotedblbase -146 KPX T uring -128 KPX T otilde -128 KPX T edieresis -128 KPX T ugrave -128 KPX T colon -54 KPX T agrave -118 KPX T Atilde -77 KPX T ecircumflex -128 KPX T ccedilla -128 KPX T racute -109 KPX T egrave -128 KPX T Adieresis -77 KPX T Aacute -77 KPX T ccaron -128 KPX T rcaron -109 KPX T ucircumflex -128 KPX T yacute -165 KPX T quotesinglbase -146 KPX T atilde -118 KPX T Acircumflex -77 KPX T oslash -128 KPX T ocircumflex -128 KPX T scaron -118 KPX T A -77 KPX T ecaron -128 KPX T scedilla -118 KPX T adieresis -118 KPX T w -137 KPX T odieresis -128 KPX T uacute -128 KPX T cacute -128 KPX T aacute -118 KPX T period -169 KPX T T 22 KPX T acircumflex -118 KPX T eacute -128 KPX T Tcaron 22 KPX T a -118 KPX T c -128 KPX T e -128 KPX T oe -128 KPX T ydieresis -165 KPX T o -128 KPX T s -118 KPX T r -109 KPX T u -128 KPX T Agrave -77 KPX T y -165 KPX T comma -160 KPX T oacute -128 KPX U Aacute -44 KPX U Acircumflex -44 KPX U Atilde -44 KPX U Agrave -44 KPX U Adieresis -44 KPX U A -44 KPX V uring -72 KPX V ecaron -72 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -67 KPX V Acircumflex -67 KPX V quotedblbase -132 KPX V quotesinglbase -132 KPX V oe -72 KPX V OE -21 KPX V Otilde -17 KPX V Atilde -67 KPX V Agrave -67 KPX V oslash -72 KPX V ae -77 KPX V Oslash -17 KPX V udieresis -72 KPX V ucircumflex -72 KPX V ugrave -72 KPX V uacute -72 KPX V otilde -72 KPX V odieresis -72 KPX V ocircumflex -72 KPX V ograve -72 KPX V oacute -72 KPX V edieresis -72 KPX V ecircumflex -72 KPX V egrave -72 KPX V eacute -72 KPX V aring -77 KPX V atilde -77 KPX V adieresis -77 KPX V acircumflex -77 KPX V agrave -77 KPX V aacute -77 KPX V Odieresis -17 KPX V Adieresis -67 KPX V u -72 KPX V o -72 KPX V i -17 KPX V e -72 KPX V a -77 KPX V O -17 KPX V A -67 KPX V semicolon -44 KPX V colon -44 KPX V period -155 KPX V hyphen -72 KPX V comma -155 KPX W aring -67 KPX W ae -67 KPX W semicolon -30 KPX W ograve -54 KPX W hyphen -44 KPX W period -86 KPX W otilde -54 KPX W edieresis -63 KPX W comma -86 KPX W agrave -67 KPX W Atilde -35 KPX W ecircumflex -63 KPX W racute -58 KPX W egrave -63 KPX W Adieresis -35 KPX W Aacute -35 KPX W atilde -67 KPX W Acircumflex -35 KPX W oslash -54 KPX W ocircumflex -54 KPX W A -35 KPX W a -67 KPX W adieresis -67 KPX W odieresis -54 KPX W aacute -67 KPX W rcaron -58 KPX W acircumflex -67 KPX W eacute -63 KPX W ecaron -63 KPX W e -63 KPX W oe -54 KPX W o -54 KPX W r -58 KPX W Agrave -35 KPX W colon -30 KPX W oacute -54 KPX X ecaron -63 KPX X Ccaron -35 KPX X Cacute -35 KPX X Ograve -35 KPX X Ocircumflex -35 KPX X Oacute -35 KPX X OE -54 KPX X Otilde -35 KPX X Oslash -35 KPX X edieresis -63 KPX X ecircumflex -63 KPX X egrave -63 KPX X eacute -63 KPX X Odieresis -35 KPX X Ccedilla -35 KPX X e -63 KPX X O -35 KPX X C -35 KPX X hyphen -118 KPX Y uring -109 KPX Y ecaron -128 KPX Y Ccaron -35 KPX Y Cacute -35 KPX Y Ograve -35 KPX Y Ocircumflex -35 KPX Y Oacute -35 KPX Y Aacute -95 KPX Y Acircumflex -95 KPX Y quotedblbase -197 KPX Y quotesinglbase -183 KPX Y oe -128 KPX Y OE -58 KPX Y Otilde -35 KPX Y Atilde -95 KPX Y Agrave -95 KPX Y oslash -128 KPX Y ae -118 KPX Y Oslash -35 KPX Y udieresis -109 KPX Y ucircumflex -109 KPX Y ugrave -109 KPX Y uacute -109 KPX Y otilde -128 KPX Y odieresis -128 KPX Y ocircumflex -128 KPX Y ograve -128 KPX Y oacute -128 KPX Y edieresis -128 KPX Y ecircumflex -128 KPX Y egrave -128 KPX Y eacute -128 KPX Y aring -118 KPX Y atilde -118 KPX Y adieresis -118 KPX Y acircumflex -118 KPX Y agrave -118 KPX Y aacute -118 KPX Y Odieresis -35 KPX Y Ccedilla -35 KPX Y Adieresis -95 KPX Y u -109 KPX Y o -128 KPX Y e -128 KPX Y a -118 KPX Y O -35 KPX Y C -35 KPX Y A -95 KPX Y semicolon -86 KPX Y colon -86 KPX Y period -165 KPX Y hyphen -146 KPX Y comma -165 KPX Z hyphen -72 KPX a yacute -30 KPX a ydieresis -30 KPX a y -30 KPX f quoteright 68 KPX f quotedblright 41 KPX f period -54 KPX f hyphen -17 KPX f comma -54 KPX k ecaron -35 KPX k oe -35 KPX k oslash -21 KPX k otilde -35 KPX k odieresis -35 KPX k ocircumflex -35 KPX k ograve -35 KPX k oacute -35 KPX k edieresis -35 KPX k ecircumflex -35 KPX k egrave -35 KPX k eacute -35 KPX k o -35 KPX k e -35 KPX r quoteright 41 KPX r quotedblright 18 KPX r period -142 KPX r comma -146 KPX v period -81 KPX v comma -81 KPX w period -63 KPX w comma -63 KPX y period -91 KPX y comma -77 KPX Agrave ygrave -72 KPX Agrave uni0233 -72 KPX Agrave ycircumflex -72 KPX Agrave wdieresis -44 KPX Agrave wacute -44 KPX Agrave wgrave -44 KPX Agrave wcircumflex -44 KPX Agrave uni021B -54 KPX Agrave tcommaaccent -54 KPX Agrave cdotaccent -30 KPX Agrave ccircumflex -30 KPX Agrave uni0232 -114 KPX Agrave Ygrave -114 KPX Agrave Ycircumflex -114 KPX Agrave Wdieresis -54 KPX Agrave Wacute -54 KPX Agrave Wgrave -54 KPX Agrave Wcircumflex -54 KPX Agrave Uogonek -44 KPX Agrave Uhungarumlaut -44 KPX Agrave Ubreve -44 KPX Agrave Umacron -44 KPX Agrave Utilde -44 KPX Agrave uni021A -95 KPX Agrave Tcommaaccent -95 KPX Agrave uni022E -30 KPX Agrave uni01EC -30 KPX Agrave uni01EA -30 KPX Agrave Ohungarumlaut -30 KPX Agrave Obreve -30 KPX Agrave Omacron -30 KPX Agrave Cdotaccent -30 KPX Agrave Ccircumflex -30 KPX Agrave Uring -44 KPX Agrave tcaron -54 KPX Agrave Tcaron -95 KPX Agrave dcaron -30 KPX Agrave dcroat -30 KPX Agrave ccaron -30 KPX Agrave Ccaron -30 KPX Agrave cacute -30 KPX Agrave Cacute -30 KPX Agrave yacute -72 KPX Agrave Yacute -114 KPX Agrave Ugrave -44 KPX Agrave Ucircumflex -44 KPX Agrave Uacute -44 KPX Agrave Ograve -30 KPX Agrave Ocircumflex -30 KPX Agrave Oacute -30 KPX Agrave quotedblbase 50 KPX Agrave quotesinglbase 50 KPX Agrave Ydieresis -114 KPX Agrave ydieresis -72 KPX Agrave quoteright -123 KPX Agrave quotedblright -123 KPX Agrave OE -30 KPX Agrave Otilde -30 KPX Agrave Oslash -30 KPX Agrave ccedilla -30 KPX Agrave Udieresis -44 KPX Agrave Odieresis -30 KPX Agrave Ccedilla -30 KPX Agrave y -72 KPX Agrave w -44 KPX Agrave v -54 KPX Agrave t -54 KPX Agrave d -30 KPX Agrave c -30 KPX Agrave Y -114 KPX Agrave W -54 KPX Agrave V -67 KPX Agrave U -44 KPX Agrave T -95 KPX Agrave O -30 KPX Agrave C -30 KPX Agrave semicolon 18 KPX Agrave colon 18 KPX Agrave period 18 KPX Agrave comma 18 KPX Aacute ygrave -72 KPX Aacute uni0233 -72 KPX Aacute ycircumflex -72 KPX Aacute wdieresis -44 KPX Aacute wacute -44 KPX Aacute wgrave -44 KPX Aacute wcircumflex -44 KPX Aacute uni021B -54 KPX Aacute tcommaaccent -54 KPX Aacute cdotaccent -30 KPX Aacute ccircumflex -30 KPX Aacute uni0232 -114 KPX Aacute Ygrave -114 KPX Aacute Ycircumflex -114 KPX Aacute Wdieresis -54 KPX Aacute Wacute -54 KPX Aacute Wgrave -54 KPX Aacute Wcircumflex -54 KPX Aacute Uogonek -44 KPX Aacute Uhungarumlaut -44 KPX Aacute Ubreve -44 KPX Aacute Umacron -44 KPX Aacute Utilde -44 KPX Aacute uni021A -95 KPX Aacute Tcommaaccent -95 KPX Aacute uni022E -30 KPX Aacute uni01EC -30 KPX Aacute uni01EA -30 KPX Aacute Ohungarumlaut -30 KPX Aacute Obreve -30 KPX Aacute Omacron -30 KPX Aacute Cdotaccent -30 KPX Aacute Ccircumflex -30 KPX Aacute Uring -44 KPX Aacute tcaron -54 KPX Aacute Tcaron -95 KPX Aacute dcaron -30 KPX Aacute dcroat -30 KPX Aacute ccaron -30 KPX Aacute Ccaron -30 KPX Aacute cacute -30 KPX Aacute Cacute -30 KPX Aacute yacute -72 KPX Aacute Yacute -114 KPX Aacute Ugrave -44 KPX Aacute Ucircumflex -44 KPX Aacute Uacute -44 KPX Aacute Ograve -30 KPX Aacute Ocircumflex -30 KPX Aacute Oacute -30 KPX Aacute quotedblbase 50 KPX Aacute quotesinglbase 50 KPX Aacute Ydieresis -114 KPX Aacute ydieresis -72 KPX Aacute quoteright -123 KPX Aacute quotedblright -123 KPX Aacute OE -30 KPX Aacute Otilde -30 KPX Aacute Oslash -30 KPX Aacute ccedilla -30 KPX Aacute Udieresis -44 KPX Aacute Odieresis -30 KPX Aacute Ccedilla -30 KPX Aacute y -72 KPX Aacute w -44 KPX Aacute v -54 KPX Aacute t -54 KPX Aacute d -30 KPX Aacute c -30 KPX Aacute Y -114 KPX Aacute W -54 KPX Aacute V -67 KPX Aacute U -44 KPX Aacute T -95 KPX Aacute O -30 KPX Aacute C -30 KPX Aacute semicolon 18 KPX Aacute colon 18 KPX Aacute period 18 KPX Aacute comma 18 KPX Acircumflex ygrave -72 KPX Acircumflex uni0233 -72 KPX Acircumflex ycircumflex -72 KPX Acircumflex wdieresis -44 KPX Acircumflex wacute -44 KPX Acircumflex wgrave -44 KPX Acircumflex wcircumflex -44 KPX Acircumflex uni021B -54 KPX Acircumflex tcommaaccent -54 KPX Acircumflex cdotaccent -30 KPX Acircumflex ccircumflex -30 KPX Acircumflex uni0232 -114 KPX Acircumflex Ygrave -114 KPX Acircumflex Ycircumflex -114 KPX Acircumflex Wdieresis -54 KPX Acircumflex Wacute -54 KPX Acircumflex Wgrave -54 KPX Acircumflex Wcircumflex -54 KPX Acircumflex Uogonek -44 KPX Acircumflex Uhungarumlaut -44 KPX Acircumflex Ubreve -44 KPX Acircumflex Umacron -44 KPX Acircumflex Utilde -44 KPX Acircumflex uni021A -95 KPX Acircumflex Tcommaaccent -95 KPX Acircumflex uni022E -30 KPX Acircumflex uni01EC -30 KPX Acircumflex uni01EA -30 KPX Acircumflex Ohungarumlaut -30 KPX Acircumflex Obreve -30 KPX Acircumflex Omacron -30 KPX Acircumflex Cdotaccent -30 KPX Acircumflex Ccircumflex -30 KPX Acircumflex Uring -44 KPX Acircumflex tcaron -54 KPX Acircumflex Tcaron -95 KPX Acircumflex dcaron -30 KPX Acircumflex dcroat -30 KPX Acircumflex ccaron -30 KPX Acircumflex Ccaron -30 KPX Acircumflex cacute -30 KPX Acircumflex Cacute -30 KPX Acircumflex yacute -72 KPX Acircumflex Yacute -114 KPX Acircumflex Ugrave -44 KPX Acircumflex Ucircumflex -44 KPX Acircumflex Uacute -44 KPX Acircumflex Ograve -30 KPX Acircumflex Ocircumflex -30 KPX Acircumflex Oacute -30 KPX Acircumflex quotedblbase 50 KPX Acircumflex quotesinglbase 50 KPX Acircumflex Ydieresis -114 KPX Acircumflex ydieresis -72 KPX Acircumflex quoteright -123 KPX Acircumflex quotedblright -123 KPX Acircumflex OE -30 KPX Acircumflex Otilde -30 KPX Acircumflex Oslash -30 KPX Acircumflex ccedilla -30 KPX Acircumflex Udieresis -44 KPX Acircumflex Odieresis -30 KPX Acircumflex Ccedilla -30 KPX Acircumflex y -72 KPX Acircumflex w -44 KPX Acircumflex v -54 KPX Acircumflex t -54 KPX Acircumflex d -30 KPX Acircumflex c -30 KPX Acircumflex Y -114 KPX Acircumflex W -54 KPX Acircumflex V -67 KPX Acircumflex U -44 KPX Acircumflex T -95 KPX Acircumflex O -30 KPX Acircumflex C -30 KPX Acircumflex semicolon 18 KPX Acircumflex colon 18 KPX Acircumflex period 18 KPX Acircumflex comma 18 KPX Atilde ygrave -72 KPX Atilde uni0233 -72 KPX Atilde ycircumflex -72 KPX Atilde wdieresis -44 KPX Atilde wacute -44 KPX Atilde wgrave -44 KPX Atilde wcircumflex -44 KPX Atilde uni021B -54 KPX Atilde tcommaaccent -54 KPX Atilde cdotaccent -30 KPX Atilde ccircumflex -30 KPX Atilde uni0232 -114 KPX Atilde Ygrave -114 KPX Atilde Ycircumflex -114 KPX Atilde Wdieresis -54 KPX Atilde Wacute -54 KPX Atilde Wgrave -54 KPX Atilde Wcircumflex -54 KPX Atilde Uogonek -44 KPX Atilde Uhungarumlaut -44 KPX Atilde Ubreve -44 KPX Atilde Umacron -44 KPX Atilde Utilde -44 KPX Atilde uni021A -95 KPX Atilde Tcommaaccent -95 KPX Atilde uni022E -30 KPX Atilde uni01EC -30 KPX Atilde uni01EA -30 KPX Atilde Ohungarumlaut -30 KPX Atilde Obreve -30 KPX Atilde Omacron -30 KPX Atilde Cdotaccent -30 KPX Atilde Ccircumflex -30 KPX Atilde Uring -44 KPX Atilde tcaron -54 KPX Atilde Tcaron -95 KPX Atilde dcaron -30 KPX Atilde dcroat -30 KPX Atilde ccaron -30 KPX Atilde Ccaron -30 KPX Atilde cacute -30 KPX Atilde Cacute -30 KPX Atilde yacute -72 KPX Atilde Yacute -114 KPX Atilde Ugrave -44 KPX Atilde Ucircumflex -44 KPX Atilde Uacute -44 KPX Atilde Ograve -30 KPX Atilde Ocircumflex -30 KPX Atilde Oacute -30 KPX Atilde quotedblbase 50 KPX Atilde quotesinglbase 50 KPX Atilde Ydieresis -114 KPX Atilde ydieresis -72 KPX Atilde quoteright -123 KPX Atilde quotedblright -123 KPX Atilde OE -30 KPX Atilde Otilde -30 KPX Atilde Oslash -30 KPX Atilde ccedilla -30 KPX Atilde Udieresis -44 KPX Atilde Odieresis -30 KPX Atilde Ccedilla -30 KPX Atilde y -72 KPX Atilde w -44 KPX Atilde v -54 KPX Atilde t -54 KPX Atilde d -30 KPX Atilde c -30 KPX Atilde Y -114 KPX Atilde W -54 KPX Atilde V -67 KPX Atilde U -44 KPX Atilde T -95 KPX Atilde O -30 KPX Atilde C -30 KPX Atilde semicolon 18 KPX Atilde colon 18 KPX Atilde period 18 KPX Atilde comma 18 KPX Adieresis ygrave -72 KPX Adieresis uni0233 -72 KPX Adieresis ycircumflex -72 KPX Adieresis wdieresis -44 KPX Adieresis wacute -44 KPX Adieresis wgrave -44 KPX Adieresis wcircumflex -44 KPX Adieresis uni021B -54 KPX Adieresis tcommaaccent -54 KPX Adieresis cdotaccent -30 KPX Adieresis ccircumflex -30 KPX Adieresis uni0232 -114 KPX Adieresis Ygrave -114 KPX Adieresis Ycircumflex -114 KPX Adieresis Wdieresis -54 KPX Adieresis Wacute -54 KPX Adieresis Wgrave -54 KPX Adieresis Wcircumflex -54 KPX Adieresis Uogonek -44 KPX Adieresis Uhungarumlaut -44 KPX Adieresis Ubreve -44 KPX Adieresis Umacron -44 KPX Adieresis Utilde -44 KPX Adieresis uni021A -95 KPX Adieresis Tcommaaccent -95 KPX Adieresis uni022E -30 KPX Adieresis uni01EC -30 KPX Adieresis uni01EA -30 KPX Adieresis Ohungarumlaut -30 KPX Adieresis Obreve -30 KPX Adieresis Omacron -30 KPX Adieresis Cdotaccent -30 KPX Adieresis Ccircumflex -30 KPX Adieresis Uring -44 KPX Adieresis tcaron -54 KPX Adieresis Tcaron -95 KPX Adieresis dcaron -30 KPX Adieresis dcroat -30 KPX Adieresis ccaron -30 KPX Adieresis Ccaron -30 KPX Adieresis cacute -30 KPX Adieresis Cacute -30 KPX Adieresis yacute -72 KPX Adieresis Yacute -114 KPX Adieresis Ugrave -44 KPX Adieresis Ucircumflex -44 KPX Adieresis Uacute -44 KPX Adieresis Ograve -30 KPX Adieresis Ocircumflex -30 KPX Adieresis Oacute -30 KPX Adieresis quotedblbase 50 KPX Adieresis quotesinglbase 50 KPX Adieresis Ydieresis -114 KPX Adieresis ydieresis -72 KPX Adieresis quoteright -123 KPX Adieresis quotedblright -123 KPX Adieresis OE -30 KPX Adieresis Otilde -30 KPX Adieresis Oslash -30 KPX Adieresis ccedilla -30 KPX Adieresis Udieresis -44 KPX Adieresis Odieresis -30 KPX Adieresis Ccedilla -30 KPX Adieresis y -72 KPX Adieresis w -44 KPX Adieresis v -54 KPX Adieresis t -54 KPX Adieresis d -30 KPX Adieresis c -30 KPX Adieresis Y -114 KPX Adieresis W -54 KPX Adieresis V -67 KPX Adieresis U -44 KPX Adieresis T -95 KPX Adieresis O -30 KPX Adieresis C -30 KPX Adieresis semicolon 18 KPX Adieresis colon 18 KPX Adieresis period 18 KPX Adieresis comma 18 KPX AE hyphen -17 KPX Ccedilla Scommaaccent -35 KPX Ccedilla Scircumflex -35 KPX Ccedilla Sacute -35 KPX Ccedilla Scedilla -35 KPX Ccedilla Scaron -35 KPX Ccedilla S -35 KPX Eth Ygrave -77 KPX Eth uni0232 -77 KPX Eth Ycircumflex -77 KPX Eth Yacute -77 KPX Eth quotedblbase -17 KPX Eth quotesinglbase -17 KPX Eth Ydieresis -77 KPX Eth Y -77 KPX Eth hyphen 18 KPX Ograve Yacute -72 KPX Ograve Ydieresis -72 KPX Ograve Y -72 KPX Ograve X -35 KPX Ograve V -35 KPX Ograve period -21 KPX Ograve hyphen 18 KPX Ograve comma -21 KPX Oacute Yacute -72 KPX Oacute Ydieresis -72 KPX Oacute Y -72 KPX Oacute X -35 KPX Oacute V -35 KPX Oacute period -21 KPX Oacute hyphen 18 KPX Oacute comma -21 KPX Ocircumflex Yacute -72 KPX Ocircumflex Ydieresis -72 KPX Ocircumflex Y -72 KPX Ocircumflex X -35 KPX Ocircumflex V -35 KPX Ocircumflex period -21 KPX Ocircumflex hyphen 18 KPX Ocircumflex comma -21 KPX Otilde Yacute -72 KPX Otilde Ydieresis -72 KPX Otilde Y -72 KPX Otilde X -35 KPX Otilde V -35 KPX Otilde period -21 KPX Otilde hyphen 18 KPX Otilde comma -21 KPX Odieresis Yacute -72 KPX Odieresis Ydieresis -72 KPX Odieresis Y -72 KPX Odieresis X -35 KPX Odieresis V -35 KPX Odieresis period -21 KPX Odieresis hyphen 18 KPX Odieresis comma -21 KPX Oslash Yacute -17 KPX Oslash Aacute -17 KPX Oslash Acircumflex -17 KPX Oslash Ydieresis -17 KPX Oslash Atilde -17 KPX Oslash Agrave -17 KPX Oslash Adieresis -17 KPX Oslash Y -17 KPX Oslash X -35 KPX Oslash V -17 KPX Oslash A -17 KPX Oslash period -21 KPX Oslash hyphen 18 KPX Oslash comma -21 KPX Ugrave Aacute -44 KPX Ugrave Acircumflex -44 KPX Ugrave Atilde -44 KPX Ugrave Agrave -44 KPX Ugrave Adieresis -44 KPX Ugrave A -44 KPX Uacute Aacute -44 KPX Uacute Acircumflex -44 KPX Uacute Atilde -44 KPX Uacute Agrave -44 KPX Uacute Adieresis -44 KPX Uacute A -44 KPX Ucircumflex Aacute -44 KPX Ucircumflex Acircumflex -44 KPX Ucircumflex Atilde -44 KPX Ucircumflex Agrave -44 KPX Ucircumflex Adieresis -44 KPX Ucircumflex A -44 KPX Udieresis Aacute -44 KPX Udieresis Acircumflex -44 KPX Udieresis Atilde -44 KPX Udieresis Agrave -44 KPX Udieresis Adieresis -44 KPX Udieresis A -44 KPX Yacute uring -109 KPX Yacute ecaron -128 KPX Yacute Ccaron -35 KPX Yacute Cacute -35 KPX Yacute Ograve -35 KPX Yacute Ocircumflex -35 KPX Yacute Oacute -35 KPX Yacute Aacute -95 KPX Yacute Acircumflex -95 KPX Yacute quotedblbase -197 KPX Yacute quotesinglbase -183 KPX Yacute oe -128 KPX Yacute OE -58 KPX Yacute Otilde -35 KPX Yacute Atilde -95 KPX Yacute Agrave -95 KPX Yacute oslash -128 KPX Yacute ae -118 KPX Yacute Oslash -35 KPX Yacute udieresis -109 KPX Yacute ucircumflex -109 KPX Yacute ugrave -109 KPX Yacute uacute -109 KPX Yacute otilde -128 KPX Yacute odieresis -128 KPX Yacute ocircumflex -128 KPX Yacute ograve -128 KPX Yacute oacute -128 KPX Yacute edieresis -128 KPX Yacute ecircumflex -128 KPX Yacute egrave -128 KPX Yacute eacute -128 KPX Yacute aring -118 KPX Yacute atilde -118 KPX Yacute adieresis -118 KPX Yacute acircumflex -118 KPX Yacute agrave -118 KPX Yacute aacute -118 KPX Yacute Odieresis -35 KPX Yacute Ccedilla -35 KPX Yacute Adieresis -95 KPX Yacute u -109 KPX Yacute o -128 KPX Yacute e -128 KPX Yacute a -118 KPX Yacute O -35 KPX Yacute C -35 KPX Yacute A -95 KPX Yacute semicolon -86 KPX Yacute colon -86 KPX Yacute period -165 KPX Yacute hyphen -146 KPX Yacute comma -165 KPX agrave yacute -30 KPX agrave ydieresis -30 KPX agrave y -30 KPX aacute yacute -30 KPX aacute ydieresis -30 KPX aacute y -30 KPX acircumflex yacute -30 KPX acircumflex ydieresis -30 KPX acircumflex y -30 KPX atilde yacute -30 KPX atilde ydieresis -30 KPX atilde y -30 KPX adieresis yacute -30 KPX adieresis ydieresis -30 KPX adieresis y -30 KPX aring yacute -30 KPX aring ydieresis -30 KPX aring y -30 KPX yacute period -91 KPX yacute comma -77 KPX ydieresis period -91 KPX ydieresis comma -77 KPX Amacron ygrave -72 KPX Amacron uni0233 -72 KPX Amacron ycircumflex -72 KPX Amacron wdieresis -44 KPX Amacron wacute -44 KPX Amacron wgrave -44 KPX Amacron wcircumflex -44 KPX Amacron uni021B -54 KPX Amacron tcommaaccent -54 KPX Amacron cdotaccent -30 KPX Amacron ccircumflex -30 KPX Amacron uni0232 -114 KPX Amacron Ygrave -114 KPX Amacron Ycircumflex -114 KPX Amacron Wdieresis -54 KPX Amacron Wacute -54 KPX Amacron Wgrave -54 KPX Amacron Wcircumflex -54 KPX Amacron Uogonek -44 KPX Amacron Uhungarumlaut -44 KPX Amacron Ubreve -44 KPX Amacron Umacron -44 KPX Amacron Utilde -44 KPX Amacron uni021A -95 KPX Amacron Tcommaaccent -95 KPX Amacron uni022E -30 KPX Amacron uni01EC -30 KPX Amacron uni01EA -30 KPX Amacron Ohungarumlaut -30 KPX Amacron Obreve -30 KPX Amacron Omacron -30 KPX Amacron Cdotaccent -30 KPX Amacron Ccircumflex -30 KPX Amacron Uring -44 KPX Amacron tcaron -54 KPX Amacron Tcaron -95 KPX Amacron dcaron -30 KPX Amacron dcroat -30 KPX Amacron ccaron -30 KPX Amacron Ccaron -30 KPX Amacron cacute -30 KPX Amacron Cacute -30 KPX Amacron yacute -72 KPX Amacron Yacute -114 KPX Amacron Ugrave -44 KPX Amacron Ucircumflex -44 KPX Amacron Uacute -44 KPX Amacron Ograve -30 KPX Amacron Ocircumflex -30 KPX Amacron Oacute -30 KPX Amacron quotedblbase 50 KPX Amacron quotesinglbase 50 KPX Amacron Ydieresis -114 KPX Amacron ydieresis -72 KPX Amacron quoteright -123 KPX Amacron quotedblright -123 KPX Amacron OE -30 KPX Amacron Otilde -30 KPX Amacron Oslash -30 KPX Amacron ccedilla -30 KPX Amacron Udieresis -44 KPX Amacron Odieresis -30 KPX Amacron Ccedilla -30 KPX Amacron y -72 KPX Amacron w -44 KPX Amacron v -54 KPX Amacron t -54 KPX Amacron d -30 KPX Amacron c -30 KPX Amacron Y -114 KPX Amacron W -54 KPX Amacron V -67 KPX Amacron U -44 KPX Amacron T -95 KPX Amacron O -30 KPX Amacron C -30 KPX Amacron semicolon 18 KPX Amacron colon 18 KPX Amacron period 18 KPX Amacron comma 18 KPX Abreve ygrave -72 KPX Abreve uni0233 -72 KPX Abreve ycircumflex -72 KPX Abreve wdieresis -44 KPX Abreve wacute -44 KPX Abreve wgrave -44 KPX Abreve wcircumflex -44 KPX Abreve uni021B -54 KPX Abreve tcommaaccent -54 KPX Abreve cdotaccent -30 KPX Abreve ccircumflex -30 KPX Abreve uni0232 -114 KPX Abreve Ygrave -114 KPX Abreve Ycircumflex -114 KPX Abreve Wdieresis -54 KPX Abreve Wacute -54 KPX Abreve Wgrave -54 KPX Abreve Wcircumflex -54 KPX Abreve Uogonek -44 KPX Abreve Uhungarumlaut -44 KPX Abreve Ubreve -44 KPX Abreve Umacron -44 KPX Abreve Utilde -44 KPX Abreve uni021A -95 KPX Abreve Tcommaaccent -95 KPX Abreve uni022E -30 KPX Abreve uni01EC -30 KPX Abreve uni01EA -30 KPX Abreve Ohungarumlaut -30 KPX Abreve Obreve -30 KPX Abreve Omacron -30 KPX Abreve Cdotaccent -30 KPX Abreve Ccircumflex -30 KPX Abreve Uring -44 KPX Abreve tcaron -54 KPX Abreve Tcaron -95 KPX Abreve dcaron -30 KPX Abreve dcroat -30 KPX Abreve ccaron -30 KPX Abreve Ccaron -30 KPX Abreve cacute -30 KPX Abreve Cacute -30 KPX Abreve yacute -72 KPX Abreve Yacute -114 KPX Abreve Ugrave -44 KPX Abreve Ucircumflex -44 KPX Abreve Uacute -44 KPX Abreve Ograve -30 KPX Abreve Ocircumflex -30 KPX Abreve Oacute -30 KPX Abreve quotedblbase 50 KPX Abreve quotesinglbase 50 KPX Abreve Ydieresis -114 KPX Abreve ydieresis -72 KPX Abreve quoteright -123 KPX Abreve quotedblright -123 KPX Abreve OE -30 KPX Abreve Otilde -30 KPX Abreve Oslash -30 KPX Abreve ccedilla -30 KPX Abreve Udieresis -44 KPX Abreve Odieresis -30 KPX Abreve Ccedilla -30 KPX Abreve y -72 KPX Abreve w -44 KPX Abreve v -54 KPX Abreve t -54 KPX Abreve d -30 KPX Abreve c -30 KPX Abreve Y -114 KPX Abreve W -54 KPX Abreve V -67 KPX Abreve U -44 KPX Abreve T -95 KPX Abreve O -30 KPX Abreve C -30 KPX Abreve semicolon 18 KPX Abreve colon 18 KPX Abreve period 18 KPX Abreve comma 18 KPX Aogonek ygrave -72 KPX Aogonek uni0233 -72 KPX Aogonek ycircumflex -72 KPX Aogonek wdieresis -44 KPX Aogonek wacute -44 KPX Aogonek wgrave -44 KPX Aogonek wcircumflex -44 KPX Aogonek uni021B -54 KPX Aogonek tcommaaccent -54 KPX Aogonek cdotaccent -30 KPX Aogonek ccircumflex -30 KPX Aogonek uni0232 -114 KPX Aogonek Ygrave -114 KPX Aogonek Ycircumflex -114 KPX Aogonek Wdieresis -54 KPX Aogonek Wacute -54 KPX Aogonek Wgrave -54 KPX Aogonek Wcircumflex -54 KPX Aogonek Uogonek -44 KPX Aogonek Uhungarumlaut -44 KPX Aogonek Ubreve -44 KPX Aogonek Umacron -44 KPX Aogonek Utilde -44 KPX Aogonek uni021A -95 KPX Aogonek Tcommaaccent -95 KPX Aogonek uni022E -30 KPX Aogonek uni01EC -30 KPX Aogonek uni01EA -30 KPX Aogonek Ohungarumlaut -30 KPX Aogonek Obreve -30 KPX Aogonek Omacron -30 KPX Aogonek Cdotaccent -30 KPX Aogonek Ccircumflex -30 KPX Aogonek Uring -44 KPX Aogonek tcaron -54 KPX Aogonek Tcaron -95 KPX Aogonek dcaron -30 KPX Aogonek dcroat -30 KPX Aogonek ccaron -30 KPX Aogonek Ccaron -30 KPX Aogonek cacute -30 KPX Aogonek Cacute -30 KPX Aogonek yacute -72 KPX Aogonek Yacute -114 KPX Aogonek Ugrave -44 KPX Aogonek Ucircumflex -44 KPX Aogonek Uacute -44 KPX Aogonek Ograve -30 KPX Aogonek Ocircumflex -30 KPX Aogonek Oacute -30 KPX Aogonek quotedblbase 50 KPX Aogonek quotesinglbase 50 KPX Aogonek Ydieresis -114 KPX Aogonek ydieresis -72 KPX Aogonek quoteright -123 KPX Aogonek quotedblright -123 KPX Aogonek OE -30 KPX Aogonek Otilde -30 KPX Aogonek Oslash -30 KPX Aogonek ccedilla -30 KPX Aogonek Udieresis -44 KPX Aogonek Odieresis -30 KPX Aogonek Ccedilla -30 KPX Aogonek y -72 KPX Aogonek w -44 KPX Aogonek v -54 KPX Aogonek t -54 KPX Aogonek d -30 KPX Aogonek c -30 KPX Aogonek Y -114 KPX Aogonek W -54 KPX Aogonek V -67 KPX Aogonek U -44 KPX Aogonek T -95 KPX Aogonek O -30 KPX Aogonek C -30 KPX Aogonek semicolon 18 KPX Aogonek colon 18 KPX Aogonek period 18 KPX Aogonek comma 18 KPX Cacute Scommaaccent -35 KPX Cacute Scircumflex -35 KPX Cacute Sacute -35 KPX Cacute Scedilla -35 KPX Cacute Scaron -35 KPX Cacute S -35 KPX Ccircumflex Scommaaccent -35 KPX Ccircumflex Scircumflex -35 KPX Ccircumflex Sacute -35 KPX Ccircumflex Scedilla -35 KPX Ccircumflex Scaron -35 KPX Ccircumflex S -35 KPX Cdotaccent Scommaaccent -35 KPX Cdotaccent Scircumflex -35 KPX Cdotaccent Sacute -35 KPX Cdotaccent Scedilla -35 KPX Cdotaccent Scaron -35 KPX Cdotaccent S -35 KPX Ccaron Scommaaccent -35 KPX Ccaron Scircumflex -35 KPX Ccaron Sacute -35 KPX Ccaron Scedilla -35 KPX Ccaron Scaron -35 KPX Ccaron S -35 KPX Dcaron Ygrave -77 KPX Dcaron uni0232 -77 KPX Dcaron Ycircumflex -77 KPX Dcaron Yacute -77 KPX Dcaron quotedblbase -17 KPX Dcaron quotesinglbase -17 KPX Dcaron Ydieresis -77 KPX Dcaron Y -77 KPX Dcaron hyphen 18 KPX Dcroat Ygrave -77 KPX Dcroat uni0232 -77 KPX Dcroat Ycircumflex -77 KPX Dcroat Yacute -77 KPX Dcroat quotedblbase -17 KPX Dcroat quotesinglbase -17 KPX Dcroat Ydieresis -77 KPX Dcroat Y -77 KPX Dcroat hyphen 18 KPX Gbreve Tcaron -17 KPX Gbreve Yacute -40 KPX Gbreve Ydieresis -40 KPX Gbreve Y -40 KPX Gbreve T -17 KPX Lacute Oslash -35 KPX Lacute Ydieresis -155 KPX Lacute Otilde -35 KPX Lacute O -35 KPX Lacute Ucircumflex -54 KPX Lacute Yacute -155 KPX Lacute W -86 KPX Lacute V -137 KPX Lacute Y -155 KPX Lacute Oacute -35 KPX Lacute Udieresis -54 KPX Lacute quotedblright -257 KPX Lacute Odieresis -35 KPX Lacute Ograve -35 KPX Lacute Uacute -54 KPX Lacute OE -35 KPX Lacute ydieresis -123 KPX Lacute Uring -54 KPX Lacute quoteright -248 KPX Lacute Ugrave -54 KPX Lacute yacute -123 KPX Lacute y -123 KPX Lacute U -54 KPX Lacute Tcaron -165 KPX Lacute Ocircumflex -35 KPX Lacute T -165 KPX Lcaron Oslash -35 KPX Lcaron Ydieresis -155 KPX Lcaron Otilde -35 KPX Lcaron O -35 KPX Lcaron Ucircumflex -54 KPX Lcaron Yacute -155 KPX Lcaron W -86 KPX Lcaron V -137 KPX Lcaron Y -155 KPX Lcaron Oacute -35 KPX Lcaron Udieresis -54 KPX Lcaron quotedblright -257 KPX Lcaron Odieresis -35 KPX Lcaron Ograve -35 KPX Lcaron Uacute -54 KPX Lcaron OE -35 KPX Lcaron ydieresis -123 KPX Lcaron Uring -54 KPX Lcaron quoteright -248 KPX Lcaron Ugrave -54 KPX Lcaron yacute -123 KPX Lcaron y -123 KPX Lcaron U -54 KPX Lcaron Tcaron -165 KPX Lcaron Ocircumflex -35 KPX Lcaron T -165 KPX ldot l -3 KPX Lslash Uring -35 KPX Lslash Tcaron -165 KPX Lslash yacute -123 KPX Lslash Yacute -155 KPX Lslash Ugrave -35 KPX Lslash Ucircumflex -35 KPX Lslash Uacute -35 KPX Lslash Ograve -35 KPX Lslash Ocircumflex -35 KPX Lslash Oacute -35 KPX Lslash Ydieresis -155 KPX Lslash ydieresis -123 KPX Lslash quoteright -128 KPX Lslash quotedblright -128 KPX Lslash OE -35 KPX Lslash Otilde -35 KPX Lslash Oslash -35 KPX Lslash Udieresis -35 KPX Lslash Odieresis -35 KPX Lslash y -123 KPX Lslash Y -155 KPX Lslash W -77 KPX Lslash V -137 KPX Lslash U -35 KPX Lslash T -165 KPX Lslash O -35 KPX Racute udieresis -54 KPX Racute ecaron -49 KPX Racute ecircumflex -49 KPX Racute odieresis -49 KPX Racute ograve -49 KPX Racute uacute -54 KPX Racute ocircumflex -49 KPX Racute Ydieresis -91 KPX Racute period 18 KPX Racute uring -54 KPX Racute edieresis -49 KPX Racute ugrave -54 KPX Racute comma 18 KPX Racute Yacute -91 KPX Racute Y -91 KPX Racute eacute -49 KPX Racute Tcaron -44 KPX Racute oslash -49 KPX Racute egrave -49 KPX Racute e -49 KPX Racute oe -49 KPX Racute ydieresis -63 KPX Racute otilde -49 KPX Racute o -49 KPX Racute ucircumflex -54 KPX Racute yacute -63 KPX Racute y -63 KPX Racute u -54 KPX Racute oacute -49 KPX Racute T -44 KPX racute quoteright 41 KPX racute quotedblright 18 KPX racute comma -146 KPX racute period -142 KPX Rcaron uring -54 KPX Rcaron Tcaron -44 KPX Rcaron ecaron -49 KPX Rcaron yacute -63 KPX Rcaron Yacute -91 KPX Rcaron Ydieresis -91 KPX Rcaron ydieresis -63 KPX Rcaron oe -49 KPX Rcaron oslash -49 KPX Rcaron udieresis -54 KPX Rcaron ucircumflex -54 KPX Rcaron ugrave -54 KPX Rcaron uacute -54 KPX Rcaron otilde -49 KPX Rcaron odieresis -49 KPX Rcaron ocircumflex -49 KPX Rcaron ograve -49 KPX Rcaron oacute -49 KPX Rcaron edieresis -49 KPX Rcaron ecircumflex -49 KPX Rcaron egrave -49 KPX Rcaron eacute -49 KPX Rcaron y -63 KPX Rcaron u -54 KPX Rcaron o -49 KPX Rcaron e -49 KPX Rcaron Y -91 KPX Rcaron T -44 KPX Rcaron period 18 KPX Rcaron comma 18 KPX rcaron quoteright 41 KPX rcaron quotedblright 18 KPX rcaron period -142 KPX rcaron comma -146 KPX Scedilla Scedilla -35 KPX Scedilla Scaron -35 KPX Scedilla S -35 KPX Scaron Scedilla -35 KPX Scaron Scaron -35 KPX Scaron S -35 KPX Tcaron udieresis -128 KPX Tcaron aring -118 KPX Tcaron ae -118 KPX Tcaron semicolon -54 KPX Tcaron ograve -128 KPX Tcaron hyphen -146 KPX Tcaron quotedblbase -146 KPX Tcaron uring -128 KPX Tcaron otilde -128 KPX Tcaron edieresis -128 KPX Tcaron ugrave -128 KPX Tcaron colon -54 KPX Tcaron agrave -118 KPX Tcaron Atilde -77 KPX Tcaron ecircumflex -128 KPX Tcaron ccedilla -128 KPX Tcaron racute -109 KPX Tcaron egrave -128 KPX Tcaron Adieresis -77 KPX Tcaron Aacute -77 KPX Tcaron ccaron -128 KPX Tcaron rcaron -109 KPX Tcaron ucircumflex -128 KPX Tcaron yacute -165 KPX Tcaron quotesinglbase -146 KPX Tcaron atilde -118 KPX Tcaron Acircumflex -77 KPX Tcaron oslash -128 KPX Tcaron ocircumflex -128 KPX Tcaron scaron -118 KPX Tcaron A -77 KPX Tcaron ecaron -128 KPX Tcaron scedilla -118 KPX Tcaron adieresis -118 KPX Tcaron w -137 KPX Tcaron odieresis -128 KPX Tcaron uacute -128 KPX Tcaron cacute -128 KPX Tcaron aacute -118 KPX Tcaron period -169 KPX Tcaron T 22 KPX Tcaron acircumflex -118 KPX Tcaron eacute -128 KPX Tcaron Tcaron 22 KPX Tcaron a -118 KPX Tcaron c -128 KPX Tcaron e -128 KPX Tcaron oe -128 KPX Tcaron ydieresis -165 KPX Tcaron o -128 KPX Tcaron s -118 KPX Tcaron r -109 KPX Tcaron u -128 KPX Tcaron Agrave -77 KPX Tcaron y -165 KPX Tcaron comma -160 KPX Tcaron oacute -128 KPX tcaron Tcaron -54 KPX Uring Uring -44 KPX Uring Aacute -44 KPX Uring Acircumflex -44 KPX Uring Atilde -44 KPX Uring Agrave -44 KPX Uring Adieresis -44 KPX Uring A -44 KPX Ydieresis uring -109 KPX Ydieresis ecaron -128 KPX Ydieresis Ccaron -35 KPX Ydieresis Cacute -35 KPX Ydieresis Ograve -35 KPX Ydieresis Ocircumflex -35 KPX Ydieresis Oacute -35 KPX Ydieresis Aacute -95 KPX Ydieresis Acircumflex -95 KPX Ydieresis quotedblbase -197 KPX Ydieresis quotesinglbase -183 KPX Ydieresis oe -128 KPX Ydieresis OE -58 KPX Ydieresis Otilde -35 KPX Ydieresis Atilde -95 KPX Ydieresis Agrave -95 KPX Ydieresis oslash -128 KPX Ydieresis ae -118 KPX Ydieresis Oslash -35 KPX Ydieresis udieresis -109 KPX Ydieresis ucircumflex -109 KPX Ydieresis ugrave -109 KPX Ydieresis uacute -109 KPX Ydieresis otilde -128 KPX Ydieresis odieresis -128 KPX Ydieresis ocircumflex -128 KPX Ydieresis ograve -128 KPX Ydieresis oacute -128 KPX Ydieresis edieresis -128 KPX Ydieresis ecircumflex -128 KPX Ydieresis egrave -128 KPX Ydieresis eacute -128 KPX Ydieresis aring -118 KPX Ydieresis atilde -118 KPX Ydieresis adieresis -118 KPX Ydieresis acircumflex -118 KPX Ydieresis agrave -118 KPX Ydieresis aacute -118 KPX Ydieresis Odieresis -35 KPX Ydieresis Ccedilla -35 KPX Ydieresis Adieresis -95 KPX Ydieresis u -109 KPX Ydieresis o -128 KPX Ydieresis e -128 KPX Ydieresis a -118 KPX Ydieresis O -35 KPX Ydieresis C -35 KPX Ydieresis A -95 KPX Ydieresis semicolon -86 KPX Ydieresis colon -86 KPX Ydieresis period -165 KPX Ydieresis hyphen -146 KPX Ydieresis comma -165 KPX Zcaron hyphen -72 KPX uni02BB Yacute 36 KPX uni02BB Aacute -132 KPX uni02BB Acircumflex -132 KPX uni02BB Ydieresis 36 KPX uni02BB Atilde -132 KPX uni02BB Agrave -132 KPX uni02BB AE -128 KPX uni02BB Adieresis -132 KPX uni02BB Y 36 KPX uni02BB V 18 KPX uni02BB J -44 KPX uni02BB A -132 KPX uni2010 Tcaron -146 KPX uni2010 Yacute -165 KPX uni2010 Ydieresis -165 KPX uni2010 Y -165 KPX uni2010 X -100 KPX uni2010 W -44 KPX uni2010 V -72 KPX uni2010 T -146 KPX quoteleft Yacute 36 KPX quoteleft Aacute -132 KPX quoteleft Acircumflex -132 KPX quoteleft Ydieresis 36 KPX quoteleft Atilde -132 KPX quoteleft Agrave -132 KPX quoteleft AE -128 KPX quoteleft Adieresis -132 KPX quoteleft Y 36 KPX quoteleft V 18 KPX quoteleft J -44 KPX quoteleft A -132 KPX quotesinglbase Tcaron -220 KPX quotesinglbase Yacute -202 KPX quotesinglbase Ydieresis -202 KPX quotesinglbase Y -202 KPX quotesinglbase W -109 KPX quotesinglbase V -165 KPX quotesinglbase T -220 KPX quotedblleft Yacute 18 KPX quotedblleft Aacute -128 KPX quotedblleft Acircumflex -128 KPX quotedblleft Ydieresis 18 KPX quotedblleft Atilde -128 KPX quotedblleft Agrave -128 KPX quotedblleft AE -146 KPX quotedblleft Adieresis -128 KPX quotedblleft Y 18 KPX quotedblleft J -44 KPX quotedblleft A -128 KPX quotedblbase Tcaron -220 KPX quotedblbase Yacute -202 KPX quotedblbase Ydieresis -202 KPX quotedblbase Y -202 KPX quotedblbase W -109 KPX quotedblbase V -165 KPX quotedblbase T -220 KPX Circumflex Scommaaccent -35 KPX Circumflex Scircumflex -35 KPX Circumflex Sacute -35 KPX Circumflex Scedilla -35 KPX Circumflex Scaron -35 KPX Circumflex S -35 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-Bold.afm0100664000212600000240000007617107477306250015525 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Times-Bold FullName Times Roman Bold FamilyName Times Roman Weight Bold ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -168 -341 1000 960 CapHeight 676 XHeight 461 Descender -205 Ascender 676 StartCharMetrics 316 C 32 ; WX 250 ; N space ; B 125 0 125 0 ; C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ; C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ; C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ; C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ; C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ; C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ; C 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ; C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ; C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ; C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ; C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ; C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ; C 46 ; WX 250 ; N period ; B 41 -13 210 156 ; C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ; C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ; C 49 ; WX 500 ; N one ; B 65 0 442 688 ; C 50 ; WX 500 ; N two ; B 17 0 478 688 ; C 51 ; WX 500 ; N three ; B 16 -14 468 688 ; C 52 ; WX 500 ; N four ; B 19 0 475 688 ; C 53 ; WX 500 ; N five ; B 22 -8 470 676 ; C 54 ; WX 500 ; N six ; B 28 -13 475 688 ; C 55 ; WX 500 ; N seven ; B 17 0 477 676 ; C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ; C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ; C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ; C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ; C 60 ; WX 570 ; N less ; B 31 -12 539 518 ; C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; C 62 ; WX 570 ; N greater ; B 31 -12 539 518 ; C 63 ; WX 500 ; N question ; B 57 -13 445 689 ; C 64 ; WX 930 ; N at ; B 108 -19 822 691 ; C 65 ; WX 722 ; N A ; B 9 0 689 690 ; C 66 ; WX 667 ; N B ; B 16 0 619 676 ; C 67 ; WX 722 ; N C ; B 49 -19 687 691 ; C 68 ; WX 722 ; N D ; B 14 0 690 676 ; C 69 ; WX 667 ; N E ; B 16 0 641 676 ; C 70 ; WX 611 ; N F ; B 16 0 583 676 ; C 71 ; WX 778 ; N G ; B 37 -19 755 691 ; C 72 ; WX 778 ; N H ; B 21 0 759 676 ; C 73 ; WX 389 ; N I ; B 20 0 370 676 ; C 74 ; WX 500 ; N J ; B 3 -96 479 676 ; C 75 ; WX 778 ; N K ; B 30 0 769 676 ; C 76 ; WX 667 ; N L ; B 19 0 638 676 ; C 77 ; WX 944 ; N M ; B 14 0 921 676 ; C 78 ; WX 722 ; N N ; B 16 -18 701 676 ; C 79 ; WX 778 ; N O ; B 35 -19 743 691 ; C 80 ; WX 611 ; N P ; B 16 0 600 676 ; C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ; C 82 ; WX 722 ; N R ; B 26 0 715 676 ; C 83 ; WX 556 ; N S ; B 35 -19 513 692 ; C 84 ; WX 667 ; N T ; B 31 0 636 676 ; C 85 ; WX 722 ; N U ; B 16 -19 701 676 ; C 86 ; WX 722 ; N V ; B 16 -18 701 676 ; C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ; C 88 ; WX 722 ; N X ; B 16 0 699 676 ; C 89 ; WX 722 ; N Y ; B 15 0 699 676 ; C 90 ; WX 667 ; N Z ; B 28 0 634 676 ; C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ; C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ; C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ; C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ; C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; C 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ; C 97 ; WX 500 ; N a ; B 25 -14 488 473 ; C 98 ; WX 556 ; N b ; B 17 -14 521 676 ; C 99 ; WX 444 ; N c ; B 25 -14 430 473 ; C 100 ; WX 556 ; N d ; B 25 -14 534 676 ; C 101 ; WX 444 ; N e ; B 25 -14 426 473 ; C 102 ; WX 333 ; N f ; B 14 0 389 691 ; C 103 ; WX 500 ; N g ; B 28 -206 483 473 ; C 104 ; WX 556 ; N h ; B 16 0 534 676 ; C 105 ; WX 278 ; N i ; B 16 0 255 691 ; C 106 ; WX 333 ; N j ; B -57 -203 263 691 ; C 107 ; WX 556 ; N k ; B 22 0 543 676 ; C 108 ; WX 278 ; N l ; B 16 0 255 676 ; C 109 ; WX 833 ; N m ; B 16 0 814 473 ; C 110 ; WX 556 ; N n ; B 21 0 539 473 ; C 111 ; WX 500 ; N o ; B 25 -14 476 473 ; C 112 ; WX 556 ; N p ; B 19 -205 524 473 ; C 113 ; WX 556 ; N q ; B 34 -205 536 473 ; C 114 ; WX 444 ; N r ; B 29 0 434 473 ; C 115 ; WX 389 ; N s ; B 25 -14 361 473 ; C 116 ; WX 333 ; N t ; B 20 -12 332 630 ; C 117 ; WX 556 ; N u ; B 16 -14 537 461 ; C 118 ; WX 500 ; N v ; B 21 -14 485 461 ; C 119 ; WX 722 ; N w ; B 23 -14 707 461 ; C 120 ; WX 500 ; N x ; B 12 0 484 461 ; C 121 ; WX 500 ; N y ; B 16 -205 480 461 ; C 122 ; WX 444 ; N z ; B 21 0 420 461 ; C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ; C 124 ; WX 220 ; N bar ; B 66 -19 154 691 ; C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ; C 126 ; WX 520 ; N asciitilde ; B 29 175 491 331 ; C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ; C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ; C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ; C 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ; C 165 ; WX 500 ; N yen ; B -64 0 547 676 ; C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ; C 167 ; WX 500 ; N section ; B 57 -132 443 691 ; C 168 ; WX 500 ; N currency ; B -26 61 526 613 ; C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ; C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ; C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ; C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ; C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ; C 174 ; WX 556 ; N fi ; B 14 0 536 691 ; C 175 ; WX 556 ; N fl ; B 14 0 536 691 ; C 177 ; WX 500 ; N endash ; B 0 181 500 271 ; C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ; C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ; C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ; C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ; C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ; C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ; C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ; C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ; C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ; C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ; C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ; C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ; C 193 ; WX 333 ; N grave ; B 8 528 246 713 ; C 194 ; WX 333 ; N acute ; B 86 528 324 713 ; C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ; C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ; C 197 ; WX 333 ; N macron ; B 1 565 331 637 ; C 198 ; WX 333 ; N breve ; B 15 528 318 691 ; C 199 ; WX 333 ; N dotaccent ; B 103 537 232 666 ; C 200 ; WX 333 ; N dieresis ; B -2 537 337 666 ; C 202 ; WX 333 ; N ring ; B 60 537 273 750 ; C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ; C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ; C 206 ; WX 333 ; N ogonek ; B 90 -173 319 44 ; C 207 ; WX 333 ; N caron ; B -2 528 335 704 ; C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ; C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ; C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ; C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ; C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ; C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ; C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ; C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ; C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ; C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ; C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ; C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ; C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ; C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 876 ; C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ; C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ; C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ; C -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ; C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ; C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ; C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ; C -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ; C -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ; C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ; C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ; C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ; C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ; C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ; C -1 ; WX 722 ; N Uring ; B 16 -19 701 960 ; C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ; C -1 ; WX 444 ; N eogonek ; B 25 -173 444 473 ; C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 666 ; C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ; C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ; C -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ; C -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ; C -1 ; WX 444 ; N edieresis ; B 25 -14 426 666 ; C -1 ; WX 665 ; N dcaron ; B 25 -14 665 691 ; C -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ; C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ; C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ; C -1 ; WX 500 ; N aogonek ; B 25 -173 500 473 ; C -1 ; WX 500 ; N aring ; B 25 -14 488 750 ; C -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ; C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ; C -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ; C -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ; C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ; C -1 ; WX 500 ; N adieresis ; B 25 -14 488 666 ; C -1 ; WX 722 ; N Uogonek ; B 16 -173 701 676 ; C -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ; C -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ; C -1 ; WX 556 ; N udieresis ; B 16 -14 537 666 ; C -1 ; WX 400 ; N tcaron ; B 20 -12 400 691 ; C -1 ; WX 389 ; N scommaaccent ; B 25 -341 361 473 ; C -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ; C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ; C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ; C -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ; C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 876 ; C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ; C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ; C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ; C -1 ; WX 667 ; N Tcommaaccent ; B 31 -341 636 676 ; C -1 ; WX 722 ; N Ydieresis ; B 15 0 699 876 ; C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ; C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ; C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ; C -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ; C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 876 ; C -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ; C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ; C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ; C -1 ; WX 667 ; N Lcaron ; B 19 0 638 691 ; C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ; C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 876 ; C -1 ; WX 444 ; N racute ; B 29 0 434 713 ; C -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ; C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 509 713 ; C -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ; C -1 ; WX 500 ; N Euro ; B -36 -24 478 671 ; C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ; C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ; C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ; C -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ; C -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ; C -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ; C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ; C -1 ; WX 389 ; N Iogonek ; B 20 -173 505 676 ; C -1 ; WX 389 ; N Idieresis ; B 20 0 370 876 ; C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ; C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ; C -1 ; WX 778 ; N Kcommaaccent ; B 30 -341 769 676 ; C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ; C -1 ; WX 556 ; N Scommaaccent ; B 35 -341 513 692 ; C -1 ; WX 667 ; N Eogonek ; B 16 -173 737 676 ; C -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ; C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 876 ; C -1 ; WX 278 ; N iogonek ; B 16 -173 388 691 ; C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 811 ; C -1 ; WX 500 ; N odieresis ; B 25 -14 476 666 ; C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ; C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ; C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ; C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ; C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ; C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ; C -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ; C -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ; C -1 ; WX 778 ; N Gcommaaccent ; B 37 -341 755 691 ; C -1 ; WX 722 ; N Rcommaaccent ; B 26 -341 715 676 ; C -1 ; WX 667 ; N Edieresis ; B 16 0 641 876 ; C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ; C -1 ; WX 556 ; N uogonek ; B 16 -173 556 461 ; C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ; C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ; C -1 ; WX 396 ; N lcaron ; B 16 0 396 691 ; C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ; C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ; C -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ; C -1 ; WX 400 ; N degree ; B 57 402 343 688 ; C -1 ; WX 722 ; N Aogonek ; B 9 -173 822 690 ; C -1 ; WX 570 ; N minus ; B 33 209 537 297 ; C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ; C -1 ; WX 722 ; N Aring ; B 9 0 689 948 ; C -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ; C -1 ; WX 444 ; N rcommaaccent ; B 29 -341 434 473 ; C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ; C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ; C -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ; C -1 ; WX 278 ; N icircumflex ; B -36 0 301 704 ; C -1 ; WX 278 ; N igrave ; B -26 0 255 713 ; C -1 ; WX 556 ; N ncommaaccent ; B 21 -341 539 473 ; C -1 ; WX 278 ; N lcommaaccent ; B 16 -341 255 676 ; C -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ; C -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ; C -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ; C -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ; C -1 ; WX 278 ; N iacute ; B 16 0 290 713 ; C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ; C -1 ; WX 556 ; N kcommaaccent ; B 22 -341 543 676 ; C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ; C -1 ; WX 278 ; N imacron ; B -27 0 303 637 ; C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ; C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ; C -1 ; WX 333 ; N tcommaaccent ; B 20 -341 332 630 ; C -1 ; WX 500 ; N ydieresis ; B 16 -205 480 666 ; C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 666 ; C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ; C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ; C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ; C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 537 713 ; C -1 ; WX 500 ; N eth ; B 25 -14 476 691 ; C -1 ; WX 556 ; N uring ; B 16 -14 537 750 ; C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ; C -1 ; WX 333 ; N commaaccent ; B 84 -341 249 -40 ; C -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ; C -1 ; WX 747 ; N registered ; B 26 -19 721 691 ; C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ; C -1 ; WX 278 ; N idieresis ; B -36 0 303 666 ; C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ; C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; C -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ; C -1 ; WX 549 ; N radical ; B -17 -35 535 916 ; C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ; C -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ; C -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ; C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ; C -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ; C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ; C -1 ; WX 494 ; N partialdiff ; B 16 -20 472 743 ; C -1 ; WX 722 ; N Ncommaaccent ; B 16 -341 701 676 ; C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ; C -1 ; WX 220 ; N brokenbar ; B 66 -19 154 691 ; C -1 ; WX 667 ; N Lcommaaccent ; B 19 -341 638 676 ; C -1 ; WX 722 ; N Adieresis ; B 9 0 689 876 ; C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ; C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -73 KPX A Ccedilla -77 KPX A G -68 KPX A O -68 KPX A Odieresis -68 KPX A Q -68 KPX A T -59 KPX A U -66 KPX A Uacute -66 KPX A Ucircumflex -66 KPX A Udieresis -66 KPX A Ugrave -66 KPX A V -130 KPX A W -116 KPX A Y -74 KPX A a -5 KPX A b -22 KPX A c -35 KPX A ccedilla -43 KPX A comma 1 KPX A d -28 KPX A e -32 KPX A g -7 KPX A guillemotleft -53 KPX A guilsinglleft -67 KPX A hyphen -30 KPX A o -37 KPX A period 0 KPX A q -38 KPX A quotedblright -76 KPX A quoteright -108 KPX A t -27 KPX A u -30 KPX A v -84 KPX A w -79 KPX A y -83 KPX Aacute C -73 KPX Aacute G -68 KPX Aacute O -68 KPX Aacute Q -68 KPX Aacute T -59 KPX Aacute U -66 KPX Aacute V -130 KPX Aacute W -116 KPX Aacute Y -74 KPX Aacute a -5 KPX Aacute b -22 KPX Aacute c -35 KPX Aacute comma 1 KPX Aacute d -28 KPX Aacute e -32 KPX Aacute g -7 KPX Aacute guillemotleft -53 KPX Aacute guilsinglleft -67 KPX Aacute hyphen -30 KPX Aacute o -37 KPX Aacute period 0 KPX Aacute q -38 KPX Aacute quoteright -108 KPX Aacute t -27 KPX Aacute u -30 KPX Aacute v -84 KPX Aacute w -79 KPX Aacute y -83 KPX Acircumflex C -73 KPX Acircumflex G -68 KPX Acircumflex O -68 KPX Acircumflex Q -68 KPX Acircumflex T -59 KPX Acircumflex U -66 KPX Acircumflex V -130 KPX Acircumflex W -116 KPX Acircumflex Y -74 KPX Acircumflex comma 1 KPX Acircumflex period 0 KPX Adieresis C -73 KPX Adieresis G -68 KPX Adieresis O -68 KPX Adieresis Q -68 KPX Adieresis T -59 KPX Adieresis U -66 KPX Adieresis V -130 KPX Adieresis W -116 KPX Adieresis Y -74 KPX Adieresis a -5 KPX Adieresis b -22 KPX Adieresis c -35 KPX Adieresis comma 1 KPX Adieresis d -28 KPX Adieresis g -7 KPX Adieresis guillemotleft -53 KPX Adieresis guilsinglleft -67 KPX Adieresis hyphen -30 KPX Adieresis o -37 KPX Adieresis period 0 KPX Adieresis q -38 KPX Adieresis quotedblright -76 KPX Adieresis quoteright -108 KPX Adieresis t -27 KPX Adieresis u -30 KPX Adieresis v -84 KPX Adieresis w -79 KPX Adieresis y -83 KPX Agrave C -73 KPX Agrave G -68 KPX Agrave O -68 KPX Agrave Q -68 KPX Agrave T -59 KPX Agrave U -66 KPX Agrave V -130 KPX Agrave W -116 KPX Agrave Y -74 KPX Agrave comma 1 KPX Agrave period 0 KPX Aring C -73 KPX Aring G -68 KPX Aring O -68 KPX Aring Q -68 KPX Aring T -59 KPX Aring U -66 KPX Aring V -130 KPX Aring W -116 KPX Aring Y -74 KPX Aring a -5 KPX Aring b -22 KPX Aring c -35 KPX Aring comma 1 KPX Aring d -28 KPX Aring e -32 KPX Aring g -7 KPX Aring guillemotleft -53 KPX Aring guilsinglleft -67 KPX Aring hyphen -30 KPX Aring o -37 KPX Aring period 0 KPX Aring q -38 KPX Aring quotedblright -76 KPX Aring quoteright -108 KPX Aring t -27 KPX Aring u -30 KPX Aring v -84 KPX Aring w -79 KPX Aring y -83 KPX Atilde C -73 KPX Atilde G -68 KPX Atilde O -68 KPX Atilde Q -68 KPX Atilde T -59 KPX Atilde U -66 KPX Atilde V -130 KPX Atilde W -116 KPX Atilde Y -74 KPX Atilde comma 1 KPX Atilde period 0 KPX B A -34 KPX B AE -32 KPX B Aacute -34 KPX B Acircumflex -34 KPX B Adieresis -34 KPX B Aring -34 KPX B Atilde -34 KPX B O -12 KPX B OE -4 KPX B Oacute -12 KPX B Ocircumflex -12 KPX B Odieresis -12 KPX B Ograve -12 KPX B Oslash -11 KPX B V -45 KPX B W -46 KPX B Y -44 KPX C A -25 KPX C AE -22 KPX C Aacute -25 KPX C Adieresis -25 KPX C Aring -25 KPX C H -2 KPX C K -6 KPX C O -14 KPX C Oacute -14 KPX C Odieresis -14 KPX Ccedilla A -33 KPX D A -55 KPX D Aacute -55 KPX D Acircumflex -55 KPX D Adieresis -55 KPX D Agrave -55 KPX D Aring -55 KPX D Atilde -55 KPX D J -40 KPX D T -7 KPX D V -60 KPX D W -50 KPX D X -51 KPX D Y -59 KPX F A -79 KPX F Aacute -79 KPX F Acircumflex -79 KPX F Adieresis -79 KPX F Agrave -79 KPX F Aring -79 KPX F Atilde -79 KPX F J -42 KPX F O -7 KPX F Odieresis -7 KPX F a -50 KPX F aacute -50 KPX F adieresis -22 KPX F ae -53 KPX F aring -50 KPX F comma -59 KPX F e -51 KPX F eacute -51 KPX F hyphen -34 KPX F i -1 KPX F j -26 KPX F o -54 KPX F oacute -54 KPX F odieresis -24 KPX F oe -51 KPX F oslash -53 KPX F period -60 KPX F r -7 KPX F u -10 KPX G A -27 KPX G AE -24 KPX G Aacute -27 KPX G Acircumflex -27 KPX G Adieresis -27 KPX G Agrave -27 KPX G Aring -27 KPX G Atilde -27 KPX G T -41 KPX G V -33 KPX G W -35 KPX G Y -33 KPX J A -30 KPX J AE -27 KPX J Adieresis -30 KPX J Aring -30 KPX K C -61 KPX K G -56 KPX K O -56 KPX K OE -46 KPX K Oacute -56 KPX K Odieresis -56 KPX K S 13 KPX K T -2 KPX K a 6 KPX K adieresis 6 KPX K ae 3 KPX K aring 6 KPX K e -20 KPX K hyphen -47 KPX K o -25 KPX K oacute -25 KPX K odieresis -25 KPX K u -18 KPX K udieresis -18 KPX K y -83 KPX L A -1 KPX L AE 1 KPX L Aacute -1 KPX L Adieresis -1 KPX L Aring -1 KPX L C -11 KPX L Ccedilla -14 KPX L G -5 KPX L O -5 KPX L Oacute -5 KPX L Ocircumflex -5 KPX L Odieresis -5 KPX L Ograve -5 KPX L Otilde -5 KPX L S 2 KPX L T -74 KPX L U -29 KPX L Udieresis -29 KPX L V -106 KPX L W -87 KPX L Y -89 KPX L hyphen 24 KPX L quotedblright -37 KPX L quoteright -69 KPX L u -11 KPX L udieresis -12 KPX L y -49 KPX N A -19 KPX N AE -16 KPX N Aacute -19 KPX N Adieresis -19 KPX N Aring -19 KPX N C -22 KPX N Ccedilla -22 KPX N G -16 KPX N O -15 KPX N Oacute -15 KPX N Odieresis -15 KPX N a -16 KPX N aacute -16 KPX N adieresis -16 KPX N ae -18 KPX N aring -16 KPX N comma 1 KPX N e -13 KPX N eacute -13 KPX N o -16 KPX N oacute -16 KPX N odieresis -16 KPX N oslash -15 KPX N period 0 KPX N u -17 KPX N udieresis -17 KPX O A -55 KPX O AE -54 KPX O Aacute -55 KPX O Adieresis -55 KPX O Aring -55 KPX O T -9 KPX O V -60 KPX O W -54 KPX O X -51 KPX O Y -59 KPX Oacute A -55 KPX Oacute T -9 KPX Oacute V -60 KPX Oacute W -54 KPX Oacute Y -59 KPX Ocircumflex T -9 KPX Ocircumflex V -60 KPX Ocircumflex Y -59 KPX Odieresis A -55 KPX Odieresis T -9 KPX Odieresis V -60 KPX Odieresis W -54 KPX Odieresis X -51 KPX Odieresis Y -59 KPX Ograve T -9 KPX Ograve V -60 KPX Ograve Y -59 KPX Oslash A -52 KPX Otilde T -9 KPX Otilde V -60 KPX Otilde Y -59 KPX P A -81 KPX P AE -94 KPX P Aacute -81 KPX P Adieresis -81 KPX P Aring -81 KPX P J -68 KPX P a -19 KPX P aacute -19 KPX P adieresis -19 KPX P ae -22 KPX P aring -19 KPX P comma -85 KPX P e -29 KPX P eacute -29 KPX P hyphen -39 KPX P o -33 KPX P oacute -33 KPX P odieresis -22 KPX P oe -30 KPX P oslash -33 KPX P period -86 KPX R C -36 KPX R Ccedilla -37 KPX R G -30 KPX R O -29 KPX R OE -22 KPX R Oacute -29 KPX R Odieresis -29 KPX R T -26 KPX R U -37 KPX R Udieresis -37 KPX R V -53 KPX R W -55 KPX R Y -53 KPX R a 7 KPX R aacute 7 KPX R adieresis 7 KPX R ae 4 KPX R aring 7 KPX R e -19 KPX R eacute -19 KPX R hyphen -30 KPX R o -24 KPX R oacute -24 KPX R odieresis -24 KPX R oe -21 KPX R u -17 KPX R uacute -17 KPX R udieresis -17 KPX R y -27 KPX S A -24 KPX S AE -21 KPX S Aacute -24 KPX S Adieresis -24 KPX S Aring -24 KPX S T -16 KPX S V -9 KPX S W -10 KPX S Y -8 KPX S t -10 KPX T A -46 KPX T AE -44 KPX T Aacute -46 KPX T Acircumflex -46 KPX T Adieresis -46 KPX T Agrave -46 KPX T Aring -46 KPX T Atilde -46 KPX T C -17 KPX T G -11 KPX T J -43 KPX T O -9 KPX T OE -3 KPX T Oacute -9 KPX T Ocircumflex -9 KPX T Odieresis -9 KPX T Ograve -9 KPX T Oslash -11 KPX T Otilde -9 KPX T S -2 KPX T V 11 KPX T W 9 KPX T Y 11 KPX T a -65 KPX T ae -69 KPX T c -88 KPX T colon -85 KPX T comma -63 KPX T e -85 KPX T g -68 KPX T guillemotleft -99 KPX T guilsinglleft -113 KPX T hyphen -73 KPX T i -16 KPX T j -40 KPX T o -88 KPX T oslash -87 KPX T period -64 KPX T r -61 KPX T s -59 KPX T semicolon -85 KPX T u -89 KPX T v -106 KPX T w -107 KPX T y -104 KPX U A -54 KPX U AE -52 KPX U Aacute -54 KPX U Acircumflex -54 KPX U Adieresis -54 KPX U Aring -54 KPX U Atilde -54 KPX U comma -17 KPX U m -23 KPX U n -25 KPX U p -28 KPX U period -18 KPX U r -29 KPX Uacute A -54 KPX Uacute comma -17 KPX Uacute m -23 KPX Uacute n -25 KPX Uacute p -28 KPX Uacute period -18 KPX Uacute r -29 KPX Ucircumflex A -54 KPX Udieresis A -54 KPX Udieresis b 10 KPX Udieresis comma -17 KPX Udieresis m -23 KPX Udieresis n -25 KPX Udieresis p -28 KPX Udieresis period -18 KPX Udieresis r -29 KPX Ugrave A -54 KPX V A -113 KPX V AE -113 KPX V Aacute -113 KPX V Acircumflex -113 KPX V Adieresis -113 KPX V Agrave -113 KPX V Aring -113 KPX V Atilde -113 KPX V C -70 KPX V G -64 KPX V O -63 KPX V Oacute -63 KPX V Ocircumflex -63 KPX V Odieresis -63 KPX V Ograve -63 KPX V Oslash -65 KPX V Otilde -63 KPX V S -25 KPX V T 8 KPX V a -87 KPX V ae -90 KPX V colon -94 KPX V comma -94 KPX V e -86 KPX V g -86 KPX V guillemotleft -98 KPX V guilsinglleft -112 KPX V hyphen -68 KPX V i -13 KPX V o -89 KPX V oslash -87 KPX V period -95 KPX V r -60 KPX V semicolon -94 KPX V u -58 KPX V y -56 KPX W A -98 KPX W AE -102 KPX W Aacute -98 KPX W Acircumflex -98 KPX W Adieresis -98 KPX W Agrave -98 KPX W Aring -98 KPX W Atilde -98 KPX W C -58 KPX W G -52 KPX W O -51 KPX W Oacute -51 KPX W Ocircumflex -51 KPX W Odieresis -51 KPX W Ograve -51 KPX W Oslash -50 KPX W Otilde -51 KPX W S -24 KPX W T 9 KPX W a -70 KPX W ae -73 KPX W colon -81 KPX W comma -72 KPX W e -67 KPX W g -70 KPX W guillemotleft -79 KPX W guilsinglleft -93 KPX W hyphen -49 KPX W i -12 KPX W o -70 KPX W oslash -69 KPX W period -73 KPX W r -49 KPX W semicolon -80 KPX W u -45 KPX W y -44 KPX X C -63 KPX X O -56 KPX X Odieresis -56 KPX X Q -57 KPX X a 0 KPX X e -27 KPX X hyphen -43 KPX X o -32 KPX X u -25 KPX X y -90 KPX Y A -64 KPX Y AE -62 KPX Y Aacute -64 KPX Y Acircumflex -64 KPX Y Adieresis -64 KPX Y Agrave -64 KPX Y Aring -64 KPX Y Atilde -64 KPX Y C -71 KPX Y G -65 KPX Y O -64 KPX Y Oacute -64 KPX Y Ocircumflex -64 KPX Y Odieresis -64 KPX Y Ograve -64 KPX Y Oslash -68 KPX Y Otilde -64 KPX Y S -26 KPX Y T 7 KPX Y a -83 KPX Y ae -87 KPX Y colon -103 KPX Y comma -80 KPX Y e -93 KPX Y g -86 KPX Y guillemotleft -111 KPX Y guilsinglleft -125 KPX Y hyphen -87 KPX Y i -14 KPX Y o -96 KPX Y oslash -95 KPX Y p -72 KPX Y period -81 KPX Y semicolon -103 KPX Y u -76 KPX Y v -78 KPX Z v -45 KPX Z y -44 KPX a j -39 KPX a quoteright -34 KPX a v -39 KPX a w -40 KPX a y -44 KPX aacute v -39 KPX aacute w -40 KPX aacute y -44 KPX adieresis v -39 KPX adieresis w -40 KPX adieresis y -44 KPX ae v -34 KPX ae w -35 KPX ae y -37 KPX agrave v -39 KPX agrave w -40 KPX agrave y -44 KPX aring v -39 KPX aring w -40 KPX aring y -44 KPX b v -39 KPX b w -40 KPX b y -42 KPX c h -17 KPX c k -18 KPX comma one -12 KPX comma quotedblright 9 KPX comma quoteright -23 KPX e quoteright -19 KPX e t -10 KPX e v -29 KPX e w -30 KPX e x -19 KPX e y -31 KPX eacute v -29 KPX eacute w -30 KPX eacute y -31 KPX ecircumflex v -29 KPX ecircumflex w -30 KPX ecircumflex y -31 KPX eight four 11 KPX eight one -19 KPX eight seven 0 KPX f a -17 KPX f aacute -17 KPX f adieresis 14 KPX f ae -21 KPX f aring -15 KPX f e -29 KPX f eacute -29 KPX f f 12 KPX f i 22 KPX f j -1 KPX f l 33 KPX f o -32 KPX f oacute -32 KPX f odieresis 11 KPX f oe -29 KPX f oslash -31 KPX f quoteright 18 KPX f s -8 KPX f t -3 KPX five four 1 KPX five one -28 KPX five seven -9 KPX four four 13 KPX four one -35 KPX four seven -16 KPX g a -15 KPX g adieresis -15 KPX g ae -18 KPX g aring -15 KPX g e -20 KPX g eacute -20 KPX g l 0 KPX g oacute -20 KPX g odieresis -20 KPX g r 1 KPX guillemotright A -40 KPX guillemotright AE -46 KPX guillemotright Aacute -40 KPX guillemotright Adieresis -40 KPX guillemotright Aring -40 KPX guillemotright T -100 KPX guillemotright V -102 KPX guillemotright W -84 KPX guillemotright Y -106 KPX guilsinglright A -54 KPX guilsinglright AE -60 KPX guilsinglright Aacute -54 KPX guilsinglright Adieresis -54 KPX guilsinglright Aring -54 KPX guilsinglright T -114 KPX guilsinglright V -116 KPX guilsinglright W -98 KPX guilsinglright Y -120 KPX h quoteright -30 KPX h y -34 KPX hyphen A -18 KPX hyphen AE -24 KPX hyphen Aacute -18 KPX hyphen Adieresis -18 KPX hyphen Aring -18 KPX hyphen T -74 KPX hyphen V -72 KPX hyphen W -54 KPX hyphen Y -83 KPX i T -18 KPX i j -36 KPX k a -3 KPX k aacute -3 KPX k adieresis -3 KPX k ae -7 KPX k aring -3 KPX k comma 0 KPX k e -33 KPX k eacute -33 KPX k g -4 KPX k hyphen -47 KPX k o -38 KPX k oacute -38 KPX k odieresis -38 KPX k period 0 KPX k s 5 KPX k u -5 KPX k udieresis -5 KPX l v -22 KPX l y -19 KPX m p -16 KPX m v -32 KPX m w -33 KPX m y -33 KPX n T -56 KPX n p -14 KPX n quoteright -28 KPX n v -31 KPX n w -32 KPX n y -32 KPX nine four 2 KPX nine one -26 KPX nine seven 10 KPX o T -88 KPX o quoteright -27 KPX o t -10 KPX o v -42 KPX o w -38 KPX o x -29 KPX o y -42 KPX oacute v -42 KPX oacute w -38 KPX oacute y -42 KPX ocircumflex t -10 KPX odieresis t -10 KPX odieresis v -42 KPX odieresis w -38 KPX odieresis x -29 KPX odieresis y -42 KPX ograve v -42 KPX ograve w -38 KPX ograve y -42 KPX one comma -16 KPX one eight -34 KPX one five -16 KPX one four -56 KPX one nine -9 KPX one one -27 KPX one period -17 KPX one seven -56 KPX one six -47 KPX one three -10 KPX one two -2 KPX one zero -35 KPX p t -11 KPX p y -34 KPX period one -21 KPX period quotedblright 5 KPX period quoteright -27 KPX q c -13 KPX q u -15 KPX quotedblbase A 19 KPX quotedblbase AE 20 KPX quotedblbase T -59 KPX quotedblbase V -98 KPX quotedblbase W -75 KPX quotedblbase Y -73 KPX quotedblleft A -59 KPX quotedblleft AE -78 KPX quotedblleft Aacute -59 KPX quotedblleft Adieresis -59 KPX quotedblleft Aring -59 KPX quotedblleft T 9 KPX quotedblleft V 15 KPX quotedblleft W 13 KPX quotedblleft Y 15 KPX quotedblright A -72 KPX quotedblright AE -91 KPX quotedblright Aacute -72 KPX quotedblright Adieresis -72 KPX quotedblright Aring -72 KPX quotedblright T 4 KPX quotedblright V 5 KPX quotedblright W 4 KPX quotedblright Y 6 KPX quoteleft A -92 KPX quoteleft AE -111 KPX quoteleft Aacute -92 KPX quoteleft Adieresis -92 KPX quoteleft Aring -92 KPX quoteleft T -22 KPX quoteleft V -17 KPX quoteleft W -19 KPX quoteleft Y -17 KPX quoteright A -91 KPX quoteright AE -110 KPX quoteright Aacute -91 KPX quoteright Adieresis -91 KPX quoteright Aring -91 KPX quoteright comma -34 KPX quoteright d -31 KPX quoteright o -34 KPX quoteright period -35 KPX quoteright r -26 KPX quoteright s -17 KPX quoteright t -19 KPX quoteright v -25 KPX quoteright w -23 KPX quoteright y -22 KPX r a -6 KPX r aacute -6 KPX r acircumflex -6 KPX r adieresis -6 KPX r ae -8 KPX r agrave -6 KPX r aring -6 KPX r c -15 KPX r ccedilla -10 KPX r colon -16 KPX r comma -67 KPX r d -13 KPX r e -11 KPX r eacute -11 KPX r ecircumflex -11 KPX r egrave -11 KPX r f 11 KPX r g -5 KPX r h -15 KPX r hyphen -18 KPX r i 6 KPX r j -12 KPX r k -15 KPX r l -14 KPX r m 6 KPX r n 4 KPX r o -14 KPX r oacute -14 KPX r ocircumflex -14 KPX r odieresis -14 KPX r oe -12 KPX r ograve -14 KPX r oslash -14 KPX r p 4 KPX r period -68 KPX r q -15 KPX r quoteright -8 KPX r r 0 KPX r s 0 KPX r semicolon -16 KPX r t 9 KPX r u 9 KPX r v 8 KPX r w 7 KPX r x 11 KPX r y 9 KPX r z -1 KPX s quoteright -17 KPX s t -7 KPX seven colon -64 KPX seven comma -57 KPX seven eight -18 KPX seven five -34 KPX seven four -54 KPX seven one -25 KPX seven period -58 KPX seven seven -6 KPX seven six -37 KPX seven three -20 KPX seven two -21 KPX six four 13 KPX six one -43 KPX six seven -7 KPX t S 11 KPX t a 11 KPX t aacute 11 KPX t adieresis 11 KPX t ae 7 KPX t aring 11 KPX t colon -12 KPX t e -1 KPX t eacute -1 KPX t h -4 KPX t o -4 KPX t oacute -4 KPX t odieresis -4 KPX t quoteright -31 KPX t semicolon -12 KPX three four 9 KPX three one -33 KPX three seven -15 KPX two four 14 KPX two one -29 KPX two seven -7 KPX u quoteright -25 KPX v a -23 KPX v aacute -23 KPX v acircumflex -23 KPX v adieresis -23 KPX v ae -25 KPX v agrave -23 KPX v aring -23 KPX v atilde -23 KPX v c -40 KPX v colon -23 KPX v comma -56 KPX v e -35 KPX v eacute -35 KPX v ecircumflex -35 KPX v egrave -35 KPX v g -22 KPX v hyphen -27 KPX v l -16 KPX v o -40 KPX v oacute -40 KPX v odieresis -40 KPX v ograve -40 KPX v oslash -39 KPX v period -57 KPX v s -16 KPX v semicolon -23 KPX w a -23 KPX w aacute -23 KPX w acircumflex -23 KPX w adieresis -23 KPX w ae -25 KPX w agrave -23 KPX w aring -23 KPX w atilde -23 KPX w c -36 KPX w colon -23 KPX w comma -50 KPX w e -33 KPX w eacute -33 KPX w ecircumflex -33 KPX w egrave -33 KPX w g -22 KPX w hyphen -23 KPX w l -16 KPX w o -36 KPX w oacute -36 KPX w odieresis -36 KPX w ograve -36 KPX w oslash -35 KPX w period -51 KPX w s -16 KPX w semicolon -23 KPX x a -2 KPX x c -30 KPX x e -27 KPX x eacute -27 KPX x o -30 KPX x q -32 KPX y a -32 KPX y aacute -32 KPX y acircumflex -32 KPX y adieresis -32 KPX y ae -34 KPX y agrave -32 KPX y aring -32 KPX y atilde -32 KPX y c -42 KPX y colon -28 KPX y comma -56 KPX y e -40 KPX y eacute -40 KPX y ecircumflex -40 KPX y egrave -40 KPX y g -31 KPX y hyphen -29 KPX y l -19 KPX y o -42 KPX y oacute -42 KPX y odieresis -42 KPX y ograve -42 KPX y oslash -41 KPX y period -57 KPX y s -24 KPX y semicolon -28 KPX zero four 11 KPX zero one -31 KPX zero seven 7 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-Bold.pfa0100664000212600000240000025506707477306250015533 0ustar mikeuser%!PS-AdobeFont-1.0: Times-Bold 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Times Roman Bold) readonly def /FamilyName (Times Roman) readonly def /Weight (Bold) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Times-Bold def /PaintType 0 def /WMode 0 def /FontBBox {-168 -341 1000 960} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020933 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6db17fae189924034a696ef26015a8e368a79166243a59ba3c9c20d705 b18cb8ef076b785c4da72079927e1cfeb17230d5e8671e5a62208df9cc25 66253bdb6bd681c6b90b47544e7d66521cf1b4dcdae17a9a87bdeb828797 9b4f1e096cd3bcb832ed5fb6c9f19186bacd9f9cf21fdb1600bdac01fbba 1b5129406453125825501364a940aecb658b59db81127ecdd539cc2b01bf 32e39818c6d68177412d9b2288a4cda199ce1515fabd6e4cb35af80cc592 d168ed81a14181ab02ba4918edf266579423145ecb6712b73077c3348981 94f6b7f83df41d6cd35d4910fdc622d36da68bc1145e38da269b88939c31 79ecb42922fc8108186e73e36d1075c3342f88a9b3bdb60884b83297efff 6198c50bd61ab4b8258b1a724f7fc86cdcb147c6eac240cdf6b3dc61fdd2 e46fa700203c5dbb3064c451b412bceacad0bede287a4f68590b7993b7fa dcf3fdcb785d983f43e5007ee67e4e973d39c48ff82f770263d3f1f019e7 67220949c500b910578367b5c392c49941657605e3736a31b5b2e913382d ec8592de6b76fa70b88d89551cb9586774cb9764185784cecdbe33ff1925 1a045fc2e551cc7143101f364357319191f21e31c5130bf9ef342f685676 b402f83b058811db720c802ce3841bac9f49824b08f7a653671b0c4b80a7 f8d22114dba24acc563b7123d8b17a146cd6bcbfd2dd10ad37d8a9274e35 5e17bc0fbfce8de1fcc5af638e0439c4faad06e0983753bb57b0042eb3a9 e4f81d3a64d761e49b16a853b3e1d2731d03a7965f29d37d6059ee595b83 c61eeca585030ffeceafb1ec3e6a6637fdd28e97790ff001bb16303829e5 af214854f32401c890b5cc507de5646fcffb1d1e05e734a5bf00c3628cae a58a4f3a29e975ac19428c33fb2ec0750576f362e5ff663317c7244b3554 01881d2f85aa8e2305cbffb9abb0a3d189b6e11c526ec2d6f46df362ca77 1cc692c937568116b47f8295043f2db286fa2de5a0141ebd344f16b0c8f4 9c12444ea65ee565d11502748a302ec4d7ba746d94879b1cdd89d44f9bb9 4644c3e1a75404d8f28da329d4473b2c954760e69e6aa1a98c3ab8b67a9d a43ab365c89dfba960cdb5ed612b31d65396023a48edbf1081b1179bcb8e f8eff185f76c92c3c8494e8b61a0e64c3096c77f54e7562a9ea6fe9d8dca f1cca194cd436dde812d07f581904c7f4fc3568e49474c77bd853f717627 8a8767f2a03b6b5319d50767a20af424d1697918b3ce87c0a03ac28f0ab4 d8cb2948d5ab56f24a4805ea0916b2332429c9661a9aa22842574818d8e2 e330621b162cd2ac57c62ecef68a2a3a51c641d6051e47ebe792bb0bf79f 15ad0a613dda0c4056e4e912cffd9238607da374f8126ae35689ed3e8725 a873d7bd1ecf175ae33ac8c1b2d741dc9dc3f76f457ae5370fdcf8355abb a221d157415acbb866f3148ae22a4dbec6e1e8a71592b42167b3e3e3a222 18a77208a36a47580688354b0b6de1b9fe91fba8ecd05ed2220b7e591c61 75ca94b25b88b6a8596cf101f540fd13f0350f9a978eec50adc2c76a9c89 efd8ab3cf63c9571ad126f4a7bd8ca1d92621b299fc652c783144c542043 4829d40c61c96344fcc4408505df4ef76ffd471dc47df0f9a11121f93efe 262f898cf32baf2418e0c3b2f1b56da0f7cfe1c60925c57e4b8255b9203c d251cd81cb8afce3f526d8f328a80f33bc43fb517b2ecdc16fb864a1b1ca 36b056a27c01d6a7f655409064ec922cb5781d70d98e8192bec67c9fbba6 5de2bc844b21736613e0dfa6f901da627133ec67ceed6377a32f6d5d10f8 d41b155f5f0b7daffc01fa3be054a7d998c0f691ffc0ee451761287f2d7a 7c0844b6dc10555d2783666bb5178ac461616f16699ce11dd5446c5c1802 7b71bdffd03992647433e585ce3176649b1a4c795f369530c199450346ad ebef1ed2175110913a8e082f5211f57340a461a790e8a8404e0245c93223 11786510634b5da2e1bc60a9a72301f13946bbd60940353fb39d84c67565 47558bd1a67d0feec9c6f6023e43b43ee27728e64702038ceda4c7b9e7aa 036ca3105a60b9e8d0d4050278151b42b6c3646e26a58866d9baf52d0132 12b971c8670eb6567863f93f58698ab2a4e7319b6d47f5a0b1d5180f276b bfb65e77f5ca65ebcf15ca68d755c38ad2962773acac8f088c0e5401c627 f5e776cf015a90a6ad3dde08f42e09506faca13aad66ef6d6bdc5110caab 4add78962cfc3ca059a78c34c96a10c858273a3f94a9251afb8150feac0d 5d46b0142a117da3962e8472913812f2349c91ef3d27dd71fbe1703a1cdc dc560840abe168301088996cad8887f7e237e0409613ed449421e532c660 4c059ce0178c1bdbed0f31fc0ad73588ddc663e2ad2e6bb7b29419376a9e ac7b88719ab38e3c6ea895ae120c9cd6c75dd96b9c2eea6b96662a1797c0 08d6f297dcd3779b48d15f21d834f9b97c8397d5217ff98d5bda3e3e034c 524482df1be1810ae5ad8646919f2b1df3af6663d82833820bdda7827996 c780b5b9f2bc9428adb1858ecddb7aec66a663ed7efcb6562daf80c81860 7b1bacbf4fd55311e4b70cae6c8c760d3c5fdbe783dbb5d3c9f7e8f619ac 658f07261a66c31171f64838e5f2875011fbae39e07b5062a7a4fe96fccd 054da417a723a3ff1cec65d49817b98acc2e93b1551e750debfc633d1322 f74b4dc581d1c05d7b91385ef58276bb1d5a1d7873601c1752ce08ce8820 54e0eb170119e90ff7c84615e36ab2eb6a2aa2de6f39cd599130492d09a6 842d6700a8280332ba22521a6c164730046623602559c50596b9ff00ae72 f942024982c25325e76c255966e3c61c82a507375bb5f6cb5627bf714939 424239c618f1dade354f1570816ed400efd37352925e04de5d1807008d3f 2c013e026c0f4b6c00f8f4f6193f968eea7b186a6d33f60b0fb537d4e409 7996c63c37912666427a9d9b107dafba386de6441f6b585f1332eee8c32e 93b20306b0a9f5c3371ebbc5b25383595b284983c5f4bc8542046a4c2487 ca59c0aeab9bf77e4abbec83e71f1c8484c1ae9c2aed421589d9980d93db d00b32b98aef3f5f66918a43d2f930085f9ddca42149633df4b089f6b2c7 9bbdacab70e1ff2087afbe8cca43f26dbfaf4e40611505faea4f6b45e63a 1fe54984db1360635d7c00ee0fbf7f44a737666240f2df0109811ab78fac 24e9a8054d3d6b6359a6bbeb9392ee40be78e1bad8efc4b59c3bbd5113e4 1a7191db61139650117e65776abd2f8e9bab18ef57f77ef41f6cf8c0febc 859c0eb1ba1fb242dee5aa6a5a8fd09d3897ecbfea4a677a432843f2eb2a 5ed80799bbdf017b386ff50fda9bdb4f6a9811597495851f26372f1c22f7 2f73377175349604fb0b907ff998280ed3cf3752ade5cffc5bb995397cc2 51092157597a28dbcc3a4d6862f0eea28098088a22eed1bc8c0976dcd904 dc2806da953c026a7a625bbeccbca9bdfaee59e426e5becb7546b03b3d79 ceb7abe9624050d4dfda2515496f7c988b926e5fc080b9fd9e852eca4f05 1379a75221d2a3772addada1d1caa800ba496173c4d4835391555884efaa 78a1a2adffa61384578428af5edde7662bfa539e5bd95778987ad17f6c68 b155aad472a4e374045cbbcbde30fdcf8073dd9a9e4081306290c18edfab c7a99ee3fde71f86d16d3873e8d9a62c59ca53394f3f15b21400080fc358 124b8839ebc96caf6264f05b94cd1a1c825316d8e9c83f1784586dba457b edf2e856377398bb79fbe457919298bdf131e65c9180066651ae99a88bcc 50c1ba46d0c203eb6765259f55a34012e907f57a5b10b0f94fbd53ec9841 c2497af96bef44697d45b7e3763c725f8934d935223d970c13c183245f1b 733c1753f5ae5706282c6baf1b9067c77370504eee4a81e3cce18e1f5e44 53a41e2104d08a9d0a5cfe0bc7eac514de1a91ee84eaa6109658b15c6323 6e1a7f3f63a9bde67afcc0b6ae58dd445bf21c2c1c920133add133473e14 abf17bb7b0345276798f1a888599046e4a3c7859c3a60cc255bc02edc17d e7f6e341ea017c46264eeeb0ab0f3f43f73b91729ea5d8a54ffa0388348a 1576f4415362ca8e91b3c759147bf43f50f5ef7c4f6adfb046742f712121 bdfd939688c11f16242c4696a17d8a781d1951aefec3c333b20190afc265 e29457580ccf0d4bce1b4e9495b9644f58641f5ea240203874ae5bb481bb 2d3218dbd6555e44348f413968d37a2a36f3f24a068cf597a7a41b3da4c5 fe0b0dae30cf584e9d7a9273b157d4b16fbdc628a18c17bfb1101bbec366 e60c18416b94af85ededfb1567439af7182bb465015d1b2cf4be728bd8c8 a9541e3b8d8018443142db2610fdd09f24d4340ac8ae9b6b4a243442fdd4 dbd528765a0f371396fa7530d5778d185c6d2f51d5cbad32cccaf2d154de 56aaf7a62776eabdc8211251cd490b11631704a5566b58d02bd0dddfb684 c5742aae7fda62a2c3fedab354aca2be49872de50ad85973e11d1d6e6d36 4524c88d6e64912767f8b54eac623a930860f321f32cc11add8941375f6b c854d06898df871d2021de64d9bab3f4f914af1dc507a5d315e66da688e4 b16ff967e6ec27fc69ba2af53bf6b1ad7797660cc9331025f025656005ea b1e9929c9cee82c2650e07a219ea936d0b6239f75695a1424bb3df2c9ea0 d314dd9ae87a1f6552563b36da5daa38d9b3fc8c584bf5f2330afc18a281 841629fdc64e6be97263079abeba00008a64d8a2446bcd68b0f2d17e31d1 d1af6bb1542ecb7af0fd4353eadb22c9237331907407aea69650827235fa 68d27668743a2ebe9bee2ab93deacadc3d7490fbdad268d60b16c94cf8ac 32a07811f69a4100b3fcaa97493436dcd3a297bd0caf6a33c86c2db55907 4e59460e396c6448d32d5ed77bacd16676327483c3aa7ba3e7e3eeb69087 0fa1ca880d909a23af72e7d4aed20eb63aee73ec366180f755c4abe971ce 01c74dee7981b0004dbe82b86eac6d6f0a0ca781b6d316ccb7cf39b6cf8b b1459ea0713e6d8455fdc13f2f2ddb529dfea26dbd1172c1b53be427bdf9 d42b6b2ee3689e484eaadaaff41b0a8465d2e660a69845c11dfcc46b1513 f92a306d1a7dd58ef02a7c164f5dab795a25a2bb462d214e0beca3a52494 9444ee7b49188ff80fafb9d9d160b9dbdbf2b2e7b6f477ec0ba5cd9b926c 3c9af89d845393797361ba40ffea719de7cf8d21b74701992fbc04326d91 2bedab272493880932ab0130274170669e0e876689aee106851245671f59 cd36c4aa620f03cd867e7165ea70b4818962da9f334a01fbbcaa9994e9ee 69c25433cc4a42f647225f6d9519498f65200c2a7b0c1046cfacefc09de1 85e86456b993ff490a93a21d0166720490a124a719060acd29522200cac8 ee7182ec2a0eb78b15c2992a6df7255b46030460468e0ab1620cf5171576 26db5f7f2bc4a8123dfad2749735dda8fa052cc971421997b32468f9dcb3 6e5ceef7acbba99ada20588fe7498778dd58e6479149f04bb30cba60c433 9b275de3474e0b89279a8be55e224311ea0a6cb5be32e4d92ed242f2a136 42bf4775a101abed33b597f1d52be42999ef6619d53b3819a8135ba0aba2 89e5af153f9d4cba79004a626d3299fe88fc749a0e218b4ba707b7ca1c93 9e99b5628254b5fe6db033db42f73e9bd52bf797e2138f48c66fb53b4a21 b9557d419a17303ca548ab3cca4caeb616f9350eacaaac12740c33716a47 083cefaa1a34cca4eab64edf2d32799aaceea4fbfb41957900512a0fd50b c9065a549730a059349d1946e20aadbf6e79451a90c9148b84704a185c19 78e421312def065eb2176a8da1ccd9a763d575aa2ebb919fa5805ce1d7a3 08984f1a069fbf2cca4f4e8429a662ef33a821330f5052b43e42a8aaedde d4fc5070c8895475549754a5038d9c085bac95e0306654a296d89b13b8aa 5f1d41fae2b9a85b2f661ffe26b488275bab968d207278f1445bf73d648d 6322eaf50f19dcd918bc627e7d1f58a5fd89f10b883daaefa1b276aab72a ba2ee7d443762fc8e2ad125ea6c67c04b4455a1df4e00d643de9a05ab381 cfd759ae11ec92abd3f567d8a2cd5beec6fcdd4b4ea03a570bdfb338ac57 79aef638a3004490cb6034a30e3b34e62802f267133bad6d6f8d2ae100af c5d0c7c8b6147928a03c4eca37ca24d7652998ddcdac3da74653f9525bcf bbec2d7440e9595a70724d157b85b60e0e4e90c105e870b9371ba3743a5a d62ac93ee0f483a67b0150e36cb618cd9f202fb231bad30ec1899939e3e0 ee362f360e8e9c68685c10d9fc1d5ac829803c2775a5b91e36229a1341f2 51d640b16226b9a139cd9f9553a010aedeace01eb0b7edbd9b2c08b064bd c73ad1a8116bce923c1cc3ea50b800949392e21d2080055ac63d6da11fe5 e3dc7a686e24da29c430585df7c788719a1d61d03624155827ca5bd4f3bb 39eef41fbd78780e12cab000df9fa844071a5a15047c59b8a6f45b34c5d9 e303a3eea97d43741fa63130f4ec4cd64e67d56c072faf5e9fef72bd5cf4 6386d697abec3fd9370b41c36ae1e497df6e457e2d5a75e0e6acfc90350e fc42da44020a0459390d32387bb82678311a9d95416fbeea9d18c7f2c69d 75ec3262338cd1c7763f7115b8a7acec010d7e36cfa41c9ea64e046a3026 e1b3e94f2f9e715ae214c09809c166b7db4885ff205d35361ea842d4dc6c e91b83aff0effc1ab65069644487b786a62aa5947ba60287e95496b91bcf 49083322176395b97a6502bf6a36f4664a3de94315290cb5682c7c352a48 c84c7cb956853f44fdf5592365a45130025c9f0842d3275e5705f79349a1 e7969373aec4351a534adc00729623e5aa06653def1aa038206fdfffb96e 3c88a093d04411b54797270494fd43b11b1f6b655503516503b5f8454c09 3a86d148e0befcb1df1456d2e976cce207d7fcd7a689f3cde83201f5c143 848f4f32506b41f5f65c5cc8ecca81ed1dcf61fa5feadc3cd9c3e697ea13 c427ced749b8fdfdde248d358c8172bd2d398be3c3e3cf67bc5fe8564bf9 8e2ed403a4d8180ff0d0cf33b55556fbd6d13a2191083bb5f178cb8c6a62 43bbe77cbd332eb57640ca3e3ae86b82703e2add6cd220b82e439612f50f e19f3a3904ee224b77c145d4885785d4d1f07d57d271df2334850cc74376 1a28f1f091fb37060e70f75d68b77c0b34c342d1d98567f9a6b1180b45f2 51721c2e6ceba6e8f4b38bc475112abae8316fe07a443fd172bcdbb3e928 087771d350bef70decb6197aa9fe0be4789a141a213343bdf5871513e1c3 7263c0745ba6dad4e02daa0715f290016b9c2228658c692454def37dc21d 09bb475acddac28788504b092c26e120e45394695f939a1c69a6d21ce3ec 3896dbcbba53d12f15b73c11c2016c1ddca3c0dd2e452ef82c4c46e83718 34821006acbde6243ccc6049ebf59341bb06cf7fc83b1330a3690202beda 8fb209e8c0624200b2401a5b98a6f998fab8b704706aba97403215a33e82 9f9b4b5b9bb670f40bbfccb4acf5e78b0582d54cd745eb4b3d898522f0b8 8984e2305635caeecb5964a97fdb0804970811035bd9c7ad105d966ef357 42b95e6899fb69a507ce98018444767aa6891021eda482429dcef3dbf080 3191ac67df9adfae7918eee9040c1a92470e3ad7f1022c97005871d2d447 3e2bd1667de6783c65fc3ff648b0ee7ae2cb7bcf0ca21ae523f3f8a5335c 37216f4c3b21ff7d1170f693ca226752b21d219231c73a5b5fe4c6e3956d fb2e71c99f11fd7fdb8647f215aead93abe5d4e38f0753c5b5e403a90142 093d58496dceae5f5c6db9dbfab29af85404ff9dc9c20c6ce35e30dcecb4 cb920de053ca8b839a8a7afd872456b8f504547302fd32e9ac0edd494087 db1ef13fa498a60a7f5a9873aa73751757ff5381619e31f007392322f71c beae46a403ddff846e3c6127101cc96b6ec14a219fd8b88464fa809ca103 3613158b34200378ac6aa5f106204910a6265c1055477cd87f7f4371ef61 70fa2b5f9a2b79c3f9eb5d27d4207de02dd89493b9eab60b24cddbbbb719 c5ea4b2a87cab84e8fa538c33d598f013ea141171782fd5b325197f08b2e d6da033be07d6fd6f5dd71321d2053e2b3806d7351a4a78fc2bf77de110c 861179aed58c2b2634ea4ce36a4923d1efe2edc977ba5654b31b2bc4f932 611ccbe94b870d235dc490ef272bfeb89d43bbb2857e6307cf4ca9f5794f ab1bba11d46518608ac5d90d8abf7cec152e29622bed54640f74b07bcd90 5a51d0b654e5eae46af5f5f1999a260f9765c03c0a3cbee624fc12056f34 3be7ac855e9c7ed62bc82e712723dff34f952c1c565aae8d913ffc1ce670 55c057cbeb0a18eba9fb3b35b40a891a7dd9603788ceac9b974d3e6419a8 1454b2b3b7206ef286d4d7099221ce31bd75f5cba4b42ec37b130462cac1 c615425912b42dbac9581f66538aab3992e5efe678a751eadad05fda0e8a 7a6b8db0cba5d6431346c884318d43cab5053a1789d40d2bf762064c25e0 f56d8aeaa83930be4d42619149120e63e3b97c8bb08cdcfa677d8980aa04 d5fe473a3fd7997df160eb87cbefe56a122eda208df8f70998fb18d9a766 e25a38f62fde49b00c09b952a829c9cc8d0664ee6c761aa2e1a524e763c8 34a1f497ab1006e850b0af63a52a8bb50dfae0d4f050660f516e805b20ea 3dcb18b1df5f8b1327db941a4740db522e4ef8a5f022837d720f079d0c1e b4c3dc9a77566cbcd638b5685bc4904ff704959f268cf1fcda92c14a9340 b79ec1e4f75ae2f79099dfff2a0341f9a485bcdc07605d76477187df8eb9 226f2cb7c9602ac10fea4760e311924cfed59c6ba8c07d1ff51a34f2784c 8ee9c5509c4e423300692803722c7a3e765b37c60af2e3b971220941b752 49cc8a522d6fe69adc2e45dd3bf0fead126a77915a858725501e380f546a 8aab75a1c1e5fe931f3faa1bf23b374c373645a9ce85e0daf7a544fd0d7f 1e0b66721e19dc7b3253fd71d88f4dee6a932f6fbaae9baa517b0dfe6604 5da0acfd14a4287f3f59119d9a134b69a9bc4c44810607bc5abb4cec205e 8499d8a4c84718ece2a894df72e297f49d37a4c269868f4967109ea1ca1a 9c80d8518f86d5368897d3ada8b513b59255a5dde8c96c1851d8699f9611 dae5655bcfdff2d908610a956ca776a0008801bb4507aeebce8ad110a963 179070d3b8005c41a6125b0ed94692a2283707c9fb7eddad1dd5b7c62bc7 14252f7f20841f7c6da0015893e2d1c6ad444bfbdb2bb0fa352a88e98158 207ece213f474d083a6809320b78d6c0801a5e5d87bc2a37cf7ad04bf3ca 9b00dffe96547ab88303aa789b63815bac2959df6d92a2aeec6ce32d227a 9537aef49eb2836a975c51969762504525b8da6d9bac5298a174b74e64b8 838ae86fff37c66879739f7e849d39f67fdb05b14a9bc8d434344643f84f d1a7af80b9afcf88d72e233f2d15eed7d6a7de18db74e2f023cf26547791 c969f123e56de4d18cdc3523e421d8b9d50184e768e54cb2cafe81fad1cd e7d7e13adcf5a1be5225fbe12c3a3a1e9c3a426bc70e58b4d0e1ac9dea09 054f25155f9745828ac620a50199d5d3a5af21fcba4dab649d1a13d2fcff 3ce573607856c2d26a6aa17e394c0ead3079a8f35b0bfb3a2d301efbefb4 fc572949dd3bf9f14f61c0d20c905865e214eb914f2960b10712bd6cfb5b 0f489107dad12f50bb07219fb4c3610c6a0c8bd067c86e17e2ce4b082809 6a4c496db82c3b6185859b212f7e2ae71abf3e45d94c44cd976036c17202 8bc65bcdbba37d0344902bcf7017cb92f668a5ea04a243af27842105151e 3e613e061e72f6cca5eb65862e7616db5a2f790a65aecbc8e5694a5dfb98 971794c1ccec6e74593e076c782a7d4721a32bf079626f4eb7cbca0d1e8f d8fa3fc5b529cfaccfedcfe8371516ca48f692caa0c4cd9628efb1163a90 8d704b5b54807b1edac16874d14eea9fa089f7320d1b9ba294684cf98d1b a730eaec1bdc1303303aec0afa4137a497e3f9b57ec4711207b3b8edce84 f332fb505db3a3dd93e2d55b77d0623494011d8b63008b156e60d6d2805d ada922778230e2d5eb6467a5dd7a66011710ef5bd0cc67fad7f03d13abb3 c945120fb82fbc4d6791ffaa23563f94bf917d64f993b882b61569d624f2 43d9e0b5425e6ab6c072c202b3ac97d29f5f828bdd36e03bb3326e18e56e bafad48ff10de2078e17fa0a762c4d386396c96fed9cb012d67c0810a6ff 84e22f50c2a4c310dc823aaacab93cb81c8cb1df0a8beb2cfac9df6d0b9b a59d0b55f8342930a7519368fe63a68c1b75aaa8f3535d8353827ccddb33 05bc555acb1ea6704220e354ee14a52e72ad3b0be2738bb7bd2d618eeb95 5ba8c3e85c8938e3d841a9d8f9fd72eeeef4dd1f5d96fb5bafd9b0816a6f 7d21e63e60a219c79df60d9c6a237d2d11eca8157860b588e74353054f5e 40950e6ec2f756791d30ecfd1cede8983ccbfb7654cc087ef8d6aac7ac31 9b844f2f9389eb5b54bfd6719ebc3587524f181f3047756bfc2d205fab64 ba527b4a3270e3406eff42a4dfd37742fda02f3a6ffd579787d1d0a86cb9 17147969ef8319b4abb037c750ab47fccbaccd2892f0cfb163883d258292 f85f1f9af3ea78e113bc618d2b53e176544744404ba9f434298aeeed9c84 44475157586bde06062e01e8c5e5c6210f9ab6cb3aecba1f15a3327fc243 b1a40851c509044873b6af73f147fef1d6aa91940b40b6d5a8bfbca43678 03aec143afc851863c4f166d9bded4202a41591bb35dec88696fb64f28d1 424c42716a78f3c21cc2cf74e8da220cb822b2033b95cfa1feffd4557a0a 98d981a08aa153e57a904ba68d10bd10638d8471ef80c376e1121d0f74cd 61d8bd93935f9e83ce1430e0428a0e65e613b16b932525e99f7a615bbe84 d076f2ea572535d55b1f77cbccef48d03b9673b746abecd69fc5975f15fd 0da38595606a70c1dd1b62dd3f822b6ff534cab0647a20a59276c63383b4 d99352771a23ea81eec8bc9b3f0ea962ea7ad01bc53a0f3af650183f39e1 17f892fec594696053cc7ce4e45997a783cb6114f957e60a8f1e998f6cc3 dcd135efda6f20b5957f6f74ff6e16ca621e88709481085ce53e80dc5cd6 ffb3b06d23d4acbd8cc9f4243f6cbe4c91b2192da31d8ac57fee2134b152 cba5db3ac8b25d8034cf2c9b600caf3e2c1e01ef54dc689d3e29dae14ad3 a4b7d125e692544e27f95240081637f02755afac86dc01cfc656cdc1e997 a9b745f626b2091a20822814f9f4f1db94cb90a6ecb21f1df02088bb4b7a aca11fe08426496f6865c3ad4ac87c838429c709ef7a645278fcdd2a17b7 a942b7400000275f11cffb5b12fd40434a5b5bbd52f5aa9e40388e8781cc 439ad51ca05d06d2441225f1772c9c9632a517ffbd97ea119ca67b3c6dc6 19e462f964b43133d2e4a2ff47231488280bb14ce0b559ac180082cdd0b9 e21f5e3a3f4446a1f7ca6d47f28c20ceb302b906fda13677964ad1ae1879 ea410894b08768611f6696c71a0cd51f114874b43a3d1c2b9654024611f1 09788da6c2b8989da8aa0e3eebb42f642dd98a7fc387939c60ef3ac3afc3 c03e6371a34458d90194d3526b2f54e734594f0120e819701411d9cf68c7 7221164844c3731067d3522634874edd36069dfbed03fbbb21e7c973b28a 6cd43184d02b7bc8ae1aa56ad351025de19ee7c8bbaba2b8963996ac8adb 70276ea7f2173448d1238ddda1a224b2934a9b97166f2c9de90107401bed 22a9e83b7c851a5c1c9cb53521c7cb5c62279d0fa074bf8feac4f0a765bf c7d3d2dd68ce1ae6340946d2ce4a56635d12e12f81e523d042be8fce5693 bf419db44d068943302379599a793b15142e11607a4bf7762f55202ecb46 dbb9e2717178b4f4fcd72aa06e86bad3c25c26297b82e7fd44f8474d818a fba06e3f47adf79b9337a99ad0d8411c84b75ed71b7977db0c6f2cc2a24d 575bae0e4234073c90b5aeff0ab6d2e2738927501cbf7326b7ae91a5dd68 e14843b575c4aac7931329f216e782870bf5c0e809c17938df309eced9e6 2fe9180aea175be61d1f77a14c317078d3ac1b714e23b756d38f830b0d79 ae6140d0ba5005657844885a966b7880acfcf5dd46a59b8f44f772061006 b1ed98bc0a8852ffaf0ed8ce28a4fb96b4cc985a0571e67a52c626f71e93 0ac30dbbc10e108665af90a05edd40b2b259e432c324eadab1ea2de9f4dc a23d0472dd0aa168b00f3c11e8c2a1b9435aaf47c7659aca580bb588d3e8 dcc9c43ca5110cec6474d16956043c26d4e7d467b287ef6219f161cb6008 8e3d449aaca4c9165c61c1ee74ff036fae95025c575727665665c879582c 86fe3199f23717b33ac1a00b2599891b006328fb91346068654fba12e8e4 d3f44c45a579c9b5eaa32e6beb237f7bff19363d6c588829be5d26d2a1ce f599124b7217338f04fc42ff9442d3b88746cb51c326f7d4869f5bfc2ac7 db0cd947c7714e9372b606acc77944c77913a74af3b5ccaf087f42d038d0 b616a39f5e9f07ab7402cc627482214098831230c2b301f3d99c6361200b f88e1dcb3675c79df3827af3b468792ecd22d086f7e8706130ea17a177a3 a08f054391c0fa5afcbc93ce362da99b7c748e8c22c634ae6c5e860daefe 94c717ee522fa72fe3933dbc38f7e4b3ffc5a421ee0e5c0d57b9f362f84e b64a8d7b8c73c7587c0391882a1a15d18296a2d96702ca0e927ef7d853d4 e9c447c79a32d8a9fb2dd20bcc18c1c11b96f12f8a7c6587e546c6e433a5 c591eff5548fb27ef4db60676ad21169fa012b47638d66fbe9a35dae3ed1 69fe0ef2baeb08fc3b64b09165fea87a843d622d321fb4954bbc19648d8e 5332346adb2c39a42537889854f4a7913b130853a25b48f88450ae5bdad3 16b803c38b8923822a05ec360d8574725ac0cd59bfa6437da2b7246d4e9d eeffd7b1fd22331b909e7b06d64f37b54e573b5bbbee73ee0aad14a6148b 94cac00600a3bcb5599cd32b32730435b999d0e5085da46c33f1a7ae0f1f b277be9f492e4d134349f494f8734ce41b8ffcdddf528da2a0c2ecb6269d 49c44c93fde9d0f2e002bb180e99068fcc2feaafe8b56a3836314637b800 e04a43a99f03fb57d26fa088f0fb8b29d4e4eb5d8b7370d27fc8a73cbcda 3d930cbeb5343e880320c59b1e09e4044f8b28fccad9baaf46169c413a36 e810756e467148e69a33b83a84748e3d2691ffe603a6e083bddb9d4a0298 8c834c125d97f7149f4cbfde1247ea64a97cd560759ccab223b208068e48 1eabcbcac899343d1361997b368c3a95305eee5fd1f7ec84fc43b261e1b2 a9cbed52d73b200ae21d0404dc7341b57afffd0efb5fddcac562d97c50d1 f5a8410a54fc2ac5c1840ada70e32847b3ce5b6f1ba6b29ddbb9be9f091a bd36fe99d911f8c6bda43fcfafb1865e56f547412f2204092dc20d5b9c35 694eabf8d67c85751ed23edff11182e78ea08a44476ea21ade7e7a457b95 47f23db5c466956bf6c2fb75840e61d847742f726e8511a786495aaac92b c0617473ca481da6bd7394bf1fc7d06d3fcddf9df87a1a3933176b6d2f9f a0b7afe7393878e3a80d334cf545bcf144a9db591e2fe641b8369ba90a68 60dc939ee09fe845084eba7ba9b49ac5992c1a252899fdc58bd738a1e54e 29f69ba26fb5e7ee151ee99ae1239b0b932fd78a35833abb3da69506f715 882af390199c2840a2f33077e631a05a1d23b5b583aba3f3bfdc49882922 dda51a7b363532dfe1b965954f86cf05b89454d9cfa086904d3f4e948375 fd5c4cde14a16c55f47fc1cafd038e882f05ce407951a448506d98dafc51 78f274f3a5af2666ccf153314b07a896aa9c26b3f303bd989c3fd8009d74 ab11104f0c2db640246ce983c402fffd0a4b8ec40a8b9d35e8aefc8b6f3c f5759818c9e722b70ac59c5d356a661b61acd5af2e7c688af1f43c072047 3a4e414a7fc86565b05bea3e89a36bd5d285ff73b1f7ae4c6a4ea4a96c69 6d2cf51cf6de868b474397fd43e844040570caac2931c2d35985ff8fc22e ff0957b2a13ccc8b93fffb8583b99d9b86ef7487c6157887a74e41beb072 6247cd7ab46da29932278212f063a2b8410228067d8edd81e592f623c22d dff01dc1a3fe08807b3921ec7a563de61a20f562a5b39aeec63cd353e1d1 918e86daacb86050ba721af440e7d8cf7849612a6a8dcca5f853281a1985 155cfdc55bd9467e5d29c1f444ce4de26c76b667160c191d76693fbc9286 373f919c06bc21a05561eae4000dde5e5e93f905974a0b3707e00db200ec 045f51e61aa76439aa1827bf33e465cadd6dcf670938f874d7937bf0a435 11ccc1bc769adaa75c1081554b34bb13a16dd0175aeeb25d3d1a06863a9d 06066eba80cdd7443efceed61615016a093b0ecf14ed1392402b37d60c1c 240eb2963e3c6c851a9c37cc209cd505ce15631c48e3b2431bfcd3f2d493 e48dd26e0ec1c981e705967fbf6a1d805474422a80a9d8433a989cc5e16c 770dff9af7e259a1b22bff3fa494f5fbfac8044f472b3f187e07b28d4ba8 5953c6ac9039bdccd6dee6cb1a043aebad3a9abf95cd8d787202f8b55a84 d865da52cee96c7188a5bf4aac2a80d5684c504284aad272db7a2f2dcf94 a0784c05afa682d2098800faa33edcf9d04668abb0f2f5315cafc23ed4f9 cbcdb5800690bad48df4793862fd8fb7575f6f5cec17f4de032ae2796385 72deada57c5c246ae4e7d8e7d9234d0c6c821f69a15763da65d56db07499 42aeb749eb52152bb04bf5a39fef2d7c83a754a66930600e49da1766c1a9 6fa49c31deee7ab6be273cefc6df2bc8f70eaaf9f8c37d31219724b52114 2cc9e30825e3c84efd26fe64a1b1ca36b056aba64d87297a232a361060b3 aa3d277a439d85b3f19b65dd95a6aa85d1a79ba985b305f1e185642b2a97 1a09196ee7070629376a5bb76e5fe17430dd40667ea89c144b2966f72fda 205f03453812bd1301f1248952eeb73d0001100f107d7e7f1872a7759ad8 433d5dfc24a04152296a8af5e6cb5b413cd042f0a9f8dd7cbebe9524dd2f e4048a1148600f97c01fb2f505cc82e8b8da197833a0cf88aea3ecae671e 47c10de60a539d53ee5b5a979a93f240c1912fb464009a56de3b8fa747c6 d9ff8f274885076322e851dfdf1315c097f1eb835e71b8250291f0c6f6aa fce7a19f9acdc86715a8b85adb7a7292aad81e5b4186e86515130a62dddc b1bb251ac6d923f803aa9533deea8de740a4c132f1f0507c8a3224112b6f 2f587530d12214a3bc7b0584d943f326098409e54ecc6047885f4105dd68 9130bc5693171ca3a4439c3bf0bc006ac971c340465880d22600136f2127 3615d780d7629fe32758c78552e5b1b7f4c164d8b174b0200169b520b4bd f5967c8b48dfdf2e1d79d46b30888890928636673a031c4eb04b1c41f1bf 34474b5c32ebeed826c0bad2ede079d8fb17fdb11d197503f16e13e5c22b bee1a7a97caa6ee41eda0bf68cc9dfb127e86cc873edce6649f7b010095d fce6c132efc35f225cc49082ba53cd787a3aa464e14479de9ebfb98c3ce0 06f159d3299b3e7a8e27316c14715cc3bbe5610ad90a5cffec8e47024d34 48181e8fd0d6a12148040e31c0445afd7ea203d3342cc064e76365f3143d 534754831a558bccdd1d399357ea9e95f1457d2cfdddef9ac2b667e14a64 29e8b65ff4b4df34233d0713a654adf3c1119d6870f1d8605c4cf26dd7bc 4f4d1fc8e711683b3c12155843895629c16a46220e529238655d2f393ace 50a98ee53c26185d2cf360135bf116dd8a23add04e3b04be216c4ad785f9 69b62448d42014df2b231da5642c8361d33361d5d6cb27f9fa0457eec0e0 e4697544f54dd22035d15c1c27d922c7f9a784036cee800d650fe243cb4d 3e6fb0fcff786c6234fb98db8192db7af5c1964bea151336168f2f55a46f 495ad544febcd11b5068cacb83cc1cbe6df85899a0884293bdebe7ca36f9 1fbf93d62edeea07d80e163cb3b7bc7a07173d71588a0c196a02ec3e5acd 6a55ed28fa7b10b4865e9e5a35d543a973925d6fb46fb051be2ad06c8870 5d04591b7fe7c151008949e200b5a6d9d7bb8d491f0a71c539d607d6a740 92a710a9a8a43b73f53ccd986cb808309b0e475579a4c94be73b659f4a8a 8a8aeb1272d191656c6c3d858d20119ecc5a0baccc2c3f39d2924b4aa31f 9df8828a3b0f854bdfc449edcb76e2ed805a9b393e148251f59ac591e015 e6124dd625efca183e89a7fa85a0c1a66e627bfb7d519030fc9a8b51bb8d 4514bd26f041e0ee4d8c06c18c315cd2390e3c90c24ed48b19201817da79 7830b5dc75f0c634c4de83feff85945b35956573b67e1ede40002a55e9cd 80c0964fc3ca352b021cb9789cb12efd2936c1b50eabd62116ed402a0f46 027dde11c0ccc00f762084f5a759a2ffbe508ffdc47d755ea3a49f0c9da7 cd537bf2a67b5a1e05bcd9e873051c7379fac3566fdd276147771fd989ab 6ed0173c064f379708baa7f221285cf0544ee7e49d2c227cd7ac9ed69d15 f816e3f0bba59705b28e52d53ae471474dd9b2da6516745637a9cda2cc27 8003cda21429e21f9aae44e3e9f0b54f096ff72ffce658024f80f209a192 dd60506506ede0ac3624c67dc939c7b4aebda5d1cf8c89cd8fc705144907 2d8a98de1bde53ccb91d6ecda3b54475fe45044aa6a13f05a35ffe411c36 8dc85d12eb8c0f6c81aa527bd76a7b4beaa5235f7de562e2a0d90f8fb896 d5153bd6ef62365d2bf5454fe871cf43f0e6503d673b67270a290cc77568 c95d9afecb7cbc4a049b24318551561ee320cf1a36d62c69f62cfec5bba3 fa50c9973d035a566c06cdb63ba2b5866bf2df4779f8727ea88c4440621d 15739c881ef3a34f3d6b4f6a1102f202e094ed3deddae294da2dab01c297 0755acf12f16a5be9a05858112505defe689e4f6553610240ba626674ad7 f4af345352b2f6616f7503b36c121bb8657c6959b1d3a397665501d41242 390129d49e7e9afca9f6e66e75fa0f637ce0dbb4c3abe634d07b0846a34c 49f0e9cacf8a5cebf0170728df6e54632e23abc66c93a0e5cb64b378a98b a5f4124a5a08c271d9034ee8704ced153535ea26cb2e965c63bd0f07fd4b cc84f8dd351882db9507cefd77ed77fc223b3e7945141b631a26dac42cf2 709264fea67aaf94486568dbc60293aac0046c34c259e731aaa4ca9ab9f0 cc99036fe6c3ff666b38d0a01d01d3c15f74fcc0988de82656d682bf2eaf c12bbfc57263afda7435c86c77713ce21586f0045f4f8ffd440199ed919e 55257ea5d34c92d212715e3b92493bb67547f1e89bd2d644ec5e50af04ac 98c7f395c78dfb65348e6598b835a0b93d8c514e322112d6f84e63a54173 ef14d9b2307562906792ce1a583ff0191ee8594ec8957cf80035617533e9 adfccc8581feb9998d73f46f2b2951db8587f2968b84c6d85cd8fb2515a5 f49e7c5bfebe1f8666e59bdbf89f81127d86dad3ae6c097ae4fa3e2a5890 f272dc2da8f010bff4ab48321abd3a4eecd3b71b78ed8d4c077baa339bd7 74151660fca5c2381fc4edc9b7352f0b3237712c575637a9cda2cc278001 6b68f88fb1123a12157de15815057186cc367b855ba73832a68bd85552ce 5364d84a74ad3004558879e9ae6825e363007fb212888752bbe80ed61fbc 5624b9f3a7db873e860121c4bf9c536e0415bac88b1d5bc0a9f9a1e0730f 0f539c8db411aac5b1021fe3909866c0cce1e049da6fb5325fe77d554ea8 b6834e45123b14442d0bf5853fbaba4aa4fc40af967657415187961b9fda eb27d0fc78f584294508a5a5d85d79145cf5deb3e78431e2f5d2272ccc78 1856ffa98d87d8432dc45e3318cfd3c5ff17b51dd16fa3e032167058311e 4faf27100d7500f0536b57e79ac9f92426d9183d36852f63c6a39454343b ceecbb92dc4eda5c72c6f88ca146341643f05cdf1481a75c49e230619994 a5ae18c9fa830057a9703f80262a015a0e8a9a4495d2062da1d869b1ed85 624aebd09111d5c7dd37829bd6580cd2aef6eb313a641861a06a5d3f8dde 1813a84e326eabfcbc3dbdcb7a236cf535d8582abd947d4e267feb98c181 1e1345ddeaa73d0cd5ebe38eb768a7d5fa07d508bf3f631426acc8230f57 2339354746fff40537823fd1291278de736cc2dec5080465d1b188881da6 1c72fee665f1145d3b1428b99240476226b0781faeee3e1f1b5dd4a50575 678bbab52abe30399eb46ae4a5abeaa604e1210c78566b58338211623cb5 d6a52fbb86b32fdd9b7956bc08443834713eb5d411cdeb1917a42526bd53 2e1b2c9d3ad954433be927d33273e21e29d29593eeb8960816f3c30deba2 ac173fe4b6dfd19340ad18445b69f7277fd2d50d4563f4faa997626625df 7e539076a734bd3ea302a8c65e7d4c6074df3feed3dc1efce83c6445d788 21d38e19ee05dc995be0c45a2e4cf34d718c77386fd9581025a656430d93 dab43b9e9021264ec8092128e461b1cefadb25f99755ae193b47ee62d966 5522365d162de1c16318d7323f9b6752ad3faee8db79ca22f2867dc99df0 4586234351bc656ea79598f5a9c9f893ee5781f372fbc340d6bdc47fc892 40d126ed7ca082f3ddc4a8fd2b5c3a3d211b3a37791b9e9fcfc9373fc15e 1abb13eaab49cbcbba1176ae01a3475c3e3dd41e7fa1c688db108e06276e 208f2812f67fd3386aa4afd2aa06989dc8f04d40bb682fe79324b1aec1b9 6a5e4c4b4793586516de78c8fdf1fc8ac3b58c29134966e378e08322fb9f 898b05718a035b600ecb9a8e85c5f36a3f6508f152f7a88f23b844aa8634 fb6bacd6ad762b4ad17a862ecd8f5c9c593a689abc02b576992ed4814502 dc62b4dd362e5324f1bcc2fa26e4ccfaaffa8074f7cb282daaa0916632a8 d215528233bbe1b009af1164993707dce5b45dc7b3d899655b95466fce04 cfca17d4a33db2f9bc71164b4f4bc1bc6357112336162ffc600646042d3a 39438dbea6032b63bacb9ae149b7d508adf6abcfc5b0aaf2900c6c0ec780 641e8c2b608d9832b37baa1104321165cd64b8318e45e0f7086ceb13ca18 b78263f70429474e2e65cf5dabb1e81af6fbf44d54a2cab96e83ffb4129d f0442c7eeff0e3952dd697b8332108148b9278c82c30953566e5b9baa0db c760818bb03f7fd90508765a671c0983134ec92511084dd7467e75a3ef38 5c7a93c592ec9839f9548096bf6060380287cd690d714452d9a67fdbeda0 63135953f544d9f322f59b6573b9d930f077000dbf115955fb7d5b688438 a9dd54cc812427c8d166e0306592fab92b6c594b26144f3f6e6cd5e4450b b5f371cf2d47fe933277f1ca65a90812b4c6f5bb424e4454eda5eed334d5 77267b6bdb45d4245802d8ae38ca237c8727ab8d446657811d78f20394fb 00f24c2f914c7ebf4221f4e5f6f5b1e7fb4dd21aa3420f9e8d555cb12954 3286f59caf43b1321ec6639505b71e35c6492cf314faf2b08971067c13e8 826a32e596e79bef30fd1c62566c815a970e2d4942ca7f81cb1dc73e4824 e10b3ca4b36979d7689193957c2fb0f70c3d7ebde523772e031a91b09707 3a278c84d6a4b1594791b7c444db6a3ec448b7f7339b5726b384c654570d 0b57ef3e3a3621b730c79f70400ad2268f0d0a3dd661e4c5fed6e8ad1238 33526a4864e97b39784b08356f0d961e800c304c84b6d6f5045ef32a59ac 88260ba41ba622ad2dbbe1bfafd27872962a1d9ea3f5a21d1eb8a12cbb1a 4944a5fffa5aada106a67fd429c877e97221b142da8e24d9e54943d62525 e50efa775c61f6cce5fe2125f81b9ff1e4ce155922d57e9fdef4e510292f b81e52fc1b20a3eeed8251032855eaa4f5074802f0c38d284ee2eb7dcc6d a888d0112f35da279d1f0de15c5346aa026f1ffbe98c054b2c37e9bd3339 ce29b40e3698337e96090d035a548ba229c8abf6ec265bf59e2d63aae901 1a78bf3e994f36df0fcaad6da564240dbb49d24fc245ba2549024b404fc6 a9ff16094502500872b4975e55d7e77fa3cac5a15fc3cbb1e61418f6725b dd7883659243511f94860a6d0ca1035ae4399de1972bab772a862ad7148b eab321cc5e9e71caaf5a17d5cd4c07c6b339db591aa3522fcc19aed67312 ed3569a6fe876d0996bff7f95f4b7fda7ed833ab3d45654d54c8a398d27c 3ee79ab77caf3e3a324c0cd6739c389674064a0debe87bdedc88c8c82995 32c5940356e65949608ae01d27c815b5dab39a559b9995214eb3492e36b0 f4da04051ee4afc4035d27b9479396116c2215053cf8d9f51f85f935ed72 a7dc43110e803e1e8dac830e303c01aa4d1a9d38f355037170a78ea21aca 426db4bc12deab80e25c6e318bcf191adf520fe6b0bb0f021d777ad18c87 c98206bfadcd31687e0a71534ca562a06a98ad6cc1bc9283e49cde809f17 10bdec90e906a6b86d4c1d887c9776391bb307937696aa8b26441324a228 2f3c5d4737ef799205ccebe28070203cf12328734fa3222cda6e23aac26d b527c29caa2b987ac3c2c587f063a27898560ed80f8f7d7a1c4b23fab3a7 f425eb85de8ef72837edef9618ad41daae742058a672c3fd317006011127 d28690f80e3b6496e4785e5692ff4ef59730e95b92d40c38556a661ed4f0 77f91fff0e8c693ef68f00c7c916df1c2d1749dc63457427d9d6d6ecec40 3ca60ef3ae434d73ebf871affe5265efeb93278c30cc969b6759cc030cbd fc367448eb7fe9d1918cd1a51675fe3eccc9864929b1e2ac592da5a74875 2d031dca2873bdbc3cdd5b83052a3947a20e73621507e44f527ced7ef188 13723bec768c97539cc31c71e701372fdeb0d00e7a99d32c0f731d74fb4f aeab6ec5d3aef854f118141ce715b97a508bec4e67f735deb8d4d560b8be 626aa8d186fcd7117fcc7385a6ea84e3692508d429c6258577d087071f7d 0ec217a3852c82e3cfdafb62ba679a4d4d6e7dcac24f4ecbb35f1e81404a 39fdb273b6e08f51e7d385f1ea001368a8ce704ae1c314d79e11be3afaf3 8c1465931b500e6f8b4d4d32f2f7c002319d0008666919508b1bc5868b5f 9323d993ee8f7e2bfcb74f7381e7313b6ff5b7a3713820d615ba8ae4c878 73dc9a570344fe6bb200f223f2f53ad5fedcb1960e83d016933dcdcdbeb2 f2e07ab4024114dbc1d9bfada27330713df70548670c58919957cbdfc0c4 4d8396d61f6b32d2ee141ce545ccf32aba5df57a1513c93d1d5de4f6ebc4 8f67fd01b5fec1bf8d729b01aff0f5ce83f4f65c48ec549fe942720239a1 b522e39ca1b22d7a8e19c1e6a8eaa1b84fa8e97d3a048c0b9fb433afcbfb 10f0159c67d4ab7eca064a4843c85c388112de3bdc8a941c574f847ee32f 7205672ef5936203baebdccb0fe34bc9cfed62112977b0edac084d21277b c7c144cd3f0c4ee76a64bb89eba1f7c82c430979dfed709d737696d0f3f1 48eb92e3132d63419612f89e6310260c955e315b727d2ae23890adfbf1ac 667c11e79967a79f65eca6e72d8a00365406751c318b76964a519a815277 6c5359d696125e634c71f84a9be9485457e08026d17a806d488796c1d568 210bcc96e77dc1135aa957740d7d2f87c66663e953316e16c3790ba720a4 f6bd8b37df04c80eae026e536ba20f98e048efa3d62f0df16cd6c0b388ed 06a238688c5add277deb5f7e0b679c0d5fe02e9c47f74bbdb23cb12d801c eddc27f7161c2501481741f20b2939656814ff60df1568c4b15d651fa8b7 204c5414ad4ba5d46a886fc762ff41a903fd563357dbf8ce312fc218612b 196e7f639dab6dbf2c41a33f45df6684d3dc2d7de998280e9c199e8cb6e2 19f4b95964cf496b9566419aafbe0a27bdbd39ed5fd5c57e07c01312875b eaedd948aaef0932e2cf947cc6f4f02c6717debf9030eea18e61e7976f1a 966ef34c2c20109835f96e333b04aec07da2554ed192fb0787336b3d5c31 54ca1f74ada04b94a59d6e0f63aaa34103265e8e8b92c15fc91ae177315b 768cb488a01868f86472114eba849321e2105465e7b0abb387af9606795d 00c75038c4e03b9c3d639c60e8c7fdc5a23f96be9926ffe34e2bcde91df7 94e4d8d07dbaecf3797faee5917907dd4c141a19cd4f39c5d6e075937033 9aaeb877b3fcf2b73322cff3e053be86e559b37d22e58766bb355788270f b566facdc89eb1e5878cf3795a0514fbcb2845b38f8e6916d6164c16e138 56275bf19c7d0cbac9dc01d151762bf39c7e184bfd7652926c104ddb7a8e 33ac5d03c8049e6f21d3ef4ce7deef00a88614ab3942d05794eaae38bc08 8e7ea85c0c8ce5a1aa04089e5444d7028278b09bff9fef7411a63dbadf64 89c1fac8bd7c34b698484feeed69398abb224be0421cb02c009f110f9f3f fc07eaacbc9656aafbfa00f3a9244ba8a6871c6c252ba5fd999139a2ce4e f918cd920e32848d37b8f262e5aa905c168bec8256f050db3a833d95975a ce2a941b65d5b107523e434a67ad5b163dc2cd09e55c5537b0c31f5b2c19 3761ebc63a39ac192cb48cd1566c2fdcf22eb76c6a176f6c48eb95d21530 38ed628a8da62f98e5de3a99c3db2a908043405146c8e015205315804f93 91fffa8a7df6c9df134698f8f7b05bc1a238c81c3f2e32d03ce09cf7e288 64c19de972196617a8cb4dff20fb2d96c8f996fab6f01c13ff45007d0b54 7d2ea16ea9810d22f6db5c9e9f0cdf32030bafa195e134ce623e6b5ce04c 2389d1aa3213a38c79d7e0ca3f81340487c4e4f47fcf7f0e045f0a0e514a 554e42968b998930d7647be4d2ec78b0dbb4d492ba04fc36e5d7544ffafe 42ea45a69134f96cd42386c234a9e6fa54ee7635d01cf17e92b28e0870d6 da51709675582829371d4b15ef04852e96648852fd707b40edef1dda30da 95b5a24e49740c2b0d8480e0ea7b609e6fc390141c183338e539e69e1995 b6b2bc9345c09d945158241d55acfcc1db35c6e14ef1e2faf53a9438e0b1 8af4114b945d35f54dc1d19ca901e83b9949d0558d59d06ae2c999c1b5c8 bd0b1ed745c40ec911f0412f9bfa9087c20139019e61f6a9672173c3a948 6817cd23fdddffb22c0ead29158039b4c7276ecb2280afe8113ec2fb5c1f 75e803871906f287a7c5c130aba63681281ece9fb5b551cf19be4f327b61 86bab9ac7812b5060dfa1c5cbafc0ec9fdfdf7fc65a13160b84b21f0a773 f0098f83e8b41bcca960d12995838cfb8f3ae13b86e776d171c50c3f4181 8407705552b6f6c08bb1e2ae4bc173edc20af6826c95f1468a382c8a696b 3fd434fde1329b7fc5526939e23f2a620220211366747e37a4cb4cbfe71d bf315773119c6f5704ce6349303f3f6a5b1a28a8c361613a028572d61afa b8b2b2018a3a2f86d5bdad8c2d67359f8ff6e05807be54a58677aa55968e bae8ae92bdc1e8da7b2d17137effb51da2d21b59c627120a2ae46141e96b 33d631c560d19def8c6fcbddf332615f2a97d3f660ee2330c79e4bfa4d77 2075e1a0b3734118e47d34e1965f92a5af373bb0e5f90cbcf7b02e1bd62c be575c699a22af0305a30b5d23717ecc5e45b1755fb7780fc540cdac330c abe47c152d74a9a60a69c4acb585e4537843de7dbb05d1a46d45f0b8ea62 a84ac5b5b1719c7c7f28d369459b65cd22478e0a63f78f3460421e047b2d cf0fb6ac49e1c43b15dfa9ed0e2b85ba801ed62c87ff2c754a7798e9077c f32bdbaeaffc1674f3535dab490e20abeb42ca76c7bfcb8e7bcb1f23582f 2302d4a41f5f9cbfe854474adf84578bcba59a6c316d1bfc71cab3f7cd4f 81d3d33a0635743ea09c26b91f7aed88d7b755992c1016341317ff96eb8a f0f93967b5a741b252f7cba266001806a7f4fe4af59d043be022b08a69e8 6438ab6e5ac3ca92c065a0c6ea5cc6a794f7fd7f51580a5d1a40265e802e 97f3a18322e90b9ca120462ca3e1f74aa6ec2e1196d024a9102139482337 e5c68667c0dda5751b0010135e6e5f263b4002f0fc8a92e47bb38ce47baf 8d23bf185ef5102d9c761609506739b20552cb690e4d9d6b44526e246092 ed1cbbef64fdb04b3c60b1d09e5f77ad5d0b72fa36ebb5311763ec10384c 94b3c76c6ea4f6f936b049cc836c9758df2fa6fc1462b74762240fe3d50f 5ae2d4ca6fed66718281b39c6c223a859b6228915d3f51923eee57f61a74 8e01e377d94e5440834d51449fd2bcadeb119b711eb6fd600b7a957a8c5f 978db69de98a9cdafe3fa9f263acb314800c2f16df6de1a81974cd324fd1 81c86ffd91de4393a9e008567d05d292c5f3af804888d52509484dbaa018 14dab0821bbc82d42a759fb7f3c5768ea518f8343bcc24b3b42d8495b10e 939838336f5b5ff5715d049b905c897ceb58e2d0e046f451b75266df152d 96b8f44cadf6b32acc692f7e7d18d123d58a02e44df5b6aa5ccfe8ef0f83 4be4d5ec5ef6184d27e6ecf3bf30955be39f3fedb608c178b9cfc7f59739 f26e7318c8af7fe11b9da10b342ca9a5f841010498694052b5b595c43c88 d2ec32b466d21c9b2fb1b6f21b1a80bb68b94ed817073856620a789509bf 9afca6d461f7db7ac222bf4f75431c505e451409f058143cce1950fcaf45 a1cb99de9b340964f12a62fd11a7540f8232bc7f7659f1b8d673c9eb5805 d530285e68c74961fe76755da71ba131df305fc5fbf55c0b24990e120191 b1337ef703e6fc5b669980f7b3e1822af9a36c27c38b43d9544ea8746a0a 9053296c8d226f35a90f4863ad5b24d13d80aada0ec34b7b9c98d6c9bebd 012e7aaa63a6ff3e9348d6eaa68178fecfa03a353520637d45bbc8e721c1 5ef95eb7904fbb51652118acd7bc62d2bebeb1f7b1ff17874aa7cccd7f9a 649071b4650e994632f1a9512324bbd1e301b9b3b61078ae05a72dd12001 f86ca93153defbbc74d556ade5722268fd35155b124a98999314173cdad8 a6677a90e5dca39b49616c699a3056f19baca46369ceac4ed94a77664e53 2addac4883f517b5c3fe89a0a9c19418af72d956b2a266002d066095b7d5 de2906f62d5c0d9db530acfb3e5bef8d7b94244438ee3ace340a01177e8d 5221644c1424fb8702170de977bbacc1b106e42c4f7273180e4f171f827f 8ac87ac0df39e23216f9925ca1a2ed432ffc20b7c76e3a3e79809b00ed30 062f3557d0506210c4d97bc3d1f1c93a6e2dc303f0e5eadbbcb331e57a54 cc8751e2de0c560470a020dd9eb836e8095e1e04ad360cd0f9db9473701f b194b55da015bfb8edaef22159dac7b277167de55c0ac88f77b6f57d848d ab7ff92c16e1573d4dc2fca7ae4c78b50997e51df596dcfff1e9c991b9c8 daa72b3668ca0d34c239c4fee9c080fe2fb18a51804480184992a117830f aa89c44afd72b239eab5b11bc7883200e9a34666200b11a88ea8769d4e95 ed470382b417af88419e29783d89d56e9d814e1a1395d3dcc39841ec2600 9fe90286c8d48234f58a7b8fa8dfe939d360b393dc88926ab116c6a90208 e74966035d81dcc226557073f284687fce0855f25877e10e447771e2cb8d 726b325b1afb7282273dab4f6482f8d55df9c35cdf69ef9be5652a60cd0e bfe0c8f51e9cc93edb20d00fa7a4227fb064edc2b6bfa608b8eac4fd686e 2d5a5b467dfab94b1e43733cad6846d687d1077f82b3814e0aa40f7934eb 656e87e036b766694024abf1196c758cee49a7548385e830657624f2c535 44c74768cabc77ccf0a3679ef71d4b7cb31f824884a155b010a9eed44924 f1435175c928ce03e947ad2fe3d8b7263bc3b9da2720604798c927d2c489 0daefb3c04dfc664f7878d0328d625f09acac56d1b35b32961ba0e4dcf3a f5dae6461cf1e7447e0d7936bf0f32fe9c27af9b142d156ec0b8f481b780 6ccaf3d870bc37ce15b4b97cc826d5ce9ca80c440a6fdc9d19e89ed2e45b 8b933cb824fff25418d672f3a0058af5cf98a324430505fcbb3684e6c0e1 123f1a776630438fb950c6bf601e2f4f20897bd6b90c36616c93bf763a8b 045bd05f3a29e1ef1f82880d933e87364cf04ed32c19314ac6736bb289b1 6706555bba5398cb78077a9e4b0d1245fd7e0f586cbf2dfa331013e707cf 24f4dd5577fa44167fb351cf9b5f6e53088e53c702043d50d4837b27074b 9bacd405c9319104c77dbac6aacf080ec491beffc06599de5c70c76c15ef e3d32e5b7c403570ba41d26dbf9a1ed0a485a82ddf7cd60936731fb1c1ec c63492962b685fe8b27d0a1508995d0f256614a92bb0ac272b191780e6e6 1cf3debcac32614dffc0f130fefaced5afb51e8444976c35d722e4fd1a70 b73b712fc475727eb15b1a1b6ba92480fa111272a1d1d6a3b1d6b65a4a90 58ef33ab2acee79613dd66ea359bdb06860bb1d3a25db1e7d88a520867ef 1a7088f76a21a311704426f4b0387e328026c915cbf178d2dfb112bc6c2c 1f3847c7240394f3cf5fde890ac602048ae9a374e4a602476b5e15bbfe57 4a5f9009000b752cfad5d2896b19aadd6fc73c7c5e1e3de495114e5f7e9b d6360ef8ff71d33b72c83e0e18a2c5ab1c7b89fdd812b2d43995e5ef148c 71bd59cb8601ebaebc69e4c7504d509bc1878f71fa7605b5394e5a0fbf93 daf6541a6f3cc3db472a2e4d8259ad8e8faf25db3b6d679653a7d1641c11 c034775f60dacf60e0cef0b2b6e12aaac5b11fce42e8db0ada33a463d03a b336534ce24c2f898cf8290c325bbcbd7543bff47e959a0f586890d6066d be998bf7ea844cf0dc240c88934843ffaf612cb8a2cacea4aa324fa27db2 078dfcc437ddee39a700394ae048fb2dcf9b5fc21e8914646a0788990663 d7d88b4aa2bce8865b8b1837ac3054932a27cd543fe32ffd7392f3d93c14 f5b59e20065aea718c877d8446340c85b29a325f9e68d8e8403faf8038c0 3c574183d8333e7dfac504b6c099e4d86b3580e5182219cf737088187b15 3c3b652edadf376b3cb856d89b4557c7192c6eaf8c8f0c3e3be8430ac97e f2d18a155ae83e4829156128691703dc7e8b533990c78108472b699fe8ff d2dc230fcbe2e0af27847c429489b1d7016a5ba087beef5e4da1da18cdf0 c418332aba6b7fd5b013f3d522e48d0d8a636d3350268759c6befafde58c 695bb23ecf4ef896d2babe7cbcb8e5f893ec7359ac40c6285c16fa323174 45b8b172f7db59f0bdf016d804ac2b07934db8f9248adcc00bcbbd6fcb68 b294c294cbad5f2c4038e3b5fce8fcaee59fea644c4dbd9689044b71f784 0200a989c6e85ceea5615d061151f8c073be4eb8b1c3eedb4b60af66a129 eb2919d945a24b53e53a450a7bf36900fc901a642486a4fe41b7d749e200 db173201144d1dc306b976093359d7a85ab33dc798e18d276b26ad95842e b556123f6856222e060eaf4c0d56904141263cfe374bbc15b4aff8249d35 831b20b3b03286250ca15642171c4be9cb8a70887950199fa8438658d3b4 280d22a2e538fc8c2cd04c97c1656da42e9e86f18d1cc0304eefca7f3f49 ca5038b61e3894d3b9fb8131047f61bf7ad6a648230e954b4a6da6617eaa 7776ddf0c150e70d1ed97b5a5abb87faf35778bc95a8ecac9a9b53532cbc deb344360e4da56184be967743e6a429c120043cf226e21372fe9af0e67d 964185b85401795c98711cf7ba6531da6b3af028fcdac01ba256de73fc1b c7456a6de57d3950fa6dcee4ccc9a7dbc39a65071b7522ac91072472e28b b299a1a4288529468b1b761d49b408d8604a4e37afdfb3f2ab59e36de3d9 ede43058c298174bb001b180ec00cd80a5dd4bc1e81c3e879a665b0b2e03 fe2c63b1708b78f6abef4fbfa2d8c1062d334be565c1f3423c2ceae01982 ba517a65d85d7dd16a47c365c753592938e50753351d5100799f07fb674e e37d1b7e0ce338def691de08a00e58ee8d8a6f59be380357701ccfb9aa7b 9f0e4e6cedb1950e55bdf8d53e58da72e0f1679c098e999c58a20bee86ae 90b0e938bfd658955a3ee79bb830a2f69aade4b122116f2912bb0c7f87cd 3fb48be5167326e1adda90674ecc7bd39d26d0518204c93ecf931144c6e4 486913511366e764f4363efab952bd0697ba792f6d60dd3ba0907966217e c9098a7dd2cb605d693838cf923f1b3849e1959ebf03dca70b4c3a11b0b7 d71935ef23b9e5c894ce55ebc7a910f2e1f2e41eb2bfa64fb0afc4c002c6 aa45c1030ffbe98defadfe709e5a5b5853aa7b9b138d2b5171f275dbcf56 9c40260ef2bedd64ea5d5d64ca4ef95b6cf18a0b639591c88344d1c82fb0 afc38fd933da90d383fee2cbe9566060e2d6a99765b12db3825cb0096902 9ddb3d739684dc1ea99b3ac76928e329e81f2b1f40fcdfe96b841cfd78df dd78aa19ff23f8a4984e5c6c8588f2e0cb38639da24c1996d94d23caccd6 1273b10e58a4e20babe1000ef0acb29f481e07e9e5807f8b247cb5918554 27f190d157ae51cbe26e2ce0ed85365b376b0b2f93fab2dd49a3a701d556 57773d48aebed5f3967492189e1627dc26c147614eb04a4be285820225db 26bee5ef6d1edde91a11851172d96b657f5096b92ca93e277d0a91ea358d 8f8b80cbe1f42e739b6485ed8161c43b3e5e106422890e4fb54d91f9fc04 34c7f5ce87f625b7fc339f8a10ded6ee1ec56e55deaf36b67511598ec6c5 37c50f5c540614dd8821273d491f01a203c3b00e32262292a91c0d290935 9bec38d133959290a938d947813359ee36249f79bf5ec3ab49b40b6c1768 a90b110f6e4e141eeb1d14dc046f8b0ca30ed5eccc537a85bb3f0637a743 c334f956f73548c3a37953fd88f978e4c93c307ddc4c67ae4978a4c067a1 c107ec6b0a54ce032a764ec51cb2938cc837ab0ccce20eaba31e2fcbaf6a 773ff61a34801d04f1242ff32188b65d3a3d9aa679d9ce7b4c329a7df550 aab54d47e2a92f464ce4c6b770e420163003b68085573e433a4cb8c60611 f3acfe47759b413cd68c3dc91890c820771f2e8acfd09a2a4f2cb04c74b2 905d0c68e029750fbe22d4ed079733604d6a7f5904d23014f818488bfd0b d58c3c366661a08c80a48a4fffd94c16f44d2828175bf3833d67d09fc450 a1c75e2d8f09d9c0c17bab3eb108945e37bd5714c79ad2a5c22b9845f293 5c48d8bf88b1b858f778291605dc2f52520d313b9d2aea0121bf2529881e 8694626e42b1375130e9e4a5069f2949ee8e9f652647aed049827e16dff7 cdbaace4a23ec4dad34cce3d0a5f3840b0e9adee8ad66f61a90cefb30d79 17777a6489621993a568992ee59f4912f0c1c1185fdf9b3f7dc822861f85 3833c6ad7fdb0ab9dd2ffef8c6b373e174cbfa42be007342029c4b03f5bd fa7dccdb01b0b6607d6462b8fb868483ecc2aeeea3413b36c303c68553c9 1ce89b1007ff655f39074a3d086a256dde8b98fd1cafc098c50dbf920ccf 0395cc3e1f34be9bd47c1494fc0d27b12c364109063adee0fa61763bce21 c97daffd32a0209a6187da496737f0ee10d157b1574f5f7ce7f5e4d92b1b 8a14bf1aebd0ce99f15efe5c5c5f0737e6d63c2fb9cce33ec845b51f9b28 32707f6eb911b9cfc5fe02d68d8ecbe32195bdf28306c8fbf07b833372aa ec23f982c0c6c18f640c504e07670e99b9ba41bf60780285b2690d0124fd e665d9e7dfb8f4c253278f08f870a3e69fc9bbd2bd3a7dc83c10c864933a e7af2cc8b35667f1c3abd68c3971547d6bd775c76b8610822217e352af79 e24f735a5e5df6f7552f82a6c3cf2ae142cfe7966fce9f7ff39b66034920 7cc80babb940fb4c7246e6ad5b911300e6891dceaf9356dd99f633515238 01c1c6cbd815b95655fc1d4472119564613f8a6b14c0d25e1113b07feb9c 79be24cb02180264c6f2f1933000d2b240eaaeee321fe1f7aa6bbec6efb4 d9d4a04e8ec499f436c2999cc58fb88f9d0a976c4e0938d78467cf97adfb 9d97c60126ecf8e5e72584cd91d7539cab4b464fd890b8f6e4a8e4f75c2c 4f233ab7dd2eca8df667e2f4e10a95ce3863a43ed0b7217cd03500ebbc11 8e08c493e663d880ab19ea0878e3f42534a73358aee5c2191b5c5a251563 c27425ab0a6f90a9fc98c46c92abfb57081f87aa9cb036bb89dd0ee24817 88e60f037d7436b127c6d03b755357fdc5b50a0e3799862772b241d6b299 ba2cde640db55b11db991bbfead8070f37e7d71dbbe8b2e16ccc5efd8700 826d426a5f8bbb1b371be6dedf6173bef6d37c44e6a965b90a65a853312e 8f0472b1b1d8a40c769a35ed23e5bf71159ea01f0626586831f327733d72 bb790eca158c9737d909dae6adc78f22f0d2fecb760e118bb853e559e7ea 261f1be38e04837bf7b63dc2ea51b16ae691e9db4581706308b16c27b458 be5deeaf7dddd19ae0c228d77f1dc3b784a0f69696a6684e9e77095d8e6d a72da8668829106e5b54a6bd12c06b0cd20459b110d7536ffe56aded1f44 ec9827715d8dc2ed1a9606e93917a9b74ee4567b5f4ed8b4e436b168858f 9393af9aa5e60d80ef6a7aad11589c578316e1ef8dde550a3f7c82d08c0d 5622cdeec6e14a926ce275c9555c9c7b9060038ae6330e3bd3c46c52ed2f 1dd38a57ab0ad8aaafa7df115ea05cc3ade5b3a1f323da00ac184399bbad a9a342ee03207fc3954bf0b3b7aa650fd7ef8accfa8b6418739d8831772e a278011461ef3db7185de3bcee8643f43253afac230aec69ad8ce6d0308a 2d074cfc8c8b49c4f443cabc8574d7fb59b18d8c2bb3023b039f9c3259b8 fcef315ec057cc741dc58df4b17b0c8b3e037b509120874b1aa9df497718 f37f4a8ed38010bad63f7085fa3f5d26385a2230b4673692a3088902476e bb2a14b866cd0efbcdfa62cf93892dfcad2d25bee53edeff655dc503eb8f bb1284b06072daec2870038ccdcf5c908cca516b851926f736d16a64c302 0094dc1d778ef8a2b0db44d38e4b0b6496d79753a8e062da3711a8d3bc8e 5a204152d564bedb012731978ff9f19bdb06c73e624d954f8bf083f911bc 108cd54450dbd1a9d8869f7115ccff40ee1552ff07c966b61b0118971136 f822d1f56b195fc42a5ca762f4b85e1329f4986fbd7fe6830b88d91aeab3 930d7c4646ac8b405c0f3a312313c92e3e52414a9be109948ae55c596b13 b7af47bf04ce2e755e9ad72d91fde252d140862a8d300a7703de8c4164bc 635654ab25cf57f335a4e622d17f651e4929cb4e3723070dac39943bef5c 9c7e347a31d42e17ccac0981adb579d3147f27ccdaa299201d95142618cb b16c953e57c675bdd084712503b223d4d622d6197ed12d51b0342a971646 3ac54d65c3d51df62d66adfac2076e3cda2ca9b90d85756ebb96b5028692 dcf7aba19ea2abb13ce2f9b4deb41a21bee5512d707324cb0b385a41b337 629816588bf6acc83ba2be7b40bd5361b12968814661155ea9940db6b4c5 88789ccab354e3e4e4740642f7a53c7186fd361fa6945b0b64f89ab6af1f 7945f0564c1bff83101ae342415e3229e1bb8b31a37b5f409d65f866cea7 d1e5592b5f366486abbdd4ef0df8d2e4652c70192cee9dc04ab399d29a50 3919ad42042d4766186c177501453c76d7535d646e2e6f725f93b5996885 83600fbbc9bbcc71a494f370a7329477453f6b0fcc847d8090e08680b8da d50fca076b5bbdcf6b9f2948dcde2341fa2af30e35cac08ea21b54044988 fec7e63e2e303c9d2930e2c6772048bc5c0867417139c121a0488b298ec1 2ae254dfcb2bc1bfacee4368b61b692cd6d6655d97af0db458ffbda70703 592252c3bf0c060c85cf7dbd41107ff0ef72359076946e08f606425451ef e802b6d1f7474cc8033c8febec804d15c0fef5bb0e3c02fba9f30c53ebfe b59504b99b48028e4b7ee8ec2bad2326f283c074e95ffc60fd7b8f4c42f8 8b2cb0d47b78704b5b87440a978cff7819f63f977402637a56ee85e1feeb 62ed6d6a9c4bd4ab349468d1c83a5375d92d641c5d256a7eb111546444c0 51a471f2b8c73ae9d2596c9945907f0671b095e624cb5cc6c61c2a971992 f32b6fcc065d9c3741fc1791863c1ece9f14350277d177855107eb99dbcb e0ef7d6ff00055856cd78ec7060bc41ffd76b65506eaac5275807a812212 5f18a3035f3b493aff7c40fce05443c318ef294ccfbf1bb77f43c5b72c14 4375a2809cc5ed8303a5817848bcb8f768fec370652951f2a32bf97b40d6 7e7deaac1ae5f0c53a00eb194dddd59bcbbfe6ad9db83faee23699629287 b01a2598997249656674d20d2f8e66102d9eead53771f7801550a2c031b0 c8c3482f5dff99bc05857bb4d72a98c72d6a85df3b6725e32bc68964d709 c206fea77f4511226750c8518bff9e0fb0391880b38697cfb1a6802d02ec 8575f7ecf075aef5e9c23e5266d5d4d9b355a8b184260298599ea64df656 c524e15c7e5dd088a25ef7851bd4344d191f58b91978d8565b165c292c0a fc7f9eaee27ea7cda39f9a3a66af3ffb82303bd93d2dbcb06e1d46553bd1 d069e72104c79e7c02b4332142edd85b7f4e930ca3e70647af2fca5074b1 eeecfd5e46c496f3c00ddd38ede9198a2f4d082b711e712638701b967b55 fbe76fcae36f6c6bca44c3f7a7264487c02dd277b799489cbe27a47ab035 6342e4487426991b72353d265dbf6f5b0452705ab199cd74e1c017e33650 e24fa5dd0f7fc032a87119fbc8d0d3672bb6ed4d2e5694b7486e01f0f22d 8bd8bcaa8483e7fa722b0e42b0c30ded8e09b091a3dc3b64741f4ac77fbe 34ea3874c487fa1c040dc20e8466ac25d3862c7cdbcd71571c260ebeeacc de0292c01aeaed75e47816e59be6319bf3d85e2425762160360cd7d38981 e32b51b7a34e4b869e7276a5cbc3c9e65c7a4efd276628f3e2c607004fcd a7986179a935389b460c870bec6484ebe15d17ef714a2855929728949cf4 a3e394cf8a1c448048cc981d4e4ade849dda7e638388619eba287895b383 298bd778384ace341716bd6c743908ad3467bbf036c87602a10d3f65df6c 6f021b55353b4a490304bd00ccd0e79d520df2185c146c3b2548a3858bda 7efcccdd01b7f86fa188d5b284d28b2995d0df35aa259bea7da192d20321 44d62374cb442f25a3f9f41026e308f9b027aedd3ad3ccf34d4a547c2cee 7eba41c22cf7b91889c4b09219fa30124c2e98ef60b610d63751b8cd8929 5913a5b4093e43ca97543f45aeae0b623198148737c8a6ae3c0777e577a0 b6035a3ce032611fabb25843fc1c82f25d31cc8794b777c7e4f8743287a1 331014bf0326fbd99d8db75e02c790298580eabde40ada22f80be5c37426 a36b14e786c1ef8f37dea23ccbf7412d1e6c6c1101013802d727a3789eda 2d9cbdf845c850930f823e3ca2d4873b3101d1b6c940627107552aeaba47 b640804368e12ced705af246ec335f91024fca082dbf1bc74ddd5d936573 b77256ebd9eab59b80768b45625505e8cd193ce925df4e4e61fdcf2bbe0d 832943f2ac95f5be4891cd584b19ef0f3df6919bafa4d719fa1359e2ceb5 2e267c3ef3e93c061b5a1eb9fe812361784fd70f3329be7967cc47d23470 06b3969f809e91d9a7b57cdde72fc958c2a525e1405d6e8f0007f4068776 8191d21cacf320ff695ddce1a560040a8fd39802223c6149cfedb3b4a20e 3d9e8c956af9aeecb2cd1391b86fbdb6e2b8e5e248d785d3c8b64ff88d46 1a09b145de7129e566653218d6a17b726de8e74d8bd8aff50652ddd78a0a 0a29444f4ee64aaae3122149e4f860a8b0910b46ce1aa617c494d2b8671a 06e8164fe49243591eaaf07737dfd6e31419016bcefd42d2e6c3c7b48f67 cf8d3bf2668922db178dd8c41fa5c9466126b0c8143e672db04c8d30b62e 13573653dbaac284e8f63e39fe3ead8625a82946cdfd91920ecc2b22467d ca845baed949753177fe98a04d5f59f373b90a7ae726dccd54f2e6b03cf1 2641b580583c846b2a3b2508f7089b458f64d812bcf1c1606137ab88e351 b4cf6c20998dca6c1d2784cdc9c0f7282828e931786138d9ecd55ae5ff88 0d2923bbc384c139cb50e7909b618e4b390b42ae9b0e2e66a5e4453fe99d 2e5e67cf7a3d8fc7864a7d7ca13b1865111c6dec60ca36c5033cf0ad0ca0 d5eccdb8b55fecd663500a9b17f6d91b9b48773391bb44934c155ed4434f 4e9ac7b14e5275e9e56c39684e23d78cab80bb2f10cb6c17dd629c83fa54 d6c532bc5508163fd6492e336979ac8a29799cdefaaa1e28626f1dbcec1b c92d3737808ea9c0a754a610252356fa96e83f37e7b7bf1bcfb9788f34e0 a1e88e393533aa4b6b997ac9d86f6653c3c7fb25200d96ea402d9c43d468 616a24a274e5f01b24069b88787e499993385f69ef02cef12ac1bc36f87b b01b58d0ecbed6f0ce6eadc2642e69429616f21d22e03058fc2de9757db6 8496f38c212a84e820a8f97a9cbffa849ecb355c6d7e5f7b19ee82f00f79 74622ca13a65820217d7043c330006234f1c87ba50698a5aa719db8f7f97 8e931d7e304f7a0fbe740b516ee683322c525775897cc7690700edcf3274 7ea14a77a5362a2a8aa3ca0ad7307663fce9527db08e1cf177be1f06ae3b 9ffc0baac6ff16655cc2ec512d21d3c18b43931e3bbbd830ab74e361bd57 4286b9f06ff236e83910e8baae0f74a109605614fb762d78cfb512f72b29 0b1634d81e06807b6f3316d186e124e8289b64ae5f1b4174eda19652e26c 47fbbd1bdaa2804c54a51a6bf8cbf1459319da7ef8de456ded3c2dc63eef ec631d2b1f26ca5a0bfc3808795251781341a9ffaafbaeea3c1062ecf4bf 949ee3b2d689cef0bb7218111b2875fd4f5f3a620184668729f49fa8d661 fdd41b6cccaa160ed651e6f6571d853f27a029a55e8f7f491df30dc6a597 d7af690960b23c7b6188cdae3b8118e2d08f316f74cfb97120d56c2b977b 5716beaa794448d94e3ecbff4e0634f7528668da7165c1709d6dd32e95b2 56fb0af10e1d1ebe111b69fcd83d7221ba52ff65d27d969fb56c8241afe8 3ecb114006fffdf09fb9b9e554c971d8d42ab11743a69eedaf0b771205a2 5150ad685cb07cb5c90315a1a78ed3cc9563b4ee25e3df8c96a978921631 004377e81d603ec66b447ba6376e184aa759f915f77518394455407f521d 1d46c678fd5f294b599c1ac78faba76f23228225c17d8d8f2adad55fa5f1 b5f07d81f3615342a3944de03d28735279b02906d039949d3b93bb5e0d02 4651d447ebf19ca4e61e4dce9d89f0a1536a6a9ee98dd80ab5eb1a795264 2cc5ca7782fb069aa69c734b484addd5c33cb477f34ed58df9f62bddbd26 be54c1d209c1caef06626838030513ae49181710e52c16b4f74e36ecacc2 9eaa299626c08729436ca145b0a962d429555bfdaf3443c8a3fa9abbd7b1 192ea89e5d2ce8a53dde163d4df179c61e0a2d725554a156ad0bc70504bc 72035ebd035b31c1e7742801915738a41d1d20305a1d506040033d1da307 97f83379ee210719a42bf6a3e5126f151b4f3233da8eccd888422394ddd6 42d7622070e12e15163509fb09c9af9298cfef5a4c249535659573bcc00f 9d8bdc3aff0bce664bab4ed277df93a919edeb5a119c3cb0557bea4b4783 01831592c799046ba52388330a99b06f49d712b1897ab28ec92ac1ef4080 6e18917f5f22017aadb3c77f539c75e9556969de9d4d7f7ccd0a84ffcd8d 42d3abaab0560b929f59d8da45dd07119aa8f647a89a44622f405feaa7f8 79fded6accefdd6be1c676a679026ce997b6f7bef0c52d29f7eac7601b58 651e27cc30318fa64bbd53a33741ebef235f971b9d33f2b323ef86ab45f3 bddfe1b0c40992d2632ae4357195da8dd4ef8310a6184b52a4213de8f2d1 a27e1fa6b034e7edb669a43e627de204adbe4aa3aded184548ef477d1eca 3d63b4207bf39818e6153b390c030fe6fdabc6d58aab923879d9e9feb3d6 d6f83d8ac6854a121cb8e4dc509e90ac87e0278079fd3d267e76dcfa832a 9951a8966e3c207f8c6079a711257b529f7f70b49ad87dd1c64c8fc684c6 9cf6772bd86cfabba9512362fc16308746b426852886e23f26069da9b33d 4509ce4c104d0a0551c7007e1458a86220753270d0068bada28ef8f592ef 90b6fd82c924a873a404acbbe4be3392b796b112982aabeecbe109c9e3f0 dcfa97500d5a01dc0c8ccac8bfacfcf0790d2a4f36a274e46df6fcaed984 8028e059c67b1d99d3b6f0e9b794586a9cd11c84f20b76057624293f3336 d576d4080e1fb5446b84cc3af794810dc4fe50defeaf73f40356488cdecf 69d4b3d643ccb12187adeb44f5b3af59b6af672b6bb36bb64389a9657595 ee2fab0dc278079cd02a7b50495eb4e215956d2aba90cc61244933ab58b0 53f35ea3ebc1e570908adbe6a93d414c6c05c6d5308a8c915768a664be28 df71852325c4e1cb93ecf38c43724b98c2a0a482ba22b0198954b592e4c5 1606b8ce52794e507fe538089c472e608d14457b42bda71504d14370c9ff 7cda27f536c91c67ca989dbf84ff417de903cea643f847d71a4c7aa0accf 8fe8b9e3ca6219e21ab3b4d29996fb3b92348fe74ae5b8ce7ee68a9ac5b5 ce0d7200366c94aafa7fb40a4235019514edd1cc62fdea43428c6fecd2e2 3a1b3a603d0d5fdded22c97d37559950ab43afbc41b23b3356b53af435c1 0c846f6522da0e094d8dc89d02ed4c45b872f5e62cad394e8a80f657de06 3b189b2c28d61f97cd24800e297078b351e12e9e1cc4ba34e568bb4de2ec c51be1ed3b301ccde6339981550ee9d456b24eceacf62375cfa84e95b3bf 5b7c2e4acf1e23d4bd9c74d31f5ea4b3bc13a9872417a6156d9c576aced2 32261c1178f4ec4095c94ff8d0e09b123754f7752507ded1ba6f5b22eb05 db811cb3bcb6c2439a3f4d91284fa911c8156485087d171b4209ecd769db 18d4fcc2eaa89dc33e23281c3dbb48815e423167198ad533a1e35e4a9272 69875d18bf2e7daa69db8da68dc1237f6635e7525b1d3db2ecdf3acef16e 4e38c1d56e0b9020135c13f35391b3250a04bdb551617d712d3c106710f4 b18312d7428c4f9434613250f83d9fa35258b5e800add8459805bd38a9b9 507b7a2ba75753aefd60f7430349e3ec5ae272ee53a95f3e158018223655 1260b7b836e2d9a0b509e4d3db6229113839138fdbb5812a8ab40deffef9 a8ab939211de8e3c682c962fbe4acdc2fb6f05699ef6201144f8a72ac634 65885511e97e76941324e7e83fce4842ca458f359c3ddd1c6754e9f454d2 337090ff29d6b5177cc8c9de2d29699c9c487ccd919eb86a49ef67193612 5bd1213f1cc8fc7d8a44a3beed8343ea6c6d8f844fb68b2695d73f8c8baf b1aa378b96a38194dfff6f193b97f0128bd76d4361933fcb23dd44e05bdc 65ff7313f1dae64351081b57847eb7a9c5413b77367dd32d697ecce228fe e48093984663041385635a04f8a96746daebb83ecc2846d242db9db551dc 7e45034bb9107c4a524e5b89ac8739a8b6d4285da7020a1e29e995bf03a0 ee3a141c220a5ac361faa7a5680663eef9f558aead25146cd6f8fecf3759 0f2e0d4f9e8873c68a6451b9173e5614499cf1fdf005df80cbb5c6e43ac1 ceb1a02a21b9fc6b18afb787d4b686680de698cf26b2a7540bf01aed4217 2f4f29103848b7f75e0f3bd9be6e7c8bdcaf8d23db46e3e949a76bb06f15 581af1fcb63bb068217924d4714e5e275868cc6e66e3608da6d75721f78b 75146998795a7583d4431ed95bf34e94baa68d7a9b9c15123a3a39d2878a ce82d111bcc393185102453db60da0b0b7839085e7b2262759c2a4934012 27c1185a658cd6d77330d2c4586da8497c0160135562300a57f8b09ab41b b04d8f29be8b545953a30d0726719fc6af8123f33a5df95e5aecfe0812e7 e5a67f5a776b9539d22ad91fe0cd7771a5efeb73b9ceab98a5e522ff62ae 8498442703675af21c452e008f667a88466211695f0e3da61ae13be6b341 0798455106c1261f6f48f1f1091fe73756057c4af5d4eeed8fe09cc08e32 7ed080cf4df21123a6248ea53ad99d14fa1e7fc01dcb454303e5b0e36a22 74681d8a38867754412dc57238cbc0ac2eca8f8fbe2ffe8a0b0383f3eeaf d37b03a73047d771c98a3b03abc4a44f895e5d43c258e56d2ca7a698d36b 26c9f6fd804c2b14d975a7c684abdcb39167f105b92d35a99350563e6913 eace5c6c41d3eb3f4ece26062c55c134772d76efca24d9faaae133ea8426 e8685aea8432962d9ebc7ba3e64cf91985c506edb7946c93bd396b3ff01f 77959d402b459de20f21c04d14662e0c3118a62932fc0278d22e6a1ec6f6 79a8f66897f1bdb26772b40b456d1a15cb17636870ce7e4e0fdefb805454 d0aca65e0025d6c8fb7a4837783b1366c660a74375436c1df97427716782 28d8cc1e2f43508571813d093423e93111909a531c313c15fe60c1853557 9c049512cfd3076ee8fabff2a9ee61ed8d218bb5bc28d8e3047aece349bc 675dc7cd3f6cb44aa242813ec40f4ab1601c9185d61a315436145e6fba21 1e7b4e8678cb3b69d7b39f47888fe1ff0d79b7b016759a7513ce270f4124 e85a6c7372bf86402407095ec29337cd10b2ec58ad10442cfe106eb5a836 e4cea4a5b29a82e7fae0cdb45477adac520843740e76e84d8208bbbbb79d ea6d4052ac73ddc775c80efd0638b2aeed0b3cf1173ad9a22c096f566b7b a8c694b6a05530f1bceee83155349218c5d18a1a7dbb9d26e23bed7f84c7 3ebbf7e2de002eb469256d6b0a65a5d1790e6ab3deda4d0c676f949471a3 c470e27680d2be088a4d82d26f0107240a3d6b3cd03e70200bbbf52bf90a ba31ce25223e4a562ebfb6d4f79aa32c1398522c574152141d2fe6bf06f6 a45e36fa710891b4022f050efe4099070c966156dea6e2f7aa71c4718cc6 064fe2f912cc73b50cff0a2f99997ab99cf8b51bbd2df7731d3ae87a313e 0e499f2c894ff53a980f4f948b9d841257ab311ca3fa8c673fe202a67872 80ea0dee48fee64e28d09e17522b9d2b345d5e6d92ff55136a9dabfc334a bbd4018d96c5d4829f0a2b9ad25d4d27998158cf582b126fdf5244e89236 2ea6b3c040d1daed8f10dd7acc061f754316f33e4a336fb4daff93d4b1ce acf8663ba135f6b458caade6a4f129fc9ffd7e8a29aee6c7a9263975b998 4bc70cbcf5c78489baa7ae7aa7160bbd986b6d95b62397182f378feb39ee 217541a4c1efa081caa239b1d1cecb9b05ca60200bfcad75c5c86a23cf77 acee2e761dac8bc6b7c8f1b14c608bf87c72202a400a83da8e3d79ae9495 a726560420435d275df9983ffe413c9ec9532805e534d8153bf79921c20a bde6a5d9ae887b20265a62db26f8a04b5a8603aa876e5f811346c8079d57 b30e0966c532a82292aaa531d6e0923b189ffeab433b059e080fe9d1a7ec 8b650253421b8ce33b54f37c8d2ec6ba40cbb40e7d8553b5b715e7c5a58a b8ef6a266e4e3561f1182998079f7c8e09908c5af009a61265a61823d433 cae28f14ab0a5497c707ddfe8127e3c1f0d1f327f14bc65ef33496d31de2 a3e44f460cece56c3bce4d40299a5bf746256c51f9a9acd6a38c69bd4bd3 26dc208bdcb5802e079e9ec01bef0d5a87d92649edb58d18c214a230997e e60b09093d7d63a74c544e652f5b9e8ed04dc8bd01f3db7d892b5b931b6c 7fcc38809bce30628b594ec941cacfde6453e8e4b53ce130b06a23a0f62a a55c5e41d9c60201eb4e91d5dd3855a899be673e1d7c76577e9b9646d87e a1db1e239f940d75a0798bf98475bb8e321afe5d2871c5221f5d4fecdd2e 0b5bddcf86c9bb65b739717eae08a45aefff827c3c50b0889bd238ee94ad a074fec8c55eda891b2fc94a4072d76c0390cc61cecf2acadb773bb4a969 d35b8637fb1235ca418ff78bb878a2489ca2ca3c4c45c2d042b697efa871 5517203395500177b20b80e4f0e6292458f9cae919e56b20ae6c4dab4ac9 ce9bfb393ccf2e642419be7275e4f9ea2d9ebb2e45fc3861542809bcdb1e 2a9dde3c61a9064058bdb388c6aa425f5b8034c1d029c43c33127b74b7f2 7d451c41e5f26994e9af3cef447f1500ee22c95b12b7a3ad01eb89bfc0d6 0d407380323cb64075b00361097f952322370d3b7640975214a237f3cd5c 75896c2b83bfd1bf545d032a0df758ddea331fbef7ecea55d26b66032b4f 9095009b52f352f2cccea9b2fe710df1328ef2c3a253be2ce8e24d84b330 2670382b0c7f7ed0cd5aaf715ff7b4e66517464d5a4fe059d44ceb07e62f a7237341536ae0549b35ea7d76d063afd61cac284fdbceb592b58fbe9be9 871595c682ceb7e24a96e500d660aa733148d6a36b431c9d2fa37502e1f1 06627dc0a174d2d0fadab25753ede5bb7736f052e1d19211deb2625097e1 e5a8b467f6a0027a1b518a5b21dec475498e749e3eefcf691db4b60f07f7 d82776164708c11f33439cac3ba8cca07752bcb4d926f754655a3c8628b0 116c38ed1521cba0b64cb702aad8a0cd7e0e257db183a20a07323c9d2f42 d27adb3d02a33d08d0888f611af304ecb28f6feb0ff05731a8546bf1a086 6ce12b3a05c7d3fea59d00dffd5adaf0991edfc51e8edc484e23c7c75185 5fdf3a733e84f412410524ec71f81a8e0c9251dd4c6822a898353057a6da eb2e8ecb4ce32a334bca953b3677883eb5f0b150563d021bd5e38eb514ce 34c89a9c430a9867a479009c677de241e064686cca6c375eccf24fa15d60 987e7c04b6d3e388c78e162d7d139ae3f8bb36e1b5ab6416f356fef1be1f a788a4355ad5fa9045259e51598c70ae1c47e913da83a6bdc9804ba5ed31 7192e51816cb9367fa80fbe5b1d0423d0f693727640fedb6f848a108cb3d 9e4b8c5993b48087c1f4224dcb6a71bf6872ccbf80bdef33f52eca49e43f 675512af9faa3817deaa24b9b51708db5c9ea7653397f0497f621f1172e2 488419f18278828c48d2849734e5f9ddcc54b5c6132900d4e84a59a0277f 918ecd4c53fedc8dc19e0f6afa53816d767383a5f9f07e63bd8fcbfef53c 9059c0639c9bc1237a5b1556d6c129070a55c7eb58c32070a32ae293ff07 51233947be19f901104c2d3dad67fc1ed76e9f2e5d48a5bb2289be774c6c 56f713c3d3fd474ac997507efd2b5ec316d0ce9f1b7d0d51dc8352c1d452 c07136a803dc255dec3743cb9158c829d763f03f1d320354dcd8aa3cce6d c7d40ecb153455a43c1108ad50e13c36066662ad0ee9fb7a30936d30628b e38f714dbd97c4939053dcfa4bc54ad168c76a5b16d4f7182fb98d6d0829 94629db6f249e2895701588ec27d08283c94c3cda36acf26bfdd0e233fd7 01a34d83a5175fbce81f60b1e3aef854808bcbe20dec1da560fc480e0a5f 0295141b98ab36eb172b46b393d0a27fd32e6dbee63357d66298fd154ece 2f75b5166a515af48347a479a43d2f34f55cd8bc8cfd36d31e631c4911b9 1ccf90d002e8bf4bf467869b134bf523692fc56f6984665a813b3c57b7bc e5191595ea6918c255b6144b8c927af4cc8bf3c1a83b0675726ad125e8c1 8aa6511c1fa51f1df4b8104bee89ed4fccddefbd7da3463678c0580b503a fbf67f0ef009aae4e21b5046396694ebf1b05ff56a8e304b6133fbb33ae0 540ee84d3275f5a10fd7f10970e3606dc1904d2fb24c413724bff7aa2ba5 303b72948dfaa5736f82a9317d7553b44217b2789b0d497465f21ea786f0 392d38707d7618042c70868f7135d8fab14118a3ab923f48cb30d76bdaa8 4db961750c1e0d8d7548b08088b427d6c9fc295c0bcec108add288e971be f96e22a05d67503dc5144b6745a4cb4a08d0f2be13e812d501e475d5a834 f29dcf33411b19e1f4c1d9a2212e32b796d0d17423929fe21e93aae7d762 a26d946c309a769dc175869e984d6be5a301a87386c1c388d2488e3a8c50 146f7be3e1f1d756b18414e53c8e43f7ffbc2baa94bde22537733bcfdc58 28caa3f889ca0ff5cb58e8a82ef84f5530b3d2f4905265c977f752fe9ae7 2f9789d152855c16b77890fbd8a0f5051284bf43e0fee36fc08776ac0b0b e06d032ceeba56294ce656f5a3d86bbc07fd1bb1eaee09b22721a27ee2bb 1df831217bc77b1e075a4b172ed6b914eba986eb943eb37f94cd6da3d559 a0d0ede677196f9afbf673b4836de22b988d92b7b49ac10c28ed8e3791fd bf56cf3f2dae0bb49153c2c84e5be367b00e433e53b2f22515d039a5b7c9 9aa3631397525022b98aec93c513dc3f8842773591319fff7e2707b7adc0 cdd56b0dbf97734f4438362594a3816943a53a33fb998c177324c2beeedd 60406b15e3dc99203fa612643316cb420a5b7da8cddc4abb7285fd53738f 20d24b8d6324dff57ec534f9009a0fd9dbd4f41d6add9d5a90f5907231d6 4095276e96fdb8c59fad7539d45b97cfde733cbba5db4f08ab2b40e45db1 0142481151cc5984e8960c93bcaa8d86b8e66adf9afdfd7c4ff436b5e79d 41316468767cae648f0bd4eebd2c3a45c08ccf3f5864e1e2b38c2884a2d2 4c81bc8a21647e06acfcfc635ec98aa2f899902a485675f50473f35a76e8 77da7b4965769116c6a4a57f0a25f06b0ee67304936f6178cbb24c7ed0e0 33c4e2d917a9b4d50e66d282796189ce440727ed68de109658ce3373798e 59a60e46204e88e797cda882156e63a8f136508baf14c2429240a5ae71ef 3e2a886ad8c3196963bb07e12ef81b9716faea85caa2273382bd0e0473c7 380618c8e716f77a6edb733f82b90249ed79b0a0ea10f50109398595b58d 90fa39dc3c72fdfc645210107c7fc6bf96c37e7988eb1802bda3647d0f79 3a828c32f1a1a1f51a6fe62b2354c898a00cff761646c90efd5d9b8b4c89 87703754986a880d676d24b36a2ab5f41baf1dc4866bf9e7809755c09c80 0c89f58cff611223fb3fe6a8c5c5cbe7c669202ee5418cca93fd7f5b163c 159469b1590f4c6c3ad6a1a3576d91c8b19a45469f501b80a49fe6fdab3f 8c85f54534081faef7e39d8e0cfbb860065fbbc3f1f1ef5314f22e8c423d c7d2eb74917edf851880537751c28d0f965d22e75731fd47a714ca97a05f 2a2684815a6edfa790d88247727b2d5ff63894dc9e3d64a20b50c42a3893 ca727ece0909290713f86c0bbd0acc290bde72b14667721a220ed31173b0 75a8e8d5393e81ca3bd46a7efd42bb301b7c4eb9d3e5bd00b0d69b0a348d f5c26245b032c9e7360da5d66c7656c40bd5414449962e5083a4c8ae006d acdba0d1582120e1d36c0534cdac814fc608127c7d043c1353775b8c72fc d596b234c57b2c5f1bf497fac1fde6fa247f85ac8f53857eb9823aa4f4be 362a1c46dbc2df9a69af9e6fcda3d763fd03cbc7f9d626201cd6fe520f4b 9660a57a472e59f639aeb5cc88a3cf94af183ab6946462522f60d79593e3 e2cdcd50887662210b5d193dbf4571600f6f3a13b17dca207c51f64dc21a d7930a26261a664216f3c44906240a94e7541fb8f4c06ea34815f0e5d1b1 4ee1c7f582794affaaf8e81b437cba258aa142ecd93537932f20469cbc33 5c5339783086ccc6d15c37490b53a44b1eb32f465be1f5033d9eee963125 04dbd05a581dc7dc3f4e901dc11e9c7be367c19b3c10bba1a78be84ea575 48bc7a4ba70dbf7e4f64d1590c65b5a93c87171f25944dd0e1ebedd4db99 2891aad7b57f259720c64893fd400c1a43dab7a79674074e863c8fe92d6a 40b2af1d533feec9ae037e2d92ab43d07e8556fc004bde9efa7ddbe25c74 5cd540d5f456b8ec1538e1b7f4c589125745eaff962ad5addcfc0342b268 e030bc311afe26f716be2c96350023d3eb4ca2dccdb920c2cc5a8827ac4f 519793c1479e6a09b432049c0d1409a942390558ab3cd90a8c5352b11c55 c09e972504429fdd11f502cf57cd845d2793a95aa5c4da21fe201670aa34 2b43caf82c44a526c7b67896f0c976578ad766da10b83fe53e16fca6a50c 22cde6a2b93dd099bb7a2221f90010e4829ac664605936193b98b7d29937 7c365bce1cd6d85210737a1f1533c684ce3323547f82fe9e1a3ffe9c9707 d40c1b4c2bae773cdcb17228cda6e0bd087572581ccad3177aca05d69719 68a2ec227039e27d73c8c59016aa748f93819f3961eed0db5fd0e65421a3 87116d5f8f9237944ae1b52595611bdf71a5bef8d7dc626a178dc5390aaf 1cf3674bb2745ea108c732724a667966612e3a629d9a8955270ba4aa1b32 6cf0ee9a14964c6d22b853e39671b882054558e3eb72f01b40e883b7e587 15bacb576f9d3c9f754bb211a6818799347ac86d751a2615208a42267f0c 8a639c8c573090621cbcc8b187c968ef309f3b408b0ae25539d6842c5625 e6f8bea07ee003eaf0077b82531c59452d7e5f7db1e1fd1b1bf12fb53477 b4512e1fece39b705baa68bc0b84b3eea4dc0c0aeb9d404e71ccadf0275a bd4bd2b32b5f493d4f939608810248f5b17b5dcc385be7677c4202b1a71e f2e7d6dc4cd8efe1b2fbea7201bc32d52603d939a72e5a7f78126f25372c ebce940f31a76f8b8afd22f9d8bc0bf0a4dd2cb038b80118105a2b433fd5 cde91893d2f013c354218c1b64640dac359ae147d7fe04602495d30a258d e1fa1a3200e34f2b0dc434730f65edaff073ae36fadeede771cd786df948 06e8d5ebe55e09020a679dd0f5e15561bf6f61a96b1a11f64dbce588a7ba adcc2c0760bdf4924ecf057cb33479e56e5789627be09cd56d674e12d139 94825182ba4fb722665c3b60bacdafa9c80ac9d793153e997b5060bfd5f7 3d36c03bc24dd38d2dce1bfd79b62ad613ba548ebcf3ab06c33f42d76722 f6eb0568009ba3a55a4f9424f3af64a6f07f6302de9c4bed183e6df68a1d fa8c5955ee381be55b2363fcdce5cb99dae64fa57d40315c2a7fc3cd2332 5515cdc228597672cf0f55c677d602773964d206b8266331cc4706c98203 30efd8f425b11e24d8e50afa4b5028811deaef24ee3d05012e941a3d4bc4 965c9ba7bb54fd933eaeb65074702f794a79181b083203d1bcc432e6db40 5e2709c4fcb684f78e2d5567bc079f73e8b9c76c3a3c27efb24fa1e28f10 fc0097e1a79d074c30fb88d4e0726d10d0e4884a657014f5e8f2e77580ac b441bdf5cd89d3c3b88f9d772f6e50980a7e6f628194adf691aa315499e0 c719150aee03e83a8a39a6d6861dd034572733b159232e46ada83fc75e9f 15dbc0f5d377a7f3d53c692c833ff97e8bdf1ccabab1dd45a819d6985850 804e99b4f36dd699e827ed0cb8af2c6b86e540cec217b4c3f1f191d96d05 8eb2f21c5e8732d8f26d0dd4b5b4a2ae67c15e16246ee6b005bfab85d04f e639a850cba472832327ba31ac17937fb73a694c8f8dc44fba56d136f5b3 4c3b2a69a0813f4a8eb065464df708dd37ee2be125c5186d5c8d8c95e3e9 2bd488000a466c6cba01c8f87db63bebe05de5e8e4d079ffaf451a47edd7 4682cec5befd9345872f8a771771bb22aef4d74c0b1beb352894d883a9ca 9fb74a2dbcc2adb4f585e08faff0800bf52ade07a0dc04851372c2879129 c964133fcf354e2eab9bab39ebf668607f499e1c5196fefff8133aa53c39 6a8ac1c2554090834fc7078ff33a91fe07a5297001367357ffe2bf0f9128 6aa22ebd3fac48e7d327835a34cb8edda2a0b41a7c16c46cbfa1b9d0aab5 2085d21baff4eed4c425060c3670c07ddd107008b44381b029285a06ebea 61bb810dfd3170a7e8e805269f89336ba0e8f92d5a62a9100bb85b1e8954 4a7f43df55a10333a9ec16f13744890043e176ae4b562a4b56a90ffa3b8f 81fbf1fae04d7d544db7f07e9b5348958a41d4d983c9bdd4b3c3929d117b 04c1dab9c6a50c7b0d4f9985bf764c5263380cbfdb6aa7b19fcebafc05b4 5a68f97040ec71aef1d90662d00c6623e6aebe59651f1666891732b41259 5efae7bfe2fbe67ea2027139fb3ba84bad81dafef671a55eef0302bbd0af cca2029b48ec1f2eef20424a273598c0f11d812e073e25578f76c569be80 ce5215a94abc07cec724b06d27ca0a20e97865db44d2f2384eadaa19fd22 1a7ff055892408154f58f91e60bb650a48bfcf1be6815861594c5b9bc38b 42d468e8bb386e8571c5d674e3164596915f0f2ffd090d51ddfb0088f624 785fba60489a0ab0af19ed917c49c7d4b5b4b295db7803b846f0f35084fa d82754fe7c948eba35f924ef1093fbc2b8b12b04f1f6ca2074aa79691720 acb1cb998d764340ce9579528399e86bd0fb946d27d0eb2ce3969b867d35 a466f7a9f30478b19c139d33e79d21c32c0b847524fc185c68f572863fff 97cc4508cbdc4508e522360ebaf87fe89884fbb2af333eda3a7c2d06f3df 067e2eeba5131fa3863dd4f729642dbd6bc4a4af63f74e96bec554b7ebe2 73df3075b43a76ee47d268bd28d6a2fe2a415325640d85a16ffd846c036c f45bb666f0d75b868f913583b49f4a27dc8e2d5b33907107dec0a275ffe3 cf9b264de1ad3c3fa14abc332f6a3c0e07db1d4f49d4c47d40fb8f97ff12 5beda8fb27fb86eaaed288444f949638d648fe052eb7dad91c7dac7102ca 5218beefd51455661eb13a2188b1d9701a08b283c2883a3dd10da84de868 efe97ba50675dc6d1438a7a17755f80776656d38d41a97f728bcf5d1539e 856ba9e3b765e616f27ca583687572fc4e9868413ab14a09756228c56bf3 ca96b1c6f63a954a4f7eff0caef1372a038ae4490313bfc7599fdcb57e7e 685c733ef7d88e61a29d9d5d726f4b9e6e3fe618987011271094c5d56466 9d54c5e8e8a6378fcd6653e75348fa580a72da0bb5e25c00a85f47bdbc64 e8ea6f560d334ffb8edd26d1a58f02b6323bb522f30ff75c8292e7919b00 89ed83aebebaaf4db2ceec84107a9e576ce1222059826cedc3a125bb04da 8b604a25295ca2b7b4f1ca13218790e1c37d2f548299b0622d468e8213d2 0e3e0d0a5a8f9a1540adfe387e654f802f8390f45b5143eb196df50f0404 57f88e2cbeaeaafa525302d02c24af125a58ca990cbeed25e70240681b18 953a48aff4f44196616ae551d835ce475ea4632c01902c9bef99c1037ebf eb8c88ef511952d42bdb1ee2013b156035cbd94c22e22919981ba2071b0f aaa66cf4369f55cdb65f438ce2b17ef5f7e322a8b065486acc0e3e6388ae de9fcd8509790b2e6973c6654b576723d6d0b5d786a8d59bed3046492be9 89efc85dc2db983728643c2501ab8a805276ba013e2d19ba76de162ea55f a3a1cd57495c6ed0bba4e9f84927d940298ea6dda4ceba5c96128e5c9dba 6bf1a730d6bda24d8aeb8ff74685e457dd0eef3d7d3ca13a22d5e99cf15e 6908c3a6f66737ba7e7dcb20c7a3754f1eede4f4c591cb804c4ec3932c08 dca583bf795e4f91994b6bcdb3c667501eb32b29de4ae9db85e45ab9ca73 f38a157698caed62c481ad3c5f5a084d3e3deccc8ce120a1d0effaa1d2fb fa1464af7a3693cfe6f78b383c9f8c15f792804c8c32af13bf1adb1f2b6f 98b72e6dbcf4e15a2e43453ebe65d309afe8650fb230cf43de6123882399 6f441ebf0d6f45c6289029265d18ccd89dca4b18c645456b7c4a0f7922c3 8ca2a83097a1643062354079192fc58e2b74bdd2060147344b39603c94a9 02344dd59a353b83604e7a164b6a51fb1186b125de72393563811c3fa95e a0d5465b8577b877a92aadfeb9fdfc1196558cef52a1e6901b79cf7aed7c c1a9d8a1e7a51e85f4a603ecc5ebf790cd39eca9c22ee1a5f387632f9a10 00e25edaef09af62fa01076326ea1a4d1ea77a9fb87cc2da1d98ba5db99b 7c200c13114748ab758b318357aa58ec1f13405d1c63a7fb48bf00b79d66 39c8c7756614a932c593f05388b0ee7becff998213f4ee69e85169651d86 a50354779a2dc04406179b56d1ce36ce55612d35162d9dedf3287eecf170 2d5d771a97c08a20d44ac9d3bccfbec15a9fbc949f82b4df50d9756de711 9bddb590160bb2b33055dcb5fd5ded4e0af420f08e91b4100087838f26a3 ca28f36c072fbfc5159a04ae11e2b5be5cadfe3637709a09b2350cb1c56b b44aa5af8b50802da9fe9c7843f83347ce1b24881ca2eefb11bcc219b42d 8f6a3acc9ecf7d1042703ee105f0efd56598f4761f1ab54161cc5219faad fd41bad4d4da009153b3898e737ad91e8519f267c8ffcf92509cc81f490a 60600b3fa3e8ba66a32f78b932937ebf08a5a37bd23621b9a30031c6c5f3 e7c06ffe8f64ad89a36dfb8634e3b9229a62ef76d442aef4046351d8abc3 a4d79a440f8828f7c51f9123a64e6468a94941a466a51d5e7c93e84482c4 1cb74ebb80e9f42edc2ceb5ffe9447abf3386b66359f0bb3e86a20d3908b e3ae9fca3fbc56b303a33525d43c508c04319b8baf3b8503f1e3b8c24315 69eb7d217d6b923fd9cdd8095bb0093d9dfcffb1baba524e53895c24a08c ce1f5e60dc189fdda5942ef5c2d04fa0e75a402a26f8f5a15910e1faaba1 faa38811eb62e7fb1c1c48fb6c7ca30c2f603da79ed88f845dbead9533c0 22113cce3ac33dd3c41457266812930eb40ccb7f9dad9159ad6d7a55e929 3123d85534190fe08495062a88f1c1cee9c238508007783289351cc87e77 29eddfd33475fbc178b4a9a4ce957008f9f01a45e9a069dbad5228996324 960097653b572c834eea121d606407b014c3c1a7a3485dda0b84b47b56c3 9c72dd0b3713c30fbf5e211c12aaf52b5516ea9e34a9ea03a66992ad47db 0593cdf1d6136a2e0804355b5fa073bd6e9b892b774fa9ea9850dc13ed61 fe666d412989276a94fbdd84c3e29ce9f54103318af4c11d228806615f84 c6eb2e65cbdf1efb70b82bccb9f775b5adf3aba12bdc1eeb705a6d743c54 9ad3d9be6f02718d4c144e166ca93dd9f5cc3fd504b715804005ad670bf8 3cdcd6e79b8d196c80131e5c17ce8b868bd737db386c069f32cd8aa97f28 6cd74c97f1cda2902790b46148b4a98dbc861ade0d419c3418c68082cc87 7b0f34a4521a9aecb7b9d7ab8ccf9f769969d1e75c028c9854348e76698b 1f0c0bd6b40b61860508756f353d5dc17034aede0678f2bc2305331b6ee9 8013c34b40bf43e9a8108bce55eefb416bb77a64a5086e7fe69bf623344e 8ada4157793f04c5c299407b55ae0b53cc21cf146d88a745c672ba9bcb99 fbfa0d6433ea63ccabe9d4d19da011ac8b4b77b64db646951b9752ed9734 e4bf6bd5f5c67bde0d385104c7c0bcd8010691f34b16a77408edcba2caee a7e1f064b5ce191e3c349504b853a17ab887cb23e2fb54a62cc7a7975df9 6ade63fceecbbb94688bf997a9e778531845749e947d3521057289a8145a fcb46c32e2f26a7efba9e5544a1d502be76b389fd73bdc9ce8fdb003db4e 114fa50c7b09f7b30864d0fa8f1d351e450c40b1ba1de477c2bfc9de1872 15d155622d2829b3fc519b08f74119a15a11eadd18eab59e4592ecfea2d7 e557097274473b1a1b4bb1fa641dd518e6d99ca4d2e15f72a66feab3e629 6e76c0a5a709f596810e90f0dd77461afe40ab82c8b96a15364f8931571d 7351752faf91294575632184bd12240dbcdcf86faa5dcb397a4fcbb2092c caf4e2bd1b1cc7b19385a6904aafb352f8f1c79d7884c752c4379e9a64b8 33b2036e3b7a9d82c4dfb5acad2cc5c8f72626deb4e3dd93fdd160b247f4 7b035115a13b444db00112da81bb673183f95df4bcd407702eaf438df4ea 74d0b3a068c469182c5bcfb92afaefb977e25c24d00ee4c57bebca49bc24 1deb799d7ed8c26779fe1d3028c22ba6dbb73ba63401043ffba18a12abed 050d2e9bc16c83b27652486502584788b5ddb10ed7110b71523c3406f931 792dcf02dc335c68c01100bcd5f67988e9d1101c9b7f0254b6a5fcabaee4 903c591a8406e24a3dd46ba8448a665ab096aec6465f89f9ebddb5618ddb 40232e434348b77acd652654be0e2426c521338963658e0824e48f274f1b 10afa5cb8a50651ccb4a7b5d1797428117f292f00f8f57fcdc3905a7cdd6 4ab1a0e1d4f54808f659c840486da4fdaebfad4a82bafd9d1643fbc79e4e f9ce9b89f2e881c3c3f862d36119d011c285f0daf6f1f2dbc781add20e58 38fadd1a3187893a21af26a843670e55cbee9c767eeac4676c2f9b3d062e 40d784e5dd5e008efe62f768d2d973b483ed0054989d5d3e0403b0189c4f 17ca9460a152412128abeeabe14cce5815d14dc5ff9c8cfdd9336cc8d458 2f8f5b30705604a29c05c3039f7501ddfff5e5d03fa58cbf3d78f5e9ce0d 6d7b151fe164830b00749045136b06419651d9ef9ee02f4074b926e17092 439c8235ded6eea3fc22fff98eb1f42fde8f373cf23bb270ae1c2e3c9f33 d8fa824f73e37c27ef8de2f58fa64da73279edb7f83c279800697de7bbc0 f0f1e7c9ece2d7fc278f4d045ce42fdb61855a535e0a4a4a5afaecc149d1 e0c7950b674064bd5678256adb31cbabf2335d2da337aeb7b81aad82cd4d bb15f0711ea90caa3f9c65cd2d3b0a85aaa863fb8174ad0a0e4238b330c9 542f06f2db876e7a5bb319950866dd325a298076b249a15fb9238fce14a5 672f645154ac5c5289de85426d6f42f2bed5a9795cab1ed79c0db5d98579 f330e0588b0163f8311cc9598681e8df67a4d1ef452d60557297a7dde4cb 63bc6535549bdfff745e20213c84e7dee5cd18e4d7e22444f9d5811f0f4a 5eff99a91c1e8b25144e1d677fa4a43eca110fa78723a85baa20efdefec1 207b26f30bda21ab8c8ad72cacafae8140bf965b5ec6f46f490de3ffe31e 8dd5de4b2af62dfc6606fedef1f28de9cd181cc3a83b86554ed305ee3c8d 0037e94a2a56da3c89ca929a6deb08787107008294f6492088d7a392bf69 452afd42c258e0fa4c38abc8fac2b40d6899c2543d59e1bf6801c5a62cd3 09ead28a3862bfec548769f01f93a1a4d593709210791d932301144b0ba2 c78af76b86f87a6167a1c092d786fc3596e98a13ecdeb94bec96107e64f6 dd918a6df93d5279eaea29fd5bb8ca247cb1a1d8858ba9847f3490089b40 17b76645e44cdbc69f42e8eb7c06cfcae9e82a8149aac55ff7b875a0c045 f8cc7437b472e5251294db48fa74d89277b7409b1d869eb2e67b2d06a159 e1ceece2dbfe18fc88b17e58b774511524ddb4023b387f0eb3c20ae66091 2eac3c26628ba06527971923aed2f9e68c3f7e78433a737d6530f228ad4d c6486cf0a9493cddc1ef3645efc46fc95087dfba9d5b35c6999efa9bbbcf 51c9cd0e580314205ce551e91f7d1099deb302ad802b3bd18f1137b2ec0b 7e5b242f50dba44fff19451793039a8274e02ff93d1805c334327da168c9 c3323f70ec328e18dfc32102d033ad04799eb9f1bef156226dd1eca8b2c1 3f208a71c08e2e38bf16f624af253ef02e802d62c1374bfbd2b0e59de5b7 4548191587e2681cac5da1aa66996f55585dff103e8b7fab85791db1e32a bc6efe100a8389bf9ed3418faab9fc7bd2fd38a5a08c3b4b805041d8dbe7 e829b584c7a946414352b3d22ae407b543bee47e176acfe5b260fbf6aadd 4b7dda455cae5212a272fea829fb31edb8b9b06bbe95641dd83795a26514 fc17d47978cefea5f31a26178d8c1705af43c855595cc82261b8078e62f1 79b94d8639d523bf091d83a9ec668b0b0820a72d1f9e3ead314986e26aa8 396d696e1ad7439136c48922a64162513373f373051879b28f92f328fe40 4dc8a39bc0b8418bce0732ee7e76462f0b415aa74bc34141e3a3ea2b196a 8d7d80eb0bcf6ea73d0d402f3cafc77aedd289f9112a20c1455522bdc63a cc22243896f77d5db3589d32b027c1842b37feb5ddfda41bf0a7f27d2a27 fbacb29b9487307218ae214c57b1c426a5dc7f06cfe1a0923049d649f4f6 1dd0143275bdf418bcc7305ca566a1bc4545e9b21f853d09b6f4eee4b14d a3e40b7ce202f5282f679ebfcc5b88d2579130068456e1ddc30ef6f3a092 6d48b63daa4b029516b3c4e215182e40a6cbde98282e102166f0f715fee6 718417a92e5138ab803f2379a2573324c7f56858f440cd4001f8fa6b4c94 0ee7c332d82d0a154be5dddbddd7cff6883a02474f7eadd1aba4fadc2a2b b6582a7b4a478d71cce163cad57289dde7a010c89b9077ea94844cce98a9 9136334ebdf263b2d057fbf19d98210a8cf585a2415fc6bfe926ebc5d3b1 f6342dcc35beb2433b5d519f52827b0d885850c0ca39f283fc33a10f18c4 6c5bbc6d3554de5f493350de873a336920995d91e26a54fc8d9c9e1a793e 389ab93e22587fc83961814f8f37b277d55bc34ea630692a42fdc4950d1b 4120105cc6b86c662d69073100671caa6fe0333cfc116026da3705cdad0a 4a3de77f28051a777ebdd7786639433fbd16a2fc4905223bfa7ccfe6bd93 43988f69d1c79d2b18b724816db00e867e8cc7f3c27ceab881ea46b104f6 3398cc357142648ce1ae289b68ebfdddff49361ed36b8a968c03a1c1ed1e 7695c0d60d75167f805601346eced54db6e67a619643f34e730e93fba2da 33c5516c95e602d946892bb50a7c01c99cba63c2e08db1c29e35ee5a51b0 3a0176ae2cbfe0d3e4b00243b357a5aada869ada4ba34c411c22b135f402 8886da6b60cb1009891bf13c25f277a459ab7614e43cafcd4c1ac314295c 53f474c09d3810c66539e1ed794e809a56fe2a39bc9b23565375f7c499c1 03ce5b8d9421c86a4a7d093bb0a76150cfea745201375d59b67507c33eb1 1146777681b45b7121229a873eee47808e8ff1fff83fdb4a95d660b4a6a6 b907756374fa0b974da178060c512ee1ad978616e256359baa1c41174798 847aed5cdfe68aadf2a7254a4fa62cb0e712787a257576c52726242082c4 a1749617630b0d6972442bc2ea4f5546d831d4be05c7b143c96ce9665b39 2486e199f70c2a6ee45bab9a177e9052238acea1be45618ae31e8132750c 5666bc9f33fea631621f03f9373f19a7df5f376fd3cd6a4611b2658d418b 993616ced19695c15573dc6dd4afd028ffc19b297d2f9d6f475be1833444 54526d62b472db431352739bb0f95965c71f8f2e50c06f560c4cf8425fd0 a0d941029be63610381959c9fa7cf098446c0c2fdea8c4396e0c24712268 8e037a63070db07844c5dc4e3f42f2588688239294afe21c3e32d27b9eb2 020c908e406f1b34b8947d557e76c7b715270e7007b8cb39b4f6115adc1d af4610bc4c85e2eadc006940da7eb0efedbaaa142841b0286a6b7773fd67 00534901236cec5be4bd18e31112ea8b5f7510170ee423963cf10382d3e0 553e0be93f884abd013d32d3f9a462ce71035e4d89dc6c015aa27ebdf7eb 027efe0d2d23c6b7128a86f2185361e86cbb16cc3f1a2abef5d0cce1792a b4caf825c497c68730beec851cec659ae667d3d285ee07772bc570957ffe 3bab48008388819fb998880fe3b214b4121b76820de977bbaba1118532bd 6ca0b02cca179253f5f4605a66d92a9422eb8cc3e3e5b58bfa08b1824142 021b1813857131679f46a45f5cbcd3c4f8234fe62379fb3d2a3a7b39ef62 363f4e2523c1737237cff117a6ed7009ee0f6fd86ab9a866cfda330df13c f73d2667e74af618ce46993d87d6507fb4254ca237770f633925ba0fc1b8 c8b3bed331705e8217dd2833c7ff3cf501b1eac247bd9d5a24697ad6a4f1 bac5cde7873627db28e4fa423c38b832aeb634d683493134eed9d5409edc 39b42b978a5f0ea70b0a8e9d6cea4616f59ed46e952c14c3546cbe4cbe11 76dadd51e731116cb5f447a77917be1e9218f923d74a50689025dc5a73a8 3f13543b631a6453e68899d754b43291e348ef512572d7c55fe20265b930 47df1a16a8717b20da9669cbbf9b951245be839289ab33cc4b5640edd792 3d13d463dafc16fe39da0cb40dbf02edb5b048fa6ce51446a84ad6978540 8df04f04c9b77605849aa643801daf5156929bb93449fc551a851fa52692 5354ed70d91519d0098206a02c1aef21ceef83a21be83c7c992d814a39ef bdb52283e6025a2467e853a89e0f4e6bb33073f6e9ee9c46e931d3cb9fe0 83d03f502e7dbf208c2ebedef07406b202868c5f276f9f4457990241b227 b916329c90b8523532c4b7b9df6d2889d9c4cae6183fc49963fbc01b1456 be30b14460c614141752f678a191c4fa878ee74ec0f402a359dba6f50f4f d191df5cb221f9d816a7123ca73dbc8adedcdbe953496edcb07f189d0bbb 159a7f4ca7ea4aaef68352a541ad4321f233c092ca5bb0419ca15583aed9 fdf4620a1f1f81e9045c182318bbd81f89ddb81eec65ade3bc2e3aee3847 b7bb08da3877ef80096d6c50946b0104822c50734c92e005fc7dbfcc7796 9aad077578395a9933c17f64a9bfae10d6f45b5c4146be4f88538b8bbe96 07848defe0bd50c7986b4b66c540d845377e45feeb1f514cdfbcab71903f 6874b7759e150ddc8b91d50913628c5c89479548766b85ef8d0de288522c 5ba7a5a7d8d6583a4cab3e15e941d15c9a307ad7e1a88a4a76df36743ce5 67fa4fc4993303afdf3d862b89463dc7a5bc3d61c3e7ba304ff35753c2a2 72c147db429d3b1245e003e3a9b740025c32d291d9934450cb4b9feb7fde 46b4a281aabf04ea6c4454434f6e0314b23001c578c0b46d7d725d6f216f 8de1e0f10d69140fb3bed2b94356febecb58a961ce82d96713dccc64a768 5e8843f60d205f8e428a21fb7d29fa3bfe06b9957efce1f70ac43bb1d475 1ffec213d55c4b4c43ea46c67842fc69b6c7970750df5a48de6a6eb5340b 7ca95d31907cae241116afd0833a59316e8fe1cf562c9d5475afdd461aba 1970f8ccecb1e1bae2a864e1b4df8b61fded89875804ed4e5bb3f1099c49 035ef35a360222b9973386cf98169e7feda4c968358d01974b5e2b99f28e 0dbc14883a5a75a1bdb666b222f4656120f8e2f49b3e96617c49982bb651 f8de532781fa7f55a0e6039121141295427f5de8048f1761c3801b538733 d429e2dc091434ebd374291445225a51200edb5a3b24bb60287a0155667a f275506a1befa0e34658465cf3bbb1bd3c477b2fb11470dac9c5dcce9060 b58e240be1e941cf81ebb70210776c8bea4acd0a64f1841e2683abb64b78 dc3b429e97267f61667eee4e45460f3c05a07d4bdf0091fb65cae08e9b04 6c3f714ce886a3d69fc1a18297345f8fb8a0c2af515c4a93cbd08359cc38 6a5eb1355fe10b6aaf0b342151de1dd8d5ab8ca66d94e397344cb77e39d5 5281c1a19f20151909f838714077cf9412899ea817099bc03f3ef9956477 fa2efc2ebf17c3764b571fd8c18c81dee545e6419ed4d75882ee7a324eb2 167bae3256ed45b225eb55d8ef54ac5c2644a637e92b91484d8d857f6668 158635b72955d4fac3a95937794229dbb55c24f22bf75abc61bb0fcf1eef 134c861ea13b0f33bc11f350d09c84074cf3ab830c62a3c55a019fa351ef 7cb8e41f31f4331f5a97d53fca4982e25ab3bcaca49dab9c2a3304524a28 e2b910e0b8922e345f5ae996a7edf7f980bb39733323e244fe98c68a8bf2 6a9d7aa9e815a5c33c3e25ab477f3d1591bad5f5602c977ef533c7064934 fb530bac7fbdbba2f0306b3836fd7e140ef557ebdeef1e511575094b864b 335ebefe535a1c3503d61abb8529eefa135fe7332b5d305d72f81db4a256 0ae176613abd3d76ce7911315c7ffcd072f236738b39fa0a6a6ad8513064 2bf95be1df2fec6b9242364e87b626d4f2567755e105a7f04ed5e42ee4bb e2816bbdb3b96975f2bebb5edeb1c44ba9ab4232a88dabca926eba71129d 66b0baa029e34f251b8c2ea84ad82bd3666aaa059ed74cc2bced4bcf01ee bdb5bb97a40997e842a136633bf45d83eca620079eeb6514daa358998ae2 882cab98cf0f9ebc5bc4a907c6b876fca28c9838bec60ce19375f836a12c 1a718262a25243c3d849083241f2efc11f7dfdf40c80e4514a0c8b522b4e 036e956e2bff765b710efb8f77ce07ee2ca37b25f3d348b404efac944915 e52806c2f532c547ef65e96b09292e00e58c83c6d1d6a553445138e741f5 fa17638ce7115827e3ca03f04ac215182c40f050f56411d44c9da26c4e45 8603c325f6b2beb75415a1333b3f66288e1b6566a97c59a1eb319cb0a534 89d486969c499aa470030b0854d6e51f99cca64984acba9490bf9d00b51b 6414dcef8f706e72bced6d94a58e1c5d944e99d2fdc58f97a79752553555 d8cb04f9c79c77d90a93e20720006ec46160de1f11ed731acbed6478edfb 5dbf92270ad1f6b3d4a1b9bf3bb24d40e7cc868abb2ce5b2c14530a8f833 808ee0054b16b05a4c93f3a8ec9f1b4150f98efdb12ea7dae363c09f5842 3835d0768b54b44651f8af1561b526049d18d59e507c7edf179ae4e4da53 5522cd9b1cf0d90002a3785c45dcc174651b6e1fbd6f5fa11adb06aadc56 945d411176ad987b30a0f53735abf646c30ae997a0c34d0ff57a3e4465db 544595d1ea9529016c8565ce3255ef0dca24933d05ff5e366aafae52ddc0 fecbcb183d43118ed30d3d9070366bc65ecd7bfb82739ddee9d99119d840 dc16ba11e0dda5d78e77010ed83812d5919888568de41fcfbf81ca19014a cc0d100fdc3ea560b52b55c4211c5cad6418d269021d4efc904250045056 81e2a513e7fd63b92c2caa02de4f027a6e6cddcc798583ca0e9c07c77a04 9320ffcc4298d6f6d7dd59853fe5e70e07bb0535d4f3941ed4e74d90a0c0 78fca505de73b3a995dacca23ade0215df294dc45c6ee4ace0881c1ba385 7db57f34c18cb75637bf10ff6a3039d9c81180918c7c50ac059316cffb61 04e0bc84935ab3c5bc476a1922a398990b6428a7211cc2907e9dfdec6bf8 b355f63e00ae819d171cfa751b2d842bde61c290c258b9bbd701de7c5646 371c1d9b10c52b5eda15992e8c115f926bb83a81e70c52e6631c3c693222 505eb64121fb0e7cd2a12778c6a65efc9adff0ac997dbe3366206684d3dc 69317a7c1f77e2cdd368d5e35a47dc524884f9f38b8ce5a09a5c14827298 632031764337aad0a5df4c576eaa12fa00ea26c7920515c9bde2e6c227d7 0550be68cd6409aa06d446b5f91354fb4f9d33d39042ac5a2fc063ca7dc4 4b37dd6899a407680c4477cea7fc1c7223e0cfbcdc3dc2a075b828735493 7704add4871c3f86c221e5b2c9e94c4782d144c04757a0f3235b13def227 b3bfe01449e25430fa2ba681637d4c413c6f956f2fff84ffafc67314e6d3 52002b0e52c2e55e7c507ff84c02ed5bcce01bf2827cdf9a05e35e7db444 9c306b0dd664a3e73351ff927fae024792559647283cd529e9eddd629df9 3670008eaab5dfb2bcb45157d92804b87925739b770949dead0d97667726 6b15ed0b604e1f4579856e98e4a1646f74bfd252e65473b47110e8489d16 2f91af1b1b657b87070c5c129b08037b49c9e06137674fe82838679a1e08 5075e4426b59dadaae098671f3bf63aea2df5eb31719cde8e1d30a65f9fb a72b560afe9b85b123a8cf4297b4415ba56eb64de8d73fa02c8beb75a00b 72cd610f6b6ea340db20a3f675947b86a54f95f6155c80dd1665f683fb8e 6bad559ee4d6fcabfbf4d1d15f0a5cc745d9e39c70ad4a3bfc282e5869ab 991894455cbc6e06f67fbed36286880eab0e6ee38157add5bd0069184e61 b3ffa752f1e3b8c660e02cf5012aef9d34f4d677bde57e32cd9c7668e5b9 f9f9ed65ac2d60347af8f17d99f38c5db57de6557a3caee230fb27913c3d b268d4f02974a94c23856a2818e83602f7eae4bad87c5967656d70eeaad5 18d07d6c38a7e833e61a004a263f48263c273980853063a7f81aa5be5716 a26029ea9d9e34bf1fe74fcbf31da1b8ae69cda5163c389c04be102175c1 d68d9f022f8430bc44d34e32477a8ca8c0d15a3654a9fe17289b0b15c33c 318f41e5fd245c165d3c527c020443bf73dc45f062d08d7dd30929bd2158 49df6f7b640861e5fbc8b80ded33f7b7eaa4a68aebdb1927aa7afc616441 4f82628c928618ff9abbfa527f7c900a5dd4a20b78d6969d8161bb1b9c42 088b274ead5549d363bf194c26c7c79b74fbcd9416d43deb5a3dc86e0584 24b7097c069d51c84a53de49aa8cda129a20b05a02ef13f5d9bc78f94069 3b595fbc253e4f8eba8fa68841cb8e76335f6106a9ab18fe0470669718d4 fbfa993dff6d4bd873fda44d564876f0817a9d5cf421457fb4470fcda351 fd81a54b49a45525603f5ba2b6875da53af69dd1d07b5fd8673fcd35e0b1 38428a95d245a593bc3f9919f0f98380e6a0f43ac6d0b425eabe7d6d7f9d bfd8db8b19e152f351433fe3b10426cc79df8eab1823364dae3f11c79789 27e92734e03abdac53f1c3e89ad8f9e8e1aa00c5bd0bdea212e776515ab6 db819d2ae2bb9a4b27a5fad885cea4c487359811708913c180e4d34c9a49 03fd965094b6443a7f369926d67c87cda63fe0cb4ae2338851b3a558102e fcfbf262f726594270ca9634512ec8a6f38739ec6e42bbee4613ea4b35c5 051954110b2365f7d9e2c027fdb98276fe2797cdc0060151498553fc59c7 5692e155e8f3bfacc8f198d98bf831c3e7ef6f7521b7a6a64da842d5779c d52c76a7fda227addcf1a12db87f82eb3a456130252365f442175c760d31 a30c442186b6393fce1a666c00de7cc1e4417f3111099366f293191ce257 eae4914684b37471ca961cb3de48a6533cda424ed735fd5b83a32ac061cf 3d6c68453ce638ffac698e9ab76fb67860e2b7309a9248f7fe10c14f17e8 ea670e44cc7ef2a8811762e9a63f2127c2ff532938cfec5298e778a352f9 c7df2f1794f6605cbe638d9afb296c7f520cafd355e394e3919a607f3a3a ada4c8930b6bf6ebaa0b91e838df534a870732035e953a4f154ec2e0dd71 37e50b0738cf97c02c88cbf72ecc54b1adeefabf97d03244b4b65676cb09 24c6410c117e747cf9ceeb2eb31b2780bff10e260fbb8a7d5b3b44caf9e7 5b6482c56bee2c68f9f8675e9e156bdcd99359a740a668fd3bd11ea9d4ef eb1b9c25e7202b33f5253de879a482ff77992cc877f078d1f070b541473f 8252e34fa9ce255251434dcec046b34e2fd3bd5040d08ef189adcc31441a 189510e18dce97bb3ceeba7f05aea701da1fd9ff84e16189bb91f93dea53 a6b00cc4e393cc7dc7feb805e5d3512d658d2f319b3918df7ded7e88a53a aae381e1280f655f07e197d697db2dd70d22a88d9f0902835694fc2a1031 8f34dc25a73e6452c84da16139d7291d8d0b9db863ed8caa8ec294eac2e3 87f16c8e38f0420fd79fb91613ac6a84bd327150e62e4914f71a3da19a38 98e624d2eab0d2e1d27e5861aebec440089b4bedfcb3ef89e4a5284e9ecd dd11f7c39b765bb9e13697e52619f0f7eb92406438aecc0ebfdac953fdfa b66839e7979e98ce161b53e27dda2a6d931ca94027c6c95fcab89c4066b0 09d3b0fab4ed567a616668f01e5b790a2886ec372cf78da1fc3419ce3330 ff5eaf8c78c2df9a022e731f7c30f599d7c5d3528056efde8757bd4072a8 973cccf81745559d0f919a5e9be372e5797889b4ca6aed600a845b050181 4066741ef783dbb1502f6abcab2a4132f97de8da8326be4950f168c1d59a 594c87691140325ccbec4e4e8d2acee62e3bd6d151b7ba6fbd9839606863 99544c538b310d0c7d20b6fb6e869e51317939c66cf76f348f6052b04ea1 f1a25c3f70b11da8a929881e6e043c6b0b82cd493c793e50ab17c1125953 5dd690be86152a3f0d3fbd31fac9a2eb3463ce4cea21404e90b3940e56a4 c97549841112934806bf2b63823420ea3cb59cfb698fac50f40e7f14c445 7777a6ee8ee4f12428651887d9d4f3379565e0ddb559e54f10134c252368 31737a88054c0a173bcd703518939f2d0272162bce41361526c1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Helvetica-Oblique.afm0100664000212600000240000007654107477306250017071 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Helvetica-Oblique FullName Helvetica Oblique FamilyName Helvetica Weight Regular ItalicAngle -12.0 IsFixedPitch false UnderlinePosition -151 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -178 -284 1108 953 CapHeight 729 XHeight 524 Descender -213 Ascender 729 StartCharMetrics 316 C 32 ; WX 278 ; N space ; B 213 0 213 0 ; C 33 ; WX 278 ; N exclam ; B 124 0 363 729 ; C 34 ; WX 355 ; N quotedbl ; B 177 464 455 709 ; C 35 ; WX 556 ; N numbersign ; B 54 -20 649 697 ; C 36 ; WX 556 ; N dollar ; B 69 -126 613 770 ; C 37 ; WX 889 ; N percent ; B 134 -20 895 709 ; C 38 ; WX 667 ; N ampersand ; B 83 -23 644 709 ; C 39 ; WX 222 ; N quoteright ; B 166 477 309 708 ; C 40 ; WX 333 ; N parenleft ; B 113 -213 446 729 ; C 41 ; WX 333 ; N parenright ; B -7 -213 325 729 ; C 42 ; WX 389 ; N asterisk ; B 169 438 471 729 ; C 43 ; WX 584 ; N plus ; B 92 -11 591 473 ; C 44 ; WX 278 ; N comma ; B 55 -150 214 103 ; C 45 ; WX 333 ; N hyphen ; B 97 240 351 312 ; C 46 ; WX 278 ; N period ; B 87 0 213 103 ; C 47 ; WX 278 ; N slash ; B -12 -20 434 729 ; C 48 ; WX 556 ; N zero ; B 98 -23 598 709 ; C 49 ; WX 556 ; N one ; B 208 0 498 709 ; C 50 ; WX 556 ; N two ; B 34 0 620 709 ; C 51 ; WX 556 ; N three ; B 71 -23 599 709 ; C 52 ; WX 556 ; N four ; B 63 0 573 709 ; C 53 ; WX 556 ; N five ; B 70 -23 629 709 ; C 54 ; WX 556 ; N six ; B 93 -23 611 709 ; C 55 ; WX 556 ; N seven ; B 137 0 671 709 ; C 56 ; WX 556 ; N eight ; B 74 -23 604 709 ; C 57 ; WX 556 ; N nine ; B 83 -23 599 709 ; C 58 ; WX 278 ; N colon ; B 110 0 326 524 ; C 59 ; WX 278 ; N semicolon ; B 78 -150 325 524 ; C 60 ; WX 584 ; N less ; B 87 -9 635 474 ; C 61 ; WX 584 ; N equal ; B 74 111 609 355 ; C 62 ; WX 584 ; N greater ; B 48 -9 596 474 ; C 63 ; WX 556 ; N question ; B 184 0 630 741 ; C 64 ; WX 1015 ; N at ; B 80 -142 1036 741 ; C 65 ; WX 667 ; N A ; B 17 0 653 729 ; C 66 ; WX 667 ; N B ; B 79 0 711 729 ; C 67 ; WX 722 ; N C ; B 112 -23 770 741 ; C 68 ; WX 722 ; N D ; B 89 0 759 729 ; C 69 ; WX 667 ; N E ; B 90 0 751 729 ; C 70 ; WX 611 ; N F ; B 90 0 734 729 ; C 71 ; WX 778 ; N G ; B 109 -23 809 741 ; C 72 ; WX 722 ; N H ; B 83 0 799 729 ; C 73 ; WX 278 ; N I ; B 100 0 349 729 ; C 74 ; WX 500 ; N J ; B 47 -23 581 729 ; C 75 ; WX 667 ; N K ; B 79 0 813 729 ; C 76 ; WX 556 ; N L ; B 80 0 551 729 ; C 77 ; WX 833 ; N M ; B 75 0 916 729 ; C 78 ; WX 722 ; N N ; B 76 0 801 729 ; C 79 ; WX 778 ; N O ; B 104 -23 828 741 ; C 80 ; WX 667 ; N P ; B 91 0 733 729 ; C 81 ; WX 778 ; N Q ; B 104 -59 828 741 ; C 82 ; WX 722 ; N R ; B 93 0 770 729 ; C 83 ; WX 667 ; N S ; B 89 -23 714 741 ; C 84 ; WX 611 ; N T ; B 158 0 748 729 ; C 85 ; WX 722 ; N U ; B 124 -23 800 729 ; C 86 ; WX 667 ; N V ; B 185 0 800 729 ; C 87 ; WX 944 ; N W ; B 177 0 1084 729 ; C 88 ; WX 667 ; N X ; B 22 0 794 729 ; C 89 ; WX 667 ; N Y ; B 168 0 816 729 ; C 90 ; WX 611 ; N Z ; B 28 0 737 729 ; C 91 ; WX 278 ; N bracketleft ; B 19 -213 405 729 ; C 92 ; WX 278 ; N backslash ; B 147 -20 280 729 ; C 93 ; WX 278 ; N bracketright ; B -23 -213 364 729 ; C 94 ; WX 469 ; N asciicircum ; B 115 329 496 709 ; C 95 ; WX 556 ; N underscore ; B -59 -176 551 -126 ; C 96 ; WX 222 ; N quoteleft ; B 163 477 308 709 ; C 97 ; WX 556 ; N a ; B 65 -23 568 539 ; C 98 ; WX 556 ; N b ; B 54 -23 588 729 ; C 99 ; WX 500 ; N c ; B 76 -23 554 539 ; C 100 ; WX 556 ; N d ; B 73 -23 650 729 ; C 101 ; WX 556 ; N e ; B 84 -23 580 539 ; C 102 ; WX 278 ; N f ; B 89 0 413 732 ; C 103 ; WX 556 ; N g ; B 32 -218 601 539 ; C 104 ; WX 556 ; N h ; B 70 0 574 729 ; C 105 ; WX 222 ; N i ; B 66 0 305 729 ; C 106 ; WX 222 ; N j ; B -65 -218 308 729 ; C 107 ; WX 500 ; N k ; B 58 0 584 729 ; C 108 ; WX 222 ; N l ; B 68 0 307 729 ; C 109 ; WX 833 ; N m ; B 71 0 852 539 ; C 110 ; WX 556 ; N n ; B 70 0 574 539 ; C 111 ; WX 556 ; N o ; B 80 -23 576 539 ; C 112 ; WX 556 ; N p ; B 7 -213 586 539 ; C 113 ; WX 556 ; N q ; B 71 -213 607 539 ; C 114 ; WX 333 ; N r ; B 69 0 436 539 ; C 115 ; WX 500 ; N s ; B 61 -23 520 539 ; C 116 ; WX 278 ; N t ; B 97 -23 366 668 ; C 117 ; WX 556 ; N u ; B 88 -23 594 524 ; C 118 ; WX 500 ; N v ; B 122 0 598 524 ; C 119 ; WX 722 ; N w ; B 118 0 820 524 ; C 120 ; WX 500 ; N x ; B 17 0 583 524 ; C 121 ; WX 500 ; N y ; B 8 -218 590 524 ; C 122 ; WX 500 ; N z ; B 31 0 557 524 ; C 123 ; WX 334 ; N braceleft ; B 91 -213 431 729 ; C 124 ; WX 260 ; N bar ; B 54 -212 315 729 ; C 125 ; WX 334 ; N braceright ; B -16 -213 324 729 ; C 126 ; WX 584 ; N asciitilde ; B 137 268 594 438 ; C 161 ; WX 333 ; N exclamdown ; B 76 -205 317 524 ; C 162 ; WX 556 ; N cent ; B 96 -120 585 628 ; C 163 ; WX 556 ; N sterling ; B 44 -23 628 729 ; C 164 ; WX 167 ; N fraction ; B -178 -20 486 709 ; C 165 ; WX 556 ; N yen ; B 100 0 696 709 ; C 166 ; WX 556 ; N florin ; B -32 -212 696 738 ; C 167 ; WX 556 ; N section ; B 63 -213 589 729 ; C 168 ; WX 556 ; N currency ; B 110 133 593 556 ; C 169 ; WX 191 ; N quotesingle ; B 173 464 292 709 ; C 170 ; WX 333 ; N quotedblleft ; B 146 477 449 709 ; C 171 ; WX 556 ; N guillemotleft ; B 147 106 548 438 ; C 172 ; WX 333 ; N guilsinglleft ; B 140 106 336 438 ; C 173 ; WX 333 ; N guilsinglright ; B 109 106 307 438 ; C 174 ; WX 500 ; N fi ; B 83 0 591 732 ; C 175 ; WX 500 ; N fl ; B 88 0 585 732 ; C 177 ; WX 556 ; N endash ; B 46 240 628 312 ; C 178 ; WX 556 ; N dagger ; B 127 -177 620 709 ; C 179 ; WX 556 ; N daggerdbl ; B 51 -177 620 709 ; C 180 ; WX 278 ; N periodcentered ; B 166 192 293 295 ; C 182 ; WX 537 ; N paragraph ; B 145 -178 677 729 ; C 183 ; WX 350 ; N bullet ; B 120 220 376 470 ; C 184 ; WX 222 ; N quotesinglbase ; B 37 -128 180 103 ; C 185 ; WX 333 ; N quotedblbase ; B 20 -128 322 103 ; C 186 ; WX 333 ; N quotedblright ; B 150 477 452 708 ; C 187 ; WX 556 ; N guillemotright ; B 121 106 518 438 ; C 188 ; WX 1000 ; N ellipsis ; B 115 0 907 103 ; C 189 ; WX 1000 ; N perthousand ; B 93 -20 1024 738 ; C 191 ; WX 611 ; N questiondown ; B 86 -217 531 524 ; C 193 ; WX 333 ; N grave ; B 179 592 357 740 ; C 194 ; WX 333 ; N acute ; B 218 592 458 740 ; C 195 ; WX 333 ; N circumflex ; B 146 591 433 741 ; C 196 ; WX 333 ; N tilde ; B 130 611 471 719 ; C 197 ; WX 333 ; N macron ; B 160 627 450 696 ; C 198 ; WX 333 ; N breve ; B 165 594 471 729 ; C 199 ; WX 333 ; N dotaccent ; B 244 612 370 715 ; C 200 ; WX 333 ; N dieresis ; B 159 612 446 715 ; C 202 ; WX 333 ; N ring ; B 216 579 396 754 ; C 203 ; WX 333 ; N cedilla ; B 1 -214 264 0 ; C 205 ; WX 333 ; N hungarumlaut ; B 91 590 505 740 ; C 206 ; WX 333 ; N ogonek ; B 35 -205 246 0 ; C 207 ; WX 333 ; N caron ; B 176 592 463 740 ; C 208 ; WX 1000 ; N emdash ; B 42 240 1068 312 ; C 225 ; WX 1000 ; N AE ; B 11 0 1087 729 ; C 227 ; WX 370 ; N ordfeminine ; B 107 303 441 742 ; C 232 ; WX 556 ; N Lslash ; B 75 0 570 729 ; C 233 ; WX 778 ; N Oslash ; B 32 -24 867 741 ; C 234 ; WX 1000 ; N OE ; B 101 -23 1108 741 ; C 235 ; WX 365 ; N ordmasculine ; B 114 303 452 742 ; C 241 ; WX 889 ; N ae ; B 59 -23 915 539 ; C 245 ; WX 278 ; N dotlessi ; B 94 0 290 527 ; C 248 ; WX 222 ; N lslash ; B 62 0 312 729 ; C 249 ; WX 611 ; N oslash ; B 19 -30 639 541 ; C 250 ; WX 944 ; N oe ; B 85 -23 966 539 ; C 251 ; WX 611 ; N germandbls ; B 126 -23 655 729 ; C -1 ; WX 722 ; N Udieresis ; B 124 -23 800 914 ; C -1 ; WX 722 ; N Uacute ; B 124 -23 800 939 ; C -1 ; WX 667 ; N Scedilla ; B 89 -214 714 741 ; C -1 ; WX 611 ; N Tcaron ; B 158 0 748 939 ; C -1 ; WX 667 ; N Scaron ; B 89 -23 714 939 ; C -1 ; WX 722 ; N Rcaron ; B 93 0 770 939 ; C -1 ; WX 722 ; N Racute ; B 93 0 770 939 ; C -1 ; WX 667 ; N Sacute ; B 89 -23 714 939 ; C -1 ; WX 778 ; N Otilde ; B 104 -23 828 918 ; C -1 ; WX 556 ; N ucircumflex ; B 88 -23 594 741 ; C -1 ; WX 778 ; N Ohungarumlaut ; B 104 -23 841 939 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 124 -23 806 939 ; C -1 ; WX 667 ; N Yacute ; B 168 0 816 939 ; C -1 ; WX 722 ; N Eth ; B 89 0 759 729 ; C -1 ; WX 722 ; N Dcroat ; B 89 0 759 729 ; C -1 ; WX 611 ; N Zacute ; B 28 0 737 939 ; C -1 ; WX 722 ; N Uring ; B 124 -23 800 953 ; C -1 ; WX 556 ; N gbreve ; B 32 -218 601 729 ; C -1 ; WX 556 ; N eogonek ; B 84 -205 580 539 ; C -1 ; WX 556 ; N edotaccent ; B 84 -23 580 715 ; C -1 ; WX 556 ; N ecaron ; B 84 -23 580 740 ; C -1 ; WX 722 ; N Ugrave ; B 124 -23 800 939 ; C -1 ; WX 667 ; N Thorn ; B 91 0 708 729 ; C -1 ; WX 556 ; N eacute ; B 84 -23 580 740 ; C -1 ; WX 556 ; N edieresis ; B 84 -23 580 715 ; C -1 ; WX 650 ; N dcaron ; B 73 -23 810 729 ; C -1 ; WX 500 ; N ccedilla ; B 76 -214 554 539 ; C -1 ; WX 500 ; N ccaron ; B 76 -23 563 740 ; C -1 ; WX 500 ; N cacute ; B 76 -23 575 740 ; C -1 ; WX 556 ; N aogonek ; B 65 -205 571 539 ; C -1 ; WX 556 ; N aring ; B 65 -23 568 754 ; C -1 ; WX 556 ; N atilde ; B 65 -23 583 719 ; C -1 ; WX 556 ; N abreve ; B 65 -23 582 729 ; C -1 ; WX 556 ; N egrave ; B 84 -23 580 740 ; C -1 ; WX 556 ; N agrave ; B 65 -23 568 740 ; C -1 ; WX 556 ; N aacute ; B 65 -23 570 740 ; C -1 ; WX 556 ; N adieresis ; B 65 -23 568 715 ; C -1 ; WX 722 ; N Uogonek ; B 124 -205 800 729 ; C -1 ; WX 556 ; N ugrave ; B 88 -23 594 740 ; C -1 ; WX 556 ; N uacute ; B 88 -23 594 740 ; C -1 ; WX 556 ; N udieresis ; B 88 -23 594 715 ; C -1 ; WX 319 ; N tcaron ; B 97 -23 492 801 ; C -1 ; WX 500 ; N scommaaccent ; B 61 -284 520 539 ; C -1 ; WX 611 ; N Zcaron ; B 28 0 737 939 ; C -1 ; WX 556 ; N ecircumflex ; B 84 -23 580 741 ; C -1 ; WX 722 ; N Ucircumflex ; B 124 -23 800 940 ; C -1 ; WX 556 ; N acircumflex ; B 65 -23 568 741 ; C -1 ; WX 611 ; N Zdotaccent ; B 28 0 737 914 ; C -1 ; WX 500 ; N scaron ; B 61 -23 547 740 ; C -1 ; WX 667 ; N Amacron ; B 17 0 663 895 ; C -1 ; WX 500 ; N sacute ; B 61 -23 545 740 ; C -1 ; WX 611 ; N Tcommaaccent ; B 158 -284 748 729 ; C -1 ; WX 667 ; N Ydieresis ; B 168 0 816 914 ; C -1 ; WX 556 ; N thorn ; B 7 -213 586 729 ; C -1 ; WX 667 ; N Emacron ; B 90 0 751 895 ; C -1 ; WX 778 ; N Ograve ; B 104 -23 828 939 ; C -1 ; WX 778 ; N Oacute ; B 104 -23 828 939 ; C -1 ; WX 778 ; N Odieresis ; B 104 -23 828 914 ; C -1 ; WX 722 ; N Ntilde ; B 76 0 801 918 ; C -1 ; WX 722 ; N Ncaron ; B 76 0 801 939 ; C -1 ; WX 722 ; N Nacute ; B 76 0 801 939 ; C -1 ; WX 556 ; N Lcaron ; B 80 0 551 729 ; C -1 ; WX 556 ; N Lacute ; B 80 0 551 939 ; C -1 ; WX 278 ; N Idotaccent ; B 100 0 389 914 ; C -1 ; WX 333 ; N racute ; B 69 0 498 740 ; C -1 ; WX 278 ; N Icircumflex ; B 100 0 454 940 ; C -1 ; WX 556 ; N ohungarumlaut ; B 80 -23 683 740 ; C -1 ; WX 556 ; N otilde ; B 80 -23 583 719 ; C -1 ; WX 556 ; N Euro ; B 12 -22 636 709 ; C -1 ; WX 556 ; N ocircumflex ; B 80 -23 576 741 ; C -1 ; WX 390 ; N onesuperior ; B 205 284 393 709 ; C -1 ; WX 390 ; N twosuperior ; B 100 284 468 709 ; C -1 ; WX 390 ; N threesuperior ; B 123 270 455 709 ; C -1 ; WX 278 ; N Igrave ; B 100 0 378 939 ; C -1 ; WX 278 ; N Iacute ; B 100 0 479 939 ; C -1 ; WX 278 ; N Imacron ; B 100 0 458 895 ; C -1 ; WX 278 ; N Iogonek ; B 28 -205 349 729 ; C -1 ; WX 278 ; N Idieresis ; B 100 0 467 907 ; C -1 ; WX 778 ; N Gbreve ; B 109 -23 809 928 ; C -1 ; WX 722 ; N Umacron ; B 124 -23 800 895 ; C -1 ; WX 667 ; N Kcommaaccent ; B 79 -284 813 729 ; C -1 ; WX 556 ; N ograve ; B 80 -23 576 740 ; C -1 ; WX 667 ; N Scommaaccent ; B 89 -284 714 741 ; C -1 ; WX 667 ; N Eogonek ; B 90 -205 751 729 ; C -1 ; WX 556 ; N oacute ; B 80 -23 576 740 ; C -1 ; WX 667 ; N Edotaccent ; B 90 0 751 914 ; C -1 ; WX 222 ; N iogonek ; B 0 -205 305 729 ; C -1 ; WX 527 ; N gcommaaccent ; B 3 -218 572 813 ; C -1 ; WX 556 ; N odieresis ; B 80 -23 576 715 ; C -1 ; WX 556 ; N ntilde ; B 70 0 589 719 ; C -1 ; WX 556 ; N ncaron ; B 70 0 578 740 ; C -1 ; WX 667 ; N Ecaron ; B 90 0 751 939 ; C -1 ; WX 667 ; N Ecircumflex ; B 90 0 751 940 ; C -1 ; WX 500 ; N scedilla ; B 61 -214 521 539 ; C -1 ; WX 333 ; N rcaron ; B 69 0 486 740 ; C -1 ; WX 667 ; N Egrave ; B 90 0 751 939 ; C -1 ; WX 667 ; N Eacute ; B 90 0 751 939 ; C -1 ; WX 778 ; N Gcommaaccent ; B 109 -284 809 741 ; C -1 ; WX 722 ; N Rcommaaccent ; B 93 -284 770 729 ; C -1 ; WX 667 ; N Edieresis ; B 90 0 751 914 ; C -1 ; WX 556 ; N nacute ; B 70 0 580 740 ; C -1 ; WX 556 ; N uogonek ; B 88 -205 594 524 ; C -1 ; WX 556 ; N umacron ; B 88 -23 594 696 ; C -1 ; WX 722 ; N Dcaron ; B 89 0 759 939 ; C -1 ; WX 307 ; N lcaron ; B 68 0 467 729 ; C -1 ; WX 722 ; N Ccaron ; B 112 -23 770 939 ; C -1 ; WX 722 ; N Cacute ; B 112 -23 770 939 ; C -1 ; WX 722 ; N Ccedilla ; B 112 -214 770 741 ; C -1 ; WX 606 ; N degree ; B 291 383 594 686 ; C -1 ; WX 667 ; N Aogonek ; B 17 -205 663 729 ; C -1 ; WX 584 ; N minus ; B 81 197 601 269 ; C -1 ; WX 584 ; N multiply ; B 113 34 568 427 ; C -1 ; WX 584 ; N divide ; B 92 0 591 462 ; C -1 ; WX 667 ; N Aring ; B 17 0 653 953 ; C -1 ; WX 1000 ; N trademark ; B 208 292 1096 729 ; C -1 ; WX 333 ; N rcommaaccent ; B 5 -284 436 539 ; C -1 ; WX 222 ; N lacute ; B 68 0 463 939 ; C -1 ; WX 556 ; N omacron ; B 80 -23 576 696 ; C -1 ; WX 667 ; N Atilde ; B 17 0 680 918 ; C -1 ; WX 278 ; N icircumflex ; B 94 0 406 741 ; C -1 ; WX 278 ; N igrave ; B 94 0 330 740 ; C -1 ; WX 556 ; N ncommaaccent ; B 70 -284 574 539 ; C -1 ; WX 222 ; N lcommaaccent ; B -1 -284 307 729 ; C -1 ; WX 584 ; N plusminus ; B 50 0 625 633 ; C -1 ; WX 947 ; N onehalf ; B 202 -20 965 709 ; C -1 ; WX 947 ; N onequarter ; B 205 -20 938 709 ; C -1 ; WX 947 ; N threequarters ; B 123 -20 938 709 ; C -1 ; WX 278 ; N iacute ; B 94 0 431 740 ; C -1 ; WX 667 ; N Abreve ; B 17 0 683 928 ; C -1 ; WX 500 ; N kcommaaccent ; B 58 -284 584 729 ; C -1 ; WX 778 ; N Omacron ; B 104 -23 828 895 ; C -1 ; WX 222 ; N imacron ; B 66 0 373 696 ; C -1 ; WX 556 ; N emacron ; B 84 -23 580 696 ; C -1 ; WX 556 ; N amacron ; B 65 -23 568 696 ; C -1 ; WX 278 ; N tcommaaccent ; B 55 -284 366 668 ; C -1 ; WX 500 ; N ydieresis ; B 8 -218 590 715 ; C -1 ; WX 500 ; N zdotaccent ; B 31 0 557 715 ; C -1 ; WX 500 ; N zcaron ; B 31 0 557 740 ; C -1 ; WX 500 ; N zacute ; B 31 0 557 740 ; C -1 ; WX 500 ; N yacute ; B 8 -218 590 740 ; C -1 ; WX 556 ; N uhungarumlaut ; B 88 -23 683 740 ; C -1 ; WX 556 ; N eth ; B 80 -23 576 743 ; C -1 ; WX 556 ; N uring ; B 88 -23 594 754 ; C -1 ; WX 778 ; N Ocircumflex ; B 104 -23 828 940 ; C -1 ; WX 333 ; N commaaccent ; B 57 -284 205 -60 ; C -1 ; WX 737 ; N copyright ; B 55 -22 836 742 ; C -1 ; WX 737 ; N registered ; B 55 -22 836 742 ; C -1 ; WX 667 ; N Acircumflex ; B 17 0 653 940 ; C -1 ; WX 278 ; N idieresis ; B 94 0 419 708 ; C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ; C -1 ; WX 712 ; N Delta ; B 10 0 701 729 ; C -1 ; WX 584 ; N notequal ; B 74 2 609 480 ; C -1 ; WX 542 ; N radical ; B 102 -36 705 913 ; C -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ; C -1 ; WX 667 ; N Aacute ; B 17 0 667 939 ; C -1 ; WX 584 ; N lessequal ; B 45 0 659 584 ; C -1 ; WX 584 ; N greaterequal ; B 56 0 626 584 ; C -1 ; WX 584 ; N logicalnot ; B 99 86 619 377 ; C -1 ; WX 711 ; N summation ; B -18 -97 760 762 ; C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ; C -1 ; WX 722 ; N Ncommaaccent ; B 76 -284 801 729 ; C -1 ; WX 556 ; N dcroat ; B 73 -23 695 729 ; C -1 ; WX 260 ; N brokenbar ; B 54 -212 315 729 ; C -1 ; WX 556 ; N Lcommaaccent ; B 80 -284 551 729 ; C -1 ; WX 667 ; N Adieresis ; B 17 0 662 914 ; C -1 ; WX 556 ; N mu ; B 18 -220 593 524 ; C -1 ; WX 278 ; N .notdef ; B 213 0 213 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -41 KPX A Ccedilla -41 KPX A G -41 KPX A O -37 KPX A Odieresis -37 KPX A Q -38 KPX A T -103 KPX A U -42 KPX A Uacute -42 KPX A Ucircumflex -42 KPX A Udieresis -42 KPX A Ugrave -42 KPX A V -81 KPX A W -57 KPX A Y -104 KPX A a -16 KPX A b -5 KPX A c -16 KPX A ccedilla -16 KPX A comma -4 KPX A d -14 KPX A e -22 KPX A g -17 KPX A guillemotleft -51 KPX A guilsinglleft -47 KPX A hyphen -8 KPX A o -19 KPX A period -2 KPX A q -15 KPX A quotedblright -60 KPX A quoteright -68 KPX A t -22 KPX A u -18 KPX A v -40 KPX A w -29 KPX A y -44 KPX Aacute C -42 KPX Aacute G -42 KPX Aacute O -38 KPX Aacute Q -39 KPX Aacute T -103 KPX Aacute U -43 KPX Aacute V -81 KPX Aacute W -57 KPX Aacute Y -104 KPX Aacute a -16 KPX Aacute b -6 KPX Aacute c -17 KPX Aacute comma -4 KPX Aacute d -15 KPX Aacute e -23 KPX Aacute g -17 KPX Aacute guillemotleft -51 KPX Aacute guilsinglleft -48 KPX Aacute hyphen -9 KPX Aacute o -20 KPX Aacute period -3 KPX Aacute q -16 KPX Aacute quoteright -68 KPX Aacute t -23 KPX Aacute u -20 KPX Aacute v -40 KPX Aacute w -29 KPX Aacute y -44 KPX Acircumflex C -41 KPX Acircumflex G -41 KPX Acircumflex O -37 KPX Acircumflex Q -38 KPX Acircumflex T -103 KPX Acircumflex U -42 KPX Acircumflex V -81 KPX Acircumflex W -57 KPX Acircumflex Y -104 KPX Acircumflex comma -4 KPX Acircumflex period -2 KPX Adieresis C -42 KPX Adieresis G -41 KPX Adieresis O -38 KPX Adieresis Q -39 KPX Adieresis T -103 KPX Adieresis U -43 KPX Adieresis V -81 KPX Adieresis W -57 KPX Adieresis Y -104 KPX Adieresis a -16 KPX Adieresis b -5 KPX Adieresis c -17 KPX Adieresis comma -4 KPX Adieresis d -14 KPX Adieresis g -17 KPX Adieresis guillemotleft -51 KPX Adieresis guilsinglleft -48 KPX Adieresis hyphen -8 KPX Adieresis o -19 KPX Adieresis period -3 KPX Adieresis q -15 KPX Adieresis quotedblright -60 KPX Adieresis quoteright -68 KPX Adieresis t -22 KPX Adieresis u -19 KPX Adieresis v -40 KPX Adieresis w -29 KPX Adieresis y -44 KPX Agrave C -41 KPX Agrave G -41 KPX Agrave O -37 KPX Agrave Q -38 KPX Agrave T -103 KPX Agrave U -42 KPX Agrave V -81 KPX Agrave W -57 KPX Agrave Y -104 KPX Agrave comma -4 KPX Agrave period -2 KPX Aring C -41 KPX Aring G -41 KPX Aring O -37 KPX Aring Q -38 KPX Aring T -103 KPX Aring U -42 KPX Aring V -81 KPX Aring W -57 KPX Aring Y -104 KPX Aring a -16 KPX Aring b -5 KPX Aring c -16 KPX Aring comma -4 KPX Aring d -14 KPX Aring e -22 KPX Aring g -17 KPX Aring guillemotleft -51 KPX Aring guilsinglleft -47 KPX Aring hyphen -8 KPX Aring o -19 KPX Aring period -2 KPX Aring q -15 KPX Aring quotedblright -60 KPX Aring quoteright -68 KPX Aring t -22 KPX Aring u -18 KPX Aring v -40 KPX Aring w -29 KPX Aring y -44 KPX Atilde C -43 KPX Atilde G -42 KPX Atilde O -39 KPX Atilde Q -40 KPX Atilde T -103 KPX Atilde U -44 KPX Atilde V -81 KPX Atilde W -57 KPX Atilde Y -104 KPX Atilde comma -4 KPX Atilde period -4 KPX B A -28 KPX B AE -29 KPX B Aacute -28 KPX B Acircumflex -28 KPX B Adieresis -28 KPX B Aring -28 KPX B Atilde -28 KPX B O -14 KPX B OE -11 KPX B Oacute -14 KPX B Ocircumflex -14 KPX B Odieresis -14 KPX B Ograve -14 KPX B Oslash -2 KPX B V -49 KPX B W -27 KPX B Y -56 KPX C A -43 KPX C AE -44 KPX C Aacute -43 KPX C Adieresis -43 KPX C Aring -43 KPX C H -22 KPX C K -20 KPX C O -18 KPX C Oacute -18 KPX C Odieresis -18 KPX Ccedilla A -44 KPX D A -50 KPX D Aacute -50 KPX D Acircumflex -50 KPX D Adieresis -50 KPX D Agrave -50 KPX D Aring -50 KPX D Atilde -50 KPX D J -13 KPX D T -56 KPX D V -54 KPX D W -31 KPX D X -58 KPX D Y -74 KPX F A -78 KPX F Aacute -78 KPX F Acircumflex -78 KPX F Adieresis -78 KPX F Agrave -78 KPX F Aring -78 KPX F Atilde -78 KPX F J -59 KPX F O -30 KPX F Odieresis -30 KPX F a -45 KPX F aacute -45 KPX F adieresis -45 KPX F ae -41 KPX F aring -45 KPX F comma -113 KPX F e -33 KPX F eacute -33 KPX F hyphen -20 KPX F i -19 KPX F j -19 KPX F o -30 KPX F oacute -30 KPX F odieresis -30 KPX F oe -33 KPX F oslash -30 KPX F period -113 KPX F r -44 KPX F u -42 KPX G A -14 KPX G AE -11 KPX G Aacute -14 KPX G Acircumflex -14 KPX G Adieresis -14 KPX G Agrave -14 KPX G Aring -14 KPX G Atilde -14 KPX G T -53 KPX G V -53 KPX G W -31 KPX G Y -72 KPX J A -39 KPX J AE -39 KPX J Adieresis -39 KPX J Aring -39 KPX K C -56 KPX K G -57 KPX K O -53 KPX K OE -49 KPX K Oacute -53 KPX K Odieresis -53 KPX K S -48 KPX K T 14 KPX K a -23 KPX K adieresis -23 KPX K ae -20 KPX K aring -23 KPX K e -46 KPX K hyphen -53 KPX K o -42 KPX K oacute -42 KPX K odieresis -42 KPX K u -32 KPX K udieresis -32 KPX K y -76 KPX L A 8 KPX L AE 11 KPX L Aacute 8 KPX L Adieresis 8 KPX L Aring 8 KPX L C -52 KPX L Ccedilla -51 KPX L G -53 KPX L O -51 KPX L Oacute -51 KPX L Ocircumflex -51 KPX L Odieresis -51 KPX L Ograve -51 KPX L Otilde -51 KPX L S -28 KPX L T -112 KPX L U -46 KPX L Udieresis -46 KPX L V -115 KPX L W -77 KPX L Y -128 KPX L hyphen -140 KPX L quotedblright -145 KPX L quoteright -153 KPX L u -17 KPX L udieresis -17 KPX L y -68 KPX N A -19 KPX N AE -16 KPX N Aacute -19 KPX N Adieresis -19 KPX N Aring -19 KPX N C -15 KPX N Ccedilla -14 KPX N G -14 KPX N O -11 KPX N Oacute -11 KPX N Odieresis -11 KPX N a -17 KPX N aacute -17 KPX N adieresis -17 KPX N ae -13 KPX N aring -17 KPX N comma -15 KPX N e -11 KPX N eacute -11 KPX N o -8 KPX N oacute -8 KPX N odieresis -8 KPX N oslash -4 KPX N period -15 KPX N u -8 KPX N udieresis -9 KPX O A -43 KPX O AE -47 KPX O Aacute -43 KPX O Adieresis -43 KPX O Aring -43 KPX O T -54 KPX O V -48 KPX O W -25 KPX O X -52 KPX O Y -71 KPX Oacute A -43 KPX Oacute T -54 KPX Oacute V -48 KPX Oacute W -25 KPX Oacute Y -71 KPX Ocircumflex T -54 KPX Ocircumflex V -48 KPX Ocircumflex Y -71 KPX Odieresis A -43 KPX Odieresis T -54 KPX Odieresis V -48 KPX Odieresis W -25 KPX Odieresis X -52 KPX Odieresis Y -71 KPX Ograve T -54 KPX Ograve V -48 KPX Ograve Y -71 KPX Oslash A -47 KPX Otilde T -54 KPX Otilde V -48 KPX Otilde Y -71 KPX P A -86 KPX P AE -93 KPX P Aacute -86 KPX P Adieresis -86 KPX P Aring -86 KPX P J -85 KPX P a -39 KPX P aacute -39 KPX P adieresis -39 KPX P ae -35 KPX P aring -39 KPX P comma -138 KPX P e -38 KPX P eacute -38 KPX P hyphen -45 KPX P o -34 KPX P oacute -34 KPX P odieresis -34 KPX P oe -38 KPX P oslash -35 KPX P period -138 KPX R C -21 KPX R Ccedilla -21 KPX R G -21 KPX R O -17 KPX R OE -14 KPX R Oacute -17 KPX R Odieresis -17 KPX R T -33 KPX R U -21 KPX R Udieresis -21 KPX R V -49 KPX R W -27 KPX R Y -54 KPX R a -21 KPX R aacute -21 KPX R adieresis -21 KPX R ae -17 KPX R aring -21 KPX R e -16 KPX R eacute -16 KPX R hyphen -4 KPX R o -13 KPX R oacute -13 KPX R odieresis -13 KPX R oe -16 KPX R u -13 KPX R uacute -14 KPX R udieresis -14 KPX R y -16 KPX S A -31 KPX S AE -31 KPX S Aacute -31 KPX S Adieresis -31 KPX S Aring -31 KPX S T -38 KPX S V -52 KPX S W -31 KPX S Y -58 KPX S t -11 KPX T A -104 KPX T AE -106 KPX T Aacute -104 KPX T Acircumflex -104 KPX T Adieresis -104 KPX T Agrave -104 KPX T Aring -104 KPX T Atilde -104 KPX T C -53 KPX T G -55 KPX T J -108 KPX T O -50 KPX T OE -44 KPX T Oacute -50 KPX T Ocircumflex -50 KPX T Odieresis -50 KPX T Ograve -50 KPX T Oslash -42 KPX T Otilde -50 KPX T S -32 KPX T V 2 KPX T W 7 KPX T Y 10 KPX T a -107 KPX T ae -104 KPX T c -96 KPX T colon -152 KPX T comma -105 KPX T e -102 KPX T g -94 KPX T guillemotleft -126 KPX T guilsinglleft -123 KPX T hyphen -82 KPX T i -12 KPX T j -12 KPX T o -99 KPX T oslash -94 KPX T period -105 KPX T r -98 KPX T s -98 KPX T semicolon -140 KPX T u -98 KPX T v -106 KPX T w -103 KPX T y -110 KPX U A -45 KPX U AE -48 KPX U Aacute -45 KPX U Acircumflex -45 KPX U Adieresis -45 KPX U Aring -45 KPX U Atilde -45 KPX U comma -35 KPX U m -17 KPX U n -16 KPX U p -8 KPX U period -32 KPX U r -16 KPX Uacute A -45 KPX Uacute comma -35 KPX Uacute m -17 KPX Uacute n -16 KPX Uacute p -8 KPX Uacute period -32 KPX Uacute r -16 KPX Ucircumflex A -45 KPX Udieresis A -44 KPX Udieresis b -8 KPX Udieresis comma -35 KPX Udieresis m -17 KPX Udieresis n -16 KPX Udieresis p -8 KPX Udieresis period -32 KPX Udieresis r -16 KPX Ugrave A -45 KPX V A -77 KPX V AE -84 KPX V Aacute -77 KPX V Acircumflex -77 KPX V Adieresis -77 KPX V Agrave -77 KPX V Aring -77 KPX V Atilde -77 KPX V C -50 KPX V G -50 KPX V O -46 KPX V Oacute -46 KPX V Ocircumflex -46 KPX V Odieresis -46 KPX V Ograve -46 KPX V Oslash -34 KPX V Otilde -46 KPX V S -44 KPX V T 7 KPX V a -71 KPX V ae -66 KPX V colon -76 KPX V comma -94 KPX V e -64 KPX V g -57 KPX V guillemotleft -88 KPX V guilsinglleft -84 KPX V hyphen -44 KPX V i -14 KPX V o -61 KPX V oslash -57 KPX V period -94 KPX V r -51 KPX V semicolon -75 KPX V u -52 KPX V y -28 KPX W A -56 KPX W AE -62 KPX W Aacute -56 KPX W Acircumflex -56 KPX W Adieresis -56 KPX W Agrave -56 KPX W Aring -56 KPX W Atilde -56 KPX W C -30 KPX W G -30 KPX W O -26 KPX W Oacute -26 KPX W Ocircumflex -26 KPX W Odieresis -26 KPX W Ograve -26 KPX W Oslash -14 KPX W Otilde -26 KPX W S -31 KPX W T 11 KPX W a -46 KPX W ae -42 KPX W colon -62 KPX W comma -62 KPX W e -39 KPX W g -32 KPX W guillemotleft -63 KPX W guilsinglleft -60 KPX W hyphen -19 KPX W i -10 KPX W o -36 KPX W oslash -32 KPX W period -62 KPX W r -36 KPX W semicolon -62 KPX W u -36 KPX W y -15 KPX X C -53 KPX X O -50 KPX X Odieresis -50 KPX X Q -51 KPX X a -27 KPX X e -51 KPX X hyphen -57 KPX X o -46 KPX X u -36 KPX X y -67 KPX Y A -102 KPX Y AE -108 KPX Y Aacute -102 KPX Y Acircumflex -102 KPX Y Adieresis -102 KPX Y Agrave -102 KPX Y Aring -102 KPX Y Atilde -102 KPX Y C -68 KPX Y G -69 KPX Y O -64 KPX Y Oacute -64 KPX Y Ocircumflex -64 KPX Y Odieresis -64 KPX Y Ograve -64 KPX Y Oslash -55 KPX Y Otilde -64 KPX Y S -49 KPX Y T 15 KPX Y a -100 KPX Y ae -95 KPX Y colon -97 KPX Y comma -117 KPX Y e -97 KPX Y g -89 KPX Y guillemotleft -128 KPX Y guilsinglleft -124 KPX Y hyphen -89 KPX Y i -6 KPX Y o -93 KPX Y oslash -89 KPX Y p -63 KPX Y period -117 KPX Y semicolon -97 KPX Y u -73 KPX Y v -48 KPX Z v -44 KPX Z y -44 KPX a j -10 KPX a quoteright -23 KPX a v -26 KPX a w -16 KPX a y -33 KPX aacute v -26 KPX aacute w -16 KPX aacute y -33 KPX adieresis v -26 KPX adieresis w -16 KPX adieresis y -33 KPX ae v -26 KPX ae w -15 KPX ae y -32 KPX agrave v -26 KPX agrave w -16 KPX agrave y -33 KPX aring v -26 KPX aring w -16 KPX aring y -33 KPX b v -21 KPX b w -10 KPX b y -28 KPX c h -7 KPX c k -1 KPX comma one -105 KPX comma quotedblright -47 KPX comma quoteright -55 KPX e quoteright -20 KPX e t -16 KPX e v -26 KPX e w -16 KPX e x -35 KPX e y -33 KPX eacute v -26 KPX eacute w -16 KPX eacute y -33 KPX ecircumflex v -26 KPX ecircumflex w -16 KPX ecircumflex y -33 KPX eight four -6 KPX eight one -55 KPX eight seven -43 KPX f a -20 KPX f aacute -20 KPX f adieresis -20 KPX f ae -15 KPX f aring -20 KPX f e -21 KPX f eacute -21 KPX f f 12 KPX f i -10 KPX f j -11 KPX f l -12 KPX f o -18 KPX f oacute -18 KPX f odieresis -18 KPX f oe -20 KPX f oslash -16 KPX f quoteright -8 KPX f s -8 KPX f t 16 KPX five four -7 KPX five one -83 KPX five seven -32 KPX four four -3 KPX four one -88 KPX four seven -65 KPX g a -17 KPX g adieresis -17 KPX g ae -13 KPX g aring -17 KPX g e -11 KPX g eacute -11 KPX g l -8 KPX g oacute -8 KPX g odieresis -8 KPX g r -9 KPX guillemotright A -58 KPX guillemotright AE -62 KPX guillemotright Aacute -58 KPX guillemotright Adieresis -58 KPX guillemotright Aring -58 KPX guillemotright T -132 KPX guillemotright V -96 KPX guillemotright W -68 KPX guillemotright Y -137 KPX guilsinglright A -52 KPX guilsinglright AE -56 KPX guilsinglright Aacute -52 KPX guilsinglright Adieresis -52 KPX guilsinglright Aring -52 KPX guilsinglright T -126 KPX guilsinglright V -90 KPX guilsinglright W -62 KPX guilsinglright Y -131 KPX h quoteright -19 KPX h y -31 KPX hyphen A -12 KPX hyphen AE -17 KPX hyphen Aacute -12 KPX hyphen Adieresis -12 KPX hyphen Aring -12 KPX hyphen T -86 KPX hyphen V -51 KPX hyphen W -24 KPX hyphen Y -97 KPX i T -16 KPX i j -10 KPX k a -14 KPX k aacute -14 KPX k adieresis -14 KPX k ae -12 KPX k aring -14 KPX k comma -13 KPX k e -33 KPX k eacute -33 KPX k g -26 KPX k hyphen -49 KPX k o -30 KPX k oacute -30 KPX k odieresis -30 KPX k period -13 KPX k s -14 KPX k u -22 KPX k udieresis -16 KPX l v -11 KPX l y -15 KPX m p -3 KPX m v -24 KPX m w -14 KPX m y -30 KPX n T -103 KPX n p -3 KPX n quoteright -19 KPX n v -24 KPX n w -14 KPX n y -31 KPX nine four -12 KPX nine one -55 KPX nine seven -50 KPX o T -106 KPX o quoteright -23 KPX o t -17 KPX o v -27 KPX o w -16 KPX o x -35 KPX o y -34 KPX oacute v -27 KPX oacute w -16 KPX oacute y -34 KPX ocircumflex t -17 KPX odieresis t -17 KPX odieresis v -27 KPX odieresis w -16 KPX odieresis x -35 KPX odieresis y -34 KPX ograve v -27 KPX ograve w -16 KPX ograve y -34 KPX one comma -82 KPX one eight -73 KPX one five -72 KPX one four -88 KPX one nine -71 KPX one one -125 KPX one period -82 KPX one seven -98 KPX one six -71 KPX one three -75 KPX one two -78 KPX one zero -71 KPX p t -10 KPX p y -28 KPX period one -106 KPX period quotedblright -48 KPX period quoteright -56 KPX q c -2 KPX q u -5 KPX quotedblbase A 21 KPX quotedblbase AE 21 KPX quotedblbase T -80 KPX quotedblbase V -74 KPX quotedblbase W -39 KPX quotedblbase Y -96 KPX quotedblleft A -58 KPX quotedblleft AE -70 KPX quotedblleft Aacute -58 KPX quotedblleft Adieresis -58 KPX quotedblleft Aring -58 KPX quotedblleft T 1 KPX quotedblleft V 10 KPX quotedblleft W 22 KPX quotedblleft Y -1 KPX quotedblright A -60 KPX quotedblright AE -72 KPX quotedblright Aacute -60 KPX quotedblright Adieresis -60 KPX quotedblright Aring -60 KPX quotedblright T 2 KPX quotedblright V 9 KPX quotedblright W 21 KPX quotedblright Y -2 KPX quoteleft A -74 KPX quoteleft AE -86 KPX quoteleft Aacute -74 KPX quoteleft Adieresis -74 KPX quoteleft Aring -74 KPX quoteleft T -14 KPX quoteleft V -5 KPX quoteleft W 6 KPX quoteleft Y -17 KPX quoteright A -76 KPX quoteright AE -88 KPX quoteright Aacute -76 KPX quoteright Adieresis -76 KPX quoteright Aring -76 KPX quoteright comma -68 KPX quoteright d -25 KPX quoteright o -31 KPX quoteright period -68 KPX quoteright r -24 KPX quoteright s -23 KPX quoteright t -14 KPX quoteright v -10 KPX quoteright w -5 KPX quoteright y -14 KPX r a -16 KPX r aacute -16 KPX r acircumflex -16 KPX r adieresis -16 KPX r ae -11 KPX r agrave -16 KPX r aring -16 KPX r c -11 KPX r ccedilla -11 KPX r colon -31 KPX r comma -77 KPX r d -8 KPX r e -17 KPX r eacute -17 KPX r ecircumflex -17 KPX r egrave -17 KPX r f 17 KPX r g -8 KPX r h -8 KPX r hyphen -54 KPX r i -6 KPX r j -6 KPX r k -2 KPX r l -7 KPX r m -9 KPX r n -8 KPX r o -14 KPX r oacute -14 KPX r ocircumflex -14 KPX r odieresis -14 KPX r oe -16 KPX r ograve -14 KPX r oslash -14 KPX r p 0 KPX r period -77 KPX r q -10 KPX r quoteright -6 KPX r r -8 KPX r s -4 KPX r semicolon -30 KPX r t 21 KPX r u -7 KPX r v 18 KPX r w 21 KPX r x 9 KPX r y 15 KPX r z 0 KPX s quoteright -24 KPX s t -15 KPX seven colon -84 KPX seven comma -123 KPX seven eight -34 KPX seven five -37 KPX seven four -95 KPX seven one -58 KPX seven period -123 KPX seven seven -11 KPX seven six -44 KPX seven three -29 KPX seven two -31 KPX six four -7 KPX six one -52 KPX six seven -40 KPX t S -17 KPX t a -10 KPX t aacute -10 KPX t adieresis -10 KPX t ae -7 KPX t aring -10 KPX t colon -37 KPX t e -22 KPX t eacute -22 KPX t h -14 KPX t o -19 KPX t oacute -19 KPX t odieresis -19 KPX t quoteright -7 KPX t semicolon -36 KPX three four -9 KPX three one -57 KPX three seven -45 KPX two four -43 KPX two one -45 KPX two seven -38 KPX u quoteright -14 KPX v a -30 KPX v aacute -30 KPX v acircumflex -30 KPX v adieresis -30 KPX v ae -25 KPX v agrave -30 KPX v aring -30 KPX v atilde -30 KPX v c -22 KPX v colon -32 KPX v comma -76 KPX v e -29 KPX v eacute -29 KPX v ecircumflex -29 KPX v egrave -29 KPX v g -20 KPX v hyphen -19 KPX v l -8 KPX v o -25 KPX v oacute -25 KPX v odieresis -25 KPX v ograve -25 KPX v oslash -25 KPX v period -76 KPX v s -17 KPX v semicolon -31 KPX w a -26 KPX w aacute -26 KPX w acircumflex -26 KPX w adieresis -26 KPX w ae -22 KPX w agrave -26 KPX w aring -26 KPX w atilde -26 KPX w c -14 KPX w colon -32 KPX w comma -57 KPX w e -20 KPX w eacute -20 KPX w ecircumflex -20 KPX w egrave -20 KPX w g -13 KPX w hyphen -8 KPX w l -8 KPX w o -17 KPX w oacute -17 KPX w odieresis -17 KPX w ograve -17 KPX w oslash -14 KPX w period -57 KPX w s -14 KPX w semicolon -31 KPX x a -30 KPX x c -30 KPX x e -36 KPX x eacute -36 KPX x o -33 KPX x q -28 KPX y a -36 KPX y aacute -36 KPX y acircumflex -36 KPX y adieresis -36 KPX y ae -31 KPX y agrave -36 KPX y aring -36 KPX y atilde -36 KPX y c -28 KPX y colon -40 KPX y comma -80 KPX y e -35 KPX y eacute -35 KPX y ecircumflex -35 KPX y egrave -35 KPX y g -26 KPX y hyphen -24 KPX y l -14 KPX y o -31 KPX y oacute -31 KPX y odieresis -31 KPX y ograve -31 KPX y oslash -30 KPX y period -80 KPX y s -23 KPX y semicolon -40 KPX zero four -11 KPX zero one -56 KPX zero seven -50 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Sans.pfa0100664000212600000240000052600610330505373014457 0ustar mikeuser%!PS-AdobeFont-1.0: Sans 1.15 %%DocumentSuppliedResources: font Sans %%Title: Sans %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Sans known{/Sans findfont dup/UniqueID known{dup /UniqueID get 4048058 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Sans def /FontBBox {-375 -1034 2768 2123 }readonly def /UniqueID 4048058 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Sans) readonly def /FamilyName (Sans) readonly def /Weight (Book) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -213 def /UnderlineThickness 143 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 03E2A6C7AA151853F130FB1D8AE0A26E5CC28849FA40AD05F7ECF28AD21B29EF4889C2F7 CA9331F6ABEE672039DC2A8D7BB71F1C4CB33347C1C2A33A0BB01646A4DB4A140041B01A C1C390FA2194C55669E6480346B89C56208C58106318C28229D0A1861FCB59CE034B2977 B64CAA33DFCCDB48F2F357745C8CDDF0C94E2D477DC04C9CC4967CDA525F97F69817806E 5D623A6A5AC5FAFE3E6D43902463F861F76B6DD11E2F6F8F68DC8CE550014770B59C6EF6 6A164DD4E6BCD39D8B91659D5B9945D821E192F4412060715AEA68DB6633177C7ECDD10F 1B4E752FF6DE9D9E168E32C2067AF193F4F3A1217C0D041FED6FBD40C68E11E470E3E864 38AB405473C3CFECC09BE240438EB482B159C0ACD6B22B75F2FDC37DB47995C279B13284 635F78DA84466D546A72786E8347FCE730E03F7C8104640F09BB882941AF992B71FB97C6 C9EE99DE5E98DF9F389A12C8C970838F26D47766BCEBA4C3103706DEBD00485083CE2F94 2E90477D7A1FBD764D2FC0EE915C1D54E1DCE22CA0F7F8F7D7157CAB5E6B9D850A24883E 5F496806F8410925132C68702815E120664AA1AB934548EFE80E9B108C9797146CF20F69 BC0BC45FF7AD65DAF51EB3BD5E94BDBE8CECF48E7CA54D622A500A3A1A3D4B390E769B0D 7343E8E5204455B6681BDA00FF985C6EFC0F3F41A28C7456578A4D3927AFAD17F77DB4E5 5F074DDB4716795617F788D3EC8CB5389B9C00B65A4E46AD0C48D8EA061E47C314851733 398467C4C5ADA986EF06E613CB48FEB27249582D386C7694408AD11296C80F1B523A0EBD FBC069208944CB90062A8AFB36A1D957F63D194B89BAE47835562F4B012FB5F7BB445B41 DF5F08D2A86F9691377B5A41EA56F067CF534E34FBBAA1130D18DE0F5A88A040DEDCF8D3 5855E965053005A7F56D6266029573FCB67E03C4C261FDC3BE8FD51E17D9A9FDF9972521 C2826B93CAAF3547AF273DE16E6425E8D4214AEF604485008EA7E68AEC6C5F110F195038 7BDF99ECFCC44F2A4A64B2BE0E383ADE87522C711F6185535F8D8C67E5DF44EDC6C63C0A D853824279EF1FF0601D16AF8CFE9373FBF6B871EBA08DE76FD1DA73686F1E392BD46D22 41832195CAC483B3C8533624DA184AB3F4E199D39A3DA75EB094164476CA49FEFB70E7E1 D68179E3CE267363B0699CA492D19E1B10F76448EBCF72D18F11CFCFBDD7DCB9EF0C6000 98023E7A3B54C949F08882A3AB3009F3F446572DF00EE5AF5E0DCDAC0AD344496A5E456B CCE47C3CCC99B940C2C61197C0E5F91566F046686B8AE6DD30D6CD9BA5E53AF1D52DB05F D99BDC705233EC6C5B12D028DE94162DAAEA6DE87944112047FDCC70FD88379816C30881 6307CC46637E584A1E495697E368A8384F99C961D80BACE15805742FE63ADB0694D83496 FEC925F4FE9B62B6E77968AC94B86F8B85A8AB476861D8B4E132661C984FDBAAA6B10915 FF976EF310FC036E8C138C93397642F0DECF208C24F32B524AC2FBE18216BB13E0349758 59FAF0C53E10260D20439B8E2366922886FF43BD72E412F06DB6A783809345C05B5B4731 4212D8700811BF8FDCB9E91DB4C78AB0FA483F07E602711FEB5360B5D0D772708FBBC2EA 3FA8FED6FEEA3D477572C70821236EE71CF9E53A24EEC4886CE3131862377152DE8EC69F AAC337191F26C1E87424324A65D98AF27856E58501D9C695ED9D62C2E386E255628D8CFB 92DD8A6B49DB5A8BD8BEE02E02ACFA7B964408E73FB9653D4157D88B3A614012C607BB24 CD54FA28042BCFFEB2560AD5FC7FDCD8133DDB468F7281271CA27DE2B595BBEDC926C08D 854D6ACF260AF14F585BF0CC542F37984D627B4F56D9BB0CDDCA5F1B5B995CCC58A34F4E 7E51062A95FA4384E438AD693FEC327689490BEFDA86B25275240A8144530B48A746BEB4 1BA7EBF084EAB5CE2D4F4B0BD6EADB0110C48A1D73804E6D6B3E864C44980E503D70C888 55F2C59D8331CAE3FADF85E715C5430D3F24E904B127B00F4C8DAD4F6EA76B85DE815B7C E7201708E5E647DF9080E088D5A788F6EB04CBDA274BE09536047A6BC3855345E33661E1 C6C210FB90085A54DC2060208FE7462CE29B85E12C0102375D9CB642F51DC5F76B387163 8787E3B4F9BEA9F4C1F0FF0B7226F2E503808C984DEC73EF5731C287A10D1B9E8FB9A7F4 37779C7B55BF07CF22570862687EB3CAD49AE1BE34EA039941B201FBF13F74A1C0342391 EAC673E8D2C73D6AACE855A0A1AC0DE8BF1B321C6C4C6B34EEA836994EF98E0A1ED443E0 F9BE2115ACCBBEFD621602BEE306D4270546E9C1393DA12FCAAB4CDA38CE04E108992349 BC857392A6D14EFDC5047E17B32E7198E73357DD9567BE8F527ABF3F1E2893EF83BEFA4D 88F7F2B08E6A3120EBDFAAAA408E8278C4D4FC1A5D4F4DEFD959E669C2C3C787E69D23E9 FDEB7351A475AC6439BB48816830A38EDD65E411484929B44585DD4258C43F6BFCA773FF C27F4DB37DE3FC8B0DBDA79F446A515C519C6F4FA1C43AB587F21FEB95C094A3A3FF8763 2F9AC97DA2F74DCD855E8008C3006893397E9B743F096B9C6826B410B82F8FA964CF24FE 244693B24F83B8959E050F3541057876C1B5D0C9E4B65B24A9CF634AB497A617CBE0B9B6 AB3DB68E8955FB41793949E528777789E3E19EC82878347686130CC8BEE80BE21CE3F3C9 401BC9DB4B57C7D8115DBFE8DE95A0D2056475471D3662E632DCDCEA7F43E9D90ADE8AC2 7738B7027D1D16EEB57EC6A589F1FF78FD66E157D9EFD96291980A0249DEF98BFE569B64 DFAA97EA454B7FA5E394F64DFF598CC6FE266EB560396E6EE83B69C71E6128FB9F6EDAE4 8ACC202EB913FF31686AC0234B6B5E477C7A2642EC86AF935DE17803D63A357C744DDE06 CABBE0119EFF57F10FD5941DCFDC2CCDEDC1C39D0A5908768D8214DD78272AA1EB4FC63B 820F46D6ABDA22950BE03F454101906D33421D720EF70678C17479664851AEA658B17DE5 496FDFA52D3AA2CC9B16429F913322F0B461336C2AC67D7532C3018912F8816F1AA92AB6 6DA9781D5DF09213993C7A12B5B8154D2516F14D1B3A65F01E98CFB4CA315682DD83EE13 29D35F7D4DFDFF8F2FFAB73DC64370ECB84B8A96CDCC24871720054487496A0E1C5972C7 43617CFF3E1E5C5BAC3803AF76E75F76D9AA801D0AC3C76F1C60F4F8C56B3A27980949BD 742B8EA24CAFCAD0400459C2CDE8B0A0262C1468749648FE08722573FF19F4FDB8625884 9B11D1DBE4840BD63E61C3777A1D6E60604C21A570A4A867B6D3BE3409AA8DAD91F59B98 09AC646E758DC4A0F8CA004B2D694122BA926D2DB941B0CC7F759F14BB1EB4ADCB9D211D E4E278C09F3D24A2DACFD0804360B32ED040967CD041AC3ACC8F3ADB4E2AE73E4139D9E1 57231C0B730CF1BF95B75352CCC91350840CB55D2BCDBC3DD4CCA10562DE99A996B57C79 D6076306F6B3729F79BFAE1AD8F118080F60713CF42B6407241900D381F594D62129ED99 0B6615C72FC76A54D564845FFE28EC36DB18D4F2AAFB298632027008264FA03610C27649 86F54690AC912E23830FEAC05088E115A827BC8A467CF0984400F581A79F6283E38D0F00 6861F8EA1E0556D05FB77699E6FD0B539B86012EC7C976EFE7605E701EF8BC5A4AD9F457 892D902418A9B9C35ECF3E173494B450A4AD1D8CF4AF50947148EF60F353CAD01E06D19E 294E667202FFD6A3B633BA94D2E4D82B8C184C35FE1FCE1788E6306F16D4784A4FA67141 4C58F79255ECF2AF644EDAF9EBFD84903E034A199F597FC72EEA9F36C76714489AE3F5AA AC4A0A3817228235AC23B55C8C2D520D9278E9CAA04490F544038065CDC8AB8932CBFDFB 9FBF31E961CE4EB3E5BBB7F70093118E66F95C97A46A383900307551A7F85B6333C19C92 98BE0002169678080330251B0AE31DCD2C2C8A404950AEAF76132D833B53B2C4EB8852E8 F55AE3DC3AC4FE0511B6033126091533A4028839C67E5ECA77781301E4EC2CAE3FF4F3C7 9A9302695862D848DC36B3952C2C4D1693DE3CF950EE09325DC66B220C95B27CD4F63781 7764075D98C06C8722B51220CCCE27F1F69B59CB18FC7D4488A4730C4C21F1859EFE5623 E2924684634E9EA338D2AA26A783836CB489DD5CE57F5448092DECCB9EC5151278A07B4E 9F7027F221487701EEBF903532F36B5A8F7479ACFE80F028868C249C9459D3D2614BC2E9 F3E40CB41E8B1D9521BC71DAA5CF6B29BF5AAEFA8D270230A94F136D63C632FCAD8CEA49 DC9C1863C7F68D008F6883AF6B18D74BE1A90B904960B78BED6B9B1428E32BB169B4062B AE3313A7454C436A15A37136703EEA690909C6515777EE99440E9E97D2B5EF9C8A1D8D85 8E5A47885B94D56D9FF8A9092E7E63E78C884DFCD0D698C7BFD44AA14C439DE27A7DF4BC 3E16051D9412F1EA0B8347812C77D8FC59E511618963C623CBC6C30E7A6E0A5B4524E3AE 9206F15177732DF1B59F1DE5AA0200671689A22693C18387AC216937B9F812637E38C48E 1450CAA02D4E3C67037ABFCD11B5A94E9DD500EAEC79C2F59F1FB584277B50B30631879D 2074A3B12AC5DB6ED3A9327ED6226E8834F1E01A87C11B7DFEC65704562568A7FDE68F1C 2CD728BC91BD9E4362735EBB373609E1EA276D5A259D8B4E814346756539E4419F57BED8 B2A6A08B87EC9867C57ACAEFFCA669C4F47ABE2224B0CB9C05E5C8DC43DE8F60A5DC7D9B EB9A94D2A54D08FA19DACCD61C907D0A1F717DBA434A0DC86A7FFC8E21E9C057B6D0F790 F90C047FD10F1B403F046B887C4356A8985CFCAAA256782DDC1D253B978E020F23F9AF71 C1D54958A983A48125B0FF55177866E45065838F78878C39594496570871C1BFCDF03F70 01D8CE5E9DBADD963714C9ECEA7FCA367AA87C9AC1F9BCCA7D3CC90F6847370BC71515AB 821669D04A61A0D1738A770A152D48FEA35F9617AFD58A546228A699708586EF38F5165B A09C5F038112F962D3A5473B18700E5D4D7B181D5083DAC09793EF2F10C1AE506A47DD1A A71227B2958D652E85CED409A80CDB70D0ABD8FBADBBA6DD335F18D825C39E2B08263960 E0D558B310D9147E62D150041B2BBF65A9FDF67D495022F5D92448A6229353556D97EE29 2BA8F3C521D9D001CEE006F611C3260B8779E51C426D9C70A9493D49E898CD261F7804BF 1AD5139EED912B3212A2CEE6D4107B24A0E6133BA5EBA5092FE02DCB9B3EEAE18EA38359 6AD18D2BE3D91A86226A3B6AC4F33B384BD70B265FDD946934916C017DDA8E6E592CC2DC 489C0C0B54CC3E0BC40FE775CA6A886AF236B6738D22691B25F9C9CB1F42E6BEEFA7B398 09F0051BFD0D230EED8808A7456D9E30DE230AD94D7B4C52C4393FD7FDDDE0855882D2B6 05DE8EBC5DD8BBFE2036B8B3B47E8883E412F598FFAA405AE7C1CE38B5B9DE93F20F68E1 55FCFDF67D2388089324F03722218818A6D6CC556B7121F8A2A7F772EB7CF2E4D3A33BBC CC8CBD92FD0FC81B291074BB5B613A0A0054F993D02E77375BC0DD83874B035A3A53981A 5F158B4D67BFED8A94806AAA6D7E896541551A0B4D2C374743217045AD4163306C8F61A2 D178FE8A6978440738C97083D505A3CF4EF4CFC5D737068064F4EFCA5688BD385BFA3EB0 602D7FAA30C4520800CC52685FA625A0A31DA98BFBB545BE43CC513CD84B5D73B7FA55B5 D1C72E93F00FC1D6B27DE359E09274ECE479D736B1AE6EA24A043E05E71A63A4556256FD 16B98745EF68026B3A3653720E7B250FFDC9AAA7ABF5E2D8428D248B1063637263C76509 22F2E29FC4B156013689C9B216D65B3C07375C300BC7697A79FB6BAD302A08E0A8C4E53A 7322406113E5D26BA893A0AB34DB4DCCBFE006A57AB959A958326FCC8C16A90317EEBABD CD816D4581CA3E9840CBDC9C4461976B03EAD8AE3D4D93DFE3B61B6D64F451EBEC42F3EB B3440E2E6785829FB7E9F97D9C29E43D03D81F64B471234EAC755C25C0F510FA5528AEAB C9D8B75E77FFC35DBAF9619774CEE2D03FF8FF39E0B5E1FE9FE31EDF416659A937777AD0 BC42113FAA8C167F93384BE29C04CA58FBEAB6AB6816D0E440F32AD583D294CD8739FFF4 972267C305099210F267844EFAAC2F00F51B1D7CFACABD3175F719BC2C4DE7714D4D4DE7 7F9AFE1BF0ED5B3EC38CB1C4743678669490541C539477AB573E5BA981D40013E8CBF664 61E5BA049A195FF608D6320E1196C7A8DF8B3167BC546175ECA2FC62EADAB42082457FE7 D6A824700FADFDCBE81ED8608EAA4A37D09EE3E051BE7A682018D8511C78235090948E8B 13ABCDF9A357C7713D31380DE6A2823AF5DB0A6F65086B80EA65DC85254C7DA91F29A4E1 A9F3EE67589E2AED5511D6D249A36CEBFD954FD36782522F480699DC939D7C53F1D0D838 D3BBAD95569477046CEB1FA6C2545BD79D8348F67B5B4C88E61941914FFAAC3FCCAD8247 ADD5CE176DD07DE87FAE5619C7080A0D46FFDED5342318F4CA29D67380F1E84738E1F771 477AE32B0F2A59CBE9774E817D1171B19EEFDDA640F6FA26FAFCC16F487082361048564A A78330121D7706973DA2F7AC521C98714EC451AB58BE1C6F1B3B28C7D265623648FD6714 73701ED4622C5CEE905D4FEEEE806627F5F6A87738C92C38B6509944EAB54FDDED928D25 E471EFDA0326EA8CC2D3376386656AD639A8326462D453432060D48FCEDC86476914DCFC D2FBA5AE847A1A185CCD1FE2FF0AFF410D6246A240FABEED4DC4B43004731DDBA9151323 273DBEED345CEE164335A0028CB83BC21D7BFFC9C932CB266747CB072CF6049C11A4E032 A701AEC7D9D2413E58486776B0080F12D90AA175AFCAE4E4C16858EFF34E0C0D77CB0C52 C57D24F232C6D89B727F18B79A1CF5B88FBEA67117F9F5EA63016E8FC9EB4C6FDC6FB9E8 3ADA60BA8A597F354A56D49F1113EA445B377FB1033FBB3E8F413CFE06119C634AD8F2B8 35FC2041759BBC27CBA4BFF645DD6D76329410D82E7E17335BE8645BAA7A6FE2558E399D 76FD1FAF9C75335F872986E706914C8F87471310CA26AC3F7956911B1839557D9A8F70CD 5B197A20669F09C5E2E06DC403E121654790FBF7598499E6B2711EDC35F2552BF0EE8F2F 9B4E119464CB2894C385176E54999FB37565596089965505512C3A56197483E2AEED8643 34C43BF1790FA5C8308DE697A82864EEC15F0637C76B7E07610BA1B9117D93B546678844 A5CD77E5772DD33F36EE8FAC2224C75338B222096000A628ED2C5458AED853028F469F09 7129015D8AC9EA5D9DA4E1A352F29F069FA74158BA2346F7517CCFD8957FABFB220930C9 C164F9451955ED766D78D0391FCAF965B9B05487C88DB06E31E49AEACF39C7B4AE07A02B F12CDFE28A9F64DB7890533FDF90D2828BC12155DC27C92A877D12CBFF16DD187BC906E9 C0067C4290030E4DAAB20367971925C1F53713226D0A5EC48DB18A4AA340EC269DD76156 0DC2D6605D2CC96A891B430DF8C83B2133DD9101D1CA954B3C6B71DF1AE09BB7766A6D72 BA0A80BC5CC3913A633E6EAC70503BFBF3F5EDD113CEE10B250887C0AC43223E507C8524 C0343729495DF2D9B04A6830EBE6A0AC02B3B132CCEC8997000FFE30AFD60ECBA013D263 8051A678763902EF73713BA0F7F48B912B6080C7A5B8F665A34FC767F92EE1CC75EAD36F DE3765BA008F6CE60C8BE1E521118C32A62154558B8477497A537F8C78204FAE6BCCE62D 96B524425162E7A5955EE933F2544F9D3958907F727C92EA0B8805F998B3E98EC8329922 68027F532D31CFA5851C24E442892BBB739041E0CEE3F118C08D3D6CEA621C8FEF3833DB 91772363DF6D1B4F6FF4CD7B128B4D327C8D9B5A5831D6E184A8464D8266CDC99C989F3E 80D83157398A7FFCFFA49193CE1E4DF6939DACD003392F64603656801F002CB9C6F517A2 4AA432364E05D9F6CECF6030D97B3AEE1DF8079360AD443346DAA0A492150F1121F24F62 0E9D57928B98F763649C09BD774032CAA873898E15A7C48ED8FA8032B167AB967AF464B3 14E00604EA01B236F6B27DA56C5D9830302E3AB9D8FDFA4696AEEA6CB1269F402413F502 D18AA6553D77DD621AE65D5DCE5F52FB1DAD22CF4952650FC18B5039D89BC761D44CA1FD DC355FB6BD6654A656143B8EA3BF904248A403A393018F6AED05BB0E76AB4981CEEB9B02 A211131C52EB01F5D0AA52F096305F0D5C2E124F68ED707E0F155AF96EFD343CE4E68309 DF914D228804126255010C6F11294785027A4861F23B964ADA20B845E44AEEBB8ABC9C10 482B078D2BC315D751E300F8875B7BB40AFE3BD096AA82050676BBB92F1C092367EFD9F7 71D95FB788DF59B5F7905603C3B29F30DB82573E9D11F6E295E7893E643BD68608761E28 7AC08346ACE380012C697F8759F80A671E047B7D3A5F372F5FDA3211174603FD3FBAC920 EE02E663EE2C783DEFE0EFECA54EA80D9756FD3B564A5815AF6F044A5C2AAA6CC85B1D25 08DA8F5C15F961E5E82306B28C4E998ABFC56EB7BAAEB5790EDA3E23D583F635A554E6DF 7695F4C48D0BFA2951C26B0B676F9541EA0AB9F45351A7CDF0466D4BF2AD70EAEFBEA634 49FDDD0BF717C2416D12231C49CA5ADDFABDC3BE3245BC851B895E88F9048D9CBD43B07A 7C979280D5F9DDA1B738CE146452D063A460F8C16AB15E3546456C0785977AEBC2E8B810 D6F64FA4166C172BA6C2FF8338E6A1FFD62C6AB54B85F69ED3DB1EB97FABEBE2C0327F89 5A73838CB8425B9298EB707AE6D8A2B228A3057B2EDE76F94676CE98773D1FB0AA7BDBE8 E82162D0ED291ED43B5591CF7B0DEADC53C1DA14D2BC55FE882A93942E84749B99AB46C1 3B7459092F65A42025F59EB10EC212D258C3CAD121D9BF3911EC053B764A4FAA054FE53F F63FA8D97556531000AA9A157C0E226E8A9441069066448F0EB38F689DC94ED51B2EE745 EAD5A7475D8C62D22D883FDA0A86D336C59F8676FFE252C165CE5A48A85D006717267246 E592EABCDED46062FA39E98912F7A8B4E84DB67FC2787627EE83CDBA71EDCEC0ED151712 890AAE73FB145F36657B94131156119513C3701E908F1AFFF19B97790479B7AAFEBB2406 8331E5933056D03DD74899D6757AB952EF8FCBD13B129F1DD116E9183A562D0A0C56B1D3 79E0D8B6002BA1B01A8F0059897E1CA0D0131A55520A922F1ADC9B13E62E040FC34BE3DA 0909B1377728D20F6A09093544E7144C64899C9B3967DE4E7A020FC245DCDBD2D14764D8 2C2AD487D2380CC1CFCFDD3A331EC8FB268BC3B698A22BAE29A804854F4262603F7BA76A 4FBEC34E2A5D46D8E4DA788A20896D02A4153B3936CAEAFBE6001709B8768D0A1825B8AF 5D3C8B076ED6CCF227931F5F67D68634FA007F8981ADA67FA33FBC73AF1C21BC3E25B603 6C62C6E21AB81DFA802E71A7553C64C94848E6C79073AA7FDADAB0934A82076A30B3AF4E 89C046F650D036B2AB8AAA8D534009BE8C778FFEB69AD043C288D4E1CC5EA803019923CE B180EEC0D18418DA500C32D676FF05B36BDA453FAFB54AE0AD71D5EF7A26D4D72103B83C A8F9548014AFFAD5C88312FDA7D28AA84E8AB7BE3BD0A70043C5D7C71709986B0E82BBE5 55E2565E8584979966F496FEA5CE1B1CDD6D7E1E2A6B12F40EF5BBC2C9C761453DCBC8F3 2886ABA6910365777D4835797C815D1358B69D349E97D7C99AFD83A719C5C02024B3301A 7096EFCB117DB0B0F8E57B960B579CB403CE3A84A7D00446FB1C2A090AF03D4F9882B26C 93AA85F784FB36BE683474B2E22FEAA1573B0F497D1DBB028D8614E4F69A376C9FFBBC5F 03A1BA7B8758723045581B1A16EE3A01A82C3E0CEF4821E27301069DC1CBA7A648F7EDDC E7D097C66225621F2A42F3C1F973CA9F96B31B6C8466C40F22F2334343E2633044A10F0B D883DE68240C74FB8B70FF8D47D5596409655E18E730825DDD0999FD2F53204045B48596 C8C7E8AD951EFE51FBE3412C3C3EDE20B34258735489F6762FC89D68913A06F05DF7E323 9B75F6A14371E879523926E4D38DFF6BE02F42C25DCFFB34C7B15D8186EB1DF1C16773E5 929E1BB1D4C578BB12592805AA09DFCEF40E70117FB163F31C710BD4C63712E2B077F9B1 9355EFD0EDD9F855A05FF9993C4F7F463A6B4B7C93B8A107A303513BDC706D03B1097269 7407769739781F4FC287BDA16C475EBFB0E808C7E66BE894C844AA3AEB2F4551DDF848A5 2660CB95809007C08BA257128279C59AECF123900F3DF2A7F665B5E465F81B3B0353C17C 0E841D790566B165B1931C7E4FF8D8C85EE39FA5E1D5B95D1796C795BD9AE1A35AC40484 74CE5AF95117BFAEC24D284A50F9F205F7524BDB04A711A330D17F0D3FCF1DF0E71FDBBC 260C92502791E0D9007DA5D6653D0179E37360E43CBD293BF29C73EB3A286AA22AC84205 55ACB4D0497FE9200DEB308F6F949E066929D6039DFAAACC0024360604B5178AFE99733D 3292F12B52E73A7BE960945024DAC4CF553ED9030B5CCAD9EE4EB3CC1191A0354BFE6B1D 5780C905ACBCADE32DB99C4BA864F3FEC5B6D75B475868AE97826E4F5A7BDEF178B16E2C 88F3B13A67B51AA876F32B0B32E956C5C4D14F78171844E210E2BA4E584D1D37C8193AF5 7D9EAE0BF181A3BDB31872BC5C3A3A4973B9F27239AE6DA7C26F6396D137B168F36A6280 D594D5657AF6E8F024F800CF25449F63F22EDDCE43ED829C76DE6424A11FE439D20EF38E A41831B14AC4046C27A87C8ECF6F4980233B0AACB67B3FC96E1A3B6E7FA7FC686F37CF1E 8CF78EBE55ABDB30CB3D30C341C30BB4761E9C9597DF2E55136058341DE481D20DC8CB16 686869E6DA641FEFDC45827304AFDD7999139B90A4ECE9E528F883EDB50B45405D0F9ABA BC6BA8BF0A9AB1C6F8886FBCF623D5ED476A2AE095D78EF16DDBB851211A17D8CA9DBCE4 B52975AE81C12B4B1E6B573677F8666A892BAEBD5F9217FB0ED537A1B39A3E08897AF945 7D58EB9B0167101C0CC34540AFE14A85F7C76BBEF2B9A209DBBAB7C89863D73FF9D164A3 07C680F1315C1B8CAE4841252EC14FF65869B39B137688EF2F786CDE6BAFE3AACC1AB637 77D1BDE722D0F94783ED3134B0366DC4A549D5DB7B7745E6FF75DC3E1D9167CDD18B3DBA 693AE47A34544330A9A7C708E0FF36B7DE1CCA492C3BFA3B7C5E4F54D0FF540FCF6E03EC 0CA0897807AB1C2EF7456E422EC31CE2F7ADAD1AAD3B1B310DDA21766EF1BFC413C45D08 D35348D120130FAAD55188701D25C13B13165BE0E897C18C172A58957DA02EA2DB92B033 0EE9935EFCB5F7256FAC076525DB39FF5B594C8D4B377F6C451EDD0C88F50280292C6B6F CAB84F7C37623BD230DC9A604B9B015B66F0E899BD807D80F5F52967B48A75441B21D610 1D440AAAC9F839EF3BEFE24C5DB3783EDD917CACB8F5170D1312E0E69D04ABF0C4EC4627 5895B14955759AFCAC5C084DD4FB8D40AE85CA83885F5BC46B7692DBA39FB3C621B1DE25 688058BBDD206EC5B3946D3B26F9D1A1579E27B27A5E810DA32393F9F95FF1C4FCA0377E 6CF8A57CB4AC0BC0CC988FC8CD5CD65AEC5913B73968294477F86FC413750F1805F36844 DBB7B9CDE2F2E7FF54D165E934F9161D17C4DF6709231368D150C488FE2DDA9E8C2A65B3 10DC9BE5842F355C7DC515DF6B7FDF02A6D172DC32E88EED05A4903919EB6C563C934921 6061DF6F504F3EF9BDFAF8E7C2F8CAAD325F6CCCCDF79E4997FB57C9CF14CCCB57661F55 87AB972B31549F0632B96D5F46737698D66DD2B0FE253075BDC66F7C1753472997780A30 89FA2B5DB6526E7ED5BB8EE332BC70894EEA15862FD307B88A292FE412AA1ACB272B51BB 1829FEDEA0C526303BD09349BE3300F356D71C2D5A8860AF2EE49E73D7BB4AACD6577693 0290D3AA7F591A990A51630BFA041C3C1A2DB4C7155F8B70CF5B1EF820E0E400D2E487D3 8B02BC8D84DB0AF8C189D52684E1388F282C6C728220DBF04B3E55955D36C20F65270D36 BB22BED8E3095C3F1BA71381605DC0748E9382FC129919EBC85B39CEB1F432A84730B348 A162809BAC8BC771D1BCA4615F0E3987FF6C9602BC0103566275F1C5AB62311BE4BF0B79 A1B3A16F721D0C7A6C93756EE72C44C02DE5DF9011B10D44B2D5346FE62401FFE5E9B480 284389526146BBB5C7218BBBA637C541A0CB441A981EFEE5B2A6E2FC88A0D648DE0A267D 04D4A9FCF22C2AFBEA0C102FEE5B9962F4DB46ED5F7C8A75B950D769C91FE7AC9CE7D715 D55DC63C4D381778ECCAB827CE5DC5BB2C297D2531D3153CD243C4FA7C8ABC2B83696D43 3CB199D8BA60E6E622061BBE616EF890717E6547D9D0E9699D67D662DB30F3D87152FD6A 9731A6545EF654CE0FCEE73C0989BCD67CEFBD0E12C33DE6E140EE8A28246489C2AD7EBA BC755B3F7AF473E885DA89B9565AB5F74BA1761B1E6E4B783114CAB8CD883176BC34B87A 67ACB026515303B1835F162912F0AE1ABC66D4E665ADF9389B55DB6F81600826346A2242 4660DC691CE660CA3F90B7865758AA91ECB96C877C2E048FB0DE7C5587AD80A86BD52353 030EBB28457702A66F98A886E7413493B6EC79F91BBBE44EAC519090F9E66E4DED057E45 CCA32FD59161967A5806AE10EEECA2586130424D06D1EB0F169953C5BEEC9FFB3E1C4B5B 37ED8BD27D31255AB2DEB549B0667712A083ECC39C878C85E48E4C71AD04B7ACC5155EFD D706DF473CC867FF99B61DC17487F4587ABE36B497485CD3A06420C7C75D13880B1550DA 1ABAA4478A6A89EC90A018524D019AD68B93D1F0F6A2BEE1D7113DF85B036220334A357F F0B90F786D533C4A7BA5CD0805CAA16079F9EF34E0609B071FA5EC664F74DAE6315017AE 63DCD30F5D3C70E101CE6F161A09BFA78F1B0D2EA07D06F653DAA315E214E12C75D947CA 6136E7AE138271BC236544F73CA43AB0C4C8AD797C73871F18A6DC356FA3B8721020EC1A 47F98D714C1CA20A342E982E1523AAB6937440A5805F3E99CAF90421E34E15DB7DE55C11 B84BC6697402C8F58A147305C205BB23E5ED39106F5B1149AB9F1653A407A9607798E8F9 FC0F699E11C61E114F00D2649EEF6898351CE0F568C53F88FA91AB4BC625D912814EDB4B 4718245EE7CCA6CD94FB7E5B1C92C19C7435F7CA6CD6BA42EEF9822BC5C03EC47EE50F82 4077A4784BF8A53F87F8859C1D4A743124033F4FC893191C817A68785AF7EDB65F18FD08 0EC8325E52386468C4216AE324410BAC3E2145CA06F35B775E3410B4323DBF9BA34DFEEE 6FE7ED67BC62E7C85B631FF19C3A94F1F6C1B92B868C3D5DF0652C763F056E09C1963827 FD12624E6C4E42155F7068122937B34EB8A766EF4F75695548E3592A048DE79265211B2F D2E2D95653A705BF006148BC902B0FF1C5CA7B56654A8A56DD6603C77605E762EFE75477 BBB0D4A6B5B4BEB4025C0B1436A6CF4F3502C0521533EE2E11F7956C7D1E80BC26B4CBBC E63F080EF561537527FB7FE8866F9820C867363D8F50B93F768DAC6F1B755B5B58A88FBA 5074E3B0C1A7AA6FF6E9239CA301D7F6495094DD2B3B449E16C1797B260272E89A7A7085 523E158B61EF97AC2FA9D0BDB32958A4CF163694B7AF99534CAB71C9E1C565F9C210BBB5 E34E52823582773D1C5E980C09C8B2000D06D49F76B4E2EA60F23E9DF2738663CF048754 20812FF2CC1C6D050D2C41AA0D36D75F756231C65E08FBF6B0F3CB18322DCF7DE47F2547 9A105F5652E8131C5F461369AE741E81692BCBB946834C66BE4378935BF17EB75B792317 249AA27768070221CD4B974DAF06498532AD7617AFE36D9F1CBD91F807C0E025D3834066 9D9E25F7D2D2E44820D2C0377D205A6568EE896DF5DB45D1A146F17773B1F56A0EF3F767 6AEF65D3B11DDF8F12A2FB0B8B5F5860371776DEA1FCBB898A8E1C76A0E3AD1AEAE087C8 F4409D9C320A2CCF8C14C62FFDE3D53E10C1A736768A8D4A4720EF4B3876A02CE89226B4 B9EE8F9C82F756FA26D595F2D191D133B50183674D1FF3126B4E6332FC00B36D9284AE46 14A93F4D9D4D96F567635723A0DD25271C91EA4FFEB914A0D33120389971CAAC3FAF96D9 AA61586BABDA6A4B3280EF70CF07A9EA45615B47098AD856872347BFDA028E8BE42FC607 A54076C085C463494EC67358C75D37923DE09D78AD7FA34C73B6BF8AEFB18C5910D4303E BEDF5E820A70E64FD4BC14DB20FCCB4573EC4BCC589E8F18C7F549A130B544ABAE5DC752 58192B29EF750A1B378A4160A4BFADA55513C0ABF4A9FC371E6B5DC6319ABFAA4235D033 D88A128420FFC0C770A060B2C0BEF36FEE075F7DA1B01853D5C9B29DCF0E4CDA6421E341 898613AD507B427DC43B25FFFA60A1E64244BF33E7703FB835AB9B709350940820DF5C06 B885B6CF0FD6004F265AED80B292455A69D74BED7BCFA3594EFEC4C0CC9113AA7A277E66 E13009321DD4D0E9F2FFD232C18A70B87E7C46368124AD7D9E7950249C83DEC612E11EEC 8BB1F6F660E82638E4DEAB99B6B256EA5683EEE7C15613124A6BAEC4DA6B5635AED75783 D3AFEC747C9FEA43320D24A7C87E455B2B0C87598602D39D4D396D499C74702D75C838A8 5F70A88047B3BBB38BCB1F7944260018E772C4A3EB89D27BADB4E87FB3B63589B5F2A81B CCB778F8E76EDD65DEF41D3BA13971E88FBCE77022D3188E74E1D3B6C1DE52577889BCC8 6E66F4A2E7649600EB994B741E6384196743159F2C025D3774C6389311753E67614E5372 C703753E6E17A6ACD2BDB3B7C719392897470694E71CC3D4F2D6D33492295F1FC2A76027 BEB178F1A1C5442A69AA337B1C5013D872E96EB91D2D68C4B59172CB05115769E2070B59 D8B71D9FE92C2B1AA656052B7F8F3F025385FB26134DD36A31DB9BCC257E5D50E087B9B1 D31A805FE6A54ACF4E03123203E46AFD759885A372AB4B2DCE573BD7C49D249E6CFDEF80 ACA6D0F713B35BC0444F6468037A055A6BA74F78933E593C9A2119B644ACB9782DB0CD6A 30FF5265C7C3A539F511B9A655CA0D78614FCF648790EB8390B2BF4A7B0C36205AA36885 7C7C542D77A5F851CC7BDFE8DA611413F023DE27B3B750571D1A43FE8E837F235F8A1585 FCC2EB256FA6E68076DF5DDE9079BE9C6D67AA4AEEB5B8B68FBA2FF97630E9AB5B6B2DF3 6036ACFDC7E98139614D1EE7E99EE62CEB663920E4C71E2B49DE0DD5D0AC06FF14511C4D 926FD881D2B20A3CB400F88C5E42F1D9EC2044760AEDBFBFBDA19A3B45F306DF892CA283 70CE512C2EA5DB4979E497A36F7791835EE7E519677FB81D6F0E6F3E6F97122C80E752D5 DBAFAC7A9500743C906ABBEF4E6F3A995C1168C783A45FF4F88698A90D4CA7CA21739333 AA63DF7AB55E55305D2D9627B0FB0FE786F1799D4E1DE98AF0244AC1D1C1C29CD062D966 01FFAC2F063BA7A6A923D1793D6A6EB92DD7BE6B3B5E6168235B77BAFE1BC153137D64E7 E8E5F09EA2E0F0BCCF88868DEDD7044EF00F7142262AC900A851DA2850F29C790AA473A1 6F98BECE5719A1693C9043D55F1A5F4617662625F58ADB35CF2AE3A36F2B5CA6717BE427 562BB2C05370FAE82A736B8F1C6987C92AA485BFBD93E1E6EC12CF556E37AF91C8989779 851230E3AF162776323674C931EC3F8D3EAD66A28A5F1FE19789DC1B0132A8EF43560A73 F371A6BD9F6346460C5A18689E87BF918C72983E2097B178DE2B10008A79BC30E640787E 8B5AABD3A18618525BC3C177FA5C2ED47C551BD0DDC23B776D201E3CD326AEC7663FCEBC C6CBCCC6C32E2BD73FF879A60F55EC15B5E94277B9EE973E779FA73CE42008EFD2BF20A2 3F9E8F914BBD95E9829AB69D7544BE89C00691B5DD5EBA84096A8C0207EC65515F134992 37B543BA0F30449FE27495E0B6CE6B11BDB71FF72D277E1D6BC02FDC440409ABBF9F41CA 5B94FF0078A0682253F408324CAB51CB905B52AD5F23DEE33CBD5F860B487B78FC3779B7 535B21158F72A1CFB319EA28E5B619724100E740E66400BC2BC6C4F5874C6248C15AB68B 2687CCCD7194FF9EEA73B173550B0D8F7F1BE654FA095A7C10102B5217B3C02E358AA6C4 58379100AA6AECBCBD1DCFB56EBF1D1E3CD3D64E5DE6CE3A6458F47222233179787F2BBE 96C4D91AF9077F3BFEA7D2D9C6C790F3FC9BEE57B99191EDFA95F402D6C53377948EE795 9535E9E808E44E7A1EA34B0D130183BDDEDD25A63A8A0D9F73DD354F3D9E54DEB4A357C5 9DB35E85CB900A922E200B03323F6B7AB5850217C4D0AA407CE703FE69125F6BD70D8711 3E9C9BB66869ED3975DAEEB3A4C7645E9CD47B10E6E21F80E2343626A20058DAEE154837 26930B91BD3E0015914B1664A5677C40C64C497DFA1369163742F2AE3CA519BC777565E9 52BF32E5F8BD52B119F499128E71128841F0CD23526C1B7FFF86F50357D1927382FA5C26 9537EF6D134535F89547B1B63DE6412715ED0DA7E76DE196304E78ACA81EE688383D54F8 72A415A5D45EC3C42BEB8584988CCD4E9B6AA3184429F7C6DA4543ADF65102E707ADCFD9 37B6F84156537DB5D7607D7DBF0C0ED694746DF8EBA3CBD237148966382D444C1485D3AA 28C62BF1B9502582AB48F8599A64CDF42B40860EF23C7C1DC6ADE27A014B8885CFD76421 E231E4F843C4FE84178D16A2267088A13CD72C039A74A9392731BFC092985792002E184D 165CCAB22C9E674EB93531847EB9789357385911AE33F3CD2F8B27E6258204CE411AEBD4 6724459F3160A026BC0A1BAFB3BB6955920A96FC4B99D9CBA2DAB8766E85EA66A77BA4E7 450D3B08081E3DA7AEA3A9E91906EAB0985236991AE4FC1B43E5D645CC3AF2E7DBAA993C 0FC04D5581A912036E1897826A395F431EEDEB4B97D1222DC6F06041C29FB1E73BFBFBD9 3C21961B7983DAA7D1ED0DB35F6C43DE47E7223FE657C0F402B705555D5460B64BD0336A 217D687EAABE2639DBAD24D4DEE08313E080299DD1977FDFC6C2154A9F7CC7F34148CF4C C66E39190CC92B622E3F47FDC9F6A08FA48A5C6CE78E2E947BD396226D888F5FE3BEDE34 046CC4E8805205E7C05BA51ECB994BCFE25DE1D047A6F610D196DA65273AC7BF1D472C24 59D8EDD9EFEEF182806C23C41D245D88579C964F672932B4643D9B7E7E49708136DEADE2 5E0356C67BD05C02007F1A5FFB4D7F3728149760BDEA7C6077D2EEA861E597D895C1C86D 9DE036280AEE513BBFEC6E1A4A2D5A3A05B3D0EF3F085F9E94C8148D75FE489CA589B64D FBD336935FB53B03B2C49F7AE9A1F4C91794555501B7FB34735C9B051E222C95B0559166 729B72CDEC3D88F1C8F5A7FB5F26C9F80A52291A401AFAB5B3BB9E859BB858CE57C78240 3F32C228ABE6C5B993C23F46674F76757C68BA6563577C09A59D0DEE3724199CC853742A C4949E9D98373CFF2B35401CDE1CA0B4C03235940F2B59B0741338E881944794B3FABFCC DC23618A3C2B5E857F132E2E72D73A61E45AE027A5501626B678B456F0121FA8376D89B5 E56968086E474DB0FA7EF6092345273CB183BD2D817E971C4A245D66F49E557476BCA876 1459847E72DF1A005C29877492C5C0C3E28D6EED17B80F08DCAB021EEF8B790779A270F9 339943DBFE566244A04E42D69EA1C1C82415474321A98E77825FEF1894493EC32971BDD5 A57A2F861B081C366EA987CF038D58B37852685716D5511B822F75757888933BD878BF42 5FD4554AB3607A4EEDBE1480591BBF4E56F519B07D29BF134A61DE9068EB6822FB84BD1E 3EABCB19A752AB33CB5E87752E88656D7A1D7017C0E16F2488F1C43A1698E894CCE0A2EE F99C82FBFB9E47BACAAC0AEEDA9A3056BD57A2E272ADA9B92E5EC4B4A47B5BC5DCE02B3F 69E972BD8F6DA60C1516AE6863409702EDFD9405FDA1C6DC1A8FCEC87E28079886FA23E0 98E49A6C5FBB3D6B70FD19919FF3DCD9BF2D6A5B4B30A268301FA6596385A72F1A9F9508 F729CF5A58D75B17A96A7534A2F35AA63B10DEDB502BE8ED153439C156DED3C4D35D705B C61FFBDC1F499E035145F5C479C4B50BC9D234225D973D2BB7EAB1A39111CC386BF5EC19 6EAA330FD573565C614D7E8790D2B7A490D4BB27CF1120DD9AD89C5A36442CAD499C7C54 3D6CD17B378A4DEA63F8A34FBF20B0ECE90B946936CD38781BAC96A6F976082C822303E2 5B1528E9A9C6861A2ABFAB9760DBBB5316CB8184FCC5A869F2B524F965C554E245DCDAD1 90717A1E98CF55C3338959AF346C4B85A787D3F9EC763A329009FA780B94D3F76B46FE20 430438F9362533DAD45B56C399C041E1C9622CD4E6CA7600CC0B21257190BA18AE6FCEF0 6C704727A3F4E1698AF7BE1FF8679060529875EDDF64B32CAE28A9E3FF544B2B458C006D F1DAC11C924677E898828D20462028F84DC9F6AB7DB7113CCE72FF03A791928237C6FA35 D1C6606C2C05CD4635284C309939CC5949F9E43CC15E585C051B531D31B7BC26339947B4 48498268E9950EE71DBD03FA31D6496834A7096C211FFCEE694CAFD819166B4268320913 DE2AD050760B17479106A3690D80D51783A8CDF048DE79938167DA58F661B4073CC7420E CAD3832174C3049435AF1FF9688F5548C4DB5AC8C6856130043E62BFC358BF991CCB566A 6C6DD9535982FFD14BEF07F26E1C75BF71FDA688DE5AB1F6047C0EEB2829194E0DF7B635 27D1841DDD55A6B22108E87233F5EAF1455FD91EFA681F7D3A6A3C763F69A5446FEB4E67 A316B21ECADB4FF6F4A67B4356DE08222E8E2AD8ABE3DF48F0D31E9B230000C95F5C0E1C A6305365756B3E0F398324E6DC04B7A9538A4C335539E723AFA8D071EC571035F56725F7 9E5BE25F17B57DA767BADFB3CFCDCC03ABB9CFB717808842ADE17F00A88F36C411FD61B0 B2693193608A8C0FB114E9D040CD7E9A137D57DEEBFAF5D229117372384324B565D5185E 43B4CD8CF452BA7492A920E817C9379B65B62B590359BC0E14FC16DBB6F8E2733507719B FE981CE11210E10F10A52CF6600CC0E578094E1FEA48DB149A32700B6F293CC2B6F8FE8A F51D35E6767DE92545A6BEC52D1B8095E5EFCA4404FB9482AA39BE213C6D532D04682711 FE7E7854A93F7F86A581D3DC313572FD5A89C48A50F0977570107B1F499B677FB0D2398B A413C0156908CCE938ADD56210542C1A3EE892A4A0FC919E9F3E7CF563ED1E92C45913B9 B8A8D2B8E22BBB84A4744E88A4D79EFF163B7FBD2445043AB2FCDE2656E37B42268AC00E 054CA6C1051DCFEF4387D81ECD2AB538AC5779096A6827D864214628E1BE4EB44999F2EA A99BA68075577DE92AA5D0DF9C9D5F008655C02CA43D7475C6F07CD50048108574566A2E 830495D16BB3D96B6931232C8456B266327CAD992167A405D4538A8A720544AF435A20C8 B39DE28A68599013501096847C1044885994CB89887F5EAFEBDECA75FF664832BD337306 918A353E49A6D8C6F241E6C92928016FE88BF03FA1318327718B282455A7689A4CD3F85A FC3C498554B27C6B5EDF0A3213A1A71B1A5CE3C95F9E83F4F8874B040C1565B1A1C5F7F2 CEF12F6C87C13184FB59DB30F02BF4AE973A67A190EF6EA36B95DD283DD50631532BFDE1 5BFEAF1007EDE78E5B891FE1FF285DACBA3B83256960E9C042F9CE3D2069BE4C1C9794A4 506256099BA6D99EB7BDA0E9AE7BA91D2278FAC2DF855F02FC1B82B812C214C35472AC3B B73F6EFA03DB5AB0C488996C06E838F7CCFB46D447DC6DF2185DF06C0765E5277629F9F0 BF4938CF3C2E0BB2CBC1C8778E455016B2A7BA1D462C0079465DA78FDA81B6064559D74C 9B8B106EB5E68C7BC95B0B8024276CEC3BF8DFD3FD13F8A68ABD99BFEB39A11BE438065F 85EA7FFC08F6A2A0C4F05F1AA29EBF98B6E11858DB6B568BDAFCBF68B434127B0665AB26 BFEC62EA580A5D8BF744899C67C79B56E290E7EF5BB89268463E9377336D8E546EB7F838 84B66921973F2419DC6CBEFC238E36BAADF81273A283B131249B3B124292F23A09101159 F5BAB27181DBC3EDA64E5ACCBF287895B860CE3B979D7ADE27917FA60401C5BBD02FBAFA 0B57D80D6E0E9FAB5124D5561128C8343416852F21B15AD68E7F7262F54204978B6A9E45 7949EB84527627F046FAB7EC6F87EC04752BBCCED84EFD9ECE33418B3194C2CE950CB8CF 776B8035BD1AE01695F3568E8544877882A69596D805B83C9A37C221150B1CFD8C41928E DDA9890F2A95DFAFDE862162D1FAF0C7033B872E6BEA186A23A52BB7B84B2AD5ACFB71B2 DFF3C6959233BD46CA02BBDAE37F456C56200B08CBC2210D969BD236EF663D58CBFA6204 2FD4E1CDB65833348394F6B6C9743707481372057B4E2A6D46FEB469E0599C423F785254 4A065930150D49DE74C1AA0D1F5DB7C5DD530183A91EA475993EC2C021CEADBDE15EE002 44F37C1C077ED64AB12008768781963FC655B2918B55C59D8513400EA63FA22DA30232A3 BB49651B2D816983FF802DBF30B7AF5FCFA4B670106C50EBD35D1C059D201E77E42CD7D9 2B5DC987E2E94C73ACB3ED641A1505CC4510166392A233304F1FF80057BC8B6FA2E6DA06 B7C0AE45451C659C7E558E644A9C337CE0449F0E80D7B74E269D4F19B25D5A378B10E88F 42D174645A5A9B116B273E599F9CADB4619531220BEDE5751B3D1A2F4615AE044094A3A0 677D922EA390AF1BCD564538F9F024F848FBF85D8FFEB8D6C8541B8AC462512FF2111EE2 9C8EFAD7E401B06769401FAD16644EEBFE1768E82500F33CBF9D9B1C4A287074356EF111 B5762B76A7DC65642F00664C7CB7D82702D3704F7FD7483DBF3C05ABCDA70231886D42D6 C1F4324F62202AAE34EC3C34BD7EFE865435CA8CC7E4308CC522073F20A4E6E784287B21 78C25574B0B60B50AF558D65D8E3E1579EDBC8CA3A96E8650E0F88A0C884E68FBDD38B7B E3BCAD0FF498972A6E730855B6006E1032D9C85AADE8DEFA05609766622A9D56F0222039 4402C0FA7BE3B9FF054FC9D78FA2D431D33504CE178CA88D697F4B7CE7933DAB9928B459 5DC4212CC080B093DB2C7C69ED5BC1963332BEF125780444122F36DA24F21C55D519E2C7 44244DC1ED2073271C8E01C6EEB7DD4D2B80AA6D9D2ECE74866F6BC9B3B04F1B088A89A3 73E20B232120F85E0803043FEB515D5CFCD1F86AD855D7F1394831E5E253835EDB16CDD9 69A0631E18FFF109E03879302014C5C0E39B4A78C509F6547C228F87E8DAC382AB687C8D 421CC746A515173CC9849DC2F53D58DFACDCE89F005AC05B7E2FCFF2D2E27DBB37973F22 115F6FB248F55DEEAA008DE36908365F3CD7BC146C0A3749E99DF51919394B921175329D 59E1EEF66B1F294FBB07F5DEBAF868CBDC51BED7BF6DCA9851F97397ED79DBD7377323C8 10670BA941799621469755B14F93395ED2DA916D79838E2122C96FA265D7C8888841D243 0ECDD63AEF1BA40693C13FA0BEFCD37C86F37B5C1A793E5668FB4E5FA9439AC18B7B9111 DBBA5FE9BC2537D96F30B357B4DB82BD3B36B819C33E9AE1C482B45AD99DF1DCD83FE4AA 7190B91063BBBA14B1D17C849291B0DADF69C41703F5362EB4E754AD7F112D6BB7165E83 9EF8C6BB13ADC7F43BCE3326CF8480B195CB5BC5DB5DEBD2A3909DF9C9D94084F6973E17 CA50BD893B5C4F38C6D763331216EFB0334D4CD22C808F921B851CE93B10F237B15C9AF7 BC8831469C70F80CD6A424C622907E17C6C9A126AF0395E5DE213F460E8FB1C30FDF3533 82B85127D897C3B57E2660D574B20AC07FD14F15C44E76854675E362FD7A322BD7A92A93 61F4D758FD8A0C154F917C8DB4DACE15236585174DC02AC3263D3B388FE2DECE3CB63E55 AC6ED18BACEDB981ED5F3C07AD18F9A88FEB4FDE76330DB6E81AA5AC9964E6969C1AC255 BE903B1E9B69E1236B739C9DC7123BC25C648B2DD93B6CC1B6F0F352DDF4AC5D02762774 9B3F71DE9ADC7491222904747FD9137303C766B11001B4BCC511E932C66FB0DAE5B4D478 6B0B45E0898F658583F36A1B5978D77A081F93D7139AB0B7966996099A1F5DA95612619C 9C824AAD4265EA071823F6CCECFCDC5877D5175C906E0563980F934746CDC9C70AC75118 F90993DC5FCF78DE57C592876083AEBF3B7310AC1146C44C9621EA8FAE134827BA9D69E7 1E4BE7DEF37C51BD1879FA66DF4FCE3A96C4915FD6E8D094FFC48E162276A93B0A4FD2C5 805963F00A92AD24DEEB780A77F1EABEBF63449BB36BEB432B33AC6FB648857E4A123829 B4FC5E3DCBE68A08A4809657EBDB3B4936F0AEE6CC27CE1462BA5C600AA17BDC6F28B60D DFF62226CF8AA7E607FC9CD11E0B290F5464FDF9FD9CD7EC84C4482A923D43B014DB42F0 A2DC3EA560BF7E1728E21B2B2B68FC37B676F72DCBED1B6864F70B25C5F830A58F8E309B 6591368AD5857DDFD3AA16609745230377936DD8933804B1D00E83ACFB6BD56EDDB7579E 8D8E97870DA3A7605152B8650420ACAC8D8E87ECD22ABEC67E0660D2197CA4A1535B84B7 365D12A70BE2D2C557EC05A2A906D505187120CBF3EB064DAD4434F8E01C8727475A698E B557898464CF846DD3A4171C7D1BAF69E5DAD1373B9F763A4CC84AC7DBBF500B53AA22BC 137385B29BD3A639A5C0F407846F7D69B1B7D58823ACA354716739A98FA2F2BE5E6AC919 C086756C3F3CB2BDC91E9009904A8CF460B332311E62D638E5148F3663849036E09CB5D3 DE206D6CFFE5456703834808631BD61D4504F07D8FA91E71542E8DC9552B66D09C222DD2 EB8E23FDBF79E96C41B234B9C57C56E9B368B233427AC1D2C6EAE43F70E16FFEAEA49053 950E41BB30BFE661653C269ADA95704EC36ED32F1A7820EC149F5E9D9D13F6B102B02224 6D991C5DD4199C1CB27F0F37C293BC3138FB912CEC9807CAAEDE368E78B934CE0CB95C3D 52DD35C98EB6F67EC5EEBDB4771BD84CBB3114A5ED1CFF0C43014627F97B59BDCAEBD0C1 FE0D85C6B3FF967832661D2AE66928B14507E0523E4870755C42A03F0BE34C37240F7A79 F113C9E53F1D4E026F74658FD45F74AA51A3C6B05D85BE011D58C5BC80BE189EBF4A5FE4 7957B92C52BD4701D6071FC3FCDAF31B8E86AD41CDDFED85998690779F0483BF7B7C9B2B 9C692BDB727A3F02097E5634110AEF6E2E4E839D12DBD42E28051FD20CE7DA13F45B1B4E 0BD9A338B96FFD57B25C535BC56EC0AFFB951205B30028CFE0D9670A4B32F7CF8CF6CCEC 1EA80766328F63D77686FA4E79FC6F73320A41D006C48EECC3850E19BC2D4B849DE538FE 63A66BA07EE8EB8066CB53C512A13B6A4A6FC9EDA38B8FE4334E0C0CB865E466AD91F5E2 58FADF312BF21E210BEA8674F6AF4B41050BF63EC958465CF747C4A4686F6CFCB4E0E434 A0D55F720E02415A7D5CDD6C44613D8F1AAF2FAE0E161266C62D037A1290C5A3CC28E070 E7CBD4D7982C19E529C1F25034529B521863C2A2B1599E0FE5FF73ACB18DC457EDBA7DD2 6C74614149E3A2F50281EC53E1B9BB8620D93C3B9BB6CDDCFEEAD2278E4B1EACE944417D 8F2B82AB68DC9DD09876E4016D5ABE64FC3DE53ED41E077E37D3D51B45939E305653A7FC 6C958AB558085B3CBFF878E03A28C717FE8FDA2A828293762B181A6B1EF24816009572BE 964DDB0BD182F611E68B9A1CFE5F378F10A460DCF5F9675777F0B6BC64F7EB26C1B5B7CF 225BEC7F5BC741CAEE9F5D1B7A7611091A41762C28C448416B484E69D9A2E1D124659B8E D94D96B45E50C128A23BF9FE4FA0032FEFB05856772F4A3827B0186E8726FBEA25A49F74 3F09A0EB1BCE2EFD2ABC6E8C3DBF40F175D205A3061DF2E75B67CD14DFF612D933081FC9 387361D731EC7B179D97836F31FC0283F1E17BA60B1712924C8FDA260766032BA91129A9 C9730D334B9262334A4115A371D13738080EC009055C1CEF5B50188BDC83A2A409EAA5B6 40567E7685F99725DA7CF73F78CD612623F21B14BECB3C7B3763AE2EF781238DF63F6B7B 1F7EFF5603FDFC5AEE6E64E7BE804F0481E7F35C96D1012DB59782E76A1059521ADDAC47 6449A538A2835110367CB3F456E4287B70A664472A56B4F97B2BC7AC3763043F7F3BFEA6 8295A9EC63B3CC0565A04CBAEF1E1B44BB12876453C1870EF3A5EF2ABCA94FE0C933C9F2 08C174DEEB4A393D4DA3AB94ED162BC61721D0B37F97C7F7B5ECA754693B54584A6652E2 5449335A27B0BBC46F3C7FA081B6C89D241F92000ED63C9886AEE3D9D58768151A18826C C847FF62AD158B7A803578DE1D87657F23447920E8BE2A19FF01FE60CCF7C8F675A3B79B A6BA870292917BC5A55FF225F75FEFCCD4D6CC51BB1630456708FBAB0E50FA3962C959A3 95BF9E387C19B4F8DBD9A0DD6F316CE700AB254B6298B8234D23791CE8ED5255CF443D25 E0CD4085CAF6253354BBEA44E374E87055338DAFA358111920BE0BC4C89D2FB89C3BA471 64235BE12D0E5C6D5F39A165181D852043DF2DE878EEC15AFE7FA1CE12DD8FDBBCDCE43F 5E9C1BB7276289072C15B25489EA8FB85847B282AC603D04270A08ABB3DFDC481590DF83 4792AA5B49B2D61E99083E86ECEA04932067F9CB8D1696CC67C523DCADA7A43ED2AED07E AD2C30CE246C929825648176168D7E669BA1C64DE3620E417E558F65454D51ACC408D968 8F1700DDC43C8F5FF60DACEA6B8805DA6B68FF1245A410E5D9EBE8F911DE76E57E0A77DB DE9C2EBA744E21D43C85799F754D9B1851FA261121AAE45936F177D50F47DFD60A18B2CF 704E72C0413CE85594C54B022643BA8F5C6A1F4A55512CFE2EBBD3428C26AA32A08D926B 239766E9489DDEB9299D7B9B30E9E1DCF9C440C9A86494A0571ED645C5B2604A8FDD7BB1 900AA472BE9C2B2DFB136314B162797C5E4E55041E5AA0913A78DB6A6824437655D52DDB 0342D444D957F6F8B53828E93B030AE61A5A65AC63287E85153F766CB178CA534E356A94 80BB02C07A5DF52C2152E17075C0FE39A723CCEB306EE8CC5B3099DACF46B2C1337404F9 0AF365CF7F32FE3305A9A59BB481A1D9461F1CEA04476F761BEC5B11CEDD5535FDFA85C3 39236C342B67920B2245CC7C022032C893A99C78131013FE8147A81C3958AC6A9CEE1FF7 632C8233B42FE30BD88C7C58B3DB1C41A5C9C2D14DDD023B67BFD78EA2BF2B7AC9476380 A9E1B073B52652D005F7DDC84CB8F1D079129998462214767AC4C5521097BE4B573DED23 619826B2C6D4BD823056CDB2A9464A04ED71CFA3095E7F3ABA0BFE7C9B5219724ECB34EF 0D08BB0000177EECF2272E1169A85924EC77CBEECE41839469A6FDA73FF7E797617451EE D95C970B94D7B9888F442E0BD12CED32BF3CE62AEF1B7390CC69C7BC1D3FAA28DDB8BE12 E76E13A0C238B3F9F97972A48AEBF47980C7F99D00E2F47B1FE880597864F04CB920EED0 60BEF22ED0B54198BD74DC50585DF5CEC5C7ECCFD9B0BBAAC8FCDED774482C8E11B2ECAF 8CB8FA026B55254AF477E39F44A938AB1C53741D0E29CF9CC85F4C70291032B3D84FBAB1 0398BEE47C8BE4BFC6432EB99EA045D3C212B4341EF33B8BC52D6D11502D6934ADDE102A A1E289FC318A3FDF42EAE08F09E235FE19322595E3B1711E4C3A749EA46E19620A2BF24A 3CE090169AE1BA945483707C267DCAE3FB5E4CAE385CC40F382A4180880D81F9BCE768EA 41D500DC1216B84AC9AAA5A6CDEEB427DD806786D587F808F989F422523C7275CBBB4FFF 47D636F7D4B2906F019709E3C908B09991896C91722D34B3FF10A14B5FBF53B62FFB2F42 3EDC102FB045319EA493A21ACB0087C793779D83F9EB77C27028FAC8B4ED99CA8023E2F3 5091BAB24496DADA3C55610FCC04AB7089A264CB011F3A11B34E6B124720F351E2B055FC 1B3F46AF841CF0B994CBD5F9DB5A14047E7B19635AE09F33AE96BB94CE6E5FD7DB455827 359F815C4726C82A6C6F39648763CA08BC825947E45BF74452CCFFE33D9E6AC0A4BBBBFD 23A6A2BE799FE967CE3AC415560A723866D337850F535C247658A61AFBD5226F7CD646D2 195976C5868702044493B74913F6ECA67EF9BFCEDAED535A4450A54C2B278C20AC887501 94F55DF823269762C1572D2FC918817DD740E688531C5459052B1362CCCDD23A1AC6B084 BD4E0005EA2742F8557F0156954A6D961F5745001CC192AFF396B994EFD0FDF0033BB6A5 28804DF4368F0D0AFCF4669878C9EF2D51A1E9328108F1577BD4DBCBF2B5CC3CDFEB74F8 2178377F93142474903F55FCEA6ED717EDE8BD5DD02E70DC54DD4E1F831B5C635C342E3C CC85F3FB704A8F9CB59AAD2939FBEA766A1889D2380483464A90139F31DA2140CBC31A20 E17DDE552492912A43715C9DACA0D09F70FA1A9459D550307411659EC69DF05465BE01A9 877B104C69E1176C80BF527A31AE7D259EC9284CDE7D60181852EFF41A96A0F30B3279B4 2BEA8C71443168FECCEEA6C53562B45A1526F62A80920E466A26174E1EE1EFEB37D2E1B2 112DF20E0F16D8BDD986DB50F9630EFB3589A8724FCA89C657C17AF8691E6EF68630AC39 6F6583E6CEEA23A4BC210A5B42A5E70819E8BBBC4210D0F70B0CB321865B17687A07F85D 5B531BE23C98D3D8861D0974760A37C03E9030D15FD2FCFC8D4AFCC416383FB7053D116A E6AF51D4462F1409E0F6F0AF9A2CC0413412BFEB83BF2DFD6ECD60A390D1ECD0A7B8E862 4DA2064BB37056BC32451E3D219B84C62ACC58C0C408C7D30406D0B746227E17071E4E77 5C401745FF9DC872269E4DB8E4FF0FF8EE575EF311751C1D615F9674DBD05187DDE26313 217195C355399C24D9A44528CF841FCE9B788223353938CFE486B961B07A0D719B7787F1 92D1DE5E14385DD9468237487535747FC9E6799232C8454802A1F8022138D3CEE2E37CC9 EE1B184E057309546DDD7FE2CE88CCE378DBE601F2ECCF26BC87E8B4AF3A1224AF9F4864 2A234B724BB8C462A60C44E498A1571EF7CF46C967B74025744BAF921A79EBEAC11A0551 DCD0CD28326ABC5B2A5B1A3677F8625F285F42C0B816CE680DF56A078B0597E83F286FF4 87F0F3D17B853B0F7CFC7520ABF5D9EE971C54F131C35415423E7144707EE1D577F436B3 28C39D6F5E354D79F0DC950C016B36EF790D04F4167EB447AA9375C1B43D2C9D48EF6804 FE2022BD3E3BC17A33273A0F7C9BE7353C234C420275518A73FE22923BBD7568A0820147 E9C231634580B88A2390BAB2DECA7BC020AF26F721137B36C55063E7732DBE1BF7C42F27 E287180CF9B3EE30A26F00484942B25B0018123951BA5FAF2AD4FFB813454CBB032E2440 30C08C2168C82F5D79329CE3FAC11D4DBF74579F170C29BF92509E4051BA611191F73377 7C69F80CF795D2D5C26E48C20248832ECE822E94CBAA9A20DF8BD6BCCD4B66DEC721D4B6 CFAECDF6C0257C2233185A5B8EC16C672EAB938E3BE54ECFDDE9559CF5CC44580383ABF9 6751D30FF1723488FC19E1844CD0FC23D6161CEBB428B6F99C924CE0AC045A20A5834B8E FC4A5B13E407335BA63142361757155F900B235CCB945C8148AC2504AB6EF15CDB38EA2C 1B864C61B643FD33EF7E9342D9B0D59571A500B853331B5055E5839B9F41A3F65CC1BE70 A4B990E226F62644F92C88E9D7C219CF821E20B57C0864ACB6806A9DBD633470C8B205DD CD7CCD302DF4634915FAAA2A19D7DEE49943E61E277088025820378E2CD721CE002D5C55 0DC67EFE0D4BB04130895141C1192F114EA666574F793203A265C06D9586A9FEC470FEB3 3CCEEC2345B7CAFA3F0271B2540A3999E86B765212E92203F373C64527599D83C229F276 479829F2CFF3AA86F5A2F49004C3F0C472EA552F868267AB0957610C4EC96F094517F190 6EEBEF4AC11258B9D8A5F40BCCA9F772565509B739A72D399179EBB1EF517459CE1131F1 1400B03410E59EA19A55687744EB8FF5335DDD901B67AE9A9176FF85504C3355EF0026AE 79A82C9DFF9D8B425FBF7BEF53C165F8263C52305E0242D29E255A33893797FBD8370607 85D63B5B6D2A669F4A857A588BF0631E1AB1134354212A51EEB8D68C426C20B5F259E0DB 2C95503F572E39801C60613BCF0A7469FF2748E38E7828479A152AD4E5F52B8DADFA3C21 C77F8EE05AFDD9856D27DC8A78CF8C1A975F7A21D4D2619673519C3E48BAA1AEAA55F6A3 7A3C0D7D917DA28F5FBB6352B4FAD951246E0CF9FBE0B7618CF19C8587F82FA0AE287181 F3335CEA4ACB291E59F033F96B86B4D3C1E545D5936569BA8E63128F479FA4D1A15B2C63 2DB4481E0C96A7B3C9A8701C307C2AAAD31E75BB5B8754FDD35A87BE09027CB8D87C90CC C4E7E9BD2EFF1F783296834EE04CB33FB29D0576EBA08EB5C59E85311B7F5D71E7695E9D 134F884F124CD5542A84D7F05A369538CC898D2F58E7052BCDDFAB117D1F0C7A7D16FAE0 3A743F889764B008457EB666491D49B5C82EA08283149BC18E2C8CC60E2FD0B4ABFB575E 6055CD7A0E4B964193E8BAE72008F03DE834F67A4A721756C598BAC3F4B69754F895DA8F 8A72ABC1ECE456EA825D0179ECED511EBC686E13956A5917627016DA096641C7D114222F B43A7D2B3615D32DCD80A88303337F1F1ACCAE75A78683760FF4ABD6A345EC2629FFB6D2 4134C642F7D09CB621AEFC1A90F605910964DB22BED536EAF492DB3576CC53A24EAF1B7D 241EC81D92C0D14CE551C207FCC7226054D183664539B1FAFFD43491845C77A7AD2D3C0F 13D373D501E09E37E6648936A55B0E4CF8B081D3EFD201F94849E9A11D73CF100608001F 1B5A585747BB17742E9510A69A17264F56CB855C59CF9054A6925287BA6A940204EBBFD3 0586328F57C3B84CFABD4A42E27AF735FC8173333EF3809573C0E2D53217300102729304 ACF000D662A8E2B56F4D269702AD490AA5780091E8CADD98696FC01178D0443A14FBF569 BC4D07A14513E48FEFC91944E39C0689FFCBA9F3DD6C49648CE36D8E55D7121022D9004C 0F28F96D8C2CA3C3270C3458241C76166488498A2A91A4616A7B59F6AC237EE2DB7231F7 08CAFA3D5F1FBAE59D3CAA12DB4C1F0186BF2D4F0B0E6C8119A425902299AD4063A94D2A D0A4E8B73107F789485CB16B8DD758027C145630BA217C5C1D536128A981B1AE9AF0AC56 C62F4BEBD8B7DD75CEAD82E82C1C9CD3171268BA9A558A239556EA8A6C0BE2CD7EDE034D E463DFF948496F8B351CA953D344FA129069145ECAD35929BE6FDEAA4168C6843369726D 36D15F41F79F394DB0788C9F7F794FB2E49F84453593BD2B9E258630C5717CD9BF45A8C3 F7D93FC064130EB05138D3EBB7E293A0C45812FE6BB9AF88F2EDB3447CD2E4412FB6D5B1 6948FE41A385FB53B5BB465824A0E83E7E647286971D3DDB3BA1FF2B34E5C97FB96A3B02 9C42FE4440FD01FD323E866EB63F5A0F2EDD7013B1AFB3B3387C2450F379422511A75C04 FA46177CC5EA61A04B8706BB12CDC9189720554FB3DD44A6D7346D43C2DB8CAA9BCB6982 EB31FBEB0AFE383AFE21616366A2524A716D580F41D4E12D423590C2CBB7EE81D3D2CBF7 7B23AA7F41A0D7DF101FA132FA9CD5DCA0AE6573C04D7A72E9E779D09F538634B2AE461B 302F9E34C820A66D80D771834E7762627C0109ABD2D12DD4B4D1E384CAB233A9852C7AF7 E27E9023C7C15CABEC57E575D2FE0B7B7D838E604FA4A90525C499DA157B8D3888DF6387 3AA4BF250CFB2CDB1083B4B9453D8AF0C83DF65918E3AB2428CA1FF01C7B53E756A68697 5A604AC99BA123DA9469EDC2394B6C7396A28047371EA598300DA7766509238ACBA46F2B 608B8C2043C5B69BACB565B621BA3F970D44F660199586A8707087514D6AB68118C4A042 40B6988CD6CC55F5F727EC5B37DAA95BB7D3199B99024C8263D4073F8296B1DA830A36A1 0A3D040707EF17FBE62AB33B1F4C7598FC84C6C79CC27642BFEE412B0DB59EAC24450B30 719C30852D00620E79D824F93732E30FBAE78FF1217C09B9B6E608AE0F62ABA9FF46CA3A C5373E6CEB4653AEE4B71F7F01DB8F25BF8E67D5DC306B43F418ED6148D2173055307207 9B5DCC3E296CEB309DBCEFA6FA8E2CA7C00864A8A7E393FF634115ADC58D956F574B3BFC 08A6458546282280CEA143F274FE07BEA31D9D59A189C67E9519BB9492AB1A08EF037D4E 3FABB5EE8EA86E6C59A82084A15851DB159B5066E6644933669011B0A2FA629161CA15BE AE4137A11D480177CDC7E2BC030B7A55CD5007812F48322BDAE8A252D00D3A00E127A434 4B26ACFE14F5CB302CE82BC555034A876B4DCA7E88922637044E1688E3D818D7849E7054 0D64A8E8A0E65F5D557FE2C192E075CFB9A20F2DF6EFDCAFEB400DA6E9F21245FD65A2C8 C4F5FA858EC620E5AFFA961F7D4BABF830DD94CD410948224D7C8FC521E9A8630F5AD8F2 18E225C5465D0E3D6AA6A45F30A6C0EE2BE4D3F14C6DF9D20DD5AD811A8F7C9BA33E6B87 AD95F9447EA3440D0409F2D11474239972CCF385E7399AB1D38A24F724E6C8F82DF7276C 9D9714FB4B03907F3E1D1C138E6B7ED5F47B39B76625D38167631CB7BA34203CC18EA3A9 DA085CC4D8EFF35ED4EE4AF45CA4501833A364DE354F5F235541403982420A9698652CB9 20632BF1EE706755F9E42AE04B4F2EB089A88273FE2EFCA370003AAB51C5E54619D8D179 FFE8220F08D48290476381FEF38698B6E6294DE58983547AD8F97A7665BC677F94132B20 3BC61F73495D0D8D4BF508312E4101A9517D0171F72397A3D0205389A730A647562D9BA1 6D3D1F5ACD34A96AB4306BC4B0619284D1A3EE3D0CB1BB272FA695F773394ED3F7812C50 BD9715B758CB0872C3EA0744354A6FE8CAEA1E8E45D027816EBEA8791A77066A46E0B5DE 36344FA20F1F7A650A7B445D3061D8054981164EE06BE9CE6A1342A01B95D015564AB30E 960A9D9707629F8AF36E19CBF82D06B914EC0824AEC8B8225D3CC467396A10CD6C1F6505 68F575D480E5B747EACD6CAD4F146D56210E2C6C54776A3E60144941FD1D867A76174A04 68A6B54E294413518419C6D9BA9D400C286484337BEE1AD6B11CB8C6AD03303C6C116438 1AE4E7A3581C9AB8B4DFBF4657DAEC123FADA226143784C143DB2DDA7C6D19E889982FA7 56E7A67940EA3B1D78A0C01591E505698BC258B10A1F10F76620279A0F3E43C61DE5E947 3B69DADACF6E15F4E621A7F30B455E229C8AF279DC9BAC6F997DA081DA7054D9E635FCCB 478EEC8BC44A7896ACD3CF30AB26842898E5B62973F147A02ADFAB46F83DFEE759D386B4 764E683F239D058DD241D6B32AA02856E2257C1FF463271DB7A7DFA3F7F0BF0C94AA4AEE 6A2CF6A87EB62E9784D06D5CB7D24C671A70002A6568F2E2FCFECAB193BFF95A59E70347 D50CCB8D3CB4AF621682732A86E8D69F8870C25499B403CCBC818D25E70F42F0C49A3682 B010B3BC20D5E0A8C9CEACD11267E2335CC9C904D6EE16AE156FE64226D5880239D4F19A FA818ADB9502C6B16DD45C872C95701EAF1FF837D669E8E49AF9A08DC7D281D5F9C76F1C BA627161D7A0149EB9D025325A01F3F9FAE891B469D88BB24D33199DD4838AF78263C5A0 CB5FB084370D146D7C067D393375C7861BFE9AF67FBB8A900AE78AFE34AAE02FDD7F66B4 B46E86F0B43A9CBFA81F1D507697D82FF7B694470240CE59E88A0987D16EF7EC8AF9321D 37EC4CBC0393653A166DFC7BFA1DE7295FD91747707BBD711BF4AC1DDE8E57776E14125E 76F12F9890419EF6417C8982B6CB4A1C138C41C1C4571AAD7A412A78B101A48F551417A9 0B77C602D494AE14B87CF7AD384812CA6F3E38D7EEE59C32BB68B210807589DAF847BCE2 CAA1893EE856A64B225BE71272DFD05BEE49DC73357533E6600374DF171494E961C65EE6 D6397A8C17E7DAC9B1ADE33FB13D02C6089E0AD33AC7EE74779906C8C486AF89E7B8DFE8 EDD25CBC746A33C50025DBB24AC56DB10613884E0251BC2300A89932FB1B60BA735B6A0E 4316A7926235FF7BC66205E074F5971051DF18024EB89D14F492C606ED4F3F1A1D113CC2 D3FD7FF145E49DF5906FA6B3214542B5B5D1515966DDE8B2E718CB9DE223E098340DA126 1E4923E8DC250F6D0B7C65B5FADAB89D2E0F749B3C39F0E78A4D345EF0A10AE0610FDC72 9EDB6852B0D3BB2FE2A895DA45EACACF8A5CEB64E7913DA4B8FF6BB0AF474BC41128A948 07E612469FB175888271B568633E5EBD5EEAB76400AF508F2EB1FCEA21FB286522418C53 0CA213F44C2B2EE68A9F6A3912414715E907505B9722A6F19D6452044C55E4FA15FD0109 4A306705CB95F2C1884A6053D52BCF9EC2B00C321358FAAC65FEE7C71B3CF32F8D3B2C1E 68EE025FB4D0AC321B97297CCED5110131A4612D8DBF6F57E0DDDA057A04B2B7653A4C39 BC456F33023137D139311AA155986986D18AB41741AF4F19D4CDD55767946890C60F56A5 8DE64B52E1CE213EFA6AE500FD773395CEC42132D9FD281DB68BA3BEDF5B517FFC504D88 4579788BBC96B79676DACB06278B799F6E06B6A8BE933D13DC663350F172B765FD86B8B1 51D259EF497ACCCC4769739F48CEB355F7393EEF3403E4D543A6E70103D631ADCA31C5D7 5922B0E52DA444529F1225E8AE430E2CB93F73C3E25EABBAB3987ECF8785E5D3DD0F821F 88BA968A9CE64475FA078EF01B34D184507508B2771157DF2EDFF612795878DDC5F9211D 150D702F91DB062B283B86C376DF120FA57CDAB6DE81AD787FE4143617A3BF5B431D54A2 F7DA1CA21C87791AE05F5FE8F75B4A56B19732261218A5EED981F02D07FEDAD498930E05 33164FCE69FB678A761B9CD3D796A78F48861B74C72F3B1461EDBD1A24AF802C458C8272 C8DA1276F947FA2B168C52E821BB2C72A8EC8889DE093C39F806F2427A4501FC5FB37FC9 A32D127C671056A1BC0A47DE58211AF8D524469017D1CEF0D0CE665A1B5160CA9C505ACF B285BB9D727BEDDCDBA97C4CA9CE879F6079CF0DB5A30CDB31ED4874E4E4EAFBCE058289 CC18AA0499A3B0D7BE1C8F32317B020BC876DB5B48740F103C40F20B7B7ECB46980E6934 59EA56E76C73BFD58D4BF6382890EE389EFBAED811D48B78279F38FCFD128DB80B5691BE E40A3ECCB1178411705E44F429B0F604C9551992C9590FBA4E9E93381FB65E74AA25B411 F0474E5A553EFC7F3F2FC11E66A71A19CB72D50D3E344918FF2C06958725CA522ACFCE9E 2C2EB69C962F1170E4BDB83FD74DF2A026E9AB45509958615C05B5C45E0ED31D03083C33 20CCB50C2BD84A2FE3D59C268204663A1C75CAD16471C062FE21CFD30FB7C37BB95E22AE 6899FABE7F5247EF6D2D9D87E859C33E7225CED34D6A3E6211B5A930761A687EA6C3C58C 86358D10B387B027C01782475FFC5A4075A7212752753392D84BCA98057D0D3147B00956 3E6A4EA6E31E12CE7902803AC3243332A1199ECE6D8289A433BC93AB118503ADBD4F21F2 B26EAA30C96256775B40ED9AF3AB9D99D74CF2356E34D775E6723F172925545C8831F2A6 C3D341727370E95825EBAB5B2C368552BA410ACF4981322212DFC37E0948B1BB0626A1A9 FE7419354EFEC088F778115A8C4E00CCA71C9B3D1A586337B121D47E1473570ECB63B95A A2F0AE53DE845E6F31176BBA82EC955CD2B2C8BFD463CE6A45EA4ED7526F993666E0750A 741649431A050348EFE4ECA4EE2469721127C06EEC04E6C22528A0DCDE7C150A1296B882 51DC838EF96D53225FDB313E612E4D786715CB76CAE1E7F75CFF64839429BF90C0FF8287 65D543D56CA1407EDBBBD8BC7F26059F24D5589F55927A7E072B011880CE3E7835AE0CA0 6C9E3A31D69F855FF5185E93A03D753E085A2E1FB2D461E729C677F985B232C5FF54154F 443A8DEF1E0C402B598576B3FCEB03AD955B2DDA2D4C1ED7EBA4982BF1A6E3DF128CD1EB 95C279430ED0181DBC76205D1D7CDBA2B9C5770354D861AA76E3552D5DE46788340BB72A ADF31CA1D5CACEDC88522AE1E7ADDEA6BC8157C1B7A03457383B41ABAEF9462E9C358978 3E9D023C69CA1A88D7C3DF3CECBC0044E3A9FEAF175497A62FDBE21AA96D16EF4C1179DE A08809F8FE46516306540C2274FEB8CCD36DFBF47AD558E04E19869FB181AC3B5723B021 C58B583526892938EC2E1FC2FB4BE760171C2EB375E5398976B22271629CBF02CDB0BFA2 22D2A1FA0821BD4842F0EC47DF7F507823F07B7DF472A651EA3A9E2278275ED810E8BE9B A7996D9E341BFC8CE269D3E8B9C5FBF4798A328E46246D699D8A889908016B29545290AA DD64EEBFB3BFFD3C29523CDF169184010225DDF1C052B3D5EDD67AB58D04D6D83C463A2C 19A2F61A004FBA95834B72B188B1188A3D2A8696428E00835FA4AFEEAF7075D95E36D502 7B927A060E32B04650DF11EA844D487F133F687ADD1B08199403A6717A90CEE4D6B67730 BC74F05E0284190D7FA1A6414A7C8870219FC1555E87765440A164E01FA42D30C7A904CC 43D3489731DF236E572DB09996001CE6E96089C61030F90BBB8454F8B28E76DC5339A295 7284F6DEB640599CCD0B4F38D64437630CBCE08A5EC428DCE96981457059C4409B9A9700 D91D214B008D839151FBB926C80C0B303B449B701DA807B94946E5F484BB882421B514D1 A25F86DCF827618575EB53A624700968234A042B8D1A92F6FFC63D973ABF4A849924E2A3 322159186096B3008C7D76CF01E5F87EA13D8F95C35E82D8502AC21946223FCE837F692D DCECE8707010F8565320014B15F2DB52960DDC074DC276851FE524FEDD5AEFAB9EDAE9D6 4FF722FE1F744D7C7CFEE533AFAF625282899EF04D29CE1B86D348D18C77F92C67ECF252 27512E00F27AEBA349824AF7E584CBF1F38ECF6F08422C327825DFAFA3A8B8F5D322E338 BF98E96D5ECDA108FDFED11FC8EB4F0F669F724137329777E1DE575332F4FAEA062EF711 E8A89E178AFEAC3E329B7EDCC6F24918FFC5F446CC2E702E42869DC4E5B8244FF0C59F1A D2069329C2254DDBE52D8A431A565B88A172B49729304AA1B0E0A03E3CFA139EEB296F94 1D75FAD03B3D1BA880B0C06F85CFFDB28BD1D5A7E7661DADF35A84EB419615740C6B94B8 3292FD0E3320968E12898C8611EA32494EFE1AC3AEBE5629BE8028901D25C77DAE5549B0 E88141E94CFFE8F8040F68181E0E916ED599DB32E23A332E2BA87A96B9999D63979C4427 7D191537AFD728F5B5689AD3B633E432E9319BC4FD3D60A65174ECE104ECB41F3BCB95B5 9AC5976BD74FC97D080EE0BEC83CF408F3D5ED3E05820C7B68448A8BC3A985C4E0316268 D61A460407D43D8E2B0520B4504B679D0811FE493656C0CFE1CE944B5B48E26586CF19A9 65D8908555686DB49B131176F994D91C14E80F28C08CC8266EC9DFEF09830D6A4D43662C B090BC426C5E1115814907659522BF0502EDFA8FEC26366C95F0634CD8007A87B3B60FB4 1BD2863EA56ED13F2F3F27970D217F5D20068B4B4675D113760DA37BA2A5902C6A1F2A5C F15FFDA565A4F2A162A2B64CF3F3E3B8A84D9A438A3FE0EE5E699BDCF4DE7C5255035524 65938D090C080BDAD4E88D0CB6E79BE294D9B57A3747D36E0DEB575D90A2F79D7AFFFC5E 137BC3267DDF7B9AC909D2415CBC32A4F7D2A8C18BDC3E12650C5E0A5EE5F5FEF57F3CCA D7C48610584610ECD67A1CD1628087E9B7F5BC045F6667CC7899AD5C1953998921973639 BFE413644B3609F8F9C499A85073643A162657E80AD0C34DAB77D008517DB0935DF9434A 99014DF575F1E143EA2F4E482B042A38B83D0498B1698CB2A1249DD9FDFE67A033D99996 CAD9138B8E80658434F3F2D6FFA26AB0F1A326572598C681CFD3C47CCB6E0F780648E528 82BAAD48C3CCAF073CF3BAB39F71FCB807132B3AA8BA570BFD2A009B0B6EA7A314C593EB 2DB8552D3E97D35536D15510366BA1791DC5058FC5725C727A0025F9A5C7AAF913DB023B 6368FE6C3A2857293855DF42D36C09F112743518B27498D20C08FE050AADE8269DF6B89A B0F0813465A90683F18ECE3975330ED2B421D160097FDBE9D5AF82AA9B113D5C224EBBCA 3BE704673BBB50F2F0B54FC47DDA01ED8741E0FC824C947E1A5C44DDBD72F1740923E28A C1608395A940AC8EE6A0E74EF5290FC7C341BA5289A7CEE06899FFB3576C97108C4F7C24 4694C25FF1BA0E5BB813A1AF18FE6974E5DD3DB9EF10B4136EF1F754A827A4B99FA8C70C F8994B08220EE376AE33246D6E5FAD836ED390CE87374C278531BCF8F2CBE2AB3C7CFCF2 CA211902A9E4D018296E5231ABD887B4BAF9B8188043177CA5CA43AE967E152A3411A45D 1C3BF1A24108BAA668E73518B410875F10B01E81661FD5BA8B5579E6FB9E7CD2F112E08A 8030F5CFAC81157C9F11D87DC67D73FE9CC5C49E930362226FA1AD17E07E6F739B8D4CDB 7F2426B5584878A7BF2C7294F8DAC73DDBFA166F9D92F995344F48D4E04A2AA4A6BE21AD 4E12F234AE8CDF695D478AE35667BA23BF0E65A41EF5819E2AB366637F6146C5E776A495 927FFB41FC99CDA9127EE4CB1AA21123B6C9533FE266BFCFCE8EF9BC53EB738640ECE9A8 DDCFDBD78045B0CAC6B8CFD27A6D16E83B4DEF6DA8CF5483978A630D50DB850BDC32010C 504F6B0FEFF6587B2387E1713D93BBA35E7298B309A8C6217877CFF5A66C8F162CFB4798 BF4B443C556ED908EBAA85B33D097C54E6C513434FD4041C2B8704FE658A3914E45D9AE5 967CB788502A2AE725AAF9504AD45842DF4E12134982E0C3C279DE5DC679CE57BBFBEE15 9033AD068A62E27A1F85E8DDE6912A5D5F3CAAC15559BED72C7D8728C18207509541CDFB 24A35C9BCF84F21C91584A93510CFA6D6011788799CF6D1C64723C56C2D463982CF2F6C3 42E6E858BF11BCA6638412717C254026CCF1CDD51F2637BC2249CE37C78451A15543C8C4 C50ECADD119D9592C420768E1B90679B8F958203BC5C8BB54AAA632C363E4B88787D98F6 0EA9CB6AA01A42630DBBC57181D575FED7C9E5BF19BBF54930934BD7932E034D6B993E6D 7B091F7777B3829B78F2A0C89FC334687F1BCBB839DECDEE60562F76012E95A94E3EF2EB E0D1021D0061F1697F38996AFFA34783CDE487FF7D1D5E9F3514C865772A9E241F359195 117C184C99C1262E60BAD93A3F97956B8D1300D8285FDC9EA9E30931F10BA426E14114CC 1CB6518102BF50184448E456E8678CDE196F26C76040D1C6A80E29EF66582E3F2B5B221B 011C4E421032ECDA1070F5BBEC34D8847BCEF6C1964BEA1538AE7B7922E33AB2515E9BA6 807F564A1DB43DD6931FE049CC94AE34F111C6697AE046096BF8C9797181C453DD2EBBB3 08748EB8353E19D937B88BD343B09F243AD7486012844E1A837B8BE3614C2E016B5FAF1D F64E7F8F789873D03481D04C1FCC88DB276C07AF94AC200D6A457DB0EC73AC1721EC3E5B C77C5D7D34A3BA462ECFC5A1EF3EA27B73221D55F7ADB4D133913F754258746BF51C5048 F93DDA568642C30A58EDC09B912CFF17D28D09CCA206CAD871971C017C809B0676CDD7B5 D623741B1285F37438FFD1AF88BF78113B22CAC6A3E45490BBAFA7E02F49CC0987CB5D0F 2534893681D5B7DD8915D7B5C5D53FF3026C2E7AAD30CE035A3940C3BA78B23E73CCD16E 99C8B6633DE09629A8F2AF8F6CD708B24C50A8D81BA708A121EE3E59B7082E7BC77B3FDB 732F16C5413F868CA7BF38FB29BB406D2CDA4D3DD93A4F1F7D4C90519D3AC3723DDA33F3 2E8FC1502BC1CED4FCC7582D1B992A4F79DE90C4F7193F0E199450752E14CA2650B7610B 57FB8BDAC4586D5150C9DB53F3C011FA583D8D677363D702D2E8C16817B463F2703A091F 398E9810C00817EAD6881C5E96047E88D679207ECE532A7B900EA981739A41A81884CE7B 651E7E43B3BE376A70C6E49AC4D4F3D36A556A4C4BA4E4B2F4B2CB9147291397509B51E2 4F996DB26AD5DE73C340F4B3D2923E333C1058E3377B105153E6592712E3882456704EAA 3711E68685E7A15788B463670EA119C04D4A3D3CD8BE44CF781C88E049AB48A47BD36118 DAA89F2B254973D54B94C3E8FC1B32029CC4716EFBD5CB7ABDF158954A9431C97A16976D BAA9B098B9D659F810AE080D1F2B714F00F03DA1294EE72E9B44EC6448F37B677D2468EC 911ED5212437A8209AB57FEA27805710C758057979DD1F4F0BB76B01229966E97109F334 C2DCC33F7A5B0ED8B7FD6B8F58C2E3721E4C3BFAE8273D4976A51D32AC6D2D2BF44A6C5B C6079278341E8D5F1E05C3341949D2B15D4DEE9D243ABF6A3B25099FAF6559713EF850F5 767DD50D4EECBD7070D0285E08365676607FF2AA412DE882F251F4BB0E485768CFD1CD8E 2E7222A190F7F6852113730C77736C05D2EF14D9415114A4005200DFB4B10F07F18E99DE 49FF78BFAF8FE773CA536CE31ADD18BD354ABCECFA79F75ED2DBE488A1A02144D7F21261 16CBEB7BF58C03F20911E3CD987F3EF306A0A108785BB46B4FF91A0E57E0DB5687763E09 62E1CF7A324C7035F3E4F79D3F338A3D839D90B98A6E01C871D5D047B80258F21845FEA3 03103313DBEC9F7410D1DB3615A456D562F2EB753A8442D65F554E84DBF1D3447109602F 19EEAB2E99DF24FA5397A7A7A6D2D5215B50B22F52EE3C86AAF1D7F07FD5097EDBAFF7F7 305275678F62523B613EDB565C4E52723F8725F75C2FD4D4291C3749E82CC79FD114FC04 D00486A1197DCB5F17FB4AF236CF7902FD597F2B8EFAC2AD12CD5D4C9F0F749E8ED504D9 D99420AC7B3CF793A2EA230DD8AF161B0E6D741B0DFCE67D5926E14F2A7E9E8C1559CB6D 7F6ECA8E633A2882DA1E0E150575A3884F28A43CA8DD5A810749149BD769B15E1227A1A8 CEF9F409C7B8C66ECBA133B258349300E58471710290CF1FEA80D648FB3EFD44A7EE62F9 AE09BACE8E1F963B58EFC5208FAD8236E659C8BEC726A7DABF07E8E3AF8D6DF252040DBC 95AA2C1283EFB0A9B78ED3A692C3636CC2B2976AF77D819E8FBFE5CC01DE80FF5EFA701D 1CFDF11B49F7964147A65871D2BC6D57EBD67E6DED959CA1AD6C7AE4ECED0A901DB9089F AA5269F324EF34EEBE6DA553B47FE3645B80521E461B728725A9337B4C54A81D6E260BDA 0D4DEDFD42E3BEF97E7FECE1E76615E61A0621B2F875D02A04616ACFAE49AEC532E4A2D7 61F995BF6BBE3F4C2EAA08C487CBB501B27A2D3EF14659832EA6A33987E7105F8A9B39F3 8B03B848C258CDBF932839CC0EAD66CF29346FEFFA296DBACDDD9575E7AD8F40F8FCC51D EC54352B750FABD35A872EB9B86DD981B0076FBBFA633EAD7A9384E49CBC061810402925 85A8907D11DD87C9C01B8A96A4B04471631DA0EC6184CAFC936A50C66AA1A4DF51BF84AB BA1851401952FA3CF5078336797BD7C203FA6BCB90D8CF6ABCB43BD87FDC1B04F5D7C104 0F6B344CF902AB818D4D627173D0AA15B6DD110AAA06587B76CCC30CBEED1571D364B22F FA57FA6C9ACD7A03F254CC1EBF0878C10910B3ACFBD399F1E874D5312AFE453C85E17312 435B84E8A38ADABB538F2A797176C2C644966ADD8476AEE3407F6539788ED1C8278F0334 5BF14E07C9595AE5744A844B3DF8B8651E7F67261C534923F0E43DFE84EA1664E4B9AD51 CAF55BBFD463C6CEEB6C34C22A1F258BF6EE1B55F98B3F35B722F0C7420CC2581FA6AE03 9F0FC428E9E3F217D267129B714F027AAD73ADAB2A35208C726F07AE801D19B82B25356E 564B9CC8B9AEA8B068A058066CF76BB4505BA74827788D81D96AE8272569B658E2E93820 144CA648B6232C0B10BD0531593482D6C0C5C7A00F5F930AE8491259DC1E71420936B130 3A44CCBB0D45F192FE0CE52347C46A719922951CA24948779E9E176E74049D8EBD13E61B 2DFBEA0EFF0BCCAD49EE693A5B774AAD69B79944C1D0AD1F19671CBE2BBA1CF95ECE96A6 41650B4D817DF8EF0950CA1AC8812D3EA7ADDF806BE6A6CD28D9BEBDE41BE39C3B291FEA DA62A4DE5B4502390930729274A5CF3ED1B7AB1639F02AE40C568DE61A0732B3E3A7C79E 52C11C6AD299F2D02C9497F7B4DC1AFAA26C41B8012BCB678FF6D5AD8D965FE69FF86313 FF6B8792A9178C2D3E7E6702353085D055CD91775563EF36DF99C48332FBA00A9BFEB110 EF571B1FE010C7A9C3435DF39650E6FDC9BBCD4407A1568FF2B252F363D8659A44A473F1 A88DC589B552607DB9AF17910AD5C7C40DABA3183566E21F883DBB1CD0C8F9AB9BEBCCFE 1521B964F619D22F94F0431A9B549238C20F6E024BC5CAB6B3CF8C71330338BB8EFFE124 F223EBAEDB93D1D8124BCF04E7CC76C2759610E2E0AB7CB3AF7B02781EFCF3488B7A0284 00E84A6E49CF9322268F0F717F6C95A1E15B24324085C3B5B1BC4D25AE8408D052DC5A7B B94EFB3A4A23CD9C50446180A2A3F43E018065537612F98E8FC97FAD354832F5814BA2A6 64D6141C33472F4DD92A7D72170ACC16A06D9AB09F92825AB43D78620BA5724879627D1A 430C2517804C6FC076C9D5F309661C90D2F154AED15E49CFCC5C3FAEC144C3F0D924ED46 A45A5DEBC64EB673044EF363FEC6F6B3904A01848F11D95C18D61A6251DB608B4CC089E7 53ADE69B754A56CD70BE5A77D8F40F55B96CDE4FBC65D134386B3E7E8C851BFD0E6A7329 8F617CC9B435CCDACF750D8C0679FDD03E532E0CAA467E1F460E6B6B4D92726B03715043 15E4F18CC9B240F822BA79668864434EE1B4937E30397842666CE48676915924E2BBD17D F636B177BEA77ADE226F568BDCFB6921246B500972D470D00409691D62FDCC7DBA9FE656 5994EA4F555D15415878870E99EE5232C9A60C403287461C95A78988715B7568164DC33C 713AF0F1325129ED93926F160EA263615D5CABEFF625AD27C1CD401634D2F73AA853EEFE 228880625B9132FB22ECD4284E15518E7FF98F9E04AB0767A56E8A64500BF747600A8D5E 9DFBD8B529290D55BF40BFC7DA00B8E388903C0036B5915EE900E814988E7FFB2C23B09A EC307B7B316BB8D3C1466401326C2403B3072C1FEA0547B2C2005D6863092C078EB78545 E219F8C19952A8FFC476664955F66386452D0C02BA6743AEACEF2F3E66F8114397DFA95D FFFC707E8C572ADBC4B8C0310C543FDE656138A973CF950EBA620502FCE3F798F9382CEB B9AE4727474B608D14C95BA7504D24F517EDFDEE00C98B812E1A24AE4961D204BB28760E 08ED249783226DB919597109046392CB59FC53A6A17F4BCA5548618FC85C7E81A1B9A5CF 20AABFAFBAB0E09739AD4FF88D9AE8AD0B3E16976DDFC25E122F21B553A9CE1F3F3F6211 48EC7E8FDBAAEC16F495B33F185D2F1E4233682E5BAF622362AF8E1BD8986CCC4870C7DF 7F9634E872D8BCF5268ED9BCD7EA8EA93432F1B7E04FB9B712DB0C38DB4AB8F890D12443 3DBA4884906C3E1087BA7D16C3F2C28C79C2E5FD953A5F9B9817CF0B1CB9FC598AF6CDDF 0EE9DABD5890F075A5F14FD3C9E7794520DC86204C8413A84B5A5951DD7A2668C28928CE ED348AE7102E101F616145C7BD7D4D97A4A57ECC9D9906409826F88459401050E5DB0D7F B3BF2B41EB8921E493B2682F1BFE54BA0759452A9BB9A5E578BF66098CEBC762D321A7A0 D594FBD8E02BBFEC05001AF1B0A994A126DCD8A78A20C7E33A34DE94CEE2051EDCBD5FF8 73319A56912DBA38E8DF898DB33D7C095CBC3160ACF30A59667F0DC013644CD5C73BB42A 316E17259B2C055953A0720674A841EF0946C7D84606F01337045988E56B0BAA382CB1E9 B4E11CAFF7EB1EB9AD49BAE8B3FD776A18363AE82112CCB2F5947CEA03BCD72100B095D6 3160978025C5175FE73B55A0B6999E1FE8675319F5B53CCF55138530FF83D6AE6EECC0D9 2751B7D305044681584A6F40973E180F857043BD53BAD86AAA6C133AC38A9D3C8FCA41C2 C1358B5D4F6085D0FBBCD8563751625B5A921EAEEF8117F4E32B4DD71FC7925B7D6BD2B1 351D039B130D05ACE4207AB2B1C96F9EF843DD4823C5B51AE3D19AB30D8493DA32288E74 93FFA2C2A0BA0D34E352A1FF0742F1D314B1DDD3311D65C900F6FA759C847C064FF8875A BAF91B890D4603FE3C67C4412586951A6E04C908F842A4583962EAC4E0A505EBC1252BEF 1CD2A9231A84C00FDE375E31EFEEDEFB267210965A55B3C96EF2D0C5DB15C31DB0DE3C63 7B5DD1F26213AA1506FF3A039336631C5CE117DC9EAA0E1F820FC9EE1066FAB944D7E6B7 5B1F1196128409D1DFA3C855BDB9EEF78D0E519D30DED1B9ED12A4C8F3EF177B99CE585D B4B662561A2B668472B71A0745840BFE342D96C3BD0A118B9FC50CF49F2DCAA121A16A91 1990B89D0EBE1FA8515BE2C7F9710CD72016FD0C60E840B4B0BC48FD1C54253EC2473774 F664ED841F77DFF0D17A1E54DDC4C15EAE04B968E820F809FF03EB32991D988720AD556B 4F6D6E9F411B54322A4EB6F1A6726E0E33D9C09105E6E3730FC438BC0024E0F6C2ABD876 1232E9D42D4DAC891FCF4F7CD9682814025F6E84D601026EA96990F9EC92A013551CB2D3 4C1E7756325B821FDD17059F1C02DFD0011840F7E976BDE53B6D6653BDE153D388626807 369C3BA740A83D8C7637CAA254FF6ABC70E0B4804EEC2DD04ED20FEEE9C8D159E55943E8 BFB9E5F25F29F1FEBA7F7195B58D1214B18475E4BADA50031C333EEE21BB294EA3238526 D2B33A594D8E6C377F5F23C2CC70E62B98F9062729E683B994D44325E96910F3B138BBBB EE7DE7137230306C4C2D44CB9875B0AAC17C2A8538F9754CABACEA8785F792DE1D90E049 A314688BA86DADB11E9D75685B5C972287C303903784871077337F61604B1CB673FCFF41 5B681726D95BCD2D517754C0A8FC8B97292BE1D72AF9CF2718AAEBBECC36CBECD873ABCC 25BB304C289F3A68F4DAC518D05E6E8D833E28C5AC0A42263AFAC4DAF2881A142E97E716 B300DD63F153E504F766733C5DE153F772BAE16DC4D35D02D5386051688C923C1AE45DEA B63A26EC67B944E0B826F3BADD10DF81F960764F475C8C0754B3CC6E8418E0DB177A2C92 D15743EEEFD076DCCFA372429DC0C5991AD47EE8796FD9B88A36702D4D8829041593E1B3 6A90A0D143F297665A09328F855A458B4D0C4817E69C6058E8DEDC4A8EAACEC629729610 CBC7133483344EB11DC0D5DA6508C7AD0CD48AEE5F1ACECC4B2F9D0AA2872A331E485BF4 86B678C9653026B3C95F401392988093BA451B465FD604513856CF1B0B2D171A1BF69086 4E7D99885D861A19408F752357B2E75F5D7D2174FE94AC2554E55892CA89C60233150C03 BF227095B7E4E7857442F5CD96E4BFE9975746D0CB80F6FCFB8DF2FE4FB8BE94BEDC7689 23222425789A0B05A7D4628034FBFC003054AC290BDF916E85158E3426BC75500C283C2C A8FF50AB6CB6AA71DE54E43EA2669256ED3B505A408A63138AB3E15FC5F866FD783D7B03 A1B229500FDA2539E6801A07CAEE75460D63A71F424B4BD20286FDA451C9122ADC1EBD31 BB98300E4757BC153AB3D90B719D88DDCD5A8C7D450C51A6508693E5E8FC4478268B4E73 997D2589B84D8C473CE11DD91F389E09AF5812F3E088AECB3E4A793EAA9CE3AE52D585DF A620F16BE98E82C566597FD14A845A24525340E10B9A7F4211644E7D054102E806E8612A D0BC4F2C5D9B63F1D38617D883AF47175D98424525ECF29502E70640F85814F9EC7F5039 272143129038F960BD57ACC6B66947F2D185FF58E74B95AD4EDFA9A09AB6E42449467739 F1097EDB2324D405AA2DC22A2A7858A505A06C57A5432899F10C006CE152F76EEF187044 5D1B067D84CCE202064EEC113CB50FC02AD5321256F6E718656B446DEF3B4343657FAE73 BFA9197DF71B8FA980CCF9070D8832B404BFE6A6E3B1D3CE78FFABA2B19438D5F2516EF0 7773F45835E579AD7E0E01BD9FF833022D08A2CCCF4474DAA4D45DDC4983EE7E4C599815 0B50094326908E625A7C3E1AD24606EA85306A201161E31B172A2C4D00586E06E4F7D81B 665B16EAE8BE18E0747D77A40D79CCEA8CEA65237A831D37BE29F95FE11EA25BAF2268B8 B1C19F79E73E13271406835E8D72D16F604456F944ED1F85D3AFA65B0FC8C4BC9D902DE3 E0BED8DCCEFA4078314CEB616E98F391B1EFC4DB1C71BE8DAFFC6F6C5568E3196AF88565 C0C0D758207FBC76D894AB0842F65FC40A05F8C4A31C76B7711490E7F8734C17E8521612 778A591B8D4C8BDFF3C39ED5EAF3A63DA7B373C3933A7B61BA8A4AD8F338DFDDD74CCF94 7B43A2BA406E378D636F9046CE6DD2884D9D3437F1D69154A31714FBFD4534CE86E49348 5D5D7F62A07AB999B4853C02675485DF8F0B61CCD9264610C8F8FC5D589DF7236496E46D 0D469E43EEF6DC2F15C416F36DE57CF95390F6D925FC3AB1B4FC47DEA22E4C492A320B4A 2A1AFBDF1548A8F2B35DBB0E1989C98B42FFD7DA4597C1CA728A1E557005A297F0CAA089 2F038C42AD8D92B24FA200004BB5852D4871F25D7080D3F2A31A3757D0B343B875DCC66F 5012F0521BA814C3AAC65BC0EC3D90CCAA0BD3FE1F480D350C78DB14A09700F3A5158E7C 2B1209AC626C22FB3967E0ADDACFB879B7DAE77771A6693DEF60951806EED06A6B60E98E 3C362EE12033752FC60AF3D37BC6A9F5A7A9F14CD16465F0C92F3D537DADE86A450C95CF DF48861E2D7572B666B807A84285F1B6FDB6F667B8D6FE20EE322424AE3383BB43FF2E0B DCE42C5850DAE1E37419C36C73A6D19262CBADF33B5FB72C501BA49B8E2080C23927BC5E 38137AD11C745C9729BC2E4B7275DE5F61B9F6EB4B6C3DB29F8CAA83AF0EDB945FFD3C61 EBA2140651D9CDFBB23DF610E7A88346399493B3184BE1DD9E9E8F386D80B36B6E51B38A 3310E60E07566C6A5890C40D3C2AEE6F1255D361A11BA3F73C2D150B410F505D81242B41 79E4C0415F9DFBC6E0569F98F3579F93828548DC1ED931806DE5C947EA35FBED3C8E9D6C EEF1A1B85E321FA600F6B13D97D7F1B20E2DAA1DA57D2A3C7ECB06028331EEE364265295 E282C94F678309AC5E9575F12397FF7D0755AC20A7269FC3A772420E93700885B1333A90 74F07F5B8217675E812F6CD9E0A8C75DB088BE901972FD707520C4DD330839462CA5FBB9 5F28C96275A8CB0644160FC1D6D98B81CFB57E0D6E593F92F7ECBBE3C87070B8632F24BC 61B4B086871FE52A688D38366591A1BB0E9F4BC67904DE9A7D722FAEBCE1CD4B330F83B0 DA3B3ECE3ACF8F431EA2DD2156BD16841FED9B079564F7EA56F654CD592972D906FA1809 7A6F6AFFE98A9351832A80AEE22380E4387A41208E5F7DE787CAD7F3BFDB97DD80FA2E82 723A5B5AEF329C5C6317D2F32579A101F3348DBE409A3C5A48A95C099D3F0D25986335AF A623D054A5968EBFEE1FE92409B5DECFD6AB93282D719AF6749466D85FDF27900C0233B7 818CB7BA9CC6D13B9C47E58A57842B2878B7D5A8DD6D98350DB95001F63D2C78DFFAF0B3 D046E9FE37D1C857F11CD3AB984F7B4D95CCAEF695DA2A8D587004995CCCD49B0794FBA8 3E03663BDE688473CE31E15805E91D7777AD20109A09EE72C8FD80ACC13B8B0383C17B6B 8CBDB46DB425F8B6679E18B94AF5CAB6FAEA68A8C83671E5F83EB974D9B7C07A9FB2487C 9C0DDA9FF8E83446FF2E9BAA638C64B37F6E8623BD64FED12189881C5A89CED3AD88DE4D 2A1EE53C31CFD728078209F006041EBC41F1DF418E11204C13306DC825F80D99920973BA C94508887D25CDE69BAA93321DA3205E0FBB54F76AE28E3E817062460E4A52EEAD1ED97D B422DBB9CC4DA2E60AFFE6E06FA1B44BBA90775F5755F094D2DE224159D871BD243FD1A0 33466254877FE35AF3C72BF0B9F95973833B23AF865D453A190B63D4784113F549965A19 505C2663274629AE0CBE84F1BD2CFD5DB8829E8956548310A97BAAF08CDA448645F49FBB 7D494DD907460AC2A29B8BFA02E8772D5DC531665EAC6BF782B2C5DA743A0586245FD865 CE57A5F3A17D36EFBF9D71F722FDD87429B24AE326D11E4F50838B5AE39E29F3B1832039 7B2863A36B58392790C2A69CBBA5A036412F84232A694A815A1A6214D03E08E7F7955E0E F8BA2C705FEFA376D6BB8B638ECD554726D84D4E4AB5E19FCDD84F461A03E1B6477A7BA3 F9638905DA19FCE7F1C355FBAB80EC65B1305193224E1480C33B5BF34C23B6D53D1C8B56 3D684057008A52D8689DF081BB4190DA18FD40E686B33C80BF52114A502F507C938D99D2 8AC8A38D6660BE371471AD42D9B600DE9E92ADA04E21F59D951E69ECBF79EC799C9B6019 91DAAC67E7E3279BA541EF1764985F23116E204E506D98DA090279240CDF472AABE40830 CA200C087EE8C9C7C43B05F6C823C945740D3FFFA29AD3829BC17A28E7D1178AF167A770 998BEF08FA05A8A6832C5C2AC8A2F0C2B5CD86BE3F0019C2F1855FBF65F0329E96AB155F 4F30523F8E172BC5091EE2345EDB256916E536947A87FBE4386B6910BF954F413F14BAA9 D75BEA63D98909604FC6A7BA157954D7DB794657A62B3B5EA41888EE8A496EC1C137A713 54408462B952C23FCDC9E4D6F4198233167213A77E3033268412342B951D58CCF2733758 4682C1418C4F8962DBB092C52B65AC69ED1ECAF51D0C86F6D0824BEEBED5684CA2738576 BCBBB22973BAE205F584C649F66AA725054EE0AB8C4CA1481C8B1B3536BF94F842F212B8 C6E0100941FDFB2A59735C11E872BE6593A5E40904550B2BBBEBDDDD8D20F6673CAC8281 06EEF36234BBCD308627200C8A4BDF75FB1AC4911B1F42C4009BF12AFBE75FE714AF771D FB1EF6493A6FD34BF81D093334B299E679CC9A8836EE4ECC5687DB5DA2AF009E236591E3 B8FA323686228067E180B613ED00CDBBD5C401067DE13E18DC275983FDECDD7671EE4A96 5661F36B9972A7C67D39F11405BDB42D8C0FB1F94F75BA0217799D8C0F8EFE49FB2F652F A55F92E336FB4728E8029263F95FF8D18ADE1BA6652832D38226FA28D5C0CD7676C2D6DC 2F9435B531F89BCBA975295954757EFEEDA2D67ED339141EACD8C995BF0F005A47EFC495 B726B3D6D6E172E5D7D71CF199DE382D01413C82C4A4C8991B46C2C7044DD950406C3D25 D7CF7F2C5E153D53ABA157BFDF840A0057F61883251E42FB99D49DFB8E1D80DB8E13CA79 475B7483B49F03945D8E97AE8787D29E2C1A363535F8B7FFDD7F874B30A259BF659D79D6 0C02C4DC7A2193C4D53D64FCDD55F59AD3CA53ECF8260ED125AE858E567D5B482C133C0C D0A5D640F4480C613BF760AB7559FF0D855F567BAE5CA4E25DFCCB06271D47258B8E7E18 48208D9F7B206F0664C0CAA166F15929334EF7E320C57E85F61DA2C99BFCDCCB563FBCC9 B158A235D6BAA59D19281A2F351B8BC374F0FEC2236A77C8B23767F3E3396B67F7745549 D9C2F8C19C1D01682CF84D29A1BC7B7474A67BAB3282DD6C1B14198EE883E8C8D1860F09 4B8399CC8C2CFF689579E9B4AAF7690A1E3B69825B60418344B38F6BB22BAE05802E4D50 F57CBE798BEF627EC4581481F2D4C8861319D42C0E9C1923DC855D500D72EB7144836FDB ED873E911A74075E738F1430497088AA1001063A280C5AA512AC401A89430D3A67922992 499C811B65EBF67E3C46D152654151811AC21F651F19F90CAB63050AEB4D9FE35C97203A 3D617748AF0F7530431A0B51B5C274673C4EAF64ED4638917B5C9C3EF038FD1861BB3CD8 B62E7E4999A490FC418DD681A30A7CA5C487D1470123EE26DA889E2615D607B21080A48B 5CC3068B0B621006A044470C82892DFB614DA317F9A6A743A59D5D4F22392C7BBBE2820D BC7F6F92CFBD659DCC636C02BC7799A2981E36CDF6DBA78559F3D3270BD61FF11164D382 0091D91B992492D575596D35663EB6AC3D66C7C41996945C2AAB0EDD68ADE7C8AA02CA63 3F3F3AC92588B26F5B1FF9234F0C7FCE5A7523CFBA4FEAB1ADDC031CDC5CB46E3F50337E 3C87E9D5BCBA0678F7E1FC33A06A771B56F9E6F362826A395231E98543DD9109C426FC03 EC69E6765F16275F42E13C05B2774F6504DA3CB3DFBA3EBB1D00E7E7FAF793055707A69F 899E8F14F722DD86608148379FBD48DCD331F0A118CC10741274A5FDE07F163F1D572306 EA19FDB0048D6CCA211C5E3FB40A44E48A4F4DBA8E9FE4BBB47D5F106F84E73961564B7F 41C0F36D026339902DD7CE020D51CBF9814E291D6C2D743B908615B72870CB3AE01E3CB1 1BF8BF2D8CB9E6A9180B60C369440F6E0C8D2B311EA5E54CCEC6511E745BC0326A638033 EF918A9AA5E288960B6F0FBB445E9D1BAE0690D7B65360525F7AC937DE70F2E9A083370E 7F180433EB1FEE586BFA63E9DD2FE8235C803902F1EACBFC5900F878BF4F818A141EE9F5 A73DAA6C833EF0E45C34FA6BF40BC0185E4536AC936AC6F8389E9912D49B14CD0972703E D6A81CB5165D1077D5E8F119265F5233434B9FB84F1FC9F9AD9FAF0C0944901914A518EA 6D86B6FAEDFC208284D6A38996937F3CC8E3DFEBC4C6A5D3BB3422EEA9AAF3043BE5BEC7 82AEB79CD380E611606923E5D3E7999C0A80763927CC1145974CB0F1730CA28E28DA01B7 F64A3349ECB6FBDD1F3E847137315EF3744C685DBA26AE964C1F744F3A2E77AB710F1FFE 0B3B9AB68898D372AFA3FD35607E400F17FEA8B18A9C522E8807324DF2EE5285B939833D B7D1D1D70441954BC9FB6EB31A98465AB9CD097ED14D6871A513280F3EBEE4F5995B9DA6 F0B2D7C0C5A344DDFBBA85E8A950A7A0FC919E9FB5E4E8E07B657BA225FD4101598BF620 298D8B62FC46101A98ACC0D5A865A3990B975ECF9F578AF5CD8163FEAB0BC0439F02B436 3D4DCC976C0BA0BF38BB75D72DDA2BA15B4B19CD9F64C8D9BB20B30ED866FA3C6989CBA5 4BB6B5C493DB22D90A4A92A9F68689910D025691D76DF1DC9C2BB8C41ABC4F99371FE57B 86E1D15B7B65938E6986FD45A3D6E3F48E3827971F4D20AABEE22B9D108DA4967EBECDBF 8DA0E5F132B7AF16B0A4B7A2673556FCE942138B45FD0B39E814B4F3736A1BB332A26E71 A6171E904F0197A44A5AF9AAB8765FA45D17F9074ED7031FFB51F721318B1D2B5ED71FA2 69F20F226C3D37EE9A79AB765C5B583B543DEA161B2C0201B6D721D97A204841B2CD1511 05DDE130A2F766AA3EBAD7B2601EDFA408C7CF784E07FAC9BA3BAD0CA9208F2C4E3C78C0 266C577469AA3234564E557B689462206584870595BF8119F05C752E4D45005E45E3A88C CCFEBF733719F1CA3E2127224695B22CED796035B0C5789FA69CF60A0E5D54AC9B3F4310 65B3019BED6453B92F4B540A2CE603E8E802BA3B4D24B902CCE71584AE893788FDD02572 0E2195111944785953A65B8D1D5610666A52D173E9E853E1FA9255331FCE2DF6318EBFB1 74AFCA3561F6BF5BAC933026E3FDCFF52E65E316E41FD8C9DFB8B507020A28D9D447EE45 7D508E37A0E8962663F740E1A595FE9298FB634141A6C40320F3E587E7A645394C06A810 979A2EE628F391DDEA51A5DE5AF38848EDCC6A24E35666A927549453CE358A8F646F6B5B 61DEA56A5C6484574B195B0C1CB9C756951C0A1C5D8790B5CE4DB99B9C177C0D9C0DBF2D 05BA18A943D379397563693C16686968F76B50980CA5FC742A8037BE068EDE9F9C2F9ABE D9291C7C4CF2BA77553B20CB6DF20AF8E6BE9B68E395E892D0E3DE36E84E287F64923CCE 821A49357725BA4C1CDE0C86D527AE0E743A2D931E52D18D97A219C24C2AC9A98005728E C50939326EDC00A9D866C6D014FD74AEE95B088AFA90E0362BE17EF8E806023F7738C692 103C9E18E3BED3673ECFCD152E3EEA49BC72A39C2AD2DD7E751ED9BA0D904CA4799D1124 940B3E19D2052E75DB262F6FA33A003C246C3E564E12B180AB4B84FDDDB9A8F0E384D2A8 B6702FB93E78F582DBA55386B375CE5290F078DCBA7789782622B19ECF79F30FFECA4804 3D69490046888CE5C874E7F67CD6FA66F37443AC8B18BE2E7B84B9B56F47C96907FBE4F4 070677669377760865424C0E1AC5FA77907727A75C97475591F3371EBBFF702B8CB2EEF9 333437119151817268051FC61DFA92EC31C68CC626F54D2ED26E676AA86869BEFE3AF94E 416A56B5D6C5C7EF81B8499F691397A787878ABAD02BFB83AF3923416F30FED3445E92D8 B14675FBA3DF7EAE03EFDBEE69DD5D3541D5152B38F4243F235F1B8CFE550A652C88B180 D4487A18A3360679F777EB0F4ACEF2DD4595E361AA397730EDBA5FF898A376D05CAC6258 1D854DB5958A110FB674DE8D7B6874AF73C8863868CDA61FB54A39BD8C86C42FE110FDF6 AC6DFC8C616CFB5AA4A949A56C5AC1078C8764FD3518B4D3826940A7EFEAEFE52495FF00 1463827104E7073DA735374EC48780FFB00265B578F80E64BACC480E8CD9BC981F6D3883 B07FF7770713B69C5A2AA5A9159EC608B880912BE55B25BFB6E68BA48FEABE2BC6A7AA71 BC2EC39A0A15E7773CBF10887E496DD99A6C3E51D51C2C9A6494AD29D28407839165B9D6 6B274D5B1F0AAD102B7663C6C6F0E32930CAB486974FEE4C185B032C1D2B21657994A11D 22C8E52F128BA149CF3B7EDB82E7576F4EEB5AC1E24470F8E6CF5FAEADE69CB0A34C39C3 80D43BFD2D1BA6E654B400598C55B82BD50BE2C5BF96BE1B0F37FF5FB46ADC17400B5B1C 00A0EDB8BDF9A92A8FB0DDC94A2B75CE45FB3EC09C2DE4ECBF3A035EBB37C6B84C58DDFA 743332DD5A7F233704DB7DCB4197D880DF79917FDE75210903C8D90C4DEA5CE4A76A14DC 3D9E463B2AA2D3FD993DFDD4AD024A15FA4723ED3E6137AAAD190F6A3BEAB64593891230 7F3136BEF043DB311E33A7C6EA3713B2B1811938C6AB828715574ABE7A713F8413715022 C7595CE00AD7F4F2247D6F8BA0772E884A99D52731FC4B6B18C66F1D262261AC288938DD 5C8431D2C6AA3A6F34D473B1BCEF448ABFB1D197E73D9F2AC1723E135CF132A3903A9339 AA80EDB5F0437ABE277B12FAA9C182412856571DAD8586C7BFC3D2C11903088187EFC5F6 414571C77DDB61E9D1CD1C50AAD630B5FC1026C3D6C4F3822743A3324B65EA455ED11C2B 26F0B026D30A1515F13BB6161BAF43478C8093FAF486B4BCD9CCC81BDA145EAD6C095F30 533505DDBEF84041DFBF3B78D59D656561A96E1DB17D741AA025E26D45872DE36ECA9A89 70D8D1F54439181851C8CEC07D016AB6741F4F7B22036E8DEFEC75A42F1492626BC83459 ABC1C4B401960208C2B73ECD52BA3E12D720E848174A474525B5D3B3A22E806E89275466 675B28B740A0BEA7FE3A0ECC582559AE6104F06A7FB4EEAE688B51D171BF300F541254B3 26B3ED3E5F339698CFC639EC5A840C25EF9AB70B3B4A246B67D2AEF5B4662765F5C9D0CD 4C9899DBED7DD89388DBE95A9188D2BEB139BCCFA1FF344DD0B5BFCF4EE81CDC720AA1E2 5F7C2EF3BB9EC3FC8FF634CA5616C93A587DD478803B14513AAFAA02DC0D65F5819790AB A9974B7C11EC2ECAA7D42F93AD3AB005A4B6191964173E3872EC8C65BFA3ADD7D8926867 47576949FC79565481587A7DF1630EBDDDB9A57861D2D6433C51BC3C4A38A2FC0B8EDAA5 13E415C709A9FEF1E1198CFA748AEAB1BF0921FB0A6ED836F005FBAC2CA460139239CB9E C8A029418F882B8EE667594A80ADF5CF5290F06F46DB40761EE2059602EE7CC012195CC5 5A3DB6FCB92B07EBB4FEB7569EA71D593202BACF0C7C6E2E8DA32863F1E72555C01888E0 E9F752E3D34C5823A248D15902D28F68016123A33332D081A1DF80563326E5FD6C8022E3 6BE73E79DDDE18BB35D03F81B61CF0230B207501B51B907F3D971C1AD9615D26963515AC AF37FE5FB8F27F87374B365CFDAF24255957EB1E6686F6EBFC2E21EE218F64C184C41BBD F47F07B803D880D968395AC16D039290446DD80B6525418190CB19C44A5399F629104249 401606FC22D527AB9490BB85FEE1215F142AB6B3459DD05E8BE89272294B8B2299425C12 D1757867A744BD1D42ABD88D700D3AD90623561399824307E7FFCFA5212C211E0D3AF01E 27869CB507C43BC3D71EA0F0797020B4D45BC0342CED1F77560BABE10012B9B745AFF3C0 BE7E9BCCE12E861ECDFEB4CF7E6696D488CC518B467FDD63B7F03EB3BAD10ED585A58E01 9C5D951FC7952965D86115FFA679D98B1F0D06CC60623CF81F1A1C12B597A41051950C1C 6207FB40C57A7BA6E774A03A83BF5D57F0D167252070C50D3CE91AFF713249AD57F34202 01B88503A1834655EFFAFAB888F74A6ABA8C18B2D0391C46B58103E70E0C505EA3B69054 3FE36F52C9BA7FBD20350C05D81F6372D1BB18FD73100C825F33AA26F2AFC2C54AF15D00 1062958CC4E601B3FB88322AD837DAE81A7D257252439C662760CDC6E02A06F151924D9C 168391AD33A3855949BCA09BBE57A5E669D71B61DB70328136A5170638BB100EBAA2CE0B F661C4BE52862907EF88C27437DCF50BBF8BC451F1B622E77E1B957308A6D375BE9E26F9 CFEA2C9842965372AE8B6C04831747A911CA801DBA6155555E5D3ABB249113EA41022665 332421EE17777AA0274BF6367805FB2B62B1F4AB9820A8E0DEFBBEBBDD3CFDAAEE2E4F3B E8318587E08692815A994DED6036EDA322CC51FBF4AC31B1AA744B2F48A35235D56B1175 4AE392CCAFF97473C578EB765888A4B3ED4522174B3AFC49FBACB2DF0B0955DCE8994C94 C000F4824D5D530AF366050CE7073653AC691B5C76CC88C35BEE88773ACA33FEBE88D052 AB47F1BAAC342F087E1E97BBD917A022EA1A9116D3FB57A5B51FED8F9C4AF0FED345F071 05837C0CB4DBC814AB555E22508F123A57247CE568F234204846112E85C0DA1841B05B63 CECFB7B0C2CC8DC339AF2D1D2D307CD5478743122B62B6DA363FCD37F6B61CA4E743F3FF 51613A25E89F890A10FE1E22D8352C74A6D28221D8150BFD46D97647CF66DC2B22F24EDC 9B4A49A9F468E4DF9CA50351215CEA9901DC5DF7AA19ABA3B73B4A7122D0762813372E88 EC34924FC8364EAF06951F0DB2F01D1E74387F0914FA1E2BC4DCBDEBEB024D6662029656 37CA66C8FCC02C99B0A10838CC2DB88FD654B8C12251CC68B5D4F0C1BFC7D26B852A369D B1CD3268D06E1197DBC05C791B6FFA889C4C95FBA2D48E0D600D7C3023628B3C3214E124 9EA5193BFCE1D0AC9CEE22213AE785CE8A159F8DDA8AF920332F3D107BB45A562FE3CBA8 B0378738390C27B91394944BA1946992D8B9AC77C68A8380229F635DB8ABF3ABD211D117 30B468FC75502F171210DC9F33FC3EA1E18DEF5A810A93603763D56945B66FA24528E72A 68D8ADDAE7EB8693EADA1FA10869225C0B634A3E5A3B4F45BFB79A86D361E3DD8BAA6C59 AECCDB3DC42989C67F73B1A2FED33386A2622B98A9D2A6AD091122A50B0D059485CB045F 70548C3D97B8A254428D5701E3C675D5791EE34BD55EA50B4CF90F7E8ED3854460C88A1A 676809FC26EDDC85C99CB6C0BFD275B972F724AE607E4FA295DC1C6B202F8138DD1765AB 71F49FC4329DAE754B5AD4A07C133B5499BADD479C23B0AA67BABE926C27106449C4FA72 D4EE780A63CED1257F8259F106D29EF75AA27B87411F765D28268174AC57CF728161AFDB D9D1CC36ECD2CE1B0E0FE05276BDEFBAECC1EB0D9F49BA69800B38404C402FE2F028A499 5DD2F7DBF0388165D6EDA88ADEA94C6D102B920FBC62B5AA061E8EB2380FEC22D8E73C93 FAFA0E34C5CC389479182F76A192195B635C764E774860EDE3ED2B9FCC173E5872AD1859 B178801DB74835A8C22C8D310864D5443BEE6212B33A7395DD8FD816C5A61EFB0413DB04 9F33BB64AD0FBBFEC9232AEF01114C798604920C88A3CCF95DEC0E97EA3E2B6B354AA0D1 71497ED28358079EDC2FF123FC70DA03EFAC9BA36A0B9D1FA08D6AEB737E578BDC2505E5 0F49BC4D4A19BC80027C85A437AE5BF1B18D6D08908F45AA371C269C2D7E7D72253618D0 9A7655550659D32A4378200277337BC6FA7BB57F8D6F1E8313AB936918B2CDEF61E84143 840104927DDD28E62C23DE7822CF4401D1D94492E2DA9CCBDFEEC6968B849F0707520E18 33B4E6FCFF4F6D154B6FF5A69DD2878BA3F64647BC75503F435E8322A6E1AE7D968F123D 914681BBE402DBC3E4A5B51CC0401100F857F42A887D7146883B00CBF8156433BA89E675 F9533D53F017994FF33E0AA6E7C0A9F4D325C9A89E52F6624A755B8D958B6B30B484FCBA 2ECF628AB32742316BB873DE57CAECA9482A43327643E1CE0E531693BA16C97AC029FD68 4538052C1072510923DC3F0AD3FBBC0783DE11E928A1B3BBD76E5D014BEFC58CB9A9361D 664434BA009FA0760395910E2D354E0E84C8F31F45B2FE878A847DB44D926A0536D0C886 DC24C95587C8D2C4166A47ACA6E801CD244E8F1FD92DDF773ACE31AF8E1C7E47101CAFEA 8118391CC2D1AFECBB730FD73E9392BF283A5437B2B514C398F83403DAA337DF027ED74D CD603689A24DE50DCA21E0FB28E0A0893330CF9E80F62029C7F3D04B4D240530A1A8AF3B BB8A71E1F32859EC5CA6EB277502747D61800E3D784A6298B9037798179FB40E49EB71C0 238CF5BD430BE3995D693880353E8CAF9164DF5F197CCA0C93A4E2C6F7A53340B5A8CD70 A7AB863AEECF335CBAA673989ABDE49BA451DA22F99698A1D7033B1C5E2DE80F5BA78DD6 7AD8E94CBBBE05757CAAD85008B8D0E787690AE86850755FD2DE489762B0294BB95CFA54 958DDBF9A26D8C3FF3929D27742A0DA39307A6595ECBC8009ADF68B34CB6905367912B79 2C24A2634CB633B749DECAAAD1AB6B2D19A2C4AE04B0CFFF65E4387304F4F554FF37B081 86453F6CD874061FC5834922AC14FAF9556A7309FEDE56AC7CE1E3182DE123446183D2CB 6F5695026ADBA0D42D316245EBEA89FA28BAC998354A46041F8C5E491FE751B982EC5FE6 75606051F344918D3EBA248088565CA68D09B2F23AB981DB036A82CD59A1EE7DB5C37269 DE02D91E8B7E74705DAE34BB8A53EC44D98F515AAB6CB89CB12BC6AAC8AA823AA04729A1 A3B0FDACB9C0CD05F73C24A6EB7DAEBE8B0BA2825CFCB1785BC114DD4A63FDCBF1A7C050 93622ECC64A89BBC23399A21BA926C1F0CCCF5EF84E03C48911FDF4C0C79855F3F58ECAE BB20775EBF4C12C03A1978D22FE0B04075A7C5DD704CC033EB6E14C605453013B83C6969 FA94328A51A04927BC0D243B7476C167E7F596628F876D4F07060BB63FBB6CC197BD8106 469F916450CE851B42AEECED9E21FB737F4224527B91A32D8A619DF920BE54E76AE0F6BC 150E4E9FA0F9E9B6878AF080ADAC5DBC231A26FE28911621ED8072219BEDA5931C046089 9BED7B5759E7EA4128DEB3656FAE0F0D2E9F54736D607C9D9A26E885739D07F1A6F93392 2E09081C8161626D832290B9A3AA2553D7AAA1C74B1D024110E5EFD7C167A1433406A1C7 7933AB4C74940A7E06A3F39C22C2458481C7396DC15B97E8229DAB4E3967297BB60AA936 8E5D5D536B22989A18CC8B6D0CFD5ED975A096365D4D446D017EC5F2ACBE600473285C06 5C27A5B82CD918C809DC3AC43800EC9C15B91BC35F870B6535703A65524D0D2B5523F504 85FED78FB0DC3DC765892FE6371C03D4CAC01BD04D8FD0550785ACFA2A69CB3DF8D0CE05 15C4A22F9377A088B4F81E1832AEDE1DF8C19FB75E60F3F7A47B510D926ED5E09EFFC2FF AFEC830D4708C4593CDF06332F234F84292C1345A2F606F8465B0EF48477BA3AE97A2B9F A168669A1827F2ACFDB7DCFEDF3E48654C72FBCE5FA45F4B3F4CF8872B18F3B31C60E859 5806A24158D9E6867DA77708A7AAE2C9E3D5BF955DC9FE06688FF3267503FE22047E24F1 399981615B6F25EB1390A09A0B327CE93114E6ED94906727CC3C0901B2A5FE9949A4D95F DABC92B9AAC5783874DDA99B45AEF42B851B56CBC3BBE994856A45DA3A540A489659E2E7 356585CA3EB41AE9F5BE651469353BB6680895DC61A247A5DAE17DD9193544C80AB9F725 BDFBF91F500E2DC29E8316EE480D5C7F0ACA37E03E4164370CC768E855FFBAA58A269EEC 8537D6533936FA95568EB7179E2AA686882FAA47D8A40B249947598585B11012D9E9A1D5 974DFA124182D49E7AD1FA0C783DED558FDB3788C8E10CD13A8163183EEFA58683F67F46 28DAA744E7A33D051E7E004F441B0CBE81F2624A13E0CEE72CBA131F3AB9A179F85D4CE2 F8BDAE3B068C7E3774FF6E1F455586BF5061C057961E0744A77AB7ED91AE3E49553F6860 297C0F5FFF09DA9AD745BFAC093EDBBEDE72128D51E3965E9BC4048E331B2D43D42DAA16 2B066C26CF6EBB68FE9B6CBAFC0584AF0B00CF3B05468DAE1716F60E2B7C5B1FD9A61E2D 1C2600AA3E61DF4D613E51DBFFBA02747CD6D0CA1D250F8985A57C3694B66B2B3AA844D8 2ACE17F2A33522B6777C499E324CA7620BF8765173006C508B168077649B272B7AED6573 9DEF985686156B4CF793CA99D1C6156495443F0FB995BA4BFECAC223AC23EC171734FF45 7EC2BB91730EFF16BA71D5E7DFA2FB057E23E07C7F8FA695AFF86DE643CC74B116019C67 DA6EB12E52207F0E895D96B95DECD350D96A1C7DC0B97106927FB58F89E35332E34A8EFF 9106F0D3B938CC94F7F6F1BE25ED6478E3E7B4869CCAF06909B4D15DF84A260C5CB81F07 986C4BE1D22383E1DD068C4E00C4B329C28CD02531D1770E2DF739683FADBFD297F4E2B1 76721771C22B31454FAF7B097C47D995AFBD512BD1C6EE92E78FB3698F54CC2454678430 E947C2E1B75E1992A2AC40274614725653486F621C7170C35E18A8A936D569CD5DB61EEA 6526BB44271F22629A766341AA57439535C022530D0BA853E8959E950F7B059F26C54489 AEA4DD40CED218D7EC4ED8E2C07F06DE5AADB0501F291B77DB022DDB2A2E110F36E60CEC 252D892B2C38EF4AB7D1A281AE1F09F1E9695D0A4E8D49844829E100F0C64B864424527A EBD0CBD1E14D5667AFFBA20259A8A801CFC66A5E4E6D029B5D3D1ACA99158A758B53B018 27F6F49DA041BFE5EA9D60BB4858D309AC088E66A5E3E2C34E9AFA4E23DBE542A06D97BF 36C8A15AF5AA4CA1B7DF4F34121AF548D850D04DAA1C8A39FD92A7320A65E211A188F82E 8CA4BEE4753FE7348047F60F0E8D5876A14D863FFB0068608A843F1860D60022DCC59E3E C516233EBD07207D98235EE7CF5EF45F3DA829C0FECEC27FDF279B59E0325D2BB3C7942F 3CBC76106975DF82919987809FF0AF6A1B619434D4538C92383165FC5A54C113DA063B54 FF1CFD8B4166740BAC0E150AF1A22B634ED201FBEED078417C1D983E7C0FE6EE523AE944 9487F42EA59AEB62EB104144D552B79E936A707585D12B50F2DA2928673D22C4E21D4208 A1A60BFABB2CF857CA22A935223E35FD5CEF10582D519BA8354B4ACE39757DC53B5B9FA6 63651C39099DF703C697D376D39808281C7647FB28156EFAE2BC1BB3F619B1E34DD23592 7766920548E680EDFA9D576241EB134B7E912F5ACE49DF4166B7D9543352AE77B5780E2A 7DAFB649C013CC70310443633F3427EF0E001E4BEA5678FE8AF82C0D366A2DEE3849F73D 7C0A3A1C735D1CC41F332D038F3525EA8A5EE211B95E1EABFBC3B720CA7FAF6C0576C2AD E7A5CA45426FCFE1E135B0460FAFCADCE535EA29085961284E9388132C3208A692CCFCA7 B64DBED9EC88A880C840F3BE97A2CC406F299BF3A3D13EA93ED2C16BA29A2B8FE38B8558 C2D67D141DA051A9885B3032F4D013BF8738C2890853EE1006000EF8E1CCF25BB7BF77C9 12BE77442FAF9A1085FD8AFAA26FABAA6C2AF07EC3F28918D6D553426B9777C806C7EC12 0B93E290AC3142B758A6DF1994302A6DFAFECBE588058F4CF0CDC67A9FFC6C4DA20676DA 5ECB5F7065068B9287DD25A146AFBE9BDBA46A67D90511E3337D350FA2CA3E9346D097B5 8CEACA0B59D2D37E22F60496548E8322E6149394772B2E35FE96133245E2D2004775B8DE 30AF6434B4CB0A23591F240D7C9EF8082AB7349DD52AC39099E56E80D72AA01DD0E2C5CC B066059792D7540F376E641F169C6B23E2E91F1229B2FB941FB4FF453EBD280AA5415922 B72FAB6ABB5BC8F9DA2C29CDDEE154BF57D2518CDA1D3F4F46C8B4E9EFDB317C0B81078E 346780E22AB037155932EEAF84089FE669891449E08E77296DB29750417D114853918B8D 81552A5185AEB9779E172FCC117C0F9F2743B5E1BF4CB1C2CA4CB8963FC958F4301981D6 37AA2A777C8CBF91EBE60A0DC8AB4498B964C4DF33DC071508A4185858C066685A55B55E 632BB4C309ACF6C7CACC74C78C30546C2DA69583D5D41ED4B317F89E3CB59E3BFC6171F2 91EC24B99553480F9F353CC5D7E3458F9A1203A57038DC6585354BB53E9F33057A206CC6 916A243826A489626DF75CBD4E0FC42DE7E1F8CA1C9924DE9E0C3F7EADBD0E813417996E A6D7691D37726AE196E54910F08FFF7976D378B2DA1A6797667C3E9F9FBFD50755797F9B 7E7BC8322566BFE2833749903206C81383443CB77684D04E442F133B9F3657ABD94BD42B 59B891D2D722A7B66B9F71FD574FD5F0B7F9FD27902DB327FFC200E4A8200C0BED1468B5 22024D332CF5DF38D31F17E1954C1FE2E671823578EEFA6B1D757D0A65BD764C25844EDF DED9C80445F92A9CC4D06CE21F5F38A9F6F3A48523A12E633221DD1BB253F38B21ED9573 88AE0885BDA3E88A7614E662BA726D9DCC150FDC18C8BB3BFDFCD4A8684734214ADA1E82 0E8BCE82084EFD399B7B97DF8FF8D5E0FB8EEC5BAC29B0671416DCC3EA2E5D073B5A9C76 107143BFA91E5A4E95D32516F0638CC9B0BB476333AD2100D55703F6AF66108DF89BA28E FC2F833FC9765EE82115313E66BE4D1259473459964D47889273C29EAAD212263AD3DF4F EFE8FE41F48942AA1B9B4BE07C7A2FF878595744D3EC3158FCEFBE290B964095515C95AB FDCB77F03AE95A1E5900C6FF31FC1A8F987FC29D701CF3B694C4BE305E7B0458AC57144B B5675181212E3DA2031009A4B2FBA6E8258C933FA6716FF48D7C0934AB3FE41BC951F33B 037580EB63F65DFF7FE01A90CCEE4A118D2E030AC4B5A8741EC39A6394F7C18E179985E8 E0DD08B2EBCBFBD8F21C1A9385E6D8543B758E6D29D9F05A6618BF2E0628DF1B093EB7D6 3515FDD077C4CF0E9D5464BDA57CEF9E6A9E523C08259697224E76EBDD28FC9C3B4A6EDC B4D349D27FE780354D61EACA2D92468BEB8E66B4EE30844D151B37319D3082B7BC84241E F03002372D5A9BEE2F1E2E86112022B9812D9C68DA61437ED03D56243AC1D89FE674CFCB 4BA856E0BC63EDF9CE246A768D2676E63DCC4422C882C92FBCEC9E0C859CC792BAF51168 E7E05C6B7056CD72A9CED28A9B82A52CFEED8AD21FEB9D9EFC43406F89FB2E802052D702 4560766E67C335130980F1B3EDC74C236FA0FD200E3A3A271036327F213E36277F483401 614045BAC2A96C1C3FA6FD114DC791173B71DCBAAEDDFB9ACA41D1FE25243D8CBDCE3FC3 F1473860B062B86A4ABBC279EAB76F28E7360A80CCA7F0DE87B121717AF6EE72BE0C7938 A5A456B60749F49D26228107C7117B5CDF964F2588D2829EF31CDF29E614CE5C1A11DE55 E34D7526B68B9723CCD7E1CFD303C4DC4C7C7A0950460FF5271875649E269EF76EE3E5D0 74002A866B9D12A33813392E3586C8958BD9C007418C63DDF6400E6877C8DC60D6BD60B1 6353A138C9FD0364F7ACBC8BC278CD31658B05E6557B13DD843AFC81EE908FDCA03ABBE1 F78AE759660E65A16B704A02A5DAB4C44A9E02541F63FD23A5BD886FA571DB1775E7674A F75983CB341F595CF4D1829DF8B232FCF95DC2E79C2DC5A520151509ED21FC5992653E20 436707D7036AD0E52FCBA3E4EF8358387FA8C7D2007EA468077C0FD8FE6BC5656390A47A 7B0D7893EBE74A79FBA595B7F5D8F6CE19089B94905A94A71A495ADDDF42B106BAF48563 E0C7F6C23D62B0CF7DB539822B5538DA6D0F1B735B104E981AE5BD03DFB0829FD02790FE 65A7BFE76D56E0B03B39808A420128CAADC3CFC04B506596ADD87723090D8508D2B118A5 70E52665F988C73877C69EE7322C45100376681C6EB488B0B461B3F59D7FCE3F35B39C82 2A0EC91C71D632D716A54C9858DA4035FD8B4F9F082DCF0BE7AFEA64C6F7E2E602BE402A 472C4172F9041D1AB29AE7428D99741CE23BA9570A1D0D77867B37F451E4B27FBCF0901F 2A9FBA920E61AC6A9B7619512954676926CC41E938A8D2138BC93DC641687C91C9782F3D A281D326772CE61E366EC76F4EBFB777BA50CA753B0B4B3A854B71619EE31153AF944085 F77AC0CC54F7B8D7B518638F3AD1EFE8D7D55C2569AF9E2B38E67BF70463C64AC712A550 74A573E094359E776F66F32458352117E61C8887F44B3CC39953DE5669793F75447D58A4 04F3996B421A390ABCBB761D504CF4A7F60341317C5F34AE0FEB9EF5F5A09D6D986B912A 4C28015B5089FC6427E69F461792E821445E9E04CE33127B99B2B64047BBA33483C9D61B 03B6927F10B5882C3965B9D37C278866C2F19EB44961EB8A63D88FECA1B5A0C011487794 A556EF0DE3637E0F72C46D32413DE43D87EADEAD234730AB26425574C32DCA2443C0D1C1 6F9F1BD837EEF4737B4008BC5D3F51F31DB6D655CB1AFE335F8CA6D704D9D46D238A28D1 E9D84623D11F98C2FB37CA9B1DBA4E0B5FEB39314720C54B968E603CFD6F58C068FF95FB AF27A01022624CEA7F3A5D473422AD5C3C09FFF2522DA14631E9D154BBC8801A06C97812 CF06829216F46EFED908FE7E63752D637BAC1AF43D7FEA9AF9FE3E386B88FAD3D96057AF 9763AF3D285DEE33A63567EE0CDFC0D279FE7A564B5BC0761B7A1B08640459820119283E B56ACDDA1006B83359562FC12698B4A82F69D43623A124980BE04F5101579523DC3B4CDB FC9BAA354A77AAC3865F52CF7B4012EDA8166C7E8887EE84ADF1F4BC96B61190ED7EBD40 3C4168204D237C30182A6D919FE9382128F30C9D50265932FF881EC7EA367ECC5E7A1BC3 BC0876CA0D565D366EE3BA0D515E4DD58E4162EC61E71F006DAC47E3163972330A538A6D D48C618EF0575AEE863B99D8A7213561444C09E6D2C219FE621AF7815C0EFFD1140D6B39 686217BD7316889A1A255622E636BEF64B4048B6DB0BC8DDC30FE69C7D5FA3057598C017 F4B7DD6C4A3953A02DA2ECEBF624B07F99E566E00AC8B323CCD256FD136D1AE69C1A5A86 726F0F326FEB5AE6A056BA960FD64DBD00EE30A7F31546DF78EA2CAEC5068C56628F2192 F2D9F93555B95208EC8F1595241A8408C752D3E80F5705A8CAAA50631EDDE2A4F872EA4C 1E940B19E2B99652C2F1788C79304F77C6FD5607FBE27AA4291B92A1346D2AFFB3B38791 7C212869CE330F639E50BE96D3F4219117DCEB0CA999AB6D3FABE692B62D31E640E45CDA D5386EF231272E14190E811BA0C12BAAA7E4CD34F94DE028A81235BDFB942B84831BFCA1 40834583E8D710284C9741BFA06B7945B88ED3AD1773487F73D189E92BFD0952AA4050D2 CD1945BD99F47F839E11D0147715A0777232E9A2BD02DA009E56F2E778AD7E871D5CF237 8BA3B351BAFC4871E45AC851F9C50F687F71F86A7A9E5F590D926F8324D331A9FC6585AE 54F8866C5AD9BC1DE93F7139FD8F2B83F9C80C92796997E3A55B7D1CFF4F0220B362652C EB93E28801C09008382C1F84AD4BAB1EA470BF2660CC39A5D8FF4A30B1C34739E01A124A 0CC928B4B7CB8F29FFFCA984311F7C08C9F5B66EF14F1EB4519A6E8550093C680D53E14A B6185D0DD65C3F9C6F00C2F70C3DB514C3F0A8B44BFA38DC5B89381847F5DF55909F018E FB59DEA1FFA18DD01AFECCC809F784A7E7FE8ED9D713E9E59637C90CDDA7C06095D7E680 FA27DA2A5593050F5E7F98759EADDD35B6812AB2EFF30227E29E65BA393334ADD3FE89D8 7F78ADB5D463C6CEFB2CD78C01C7083E3AF95288FA43A6DB5E53D8FBAC96178AFBE5814B 41542ADCFF5D7FA5B4DBF7C572B9180820EB6F629220D4E66AE516C0A5057C2413EE2977 D9E8F66804E52CC45E96048AF4A0FE838F0A7CD9D5A8DBA7214CCD99556AEBF67DE7ACA7 56A7D60767AE46C14D74F69AA841C0C45CE2F5BCA05A21CBACB47136795653CC925E396C 0FA196309C55F8D4092087B37E30EE334921414EB44D769733E09ADE08B8355E0EB8FC78 A0CC7BE1129FA6BF3D4823C4BD759A73F82ACA3FD21B18DF4341852D5B95727E5F018EF0 DBDDB90ADBD9EB755CC119ACD47580F9E09E4EB8E058B84E5FF61CE15D5171A6A3211981 6E920BCA596D38A9CE9DA9B0A4F945E81BDB422B204BC5F0BD6F328498CC89F568A8E59A BE5326481765A246E03671B39D340AF337694154CC11061256C40C34C4D156A2B5BB4936 64DC05B412FB329E976CFE298ADEFF914BA0705946D0868F9CA73B8B7C4EFFF6A099C4BB 08502BFD9ABF14D0D3C1C0CA4BD77FAF11AB286890A97718B00D054919A0D12248B52393 6957602A042E307D2674B3B08BB8D84C41E3B99E70FDC4518C7A07533F5756777B14FC60 4DD865DFA6BF559547887098FF7427A98ACB73DC4DA3E620BCDE4AB0B4BC97CC2968394C 17FBC8ED1A1A3D1CA4F454C6895A7B3E5CD54032A347FE439651965A72D3712318240BB3 C8033AAC7463846E15167AAF5635A632016B1A1FD8B784D4C9F64434A56F67F22A2B4F3F 1D46EEED9CA90613C7725971D5C67CDC3BFFBAA835ECECDEB59DEED976B49E3CCC9E69BD 7A82E452B5F99814D657C0C4C7652AC95EECEB3C25E82D52BA0795A17A15500794B61E89 7F80FE07FBF476D39AA53B5FA743D38BC8ED0BED6C12F7EB9F76B1A169C42D59EDF39310 201731A2ADA2B403237C306E897F16B5A37162D3D0A24F69D88D5AC0704B7C1DE128F058 502F9E57DD5F284EAACFC5F355BA90327FC372C06DA6C1540E27CBABCE91D04A48F52CE9 7EBC2BEBC328C12B9C4F66B5320E78035D2590D1114152A2780509C3FCC2003CDF991468 E821B62463DC4A9A17A0FCC34F8E653EB621B51BCFCF6B05DC7931B87AF8791A4DF871ED 180EA7F4D97E492CF6F3EB6570F14754F0A154C2E3BB60524C4146C5B158D31B7DBC2EFB 31E74E54245006A9B16D80F7C8B4911EC2550DE7B190609AFB0CD4630A36951D0AB7F08B D693C8B41AE0B26BD1205ACE223487B8597B477872AC80C6D05B020C0F0EE5F24E576D9C BC3DF580A2EC9C0446070EA1352B9BA5EAC044D3F65B4466444E3BF6D1862F7938AA4653 5BBB3381D69B2E2F853071BCFF3A095D309F21C7C2320BF679A80BCEE885B56EF60C6BFE DDDDFBB218C311F5A193835C3724EF446E4A31CD208E1E294C3238C5915D173F9851CF4F EF79C59BD761C305C7330971EF2D654E2CCA6DE9C0153F1116005DE5ECB06A7E8720FCEB 5421C9D5273E2015F16C1B49A05BDAABD1A77F1392D35843FE0ABE4DDC3DBD97EBD9FE60 8DBA0B0A021A664AB86FC8F082C46383E2DEC48FEB8542A8D3340E27C372FBF3915BA928 4A26FE825A703C583BBB09D003EEF6783E1A4DFB4031188B28AE8CA4892D190B133088C6 E53C2776ED77E5B7FF5FAE1A74C75C141A1E62510ACB9E9EC9E6C708746D854C14D38623 F52AE2BC5E34BAB9AABCAC47DE5023488028CCC33B9AE8812BC34DD57E757C893244B5E4 D6449ACF36780900B773F3AD58566CE22FF2EFAE5AC95CC897912B4873D995C9B16E048A AA56732C57286EAA3AC7A684B7CD21C714C7EE260F27B66D97D4D8A533C5C6427E854434 D0A3919D41EA83E805B2DCD7EDCE8B9AF9E5684C982FBB147568FBD8CE8336E61671F5A0 4BEC8CE48FD690405B533137E98EB08D8C3ECBDBCE333F16D6248EDDF90301C4E8B658D0 18A8981CBC34C907B85A82DDEBCA6F252CB665AA88CC30F2917D98847CC32925F5FF64BC 601E2CE1F23A5B414EA2A9DDD04CD7906D10BE8CAD8691502FBF871F6BE0DAE23A35740B 4C8161F79D980D6CF17C0B39938130686E5817EA03A29664309F4289D9528E7FFA9EB2CA ACE46146DDEE92C2F74DF3014A3F97432D0B88DE4669711DFC7FA66118D18DAE50185D06 BEB678126F328D8066C01CEC7776408A2381F732A4652C27865B5AE170A668576C9B93FD 54B3BBFD56FF6553C8ECEC1919468B44A827DB66BD59D4EC4E976B8E2C80F21A628A8B5C E4EFAAB6200807FC736F0FF80A6C280D6580EB86EC0130BDAE1A4331344B594993E8817C 7EB4F70522EEF63ED8850CDFC1F660A1D1D0B3BF1F7EAF842687F56AFBF40BD5A93BDCBE C727EBF0011FF398D7DCBFB88948179F9E1F4865CA4CE6B619F5D71F0F7C2C26A8FE4B05 2A2A6F06CB402A7573990B3592726611E824BBCCF024A663203444DB836534CC7F3ED132 6EBF69CADD7B8B85E5490DB2CE7735A90CE022B6EED7264AA66BD178709E28883D94F306 A1DBAA4148C979CBB0B9291DDA524E60A86E6BA083A60721413C3FD9B82C9BA6452E5CEF AAC7112344A1A947DF68A3F64B14265DAC76AFF8A5944FA5839E75AF8F97EEEF2329B5C1 266CE28C36B3AE5FDE1315A3654B424C6BF0F27473B6B5298519772FF3B9193EA6CC19DC FB2AF31263A01E1B4901E7CB58A5C49223893342D4045713CB9A448C70AE4ACFE3266DFA 654FA356795708F5DFCCAFE43834E16614CA0F165B31B9088852B751F41C9CC16E6DF422 3E3CD65BAE2C42C8FE0C2EA7C85DB7DD2A61AA3C681CC5B6FE158FAEF2AF8DECB61ECA5A 9E0849140E1C17B9782C87036ECADDEC8992A902226EBFB244454606709AB8ACADF666F6 A681FC604E9A61C41F394F643F6D35AF77175676AB612C38DAC75FD698187BA9F621E994 BC4FC199D9A34E0959547773001834FB76B5533C18634EB272A1E4BC9390FC9B5B461726 54E40338A6EB85398EA91679D2D0DFF31EE9E74E93305275237F36C6C0BCE1F02B65FCC3 AE1DDBA5E92760D17AE99A0D8C210F0306AFAD2253A19A4494EA8ED69A6C35AFB657BFBF 7BDE0EC2052EC3C2F890884D380A5B8DE1064D5960F38B6341F9E52F772CC890483E6189 9F3487413AC3918DC3055B4C4AD12ACAEFF0093548F5DBE050466B55C04D6E9F2B5AB736 1DE070F2CE9CD22E8BAE8DBFAE7F79101E145FDF1FD6352950D8D1C0C759C0AB2DBF5451 E86DB5B9CA74335BD6332BFF6A5F7B8A18F97492A69E7A57DE5921980BA5CB1994B8C70A 43713E9889057F5B4ED1142C9845F35A3E43FCBA4C090A5E7EA7FCFE4B0452E5A167D5E3 F098089F995939DCD112AF9A655F5880650825B1AC94D6874D158526CEACFD59BCF9EF48 58AF3DEAA70C9AB2949218C13DED6416BC4FBD71762F2EDEB37F095171A1ACA584EE66AA 0833B2B1F742AA23DDA0D9C0D681063082DC13CF59C35CC78D8F751388662D87B333ADB5 56C731CF90F9B3E85A0BC940D1D3BA8675D7536DF1BB6AC37895D871C734FC14B34ACBBF E50CE952A84616BBD5040C4993D16F339F1AC67BCD896193CF94F0FEB25089C585AC918D 0E83703C011FC04279ED3BBC4CF091C891A18770E8C0A4CB00DEFE73118534E58EAF17D7 97A0B1FC7FB1065FC8CC89E83A0F8F4CE39CB46B52EE67D12A5FF17930E3D4CB692B1793 25563F85C2F5D54CC66DB60CBB0F0A9CBFC5D10878EED1A2A84227554623E8858B075240 E92E1A97CFF6263FB7A3D54AE83D896B81D415DA6AB16F328C01FCDD2F991F310CE19A2D DABCA593555A7DAD01E11F6A13F6ED7514FE1AF48B19E67607256FC4CA26756BD8818DA2 EA3661D065B315612D8A05D88A9022573CA5798F6A62333D20162B137811C6FCF7B69FE6 C6EF0AFC989C5734F27CF8608780C05C09223B012110F7F5B2F67C05460EE61133E8C73F BD73214E2370D306C8A3DBAED1B0DB5C9C1B815B746631587EF2D420F93175EEA8D75D39 892FABB61C99B957552970DF34F9BAE57C654EE97C42AF4139906CE3EF3913ADEEAF7D83 F6023506157ADC2B309F2EEF3D0D81F55287FD33C31A48E499A54B570A450DA5F1F89D14 8807E5DDC80C1F149573C6D2B2A0BF7A3972406AB3607F9655254870E4047EC74E01D4D3 670FFEB83F8E58D8EDA9AAF5B4E5D7AC2D3383F6645EC803295A02D992E6963C0BCB9B47 E374B26E5B008A79B06414B56518A9FA8964083CEDB642A2FB6501BC7CC703A803806BF9 0A2BDE17D0C54AB5C206992320BB7BE937DBA89EF7EB35A427F186AE067054FF92735FB9 2D5E5226FBDABF82FCDF283625ED3706E228ABB0768668CDD6D3E01480E7616CFBAA172F 4F3085AF70ABE0CBFD7A3897A79CB3CBF94A16A0E3A54C60B930F0F58D030D650E60C64C C947DD667F3F1B0C93654338CFEE6C7C61D351103E2C777C2F220B574F821AEF2EADBB0B B9750EFFB0A6E68EBA162BBB1C4E41E5A2F4CC4F3D1CF16126E5CB2DC748ECD22B8DDED5 7E50DF558282B5A645F4CBDBEB49FC438CF78557F444592A63EEF517BD2E3D33637E9416 4162F75A56025D10FAAF49E61794155BC363A8222ECB37BBE3BC5746E8407BC20AB9BDE4 F0E63B26BE66C0CB7F44E8A9C862FE9CCAE174F303FB7D15F8A6072EE733766916496D8A BF2ABD187E1A4BC651E5B2D7EF44B54298FCE6DD190A45287B7EBFA82735EE5FA37602C5 06C10DC0ABD848B27FE58EC0076E88E819DEE0C365DAFAE14D8411BBDE13FB934DFEC133 FF7814600433DE947CFDCE7F71E5C967052D1C93AEED6E7D6E9D28B9C65E8FE0E0E5101E 910884D2C02A696B9FAF6AECD66453B3E9C7221E2C5F5F427BE2393967BEFB00B1C90CFA E6B949CC6A234A5F288E0E058988FDA1A7757E897E0D26BE831E1B92B8F716234D948562 3B952E719F3251875C28C7148091B1C1DFF0CC434157C95F8FC30A090081E940170A462D E0A4302FF718C858F176395EEBB9B85CED674EF8A43A30867E37FB2812A3E52550FA0EC5 309B1258E5C8EC64E1FCC7E8F59DB536AEA93D6E71F04130D1BE033363281C1523B7E0CD 92AC452647EA53EA390CDD249E13A3FF9B19F38912AAE036CEFA2A893A1CF268F3C22325 0C088562231D61A012192D00DA5CA7A2EC1C0B3581E784A7E288A4435474A8DCC64D7840 3F4E43B2B3B2A0971B740CAA6C013C374053CE141BB29D8398E4CB5C0AD8E84EE349C8F8 BDC416C8EF7269DA553D68CCC44FFF85EADABFCAEC9CD4429D78D4899326D107A39C9446 5EB702CB91F77489BEF219FCA6A50C2F7DE8FE84E033EA49B110071D6F32FEB5117FC2EC C6BC4307FE9FDF2256BF20154CE710EF42A24D0D0309CF86715C286AE5A4F2067CAF4255 EE4EE85ED56F339529FC35C2DFC772FCB4ADCA6831858BE471561104C6F00A9C6914BD3B 37585923089F75F1320E6241A390E591690469C91CF1E88B5C4A24D048EC3111131FD518 301E28117496AD516C2611A82EDD3A8BF681AB35E887F0430F5D4834D3923289E95A0E8D C4BB2A2A7699CE5F09168DFF0DFCA8900D02C33ACD884C69760D6B4FDDDE180CC78C2E9D 17CFD140C13B9AC9EB6374865AF6F66A0E7BD954DCA01DF15C2BEDA3BD8FD45DD49EDF2F 57D55838D2A27364B5DADC5FF166CFC0A9DBEB21CB45529DCA9A584B831EFCFD46B6EFA2 5CB9E939E60E7C9E8B87094CB257B90F4F451F01BE6A908C1FF8AF999A48D6F3A0745023 0E68184688523652C5A032416B9E0AB166470AEA38CE32157825C004249C243946FB1A49 C312C886F5740CBF6150D3E5F20A9F1FAD28037B1DB12FB73725A6A7A17C66B79F9C7A3B 13F5F6BE39EA95F6848B2863579540B5D2E49382DEC0A968B1B43FD44D7C27488FD803B3 80CD20CD86A7EFC8D5C993CB35E033D1F27138689B67C9DC6D9BCF0283B219847E1DEA8A 23C30DE1C30EFAE509565F3B794EB1AF7FCB4B487D567A835E5A7883852A8116CFFEBA95 465C7F78DBB46333F101B5483B09DDC35F29FAC7FB2D29FF39D11A9D678B3149F224A50A 0143044B2D05F4A41AD6C463236E54DCDAE7038185FC8BA807562295B104DEB1FE59FA7B D6B757323F62AF74FFE39C256A36C664435E4B43F6312EE92F596787C1D06301E0F2114E E344A4FC4AB5EFBAE7B98165BF9F0B1F560840BE860B8769323F65D2441A13753F3B37C3 A946B45FD86CC447165EACCDAF451A372E330B4F75F3508CCCACE75940392F43DB6FEBEB D3EB68D425FF63BB61D2F85D67DDE19858649A7A000AD0868BE88393B93FF84444399E2A A729E6A190A8ACD469D53CDB764DF98278C5765A3E715C4DCF22F6560FDF359084E15FAB F751F52B1623CDA17095EED3051888D1265D9068123A58C4E4ABBBF803937E62F088E8B7 B7F27C1B0BDF36AB1AC9C57B388303DFB3EA363EB7200D73A958ED0FA8198FC8F6F87F93 E585E022A4CA469982238332F1D64800DDDAD572DB9239603B16EC2786A98C71080C2647 A34682A3B5381BD3806CCA76AD55F96D8004D0AEA0105F0AD4D58AF0D66B3E10ABE8F398 4E0911CEE916BA1E2BE81AE9B976B305DDC70948575E9D6F6B181C6C8261BA50C94B9A79 B4994639AEAEED0B9D000C274CB50C6E43A01E87E36803BF1A0D184D4588E89EDAEA2128 46BC2A9485B68D546A02E398A552C834D1A5EF644537497DC4436163285B1E34BA913DFB 992B518B19A1D83CBA79D4BB782EF430C5329F31A5D61FE72708A46BAAAB6704E8F6D216 5BD350F8CBBDE733E489E0ED2C0E994FEFE70FFBE899394BA4D55D16504B20768E2A5946 6AB61C777B92D6A195F4A7F6345A265223B198C3F6E2F08DC4BF6740D03C45720FDF7A3A 57E146AFD088BCB01B1FCDB5A873891F7B165A5C7425D366CBB1DB4BB0EDB3E5621383C0 44CD96CB7A35E592FC476A89501FFA577FC103561F255F1F64FCAE1D89098FE974630A46 388E127B6A5DF575D6D84082C1418C0EED99495B5FEEF03E1AEE7C2A5A7B2FF7FFED6D0A 8D56DF6EF0632886605E83A934AF50BC373EA575CD919992328BD436BE5AA091BFF2B724 AC9F1CFC7497B94DF3C9A79D09775AE039890AE79E64093BD2018B96F3F7F1A12C053E56 FFACD594F010F5FF6FFFF9292F88FF3CCD44D6C4B3B372E7637EEA08011FA3AA1C6331C1 4EE20FF348ED330894296BC2E813C1A422CFBE4AB9F5418CBC2E5E2A9637C0020F0C2849 D5E43283958823BC9746284460ED5AACB04F4036C5C63FE6A667F212B5BB2BF0703AF284 776D7FAF1EA1FE8D5DA71C3643D6AE53FFDDA3FCAEF2C45DC67813EB806AB7CBCC93B20A 22FD5A9E61B6233F8A893CD9D988862BA1A38D6B496A1CFA3E268BC5382B4B77F57EC824 B948A1DB9112123D54BC8977CDBFCE637F15799E765D418350A5134C0C1F8CE525E4931F 99F1012E058882C8FFD0A71233569699FBB499188093D980850F34566EBC90C0EB4431C2 A1A375A483D0F34B68F0286BDBA6D1F491CA59CB01750327A1DCF680750CE657FD68E0E6 6465791201CE2A73F571C39C908E0FC431B58E9640C17F833B93D34546309F37CCB68740 8F85B4A60056E6DFF4860C8A98CEAA90570910B2574DB8216BE1AD3905E8230F8F7D39E3 89175924E0A16D9490F509D9C9C8619D9F79A9225D2C7CDFA53136AFCCA6A3A80414CE9D F5C8A3BA8E35BEC9B2549F6707E7A0F246AFDBF36E849D9DDFC7BCEA0D341DE2EA0ADF41 8AC902FC7CF3C427EA318522F1023F04A1C63F029ED7002D8DE2ED1539AD40D934EB3C7D 2D991E2B7FF4B4169B747203923477EFD1DABEF5735F8AA61D9E5F43CB7F52F1D607745F 5915F9DEAF206DDF3C5498195A1A58DA87CED1BCEF05F2E37651A181CA30080029718261 FDE8830EB175BDEF5F01AEACD6087D259234BC95F50EFA4D830CFE6E4221682879CDF764 2A33E75E67952EB0667AB0125525A79897ECE991ED73C8F63D2C2C0E155EC5D32E1A3329 4E0052A614769A52581A7BE5B111BABCC8822EE414A81228F6CDA19298F8487FB36014EA 6D6EFE84318E50A3D6F16CA06F534CB749F66CC174DB061543F8CFF3194B2AE1DB9D826E 6A2BAE25227B675F72810F0698E58A990469C1E9188D040CE48C368858A31D8647900A8F 5AD0CCF570A901DFA388271B1A838521D79E42CA384176BD879AEF0256E6DDE638283AFC 5B9F38E004FC210E375C06172D9FACF225EF126B098F88E1F5469EAF10906E3B20859318 A07299309FD9505C611077248997C5403F60F26282998B65B34EA8F53B1092477DF94D48 32F9CF701CEB60622046EB76ACC5E39E3009685DA85E6B0DF50279F71C8A8C5E4944875B 6188F196F7E59F851ACCBC021720D97805ECDFF5C818609A9AC0520C88FDD106A583342B 30AF2F07B351EA52D226AAFDA5E27191D06734B8F079770B8286092E3B7AA016509E91CF 2EC56DE9CD429063A06AF4C897B65677BE8972A8C5416F6E5C40581D1FC0AA2C52A6AAA7 55664267C5E6B44A4F301B2BAE5AF537E6FE28063DC1566CF07A0DA3A6C0C5334596EF90 535FA667DBBD29F5B59AEDC53822C6F55226E8411E6FA132BCEB08B391A2AA8DECACF185 D7EB66427880E71021EA15AB763971CE50F57D075227578C3183F59A281324601D45344C D001A6AE1759C13538987005F5B60EA1F493731A61357BF13A12A0DF35C1BB432B103922 26BF43EFA18B45816BF82E9BF826C570DF1F4D7F37BC5E65D3E99670AA353B6235C7A3F7 8E26E8FC30B80CBA4C563C3499BA8FC23E3BB6CE8AFB1D1F8F5C4C34214DE543FA68C7C3 0DC2C59281EF7C2AD94E84CD371189416A8B3C2409C702A9BC8FD1070AF6A27B1EE5859E 3AE9708F6D1C774021C1F43D75CE631FBBE525ABA50F3AC4695A8EB61A082750D8446081 4716AB56A8F7CF9BDA29E395DC13BC80B18B944F7C66E4F07A36D3ADBE752E8820951B64 1CA1C943C43B39984B0DF8D0A80DE0155C9ECC1838FEBD3203E4ACC3E810290A0FFEED7E 220B920003209C5CF6D85F001DA434B4E3C0E15EA4FD62B8E4BD094015E87DA3DEC19B27 D202793662AA62B2E598C9FBC4BCDB84061FCD5C24A3D7D459797C91B650403CDF321A6D 3F63504291A9ACE7B75BDCCA912F7F4C701D419F0C58D413F5C1E60042445E5B5264CDD2 335BC11EAAFC9BE3A864FC039F29BB66DDE4EEEB9AFC087D3380F77335E581B9806B9983 B4CE684EB245EFBBD523178814A7BCCF1DEB1EC63D0EF4B5864ECB60D98F8EF3D61346BE 967103ADB849FA4AE4E96ABC43821908B121D571DDBB66C3CCC08430CE000EDDCC304B58 41E60AF6F348AD91C6EA3F7ACBF8A82C09E798993A2131DA428CD3C3844CE7223026EF17 FAA488B399478B620C775AB273B5683EA494E151B9B2628B37405D5880A62EBB061D02D8 B117845C18D4BC4C678220D4805953C104A8613A84EC988B83D676FFBC2D0B66235200A1 FC9FBCBEE8EC7504B4381A2B663A32B04506F0CAA703DA58DEF29C9F7745861768FA714C 2DE7E56961816494A7CABCEA2AB23E2213DB8AB43740E049D9B8E794A3FCAC525EDF0517 7E28F02FE1D5F5EF8C54CF5FC14FEEBE8105C3FE4A150F7A1388A353E8F0AE07B6481FC9 D1379B2068832919A2187CBDE66F10D2D9677CBED1D5012944CF3344A5480B6DA6480CFF 063A4BC4D0DAFB85B52F95F3E770CB541EC01C74756A6DD33659DFA8045543166005E139 1E18CC888C0A9823162DDEC2C55933630A82AC8E82E29ACD0287DC375D7A4B89CCFCC177 B40FD4485D7FBC053C9C47CB1C1051AB178C17A955ADA3AEFCF32DD3AD60D94E9E4D876E D89EF633DFB576012190735F99D25B8CD4619F6376E5BF52B97957DD94D1B854C3107857 9065D063629DE77A1B5E96F71823EC2491A5E76916EC4B54A241A0F79FCB2C87BCC2CA56 535DCAFA4A2DD4847052E807C0453490CE55DE7738F497492AA3D842CF9445286C30E1E2 632AA2C1309AEA97BB35C829A1887311A9F359E54AE604504D234209AF30C14BD2795DCD D97818FE5E1B54CA1197DE1507F183B6145D91F6DE7D90FF19B017BA26EED64EA485B5E7 8BD6CC154B92B6ECE5A53C21664371851A1ED615E9398F32E2BABE49AFE22D10B37F38CC 462C7FFC116444425EB124498FF67456E364D1C9995B9E8362A891F69CB8B2001070CBF1 B72BBBDE515267EAF5B542B3142E4708F2634BF9E699C11F12A452D04E7CCCA582972CDB 7DCEE65F92C80D98CCC4B079BA5BF8929EBE687279B7746C115C049AB31262F51C7FC8DF AA5658414EB76FE8BBAA6A9CCCB56E5BE18367F43264ED9A9CFCA22ED3B2B184E92B48F9 0E8FAFDF94E6431D3C8CF5C63E825F42F10DB9A135E4DA5ADA1CDAB281F47D0D1CB10F0D 112A891F4B219AE50619AE6A879BC120F06E4D207FB6BA93093389F40809CBA5DB25E0C4 DB4380773D8F59C0CE7AC39D64B773E984C5591AA66D909B57A4C2E3842BD1FD64DAA141 43322ED0601F548143FC98023AA68E31B86688FA70FF5E222D9CA2051286BD5532C2F24A 6CB92C97F122D3EC8B8BA4AB6675A35C4C32EF0D5170D2414E73082623201278B1A3DE2F D5A3DFB262E44A8C47872E63A6EE00DE281225BE0EB3CB8CB01877BD47CF4ADCCBFC8D33 EB5530E68FEC6BEDD7DABE509D9094B42C69FAA454AC3D252D991795D7C3204D8187644A 9C88E5BE1B6F082152F4EE9A65592BBC6C90786E73EC2476C2269B0406651E67B9A8D836 E2C19D1D496D0F5D0C8B2A77D195F3947BD9FF89EE6376F0CD936099AF7B4ACE55398AF3 002E3B0C53A8377553CFC93ABAE9BC36078C9ABED5AE54419B4A7F2671F428F69B280DD3 15398C9716FF4024599ED0F4117DA8E02D4CC4630B2D5E478D9DBA331B6732712EBB6CE2 1DE341B3B9CFBBA07C96C8353C0D94B1DF7AECCCE5D88C411CCFB2C6EE14594ECEE3D513 4F7890DB9325666A84D3869FB001C781BB82A6A01127E5D26C03948596996ED4FE7CCFC1 1E6B1E49717E42CDC0C1F7FBBE4E93016D8A852449EB0C1126114036EF974B67FC121C45 D9F2278E8BBED25CB6DE6054E8A933B5D118A18290E130926835FCD8F9B7D92FAA4A0083 4A1397A7B6DAB723A85E4582F1D0F4C50602969E0C71D41E12CF083678B3C9597F84A2D7 0FBF31CC21656A9628D168EEB6FBA9D0F58ACB2A211677DDCCBCB84502AFDFD57FA21B9E 4419F16CCCA2069C323DC5C4BABA35FFDC91F53FCC20225610DA5BEDEC77847BC84AAF94 B22E57B2A749C45653FAE5046D03122DB69F3A53A735FA655B37B041B488B7001E6A9CAB 2993043C7DD1E7B3968111279F42B0CB1846F284DAE72C5DE58C36E4B79DF07F0184F30B 4499CD01D95FADD7FE3EB216E3CCD407555F180E9E3309BE10EDA31FB1EFD1172DF77BC6 B9ACF221F1814AC56AF3D26931C15C1B72A4D2D9A50F3B14F5A3877A47450993991A6940 F2AFBA245588BDAD41D869660CC4E987E3276D27D04FCCEA5E73FC8903A62B2FEB1A0C95 42F817D7A31B619E6A696D287E4AC00BEE5615179EFECADFBE72D87FD4958DFB4D8A8FB6 3C9323BBD07370B3442D7B89740E12962ABDF0A62F6E66863ACA0B9C74FC2C9EC7F83124 FC84C2A727C374ECC8AD400309A2E3DD2DBD3BCBF70EFEAAA6FDEB05B6CE90D0AE062BF3 88AD18FD36F4628DF1DD0FD29E5D8F615416D5DFD5DD3DD3A271F1517B7C62CD4AB80822 F831DD4DBDCB136A995CA550A6641A699A9C887DB2D738680F38C47D4CF7C5C03A9E7EB2 84FFF4F2ED336B88C89A5D7716344F96ACBE883149C18B930D5A97D48B58A2EFEB721603 0C601FCC03F68C6C6D5D7BA43CA2F1E7F3416604CB33EFD83A65963A5DCEE7A997906219 70EB0E332AAFA937EDC1A4814AAA829AEDFAFA2560CDD4291E40ED6BE79C893A311B721F E2C9DAEEEC9477DAE916495C5A0570ABF62DB8F8AC63B3CE2CB22BD8400ADB65F32B76C5 03E4B43EDAFB1DF40A6220227280F83121E5FE6BA0F8B291FC5C088B0A1F99143A44E38D E36A187F247BB720DEAE8B3ED77F56062953192699A7F3C3311627600DE660FA9DB96CB8 F32EC8D2879D09C4AF4B26E01BE529BF4C6CFD5831CF2CC67DB7EE26693FB564A86041AA 0C9B717285015612C216A1008F560514467B452C9523FFDE29D0FDD5C910B48D201E7C7F 829A50DE9DF891B5CEA8BA1FE52E7970B9AA8AD81621D309F5ED1C5AD3916D7052E883FC F815B41096951DC6576453B3F6208710C6FBE69E1CA7AC851162493DD693392B93C2F78E DC3E1A94FFA7E27387B83A3C0275E8DE357BCA5B63763BDD9B90AC8B8C9A24AE1EAB68EE 94C49A30C01B2ADE06881AE1039C985C7B46A85A7E3103D2A2CAE8F352CD770418A04B80 858F17F56E4A540B745BF8496719A9781A39A560A247CAE2C8A238F3270110E56ADACEBA 831BCBAF60998A1E96BB56CEC9857391266DC5475EDD8907F1BBF17C1EC49202EEFAABF5 63ECD910D66D03757C018E3AE245084555F152E556889F7FE86556E5A601595455598CA1 5F546CB15FA73EFAD5CEEBE976CB6B5026C4C951F5348C61AB9EF74EA8D5A2ACC83BAF5B 57DD6AEAFF2B3672010FFE1659311A337FF80523156E7082D25EB42721F2925E4AD4335A 0C2F786DC5A02AC50886CE26D1C4F282BEF6DBB59F7BBAC65C58AE7416E776A82E93F5C0 4A35AE9E6E7DCB636C81EEAC5E797F509EF773D024BBC1C1346038F77B7BB1F48C8744ED C5CBB5946D81B8B20DFA6779C34BCC64DD2F354C854645E247D585499781437AB71CF4A4 D1ECF37F0FABAC5764CBE929077887CCAE3A3E14DC07B8156063160F3F2A7140F1786DD7 B8F06C199282E763B8B2D3995754954C3B86D85D6C35656C6BE031E21209FA0A9B285205 A10398EAC191A6B6EF881FA2B36CE3D2B2302055DDF946A862B254E571967FBD2F19B00F E9E430DC1086383EA3404993E87753BFBBDF7B9BF9BAC101D1090C7851AC29DB6492C6D9 247CFE4902C93C27BCE426492D50AB20A262151F10D79A7FE52361FA8650F502AC34A8E1 11A07F09A4F0D7D89C7925C99BB0568DBF7E9EFD64AABFC2FF0B99E5E42967CEBAD8327E EF2A3E63009A11B4432FEB1F229F07D0E7B885A10E835BF6B644CB2350E9FBDADEF431C5 702F429002049CAD8C5F97CBC1A093354515F3B2290F38D3C6A0E6FE5B5A26CEEA60B144 32A11861B479ED945F37558784C4F2855E9B77159C27AAFBB3893283696BF1B33392866B 9E49375F071AFD0837FACA6A4DB47B80FEA9F0CD8D6B456BC492BB95D52CE11E852F014B 042EC54C0C63CB9154D2C5B0CC40B74BFDE78A3A2DDB9F73D70635C8BC6811679FD2ABD5 F7C38B99D732854E373A2178F7B64DE65946F085C7D9589F2AEE3C4C4ABDE49B5F6D75CB 7B2740B64F27F441D08C64042380EF92465862AD773063118DC775D2E43F871A27E7322F CD7E45C1C8D9222C5FEB8B07E99E1441971E64ACF4D0D14AA777D89AAD57C6520269BEFC 5535FE36EA7B82C31001A0A76F94CA31D41FFC53B4E9218EB800BEB10E6E9669734F2791 FD465F1240ABF8A865A0A4255EDDBD843429AFAFAE42169C85E432AE4DB85EB35934EE10 AFFE9245EEC15097796F91BF1BAD6FA24BA613503853B488885B69328E67ED3147FD945C 86AE5DA81735DA4B9521055963B4EA246603533807BC00F8ED48F1061B28D82F7DFB23C2 08D1DBAEF94584DD9DD02E02551DB9AC9B00EA2693E8AE35B017B021E9D9344EB63AC30B 22399BA2B3323D60E526CB278DBEEF7252CE6BB52B4BAB235A6C875910668C172A75D9EB B2B448A36C603FE6DF0B36466B467A4FCB23ADE2C9984391C42B43E4B23B7EB0557294E6 94F4F613A0E2CD79FB75013343682AB786B57DEB103EFC58F4D9DC2D8F0D279723E7B1B9 AF2996901567346DC8CD11C3A33E54281ED62ABD8CBBF3D95FDA5071749AA1B2F1ADEB9C 420804E627AC13EF1F17B7658CFD3A8F734789BFB43415E0072680E51F74735A81FC40B1 F8F73C288A52DAE685510EFEAFB9B3E904D686DD042C561CB91AD90BF96D045D9BC0D7D9 00F173E7FFDD36C57A557D537789B4DE024ABEB6362B43B045DD55A54BF1D9A5ECA62C82 189086E34009F88AF947772563D9F551EDFC107AEE157EEAF67D671F8B705D65651A80E7 90BA9D37DCC68DDA9427F80C844B0FC8BB89B381AB477484464A7537677C413EAC76934E 2387243C43D0E6077BE02BFCC403F0F1F4AE0EC4814831B18339E5F19CAF349C01DF10C4 08858F1E9E2479CFE6ABED2BCE0B26A024D3FBC5AF04502DC3776B3EF1907761D97CF172 33B539EB891F900A00C1A4DB137A28434F523D9F2E649C4E0B54D7B837F13311F94C13CC 2E78636019845920F589B3EFB5AE28C27836D30348B0EAC881284258097CA28A3E384762 D63B23C39EC0D141E1ED8C111D66769A35EF6238A90155817F8E72279EBC63C620A4F3AC AA3B70EF2FE319E54EA04BE41FE3A0168F8CA3D5E0F9F74AEE3FFEFF985437C6684C5F0D 87665DC9B0291A34928E2D4236859930D454C413CAB51ECE43425B6BC7E3CCA2F8BAE58F ABB518F18F2E9FB804AF6BBE6443F36740D46D9DF586A182F94C03A65B2E07298FBAE4F3 9B4E3F631CDAE6C5EC0584FB1A94BF6CC9DDCD94AD1569FCB3E44420F2FE3EBB99F41CF8 10C2CC7922B12112035F8C7EFB5EBA74E994CD0A05A947F9E5CFF2CBC06EE7CF218EFD13 041481802EFB8F9FDA29FA0F111029F857942E6131E76E074CE1DC267599AFF1E360F3A9 FAEE6CDBF6F3251A92DE557D7831B9E8E15A05390A155B7549A33EA0FC3F10185BF92C71 CDA7C0F653BD424EDA55620B51E78A9A4404F8F05E5DD847F1E5CBAD5D80FCC75A8916E0 64332206AAC4BFE863F3FA72AB85108092364227C4A7438F477A30F9A4964AFDAD1A751B FDC7776804728628B5F5682573FF2E6A15D5F19711A2C3EADC27A2B7970A900E9430451E ABF0F3937EBF5B6C1DF964A1590E7D8943B4BAE197AE6616E01EFDE6053C0AF732A2AC06 6A649C022FAEE6012F99F8A26958695E1CE8C4547F2A607E49B4480EA196E6D052943390 27F8C394CEAF0443F69366E1309E2473F33C2704D6981991BB2106A9D16AB831FA140AD6 234F7FB4261F62895D6B07D6DF4B41ADECD8C4B3FAC222272A6677BB493E70D11F775CFB C03C6CB195DA6DB6378C22306864685816A5E88A8759CD1850684E69A6C23DEBD7F2EFAD C2676F6337ED9CB65C35F5B03228B7794AC9EA6727FDF7A866F8F3867CE93FB91ADEDFFB 67ADBECB6A5011DB62A474DEA71C56538264F198E15AED9554CA1E370213D851148A5F2E 4DF29368EC463E83C20280CC0DBFBC199C8C30A14A391DDF7BC3BE98458BD3D9E9602FD3 3B5095E54CE3F728468F5E29C29649E64F1697DF03C679166298F2E3BE88C21C92B03AE5 B69AF3B742CCF4E95A649C680AB3AF72F740740CFED1C32CA08C05FE1CAD150061AEDD8E 46487A36112378BD79BAC28E3BAAFBA257F2EAC55F6E042388DAFC90162541B0C43650D2 28CE719021808859C770556D842154E03A99A4A49397303CBA2FC9EDE498B222037DCD18 D777B4DB378A7E77CB5780870CA9E250433620FEDF2EDD54EC80E43AE7717B83FD397E31 125189943A6EC810BDAD7E2BB87848FEC555F290AF9E441EBD7A7B90ABEF8D88937AE66A 408B6FB8EBA31A0FB706C003A84628B63FE13A9797129F49A0E3E2485269CCE0DFFF3D7B 5B9A032612938323489C3B230CDA1091A82143028B104F33C1371FCAC1E46F6ACB797499 B70FD3236F720E8FF0E05DBE21C23F9B70B4D93665E3522D25A22D47E49169A30D60777B 5D7B8C0666A51A4958E0DFA64FD17682450F232E15DFC548BAAC66515B2C6E85DB5BE801 8128CF449EA58451E30C214A65F9E9FF284BB0CEB18FAD98EE84077CD2978D2F530173AF FB43A251EC000BFDD46BC31629CC8A82AEE1049797F70A96B9CEC06BC474B0E4241B2CD8 AABF5D3073A422E439516CB52D550ACF21F191B925A320C177028B45257BA3ABDC9C7C84 87EAFA0A65DD09DA91F48E9A2BE0537DC4E68412C450E1B1659CB91F5FD887762864C377 0875406F8D211752AC7CB76F2569E221398426C5D1FB56DBEF584BA3A5092754AFC42EFA EE448D793189551D3FEEB346A81D0738E49881B350B153ED072E33955B5726AB235863BA 54C0A2F614FDC7441044FB9EEFD3BF229F32D0B111261EBE8CA96A59C7170D9AA4E3F5B4 9F4C3EA5C0E9391BF033A3530B9664DCF068029E3F205FDD8DCF229D7C4B7631A4C4CF23 51E0E7C3BCCD3168AF8ADEFB47EE4EDB8623A932DA231190C72628E9F5EFDF46D8EFD411 52E6B648E90E0D0530677C155638155B2E850ED5EE481B2BA851E8F87057C8651C769B78 1C02EDD4CEAB8935C78B50DDF9AB84D863C8B6682ADCD8DAA2EE753CFEBF6DDEB7D542CB 4944AD750225184FE2D79F40B3F9BECB60148A5B2035462BFF68C4781A16A8B21CDD505C 01AE8B718026D313A9908B01CBAA647B1A60A568B31D59E8CFABCEA7B752A6FB71BB8C47 D646D202791DFC84729490C9CD4A0DBCFE35254EA15FF03B82FA9ADE944D7D5C3D6B5A4E AC9CDF8144AF3D31D6146C8D15EC1622ED4FB3F3C051F75CE8F2D9744800952FFA105F30 3332C30A2764F273F733D2E5BC9B47F08A0BAACCF38FA552E676EC1FCB890EF1F3C093C3 3F855AD13F0F7889F0BC6B5BAC02E832208576B192D4A2C7DCFD3579667B995FE8627A35 2B1445EB8E13BE586E6E6D07E0E9A162197F567B78F13741A4BA9D2BFB051E734AE9936A 68CE0C3C8E9CCD18080CC06FB62DEF2E8BADD6EE47A4D9FA7F193D76B097DEAF9275FA81 6F1947809718E181A1EDAC5162D30AF0029C052A3F419D569317E5119F233C9382764D30 4CEA310B084AF99E70E537FB391703D30EE0ADB0D0187332CC5C05A793C68C1C49C55CB0 0A642AAB81E870FC0BE97F271048384460CF5B34B9E1731AF7A826EBC926430BE539F8CA 1DBB3E82DDB8230D3D67E908DB70FC67C43FC398FBD4F6FE4665A83B0559BAEB42C9CCFF 751F8C47685A8D3B2E589500B1295E847A4FC8D611344BB5EDE18A85DA0CEC1F99146B9E 1822F6610D8B4970EFFA8DE5E9FAB4649F741766A37F5E4AEFE9749B762D3C9D746612B4 E16F67F18987E6DE225CFFCF658ADA6D6172283BCA09ECDF8B512469A56C8F430D35D67E 36C4944FC47BC30B50AFF34B1578D57D33B32B7F9942A2F5083254169AB5587658061090 7EB7E1FCEC2252E13E97CC82F1F4F64A0BD82003EF53257EBDF1CCB8BA5D1AC9998EFA16 10759FDA257F413920ACF6F32607260FF9AE2658BD2EB3FA61A129F41D67F11019717C67 348FE7029982CBF84B5E8B78B17803D0EF09AC2FE3E782D32C05816B60F03D22F542C4D6 081D8704F4C990BB56AB0591FEDF268C7C17F9A65E1AE914332BCB811D7827F14235D2E0 280B182B86B324FA84BCCCDCCEDE47E47E921B0519E50355152B9CB8028862FD9714F094 573D5648C2958BB4E92A8037D807A3171E12EA8C709E6CDA6D207BD28EF5E833FE987707 16EB8AA7D86FD50567A997024C489CD5F89C695F5D589F3522263253A76454C1397F86C4 D9E86D1F5D3792FE36B95540E870C87C2073A0831E20DF2621234105C73D1B4BC2C22D14 1BF9C0CDAE8303510B7F5278395E0A8363F16973FF3B5A61762104307BEF21225B2A2263 1A78D1474B4BC926422A0C86BA7058FFB06B6AF7D15B6DD61E80CC5BE6E13D3DA638C349 B3692C89276C05EE8DE2EA1E3AB5381B1AB62FB26083216781BB59B11151688AB33D6489 D4E0C1CF26EE43F9546FCF34297A4C9C5D5CF39C1997FA7F8106CAED58A20F9387E4EB01 9AEC0FF2DA89029BAADDBB1F6B31856DC48D959F7D2440476355595F1C69244CB4D3A15E A1EC3FA59F28722D518931B5E8F986EDD2C0B394B0759B67F7E6C0A267BEFA94DB6C3718 91A4F9A510FA80B6ED38EF667272BFA45BB580DB80C9992A4DEEA08221CD577B1FAD36BF EFAEEAF938B6C1F6E43E99C3B6BB7756EB51414568150C59F5C2062ACAEE3E27F9EA9EBC 2B0C0CCA140E3D566F03A70376CE1DE326ED4293407FCBD5A9B4D6E7EE38623CBD64B13C 39FFE3AB1FA87D5030E8D6A8974AFD73A89863B0A21DE682450DFC0FDD73C5027DA64046 FF9DC4BEEFB26B078577BAF92F21D8DF5A287C15119E5499DE4279F6758909B777E25C3A 91CC1428AA5D08DE654CD9A016E965A3AC90AEB7D97EA37F77CEEEDE78E2EA45C54258DD EE4A6F6F65498F088943DA8991C6001F46F05C658F6197B2B882EC92143AC1683ADCA73E 7E55A7A58F1950389302D2DA0724E4B089AFEC76F0EA21D5BC8F219088CF1882B87E9A80 ABBCAC460DF2C9D649C555695970D7D3E7A352CB89C4B5A20E05EA14156E47E5673A07B8 8255658B038B3E28F86D2A6AA7210FCC6EA984582B501CD0BB1C1FF133A76B1FCEAAA4BB D0CB68023541F1A6B0E2711065366D8D8DC2DC0EAFFFEB6FE38A1243CE4CD6288C6C3B16 B830FD9F1D17FED3305525BF514B1A706F373EF46E9F51ED341FD1FE0109F8CBFC90062A 83133069964F3864BE4C150D480CA59850BD4AB888A877D868103DC92A4E7BAED0A142BC 7AA9E20E97D8A8B3F6324ED491BC801B0C561C06FD5FBE495DCE5DEA2411951FE7223AD3 9BD72680EBEE9B1CBBD47BA74EDCC3E99FCE85FEF0CFDC045B7F3A6132230D2961E46CC1 E52C1CBE323EC09A62B76CD16DEC9BD0CD8DEB53FF8E80E7D63AD9A4AA3AF9C30209FCDA 1FB5204B215B7180BF0499DDDB233794AF5B9AEF01BB8887FB3A26B3DDD431D5FF186CD9 3BD0C0A3891CA50968F117EA0AD82AC167154A607E17A0D18EF45FA4EABE996F35E4B4D0 1C96ACE4BF81D343F7F4CAFBDB3401FF529E8D6159CDEF24120C25FD548355CE367246B9 B034C2A90792AB0B9F7A07B23B43AB4823D98DDD5211B1905D286011B23E02354B130F59 890AB124AE064A482D9D3EF4A23FBB811995E2B8C5E0A129D8FF845B558BB1790236025E 1B74BCC81A6694A558A0CB4AD588E443069E8185F1378EF9A819CC0329134AB22908D8DC 10E5DE0419C29FAFF3ABC6DCFF23525EA2EDFDB10D910FE12D1378C34AA41005A1636B2F F86E909567009076FF17B9341D32B1930935EEDAD7F14AF5E9D77840280CF83BC0A7F507 914F86FDE2CE445517131206678C491B8FDA1F58F8A7F0842BA5F3823B507B4DCE10BD4C 0E730522CE300D3A043D81CA63028D7C8D8F6A2A22AA42E1E35DEE5FB71DF21279BC9295 12DA070341009DE8239FA14934CAEDADEF08FED11A7C5E856FEF173E1580180C3C8DD09D 8A433A844D6619A2BD381E95EBE16A0D3F02B5CA8EB37A6EB4C0F686F0C08525E42A7428 D75A99281252A6109F927319F86164EDF0E60589E48CEA9AFC3C85DA77172329F8AF3DF2 6B38A253B4AA7EDF54BF371904AF77C8DFB78281AA5242E8B43E10991BE6A97493E9AF45 077DF57CEEC550FF61FF1763860DC7AFABC0C8E198CEB9AE440888D34361C5A6E5F5B778 3FDBDFCD8A7C1FEADF27CF6AA49DA63239CDB80C141E3DAD2DB2C8FE530A15415B26C9B0 3BFF60EF204705D0C974B2134EC7FA0AE0CF94A8D589AEB7BF488CD4609908176B78B3F3 76EC535441AA4AA0C602B180A9BA0497763271916B9F7A1E3CB2501205E596989BFCF17A 49D2BAD09D8403043D7E6449B59DBC6B7562F5CBD43E90F92CA23337A4CC6FF717799A09 719CC6F6F18D1E35D5E2B8FB0D1B60B1E57F862EA04B472BFF5ABE68C555D0F3C5084F4D EE5963B4419167A70D649B803448FDE292B4065476406067D73EF5E407EEB6EBB583FE87 620AF826676A796FBB81F8F59670F46E399F999AF9951806E5CD282D63C157AAF990686B 42D120AD3BFACB70FA1261AD39C7EAE0DAE280DA60D56F90AAE5FBB8C25D7F44AB58F1E5 EFBBD46DE5DF26DD1B68A0B61011CE40B7FC1C543F3009191C14BE9C71ADCB988B378167 811E4C4DB293872CFCE54DDCD9BDE37CF1AEB432DFF87BBCC6311B815203917A74EC61AB 95541EFAC852B8B3CE811D3E93C88314DFF0B784ACB8F56B65F805BC3AD98CEACB5C0EE1 90831FADE81546288FE555B8659484DBB1E582EA036BA7C7F6E7741099426B3D0CE13F7A 006203A2FDAB4BA438256FE22CC191434860FAC5B82FBF5D9252166EB4F0FB025F259627 96C67ADDE394CE1CF3F892F99CB068A4CC1CC60728A55A9BAF12E73EB09136DEEA1EDA11 CFB23435CA48927D7FA727C0C18876C819D867ECE21BFE15FEDE610B9053BA52B358E6C1 891C8FA721816FEBF47D668851192A2C3B350A30CD7AD3AA2650A23B04FEF7B5ED66B688 A2D742F68DD1DBF2EEF85241741EA22031F9810A693C53E356B723647F3AABD9694EA739 167701338EF0D9644E3A3A39BE33AEA0F67E88865F54BDC46B5FC07100E6831FBE4BD03D BD8A09AF555FA12A62BEC8B762607ECF5BF1E2E6B75E79047ECE969762FD6F2292FA3EBB 8B6C109485B2429CFC8611A89123035B874CE1BCD63140C85284C642583299DE8B9B9C84 DB76D6C57C734D3B3DD26983D118ADCF32217BE9F4A12A638EDEAFD46367C03287EDA32A EAB360F7F75840568F57FA7A7F6478980BDC33069114A056B151620B6A3F60175A8F3461 4EA3AFC1216EAACBC742CFAA268021F695A82B60C314D968DE1FEB6C6FE6A04258D6A501 9C73CD8B9966E974DDAEE6C21BE1475EA6B582C1CBE718F02DF1D183C04660676DD90FBD B715CDE1202D92C47D27ABB807B4F6111999F34B83EC2197BB229F679935B95D60F5719C 15C90E730CF42D42BF7CA3F5DAE722FCE20AA3A991FCBD153AA3D81C3BDA765A1C95B111 581287CAE22153DE730F913F028A3610B11602657E58B90B536ED21940DE856FB242CD95 8F25E746FD18CF736663A5BE869C5632A243FA0810DDA256CC6C48A1067EBC3285634CC7 AF39BA5569D79381E4B569E1AA1D708D85FA3C434E43649831A838091796E68735221ACF 5EB9B68E6A9B132771C9BB9EC0BCA1EABCF168DD4A71BBBFF141CAD09330108CDBE1193B C4153D2D5A2D8DB7DA84AFC51010234779A7CBA484331D468C7CAD685FB67B00FC46422D 6661B12028520AF4CD02A8B0B5897E46A07D2342AACF11A45C28DFAAD9551CF7EAD2DE83 364034BA8A49EEAA26FE130B0106A1108D681A65E51ED3704262B19886587A9825BC3BD1 59D01B0E46AFD7B441B85A0DE0E05BEFDC3A67B316B1817145D47489B260C64115BE6B54 920D0525A34B57CBF32AFD8D2A60671142CF2C9CA433F0AD19A1F8722E0FB3450AC46967 77468B71D89C7A3339C20E3E767DF5D6F81965A575B69A6C567713F3C27861800DF345B3 76C4CAED8A0050CD14C647066849FD6598C6615F0F73EF56D76BA543B424B75D67772921 76C80421BEEF2F25D48E171F04EE66D22F6A237E2BA1535853C0C284E625BA88B2C98ED3 C9B718DF8BC1DEDA068CE6C6850B54B0A4ED1EC19C2830982113A9F14386D2B6BD974AE1 C8C26061E8CF0E198E53EF299C60F4A4F4F6CB9E8958C1FCAAEEB057D5B65D662FE70AF4 368777B76C30AD3A4899030303EF4B07B797ECF79B1EDD7648F1C2C047502751E3708271 4852EF52530CC11D1146C8C43A6D73CFE4589A2F73589CD027264E48A9C3483EE1569974 A3AC4ED583ABB0666BF36482BECA3EDCE437F2144EC53F5830A49CFD2542B1718D02D713 A9C1B94B1C1190FD4E9BD9B9F22679F4C4C4353DB1C4D0A22BDEDA9A3810D260D829EE4D 68D81E5DC3EC994EFD23A43981D20038B3CCA2CC2E83EDDD19DC4CDF92C5A839C9707A9F 813184144E0483D2E9FD4F8AEEFBFF3FA43F97A7DB27AE655E367B0B292D82874B5EDC64 F4E4A46D4DEE32F26B14B32D142C2DD4DAE2F2937F59EDE599BFE33330D890442C211D10 F40CD2D0E013255E4A3A256A8C39D7D716AD2C706B86087A60125733C646BD46A2E5CB41 1985BBAF777A456E6726225C00B7E72378298F4E9BCB17C963A1261191796CFBDA8D980A 8626BC0227D8767B2E0EBEDF591477CEC21F8017BFEC55732CA466D1CF2152788ECC4A63 BF7282C0DFECF3CCE9897208FA1222D65282BAB44F2C7D0F44AC9F911E3AA0A8B756D063 14091D62B07410AAA6B209D229533ECF1EBE4E4DA8400FB7F050260D970F6E42840F6486 DFAA7EE95774EC9A840D9EA552ACC6A5F3074BAB170E4CB403916F9E40C10C30711B8701 055E0A5FBFA76C27158AC5E1F848DDB38FAF368F4214A5081567FE05CAC9CA1E06FA68FE 4269A97357AFE7D9A6E71062A686C5A624C8394C8F92F078ECA05DCCA2D4BCA58C4E98E0 02E2AEEC1F235525F088A4AFBB4E66332687909A4719C9EA341A1BAF748D288BF7937DA9 98AFCB9D54E186CADA84198457D2C9C0E6E5D7080321C5C80607F7C1198AC4776520B7BD 89AF216468CC592D4869029ECC443AE2C3F66C20C04BB0290E39FDA598FAA30E78C4CF97 17DB3F8CAF0956A29429DC2B5F8549339D082266C44E0E709607A8E15E70E0F6132E409F F7C18C93501D1D6583B32073E03960FD427597728F04FDE042FE8B836C03022D128D3972 320AEAB2EB7E862E196834F21D8C227FDB3F7C5FCBD4A2BDF6B8ADC3643919F057B2BBA7 2A0853DA6B4F57149964F06060FE3531FF8258B3014D6228A1EDBD7ACF99D935E2A15125 6A0561076D590486618540B07225E218150417A86A2646ABC4F1D2881EA0CE30C11CE0B5 F751298AAC4731A043FD507F842E3744007341860A1BAEA8210F12F89E39A1A57695FAB1 A6D79D4B06F41DC7F9BBEDA5CD94F92E3A8152F1A44C4A7874251E0D5A0EEDE1E5EFB1B9 6975C31665513EDE0566E8E94476622163BB15ADFB259D9AC000F4D9D1B05FA0162E0915 3F50130E9262DBD4BF50BCE3B003C46E24A1A67CEB500E50CE476DDB19B60B82802C4391 1924F65E66C1A0C701B73642BCBEEE2BC864180839BF32F07349541CE862073AC4AB9876 30D96A0BF43A01C036C3FD6BFE48721B951ED88C5FB37AF441DE5751798A309AD1E0E194 4087B5185C85D953825F6A9DCC8B58DE79DF79BDA7CB79908EE2EB68699AD6096DCC984A 5745CC665E2A5A7478273578CE0811005F13521C015B995E796BA66BD6C4812655C0E78C D1202106058898CB3783D732DE23FF955760FB0BB03B5A7137337B343AA4C7BFE4D0A9AB C14990DD20E286C0BB6745737A4D6CD2E84D4C7E8CD73346D82957FBB79C294FA6C38A54 372B6C89118D37C618DFB26EAB34CE8836F7F10639E1FB0A2B638EE2F58085EF5422B6DE 956C929A87F348071D2EB7DBB98C07A8EE13E15C93930FF9733A26FBD5246A5FB94C54CD D169E2510E4D0446086C7360773FB405D5A06D715C55028FEE520C3078FEF1419E10FB78 A2896A6FC872992F7C70BB576E38BD0E08B34B62D4E3F8C9AA725725FA2037EDDFE4719F 0E7507A0CC72D2B6C19111DFEA6306939891D2CB8B86FC826E297C816B5E6B4F9832E8C0 11A45506EAF4A2A84FAE0378D007415E72B1AE9912AEB9FEAC6099BE8C127304796F5A77 9DDFB605343FA825473395E3D118AD3986FE40BADBC30C080C488F73D22FFBF44D15B7D5 3D0385A7E9FE0C71E41629191A2839DD5F14E64D4F79D3DA54A13FF6EA8954A42F04963B 5519C488F07F5121FD9A18FEAA4C816414096C05001B9A85763FD253A16FC41095F8C63E 577311F9209C9F3DDD6747DA79C5237C6E523044B29D7C458D2CCC9564A329C26ED5FF9E 327BD3714FBCB3FCD8C4C6CBC7D40AADAC3684FF5491EB69375F467EC06546DFCE591692 43DEFBA640F702FC2D4AB0EBFB92E84095F948F375AC177DC52FECACF11CB382687701E8 2F9CCEF981C68B04F7F9183FAAA8D7C4BBF980B5258F0480F3CD2E82FFA1BCF7C05A8BE3 3FAB5E3DAFC21BF6A2C8358BD8A440EEB2106620CE961131BFC6D82B995F70132C9CFCED 32FE99CAEE3929B73D6521513BD24C9D0843AC3D23F4BB25A2D03A1D62B928967FC2209D 071B0F4E21ACF67A2BFA36E89DFFA3D65AA74FB0404BDBF1B5FA68F63F92DF87752EBB85 8ED6C60347E240B0E0BFA08382E5599ECF0DAA60A14C3E1CDF4BA1EFA16D5C78530CFCAD CD7359EEC5AD3ABE3182C28D8248C8074330788460DC67CBBDEFB714E84A48CF775F1436 2F513409A59815B3500D32E9F791AFFD0B6C20052807685EE59789851D722405EF51BED1 4981E82DBA1E051322B5018E5C4AA1542D52EF053E654E88E869B427B893047E60AE00DE 1EEB9E46E591620678F588ED0D869B85C24AF8D46AAC9C56819D572D0C57222BBA1F8A5A F298007BE3E6DFB5AA6D6B4DA45ADBBBD324D10108DC607F19341FF096D4BAB9D931B6BC 032A7EC57BA75350122E85FA750DE0800C2A649873CF0457548314B112BE7503EE3268FE FC2761C348B4458762062BB1B3F9ACB62AF4C81E0761BE4FC48636304656739E49126176 04F6810C6D5A7A557FA581B1A35BF495A20B8E9864FEDDF65ACD8DB340D80691E5AF5C2A 3725E680D297D8D3436D69EA703F7B55F5850EE291B874258081D94589753A3ECAF6BE71 FC65890F1D99F6ACB81EFEEB4A5C2E33F52A43AF43B686E039B8BEDB45DE54DD8A8E09D0 FBE27DC275FBEC053A434E638373900A58E4CAA7904ECAF06FA68B7D74E345C8EF9388DE 376B2027700C60058086322C36DCBDDC63D46E30623980359E0094938F80A56BB5D5D40E 1C86979424E34EA5CC8E4B6F7F395D219560009B2E1AA47C6956A21A3C26974B7C36CDC0 D8EBF0187090D65C591AE63DBA377EDCA298C4472F61DDB3AEAE5DC803C65B0D420D7F35 BCBD272D7CBDEBAF01C12A45A5749E013C6E6736C86636E18705C9C58D032C5433382EAE 82E58984BAC2E61FE23D83B9954CC32FB62465278E1481643947C717F714384392A0B256 F9C3D4381C1AF3D18F0E19E1C9A306DB994C5F2F82636EB026C84F5B3345A55EC04E000A 948A2C28DD88FF51BC912CBA14C0A09484F7D833FA6389DBD3051E33C8EBA5EE5C7ECB3C A19E61DF5642C9193E8B71B06D4117EE7BD6DA85071CDC17011BCDDE6234C206D7E70DA3 F88435992E523219E2FBEC530724DF97CC9D7132D00E6B1BF1D225312BB787A0AAF84838 ADFDB7B89CA4DB6C2609DACDEF0D84F37DABB32C9B213BAA2EC1AA58E139755EF6ABAFE9 488A4D464909CB2B1DCAB5B71C557906C86EB89FCD5813B185117A8A6ADB38AD4A17D736 986A601B445D88F8EB92368E84B3FA480C1958EE67F81010607E1F04C2628FFB08662FB9 5835EB7D96E155F09C029D6C77609EFBF4468E50F4F446D377E50642FAA7A3B0E1DB2B31 B75DB36B74633290FBA61F9570DD736CBB93999060FE8FD16492EE08C7E7A5063E939E96 653F20B933D3A1754F7A7B5E53E1E3975375C6CBC0F09337A95929C660CB6BFB9539446C 36C86FDA66F2FFD956E37C759903F67CBD43ECF7E2F88A5CDD75C5DF09385DA635BAE092 932128018CD8BE95CAC1CB0391ADF8B6A88BE0B447AE5D7BCD47755540CB7E73EBC180A3 9D2EC9088743F39FBE826FEDFE626612A2B213503BC8311471224860A022A5D9629587F4 D454F1753DE9E1C82BA12D5EC66110EF35896D17EC1F5E95A50C6A2D2FD86A0C63397565 528B71D029676B72718510143CDFBD61725A225F6CB1AD6902D42EF53E57EB7DAD0A5D2E 1FE2442E451C62333DB36B8842FAB12F2B6596F66A8BE181C31C3EDAB3FF966BBB0987BE F9E029D3553B12B13C76C843673B054103EFA52A21FE0B1CEF974FA8F45902D44841DEBF C8D014F9EBF222194561F2CC619A482398EE542DE8060837C3DA4FEF33E4673FAB75973B FFE15D62EF67D4F2C60C30021EE4C887522058E46DF35A28561C3103FC5AB75106C7B0F0 1EE2033B5AB8EA609618FAB2F7CD40B13D5321A40756C5CA14734BC5C578D1AE7D2C1013 4838E540D09EFD0BBFED520AE566E6B8F152E47BA6B9F0E3966F369352C772897A1EC4B0 D3E56B596D6EBEB2B5F55563786CB77B5055E542D33C5709E59E34D2A34048335366D6ED 0274F89C7403E3190ACEE36B80E4DBEBA92B93B3F16091AA200F9203A28C22557ADCEC88 954E4C8050CD9E19C8DDBA23328EE62034BB886EE80A75192F1144D5801ED2A82A68747A BA98EBBA1871E0A291E07B5FADEF307D261D935B50A21334BA3D9E512ECECCCF7CBA73DF 6985E563DEBFE8B38F9B96D68DB15AFB88287A0448AFF9951F3227F3676BD599AFA98B83 E36A22ACD3112C98C1219FD429BA403EC7C2005250F248E501343B76976530B385F5214F C910AA4A8806C948F80FC824170A098C4C6F61683D098731A86185C9B7D3886728328CCB CF7B1751AF5A9607A62E84F6544AFA8055F1CC3E088F593582180ED6A61D1700B94AA400 03349EA5BEA6537E4068F0B4ADA09DB2A2C933FF36E6BFB276E20E2F07DB4CC9E41E4BF6 8343AAC8BE94321A52E20A8F82D7084EE9282412C461E1AB14906A9B63BDA1C07AD28FAA 324348ECDCC7F773629DE5CA7C234884AD7F1FAB9B9C68D514E12E1EC30A2A8F5EB1AACC E7FFD564E371457BF2C8BFDF1784F574E222DEAE306035EF213B8F4D9CE3BDE4DD0FC97D A7EBFBFB0990F1B288A92D770D095564B0BC4B6D08876D8143907C62EA230EA16DD92307 1EF384A3196B0CFD134F910A48A89247E49A9E903516D4871B6D66D31FB219CCF16E3879 04EBC1B6B286A97E9B15CE84D83723FE19CD72F2F9549CF9045BAD4DD60E5819D2627141 BFC7DCFE8246ADA5997039C671803004BA6C3F72F5481918A8D7720BB7C9DE570635AC2D FFA44F907FD9D643F4B425CCB70020AD3F1E4737EE3B745FEFD1BA19954C0070A4F48744 5DEE190510D140DB1C271A26D3A41DE894A9246C034BE82BA623FC675EFEFFD3DDE4092E 501AC57FD476D2A1D7959DA676F4722E7EDA259B911DEEE5602903337D1AF6D09BE48155 C4E80609D8A7805EF6FB5388165FB05BD7D48B49A6D798F80A0A81C644016BD6B9412235 78986BD590E693B5441BC1D5730CF4F136A3F0CE75FE5A783B2EFCA25896F475F3DF224E 938034AF57BEE8D7CE51784705CA0AF7BF967DE01B975E6312ED7D58CD59CE28A7DCD1AF FEEA1EB610BC2FDFF71E153DE017E568481856CAC959371E3EF842FA0F6145E498D53ECE 65D31D6F8D916E1F51627B0E717B0F9EB675CAD7FAB2D3F1DAD69ED9C567D0BC78C3F3E6 F7FD46FDEA2264D4AEFDBF063BF0AAF413B479C68ED94A5B93E19D23BF85B8B9395176C6 650DB9C6952B63B618A8506980EC62FFD6893BCE607F6DAF380AB745D69C43326C78BB64 A6E6F3C363B87FAC9FD9A4A2452B452ECD85C5374484FEF8A8C0C0478954178B7B6022C0 260C19D912134F51A229A54506F16528385E03446EE8D0E8678ECEF11FF89968854210F5 FEA0E0A0A4796B25FBBDD3AC3C3487EE862F948D3E0C890AB5A943330A61897C2482CCEC B0195E8BDDC17C0BC75E97C9BAD610D8A4ED1967869B75729E35F2B625D3845F8E7649B7 D74D20AA92CF6A56314F822FAD9D91503E491EB7051B9D05569F53243D76C796AE857CDC BD9F38B04288AA3914416274D73850B228096824CFAA02B233F780D020D5F174482F04E6 47C6AE59811B1D4415A6B57A345FFFC4D58BAE701645269E5C58B43ED7735F8922448CD4 9E3AFDFD7E59FB74FD2897F8B8430809AECEEAD11A8B3E5C3D64299EBAAEC27A7D8FFCD8 9EE33EDBEA582FA6458EE7D647FD23D91C4CFC4AB9CCFE9A87C19AFAE1C4FB885C2DA824 BCB0448B0DD4CC05D662FD26816802AB0DAF6733FA090598FA28814FCEB141C7DBA44707 F2FB0048B6C49697613659F1E2BB9AF84F1C54078C5AE7A5D6B01F0C26356FD1AAA00682 26D1FDC59F04A007F8663D64BB175CFEB0BC995A410EC69670DF4487E94E2A9B6D550FE6 32B1BAE7C333BD7F19438955ADA52CE4A0BE8F339D60B2F7CD7573E2628609979967E332 911CF7AF5ABC76FD9D4D74EB9C5A7D103167D8B0817CF4A7AEBAAE1E49220AF5638F4D2B 69D25D20B711E72CA8D083A9AA560E50782E44A32C7123651A8079470C6FD8A156E3EF5A 9AD471172563A00654D17CBA6C910391FA4F5F29B917A95CEA5CC87E83AEB5781E68C46D 67691902D8C88980D68AD1D4FAA799FEC5A8F0CBADF77D763DA46920BC3B692EB7845A41 75B8E283B3219B7E8CB5E1FA2289B8E3AF14BCE7F4D1884EA1D06FAE6A9D7556524DC933 D721AA78C71A93FDCB4DE142C467BD9CB74C98146DBCE1A4380941CE6D4F43BAA09C1757 A92869EDA6B2FE40CD9EA36027131C9D76ABB27D7162BB0FF8112EFCCCFFF204A4AE7169 651EC6458CBE3FC47710E24BF510F5BB96EE7861E46681A69BCF42DE51D042A1569AA1A6 AAC9382A6960B514FF11F67D1DAA367B94C6F8724B4AF8CE410B96D40C5914920D849BFD 51008A165D697E0A8F2B7A3A6B69C6B4EF2064F415C2370B953C55E90B15D61648F4DC25 A0E555CBB380012BD2FE2EE8904A0B66A76BCCED8F28ED3DB9720CFFF9D363ADE14577DD CCC2452357E03D40695329E0421BB27E2118889B429D1884FE4DD3181516E5B28D065B57 6EDCA3E21C0491A126E4B99D96F12F8F2A991BA2688FFEBDFAFF293BD2EDD046398BE4D5 06CD9C0188AEA342389807C9E386E7266F05590284159136174643A3ABE03E194485D3D4 0F8657A38B4F96BB98638078AEA51AAC88C2062FF7E66AB0DB69F931C5D90360304818A4 DE041D22A6C8D1B9CD36B7AE1388E8CF36CC86C308F64A5A97B9D2063197F360B477A0EA 780784FB70161CD7E0B3A1990977BAE706A2EDA5368686941BC24989AD1F935A3F94A05A E5C5BCF9D92517FC837FFC7D594D2376941168107A13982763AC3002C49B114E3B3CD34D EADC82060FDAFE235DEF7CEABE13CE15D458A17E4CE330ED914C9680C8BE803EAD8AC7F7 97232594D7DC0A9B600757DE6738AAD6603372EB408DCCB8B38784ABEC420CFBD3FBBA92 FCF0073AD7620C58FEA1DED50229C111DC4008CB6C82FC03C1D55C14F3618901DE402F5D 28CC5E2FA8157B258434225481D99C2982394F2784B120731DD906C2BA37F7D27722514A 5FF6C99B90D3879531B5814AFD7530610D71D7D29B09B4B81A6D63603F15FBE0749BE9CB C0058C8EA53614594CAF35E4BF5341EF83266AAC746B45D28EDF1240C9CE6A909EA40698 10844906639705A3BC23A497004CE498859D22F747AAE2F092CC4C41BEBEE9D062A6BB2A B8E5A2125C8337300CB79B196639B29425256EE8D5C3B4BEF737384B050A4D4F4621864E 579BE8AE326A1047D00286C8050FF69CD6F61AB9E26F70298D71FFCCFC657788A9343054 568486BED8EA5DDC19B172CFE9E77BD586FFC4BC90DF914FEE40CC80EB91BBC7CFDF2C19 0D5ACA66272CC7F05BCB5F9EB92FC14099C9952097027708F17B1D2A1A1CDFBF8B0228A1 883C069BDCF6735AD124A79F8C71689AF8E2F14B0B6617755EAA02374E90C94B27FC21E5 0AB5EE8316D4BDC765DB113E70D65A14653F776696FCFC2AF8917A34FE8E42390EAC2ABB 367720375EAC7825F048A215DEBC7A80869D9E1958994F2EA70966A69F17DD6F9E0CD673 5AA6CDD4A27D15599EFAC86B796E593625EA0B61A84E1019DCB73A1215A8EE4FB559BA49 9548C84AE663FC2B1809E641F70EFE9947EF100CDB5B80289E5B5BA46060F31AE53BB66B 73190A07A9EAB0E36539913B246A852BE86B1F67F09F21AF8C220FBE02F11F05D914119D 901451DCDEF20879CAE52D98362AA396A854D7DADD635532E4CE8A5829DF81D9946C1281 9977EF3BAC34C9BF4E79F7A3856AF73DF32EF7440883ACA22903B566565136E614B0DF98 81C3F94D5E1BE33E975E36A29882ED8D4EE5B821B202E7DAC16B957912AEFFC6F3C973EF 03973C5009A9544FB05017FA646FF6964481988EA69D6FC1C14A193D310B89B4E661D757 068D32FB5A4634B44308D2661C73E267B84BC01A06C7588CE112707A92C5A2C3BDE197AE 5F6C5263FE1D9E478D08A982E99010C97598AD9B883F806B4FA18778BD44EF58289507BB 66692252D464EBB4B7B2A59D8359AB537CF3ABD20D87E34849977F98071DB5F67F3EB3CB 02DCCDB856963B18182D4217757D5024908D50729FEF712182BC921FAE21B841DD52F806 4E82CFA8EC5F5A3BF6271E53A12B88C563A21C649E3369D0499148DF67F68A86D700C27C 15DDF31BC689C9BD39F46E60F1D48BC80BFE799755032597B94CA038597137F8E6E49611 088C92C98E8882372EF3E974630A46388E127B6B75F85787BA3B1FE46DBBC2044CE41536 7B8A39382A0D056235F4871513D30AB8304EB2A0BA781E649B88D5D4CAF8AFE20100F35D 5A3C6CEF1698EF0ADBBE7C16B244E4AECF865BF31246D69F20BA7D7E32F7B0BDE1FF2514 9ECD6D3E256B9281148D259044B40079620B2FE8DB9272C3B26445BE60DBF6DC6D678EDE 3681B356216320FA91B5267878B3486D17FA437C4EFF83B966B079D6F01126B46AA5756F DC7302D4CD802F9200D513FD3170BB03A11019450F9F9C04CAEA1D87EF1C2516CCB3A8CC C944F4A2C58E34AC05046CF40F1C7C32F1F55A37CF54989A3B0B4FAAFAF57D0B0720D871 445DEA1DB78B7DD3779548B60A3D3B565373E3636DC0CFAD0783E20A7347C1249D60FEF9 9AFBF7E14A7F983A8B96BE57ABFBB5093B783BFFFAF9DB95D52E203CF3DE148E0B9DEF2B A265CB5E7FE4821556496E85B2B9A4354136ACA2D6D6C0455C4090C495584695003578E0 8EEA5B48EF371BDD7960B45C7E5EC6785C38C9AABC6DFE4CDC0769CF19576F9D4C54CC89 77AA41DA810BF7890A19DA13F2517D16CBA45C4EBECC656061261BF3974A34B599E39979 3617654A7EF66620B204957298E58F28E31D43F32CF718765E157BEBBB6534E3E0DF9DB6 78918B9D59BF5E2E5444DADE0252B7A5FA7FFC7BFF973E1D026CC678CD6209ABB81A2FB4 735D1E538C485BE193BFD4A8398421592488AECF9D93AFFBA682050A907FE7608D1636D2 ED9C3998250E3E1518A59056674790ABC6BF1EB374CDDFF54B178C01224E20812DE544C1 4AEC8EE4CB470759D5512D63095B782068E7B8EE445EEAEE2154BC43A1B59E9D99F7FB06 FBA9E67F5AC53209F854B09623193DBABDCE14223A8DAF586528638AF50DB5C898EC82D5 3C429E98AF0E8ED98ECED62B490B19DE08F4F89C32E68810A5EF50D20509D9AE491A9E8F C61AAFABF5B6CA127D8471496E9F879981520748845BCD5668D8415756DBE3D852493B65 A51B062EF30569D8279FBCCC5C64D96A6084232B4B248C7AC5386270436F686551396F8B 133A350943094B3E8487D8CCEBE5924CF11CE30A2A10FAE1B0270850DDE58C03EC402BD1 FDD58C6CD6845A4826CFC599D1FDF24D423626236939BC059FE482F4E444F6550005A7C7 BB3F8EE44E158800EB144DBB2AC6208A0FE19A971DC49B89695ADD2370EF8CD91FC23319 0884F267DF70D714988D70D821BDD58E716CCD22FA95F5F101EB8DB2C2FD2E2C440B2F53 8FACB7115E9E01565E698B4177B5087C43CB361F13EE26A5362C8CB265CCFADBC4D4A6F6 D25197080C8D63BADF3FBD95034FF7DDACF2734A2C5C5FF2A4F14FA6AFBED0F9ABA1B93C 52DDC7F76D869774D4DAA16F10789713FF36032B59F102897F2B282A6F04E7932F6A97A9 0D16BDB3051486A09D39A13DDA736A107C8A38DDDC9E199CB96697E2D35D73E2267899CF 47832127BDDFF69F406EE5CCBF8301BA77631776D82440C7D121C729E33867FF6C011B83 4C2BA62321BC425EFD3EFC4CC1162CAB22DA88413764D0B62A1C3F16A31A5EB787A5A3B1 1C094F1AA554C96AEC2245175E9180C04017B61FB6D7DF88A3AE8136D8123C4B54DCAB5E 0FAB8348E7340B31881237A87F7B6A3C366E85BA894BCE898FD79323C2589E8E34E49AA6 C65208AF779D181B15370F52B59A3125BA5793B32FF9F000AB34323104E6F347AD4C6F14 FA63CD4A13F60B386A010440EE6E5CCF8BDE4FCED68AD8AFA95D81F34836F45A9AD1ED46 52888C34568C3CC0B7A526530F0DEA4745F1774C3AC3DEC32803E89E98C3A5700F89D292 38CC5EEB4C6C1CC44CA9E0297297FCB773C5ABCFF220A3526D83AEF794C406DCBDD3E08E 30B0F6EF0D9947734E6E8E059DA05C4F49D3F87DF2C46FAB87E67E6E6E954CEF9658C1C3 F5E2D05EA2C96366850869D4EAAE513BE3F0F1120D586BAB79DC27A7CA93F13000884B39 6437E340A44BC7EDAF4CC0D6B43070FD94527700DCC844C4DB3E248DAA5D7AA74FD9832E D858FD49FF2500D6DB83447F351178B4D806C36738DF13C7925B7D93D0ECC9B17E4BEB7B C1A76BE4F10FE121383341354FE8356708FECF43FEEF8DBD40C6B2357447314A2678B6CB 4A5C9597659131CBB70330F2C4CD3EC5A0B11932E46BFF969F12F0C101270711CC774C47 6877A6797D3F878341C6FD0CCDE05526B7EF497F55EE86AE90ABE42410D09F79D7B7C006 A161A473A757B654CB5119EE375530546868BBD94F5383C7E466CD38C1731955BDD9653A 87FC7FD76B92269B0FF73FD2FE81A5A0FAC2FBD15348809EAF6014E1F0B1EE0231A88758 A6F1975CA60BDA6D5343AC97C976D7F8043DCC1D11C4EADB448DE8EFCC072FA8E5A34DC7 6A2FCC645951E2444455CA08CE8A07CA4038730C6D414EFDF516246CD45F422E4257D57D 6B8B4E73672BC6BE393F8C1CA72B50814DB69949C25EC40F363E4729BD4F5DCD3BBFD4E1 233BCA5073229317B20779111D0BF1D4D2C90F059E6DFBC7622E2CA596F3A1D23F3D4DA9 69F0E85B9890DC6CCF00E5B6D89AE653530D3B592752877E3993B5CEA72855E39CAFFBF1 5C9F6DD6F4ADAD89A0886C44A0C53C90F2198D2FF1EC1DD6AD8383D87B0517C2FBA599DE DF143F0D6F5E67AA7783E40C3418591C511216DD025B57F2A4114837F5C626B27BE7E540 4DB689092B9664C90FAD727A23837180434BA29E41B20C005D4CE513B7E40F908CBA0926 856443354A37894C5FD498B4E51FE740C7AA9D89F5FAD7F99E4EE854D230C5D139037EED 448C6788E2B29E6420147B34AF4775437C90169827EF4842C435ED171B546D665DE28F24 9ED12CEAC08C10F60D230F32D7B3DCB61F7F120E07E5E6FC39CE58644C491666EB0CF7F4 DEB1F35901C1923D2448363259C57D529F4A5427BDD1D68DA086B172086AE3B8C775F67A 2F08E1995AE95EEDA2194DE6B550CABBCB3C24B9EEDC376DDC13EE923A0C3A19363AB588 650F21C6D860EC2E781BDF47B43001E8B52E8D0EA5B9A229BF222F2E0262ED709A0C2BB5 DFDCC07A2FD079EEB118AD33130387A2F15B0330AC86E913F444714A7D75B04D5674D6B4 A7BE35FF1B63458C73EB418E1653700B54418ED817A73DBF69588E82A592B97767179460 14D275A35679A6132BF3A7E994E88C4C0332FFA1F155BFF622349D78FB5CDFB898EFFF00 DEFF8B53348B1904EFE3B465B172B49B59EDDF23F6B2E17F685C94DD4CF77D780B2C9105 48A0639EF06B11E50CC3480189FC53308A1002C99F3D0CD6BA4023882B1FDD30CF868919 9CEBB467C4329E16DB57405E4302F3D6E4DC3BCB13F1F55C909CF440F0BD1E1E96249ADE 7E5A630B36DCF7E4AFE3B3B312D341C55CF3D4A712076432B998AFDFDF2821E4B86C5413 DB16ABA098D878240FA70562D32ED6DCED451F7C67A294B96CDBE35B3F085CC53BAC62FA B7C7353D1F0ADF67701B1FA75671BAE798BF714C40D2171BD9AA79EF13B4F522BB1AE8F6 B63F0CD8502724868E72EDB1AF5FC0CAB5F196A34D1100478397F62D0495F446C29393FC 9FD447D5421DFA2DF32A2E60AC2AC313043E909BC5D6AC5DB753A8AEDBD944D798ABE0FE 2104C956578475A3F50FDA0DF93ACD0F21E847AF513E4F415BB31FCD107483CD792742BA F0E416B1F89C9C45E177BF3D85DF55B74F37EF08A5CD0BB7404C7381394EBC96411882A5 5837DB339E1FAE2C4054F005866C76431FF68E47AB6460BC26540A32298855A3C8ED53E8 F627DB2FFCD6A28F64BA23765E9137CE44D5B17B0C24293B72B2E115A0B9FC7C35880963 9AA76ECD46546FAC32B9BFB6735688D777C939D7AE00A8D516CCB7A9BE996B9FFE839C8C D55004FCCFAC3EEF4AF569C1C270C79D7547691E91309F77BEC88E63E3BECB923E331D36 85213589E58BE87159B20E74F1EF6F99CBF6FA5BCC229C22A04C9774F6F9EBFAF3D7738E 5C82716A3896A9579DB4A2679760402DC446EBE040119E9BFBCB1997C1967DABD522EA71 5611F66F05BAE3641F15D78AD76786316D018EEDDED12701669BDFCBBFAABA504F997387 0F201E3BBC64C4CD8C2C3A1700F935256910D3B0DDCCE58A37233762ACACEBDCAE197191 009B93642B854112CCB8659719F5120B2CC806FFAEB2FFBDD9CB23CCB48CBB034C30B674 4652320ECC4B2BDC0A72632C4B725CF50FE568DF0DCF3B542EEF57110F4675AAFFE646F2 63163431DD701A5F38071FA470CC3F7A334141E70D3BA395E36056F174B0A8C76A117E02 0576275833659CD998A9D0F05CD7DC37BBCC4CDED9A2BE8FF5FD751AE1208AC5B80984EE 10234A81FD7B60169B84EDCEA965CA0429BC8174370C35E56BE6260A2C23E357230ACEB7 02017E04C57049FF75A4C97F3ED3C56F3A410958A04462C96E807C6E2E6A7A870E0FBBC4 52AF1E3D79E226582A80CBAA85E8D0220B3780C49BAEAAC3FB9CDD41BB5F5F2E6ECD6224 23BF9B87DA3D8BDCD1262A3A5506E3C612625878D2545BECB365DAE6CFE3FE01F9AB4EFF 990EDFB7D4AEF32380FE39B0FC777C896FD58858E178CFE9516E778C314FB0B42B942A14 C132B4C0FA8BAC99757CA112D8CECDCF39D900B7F33080D0F6F4BA59C15FC68AFD0E3663 83EB9538FA9D169CF30C5E532F417D042F944B164206B3A4B0E2668CD8B048D85B06810C 5E74C77AC66BA413BCC22A53F57640AC3A3A87662242FC3C3E29AF9112DD5F392DE78966 DF8D17EC24E6A184689DE2DB1FBD1CA63B80B89161EEF2B7168392ADBC909E2A1A2AD073 B6B5D74F7CEB00DE9823092AAC403B6967D767BC97C8163E9CAC56247012BC62068A7324 C43F5B592EAA23DAC658F361DAC2BE84E54614DE035DEE3FDF20602C4C68A401FBFF8B55 EDEEBB9497A3B924C358BAC4AC783E57F08416DEBDE4A9DA7ED58D8ED1E6034458DDE2AD 02F0F2A3BCDBB6EB44FCADB47F35DC8BA629BE59BC4D46570C864A4CEFC3FF3B75490ECB 3E0E18ACD48B7E769D01558FB10AE32CC028F2E2DBB60A649DCD4B71C615B74F5A7C4D3F 01EBF180799D9F4981391895029AE91657A8EE9FC425B293B16788765DC5106E3AC524DE C09182F88AF7634CAE89455E05DD3511483705E28A0063D9764FF239CF166A0E4EB5F848 D05B6332AEB188B1A091E5D12CD6F922B44CC766A7BF0E32F48E3845D7260E19F1387C4F 14B5738846D892FCB2D7335B92011A456091E6511CBAD0107869AD8A605F2ECD05B914D0 C40C3C411A2E5965FC13FB74BAB72822B92A75564A137146568E3C5DBFC5BB72EB4958E6 3E7C114A404C63F6B7623BE183CFD4C577DA3189D1A1F0C7E387BEA3510085EBAD20DFE7 EDAABBDF48B8CFFDB3AEE60C5A7098DC9C671EE2998DA9F495182F8EA538A75B5C10E9B6 230B57CEB535BDD91BA7632F2C5901567167283362AD99AF57EED2029BC237AB7B424EBE FBBD9BFF6849017B21D34620A3129497A98DCC19D1524C3DC7B9A3E1C666775175F34A3D D90491AF1BA3F4A766D4F3896C87F64F02649578FD05B6214D9A1C87EB955E2434895564 3F7A888EC6FDCAFC9FA9FA986AA7A610C3E2BBF6FD9E8BABD754E4165F20DA78B14D2499 AEEDA708A5D265BBBAB3372024A3A6E85C2E55E8C3F484FE1B2256197C2DAA8474BF25A0 AC95DA40B15F47CC4F90E82DFF9E72B19CD5F65784E7F9E47E12261AA0D96E7D009F2CDA 390DB1A72AB1C1C1E4ADBEB82F4AA7BE08B09B057156EA4E022A3EC332E9880B78EAEF85 3C8187D830C43D1247301B7F19E91ECF4C23E604255A739302B29FEECE206B36B4429304 39B803427532A6AC0D75865C08AE35CB1371EAE494ADE1E1816C001B3A5B52EA4CE789DC 3C9DEB3C5A63BBADD2DBCD321A2D63E6F62FE65A88DEFC2A26C3D1E0AA7239AD887CCBFD EFBEB96C3A01926339D4C4FCF0C12D0D3DD4E22F9A53658D676D3090A03DB8417B3F0454 06953B795AB86C9ABF7DBBF457BD2EDFB0C0687E820733EDE03DA24FDD20F55F6F2DC3EE 2B97EF8F8D02FC00C483A9E1681D4405C851C19F02013A645119ECF65550F6D3E7E6312A 255B8286EFA3F9D99A2B4CD1FD68021386922141914C0AA8917131C473CA02B723250E8F 77C6D7AD0C0122AB57FEEB8A369FF10B5A99E062692B6F3D965DB56A2959CAE32440F4D0 7B8328BA869CA91D4B84E263BFB49397EE6C7CF5406E6FAB1E7F92AB2723572385756DFE 0E636ADB309ABDCAACDDEAD3D8E13FA7F4A6312D058AF8082B5BEE6A8F7F69E0986041B1 43374779BB99AD5065BB7CB27E4891C68DF51E990506E3A58F83C5E5412AD9B9FE2C9439 99C26B368A0615EB68F1F6FF61D2B75FDA03E69D264920EAE5842B161339BA5C6DD5E5F1 BC5C773FDB738B78C95402EE631E29745D92ED7FBD93FDF83D9B500060F425FA1210BF2D 0770E80C11392132D35AAC20A4AC9B2FA91B9415F93797C21083CF8F1127C5CD23E18FD8 93741359D38BF54933F5C37932DA2161F311C2551BF72CCDD8ADF12C0B00B34BCEE9946E 763EAD082750D1F461F9D16BC785D83DC0753088B9EDC55F633354D17FFF0D830AE3918B 73C85911B0131C2A43F64F21BB7F3C14785F00704B4B8AF051156AA74E623CC3944B8940 8AE8FA297D0F7964430E26252720324227774771D69CCEEBEC5CC9E337EACF01C4027E3C E200FBA69EB438325BFFF5C75EC645D864E8F5CF538E54425282B3E0EEFB8C89F7061A69 18C609DE2CD197E73909523C9BE221990A4ED64EFE0811BC31963FDD9252039CCBAFE4DF F39E53DA93F3E24E398E457B6450835774A648837CF075058DDD19EB5F589048CDB937E7 C4F7259F0305DB907A48A90877AA72C81D659D60F2A8025B9EF03A853AC9ADA376A990B2 65947907CB4220825592C9EB99BD12CCE131E4659610FB13F357BFD8971FF043AC01F9EC 2C0767DAB6F638B97F629A49D46AD25009B7D29D7C0FF7906AD0E6813A1C5A39F9104886 9FF3733A9CE7A2B7A5034CC50460F4CB9B9E0699798089C396C495BD4697075929723B55 1596DA4F25CB752351BEB5C52996AD0176174F64665517F23BAAB50139C1B0595F502EF3 E4AE7254DCA29E6D814AA5FF0B907AC36074E51AAD7194EC309B8AB66B456200F2111127 766769F6E8AC19B625E0862320F1ECC74E7530334964D503AC638529C525149F42AE82A9 DDA0D24B52FDD38C044376CE1A9ABEBB7454BF6E7A6C57AE5B6C330D3C9F861CE9740230 BA1122783377DDD71E1AAA8B24FDFF891B59D92BAF3799912298079C6DC7B02E79952D86 109563C6ED47C3CB610803D47D89FDDC126F5E26A8E3D5C53EF8B3E62F190F1FE604EE10 1BBDBF8C57DA14C3C45A549393AC377951D1D7D00D229F6F5BF406FBAC104AEFF34054CD 0F32A07527D19B3ADB8486E7218A275B02AE89D1BD6EF25A27B706D51AF9D958DD466E3F AFA990E81B142BA156E0A1B03934969864318E079EA5921F47687727BBC489DFE2F92BAE 9F70BE56AE377A4CDFD73A0F705C3E776CBB1DD7F35D96C33F4D69D61BEE449F611A2367 1241E7D7291ED0D1B0128B7CB0F61B0848B489759C434C54DD5DF048386C559E692013B1 EC1471B19DCAF8767925E286418D3AA6D9E4BE405C18B78A33F14328B256BEAD010D9FE5 48F5A792186B7796B21BA3CD5DAA135C94CCF86C436B3DF258A4FB5ACAE51FA6D0132525 1F5F6713A9054A6B3174C534E771C554AB57E72985B7FA756948DA9B6438CB24F8A84BA2 F7FB860DE88E61E2CFB18173A69FC73EE2F6123CC2C72AC290174611EA0D9606DD5A3E82 01D06322B5A942D9D1CE45B40112F490A6732A65DBFCBFDFC2D0C507542497DA7F07949A 0A3F5400D5919B167D01F02CE06A57D59CA25C65D906B09487445045EF21E4F762668693 8E33BD30F846F8D3A010D29EA97E0E11676212BB1A1510BD2CC3E793437BDABED0C79B0E D9A3B335ED0C9E12B8C31AC2FEA2C2B1B3E948CE99449CD18BE244B16CAC0342CEADAA99 DB5124ED082545FB01992ED6A9D8E07325B31C8311A566DE285C9F8221B8D635A4229C5D 739039D082E7243F490352206D875FC4B893F551647617A97375C50506EB74AD46BC9A5F 5E2B8B9385DC9162BEB80943EBBC8C3EAA77605417FA2E488C0E2FB6C7D71BE5FF280758 45F816EF14B6DE92F349E68E9DB4DB9192560A1F68E0C15FAF2A06ED1D4D28A3244792FD 18D158FB1CFAF21B67BC4097A257B31D78205F691FF4D46312471A4BDE5C2C4F95CC0463 BBF4AC6C5285E44557BC5CBC76045691865C1192DF3489083720D9FF729824971DB53735 7CB1FE910F1816D85FABF1E88086EF9A4B72B861E958E220682EF6F8D703912517F721ED EC045A9AC8D0DC87E7E41C7CF6A7F213A2071FD9A90CE1F24F3466C9CC6072F75D445D66 17C5D3F773FB7403C4158564A9579950838CDEB28EE58355A8A4E86F43E3B9A995FF8A47 92C3D07BAC0C7A091427BB910F39662780CC96B571697C16979BCE34866C5F71E2B37F7F 05B866F4900C2B865ED10491C07A4BADC6A7325C49B4E51F436AC82F69B7AD01ED30263E 2C86FCF49B4C5D4A6DE88FB974A48A5319A0709492BB41A4B3D40D1E9B8AECDC2F63FCBD 7A21BA6D17061EF110D0982D41FB3E2EB45BA55D3B0CC564C7F9FF499384C2FB1734B3FB 2A65AA8558E7B48CF8E9D5E471D5AA99E1805F279C83E9BB9A3540CDB30821F8040ADFC5 17BE34827B58722C412EAE5CFC34042E6784FEFE892B5774253B28D480FD06807DF4EFF9 5145665C37A852C3194EB49F804F351728DF7AF8BF28560487FB85ECD90788E451257892 BF21326C6127336B30D17B6ABC538723F700C350838BA0961ECCB9C95D93CB281F06E0C7 F915339643F280EE45B5E9296E5B9BA27E95F85A0EBEA148FD92D25A0EAA61CBC2F1610E 3E38D3DEB531DF5E1964CB3B9A1D566830B2807968B7420440F101FC417C5C7C106F31D8 AED0817FE4A151ABBB0A615B1B8F245527FFB482A12E83411A76F765D06A65DDBD1C2D3F 1230FAF8ECDA8113D7CA88563AFDDDE18C365BCA69999B1A377A3F870A5C949AC8F14CEC ECB01CEA666FEA979D16CA2D74A37FFFE593554ED4B0F4106A7C0A062BE3AC87F2AAE349 913724E0C7520F8479761C81BE01EDEC2F34612E2FCDB68D11FE42E8EBA6D261A35621D8 F06295B3CBF6A1EBA7C1D43DE10CAF0C8E0E27C3830D1BEB9E24BC25B21264A67CAFEAA1 182D44D4199BE8EC480B3184F5719270B65B3A0F1822E93F49E0805B66813C4B95BCE7C9 A439F540F6CBFE74DC79BD258843F666EE6CB36A800DAB5A5D2577DA4225F60273795445 FD8CAEFD062BF84373D063A75732B5775E496C593BB72EFA122DD4D57ED0FD554F0E22FA DE15B8F531252932109C1554CC0643310D09C33FBB15407D81ABCC0459D7DD2CA1C110CB A0E8BA923EAF2B5C1E4C4DA00C9E529153A18C3B73EA2966A4BFF4897FAB65D2DDD2E3E8 6F69D695300C05711BE19402480105BC114A730E7D658CC73D444FAD1BE44CE1DC701A2E 60CFF15E4138DB59A81C6F9B266EB0352A583B67EF1062D51FEA0D7510845C313618C576 B509A4CACA233375E1F7A15633A5E59F7AC8130697117370078A51A9BC2C6408851F72FB ADD370B0EAAC1F752ABF32463796F749B2E7D9D0AEBEB5F1F5C4245B1B31F80B319A4C26 A418E907AC1495DE7487E805E4495D4F6DC596114106A02F59601646F863F23E01ED8D7B 5BF3228D2D41892977BFDF5D8E0377BBF700C0BD764D738E1B06F9775CC00A6294E521E1 447D684BB69D195A80A034869EFBDA44135252063696B3A0269C18D90A6F6E2391BAC639 FD56ACDBC0090ACFB0701E8D8AEE4993E7096C78D25B8BF1477FC461D4E81191A0B755F6 7058A7998FAE47108D1296050658E2DE8A134D1D8D8EE3E1C0DA96CB654652E96EF659EC 1E98BB3186710F8D249C6F90A73AE9CF482915C5FC85F1F1EB1226C311CABF31B4BB3428 042A6143DD53471360DD39A26411E7BE1FAE3E5EFCECEBF407DB693D8583AAF8B3E87388 16669DB6AC27B4BE233BEE5FC0BB0AA761ED5074D1F822791B6A6196C9ADD5C2A7AA4C16 DD1D8ED80E9B141D6FA418BA2AD03F4FD2A4BFFC4FA28F5E13297561F53B2AB670FBB6EF 1537A7BCBE2362892BAF914C859EA0D7CB8F4C70ABBABA815C61C588DF28E8CB0EAC8ED3 2D2B7B73EB885E41864E1655CC030995839E37D8E348E18EAFEC0897802A81568B366C55 39FE4791E972984B8D63108827AD753CD6C253F4E515074065CD518B2CAD949F03D4F124 1E95BD3DE6F8F9EDB803D95488D55FE91E0C4F869DD8C7089DA719354AA330B5600EBBEF 6EA9BE5BFDE65E01D9B4DF008875535F10B09E2FF0FF2A9EB51032BC3C96D70F73A557A6 717E690AB2CA3EDD6B95FF9882ECCB7013AD3CF8C915AAFD4D242217F5C9853E25CCFF3F 0F380F663D3CC110F95803C2E194AC91DC9908BA77E5D056F455A77C3F7D82F85A33FA57 AEDF8616A47EFD72763E692C29256E267A8F9768FF4FCBC145433799EBBF987FEA15CC47 0C08D5C18BE0E2E5FE59123EDAE8F2F6128319114F37E6521018BC2B5B2E9026BF62726C 7321F52581BA7F27A44D729C51EE0FAD5BAAA98292C3279F6450999093F8129193460E0B 66E2B06CC3A188D8B46BAFE289E35A429458FE78EC92B1C822AEC70DB6CA399AA1295236 3BCAEA730B299797AE356BF85AE2A4CB846685BEE2F0967779F469DC325C5AE11E634E3B FFE52C4EF3798C65897F0863BA31CC14727058DBFB2159247BD9087EE061159228507EE2 58895A9A0DD81F56A18111C8BCBB29E679FD0EA2D2290276E5F0A329C89600E97DC10EF4 580A4E7C97029B34E0C0524565897AA5106A2F8569532A658CBA39692E2DD8FCB57A797A F3D9573460D9F4AD941F58538B99CBA8AB910A0378ADB9741A1818A4F501CCB071F8095D 04824840468D0FB4B5A85AE59C118212A713EB72E2674DAA3546C85A98638E01F1D9CF50 02016D4086DA18E044B8F2A5675208F310E1D95B3F94CB86B88F3BF6EFA7C14994A8DA65 E8ABFF1DEAA7D921EF0547653BFFAEFFDE849C60C062E47071CB6A75505D22E4E6C54445 1CB7818A94E57E026E17D011BE2190B072CE393FABA1717FBE2FAFD4B55F4A9207E20153 3928AC2E1960F68DE80EDFBB33F5F3BBFB32B6B338DAB3A9D3379B0006B9DA3932E5F6B5 A77B4D1CDD8369A82C7A0C7A873D080C55317912792F2B53997EED367352BCE6F5B96000 E65D0A1DFBFF17E50B77DB15E401B3612B2223508EF315C42A1A65B09217C483DD61C887 B9F7016C1C5579FF16F240CE2944298F47E22AAF24D317D7D326AFAF5181046F9A3AD644 203A7E3627F2EB43F879F4B990AFFE4B8742CF40F35D07BDCB5291EBADA565D549E421B4 DF7E097FC223A43E33E27EF2819D5A287AA3016B0FC1F1AD09B5C6CEFF915D9EBBB3FE7F C6FB997CE34FBF08CBB2477AB7C8B41F0933B772909F3D46D4A31F75EB851F5EBAC05299 172448746C26814E2D910E84D70ED768CF72ADF6F7D7735A7B89C00F6BEC77799A8ED2CD 4E4C1D0BD101891AE68391792B82873B7365461501E30916AE02A6B2B2876FF4B226B922 CF5D57D2255F8AC70988F00F674962FE553302A43A6806DCD4306235CD20C0335EA2A42C D2CAABDA256E5E9738336D174D311D19893CE5D43B873048F4D6C008B2EE28571D6F2334 F3F2AA65B744706385D14C432E982C6207A86E87C46FC9B9D550B903401265F7BC318690 C5623FCCECDEDD75227B7C499F07A2747BA9635C3718FD8C296EE1770052F4B3AB1B7BFE 74C219D84206628BBE8BAD04D10FA2340139CD396363607BC6E8E976896FD9FEE360F6A5 3764E738E83AA64EA903597C8E0487A2D2B6BF5A6DA7FCA4A31A298BD0B40B7BABA4E0DA 1EEB2C56960C9574E53AAEFEAB7F3C5B7F9457DA5E9234640A744FE80FD11539F67C02D5 D8423A9B5A100F0CD13145E05C68554FAC3F278372FBFFC2A63E7A6FDB52B7586F523CC7 C36D7391C62D0E50961C6153697067A26992D7604ACC9F402CD33A08EED7456D7B9CD5AB 68E2A1C2691A5164B17AD948AC6791D86C0E5F0C1BC1B4155E52F5CAEFFF703862AA757A 1AF7EE43B7FE6D99B8C5C0354D2F69C363634F157EE489F287200C81CBDBC9B0B041BB69 4C466C0349638E4B5911B689E5DFC7AA3FBFAD0A79C0EA476D2C9ED1BF91E14850250A65 DDF5EF1EB34F311C79C0900D2BB46B4619CB3319FE9DA6C92E0516E90503E34E47CB6AA8 42DACD9F26EC9029FE1911E77C6BEC3E72EC3ACBDD6E40EE2C27FD2E066785B601943DC2 C0A60EB0F8F4D65EB06B1812D03AB2C6DB49C2E80DCF96ED6F48396D714C09D219C349EA 3256BCD889E4B9B98D242E0D3A0001373C0835257F7348683745D2BF63C0DEDB9827ACF2 333426A3156977A48DD998AFC3C27BE7212FA0B49840E64C45337CC1CEFDCD22C6013251 A3F903183808D24A1B09CF9502F2A3D16FD309DE2AD2325D1AEA902A2F13DCEE650E6155 CAACF8ED64A884A05715DAD0AEA1C21833CD696AA6495D0ABBBEC4FA18BF0F28BD87A1D9 1F088E44D4F9F03B0065922AB288B9D8948820800AFBBB716E1CD643ADBEBB9DCD7B6C7D 50F0E42223F5E5BF5C575CC81DA2B8F5790A6525288B536302F8D061020713322DD3C0EA DEB50D1F2F02BB978A6AAD699B8ABFBEFE91F4AB4F129CFBB8C07591DEA868C2E8564616 3CC9CEB4DD679F09C09B53020935D8414A220E747A53BC6466E11CC38417AFB3EC41E1D9 9A0DC84BBBC15E6F67D1EF2EEA6F9B0AC80983BA35ED444BEE2D712FDF980B1E0226F670 FE5A84840E9DDAF3C55AE08F99D3D2146F68CF5BF90E6D1037D08637A1AB9D68CBA1114F A82B532C0443127F583E79E3B34E35662A8073F8FF590611AFEAB3EE741E508133827A93 D1BF34BC1D60C491175B3A9916D42253492BB82A50803B93B21590614101A0D9CA2A80D4 3DF28304F21A6BEFA2FEDAB65BD0968BFF2E48176A8D47FCE4D21C5728CDB6397817BD01 4537E7F0F79557A87F97F9BC8DFC3BA72CFB5BD7325A054BA7EF0C0F3C8C57BBBACDFD05 E4AB86E6A675BD1AE4BED2E421D2AF6D789FEB17B5B7542123B0916A19879B4A0BC5E126 07386BB86AE2F2C5C4074020410208FDC887FEEFD4CDEAB8507B871F73E0239C542700ED A3CA40185B3AD29B899F58C2868B761131030DC885F68946CC38317D22AB40EA98D6EEBD DBA660A518D79F1D44477EF74227D658BFB33B39503B7BA213A6150680B02566A815C6E3 BCA84F9CB077D178BC9400CCB417D21F02D0AABC19CF87BA9101E678981AEB2E0C670C18 49AE6634AAEB14D40B93D020BD8C2EC388518AD6836F7FCA4E8D26403B3339A3992F36AD 764D7504481DB819C9915D0A6D7FFB1E0C02F96E1C410D176A4691172BA07EC9AF2CEF7C 2DF4BBAD55313AEC9A3C92510C0D4413B027C65C59879E4CFD58414982D32BCFA4935C3C DD58815D911168594F1FB10A175D59E94FD45F616967CEE3660D7F067D43AFC2094087C7 5DE9639AD61A9EBC86F027FDAE1D7A3695DF11327FBC8C0C1CFF4ADD1D92125022491835 5A9FE4C168CDCBA32CF6C383F0F4F6F191B9BFA00ACA3D597F3CEA677D93C7DFD74A2F44 42D085792C1E8208D4D9172D1075DF0E3749A9F727D5FE9133D8D4C54C81D980CA30CC60 DD1B9D19BD3EE5605890FBFB420F509F837F3214D30D851043949CE98853252249D0F4AD C74A6667D3DE5606DEDD44E3EDDEAB2AFAA90AECEAB084BBF7516597B0F73069F03CBCD2 7C61AD42F74CEC9B0C9523CEBBBC1624AEC0173B5DE2AF8DE01B0D796376BFD9CA4D0540 60AF96DD353789D76356B19395F28ECFFFF5172C4703C4F4FD7E26C37D043451080011DF 1F0C7418C1039DEA33C1272CEE91FB357382A9C7F20192BAE32025D914A5D4169011F652 850CAC5B5B49F0D1FF579DE5545F4449D0F9F96A919A2CDB8C79F625C1E7FCE7B6E17436 87BD4702202B3C76CAA79BD283521B0E4A32F1AD74BDFA9F56A79EA6C413FA6D5D2896B9 7C513186122F66B953D97DE8C92DF5529E875127395B592A0B6526B9389CDD8E7E1609AF 098F8A74A1A5B9D070F23CFBEA4629F8625ED534F926E3EC3C37FD9D5F3089EE7EC6D3FA 90E89BD45AA66D995F76C2F9D3ED41D336598BE9FB8DE30CF81AFE0C1C315857A6687BD1 EFC9C6A458FE546A3FF46C66E3BB217DDEA4F6110A84593927B738A989EAA683D9E811DD 9B2EB03D9C78AC5837C8ABE7DFC2A64EB6233DC84F6EE7995FD1F6C06D71647B61539E99 C46C94A258FEED2800AEED5B05E76DD685B27487D1161FDDB39A649F510327620819EB55 143D135F3F65E7A788B88255B85C0EEA78900D2B30A3B39F2775BB665F1D1A8482C39AE5 6C19490276759A2EED959E615F8332EBAEA770C4D59FB5DBEFB394233AFDDC81D8467029 6DE3D170111E13827021F1E22CD7692F07A7D1549A3AD13EF3862A5D0F08B752EBCDB3E8 2DD67877B0ACA962FDC2EFA81F6F5DEFCFBD019F6BD72D58539BAC3BFD321CC1A476CD3F 5A5CCD58FFBE6048BB3F413F2441C3A69B4B39AEF560C6AB21F8959174F50A776B91A9AB 9B0E40F1C629BEFA63644FBB9D688CFDC04A8BE5293B8BF23508B1B191B34946C3E4D052 8309C7E7607E0B53A3335FD13F70BDBFA3FFCD9B49CCCF6AE0E3452D678C35D7FC9C9A41 638AE24EC4A9C3AE4B2577D52D7D777E8A595003EC9107C5E2615648EE06DE1D0240E356 F7338AD481A6DA89F778B4C5CE9E3C5A35068BEBB3ABDD850E47330E1B9EA99C1D9AF5A7 AB4365B162968889B0B2F8C807F7038B37453749C24B70AA8F4463A25258FC6EAE18905C 2E5C2540B30B281A00811EB0C5BB4EEAFF11C117E8C1AC62A53A6E6B23D4C6E82097DC36 A30ACA619963EA9D5EB9F797BD406A887A5E6A636252655FBA5F4093CE87F9F842B5D9D4 FD0683E9D9844250336325FFB72093FF7E986796097D3CBAF5EDDAD6B1A08501CBC43467 C514F3E500C70A34557EFE9C1130CF2D281D3E32D33AE32B80B7CF81A4ADFDB5F3B811DB 75D5EC61D5EB7B61DABBB23FD307101704BC11063D97D7E1CFB4E5A948BB8DD7C81A029F 197CBF1EC8B8C8AD59B352B9CBA75144EF7C3D4AC757178AA757F39BFDACA50270664B86 A62F71C40C94D709ECCBA5959665552E7070C6B3856168C55D72A54CBDC6B39FD1F57C27 5BDFAE94ED6418DFFC4CC87DCF234FADB6B515A7DBE41250F96FF8973098EF4C8A5B3543 910BACA42364FA42FC7775240533B3916249F8909EF0F7ACE9E09A3291DF83CF625436D2 18D4F00951D1640253123465A7B30AFF30D73070355B88364832F6662B4170BCA4805692 433E14A7B8B81953EFBA7328A8C26860F1784E662282DCEDEB0CE13449C8F4BC45935EE4 21FB1F5411DE56639C526F7A8CA31C765ACF722BC70F4043C46BDA6A49951763F311DC7F AB5B37A458314B2EAA54815E3AA33BB71F4A94A043C10086B09DC467F9C6D06EDF5BD2A3 D4EBBB18147BB7C8BAEB140F3BAE5278A70458A5B48755BB14017E27A07F4701C7E02153 27C29B291D652FD5F81B1BE3E8098605151935748EEF962A7A5F2BEE54337E64877EE145 B4D5886386348C15EFD68E11C1CC67EFB265EBE14397D11552117B2C81905788A5A7802B 2C91000E48CD630F035979CE9E4CD9941DE466A904797EADB9179F413424E2050EEF6FA1 0352F26DACFB20DDAC986594E8E839C3CE13D4280A79735E2850414DB6AB92D25277D367 F0BF01363E2A2B7D6494704D0911AD230CC8DD921CBC81DF5B7BC4697C78E21ECB8397E1 5B090EE8C98F612903A6F0C7E239E57AC1B73A65AA52372418081C1BC14AB6BD26AF4A5B 26114AB3673DE0BA7CB609B2CF270D6792EA682571BBC6937C3C902F3273976ABE098A1F 5185DB610B08FA23753BD216593601EC25C1D4890ACADA4E5846AF641501A02B3AEAE8A4 556954EB1F90A964DBB1470EBF651F3BBE0595A7B488DCFA1CA436A22EFC4CEA0AEFDD18 C31F64297D286BC2F10C5C92575055294C44D3C556081F5BBC909D074322DFDA6B04E2E5 65FA8ED4515B907F1FDE32217C9AE5450DF954281389CAB0D31757B97EAC1CFCC135DE09 2BE38B78188ECDEB6053C3B3D173AC5CF11EF37CDC4E75CAC8ECCCA1C09A7A0C8C52AA4A 5B7370D9D15DC40F76A49B5F873C3A26D2182034BF154992BDC31F5698D4F997824B197A 1B87E82E20EF2F6D35E9350A89606894096F696E59836D824F0DA76253632012DF81F7BD 6258BC8712C417BE23309C2AB4FB32195C44C50ECAEF4395874CFE9AF38713E129A7D5EE 3A28C2584FD5152BF8E738C180A4844904505161B60879CB9D80EB50703E83BFF854E2A6 B40136C0CA9314859A8683396F0E9DC72AAEF104136539F92C5A9563A2B0EDE7A67D566E BE4EB5252CFE8B225DF54E7B600022A7514E34AA85258412BA2990F1CC92D4AFA5B9C883 26F9C36A58F3F7950719DB6190F6509244B22B2A1FC5797658EF3B44FEA8A3F8410F1B40 C9FE24C03051EBF359F5C4B1802CCFA459B32582B150D17975AAEED5964D0F2B616065F9 BA6DB22EE7C22C22EAC5B21F729D5153CA15EA10172361EB98B70124B93965A0E747FAB1 A593B49A1919C07B2781FF843A4E83CB844AA4128AF7C8D280852AC0745E679A3FFAE0DB 4C7D409F7A97CF41665DD3D4814E80650E980ADF4700495EA4764F66A26B873150E7C7E3 F605F071B793EB2AE7D02420745583058A1708C7154EC9A991B5F3F53EEFBEAB47D07645 F5A6C421B71D392490788B84BBF7D58D21EF39BF8653C1DBE3EB2BD7F616376D891790D4 04FD5EE818E118506DBC2AF86BAD903FC0194C1F45A82677DED4751CB03AAB7DB55B6D2F B8DB96000E68CCA5DC4EB88470DDCC73F3989C656EC41124991408ABCD263585270B651C 764802F928481449A989F3E22B9F0F15197228CC5CBE7DFE971128A1F263050C9C656D32 0FF5FB5D4AE54FF15779E9458F6B95089AF63D74CD06B4826BAB49327D583280A39028A8 2A48FDC421A4A4AC4FA0961A8D17FA54F052787CA58E468594F4D9A8E9790AEFC5865EC8 D266276A8BED4935FFFA61155A660353E73C80500E9A7CA1080EA2390EF01E3F72A07075 ECB1CC16F857CFAAB20FB978EC8E810F0FD8626687501C4663A1BC9F56B7CC1180B4C965 B02EA6A294DA73629856D75B66354777E7995DEDF0C6322AD5E2E3AE152DB40456779029 136EC407E729E23DF7C9AFEAD348B8596B447014CB79C7EEC451EC4EBE3B4450CEA39D30 2ABC6FCF4D594A324B8D14F26C48F65832B24F727D9BF3749D1B80790D577AE338DCAB83 2B45B71E0D69900564926AD8519FB7B08E68E51CA81DD20773A9EFE71FB98FB9C59605E2 A5449716FA73875106C950E68AE28A6738BF9340731309BD6F9838756FC8D8B090F6076A 9ECD915FC30BCD28DBF5991070553009443ABBA490226D3F62BA7BA7EFA0EA20D5C47A4A F4105B8A5B895BB730CEA8984E5E131D3384858B0C453F0F084FAE9D5AFFE23A5CFFD699 F24BF128E19744E0F2F9609DD82BCE4DB56CC5A7F2E9BD80F548B4B906175FC0FC4C03DD CD9028C498F8035C219632C608953848BBA2A336DB4E9721909C187C68AE231C83D6F764 F87919B9529E45F83F1DB76AD3E9E3E26D0EBA23F1DD9E40B49F35D829D5E6DD1DD340D8 73F6A6CE160C2EAB475CC73436E30B13DD79460CFB362B866CE778AD36E0F2B0391C343D 70E2FD2D0E34B469DE711CEE667516C2633E227ED29DC2FE0FB7E38C7F2B4037BAFDA62C CEF790C4B63D427E27A837A91D95B68ECC190C0910F880AB2FE81C6732E4BF799902DDF1 DC43E0902D9CCCB7CD12817CAF263DD8D19DA02FB0123DBE716CF40B24EF4B6F6480BE9D 88F0CFE9D206B42467272E7B814CDD4ED98955615354D077A46933D2EBA86D0C6775771C 3988DA0C065B59C4FAE4F3A01D208F189A5CA46B879AB4AD3D533BF83AA1A42FF2980715 F96FD49FC441784B0BD3C4FE7AF95153ADA7DE7324C7D5134AD42623850B89BCBE4083D5 1E2EEADCF3D53A47AD8EC3A6DC5B726B0294D23037A6BD16B5636E6C6CC7DF921D406761 824AB0553F0981D71904E51B08FE05A0B3D66A0FBB795F1106C5BFA5036C706CFEBC7025 97191F9A86003EF3F5A4B7312B7965DF898F0FB76E5E6B2D56B03B3DFB176303FB7BC4CD 0DB5DA0B175E50122C87C5C396B4A27760677735729DA9617F04D348B0FCAA63025F3DC8 46DFE742B3FB7AC53606DD69E5D40E0659CBDC1A663AC73CF95A66961128A637532AA121 76856081F5FB0DFE26DDF65B971CEA56A260101F022BCFCB12BF182C2CCA53E69BD324D2 C596B442EFC0771E15D5C88001BF5A23414F67E7D0577020C1C1E009207B3263BD04B2D8 D6EFD3830CEF280EECDD477D54C2231BB40796377C5D4152DBA5D64845EE95DDE3E487FA 002E11AED38BC58B90650AC1C3C8D6972857BA7C6C2F277A30B9596AA440A59AC60044BE BAE003D6873AC63915D7058F5ABFFD5D8EE00B1D1E7BE96D232147DF032D23688E762369 7B45223C275A233274CE3420F1825F0432AB7916D470480B4F0DCC22623B69EDA6D7AF6C E7FDDAF3F4AD1C88ECAE26D83022D22ECFEFC7CB20510BD3BA22EE5D59E6CAEFEEF96383 2D8ADF5C4D0F9ACDB17253B0A3581CEDF8B025DAFB2660D990B51E8344BA27C54A9805AE 9F2ADC7F2F22F2F538319EF33C38AFA8C4CC7F1E2BED753F01ABA20C56168D7178BD3BBC B7D30D03E8F70CFDEDBC688FBCD7ABCCF9F47E41AD05D4EC307CDDCE920C5F13F0FE8A77 8AC1E8CB9ACB18C834DBAC33CED3D3FF49ED0F9FAFF9B54BB30418B4084963048610D4FD 3D60281389B9BE4B13D5BAF03E67FC497B1AA9564ADF56A2E813BB871693F8678E31D100 9C27F31BA3696F22D278EA8DEBA92061320E693C4D4C265CBC4172EEEE8A8588CD4F9682 C73EF7C74704DA47D70D46523A1D85BA339163A820C2DFDE3C35370903E603530510723C 4CD607E337C419B6F23408D3221B2ED30DF5F8EA158DB5DF414DE8343DB3527600A905E6 254D793B62DDE18C508C891F87F2CD0CC14D8047B5C18DB05C79043878026F8BF11237B3 3DD383280D6693B0A900F1883E9FC4020A81C102F3DFC285E67C3C1C9CB7525E7FF2AA7A 68C8373F4FB70DF00FE0B36268EDE9ADDA460F8A95BF9B9F25C40576757E992DCDB2DC92 BC1D52790E2F2C8DD36BA784ED38C5A644EA8EE68AF8D405879E0EEB6D9CADB0BB35DCDB B979611667F6F42B240F3715F7334A79C3BC2687052CE30AD6E3FC1FEBE6723CCBD9BDAA 50BF5DB7E2E6D315FF8A280EA8DB8797F9BA13329F368A6BE66E44757A4A7E2D4D744E18 D52191FA5CA567EA9BBEA4DA67091EB3D0ECAB7D384A974B03AC349B8EC4795C5632B406 580740542B58FF8970CDFA417915092032FE9EE1C5C2C751F1AC0CF68E63ACF96FBC56A8 BC83B010745EDED86A795AFAD7B157F01BF0E043647436D1CBAC9B6104886130CCD58B0D B4B900EA10A32A537077CF19292B6C30525D07F79F60F94BF1223526C4C22413E9D0E3AC 3863A35B43631A4BB697AB8121EE930C9D1A6158BC225A9F07E236147FFD7B8B46C8427C 54AC5BAD67D3A85426CE1C355BC69AAA4BF01DBF9573006A98D14D2BEADD804F840DCCAD AB94347FFCD6FF004CA13A7A66D9952C109D13B3DA48C5556B0175DB01F6154D1EEE34E6 31491B9826E56B9E6CF2B351DBE8BA6349BB23E89FA205040E03764ED16C0ED601D61F53 D4407E511A248D86614A2CF69F6967CD0F9000CB5EF1CC16F52276ACC34361A0B822579C CE8ACCBD89DAE3C2434DF0527C416973A356F6628F3AB1145608D10AD6E055F2D0CB04C6 FF709101584EFB8BB364A956B48D9853042E74F163052C11A4087FF2C2728C04A8BABB03 6B8EE1FD4CAE83FA2C5476E784F055CBD2263CD416E75C53A1D254BB56726DA955BC2682 09113B79CC1296D2AB4648E9D8FB7B4CAAEB9C8BD1F505B3FED01BF4F708927B29254770 448BE82DC85DB283B32795791279F31DD953DFDF3E14AF6DAD1C4FA9CDFD5236F1379158 E7F59D207740B2B605527FD6FD107559BB6E55E877BB4471FC0058871486E01BDA4FF8C7 CE9F0DB826DE9F626CD15FA991C44CECCE4BC27DCF5C6FEEAE50DBDA471C6FA6A3AE1ACD 8E8309BD3867A2A4177B1D695A8204DA11BB607CEC2F60ECA8C409FDEACF196462E26A85 63A06D057E2A5E302EE30246B7CEA75AD99BE1640C0949EF318C945F3193F43A3DD36954 90D3246F4AC379E8C2B45514E744C5B442A13A4DD1EF0FADE75174AC98BF797DCC7C2B29 26F3B62A2EFAC41326102BD7F516496993A43924083CB7FD3469E8171E5589899D5E4435 42F47B9B2357A3BDED8920FCDE1E57AF0884C46F364CBCF4DBFB0601A8B69759F79C1963 0993346CA20BEE843F96BC2D19CDE5EF35A07E24DC939501728938EC7EDE65EBA17BC94F 9A2BBE7433852C617BCBEE978BFED24A451ADA6CECE53CB2ED581B5BCF54BC65E1121A36 26F62AAA00BD8E010355B1F9929FD5667E61CC1BBCE47C65978BC677A869D2B5C2551968 8B1173718B853299E098D2656E842B2DB5DECFF57A92B4F1BE5067E3FB65C7A362C138E0 4F8210D1EFC372E15ACCDC8A2D66F3C3763CDFDD4A71C037EF0469FFFCE139782CE2E85C BA5FB6EA1F738BFE46398538C4E6453F90FEF5759531C6F124240C36E873E93685AA26D5 DE4AF287E6DA6C0A62E1F67560C67DE1108FB04BF09D0661D5537DF06D20382A769F4913 6B5A6482AF0EC05487B8735168174A16F0AC755064E3B6703287A42DE3A22DD332BF8827 B535647878E3129B8FC8E94C5241AD15FEE63C9B2DC0F48BFEDC6243F0A417F37A6C6A99 419E1A7DDB2CF5EDB7689AB280325548D4DEE2B3910B41F93E0A457672BD6931AFF87C88 FB4EE4FE6C00C5A861FC22FF1991143352DB9E7432437C377A38BB4119F3E66FCD4A9678 DED8224F21AFB0F7040ABEE50324758ADD95892E0594FAE6E52BE127E881F9383D04EFF4 3B4FFB2C6AFAB61953FE47D8B8A6B57AB91F3647E80F28CA429C2AC745443F2AE7FF1D07 74B0DE66E74F064F71525D942E0B962BB2C64F841896D1A4D347C6E601831F6C1B042935 0745022A07B2FC4472E35F7DF38C3C5666816D8AFC3BE42F6866FBF21F45B6086917DED4 5CB0FAB238B223DCAAECE24B4E91C24C948504E89BD7BED696618495F502FC1B1815467C 7131559A231ABDBC441AAB25FA1FA1329609DCAEAC042243B222FCDD38C48899BD13376D 97B0C2227A8313714F125B644AAA68BC6BFE1D8701545E27714498B6CC951062E98AD490 8F7D2CA88897DA5BEE72B0BDA827CF7E84BCB6FD60CBAB9CFA3131EA80BD5065054EACBA B33130CAC7AAE0272CD46B7D2E3867E937FB4C5F906EE4255BA17F214C635B7D9C49F49A 412D49D32D5A1E2783053E7371A881BE05C5B83051BB908E0386CA185ECE01ED62A4060C 5A3A43ED24E02E876E518EE8764EEF50284BA3F6C8DDBA6D1CDE451F112F8C54F9E07E0D 1485EBF3128BFDF377B0632837FEC9C84B836D9B14424A759CC2F785F1D797355781A903 9D2306FA6C4FE1058BF8BD12870B567466051CC1B4420A908441BF149A4068FC0DA8F14E 9B603B716F59EE277CC025897367A39C3DC8E84DF620E5A3D610A87D57911997FA7F07F0 14CD296876E71C51895E1DA85DBCAE2406DC65886DFA78E6F6FDC37CDEBA999F20109386 E542830CC809EF167D010CDE4C2236E8FD6D00C50C1394000ED5938C564DD38CCDEE25DE D91FBEFB22E0D2C69DAA582A0B7BAD7FE78DBC3DAA9F57FF0DED2E6DC960CF659A81A39B 552692C08507CF9090DADCF9DF04823E58C5F7E7367A9F26081CB44040EA8DF97B91433E 729061BD6B0F341A48DA0E43BA5F66D3BBDD40AAAE6E9B7112257ECB193F200BD79BA0FF B304804BED76FABC5BCE40A52480A8F4C4DF21CAFCC6E91A8819BA62A6A1764BED7170EA 1217BCD19AF24EE5B23653E06921B7794F728C76B4031435427E5A5FC705BC5A58395003 0B5FC4D228074C58887CE829E36CD2C36DD968E28CD5DFDC1A550AAEC826610C8C79B65D 4C6FAA435299FE5BB6A7D0873CB635AACBCD0C4A1ECA8CCA5FF081DA830B88B5F8254624 8C3E0BDFBB80FAE470DE0E1C4E8C073682CB5CA9283C79D8F89F35BC418FC770253C1C4C E999B8B4CE76F31D6012C7F6E4796BC053F31A5E96391D13FB0BA19CE2AC19C295A2EF1F 2584F0DABD0FE0A62FD154345334D6F96047052B038C994589EA2C87C401A0CF9D0FF1CA 1FE07C88130D4D99A04C289C2DDBC629D095619459DC31A156A48E8A045E54452CE95764 AA7E0E61F5A7DEDFE433D5C4E988610D7EA7FDB83B328177D1F2EC3768849D227F7BED81 5DF950AB00F5E1822342F7BC23CFB01F223F3F620677A948D85FD11D7C9C09209A518EC6 BAE77E05D39A2FE289F9ACAE68B5A28DCA9E8AFBD8104D713CCEE25DC7B203103C979D92 00BD17474CF7EC147467B55EEF5B28B2AA449F96A67079E2CBC17D20467FCF7C9EF2D5A9 681C8ABE25269D87481065F0F73E94C9C8D09495080A18D7C11ED22F37D5C7FC05EE9FCB 831108B949270B8DEC7741BDFB550F6156D8C5A2A8E2C18BF85D523585059A22F04FC1EF 703AD5734B366D19049AE417C010309EF9EDDBD4AAA43EC3BC8CC13501AFF994E8C76DD5 6A9F371B974E15D3800FF6C4E6341774C8FC3CF617B7B299A6F9F8ADFA5B9ECE2176BF23 3D27FB74B9E812C02809446873683EB93BE100D0E47B8FE8C81474B291E239E368FFD0FF 73202937222FBDEAF2DF836A0B99C6E08715C6FAE9BEA4250DDCD97C317EEF2BB0F6DAB9 3724FF1689DFFF5EC927E412BFB39852752AE00D9E1676B2CAE6336EFDDFF3DC63942AD9 0E52A4857036C9D490ECC0A15285334FAF3880EE61BA604CA18C0D0310CB830B011B7169 24322EF52F002096E882CF1B4082611C663E16DECC5B5CCD44B9B9B2975241DA9A03D1A1 EDDA209C703DD27A6012514B2F2F28118AAE30557335F4A6E5E5CB90C9C93D5BD7A66DAB 203D7D3C3FBFE030CE056ED929C07E701179A8C5CD1BD3679AC5508CB82CDFE86C04C09A 5DA86FD526E94510DEAAB06160E2139307E217C91350E85A738570E98E6EA5B52709159D 3A0DAA9C972740133F5C4B870C2894E29418BE5658CC2DA58295F40BF8C07A9187A28CAA C84A7F942CA6E4A2E330D53AC7064A2F2F12D54BD32CEDFCFD513880CBCA6691573D32B6 8AEEA0F41669079BC6E4875D4E7E9802F1DA7CEDDACE4380315063273622F432008116D9 689C942E16B60D5CD53F3F68A2DFA511B42B4FAC5488EBD295B0D1F44EE98000D5B4F8AD 8D5DB4B0DA9ECCDD3B7D08D163A676F169E1DC4FC24A744A7AA779561A8BB3C316119045 84D84C7796A1C1C3356D77B517A466F6E10771E2EA284DC39D2E1C5158B9A13A9B5AAA5E EF819E2102D5746BA4DED8186439163EE6F5D552A9E10A6CB47BCC4F3D6266C693E40789 31980B6A59E179F11D0D5393603C550B5A0780EADA88C03A75A29AEC38E8823368404883 0F0CCA10518EA4D1C9A9E4D87A079FB5D360851A507DE6EA5046C1F7B967E07C37F73B8D A96000100B1D7DBD18148B7734B72B4F975993E6A8A7E27CC450B8002D3C4B99CD20222B 4BEE9EF854945AA78969A4C80D4E014C835C2D36FFDDBA698E9B16F7640D9728AAE59112 EBA8D7EE6A05C1A5D366B64D6BE8E8E208CD31017F5A4D11753CDB52A547F44A614594D7 F04E9D809CA22883CECBBAF42B75B70CA2109B12B730FDB324510F909F5361C1A69BEB9E DBA5BBE33C880198E162FEFF039C372290F8426D377A7D093B39B49C0B546A455DDBCEA0 4557FBD330B4D1565F7011DB93A00BF3EAFB89B2144AD93A6EDB40BBB88974801283D64E 81CBD0A038B6E37F29939A17A4099BDC419C2A8509F7F2DEBE36618A4071AD28106F3010 BB27D4027D8FD1F23A00023E8112FEA77E3ED0712F2A88A15ED97896F4AFDBE50A88F7CB 5CC38303C326B4572D20BC90FCAF75877F5C41C8B9ED5F1D061E8C5E5D566BBBA9AAFEAF 95584D2DF01F142DB5EC2A2C0FB861F9731C0ACDF79C9F9D93A54B4C75BEC752CFF4BED9 E359DFD49A0749192E47050F5EFCE4697D18947C58C1B94BA4F15B1EF49E4CD94A256F07 0205CDCF60370BAB84C04E67A2F0C1A4597857C67024F6AF476345F57C9D8FC76138F6ED 3E1DD2C1C495AA1B5A516CDDD46BD55C0B62770A82F69AF7999EE20923F0365C36C1C94A FD64FDB6C9EDE9D80E6CB939A671FA43485BAB6BDA94A32CA42AD827B7A50F3F8A12F122 73CEDE0341CFD081E8225D2E25919D29C65367A3961DF2694796671C2F47815861187ECE 03DE1357012B5BA82986B9F815024CE0E0F1BA4323C91762F015CF459565BA5646729B14 63F717FD3B32D27F8FFCAA5D8FE7AACEED3BB4A7114F879013C321F6EBC6EBEE0E9A28CE D9671D84625C79AB2EFADE2EFD10635C74744E05D3356DC22B7A8C80CAED479BE50DEB2A 166ED5C17EBDC75F45B97B84AFB04941F21F192BCBF4609D5C81047E16FBE5CE466CA6A7 F1DD3B2E4D134E47D86141D7F7DDC52575E877163833345BF082AE2BB86E5FCC8CEC7411 AA2AD5EC3C77CC8B177DDEED3989F4168E6B3EAF77D2A6135EEC5F12BEBD54B32FE2B160 A028C214106F019F01782F4B9946584E6EF0E5EE09203E8B1F9236788D0AB1B07D0380AA 4BBB0078A79B8A84D0084FE88A231EBED806CF41F1D81D159B0A83DEB06C91A359EFF86E 4C6676FD7E2B457C325F6F3A677794E19ED78F0C1BF5F81F7E4E719255BF6CBEEA8D38BD 03755939A546917C261752E0CA57564B0EB92BE239FC93F05A70972C53755A4706EC6FF6 BFEC12133F9DE1F7385236C397E8076278940903F9CC08EEB66E4F98583E120CAE4EF0DA 047D37E88742564176D0CEAED1847076E25E9C74E7EE04816C15FFD4E8B3E3BE0819E39F 1F764FB5B03E88152F748FE30DEE0FC1C24D1B26563CD78988EE706BB70AF4E2689C6992 0A7210F8AD8901BCE7E3AAC004DB79F68BAF7B4FDB383AEC3E435D57E1DDC46F7F8644A3 77073F8C252CCE79F410A6B6DB9FFB9D321D5006D90D3A470B3C4E20F00A3A536726C85C 8EC1B48E5836568CF5524EED035CBF336C13488DAD370B64B77978C023F7F838585F1930 5D52336B6AF27BF8CC3644E2EFFB9368882BB1CB97C3A94A9233746214DBCF9D2701A0C3 BA4D283241616DA486C6A0827EDDAAB93534D2A457F1244CE6571AA4F4B146C3030FA59A 85FA5969B1853CB37B3CA1DC29B41F09A9C00F19B6982976686964C11A1C691B9FF061B5 5EE3D09B2E63EA95A144151A908118CBD41B7D38456175CC2CF2F9585982CFEDD75BE9AD 00A460354B1F2643C404A625E344E34823A3848243A84472B56B5A08AC60672D86519A2E BB4ACB81CECDF146C7581FCB9C212E9496CB2B365155DD41F72C34C78BBDB0CE6DD2FDFF C8D60BA99E0EF106F89E76063E014211EE1AD84BA0523E3FFC12E5FDEEACC330B5541BB5 B43C907C48BBDD86D7D07656922984B34D28A8B731A11CC3E682A2E552786894301F1EB3 3D781E4EA21D071FB8F2A910D70704C93AF48DFCF749FCF973B04A9E7281F474F13273DF 5945F8E1FAABFE0676E06EAAD34C02BC4361DC880D35138CFDD262B50DEC1221FB0AEE9E 45BE9FA94F7EE7CA698D874DBF0AB37586B191E7958B24FBC665C58D4450C0753986C53F CCD9716911F67D8302BEF4A95225EE594A418708943CE971BDB03CAB7380F4E41072DE46 FB81E3F7196368CF10B21162D6841A0B5BEB238AD4C45540F16BF419965F02FDE118F46A EB173301879CDF276B1C20905C0189785A977F7605A079E7DB9FCEBABA86C0FF7F023060 D0BAA73D3DBAC409DF33CCA7D1B90A39D45EE2195217F649D076B9026CE9E788A3915C7C A6185F4C56061039DACA31A4F293655E4854A7B9AC67302031304DE03FBE7FE557A82E71 874E1AAF2B05953B529166E731A178ED19A1BAF4C57E46BEB56F39B828690C35C55D97B3 53ABF9EABE16D4AF023F36289C734A4557E8B7306229 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Makefile0100664000212600000240000000407710330505373014522 0ustar mikeuser# # "$Id: Makefile 1439 2005-10-28 20:32:59Z mike $" # # Makefile for HTMLDOC font files. # # Copyright 1997-2002 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # # # Include common definitions... # include ../Makedefs # # Standard fonts... # FONTS = \ Courier \ Courier-Bold \ Courier-BoldOblique \ Courier-Oblique \ Dingbats \ Helvetica \ Helvetica-Bold \ Helvetica-BoldOblique \ Helvetica-Oblique \ Monospace \ Monospace-Bold \ Monospace-BoldOblique \ Monospace-Oblique \ Sans \ Sans-Bold \ Sans-BoldOblique \ Sans-Oblique \ Serif-Roman \ Serif-Bold \ Serif-BoldOblique \ Serif-Oblique \ Symbol \ Times-Bold \ Times-BoldItalic \ Times-Italic \ Times-Roman # # Make everything... # all: # # Install everything... # install: echo "Installing font files in $(datadir)/htmldoc/fonts..." if [ ! -d $(datadir)/htmldoc/fonts ]; then\ $(MKDIR) $(datadir)/htmldoc/fonts;\ fi for font in $(FONTS); do \ $(CP) $$font.afm $(datadir)/htmldoc/fonts; \ $(CP) $$font.pfa $(datadir)/htmldoc/fonts; \ done $(CHMOD) ugo+r $(datadir)/htmldoc/fonts/* # # Uninstall everything... # uninstall: echo "Uninstalling font files from $(datadir)/htmldoc/fonts..." for font in $(FONTS); do \ $(RM) $(datadir)/htmldoc/fonts/$$font.afm; \ $(RM) $(datadir)/htmldoc/fonts/$$font.pfa; \ done -$(RMDIR) $(datadir)/htmldoc/fonts # # Clean out object and library files... # clean: # # End of "$Id: Makefile 1439 2005-10-28 20:32:59Z mike $". # htmldoc-1.8.27/fonts/Sans-BoldOblique.pfa0100664000212600000240000054571710330505373016670 0ustar mikeuser%!PS-AdobeFont-1.0: Sans-BoldOblique 1.15 %%DocumentSuppliedResources: font Sans-BoldOblique %%Title: Sans-BoldOblique %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:21 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Sans-BoldOblique known{/Sans-BoldOblique findfont dup/UniqueID known{dup /UniqueID get 4133230 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Sans-BoldOblique def /FontBBox {-569 -1034 3216 2152 }readonly def /UniqueID 4133230 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Sans Bold Oblique) readonly def /FamilyName (Sans) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle -11 def /isFixedPitch false def /UnderlinePosition -227 def /UnderlineThickness 258 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 08D9529CB473763852C55540235BA441B121FD240AD1DE5474F5835B84D020FDC5F3A862 2EBD615001964B7C2F2B909C9D5F72DCC87C440A0058C95BE4FA7B6ECDD400871E8EAB83 5F244CE46B7C219C82D748FD39BDF2875D0BE6681D819AA95168765DCCA3AA02A3C4E95D 2B3413755831E9AA0994693103ADD7FAC9B3823F01FCA432CCE53227E6118D0D24198A13 2EEFB96820BE634C5E530071023DB31B83AD82576AA43B31AEB945E356FE33727428053B F37A2075ED9AFA95F2A5801377EF165B5A8CB54D1CB2EFAB3580F1F82768C4A41B4E239A 3A0A559B4209866C7B9AE92F11265CFF74DB1542079C9CC15BC8E6CD0E5F4BCA5C1754F8 E6ED85FBC4144875E7A260BBCB5638644FD724EB8CBD62AC173B1F3FE14C78A6BF359A4D 3D65E68B8F2E44B9B29E4F069B1404728003DBD130D8A3FF3C335D70FA2D2BEEE3F32B3B 23533E04FACA5C9D815D0C1640764A4F98093F85A610C35EA17CFF76991DF2EB7A6D7791 8CE26DD8CA4FB3106C3F504560401901361A3FB5AF2E07A11A50B919E3BFCD7364C6BF1D 1DEB727EF318A437173BD1FD70FBE3D1FDE8863673B423C07ADD9355F90CCF950804354B CC5E93F52046E9240057E4E4C9D652C0ABE8E5278EB68FDE1ABE2566BC6EA37A9C2CF780 D66378225A227AD5E5883E33D06A90E018EA20718350D1FA5F1BBF73469813EDE7353773 5CB2078963912CFE6467A6F2BD221E326F3FF66F0C07EC89E94578713304E0BA516BFB13 F85670FDF793A9F7208D989E847EA9F542539E45DE42FF45B7225E1F218DF950DD0CF835 A70CA827D0E0F0ECA8635B7A1F415666EDADBB98B3B9FE6DE2642407997D7480BE85913F ABBDDBCBD3467DF55EC1DF17203A6A17DB4C9C60F83548CFE6246601D30AE45B03E0DC56 E2E3E9F95868D068CD280CEA630404101120E7C0B9EDFFEB6AF65D6194B266C827CA601E 2F1D7EDAB459E04B68C0C48A6BA7FEF97D1E48DB61EF34854CB037D0CB9CA8E31D7DDF1F 9B2711CB0D58788816E3543C103E392FB6E03252A92953E9EA3160CECFB55FEFC52BDB78 C3EAE57B03455F537A947B9726C85EE912998D42782A185DCAC95EC8B4F4F4FF47779A55 23F5441BA45DC6A6F61403BB59CAD155433C886A6F8151BFB2802453B19A966454CB79F9 CF138EE0922FBDD3D7B9CDE577562233C732E76547C6EACB144DF7715953471FEA922D00 27DCB56F59B5B785D21DDD1BB78B1EAC203B9BB26AB42F8EE01D62CAF0D914B7B532DF66 2D1596548486EC1553A5977DF4AF800F749C5F2947375222A66E2EDBA7ABBB9456269831 1EC048E6182BFB9D0CD2EECEC8BFDF143604E8842580CE2BD9F29DD3B4991A2E528308C2 5A8806C4C5DAFFB8C1ED749552AA98721115586A9ADC136D9717A082DD9BA0FFB3B6141A 1265C0B29A073811D86D61577C5AB61E121F41427600A2D31B83D831C1B71C0F2F3A9921 636B38D31286B63BF4409C5C87DC535244724EC109BECDB134FED56D9580986B476ACEE5 3ADB8684D63672CE37350B2537E97B3859D1AB75212DC4634DE6DBCF6C0DB60C9A2982A0 48AD98EF0E7A4A055E00DDC18ABE53FB78076BBF825B9644754B5A58CC99202EAADC0C74 B2B792794CFB8C30591ADD8A6FB29FD5F2337EAB4F702112050F98A776116C1CF0A96929 C70A3D499FDA1D54FC2DF2A4324671F25DFF5D7C9DA1BE91D345F5942E4509D85690BD25 C7E9F493274C5BDF8CEDD0ECCBEE6121E93CAE52BC00C7679CAACC4EDE99F6940C765ED6 CC178030B25A8C23F65E7B2844A9244EF9876B17C91BD26968950BAA5430530F0F54EBE5 C3FEBD09CE4A05E9FD6FBB5F034C7CA80C12103481143AA4BC8822F5A36E4F713338B3E8 70C322B20BBBB0D3CE9C3C0019FA78A12230A07AEDEE6931E89C46AB8B84B1D38A1FAAF5 D0B3B8F0FC14729330F084FB49E6D87D8F7D9B253A151F05DC257A381217DD5EF601AB3B EA99DC59AECA11C426A59379AC226DF2EAEE7959EE4A50A4846A4BFD652754B34ED97EC0 60FF4CA6506261859C8BD4AF13C41C205750C97DF0A62A0E368E08E1040E86FB0EEB5A50 4A0D72B522673FFD6AA24567E83920BEF8E39C6F194F87927732F01F4217952D6FC7B8ED 9D9960396FD5930C8A44728B7E5C970838AF93A1BF7479F0EC3846EADA63FFB372B1D846 61F7CE846A509D1783E7B04EF407D0F91E4D9763D49FE42346764AEF9B78F48838A764D0 EA70E5E9B533F2D1106D63B329E0859926D8329D6017EACA190A330C95BE32226DEE9D4D 9ABD8C6F851A372E9C270323FEE32748BC29128EBCBF61B74ADCA4D18046CCDF6A58AEB1 B2AADDB2337DBAC1B255CBFB95D2752774F9FAFB48ED58F6858869111B219950D6B6A602 D1B86162870023C31C1FD013E4D2514F21B24FF1AF0505DF50664C93BC69E55EEA7CF8A1 AB13631A049A22AF51A59FAACEDE30DD03193F9DBC0858D72D0DBCA3091E24202599AB70 41F36A8B60829FD3C785FA9EE05AF4BE60E0FE5C1E400263A52B5BB4ADD9409A8D2C07AD 0F2E2B77733D525A28977CDAA0E79BBB9BC7B1D350C01FAF09D06920F606BF47927D41D9 7BDDADB8AF441AC3DD8B30236F7133F753DEF24C9DCF0CFC02FC45CA726840B298547ACD 9A9EB215BC0CBAB7CA4890C00D22E630A742EA49160CC762DA08729C46C85124AB4391DD 586113BB9BB9906F4B9A354CCAC2D70DC0C162D7F8514F2EE0DBF51E0C737C6574064E3A 24CC8DB40285870704BCAA048EA6DDB0D932EEBF877A487B252B5C8AF68EA24D86BBDD2D 86E64DD042581A102069AC27F5BD94D6CDD45575ED3DAC36C335486C7C0032A209D59FFD 3609B2E7D7C7ABF8EF698F2659254C3F85929C3BD1669C92F4D764D4A047DAC168759C2F E3ECFFF49C7EA1CD58823CEF9F536C8763078289ED63BD99FBF4A3888CB6C6ABE4A88ACF F416AC52C4EF8EE86138B37F5F20C9CFFF435DB7BC490055CC01A06F8476C3B1CE32B23D D1E7C2DD0E404F1845D02EEB0475DD046E210EB7426409287C64211A99D7190676C620ED 0D768CBCDFBB6D744909B318F887D1F79489C903E4EA10DDC10B956AD21A368D84EF4C04 DB9ED63FC09648D46F780554A1313D14698D4DE219AE47CACDA2BD7D95D6E3A27E5690C9 AD5F8E5CA29A8ACFD1AE5D26742891CE7A6C281905CA5BA7D51CCAF79B26B8D2622031E9 EF6763146BFD9E3FD61A8E0C2A80431D220BE683E5695FC59DE3FF5AE60130D7722492F2 EE11F7AE0C4F04052FA64757919A5A8CF382F3903BF5A0DA9FB8F5F7BE2661536A18DC00 8BCE37CF6AFAFDC4DFA697683ECBD25A6B5B64F407F10F86E3A05836113F20974E4065C4 CA94F7820CF610A4370284CF00ABFEBABB0DA057E22423B579663A1CE30CF98B67B92D62 7BD78A5B87248C55629A56B70E528CF49E043EE8E67BF97B17BFCF416BF57612FDCB40B9 F79C39E456A44D62B5CA9B0ADCF406212B5377CB0B06AC4CBD1A732DDCA4AC26C819D145 129CFD0784F79FB37436BE7550F9A28ECD80D45C3A3176289E92BB5F0B008D86C4665F47 CDE5D1DFE6B61AE9DF01262ED080121E2154E789B42E02ADF57A354AE67F7465EB588F1D E5338FF21CD7DC647AFCF723A8F721B067D08E7479E02B6676AF34020C7C3C373156E4DE C0D6CC9AB11AC798BC20E83C352AD6CAFCF191C5A7779D4667F95F5119B78822A55E3E68 4203B06088418FB0AA8E324EF5C16EECE5A26B6888656A318819428DD6C5811B4107F57A D0ABD4E2D788D894293707C9623978C39E8FCEA819568EE10E4B3EEB5A6A85EAFA184857 39248CC6AC6F19E25E50DB3D00F80D126DCA9AAF987604D9645170F595E5A38A8C2B2F2A 8D118EDB950CD2CFE021E5076A9203FFADE8559A3CFC7BB8EF62513E0B6F2A90442F6405 616EC47463E1D940CBBBF2D2C434488C690032B8CC5587CEFC191717F44E71597441883C DA89F23A48C91C903CEFFBFD6C0D7CBEE9B225D55CCF60BC6E4B32EA80A2323197127541 ECCDF43ADB4E5D6BC03B12A2BF9C3ACA07A3EC44E84BC2C557C9A43DFDEA00B28D050B07 519E47EF155CE26F7D7011F615E664665A8DCC3A02D3D4C015FD0D0C1948BA567537BDB9 4D5D8946BA532854226096805C3AB794FF1882487E1B9B8C9999B9513491489780194E61 173C4F2225822CAC74C7B70A2602BBD6EDEE6FD11927C9FD7CD5837D8F9ADAC7546752CB 67AF6CF30AD891BBB49AF998F15D522BD15FB90195E7C73B9F3157D65B883A1D4C53B645 D982E06683AADC0AF0D9591C4D8F764CE70966E85C29D5CDB045E9029BEE2C75015482AB 741837DEBC3366934D6FB5C983137FB2E2F1290F007B548A2288E4EF620EDA831DE92138 E4B5F1215363B4BC7B159E0EBB54F020B0D4909B8EF13F8A36E34582D84F6D989E1571A9 7AACFD40FC858EF929DCA1B51F41A20392EDDD0787C8DB7A781592A7D374DB22BDF701E8 F0BDEDDC0CE8080F7CC2DEE26B0F0261809E2D84AA046397839038CCCD1CAEC01523AA93 02E46F8C42DAE8BFC526CE60630DB71C86729133845353C5FA87A31F3D1148091D27E4C2 9265188656BD145FE77CD0D3D4BE579E704D611D04A9EF4275B2E15630175ABEFEC9F2D4 EB43519EB0AB995F061EDEE4986F584AFFA856565F5AEB023C3B428D055AA5629017420E 616BE63CD263C1F8FB871BA9CBB7B525C6F5F8BDD936A4F15EE049B40033205CD0F15405 202F58B1AD2830478D101A8FB6695FB2866BE55935F62931EB1AC9E2D4926B32D6264FBB 4ECD5881A26276DD230035D0119F5B8790914EAD9F802F08EF99C0357A5E76E29140785D E731CF6C091DEE5EFECC8A6FBFE6D7C8358A8F642CF8880773E65A00C0596B037CC1AE37 5279788A356EE5255BB9BB8AEE35A1524F3E2884733ED97F7DB88091A7847CE63182318D 2178412D1E51D9E8C7381663C1F040D3610510AFB25B5F6CEAF3BB7E2E628108FB5718A6 92633D2C77E89E45720BA5CB0A8774A50D0623FCAF44517054CDEF88DB76967C5BBCF2C3 1AEA9D19FABD53C94EB20A0D420364AA6AF1ED7EE3CDE05A009B7F14309235CE8F0279D7 1B0F45C93521C7AA9EA143392B690605AA2A5F075D57D8FE53BCA34719E77C87443648A5 71FD7F8A404E017A9718A94C0281C1A37F8AB0D044DC2F960A760A2F31C354ED7028CEB2 9684B7FDF5C9B939C4F135B2FEAC80C3EF93D6FE95F0B49C994062EA8D6949F6F9742528 B4FDF9E42A5F6F81FD00146F3A2C060DC8CB5ED71DCA3AEA4A7E66A5E3B1058E40E8167D D8014374EC355B7C4944789A827A9F3B9CA95EBFC633DBB90AA36292FC31A2CA64BDC73A D1A8116E54010CBA9E3D4D08DE49687772A509B3658855C4931BD2B406591EA993CC5501 57F0AFD9EBAB73776E7B236E72806C71529E0E3B7D01AF32397AFB60CC09A4F590C8FB00 026E9757D37A49FECEAD3FAD9440BF89563A83CD170187978283F37D73D09C33F9A29BE0 B146F324B574428C28FF79D849AAF4284FD954783CF27E9B16F45A7077C6A6DCAA4D2204 B474A4699B4AD6EB23FFEE62C0A207CB0116687C676A5A8684DAC4BF043564CDD2050E48 DBFBEDF5192124811BCEE18E8D2B0ECF90B1CBB7CA2894B801E9139895F96C2E98C33474 07A534670301345BAA09A61B58289DF82D2FA4468424D258123FE015BBCAF4EF54EC2C00 78E681998AFF297BE6D0DA748023EAA3BF089CD5BBB58A689E3F10736FACA7F6BF469D7F DDCFCF8587ED8CE066A8E2F3A6190B80C7D12C59058630EFBB192572BC282292263515E0 2404402A46034659E742FE4B22C722EB944EF3FCF4A5E9840A524004A4CB7F821D5E0601 D8F284D1F311520B1D8B624C5A4BFEB432472DF017A89ED504CEC1D0F18B4599C813E271 07762C75BB569786B59E67F493A70EAD38531926E1547C885BF8242B8944F42F4BB6C22E 8E20E6E21D27D68B99A1F6D077007ACB3F05A40FD187FE04B6E624BA5709B8D0A2DA5F3A F2D6E55B7D7DCE0BF265C74631CBA45A51D458CD18F6523CF7B634FF2B298B5723B2F32A 0FA1692EDCBBBF02491D28C9FED96F0F651AE574C97818B230D6EBE3B9D75D6F777EB3A0 0E0809A23EC4A13A214ED066D0B4FFADC39EAE5E85FA1AE6689464F1B2587822EB42CEDC 953674413F5D6A833DE7A4C1005184E44289DBEA9FC8AFEC1FF6ACD87A50F04253DED4E4 92C3C46C5FC40BB41576CD8E521ED33D19F74E6BB637081F289915A9117E75910730F2EC 2AFD021101A2C15B2EBD111094233238D51114037540E191088CD37AF944B0508848F037 7944104F55167A9FCE857205ED43CF5728831437E7AB82CACB3D2E2CA4640D6DE458CA61 C89CE6AF1B4996C2A1638B3506FD4770918757F7CADD7595F417492DD70986B641B57DFE 8B3E35B5966F67B7ADD79623962FB0309E6E84391ADE35AA19EA66C6D8463D5F5D81FF14 B9927E32700B59854DF854D5E60B1FA3DAAE7433BC96EF187E24D734D2C95EB78533721B CB12575995E19AA520C3046F4189D40F70939103542936E369E62C67FC9FE6BDE180DE7B CAA974D9D6687B6B48F9BA30D0C36E3FB777B88D0C9F1BB45F338C736716D2D33C99FF89 BCA560579F6436CF5492E8F548722CB0A1884D96D6F015804701C5F03B2A89CFA57AEE88 03C32867D007AE3CCDEBD134CC7D450DABA69D8C6294CE8752E40007CAB50B20132C6988 10202D04A9E5F537CB7247C6E75390839E704FCB8EFEE23FD78AAA946407495A295C0B9B 43DCBC953B09B610247879B318BAF1595516F5F814FDDB3FB39F6FC77FD16EA8078A27BE 09EEFA2141D5576E932A739821CEC575C1B0FC5A344AA54594647D9C62483F5722B7CED9 EA8F50A6713D4D0616EEEE3C7A062173E939BD9FEECC2CB5C6955C83906C1628B9D32308 E18B84DE7ABFBA623B59103C8CDAB0929C106FFCE5738BE8FA774D2C97232710AA4E2BF8 142E14A134B8873D44F4F1E414D86F8403547445ED74C55AE0E67705CB77D5FC4526A7D6 3B7E1B01682766A69EF6B97655AE3FAD7E5DAB6A8599F5F82630B1248C4A8A7588855C26 4629182E2F840CA86495FD57AA0F10B80FB6F4E4F6E7097ABBEE3EE65123622E321C987E 67CD8FEB8BC932E0A9AA0C05A1E14436A9CE62EAD917F2185D54F39892553D012754A799 7D6A3ECDFD85C4996EFF9C950DD7CE08B517CE2256E60C413CAD6E7A311F74BDCFED273C A4379155EE925B6BC8A9825299091E842AF740BD79E7FA6513D8365ACD93F56E03443A03 EAC007E53832F713CDD6AA7ECE9CF14D4A93E97F4A40E34D3E4DF567CC46A936475F9541 32A9A5BD155B7EE80DC7FCA6F427F0FB6D3C9930731C846141FC6E992F17C65752C45EE8 EE6DCD5D8665E081B14025D80330B710103904811AE5C7B9D4047B82898E01228F3224DC A8E77A666EA043327AA75F36935D39A565D206256467564684DAD2AC27A5FA5E62D919B9 432F1A6B592300826A95175F28FAAF5CB6C23791D2E87DA97E124C8B3A58A0FB999773D4 FB7D7434B3163B6693B1FF6A4780471871DC145DEC438C0B8B2C05A764071CA8D84DE7FA 69C937D49901FABE3811341FC92CB44CB5B945731C2F3676A6D637A543047CB531BDBE2E FDB63DE146ED9EFB7432971F07CD2F9DAB3B9D051C3283E9092A4AA64D5DEBAD63EA1B22 DF1D16F2713A4CC1DE9D20A7701069FE0DA7A20A90F226C6916E8B65FB3320E1DB30BF38 9BE0115AF91F9566BE567E0BEEB62932BAE94B9A47F9315930F8B7F6D85FB2B4E4CE3C79 2AC2FCF0AAD263D85C40E93AD0AF5DB66F64B88211E260A5524656A9A201D20B73304840 39FD5F03889726CC1AA7794D7B6E28C435850FFA946B641049623A927F50A37AA004E9D1 6F18D55E0771E6270A432BF9A903D88887EB5EB3FE52B6B692C60F89B003D7DB95EF4129 15DE0B934DBC586BB072AB2E382E0AEE7C7596AF2867EE981B1FF74C893ECC8080A1A922 AB76894372B84D03D1BC12E41C9781BB9F609AA25B30F951B1FDCC5882044BB5014B2ED3 D6F15F81DFD2B70EAE04FE7383541336E204A3937B93B5508CDD288078AD0194A109026D 51F307DF322A5ABC13013ECE07232BBD3701438921B72245BB1495AAC1668560D8379C8F 18469C7F7D8B46A22BC54F9D7BA5ECE6AAEC8311617401EFFECCED75CAE8D21CE0B3C7A8 99CE8EC8058ED165A92319581CD2C8C1AC955768BD46AEFFD1D77E24B660C8B3BB45E56E 0710D28BF894334254229A22813C3DF9529FEBDA2392BE423CE318D9A0B75C53A9D3C486 16805FD79D834866263732767D9B4F0E16B75BCD417B500E5A6B5F0AAA07015D143D1F00 12BB496CEF2CEFE67B9F4E7211FAA1D30E4ABD2A083C27F8FD79644CAA6048196B6B9C75 33218A24180220B76C6E37F4D54ADC329DDE6F99F5DE0D4E45D22146E2E8D6A68251387C 02DC4F30CD3B6BAC9691F024A84E84B7B48B91B5CF048246F53B4EC14DD17149067F666C AF5D399DFFA987BD4C8338A7D806BBBB8E1656F583DEE08D65B3B2EB1902F879F1361AF8 C3D5B23C9A0C67186CCAB089C736481768362F6CA46E40E73A651BBAAEF5C599AE98E1BC 9CC52D8557419D233F7A10F49B4CE3662957D458FE8590890471B05F3CD00C60368F757D 5437CD0D9F7EF672F1D1487BD446AD632E5ACB867ED855517690D51A09BEFCD3F3E340E8 2B07D49042A3AF17808D1F83747FDE8C3E6292A3D53B6C437E67914D3CF9F916F9153955 64C0F83B560FFFA6C02FDDADE3394C1B39B46FB21E818FF6C8F048B5FD390C45555851A9 3027795166084E3E40EE4C971556306962A76FF436CF2AE92664C64589DC7E69D0EC7F17 31FC602FB3A74CA4A49C3A11B415A0BB59ACD810507387C909DE790E7E741D484F4471A8 4BEA9020B98ACA5AB4E176EA5A9A64E49C2BF3E99554C82A29BA32380594F1CA456C4FCC 81CC49B35F71D117ED82136648F704024B774F363D65EAA09EB41389879F0F32763E76C4 0DBDF911BE6792EC42F4E342E078207E1BFB5AB4579C4036C44B6AEE0F3896A254B126E2 626218E222C04904C30D087FDDB3A63D297939E8739E99247C1D619B7DF51AB0F430423F 5AF733AAADB82B4A505D37A28A8672215697392B2A05AC5DD3890F8F9CA3B21E317BB152 DED7007BA1C20DA36C2BFF3793A9389CF8C79AC2A4475AE4AECCAAF91BF62A269B3AD6AB 282FF6BAA78A8D1D466923FF8EB1F26250585C9FE033CDF3BE5DCB3526D336A3D65B2F34 911722D69DBA98E383E959A12F6BEFA5DB7C9E4EA7EA95FB7DE6E4F9B0466737F0ABCE2B 8C14FFA972C7AC934B43ABA2138999899121A6481AC54A45A1E5D5FC1687EBA7814BF9F5 60A1647C8C839558CD6F88ED0C063A3886FD1B63E53AE4AB0AB841C68C9BD374BEBD9860 D4061BE43050E9A497CC56E17D01F0413547027E23CD6891C676E7AB96FD66089D47F6B6 AA4D20BC0B153F7096595C3A75A17DAEBABE89E472F93FF4F03D79F258AB6D29E212CFB8 8FA3E0AA8B7E08F650B723EE3CCCDEDBE1D073D9E0E595E653576EAD6D675E2D88836F7E 3991C313FE0028BDA42D39982773120E578B4FA4E36C6C86447488BBF8673D825F9EB38B 6CA337340B1437A06BE509C99883AA5D858AD32267D46C4B2679748AB29286555839653F 1CADF16303E5C7474ACE8832C27EB1855B9E036D853D8B81E625DD5937F04BF24EC6B1E7 01B27FFF3871905D0C246FA10B154BB6B406438E555ADA213C9D3A6DF9AB49D996EDFDFB D1890022475D9A0A626272FEAFFBEAFE1925AEB8183793B80EE38452375540430A2B2261 EBD98421B1B7041529862B451B0DA7715B9612FD8BB104DA63C93CFA3C4CE78C045796F0 A61AFCA1A446161225559B3128BD91F00288E4A2A4851435969996A39F0AC8432FBF0977 2331D4C2B34A084B5770B489CE321594CD8C64D1CE5FD93DF54D10A0DF172E1A7E07EC6E F940DDB32554A3D56379D07E40435648689A758FC35F4FCB2F9CBF6CD228B9F779F7CC6C 7008543248C9BD2FCAD02FECD635D44AC5DEA5BF38EDEF0986D3CA1713AB30A8D163DDC2 3621FF3E74774D62524CD4D68B22908EB6F77E962ECBC466E710A11197A26FD792D48433 5077221636E7027B67F86EC47F4590FA3672027C9EB9AAADB2E51D11FEB59B435F3A466A 37B692B2E69757D3566122E25DD51E045924E18F0724A9E8251DFE2B9E871A71AF6CA252 56F63D553C7C7CB92B8194EFDFBC47A6CE3E22ABFE1FAAD4CB23CB768EDF04DBF511A014 81853AC7B461A44DDC36CB66C0F40D46FFD5B2E65600C68161263CBF84A4AC8CAA5D63A0 95055926798DD38494621343448D2E4DBC4361768F42A601910D8E23F6913DE1A829B049 C2076762E9881CA191D3465C5CA2D45C688CAB81EB9BB4116C946EFC7BEC2C7FAD833665 EC1F8C05E9E629D8BAD7D004F89B958183BEC7EE7E0389A2974E4BF8988F020F8923E4C0 120D748BDA541B00C46286904DD14BDB447A3FE6E0715A60E88548BB1CB4FD796AAE3BA9 DCB0FB73EE06AC846D635B2707ED19BC44F77CCE5F34400618EBA89800520D2F8FE17A64 A883898E26D4ACA995FC7F1C0511AAA6192D0969BEB61A0B376D43D2ED8A86FC7E2E0A6D BB045F315C040775CB8FB131CD5EF6391125AAA6FDCB5EA9D5FAA3559370E3F6156A09B3 75920FF430A9DC689FA94BCCD47176F913F00EF7841450799512C456C10BBF8F933AAF42 CFB9948B58AD7EFDBAF1B60DEF87379BE158F022B77307A8F7FC43BFC50F0B01F952F50F 3AF4F8B88D92AC824BB022CF4297D593C1A4CA7B2C5E9653732C45748A7CFF28AA4CAE1F 0CC383F98D3991EFDC3D376D1EDEC208AABCD78AFA221FD388B6714264B69D74EDA698B2 E20524C53E0C63E85E5DE5AB1FF6AEE8318FEE1FF201AF693317C39DC71303A3FA394A1C EDE648576B4444D403458FF43F0710624E643C085A9CC7C8D3E02B77E92C0F0EE1B8541A F7FBDF3C037880F32FAA6CD652FA3AE7E0A5CAD252F2E99159E32A7EEBA37210CDD072A2 A0ED51916E7A3FBA3D5E1BE3BC4FC702C5ECDE67B40BE49B1866F91F6C04A46E40B87010 B45704735427B2A00D858712E1C947BA3AF1CB7F29B234D8771B17CF58006276A90F9EB0 0169A2297896E42772AE3FC8EA3E815FD253593E7CEF97C3752B1586E343099AAB4ABD22 A96C4D5E4CF433FEAA9ED2954B7A9DF5CF66E7402571FA44C3B830553058E966E72E89AC 7442067BE76EA9B660A6BB7D698433192C9DC5B3632662E703A2EE589C8F80468CABC041 3F67820481132A7C3E3B48C936C5FE818188706E43F47498D8A2A5639BFB91DCDBF9B1C4 0F4D5AD0A8F9966FBED68D938F78115FF07D84D1216B688A03479C8697D06A5246DF00F6 9F7F7AAFD946F2323E2E6E456CD9CA38E6820E4F97376E264BDE04B027F4811E060A1B21 3C78425D10E1C8DD91E5EEC0D890C0BD599CD71974C3500BAC63B7F7B2DE4A2AFA57C795 B538BFFC80E40269FD5D3C405F98035215E6EC42F3EBB3440E2E6CF379C4B92A3B2D14EA 7478F90F3D3D98928C54CEE73B774181F5287F0D90ED3925329C2FBAF40912363017C462 2243CE98713D2B3991CF17F5DE6C20FFD3642026E8F1A7773A3DA406D8D1A202A3A0DB1B 68D8158C3AEB69EC015C67457A7A7AF40CE63A3ACAC1E5F974F2F1AA2B7E64E3B85605D5 CF0E43115E246DDE702D60DEA3E87678765AE83310F1BC4201710A64F2AC3B06C1B4D706 8D68ACE8FA8EA618163D2268734245C62D9A5B3563403D6EDC135037AA207EA8390B8D48 EFF0C2386883DE4FDBD8A4F43B8C4BB5D284AACE02DECFD4256A367CE7DF9B72631183E9 8F2AA4840E977F775DCA56BB7FA8654E58D15345C7DECF1C28BD65812169FF020EA917FF 519834E7390BA7B3A6DF369AEA2386CEEE70502D77C4EBB4B21B55CD9D8DBA7422FDF562 ED46649EA7A6AF3C2927CC8FE09DB849CB9EBA6C0AE701E811E0CA00036F6872AF79FBE6 887F28225DBE77635E9427D3C924672E418BB12CFD99555E34589AA6C6753B6AC1218C55 773CA3C6DB6F1742874F4AE519A4DF827F7A414557C4E1D8CAE8DF9FCBDB8AF011DB3280 DA3C817EBDF923FD1DEFABC25D4EC87C749738623409DBA1DB5E57BE2EE991EAB2068B7F 02FA8221611E8CE0F5FEAEDAA325BC892127C29328ECF8CF9C380424CE09FA03620CA54F 22A28CBD67182CDF8F774241A5BC14939D2D6B25D751CA661487813A459A6BA04C6B37FE 8E4F7E8372FEC1DAB83116F758E07492648529FF7ABBFF2A12FDAEBD8C634E643C0DA3FD B591DB4ADBADFA21A167ED3492C90DAB639B88338C583F0C7B17A7C24EB08DE9C76AD857 904C747B343EAAD2F2082A3D75E7DED165F7935B2535706EC16CF05B3C57B2A47AE514C4 1BCB14A07EF350EFF46FCE1FF3E7AAC4CEA813FD9D5BC5D042E42DB91C1FBE6631E535D3 B42871692A3B4B9C1377B1715311C344824FADCEBC88FCEE52E2C0AB0B598419399627D9 8DA37331AA2A1BC67498D5DB4E5534B5454A047B3B7304F3254E39EC3C29354F94D8A6D5 DEEB0B77E2780B866270B6C53005F136FEA6B08E296E612DA4559D96DEA11D70EE733E21 C98CADB350E8DC9A2E0272847E222A74FA7BA3485A12AA99E0BCB8D69487FB9AB35022AC FF2FF631C05E22BC9E5375FD4FFB3540448715CC39D22F35B846F4BA8AEC4F9CD9CE9A32 EAD86E03614C47E3F8A1DAD14FEEE8B0C984023CB55D958AFE43E42D0475E54F121A58EB FAEC78A87AA8BCB09BDC6F189940043DEE6EA208DAA4AF1F3309CC34151D88919872B0C5 CCBC9AC221EFEA2C2A5A9DC71C2513E04445EA97D5BAF99CECACEAF139EE9AFCE9695126 E09A90EF6C92AC9D03332973072DC9B0FB4592EEF6A5E31CE3B186DC336EB42C751A12CD EBA1DD688EF6A13B9D02E1F0B52519D07A63D6A0F3D3EE2BE0CB45A09C23EB2C150A0024 965DD74BDFDC62699CAF568F78459B73C80A99B1AF8A2092A3B460721292123D735893CD 1C1AE944B9FAE0F033590E2849DB93781F9DFDFAEE389BE2BECB71FB663EF1342D4841BD 5A41818644EFD9D165EF393168D9267B31131AA5848018BC742D8638EFFA6D3BF3E5C038 CCF72383F8EFD092ACFA463F7626C76B6E43A4F99FCECF6F66D7E520FFDFFFF5285E995D ED25C9DB07520D2AFC7CCA3FD4E9C751DD80742E20B38CB301BF6E853DB65054535EE6C0 FD712BDAF48BE1C7F4AA5658587574A54585F8FCDDA6025F607DBC97582C2FFD95E264AF 00E94476BD49220640FA9D3DE42731EFF121887BAFDE1CBE664513D7211B62D5AC64860A 1A91C2C862FFB1321F57E83E04C5801EF5E85CC454D4AFE8C722AA16ED54FE8F1D16E720 4D2B3CC0BB9C15E03A8338FF0691847E27B334EACB5DB27FD9434B0012925E66227BEB76 7A0C18286FABDCBD5C4024BA933517AD2C420376D20A8CEABEC20D313B3966A90B54BEC1 BE55608FF4F77000E4BA07827ECFFE8AB4E92B00BD91C0A2A8025DDEAF5DF7DBB055A5FD 323C652C11320F3C3145B0795A20145BAA67685AE056F2C64BF5B805E91032FA898B3B14 030A98887C7A576C4DC31CF48FF796F736A958C4DE58DBE03494603AE9443857E84FDED6 65FEF8EBC37404262C67C87E06E4E8DA77C210187FADC957C3111169F6723DDA594BBAEA 72E344886CD54B74DFD563034D2386F91A151CCE92740FD5FC2D689D5C4E18030A951AD6 98B28E1C213453109989D2269C874CB5387A67E12ACA17C29A3D7F74875E4954C72D5E38 8C82C209A1E2F4EF2C5750E5FD2A2282313B5B7DED59BE0968A597B70F7EA2AB2481F973 575C286DBD36B9C0BC06FE312A1813EBF831D3A04551E1CB73BBFE8E3672A65D5F859370 8F834E81F756D7E81DE4F53998823327A2AE1EA147D31A4A8CBF6F21018908D4C6DD6558 8912A505EE530BD9F25274892F1C78FE5E569DD16000709E1769A6B9F3714A8E251CB38C F141A26B0A3CC508A85D279AE8C66668262C064DC42F2A1DD740FAAE0D024C5FC4813976 00632A3CDF805E3510278A9EDE69A700D228A200F34F4348D401DF36C94B80B7CEC4A276 088894A8B945D3805A4714A7A7B626D3ADC159C5E9453DB705614B883027B6E5DA619D43 F57D6CD9EC784992B35F141D0714FCB3D5228CB72DB3756FEA01FC1AF5C4C7761B92D82E 3D0F383E427C43EC74A35106103ACD048BAEE182C8346365E7A6D98BB6CC19C545F26F38 956D7DFF411C9BB58547B2F4A5DBE58EB974C893B46749D27A395304F8DEDAB967D304DB 3CE0498BF114AFBB87629E94E4A7F7B56DD61EC8B7B18CBD514D67E2982391D7468573F1 D60908A596997CC7A02D3D1F59D39EC3A0303FF097A29EEEE1C2E77EE33EF6248A356A64 8BD7B1F4B5389FF3F03A09E52B31C0663D41F2A5493DC2B7765D00B580F8179B558A573A B2FF2DC9BB2402581F23062D0DDB19AAC7816E019461D05F878C1E0943B4DFA20C354DE5 43586AC01DB824F18A5552CEC458AA42FD106B5268FE71F81ABBF77C5FFDF7206ACB98A6 D71CCE79C4BDE7FF0A26D0491107BE3AB53D3D88049145711B7A21A0BC573D942D0D29A5 EBAEE005A72C063A82F5200086D21C097C5A15542C3F8C2EF71BC483B57366CA8B222239 B68BB47AFEE99968F890533FE18EF2475ECABFC005ADB4854EEF677C521321FB2C379CC9 5DFD9C20D60AA6E64EE16E057E614261CFE2BD3EAD7D1781AF23C64E2C6A8DF7752B4E9E 00F1D2C8CDA57AB40B1194B3962F311916A54D6332B2A1E92A9E6ED4B2F07D148B9173F7 39B098D95A23722AEB44E268F6346A2349E28FFCC93E301A4ACE653647271CB3A2F142A1 91A9172CA63C0173E41ACAFC180EA5C55BE0090186714BCD3F16F8BCB5036DD8754D0BEA 3BB9D02F3180E51F7E0932337878AFC3172F79922B72471650C900DCC09EE909EE663E96 EC3DE5879699F03290D79920777310234F74AC0E8DDB75636ACCC18E6CE3078BFDAD52A4 565AB5BA2ABBA35F7C395A16D5325CE0E97A8BC118C97E1BC1A48F3C3CED1B10A5C5913E F6F8967DA56995FA73CDFB6729B1CB0DA40FC02EB8ED64D5E6742F313458394DDBBCFBC4 D99D38839D81AA343072E905A762083233D0A8320E0E580A3525420C85AA076D04EE9FF5 A33DC7E467917BDA9F30451D643D526693A9F097D6D36488B747CF9884085A6938DD424B CDD9D78D1EE8B022858B6A5A9F9CD7CF2651DCA4A666FBA860BDEC7C013D270226D62D36 FB44A75EBF1E9740C7D772D3DFEE944389FFC8EF1B1086FDE0BF4E0112FA4DBE2CE70F8E 46FA03ACACE75DC9361A2E5DBF7D2EDEDA4810636CF034BBAE9C479F30D344AAECFA760A ABA7CE794093FD6984D5FFF573117832902DC27E559A20E57D61218DE4801DCBDD332E6B 851972A0647E34134FF63B7B0E9DC148AEEFC6ED5EF7F46E019E2514037F1ACCF74010A9 613C036C0AD618E79A34FF74356D2E02D6C74F777040317CF00792B345E6F49C96365A43 DBACCE28F81432AE510C81BF35BB37E03FFA2057DD425992973A4380CDC545A8C617E159 F0882DE14AA33F400B3AC5B25C7B85F431F9E61452209059E0F0DB31774822DA2CF4D300 AE183043EEAD8C33B53613974F6067774D436CAF1FC9EB1A12D1402F388F05378D544355 A7A02839AB714DE6C6DF72B814353750CCB8441489237E20983040A3CEC08C608C97088C E10EABBC3955798C1A8D0050082F90E96AD1D4CB033BA491A21A606B5D80A2C726007DA3 905E3402649376B6F3570338A8CD73B2928C322436EF30BF90E8FE69468E5F286865F76D 4B1B2406D36FF46AB7455D32CC8C9EAC5F1C2575C7312B2B1C287C715E7B89B0F52525CB 90BBA694552766334BAC8DCC46F644A70670EB853123F3FDFF5405696EE136B1A78D07EA BF19848E0A1D544AA40E3DBBB795734ED7607A149EF1AD9B2480F3F35A576012E9406F2D D4BC7BC1C23A5F2D849FFE1FFC8F3301225896D1BCF2E0DCB57620F58F8298AAA89688DE 73F772CE5EEB5D279004DF68EDA2D94FCEA92B90A86E7CBB79D323AB249633F132DF22D1 5ECD35A9042F17ED8D9F6F3535B7A47795D53306C6E877BA27014B3D6A82B5A9DF8F8CAE F40FAEAB1809B732905A24985DAA6AB5F809CC56A6681908EC556A8C6711CA6CF0B64389 9B7600ADA19FEEB19E3508E57D678C16FE3AC9DF31523F6DBDC9320D7A762DBC92965326 3551F0746CFD7AF2862FDC26DBCAE9C35BD085FCCB076993CEE909D07717933EFE29C29A 71FD8CE797C437B87D554CFBC531EC2680482BAD621C9E5F9A5A2E56D6A124E16802BE64 75A6EFA981577F24738DF089F5B72FD63483C6C0FAE172491D4356E64C2BA024036485B3 3977E2C2B922033E87A129A012EEFB956948B40EC4D423FB73E82AAD762857B8A83E4411 B2C3C0AE36D6B136DF118ECFB3816B27347B06576393F83BC7D9AD72EF93458FCB3ADA7D 70F55427DC7179A30EF4E211052CDA2B8A781549BC31987CF39060CE358B8973D6B3F368 431D169EC964C1A1F650648942F28AE9B91F47194E94D2CC747FD357630F650B27D69503 557FA493462F568EF3EB4478BA96417E7B9646E2F36E0CD1D7FEB6F95C245CE86500F096 67C5A276A283A732F11D10BF75BD7B1207C4C4BD1AAF20250A406E33D1052CCADF5C8750 4E110E39A71DA6DE1FBDB4898B2E63604D6BA7FF34D13BB16C72C88CB7253FABB60E1805 F78CFED9E4840D2AE6C0214D8D9F62622B036BFD21EAD72BDF2CCE7801C5565D55157A43 E43718CF7324024F28203BA7E9CB52AE9A37F25676C5D08ABE4C5AC4C34E7986CC588844 205532F90E378D32C6CF9B5E24F90EFB3CABE1C7121D55D757DB71205100A721A1189F44 BC93FB0D3D069C4437B6D7213B8609550186F4FBD7A0E2F095127D9BFEE057EFFE68B3CA 710AFACC0C61EDAA55AAE89F8A14E4CB60E8B73C84F7AB022B68F7D25741F0A103908953 6AD485F62E9B47521E20174EF0943E98D130665EB0AAA8AB8EF31F0F5639D34129B54C8B 79ACC3948BBCDF244491B9BFF4F7B103A4E373B6B7C69F128090BA4D9357B058E8F2CF16 06F937F3353E1CC9343E855C23BD29CF557A296AF5953D573106CC223C73A2E00117487F EF934DF28901381C7969A1582E497790C4C392C5DD8C1D08F99CB1C1D82F86F6E00D24FF FDE1D320F2D5F0241C219D558C49DFCEE2AC5EB0E08075995A48DBF63BD6C038DCE75CE0 C5153431C462351E6613F366916DEAC6A9A5D4AC7BF1B18F4DFF444C0BAFE67050F8D834 8D048149B240D91D454DAA9720BBEE65B01DB2946A57FFF06E4B36E6AB955A2960610B5E 68279F78B1A11A35BB140FAFA05C1E5BC529A00A0C222630124033B44F9E2C977CA3AD5D F169867B4D5AAA931AD6275187E3CC0037778CD9924CB432B06EC23949D4694BB79B8403 35BEF2E83EE662A157BDA6B60BB6FA9ABBFE62BE4C46F43729E340297382E599C38FD637 06397249273CB344E9B4EE9410CE03EE16451851770B360F16F4CC926745A6E54FC4BB2D 9E54DEDF6A817BEDAB306B3E2C0E8A10EF09EA9FCF2E08047365E0556959D8657CECD955 203E2CEEA21B2AC557AC132077A4C2D741300C377DB2EBC69DE02AFB47FF45BC6252D8CD E570EB87ECAB5447786473D71BA77997212CC54299AC88C1E469ECBE8A3BD2A91D89D80D FFCD7AAFDE80A6BA5A845999FD5FD220CC2666463048CF81FB4449245A5B15C88C658B5F B7ADB09AAF3489B097DE3FFCAA177A7ABD835432912283BC4C70DD57488F6C5EC801C3C5 D11D447C3ACD7CB0A1CF51F211285445F8898DE7EECC1EB27B833A6122871A5A26F87BCC F2AA65C4FCA99E4A340FAB547ED2571B5C4C595C0D2A7FC30E73E057E6C712041255CE5D 5CFF47FD340BC81238F0B9171B4B10445E7B8319FB430B3253B03A99C5526BC610E85656 51F9524103754366EE74513E8DF2E13D15772DEA7DBFD959E468D833D7840FE2514FB15B 8A57FA682D9AD2D05447E78AB71E6DE639D846A3E93FE5E4D937FF1E44B0580B02EE68CB 4BD5A3501B61E567CB07044FA5C205AA95B9829B21BC9A1E6E29A858CBE5322266C33BC1 49C2A1961EE8BAFD1E8DBB4C70540933D931228C9C30CF61EC513CDCFFCF5D60BB4EA7E2 861253FE863AD32AD68745D1E9E59A0A94E41B7CB34595408BA9F14E08C620D3F44BFBDB 6BCDA44704311F3B50DA45ED63B529A7E07FF4D0CE05A5AF95A742BD1D3ED59C5C83A16A 4C3BB6761F6036B729B127F2980F9FCDB953B116F3D480CBCABC4430BB461A483164FB43 929CE6E7A2DDAA5430809D05D931766797C3C8FF39420FF795DD3C8589F2AA941B022CE5 ECB3630CCF8C8E48EEAF263F65221DB90315E1C0DF7163783D7DA3B27497BB83D6C0EFC6 718A8DA3161F9C2C3E8F130AB331C00734039BFB4B7888905BC40E8DCEDE4C68BD94BBE2 9C5BBD155E54AB53AD963B93D0673EB55AFADD2ABA87B77E56D4742B14D0436AE39F12AD FAF845C7738A19E3830537F31B26D748C100C4BCD2AAF090B08B23DEBB18D53816DD9736 D25CEA401095B6485C21C8C2DA43A281EFAC84C01A53F60942A391EB60C13C41DA09D01E 67DA6F6FD0DA9E5A584F79DBB14857535CDE07E6D0D8D3065485FF5B313664757424AB2F 85916DF2FDC66B148E8790CE09834C91FF0F01E17DB7D149B7898C8CCF037A3F42191B45 C7AD51EE799235A02248FB42C3F5BE6722DFFC56AF6A2379413303C5A054C05B61E1B806 A5A0C6B3D05BCF0D992C7400110FC9F4FACAFE2B537255A2460ABC5D78127495D1681159 E6C1DAD4ED779B8635E5E2207B6F54B9F46174F69693D0F7D7239278283C4A7338E05D1B F4BB94E72832ADC5BB0CDEB90DAF4BE06ED15B59C5295568CC4635281BF7273419F6A3B9 242323BFC02B903A16F83B0CB221ABE908473A941FDE7241A569DEB015ECAB9ED3D06BA3 245E5CBA7672ADE6AF73A82D5AEEFF3D6D801313940DFCB99E9E59AD54F5BF38093C389A DA2A3607E11D36DCDB1A5BB84DA17BE55EDBB3C8FF05E6CEB25245027D3B21DCFDB42D3B FD7CD800CAF6A836BF8D49FE77EAB01986A02183E05C068F45968329C613CAD552C41D5E D35905CB81D23E92CBE93BEB1476EE848595BA76FC75898F57F9D62509BFD0E14FEFC899 F91CA2B1B592F06E3258853CF348B54D6D669BC2648A1BD1E13B0C194F8FC7F2543CE2B4 68ED0969A69DA77BD8FCD4FA978E8139C4DF7EFF0219388DA54656D9E0EB958292B1682D 1F4617F7205D4BE297FD5476AE04A1AABBD020ECEC99E2B6A7773604171389D25FF6A237 38FE9852D37965A81A1A43D2C5A2A8F9E7A17FD702A29597CD0AC79BB5DBA2FA916679E1 F36FD42D4306F277464D11CD34588CDE37FFEE309A289A5A28B41002A15BDB06AFA1177D 1C334150B7D73F2957F9E44E868DF1E8D1DCE41A95D921C9DA3165D1CC58DB9DD5786D85 C622DF9B5B16D2CD0FA3EF2C65B2C7D0EE4D3AAA3EF17DF773DF0E0D4DFEF2FCA2CC573A FCFB8E6C314436894E599C4FEE930C5FB8E4A3DDB3B807724CE15BD40EDABD95B67D27FD 9CCBA7D79DAF358F8791B761BCF7D1D6CD5416E51EAF1D71871C7944F21A5D636032C4F8 18486F67E2BCB479454ACE821D8D2EF809B57BD2476EB2DE4FE00F3BD8FDA45EFEDD5B0F F0A11BA209AFA609E2253FC082B067033C13F14C13DCB9ECA9F38704918A6996E77B1E65 ECE40153F942491C4484C1D071D92286EBE0031BCF80E97ACBB5BCD6ED0D1E8747D33B38 3B16734B62C703B6C293EE715748177645BB9FC8BAB42214A0878852FFA9C4807A986501 8DF49CF79A20408DAA090EF916DFF6048722F595F1CAC697A2B9331526B3FCB290499B21 38C59E0EA5A72FB29AC2A39872C6F4189687699C7FAE449428DEF7E73FECBA4CB09D9FD0 CD1D33987C734619513DCD3475895764AD0EFDF59E3F3375C727C18DD388506D023BB0C5 904752CFC4522B4FFE95C6FD92C681AB0D95CAA2CE2B21D35635A7FA88FA5996188E8224 5ECC1464E3200A6ADD3884662A4EAC975D0CC053CB9D9F97B1E85DE4B26E58EC3A8BF282 6ABE07BBB5D2381E03178EA1A1EC5FB172F613A716332D9A5BE804C5BA7C27DF33FB7D7F 08CD08517E243665B902939D35E4EFCA014BF62527C95A504F2D1953CBE0B7B112197B1B FA9F7670D49EA6F21C013BC2F42DA97A30DDA0EFBBD051783857078557EBAFDB6D4FB7CB 3B60258F994241646C1B7C560813C0D88061BAB70D17ECF433D4CFFB4B7179C455930B82 EE512399526A8A5975988331C74A5DF1AECF594CE062508D02787377869375E391A7BBB7 FF278DD4660B8C745FCE998B67FB5FE397E454187ECC90ACE11E8FD03B6E7A6BD4E1D623 42984400E7057A10F36E5379890C509D7BB734E25560BCD65AD32305C983F79E4B365A21 F9CAC78CEE414C965228561A1E3FCAB6E434B98456BAEE60CFF917543A16DBF23C318FEF DCE6A608D608FAB617FA287C6A1A9F916F1B9DEA2A91A18E3AE24921CD568BB18D1C7253 F7DF92819E4906A76865B0749911525A575BFFFD42DDD2443611B0D89981D8D3BE4D9765 0C6B5587757A8DCB5B155607B3E3FDBAF5BCFACAC150610B35D87519360F87429138C37E 542E473510A739B6899AC2EF01BA8370761E891CEE1A7B69CF284B7482BA1AA6A7C2E6A4 34A5613DAC369CAFF450D94AC5E29C1232A0C373AC43392401311B5D4AAD8C5871C78DC4 FBA345EF99BC06D916E3636F9F8BD880386480AD525917E7761708EE019611CA34C387C9 B261B877264D80213BD7AA8FE42C3692D36EE97D076639C887F865888BA719798710A85E 113807CEF9DAEB6605637340149918390F0528B3027DEB1AF33DC011B11EA6D1EE80DA2F D66DC1E64B9AB198DAD83EFC6D7039B32521D525E799E48E9C4DC5013A1E53B8FD355CAD 85A13E8F58C6C9235BEE129058FDA713067A3D801939046B490011A96AF45B9924BA73EE E3144C811841CE1E18D12B893DBDC274D80CEA2A5F0275CBEC4074888396C7BBD05F1DC7 E0B54F7AB6AD604FFB37BEBB6CC90CB5963E9CE601DA577046A05FA8CCEBAF3D60DF3447 3E4199D2D17B2FB791550AFB33BE49C85DC283F63D58FBA35F85334B7320134AB634B128 AB27811B133DB381896A49FDE908E969B0AEEB9C1AE3890947E3D302ACA2F94ECE5F3492 48D5B51CBC0C8492B6407E511A360E4E92B75FE2F3C3624AC21C0C727F83A71E85C097CD 10C7A9D0FD3ADD626623C3BD959B38FE448F9022BB381BEED641591E8C7FC93D753CFEF6 6916070C79D6BA334FFDD1A6896D39F7E843701E02B8A4878F5A076EFC46D9D90B455A2C B16AEDAA9325BB984D5E8CF75AE8453D889261151B76580B66C09CAC1D7EC46C21724EB2 F37DA325F84543AECD24B78ED45507A66AE7920A890FC546D647078EBC1E8FCFABB0DBBA 6D1F8EFBD2F369CEBD26485F746CBA3D933A680719B01E398169B63073AF19DE01B9712D F109A946CD8EC0DF0FD16CEFE5AF930674E37FDEF1CD8428DE9D33B8859678F987E063E8 11B91BD54862106626205114804C0DD990937D0F3CA047FBFF09F75EC587BDBDAB443235 1BE5E990B8C07ACA20BB3166DFEAA2DF9720DB1FCFCA030F6CB53B7CE908E9CB03FBB000 58CA84907CA019B308CD041790E6E612C85380553BD030D6DDEAA73E2E49CA8500A5E3B5 07B16A5C8D03B0C8393BE7238A8806C3317809A081485FC0A04173771FA5DC177B4D169D 7B8C61A28979000334D9A324C4981F3B8A8AA1AB2BBFE346667759F691A107CE9B1F0F0A 865B0AB4DE939643940824AB1A7269EF5A856521B1E487DF8DD44D03FDD7733A00A9D72F 497EE5E702958B34EC4E43974781A2161D237C9613035EC14B44FCE52E276E644110E344 A75EFC3095DF9664485C036DE2EACE40DB8FCC8EB82E999CB46D3972B4794430731EC4DE 505328F38983FD1E1016F01E90CE615CADDFA8DE928C66654474CC6F14AD532C7CBD0A31 057CE44C6B248A6FF54578A9A5E46D43A38B6051DBFE8E5217DDB3BEED47BBAA15D9EFD5 187B960F9BC068E12804EAFA76AAB5C9DC72413EFBC6D7B1A5BA91320118349B37F00F16 937922DF82B89E09F48ADFCF9D24416613DEFFD2D2EAAD7219856EBBC9EE6E636A0D3B3D 8E2D55015D8A942C14C86D5BF63ED47F3C66810D886A417D6FDCBA77C8E495F48711186C 25737D0CE7E805D9942A0C62115909B9DB242A85279DBE23F9BB0212C0D9AC2593D10FE8 3011B4DCD29D53AF00C51AC318861E1C7F67EC44E3D30255D8F8E1AFB328239362AFE12A 119E3836E47751E418DE94D336327BEC32C4ABAE29922ED777E9B75F9E7EFFC69BC403EE 6BA404CFEEE23205EC059972ECD6FA0F16807341F1E547C05F6CBF8C1B963A75168AB5BF 4CCEF8A9AE20EFD25AC722A8EAF42A78930A7814292CEC418B8CDF8B0EA01FA6E3F460EE 3FB088238625A115DAB7AD844C5D0F1BB45DDBC0EBD01D3769D0CA35294A812DCC68BBDC D05B1473A9F759F9432879DA1B54F9DD63542E9C9D735F5CF6D124EB7446AEDC4492C48F 04613C4C76F6FA4757B36CE65561906BA301B26423948B5B68ECBE52ED40514D26354D28 13F6EC60BFD57D4CFF0C64BEE47C6872083AB32157EA0A09636D8DFE1141855170A0D43B B5CF0ACEC9ABE88B7346DA474D4E75F5EC29E6CC00A6AC46F6915062583AB10CE0A65057 735F52F05B4C14445EDF11C703A6A4AC723007569B68AA97134578B040D357F898D20879 F39E4DF030C1D728AD599BB99FAB0EB988DECB4D5019AB24413B5B1E8B274FFF799EFC37 C37ABED26CE2A7667933A2C21C75A6A31F456B8DF20C60D09BCC7571AFAEF951C64CD434 40F210D6E437A5FB5190C1FFBE423E6B3BD68E2D7508593BF9DA2E530F72150EC322C87C 80D55BAACFA335D03706359DD0538BD6747EC594228B839C401845BE188CF434F31ED3FC B20B6285DC7CBFB8AC38647AB4B77D8286D22DFAC0F664A9F54E6B4BE1C5D79AED4CE005 22066E34EF15F32722E0FDD63E72ADC04512D17549993FD001AC0EA5164CD9E831EF6A0A 34FCDBCE90A31A8C80B6A2898A228E803F631A89FB545620994A324F4BC85CFECC64BDFF A6C280C46536186EF32C40DA132138677922C9CFF3A60F3A2133122D8950207AAD5AA86D CF31E2F6F8A9075E754B6CC7A4BC3E199E38C0198838FABC7139F42FAB001950DC9218C9 79DCAB53CAB3255C746A4ACEC96720CBCE0A81C59C58C78DB9602FB3BF38FCDF7157B0EE 47DC5D64F5E3D18CB42F07659C9C172DF112B6EFCE63BE52D783252502BB7340EEA36478 AA85B52622D150F71D7BDDFE6E83F0C51AFB972104A7EEDD611C5934EC68955106BC4C8D 6FADEBB0A55E5F1496A49C8BF19F7207945D9DAB52B2345021C4C4B44C4EE7D5F72C1C9A 91346ABA8EBB1B3ED4360F14697493C867F00473BB0B1546C0F88698B36C971F125638B7 47061CEFCF69419CFF5C854098E2959A66ED9FB25B4FA5B1637EE03DEDFFB6206FCE537E 617EAC7CEFD38D55DC0BEE4E15CCFBB276605716CEAD39CED4AE0038C70F3393F55B7EDD 90C9C73BC9B5DDB705325A6232BEE78CAABE60377531E93086ECADD5FF36E6967B478248 68170502ECE310D49ADDBA7D14FCDF20DB297E9D851FEC7F7BCAF8514FF2FFF8F124C879 41AEBCA79E968458321EAF0FC758A81BFD87A11819C3B35B5CD79F38115C0C12ADD7427F 619DC77BDCA18D693B87A7D11DFCBE89549BEDD03E17F48A55D3C26B6C9EBB8301A8162C 310B61985CCAF692AF8002B7CB92D072BB740C261A14CF740A04739F44EAA8709BD61F71 94EFB7C39FC72AFA162B354FF5656DE9DC72ECD5F588F19C8FDF8D3E5C8DAE0EA4FFAC35 3DF4A005C896508B59B4431BBBAA84934EE036340D21117D560BC9CF5AE1AF783CEC5D5B 29D07EEA271ECC95F86EB007EE0A64C246E1B34A71B2E93943A6BDE8EA5DEEAB0D5D3855 D910A53C6C6A3B60659C176C9B0D4EDE576D917028B6D5C781236CA9DC8874CBFD9015BD 62FB476997EE48624BFDB158800FAC4DBF79F4FDFA99568F98F3B11A66A6D183DE1CB355 EFF17F3622C3CEFA9703392ABD45B8A7671E3FD1343A115EA14E637C0731166837040122 44BDEA22802746C4B540AC5BB7B945D6F0B6CC06F1493D7DD15419DB3007D72805AF37D7 0332BE9A38E9F9189D0142836C97AD891F1C3AF89070DDCC5B34975F9B158366BFBE7C04 340F8669980C69E739680C69D368DB06013FDCDE899ED1AF30BC7C01F853A5F5D20C5069 B80D7BEFEA68ADCD021F0826DBFC8AE8AC68DA7A97F1F463EDD17CBD4135D71348C062BB 03483A3E7AC92EECFE543CF878D9D8726663014FD1F2CDF5BFA5C9AC10E02AC82F16BFA8 02EBCB18852E5BCBD90E8F6D187F1E8C20DF6D84F9ACEC5C927CD051D1BAAEC995F8BB77 020561B90BDB8A1BA876C60FB903E52D77DCB39C07830EA2EFD1BB3B6A441D21E718913C 69B8BAF998E403855462D9FA59B7669CF52D1E71A394DC1FBBFF74B37758E8641880A3FE B5A55C900D5BD5D525784D2D4A1A19334E8F00BCD9E89A08B5957386D887C67F73B1761C 3DC8915263DE4D7AA13A773DC3A0EEB8FF75D3C786853B853EA6328EDCCB33FA4FE2E7B3 F28E5F2176C120CDF927AA885D5A32B0129C67A561BCAC28C0B200501E31D9B69A5B3D0B 92D2FC6A0FDCE448F7A732AA30EAA259778C3B021062D9D70D02320F9406ED83917D5C1C EAA1F47147BD29B41725235314E033671BC7456FAEB7BF6618589A5DE09C8D737D9C6CBC 0315EFA623B3056AA70C027F6D06E32C4F063DBA29A0155A0D207E27759A08927BB7B462 45DBFBF63C19B474AE114EBD399D132CD6CDABDC4A1476098185ABC9798C4F74809C83CB 7734A91841B094BF3D0F97D080BD0488DF2906A2D1F9111A7F1FD17941A2F6B3EA9DE039 F480B9C2005EF624B5EF10D4149A2420A08E7C64ECEC1A500CD21B6E80B483B21AD6B343 8427127DB2EF62F5FD7DF6E2B1EC4E0DDB6244670B1CEB1EB456B896466FF8F673B5E17A 91E63224CF5A2D597DB32E58FC1C224BFB0F28A60CA1652D7213BF65486B881E06D9A6BE BDA51E42CF84650B0D6B6AD6741043257520A4E2DC934798480126C3A112FE567B7B6D07 5F8C493574413C5DF625EAD50845B5A755149A5770387116C5410F9356159DF3A7EF6649 23D5F1EC8405737B0A4B523D224E38D95711D133F1D94640AFD6EF47FD8D3C753E42F051 91FA8ECDE631CB7C8279CF09F3270AA7892C3C22C7658839B6194E9F974EADE80AB04CA9 942B5BAC8F5A56CF5690EE0209FE9D08BD31A6DB7F07ABA577EB956177813B8D5B49752B FA0F7A009B1E0D4136A12B02101AD5D57616C46269E2E1C76235D53FE6DAB15F21D03758 DCE8E38D8AFD1985BA340EB18425821808FE2186D08B9FEF13C9DE0A739AFB9A81E2BA8F 6F2A9E95E51CBFBCAF72A1973EBE3CE3F37E8055D12FF591A62B961C374313C2F6F011DE F69B23A29613B6D584E4315738F5C4D31BC78B53F3E0DFDAFE7941DFB4E44771E7F162FE 74AEACBFF6157E7692720E262713341282C795B51D7A42A06026AFFB0CF8D5828608F1FC DCBFCBDA863C749E07859DD5BB9D47690BCA0CA2C5B6230147C2A6073D20A9015424756D 7429D6F35F548F3E670A399AEFDF3D95CA70AF33491782ABD553F7A3ECBDBFF60A55F966 7F871626D0F4D3ABCFA020B59BACD7EFAA69FA4566D6959EC202CCE73BC4E8D4ADF720E7 20E4B328CF966064D32D5B9F41C5BCA8419BA16FA0CCD65DD75793A600CDE643F250827A A7C7994E6E70903AFE0846C6DC065B4E904644DEE2F8E96A0418B1ABFA663BDC7FC487B8 0F1CE304A2349ED1BD6B2FF552140FA3A068069EBF0AC00FDE4AE8DF32D1DA9C6D5714F0 4A425959E68FB012BD9E7F384DDAB050AF62646EA2DF7269B0B746123E9076D977D5A938 39FE370533E609420FDA36363A615286B81991BD1B00BA89249B3B8B0FB26FDB8B2D4A8D 216D2A37F6A5949EBDBBCED647805CE09FC5AC9EA65134FAF78759659F93D8DF1C8F6E6D B744F59B6B6EFB29CA84EA5F14F282AB0A3942679C6FC4F3F90AD7E36477F72197FF6F89 7E41C0D2D38B2C45FBC50504683F39397D040AAED0E3C0CB3521900C2640F118521FB5B3 662F834B633E8DD15DB1AE16C0204D9F67BC2212482B8C008200082C856D23E9F6DC34BD 0475C69F8B14BFBBA6BD8BE7D9B4FC52A19BA70F74A80D412D4B8B12A08B8C759D6B60A6 4E2085D9126819E4819BDEFE3ECC811878BCE4002E1FEE7D5669A6C640B24FEF8C5BAC56 C207E0220B078A50F5E2F931205B7BF5BAF038DDBF4C14B513162D020DF51B650CE665BE EA7D85EC269C53D086E237EF4856E674088BCF383F1848CB0F6671CA268909EBB809B59A 2FA96E3A142E3C99249F6134DDCF88055EABD23CBA9F66ED2773F860B238681C30DE2486 819AC586E32B563B09CC0F70D918F711C186BA52A36B8EAC0B37D83C11E5A2482AC93B9D 19D82DC62F47165D8AB8F29515923F73D51E4A3613B2F07179C85EDABF9E934A1C917E9C 07A0C1DCD9D9C4508549FBCB78C04F8607AD5108D9D027B476621E3A493F6D03BF2D028D 72B1BAB657E25FE9F709B582846D554B212EB5F8097ADF0983E340AD4E9C27252673B1F2 F6342B3B22203F5FF140DF186D136AEBEF6881D056E809C6A61605875D6EA2FE0F5D5309 357C356F1EFD167EB4A96B8136DF2104ECD071D11ACE1F607AC76A471734DE1054B0AF21 9E298FB3B12FFB82E6BBD109211B6094E1D6690D8B4BEDBBCA68FDD0561EA2C3DB6F051D 559F1B8B174F2FAFD6D15B7A4AC83A2DBD17A84ABFE3DC184E1C51F56937B6A7ABF7F2EE 714A1682BE525BC9A6BCFD891CEF3A32052528B4D0E05776205304E6DC209AC66E19CADF C3413CA320264D3779826A976A29A4749991C66C8303ACE384C05E846597C98E48885445 F40529EF5D431FC65CE00F2575FEEBD6F50259DB116F0D9D2695F867F6CA1605E63FDFF0 32A668BB708A71E909B49109FB72344E76B0F6F6D3A8EA9B49C873A7E030991F64B613EE 3C677F5B7DAACE6129124CFD9879AFC1AD84123C1E4D03B3ECCAC4810D9B4E0572FC6D5E 46567A5F9B8A976C9380D3D775DF97D5EFF5F56B570CA96540C62CB1F6746F2AD0CF5407 FAD60D2BDE48C30E8C5F83158DE639F4D1686C3DC8D32A785F6D2D4322C1D3829546CB50 2A022055DF9496571C24F4F36C704A1FCCCFC220D69F64627DA411D8A214545A8E8F1E5A 88C98BAD447E29AFA3DFF5EB1FDBC809A514A2F6DF2FD4528B6AB527365F34D13FE8B0BB C58876A9C910D6793924D243EB2A633906748697554A29FDCABB1EB4651C614CCF1953A2 9E96495EAD050C2B54ECFF61259D6B9321E49B71F7502571DAF095328DB751A7DC007DAB C2495D16FB2E3849C7B5B630CFC987305D4393558EA68DE7676943E2CC46B855DA34D380 95170FB5783D881EEAB6122DEB1E0D6B82E9DCFB78D113BF52AEB3831ED407028F75F5B5 A9C8623212974B3CCB5A487BCE828825D78B58B55FA8A25C57BD57145C5B15B7EC44E5C5 6F0FDC71D90D0FDDD420AAA785D14CBF8F3B23E4B05BB096A1F3597BAB60C04A335C5386 400A1F3A86278C457A1BF91D6A437E75CE397BC1D982E25B9EC6D200BEAB4F9A2CEC015C A088165233C9F3B77F1467D7CD43A524723342FE33FC4A3028C4086AFDE416F17AFBC1D3 D3E311DFED90C63505E984B0ACA98E625DBD0A377D238F03A50314417B5B4D6B43D36602 0CE4B05D373D2BF2CFA4B32845E598E76044B10C00DA8B94030B46426BE57CAB2375D576 8EA8A7D598332738FB43F1C76B0A1088A32CF62B166BC9A18F2989DBDB5B66A3DBBB7FE2 AC2A30927FED1905B20FE40C622648CA02BC0C6645132D2099726442C294D8E8D62F68D4 625B917CF8C46C2217895E99933ED857A80CD488ACA2974EA1AE8FAE18F9517F55281745 54D1EE969CE901C1A88709B928B636A6D1C75B675B1E280BF0E9007C6CC8BFBADBBFB6DC 8896D5C3BC1EC4D504898B2FE03281384812C93D3D9513DAD64AC62985CD7A4104FBAFBC 41E161C98EF254BFAE204B255EDB925EDF173DECB0C85C1FC62EC72A4F1F8AD5BEF6E39F 786CCC0C91D9557E2E2F641AF29486C61AB009585C51073CD02AA742DC42C22E7EB86154 3EDBDA603F1F9B4DBCD425102D5FF2EC1D70FC781F67EE86C1217788AF70279261CDEB91 A361D106C6A1AB6060B0B2B9466ED80961A84777EC054D0DBCF9141DAF9518626F4EC97F 6C2F06AE3627A6E179EE650D924BD8E0EFFA7D067BB86A61F187A49D0B8A67D8567418A2 E09288513A9C25428CD5078715C875D9718E5AAD81CC1287FF4898BFDBAA7BEEC5A32F55 1F4F689D2FC3E42BB24E6BF13B84A6315B44B035630CD7A9DD2D893EC5C9E09F81927941 96149737D43CC26B5DA60D0E98312FF39C4EBD7E9E1DAD524BF2868E5F1EF40115D8C181 7D0001B5373295DE281BF0402086F3E96571E63832D60BFC2FA6414D9F8E012DB32086DF 896033A8CE25298739548749F3C454CB7B123996900DA00438875DBE7031DB6626670CE9 DDD22EF31A16BA62353B185CAA855BE84381465D6E6CFB45C022A447D3E4959A8CE439C0 C1A21416B897142FDD08A464E3E59B119F6476142FB508297357185CED70725892832EDE 9CCC656F188FC0DC7E58B353826FF23B8BB15C56E10FF5E6A7F33D62A59959A856FB8232 297DE9953A78B7B42F0A61990CCA514E7BAB27646F7A74D9BCA129BF7A44FE185A614FB4 955ACA83C6129739593AC45B06C4B2B254A7FAC754D82C019A991D382928B96B63D34DF2 7A529604C63B97EAAF9EC804F54B76CF9A4053633E95CD7A3195EAB6AC7181447338A16C A96F487F1C149EF14A5550D070E38C5E0455C919C1C1876F63DD9707DB41D5AA3B126E61 BEC175863B7365A1367500C6470EB8E2FF8C46BDD1063B682AB40B6E0429D8DA915D946F 40CF1A1811CC4B41DFB6795E4B8E2714CB7D1AA1849275B9C779BCFCB68EC8D70CA0AE3E A4272C4FB041755C2A20DD271B0552FAC95908F0D925E7FB5584C091913C8C1BEB3CC2F8 486313B5D9E1D5B7AADF5894536726B2DFD06AFAD614EDD96E98C23B84A685B569BA98E4 8B2B86464B4666A33C9C4D8BE11A07BDE25A8DADAEDEF5BEF9AB8B4AB6B9ECEE8E583790 EAE858B1E6268F16A8AEAEF2822C0D74A0093BDACFC9A595FC63B60CAE6C631A6F56FE3D 09197DA78B1452F4F797FEE6BCC0B60D873BB8E6B76F6CB3680F3FADCC86BBCE8E26DFA3 DCF1AADD44E58734604D0F491D7DB36470BE008A3A4FEB8FC5E4B1D295014F724C5A0C4B 5807D09864AB8284165A2E7ADD8A0997731A237656B5A7DE92553F93D29C3DD89FDF6A01 1634FE1BE1327CE40EDB442DF2D9C9C768AB74B486E9C526B9A6849983192E746FD0E22E 1EC3FA4E0F6928B766E864835DA1FF4B2585AD0B7A10F0102B4E3E4AB54B5981CFFF5A30 1E06D0C5C28E5786419B413B3CB4ADC50B638C0362E6554F5712CE53A2E2FBC3310A45BA DE326DEDEB338CE1A30DC06FDA99AD60887A6CB87587FAF621386E61395E47177C0469DA EB2B0BFF8CF66C09235B465924B8D173F27C08955FA24D3E00312FE51BF49B6E50141E63 E6C7517AD3E35D6FEF67B1CA0EE9885F321BAC354D56250B9E9EF2B0EF38AD5A857B2FA0 71461289CA30228E7668401150EB44DAFDE240BFA86318058D67E906912FB6E9B1A574BB 19272C5EDC6D656EA3AA710E943FA6CCE120D583887FFA47B0FE6C8617D67B1A4D4CE619 C0636AF07D23E50806B8828ABD08DBABA69021BCD3A4EEA344C604E64B790C984044ADF6 D494693195ABB5052C542DC76DD3D879F5BC733505C648728EC91667A07B6BC9F916CCD9 F49F21F8193D778E0E2D565D7BF4D1BBD7A022EEDC277F9D3178AD75B04D5674C4287BCE 47883C609F4BD3455E18A35066327CF65511B82F96E8148F0C869F6A34AE8C0DB603ED98 89529F31D845CB524BADF0EDFDF871456D07CA8763E9D9267711A4718377E67D5FF347AE C27139B0F5BA12D12DBDD25EE99777F3E585FB243972620A7EC6130B697B9838C5BC9257 14CC1725DB885A0FF67E60EE2DCB58596C213776922C21631286D0F9939CF6F5ED9C1B45 4A48B789BA14D29CB566C632EB392B7724E1921B16A521354CB8BF283EB8C6A687603C9E 4C69ABD415BAE4B8ED15A7305277A3FBE21A81BA27BA012EEF507391DD4961A75FF7AF44 F8ECDE17CAF7EECEB79684541CE4CC0192CA6CC0634896068F6A30EFA307D016B3822DE7 F6CB00C0F573BC9779E9E7391CF80935A14946C4D903E98F8A5327003F1DDC5644C6A060 858F241E3DCCC0B6C0D9E3A91B22F58BFB8EC7362D085281A7D3BEC1201A8760FCAED361 84A11206A33B813A5CD0FD95B32879F10CBF4BC8D80000BF939D907A52E7618EB1E7EA42 966E5132EC8EB305825AF015D0760751BF16ACDCB22388D3555EE8A445465B117C778C15 9DC7E961D612F85AA5E8401D8EFDE572C0679591BF4E3EC9771D83BB1FD35A0F8908E8EF E45C3E8A273CEE09613DF819939FB19810770EFBD407086226FD49A44D059FD67F14FEA6 C8D8F0ED7484D070653A1648328CB16194ADA041D5A7A0E86C2F97CD82D66A7461C4CCFC E0101ABB9CB5839F087E99386780C2BFEE17CAA5CABE188836C8FFE886C4BFC18B243B61 4A392F8A319B7A8FAAE9A5F7A360B1CDD272402252E61DF9FEA462A2424A21A8B407C028 113700B6DD8F5EF0B82890D77EF47EC8550D2F38EBD6A6E53E39E0E2529982B738040C3B FEBF7685B4426DCE5A22BB5F921AE66DFEB1FF62F17798D528B1235727118C24FFDB2EE2 19F54F2FC9944428C914C0680BF6ABFA9383549A2236C410A84A530FEA6AEE1F28599C95 D42BDE92DB75471C251B7F98872E8E3CD7DD04C8B5C0974C33E8F1DF0C7E2D7253BCB10F 15F15FD1713DFCA5BA22A4D9DA2B498C0DEFD3069E173C4D37E3F43273622ECD3DE0C8A1 B5F6E6BC4B00659E7CF236F8F0FA49FA8CB2AEA18506257973775BC8A1CB6B27AF3ABD2F E6D7C819B4B52FE8DAA36F22EF0BDB321D7719BE5A2DA64B4051FC293449B71BDF26BF7D 732565B7B132DBB5A619B1BB7EA6625BE0A7E21BF44F734573CC601136E91C49AE8C5509 C1AB8F9948DEBD0710905F777CAD0AEBF7C330AED1DAC4C6661AD3A1B01D6C2E2FB7371C 10F4F19F810E6E6C7517DC0E356079246A904BE2E31E853186C595E059A21FEEC488574B EA3C9F5D99D0756D5D3064F9ED969A06AE8F1735760D95712030733C1F82611C2F1E4CA1 A670F90DB2D030F00BF0D719B51B0B04C4D771313D14ED5F3E22CCCB3B654BFF3BB08053 F56139AD00BED2351E22C099A8BC77251B2EE8F4CB9FC59D97FEB53C95E9BED9A36620EC 977451228FEF4525A3D1A5534D9BE3C094F6F4FDEF0E6DDCC4E63ED2E4A841D4E59ED3B4 8C1E11823EFC8F1D8A37B68814CDD4F4984A44CDFDAB25F3B9AC7CEAD856FBEA17DDC8FD E3B0361E31345255A0C5EBB4E31E5247FCF20547C046E4A49280F4BAB41728AB742F5169 7C3FC0FC1E17356F6D2267F70E9E78168BB837A062753826C509FB9786AFFD59E7AFF90D EAC460631A51DBDC9E731455BBE7824820AC65B948F85BB1301F98B0C84FB2520FDE74AF 46DA3CD3C051141808B0B563748ABF7B597065611986B7180E95D11359E9CCA12105480E B9F0E519B992133B643630E9D65947D427A9A38E28CB5D3975D92AD33E2AFB610A33AB33 AB00C8470D647A0C0A59E792C774D846587C14F6D9E3DC0265E2D47AF24C601C3B3C7550 1C1621FC00A1B05AE5AD2C9E20CBAF4B45B31A4E32A9746B966996462D3EA636B7C2ADA4 63D69953F8230AAB4BC8AC19F0303DE21EF69CE7C067BE1429886814550DF8CE46D3D62F 1B0C4F5018685A46210309A35E1AD4932DDB47060CF787D7FFE5A7EAD61259D4C07BF88E 0C27FA465105BD764B1FE0B70D3F260054C7D3C940455FF3690C1C1C864E77BAE91DEBD3 C122915A6FB8D975148BF55187ABD6D6AD7FBD4DBA28F80FA572DA6A043E241DBAA55AB2 8B00BEAC20FBBB66452E5F0451EA0352616E61C001B204787BEBF236B4DF4058A0CFE611 B2CDF59A200DA633D36F6D0EFD4EC0C4C21BD645883D2671D5405CDF462DE5BAA90E63EF D2AD485B99D9EA26DEA7F0FC96E73C78AF8020757E94A304BA1223100F55F9F424882B96 E815F657AE1DF1F0EAB5101D399BA3158A1BB91EE956CE91074748792A7F817077E3CCC7 4F4EE4D972E72EBE89F83B3CBB7FCB9BB5CA29279FB5695D51B17AE3D42F3BC6CA8E8224 7CE4235897896D61CB29BCB4A6DDFBC1DBB73C08D19D642A570B638C84FE83A4553F5663 BFD2A378576613C2B1BDFDA880D12862FBB62035E658C5BA72F1F52000C01BE2306084BD A5058606F4FE0ED75F90C4949EDFE68AD23B6906F10B04D22E5B2E17EE584D7D0E1B9B0D 35CD4E9C319048A8602E36B144F1CA31F5E9D267EB248B4C5B1D511BD7A5C2262356844B 902EFAFA3707FBB6002F53950E11FA6038388F0E1DC6AA0E0395723145B74B5EC6DDCF5A AE890898484061B4FF1188017D1DBA48467520284843C37008FFDBDC5D8C03411DD70F8D D5A7207FBC63CEBF92BD65D3EF72854A0CA5D16E8D145AC02246EAC4F836183D60F1B87F 1EC468AE90BE999F08CBB4C30FA5157C4935E99D384EA0495A37AC738BFB1FCA139E5E19 EC5B43B17F47CD303072563B5EBB260336F97E592D53FCAA6282CED363C6DBE1B3E34357 54DD1B22DCE53E63068260B6D959B38EAF450FC1C4305B1910EFE8379D6856BAF3915364 9734C04D485E4E574516A86CA320B705DFF7E9F306E1E6B1A9E2B614704DC3891179BD55 13998B919C81DDE51129202BAA771071DCC886D306C9E2FB2A27ECDA26920E3130304391 220507636BF8E444D75780146E8652142BED49B86BBAF5785F7AFC9D36518D10C361FD49 883CECA211906F1524445C2A4B86A04BEEDB5F4E83784E8127FA297D2516F0FE60D37E3E 8C13214E1CE0F47262E53D19A58375CB8D97F19548FF28478542ABCB58D103EA084870A1 6378F0D144E8523559B4265EE9576A479383FF66C4D67928989392C228A01E12FB895DC3 0587E0B8226C3B6F25F9E656B7C378C7C69122A7ECB02CC53689287EC90A2CD40B230A60 C79A1B524C0FB263F9165A7B639B7D992251EF56C8BC159747D162828C3332A5AEA548C7 FA5CA49936A8161956BC5612E9467B05CFE2B351CD6CEE4A59F236F47025869DBD4A3F0F D8A0E316770659376B03E18BE5D141789D5C3B81E0B547808323DE024E06EBD9040527F4 239066464E2E4370EC1D1BACAF3D6932F4570E1B1FA019ADFF29EAB04651A88881AAE362 740524EF325EF76365DC66B33225AEBADEB751F46DC34C945C89D1B952DC28CF3AEDE4AE FF44604B388F29C15936BD53E51438E42024FA7EDD8F3300CA45F88B6947828B8047C802 9C79A8F7DC8A8F61F0D177A383C127B0459D9563913F9306B56F43A64A7822A17CE000BB 0C20516DD892775B1960C7A4536761BFB111CE5AEFE966C656B9A2EB9706371C75141BB4 8E5FE19F8911DA4C9738676313696893271862C78705B76E8E98CF2A203D67F6103E860B 440D16251B8E73A47492CE5EE1B4123DD1DDA803C80B72D95E37677237139935D146089D 0899F2497A200E2D9F427C13DD88FF0C434509B4E5ACCEEE2015D15DB480CB8A1AE66EB8 B29E30C23D935848F2105A36B04EB66BD1501B8C258F0EE788AC6186E6580882881320F2 9E24F283A4AC840DEC5F7E423EAB6CBE3F193CE1AEBA327F453320DC8C5871E6EC2A49F2 FD7B58A54AF75FA1EACC3A1029C7ED7F17C543CDE32AC478B3B73F7D688AE1BE120FC894 E4A0F14D65238F31E46EA9FE7D6B911A623DEBD8A102ED35E1A74A253754BB96384BD61D 3A6A85BA1DB75D335822388D89D26B75DF6737A3622D78F581CFDDE7D93EEC914DADB8EA 0687F932C305F2BDCD4EC579C1C085ABADDB44B076D834549A87BFEA5800E570D351FCAC 009BCDB292B8E823F1001D89102409A24CF507E700E197861AB9D7ECA4F6158989BC0E79 518D2203F85E51DEDD6FED400D4611DDEB2717629B06A69D1CCB68E03B560C12761BBCEC 591E010334D21318A3BDC97D52012CBDBBB2CB1D25E744CC55AD6DA7326D609586064BCF 06D54078085DB9E0227B265D5B4383664AAE22E92703A266E18928F7AD05FDD728DFE3E2 C99383C6603B67CD6A49DE5010DC1695A283D722D9C835E397890D394B179E47E74DD67B 7F3CA811777A32DA0DCC37E024B40BA81AA4C52FB8F052F76D1A0DFD647B6E09F98F2435 38949D9A699B452AAB6407632CDD4C8ACE50B0333D16A40F645FC9D19ADAF9C99683476F 1346EC0371BED2F251A121AC27B72ED9F5309E934347192580EC3D31E2E947166D6C8488 1B0CCDB17D931C4673D9193F5FEA92B1156A389529FF405B8902521A0F39FDE72FABB317 E63EF5B0A5AFB3E2CFA4D0D4E7F4360D26AFDA43E04F29164BA8087719CAA23D4A4831B6 63856F98CB725B8E7BC2A93ABB0BB1362F0A38785EDD6DC2E5DE22142E67E5DB03CCD8F6 7B0E1C185B4EE244A3AF97E3187425C7AC644D7C4EBA53E3840847D2F19643DC8EEEFAB7 F376CA0AE75C77836BEF5D80E605690CCADFA413564F5A884F2B0640E979A7D3B09C6B8B 7C10B0037E0476E20640A1A862BEECF499E2281655595D5026F321D4B35E075EA8E4890C 00DF2F8451A46EC247BA93C525C76BA6D9EB4662C7051F9B3A7EA299C97F6F1BB82B2972 10C39F8FDAE72707D9514316EEE228D81BA8F0CAA7135CC268A9CA25FD0EF5767B7367DE 2123E5AC4E0BF349A96BF9B9DB73F3A9592C6B518D8D44E40FC2A7E86ABA4BE6FC7DFD89 5DB92C9443F17E831682A89801C607B970EE7142336D72A2C14BFBCBE351F99286EFF5E5 C55D23ED35980A0D9A64D7D4F74E54F08A46AB56A141A47167C209FE369B174A0256C045 AF1A0D004114697DD6ADA4D4A6B0B33A8E7FE5DEBD9D9C3D17F64D733EF83706F3059C29 F16CE6289418F0EB407AC8EBAC2980D8A28062D721F201E5CB4EEE49D485616F36D05239 1C055F2B95E2CE9E7F54ED016921CD0BC30E1CDE0D43AF1B55611CA37908B9786E24120C C5E4ACFACC460BB4C5D1967D70612E8A405F1D0129251BB6A27F2DFCD5D80E9D4D429FFC C7C920B39A36C3FBDC4749DC9C92E461953E2FED1546D3A9FD62C6F21246F693AC415876 ABC97B2F74B22D43F676546358B12A273210E607AA7836E683E332C29DD29939940E0737 227A433FDEB72D8C709EEC9CD8F7BE10691AE6C578A0F512D6A7D422C00902D4FE6A73DE F7D9907C00FCCC1B211F099CFE0D8EE324421D47224A8D55BDA07E760370D9D2F34C9BFA 05534EBE7679F7E277DA0ACABB3E6705F9C9AA3327918EC32AEC77B87D149028F75B7B77 FCB77972D1CDD8632C54843A34C5F4869CA6D8F6D0D298722174D5C624239C737227D563 CE45BFECF0E93470FAD3EF7C58960AC396DDB15B7747382AE908A8AA3C1F17F3CC2F9410 3E919663CF51E4461852C70020416B39D76763E08DD8CB9ED874851D546D29588EA2B3B5 EF6D09CD764368F19B132D462B01F0D3DF27047E0A37996E77EF6CE808A9CF1A6C20CEB4 C0969D15CF861173A0725AA45D480DE7FE5B931A9126502E5E9B6B53789C33D349DE8B0A 8DB4BCA54AB3FCF43A06A543D253DCD766E2E7F9C851ED4421119F16439448E17A9BB2C8 F99F950ADAA2FD36FC550EC283092E1AE16AA033DD136C3BEF288C2F0D0EF7CB48665199 BB23FC7E14BD722B8794AE34E5F1E919C6069F60995AAF0F1B74B53C01FC80FE37ED1F7E 862023380A34FA4E437D9C62E50F6316747B3267E9CFB13B6CE88B4727F5F7D9B590826C E1142215B23187817A77B578176BABBC52B08CC9983FB59A2C8B70EC8BB19672669C6E9A 0BB7B01596123649E47B456A66619B146069320E10368580854930585EBD682BA81EFF05 7BC00964B6DD04CDDC707E5A301F8ED65238C4C8147153AF2F88D483204D2AAD5D237110 974E587A6FF47CFBB8D4CD171673AEB7F6AFE904E1CB279A73F704450E2135B8917F59E0 DEFB134A756B52CBD5C511F1BEC94908BAFA2D1F07989476D45C7343A6C12B1FFC8CFB45 ECDB5BD958DB190D8436E7A23B2ADE5000B27AF63594867523AA09E726CD9F968FE48D8D 92634B082E6D8F15C3BED48B3424E406E54B6BB52DCBC38FD7C4B9A6CECF9C21AE5A8F79 F8BD107115AE4E5F6ADB77FB7176C5F4336C47647314978477D1A9670590CBCA240914A5 5CFEF522AB9EEEA71C148784F7898B04D260EEACB16C6E493DA1531974B7AE463645BC24 6A9420D1C4C4B787ADDBCC8ECB35E45F6BF6D1C150E8D3639EC5689C2EC5718C69D2EF1F B19E41C5DABCE6C40308E0AA8F81B2E814410C75A03B9ADAB5E3B149B40E8FCD099D3E20 F3690412EEF9D74183486B4B4EA6A1DEB5E9D278ACC3930D3A7D5AFCAB20FEDE99DB0A80 2C0B9196E917CAA7EAEE6182EA7867067BA939F896D24285CBBB04BFA64528A4E32D9C5F 39C5723FD1A6050D9B74CEB683F7B25622440D3409A840826D424FF42AC79ECB6582E4DA 2EB8A5575DE615093267AC591E0218C94A17EDD142E7E0FA607F6FA15ED4619BBDC98F13 277F8BE0223338026D1B9B84428076E30E935B014F840D8C9BEC8C970B38BA886658682A CA3680EA211D2657B3BE0749FF7D509E99470A47FE0FAFC32AEFEB79399C33CA75798FBF 064667146D2AB32D9E72F5A3D7AB3BF355FC626B7CD772550967EDC513911F4118EBFF4A 0EB689F8761343C8202EE6D439F3A10F223AD8BCF36FBE3FB737CF611EAE15B33A4BE56C A47418F43440494B31CDBB8F88EBC4BE39B17ADDC4426791823D81A2D77DD546800BF258 DD07FBF0B034FA558BBE2A2A5134EAEBAB4578B90AA48F1E8067B5074B588FFCEA6B17FC DA86DBC4FBD7C5C8420578BEE1B4EBF761BAE3DA561F7346BC20603943DEAFAA286F5DDC E374D882399D7D4EC7B32D1E08F71AD3FFF9FAD9898E59A9C37BCBB423528DD6D43A5A32 3E46D7243CCF70AAF2D6D4869E961C3A9BCAD0B9D7E4C83FCC215153B2D1DD674A6A72FD 4AB321698D2D5B762C53444BA391A352B665B38D19BD5A82DAD3152EDAC9EA87D124C8D5 046CB4AC549678ECCF4EB1576581189802CE0C39C14F9F50613EF4663180643D678C60A8 A7CC84DBCB26A5B742E66316601FA074EE5F718CB570F26EB25FA917FB9DEB0F67CA34D0 AC5E14AC4E78795FB202935C7147CE1C197B91A130F6F648F1B9912B6C9AE1517277DA8D F9E6860204C6B43BA688738DF29A0EE67C955788810A7AA42BAC461357E39D53AABFA664 DEC5BB83328E4DCF563A1718C87C7E7EB4D2BEDFA18C18B9F213178E441483ECE5DA473C 05730B181AB86FE60F95768DD45EA6437337919F9498B3827B11B550F4B5F93243985B0F 6E6BAB875C2D1CC21182973F4743C12FED725944B5F00CF4BB6A64A5D6CBB1A0FA2355E4 408151ACB511D068D8E34BF2FED2B20737757D7211EA057D4E6A80716A6C644258DFE079 E173A8BAB0F2E35FC5F5DFCA9F7CE3A4963CAF245F1966B720FFB1D74369A7198F09E867 E7332512941F73159F121F662F801FF9EEA92F5BD3C069E1A973CEF140FEC3FAE6DAF4AC 96BCD6FA782CA1B6B1D49FF43357B07524B375A113F5DB640CC58016F6CF3A28238EC85C FB9D3159865F344BD91B4B4570D8C8035B7BCA4E10DE0675741A7D39CB2A2DBDF95935FE EDE395425FA2F1BC2506A1F6DCFE1D555B0C2C8067E36EDC785E8020D2718FD2EFD004B3 3CABC318CAA7844F0505FA3D254BDCA73FBF5F607F786C33DA44E7AF90F1AC282D4A4D45 E58820550D33EA1A76B125C04846BBD1E69F015B329318BADEE75CEE20AB9F6C4EBF45F5 9104E7B63C730B85DC96F1418777E997D5E2DB09E1240FABF9058C1E110D87906F953DA8 8FB0EAF0B2D15865D5770EE2F8FFD805DD260345CDD081526455BA30CA42F808EAFF4179 41EF9DCE8E8B75895B78C29D7CBA5222B243F31495090FCF0011B160F3C41D461232A691 5CB846426E72FE2F30E52D9060AF0098B49563190ACB9C4763DF2DF535E95D55F5532DAF 768EC71EDE257ED22C965D4055C8371093A7A84CC7AA1F70F65F30BD36C5488A3F16E9A1 27D63CBE4DD7B8D408935E795DF4787080674FD787C1DF81123CC46E85309281696817A8 3DF2F8A30E6E1A217713AFE5B21C5CE4094BD01B5C55714ECCFFE039C29F25E93E9E24DB 8B31E52320B5337AA488C6003347D61ACBAB6BF52931A177AE01B6129D47A7E7994742B1 120C94F06A37A1F555BF3BDEED64062652265C910BB4B2963B10DAF06F15BCC2809AC7F7 D5ABF71602DB7A4C5481D295CCE717E13A0F08C8C8F7999C36AFE99B4E6A5F8786EE758D 09429C60E18A602132D8FFA8DC4AF5AA1342C7386A1BA3EADAB9A247F5BAE092FE94D670 537E145A1DD269BD41FA1D378D59EECCA0C4F9C91318773990979F955C1647557F78126F 3416AD4F3A0F7778D95D58BA93B2D2431A159529046D6C189F0F9A7C7D76F4F3F3DE85CC FE987D4FD2F60ECEBA7E79DDB1FD8B44B19BA1169BDCEC1A5562120F2679F4DC08151190 199ADDC3565F7FF56E0E63F1059F0B1D27EF2E85C562A9BEE9E73AD08E8012C4AE32C727 04BA87ED9138C302CB21CFB2B79CB9A0C866B900338ACDA630BC5B4BED1DB263ABA722F6 EDBD18124D9B0406AC8074F2816A360A651C234ABEF87C9C031368E293F57A42EC297435 C1F3CBF81E93940CBF53BAB36DB5578A3B0C20F9A096398754B1D46BBE51E14254506ECF 63627A97A30948E032B8E570775CCA54828966D4A864DCE7582783434FCDF91400F0BE1D CEDC29BD0D606D8F350384A7C7F38BDF77939E1AA8060F268B584B26720859F6FB74CAAA 91D1E3D461C03E8F608886CDF145E465156E9A12FCCC63C77B4047C180ED99D7CE0EF8D0 3A85A8A39AEB5C68D978BF1E42F7456632C2ACA34CD60E0833E0A06C73A004056BCFD4EE 5F535D3F1026DA195460CFB937A2723CD88ADF170BBE8F6A37D650D4560746EC3C6B11A5 CFED28A6404FCC4D51B6B8E96BD7A51EB9B0ADA7CD54ED8932DB21EEC149E77D27DF7580 C2308B1CA1BD81FC47F95A9354F8289F151A2CBFFBE6601DEF8E3D2F6988B99A316B0105 C72134F8E997E7D41323FC87C527CF4B9933D88C57A00515EA55D9E0992A9B0C745AC8D5 EB71B2CA656C599CF92CEB9C9AA1959C9C720F7F229F8D0EF31F4C74E1A66610B2262119 56FB757E927907EF87CC2D429A3F7FEFB9CB3674FA4327A72232A03AC720B3D99810AB46 F30C6E8F54C5758F4C7EC9FB4E89A541ED546B492757D5B977F7A830DF5839803EF8817A 1C57A7D3A06D85431EF66C7B7687E2FBF9058852FA9F874E39A302EFD1E9CDAF8384E1BF 369D03AAA73F6871EC71F502D8E46D9A5BEAC37E2C2F04B021B64E8CE7451D3DA016E518 B91D017E8015935ACCFFDCE02DE2AD1D0E21AB8848FC8D17DE5CFB7136A8EFE4651FC1F4 5F091962D6145D6C00B3C93CD27D132440E49FE6B44A1E725169EC54D09DF8D33B0F551A 81FB949910AE086BE5980518A9DB6CAE495282FEB1A0BCE842652ADE29264FDB91E4B086 F7B3D983B46E974047B24F26A28D29246673F740C86E4917C9766E7B81F3A916A866F2B7 044F102F2EF16BC151ABD155E964A3ABC089120ED774A1B0B1281DBD7807A61EC38690E4 9F2AA997C08F31FF1D847FECD48D724A694A6F87A374C506441830F423B922AE7FB9F575 43463A5CFB0BA134E8CAFA30DCAEBEEA10BDB285489CE3E2A0FB4B24DA40FAAD5BADEB12 EF2C09E1207AAB0A53BA0A2140F5F06401C9979C27453699B5FE4C6F9FD94C318C0E381E F1050C0F0E150A5805F8FAD17A1E2905CB107BD9B4587FE3F2C3B1ABA4786A0F946133C5 41CB4A8F2CBA8D2ADC346948495F04621A345BCD81BFA67E5729528E06799F3A6D7C23A5 0C723E6B7A04C0EE4661C8F5408B0E509845424EDA596232FB7EB3A7E6738C71C68EB508 22147C67ACB7292B397666329E1D1DFA110E25D94A3F8B619A39E37216F75FC1744A165B 89204B0CF847E9C462DA9AFBFB6416C416A6AACDEAC74E4828B6A57CD73514E1B7894488 E4E67031DBF3230E43D382475CFD6FC520A6E11FBC05A36582A50F9DCAC2E15134FD4F6A 4CDF561C9116EB7F45BF4D6863ED325C84AB18B1ECE71D344B3F1993D4EA3B2FCF28AFE7 D9D97AA6FA9EB193808D99B6F392C3A9AC14D87E4A54AEE6A3C162569C177D0088A5E52A 49CFCAE7A748FC59403A173358C091604A9A04AB97517118FB48601A537FCFC8E59FCD05 FDFD7E5E32F24204E649D4130D0C0B6DA821482D40C33A375C170F150CECFF8ED583035A 156BD1CB786B17BD288EB2885ABD91EEFDCFAF34157299C96BCE2D48D4799241AC6C294C 3F9BFAB17F9B9E3B5916C524AB27CCE5C87B3A118A46DAAEE2B5EE690E8FA21D28CB4060 547E2739ED786445ECA63A76AAB7B48C0160C199B2F69FF17DE80F4CF6202F87D6DAE4D9 383F8660DF4F79C54F162F6F545413E9EA3668965CB29B1B776325B5D13DD60957794B31 48CB3C55078BC6DDF9E75FE71441C14F6FB9F44E2AFE00826A4737D7D857C99686FBB26F 6A832711B731A834D3720B17479B9B156BD5AE667BAAF2683CE216C013553E2E018A21A4 F8968285AB07E3A989C1A93FC29C49CCBBA6ED10BD205F73283C96F25DAA8044FE31BD39 F0B4CFDC1A99BE011DBF1B05EB4756B36937E7C0BA6AFEBCFEC9A82ED556F17C8B86491D E7937DBFECE96390D775678B76FAA5F778CCD702DE59E7F001943726156BECE72D79601A 2663183502AC06DCEF07B2D1CE6BC6D9A9B9065DD5106ECDA8FEF1EF79FB7D20F9E4E3AC 0A66D6BF6634937B54AE13738556230024860D0B0957152AF6648C6CAD40503187F32C94 C465175558F92C3638230E9B8AE83B1F150448FE27B27A9A1791D687B83B60A7BCD7DB2A 27EF549EB6A465AF27304545DB58AECEFCFB131124505A12C4AC5D30A4FE794F9BBEFD28 4FE82F956AB4AB8FF539A35E031A3A95841102FF439107EED869F0D9564574BD53CE8BA0 4E11B8C82E86E4DFD7B9733DBE56B44B1A9FA021843AC114EAB0956B0A36287386D835CB 2452F7057FA029731E2FF5BAFFA0929A9873211C553F5DEC3E549F6DA8A586850B53CF5B DFF762A62B8F6E68F14C80D2EAEB3AE7738D7480C028C4FAA75A710AEE881743A1216FCA 7A9CA7190E761B1E06113C600BFB45F6EACEEC8D6F5E6432C43B107FFE0498EE2970C2FB 418016554E05CEDD87C421865EDD2139EAED5CA2E4E074141FC7C850530C9C68C5A92B08 C4C4559DBD310E4DA561DE641A2DC78A9410C611DCA4E872DD3F917437727D59DA593E8C EA3144DFCE21096C07728E4506AFE7AECA43D2CE9DE0A9F09D97F59FEA57169723401CE2 42CF30A5ACCBC47013F85D362AADB6E21471DF1C8C8D9AC879524CB4FF3161FB202E2CC9 76E8E58300CAF33591580BA29468ADCE7D0B046D2C615E5098780C3536C75F1DC0E6595D B3FABD24BE1F9E1AA852E4753ED4B5A66AE058DE96AD4992D4EF15BCD2F4AC32B19B36FA 9B2D972393A866F70F45EDC14A8EE5C0B99B291C3123B5A1E08E9EA3000E80F4E2BB26B5 5CB3E8FA6DC7133F4F61339F4DA1BA502BB1010DE5FACE040F8B6165EB178693F53AB3EB B611C379DABBAC8CEE50432E58083A4980DE28BC1D88BC39A81F9C6F1B4BC6ADE02E99FB FA8146FF9ED2A9752DDA6A6DD47309559BE11FE635AD97E23A5905405865F993AD014E39 9299A3280D9FBD79B48A91819E3F8336CE095B73814F823B995AC54276538F2F06604535 68686B62C1D05B3FB7FE9A4986E5E326C67ABF7EBB97BC86A909FFA9040923D4902DF84B 69834A261757A75C7B7BD5D03650CE7D8AF595F32984F0ED354003AC8763A60E079EE81D 7A0D445485500701E20D79355984CCF50CE8C783527A4DFD5CDA2530DB7312EA998753F7 3B8A5ADBD1427FA4F9CD5AC7D3BE8B5A42ED469D6E5D14B7A0733ADF2EE523CFE883EAE5 5BA69C3E5C8F5E80F3974DCC5A973CFC588F839F519019CBC295CA7F4FD2B8F631E4E432 B8F4ACB25A6E01C73C149CF591422D47CBA91B08FD8CF76109FE3A4747DF2799B6E56F0E 9DC72ABB629E0A4BC87644D82E623FA7AEE8E47838E3B8076601F235D43AA54C239D0304 DBCDB962C352B069378DBF8F78A8354A7470BB576E56AA1E15A55B0BB21BABCAE164ACC8 42CDBBD4A28CDC5994F08B701E6455785D52D568967E0DC32729F2C329AABA8607C96C24 C3453E6EDCF27B32664A14CED1B83A3CC05154910F1FCCAA9E8BBFC5C989E6802BAFA408 DD03CD204BE067A80AD461597978CC23B49873DA9E72627EA5DB03D38011801CEB1D533C F74C6C1870442B121FF04F41DA9CABE221E3BB2EA5D2684EAA3C0352DA2F82D433D90522 E4C73FABAB369AA698E7AC1C364C2646AED25918EB683C952A6F9CC4FBA83BE69D2CC516 0A9F43CACFAD811F0667A921234C655A4A8B5D25836C99F6D6A53D0FB75280211E09E9B3 3B190369147E8053347CFE93432BE0EDE13232A08E3F72E285E14B8D6D5C5FCEDFEF5E76 DB836CDB71A0663C9151D0C855E7A72948CA8E3C387BBC2CFDF9E530EE07DA4B917ED41F 73280CB592DC132DD42C9481A0975853016E49E30360D9636632637A6DA23CF8C6C9A196 8F9A30DB1973C30244DD445E7B41F5815F2776BE0EFD95C5A879122044BAEB17E4AE88D8 276C90AFE8CF46C07C3E2E72B89B679D761146D6670FF59B113DA3B82E8C2141C8ED8AF6 35FCF1642646C5CE1EA1DEA4B8CB2E4EAF9E83F09B9753E785FBD5FEAC4286CFF852ED00 1C76B6B6F15A63F93D013B5979E23DA1FBF944279CDEE56C16F9862F5282E96E848E3DFF E5C3C3AC14DDF6A575716C8E04D87B91B4CDDDD37386169A74EA81DB5E9857D523C31C1D 08D17C0D56FDCB2CAF340808CB41F21FDFDA5E8B6B6E5D31AD292631A58E33DDDFF11722 87D3B3E025304E4BD71235872557D7D6FC594EF78A78C4433C173BC3AB6483AB3387D248 C960FAEEE5F77E3CEDBF4B3B5F4D98C7936AA35AB569A8DE1F12BF028F9C5AE204087AC7 7D83206FCC6F56F747BC4D86F4909571CD246A4D33734483A79F54B700CDDF6FAF43DAF8 A7537D0A68F8BC15D31F938C30ABA5346DFBC4066ABBD18653654AC8A4CE88F9279D3552 EB485294CC768ED3F527E738B8CA92E31EA891832D12BC98D14C837D7A30A16ED0CF2E37 5C227565BB6F3A7FF14E7297E8E5C88E2B04CD6E25BC40EA1EA955EC5B21D3C24B248B1E 41657C6686B3E48FBA9DB17437966D54B361F9367162DBC0AB2D56A77E0C3667922E82CC 320BA910F943622B91D14D04AD4BB858A390F7F2B9781BF9D87D062092482A32106E7ECA 5E7052CCCFF83571C2F95A2FD617F62E695089BD0AEC730C504BCADF98A3904E3EF242A2 3517F5FDC5E757F2D3BDBE1D0428A8AB64E9BF62BFB36002FC0A81B9FDC04CA1550D73F7 A89FDBF75D1C62504A01E5FC9E1C451C927FEA33C00DD8912AB0828BA0126228353F75E3 9528C61BFEB6B828004E07D17E6B94AA4EFD755518C4831C355D77AEA0526D3E14592EF3 A819D3645E7EC5A7C99D339FE69F1E65686056DBC4E1FD5676080E2359ACF226EA69BC3C 5801DD8EFEEBF37C0E636230729F55FAE13C742CF0399F47D21DC03D1BB8312DECF83D64 FD5220113F76C900286F24146ABF9E7900F151826D1EAFFD770FE4F668C5B6493635A874 9B4C02332BCBD3F314AA7FC49B0B97CB020A817745F1EAE611C28242C99D6156C0F61A3E 9233A764CF78EAB2B0204A31E8C31A1FA2F921BAF054EB8CDB98D978B3A493465938F4F2 873E20E391D82267CF664930C937A2506566E9B92E0D02688BAA65287E8160A7847DA0BF 688EE0084405F2128856F9806EC96A2FE32DFE1B16E47C7ECFD1A2F80BDFF4896F85EC7A CD64273F4A9CBA06B15782F77B95BFB5E442DB26BF2F502565506BE5A51F71BF8A5BEB3C 1C526D40583B18C7BA35976C012FCB65F73C774F94EA83929702A1E6C2229B022629169B A36D52794744F45605DEA1A062B3B02176AD5B89686CAB3516C00955F167D8FEE2674E0F DEFB92AA7EB6D45E3F4F50796EAAC87D64E63C56C9A0BBA70A02B9352C8A9E092F7DBD10 E3820A989A8FA7AE51319A2DD255484CFF4FF0E7347C921218C5CEE75D663D75BB2296FE 78393E2F686091469EA74C63694E646AEEC80309AB605CF09272C59A95DEC8932F4105B5 5EDD56A9762790CA99A856B74E9D4F55B57ECCEAA6FB446EB63B87649D359E8BB4133C7F 225F0D45F2A78E891696EAC86A09728FA99638650253A72E4DEC02C0A13984C795A04D3B CE8A3A70368CB2281C7461C38562AA436618F918816AD78AC70518529D48FE71BDD64E95 BDBA3DA5F004EC858AA0FF3CEB5A5520CFDD417891F21694D0FED80CF320DA4A70BC9A57 A67F081B9ABB1C278D2FED39F95298E4D91BB823CA93F73E5DB3332D405955C134ED030F B798A6E4D053E39E5D22E3D48CEFE36FB17F69B260486762F3A8338656A0B522AFD46D32 75A92153FF52BFBA4F708821A9E6D413762CBE6EB177F52433262E8ECD246881E2A449B7 8BC5904576CA3BAE922653F97E7D4C95F75D397A53F031908417C5E2C6FEC792E4082C10 012407B15176990E3AAF311A547404D550F511317FB98A6CB4199F9E39D7565B98BACD06 0CC653C50CEA5B99A6C46A7CBE5F15AE587BA744FF315A3AD001C98806D7431B1C3ADF49 497D075F5AAE7C8ECE436A490AD816B5781DF40272F0E66A29B7072C6E165551A3517AB7 AEE3B42C1793AF99262979682F24CDF78BCF1DAEABB7D4EC0528F5C1147B9F31D95C4A92 EF5571B1915117C825EB6A2A3D28BD066557B34924D49BA6FE908AD644A1B0981A6856EC AE94B832E2A46CE18C21764F0B870F1738FA225F22771B7E9E3C6757CBCB8F5397B1683F E001C7025FFB7FBC83C08A5C6B59AE99123D13A7881BE3A4F93BCB0D90E5FE77D75B5419 9914FADF9B0422034D4063A8B5343EF80DA8F4B970A5244B1940DEBB35128EF3436E0256 D3B4C58986389FDF876F5CEAF6962F6076E79F1ADA3AA3E7D6D366B095025FB12752628F 8FC7B12D3630569F77125FB8766E786E043D275D7F5AAEB8441061200DF9BC64B0841143 1D339A2EFC269069C91E3A956E17FD4F7843E00F17F9C74FE4D0EFB4464271F20BA32576 D305DBE4614CF0E9F6368735107B23C123E733708C6BFF738929683EA8348CCD2576FA67 675909BE0171F42BDDEAD4283C0475D49F1540E5977C4C73EBF99CEBB3967AD0BADD21CC 87D59DC40F06FDA8487DEB983FD643B0787ABB0DDD5EED1227A012C5C04F08D14448AFCE A712C31D371701DCFA63CB31241702E09637F75F15575F44D1DEC44FA65B3FD7998B28D1 862B8A4493C6AAF42A95032B14B6BB4021BEF65FF090F20A1437D9A7E0ACD72A0722D993 E48D850AE96B131BA0BAAA9DCB1F0307E449943235F2E6BC9AD35FF08C0ECC9429445281 3DC2A86AF271BBC62A5456F276100D53E3ADB4B9395E327901E67E8FC70CB18E9E8DF78E C9635AB53AE8648410ED4F6277DE8DDB310C41D338484447EDF000D801646CF55B1C1535 4645F0BDDDD4E815E0589245BEC92F13043D3294E85254A24B08AAF1FBA55BAA5B722240 6DC76AF719846F1A141BB5480AEFFEBD76C93468449D3E03F912370C462D97D75D6E6B4D ABC2D268ED24762A312E2EFA102B9249C6C3EA85F83C8907C71C8D0D70D409B1357B3758 2BFF1CB44E6E2EFE558CDD5B77B6DA6612298451F9BDED0206362E5F988108CB765DCE96 5CEF2A56B4487360E33F79E4C96851C9F0E5B649577AD9CE28057CA1D5F9F6C5ECC2449B 86CD610889F7D36BF310A2B0FCD83989CDF9A94D2C21CDA00D33B867257C9A74064B690D 10E7CF77A32CC6FA4021278EC72369E7D1A94ECAD2F707F4C58D4D19AA9C8FAE11FA5D38 46C7ADA803BC2743D84E7C8881A9C975DBEE9E7032790F45BD5C3059821A6BB198C0FD57 5E06444F5111DAE4D2053D66A5A843AE90C07098DD2E8385C7D5BC7C60877168D476F32C 4B47521C4443CC2D1E99AB0DF18FD424422B51B49A9D4120AC6F307837524F881DE49071 06CCC2B2D6E95DC4A6EDE4AD6A1257A8700F65A3D6031BC9F76AF43ACCE9AA30E5C894AC 20C5016FA030B52C3BBE93E95B6BC435F414DBC46FB4B226E0B465C029121ABB05E8ACB1 277269B4689404CA00FE999DA89901CD8CB154A7C604D0AD37174B3F9AF7A7B132F9EF4B 38E11F79B0C8CDF4C24DD805838E5A922BE9463B97E1319CD33A71F7B6BD960345CBD60E 6E42F18BB726CBB1C7E1F1A384675D300B22BE2593484690AC737CB98DC22BF225A9EBBE 7F7ADCDC873FC6443E54698CE1E9123939B531420229B8BDBF26CEB41C86C9FE9C2F83B0 BA32BACBE85C288A6A338E84C5BFD81689E53BC093A26697FD7D83836780A287C815F0E7 7F2A71A85738FF83ED531AB88F8484E24EB7CDEC75F60B38AD0BBF6ACA58FAD02690AD0A B25D17B842839CBFD88C327AF24DCE89F20961986447EB0180BFCAA0521D077F34F184AD E759B38856C9B82F1452FD3185DCD7177BFBE22545200F87570E1FDA8BF3605D9D0C85FD DBEA1680D3BBC645ECE73457318198A64F51F1BB7EC23C70D547864B85DA1EC30803E769 49AE3CE4E369256E9214E6614A05CBA6B34C58762155A6AC143F74DCE3B0C4FF0F084821 C0921CB713B369AB9037AF79FEEED75D90344A19969CF38D8AD32842115EB71E015FB579 CDD58D1818C813BB86481204E7970DA9B7116000F216B73AD044F551435315277FDE6958 B7F61FE60E8A1C33FF1219DF7C3F54B2F60EDEAB101F267B8EABF485E664F93F6955F995 4C7587E675C6005B97BE9676D17A5F094DB53769F8F15E2F9C1C52245F8E8D27D6A09275 BBBDD85FAFC5313FC09CF43342ACB1F90466B9E5C2DE035313F8F45DA7877DCEECDD269A 9E1A372EE742266E5E23B6844757F3DD55891794835FB5415E749FE5A1E37E0569D00879 A5A82C5656BFD6BF91C583525CC2F606E178B243F5962015785F9DE04BABD669CF137036 23EEA85DC0327EF1BD5D7CC6E71EBA2D56D1AFF6F50D95B0144393407FB4627879F7218F 666D37C8985BE843A0DB8E65EF1BCA167C1F3ED8038B5ACCCE2105AD4237DDF385BE1EED A8D45C403471B585822490BF8597520CF1BA5E649F7A0546E3A78D45E7C8CCD120AD0C9B FE333F5D908E8438B8F312B3CBC60753A4766A108870A02A827CB42834FBD9D8D72B94BA 03ECEB2188BC2D124DE6480097217EA0BDBFAA4E18752449D548A4A69F942F5668BFC3C9 060109EDCED4B618F544712741CF0ED7C9677790D13542A22A19CBA43A7965BE0BC1F0EB 46459A474CD2DEDC86E391C5B3DF15597732CE6F8CB8B40529694EAAEEB63F81178B2F88 373D3B0B187296B2F1A077C99905144858F1C58FE507E14B683E2577A65B466B9A284740 CFA590F18A63A51CAACE17AEF35C208596FD7CA99F9F16071A8F9B162EBE516ED764A0D8 657755966CEB6F9FDA1DEDAFF3E65A996BFD1F3C501FDEC19CA62421919518A375CD5B95 C7AE49B9CB453F314D1C62405C840A4826EB2ECE1FD39B4E0392D374E565487621AF583F B7E12EBA51E9BF273D5DDB390084E17308922C1D5465995FB4259F106EF3FE42078E2492 C36D60E71B867E682FE8DA120716354C78961DE6903E9DE84F2D5E241766124BD8053C35 F9723C2FC00EE6A20CD3655C8CE0137EBDDC1E826432096A7048643EB234EA280E43A3A7 B6B924689FE956A010AB4A4B84E484076DC69BEC701C270859440BD978EB5139DE1474BD 150F1341299A32C17893D48AC60D16BE36C3A7536AA22FFC33D7D46F78AA9E5100C52764 ABEC1A796ACD15417256DD9AA2EEF90A124D1CD830E668EB6216E7C1061FDAFF692B70C1 876CEB24DC63E978596E11FFAD9BDA25FC48FD9AAE7E0BC9838FB52AEF02F2F29CA9762C AEEA01EEB284B59E91965411CA3DEE87812F92CD3AE9E3B6E6CAB4E47FA790BE705676A8 75147EA83916B9086DD193585404F2000202B9C04B4B6CD13A68541D8FA1AD04F1DFCC46 37FF64ECFEB733E9D9F0A376DF6ECE92541C1D4989128D0AFC4F8F830B46BD1B9F9A257C DFA29356A98782C30F1FF3F130B235A011F1618F4F148A9E147C37CEC82C731E2C8F2306 406DF36B256E482674E9C12D54A770B9682CE6537D3D34310F607039A3D9B7C09AEF639D 3FE42E6E294291BFE002B4897036AD276FDA87A286D9265239CC28C0254CCBE8DB8724BB E9C09C55BCEB29D1114CAFAEA77EAAE7A59721C489C1C3581157A1ACB924D22AACE547C6 9AB670F40BBFBB5F70AD643C033B199E89475FA7907798D83DA5EF9FE5C0234B458FA3C5 AFEF174F226A7926481C0225EB57F0BBF169DE2170DA80761C2C41AA583E76C5425D2F77 00C04FB8192B971A7DDA8F10DA3CEBD19FAFA03AAD7F461512BDAD57CC56D7E1AAE9E587 C2F33DC7DAF0ACAE378F837131D35D49345D242B866AC5E54C12569BB004BCB9E6E2F890 C2AEE97806FF4953EF64C8ACAA5EBC183CB35FDB3BE5D053053F35B5003EA74DE00B3296 289600AC871DE5081D6C2E4C95567E7329BE0AEB8AA5087BA76217531FFC9DDA19D1CD21 21B38FC2447644EED52E4D6E2CFFEB99AF52C78D3A8517BCCC58C6084E74B3025C8C6B82 72248B3E2E2D913B3795E4064C118EEFF937E78ABF5FA9E7A52115637AEC144C7E0B5814 C79C7A1010BA9F9D0AB08F32112E8491A7C8C7203744C8B8FC86690D463AA3D8A559D147 8D3DE37BDB070535C277F308C4A44604A459FFCDC144AD99520FA825DEB13FD92DD406B3 28764F89BF1F6F78EE9AC476D24F6800ABD9A4861F7BD101FEDF99733A95F3246289B803 C52C2F43F8E368C6AB38504D0225CEC4BEA6747F9982C4E710CC4CB0E10B7532A5BE3735 451C2CB363436B70101916A4882E4DA470B62B3DD1863C798BA2D26B15BB7DE7939C60E8 C652BFE88C2B799E3F96751993FE9131490DB32AF281CA9F56F42418CE3299CDFE5765CA EF7DCF32473D224D86F31F44F34E1579BD5246FBFFF9FCEFDBF1FA15A775E5A3C21CEDFC D25385561C97F3DA928884A12CBCA57E7A4CBDD8BDBCA5161CF5BAC51292422B6FC3DF03 69146963F9B5DC46F79295C9BBA1DFD01BC6642A792FD653E021DA01F583A64BAAEAE5BF ACD4841B88A786F96A647769E16101F8A47E9A9444C4AABAEEF3AF1D863047EBA6BF7C8C 71618C36DFF789E0779EB0751C3623261EB595F86B2DD27D84C1102DDC9558011FB8B21B 55CDAF96628FE92B90289ECAD63BBDD588250F25F5F1560727AECAE2515C0ADD96C26763 74A54CA5D2F2792ACA4E7FC042BA34A1AFD3F0BA45C9C93E02F1328223D4CAE9FDCC76D4 5E7E2EC81942B4F4D4D2187EBF3D9A60230D2EFB9396EEF7889B675DF0AACFA38205536F 035C3134A8DBF05C78C8AAFA1C6FD5E85A7A0C844653D0AE50A44D97EA40C133A8A8EE21 111890B7BD431AA2200F4DAED605B5A32A85103CCF45934E8A21E3B47F996D0B669BE3C8 F280DF7380BA2823F999A1FD74A3F2AC4538E0254ED82EB4553A0309F990CF1A9040ADD2 34D867F89B6FD2DF2A58EB6322DDFEAB7CC206DC1626A089D2C1094CA29F8D7F1CA8B6A7 5211A8EB7350DB35F3595FE5DA04EFA28DA5856F1CC88B74C3A3FE567800EDA8A69D25DD 8B10AE1F3EC8851741B6CF6782A5C2F4172287A6C53E645E7EB327D5F3F288AF612BBF80 9AC239714DF1AFE2310EFE24B1A4E6F03BDFBFCC344E2F62EF5F9654B70FDA16BE1B717C 9ABA03DE3F3CE57BB93518114BAAF33B0D20A9F7226750AEB225DFCD9AFAF1364B5E5674 2C4F488E7376DF4F2D9F43A74998EB2DFC86929B5CD78E935604AFB2EA9F729B1A7A917B EA0FB013868B2EEB219C552C366E72D3D373C8DAC45456CBA373761E42941C34F174F8E8 9B0690F23A1991D209901CFD1E308FE03CCA410935227312D832825001A7446FCA8890B4 DBF12FCE1C338F46ED1B85EF86E87E5BA70830DE180890A2672BD027826C053559DC5054 F89818044B6C75EBB029101CC96BC147ECB93CA46BD93D5DF17A6032F4E7D871151DAFAC A52FE4917047C2DB404842376D663855BEF1471D9250AFE493A39C74188358C9F61FB172 34D35079492C5E9ACD6539785F94E56E69387994A77F6B32D012273767FF3B7E9826C398 53D967EB7F6DE33F3AFDA5C41AA1139A069567C123284CB9D1DFEF481335DEF4536A8B95 E20C1DD3E374C7CB49FD9F2BDCD5958275CC3CF9A00625385B08B526CD4577C4DF5F1B13 CE0A382BC02D1526DA4868525012B85972ED3E37FC4F2DB49AC8880388D0DDC73292DFCA 1FB554C732AEA5E7EB390B39CF6077F0D14A0D24658FA32D7A704B7F733931146F8B9C0C 1C579AE4F3741E3E6B24D91488D5244AC6A8DA7EC68224B729C31C97811B47F47680D02D 02C98DE75F0ACE7E388219B86A5CDBADD3DC04A7E702C8E0B2244F5F67AEC917369EA931 D696AC8806CD50E11015895B900B859BFBA5758B7598DAEBFDAC27A1E4E29A452A2C2072 17BA08C12FA0C54C2F92DBA6149017801A1661673126E0C2DEE5AC736898CFBA6A7D7402 77FC5B554C875E036A6DAAF058241DDFFF8495155BF03AA07E647940F2E71B55734DFF0D B730F17B41919A17473FEE9EB9906A4C3794F5B4E31C6979B017056A773DE2542ACDC5F5 AAB3E80B44CE197CD7AB7813517ED393993149BA062203760AFEB19C0AA8F82A6786723A CEABDFA5547EAB549E9B86B3442888F8EF4D6D92908D9CC3DB527EFB3DA425FEFA926EFE 0FD9F5B7D01460F717F48958B0D87002B7A7CFDF005B3D24546CF36043238F30FBAEE51C 5965B6D1BF1CF62CCB5A9C64141D38A7AA36FBEC9CC6AF505B1234DE2D196270AB4A6AF2 8025D52CA21BB2A181C9CFAC651A6296BB77D5AF9D912ADEEDC01BE4ADE7DE403BEE4988 1233B9F622976F0E2F857E2D7457BDACD3D45A5DD9F5A572CB74B248DB5CD76450D52A6A 0238FD9970AB7FD01A9E71701EF643595EBBAB2B046774D0A1EE91170149E5AEE07AC3C4 6B080F400DE4286DD8ACD23C8F651F8DD024AFE4728C7AA3F472B0C710E80A7C50A7366B 7D74FCB936A2D85CD21D67C9EBE219A7E1D1AD760AFFA6A73CBBDBF3DBE7197DFA403252 C09144273BDCA85241580A158C8052C892CFF9D971FC679CADDAE8E71462C2B1E1F16E22 937D848E18BB42653320EF66410634DEBD658DA01114C0AF4A2A1026BF8DC13DA6C2700E 6B5E3A6D9D9F8F365304FE10E1C49124A9A4FD136C179A351A708E22775BDDE6613BAEE3 42CF25AACD109DFE67292FC24E2C23BB4E7F529B38686A34B3695D9F425B1E79E2EB811D A8A54831958E06CA5872AD82F74C868C02A5663DC231108AD9F3216D4B2235E41E9127F8 AA0989B53C4A0D5AB6DF4AAAB3AC002755801BDD95D709B40A16CF98B5EC06234A253868 8E43FFD50D726BF0CC235868089AE2833181ED57DA2036064D96C56D10390F048540F7DE C5BE2D8FDE37CD86973F16A9F30F266CBEA0F03B75BA30B45E1C4D93140526FD80B37D3D 307252CE89B26E2F6A62ADECC59A57D21149330BEE35A68B53DBF894CE3947C924801410 D5B7467B3D0DCE10E2219BFE344ABE70A30D22547BD2D88ADD025276CEBB2DE799E48DF4 5A096F472C026DCC4BD0739A9B2F984D5C3BDFB7A18230FF31A6E462B50102B320AE563F 2703BDD5313130D5D719F6C61913E3E56E560CA5A3FC372CA3678C8FF4A82AD80C29FB3F FF1A52BEC473D279BE312465CD8E2B77443649C353866F32C3BC9CCB1CB536579FF2E475 2D898715A59DC167E09B223E41AE79C0C7590BAB2322C6BDAD9A350F84E668A13C3650C4 7567D88049DFC6F477EA75424A41E411559E836E4CA18314CD95EF99885DCF30C26AC08D DBCA9DF1E4DA696C737D89CE12F24C82463A4BD7A8C7E541A9E593582DF87BCF1EB649ED F7D16CEBB3FE2823301EF0777E5E5E704CDCB0F2FF2B0DC4957EEFF449FBFAB8D1D846E2 88212F7FB7119EA968C4CA14658AAFAD9FE922EFFD7AD7FB37E0730E001C4C85409B65D0 E53B8616BEDFFC9E965D2E271E067D2270F8C95F30C37BB69FB521E2974BE627FEC83EFB 623B8482BFFF85936FA7CC11C08EA1725F86014BE408DE55DA817A5B502DADE0046F0E6F 205415440079A633E325B3482505F6FF7622040942D78763A1DD5E039AD87176CEC778AF 43665F39DF6C69340F86D4DC68937C539970EF2B7FAAC01ED912B0010CCBCD7534797590 57443B65E1DBFE32BBC89F98726F08917738F1DB0E64EA10C6F16FC442A775DE885AD7E3 6F7C056970C88E088FD1EDABCD384734AA5C181E5EED6CE03EE3B53F15FEB92E0879FF89 4D0AF5960EF5BE73807C9096029DE2EADA00ABCD4978D05D0DA28342CFFC9943312353DC 9E85A5F13BFB5542119C1626ED73991054D461B2A80EEB537ACA2C45D8A51DC76D7B6CA7 A66330F4B9E9B0D3D97433ADBA1AB4C79DAA0E9C6073FC6D8945A575DC42890380CE6D15 E449744AC2989110AF71C2D5D76551FF33BACB3A51596B1916EDFEB914F8538C9F8E302E C7C0B05D848579CB5D0C38139ED30836EC47793118DB9D5117681045B605308F47D39FC1 55F5DF6D17A572B7A62EC85BA338AFC53B93088DF392FB94530858AAABAACC333F9A62DB D30DCB7D542703342BFBEA6CA09E20CDCD8AE9E6785C870CD2B5757BA3DBC17EDF60ED61 87607295C67FBDAA5252A131E32844D61E1231A49FDF4F6CC642ACE06D33F36B62286E5F 5B758A00ACB7901F49746807BF23EDC20CCA07C4C0C2A2F816762EAE1D398C65AEAA5EE3 A1298477C7A8C85B9624EFFDF35521E4E5407C498C08F297377751C8DBF19450D82D5F26 DBAC9B51FA561F10346E24BD46D22C1783E279B92FAFAC92D8EEC61EA89FCB5A28CE4513 6C2AE08DA06FF1B063CE107DA26F04484524925A58C1D217BA2938C73BD0F6ED2164A2F2 8D0E4691CC04C0DE1A9AE3F5F6F28ED22E671512ECC9785A2BF48C68B05B50C31F68DE77 034C7945E19AACFB5D1929AC0C2C813C46B4E99BFAF0D0585F10AD74A95E3BB6778C02FF 3C6A88CDF4A2C376BADEBD7C5F73C798721F6105A39B1676F9DAEBD32A40BC65D47DED11 84AA6DF7790428EA88B2A3EA18418AED11CC731CE30FE76840EC3896E2B0A2ED03CFADD3 2E85DA361F2470A28612A5292D3046EFFF7AD54570D99012DBAEF716482ED8DD3774AC7A 6EEA7B01E01B8FBC415046DCBFC2206D372A0A1C041955BCBBFBFB3015C38F1E603AE4A3 8855396D5D1710A0D1CDC7D01CB9A2BAC0F7A0E96C2381245D8C4C6A4876C49C8EEC24EF 6614F8D9D0BFE4A1497A88DDCF665A15E196834D558A98A2E56BB78505C44DDCE3B8B0BF 6F650C144E3F12335A4AC7B8EF09839AAC2032849ED60AD6160D4BF1363B7DF29CB98958 C89890845946F2DECE129FB19A0449D66D63FC65585DAECDFEA8EB71C3D59A58D11FD657 B4D1EB896B5C53165CACCC1BDF2236FD0E574CAF3F5760B6929F3756EF6E6092898F68F9 E304E56BCE5ADBAFB5DB2A4D0803A6D516D2CC1BEB1F9BDBA57B0E699465A457288D924F F35191D17BECD40855DD6E03BB91D6E7714301C4D7F7555AA973F6DE82951A31E5E4FDEE 2CA7E8DDA1D02826EBB38367D030DC9C98265569395CB0A2145D2A0E0300262B4D0C0379 36484557116AF0267A4057EBD0511ECDDF82A5C7970F304BEAB95F564356233E2CE9F40F 3D7DF84B2220BD4E98DF1899BC537134919ABE42EDAF73B25E382647F2551073A25A5CFC 7D0CA51223979ECB2502924BF40E3F6F5DC3B756578006B066B424CB5ABA0D9CBD2A16DC 247CE568F23420484612ACAAD212EEC9B2EBB26E115A3D177BE00EC802907292F861D1A1 32F30A9D9679ADE14EA5FE0B11B478E8B18142DEF1779A1547F148A049930E73E1FFF713 1777092F4DD26FD7953889DB39546D6DF9FE58437C4AC831805843761D21DCE1FA099B91 39A6092252457E8F02CEB4D8B06D143D4A7509EE8EBA99482DB2613C884F12F4556AD724 4FA0FBBABE210B7F573F04A1C208C053D8EADA2596314B1302ED60A36BACE29D321267E2 B3E53FF54314CA00426144C2EB1096C735C7588CA8555A2CFA67AB7EEC2F5C5DCC3EC721 6A4FA7023AD50DB0A1539EC6CABD08221DAFA85FF46FAA6BF2C7F22FE224E1B37BEF33C8 C84364584E19707E8129F8FEF9B9FA65C2484514BD4CBC6B98DF54FEDD809447B5CB921D 7DA259420E6BE75D0820F859CD6BAE096001FB7C7E1E2242F9F6074E6057943114B070FA C3DB3A300AAF14C1680EE1258245C66C91529246B767798E62F1038EF045AF6EA1672681 38938B73AF1A9BE6FFA9FF35331730EE05EDE6763AF58E05313088F16CA9A9300514E1C7 CD00FC75315BE1ECCDCB2B3846B4A5A62A4D00CA3DDBCDB9B9A601D6CCD3839B595A1AFD D7396F5769BA2270A3C2886C63A16528FDA79160EC815BB81B83016C432D03F55384DB7A AA574C4825A6D92EF4B5422E788CE74A313EF937B6EEF18DBE1E4962588F0BB2E1EADB43 C2784FC922E9CD7519E46F28E44F84CCDFED591CD08A6092ABD5D6A76484212573F9059C 26ADE7BBFC5C1A4ACBA3F26E1951703484ACE11731B2D3ECADD940B6961E1CBB38833AC6 E0A81FF68673322E5571AE559E74818A661328A21A6DA69D0002544EF613299A8AFB8AC4 90D6A7C500D4C80736CE957E7D91DDF2A23206F95144645ECE55B11781A735056CA3C222 E8D22908B30CBFD179F2C271D3FE12892A39FAF89CC0021A18D2014C2BA91D2279CAFCBF 91E95E47241E33F696E356477CCAFED961A190FB908413888A02E56859D0B28CC55D0D98 E8AF89096B3D8CE5120A34C77038CF05C81544F9E3A81A7BE2BD800A825C3CFDF48DA4F3 781CA0A6315F91A6D132C785A1FCBD6E70AD0DF88779A901687155E053986B5F1FE35DEB EDB2B461896E53E4394C6684D2C02284090E1049D467D63D2433137291ED8036B0144052 0B0085C9B35F8991FDEF4E95DD3EA49B592A729BCAC4FACF83C85947D97C41C53018C93C 0BC5F5D47EA64A3492BD74D3584BB4A2BB6CB2D313CE084E08FEC63411D0FD14218B8913 0124AD989E043E6458D1F8FF26992B4CE02983FA54FC967C9C6CD8F09E3861657F62309F A53A4F17846359CA50CA8699BD2F597021365BF357F2C8F7C1BE8FD7BB02EB78B1C5CF57 F6342109C887CDFBE11F08A87A7051969250B8E647055AA935E158C511849852AB049902 66E482F54D6C3C8B2CA6DFB173E08784948008C3235CC368D9DC64B4DE4314F5C3814848 9991E56CB71B3331F4F8905B9C62B59131C643B8114CD1A1987CC6E097A07E59496C6257 64E66FCD50907F4B55FFCCFFD3A162C24114EB0347B8AB039AE235B9765355FF4DA94001 B9F139724D133B782893199A07B1E169D430CF6D58B1D4C95B7BD424AFE223B224382EDB 236E7D5D43B2309CA05C1AFEE824FC6102F4D6775F1591FFBBF2F019F880EB6DF1E58B1B 54202F2CEEC7EDF1B9628E1D1C0ED086A44622D21F4C89889FA23244193A1DF4EFCC4B49 184445B88B54043AC3896FF395ED9CE17B6EDEE7A402147E5439564B501F319EF834AE73 DC4E13DDC6585C61D5C23F9C150DC2E493EA55ECEC0ABF47CD99E4D2C1B001819160A46B 4CC03DC47F178CB7BE65C00BC0F0E75E565501650490FF38F2489277882D1146C3D335B6 D988E29ACBFCFD3008509516668E1E7CDD1669A08247116C272A581068A78704C69E6053 58D292B8A80D7653AED148438AEE04E94FEA01C38C62F85DECDDB09CBA8485F755CB5CD5 448CC872E053DB508197FCCC271E5AE8B243C773991449CB39DE0E12F3EF39E838A2274C 78F1B2C98B30E963AD2120AC645BF3135192094FAA4465F7D3ECA620FC3A7E3CCF42253F 0EB2D4F03AB2B6089A4D8F72FBA847601A4D96A2AC3DE0BF3DC1DC3E30CD0491B1251356 6D40EA3ED980C78CF7D70BF9A9635DE359FE210D0961667A13892A2E020313C35A95B676 43E36E04A7D6DC16AB2596B7399B3F79B7915251DB75917FC61EF782C7346C1A3BF4DB7E FAD48C6D0FB5C8E152E7B4B481B4547E58D96FCA704EF5395E696BC47721D19B85898DDC 55CFB8897DF720477529516A815B82D92B59A4ECB02CFDFC817EC69B424DA944F266D54A EDBB131BEE4B6BCFAAB691AF4D20C9A77C15BF153EC6D0D45845719A20ABEB168F28F3DD 50A83F1323AFB1794C6958A14CE85D579CFE87C6C4587278837C2CE8F16CE62817DE8E6D FC4EF596EBFE6B1B4648E876FB80A7B847F010999DDACE284C64D79F30BFDACDA5118724 3E2A32D4B6E0031438E50DDC65987FCD8DF444DE74E62E5C2EC23CD84FBB482DD4243E60 6A74B5D575C92B116B55722B148B008063DEACA817C694C33AE146E707810B7FEE9154AB 6488433E5AD6FE75409849162FB793A631F51157E33468FC46250E7AB613D6128677F4D8 E9A8A113FF66A298DCE42DBFEF1D4467785CCC3CE1EC5DA416D9FC37CB3FAB9E7F4649FE 2DDE9B8F7C572813FBADA8995AA8F612EBA3FCFF30F563C90BE731EC4256D1E036FEC417 F403070B18550D0925727008EC6323E9467FE02C63609503F9FB35C6F509AA01B48DA631 FC1ABB167910B686320C0BCE269687A35044C415E7666376925998FCB0D3B84571C91095 1EA8F4C5BD71EA02F5E5E3EF960700F73ABECD885CF9BF4E0E61BBB01CBAE951E6811406 92CF9D3C5002C14E87AFC062F45EF890D5BE84DE441F5CF695BC99362C2D7E8F2C9E1C28 6A93264E05452D1B397401D24CD7F2F626C7F478409BD8D872C0578F6B2E8A296587AC8B 0EFA690635F4D661E60039E370CD9ED23D5DBBBB16BA94997AFEB214363F4FAE2EC096E4 7F8EFD691273C86C3F1A24A1A0086058DDF0060B4E4B73951099583F9AB8B27660FD6F7A F6F616C79E476F16424B0D4461BE6EC9D4F670A9E614FEAE20C616979071307AC6497D95 FDF9BC01F1F7E02D72DFB5263B6F7026E8E68E27A49B3C6FC3384A7DB0F81E518B706454 6C9588E17DE0133E9201723EC91CA457DB0EC7F7F266A672EACFC2D61FB3478061539B65 D47B92D9EE4ADE23D1A47015C42874E3C25FBE8EE1A9A52C53AD3A24971B7DA965F11877 A6E2C2153B449D18280449130C02A84042304129272B7567CD3DDD9F5E5900EFC9DA854A FAB2A880AA656DF9549428521043A168EA191E3D91746FD52435AFC3D4AB98B7D4916D00 04B81EE5C538F55FEC9ECE6989A1A6AA36351B3C070B3B70FCC8F30910B9208E710FE66E 7D82E274E957B392868E5774884890B9A01DA3995E66B918FEFBEF2CE671B8329124C3CE EF49E85EA76093359DEFFE34E1E95AE602CB00985C49E08D92161C28451B09C7E67BD458 6CFE06F6BA514000449E249FE642810EF5FE92EB912F01375CEC93C6087E97D043B83EE4 6DC40AF288C97FF1DFA1D4D73E936203D050131D79AC112355CBDE9710F3D76C6118D36C B6B629A0B900B6CCB6DAE0EF633139E9D1525C2FD8630B3D77ADCA17D8CEE35AE088F523 4ED7D8FC888EF8E7540414CC0BCD112DF57DBCBB39675FBD756CEE7B3692AF226B589AD5 1322BC9D25D6B075049C4AED2EF58573D36B50C92F72B1C2574E60C47671637BA9BBA61D 90705179F1692926961AD6EF4C34CE7F9DC8F8284B313F4325D9173F62CA2AD704FBE695 8AF97401EA5CB9B8ABF66ADCAFF072132221BC477950C12E2D012219D83AC6CD189B79A1 ECF6AAD69DCB22AA4272845078FEA1C7642C6844E8870CBCC27634A423A7F3487AC740F3 9B1A06056822580D0538C7F9F205ED75913681140EDE8580699C6546CAA34F55BD4D8770 11FB5B56B8A8CF8F112517871E48E0C0AD084C3BE219762C98A8FAFB23CDBF33544CA549 42F77A5903E55A647A12F3549919CAC50A2ABB90232C7388C6840EC498377F43A6755133 605418C7D6A1C7C1F0E75ED650F4041B91731D80D9DC54FCA8EB5178C4C707B1857A7077 8BECEC8FFA9BAE1CF63DD421A04FBFD966D93676343DD121184F5E67FE8ED4BACFF6AD05 E4DAF591C285C3950049213E5415D74DA16D7DD713A11F61EF8B5F2B1D73CD21CEB9E202 F2F0AA3A4057B3710511CC3869B4B37D609D575ACBDD94ED0C1406EFAEDCC293D1961014 8065BC72EF71DCE03B0F7FFF682373C4D080C6E1026EDF9DB974BD113A5500F907B317A5 195C1176BB0E09419A604401173E91E33DA10BFF4C8399D1EF674222D2153E06C07F265B 59BDC8CE9B9C9C3467196B1F8A1AA620F376320860D30B108D16D409FF7323122FFF651C DEDCAC076A4EBF45611F59693FE28A152C52B350B953AD39DDC4C17ED1F5CB48C837940B E32DA0F4235C880F0CB622EFF4B3B35F791324CFE5F172486CF72D64FC236D15FA038CF7 E282BA5BE3158BA75D905F0F385D75BD0007912141A04370FA0825B1635324862A0255A0 5ED31A335B64E6F1FE5FD21FDC6A43798DFC95D7C2B9639FFC06ADB2CF1541EF86C83B19 0A51B1513DBE6C720D5A543B9C0F805C27EF77FA53EAFF731205F9D57270D2DDA2206610 7E4F6DA47C73CECC31C16E77B6F16233C8A79909FCD677EE235E9371A20DE7511DEBCF73 EBAF6BF2A46C8CB85E1077B276BAA76B9D103E6DE30BD963D9E076CB67366F0168DDBE6A D6026D21FCAA7BDA74873303306FD3B2597A489E1E765C5EE69540AC6929017D655284E7 B6F72510BF342A5F8638DC78D360C0AC682F7196701E612B315C1BF344FA6A4263186381 47EFC6B47893EC3E0025610C43FB13A1EC8EB7004D1FF07CBBCEF30E7534ACDDCFD02059 3037C432FE9E2B68979757F9065C32B73504682038F79332EB3CE152AD285F8FDB0B3B96 1D1A8F8AAFE56D76774031D7A5D0A7E23F0C7B9BDE4E30AAB801DC9D92549AD204623CA1 DE6B4DD3DDBF7A7FB3B7DBF0CFFFB6C04C3D6ADFCDEF229A11AFF6619A7F284DAEEF2C2B 321623B9CE5661B917CB259072036F8698720D7E1E25D7C2B16E98DE710278DA1DE15E7A 7CA22CE1448682FFEF46E949E9516FB5EF7F702994A03860029A875278C49636B7E1E0B3 667C2B4F31D91C222BC0356C8A33AFA15CCAAC04C6A918651B42C6AD39D0887C6998CEB8 F56479669FB42386C373D49B4B4880F90E9618A8B67098D70D3A419A65B61E11B4AB17A2 3DB73E236FCFD8EBD8E254493440B59C0596FE733A4D151E253623501715749C81953BB1 D5CBCE0B83F23A614E91B95FFE86A038E5382B8865537A5C65DFE6470F0710BD2E3F04E8 320A341B142F47238B14A6D79C1D7BDC6D34087A6942E9FDA2D986CF41007EDCED6313DA 15824656B4958AE989DB0EDC80BB012F81D2FB25C2B7F659CA37E7C6E6BE6A0314E60ACD 3BC71619DCE28263F1D9D8614E24E4ED04E1700E80C809E037696D427F3218D72BCBEF26 4E23912AB307ABE239700436A71445ABB56EDC7A96B3FF18F2747BD22DDC9506530C3743 8787F8378C4F4977470BD296814C9871EF8CFFBC526CCE9AEDDF2C5732D0835154FE1771 E163BAFBD3C0F5D5F72E848A57138941D0C2C4F0BF4A3C4CD88E9E63B1CE7D430F2100A3 15E8D2599C0457D60E78FAA1A9C6028096078B53B779D365D13A846AADDD291E5E6D2ED6 12E39B4EF16446400CC20AD56AB2944F1CC8D532A9C0CEB55A09A3BD7E09B9EF9C3F73BA BCCFB21C9377F417FCB6F344DC8BC6F5EE2571A83108E57D54F9ADFA8E21809716A23E87 31823BD647AC1300A5F009CE26EC52B5E98635D7F8511DE678F1F1CC40CB6B098B3A9F47 E41E8B2BCDDB9C2EB995AC46AE22AE68F63CCE55589128F517A296DA687850F92B3B9327 9E55048FB70B8A2BD05DE748929B860D3478CA805DFE19A713AB228587ED794D738D0DCF A4ED4AA0A362F3F59255F568B59E4B0DFC1C5E813E98A072CB119C0AD8ED71288ADE9685 5D2A976ED717F48ED2C975D93CDC793670448B190A8ECC4D7785225C3C1AF86594A0F787 5AA8347DDDF479AF4122EA1E8FC1F20A714D3FDF87B636C0B546DCE40BAC1BA4755F49E0 592D81B4C3AB9E126ACF00201A52B6DCCF23F86899AB0B099809F612DE9E9153DDFC5431 E553E491F6BE2CB46084C00D6052204A23021EEBB66F33A21F46E90E397FAE38AC0B009D 9DE39ED8C20136EEDCAF626D7F1E448528A0EFBCA8662A16C10DBAFB0585C8B14418CC4D 54214F4999CD74B305973E5D6C7C53982EE7AF18900DC4C34D9C2111F38C13C9FA05D7D2 232A5856BAD973B89657432DB3080968E9A384760CB3DA8A81E4A943EA7A3F31AC888B4F 9D7AAA08D614D938354C0FA49C1C9D02DF28088963CDBCD45524C7F05A7D19882822E991 3F280DC20FAB7B3B3BE8A32F2630C24D65A147E0BE70D58968664A602122A3AE1AAB3C70 132F91E393C998B5C09210346520E65898A90ED8A342B51061C493A7EC7B720BECBC726B 55B4223389B6AE08AD3A903167580AAB3B44A05C35C09CB66671A3D3357064B804C970C1 4FC020AE3A9C41748117B0C5AB43900B9DC1340D604B94EAE0C9CBAE75E7FA4B842B8BB3 411B91ECB713BE72C8476D50D69DA6A07F335582B40591EDA213176058F8267A43930CA7 E1D426454794696318DF32A8A7A1797EA2FAB525695799982216CB7131BC61B0F16C7DC0 F6746294C1FB18CC5DDBB29DCE832C117A2BD2D8274ADC02639B5601FB49B4633FEF0575 02A88D9042D4FA15451E09CF6957BCD91BCF91640AB0DFE0D053C380D224B8FE1066606A 01453162F0D716C72EE10BAB8BDFE39B72B9EB28186E5E87748D0CD38EBC19E49B40C9D1 CAED9571B5F07999930DA21B35421EBFCA92FA4932C0F139D0E7F9D033EC7849D850B252 228ECFDECF9C1A8D8F5F309C5254A11E554E9BC09D319A1F7ACF03FCE8CDD1589C3916FD 7BFA9C3D85C53DB3A7D9DF046B0BA7662D1004197AD3C87250C25ADC8C00E04BD4F9C247 B3DFD078B3AA5D62BB698809040E58ADC8AF08E9D3DE51F27E3F12A04E7EBA5486AB94C6 7CD10EAF685C68717F10F5B50574D5FC69E10352B84A9539F1AC9421A449FFA07D63F819 6F6D65AE3D0F6C4E8523E61135A83EDF7FB2D6C31C0A3790E5DF33B16E3A5CC21E7805F1 073B8D5E2011B01F78261CD0C22FE11EA6F69AA7496FB97847A1CB5A20EECBAFB8554040 27696BD79F9831A5E1A94C73CA1775B080E1AE74EAF4EEB89857642B3A2D4966D51B1C29 35A5780E6F53574666F48A92FFFD808A33BC684F18B1B2B56A12F3B3E43B57E3D39BBC0D B49EE28C341209F8E9593AF8845F64968C84A5073844F72919A30134B136F85F59B9F234 48A2B452564D55AA8B1468CDA3CD666B213DF958AC48B406DA5A36194D75C88BEDC2FAEB 72F20358D490DC2956362E8981530C01E944ECCAC3B5514AC196D22177079B2320E811F0 B5B2175447E26146201B8DF1410F6B34981D208C5618472E0FAACBD87DC194EA04B29E0F E5964FC2D2606835F3C8E13500C3A8249E804ACDD168E844D06BCD9CB284153449A708D5 64E7F4C6A73AD5C69E1CA6C332694825ADE1990A700EADC28BBC66F065E0C9A1ECA003E1 EC08666EECBBEE542BB3835FF7C7A80B3B23F0B55A4715078F6EE67BC6D20E378992CA03 5937D3A7470D93AC0C5B9A3AF4DD81E8381E1D2A35FE7A274FF116764D01BB3DEA7821F6 72871038FC9478D5842E3D1CEA98DBD8010CB89B1A662F92D622CF0331208118281AB494 39C0FD38BA2433C3522FDCFEF4E0226BB204414430E2F2EF02521063D8152CDA8F92CBDE 10E54FFADD30ACBFEDCFCD0B72266880A088D6B461B8902FE7A8383A1A034BB64EFD5B1C 496E6BBAA444534E61423DD2C068A23579DD6A418DD1093FEFF9DF9004DEE4796711B225 F981802C2579746D910F7659B059A46F6AB984B6B4AD3F74708506B7E45E5CCE9D0993FF F04C4A157793D2DC27C45366F751E6464ACBB2AA7E04823E887E162B295BA76D1CD7D8EC 5B70C50AABBF87ECD286BAA66B336D4E79D59BA971D11ACE1F7447FDB97B2C1BD20A9987 43AEA49E71CCAE5B0976DF962EF9E66EE9CF94FE13F8142588738135F09279D65CB93854 B6A609271AD0068DE1FDAB19FF1578A2B6699AAC1F7FC4C7161D8756703D552F494BB944 3607E07EF63C7A44B54600FA777E3BC40007D0E945B55A079D281E072D91A7EDB93869E6 82102CBEB51AB759A85C22E0FED963B546E73DA671AAD9C842A8968E90935E8194156888 9695B531FC2985FFF943FF7C267B213E1A67ABC86253811BB8DEFFA4A971C4D5B008653E 8B0BC2D1D53F4D03326434A7919FD244B828A5C98DC45A87075EAD441E8B025DD3430849 56CEFE105E535E22D0778A30C415DFA81F12F83323082DB5D6D92F5C4A9E25F960FBE0DE 660CF2EBEBE56C036F6CA27C6FEC9461E3F8CBF05A36C377743841DA9B9C354D15F9806A 98038CDBDD4751DCE02BFD6170E58A961B9DC4685343EC4D660A8675C6247482C73C239A 969DA9E4C7A802F1522AF0017BF2F1EE7F193AE0E99ECA6A9D2C0E6DF7E4EA8E638CF072 234837F0909600EFF3947A113FB196A38D777542AFD6B7DC09C671E0CA8C5D372FA4C76B 7214CD7AC7602295DB4E07F9C13C266AC2C85047794BF1478FC3C626AE9D8AD7A34FE783 B31F105D50D4437F76308A917C1E7F0C80424705E6260875B4917BE612DC1336195B8972 0E0D33C1A2413220C0A14143AE98DE82C88C11E22E46C5CEF77BB9674F169664FAAF2C8B 7FF6E2D7A19FCEFFBF50F93DF59A67372E30776E701F82788AA825227C04A71CD553EB8D C0F661AB8A95745F872DDDFA913D7BC72EF4420CCB8BC01CC1CEE21C7F2C36A5D5C11922 0FB299DC3ACED283BDF3D8070C26EDA03292F98423B5CBDE0E4A73D68EF7588EFF439E1A 72C8B2FB2A7BD12D17486E7327BE8C97360C3ADED4A973EA8ACA475EDD8907F1BBF17C1E B318A146E47358DECF2D9F1657E5D4A0ED2AFF56ACA9D74549ED75D99A2CB0445EEF7007 DC693A1539965CDCFBF583AF3EA2D32369CEDF720A16C5598518886FE349454EF80603FF 9329CE452A9FE0F57098A2086AF1F2E036519F98C54033E236918FF20B6573E05DB6CCBD 4A8DD4DB846BF1374826F21205BF53D5756CD99DBA457DE1DABF073ABF6E3F562255D320 2741A6F696F79915DA670FCEEBA37CA10547E6F9B92EEA80EDC2E8049210A6D25E859629 B3C52A20714AB5540CD19F4F9512B13613598DD1A92258E74491C452E7A7DC5D7F67C800 F5FB3B778771B15034871F68F895DA8C72FEF0EA19E7AAB8EAFC7BDD8960C1E3770E3CAB E3629316940EAE95CA782F90C86E161565882E101D513359C9922A0694EB2DC47DFDA895 83533768751289DB52E5FE566B76D7ACB689A9AF91746522317766B1B220E6BC9C73E7C9 8A3C15BDEC3F11A480566E0106E9CA5E6208C1A574CBAD240A77B030F47BE3F38A555723 F5297E9AB6F29C5242D1CB1F0170FBE979FA8633D1DD210978A389EE002C749034B584E1 A1883CB7C8C8D2195606890E25590441BD212719A778EB0F11014C00D2F4EEEF74078DF5 4DEF56D6C9F4B92907160DBEBE852278427F637CFA9674F9FC1652FB7D3334E7C9A3B038 E91BC319650F5E005257E380769B57A27EFE84622D873CB0B3B764122ACBC5A80F397F58 6FB9B2F6341BD3053FFC5B4A7935BC9C2E67F10B6D6EDCD70DDBE1BFD455B90D77EB8F41 BDDAF042A02286C7AAB802572EABBA7C2BC2F732E5744FAD3F7A72D4B04185518D9A0C06 28460636FF663C3519BD6F033DF3F276EAB35EE7CD6033FF449E392614D38083302DC8C0 729FC2182A396CCEAFC31E56BAB9AD94605517B1012719B0C8720E6A8D0BC54619FDCFC9 EFA5FBE841DDFA82A6F8B71BAAD5B2D2ABA37A22F67B012D4065E4146C527FCE711794B5 94C3CA3F6F807322ADC14994CD51DB80A1758F4011E35D92EFAAF0BDE3EB763CEF84B8DA 8244DD9AFCFC9153AF52E0E7E102F75396CF308FEA64841BACD4B578E702C5D70CBF9132 8563E0D7EA4185B48DDC4E55611018AB7B3E3C80A649ACB98E4454D5A98D8DC4EF911A98 E9369DE55F926F939488759A5B64C2914C143EA51540EAC1F8ACE31FFF7B015AAAD73091 B73C3D79840CAF29D3111E33C815C0DADC598C26CC69B41BA96F7FAE1BC493D268BAF398 11E70E517E0561505E0CED4A0BE43E87253BB28A5A1036EBB522C51F87D17B4AEDA62075 69D415701EF5585B0B8BFCC3CB4BDF8FC8DB06C39E3EE7843CD5278DD7AFBBF8B5848D92 E729A789D028DA36C1C39014121117E6595B12DD7F12E589E46207ACAB3DDD553C4CE826 08698D53CF06B053560B468BF8F4112B2B7B5CBEA7F654EE0292B5A99E24F0DA4DDC3AC4 1D71A167D41B29ED1511607B4AC9B686C71D7C1A386DAC0CE8185571E18FB8B513741BD4 8858E2E879CC5FC9F6100FBBF8BB811430C3574174656EFAE81097955E02356C55D879EA CAE0D9FA4DDAB4A41247ADA33396FD32734CC1233F7882AA47E198377C4521C2196793E8 5F1FD0C6E825E7555251487D941722454B99244C4D0808004CDECA458BD508B11E38EF5F BF27DF1818ABC984D5A7723C7CD8202C1D066EE5BE8C0F1941CE31A88A76C5A499FE94E5 4DC98A6F91C466D6A12C702F8D6C09F7401AC7C8F96C239BE7EA5A4F1A1FAF349E7F3EC7 9D6DB7D98DC3FEEF9C031407EDB0C8D82CB4F9EA9565D6231CE7E78AD51B84C741C5D176 25932D0CF72EB34A6AFD0E5B3E0439BA4F1CC609C7C482F45279AED1064EB83F96C07EE9 6AA31637F149987A444D3404F660FE08AD615D532010EF029BB495EE0C8D1A2A89067039 AB38F0A2210358F9113DBDB7B91B78782E57E0DB080CA7895E6905EB0AC76826B0DE90B9 52607A92A9BB7F2C547A5058E861DB6E73C178E7A5BD96148A393FCE1A602C5D9A0A6B6E 0DF7FF6797F77AEB833CEA598B739CEC77D147CFBC5BA42FD0C19D9AA4E4811914569782 4911D31BDAD8C269EE3A54E5F9C26DD99FE9B9EA04501F6622074769D423BAF3CEC30377 83B5D9E9151064C2074401BAF6DF82A21A5788965DB79D817670B121D0C9D2B17B7B75C2 5EADD8B1FB623B8494CDA45F4955811012E4CF7D82C93306BBA522F3458DDF542D4D14A7 A87A03E6DC429D69268F8780DE2C5938BD6BF41A94F110F2AD7BAA404D9B26F900D0727E 4588C364210F9D9256B7D74F7A324F5B645FE3F1E722653B8E71B69CA8C773E8D784DC8D C1894069B34E88BBF06E1365AA056BD472A01022E710E01D475D67EB4888594452D655E2 843FA17FE9C8E210C1B589C2A60F8FEE84187D0F1F0DC81C014890973096D6B351DEEB50 EE516DD3B0D6CD871D6166449DCD91D2B6B7DAAE97DD4E5571E93A5CC15F86AD2E67C408 3DA667BA04A4DBB64A6BF058A693E0484E9434A0090E9ED97FD0806C6A9A24AF68F60F33 56F66F3E1271CF583D98315E49E7B63CCD2566A30A4E281A59F6185DE90253258620B44F B08AF520169813570014A76C680ACAD0D28896018EF81A0C1919834E3388ADD18C6CC26E D3919D19A5708FE8B53AC0754A69F3CDA2E65A62D13080383D4B438D74A1CD778A4C58E6 2631414E27FCDC82FC054FC2F1917CA0C75E27AE74415DBF9A9ECEB2F09E3BCDEB17E195 3F3A2AA2A0F7D1486E28641EA51F2487C2BF7B7B571C67AC4BD27DF48DAE222648BF547E 21C145B94A352D57DE634FA06438EF831210D6DEC81BBA930BD767D1152AA8D9CB5DD775 4AD4B0769267C1D65279EA16642D8ADB2A3C4D3D554CD4C028BE5115B2B7E9C673A356C0 0AC1F188253B73B9AF4BB4E028D7168EEBD6597E2EE38013EC55C3470097354727A97676 D9F4CBEACC53EAAB4C735EF48887647A20123625099AEF743A9158B7297E836BA43F4F2F 39EBD1AF07BD4DBB40A32E35C39C213976A93CF9F547BEA374F5EEDEE70D5984D6E5CC5C 431BE4CA7E5AD624980DF7CB9F176C18D7DCF73570A7C6CAAFD28471E13F0A07D39C5C85 D9EC6074F0DD6ABA48CC7CBEA27F5E78E4B58B1B6CEB9D564B8F2AE0A8F7A29D2040F29B 67336126E2552F7D31A5E57DD094E569DEC1436C92BE9564BED1A19AF516731A49E91AA2 DC43A5157AFA174E4A68EEF3026A1FF72B7A585353E88312075F5973FE53704AB2113CF6 8236E4032DEEBC41DB466307D1DBD7BE4D5C1572B79968D3E28086CECD20D19155BBE2A9 C3A33A3B1E40FF0EC8FF533BFE0CFDE8184C807C0D79481672B78084E8C1DE251411EE98 DE713D32C65739CCD479617206BB87A38EB386755E443935319D94F014FA78277AC36EF2 A9B5F969FC387A1F25899C5BB2299A851B326F349892D06F08858358E8184296F5FA1E51 90186E0F27AF4C286DF1EF6C3AFCE456A9766EE61D4A1776E52800891D13CDCD246D71EB 098C5274BF7FB53BD903AD7549D9FE41476FE86545E0474DEB8F3F2136D7E49AD7727555 2A4BE67F6B0B1480CCB88D584663248F6BE26E4DB3A7C4AB1D1EE59C7CC4656F405CBD23 98902C9BC1A000F550813FE71C020AE1C13B1764366688B38EC460D3D4F741B231466991 BB2426DF7B3D0AFE7F64EC79B9B75D513F71A1DB0B2AE610D2703028A0D28E8E2324B7B0 98CDD3E83F164DE37048D621AAC41DBF17BEACB0F0762F44746D92D41D73397C1CA3A967 3DB5F49E3EEA5D680461310F72E89A036EAED6BC25FE1571F6494B066A06096705201169 2FD0842A7A586F86497476B7BEDB03AF3EF8ADA80C7A753695DCADEFA5ADF705DD530F73 83B8E3481FD759AC7D414C486EFDBDADF232E6A862D7DFB5C2FFB8A904E0C001DCA79849 56C2E68012CC4F0011796D8A6F04D239DC7130AAD6D2AADB9532CCE47288CC932893C06E 535F49E402048DDDA831F5B66E555C9F1EF6E95066C47DA8D241062FF09E41265F788455 42466E90786C58AE11B3354154B34BBEAF1A20C3AC5B8679FA76CF32CE75290689476F52 C71B114EE8C88DCCE74820FE9F27EC4CDE4AA157FAB99E2E7AB54BEF2D117FE8CC8CB86D 8C07C8B48A54940A85A4929F9F761CB03B20E0C56DD0614C183D1DAFA8EAF7FF1E37BC0A 7908F32B0938F24E816BA23159F6F0DAEDF54E4D5383B0C28C3FC693ACBF0862105B80D6 6FBC86372398600BF688239CE694E6C7D3A42A1B067F59F2E1B2B7E987EDED9A5CB5FC10 8DC053C5D144696C33D4C57DFBE3E1FB6B18A0887326E1551CBB43C36E4349A87AFA43AE DF47249F6B1B1A88F00C9275F47D45134AF25E1BDCC5465C299CEEB59C0F54FFA98D912F 3002F9DE1933369173C1727607FD3FDA6E87F7DD118664D2488F57D13ABCDD65BA56BA67 8293EF05C12038E0B065366D9A339504C73783367F7B0DE78A5AED0905F65BF1A157896A 9439E38699472C78595351E4A0E6AB5D0AF7E3ABDCADA251CB82710244BF6E9FD38E6CC6 9574FA9DA7C59EFF0009B9EF3F1F406B79DAC60E894F174E62D83E58DCABA917C7B80887 8562482A4CB8AD950DBCB096E72552620DACF8C89704E21799288103B8AE088FCDCD244D 8C6DE55CD9D2FBA7515697BC47E05D9FC7BDEAFC6C9197D05C50A19D4AF60CE9BD759611 420989FCEF798AC59F0E95960DB0B21E6E041F497B29BB0F77AC74A41972C99F50C9D6D8 112EBD9E636565D2DF8B75B2E8F4DF96D5F731E55AFC4CF9A345B7BE149E7C47C20BBB43 8F735C3E2D8DB58351FD35D27C47AE1279B8AE1C982FF81FC3689BED3387E6A155A7BAC5 7B3F2AF0176EC084368E0B3290A3B44A1E6E5D8C3929E13344C0221A809CB92110B1867E D2E690C3A11FA3C9A27F2EE0E8DA920DABD277F17E7065B7A5666CCA86C91B5199A2DFE5 FED7FCB2C37B13B946F40C6B0535BE8C8540BC7405FF8FC985999F8AC84C07B49D4E5F56 A39195A4C78E307CFAC7F0EB8FBFB010825E4209868BA7CBCD801250997302EEE2660906 E0C4DA5795B613B5102F6823943FE38358D50BEDFAAE3C5FE010A6B3CB50140F906E4967 BADE930D16757442D6886CFCFA4A1C47917101CC32C5354F2A65DFF68EF70EAEF88F37FA 89D8F7A336905E650CF8E5206D8B8990B9E1B55453BE207E6CF644F51709342B4879ACC7 BD2F6EE2E0D256C104DE222DC4CD98083CF54A126090555535AF17C0C015B79FE3F6B883 FF34A6973DC2D58FD5D157CA6C359ED23D25D262EE355FAFDADAA29E0CD504C142EFEDD6 5B8D8FC03198055711AE0618EFDE4DCEC98EB57DC5DD7F22DD49F43DE21D845C9BAAC593 B4147BAD084DB932AC6321761BCE2D21C805CECA748522AAB6248515BFB17D7CE90E1358 D571FEC08FC174ACA7B8393CE16C2C0E2DD808C0E5CD5D37D270B10A5713B12BB5CA6F9E 61413F5E132C993F588779610F387248511B8B885E8D6A44B7247ADCC5D34017713AD99A F78E20089163B595473136BB60D89B92AFD1E55FA1170B4ACBDA063A3DA4C3AF39756A25 1425863B383B406641B4E7E1B3714BE6C3F2BD608D7E4EA876E434A0AE725A77B7EDBD60 0A96D20AD888BFD3A80749AF4D2FABE71D75B3983341E0E9CC80B7EC30D5AE3198EA4527 9B070E54D209DF6CA15D128C453782AE7415F64EDDA45D9FAAC3F1FC92685D4D81312443 B35AD6E2ECF081B4530D669C23A2EBFEEB7B298BB0D3F260218F9791EFC7F28D925FEE4F 78312F5A6639A18478F2A7751A86AF845BD52C2DB8E2343DEE949A4BEF8029538F39700B 0E7FD3C61B897E6366417A9B1E639812182DF2E61FD408B7A0A9927CF7BBBC276958EFEB BAEA2DDDE04293914EF72DF06C8CE6DCB5AE25B731731F6560813B2976AE39BFD0E75719 F09D7B11FA691B1D9B2907C8328727B2AFA49CA2EC6E326D3240FCAF0A336570F18480E5 69CDB44B75C0D18B95078BCC50F4EDE5C62875EB4DDBE44E16D51C8223B16EF7AE257939 C11D4127AE359F8F1E672776C9AB401E4CDF91136A09583B2A0918BB795D77B0022B01E7 B828D9D9954D9BE4EF8BE313B4A6A346941AEC1ACD65AFD76EAB64CEDEC19C5E4EC3F296 AE27876E8CD0FC81EB9C50543BE51493FB4D5DB8E34E022D84E391BDE37F8181C024605B A65601459ACD5EFC068E842E73425640904E14738507F9655654605FBE67C7AC7262ED11 192D3CB3635B6699688700A97BCDAFE58B84A15530E1D37D6688A5913127CEE09DE5F6E6 AA0DB8E6AC43D32993D3B1C5DAAECB202A70E7AE966F6E494028FFF169D891B2E2EC1669 06938B64C716748F933D061A4D2FA1ED1B07B6BE5F8EB3B9780BB2AA4013B7EA53FDF5A1 A9B53C84A4BC6397C0C9B8CDF3428B5CDF59A6C6B9222F21BA3881CA1430CCC78EE8E726 E1EF1029387BF666E9D86C7F7B40612ACC6BD3A301D230719935FF1893C0EB88BCB8A963 595C22F3D4197EA6270CD9AF77F090AA7AB143F95EC3379A996D92AC73E59ED8ADDB600F A79EF2812DB2AE9C281C27C83E59041CEE1490FA9C4DF66B2B92FAC010997F0C36386608 375E61F59E6ABD0A8781CE8D2B5EF546A34F4AA12ACACEA34A7507A56BCFBC8153582FF2 2D982C3184E4285B30457FCDA8AC31CCD3FB9181288BCEA7B9A4AF1BC821926CFD6C9E86 D892DD4676B899BD99F7E77F7FDFB5E41E5D40A4C90227315A560F911B4908471C401CEF D76A319D0D43722901596865382CCB3BB9EDBCC963E8C36BCF6F703279831250CBC3E922 E1FFDE2504DBC00850E3814BEC2C5A25CCB5024B15389A53D20C3ACE64FC6DA2FB7DBDBF B609EC55A3CD603767CDE992008C6D6286F4AFC09A9583EFD5505FCC7E8C764C461BE15D 62F04EDDCE3CAF789913BDD2BD4A4D9762B4AD5EA573A7D7CEE1E967CBBA695A52C34891 4A912C4C8716D9FBD2802976E86836CACE1794C3430520B0D62CC4E82E6EA09A36FC5D71 F3B901973185CC8FE2348C8280D7B100383EE9B57A0B928ED5FDB6B453EB467E66C2B42B 4671D329FA0F5DFBF3C9019373914D331336953084D6B05D4203B13E2BFB9EE32F24EA41 5C574D4BA7F51ED96F8D702D0C0D7E38FC224CAA804B041936DDF8123EB413E1AE4E408B 58C63C5DF3DACEF16865F3AF220C057DB92170695265B8E6B673B413D5145AC5A77C4391 AD0F6B428117F3D75B99F00B0689A066A901AF969742222C80D5437207FAB82B4B6E64D7 B19DC24EC12E58B7326FFA03964AB7B755874E5C3B356E2DB43C29596C63E6553EE6FD43 C139DDAB8BDD03DE9CEC2F3A94AAF7D2C7D6040F6934C25AC504610DD398EC725F9B293B 0588601CA5561E82B916B83365E68A40CAD9BF22A61CF65BB3813625B30D32BB2BF66518 8AD59B7541EDE3048BDDCD9CAB7FEF7490324CA37F6DB39CA6FFCA0BA6593F0FEE5E47B6 2C0B3AF1392F170A7EF24952DDB89A38D679EB8CF4434F6E9FFA428CC8B957E82A388A75 98C2F2CF7781474D292525250B6B087DF6822287280505C75706214517F89C5692133878 EB9901D1097C36BD4955F52EE6BDFFF9DA5DD1B59F49DF18A23421D4D503C8F4F0BA05A5 5870152EA36405870D074D76A31AD0A8378C9A115EF1616C5E5A0C846481F931FBB810FC 35C0D75DEA696637B7A178CF393050A17A03E1C81063582A0C36A77F66EC70717A2B9AEE 82A91CF93E37470BCCDEDE14A1456B90C6658EBCB69BFD677B5567C204E7597E0EEC6D7B 02169C110D6856A178B4ED0A2C3497629E9E4BE20D7A19D3A87DCA65C3DB906741021E7C D8DF13A05D570D8E1E36511C83445DA2C4479BD8FCC03003FC7758AFE35D527F40A093BB F8DE1DD25D58797C6ABA4AD9DEEB2CC3C05B40954B2BB857BDB2687D4BF50E917956B5E5 16E4F94DE20F7FE0CADC0264227BEC67C0C25773FD573016B6089FE1C18D841ECEEB39B1 D153F1FCFC9A5B52AD5F25F63F776DE32E2AEEEBAD66615ACD411D05E02241D408BDB4AD BFE0391290FE731C452AF001D2E42E612C5A1C5B8F7ED5C8AE0F0157E3E4328B220FC33E ECCEC967EB1EA27ACD88A3AA4F88E948EEA179F4301843A0608928F2E204EC620F7157FB 8D492FD61A09A504EB68FD94BDBF403BFE9DA035C1A713102966D1C171E8492DB4FEBA38 C8B949DA2F581335F4DD522DE679820F0E349B33A868BD05DD4A8F13BB88F5265CD26D85 8AF017540113D8AA5B2C929BD67E0C59810727B0214734C67100D5FFA98B0A992355BAC4 8DF3C9D7206E7C96AC8CF937873134B861C9B1DB1874B764DFFCADC1754A924CBCA47F0A 4930EF98C5A97A7989345EC2E0AA2F60FEF429D069EA7D0DE835D748FC122E4B017EC962 652DC0F38D7C8852F66D0B6DB7E2DA55DD71F1C432C4EB316E933748784CCF4D38BEFE36 43582496A314D30042510A45D15F8412AB34D08FBA6BE7284774AABF097627BBC4F019D7 0DA1560D2C8259A5E90A523220BFC13F94585F9D22C662094B670B7ED993C59B878D4C6B C04D54FDD701307A7C05DF1605A590AB3724C5B5C20325822E20871D55F54C6EC1CAF79E 71140D0427AE0E7CC3C05A44216C33843D08BEC664BA13639120FFCE8CC11CCB187CDD55 F920F3D1594B17663CF16C67CA3B8DFC02BB3091FD1C8510E67361D41E82FE6A4103E864 0DD18265B7E21E2ED588089C2A02D0C9935C663B03855E02439DA880095B1BE183B42CDE EEAAE302EA4EFCDB27F6005D8E10645559571CF425AAF22AD8DA39DD2495AD082C54C8F0 E9DE25DA8CBD68580A95545C1CB6CA2393C909BA57DDAF0BA59271F5125D2764DD374600 0B20A22F67578ABE6BBFC4666497B0E6855694AEE40BA10105EAA70D1FC3524418CD074B 29EE44A42564B780EAE83E5097834E1306D5FAFD1F6653C2F8A036594E17FB7D611AC603 76893288D231BEDD192EFE7F35207BC48284C527E4E71F121F9FC6E2D08F5C799D34D124 0AD5FF4A1485D73CABC0B79A70592C790DA1B3B9369AA1F22B4930FFB834AF13376B23C6 B7D65A1D03B71550B8C7A243A1972BA0DAEA353322F8A3E83FD2E990DFF5B0AF212277D1 F3AF047BAEE46AE3A6B1A7C5302873E70793D018BA318C3A10F6BF4714836CA0251E2724 84F667DE876C6FCD243169F24213F25E567793BC02FDEDE6C5EACC4B63864919072229F9 D0A54D664606CFDBE5DBF21FFD0A8C3E517CC95356FCC09F7144920A0A11A4714C016B9F 72963225713A377ACCA650DBA18F789BF0BC4C089523EB232C13CC0721966B93DAE95367 ACB76E6E4321C579C751E4CEA879DD2CD827CC76159233FA643652A8D74B990004A378AF 80ECF47EA9789C98B502D9182C86DF23E8DB38C0543247B02CADFE49C102FC0AFF3754E5 591D69EF99D84814DD29EB2D5C23A4BE9AFE72854451EC5BE13923ACC517379A46DA2BDA CE39109402F5AABCD3CC308DB1BF02F6BEF18262C465C843EDFC308825B523595B6BE8E9 AD892D9A9B56EDBB938DDC4B7C2151EBE9343AC28872888DC5DFD8B75087E2D07097D1A8 6066E61B05D9DDBAD566BD44E16C26A1E1A354BE718A770A698A659167A60EAD5DDEFEB3 739AE31997DB6D9F44C5D9BFB4CDC4A8739AAD6D164059B76B066BCEA61FA322E31E0188 21C4990E7B992D2789A1FA4DDBCE931A2836DE61654519677F812A39C8588DEDA82A22EC 8B6D8909868C166946F027263395F2410870B560CDEA50E83D25444FFF7879EA6A444946 C3E4D0707DC26EEF1C85D223449DE4573E0BB7CC94971AEF53290EB537EA2F60B6ED5BA7 6B660DA2A1A2A0F8A0873B5B27E37F9753E6481F1DC2E87C89E74CEBF68F6E045A3D7CFB 5F6C841680BEA84980635BC9EF58CE4A12B576BC6CA854EF028ED98698072463D8151B69 85A2A9B0E4C891ACAD14E95217B29D30DA9BF49FF3AD5E96E0CAF14E6D01F4AED843F581 2ADADE38236C1B5BF261E6A04E43C2E99FD4686B4E381A4A6C081EC8D162AB0E554F413D 53AE9342DEE4789B7E5242103B1CEBB9C373FD4AB32183EEED1762AB6A07C37350B486A2 CF8CF1BFD3E512E425C163AB700BFBE0B6C5E1BE7306EE4AAFB590286A08692DAC8C21A8 C6AFA0BBF8204B7A80B95B473BEC6C47F78CBFA02997A0D54463E1124A74B107B34C3DEE C3221878A0070EF7B6818FD66ED70A95A1593EE0EF558DE6B2800A4DE6170B20643D1876 74B3869AF19298770BEE3E7B62869DB9D04ABBBB37364DA87BABBADFB9A94C8349530D03 062226EB446B00D58EB907EFA3F1A9CBB3822AEBE74FCAE76BF29E7E9B06AE5465BF2D45 F4625064DBE95800266FC94C89F6414F5D81D5B4EF62B9BDFEC1CDBEADCB0381D190A04F FD23E1CFAE6589AB57E839DF033F744D3F99FBCA01E82478B49E568C696D3626850AE1CD E1C249DC389407CC4F835D49685C7F732BAC243CA80939F3AFA17A3DD63F3DBCB269E60D B7F1DA9743823980B58443A21379BC3CB39EC425012A1F5EB7191CC179585758C501409D F27A1449B535C0BC1352AD9C8F755BBF148D4C07A3A8F21F3D209BA42C1F6C2EA763BC8E 9B9D9729B3827134254A43F765E86A01DC7AB79B5BBE8D0B1655FDBA74506F2B973184A9 1FB8EC1BB3B5E1599E4546A2C5C1842EAEC16C21D0E794C6D24F9C2B9606E8E85A9C3648 E679B613685DC6E3A33DCF5D0BD2F8BB02D328205886D048AF8BBEAB3237197292344B09 76F2BADE2D1F9ECCFFC3D75591DC5321ACDE290A60D6EF88C5155DC267F942B7C097D9DB 8246D8FD8048D76657A4EEEE7C48165A460686584180048A86296316759FD5AC82CB2A31 E5C5699014B859BD8A28CDE3141070F97A02E9C5C2083AA6621574595203733C3AF1823A 8B6E1A206362CCA6024C23873D852AD62A3D7152A3D0495970D377CADA94C5BA60AEC8A1 4434424033C18E207B72FABB56CA3F9910E03FCB569908E02620210577BCA527BD71A896 ECC9E89A6715F42713CC15C958C0ABFEAB70715649EE9F342C8A89EE434BD6D195CFE4A5 7905B4CFCFA0C6F9AD8432B55E7F6DEAC2AAC919047D9DD4F2E1BD5997904D2E6BBC6F71 644F3F613066428B090DA030B1848C85CF932054F2FF98032BF4F90A1E5BB7B47C66A6EC AD58E3ABBDAA591762B17C1F23845FCEEE063ED0F6FD04F9CB5849F8FD9A977A9FCB5BDC BC1575C4203B274D19C84B4A4AE6B15DAEDE1BD194762B73F4FC3F49C18B4C69823217E0 4723CEF259EB8985C0675602AA0C2072312603C0D9325389A6F72EE9B40808BC8A77F86C 7644DFE7218E1E46A80AA74C677F320282052F2DE6687F4293906CC54AB44F4A6CCE68DA 19E5101BFB60B8C676FD5A6C97526BF1694EAE37AB19F8D016F4CF6FDFB187677D48074E 256FC5E21E7753C454AB04810772295B9DA1642FC81D15987A587870D680FCC798A0C9B3 A816C702E64671E06641D3DD2FC6FD416792E826AF3068538831A2143C831F4C469904F7 F4F39FC35160A6B6B4D005C370EEE4C5528E823DEAB01490FE6C13E4E582016ECE647C59 9D468D2184077EA2003318DF7E97EED15F953EE8147D9745BE94083793BE770F9F0DCE01 BF02F73398ACB23595B1FCB3AC7E8F61E0BFAC39A77A613BFA1F63BA4A61D00CAF6BD8F9 45DA71D9FD398AB5B67E3EAB5166D88693411DF4FC2640ADB162DF550302C145D7F463FA 85ABD2FFA99C571E66867A72945AE59DAD27F91D53DC6A0232AD99E3E557F9C512FC3473 FA15F3BA67F110587F7603FB716D64F2009080EB8CFD922F9B0B48C585C3D5634AB40535 AD546174F7E6D02B0C5F1A0A4C7840798EEFE9289D4FF4EEA31B833A32DB84F86A12146B C32286E9A47E255D676445ED348557303439569D6A99E0DF8B87F74E419D3E04AE754C3E 15B824EDB19DC291A243208F100514BA1ECE1C95386DC2A2CAD1437EE7A35E3B7124E092 938686A185826F2F8AE1497CC8A1879B86418548CF84C77D3FB57433570FE5AE92E627D6 DC7E3B6105CEA469B380186D42C74E71511BF4963A9D4B96FD29B6A8F8A07BF308A0A89A 12B5911B0FF31CE3FF3211AD497DAEB63E11EE39F77E699BDE34761D19417CECA434767B 995C276563D70730EBAD12BF8926E7911B1E8DC5B71AB3D7189CC064CE80E42DCB0A3D5E 3D1BF0F801F58707805B5380580AA297646FD995BD013D305F04AC639EA8E0D8E58D2AC3 7FC16A60BF0C82A463B006379C15997E9D21F7AF48D31611ABF9512B9EEC02FEE032DBBE F8ED6EE2A014FC062C41FDE6E09129A69FE9CFFF85A9292F6CA771A9D09934D06137A290 E2E9E7E7B6FB6E6AC42A757AC63ABD527080633D7ACE4C75C1CE7915015B6C434EE2A6BA B610EE2B2018B66CF8B49EEBB0E397840BE7701EF03B23999FD10F0EDD3CAF56221B6539 63D06D3040274A18E6A0E6BBFF1F81BEB99AFD339ED534C88C1ACF084344363E2130B081 5F5949A2E4A8FCF73DEDD3D599C03817D57301F9AD32A4B4DD6EC5800229C8601EBC1853 E3E8A190A698107612D4A0D074D62CDB201558EA8C075D42FAC287FDADFDE11DBFC649B5 8AC5CB697C7C2B0A65B8869D772A80E73D4A62A4F74B7EF629320FF94B19BE796CE1411F 2B38C5671F31F25137D39FA4B66CB0C6FAE649058A461795C42C4E203DCF2C901D3AC98F 12115013FCFC42B52D6D67EAA1F4C03ABA8FD598BA966995FC99CCE7389AB34691F1CE18 01B0D513A19A4A895E75DACF74AE0EBECBE4381AF7BEE7EF8DB38A9667E33C3AA7C3B0CE 19133390A3397B9CB206DFA7F51D1B171BB981E9BD1DCD5BB2E50AE0B9A5F81785A96A29 96391641D0CB6E914C4ACBFB46B1B1DC28859935EF3D757AAD8F05E804EE8C5BF13550F8 1D6F3A75B3B4DAD4F164B28F062129D4CA22D0447C78605F89A43659ECA036F7EAEA67F9 1DB625EB7F02087E1991BBB1588F197B6CF5B70F2A0352854BF8A22C41296DFF0141A56C 209BC0DF2C27EB76C4E6F600FBB6EB5EAA6251774A5883D02693CBF13601F572534CA562 2A6E1C9147B3C1920549C759AC4C45560082743826B92829EDB85B730BE6CB60A226F265 0A0CEB0BF5AC97635C0354D0486DD4FC7AC61D25CB0DF0EB9E7F3831FB4F1E775F4FC07F 4104019B5AB17AE2D4A76EFABE2A82F78637F9E3917EE200B3AE7680C75504C1E9BB964F 0DD7B2B9A78F55A8AFCB34DD6770F59232F4B4D7ACD61AF37D8C7A1471FBCFC3F2547194 7A0D61F0EEAF456E35576598DD3F4684C087308559690F65E50E64A811BD25258FC0F821 5F686423C5C3D41048E0D8980265C97416C670E17744BC0D4C59778863D4C68A79F883F7 794D29FA1F3064772AFAAFB75CD55C1DAFC743A7D9E0A9A88BA9D30D4CCBADF36DB44663 F7D76B1B6A00742627F288DDA448D03F2A5B9C04BE5EE402C46B11CE986E8071FF0EC513 BC4E1934A7D054CE6862B2214F4540285A92F05C76FA27E0E75267223FD15628AD92ADCD 68EE77EA8411140D428AA2B1F311B081EA0B1FE4E12B41A8DD31F28DD7890422A5FBF00D 978DEBF3542B1784B72A0AD25F56BE84DEB69FCEA4D50A55075D3E57D7AB12C42D7F3F16 DA1360FB8353B3B2F30D9361B44E39E9CF4CA6607AE94FDF2C918A4A39433AEAE9634D7C 7821A1DC5A059DE95CDF0BBD04F7BDC220112AB22C5D00A3B076C901A1C109CD11DD190A F9379443C73F6BB6BFFD05BF58DD160109426C1D26C1329C8AB5C7BF38FA3C4E23A036BD 3C4CCEC939E4BB80917AA0C2510C30CDABC5DFF015A2BD83A617688A0CFDE171975AB675 4D3D47210747F5F211FF97AF26D842F8A2D7616B46C77DF8EF7FD3AEED728AA319F89B89 6585CBEF4961C78B4BA3FD99BFAAC15B6400BC72CCBD4009A720450947D6F56D22AC3303 E95E682ACA3692C2F7ABB66D19662D7CC001A6A67228CC079244F363DBC0486BA9B74CE4 A876980A99AF1746DC187DFC9B85731AEAD0A0602ECF84C37C03F545C6D115C348763B72 98795535576A1E8C4019B6B399D466C141F472F24826C6B7EFE505CEF7C9CB2567C8A3F3 C6D1A9DFE95D4FDB6300852EC109EBE0486C2A3202110F517118D850034E4A37A7C725D8 0C5140C292DE0FE5F4525F8B63ACAD3A199123DD0B6895B8F921407D55CFCDDDA9A4ACD0 BDF40E9F818C005FA33422EE5515CA83093D363E2719361626872F0D396BC9AD1B1B2CB1 FF7001148F98AFDB25C48534ED346FDCF6BC9E05A72410AE41C86D0875057A13B15D20AB 35FA6E4A2C39F1780BEB5F8D74F405D0E2F566D8D0C622134CA5088759BB982697375FCA 3827EDC9CA93205C318461B8029D0D99DB49993E8B4495819F827368FB183091D8B913CE 0C982AB24FDA46D5CD9525A98F41F7285994CCDCA0F646A5389DB9F800542065605D9321 ABCD35DCA2259E12D0D96E22A81D9F1329111F0A9172889629E9C980C3C177492F3B7A20 259327F793960969371F590A8381D351819314CD220CE11CFBEDA1020D79C82871B36897 B85F92E2E83BB62ECB9BBC552229F9C9FC3DCA08E1B431E610F7A5E13AA291F874F797FF 9F7B0A591370C06B132809600AC0F912AEEE821CC0644A405EAE6208C2BAC7A48CA22EE7 A90926509D72EF6DC26C2728514C2D68D07026B47CF335D806786D6401E080ED02A3E7D1 83DF3EF1B4FBBA7EBB6535E2B14947AFCD60C67B30A900CF211996F66A1242DBEE20B80F C97F655342CA440EDEAB0687E519371A53B07A361916CC20C51B4C5F7884E1CDA8200845 662F9F8379FEA05998B53A4564C62D90E29E6E8FCBFAF137A33A7697F6EF12F5B883DC73 EFE49533D81B222516FE2399A8330A8A94C60F89E66618087A17B4A5ED4C7E8E1908DD0C E4D25DF08220C1F999AA092EEA87CFBF285A4F416260EC4796525EC773DD9904A6B95EC6 52A6966C37B6831AD4CFEEC27743959B8D40E7D1B5DD4A64BB756A46F810E18D26E6E432 973F8F7CE45C6F1F9F94B5D994F5FEE4B88E7A04B59B6599F8C7940557D333C61555E28C 6E1F711F4B269C2F019782B050F39FD4312522055D9D155110B8A11C5F3D4A9CFB482436 47134A3A711EE58526B78D7F2596D766B6E6B7BA3EC06E93B1B6EC87A11AEE2EFC34A5BE 609CFEB7FD06F85A3C4A4CE0460413991EE3D547A78F6F7ED4E5CDA68E3D6F5FA1B5DCFF 84BEDFAF35F0C4BF312A2AA8B5FB1098CC77CC886A4B85EE0328952FFF51503762EC6F4E 7FE20B7D35921116FA72F6FF3B7E12C4D882F0C0AB52C5C1FC6F985EAD7E574354150DF8 9C099408AD024EF4E6278C30CEDBFAF0573803EDBD8AB8C51E680EA6B6DE47EB0CB0F16E 6B01FFB51EE237D220A39DA85092830CFFD9CEC0B032B786DF16CF087BF623A081B626B3 91FDD20F63436DE40190766D180E93BBC38058BE0401F279EE305C911DECB2DF691DFEB7 383E63CED2F4EFE5DC69CC96630B18E09873C5546CCED1A27E095A19711D1FD97FC4B300 35EAF2B2AB86076B50A665BEFF31387C0BDA63178D4FA51FD7802F5738C23DADCDA4B744 D2D937373213867956F266584CA74ED0DA497A17CCA0056C71F50403727C31D0FBA9BE0F D81D24C604CB3A22DB13604221A6D1E7D5CA5804EA14993BF779191E84DC7A9936B2194D 0272508C65E0AFDFE774FB78D08E69C11C59A220805CA1746F2253829057B8E87A87565F 58F19B36674195BCB071FCB343D9FCE1CD17197158700CE14618F00441AFE3F4148016F3 9B2F1F4F67AA5B2F5784C2BC68B6F56840FE36E6BF62B5AF00E3961C582FB559993C8A6F BC586EC91FCF3E7CF38B4C6091DA1E2C1FD69EC642C229AA37756850E9DC707AD4EE042B C5DC1244D8A614A55157725769C80CAB74692DCE55542AA277BD691C651813D93DAB377F AC989971640252182D99EE0346FC78365BCE2F76717DBD7E56DCB41A2236750DE6384442 528611018F57E1FB773DF15DA8A26E25089ACBFA36554EA77EB7DA6D8BB998B1EC643D23 E89CED39F26616E65F1C006193B9CA185C8630227D1C766A925B30E0EA2E9E5CC0678397 0B6340A7B1A971DE688BA90B65A33CAF490E4B70DF9B3397B9A01D8264BB0A802A2ADC7D 2253888733A579927BFBBB8636CCDABD76ECB6112E72098AD63CB37ACEFA6724CF587855 E92A6AFBBAB567F1DC4A62FE3349E53AEBE071CB7582911A43E210A59D0FFBBE3D6DBF9F 42E9BC284BA4467002B1AD73D2899E921CECD8C9E666B79F5F43C1CDCB5F86548096574F 5A357D659937F4F9BD2698646EB22927B6DD87EDA54D75922643FFFEB953AA4CC3E62EF8 DBF2EBA19460842127B818E6604B23F275DB1C3BEFEC22E03C1C685AEE636E6642295599 C78A7BF9EDD7257925CDCE9A186997F4F07672F4E3982CC75B72E8B35C5008784528C4A6 18DA7B7405AF48537B069110B230CF5E6D7042555031EC3E78F0715EF24BDF373FCD6DCD 085F96874328B4F9950CEC79ADD599FA5EAF4771FEB5CBDBEEA715441099F19608E33EE6 67F71D0196C69D6CC05882DDE19F916B6646172423C04368C5A1D7137523DDF81D85E46A 195B907071846EA642B6AF1DA4C67DAEBBF048D593B0276D43458B7636390E9226067D3F A5F9EF8B64A00588A6C674A49B5C0F2CA8E3E098262F627AA1A51BCE8EADCA591C3203C5 B49193ACF2B861575D4C69D171A6274F41D82061390BA253DB3952638D59119136099BCD 8F9016B901CC1C2EC6EE25E3F8A8FBD92B5FE15D3177F5813F50340066DE105D57C653F2 4FA68AE75C8F2135CD11C475D58D4754CC77FB8EC07E5615A32F9B2551A18F004B44469A E40140FC0D9294EFFAC4AB4B34EDD7BD8982C15948178296DB472F833847229A12BC0D69 DC3BCB346AEA699C632EAEF35B982B91142DF670903436933FAA760D4D174B7B99E06B68 9C4817852CE7B823B6612406B8C9BC723F560D453398428F6F69F2050C5D56E020D8BA24 FFD9B83B1B3922D56A5548873FF0C25177F8EE643B126069757C64A225298ECB7E8B97EB 56EC89CAC29D6A22D6AFDD6A7F675FCA2FA41D6C8F84D1CA5EE6045FFC184CD4E7ADEF2D CC4393438E445234B24FD12A894FC8F8C314E8AA38DCEF8B1752F7EA50D152240E4867DF A3C4E6BEA5E3AA91E817EDE1B25ECFF3C6462EC9C1A066923D82375012D341432CDAA0C1 4542E473A462A6C3DA54F0775A7298EC6D6B69ECBE7894ED01B444BCB1570F11B8CF676E C2D77131246DD50FBC47C3B8ED258715AA5264A59A023D8F5A9CA9B4AD42462E5B5D1FE8 436D3B6D6D0EDC956EFCA97776A1AA895ADD04EE882CFCAE0CF785F38705622B7D8B0CAF F98195D48F687041813578C8FAFB50501374B194B4379DB99A22D0A826F922C658B2E3F1 1B96A32F4F54CD8B58C796BE8F4FF44473575B66CD4850E27660259D4CE7A47E0843A2CA EB5B1118C00D3DA6455437B312C35D23854277B600C16941805E9E55DE3896F3820EFCA1 B2C055F09127C1D07AECD991F1507AA1EE93F701E0111DE4F05849E571C33D165F1AFD35 CA78E5C6BAD08969335C2CF01C39B47B0EE13AAAFAAE616FEAFDBFD38AE32494E72CEDA5 8133F76F90F3E0E20A9C369941F88A4C47A39B61CF4E082C421BAC6AABEFDD46C7D477EA 443B2A8A0D0AA1D65705A7284A8BAB5397D89F41D83A6599E488D94E2F8F7CE70A666427 679BA039C738AA0233DE07DCDACD17186614EF5D9A68EC80E7C422E42FDDE53261EDB18B 9D54A1B1E12C746E3655B5160FB90079F5B92F0F1683ECC4407417CF43F90792953CB24F F7DCA0A4CF90B4A3794D98E1989EE67F4773B3DFC2E70AC2278822EAF01E5D95616CBE0C BDDF45B26D58832AD5150E3F06B51AB7AF97D502AABBFDE0F3361FAAAD71FAB6AAAFBDE6 6ADA8E7C17A0C63E960D136AF7AC0D2B00A24DAACB0BE36CB36C5E4597E8E284A87CF4EA 8A517B2BC85015256B1B0C0AEB4042ED5CEBE542FD18A4739FD1E29EC39C1FC2B5E67C2E 506148D18345D3BD68F84C3374BC41BD39E0614EBB7E96E6E078540C417D0E3D477EB1F5 43AFFEF0679C8424FAD86DC45A21A5AD4992550C1AC01E2E0B8593873814135E60145C3E D369E106746A50BDE0F4BB73F210F1F8F5A35BF44DAFC6BF8E7E2F29F357B40F4491C779 495ED1F979D192D24A9B043AF3D07988352B9B10D7772F5A23D1A046DC528B6EDD2BEB02 AE5371B972D2F9C2DEA686AACAD1052376FFE04C83E6C0128BC2AD917BFC9DDB44FE61B7 1A67417CCB32898A7818058C65CC1AE59849E2F4066766F283B2C3A30F00C22BFE0EA66B BEF437F5E13C253DEA02704DF1AFB81A55B99605CB5229376AA471051817D5A5B8DE905D 6288C01CD3FD2526C5EAD733805A94FDD6AF0CA93EE52154E0772EC190DAA1CF0018EA53 0E2B491C70CDA38078DF6E6700ACEB32412341F68359BC29CE6437BA416B378B86CBE892 D0981A355AEBC5D2EB077405E211D96212FF07BF4F8DD72BB3B06B5ACFB3762F61A76156 2B7B3439DC326CA4703375501F81ECB7AA337DD206AC970D89875F9CEDC7C05D1E217DC5 A95CBBAA134711C6A8E51A924D489E407061DBA9ADF72F3EA9C2A8DDC123403C6077AD9F AC6F9768606D6AFA912101B8E8929666924AF4093FE30BBB1B26F3B5B03138661D643A18 E9E40AD8164C25C2C13617DB72ECCE452C283A3B20EA3DAF6BC3C1180E24D7EB3D4C47F1 9A2288DA6DBBB08A6FC92F161C5E235D23BB578BFF2466CBBF192987B051BEF278432895 50655CEC2123ECC690827C89391A9180B5E4343FF1D145C052AB7B1C75229A648E2B58D5 7719EA569E43404376BA519F82F9133780B51886978CA93610FB9F8B35BEDED078B15859 2675FF41DCAE0B4A4706D713C71E640C31991643F9503ABB80EF092373B787A08A1003BB EBC1FEEACE065919E3DCE33D67415D6F991F86CB82F8D08BEE17B90123FFE94C10591301 25219F4683289DA1E92EC8DB9D066E8C780023DA150F7EA566EDAB46C3A378544D3CDD93 FD539A1EAD221DEA20A615BF0F65E09ACE465D99E9C32CABA633A91D39F600F6D3450A61 DDB09EA2312631EDAFD6BC355FD2073403D1085A5632F944B0E1E070741E28698CEBC602 C72A25009B9D1CEC681532F43DEAFF5E6D000C56ADC28832C14441E842CC81CF7DED2405 07FF30C66FD3875D43C8429DA7295345552EC1D958843F56B86F76442A871DB3E54F8882 053172E57CD30DAFF852AD430926B15B53E1B94B3D5B013293BF9BA81AEEED456CF1559F DE91E75F0AB5DF909143F10853D9C448AFB6F19CAA8B2644101987E40FFFF5A3118C9F1E 271DE24A12BB1D674C7B507267C7A21186E8BA0DF0E463B82C4810D2EE0806F4134D45BF B56E75C6C18A3D85234FC8D817BAC3D2269EA1664FCAAD6738FC4C3387FBE71A45E6B23F 77E6FCD1EA0CB5E44C5F8FEC3185D9C5FAD79BCF524827E0208549CD697F3FB92C401FDC F53187CDDF71057753D98FA40AA6C727E682C242D1EC411E6575E45ED42D328D13EFEF21 FE339F5F9AD1CB328BDB72DDFFBA93E93B9D60BA37D7E23204BDE60713760F066138A138 81778ED11BA6DA8FA19DC1416374A856914F11C647C0907DB5FC201A3C99D53F7DBB48D5 499877E9E42591AFD273B14169FA93A2E0182A997C8F6474D347D44035C9739DE9BB2C13 359E2D61E23C7C5E7F4B574265E286A13CD7816728B4EBB156700EBA80D442411A7BD586 FFC4BC90DF914E9F157DE23D70E648AF6064E5D2162E8DB8E06EA00461F3044E197D97C8 92F0F83F95A204794FB2F5AF4283AAF9712C569A758CD95C46EBFD70B934CBA27AE80743 D101CF91379AF54811848CD4E2FFEBEFF27B8192681DA174F3F3C6E6D2C64B6033FDE042 70EB9A18DB440D3A1B6816B04AD66F6287186C3A09D377E1B7783D9FE2F70AC38109BE03 C90D7863DA84BB6D7ADA40ED8BE318654685465C98D2D4A6D9F2E48167D3241875C0D05E 9555BE946006E296349590DAC085CE87D7CFFFE8FDFEFB1A03B2F3BDEBCC89830C81B3F3 B68361504D7785576F2A35C1A68BE4A7314675CCDEEAC3D13F43C953E8117A664A49D316 227DA093DC4A3932BB90EB55EE1E3C91A64D5B0AFBF60D45B955E62D04E6AEC97925CC42 8D5CC7E018E16F29CFC060C0BAAA9028C773234EF243C50870D51352D3D85BCB2551C3CF 4B5EDC04C23744BD28D8F309A6D1C35E19A8F1A93D9544CBCBD0A34C15C54C6CE21BAABC E44D63A22AD320ECB72B41F089142CF64576814DEC201B1959479F8979A2A6746EE3DB9E 55AB54AA32F07B197B8C1CC20811427FCDF9877848B1900B738510DB660779D5AAD82EE6 C9F34C4D7627E353CFA4D2E7A4E1FBD769758B87F9E9E78299F39727ECE8460735A81E80 ED238650B0060AA1BE128B89E2CF8C38CB9F29168EEBD6597E2EE380139E4AD8720BC1EB 2B8A2024363E320D3CC8B6CFDC615205C9407B1AA2055571F0CAACD250B982EC848B59A9 0C9CDBBE7A28BE282C6327559911D86371E4C40B9C5E1360CB98C51DDA9691BF355A7AD9 FAD0B1517F25243AADC478F6E27D94A34B21ACA589F8E0D48A0A9A824C7C2A02029B128D 8A391F759A174B8B0B34963A8406CBA6FDFD294E2574B73CBE58CCE05D7B24687EC91079 282DD0238574A60BF004649C3F7DED384636B807F72D147A817703B9C7AF828BBEDCBAF7 849917CF636C600F8DB7C44FA82A8F0191429B4780911B47D18DCC7F6B6A3D5911EFF4DB AC1F9B7DFE0B2BACD145AE1A7262E1942EB9BA6D007EA278D98D59941AECEF6BA8770D2B D3602878B6C8F2F2B0A7E01C60A0980C7B5A915B81469E9D9E01C2EDF615024BD84FDF28 BC17A6343204189AB5368F32F32D6A87B16F66A8D18997F5E4B696801BFC63CE65911FEB 3DAD05152DFD33734FEEF7035597E7C2492810196571D054D58481C7E174F8D8C679BB77 759BAF14285AF3542BCBDF4FA3304D00592A6D9E3EFC11966B2F3087BCA152F45C0DDA5F 70E1B628AB2C6423CA2C692A1512DEA2526C91382FFEE308FE9FCECE1D2B302F8108B52E 6528DA57884583DEF582F814DF0EBFE8EB31E924D4AB89C53468D1A25E9F612D16C57905 3CDE79AC7E6E6C43402A5C173BDF287B344165802623946C04A917EA63C50D2011518B91 6E46B7648AABA21D7A583568DDEF9438D1F3BF79113FBEE75E08ED858640BD3B7F758B87 89005E4D7A123F614FE5358EBC76582F32482A66B3942608D6CDF4237D678657E2F80B8F EFCA9CE6A4DB36E13132B8494F88AE83294DDA41168762DA79FF00A365863EA9D58658B2 B15071F02BC421E7268A4B2C690078E60AF1747CD013F868E0B7CA392EBB5FB974A073CB 0D0AF04082479224E398B96DD79626712919AAC4378AF7C7085BD4959848E9C8F40DD9E0 772CEFCCD6173921B9D0D5F3C2F0950C91D828E6AF1A71AC3E3FB8737A63AAC59DADFB68 6D0527EA48FDAF1ABF96EAAB81905587AAD3CC29F558D78DA4AC59A91CDF01150D70310E 30FB6459A5991D4E830A4671C8BEF7A0A75F4E05039BDDFDEDC70FD301BA2145673DF334 2755CEF59690D1B48E2A139B25C23E5CE7876880C44406B19C1FF18B953034EAD1461387 F042FCF6A5C3E48E4A327F238979065295104B7A251E5EBEDB4EB13EED5BA74EA550FC43 8DAEC130865B6C856BDE18DD7FAD9B38CF16465097C46675FC53DC8FA702907A62FC1162 339F558C23DD5D08C621A7EF860568887C68FB7A85D572B41CEE295E3346603A4DDB8F32 995E82A982887C2A1B7D0131F0F7DD5F59D12500C514B9BB9E23E9B016DC48E977A01E87 A91BE9581698B6A8BC00827EDF4CDF9B53F522FFEE4F117493AD8C49EDC9990F5079C5D5 74CB7341F77BCE3E738F529D1230423490EA38DF4EFED63852B504F01869FD408DEA7D93 79CE1163AF58C41FB5A432A9BBE619672DED19DB171715938443F9F7B3B2ED9AA790B64B 412D5D33AFD48BDB73DE64F6E553A869FE49FBE605E4F44F92964850178E374F510DB47A 6159AF604B8B176F87C17CEAE671F3F8D99B48E842F15BBF7E8ED5283B27017101ADC7A0 477FF6C9D2632B4D7B0D3CD61425DABD626245D08EBE7A66DCCD9B8D6DCFCEACBC5FC7F8 9978B8BEF58751E0781041FB4DE551B840B277C67503ACBCEB5A91434E98F353F1B22836 AD74B64BBFC267977CBA9EFA62F042CC01CF048991088D9266C971F381B95C76C44CCFFA 991C88F905791B5E20C32907F8B32B1AE7C6B2883B2B3FA3EECFAEE3335783583C9CD739 6AE5C652F843823B6FF49DFC0C76868181B57C4F2AEC2ED99AB645F692FA6A0786E9F871 CA2BF5C2D0A9852AC12C97D48095286EBA1C10DF2EE8E778BA8508A72097146ABE591FB7 57A7AA9E8CD3E91D2C2BB66480ABC6AAD1BB7BC3C70EB84D3BE67BD7D5485EEED4C87DA6 4C4F74BD16555697223EB63584D76AA9824CB5CF03DF0EA3FCCC760BD32C9312649D04C5 8E2CD54642664544E10AEE4D70A46EC4AC9CC0656B55880588A39309F82170BDA132F964 82B71ECEF564C9BCF30AEB6993C58A2593F14A8B65FDFA760B385ACC14B6A11C2BA2C57B 2D843F0E37D99177E9D4E905F51345CD183E5F70D077E19F7CD788DBE4EA0E8BB0C18A32 57121C08223EEE0845126933192BFFAAD5777020AF702DF17E524798EE09B70B4B617632 265650C1C064CAF598EAA700F260A79D6744A7951CE4BEC5AC3453E9FBFA449D21A6FCAE 09BF3AF22AE7191754F6914BB653B9FD6479AFBB2FE30A0411A9CD27B3C97A5AFFDF806F E8F9303C401609F87FF52E4B3B554EB44EE253FE3D3C0F1B4B74808A799CF7B4320C139D ACA524925D9D8271E9E4AFBAA012ABA308208003A91123A6EF6917D9362051203BC975D8 F4B519C52021A55C4C91032497FFE7EA8A7D3D066BD1D2B5978584C07A81CF5E72245F1D 849270E0E38A04A5AA4CD00ADBF0CDC39773280063DDBC141A585500AECD3C18C6A091B5 E7DC46FD6C8E1E1AEF1939B722D059F3518AF87C82566B0DA15B04E20C2661D8F1A0F76E E477E4E2315A69FC7F76B517FD8517B7E564E8BBA0D704D017DAC4F3A032833EBC281E12 76AF69080B7232A61DD3F998853990A961CE3937909EA0B1AB6FDC5B90033505BEC291DE C6456131DFEA26408AE6B88396EAC31A8917A74DA3C711AF5611DC7622DC7BD54AB0B395 58CD3F52FA43E88AE0B6FBA7A4FC11FDFEC4876101FA4E63AD5240B886591A93972DE7DD 340C6130E4AE6281EE83524DF68482CB9EC0D63B10E016262EF426132724DAA1E006AABE EFCC9392DD8975BF642E01C224365A2D9414516B9FF54E9C9CC7093646EB369DE8EA192A 674FABBD695A1D157116A7A8D20690CCCCF456C254508FA32812E69445B114800A0621AE E9CCE3841AC44E6576B275541FFEE62116EB7E501FF152194B0FBDD449A6CE8145DB5599 0D6C80458B9204E3474027E77C19110390004C12734FFEDE6B602880418C9D034C1743CA 898BAAE2BC352710989FFD0775115969403C93942862BC3523A9D80C6182F4EDA99FB82D 94DD73B527B36A47253668606BDDD2D69D04F9C529800FC1674F52646A951F598882211F 5BC312D090F7F6064984D19D1E3BDA509A97B290951A340B0D9E93E5C6657B638F6AB28E B08711D1373E761DDBD0D441E710AC53975DB76403F14E142A8D525C367426ED403E1AD3 77668E17E0E428CC9E4B345C488FC2FCDE95BB5784B7D3C496808F82F48A306093B5CF51 12EE2FF576781FB7B9123E9C3E9ED1CE8AEF2E6701DEEDFD51457A05982B78D33734C472 88A4EE611E4C16F5C54F38D88D01D05CE2DDED74E00D34EB43FC31E4A1264417A6DBDD4A 35BCDF31B17BB438ACD19E72FC15197F3ADA01D6DD5DFC893299D5D9D5F96A523F32C077 F92961BB34E7AACA85FB60B6D8F9E68628B2115AF2E6D2435AAF100AD0581241951DB66C 1123BC309EB5CC37913D8B0B8228CECE9659E587432F582CC83E9EFAE924FDBD457AEC40 F1D05442B1AF78E1341D96CAFD9CED2A2277D880AFDCB0AF6D253A0884E6CAEE9280FB74 FDAA0AAD859E58F134AE8EE550AEBDF7497F30AA53B53E82D9FF7B8EE7CBF1B9C818A140 E49215E56607A3F795398E7F99FB5F994F97FE4D44CE58D08FB6580B894E55C28FB08EBE 4C8B21FDEB1BF19D46D96130EB633939A3E4A655921627A601497D12F187E07B68054C72 F1C97BAB10D9CE9012C3F23499D3C65108C022EF52A35E716615FA3339827761E5740EC0 C22E83FC4E0B39F04F73DAA70B64086FD346AF6977DCEC7C2AF67373E6C3CE21EB85BB3F 5654EE9B58FC4F4E7C303F927DAE76EFEE5C8CA767FC728B003BDAD383EF4BA8BB033815 ED1533A642A428E8B725E8AA4C3304863BB3074F23BD832A1B9D91F4F83AAAA39E2D0B07 DB8EC5863AEB3686079EF14EF41E1316BE046D2DD628A35E3CD5438F58CC683401CBFEB7 DCB2D77C0CF2AA8D7E8887A3B7983BF34ED3ECB565DFA5F5D98606FFD165C59CC98D995F E40E75A2F0AB28A1D9E8F246E9D7F089096BA0F8C8FA2DA46284915F339E86B216AC254E 727FCF41BB7EE7D114CF1F36C7A4A3BEB8570B2F69F0B7FF4B5E0D3DCE87793E16749915 41C47BDED2B869190F1D8380D92540BCECE17A8508D6C0B6D9B37033C3C9BD8CD6A2EFFF CE4EA8122DD8113ECC9FA26BB3D081B487523AEB1392193330FD313CD0E604D1F2E0CB71 7A959EC31DB6B41FF70ABE7D643D88E6418E3819BD0012F613F9E3B200364F12C1DFB344 50F811080B5D14517665863C6E49D35A200BCE66C24F3CDE970B1F2EEBB699C852882A65 C99374A4F33093AE4B6778F4005771453EAA66BAC0D107D02B06BC1838A340ECF78BD0F9 442A02F8123FFEB5274F2D67E9607CB711235577DE8DF4C83CACC14C7039BA3E859730A8 3E497C11FFDBF3EAC58C55EE1BABEB95BEB6431A2E81335C56FB2DB4024C9AF16CC00FB9 4DE383448361D9DA764739C18AF82E064E8355FED9732D0C34C1C34576237E458CC63999 C4EE65BBBFF0CCBF8F00C1044600255D9ADA13E203DF2D98A82F65E937B69437A40A4ACB C5A369A68496E33966ACA1424DED168C0FABEB8F96C9DB7DEFAEFA2C0F48003405564601 0763BCEE41E0EE757BA22D8066C742E1C0B8E11FC34F57155F1EE19284F0B53AB0A89786 184249AADF6228032F86230B4AFB3B0F7BDF48F6DD941CDCA7B9256F2D71D60D9F0DF66C 2272FFE50FF3760100391569305A2B9F7022D37C55268AEB0D68D05FE47BAADEDB1465F4 C275A4102A643DBDE9F506E07BF6B25F2A28E1B22C0CF097C0885816E8A1970A68A6EF86 12DE3F21CEA93C7C3981447493B901C3BD4AF52F24A7ECD6BA8E1EB346048C25DBB8BEB5 0AC26C26D1E15A67C365A971FF9C62EC970D9728F612A99CE8B5E3D8984C1931BA986F57 F11446A8F9E1853885ECF6DA332356EC459B113BB808638D87A670F916F3005DD79C3E7B F67BF3DB16EF892492E020BBDEDC546F6FBB8C53BF40F079743A5884E58D6887C6425CFB 1961900F2099260C453CCD2E3CED90680D5EDF22C1F27BD757B298A8AAE1294C020F30B6 7B523FDF0E29F51807C05FA8851D0AF5D8E0E10AC0E56739F15C1ADB2BB470E4CD2CA582 F3A0BDEE4E70155EF7FCD179BD7472A4E68A04076BD452F886AA2556566FBF9B458AA79D FCCE79B01710F4AE5A72CCD0522505DD1333F5DF18C0437A72ABECF60296397C0BFCFE94 A26B7669D94DF6CC6D3FF1C120CA262DAF455074808BA6952C2223B7A56C522FA5DCDBB4 B84BEA9964756B4BA63A47D7768884E75668E40C81B22D637A23C975C9738EBAAB298F15 CB00409D39A20452996B79C2E01298DEF76B42C5B72C4138ED72527FA724BF2F3C522E42 1CE25E5BEDAF70C9CDAE16038924079EC4B077C77B10066861B80A485DB9BE11EE8B29F3 F96930DA8114DFB11CC3A57372E866BE8ECB185278BD25360D981F1EB8B727C9C6D2482D D046C24F90C4CCF00666F5A416DC807F45B234E3D6D93A22928E93D6C70B17F8E01C6582 87426C5AB92105C3286CCBAC630CA74776BB317540D09B3813CFFE7DEDFE403FD8776D38 41FEC85D7FE727B10464A4356EED862E6B5032DED563E275D2F85D6DE5B82BC91235B510 9A81ED789F4BDC3403D912A718BDC69E42A6BD5BAFC0B3611881F4FB896BFC2C16F2A2AF 82B9EA340718169A117C266BB24582F3642E6E57E7FA0CB3DC164449A95FD770DFEEBF5B C7678A2910DAAEF36E1505579AD5766FCF5FA90A35D5691D98EC9C400EFF09DB288882A9 414E82B656EFD4AB48EA185BF629A127FEEB0CC928990323B7B829E2E922F21D9855621F 54368DBCCBB4562A96AAB6BDBC61E91FB794701C3C1869B02D7D603CB6E9FEBAEDC98CBD 90526573A3A6A970F634A1201CBE10D7D2D0F9D0312FA951DAC0CB0763405D1001E56D40 A773E407C35E98493A7942C965942AEBE974DA28AEF7753EF9C6E896487294D54FBA2BA0 F53F03D7CD851EC2E75822281D7508C092D207187387150F5DFDAC50422160ACD77389FD 52D5CA51F620FE9C1F3ABE017C523CEE6DD1C72A66425E3BCD3E93F257C4CC51D83BBF83 E54C5E1EDC6DF5CA8B69E793ECFCBA3E39F89ECC713E2C637B2B4DEFE050C77FCCB5AB82 6DF5D8553A626D30EAE97177E9A98F641671F3A3AA1E421BEC478A9D3FC7A4EE01B36765 299830FDED326BAB95AAE5E8BD57DFB8B754EB138F96683CE5E482C79CD675C6121CE7A3 69CF1222DECC44AA58FC755F2DE7D9A6B3D648101E7D3AD13FF88DFDC131442D3152977D C181DE58C74740434D23AD17BBD2704B62553F9A01FC03BA33152E7A956B4832334C3818 4B7AADB963AD55C63D04B5670A7D07B6C5D4130F56FDB5CB56B937CCB7730A19D1C4AAC4 59380DEFF1D34C8835885B98E13F2D7F6632B33F55C1C15BC05B9B0FBAD361CAC2375797 707CFF61200E194892473EC86C75DDCBA10B6CC6F482AEA7C37E30547C305313AF46285A 48441A9764D63BCA3049C17FF05F4DD4828D61945A566771DA94E602F7D493284F306F38 AAB7BEA25AAA3ED0199B1AF5CBBCC24B9B32D34798147D7B6A82089392FCF21AFF9BADE3 5C94879438A5C3E3FC9457ED613587C4C4777E754662AAE4ECE338F036F84031540AEBC8 4A978A3764A22285059D73759C29C852EB1C23ECF976EB85046EFD979D159F1D3B11D489 540BD6CC9AC2E52B01D0D93E7D1FF584A345ED15147D30DF09A88AA69E2CC641E8FD8DD3 CE19765FA6190944EEA63B4750038DABAA3C3EC941B8DF6E423F5DD8571202A4059AD6A7 E094F2FB351EE4B9DA49FFA847F0F0EE17EC9BB1BD7C9DF5016E59557A9EF86F74F74F0A 080DAE063C526217AF565A24450DC9697C2222D5B41E143442AE445852AAA1912F1B5BFA BDA42177BACBB56A13FD10923895B5FB3069B007983173082B9FE8461B4495968F841A1A 7F9EB74EC4BB7CB7EC69A5D36B984AE86FF9342CF0F38270A85002276BB14E243A54765F 4A941BC098BDA56AAC2D68A25D6B6F2DCC1C934A8B0CD391869D36CF91B3FA56CB95EAEE BDC4AB53E18EF6B5A3C11ABBE5776CF70DA290CF0236F3C07F702B5DD14A87EC37046A42 0355C41E4078ED380B85DE8C5D680038408681F46AF4A4C109FF52A7CD65A4FCE3555293 A084145905BBAFE76BDEC9CA5160F71603095703D74B7FB77322519B722E0A0AF8CFAA09 F245BDC6CE5494D8A049AA9D9630C9E93D4281EBF838A3B1644D38AB860B6889A1F73A88 5554BECC3919FB256DD55DD3C2EBB840E4685321B25F3BF14BE26C3F82F4168D7851AA73 8B4AFAE7214B298D281D84A648438F785F5E126CB3677E2F9E9A283796047A7C0270DF4E 816B7870ACC0EF5E24CB2B0C9C6D94462B8871E4291DC4EB88F01D6C15A5BAFF5E7F6C59 81EB164A04939BE619A80713842F32D3EBCF73234044EE7A55C74594C431315615CC0098 0201D005FABBBBD2C3855C94FC16E7B20988616916B0D1C90D318206780D167C1E544F3D 53A2F0C1340CA99364EE778E02201CF4AD79C7D4FD060522B9472A92F3B52CDAB271ABFA 9C950AD7DD20088E2A5B6360ABE3A90E22D4E1D7AA5603F180C6FEEF8B591ECB10A7F4F1 33F635C5B9D518DEB032D86C58E03E30E59453BC21C8697F7E08842616FB0ECD4EDF8712 B3E8A4C0E005B2E84C49857AA697D3FDDABFBDF0CD77D7CF7FA2BD6EDAE2317B4EDFAE7B 6813D193FE54E87D22113D1ADE0A8204936EA2079696950D825BD0C4A56A122F6663FFDE A4DA73B7AF18D443B5F31F74F43043857C51557851FF58F26E6D60EA2F3F45B6D73ECE9C 5879B53C913FA786078B4184B6DFF0BE4E114B1A784BAA49DF3DA72DE6CAC7D885BF5919 3FA4A5931F2E6CB9F51F2812AB74E0506D18FB57E7EB3152B08DEE57E977A510264DADD7 0D2D9DC7222605FA55B3CCC5F1F3D46F8048448B5CA49E32B33A9747FB8223DEBF611C95 04676D500CE60F9DF87E06D5F0FDD1EA0AE4E781D2914584007A53BB9A858BBFBF432559 CBF07EA6B5C691F9C63277CE734A9A2144B8A19BA1F0C14E0DA26707A72F1F40E6F73BEC E6196469CCA058B7F6CD0D2756758405C887506FCE7A8231EAB97C4A571E9B30DE7D273D E16E6403422A6788D651DB731B424EF8D1DDA01669BF202B64AD460783E7EB545D7CF5F9 07F65573552BA12AB21AA5644A6B092737DF8ECA6DB6CA2117E98A4813052AEEDF45B308 57EC789D718A79F11F5FB56F9682EA59388F41FDD7FCACEC1E6BDA5F550284332D6ACA9D A8C77009A5E70E9FC3F92E5D52528D564C1E9CAEA46C98A3CACE39DF8E67AE366CFBECC4 3B60A128ECF0A208B1FD2327FDE66321307247EDD931A599F64707A030BBBAB5A75B8306 995AC31FDEAC6E3EAA9AB6DCE3D05D0AA5DC42CE8D2C75A1739A96ED89216EDBF807DDB2 A6C4EAA26965D0C86A86B1E19820E423C88E873B8EE9B08B0CD090CAC30AFFBFB7360C8F 30A13E59459C4814879EC070E42AF3C323FF24DB094E514816C8C68F781951C9CE415724 A037E76EBDC42D6529CEB92C743D02EC9DD8534A7A34853D3CEE62F10D50553F6461DBD3 4AC5ADD8C031F4F70A4C1C141A09ABBC14823A503808D50138CB89DA21F74287DE072979 8B45ED2A222317C400600ACFA830C9319DFAEED24F94E31D0C54C23B8C08DB7BF452BCD3 F484B285F9AA9D5F988F4B56583A5FFF0654A5EB43CE4EF7916DA46518C84584E2568729 0022F45952818980ECB1E014CDCDF079E1A2B08D2D1E877FF71F994DAF360C13DA630563 E53ABC3B329397AB83FA7AC4DA6BAB680AB78282CC58E8BB205E74DDACD09AD44FD613C0 311D122F18CAD77D1322DA3FE216E46DE63019A7B57A693A8045F2BE60E7BFF3B0A9CB0B 925CC820DC26B7BE98B4723F3BF37085A7CDE05C88F7840D4DAEDBB5A7B1F1A11945DDBA 7C082C86B13B713C56212FD69B0D0AB6A2A7E6758293B2B64D895B1AE2E818DC0E57CF1C BF71AEEC0FB2ADE7CFD3620E4E17D8C81920178A623E84AE4092B1FFB44DAC802FBEDBAF 0C62CC3F6479325D861ED537D3D7D7466F1E81B661239546649059B136CCCBD828CCDA26 CC2F26744AB5445CCD2585F8BE3D5B3623537B4205D53E62F9EA0517734F4111BC52C64A 852C2606D644B483130A1B0C23002483212A1E49930A1CAB9681DC02D02C1F2527C05B7C 5AECC443F9414F2937ECDC1EE5DD87EAE16DEE602BEB1D35C55A54C2BF40DEF682593EE7 F5CB7A083E8DB113C29944B6A090985A766357DBAE2B5A233A91D98CA59235E0881D4F2D 2AD827DF955326A23860809AB30669B73500DF3327B8D7F0DE0744B1817606EF918D427E 8601A31484B2C27FB1987CFC533CF44F0AB14910824A8EC7EFA01F415EFA2AE2D421F689 967C18FAC9D6249F4364DE275FEE882FD0443ABFAFA275E7B0DF7745759A8956B9A11A8F 2AA68FB0CFA6181029EF45C2901E3A63B73391B841EF76089C5D61FDE0C8E1AAD2518B51 1F9B86FDA297FD6F12AAC6567056475F96B720243093F6AF290DC189CCCFF8839361D2AA 7F9E135EAEFB616221163F7050150C7A5AE007EB3257FD9206533E82DCC160AD7A1BC8F4 CBE904782CF31F4C0DFBCBBB3F66DC8C9ABF7C41A769A6EBCB9907E6CA3068A4E8C81398 C0B8CA2786D50A69C3DCAF039FF4B5F9332B987067722D2CB5E170C8B4591665E29BD7BF AA897D556171860440060DC4B282943D189CE227BA5B07A31E08E0BD2456432B1B21B4DB 586C974CADDFDE08F13869F62037B8515C6A61A6781574691BB615FE98C361CA6DB16FF9 084BC611E5A7F5B07B113D54E01716C3B58645D62565273709DBD96CB97E6AA9E059C4F8 605B31299E42844E65E0036E794DDF482B0D1BD9CE53D8403CB8C82D79ED1E3E75FC87BB 6B44F21D897337A7261D1E9F79914AFF995000B8F268F8B8E781C0DF7E895219F09CB2FF 323E7BB12C0BCAF297812E6F064C82A75FCA34C60C273429623CF282524D74631E1F843F AFC7CD70383CC89FAE82B8024749D16DE3A5639B50421D89CD374784FDBAA2732CFFC24E D9AAE57A49537845DCE95007FCCB84A52D98ADC1F56995D28733241C536711566FA1A04A 488D6872552290A22391CF5B33CF2F003875169DA6125432040933ECD89FCD91C6E49254 2B889FCDECDA8A193D7794F898F228FDE12F95C572E64C9A93D2CDDC407C94174CFB6DA6 267A821D59E38B2C01D12AACD14DF8F8864689A53985FB400DF12863AD2A3935E6CD49B7 D970A6EA40CC1053A0C8AF0DD638F263D343B7E201205095545F86FD9C5C580BD3323DBC 87AF0436768ED9DC4132046E821DFD2A7D0A089963A504057418EAB4CC43A8C155234831 1126DEF4C3367F77E71A8559B4A1770F0E81D9362EB9B259EC110C29D27FF31EF149DC38 A4474BFDD8A8EC1D3722CF9875315C146D7379D53E041D7BB6B6311B036A31AADEF908C9 7C526CCDEFAB2C7D45A97AD59B7BB01B28029A50E07AA4040FCFFD500626269F55FDD36D 9A1B829619A6CB21B3FCFCC00DBE9AC77D8781EF52497A1D4005FD6154420B163405019A E8339983407518270D35A441B9E586AE09C830E4BE87004C3616570D3D202339B11E0C5B 261A23258A6EF6B39ACFF2776E9AEBE5AD4A29A7567C20150161A5BAE8F8E969EFFD6AD2 0B348D520B587AF6258CB04E954E860C3885DD27D7C7D9F413619B9249920A850614A15A 206DCC0990474A638951804BCCDB7C2621338F60F8D9DC0F21FE235EB2BBDF41A1CD3549 590754375F777DE5D591DE206039FD1E49E11655900B7CE0CAB2399885B78C3B11979D91 B2424FD794A48501716D21D06FFB10BAAA0384F37D890B033213041BD56663CFEE237C00 638EA5015EF341C8D2D3827C8CEA48678431B6094D75486712C6A18B74F54BEB671ADCFB A816F5B7D1958BED0B371652805FD4490DDAF9463ECF58244A7AF3D15C0B4459A1AB767F D987DBF3143EDB79C75DC17522353032362C6678819B0ECF18617DF4FBA658BCF4744768 4CA8E0EC38B68B14CF46CAD1BDB9DFE30833C9F9E0FDB7E50D7E6355657306490D08EDD7 D9EB0BB2E579A16DF0D20862F410822AF42AE8762E87487999DEFA2B4ABB96CA3FC1E3BF AECF19D2744369591BBDB80C939ACAFC8138479A80B4909759CBF7A711EE534F693D2B03 243B22C58543ECAFD0840E80D3F94763CF1F7B52E2ADDBA83598D06094696E966C258254 262834E4D3EDF372D89535D13C467675A35E4D2C133249B865F1D4EF572EF5A98FAA4C91 D1C8B387DFCABA71F17825E329840C91C9A63D5418B31708BC56FFE9F4B17154DD3FC087 63D2BB488BF7EA648BC23291E2D0B98D1D4649F512AE66C335B1FFE501A3FDC9FC04491C 252F2FE4546E6D5E866143C8EB175C31FC32876987F90BEA39FA2BE9A7275D96C1CB93E9 F9FAAA5ED4E42E3B206ED890D724108F6CA468A3CDF8179C0012A46D606AE63D34B50990 4990C8BDBD85C6F14C8C56EE623643043469251306B155CA1987025215EA55D8707C6B45 B09C34BE4B8AAE6114BE8A1D97F02D40A4504C98126491322010950145BA959CB4CB2765 91804C7B5B3B0C190379F1D65401D93FF03B96EDEE615DAC8CC335C17D2773DD49157422 20272B2275ECB682D0DDBAC6481E29E7CBB45E221AF79174D633E2C438185E67BF111F29 98C960290DFB31D30E46FC7192AB74A3657C1673BEC03354FE2855A7C3790A0EF97F8ACC C2FDA0710B0BD91515605A9EF9B32BAA1A1BC9D565A1AA09E0707596C5752D90C55DF85E D2F040CCCB2C2EB2412B812DA1FDFA41BF91D6786DE23D4766130BEEC37E02CA9C9265F0 718B2C3D222B34FEF17A3752ACDD6F8BFD7B15D4996CEC185D8B21410CF92E154B439725 D522436DFE5CBA7B44B0A67D1EA7D8BD8E072552A513B0FF54DC3A35195FECCD46546FAC 265CF54A88352BE35613253CA2D7AC3C6DFC2DD77500E7031DA27842FB921B706222F622 076EA12E841D2E7BB6F28512B4B02E3EDAC767B4F417ADF502B7F736BB8AF48AAA73C495 7D75D5D94AB77CB87E780CA65CA62772B635A712E0CE7F672C3AA1C62A8629803C12948B D2E6431397A96C73D718432A2CA286D779EA6217B2D162A4E73FD512CCE7C3CD3521B9B9 27CB423DAF1F53C4B66BFF52CDB7510D8B393843CE52BBD5824A8A839CBF97D2DA6F9A44 9BF845E3C0862362BA75B2A853B7401757CDCBBEDB116B42FEB99BA43DA6B0B59E8590DE 1C7DA53CFFB6D99B733975A4130BB499DC410A99248328F97F638C48FA80FC75E4174A6A 91A3057051FB4ECFCD0C095E5FEB1867E39DAD25220F1AFE4DFF1229750615F64A32A927 6598ACC67465C2DE1AC72A22C2A987D26A57DC44AAA1A02D9140499FE1796D85BB881938 6769F2811119035520F88987967DE00F8331D6922261B2587B1617C8BA5B73649AD963C3 50920E67008C6E569BAC382DB532929BD21BD9904187CE0EE4CAB6F0D046CDF777B2BFE4 4C5077EA615B75B8465981A1C09A59C1CB7288F4FEE43157B619EDEE76C138DB90D61F8E E6B7FF3A84D83D8387B8BABC423A764623D5355B7419C4DF6E04CBA2A3AD09C002D87F62 DEB6CB9D939098139F37D0FE78973B593E67CDAB40FCA87B50C04E4D6FC5C254B9B4BA74 CD8CF67539F922B9BE7563A0ECF376EFD4C28A0D31F9BBFC5666E4EF7B311398AC876DDA 5E247BDA2FF533B297E6122A789FAE8F332F70AD688B7A3B952413816190F03336055A66 B9203CD8D623594786EDFB608AB6F8F12F08FDD7E7BB7F7B74505FFEEA88F2869DF4B49F 444926B005A65F8A2361EFFFE126E9FE98C2B28D3AF58FF407967B9E3A75A11304CFFFF5 BA7E3E8AD319D9B2D4A9211A0F623BCFA2733679FA22E0B9E81EE5AC5FF927DDD23D5C8E 7E7AA2DE4C3F3253F183E8838E46006ECEB15CD636CC4E84F44489000892B308E361D86E 7C28A0C782596E86F3A747236F032388651C57902E292AD0746B367E19A761408B5C6058 E69F74220EAAD347AD209A1413643523D55D5E78D8685CA038F908461B089C782FA3EF53 16B0DE3671A7C7F966ACF695CF3A8A2343CD2CD077B2CE0A4AAA070494EAE46B187BB067 1BF851E24D9183888433A2E9E8FF61D69CB5927A2801778F4F2D673E06BE474A557A936E 6D54873ABADAAD8EF86DC763E7E0D3FECBC6CFFA1308D7231B9EF01BFDFDA76EF010444D AA5D4EFC17D36887C25451BE75A8CD3B5DFD7379A367D72BE38B64FC0637C6F1F97509FE B5E0C30CB701937CF9080441B15B2FE9159C7F1DD6A3244431B9B6E5D17BB2684286486A D590E64667DE3079E0BC8D202B310933C20DA3F2378468742F33D2E8679BE23EC83C5057 9CFA7EF1440A8329EC28E642DC47430609F0A0FA1D0A0C2B2E87D448DF8A1C49040C6062 7964FDF4A12C816E2EB3B1B7404BC83BD998CBE04283F416486F5E783AE861BF99B15768 5783B5AFFC693DA6CB693343CDB10433920580462F969EDFCF91793CFD9E542006E2906C E1EC5D7F7893CF598441A79737C0407414674B7BBDE446618C6D49D71A8EA6A28789EA9F CA0D3632772B4FBA9BDB64B2E4418990EE7C12309D80B429B44C92D1691DBA5C77253C8F BE425B172E8B7BA28A5CE25C15F456F840AF39DB568A28A9131E5A2D73BC8DC36728B584 F1104158524EA9FA8104676F4A09593ADF0A9B99C8B3505D2BEF235772621CDE6425982A 26D143E7F019EA31F54AD0087398C2F5399337296BAFA2F4C950C712BE6C0E846E38D3D6 D49BF5750E31E44FB887B23B30AB8C8DB354F97ECB817A052DDCCB4803B83418AF46DEF6 B9BFCA90A75E8ECB20EF3292206D69BC2AE3E4B535C87B28ECC7DB37327B074727567ED2 E99F015D310075BE39256B1DECCA1019FA3971B90BA1EFCCA66A3FF27E1B38F0F6FD013F 84FF18C9C9BC92504FA2840986FBE7BE815058E058C9F2238CE7EB4348EF4C7503A073C4 5E5916AF652695BDC4DEDC620C6B0143CB538CC8365A0D314C88F55E580E2C5CC16864E0 5AE7EBF8A174ABC2E775BDD0477FE63BF4D5FB1FCEF45D50E08AF8853E52BDAA35C1DD1A 4E5496B9AAA0F50EFCD4937E20ADC4BF29691DBB641EFC083D6F6D0EC3317809BB3CEA1B 1F521D0ADDE13F9142B6261971F8D8DB7448E13BCF35FF305A0B3A7FD18A6C0FF7D7F0E5 01F0E5B4D69FBB2F98BDC3B2A0C100777C5A426E23B2B805147E9BD2F435F6C00CDC9060 D6086D29A31C8F075E8B767892DFBA18BA16A8C1CE28E96ED6993275FEEC681279500459 2545C58F496C359AEDC60F188FE2757B5B7A7E68D76BCC47BD9A437F15746E6EFE33AFDE 50000C11B64972FC1A5780CEDA047B12D4994FD9B07254149DDD6EFC7746CCD1A504D22B AC1936A7E52ABA9E088EC707C040B037CE3EB23571AE7F412B0BA0BC547C521FE2A4A10B 0DB7421DCCA15F528C04A156375CBBAA724B85FC8C844C7F4FE29CF624D650A63C0D6841 9AE401BE11F97784BEC28AFEE00DD7AAFB6A57C9833EAC2B5FB31B32BF3FD2A0ABCBA5A3 4F1E77ADCCFA7B0E73903B9F018AC214468CD2E1AEA0B81258DD5D37621C9C71658C1DE6 AFC08D92DD7145A8F3DEB3AAFE28C12151B8087F9AE13D12FD0AECD433A4FF9863BC17B2 33E2AE16F2D876A194859C33DC9369C4B527002D6549604917FE5BE223EB7C4259DA1C0C 4D9595C1E1DFF771351FB486D82524F5661809F59890BE26B6F25793C6DC313DD6D9650A F3E9BEDA336F16FCF5BF0286AB73CC9F65C657475D78024A32CF67F9E2FF2029B1F7D589 0FBE9BF2B773789882F575CFA58EF8378F8E671979711216415571F994A2853E91C3814F A38E90F70E9161D7086D0AE7E5D6AA1C56EF3D352EBEB10FB67FB67A45972767D844424B A5D0975BC2243D7F720537FDD130FA17ED839205D4AB3E02C2DDA3F2E4DF8D0F7033BA89 4F5ECB609569566548CCC60CE8D58879E701F4F5081382462D6AA2DADBACA4AD744D7BA5 F84E667C0FA4F6D9ECCB439EF525510363D07644DD83D76657A564478E2AE9ABD209367F CAF25AA46962747A3BDD1B40FD98A86ED9B07BD8F1FA8E586873A4F1204AD4FE8B30FBDC 287A0216B14682C30363F04D004252EE1FEF277216EC1DAC57ECA4EF91E452D4744193B5 95259C2CC24A7ECD063BDA803913E35DE7A13C389B992FB6F3125F8050B64E7FCD01E877 EA20864A742B9BEF29AB6BEC6F8535EF544BEB7AFC6332E31B33B8B933CE4B1D39F7EFAF F1124544CF1037937BC65594635201D6F66F7FBD9B7BD4A4F001022AFEAEC02C33C9E33C AB50B9B3AE1A028B43F9CBD93B722FE1CF4ED0D9048D329F0F94B0BBD023C42E3515886F 9BFD2BC68D0913C4CA4A16901A3A44DB10D4D45B3F7968BD30D5A5C3E5606855CF0D3A2B 32B9F8BCB41031BA3FD1BAAE721D34108871345DEC5C0BBD611638209549ADED905E8EFC 890CE853EEC1CD6A9DAEECF3D1CA69E2A45EB0B386659CA76E55DFE01444D656610A2D2A D78667C288B65C3A4C2F2E2FB82817DFB9AF04BECF4551F0A03E78F3AC8C1D1726F9D6E3 9D6F713B23D0CDC76EB597A3326D7D920417993D54A8DF84CD7767DF0BBA9D6B86943E63 1B80366401EADF3265B35BE852DA3054FFEA1C53F99E26789671B8897536AF3C9CF8EBF1 2317D52E5974334F093950BC63B3ADD4121E4346B5F0730E4318B77CF62D3EA765077696 54A52F0D011012A3BA48CAAC68D5EA5C79274F0387377D9F0EF678273E03E388AFD4EC93 F4C9632FD7C120703994BAC7046CAB63493F3FD67D13F27E1A4595BAA3FFD12058FD85BB 7F26471C4EC94EFC80B6541D93BB22D1ACF878CC0AC3EDD83BA7F4E95D19F326C33CE068 D659B079B273354C2278D93B5161B3C3E158C36F33816CCFA8B0894D30645E9ED527EC0B A356A68E631E0B0DE0BA1AE49897485A8CDEA4F80259FC7FB77A9B7598E9522219CBB6FE F8D944134A8495A5D20E9F5C7D50C45765E13B670B6B4EAC72328E39F96A6514F89B9FAE CC22897B3C0AC839C133240F12BE95B301C4B714A057549427C30AA408093F6692FF32B8 DB5294FD2554EBB469C2F76F026CF56AA7B3286A7EC46BF7CA9A913B1C989D8EE6DCB290 F26890A8657D91483586332C9FA95CDD2BA4A0F7240AFDE5CD7E1BE32824D18BCF17763F 0CD69265B05B324733C93A4FEAF78565F0F2CFBFAF6B094E733C9D1FCDB93259DAF6DBDB 1031DF5FB4357A1A68CFC82C6037AA0AF7FF58811528985578F5D222EF9AB5750E63E3C1 A83D50A7DDBA3B125C211EB340A0605490BA0F94A18EF709D5AC8A42E3FD198C766A6146 7BE53EE09F4CB56D5A30DC4D615D7E49CEFE3DA0CF4D863AED49FD04690FF5C43B57AC8D 6F142D600F6A2B3205F6E82A2CB0074C6DF444D3F5390BE17DCF7FCE7F0B1B6D8C12480E 58A348EB9FCD1255C6EE5B0FEA26C37FE8659A02F05DC539C176DF429AE0D3D0ABF96CC5 F2E5C54597D34FC814D4FF5984ED67B12F8566A43BC1B6B2B38922EED1BC8CEB523868FA DED99AC8B3AEF1E488BE20364798E656820299D1A47794634F0D4ABA6871FE3E9612AFFD 95277FD29374D08671D11AB9FCABC97856CB00E4C5E89237587DE0716DAE3FC451A688A8 C80FBADCAC7A19B019CC1EF702C7F213D58636E58BC3785A0573D4ED8E72B9C76A0DEC42 6E3F54FFC5A149C8C6DD82B27F199F2B2CC32D634CF3E263A53EFE6CFF1B082EF9050894 C635978BD04FCC2AD2AF5FFE54438F23BF5E1ADDD0D57EFE6E93AF66990CC1D8937A8D52 E7F937AF12453055756DC179DC93FDEE48CBCA7457983E0F9EEFA35DE943C2E3CBBD9035 7A132A995F6EBD0AC3AF6B8F3747A95C0EE322BBBC74C6C79F45D564DCAEBECB670EB20B B836ADEC18D4002CC1A4097CDC6269AD154D4536EFF840B5D9AE5F87FF517D58B4E725A4 A796604BAF2D036FF0B8108B4CA46A720706676522EAD23455BD756E6A26E62EE0FFB55D B84B5923D4326FC0F89B6944610B5EC4134070A781FA2A45AA29F1917D9D73EEFDC45C23 066A3A21BA79453320DCCBEB60C7CC8F1545E2B2F61DE78EFFD238AD6F11EFFAC5F52B61 132515E70C2DA0B5A54D9E3C9826DFBD093F9F3779F3340579E38B64010E42AC41DF6ECE 76A59DF3B6CCDCA550ADB7840425FB0D712CACC535F6D1778CD8A9FEAB57DF1642205D48 2DAA9F85569C31B33898BBE436005AE82AF088662A65ECB5BDD9CF4B760112A36A649989 351639AD94BAC72106928DB14C70924CE204DB899447698F3CA98E63855F9B2D44A13545 360902CBDE2B068C4CEBAA255A86B41A84D55825099B0BAD57152488A77181CAB091E180 EA76582C31144EE64123697CBE41F452C35EE502BB90D0D0D0CD57D2DE84BB0793966BB7 6671F96165FD78916557C089BE23762A7994B5407FF2DA0903BF7AE99A3D0BC628BF1A2C 6C68004891E66F112F2DBEA43BF0481DD83104D55AF40BA88C770F1CE01FEA4886460FCC A033DE63025D7468FBC1E2D97BA9F45B146B2C09BF976BB794240278F8D08B0CD814A4E9 6C6DAF50BBA9BCAAEA6456F8B55F935906C1A5369058C27FDC4A3C47ECF8171A9B1A1182 D78BA30C6FE95F12F7E1EFAC5E16A364B079E378DE42394634F06083E161C339920E3A1A 41303494507B2DB3F0EAE543541F090CDBF4A36B977B5FF6A0D32CAE4159CC66FC0C1BE2 0F8AC5F823B59C56380E33AB417671306ACC3404FFDBACE6A85DB905A1FB70875B753168 A97620909599CC52B6F2E431B7C3733B41B7A1AF84D31EB90CD658D37D501074CC910488 95C3A208B1176B8589F96DBD823815F3AF7964B2352CA05CA8310DB63055FAEC4A451CB9 062C96E5827A5B363B9D58BD52B26B766D862EB185062A042F8EB86701C2D234E8FB4DFE 6F9C2C27B3D41DC18006059BAC582219D907B6B2919891475D207048F0095E2C839194B4 66B8BDCE506A3D068CB04FA4D5DF14885B9B20C23FBEB5CE7F0EC4618BDB2E34D43BC5EC 2EE59EC2ABC23F5C3D4F0654BB22B46057FB43755CEBC3460AD7BB084A09C0749CEF531B 6CF21D6F1E0DCEB31145051251ABB3C28FA5EDEC089E5E18007D801D40720663A8A2BE4D C7A88BE96684BF51482F50E52FD4C8EB2FFCC8B326CAB93180FFE8B8244D8F076543BD29 B30D3E12C1D2593A14AD85C1847794E6035258B15450DF9BA0AFF66806377F24AB332E70 D5A20F38F915619750690F39B7A9C608588594FAD0CBF0576D1601FADFB7159B7DEFD511 A9A5C4DCE8B1EA76CCC9E6D0BE17EB723436B40E096F37C94567F6E9A77F5CD51B76C7C2 C7B67D89D0ADE664DF3624D723C5FCD2A513F8B288D97F165DA8BC50B7650A60B8A465C8 87BC6C32B73767E3155906B22D51947A1E1C9E71DBCB913357728860F74D288CD7ADA046 7CBAA48B1E718737FD4997C416DC3BA38482245EFB3E94A5E65E3F16D4642A0F56FB4323 DDC0049CB8FED3CB08332C502222A5B2D13FE779FDAA8B408CA7C9C7497D86018CC5CD78 9F02C04CAAD192584507B5B0B0A450C901BAFCD7F8BD324DA15CDF5A6C1009C780DEF36F E620A61485F5CE2D379A52C5628FC9707A8AC3A3876E2BAD9BA8B8BFEFE4789187A6DF6F A9C4882F5AA682206B4F9DFEC6E256A9160ED850BCF1D7C99DF76567FCAC0339698C780D 64EB2AD9DEE0385251D596481AB3EF28B2396C052460B0E5CE2B5104A86B8AE8F5574BDE AF2FFD847655954F89B97415ABAC7718F023B7891B9CDDB3427A9608141FDF20CF315E9B E4FB2605A7CBE1199E61A90661B659407D9A1E7332B916225E177A100BD3FFC46996CA70 6172191DEED80C0F289F637089A2B6B03576BE022ED1F0F0A57B8FB365264E2266B90641 AEE3AA057CA8BEFDF1C1A0DA3BE5A5885793FF00CC365F558DF5EB9AD584B40FBA7326A4 4808615BF8C883AB8ED48E33F754BF41DAC1BED89542462D74ECD486FF8F9470FB6C7A15 A930BEB6CED3137F86A5DBA09E4103D061DFA0CA2A830556F856453DCEC592090BFBD15C E913303EBFD518B09BC8E0218EE26C232EA2D6A094D4CD7678D132BFD36B78D4053968AB B0C53B5CE30D9925B71B732740C5FF53E13579F03C20C673B4B5ACA0907BF947899F3D3F C5E0F2BE1568B3FF70DEEBD36CFEC97C7D5B2D8086370737618801B21468200E6B172E77 D81B162432D9C9E7B965CA6EB1E3BA86DC9D135A1E14D74E49C6B53EF8245D10A6AF563D FB56FCC8460544AF57947A5ABA221610042A6E2D8C0FB92AFAE19A4D22110BE39C85C433 1955DABD7112E5D0C681BC3EB0885A58D031592A4FA58A0D80FFF6569FFC382BDECC3076 2CC2F130F1F156776F5CFEBEF8BBC436C45DE6C4434E82B8924F9D71A67B9781FCB0F07D 29F45BB69DAF2AA1F486A030E18AB06E8679AE3E19DFA36BFCDC34358A27F4C04F1B69EC 05153E1E8201DCCF9E35C6B678BA200C177A402A30E57E019B713811491CB020B786D3EC 6EC2E6F1E1CC3807522BC5BD3F04F7A32F9EFA196AEAFA1E9FBBE5A7229B6DB755C28BF0 51E380F63BFDDDA07D3FF3AD2E26E48DAF6E4BA3C87E2B7A2EB0C413AAD2079A6580DF78 F27450C190E43F9AD32E960DACA117201051421A1785842B6D98965FDD34E6132ACF6E97 927B8E468A9C42D10D64C510A337068DAA07A43570C20FC0810DF0ED1884363447B13520 31A8D8A1E4819310E3EAA8E05627FF117DCD7205719B48343CB75DAF52D51985825CAA5C B9E4BB7929954F6BE885BEE0AE776E44A60659FD408725F6BB6565424BA1472DD0C9B027 FC8B952973C5FBCF76926230721D8CD05F2F1E3B39B54754B07B21665DE7BABCCB1B1AFC 681CC8654AFC3DEB0D918981A3B1AA73D546D2A232FB9825F83EE473C08ADCAEE3264807 1A36EFFE692E1B90F4E058943643528695F38B2E43E8710DC9D80E8E81EAD2636AB3D336 4D79BE337B844F49874175D66AE0746F94A7A57A4B31ABC25535C2B6186D19AC38095F2C E6340A3EA05CA31228E6AD8A98BD0B7DB456BB9F98BAAD5BFFE302F9869AFC779A5D9939 E67E079695E2AB7FF2C91858B3E5B4C0E6AC1DC92A099E9548E357F823A0C604DF3E3241 4738C4C78F3F27745B04E5BE862C9881A7D96D157B2088DDCA9040B3428AB0A879419F37 13243B5A3C54742D14B1C06C85CBF693BCB05F6A76187F4385C3BD654653B7D6CB3E285A B4446F6F7E6645282930C757A5F08E48AFE249CD01246A37FA0DF774956BB426EA292BD4 5C871F933F377DDBB70BA104C20EF2C632EE776A2D25F34FC5DD2CADB1EBD4897272EF32 D14C3210C11575FA3C2CF77337D228781C7A75D421AEC65502B591EB673A9F108CF38EE8 AC418FFB9F2B461F0451BD544CCED0C33E725F98A72F16EF729241297165F0225CC60F89 9C2A4BC40311FF27BCC1A77FAF7F9636A69722A45B8C27E3AE3CE224FE6E759891346EB5 733B6AFE51DA9B68E9FB05F1124233FC9EAA1EBF52F24518A6B433AE9EFA1CF924D416E4 89DA338A542DDC4FF305DF4CEC547F6735F1E433B4DF0F2E749E302D34D22E385E1D84F9 0BF01314FFF297A3636702DF2C322A48A1395C4D7B565FAF0C47D85CE9FDD1BE60EDB3BD E136771C73DBD90F1B227C84C54D2F098C658B1BAF1D3743B9C25ECADAB16B72D0C9D12A D548E8D69B69BBE446825F61901BFAAC6999F914B90547A0F7BECCE4D0641ADE3DF7C67D F34B51284059CAB0BDA86B0533E87480B29EA695FF8E2FB74B965A995DB13294E531F89B 68F3B0161D2039AF05E3826400BA3A43DD6D4556350F60B92A405FE9A0A655C58D9CEE51 5CE102336291B3B9D20195342B0368EF6F95859E9820A157C3B6A3DAEAB31030F8F663AE BCE030A549F1CA7570F21F7DD38F54618595A83812DD35CFA25CFDC8AB42786991797A46 025E3C54AB967CE581408EF009AE4868018D8102E5C66CC01D99576BFDD9C4B8B778ABD7 D75AEB11F2F24F160C390CB66C13340B009602445446A447591F8EE6DB17F26A8976A4FC 33E5AEACAEAE3871D6DA915388229CF62BE729927A97C446A52A21234EE68506DA04E480 BD1330D637311A33C72A5602866ECBCA33B8CB9FD437847A68133B88005327B20ACE420F 2B5B5A795369FFF303072B9143A72BF9961C72CAAE5ED85A45AED3BDA1CF0ACC2D1CA228 ADAB686647AB6F91F36DC6F06BCA03671B2D6FE436032C608C822C509218470D1FE9DF92 4F743D7C97A30D449683A521C68AA9389417734EA3CDAA83111A04CD330AD3148A3AADEE 3EF8E69CD108ACB46395B2B77A994901F1C0EF9ADF264C70CD185DAE274FC6FEE2C954B4 FC7BEE8F0D2BE51173777DC4F9A1C7D5098AF8BE7210882F7725BCC3C6CE44B92E900D77 CA13557EB6F9FE29EB4FCFDC507B69CC809DD49D9DF7F0A2AC28CBA2601ACFE28FCD2394 A5674DEF2A55C58D40E96DB9E836E0AA1E92A74BC5A62AF8E6CB451481811C814287ACC5 C97AA7174C5CC82A7F42566B7D307F33E33BC66DD80ABA8F4010189EA6612F8064E85B83 806D2AB3C4CE53F9565C8CAA8FEE401BCDD012E770FF54DBC69A30325A494259E1303CE0 594E1149DCB032658AC4580A292AB7049917A8EC26ED655C47FCFA2E19C9D4100B02E00C 6F638DE8E55894DA923A4112AC53E330F82D6EBCC0BF61FBDC29D08871C5D74C7FFA6E26 21060B1B82AAD7624C5F9A0DB5480E6726D4D0034860583C305A77404A7E30CD6D76A8DB 94FA38B45A47FC7678325712A70F4B04D6AE081130FB97013E1FA77EC83DB49593082226 A243528F0E78C51C01384F566F0A1F5A4C7AAD46E8E728839F714D30FE1DC86A04CE5A66 28C7A37DA73433B3FD152A1E2CC2AAB180B292CADD716272AB5A9BFB202EA25F15ED092D A36A8232EBE2A18F16744AA29313C2FB5F63BFC02EC9178192D7EC7B5935AB822421F376 03BA3CF0BD7D34C049797D63F3441233B8C24F8F8960EFD5A703E3F9FB57060954DF1AB8 CA1FCEB1FA3C518CE881E74F30253CB02049C78209DFF6E62A988CDDBC0D570A2A90D682 31C9A5B6773111251C3C2EA5B64D0D696D77FDC8D5A438444EE534FAF18FDA851DB77C61 F8D000AB8A1A001A969D6EAF97EF92C1B53F8DC21C5B2537F293D995C8607BF7AE2E0D6C 51BCB5025F90375B724114DBBF317E4E46BC42C789951550F6C943F2D85F6471C385C0E4 4B9A29D61C5E8DBEC37FE92C8B8458239EA9159B72FB03672ECFF8E4393C7E0B66DCAF75 727EE16BBD3F353081AD43470831477A747FA907016AC8CEF7F49FA7D2542B8035F0E058 330E12B4FACCDC340996E07265E6452F6E7D580A666B4AA454C9493B52C7CB5605FF93FB A823E8C1C10A52547BB58F3CBEE7083AB2D2E1758E22AE624C8F5BD941031A91CBD9B5C8 0EE6E9307F6E63EDF0A7853BC0760984DD78FE00F902DD78B245033D45851E11AB25E480 F99092F4D91D1011FF6D27ED0A959FC200D3540341FA07AC7F404DD8CC27AAB0189EB3E8 6A4139E79AF337066E15067B7F925BF6CF50AECB8AB974D987A9FE3ACCA27408CACB564A C16E62BFC227FAFB661A560827305B5E950E066244EDE114E497014D75719CF3DAA49993 7D39B288696BE5C79653F3AD00FB2AF4A27A7F522CAD2E9EDA0FA780A92E217446B58EA5 42F61274C2BC3F0F68BE083797E1E25A59856384DF06A397ED6578E75C62D2F5D59A1A94 4CEA653293651BEB8C9B554786157FB9B3C3F00944B4EEFAB93B65786C2EA6B9E6EC237D 331DB25482056F68592A1C1E6A70B973FB7F4D6DBB260DE4378BB281A356B1B5B682AF2D A414DE889C9BC81F29A7FDF5EE9FB9A389CA2DE5FD3F582E52FA878E5C292550E69FD862 F726939DE0A164F97321DFD96E542852EFFB5ED502C4D2F21EA1D702CC221A8534CD5E26 7F69D0CB695D2DEFF7DE8AAFC6E7F5DC2B2545C40EC93FD2C74018228129A807A21BB9D1 73289188298D1883BE7016599D477551E442B01A6B0F8EFE9B20075F5974FD923EF4B8C4 DE06A26577C9BE55133B793ED395D3EE1DB22473F42F250BD1863D18C84C1F57A9821078 B559F32EF89E4EF63DA6BCFBFE3B2A647C5010D1CC5E1713159B8D63D67E6305EC5F99F7 98183D4CC13D2DBBF02BBC8EBAAC6D0F594157008171DA4DA1665A97B44B887B0B3C600E CE765C417DFB4BAD33888BD47D147D052ADB40D2C89F98239CD6934AE8CBFE92EFF2B0B6 4F3E59410E836045067D60F4E39E9883D669F4153CE8CF1299FE00F0141535C185A6E5C6 44A406A93D266C461646007AEAC2DF311CCC298F2D4FABFD78F1BCD2F3B37F86765E27D9 D8DEFF93802095511CF33D86BDA332DEB4B3C0463D124914247B72DF545D6A3776F8B681 72EEACF1E3F04B96AF51A6641C80AFBCF432BDFCC7BE0422EC052A368850F44B04263694 D897FFA29D0DE4E05BAEAFFA0FD63FC2D733C11D67516799863393CF652DD9E929AF1333 2E0F87E7C9F67F1601020D98755BE98AEFB83AAD5B2E5D67EE45098428CD1B35D8951539 CEB17A06D8ECA27F20A02F0AD9B3A942196286DB530698489B7054A983960C9085CF6A0F 3947AF7F04E2D468EDDB433B6BC3E7458CC7E96D69379F7E9C1DC069D60B2CB867ABBBE0 59741DE23A1D6CFD45D1C33CCE5A037C4DF2E62E8A8BCEE05DD52F0C708BFD9D3F4AD18A 73821954BB2FE6A85949B1090706DFB9F380BA101F6A46A4C73DCE3A31CE76EB2B33BEB0 30A096D68A83FE3225C43E7FB77AA05BA2EE8636BF7653C36BCE46F55F0B1E00AD288D88 6349F588952072907343DAF7AD07C028E71308A2B4D30889E6A216EA20455FAB39630A53 CE2C4A227AFBFACF28237312DB25D18A4D500D18D39410A569A78FDCD274276498C3DA1A E0DFE03DFC7A17B9DC46D94B22CA4FE0944F8CDC0D0317C7D09839FF8B02205FA9FAFA95 A8AC97CD8B86FD6B747604B9B0EDDD77606F6E8F9E20651A3105B44E849D36AEEC77D941 921980D4939918FEF1CDDCC949412D9C2652E8A2DF7B39E4DE86869489E097130D340230 E3F25F898A3A4C63AEDD578B32BB61CF423B2A34D373F84D4DC5EAEC0CA197DA91B89466 9D13588497C1EEBF3754BE6245EABBAF3E72821C55CFA841BE8BD0E79042329A55267744 0131A98D91F785E790CD74C25791CA0E1C2D3E7E2AC3DDCF76959B7AE506C8D837ED9C86 33CCF141570411FA33FB03B0C409D3383B540F8E5EA07B0EA154415385CDE95C07A75777 A9B84C2CA51B56C1C22414450830A95FE99723BAAD680F61CE222A919245A91527D78E85 4C193478F17E83931140E123FF5FAB21B4CB6456A1B64267ECA7169B317FAFAAE41D2CB3 EAADC9F917A00C6F21E256F33C6C9D443EECBC1A2FB9141BE7F8607372B86EC1B9A69784 CD823F981055AFAF0168D4070C17B073932D596FAE70DC2ECA30D044C20590A619584992 D31035DD6D1B9D0B944624EF5F91B2107A68B924717A26555AC8BC115D99887E1B44CD60 D7EBDF4E5C7A889DD8D104BD73709A807496565C7CC149771E28877D277139D43CACF8B7 CDF1D271FFBD3342B5255466C6FECA3803FE20E782EDF287B82FBBAA194DDA46C03A3607 082B1B364E367F027A7FF295F21BA247374073A0DD71C3323A8FC10FC0AC7C00B8E659BB 0C7DE3377C99EDAC45A99DD4ADD2C1404B0EE70AE054AD038999CFE02904353F5BB55C8E 99B6A6DE7B1F99AE6CD70F88F29E1A468074CF295AA59EEB2E62E5ED0E6634C07970C93B 229B082BA5F60F9FCD09055FB4E7604CE3F7AA290CAF4111959BD21C6CBF691AB6C90CF5 B2D1AD78948FE6AD7C4B301F02626F2BE1338A290077C648E04A0137F8EA5CA1CC50B642 AE88A1BF03D14E030F03B512231B530A12DF7EF17A49248AE96BE778CCDDAE6B6031DA9C FD971470BE6786DEAA57C5A55340CB8ADFF721ED842E4C85BB2E15F49B3AAC0BD991ACFB A6EDFD67DC19E1D412F52F8C277E147F46E747E7003D612D00FA1CB20B36C74E1CFA24E1 E93F887BD1E1638A2CB8946C2C9E3C5D94B77A18736AF1FB41566606932226C6C4915D60 498E37685F25E79923C0F78C90A387FB9C0F648ADAA277FD8D70C930B4A25E06DADE6A7B 0803E5039C4607B047424843E36B5A59A38E0855DFAFF8087D79B732B8B40A59B891A30C 6AD9108C68BD5D84A0A5DDF2FA166B93029616F04208BBCEFE06DC471E3CC42C51133115 0CC18999105C8EC3652D4D35F9C8E7B8CEADD5C558C1D549A4DDF5C05C26CE888D4EB162 4B57C591EFD3C139748BEC37B52F8C5D9D5F2D006DC02329A8ED1D8CFCF853C9D9C68411 95A613CED219FF86E0955BA18B7DADE6A0528B1AACB305E51D5E8D4CE3F5D2AB6BF6EA44 566BE0A81C8424D6B9AD411B3B3DF19B72484DB9E6B8497B92E9C2AD26B3A8F10EF0E287 A11D77EC450D7C6FB0D659605D1EFFDB2C0DC86D5E92BE702B3E58564CAA861B4AA92A69 B4332CB52EFA88180EE8B2EF9B5EE6A5B9C7F3668275380AF0FBE09EC2980F416FC7E38E 69969FBA12970E31ECC3371E42E636276DB11243CB2BD50F3A24B28E3D78A78911386EC7 AD7B875B9C3BCBD619D84DB84F83A07732FA89D69DF7FD40C4E797A73A9A97BCA78D0015 09C5D64BB0A9A848C3F60CB16877AE1977B1D1D306EA2AAE194F6635A30CAB4426F94A4C 0B6C9A85383B397E3DC8D85CF401E011310102B0C50DBBB49C54E8246B3A750F593A2F24 1B46D4FA86734E8B92C756FB1C7FA5A6C1B7AFFD695547E3CC98C5E3A35E8345F2AE3566 F65FCF0BF7DE58FE76ED06957FD0CB716F086260B18015D2A56652F8A3F3436E543B5549 14688247C2DC6CE1BBDE6F6E4DC8ECC463CDE20681B3D6F006A5BB3C1D6FD86E9EB49C36 02794DDEC29C7D97E9E38380D08A39233DAC72CF67D9A76CB95479BD6398B27C5CA36648 A45AD5E8539BC1B56533FE7BFF82DF1EE072A7B29EC77E1245A410E5DA3FEA9DECDBCF09 65C7E678CE9D87F262F6536D861519445906F24C89083378542357AFEA1EA6EC85234051 6A1F90268EC3464DD8FEF92E6BE78A4788712E18CF57D21943EFA75CDE3FFB401072691F 2BDA93BE39244DBDDD1E4F911EE389BAFF8F2156825FE64B48C302F5C1EB59B40A98612F D8707789DAB7E0F70203B870CDABE65C978415900AAADDC4D1D464C84D3D43D08E4C2047 95EEB80C66335AEE461F893010A1031E1FE0E0DCDEE3592AD53198E55DA1A1984BEB62CD 0E30221CC506396FCF2ADFCB974D5AF2719990CC266EA9E5CA32635DCCDDA2A0D04CD89C 7EABC50028A420351A7FBD2A22C1F33C5E63264C159EFDDA1E6996BC95F84F9D06F01CE5 68E9DBEE22B6D612759A83CB3BAA49A456BC8D2216315E6071FD8F064B08CEA149A52AF5 29D8A6AC450B336E5F1A016621E7507B57E3781E55AE03F53D9A642CB2BDC6B8EC1C4B97 4A648A52ADD834FB9FAD03A75060D4C2458C283ABE2EEC4027628489F20C1AA057F40A85 C2FDDA76BDDE14752BC317A122918F82B3BB4B772DD05B74190A28061C2B52E0FA3742F4 701FD726405A293F6308C44D53CF7B56698374A715A93C6867A2D40EF8C7CD5CC7730FDC 7A6CCD86FFFD14DBCBD8CE60C7795FCB0A569959BD81FB2D65E9FE942C22881163C4AD70 06F0EF9A7840C145171A9870453D5497350468398916A47A8D181126965CBD407D2FF278 575025F2E9A955FA89F24B22462B31F6FF6997CFB11E92FB9FEEFE16873AD622C04B2EDE E3BD4FAB4243E78F444C8393D7D2FE02F598E00E175CF4E9FDABFC5845A6813DEAAD338F B69B4681BB55E83AA6D59B54880371478635BD728EB20930A009CEC223D87659E4957F03 39E0E201BCE0C035F13029F5F61F1A8769D1EA768CD32BD8F088186C8E4E0DD002CABEB0 82AFBFE1982396FE0B3353E7FDB9A55F2BF7F87BE7EA4B775AC376984DA8042184E1FAD0 2444E941640C08DB49227AA8CAD3BEA05CE63383A89EDDA384548851F07E2D95041C6BF0 343DB9A6BCFA69348DF489126C46E43C7615373A62DA61813177B657A483729A9999BB8D A35475A9F9EE09EC4CDBAC734B4B82F1FCC1D01261D996EE1C0313A4507246EB3E8B64A6 E6E8955CBBA65E26F9630CAC5ADD15E8035BC9D9817408452EC896F21FF52E593B31E71F 1A3FCE11BEC9541959F60E6010E5943A6A244B46A986306F56D10EE71ED2EA033677E3D8 2F416E750225184FE2D79F40B560233F9DF86479AFBBEF3BB93208D5EC0DC9F072692205 98532389301FCF55E7F02726DD366A0E74EF1EA20DCCFDBC31366E78A029D046B8A19A07 75A6830E8478679A6C9B8C4D3574334B7F8CDA87E5E1818351BD921C2F5E2C3518DA0802 50D808017E641F33F5DBE7922D97B359772B85C1DC0E7D8F375953BB8E92DF578C73826D 9C0632AC407FB92EDBDCF31D43DD7929D032F45268B9F9CA63BED3C540C89BC6E99EBC4C 079FC1C05A6015AF730DCBB0B66D4E7128E289F909C29EEF23C5FB8D4A50D4D4FBF13215 5A7883112BD79F2961E8DB3DC7017866B0D262C14957E2BDC1B2732E9689D96781F4FC64 259C3F9C207671F6F2AFFD5B2F7EA816121EB58D1AFC406C208B094A575B0189A04C34D5 27BF9D9C5E742A04B4A6599E4AF18DB2F0A0017C2FA78320C11E0470E602219D41DC11FB 32E29373787A8192258DCCC97813515802374D24FA0978B408B2FF953E49B1876E06AC06 2C720369A7EAA149900B57592D232F3D23385C5FDCD0AAA48D3B56E24BBDC62B7B37463F 82E41EF58A80739746915669367EF346EE4C651D05DA5DF4A1D170B988ABC8282194ED4B 0A436FF7876F3AF3DEE8D721ED63E81783CFCF334B27A3C13C098C5361E314E799515496 81665313BC0AB163EEC3B22FF3A64414A91C6A6210C0EB711C49CA8AA17776AADCEFADCC 5F3D8A5063F2AF352082EECD310F8D8B04625D0AD2D808D0D4D5DFB0446A435B8FF54BF0 1FD6787B62614956B1945AE635A66EA426643E1D554719822B1F4EA7DB9B415891614A1C 63950AF873BC8708FD4997C416C8537D344CBE2EA453D1FE423A00A921BF087DE759A228 7369EBF330C9757EE54B66826B29B120068336936445A8D05BB77A4B406A8252676F0C6C 836B8766A80A61E1F8A8A3130BEA992CC11BC295A0987274235D4D6BDFCF285B5D386294 A64438E5A917D1522E12FEA85AF07938DAFE6194584CB064D99CE51A621C30626A0A042B 6B594DE784103B6D53E14AB8A06890D7A3FADCFF52B137EA0383C15BB7B08ADF624F5531 3426A300937E71DBCF16CF0B2107153E8BA7002AA6CD2F80AA736F4E6B9FE36A377AE9EC 20704C3B2082D81276DDAC89FA696BA1F71AD1BA8A92590529F2CE8AC2A459F34E61FE02 188147EAAE228318F14399EED0A87E36F1823413870152E2414403E6B5E41CCA69C342CD D336E9D16B1DD8D52215AAB019D9DECB9505A3447EBDB9CDE4F7C0B63E0639E6281B04C1 C71A67F29B992DB578A6AC249027F8B59430556C5B631F7CE3A3704EC6314B2B3F8D00F4 5FCBEFEED939774969E85CFC6459DBA18D415E9EEE2D27327A8F0E78839494D93F72B8F0 E84A52DA0154DCE5EA6AFE4BDFCB339D205CE63B25DE48B2C6823CAC458D53770543FE9E 204ED8DC89464274B1C7B8FC269B49E0D7665BD0ED1BA90547E2D2E26E60C0391E426870 4CD58FD3F134EBF5F20662839DE5F4746DD4AF51876F9A574C7F07A0FE704B8A173D9810 3F2FC640E7196D47A4205B194F58B0267BADE1619839528404397FAD844A9AA58E848287 E626AABCA6D4FF95152AA1B071F9F9E8115A9213BCF4094495C726359E0D3C1C6D39E07C B0B96A0A4883A10FB7CE57F35AADFC38707604390230B009DEC39E92B5CA9987A6518977 593911F99946678B359C960B18C6ED619453AED7155CD32347E7CBDCCD8DB82856327FFB 1575F73B9CC2CCCF854AE905DF105CC120DE9F68166BF606694CDDD4FC5E7358D33ED6E1 07C987B83B43AD5BEBABE99C8D0F9B6CBDFC49B4081FAED1396F58C6DB64C469B82796E5 17886AE8A4B5D60B85E12CA64FF143F98228C6B026ACF13E9B0B267A9B95E57B85D56DE6 239F3273938E91C47FD2494495A276DE90D2475326A3236377F08B8EA37CA361560ED426 A4C8925E6B4401B15F8550FBBFC25CC3BB287D100B8692A4908728403551F6E70B12AEC2 0DB56B082C9CABBE3DB92BB2F1FF8546C93B56E6CF7855D971132937BF1A29030B01B5FB BB55E052A09A07542A8B8012F24885FE908CAF9126E363DD802BEBC643D62D8142C4D6D5 5C96B74049CE4EB3C954BDAE29D099BF1FFFE07C505D34A91949791CAD41F72AB0885CBB 5C5EF6AF738BA6824F6FB9B2CBCF353EFA3C7F38228B573694D37891E117EDFB4C2AE397 4D91E230785AA5821223FC66AE2F084E357DCABEC2CFA0981CDD352E2989899D5E442C99 542F3B856C170B76ED4BED255A4E43B18516E4D7C3D29FCC4AB530BDB46BD6434C535BF8 A7030CF677EB657B60FB85DF96B7A7132DA241061AEAF90E4F3DD9976BC707B5E14C4780 8772F4B77C153E60EEB57F7B7BC26871D2500F30A43ABA1AB502E8332D78F69C0097FE62 68230C86BCFB8785EAE7A590AE27355A796CC30EBEA98E2FFFB7D75B16C002E92BCB25B4 CA4C884539556FA09377E7427F3DD7CB40AAE142A9914DF3E5F26BC5742454D159454A35 0407E897CDC9037FD3A2E07DFC9A6B57E6A96F38E6487CD74C6C96319146C7EFA8CDA70D 42CDD8C7203979B05A6E57B0CF48177D03D72813EA95A11C063C813FB8236B7B233DDA9B 180B850EAD137591B5BEA36C0A144485BB85927A18A4E9B49CA7DCD92F327AB921BA426B CEBA4B07A7B32857DE7D694A2B9A6E6452337CA941A9EED8843D01D882CE8C2712395F50 EF3FBC668B9E24D9B67BFB92E9A958D9F5E37D02268E4AA98C0192B4D353EEBFFDCF0D15 660EB2FC24CE9FF62883B75AE1DD33929E2656CAFE21B2061D4EA8B8A70801E7BCC38E00 9CDF4F6E5B9E6E43A01E87F27E5382879F50D5F2ECE84C39EECBBB0F70EE03123846AD16 8E30A507DDF2146FD5B6E9B1632C35C86B0BBC9FA6EBF71C8B010CA3E85D4B6A9EA7F1FD 878FA17CF227EEF6C9149E96515E245813053A5F0A153C8EC34F8240DAE1BD58E6AA54D0 4708A2BB3CE49FD98B83D94B4E8DE8C5886B74B89D127E8E2A1477E5A15E4122D419BB30 2FC2668BF1680AB08FE19FC851BF115A4F1344CF67126C099B927536377833F1D3ABB27C 84CDE7E1848B2988DD54EACE272E3234793D5B7D35CC53791A7B429712D7D2F1438B7933 F848833DD7F65B4630BE0E15733BB3A51A4EE78C5666BD20C60369FE0344771EC907880C D98DCCE33A093470BE6A9904C96F355055FCB0ADC08F6512A82ABEA5360B37F6D479F3BE 52916264C860D121DC912193DD6F77B22B1F7604EE91E5D3200DAA0160D172AD68265B4D 3D0FB13B924DAB1136F474F5C29F9FBFAB84DD769306E2C72D7AE1EE222BC98E0C9D65DE 73497AD6E0B88AF0DF1EFCD2ECF864CCC0E9C20F77865088EC11A186D202E6E4629EFA5A 9D60AC2031EEA59397755E2E6A2786A588D80E8813D6F74638ABCF2239D0D39A0FD5385F B59D7E3723BA89C6062AA45C5EE5987062421757EDE296577F89345EA32248427726605E C5B17277487590D6626087DCCCF024BAE6530B55B0EDB271C6418B2973AF359E4824893A 95A079FE82DDCC45C30028BB3EFE445BE30F6A2876289683A3D9AED4DDD36A1A0E59F86F 79A6ED1F49D7B9891E00D7CFDA74621C55167D648B374750A60B0B95CEB64F8315171387 14C61E9392E0A6CD0252123DDD65FD0BF1090C628ED149ADFB0DFC170B7DE4E4577A60F1 65CE984C6FD475E013840EBD2C5AB2AC8FB516C38DACDE08460530D4788FA5A92D573E8A EEF7EFF3CE206D59DDC4113A11C9BB20D6217C4F659291C2F1F6B111DAC6316CE5CD3FC4 1EE8E3B11123174F5CC9E33C14E9E70AA21A051DAFA234F0F2C98CDDE414B66503157C3C C9A373215AFC82EB28A6634B2B3130D17C895019F6DB8C4B90C3D2EA5E81DA31C23986F7 EB1E9462346BFD771B5BE4952B07B2E0572875D7E40FDE6975A8D8653BCCF5473F909170 0CE7F18E1ABD910DACAF04DCBD80E7CCB94AC63FCDCF0D04B7E4754944A15FB17EF5CDBF 2503C1EA77F40440EE34FDDE20A4082828F7A6AC3D11287A45618EB9DA2437F653058F2E AABB75EC13E5CC18C11830624440CEE2ED0B850CC92F82FEFF86D3CADEC474E4B79739F5 14FAA01DD0B3048AFA0F7A7D6E3B8CA1CB1951A5E12F6F73050D86A2415D825CD077388C DB35DEBD94FF7D18D39A755BF2911E533CDF19E0B553E8D507D95E59253C6000943F00BE 5C9CF1E9A86B18EE89D0E9EB34E33A3AB8510C3AEEC56D96AA352D32ADD7F9B6552EC5FB D35C79D6E362D586654D517BAB1DDAA8A94AD358019901E455DE3F8561F35AFC0172327C 2D8362A4E4F66D7CBAD7DDAF29D8D6C1FEBF02830F7CB897B58DE92314D82D9DEF47307C 081EE88EBF5B2834814B70F8BAE0EDD552EABFE3B665CD41F67647C6FA23EB7275A626A7 4EDAE63352696D33B7A0EE2995A1B65B73A28BFFB6F35F9CF049F72EFADC438DE8CB4BA1 88300249873E418F697115E58924254BEFBC505024C57C9B118DAE3E93F51C60CFE7C68B 30EEC970B14D99D228F3326A7594A8C9C48A9306EF6264635561B1AB7975D0B3FAD2FB7F B08268B0A8DE25F11A515E1865C193B1AC98E0D059209362C14BF6A158E26E3FC30C9327 C1688C79ACACA59A9291A004E86C8CA1BF908FB59492463FC69050FDE8EAB60F4BB30AFB 7EF6AFD90ACBB9D7277B8DDAA29BDECF5AF1E8EA93C1843D2FAD6642CE8742BE3994AD63 F838CA38866C517CDB630ADD91AB1565D2A3AD4C6B558BF5F7F4C9435872019FA57A5A0D 420C6B3A845B3DA8364CDD4294437BC6FB9F112DABC8A3F2B4F45941FE83C08B1A078942 E8DD7606D276048757013E96CD43A0E04DB13671E6222FFB8A9A7E1906FA43CDB8E7561F 30093FA0CA609996F8251811242149184BB02AA0C24B137F11444A063487BFE7802D3EA6 F6F231F3BD00BFF782C083FF0F722039BE8A2D88229CB6BC9084BBD3C710A44533DA0FD1 E1B6E3D01326DAE7DA01A3C8DA2C30D7BAE928AB4EF16273586C3D6CCC0449D2661B53C6 A53F6E3B89902601AF96C926D14CC5D324C2B0435CFC0D62F1DD3E990CB04BEA3F30E9B7 BB4650AEC65F456FDF4EFE6F99CCE9B4712AE420743CF9FF31D15DC11183F5CFA8893DC6 E27BF52B3AED10BCBD84D7FC40C84E1CBBCD7329922C141DA7599D4A46ED55F5B3F2D0C7 8587D7502C07EF1C8E0012CE235C1DD541854275285DF8CD21803CFB1CD3FC973B1D4C0C 9BDFFD44FC0CAC78184CE9D4505061FB94114935400F634E75B301BBF89152B4CB884CD4 3ED0BF2FE5EBF8874CA96E630D68BBA4F5ABDD169968C9374B67F6801224651A425A7E5B 7D76632564274D683071F631F04CD2AB92E15A82E7DC7CD16942E13A4EF3AA40E65FB7F8 9D55B9F4EF108F53177C1676A076B09031AC6B6F74EE0AD1EF755756405922E28E07F0CC 61FBE0C35BCF36CED4843D65DB472C61330DD1BF2082A51A2DB298D75E879B3C73C7DC85 F9AEBBD817E1895EA9F7EA9F01CA6BCCC7BF3CBCBA95E97EF21472076C0A40848081CBAE D33F6E4CA4D42F5794823C7459E54AD991E828044819A597BAC032391495F503DBBF0CEF D698A5B7352CB59782430E47650E250AB67FE1A1DA6A35F9E98F2F76B21E9D33A40AFE69 CB72AA5C5237610474FFE04A9FDBAD5AC3BDB52E1DCF8E556031B3C8CB0857EC72FE4AA5 C69F74D090A31A87945B51815D8E69D9CDFC8EEF3363F9CC26FF49AA6534B87297207CA2 49B9539F459808BA7E2268385EE9C6827DFB87F89CAA19CF631680B1939D9775D84749A7 2ABF8179A940E8A7CEEEFC170CB6943BBDD3E98C23391BB9E477AF11EA384A4B93E95259 8418913F259AAFF6B8EE3317ABA1613A428E5049E61447FF8558031A93D479A521F3330E 68193AD90885ADE8820A02C39B036E48A2AF4437BFCBC875ABAFABB1BE716E3CF819FCC7 BE8F6D97259041DC6DA4A45FA97F845786234739D022E7B5DCDCE0019A571B1A6169DEAF E23B218BEEF9B898C867099364D4A51E7BFB4AA7FBDF7CA09E70030776AFC1461DD984B6 AAAFE3264A9ABBDF47A535304A2B0E3DB65A9D6D125FE1F9B66F068507A04E6A48AFC0FB DC5C43D4CDE967D0040E8A0817AD569D64329E50A29862C2D0E322A409001ABBE75ACAEC B1E7A153E0EC5127D97BE60185EA6CB53D322C38EDA0463D473C407FDC21B237DB6F8FF4 723A5D1A161F462A047B1D8FAF9E44443220835C1DFA6ADB7239AECB7534B8969359B731 80CBEAA86C24C057F9D350772FE5307B4B9BE03EF31E00DB9D28B82544F05ABE1911F07C 2052985A37BF23643821A68A7A47E2CB3744D19DDAD0DE46C069AA1B65484D1D95C26DE0 CF9C3D8DC37F1899D17E253763FB8B72DCB175C6979B83D297A0B379DCBCB9CC026F13DA 990BD232893CD39DDAF918DE8225AA9FCA0D41CC73A736E40FF18DB707CE1875DA3AE819 607074A890020AFE5E3B12529E1107A970A5471CE72D7BB6E576F12E4430428E6AB07E53 CC32802AF8E7F51C264E5B327BB653653388843BC39A026204AF53C46709A939EE63A573 F3E4F32A79435084A6E69DF308E8A55B06A600AE98A866461B1051B794481C7E2CAEB50B CD9B7484BD339B95E296C0415431BA7610EB54B769BC84AB02264583D4378D03ADAE0783 32CEBF25E78290A744999477945A8E3D857AEA4612539A6EB042FADBED750B787B0FE0BC 8DC8C6411DE2E327337930463C9E4641F71C2913462F8AD79F07942A68CA2BF598780DD2 FE4EC32AD406BA7BE9D847DB5FCC7FA777E8F7E841D8EDBD33139DAAA5B74B3BD705D776 F85DE613A16D66A1B403A8F4D0BEAD42880BE1069A890BA57A5E59E86054A085078AC840 E1F3DFCCF98A689AA1B635816230572D2987A4E31DEB59B618BB6DCAC9FFC9068A7CC38B 512D527BAE89A21023167FBE2255134B3631206C809E1E507368EFB9871AADB547E987F6 3C6DDD7AA6B90322E921DE163946EA4917C054B9699B1F5DD8FF8E4671DD05B505EF5A70 18D86054592B5F75D3DCA1203AFAA9ACDEDAA6F01DCDD260EEB72274ADF5FA5411E0941E 88FFFB244426092FB3215BD5CEA4C86C656F9619BC4BFCE963E9E2CAFA13B3FF6A23F776 D63249CEA6A303A1DCCC8A167AA7705EBEC4600FFDD30088AF71BE22B69BA3EAD72C4638 FEE9F364626BEB2E1874D738E8D3C349089CBBD92BBA1D3C05AD20DD3096B74F5904E349 67FAF183B5BD1D3B39B2FEC760A1BAFE462985DD4249A4D6F24E755A619BA4A2BEBC9196 1ED8E3FE003DC8493A791C63283A17DF87932A2ADBB761C9C5939E28179A03F093BBD64B D32122EC4F982BB2CCD18B057BC546E9953746CF3AC7DBA1DFFA1F75EAF32B6351785F32 5EB78365DE41E8A22672D3280AFD6B49B7A618C042A3C654CC8B313A7AB190C250AA2B4F 0899689CD73871246599F2DBBE3749E8C9D9E85F482ED2173053194AFE0EC7CB18734041 0DD7BF93E692ABAB6DDE6C25AC1A2797625563CDDF4893964927DF1AE50704FEAD330953 C143031EBA1C229B53D609BA7CC0CF12783242CAF8D652DB6EDADDC679B0D0D33110606F BE81A71EA57C94F44E5BB70C9B5BA67C915786DBC074D6F1C6A3D41CA7A76EAF7351A573 C1AE8CD69E25CB278A17720E07962E3C880CFE0876D688CF1F0C6168F10C20EAFEE28C59 96C2114BE09CA2E2F2EF9EE11F4F8B3FE10C93B4F6EAD7B5CCF132EFE8422B5A89E0F48A BB29B3D00F557AAE6F8A1D0F6C91ADD596FA0F76EE4273E0B7F0082371250D306081C864 9A9016F21F68EEA8B80F1F79E358D3D4F2EB0FAA7A33B01CFFC872D2BD3948D75DA7834A 5E8290B454A1253401A00FBB6BB5736F8C9099A5567A6D9A1A28D0E1442F6F9964A07A15 20E8B6B296FF743203A64D8974C9FD7797F158D0FC88FAD70A627B14BA891AC1E590E4E6 2BA26648BA8BE66EC8FF8B83BFB1D377AAEFB30A659D99933AE87956032EBA9B2668ABA5 E98F39F44414C6D97B6A26C422F13D6D52D210AFD1639C4AC237EEF608E4F307A8DB8784 B0AE36D4CB2997066273BE0FDB5058CFEB28F77F6846B67F02B009433734FF7082C113FD 2D10EA8B33823DC7B3E68400C64F6FC8145DCFFC1DE0623B07FFE30AEF8A640998A261DC 44684D560615C33883169C5D1AF6E39F26DAC04E5AFA3A31410C7618BE70FCB527882FC7 1932B47A526FD38552E4B834569BCE8F0D74E8861E31FC744B5881FCC004B77E80B7442B 63BE05D1967B4270E5125F48595E585A75AD79E6F91E6482DD5C449C4CE69E1087887B8D 6971A334E593E9EA26FC51DD4580863D78CE214D66AE16370E22112267DE2287B980CD77 FCD5E82F609C617C1DBF3BED68E8B38A5ABBDBDB6826F7999E12FF68F7BEC72E98C04969 DC2F6CDB35F5D4A90ECAED733A0D1A493E90EC1BDB9668A3C13A69CC03BCD6832E927634 C40E83F558EF52029CC30DF3F8474B26194E5980368575414B5D9E5DC50352203F0F2DE8 47F339A0F313020EE7406E2834CF70CAFA8C2C8256FD8D5361E6783224A684B95DD5029E FC0299F5583742FE9075511F6B384997894068B442FA3715BE011143EDD56636953B9443 1FF9A0B409204F8B7F3F5BB3C192F7C422AE9F24FA68AC2CF64C4B4C7519BB71949976C6 FFAC3CC3E6D00568EE3CADBF7E5E7C6D49E4B6DABA7B1A01EACF652ECFECE18F5766FAFB 60AC3662912609A88FA36AD907D569DA668425038C976CDB554C9F8E9795A9A8A50D1F38 0D60EC660C33B5B57B2F617EE5AF2F8A8EF3D14F188E9C55D068753184E0E6C7A65AE83A 37F9868DD5F7A197502DCA5E26A2C68DBB0B42E0FFD6D106FC7174D8F82F752A1AFF14D4 7C2CF9CCDDAAD4D29B8DE365DB0854F86D9219CBDF55FBA42D3414A2A533B6E80A4D567C 4E4F9DCCFE3B4245324D104B45D5BADA72428021AA21CA5856E9789A8EC876284BB3C757 4B877E1C12C26632655307DE1EA7B767ECDD4EECDC659D6BFC9B06759B4D20FDB612164B 91AEF2E43E9881FEB35840BAED6EC014E65B209DD10B3377316112C49240CBF7500D2D16 B2E3E1B91AE0040A80D23ED7680BCCFEA08792E7B9D3824BB115938A18DEDDC0AE594A24 0AC1BF4819E77D6952941AAB37864A2BAED9151EB8D8723D36D6AF985B294780DFD08771 8845E7978E6EC5D60EC36A54B2762D3A8E50D7DF29CA8041C97B0D16C7917C71F5F80E51 81665F02528521508CDA0B3027EA58F88CD2C76A8184E8706A00976B9D57754CAC01A885 67F02BF4AE49B53A21158214D4FAE064EF6B5734569E1BCDF7FFAC1055D70F7A3CB55A6E 61AFFB84D797ACCBD3E22549846D681F81C6D1C53E1F7A6C18FA62741052447636127816 CBB8736015FCCDD00E1FEB528628BC71B9A2DEBD043FFA2E5F6C0AA845C6862788EC88B8 9B934F77C053E2E3030D496D06A10BFE44EC2EA6050BA801A40FA5DC7CF28F0845E31AB5 756FB9F508C230206D8BD5CFD4D0642B21F6E63059D965B44A83FB00A680DA5FC2AF9A1F 674AB332D9C32CC982CE1FEF925E2F384117AF9F48803CF09BC24B94C12EB1C498B8BD99 C08D3CA9836A1573AA1B11324959D75EEDA4C411D6FD987B95BC2DEF579903C469B81D17 03CF08FBB100CE14DA666DFAB7F0CAC9DABD5508289E191A8E42221F5B16DC06C05C1C94 A4AA46A100E1EB94A27C71EDE6124B298399CBE7FF6755918386D9905AE1F8569E46B313 3B7AF99B07C4774590D3FF1715B838AA10CCD2513FE81FD698BE50DC50A8FFDFE37A8783 8551BC4B0A59C3A9246D96031D8C320FDF61B81221FC19C00E814149DA4B810A44937E09 2B131A4E91D7EE1BAA5C223CA00E75F3D8C3BAE5A9D3E83CB088F251D3A4950EFC0388D3 653413C31CBCB34D3D80A8D05E1D6F58DA4FE28291EF47D03F8A822E59BD6C0221C1D88D BD606BFD7EA0B0855DCFDF43E3B1B994F86F6BB3C6446E61206E096E07B6DACED9A692BB 6031F603DDB3CA75A8C812DF08DD0425BE88D5A514378795587E292FFD6C1D134B006137 A21D7CEDD7E8095561E8152708FA9497BCE42261CD7354F3AFDADFA61C1532FC6455C44A 0FC69732D338C2BC1D55EEA088C9996A94B8B84E47060D45E28DB2A80FADFC532DCBFBB8 963C118CBAE71B055F714087F09542BD47AED5B06F55661305BA07E57C1BBD689FF6476B 5AB1C7F8B68DCB8379C1656BE64144D2EFA5FF9C1645006929978E6678E5E99CFA95B06F B50786B19B2BA89119D03492DBC5AC36DAA91FD74731DA05E64E51DE8C5C5173C25B08CD 63D1D5B79A09E2C016767C46EE1DA1D32B80B6A110570056714BBD06F31A92228F216854 FF2C97A3AF6E267ACAFE6496E44FA68BB2FF0BBA7EE13FB533F209F867E3062BD7895570 98ACCF749DDAA2DA0B19E9F4FE021B4A03F6E31EF520E09ED9BD02D2547778606339C15B B0CB1CCDCF9E3F8FEF99425A6CB9ABBC17B4FD088B57D14C4532C1212C02A0A4D19E7C07 9064491FA32C51EF9AAC29F4589C6D943723D4A09DC3A3C7AB4622A1C381B5E756A1292F E3009A13F571D5AE49C92E63C74FB5059CF021EB1483F8CB31E870162E2A74FC6D67D1C0 DD2B9F9CBDA3DC410FE70BF0B49947ABCED8F88E06E5A5346CDF4D27304A56042C0CB471 5B9D4E36AA9BBDA2DD027ACFE2AD4AF45274FE3D6D4CB824067683A357856F2DF562C55E 06408DAD253365B719E6D37227CD66B01EC2D1C72EA2548C9241BA591378CEE0A30771A7 3C6C27FBC8B43BF15C8019A592D27DC533F4F954937DE324993487A08B393E119436DBE9 C44E8749EB539CE84FAC4A33350FEDA51BAEF07F15F65FC58E287E42AD6C3ADFF0510BE6 8ECFFACBE73E0B0F909D6BC0F602F5E22CD0CE39475F7846CCAD54E45E4FC43A21CED958 652DB5FDD43AAF5E54937D1DC933CA52E42C48F732AC305A578EDA79DBF21AF1DF241EFB E507FB76402F9EF1BD4BF4EB51C19316464B46B3778408013F43165747F34E2692A807CB 2E830BEEFD2F129B9FBBFE7DF91A404E7DDC88413231D808A79148822B57EABC89553A37 29A6BBB30A85B983B76F949B1FEAC842A2C89994139BF8C50D899DE269FF647D3F6EAD1A 5029A212A1242BCB23C4937218A20F9DA1883A23DB5456248098BA134CA9331392E6AC5C 10A474F5D9255E6E664281B06FFF89711D19AF0B512AF3E6F2C59132650F49CD48CAE963 AABFF8D7B4A63E7F3A126B615A99843A5DDB96E95927CA40F6CF60582F6B7EC1357BDDC1 E3899A4E809B4FDDF604881EA9D3CD9E8A77310125F0C82B6B953F3F469A8FD12B111026 91C054E59C3A1203182340B133016A8E83E10C7A6C9490EC1C783B5AF80368904514EBEA 472EB96434FF879554A2441330105B767A5ABB4738A890CC44F212F8C599DCE8E2CB5FD5 6ADDD64A3E0D810451336E41F0650EB176C92197B8583AD62043E0D770EAB20E2A54CF09 413E9B505504EF65FB2C7C417C8FF1B5E897BB5C972BECEB171F770E20784E7D473787AD 3E6857A917C855B4DD0B8CBFC9D74F1C0A9BD7D7F8F6EDD287DB99D65127CC880BC09ED2 3E26007F35532C647C01166048BDAED5DDD9747F392FA2063DB3A31C205A11C1F2BA5560 5B34EA29AB25C1273C02C3F6C6111D197ECA1496EBA6067B00ED8914FB47AC989773E481 8982C4A35F2C74BAB7BC2DF5BBED0C22F4A9C9DB063C567E2F1983629F447966D728755C B60FDA8E9703F30F1DD5D4C299C37625052F08E08159228D65C5723460F8574FDAF1CBFC 18C56D6C131F7D8AC0D5C7C8A9E15C74273026A1B1A1DF4334C79E273E732AD0C15F934E A96CEAE644244D839533DE3C7B5A0F36AF5BAC127E5BF107E2D8D1EF9AE0706DBF9FD98E 07A3A96D8885E085113AD887BAE5F76AEC25AD21FE285F9CFFF4D86B922C971B56A63638 91B0145E93C92A547E60BB5EA5B79E79420E915E080475860AFC5AE3370B5BB35219E2E7 0124B5237C70612555DC9C2F117C453EF8BF68A0DEAB478E270B7D5D33C814EC9771C7D9 90A476D510EA7FF4AA40C550E391F6AB6EFE78428031DD31A7D8BD0133B98E4D07EF6314 D1FA4307CE138CE6006ACE2215F5B8A41612B26BE364A081FDA2B50429620B6337A88C5F F4B3C07B3B64C67FBB0AD8368EF2745E30F2106DD4A1828E647B581AEA1BB7B061AEDA1A B4811D44B5CB93D9C76F673DD1D0E73646DBEA777E76E7B34EAB69550C9D8D4DC24BD2F9 C2B6621B45FDF07967A95E408C5507A14AB9D4871BC69E85773115FEA9BE58E4386EDBD3 58F82B867FA6924F9D339C453F4E37A4FFE1E4C1C030E1C0F16650FED8D9DDEEF9747C21 824935766D6B5FE1D00C54E820DF960A73A2E75E476A5990106674417BBCCAE66D96465E 14CD16930A5C3A85515AAAF0098FFC3F2EF93819EA0A8FADEF7AB1A40B3AEFCECABD5B2A B53E7B56F17B9176143585D58CEF901AB733632F1F08183316E9F23A456F295D08D52329 ED6BE91F9BAD4D89EE5198B4E149AAD342DD321574C75EA6C328A89E0470A020F9EE49D1 152DEEC50E90C1BB077EF492D917BD6DE291C4E944F6EF1AAEC7F5990C54FC5D334C681F A1EEDFCEBED2FE4DC318B6CE9462648459B4A4893A336936C895E9C0C7EB353D374B05F8 FF9101F26600A43EA1809E0CA86C192E0C0960E78B7892DC6FFD7B903C1F108092364211 85CECDDB233F68A38F13ABA93BFB5ED0DA478124348F2CC631B3FEF1EA9C365059E3FAFC 29E08ECCD41A7BF93A86993F486F7D41ACFFB8D45EFD3CDA700FA7D23D62E76C5BD8A41F 758C35863554B6D46B9155616C1D7AD33B999B1911F3C63827B01B4D6F49A063B7B9DE2B 60076E653613FCF5C92E5F93F420DF0C062CFD3381B122A1B8D49BE2278516C5240036C4 274D9CF9C47AACADA406E57D575E25BCA0540E3B3347AE784D89E34B4DFCF9274D74C4D8 272889F918F1090EA58716F76680A454DAB17AB949D14714EF3D12672A5A01E33FFF9DDA 60D1D0B41034BCAD582B8D8960D02D7FD191D74959A4FD032985C4A3A66852C3D86A1EAF AB1C2413B3193BEF892A07EEE88CB0D6F2E72E3612FFA6BC9FB945FF9D2B9A880B975A2B 09B99DF1DC35F34FFE025927CFE8D0E320EA54D4064F29EADD7C9B3871FE4BB50C360B81 A77862F806F7B0FCB0EFBC1FCD823689AD978DD793544799A1C6A834FC07FD7D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Helvetica-Oblique.pfa0100664000212600000240000022351307477306250017065 0ustar mikeuser%!PS-AdobeFont-1.0: Helvetica-Oblique 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Helvetica Oblique) readonly def /FamilyName (Helvetica) readonly def /Weight (Regular) readonly def /ItalicAngle -12.0 def /isFixedPitch false def /UnderlinePosition -151 def /UnderlineThickness 50 def end readonly def /FontName /Helvetica-Oblique def /PaintType 0 def /WMode 0 def /FontBBox {-178 -284 1108 953} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020908 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6e69cb85d48b5a2770c841e1cf0695f49c5e870b15f5177315a8494e13 c9cf8c6477754e50a698057415a2bf0fddc8dd01d874d4781a1fdc9cdae0 9deada761d2eb54d83cb3c2a5ccc92ef7a0ea255783fd47975b898c43691 c7d4eada7985d146ff18a1c9092ee43b5a1b0ffd11ea22281dd0d08a3bac 1909537b982a8d0aef02e352132d1741bf135c3c7594e883a392968d704b 1501743691b74c48756c7f4d31597aba6f170d57cb44c7b620910f35c47a 53c64eae6f416e38bf5cb6078fb4633afd2625114080ab67119f55fea8f8 2a8c8e5d1dcff396e882fe928f3ecaee0e332d80884f3894341473a95beb 3d594d7ce2d4078ccb478991c0cf78f5835296fa293367a31cc277884f05 3c927039db5342d5a8fe2241bffb697f02cda435d534e8ccc449f46032ea 5ad96923061c385e940a22c5d1376cf27fa05112aa127f05ffbf49ebcd8c 279d2eaf67e6c4ad934a7515ba229012060542665f08d5f259beedbb5e97 d6e3cae76ecbf3db01ac653e07a922037d5ce4819e7eb4e438cd989eb164 573ba0636d16e89b41ced7ab2dd7ac4cf7749282dd482be59938607c6326 d2d9b852ca6f98e3fe43e2afdfd609e75d7674f5a9f36663519a4aba7d04 0558c8801c02483d29868140c60205194311cebceeffa25f1f9b92764da9 7249cc8eecef7592d3f3ff63f0c843740ca949d5904e85c4027290308099 2d614a4e890555dcdc196ebdbb0c5838db7c5c86c3fa35634afe03ddf75b 49f497ce5cf840c6db56f00dbadab0a3034e9caea626e5748001eb508a75 70187c8968c91dd8b2330f360d428d3fcc9377180cd37a8b52fcdc43d7d7 85f90f52a840f27cda99e09f8eefbe08647cf23798610ad2e60c9ca425f3 c02e57106d43ce0c5838edbe10ebd3fe9a799d14206f04438bc45acd43d7 7f2e80e68e1be698efded580ea60a35e9f3755279d4389708747817ef7f9 687f3331eacbe1d3f026527c0e220355d646f000e330d3b7dde9c83dd4c8 ac4c76d5ef5f5a04069a5e6bce653fbc2aca8fee49a62bc67876e440426e a899d39a3da75eb093476b28f8b4b968ebcabb8ab18c99512bda16156e61 e64606bd96d7a485af91c53978d0431fe06ec8f2e09e6ec4631b1b75f01a d01d915003c885e577e9a4f97e97b76991fb70687cd697f7e071b8b91fbf d477c52af2c05557952e5a7802feff5f3a1654ba79d88092e01559f184a9 553fe14839a36489cc6543aacb738258282175c085a8cdfd0665ddc72fe8 375cb93fc52914a6df73a758aec4314841ca88828f69c260c670d5eb5b0e e8bb77809c1c1add745b02a79115f39f8a923c55eea10d4417354e64ee3a dbf748482c43ebb1a1303e87203fce98e07c2eac7a801fbee4c726081def 3224534b170417f3c22e6fba8e9b2272dd2998f5db3ad1a2160facd7af04 d30891174f9615c3936bd40ff147682aa78d015a048ea8a5bd3110585f6e 91b40840a0ca362250977e203a8f945e88036622994fda2400aeeabbb23e c978bd77ae1d6df8826187a6ac6d412812cc6ed7998a1b3a476b46796162 005e7ea6bd1fb82411ec61354347a0f6eda77cb100b1d6f2cea9cbae5736 36a8afb13cbe7302080c5c3f733c96a4eae21e64395744f06d67bb9d28cb 3e5ae831b3e79ff36bb566d39ff17ee21d245c9835b9fe8f76f50502cc7c 0e31d8fb2b0f91f6e47acd238356cc128960df3813fe12a24286b78a3ca5 a94a886abea0ed70bd5fed0019ddaa527a2dd144703c7f4dd85bfa4fe86a 69e487e3dcaa8e4458573cfd8e204725ebfbcfc736059d69f6b8657dbbb9 343c5d9b26a38de632cb2d8ea19368f5beecc3dd2a3d55a9d81fbf62cc3b d75906e85c0a1caa506a10d158755afa5588bf49ccf91479792b0d33ed03 5d6e315495e2d686e242f83d930067bad2379e2851f11bd0651513e86caa b796d73fa17935b18f52541cda96036737fd5a48c7d957beaf2bfdc19029 c7886d6f2b1cb3462fce34b1e91cb033c2772ff66f46db8f69d76c3bbb42 9ad535e35c54a24cc597b395df0caca617c8e7e79a99ea44e8ee466fc1a1 8394745cc0264430546f993b756ecee75af6da6ee338ff1c6b9adc0b8b08 0202cee984ed74b053fbc6a82dd0ea0ad9a9fdf5e269b068f975682ae35d 460323798996dcd336d808c64c5e661b883fedcf1010b376089818433967 ba45aadeeac741bd681dfe98a369abf290ae768b62bace11aecc7073ecf3 2a532af43a85530ff09370958884ee230dc15bb0ca59a59d93608e66a69b 5c566fc98faee2667cfefbd6afaf2e7cd81aec928fc118f214b5b5ac3e4d 78e1c754708768a585f3f8ac277436f29671367f2771bc16effeaf9ee921 ec33217dc37e8e5c3ad31b25b050f6950d8bf96c95e66aabf6c809f789ed af56763497ace2482796f7fcf5da4f96e2a7fe57c02abda5f4dab6811b10 27fda8ece0ebb0db80a392117e295fa487ba9923561d959da534857b9da3 660aacd8774201b6439c06dc36e71adb9900d29c0537dd2a007a18ae3de9 b52aca92fa0df60ca4d9b04b976f5e9c82246c7f992f4edc12715e3b9249 3bb6f3e12ed391cded21444ee372ba57a5a8c733f7f5ed56931ff5db6fa0 2f65fa1f2eec3c1c54a705ae4322bf903b64d12da90476714f263eaf1181 03ce8afcecfaef0c7cb9e2a760142abf564b90087bcbc883d6296ae76bec 4b00b4f8e06d9f475db88a905cba48d72c928f549fbdf15c33001cb66bbb 9f83e4b0651ae516ae1d260a25e7c69e2ff77c273d61409c9b922fe69cc9 611744659fb430fc75a10cb5d884b936a02dc1edc578f23d69d373e24298 82213aa7ee22198714287b87d09f7409102324a9c69a209c0ce9f94e19a8 d49699b576f78c5221e4bfc0d9a855f2fc6556c1cc6a1c88ea8485906600 2ea3132eb846190413193268dcc4819ac60c8a3205f252d2fd745f5ac07d 7cd353d9a6bb1b09d5961af8864b380b37880b6d5dc23f5f9d117e08c46a ee9ae9637179c824ef77c0ca52b7166bbe82574a73def89ce32fc2649522 b0f598bf2520ebe2ebfc567e6fb46a8adc37e614d3cc3069be68899bac6c 595b335d300a475aa9f5f7c6bd006abc862a46a9ac10b505f836441db732 478214a4aa87d2d24bb34d7490f634f0b798b16e561739a7ce6609808e0c 31a589d070942792dfe0a913fc4510f962c2e4e8d13082b4fc549faac04f bfbe03b5274188ab0109e910ca677067d50ded7150b3491675f57a1c2ac7 75f5edbfa768f6df349a6e9ad21ad8d8a385a8989b84dc8945749689f4d0 4474ac9765320ec7377f7ebd25e5d0f7321790c4f19a0999b940ee69d424 4c4b2d15f88eebf8dfc32029fe35b97172253508a255c665fc10e1a85019 54d23a1034b09f44b26fb3608e449559f4602627ca76868f64c8f049ce8a 418635e70bbcb477b94facfd9d615bbb1639b0c853612a330747a57777a9 294c97239299ff9f6f5593216e956f26850320df8a88a8a0c8ded0c3fd90 9f0239f1c5bf2a824d78e97829cdba305f9bb608077effca86d4fd4279b9 c93591b982315c195d111d4e399572ca51ea5c01945f33babdd6fb4a930a 79a4a666492a46188359f97eca32367187514ce2e2fea2c41a2478562368 7b26e61cf7ca45e5919a3b3666ade0663431603335588f8ea34902a869c7 63e87a7f4ab164221fc6e50b157cf7d7ffd0aa4b9c9268f7a2c306195633 11ca4eb2c17357d4e1154f53133c6a5e047c110f89b3635bc81d95e69bb6 708fd21d394e08ad935320f972462ceb6b12692b75df0d116600d9132d80 c922d3ad173924e6dc3c6e491906347f0f0c127e378c2802eb535fb2a8eb 020f2c810d8d278ce09a792e33194c428215807429ec3b54e7ddc9026217 d0e47f9e88a53a3167e32aa6b4765ffa30febac71557c339a9911cb0cd9b 4f53d7676732f48176a0b2e818351ab658e7f62384faea365ac388e0c448 6df5abd1e3bceffd5fadf98d6ab53fb89fbc34638d373206cc73d92b722e 368dfe9e9a7830e06b45cb86f52f99ae08da83544446b81b0c81f33a846b c45a4fbd4a5878012626ef87205becc3faff442d8fdcacd899d5558de35a 5ef3ae978277f5996913a8ae73139bf37b1130c4ce263d921721ec1d71cc 7af943ea3c0e7542af37e911d0f50f895423aebb503215557daa96fa9b3c 3e63a7c4a55db386b697055e2b60fab9b46cf244439c8751a1dcf1adb963 55415d8b6c4206652a970f487fc4e1d649129c73d09cc83579952846b0ad 9e0c620e04115e62a860c77cdfc3fbc33ad240228c28dae21cbf90203f26 24e6cdd62eb5bc840b87f9fd5051b3d743afefd990134eab6a8af8db5c01 f9aff0f1d296401429f4598fdaa40c7e0f99ebb034a97c428a394d295d2d 970a247dda61e5f02be2b88e014c9a247bc342ef08a6927fc86be19922b5 7eb350dec0698f8b9f487f575981051c8330edc6dde9393870bb374021f9 8268dc7881c1fba62fe3461b8592aa34011c7cd3f2b9abdd2811dd91eba0 1b60015a15ea4c67c3649be9582dec411d124d222309f51c77b5edc2c8fe ee1990744355feb19fd70007d077b7c20d85c68b77d042f79c7a6c4308dc ab3b2b7d233e1b59397ad308c79a18897f2dbd4aac345f20b21ecf83e014 4cd691b66d096475b9f195a0f1c4e9bdc4a21aefdb0aa29186bcc07856c9 9e74dd327ff9e2df6e7e2dbdf1903fb42d9c189e4695625739fce99b64d5 6fa5d8b6a7d6779f08b8230d42f7c49e3deacc661d06828dce13d4fb727a da4aef4267749fbdf55f4a65464778e580f3c91b81873f5084740fcfcdef 2a8be02a4a6bfa5b0aba0f493e3f00225799769eed04e80054bea0749629 f85d22905337a70f25f59cd3ffdf894caa4ad7bbb0f274b81e8cdfd1b923 2b23d95f06825016091b2dca58a405ec615a02f70d514c09d68e80d154e0 955df11e3621b6f7cf4a14d82145bdfb166a35236375c3b0532537023912 2d0790fc5fc1e352e7f66c743debb960e48df9065357b84aeb6981369f73 ae6cd36b67e10e2b55336578b9864b4022626a32b6e41849e0318ec4716e fbd51fbdafe1e5c965dfc8e818bbf26ce3bcc5e80f1433c3038b97de9608 96442034d7d7bba974f2bd1ef3797128cdf102258e58180427cc6bde166a ce1c21d072f4af7e0d5c9b7c3d6b9183f1dbd843e6e80330277d6d36d139 5810d69fc73f6cca39083ff2cb39501309a7f3276e08a3739633db5cbba6 e647d57441baeabe84b14ecb5cc4f7ec182aca154334efbfa8702148527c 15d1cbee9a057dcaa4f10c0e290c5d723e5da47f3695a59d0419eb202d24 b62ae87068c8975cd8b8ae5c4700a6eabada9cca4f9a50572436ec34d7d3 16f01db50427ec7f794f373b93edaf2bd2d32fd93c20cdbe95969766725f 88bf24f999161c492a4db9317e11e725d733d197d58fd416594748d72d31 c83ebbfacf4f06545646f84198bd12d759a1170da07f2c1f3637d48caf8a 21f1c511292720f5e1e5ad630269f32d817a477686baf4c5c8df23adbebb 6b9f7f57e3b53442be085438ee4c8f4b3249cfb072f213e566af4ecd3434 610d3bb1338033af3ecaf0d46e7fc3e1e72350ddcf047001f007f32c80b3 e00a6028605ffd7cbf27a78ec0ff9ea031f83440110490ca586abc9e1e36 b28853deebb0c466e143b041bbbfcf9bf8c5187ed12207171d786389e89c ae05ea131496e10b4ac47b7a52060f02c0ac77a0d589518433847819ee7f 6dc55c0f4705ebcad5c61ea4932e3c2aebe173f2bbc0ceaabc63cd58e748 403304add9e78ed478594181bb8ad7fdb637f91b9255240bbce943157605 142401b3cea039dfb0f7e2c37fb84a1f83b17305be03b09f33f05f9e4571 c466af19fd1ddabd84a5074b583202cc3995027cf6fcf66c28e1a2604a72 ffc698024006e44661280ff8992b5fee9230f576594c8b22db6903cba08c 10b24daba9bc0a35cc6189104bed50fa5b7f11e4344abc0f677b9bc069a8 be8f8272271f2f3e3ec097364e6f3441f3fdf7f7d17bda6c756e309580d5 334a523e38c9c334ce3b50f0179b0131a3c398c1d7f542204ed5e5b6f035 c55b2455286e2b75fd9bea16b3fd2267e45abb9ffbec2b1cd89218a799d0 a27747ddb514bec2758f4ed48df8e2c3ae1d58e27ff1d9c6a0ec490a753e 70321844409fc9537bc0f9add208c0429066ee1838c822909db7cdcd670d b229d1b81e0f8f7a17d436bf9b870ccf4a8f03e01d3c30b3d66bbe34190f dfd7836fe742785b60a43f93a5cccaf13dd4617c949c153d80ee328feb06 92aa7348b8938a8cd1259e1b06bd13c60150d535a7d754e6f2a11dc7613c c4144f72c44c85cac72510a354142a22a78b88587df47f95a6da4f54beda 8e30d2d3e0a87f4884e7dd0dfe0568e2127e790beb1ac427340a1a37e014 8c26373677d129837e6e7c3ddb57e0c849f8bfb906fb791c2141287424e2 056b66f29fb41f6c5fa5b1264db872989337771f55661189f7eb8082ab8a 76284552f6dc54fd77dd7a0626b9e8c2108f521d8496ce02afff610388cc 4e000f661658d027545c5153fd70a461d8d6754f1b66070e42594ddc0191 890203800fd64ce2f8bb1c2a019c308e83bf872c4e020cb5105dd5e4e9fc 1f413cafd236fdd824e7c79d35122581707042e736ffe2684f7d96016c22 96ce406e4d9219ed58bda5934845256f1a3c207437a026fd70238537bc99 9ea5dd6e7a70ae97ad149a47fc9c93c385a12f17f2d06fbcc9c0b114eca1 f6ff5c9a9429777e4a4d566870d65e5f17c8322d6c64d0dab2d1eeb1aa2a e6ae3b89f87e1153f795a6f2426421f0093c60c96eeefbb8c9b0faaf6f2a 73de218ddf3a3ae97efa7854c704a4021d2535f5c112935689dcf559162f 191a970bf4d8669245a3c710b303c72a3398f57eef40e66f9511ce9227d3 aec0e6c558d6a84a7b877733976840a4d7a6c90a6e791cbd85bf493182d4 7e069f7ff34f78205ceb636b8249a8a6a8d389b83ec3da6c026653987af8 ebedf276da408cf12374f0867849c4f1c56cb02f28175317595225ab8505 536c42c4444bbecb7fbd60e2172152a77841cb103533f06a624773c3ea99 d7cac67316578102af0cb8978f9c106065f2f956e07b430b9ceaab74a238 40473dfba90469e229dc7f055ddf6a6eabe3c3f7a0ca684d622866df2fad 34a10ccf0875bcbb2698ffe3f72c7d41c8cc50e20c53459cd054d74d97f7 ba2cbf807475fe1ceeee8610ec941d55610a086f18fc6bcdb745aba11c62 badb831a447fc3e81a5dc5452910bbc3f2b587873347cfbc3de6aa7e14e4 472ee8ae0d342ac2ad9e74afac47f7e88531647aa84f855980d4f220dcca 12af5b90990ee5556669dfaf5699eb26c24d98cb800e48fdfbc27dc46468 fa70e247cfa0bb829142170397060fed4c25bceefa1b042589473ef2d622 416ce34112b59569e3d0d54d8e093c4436843ea838449c729ed266cba392 c53addd85af53c3190c817163752adc2a679d3b8e694dcb2c6b47a947c3f f2732d0d1797b7fa763ffe4616113bf32d7b18bb5bdbee2fc810f914909a c06f3931964b9a2ae930145c6581d7c197a6156777ba4bfcc417e1d476ea f85ba6a64590b1603eef896c7e3335a9e83e28ba28dc8e965798fad0fd83 3b272207ccd9bf750113989d686c5196679d173ba476392e406be918bcbb b9fe5179aab17f1032c82c84e2ce675a71d1f106a87f1d698962e07e6cc7 68bc98c8a52a72f268c40f786520dc88786488fffed27957375a244a2eab 7b1c3349b33e084d098d8cdc20c1d5f559d3917722a26341aa5ac2dce266 8666718d2e997c118a75969b803515bdb742d785e1d0e5068ed5f41313b2 58aeaaa26d092dd892781d1d3a02ffce3cec79c7655ab02646e5ba328e5f 0e6a6bb5f38c119934ffae98fe16b5306c41216fc6bc6f51c2760a9e5ad4 c30ca4b10d9f18c3fc6c8aa59d6236ffa9b024c740b0aea289699790cea9 5428844ad4e4d036c40b50ab94b03ad48021700c55247d8ef072e327e881 f994b1c0c48fe3642bfca5e824f27e8ed7149219c8d6cb6916675707cc37 4279ecbe4f14e86677a7f3264b71ddde4ce6b577b254972132e57e6e5e93 c3cfea5fe4c0cf761e929d3c4d716dec599084303b271793589423b942db b893a98f680c0f58c98b264925aa141e65e35c3a4cb6271208de70870d97 ad03ab4083bd24d106382a82efb98c43e4fd27728741bb5133814615a003 4cfbbd036c5b6f622538ce4c1925bfcf40daca9b4c2843c357152f0d6f5f 7e32ffc84ee99de5f0bd73e90b28246aa5db4f79c2234631c7c847a2ae5a 6481cb6d4ff1f5a0d2ddd0ef95d29049925cd1768470d8a136760ff9ed4a c11c8ffeb93bcf2bb091c8b34e4dfcf20b97aea464f35e6c66dcee4952a6 abfadedda115826f162edc8e7caaac2e92fc08daa884da79335b60d12c44 682b47c2e40e1695a6f92d27d09665a318cb0e77c74a569f70335ece9858 06bc905b60089bcef791049d021d97cd2bf409292d4a6af11efb96068dfe 808d91bc1b7e41b660b370dfb93dba1c837157d89a691d2fd4044dda2859 fc3314985c5064f3969677431d9b50cd9f54798ac0160ee0a464459cdabf b782367424283842470fb8d771379a28f5e1905a648b642ccebf3ba5bfa5 54c10cba285f4ba6fd649be2cc48efd3928fe3a8ce37cb58b87ecb47d593 0ddbe3fa7fca7e8558ff7d7d9f0d1cb18c99512bda161077baf2506aae9c 67caae00c3e27a4f051c785ee4e3c12c981163c102a6d1291f03932e92ce 53d0044c3dc92749bc96f39a77e072cf1b18160f402deed386c3d7dcce07 dbd53679e6f77696b36e212c52540609f1b5db0bb2d15e189848929db560 b01ec3d6148a1c85086c41f7b592071f08aa753bb3124ba9f07fe3319eff 8fa86cffea686815987c88fbb7cac3373b29ce56be25f4729e57ee069a5e e57f8ec2f5f481d6c591a67debcc7e9cf8704ffcadc51ed3c757524a6c07 661fe69544a2ba28336152683641695a13613281cd6fdd7e2db73f204aed e9cb6d99d921e72b5a7e65660936fcd79272b1ba61f100ee5eefab88386f 1667309ff4a88676a59391d8e1c40becf8e566ae377755f3d3179854773d 05a636d0373430d360f0ec554f3548df9a366705d1d45c4b39cc83528d52 5321b8ea50fbe993abf5b66d95850d70c15e7bc1fe1fbfa427d959d3d036 79fe83ffc09ef3fb8b7a5c7bf866cbd825b33d5b8138a9952491a855b411 377f24049edc58d351ac7361a3c1adb43c40a8b74fa97b6d8f433f9402b3 72bb291fecf7d1a49be7ad6d9bec6886551aaf8216cbc34c7000230d6c85 6a955259a1419c8c58d5d61cf48866bd4a7d04b70aab4e716176f42da8d2 b65d93d8d693d229b6f3e581d1a6c94a15713bb63fb1c3717a3fe1082dfe d3c4ed8efdd7ea673d34ffee27f8d87b0ed5b273072ed026236425d0af87 11a7df15908ac6e450be46f77e98a1802cbb96ffca61b8e940319122cd9c fef1203ca4767883a6e6277a71d1cac703fdb1d79cc502751a3687f3c784 40cdb9defcdb27aabec0098835e130519e92d31ba080f74bd39e74381760 60aad3c9e6f942d8578b8deb1b2e850b2c6af698ee17568a943d6b19a9b4 35b32eda754860e3cca79249cb6173ac0bd1dfb47d028ea7c3b946484fcc b612048f4447b0c8980dae35f6117b4cb5a0473c751ac9c2798170f5a7a8 916821d2d47784ef3e18fb61eb806d12b4a6252b70738eb12da190f7b7a0 7adfe973d6dd2092c3c9377e8541489c2b0415ec118137cbf8b8e42f0567 1d5834ae0a989228f474c44e004e167b2d4fb93b10872ff88f6906cefc46 a8d195e43d70dcdac3146797380873d462da0bd161c750b0d9a2105fc2d8 98df5fa035233add5e76c3d5400158c2f23ca5690a3a61d0f6727ac3ba11 e896c9fa1c2f123044d23e5ba7f039af14b3bc18b92a54fcf867972dc0ad 37205901c3c85a4058e9767b76a5d2242349d5df0c5bff35f8a1f06dea17 827919ffe46292e8f1745713c2ad98f74fd037431cbf06f08d0b81390c67 b61c835f4afee03d466b17539f53d60d39805b15434a019a0956f4181f8e d8819e41741e3de9515d41acf2388b7923957a15d11cf20c4bcc0ad56ad4 741f99ed5f9d005d622ae6335a3e5f81662120fd769a9ce6a9ad7ff85512 c1214aae028f66dc1c3702361fbfbfe8363c1f38c1ae3946453ba18f00a3 4730b348ffe40887370b0566ad26941d3c4b6c268b26666e51c237e2ef18 b59360965c1749262c363832c8e41b0b5c871e5f56f2999cdd5c43c4a831 d03fcb11d4d48083545ded2230f263312f3f447cbc3661f46fd88a03a679 e33d08fedf8ebd27f7d36af358989fc413114321abd9cc0aea3839c464dd 80e3231c3d0ace7755a7fbe01af2a66c57a914673c0eba257471ee8e8905 9c59a4dc3bbb8b704283837a76ff006557b63246002c75abd706ff62f2ee eae8d20ce46c74db89ecf49d1422b84fb405b4722d3e3e0a3a2f8d839b0c 980422da610c84bbf52e7b46b8b3cf7ab05148a0776c66c5a798a8b862df 314b0c3b433dd2b301f57e97f441b73357ca54f03db220943613da224759 85654796c1f57357f4f5aecd3fdbf388aafd39b1ed8cdeb8f050de7f287c 29fd43f82ef721014a62a5bbb1fb0cd9e39d34a955d74d55169223e1d2c9 242aa479614f7267961a4e1697aafccf124a8cf04488b15a8d8f2224fb58 e6edac6e42d82c460f5522fdf80d72ca9e6fe3fb13ab6fb976ba5d279873 650e7da02a97d384f37ef0877323a1677bcccd885e940ab179c935af90cf 0211c21d32f004706745b73d7c2ab11e7c5aa08cabe3508f62ee68a059c2 cb25474fdc1b87cba3d4eb274d1dabefd31b5d2bd10c724ecd895c4d0c6e 07486d39dd38febe05e5a8c796c1403ca39bb9cb03ff9e7c1b6d0982f462 11009390caf3df58278c2cf1919579c0eac18b14b4b15e47b4f3af6d1189 0d5de924ac9063ff9034dca78bea7ad9ce0c778599803e9b91e7acb24de2 c769e63c69a626401f96f39b153eee0b21de36a1d32dc13ef7d35e288104 8eb58cf7fef83db4a14db66bd49349be33448d2f62d89faf23a16e640398 59acbc25317f20bd2126695296b732668dfc3f3b765ed11db8a6173accfc cbab7eee04170be44e020d3ccbfc275e7371e6d0a12f94147d64bade5270 e310d0bbc3e51bd246f0f73cfd868dc4480dbd863d3b7561839511dd6526 56aae93341ef57873a604db08bb4d7a9b316453b6bb0c8ca4d1ca42a4f6e 21a5f7697a696ec0cb11ade53b57c6342d73f29e1a66b86405528fea4c74 d488566842c102bd1767a07b6ba482aa61e6dc2bbfedb0f2c49030464a47 269e8892246de0257a091f32efcf0774c71ac43268a567c4a1bccd8f023a 278bc1e8309c425f0072d9d9cf8c5f1f65f2c00f6e192b98de9162c31d0a 41ebd0cc6d71a29bcc6240ffe85ad5d8bc0deb85998f3b2984e73ab2c486 b2d7935127eefac7fb7fb1065f435be8a3e8327bd211d39607c3cb07f2e1 77cc2952e354f0ba788ac1239938839cdd2e75faab7173291d212cc46be1 551ff2d723be916a2ac46acfe18dd4927fb071d2c189cb1ac1ce9ad1fbcf 2e085e501749b1ef64a98457f41fa48d2be9a8054d3d6b6359d58497ec71 0337bbff636a3d36d8181d6782ec88ebc3cbb32cd843712b4751775dfa16 3368b947f390d8abde4ab156fb42519b4d222126b2f695f1a712dc29e15b caeda0b59013d141add7ccde4e1e3bb3b01237b205a38708508e304dd725 d3af085eeeb0d95252f4f42b66020096ea519f22a4e86c0516516b7bdb0b b158619eda5cb9def85ae08e56576d21482417f6412ab62a192197c4b831 d7b28b217e936d483fb24d74b60ea4e277a9ccef0d25f9bafc8ed05bfa80 325c3c02a0a633c424d673f740dc1bbeebd49a6c4d67ea0050a34e97997d d677266a39b34f4b3f42ca06be3a7f2b6139cdb808b89813a94b5c28732d 60633b59c2db99e2a550f98819217b195ec6e47a790d94158c234737a8ce 1fcda80c48cfbafa134aef156bf339118d98d114eceae9e2018f0e7c60ec a7ba881fbe7f7bb556fc15842d694df8b2036da109d00d19cfebf7c8993b b92fd29d578d01454e25fcf5fa7f361a734299d52516c1aec6710be72189 808690edd5b369d19ef3071e8bfd834bdd5b64df6a6f8faa2bd4550fdb9a e68eca5d525693a6ada53b93c7a5736e93afafceed26a72adc4d9e37b32d d73ba3be87f87ace26a4772449ea8978ee16779f5ee2d783eefdb4903ded 5af585c938a80156b9778298b4678ab6609423415927bd618c27bc6ef7e1 ee68f38f5ffeeb2a1bd6a19fbc144b2966f72fda20502aebef9212e5c307 f7c8b477ff89654f90f7be5a4d21b24d0d86762297eee1a0cb58adafc6ba 27d325df0df6bfbaf03f8297c9e4ef1e184eff9c82ec7fdb022fa17e8304 9dba78e379deabf3e479e8750f4f107a47f51b7ec58262e52a30cc9343cf 9b92cfcb4f6e7b5b6b3b61ab74ea228d8e0314ff46d80b7985126c024206 786bd6f367fd211f71986ae4dd57abd8ae83cd6836a2d8e59d50e1a6e72a d7bceadd72058ca2a56189400f1294e1c0ac67e9116840d4cc159e5848b3 062adb603fb3ba75d02308d13620afbb73065e517183398e814e701a53d9 50ce9c29c599f0e1044707a2e1833a5e9b40fdecd6683b6ad2f4d8c34af8 92cd5aa19ee849d2bab2d491ea1b1bd182e77cab13140a416f03e9d23a9f 33d8fa824f73e37c782e3d42616c1ca5894b04b4977ab84f60650a239688 07b68ff0b74a7c20e0a04376e8d753535ae2e88fe1b7c6884418c27116e2 3275e181684f375b45f2b4f84948cfacfe0c35023d802cb2a07375704b46 363fc5afede350697484ac605e3228a3e527a64728ecefea8c04c9464635 9d0d0b9ab8578bdab53e4ca71ff236d9dc2fdfa7cac25fcadce1a4d80639 d51d8285be8674148ee99ce8bd4f573607c6c939f76dc4dc26aa851cedef b4941acb641f9f31022fdcc9f767c697d4117d4c1aae0be3c8fe937b66d6 2019f5ad8c5a7a875ed9aeeaca10edf006694cddfe9c6dd1ca35a7c1999b 4bd4535a7b8059787d8fe53c4881c2f51422e6ec9cf813e6aeada610fb71 caad3906889c1f6bf01e8c05299cbb48adcb43802d7ed9666883147c4ed1 2a92dffb150d87412c6cfddf2ecb141c9bbba240d5524771872047d8c7eb be4e95d958f286d9d692957abd798108a36211b05732277e91f4123b5f10 c51645ba5a6ffc27b496729a14aa9068e74d6471690fd7d747a1e7c4edfc f6aacf4f0e308d7ff998f866f4abd7bed2c37b0f5f16084752c653dcae14 b1262e1a483df865c05c8b3757b82ccd7ac3ef34acd56fb2f4beae1d6c9d 265aef859745eff7f1f70fd85004c087434725bc97e5730e2f7ed70d8dbf 0e208ba38cec0e87eb19b88518a1ca0a3ed742c811aa4a470b3286c6798e 44ec46066d55183d8e9618b6662d386fb042a8ad49bf53bd1f44c858c7f4 c228e873f33cf6c5a3c3fad6e9e8b313b16be5e0b1ac4e0696f4f80a5816 d69dff68cc7a8b0bd9e610026c5cb4ba52f0b968b1718c5ca05fd9191d02 d3cfabdb96c721425151bf3da0e7000e14fb155e75d8e1b9a59d0652401a 56d2c273b0d237d62b320705a7b05eccdade69732e175701e9ed8b723b2f 8be3ad202b311672815c0beaff856d71e22d7c32dd6a25ed6452adf538d2 68efd0ba01f7530461926ae96527c8e401f8c74cf17b9b0dfc31c22fb572 2c120367ff6e0979d6ca110f30d1ef9f07a490812f04f7a802d37bb7b462 70c44f11e856d082ee3d18817b3cad46648c8a3848b0dfdce447cff2ee25 e8279b2bc9a59d906deb7a79a78a50a085bf9a6c6a82da852a52084fc4c8 1563ae80fe5c76f59812547f37e3bd67c5f32ff57ebd22ffe24deb2a5206 5898a93803660461a8e3622cb01a0043201222a54a3fed520693ca044b5f ccda837e6da40d6d7e27516ad8b1c57ab75788e74e28a9b785117a8aeec1 909fa767a5067dfecc77a71b3f25348b60e8aaa932dc9efe3bc02aa58f26 bf6e1fbf8528e18c544076bf2c4f9be9bd77a7b3012eebffdea9d0feb1aa a21cbd5b62c6571bb879a89599f84ecd17b351ac5453b8cea23ba55f4dce 1582b60942fb89d247912bf7e8ee1ff6b8ce4384d8b900b30526d7238683 5b3dbec76997f6dadb55b109f616080f5b1cf1db2c342f4865f13b2e4f66 64a835429070586cf7bcc5eceae5ec7251b0573154653a7cf1d8292563df a9e8450dcbf620e7177dc116ee26d57fea27b0ab86503ad323df92e4184a 4e359be6a76f0134d074e6e6a8dac649b19bd88f54f3d1d771a68702c1da cc34e5a4c58e96acafd7ec7edfe3b1c44403dba66929773dd02738d3b780 577b63a7fb36d61039c9ede84e0875fc695727cb9284647f8ac4f49aca94 10a7c9fe9b1c35d2769dc67659f75a9f88e63fd92064e8183b3f48d68850 16d6aa9106a41c8f1d5fc5035cfc7051f2113f557a563cd8c4f3bc43c1fc 84c84214c3e556508a82d43a7d115f3a0276718a1cd9960d54acee381251 b4f502d1ee329004c0bbf76f93ad382e16f6fef1892616a7955682e44f63 3d6ba1aaadee2eb8ec45e5f326a3fea38e40c1f1d009cde615112139241e f9167a520d27d942721d7cfca2c894c9d251865b4771249bc09203a2c853 59165d50da0c3c8d0ce475f43af0b4aed4d8316f925a6abc59be592ab5f7 05018066f0c2751be6f455b48bb4b66d464c249663ff1cde8dbe3bf124e9 8cbe3c8ca78d10eee5b4e7f04859b26da761628c11c741d529c5c10f6fbb b1282dcf40432b12ef01d5fe20bd3c03a2d41c78c1fb82fde7e85e24eb36 4e843d2bbe3f0ab924fbe178660742054a8f064f77dfb7930635786d4adc 897edcc1af91f221dc51e33230a3026b3780a1d999cf73f1d60fcfb1b6d2 6a72f882a743abb838a2f576ffbb7c7a9bd1ba3e330d44b7c82c60995d41 40f0c0e91357a1eec87448c5aec11e3d0b5706c714a54aa67a32902838d7 2dd45ea6c84fc3857e91ec87265c1315050edcc04d1a6478a797c3a4f27a a99291961fb01098e29a7e1edffdce977a497e786b53fa29a8133d129d4a 453fd05691bd3bde3321bee5217260ece8e925f01c1ad1f1569071d3eeb0 956bfc4acb7492c46cac86106fe974c3e7f1e09934731fdd0d0c0987ff1e f88a9cd5aa23e6911899800b3517f4999aa900ddc1238b27d368c8583058 3cf8593083abe04545b59e1af35da1b1759e96d5784d36a96f5357aea2c9 76f248244eb3fd6bc85ee487199562145b6a98eb4939f09a8915d2748048 08c980cfc1555195e9e60b21222847cce531211ca495065019e11890fe3c 75858d2ec7e3c90dbc4c05afccbadc4547911bfa0dd3c9936f1b23191fd0 5fda80321e4167d0f4a9758abc12faab4744d0d3b3a1643275a731a5e011 e6ff42fd8eed9db52e2f6d472773dfec11f721fe91bf41f9d58d5b0efbf4 acbb99f6481e0464d4365ffcdcfab37de23afc9975d44b5ff7010c93c607 0f6515157ff65454c1ba442e26ebc31b7260948e8a11a3c50b5474a32b10 8e4ad4daf84cfe502230ceef00695da4ccb1c9476bb6034a1d8aa28171d8 a0791dacd85f0422630dc5c905446d3a12157de15884f814ce23787934ef 09db7e5ce1572d6ceeae51bcb0f1347661bdda580fcf97a0489d0174e713 b9761c87b1d248f43641789248ef964db70653b61292b69ec4c89cfe545a 3434ef3562bf85bfe4dcf0c8e7b4e92bf3155a2b51137ac68a3d7ebb1e62 111e50a06ef1f3f007e9b15cc417f5b04072f700f718cef0e2ea46f1583b 253e8d79888d17eac35f619cd24720e5cc7b8e94514b38fea8832a55205e eca569c12b8a081bed1017de66c3467f63e9ff4dd3cf7f5a650d07ced14d d6c2dd3f5e2583feaf73ce1333523779b628f7aa79768646d56e24025d3e 1904cc9c1fc7d5aa766354cb62a162e75c84aa73f682d653b0160b586f7e b4433c134af8a217f4b6e806357171039da5f6de7c06dbf7f49ec0f043eb aa33592ab6e88aa16e9d1dadcb750ce53bafa372e6d1d77060ae24f9e64e 482a1f3977fac68fa135f618f9c5589d80db2510c6d12883dc7f6cad372c bffb2587a3676b1543d8a75fe5c0676bd33166004bbb990de304abd5f911 d262c8eaed804b579968ab25491497e00f8b8bdc902a2218fdf1908bbd77 2a032b0c7ac14ecafc54f548959dbd87084280d1dedc3dd7171889a5764f 8f0ad0bd64cacecb05ce0ff0f19e16596bc936c645c8156f8008ba57a05c 2fb3765c4e5f41f1ea83df790547ff23c860c23385a53e4da857ff0e50fb 33d184807fb164d0ee5525cadef8622645f26660ba291ad820a53acef238 6593f2a7ae456d7170b4513ef18910c846cb32ea5689360728fc81aac866 1cbf162c6dd6728b35c84cc3fd2735a66c9cd53c5fab398056bf26ef3c87 7cc2f171b052c75f28edda8ee1aa4bad0476ec85660efcb701a454247f99 a9ee1f6f67a0d65dc9ad5b463cd03b6416f32b686d2f6dfcf66b6b05133b f4dd27d507d7ff0c0b67a655f95111ec77647b6ceb4e684f3cc8f1495a29 c083761d6013d202a405a4662d08d707170f779ec69940b49d2e0f2d2f30 4926ed0795ef5952c64fd1b88d7db5527da6ffaf7d3e5e03754572cb04e9 85ed125e66ecc0780af1893ee9daaae01da8c18af738584b26c0cb342bde f18da55a6080a9ea1cca34930de830bbe86e20501dfb8993cc2944e4712f 65818d389b8080ab5afdc35821bee7d372c58a8238cd7e3beb8792ac82a5 16a751bb277656e1ecb5067fc804d316a75425363b2ca154704a587ca6c8 78dbb6cc709a4f44b26a24bdc536e34eb670a5a5461661549339b595fe8c dd92ab70bd525ce7e4b7a7daf70d3862b6eec416f40893a71181d798921f 8ace0cd216375487032d1863b4b6155c9f8bedf422cb130a28c3398ed578 0cc422b0589c9ea28d5fab05d72ae2a3408b4ad53f28ac99bfd83133054b 4bffbdef18145f4738d732129494630daeda7e9b26756f64564bac7cd9d2 4c3bede6072814f58a69a8643aead09c03db7e291d011aeeb314dc097547 1ecd249c1b4ae185fc6d46f3cbe56228546320d2acf4992d8bc4cf75c8ca 6ce6e44bdca2a1d644e0feade1cef1b4889de15522c41e9e6a55299beeca 7fbf475c481d09dc05f246f5b673d08f368c84b044000d0647947df73d7f d085a57173c7ecd752878c67748a8d63134ce4f833938082eec23a7fa2bc 72f6a8425cb2cf45cdd51d096aa370ea778d7f1d0c341a15ac7874a9ef10 aebccbd3db3f26fd97e8a3693ecc7071feebfe63cc5178e5e4cdab47e852 f32bba0f2dede295d58ebe8ff77234a1a2568dafa3020544a5a8f5e8feea 715d0acc334baf2bf42161892dde39e2ba02ff67a62a565643ee8468bdda 9bfc334c928be663b82b5f3ac37acf8aba14ed13dc4eab0f4165a44d907d 8b5d5e4903dcec6572e18d71d0d3bf20256d3af914e58c9aec7abdaa6a56 9e60b2b81fa9612dd39c767b738e59c2bd241974c0f2e8e7a6ffb2efd7a0 2083fb17699b4e577dd3eb73eb58458ae5951aed115ae9d4c67628f7cab0 2f954d9c1ce1d63357da3bcd430ca4ce82f3f4d03a2c4144db51924689ff 45e41f4675195368f20f366d4d9cb79c5cb949d00b6886d1d57593fd5369 305d6fbd81850b9b6bf433815f08a1ec21172caa7c0761db7df4bde1df64 a0a2fb12543f5cf0781b2384cfc471bf7602610ab7f720368e356c98cde6 6823e3b0f06eb917147969ef831955faa591db99aa113cd1dad8c8fa3c6c 30569c78878b570509389391b1ad3f98d81b2e14db2e9b5fa85cfea253b9 b63f3d0f37b34c6f2dc9d55bf875128c52c83f188b413f0577ad6e21614e 093f9fb3363caa5686ed7c47b5a7872b30ccac77c3452718ccf14e112ca9 17b5eac2bd5764d6a0151bcd348ecf2c7676b6bdaa9737c257c48a5cbe22 f595feb6f2fda453b5486359dbfde169993c4dc2097ccf7b2f2c3092b78a 8f6769012c4d257efd991352fc744104fbc811b24db4b89c814636e1f1c0 864d411fcf4034af0c951a08b0132327181752835da608fda85675e761bb 726b2b60f5c493de84ffc9345a15cf3bff5121cf2609a021bef02ed4d642 2acfa9b097a327814409843b137ac0e03963712a6ead0f2121a90f67bd1c 98f7fe1a712cc61bc60c880918a750118bcfac25f8d438e2830c616e0b1c ab4798b616bfce26db1815d8cc4063e0703ebea886c259647bcc6babe60e f6bcce3f1717c81db9199cc59296711f824a650ef61e8994870601f45e8f ceb94feebf8a617e920e197f5859b790b244305811469f270d7eae8d35f1 6eb0b21229a5836844f22d62d163c75a1ea3cf1b2b811c74c35d7dc76813 151cc814b15c80a2764ebbd6f24600377b475253c96bf78f392f38fa8e7f 0f030f76969e9ecb4350d88fd2eebc9d2752de6b6e6e41d77cbd5fe9fd57 0c5289218d585ee5a555eae8ca7b69f6d226062568415ae9c386844cd447 05399e311a0e15726500f6d2b315713711b0f80af6db142f9d94497b8a48 77a8a72906a7220d38734ff86804c6943ad4a2f89595c50ff8d8a39ce109 585974435f3204c5105c676547ef0bce7e8e80c3c81ce7abaacb904d604e feaceefb02586169dcd37ec57f6c3d4f5b6b5a3f35456c97deb614667a4a 1cb9b65e999788ee025a1151b749ca4b950a1a2ffe0513e71ac4ddb204e0 6e23f4431e38ac4191e12876d332c80d9cf92ce93e561e31c2175f8256e2 323adc8f5e3a027390810cf8980785c29102794e8b8cdd20c443beea34cd b667c6b7dbc81c2ab316191dab1c0e40463cb59e139adcfb6d9e27bb8db8 64c7f27467427fd74ceb8281c6064c5b191a3dce10da43f0c88387adf9a9 76aa2400db9bfdb459e42cf6b09b2bdf5be00861ca3ce8a2f23d63430f4b f27b3789fb01986bd33fa4aded789876c921024b55fc6da1dd349bab4c8a dc4b7497747ad37702ebe0e61ffbe207648333a705f33a3ef132c6b3a9e7 18a9b3a9e4d78539c3de9b03cb1384c6bf6cf73e61e40f3e5a2225e5de48 7a54ef99c4eead48d84b5b55fdfb869ffdb1ab4f9b3bd8ffe59883c8193b 514e9b8075c582b59f196929652d879986e7ee08f9a776cfe0e3a00d7fc3 8694c1b262abfd81582f3213f99963a50e9caf2ef4eec31871bde0bd14d5 8b54d31de25f12a5fbabec2fbbf45ff0e771d66bda5ec42b058be8a2e4a4 5b422a5f54b87b2ef2fa640ec051cded57b78e30646ea961c774e5244912 4706c1a404778effe65fbaa17b5c651305016092a735051f0e18007a8661 01ce08101f61f5c97d7f9e3886d3d32879a5f5482b525d65342ecc8b64c7 38ede5bf1d632ed6d8224724dd95f9f94c93d3760ea5d1a3174793e4db3a 2050860b1c0a41b9651968581de3b152a8f72e639e6f8f24a57ad816a033 14b1034bfbb4378bd74373000f6a6da5fc4ad69b1218688c699938631b10 b5d8de645288ba48e98fa2be1733f714977f61c4a308695e6600b0b61eca f9dd87b816a3f1d893533b36c303c68553c91ce8f3717134daf1d0a06546 26fbd6a3c6537c7e339623b4c4622d1a914740b7e9611f35b168f5d1c1f4 5d0e78bf2ec3e2f10679b169a2477c9d286ca69e390fb31449c1938a79a6 cd5cdc0cd20ed67977bfe426fd962defce481a56385cde745c84ef8e13c4 e8a4e44dc0f4d84961208f6299f5d584fdaefc677b037768843c11e10313 1015dbb73ff1629a93b7232690cf103baf56234a9613fdc758f00efe40d0 8063d857ca6f419cefc8f0a75da1da0c94592d58d66edfc4b15a32de7033 87003e7c7db051013aa666a7452b23cee82607f2c692f70917face96c3c7 a07bd6ad4e2a358606107e52f7d87c57f6caa346a5be0ad6690dec01707b 6860d7f806f5e9158d60e12306b84e2387c96fe6caac42ed6d6b8c15cfd6 4b499074c1eb63489fab7c28dca529759f84c2c42000e1de38399622078d 9cab2051091afac1bf1e445c2441b45609b582e793e8b8538a32631d9cd1 7257c968934d36675b21a80a68ae5107042b067fa8013accbea4111f9d08 e84ddda151f797df1fa3dc2d7ea179792cc29e39f89d98dfb1a77720ede4 0f92c33b7ed526d581e03ca5282186a92a7ca17328940e5f35ad492040b5 8739fb3bfe08f2059eeaf891bb42908e4eb0dcc51c7fb810e57e99235f1d 6e1ad73b09845f035b556ab2d981911d3ec199973ce925eb8f71c91858d4 e8befd984a8518da7c29879259192f81c5b7c20bdf583411578f5b308e68 b36b7431ea333942ab1f091d864badf246c35fd7e8e49ed0dc946accc4ff ec17e23b104a9b10c1fa8e63b4661cf61f69f394fa1b0c9702313f9eae7d 788e0e22441d7d391dae4e3df41d55ae7291c2c4b2bb2f52615f4fe0bc1e 4afa45c6f642f8f566cfea41be7ed4b4ea9eac35845807f342eadb7cf2e1 b5e3e6cacea87651ba0471b8096193134329d96051c6bfed2e960322e56d e4d18cdc3523cbc0a574da03ca60e08d6950e3322774b2e4271be90ec961 7b778df594cbac64bd473becbfd228cb8d8ea6d31b4416638c3bb4570968 8ed21f7cd9ac8dfd24b0bbb865630bbb522b32995b328b14b1cdba2d8987 15b5bb1c5bd9582f300bcd429ef7488e7e5caceaed09c0a72bc3a5e64a56 6dafe6657a551b58d0dea9984822a3ac8cecf878fa7bfcc684ab3468c2ed 535a8e130b46d31dbea07270e4fda12f70ab688cf5c88264f2b267e67e82 648fb0b7fceb32d337c2ef7f76904e5f9896a9455343279c939d8516182c a524272705cd02564a68e131b164e2b189ab0630597ea33d6deef04326ac 540a70e8c7b8c003dc134fe94cf762927cfcccd8a2231d9c424f8274d72c 623fa54bc4e3af385bd2a0f13b5182e4d96ca00a94cca79c242de3d77e34 ade85ff50d173d71588a0c196a5af331edeb25f8d6b15a226719b1a9ca39 e0d7dac898792a125a76390390d56db8aafa6e4efe7e64726b2d64a0059f d24e9e54002eea50b5ef7dfa035bac8cc2ab413e4efe5e0b3632f23921b0 c74d95e3b798da7d0d13426fae03f018f564d7cd4eb927133c4d896e7305 1cb0feeaaf99a016a1b3dbb51e805f6b5b5f557856adb7eed7b01d65e159 071061b0951eb5c7bc1e442554a01f2f91b9dbe02e0d52d9a148b802d755 0e4ddde3f36fd97e3c75284556aeaf11ce7e15eae2f273caed17ede456d9 908b93909d8e2fab29c4909f2aa54a4b484d703785164f1faad0d7197199 54c21002c76a199ed27706cce38121eded26a9d5423ecbbfd905ebc86996 bb76e360801e602e263e2ee82c4ded3b796bc6ad26035fbdd48acc4c1fee c4dc9919641fe688956865977f2224908680dc496f6e5e182d930a2dc38b 336cdc0bd1d5ceec3d3438a7550a6ff146bef10aa01a0849f715da525abf c0cc31bdb187e977827a8fd26cd774574d56b944d094885c79c6280b98c4 df881a28c2abf8695907318ded5b38c2999e21e9482063c3fe6e270a2dfa e052e2961195f6e66d50c0ef74485562035cf5659062c2d2fa04a5997d25 39c6ea7f9d371a7f2f594cf5da3464c30022ed090f0f37d3bf0e6b0c5982 fd1406558816c4ede0821260ce921aa3d8d587f965fc7b67be996df9cce6 693663563569749f7a0fcafd0bb13a90b8b3a88642f9f1e665ff0d84c547 cf383048938e743e1a539c1276de42c89505d1c5e59166c22d6791a72a31 09886cc95599776889fdc6264b14aefcd9523977d9c8918f5869f398e3ae 50b38ab1607d55e597be615feb2d03a61c579899e5d5ae9c1547a41b7672 591554ee222b5ae06c9c8940b7b80439dad4c985cad4b4e720cf5ec0883e 549bedd0394c1c2ab690e4f9255a489707ef7c63bf8607906d66825c5165 68164140ccd90028fbcbe873520007a40d0c7a21764155bd9a0269eeb44d 5222f57cfa5ccb848593f534dbab005d8a4fd5c897a4521946d015257abd 22d472b531562173aa3acc932cebfd17088b45df02e9d1de9e76c95c2f8d 3c3ef41118f4d684ac6061983b16447aa94a7adebe8f955c1c5f08c54a7e 5443b891fa6cb12103c5b6d67d798844de88fbf2d6b94f123489ae7e5089 630ed3ff9cf3491f6f20a7aab8ab395e46433d9d836f671d63d98909567c 82a469c1164017d44724c9167c7f904d3a4fe2932f9e76a88468965bd35f 6ac773236154660eb422c255d48e60996449a018bb1924dd0b486c37a595 9c6f5858084939b1d32115d905d917a05729a3cdd24aa69c5cffd41f2f80 ab10e6c3af88ccba661f8b390711289ced0dda0fa7a0d0c278bb858369d6 d37c58d61d386fc78f653371e506822353a86bc734825dbe57e41ae6cf3d a4d1f8d60cad8161ed94c50b4b99ab4c8873edba4b1f6ebae3af4ffd6e2d 1ba6e7c33f2779ccaea369163465a53193bb6852f390e55abde1684781a9 63065a05b47c7f16be882b37a2c3a5269854bb3f271f2dd8b133ca8b602e c8bf3155053c7b9af6c67592428ef8d42ba0c4d46514d748dd3f87a462aa c4b0a11d4c4d162497be968b5b231dbc9ae73a36930edef0112e10eaced6 e87d05119275a654fdff230bc65028cf4eb5736dcd5ddf60fc79566efb92 fa6a07625ba11f42006c68543a6076b9f1c50fc9d4475e2836bc83bbc514 0e99fa840365bb071f2b5e1245891510a4c22034f7b0c0245698e9d98442 2d4282004128d38f019bebb79d4a6b9b985a323cf4a7947a6a56e9fe249b 5c8f87e270e59604286082a7238da7fac8d003fb7217ac70d8d9d025a327 ca6fd92865ac2c4d5157f132d24b3aa4adf4a39541bf4c0daf230fe2726a 069f335fc7d7e5f8218d580c7ffa4de699b0c84c35a510bf7e644469af32 a26164c809229f9192d53aaa99828c073a9c828e596c122e3bb052364c69 5de68cca9375bff982e1a068017fb9395d5bba3ad8eacb66318b3fbcb171 51ed40c50349299343b797f946ecb75bd36c7bb8c3d4d8d99eb122799457 0379f608d2b165447daa63fadcf8d63422169d97b0ac7065bde0ecdc6fcb bfbc738c88e6e8a20dd953c9c0b4b88e01402b08d64bdfc3240507a1c93d 58bcd820c7f886294cbd0613e87bf6d0f4c20975ab63ae3e1b7ce1ae5f01 c2ecc18e8933c5bb9b73e650ffb71dea153ea06337676943a9798ed5ca40 f7049230dd9e08334314833d2f298e4bd3d5fb2c51566cc1796f2c3e1bb5 62235b916fea7d38726f2a1891dc0ee7043136833d917c150c5a7fdf41dc 183fecc1dd0613660b0000fac5117ce2ccba18d16cda49c21f854eb7976b db0ba9541ca5531e2e3cefb5f8777b989f9f825e821ac59616343c9f228d fb0499967f442424a4039bbac61b3d70148a38a66e89087ccef846d583dc 8e6a37b031e53a94038b560b05ca16eec367a3b258a6961f9a48c38bb6dd 9886061eec86039fe5f8f7a8afa937f213770cc0629d61c7b023f0f9b13f f425a0b2dce1fe6eb7724b001aa4c1879348dfcad1c5c9355344a69e98d6 71ed81c4214d7454d57f3670a114f697380cfd7aed6f38679222434d74a5 9310fc9948f3150f8008961a219e0f69e4a410f0136429ac970ea194edac cfe55830a76c6b24ac44b32b4ccba00123f84049b8593910c7146ea17aac e0859e8fff5ee1732d3642cb359d419197f7dc1ff749d469f8e88aebbeab b95f57397a31c9fa234ef8faac5feea277b78a7c0613f184458be7235f7a fed6d8824c1e84e3d1da9aedc61de2272bf7a633d6a303e7771234b68372 b455036cb1572f206aadf97d4e3db7c848f528b583ba3c5a2b2828fe4dc3 4ee8c4cb7ee5648016eabff51ffb744a94b2ebf0837e6dfc0ad391ed9936 63646db959bc0bb73458a4e5a04a756b52c70b3c408b69342a029669cc1f b83b0dec0f8e68261ca2de144b045592374b11a7e69a2d078d2e409bc539 e0d58cbdeb75f5f42cc113f0fd8a7b90efa75bf784da0937c74083a0d70a 1afa7836c6994c67109e4efd2b7e496f678f2fde23a75f1551e9cec9c07c ad46d6219a565f638c440c4fe7016c6f59098d42706cc3910a20b3687df6 ee952fb1c60ae11f61f14a114d82dda1268cc845d5169a59a87b027adb39 356ff8525e44c8cea0f7eb942282e60d03a0af0298354fe07bd4586c793b 4e79ca9b907ef76f8df85dda31e29ad06f1372065693e6b693d9f81dc787 63257cb980a9330cc8ba6d638aea4cc7d42b141c6d66e903a0c89b0ef64b b35b4820babab010d65d00cf3ba218c85c38114a66d7a19efb33b441b697 a99e225cc13b434791a5cb3585c0c956e33a5b93d25f82bd0bdac9efb9f0 ca180d99375d1283f5cd9e3a3f790052ce358a8f64cd0ca2647070fb8c7c bb4c17f25b1682359433e6a002f7a73d9542b2cb5ebe1f3480f133f667b4 cd25986df1a050309fb5f0eb05d6721391366b64cf13172966ed74c9ee2a 3f562a9e8e41a73a8046e22005bab45c09a944e0402c6fd69e41924340e4 c2b571fbef095f218f44eef22beee604ef95125ccdf8bc7ce987b03f215d c336907ee9c81be60ac73483fc1fb0cf3af3665e925d56ea326664d89d68 12b55a503378173b8e310e25eb22360998755f18727de0d7d9cb82a7bd9d 12f017619c996022afc32aa964528e247cdcbe1139de754da37e93cae710 81f41e0a24f1c60f52a2d23e59d9f7c3246293ebfbef1509fe5be541d973 814cac45866d6bc326583ff4520baba7d1077bd0d91b950b79f7abd98abd 5cfa749411651dcf6270fb9d4b25a9e343f133b4d787956a21f4372a2a13 b6c1a611b18dc5b6194a7d94f6c047d4d504706543529c5519628a6646a2 9a9f2075eae85f38c2cbaf98f5d596fd3270ce3eb00f6148de89a847df59 75dafee94cfa331cfb006012080cc5327ed0b217d422df762bbfdc66d1a3 2607e0301ecf7fc771c7184403ed1a06ea24e98c06456b829dff786873c8 d9ebd179b34bd0cfb91b729b930b8b017685f2595ec98d713d700f44f388 1f8af8058df6e3b0fbbef0a071396d66598440aa83a1618e27800a993b76 4a08720589c97475cf507ffb8e7b9ec592f01f9769b99f547ce6f12b6651 edc7c30e295ebb83df9c09e24e71f3e9d3c368f92d7b008188acdac2ba61 79080f4c1f877db23da7e93e536d8396c3fbfef9431c8145e7e8b98073b6 bddf22a60a1b9570b21ffa329c1117ba8003f89c6bdb03b71c22c9509470 1af5a3ca01e69d3f7865bc2fe1ae213099856a614332fb5b0243ca3ac816 ceefb4029a46033d9d47be96c140421907c1f013b4896c927be77decb98b 57f1461aa592543628c83c6049f61faa29c4a50eeeb8fc422c2866aec232 af441404f236d4b5c7f05ed1781d59da3aa345704c49e38170868ea3f7c2 9c4b98d5c6439668cc6b5bfb095d84ade1b4c43bff205e657852197d89d9 ccf5268ecce28ff09614b657363ee7c3e7024381c7c5a1c1bb5ac66cfda3 d3dcdf5668a2824803b3a394b61c9c3c896f09593ace45cab6976441d727 6a2067781b18510408df5d09615e225407050ec90a076c10d0ae36d34d16 e1aa031df73150651dcf4ef7c49a390c3a068397df8711ea9b1cadbc496a 2970b4676034b61239736099cc2e70df8c6406cb1d57330c394cccf1c485 d23513b3fbe44eb0e4a1bd9b13583d17fcc5540dc049fc6e2338f8fbc125 fef36f1be23d9ad3885ec331d241285366b4a42edd08b297c1158c9e65d7 235eac138f05ba97d7f95bba37057a09412c3f91912c485c5d3bed6e507e 3b7c66783855ede36b55a07a16da0e612cea933c0625142c335dfb3b9d89 42498e8fab159451c4c12298ab2f596caa05bf8ebaf427b53e35d6ba3ea6 3080663e2db75b1167ca925d7a4b05d19d71722c388aaa4e5690c19c3654 06e4356d7b77efd9e656449844fd647cd196f9f159209db5afd89f664c6a 1ff61fafd6b74e0b20f689935287ac961b831b32fbe4c19dbfe2b3dfdf4e d475c60d77c340c677870361847c3f557d2d8f87d5e84cfc8e1eec98a881 50e5b1621503191df989d48dc30502dcfee2f12d567b0d3b1fa41998d5fc 9d0c1d1f83f8560338bb100e2332b026a3cd1c251f55ac8e4261bd9bbabf 76a070400239676c1a750b344a8c68ff468da00315bc231eadb2de8999cc 660ba303a86147146667e32c964af64a216d35b8aae373308c75024857c1 1fbaa557d978130f4272c992bbe5ff5b37bf1893ba936c6a5dacb1fe76b1 ae0111771633800b9fdd8df28b86ef38f5bf06f73d0975afca6daed4b470 d5d44e52780e02edebaa8ec0724c92b34ffb6273ef4f545f11575307a56f f2a3b488034050516d396b5bd86b034b4e8158c9c5ed8ddf670af2ce388d 2e1e67b5be11d841c0e694e5349e40e7a3b534d9d6598d70ef191d3bd905 85c0ab2f5ace79cb06b49b45f7c76dff75a83b28374fa464b9f29d507908 bad0a7cfeaa913080e69453615655c5c8f2d489c76f76c801269ec47e533 3b588a4a6fa6d13e039f52a09521a790d267a9d23a16d6d81bdc4e0606ec fc6687f0be8d09a290ade3e7f0a7f23c9e36ac1ee126e2184da7f292368a 8e87c36cb90b6a35e34851f15e302ee32e8f0b4d163340a17a117e251433 ff9570ba8d719235937963bb4d2e34c52862e4043cf2c222ddcb85d14ee3 ab7bb9660253bf062121dc65334ae2e239da2a5b064a55fc2ce63403c6af 32661c33527e8397b3a3e92797f05470576ae315c55125bbb4378128001d cd649cf8593963224fc452ae8a84acbee6b0462b4ba5e6bab2fd5d9bbec7 543c72deb8a337e1653f1df112dda778b1e5d7ef700f01a828cbe481d5f6 a4ab389d87b8a17354e31f940b751c6d635b1611ee3e716bfcc574df3400 7230dede724cd054907c24b704da1dc584bfd288bdb41a4e653a006062c1 74bf6d04e4b58c9f477b163543651897d20fe090f75599abc1839826aaec 7fee271625ab08062d1826adbdfc8966d95e4619118447cab0fb25efffde b730b60e01b3ce33ad238c565c2b457e6488f3ea05c04821d4c771502d50 077be9aa16904b57972a3418cb56fa4220cd53bdaa25bbb20ae66b6ad4fc fed0f50a563e77f9f45ccabd873ed3500db69a1507d21c5a6261e1737ebd e5ddd7029a552510dc5cf4a43e180a6126af058bacd0b7997b6e89a1ef4e 9409f6aacb72e04f0d0494306bb73106b49fc68b89b45b2c975a8402072c 728c665df46d45e1fe33e5f1e96788c99508c9356d8131046702fd805cc9 af255d6f2dd0b2199a7b406a0aeb2c3ddab259ea245b74c8691a87ade3a5 af557a51016336fbefe1bd9e91915599799027911648870d7465e73de170 d306e0857f5b1534a3504735e2e80eb89f4782243b7cfed75903ce13497f 5516c984cccb9a2a77b0cc83b48d83e3b14a73ce0878ff571930e644ab4c fabc5413f34d3eb1cb40ca0a348b9bcde39520a540f13967fcdd9a567b23 6cce5132f623dd783701eae1c82dceeea7291338de32e9cae773eda485dd b7c74edb14cb2d6a17afdfecb051b2b2a8663448babbaedd5484ef654a66 1de0404384cb70707f4ff3ebbccc8568ba34427cffc17661958894a710de 89410a6d85f6dc836156c1e5a2a2e7ea3cc7ae67ebf39bb09b73dda53f44 b6905704cfc9acd4e0c36fff3b2a903439d2c657fa76d2ac0f0e4a36488b 905d6f206322f64c9ac5e4033cd4b3c1626baa716fba0707143a78882a33 ac5b415acd2ced0724b8254b535bd218276a5d0fa4ea71e8114083e215cf 86008c90a2c8d93f1769b9160062add4d1a310eb271e28e2b907f0156871 fc823bc60e12290be188c448b5e9c2b2076820dd321cd96d5c715f0f1bb6 fff3fb337e3659be98ee64343b479c7fdd9774f08174e4793ea5240105ec ccbc3e1d24b6f4bfe1ae85597312356776b4526ae64f7a71ad7f87be80c0 d43d5060b73b67090c441ab1d0bd7588ab7b181032dd33ce26ceefb0d8b6 30924066099bb26207547bc61b0f74fd734f96672c6a93066c5d20e04097 1d7ed461389affd9fc34324491f1d36f1484068eb1ec20b212faccd2552f d7dc458e2b24f89c15dfb0a1ee0c28adb4ae49e4a820dfb1bb009ba850a0 967f2b7e3de2f7da068858060a1987ede2f4eae75e5c579255e2229daa7e 26b20328f6507b1b40de30a8e1e614a5d37a735c6523fec864a657141b3d 3f959cca62583fe93b7d6278653fae726db3173f2a58488612d2f1380a95 142a045d19959b80a60261219616ee890052e81323299bf7a403fe2aa0c1 79edacad1eb4c6a4b912f87efa57c6d40d5bfe2abe68262cbcd2966865b6 ff5604b0b53bffb74f64c862a3cefd6b9c2a7fb92940c29d37cdc47bed79 89dcee471a182a20fd3202f3b16523e963589a0b45125bbceb556d5c598f 88d0e0ce9ced5635165a997d0dc833f2975a558189c439b05c4cca642d59 f81e2a89347e717634a9bd9f556e55b1b5deab9b026285898c00b21a7fa6 2d3a8619608b3a18fb83d1d06bea3b9c3f9d3c0182379d2634ffcc11bb23 4040d6cfc7e588e9b0be2856fbc1a6a891513061d3cef78db42a92b6b412 9c28057fff3d154fce8ab4f4751fd0f9c0523dbb5fb1304bdfbee77159ac d94948636eb391254df65fd37b11e54ffbb23a8e8bdb3ead80edb7f2ef5b f5024093d1985999d72600bcf7f3cee8d526260f048a4adc70550a57990d bd135beea9baf6c6c680435e8fc6a76a791eec2fc5eefd65f863e744a707 dac1ee8de78551f43b25f26465710d19d48e6811afc75ed5e45316d41407 4934c899bdae6588d9faa2a4f46cbfb35d49fa256e0e03ffd3a37a1d4f89 c3686aa1aa059600de0a8e800bd206ad1670e10f60e61f4fc7ebeaa63b87 1bc0b42c800c2331bc0a5d119d82555f57de2b4d60cb34d5b418c49a32c2 3c2d29909bdab957021b69e7d1e283ce5a9f386220a1ffe3e7fb6706737d 6235577cdf9c7d667d0c052837c85b36788b5d5fa3bdb9526a19fbd58700 9a780aee454e9ee9ae566031dcaf25bac4ef115ab611698a44817ee9ba61 466630fc789f6e0c47ea0d854334986903ae28c924e02eb0cfd9840dec82 dbae7520e45153e57751f9fbdc6ef9549f74321dc8eb7ca9935107961767 c58ca5605028c5c50315d83785254f9f285aa93c1920c6ede9c86c82202d 94fb79ad996de6f4c8b65b7413cda60ba4090763090772e96b417dfe331d 7fb4447f2c0988970e72095e144ff9024610ad809bbc541f251b2b981cdb cb6fc6d5dad089c8e8343c66c65d29213ae4468d0368e62a3c9ab9680239 294e73e0ec6e66d20397c46fea5ce41f8eb6b0389c0862a0e86b61c52bfa f35eced9fcc83e4168467a22aec386445f505e022fc8f8248f62825b6225 f35b1ddb034d1eac19e5ae28be816b6fe8e94284806d841bd78745739cd6 32de8a545dcc7754b2042b3f1f39d1fd72b9028a2f7385fafbb364c17da1 7e8b8f6a23cc1c59e758a6fee4e586137b285a8c7104144b38e349f00e26 496cc8c3470dde3d7dc7a49bbcd0bfe237830021ab2e6cbd3aac59d18f25 b6adb3298b7883e0da25559331b1c5a19b230241aad2dec0ff4552e97ed4 3f5f712329cfc7f3be8c6b37125639b387f42d8554e33332cc415b2c7d82 a18037d2d60bc9bbe936899d40e70aca10407c66c85d963820a4a41d3ef8 37a44466bc16ec17989c10bd8b706fcd29485f57981ea5257ec7e3cc95b7 2c2efadbf7e38cea09669becbe76d0d9a69d440eead15835d21d455bd747 084056c6bc670902726285177f1629abf28ffc77209b59b039f2b53480e0 9ef0305606f9ce7bbf00d9c0527f9576c96a9e6f9bde588e632ca338fb91 889d23128d9764d5a0f0b2e33b166bdf7e709fc8e79f62ff3374b583da4e 8f451028173d8c3876f55ae4fc8f67afe0ca4c1781db13be58891c71edc9 0ab127712e80e97c7c0002737f2cbd7a7c3ad35237c391f34828786389d6 cd59415960f4c6ff7751902575e2c4f75c0ea54e5832a6312fea90204b4d 372ca1716ffbc83321d6057614e8fdede1aea527ce20179d6fab22cd7d5b 12bcaecd30cf342485433c34de2b6e7f03490a501187078ab900626c74c9 fa4c4ba7b9a00de515e5526e0bafb576a4747e6ba2a096c3a583e2f9bab0 48f956e3743c17c0d25f1aa613541682edcf50dd102aaa67d8bc56293feb 49354e534a5083c7c37a8b0a08711ff7db6b008f12eca7752e0477ccb106 a7eb3e22779a2ff2dab3dde38dfcdfd3babffc2ac03c5b8e1def18fea368 32300f54d64d1ab9e4d9d250fbc73571dc962518b4780bc9f70aa4339072 8aa9a06ad65eb0dd1e796b7970f6798cca980999c6680ab425b1dcacd42e 739f7f9e78afbd4e4ae46c13f8e4111793722852057ae1bd547da5b6a03d a2d412e8a6a10b7cfe20d2334557547a2d5ba17949b841d1bef5d6592ee2 21184e7fcd79aa8ca5178d72e1025d0e09f1aa268cce62ad53e97eb8bca0 90746229be0c660ad3c5a45708c3faa27b31d570f144546257b58f7e72f6 9a735b94498131d9fc41e74a529f8a436d3d6eb84874e0595ff7995fd4ea 666ac40bdd065d6f1fb2c2e09a367e6a91eff7c614e4bb040e894a282b56 e07c74b5ecdcb8384081a7bc32147f86782f4ac8c68e473c4903a28c4d5d 37013fdbd193a14c0b51e8a86357ab61db8413a8691727c31fe3bfa2a6a4 87876216da92408c2994e1eed5efe537f4c7cff1ad2e1c277749936261c8 8fd1b7ff4a27a2977d164fc760f23658cd72ae20a85bd4591aa714735500 bc168c32bbec32e6fe2a1e2d54e95da92c9f48c671973a71aedd26f4f6f5 285397fff1e35756c47ab318674185e7c49984be745d76df449a3e4f3131 150f31d8257dae68daf78880c956937a62d0baec88374a968bf0b44ad772 61636e85e9705f7d738b2f00405c97af7022b3cf59a92d9226fc59a94baf 14429fe7118c6052dd12c89eca50c4fb34bf34484a54df0b6601f168e8c1 f20919ed1da076983c18ae6c0ca107ee46d5c2f771592adfaf9c4ed4eb64 4cb20d336ae6e8bcc7f10cbf9c1fca8f998d0783911f46c4d54cfd50e956 1de6739f13adf0d9daea7b33fdc7ec0cc811bc4a69e9f87cba3c8f97ae8d c81463b60cbd2672db20956e8fb2c9d500ae624fb019c6eee0767266c7d0 a18a9939b159e3ed4a03e0547048c8b3a5cc7183ecee5a81a0a862cbf17d e0552ada3e14bcf746fbd2b4ccd09fbd7c04c25d317ce71cab439f9c66cc a94aeb142eda4de2db562d8785c7f1b1d1b1589c5c740a2f1dae3862ce6f c4c5664bfb589faf16308a5672c37cd812eca0348f0eff8af0e3eaac9960 737085908426f938e3cfc54a46f46e432543c2b534ff4190ee11746b12c3 d5ebbfd49aae573210896ec9556f3f88b809c2150a416f5cf0dc5b069849 d4c638835dcda1d89484929a478b981ad0a9dcfd5ecd6dd54828c44c4eac 227602b4afa04f3495f4164797a94fda649e530c7479dc76acdbb23ecba6 03ce654f93386b81682dea1f1c479830c549d5fa48a4178b80babf61f780 d2947f2aff2eae79a8cbf83af32e3f2b41db6d9c5066c1b25535a917d930 a24f0eba065ca35af9422b519deb7aa380fec8f417533849b453a08445e8 9cefe1dfb51d26bc2ef72853385a991f318bc6c2f1bb73a92f892db71019 a81f8d88c2f3213cd42ffdd4a27533f0017aaf0a9b0339ab172670a4e4b9 b4017200c721ea8dc00b7b595da0ab3dc00246486f8003afd6cdb10c3712 77261d3fe124120319734419b755afaf4371bd19bac5d99d0ad5c72a74ac ed1df885628e1bfdb96728fcc3e3c7a67eef7a2985ea5df879a87e00e558 0e35a4df914be9f81e8b7e448c832b7d18bd512060ac891dd155b202884e a8db70a18184b7e8272fb7899063c15ff70c3bdc7fef695d96f8f90e376f c0d18fbe307fcab004bcaefd74d6127ea3cb71f14b5586f07225cd015e5a 530265349557aea867bfe5033722c49bf08ef65cbc70d5401caf8d1e06c9 322d74aad5e2f5919d38ac3e995f1f3dc15b34eafb51380be17c44572cc6 c6fa95a2cb544d0720690d78df38a21775a8285c9b5152f8e00a07c5c50f 763c9a4d05efb879ad38debb8b830d8599ac705e56f48245c613acc26330 de4ad06728dee8c0b440cc32e10d7420097e9ad94aa5e59201ebbe305fd0 7dee336639a7795239a6880b943c774f7f48ee75fe46550201742d762b7e 5c33aff3931ad94a82ad3a9b7657034809baf559a433bd95ef1ce54ae392 82cedafd3d936eb36a776c948df24febf87bdfe8c8079f2d52ce1abb7e4a 6b632063242034fd17e3156feeafe919098467444607a8aece2332f1fb00 351c69edb8fc8bd46d6022ceb68575d7d1d2c037457677d40cb405977893 20d5804ee32585b9e7c4ca50e9c898305dc4545c56b90d8f9ca18294f877 63635fb3bba511c1539153f68d013328b4527b64b26f7acb89d594b584df 6b6fb6302bc6ce963e534797d1a0b72e022e321e894b2e3a615b51991770 9d1857c31d7f87a7a4dc465e6da20e283d60a942f8ca9399d90a268a2c1b b97658e178656be06c71c02b82aebfcedb510a80a185cc2c5cb45393b51e 9806a832202cc4ca8103b948215f133a8ef7b5865f5f3521c12c3cb37886 9464cd1d8fb4e5b922f32d8781edc7290d68e82b598a2eb09a5590db2938 1e148879b65d23017d8214f34270be478a74556f01f69b800f4349276d4e 7ec93c2c933720ea6a10fed99e061df9b20448070d55b138487ccdff3e98 5ebf7c08ccd2905be7d2284c44aa29009375db48824c938b14743a096c24 8e5767d6881c64be935a4a88f9f55626aa05a085ec6f8cd3cbb491d26637 e06eafc4bb81a046d60b8d3520498f470005531caee076648e3a5de10a75 b2650fdee2e030d9813494362f29185d55b316925a2c495791f0fac8af85 5c643300bcbd04db15181753bff8c8c0794283bd5012169bfb41feb3ba8c 27e4c674e706ff5eb9b88b4a58c58938a4face5d806878fdc851cc5d5496 c87b55dd8540d00e874d6a78cc71e92cb36bce33c6f9a7f3b5068f495246 6493ad1dc2d8cbcb562a27fe18cddb7a1e54bdeb2eb35e87a6769b0a2f60 218ae615d6d5e49bad6fa985c21e5ca033fe51c32834f69cc5fc6ba8a925 69ac2a765dc6159c0e20132cc967b371660158b28fc8589439a13d78d972 719b3c2f6beaee9263a9575ffb90695a469ac378e0cd64be12367732a1dc 5858ed04a17ff760671101b09432c8dc25539a6fb2d8cb088f531bc393e9 e750e77d1432d2197077d958a57e1d6692216b378048d20de3bab43b2c8a 59accdbc3c40c447a641112f22990cb2ca9bf0514026fbb2cbb3d0397850 2cd19964583ab89e62690b129538d75096e50d8f51806d5c8a552dd4acdf 2d0bca5d09ee642803375e8ab4ce1762d85934cc2a8fef95cd4b2fd3e876 1980ce002b22a6bac646aac1f3f02e3b8751e078935211f7ce9e0a9a6ea8 b4303c36c65194ec87120dcb1f70a5dbd89fc45f5c0d0b4c7e341e0637b6 dce39692645b9b6ec35424f8646a50be0873f1a0deae46a22e0879c58516 ac1422ee0b1feb0d3a710768ab8832a106fa9747321991c88faa147cc30d 549a0eab044444064d33a09b497d9de5d0ec2be587810f05f7f3c9d41cd3 09e718635702f75d18f04dc465069aae0ce4bcc5e2a2c32a4cea6c72fdc3 029aa19484287fac8b739fd25e6cf1584a8348e3821b33daddf5bc434ad4 35d0f1250a2f9d0223230f0403967e82b1c6cb0fe87c856951eb63915ca9 f5119d7f34e58adb29b23eba47063691cfea2c8c8271a52f24484a30775f c17db229469b707c458d1bfe2b11fc4d53bc262c76b884c54c33ee2c31fa 9b27f42ca91b8ef94c216de65699e9fa036d00ea9e09ed3624794c95637d 15968ae398510bc72733b43a039a9ebe43ee0695f28dbe12e410db1677d1 e21b830c0337aa3b06a1e3000cd2821ce048ffb02f122e7118380d007dc5 580316f000fc3d3809b00205772f03dac655539b602fc86be1f12ae3f82c d94ece6ddb427d5af73cc2ac7cab12d34f19ab36f699d234cdf9b55544d4 31c67e2325fb707ed9526ed05438adb9bcb30d6b7701a4a630abb0915f4c fe2d7ff7e0a10799f5fbaff063f3363b326e1b5804289714c8fc78fa7f45 9a65991b96a399cbd792fe3855550e42ac0f45ba15406b8a1307d9ad6ead 736cd80f0208df4892dfc4dfe169f851b28f2da7bacc6a1d3b1f74492f8e 7fd1c79903f551a189278ee34a404173d4c7451f2fd316f269c48d36e416 f16d747b43584c4146b4168241f33b8f45729a67e2985b18ebc8277f42e7 edfde88da5386720d6b310c5640da88bd8e49c55bc1b681f155bab9f099e 16d015b97c1be9195663b3e474e6d05b19fd73492082cf2228b86fc86a2d 24ef668d3c8d0ee4b65249cc45c051d2c5deed9666e71c03a5e71efcc335 0380b2a2d68650f97bee8f401b5c639c8264dad6cfdbc52c039247b72009 1fc4e70c626dcd2f20fcaa0c31f0a85c001ce9749ba3a6671fa267e3b546 932f06062a2a882207431ab34a7fdedc21cd510bece5cf7532b0b7c101af b26320fac695248c804a6029708c9a80ce61c99a54130c6f3579e2524f13 46cba928e6119b48825dd9becb069b9acdd588e131164d1b8d860383b621 0e145227fec03bc1fb0eb2cd39ebe0da72a5ee3ad921e751e965c2aa75fd 689a2502b9fa31c6e5c2e4a5886d1439b957a449d7ba28b98b2e00669ef6 e85d12ccbb19b72c95d8db8607de44898ae083fa4a85f5ad1c0f2ed0ec9c 5e2a545917422eb3044457696b1298e2338c96bb1b59150cd03b3863a8ad ef5f463b8f04587191b85b05951156003f7e7dbb9b3acabe3f73f4bb0b73 8c9d3d5001369740b3eceb2573cbf8da9317422a9001be281f00b09958e5 f3dd87b4b835c7de472e9b3b0230054999179ee159512206da40a118275b 8188974aed43def92061249d3e624216ec77e47ec608b6763554b8014586 29201bbeb3f96b992845c27fa1f9db1b0ef968807922e6957be781d48937 a446f779700a599bfcccd5f704b708a8da100077cce3832267653608e0e4 e208f29fd0d1854bf85faa659f18e29c0aa33b765f0ae5f86c63348f7c70 196d143b177d5ed160a6337d051dd3e8ae64d7d7356110161126e85be829 07baa20435450fd40c1827cbdc03e16921e5d6f2fe2e4eb51eb6e52c6840 ca75bc7c0211a5a67ef6bb2c1e3ee1f3c2ed1b469508b74cffc970386039 76c1bb8db8dcd6e54efd0b103d4f48fa26a167b5f62ac41299c448b932d3 8c8c4af293104b41eb13509a8def61ece91e7aff7bee44878d2726988628 499fee0ece15c7a9022b557b367d8d08192a06e1ce6cb446db9b4ade1e0d c4c4d2c7e71afef29fb18f987dbba4cf2033292fe039dcf573b509655d00 5e86e4a7bda3aaa8ecc4566d76255f8ea46637d47dfb4440769b321e6386 028f4057724ad6d1ac615154a0870ebde6320663e83449bbb5477fe8da41 d4ba6afd59ec63c3a579ae570c65de1b8dad84d2c917e226cc2b714590a5 28a7b7f56dad5025c28fa795cf7174f4440fbcd92ca24cb99e6c7f82b391 07c6b1913ba538f09ff8e6efa59e5f7051f016b7b274fa38a1c87be670bf f077b459e3913d150c0510aa44e34a49356d76e347b00f8583d23fef821c cfb037f82faff33f74263ad37bcc6fd7b45d3a28eb4c141847190ec859cf a91a5d2e582bed47feffb2afb79dfdfdcc0aa5d17ffaef9bc979f5aee927 941d30be8bb005e32bb168ed1687d530312da1608cc6a5cbb657c56bf43c 52427eac57b195ddbb67e2056ba5fa7aa4d78c6a8d2b3f089513d488f096 9b004558b1004827bf9d003b74fd55aa7d2dfee877dc02cc9e51eeadf793 51f51469206160c3fcd88968984d68879567b0ec21acf2c83d682f435cc8 9ed7051eb8c55efa299cf30ba82a93e3c3a2038be669c24c5d20ac90a992 101cb9c6e9d3466578effdb8332a897e303b23e8c9fd45722c0483ad7b18 bceee8f824d42d7e5d13c70b1a4c0ff97afb7cbe8fcc9d2283af14855705 feb79025c1cacfbd56f925ce09fe16c86ae73154d6ee1e66d0f65a5485a8 d423269bef703610b8c44bc9e5d0201f700160504361bce8973402234952 2a00a49d93f8038b366c8207ffa1f49732322a5d40388ad313f54f6e0132 51c9e31af31ff6752eaacdd16371c2c3f94244552457ac69a59ca04c2e50 b198797db06c5f09a0792c2ac5aab51ae05a77ed75d59f82e53cd0e6fc07 ef88217ae64552d7f4695007f404dd1662bd5c0fe72b430a03b77bae9e80 f6d06d5a7f1891f155a5c827f29d91bf3dda64e3ebbca5d78b0a80fbead1 14cb717b0ce000dbb90fb300184243e75d410491e1c5ccc09501c89da607 56efcffcc2d4550b55de1120991ea0ce68dcf1167a6ca229fada3ef90325 eb864a2a9d08de76b803dbbdc3abcc80e43bd6592d0cd91f235f62e28371 54f25a31f2ba9ba28971bd1d3f2bbce1fb424c9752947a7cd4790b1f3968 8f0fb76ec5b4f972d3683bca40283216e529de2500b772e512d6e5611d8f 406b2a4d110cc7557e1a454365da8e1d6142317110295d598a85673445f1 9788b148a14b1156e8d43febf9c73db5d7e6fc8414bca886b4a7af4df5e8 ba40556f29ad83a23eedbdba06057801e686809329b4786ed211348b828a c759354af47a0cdf7da79d5af0555d71561f77cd0bef822f4df470e92fcc 282953a9a34605d327b14c7e72e05995d0f2184f926c3ff8595eeec0e174 25a0c38cb958bc420e4e23b9e5e5dcc3f572ae5595fea6e3247bc95f1d4d 6fa1152405b07ed64c1da1e908a2daaa261c7bd4c0a0d73a0858d4e42e97 925a3ac9e6a77cd240838f22bc21a4790ca494adfb3ff2b3e6464bb99b25 75425ce725cbdecacfb66f0b261b2ee1e8ae177d619b3a73cccafef215df 6e6c830d6ec53ea909a39f4de8e774fbcb9e8c460108ccc1d928bd4e59dd ea294d3acd82c23740349f4c70e865f0a3c5c1e33199783107e174d9c415 f2725191a4beb2f3330141da1b63b402b25fc65221b65943175efcd4f025 eca42567de9a139ac4f755f3722354d24682f694b7ca255bf570d2a83ca9 21ef20e8c75715c3e7732833acd7743730e5f74a718e749bc157674befcc e4d5453a7ed2c202f2e668bdae3b7d6a418513cdccaa37f09d7ad8bf941d e14dc50026fd0fa59a0d0f9ee2bc7b1155c5a50e89aa1b77bfaed709de1d fe37713e512a10bb1a44b50d6f660977d3d9992ccc849919cf17a4b55711 c5c7aed6024176d6e6713fec30a77ee94b1d313cf545f21eec07a8e6eb6c 141673868075c66f16edd72c84e35339a7b5e7644fd19410423769eb5b46 5283a5e4dcf2501352193ae1c9d4a798acfece7690949a2ba0338167d85b f8ab6c34701ac9b58b9468f840cc84133edbbdbfb163252bebf1bd3fceb8 333d48074bc1d2ddb404503dce6d7b19348e7fd391dafe76247ee8cb9d07 9458bc850d485419a93e03581c21543d1e82ac8aaf41a19b47715015226d 768fe699f83d8a1442dd2da169c9ff96d89b33a6f9edd942f5000b3568cb 6c2cf4507c7dfc65812a768aec13adb74c0d10fe14dcde61aeac6dbb9fa3 1da4fbc2434b6e6c05a99e3316376fbb39abcef3a89596b49500d566cc7b f2b3ee422f47f5e4e766e4a479c0b1a009dc388c6c1a9d5a4e40821e0c3a c2bdc8b3dcb1873abbe962976d10946d33e9567ea305ca0c8a33cfc892fd 229c1ba0dffa92108408a99b1b9a3d0f547467c6dedea14fa7477c211e7c c4da6ff8121063d8ba552eb2b827977fdcc00a0c72fd59b99b5a50dff1ba e25d55304f6dfd7b2069d99cd8ea713d8116d5d3dfd03392f7ff36aea8bc 083c73e7c9e6f96690e7b27cd163e373d7f8b7a01897c958c4349ae3af9a 50f5eeaf1d84ccd750d3eb76eda7273593699d09d3f45d7090a7a05ec5d3 2e2d1c01de045e5c615fa88c627eeb7fbb2d7714d2b8e0aefe3d4b0f482b 90b630e581f5e008eefc7945166050dfd7e2a7e952415a2ff5178fae103f d745f184ecadfab03bf013fe4aed4aa5d7dd5e70d8867ee99374e0102af0 058bf986338d5bf57359ade9f21bb47ed0b9f777afca6600c5f5e8d06004 2bda79a9347baeab753ee67893587cd74cec9c2e042a6c6a5258ca8e2f2c 4935a8d1f81fd27d1262e58456a290b7e4e22b32d7fc747cd962097498f1 144b9db3a67ce5253fe5b2e42035b74be459b37a688d660c19655fcc5484 ad230fbc4e4dcdc3a4b16c6014618aae79f651e6f536d5e67828a337f665 508a50f01c6cd4bde89927f2659b92fa8feb6436f25694c96356e597b9bc 3f8967b93c46a8291ecefc9dd0ae5848124aba5071db0b0526e737143ca5 2351bf29ea90c0ab0e4a615dcf52473b198b0db8cab2576764ad70c6b565 40b7bc29e2a326fe6774aeb37e2425d0d7136d857c6aba196e0a1edf1530 d9661dc8b014fb9cc8a9bd169afe7dfa7b0a3c92d8a4a106e081b8c81e18 0c36cc62fc31eb66dc2ee484789c99bb4cf74dfb3fe5ebefa976cb54f15f 85dd50cf8dd80b6c27d412f2be472637ceca5ec535fd8fce28f348172954 4b637dde6c88cba1242fffdf3b2be1e54bb8ef4baf20f3f7f8a190b4d47c ba6059e52f54cbe862bc368d69b99580383ca4f3fa397cf5a054801ce051 66e8bd9abfd84e13daab5adf6640da59a5bec522cb1270f3a107f5bd2be0 328a7d6b5f907488cae8f0912fb7ffa001684760afa373d92ad1725f3963 740163315fa7ca1795ad89f8e43acaa2acf8c74d80c97bdfde11529b7dec 7ba66bcf55afe7151c4f858a9ffd34fdb60a344cc62bf571316505091361 4f8e044818683fc3277513de95dd446f153e3cbfa93aa993983cc7d52819 526d0831a1b3b7721775fb77fc030629dd4d67d1e6e5ea7d8b6743472ca4 8f0f38e93022a99e848d90d4fe08ca90e1e12e6d3409a0a5b5ac56b6a659 ef5123584d5a35086a3b8c156987d7a75801295a1cfda97d1413ee603da8 9e6c507e38935c2087852335240ca8a252cb3b3bbd016cbe7a9abfcae0c3 c6d27d874457e637b3bbbd39aeff34bd2e5bf50ad015f4c25de502753ec1 58b65f815d9043260a4dfb4285990051c5f608352e7980d3dfeb45fb16ce 25ac70b7e1ddc591a50f17a7f7e6b91cbd29b1eed75745303e60ac68cb11 bff6569ec93e9128bc2b2b3d6ed4ec66d580bb07018cd0707ef964b3bad2 fcdbe13f82d16da3c2c20f282573e71f6c7a1058316927410c71b3c8eeb0 572526451ee50d6748fca54d50a2170325114c59851260e8b350e8e4f3e1 22652dc6db3fbc73883ef840715988abf6a50fa40fd9140c33076c112f7f d8f573710881d675ee4f720d53def515133232810a3f6210c28e375bff8a cb2315897f8752143b6f8c434bfb7045c9d9bb3de3d9c722bac7e4585811 1a0eb0af1ea12f6df028e8ee4e08fdfee2fb60ca654b05a7f80e32140d83 cae2ba5026a19eb40594f5d28d82e31d7e899262943386950309d386f9a8 5dbf08ac57ae7a1427275f0d881a33f424fe477e89c788209489627eaa80 9109e794940cb8d21709a4730619ae724229ea20294f131075d0080eb40c dadb1d06bb67b21826049f55fe3cb31a6ebfd71bcf4e08440f1140c777b6 401145b45ed28e1396d252c79f36b9b2833e586af1689fe77c7c8b87b153 4d91ae6ccbdeaa4a548aa618a98ee228406d849ce5a5735bbec0ae26f3df b9c124274b487ea5f09ff49f8c2bac757d1bb2c603ef65cd71559b4f994b 990004b1150a53e480d08455bdf4fb7a723670c60df4b6a87b879e9a64bc e5a53792a0aeb0e85575c94f4da18dfc33fde826d4e0f64ab7c9eb4205b9 1ca13543eba0474b0eb33cc4de1a80b31155b7eacdd45a99ecca135ccf8a a7e608de7135958e0e7e66a882ed214daef4233421ff99bcac2d54ff8c3b a9bc4c05e5103c7a192de16886085c9492a3348e477bbd7c7d104f6c4991 f0ca54bc85b68dc58148ff4cf17f942368df90956063cbc0f205d27cd5c7 8837f2c30060e322288607557ba3e6c9a19f83d7f186e997e657e613e3fe 5b694dae2ff8b425cdddddfd7fe569ca71bb04d0323445a304760f7d2fb8 f2b0e6abe27cdd3584c6330a03ab435ca443e86ad2e38c1bca6bc0fa0066 b8bb6e1e6fa9886ddf3a2ef39de4f5e43a8d38fada433581ec98dbc72f6d b08b7dbd77bea9395de2056d8a3e177be1dadbc0cd8b520ad822dc04989f 37558177b2044db067a9945470d2a12a28a6eeced324699d40f7c84bfb52 190c4e0d8afc9b8f6ac9b8097f473810ef18b678a378d0f6f648ce531cbd db34c5d2e64f47aac02056e11e796343ef3e2505f5b7424b2e07e4db88ec 03a79cafee233d1f9f4e3869fc358e8993019ee2894187165c33dd8eb7f8 40e3577c031c1a52526cef2c0bcebebbaf531c4053117462e6bce646c170 79391b1eb69160e6bc66b6d87435a3cf365b6801ee2bb403fda026198186 ecd387aab33770e43ecaf98fdb5a3f36f965f4251647a33e09581e7ee25d f3754e700ae9c88743ea0a7328d70628cbb5f86b4c949861c49d631c59a3 385174536125b37508f1f89b5bd416f1d51fb0699b62bed1cbcd52ce3088 97eebcbdb1b06d15e15868b0d330ff2682f71eeb30881e90d96513a06ab8 55d3931995ae6908e477c80ae8b60412d59e518907a56a21c2ec0095e164 f798f8fa47d72ec70202899c7996c61c92d2f19f05f7b0fc65493f6266f2 af95b6c0567e514029347956bc5a7e89e3ed19bbdcf919d78129112878d8 fd97823343c0324525d1e91844c22a3cde088306e334b0b5c17f2570a5e8 064248da411c44cc8e6624e0fe117999203de72b70565268774bcf781777 c008dd87892fd50ca3ecffb1f6cb81bbd87bdf0471560627040b3045c6c1 129b46378a2268f67ba8f1d156ec8c222e210cc132c8bd1eea1d035ac348 470bef553f29a99f34c2be8517dff67e34a780d252b83b7c9a6d19557215 6bca3ddbbc8865cb21f5a20341f8ef4fcdfb4e5463c2f1d0f6d81a03c82d 6b97c130f88331c7a50b90714e13728f7e2aba12e61dfa40e1e7ea49aaba 75aeee04630a1647ed0c83cb77ab3882db68df123aafe9f62e0e208dc697 8cacf25df174bb5270d4521c985f2548ad80b9ff67341f4a2d03f89c0e9b ba3feeb362766985fa6ecd12b0da258f0dfb6f306a294605a5648ea44ca4 5c6d91f5e927f383d6e8fee839e2b37564e2aa07f74892f91959f3b06dde a0df70312dd5da9e1b44507f4aa3a01977264c1d86057f12f39ce426037a 1b7df83323ba5db3070aebd2ebd77326fc03de391a26dec425f05776fb40 2df2e9012774217628a85783a3014b0f7fdb556cc8dd502f576ed0c9215b b7dca06fd861664d73f46f8e96322e192b9113654df43592d37ca6bfd113 c7cfce20e589ee6b6b5d4375f20fd72040ae26cafd7b8905c082bf825b58 b0e3e141640026d5e9d19cd9e514aa9f90e9978e51957475b571863a20c1 a0a3145aa8c55da65660ce10e5442772f0614fd4a96b2864a1c8e9fdf6bd 7baa9bac871bcde39064792a4b610d24e57d590eac595d946ce66f34ca77 df0f4c4204fa394244cdd63239415567e96ed4dd77750c677f48e53fb1d4 34fdab5905fe5910f29e4a36bd793337bd3543d2d5c010a22611d452f866 bd8537e5755eaad3c2d9ecbba52b1ba48e25188066e690d27e922aad744d 6853df4b5625bbf9efaef5b8db8da91dbb92de482c8fb5537b79cfd1aadf 8ad426721730adb7fdc24dbd9f58b74a01323ac68da4a180f213019648fb 427e3c2cebe07b2af98e84e6cb77afc21884bb8d83a174f23a00c596d590 a057eb947d630b84c118d446006d2feb8385a8cc47bbe8279638a0df60ad 4d2bfc457bd9ea896cbd254e5061c8376ae4d8df7de8100d2d5b6e391836 43c079aad1ddb1c2f94eca4519bf60909b6a9718c31687b409b409de0d18 42e068cbe737563cd097557f5f2bb229d7b07d894febb07b334ef110fec9 d3d7c1462f92f113b082d8f210d3aab474d4f47722847c88c9c0a22efb7d 70b369b7ee344a2c1e7b140339bce7bf5cc77262d6f3868bf3e04f37a81c 9d50522e9ad6fbb4f6183a71925fcbf70b218939c274453d3958775aa6c1 9cde77526bfb739573193067205c03cc8de2c18afc79669fe3ad9035e9c8 352fceb95a294b66ec549365f6c2224f29ec31e230fbf9293853b6da6943 090112f3f85d764754c37a9c244e6d6ccecfa3880b2a93507e92cd70eb76 fd27c5640bb171394a37c1eaf77e6d7f3fd08b9555de406d66b4cf06addd 57ed8533f9f04422a415427f75245bfd0321fed3e4582f542d353b286d94 2f0f72d1b7a5885d85a8c63c6aaad7019603d2fef4ff29adeb5164b5e105 25832f4573c3f588dfbde833c21724780d1278de80c997ffea60dad7c37b 3bed9107338877ce9b47ead4599866f101645b73ad8faa7956d34ccbadff 9b6e57e830506fb73773453e9e2b882ed60f788932500280f3fc716c46ad 6c698df1fb7359e6e25da61c85e15110819db3d265441d964a11900c23b0 dc01a448e041e675f46fe20cc46bf13c3cc9624a75c01ca7ca3a051c73aa bf4bb1258551806da6a6e2748d850332f6ad634d4afc66d2759efd86c38d fe5242e44111bce5fc3f255f11cffb5b12fd404f682275a4ba1ad77f12a7 738828dd684e6bee8b07bc4e0659518129ebd3b22e90cde15c6527465669 e52a026abee069c5d37f3336a7272981a7e86dd51ddaac0e166829a0ea68 983a6807bf2ec00291294b6b23743372d5693d2a1a1c50394fbf302d7ce4 0b6ca0189a74eeafbae5a2111ce8d4fe5edc403f6da463e87511db9eba0a 6e38bcffccf9878c72f4f86529df3a9e46f0e0fc276a96d416dfbbd382da 926e843ecf5abd1c4fb491dc2e4aab73ec3ddee143322264903830263775 ecdd02a602707e04d95601a032465003a5310ef843752d18d06cf3e0a92d 6931a4a7ed9a12ff2058976e121a76956aa203f459ae45406250830317ad 85ee1a1a91032fb368292ca80e38c3b409d97720d909013d162d79c38520 8c09b0bb8c1ec91ac0fa66831f106f93717f667ff7987a3205b4525bac4c b2e6349c8dc589aca389718c974da8658c90ece162f2400dd9643d14460a 76d192439d857a148452a657ddb1a351c2e8aa6aad66562e92a00bb4f9ac 33f75ec7c9c2bf7e78981f5edcf4e554fed6fbccbaab0bf3f193bfe7f399 175de7d089dace9bbba346ac6874a62dfc44b8cdf5815780667d191f728d 4a5f784d4c6476bcd8b071e7bc34d03b5c4e14c696c7951e61bab98714e1 68c757462d5d23ea6f98efbd5249b6de8ae08c8d830c37fc6b62fb09d46a 212cf5e0003837e7265c339c4ed8ca3d7acb1a45490a01f18beac675866f 1cb092108e0213f9c96452372e2cd2c0b99156a60faade70560ff85dbfc1 44c49a4e1748ac9b5d45b44eaac5256990b4a750c722af53d42eec29a951 0068b38257bef5169bd8bce964398c1ceed67c713fe8039b158c3daab6ae 5cb96a37c5eee49ef143296bc186402b113ba0dd6dd9f1a65ee801bf4f3f 421927a78cc3330e175d2cf41e754bc64f3f70591b8e91fb1f8b66f01a14 3f79be6d3321b7071886593756ec0074afa2519c7b4d21b612383ad66e7b 5c8a88d1b02c5692fa6dc5dbba857a9a241b7361852d2f7f7bcc22f37850 470d067ca1dc87474c49a82b6fec899b68cd53b0ad59bfc850ea4980eda9 3dfffd9ea88f2af116127fa8f69eb96e33a3b495f2099fa89b147f9ad0e5 a70f974f72702470d0fae4f01aa0bc323bb53cc22cb6eaa269763bd38236 b3047d390d80cf9dcb6219f9e0aa5b945fd3adc0c170fbe6f96d5d5073bd ca99df59003818e2fd36269ff9620c8421791e80c418e15078fb1edbf217 29c71dc38ce2251fbe1716ba76af152399b9084bbc0cb1e5de6969127581 327a64f376d26b5a76dc20fc02a5f9ed69349c89a96ea20f6831c07344cf db6fdf7776cf4aef4e6014728cbe5076720284fbc8a156dbf48ca2635dd7 2bf98f685c566d93e74df9db488ca4723859077be551d4b8ebbee54f9a07 588eab77ee0fa740cd4c0ea0b61d7acd5c65addab2e9422817352932cd04 ce7fed47a69383e3a9f0f7fb84eab4bb801657cc4f92ccf9caa28c178a43 81f1414bd15858aea80bda59addf43703627c9da452d4d16f2217f6c82f8 7d0f7618a8451552354ff193ca9a37f18d46ded93e0bc25aab2ba1bf2769 15e9c42708c16b26ba2f95beb502fe7f93670ca4749b7c1878cff0347ba4 273054c8ed07f22f7d7e5bf9eb15f59303b655cf86a300d1a0bd4c005d98 9cb7325bd6096078a77aceaf70601b213cb5a18984d81f290b84750550e8 b57ef94a26184313ae18795c504f00fc1915a4afd6d823e4f112a8a769f0 00723687c70d0c5c364a02d53b89b5d0620181199b57923d77c16fc3ad61 3560da3067b66f321699df2c8e086cea9eb83cec4c3e722a1b5dd010675a 578aed570373488b6cde7d5643e65d260355041d2884b39d01404fdb0587 c3ff1a6c1128cf999f6ad354f96eae346da9edb87453d9e3f9fe50dff36e 4711d6452fe30e4e962c59070c9e3484bf71d7e310f42477120f84276812 f2b79d5e51fc93b46b3310a08ac62321f1af67ef3376f8d589940842c999 8e4c82b914521775e19a0299fe77e833e2b7c043735b8283b30af854f3ae 074f100da420a1baf1ef27402a2fa15bf64f4c24ed6f3a3ac53bf981fe86 8a01f9e47d9f7d55504888953f426e132d3b0ccd45312a8075f4a87d1faa f7715b93bf4308f13240545384e36d7021f3766d781d6f2aa99b5278c501 82bfe71bedeab899e1b24c1027c039e34ffc7cf38ae710216a97db0efc0e ed8b9d4956b77fa3e2a89f6a941e5c55400058b7df344b592b5bb5bd53fd a7b23967d4d2758d028d630d421bbb4f62311ac9d6da27c3a26781fa6713 47d909acf6a8ac753823ba0d39707b5fdd4dde5d9a422523360a4629b16c d34598dca1c5740bd5ec0ec0c08f8a3942c6cc05afd4790edcf446c6fb8a 8cd8dbda74bba63ed5c05940925bc2c2a3dc60d69b425a7032da75ce2c64 684c8875f735dc9f870f7b66e97898dfc92e9da1351d7e83664f355df1a1 c8d0bf8a0d3d2bb6fbc0e1b92cbebe1188911532b5f43ac8263ebc0daafb 90f0a7dec71e56c30d39db59455f5cb05872a69d9c24d7fc9cf39b4f7e16 640292341979f90cbd031388acf1401dff3e9d5e82b85df6cb144daedb74 e4e63fe9db2f4cdf1606f72fdf75baf573acb07afebc8c57a84892e6fb17 480ef3bd9ecf8a2e37bdc3f890fd82fcd2ddbf8c113ae96f401359c759aa f3924cde306e21e308f0f8ab00c0c7e5e44d2f6b8aaf0cde5191934c523c a62fe1a8167590a51235f4951543e90f7b446f3c4250ec878f18bd6d587f feabd47b7ddb38d4cf2d941ed9f83cb160c170298ee79892bde6277ac54a b5abca9a73cd6e4a5d27cfa5d2fad7f576fc1e35b4b2235a967116e7bb1e ab83ff4360b16735f98bb0d428a0e74316a8d20becd077dba1b0777530ed 2a2e9064e6406b64f2357e80d6e77fdfbe65617737699ded3d61a553665a 8f77575fcc287a544936631e8998357260d7fd1c38766f807ee5c849f8bf b906fb7913bfd85447714a3f84dddec1339a8c2e60a7310736fb069c26a9 28a80fcbed0f3a8444579dba7241b2001f29613abf9c449e1cd8d3d0ca13 75f519a14c94ce528013612bf7ee1cf312ef9f3e8fc8cdbbfd0cf0478bab 42ada6106b21fe169b1630414872b0087c4388063ab44c8ff34ba28b3830 eb353de78e7be0fa83e337bf8ecb990a9aa2169f03689da70768211fd0c5 19b20a97e20ba3252c4745d969a4944cfb9e06fca9ff087de3e816172d07 a5fe47eb29549ce2eb3b8586626ab23e40e2b927295fd864bcd6ca6d85d3 650eec1691caf0adc317b5d54f87a46db4ce9fb8adcfd1b4152240f72eb2 2f3e2e7b16ff53bb4c76e0c67320e832dc92943bac94b54e90073968e8fe f6f6ba6788d22bda92919bec73f1baa3cddfff84124324cc491aa9095170 220025d878b3bc74d8c241438b54b7293a6dd8eaa31b73e0001a834576d8 8b934d2297c9dfba71dac303534a67805fdcbc865e726a67f13603f0e930 44d3290a495c48609a8519b1d96bca0d008000c7561f00e7374de13baa1f e003258970aecc15c924118171a7e00cf0d46b4de8422c148278b68619e9 8260c68edef39f7fb5c51e33302200ab6e65a139c62bb3710b43c26416e1 67f7ef0d2e0edcd7402a18d352605285cbbee8014be13565bdd69145a79a b9eb10f420e3e4a8e70082f0c066fce6e02eddeb4510c9b7cb2029948c8a 050a689a2b587858b3b621caef2b5011619fa2fcd999a9f86307043a2c6b 7d22923d6d01051b2801f836fde27355bece3832e52067a5dc18ad158831 0e516254f8a817ef266f1d4bcefa3e848fc1c6db712df67c8efd079ccdf4 28ff62d0f91db691e050ba041a64e25c5c33d400b16ebb913655a828708c dd2e1213debd54ebaeebe36ae933ef45c75c1e0fd8272fb5a8d4beccd91c 98cb58053b009cc64c17c2d9fb5cf68735c3875f5441957edca57a9c59e1 b9f2afd650cd07454146077d43a8a345f82200752784903891204f4ebe91 e91386919d581aaf00eca89e3371ea978233500a70062bfdd3b7d2ddfb60 5d22715ce71189a238396dcd5bd25d51283d153d7b6c1bdf603d2e5b066a 196253f4048076b692ecefac65e1c317fb20223ac98a664d4adedf7b741d 3dbb402589dd62fa983c9a597d22ff72f5daa3ef3249540131fa597acb98 687376eb0013b4e91519b2d8d5af4510f0662744ecb6ccbd9ce368f39d22 fa3675f1386f3fa08c77882851f6a275509530474081f0d307753fc5081e deeed93886609614131eea9a4ba885e23b6c0ca023f5b12a760a6ba3e777 c83649d7ee96e2ea69973d4a0c6515a2df244dd56a201533505deed16496 504804b51d87c6154dc54d14eaddbe8d98c4957dfa2eea9b7ee86f83ec53 9f9082b325fb5f3078650a0389ae548efef5db8790e9c5bf89a9b088bd9e c3b6a4e6be2b26ce7af2f826545e6f17e64f1728d02fc8243e5319660ec0 66319191d8b1180dccc5e7ded5c934c95bbd1f14cd9c19607eed3ebad97e eab52e35293a15fc36aa2595e818473ac05d6c44a35cb27ca310765030ed e3a840e9a254550de82b7c7af5e2b9fc4644afa24a920699bb18107ffc4c 65be025597a2fa794a9ad423e43c64b2d324be422ca9eee6f75128a3143b 9f5370752090d17189b0cb829cf1ed90645b36e8a0d677de4e63bfa4f03f aab193e6389379de9e828dd64e4ae2c688737937ba2ea292797dca83db8f 0fb702cea5c02f9a11c48cd34c29dda7d584f12c8fc0ebe364e797b7a7c0 29ac58a476cd4747207013d658f00614aabe69bd04f114506f83433e023f 27d6cc6d74787f6793754d0d45301b85527b59341e60b41d4d069d703420 0e3a16e390db8fba36276fcc5a538cb459cee0732ec7a48adb4b52ed414a d408348f7029257ff9e09d6926ac96f8aae103b90b7990dea8e620009a38 ec556f82b4f648728f5fbbb453338af70881ede83d295c561be9f31c3320 7d952a379b660fe360c01410bce15bd96026cecffea6d70da2a47059951d 254aa5cbfe8b740f41c25fca4c7f7158fa2814897ca4165f9400e203fe30 b1d9ef4efe318f9a36414828b47d84a350782d362d6e64acee8a86233eb2 499d32fb05970b22248add0d80ab7d9790f1212cb091d6cec537b9154f28 cc066697486451ec0628de63a340b7112df5b733f7b4c3e622061f941245 5ff2b5d022984d4bef64592c3ce219be4f68591901595241a1ab819d3870 2edc70060856e1417aa0713579a430aaa67cb3032c225def7ce88c65c5cc 702afbb6ba8186024cd1af6c63473f70ca439dbb35e33ea56cc955cfdeb7 de72b67dc3391f547a33b51a5c8a2d305b4746cd8c38086e7f1824348f05 780fda2a41bb2e4ab5876f541f5d0e9dac2b41c254216c277e8e54b1174b dadd720426009b027249877344ad4413fd979de98c19476708ea3e608ffb 875f85eda0dc6a05357a67b98fd6fd551add7122d2f8510c462503729984 f006f1789f9ece253c6118b694a0b3e4b89e694675535bb6dfe03aab5bdb 7eeb5dfc43881ef383d4ef3dde6bb9847944ec4197a3367cf3cb19d59812 d9a6aaeccf5754d8c3fccd644595ef3eda89b54c5aa3989dd479636a9539 3a21e66278e26a6eaae9a4d613f009d482f51e0260ee193934cf74c41613 47b1350e0710a814afde11e62a9d8e6729db334dd736c46e24f3d710ce18 9e645b993e3d7ffd45e588f7f0cea78d46460b3d1402553215851a52d37b ed7c1ca6d2fb5774faa37a448b524b661155df6cc6258b9ba49a49334b37 5b1cfb942952c5f2d2b705320749c43069222a54bd2d0f553348396c1560 d77f171fcf58a7bccc7d660ca43a12dfd7cf5aaeff1ef07390bdbd206129 9781b3868aaaa27fb7cbeeadf14ec1ebbe49153b2c709819ec8140f58894 8be66e3c90d8f370df6e1860c7c9c0eeb495bec6d92015a9cbd624c24c84 c52b85cec952e96d2fe34b362a4003a302d0ce1ec32711854d1e757a25d4 505993f073628ff1c53d2ce0c0f028eed0a0bd2a00c6aaaaa29fa969d82e c32a03bc6818617024dce944b9aad598310d3274db994dbce091d98afc89 774ab0ed6ea507a05688f3771dd74ef40a2e663c37979bb0bac5778e5d85 5d6d1886b52275052894c367f0692d9560450c1fdb28071ec66b15b5c6a9 fe66fa665fb22e747d6bf10515eed20c172c3690be3ed9fe0e7917a89187 b1ca5d64384c2f529685f98c389a3ce1d4515d160d742dcbdded3c23926a 73976b3086d596d3d5e60d7f407c489cec721f273f6291256b650c7e2235 761943436d3b6db6ed212e2b1495e50387517a7616f800ff660346cb12f4 bad44751f34d43ebed1ab3928cc9ecdc4ca7dcc11605478bd483f5a5a1e5 90b4494658db59ae79405374e0cd5f117d56ec601a6b5bc866bdeae17b24 69b975bb2593001001af240c27ba4bfc7ac689aa38f2519b485884d67c7e 8c5973f869ab7d1c382db906b0c1850845ded794bf61f5e5f173ab281cc3 d8a8e589c4a40d75cba429d1899cd711148041d1bbd2fca478977269bc7c a8dfbcf39a8fb7275213f7a9a3cebc0fcccddf28f0f93c5e21ddbcf7e784 103b748de28761d90ecfd92c1417e776e22268d7f0cda424a2cc4abcd44c 0678f5e4fcc27ededc3f248b3657729ba477004cf945a97984944f6f5379 19f4d93591d6da09647c7b52c205a0a26bcbfe5834afe981bfdeb8135d99 6715e2433aa9783168b5e790dc82ab212dff87c956555025c5d1360302e9 980c27c4b2232d1076abc9bf47c166fb2700ed6bb2fc8beb8d8ff9901c14 9a2220416e65229d1963a79251072017c47c5aea56141d2958cf417893aa 05c1ed703adb827017591d2c9ea72c6383d0ee817c029386c2ca52ba7f32 8b12cdc83df1db154a97c0cc927fa4aff47f68284b14ddc958b403f60e62 21bc2c305e4948e7624c38ca6f7aa4f1552f3753c71b4ee2065171f74fc8 f0d000dd3a1819ade6beae0f414085f46330bf99d7076525c3036915049b 421ff0c44ad10722f314d4facb10fa4d0c663a1064916d4ca7ef689820b7 7fca04888e6298c10e317a0916587cb9bfb06fe3e48b59109acc87cfba49 d52e524126675e3405662e4658cfe82232e542dac2013f5e1f036d7c03c1 16672fc0a38021045dc09c95c9529c4571a40b80cac49f090991f26cf98a db421776185f45cc3a61cab6772242cb0fde44402f22503a80c87708c50e ff8b523251609c4b08143924373658d2e47310b4f3ee4595e2501ce6b824 f8c700ce6150fca2c82324ed34d1c22b249b022629167664e753f0c6df33 be44a0607bcb1fddb59f9e236b9c5324aa1759da5c4ffa3a086f44d38988 cdd34f9006fe7e7bd45f959b8ac40781e7dd841c563961ce1707470e0f5d fc1f96c6abed26c69f1bf9c17fb8cc4e6d69f077a343125f592db20093b6 f639e89676e45ad6c7c5e54d583c310cb92b3add04f0b080ba3d0b434b5c 3c522fb3919aaa853e30fcec68e327d44335b96eebb24158ec84f901f934 4877e40f8310dc4f0edc8501e018bb1b8d58f1e3831ff249c0c50d653d86 f5fac3f7d08cd4a561d5783be3f242d6daa21e73d5e1fad592bbbdb4a000 01b6a8b9591b661400e46112aa6c79984bc1f4585930abb1add2980f2dcf 98f1ba195fe1707287cb85d686ea6cd5792932845a24dbe456f46405c5b9 308c45ac5ec3b1c030d2d9539f6d5ef823068c756845bc5c19e2046f5c85 6e5d4069d80e4780fc8a3aab82e745d19b9644543a823c03d5b45978f342 55cd5b5e187c0dd620c5523f566f8854c79cc05655eec2b154d81057dbd0 b1a01c9d578535801a9c49ac28ae31141db80a0c561a04eef820bfbf82d7 d15382453d9f680db124308af3587a12282b1705031f0260b12be585f566 4c1c955bb2e7748d69704c820866f77b1b8ae66ac803da0ad8330193b13f ad48c17a6a0a780e6bbc70d4868e94f8a9812797ea9805751686 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Monospace-BoldOblique.afm0100664000212600000240000010222110330505373017660 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:21 2005 FontName Monospace-BoldOblique FullName Monospace Bold Oblique FamilyName Monospace Weight Bold Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle -11 IsFixedPitch true UnderlinePosition -221 UnderlineThickness 246 Version 1.15 EncodingScheme ISO10646-1 FontBBox -85 -505 808 1054 CapHeight 729 XHeight 546 Ascender 759 Descender -208 StartCharMetrics 708 C 0 ; WX 602 ; N .notdef ; B 50 -177 551 706 ; C 32 ; WX 602 ; N space ; B 0 0 0 0 ; C 33 ; WX 602 ; N exclam ; B 165 0 438 730 ; C 34 ; WX 602 ; N quotedbl ; B 112 458 488 730 ; C 35 ; WX 602 ; N numbersign ; B -21 0 620 718 ; C 36 ; WX 602 ; N dollar ; B 19 -147 534 760 ; C 37 ; WX 602 ; N percent ; B 16 0 596 700 ; C 38 ; WX 602 ; N ampersand ; B -17 -15 593 743 ; C 39 ; WX 602 ; N quotesingle ; B 237 458 363 730 ; C 40 ; WX 602 ; N parenleft ; B 165 -132 527 759 ; C 41 ; WX 602 ; N parenright ; B 55 -132 417 759 ; C 42 ; WX 602 ; N asterisk ; B 59 277 542 743 ; C 43 ; WX 602 ; N plus ; B 32 44 569 583 ; C 44 ; WX 602 ; N comma ; B 102 -141 366 180 ; C 45 ; WX 602 ; N hyphen ; B 119 216 454 359 ; C 46 ; WX 602 ; N period ; B 169 0 368 180 ; C 47 ; WX 602 ; N slash ; B 0 -93 525 730 ; C 48 ; WX 602 ; N zero ; B 43 -15 559 743 ; C 49 ; WX 602 ; N one ; B 20 0 499 730 ; C 50 ; WX 602 ; N two ; B -15 0 555 743 ; C 51 ; WX 602 ; N three ; B -16 -15 547 743 ; C 52 ; WX 602 ; N four ; B 8 0 547 730 ; C 53 ; WX 602 ; N five ; B 2 -15 563 730 ; C 54 ; WX 602 ; N six ; B 46 -17 571 742 ; C 55 ; WX 602 ; N seven ; B 53 0 599 730 ; C 56 ; WX 602 ; N eight ; B 30 -15 556 743 ; C 57 ; WX 602 ; N nine ; B 26 -16 551 743 ; C 58 ; WX 602 ; N colon ; B 148 0 413 520 ; C 59 ; WX 602 ; N semicolon ; B 83 -141 413 520 ; C 60 ; WX 602 ; N less ; B 42 53 560 575 ; C 61 ; WX 602 ; N equal ; B 42 144 560 482 ; C 62 ; WX 602 ; N greater ; B 42 53 560 575 ; C 63 ; WX 602 ; N question ; B 142 0 558 743 ; C 64 ; WX 602 ; N at ; B -7 -156 601 682 ; C 65 ; WX 602 ; N A ; B -56 0 516 730 ; C 66 ; WX 602 ; N B ; B -10 0 576 730 ; C 67 ; WX 602 ; N C ; B 63 -15 596 743 ; C 68 ; WX 602 ; N D ; B -4 0 569 730 ; C 69 ; WX 602 ; N E ; B 14 0 610 730 ; C 70 ; WX 602 ; N F ; B 22 0 620 730 ; C 71 ; WX 602 ; N G ; B 49 -15 583 743 ; C 72 ; WX 602 ; N H ; B -4 0 606 730 ; C 73 ; WX 602 ; N I ; B 13 0 589 730 ; C 74 ; WX 602 ; N J ; B -10 -15 563 730 ; C 75 ; WX 602 ; N K ; B -9 0 668 730 ; C 76 ; WX 602 ; N L ; B 39 0 517 730 ; C 77 ; WX 602 ; N M ; B -28 0 630 730 ; C 78 ; WX 602 ; N N ; B -13 0 613 730 ; C 79 ; WX 602 ; N O ; B 29 -15 572 743 ; C 80 ; WX 602 ; N P ; B 7 0 591 730 ; C 81 ; WX 602 ; N Q ; B 29 -138 572 743 ; C 82 ; WX 602 ; N R ; B 3 0 569 730 ; C 83 ; WX 602 ; N S ; B 1 -15 566 743 ; C 84 ; WX 602 ; N T ; B 87 0 629 730 ; C 85 ; WX 602 ; N U ; B 21 -15 622 730 ; C 86 ; WX 602 ; N V ; B 99 0 647 730 ; C 87 ; WX 602 ; N W ; B 20 0 669 730 ; C 88 ; WX 602 ; N X ; B -70 0 656 730 ; C 89 ; WX 602 ; N Y ; B 70 0 664 730 ; C 90 ; WX 602 ; N Z ; B -17 0 630 730 ; C 91 ; WX 602 ; N bracketleft ; B 108 -132 531 760 ; C 92 ; WX 602 ; N backslash ; B 166 -93 362 730 ; C 93 ; WX 602 ; N bracketright ; B 51 -132 474 760 ; C 94 ; WX 602 ; N asciicircum ; B 27 457 575 730 ; C 95 ; WX 602 ; N underscore ; B 0 -236 603 -143 ; C 96 ; WX 602 ; N grave ; B 181 616 422 800 ; C 97 ; WX 602 ; N a ; B 22 -15 558 561 ; C 98 ; WX 602 ; N b ; B 22 -15 569 760 ; C 99 ; WX 602 ; N c ; B 73 -15 565 561 ; C 100 ; WX 602 ; N d ; B 32 -15 622 760 ; C 101 ; WX 602 ; N e ; B 37 -15 564 562 ; C 102 ; WX 602 ; N f ; B 112 0 620 760 ; C 103 ; WX 602 ; N g ; B 8 -208 582 563 ; C 104 ; WX 602 ; N h ; B 28 0 547 760 ; C 105 ; WX 602 ; N i ; B 6 0 527 813 ; C 106 ; WX 602 ; N j ; B -31 -208 513 813 ; C 107 ; WX 602 ; N k ; B 40 0 634 760 ; C 108 ; WX 602 ; N l ; B 113 0 505 760 ; C 109 ; WX 602 ; N m ; B -17 0 589 561 ; C 110 ; WX 602 ; N n ; B 28 0 547 561 ; C 111 ; WX 602 ; N o ; B 42 -15 560 562 ; C 112 ; WX 602 ; N p ; B -19 -209 571 561 ; C 113 ; WX 602 ; N q ; B 33 -209 580 562 ; C 114 ; WX 602 ; N r ; B 75 0 600 561 ; C 115 ; WX 602 ; N s ; B 43 -15 535 561 ; C 116 ; WX 602 ; N t ; B 80 0 571 703 ; C 117 ; WX 602 ; N u ; B 51 -15 569 547 ; C 118 ; WX 602 ; N v ; B 83 0 602 547 ; C 119 ; WX 602 ; N w ; B 43 0 647 547 ; C 120 ; WX 602 ; N x ; B -38 0 600 547 ; C 121 ; WX 602 ; N y ; B -44 -208 614 547 ; C 122 ; WX 602 ; N z ; B 23 0 581 547 ; C 123 ; WX 602 ; N braceleft ; B 63 -164 591 760 ; C 124 ; WX 602 ; N bar ; B 245 -236 356 765 ; C 125 ; WX 602 ; N braceright ; B -16 -164 513 760 ; C 126 ; WX 602 ; N asciitilde ; B 42 226 560 396 ; C 160 ; WX 602 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 602 ; N exclamdown ; B 165 0 438 730 ; C 162 ; WX 602 ; N cent ; B 50 -153 539 700 ; C 163 ; WX 602 ; N sterling ; B -12 0 608 743 ; C 164 ; WX 602 ; N currency ; B 90 85 546 542 ; C 165 ; WX 602 ; N yen ; B -15 0 656 730 ; C 166 ; WX 602 ; N brokenbar ; B 245 -171 356 700 ; C 167 ; WX 602 ; N section ; B 50 -96 518 743 ; C 168 ; WX 602 ; N dieresis ; B 203 653 536 774 ; C 169 ; WX 602 ; N copyright ; B 0 61 603 664 ; C 170 ; WX 602 ; N ordfeminine ; B 103 208 514 743 ; C 171 ; WX 602 ; N guillemotleft ; B 38 68 539 518 ; C 172 ; WX 602 ; N logicalnot ; B 42 176 560 439 ; C 173 ; WX 602 ; N sfthyphen ; B 119 216 454 359 ; C 174 ; WX 602 ; N registered ; B 0 61 603 664 ; C 175 ; WX 602 ; N macron ; B 206 667 533 760 ; C 176 ; WX 602 ; N degree ; B 138 416 463 743 ; C 177 ; WX 602 ; N plusminus ; B 42 0 560 627 ; C 178 ; WX 602 ; N twosuperior ; B 126 326 502 743 ; C 179 ; WX 602 ; N threesuperior ; B 134 318 508 743 ; C 180 ; WX 602 ; N acute ; B 277 616 590 800 ; C 181 ; WX 602 ; N mu ; B -27 -209 561 547 ; C 182 ; WX 602 ; N paragraph ; B 49 -97 582 730 ; C 183 ; WX 602 ; N periodcentered ; B 199 258 397 438 ; C 184 ; WX 602 ; N cedilla ; B 73 -196 311 0 ; C 185 ; WX 602 ; N onesuperior ; B 141 326 477 734 ; C 186 ; WX 602 ; N ordmasculine ; B 107 208 521 743 ; C 187 ; WX 602 ; N guillemotright ; B 40 68 542 518 ; C 188 ; WX 602 ; N onequarter ; B 15 -132 559 811 ; C 189 ; WX 602 ; N onehalf ; B 15 -132 578 811 ; C 190 ; WX 602 ; N threequarters ; B 22 -132 559 819 ; C 191 ; WX 602 ; N questiondown ; B 43 -14 459 730 ; C 192 ; WX 602 ; N Agrave ; B -56 0 516 928 ; C 193 ; WX 602 ; N Aacute ; B -56 0 559 928 ; C 194 ; WX 602 ; N Acircumflex ; B -56 0 556 928 ; C 195 ; WX 602 ; N Atilde ; B -56 0 572 929 ; C 196 ; WX 602 ; N Adieresis ; B -56 0 554 928 ; C 197 ; WX 602 ; N Aring ; B -56 0 516 929 ; C 198 ; WX 602 ; N AE ; B -74 0 641 730 ; C 199 ; WX 602 ; N Ccedilla ; B 63 -196 596 743 ; C 200 ; WX 602 ; N Egrave ; B 14 0 610 928 ; C 201 ; WX 602 ; N Eacute ; B 14 0 610 928 ; C 202 ; WX 602 ; N Ecircumflex ; B 14 0 610 928 ; C 203 ; WX 602 ; N Edieresis ; B 14 0 610 928 ; C 204 ; WX 602 ; N Igrave ; B 13 0 589 928 ; C 205 ; WX 602 ; N Iacute ; B 13 0 589 928 ; C 206 ; WX 602 ; N Icircumflex ; B 13 0 589 928 ; C 207 ; WX 602 ; N Idieresis ; B 13 0 589 928 ; C 208 ; WX 602 ; N Eth ; B -8 0 569 730 ; C 209 ; WX 602 ; N Ntilde ; B -13 0 613 929 ; C 210 ; WX 602 ; N Ograve ; B 29 -15 572 928 ; C 211 ; WX 602 ; N Oacute ; B 29 -15 572 928 ; C 212 ; WX 602 ; N Ocircumflex ; B 29 -15 572 928 ; C 213 ; WX 602 ; N Otilde ; B 29 -15 572 929 ; C 214 ; WX 602 ; N Odieresis ; B 29 -15 572 928 ; C 215 ; WX 602 ; N multiply ; B 58 71 543 557 ; C 216 ; WX 602 ; N Oslash ; B -69 -31 663 762 ; C 217 ; WX 602 ; N Ugrave ; B 21 -15 622 928 ; C 218 ; WX 602 ; N Uacute ; B 21 -15 622 928 ; C 219 ; WX 602 ; N Ucircumflex ; B 21 -15 622 928 ; C 220 ; WX 602 ; N Udieresis ; B 21 -15 622 928 ; C 221 ; WX 602 ; N Yacute ; B 70 0 664 928 ; C 222 ; WX 602 ; N Thorn ; B 7 0 569 730 ; C 223 ; WX 602 ; N germandbls ; B 14 -15 565 762 ; C 224 ; WX 602 ; N agrave ; B 22 -15 558 800 ; C 225 ; WX 602 ; N aacute ; B 22 -15 605 800 ; C 226 ; WX 602 ; N acircumflex ; B 22 -15 558 800 ; C 227 ; WX 602 ; N atilde ; B 22 -15 566 778 ; C 228 ; WX 602 ; N adieresis ; B 22 -15 558 774 ; C 229 ; WX 602 ; N aring ; B 22 -15 558 889 ; C 230 ; WX 602 ; N ae ; B -16 -15 602 561 ; C 231 ; WX 602 ; N ccedilla ; B 73 -196 565 561 ; C 232 ; WX 602 ; N egrave ; B 37 -15 564 800 ; C 233 ; WX 602 ; N eacute ; B 37 -15 590 800 ; C 234 ; WX 602 ; N ecircumflex ; B 37 -15 564 800 ; C 235 ; WX 602 ; N edieresis ; B 37 -15 564 774 ; C 236 ; WX 602 ; N igrave ; B 6 0 527 800 ; C 237 ; WX 602 ; N iacute ; B 6 0 568 800 ; C 238 ; WX 602 ; N icircumflex ; B 6 0 527 800 ; C 239 ; WX 602 ; N idieresis ; B 6 0 527 774 ; C 240 ; WX 602 ; N eth ; B 40 -15 589 760 ; C 241 ; WX 602 ; N ntilde ; B 28 0 551 778 ; C 242 ; WX 602 ; N ograve ; B 42 -15 560 800 ; C 243 ; WX 602 ; N oacute ; B 42 -15 590 800 ; C 244 ; WX 602 ; N ocircumflex ; B 42 -15 560 800 ; C 245 ; WX 602 ; N otilde ; B 42 -15 560 778 ; C 246 ; WX 602 ; N odieresis ; B 42 -15 560 774 ; C 247 ; WX 602 ; N divide ; B 32 41 569 585 ; C 248 ; WX 602 ; N oslash ; B -41 -58 641 604 ; C 249 ; WX 602 ; N ugrave ; B 51 -15 569 800 ; C 250 ; WX 602 ; N uacute ; B 51 -15 590 800 ; C 251 ; WX 602 ; N ucircumflex ; B 51 -15 569 800 ; C 252 ; WX 602 ; N udieresis ; B 51 -15 569 774 ; C 253 ; WX 602 ; N yacute ; B -44 -208 614 800 ; C 254 ; WX 602 ; N thorn ; B -19 -209 571 760 ; C 255 ; WX 602 ; N ydieresis ; B -44 -208 614 774 ; C -1 ; WX 602 ; N Amacron ; B -56 0 533 914 ; C -1 ; WX 602 ; N amacron ; B 22 -15 558 763 ; C -1 ; WX 602 ; N Abreve ; B -56 0 563 938 ; C -1 ; WX 602 ; N abreve ; B 22 -15 558 778 ; C -1 ; WX 602 ; N Aogonek ; B -56 -196 516 730 ; C -1 ; WX 602 ; N aogonek ; B 22 -196 558 561 ; C -1 ; WX 602 ; N Cacute ; B 63 -15 628 928 ; C -1 ; WX 602 ; N cacute ; B 73 -15 632 800 ; C -1 ; WX 602 ; N Ccircumflex ; B 63 -15 625 928 ; C -1 ; WX 602 ; N ccircumflex ; B 73 -15 577 800 ; C -1 ; WX 602 ; N Cdotaccent ; B 63 -15 596 928 ; C -1 ; WX 602 ; N cdotaccent ; B 73 -15 565 774 ; C -1 ; WX 602 ; N Ccaron ; B 63 -15 651 928 ; C -1 ; WX 602 ; N ccaron ; B 73 -15 613 800 ; C -1 ; WX 602 ; N Dcaron ; B -4 0 592 928 ; C -1 ; WX 602 ; N dcaron ; B 32 -15 808 760 ; C -1 ; WX 602 ; N Dcroat ; B -8 0 569 730 ; C -1 ; WX 602 ; N dcroat ; B 32 -15 682 760 ; C -1 ; WX 602 ; N Emacron ; B 14 0 610 914 ; C -1 ; WX 602 ; N emacron ; B 37 -15 564 759 ; C -1 ; WX 602 ; N Ebreve ; B 14 0 610 928 ; C -1 ; WX 602 ; N ebreve ; B 37 -15 564 785 ; C -1 ; WX 602 ; N Edotaccent ; B 14 0 610 928 ; C -1 ; WX 602 ; N edotaccent ; B 37 -15 564 774 ; C -1 ; WX 602 ; N Eogonek ; B 14 -196 610 730 ; C -1 ; WX 602 ; N eogonek ; B 37 -196 564 562 ; C -1 ; WX 602 ; N Ecaron ; B 14 0 610 928 ; C -1 ; WX 602 ; N ecaron ; B 37 -15 604 800 ; C -1 ; WX 602 ; N Gcircumflex ; B 49 -15 622 928 ; C -1 ; WX 602 ; N gcircumflex ; B 8 -208 582 800 ; C -1 ; WX 602 ; N Gbreve ; B 49 -15 583 928 ; C -1 ; WX 602 ; N gbreve ; B 8 -208 582 785 ; C -1 ; WX 602 ; N Gdotaccent ; B 49 -15 583 928 ; C -1 ; WX 602 ; N gdotaccent ; B 8 -208 582 774 ; C -1 ; WX 602 ; N Gcommaaccent ; B 49 -224 583 743 ; C -1 ; WX 602 ; N gcommaaccent ; B 8 -208 582 771 ; C -1 ; WX 602 ; N Hcircumflex ; B -4 0 606 928 ; C -1 ; WX 602 ; N hcircumflex ; B 28 0 547 928 ; C -1 ; WX 602 ; N Hbar ; B -4 0 651 730 ; C -1 ; WX 602 ; N hbar ; B 10 0 528 760 ; C -1 ; WX 602 ; N Itilde ; B 13 0 589 929 ; C -1 ; WX 602 ; N itilde ; B 6 0 529 778 ; C -1 ; WX 602 ; N Imacron ; B 13 0 589 914 ; C -1 ; WX 602 ; N imacron ; B 6 0 527 764 ; C -1 ; WX 602 ; N Ibreve ; B 13 0 589 928 ; C -1 ; WX 602 ; N ibreve ; B 6 0 527 785 ; C -1 ; WX 602 ; N Iogonek ; B 32 -196 609 730 ; C -1 ; WX 602 ; N iogonek ; B 9 -196 530 813 ; C -1 ; WX 602 ; N Idotaccent ; B 13 0 589 928 ; C -1 ; WX 602 ; N dotlessi ; B 6 0 527 547 ; C -1 ; WX 602 ; N IJ ; B 8 -17 718 730 ; C -1 ; WX 602 ; N ij ; B 4 -193 711 828 ; C -1 ; WX 602 ; N Jcircumflex ; B -10 -15 599 928 ; C -1 ; WX 602 ; N jcircumflex ; B -31 -208 516 800 ; C -1 ; WX 602 ; N Kcommaaccent ; B -9 -209 668 730 ; C -1 ; WX 602 ; N kcommaaccent ; B 40 -209 634 760 ; C -1 ; WX 602 ; N kgreenlandic ; B 31 0 627 547 ; C -1 ; WX 602 ; N Lacute ; B 39 0 557 928 ; C -1 ; WX 602 ; N lacute ; B 113 0 556 929 ; C -1 ; WX 602 ; N Lcommaaccent ; B 39 -209 517 730 ; C -1 ; WX 602 ; N lcommaaccent ; B 103 -207 505 760 ; C -1 ; WX 602 ; N Lcaron ; B 39 0 601 730 ; C -1 ; WX 602 ; N lcaron ; B 113 0 642 760 ; C -1 ; WX 602 ; N Ldot ; B 39 0 604 730 ; C -1 ; WX 602 ; N ldot ; B 113 0 678 760 ; C -1 ; WX 602 ; N Lslash ; B -35 0 517 730 ; C -1 ; WX 602 ; N lslash ; B 18 0 581 760 ; C -1 ; WX 602 ; N Nacute ; B -13 0 613 928 ; C -1 ; WX 602 ; N nacute ; B 28 0 588 805 ; C -1 ; WX 602 ; N Ncommaaccent ; B -13 -209 613 730 ; C -1 ; WX 602 ; N ncommaaccent ; B 28 -209 547 561 ; C -1 ; WX 602 ; N Ncaron ; B -13 0 619 928 ; C -1 ; WX 602 ; N ncaron ; B 28 0 581 800 ; C -1 ; WX 602 ; N napostrophe ; B -85 0 625 760 ; C -1 ; WX 602 ; N Eng ; B -17 -208 622 730 ; C -1 ; WX 602 ; N eng ; B 49 -208 566 561 ; C -1 ; WX 602 ; N Omacron ; B 29 -15 572 914 ; C -1 ; WX 602 ; N omacron ; B 42 -15 560 763 ; C -1 ; WX 602 ; N Obreve ; B 29 -15 572 928 ; C -1 ; WX 602 ; N obreve ; B 42 -15 560 766 ; C -1 ; WX 602 ; N Ohungarumlaut ; B 29 -15 670 928 ; C -1 ; WX 602 ; N ohungarumlaut ; B 42 -15 651 800 ; C -1 ; WX 602 ; N OE ; B 15 0 661 730 ; C -1 ; WX 602 ; N oe ; B -10 -15 617 561 ; C -1 ; WX 602 ; N Racute ; B 3 0 569 928 ; C -1 ; WX 602 ; N racute ; B 75 0 671 805 ; C -1 ; WX 602 ; N Rcommaaccent ; B 3 -209 569 730 ; C -1 ; WX 602 ; N rcommaaccent ; B 16 -209 600 561 ; C -1 ; WX 602 ; N Rcaron ; B 3 0 584 928 ; C -1 ; WX 602 ; N rcaron ; B 75 0 613 800 ; C -1 ; WX 602 ; N Sacute ; B 1 -15 566 928 ; C -1 ; WX 602 ; N sacute ; B 43 -15 588 805 ; C -1 ; WX 602 ; N Scircumflex ; B 1 -15 569 928 ; C -1 ; WX 602 ; N scircumflex ; B 43 -15 535 800 ; C -1 ; WX 602 ; N Scedilla ; B 1 -196 566 743 ; C -1 ; WX 602 ; N scedilla ; B 43 -196 535 561 ; C -1 ; WX 602 ; N Scaron ; B 1 -15 580 928 ; C -1 ; WX 602 ; N scaron ; B 43 -15 571 800 ; C -1 ; WX 602 ; N Tcommaaccent ; B 68 -196 629 730 ; C -1 ; WX 602 ; N tcommaaccent ; B 80 -196 571 703 ; C -1 ; WX 602 ; N Tcaron ; B 87 0 629 928 ; C -1 ; WX 602 ; N tcaron ; B 80 0 681 814 ; C -1 ; WX 602 ; N Tbar ; B 88 0 629 730 ; C -1 ; WX 602 ; N tbar ; B 70 0 563 703 ; C -1 ; WX 602 ; N Utilde ; B 21 -15 622 929 ; C -1 ; WX 602 ; N utilde ; B 51 -15 569 778 ; C -1 ; WX 602 ; N Umacron ; B 21 -15 622 914 ; C -1 ; WX 602 ; N umacron ; B 51 -15 569 763 ; C -1 ; WX 602 ; N Ubreve ; B 21 -15 622 928 ; C -1 ; WX 602 ; N ubreve ; B 51 -15 569 785 ; C -1 ; WX 602 ; N Uring ; B 21 -15 622 1054 ; C -1 ; WX 602 ; N uring ; B 51 -15 569 891 ; C -1 ; WX 602 ; N Uhungarumlaut ; B 21 -15 673 928 ; C -1 ; WX 602 ; N uhungarumlaut ; B 51 -15 667 800 ; C -1 ; WX 602 ; N Uogonek ; B 21 -204 622 730 ; C -1 ; WX 602 ; N uogonek ; B 51 -196 569 547 ; C -1 ; WX 602 ; N Wcircumflex ; B 20 0 669 931 ; C -1 ; WX 602 ; N wcircumflex ; B 43 0 647 805 ; C -1 ; WX 602 ; N Ycircumflex ; B 70 0 664 931 ; C -1 ; WX 602 ; N ycircumflex ; B -44 -208 614 805 ; C -1 ; WX 602 ; N Ydieresis ; B 70 0 664 928 ; C -1 ; WX 602 ; N Zacute ; B -17 0 630 928 ; C -1 ; WX 602 ; N zacute ; B 23 0 588 805 ; C -1 ; WX 602 ; N Zdotaccent ; B -17 0 630 926 ; C -1 ; WX 602 ; N zdotaccent ; B 23 0 581 774 ; C -1 ; WX 602 ; N Zcaron ; B -17 0 630 928 ; C -1 ; WX 602 ; N zcaron ; B 23 0 581 800 ; C -1 ; WX 602 ; N longs ; B 112 0 620 760 ; C -1 ; WX 602 ; N uni0186 ; B 7 -15 542 743 ; C -1 ; WX 602 ; N uni0190 ; B 24 -15 583 743 ; C -1 ; WX 602 ; N florin ; B 5 -209 563 760 ; C -1 ; WX 602 ; N uni0194 ; B 38 -142 671 730 ; C -1 ; WX 602 ; N uni01CD ; B -56 0 580 928 ; C -1 ; WX 602 ; N uni01CE ; B 22 -15 571 800 ; C -1 ; WX 602 ; N uni01CF ; B 13 0 589 928 ; C -1 ; WX 602 ; N uni01D0 ; B 6 0 571 800 ; C -1 ; WX 602 ; N uni01D1 ; B 29 -15 580 928 ; C -1 ; WX 602 ; N uni01D2 ; B 42 -15 571 800 ; C -1 ; WX 602 ; N uni01D3 ; B 21 -15 622 928 ; C -1 ; WX 602 ; N uni01D4 ; B 51 -15 579 800 ; C -1 ; WX 602 ; N uni01D6 ; B 51 -15 569 914 ; C -1 ; WX 602 ; N uni01DF ; B 22 -15 558 914 ; C -1 ; WX 602 ; N uni01E2 ; B -74 0 641 914 ; C -1 ; WX 602 ; N uni01E3 ; B -16 -15 602 759 ; C -1 ; WX 602 ; N uni01EA ; B 29 -204 572 743 ; C -1 ; WX 602 ; N uni01EB ; B 42 -204 560 562 ; C -1 ; WX 602 ; N uni01EC ; B 29 -204 572 914 ; C -1 ; WX 602 ; N uni01ED ; B 42 -204 560 763 ; C -1 ; WX 602 ; N Scommaaccent ; B 1 -229 566 743 ; C -1 ; WX 602 ; N scommaaccent ; B 43 -229 535 561 ; C -1 ; WX 602 ; N uni021A ; B 66 -229 629 730 ; C -1 ; WX 602 ; N uni021B ; B 80 -229 571 703 ; C -1 ; WX 602 ; N uni022B ; B 42 -15 560 914 ; C -1 ; WX 602 ; N uni022D ; B 42 -15 560 914 ; C -1 ; WX 602 ; N uni022E ; B 29 -15 572 928 ; C -1 ; WX 602 ; N uni022F ; B 42 -15 560 774 ; C -1 ; WX 602 ; N uni0231 ; B 42 -15 560 914 ; C -1 ; WX 602 ; N uni0232 ; B 70 0 664 914 ; C -1 ; WX 602 ; N uni0233 ; B -44 -208 614 763 ; C -1 ; WX 602 ; N dotlessj ; B -31 -208 460 547 ; C -1 ; WX 602 ; N uni0250 ; B 35 -15 574 561 ; C -1 ; WX 602 ; N uni0251 ; B 47 -15 597 561 ; C -1 ; WX 602 ; N uni0252 ; B 5 -15 555 561 ; C -1 ; WX 602 ; N uni0253 ; B -14 -15 536 760 ; C -1 ; WX 602 ; N uni0254 ; B 35 -15 528 562 ; C -1 ; WX 602 ; N uni0255 ; B 76 -69 569 562 ; C -1 ; WX 602 ; N uni0256 ; B 46 -162 541 760 ; C -1 ; WX 602 ; N uni0257 ; B 30 -15 614 760 ; C -1 ; WX 602 ; N uni0258 ; B 18 -15 568 561 ; C -1 ; WX 602 ; N uni0259 ; B 32 -15 568 561 ; C -1 ; WX 602 ; N uni025A ; B -18 -15 605 561 ; C -1 ; WX 602 ; N uni025B ; B 20 -11 581 561 ; C -1 ; WX 602 ; N uni025C ; B -1 -11 562 561 ; C -1 ; WX 602 ; N uni025D ; B -27 -11 584 561 ; C -1 ; WX 602 ; N uni025E ; B 46 -21 579 560 ; C -1 ; WX 602 ; N uni025F ; B 37 -216 483 547 ; C -1 ; WX 602 ; N uni0260 ; B -26 -209 688 760 ; C -1 ; WX 602 ; N uni0261 ; B 48 -209 615 547 ; C -1 ; WX 602 ; N uni0262 ; B 67 0 556 547 ; C -1 ; WX 602 ; N uni0263 ; B 33 -203 628 555 ; C -1 ; WX 602 ; N uni0264 ; B 98 -59 614 547 ; C -1 ; WX 602 ; N uni0265 ; B 78 -214 595 546 ; C -1 ; WX 602 ; N uni0266 ; B 7 0 524 760 ; C -1 ; WX 602 ; N uni0267 ; B 27 -209 544 760 ; C -1 ; WX 602 ; N uni0268 ; B -23 0 499 760 ; C -1 ; WX 602 ; N uni0269 ; B 102 -2 500 547 ; C -1 ; WX 602 ; N uni026A ; B -2 0 604 547 ; C -1 ; WX 602 ; N uni026B ; B 13 -1 562 759 ; C -1 ; WX 602 ; N uni026C ; B 50 0 497 760 ; C -1 ; WX 602 ; N uni026D ; B 129 -217 473 760 ; C -1 ; WX 602 ; N uni026E ; B 86 -215 609 760 ; C -1 ; WX 602 ; N uni026F ; B 14 -14 618 547 ; C -1 ; WX 602 ; N uni0270 ; B 33 -209 637 547 ; C -1 ; WX 602 ; N uni0271 ; B 4 -209 608 561 ; C -1 ; WX 602 ; N uni0272 ; B -45 -216 612 561 ; C -1 ; WX 602 ; N uni0273 ; B -1 -216 528 561 ; C -1 ; WX 602 ; N uni0274 ; B 5 0 597 547 ; C -1 ; WX 602 ; N uni0275 ; B 39 -15 563 561 ; C -1 ; WX 602 ; N uni0276 ; B 27 -1 613 548 ; C -1 ; WX 602 ; N uni0277 ; B 20 0 568 575 ; C -1 ; WX 602 ; N uni0278 ; B -10 -209 612 762 ; C -1 ; WX 602 ; N uni0279 ; B 41 -14 566 547 ; C -1 ; WX 602 ; N uni027A ; B 21 -14 586 759 ; C -1 ; WX 602 ; N uni027B ; B 7 -209 531 547 ; C -1 ; WX 602 ; N uni027C ; B 16 -209 580 561 ; C -1 ; WX 602 ; N uni027D ; B 51 -209 580 561 ; C -1 ; WX 602 ; N uni027E ; B 13 0 590 547 ; C -1 ; WX 602 ; N uni027F ; B 13 0 505 547 ; C -1 ; WX 602 ; N uni0280 ; B -3 0 505 547 ; C -1 ; WX 602 ; N uni0281 ; B -22 0 624 547 ; C -1 ; WX 602 ; N uni0282 ; B 51 -209 552 561 ; C -1 ; WX 602 ; N uni0283 ; B -50 -208 652 760 ; C -1 ; WX 602 ; N uni0284 ; B -50 -208 652 760 ; C -1 ; WX 602 ; N uni0285 ; B 117 -208 486 760 ; C -1 ; WX 602 ; N uni0286 ; B -42 -208 652 760 ; C -1 ; WX 602 ; N uni0287 ; B 28 -156 520 547 ; C -1 ; WX 602 ; N uni0288 ; B 103 -209 595 703 ; C -1 ; WX 602 ; N uni0289 ; B 32 -15 578 547 ; C -1 ; WX 602 ; N uni028A ; B 35 -51 619 547 ; C -1 ; WX 602 ; N uni028B ; B 72 -2 570 547 ; C -1 ; WX 602 ; N uni028C ; B -15 0 510 547 ; C -1 ; WX 602 ; N uni028D ; B -54 0 554 547 ; C -1 ; WX 602 ; N uni028E ; B -45 0 614 754 ; C -1 ; WX 602 ; N uni028F ; B 86 0 622 547 ; C -1 ; WX 602 ; N uni0290 ; B -11 -209 546 547 ; C -1 ; WX 602 ; N uni0291 ; B 9 -55 565 547 ; C -1 ; WX 602 ; N uni0292 ; B -14 -215 577 547 ; C -1 ; WX 602 ; N uni0293 ; B 2 -215 582 547 ; C -1 ; WX 602 ; N uni0294 ; B 94 0 549 760 ; C -1 ; WX 602 ; N uni0295 ; B 95 0 589 760 ; C -1 ; WX 602 ; N uni0296 ; B 13 -1 507 760 ; C -1 ; WX 602 ; N uni0297 ; B 33 -209 609 760 ; C -1 ; WX 602 ; N uni0298 ; B 19 -28 582 583 ; C -1 ; WX 602 ; N uni0299 ; B 4 0 549 547 ; C -1 ; WX 602 ; N uni029A ; B 23 -21 556 560 ; C -1 ; WX 602 ; N uni029B ; B 1 0 647 760 ; C -1 ; WX 602 ; N uni029C ; B 5 0 597 547 ; C -1 ; WX 602 ; N uni029D ; B -31 -208 574 813 ; C -1 ; WX 602 ; N uni029E ; B 29 -209 625 547 ; C -1 ; WX 602 ; N uni029F ; B 61 0 462 547 ; C -1 ; WX 602 ; N uni02A0 ; B 50 -209 632 760 ; C -1 ; WX 602 ; N uni02A1 ; B 15 0 558 760 ; C -1 ; WX 602 ; N uni02A2 ; B 85 0 579 760 ; C -1 ; WX 602 ; N uni02A3 ; B -11 -15 611 760 ; C -1 ; WX 602 ; N uni02A4 ; B -6 -219 617 756 ; C -1 ; WX 602 ; N uni02A5 ; B -19 -55 604 760 ; C -1 ; WX 602 ; N uni02A6 ; B 50 -15 584 703 ; C -1 ; WX 602 ; N uni02A7 ; B 98 -208 630 760 ; C -1 ; WX 602 ; N uni02A8 ; B 62 -69 597 703 ; C -1 ; WX 602 ; N uni02A9 ; B 62 -208 593 760 ; C -1 ; WX 602 ; N uni02AA ; B 70 -15 585 760 ; C -1 ; WX 602 ; N uni02AB ; B 66 -3 612 760 ; C -1 ; WX 602 ; N uni02AC ; B 25 0 637 641 ; C -1 ; WX 602 ; N uni02AD ; B 85 86 517 641 ; C -1 ; WX 602 ; N uni02AE ; B 100 -214 629 760 ; C -1 ; WX 602 ; N uni02AF ; B 100 -209 529 760 ; C -1 ; WX 602 ; N uni02B0 ; B 119 462 443 889 ; C -1 ; WX 602 ; N uni02B1 ; B 119 462 443 889 ; C -1 ; WX 602 ; N uni02B2 ; B 135 313 468 885 ; C -1 ; WX 602 ; N uni02B3 ; B 135 462 464 777 ; C -1 ; WX 602 ; N uni02B4 ; B 139 455 467 770 ; C -1 ; WX 602 ; N uni02B5 ; B 115 346 443 770 ; C -1 ; WX 602 ; N uni02B6 ; B 99 462 503 770 ; C -1 ; WX 602 ; N uni02B7 ; B 138 462 524 770 ; C -1 ; WX 602 ; N uni02B8 ; B 106 347 517 770 ; C -1 ; WX 602 ; N uni02BB ; B 205 440 468 760 ; C -1 ; WX 602 ; N afii57929 ; B 180 440 443 760 ; C -1 ; WX 602 ; N uni02C0 ; B 174 462 457 889 ; C -1 ; WX 602 ; N uni02C1 ; B 168 462 480 889 ; C -1 ; WX 602 ; N circumflex ; B 164 616 535 800 ; C -1 ; WX 602 ; N caron ; B 202 616 571 800 ; C -1 ; WX 602 ; N uni02D0 ; B 147 0 455 547 ; C -1 ; WX 602 ; N uni02D1 ; B 218 361 420 547 ; C -1 ; WX 602 ; N breve ; B 217 639 547 785 ; C -1 ; WX 602 ; N dotaccent ; B 290 653 447 774 ; C -1 ; WX 602 ; N ring ; B 226 609 504 889 ; C -1 ; WX 602 ; N ogonek ; B 125 -196 335 0 ; C -1 ; WX 602 ; N tilde ; B 184 638 551 778 ; C -1 ; WX 602 ; N hungarumlaut ; B 182 616 620 800 ; C -1 ; WX 602 ; N uni02E0 ; B 134 352 505 777 ; C -1 ; WX 602 ; N uni02E1 ; B 173 462 429 889 ; C -1 ; WX 602 ; N uni02E2 ; B 139 455 445 777 ; C -1 ; WX 602 ; N uni02E3 ; B 95 470 497 777 ; C -1 ; WX 602 ; N uni02E4 ; B 168 462 480 889 ; C -1 ; WX 602 ; N gravecomb ; B 181 616 422 800 ; C -1 ; WX 602 ; N acutecomb ; B 277 616 590 800 ; C -1 ; WX 602 ; N uni0302 ; B 164 616 535 800 ; C -1 ; WX 602 ; N tildecomb ; B 184 638 551 778 ; C -1 ; WX 602 ; N uni0304 ; B 206 667 533 760 ; C -1 ; WX 602 ; N uni0306 ; B 217 639 547 785 ; C -1 ; WX 602 ; N uni0307 ; B 290 653 447 774 ; C -1 ; WX 602 ; N uni0308 ; B 203 653 536 774 ; C -1 ; WX 602 ; N uni030A ; B 226 609 504 889 ; C -1 ; WX 602 ; N uni030B ; B 182 616 620 800 ; C -1 ; WX 602 ; N uni030C ; B 202 616 571 800 ; C -1 ; WX 602 ; N uni0312 ; B 212 440 423 591 ; C -1 ; WX 602 ; N uni0321 ; B 244 -208 552 83 ; C -1 ; WX 602 ; N uni0322 ; B 88 -209 325 82 ; C -1 ; WX 602 ; N uni0326 ; B 66 -229 277 -79 ; C -1 ; WX 602 ; N Omega ; B 43 0 559 713 ; C -1 ; WX 602 ; N pi ; B 6 -20 593 538 ; C -1 ; WX 602 ; N uni0400 ; B 14 0 610 928 ; C -1 ; WX 602 ; N afii10023 ; B 14 0 610 928 ; C -1 ; WX 602 ; N afii10051 ; B 76 -208 640 760 ; C -1 ; WX 602 ; N afii10052 ; B 88 0 685 928 ; C -1 ; WX 602 ; N afii10053 ; B 131 -15 666 743 ; C -1 ; WX 602 ; N afii10054 ; B 73 -15 637 743 ; C -1 ; WX 602 ; N afii10055 ; B 13 0 589 730 ; C -1 ; WX 602 ; N afii10056 ; B 13 0 589 928 ; C -1 ; WX 602 ; N afii10057 ; B 60 -15 634 730 ; C -1 ; WX 602 ; N afii10058 ; B -71 -12 652 730 ; C -1 ; WX 602 ; N afii10059 ; B 0 0 653 730 ; C -1 ; WX 602 ; N afii10060 ; B 76 0 640 760 ; C -1 ; WX 602 ; N afii10061 ; B -9 0 668 928 ; C -1 ; WX 602 ; N uni040D ; B 58 0 685 928 ; C -1 ; WX 602 ; N afii10062 ; B 81 0 723 928 ; C -1 ; WX 602 ; N afii10145 ; B 66 -194 677 730 ; C -1 ; WX 602 ; N afii10017 ; B 16 0 586 730 ; C -1 ; WX 602 ; N afii10018 ; B 61 0 668 730 ; C -1 ; WX 602 ; N afii10019 ; B 61 0 651 730 ; C -1 ; WX 602 ; N afii10020 ; B 88 0 685 730 ; C -1 ; WX 602 ; N afii10021 ; B -6 -185 667 730 ; C -1 ; WX 602 ; N afii10022 ; B 14 0 610 730 ; C -1 ; WX 602 ; N afii10024 ; B -1 0 739 730 ; C -1 ; WX 602 ; N afii10025 ; B 65 -15 632 743 ; C -1 ; WX 602 ; N afii10026 ; B 58 0 685 730 ; C -1 ; WX 602 ; N afii10027 ; B 58 0 685 928 ; C -1 ; WX 602 ; N afii10028 ; B -9 0 668 730 ; C -1 ; WX 602 ; N afii10029 ; B -28 -12 677 730 ; C -1 ; WX 602 ; N afii10030 ; B 41 0 702 730 ; C -1 ; WX 602 ; N afii10031 ; B 66 0 677 730 ; C -1 ; WX 602 ; N afii10032 ; B 99 -15 644 743 ; C -1 ; WX 602 ; N afii10033 ; B 66 0 677 730 ; C -1 ; WX 602 ; N afii10034 ; B 79 0 665 730 ; C -1 ; WX 602 ; N afii10035 ; B 131 -15 666 743 ; C -1 ; WX 602 ; N afii10036 ; B 161 0 700 730 ; C -1 ; WX 602 ; N afii10037 ; B 81 0 723 730 ; C -1 ; WX 602 ; N afii10038 ; B 54 -167 689 885 ; C -1 ; WX 602 ; N afii10039 ; B 13 0 725 730 ; C -1 ; WX 602 ; N afii10040 ; B 66 -194 677 730 ; C -1 ; WX 602 ; N afii10041 ; B 138 0 698 760 ; C -1 ; WX 602 ; N afii10042 ; B 19 0 722 730 ; C -1 ; WX 602 ; N afii10043 ; B 0 -194 703 730 ; C -1 ; WX 602 ; N afii10044 ; B 122 0 612 730 ; C -1 ; WX 602 ; N afii10045 ; B 0 0 744 730 ; C -1 ; WX 602 ; N afii10046 ; B 61 0 612 730 ; C -1 ; WX 602 ; N afii10047 ; B 78 -15 613 743 ; C -1 ; WX 602 ; N afii10048 ; B 0 -15 694 743 ; C -1 ; WX 602 ; N afii10049 ; B 64 0 744 730 ; C -1 ; WX 602 ; N afii10065 ; B 74 -15 613 561 ; C -1 ; WX 602 ; N afii10066 ; B 92 -15 677 761 ; C -1 ; WX 602 ; N afii10067 ; B 66 0 575 548 ; C -1 ; WX 602 ; N afii10068 ; B 108 0 605 547 ; C -1 ; WX 602 ; N afii10069 ; B -9 -172 637 547 ; C -1 ; WX 602 ; N afii10070 ; B 37 -15 564 562 ; C -1 ; WX 602 ; N afii10072 ; B -8 0 701 547 ; C -1 ; WX 602 ; N afii10073 ; B 76 -11 578 557 ; C -1 ; WX 602 ; N afii10074 ; B 83 0 630 547 ; C -1 ; WX 602 ; N afii10075 ; B 83 0 630 785 ; C -1 ; WX 602 ; N afii10076 ; B 84 0 680 547 ; C -1 ; WX 602 ; N afii10077 ; B 17 -12 657 547 ; C -1 ; WX 602 ; N afii10078 ; B 41 0 667 547 ; C -1 ; WX 602 ; N afii10079 ; B 83 0 630 547 ; C -1 ; WX 602 ; N afii10080 ; B 92 -15 616 561 ; C -1 ; WX 602 ; N afii10081 ; B 83 0 630 547 ; C -1 ; WX 602 ; N afii10082 ; B 32 -209 623 561 ; C -1 ; WX 602 ; N afii10083 ; B 126 -15 620 562 ; C -1 ; WX 602 ; N afii10084 ; B 166 0 630 547 ; C -1 ; WX 602 ; N afii10085 ; B 21 -208 681 547 ; C -1 ; WX 602 ; N afii10086 ; B 44 -157 664 690 ; C -1 ; WX 602 ; N afii10087 ; B 26 0 666 547 ; C -1 ; WX 602 ; N afii10088 ; B 47 -159 593 547 ; C -1 ; WX 602 ; N afii10089 ; B 139 0 625 548 ; C -1 ; WX 602 ; N afii10090 ; B 19 -1 688 547 ; C -1 ; WX 602 ; N afii10091 ; B 0 -159 669 547 ; C -1 ; WX 602 ; N afii10092 ; B 105 0 592 548 ; C -1 ; WX 602 ; N afii10093 ; B 14 0 693 548 ; C -1 ; WX 602 ; N afii10094 ; B 67 0 551 548 ; C -1 ; WX 602 ; N afii10095 ; B 87 -15 580 562 ; C -1 ; WX 602 ; N afii10096 ; B 0 -15 665 561 ; C -1 ; WX 602 ; N afii10097 ; B 40 0 647 547 ; C -1 ; WX 602 ; N uni0450 ; B 37 -15 564 800 ; C -1 ; WX 602 ; N afii10071 ; B 37 -15 564 774 ; C -1 ; WX 602 ; N afii10099 ; B 83 -208 585 760 ; C -1 ; WX 602 ; N afii10100 ; B 108 0 605 800 ; C -1 ; WX 602 ; N afii10101 ; B 126 -15 620 562 ; C -1 ; WX 602 ; N afii10102 ; B 96 -15 587 561 ; C -1 ; WX 602 ; N afii10103 ; B 69 0 591 813 ; C -1 ; WX 602 ; N afii10104 ; B 6 0 555 774 ; C -1 ; WX 602 ; N afii10105 ; B 29 -208 574 813 ; C -1 ; WX 602 ; N afii10106 ; B -46 -12 640 547 ; C -1 ; WX 602 ; N afii10107 ; B 17 0 628 547 ; C -1 ; WX 602 ; N afii10108 ; B 83 0 586 760 ; C -1 ; WX 602 ; N afii10109 ; B 84 0 680 800 ; C -1 ; WX 602 ; N uni045D ; B 83 0 630 800 ; C -1 ; WX 602 ; N afii10110 ; B 21 -208 681 785 ; C -1 ; WX 602 ; N afii10193 ; B 47 -159 593 547 ; C -1 ; WX 602 ; N afii10050 ; B 88 0 714 879 ; C -1 ; WX 602 ; N afii10098 ; B 108 0 635 701 ; C -1 ; WX 602 ; N uni0492 ; B 85 0 685 730 ; C -1 ; WX 602 ; N uni0493 ; B 89 0 605 547 ; C -1 ; WX 602 ; N uni049A ; B -9 -194 668 730 ; C -1 ; WX 602 ; N uni049B ; B 84 -159 680 547 ; C -1 ; WX 602 ; N uni04B2 ; B 13 -194 725 730 ; C -1 ; WX 602 ; N uni04B3 ; B 26 -159 666 547 ; C -1 ; WX 602 ; N uni1E12 ; B -43 -189 569 730 ; C -1 ; WX 602 ; N uni1E13 ; B -23 -258 622 760 ; C -1 ; WX 602 ; N uni1E3C ; B 39 -189 517 730 ; C -1 ; WX 602 ; N uni1E3D ; B 54 -244 505 760 ; C -1 ; WX 602 ; N uni1E44 ; B -13 0 613 922 ; C -1 ; WX 602 ; N uni1E45 ; B 28 0 547 741 ; C -1 ; WX 602 ; N uni1E4A ; B -13 -189 613 730 ; C -1 ; WX 602 ; N uni1E4B ; B 16 -244 547 561 ; C -1 ; WX 602 ; N uni1E70 ; B 12 -189 629 730 ; C -1 ; WX 602 ; N uni1E71 ; B 53 -244 571 703 ; C -1 ; WX 602 ; N Wgrave ; B 20 0 669 986 ; C -1 ; WX 602 ; N wgrave ; B 43 0 647 805 ; C -1 ; WX 602 ; N Wacute ; B 20 0 669 986 ; C -1 ; WX 602 ; N wacute ; B 43 0 647 805 ; C -1 ; WX 602 ; N Wdieresis ; B 20 0 669 922 ; C -1 ; WX 602 ; N wdieresis ; B 43 0 647 741 ; C -1 ; WX 602 ; N Ygrave ; B 70 0 664 986 ; C -1 ; WX 602 ; N ygrave ; B -44 -208 614 805 ; C -1 ; WX 602 ; N uni2010 ; B 119 216 454 359 ; C -1 ; WX 602 ; N uni2011 ; B 119 216 454 359 ; C -1 ; WX 602 ; N figuredash ; B -29 216 598 337 ; C -1 ; WX 602 ; N endash ; B -29 216 598 337 ; C -1 ; WX 602 ; N emdash ; B -29 216 598 337 ; C -1 ; WX 602 ; N afii00208 ; B -29 216 598 337 ; C -1 ; WX 602 ; N quoteleft ; B 205 440 468 760 ; C -1 ; WX 602 ; N quoteright ; B 205 440 468 760 ; C -1 ; WX 602 ; N quotesinglbase ; B 83 -141 348 180 ; C -1 ; WX 602 ; N quotedblleft ; B 95 440 612 760 ; C -1 ; WX 602 ; N quotedblright ; B 71 440 589 760 ; C -1 ; WX 602 ; N quotedblbase ; B -39 -141 479 180 ; C -1 ; WX 602 ; N dagger ; B 88 -97 560 730 ; C -1 ; WX 602 ; N daggerdbl ; B 23 -97 561 730 ; C -1 ; WX 602 ; N bullet ; B 125 194 478 547 ; C -1 ; WX 602 ; N ellipsis ; B -42 0 538 180 ; C -1 ; WX 602 ; N perthousand ; B 0 0 603 700 ; C -1 ; WX 602 ; N guilsinglleft ; B 148 68 429 518 ; C -1 ; WX 602 ; N guilsinglright ; B 154 68 434 518 ; C -1 ; WX 602 ; N uni207F ; B 130 462 454 777 ; C -1 ; WX 602 ; N Euro ; B -17 -15 604 743 ; C -1 ; WX 602 ; N trademark ; B 0 446 550 730 ; C -1 ; WX 602 ; N partialdiff ; B 70 -13 534 660 ; C -1 ; WX 602 ; N Delta ; B -3 0 606 695 ; C -1 ; WX 602 ; N product ; B 74 -213 528 742 ; C -1 ; WX 602 ; N summation ; B 62 -213 540 742 ; C -1 ; WX 602 ; N minus ; B 32 255 569 373 ; C -1 ; WX 602 ; N fraction ; B 0 -93 525 730 ; C -1 ; WX 602 ; N periodcentered ; B 199 258 397 438 ; C -1 ; WX 602 ; N radical ; B 23 -20 574 843 ; C -1 ; WX 602 ; N infinity ; B 5 108 597 508 ; C -1 ; WX 602 ; N integral ; B 35 -183 566 759 ; C -1 ; WX 602 ; N approxequal ; B 42 124 560 499 ; C -1 ; WX 602 ; N notequal ; B 38 -5 564 631 ; C -1 ; WX 602 ; N lessequal ; B 42 0 560 583 ; C -1 ; WX 602 ; N greaterequal ; B 42 0 560 583 ; C -1 ; WX 602 ; N house ; B 53 0 549 596 ; C -1 ; WX 602 ; N revlogicalnot ; B 42 176 560 439 ; C -1 ; WX 602 ; N uni2311 ; B 34 113 568 647 ; C -1 ; WX 602 ; N uni2319 ; B 42 176 560 439 ; C -1 ; WX 602 ; N uni237D ; B -4 -233 606 101 ; C -1 ; WX 602 ; N uni2423 ; B 14 -233 574 101 ; C -1 ; WX 602 ; N upblock ; B -10 132 612 770 ; C -1 ; WX 602 ; N uni2581 ; B -10 -505 612 -345 ; C -1 ; WX 602 ; N uni2582 ; B -10 -505 612 -186 ; C -1 ; WX 602 ; N uni2583 ; B -10 -505 612 -26 ; C -1 ; WX 602 ; N dnblock ; B -10 -505 612 133 ; C -1 ; WX 602 ; N uni2585 ; B -10 -505 612 292 ; C -1 ; WX 602 ; N uni2586 ; B -10 -505 612 451 ; C -1 ; WX 602 ; N uni2587 ; B -10 -505 612 611 ; C -1 ; WX 602 ; N block ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2589 ; B -10 -505 535 770 ; C -1 ; WX 602 ; N uni258A ; B -10 -505 457 770 ; C -1 ; WX 602 ; N uni258B ; B -10 -505 379 770 ; C -1 ; WX 602 ; N lfblock ; B -10 -505 301 770 ; C -1 ; WX 602 ; N uni258D ; B -10 -505 224 770 ; C -1 ; WX 602 ; N uni258E ; B -10 -505 146 770 ; C -1 ; WX 602 ; N uni258F ; B -10 -505 68 770 ; C -1 ; WX 602 ; N rtblock ; B 301 -505 612 770 ; C -1 ; WX 602 ; N ltshade ; B -10 -505 535 770 ; C -1 ; WX 602 ; N shade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N dkshade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2594 ; B -10 610 612 770 ; C -1 ; WX 602 ; N uni2595 ; B 534 -505 612 770 ; C -1 ; WX 602 ; N uni2596 ; B -10 -505 301 133 ; C -1 ; WX 602 ; N uni2597 ; B 301 -505 612 133 ; C -1 ; WX 602 ; N uni2598 ; B -10 132 301 770 ; C -1 ; WX 602 ; N uni2599 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259A ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259B ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259C ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259D ; B 301 132 612 770 ; C -1 ; WX 602 ; N uni259E ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259F ; B -10 -505 612 770 ; C -1 ; WX 602 ; N lozenge ; B 57 -233 545 808 ; C -1 ; WX 602 ; N uni2638 ; B 17 103 586 657 ; C -1 ; WX 602 ; N fi ; B 32 0 625 760 ; C -1 ; WX 602 ; N fl ; B 32 0 625 760 ; C -1 ; WX 602 ; N uniFFFD ; B -57 -138 600 927 ; C -1 ; WX 602 ; N dlLtcaron ; B 277 616 500 800 ; C -1 ; WX 602 ; N Dieresis ; B 196 625 529 746 ; C -1 ; WX 602 ; N Acute ; B 275 616 534 746 ; C -1 ; WX 602 ; N Tilde ; B 181 616 547 747 ; C -1 ; WX 602 ; N c6462 ; B 42 -15 560 562 ; C -1 ; WX 602 ; N Grave ; B 219 616 418 746 ; C -1 ; WX 602 ; N Circumflex ; B 167 616 531 746 ; C -1 ; WX 602 ; N Caron ; B 200 616 557 746 ; C -1 ; WX 602 ; N fractionslash ; B 22 244 559 430 ; C -1 ; WX 602 ; N foursuperior ; B 131 326 480 734 ; C -1 ; WX 602 ; N Breve ; B 211 616 539 746 ; C -1 ; WX 602 ; N Dotaccent ; B 285 625 442 746 ; C -1 ; WX 602 ; N Hungarumlaut ; B 182 616 645 746 ; C -1 ; WX 602 ; N Doublegrave ; B 132 616 522 746 ; EndCharMetrics EndFontMetrics htmldoc-1.8.27/fonts/Courier-Oblique.afm0100664000212600000240000007656007477306250016576 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Courier-Oblique FullName Courier Oblique FamilyName Courier Weight Regular ItalicAngle -12.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -61 -237 774 811 CapHeight 563 XHeight 417 Descender -186 Ascender 604 StartCharMetrics 316 C 32 ; WX 600 ; N space ; B 319 0 319 0 ; C 33 ; WX 600 ; N exclam ; B 246 -15 463 618 ; C 34 ; WX 600 ; N quotedbl ; B 254 315 582 604 ; C 35 ; WX 600 ; N numbersign ; B 137 -62 589 647 ; C 36 ; WX 600 ; N dollar ; B 131 -92 582 655 ; C 37 ; WX 600 ; N percent ; B 137 -12 591 611 ; C 38 ; WX 600 ; N ampersand ; B 132 -16 527 519 ; C 39 ; WX 600 ; N quoteright ; B 207 314 468 604 ; C 40 ; WX 600 ; N parenleft ; B 335 -124 583 604 ; C 41 ; WX 600 ; N parenright ; B 124 -124 372 604 ; C 42 ; WX 600 ; N asterisk ; B 211 250 586 604 ; C 43 ; WX 600 ; N plus ; B 131 32 588 530 ; C 44 ; WX 600 ; N comma ; B 110 -145 371 145 ; C 45 ; WX 600 ; N hyphen ; B 131 258 588 299 ; C 46 ; WX 600 ; N period ; B 235 -15 386 116 ; C 47 ; WX 600 ; N slash ; B 99 -81 625 668 ; C 48 ; WX 600 ; N zero ; B 156 -15 571 618 ; C 49 ; WX 600 ; N one ; B 117 0 492 612 ; C 50 ; WX 600 ; N two ; B 84 0 572 618 ; C 51 ; WX 600 ; N three ; B 110 -15 579 618 ; C 52 ; WX 600 ; N four ; B 141 0 545 604 ; C 53 ; WX 600 ; N five ; B 113 -15 584 604 ; C 54 ; WX 600 ; N six ; B 184 -15 631 618 ; C 55 ; WX 600 ; N seven ; B 215 -1 606 604 ; C 56 ; WX 600 ; N eight ; B 143 -15 576 618 ; C 57 ; WX 600 ; N nine ; B 142 -15 589 618 ; C 58 ; WX 600 ; N colon ; B 235 -15 450 417 ; C 59 ; WX 600 ; N semicolon ; B 114 -145 426 417 ; C 60 ; WX 600 ; N less ; B 131 44 627 518 ; C 61 ; WX 600 ; N equal ; B 95 190 625 375 ; C 62 ; WX 600 ; N greater ; B 92 44 588 518 ; C 63 ; WX 600 ; N question ; B 231 -15 581 577 ; C 64 ; WX 600 ; N at ; B 139 -62 561 624 ; C 65 ; WX 600 ; N A ; B 13 0 596 563 ; C 66 ; WX 600 ; N B ; B 47 0 591 563 ; C 67 ; WX 600 ; N C ; B 110 -16 635 576 ; C 68 ; WX 600 ; N D ; B 47 0 592 563 ; C 69 ; WX 600 ; N E ; B 47 0 619 563 ; C 70 ; WX 600 ; N F ; B 47 0 640 563 ; C 71 ; WX 600 ; N G ; B 108 -16 636 576 ; C 72 ; WX 600 ; N H ; B 57 0 646 563 ; C 73 ; WX 600 ; N I ; B 117 0 603 563 ; C 74 ; WX 600 ; N J ; B 100 -16 699 563 ; C 75 ; WX 600 ; N K ; B 47 0 662 563 ; C 76 ; WX 600 ; N L ; B 67 0 585 563 ; C 77 ; WX 600 ; N M ; B 15 0 700 563 ; C 78 ; WX 600 ; N N ; B 46 0 678 563 ; C 79 ; WX 600 ; N O ; B 102 -16 616 576 ; C 80 ; WX 600 ; N P ; B 47 0 587 563 ; C 81 ; WX 600 ; N Q ; B 102 -115 616 576 ; C 82 ; WX 600 ; N R ; B 47 0 594 563 ; C 83 ; WX 600 ; N S ; B 96 -17 602 577 ; C 84 ; WX 600 ; N T ; B 152 0 648 563 ; C 85 ; WX 600 ; N U ; B 136 -16 676 563 ; C 86 ; WX 600 ; N V ; B 124 0 707 563 ; C 87 ; WX 600 ; N W ; B 122 0 696 563 ; C 88 ; WX 600 ; N X ; B 44 0 662 563 ; C 89 ; WX 600 ; N Y ; B 153 0 665 563 ; C 90 ; WX 600 ; N Z ; B 103 0 590 563 ; C 91 ; WX 600 ; N bracketleft ; B 254 -124 570 604 ; C 92 ; WX 600 ; N backslash ; B 250 -81 474 668 ; C 93 ; WX 600 ; N bracketright ; B 132 -124 448 604 ; C 94 ; WX 600 ; N asciicircum ; B 192 354 567 615 ; C 95 ; WX 600 ; N underscore ; B -61 -125 564 -75 ; C 96 ; WX 600 ; N quoteleft ; B 388 343 544 604 ; C 97 ; WX 600 ; N a ; B 93 -16 546 431 ; C 98 ; WX 600 ; N b ; B 26 -16 591 604 ; C 99 ; WX 600 ; N c ; B 121 -17 596 432 ; C 100 ; WX 600 ; N d ; B 102 -16 630 604 ; C 101 ; WX 600 ; N e ; B 104 -16 570 431 ; C 102 ; WX 600 ; N f ; B 109 0 663 604 ; C 103 ; WX 600 ; N g ; B 105 -186 647 431 ; C 104 ; WX 600 ; N h ; B 55 0 556 604 ; C 105 ; WX 600 ; N i ; B 96 0 513 624 ; C 106 ; WX 600 ; N j ; B 112 -186 547 624 ; C 107 ; WX 600 ; N k ; B 67 0 578 604 ; C 108 ; WX 600 ; N l ; B 96 0 513 604 ; C 109 ; WX 600 ; N m ; B 15 0 603 431 ; C 110 ; WX 600 ; N n ; B 57 0 546 431 ; C 111 ; WX 600 ; N o ; B 111 -16 577 431 ; C 112 ; WX 600 ; N p ; B -13 -186 593 431 ; C 113 ; WX 600 ; N q ; B 105 -186 668 431 ; C 114 ; WX 600 ; N r ; B 88 0 619 427 ; C 115 ; WX 600 ; N s ; B 108 -17 558 431 ; C 116 ; WX 600 ; N t ; B 127 -16 518 563 ; C 117 ; WX 600 ; N u ; B 127 -16 569 417 ; C 118 ; WX 600 ; N v ; B 114 0 655 417 ; C 119 ; WX 600 ; N w ; B 114 0 655 417 ; C 120 ; WX 600 ; N x ; B 55 0 611 417 ; C 121 ; WX 600 ; N y ; B 22 -186 634 417 ; C 122 ; WX 600 ; N z ; B 115 0 563 417 ; C 123 ; WX 600 ; N braceleft ; B 248 -124 528 604 ; C 124 ; WX 600 ; N bar ; B 257 -124 444 604 ; C 125 ; WX 600 ; N braceright ; B 175 -124 455 604 ; C 126 ; WX 600 ; N asciitilde ; B 145 212 575 348 ; C 161 ; WX 600 ; N exclamdown ; B 222 -216 439 417 ; C 162 ; WX 600 ; N cent ; B 175 -13 563 630 ; C 163 ; WX 600 ; N sterling ; B 90 0 541 578 ; C 164 ; WX 600 ; N fraction ; B 84 138 645 470 ; C 165 ; WX 600 ; N yen ; B 161 0 665 563 ; C 166 ; WX 600 ; N florin ; B 74 -93 643 618 ; C 167 ; WX 600 ; N section ; B 91 -62 624 603 ; C 168 ; WX 600 ; N currency ; B 127 95 597 489 ; C 169 ; WX 600 ; N quotesingle ; B 344 315 492 604 ; C 170 ; WX 600 ; N quotedblleft ; B 221 343 586 604 ; C 171 ; WX 600 ; N guillemotleft ; B 108 0 626 417 ; C 172 ; WX 600 ; N guilsinglleft ; B 108 0 397 417 ; C 173 ; WX 600 ; N guilsinglright ; B 297 0 585 417 ; C 174 ; WX 600 ; N fi ; B 14 0 615 624 ; C 175 ; WX 600 ; N fl ; B 14 0 611 604 ; C 177 ; WX 600 ; N endash ; B 131 261 588 302 ; C 178 ; WX 600 ; N dagger ; B 208 -63 561 604 ; C 179 ; WX 600 ; N daggerdbl ; B 154 -62 561 604 ; C 180 ; WX 600 ; N periodcentered ; B 285 217 436 348 ; C 182 ; WX 600 ; N paragraph ; B 152 -62 648 604 ; C 183 ; WX 600 ; N bullet ; B 253 141 449 337 ; C 184 ; WX 600 ; N quotesinglbase ; B 110 -145 371 145 ; C 185 ; WX 600 ; N quotedblbase ; B 73 -116 538 145 ; C 186 ; WX 600 ; N quotedblright ; B 170 343 635 604 ; C 187 ; WX 600 ; N guillemotright ; B 67 0 585 417 ; C 188 ; WX 600 ; N ellipsis ; B 57 -15 557 84 ; C 189 ; WX 600 ; N perthousand ; B 91 -9 598 614 ; C 191 ; WX 600 ; N questiondown ; B 105 -175 455 417 ; C 193 ; WX 600 ; N grave ; B 286 490 429 639 ; C 194 ; WX 600 ; N acute ; B 388 490 577 639 ; C 195 ; WX 600 ; N circumflex ; B 263 490 554 639 ; C 196 ; WX 600 ; N tilde ; B 258 516 579 605 ; C 197 ; WX 600 ; N macron ; B 273 536 564 576 ; C 198 ; WX 600 ; N breve ; B 280 489 574 621 ; C 199 ; WX 600 ; N dotaccent ; B 368 511 470 611 ; C 200 ; WX 600 ; N dieresis ; B 258 511 581 611 ; C 202 ; WX 600 ; N ring ; B 326 480 516 661 ; C 203 ; WX 600 ; N cedilla ; B 181 -173 356 0 ; C 205 ; WX 600 ; N hungarumlaut ; B 263 490 576 633 ; C 206 ; WX 600 ; N ogonek ; B 258 -155 408 0 ; C 207 ; WX 600 ; N caron ; B 286 490 577 639 ; C 208 ; WX 600 ; N emdash ; B 60 261 659 302 ; C 225 ; WX 600 ; N AE ; B 14 0 690 563 ; C 227 ; WX 600 ; N ordfeminine ; B 229 279 511 574 ; C 232 ; WX 600 ; N Lslash ; B 66 0 586 563 ; C 233 ; WX 600 ; N Oslash ; B 34 -43 685 605 ; C 234 ; WX 600 ; N OE ; B 62 0 690 563 ; C 235 ; WX 600 ; N ordmasculine ; B 243 284 543 577 ; C 241 ; WX 600 ; N ae ; B 36 -16 630 431 ; C 245 ; WX 600 ; N dotlessi ; B 96 0 513 417 ; C 248 ; WX 600 ; N lslash ; B 96 0 524 604 ; C 249 ; WX 600 ; N oslash ; B 47 -43 637 458 ; C 250 ; WX 600 ; N oe ; B 50 -16 630 431 ; C 251 ; WX 600 ; N germandbls ; B 47 -16 539 604 ; C -1 ; WX 600 ; N Udieresis ; B 136 -16 676 762 ; C -1 ; WX 600 ; N Uacute ; B 136 -16 676 789 ; C -1 ; WX 600 ; N Scedilla ; B 96 -179 602 577 ; C -1 ; WX 600 ; N Tcaron ; B 152 0 648 789 ; C -1 ; WX 600 ; N Scaron ; B 96 -17 618 789 ; C -1 ; WX 600 ; N Rcaron ; B 47 0 594 789 ; C -1 ; WX 600 ; N Racute ; B 47 0 594 789 ; C -1 ; WX 600 ; N Sacute ; B 96 -17 602 789 ; C -1 ; WX 600 ; N Otilde ; B 103 -16 618 755 ; C -1 ; WX 600 ; N ucircumflex ; B 127 -16 569 639 ; C -1 ; WX 600 ; N Ohungarumlaut ; B 102 -16 672 787 ; C -1 ; WX 600 ; N Uhungarumlaut ; B 136 -16 676 787 ; C -1 ; WX 600 ; N Yacute ; B 153 0 665 789 ; C -1 ; WX 600 ; N Eth ; B 47 0 592 563 ; C -1 ; WX 600 ; N Dcroat ; B 47 0 592 563 ; C -1 ; WX 600 ; N Zacute ; B 103 0 590 789 ; C -1 ; WX 600 ; N Uring ; B 136 -16 676 807 ; C -1 ; WX 600 ; N gbreve ; B 105 -186 647 621 ; C -1 ; WX 600 ; N eogonek ; B 104 -155 570 431 ; C -1 ; WX 600 ; N edotaccent ; B 104 -16 570 611 ; C -1 ; WX 600 ; N ecaron ; B 104 -16 577 639 ; C -1 ; WX 600 ; N Ugrave ; B 136 -16 676 789 ; C -1 ; WX 600 ; N Thorn ; B 47 0 566 563 ; C -1 ; WX 600 ; N eacute ; B 104 -16 570 639 ; C -1 ; WX 600 ; N edieresis ; B 104 -16 586 611 ; C -1 ; WX 600 ; N dcaron ; B 102 -16 774 618 ; C -1 ; WX 600 ; N ccedilla ; B 122 -173 596 431 ; C -1 ; WX 600 ; N ccaron ; B 121 -17 596 639 ; C -1 ; WX 600 ; N cacute ; B 121 -17 596 639 ; C -1 ; WX 600 ; N aogonek ; B 93 -155 546 431 ; C -1 ; WX 600 ; N aring ; B 93 -16 546 661 ; C -1 ; WX 600 ; N atilde ; B 93 -16 570 605 ; C -1 ; WX 600 ; N abreve ; B 93 -16 574 621 ; C -1 ; WX 600 ; N egrave ; B 104 -16 570 639 ; C -1 ; WX 600 ; N agrave ; B 93 -16 546 639 ; C -1 ; WX 600 ; N aacute ; B 93 -16 546 639 ; C -1 ; WX 600 ; N adieresis ; B 93 -16 571 611 ; C -1 ; WX 600 ; N Uogonek ; B 136 -155 676 563 ; C -1 ; WX 600 ; N ugrave ; B 127 -16 569 639 ; C -1 ; WX 600 ; N uacute ; B 127 -16 569 639 ; C -1 ; WX 600 ; N udieresis ; B 127 -16 573 611 ; C -1 ; WX 600 ; N tcaron ; B 127 -16 593 618 ; C -1 ; WX 600 ; N scommaaccent ; B 108 -237 558 431 ; C -1 ; WX 600 ; N Zcaron ; B 103 0 604 789 ; C -1 ; WX 600 ; N ecircumflex ; B 104 -16 570 639 ; C -1 ; WX 600 ; N Ucircumflex ; B 136 -16 676 789 ; C -1 ; WX 600 ; N acircumflex ; B 93 -16 546 639 ; C -1 ; WX 600 ; N Zdotaccent ; B 103 0 590 762 ; C -1 ; WX 600 ; N scaron ; B 107 -17 584 639 ; C -1 ; WX 600 ; N Amacron ; B 13 0 596 723 ; C -1 ; WX 600 ; N sacute ; B 108 -17 577 639 ; C -1 ; WX 600 ; N Tcommaaccent ; B 152 -237 648 563 ; C -1 ; WX 600 ; N Ydieresis ; B 153 0 665 762 ; C -1 ; WX 600 ; N thorn ; B -13 -186 593 590 ; C -1 ; WX 600 ; N Emacron ; B 47 0 619 723 ; C -1 ; WX 600 ; N Ograve ; B 102 -16 616 789 ; C -1 ; WX 600 ; N Oacute ; B 102 -16 616 789 ; C -1 ; WX 600 ; N Odieresis ; B 102 -16 616 762 ; C -1 ; WX 600 ; N Ntilde ; B 46 0 678 755 ; C -1 ; WX 600 ; N Ncaron ; B 46 0 678 789 ; C -1 ; WX 600 ; N Nacute ; B 46 0 678 789 ; C -1 ; WX 600 ; N Lcaron ; B 67 0 638 576 ; C -1 ; WX 600 ; N Lacute ; B 67 0 585 789 ; C -1 ; WX 600 ; N Idotaccent ; B 117 0 603 762 ; C -1 ; WX 600 ; N racute ; B 88 0 619 639 ; C -1 ; WX 600 ; N Icircumflex ; B 117 0 603 789 ; C -1 ; WX 600 ; N ohungarumlaut ; B 111 -16 616 633 ; C -1 ; WX 600 ; N otilde ; B 111 -16 586 605 ; C -1 ; WX 600 ; N Euro ; B 60 -16 634 576 ; C -1 ; WX 600 ; N ocircumflex ; B 111 -16 577 639 ; C -1 ; WX 600 ; N onesuperior ; B 249 259 469 612 ; C -1 ; WX 600 ; N twosuperior ; B 230 259 514 612 ; C -1 ; WX 600 ; N threesuperior ; B 245 251 516 612 ; C -1 ; WX 600 ; N Igrave ; B 117 0 603 789 ; C -1 ; WX 600 ; N Iacute ; B 117 0 603 789 ; C -1 ; WX 600 ; N Imacron ; B 117 0 603 723 ; C -1 ; WX 600 ; N Iogonek ; B 117 -155 603 563 ; C -1 ; WX 600 ; N Idieresis ; B 117 0 611 762 ; C -1 ; WX 600 ; N Gbreve ; B 108 -16 656 777 ; C -1 ; WX 600 ; N Umacron ; B 136 -16 676 723 ; C -1 ; WX 600 ; N Kcommaaccent ; B 47 -237 662 563 ; C -1 ; WX 600 ; N ograve ; B 111 -16 577 639 ; C -1 ; WX 600 ; N Scommaaccent ; B 96 -237 602 577 ; C -1 ; WX 600 ; N Eogonek ; B 47 -155 619 563 ; C -1 ; WX 600 ; N oacute ; B 111 -16 577 639 ; C -1 ; WX 600 ; N Edotaccent ; B 47 0 619 762 ; C -1 ; WX 600 ; N iogonek ; B 96 -155 513 624 ; C -1 ; WX 600 ; N gcommaaccent ; B 105 -186 647 668 ; C -1 ; WX 600 ; N odieresis ; B 111 -16 581 611 ; C -1 ; WX 600 ; N ntilde ; B 57 0 570 605 ; C -1 ; WX 600 ; N ncaron ; B 57 0 577 639 ; C -1 ; WX 600 ; N Ecaron ; B 47 0 619 789 ; C -1 ; WX 600 ; N Ecircumflex ; B 47 0 619 789 ; C -1 ; WX 600 ; N scedilla ; B 108 -173 558 431 ; C -1 ; WX 600 ; N rcaron ; B 88 0 619 639 ; C -1 ; WX 600 ; N Egrave ; B 47 0 619 789 ; C -1 ; WX 600 ; N Eacute ; B 47 0 619 789 ; C -1 ; WX 600 ; N Gcommaaccent ; B 108 -237 636 576 ; C -1 ; WX 600 ; N Rcommaaccent ; B 47 -237 594 563 ; C -1 ; WX 600 ; N Edieresis ; B 47 0 619 762 ; C -1 ; WX 600 ; N nacute ; B 57 0 577 639 ; C -1 ; WX 600 ; N uogonek ; B 127 -155 569 417 ; C -1 ; WX 600 ; N umacron ; B 127 -16 569 576 ; C -1 ; WX 600 ; N Dcaron ; B 47 0 592 789 ; C -1 ; WX 600 ; N lcaron ; B 96 0 593 618 ; C -1 ; WX 600 ; N Ccaron ; B 110 -16 635 789 ; C -1 ; WX 600 ; N Cacute ; B 110 -16 635 789 ; C -1 ; WX 600 ; N Ccedilla ; B 110 -173 635 576 ; C -1 ; WX 600 ; N degree ; B 257 346 553 636 ; C -1 ; WX 600 ; N Aogonek ; B 13 -155 596 563 ; C -1 ; WX 600 ; N minus ; B 131 261 588 302 ; C -1 ; WX 600 ; N multiply ; B 143 100 577 464 ; C -1 ; WX 600 ; N divide ; B 131 25 588 540 ; C -1 ; WX 600 ; N Aring ; B 13 0 596 811 ; C -1 ; WX 600 ; N trademark ; B 90 243 710 563 ; C -1 ; WX 600 ; N rcommaaccent ; B 88 -237 619 427 ; C -1 ; WX 600 ; N lacute ; B 96 0 572 789 ; C -1 ; WX 600 ; N omacron ; B 111 -16 577 576 ; C -1 ; WX 600 ; N Atilde ; B 13 0 596 755 ; C -1 ; WX 600 ; N icircumflex ; B 95 0 536 639 ; C -1 ; WX 600 ; N igrave ; B 96 0 513 639 ; C -1 ; WX 600 ; N ncommaaccent ; B 57 -237 546 431 ; C -1 ; WX 600 ; N lcommaaccent ; B 96 -237 513 604 ; C -1 ; WX 600 ; N plusminus ; B 76 0 597 529 ; C -1 ; WX 600 ; N onehalf ; B 82 0 627 612 ; C -1 ; WX 600 ; N onequarter ; B 74 0 619 612 ; C -1 ; WX 600 ; N threequarters ; B 70 0 619 612 ; C -1 ; WX 600 ; N iacute ; B 96 0 535 639 ; C -1 ; WX 600 ; N Abreve ; B 13 0 596 777 ; C -1 ; WX 600 ; N kcommaaccent ; B 67 -237 578 604 ; C -1 ; WX 600 ; N Omacron ; B 102 -16 616 723 ; C -1 ; WX 600 ; N imacron ; B 96 0 564 576 ; C -1 ; WX 600 ; N emacron ; B 104 -16 570 576 ; C -1 ; WX 600 ; N amacron ; B 93 -16 564 576 ; C -1 ; WX 600 ; N tcommaaccent ; B 127 -237 518 563 ; C -1 ; WX 600 ; N ydieresis ; B 22 -186 634 611 ; C -1 ; WX 600 ; N zdotaccent ; B 115 0 563 611 ; C -1 ; WX 600 ; N zcaron ; B 115 0 576 639 ; C -1 ; WX 600 ; N zacute ; B 115 0 577 639 ; C -1 ; WX 600 ; N yacute ; B 22 -186 634 639 ; C -1 ; WX 600 ; N uhungarumlaut ; B 127 -16 576 633 ; C -1 ; WX 600 ; N eth ; B 111 -17 582 620 ; C -1 ; WX 600 ; N uring ; B 127 -16 569 661 ; C -1 ; WX 600 ; N Ocircumflex ; B 102 -16 616 789 ; C -1 ; WX 600 ; N commaaccent ; B 159 -237 322 -60 ; C -1 ; WX 600 ; N copyright ; B 57 -15 663 578 ; C -1 ; WX 600 ; N registered ; B 57 -15 663 578 ; C -1 ; WX 600 ; N Acircumflex ; B 13 0 596 789 ; C -1 ; WX 600 ; N idieresis ; B 96 0 568 611 ; C -1 ; WX 600 ; N lozenge ; B 149 -11 571 575 ; C -1 ; WX 600 ; N Delta ; B 43 0 557 563 ; C -1 ; WX 600 ; N notequal ; B 96 94 625 464 ; C -1 ; WX 600 ; N radical ; B 88 0 773 699 ; C -1 ; WX 600 ; N Agrave ; B 13 0 596 789 ; C -1 ; WX 600 ; N Aacute ; B 13 0 596 789 ; C -1 ; WX 600 ; N lessequal ; B 56 0 635 535 ; C -1 ; WX 600 ; N greaterequal ; B 71 0 600 535 ; C -1 ; WX 600 ; N logicalnot ; B 160 168 621 438 ; C -1 ; WX 600 ; N summation ; B 90 -127 616 563 ; C -1 ; WX 600 ; N partialdiff ; B 111 -16 580 581 ; C -1 ; WX 600 ; N Ncommaaccent ; B 46 -237 678 563 ; C -1 ; WX 600 ; N dcroat ; B 102 -16 690 604 ; C -1 ; WX 600 ; N brokenbar ; B 257 -124 444 604 ; C -1 ; WX 600 ; N Lcommaaccent ; B 67 -237 585 563 ; C -1 ; WX 600 ; N Adieresis ; B 13 0 596 762 ; C -1 ; WX 600 ; N mu ; B 86 -200 569 417 ; C -1 ; WX 600 ; N .notdef ; B 319 0 319 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -41 KPX A Ccedilla -39 KPX A G -36 KPX A O -35 KPX A Odieresis -35 KPX A Q -37 KPX A T -34 KPX A U -41 KPX A Uacute -41 KPX A Ucircumflex -41 KPX A Udieresis -41 KPX A Ugrave -41 KPX A V -78 KPX A W -20 KPX A Y -35 KPX A a 1 KPX A b 40 KPX A c -26 KPX A ccedilla -23 KPX A comma -47 KPX A d -17 KPX A e -21 KPX A g -27 KPX A guillemotleft -57 KPX A guilsinglleft -57 KPX A hyphen -35 KPX A o -22 KPX A period -70 KPX A q -27 KPX A quotedblright -82 KPX A quoteright -102 KPX A t -33 KPX A u -23 KPX A v -59 KPX A w -27 KPX A y -63 KPX Aacute C -41 KPX Aacute G -36 KPX Aacute O -35 KPX Aacute Q -37 KPX Aacute T -34 KPX Aacute U -41 KPX Aacute V -78 KPX Aacute W -20 KPX Aacute Y -35 KPX Aacute a 1 KPX Aacute b 40 KPX Aacute c -26 KPX Aacute comma -47 KPX Aacute d -17 KPX Aacute e -21 KPX Aacute g -27 KPX Aacute guillemotleft -57 KPX Aacute guilsinglleft -57 KPX Aacute hyphen -35 KPX Aacute o -22 KPX Aacute period -70 KPX Aacute q -27 KPX Aacute quoteright -102 KPX Aacute t -33 KPX Aacute u -23 KPX Aacute v -59 KPX Aacute w -27 KPX Aacute y -63 KPX Acircumflex C -41 KPX Acircumflex G -36 KPX Acircumflex O -35 KPX Acircumflex Q -37 KPX Acircumflex T -34 KPX Acircumflex U -41 KPX Acircumflex V -78 KPX Acircumflex W -20 KPX Acircumflex Y -35 KPX Acircumflex comma -47 KPX Acircumflex period -70 KPX Adieresis C -41 KPX Adieresis G -36 KPX Adieresis O -35 KPX Adieresis Q -37 KPX Adieresis T -34 KPX Adieresis U -41 KPX Adieresis V -78 KPX Adieresis W -20 KPX Adieresis Y -35 KPX Adieresis a 1 KPX Adieresis b 40 KPX Adieresis c -26 KPX Adieresis comma -47 KPX Adieresis d -17 KPX Adieresis g -27 KPX Adieresis guillemotleft -57 KPX Adieresis guilsinglleft -57 KPX Adieresis hyphen -35 KPX Adieresis o -22 KPX Adieresis period -70 KPX Adieresis q -27 KPX Adieresis quotedblright -82 KPX Adieresis quoteright -102 KPX Adieresis t -33 KPX Adieresis u -23 KPX Adieresis v -59 KPX Adieresis w -27 KPX Adieresis y -63 KPX Agrave C -41 KPX Agrave G -36 KPX Agrave O -35 KPX Agrave Q -37 KPX Agrave T -34 KPX Agrave U -41 KPX Agrave V -78 KPX Agrave W -20 KPX Agrave Y -35 KPX Agrave comma -47 KPX Agrave period -70 KPX Aring C -41 KPX Aring G -36 KPX Aring O -35 KPX Aring Q -37 KPX Aring T -34 KPX Aring U -41 KPX Aring V -78 KPX Aring W -20 KPX Aring Y -35 KPX Aring a 1 KPX Aring b 40 KPX Aring c -26 KPX Aring comma -47 KPX Aring d -17 KPX Aring e -21 KPX Aring g -27 KPX Aring guillemotleft -57 KPX Aring guilsinglleft -57 KPX Aring hyphen -35 KPX Aring o -22 KPX Aring period -70 KPX Aring q -27 KPX Aring quotedblright -82 KPX Aring quoteright -102 KPX Aring t -33 KPX Aring u -23 KPX Aring v -59 KPX Aring w -27 KPX Aring y -63 KPX Atilde C -41 KPX Atilde G -36 KPX Atilde O -35 KPX Atilde Q -37 KPX Atilde T -34 KPX Atilde U -41 KPX Atilde V -78 KPX Atilde W -20 KPX Atilde Y -35 KPX Atilde comma -47 KPX Atilde period -70 KPX B A -15 KPX B AE -16 KPX B Aacute -15 KPX B Acircumflex -15 KPX B Adieresis -15 KPX B Aring -15 KPX B Atilde -15 KPX B O -15 KPX B OE 5 KPX B Oacute -15 KPX B Ocircumflex -15 KPX B Odieresis -15 KPX B Ograve -15 KPX B Oslash -14 KPX B V -37 KPX B W -15 KPX B Y -58 KPX C A -14 KPX C AE -14 KPX C Aacute -14 KPX C Adieresis -14 KPX C Aring -14 KPX C H -34 KPX C K -19 KPX C O -24 KPX C Oacute -24 KPX C Odieresis -24 KPX Ccedilla A -8 KPX D A -47 KPX D Aacute -47 KPX D Acircumflex -47 KPX D Adieresis -47 KPX D Agrave -47 KPX D Aring -47 KPX D Atilde -47 KPX D J -38 KPX D T -47 KPX D V -50 KPX D W -20 KPX D X -60 KPX D Y -71 KPX F A -45 KPX F Aacute -45 KPX F Acircumflex -45 KPX F Adieresis -45 KPX F Agrave -45 KPX F Aring -45 KPX F Atilde -45 KPX F J -100 KPX F O -34 KPX F Odieresis -34 KPX F a -52 KPX F aacute -52 KPX F adieresis -49 KPX F ae -25 KPX F aring -52 KPX F comma -172 KPX F e -61 KPX F eacute -61 KPX F hyphen -72 KPX F i -51 KPX F j -59 KPX F o -68 KPX F oacute -68 KPX F odieresis -54 KPX F oe -26 KPX F oslash -68 KPX F period -196 KPX F r -37 KPX F u -6 KPX G A 0 KPX G AE 0 KPX G Aacute 0 KPX G Acircumflex 0 KPX G Adieresis 0 KPX G Agrave 0 KPX G Aring 0 KPX G Atilde 0 KPX G T -31 KPX G V -1 KPX G W -4 KPX G Y -22 KPX J A -14 KPX J AE -23 KPX J Adieresis -14 KPX J Aring -14 KPX K C -50 KPX K G -46 KPX K O -45 KPX K OE -28 KPX K Oacute -45 KPX K Odieresis -45 KPX K S -16 KPX K T -18 KPX K a -8 KPX K adieresis -8 KPX K ae 19 KPX K aring -8 KPX K e -30 KPX K hyphen -66 KPX K o -32 KPX K oacute -32 KPX K odieresis -32 KPX K u -33 KPX K udieresis -33 KPX K y -72 KPX L A 9 KPX L AE 9 KPX L Aacute 9 KPX L Adieresis 9 KPX L Aring 9 KPX L C -19 KPX L Ccedilla -19 KPX L G -18 KPX L O -15 KPX L Oacute -15 KPX L Ocircumflex -15 KPX L Odieresis -15 KPX L Ograve -15 KPX L Otilde -15 KPX L S -31 KPX L T -59 KPX L U -36 KPX L Udieresis -36 KPX L V -71 KPX L W -31 KPX L Y -60 KPX L hyphen -1 KPX L quotedblright -76 KPX L quoteright -84 KPX L u -20 KPX L udieresis -20 KPX L y -50 KPX N A -10 KPX N AE -10 KPX N Aacute -10 KPX N Adieresis -10 KPX N Aring -10 KPX N C -18 KPX N Ccedilla -18 KPX N G -16 KPX N O -14 KPX N Oacute -14 KPX N Odieresis -14 KPX N a -23 KPX N aacute -23 KPX N adieresis -23 KPX N ae 7 KPX N aring -23 KPX N comma -64 KPX N e -10 KPX N eacute -10 KPX N o -14 KPX N oacute -14 KPX N odieresis -14 KPX N oslash -11 KPX N period -87 KPX N u -14 KPX N udieresis -14 KPX O A -33 KPX O AE -30 KPX O Aacute -33 KPX O Adieresis -33 KPX O Aring -33 KPX O T -37 KPX O V -40 KPX O W -8 KPX O X -47 KPX O Y -61 KPX Oacute A -33 KPX Oacute T -37 KPX Oacute V -40 KPX Oacute W -8 KPX Oacute Y -61 KPX Ocircumflex T -37 KPX Ocircumflex V -40 KPX Ocircumflex Y -61 KPX Odieresis A -33 KPX Odieresis T -37 KPX Odieresis V -40 KPX Odieresis W -8 KPX Odieresis X -47 KPX Odieresis Y -61 KPX Ograve T -37 KPX Ograve V -40 KPX Ograve Y -61 KPX Oslash A -31 KPX Otilde T -36 KPX Otilde V -39 KPX Otilde Y -60 KPX P A -87 KPX P AE -81 KPX P Aacute -87 KPX P Adieresis -87 KPX P Aring -87 KPX P J -90 KPX P a -57 KPX P aacute -57 KPX P adieresis -57 KPX P ae -29 KPX P aring -57 KPX P comma -161 KPX P e -47 KPX P eacute -47 KPX P hyphen -52 KPX P o -53 KPX P oacute -53 KPX P odieresis -53 KPX P oe -18 KPX P oslash -53 KPX P period -185 KPX R C -32 KPX R Ccedilla -33 KPX R G -31 KPX R O -29 KPX R OE -8 KPX R Oacute -29 KPX R Odieresis -29 KPX R T -35 KPX R U -36 KPX R Udieresis -36 KPX R V -42 KPX R W -21 KPX R Y -36 KPX R a 0 KPX R aacute 0 KPX R adieresis 0 KPX R ae 27 KPX R aring 0 KPX R e -22 KPX R eacute -22 KPX R hyphen -53 KPX R o -23 KPX R oacute -23 KPX R odieresis -23 KPX R oe 15 KPX R u -16 KPX R uacute -16 KPX R udieresis -16 KPX R y -20 KPX S A -28 KPX S AE -28 KPX S Aacute -28 KPX S Adieresis -28 KPX S Aring -28 KPX S T -48 KPX S V -18 KPX S W -23 KPX S Y -39 KPX S t -25 KPX T A -34 KPX T AE -35 KPX T Aacute -34 KPX T Acircumflex -34 KPX T Adieresis -34 KPX T Agrave -34 KPX T Aring -34 KPX T Atilde -34 KPX T C -36 KPX T G -35 KPX T J -88 KPX T O -34 KPX T OE -12 KPX T Oacute -34 KPX T Ocircumflex -34 KPX T Odieresis -34 KPX T Ograve -34 KPX T Oslash -34 KPX T Otilde -34 KPX T S -50 KPX T V 4 KPX T W -1 KPX T Y -17 KPX T a -68 KPX T ae -38 KPX T c -83 KPX T colon -145 KPX T comma -116 KPX T e -83 KPX T g -76 KPX T guillemotleft -129 KPX T guilsinglleft -129 KPX T hyphen -99 KPX T i -51 KPX T j -59 KPX T o -87 KPX T oslash -60 KPX T period -145 KPX T r -37 KPX T s -70 KPX T semicolon -119 KPX T u -92 KPX T v -98 KPX T w -96 KPX T y -108 KPX U A -26 KPX U AE -35 KPX U Aacute -26 KPX U Acircumflex -26 KPX U Adieresis -26 KPX U Aring -26 KPX U Atilde -26 KPX U comma -80 KPX U m 3 KPX U n -22 KPX U p -5 KPX U period -105 KPX U r -47 KPX Uacute A -26 KPX Uacute comma -80 KPX Uacute m 3 KPX Uacute n -22 KPX Uacute p -5 KPX Uacute period -105 KPX Uacute r -47 KPX Ucircumflex A -26 KPX Udieresis A -26 KPX Udieresis b 17 KPX Udieresis comma -80 KPX Udieresis m 3 KPX Udieresis n -22 KPX Udieresis p -5 KPX Udieresis period -105 KPX Udieresis r -47 KPX Ugrave A -26 KPX V A -10 KPX V AE -19 KPX V Aacute -10 KPX V Acircumflex -10 KPX V Adieresis -10 KPX V Agrave -10 KPX V Aring -10 KPX V Atilde -10 KPX V C -39 KPX V G -38 KPX V O -37 KPX V Oacute -37 KPX V Ocircumflex -37 KPX V Odieresis -37 KPX V Ograve -37 KPX V Oslash -38 KPX V Otilde -38 KPX V S -41 KPX V T 4 KPX V a -65 KPX V ae -37 KPX V colon -130 KPX V comma -134 KPX V e -56 KPX V g -57 KPX V guillemotleft -83 KPX V guilsinglleft -83 KPX V hyphen -49 KPX V i -65 KPX V o -60 KPX V oslash -57 KPX V period -158 KPX V r -51 KPX V semicolon -121 KPX V u -20 KPX V y -24 KPX W A -16 KPX W AE -21 KPX W Aacute -16 KPX W Acircumflex -16 KPX W Adieresis -16 KPX W Agrave -16 KPX W Aring -16 KPX W Atilde -16 KPX W C -14 KPX W G -12 KPX W O -10 KPX W Oacute -10 KPX W Ocircumflex -10 KPX W Odieresis -10 KPX W Ograve -10 KPX W Oslash -7 KPX W Otilde -10 KPX W S -29 KPX W T -2 KPX W a -24 KPX W ae 6 KPX W colon -93 KPX W comma -71 KPX W e -10 KPX W g -11 KPX W guillemotleft -38 KPX W guilsinglleft -38 KPX W hyphen -7 KPX W i -48 KPX W o -14 KPX W oslash -11 KPX W period -95 KPX W r -34 KPX W semicolon -74 KPX W u -2 KPX W y -6 KPX X C -52 KPX X O -48 KPX X Odieresis -48 KPX X Q -48 KPX X a -14 KPX X e -36 KPX X hyphen -81 KPX X o -38 KPX X u -39 KPX X y -57 KPX Y A -31 KPX Y AE -34 KPX Y Aacute -31 KPX Y Acircumflex -31 KPX Y Adieresis -31 KPX Y Agrave -31 KPX Y Aring -31 KPX Y Atilde -31 KPX Y C -60 KPX Y G -60 KPX Y O -59 KPX Y Oacute -59 KPX Y Ocircumflex -59 KPX Y Odieresis -59 KPX Y Ograve -59 KPX Y Oslash -59 KPX Y Otilde -59 KPX Y S -62 KPX Y T -17 KPX Y a -67 KPX Y ae -40 KPX Y colon -145 KPX Y comma -116 KPX Y e -81 KPX Y g -84 KPX Y guillemotleft -119 KPX Y guilsinglleft -119 KPX Y hyphen -96 KPX Y i -63 KPX Y o -86 KPX Y oslash -59 KPX Y p -39 KPX Y period -144 KPX Y semicolon -119 KPX Y u -50 KPX Y v -44 KPX Z v -54 KPX Z y -64 KPX a j -93 KPX a quoteright -60 KPX a v -33 KPX a w -23 KPX a y -44 KPX aacute v -33 KPX aacute w -23 KPX aacute y -44 KPX adieresis v -33 KPX adieresis w -23 KPX adieresis y -44 KPX ae v 16 KPX ae w 16 KPX ae y 5 KPX agrave v -33 KPX agrave w -23 KPX agrave y -44 KPX aring v -33 KPX aring w -23 KPX aring y -44 KPX b v -17 KPX b w 0 KPX b y -28 KPX c h -6 KPX c k -12 KPX comma one -148 KPX comma quotedblright -123 KPX comma quoteright -142 KPX e quoteright -43 KPX e t -34 KPX e v -28 KPX e w -20 KPX e x -5 KPX e y -39 KPX eacute v -28 KPX eacute w -20 KPX eacute y -39 KPX ecircumflex v -28 KPX ecircumflex w -20 KPX ecircumflex y -39 KPX eight four -65 KPX eight one -85 KPX eight seven -77 KPX f a -44 KPX f aacute -44 KPX f adieresis -26 KPX f ae -17 KPX f aring -44 KPX f e -58 KPX f eacute -58 KPX f f -46 KPX f i -40 KPX f j -63 KPX f l -31 KPX f o -65 KPX f oacute -65 KPX f odieresis -31 KPX f oe -23 KPX f oslash -36 KPX f quoteright -62 KPX f s -46 KPX f t -10 KPX five four -56 KPX five one -90 KPX five seven -78 KPX four four -68 KPX four one -73 KPX four seven -99 KPX g a -14 KPX g adieresis -14 KPX g ae 13 KPX g aring -14 KPX g e -7 KPX g eacute -7 KPX g l -37 KPX g oacute -12 KPX g odieresis -12 KPX g r -4 KPX guillemotright A -50 KPX guillemotright AE -46 KPX guillemotright Aacute -50 KPX guillemotright Adieresis -50 KPX guillemotright Aring -50 KPX guillemotright T -128 KPX guillemotright V -80 KPX guillemotright W -37 KPX guillemotright Y -119 KPX guilsinglright A -50 KPX guilsinglright AE -46 KPX guilsinglright Aacute -50 KPX guilsinglright Adieresis -50 KPX guilsinglright Aring -50 KPX guilsinglright T -128 KPX guilsinglright V -80 KPX guilsinglright W -37 KPX guilsinglright Y -119 KPX h quoteright -52 KPX h y -37 KPX hyphen A -29 KPX hyphen AE -23 KPX hyphen Aacute -29 KPX hyphen Adieresis -29 KPX hyphen Aring -29 KPX hyphen T -98 KPX hyphen V -44 KPX hyphen W -4 KPX hyphen Y -95 KPX i T -64 KPX i j -146 KPX k a -12 KPX k aacute -12 KPX k adieresis -12 KPX k ae 15 KPX k aring -12 KPX k comma -60 KPX k e -34 KPX k eacute -34 KPX k g -43 KPX k hyphen -104 KPX k o -35 KPX k oacute -35 KPX k odieresis -35 KPX k period -89 KPX k s -14 KPX k u -7 KPX k udieresis -7 KPX l v -86 KPX l y -96 KPX m p 19 KPX m v 7 KPX m w 13 KPX m y -3 KPX n T -48 KPX n p -8 KPX n quoteright -50 KPX n v -25 KPX n w -14 KPX n y -36 KPX nine four -58 KPX nine one -84 KPX nine seven -75 KPX o T -89 KPX o quoteright -41 KPX o t -24 KPX o v -25 KPX o w -7 KPX o x -28 KPX o y -36 KPX oacute v -25 KPX oacute w -7 KPX oacute y -36 KPX ocircumflex t -24 KPX odieresis t -24 KPX odieresis v -25 KPX odieresis w -7 KPX odieresis x -28 KPX odieresis y -36 KPX ograve v -25 KPX ograve w -7 KPX ograve y -36 KPX one comma -99 KPX one eight -94 KPX one five -76 KPX one four -127 KPX one nine -81 KPX one one -69 KPX one period -128 KPX one seven -147 KPX one six -119 KPX one three -69 KPX one two -54 KPX one zero -102 KPX p t -20 KPX p y -25 KPX period one -125 KPX period quotedblright -114 KPX period quoteright -133 KPX q c -4 KPX q u 37 KPX quotedblbase A -6 KPX quotedblbase AE -6 KPX quotedblbase T -82 KPX quotedblbase V -85 KPX quotedblbase W -24 KPX quotedblbase Y -83 KPX quotedblleft A -66 KPX quotedblleft AE -57 KPX quotedblleft Aacute -66 KPX quotedblleft Adieresis -66 KPX quotedblleft Aring -66 KPX quotedblleft T -46 KPX quotedblleft V -18 KPX quotedblleft W -8 KPX quotedblleft Y -46 KPX quotedblright A -67 KPX quotedblright AE -76 KPX quotedblright Aacute -66 KPX quotedblright Adieresis -66 KPX quotedblright Aring -66 KPX quotedblright T -53 KPX quotedblright V -22 KPX quotedblright W -26 KPX quotedblright Y -43 KPX quoteleft A -87 KPX quoteleft AE -78 KPX quoteleft Aacute -87 KPX quoteleft Adieresis -87 KPX quoteleft Aring -87 KPX quoteleft T -67 KPX quoteleft V -39 KPX quoteleft W -29 KPX quoteleft Y -67 KPX quoteright A -145 KPX quoteright AE -154 KPX quoteright Aacute -145 KPX quoteright Adieresis -145 KPX quoteright Aring -145 KPX quoteright comma -201 KPX quoteright d -129 KPX quoteright o -135 KPX quoteright period -224 KPX quoteright r -150 KPX quoteright s -144 KPX quoteright t -118 KPX quoteright v -112 KPX quoteright w -108 KPX quoteright y -122 KPX r a -26 KPX r aacute -26 KPX r acircumflex -26 KPX r adieresis -26 KPX r ae 1 KPX r agrave -26 KPX r aring -26 KPX r c -26 KPX r ccedilla -34 KPX r colon -86 KPX r comma -104 KPX r d -18 KPX r e -17 KPX r eacute -17 KPX r ecircumflex -17 KPX r egrave -17 KPX r f -24 KPX r g -15 KPX r h -24 KPX r hyphen -125 KPX r i -34 KPX r j -42 KPX r k -34 KPX r l -51 KPX r m 27 KPX r n 0 KPX r o -24 KPX r oacute -24 KPX r ocircumflex -24 KPX r odieresis -24 KPX r oe 13 KPX r ograve -24 KPX r oslash -24 KPX r p 21 KPX r period -133 KPX r q -16 KPX r quoteright -44 KPX r r -20 KPX r s -29 KPX r semicolon -75 KPX r t 11 KPX r u 11 KPX r v 17 KPX r w 17 KPX r x -4 KPX r y 6 KPX r z -23 KPX s quoteright -51 KPX s t -17 KPX seven colon -154 KPX seven comma -146 KPX seven eight -86 KPX seven five -91 KPX seven four -116 KPX seven one -74 KPX seven period -169 KPX seven seven -69 KPX seven six -104 KPX seven three -79 KPX seven two -76 KPX six four -52 KPX six one -68 KPX six seven -55 KPX t S -40 KPX t a -25 KPX t aacute -25 KPX t adieresis -25 KPX t ae 2 KPX t aring -25 KPX t colon -107 KPX t e -43 KPX t eacute -43 KPX t h -8 KPX t o -45 KPX t oacute -45 KPX t odieresis -45 KPX t quoteright -100 KPX t semicolon -86 KPX three four -58 KPX three one -82 KPX three seven -75 KPX two four -97 KPX two one -73 KPX two seven -79 KPX u quoteright -43 KPX v a -9 KPX v aacute -9 KPX v acircumflex -9 KPX v adieresis -9 KPX v ae 17 KPX v agrave -9 KPX v aring -9 KPX v atilde -9 KPX v c -22 KPX v colon -75 KPX v comma -118 KPX v e -17 KPX v eacute -17 KPX v ecircumflex -17 KPX v egrave -17 KPX v g -14 KPX v hyphen -30 KPX v l -87 KPX v o -23 KPX v oacute -23 KPX v odieresis -23 KPX v ograve -23 KPX v oslash -23 KPX v period -143 KPX v s -22 KPX v semicolon -66 KPX w a -9 KPX w aacute -9 KPX w acircumflex -9 KPX w adieresis -9 KPX w ae 17 KPX w agrave -9 KPX w aring -9 KPX w atilde -9 KPX w c -12 KPX w colon -75 KPX w comma -75 KPX w e -4 KPX w eacute -4 KPX w ecircumflex -4 KPX w egrave -4 KPX w g -6 KPX w hyphen -4 KPX w l -53 KPX w o -9 KPX w oacute -9 KPX w odieresis -9 KPX w ograve -9 KPX w oslash -6 KPX w period -99 KPX w s -22 KPX w semicolon -66 KPX x a -8 KPX x c -35 KPX x e -30 KPX x eacute -30 KPX x o -31 KPX x q -33 KPX y a -20 KPX y aacute -20 KPX y acircumflex -20 KPX y adieresis -20 KPX y ae 6 KPX y agrave -20 KPX y aring -20 KPX y atilde -20 KPX y c -33 KPX y colon -86 KPX y comma -122 KPX y e -28 KPX y eacute -28 KPX y ecircumflex -28 KPX y egrave -28 KPX y g -25 KPX y hyphen -29 KPX y l -98 KPX y o -34 KPX y oacute -34 KPX y odieresis -34 KPX y ograve -34 KPX y oslash -34 KPX y period -148 KPX y s -33 KPX y semicolon -77 KPX zero four -64 KPX zero one -91 KPX zero seven -82 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Serif-BoldOblique.afm0100664000212600000240000017056110330505373017020 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Serif-BoldOblique FullName Serif Bold Oblique FamilyName Serif Weight Bold Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle -11 IsFixedPitch false UnderlinePosition -217 UnderlineThickness 240 Version 1.15 EncodingScheme ISO10646-1 FontBBox -260 -505 1333 1057 CapHeight 729 XHeight 519 Ascender 759 Descender -208 StartCharMetrics 780 C 0 ; WX 600 ; N .notdef ; B -36 -177 636 706 ; C 32 ; WX 348 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 438 ; N exclam ; B 70 -15 384 730 ; C 34 ; WX 520 ; N quotedbl ; B 68 458 453 730 ; C 35 ; WX 837 ; N numbersign ; B 34 0 804 718 ; C 36 ; WX 695 ; N dollar ; B 41 -146 632 762 ; C 37 ; WX 950 ; N percent ; B 52 -15 897 743 ; C 38 ; WX 902 ; N ampersand ; B 7 -15 893 743 ; C 39 ; WX 306 ; N quotesingle ; B 68 458 238 730 ; C 40 ; WX 473 ; N parenleft ; B 82 -156 510 760 ; C 41 ; WX 473 ; N parenright ; B -39 -156 390 760 ; C 42 ; WX 522 ; N asterisk ; B 5 277 517 743 ; C 43 ; WX 837 ; N plus ; B 95 0 743 627 ; C 44 ; WX 348 ; N comma ; B -5 -166 283 156 ; C 45 ; WX 415 ; N hyphen ; B 41 202 374 334 ; C 46 ; WX 348 ; N period ; B 79 -15 269 172 ; C 47 ; WX 365 ; N slash ; B -80 -93 446 730 ; C 48 ; WX 695 ; N zero ; B 33 -15 663 743 ; C 49 ; WX 695 ; N one ; B 65 0 536 743 ; C 50 ; WX 695 ; N two ; B -6 0 639 743 ; C 51 ; WX 695 ; N three ; B 3 -15 644 743 ; C 52 ; WX 695 ; N four ; B 6 0 633 743 ; C 53 ; WX 695 ; N five ; B 17 -15 637 730 ; C 54 ; WX 695 ; N six ; B 46 -15 672 743 ; C 55 ; WX 695 ; N seven ; B 103 0 684 730 ; C 56 ; WX 695 ; N eight ; B 14 -15 659 743 ; C 57 ; WX 695 ; N nine ; B 23 -15 650 743 ; C 58 ; WX 369 ; N colon ; B 58 -15 310 491 ; C 59 ; WX 369 ; N semicolon ; B -24 -162 324 491 ; C 60 ; WX 837 ; N less ; B 95 32 787 596 ; C 61 ; WX 837 ; N equal ; B 73 146 765 480 ; C 62 ; WX 837 ; N greater ; B 51 32 743 596 ; C 63 ; WX 585 ; N question ; B 102 -15 580 743 ; C 64 ; WX 1000 ; N at ; B 56 -174 950 704 ; C 65 ; WX 775 ; N A ; B -79 0 728 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 845 ; N B ; B -24 0 786 730 ; C 67 ; WX 795 ; N C ; B 32 -15 787 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 867 ; N D ; B -24 0 836 730 ; L uni030C Dcaron ; C 69 ; WX 762 ; N E ; B -24 0 773 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 709 ; N F ; B -24 0 768 730 ; C 71 ; WX 854 ; N G ; B 32 -15 812 743 ; L uni0306 Gbreve ; C 72 ; WX 944 ; N H ; B -24 0 971 730 ; C 73 ; WX 467 ; N I ; B -24 0 493 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 473 ; N J ; B -158 -209 527 730 ; C 75 ; WX 869 ; N K ; B -24 0 902 730 ; C 76 ; WX 703 ; N L ; B -24 0 646 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 1106 ; N M ; B -29 0 1131 730 ; C 78 ; WX 914 ; N N ; B -27 0 945 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 871 ; N O ; B 32 -15 839 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 751 ; N P ; B -24 0 762 730 ; C 81 ; WX 871 ; N Q ; B 48 -181 855 743 ; C 82 ; WX 831 ; N R ; B -24 0 778 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 722 ; N S ; B 13 -15 682 743 ; L uni030C Scaron ; C 84 ; WX 744 ; N T ; B 46 0 805 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 872 ; N U ; B 94 -15 923 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 775 ; N V ; B 53 0 861 730 ; C 87 ; WX 1123 ; N W ; B 50 0 1206 730 ; C 88 ; WX 775 ; N X ; B -53 0 808 730 ; C 89 ; WX 713 ; N Y ; B 50 0 794 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 729 ; N Z ; B -34 0 760 730 ; L uni030C Zcaron ; C 91 ; WX 473 ; N bracketleft ; B 38 -132 489 760 ; C 92 ; WX 365 ; N backslash ; B 79 -93 286 730 ; C 93 ; WX 473 ; N bracketright ; B -16 -132 435 760 ; C 94 ; WX 837 ; N asciicircum ; B 74 457 711 730 ; C 95 ; WX 500 ; N underscore ; B -10 -236 510 -143 ; C 96 ; WX 500 ; N grave ; B 128 616 355 800 ; C 97 ; WX 647 ; N a ; B 15 -15 587 534 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 699 ; N b ; B -50 -15 646 760 ; C 99 ; WX 608 ; N c ; B 33 -15 593 534 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 699 ; N d ; B 10 -15 678 760 ; L uni030C dcaron ; C 101 ; WX 636 ; N e ; B 33 -15 594 534 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 430 ; N f ; B -40 0 555 760 ; L l fl ; L i fi ; C 103 ; WX 699 ; N g ; B 22 -223 747 534 ; L uni0306 gbreve ; C 104 ; WX 727 ; N h ; B -40 0 642 760 ; C 105 ; WX 379 ; N i ; B -40 0 337 760 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 361 ; N j ; B -166 -223 354 760 ; C 107 ; WX 692 ; N k ; B -40 0 693 760 ; C 108 ; WX 379 ; N l ; B -40 0 355 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 1058 ; N m ; B -18 0 995 534 ; C 110 ; WX 727 ; N n ; B -18 0 664 534 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 666 ; N o ; B 34 -15 635 534 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 699 ; N p ; B -50 -209 687 534 ; C 113 ; WX 699 ; N q ; B 51 -209 746 534 ; C 114 ; WX 526 ; N r ; B -18 0 588 534 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 562 ; N s ; B -1 -15 543 534 ; L uni030C scaron ; C 116 ; WX 461 ; N t ; B 48 -15 453 681 ; L uni030C tcaron ; C 117 ; WX 727 ; N u ; B 63 -15 671 520 ; L uni030C uni01D4 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 581 ; N v ; B 20 0 657 520 ; C 119 ; WX 860 ; N w ; B 30 0 932 520 ; C 120 ; WX 596 ; N x ; B -51 0 632 520 ; C 121 ; WX 581 ; N y ; B -20 -223 678 520 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 567 ; N z ; B -16 0 585 520 ; L uni030C zcaron ; C 123 ; WX 643 ; N braceleft ; B 78 -164 643 760 ; C 124 ; WX 363 ; N bar ; B 31 -236 332 765 ; C 125 ; WX 643 ; N braceright ; B 1 -164 565 760 ; C 126 ; WX 837 ; N asciitilde ; B 88 221 750 406 ; C 160 ; WX 695 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 438 ; N exclamdown ; B 55 0 368 743 ; C 162 ; WX 695 ; N cent ; B 71 -146 631 663 ; C 163 ; WX 695 ; N sterling ; B -1 0 678 743 ; C 164 ; WX 636 ; N currency ; B -4 29 642 597 ; C 165 ; WX 695 ; N yen ; B 28 0 736 730 ; C 166 ; WX 363 ; N brokenbar ; B 44 -171 319 700 ; C 167 ; WX 522 ; N section ; B -1 -96 516 743 ; C 168 ; WX 500 ; N dieresis ; B 162 645 528 789 ; C 169 ; WX 1000 ; N copyright ; B 130 0 870 726 ; C 170 ; WX 486 ; N ordfeminine ; B 6 246 454 743 ; C 171 ; WX 625 ; N guillemotleft ; B 69 63 576 522 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 441 ; C 173 ; WX 415 ; N sfthyphen ; B 41 202 374 334 ; C 174 ; WX 1000 ; N registered ; B 130 0 870 726 ; C 175 ; WX 500 ; N macron ; B 155 664 481 756 ; C 176 ; WX 500 ; N degree ; B 83 423 416 750 ; C 177 ; WX 837 ; N plusminus ; B 45 0 759 627 ; C 178 ; WX 437 ; N twosuperior ; B 2 333 399 743 ; C 179 ; WX 437 ; N threesuperior ; B 7 326 403 743 ; C 180 ; WX 500 ; N acute ; B 227 616 526 800 ; C 181 ; WX 731 ; N mu ; B -43 -209 695 520 ; C 182 ; WX 636 ; N paragraph ; B 107 -97 656 730 ; C 183 ; WX 348 ; N periodcentered ; B 79 254 269 440 ; C 184 ; WX 500 ; N cedilla ; B 111 -196 349 0 ; C 185 ; WX 437 ; N onesuperior ; B 39 333 339 743 ; C 186 ; WX 500 ; N ordmasculine ; B 6 246 486 743 ; C 187 ; WX 625 ; N guillemotright ; B 49 63 556 522 ; C 188 ; WX 1042 ; N onequarter ; B 39 -15 936 743 ; C 189 ; WX 1042 ; N onehalf ; B 39 -15 941 743 ; C 190 ; WX 1042 ; N threequarters ; B 7 -15 936 743 ; C 191 ; WX 585 ; N questiondown ; B 6 -15 484 743 ; C 192 ; WX 775 ; N Agrave ; B -79 0 728 928 ; C 193 ; WX 775 ; N Aacute ; B -79 0 728 928 ; C 194 ; WX 775 ; N Acircumflex ; B -79 0 728 928 ; C 195 ; WX 775 ; N Atilde ; B -79 0 728 930 ; C 196 ; WX 775 ; N Adieresis ; B -79 0 728 939 ; C 197 ; WX 775 ; N Aring ; B -99 0 709 929 ; C 198 ; WX 1034 ; N AE ; B -102 0 1044 730 ; C 199 ; WX 795 ; N Ccedilla ; B 32 -196 787 743 ; C 200 ; WX 762 ; N Egrave ; B -24 0 773 928 ; C 201 ; WX 762 ; N Eacute ; B -24 0 773 928 ; C 202 ; WX 762 ; N Ecircumflex ; B -24 0 773 928 ; C 203 ; WX 762 ; N Edieresis ; B -24 0 773 939 ; C 204 ; WX 467 ; N Igrave ; B -24 0 493 928 ; C 205 ; WX 467 ; N Iacute ; B -24 0 495 928 ; C 206 ; WX 467 ; N Icircumflex ; B -24 0 498 928 ; C 207 ; WX 467 ; N Idieresis ; B -24 0 504 939 ; C 208 ; WX 874 ; N Eth ; B -18 0 842 730 ; C 209 ; WX 914 ; N Ntilde ; B -27 0 945 930 ; C 210 ; WX 871 ; N Ograve ; B 32 -15 839 928 ; C 211 ; WX 871 ; N Oacute ; B 32 -15 839 928 ; C 212 ; WX 871 ; N Ocircumflex ; B 32 -15 839 928 ; C 213 ; WX 871 ; N Otilde ; B 32 -15 839 930 ; C 214 ; WX 871 ; N Odieresis ; B 32 -15 839 939 ; C 215 ; WX 837 ; N multiply ; B 87 22 751 605 ; C 216 ; WX 871 ; N Oslash ; B -37 -39 907 767 ; C 217 ; WX 872 ; N Ugrave ; B 94 -15 923 928 ; C 218 ; WX 872 ; N Uacute ; B 94 -15 923 928 ; C 219 ; WX 872 ; N Ucircumflex ; B 94 -15 923 928 ; C 220 ; WX 872 ; N Udieresis ; B 94 -15 923 939 ; C 221 ; WX 713 ; N Yacute ; B 50 0 794 928 ; C 222 ; WX 756 ; N Thorn ; B -24 0 734 730 ; C 223 ; WX 759 ; N germandbls ; B -39 -15 687 760 ; C 224 ; WX 647 ; N agrave ; B 15 -15 587 800 ; C 225 ; WX 647 ; N aacute ; B 15 -15 587 800 ; C 226 ; WX 647 ; N acircumflex ; B 15 -15 587 800 ; C 227 ; WX 647 ; N atilde ; B 15 -15 587 792 ; C 228 ; WX 647 ; N adieresis ; B 15 -15 587 789 ; C 229 ; WX 647 ; N aring ; B 15 -15 587 889 ; C 230 ; WX 975 ; N ae ; B 15 -15 932 534 ; C 231 ; WX 608 ; N ccedilla ; B 33 -196 593 534 ; C 232 ; WX 636 ; N egrave ; B 33 -15 594 800 ; C 233 ; WX 636 ; N eacute ; B 33 -15 594 800 ; C 234 ; WX 636 ; N ecircumflex ; B 33 -15 594 800 ; C 235 ; WX 636 ; N edieresis ; B 33 -15 596 789 ; C 236 ; WX 379 ; N igrave ; B -17 0 332 800 ; C 237 ; WX 379 ; N iacute ; B -17 0 466 800 ; C 238 ; WX 379 ; N icircumflex ; B -17 0 414 800 ; C 239 ; WX 379 ; N idieresis ; B -17 0 468 789 ; C 240 ; WX 666 ; N eth ; B 10 -15 633 765 ; C 241 ; WX 727 ; N ntilde ; B -18 0 664 792 ; C 242 ; WX 666 ; N ograve ; B 34 -15 635 800 ; C 243 ; WX 666 ; N oacute ; B 34 -15 635 800 ; C 244 ; WX 666 ; N ocircumflex ; B 34 -15 635 800 ; C 245 ; WX 666 ; N otilde ; B 34 -15 635 792 ; C 246 ; WX 666 ; N odieresis ; B 34 -15 635 789 ; C 247 ; WX 837 ; N divide ; B 95 60 743 567 ; C 248 ; WX 666 ; N oslash ; B -27 -50 694 567 ; C 249 ; WX 727 ; N ugrave ; B 63 -15 671 800 ; C 250 ; WX 727 ; N uacute ; B 63 -15 671 800 ; C 251 ; WX 727 ; N ucircumflex ; B 63 -15 671 800 ; C 252 ; WX 727 ; N udieresis ; B 63 -15 671 789 ; C 253 ; WX 581 ; N yacute ; B -20 -223 678 800 ; C 254 ; WX 699 ; N thorn ; B -72 -209 665 760 ; C 255 ; WX 581 ; N ydieresis ; B -20 -223 678 789 ; C -1 ; WX 775 ; N Amacron ; B -79 0 728 915 ; C -1 ; WX 647 ; N amacron ; B 15 -15 587 763 ; C -1 ; WX 775 ; N Abreve ; B -79 0 728 937 ; C -1 ; WX 647 ; N abreve ; B 15 -15 587 776 ; C -1 ; WX 775 ; N Aogonek ; B -79 -196 728 730 ; C -1 ; WX 647 ; N aogonek ; B 15 -196 587 534 ; C -1 ; WX 795 ; N Cacute ; B 32 -15 787 928 ; C -1 ; WX 608 ; N cacute ; B 33 -15 600 800 ; C -1 ; WX 795 ; N Ccircumflex ; B 32 -15 787 928 ; C -1 ; WX 608 ; N ccircumflex ; B 33 -15 593 800 ; C -1 ; WX 795 ; N Cdotaccent ; B 32 -15 787 939 ; C -1 ; WX 608 ; N cdotaccent ; B 33 -15 593 789 ; C -1 ; WX 795 ; N Ccaron ; B 32 -15 787 928 ; C -1 ; WX 608 ; N ccaron ; B 33 -15 594 800 ; C -1 ; WX 867 ; N Dcaron ; B -24 0 836 928 ; C -1 ; WX 699 ; N dcaron ; B 10 -15 928 760 ; C -1 ; WX 874 ; N Dcroat ; B -18 0 842 730 ; C -1 ; WX 699 ; N dcroat ; B 10 -15 742 760 ; C -1 ; WX 762 ; N Emacron ; B -24 0 773 915 ; C -1 ; WX 636 ; N emacron ; B 33 -15 594 763 ; C -1 ; WX 762 ; N Ebreve ; B -24 0 773 928 ; C -1 ; WX 636 ; N ebreve ; B 33 -15 594 776 ; C -1 ; WX 762 ; N Edotaccent ; B -24 0 773 939 ; C -1 ; WX 636 ; N edotaccent ; B 33 -15 594 789 ; C -1 ; WX 762 ; N Eogonek ; B -24 -196 773 730 ; C -1 ; WX 636 ; N eogonek ; B 33 -196 594 534 ; C -1 ; WX 762 ; N Ecaron ; B -24 0 773 931 ; C -1 ; WX 636 ; N ecaron ; B 33 -15 594 800 ; C -1 ; WX 854 ; N Gcircumflex ; B 32 -15 812 928 ; C -1 ; WX 699 ; N gcircumflex ; B 22 -223 747 800 ; C -1 ; WX 854 ; N Gbreve ; B 32 -15 812 928 ; C -1 ; WX 699 ; N gbreve ; B 22 -223 747 776 ; C -1 ; WX 854 ; N Gdotaccent ; B 32 -15 812 939 ; C -1 ; WX 699 ; N gdotaccent ; B 22 -223 747 789 ; C -1 ; WX 854 ; N Gcommaaccent ; B 32 -235 812 743 ; C -1 ; WX 699 ; N gcommaaccent ; B 22 -223 747 754 ; C -1 ; WX 944 ; N Hcircumflex ; B -24 0 971 928 ; C -1 ; WX 727 ; N hcircumflex ; B -40 0 642 928 ; C -1 ; WX 944 ; N Hbar ; B -24 0 971 730 ; C -1 ; WX 727 ; N hbar ; B -40 0 642 760 ; C -1 ; WX 467 ; N Itilde ; B -24 0 521 930 ; C -1 ; WX 379 ; N itilde ; B -17 0 453 792 ; C -1 ; WX 467 ; N Imacron ; B -24 0 497 915 ; C -1 ; WX 379 ; N imacron ; B -17 0 390 764 ; C -1 ; WX 467 ; N Ibreve ; B -24 0 516 928 ; C -1 ; WX 379 ; N ibreve ; B -17 0 444 776 ; C -1 ; WX 467 ; N Iogonek ; B -5 -196 512 730 ; C -1 ; WX 379 ; N iogonek ; B -21 -196 356 760 ; C -1 ; WX 467 ; N Idotaccent ; B -24 0 493 939 ; C -1 ; WX 379 ; N dotlessi ; B -17 0 332 520 ; C -1 ; WX 941 ; N IJ ; B -24 -209 995 730 ; C -1 ; WX 750 ; N ij ; B -40 -223 742 760 ; C -1 ; WX 473 ; N Jcircumflex ; B -158 -209 527 928 ; C -1 ; WX 361 ; N jcircumflex ; B -143 -223 380 800 ; C -1 ; WX 869 ; N Kcommaaccent ; B -24 -221 902 730 ; C -1 ; WX 692 ; N kcommaaccent ; B -40 -221 693 760 ; C -1 ; WX 692 ; N kgreenlandic ; B -17 0 716 518 ; C -1 ; WX 703 ; N Lacute ; B -24 0 646 928 ; C -1 ; WX 379 ; N lacute ; B -40 0 479 928 ; C -1 ; WX 703 ; N Lcommaaccent ; B -24 -221 646 730 ; C -1 ; WX 379 ; N lcommaaccent ; B -40 -221 355 760 ; C -1 ; WX 703 ; N Lcaron ; B -24 0 686 730 ; C -1 ; WX 507 ; N lcaron ; B -40 0 591 760 ; C -1 ; WX 703 ; N Ldot ; B -24 0 712 730 ; C -1 ; WX 556 ; N ldot ; B -40 0 534 760 ; C -1 ; WX 709 ; N Lslash ; B -18 0 653 730 ; C -1 ; WX 384 ; N lslash ; B -38 0 411 760 ; C -1 ; WX 914 ; N Nacute ; B -27 0 945 928 ; C -1 ; WX 727 ; N nacute ; B -18 0 664 777 ; C -1 ; WX 914 ; N Ncommaaccent ; B -27 -221 945 730 ; C -1 ; WX 727 ; N ncommaaccent ; B -18 -221 664 534 ; C -1 ; WX 914 ; N Ncaron ; B -27 0 945 928 ; C -1 ; WX 727 ; N ncaron ; B -18 0 664 800 ; C -1 ; WX 1008 ; N napostrophe ; B 75 0 902 743 ; C -1 ; WX 914 ; N Eng ; B -27 -223 946 730 ; C -1 ; WX 727 ; N eng ; B 3 -223 671 534 ; C -1 ; WX 871 ; N Omacron ; B 32 -15 839 915 ; C -1 ; WX 666 ; N omacron ; B 34 -15 635 763 ; C -1 ; WX 871 ; N Obreve ; B 32 -15 839 928 ; C -1 ; WX 666 ; N obreve ; B 34 -15 635 776 ; C -1 ; WX 871 ; N Ohungarumlaut ; B 32 -15 839 928 ; C -1 ; WX 666 ; N ohungarumlaut ; B 34 -15 652 800 ; C -1 ; WX 1180 ; N OE ; B 32 0 1191 730 ; C -1 ; WX 1027 ; N oe ; B 34 -15 987 534 ; C -1 ; WX 831 ; N Racute ; B -24 0 778 928 ; C -1 ; WX 526 ; N racute ; B -18 0 595 777 ; C -1 ; WX 831 ; N Rcommaaccent ; B -24 -221 778 730 ; C -1 ; WX 526 ; N rcommaaccent ; B -18 -221 588 534 ; C -1 ; WX 831 ; N Rcaron ; B -24 0 778 928 ; C -1 ; WX 526 ; N rcaron ; B -18 0 594 800 ; C -1 ; WX 722 ; N Sacute ; B 13 -15 694 928 ; C -1 ; WX 562 ; N sacute ; B -1 -15 595 777 ; C -1 ; WX 722 ; N Scircumflex ; B 13 -15 682 928 ; C -1 ; WX 562 ; N scircumflex ; B -1 -15 543 800 ; C -1 ; WX 722 ; N Scedilla ; B 13 -196 682 743 ; C -1 ; WX 562 ; N scedilla ; B -1 -196 543 534 ; C -1 ; WX 722 ; N Scaron ; B 13 -15 682 928 ; C -1 ; WX 562 ; N scaron ; B -1 -15 552 800 ; C -1 ; WX 744 ; N Tcommaaccent ; B 46 -196 805 730 ; C -1 ; WX 461 ; N tcommaaccent ; B 48 -196 453 681 ; C -1 ; WX 744 ; N Tcaron ; B 46 0 805 928 ; C -1 ; WX 461 ; N tcaron ; B 48 -15 583 781 ; C -1 ; WX 744 ; N Tbar ; B 46 0 805 730 ; C -1 ; WX 461 ; N tbar ; B 6 -15 453 681 ; C -1 ; WX 872 ; N Utilde ; B 94 -15 923 930 ; C -1 ; WX 727 ; N utilde ; B 63 -15 671 792 ; C -1 ; WX 872 ; N Umacron ; B 94 -15 923 915 ; C -1 ; WX 727 ; N umacron ; B 63 -15 671 763 ; C -1 ; WX 872 ; N Ubreve ; B 94 -15 923 928 ; C -1 ; WX 727 ; N ubreve ; B 63 -15 671 776 ; C -1 ; WX 872 ; N Uring ; B 94 -15 923 1057 ; C -1 ; WX 727 ; N uring ; B 63 -15 671 855 ; C -1 ; WX 872 ; N Uhungarumlaut ; B 94 -15 923 928 ; C -1 ; WX 727 ; N uhungarumlaut ; B 63 -15 671 800 ; C -1 ; WX 872 ; N Uogonek ; B 94 -204 923 730 ; C -1 ; WX 727 ; N uogonek ; B 63 -196 671 520 ; C -1 ; WX 1123 ; N Wcircumflex ; B 50 0 1206 931 ; C -1 ; WX 860 ; N wcircumflex ; B 30 0 932 777 ; C -1 ; WX 713 ; N Ycircumflex ; B 50 0 794 931 ; C -1 ; WX 581 ; N ycircumflex ; B -20 -223 678 777 ; C -1 ; WX 713 ; N Ydieresis ; B 50 0 794 939 ; C -1 ; WX 729 ; N Zacute ; B -34 0 760 928 ; C -1 ; WX 567 ; N zacute ; B -16 0 595 777 ; C -1 ; WX 729 ; N Zdotaccent ; B -34 0 760 952 ; C -1 ; WX 567 ; N zdotaccent ; B -16 0 585 759 ; C -1 ; WX 729 ; N Zcaron ; B -34 0 760 928 ; C -1 ; WX 567 ; N zcaron ; B -16 0 585 800 ; C -1 ; WX 430 ; N longs ; B -40 0 555 760 ; C -1 ; WX 795 ; N uni0186 ; B 11 -15 755 743 ; C -1 ; WX 695 ; N uni0190 ; B 32 -15 683 743 ; C -1 ; WX 695 ; N florin ; B -79 -211 736 743 ; C -1 ; WX 770 ; N uni0194 ; B 74 -92 850 730 ; C -1 ; WX 775 ; N uni01CD ; B -79 0 728 928 ; C -1 ; WX 647 ; N uni01CE ; B 15 -15 587 800 ; C -1 ; WX 467 ; N uni01CF ; B -24 0 526 928 ; C -1 ; WX 379 ; N uni01D0 ; B -17 0 452 800 ; C -1 ; WX 871 ; N uni01D1 ; B 32 -15 839 928 ; C -1 ; WX 666 ; N uni01D2 ; B 34 -15 635 800 ; C -1 ; WX 872 ; N uni01D3 ; B 94 -15 923 928 ; C -1 ; WX 727 ; N uni01D4 ; B 63 -15 671 800 ; C -1 ; WX 727 ; N uni01D6 ; B 63 -15 671 915 ; C -1 ; WX 647 ; N uni01DF ; B 15 -15 587 915 ; C -1 ; WX 1034 ; N uni01E2 ; B -102 0 1044 915 ; C -1 ; WX 975 ; N uni01E3 ; B 15 -15 932 763 ; C -1 ; WX 871 ; N uni01EA ; B 32 -204 839 743 ; C -1 ; WX 666 ; N uni01EB ; B 34 -204 635 534 ; C -1 ; WX 871 ; N uni01EC ; B 32 -204 839 915 ; C -1 ; WX 666 ; N uni01ED ; B 34 -204 635 763 ; C -1 ; WX 722 ; N Scommaaccent ; B 13 -225 682 743 ; C -1 ; WX 562 ; N scommaaccent ; B -1 -225 543 534 ; C -1 ; WX 744 ; N uni021A ; B 46 -225 805 730 ; C -1 ; WX 461 ; N uni021B ; B 48 -225 453 681 ; C -1 ; WX 666 ; N uni022B ; B 34 -15 635 915 ; C -1 ; WX 666 ; N uni022D ; B 34 -15 635 915 ; C -1 ; WX 871 ; N uni022E ; B 32 -15 839 939 ; C -1 ; WX 666 ; N uni022F ; B 34 -15 635 789 ; C -1 ; WX 666 ; N uni0231 ; B 34 -15 635 915 ; C -1 ; WX 713 ; N uni0232 ; B 50 0 794 915 ; C -1 ; WX 581 ; N uni0233 ; B -20 -223 678 763 ; C -1 ; WX 361 ; N dotlessj ; B -143 -223 352 520 ; C -1 ; WX 647 ; N uni0250 ; B 79 -15 651 534 ; C -1 ; WX 699 ; N uni0251 ; B 32 -15 727 534 ; C -1 ; WX 699 ; N uni0252 ; B -10 -15 685 534 ; C -1 ; WX 699 ; N uni0253 ; B -50 -15 646 760 ; C -1 ; WX 608 ; N uni0254 ; B 22 -15 572 534 ; C -1 ; WX 608 ; N uni0255 ; B 40 -113 600 528 ; C -1 ; WX 699 ; N uni0256 ; B 30 -223 713 760 ; C -1 ; WX 729 ; N uni0257 ; B 10 -15 856 760 ; C -1 ; WX 636 ; N uni0258 ; B 33 -15 599 534 ; C -1 ; WX 636 ; N uni0259 ; B 38 -15 599 534 ; C -1 ; WX 907 ; N uni025A ; B 40 -15 922 534 ; C -1 ; WX 561 ; N uni025B ; B 13 -18 556 534 ; C -1 ; WX 561 ; N uni025C ; B 17 -18 567 534 ; C -1 ; WX 907 ; N uni025D ; B 17 -18 922 534 ; C -1 ; WX 719 ; N uni025E ; B 35 -18 703 534 ; C -1 ; WX 386 ; N uni025F ; B -143 -223 352 520 ; C -1 ; WX 699 ; N uni0260 ; B 0 -223 876 760 ; C -1 ; WX 699 ; N uni0261 ; B 24 -223 748 520 ; C -1 ; WX 626 ; N uni0262 ; B 55 -5 596 520 ; C -1 ; WX 711 ; N uni0263 ; B 93 -219 710 520 ; C -1 ; WX 627 ; N uni0264 ; B 71 -38 651 521 ; C -1 ; WX 727 ; N uni0265 ; B 82 -209 690 520 ; C -1 ; WX 727 ; N uni0266 ; B -40 0 642 760 ; C -1 ; WX 727 ; N uni0267 ; B -19 -223 649 760 ; C -1 ; WX 379 ; N uni0268 ; B -40 0 339 760 ; C -1 ; WX 379 ; N uni0269 ; B -40 0 337 760 ; C -1 ; WX 379 ; N uni026A ; B -17 0 406 520 ; C -1 ; WX 408 ; N uni026B ; B -22 0 404 760 ; C -1 ; WX 514 ; N uni026C ; B 35 0 488 760 ; C -1 ; WX 379 ; N uni026D ; B 40 -223 393 760 ; C -1 ; WX 795 ; N uni026E ; B -20 -204 809 760 ; C -1 ; WX 1058 ; N uni026F ; B 63 -15 1076 520 ; C -1 ; WX 1058 ; N uni0270 ; B 82 -209 1095 520 ; C -1 ; WX 1058 ; N uni0271 ; B 3 -223 1003 534 ; C -1 ; WX 727 ; N uni0272 ; B -144 -223 686 534 ; C -1 ; WX 727 ; N uni0273 ; B 3 -223 762 534 ; C -1 ; WX 712 ; N uni0274 ; B 11 0 707 521 ; C -1 ; WX 666 ; N uni0275 ; B 34 -15 635 534 ; C -1 ; WX 1061 ; N uni0276 ; B 57 0 1047 522 ; C -1 ; WX 749 ; N uni0277 ; B 21 -15 697 530 ; C -1 ; WX 666 ; N uni0278 ; B -12 -213 675 760 ; C -1 ; WX 571 ; N uni0279 ; B -22 -15 584 520 ; C -1 ; WX 571 ; N uni027A ; B -45 -15 608 761 ; C -1 ; WX 571 ; N uni027B ; B -2 -223 604 520 ; C -1 ; WX 526 ; N uni027C ; B -38 -208 608 534 ; C -1 ; WX 526 ; N uni027D ; B 62 -223 609 534 ; C -1 ; WX 451 ; N uni027E ; B -18 0 511 534 ; C -1 ; WX 486 ; N uni027F ; B 60 0 422 534 ; C -1 ; WX 800 ; N uni0280 ; B 12 0 703 520 ; C -1 ; WX 800 ; N uni0281 ; B 12 0 796 520 ; C -1 ; WX 562 ; N uni0282 ; B 1 -223 563 534 ; C -1 ; WX 331 ; N uni0283 ; B -167 -224 477 760 ; C -1 ; WX 430 ; N uni0284 ; B -166 -223 576 760 ; C -1 ; WX 540 ; N uni0285 ; B 88 -223 468 528 ; C -1 ; WX 331 ; N uni0286 ; B -141 -223 477 760 ; C -1 ; WX 492 ; N uni0287 ; B 39 -162 443 534 ; C -1 ; WX 461 ; N uni0288 ; B 38 -223 473 681 ; C -1 ; WX 727 ; N uni0289 ; B 30 -15 696 520 ; C -1 ; WX 679 ; N uni028A ; B 33 -4 643 536 ; C -1 ; WX 693 ; N uni028B ; B 73 -2 657 520 ; C -1 ; WX 641 ; N uni028C ; B -17 0 620 520 ; C -1 ; WX 906 ; N uni028D ; B -17 0 885 520 ; C -1 ; WX 635 ; N uni028E ; B -38 0 659 742 ; C -1 ; WX 726 ; N uni028F ; B 101 0 721 521 ; C -1 ; WX 567 ; N uni0290 ; B 6 -223 670 520 ; C -1 ; WX 567 ; N uni0291 ; B -7 -90 594 520 ; C -1 ; WX 567 ; N uni0292 ; B -28 -204 605 520 ; C -1 ; WX 567 ; N uni0293 ; B 60 -204 605 520 ; C -1 ; WX 536 ; N uni0294 ; B 52 0 521 761 ; C -1 ; WX 536 ; N uni0295 ; B 79 0 544 761 ; C -1 ; WX 536 ; N uni0296 ; B 57 0 522 761 ; C -1 ; WX 544 ; N uni0297 ; B 59 -223 566 761 ; C -1 ; WX 719 ; N uni0298 ; B -7 -1 592 531 ; C -1 ; WX 728 ; N uni0299 ; B 11 0 665 522 ; C -1 ; WX 719 ; N uni029A ; B 13 -18 679 534 ; C -1 ; WX 626 ; N uni029B ; B 32 -5 805 760 ; C -1 ; WX 728 ; N uni029C ; B 11 0 724 522 ; C -1 ; WX 383 ; N uni029D ; B -119 -223 376 760 ; C -1 ; WX 740 ; N uni029E ; B 55 -209 788 520 ; C -1 ; WX 645 ; N uni029F ; B 11 0 574 523 ; C -1 ; WX 699 ; N uni02A0 ; B 29 -209 874 760 ; C -1 ; WX 536 ; N uni02A1 ; B 52 0 521 761 ; C -1 ; WX 536 ; N uni02A2 ; B 79 0 544 761 ; C -1 ; WX 1116 ; N uni02A3 ; B 10 -15 1112 760 ; C -1 ; WX 1179 ; N uni02A4 ; B 29 -204 1130 760 ; C -1 ; WX 1116 ; N uni02A5 ; B 18 -90 1119 760 ; C -1 ; WX 910 ; N uni02A6 ; B 48 -15 883 681 ; C -1 ; WX 714 ; N uni02A7 ; B 61 -224 861 760 ; C -1 ; WX 908 ; N uni02A8 ; B 58 -113 902 681 ; C -1 ; WX 1039 ; N uni02A9 ; B -19 -223 1025 760 ; C -1 ; WX 790 ; N uni02AA ; B -39 -15 755 760 ; C -1 ; WX 795 ; N uni02AB ; B -40 0 789 760 ; C -1 ; WX 662 ; N uni02AC ; B 33 0 683 625 ; C -1 ; WX 442 ; N uni02AD ; B -6 119 451 625 ; C -1 ; WX 613 ; N uni02AE ; B -16 -209 667 760 ; C -1 ; WX 717 ; N uni02AF ; B -15 -223 730 760 ; C -1 ; WX 521 ; N uni02B0 ; B 4 461 447 888 ; C -1 ; WX 518 ; N uni02B1 ; B 2 464 445 891 ; C -1 ; WX 313 ; N uni02B2 ; B -8 337 315 888 ; C -1 ; WX 413 ; N uni02B3 ; B 18 464 403 764 ; C -1 ; WX 413 ; N uni02B4 ; B 15 456 400 756 ; C -1 ; WX 480 ; N uni02B5 ; B 27 337 415 753 ; C -1 ; WX 526 ; N uni02B6 ; B 15 461 516 753 ; C -1 ; WX 661 ; N uni02B7 ; B 65 429 651 721 ; C -1 ; WX 484 ; N uni02B8 ; B 46 305 487 721 ; C -1 ; WX 348 ; N uni02BB ; B 41 456 305 743 ; C -1 ; WX 348 ; N afii57929 ; B 41 456 305 743 ; L n napostrophe ; C -1 ; WX 313 ; N uni02C0 ; B 4 462 298 889 ; C -1 ; WX 313 ; N uni02C1 ; B 22 462 311 889 ; C -1 ; WX 500 ; N circumflex ; B 105 616 474 800 ; C -1 ; WX 500 ; N caron ; B 151 616 520 800 ; C -1 ; WX 369 ; N uni02D0 ; B 66 0 303 434 ; C -1 ; WX 369 ; N uni02D1 ; B 121 302 273 434 ; C -1 ; WX 500 ; N breve ; B 166 624 504 776 ; C -1 ; WX 500 ; N dotaccent ; B 253 645 400 789 ; C -1 ; WX 500 ; N ring ; B 186 609 471 889 ; C -1 ; WX 500 ; N ogonek ; B 150 -196 364 0 ; C -1 ; WX 500 ; N tilde ; B 133 638 513 792 ; C -1 ; WX 500 ; N hungarumlaut ; B 145 616 568 800 ; C -1 ; WX 458 ; N uni02E0 ; B 69 340 459 754 ; C -1 ; WX 291 ; N uni02E1 ; B 2 461 246 888 ; C -1 ; WX 394 ; N uni02E2 ; B 19 462 365 770 ; C -1 ; WX 475 ; N uni02E3 ; B 15 462 450 754 ; C -1 ; WX 313 ; N uni02E4 ; B 22 462 311 889 ; C -1 ; WX 602 ; N gravecomb ; B 196 616 423 800 ; C -1 ; WX 602 ; N acutecomb ; B 295 616 594 800 ; C -1 ; WX 602 ; N uni0302 ; B 173 616 542 800 ; C -1 ; WX 602 ; N tildecomb ; B 202 638 582 792 ; C -1 ; WX 602 ; N uni0304 ; B 224 664 550 756 ; C -1 ; WX 602 ; N uni0306 ; B 234 624 573 776 ; C -1 ; WX 602 ; N uni0307 ; B 321 645 468 789 ; C -1 ; WX 602 ; N uni0308 ; B 230 645 596 789 ; C -1 ; WX 602 ; N uni030A ; B 254 609 539 889 ; C -1 ; WX 602 ; N uni030B ; B 213 616 637 800 ; C -1 ; WX 602 ; N uni030C ; B 219 616 588 800 ; C -1 ; WX 348 ; N uni0312 ; B 54 456 258 617 ; C -1 ; WX 727 ; N uni0321 ; B 182 -223 604 140 ; C -1 ; WX 727 ; N uni0322 ; B 40 -223 392 140 ; C -1 ; WX 500 ; N uni0326 ; B 69 -225 273 -63 ; C -1 ; WX 301 ; N uni0374 ; B 54 556 242 800 ; C -1 ; WX 301 ; N uni0375 ; B 169 -209 357 36 ; C -1 ; WX 231 ; N uni037A ; B 47 -213 190 -59 ; C -1 ; WX 369 ; N uni037E ; B -24 -162 324 491 ; C -1 ; WX 500 ; N tonos ; B 227 616 526 800 ; C -1 ; WX 500 ; N dieresistonos ; B 162 645 606 996 ; C -1 ; WX 775 ; N Alphatonos ; B -79 0 728 800 ; C -1 ; WX 348 ; N anoteleia ; B 79 254 269 440 ; C -1 ; WX 946 ; N Epsilontonos ; B 42 0 955 800 ; C -1 ; WX 1135 ; N Etatonos ; B 42 0 1156 800 ; C -1 ; WX 661 ; N Iotatonos ; B 42 0 678 800 ; C -1 ; WX 886 ; N Omicrontonos ; B 42 -15 854 800 ; C -1 ; WX 953 ; N Upsilontonos ; B 42 0 1032 800 ; C -1 ; WX 911 ; N Omegatonos ; B 1 0 882 800 ; C -1 ; WX 483 ; N iotadieresistonos ; B 74 -10 546 996 ; C -1 ; WX 775 ; N Alpha ; B -79 0 728 730 ; C -1 ; WX 845 ; N Beta ; B -24 0 786 730 ; C -1 ; WX 709 ; N Gamma ; B -24 0 768 730 ; C -1 ; WX 775 ; N uni0394 ; B -42 0 671 730 ; C -1 ; WX 762 ; N Epsilon ; B -24 0 773 730 ; C -1 ; WX 729 ; N Zeta ; B -34 0 760 730 ; C -1 ; WX 944 ; N Eta ; B -24 0 971 730 ; C -1 ; WX 871 ; N Theta ; B 32 -15 839 743 ; C -1 ; WX 467 ; N Iota ; B -24 0 493 730 ; C -1 ; WX 869 ; N Kappa ; B -24 0 902 730 ; C -1 ; WX 775 ; N Lambda ; B -79 0 728 730 ; C -1 ; WX 1106 ; N Mu ; B -29 0 1131 730 ; C -1 ; WX 914 ; N Nu ; B -27 0 945 730 ; C -1 ; WX 703 ; N Xi ; B -16 0 713 730 ; C -1 ; WX 871 ; N Omicron ; B 32 -15 839 743 ; C -1 ; WX 944 ; N Pi ; B -24 0 971 730 ; C -1 ; WX 751 ; N Rho ; B -24 0 762 730 ; C -1 ; WX 707 ; N Sigma ; B -31 0 711 730 ; C -1 ; WX 744 ; N Tau ; B 46 0 805 730 ; C -1 ; WX 713 ; N Upsilon ; B 50 0 794 730 ; C -1 ; WX 871 ; N Phi ; B 37 0 833 730 ; C -1 ; WX 775 ; N Chi ; B -53 0 808 730 ; C -1 ; WX 913 ; N Psi ; B 66 0 978 730 ; C -1 ; WX 890 ; N Omega ; B -23 0 859 743 ; C -1 ; WX 467 ; N Iotadieresis ; B -24 0 510 939 ; C -1 ; WX 713 ; N Upsilondieresis ; B 50 0 794 939 ; C -1 ; WX 699 ; N alphatonos ; B 32 -15 727 800 ; C -1 ; WX 607 ; N epsilontonos ; B 22 -13 606 800 ; C -1 ; WX 727 ; N etatonos ; B 76 -209 670 800 ; C -1 ; WX 483 ; N iotatonos ; B 74 -10 478 800 ; C -1 ; WX 693 ; N upsilondieresistonos ; B 73 -2 702 996 ; C -1 ; WX 699 ; N alpha ; B 32 -15 727 534 ; C -1 ; WX 664 ; N beta ; B -32 -209 635 770 ; C -1 ; WX 678 ; N gamma ; B 83 -209 720 520 ; C -1 ; WX 666 ; N delta ; B 11 -15 630 766 ; C -1 ; WX 607 ; N epsilon ; B 22 -13 588 527 ; C -1 ; WX 592 ; N zeta ; B 30 -209 637 760 ; C -1 ; WX 727 ; N eta ; B 76 -209 670 534 ; C -1 ; WX 666 ; N theta ; B 27 -17 641 772 ; C -1 ; WX 483 ; N iota ; B 74 -10 413 520 ; C -1 ; WX 749 ; N kappa ; B -17 0 716 520 ; C -1 ; WX 701 ; N lambda ; B -37 0 600 739 ; C -1 ; WX 731 ; N uni03BC ; B 31 -209 695 520 ; C -1 ; WX 693 ; N nu ; B 57 0 673 520 ; C -1 ; WX 592 ; N xi ; B 23 -209 637 760 ; C -1 ; WX 666 ; N omicron ; B 34 -15 635 534 ; C -1 ; WX 731 ; N pi ; B -17 0 749 520 ; C -1 ; WX 665 ; N rho ; B -10 -209 652 534 ; C -1 ; WX 608 ; N sigma1 ; B 52 -209 611 534 ; C -1 ; WX 737 ; N sigma ; B 35 -15 738 520 ; C -1 ; WX 672 ; N tau ; B 58 -10 674 520 ; C -1 ; WX 693 ; N upsilon ; B 73 -2 663 520 ; C -1 ; WX 904 ; N phi ; B 61 -209 884 533 ; C -1 ; WX 657 ; N chi ; B -59 -223 707 534 ; C -1 ; WX 941 ; N psi ; B 104 -209 969 520 ; C -1 ; WX 952 ; N omega ; B 35 -2 919 520 ; C -1 ; WX 483 ; N iotadieresis ; B 74 -10 472 789 ; C -1 ; WX 693 ; N upsilondieresis ; B 73 -2 663 789 ; C -1 ; WX 666 ; N omicrontonos ; B 34 -15 635 800 ; C -1 ; WX 693 ; N upsilontonos ; B 73 -2 663 800 ; C -1 ; WX 952 ; N omegatonos ; B 35 -2 919 800 ; C -1 ; WX 762 ; N uni0400 ; B -24 0 773 928 ; C -1 ; WX 762 ; N afii10023 ; B -24 0 773 939 ; C -1 ; WX 901 ; N afii10051 ; B 10 -214 812 730 ; C -1 ; WX 709 ; N afii10052 ; B -24 0 768 928 ; C -1 ; WX 795 ; N afii10053 ; B 32 -15 787 743 ; C -1 ; WX 722 ; N afii10054 ; B 13 -15 682 743 ; C -1 ; WX 467 ; N afii10055 ; B -24 0 493 730 ; C -1 ; WX 467 ; N afii10056 ; B -24 0 546 939 ; C -1 ; WX 473 ; N afii10057 ; B -158 -209 527 730 ; C -1 ; WX 1261 ; N afii10058 ; B -84 -10 1189 730 ; C -1 ; WX 1260 ; N afii10059 ; B -24 0 1188 730 ; C -1 ; WX 962 ; N afii10060 ; B -11 0 850 730 ; C -1 ; WX 869 ; N afii10061 ; B -24 0 902 928 ; C -1 ; WX 944 ; N uni040D ; B -24 0 971 928 ; C -1 ; WX 811 ; N afii10062 ; B 82 0 842 928 ; C -1 ; WX 944 ; N afii10145 ; B -7 -175 988 730 ; C -1 ; WX 775 ; N afii10017 ; B -79 0 728 730 ; C -1 ; WX 854 ; N afii10018 ; B -24 0 826 730 ; C -1 ; WX 845 ; N afii10019 ; B -24 0 786 730 ; C -1 ; WX 709 ; N afii10020 ; B -24 0 768 730 ; C -1 ; WX 944 ; N afii10021 ; B -60 -314 1002 730 ; C -1 ; WX 762 ; N afii10022 ; B -24 0 773 730 ; C -1 ; WX 1317 ; N afii10024 ; B -44 0 1264 730 ; C -1 ; WX 695 ; N afii10025 ; B 3 -15 644 743 ; C -1 ; WX 944 ; N afii10026 ; B -24 0 971 730 ; C -1 ; WX 944 ; N afii10027 ; B -24 0 971 928 ; C -1 ; WX 869 ; N afii10028 ; B -24 0 902 730 ; C -1 ; WX 944 ; N afii10029 ; B -84 -10 972 730 ; C -1 ; WX 1106 ; N afii10030 ; B -29 0 1131 730 ; C -1 ; WX 944 ; N afii10031 ; B -24 0 971 730 ; C -1 ; WX 871 ; N afii10032 ; B 32 -15 839 743 ; C -1 ; WX 944 ; N afii10033 ; B -24 0 971 730 ; C -1 ; WX 751 ; N afii10034 ; B -24 0 762 730 ; C -1 ; WX 795 ; N afii10035 ; B 32 -15 787 743 ; C -1 ; WX 744 ; N afii10036 ; B 46 0 805 730 ; C -1 ; WX 811 ; N afii10037 ; B 82 0 842 730 ; C -1 ; WX 1049 ; N afii10038 ; B 33 -172 1011 889 ; C -1 ; WX 775 ; N afii10039 ; B -53 0 808 730 ; C -1 ; WX 944 ; N afii10040 ; B -7 -175 988 730 ; C -1 ; WX 910 ; N afii10041 ; B 90 0 930 730 ; C -1 ; WX 1117 ; N afii10042 ; B -24 0 1134 730 ; C -1 ; WX 1132 ; N afii10043 ; B -7 -175 1151 730 ; C -1 ; WX 880 ; N afii10044 ; B -2 0 800 730 ; C -1 ; WX 1189 ; N afii10045 ; B -24 0 1193 730 ; C -1 ; WX 791 ; N afii10046 ; B -24 0 711 730 ; C -1 ; WX 795 ; N afii10047 ; B 11 -15 755 743 ; C -1 ; WX 1287 ; N afii10048 ; B -24 -15 1238 743 ; C -1 ; WX 831 ; N afii10049 ; B -24 0 908 730 ; C -1 ; WX 647 ; N afii10065 ; B 15 -15 587 534 ; C -1 ; WX 666 ; N afii10066 ; B 12 -15 663 756 ; C -1 ; WX 733 ; N afii10067 ; B 0 0 668 520 ; C -1 ; WX 637 ; N afii10068 ; B -17 0 624 520 ; C -1 ; WX 871 ; N afii10069 ; B -27 -259 847 520 ; C -1 ; WX 636 ; N afii10070 ; B 33 -15 594 534 ; C -1 ; WX 1062 ; N afii10072 ; B -17 0 1026 520 ; C -1 ; WX 607 ; N afii10073 ; B 1 -13 557 527 ; C -1 ; WX 731 ; N afii10074 ; B -17 0 749 520 ; C -1 ; WX 731 ; N afii10075 ; B -17 0 749 776 ; C -1 ; WX 692 ; N afii10076 ; B -17 0 716 520 ; C -1 ; WX 731 ; N afii10077 ; B -109 -13 750 520 ; C -1 ; WX 1063 ; N afii10078 ; B 27 0 1051 520 ; C -1 ; WX 731 ; N afii10079 ; B -17 0 749 520 ; C -1 ; WX 666 ; N afii10080 ; B 34 -15 635 534 ; C -1 ; WX 731 ; N afii10081 ; B -17 0 749 520 ; C -1 ; WX 699 ; N afii10082 ; B -50 -209 687 534 ; C -1 ; WX 608 ; N afii10083 ; B 33 -15 593 534 ; C -1 ; WX 619 ; N afii10084 ; B 55 0 624 520 ; C -1 ; WX 581 ; N afii10085 ; B -20 -223 678 520 ; C -1 ; WX 817 ; N afii10086 ; B 34 -184 780 697 ; C -1 ; WX 596 ; N afii10087 ; B -51 0 632 520 ; C -1 ; WX 731 ; N afii10088 ; B -1 -163 765 520 ; C -1 ; WX 731 ; N afii10089 ; B 73 0 749 520 ; C -1 ; WX 1000 ; N afii10090 ; B -17 0 1000 520 ; C -1 ; WX 1017 ; N afii10091 ; B -1 -163 1016 520 ; C -1 ; WX 690 ; N afii10092 ; B 10 0 625 520 ; C -1 ; WX 996 ; N afii10093 ; B -10 0 1009 520 ; C -1 ; WX 664 ; N afii10094 ; B -2 0 592 520 ; C -1 ; WX 608 ; N afii10095 ; B 22 -15 572 534 ; C -1 ; WX 1025 ; N afii10096 ; B 2 -15 989 534 ; C -1 ; WX 800 ; N afii10097 ; B 12 0 796 520 ; C -1 ; WX 636 ; N uni0450 ; B 33 -15 594 800 ; C -1 ; WX 636 ; N afii10071 ; B 33 -15 596 789 ; C -1 ; WX 703 ; N afii10099 ; B -19 -223 643 760 ; C -1 ; WX 637 ; N afii10100 ; B -17 0 624 800 ; C -1 ; WX 608 ; N afii10101 ; B 33 -15 593 534 ; C -1 ; WX 562 ; N afii10102 ; B -1 -15 543 534 ; C -1 ; WX 379 ; N afii10103 ; B -40 0 337 760 ; C -1 ; WX 379 ; N afii10104 ; B -17 0 468 789 ; C -1 ; WX 361 ; N afii10105 ; B -166 -223 354 760 ; C -1 ; WX 995 ; N afii10106 ; B -109 -13 928 520 ; C -1 ; WX 990 ; N afii10107 ; B -17 0 927 520 ; C -1 ; WX 727 ; N afii10108 ; B -40 0 642 760 ; C -1 ; WX 692 ; N afii10109 ; B -17 0 716 800 ; C -1 ; WX 731 ; N uni045D ; B -17 0 749 800 ; C -1 ; WX 581 ; N afii10110 ; B -20 -223 678 776 ; C -1 ; WX 731 ; N afii10193 ; B -1 -163 765 520 ; C -1 ; WX 709 ; N afii10050 ; B -24 0 796 873 ; C -1 ; WX 637 ; N afii10098 ; B -17 0 653 668 ; C -1 ; WX 709 ; N uni0492 ; B -24 0 768 730 ; C -1 ; WX 637 ; N uni0493 ; B -17 0 624 520 ; C -1 ; WX 869 ; N uni049A ; B -24 -175 902 730 ; C -1 ; WX 692 ; N uni049B ; B -17 -163 716 520 ; C -1 ; WX 775 ; N uni04B2 ; B -53 -175 808 730 ; C -1 ; WX 596 ; N uni04B3 ; B -51 -163 632 520 ; C -1 ; WX 867 ; N uni1E12 ; B -24 -189 836 730 ; C -1 ; WX 699 ; N uni1E13 ; B 10 -257 678 760 ; C -1 ; WX 703 ; N uni1E3C ; B -24 -189 646 730 ; C -1 ; WX 379 ; N uni1E3D ; B -111 -244 355 760 ; C -1 ; WX 914 ; N uni1E44 ; B -27 0 945 945 ; C -1 ; WX 727 ; N uni1E45 ; B -18 0 664 736 ; C -1 ; WX 914 ; N uni1E4A ; B -27 -189 945 730 ; C -1 ; WX 727 ; N uni1E4B ; B -18 -244 664 534 ; C -1 ; WX 744 ; N uni1E70 ; B 46 -189 805 730 ; C -1 ; WX 461 ; N uni1E71 ; B -17 -258 453 681 ; C -1 ; WX 1123 ; N Wgrave ; B 50 0 1206 986 ; C -1 ; WX 860 ; N wgrave ; B 30 0 932 777 ; C -1 ; WX 1123 ; N Wacute ; B 50 0 1206 986 ; C -1 ; WX 860 ; N wacute ; B 30 0 932 777 ; C -1 ; WX 1123 ; N Wdieresis ; B 50 0 1206 945 ; C -1 ; WX 860 ; N wdieresis ; B 30 0 932 736 ; C -1 ; WX 713 ; N Ygrave ; B 50 0 794 986 ; C -1 ; WX 581 ; N ygrave ; B -20 -223 678 777 ; C -1 ; WX 415 ; N uni2010 ; B 41 202 374 334 ; C -1 ; WX 415 ; N uni2011 ; B 41 202 374 334 ; C -1 ; WX 500 ; N figuredash ; B -12 207 512 325 ; C -1 ; WX 500 ; N endash ; B -12 207 512 325 ; C -1 ; WX 1000 ; N emdash ; B -12 207 1012 325 ; C -1 ; WX 1000 ; N afii00208 ; B -12 207 1012 325 ; C -1 ; WX 348 ; N quoteleft ; B 41 456 305 743 ; C -1 ; WX 348 ; N quoteright ; B 32 442 297 730 ; C -1 ; WX 348 ; N quotesinglbase ; B 14 -130 279 156 ; C -1 ; WX 575 ; N quotedblleft ; B 41 456 532 743 ; C -1 ; WX 575 ; N quotedblright ; B 32 442 524 730 ; C -1 ; WX 575 ; N quotedblbase ; B 14 -130 506 156 ; C -1 ; WX 522 ; N dagger ; B 49 -97 538 730 ; C -1 ; WX 522 ; N daggerdbl ; B -15 -97 538 730 ; C -1 ; WX 639 ; N bullet ; B 140 195 499 547 ; C -1 ; WX 1000 ; N ellipsis ; B 79 -15 921 172 ; C -1 ; WX 1384 ; N perthousand ; B 52 -15 1333 743 ; C -1 ; WX 399 ; N guilsinglleft ; B 69 63 351 522 ; C -1 ; WX 399 ; N guilsinglright ; B 49 63 332 522 ; C -1 ; WX 519 ; N uni207F ; B 17 461 460 761 ; C -1 ; WX 695 ; N Euro ; B -25 -15 697 743 ; C -1 ; WX 1000 ; N trademark ; B 126 446 868 730 ; C -1 ; WX 534 ; N partialdiff ; B 5 -13 518 660 ; C -1 ; WX 752 ; N Delta ; B -51 0 664 730 ; C -1 ; WX 841 ; N product ; B -66 -192 905 720 ; C -1 ; WX 752 ; N summation ; B -79 -192 731 720 ; C -1 ; WX 837 ; N minus ; B 95 256 743 370 ; C -1 ; WX 166 ; N fraction ; B -260 -15 427 743 ; C -1 ; WX 348 ; N periodcentered ; B 79 254 269 440 ; C -1 ; WX 657 ; N radical ; B 40 -21 741 828 ; C -1 ; WX 833 ; N infinity ; B 94 97 740 500 ; C -1 ; WX 579 ; N integral ; B -53 -183 632 759 ; C -1 ; WX 837 ; N approxequal ; B 68 119 770 508 ; C -1 ; WX 837 ; N notequal ; B 73 -5 765 631 ; C -1 ; WX 837 ; N lessequal ; B 49 0 789 581 ; C -1 ; WX 837 ; N greaterequal ; B 49 0 757 581 ; C -1 ; WX 834 ; N house ; B 71 0 764 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 441 ; C -1 ; WX 538 ; N uni2311 ; B 2 113 536 647 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 441 ; C -1 ; WX 1007 ; N uni237D ; B 1 -228 1006 86 ; C -1 ; WX 834 ; N uni2423 ; B 27 -228 780 86 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 3 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 727 ; N fi ; B -40 0 661 760 ; C -1 ; WX 727 ; N fl ; B -40 0 702 760 ; C -1 ; WX 1113 ; N uniFFFD ; B 104 -109 1169 957 ; C -1 ; WX 500 ; N dlLtcaron ; B 151 616 357 800 ; C -1 ; WX 500 ; N Dieresis ; B 156 613 522 757 ; C -1 ; WX 500 ; N Acute ; B 224 616 476 746 ; C -1 ; WX 500 ; N Tilde ; B 125 615 501 748 ; C -1 ; WX 500 ; N Grave ; B 165 616 365 746 ; C -1 ; WX 500 ; N Circumflex ; B 110 616 479 746 ; C -1 ; WX 500 ; N Caron ; B 150 616 519 746 ; C -1 ; WX 437 ; N foursuperior ; B 4 333 394 743 ; C -1 ; WX 500 ; N Breve ; B 164 616 497 746 ; C -1 ; WX 500 ; N Dotaccent ; B 244 613 391 757 ; C -1 ; WX 500 ; N Hungarumlaut ; B 165 616 578 746 ; C -1 ; WX 500 ; N Doublegrave ; B -4 616 359 746 ; EndCharMetrics StartKernData StartKernPairs 1100 KPX hyphen Tcaron -165 KPX hyphen Yacute -109 KPX hyphen Ydieresis -109 KPX hyphen Y -109 KPX hyphen X -72 KPX hyphen W -54 KPX hyphen V -72 KPX hyphen T -165 KPX A tcaron -17 KPX A Tcaron -54 KPX A yacute -40 KPX A Yacute -49 KPX A fl -17 KPX A fi -17 KPX A Ydieresis -49 KPX A ydieresis -40 KPX A quoteright -118 KPX A quotedblright -118 KPX A y -40 KPX A w -40 KPX A v -40 KPX A t -17 KPX A f -17 KPX A Y -49 KPX A W -49 KPX A V -72 KPX A T -54 KPX B Ccaron 18 KPX B Cacute 18 KPX B Gbreve 18 KPX B Yacute -17 KPX B Ograve 18 KPX B Ocircumflex 18 KPX B Oacute 18 KPX B Ydieresis -17 KPX B OE 18 KPX B Otilde 18 KPX B Oslash 18 KPX B Odieresis 18 KPX B Ccedilla 18 KPX B Y -17 KPX B O 18 KPX B G 18 KPX B C 18 KPX B hyphen 18 KPX C period -17 KPX C comma -17 KPX D V -17 KPX D period -35 KPX D hyphen 18 KPX D comma -35 KPX E hyphen 18 KPX F udieresis -17 KPX F aring -54 KPX F ae -54 KPX F semicolon -35 KPX F ograve -54 KPX F hyphen -44 KPX F period -100 KPX F uring -17 KPX F otilde -54 KPX F edieresis -54 KPX F ugrave -17 KPX F comma -100 KPX F agrave -54 KPX F Atilde -58 KPX F ecircumflex -54 KPX F racute -17 KPX F egrave -54 KPX F Adieresis -58 KPX F Aacute -58 KPX F ucircumflex -17 KPX F atilde -54 KPX F Acircumflex -58 KPX F oslash -54 KPX F ocircumflex -54 KPX F A -58 KPX F a -54 KPX F adieresis -54 KPX F odieresis -54 KPX F uacute -17 KPX F aacute -54 KPX F rcaron -17 KPX F acircumflex -54 KPX F eacute -54 KPX F ecaron -54 KPX F e -54 KPX F oe -54 KPX F o -54 KPX F r -17 KPX F u -17 KPX F Agrave -58 KPX F colon -35 KPX F oacute -54 KPX G period -35 KPX G hyphen 18 KPX G comma -35 KPX J semicolon -40 KPX J colon -40 KPX J period -77 KPX J comma -40 KPX K uring -21 KPX K Uring -35 KPX K ecaron -21 KPX K Ccaron -26 KPX K Cacute -26 KPX K yacute -44 KPX K Yacute -26 KPX K Ugrave -35 KPX K Ucircumflex -35 KPX K Uacute -35 KPX K Ograve -26 KPX K Ocircumflex -26 KPX K Oacute -26 KPX K Aacute -40 KPX K Acircumflex -40 KPX K Ydieresis -26 KPX K ydieresis -44 KPX K oe -21 KPX K OE -26 KPX K Otilde -26 KPX K Atilde -40 KPX K Agrave -40 KPX K oslash -17 KPX K Oslash -26 KPX K udieresis -21 KPX K ucircumflex -21 KPX K ugrave -21 KPX K uacute -21 KPX K otilde -21 KPX K odieresis -21 KPX K ocircumflex -21 KPX K ograve -21 KPX K oacute -21 KPX K edieresis -21 KPX K ecircumflex -21 KPX K egrave -21 KPX K eacute -21 KPX K Udieresis -35 KPX K Odieresis -26 KPX K Ccedilla -26 KPX K Adieresis -40 KPX K y -44 KPX K u -21 KPX K o -21 KPX K e -21 KPX K Y -26 KPX K W -35 KPX K U -35 KPX K O -26 KPX K C -26 KPX K A -40 KPX K hyphen -72 KPX L Uring -54 KPX L Tcaron -81 KPX L yacute -35 KPX L Yacute -63 KPX L Ugrave -54 KPX L Ucircumflex -54 KPX L Uacute -54 KPX L Ydieresis -63 KPX L ydieresis -35 KPX L quoteright -239 KPX L quoteleft -239 KPX L quotedblright -239 KPX L quotedblleft -239 KPX L Udieresis -54 KPX L y -35 KPX L Y -63 KPX L W -67 KPX L V -118 KPX L U -54 KPX L T -81 KPX N semicolon -35 KPX N colon -35 KPX N period -63 KPX N comma -63 KPX O X -17 KPX O V -17 KPX O period -58 KPX O hyphen 36 KPX O comma -58 KPX P ecaron -26 KPX P Aacute -72 KPX P Acircumflex -72 KPX P quotedblbase -128 KPX P quotesinglbase -128 KPX P oe -26 KPX P Atilde -72 KPX P Agrave -72 KPX P oslash -26 KPX P ae -26 KPX P otilde -26 KPX P odieresis -26 KPX P ocircumflex -26 KPX P ograve -26 KPX P oacute -26 KPX P edieresis -26 KPX P ecircumflex -26 KPX P egrave -26 KPX P eacute -26 KPX P aring -26 KPX P atilde -26 KPX P adieresis -26 KPX P acircumflex -26 KPX P agrave -26 KPX P aacute -26 KPX P Adieresis -72 KPX P o -26 KPX P e -26 KPX P a -26 KPX P A -72 KPX P semicolon -35 KPX P colon -35 KPX P period -165 KPX P hyphen -54 KPX P comma -128 KPX Q period -49 KPX Q hyphen 36 KPX Q comma -49 KPX R Tcaron -17 KPX R yacute -17 KPX R Yacute -30 KPX R Ydieresis -30 KPX R ydieresis -17 KPX R quoteright -35 KPX R quotedblright -35 KPX R oslash 18 KPX R ae 22 KPX R aring 22 KPX R atilde 22 KPX R adieresis 22 KPX R acircumflex 22 KPX R agrave 22 KPX R aacute 22 KPX R y -17 KPX R a 22 KPX R Y -30 KPX R W -21 KPX R V -35 KPX R T -17 KPX S Scedilla -21 KPX S Scaron -21 KPX S S -21 KPX S period -35 KPX S hyphen 36 KPX S comma -35 KPX T udieresis -91 KPX T aring -95 KPX T ae -77 KPX T semicolon -35 KPX T ograve -114 KPX T ydieresis -109 KPX T hyphen -165 KPX T quotedblbase -72 KPX T uring -91 KPX T otilde -114 KPX T edieresis -114 KPX T ugrave -91 KPX T comma -109 KPX T agrave -95 KPX T Atilde -54 KPX T ecircumflex -114 KPX T ccedilla -114 KPX T racute -72 KPX T egrave -114 KPX T Adieresis -54 KPX T Aacute -54 KPX T ccaron -114 KPX T rcaron -72 KPX T eacute -114 KPX T ucircumflex -91 KPX T yacute -109 KPX T quotesinglbase -72 KPX T atilde -95 KPX T Acircumflex -54 KPX T oslash -77 KPX T ocircumflex -114 KPX T scaron -91 KPX T A -54 KPX T ecaron -114 KPX T guillemotright -72 KPX T scedilla -91 KPX T adieresis -95 KPX T w -109 KPX T odieresis -114 KPX T uacute -91 KPX T guilsinglright -72 KPX T cacute -114 KPX T aacute -95 KPX T period -128 KPX T T -35 KPX T acircumflex -95 KPX T e -114 KPX T Tcaron -35 KPX T a -95 KPX T c -114 KPX T guillemotleft -72 KPX T oe -77 KPX T guilsinglleft -72 KPX T o -114 KPX T s -91 KPX T r -72 KPX T u -91 KPX T Agrave -54 KPX T y -109 KPX T colon -35 KPX T oacute -114 KPX U Aacute -30 KPX U Acircumflex -30 KPX U Atilde -30 KPX U Agrave -30 KPX U Adieresis -30 KPX U A -30 KPX U semicolon -35 KPX U colon -35 KPX U period -91 KPX U hyphen -17 KPX U comma -91 KPX V uring -63 KPX V ecaron -91 KPX V yacute -40 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -77 KPX V Acircumflex -77 KPX V quotedblbase -128 KPX V quotesinglbase -128 KPX V ydieresis -40 KPX V quoteright 18 KPX V quotedblright 18 KPX V oe -91 KPX V OE -17 KPX V Otilde -17 KPX V Atilde -77 KPX V Agrave -77 KPX V oslash -91 KPX V ae -91 KPX V Oslash -17 KPX V udieresis -63 KPX V ucircumflex -63 KPX V ugrave -63 KPX V uacute -63 KPX V otilde -91 KPX V odieresis -91 KPX V ocircumflex -91 KPX V ograve -91 KPX V oacute -91 KPX V edieresis -91 KPX V ecircumflex -91 KPX V egrave -91 KPX V eacute -91 KPX V aring -91 KPX V atilde -91 KPX V adieresis -91 KPX V acircumflex -91 KPX V agrave -91 KPX V aacute -91 KPX V Odieresis -17 KPX V Adieresis -77 KPX V y -40 KPX V u -63 KPX V o -91 KPX V i -17 KPX V e -91 KPX V a -91 KPX V O -17 KPX V A -77 KPX V semicolon -100 KPX V colon -100 KPX V period -174 KPX V hyphen -72 KPX V comma -174 KPX W udieresis -40 KPX W aring -86 KPX W ae -67 KPX W semicolon -67 KPX W ograve -81 KPX W hyphen -54 KPX W quotedblbase -109 KPX W uring -40 KPX W otilde -81 KPX W edieresis -81 KPX W ugrave -40 KPX W comma -155 KPX W agrave -86 KPX W Atilde -63 KPX W ecircumflex -81 KPX W racute -44 KPX W quotedblright 18 KPX W egrave -81 KPX W Adieresis -63 KPX W Aacute -63 KPX W quoteright 18 KPX W ucircumflex -40 KPX W yacute -21 KPX W quotesinglbase -109 KPX W atilde -86 KPX W Acircumflex -63 KPX W oslash -81 KPX W ocircumflex -81 KPX W A -63 KPX W a -86 KPX W adieresis -86 KPX W odieresis -81 KPX W uacute -40 KPX W aacute -86 KPX W rcaron -44 KPX W period -155 KPX W acircumflex -86 KPX W eacute -81 KPX W ecaron -81 KPX W e -81 KPX W i -17 KPX W oe -81 KPX W ydieresis -21 KPX W o -81 KPX W r -44 KPX W u -40 KPX W Agrave -63 KPX W y -21 KPX W colon -67 KPX W oacute -81 KPX X Ccaron -17 KPX X Cacute -17 KPX X Ograve -17 KPX X Ocircumflex -17 KPX X Oacute -17 KPX X Aacute -35 KPX X Acircumflex -35 KPX X OE -17 KPX X Otilde -17 KPX X Atilde -35 KPX X Agrave -35 KPX X Oslash -17 KPX X Odieresis -17 KPX X Ccedilla -17 KPX X Adieresis -35 KPX X O -17 KPX X C -17 KPX X A -35 KPX X hyphen -35 KPX Y uring -86 KPX Y ecaron -86 KPX Y Ccaron -17 KPX Y Cacute -17 KPX Y Aacute -63 KPX Y Acircumflex -63 KPX Y oe -86 KPX Y Atilde -63 KPX Y Agrave -63 KPX Y oslash -86 KPX Y ae -77 KPX Y udieresis -86 KPX Y ucircumflex -86 KPX Y ugrave -86 KPX Y uacute -86 KPX Y otilde -86 KPX Y odieresis -86 KPX Y ocircumflex -86 KPX Y ograve -86 KPX Y oacute -86 KPX Y edieresis -86 KPX Y ecircumflex -86 KPX Y egrave -86 KPX Y eacute -86 KPX Y aring -77 KPX Y atilde -77 KPX Y adieresis -77 KPX Y acircumflex -77 KPX Y agrave -77 KPX Y aacute -77 KPX Y Ccedilla -17 KPX Y Adieresis -63 KPX Y u -86 KPX Y o -86 KPX Y i -17 KPX Y e -86 KPX Y a -77 KPX Y C -17 KPX Y A -63 KPX Y semicolon -123 KPX Y colon -123 KPX Y period -128 KPX Y hyphen -100 KPX Y comma -128 KPX Z period -17 KPX Z comma -17 KPX f quoteright 73 KPX f quotedblright 73 KPX f quotedblleft 31 KPX f period -35 KPX f hyphen -35 KPX f comma -21 KPX k hyphen -40 KPX o period -17 KPX r quoteright 36 KPX r quoteleft 36 KPX r quotedblright 36 KPX r quotedblleft 36 KPX r period -91 KPX r comma -72 KPX v quoteright 36 KPX v quoteleft 36 KPX v quotedblright 36 KPX v quotedblleft 36 KPX v period -100 KPX v comma -81 KPX w quoteright 36 KPX w quoteleft 36 KPX w quotedblright 36 KPX w quotedblleft 36 KPX w period -100 KPX w comma -81 KPX x hyphen -17 KPX y quoteright 36 KPX y quoteleft 36 KPX y quotedblright 36 KPX y quotedblleft 36 KPX y period -114 KPX y comma -95 KPX guillemotleft Tcaron -72 KPX guillemotleft T -72 KPX guillemotleft J -35 KPX guillemotright Tcaron -72 KPX guillemotright T -72 KPX guillemotright J -35 KPX Agrave tcaron -17 KPX Agrave Tcaron -54 KPX Agrave yacute -40 KPX Agrave Yacute -49 KPX Agrave fl -17 KPX Agrave fi -17 KPX Agrave Ydieresis -49 KPX Agrave ydieresis -40 KPX Agrave quoteright -118 KPX Agrave quotedblright -118 KPX Agrave y -40 KPX Agrave w -40 KPX Agrave v -40 KPX Agrave t -17 KPX Agrave f -17 KPX Agrave Y -49 KPX Agrave W -49 KPX Agrave V -72 KPX Agrave T -54 KPX Aacute tcaron -17 KPX Aacute Tcaron -54 KPX Aacute yacute -40 KPX Aacute Yacute -49 KPX Aacute fl -17 KPX Aacute fi -17 KPX Aacute Ydieresis -49 KPX Aacute ydieresis -40 KPX Aacute quoteright -118 KPX Aacute quotedblright -118 KPX Aacute y -40 KPX Aacute w -40 KPX Aacute v -40 KPX Aacute t -17 KPX Aacute f -17 KPX Aacute Y -49 KPX Aacute W -49 KPX Aacute V -72 KPX Aacute T -54 KPX Acircumflex tcaron -17 KPX Acircumflex Tcaron -54 KPX Acircumflex yacute -40 KPX Acircumflex Yacute -49 KPX Acircumflex fl -17 KPX Acircumflex fi -17 KPX Acircumflex Ydieresis -49 KPX Acircumflex ydieresis -40 KPX Acircumflex quoteright -118 KPX Acircumflex quotedblright -118 KPX Acircumflex y -40 KPX Acircumflex w -40 KPX Acircumflex v -40 KPX Acircumflex t -17 KPX Acircumflex f -17 KPX Acircumflex Y -49 KPX Acircumflex W -49 KPX Acircumflex V -72 KPX Acircumflex T -54 KPX Atilde tcaron -17 KPX Atilde Tcaron -54 KPX Atilde yacute -40 KPX Atilde Yacute -49 KPX Atilde fl -17 KPX Atilde fi -17 KPX Atilde Ydieresis -49 KPX Atilde ydieresis -40 KPX Atilde quoteright -118 KPX Atilde quotedblright -118 KPX Atilde y -40 KPX Atilde w -40 KPX Atilde v -40 KPX Atilde t -17 KPX Atilde f -17 KPX Atilde Y -49 KPX Atilde W -49 KPX Atilde V -72 KPX Atilde T -54 KPX Adieresis tcaron -17 KPX Adieresis Tcaron -54 KPX Adieresis yacute -40 KPX Adieresis Yacute -49 KPX Adieresis fl -17 KPX Adieresis fi -17 KPX Adieresis Ydieresis -49 KPX Adieresis ydieresis -40 KPX Adieresis quoteright -118 KPX Adieresis quotedblright -118 KPX Adieresis y -40 KPX Adieresis w -40 KPX Adieresis v -40 KPX Adieresis t -17 KPX Adieresis f -17 KPX Adieresis Y -49 KPX Adieresis W -49 KPX Adieresis V -72 KPX Adieresis T -54 KPX AE hyphen 18 KPX Ccedilla period -17 KPX Ccedilla comma -17 KPX Egrave hyphen 18 KPX Eacute hyphen 18 KPX Ecircumflex hyphen 18 KPX Edieresis hyphen 18 KPX Eth Yacute -17 KPX Eth Aacute -17 KPX Eth Acircumflex -17 KPX Eth Ydieresis -17 KPX Eth Atilde -17 KPX Eth Agrave -17 KPX Eth Adieresis -17 KPX Eth Y -17 KPX Eth V -17 KPX Eth A -17 KPX Eth period -35 KPX Eth hyphen 36 KPX Eth comma -35 KPX Ntilde semicolon -35 KPX Ntilde colon -35 KPX Ntilde period -63 KPX Ntilde comma -63 KPX Ograve X -17 KPX Ograve V -17 KPX Ograve period -58 KPX Ograve hyphen 36 KPX Ograve comma -58 KPX Oacute X -17 KPX Oacute V -17 KPX Oacute period -58 KPX Oacute hyphen 36 KPX Oacute comma -58 KPX Ocircumflex X -17 KPX Ocircumflex V -17 KPX Ocircumflex period -58 KPX Ocircumflex hyphen 36 KPX Ocircumflex comma -58 KPX Otilde X -17 KPX Otilde V -17 KPX Otilde period -58 KPX Otilde hyphen 36 KPX Otilde comma -58 KPX Odieresis X -17 KPX Odieresis V -17 KPX Odieresis period -58 KPX Odieresis hyphen 36 KPX Odieresis comma -58 KPX Oslash X -17 KPX Oslash V -17 KPX Oslash period -58 KPX Oslash hyphen 36 KPX Oslash comma -58 KPX Ugrave Aacute -30 KPX Ugrave Acircumflex -30 KPX Ugrave Atilde -30 KPX Ugrave Agrave -30 KPX Ugrave Adieresis -30 KPX Ugrave A -30 KPX Ugrave semicolon -35 KPX Ugrave colon -35 KPX Ugrave period -91 KPX Ugrave hyphen -17 KPX Ugrave comma -91 KPX Uacute Aacute -30 KPX Uacute Acircumflex -30 KPX Uacute Atilde -30 KPX Uacute Agrave -30 KPX Uacute Adieresis -30 KPX Uacute A -30 KPX Uacute semicolon -35 KPX Uacute colon -35 KPX Uacute period -91 KPX Uacute hyphen -17 KPX Uacute comma -91 KPX Ucircumflex Aacute -30 KPX Ucircumflex Acircumflex -30 KPX Ucircumflex Atilde -30 KPX Ucircumflex Agrave -30 KPX Ucircumflex Adieresis -30 KPX Ucircumflex A -30 KPX Ucircumflex semicolon -35 KPX Ucircumflex colon -35 KPX Ucircumflex period -91 KPX Ucircumflex hyphen -17 KPX Ucircumflex comma -91 KPX Udieresis Aacute -30 KPX Udieresis Acircumflex -30 KPX Udieresis Atilde -30 KPX Udieresis Agrave -30 KPX Udieresis Adieresis -30 KPX Udieresis A -30 KPX Udieresis semicolon -35 KPX Udieresis colon -35 KPX Udieresis period -91 KPX Udieresis hyphen -17 KPX Udieresis comma -91 KPX Yacute uring -86 KPX Yacute ecaron -86 KPX Yacute Ccaron -17 KPX Yacute Cacute -17 KPX Yacute Aacute -63 KPX Yacute Acircumflex -63 KPX Yacute oe -86 KPX Yacute Atilde -63 KPX Yacute Agrave -63 KPX Yacute oslash -86 KPX Yacute ae -77 KPX Yacute udieresis -86 KPX Yacute ucircumflex -86 KPX Yacute ugrave -86 KPX Yacute uacute -86 KPX Yacute otilde -86 KPX Yacute odieresis -86 KPX Yacute ocircumflex -86 KPX Yacute ograve -86 KPX Yacute oacute -86 KPX Yacute edieresis -86 KPX Yacute ecircumflex -86 KPX Yacute egrave -86 KPX Yacute eacute -86 KPX Yacute aring -77 KPX Yacute atilde -77 KPX Yacute adieresis -77 KPX Yacute acircumflex -77 KPX Yacute agrave -77 KPX Yacute aacute -77 KPX Yacute Ccedilla -17 KPX Yacute Adieresis -63 KPX Yacute u -86 KPX Yacute o -86 KPX Yacute i -17 KPX Yacute e -86 KPX Yacute a -77 KPX Yacute C -17 KPX Yacute A -63 KPX Yacute semicolon -123 KPX Yacute colon -123 KPX Yacute period -128 KPX Yacute hyphen -100 KPX Yacute comma -128 KPX Thorn period -146 KPX Thorn hyphen 18 KPX Thorn comma -128 KPX eth period -17 KPX ograve period -17 KPX oacute period -17 KPX ocircumflex period -17 KPX otilde period -17 KPX odieresis period -17 KPX oslash period -17 KPX yacute quoteright 36 KPX yacute quoteleft 36 KPX yacute quotedblright 36 KPX yacute quotedblleft 36 KPX yacute period -114 KPX yacute comma -95 KPX thorn period -49 KPX thorn comma -17 KPX ydieresis quoteright 36 KPX ydieresis quoteleft 36 KPX ydieresis quotedblright 36 KPX ydieresis quotedblleft 36 KPX ydieresis period -114 KPX ydieresis comma -95 KPX Cacute period -17 KPX Cacute comma -17 KPX Ccaron period -17 KPX Ccaron comma -17 KPX Dcaron V -17 KPX Dcaron period -35 KPX Dcaron hyphen 18 KPX Dcaron comma -35 KPX Ecaron hyphen 18 KPX Gbreve period -35 KPX Gbreve hyphen 18 KPX Gbreve comma -35 KPX Lacute quotedblleft -239 KPX Lacute Ydieresis -63 KPX Lacute quoteleft -239 KPX Lacute U -54 KPX Lacute T -81 KPX Lacute W -67 KPX Lacute V -118 KPX Lacute Y -63 KPX Lacute Tcaron -81 KPX Lacute Udieresis -54 KPX Lacute quotedblright -239 KPX Lacute Uacute -54 KPX Lacute ydieresis -35 KPX Lacute Uring -54 KPX Lacute quoteright -239 KPX Lacute Ugrave -54 KPX Lacute yacute -35 KPX Lacute y -35 KPX Lacute Ucircumflex -54 KPX Lacute Yacute -63 KPX Lcaron quotedblleft -239 KPX Lcaron Ydieresis -63 KPX Lcaron quoteleft -239 KPX Lcaron U -54 KPX Lcaron T -81 KPX Lcaron W -67 KPX Lcaron V -118 KPX Lcaron Y -63 KPX Lcaron Tcaron -81 KPX Lcaron Udieresis -54 KPX Lcaron quotedblright -239 KPX Lcaron Uacute -54 KPX Lcaron ydieresis -35 KPX Lcaron Uring -54 KPX Lcaron quoteright -239 KPX Lcaron Ugrave -54 KPX Lcaron yacute -35 KPX Lcaron y -35 KPX Lcaron Ucircumflex -54 KPX Lcaron Yacute -63 KPX ldot l -117 KPX Lslash Uring -54 KPX Lslash Tcaron -81 KPX Lslash yacute -35 KPX Lslash Yacute -63 KPX Lslash Ugrave -54 KPX Lslash Ucircumflex -54 KPX Lslash Uacute -54 KPX Lslash Ydieresis -63 KPX Lslash ydieresis -35 KPX Lslash quoteright -151 KPX Lslash quotedblright -146 KPX Lslash Udieresis -54 KPX Lslash y -35 KPX Lslash Y -63 KPX Lslash W -67 KPX Lslash V -118 KPX Lslash U -54 KPX Lslash T -81 KPX Ncaron semicolon -35 KPX Ncaron colon -35 KPX Ncaron period -63 KPX Ncaron comma -63 KPX OE hyphen 18 KPX Racute oslash 18 KPX Racute aring 22 KPX Racute ae 22 KPX Racute agrave 22 KPX Racute Ydieresis -30 KPX Racute aacute 22 KPX Racute acircumflex 22 KPX Racute T -17 KPX Racute W -21 KPX Racute V -35 KPX Racute Y -30 KPX Racute adieresis 22 KPX Racute Tcaron -17 KPX Racute a 22 KPX Racute quotedblright -35 KPX Racute ydieresis -17 KPX Racute quoteright -35 KPX Racute yacute -17 KPX Racute atilde 22 KPX Racute y -17 KPX Racute Yacute -30 KPX racute quoteright 36 KPX racute quotedblright 36 KPX racute comma -72 KPX racute quotedblleft 36 KPX racute period -91 KPX racute quoteleft 36 KPX Rcaron Tcaron -17 KPX Rcaron yacute -17 KPX Rcaron Yacute -30 KPX Rcaron Ydieresis -30 KPX Rcaron ydieresis -17 KPX Rcaron quoteright -35 KPX Rcaron quotedblright -35 KPX Rcaron oslash 18 KPX Rcaron ae 22 KPX Rcaron aring 22 KPX Rcaron atilde 22 KPX Rcaron adieresis 22 KPX Rcaron acircumflex 22 KPX Rcaron agrave 22 KPX Rcaron aacute 22 KPX Rcaron y -17 KPX Rcaron a 22 KPX Rcaron Y -30 KPX Rcaron W -21 KPX Rcaron V -35 KPX Rcaron T -17 KPX rcaron quoteright 36 KPX rcaron quoteleft 36 KPX rcaron quotedblright 36 KPX rcaron quotedblleft 36 KPX rcaron period -91 KPX rcaron comma -72 KPX Scedilla Scedilla -21 KPX Scedilla Scaron -21 KPX Scedilla S -21 KPX Scedilla period -35 KPX Scedilla hyphen 36 KPX Scedilla comma -35 KPX Scaron Scedilla -21 KPX Scaron Scaron -21 KPX Scaron S -21 KPX Scaron period -35 KPX Scaron hyphen 36 KPX Scaron comma -35 KPX Tcaron udieresis -91 KPX Tcaron aring -95 KPX Tcaron ae -77 KPX Tcaron semicolon -35 KPX Tcaron ograve -114 KPX Tcaron ydieresis -109 KPX Tcaron hyphen -165 KPX Tcaron quotedblbase -72 KPX Tcaron uring -91 KPX Tcaron otilde -114 KPX Tcaron edieresis -114 KPX Tcaron ugrave -91 KPX Tcaron comma -109 KPX Tcaron agrave -95 KPX Tcaron Atilde -54 KPX Tcaron ecircumflex -114 KPX Tcaron ccedilla -114 KPX Tcaron racute -72 KPX Tcaron egrave -114 KPX Tcaron Adieresis -54 KPX Tcaron Aacute -54 KPX Tcaron ccaron -114 KPX Tcaron rcaron -72 KPX Tcaron eacute -114 KPX Tcaron ucircumflex -91 KPX Tcaron yacute -109 KPX Tcaron quotesinglbase -72 KPX Tcaron atilde -95 KPX Tcaron Acircumflex -54 KPX Tcaron oslash -77 KPX Tcaron ocircumflex -114 KPX Tcaron scaron -91 KPX Tcaron A -54 KPX Tcaron ecaron -114 KPX Tcaron guillemotright -72 KPX Tcaron scedilla -91 KPX Tcaron adieresis -95 KPX Tcaron w -109 KPX Tcaron odieresis -114 KPX Tcaron uacute -91 KPX Tcaron guilsinglright -72 KPX Tcaron cacute -114 KPX Tcaron aacute -95 KPX Tcaron period -128 KPX Tcaron T -35 KPX Tcaron acircumflex -95 KPX Tcaron e -114 KPX Tcaron Tcaron -35 KPX Tcaron a -95 KPX Tcaron c -114 KPX Tcaron guillemotleft -72 KPX Tcaron oe -77 KPX Tcaron guilsinglleft -72 KPX Tcaron o -114 KPX Tcaron s -91 KPX Tcaron r -72 KPX Tcaron u -91 KPX Tcaron Agrave -54 KPX Tcaron y -109 KPX Tcaron colon -35 KPX Tcaron oacute -114 KPX Uring Aacute -30 KPX Uring Acircumflex -30 KPX Uring Atilde -30 KPX Uring Agrave -30 KPX Uring Adieresis -30 KPX Uring A -30 KPX Uring semicolon -35 KPX Uring colon -35 KPX Uring period -91 KPX Uring hyphen -17 KPX Uring comma -91 KPX Ydieresis uring -86 KPX Ydieresis ecaron -86 KPX Ydieresis Ccaron -17 KPX Ydieresis Cacute -17 KPX Ydieresis Aacute -63 KPX Ydieresis Acircumflex -63 KPX Ydieresis oe -86 KPX Ydieresis Atilde -63 KPX Ydieresis Agrave -63 KPX Ydieresis oslash -86 KPX Ydieresis ae -77 KPX Ydieresis udieresis -86 KPX Ydieresis ucircumflex -86 KPX Ydieresis ugrave -86 KPX Ydieresis uacute -86 KPX Ydieresis otilde -86 KPX Ydieresis odieresis -86 KPX Ydieresis ocircumflex -86 KPX Ydieresis ograve -86 KPX Ydieresis oacute -86 KPX Ydieresis edieresis -86 KPX Ydieresis ecircumflex -86 KPX Ydieresis egrave -86 KPX Ydieresis eacute -86 KPX Ydieresis aring -77 KPX Ydieresis atilde -77 KPX Ydieresis adieresis -77 KPX Ydieresis acircumflex -77 KPX Ydieresis agrave -77 KPX Ydieresis aacute -77 KPX Ydieresis Ccedilla -17 KPX Ydieresis Adieresis -63 KPX Ydieresis u -86 KPX Ydieresis o -86 KPX Ydieresis i -17 KPX Ydieresis e -86 KPX Ydieresis a -77 KPX Ydieresis C -17 KPX Ydieresis A -63 KPX Ydieresis semicolon -123 KPX Ydieresis colon -123 KPX Ydieresis period -128 KPX Ydieresis hyphen -100 KPX Ydieresis comma -128 KPX Zcaron period -17 KPX Zcaron comma -17 KPX uni02BB Aacute -137 KPX uni02BB Acircumflex -137 KPX uni02BB Atilde -137 KPX uni02BB Agrave -137 KPX uni02BB AE -123 KPX uni02BB Adieresis -137 KPX uni02BB A -137 KPX uni2010 Tcaron -165 KPX uni2010 Yacute -109 KPX uni2010 Ydieresis -109 KPX uni2010 Y -109 KPX uni2010 X -72 KPX uni2010 W -54 KPX uni2010 V -72 KPX uni2010 T -165 KPX quoteleft Aacute -137 KPX quoteleft Acircumflex -137 KPX quoteleft Atilde -137 KPX quoteleft Agrave -137 KPX quoteleft AE -123 KPX quoteleft Adieresis -137 KPX quoteleft A -137 KPX quotedblleft Yacute 27 KPX quotedblleft Aacute -137 KPX quotedblleft Acircumflex -137 KPX quotedblleft Ydieresis 27 KPX quotedblleft Atilde -137 KPX quotedblleft Agrave -137 KPX quotedblleft AE -123 KPX quotedblleft Adieresis -137 KPX quotedblleft Y 27 KPX quotedblleft X 27 KPX quotedblleft W 27 KPX quotedblleft V 27 KPX quotedblleft A -137 KPX quotedblbase Tcaron -128 KPX quotedblbase Yacute -91 KPX quotedblbase Ydieresis -91 KPX quotedblbase w -35 KPX quotedblbase v -35 KPX quotedblbase Y -91 KPX quotedblbase X 8 KPX quotedblbase W -109 KPX quotedblbase V -146 KPX quotedblbase T -128 KPX guilsinglleft Tcaron -72 KPX guilsinglleft T -72 KPX guilsinglleft J -35 KPX guilsinglright Tcaron -72 KPX guilsinglright T -72 KPX guilsinglright J -35 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Serif-BoldOblique.pfa0100664000212600000240000061532210330505373017022 0ustar mikeuser%!PS-AdobeFont-1.0: Serif-BoldOblique 1.15 %%DocumentSuppliedResources: font Serif-BoldOblique %%Title: Serif-BoldOblique %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Serif-BoldOblique known{/Serif-BoldOblique findfont dup/UniqueID known{dup /UniqueID get 4032506 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Serif-BoldOblique def /FontBBox {-532 -1034 2728 2164 }readonly def /UniqueID 4032506 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Serif Bold Oblique) readonly def /FamilyName (Serif) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle -11 def /isFixedPitch false def /UnderlinePosition -217 def /UnderlineThickness 240 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 04BFDF59CBE545B9A7608E6A873EAB8F48A2CDD24F2EC90C5F70D2B23A929FD6FBB73644 06B2D9E0C3FEE0610B6BAAEBF3C4D6ADCACA33A4B309518D1F0453F13678B251F8F056C4 A57013496EFFEE3FAA3B7D4DB0CEDF33EA8AA67BBB778955B93B355EF8D28A65288F14D5 E7D6B1FD3478C9601B078D82E98B9EF493398C2447618B310B3D3BBA525CDEB28E78FFB2 82D22CACD3AEC5BD68B5107D5A8140BFC442E6B428E3EF3C176AFE1C84405F254D9005EB 6B8AE5C7528F01A27D0E3BA28C9EF41AF5595A9ED40A47E2CF433B34408983A221DFFC5C 57A0F3B2C6E365DA55D721A69B4EFDA3C37687146A3282FBCAFC600F7C9CA68C3C266635 4777DD92EF64CABCE6C5A05F3A9B5C95AE5E4FEA673719B7F3D1945745CD80D43DCE944B F1555589C05493B42B05CEAAD3278149F66225EFA84C79CAB08C740299A865E3A7E65D51 435B041F9FDC30D5E80CC37B30615EFDF99781554012FBCD85F895CB56D69BA82AD1FB53 1E707311DC76CB75595E2EFD70739477676DCACAA70167C73CDDDC4909AC6D13BE60A2D3 8AE2C80C533DE71AAD95DB9C4637EA6F4F69C697F5195E2D3611E9105EEF955149098D21 32FAEF1735DABF160671134DF119C2425D93008F60F24F5F03A32765A2195EC0E5E35B2A CE4427B52B20D507C71EA18C476AC588BE27AE676E960820911CDB3FD00C42ED14BC9984 DB8707834CA8BE90ECA8623EA1DB35968944AFE8D8AB21CCADDE33F9A1976C68D368FC68 B5BCB88DB957277DBB36BB3C4BD2BE4FFA661DCAB0FBF8E9129B0769B06347BC272DF4B8 85CD6D06D492F415ECD759877C4D7DAA68C1B0EE7E2AD8EC9E4856608A460515315982BF 6D0B8903CFC169C4EECA91C3CEA578A2F3EC52CCB2D6EEC4CF4E798AEC57335EEF4F3E8E 650BFA0F75AD59D8A4253E505CCB20E8958344703591DEEE838BA8797D3EAC36D1A52A17 9309CA046BA813543039AEBA9B9FD57399EFA34A371F48DA7FF5F69936A023F8B86F2DC0 4C267BCBF6194514BEA8A47C10CD2633CCA617EFC9C7BC445E5025B59D0E2B7C7AA0C1EA 24CA01BDEA5B6D177A3E42525D29181FFFB560C68F32B9A754469286F1E4C9F8E80CF68C 59C5877AB9D9EADFE376B2B2F8FBC3211B7596B5855B28202F6F12A8903055D563DC4AB4 1ECAEC6AB8785BFB6A84CE941B8701545E978797FF5515D6C7760ABB95B10038C608B4DD D70C7D14FC5051B3D729C52F003B1AC61051547CCCC6A158899E5C25B23799F719478BEF A9F853520C4C77B6AF3D9C8266184BA54954F00752E08225E45D877E13CF20959151ED84 8772A8C7238BB39685C925D189DE9E033E0048D1439EE105C467F05ADF5D6813A83E1BD1 335381C7DECB9BEDAE553B8CA507F5962F5B6550A31E6F71553FD0D584625398620C97BA 76A5038AF8D11C7AD18A663C54B522AE0A33B070FCD0128AECE81B4233AF9ED7AAC825C1 F1D6478B4F70F4A4EE75CA9C4CC097E044F9D98712C3A29D618282C32E08B92E0815E192 BF9A54EADC530C878C97085E6D4970114B6DBD5130C0B6D9807A5E3A4F950BDE596D2A1D EF5FCCAD58F7E529362AFB5055CDA832B4EC7DB47FA3AA70DF55B9B1BEFC373A1B3A54A8 E58E7ACBEE4F542E3679143D00FF142FE9EB48B5CB67ECEF426A7C15677C16E32DFDE4C3 0FB1AEE12B4DB85A6C98C6EFAE820798B508BDFDD49BDCDACBC1A3991AFB17C193CACA9A D7B51FA0A8C5FD9337B8B6F17B266A1A1279C6F541AEA16FA0F055639C851ACABDBFF6FC 65806666F2C437C9FDC17A60E02B3DAC3B41741E2895CB2CF6F64E5EC00169D13477781B B8A204D2A9D8C5C84936F4790A63FF2464233AB6AEBA703F34C383236CDBC64C2BCE3758 4B492206C6EDE3C09ED51BF27F968C6086BCBF698057BA594617207C6A56A83EEDD5B03E 00E6B79492DDB4487E1EC5DEE73B9350385A45C291CE3FE35B3F60391D13C26229F9AD82 BC096D8DC82AD998639859D735A95B0BB62239D0151343FFEEFFC1499C77E0842C48BE81 0DD338B21E6B624C90F022CC4DD7F46D6B3319C0387ECDB53EB93A64F5FA874EC36BC06E 7C74A63E4223CCC456E6E59C5264FF2156E07D3325F80A32E98112221C39483210491B4D 182E425A35205A569A78FC71AFF790D87531A6597D57B29815419C19BC61816B4F6BEB35 3AAB299B70FAF5D11E259CE8357AE8792628ECFF05BC2F28ED0BC8077809B811E0994406 6622B3800D5F7DD517307BD8101E2BBE0E84D335B6F09AC775193B3844C4C320031B1CB7 372D778DEE10AF38B62E3955768CFB06763DDCE64DD06E851602D9D09CB89DAA686C907C C9C7E3467163BFEBDD615A62FE42BE7DE6A55F7AB36947BA6AD20A66D77F48ADB0D5E7C9 259C646744F8E95DF1225BD1744B8F55188BF9BC56E41FB7F566D32F137DEE7774F8DD93 CAE55EB4FD4C3D26532BD93FB98F3EC9F8CD87A0AA078BF2095C483B34E62BD42AAA0D13 92F10E468473A5ABD687B9C7C009F03CC4B1FE3903A941EA20902739AA9A65C5CF1C651F 8FF664B578DD19EC5C6C1B50FCCA606EA38DD1463F45D3EC98323EEEC7FCBCB98808ECC1 BBF0EEF1F87EDF88D29C40AC2C67E5104CF7773A378CCE6D292013FCDB769296BF333ED9 170A624EA515F1588A16FA35EF5E488E23B8D854BA70BA172B0391E8E4210EECF4703EE3 4ED50693D310BDBA9736395CB239E2300A17158A56A0ABB0E0D3E8D04B5B6B03B039E6C7 6F0F35CEF4357A0556AC16C555CFA21E128E5B7875DF1393E37A51E0EB1774A83E6B3F0F 8851C711CED710B3C1B08C05B2F04C00C87745F18BA61EB0ED37EFA1FE12ABD53F6B1070 99EC7F6C21D07D8B742B87CF19E136B81104753DE5C0460378EAF5F374945C91FA53F787 0C0931D94FD7D90240CA6F961A7892E4C5753B77D28142746097EF5D5BC700859479C526 7A10C504371068337193FB148D461190E7A68000DCD9152D7C092B45351778E98B4152E9 8B74D7B9B41EEDFA67941C15962634181F617C96AA8577CACBE5D736DBD428D3A951157E 4DB8E6625051791452935231F06FA1C7A4B7F35A50C060CC1926208CF0AD8967FC14F750 E1AFF6BB6DE1DEBA4603B10AF1733FEA59A6A81934E4753A7D3AF0D8CC44688F37EF37D2 93EAF7C6F60073B16E6BEC9DC8578FC513DEE2FCBFA7766D991E7B3E0F9859CBD3F776D6 9407E1F5431D5822DFF6C6895BB9DBBC2EFB0C4BC8036A324B067841409030AC283540C8 A87EEADC635C9562AD05A0C6482DEAD1EE547764E089D4E7D68C4E19FBC3E95CCE0E58F4 4066BBF2D02F5115B7D9D945A04998BB38DD7758EFCAE61CE15183CD73681F69A5F40B99 6991A7D222BE01945E31F639DA69374C45567B2D7D0891B23C9F61E4BC57844EB07E3D6C 41D0EE337DE78C30207C019150AEB3C724872D96B6EAD5839680835B3C0EA4237F4B0862 3BE5854C6012CBAE3EB419BAFA762BD83B79F9B87BCDFAA584D7355468FABA0C3B60D8CC 945D1678B5BD19708AC271B704976BE4B223B73288A651D64ED01A3493107C60B8F55289 9B4A7C54C9EE5B8F5D69C9C2A1C48AA58CF7BC92EBB7FA12EA3212D9DFEC81B1D94FF06B 1FDE45133F3A75A9C32B8A99E73D7AB6ECBFF3017C8F1C8F19CA93390FCB59BB421BD554 6A99D80E14CBD40FAFD4F2DC904EBA7C97BE9DBF895947E1A5116FBC1DEFC9E7E387CE43 79211CB1D039CBB7CF498D2C4E928E8AE41DC60A99FEC3A0FC43FB239DC2BDBF14B5AEDC C59391B83C59713CB0F22D740C4EA7360F1A57F60F750F7448F3BEAF7DD889F0C280F925 5183E7925C4BD07FC56BEA316B9014851571382252C05B8DD122273B7FFB3ED4068F2213 53506E6AACDFD66D06E030B04927A2FBF94DB272096B6B1C6060082BB1D579ACD44327A4 470C21FA82326EA8B840CD3A8434DA5E8352667DF1FB1CE82B7EABA703E51B60F514FD09 B471A43210DDE46536EAE939A6A7577271941460082E6FC2E8EB6B3288ACBAA057602038 4B1C5FC86CEBB20E6460A39E23576024BC4514D2B293FECF46AA6C187D7F9657D83F38AB 5D09926CEC2918F65BB966AFFC590307F1C31BF683F9E33944BCC64B91907A580D6074DD A8E596BD50F046B16507D79035CEE62F9140D35B42D7C507744F5930D2C5CAEE9AE60F14 6C7C6BE9DED9BC2C9354B08A582A9D6FFA338F0625B9A6CCA5CFE47FF82EFAFAA67FBA61 718817BFCF1BC4DB944CB769A43D9A1035A6D7D1324C36D738E081D150110E35B63E8902 FAAEE908F06F2454A75FF8CF979DF2A3793E40BB69153DA6D6161F79CEFA92AC42DACD9F F6BD344FB7E1D44D03317EDEE6908B2D7F8C13CAA3FD189638625C3530BE2769F0C82124 D76516DEDCE74E65F61EFF3EBE6378514F5689CAC07116719AB2A90B0AE4ACBBC9D09F7C BA29510512AFFAD6B0AD3DCDCF699AD23B6BE7BF6DFDED8BDE4E6DDEE2796A946A3996F3 B90AF97B514514602297B14D2B8012464E1ADF51AAE81C23946C675C19D5F32E3E1605E2 0F3AF81C9966C23B35F6ED56ED32E2C1978EA2DD4CF9510C082E26A6A25EEF2684F40AFF 18E31A0B20DA79D50A700148DD7894AB604FB5F23ED498A70D15A07F77A082F99E7BACFD 78C36D9B70C8BEEAD9583F17CC668D6AA8E0C8217C8D9FD485EEB66BBF6AC864D4580BF7 E18C071D5F1012BC3748413B4D9B47F58C70F4B70DE466AE8A508BCD660386A5584C763E C2C08F5CB5CB137D11AF135AAED9EFD23A58512C3A56197483E2A8C8121D99E07187A3D4 DAF8297A998C71F04E02221CF704038F6EBA25AFF9FBEE4A30C54AFEC04A9E7A28F7C453 8F3F23459D1835639DAA72147CFCDFD988372584BDAFA6EABAB4E40253D6F664547A3683 9F3818BA33E278F1830632E25A803C552BA5F4388B460434357BE28704A2D158419AD4F3 82B04D9BFBCF9734ACDE2C4F0C9660F9ECC680F527687A1FA957E4A4E6447ADF0E3D6A28 F3954A03074F7C33C841827BF1CE1DDF0D5E0169967933A8E53E53242B1D8E6D23549B6B B3645EA47EE95385D89CE720A21894488110F17E800AD07ECA6C5D3BCA36B2668407F651 AE95C2DCA958FE363C879F5533933C360AC733DE5A3C119159EDB5420B7D8681540F0EA4 C1C0943E458DDD3D314C3613F0798F9768BCE83F189FD50D180550FC358E78B8B4D2C3B2 E0A555FD1FE7FE453D3ADF2FA33D882158BFB0CE68D7CA64F573BC2776E873BEEB3558BB AACEA49E38EC91271E10D1E7ADE0B95AEB5F5F5CE45E67A844E85907D4AA5D1A3A096A9B AF6DBB22FF37BC6D8EE7A3BB4992B812DB0AB15890191568080256494A30A55E3E79B43F B386B8C524E7D97C88B049E31DD84467B32091EBA74CCB40138AD0C7148DA6128531E0BE D5827EBEDA3B67D332FE356F19275F9F59DDD66673B5F0B20F4921105E91A12856BA42F3 C0A29DCB818B03045CAE5CDDFC1ACBEA0C81D26C08818998292C99896DB804EA7AB3A7B0 5BCAFDB3E3E61FB25851B725DAEAB9D9779E587D9CC0BDED2D5B8EBD3555CC872C96A4EE 03E07B12E2ECD45E9D5EEDA2E85637DB3DD5388969E3B3674BB19E408F778E8EFDCD073F C03FE7916C69D08068B0084AA4BFD335BDB53E6CA02D5621F0BFCC78404BB7E3F7AF917C BFD8AE1E1F98FC79A146842950D6732FDB01EB126CFC6745F9E8D338B7AD95AA83593304 35C27C1461AF221C8A62F7C417EA0D16B2218CC0D98E6AAB39E13D23506E260CCF5887C9 7B7CCFF98609AEC90E71132EA82C067EB4E050E02FB2212AF67F75CB2124CDDEA8602E1B 24D6533551785CC3229E878941677B82F91C856E029E6FEF878814A92DCD3A29E767D965 D2595336C35CC0154383D3C6B1A4B9D3750ED347A0EE31785BF9C970715D09526BBD299F EA7B363E4D994E90B50AC307AA05C6DC28B7BF334E99952061B3EDE8E7D02F52DFD196AA 762BAFFBCCDCCB8C034CF25E0D367B97DC53D1B2D8FF4A24AA3E5821DBA4C19F431C4FEE 372219E70A5114B5E132C911E3A903F12130E67ED2A56065AE2BE7BB52C93DEA383C955E E99293B70ACA6B2B9AF44689B07A6E7CA90588FB505EC928DDD43C0EAE8DF03A8705F7AC 7DB6F084E808A766C657B2C3CA77862EBF85CF3FA1BCDCB8D6E04A763D3EBAA62F81C6A7 79A38CF2873AAF3C5F18557728FBC797A6FE0A062542816A4979DACD833135E70FDCA6D5 AB1A978BBC6053233C265A0DD9A6A55AA87FE0669FD07C277303BEEF36AF413B61CA81BB 8FD02FC5EBAB14FB9BBB33C12EFFBB9C5DA2F10E8F92DA19F61D10B82407B9CF1E303C20 3EB5E54CEC051FCABF1ED3EE2C1682CD3FBD0987F85E64565F8BFBFAB569E03A2CFBE426 B8FC604810ECA25B9C939DA6F707E2B07FEC564CB0B92E192FC23C313B32672F26E28D51 92D1204974064C14698D829ED8F325953561EAF373770E652BE19E0B94A60DB4328BF6B6 EE726996FF37D6B41BD233860D008F18D8F29CAB46BE307F239FF3E984F6E697BF4F0C23 165EA1B48256C7366FB68121128747D5A22AC192167FF1253311330C2DC6E54606AD9101 45A767B3B7D3FFE2A14DF49DC46897B403C1CF3337ECF000FC327CBCBAB6CD8FC7026D36 31D84887288CB98CDF617737DB0DA0602FC11D34AE67B67B37AF86DC4B26934CAF3DF6CD BEC915D80EA70A4F10A57974DA725CBD55E47B04ACE751AF2FDCD76A7A1B14FFA936C781 CB6020A5664839C76B226FA86FA20C2FA137B91E7E6EA0E493BDEBCC30D2FAA4A323C265 96AEC9B02B74EEFF407A4856C55640F027980F516BE5C0D46F3F67F2840C6DA156F3E5FD 0CC9C118925B819434D436C33BEE37AC4FF969985C41D3B61AB0D7B422C31A30CC1BF777 966B0641A9A91FDE2C3B8E645C170B1FA1A8B5BA93669B72CA6F3AB83DB8711C497ABA0F 17194E069837C28DC596FA84212AA88CEA87DD301541A02877B76050B07747F7B92A7A94 044948A7AE2C40F9BC1D72A899275A83BD2DE5CD0F150913480F4966845E43A5F28E218D 173E83068180B3D5486B409D772F8B323879625EC85945C394DE4022305DAA12CF76982D AA637A8FFB83A09F1ECAB3B7C8ED9C8E90288E70CBBCC29775B0B79B07790565C30C8713 49CF3DCCDCB3A725413688FF26617770DA6B60AFF21609154E2F37B7E3AFA83AB7F85DC2 5AB74D3C4D1DC37AC86CD26F1A2B79CDE556930C24314739DEE1A9CD2D542ABD8AFBFFD7 64478A917E359FD33D1CE033083ED098FCF2FD248319E355006615FD46D7BA41386B0A7D B8CCD7013C967DEC01F653909345039DC9BE20CF116CC1E30AED9610ADABB5DFFD664164 352198C1DAB98179A9567F952AE9771ADED819032F278AACD54A175C0A198033F366F793 0FEC7362D09404CF82D1A1D297C67BE3A94EC7AF13F8ACE023765EB3A710FA946282228F DC9417F7F52FE98C07A3FFC17992F3F4454B7ACC5CAEA5590ACDE6824DC97D8B718F05F3 11057553EC9A3939C4FA5ABCB8829415B0E9F283F97FE0E6840D92BFF62C284792A49C3F 15E80DCCF96DF6AF6C5DD05DB618D95F7E7AAC08F68E10D2A7752F47F2F3D5FA82C1822A 6309902ABCFDEC02E9305D4D486840743DAABE39C12BD3619622C142025D744C35F6C0F5 2BAB030EB39D461D519241007DEC84ACD44AE45AA03A314170EA841E73EFCA3F81C695D8 A3D315FAC60BA825A4BC304111E5E811D6D4E97D95BA960176583565ED60F04D05E5E435 0818449FBAB01D0D52C1CDD6C718B1F2615EA4A44C774133D2287400DA232B275C698FF5 B96D912C9B8A87B6671CA3E3E6E11D3BA05FE5209C6BE482D5E3337AF3866ED6CEA14F20 56192D823A6107613747B0EA35DAF2FB206732655AF4AEDE550525E47E9D378CDCD13B00 FBC728BA45600B28E6EF998DAE54FA5C4586C743F843E4061D98D9E69AFD63BA149FA002 1D5CD04494BBB1BB4A0C844CF30B13396547E58716917AC451CC00F4DFA5CB0224A91B8E 838308304630B78674EEC059D54660F0BFB46F92D6F9F8C5F2C3C7E914D63563B4555649 D453FCE317F53A015653E1D1D0BED41B651864CA86E39E4A63826FA8022CFBECA5BA2051 1BE1F417FB95E27CA3FAE9225AF6D1CB1C7BBA9EA646E2C109EB32CE5162701F371186C2 A8E8D927B42509FFE3750A5B7CEE1DCD8ADF066B48628EA95EB990C88D0EB011F826F77C 3956BFAB87923EEBE36FD06D933E525EF1D68DF8A59B184D0897553C12B6EF8812167A53 663AD8B194D07FCCA025B7603BBD52A1F76E8EBFEF47548E67C75855AE4E6168C7531255 AA6598939F0A8AF19A57ACB385CAD5E3C08F4697E59FD8B580132EF63519B1DD1F03B42A 5D08D413AA27734D0EB79F077087B834B906A0EB7FC9CA9F4876934E2FDA97DA09902EDF 9491FBA684C75A03EE0E940863EE0FEBDCFE4ED9F9C5F42BFB5FAD65391394EC29C4A096 EC4FE38074F2937FD2571175AE0F9D853BF01C33E7CDB843C12041546D9C3024627C3701 3B9F3E396675AF0F945A2563ED5C9A5CB79657ADE4170D3BE59F236DDC296FD2D37E9D74 3DF781053A340F0F57118F774065F6D2C9F5049F95EB411F411564F41F31552009915304 C8AC59BD60CFC5D46F58E3FAF842A579968E85C3FE71046BF7A0CEAAA7DA832CD68BAE63 E61251444CCBEAAB778A8B8EC654DE1356F83137E988F4AFE80F14D9481ECCA5AEA6655B D1F063BC7BDD01E5B88B063D14CE0C2DF7D656E55D37E9A8F1ACBC0DFE56DEF57393DF6A C03A5021D4362BEEC1F7A4E9DEE9DD8CE58916312E202B2BCE15D7F802DB9F3948836DE8 CBE675312EE9DFD7AAC4EB1EB6AC29060590B83422EF4FBADC29E83430B7C0FC72493099 E486B8A7A8FD6B0D2020D2982281065590F86CC7A62F1BD4B20FA74A2F70F6B946E5FEDD D54A90B3218CEF28DEB0A48A907A0DA0DFC9E28F91EB13E7BB5FDB2E7F84211DE022CBA4 2CCDA33469E1EBA8DB2CA282CD2EA242855F8EE4C94EDAA76399F7031A021D316B861D4B E662725EDBE608BB7D8A020DA2C9DF10B8D03878865D0488E83A9948C6E36E36585F75E1 5BCEEB012583D3150E488F70663D4D7CA11E410D87580566FEB8F341AACA79B6FDE3547A 9455596181C31372D5620D8A318770522427576043B4E93847C58B709B76B7DB15604C79 42156D128AA62BC43D50E643B25E0FAE380E80BC1EB6419E464162D68CF36E48E481D5EB 67504722726EECF025F16F3629F99E511644E8EE7E2D08D8850FD34E7DBBF18C13C29454 D9A27695236A9766ADC2BA8CFE5262EE550098914443587FEECAD354A030AC046361A5BE 309D90A95C698B53E5D05AC1BC55138D980AF0B88D1D545D9463F6B53426C3B4F86C04C0 FB56F0142C0D2BA97AAB202E1F05FC00F718CE2AFA1D3155AFD6D5F9B9147A2F94A2AD49 619443DB0B14AC7966660393D03A8D1BA6D5FEC97CE654B967E625D9E62268CFE94C0CED 7339B037B16C387C25FA49ED37A7FE8D278748B24932C0747A0FCF71605E804E772C7F6D 38DEAFA923B4385447247A5D968E714EBD60E1D3B192787214FB0AD6A6AD76ECB3B3F87C A15AC5DB25D1D8A16AB63ED818F0F9ED18B8A26187F677C5468A837493FFA2A89EA33CE2 C35EBC54AABE3A7455798D2CDD59871A304A63DF05A963E248E074BBD7A5ED92037FB607 55A1361D6B18D075C1CF4F411425BA1F1B94352D3D40CDFEFA9438ED855595395B1DE9F4 52C5ABDA61D0172B7E2262AE54FFEB957F3042D7EAB5FC916241660EC4635A5669BBC128 42BB8C9BED90F772BF27DE8A02E689463D4C88DBACA903D4A7FBAA438914FA16A55BC6C5 D7CE182EF23708306386E4417F894F3F9A6603D5AACE36092CCBA1E101F5C3D0514B2647 4EDD95B8321F66F722BB1035937837AAE5F4D9221AD06A5DA61702A9F24BF4B290AC0B59 4259AC942E02C07E28093E66A9837BB94AD74DB38410DC766F2B936F8D9A045A6648615C C52F012289CDFEF062ABD60EB48351A8555CF8ACF91F5D40D17307547B268ED89B981C21 A9B2C66C4E5A95CA17C466B1CC40ADFEFEC41125DB30C5B5405DE142271F4156E7B544FC 4BD9E08CAD5F79DA0BAD615D506D6EA3A2C906B6425B073CEAC39FC560D6AC6457B5C52A 69A4FA7A3A2BD3881E8AF9EBCC26DB9F9894E4584AD0EC4839D0E482BC11C09F8695F613 854DC42ADD2873D6B63D6AAFBFF380573783DE6BACEA15ABA1E54618236476FE237F88E5 EA79629FA6B629B04F21418F70ED4923BBE8CA50E377C332026A2073A9432E3BCAB7176C F997BD12C3FE8AFF12CEEA588447586C29F384435ABCBFAAFAA127ED69A2E306917F9CC0 102A3117E67D1D82608B459F51A70F53417C99EB478C24879019B55C3D940A7385F74466 2EF19589F164EEEF236C7FCFD90755E99EA2EC317E4FA574355A1EDB73E21F32ECC50327 582A542419384FE596B13B058F813055163BC9AF8163CCD4560EFDE5F3060CED87D01CDA 1113783F70F630B329ED2E11E3319605241CB47FA52176A2ED9A416CAE29E6E7416AB3F9 34820BFE537D77E551D5682AB8E4CFBDAE457170E1E60DDDB9B7D25B6E35EE89855B6DBB FA831781A6840F6F357E16D1B8782009DA7796EB2469CD36337A299412A33AF840CFA4BB B6CB6C1FBCE00400431F56819F8871BF19BC40901380417D38650CBFC00488237DB36B5E 6DDA456F288D75D4985940D26FA1F68C2ABC5270343D0828E7BD773B8D97BFFC3FCFA8C5 00102743AC251C6239981C0DD0385248432BFB7EAFA715C1B42C696708F8E0E9978241D0 A3D5938DCFBA5CE714EE308AE1920FFF440BDEC48202210A9A9A781E4487860E00AB4460 743EA372A16F7DCB00EDD9B53EDADBFE5274B35890C195BC76DCDA47A7B976C87182633A 151C52DDB48C2B494808398CBF1B9B2A8F496B4F71CAEE6C3D067D95F37E3064D82EF850 F56411BD633BD0269AA28C309DB4F84E9168A205F5A39FF740E588D62DD6EBA3D9EAAB67 E0931A40DEA530A68D9BE6EF5E3F5DD1FB1C95E70C2F57BD3A54C013C1E43D3C04E9DE98 71701C5116CE01C5CD06F2E3C4638DDBBB19A2EB60CA84E0438797A728F1A42334A00C21 FD909E0C8BECB191367B5395E18F9A97AE20905FDBE255A14D298EBDEE49CE13B6D2ED3C D4E1AFF031DA3530714AB75F7489FDF16A3B690C41DDBBBD6809F3AA6245C56915536941 F9C858575CFF018B97E699B0E2845EAD6D398E2D76C2CE6C8DF60BE3FC9E3AB86B2342F4 109DA6F62B8DE3E76BC66B7F3E77A82E50BDA97012350763F30C53682A427CFE4C11F599 79935B38A8E47DEA7451231696AB2430DC17AB5036C968E9B58D11A44B9F32769563C179 8533C66E7469BAD7BF7A45708FC9120C8C440D65552F4330DB8BE66AC7F7F4DE754AA0A1 7108B9641BF960FEE48094B5B217F072ECC4B5055C7ED62556EEBC7C3F4DC96AEB8B220C 44C30F72D6C41A60A23D80024B51B643BBD5DB66E5F9187990F4D8A109EE390910D8E320 FB9208DBAB8A6D67A8C5FEBC518488141DA2C7399C0AA74FA3F644B6048F77124F7E6548 A60949DD1C078CEFAB3D4F49F08C2C5000002DEA8DBC66673A3A59BC130BAB400AD75F26 A17AC3DE81C8D0B3844297FF106A3774F882279236BB4B99B602CCF995EC6BB55ABE4216 02DFAF9F172FB657F424B5C902B834B65DE0E58565E7E652452DFC79510413C649FC1CF9 39A747153F034060DE49F209BD8B056980E17D533B4520C8614D4FB112592E11FF5C4660 A5BA05D295650EC8AF864E221E77F64D533BD9D4D498A90044EF06170313F468654C52C4 7A170D639260880D53D0F04867D4318D02E1A96D840540C32E4886933221B4AB52911C61 704F9445B51A0EF60E785B1666D10B6675BEE18F9366EC096A33DF8AAE3199540A0B2686 2686500E3491C33E113C470B4AB0B0B055321BE70AA9D4E5603ACD21163ACDCC623EE728 096622E6B6AB5F26E75B33B13DF757822C93EF12FC5FC583A226618E73F3065FA6CC1DFC 8C91DB4F90A5AF7CC5F782146AA54190C9A8131CA19E48874FB956E7BD0B512BA2E8E1D7 1DB4AF8206D3E4AC84664EF59C588B7C2DCE0175562C2E450B9BF2902FE08C6124120CC5 4EEE9E20AD6C87D288D81CC22161DA75A7294F9BDA71FF7342968E8F7BBD43543023754D 6EA3B471F2BE4ACA887D6E8C135C8CEEA970B5455A1FA2A40FF29B5513CDEA9790336CB2 E9ABE9F29ACA9AE54551A7271AFE48224E1796A9BC1EDF158633D8A5058373D73D5B288D D6B090FA5114F6F0FD74B55FFD7E726C5B2D9A5CFAE60C5A52EF7F121CBC3E01C9F5DD45 8CDDE4CBA9184394FF51EE2922AFEC65E70C98C8804061C37958248E7DAE9F0206A8BC49 302CA45306B840C30B4C0501EC5A7FA11B329479732A343688D3B7893D75CE56B0E3028F C7BCA21F5DD6E669C329891673640EC1DDAA987F67B4C6838DA2016A2117B2BFA74EAA62 2ACE2ECD7B03E0C48F834825E097BC76C6D0F0972658703AAE3FD6EF91E5F2F18AF60CB5 4A87292EB875B578418612961FCF373D47B6E4CDD16A32D8BDD009C43A13B6CD5C4D304C 9D011AC6A79F6A5761FE8E40C2D504824AE258D6F7EFE8FAD615566527F5D5259680F103 89782A5D2EBDA6716C9C67C99EB37D49C7EBBCECB3DE87162B05B75B1462D30BCE66EA9E BF578E7ABD42D0DC4F78FB7CBE92F379DA6970F3467E2BD6373D2DD3499AF8F0FE17ADCB 2FBC7CBECAD3C464AAC568903823067AC8EB7E123C58D01EA30EDE360C7FAA5CB4C08255 4896DE095CF71F88E2AF01665E195EB95861A80BBDA3689D45D232DA8424A945C703B5E8 4EC37A8C99860C48F19C05FFEB4E7B47EC3F677C540F5C28AFE07F99E9F8A156195187FD FA8CD1402A7B7C850C4BBEC54922AF6D6E69EC0D573AE318D31E997D77F719C4804B1BB2 97FBFE21D11FECB3669A0330C6EF80B3ED0B78DB2334158DDEF2A574C8EE1A9E80FDB823 8D9F341D3FFE21A57879D8E1AA7A5FA8513E1A710FA787F28C2AB851D265092BA200610F 497DEB4B6A30F6159C9FF205F1EC6F9E5070786B38CF7A1C3EB05CA1978C10B1AFBD7436 9D8D3EA9642E492869D2D49B6139AAB9D6F991493F0728183649A92B990E18EBAC479951 119BEE96A9876239EA17037216F1D6F1254CF32A57994B6EEC5920913F1D28A1207045CB 33D0991AEDB71DE16ECE31B9A935AFE96B2D5C9536CC746D28DEEF7E06ECC400331F379D 6A01F452CF3AF65904B562587048B126FFFE5C6CD040F98EC4D89ED987AADACE6346DF10 8878598430D395A53B61001D49C0B641EB4ED33AB3A44A41BFFBCD25175346ABB61EAFF8 B4624244ECE2C0A3F399965B6E27AA7E462E0B1CFAC72D5DB8D5D3747E363ADEAE83DE7B 089D2C3605078BDBFECC146A7C6E5DA9DCDB5C4FF8EA510382FF41934049F2A05D2FADB1 912526933FB026D79DF37EA997E8AB29EBC9F2240F056A71B9EBEDB01163E55FDE914F2A A5D8A3EFC1436B6BF8EDDC97C6DAF226712578F2071013249F3A50AC4C4839BCBA7FC5EA 6CF59CC4497898BCBDFBA0396DFF0EE8F3F5FE1592F1BF053A08710B9BD354AE2169688D 99F1DEFF011DCF5A74F5D7E2ECB4D69DC7A7034BD04280B63E70540E6CA5BE876A57CCEA F7E3AB93E6E1B82BBE311B1A1CD74C509ACF36EF136A6A72ED1FB995E92E4BA19F0FA4C6 B5D3C1166EEF30EBF57DCE47F2AFA6DCD301FED1CD943B5783FAF8511D74DBEC7E65A535 2E593D81E56F9F2790A07FC58C6AC9AACEA4ADA9F83FAD9A354879E5B697DF3DD3BA62BA 5CF10A0BF9153D328BFFDF7A4AD281806633499AEEF6FF1C46F78A31B611C71549AEBCBE 2350536D39CB13647F8970EA77FD4B1DA913E6EF3214FD9031B23BA3A8F96709346B9310 01F2321FA8845FB2FC586DD99F2933E7099ACB198233D0BFC93B6D9F02799E57191AAF6D E3F64D6098C09EF51D4C6B41383A1A715BBC672C0340A31A7E2005DCD639816FBA96FEB8 18A225FD2FCECE7ED8199547A748A386E73F27E40752DE4F57A8CB1C34B733102ABBD486 BB0C18FBFA9480EE74728E98914C8AF802B1A0505C2660F3E212CF03650E71232A08DE9B 133A9BDD91C3832705A67B627D52982CF848585D5DFF60E5E378F813ED398E606055466C 5B6A2BA054FC17E7F46CAD095A6CC6849264306DCCD50E874B95CF77AD76DC44E7CA8CDE FF0EC8A139F5B5DCD29D53AF78057EC6ABF73A90B8CD8AF4AE72B1AAC2B9DD84A6AAC185 F9F816D82021BEF072604D5E41D1B4D7159FDA2B2BDB5A8B4D83B8F3BB9A87F74EF0F810 E80D7C3FB962DCF468217848E023D04C9C580A904EC5BA9639AAB711A499172B35A2213D 7F6C848DDABD2B2B74F042DAFF7F303FA9141660148DFCC4F82167DE890CA470BE9FB8E9 756223F2FF5B58C5BF57CFD8E9C0A47222070404A5AF6EADC5FC3541B5DA520F4370CD3B 1ACEE58FA0A58D20097E1A708B1D5ED45F58A8C6A323B42856077071E5F85719B099ABE0 F7AC8959EB61B7B302464FC1D510072E9D5B129B8A02835E74E8178AEAD594DA5CAE2884 577B4C42622E520DD6C0CFD7A726E5853FD362FDC85FDB2355A2BCD3BC3DC85AEEAB11C3 B0C29F37903AA4E4409AF8BD7D093EB0796C113D22152BC1BE0553FD40E7D8CFFF17619C 7FE12EC6A87449B53F0805114EEB0205ED6680C2F4E222A1B932905C83C94EE40DB2E05A 2B9837DD253F1967C01C209AAC31D5F9AE0D448ECAC72AE1B3255C1F860CCD9E645D1365 56F5FD1EC2B19E01F2FC43E2656BD47EE042F4BC7208C631F9A30765CC9881F03925BDC0 EEC009886490886CC1CB47E7B58AED55E471BFBF48340298887990213258CE06BFE43459 B85C92DBD9D20A1ACA4620C75A20AA65A6D03DF5D3B4AD23DF0A57D4F357A743084D8F09 7C76DCB8844F76C965FCAE9A895D47D5DDF5B08A56E769238795A68DD0EB9D057D6275C9 62E5378C331CBE20BE52ADA1931E69C3DEBE1FE69904943336CD01AA2D4943FB6E9788C3 BA6A41B4F66EA164541B1146D1DD5537FE6393D11773851A339644A0110A4C29F13146EC F231D53E8458BAFF0E2A78397FB87CAF7ABE49C7C9DAF0DEAC24551D1007A1539D8C9B44 402FCAEF55776890FA71FB5A98362B9FF130AC2D89B413FA7062AED53597BFE94F1A44AF 76BFC49A4CCD8CC2FA66CAC34B1C03DA5099F298BEC0B5D7603D684410950CD2B1827FDE 4BCBD526A7AB3D33D554140A21E50809326D40D75F4DC7001577932F68FB931B5901DC81 D2A69FDD4A24DE87B3F8827B398FCCDF0367227C710FA32C226D824AFDF409DFFE13BC29 1A5370D5F22CCF3F1FB6EA690262385348F8FB4F4443E289B83FB0D6F9F7EEA74231D682 DBDE975887EE498EC0DD19F760DA9CBDAD376DB240ED7408441F0234A79D33F0FEE5F904 68D10EFDBCD2BD5A4B2BC067AFB1B67205B9D3F253C0B613B12D98879BB21CBF1E66F3F7 905C65EBF8D3D36F45F636F024D9B5DE3030F30297D3A5E71013D345C1D72C6F17ACAE80 9C34A0277F53E4CEC34D7BDC8BE4D9781A2E14A2C9F06651F46B1C6F5F9CA3B53D21B870 479962ACDD46E8206C04B7C522A1126F85935F0E7AC6FF55556B51AE0B1EC3C64E015C8B 7D3B9DB966670BBCE9BE58982345DA69B93023DC6D586BC638658E651D95BC0B38CC1B4A E605EEC36CB9F69229574D2296C1FB160656EE7273EC391D3FAD626E57209BF77FCC8813 35E72C26676B353BED3D14C0E896D9F5579BD787502B166170E262FC4B91720AE481467B A310ACD798FFF7694F1029BDA2BC76927B4AA20EEB01E11953F477050B78ED02FD02BD68 EB652F3B84BD24D1067234DD83467739968367C2ACD0ECE28C12567C127BC1021B1E22B6 208C4C6C640817EF5874357AEBCA59D7C838734D6C4FEAC656B42532BE8036B552D3D5AB B29BAE08654BEDFDA83DE05A36BC210621D2D14CF5B5D5B1A41C13492004E0EE73D04282 594D2140CF6BEF6B3035C9219759A53E6B1445C13667865BD397EFE9D2F229A89D0C47EF 1F7A6320B077B64DAE730976E0B17A75897CDA570ED98C9B341CDEBB35D0AF1C15AE7647 2B2EA4FA588D2D9618BEDAFFDF19BF8DB336482F47BBCF2BD7AB1E8E7AD9F24C21342655 6F711A005E9EB84A03A7863227ACA65BD638F295C157FEA86579C1E03F21D83C8B5352F8 BAA47529C4F824FE5A4F44DA17E7BB5ECDDD195DE5A2911CE29873170A70DDB13ACEE713 C3AB2285E1D4C2C560D86CA69D9558CEEBD4905FBB794313977B8A430E847029384832CE F50542A325948CE30143D4FB13EB7BAC0E7123856866558224556108B1B3BECD60FFF61F BABB2AA95E5F8EE7485649FDB17E72A030AA06DB22C25FC91B7D2713B27CC5DB984199A9 414A7D46A32D493D58C61ED1A3FCF01DD33A04BB0183242504D82AEE2BD93DA010505C71 8824BAE4AD2D52E0334F6583830F821A3391E7123FAF13DCBA53E31418BBC77D5CA0ADB8 6A7BB8C3C30F023A1EB52653E2CC6BDBE5647AAEB7F09C06EE25E369384B3F1F62D9D374 A8AA2EF193080FEC8B42253A68CB9787678AC4D4B207BD0C990FFD812D41D2FDF68A8B1A 85C710BCFF1FE4B100C21D53CD709A58C366574805FAE52C8B04F3DEFA0A8C30F1F53D80 BCABE1E1CE6BE3241929EA9A6AA4A56E28AF95F0354C46203E1F91CD4B8CE82FBB784400 2D45E9711F2FFF7ADE098BC66F10D656920225FF718B44354E33C7F47852934B6CAD697B C2A13CF0E15D7B0DC82AFAFFCC594E481817A5D40A31336BA88E8815B92474E5CA3E9DE6 AA1212EBA0F1B02533CD9F0FDA9D094538E04F3E4563524773E18890C4C3D8DB09232979 A4B759DD312E80AF6875BDC008ECD7BA07C2C292682F3A96F5CEB60400A2FF20F1BFA209 72890FC20D30BACDA47C320671038B73A4FD7777324E0C6210F50C6476B392AA773AE39E 103D8BF9CBBF4BA8DDC0F35290647266C4A73E81C90441975E49C464FDB3BA71214060BE 0EE6810A58CE7DB7B4E38E6A0866C30C5F58FBC79452A9068FFC2FB39DE167B3EAC35BBF E70E7CC933E996B7533520F9B71736FFD4EAE54544B5F934646AC49B7CF46408A71AB16F 26074431CC1698154670B68177F3597345D14EB790B223561882C2691173347B597EE262 82111E641B61ACD510C82A7F07C0511CE515FFC9C1FCEBAA153975D831EB75917A9E4EC3 266BF4BBAE1EFB6E690B8379D035EAB7360C5E5FECB64A032300D42A1B8548388570C272 1BE79748E2D00BC593357D92D94A17565957B4D96387C8337ECF9297DF6AF1EB4DD80268 B24A91FA9CE823892E406875EAF4951FF4E0A39214FB60189F60E920B037A4E0C54657B2 85CDCFF1B0930C7DB3B8BE508CCD7FBFFE5DF33D234ADC075AEC56295F0C34B1A728CB76 E76908B208593AC21DAF8A3D333CD101CC154C3511196E2E1143775E372368CFA25E8848 D1D2897DC32CA49740BED824ACE201EFFEE5D921AC2FB60ED2AC486CC425D3394BE98C28 BEF8E6A29C9892A6F46A597ADB6F5CAE4E31116791BDEFE44B2607C9924C80A6C16C4B43 227D5D73783BBECC1302EC5DE26CC6D324C09229D96791107D14B7F80ECF618D3E24AA33 68E7EB9AD2884EA2B2BD0723B10E46109FCC2D387B4ED239702BA70A5C73D23213821734 1319FAF1C2CA0A13C0783A89D014FAEF47A0407CC8B85D6965566854769BE421C05CA899 B5F2ED5C8360BB6CA921669F61EAEA0A93581F34D445647981C38D0C2633F82D37D5EF12 44A5C1981A51B8BDF5AA3F047A0A9F5CF51015BE94858494118D885506C8C83C48BF5DC3 870FFA59DFAAA0613468F88582C58EDE5E7AE80E32DEE94A021AC0D85C90EAA26075829C 89416F84C1C2BFF7153787209C994FA15D081E28E2A52F27AA816F7E63CE9EBFA459A8C1 744581CFE42F26CCBFEC4DABA0AC1F3E7ACA49E29255AA4A28554B082B33EE5F3C04FFB7 4246BCB5B923E47EDF53D06CAEFAFA21DE2B332472899E7C0FFDDB9DD602FF5A3701867C CB10960A8000EBD68C53604DB622B636A74C296FA79EF749814B05CFBEAAA6D8AD48EEEB 827CCD7F15AE3918FB062CC914837CF41A511DFCEA7D3A9E8A42109081865FC1B0EA9363 82AAF3261E15D3C52DE7921408619D44E4F852C508525B92131424D9A91EA901A45363DA 8079354499330274AB62B14382A4819BFCA168E848EE6881B8DD8B3D14ACFD46B6FE4A6D 16B2208CCD46BEC40D9540E02A6A44B409E356558461DD9260CA424CA80B4C6BE74CF353 3E5807B1118A4871AFEA603BF93F6E4A21D0DDC41FF2AA39026B5EA6E2337308D3A08E84 7EAA38CB6FF5CBBECCA6B245A5E5E24BB985A5BB82D8B63939DD0DEC7DF2F5A12BBFFC4E F604448F36C605B476DB9693BEEB11940FC026C833954F889EF02CECFA677EF238EDC93E A4CA80575BD891165F4AAEE36737623B20FBBE3AA25CF4A9EB8C10D2BF8EAECDB5612BBC 9E4DA973A16995B149EA844E919B9AD06341A582F52BED55412F0ACAEEEA5DEAD5D4FC3C 34C2C5BFFC5AEF35F0962E3414856183F5B5DB30EC3150C9EDA23FA762E304D43E27C1D6 F9E4A95671D1812D1960537DDAFEF902B6DB16B5063023980029496C9661C88B5D2F1779 E46E628BBE875DDC908B4C92F91219AD76F09B6DB4AB6157CAF2F63C2B852432E37CFF0E 4A26B2D8D1689FA5DD303839E12375DC8D27B88A73047F35C32FC57589F6EF05B31B4E07 4FB5BBCBB7E2737717A11CD8F0E79CA2FA2A4BD773101D762DB3163B2BC8E307C533ECBE 95B77C7928365E895AFF0AE38DD279870E74CAA20629D04C96C9D8D28029B9BE5A801FBC 960E12CE12B3BCC280FCABB5A7A667B15637A320D6F3C511F02A34F616500ADD4A3496DD F7FE9695F818A5442AC7264B9CFE702102491489DFD940ECD83F28539BBCC7D595ECFF42 82AF13E45EC5A5121F3599BCEA73D3E7B7C27A6B8FC88D532840B84162556534E87BBABB 001C13BA28211C1E48C68BD5B786DBFD64A866072A1BBE6F1F03737C99840C79E1CA823C AC4510E79A9A50EE138B10CF6B074E9189CE6B209FA01DA2C9A435835454E660CE24E637 30CB7695DFA532FFFB19B632D89571FBF59B8FA5F6B5E8890F8228C0CDF512DC56D68518 1BF49571C050BEB9EB08B3390ECA6114587087E6BA0A6B1B79342F0E95E388B6A88CDCF3 DC3D294ED62AFF956058E92F92AE374E5CDE38322A34E6235F4026E8BD29B307BDF12657 36159B129C19E7D8E9AB029237B61624B49AFB80936F0E5549B6DAAB15AE8FC2F693742C 43A84A4D71063C35BC095A4C20FC5EE397170BC4A0F616F3F821DF2A11123AAA36D85F12 DCD5DDF4C9F73AB5F18A5D4B9B87C5D66739B9BF69F7ABAA927193C50B1EC4B8DD9E2AA7 181713CEADA0C2A8EC684DB08907E69C31B6D4C4FA6FA086FDF9A3CF0ED3966E54015334 B77E059E2C5A1FEFAAD5E4FB397FFF702F67FB91222B31B88641B31C1B22FDA489B84C03 48130C11C04BCC79DE3ED3307EC27BB28CEEFF1B175C6387981103657B586A29F40E1CD0 A09FE4FA0CE508341F62DA4D7A0EF5E30F3F595C8A4590815C00A2698FD1B239D6F1742E 28BA30778B5DB03FCFF3CA4C45C9E240AC83824F95326BD0B4C9AD8D0184A7760A8067C3 1F95CB2777DC4EB19DC12EE92CF4E20903B00C96E7ED4F2A445943DFE9CE3586910CEBB4 2730E91470BAE320094278D6D87CE99EDAEA2106DCAB85A25216C68188D5D11A9C479F39 7C71AE4DBC94AB788452D5B8D0F74A87EE66C797BC80EFA9C01160F93BD4F9F1F60A8D50 67B9755177473FA3E3440703D0302450A28252596BD46F1066332522CA01C3F0E50346D6 20AEC5B1FBD83E90392C435AFB05A88C2728AEB46AA897F60AA81D55D2114535F857E703 DF0E35236D9C5202E868FE62CF14D19ED0C6269DE7CF88268BD4342738734B61F1B9A91C 78380ACBFA7858D19759C924244A8E0F48F85DD1D05755DAFF929830D3BE6FB57A4579E5 E84393647132092F7264E46E2DB54FC825BD5FA5133F927A2AE9B53B618F440B37D8A06E BF28C5C04C53F0EA9362D833271C8AD0EB322D08F0C894C57970E1C664FAFA6E9C739FCF 2BD3CACBCF97685B547C0374C91F6FF6F08911895BE9802C96B04E2EC1D056F1478A2DCA 0B45FEC21A3775F64CBD11DFD8E8E931A65DC4887435504231E0776C7A4B5BA982AA9B11 C7426FB3C612D85BDB4B9ACFB20383828DB9B139BE229C3187E35D2904ECA0BAF59EC3DC E775E763EA2CEA79FCDDBEEB415218C1DF1EDE9855367188C1D79F0F80FA71A00F92F8F6 235AFECE27EFAA8199EB4266BDDF1CB329AEE07C246DB8374BA5AE2086BBCDC59A83B722 B1FCB5798AAAAF751D33FF670E2AAF6643B38BADFA8E31FB6EB0953A41ED9D179C2D3A8F 3A3CC0C68CDBAC4906B6BB0800C886CA6B15B40E562F8FE88FE9E2AFAC6A7276D0FB6A0D FA14BC81D1A03FCE1BEEACBF5BED0E8CCDFB42DCB1F9BC39E31C13A0186D9078EE63C46A 71CEC2BCA47F34437F4C9032D02C5B44DB9D16D2A58B96E555159898F98964A442C6A425 4852B301A98B1A41190E1A0D7F1DC153B328B69846D0B23464C78E855AECB7BA8FA8EDC6 B7353DB4CDA103E4C64F9D789FEC004FEE85A7DBFA304B52C1E56F400ACFA60374B8AC3F AAE8A5F1BF35C8C43AE8D66951C778E711A11505E278FB55B4041052D5AAA49314143F62 207AED255A741846B0E20F89709590B28D948D192C4472A4509736C98C73C622384C8B20 028267873F9E2B08E857E0D4A38BCF3E510989DBAEDFADA11055B00E273B24FE4A747F42 1313B017726C4381ADEC46C298A9426FAF95881D57001AB030F59E8CF03DB84C10384B7E 0FB5CD281FD3B234D9CBF9CE6D9C9E8B5A95B26C8C8F9AA75B442ACDABD039A26AF45DD7 6DBB9EAA7775F2BD0D187812561D25A3BA7D06F7EB97C72162AB22290875E9D7BBEE8ACE 6D6B6471AA3022B9C0DE181F009BE7180D1AB77B2B75115AF839072AFF81E2CC5D4A5933 59667B9B18000C9C79E5DA59259F0290949187BC0A5D3A4F10999C4D02BAEC419D216345 7AE5F27F1B85B2F3EEDEB2199463890D0E50C1FA84A22BC398AC5980B2D69F09257B9155 1BD97D7AFF6F0CE49F77D4B8F3BAD6078E3576F9D9D8D94CAA01D18FB434ABC362168FAA 27FDA8DBA0BB096C64AD53DA5759EF98B419016ED5C10989C0C9500D3CC0F5A950040873 3213A528AE26296E75125ED21A6CF6565F9A777393406A7629A8ACE2807C925FE115823A D4BE611E5D3DC33A6C363E3797D6C2C79ACBB56FAD41414A5D0A12001BD0CCC94FBEE73E 6759F3507608BA2A16F7C2BC9A1CC7BFF1C906F5952A9C1EE55FDE1AF964D2C5BA0DF00B 1206E4E5AFDDC8A140949E2A3A329F05FFB3EE4DBC8269578F2554AFE9920D435F7CD2B7 A1D3BC76A205A12D876B36EB1E2DCF55C360EDABCCFD9DA6CF1C44F17B04E21CEF9DED6A E238425C65A4CA35608D31BA8E143E7952A4744ACB7F7CC8509C458D7996FCD46E4A47E5 75C3BEBC20ECC87D463DB4DCDAC00D0A7B32844184DDAD29AFC91FA4E68B4D43DDA2E648 C08C10ED7A9042E3021E1D0519B318570BD822CAC1DDC3A9F73CDC063B42CBD9DC7CFD63 6A8113B254C80BF8321D4C765AE6AFB5C200C42E39B176EDAAEA36C7EE7A168269AB5DF5 8EB1C3A2D203CEEF0D4E57D9383B4DE4D44F124318BB378A51D68C0374CFC8F1A123DD04 F6872D8F248CC253DEA04BBC27E6710348866B2EDB4628BD6CEE24736BA74BD0C50A9F04 1475152E9F03CC6DD7E64CA55F77D337EF51B11738EACD03DAB5DEF1C8D515F40C3CE625 3B0CDBF2A0D930091C4C7C958B11BADD82AEB85A587C04D9E655B5B23178F2238FBA2EFA 10601E3A9ADFA6716CA2514F48C5BD4DD92919923764D4001B3041E1E54C76B329CC0958 CCAA2580B37500F539810A45C0A59A3F90250E319D18A51D89C6FD11E321BF8BF980B9AD 017989C320FF3B4C56EB09CD4431A50910BA98CD864B503A8DE53569BAF890631542645F 260B9DBB85F9879DEA225C6D66E8DD9A807BC61201D01CE6520D5D1F7E05FBDE3D019C25 6A6680706F6A0170A9DCE740367FDB53601310BD23D7F74EAF172680EAB7A3D0382DEDD0 97CF69C00DC52EE32AFDA48AF04C3BA3496EEFDB5DB05FE470D651C73939BC919005C11F 366CABAA10BBDC4665273E26F95C3B1836BDAF81205C507D3793A7AE9D4B8EEC1397A334 6CC8F9B5A9C96F21E7D7F9F979F4D00D82B948B091A807EF71DDE41B89DB9038C02998C7 9C4E8A1F35386476C00ADC783F1DDF55DF277AFE37028B916EF70E8856A6854C974D9A25 94D4AE224840703C5E35D8CE4E432BF746DBEEBF7B142F077D40E6A6F9B1FC144C10E0FA 7316045D4D77E2AF610B46243321899D8C63A3A69427C80BD20F255654AAF4E19F874B09 020725DE01835F8C1493EDD1986E722E6F1B0440595EC915DBAE0D329F6FEAA3B5C3D57B 7A959F48E8C1DEEBD53DFA0EC87D499F6F4F7E4C9990FFCF801C6E65CFE55EE005F196BA 459929DA051BC38DDB7278B3EA744C30D99F2C893DDEFE5563CB3BF8514FF29DC7B7E5A5 609C2E06454BAB402DE94486798A4792F08F28CED7F2798A824AE473CE490AFB7605FB7F 6879A746A2CC985271797026AC6EF9977297C44C35CE906BFC7226E1D83986260C718ECF 7A1E5075D535B52E8AD15015CC7DD87B059597F63A281B13053B0E1C9FA5BC5F51A76A76 5B21717F85C8DD0F2D4CF7EF4D0E61CE890411CFEB4737AF5E7C2B409A6136B8C2E78A08 A9516ABCA271B8C9C424194E3D19ED6988F1AEE4BCFEB4FE90356EB1054E7BC77450E3AB 0F006CE4ADDD5DF6CAC034C21B8942251BA14C72075CE01CCC6B8F1C76876CE4476CCFCB F3559191747B366D59DF369E87F69E270C89098C33E6E0560D6860117246A78E264C732B 9C1C30B44A3662F9EDF0180A7F818F4EF6CBC6BB8605A0999DD3042B5337D67F104994D4 CAE0DEF31E4693EF8ABBB43D4F0E2F1C14C7E3111E8156041777C2CB8F162A1A7CCE22D4 EFB917AA7594DBF80ABFC523DF1A10F5BE3E119673853B1AE839BA27C274A5C946BECCB8 C3E883A5A8861803617F740DF5D606F573C9B4B79AA1F3FADF007278CD99E7F683C6C83C 9D9A2D7F87CABA4532F0A0562069AE2667369EC693E21CF8A9C3C817E911E94484E11ECD D18D877AE1074E54944EA79705F54E18CB986E758F68FE0B330EFB8ACC904A486E910602 D55AA3A2CA1011C94882BBE46FF02605D73044F1010CA812FC5E8F1EE2187DD84B53464E 440C574DB605430A7B85EE191B31B61F9E20493C3CE7DB88941CA2BF1FB1CB5E3F9DD63C E8E3B2B3BE7EE0E802593274293BC67BBAB6202FC8D0DCF18B15A46CB9115CFD0013971F 9B5F198669D871A48329AEBFF3947B233C441E28A0E74CD3BA653F4F21A7B24B27866522 91D07FF66C5FCBEED1BF9F524E1F288592DF43B7A443F77C35148D0B3665255116056049 8073B1AFF43574E157F0BF29A2B56BB322A198DD12BB73B7B8475D70F8B487B8275EBA62 C878C2CA9FF07A9AA6274CF5053EA1668907D657E2FB1696423623AB54EA418F405A1D33 BBB88AD351BB50872011FFCDC4DC9511E3D86AC4833607BC8AC68996718FF9078CE8632E 60DE17ECD0A09A9BEDDA134ECD22D7B1D18E60FFA0774542116B2C351A79BD40E2F0832F C146DFA6A5771C8DC1A7DD366D63FCC283F2441575F9914CB91B407D927D75090A101223 678C505C9FF211E37EEA7A31D9664730F3B78F2F84128AFD19878093AEC09FA120E400AF 595B963DA5AAD06BE612525257CD64461C2961EA4031DD0CF41E739F32FC5FBDE9CA33C0 10FB161BD048F505F3D30AE47FCC685F766B5A5B42466DC89426691CA35840AD5F2369B0 865902DCFC48E07F93C392864061989284046F1BFF64B4A070D479A514FF6A9C52B83852 594D0F58D999D4EEFF46541D5E9B390B0F36DEAA672E4220D1C18CD61BF64858A4E80E16 9E2A697E0E063F179D5C602365267BE6788424A666351CE1824873669A4FD6C0F139E2F2 C151E8B63EF910144F0B1C5646E60C6CCDA2181915BFB45DB61D83AFDBF7A01AC1C555DC 3BC3C8DED5564890526F0B1CED6173E3D68C422A11242BB7DB6E060C810B9FC478552494 0C970B1F2EEB99BAEB414E34C69C09311E46AD03444005F971EDCB922BAF174E9CEFEE37 8CFAD6323C2B78BB403B42EF1A0E9DFDD32D863D576ABD1B690F6F8D121B41BF625EAADD 088C0A73FA9CC8F675A5D9C85CA3EAE9D98C68F80130806762B86E6C442FBD5EBFFDEF7B A2F2C150D881784FADAA80FC40705FD75D6F44C9095A56DF82C6993AA13C974B2B06268A 1C3C522443C186DD8CC7DED7D115E317FFE46FEE5F58710957F4AAD278F1D60FCF50CB1B 7B1FA3031605AC86F72D01C16B75A7520C9D74F8510D63AD386BF5FF5A580FBCA43F9E2D 06DFEE4CE0FA7D582A582D03A48B9FB62B0F24413ACF6CA41EA2678BBF7F4E6DEFE09864 288548969F381F36B0F1E6E1CF04D1E38EE84B5003BC2BCCDB3BF5EE7A3BDFE06DD1C4E1 C4BACA6C3B8084C835B8373D87384648B9F5C2946D8F5C99D1613EA1ABD516DAF1351F07 E6C7D345BE2D28750322B18F32FC1B5176062157B3F56D39084DCD28214D7F101C8C8985 8DFCE8D27F5BEF0C1D8F9A414C76991F0ED4C1E97998CC3E95CC7253D97FD47F89DDB81F 72402B3D1F1C6AC17C6A576F192D8B5773611258F7CF75C06608150213EDFFB0F9AC8BE1 C6849BA8211A5AB2A2FAC981CE2E5525B2CAA4FEB76B73B41756AD31C6618D0F62AD145F 8292C971E96FB38FB92FAB40B1B067414D337450B931E6F2C37D4C3536A4907375CD9872 395C45B989A83B601C52E9307D057A39A4EB916E2856EB057F7795DFED72DC3402F20EDE 35A52340BCC0650005552C3D0496306B6AC56D13E3BD0EBDDA0033B4312704DA0BD811DF CB5E36F8C7A4B9BB1A7A9D57A6BE227217E70104FB3BB36490340903B9B7133897C74D79 90DEB78795C90E7F364C40257DB3B1C701B24EC16366A47C4ABA675AEF9E000287BAEAC5 D97A28951AA357E39D19CCB7C24A7335155D8402F79EA0AEC97085F8268E322ECE5E3BE3 B9B851B5DBBB004CE0955D5D13811004944472CD79F02FEF7B668320940E0F1A900F5955 CF54CFDB989011006565FFE992ACEBE39C1A9830233F59124CCBCF4E9E7CB27B1455F790 10E7764FBF3A41ADE8BEF85DA30481323DCCFBFB2B9D1C7269FFCCB53FE3EECF64FDB616 0969DEED1FAD9D9CE10EA341AB203AA51796D05602A223000F621A6B803078BD1E611DE5 B77D62AE5E492BC29C91DAF3D6B5D69503220504579BA3744EC71DB894A2F1A388003CD0 71B992DAE3D38B50A71DB84F6D5F620BBE24DEBE93CCAD0979E9DD3160BDF77D993BE3FC DB13F6E5BE164C86DD65B55CDF560FE7BC9777FE700F9D3A8EAC08ACA8EB992791F86FBC 571B9FE6F8F10D8037579EC7F57BB22F3E4986F9630D0F2436BAD294D1E6690819DDFB3C 3DF4A88815E702E48C357CFE5646C68A79483A1CDE8CFF814DB11171319287C00E80206D DAD24F9CDDEF2EE18B368F1F2FB79622240B08F3A972C211DDF7968FD18D504563515C9D 08AF7BA995DB2E334D225A6BF317F370A34079B26934DBC7FDBF0C4148D169C4034D549F 449C297EF0FEF8D6545CF20072EA709F729475DA81C16446272980130839FA945FBB6BB0 844BD7EC09B373592EEBA3C9484B8A150505F6F33A0CC7C1D8B60BAE481FA58989E624C7 6AEFD49137D608B36B9071E76EF18621F845F492C830AC080A32F6D28167B11E1723BA13 1A8CACCE824A5904E5EC5EA6514CD098E99218EFCFD4EFDB5F3F7C3B413C66E78F0354BA 97A19B5D09DF7081CC9A8AD63189D4A67962D25F1AC01AA72B6567F3AB7BB4D7D6E57D3D B56B974BE33AFB01DB6858F94051718B857FE8028F78BC9C8CEA75CAF4FCBBBC451B3397 AD59BE1F3458BD40A5920D14FD197AB88E7B8CC208D4647B53EE53CA9BF50434FC855170 7CD99608E6F2EFFF3071703D3E0C4E67246FDA699240F7BBB21B1A209D5B270FFDD41BE3 AE0DC930C77C3088D97E1DEA3BC40F977F744922066906395BB903EDA9CA49C533BCD601 96E6F5F06FB1C0E1182DA3E6ECA1DA49AB356C57AE39928FFE8637EEB01399EEF8AB275C A76011F0DB4149F2CFCB7A5001A159BF2B0683DE595058723D302DE80B9856972DBD6CFE DDDBF988C26BA4F8442519F5B323F3E7A3E8E3DAC2A1BB268B45ED44EB6333FC34B711A1 88C3E2E7C2AC0475E8835E0510AE9267EE728B9DE6D769847190C2B62EEBF43BD40D587D 7380FB72B7DF9110CEF697AED0270639E108F47D39505424BC4ACC5057D49EB3452A76BA B548DF2CFB8241BD6FE52F402909317705E9A5052C88F876006968C0F828E546EE2F9035 C84BC41608262C0F8081BF4FE13CAB9636F62AD2538580198EC06C17EDBF85A5EF95DDC7 E8273D2719E2E71E8883166A3B45FF2CC6E8317837EC82E52879081B2D887560EEC042EC E1F9F46A4773C4DD53E0587000A86FD12D9E5A58F1C69EE62CB4899758E3E26B34DD1F8D 25EEA99B09A9F6C1A4E4AF39D8A66065E5603E8694C4F8023029BC85E015250AA95CE869 8B78F7ADB5101ECCCD1800BCD11863BF6EE35CA30DB963B235D13940E1ED08A4A0FE9BBA BB3FE85F46EA4FEB538C57D5285D39A82159F4688E0B3A1F6732D25AF6AA22C4363FDDA7 71436465D1BAAAF148E5F588F039D920AAD1EED02763B01A31A664E116010F6649D755FC FE287A14D7B8B2DC193C85C022C8B4B15F8B3887302DA4B8256D18825112ED859C9677B5 6A6ED991498D181920163030C485267FFBC0735D250FCDFB6C3D20E9375A8AB0B2B0C01C CB36090424624679B16B2D99997A8192641909230363374D557E705ECA274071108C11B1 C92D5C3585EF2219AA6D3D1313AE8FBB4E121FA2AABEF472C3E93DD7C4F9CEECC823EC68 D1702F7657B1C8D8EA96182E5BD4581BA1C5E74171CBA7E7B4047A747ACDCA1FA7DBD489 5EEF72CD81D568C92C192686D3711143CB1FCDD7DDCE389D482CB59BB2BD50695B9E3DB0 490A5E611AB1CF83216CA1BF786F172B990DBDC1575B5DDA0CB9CD895F880F9051D3B45B 57AAE5DE0DF92F4F378317B84AAE7CCFD7BE789F6B369A73447911A0A70702CE25D9596A 8F111FB068280D89D0A68F4FC34C2A6000774D10019DF0CE833EC19E128DBAA24E37F269 F40140884782E788B1F893F89F30101D1C3ED185DB074E8CAA94A490AC83F2BAFF73ACB6 132E860217ECFBAD211ABDDD6AED032DD346CF1087746874E4B161F7129109C5618EF86C C76761F243EA10675E2EDD0DAD6BE486558EC957955E386423E003E9CAACA4E58C9B95A7 ED503A36E21F7A7499C9DB1897D6658E1F5D334E488E5CA54418FEB1A63D297136FA9869 7E21EEF7CD2818F4122CC6C5F259BEECE199D404C1854426E888300074981DA8EC6253A3 297A719082CE996E4C70EC42061FC9E7F142371B247F23930D90A93C9B8C3297359E2311 877F76B3B81C98DA0061B0E8789DDF12A96013DEB575E2FF25C6355F74343665303A5784 1A97089E286A60B56DD407FBBA36FE695382ABD4DE33CD209BA06E2A2C3CAC1954517D38 76BDE2817C18FD25036B735C64F9079A1B421AED44D352D83B728294DF38C46A78A99E27 15E8CC4BFE77F10F98EBA83903FA12562FC7EACBECAE69B39084BDB5527FA7F4021D173C 13674D343608FA076C75A30E4F31A3E425360877793B7E5219D4CBC18C25565B6E971CC2 995B8A0031C6312EB4DA0FC47AFB3C69F9AA69DC098B899031C48139ECB0511563002DA1 AE8912C120560F7838D6D81CC6C5E5FD4A3E7CAD5CDA285F6F66D66A893585106BD4BA65 EB5191E35D4BB7850B068E3CDA72438E73A78C028511BD252478038AEEF108C08C9641C7 335096A47F20D07850A46522BCB9B3540125EA5254BEF2B81E73FED94282E59F5CCA38E9 5C24104619C4286DE9799D6774D29C777378C3CA4D5CAABAEE30AFEB9451B066C774E524 3DF07CCBA0D6CE1B8985EA451EE4C5229D0D48F9BCAB243C1056377E69B60541F0B14AAC A1FD7C0545655AB65D85608DFB12DE869EAB0CCD8F0E8F6E94F443B161C84D57C75411F9 56DF86ACA5E80BC6D5858B971438853EC0A3B61142BC4CAC434FCA251C5778F2CFB888BA 2BFD2907BEFD88FBC86AEFCD0E0585B82604684C84F6C707B740830260A97E63881C9663 EF6E9E0124532761A82924E777E3EC7253D5DBFC6AC1A91235744AA3CBD42343B5993655 498E7A991ABD4027CBBE9294EDBB86636E945503B46D27C63FE954253E1DC64D99C26580 5D2F21D5219D0C82CB8E6EBD55E286C5CD56CA8B0E79C9D107053B2B5CE0959140726E15 6300D78D5FA9A90C19E44BC63BAA6E548BCA1DC428EAABA8B7B41396A2A91798CF95C5BE 92FA0C3132568DD37054AE73F3FA94E59560C63B9BC9473B010B57F945760F0A0262FD5B BEAAF1D47018BC12469DDCC0AC33B6526A75CBF90D0FAC9E6ABF2B0B3DDE8B0650BFEB9F 9B3F6E2EC82DFC96BB7A4C7E5330796604E6FAA51FB383225F984593462CB9D5D63FFE71 A66A64B45A341183296B41CB415B94C3BD60108A7104A4FF6FD3F30CE1B3CA5F4C1C5264 22E953055EA0C0A985789198D57EA50918C512D70E9CB92F9FE4A85B0FE4F025B3147D18 8FB79CF3C764599F0C59C3668381C088A77CC2502BC6EB28642A5970D4362832EFFF5FF8 B2B97AC76DE788D61F1B681E890DA0D77E2ADE005098A41A3C0ADE4CE9268663875FD69B A5C553D4F931ACB1CA9C0E9778B1CBB4AC984CF2108522731E45FFFBBED67BE14F53D880 6D34B81D035D323367877A7AADAD59BFAC9BC89EFD733BFE45934FFBB31DE021B279BD6B E1B8021B5FE3D02C7A0C2E4354C9E2916B565D1F19E2FA522FFA61DBAA197BA6558F86CC 46BC0C97D502335ECF46AF2589824D7BDFE2ACB1D8DCB274651A2D3449081DBA6380EA43 E357A9A11423E46688F0816AB4961E212DEF5F0FE6529F4B5422EA96DF5AA12A32069DC8 7D595E373EA5DDF483D228E16AF19EEC0AC89F4D8A223FCDE189E437D62451134CCC1C82 64AD981C5898EE26A7B21613F793EFCE8EAFE1B3A8DE3AF5477CFFABAB248D73F54D1CF3 C69D0BF0632D4BD31ECE55254BAB34D0DC63524EE8A721D2E57C303B3B5A63DF8365CF54 89AA7EA6D12824D5DDEE85439B25F123848C8A71CBD718D0D5E1DC8341E1F29DA8BB30C0 7F55215E8E91069EB634CB07540AB7C25FDF6850AAB33728D7A85C233315B381DB0D2513 9731EFD19A8CB3D5DDEC4882578F7250D2A2C7C574A861BB5F118982C7D0E397C3396300 E8B156EFA6E3C01BFC0100E2FE00411D2868310D9CC1FA59E18E729D7D634200B6A8ABE5 1E77807FA395D7533E80019AF9CECD6F9399D5EFBA3C4EE945AB1AFDB282264390F396AE 1CA6B7F8B0FBED45C6C2B237759301C527BC14871F489FA00EF09A724707525390ED18AA 4660036A49EEE40C3863C973FC9CDCB8471B23774DA11F1AA7A3C32C8CF91E91DD5053A4 9B2D7A6FDC95F3BE4F79A7D258DEDB8D8B95371C5808915D1B85CA34B91F0A6BE8958CE2 6FDBD6FC9429A737F823170193678C2F9DF632CDB5B9D592A05499A62299994361FAFDFB A6D83D4421D9B52D7FB649EAFC52308F4AA09F4335667DEC75BD3ADC4F14BF49187ADF56 9DA64AF4A2FE0DDBD9771F3EF8EDD2BAB33E5389915996F9C149A7C385427A831A18573A EA347D7721BB16D795FD8E0A7BCFC9A44E357A626003DF40165CCAF867CFD217201DC344 778549B7212BC789EDBEE7C7011A873F359163648C24891C7669936FB54DB699B925B2A8 4E0F95CE43F44CFB14D7578AE61ED3B22C2FD5EE1856EC1620C069375D4A29E284CF722E 6A683DE8D7214ED85FDF7B9FAD4D7D198C25D60D661BD54C0F3E8C79DF2F6687FC5E353F 6B4FFCFFFC6A5E3AC9B3BEC04200C4837C68975050319BD8AF075B50BEE38A6785AB19E3 1C9619388CC763AAD97F75F3156B3E09742A3932B5917B36895655998CE61833E6C7BDCC AAAE6526292C56BEEB91257F1D7F6FEB1BA3A95B12A23992482149E7A7D992A350AD750C 7FC9976519BEB670C6C4CDBAA6B10339EAB7A37C27C0BF0D786E47743DF00F539A4899C8 F91F5592BBE9FA9E0A558890A5656AAC7F837E7F9CA44202C9F72BEE138BE62352F47404 7B59A9B63CB4A24CA358B9ABB3AB934119F10A27FAAC0EFFFE447736193E51275BC04AAD 652E2981C8B20C16954C3E9D53C0FBA1FD0476EF908F1506EFD675F804ED40B5FF8CED6E 77DD0EE5E5495F80E855F9655E39E8209A40F746FEEB19A1C76848F99B9FC93F1D874E0A 877E8B329AD2F4F28F1AE49E9F1892CD273390F299555E3454BEE540BC66976BEC6E0503 1A5372B112768961B2ADDB3DD4E6CA5A718812EB7121006BCCAEB1C15A35E11A50F0D6C0 AFF295A5B83C271BD52C20D9F8FAFFD497E11ADE45D60C3747EA7F911353D747BD9F21C5 51753FB8CB163DCCD47017F0315C116EFD8368741EAEDBB1DB37CFF5C26BDD47489C782D 7A1551264B6E0C27F401F53B90413DA1DE670C1CB7CC400AF2369CBDFEAD2402C4D3ACE3 8EE4DDA2D5EBD02E834ADCD2272889E09DA548DD6BDC3F97C038649C08A8F94726080E6C 33C4F02E9A1305333F41FD8E1CA5199E5DABEEE9B63F089300032A2DB1C9BD71A59DCCA1 3D83246A9317E7E59E8CAAB20860EFC63233A5D979CEEC061569C39E0CDB0785510C0D8A BEB4D66047625BF982F63900FAA3A788474E23FB1656EDA76F20C96CE80019DF6CEF49A8 C7C416F44B44770C611A887DD5BF9556A61EE47DFC9698310C9B0E028387E282E3BB7FC2 B648271CBD04F4ADE3A1F8E8AB616ABA5C40532B9DDB23C73294B6973970CBCF6CC333C7 5E802BB169E19B623DAA6C41612303F02F3EA9C2A8D9154CEB80E4A45D9D16690DEA0713 071727AD7E5876F9A3889969022DF199E08D88993460E124C846ACD401DC8C6EC0AAA521 B50C2D1473400DC364ED6570C43830419CC4365DDCDBF895099AF79C4E8900692F4D1759 67B7060260979110776E59782A16B3C51648B2396FB9174395D588BB59B16CBDDD4293F8 B0A465D0489BD96C8E65C313E2A4606260E101C66D5EFC73DDCA965705B05ABA467B0088 D7A0F2F9565A657EFFD32DF48072697B8659270CE8D03C67EDB659D1C8ACE3A0AC1C30C4 2D08E2F986E472202DAA33447F8CBE9C1785E0DD700E0BDE4215E4C448582AC99B11DF39 8654A01C981B0227BA17231C8CA4E43BEEE042A76B36F74BB89BCA61B5080692811C8C0F 9404CB1E39BDF3AD723712BCD76D0358D07311BFC09DAC82A977BF3B02D07B28F5577936 DC3AC5E768B9CC9A79FCC0F91F9AF857368F796C0D386CF9BC809B1E3529B3C4E86480A3 098A2882EEF4CE5353104C72D0678F9C509D0A7144C5AC614F10694BE8D69DA9ABC8F489 5E5321D058E0E3DCED05748FB6CEABB51F4AF027C520CC05A13C2312061222F3C05145CE 7EE2EB8547D0B623EF7044EC328137D88E8952C7CA6F8ABEF80A6B8EDBDF5A0B95A7A528 10CB316F66490567C0A0311B4CB368F01D568213E2AC9E02A70BB438721CB2DA4BDDFB03 5646B898A0BBD8D468DB3D6BECA7582B9875230EABE333299E48A6E4043CF404ACAB1FBC 4C560C7D349B324883F07FA277F526F3C40CE0E2F764967711BC75ACDC99A4A5AC36ABFA 54CADEEE907C06296B6B151B2C771B627CDF3CEDC25A0A86DCFDA25C0208DC2E41884752 DB4E29F8DF537C6B029D42EA1596E95DADE504C6BAEE107AED3B02D65F4DB10087ADD279 19013C982AE04FE1B57BBFD03990F296C33AF8668F2224AE7287F82AAF1296929B86F903 1AE40F48D575DA422DB02FB5E81B505DFD9FCA729FDC54D3CF9247153230384B21CB608E 0643837F99CC09BBCBADB9377E5CC37AD0668F4994BEC28037E56D6E6F2755370D2D8E08 ACAC0D011B8A7103E3D72BD26E79ADAF82177E961DBAE695D65E5D6A94A11D22C8E91E5E 955DC14376DEDD8C2AADCCCC1BCA20295B188B2F4C445E073B5602FF002DD9AA589CDF65 437797B7B37331D204C8CE61F0388AB2C92D138B81D01AF0767159456B92A40D1C78ABF8 32EB459197E4E5F1677611E7074AACBCB7471DDED52AF10A01FA89005AB7FACB3203FCE9 ED4FC3CD29720FF614F08CFB624B1ECBD1E88FF96F73AB182B18C4B52CCA20636404FD07 7EED3F8AC918B5880CA3A8D80ACC87A788445BF142ADAF29D99E84D949563E8B30A5B455 471BCACE9EB53BEF25379A4CB502745C17B8B1DE9C2D40E2BBDB3AA572EC67F66E6E545E 3A17C29F8130BDD1B51BD9524A261FD8D4ED9CE3B835B2FE5003E500F240C7D2A4956791 7D76F5FDCEB61953C8330E6849151E167B3E0CA9DC9E99F814C88B49B48F7F5947A2BFDE FEC3870D535E39AFA282024A79099EC4A8A49326BF47A1F0F9F5FD40A78119441201C9C0 E58360CB66706B5348F5755B4DCB1B74F97D162335D434F9F97F00B8125971490ADFFCE4 D2E568C75C2C495C5CC352F3AFE2A6EBB7EE45A635AE346B37B51529602E6E96418A103A 2B0E7F0F26E61749F2A322E3350A08B277B52A099AA699111359855E2C7104D676EC0FE3 7DC7F0316985D200875152C2CA17BD68F04BA7670FC2EF1B1F7BC024D39D966434069A1F 3369429B842CBF7E0C3DA4282EDD23F7EE81D28A0B9A638AED210671C86DF105E2CE5CC1 AAA4574CD41A572311122DFD434481D850CCAD0C1F43A55594C03AAAC1EA4C83020E324A D4900604613B7FE260B0D280DDD8A92751C54594958E651DBEDAC4F3C02C536CEE6D5CF3 172E4CDF2A159EF9EBDFF150DD50727434136D14A70B1DAC8706E89FC83092526FA6D9DF F7207741E1A813D6B4D5952EEA50BCE9A0F62EF6F57B136501169168D0689928192C7336 1717B829780B39E0944EF2F0A028B10C68C455A048FD5F60F8598459220F7B24E0FAD29C 874BBF198D09CCB603A333B8C685F232AAA7F762AD02050B909A69C0AF843C32FBA1631C 84369A61193DB5C2C326794F6AB0FE78895A8FD645ABD03A3FBB718E123CE37A2C8663EE 5C79E5808EC7D9AE2DB25A57461943BB25B218ED9C040CBB234C4028F43440D544FD9D70 9D9D21752813DD770333194A7601C0301B686EABB92E84AD47F889251689FC0CB76A26CB C8244B07CFE41FB461B76653D21440DC1FFD72F69A2AE595EABF8B198385DEF3B6499FD1 E8AC0AFB142BBD515B95A9D4CA3FF0A452B4354772B5A50B34A86E593B745F31A676AC16 42F547B67B6B22958F8D4F2506B87996795F3686466385FE649EE668EEEF06C2C2D51A82 2AED6F9909D242BFD4FA466166770B75C92DFDBF01160E02CAA3405C704DFA0C33F079B7 43F7C8491BDE1620DA9338E159F95D7B4CA130CCBAA5CBE20CC6BBC86961A95230942C75 41CEDB67DAD129CE52CE5BCC6F424A03E959E580601F36E2EB0908CE0FA0B6E08B07C2C7 466A2C13445039A5D5395671CB6714E72CF401EF90F81A95E8AAAEBC31E57BB01DDC75B5 522CA3CA080BA7140F5775BC9B63D85CA50866E44FB76255AC8F8872F6970A497D36E934 3ADFC3D085E4547A1F98C57AF6E37507682187238B65A4289FAA90959720448E7A5B1420 5FE3805F0D10BDFFEEA53A2E1C932088DF7310CE0894A254835E1651EFA2E5A85CE96492 1C2D2B40354EC734392A9F620CEF206CBBCAED462303C05C4BC72E7759A4E168985A5780 07131F34A475925477A0D8F6BB2336DA0C729F9931E1DABF9ED8A6D467B31B3053E4EAEB 08390AE7BCCB81E0AAD3A2F59694830B1D32DFB7A2FD8B7777B018FAC3EC6C8AD3B5430D 57FC25ADD7721E21F44E6393F5D71BDA64C0CEE5D580C530B3E92925408F922B9673CF25 9B113031EB2DB01A0863DC4339F4B685E7EF37A484F5FE605A7C1CD1ECFEAFE5EC3BC889 8EC4D66ACBE5E47ADA4D338F803E9CB50161889134EB5F2674C0794D63C551731C90DCB4 6941484F5700C3201FDC283C15DA8C21E70330F5D1E2FBEEA56C93141AB40D4B1E802114 57C0F87D7897E79E112D5A5FC6866D701F4748C090411546BFCEC6083A82E6EFD29ABDCD 4803AED90E85C33ECEDE9CAAD9EB19BC28F03A0CF7368822AB37738201945A8A8C3C0588 024437ADF581120D2923D5AE9A64A9708126D1B61A443156F6683043CD7D48DB9B4B9A60 E52CC3200BFFD6169A514725F444DF938AA618F46B48D3D4E374CEE5EFE24CD1CDCA7F20 D1DC917F83CE8830559C061326899173721B4C16B647D0EED647E4F62382BD120D66C5CC 744E4D3766929D1C261AC0FB19900B98019BFF900AFF5A29B9E76B0D679BCA008542F277 11AC666968AE64A6E7C98DB1EB98179182D7D23CB4E6016CD244EBBFCBBA12AD95D05C7C 03B310570204D1191025C0D1380ED6E288EE40E95008601FE4570D86258804842657C4F1 6292369C2D14A1AEFDA4AD748EE9DC76B67F5DE0F9EC6CC6A2C931FE86B6B917948ED711 2403C07EB0EB827B75E9E6D0322A56CDD76029AD5B9C0192251EE59A25F6DA97CAA6951C 27C43F1C99ABC9141CA59129E83CA7B711BCF94D720937727E5FCF9B967564A39F5B4E20 2022FF1CF68BA6660212C9D537E5F06A41C919BFB0F9B284111CFCCF0620E414C68757E8 F0999B76A71DA955D415C5BBA232907C1DB5DE021BC685C85B232D6F9224DAC25A4A142D 7EE81177064F8D32E6A63B44B85C8A86D08826909593C502D5C8122803B9F9B2444E2371 4EA28090B5D4706D680E20786507586E289CF19F315C0AF93519320FFF0D8C764B2844CD 5465049A1ADD75CC3CE30E5A749EB7AA20B8FE1E24BEC83854BE620C157421099306362B A7D1517DBAB76DA3BE532E1615C628CC72D3BC36167416BEE1DFBE21F65D8FB0D3935139 E2577694616734741496BD5A1DAE91CEB39E8E3335B4E46F2936C593544626D764772F80 83C5044F63B389B1D4DDD91C25B28B44B5056A6ED906CCE3DD436D2F8D27D26A61ECB54B FD9E0DAFB1D5AC82D672EDF3CA79663E6F14034D10074B559BC4481F253EE05FC51EA698 2D9186F6535123537BE63674BEBCD535F5AE96FBDC55075BFD77B4B4F3257C8529D6F472 E1C50264DC8AF7BE2A9F59A74F13B028646FE34BD73CA74BCC62DE71F4FD076190855C51 A7CC2C9182E900E39278A34F872F046A6881BD9B71A9DE5AB5C1F6CF720A7A252CA0EAE4 FEE9807839560C49ADA5346FFF511CB3998107233D61F735B13BB3A8F85AFCB0B0EACB1C C19959CA01B61F590024A20A03BCF7CC1271692F213E4964F4F7D0E0B84AE1B9DE817B43 EE5B39D92526F6C190B7A016AFB7B73839E478A8E8CFD4CD2F69FA1A43B8ECAD5F7FC014 409414699BD44A48DDCD36BC95611B1B28857F99B102637177AD0A430C822FCC23AF991A EECB9A827B3F2A6DC0E56DD33D074922EB8DBA7691AD7EA77AE34C7964232E7588436125 E0841FDA632E524D2F87C5783B749F19588CAC6BC99149A6C47477246AF22BB6BE905590 7B76E15F2645F2058D34CA4A77D3C3FA8D7922843BE9F4079464C9755B8C79DD3A6D3E1C C339D3332D662B5A1F46CB6864BA6AB8F610461B8E4D2203A40C976EEB6CE0B79520EA8F E488E791BD29EA5294E455E7F66BC8F3395B84E667BF6BBD0775CAF84ED1A6214204A70F 4141710F2DB589326B30714B8DF4C3199D8E905681C6FE357F0EE7DA10DCD823DFFAF9FC 27CB612AD0B1ABCD85D882668AA2EB9401C6B54B5824323484130F6548193347ABFEECD2 77092AA0749A0A0E105682F1329E0E9D24A063C7FF4E423E434D1CE4F9728F9B13FFED7E 2FAC925BA9BFD6D1B3044E456B2A4B1CEB30ACC8038EF44D330D9BFF8F65D1141A020007 7C7D0AC4ACFA0404502DF07BEBEB338C829257B082A28A1308440376A42C57FF8F98901E CA5AEA65EB02CF2BCD8CEBE9788B9138A4051323F9EE36F9268A837B26F3F3961F461E82 33DD164F7D71D1F3FDAE36C58C950978698F20520A0EF16A74F0B1137EBAB9328F5113A4 EF1D05D2C1AB4869BEE18E4FE4556E2375539ECF1701A399ABC15F63B12C4E8AB4300D64 98C8411D5A7B00B04E11AB18564C890694F255BE50A64CF0E3CA351EB7762BA0BEA0089F 907719D4850696010187B3BF0712779E134966CCDCB0122CA017954F7EC555FBA5E784BE 6A338D23600A77A4E3955FC869FF78CD77657035795E08E0E7440F80E5A3375CC12D0449 F013BDD2BD4A5F08F1BBE7020FC60CBF19CCFB03C658055BBD6B7F177EE5C86E7EFE1C39 5986FA98B140DDFB6C4EEBFF19F2FC8D751A6D1E02FFEC5E26374E2ACB09CF2B4AFBFD5A 7E3BCF217C8937ABA8C74BB69F2D0CE6DA0D1C50896BE7F05EF71F23AF6F849EC1C7EFDE C7255C8A846BD96EB942E4DD1017B10DA872E79C3C0CFCEB8CF1BA8CA019776EBE7AA312 5A55B3D6B0F37B8F04747E4A14308DA94EA63CF8C6C9A1BE40059A1005C8C00880FBFC0F 244C9D5CE002CA2F807659E9E3BE5E08345EBE22E8C09D4B65CE01B6A1C658C83D4EA614 DCF68552721A6D7DE7F38B27D6A3BE41D92609E0A4A9054D27B1EB48DF7BCD0E17D5F3C0 72D16D37464495F3EDB27FE45DB373487F848C08B3BD750C399BBA0CD8C2A504B8B6BC2E 79FDF0909CFAC0BF0E359AF64071E42BF7229A4E47215A967AF16A51F7F8C43321ECD887 58B93E94598DF6AAEEB4134DE60C4899815EA87BFD2059AEF7FEC74244123C68C4A520E0 DE41937F2B03549CCCF6FC8469E15ED7280D43D76502A92E52A4A4A613C22E9563ECABEE F884A482C884BF1263753029ED9EFB88DCFACC0E0793F2B8979909EC0BF4140EF178A97F 118E987AEE2C7FFDCA44C4F9B5DBC9126439EA2D18C95C9D786DA3B18D108F22B396E751 AE28808D67BC6E50C72B8AF712EDEC6AB112FFD017726D5F6DD41577A4C593CEDB8A91D9 8F1748F5A57080C8A84599449BAE2D0C8DBE68C7A02C890DAD4E8CD9F403A3A2D11CFD16 629197D1393377C791CF072D8391A403FCA305E0974956FEC35BA7908A173E9435F80B7F 5C9DFC83AF89755E8436859117D28391B9D233B646FD6B4D6E95776831F30C2BB584E82B E45CB6FEE7BCC86006055172F1972F5104B6394C312E5C066808FA8F63B60F5F81AD8056 7F481E6B5736F404A174ED19495B6D887028FC5E95541B2A08CCD93B1C94485BB8225A19 4E94A389BA91681643D749F69B1C7A76D3FCB933081CBB018F4D75297765F4F7694A0AA2 419AE780E7A65AEB917ABF65590E8310F7052B63FF15F22DD46CD4109C2ED6A98D636CC6 9CC666ABA267407165D33DAF3A9450F294E2F88A47DD98E98E80151FA206F809B190ED4E 231A4789AB2119341EA4AC34ED41AD44C8292C83BCC708C2A1F69A0B20525EBC85E36967 1FB8A6E0F833145732C6897C9E51002F20EC0D0BB62A83BA1ED20BA7FB41EB7812490573 3194293CDA9583A4E1136E694A531458DBE40A530E60989BF69E4371909888AEF0B41F17 8F079B2599EFDC5811B7AE053D58BDF81E2422F62179B61A6CAF9EE3F1EF96CCA682FF2C FB0FDD663797D329CD5AF9BF7210885A56FBB9EBB3307E94456A2A4783A4D6657700FAB4 B56E6D89A59651C334F9C984B0C6455464B49E8F2F3A4F327010A28CE4112BC09E294C9D 14BB464870C9CEF842E55DB59239C6D42068BDF6F3F489094A01FDD6A89F4ECB7829A696 06A4840914AF8C2F897914D32E9521CD7B6BEC652CB4B8E7E2B691640FD63574078A77D8 F37CC170FDD5CEF349D17E334E417B8F7335BED79CA914C9670C3B5FCE1AA7BDF09D4D12 6B652351E07D32872CE44AE49975D973A8BBCCA56B9AC718CBC2488796A163514840CFC7 F7BE69FD6A04DD5AC7D38A7EF35131E7DA92DE9CFB35B65C67C8C31D0CB294EE9F5FCE19 88B20B76623EFB1B11D84BF9A84DBE1C6C71EBF59C48DFB35F6B429528CFA0A79FC44C7D D809CD9CF1D164E103C5BA6C359DFB85CEC49B5891C3DC5AE0D9E7D51299AF6061B196DF 955C3FD988C141103CD196A3868EF3DE91F54B82E9E7742916BEDD279D602ACDF33464F6 856046C5EBD3B7D758613EA826718EFDC307F32224DD5D546992F032FFBACAC35D45999C 16A4664C4CD55AF490260A144BCC0D2318956E9FCAC14FC62E8DDA23ABA5896CA0965181 9C863BF0A6B0EC105FFDEBDEBE92FC4E7AEAAE7B20301169CB5BE171D2CB970F2974A54D F2CE0B4AA5ECF17B29596148263DABC74293471CA9C76ED8A270447C95B571EA8B9E54E5 4E809201F41A9AFA40A3F598A83D41D078CB2BDDADC1EA40E9168AB05835E1C21A6E665D 14875DCD83457C60BCFFB9A1AF84D31E914D61F7673CFF5DB1F072923EA5229119C43AF6 6FF713F5956064025DBA7312F6AA3B25A25CB1C16B52E0E956BFDE56DFAB81B6EAB8957B 1BD6E47A7EF46C5A5C77A579F231477155B996AF3E5779351522AEA616450D4A09CAF279 0209F75216CD87ABC62DB135E6948F313A4EC1654D0227C05A7BEFCB75992EEA4E8ADDBA 6D1DA8E4D59CBD277856B3785C2C43939F848E9B4B4A14F428F2820F9A4D26222AEBE1D2 20152F40A1A89353E2CA0130C59B319DAD58835E9190741A4617E4E60E924A8E956D64C2 DF2A186DDF89A28DFFA0BEC0C82DA3B94C4121A7E7B30006787182114A58E7E1A2BC5865 C9F64575630539F01EE0479466269FAB7FBE514CAC04EC6845AEC38B7B2E4CEF582A534F AD3AC28F0A6F200A90CBC2B9A41ED694C5080893F64A3C9B4F79551FBE1262DCFADF2677 B332F72C9938676D154A3BC8793C7A016A82ECA45FE6C539C5E27954DB00B1A4F6FCB1B2 3E9E16580EBCA274C9981ED5BEDD37AFE9107EFB8BEB494C5B6FF7D2C81E048D0FD85D3D F43DC43D9748D15FB2919C813D4E6ED906994EFD0C5EFABF604FD1B3620482960854AF39 C9A08A0BAC4977B17F36DB44F059ADDBF10FCB27EE5A578FF7C01C7513EEF1D5C10D1CE9 3983DEAC2457E2557196465A4B58E7A2AF1947FDC3D751FDD4569BD7E4B260D4C70F3016 D00FFA49B9DEE79B355AD2A87AEF6E1A843151E51E0BE845C6DBF913712E06D30BE17952 720201BFD68337510878C25593DAF6FD666533CAC0529F0BF6356A044B35A19F1D996796 E9460516A06F71D550BFD7EDB396B49FE1B6A00577F56C93CAA7903905FD869E05EEBE91 E45DA150D56455531128FC08EC72890D256BB804D4E2E4131BFBC654F88BFC696D3E541A F7628D3A878A77C70B9EC454CDF1B935E95E0F02A64060C03F23B1773C2950D2E2BF5931 80431C112861E24C70D253338830F3DC90EA83E6BD01FF2AAA8D89F87CAD973BAF67CD31 EA2A53244A978F792A8F33E17681C28A3437FDA59166CAC9C8CA3E9ECEA7DAE30B92DBB9 4F40BED6DD29AC010713D4A2380A489544536DC8485923A31DD11AD66C0FB033A7113C78 12CBE6AB7DD5367D35D4A79E657890798829F6BCB33CE009BC904C0E797433BA91DB631E 827280D79D5D714FF9603AF9A6DB1D6DBA5FBE3313D0EF31D92A23B53664E69ADCEE29B3 D14482B0DB43EB0C35E55D800E6677A411B8ACBD46DDBDFD69612218F8A16CBF7A296BF7 E58AF26114F775980997F9C1DEB277902403D03BAFE0EBB57F4DBBAC2E634937F67CA9BC B516CCC8D4664229170B7815FA428A10C62A0E27FCC571D0F7FDD9AA1CBF1A42A603066C 781999FA6B4EF4A1C305397E24FADDF962A7448E309CDC61872907E96AA17CBE3FC7C2F8 2F0398D55347FC93576514AB3C14AD18E7F132E46CBC7AE2BD82C9E0836C04D0EEECE8E4 EB2F09E2492C8180A5FCC35AD572DBA475D3C574FC4390712C0A9C2FD43429D19856EB50 3C579A13727081D04EA847F03371BD9074EC7CE339B398A8188E9B10399E1E72C13EC2A1 5FE244F07BAD3F99EED813679D77E2BCF4760601B823557EDACA6368D5BC79371DE3A63C 29549EFE528437E69CE60010F8711423622EEEF452ACBDE0D5DE52D8174CB40D5F1D127F 4067DDE6ABAB38A8514E747724BCB7A2F661C4517FF7A9BE95F42A3B85EFCFAB3282F50E 8B4B5E759C0143B3DFC5EF7241E82F0C5FBAA435C7B1C29A628779A48B4328E1516C70F4 A2E0ED92CF51FBF2B0A31C67FD8FF0B60516BFEED24B8F62D8C38EC83FD40CE3A570711B B7C3EE19B5996F561C8B7C9CE413D1E3C284B9F664AD78B61326E8628C71A0C0BD681652 090AF1EA659B90DACCE65C152FE674EF0A7A6CF51CA6FC628D9EC804855B60E1D50E1265 B18FAF6FBB773027AA4E76C90A8739A54EF6C6A208F78B1D3F29180194A659A1B6029C62 86823952896B5F5FA06E20F60BC33AEE5366C471D1D50734422FE7002D9BC1AD76BAADA2 43BBC28294FAD1A17B385E59E5D933D4E2377072174E6696CE1778841BC3E8AEDB285866 485C8D1D79C412F5A4F3D7127BA8CB1C85974BCE784732D5740645F879051E6C6A5D2D46 8B0015A85713E395618775D514B2B7EA86ED74B3CAA14EC19BA1D1BE98F7FE6635532487 1E96511CDFB2D7A2498C27DA32C4545A3DD3235DE1C7652DE6F8EB5557F2B320A842C1BE DD8EA5CB98C43894567F033C8559BB47DA183B8773F6161312172F803CE4C30BCC94041C D7ADAE6FFF86F44A44E5CDC2F675390CE12C0F16E77063F20C8E095B85F765895DB7356B 0C94992C3C70716D1CC7633ABB62F24B0980093FEB72977CC3E44A0A2B3ACFCDE5A6888B BFA131A447A9316397FBEA1873101147D0527E5FE70DB144E4033AED5BA74E7F7D09D07E 46551E6FB6F67ED6C5B21FCAB6FE26E4F0B990D022780178010614539B987DA3A999F55C 6ADA6675805E43726282B738B4524074C78FEB49D1AECD834E78FC574E1DEF632B88926D 6A50D8A7B48148B247E2300C522507738D655F0A489890EE55D3EE787D70AAAFF2B671EA 0DC71AA72B651CDF0A90FEA8447564DCE86927D66F1232F9D1151033F5B66DDF663AB617 B068D2EDB10461DB5C98DD844B38522A2A63A9042D08CA13E2108DCDA978DA5DFFDFFF5E 4CC8E30E730ACC09739078C86AFC2B8B306EA76D5D334BE246B3D55188BBEF6441A9E1D2 C40769F9BDF6C2EB6398B9CCCE60F93AEB384A487958F2FCC15CA5B19E7F3BD1CA1B3641 975BE236069E51D7A771739393048B7FA12E74F43CD20CEC76B222850A84FEE1DE2181D2 02B94CC0604473D8AA8994131BEBA5A4CDF8FB3C3E09907FC432CC4D8F20F90A471E1484 BE6AA0DD0C336423721F3C26555AADDCAA2D6C6D24A6F06FBED4071F9DA62415075BB52C 03776ED13130869D6230B34D117CCA62E7694F71281B70B8FDCB009E38878176539368D7 390DC81EA5709D541B9EB44ACEDC1DC077BB1212E3998DA81E16DB6598B0940C88FC19A2 F9B79B9C3795B3E63B33F3B9065AD0E29EE5862F49567ACD3DBA043E1E38DBCF63A86AFD F7CCB89F1C762B690F4E602325E03D4C757D25793D28C7A989634C446051C8BAA2EAA288 D553A129000613020C99472BE76874B207E145CA226F4BE2A610E88CDBCBED641A2C400D 2B47DBE5057C240B1C3E4D256C4227E99A086654DFDA03F927AE54CA0D5B88CD58AC2124 6E4B6EF02FA1558482F415EDB95FEA69E38260961762C15C3AD0B5ECA6A06B10DA5FE795 BC571792F6631BA83F0D58DC855DE981A00AB491FCB023E8DBAEF0E7F081BCFAE19BB45F 9613713DD4DCC6FB915F1389938BBD57489E67BC8BC97E89ED71DA662D30847466A24B86 9CDAAA51D7BF5FFA89FDFEC4D750731DE1B9DF3D1EE1091E4E91CA65B9275449710E2E1D 89D1E9B907BD60CB4E0F265570B3B93556B9C7FD208BB48B0BA3608AAAC60CD882C29E41 7C9E55120A19AC8BD45307F5FCC652541E447F95EE75CF2B33AD83405F26691085E856BA 5C3565962799860C6D52BA0CCFDD8A49E3F9ECFB596684149469C53998D35227E9C77F04 8B07CF851232D8AEA0DB75B1F202983214DA1F5C1801CDCE549EE067391507ADC2249AD6 0376F1C7E857F2B2CD60576ECA0E49630E47292B67FBB32F8D11CEDDDEE914AE5E0BEE34 D4F262E79766F21AC57D0711FD7C64BDF8495028AF4966DF21B09D6E3292A1C36A093BF5 4DEA3B1C3FADA3A5864EDB0BAAFCCDA6DFB555883C1BB62593E71AE43866302F3F69FBD2 AE8C55520389E6D8D1DD2936E98E223CA0FCFFA65CD1DCC441E22B1DDA2D1BD9088065EC 3A01B31BC8821F499C1A090844443BDC0F68CD954D9AB376B3E8D97573F4E11F243696AB A0CB2310AF3592A905A202F1CCDA5C192FDE6AE9A1E38F1C1C443C1880B0DB6534FBCD7C DFBE318A8F8DC2AD8794717712EE4C9DC41A8D818CF29A47BF3BD2FFE6D2FBF22613742E 1E1EF29FB4F1D1C1D3D97EF30A431A5256C515D0522D1C422B458B65BAD105997BD09B7C 9B319C38AF136A2C5EA62CDF272CEC41CECF54247D574571DF69FC15A3708E84B2DE4268 15AE37CF3335DA36ABABE4417A364CE8A3FA69F4BDDC11E900072A6384D23DFBFC7F49BF BA3B76DFD949CEBD43A470236B89D297881306E8D58652F9C51DEFE6A0390BAEE7322F00 222EE265478DE12BDCD5A92833D0E6F087051167E697057FA3A59D2D2C25E5C6EFECF787 2BAE2399D5687F5495DAA1D6FBA93BBC5C3158A378811085655D88E5F135AF779DD6DC2C 83A80089306E373E65E1B55ED66AB843F99911DCDEE3592AD0267884B424293FBBD6B0DB F3B44E6912FDFE125BE1084F2DD24B6DEC3A092D4B5E66D30487C2E71539F549801C5AF1 C79360F8DEBDB501C75E9384D52A556CCCDA8C3BFE4F8AE39B6EEFABCE3695A248D38E2F EB21E1355B33184A214645E3C50D3CAD79E93521191543A01716DB32A233A5E4ECD03035 F05369DC7F147AE3C94EE2E26DF7FEDA3EE558CAF47BAE433C5129F6BEBCA8DCB6A0ED2F 3831C8277450D0CB8172A578536D38D9DF817F76AE0E2EC046B4B4A77E2D330B1CFC8E8D 1C3641215F6DEBBC3436B43157E1FDD406295DF74800BB916C1DECBC28CC8875EC56D7EF 70C4BA2CBFEA8ADC99F2D4ED677CA8EA83DD3273A8B4A1073A933F2A50C2A6E0B8C8AD68 4C734FD8697865758D0CFE6023A97D3C285D49321A6ACA40AF7D85AD664A8D01ACDF3CB3 3C5A087645C98EAEA0FAD4F0B9A0C6336B648346693B558174EC73612FDF2161BA11DB40 7EFCC81304BA625585C369D0DC47CA55BFA2EEF8D906383F99AD781F4E2EBDF23E8BA28F 01C9E0970C04C4B72CD2E1572A2A40939EA6F7FD252708FD4510189926F0726754E7F62F 5DA23239906A945C79745F65EEF7DFE28E221BEAAEFD7E6504EEC0883899E50CFF1EF110 079FE5796861728AC38098CB0049E54926A450BB277CD8D900ABB95BFD07F95FF3BC97AD 819BB496874F991ADBCFE0ADBA810E0010EB6E7A548E9E51403215BC2C99B3F229B2A978 05C784A0205D64C321FB5FFAE3B73C5D324E251C7E817C2F0BF693EFE95BB2B23D69BB7A 2443734462CDE8FC3493B82EE2BAAC3FABE047C6CBAC277E7139F359682AB9C0E1CFC572 0F4C05ED9BA05F1DB417498FFD94435B9958953261DCD7CD1293C25FB096B081206DE894 9084726E827616F5B07A66E6CEF9169C61D3963B60057805470CEF3362BC995B2F06F2CA F3C4711B8CA4CD07C24A17463F5ADA0DF80EB7F7B02E4549BA63B61B28B094840FE4D023 E5A9234A4FCEFA05C876D8C1456C8B24E72C74C1AA681E9E1E06B77F820FD50A170BBEAB 30B5E57B56708EB20DD3FC79D216D908827A566918166638D066AB9292BD5481DA2CD3B5 BF89F2EB42F49AF72E65AB0AE1DDEFE178A60E87FFD56804363D8545303CB6D793C56C66 436891695BD40ABC89A3A02C9987F465977122FC775A1412396B3DFCD5D115BE53A41F4D 6BFDF05C2C6309CF1AF087B896AAAE9665C90BB1160E2982BF4F7F94C21885901494FB45 A2C648E2DC24B1B3D6EBBAEBD21C55DE8111D35E4DE049C2302AD7EC825C71F331529C2B B8C5C193A41DC10B5CBBED0337CF2113181112D4411C4BF91E4E6BE08FFF55891180773A 2716691BA05919EE1A990C5B67311414A7CC460548327E6424F5B702A841B5FB876839E4 273812E76C7A081BA029D1891BE30CA47AE5A67EB0A5AA194AA152FCB928CE2EF71706C3 F6EE984E19FD9C0F6E8444E55C3D9AECB1E3E72E3C6532F8FD33A9EF0A07D96C42F7C9EE 96D1357F40A2E6C130127A3C7B17D004972DCE40E81C8CEA08A8F0EEABABE83A2339BB23 F2FFB56921B064080BD98F6FCD3366B0572821C9EB30CB8740E933C547690669F1BB2BE1 25256D74C71D6A2A36B22E35EDEE8E52C5D56113594454BF59EDCBFE3A906449AA2450A3 5A89EB649A08FAFAEC6DD6CADFF56472E41285A04F5F8B2B99557FD9E3341A5BC8CCD4D9 D866795F100C2AFAE4DF033FA361C885FB0A800F9454EE1C917ADDAE91B74E4CBA45905D 9B3929BFE836BB5A2E1B050B9BB5E37CC2DA7684681C8CD82ED242F7B6187ACD64DE025A E247B74D450BDC4A67FD77798D632B1A3A1F273DDD1D81FD8B9A4495D2A0EEF9C7702693 97DC5AE2C6F518D3C624B30FF93591551129D42677876C4D4404839448A74B1A297A8703 A7B6F5EE6C10FC8FFD556160F53F7384EF9D1F8DAB598B085C7C41FE78D382E4B078AD1E EC2214A2CA24024096D514FD389C630A2890601E625385E1AD439ECADC4770F28E031E29 7502D47BDF53907499D40A1A957E07B0729219D58FA85941956124B33FE3BD32764824CE 4292127F4224575125598B4074F9D0BDAC6A11B9A27DDA805EF568236DE9C477E0EB9690 78FE9DD1B68C0AE724531E0F251F6BFBB0A68F3FD2C72DEDDE0CA7DBC8D9E3510EBB119E 626848549F93D435932AB50A3D2D3942C9D4B335013D7F15813C6C58D250A4AB88BDA530 794602E825EB6D4F008EF963A0401C54A2BB6E030DB65B53D64C4654A31F0EAF9D18F111 FF062C985D180154E76DA9B3FA0DFAB2AD6CE8DB16E015F8F226137441669F415F000AC4 34B4743CD5A04147F4118350DE1E6FE04140D80531F64FD93B7CDD91B876EDCDD70AA7E6 50A121A771470BF53680387E9C005030E28678EB88CBCB1632525C368764F1BE9780E9EF 6102D12380548B44F82E215B1BD760877E0CA3D1404BA343AE35B2D602E311CA78A8D175 29FC33A75CBD85EE62ED53D56C68B1657D1B14A8E45BEB59E07E561FC8648ED45F329DD8 350E1EC6E04CDE3AAF6483D10593ED5B845CC28C9CB327C00FF31332B765E048D5AD7358 2403705FC888A2FD3A713FCFF3FEF92F2C0D06B09D87733F620B9078D26F44D6A69930A4 4D7A602412E6E99E3B902FACC07B06916170A8FA5260EDB072EEF1442BB206B2B93CA20F CEA702F7972C9C2D9B125F0FC9A87DDC10FAAEA3D10FF365F6003805B29892443C0D373D 89F4650A9A48EC241A0005E290D9C4976963EB1C7F8EF27648DA6F3A6403D41A6E6D0B7D 7BEC3A1FBD48F808B9FF4323148D1191ED41F0AAE1D3A8AAF810E6FAAC70F4D2003A4570 19716B5851F32CDFD294B420CFDDA7E9AE37FBBADB791520383DB7BC64B92E4B10206523 C1E75680D214BFAC9DFE30F1820CB63966A49FF7B48D4B08373663BB474CE171715600F1 521A96E5C22D6AB8A96B631F19FFE6A1B54D35DF665BE4CCBECCEC245C87802FE9A67649 619B7F9522D2D645281D3C2CC1C811CCEE50641C72CB0E3D4636417D92B952FF25796BC6 D0C959839439CD9335FC9B96C24CFEB706D6951383630F6EB10628D630FDDE37E51B5952 27F9FBFA967BB6462244BBB6E23B425F2F1E728EF35E96D59E4F523FF47AEB1AE98B81FE F7C1215628795023D5F4C2E5ACEAE9DDA07DE777A5265713FFEAA60164BF8090A6A7E04C EC1A3D2E520868E2FE444DE41B00484643A2331E03FB82F9FCF13CB6AF81B04E48EDF714 FC066429A9C3AF14428928C41B26A59C6AAD790DA3622F2A1BFA0D9EE5A656EC606220EF D2639FE5B7352EBD7D7E28A1188BEADB5FE0BB82CC947D3A519A649B662CA83899B9EA73 0F81222817A9C80D3E19731DFB4FA44F5815811BEDB8B1B04635D4B841C1251B4BB8FD8C 7305057190BC56C69B03C776DFE158D0B3E208AD177EDE0B628D380F9377F3E898D4A7AE C707526FBA5AF83D0883825AE8C7C667DD6714B82CA9B87D76D27A225376396147883282 A7A496933107DA23B213AD564A14D2287018353B826E0123ADEBC81751C1EBC05829B23C 32B9104194E674CF4EFF1293CC47014B1463ACEDAF3DEE919D4A43AF2C2B415F1485D625 B8E89D6B19443002B13203EA07279A317B84A87AAFA6E36C82DD5C444D2931C66934B5E5 4FEE68727A90A039F4AC7C939987725ACC18425844ADB6C6253019F0999EF77060B5822D 1A5B12353B361D3BAD04D43D740A19E1934A5B67DF685DF79A5D23FB0C7E22BC8B17F0F4 9CC4D8FECF69335341538C11DB6D062EC49070646422AA0DDA8069B7EB7EEA66EC93FD18 7DC7026270F3B6231E8A3F142B7222BB07DCA0C54A09455510C675851F7ED9283EB6C395 CFBD9F6F68D6FB7B979284183721AEE3ADED5F74401405ED3F3BBCBA354F5775E5FC0575 9973087495CD01BECB366A9AF51A44869CDAD587112F6A85D6301A0837B81EA595518757 DEA972874DFAFDC3FB6113AC0F3F16F94B3985A4D8311B6F1A966FA44B837EF6F08BFAB2 90F0D067DAFAF11874AD7993BD360E1041A2DD5D6082AFEC43359CB3B3134990EF2479AB 89D021648EB6C5A0AA028188F52011180216BD70A758B2108E46E4D3B9365A1060A875A0 3F3AEA0BA49129D6353BF7A684A92622CC04FED1A6E7004DC40782A4C01EB84159010B78 A9EB13A05B6E467FCE8E248A2C38D7F7D9E7B3B4025296DA5DDCA7B4584224CD7A9FC071 C7353887EC2D6ED822F4280DA80CDE37821F395808C1A54B3ADB1F40678988C0304E825A D5C36389A39772D01DD047B40CEC5ABD868F490C99203CEA51BB986F26245D216A2D801E C25F671FDDEDB52449E65BAD5BDBE3D6282181C8C41532BDBE3D52CEE7188F2543952868 260977594C0417C694DBC51132BE628E353A147CBFE1914A44B70E5D97FA1056BBDE49C8 013ED111F64311889126FB94FCE07B40794B51BE9D6DBB7E5F975D3E29CAB27DC4EA8DD0 EF1D657F6D1A836BBC4FB9B80BAAE0F5DD18E20F32448050130BFCCAE06ABFC484BF25AC CFF70461FAAFC93E91FBF1203C2FCB3100572EEBDC2CAF62CDE8BE10B16858165A7A627E B2BE9EA3B2235249A354A9E4257CF0C06172FE1A74B1A4F1A9D7FADD8465BCF0A5C562A0 540C3D041B0C2090BABE4D1163DF43D8EE1565E0891E4EA9F26B3F62E5E1DF909438690A 1C7749B62CACFDB4F9E12CD8170BD61ECF690002A348C01570EC1D1BAC9286134A92A724 3DB6050C469F2EACDC6A4AAA818DE9EA29758BA966BB7236FC1B9752CADDA28722F95D75 FB1AC4910858CB65F54E28A9B2BCCB72D6A47C3882E5E057CE56DA39D876C16D2F85ECE7 E1B00DEFB367399D2E5D80AAC94A9E2A938FC52C59E47511BFBE3E4C1DBC91DF90B74B83 E4FFC9AB5E765598078960188B07922F691DDE46594BF4B6FCF4C7950C9BB4441B1424E6 B34919AA7D0C1078298225A51E5EA6247151AD9DD187B55C07663356DA4F93731A01B990 D20031B61C79CB89C59ACDCA9F889C72DDBA5BE759C594FE112D66FA0DAEE86DF48FAD6D 1F72BED4D97E4C3BFEC89597C07D4EA6D6D721DBA6B3AE666A94D33CDDC696F4058B02FB 852E0A1543EE7E52DC9258DFDD79A680628B11942BC43F890BBAB484F2835F3D36408F47 FAEF52B47820FA6B689B9B91BB4C10678976332F943A246B38B43E27F399373D176E3209 CB283B9DA984D8A059F4048CA1A45C250C84069B8A0A5444945C215513C1E4F13A488CE2 B314FEA6021478BFE25B0890E6DFFB63DD6483A5B3E3B7659BBDA8101D6B6312C1F30E74 6F3837D4DF3E8B6E79A5B02718E48EC02AAA49C23E7C349AC05F95A867297CD75D4C4397 AECA0556489B6690FAB7E1CD3053CD185B68A053420FCC541FDA225E071166C3009A9483 F2DFD0094C643706EF62331B925411FDB2E17F68BC99BDFF17B7261DE708119BB6D7B4D9 621A43E29BBBE315DB7FC32284120B9D2A5D9FA90A3B45287AA78CDC0C61ABB61F5B9ADA 8EC4D2C7BB24426E8F81C5DBCB7A0C980F788E8D531281CBFD8AFDF077573B37F0FE8190 10D2D42C32EF4471F1BC26C85E778D950098A7A77CB2CFDBC6F43DB24218CA24C4DE36AA C75A0A18B30B56783EF072CD898917F4C08FA0A9F037326E2DF51EAB55E457C5BC7AC33F 36A50C627DDAA130729C9EC7E0601BF30862F6648B7A2E55855C371863E3E2FA213E9A13 D63AF2109BD47653ACBAB8F39337AC264760BA5051F6B2EE95416743DB6FA82748DDF36B BEF2E3756BDFC84F7DD0A43556A484EED611613D50E02E180564615D2AD8A064E22C5E97 264B4C35D23E4A46B48038473F8A13C41E88AE1F46593D5272C7107512B42A8D3AA66F35 421489651FE04AA63B3D8E25A225F7D3E4DD0C920AADE0E4C273B05AF772C6F4E77F4202 D0DF3B8E0DB7EC9571A136BD761957E012C96715A95A98B96C420C24E42576B24A28F094 482989EA6359180198381A604AB40535F29F858BA9F8489A00D048960C640EDCB5843DE3 0652460413D295180A80F7F3AFF4B576BD0F67FE7F583C2873BD61D52D9E14DC086EA216 0A97555CFED643AB308E6A9005B69A6C821CF0DCC9CE2823937326AA324DED723DE271BB 749305FC079D5CAC0732F5D1B00F0C0178EA885E7DF03117730BD3531B022B203F9F2284 1DEBD8B458A0C56D641FBD1686CFB64E90FEFE532B85EE16AF8AB17DECA14A37C157F1D6 5E85F71F3D4FF4379AC62B7AEDFFA0724E8B86D8EEE971A2FD5C490F9984DEC1A48ED048 EB02EB5771262AC2409DAEFC38B996ADF08B4B6C111131C20625D09268EAF97CDFE708B2 EF5AB32A8E8CFCFA50B2B26CADE06634668BA800BFEC84877BB367F758A683EEEE82E2FF 4F8FE7DC61664253FF6373FC01CF8A7E19ABD4981C61F98EE72F99DC043EEDF2873A2B9A FD1A5DDDEF54809C8B5BE499FBF657FAF4AA8FC2E0DD4302884877D0D2BE53854300D63A 38BB45A41C683F37196D3C5831CF0029BD670B59CFCD86B1719784B3D51F3FACD8ADB1E6 95869251E666B791B6AF8659F3B4790F1187D7B77446AF1B6DCF7BA8038B495D0670BAC8 93995D74B7079336412E055DEA2488818FCEB888C2E5F0F486F8B8C17ADAF8BB7F3AF515 2063D9DE9936A1321CB1734BBF6A95A35C3F22C72B8801FE83914F55CDCFBF8FA396E8A5 7F4D7327B86C69EC8ADF3FEE3A43C0F31DE799766790897AD964A3A40CA810796643EEF4 DC2F92C64940B5B792141D3B6FB1648AF90225FEF16931D9B4C09BDD072E52B0BF401619 A29818656FD3D1FD2E5FBBC7873119FFC011D2ECF2A71DC75A88B98A7B6F76D86BB6EE2E 5B64B1A2A2DFF801F32F5EC4A89075FAA8878A3E38770AD3E1111E7528DCBEC32DFBDE52 102746A4B7CCE57EDF7BC101D8CC5BCA1F3171479FD67B5E8C810B6A6D9CB1861B54C08A 7186DDEB4007053934D82BF19563D68D0D66D5AC6E40FC3C1FED8CF6F9547CA1817FDF97 746AB22444CDE0246ADBB09367CF6F867409E8A7324FA4D319890FF254BDA9FDD7C83AE8 A39EDB67A0E44B43837490AE8FA078368662EEFDBED35CEE070A750B1955EA0D9FD252AF 31E15793D77E2F58EA6A2A4C2F063E0AEEF570C8ED3CCE3F398CA5B8FB34835C369CAB4F 345A593E6FC04263F74636D54E3E255DE4ECBB61DA393655E6AC3DBD4F83458FA80CCE1A 571F29C646A49A74E6F4354C8932E6D6C054DBA59B72373B656F164752CF1149B21441C3 4CE88ECF890D5A4D02D951559EA7090D00B6473550A6CE5806297206CAE3759766739332 D1E3473A29AD9700409469F1A462D8619EFF78D861023316E48F47559E42BAE510044E5E 08AEFA9C192CA3F1AB13118474D2923E26CDFD774AA1C9426F2B95E49CD7BF8627A262BF 50E4D2081926C3CD6542AAAA3AB7F2D3DF7A26A0551651C73A74C0D02CC0F8040C29F64B 3C467197E675CA3DBF43313ACF435F582995438D6DED2270C22A774074B59563FF54A48B 71DD626D0653A0A2D2A709FBD019DDF2C6B35C0FBB8F381BBA69775FECD2974929624EBF 54D46A255412F7EC2A4AB044838C21461856651DC7C894B3714FA8E8CC748BBC52671067 52F3F3568BC0ECA5927F47AEFC4207CE289EC9A082BE66A2E2C6202385BB53FF68B700B7 363C11EB7DB8AE8988BAF6DE1C87F4FC660E945415FE925C6F924767951C86E2D3455F73 51C868C586191038B214999CA7AC7B5E474C74963335925FE355625B5FB3673D8D1D3758 0AC16F83BE1D94CE928CCEE26F0F7B2800E75E79619EE20F34137707C0551B8688C0FBE8 2467C45328ED5F631751FCFEA426F78409F23690F44D522BAE29D4D98DFA71E0795042A8 5DB7FB6433320C732F28DD273FF37AB2F91C072F0ECF7971484919D3BD457BE6CC2C97CF BCCF583EFBFB6B8FBE7A41D981AC24CB86C7B0C02E0E0F56C06C43522475099369F215BF 1486A13A910A8E584A4C825802BF60F1F3ABF1C326316EB217D9B16383A1113C078184C8 F7F4D39954E16CE071EFE90B4EE2976125867368238795A65B2349A5D6FAD4268A5009E8 71D5D2E93F20A2A4C4CFDE0EA5CDEBADB2043EA31C2EB151772FFD3DAE5CD14E8B871F85 8F8C59E8544E942D9B8301C5D419EF8BF5B95A6A95EB9E8B078BF37AFE7D713AEE8FC3D3 CBF8B18F2C6E0EAA86AF861FA7E95CE270D54B82DF3301A74953CBA6472C8CF7280E8E45 666C9E016072148B73321EC329D344C3F2460FBA9C03142248273097955D01D2ACC10960 A6673F70983330578CFC4919F1FC53173996F5A53FCF71C911199E4F3E0A8268FF7D70E4 BC5DDBC5DA633513F11E1D420D0FC62130EE436D13C63A80235E58D797575CE9E5D4924A 523D4A74C080334469AE2EF9BC4B43614751AE6F41FE13547F3C51CFFD56B10559F0D87F C9CDCC7503EC9E66CFD2DD18EAA5C22114E15722A310C54DE73BF908B83FE4B1D1C1A7C7 03E3DA3868C83D65669237790EA3A82612FF2CF566265C44D04E8F97EA81C3D4435929E6 A1BE99006008845C03BE14875F06A10FD3949B98D7DCBE28E95867FADC95082268BA83A7 E849F93D8951420D7E102E721ED09EA03A8BE91CF7273CD74533E1F45960E84293FDCEC9 83090A93D10BA13FC81640EBB80472B3979B236862F801148FAB0B8E0DA119F850794090 95D9C4B7C18C4524D16E138601751787909A75342FCF4AB9498D8C5353193EDB51C6AD1A 1212ECEF38BEA2798625FBBDB2C797A10748408099BFAD85680624BF928A37BC9FC8F913 7779B2083D372CE64963D8A91E9FA4CAD769448A0375EF2CC4A0835E02BD13C5B44AE196 2B68405FF5392C24380E12E791BBB3CE49510678393ECA8A25EF76BC1B4DB1EAA7CC688C 68CB2ADD51421DF9FC1FB08250BF36DE6C6E71C5F7B5DDB1532B4A5EC0DF0439CEE3C787 A880CE6E19D76BF4D764AA72686BB7352B39BD6B46378AD5F4BC0771BB535096AA1A0910 52289A6FA3596D0C266768C0598800736F3EEE880A6518B69629801B7D522F521D79C4D5 F9DE4538A5ACD29983AD4011177F470BF73A4BFBEEB7B73A4DDDEFB3C2F0E8CF7C0D689A CA686B57100B5E631B94D57D79A8981A13E5A17E7D590530A2D21244AEAD9C1E33E0503E 2F345AEC480BB923A96E8F44BFC3007559AB26EEDFD17E3EF800D12244EBD5F773017132 C8753EBE61A5A50C865A0A7F7C477A716F0301DD892044B80ACDE494F3B0E419B3FEAE67 05C3DDAC829938D9E6C012065AD1DABECCD7F8B80BBECA98F55E04CC501CA656A2F0E744 05EFE577B8820BDC03F70DEACA30949DA2E37BF9E7C83E92B2B2567AE2F762014F9B8D98 B37AD0696520AC7EE3A07A634DAA5F6A0DC31CDC66915448AD2C4C126C810F6D6B67E5D2 4E4C6F59C66E1BA231AE5E96AE255C0ADC641CD7A987965964BECAFB2771B29D5CAA573C 63637471C219EABFF0AA9C49DD9FC3676A815D53BDEF104A60B9CBC118331B937982F930 B3DBECB04F87E910354B488F77856F0ABC4A44CC2678033EDAC35089B8820A83B226904D 02A8D614911BC4ED4D421681B481029C384BA0BCC800EF67472B32EF7B63E194734060CE 75B174F2355BE5F5753039D7B93EDC98B5EF1B5B27FE7D6C7D1376FCD7773CFC1C625EA8 17208D48F9EB23AC877232747B43B2B0F42A2F8C5C59B8F61CDB4E2E66A7F8661E06713F 0641F3860D22079701D317D9C7EE46CD4E3BEA28471F43344B419AF71E725D8FB4EE0B1E A78DA6243889289D3E34E81AB4F06CDFC672FC8216D81BF263CCE745CDE4BDC9E7946953 8AB48C6D0C601A6CDA32817920E180F07D1979A1938727F28849B2C3ED8AEEC6B0E93C46 6CE2545B8CBAE7E3AC0A6637606BC3E5A10F47AB6330A87EB78F6FCF8EF30452B79581F2 D90CB4FB3EE33DEEE1BE92E9DBCC2CFC6571B0F9D703B2D8FA10B30C078E8A9F316520C9 9CC6626B236E3594C0C925882E0AA16CEE04584281E6BF83347B92869BB32EF696A8312C FEEE96AAEA73AA15840FC83B4D28306FCFDE160F8163D2D089CFAD4EB6F25EA15E220FF1 49B3E60219AF3A257056F17D32B6D1A432B33138AAB79FA86759D5B00D8A364B9306953A 9D8B9725FCEA16AD77BA824B1F8F8FBC775045805224A463A8958D64632DCB33354C217D D1D171F179B9DF64FDFBD3CD33BB95155D927F25A600075DAC2340ED6B183C73E6D4AAD0 14ADFBB733C10705C0948444947BBCF2151C629B1DF767D27034CFA0766261DD30507361 D0EC42CB0F0BEF1168755143A1B4840B3FB4E17410975ADC5997A0D3284E3EB87C99A819 15597CC3949CF7F5E4E9E1E3099EFBECCA472A82B4224B51F7168599197C20B44CF2FEA3 69E7B4BA8D9BB98E57F990E62A598C62E0789FC9DE27652CB354BC55A971EC8F99181590 617796FC5AD15EF2CC2DA0ED91386D5A375B092935A81DA984DEFBA2024B82C2ACAA5420 BF529ED305006F492E5AA9BA6275305FD1900DD09178B75772881930FC9E7A64E351479F 63EA9754EB4C568077EB81AE136459CD19E84251F82B912B6C9D4F0300D814330CA04AEF 8A0ADBBB5B8A0DB0EA799370F5BE37C4D807E8FD5B8A27119B8FE65A78DEA593AEBFC500 8C8593C82F455EE03506D4C4663D95E278DE212076A48C48B9774BED2B73705751B485D7 67B32EFB2CC4900CFB2460CEBE8E354FA34FF0737AC4FB293E72EC44E87F939AAC20B7B3 F177BFB53872EA69A3CD1DDC3B5D36022FC14099C995230B7DC5C16A0819FD0229068F62 734C000838149EBFC0C07B4404A536C4708717D18B3C6246D009B02951179993A5D82421 00390708188873D83BC8DC16382E96A5843858507603908DD12046B71620A91750E4C3F0 64774103B496867891E98C79F898B96AB359EFFA4B54B70941C954E60EC346951AF08CAE 0D69D8C2E709CF71D8D254399C848722708461D186CCAD8F8A17E76AC76804B4210752A9 F43CCD4D2593231E9E3E5180067F1A7528C7D88097E4650A2890600AC26050D3062CEC7F 0D2047306AB03B0145482E8DEF9E9F3B3CD17CF34F8F8501DFD8BA71B9B8950B477C2750 B913D06905C560EB1EC41F4586A04D31EA8ED30AF0853C7FFB729199473C711EC13B2FA0 F567C15433F763E03DECFB7903264B0C88E9C7832F7789C00F6B9EE1A1739342B8F25F95 BE156E00175957365333B9DBE02D0EBA8DCCD38D8EFDE4E28419BE474C30853D904544D3 A473B57C0361D6182AFC1B697E4BB525EB63D5A5A910EE5C8C4C5C86F57663518A32FA04 FDC4FE27532F6E152DB5C827F26533A4914952E0DA44BB602371542F9F11FE2CAF69B53C F6EDC8C7C1C8D7905DD096ED91570BED26B5AB513B4501B29DD4D9E6DDF25C15025ADB9B E657937290214057120C5B3C6EA26706B9315EEF2821290B9D7C4A85B1EF68D0AE88B5C5 33818DB9C9CC7A8F0D94A5D4F58A49E71EFB217477AC157CED52EB4CEEE73BD744C48D4A 4ACFAD8F88759511B8CEB5C783A02B2CC779C984D0163C2EE201F963675C5C8948ED7223 52DA887E3F0ABDD044A1A1B0EEFFFE05CF14CAEF32FC8B8FAB3CE616AA034358894C1A84 918D2C0E5578AF4B7B99F2C4CA34EAB538A0FDDD47C67CFBC28FB688637121E93AE6D1B9 2F8C35815233DE782ED38AD1631CA9531357C744BC63777AC2327ECA8B1F725A14BDE228 36A943AF8FC9FE50CA681872D4021C6305E7AA4A66E26C3918F122C2F91631143998D085 DA75170AE5CE9424ACE70C283BB57751AB5FFE27BC5AF85289BE9636D94B35A98919DB51 D067DD30144D57064AF102090DCF3CF91860CDFBDA10E0B9ECF77AD66A7DBA0540C44C29 0A4CF2987201749993FFBF89EB449653AEF436FBBB3FC88AEE03EC84EDABC88887C003ED 3F236730774700639610F62A537DE41108FCDAD619F0C8A90DF2F25F94D041F5459DCF4A 7A64C5D1549A8AE8EEFF533B3A283DEF8A726B8181B81CFB6E0E155EF11EEAF72031C01A 0005FB160F9616053F99EFABF4CB0646569187B65C2DA22694B1B249B5139B99C9EC3FB7 1401C21D11EA947CFDD815C78DBB68EC84D410AEA96E6A8D23B641ED3F31BAAB7FDCE971 D33081E5DC709A3E5A9276F8953F84423E3CA91C4FAD53841844FDA0941C92494E233003 A74722F31EC1F5EF176DC1D469E7D3155E631DA6A63D188E04D68AA7FC627375FC8D2EC1 E2F2C07BB85D23C33F744AF7EED68BB5B5A917A05145A0042EEAB9CC889D90D61315FD26 EA3BD34F596335A1A925EC551519AE162FE00CF8747AE1FC68F8A61A551743C1353FE494 65DB22E5944DBBAD4229121083EC68B71511FB0C426DBAEC33545D17EA40731EDE7E64EF 50C0576141C1CDC34266B27FB41A581527EB9102AA543742062785931D7EB034022C7C4E 8EE0EEB9E06F21A598EA12CADD23516CC5747D94DBE10D7807A4F6BF26C1F04A9B63E584 2AEB1D83A82655D1DC7CA7C0D96EFF37909AEAC9AAFA287FC59EB4BC323A9E88B3B8BA88 D2F8314C00FE6803440AD9FFA147FBA4966CDDD8911F5A0132FFC3783FEF89B1F5835BB2 C5EC70E1AB864DE11CCF095BA68B38D87268F1D66A3253D57C83D40C650449A03A3E0C1F E8FC06E991FE8681085632C0E7C105E96E9D07060EE3BA8AE597602D2DB630AAD408FF84 680FBB924541289B7B3187854AAC6F02C188C7962A0453530106B59DC9D93733FC8B4FC4 832BD9A8E86EEE2C9394F6D3F46A3A7431F3B3ECB64C388F36BC19692F79770111A4EB3C EC2E07A7E471BCB6EBA9071D39F32421FF6EF8D05925C54340D7102268C4075B4DB2CF77 94BFE96249EE5E064D55A83EF6EC1B367A9C9EF8684D9038A2AE5843264B511887FFC52C B9E48EAD1F4F4782ABA95D7608502DB7A475E0BFD24422BCF25E228BF3C4B5BF26F22B98 CD2782437102A41913554E3E45DA703217681BD45EF79C15074C670CA67DE0C45EE7377D B0678498B7A22CB4BAD5352AE58ED44A05F7F4C8267F80C577C067DE254E20F10FBF9D61 913B69722293867BED0B9AEF46FC91FC97978DDDC5CCC60CEECD8F3A5008D411E9BA6753 EEA05C1D5CE1574655547D696DE0B5151CB08D1A2B317A1E1475314EB3527E3C7E3ECD59 3F9FFF917EF9763038BA1CB7CD7185316C0C91B70456847F310BC599932DB7B7BED327DF B7D5CB6B76888953BE234E66917A32CDDB159EDF7529F560593BD6F4CD99ACCDF4F66750 9DDCA9D7B8F5424241D5A7C59F507817468585183D58C85F46899FCD047462B16F755A6A 6EBB7F126E6D27896F4279CFFE3166D01DE32EC35D471B204B2DBE2CB12A856B79858C21 A68F7174588CF793192119ACAB5A4452AEF59502F26921C43F8E14BFF3BE9387FFC518C7 8E773B0D6A8DF85560B24255BAEDCB9DF3CFFAFE30CAD7C1A946DF6225797239FD6636AD 2A64F57E6BE6901741876215EB38D9826029A7C773CD6299EE8BA9A0BF0D45142C6028D9 2356FD03F4317650CE5920194EC29F86C3C477884064EAFE032CABDD2D4DC0A5F198D530 0CCEBE886C70502D5007842FD15C9C28C200C46626C04ACF4E2EB1120CF3AD616CECC911 22C578EE89FFF2238D29043F1C671D647D53077E21D809FB3FD9866E5A7019C4E1DA5C33 2829BA2CB391139774E240813B81616192D003817F4494953F6E0B92C029E4F11681DDF1 0B3286D4424445C59302D1DA17F490B9B96A89692403C65E129CB95E63CD80749EA849CD 83FF148032D58A43660516493A5B908EC770A7B7ADC6C092092B357DEAC8FBB0E68B9516 F7D470BAE33A3B757D389BA32889D6AA0946CAFB1C455A2A7761CE0096A155D0EDA210EB C1202EAA1E4A00ECAD9E9CA9197C4160C338CAE891AF3CF66223F144D4D5D97679FC7896 D85F622EAB85631B17896619775BA9FD94FC220C645B672CFA20B3253907AFB72694F992 BA175B048876B6FD5868D181D3EAB90FC3A23F64DA867AA0F1B08E5C57106D4BFCE350E4 95D571F777383714966FA03693C5DEB17278AF4B5ED524300ADCB944152509CCB40FAD65 CA1621D0A67EB91FAA09E3F67AE1DB7A85505D0F87034D0F7D0781FEA71543550B251D73 AB9AEB8ACAA5574EDEE0483AD66594ADD5429F1DB82378A2D027B6B82EFAF0172C14E8EC A26DC8C45D54B07501B1F1C6D09394276728DFD332864FA809E054D03CC1CF6A16BA19A9 197CE9E8C5BE049C1106A7D10348770C8B58CE4800F181E2CB4BDE0A330981EA41D85163 7DE3001D6B7AF76F5C60837FDCF2AEB7907DC566B35C766D690E26B443DFD3B33140B629 D189A00408A0978F6BF6AC243298F6E5EDA0EC5DE6C0A4A6E04C4CB9D10AA0415D4DB8AA 4582B4A8E11B7E6AF28A826211FF38F51F5177B7A8189E95835A0F8C588B378F619C285C FBCD740CF9273C36E6FA5062D445B49E4A049F5F262D4FB6B3033FFA8E92C1E6B3CE287E 4B97062C74079ECC28A706326DB06C2E8F661276FCF18B81802A1517BE067F1EA8A05804 13779EC4AC12F872EF74AAA960864311C41FBE7D0DCD74159811C921C26DD5BA3B7CD87E 2CDA94AB564E588F623BA17F59BFE3F97042E4173AD0695AA31EF5BB2B4F390D72F30855 10E7A34FC2F00137C62EB25C32B9ABCADEB30B10006A2FDD5ED41BD1D5BBB8CBA446FF8A 612F3AD73AAD22CB0FAC5D1237ADF7489A2ECDDCFFCB6328BCE5DFF898A6E2780688D6B7 D06722D1CD7A4A84C58347602A4C4466F6E4BC4EA43A0BC44EA971185F4E4443FD8533F1 D0484EC846372B37328D71E24E2E8737A8128EA18B08E1927738C529AAF5B3AF811D687F 077E25CE0B9228DC0F7BD9707E732A4EC7B1E309B4F8814841AEF41F0765F11CFDD0046C 56EF3F6ACD11AD0378DDC6E8686F6B95036188C29EF4658AEBFB4BDB23896B14BB0DF0D1 D048726CC72E1E6CE66A1C9EAFB98FDDBBFCEE2EE7EB2764E63C5B94416BAD527D6AA59B 0CB8033AEFA68FF7891F3E65711527C7D711C985A61708A804EB83F688E89F1E5AB6C5B5 AE08DEFE80592C12FB27A9932F1B7124FA869E5BF96ED642B173D73AFFEA9D95FE704A07 FA1E4975591972A427494C2E1FD38215A9EBC8CE02373157D5F9BAD17FE64D0E22FDE099 7C91FF9FE08310D0C9556534E695BF095B4D72F44338B2A86AE55AFD00A1F65A4155F980 703D569225BF5C188CFBA3455C082782C14631C66D02F7D7A02248CC6E1C1B3B54C8AED8 1969BBB4B647038758B739A37322B0BF3BA16F5320F247AD9CCA67BE0A1320CC9790BA04 F78DFAAC584ED63BCE9B25CDB8ACABAA53E987EF81BD5851093915A64A334A8CF7B642BD 2CB25F53A71E0316A753AE7817637638C9D53EEB44E040FA54DCA18DE6552E436290AFC0 E2DB2601EEA243EC2CCF4C4D22051DCE7F12FB3D1B48CC6D9D887639AD912DDC828C1432 9308AF1B5EB6B1DACA26FB480DD82E50BA0E52BD76944451D174310FBC1FF742A9226F3B 86D26B65229EA4B4086F7A52DA92DFF436AA4A602165E1DC3BEE5091B5245F4E834B6D31 4867F868EC9C1F5FB85049DDA9FCAF2D84B29A1C0C060972DBD73360A8C8B40BF90D70D0 C9E77C3332BEAFB1F7D5635B7D67320A612D540AB0E32A305712385D5D22A10E56CDCCF8 28493CA61E98B1719B2AC640EA460ED6B1086C77E530E05241F483A7012674F7DB8C22B3 06915E14B022E0499401E057448DB218CC08DFB70B81D2CA172465B7C9C02566AE89F5D9 D058FE0C9E5A754B472D6C7D13B174EA4D96A43B0593E9AACFB4B1355E917F9E8AFB88A6 EFEFEA09227809E5F2802DD25343B3DDA20C3B3F53B80E1EE3E2FC71DF73DF6F185AD55C E5717F1A6D1CA7DFB366395EE08F7739A72FF0A3ACE1483A392FCC903B8B4828886B2DAC 51D7F9CA089D92A0B076EA49C7EC6F72447AA5676C0B808FF44120FA653DED9C9CF98D30 1A4A5EE6CD190BB6D73FD52431704F4E7D5C0578CE0ACAEF43426BB9FA621B34901D59F5 ED237AD0C366CACB17793974F58C7770B55287BB7A8A9C5619DF384B3E91BFBA409EABD7 6026061499B5F3164B56B796414D2254DC49D1B7142FF908A8FA52F79DF6E64ED10A5C50 8222B4F25A082D14F8E4F3F36039EC78B243223A13E016325463CC093F91AEFAEFD0FB0E 328400198B65064BB4048A087B45DECCF5456115763BF8A9E5D0C21A53B33B9E7696C1E5 89DDBB242658DBBA7328028098D07B2306B0B567C96416E93BB9414AEC7F56556D94B9F6 DA0DBA83DDFEE385CAF399387E39282E76AAC37FF71C9BBDDFDF0E35F1FD8E3CA257267A A6414E0C72B25C0DF46717E613613329897CEF4097DAF06B5CAA325AF837F372BC10B6C0 880E7862DEB89707CB3B63F8DCDFA9AE65BBED185AD305776A23E64BC7029EDF529E6C95 9B4D17A47D23F6DD2014C16F76D3D8C9BBD0F28DD91F65924BECE22828202A3062B6EB53 63C563527D38721918FFBFE204944587FE1E6A1D344592216EF7567A958AA94484C8811B 2CF3B830BE5A607670DFF7A9B018BB31074616288C4DB5BB49F83ABBD01B7CA40CB6B4DE A6811100CD20676996BE9F3808D46BA167620A01A81B6B97D35BA9316249D1DEA99C106F CDDF62A621F3CF5DAE707842D1ADBC7790BD9FAB9E1C3F9DDB55DCA15E86DFA2DA4441B9 8C646A6E2F8A7B1ECCD36FEB457153D06195051BA64645130233AC722AD403110EF4FD78 8F6FD14A1187D957B6BA2234B71C521BDF3D9F843C0C3F01A0D6E2BBAF4CC0A75AC19A44 F0DFF670DFC2C6C25BD60FCECCAF69173AC81BB6EEA710EF78574FE4B9EBB3BF53C4D189 44002D08C80ABD9330137C1A024D0B9CACC8286F5F6E94C60D9081FD5CC3DC5585F65DD9 D4EC39621F649CA88A28D8B818221C4D94CC18B593F953FA5CF48DBECF434FDCE6CA42F2 2E41B9E51B6D6A4ED483692B1E508B3743A92F7F4E03EC3932E2585268714B54D154F716 FAF50B95E0C688B29ED623D52CD382825BDF35F2B3654501570555B785D0C74D6FD877E1 86DB4EEF79C0550F217AD8429829BD172A996A46AF8DCCBDA76398A0704D4F9104A85046 5C83CEBA84789ADFF738A990AA5B5ADAB7BEFF8557DD43DAC6A890EFE7E64E332C519B83 7C61F93B06F1C3BE4E9558A434F246F2F525FFFC0F04339B7B0BEF427E97D2F0E2946962 024FFCFCA8FF665CA8429C671B4F2E7ED8D01DA5E13F5833316ACC6334F613DD22193C4B 6E97B3DB5AA908A80008DE26E35399AEB7552329C375E61ADEEA4E560A15538A1C7BA8C7 F7E31D7DB78891DB393A84F2A05D63A609E1D23E4BEF2B492AEAF0D904EB4154C8052956 C7806D89288816127D113084E63B98A962451F62F733656B3B5BCEA44DF170C46DA6786C 7CD368AB57657775366991AAFEE7A6F32F81942D8958AB374530C1FE5599F693459A8E61 E2AF5E7BA664EE8962586F40652358CC10160B3993CB86FDAB582D1FF1C835B16001FAE4 46376817490E7F36D19F9F2733896BE03C474E0B3304A70CE3C4E069F6D0D16AB4F481A9 F8C68977206911AE310F42B330D172A5480FA2AF86FC1CF9A7C134A2F48BD19A16719351 51DDD8B3C8FE468E8EC3E3BCCFC97A996ED7E2ADD5C965E70C7120B4346637884361605A 8735E06B2D1EC2ABA1C521B8194CA22D31B7FB8CC45E7B73678EAC51D357DD43B37ED85A A2B6E063531BC909A742C9AD5DE2A26EAE581F78DABFA2C2ADA991677E5E559F5EAACE78 EB9701A61272F7E62173F84B5D15CA0DE3EC4D0461EED973B273605A7427DBF25840B077 272A60A33CAA9B6DE3F6D55C9500C7F4B8069BDF6303772F422D72D4C58DA1E727C9E6D2 B912E463EEA67E415FD51928B829F359786888B35226FEE3472BB7F0B8012149699C66CF 6A7BA8078B6FD7C51F98BEF1480AF1563938F1377CC7482E4F935D6F1E8CD97AF7F172A9 47CF8EE831FDE32EB51DAFDD80C6961CBA551B7A12BD979A4354337A43E10E3B5D13445F AEEA6F6BF9E4B2E3828F23CBF09BF6A5604662CCD0DFBFE83FDE6321A5D8FF57F1E5B836 6DABC9D0F5D20B034707DD34B1C961E82137D364CDD2C7ACF9446EFB9B3A18E708408741 04646D883789CDBB5CC1785A676E4DB60AA9473C477013C301F977769FB0D91CA75A0414 8986A4FFEB28677D2FAFF10264275E4D30E1EAA993CB86331FBC651527FB8D1A7E297E21 ECC2CF27E91072AF66AFF80DFB74F7E6ED14E750251921BE46EF5F8EA7C713A2A2B5F56A 51E4BCC6CD5B54886E74739EB3885C94BCEC9046CE0BEE71EF321DB12007949410409D22 C6BBBA2BAAD4BE9ED259CDCDE9A9060E4F7EE257563EA251C04435489A54A65FF293D5B9 9125B96E4C935D159D78B009EFA412EC6CAE91CC500AFFB2BE5ED3ECC1042FE961F157BD F29811A72179C57DFCBCDB5BC9B8D8497290436D5858DE57AA2EFC374C8329CCFD4F5974 B0C87E72F1237103A6263BAA32E38402DA117860B9106F8B0E4A6727B16E89A95495829F 6453020A80389BC6C72B9DC8657DD0336082E59EF85B04F84A1EE138B81DB390E9D67629 1494B5CA7B34D2373D0F46D2F6FC118FF79DFA115A4243473425180A0F45FF3E3A9D6C96 216466A803F88F03F2408B7763303BC793EFC43F7C19B8DD469E103A813BB64DB0EF5E53 D21BB8831B56FA3046220BBCD3F44D69BBCF7C96726B2674E24894D296273E80C9543E52 A617290E83209CA72719D498952A19A2D1D1882F7E99C90B5E11E09B544ED0B89E5B6E7F FD8F57CD971E1D2815A7615AA351C93D8A422A35036F9D98971E837ECFCBAB6020FF2AB9 C613D4B4C8AB5DBCFB41D8E893C5F42B6530D43FEE97B152A653C804F10F26B20657B65C 4E7261133369DF3562595BDD7B3C23B37CBF145C9B6103A9A39B36360098BD01A54D1875 32163C1D96ACED133B435D3E1B37EABEB2B98BEC06644335DB7547949F32BBC5CA0D7D0C CA8C0B6B20A8CC8EE7FCE7FDAFCBC97FDC52E21F8D243A8858D90B6259C0A68B1ED72452 B30A041BA0CBEFD2E1CDE3614AB3F9FCFB8484AE981F45F302B39AB4F3A0B0B0328D9D48 C029675061A43BC9D1126CD53D01A4BD2951F0C79A17012F2647AE5776DA0326E118B932 28B7226E7AB466A0645E4CEAAE814FD612AB13E8B870C8FA938B5C0E22B8359BC79A12D8 066D178FA6DD103E22338FA6DCAC3DC3E34B98BD0CE509EE25D6F7681106EEB4AC04DB58 78761DBF300172E3781384FB3E9D98346BD21572A92A0B8D9BD271D7B56287488B5CE643 F839E8A8319D4A0F899B810EE8D7EFACCA4FFC7A47360F7808E3C9BC42E01C1D91FD6DED 43D6F3E85EE50516E836C96D1085E6C1427725667C9AAD5DB17A23F1170F7D3B28F71BE5 FAFFEBCDB40F253948611A9015B95AC93EEE526623B035BF65737307E9F6E66517CF6D8B 4040F3AE284420697AE481D249FD9BB719C3A9B241E32FAF359803882ED2330F92367F24 CB9080C0D9C4FBF138B61977A09CBF4102BC9572364E1204866266FDC4C8793AA27E3782 F384B8E0FA9FA86057109030ED9F63DDA74FE5EAE1A1800FD3E22CDCF9D3E393B15DEE76 0FCFDD514D18C4F4F24D1E3B0DAA1DDBE168A21BF29F333977D69F16F79D3312C2FFB5DF AB86054BC5D74B3E3A5ABD45BDC86D189F9412646772C3BD8C080E15E2380BDC27DA0EDD 7C1F165738B9E84494DBD74E19460DE0B6CA8532253ACEB5A7B364F7BBABFAF7864E3369 0A499935C8A2AA002D24AD62599920B26F962DC846D30C92E5B968E86339F31116291DD4 110704863CD3C7603B388B72C6D0DCD05A33A29A3919F19293A7E4C584436D502F951620 E659758BD404DF2ACF66E161DFA0A0A9EC734D4FFFBEA3FE69363514DD5B58A516606BCE E0974BE1970D56EA31FFADB1BBA3FA10AE606FFABFC76C18443203C99AA7A23AB774BDA5 9CC07973B89ADDB4CBD05A9446515E02D17DF400B912222EE5E2FD1016C1D116DED3F03C F2EE75DCD02E11D7695850366119EBEC997D2C8BF6ABAACCB005BAAF886A6ED34248E9A8 38C56F3E081DF7C3E9C337F001B569F96ED391AE06E65935C40F2E80C8206AE9EB44BAA2 27BD03F72187500106ABD5C553DF0C69044E1A5509B6638366D916B950BCA1F3CA198D9D D352DCED6B40209CC71ED71DE65A74801E4F914291B26DF7D72200791E01B40D5140D9D8 01DF60FEB62D7907EC88A4B0CC4AEBEB98C3CF123842B5E5384E11675BB9C10BF2B8FFFA 32A54B8A1C0178258F2BDEBAB3C57F38CAE5845587CE5AB3A904E77E334C395037B8C693 ADCB2C5AC75496EA22C16D4C41C59BAC167D6CC8F06FB5D7C9BE08188D53F1B34C5826E4 A71548C9125C13D41BA4206C6704EA3A2C29CE06E972972AAB604FC87D53C717EE2E818D 74221C68011B0177C6F5E44CA85B8FE579AFD3568BB54B640F3398CA3340ED11541E620C 66057CB1E3D95CC6F75BFEE0F7A65A0824FB3B02D1152D7FD801A16B4F5BAF145222B617 FB4CEA223A9C2B5B301A0D37C2F8617328F257FBC61284422D8602C7DF99F7F04A0E66CD 75A7066E51975EE45632AEA41196D61CB060248FC4927CBC0B596F5B8E9F92EC10DB90A4 BC82AC4D8110D39BD2B8A1B1B0AD8ABCDF67CF0F682AADA65DBFF633372DE9874C65BAA7 F08EC31CB110469CD2CA6A4FBF6FC00C57B76D597B6E2C21700A8ECE4D0CC4021AE3301B 4C0A01B2B642EB70D2732CB5E741FB360CD933B779FEFADCCF2C4CCC219AEDA0523D2BA8 4A74248266C36F62B79F1CEE83E02DE712987114FC32E937B76C5E1DB4A824A3489257BF EC84767B42E344E9625BD788D2928C03B10A2CA1DFE7D7C0A48D5795D596CB80CF2E86A8 D91B6CD279841DCDDE62D4CFBB4A5A030758D481736AD4BF27554FE5891287F7AD14023E C38E77DC1CF0707E2077AA1A6DFADBFDED4ABAD57FE5E3F91A8CD0B10BD51C38F690BCFA F5AC9E8F0A68FDD2B79902D1A516A770E2E3307548D6DC9F5A058A4CF85710F5D189B242 F32C506CABF6001E3FC1C8B6171525F23189A122E40EB35A8D43934CBD681A87FA3BDCD0 79DB6FA12F591F121659544DD1BB69244D0D21F746269A0C8CAA9A54EE8648169D96B3A0 B8402606B1530E67185F09F6B7A907F26D9D7C420ABCDF15ED47E7AE97CADA59DCAEE84B A2B592F786EB530BB90999A1A95A908C02BCDBD477DDAEB4DCCCCDAE604B45C8C125BCD6 10DC6CEB359B9717ADA06B9E18AED7490D7C7BF99850A7F91D1A970C7D75C0302720FCD1 A08379DFF62F1DBB78A116C1644163B91841F0CC59DCA80D8812553FDBD6F4A165FBDD3B F4719623FB3D0BD0F8A575179CC665F2DE0F8577A5B7146ACA8B3F5FAFA2A16F154BECCA 4A06016EABEF129B32C34DC6A00F7B1ECE0CC4FD57291F48A42457237BA88E16DCE5C3A9 C7718BFDE44976AF812A80A4DFBC39DCFBACA7641BAF6CDDDD031404A324A4CFBA12F9B8 CB1C9AB423E6EC39AA3173658D3ECF8086ED4001D8F6DE1D8FF3B50DB241479861EBDAD8 4D40A90CD2439557D93BF5CECEB7BB4EA7F0B4920C39ED09453760823DD591A51E177E66 5506904E39C2C6E3D3E581A5B9132F80E018ACFEAC4A0C92C3CD0A6AC2EB47B941631C04 038AC6C6BB7B1F831CD9C544914033E967C7878F6653D4F045570BBC69D8227978F1B5A5 C7B50767BB61787AD5BAC71C4839F8DD88896AB2A21252AB9A56A5CE2DE1D59C726266C8 A3B15A1D2AFC9C945BA61A70C08AC499B6F3F51938FA3AF3767F0D413157FD1B454A8871 1B97F64A0BB65FD7725E8FED0AAC64BE68C7B5A2925419B3B1232C85802BBC57FAE30C32 6A1C525C2F94A760ADD720137A3BE594365B8FD4D907DF521D0D430DF01A0DD1F059E200 04D3F09DBE62C5F68FFE99A15EDA107C0A35BDB6F805B3A9824ECA59594190CA9EEC5C09 27F178535E69ED7190A67CED52CED89D06E6023C04345F873EEF34FFE3DC8C920EC24C44 A7C1DBBC24CC011A6445ACB5A93D44ACCEDF6A5C736955D602F55A800E55AFD5DF4F953E 1B59F26DAB7496999C29F14D083BF0A11BA2099894BCD1914F438B1A0BDEE43DFC3C42DF FCE1ADE8ABC97543DB5477AC94E0917766154A1F1F55F442B6F5FAC73106720016EF0718 5D4D04A052F6D71C9DEDC9FF8F47FB5B9BAA516584025385E3DFDAE3883A2C723336B32E 0841C9788F44757FB0258501E97D5EF989821F9E5417838D9726F704BC34122DEFC2E0B1 94863FCF38FCB7C7EBEA2731B24DE34AFA6B53210A3D7FF89103322FEB8F64DAA3816825 617B90FFF87EB56C50300293CD8FAFE254EEADC8AC40C6AF8B696EE629CD1CC9B89C3B8D 1965C64DBB546FFBB0AF1DB1A2916CDC77764F8B1FDCA1F739C6C53F6BAAADAC7E9966C7 0CE937E00889386E765B142E8C92B7124C7BEFD2DA7699A86163D183D253F2CEA74BEADB F3D47E19F419623CBF7FD4246F4B0359DC7DD2F96AC771B028709AF05E0E58A2902FADA5 0644F3FD64D4236C29F2795ECB069141BFF2759CA8CEEB24453BB7D654C83ED3CF6CD1CA 3239230880081D04CEE3B2A8AA6EE3C1809D0AC9E4D460432521305C513C48011A938940 F6FB1F8A613B8CA20A1B7BDCA03005A81145853DE66A88F5390A886CB87B5D28632847C4 58AA31CC8886EAF54CF958599750F323754C51C97C56855D38EA5301083221F6A2EF5656 4C3E45DBE7CDB76159F1CD19134348A8C5D25A26EAB3AD695887A0E9492FC7FB14E201C5 413DC64D3EC37016BD66548B511767298FFBE59EA84D1911F75152D60D48C009C5DE98C3 09C0C39DF56C826E1520065E28C06A9F0F77FB1FD7C770722453455B6B996945E57F09F0 AF36CC8476DD8E236FD7AABF68126A3F4E87BC3DE893F14A14FA7ACDD4615420F859837C FB5BB6CECBE5E0FF266F605E6FB9A06787FCC1A6EC2FEC03CB736CBC3E94D579BAE78F27 AA4495B39E6C231EFD15CB2A848D6A960BEA920F908DF2FC551AC89E4D7C17F08DB03F80 7993E2139CFEAF714BEA82AEEFAE11E717009DB839675E387AC71B9327785A9214D4A893 456C558804AD36A88998A101530B150D0B0DB8B2E4897000066E2C12C7C2CB1A7988F1A6 3F4D41E267F07A894C7875C875CE9C05252F2A0B8CF5F708B5D46D04C8B764C83E63DEA8 F5415A00254EBF6077B4848B92837CF6A8CDE386706695C9F223B462080680F771185928 B75027966A0C576CA68B83BB62058F7FB2EA11C9D39756D15862EE10231A7C7B5E072471 8FAFB3AA548F0E94EF3EF93285C501E4DFBA0024851B72C35347328B94B005AA2DF3B676 6CD37A53C390EECEA524D62D9123531951B879BD6E018194E21358BCCC1DB28C2538A13B 7B9EC528B1078087B15DB16884E7CE67264F67F0432DCCB2EBF2583C84C61638E639083E B0FF0319765A559C65393B8EB772EC8BFB8AE373D6E39804C0D51E0CFCD9B8B0D855D4CB 54A9DEFBEE25826DBE6EB4DA026CB033CEB670BE644790DAFC7DBB1A29331164496DA557 FB5280D6490FD0B784D78A2E1D7E155F4D249EE560547374A740F5BA86F35EA5A348CCC3 833D865D76333D13B976D7A97DD418267125122F30E094BE53DB9B12A9F6612714CA9B31 47F20A54BB6F106B7F5FF0163959A6879F0833862AAE47AE182ED568C09772F01E93BA95 A23B82686799AA92053B0F3CE99CBA1C93CF63B954C82EB7D0653973AB514E8520128B88 2D2E8365D601D3604250A74F13B06F87A3D23AAB8A3F0D658B49B8C22F3B34C2FC4F5401 ED3B061C19C8F3D2CE12756D353D1EAD01BABE0139721F5CBF62630A7885BB6D169E101D B97E19ADA3B7B3362C86210BBCEF63C159ACE480481EE4D04B1978D49DA6317922F5C6D8 2F269900D130E531F58CACAD3E6EEBAA509C0CEF0CB8FEB8DB65900E8406753EEE8AB45E F3573A591AAE031A143F5E9662C8A9225CAA134C84A39B1B5C5AD4FC63624DF7DF77F98F 3A582D89E561011342136AC917C707D1E0F7A273E15287723D822A3E91EA8C8C2CB77C2E BED9D8F65225BE239F72A772386981E7FC3B43C69AFC434185EEB8B525EF456CED8510E2 B96DE0B292755680D26A203AE7C7C0E407ACB85BA4E5697B81E2D64813EDF918D3496E09 E25B1BEE586A2BC972CB7AA8C71206D20D8C65C421BE3D848075F887094DBDFA1D7EC8BE A232B8034F6FEC5CC967B9438444657C55085E715762266DAF50CF9F3008E5C8B32B1059 D1E79308CB1822E7433F254B3E7AFBBE8393E5B6E2F69972AC346E569F17DCBB228B63A4 FDD260D36EBB64263F2ACD931A92C60ED69E3CA41DEF08B5BF4A596AE5E0F284BD13EC76 CA0E78837DB740CC2FB508556CBBAD5F00432F61AB2CF2F3605E4C4D506D98DA6A8EED7B 513FD0291DA924775C20BA25F98E10A66D4DB9A6B0A949536FE98E781D4AAE7BEBEBDA0D D1099F2BAADD39E1FD4D87B69F93CE0DB951910818CD89E2BAB74823CB4D19F8F2FD1E91 CB0F7C738EBD8DB80A5B96C3E7D4184CB050539D05B46063A5C3E057914F07CE3943F9B5 FA63DAACC5B31687AC93758FA44A283379240A618A04255113600A5C30A92C174D6CADC0 A91DE40927089259CE847F723ACF0D60B380872A796E10E69AAC6FC5620FD62961E90AFD E31CDE8CF6751F8E0E045826D0138BBF81928CD01CF39F1CC74D495044C55420878DD4F2 A77252DB935D8F4EE7E32FA21D29B32C7A9BF746AB22E53F194FE9D314FB27A592A8E48F 07AE1269D02F39C9CD8969A12FF0137345C189AB73CF6558F677F4894C1EB543D24409E1 ADE431943657F20626A08C51C0ACD107A5F65E34C2B92362D8677D28F4521A31E22615F3 ACF8076C0930F58CA19C03C90B3F538D3F8942DDEDCA29BAF19CECD9A8C79252511EBF1F 64EFA15F5601A71E24B897EDB66B32135C255E475FF3A2C1D0BDA6934478465544E0EA79 E306F189077AD704277BEFF91DB13354AE3E84009FDF0F05E59E0F5ED3D8C140C83246FE 446A99174A027640631198F00D757BC7946DC6EDD83B58E30EBB3A3012D4003BA200EC9D 606C64D839308D8B459A229C64941574E3B37E56190C39106F8FB9DE308FD6E30D111970 27892D97DAE557B7A3149486C11A86AD796773FCF1D577653D7BA2F7C3996AA91875CD8F D79E2E6B78232E9E2DF0E9695A9FCE95360A28C3C2D7175C2F02B7C593B8472907714D30 CF9CF52ED832C164640B845CEB57022D91583B686F1DA89E0B33D062CBF7CB841E52D0EE 20A7C0010B2E18A2E2D92C7998A68C9A84F91C9D07AFA1933EB7CA2FABFF26F49823C9C7 21984D31F98D3CDDEA5CCBF2CA59D05D72E360C30715EA74665E3F1CE7A09FA5D8FB35CD F9EB9D6C597AF6BC7D34BB53D009F72BEF9E5843184B4DB4D6571629875443F6A354B386 72AF3AD78B213098692A1A78C009FC97912803E5A4598E79EB0A08BA2FD5764A900B75BC 57D4BB5E2E78CBF3AC7AC3A4FA57FCE29C3E0A7F9CB3EA49670F019C841576EA09311DDF 187B336D96E0D08DC7720B5EEC95A318F876E853023144B970953EA952AD722AD9243654 512DCF653D07170C2DC06645E7579EB76EA46AD130EE5218479CF53D112DFD398096CEB2 4C13DCA24C29139CDB7EFBA8BC4C1FA98D3B8F91C16F2E587289D2937E23C52814B25A0D A9067F8DF9BD833115FC3A573319654A1980EC86A4497743D12DA3FF426D590CE64D5093 079FB5BAFBF762D4DB621A8E06398FE366F9F36F764C49A90342F5BAF97C5A2B2D3A90F9 89A9C5C9D62AB5236460AD1F6E10D7AA116F78777CC978A9E4FA41E16729ACF809A80640 A3C4AF5156E51A5B49ECF55BDA53C8EA64686CD3B2130239E3C7402E1DB72B5233A05F1E 7E02234C82393B91FB3FDB76B8E4D9FE553031EA1E1FF8D10BAB46A18B9A6E057E1AD4B0 84B55227607FBFE9BC7B6C46EB26D3CE91C83BFC8C51941B64BCB4F1BC248BE3D352A325 481ADD1D48D51B109E91B4EC29E0CB9224FAD8C5A5A80584ED09812C183ACB7B9A1855B1 CBBB01D21E331E146FBB393A4DBE81B0CF2341F8372CAA8E457E233C459181DC7E1B43F7 B418D6E7D93507E6E5CB0049263F1E92B17C14E342CD3CE2577515321815CCFC73D8B5C1 5F3AAA3AE92B211407367DE64E8C7AC84B800F9F5CA0C641A42452E6456796419147624A 8FE8508AC94F52C5EB3139A60774E7D9483E4AF0DC7D1B95B9552461C312E522B9703DFB 1DA2A407856EC5A8C3F9F89F4EECDBEAA90AB435C47CEB01E4B9C0AE4F7EF69D2E2745CF AC470A2EF667D5240B53CEDC68C6935139995ADD431546C3973E60F31C5D5B02666D8FB0 9793F882820F119BA26E87548F39F1EFAA7032383E9B74F628A72BC0B0EE9C55B8928DC4 E68B812FD9F2D5E034BE8AF1B8335207A3580F3AAE26054C6EA7809BB19B79F093D52B25 41D05D4D45763A0055A9BA513ADDCAFBCD3041FF2867A98C29A18697941EDCC1919432E9 3D994E2EA972DE2DB0B7BA4D27B3D1BB51F1F632E4D3EED63EE933E337E5BBBE6D2B8739 351E58032D92119663C558C6FF310AE1EA5D1E8534A60CF31B8BDD9D92AC9405737C6CA2 883A36A7954BAB1F872C8E5A701547D79D9B33B2306608CA688EE4A6F7EC142D9A818FFB 6E684BF80A8E36E38C0BB628052FF7B940579DBBE2440FB3F619F875C27A265C58F028B4 B79C38D50A85E3DD6DEE8841CEF62D30FCFE98E44100F513F3D3AE899781D7B308D64875 91D01FEEB992B5BDE1DD30C5ED4F6A7CFBAB5690B6A9419262597D788309CD57F2F6B0DF F62907FE1C23B16A7A6C293B8EACDE7752DC73A6DFCEC91DB3934AF26C1DD95E61D1C474 466418FC59D66718789B0FE52F526C01063890585176105682F848404052C1AF01B347F8 A7272241B332F788D9D840D97BBC8A6EA3F623ADD3DF016DF947EE4C522D15D67E368752 E5A301FA3864FB60A6D3686BC5437504F0027FD23AA22B019B3F7829A10FD377549EEECE 2A91110E65FEEB9E3683F0C70562A5DDB3367DF32A44534A78132E96D2F9ABBEFAF65092 4333BF8BFE6B605024AC14B740A99FBA815CFE3484A2B9B2A78346DC68A61F560A0BEAE7 B7827DA6FB8ECDD1F8DB855E326FC2C89F89A89F8F277E5D07117EC8FE885645D4D80223 EAA0CF4049E2B66E0DE1423020F1A832050C92D88D1F9297FE91E151757410D9EF0E9006 2884D8295D5E7ADB5B55326845C161E41A39F9741B176C809551B94AD8D30C108519C80B 215BF9525784D48F0E78731FAB840334B5F40330F7F686FA4293506E195DE1ADCEBA7779 CA04335E1DFCEFA4268F83EFB87C0AE04E3B02D7B6C488CE852770DC5D443127DC006C8D 135571930F6EF88C64EF2B5B746160CC92F67F9880D5C48D5BBBC5AAFBE7EE19F271ED66 AF9330723F380AFFF298C9EC504C96874E2B2F59C1676006E4466615F946C8734358CDF8 092FD8170D8E2F94B7EBF937398804D2CF24D4D168CF4BE5AF8379E5B71F3C18EB91B10E BA558636DDA1983A20D6DE74A6BB8BF813F9A7BBF5801DB05A8446037A13EA71155F5E6D E9E0FD29A294988F84EAB087D5E94D7A684A8DF265C94C0718D8AEC81D07B39A8D9DDDC9 5E1428E015AC00F68990AF5D6106B8597C3D56D6BE7278A708916781A5DEFE093226AEFE 40EA8F26F0633E7D857F737B291D568BC3A45AA3580F789B677C6E8371B5FF9F4E0E02C5 D5EAE5A7180367DB1BAB13247DB3483977DBD2C5562E5A178FDE0D0A5866B8A4866031AD 2E415255211824B07B4E2FB0936DD7702B648591874E4279C62A7FCD402174230211A50A 3E67F26A8351FD05770D44B85F7137C5B7179EDF6A9E0F94D55250D7EDA565921770DE70 942395029FCA60278D9077D5691F47F75F07BE488BA2B3168E4FF7EAB0507AB28CBBB43B BCEB29F9A987A35725C61063A9CFB3391EC44407092B0F5CEBA020FBF5EA430DD72DCC6E 7F3A4514FBC6C9814AB51EA2193BB421B6E08955F457AE2ACAFE899538ABA1A52F6C76F3 6F79C780BA658405CE0B78D92640C7590F94A1BC992F62DCFDC35CF839386AFDF17B6D65 B620B2E47415D8E3E153BD0FDE489719E2A28A1077BDE692C4FBBE39F16E7DC64E1CBFCE 959D15935274D89C0402AA6CAB0859EF052B4D92D591BE965EDB0FCF4D2C44B28A2B1D97 9E62B3CDB307720DD65DBC0C3B88040C28DC8D127CE92EBAC59082DE57A620FD0CE440FC 69F1A77158D7FDAF42E973970D0408BE6AC004ABC2FFA739FC37384371FFE8C9391C294D A513FD2AEC7A122A6DD57BFAFC405558BA8BDC9805BB575340893BE8852FDC3BF01FFB1F 44D08A0E99328A9BD421E71B267237AE5A3F184CB9540D75389D0408F5808EFACFBEF8F1 3EF92A49ACE6A82D1707D082916445FC4A365AC4887249A8DC9DADD3597B3C7A06A9B4E6 C02A34F467DC5B83CAAA994569D21037BF602E4B03C37F458A76F65F5F0A8596B7304F48 611B6FE1D2490448C51997159EFD36B974C79436175C659633461D295319381CA353DAEA A026F0DB93DF6BA99EE3D7C63A0A30B0138AEE354C42FCA09943173321831A7C5838BFD7 557EDE389C7C4A63EBC865FE1F5CBF7E3650F00F29116FC011C3519743BC423214D59A65 B6C0CBD85BF923527DD44370B4B39C530C37771795F9ACBD07F038540D50BC9097D840F7 ABF63A96F46D51A1C94C5D7FD649CB95B7B443F68C844FC574B24FD10754BB51837F1E0A 51FF4923BA620900FF6E1BC8C096C5F4D813030499FE536D26888F6932CCA6035647C141 1244527C094F4D709A2B59D10D432BFBA5B7BFE2026B5B9E0D3213A152318D62DAAF07FD 460D1992433A0A0BFAD81678CB7D1DB90CCA6B7A7BDAB655BD5BE89E0554D3EEFF1CFCC2 3FAE16CC7C3805E110D74A5D5858AC0337EE8CD178155248231AB5065612B748E662F6FA 6E90661B0C93DCB80D1DE4B0D41444E7052DB1D91882E89E8816E18CABFBFF932B7199F2 2B37F9955980871E821F86FEE7C0FF472BD5EF0DD566F9F604D6E5AA4329336CDAB0F974 F6EC5807A0F57A13E0B9651E468D5BBEBFB4B0277AD74CDB31BF224C4D36221DA23A1047 771E84860CA985EFFF21555722A227C925C5EBD1EBBEBB3516DC91465858807290142191 F71E73DE591FAD780C151995AA8A6A2ED060B9C58389F8FADF62660F9CC79C08F9DDDF63 F2179994052354DF5FC945CB6E470FDE5D5F78B91CD60E66833D7B1292302DA42EFF6D10 A2888BB2465C29FCC48D00541C607B74FDBAC8E1B4B2E127DAC5DBD96B4EED7B97857094 16B68075B3BB9BA63649B1784EEA6C9A029C71A8721A36F8F367B0726474E960D60FDBE1 387B8AB8102E7B5B89EE2C5329AC7324E16139F94BC75FC4A418992DF83B7F3998B7C18F 0CC0E800A527879F5CED2637327E197D87FB96E054AD038999CFE02902549967E8C7FE38 4AF056A1C95ABB5655C679F5C5E680C697E38DFB4C2D29373E6A761B29E6A1B0C83657CC 17BDE5C41C609C4EB14026086CBFE4494C3AB9859B2D8BE9975042CC9799C9FFB0ADFC5A 2A80D33A077FD01342047A272B160B45636B38F7B88621CE9FD4C70D30E7A021A4AFA559 D77E0322B7178D20DE5AD0B0E2E17218D36433ABA08A889B6F033CB18961B882E87BD138 37BFC393F176D09E1F7D5C4B8A6877309DEA2ACC72A5A49119EAECD05B4C1C4E03230C72 0A2333FA63A096B210F2C79E039B453DD56936D280A2CBBA751354055DDCF2752623492A CF55A847F29A80C4E34D604CB4580F2319C15AE7C03A43E4F18B0E85C768AE646144DC3E CB8080EE19DCEC647C90981BD11FC885988DF64CA3E60CEC371F513E8339A9CC2E2B2F3D 15F6BB6E22355F9B6078E986D80DA30AAEDDB1AD77516F2F81218CEDBD7490C8706CE427 A31E5A0603FE10B86BE3E3AF2880D5958773D748C6F1F99277D906AB2A8235FA3DCE783C 0BD9F8D6184EB5E95AEF956873E1AF6C765F15697D76136F2D0DD8B9818E9872C27D9167 A11F420096C7FE95F3529CF28454AAD6B658FF50499A802084BF4D8B7F51C1C7145F7085 BD23C644513177EBA40F5DB7C39FC72AE417CA903AAEA932EBAF4C770A1E344402AB4B37 B4F618CCC9386E14361874E4A360E682B0BBA51AC4E40F99076F15DB22D73D60F79ACE58 5C0E6E5836C6FCE9F09E7E5D62D229D224C9C890C61E1A128647613932FC4C045730598C F580AEE613FFADB5741AE9334774E83C3F1F4A58635B019F7AEEDAF60985DEA0E1FE4E13 1C2E9D5154C5C825C4C96B0A965D0F11481043E8FAF47AEDB55ACD1F16926136536FB721 5E0B68B20D03774BFBF7C8D93572DFB28D8DF085AFE01E1112404B242C645989103DA0CF C2E6D8D7EADBCCE62C243CB534F56A25AFB49B3B667D144337D257A1C05DFB8790127840 6C605FCF351C64B7443C32394BDD489B88861EEC3ED105E72DD86D35B3925BE0A6438829 C3263A843EC3A0127E16C996CE338756EEFF7D4D18F87B5CDEAED06C2FB274D0B2888F65 A90F689073684914E3A324411A6B13ABEB3DBE45150EAD7866B91532BAB7DC81D611631E 2C65A50AE4C14F0F4DB337A4B511A330D178BECD772A1B540BE302DACCF7988DB1FC5CAB EBAEB484550C99B1FAE40A4E4453A7B884E9F0BB8B9D2571EF6FE3A4D1B28AC9C007A3D1 FADA8DE191516F1C4060FE04493DF1716EEFB462BDEBAA6AACD9EB791731191F58A0119C 65805EBF73EB50FCD97FCAE1762EC1C7875DB3FB081DD08232D4140E7D3194CEFDB9392F D3B65EC9EC3365662527788759E81173830253FC3838986A85FF1B07D68C32264E1C978A 29FF8856390AF44167D82308AE8A6272C2E021D777438C44585BA8F8B3AFE3948A647CC6 466A42B15DA702CD79FDF03331BDA74E64D693492A0ED3653D24EBC229D98DDD52B2D662 C845A710E485B274D01F3B82D9725248E884A1D5ED73FD390D77D9312DBCCEF349412F16 8461C432709A32AEC702F670ACF1A29D24F33B7C48CE8EFD3F5A381675A62442DD70AC45 9F4321C73ACEE6E49E82F2A9597344C997B2EBA3D39D4F67F34C9C404AF2664850BF1AE4 9F73CC1AEDCBCA5FE9D05A5892F904580FDD0890ADE0D31E95B75D8F8543B97FE6DBDF57 B097F2854FB1DEF1B9736ED3B460319E9CC792D1190BC6347D8451779435FD44105FFD16 7D14560E44257ADD04E0B123F3292523FB528D0AA25C6FA6148DCD9857A5C5E6BB18BBB6 2ACBD57FE48F28E773A2DB47191AB470254213B959FD7C623B148041E71A4EB8EAEF263B D1CA72C7151949535EB9E525CFE02527C187C01B3E821F329D14846FBE9552571708D53F 4DD01A41F2B4CC22827CBF6E6BF25B3EC4ECBCCB0E84560B7F44114B6D3845BEF79F4C76 A378D235708D7F2E72C7C198D462E2737078554408DEFCAC3EE5DB824A62360434B62985 0F767A9C94317AC96D27574711918D107A55AFE5C9B5241F40EA76FA9F8F70A20CDDEC99 2477B90DDF73781101FBE71235A4393D540AF92E5916161E1B1B82953A3C8CC6A0F39A18 3BE02D32B9F31516783BD2EBDF374CD10B8FA1B66894D5B6E04389FBD09E7075498DAE67 85E274F17B4BE442770A1E34056FC078052176A5F947E2FF90D565A71397B40D4FCB8651 6DF78C97298225D9CEBBEA37748D3A59EEE744C0DCB9C9B9196113DF251519B6063EC9EA 7F3A3D4AED05CA2CCF515C8BF81DD101B612174EEBED4BDAAFA3D3211DD2F469C44A9ED0 252FA99EDC5297235FE0C882778F89B67ED0FBAAF8E29978BAA364585409DC42D9435CD7 031A625A8954E4C3E2D72ACF1F44D1FC3B87A3D5C4D7CEA3653F91A2AA21BF634C20F58E 76298845AECD03A760A4910F1154A2E76085464B2ED84D6E78FF91BB610F83234ADC330B BDAD211EBBBDB9A88A573B8DB1DBDEA4294EA1BB73F8B485A89C9949F85FD723C31E36F5 DF6CF708460E518249D00FFC8E0B00BB97443700172162D1C4E4103FE9DAB9EF25B1DE44 C761DD508FBE0FF0544027F091D25EE46E64C847E2BCFEC6880B78334D629A09B7DD13C1 28AFCFC6A5369C0CE500B8F3C11F0CE054209F6610B661D5097E641869E8B0EDAA1B1776 5EF85D952E85BCAB9504FB29EABDB1C4F083A457D0DA17DB3527EE25243ED748E4AD7853 CD777A2CAA7A36F61C64C1C0DA81B27B28F28252D68F72EAA3A4DE3AD2A0624819C26F7E 42A09C3AB34E1C6DB4F13FD647FD6F9EAC3C75027EC8EE3393F5810B9936D08EC9E189D1 6D49D1383AC35CEE246C3A7F89FEB418F349C87C7C95F0955CD746792B3BCA309B4DD348 9BBF2716DF2CC8FCF0FEFEB87A2EC8F37B9E4A15C02BBF2A8189E64EE0404A51EF216A49 EAA113806223714C66209A18AAB1CEC15BB65C1EE66BF9772252C4ED0097FAAC5A483979 B338C42D0F530C84BB9D7A7C6D1659758BA8D4ED0052B1A639F167FFF4CC89E0EB8F59DA 7CEB1E192A10785055DCF05AE6A0D8BED6BA2FC377681C71D2298AA75B9AA69773A3DF86 54ACA8B097FBCD701417DD597F02F76F9D0F5421C00252C6AD064860744EDA869183E5A7 8B912CB1E919121587F481A0ED988CB29D16B4DFED5EC7420AC3373DB8D1E10D4DFF66DE 82D821DFFDDA9DB2D51AA709291E48C2CCAD24672037EDA840F4FB151C113C878B11A120 5B1D2814C82D379E7040FFED9CE24B13D5C91C32F153BD553F2A067B1F84FFDCF774D805 31D7D27B6DB85A2BB672BB01C240DAF09A441F696852E057C600894658A042B8D32F7305 A6BFEA87C20E3A3F4F81C851FCC5A133AB0A2E1F4DA9E8E52B43B5B7ED9B237E3609BC2C 0D8DF9FAB655F5F2D722D8CE7508C60DA6D02A69C1DB3ED897ABDD0B54A9C3093FB6C048 859F13E617C8F044AD6C40C531E9CFF9F89016837BF5FCE4D0CA435A3A66CE747E5C1DC8 C1F84DF7D86E1667DD48CE714E5A6D80CA8750739D01CF9CAD13050F9DA8080801F98ABC 33358990F075ED6C5F23983C55AFA32D516C13B7B9B2287D210E219B0C079976ACF29F3E 53E60DAFDEF70205554C660B1B3C2AE3F9155E8DF36C8FE15AB620182B7BBD8A95C4A607 9D04EB9AF36F34CA31D2BB7394D46749CB4ECC1AE30E1B7B2D7E3B2372D397E9717BD25B B07E67679161664E39C1C57A48311FA3EDA4B8A8D145A897B1D043D083B163C4A50EBD3D 23E47026365B2B51FC62689711ADFFFD4A3B058C8E6D7527E418E03560F78CE6C122C625 BEDF73CDD099D2776F42CF187F313204548DB81681E2B0946D798A8E01447A3FBD6B1AE3 90AB88B35568A93518C2CBBC5AA1082092F270F5FFA5E20404C5A75FED5680D4C3D06668 20E3F1428DD2A8E318BA49F34E10E83A7579AA37E8D62A47CC9E77F4B528CD276508E403 DF07C05368E8ABC64C5AAA0A0159D25880C06CCD5B0DCCA0F331ED7DA07AC0D59FEC9623 1EE684EDAE01769B4FD8FC148033BE955017561287FFBC84A7CF54EC782B6A305587AA12 58C3769F02A9489AB6F8C9CB86ED23C2F991B29AB5742C397EFEE45A3EDB3509DAF7F64E E523110D60226586D7C28BA2C990D87B158D1931908E5F8BCABBE26AEECE1CD12393F2E2 D6FC320CC1FBEFE23E2D21CF93D696C553FFA50BAA63D0C7CC62E2A345EEDD4512989FDC F07960C36AA536B264534FD00B4FF3E7439953238BB4B91B094F8AB444B38D7574962F94 6ADC5FFA15B64F6C452F2A20D316B33576F948627B6DA0D14065C0096EB0FAD9A2FA03E0 CF216AD1D3EB4E58BBFCE6C2AE08BC29EEC7718707C075560EBE1268A98DAD7A17E239D0 C233FE6953D3D07C4027428095B59D348A2433345DCCF980315AD5EB8B15A195C4CBFB87 EC95D4DBEBFAB92DCEF41135F111070E77D6CA91F38E5F3BFB8FE964104F9974676FE06B 30D4D75756A7ACF597D6D37CA94E422595AB22F6A62C438F5D0416D63F264592A3B09543 623FB72A724CAAB4CC52D4FDF8F3A670E7895BEF21D336F9C0FD0C1469B27418A19793DE 87007533FB3B538ABBD133F387FBC4E34FB43A3034D6B6DBE0E10AC07E391F30A3883FBB 4694E9514CBEEF6271BBB7BB09C76D0E664A1BDDE3D02136A5E57929F7B457FE01452F31 45BBBC83C999911B2B651E0CD5D58D6F32C6207A85487167F7DD622A200F8D106F4A2439 9E1170633FD19F0F22A617722D948BD57AD2FEDB452B2A4F856E961183CBBC43CA763DFE 950402E728B62601C46513DE8DBBBF6B59946DF3A934473F828063071585189671A68593 50D1F1CA00A6C3D8DE002E743E6A140F86E5A971C60DECBEB2CB4BC53D25B0FE1A364971 246709C58CBC815294099751B425EBF9697ADFEBF3D718617A1D0A84D0FAC5B586EAB47A E6AAEE3DB51B343B7E156ECE2E651AA24C9B4D8AD17C68454D50481552A644634CCA91D3 B789CD14014F42FFCE3F762233B22094FA593BBCF7E13D4A4E5EF668D77EEB5B5A9C3554 6EFED06B2FABE4B4057A8B83677CCE3945E93A5C5CFAB27598B41FC2D12DE60E967A9FF4 19AD70A1FA17C8D6F54FA43AF151D4B6AB874C35217894E7EA916241686C0FE8E8A33F71 567CE66A566AB979B382CC78000DE5B919CA88440D76B84C7E6F8AE06E5E7E4186381877 5D2D61CF7943F5C92224897468504DD2BDCF375F2F265EB8E4FA300E7191CA1EF609F6AF D782D282DFC3787A3F3695820445D30F2C3C7133F1AB72EB77E0ECB5ED0F3D945703B222 3413C297BE34D03BDE2130E6CFB96103E61829BEE0FCB97F03B17660307DCF0E57E28054 7AD6DC8FCABCE76A45179510EA7BE57427E058194903FFA97D7C73FF1B24D0562D96FBE8 00AB5E2AC212FD53F7A145C8C74764BEE3D9C120046D6387D7086390AC311018994EAA1D 8AF417C09861D94CF3281A3185C1E9664B95288E24112B0E7783AA5C8D82B9049BAF1A20 F9B15B045351CEF41E795BAAA68C19D586DD583B3938C5735B46A014BC120534315D55FB 357768E786AE56601F56A22C5E8472DDAC4917E53D89B1DF36F0626DB19A7B2C8F315439 5E6EBBAD56D7443CFAAC265CCFCD07ABF33A38A26C3D2EDC5B8CAA1CEDEA474442C38116 EA820288AACA614E89F15962A88920458329115237C62D6881BEF1E5C39034A106A1086D 0E961BD490832A5637A6F8C3DD46A14D387B1BD0FDF81064D59DEF1B98E09FBE41C65B3E A41B1B0AD4C993B164BBE3C08C3F691D427C22E1B3BED99B26C7E89368507B8824F677CB 4E2BB4FF923180C495EE108D2706A303553307F7AC45285843372A1818307EE5FF7C61E5 4D9EF094C4DA86DB97E496BE345963FAD536F7114958F9A36B4BE77E4939899914000F79 BD75B248FC4BE06D3606EA131AEDC8C5F03C82D4F3695E4DE0B43945A8DFCE67C57CEE27 25F9FB1BF7CC36C68BD1B449F0A3B18B189287964706C0FC7BB81319561E69404E560875 9C553FCF2BEA89C55B7F2DA593EA700F19F73F64A84DC68F0DA8195B4654395200F85DEF 63E398502A98EFD005E875D33A4844C9BD23C323D841F24F1ECF171C3FEE81186747B960 787D796C7462C3D938B42C1DCBF7FE3C3AFA698FBF1EBF90B634632FBAE774E1AF41B0CB 6F03015F397A8BA3F2D1902E0483C9C6BE7307D5B54C146C86B1D883839F556575183322 165744DB0E3446D63A6C362A608551A77526B2F1E374665F40098E6FF5CB11EE366C096A 3426DFD7297AF294C9BC8159E4BDB163D0660A86304AED51E7F42E3827C7FA7C3316ADF2 21BDED53D63DC95C55305FA559288DF74A0F054EA718FE44080FD636EE2D0EC7476C8874 C068E5D59D52D874121FE7DCC0539220988435486C478A8694462F51D3B09F8584F5DAA1 DA561B569ECBC42C15418758F5DA7D5E96D5B7251A0EC46FF8492318E25C3B59E7791A29 62D50B4782DCF736AF82B1BD4274D98F3DD7E3907300DE09493290147A86FD0696213472 8C8F39F4447BFBCB9796C28D2593E827ACDC51B5248AF48E2751CD0CBBB27CAE87B7EE5D 4AA30DDEE88D304DB1ED17CEC9690551EB4A977783404106294517830C5A4FF5D2C96C26 A3EE8F8E490D57020FDD352C6412D1E0B5D6DB194722EBEF065C1A3D1E0C07D19C91AA93 B1C2AA6AA87C3CDD0B3032E2688E0CFB47032682ABC42DEB30D86F34F8CB1B4FAFDBABA3 92FE9D6A5E4DA0F72A9D8B351783F683926BFC651C293A43D0B5CBD635F5EB6AF0EAE09E 61529C7BEE19124616D69E963FC958822E74CEE5C834CE602E2731114D89F1CA38170197 2A3CA93B2D64C71FB660017C11CCBF12F5567EC90D8650B5D4A44CD4E38AD11466F17A3A 1A8FCCAD31EEE6A909AD9B82956C8AC45A2D53F7F5133D648E3CD56D8CAFDFFD1081B715 BD98E553687D450106547C15900A2536FABCA60D01A3B476079255729A1064C2394FB9E1 F6BE47EE61E9337347A8049464777612D33B82AB094146254EA43597F3E54EEA84481322 A0BD009469D039F6106ED80991DE079E6708C085C140E289FBF8DEB31FB4F9831B0473E8 440C84A8D9A1E1FE83010BE2B2E4D0DDC50BC0C55A71DB2A5DB1F06A11CDB6E39CED7299 DB0A3F145554A76B703F94384CDBF8454036E7E5A082A0B1C90B1BB4944C84E1A866DDDC C2A27F531FA14F50651CFEF9DAE104DCFB03930FF52CF470E528B7AB329CFB8D2A15769F 79C0DF378E0631185FA37AE1BDA5954D215B685785A1430137BA005138F6928181EF77EC 97FE6230104802783DAD2B8E432EEF3E173D9238C48C6917761F23082531BE98C1D50A12 A97EB5F7BA5A47AD4029A511ADF6C445CFA91203B8C65967916F67E9D21619704FB15273 4FB36A993412E22AA06020C8DB1D316B5C080C6FF6AA46DE1EB9728EC6C9B0041EDB9F03 2CA2A8EBA37FFDFE5F9EB45A5503594A604CD8560C8FD4CE7AE81BC940734209D28D86E3 9E2ADCAF077913F4347A0738218D06ACB3D1973E74E7F87831BEE0C78281B018A53F07DC FA7839859B748E406F14DCE1C6B608E2FF3D1CC0057CC38187B7FD5A812357058407524A 725669915C383B041F0B526D1F2E72D3DD39AD444B7B74F3D829DA523D686DA5CA3C4F7B 4E395C5DEF6BDA78067BC0DAC3B24F851CA87B18EC430345BD24710650C9EA5FDE519786 604CCECEE635403337031D3A712878A687973807BB99C61F7EA4F7E72284D05A5CC5156D A7FE48711EFB84BCBD5140EB09D2119AC8AB158342411158BFC8C6D178C1E5F536989EAD DEB098CEFC6D98520B814192B75E13DE4C919D3FF1D0709538B9E917501B7F46C3A651EF 12C11E4725770B68B99AF79B4832BAC80B082926370724C1AD21310AA100B795E4C3EA59 EE179A69F075BF79AF160CED6D4438C0860EEDE6FE3CE878312C2FB2170E64A396990471 A93BC34D84A835D80C2A9C15213FCE12908658BAD93ED156C6FDA748B1014CDD07D8F4D7 DC2E265DBF6B0F141AE2EBD90AC7A46753AE84FE97FB5407F320DBF3CABA529FD3E90AC8 50569AB34AAA4F05F70AFAF32B7B047C68036218FAE14A92352EB651ABB9A8212C908DB5 DB82DDA2AF0AB29487370C155DA07D8E22FB97C79B12CC35ADC8EE7E85B7406AF7BEE5E1 B3919EB8BD64E12C097C1D088E8F0AA78A6EA4708DF594D0E30B4118B33690E9441527E8 6D5D7047F2CA34A08ADD5D9A52BDF5BBDF9EB435F1C21AFAAD25A1EBC61FB6A50ECDA4A1 1D43F67C80EBFACFDA193128BE22BC41B7BE3F89102688A72A7ACA208DB060E3B7B7DF02 28460EDC37B487813EB676791581C901000B622A92F2E24B4E330825A3D036E7649D1F3C AA7288B5F3B8C9547D280A9ABE9A99793B04DC53573E8A90CC3EBE4AB8976245B69749D2 02095ADF630F1EAA44892E7542630DBE6C8395E690ED1C432ED40C243D64D4C7E29DD36F 3AB37A9725C9B537D6153A495931E31B59F252BB503F34A91150B9C207DBB8136B40D2C3 AE845E87A28CBBB5E74FC7C9706B068D194294A82BB745D922D2D7F49F103190CCCDF0BB 9B7A092D58586F986E6331FFD700104589FD1A92D6E0FA507D03D4360287E71847B06D01 C61A1D64F1F987AF08853136935989FEDBA97E9E4000AE8524D77A0DA48E11FB1AEE2BE2 BD3F2D0DE1F32EE085A2AB5A0BDCDE9CCA7E79A868868F313AFD0316081D320F7A6F4A52 7467CE4F36CEB0D6AD57B09C7FF1C6114C2D85318B3B9C02E9881D8822CE629539D8E793 2D3C6E8AE157326C06A8AD94EB00C48CBD94FB672F671B7C2DE42DE54D5D6538466FDE99 3EE0E53BE5B38B60B6426FC33E22B804F0C46F89CEC580EE1D8DB7D6AB2F0266A8D521A4 B9EB3CB15490762A0C78308AB4CF68C86F92172AA039AE4E1617A19F8F14BC538C4F7C3C AAB02A3EF96DC635D8D4A8358C6C847EDD251FE5ECE6EF37311E9196B74A808171283DA4 65216A8CCC42724997737E60FED3FA73DB707FEF7FFE9E938B0F0E9A8B5CDB01A49E2246 F1C03FB95A9B4387E1580053961BB2712B783AC81AAB9A06B1991EC65D46D8B1563E843E D87D74BBEA140CD61ED06D48B96038087822727C58A88DF6BF409BE57A1BF776047BA4DF 51FE72AA78D706B0CA8BF26FFF6D58D1C9F2055F2A5C527828846595C734E47772FF7502 F1B07149649CF7EF85C4027E4BAB6B21A1E6AE27562FB6C37D50C1EBA3CF231000E73D3D C2D250D635E58E91C2B9FF155574C4985FBFC4CE9064ECAB1EA2580611DC632F3730FC17 E2F2B605F86FD444456CDC3E5DFE7DA202C8E3C80587E694CDAA13E5ABF7E1914431FA99 FBDB3B950A7DC67B1F649740B8A9946DB34CE292862A8D03B5F83657EA05D767A6CA2F27 C30B56FEDDF6C0422073A7DB241D4A7EB8836042114BBEFF820B70735983D2B3BC4BAF7A 744CC40BDCAC6C3A2427ECD2BC3594F0A1583FE96065E47719C6468822D78056533EA12A 22CD8ACEEE702625DFC89CB3450724B439A5375C3B06EDEEF7EBB27DA5BBA7F890F30642 7DBBF9D7EA9506C320B956E9A2B50AECFFCD28339DF4A2483F932740BD92B892C2B504B4 6233C948A941D551170075535F81A3A6D35E837481BD1580898D54F3E603092098BC9754 14163E89C18906A2DA619E1A64C9C0B5E9A3DD1146CB877C6964090317B4C1C7F9347CD4 51AD138D0AC41C246A3E34BF82F49B29B38A05A00CA0230B8E2B9F55A87412BE836F6F43 D3CA78B7EB9CCDEA403A792BAE219C98DA55E3EA5A4C55C8B11F6B0E555D638139FC346C 589F61A1E0C3C05FCCCC9B233C0FC9E855D7062DA269066C90D5EACBAFC7AFD7ED68633B 88ECA92D702BFBDC03CBF278CEF8247E81816F207C91EBF74076CF531DF4E1FC20D47122 AA1C38F697FFD0866B3029849A86EACFC0390ED27344BB5BBA3B5E2235BBC80F79054EFB 51A84C88EB8056A0395542ED1F906437B5975BC3ED5C54DC677EA7D112B00AC70382D349 A4F0C65F2AA1CF2C3FC14EC4C0BF214BD70AD91C33890DEFD627BABB9824CC61E34D1A81 8A7995527CA564CEA705B0AA4C9B3FCB8953A8F2FE8BA4D22347EE87C02DE35EBE2A03A3 0F6BD802BD67E1A7E0A47F16E158A4B25629486593EA1FD084A63400C806C08139E500A1 8668F2FD55EF7E8C58ECF8AF114824032589A58E982B3BD636511949873A1A75AF8B4D34 0744812BCAD817591CB3BB164E27A30FEE57BFE3D42F92B88A8D87D84C70F8A812598B27 EAFD847870E2C79C68209DC9356447B3B0B63E919A952C635030402E813C78510488C2A9 663F1AF56D2B22167D53FDED08A030B773CC0139C6CCFA631A4400365B32683BECE7CCAB E1572E63856E853EF57B74DAE35CE58FBF9D8E0E38AA9A817041F62D8E5B321B8FA81224 0E1FCEA2B46F3B080CF7FAC0A1A2574BF80783D6E44B60DB32FA868D2A19FC4B90E1535D B7C0798578F15AAF63C8B5631ACF96350EFEC455CC2C0A0C0F8CBE1C4499461330EDA86E 23D270756A3E081298A18E9422B2AD243E71A2EE0BD9DA09DC1014F62DC6A82884280E13 7324BBF70489204DE56F1936090ADBE89BBE9E5400E2512661EFCF09A684FBC235E63BB3 74DDCE155A6F71AC868D7974F6E988071680794FDF680CFF01C66A9345D2002C6B352E51 D0249E8093451ECB89192BDBBD0849CFD3717137DA4168D33E585F2FE7D0CAC331FC36FF 7E4AD43B20D864480471D50D2FB325F5A9FD90F0A9CFB863724A374013E58586A8C02098 0B8AB2C22F32659BEDEC89A7F1FEA032CD402EB8624BE8F2EA2DA4D3FD0D23043E33E8EF 66442C3D08ADAD07DCEFA7277D4FDE727907D36AE367D16FA47E630AF53BBD7E090572D6 E5B5A2AFD2663047C33025B02D76DE634A71D4B954127FF5D798A70D155640A8E38FD17E 14400B9A3849503585FD8CEA1F7873EE98D068250C9FFDED0306FE19D07B005B7112CD43 A34FC159798A408E00F86059FBA987F769ED2CEA21D7289C7DDEFEBF3D0DEAE16621FF5B 619126F5F7EFC327997F2E18E98B5F4F5BC4C72023D88F8E71DFE3D572E8476851D95DED FA5FE97670B9154F6E9AB7C88686D7D0EBB4DFABE53914792BE0F282BB6958A367D6AE60 BFBC89A6A4AC14386D1CD985198905A16F964D3FA3816EA7E0F907DB6EA78F4DA1142643 AFF65199F5003B2742D402407A7502B535239572C95DB8A2DD0FD5BE70837A13C8392661 AD4ED67B30B369ECF17AA972509E54D38F6ED57C9420A4D1476AC67AD5E911A36D361CF3 DA6800701006F2329701E09DEFAF0BD9F1A34B4ADFFE306CCA2D12FA28456D535271312F F21DBDEDE3E9D74F57ABEA1EB6570F3468CC97503FD885227042F1C7CC6ED1642A4E01B8 1A79BB162AB438BCBFE12B0BBA1FE58DE6859BE013F4B39525991FFD60F8D9B51CAF1D9F 6A2A695DF11D92A7FF25E04C3482F853F1653453C60229FE73C80280D99CA5BA1F938436 87EDA3A2B9E63E569095A1AC14218816CE0F5E39D01936B8C7E9EB9635A77C0EB57F45EA AA4DBEBE1E9AE0B94ED76F556A23B672D4786B2F00D4BA0836D10443170B2910AA8361B9 E38750BBD1600266499755533C36E78604CA5CCE138067FAA70D9937BA32FEEF951F7964 BD4F49A8BEBABE6453A94DFFBF89321CD984208A53E48A87BD2CAE3B8D09E29F884AAA4F 7EB65A9B6E414386488D5A5E977272B363C57410DC8202940DB82D4D3C1799DFB2E6FAD3 CB8090E3AAFCF86DE219FC369A62255337330B8B568BAD428C6789093ACA5E62DC3A3A58 ED081203AED428919749B376C4855F17BB355E98EFA0DF9830E9038CEF78D7FD3FC87C77 21B1040CCE5209041426F7ECFB2720F02954DD54D8EE6ED5AFD883547E2E8651D7E1829F 6F0D847190FD14209142A19BBBB82EA6A1AACC8A18D2CF54AAC3EAAF9B696EE82B6B51A8 293DB57D2AAE7762BF03CA0195FEE7B31523458E1FFC916B43C31826C13D4C55C04EA5A7 B903D94007616049C88444BF30053ADA3468F481935278A898A2F0C615E99BBBF974F52D C034E36A99A8AEB1509703B8C355872D91529A079143EB34BF86C2D63E014C390387D747 615A4F9653380E4F659D71BA04A24DDEFCACF8E4FCF6C3CB217074ED7A2877AEC7751E74 351A87E7EFCE844421DCFD76D9EA4D2C7C9039814145F11E2813D8145626D6630677465E 9A33D446642036DE8D281EA6F43ABCFE0FCCCFB41D526D50E89EBD485B21CF69EE558D78 571567A982E62FE44D87E281D237FB1F04493922E8CD81F084B43ECCC7135F345521F734 56F70DF0FACA869B56185F9C839AA2B46BBEF25E87DBE2F1001C4BF8041DFF22CF0373F2 411874CCE68BE673885936E4F6AD6EE281F7F3526C12F9AA714AB30FD69A75883C534253 99DEDA09A2AC96D9E6BC54518AB8B42C32277283CB6D3625EC2C368985E84CF25A63B981 B19DB7AACBDD522F31ED19DD77942EDA5ED71ED2A109F268B8B17D9A023988F2735C7F3E DF07B75285C24B8923BB8E243BB557AFF531030868A9F8A2F0FBB91D296B7802ED5724A1 46A544293791F039F0D4ACA88A54B1B7827A6A85A494FD2C6E18DFEB66D403438E1BFA98 81B22DC128649C2DD0CDB0DCF0B3E67936FE645B16961DD411ECC90CCF91CB4D83108856 A6F1EED2C19FF3D5AA4CBE40C238D7F9F55CF73699BAB920340243194C533C8D5C5764DC 03F044006930A1E5A64FCD26CE41F164DBA9A5D915308B5A9413B6EB4F7EE73869A3691D BEE668044B06B843698850132E0C836563428595B4732032BFE0A86996EF36E19107917F 816C6966A0F7546BAADB32D25C1272A6E64AFA97240153E9661BD7E015DEAA18BC6B1C45 BB124805D24ED4ECD92E1D907598DACCC46BF731A8E512F826EF224670EB357D87A22C3B CFBBD7E473825B36047D9ADD2500659216D50134179523498D58884128EF4D91D36627FF 2F9CA5405BBA09D16D0CBCB9708462BF369FFFE5BC4E2124CF7751EA25A6C67905958FE6 2A5880259D1FD83945533E6ACF83D6D792ACFCBED146FD4BE25DA65CDAA7511E8EEA9E8F E045767C9168D0F50762D894070FBB1E56736BA159354BD58ACE7573CA9ED6E04B72D6DE 7F61C5684FC51EC65817936D01205828609A17E472C24ECBA71DF78C274879A9C512127D CD5688EB9BB1FFE73A0431ECEAEDD23911186236E1803C7A5BB38E5AF746EC73C9B19F44 92973FB464D94B2FE20811E5B85AA8329ADBF43809699405270FA3E8F0FBFF4716F01A69 BE25CCA0E3BC5C3B9C17FEE37505AB1CFF3147FBA367FE409883160EA466D3418DF2A406 563CD9661CCBE3A27667F865D44D850BC956CADD6D2C2A548B1AEEC68D83EF23F1DFC766 2B88EF1A5A27364A78B6B045613668BD63E28CB41B7FE9EBAEC0B915710CE0EBA829C21E D0E57B362FA1356FC24013E4F5310800A81F2BF479BCC48F658CDE97CDDE03103E2B5F12 7754F7B68C9CCD7B39935CB7765A159803CDC3D47D5362CC589473C692170B3E9F62226D 88EA974E4B3621430570EA362D5895922EE09783DFA68A97A2D5ABEFE539D31B70193E7E 9AE082EABE4386936C15A1A0F8C9FAC76A06DA38FFF239AF9DB7826A848C3F892D3A202F 3877F02A80DCDFE6CDB375B843BCD99423AB2DF4DCEC20F7C9BC3543CD79425E66839671 016FF6D1C5DEF69FC971F9BD49339A381ED8E4238279405E9BEB2F309911DA120B126C39 264FA7E7BBA363D89E67D2A66EF8DF8E6E758B1389B9DB9F4E3132F741EAB4C74A4430B2 FE763557B02B8F5E84B9656CA25A5A6D037C531BAC97EACD447EAAD30371AD6BAFEC84A7 ED790717A43021B5D733C4FE1E4271DECF6B86632DF14A17E6FED331FDDB0FD45199841C 051BFBC516349AAD1E81441AD4E24988F5C99A7C24CE772DAA185CF9DEABBEC1C0753B6F C8ED4A9FD71FB0AEE1A6967BC8CAF451AE1366B4F0D9C10484BF182D7DFB256A0849E886 59587E0F8F460B9AB999BA7155AEC69C26C3A200384179E51E06F10FF9CDDC00CD848C21 D310A97A38D1E41E11983E1D0EC0218CE6C133A8CC95E0E09D2DDBFBBC49192F0C557617 461B49B10E42E71B1ABC0649D517F5786065993C4F83F3F68446C2B7E08D022A5C934820 5A20AECB74FC3CC629BB2B0322229D6FB43043ABAA57EE967FE9A618E8CCA0E80D200E9C B7E49AF3F7B96FC4A37E0DE97CA0D6083528920031C2FE5130D28A8C3FFB808670E0E20C A36D1B58C86FD8606450B7700ABAF4E8293C4B63CFC5F3953646C881836C94122F461050 305ECD7EE52E3A430C91F8A1B83F8CE348C6017A36F8C172F09E62B8E59178DDE52E4E6C E5A9C23E4F6C729CA42A7720925E858560EABB9F587D39A61ED95CE587ECA0BB368D9955 03046D449EECAF40FF2B49D11813A72D32DF0D72ED371D3A2A6055C54531E9A2C7655936 7C0BCEABC55D00832046DAD2824E4D95B78D93DC90CC70691664D26A15FB8367AED56A0E 530EF0097070049AF49C3CB7D107A4A7ABF15DB8A6BA6B540BC3EC0401FEE0EA16E4CF13 DC395AA042E57623AC211BBC2F607A88CD51573E63111059C477091D4D4DFBE2899F4BF0 AB50FCEB5F1C8F02492F08EFE9C8DC0AD63E593837063A169D839092397DD0FA3E167B3E 84AA65597DF97FF414B9FC8076EEDC43E152E9092EF4E4B560672B1FB1093AF23AAE3580 7F3536B2BE7A870EFBFB4FD32F4B6401EEDAD0C27989FE947998F9A4665B03E213D4165D 61B1A168A0D55703ED9A149F51293984965613653F3FA2B5985362B471F38B373153E69D 68D4044B9D580C924915A90C9F0F01CD0218B365CA9029C75C04F4C8E57180DAD56BF4B3 9D809907B0634A4FD675DFBB83FE5DA0773BA5447FA54E67BA3EB7A4FBCE5EDA8B36835B 531933A2BBFEB5B7F0F301B7087247220A2F884C42974CA5BC2F2A53595979DFCAC0A5D9 55F9F1945BCB6F707CEEF30140454D1EC4645CB6FDB9B8ACB91ED2B916ACF921F59D27D3 5F2B5CD74977C96C65DFA9DED52057079B013849411A9ED54A1BBE1CFAC7EA27978DBB6B D16A34E7A15D45139E06D5D2C465845E51CD35173684966FF4F202ED74C625867FFDE5D2 49F8D2B103284395DF418EF7A0BA47D3E68E2FBC86FB01558D223EDAC13348DE0F9E1BC3 195E73624EE1EB1885A1FF54FD8222C83E212F12DD72C3A0DD8838F774D23A6C244D02C1 32D0B8C5B408D8D5D0DC17F0CC4B4BD8CBBFC9BCC3C3F614B61A2770BCF3A8300F037B35 A0E41BC1517C3BB2120CDCFEF8336D2EDBD0CD3D2B4952B759180719E993EFF0BB6995C7 DF1E092914B92D7E4414F44172533B6BA923C253C1CF640572F9163601587BF8D6F407F9 8CB5EC10A515C39ED7EB96468EE328DC2115A9C2971E1CA9688C5670F0FF469201886998 F785CAD5FFB882F2DA55CE0C4E917FDE42E47DE1386977E12B8D5BF146910C2ED3F25070 5C56245DE71ADC8286E9BF656FAA3D584E7BACB33505B593BAE0ED0DE0E1FD3E98B4D816 A1A6957319AECAA12DA34899CD0B1C2680652D2F7CBB4A099378081BB639377302EC7DB5 0CE5EFB1A739F4D6ACA622E8F68A7F8DA866AF7A75C3C7B437B0F3EB9816905018263CFE F7FB47346C8CCBF31C2AFD86197E17C1F5B1C89EB95B2BCC7516E5BFFDB34743EBC58F36 959A57DF9F888363F255781C4AD22C84506F7C22D955D559B0AD77B5FEECDE3DA72DE6A5 D6C7F84AB9880ACABA7070BE47C64964909296A486FFB8D3D0E1EA95CC8CF832C495F172 F0D66655793E27250CEB11F622126526FC10916622CB2963E01F69F06D0C559EF0EA1E31 6E19CC821837F5D06A2114395428EF642DEA8888A5025948D42CED0FCE446BE90BF0DDD4 C62B1185AD35D6012BCB47ABB0CC38CC11202E97F6DD3C8E83DB6729EE23E8CC60C7305E 463FF3E1E14CE115022D1337CB09251700C0C53025DCA0BE11D0C6BC5BE2BBEEA20F6AA3 3D79CBB2FEED1E4B457FA1E4C62121A1DABCD2F92B83C62FD91A1F8336EE66ED88A52838 93BDBC791E525335FCF650D2489AC627AC8F9A23BD826EB5A312EBFB0A01313AFEBD7DCA 3024956341E4C6ECE81EAC6CCBDE8E8B31DABC6CDF26CAEF01E338FBE403B2711E834BFF 463AB19B1CB10C8D935D06390230B066F89DECB2B6043FAC140170C8EAB99D485E3A0A65 5B179213FBB4B224FE5B4115AC9C7236398F6B73967DE246BF5B7E79DCEF2B1E8F086368 0866F51B1B0F41EEB74A48BCC03CF01F7FB1D3E7B9EB335B9DCAB3DAA51A961FBB850CBD 12ECBE0374ECA7FBFBDBD967E77AD8A96433DAC32AED091489B872830F43502C521D97C3 9158A99ABE0B97DC7C096425BEB7C9C469897B368C50146D2FFAE255773DE64C24271156 ED0FD33AF4CDE6F86D1B149FBBBA4E8ED89BF012568956EEA64F3D8240466073254A2D92 79DDC4D27495A7D82E597CCFB55193816A5CCEE9261BBDC561021A8135E25A40F0C10F32 9D4C559EC3E9D3D047BAA0C75175B0E508D26D6F0C1A175A9017152C8960371C18CC2D76 A386418F9DB43097835AE41B5816EAEA706E375CA8B903D49B99F96982AA2493A529B61B 3F1401D328F2BBFFCB372E1CC8D19D9B45D63A6E4B756855A7226263C701AB55F30201F4 83C8BFFB4FCEC70F8AD96A08D8F726A4384055164341D8E474741DB57BD63BBE453550BF F880CB58BCB564B78FA057F4E4C6197120A00EAFFFCC15D6B6B6AA8641653D175C3EBEED 1FCCFDD0A43B68B408760EB055912D08883893A822C698DE79BAD8D883A02A7DE0433967 5045B0BB42E032639CCEE3C0D32B286354FD9947875BBE2D8E22346163F10238D2A03FFC A2F64B4F2C4609C0DB0DD7DF9CAACA94F0E76EB9AED1048DF085264FA7BD5E887440553C C7233E8B4BD2CBB479D4EC849A84316BF01E786338428FA0EBB5FDB951DD25E37267356F D2CD2438B054A19CE82B7625ABB6501E26763D2572AAE1EA588305CDCCD8CA38E8FAA28E 7EB58535554DC50536B1CDC0EFBC00FB09E40BF4E00B92AA53773A7A3B9E48F7462DD682 C1D7B61B16E94A7829511D6E3E0EC0964B8F701A24B617E66FAEF1EFB2022F66F02A61FE A0A20EC229A95B96AC958D209B9579EB29BD67AFDC105A3778A90AD6CB6BC613CF772A53 868E69020D54C6DC4FB26FF2BB142A40E2E3D72D479408839A5905302333B1C4CF226D9F A12277AD4150B1C354D72E54A71A0D183B5D1CD8AE9D0B2B1229C68F5EC6B1EEE6761DD9 3088E0A433DEB04362E18F35DAC980CC31C9C72AEB13E0C00584CB00714475D0BCC3111C AD93D60D51B1B9618416F93EA8AF30445ABC1BB31A8FAE08560E2F874B9EA888946A2AE0 CB3CA06CA21FE84B8C33CB45FC2413C80EC5AC03465A564AA683C65B2C375A20EF71C815 631DE89796A89E641BA18BD44B9309BF2BAC7512FF22D413E3EE842FE210348005F59558 BCFC7C1192978C68049A1984123E9421AC924BE296EEF63FA8E35B3723AF472F1FC9DE02 0A66613B9C84DB541D79CD93C70345D5D1D01C030414040D102B041EB3612E1EEB691BBE CB13061ADAE5A2510F51935E605D89E8B0C1009A7B19A754853F4FB05A97F8E6BDF866BC B543B8A4CCABFD8C97557B63244F9F573C5FE8134BDC525F4C0FC33B33356772042EAD8E 5C7F2C49C88E30E995301005B946488609437F28AEA7B8B3DC90428EF61AAC390691BA5B 4D15B832247B70D464A0553A0E5F99169003C6FBFED18D697A17283DA36F6F13C50C545E BACADECD1BC0283780755F16AA9AEA1EF2D0B2A2C406684548FDAC0CA4D0E6EDE8501317 8A6281E3A7C5FE24315E858EBC844C3F1B0C111EC4653297A6ECAFFC697039F9D0ECEBBB C69E17A036063E004AF2ADFC82E6DE98EA1AA9A02DED193CDECA1F3951F0C85AB0C5E984 1ACC2BEEA9F3544152B0C8F6E633F19F80E889B10F1A3323D4EAFC35DC6CE757F19BFCB1 26DBCF4805CA0679F091FFED7C73328BBC242FBB1123D16EE701D0D488573F11ACC0A4D4 D6EF98141EB1E4A53A9A53001AEA3EED673F378A91B3551721196F7BDD905E65E3412012 8ECA09CC57E6FE4E8A04B3E1DFE1CC4B689CFAC29BD317BAE227D8FCD16FD36238DD757C 6F3316769672DA57AD2B219223012D195BB2A27843CE506DE5B93BED227DF8A5E49EE22A 127C3986BE767E652AE7A31AE117420CFAAEE48052A7DAD1492120E9212504AD604325D2 E7577A7EF79F3B1C6DECE9D387958FE417670DD3E63322D531279DE59750F3616F72E35D A4BAB5DA5A7102F6B5263EEE2C3434CC49760BCFD595E45EADF52B4B60A758151C2725F8 55F413768181F06A4234AF88AF72C902CF821C50DE894778DBD4BE79F2AFDDF18E4D95BD 642F9F7296030F84F4BD4776A70E5098AE9DAA9C4EDC8E2365FCF05040987238B95EA42E C7F172268BAD521A628CE40457133D68BA2B24EAF9BF68EF6B5887679A378FD8544E7797 54EF9E9E73E5490F2048B47F7277667B34A0367C88A164D065AB583A40FD0920A6E82B93 6A6BBDF54C2702C992FAE76F8F49EBAE6A2A2D4359AFC5C1813F4D397D83829C9ED760A2 B85264C561CF95BFCD7FD0F20F219BCC1899D0F562F5BEDAADD701981B1E52CC2F213DF0 3D0D865921E5C6C409C2EBB0E125264C451122D2047B854AF309FAF47556550FDDE11552 07F5A4870342A7ACB298A4023A1DBDD81250D59A79D8AE3D77037F79581DA8C4EEEA46A5 C84E861C86A31281B4464C6A6ACF5132F1088060260677695CCCBE885C095439B091CA7D 3136327FE07EAB8E5D395781739D4E5D294B5D8A1F96925012665DDBA1B757348A1B04C6 EA25CD2EDAAF94FB4C4D40C4F585F63F7EC546CA544B005E910D991F788031A9495F1782 BAD882FB99157089C200A83EBA37CCA76EB8FCADE98CD99BFF6C57FC333560DCEE9702CA 78AB2F8939A1F7A2A504CCEBE77E19979C06689DF225DA01BBFBA01C58148AA6951D6F1B 1A2E01BE1C1528C88745F6A8C0C44E4C59BDE89B75D4E7D13FA33036841A238A5D201A84 FAA61FF8F441C334B9AC8EFCA7720D1168ED74E0E6F15643287B9F1F8DF9094906D536E4 143BDB47B26EF3464597950B1BE8615B9F56B1490B9A8E8BE9FE5C26CD063D86DFF2D88A 34ECD2233A3E219E6D4E05FC9051E1785A78D48A1062948DBC425DB648D4199A0D0BC46D FC57D7BACCA6B3AE666AA8B3F4B14C5EAA773EDC421D427EF941A6825F1229DE2F59E1DC 556C992DC537EEA8C26283431F6F614A802B311C35E9542865913054F924558D0BFB9E11 B711DCD71A77013A648033C59FE3437C0A88B0027EB4FE475802255C900C480AF0C37178 4DD92529FFB03F4D3E5D520BC0E874216AC2B27E37D2C367105B9C9741A4248DD2223BA0 19456A36E0373101506F8C4B78C2EAEC755FF49798AE0120AB47292BC8361CAABD64A1E4 4597BD67C1B15E8E10061D09628EA7A957A35B777DB269C08C2D72A752620134660265F1 E4818F2A8F6833548F2DF4A062AC13C0666DDE91D07ECDA464CDD9F601BD0433E5078797 6B5635AED752B08FD6117BA0A133B589AE0DC3B3CB74A196E1953816EEE7D7FCD6EA8235 939ADDE805E58EC915999E3915ED5178D438205F759BE47A531E603DB469668FBD1C853B ACDE3CDA3680DB3D7CFEB95EB33B836C2C3FD6D87079273190D26348285A7888D425DABB 86CDB7F892B9C18A2017439E6A2E64DB142F701C2F8BF632C5AB6D6AC93E177E59E3244A 7C5556363D52C07A201453CF33085CD194D6EC76C0EBC9F79D127D454087376F1D7CD1A2 62330EE083358B74E82DC72D4DB16988104DFA1384B111F73C1C5C1F14FAA55C8F93CA55 51AE5F65789E65C2E4198D660FA865BB0B4350AB132E3F47EF284F49DF4108C4533ADD70 CEC28A704785A1A0E445CD4411EEB94BEE894D018285FE005CCFE93589BBA0795F68C41C 1831BB2F070BBD134D8FD14C4279CC5EF84A27A24035142AECDDBB31621FBD84166F21F4 59A6B4D5A824BB47B922E68D506048910AB6A4E7C19AB753270E0577BB4BF10309C5CBCF A598DC6B0C56B41148411FB18C004C602A9ED7F32F88D7273FEC2139059C7500F69C96E1 84B2AB6DA75C3FBDAE1C3551E6FD6E8EACADDD0697CB650673ACD299F65B43FD6F2D5AC5 956D15AAA3B821C7A41B35C3AD299A9566F1DCED5E18BE18F3C14E59A5B39F083D1E70EE 9CFF57C68CF416204E9FBBCE6C912DA60C2C2AC68C7957CE390BD7151E85CBD15038AF5A 79F1BDB83B660C246B11323B159211064892A30359EF4BAEF42434E39792E77547C2875B 5706189ED207D41AC32C6207484CD2AC20C1BEB273E9A781BAD87A5495497F7524EECF42 BC6839C9EC079D6CC0E0F024E3EA2106C0D5D6EA820E6BD8B40BA52FABBB4D7B2A40301D A2348BC8A501A546DCEF09CBE511A1C4FBA324F2E297F26A8D6083D3F0C3CC99E089F205 2D06FDC4B106AEA927B164722531CC5BBE10C72C4ED40E7CC3FC54AB8238055F8036A8A6 795834788C6AF7D7E710F9F7B71CCA8DA1CD018892D5B22E012685E53FAD624CC3DD180C E58169F3162922A63A3E2A4F4255ACC08D9A2EC8131B7C5563063EA92175EA19B07372DB 000EF9B7018050E930E1959D50076D5A27A83713344ACCB7EC2426A6204B167E43BAEB51 20B2E55306235F287F70B49DA43BDCE0DB333A03F0B9C1635973A944531F27A1CEDF1658 F91707A12A5B239405775BB828459AB905A44384C00BF904F87AC29E86D2D1F02CE4537C 9B9E370438721C170F417C2F278CACDBB0554F74C3EC8920278B72E4604429295F3BCDD0 41865AE76B8872C6D53445AA900324E52942651A13280062D1F4009F7FF98B2AC9A162C9 DF9A1648A6A4751EBBA0988B3F7B1AAB9B6DCD191C306584667B6880B7418CDBEFB3F21D 920D251289014AED1545175D72B89DF0427BE695A32D53A2EA5D2AD6261CDD4096B9D3E7 778004A2528CF9D352FF9B125B126BEB0026E5A98F702D41A13AAA6CB49DDA9AED8190EA 538D5760BF858CEEE88D0E2A14A325A7B835F6F929FC4B36FD1CE8405EEFCB645D0E7C9F 35B442ECBA304E411723F93EC53A23F7E8F0BD3E1053C9A0CE7576B9F76BABAADD229371 D2AB00ADF115620B52B21B8DF46CF880324C0B25EAC8AFE246991C7E3E371662C473CA82 4EC7DA5587531243B97099B0746EA1A4ECCC76B27401D8419EF7703AF6DFD29D3ACEB75A 3BC48869CE314687568F31AE8F2D191767FC903DFD3C394F237825FD8E587899AC0EDDCB EAC0E3FE93D3F56C6555C34FF3BAD047242191A06C06FDD9C01D313BD05A02C931C5DB38 E61A959FDF52F86E1C047CC06681C934CD5586CF19A965F3D83B3CEDB0FAF09A26D9BEF6 85FF280665AF384CD779C2324DBC14BE3A83CEBFF9E6AF7459B03A31F386A724B81E9C09 E2735CC4F4B278E91E718260F861E049426CB1880FDAB1DA30C48F8FB4114CD5CE11ADF0 70E4C037C158AB1A4C3EC5847F4D6D24960533C9FD3DB6EDF4D7470C3A949ABDF14E30FD DEFFD52F6A8C546815B8607D85130EB5ECDFBD56708B53C3F8EC34687CE88056FEF236B9 84ABB01808409CF515445764F872A899B9FA26FB9D227945EEF4D0304413DE25C1FFB3D9 8079308AA468AFFE8A72D9B8AC99B4A4B520571F378287EE47F79162B8C14321F150640E DFDA03372AF4DC3E159B64F6DADA4FAF54F310E69F372D02241A78AB487F4E06C4322ADF 90845540B808D60E3F30AEEC0F5CD5EF0749075A5B55E042A6E3FE442EBCCD4BAF660E3D C7CD20DA4EB852F3143692EB1666CA8B74871246E3C09C3B7EA948A9BFCE0340663EA3F7 8CCFEEC26DF34F98111EB696DB74645939FA4A731D2621158556D177B1EAC7EE7E76DC22 9B91E369F0340BFD7EE8D19D0B05E76D4B1C10B1FE78BD0685A49546B67B493EBCA8E07D 8EFEE93534D9CB41A0488BD87EB0B2922C94F9A1C7D5A9D31D486FB65BFF737839E88880 B4E675388E4AEC2123E39AEC10CC30E18117D316341EEEA1A9BB8734E423AE546FD812F2 31FC05AF1A7ED466A5DEC6A7F2F3B8B8F3481729609F647AFBD3359C270120B25CFCE0F8 8272AC21E48BB6391161F41468D1D37B87BCC3C68343F31319BB4E4E528A58426A17DF3D B4FAF527D6A3DF1791AD9E2B43C60973474E7B3262BC7AF3FB0A2E4EB8DE9433844D9A95 310CBD89CB2AAD1DC6AC228F32A907F3A3A10B28FB8C3BC31CBEFD9A6C9792AD851948DF F62FEB05E576561C4BB69EB4E6202723AAEA5456E20077212E00F6BBEABC04B228B37A23 66A4606F5C2308BE60183295112865CC014D83694D9DF6EB0385AF216DDABA682CC7CD66 A16CC179C857C403FD07A04F038AD8DB7C0FB7C77AC72A929F6E806B3E8BD268084C41F7 4E5B14920111169A1E40576E2FD5E30B57E9136011928232CCE9751002202B345C8B36F0 793138B5E65513665A396AD3024F7287178B0D04517185136970A983D71408E285B73EB4 F07B6CC41F444EB280B1D35A6B3BC263D06DC58DA0E990F25E341169D52DADB44CD5DCD9 FDE7EC2034ACE056B675125B19D06D0B87FE6B2DEDD0570ABEABED8063DE398F59D32F3B 3A2EDEE73662E71278CF9D3528EC877049F7994756D12A0F444D5E5E4818A117E99C7E02 334C5E4BB7AD986D2429EF85C628A2B23E87C6C19A893F7EA11F312BF63F58E7D9855EA4 351106E47F848985F6E947F67C31D17E05960889C596B11BDC692009EBF794A6A87EA502 E4174F6895629A9B1CBE1D58517EFD62AD5F92EBEAC6F86CEFCBC90CB897F0AA755928BC 34A74381D7D7AB7D07BAE427AC68C41C3C1B3A54A8D3F272E5BD904E0672F6534C18B09E 3FF0D561C53EB9C652BE06AA9AD3F5488B3B6840BE8A087BF8AEFB881ACC6C47369D011C 8100567099A5250D18E19267D89AC1531453759211038AFE59AF4360A33C7B4DDB742885 C30EF608E962DC02F174C7076F339B5DC78A8526D4DC5B3C0248CD587AE60DFD1ED6D67F 852C6B6CE8B4B186F8C5DDB6831878C7EC1F0CEA8BC97F9DB8678FAEAE334E769461DE61 0ABE63805D63C5FA3536A356C5572EF6D3E51F3F79E9C720A04BB6E54F35BEFE545DE0E4 FAADF6058557C0EEDD5D198DCCC7C2B36CADFF20A0435A5F209C262D0F552135F4A6832F 9364DB16B412DC5D4666DB968FA0244AD46366D9D2D4F7D6EFEF620F4FAAE3CAC56798A8 16B93A89C2EB25AD13E9C7A5486A9B98BBB3DF3E4CBBB43EF6AA9D4F2849BDB4410D44C7 967BE8E1DAC206A5F02701D966F578B2E61922DAEBB728396F62EC488A679FC79D04E9E2 D734390343E2335EF2D75CE67D1C1C3517FCCB4316F5C2FCD312FA8737B2E411C644BBF8 2A28DED505D50F11F43DA2D651AAC72239978D9C7D992AF7E0820BE2729B6A5C20AA385B D5CF1AD1465CF2515C0DAD26DFA2959506E020D54641BF07DED4DAD3B245138A74023F16 29D21F191C2BEB0D49D94AAEF46F595B95F9AC6C3FA97A57515B2BA4DF3E4327D9B9BC57 D5C81BA8832E65A22598A52DF2EB1D9DE2919FA4B53C1C328FD0930ADC517A71A0A800BA 60269190161DCAED7917653D7403931B0A1FB53BDA1E8ACCC6528EC8D2D3978130F33664 190394E2F64FEC8D98755D492205877706B32FA6DAC3D7CB685B675D823711BB7FFB480F FC9131AFF62B515B52C49E94B57D6C67943C18BB5989F334B6BC04854789D931D72A0063 1C798E75ACB36F2719F1D42F9B5337CC4E73DBEC6214842247CFF7679F09F3BC3EF6B654 6DD9C6A8D3079C9E79F12221C6BD7D49AE45488CA09AF2907CDCD74A43FB78C9D88BDD89 9E1CFB09F01B9C3CF03422004DC3D28FDDEBEDA782E9DB09049EFAD65020C8FC0D627BDE C11227788D1B12A7FA1BB6CC46E40E857F268E8156C56E03BCE0E1888351833DA04FA164 550F721A7F0B9D54E1B572D90CAAA65C9372EFED23DF5E7384C64048BB437EAFCD0A208D B87626BB7F974203941271A45BFC10509C7F594A479EC84A809248927CB139FF2B23FE5F CC0ACEFB5C5D17BC0923413478B30C726BE930F838C3881136700E85752015F917D98D78 3CA1A3E891C3163CD940EB3C881090A89396CBFFB63A549C90974A7931EB55DF3F100A2E 1656EA0D6D9FABE36DABFC075A182CD591A418AA9EE2D3ECD03EB4E20E5ED6BF388E50C7 4AF266BF4B2D50BCE35429DAB16537B39A3FA4F0AE1DF9FA9D1E1E0ADBB5186017DDEC50 55E7E850119699D11B507FF11C54D50E7F2CC5966A8B624B88AFDB42FE5534094385CAC1 6F14215603902AA54CCD8C795BF9D5ED795578C7F4A666CF497271956A2650248901C7C6 A2F24E98F917D11679D125D4B84E7ABB19CC44EC6217C421488CCB11AE0D494760720A5D 605A9240B7098299ED02EA57484BFB1C069A4A3EB491AC26FB673A44CA3D754CF7CAA00B F1EFF3DA70882518FC711D6DBD924BB0596F28EFB72F38C9D122169B494AE7E566C4C1E4 EEEED60841CDD28711B37B45E68A4296BCAB9602D730DF692F9116C57215F21CFF8F3011 C1A0A379C764741365F6706DB26423FE5907E20CB468E92C5E713F46BE220014FD26248A 4A4142BCA2BF348998C78FAED9C9AE2F7228CE64BCCBE59A9641C2BFC94FB3FACA5D5434 DDD10DD50D89B731B580E0D964367EDA7EE11D833BF2833DC382117C354D84BFCBF741EC 72C52B67B9C8BC73C751AC46D002E93CBE98C0C7EB4CD23DE12B00924BBBA70FE6C91EAE 764C66399C95FA1238ED561ED3AE19435C6057E7C1948935B55B0285ADC0D3474D1B8708 AAA1A070BA33EDF3360AA01A6F26CDEC743AD9E4E3DEF23518A832F3ACC305FAB9EBF603 12EBF154FCD672C06E8D4C6ABC2268BFCAD7C568931DC2164B0B5DCE183AF4895F6A7652 F2B7FD7BCADC3E2018B86B77C49C0AC400D6AF2316EE1AD8D97E13470DF3E4F3626E3558 1FD16075CEE0F1A4F4C53344C6B1FD875ABAAD8A48B2C7B1529662C4CBBE001DD77E3B63 DC20C99937D4783CD693CE15C3C0E5312A4C60941CFB771CA3F76B652D1F1D94D105B9B4 E4B4B5CBF0A4E99258CF8F5E9EAFDEE2E3BD9315829D071684DE5EECA029AFB1FADC6867 9A047B20E0B08C0A47122DFE4E35E6049C117E0184696242C3DB627B1DA6B3AE0D8DCD52 C3139D00041E67F6F55F8A2518831646AD1C4813491B4D9FF6A5F9939A29FA1C7550C021 F1662C87365FF5E1F370C385DF9746A2C7AFD6993DC4B8A9F555938CB84D3A769F357126 00C1A838B6D297D9B6D27FA2B3460B51241EE4AF2945DCC5FF962CF53FCF73FB73D365A3 606661553807D8BCFFD60BA84D84E8B8ECDEAA415F08BE2B442337A5D7F783E6B8B4A1A2 88F9EBB3C4D4351E5EB99D9C9C0A7DC081244B7FBF4E57350EAFED6F4705001E769195C1 E67CAE2E2F03BF8FCE55485431AB520E0ECC093FE808D3937149E322D05B01E8F2DE67F0 DFDFF1465AAA0A30611E85F18C552BBF59ACD72DBC47B7DE898F7D46819DABC7B241ABF8 0B394C33C1971264892F0306442259CD2F9816DB4D002D08C8E2F7B54A788FE0EE56F65E DD6507406DCA37337FAEB4539D38A914886F9E50A3496A4868D605D8E2C292CC2ECFA3DB 6CB52B1DE44243C83EBED8E7E61CF9C658E60DE366D82621244A8DD11E8C66BF617146C2 92F667B940DB8273B3CB7493F1D5343B4D88B22EFCEEDCCE5373DCB2D02D393DBA49729E 9B7D53CCA43BAB3A5EA11A697A9B1DF43FC26FCA278756B84067979EAF45370E8ECBA0B0 EF8913B07B7ACBB8055E6365B852AAD37044956EB83F71EED450F457631281FB3A27B2A1 AB039E1D3608AA6062868D747BCD4D74ABD4E708AF6EEB08F1DEBB5440BCCC2DF3DD5863 B187B4AE37C8085F974A23211A3D09F217830A5941A8B42F39A443BB42B33B14BAD8379C 94C72D27D7EF5986B3FE995DE93F1CF5B0990B3A4854C9906DA4FEA889608C8D500AFB90 7B7839EADBCE10016D486C1C3AB310F000675094DBBC68883375F10EEB327A14C9C80A14 509845BFA11489F0948A93B65E328B15D83701D3B2FFB781A3B027E195F774346DDDE395 C2C9AD5C187F65CFAA7EA556C502C00FA7825760720804D18E487B0A712ABFB90DA1D96F 3546A21C797E5A2E44071722B018C9E4570EF19A7FA6F54602A4CE605B06B01BA4B9B392 1165E44F16E19E132D2DD4A599C95E4E2FEA7E60FC3AAC383FD9ACB5C0A5EF08D965CD33 A83FD5C8BA8B28963538D5C5C7F3D054DE63EF2DB33D3B90DFC7141D73E5A00B280ADB9F 6307D061C3C83176B83B86FC3CB24161C978A79B37D3CC10C54DB47DE8FD172027808621 81468B8C771E7F41221E4DEF7EC821C503A8BD9F3266E5AD73E6B9C8F3B2C6597A5E3A95 258D95FE364F8C638696A2714CE9E27E21187C9D2D1BF12316690DE35CCBCCF007E5F7A3 C3B72F2023EEF24929C8A47C41A91CCE6E72E5A3813A0265987B4F2BF1BD63420D8B4C6B 348CC1745722E005D3DA093912B2A424E060DBA214B57E650DDC531C99367DC0D6D71ADD BE9296735082F5EDBED760A74F88FC1870F820C7ACB0CFBABE3E4A38E874972C1837F40E 0F31F495D1EED6BED748578A68E4B0C77A08C8FAD11E4212604303C5F8DFA6BFCFC12520 ADF53EFA5733005D8E59AB3D7308EDBCEDCAC83F8EF3CE9743194FF5BD527DC637E6455A 427923A5635D6BE75D7E9888EB58B0B41C24CAFB8F03F27FBA2B9C6F2CB4E61940670D33 38A8208A72524BF12D9932DD031DD1B1C4CEA5955BAFA82C374816F2F0D0BBED0A070747 5E1B41B3DCB08018FE5B82CDF981F52A3E7C5275A2DB02E063FCA7E6E6DF8E78638889B4 53483F2A45ADEFDB804BD5160ECEEE01C1530E0E45432D7EBD2D40576911EB26DA9E20AC 10FFBA8EA936E27127948795FB44CB704F5883C8188528A1A568371FFE969E78DA347B72 8E80C372EA9DC136D9F6BB31C2D99E89BD1C9A293E9743BAF5EA01467D944EF558D6F5E3 6DBB7145C1B62FE90816A8949B2218824E5535AE17FA89FBB465FC19F94AFA9DC6D0BCC0 BC896BF1A47DA1183BEF36129833995EC4F2803B94D20D1EFD138D9C299418168CB8AAB3 9C970B270B41B85F45BC102E0641C16AFED9E1C6EF5704B019CC0881C77D2F560F5DE27E 06F45D7B9FBBDEE7C46D1A216A5956E3DF12E0F17C0DBF95DDB2E7238EDB095DE9DE1AF3 5C0473A1B730750D2F21662DC74ABAA375CD39E210A2B35B9CA1684C400E3F20D9F36ED2 93D14711F8C00857B7F9E9C7E5562081DED7287CDCC041C376231E66EB82D4A0BD5EA1DE 9025FEC667D0BE01BE66CA7B72FB2896428989A7F0F55057CEDEAB8E01FACE3F2A27DDB9 2ACE1CCE717310EFB497B33F51335210D5CADCE983A2B5D5F79542CE8BFB9C7A9293E5E7 0BB6D5C60FDBB2A23D9E289FBA4445E012012EF3C4E07F0F4C0B47D75AD55F06F343405D 487D2C5247F4AF32E691712E649EB9F8CC7894967A12909FE04085B1E47044EE653E3265 E1A2C32C79C8EE755ABF2D68A8414DB434452BF5C58EC0EFEB4FADDABC41A7A128F059DE 44B885DAEB78B7BBCF3866CBBF07BA43783A18BBC2D5A857F2471EA9AEEB914BE60FF774 61C8A1F7B6B67A5C38E94172ED64C20D7C6BA4688D51848C0240072713230922C090B357 81B0BDE5C096684539D98DD12C95EB720B8004963F3664C2133667AC134AB7C8F94347C4 DEC714B88137934C39B76625D39B734C65A28E73074D00F3F6F0992F32498BC01640ABBA 19F3543A54717741D4A449DB4070A55D45AA81E9397C17232497A872DD9578A0B64834BC 13052566B8776B128BE87EFF52B7363635100DC0DDDF56F372CAF0FB9E77C9C14886E0F2 ECD6403B3CCDA540735D32A3490092B698E9416136F94C2865F80DBCC0416ADCD8CA7305 156E8E54ED344B590BA5D5D7D2F902CE9EF796E41D211A4B63D3E5E1CC611903CD8198BC 5B4711DDA5BFB67D096851F52A0C720EA4F4FB5F5578CA43D98188684BE0F4D56DF09C82 A07DC3402BAD96E62E259A039CF0EDA9C61A5BA218D602A7F460EFFBD374448CFE455385 E22754C75650BC1C442A70D77885A57A75CB6F4D33EB78CA19BEBD29A7BCAFBF028BDAD5 22DE343ACFAFAB61EAFEF5EA173284C8FBD313553093881396386BD87634094B1337815F B0A484C0600EA2875F3898A7038DD2E0595AB5EDD4E1BAD6C89E489473E8CA569E4E6FFB 40C6381CDA3ECB84ED6E1797FB5B0EE95F8DAD37C45610BD3045A6B479FE759468991C0E 1AF3EBAA1D8386386D29DE92E16520798D1AE4B69EDD951E425138C82503CD1C1E0BA47A 5C28A68017E180E2E48C349554241A90FB7D2225F2D518FD25EEB5ED72A632A17EF31F57 FF77B5ACBC9FA1190129B868C66105595652834DB6D0618BE766F83364C544F50981597C 265C93A198B527720DBD2A725F8D8CBDA82B2FBAF685C9BEA94E00E815F44ECA8595042F 7931C6E1097848659A6CC0F3E7F221B6F428E72BDFD1C0FCE113F91B71C1B18B69934654 081EA57A51C882540E06F206290BEA5BA41F17B9AEF76C890EF7392646E47E3DF10EAA52 9D0A774F7BF31D833858BB48EFABDCBF9C27C4828527076FED28D6630C34F83C7D790099 ED2B4D43B8C45A9626C67D3F6FD28AC211EE386D6CBF45EFEAB8B874CA322EE514C9E89A 33EDB0E83995DC31D5F1C86C369D34152250C5D1E756DDE6CAD5492F06A284693174C5E5 0CEE0B4260567854F4604E25926AEBB06E02FEAEBD198B08B30CA3A26568218627856AB3 E15A8DDCFBD56073F4C500E8BB3127CEB90853F77E3044B8255AB5A63C6E7FEF813DD34E E97BC4A7C09F6972F8ACD2EE87B4CB71472AAA6A2CDE4D7CE37ADB818C69EC6279AFFD87 85053D25A5A3B9DDB8E813771878BD45F646EB335336DC4C694AC64B22D4D5C6729558E0 2EC4AAE04D435DFAA04241C4004815F40C24274171215E712F901121594E45C93CC4F7B2 2472BF2842E7EA7FFA7E707F0519280DE18AC05CCA97D6572629033EA0E00881329A5D9F D73AD9E75F9FB08ACF6EB3695BCDBFEAF1C23193DF9D3367EC0D522EA6EC1094E5E3D66B 51EB438DBA34B26138B0A2809FFE15A8D501C439446AADD9520D62C81A7A26A7CB918968 554D09A3E8A99567D2C96AD72220513392D618674FB2027AADD016861C16439FD5275ADB 973B6F950BA7DF82AC33D395C137431DFD023F922C0606B7AA4E5EA46BBCD9BF85A6DCEF 2C47914419BD9A0DD1C8F1F5D85C7782C07CBC82A1DFCAB56840B03A2E425BEA62069B53 7170F6AFDE319E55E933351F493DD7D844F7D6FAEDA8052C608D32E861F051E0C2F39DAA 18A3BE14093BE332A92C3EB7750D4FA04F586D964FB3BFE7BD71EAEAA300D40CEE70BA40 FD6E4609463B0BDF5485BAF4A7CFA3151592453E7DD3973A2325D8665AD78F0D25A66413 DB1A2010595763C6DA3748E44D785A23E226136EC3A8B29DCC9B963CE08706BBC99F1E17 9DE264F67BC6AB983D60AEFA5D7A4363AB9C5770E45CFAF01D3875CCC8881BC72546AE03 EC7F56C3CFE8F2CB71B998411B947D8AFC49A7906F3DEDA9CE970E00AB58B7AB3626B6D7 5B351FC79ED8BC1A88B7602DCF1F51D5CA023086CA59E8769A9F8963CFFECEB5FD0C72CF 47113922864974D344EC8721C633B1852260CB1373A740101162C9D10DF464EE4B2A3BA0 572B2C3CCC9A5CA6A865780DB2B15376C3A87B544F153609B300F8298A2C6A600F39D5BA E1C812BAC7072D0D1C21B59BD41305B89487533CD2647BF43DCA10873AA58DBD3DBCBA4A 1C68B8069863B30CA79CAA30657C208FFDF85429DA990B0E830FAEBC9E5C94FB8C01A432 47E16BCCF1187B6E93013033754B22171EDF83BA7251BB28645F9A0822C24E17B73C51AD 8EC03FFC640AA24DB48248B6C4BEC0488ADE4F40C107EFFBF254E799F3F3D858BC72FAA3 3DF9B412A506CC296E476E444111FB514D5D538247A2B4E4AB368C01E1F9FCBB1FE6D53D A1668A7F15DDEB3C51B9878AD4E1E37DF3152D09C868E7F48FC459DB426BAD3CC22BA167 B8163B956C41AC589BE3F8F28707D1E84C7B0207BD481F77D94B8318A4B23184D981FAD4 A098CC29B57030A16386D0FFE74ED2C01C0BF8AD319ED47B513213CE46E875DE68721BFB FD76B12FD3476BC4AD710C96BEAED2648C5729A49A3CE6C53A750A419740B2A419404F72 9CA750748D08FC91960D795C2E5F074C5AF0D263BB0AA803DB2FCB5D22AAD4C071D70629 A6AFF3EEEDDC484FB00068ECE39A5321C31827F648BF995147C2088CED6C211862CAECBD D569B4D6B92B95C6D4C1A1E1B8079BC772FBD5AC6704A3D1CCC2BD5F13FB8CE546B33ECF 25739B91EA7901BA4E48BA90BF893695808CC8AA2A2B1893A19B24084407F72335DDD032 E70429548D5B6CFEF11529A622DDF48A2575D5F2AB94725E4D75D2B7CA942A10443B7D10 DE4F2C1E4A5E4FEB23E4E93481BBA2CD359FCAAE8D8B01AA85D97E363E690328B6273CCE DBCFCEC67DAF6F8367230A52C428B1B1043EA68F70EAA54F59C0E2EACDBBCB8A178B0A1F 3794E7E990587B1979CF9579CC5382BA4F8F929BA695EED5E0761C656E96560275A2E39D 93304B6A82BC0D4CDFC0A37BD1B4DBC2E3FE7485108BADBC8BFF9111A3D2FC29904F693E 8FCE398198D6586CC5E4F85292D49A0829E12CD2CB9BAC917A95367C4A9D985C58CBC4CA 9297841D998F9AD91AF19C10FA867484447F6FE7182248B9BEF481F0DBA0A8BA22990761 5EBC663DAD1E16C3B86795C22FF087C93DDF0C84464FEE3A4EC6B4C1D608EE446A50D098 9BDDC12C80A9235FA3583BAC83DFB66F9887052BE3269B6571BCC2A04D253FF14D7D65BD 24C8DCBE994EED80A9F8641752F3AAAE999D3DE77F0AB1757F3E03D19CEBA6930CFAEE9A 569384145EC7CFE6F816198073B7805B3444CDE8D8038B55E3BF601D12959FA2DA39E719 9917E59362CD15C56BAE73CD0A5084AFFEBDD785CE6489CB0BE8EFB08194AE67155E5665 4D804AE16C3E0C03B906E26AC78F8E971F9A8263127285C0C162F2EF1120210148E955F2 847F75474C356EB1CEA205155B6098D0E35F958DABC74516EE8E548344D7C71CBAB99F4E 325C1E4967D7E09E4C31235CEBA2445574DD35052EB02229D4CF5D5D77E1F62AD9D3B7B9 733BEE22B224307D3605F41B5C6CB189AE5C7FA6DC10E4A5B8FC6FE85F1D74EBE23C86F2 3C9D6D423FA22A272A03A57207F49E06799E00C5644C1D58382D4D59E36C41630216F8BC 9718EAD7FE7418A1E918FC35CF986F5C77EFC46616E4D8CA4D443B99833D47C858EC48F7 0C97EE2887B6E2731250166C3E498EB3761EF890020480C8A7DEDF0413B563981D5D3559 20C68216F29EF94D445097E0C22F7D1937A682E442006D9737D28708BD2D93AB4239FB49 B1ED26E153DD45216195A987A2C586362174A68F91B1965A1450773C152D610FDF1F172E CDA7812F64DC469E82183B948789BA6F925540D5EA848698A4952D02187325B65783B54B 118F28885EC0BCAF626466560AF5146A9D513E6F7202314A951214F3F2E7BC65ECBEC921 B40764C780A8E931710AE423BE7BC6365C7D5C7090BF2F20F5E95629C62202D13E6F1F57 75CA90C08E82B0A5871B2979C9258C0C71C3024545BF6773496BD3A73E541FCBF0CE5705 408E870E68D875AF38AB16954E260D07771236421F8E2A108CC74D2267699F33A6D133AA 9A07B2E82D8B7FC68CFF660DF9AA34B4D174A30417B820E311DBF7BE12B1D218E4703962 FAF13D61ECBDD9F68F417C0383211A8D9DC52870DDCA42B153C7698C12CE6F75A633B20F 9FD7A9E15D89A0C2A9B5C3EB1A71F48447A4AF540F89E4CA2707D5E929F8C84B9DBD39A5 42D84E0234852897CD14487DA974CD645E0845423D823124866BAFEFE205295D2711C0D4 A461D11D1A1FE695D785A57BA3ABE8876667950E6C0CB69F4BC6E3CA9FCBB5FC709EB572 CA5BFE7260EB9F6145E916773C38C968572D624D7A1DC94D37156A0610A62201015B3A1D 94A08E129B8B83F7E7057F2782B8B2F6980301DA12AB7EF393AA6247AAE09DDEE12D7C6A 1A9F91BF818A0C7768AE044BB446B7EBA9B1E285984AB20E4AAC2C42F892EE427921112A 769C2D225C124D0136F2313FB8972F7208578F5463730E67E28386B51075B1FB7AB78F8B 97F18DAAEFCCB93DFB498635E51DFBE3D960A35693C219DF795F386E502FD1BD7815E26C 6EF05A4B7F53186AE9392C22E4B664763313CB10C14B8A26F7325A5E05D3BDC39AB59CF5 91712EC594D784910C9F97B7AC81AB625783C306BF76B9D730BE838B0857479A94477F43 D29179149A25CE2E5C7415880CE13153426080A1FDE70EF3882129654D8B75077CAB46BB D1E70CAA7A90588B1E2146DC77CDB97BB180FE4B303681544AC26821CE7847C2EAC3F362 D79678F46F65DD8431CE3BB560FD2E05A6C1F278B0E8498D071EEBB081C823C4DA9E4CBC B8C67B37E2D35FDEE01E8C9EC8989B4FE850946DC6EAEBDDBF64647982D79282482994B8 51670C31ECB38EB80285B08E78A137F6706C63A5FA48E7E4BC6632040B327FD737E7A3DE 9E6627C1B312D2C33084D8F81557FAF41D11BA3FDABC5BE13166BA59C73F60F47AABDB8A 01895184221D8252B5A56F7A21E3BDCCE6FA1467C64AC77DA5ACCCEFC27EEF0AA85CA858 80784DC598CF89B51A51F8EA57CF5E615DDE96D3A31F1D8616E04AFFECA3EE5CF3FEFEBA AF8BBD3868A825D465840E096D1DDDAA6A6F09E1C7FDB9F818FC67D35DC083E6B09CD42A E9C8DBF9A957A5C33E6141738C1A0349D02AB603CD807293AE4F6AB64B6F74F2145B0BB1 A56E2559141298648435F7C65DD31922E57DD188AC3C730CD19CD65A722EC3A1315EC6F1 85043C2F6A9620F569CBA1556EC92857378D4F455E398725454769BEA87672948881B131 1F666BF60339B304D9E15EA804CFB268D0777F656B544BED75624DC61CA8680319CB67F9 61EBBE4080C1AA8D043BA5F5FCAC4D10FC3A20AB3CE20FB2D81768CA9A691019F73759C0 6FDB7298579210AF6BBEDBF8922972CFDAF8DCABA1C667AB6F6F5732D822CE55A320DA4D 3EC4C62DEEB560B263AE504CC8D60295A8FE74A5C48B1048783CDB56EA15B8A566B33440 1F287DDE0A1D044018C10D34741F38D6695932C33432679663353B323F77660DE7532546 99432D0917C35AA9A0BB15B17E4BADA1231CC0E0E241E14A602EC3B946431E549BF579C9 C5A57453B0C80BC0A709BD7800BAB2CA00588EA1BAC2E6FFBCA12219692E91BAAEC93C15 9FDCAD8E155C8C5C13E50A38CA93337D674B642ECF1DD1124123DFB4B4699C8F8B74B485 976E68FA05ACDBF0D599C43AE568F2B539B7521348A50AD32507E30F7F37522C8AD02A3C 3D3A597894FE7F6F40139E1D3DFCF82D829062DFC587EB7F4CFC4FD865C0F87B9EF270E6 0DFEEDE60CCA20442DA0202B4AE852A7152CE98B194BBB41D4BEE2B1B8C366F5B291254D F6AD5963D8445646FCAEE118B86033AEAB944D741D5B41E396B4759449C99D44A41084C5 A9C573D3F123A761C6F4648194162231F0FDFF08FE7DEEA261E89DC5F489D277CDBE9CBD 956CE7B53301DA739D644D96A503BCDEF10FFE1CECF5C2B82DE3F5309F45BCE008B481F7 067DAFE0E63F26D0CDB01BA24437A24E6DA7C21856079169BC0F0447F236A40685E47B92 583FD3661C0D201C12B5CF63426899BD0494B71C685D887F1794FF674C5C845B9FF4ACE1 4126455943C6AAB75E03A900B4F570DE3D1A4157B60AD484882174AB525433BA39CB2281 92BB13088D865D5EE06D8ADA58E843819EAF504BB94698CC3934F9DE34BF1C2EB7D5B309 DDA79B5456AB2407092B39B9124BDF82E3685449299F84EE97F12F6481056F7D9B85DAC5 6BD96F985307D6CE23F5C8E2BBD41E9B80F8F1A3F6C54BF12D434D8C8B71B8F54DCB3627 59C8DB212C4FC0F7C9BB831CCD4AA224C4B4B0B6CC0DA44246021756832CFBF186A2061F 8E5593A16FDD53A8AD5487202834E6296739A767C8F8792E67EBEA85C21F7644454AF8E4 E3BA85C45F486753C1EB0FFCE820410FB821175870BF274EBDF3F24BB4B5B8E1C684888F A4B5AEE315B3DABD6417854A310EDFA98070D1495776EBAF568348FDB8AEDF0211AF8FED 08E9952FCD6F38C279C8D2E3F15EE1EA6F4EBD5EB2C1AA1CCEB87252805F4CDED557FFB8 4863651CF79F4236A148489860715B53619A9C9FB6584D66FADB6786A0EBB50BB57BE687 6B2FEBB8D6EDDDB26960BCB4BDE63E43F3A3D6170BAD533DBA7DADBD89FA36563065FF8C 0F7AE8DE473D2B8D2A6D095CE52C8E2104E59FC7BDC60075B4855798D2BE68477CC77DAC 0D37C749079EB6A0E968B74B35C5919248642B20E2D7F2AC309A3AD6D4DCF1695AFF82B6 B7282ED13E58DE4AAA7B1B74963B24A18EDDD9AA4475A55DA0F3BDF2C5C5C00AA6CAECFF 840A1583587F75408B88CB96C2980EB36F54381466028A84DE0E0573B12061017A723222 BC5B75BDC764E2CE648C0A9D1FCE8BAB4B70ABEE213B123075F79757C34E62C68AEABA6E 4F0859EF076054646ECFF4D48D89AF2C6E6BE231E4434C137E1483923686B91BB6A6801F 3CEF2E28F5292B7A60BF562EDDD82B7E9009EF05FA19F7E8AC6063687717BF545676B544 D3EEF17C352167FFAB521E21B23C5324F78BBAFBD4E5E5D82DEAB4C6230ECBE54424AE07 40FBA1F038758082B9E3202D27A2933EF73049C1D74581E43D3074ACB2E5957ECC680EA4 F57A2901DD692B566CA5AA3778B0ED7CE58F1E29DBAA9E8E317FE98863D01569B971AE63 A5E1FC59151C1B5C6724C9A342EC814C6C5452AE84E783206271E05EB2B5E91BECC631AF 9937B76AC54575286ADD9B0A6F682B98203FDC93CB23FE764D219D06EE5820DC13DF4B4A B5BF928D516201135C75191EE9609A3883C02257DAE39CF7C3EE8C29091F86A66B962062 BD1A26D9F5DB1AB2356657807D921BF942B5F2EB90D0524008BF92AB241DF6E56D51CD47 3AE41A98C62E4BB73D43C73247013A5EA49475D0484C3087F2957634C953748C50FC45A2 96AACC6602032AB551FD7D844507E4A16A4840AE8D83230A8F55C66645DCCC3736C0CC53 53BDC08952BF4270CC3F7A334141E70D3BA395E36C032AA07AD8D07BA07B337C3FF35655 36AD224BB84F80C89E5599385F8C76AA901621773FE9A622F5D425B45F2E1D013663215F CF62379BB2E6E1ECAA20E21A3B9C2E3FD45A2164F0F98BB0D0176A454EEBFF59672BF255 8991CC7DAB6E0671F2DB0949D2BB2B65D8AC3AA0478765120E968D8DE9568619D20FE7C1 94EF80FFF44E763A1B5357F469847C262517624EEBB023CEE377E82C6C9F0FA61DDB4B00 030E0CD192AE21E2CF35620EF4BAEE784DE7EFE0C82C82C2AEF287E3D2A7441954DE0476 DDE2726D005A80E2D14F2BC187F59E401C0528D6D0F4E4E1768A4171354743F92EF702AA 4C5663409C5120AB3DF4F25DDEB0B6392906A959B65DCE47D2CB8CD322E4C713C35C84AF 0AD00EF218F852C9870CC8DFF0AB2B2FA906551912A81CD97527FB767AD835EDDEB44024 BF5E844B62E52A43D8C171F1CD99A16580AFF05C84B34E8DF7C5084C24E608674EDA40BC 5C7D9698882DC03EAD55DB3E1CD4FC911030477E96CA44F4ED95BD2E336D5A109116984A B8AE637B527583E5EA79A3C1C9B876D0E9328369003A9D269D4B99B5405191FB9328574C 9A3740649378E33CBBF24393E7B2280C6F00383767AF05583296F4F6FD9D9CBB0DD62727 E5B136AC2F6FDD13E359B2287D6EF115AF1EEC168AE83DDF22C92D256FE349765D1A0EE4 343F90AC449FA8C630B3FF3F79380101D730FF3C4ED5CF59927A8AAB362E6AADDF4A2544 E2383134408A5D50ADEC835E71B26FDAAA63FF703638EF70616A8D053F2E1B34E5C9BF32 5C39BB729F7583FDEE937774A3F0D747BBF00C49C275888BDA8389A29BE9D0A086BBB70D A3815681F63E3C7D3C9A405CDE5C7E774F29C127900B888CEC1B340897B675C80553794D 84D764497C4CB227FF1E05435531CD8088911CA741BC05D1A594BC55CA4130BE44B15CAC 3C9789319E08EA16C6AA6655544D09B1475239C6D7623E4AEEA673F3ABC6CBB35A422997 FA5DE07EB9EEF1B5E03056D9D383E338E4B2A7664B407EE24C9084DCA603CB982E509540 E8BA0FA8EFFBBF4E9E9F0B5718FBD90267131A646BB38C9958D0890523EE117C05B7B5DF 3B36E8774BD735BE9EB94C45450AE77F715F8CEF98040EE08A5A88B8A965AD44232948B2 B8E76307FAA6D1CC50B3C53277A965C25EA05D0C887742B373C0CC66E148C6B089B26138 F5FF0584B59491C5405F7BD02B805B59D54B5B64743500DB943826E45E3263C586EC327D 1B8F8C69A2537DC756970BD146B5F503B4C49088280CDCADDE2FA04F47EA22381B3A6AF5 47F19FCA370C98535BE69F85E5FBC56C838AE38BC2C216B3CDD89B6DCEAF927825E0372D 71B67FC4CBFA630A862B4E7EFE7230A4B20264EC67FA8520C6CF4FD05B461EC139A8B40D 2A6F29451008460EA9861853AC28848DBAFA79A071B4249CA9D8D180D82CED1CFE2F1AA4 1996572B83C52B20FB41BE71934F0558D2FD3BA7D16278EAA948B64C077D75D0E2A2A2E8 597E1433DD80322A133BACCCFD197B3C49ED306B32930671DB592A939A9B94C105B35C43 4791659424512DD1DE71C8FD28A9C634A804C2E01D8A08FC40FA5DE84752C7019052D1EE 7839A9F25826CF794CA1AD2998EE2B065DC052DE4723CF6C5C81E7AB64F66F931512AADD E552076B77157643C143DE4F789D14F9F16A1C87F2F3970FA86E0572A0BB6884B96026F9 421465226C9150741A7728E360935A943BE8EADBF2AE8C5D45FDA02730D3F5F3FDD1D5A8 B05FB77B80B9B6B734A2D5FCBD541AFBC22D051F69340655527E52621B639912C49918F4 C1917C12C9EFF39790BE1893DBB0AC70118044FC6AC1CACEE8C5DFCA7B51706DC409C0CB 7F979ADD1DB8ADD70F8DE358BA84445F4A2FC1A0A59F14DD24F14D6B29D2F62C171FB6B1 7A2D8ED7A432D1CF5B6330C6E64EDA63C6DDEFD904F4B4F1D959A81945F853D5CFB1B3B2 0685FB5063E5CF969D501B32EF0FEB281B3F99E6B8A8D15A7CDEC73A79996CA1A5E583AF 1ACA123151939C16A1A049D43372E83458BA63AEC8CC0EF8F441E34B537F7EF27EC1E915 EA974A866A2CC3044208627F87F70BD8E1E7131337006C8090C9C98F3F2980242C9DF107 1547E6322795921436B7C746DDBBF3A94EF5760FC16C27B02002BA0E4065996EA572B1B5 E9CBD3E08EFDC340E53C1AD41866457CFE908C72912CEDB46C0C9D690008A9DC907857F1 D38A9A70A5AC31FCC015EC394A59217B0699AA0E43322051709E191AD070797BB7F79241 CC970FCE2341BAD575077827D4DE6C5BF98E80D34F022D179EF1AAE51F73A318FCDF3F12 105093A0CF69C1732264BD5F0197DB32FA657293A93EA653FCB83CD4D2D03CDCBBBCEE86 388521FB327F0DC937D06521ED7B7176A5F2F64CAAE71C92B6315015A93723A538629C20 4D2F100EFC5698F611CAF8B7D3240642AFDDB5553E497F76BA3D3DA2C9102505A9A4B93E AAA55EAD2FBB28C120EE436083B60C07B0CD97C4C0F96A5FCADE57C9656E9440318A0209 DDE0575912ACE6A8BCB7010D7AE2EA5CB440C3C2BDD9E95B42D3C7940A36B0ACF6022C45 2BE6698FE4A730900A6FED365CF02AB0100D0ADD0BFE689343A00D4A77AA0B73A247D5F8 F6C4EA59461AEFC85D2147399C3BE4D0649686F3B7C2743B0913D338324A719BB43AEBAB F0CB7F1B9F28BADFDEAED84001AA0176BC9FFA7F43208FDEDCC70A3D2F17E5925577CFD6 7CA3B7E4B54BFFE6EC28FB9D5B6DCD4F31BC20A6D5B98A4703D4C5EA3D9BE9D5B4BB5CD7 B43B7645B2DE3A047F87B13A642BFEF3BEB13999E9A390EE6D8CC1B43E9DD8E78993515F 807D429C70AF7747023BE46DAEE6BC1A7EC7410146B4A5D9377573047E3A614EC13614C3 C8C6CAED5309E55F8394671FEB239BCAACA9EFCE3FE15FF62658DBC506F9DECEE6638087 D3A6F9547E45B00E4D599058CB3775AD262997A8632BFDE7802D9A8C7F57CCF2F2378AF3 93D21A730401694854CB603D20A368E1B908CAFBCCCAAB98CFAF8D1BA978E08E58DE2841 45CB71844C811428C7D4BA12EECD51ABDAB75F9C16A593E4B0E410041B96C6CF88726432 D4E852AB32DF05C337E9134FEF7DAAB3135C9633A84E599CEE127708252AFEBB9146E5F5 3E261B2F9B099881768E9FAC5E6183F9A8498A22D5501C4A92DDB03B80F69B181C207D8A 21A3159344DD006F81B4AA516C89F11BC8ECCEB6EFA7BC1610F1B6DA60103F7DD55ACE57 E629D74A10E654E6A628209FB866F8227D6F8D8DCF6C5527D22FC0082CCCB6AEBDFB5F59 E3CA1154D0FF236D67819EF4C04AB933D920EBF1F84C1CAA47000F653DD69B10FBF4FABF F3830B79CE407C5702172565F74511DB78C45E28F404D5B8AF53523972C42A79960A34BA C3D06451FC074575A70458D2D2026F554CEEC908FBEAFE1A510C84614B02743F2057B590 3021071F5E89EDEA35B2DDFCE41FB64CB1F693C5103F7B3342AB1C3643EA9127EA9AAD0C 72FFA1AED4F0B7BDD4F6D686818BBB535066D610267EC3B7990A25CD23EDBDDD334AF845 98489263D106AE80EB8E82050E08C608E1D70F9A0F4AFA052E17F16B88448D4D17E28F2B EB9591005FD7E79D71A0C43DF317D1DC729DB307D2A4F148DFE81615F56D472DFB70A9DB 1905300114D6E3F529A4E0B6D84706443C584EDA62F4813DFA6FB548948AC7238DEC96E1 A6DA4C17C93E4017720EF51FE314DB6E60B17BF291B916C20AC63841CDACCC4EC54A6A2E C6BC079FD811E223305F2536DE0528DAA7A41018289115EDF559C6EE2A278AFF60F37ED3 19973EC3A6405FC246B739A36E4E587B1AAF11DA3BE1AFB55061C554420E67FEFF6F4E52 3B63CC79EBD431B008C63E1C4A90D28CC4734B95977DBD10879126EA194932C71D6EFD3C DAF84176A30BAD72BC9FD018BAD9EFAC488F556447960773550433C164F92479D9C27498 9F9ABDE105F16E0CF9196A08D5E14923C79E9E086F18E75985AC7A98656DA9921FB39BC6 0E80B745ABDBDB7C89E14B377799E6F2A7CFDC042DABA1C046E49664EFF03A83FEE333A1 199552D03AD99F0525DF4004B9B9C15B3DAC09A2EB368836850C666F0CC01844C3CED14D 1AA8B55ABB2E9249C4B468FFDE7B7BCE7EF877A44E58BB1B5B3B40E90FB9B843BC93FDA2 AE5B61520E9C9E423A70238B9B12B6905E19EA354945BC8C3D4F851773EF1953E5F1F5EB 7C928D9FE68A67B7DF8698B421A30C3DB3FD96A4C918C9E25B9A002AF54B91CD879354A6 25B31FE7EE8797662D27BA44E04C8BAD1EA370F5FCC5E21822F631E078B31D0A45587F46 3C0755CBAE08A5DFC81A4AF38F66449870A71A0EE5126A8CC2FB98D5FEA486C92D83E8FD 7ABA2292E8168D27FFAD7B5A55EFC7176A8F25F632EF1D606188BFA0A1C60583C777F93A 0DE24773186007919F4FF0A1B91236531C9F1CA4876E6742EA0E4AAC457138A1AB119382 196115F9F8313E737B36F8816DD97CEC7EB860D0B7FB07C1EEF909E5D841CB2F53A285AD F47DDAFB3630803639F1985ECC578A1F2FC83579B1C35F200B6F39F45356A0686896DC84 BED1AED0CAC18E10B6EDB02E1816FC7A5DD2C48290D50EEA6FAE978B08DC9E5E7579822D 59B7F86EC89A99AD0E6033D5F0A3ED5D240F561062ACC1018BE25D65CD912FDBFD1D3F05 3D3671878A4B0C2CAA04EFE58ACC043AFC010451B2793F137506BDB28FD5046D6BBEE4E5 EFA345A639AC940F9414F4F433B3E935E80FAC2200F39572E0C72F5C8DF760CDB0902369 275AECB3FF55F4D20D1F286AF6CA5FCCD3D0730A5E85910532B295F23512CEFE30AFFBD2 64C5A3FB877A394E287A91AAA63948298CE93BBF567F27819C6196F5CBB9F48989370A8B 1196053383EA468E6E3C1EBD78CF4AE242DD2F17BADF91438FD0A735717E0863D8F0C696 F5C89D049F93C71CCEAF97D0D434810CC776A5434789186DEB8172B6D0CB384F11498AEB 34454A2768FC615B05B72A14FBA5668CC46597A4315B09FEDDC4334AA425C5804B73C203 94C38B2139802349073E8AF5756CD106F5605A0DCD8D66E1420C49B9C9920DB7F97293BA 6DC7AA4926D0A628045FC43A6B3880D41B8C90F6C61D47CE48D5690A11A4CA451FEEC139 E56550415BDAAFA6334CB6E507DCBAD4A849828D43A909DC04EF05B42EF0CA00F83996D2 09D12345C17E5DA7C515D49FD570724161DB05967D1B04FB13BADA766B0B395C218758AC DCFF27D85822C7B2CA4C119BE34CD036E325F6AFCA183EFAEB27DFA53A0FD4F48056EF0E 681787F52F4F480856F530B154DB63F9E831F6E55233BB6FCF13BB2B8856FFAA75FAB71A E62B4B96BC940545B5F27843784CD9C55584D0FC60D6AB31035B683270701C101D4CFD63 9BA0860D17B1558E53B2E53C115485CFA0F61CED0B3CB7EAF8B6D1EF759A12DA06056260 2EDDD8C13F0F6B2F83EE8C8B7C13CD7614D3F370BE9C3444B13C8F20596A88AB03EB2AFC 181FA4B667E34C0913D01FE528BE9AC1075605144BC4904DBF5DAC9178B661C3E66D4135 E536CC3AA7ED5D9435FC5C6E40BE3BF68EE572F9072A9426213AE472A547CE0542ACFE79 83BCB3F426E8DD9E01C1985B626412052A92781CDACCCB7BD85FBBC7B7C3A73D0E377405 E6DE16B47EAB34B4DE68636EE4098C7E2EA04B54C488B6FD428C281FC9D8D4CD0B079F42 65769E736D810553D35D802A3FEE328364802CD57EF70F34EB67CC22326C57376C90629D 4104A6140B64C22717B0493DD505748F1147B0B27D3D77B50B9DA9B072E96389C587B2FE 58C939528AA824B30669AACA8C5789A53D863C6E3060A12252A88813E192B552E62D9F1A 90E3EE40ED90FD8D38824E40A042E329F85572834A9F52575F00917D6C879A0DB975B012 D8EBDE981239598FF45129AE9043CCD1AE6C3ED10BFB9B5B928CEF565F805EA46B494AA9 CBFE1F6273B874BE1F8CDBB4417ED8A12C889CE628D278566FC0503C9BCAB9483B140171 2D3D9240A1EBCB46564E7E1297CBC1AD70BA273E218D496BECD0D633426CEB5F718A3E8A 5FA6E3DDD361F43F2ECA73C4C46A5F9D6A2614CB6DF6E3652656B21C0C0DAF1B1AF82CD3 F204B4FD3A71F8776A2D6403C35ACFB413F5DF20A8510E712354AA7E33BA1CB9934BB3A9 434AC257370BCD1CD3687687773385061E2370018F962526FE358CFEF8B9C464D6500530 B94DCD88221ACA132AE196C66B02800722C39C15F7080E897A3BD94E3DDAA67162BB0A66 AFE31E75F8192C667BF1AD9D2BEFA65408425202B5FB03D69E161331BD7AAED63DB05543 D1A0724AC1974C12D77DB86076B435BFBC7CA57FDE520285B37D8E6A62A3EC2BF9E21C4D 406554269CB0D0E29BEEF6D9E70CB807AEF843ED1C5A2A18F2774B1C6A1227CBED7549C1 86435C73F59F11696F346B9A46B7AEFD52F02FF8B13B3F546470FF39C84C4DB09D531EEE 008B13C61DAD801E7B5A24CB051E8101AC211478B80979EDA9892CC85CA3AFFA74ABD082 F39C80B766BF02AC4CABEA41686B6EE11BBC6BB700B5FE27103B13FBE2415557ACAE11A3 61A6203A36A9164B3F932A74E83A7B0F99BE70BBF90C3E0A8087269A19A54ED248A52860 9F15452F685F3A48ABF82008E679278124582DA10B7D268970E62085266ECD8869E9EFF3 3B18503DB5897241822FFBEDF3A571621424CCEFE56C69126EFA9C1081C7BCA7F7BDDDEF 307CA3DBEC2F3DA3E6BE9BC1C890CD27F8B1AD8F28E5C3DA15F71B7D83CD075BCAFD9EAD 4573CD16460893214B0D2A4D09005CF3285F744A772B2B691BF21F3398C627137A164C32 31D808ABE165A2AAA56B6B7051673937E553511D6EC650F8C446834A22A9C8F734BB8D2D A6377518E8E85B1ED8FAD5B99C918FCE03440E26F89343F2A233B2D67085A12ABF24348C 64F874ED6FD0EB7A027CC24FC9E824EDBBB6402F0932C82AD99FEBAD23A768C8C37615F7 29C74410984A72C8269C4B8996748266C4D6CC35D6003A1B43BBE82868A2BD276A3B682C 2DA58E9E9A163E480165816E2D64FF66E08EC43A1E922B4462C26B1B32F91F738A9334FB 9A9CC03DB9BF08859FBAC84A1582DB60EA2DA4FEFDE8006CD06402C264B13FEFEE595C73 037BF7790D709D9E3E0EE1C5FF586BF1FC395C068F08DAA364B2116B8D5DC28F2AC09D58 6601C48EAD1D33CD0A7EBA2988EEA3E2E9AE7E7ABA1DCF9EE6E7DF3009A2E00D5A4376F5 334C14F34E9E485C448365AF8AF9E7D5B3CDC01652CDF5372D527BFD71FADB7E7991D788 C37247C3AD8711D2D4E46CE72F52BEED7C1F40BFB7AFCEA42F39F966954C275AFA5A46B2 358466AA1E544BE7BA610AFD6122AB55330655D7F72700238FCD457420B0F6B9BCF992C3 D019A47C3747457176F398DFE0860D3CA1445742A1CDF963041FFDBA2261C3DC02321B44 1CA261CEC1DB528C15E81A07C91725B11E8061F2440E10E1DB03D08A4BFCA2FD0EF4CB5A E99CC6481A4A48CBE7B00574025F3A15AFB642888E5347A2A8BC03E25A8B2B2A55F497E5 1885085FC6BE49A06BC05EA30A2921B4A6D04138BD351013C54E57CC842218893DDFE0A3 275E2BBC87D3E420678246107B0F8EE06AE7A1B0E0D0C7363C7BB94D9C7994ED4041870D 75C4F4C332D793D27FEAE4E20AC24E9BC7145485A39C1DE46B4EA6344237E87ED4A84EA8 B9393EEABCCC723DC29FA8BAEC05B4CDA540A713F839F2BE4334FCCA54048FF0F2776401 FA78B46F5935A5E8572F672F2A0B8AD5770D177E5FBB6603D3BB32B287E0AFA8B3987595 6C28E011BD51DCC9B89AE715B6FF466D839AC165C048125F1CDBCFBD9C262D51B3EFDCCB 1D94663C40E9F7BEDB00FB1BF87DC8239624D2369AD7B04ADFE97A52DCF4CDE47F4EBCD0 F2161C32F9D16E02054CC69D9A31BAE753A359C5177D49EFED7FB893B6D31826FE202794 BE4B230D6FB3C4C682AF58BD396EBC86255A0FD3FC0A9F729524F8FFD9141542FB40F575 88297261B98B1F6AFA59B541510723AC1FD802271B706074A5688D94A79D446C146A7BCC 7B8D06F6F26E5B19857CE33A693D7853B443FC22752BFAFC64C8A6F14C58AED08E933EF3 260473232330939BF4767497D7BB5F263DD3C82AAA12C51E58C2C44B9AE4A5D419A58CFB 07B49CDCFD60D6077052954BCDD177EDBF50787DA75D61351CD2E7DF97A4957195F868B5 A274F47E18225AAD961005D4A4FF6C02D7294A39B04B75565F70CB050E005ED9EC12EC9F 4E5B1DB27D0E26CE5173B4BD0B5FF1D703D7885DC2D1BB1A9AF4FB938CD0EB80E429AFD0 DD6F8C23D548515B4D38CB3F0E79EA536161F58037958158DCD76543BE428D0299AB251D 3BF522A489AB3E0E83B628428FFD6ACDDC47C8345F27AA5977DE01FA030AAC390F5CE140 05CC5A571B50D254C94048E3D9E32E58844EB07E6E49F5AC5ADCD15114ABD3C6783792E5 D8CBE93BD6575E4A5AC45F7D260F4AA554FFF5E266599B29E549C820579390A1DBA9DA44 94A74C12B9EE6ECCDC512CD2B35CA5A582CB63A5DB1C3DF3F18E8A7546ECC10EFFFB59CC 8DC749264204259F9A216C61C65117FB2D701232B77B74BDDDFCFA05BA4B2F52EE78C431 8DEBBC35694615C66FC6F8296D44361DF3BEBDB94A79C0044A9FA3AC93A7A236D77403FD 62B80FAEFACFCEF311CBDDF57C240A05385379E85E64825DD3106B2CDEB9D03D1AFFE42B 27B9E0EF7E5BEB6191EEAE745FD2ECD3907795AE99CE7BD0BD28AEE8C7EA62527526BADD DC72C2F20EB6C3E0219E4A75A343216928F7BFF0AF4CACC0266764372B903A308EF76113 2D6C84C72E27BF721C22CD260EDA12C94502E054EB8E12E5707705DEA70DEB7DE7E22413 ED4A4B0F498214BF8700809D9ADF577C4FC72845EE3BBAB08D1EF6414D8C2ACC9C6E5BA9 24BB5EE97D1DCA827FFF4511375B6D0E6BDEAD90C3EE8E9652F91295E83A700BE956AF36 C54AF212BF427A2EC8A2E7CE58F1B7D188EDBF5F2791F685D17AE032505165E3C7D573AA 2B8C4A109EEDBBE9D0BCCFEC7099FA5A0616CC902FDDB9F3F95BB4D20502B25E2218C58F 11501C9B52D0CD74B1055285DD46D47737D9A20FFBABDDB3CAB052F0A39F3572B953E92B 176728C4780791D13D41C94BBD47DEED08F6AD0E9C28EF21A6E026E16DAD313AC8A213AC D352402D6D1DFF5D4A7134D15D9790F4EB14D488CD63C50044477F925ADA327FF0A841FC 74A78E941B3946927F9F13CAABE99146CA2AB318147D5F3692CC1E47C8929C2220F8DC27 C14D8B6799C212C870F6038A8B56FC24D9920BAD7B870FDDEDBC26B422E8CE69B0AC3752 B9B8B394214DFFCF87B2FD09341AAB734DB3FE15E7DC2548C27A904F562335972F445BE6 757951B34BC82F9DBB933F9072967A87C1EA4F9217706549CF66BCB3FC61AF1A57D6F45B 2F6A0E1A5695045726D1492BFFC0E859877DD85CE5321BDFE26705450EAFBAFE7531E62F CB2544A78A1250A45FC7EA570E29E572EDF445C4057CD0CCA0E3C19F76E18A8822E51109 FC526F3899AF095384BB337F37C9B02A99C54E911FEB85B440316DB4819904C83321B770 9EAE7204311CECD8347090C24DE8B626BD06CC015E54E781DA8AA6C824CDC1B520023F3D 6F612697397A438F6A4BBFAE2F36A781C1285B89248BC952DF59C5315D7487B512612E99 347E2A5F6A16F72A6330D4295E31359EB5B277C6499CE9DB7F35919838E4F507FA2DE34E 068859543B7319583C640C94986E5F822212379F6B74A5646B50B090931F37E3AA842CFE DC1BD4BEA290C3637433AE8F9C2819FFA54799E6C4F69A1CAC5AB44487E43FEF2F90E3C3 F90A0FF77CBB974C41520216117EDE58416B93C8CD83D7C3203A2B0568A8950C7B8E9E52 A0F531E38AA08B37FC2B28433E90DBE9781CFEFC077C28B275721E87893AD460FC88914D EE33222E71A25C1CA7E3E037CA879F06761E8BA9FBED6E77F0913D134C21DBC2C6229EB2 4A57DB093B25D6A13B012A626000FE20A4ACC13DCF456A9BFF7D34783844F666257D14CF D1C1A7CE285680958189B9E639FFCFBDA05C7B47448E66E243E109C6CBFE3A9A377C73F8 4606867C24BEF56D1D533F3E35FB770236D9A642E7D3A0DBE46D85E95F19CDA58493F16D E3C252D6C6CD051D60052FF6DC6CE8E051B68CEA78A96B53F213A98C913D27E6F9FE320F F69A34028269A9662642296A0C9EE90A73ADF4191429C2CF3B72E351DD6E937E751C79E9 81CDA349DD64F018922F7E8EA1D78C19CA3469F0E523B4804DB088EF2B9523AC40BE57EA C7506F75D8FD8A22A2D712612ACCAF82B3EBB778B6D4A2770164608E1E7DFAA2D240CDB6 00931BA816431CBD4B9621A66BEA783B8130E6CD428465F33A7C42ADD0A7EACEDF02635B 900FA495EF01B4B51AF93A9BC3E4F2E7A9141FC6D5DF484D58ABD0D5F1E0755A96B53E90 AE8042063AD541892EBB64ED54BCB92A14946DD7B3529431817ED9517F90A65D39A44811 CA4BF5BFC714B08B4D1AF39112DD6470F4A0B098A7817D1655E7C7FB9CCDB7E7F499A159 8B96591B4F19C19653109341AE08671EF8B10B37C536B2A69A8EC5EAAEAD8B6183FB7042 AD5ED694E8E39F144FD2C7A0169BC31468C8DE92BC7D07639BA2D27583D5E59429C5E8BC E2C36A258269CF4562FAFD0F493934E4DA4C71519DAD58B47F44CF32C460CFFE16B52F5A BB5A98C9A416743DDFF502F471A16AE07244E51DDCFBEF90ADB42601FE4637A669A11ED3 F2D76ED8A95E6ACAA898F65E3CC58C844699105D608CAE2838B67C2A6A595120A543365A 294CB80A129BB357E4EB0991A0A10A7876B7A6CAC35ECCE7C6191788D70035096E415FD3 18F5A1DEE9F433840851036FE5B5655055A4CE99B24A3B82A00F1A55C3F9CC7AF195504C 57284C201DABFD7B2A1AC47E086DC57FC08A6EC977DFE97E2510D1F22EEBA0BB368D4C51 E6C3528C37C2CDE1927DB26F31DC36BCE30BCA0813D9BB8D13DFA07FE02EBC419067774D 1D56551F2554B04ACB0A94E13DB6E18484640E39348FCC4226A177A99F8BF7FF781F03AD 5C541B2D343331DE45DDB8335F636AA4AA8BAE96183ABCB239BDACFB2E2B3FA03FEA2123 5A63F9F7AE3275A7A2FAAB1C063682F4330AF7E83B6A98FCCFA4DEB53B764EC8AB3D9E1B 363E0BE7B3AC852380BF528D7868EE1FCFB2F68BDDC06CEDAE56AE3A23F7DC310F6D6E0C 512AC8C4059A333DE27C324C563BBD8EA04B44751CCA3639CB9DC4FCEDB85201368F01F5 ACE29E860F63A3D95A8AD8407E11DB003134DABC604E3D4303754324803135A88560A3E8 3A5EA382458070F0D3450C0432B4114074A87A7F014D2350F70F4E2719D24F1D8C44408F D0B14FD62080E3CB690C1D698A6B40DE927767686FD9276C817B6E0C12C8C350A1DD232E 91CD16A63E72C1C89C8B53C213CB237B139B13ED5230786525346EF842D4C1EB650F6494 1E9920A61E9021C9016E493A8B38113AD7CB7D56163149F6C589EC5A18216BCC62BB1091 22532CB844008F778433AF45ADAA3F4561CF7EBE30FECB42527399D30115D82318F65478 D9115F767BB9E18D63F10325E0750F388E14820B732EA980E89D3084E43F70AB935C1C94 7D578D350D2A89E125BC479283B065CDFE0E4C1526D21544B3591CD89A1C497E2270307F 95D1B6C7EE093E745719F042A28A92E3F5CC94F6D667B80E19BE5327F8CCD0A4AF33CA9A 9E72BE06E12BB873CF5681E3BCE872BDEBCDCF8227BB47D942DA24423A704A08F34B2EBA 5E8892CC880252C279DFD2850041379A06ECF5BDC523A93C57FC2DE4553EC6C185E4D3CF C803C5F936A6B950DCCCE3C292D750E6214729EC6178117141092EADA6D664C4E58739F9 63DBD6BC235065A8356C180A1839BA1F370FF21FA800F5F1D03BBF8E1CFC4ACF7292AE6F BC9AD056D6BD5F54502D58FAAFBDF406932A8007938AA0C0475426C004CB7C46DF5FF358 37F4B0BEFCC5980C958949985CC007649554EBF8F02331E7EF69DDA96BBBA1A4D65E10E6 B012C27DC66D0744E5302C586969EB0A215EC79EB52EDD5100D10D676E1DF330CE7D3158 0FDED1DB035D7B9E94C0A0E18ACEF0099BAE638B16ED709188B13AFC11215ACC51198818 8F25E40CE2573C140C15BDCFDD4B306020AB382E9F338DE5A93D2CFD64005DAD8716F5CA 3219ECB8BCF3C80A64243A0DF4D8348F6B088F5A9FA900DC5C1606781E4BA2ED7F7A3815 2322226E239398ECDC7846D4A3F1E0C060D153B19CD3B3EA0368ECF758E0FFAE12E46B1A 461E3579A90345B73F69E3379B304B599DDBB67FA5C05CDE3C9AC22F37B3B63E00E9D1C2 78BBE797A458C6303E2DB27E9740D0B4796078C29E1011FE68714B5CE4E71CF47F5DADC1 C95C83D527258F24913D55E617FE4C62FEDA433AA688CF5B504065BC82E90929896F55DB 494156A2BE6E3218FA7958A6B30A124BB1DEFD9C80016E34C96F4C75D4962FBA408A511C 84B256388D2D1FC1DF6F990397B702CC6849950A7C44E726347C5248A67E5AE046B97D2C 824FDA11F84EF741B08A721E8148758B2E0F1B1A07F37EBCF0EC84E323043CB2504C95F1 4A2B2653C947998DC0DC21BC64CD6FDF84D7EB0F5D60008B551F5B61133CEE40F284AA52 25DFF90E6F5A8E6F7511F8363F3BBB9769824FBEAD4FF9B17D74C135B1EE3436FF0A91B8 AC678B3CE568159AD7FD9B8A4C3414B95082BA26C8FD1D9E53EBD8778967EB7F6BF2D236 AE85B284B08FB7448AD17E3C9FFA914881FBA2F16DBB2E517C416A48417A369860F2A03D B7504FD1FB3CBCA894EC253724F61A222D8A164A33B67B26C64BD98859613110D2118B0C 3AA943B34ED31BFABC4B689ED711945C5A2F83149A6DBEFFC937430D1AB084B0923CF9B0 4D4CFD8688A4E03F9CA9A09E0F9D7F293D855E6F505F68D43A99F60D42B35635F1B981CD 9E5188E65E4B3348A0F5E7524C3ECBCC96D67BA0FE33E9F29C81317D8BC351F1EB9EEA21 49415FD4131260DA94D74A8B129CCD506B45A1D26F42FBA306FC07905139C5FE09F084D5 3B149C8C24E11296BAC54A85FFC5816EA74225345FF3AD64ECEB51DAC2D919EC6877976A F8BA8FBF73AD9353A9496824B6F6B8CCEBBAD8A923C65E79DC16F5F6D824B6C75A4A0F35 0010D108045C06EDC64A584CC0F4859E15C050E756B4040B2E7C0F0C2E50B1A60E822E8F 8EEAA25176A1262FF56B738DF1267829D0EB321F0EF9B161EC12B9F30F5043D99E04A0EF 78748D77EC8BBA9C6336090B7C6AE1BD9240199E1CEBF7C51A7D89AEAFA43D3CCE029109 96F060992CBB7F1863B8D377F8722195B23A2BC628D42EA98DBBD6B0424012EEEB66BF41 9E41DBFFC38159919D64D455564379A22A96882CAF040258411CA6BA0DCC2BCFC52749E8 CFE08A35250076FB1A708D7B0000D2A0A7C07AFCB0446D84EA96FDEC679E1C10D54FFD4B 1D9C4DA22A316B406E04D833D29A5844DF75511BC67824EE623BFE4AC6E91D919567E26D 1446FA39AE49BB580149E6FAE548544949140620AEE47BC317BE60241E319A5B40CBA521 BFBAA973943B0D6D3FD524285884AC0B2FA5AB1420CD7B3183C0DC259C2EFD2F4FE7B22A 47D37EC47DD5982D407A5E69FE4B38E675B1E8D84DFDFE4AE8852F64CD3EB32E22D2D7AA 625850CE5FF1D7B3E1D1EA00C1F456F3B62BA93447E036FFA7AB7BA9F42D2ABD5A69740C D7E8A55539DAB0C0A81D10B87843A8626042D1B9997907C9F114B4DC836873C85D2FEB42 28A122FAB469DB56730B704E7AC7B86B724D3208AAFC799A4B000D7519A1D4577C40421E 9FAE460F2F280183BC5DB746BD03C46618700D2BA3E6494825595E9145235D6494DA8721 840D85A6B001B11C880A23E58B0F8FA714DA6EE9A99FDE822F90952559088720A894AE2B 5D5D5864EFC5B03A6777E3D0D69AC73DB5613CAAE28C72D506E02296D6713BD8E42C4DBC 854250E6CAF56822CACD24A0D54591921B90D1C618F4D2C4CCCADF782A364C85F6E1D46B FAC683FC4A9C7CA05168BEB3A35D649CDCA24E228BFE0B0CBFF50B027F1087D15F5987EF 873CC37CF091FCA71BFBD4B93D9C79DBAF999CBA9CAABE5B6BCA1793049C2B627167F3B3 5F7B24E9BC8E08EE85252EFC8A06F052665DC883C55373A8CF8D5C29B3C2273D87C094D7 A4E2F950529B7C7E2A7FAC6941893F9CAF241E83A9616FF7DE3CAFDC36BB189D842C4614 86DBDC973413C6F7BCB9FFF72F2F888FBE9DEB111732D3A9CBB97967C8654ACFABEDF0F7 3194AAA821BED1150A613E77010E35D21E7E1F0DCBEAE15FDA05D0EAA15146BEC5B33BCF 7C756AA58C5AE5EAA796363E66BBDE8291778AD086F19963207ED0917F9E558D3FD25450 D54E6E23A2028AEF631F71CABBE8B970DE40E0C81E22DE168712564CC0FD3277ECB7DEA1 8D388C0D36B1C1A3D4543AB3014904D1EDCEAA22458B6D4415A6A57F78385EB696080B8F 95CB10179C424185B6C26737E84D24E3739C3417A46A0210CBD1D78392B6A6C4D0C9056E BDFCCDC57C3D12D5EBA5AAFB8EE4A0CEEA7D5CF15986FA826E44B99CE76D122C9AFC0B46 DB7371088054A8ED4E89B25E23D1FF85BA8A6ED71DD4E696720ED2D5FD8DB263534450A3 E8BEF55A6C5EE15E60F509E41FD10E343E30E1D99ABD4F4A1775367F8676162DA778D0A9 0E89C9739F3AA4BDEEB7ABFAFE218403FA76434DD69BA14B7943B142CBB943A8023A3E96 C65C64A21B5BA77870EA675CC3119C0B20D212B59597C451DF4E5065BABCA0CC420D8500 4CF53ED3D540A99FE2AE3A57A725E7A1AF3D6DF5F0D8B8A68848575DD17F64B9EE2A9B3D 804F674817655D46404086988395D7CC42F1BED9146FAC505B7A19DAE0761D98D866AA20 F690AE14D244BABED129CECA0541700B4E437325C2B514D7658F284016AB69767F05ACB0 7541361B9125BA1DE7BEB8EF8BF9A26E420B87A4D1C01BDC5295A8A4B5F1355DE4FEBDE6 047F684BB6C07871B334DBC48E9FB31C99129BB4B188B377517826AE6700D134CB09F164 84B7789B3E2F1A2E3240AF6E05F388C6D8A49F1CDF4D09D96EF654972534972B6317E71C E89121E3A838E7C2E48BF154BBDF1F4ACDEAAC15CDA7626819F82A5D5A30385CB479594C B8EB4465958BA656C13B361637B567DE9040BE7FA1591C8F36504C66676121C9D8239860 86D66872D35B0582A9DB5357E53A7880B376F81EAF778659751B65A44FA751956847C2E0 90C3D52649F9FF48A7BFDCFD342089D0295196D012C49F693D4A2B5C6E0FCB72EC1D33DC 09CB30EEBCF8BDDA93ECEE3E5A381312C86424EF3C2F8B5D0916A558410D0C201C64297C 0052196F3E8E5BFC5B8E495B7EDA956BB0DC692EF29918A3E9667E434DF3EA323416C5BE C03BCE2C78998629AEAF97C9EBB9C249E2014BCBA5B62436B110418428962E43B98F891B 0256F5AA259E7B54491C832BFC328DD08089155A12B3C87A57E7D5D26B5D3DF3750B96FC 91048F909BB9711CA446B7732A478F85606D572B9D185B534646F62A65762BFC27F040E9 0D033DC31CF7A69626F0B980CEB4A0297F62F1D250E5FCC16E032AFFEB22718486A11801 6324253E6AADF1C03EB8A6D115C805C5533027E184D8105A2ADBF3D4BCDD101D3E448085 3D02E93E61F250466BFE1F3C705CFE48DC0738B7725909601007CFBD93672227091F190D F742661EA301F2754E85911A38DD8BBA881F9FD489F63EE671B90A4FB4219B3EF1142C6A F49829BB34D81FE6C9B59E39178767DB0B96BC3868C50F3CCAA592CA8AFAE083462D8127 9AA443831D6E845D88F1F414699860E62C6AB509971B168FF519F09D39426FB72F98BDC3 B82DF7331E61D0E1016544BE703557C1D1CA8527B5913F0DFDCCF94960C04894A068E802 D1BADE76E7818B889FE6F63762A859C6CF2816A83003DEBF45D069C88FEEDB8F93861E19 A2F46756E2B16DA2C45EABCC170A4C24D99BC745589FEB9132DE2C4ACA899A5C4A715AE6 BCB803D3B1B9CEB2FD80D64C80FF70848270F83269728870FE550E4FD5530D05552682E5 EB415F387BE9717B7F9E3CEDB51C32FE9604BC55C65C985C7421ED7A21A13AB97DAC946A EC002F84D99DE6AF5D1C33F71D1C5C2FC2AFB75E2148F6A43F2EED22D20BF21E0FBC0D19 991816713149FD456C2645CB77C456AD9BE4D32C338394030AA46D55C759456B0930B252 09657A483E9FBDA4D0A38739EFF206CD24598FF45F7E15C913996EF581918B6DA5E4EFE1 7CAADF9EB2BE0802638EFC9DF715F82082765AFD55D154372F3DAA3BA14A3AE3737C8E46 1552D2228929F3EAC0F541A0AF3164A79FE40CAE02BC70245DE896EDFC020D68CE190D9F F5DD1F0E897370B341E11176750ADE447D97431C5E3B9122B1D9C6348B54308630101AA3 5E463DCDD46EF29C86E6CC46788D7170E2382C7C1CBD85BF0AC7E58D3EF516AE23AE97DE 592EF29F4BBDBA7578F62B70C48B5C8E550D258D9F685D8EBF1C40A05A764A19C9822408 1736ED89395BCA4A56904666B3A60A100227D9AC7E9F53EB0EC97B5271C4CDEBACBD7595 EA4DB091DB8B0E29D5AE9647E87465F4A4C72FE102263EB16C69FEB10046B837B451F580 A283CB8767DD11C8D2668CA4F8ACAF2B9220E3AFAC4F3C9CE0F40CFE4C08094E57CD5B52 CC5F0E3D3C905FC484A94C02BBAF2FD90B071787DDCF713851F5B649DD8D9862CFDE878A 92196D783DFD5360ED152E4112FCB96BF52DCEBD093A10D91DC3DE329CF83B68A2F11E48 9E765D8F727BC70DD265003A7860EDC91893BFC84FABA813A02E0071983FE60F7361AB2E 664E6D40529CF04761F611D1613A2F2096C751A4C47C8DB660E9C0EF84D8962464BBC0CB FD875199FA45A91CDAFD70BF0422E802263F9C0F088B839971CA4FCB4104D3E9FB6D0382 18762014F798E67BC5A6DCD19B251890E6D9C555244C36080FD012B833FB85C4C268D98B 6E86F9ECB7F7322BA6FFEC5209EDAF4EEE9AC7ED8169615A8ADAFAF3F647FE6296674944 10906522A4832A9FB3D0F55ECEE075A811B3E5269A2F7B3C70B7577047A0F6BAA2B29CFB D6724AE7D8013E27271BDA950079460B2BEAAEA86F5473F3BFD512E8C7ED4F5527188DA4 6A30C90D3F6C492D6B09F10981EF0F43E208001327D2BCA3E64A028F7A658DAED2DFE092 E48E5833A3D9221037F762FA66FA4C5663409C45F67D4884405262E77079C486BAD322AA B26BFE73D2BA01C64794CF9778B9A1FE5BC6ACA4F58A6A65BDE157D9DB8ED04EECC4F89F C0AEA63E99D6D31419E7EA7B3040DB17BCD751EE8F28ACDBDA9F67794CDD285B2996C172 9CA25177AEA13F844498B89299672F863C1BBDC6CED1DD146E4211D4D877780E61C888A3 DF21B5969BB3EC84B981E073305EE4111C35747A40947B48E244FEAD0C99B643ACADEE13 153351250DB62C409531CEC7A495BECF7B62C718C09B98ADD968F6A45E36E8FF76208877 FBD25BEA435D8935F9B1D97CD70952F2C2301F3E69E94E3DF56707B5C68DEB927238A770 8DEA014BA018E7DED7089FFC59B4AE35F3E7561A70FFC616AF562AF5A451C56869BCEFC8 196C45AED5537FD84B06834584398AE8E9A6604A9A04AB9751A71107373654383B91054C 4EBE2208AB56F9715E019D5E1595603022C1207C315216D70F7835BD4B23707B508CDAA0 92338A128ADC07DF8F307D1DACDE902E67075BD60612082CB97ED45061E4CAD22A49712D 78035C13B0C015923E011241F91C2452014A71945822373AC44676B48FB1E7D9FBEA8BBE ED64F82DD7E041C48B81275188719D7F6FB13326AC24E8F7210B0C9D905B2137CA1A04CC D0B8F87A0DA1523EED20BE128BB3C80AD22B071FD0094926CCB9685754E94FFDFC5625A7 DC0080909C75D8FA354D7946A94B8D090C5E861DC9041874982FE3BE9C14AE0F28AAF68F ACE0D1A6CC64C888EC90DF735ABA07497DBB2BCF06691807A48DE5DCA10F0DBC62D63CF9 26B244342D423322A0576235BDA355FA74B87B28B24388FD178D384CB9216472B290A28C BD2E495FE420EA5C4E149711D3BA7AAD465D38054004A6D6F125396B50859DB7503684E7 1EF636FA9F143EB3680392EBA0E1C132D99E205F92E5B981FC8799247FDAF5D29509769A 59A2891AB2B8BB2DAC0D3298457B97E2932EFE1692227794302CFE9D82DB358EE7739362 8CC6B8F0AABA3DE137DE6A33CA950448645FC0420A81EACF7CC038636F99C593C68203AF DD90AE8B3ABA931F052DB6B3CECBBEC25E529B27F167879F48D466BC1CBFE4E92D326BF1 F10E7B3B1FB6510A44F52C67D5E39A791362F6BEFC986428B7DC2E9F5AE725FB18594BB1 6B5627BA6D807E44C8A67BDDFA76AA1A0C6B79756A94940CDACBA7AFC7ABFA7278E75ADD 4358DE9C5AC4EE331EB6CF477415B7DAA47C91E5FD65BB1F003B2395F869425DA25B25E3 DFDDA494C516CEC04C3F7964DE5B1BF9588AEDA174CA61983D7B55785A0FF814F6EA26CA 6EE95AD0F9261619CD9FD48353602A5E959AEFE968DEE05625EB76448F472ECA3A8F9EDA A8B62E1BA6598B2C95A115B0C73A9652994FC193F65F241E3F8FFAA5BCE06C63B5F8CAA5 00E90C58F5C2BD8B4C34599EA3C7CBFBDB291D1C5555739DBFD8DB0343448BC5D9CE0F45 F4B883AE1AFB16DCD31CE3DBC10B8287AD2BCD53BC81845D65D6D1EA6118D7323F9BF2F5 1C5C59C4ACA66198594B4287032508381C7F55A317469034F25EF6F939858276A205730C DCF7E31EA838B8539F12954E5629EF8DDC08996E001500E1B1A3B706AFA8A2838D48BD76 747A222A9BFBE8C71E8358884E443582A0FEC8948D6E4E823937A67B0BFEF6F98EBF980F 1C6D8D07349E3B919E1AF04294B1FF14E3BF891ACC313156A7A08C32B560A5FBF0C7033B 87BB313C34280DFAB1BEF7229C91281D0971FE869DEB914BD9A8F7F7467D431DDF7AF4EF 6455B588070664D31548FBF236AB21B760FCFB2C10FFD8F674D356C73DC7262D05367F9C 484A28DEFA46FA751B94BBFC4F13187BAE68AFF9C582C2D1B166381D71B3A11FE1679CBD 24B8830619854628FC0E967DB391BFB327965DADFAEC199220969F5A396EFBE49166F25F 5AAD77C2DB6097F7C15D9AC6762E3CB90B2889C2726F3E1947405279B103CAA93964B219 BA0C0152CD652F6C244DEA5103E3D2F99E7A2329CB6123063CDD19A96AAECCF9C26BBB43 B6701BB4E1E18A01B2BBC57EC6C6484786B6E737966D5C1F3697CF181C1D7F7F0624DD4A 38ED74F6D989A5C1DAFD09C445D6A62A5B3D82EC05E455C99580F814A11A2BCCE5D341B0 B6EBE6A256897078436BAD3228B1123E10BBB6F80A70EDD3841EA89E47525A1F87C9C317 8C9523D3B9E091DC516225E149CF0D5C5E5C679DAF1D9F0B326C4AC8863CF069A9584425 664871BBE961FBE09FDA734558A0448337429F13D92C07E54E2BB690F85960F89D0E6EA0 EF58FB2E590672AECDFC0ED098F7A0F19B7C4D76A13B572F7A0795A787E29946FA6D5C28 4C0972FB07F07E2587B8EF986D947D577A468052DE073470EC8F50BC7CF370C2F21F9B7E E40287A699F1F18D352C1D326139B2B1CD2554BCAC131E4A51B3B055E761C42B2FB3019F AF78CD87B91A40BA45F2720D385497CBC858F77FE7A6BD6CA4B311C6C853C8506954AE50 3B318C22029B3700751DE10BC1B7DCF50FA4DA9414C2EB26BB2EA2AA1EDB36C660701C61 A2B6EFE3D910A0C73466AC238FAFD25471A6B0A0FC46ED81B9AB9FBB692CD92AD5BF0D59 0A5470A48F10217A98ABA21AABC0E0C507F51465197CEBC3FED805991E80EF6B5D646162 00B569B9FDDD9F1641C2D4B123AA1C2AA39489FEB0A4C2230DFB840FA843D86566F0B37A 8227C390263904E332B0DE85EF37CAB04F577B82134F5AB567895A07225C4942A59AB8FF DF81023D3CE2DD19B0A1FCFB29A2F82DEB980B9EBC02EC4E324AB9C3B1A65E3A6769891F 6829B8EDC98ED7BE22683800BB4E7230BED269FA5D9E01FFB001C670D023137BF11ABA54 2869F6B15532E52E845C54D38E302307F3D2D95582423CD47D03416D6721FCFA5CE74E40 B9B49DE285C3F069D3EC2481D2146C232543C195F1D470EDE0340E9AF455A0BD26EAAEE9 1542B199AA609B3129ACFE85EA5FFE7C1B64CA49951449DA077E05BBC51DE454E38C66AE 765905A7F12484DD9897D4B45567F0B9D53E8A56EC781A4251CAB3620289AE0726B7FC98 A4B9E6945E7F9D2EDBB64390B60BEFC2EA5181506DCEA2692AA1FDA0BCD6283DAC1053F9 A8ABC2D21B7DEF2CB6DE423A2F1398F0CF522632C323519D592DE5127DAC2144F15C71F4 0AF1A10A925A7A1628598F2E02DF381D6592AF5666C08D58247A04A95771553B966E96A9 CC496B95670A2850AB62E74C958BE22154E3269B1F704547A33B49B4162BFDAA4A6E48D8 A6DFE641450918CAFF4730DA463A95642EC0B2D6BA0085CBC3E375FC14F74FBC1D4A8221 FA7BBC8A20648D7BB345DBD257EDE38361C3380872AF1F47C822ABFB1F3C234E09BE76DD 0A6F6C861C0D861D5444BE96E4A97AD221979495810E22C61189ECE3544EE871CF213F5B CE668C440B3917CE3B782A42A6EFEDF7D1171D89E1C738C6992A846DB1ED565B17B3BC5A E7A6B1AAB8AFE49B7384B735CFEC44EB31FF07E27D661800164762F1F13503455F83A4B0 E8ED280901897D6D0B07EE5E1CC2504432981756DD0B6AFC7DFAA4A461AE7BEBBF9672DE EDE1A546ADA5F3DA35F625A28F53E773793A989082A1A0894486D35B11BC57830B860871 22EAC2CACD5C68E14B58DE85EE4D44C0F8155246D1FC6F23233D65E5AF9E1FACA842F6AD 310E334B32EE793A05A9744568D38453D5E89683258F9A7B48E8711900DD484777DB4323 CD04B80079C897B5C507400048E67D81C7E6706CD656F019508364ED2C116A99B3D2B218 1907B82E0D7C046AF10D111EDD51C947739D09D0F34523AECBB1E828DF720E041FBE17F5 2588F5D4A0DBA76C0372AA93FA0452A97531A21F504A078CD31424E32356A7A93D38F41E 76FDB1A23FCDD738A074D6439F2A16DDC221BA5D1C237D17B7209C1BEAB43D627AB446B3 68496E9A032565B123DAA81ED6832DF523B38E8E9CB74659866267EA1F16D4597C9314AB D2FB2FD8B2822F43852952315536CB898D28979DC9ACE26D663FAF0231D5639414CC352B D43DD1CA23923D50DBA52E08392FDAC2058C127233F38CCD0203C49CF39F9035208577C2 22A44FDC797D5CE5B226E465464D72DB44733A6E1CE39663F2CC3ADA869A9E306BBC39D6 05F2EA8B571DB4B9F71F5709775B4F764FB1E15F3503C94DDEE2C23738A369D596DC0749 B42798907766A522D4684EAD710FC714C3F2955BE5E43DC608B60994ED9BA13ABB0F2BDC C9CA198AE9C06E7E8AA67228316896593E221F71C922F0FBA099C6516F9268A2ABAA2F47 606C82737DFF0E3CDAABE2627E9B1E149D085B424B30C7E745A625CC2BA56765158FF8EE C19E897D22030889D5B7B6CFFA230F41CC53B93B9FBEFF765514889896E9190D72516539 197783BD958B56FEAAC4BED61249F787E2DA8C6099882773AC2CE827B51263D97D8BD857 01365B7F4CA5C1E7946FD509120B6F0B4514677446D8FEB7E70ADEA728609FCA9B6F6A20 3BDF73481ED9456176D9ED1749B2BD82F59CDF576C85674B0297BC370EDF469762C9307C 804B4CDA7CB3DD1E8919D77AC2689CD9499E600678083CCCDCD27CF88E02C778B749134C 597965F4CDC5A4CF403D4BC39D6A6BBE143664B48D50CAFC99727C1F8DF44F6F53159EF0 AD60DE83184AC040C2AC09666B5328A5A7CC30CC766E5C4C483653389D82C3ABF11CC860 5E97727907549AE9FA6005F621B84CC28F66291D93BF0D2C5EE77A008136C0C61E0B5F27 EE1E3E1689D22408691F21FDE81AD1CC01C8D0B1A4497FD6A9700B95951F5D7D17CF5E33 9FA15D38C3C2AD7FB961B928CB8888D7DD645F25EA4EDDA03D4F04DF2CA94D5347670890 E5AFF433BB33064E53907499D43DEA114D8E6DAC8092C84F69404E0A27877E9009564821 70CBD2353D1310D007498EE147ECA9B2666AF258B2BBFFF72B1B6A5C47825D781718043C E32CAD1C38187A875129FA47CEE6C0F8618230C82D7470FF7E64F6B1B6E94DEEC74626C0 2F41172F440A8796A6C1C69B93B6B6951EC687DBB62CE44B461743D6611418310C69657A B99AD04742318485733B8549AB60EFEDEA32A82966DD3CFD13AD46870408C4921480908E 29DE3949E11A257C7FB0E12F2EC68108472B691363FFD7754B46BDF275C82A1B4B27F950 2297337B7D36A8C2A8910125DB0E1DA589A14D35083A15111E824B9C62C10FDF71EDB4A4 CF697EDA696DFA1A400215B4C0681A08974A3B2AEC251D90A95DD72138E708FD0C051A70 039437D317488D3988C833B5173887691C96F2260CBFCC0230B99539A0A7C192BE9BBD2F D05AB51FA0F8BCE0F5E35DE686996414354D938AA9EA211A16BBC7A4FA251150FAEA7C33 97F768D2C5A68D56C16B0CC427467E7FCF80F50B735A6DCE81C98C3F4F53FEF4366E966A CAB734603301886ED63C611C9C491C3D57FAED259AE8A2060BF6923EC0009859723D11C0 4601C549D4B1F064ADC5FC9329D3B65FC28C4EE654D724C15F3F90114EBB19FB103C9274 4DF04209AE5D4F78D5AE8328EB8D09FE72EBAC0ADC859CDFD9CE5AFD2CE419E0F5E3835C AA6C7EA65330D798DB7E6FD3B5C90985986D0CFB30483D43AD99496306ADCBF383AC0D9D B881992150FD6B3C931784025827FFE6FD1666B23130E4ACB8B915F0FE544F932BA4A746 06D8AB5C63A7215193B6CC7004BF6D3DA4D47D657022906E4591B7322597BCBF19DA0BE3 373FB7D7A8C226C415E1BB67070E05DB2E312676D0C8A5C93ADB5F08CBD81E03BBEA39BC EF48EF1375A31AE74D53FF65C4F9DE4FC62C31D572F69977188E2E4F2029248EB4FD4350 CD93509481119A4987651BAD26E70E0C3C327133775C08C5F96FEFA9A8E9ECFBCC548034 3400048C51657D03F674DB9422F89BF68A17D28D5E17976A9CC46D45EAA26B8608D10904 9BD9208D342280FEBEF87B8AC380FBE2AABD527C1AA24B190CCE60488180A4CF5C974BAD 07C887707E2BF56B9F6EE6CD30F3AC9B3C9C9AF57273FD6A1A1A4C41710FE8A6CDAE524F C4C522B52784F068C78F5CC88C97A620A3E3F2C236D01ADB6767D6157EB66D6E20130532 66A386770027146F3BC09E0ECFC09C72783EBE2FA2DC0D4331E960421946264EE95BFBCC 815DDF820E8836D445E35CF77904DE2F74FDC5C8EB4CDD3137247428E715D4AA6A4B4239 6E7635B64FDB9E288AC6F8DC7AB5AEBB0073F917B5767F9B605232E12ABE0585B36840CB 381D3A8F5D223383DFD7B04B8F61ADCB3CBCC22FA450A1B92D4E84177DC0B84746694F54 BC7A5E55283619D48C6040C63458D2FBCD0866E1007B6BB8FFECDD70ED3178447CF9B99A F630C2CA358C412515859B5C75CB8BE5B390351B8E523915921DC843241F19240DB614CD 491AC6340CB3720FAB1A878B2330071E7BF60BAC938271FD4BD0B9C8E5DEEDEE10ACC8A7 464876E645402CAC6438758F145E75283CA6ED4DCFE8C0CB96A411E9237BA1593403D964 7D5F2EA9CDFA1872336C5D12AC6591BEBDBB2D6FE3B74E09B06C838EEEBA4982034F8373 262777C5D6FB6ACF75161AE782FF2CA88FA40D7DF3CD1B62AC368392FD9A6795AC931280 108391D1F9C571BAF7243DBFA66E65F995A5FAFC63AB3CEA2CD819E90B40CA900F54AB18 E3DD7BE0BF4A6C9662E6E7780E83366228AA431C84E59D3BD8CCEEA0EE8EE3409449817D 2FFC8BC04F0A2BB70153F190D2C3309DDFC3B2045AE1AD7F3623B29A614EA3C6DC8FE9B5 89919FB0D786067A682209DB52947FF25CEEA7C66BF0F960F025079A408C34EEE30C2A88 F3F8A81F469995D50FC9BF6CC63D3E6CABB1E196C2658966F21488EE117C038C8CD3AF73 85241C59C0FE249FE61CA93F23ACBC6E408399A991F7B87AB9780FF89157F312523BFF96 F7BAD90ADDCCF00C28B21A448E4D91A5053F140F972E944213A77A77E228DBD8330E31EA 216711C3DB022D0BD7F9A83BCA4D3C5526F26F4BFB18922026E88E1C5F63ED8705C50190 C16D77EA65284D0110F39246CD86E4AE4E25094B304204ACE21690B21EEF7BE84B9F836C 64156B88D26A6151EBF4E934682FFB76D8D6B92F88EC6F516254A518182BAAD47E89F568 C1D22038DDB2CEF0A7B76DD35604472D0B563053CBFF1083F44A3DE7A836435F4B90F29D BCCD1C42017EEF1F0699EF691ADBC0B9BA2105FB127568058266278C92287E94B9C02AC6 7EFB1CE848AEDE0D4E96D5B917DF6C2575F26160C21734A80F17EBFD49DAB030063D4DD6 D8C2A0A8923F2F7079DEC7705256AD2251FC5F524E658D804C18312EF7C2C8813B773A5E 3F354A823A96C102DD4AB4AF0F5E8BBA58DEADF7DD3A8266D187760156B780FF4A020921 D9104CA96377D126CDC12B0B528D9277672AC431DCD689CF22F41B75AEDFCCD24A9A09F1 A7B0FFF8DE3370DDDCCF65903B9F7B2484722B2D64925E72263EF9EF237E56921FA07C3B 49795CC355BA5B99FA503B7EA37AABC706BEE0BB1492163AE21F528530302B19EE6974A3 4EE6C5BFC1A4F7379B5680391F16CCF0B8CCD1228DC4BF8AEAD070AD8EB51C0B4834EA45 439D2329A6BEDD53FA30CCFF0A8B6466D97F815992D5697A3CF5881D23D4E7363B7A79B1 03C040FDB599FA0D19B35AEE7EE512AA827A8D0E248F5C09C30E43F9A1693D55F693723A 2758BC7A50470A013441679F6FE81CBBC224FE4E2DC5E410CB9FFB34B18E71C67DCDFD6E 965F2374FD0D60E5B815E46B093BBB7C4BF7568CB3D4DB96DCB3D49F4CD711E07BC3D753 887C179D2DCCE3D2F83E83D790302753FCD43DF4B1D4E44F8635A93EBAA2339C72F1B21F 962AB7D2C11D14D3CA54ECCBCB4255B3C57BE5EFB47584E6487E2D00BF2E1F3CB5109C9D 7B96F8484EB6F375F6E1407F6A448FFB4792A2C02632D0117DA2E2065C48BD3D615E3459 569D11A4CAA02A2B6C51BCDAD23C5C5F0C9171160BBA59960DB752B0705A6A162CE93E56 3944489DE3A8BFE79CC1BC8D1E81F84C71361A27D04A5F37464D64D15618B74069EBFABD 7348660BE76102279DF5487A574BA76DF75FAE3D9B052FD087F0D3CEC141F063A338B91B CFDAE8DE196294FE4B2D7C638243ED81C05F9A5DD5F745F49B04485073CB66934CE608F1 FAA072252BA1D1073C478EA6398732E3C24ADD8D10765B583B4AE05076E3DF7101C74168 E7C27190EAF0B1CD1B5A93F51AC17D64F9D909BCFE323478C09C61E7CF00A81A9502DDFC E85EAE90F1BBA79002E90F29D344465A8A5C1290F22BF9B73CEFEE5A35306E61D331E8AF CDC76706A77E446EE125650C062594204BF33DC6C8842D112AE1F50F889541442EB19684 EED1477830B110D4894876F41CDF0B5E69BB35EAC9073C6C5258E86598A27E4C54CE90BA 5A1E30CEA754C1ACD8758B97DBF03473CFD47FAFE8B8419738C4351D02DBD83596D3DB21 B2BDF9159AE4DE968DC4CB61A91C0DE5936EA49E5C2A03DED77EFBBD5A22EC52BF3A932B 79E61F474B45753837BE7DB782D3A57DE11DB91C55B870197E55511BA5450E11076DD3CF B824F686F1E4585CAE9253A431363534FB09BB5BB2A8DAA07D18C3385A236984310A72E1 EA6F30137C9280741551D3C1E7D59D83169FE0DE7C8E96C517B0843988C0E018C8B39A1F E65DAD5F1FD269021DE4402E969790C95FDA979A16C133286CBE731E3755011C3212492A 284A2322DF40B99F8698BF04B69EEC0133527E1E745CB4F50792BDAEFF1C9421D9BC9B3C 8FE3F1E0CFD70076C3FE24ED1898A212D07168D40AD2B6670B54DB1BA36009C44018C5E1 EA9CF72FCF709BC2483873914007BE0FD219089BE1328FCCABDE53C2B87E5282374C054B BFAECDEA8577953B641B7E1D0C95A336055396DA385B7924E29CE91714F0DA3486F410C2 FA3DF1DD7FF0C1D2F6C3C40E2227DE3A1029D41E47C1115BD66EFFCBB6198499FB9B1963 688B969E4681DBD531A188E4F2879EFE2A8CDC5B70217F1F67130FC419E807C5B8623CB3 C1331D8144A1F9BDAD370C5A81E3A147A0C230272461AC734F7C035BC67AE40F40062F34 A9793A62B283759E9681E6B5584F594E12E763978E6739573F5C31070B37659079C5AAED 14FC522334F82729FEC168454EC568E1C4683D85898B09093118907F6077D952975ADE51 A09E9A92BE7648EDF47DDA4AE37C6A9F9DB993DAAB064EC5375FA075AF3629EC75CD4A03 EACDFE12564ED5EED663C5F20EEA16B8E9739DD22CE25B32C729E214E15FB0B02F3A0201 27C563305111E2C9D6670649A9F229CA0AD9B26FF05D88F0210D09191F91EB2186939C86 96682431EC0C10CF6793CFB16ED2AFE823C7A5795992D021D957305359A5E7B6E6A10C52 14D35EACB7CCC8899EF52F19B8D94344DF3CB8F7F2377B5712F2524BD8A01E6C38253DB6 F8FBEBF2421D8FF09862721A71F6E86439F757742112E15DC8E7A1CD9E31B3C6E187A46B 997658A644F51115023159B911D617624CCFC39547E3B806435F326A9B8FD886ED8DB599 22D92DFFA0A800898F02195A3853FF2B1CC9BB0C08D234374F202E989071CE362435014C EBE0A7C82ACD0268AAA5DB7A9EE1E5B00171EAD1D4AE26B77B811AEA41CB17DCDB96D863 09EDEE49FD85A4C50FC14339B795E59A8B4540ED00B95940B73455D2FE1F28A7919BB04A 3D40F766A0C6DF8C342198C11B9D3A8518902189D76EE781ED2AA39F34519E07338EC1F4 9EA04EB36D5136138057D9966C03303A08A73C266C0470E90528AADB2982635921B04FF7 8AF6E05C3C4B56F0539268253C205276C2CB611B55661221D160060E610BEA97D66DACF1 64B4173F42A756FA4DD8107E48A3BD77BF733F261C067939CCCC785E867CBE41944A5095 2069AF05CD761B9F23DD7B26629DE079A5CB96257C5E358481F3695CA119C338DD52FAB6 303503426FE579418417D7701F513C1D0A564F19A51DB333DF1815F56B066351B6C5A9C1 088F03CF354C39FDC6BD16BB0E5071C258F730934680080C723DDB368E48A3CACC26EBCD B6AB9F6999780AF8B0FAE876084FA192F6AB83B539E647B62BEC443DDAFFE68F3E51A17F 4925AE9C6299BEFE02784F988611D71ABB1C3F6CBD45632E5939126FD94E33A10855D1A4 E55C8004FF6A5C2465A0D5FF59432E36F18235AEF1B1F258774C655E25A570258E8244FE BADE3FBAE70BBC0C075558FF758FBD858FE31B2BDA529EE66B315BACDF773D59A97489B7 49D12AB4555838013C8432956BB0BC852BA82F504AA2EB826FAEBD2EFDAC86956CE46171 FC0EC3725BE2AB15A86FD4AEA9559A6E408FC580EA7F12EDC638AC26AFFA2546EA041978 30236B70EC1D1BACBF57CBBF1B84AED1CFDF8AD532395F54FD5BA293E516CC32028ADC00 A3515E3DEA0322AEEEBF4AFE6B32C326C2642B8871AEA11D2D421D0F011C25DAAEE9CD28 6F4273C099194908F9753F3F577C5435E31E660E5A12B953661BECAC4F42B37BE60C5277 FA169D5E770B7B92BB30DBFD5BF3FA83D76D5A1136806F8F4C4345F86E3D14570BEFC6F9 6C652DAE4BDD772211291AEDCA7C9DDD71C7A71179D34FEC726C154140682A875C2F4028 D2DF21561281434272577A39A339245E3F1B940724CADC9BE66C50AA01A6F5A8635A025E 983E4D1265E5FB11FD46E729007DE299B4462F762FC3DD84042CAFB58EE68EA75F1C393D 97D0B0764B62BDEBE7E4D8CEFD1122C55E68129F4E3CD793C5BBF3DABFCC79377D084689 6D3ADB03680AE72D50EEA760F2FB4472E8489B3E6127BE8204E359A6CBA21EF8DBA555D1 B8A036D2366C1C6213DE21A026B18AEF28825F839AF7CFBACC7F0AA502E3BC2ACD057AA5 ADFC51D627710AE976CC22AB159B50B07717B8E1EBA0EF00A15093D3C89A0287979EF093 365AF1C62EAEED0AED0A821B6937605D7B34FBFEA573BEFBED06D94B2A5C00AF0E30AAD7 71D873158E5355A086F732A60893D57CAA1E6F43F13DF56111DA5A45800C3DA55339723A 5B5AE15832DDE946FDCAEBEC6AD9A0BC299172D4F278CF74EE0ACDD387C17B735FCBF6A6 8058373ACA17D91C58594B91F31AB92300C3E8270EBFAFFF4345BE5C76C65EC5429290B7 417416809380889196DA88DE701FB1C84045247827120F2D2E44F04520A66E520D570D69 DB3F47CF371B92FBAC9808657D0B5F4DA261BB00DC48D0E6305A4525D4D7D4004F875756 C66EAD4002E1EB161A8EC7F0017F83DD7BE92DA5DAC93DA0BB9DB917EE0CFBB2E5B3FEBF 72CE6D6BF5F77DE717CF4335356FAEA9EBD16D95C4D3C546D8C22A6087BB6E780CEC3F06 D75FF0EB8CEE59EA907D533F9C5F60F328678901FF7C4A826D62EFBDAC878C869AED7DB0 4540B756BD3A791A9BB972CA8F7D5A78D48AE44C7E3C419339C6A9BF3D3CF621FC59BEC9 E69DCF6E5FDFC2B8E2A0EE6A98011E1A18E93A8F0D99DA9FCD881A030D6A870D97B2FB42 221A036BA89E366F6609B2E48D4F8FD72E2651B7D94F602B05AE825324BC37BE465ABDC4 E802F6041C582DB86BF5FF28EAAC80AEFA4965F1F447AABFE5B67D066CB3720E1977D39B 1F1F9F4488D278873F1461CBAAF211EEE55FF0A67D9EFE7A9B61BC61E9D2B47603993CC2 AA56537D789FA8F0B84C7BB50F39AECE185BEE67C851BC46EF0B61A8108144D874D40534 AF2F355CD0C0C1D527F5994D45C6142FBDAF479C093B3EB133B3ADDEA3A02EE364D3CE51 44EFA710B63274F44124454BF33749AB75C2D4FAF2448F030105592D9BA594425DCEC342 B9B5B52B1A01204F7971464DD8E4167B75993E117D19E3232F27507E5A708C74B3A083BF 3566F884D70D51CFC825EAA29386F7DBD49DDF0474D80C85FA12250680D36533581AA6C4 04742BE5AD71EBD11E8CE2B77FAEAAE71DE99C1170F886CBEA156FF3D43020992430FAF9 D01DA48390DD9FEDA8CEC4627F5B974A027EEBB461A8B98450391450056A4FE7FA922573 EF23D10D6D57365CA2A6AC6F6BBDD398F7C9A0F12D57CA09FD4DB291A1353F1AB3A52A68 CE7BDF1A854CAC8D40A74399AB9C7DA04813D4A44CBD007D99F5B5C82E243FE2991147D1 58AE1F240E6EAC7444C30D152EDBD801DBED9BB5893E81EC049F15281D640BD95F64430F 17E2D54153067D49BBC4904CFB3AB90570717110FF314426C663ED04349740C2EDFD8AF0 4A623A7155A8793FFF91734FE5BC7A30E4D109109FA34C93EB61C6B2B626192F67CE6E70 FC495CF35EB69606028EDAD65C8DB064B1856F15CED9BFF7C9537391123F9E5836A05C5A 035110736E040ACB15076E63AD8D98892316E20BE68D71C5BB962910021C32BF1B749701 3B6FD9D09AE3A51A67D4604652AB70D01E35C2C2614BBE206093353C208E0C90AF3EA900 7403E2803195DFAA23AFFB16E1ADC2AE692A35272A33EAD8F26BCD43302C382619D74AFD DFC0F91FD57B03AB7657F92F969A8CE90C3CC60DDA9DA9D118C8AE20A5B4E14DAF97E1EC B68BFD2EDCFB6D35BFEB09FC337A834A4952854C9DD4F91CF5C77582A913BF99054C09E0 1858860040C3499115A62AB695E9638279DEB16307FADA168B4AA8658A9CB9CDB1F21A83 B2E2558609C305EA01B09FD0C504C5D7B2B284713655CB10C2552F0AE494804A1688D48F C564A650CEB0FDA585AB0FDE2130DBC45873C808FC27EB7D6A90E29D543AAA879D62E935 39018366FEA38916DA21DE79B3E788BE7063136B9783B1A5A2B08E9168982F78A1BA0C4F FE8E8572C3AA45CFAD05074044F16F55F7E0D68520A65CB023761FD3A928020929E57D31 35E3696D15813CCFE75674A98389684FFFBA94DA12FB8AFD67EB49B5DA3EADF123275D27 E68F59D1910A906BF75A2A719DF560519849ABEC20A281363A7ED6C248720CAB1ED30752 90ECCB2F81BBE690549635D8E6B574356C22F90E78AB6651BF571AA547F2E3C0349B9F32 5ACAE864AABEDCA302E7FCDE838F91B7A2A7E6116C2096FC101FF1F1B8CA02CC02A48C32 9193BBA247E9A335DD60A7CC294BFB5E31EF2281831AD23270FD44B37C0C714B8FC35C43 AFE61DC82EB59A0A1219CB937FABB6F88931A4127E3D5F46579135CA1FF00BCFAEF52E27 B3B7862ED020A735F13D3DBE78C467D651656E85BD2524EA61DF7B14D442CFD04A8A90AE BFA396883067510F07710890EA37263E53675494B71B176E93DDE35B2765113051FA476F B72984EB13F6DBB892E47198624C1024802AFA5D2956EFE4C7E164F6E47415C4E257C5C6 70204B85A1468AC9053C2F1B7D9185CB1F24A94D3971C4A7FF05414F6835BAA1AC599D80 44B0ECE168EC4F16964EDEC272D7E31986038439709B1EE7C1242A7499750CA42B90F20E 4E1CF1F992DB60C1B4FFC8BF659F8DD925A475DDBE92636239FBC9A51DCD42D34FD32558 37CD2F902EC00969EFE2CE39A5BFA2DBBF135E9EBC9994B7D17366A426D51EDDDAB05866 AB0F1B087E315E58B25A6E5F6C66DCEE90BB83EDE77CB7EF91298C8D1D4A3C7B1C6696E2 42DA8FDE4FEC3D048EC68F2EEEDA1B2BDC88F3B69A2F611AE5924868A6EF40214E867D0D 85EB0C0B938E16B904D3BD7115FE182CDC7E2F6CE4B35591F809CFA717A568095FEC9C7A 7F90B4CD50DA2A09CB79F559500326D2AE4C893F1C5AEFFDCDAE1D076C57BA188657C266 08E012A459A4F504E338E32024E3561910B6B147BF749733D655D4E805D72838E715DA04 AE4BD00EF33FBCBA7C22EDE889E73EC1C2A39A4FF2073D1F104CC1011D1C89CA72D725CA 0E04A2F2C6D181B2AB1F4B6D63F6B0D8E5A1D0EA24F2EEF340A586B8731DD601DE410FE8 A4B6370EB0261FAE2B7F3D731116CBD2CE61D540260B70CCB9A35F85D8DE36 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Courier-Oblique.pfa0100664000212600000240000025364207477306250016577 0ustar mikeuser%!PS-AdobeFont-1.0: Courier-Oblique 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Courier Oblique) readonly def /FamilyName (Courier) readonly def /Weight (Regular) readonly def /ItalicAngle -12.0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Courier-Oblique def /PaintType 0 def /WMode 0 def /FontBBox {-61 -237 774 811} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020947 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6a208511c6d0c255b9a5bb2fdedb4d399c6cf194ffac236883767c0f68 f4ef84ee696b677de704ec3b097384f2e673a1f51692b7b260693738c211 9f7d90ffdb21eb715fd5b8134fc87dba320ee54c2cec6a4d6bb350555eaf f2ec4f84365ccc0802dbb3bd0e3f0d9f858647dd637725c2caf9557fdf84 2a0da6a0ca0f1b442ef8ee6cbf2b03858468a466ac5883cbbd3815b28334 3b39205803c02c917d06825c09e2bb14609fa32c28d720c0e14a4b12d4f1 25ff6281ff324da33a56fc49987ac7d3aa206540f8127273ffe9a3dacffe 2b1c269d3db9a811578ac7d532c2efc18376f473fbb2b32ef642b19cdec1 d6de83643723e3c6dfc87f97a7007b6081894bbc45c955b7001eb36211b2 6ad7a3d07459cfb33f9c54a40a360cb802fd202c8e93d4db888b325ce246 d02d1220abf55ce646dfb45f07cb848406e470362f80ce4c02d98dd84518 9877732744cc16c7f5669f77ef096ea55aff98aa103eeaefb971731ebf37 82e6ab725d4e9e35b2968689e8007c038cf25b6ae69451a4731e79ac22bd 268f56942a233e52d71873e83e00a1874e04d3b22e72fb2d0671af81c698 53c389b51f4a257373aebf4de2da1e4da5e2ca88941f81eae0e32d982064 c8afdd7a9a600d56d73605b9463c6240606b3361baf22af74ef89ac804a5 793bd512da2d13f4bb1b73efca1e621ed2a65d665aad0ad228b3b7e3d90d bdb6061e172b686e92355a7c7459d83199040a368b5697ddc3b81ddad341 6ff4405e1096b1240edc18a0e9985ca55a0d697972bb11e9f1bc30765d67 75bb68c69704be200eef4e11b78addb6229d8fa49a6b1525adadf17122c0 fff51a08aa7aed158724ac4352ebb91ed0c157e24281bdc1fd610195f495 e87062a8c38e0d046da4067ee16e81bc5f87e583315b973184e474064482 9b2a52e0d37e249bab31988b906f891ac904d1bb8901f0673aece60acede 97b8db7935c6488ade8dfd898027424aa85a11a3da494498b084133b8570 17a6d507d70a3421235486eb3cf7613c59139fd4dcb92eadc60bb6225d9c d0599779217bdaf4813a453989b2e56903f4dbb83d83df4837c86bb4c3d3 ccf98f07a23ebbf7ab5687c3e1e6792e40f92a7a466de352294064537505 eef3f9c308c9eb94506db02cfae289f10005a6e42d2dce43731a7ae36856 4b2983038dad6987f67062199018395bc0fcaf287a2b040c71f7325fa1e9 a9808979b2fef19096b98b8a0a728eb98f2ba3d33b49e3c20be992822c7a 1bcca5b4e4d1099d456d8d7d83c57ecba0ff21428024f7572a1470317cb8 cbc8679a974e13d88c681338c68c9ac9557f97784f4e1c8c2e61f26023ac f46232cbbdf3c0bcc5583b935fe9fa09a562129a8927ae73988db0f7e733 c6561ca7c9716dca9b88208a715166f2fae6d5eff289a9b2edce813403a4 16f243f1b57eede7d81e10c2da4065a3082bc92a38b2457368eec9c3c172 96cb09819e9e642d7365f9a6ef430fc7dd611ea5fdbdedfa72634ab599eb 666a5dc178b0a0bd1fab042792115ef3b6222c1241dce36cb38b738f68b1 b3cb489fed9e53315553f3c5c3bbce40451e47b7ea53fd3d3aba6ce0ad22 5daee734bdfa3bf1d81c1b42c6d856a05d0924e03f7627c5eb24d7fbea3b d85716207f961b56803dbe046e81ed5fdc378f9ca52c14fd8544ca7c5392 01bee06487ebdc30ff3b28e8264ec7fd5da7e08065b0a9147344ce28da51 82335875e9f8b2347a44e33dfaa167232a5c3e69e8c5b58b7c7216537827 c936f5741b87fc68753eb0d4a466961d0050db59df3195bd3379f5647f8c fed35da952d7cf2ded45eb442dbfe992711d22eb228bddf36b8d7dba2706 2d60d2271ea8e8412f4290b58f5be26ff06f0559872f9de4deaaba015eab 4904ba1f509f6d517c6e897312ddd571d769bc474fd378af4360e8b1f103 aa75f48721b9e0ba589319e15d74ac0b03d730c3ef708c7c504787483f13 4ea6297097b46d2680ff8aa50b7a255563c88d594b912f5574564a137146 3674793e4834af11d14c7991e7fdb3a6abf8529e1a4f10cae79c60d37429 579093dbd041ecaf03824df9c007e96f45595a524b27ef8774a83aeebd3a 7134ab4435c80944deff5c1cba921b0a41b9651968581da4834b3c0e6d4d e13c1e792fceed26a72adc4d9e3903661d8803ddb58eb2b929ce31fc9f50 a694116b00ac9f3eef53ffdb1aca3394bf11161038f39917b022394c75a0 d467d64b89a44e5505ded7d9c6b8ba6ba098f140c9c00e09200eb4828356 a2d6be9ec1d5524b09c06d9c6fcb5e2808050a339b5e5fd4dd6c2035a48f e9674520901edcad107f67ac8c8e508e6003011978d77ed225f361bc0f86 a98b6120eeafb73f7377db1e7213e02d12c330f5492511b4dde08558d75d 5b8aa2d56a3111dccd257ee96e3446ef1c76f000c8916c4ce261425ed9d1 5b58ced128daa6c1300466e7b152bcfb5e6faab2519b8a98f26b29f98133 af886a0aa7e586a090bda1dc6120dbb5640885c609a8bdadeefe5de0da5b 75a8a29e92515e86e7e66bb29581e5aff8cb6551d8d1103df60d558e7987 e6f56126a13db2c9a04886c655064e68a0a20d1b7de24dad22bbfee1b7c3 c208d4fd6a58de78d6a0a6126efdee3b1a9713dee94069a9f0a2b392a2f3 91c4c75327803b53f252cc9ef0323f84929ba4716c50385681ff5b4ed549 29821594f9026b7c1297941b178c3f8a704ce09760533dbc6cf4b18afbcb ad039ecb2ebdc7838a9410e7b227924bed7123944675a5dbca388b710f8a f6048b03dfb713f881ea0f3b191a5cd989ea150b979059c8aade40385581 5d8f7980ce6288f47eaa37c1097d33f13776f08779063c5217d7408d9835 aacbe5c071ea40c9ae6df685f4a9827b828815d8f3a672e73a418e5cb156 84eb6c6fe0998a386e124d76620446907f993be16fe5afcec681f585601e 18182edcfd3024062a3082af97e803c47d32229d0a24596cf7e03f18229f a631175699e2f0d60fc09c4f1954c5d12d03bfb4395f0e5eb6c687708380 7d91d93ca4177a6b5a8d2aa500131fcb670e711873f8a3c77575ec93a3ac ba37ea117db268cf10d04ad0f079484db124f6dc14a50ad3b0294f7157d0 837d8f9a6060fbcb385606066401708c041594e0396a0be4b8b66fea141c ce4bd29366a986adb98d9a6935c49c57f8cd415e93ff8ae0df75e463e02a ac68df064c1b789b685f84e15e512404e065a39e9e8f5568a7d97671ae16 02605fc7e4933975189837586fb1a55007fbb0e91382a629277c36a190bc 85af49ef3f0f38d4add2b5dee09916b79690ec83473c63e92cf617617a66 df472a49641da10654e3ad3880d060b02a4a6c75b51e4e9917a2b6d8efda 12d59de5a8e222dc7e82f02f23a9d3dbf637154f719b14114dbb102be5eb 76b441d7e9990ef6420c2e80942c8aed5a1d0b19bce115b5929ab9e145f1 496753dd6b1798324f5ec1d0c7f26fc3045d7bb46a14110c99ba07a45ec1 6002cb754c0bae7a1a88eb387bb345fa70b0a38ab4d532c2de49274d4f86 f2582728a2cc54b4c09d26c0cdeb8fee6a42885c6207d74953cfcc583ed8 2dd7c0f29d35bdae5bb251b8a2d4b1dc97e2264dce035e359dfbadde84f7 37ea6a59c23d1a64d963e635769233624f7682ea34636b595ccd064aaff3 887d916867475731bfcbf7f96d5e5e1fbe6aabf454c2f504ea4e8eb38291 1560195295c87793d5f7739ad7ec7176e126413cd4d1058ebd7d6ebee14b b94a1ecf28b686411d91e07373e891f78c4c0a05d2e8d90a8ae2614f7fc2 63a762d0f43485473a54c31726f8547701d4a38d20565ed1707847aed9c8 05780f062b847e668e15565cba07a72b0ba99f03fb57d26fa26ff579c30e ed0aab6fec1b5dbea81aa88f16f0c9be869505be18c1cb79657d91d6706e 2a3f0be9920655b93ebbae2b4d0b5df6be622c951f2cfa42aedbf7ae649e 2150fe87cdbf5c2685ef36051080bf39d864573a45ae2648ad97662b1f69 787031b9bc43511fb84155ecdc3d91e2475d072bde6a5207acea1e0d2ecb 1da8a1bc4beec335a5c7102963e84b97be741c4458acc3d72a7e53b1f08c 955f33edc3a0dc3e7308270c0f7ff814b111459985733c62e8863625a551 837952f3cbf32adcfd9f345e14b585b23ecc440775310654daf7f41e56ff 45f89701292019a94bf30eb2d65e14b1a1d6bf89d4cc43187adadf3f6e03 a90ed01e5d876bd3aa56e5ee84dbaa4dad9824de9984bd45af96fb8a56c0 10b3c3a3c6139d58e9d69d9109db18561b55ead6452497840b9ae90c749c 155b6329716f0152a7ad52dbd0b8a25b9995e1416681f38fdbdfa443879b 5c4c25aa29e0dcc07de8bb161c36d76ef286ec88d57c74bf44dbcb4feff7 71d3bd82c8f4e233357c48e516efe3db9e60ef168e2c45b54651df9a5acb 5f1790f7929bcb16ce5e9f6a43919ad287dbc8e12d9f9e97e5dbaa592879 1a5a02d39d259f3ce273a870906a643cc18d86e23f115d2a35de6926053d 8c84b940b362e7db183c4905060316b269223dad309eb5ac96deba757bea 45fa3100f77f4765334edf3d659e09bd1a5552da492be9174dd406f8353a 059ecfee3709422940a8c369919ee1f22f7c02412c995fe93dc4559d32a3 155dd22d3526d89b16d9addc30cb7ada6e52d62c5f2dfd142d4d7b6e0666 71ebad08f54917e317041f410cfd8a3243f8b39459c418b7b7c6494551c6 f6753a94072d09e0d812351d62916383c6e061f35ed864923002007e6260 89772d269b298dca2cc1f25d9be43fd8ad62d554c16afeb7ef6e5dda66d0 5a810f003cddcfd2c02fff02bb61344968091f67d3862c1499409ecca137 b9a2a9be314995b818accdae27ed4ad583be29dde4e8c2400c5f8152c857 09ad2a4737bac768feb70ce81a92c9657dddb2d0bcf9169d272a063c75c1 50addfcbc2f5f2503de3d13231aa8cfb396db38e80197a605f6bc20efa1e de40cf424cf221218d51beace64a3dc88377e4f3efe43db4f4fc0803bf61 764104cff0b618c9031198b094e20b0facfb94240b438b67ba298e31d3f4 e31fd190e48bfce27b1be29d36e765e7d295e96edce09094fac43b87e294 818fde9363fc7dc5ea36a1497ee25762d02dfa00a9be53f87abe62e52ed6 f59818fdfca643042ec13d670ded1980413950ee43372d31ae2694b83dda 42e1fbb049f7e7b7e69c93ffa3195a2462423dd2c022e5141783ffa07e19 2aebc5070f08b23aec9142eed56da74f93bdb50478da55ddd0a9987fea13 1e4cca0efc51064e4b37632728261369c3fedaca100f1aa78fb718ece7a9 f56296c5fb43781e63f36b0e1d34bb748eff35e1953941f94d1a9b0fa474 fd68b47183f2ac53a63f9f1d30b9b89c5fe54c3765b43db403d57994701c 133e42b950d9bb1ca202f15b5e590ee75598fae43d5cf1546572770bba9a 6373f100cdc61db4e5ebbe0a93e0e51c86005e333f69110b1c8e492f2bf2 52cadd5b73e7d3ebb53e759353f1ef3c9b8b39c230d13ab7158a5d92ee4c 452f81f6dfc18803280aa023832fd0dcb482ce5af615c952bc3f7e58f641 7d69775fc7c0d5b405aac632857736acf32b2ee0f2a2c0f3b3cad483c614 505be94706322f2a2830fc5ab592907d0291ed1873377e7a6158140c2cdb 1b0e27eec9ca50176102200992308045ccb5a169b61ea0546778b8d28073 7319046716604945a21f2a1cb9e15e3a5db31e0fb5a3b0afdfdf6f3424b7 536d473f9756ca3694dee4301fb1ab1ae47128f8d2b461c051c1b999dbb0 10e78dd13afcbba6f7d5226d540527f17881a18f551b3eef76a7e28b4fdd 879381a2217ef2ff9f9982e9ea70ad2003b862d7c36d57c5ff9fbeaab560 40fee973efc3b34d83191960010110ba10694c17b7635ae03cc1cd087c0b 05522a7a791f0ca34022a3f5860b536d9551bdfdbf560a07f63aa4e68740 7e5e48584e689591f1b52671213e430a708c06a34d2e1d51cfa6b328a122 007c81b5eb263b967746961bcfc8772f8502dd95898724abf369b0877f33 13a167f3f714023c229c5757d4d46fcd9b4afecd093dcabe52b78132ce9a b6225c9a344c4bf8d96f2c50c4272cb9aa0d606f013b2642f8c880e08ea2 822c8cf5097d2cdb64932fe195abd5fdf36d3be123aedd8ba2f82a8a628d be3ed6129dc0fdc4be50d5574ae4fecc65062e70f4703bfecb35eade1962 94fe173ea57938679dba6d15448ff44c0d1a903b202439da93c0b0e61211 0068f8079219aa89f435e44d0464f54833beb338670bd820d941df4b31f5 1b895bedf833f9c43cb7616db80f988ce72fd3c12c7d49f740cf85b4766c 0ed398eb837695d102dec16e24b7475a0f5dde88fbf2d6b94f126417c811 e8362b9ccc52d8891c13c10937aacc228d621d4712cb9de0bab60ede2a97 e9292be04e42e6d3425594df56931a61e1f961726af6e6891d63b240e6e7 9e5bf30c052091d681ba1102409874cfd8edc3ee2be331676e31ac00f807 91d1019bb789ca4f5907f4823b002af3581448c352bb67d80fdffcd1c5be ef60523330aa2c0456008f62deb55e69ac2f86369fab1ecc90d2487954e6 1117a90d9269a65dfbdf297ebd29c3dd1f62755f8f289c42a534f5965068 5f8576ea2fc5d26b99b8e3dcd3f1feec73131000f99aa9868ea9bac0b56d ae2cf46da6cc1d18c0ab8d77becff7b89992175cba2e22779c13db9df53f f5b1c8fe95e164997d94202c37175e562c8622989b075cdcde173452c064 274354d5db8f7d5a78d48ad4a103b9e47500d08edc7c51c1f3cfa7f43c36 86a3c24a7eb5018b0f419961564f87e212ce0a0741ac68d6822c7ab9fd68 85f5d0b2ac249cb7f50e2353cc4b0a6a24562f564fbbc7090c3fdf1284ab 0ec615e0b3fbe132f31570c8a65c814f93910aa4bb80d516cb70d2e1d119 69238e6f022d628fa2f33a0a15c4ef0ce7f753df80a8ad9494885a1b9ada e6c38ac9da6fb0a61696ad3a502630252ad7b574c841117d34bd20bd6581 217d977b35f5d04e02b933e1e84f5c090f6615af484d63265d28517ba74b ea8876fda332a84aea12e6cd82b94ae10a778cd3a216abc08495ef319f06 ad6ff8add237d911f846a514fdbfaa8a1ec8e0aa9f80f11f1ce615519a4b 044f3d1cf1a17d7f3d2174222a5ffa8b39f20197ff6caf250b6adbdbf519 1c525070c8d38220fb501c223f493d80f498621a02ebccd6efe914f16b2a 435d60c0a1a453e288a53d818fe1edca7d55a26a017f2ee47a816e90d6c3 fcdf0035eea307dfb06d2bcce43458a67354a4edb6e5c57233de4fbe41ed 07ee5ec77a5dfadc4032138da9e1b74428cad02a913e40152f8063a774d4 fdd4070e4b8a6c089f199af7c529c277e902195db760d81ec655dffd1bb2 83f3c5aa8bb58f2476bc797b2892e94414abbe96d4db93e280cf7de23eb8 52e7ca954d6682a6f1a4be0507884c2a05ac863d2ba73f3b54668397b6c5 4dc2f4183130ab414875f3c3d8792bf7e5fc4d228df87748bf0b14178db7 e3ffb7891d700a1e9520d778b095da80e4801f53442d5c073edeb706a5db 8466ffe7e701aba9c364a37169f585c883a83713a61c9c3bd9336a667ea4 e3db5f4df6bc6a552be8d3ef093639ec67e5ff718959f9902477f5aa894e d2d1cd312ed82ee417d95c49c96671b23fb0e1738e892adffe62ec1c3d4c beb6cd089c98de8d247df7ed17dfa2959d3662f105e8386d75ad30848053 6959f8e6cf8f2c6937b09f2e8137c811327d6b165abe46c51834a955fe83 06d10033f8c2a34667f13a8ba831ccf52c7a21c13db92f3e77b55ce291f6 190bb1d194a33fd73151c3f61abd2d8a0c9bde90e796bd996d2d0094db2b e98657e751bdeefe8a43ee4501b98f0cc6d80805189438872a60047a8caa 9039893530a3e5f6bd75bb466b25165737c939aff3ea59bff4a7db09c2a5 b36b8a1f0c6c5e5870c7c9412589877ef44f84284b8a53b5b74315ce72d2 eafc631bc4cc2e5b71dc958b5a6350cb5f615c3a4502e973622e3e18193b 69572def1d02303a375ed60aba1bc8a179faa0f221a49078fe15ae133835 85fb45ff4d5f3bb3d0f6d8bf62e9bd6bab3c9a7d38c8a5ab0be57acdadcb d02b1dc7952d73aef702d406f62719922bea96b8fdc9b879708e794891c7 a0a42f2ccd6812c3f4db030b5178e3a627c3e77621d312ce4ebe815cd387 7208fad92761a5396b67e835222609f823728b1c987857cfeaae21f2ad5e a9d841212993508091a4a2c268bf1d8da1c650f6ab93995e7c13a3f84db5 5748c626fd09c0da1e3325ccb0bf091e996245bf51eb486680162bae63b6 513c74ce83b92359938439921950d713c69324a87bce67b45a030c9cf10a dfa0a82781d49ff224ac57a23c6cb321f95915c5e14e41fa852f66e1e204 4a9e7b1dc3be9e818515d28b2c4d2f2210098c39557067062ba4239f2aae 28816d999955910298a450741947a9a1aabcbd8aff3530626089978c87df c73618c044731b6db8007739a9699abc354a6f985e03c11d750b8b9e9ae0 5436205faad1b895b159e2c90562b82a62ea1a7ffb501767dce2b11c51d5 5a17529ef5adf0a0ee9a96d0e7e89f68e50eed813836531b4b46e9071e84 aa413f4135cc882ce832bf78ecfa7cab0c9f64eb92c86dfcd1152bb7d4ab 33831aa0c139b555967f6346068d5c3351a7a4368eebd2933e6b9f789daf 37ef536fcf965c397af1b7f98af864b301f3f440b7acf704b59540453678 fd6c15045194818938123e2f47b265ec4f5cf2172d394543d84cd4281165 cbeb11349b315a85deb2d1699507b0c8c110c72662ea2959c4962ff093aa 5ee6f21f89b3ccb0149cefef1855b9a48d28bb363416c015a1f4ea1975c3 d8807f616c5817c8162536176f464a198ebee6c97029f15f414275a39b82 19128b8c8542e94835507fc2d3908bb0ec375771280b9ebe87e827811418 ef93e52ef70546891bfc0fb34969fd7dea4ce7524d9eeff2b46bed908c0f b2e02efc1d1624642eaea1cac1eb4841e020532e88e59ac890e6c3f44734 b99722e9816402d1d0fdf8045c5481ec055100836ebfb48e9fbc39214303 2c909853c9ba38a19363141bed09daf02fdf4e7cc9808321cd0708a1b452 70bffcc3a0d7c27f7e781713d5dece82c72ed30386b02d14575a1a644754 7ecc7faac1bdff332c92984758e242256c054656cdd2c45d46e67aec6f83 9f95d74e222a6eae12efaab723a7c816d4e42d4ed2725a794743f67597f3 db8ccdde45baabc25726b851e02e56341ebe69e4d91f2a233583ec816f18 a1decbda4ab69320f55e730617360fcfb8ac2d2b737675b406297f7f8c4b c370cb084c22bfec5fef02e9ab290282f7b153f0a4b1ae569f1e52371a43 46a748dde09336cad1f5337fc3d7cf0677091e59480ab15021e023e356b0 e1bac6c6471ad53625c70206c338536f4d0d40733ab217e2297f86b59371 7c61458b6c93a16027cc886a8cfdc01ef19c34c9a608b95a84b6a2e31454 bc03c10fa55cdcb7b1eb7dc16ac1e93981a46decd7e7f00638dcac568744 69a2d9b45cbc81398727e4ed3db5db31965f358d8179cbf934ee2c4d652c 9cc211807f070c80e3a8222b4c31ffec8dfb9ee07a94c973462254bc1b15 81903ee6f9ad91524a787129a63fce048b45bbe6855826750c586b6b23b8 05fec3e7aaac079576949a06f422fc2c826bdb78ae96135e9e2c20c2b2ef f6171d610b2eb8635acab7c5c5ed9c9ffc26cd54d2fd4cb9e4294e178cec a1e16cc8e3fc06518bd16f4d63ae2b435753538834cdd9d8ae7de624006c e688938031336351a6578c304c2e5480a3fcb43a8bee4953dabc30558b77 90c6e7a6f0f9ffa557c50417407ac6a0dda1e736f7070bc89455fc293453 3db004aa9070734c8c2608a07330e421a0220dab99f8a77489132f6413ad b9ea637f3b75948050e667276a55beb09d4153dc126bbdbe0db9298ac799 a943d72afb769bfa1488d311beb86a907ec9385aae4f77835dffe4389e3d 9aded1b08bbc2b1ed6084b3d1074a326ccbf38e06bd026919107bd03bd9c 30470db779508dfe0dc82dffd2ded749e872eb7eb9ddf509d5319865070d d76846c34e4e43691af429aa40db4bf2cdd50b275589987d8081f7c5a046 1aa5d1455a660178a94a0ba0dcb69c3cebf5ee0426d6534f6f919d9795ad 6a0e1a1f452af3b4cb2ea54d6011fa809132421d111efc51174e223ab6a1 3596411a9723079231b050cedae7659cf168c39aea9c6902c2cd37d25492 cee00096edd63dc7643b667fdfde5b595dc54f0a72c2650e1e46990584c7 8a5cef9bfc3c5f88cfb0c49cd6cadd9dba675177d601927d75c6902b55aa ed0e9e3cb52a577c887d581b3ce6201a1c77c9546cee5a13b92963337f17 070e2bf9f5c5e86b84225863874618aa50f4de855de567bf2ab7163944ed 43dbd7f4bbc0e16231807c43dcb47b2eb694e6fedcfbe26194d2d9943a1b fe32aa1e5305f5e341ea021f91532162978dd1b8c5295a5e7551e2dee46d c2347c6b32197af430af3bb676a53bca9bd1ea88678377dc0a9a86e2ab6d e29e3e261bfd5573c66fb5687ba9c0544d894a759866b066e1db5c66e60a e071cc3a1c4ae40197cde4ec723f7b80137619dedc99af57a5497d6e03c1 c9e672e74f48f6c213a3cfacf2699cae72345a51c71c1d69348de5bc5f44 3ec0eade1e76a8a33066922cf3869e3c1d26a3b34e540dc08ea4da2dde3e eb17c16790da4ef1a3a76d71d34b788a87838bf2a5a3db8176f9c097d232 0050a79ea6c4a94926da11abcdcd26dba09fd33f30aeed977e8b5ad928f3 967f607628859429dcb4ecec7da3411be35a03851017b535985632639d37 8cdcd13b00fe537a49fd9eb6df1e3aaf5c41ebe35721fa6833c2fe08aa3c ffc3477e7fcebf9ef9f4dae62ff78f319481c3f1e72999c8a493ec6ee295 316b58a5cd62ffab62c896e521b678342f04bce1613cf7f6778cbf5227ba 20504500d743270771953acbd5c6586432f3fa6c0987bad33b88bc6c15d2 9c4b3cc54a9dd72a2357aa5baeb2cb057cdce72dc80cc98c62b16ac50b4c 6a7641379b766cddf990dbb2fc7f9cdbba755b6e3dea438fd6699c30a99a 8b3178e6d613aa938120835e517431d28114bca1ab745c11fe6e52adb82b 9d3d53a33bcc49740c93017d9531ecf43831359c5c93cb0e926db440b139 e3125cc2e069b1cf6d96ef68407f32db517242c3ae0bc6723e560b0f45fc 7f87a5e44e1751c8b7f9f669c24ad5cf16f84fb03ba121b86b0694234d8f 2c9c947269af96fca08a78f736e4e04acea44c5baafde360fcd8ba6a5972 4ca86160a5527fd564468123d302db45173c1b216b01dc5b6d3415b13fbd bbd3121a5493374b3357efb131cabfe5087aa1d2c7472b0377066b3632c8 2073c6a846285cc953a8f28e131cf587b35217ee498d9a1db57b063ce068 daf55d8cc1771c0c30999ca4fdc5d67be4e7e69418f6334bc6149000821b 89a7437ccdf9a6a0ed702d5968f1e04f7e4fe9fec9d1e994885cb624035b bc5426cb8edf0456828f8eee75be491b45fac192a405eba25caa4f4c66c0 dc234d7b417628da5276c08260be512b2432256c401a66e3b583e69d23e9 fd278cd5f2178544d05416b9b4f61a88a4728af2ceed07c08e207f31d644 e8e3ba1e4e2f9d8e30936bcb9c6aeb54e37db46bd64f2ecc1021336d0564 df0f18e5a6b6ba470233d8d41fdd9d1079706ea685b6d8a740570bfb78e3 984bb155c3155c69bcccb41cb51975eea1c1b4294cb546cfb03dc31bf86e c3bcb1977e8f94a771cab09de12a82f1d6c791fa7800e5a21df81c9c8fcd a78622abe75b54aeea747aa4f26d563200992e337231a430137c720a17d4 4f3ad6cffe63b2de12d3184bd3e151f955786b8ddcccb290c42718f3a219 1759df76371c2fc177544a6c425cab14aaab31628a9cf9d71b5257aff0d5 9843989cf0d747375a26dc9ed29b66ac2147da0168306c48c2484c70ca92 f33c0c138f92f276f5eaf5ea3082a8a1cb12db661633c2f71e3b69918f50 9060ac949fcd52c36498a2abb77d139df1eb33e3b846a7c1bbdcef5deeca 4ef0ad250cea9c2751e13ef7681e8fae0491cfa6c144dbac1fc39d39e76e b12d3ee9ca159aa77d2794f0c433345b135ba632f544082bbdc9471e9fa3 aed3a7d465ab7158e8ac97f68b1fbc8d368e235045c18efccadee98778d8 94d96301f903283c5ae355a863bb0dc5809158f7e108662d04a5c1234915 e7bd5b4c30f9efa55e702e54f87fca06fb321507bc57a1e55cc117e21aa4 e3a4dfb77c1a949efe366d93f2bd827ef8cc16d387ca82ac039f77fe995b e6d9aefc87f8d809e90c1017803bcfa1c737dad5f1a631ebe6894ad20c70 791665e7bc71f21c2c3f4462f60fde75c8a377cf49be99314663c6ecb538 b1bf021b2f2174d2b22cf6fad115eb0ece8a2e64097a5fb0a2af666e1ee1 3276aec59fd0c9d4bff23f71e835984e5eeee36490c54e077ad7355dbc98 bdd37df29b3ddf8c55480b7349c4d17322418705796a8c521fff920dd117 73fc44fc631c7d6e9b420d7965d7f62ec7385f2be30a51e2d796483134f8 40aec71fa19ed1272c27f98f2cdc9c7e54dab585ac1703ed08f5f9e82556 4902efd08edf99dfd49444c21fa6be16cb8a1b6d0c8a5abf80a50bb8d055 483176fd0aa07ebaead88fd694f96febd60751e5c4d8f9bc747d4f4030bc df9b0370b7a5e0a6923ff60dea16ef47f886f10ccee6956ecf41a21f7c59 6f3bc78299a9657266807e01762b2b2878e551914ca312c2a68d34cd91e4 f5115ea1fbe801346e14ae529049089b6b0273e258785773a9ce8e4b6c42 11cb7c2767319576758f811cbaf3a3ffb41b31306c49f3798b698a47bfa2 e3ca0251c4d90c0b02aca28c611744526906791d9e157e54ce4e1bcf5b68 6990ba8ab7897d624ef00eab92cbac255ae9177da9f0d86447d35b452cd2 f337147b5d3ebbf2b95235778a72914eb3707ea78294b3a3bc4acb19fe87 c72aa1d982e4b822f07b115cadf4d3e7ee3d1ba708653bec6f0a352a0c33 252ed0630e7274961896d461ee8bf523d5911bac1c8ac763e5fb11fdd217 4e1f129675969c195476c7a5e18a81bf9a11ed9f2336d5301e3bd32174ed 5c933e8c85d6272ea21852a6f7e2aab174e0965f73e0ef89e906bafb181d bcf8b1f5aa0c12d12c6272753c016afec2ec9f9541b8757874d6f2e061ab be8b29281677246305b3c41e90418426c575baa216cee3c5ec29b2fdee1c 77c14fdf940792f48a56ae80aa33e370b037cb28a7373f882022af378f26 b6006a049fd3b35074a865c97d153352acc156992c00de26ad21c982c71f 0edcfeb61593bb40fa5f2cebf23c4ff34a4f4bdb73ca273c269242d1c611 7262b7c47771f2619fe5710855134a80fa8f92bb2425cf88940ca3450f81 234abf2b11775929b12cff86442b2aa0f4243d324a5983e5d1829775b3c7 a111d5622d1c4e2b2a2f982fc8a95f789881416dcb34950a393f4f1720d2 212f3d343a17683060182355de9e4718506d76c9184f8dac55788d7e603c faf4907dde965a49c323dff425fe88c09aa4a4d16283f9b14ab9ef1bb885 a954034710b4a9da4c88a8a0932b18d139a687303ee562ec9f656f12f3e8 f27daa9c75db0fa946fd0e1a982bb58e040bfc0a49a4ad8cd668493fcb57 3c849ec5474049a693cbebd4d79ac7515047cc347a9a7570c90861f3ecfb 57b9f53ab9c0d6b05c8c570a8f3c04d58555a45524c98ff091b8f8a422f2 e0e9e5a7b7ff69f1cefc13e42f1ca276bcd584516d266ba6838d5e9ca9e9 854f50c7d92caed61aacaf758a7c7be59c3baa82bf32b691aca3e8eb171e 08ad22c39fbe586a54e6e4de2cd86b31138546bb8da5834b2c6e4838547a 1b67e651964e43988c8036931088904bbb589ca901e7ebbc094c0da81e09 1915d9e46828ad8596fd0fca39ff12a6c27a359337f973809e81b2e9e3d4 3b3146f2516667e607ffeb9ac80fc95a7b7d4ded551fee0f3561c70db2d6 9aba96673e39e3397f1c3f8fe5f48bab8ad6e0ed8901f90f6cff24e80cb5 dcac498506c4d01033e497c1241e413b022227a3264da68bc3f91b35781f a2d018475c199f43cba7d3a0d5697b45321bad2c394b207136e1e16b4179 4975e8903ef2b2e1c33f87cf72c325c11ec0b92fd3890acdf60b521da325 96763bdfcdca837adc6f26f129b23ca32f9cd39b33e64576970df3c05b8d ca4bfe2f17e6c5678b84d69494f1dba9fe0446ae6afeaa1ff245c07916c7 b7569e6267c42b459435a1d116cec665b311e404171774c0acc8dde96b0d 9167c8cc7d99c42405592d745c4428755500eb4719340d2fc6bc215b6782 3f69fa949c08b5ec985d7aa87c9ac1f9bcc8994c6cbce6027b7d1e0c22a8 3a5de61dba05d4af6884c95f46ba7f253e0b2337e312916e163caf9db2ec 56c5425990fe73ee53e42b3bcca1cf642f02b0c5abd529b568e9adff865b 9dc190240ad78ad226ed884bed3c285b4cb0e3929e805c67f1318d186504 d92085764b70de6ab5ab6990f181bda50fc31262348d980ec76608cf0817 6c2502e065ac2d8ea5cf9e2d44e2b70a7ddc7b922047c471df8a0b2087d1 106b5bd8a830ec0e53223ce3c96ef56e5541191167860eea58d696ec357e c55799438c90156bbf2b13a0d5c9ee93227746654ed73ea5b9cab61dac5b c690f89c87fecaf9ad03bd39e438f43b81d39e07e0422f94e8b096ab38c8 8bc2e1a043811d8141c1a35dd3a6dbe41620e83c8ed3a379cd80d4f9bc30 41bb44b933daca7c5d4427ae94a176829f24b5968b713431cb8bd9f53080 832c6b784cea9b515687f121983eb9d9c9ce8bd4fa3bec48afe64e643b7b d86d8383d07521fe5d091392be124ccc911136043824b686988e7c83aebf 406d2da88fd952d0fa9327f4ad04c55fedbfbfa76ecae8a176c516479ae1 467125b7eb3c9e7c5b103bc0c470946346df271f8ee19df7e3ff7478c35e e059297f4bf21a5c7b95993be6202e897776952a7ed0613a5cacafa731ff c633cab62963150e86edac796026ce02eb235b9f7a54e0b0c5281567138a 612bafe409a818c216da8eac5edf9d1e3a1e3514ae50735a111b4d2aa083 4ec6c11e290d58ff340f82f0e079f1c7b3566f2336eaa45bf72bcf885699 88db5f65d4c1e59b50f341e45a899656a0b522847ed567b49cd5284fe50e 5f8652cdac1c076804f2b2185f6a51ed19dd49412e65a0d2dbc844b75e2d f71b009776d9f97a4c6f786effeb87a307fb6b912bb659dc2bcc6d509a9f bde87de8d716040a8551b6ccfb7743978ad992d14d2b85ca052e87326138 db196c24593f8f7ecd6f486f85d1666b9de2aca6c7900044ee369d223524 664a2790b773f9ea26e0a4cdfd709942a44298b8249506eb9b77bc887dc0 ef947dddc7cb3cfc6b48f060dbf032a11884e6c226d9d447a5a458cba325 d57e144c6dc295262763e7bb8ff6a0ca473eb7661c12e0e8e23ea37e8ab3 387b9e54686f3e57765d4067e521bc1afae52394227793c737c19208803f 2f2da920b553e2aaf94eb992ab17e31b58c15cc4aa8a1b444df5b3e7cd93 7cf03e1f7fac63342731b4589f16939d16e8e497a74cde5686f529e9495e 1603d74875288cf53271db9313a4511b104f80b179fcf213558970a002e9 45281bf3ae51e668dd6d13d9e85152747f562ca0b75ddec8fe9fe31f8d05 b0f59e802888a7a4f19b29954a31108d2f041367debd6aa1cad856bdd142 7e9efe89956fe28d500cdc6a0cb80a76902a08d0bc6705583243f1dd8020 749b257edf4803bcaa653f7fd6d8b91690995ba5ea3ee92fcd367c11601c 6b8adcedce67b16c596c5d200693ac5fa15d4cc6ce9df7a71c8a925e99f5 085313d60fad25c1bbaad28d4ac2b69062d68f390530a976319a3904cee4 4dc9451e441aab4780425440f8c499b81460b5d3e268974145117ed843b1 71bb14aa84c3a084a7d8e07b9979260675d5ce6534dc176ddb60dde90f6a 3674f67462ef78195f8dff74fb5882b079dee31fe92816f16ce1a70d0775 2ea25faf5000adf79bbe7d17eb1bd2f9bf6cdbb6f078caf97986442680a8 fc4121866f9ce86c385de34e30d8b9768a0136d9eef79a4b38ee99cbb9a4 d32316564c9d56996e2595753ea71bef684834fd030d38bb100e2332b026 b046316a53270a96dab2182e994e91262fb03d1affbad623f16892284098 84f91dba153030870a7beb2c7ee2dec51875b13733b7929041f8d23a9490 4bd54dd4bc9b432dd0c78dd81639f46d686ffad39aafbd1b6c1a37e248ce 48f23e12464d5379b4aed0d50b5a41577e6ecb75270e9ad3ea7d0fc09dab 271fb18b51dcfc0069f15d72546e6c51049f3425ad005f88fd7f02042dab e9f097f9d6a076b30d8cd777b1ec12bd163fdaba5972eaa61e3c87e9ac00 7a052b1a3ffe14d7d43c7a0adc89b1dd4cb4f9c762a84a6c0701494b2d8c 4e4e1a9245738be4111805c2f153a20ed9fecf2dcf4c8f7c3baf84d60454 a7403d4f5f81c6404173a7ba81bb0ceaecfd493d877465dc5735d43e3102 cec57b8a589182fc65a4704661a9e351fccbc7315a87e62f65d24eeb9cee 979c6e10dbcf5c162adb926ec8cc9bffe381f6b8a3ac0a19d1631bea2938 731afc99e8eaa39bc75ddb3a39d01ad8f0bc1838f4d674b9bee9f6f7be4d 9c8bd97e8d171eff330c15b76614a1ffd25b3be19e4a201bcc850f926ed5 1616318c965ad2f0e56f9433b1247c6d5b72edf3d408a3e0674a509bf30b e813a5e669d72b978794683ca8b85e3469eacb167c30f7666db5e081b81e e99ecfbc1704b9646b1a29e4a4ce5654ca8409add60145dfc54225bdb848 5e39cc98cbc3f38fd0a797e5dfc2099452a2418c6636bd2d5f6b24345acf a65f4e7dbd2d0aa0c1776a4920b4466c509bb5bc7d6627946c4dcb38a270 98b7b5beedc2b3ba18f927077f71e38644597719652037621bb350bb5369 dccc073954026e6438fd8393ddb3630c4473f06d9fb9e422e435566c396b 12fdcd5605dfea232171cd8ef298786806e9159b84599c26d4c7d8c3bb06 4665cdd072e2083190372aa808b2268b3fec8878b6420ca829bcf995dc20 e067ee6b8e44d2869d51ba3aedd1763f7f8d2cfb8ec41e6e9e0129de5343 1457960cc51d546b10b8b6ce08a1c2b79fba448df9783d815608a16c55e5 89dcd8ef6b04c66232f47a473973a35618000d79b8173258b7365c9691dd fe47b16eeb08b28f881828b946fb5d6fe10ecc6afc4ea1f762e90b332040 3382e42af4885b183aa48db5e4dfc9a54e0b4ffbf7c26eb17a4f13b4bb93 12234434fff05549e7587ba0373acb3e31418bfaf400d8938fc6466b9427 3d1735306ab912aab13e31da3541c1733e2a7e4da5b82767d37f3084aa7a 7c488cdca7abef77d19e42b4448abbd346e9bc288abc4540c0a1cfd0bf46 c5bc7454b25e27e9906a3e6cbf678bfecad1b19b4e42398a210cd567ec35 fb115d5c0df0eeece593982056b0e1d14c292f70b3e049984f8881c8b477 956ad3140b4aa22256daac0d11c4126808b5b9f922bcc5f24a77ff352e2c 621a3941ac07a20e550a69c49b1b87d116ee6f2f970918f0f1a501166ac4 423fc212e4ec8039ac7f9c212d864f418cbb92948fbd588228108fac1ad1 837070512305c110f0fc3fafe6e1529c2bd0dde868a9ebe5137dfdfc5c12 a3d08014bf0ee27b108002aad6b607f5c5c0f1b1eed3c552919c9a2e9720 4a8127f97b1066607ecfb47ba95ef2b51f007c293b2f6a63041a9c1120d9 cfcd5357222e5b02dfc73cf94cf9b5cb00eaf073e9bf253e30e09b50341e 57bf245a746ea31bffd0b00201c34cf0881bbd1006bc9ba7d420a48e5368 6b598bedb3449924eba58d5db1b1b01ae2ba281d5758c99efe38adce18f7 b182fbd0d0622a6ea497a4e7c00c7d17299a2765efd8de376c214d01a218 19451fc04a0277ec84a151ff93903d61c78ab7886911e36e12526ed855ab 43f6289c1890222602b8efbf15782b374ac1e580b6e963403d6d15a051db 8558f2e61c0b9476c6de5d4861585cf515ce951732f20d32969f39192fbf 1690d242ac04d47e0c53d467d0fe4656b9526c0f7f852348b0437737cb0f 29ecf9b54a5e17185236dd0c16349c3496f3aba569ea20e343f6d771210c 39dc932dc65ecef94575c6e76902cdf6c8c8361f9c757a2577da535187fd 526699917cfe0ad438c2a758727b306bc7979547e68b94e87ed820614bdb c649d469ef6b4e4e3dd2eaeb5f80b22fe576ced256495467c76a75f58946 0061e03f3a1b065121a5abe3e2c51148b3ddc9f624c97889aaf7fb84b158 c015eda5670746c6359d27b0c2bd65144f2b88a64331816da904572be398 e015a9924218b3eef95123aabfc3ac8217b7b4f691219a1c9dd0a3edd5c0 4e63acbde71b423522532561f4b71b7028415c3437e346be728a415596ab 749015c1d59bd8328e39a850cb98085b34b57fb52dd1d154f98fec49b3ae bfcb1672762e4d2a1ecf02787f59df1ebf2625c3631bed849b298c6d226b e4e6ea2ab66a287d2ba92a6c9c612a5f849b3cb3c25f17164be286f6e4f5 e7e4c9eb17bc68aa5ef0190b64696a570442e1d9bdd1a30e7692524e30e4 b4c3df84481dcec6e10e7308e65de9d90099f3fabb3f4f766bb86cc98594 6d2003e21287761a7386cd8461615b570bda015f5efa23d18e83c325ee44 4ec166a1a32d9818c2a65a092d44156c06d3fd079b92450b8a491cbb3529 ddac7d95afe8eaf33777fbb265feb8a4b9aff2cecefff49afbdcf6c41974 97d3b448866d70ef28d8e4b17e7ce95f43f64bb48c4a73eb84b26650f62d 3e5199d64db0b5b87702650ed0b850fd5d16c848d096e4c7e61bc63b2a3e cfc099cd713e12c91a6577a88d6f55d348617c7a49890a86ea8fe2045704 b5ed529db128c9b19ee129e5fe6498cc97087f6bde96007c9d01ce9caf75 646e5a5b32bfead9362a52223d746943a2d09c536cfaf78e601bc2d2f0b7 63ad722e3a7ae7069d65f9f2bded7278511d0120f5ea071d41a69f8c2a2d 720d3b24b4be61c83ffbeffae21b0560a6fd1a44e53e42e0d10e0e93f421 a8a7e167bb65f0d7f1dde2809fa3cdfd931ccc69b119c83238c1c00ec100 d8e7ab1c7fb02ede97073c8a5860371a8132be391eb1c397b61f93876feb 438c288ef2e38ddcd182a5cfbba994a94a1bf818312cd8234215fccd7c24 0a15ac01a885e1179e5d7d6305dc2f534baa141f25ea6a5f356486e5fa0a e3c6980a9f5e8e99e7ae5b95ac429775109702454fc951e4319ae4b1ddc9 b07d0998372c0a95aba6985a4dbe6dc633154faa30ace689d36a7f17011b f29cedc58a6692a8b3b0a5742e6cec2f69b255bceda762dee72f125eba98 891cff4d88aac14188a18d81424979c9079e44890d94ee094d4caddc1c7a c5f6791fab8849cc0240a579abd800efe3aa4ee2f78119a3c2806c05c2b1 f17940be73984982d1c0065433a9bd658ea31ac819da9a11b87475bb565c c294b6f302fe3f7752ed9b963c5279b5f1196762d0e12e6da46ff9a0cade 3876d7df695d8965cb4b47b351fa3f759811269376b2c3134403633fde27 c9b024f6ba81f3e1699cf64a426618428ba6c3266bf016c5daa5fa4cc82f b6dc23ff2d742160518cd3a65adb38e53f1067076ca1625466e0c64670a1 564a54ce14dc5c57d24a12283fbcbffd0fd594ac2a56ee58b552f7586825 e4fb1ec23f8221711692c8c56f42272b87ebff3865191f1c11943bb76d8c 0cfc53ed452ae49404d2c8193ecc2a7bb8cfbf24870aba38d2ccf7869e93 63dc0ad94facaed5922b324dc3b6fe83e7b34fe29abc1ead62b49ffbcb81 1adbb5148d5ac2743e3a058386036fadab6ff071bc1c3b8023f908b6ff48 db0ab1c9c67487c35211d40995e1892c8b66ad6c9c6203f6f8b513b11117 b10da8725ab45b4437b5a88a96af3178d856d601196e8162868a83da64e4 08fddebd14d6591881ea652032cf2f88b3fd6c0479c8f89ac68d14d01af0 ceafd95ad146e68fae01a07f39e7a0c5e4ffa6d6a91d710827ca5acfe7d1 f946a8d7b67621d60f5341f32c12a6efb03ae5ac5373a382c044a276f6b4 1c173d0aaaae0c1de4c3cc71ec2637225ccbfbd45eab92bf39357c57195b 410f74283585b12b926438ac72afadaad2d0fa2cca728c8e86bd3fe75d47 b8beb96ab13b5480f7a3d5741eb51e3e40c21ff2ed7d9221d9877c7d1a8c ecf394e4023fcf8c4efdb38b839499ff5cd96a46ab4fdb46f35d3b48b917 57c0159328120e93cf1f2739e936e28908fb19471d3ad7f6f1ad2bd1ec36 4986a411cc1b547d0ca104fbc10b1ca7b638a60e75485574034561db345d da68415146aac632dfa34769b6ed7d7d4694e92cbff4efb16b5549590810 2e85e827fc623cf1bbe6a13cbf64e878e1a2a159948b5529b75e071744a5 f0e50df18c110b0af117ce7f33f8c959d4c98ced5a9d492ae6f56da57b0f 17495dacb130660bcefb064fd8309d965abe8d2be98f6898c1b7a39cbbe3 e75da0ffef6cc3945ce76da3be915546fe8a5310130ae0acaa9ab73c7e04 1c00533b4bc7724657aa649b9388b791aac5eabfcdddea2cc67a0fd0ae9b e37df9ad40636538ee55a83f60e9e026c64fbd8b220ceb46e67410144a52 0fceaca252e8165448f84d8ea083c793ad09b90b3ee83b73fefc3365c729 e3c738894b8c01c2f8aee0cc8b114e1175efb44cc4c6cef5c8754b1cc7ce c200ad8bf1189d741cb75bca4e88be959e32216ad33f674f49ab20a354cf 3969f1611a95d3934e148831ae7c81a7ebe3c5244f743e66a82e10d16cc0 9f8194ea7a596bc5981d833318ab4f7dbf2abce543e410b649d18d146f01 486159683df61a3f880f9b21ebfab77e908c6cfc79f89ba5f51114f0bf7c 3ccec7bf0f3b057c3195cfba6908e31e0df10df69163c9da7babc00e9a58 0fa7fac202910615bd479bbf76fb8068630d1ec21cd2926d351e869e16c2 cf1e023cf04d4fc61607daefeeedff5593e6023492f00029e2ae4b4a2c14 50954efa2792f32b4934a768f892171245a1e2f034e2b9f39833f1b331a1 9a386baacfec8c929ba6b67cd8922bbc9dc005ec3976575d5b0508d0717c 6bf11123ea36d8fd37fa77a6f1f5aa84d4ad8d25b2c11d1877a6e2f9b74f 3b5829faefd4f7209ce9785aa6fde68672554a6f29d8bf03fe108ed90a7f 58690fac399a8ad3a26899072b832874ddb629581a51b3325cd9edfd49e8 90ea8959db937dab83c777f2a426b967af5888c33a3635b78d647ad6ba44 1e222c958ea58d61945f781d7ef409771b89b20242ad7d07c2ef592cbf41 3c5fc89ec30fc9ebee4bc63709ae33b65ee3091cecbe610b847e12c556a2 79c8b114c3e460822d3330adfd72bd69f54c08a81848c2002a08326cf3b0 9b1305490d35aee5917908e1604ece75bbe811a715ae8af7ea9c371b322d 0428edf4c893fdea607e70e1b6f6614947326101eaef18e29be0557d2a92 cf1fc1505e8b434bc368ce07ccaabc0774f8a63e1073fbbceb3f4052462a a9008a1e53f188c9eae339faba74afd6d60f47282cd9ff721f64bd51787f 3c13b5a6c5a5f78611710111f5e0471e206d72520f1dfa465f4a23c71dcf 99a04ceef11b0e3bdfc35b7461a60753d3ac26dc50a5956c9195a4f52263 88e0953ddd03af128a98f03bdfa0602cbbaa20ab9eccdf7255962a332e16 d4380762e498fda4885c64ff5f9b480da487c58e78943df62616e6e2c69e ec8836dfcfa9ebf58938a878f3e792e8bd8c5d6df557a5d82018dbae1ca9 c64ba5af8e21be1b6680fc5db22422220b776e9ba0bf1ed2b7212f8bf111 ec8c8c77b223c05eb5e5f1cfabd2d037f4ba0f9503e2cd83f4519d180476 63f09e308883f5da5228f83045ff41214d2273b2fe0a9017d5e0557bc2a1 98c35d1e7e81f79654445760cba1d3f05ea4b90658e53fdf0823bdb1501e d51da75c47395073d8980d1e3504e3f67db3259e4ee73a87cfd96f84e221 796573958d364a51e635fc55478c9cbf9aea16b7d8c25f2115cfe4b7f598 54e24968833ba0d64d1d332a666dfa2a3fd71b05a26bab7da382907b13de 0b80871df184d3622b623d7e09bc32a4f6ea2e6da450a906ead36d53fdec 7f83e101fef32f4faec581b000686d86a0d3861c1e67f18a4c4647f51f97 8484d9e3100b37be9d20ae84c085461c1fbf929c669e936659050c2627ac 1b019837baa75757f5b0a82e8ae9cf2111931a38bfc94744e2fde3f87103 42ac615286e4ace7f269743aa05463af537d9416230ecca859d8c99b7c6e 70be7fe11db698589be9e11900c8e9582a4ef5ea94b5f62820c90dbc022a 620ec536e06cb8be7526a789996d0e741aad980880a33800a6fe92286ccd 02c9cb407eb31fb95d9c9f4aff38b37087ac582c1f7b64a7c3d2202bdd62 e9aeb31bca85c4cf323f03da9d318b91f78fdc0d266630f7444ed068b55c 05461c97552366a82c2e743cec353d51028fdcf5403b3b74d379b82eb69c 4380ed40239e15a86b2e5c860891e26781cc111fb5705e3b7c7af1946006 54b5fa1b5fc54fd0ba43666e7babd2c91c859f393ed49f7123edfb648a3d 6152f2c17f7e438c0a638968ac06b4fb3f77f64f358ae063820bd33f0213 c85c40e4d97ed100ec2da1c2e1ea258bf107af675a9d995f60bfa37222b9 c2b325c0052bb8537d2b27dd43a129c7e8ff42757b3ac9b447703d382108 da520b8b3bb3e8c7295b776b44ed28f863b8e1f81b0bd1daee8a171525d0 9d2620c04dd3219d880c2ecc79282dd7b1772a9cbbca706909ae8bc7798e 6ec7375189b6cfce8a875849176e5913b85a18fb197a33ca4b5b4058603c f1fa79a56856b43d538e9ece117d99afa73b57e307364f553644de01edb4 6234efac13046b6e047ecc8f63942f20097ad7acf0a45c0501a95263de94 39a880d6b5c5214d29180a54d7fe9b2e627ef49e189b59fcc78745e878e4 5b46c0a648955d3ea8c935113d94f92ec963f66cf3cf3a526ba71cdf3cd4 ca69efab08b7389e3390716892a4872bd29dc1e0889a42d7ffb4190e9a8d 05d84eb9c5741be6b02716bc75e0106f5f94bd3778be985e03860d27e440 88c3cb2a059debc420dce3a8f4087a9548485e616c409ac400dd1c411ce4 b6a229d091b253eb68f06e43511ec5aa6eca4d6e4818d6aa2068da1aefca 377611bfa816b5215182432d5683294d67a7c1fd76c52233087ca44943ec 7280005e93145f5e7ae50100c18364e1b36741e9647c4dc1f68a58ec4409 5920fdcf05532f60371780f78420077ef5c24d63e26040cddff8dfd65d87 1db943f50cde84900c1372ef33fd8ab9889c82f94f61a0e6842219a0f39e c7b232cbf802c4a744f33159432e827006c7ca77e480a48a9b0e6a876158 8a3102e3f98a77bbd62a3a23150fd140d3941773bf7cbba2338ff37b9eb6 40558a2313e8824e8e620331568a9b76f4897198a709f9313f4ac40827d8 c3a71f2abff02bfd57d30d0b14012fb5c39b85af540dda0adc27a85b3169 4e8d7b61f9d9b476571022d98f2d768246550a877293f3ff6ed918a498d6 a600223e1a61890c49acfb60265867ce9464f9c32c59e94f7641c3873fb4 fa6eb237f8ed94579957270d6fd640bd9543e683f2372ccd7b60aad269e0 3a72c5cdb732b128818d41a6ddd2bc139f7d3911f48e1b1d263dd4ae8e4c e1a686f3a00a2cbf48978631cd243566e22e68f8d7397134a3530ea3745e 4f1eacb4d6a5fd84c3011094f37573f7f9902305020c53926716d4780c6b 0a257bf711ad94c83f1d41a02c1c7dd203a3e6e4b14eda2fdbb36b063a3e 074495f626b0eea146d22ac33457f44f416759676d2a0566ec2b726d2f05 40abf225339f02f406d4e7a62e5233ddf20ae7c86ca0cdd561f33c422654 bf2dc3685ca91bb9d4b09ac8b15a24a99ff56e2894f11f7bb4728fe8f0f5 b799f74f475d2d01f61b7e9e0e541f7feb8a557486d7df2ce50927515d83 3bcaa1cd9bf7a650bee9e003a5951c98ed147c4c52f64f692ab281984ee6 5a47e44a4a5fa93d6f18d276d3b01c5e5f6135ac6940524cd713df4077fb 4943e8ac927a68489ea52acf7a854393cd027eb52ea2dc6234ef034f3dc7 42d6db5a67fc21d22b97146b9c268ba97c30161ce01edc69a6a1f05efb0e 06f22644e1a368f0e2c0c6c1c832878e0614b74bd645f5cb293cfdb7618b 837fff14a1210aa061c8c81867244305b80daa73cb25a417228e9559e7bd 52c119b0ccdb7c4dce7e1b9f7e8ebbcb575e5bd213bdd6db88769dacb05e 5870232f0ef82f448559187423409eef756ba6247493be24cb1879b5dd82 2e03d0adea1edbdd83d3fc46759c679b921f0616f27212903f728ab44c17 84e8a7dced0df5625a7d3f48a20fca34008184cecd145ccd98e31b79e174 cf107e8f35c40c19d86b40baee6164353408801edf75a619ffc5b6faf3f3 a95f64795cc40c1f89634fd8c13852d265fbcef834c800ab46e3e8167476 b23cdd8aff6e2f997c99a86a9cb30ef8c853154d0d89eee9b9cdc1b4f27b da32432a4173b55ca8d9fb50acb2d886ad8e5862ffd5dff224ba13c8b8a5 4a7f1a9f987fbbdbc5a3c3d762a5be309d5d926ae5093c40aa47b3b1bd82 8797cbb9bc9fec9d19eea73d2a39764816113a8edc6cfa6e605ad578fc8e 30abd600658a49abcd5ac54655d29c50fdb72070169d1b389f114b7c71ef 95a80d82ab537ac8c165d47371fc142a51625029a990a577eb1618480d72 6da93c98e5c5f24f622a850cdd94badaea91d4bc32cd50ce69e9f00e77de a8ec1d37916398fb7092402605359df08afe7b99c76c2a7c70383f28a7c0 00c696f45291bb8f074791798197caff1544c76ceea8c9e6d76edcbd92a8 6df889481f3bbff0865442264f0ea40d3caa69ae467a08003f9c30ff7f2b 77e767580575398462d5b1171dd441d8986f33bc7bda17d413ebb6b7a326 42e33f20b284bf3eded002352fc66c6f7741a542155f4a159cd778be56b9 492cd95115c1a06189a216cfd2e6725965a13de973765a05114d9a5a4be0 615af8bf6a5eaff84468b849954d15beae1cdd57c435788b331905c01421 b50f20b184506a0bef746330bc98e9c89aaa8f9d102f158043beb6a68205 9a1c8b8cf67b2f3d7af4d8bbe086254cde53765e3226ba2f95ae8063649f 9f94bd9519411daf8a0287307335668190638806e29484a4ffbc1e46b180 0e03b162c23b1dc0b4c0dd3c7abed2f00762972ef06eeb9bcdc7b3f39c70 be32789d366f073ac3280c273dff2979507671b3e1e7685a9a4f0fd3867f 96dd675bf05f25ed986a79249b75f182fd73cda2a6a66d693e4cc5afe340 2431b2c816da1486c34bc9dca4e2d51c868688a7787cd10abb9aca14b718 1369de89913cd8fab58fc84519ea2aa14e54b7a8ce474f213e07cf2de2e8 88093deec937526816b71c96ed75fa9e2edc0f9e6e84569c12bb8e39aaed bf546630745553d6084ff9524fec6a7264f88ceb7ec3358e923b392474e3 a48865564431662988fea768ce555ab0da48bd526a84b0cb17b4584066c1 640c1023d91f7869ef0c4d701be121a6e3c832010427490758aed7a2b30d 6028f2215aa44e86d852fdc67da5ccba79eea863bac9edc2535b66ab0e54 ec4d4411390fdeb8d1fbc1743f15c3b68dc92a8659e7a892d5e53872ea51 ee8ca7ef51103e87c29a2714e907c79db9cf37441785d2f73a1ee5855011 1a4d9bccbebf2e39cd3b93dca300fac3ed1add8215301e5766c30c8cf296 75746c5a77bf1fe3cd75d25cf193de8d9af02af8f7a6e8f84b548058cdd3 c6998ed13463fade739126d83d3ce2c7201f955382832e32c10dcbcca358 35985b9a93f8e3b0208be6e92428787c47d3808a0f77b8f1d76e6bf6a17f f81cdb065180e03809d03638307bd7bf5cedbf64904e918fc805ac905379 928b816480f6e3bdee47042cba98539da0e113b1a5f23eaf1a3210bd1856 1985e6436eab90395da477c7a6d7888d2377b3fc4169368357d880ce041e 1f7c875e956600db7d9b35d1ee66be476e9dd8064cc02230276829c2c0a0 98f051502e828a0cc505afd8c3df293da1508ac4d25866beee6bbd5a230e 9c2dcdd4f06883936381f476ddcd86ccfe15c2ce3c3243e148cbe603b851 3a7ce7a6910a66a90b7089e5ccd4368befff2bcf8e918bfe0a1b069ab2a9 14ca7bb91a0ac3b3c0b060fa1a0316f6135e890ee549315897c8464496cc 6dea0f7e3af43ffa4c3281156067582ca255b1d2e80f999a3ac0402bbd17 01824c3bb524130f5b82a45275807bc2f3a0655ea208f968b297f98c3691 92c8aca26beba7dc4506fbd1305e2efa4dbe5375281a88ee2d6fc88fc0a7 55e72934b4b58f6dd3bdaf7171a4a3c7765767352492bfa9a7758504750a b7f38754683b70e9e293cb1cd7b23ba62bd7397abb84d7edb22ef6c3f58b 3eeaf656e361747ed04020163253d1cf3f905b5e85f83fff30ab2778cae4 3781667c0f65c8fd404d6b9202a99ea76af9ae1236631550b66b06384718 0b6dca832ea8dc4a6efdb674b5a26552a7c7d54c2799c7d4e03c24f661a9 1103086de3a90a774a6988347656344cfba06065ab22476bb09fb68f9928 c0045f2764af643cfef0516d87fde6dbf93bae2829b176cb507bb99835e0 1bad5e55c2f8798c93fa35eb3fef02cfa31d3d21b030547f86d27b9448d6 8e2b155a65c742bd2999daa0c3aed64447b9cc67f7af33b63afaf25f3cf7 ef86657fe8f952288ca4b691d369e8f1935cda44a180a6767560c2ed3f2f cc38b6bd7991d4170c7c566d690a8a25be03212a80871108d18cceff2466 23e653107631f29227d64754b2208d19f84e547799e691ca473780ddd56a e620cd953d5133d135e3d51f237078feebb7371454ee633cfe238aea63f9 999e32850e6c197687a0ec4e5908d2a18c5349627e336ab5e3185b218228 603a4b1852069f5ee849d571b8387dce1f8f8e9fe94fadef128ba83bdd24 5f8c1c27c11f2ed1a8ab2d6d601726842cee744ee7aac6b6fa16ccaa39db f5b3b1d47339f31dfa562671a9cf7dde6915fef9f19b3e068a464dd350a3 ad146d1a241673b5112a4a8768f976723e6e184790c0604506c46591bef2 106c40789b733331a80740d59abed39868f80becc2aa21c400a0bd0cc326 d186fff9eb37680f1edc32ac78f9059280d07b5ff2e354fed545129fa5fa 8f3d4317ff21e027602fdb2522f049bb545ff4da60248130f81f4e348373 142f3148ded038afba818f26d5b49fc02de9800d894e9239c88ee0ede431 f8083697cb0be3b497473473e5714717c914a1a926730c249413fea2615e f72bdb0906933387a892370f77eebf62d26cd583ee643b02e323821379c0 dc966407d36ae3cdf646b95dedc7d7fd0f28e95078f12dfc0d6400b327b7 43c548a0a3517a175a7ed963ed756b1e107ae7087e2446ba702cd4e26e2d cdc1a8b697108b5b5e81e9f03105f220c72d4aebc57665887c8c7964089f be9424120efdb14d76eef8c6f7a30b13e1ae90cb9d93d2e14bde47f4a1d0 5ed5b18d32aa39911b92d24c93976aceb7ef597a75161923a73b2cc76178 5493d0eedc08b5afe95f3c006b41438a0785c962b070de2bd096cb63b847 c87539880aa3d3fc5c345e0992d7be77c6cff4948617fdda784cc5565219 2b0ed775129c4ea4245a41bcf3875be319da0ee2dafefae920cd2b6c6c20 01762f88c0c5c05053025c0349db17104360fce15d7f3a8e30ed13155a74 faf91dc77b8aabdd6fbd5a1eaf255db209d7f2b90822296b5603fb5e2cc9 5cbc5f7a6044058b8044adce73acfd896177f1f70ead2f6534dc3ad755ab 2ba87126d63ca2e9c441df0965bddd6be494e58d6b5057a561d1e31bd38e 92cb73c1465af6b9c001f7229059bca4104847d1639e124e082f7364b565 48bf8112d0eb461b316b2449049f6a476d36d6b7c0c1126c08f2e9a1246a 3b5b21e7c8fac6e23b82e33a7783e4f31f0240e96e69c9444e7d7a928636 cfd086475df1e0a2846481387bb2010655b9f81a0744121699b4905aaedc c84bc5d5ab3674601dbbb651ede7b5df05c8a463dab41f79706d285c4f90 63997f7ac8cef35cad51fbe5f5bb1b3fa6da2c3abf2b3e925581349728d6 da0d59c1ef6444539742ee9a23a5727f20cf9377f4f84dea420607015a30 fb14632d084a2dd181bb02fc3a84fc499b318156b675b9ca3ccabd87fdb2 497c6705fa70eba43addb6cf961b30e8f6ab9f84e1dd8d6db3314b34b7f7 aa3bbe19d5bdc75ecadfd8eae19e07b387a1fc586f0f30db695926764b54 0d89f1d854b0ff86528ad9523caf56371e29498c11afb2f4d5202670c834 e930103f039d1334882416a49bf93b84fd3cf1209eef7d4994c8302436c0 794497461c11f5b8ba152bacbcc08af8a15f4a4df3effb7227ca97fc21d2 d0356c93390c749cbe9750b821f1a7bcfae2c8bc6d9a27f844d8ad088320 79abf0ead8ecd4ea72846dfeed021857f33c1ace4c07bec90398b629814c 498d33beb375b9a53da0f926fe6e89e70322c72cb2ddbfb16b13ef7a4f50 df783316584c6ac2bd7d9029124933133b2229bf74a228868ab30ea5c3e8 7c78c3f0962199480dbcadbef53bdde45849da857a4fd85b96682f1edeb8 5384929dee4afaf84c51a09f5d572705673d885070303fdb47dc898f874e 103a9e7c1e894115dfddad81549c7375d4aedcce2e52c13e5130b47f206f 7c5afaf1f9ee83da8188d70b473269ca280a6a02de85300b93d8a4f6b402 fb5df58f1327470ce11cc63ecef2efaa396a6680a6746a20382d9529b58e 7ce684b39ac00f7086bcb47c2230df0343bed9b9152a61c9826aef9e00a1 452d91305cf05490d4bc0badc9c6fcbfa93fad52c3a80705a19568904975 57c0873ebdcf61ccdd2219354a4f5621ab33b11932065c1d990a9b688583 31ee7875cac855f98563b14ef9e1060bea90f195afff94728ae935453438 dab35123d0e2699475884ddafc7307a5cc06920f35341728d85965f5ba86 f261cffcb1e29b429f976970d42d10e6af6c4b792b4384122aef2448e22a 58d3aa007743c71324ea08d06819fed14ac1f22a4f0be4787bc8738e1cef 240677571c65804ed3e748d72e89c94b6f310be748faea31ee246859caf7 a1ea17ccb5b246c87eab771e2ac5d378650191081514ddc2c66878e3766c b20dc49f630f2743a7faecbe9dbe9e815a3cb57dadf2bff5ef2fce23a562 98a30a2e052feaefbd698101f9db992613706693cb0efaf6f60c8bb5e7d0 a50b3392b9831ef3a304a846cd4af431e9f018fcd3a5b16387552d55daea 683d36257418aaa0e7bf8a03ed7bab114d7c15119e6c71c1946bd7903c1c 42e115e954619051b853bf05ae316e15e619a7dee498f771e809d9435969 c1056402725ef40c0200e083f3ec6e0ec27b8ed38dfe32ea0e5e156ac36c 4bb9ac5ed111a11678339703f1b9299345aeb1f251fcefa11fb3101cc499 907dc862b4463d5523b9b25c5b69f70ab6b29cfc1df1ecab8227eb3ed1f8 82e90b12080ee003714d403ec43b7b54491446b6a3dd6eb641efbfef060c 45e873e7398025b1cb7065441f1753028f6f8c49a96801c0d598e098eadc 96a21117f817b6fd6e6947642f93e22425a00e8f6b592ad50b317b69c0f9 4047386a45e5ebc9504fe55451a01eb29ddf9a41d4bad85fc84ce280971e 834f06cef49c8c20ed2ceac889f158cb14a8c070900478804cff1d1637cc 880c81aa287d8382837ffa8f41ff3c9df2f22cb20044c171e4815d0d0f6c 22d19a52114e780cecd71daf63427782e85e463dcb333789f496340e8cff 885a9d9a4250118b439c71c6be51a9338be29251aa794edc67deec6337fa 63ca9b03c1c9f75e733a4a918646e7bc9792486cb5a4bcc5f84fbabdfe33 8c3792254a3eea3d88903c2c47b91e076259dccc8bd3dca90eccc832c09c 45141c6242026bfe309029a562c3ee0fccdcd40e5cf265ed9c3de582884e 0e14819db98b3af734b1b3276ac41d43384ebe73003d15ce39ffcc041095 83390e470f431b4407f98550e138f96c4564b494e5480f47c853bdd237e2 7301f55e42a3bed18fada152572b7b465a581dbfe7db2619365cf16d71bf 8f091862b9fcf04bf8d0859a76f46e7b5712f2757edce332d3213b8a30ac 2ce7d7797eef6f30904906b0805dfa7ca36d32a20d989858497a66ce7249 1393dd79332003d55c095a5ab5df761c4be5c041fa8407263d604e53091f 7b6b15496245dbbee96a63f10fc2978d99e6573128689366fe8b0bada48b 50185b861bad03e3600f22bad4274f2542b635f6c7944befc3bc741bdef1 1a8dd659038cb40fef2e16ad1ae7ebedb7d9ba15fdcf26355331505a386d d7399fb999535d6061eabc61dd76ef3eb457446f29d0bb6ec2fc0aabac20 b27a3c123c27bc27a76336d0a0a6d456da0703674d959a4afe428e2206a5 11bfc80039ecd56e75f69786da0a8084d81a66644dd98b6018681f1d70ad e09bd9bf3d16d68dd5d0a03ae26dcf1552549e459fe190b310a8776b2c84 68c14ca8b1b9a7af2956507a3b705ad75a17a0eea7fe089273353cecd07b b8563465ec8deca0eb42f43fe3664eb5f31e1d1324185539b28d508bcd06 5ed576d8814ed3fd637d576f027927162344afb0255a91ffc616948e4e35 8867e9fc76a9affacaebffe110808c1532a2bbb0dbef3f010e45ffc73f22 8d28f12e98478b27397d8f456781ed9e19711df2e9eecbc3fe61f7493fdf 1a59124668a91be51f122f93dca4bbd22deea339e6eda3d6ebee03df9581 13e1ca49c8398d2c59da6764882ee3663f62a55ae50a7e91b4fead1b11fe 0d50accc5d75f1a515f0c53616a500f1491381dfd0e2477e402ab0cf9f67 d501a442629c8593ed5d25a72edb9746b02f2b0f0759cc9cdcb4c9d8b451 9c8c617e569b432f0cf6890372aa879ca7de46e110d95e230a4f0e52cf65 811c54365df4a3e40d819e2fd379b47da3233d0def0efbce04ad8baa3888 4f6a69fe5c373e38ae0fd0241480f2be7ccd18af85916d2703a049779fe7 398fc47d348454cf03f22eb3fecc064606957898b5643464845445c25c0c 7d685c8db042af5d5882174374ace90081c686789bca96ac602eb41d317b d652293ee628951875641661ec86a2c40a42e8f0813a861d41a0f5178e55 43651ca0e99150462db5ee0010f00de6d55b0d7fd7ec5baea24ed3e90a7d 6a0589761922b91a6a913a7feddd3b68254d89ecf767ce8e27f966426a8b 4fb1b4085384fd09d63e288405b78a646f44c87eee22c8596b1318808547 9f75f63d3d97a28f9c8306fd207dbfd38dedf0ffeb7dd80b2a3292dfbf1e d605adf1b33e85b010309e3ec058fcd922b1325fee71eff2dbbc2e68db52 d513e024c01d47cf657bb61c9734649a4ab63c0af4720ec3efcd82dd3ca6 e80bb63bcf1b8de810a0c6c517c63b76fe68c0b286867be102424fc31c49 37048b6f323d039618586fc21731005d949e7d802a430df8d2f0ce99f2a2 376c2953efc4184355e4d12f422c9e1e25c4df38dea334dbc89b540e14c6 1a7769d77115ce8968fb76b27d0863cea2496783114c24d4cc816da884d9 53da3f9b9d3af8938bc607bf26a071956ca07e6a5509ea2f5d80e5cbeb98 041b197fac760976ee75b470dc20aa023ba3f63c2876eb281ff5173bb490 d6815604517aa1b1fa0631401b3c1a04ca103e2ca4eccd83874d9cfc8abc 134cc0f9141d9afa56848bf222342016c556c14b3482482dce5d0b6ef1ab 522aa1812bdd8dd3397e05327ec12748fc4808429b97202e24e1de0c7c0d 272c046ba73b37d30930c5de5a47d96955cb0f5ded8f3ad929a8b42d2839 0458f5910a0f93610f79eddb27078943dfe17c716d65f96589769349f3b6 6ab7b8c004ccc59ef6881f745ec7129865a76f9c2d029d4660ccfb4d5f9d 412ba3372a27cb175e9d65f759575cf14a5899a8d31ff039ac02dbd8391c 3397428ac0d5717c005200790785354813c8859be90e0e17914f6cb9c674 f1e9a9648657b54e5e1f52756c4f982df74e73f6e4d40718c71d1d0e2420 fb7462fec9e457c0414a96e475c6be2c10437096fca0c942e995a9ada789 ab637b648781d32dfb68e62e91c2ce7e13680f8d31ecf8c824885fa76189 81cd05fb335aa111b409c59ee337df4e5f9dcc920a5fc0d620dc07f20dad 63f4ff5e0ee5a2f390af1c32122ba7780f210229e5a5e3ed97bc1c3cdddd 456e739ca782edbf4b810552368e9c734b0c78b0b8e3f8b2dd782862b743 18871bb1ef087828cc173d7b049811fcf598b8efde4d9bc5447f4848c980 29c854f3ae461b9d46ddad8ce67a521f3c811a81a396cb0f80f3c8d8ec88 30532fb7f9624f7cae0f8c6df875073333deb28aaa90aaf486ab8c932553 ce697b885e71ec8e40c7835cd5d59a2c695db9e51216ff9b77a15b0da637 17ff25b05b939e45cf7fbe490e51e9344213b32e115c2de14d76dfd58450 88de645b0e75042a61d82fb1753c445ad0a956a1263e5a096b681d3bc51a 9ff32ebafff7eca8b59d40f0937eeff38312ae57462c7bf3b1fe24d2ba8d fe84515270e09063ce3c80df4935e409f62eb4f54af16a186d4329972b9b df15fb08461b688ed49928429226cad9f67c9d636d1375cbb7b08a563195 6b7fe29cc9efa8d75c9e4919c8c2c54f401d2e0d7bfba40c50cae214d210 c6f3ea5802339f63fc4c1c1995787617f3ec2c806ce44cf8e29f76606cd5 836f6e5a2e423cd791becd3f112f25657dfed9366fc4adf90b685cce4a56 98e5fe16d7542b913fbc01b288dd13f43db2b1ed8ccb80159dbdc90a8132 125df8df547c4851ca609d1f6f4d647741260e845b457937787827a89e37 cda06bb191669ac84b8608eae132d10177f3fc384980f3a6e439b048a38d 0d6b9cef09f3f2d732aa71bd058169d6d0f8c9d146d9da046774027559a8 b3843f6116b418427e78476ad8f0f81e8a6b12098060ff7dd686503f972d 6c42fd6cc29c083ac3d72e3751f21d2e44a572eec80e81ee44c90faa7afa bcd3eceb98fd4068f6c3a4ded0e6cec523c9a0054d1fc2a8d61a4a26f9bc 250b8f302416924ab22e722297888b85b9c12f8dfd2a744cbd143f9b2514 c1cbe988d9cb4e77d90b2efd5c2a528355a35f7c4af039c7d1d756305967 b847d4acbb81263d4992c001e2a262b9fee2d1f5022be5b15e1d8f1d67bc 52227344ee912c018cb73e5f47ced54fd202627777bb77aacf3ee6b22706 fb2fa9062bee87e22cd2802e7706322648daa0c624ea885430175f746e1f 536f9a8e1c610c4a761d07248426db63c9319a88a3fa449c3fb8ac94c600 3c745e6bad717a3b2ea3862d1e08512a98e57772a62f85f1e2ffba40e2ee 43aec11203da9ce5afbf673436f2db6af85bbe89d802f7a9e5fa25a408db 69e51f0577dd26f94cf2ba2fc53eddd6fbeb534af15f74f66ef8d14e7ff7 7d8a5d284c8202dd5a6053ceaa606bf9259923825ef4effaa8d878652a4c af2ee43ed26bf3590402686c876f86c1ae95046e527617cdd3c429bd4cc3 f9654d2c76dd4102471ff746fa9fa379b16df96bfe3836d43fcc0b8e9512 0c27370049aca4ac313e1d50d72d1814f2566b8b29fa9c9c20d048874372 2a766436776783b939171fffa00e04805a8b58214d4f114f7b9c3c17ce74 86aea2bcc895ecde809502bde57981318a93f23016f056a421b733c4590e 34ab08bb348da4a48f19b6befaa1ddd2a49a6c440443028333cdd48c85cd 698adaf3fd8676739e44400a98b575be02350576f96cfa54d4184ba47555 b8d12374b86d038d085f7fa51ff4be2ff5981408999b48b2faf305212ed5 4b2e371f5a0074cf68d1b0e5cd279bbc8bbaef694a89a6c43f518d01bb4e 8402aadf34e96e9b3fccab4cbea2741d3fd9adf7af32388f7771845af999 65a6078f4da335efa436be36903e33a743c112c0267309f266dd44fa998c 9a139704e400b89dab952eecfe2ac09c82d9f4975371ccc27da37890ec84 123193314d8a7a707c217ffc951a547ee5b6d1b7c8ed85bebd9d3f4b9b09 6a78e5f7df88c931e3f396973974454e59340ca51dbfea1a00de084b6463 0e26c6d6a3593b828814e27db0186bf2a87eef268aa1b135ac09b52cfe53 051cbcc88cec5657bd47f603c8e1a6249161684fd9084ac279f57a4f9bbd 0a546a87e147b62ac860911969a29b8aa20e3aaad0079d64e6bf1b0f2ce8 f0c54c9019207e1b403358253c2fa93a662f63b9380b65c5173c198d86a3 d0dc1800d1f5378da39ce8523eb62c6afad8a0d7ad1629f2cecad82b8fde 38975303768c7d3a08b91478edb3c45a8c6b7725ea8596a8ed50b8355fb8 52fb8966479d12e1086223b1e6523a65fba81dd106fe254f7309718768ab 009ff7714a8c363b09dda73cd3f81bf9c0cd3b0c806cf3b7bbfab73e46fa cad2480eeba97ae68ec94d3d79aa01ecc22067858effa9d7b7f997abd2ce 5aaa8781e5499e8580c405681cc63eea53bb47e55ecc5ba2a7a3c5472df0 34b022f455c60fff971b01583a29e211a87f7163187b190b0c1083d696b5 86e9438fd8baa45101a5edcd1be5ab9a585511089ddac8df1b1fdbe582ab d945e67f99adc4452988a9859e39c90ef794c5c4e62997085b7a16a0d901 07d08610ba175ad66377345662da7da4d8fef847ee5d57e3ac54b928a095 7cc1c944e7ff14658fe4a641cd26c61105c0f136a75950764b69ca17509e 3c19351d456b22c87c55e8dcc4acd3e150d936333ff36499ad6b02b6403d e0f12901301ecb2eba10324ba72b58206a13b8f37b0aeb12115d0c12879c 8ea8a2eb70e85c95434564ba3dff481c8972587eff74eebbbab14fb32b8a 84b8fc42ebeca65d25e8c32c19ca5962832bf45dfda4e871508aec318495 0d6dbe89019cea29e40484c36e33d76b756255531add1db24c03b2a64a47 bd8fba3fdcb1f5b96f8eecb60d5834ab001a70740498720afb6ec03445cc 35b51f7987109618c6c78cbe3041bedc69b6fb128142cec5c8683b558afe 3024eff7a12d04ef59a72e156df11d33aba08a8eeb16259dd9529cd003ad 4ef4137b6ff1654236473dfb93f597331a5e26c7796f528f65c94fe07b3b 4f4dd49034fa0cc189dfcdff70c2f1c6d3df30ae103e2ac5cff20664ab93 4ce5c19693292071c93bd590383e0a1931e04d1ddd18071dafb628f5d747 2e457bf81d6064edfa8debff91701c5038cb30865d6122076a336732dbcd b0a625548773d0013648a76f07bbdc9c16284d158ec7a105ae37a6227941 9c3a2f360d0c7a74d6fdd0e36dca2a8bd59945a4196598f690878f84c894 852c1811afea4be3b9f6a5219e6628c66669dbd8fa9a0cfc2dde7716a356 fc4fb271d8a2cddc8d4684de447355bc7a287dc56852a638c5777826eb6e b72faccc86f80beddd0d649a883cfeef4d74750172a90b5dd8252592fcfe 19ffaad868e99562daeae70514f5de296ef7b57e6f193737abb6aa317956 584423817e11664a67389197ad9f8f771ea5955198c9ee40a0761639e638 ce9d890df468642670235f1373d3ac6b1f43b5777fc0a91a96e095e89bb9 fd62614de456ce7afd6b855112367573fd9fcbbd4a4f9c676e672d62ddd3 4a9bfe8311b6175a003cd143c0df15e4c0b48c735404086e48aeed6b6fa2 1fd9f40b84215dff287f0677904e2ddfda774a4019df45cc877f553e95a1 c65df1d67bc0c60e0bba4d205c0da3da80229fdd71859f65ad04506b308c 2b783839f31cfe4425263224f08c5c7e98a2c9d3dc8ea5ac1920f4e39541 3262e0836bc019a092a0deca104eb2df6b63392ae8e2136379140de5fc98 b0b69860fe8e31dab5c5df7807d19bea34ac14e0abc6f6519c51247b104d e7d912c5bf6ef11b48fc6df84512e9f5febb48f72ff1b722bdc3bb2e835b 2e7cc6324bee84893996b8dc2d4dc2793a4f69c18e63daf04a7bb5c0a907 6e2d5a343e134cc3c89c4712900656ffc202e1988526d80c7fd9281fe47f ba8ab5d025e63a84051f6b13167bec15b346212cbd051afe7a98be3a2491 f3c469718a58e783ed91f90e274fb4978f8719e92a99a1e8f142ea7e1f2c 46aff0a2fb50f4d105130ce8ea309b0e480dc8f80d506172b609ea4bb4e2 bbae98d8882814fb273e690da990b60a9cda20a2418246bd10ae67d846a0 fa815ac25858145adda106a6778a11877fe59a2abe300d7db9bbab31cb5b 960b7e4ef91d4600886d8795dc361cbdddde05ebd54b1941f426f7fa8399 270d2f54c998be92d146227270a8e89af90c48bafc4eccca01e6322afc16 5743475e752f39bdaec49297290510ffa264342a0afe2985f85deec66c36 eb4a1d46683ee7c591a89b81569a8566afbca26810ddb0970577a76ec8a0 66622606b08315db0f2e6c671f3259c73637d773d1a180aad66adada2a65 95b5f481e5f59e51cba876fa06d21e1d674cfab46a02d267e20234324d08 91e7847c13c69bfceea3ac55f2eaf753726bceb0de1eecf42ada964bf9e4 75953302c2fca804b70b779482dc9319b40381e09c0096460ae113c19a2d c9157fa138cf0e7758f71008e71d0f7599744d647b09b16e3c795c56ee5b d14d8d63e7a512900d67487975ec9ceaef69572fc3c2342ac5d365e8a4bc f462006b5268ecc1575494cad9a9e7a9e8d9affe49af647c017743ec7cfd 5e66f4e4d845a6bbc836849274fbd270cbf263f167df7e26ba91f21c60f9 6257c07523ac37a2193010e976965cbd75751e312817c0564e1c5ae0cba8 bd12b01122d07020a0852120680985a8ac987bc33be863eec52af13435b6 e4048d951f5bce36526e07a8661cf2538f69d1f223bc53bf5896437d1bd4 6f57d9698f642f0e99c7392d8ee47134e34dce94d392949b418d9821e12c afa8337323e8469dac24dadc6aad4a0dadd7ff65694ba3a27964d28d8eb4 1179458f91cd3f83b8f119bf5e76184dd29cc4c0718cf7945dcecc993a7a 78739363136cec7f2fb495eea8cedb3ebf14373a058758c442939d367744 35554851e9519b6f09c31ef26b6cd997dafa11da91fa9759f17b7079164c 5b47b99ccb7a876fbab1d0d5d1e1a2683cd6914e6b3b755939cef1c9168d 30b2738c4349650cf86c90d2542fc9b90f36a494c035a1c86dd716014aa1 6e6b9ec7aa03b16554bec436511dd3097fab1fd0cd49edab96f74e8fd264 00fc748cbd9ee1eeaee24da30db6f8734b52818b3a5e510aa5c14e420608 98033e7e36cba9a64042cf94a74e4b52e37ac027c0dc69bac4944cce12e7 ad81aedce642ec34ca23e3ff07b8cd35dff19f33c8d4dbb56a52534f8a82 7be47ad4aedcad83b27338409fd1101c4dff3f12d3df79ad1fce65b2f419 451dd059c88bf066413e23de27d3621dac2dcc8f9f3620dad0f4b1a6e8c9 e6e8adb552e1eb2c4b2a3b73986ad53ed9ed8911f82f750df05cd2eba3e1 b0df208a87fb5ed44c3296b803881c1d9776d13350cd29c3f716f0b5a8b8 557812024ba70069be6589aa579eadb1f657712df2570843d7c5ff7f4009 d4d232d3547dc8b92ed5c4db77b76255e661ff8b163c6f3856de5651b597 ec7c78b84f0c6c1d6ea3a82286f1d3bb45f708d564e139e81f473c705ab2 56346328daa64d1ea8645dc10fd449092e0634d9d7344b2aec3c75f6b6cd 8b3f3867ff3cbb0f556b186ee9a7c26bd2d17c8a773055d9d5013bd2f937 d697a770c57bdb36d922cb911cd14e7fa14160be19c1a052e297b1a2d682 d4bbc9f1d2493bcd7cad2fa75d904c5f5479179daf7dc6a4e0d269baca2c 4f2430b4c8cf1572fbdc750a05dcd5b09fa3a9cd6f2f2a386e2b3d4d8e25 7bd43a783b38e63bcee503ea96ff2c373181744a607f0cb8d281d7db1a6f 4076aa3e2c61914bd796ef8a0873f79f964fde28b792ba99a20c3f1f5ed1 fd189fb1867c84dcd6af43d49420c8b1f3dce7dbae71deb17fe45644db24 4f44b1011c7c768ebb7254f4daca64e9ba87aa7cd0f0c4b2228ffb9ebdcf 3dde4dced39399ffeb348811547d025320a88b480943a339e2cd2fa3605a aae87939b1d7901465a1879bcb4c5be1a179e7e371f1ba2e0844f88afbae 9b78dcca47ae8aedf5bd3d458c7d4a7a08accbf880d1f1dc69c636628df1 ebdc5c42ff88ff8b66351f3f72d703e52f3ce91e4e00759753a599fdd863 788e99858498b66b93e5083bc3501c39a9ba928b0d763c28826fd237e949 ef0ba85cca9aa20c405db6d5612db718f7b4ad31d253ae306e4d7cb615c5 9ae668d347a4e60fff7b103f8bd0e7cbdb142a763be88ab40eef6b8fc200 458d728930ad0f94fe52acbf0657c4907cc7942710ab1fd8bd149a9c9def 6b8dca7db9062aa7b1b011abb5aae8b77893a023f9eeeed4a20fbc30f922 282a7ae2f1acff64151013d6b8ac2eaae58171a10f80bc18c3bbb5de1e22 ebe6033bf83040629023d74ccbab3f1923cfa4a6735e1dfa8a1b261fbf1c 397e26f3ba9c2629cfda84dfa3d1087ebb19dda7e2d76e30dc2e15b8821d 5291da1dfd73940e5560a8a6dc91be0075e3ed8d9e8cac85ac20768d868c d2dc45deadcc8b59aabe6ee5b2f891e0d7cbae820f83479332bf97074866 98fe196c72ef72b52f54314329fc498171782bf160e1110a19b8208fc591 ef0f0da71af657b43a7cc649a8488b759f7b69134b4f9dcf79daebc1ce52 cc8015f324c9d46320f44e1551eda6d86139dfd1db814cf38a22a89fabb4 f75fb896b00e769820f763486e86668253cc466c1529a5a924cc337c4844 8851a381dcef63a0a302b65203d6571a1dd1fb9dc0c3bd6aef4891497033 109ceb5a481bfe442249940ec54096f1d0f2436d9e60495d0acff967a741 b30467d24ac6b003221318666b951efd45324987b10bef4aaa0ff1df6887 377a7f70f555dfb9ff1001c67438a167a00b05d2c37065655173a7ed9ae3 42dfa1497fb1f2fed6098901249a085d31b66dbb6ac25ef16c106b0a6ff3 47cdf66434dc3f0012daade80b942d522cd59af4c31c1c062157b3d000b9 cb86e2aa7b4a5bf316058a0d5a148eaa2c67977faa0966e4c3454e08df14 c2498ad76e389af65d2c139a6d8675298c46aceb7dbe6904c373c06e5f71 399b2eda0b40ab96e8be991ddc39f92f1d24797f9ec9f2fae25669b43754 e2498e8ea5c44b176c3fb3e8f7a7a1481275a461f2549afc4cc73e28417b d8c5212c13105eab967daa679ae822b9b75b372a99c7e82d6bd83aa2ba00 314da4ac51b9caa30d80507505be24bad0a87c5d5d7336edf60cca4cec82 01d243c3932f74d171e2409d789aad0d04a7bb22fb6dc3ab92ae33ffea89 7c484d741039f38c317ea396a0fbb9f15a27d87fcbe007558799bab73212 b6e5faf2080ba074724eac87d88166dbc1464cf5d41b99428851ff1d9924 6944511cf42c3f9248513e9e51593f253d89c604388ad7132d6a169e9dd8 88e020ac1f8ba606f2e1ebb97977e505d8c40853653d8f398f71cc9f8f9c 540c22a1e6195ba578ae7262fc845fccf77b33f33eef266489af8b81a615 d6a13464bca58bec16c23f31d678f14a938bec31272dac3ccb1b2dae577a 26bed852fc59843176a5fcfcfa0ab7fb00d2309de55c82cb9049f44fa61f 1e313205a76317c4cf529a4456019d970624129681f46a9cd7950b8b5c40 61853040113c8115319e68b37f88d864c6957df813b305d09e6a1716b10f 26f2ef5c727fc77aabba73e12b5ae6416ab19f6563ce14046b715bd4cb2b 1e4d315f42d10f74cdede82bcdd524a1a54609219084cf1cdabfe72cc837 5478b41614bc18a914903596d6fc2f361ee519f875385f4ecb50f7053127 4ebdeb14a5dbd906a60817246042e3799bb3ac647cda7244b7998ae4f3bf be5c767fd2142e48518a4217599e0ec2cf5e86c8c270ff8b02f949ee001d 6a439bcb4bc7d7f7c8167c3ae0a7e59687fb8bf6f37beaa164541b8eafd9 2e9d152e3fd0f413c99ccc34fcd8aa455a0b55dec846a5874b94fc95cff1 bb386b2a1e22cd1c3914264b6d5bd1746972857c9235052d77a6c0dd3019 f8a307fbee63a3ef12b039b224108276ffa84021f1ac5b745c54690b3ff5 87b4b1710ac3533a67bcefc503adf1f4b62b2910b31965e364eec9cc437c c40181a7320cd52be9c546b8f1dc824312216c2fd8232e2bb8d40ee2e314 54c09772a387f9520e331456c269f51a078e6abd9fb6a68bfd5f557215b0 bbd2227b8959cbd1bd4aeeab094dd18e891c61fb00933c0a0d76174d169c 0b6445d34c00dc9e06d85eb086c18f3be27df734ebb9cf078aff65144385 49cbe92a0c0d25efe4a527d86f158b4e9d8870c7ac5d6c059643a3298079 cc20398324ca87273b86ed801057d797d91bc3cf2f96c650ee1566cd3cf8 656cc577d38b830201be718dc9a494268177a5019546eeedbf101996be59 3631654b638c75a6baa648cd1e7aa9ac1ea60f4cd604071c89dccff8b3e4 30a57ed6de11c5837e78956ed991058f3646219beae94e4d9381a33d48ca 9b8ff12b54a73ff869d0eeed7e098d80152295e6016cdd809173c57d1f5f ce908a37010ad4c4471a53451de9b4363b63437c374c598f548f145d3d28 8f42531fcf36a9cdf72521f1c0868fceeeb1857ea983f6b75ce245d875be ad1bcb8819e5464518e04717b78bd6e335f0ad77b832af5682062a1e2ac7 7cd5edd5dc372ee456c96d38bf8bf348dac2b4ebbb2440f2ce97b4b337f2 e23247e3e8423bfa9237ca6ceb6fb93f960cad894a96f0371168a3322205 2de9b3be04b022ab95c0c243486e35197721fc55311dc55f87bc72d09b6c 940ca36e6640aeb66c394a5949a604e7f15dce3a008bb41b0eef2840a357 f348443b4dce064b4c15e5ec52e448c985faa1c3d6526270b1cc69100995 9a7620c9a6202619a19be410ff7bd535a8b2640aaa459dfdcb8f2bb35112 626497e8a397d4f9e04788322a738dc8907cb64315cf63c95809e90d06ef 02f72ab04aa61fe02eccf7e9049ff9f3ef2258a75656178aaac9f3c2a26c 001341862d526cc14e92a81bd63502f959066e0bcd659cb9b5a45606153d d77039b8c5d5b13565f00d95a41937cf97089f3938e39659a64dc3d6046d 0e9ef66544caf8a206635df49926a3eef3fdbc9dccea2886ec855f1821c4 b9ce1d02a19a11bbbef43a7d4d536715548a62802f64af30bbcbea8c7e55 ad56c801d8a569c8183615a78cd393ca42c103f155941e845712c335f4ac fc7807202b92a983111aed241bbb8501f15560e8f2157c29752bdcdb2740 08137277920053d6d7dcdc626a574a82a8a34f1e77b2fc8cf7c1a7322f22 dfcb450259eb450c52b70df3584a7c54c813db41e3dd81253a03b02bc252 346af0160716355797b6f8210c453dd7e1e756ff08c7e6a5f4f87605e1df f35a130d79148a57b7ad12d94a129fe3f055cf974eba09a2b13deeca2e02 ea818a58b81e8743004646c7746110bc61b86adf2d5d8c45a6a5461eb344 97fccd09e711f47bfa742c73f87b257b53f30cb68d151424dc3c210d3e8a c67c2495a8236ea2d7985a5e1deac699d7b700e6d38eee2e93b191baa5a8 a2c916d206c63fe63427aaafed2b5784276fc21eeff2d70e47c8540dccc3 e00134642b703795cd3702631ae2a90e063a218b61e5b89bbcfff84f567e 37a31a9b349717a8cdb9c9377215ba838ff7469bc486b64ef2b6d92519c0 bf0826e3652903f40e400689f5749df86fe3de178e21e20edf9053081f65 10d8f19acd021cba481c484d30ead3b84ed0190087ee478a17154b243346 c3938fdd5340cf6e47b185e64abdf44f8cbcdb8294492b91929bfeb9da2b 033c3acee554f0f1a7f8a56df7c06a3583c1e9c5ca458d40e550fdf3e2f2 e7be8312d5fee98543388edc8a04ca29f1b82b7ab4adabba3f2c331eff35 21b2b92f99c4377ab827a989b423750d36addd2e286e7f3b694e29b8bc40 3693c6f7cab5fe34f1e48c8d41b47831e8c3f5be5ed5142e3c44acf5180c d41fda149b1f4aed36812e42bc184227f5034220f74f67830255e1caec12 66defa358a87d2e3b4b4e7ef30181570d0b2b43072ee0311c2c157d32ee2 bea8ea4251b59f6b61d2b4fdeb654deb67aa3dff4ad65b727f0d6b7d6152 3e4b44d99ba5cd33540f340a35ddd466abea4e72e504fc9baae51d231c33 a8ce7dc2970de4c1fb5b096a3d9c641ef77dc9039886831ddd01c4f21e6e 168e38bbdda5f4308c959c7bbf36a42d042da6862937eb20d4fa2e592774 1a58da5cbffd9553beffbd92e6d64871d8b25d9049f4e71970a8ff5557d1 de83dd24286d6c3e4770ee00f9a1a0b0063c99994aec75e84d6f9c488434 d1f3dcfd0a8bee9ed8257ca97e75e8b1285747184d6d2228ef95d4a0b8da 252318abd35c8398fc6568b294d90ab308a7675f9f160140f0a08c88ad0c a1ca2cf85e4d031cfa3b87635f1398eb7dbc666a259f02db6741d13e11b2 30025dd6dd64c438409af109090058151e4dfb8c0e9cd65935c4cc063cc6 100fde70896e23e3661c7fc1b8228b26a55903e997f80207edd8863fa074 ee4ff23be585baf708040c9f8cfdeb42fb8eb71d4cb6d7757e973e4d8c9d dd082712c23f868e1135ecd91250bb4335958b07c12fda75eeb56be19d16 44c1f76a8811c021122619f751cbbfeb1d3dc912999017fa163672a1ef75 4c5cb78962baab76ec48461b492fa88f9897170de857cc8374c8bae417d4 c78a56047024731f4a45145f0393a27cab614a7ff747bbc28e6880d4d01c 0a6cf317a1de5bb5adfa4b5fbfe0c57598c79f25ae57bb797a489d51f85a 9b9cf8bea64293f8fcc43b0d5484df99dbe19152692ce756f6fbe8ce5831 cf4b8a5af47524e272c45c62acbfbdfe7e60b05bb1a1a6af0e9210012014 69b3dbb49ec7b23a363fa68417b7118dcea71d4aca2e36f88c6ddefb7020 5df3ab7c74cf65cfd01ff85faf99f172689737331d4c6cff7a29029772f4 87fbf625f17bdad89b4ac076948277b4ed687840301016c2b7ad4c6d02f8 1e88c75b7a04d724e234e38a38269351582245e361a42c75b8256afd5624 b558ada2190f960a896bbae7a8c57e76da10dc29e69bbf3aa86214c001a2 7b39c1d17c548da5601e86a5cf53e7b1896bf003aae9387aba9b102eb1e9 002dd3754a378f3e49f2c6eecf47eb1bac2cfce11ac0c5cb063672d32733 563f3e1e891b6073739bc53aaa0043fc45e90e413dfbd4548dd320b681ed 70a7443a233d79e3f038d26975586e5cdd2115aa614727b1f6dd4024b85c ccfc79d10b7b6afa789db37bd0e8c423c1a4a8681b5ff3a9fa1f61a46e46 c4b1836d1aa41a89264a7f4b1c259e4b10ecdf375bd26a1f412fe01fbdc0 3368fcaf48aa0ec28b1bd603a6a0d0dade66d14c9b7285569230fab76803 35be104305e4b748fa99fa31f23991608dfdd2097da292551136f255051c 9f7eef3fb7c7fdb4e651c3d03a4ca357b587245236f4ff3252563f6be08e f8a3ec09be2bf27b9120f7d37801f6999efb1c8ad1a08698cc59ceae2cfc dbf6bd8f94dec94f7ebf33af05f52c85760c63950b455510c6ab9398d09a c288efa09e8f631a59b03fbbc75bbdafd675ffacccf8adf71e815a4a49f1 4bf70e42db0b7347b5284e234c24010e2177dbbd57648e398fa6b54571a3 7ba8c989503594d03c6e60871a7f96459902215402ba168b8d1d2685f5cf 8645d5e11a1769473027f42564c2966c10c0dee1ee1b6975852a4870d492 83a470e623337544a7cda5c16fe2855ba2a548511fb4d4ff2e3e78d108e4 c734f64ee2f12cc9562cbdf363efaf5201b673ad00583ff108aff6b68055 a5f299452d176eaafb92c84f114c8c22a05ead6564a3371420ea9e646308 de97d40705e1638df08704fc90249cbc0d2d3e884a4562cc27370b1a9738 9d8efd237e644a7370b8b38ed1c377f522c75f981d878a5e87101e621df9 d85c7207bbe5a87ccb607f93a2e52f660e05c83a7a6ce6d01ab4b62a1ef8 da47cf97d4bba0fa8effa9c0f61a325a97ada69445f23ab1fe27a66c2716 39f839203040d44b11ecc6e805fbe88843b34c4fd52d1d3c6c70ffed433f c04501fc20536abdffa429b8dc8192b2d45dd9d646049cbf40719c3d6747 73f9676f9fcf32817dcb55402a72c56d74aa4ce4035687c730b6b44a9cc6 14bca5a3fd17c170ed949e588ee45e89e18b07662a6327fb9e8475c43e5d a1b0af07c23774b19c9ef59281f5d884990d6194170d8293a86db52a0fe1 7e88da82209a00a16bd29b8b2f13fd60aa25fcfa9745f57c8216283c1d6e a1c119cb9b8d57c004195210ffbd56395a3ec2d3098ed38f389efc0324fd 0e55ea339b3892568229d8d3e205a821e8219fcb1a7713fcf3450f8bef97 6ca0beca47376a8ca73df85b340c67efe4534d459617996526b5e5d3d19e 17cc5449e5ef2b82b2c4c2131ff8a19fcfe6a186a9840d872d85c40665a7 a04e67ee26b8bc9206c35b44c8f8a1afc3867d96dc6d48bd45063be25b88 2e9bc0d0948c18dc870e6925818e1fe17d336217f174eb4481f5c0ed37a3 beafaf4d46f857811b6728bec461ae6468d87a736572f4ff95b58b04564a 9d3c22754587df15495a319d822b838461764b73483c1f7cb930eecc6f74 24841ee10e4087e951202fe88a391375c96bec4480328a54740213f74110 5b12a39f19808f3823507b88115d468c61b212a8abae7480e39ba52390a1 892c7ec50271156b4e8076fc3ada222695df372385da7b117a29e04cd2b8 0a320f186d61c963fbdafe9224e537057c49e82e405196aab621b5fe4011 e1782a747ef935ed8bb11bda39a141cc0ba42d04ae123383bc95a1d03a85 a9440010c3b9613064ffeca76197e10919ba5006f35837ed9bcd7de5e6d9 68aacb6fc91178091fa467ef6fdeb728e17293dc89dde5a5261faa95a2b0 000fc750e7073900d4d88247da464613adc2b3903a6132d96ac0e1c56438 5ffbf6249dea76bea2a99160632dd2fc2b99133e9f2f470f72b45d6f18b4 5020f604b06cd9174ba3805db60eb9c5e6a9c789ace76ae9c79c1bd34434 e95e501bc968633af93ff4883c6a596776254c0c74993710327086b2886b 02fd3e42a725a03459cb36ee34a094139af5fcf487d3dfe63fad20bf0dfb 60deeda2acca3510e963189d1256eabd81253f7ff9d11263fdbc1dcfda3d 1ea2e52005ce3c605c993231258a717423f64bfeebc34684efa676358b9b 543c2042bef954829fe3246a879845b30ebacb43d8dd7a20fcfedf763ad2 c5d20a798b69e08722dce6a5762e249ace3055b650d9e110599ea30de5c4 fe7200d5a8da9e1fe2686350d0df334877d0b9f6524c552d0b6dffae125e c4c18f7547bd51c14288e4abb7f8a1a00458596c390aeee6fa308ac1f788 fae30d7f8928afc91d4de6352d20b19d8d8ab122b7378cb379c5be7e3ce2 922fe667ea057b5d7b3f0b51c7bf0c85f87ac2f360d82c38964f4dabcc91 04b32f0fb8802235e8e8d9a5997d392259074c00af2ce1d2bf7b8e90e2e2 ac34185c68a03bab8b267778292b227245d7ff8670786e3f746f86b9d4d1 7190db859a0e144b2a61e6ac9254de5dbaef20e2e9db0b2ff654b996e962 f55e465dd238bd1643ce59dc2b5a58b1e6e4ae2ddc2d74d79aff3c34e4e5 93e051fda236b79cc0db268d2a89b1878051223bb8f33ff99ba87a4811c0 b3bcc01171d0a731eb732ecd8749d27952c27886b252f9c3d190419fd290 0987a0a255b9753fb7aa70c37462134c467a2c4b7920bed9f9e86f8f98b9 6d00af8b05a4bd5f14c2a0d914a9a84160d554fd0718f50ecb5df5e76623 065852daa74c9ad6da07a119df12c3577fe276ae551d48b1c5cd8a50e84d ec9cb0840520d78fa7f9a7c2071e28cd20ec7649b991f3818cde295cdb60 85f24fcf93147e9f4dd084fbd32525326d2ea147ecd5b6c9d9f4a7166663 ad18bf234e9cb92ff72138a8a49e73e527e9a6488a4ca808aecabc94d693 cd2c0c357d285f65006fa2f9197f61fbca6ef07b013e2b558ab531d2fd27 0cee7fa8e467fab885e90c5884843aa08e2bbfea0aa575643727ba18acc4 99ff34e3438645be2aa71ea491e54687cd305e12bbc94faec848311ae816 495b013bc5075a2d2ae54a7ad7c9105b64356cb51f18c2c28e3a83b9d81a 4554dbec9bea9a660cf7e1ba89e6d4dfb3eec6a3de3fcded9b2d614156ed ae8cfdad5ff0efee31da3e6a54d94ce9453a1caad9756d91be85315f6514 bafbc821ee810bb5d8e1b8f05f64f3f72c4b35d424f7e4dc3ab581b74ade b6d6297cde7aa8278909f269fed79b7dfd39b1c0338e01d556c4db9ca3a8 578ace3ec3d743ed4b9c0145e4525e8c315f7a1b98584b975c70f0d41570 8c8ccc13f848b1d36ac8249b73638f95de0cd27c7efb52bed4339ebda481 2564d7a77416ddf4cc88cfb52d07a252d89353c6826ca1832a153242979b 6cee783abde65c8b40cf4ea7b42b8dbcc0e02423dd693108006f6a4aebf0 53b666c3cb63d1861f86eaacd43bb9bb6f2c3a17293c189331d253b44775 7ee7cbf4518babb73a1d44874d7f0625e6a013c608e991b4ad17a9adb367 40d25e3e35b459b422f7370b134cdfff3f3bcc4c32b4e9ebf6a2478013f6 6933a1fa9403a2f1161ec632f1f04edf95ed0f33dad9665d54dd9db2564e 51da7b65978cab50d6dc1568976e83b056eb0e3a6758518b6e17e9ebfe49 b72eb148b472ba144bdc2ac95744c9bf1258f0a2e47470ab0eff90e190a4 1108914ab8c1ed6b11e0681778521870e80c16af2afc723cad8719adb62d 3939d3bc8cc1d8a4e07e9d734f54eca33d936d2c39d5c8055739c33e5335 9bd40e576c11e93b4b4c122bdbc9b1bbf44243af4f0bcdbdfade68c526b5 cd74e29ce3f70d62ba83c489034111fe8e4daea2f01f9d938abb532deeac 0e329f42453ff5c15dec2aea8c198323c9e8fea55b3f5dc4751d2e2e16b6 154e7f2add46860e9ca71dc114c99d80e7ea1dab51e925de161cedd678ee 6282aff38e3cd0e659549c970613209955a3f581e1abe485e56402a3db0d 1e9b8a9dfd05c4b0b7f97fc6d0eed0b69ad6f182b1d028add2f24463834b 13f5c1307f91d363891824e81108e57cfd5211f86400d3e96b107f3b1fe8 9c4908649d04a46dc3cee0de66af03a7ff9f4dafecdd6df4d93784cc899b 527784dbe0718050fce185bde3f39debcdd660b2488d23ab1cff87b0546d 02b48e7b7724c9e87b71bf34b5d6640e0f6ece47b182d41c89461f712849 c6cfdb7e3f5ebc1acdd12d65a422ba362a8fd6caac5104ccc5ab5fc04a46 e4309acac83d659ddda256ccddd1bff9ab3622450c4fbc89c82214f00c42 fb0311bcb1b722a691ed839caf9024fb1671f18e4639c96d84718c663a43 41dec037175c6bbd288bbf5a0478298ca726567a9b74c32a527339c666a2 94a17f6821cbf243d13ea4b1603c292953308b566653423e7301a032e5d5 e2b93f1c1434893633dd19501ad12728b5a1d9d36635b589fa2e151140b5 43d7c5e469afae8e80c4fc1d9cb6c3823cc1bb7ee40aecb58cbc14657922 26b19e0fe79235115f6a3afe19f98c5db63d372dd7c041cd940f4f79f247 4d9ceea0334fa04a97dc9773064895cf11cf73f11b4684f06e48f4469f6a 1aeb2cbbc52994dfab3319dce3a0c8c2efa9627496f8cc84d3df3bdc4ffc b61672780f294f453278aeb9262e66486856d37b7647141a82e049364ed3 d03f925284a3f1fa3ddf4c0b48b3fe22e7df9aba239d33cd300ffa8fd4b9 6192bd568fb18d325caa8e1f1fd4b27527417b034841fd49e4a77f217062 3cc8b22101166d80361eb15fa9020d24f61007b0a8274df9dfcd8e97c855 68e76d34ad5db1779b02f034a69ccf9d4ebaa188eb3017eef5b22a0a5526 96a574907f695098bd8a4849d5c8311f129447cd7a3cf88b8191aec0aff3 0a38a9ab8135608a7829207a7d242f6e1fa7dda19f5e4c28560d42db4405 77cc0c5f5803eee897103eca0bd944e320ac26553bee7852eaa733bd13df 760056b2f5bd1243bedabc3c1ea0531017d74b47e18f801a60074d6df849 fd0532234545e5b5e112d1e7385341d39a89551c80dc2deaed5d5da2a4be 5015d297324e92be64c68428132e6ec654dd4bdcc6640c68835ff8a05e09 9604b8cd43d3af2b2fe10c8afedec5a70af8509d12f662338cbf166d9452 cd36331758ac4f4cbd7edd52139ad27dc52569877fe709f297444c4f3189 9d1945c81b14abdecbf31dc463a4148f04ec4fb9703c158216c0fbe65ccd 450043abfd4e65bf8b28cc148252e9f3e797ea0b57b8721c94cbc2ea602d f2c57e87938c887a382d2659226463bc7d6a1da87f4a341a59bea458177d 3f18d1213539dc0e301f6efe0111fcf6921368be17ccbb7428127e0c059c 2c5adb2a3f0197f0ceab77ff7f3c027a8ec3ee76cf5c986eb47cb60561c7 73b3a2da47b5a35394e29373dbd5c3ff4c9213a89aed77cc4f3fcfc49ef6 ec7557c521979a546983c106b3627b5fd2d71cc5f08a32bf49332a89c5da 71afbfb94c949a91220ab1f885c981423af93f73bc1ca4d92d9dbae3efe6 a76e2de3d0f74fd3255820636e3f1a6b7c18530623c12af90cdcd2c0a728 521e9b639eb6345d1de8fffc3b19c72e7a93823dfe3115e9e7bbbeb28cb7 3db121aed8920d47d8cc08ea2e472e39a4cad5881b5c4204f2b732af9d51 89d25abf413cc78714cb01b1d8ca5565169a919dc481f6d2e67f1d490aeb c5cc62a8f62c1a323ebb55ed35aa5c8d6f8b970e93205c2701cf4817bda9 94fc16197b469ecc5f5e9ddf0fa05640c2e571849571cbd26402b1eb1e80 3fcf423345007b9b52b13e3b034e8cb3984b925ebffe719ed4f39f3d0e33 43316a6fdc26bdbea88c4366d3b2f851d2b244cc4408251ae2c77348cce9 dd8bb9c89800b572d38c5d1cc34c740beebb5ddb0a8bb251655fb989840d 23205d16311a9fccf7c85f6dffea9704492a4e7a8f6c0bdc29745aac2abf aeba02b0e7aefeb92ba63ab0df844eb09d505c3dfc1058ce42cdd8043b76 398401e1db862ff9f76c05e8bc6260a4443cf494bc1755913d51745bf45a df2f8c7a9546d7ef4fb11e9d94e4539632c2a39606d04480ee459408d7a2 a869807a4c01881c1bb21c296a402b5e6e07093d833c3dff075f4dd426eb 87b1b8de16c146de79f52f5943015331eeb852809cbb8e1d6460ac4d176f e96f8d19f6ccb22abbbaa27c4497d91312c3cfb5bb913b314e43d2ec6ab6 897ba7c34cf2caa6db4bd69eb5dfcee0aa917d6950e36a68a4c22a60dcc6 9379d47544a58d640eb10dfe120fca843b588ca8b94f7869f97609a6fe03 ac86ec1f7cead2ec8e81977d1b946e459dfcfefe65a7bff67e66f5f78a45 d8df65af0146df74e024fc042328886cc1dd7779f49cdbb750345cf83cd6 78a6a8897577299deb38ad665dc4f21ce1892a18c256f318107dd3e9245c 1ad3bc93cef7b7bf057e33ec9a3f953251261aa3d1a8347261e70a46f777 3a84f3d4d1a0df6dd22a96429349de0d180310e17955b10fbf53220ef648 3d03c650a8d5c16d63daf65c21adcd6c2d0b5d4adeb2f5526aacf7cf42f9 a8bf4832fb2d4f73f3d5ffd984b572232f87bd3e59133ed3d2fa19f7856a d812515c74f7d851574019c532c25f8e163e595fc9c83e3e820c3cbf690d a62578a980fc0803eb6db9b1e90e3256bd4650816abe5ea86ce65c2eb418 d0adda5f3ea04e17aa8c4536cc471ac20236e66eca3619f161dfefa48538 6c30ebb86a7ad930fd0aadf2da69dcaf26c0f677206e2030e3b15b3662c0 ad03dbc1636ebfad1f2f2c37f5fa9856b0198c5b1d80b69c5effd94ce071 5135c649c26b9ba1266b0a5b270cd08a706166c0b320915c87b27de21deb 5d7e4806f6e700b7a06a4e29b629cb40761983e9ca8e34e869abd04dda19 0bfe5a6ee8b22d7e511b84ea584a84211f27af8918dc5af8a1ff2d360b6b e3ca8e66ba4cd2ce6a25e7e89406684da83ffbccccbfd0844fe3becd7de6 7764c59c022db1168d585fe25073fe00e30218d1dfe115ca1fc606afcb04 f2a082ef91788b6bd09684dea31f20034a91ab9d971366f97b5009fefbf1 ef0ad941654081b1e8f0b2ea495069a1ddf11dc56857d29533dc857958b4 9d1a0779732819fd22e437084bd9f3c4f2cda4d12ca14431937ab63a03f9 c040af1d801f367abdca7302e18a9050d6026fba5a5a7fad44e31593173c df277cd737d1cef59fe9684252bc0ddd00a80e023b88222494c1c8c08842 30ab11d1083225afdcdbc1e24d4ad5fab396d2e370e44a7571b230660d51 0a5076d8e35f7db72c0566dfc119ee1b8ac3c0406950a3c4a4da36bde297 040a27f70753a87e6cd593dc6be9962261a99ae5949340c5d45c94a9aa3d d636ce8b497bbb8123457c824f443a53b3ee595c38983fe3e07dbdc6acd5 5cae8be1081afd4857a5f52a3c925143507a3c37f1992cf72ed0d4c48d94 ae6caddc3bc87ac3a3ef035e02181f78449e4b063b0835e827644051551c 1603e2eab5875f28fc77beba6923428d5521c698c6b7f133b0f689f105fd bac30a8ed2f29f0255ddf8a037b81f04edf004cbe639c8db0f94d0c5db92 d34d66c2fed66cf8b895afc4e659d08388ea44eae83ce459e5be306750a6 82b627802990037157339bf142bcb9c08fafdc3c3fb16dc3544f62c6c7e3 3e20cc4fc7ca21e2c3f6c546cd78dee348f1a4c8cb548ef20c0496789167 71d83acc9b7b22784ad8580134471a3c79bc86b5d6d0d305c32e62042743 51c94f9df45d9b2ad5b5087a89f90d6aa033e4b1d1bed022f36147c7abd2 b73134dffd50907258e610c3b20949e141172b1c6a76db238c375021cba6 645cdc26b717428b5a9b4d3f32a4b1e22feff3bb93fd889e1def8087718d 5e3e650fe4a3330da9c37e9eb499df5a342d8ba4c0a033c3347cb25a31be 143ecbf91384f2381e323e7fd3a82a3197c189053200ae2c86b9d01ab0b2 89841ea7e9e9a26966e0def54de0b85d8df084b8c590081e444baf1e1f60 670fa12ab97159318624f2af1b5ec7dd83c1073a99398d2143a52d10a13c 201fb356bc9e90c63bb0bc2d4c42af4a8b9c8c4d58a1b32e0597c63b3f8b 3e893bd3be8c60231838f1bc78e73a6c8cdd5e7f2907f897fc8ee99bffda 7338bcefb5aef950e5549adfd207aeb15846b509fc57989883642498a381 1b8e5cde69c05924efaec232fa4cef302ee3251366ecaef57d25cfa3b4a9 e6397d996f421c900bebcf73b038fe7b16fd0a1172ac2f40d19ce0b02fce b8bc47da5344cb933c7fec950184f78acb32d3e5e290e84be753b9e7a7bf c4416ccf29d023760c06cddef2505806a65e1508990529245059afd301db 669d41bd72bf7a80a9df66b876b3553fdf4dd38d15289af7a1afbc53ffff 135a6348dd784ab42a6c0d6aa330b069607e2df3cbefce79d6f63e274c9e 73a33eb85246d5ebb986bfa923df68b2b8cf82af6c33e785f35b25b1d1d6 14de85a4f4510adfe42d75b5fa5408a59abe53859e28b3d000eb9c6a7d2f 67c91dd14c895ba87b9cb57b851e5193fcc2a443af85fe28df6f39537f23 a058bcf81dd8c04cb2c25040300f4c55975e856dcb4e21e2b5481bdcc056 01942fb25bb8a6b6f93e2c2a33cd478b44655657c557ebb080179ee5d98c 5cebe0b25bfdd952ffeb258014d7a5bc4bca4f1a23bba73c454b12960451 ce1752401b0151cb2e01d5c72595095eae91d8d3bd55a54a2aea89239fa1 76fa7cd6f16bb0733ef6ce6e77763a23aac77da88c8efa7bbb2991e472ff 2075fb25a75acfa70a04c28764f4ae4c12051b25b120cad2e3044da35c1f 94135dbd69b10de147321cbbdc814ce99982ac1d76ce3d3330e41ab31f3c 76bf89b95eab81af3464c732d5b1411d97db36c9063537f64756f205b16e d7058e2cb1d6946c00a1a0cda9ebbe924bda6c7d7b605c514a98133907b7 93c74ca858e82da3519188cd974b34daa74265db5bc8550d5f0b1173aceb 87458bce2ab1f96996c811699a0fe4a9b849d39023725e2b1ee7e426d30a 6c5c75ae6bcea6db41e4eb2035f7f924e6b9f0dcd00eb2bb014222e55fe3 87fbf5b9b7c04f4688d5ae3529fdacb38b5eb0af5c3a874c1aa6b17cda8d 1e22eee05a3da88449200d3d0d002db86f6c51b337c8e19f338e7bfa01e1 202612d50e210140947d5f350e84f790286c3f679a5d7e43bcdc337265c2 631527fd62d598b7ca1f5835c0441881b97f5197901ecdc4f195bc665a84 6823d2e41417373f8639567b228fe7b73d781f07a361aa49c3e9d80fe5b2 a32c4c1e575d194e841967b08d10405fa44eee2847db9372c5cc931e5046 9532f1baf577f680bab4e30b7e1cffa8574abb679789f69a8a1bac07b7c6 4ef5ce5eb00e97b36fbeaca9bba4a13b0293d34bdbc77ad1ff88e5744af0 09823bc262511c4724dd585e7e17d90f230f7a5861b0dfc42f0b4e49a04e e0ee4dadb908479def8372f334c53d2ba5d855cb39dc7c9550f9d0f7f77e 82d5a59fbbf34bffe92dc9e6668b68feeaa4f20053433d6749162bbac5d0 d428dcf2d58d49b127fa2e674edc7d3613b1342f4d0abd7f4c5b049fbf78 e804d5f16505ae7edcbf4d6fa08d72890f5d55199034572ab4b0c9a7e7f6 f5a403198864adf113caff5bf9d4ab5b16f81d0fc2188fc80875e10034d1 2e30c0364f8f72797f1aed525a2712a40d44210b813df5a29c84e9f6d51b 1d60a5f6f938faabf878d29e6ab252d95d05fc1adf5d4ce1c9e585219112 112bc6cd5c766411fbd22731794b5de0a27ac57d3c57926807469c360372 be529098c350efe2154b87f1205a57a0b04c5206cc4fa66b8793bbbe492c c3271fb4f90a28d0066e0d7f63b8dd01549a05afa5482c29560abd628568 75cac16100087540162473498c14087b29b86b7bfad693e81765cec781f3 fc80e9c7b410e9b55b88114191a1703c638dfbb469ed1dd8254b1407003a 319ce74ad419b077f17047a01f0bc0ac8507191bf72d77d9333c9da8c9da 733efb5305f49cb8c7bc451321add7d896395d269dcdfdd084eb3aa70338 6c0697e962929651164135c094d9bb1c9b949d5eebd3bb17f02c98c813cc bfb23c2c26218a2f4c639a8b9dff2c29406037f91938a5e1227310728428 b56f48108cdeb33bd3191eca89f947271983db776b2bc897a30eecf2601e e3b2a6f0e135397622aac1f2df523ce6e6bc720e13cb530cef4ab9c8273b d3d81563ac8a8e6c44a195112daf824bc7a72fcdc4e129a480717beb0108 5dee65ee4344d0b41ec0bcdf842566b1d9f5353b1f6a063ffa6cdb06ef63 4c8bd5a7a63f991d178f56eaca653dd67685ce49e98c7554745a4ac53321 7662d23e1d6937135d13bc2208eb8d50560a2baac319dfae478b6ba4ca5e da20222f0e9bdb0806320ed1665b54a347de0c42e9f77842de4d188e7e82 4eb2f0d7ad163f05480a7fa99c5a603bbc5dbc843774ca66e889b945054c 0ed0b1a4bb14324ef901b023c208cb95dfce928489789690cc45bab97be4 49f8e2f5aa9276c0571303e9788c46e7f789555bfcdc3fa9ed8da8ad9ba4 8b3ae09404664391e63a989ef1e24bb464043aa099e4f2d796e352eb2771 06d8d81baf2f8562ef46bcfd1e0047e8018cbd973021dc1c1d821af03f08 3f0b088a62ebcf2bf6c5b0fcfa441aad1625fdb834f943dd47a5a42eb3e9 a5b49641f797c288b799a64897f1346070461b6d535e0c4ed099199c387a 3176aedc7da7e7d9e118e55565092a36f7c74abf281720c0147f4e4f37d4 9436466c61ff12764e3043d8a6d027e70537164f0e7942f4aca42bb2cb13 6177ef7197e76f49ab403f741c0ef902febc471ad6c627424320a8c3a1f0 4c310c511b3f91c3937d9acf459999c18a33f2c852ec38ca806599c728c5 43714018c65e2c5f430f6270af52ad71ed38813b60440779455f9529a4a1 623cb9f5422b9216f9cdba913b9a1cd95da225e254e81012160850206605 09d03a034b5d7e32e3db5e5962a9a27711d4c3e29cd84057f7d0d7e80009 47afe896f8523253391d2e11fffe523366b05c532d5629a90741eab3d4a7 31d3f6d4f03ff93233ddf88bb1913aba22eb9aa6311e3144381dae29bcc8 639958eee59accfa06f35dccc63e0609f542f3ee5dfb1cf718ca3f328455 726f8f65e23acd970e4049225998371b63e35ae98dc54d8329b8db0901fa a63129ede21b158776981d4d094013c096e9cd020315d123c03deba21e97 e4b584b4bc0af25f5dce53c2dc0f3e61f99becab40799478be7f5afd7f68 e23ef50ad6645c967ee11206b6e791769428acdc370d64e4f2b3972e0e4f 442297199350663d6e772fc6777a9b9de215273d082cce4e8678fe9948dc 8d5b0e459cd02f1645ac5620f3571a40b4d5a17df5cff48b6c843ddeab5e bf58fe13d7da08e8aa7902119248b3b151da583101cf80853b0150fe05bd edbfb50a7fb0f65728c93b9df48ce8af1df1fac25c1d58e1ad30274a00eb 54cf2f16029e1ac0a0919c0655474b9a6936aee0fb74bd185fe7d70bb847 86997d34a40326a74356a4afaee67b6b26d1c1a7bcff8697b55c816ccd77 312c332a55315dc54f9bc0a0f12500e0a76b3936292a3da2ddf5aa8cbb9b 5dc32edacc4827d684d274e65b8b76fb2c2b19f7d5607523fa953e34bb39 032c05b1c1244304606c55660d3ca8607e764ea5b03db7fcab5cf7788c6e 60ec8c449bcafd90bcaba4132b6cbccff16784fb59b36b77cf0a9ea572e4 ca0a01c725a6cf2e4500cddf5baccb9094d48925434f044118cfdc2696af 5fc0cab3884107ed17b9bde0c0104b1292a1f8c99b06fc4a6360b24480bd 59df0488641899b0f42b1311b582717ba7ecfee14143654b5371c8b9b2d8 0685ad38d897ad1e64875c28c7020a84fbb3a3bbee16617dcb9bc822b7c5 9c5a18c0cf7e80163adfb7aa03b7cde8497c1697d90f2ed90f813095c5b9 1657fc294ef0e341db3392ed860cb2e0aa09293d0f99ae9eb54c761ca2db 1e51e1ceaeab276c7bd916c68510d72d9a67468b09b3c39a7815628fb126 cdfd5eff59cc8184c0d35a5b5960f824bd175495dd3eb12a4e96008cb13b 8c5745303e66cf8608ff27c4709c1d854eb79608e52f068fec0151a74c12 5edeaea555c198fc08027bbbb802835e1d435077ae4b1ccdbf722354f6c5 72beb1376d3e342195fa80ac9722eb2f46e44de05f5a227b731b8d4a4b6e def04af2c5dec2eef8ff48c5b18710ade3dbfa0c956505b6da9ccb7cbb83 4db6cc754948855d833670ff0ac42a4773fea8322becee04ca74ac2d6685 5132d11a51524488c54771b5b7a512796d7d7ae0f9c1fbc9cbdba0831074 f4d200349d0ca40537b92496692766f020ac43ac01db8b2aa2efa9d21732 be3a315f6caa402bb2e61d40ddebde11276d90c2c601a935c168be600464 76aded15087d54a14c68eecbbbb590927c1e10d291c9285334cb0c80edbd 392bde4d535eb61f8e7641f58ac1df5b1c5a5d91e3e27e05caf7ec97ecf0 c85b6425197aa856521ed701e5aeb82a7f52a8bd7dc97d5b3fb5c99a5df8 4d1baff89072922509d76bc6edb15ce5f9eb8f4154bee1e82020240283bd c83a8e49aa9a2649b7955d5c058f2818a63bd0bfe7eaced4a49063c489a6 26277ae1246f721c9926e2a2b6c31045fbcd235f3cc58bc4dd6c57fe998e bd1e9fa5154652be3a1685bcd2efaa079a3293f78142a6473822fab62792 7eaccd61b3e99c3077103d2d19382bc7ee15bad0fde489602d055a01dbbc f91a566974559d1b477c209416887053169c3f8f59955be4de82b60558cc 9ae15602a93f029f6b4329e0e62a03982db32f5229714efa1491a7b24aef e18febc2c93dfe50b3f641b51bdd33da38871bf5243c17502d00aea2d9e9 734e80a96788d4cf5bc12a42bc386162fc88a7435ee13200c1c2c6ccc5d2 1a03941007b4c4291bdb711446ceaf27148104bb240357d5eda0ea5a5ce2 7d4a83909d75bfc05d75f10aa74a6de37d7de15c1dda3ac3045da6cd4832 3d904e716b445e5e096fcb379353ed70cf4b6fac102c762711079efaf13f b74c9b47af75f3f6bda2a4647d2ab47ecab64da6cc01479f618e8d2d0a36 45445e8744683cbbc560d47c98078b84206e90eb839b02d37c852b8e2844 63d4e4d890203c3d5b20352110034ead6bd7f41456b807e1db1631a9d499 e52e9d9853d86728b1a2e511f40f8ca1e4724a0d17ecd640b52ff6c66e28 693d89765fc391612e5889e77423ec85cbd0a038b6ba98b607701dc0c4b6 6b3b28c7790a1f1eb8d051dc98276dd9cfefab3f65c1c928e48a060c992b 392a43e56eaa6ded896debce71f8245be4687f2f1b8fc0f43ece8db0bd0a b0811c5ce73cbe336023a0d66168b34a95b4b0a750b3bf1d197e3c042c79 14fa731d7831af798e9429571cbb977e6258244e84701e5ff91d608f98fc 3d68a4ee5b81d5ff38b6c184f6118b875f022b4ce207dc7b37e1452dfdc5 91a3e506ae82c7e7bff0011b0a3dbd616a993fbf878fb03b6c9f2055a2b0 95d29361f8253c2623653687fe0ab98078f6aee5fc2c2bde0405eabedb3a 33eb7f04cb6837176245f190c6bbbcd64522b12fe7f9cdcf201a1aa8a19a 7bbc4ac064b4958f44aa0f8dda23835ad28a1fd0ea105de2f395385dccfb e2261dc5a89a23af606a3985e5038706b1fe0910400e16bf008f250f3bde 3ad806c735495d499f16f99275010478fd2127bf7cedd6b5bd505fbe9bd0 065b4a7090c9d27cd5b36c3ad33e1b31eb6d44e375003b51b909da50bd18 218418b3cd22b43278b144be78406eaf16c7df6b6c1c6238004aab73736b 38e168441dc16f9a5cf60793a18633bc43d78674d12d38cc979f7caada6e fe807cea499cb9fe616496682a66e04bbdace1dc112b2156b9b0b20a58a8 cb43ff0eedb99805234b9a5789762ac7d65f5a319c33f4f7438cd15e06bb 80a7a97e976e8cec23f4c646a5821880a82b2f1dc27767f090997e91488b fa15064b702f864fce6505d6cef87d2a0a12b55ba189af269811e3b8b850 c8401f3906c080d32618d9698a766732a40a9fc5a94e5bdda3d028d823d6 b603b6d17dd046de181fd989ea0f80b4ca62f7973e4df5e032a31fe6bc8f 5cda678d4a72787eb8253ea5882c337cdf9aa3e1e7d9536dd09b047cd896 2e773f72f6418a3aef5a289b3406c152a50ce7bd4b493fffc27f6aa52f79 ea67e362fd92559aa4f94a2f787f6c735dfadcf2f08aaf98b80c53ca5607 a94f25f04aa65a70a75937840e73055b3d65fb054c63e2e48e68488c9315 a13ee949e03e46723c11cc759d222cbfad2e1a87cad779b23d38f7e2f660 de1388eaf1cf4d18994d75c6cc63f187fdb949940c18b537a0afb12ac5f6 7b0283ca5efe2e764c4369104b9d3b06490d1244c41d6085c85f1106082e c9db84586230511c05c82412d2cdf3dafbf4759a775628878f997415296b c416ac8352a6c6988691fcb831cf95c10bae691adb3ba2918b35924bd5c3 acad8b137397b10af82b479800fe16d472cd0cdbdaab4f882a0649cf5610 04b8cb7ca32ec129d0a415be6cb91da2b65f44e80d138808a127e851a7fc f927e99daa0ea2d626b77a16c72e37f058a3b882fc4955dc8cb6312434bd 3bced75780b13590bf4fe8d64acf0371f9fb1d361b05025852aab9eda1a0 c997cfa58052c454fd451e6c1f194f4d363114e312f6dc35bbaf357a32cd 200a3dd9654155134259887d677acc44f89aa401ca27282df7dc3f2f04a1 08cbef2558dcce28bac2d87b8d5b7181ea927f61977764f882626d4ab338 d95c9477c54e9c36012a3cffbe199ec8120a99d2d70a21f9d9a0354e4eac 7947990e8a6e0601796aaf6f14e758cabcabdfbd8204a8e748a3e5feba57 0d36e2bf474c0083229a63f96114182321b2ebe1bc76dd193724c4588c1d 39d184c332faeaf4c629f2b3b2f49996e46aa6c9f497428bea52d58876b0 dc07b460248bc85cc16773a5dac36cde8b152d96057f4efaaf8b1dc10022 038577368057699b3a37178a9f1f6c6cc60bae820b7add0717911bd23a6d cdadafa32473491aa80cfe90f2a77e24ce2826ff77b18b869c33fa292fe0 1d6477765044c7d14a548b28b1360125c6933f05c58b0889390537cdd16f 8e967e0b38579449dfc1e07389b7069aa8594c5103465d5041cc929268de 863fadb6925b350aa94a27d421fb7fcc81c6b35f906f12246b7a5140511a 97211ba9bd6831a508e963fe8be961332f557808488f06ead75e86d60de3 fa2425ae8439ecb9112bc3e4d73747c1c8e87a649919827049832db0bf6d a8c85c9a2592ac002809070900ecad52a56f1bfd456afe066509694eac07 5788456b0b0bdd7c192d321e9fb6aadcaef00f570f22cd4a5322fbce8fa9 8faeb681940895426270bb4319c11da67d88552a7373398aec5da7c9caa9 f3b34581c6e968daaab2751cc012199dd897b448986cffbae4d412bf9ecb f46742715a9569932516259d3b3a5431cd7028e42fc751c434e2b714c718 202bf02caf9b8a2075de922322ea7cfa605c8376fa958b8fbe43031e1026 fbe6126a3775f643ea67ebbd97f239fb3c43552675cd08b19ca5ebf53b40 d728556b4481c7f73ec71cab0f89e34d60c69b272fadc22e8e7bdc6210db 09fdd913e209f49fd28e8712b8508904620250746ca3b21b026edae60a28 22f59e912e626b93e0d2bfb3230dfd0e54e91a1dba25a609b64d41abd897 a5d21764c351e85f9e87beab9e645149ad32aeebb3b1161032c701647115 f98c1c2aaece871862d91d321ab90f3e923b1fdee00d927f897aa9812373 6536e2e0700f10053d7e6c589bf66029d794883eae4c8228941ce96565b5 0d48887b5314a2e5537959638222a6ca54c77cbabd460dac11b063519ae4 f50d93de41763ba7cfbf4c7724360e750478eb628921daa065858341958e 4f3eb5966c6dd77c05eeecdf4b5f6cf19ab507589b4219377959bd258ec9 21c34fe1db003f7d0fea3e2fd6f5ddb0a2d62ca5a2cd3c7ab457dff25094 efe04a9e1b9ce7ae3f30026b1cb039228d309a22899f6e9b9bff922e1171 23347967d7c62c670e2c74579c35989925603022c17b1dce378031abc9b4 b437c7b6e64620932e93189754c01d4b280b8b08699b2ca953ae4823bb9e e34133c5c95b3290e1bf010705ad852c72be87291e1034b09f44a95b6a2f 83fee8841dcf661770af44d0ac7f9cdb280939fc5d953d525e0b41b7be18 8d5c794687330cd770d24d9cd53b895a253004e18a31be4e82b384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Sans-Bold.afm0100664000212600000240000021325410330505373015330 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Sans-Bold FullName Sans Bold FamilyName Sans Weight Bold Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle 0 IsFixedPitch false UnderlinePosition -227 UnderlineThickness 258 Version 1.15 EncodingScheme ISO10646-1 FontBBox -200 -505 1511 1056 CapHeight 729 XHeight 546 Ascender 759 Descender -208 StartCharMetrics 822 C 0 ; WX 600 ; N .notdef ; B 49 -177 550 706 ; C 32 ; WX 348 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 456 ; N exclam ; B 140 0 316 730 ; C 34 ; WX 520 ; N quotedbl ; B 95 458 426 730 ; C 35 ; WX 837 ; N numbersign ; B 67 0 771 718 ; C 36 ; WX 695 ; N dollar ; B 78 -147 628 760 ; C 37 ; WX 1001 ; N percent ; B 32 -15 971 743 ; C 38 ; WX 872 ; N ampersand ; B 60 -15 831 743 ; C 39 ; WX 306 ; N quotesingle ; B 95 458 211 730 ; C 40 ; WX 457 ; N parenleft ; B 85 -132 377 759 ; C 41 ; WX 457 ; N parenright ; B 80 -132 372 759 ; C 42 ; WX 522 ; N asterisk ; B 20 277 503 743 ; C 43 ; WX 837 ; N plus ; B 105 0 732 627 ; C 44 ; WX 379 ; N comma ; B 53 -143 278 189 ; C 45 ; WX 415 ; N hyphen ; B 54 216 361 359 ; C 46 ; WX 379 ; N period ; B 102 0 278 189 ; C 47 ; WX 365 ; N slash ; B 0 -93 366 730 ; C 48 ; WX 695 ; N zero ; B 47 -15 648 743 ; C 49 ; WX 695 ; N one ; B 112 0 627 730 ; C 50 ; WX 695 ; N two ; B 79 0 609 743 ; C 51 ; WX 695 ; N three ; B 66 -15 617 743 ; C 52 ; WX 695 ; N four ; B 44 0 650 730 ; C 53 ; WX 695 ; N five ; B 77 -15 626 730 ; C 54 ; WX 695 ; N six ; B 62 -15 643 742 ; C 55 ; WX 695 ; N seven ; B 66 0 617 730 ; C 56 ; WX 695 ; N eight ; B 61 -15 634 743 ; C 57 ; WX 695 ; N nine ; B 51 -15 632 742 ; C 58 ; WX 399 ; N colon ; B 111 0 289 547 ; C 59 ; WX 399 ; N semicolon ; B 62 -143 289 547 ; C 60 ; WX 837 ; N less ; B 105 29 732 598 ; C 61 ; WX 837 ; N equal ; B 105 144 732 482 ; C 62 ; WX 837 ; N greater ; B 105 29 732 598 ; C 63 ; WX 580 ; N question ; B 68 0 516 743 ; C 64 ; WX 1000 ; N at ; B 65 -174 930 704 ; C 65 ; WX 773 ; N A ; B 4 0 770 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 762 ; N B ; B 91 0 692 730 ; C 67 ; WX 733 ; N C ; B 49 -15 670 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 830 ; N D ; B 91 0 778 730 ; L uni030C Dcaron ; C 69 ; WX 683 ; N E ; B 91 0 610 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 683 ; N F ; B 91 0 600 730 ; C 71 ; WX 820 ; N G ; B 49 -15 748 743 ; L uni0306 Gbreve ; C 72 ; WX 836 ; N H ; B 91 0 746 730 ; C 73 ; WX 372 ; N I ; B 91 0 280 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 372 ; N J ; B -57 -201 280 730 ; C 75 ; WX 774 ; N K ; B 91 0 806 730 ; C 76 ; WX 637 ; N L ; B 91 0 610 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 995 ; N M ; B 91 0 903 730 ; C 78 ; WX 836 ; N N ; B 91 0 746 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 850 ; N O ; B 49 -15 800 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 732 ; N P ; B 91 0 692 730 ; C 81 ; WX 850 ; N Q ; B 49 -146 800 743 ; C 82 ; WX 770 ; N R ; B 91 0 750 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 720 ; N S ; B 71 -15 647 743 ; L uni030C Scaron ; C 84 ; WX 682 ; N T ; B 4 0 677 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 812 ; N U ; B 91 -15 721 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 773 ; N V ; B 4 0 770 730 ; C 87 ; WX 1103 ; N W ; B 29 0 1072 730 ; C 88 ; WX 770 ; N X ; B 19 0 751 730 ; C 89 ; WX 724 ; N Y ; B -10 0 734 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 725 ; N Z ; B 44 0 681 730 ; L uni030C Zcaron ; C 91 ; WX 457 ; N bracketleft ; B 85 -132 390 760 ; C 92 ; WX 365 ; N backslash ; B 0 -93 366 730 ; C 93 ; WX 457 ; N bracketright ; B 67 -132 372 760 ; C 94 ; WX 837 ; N asciicircum ; B 101 457 737 730 ; C 95 ; WX 500 ; N underscore ; B 0 -236 500 -143 ; C 96 ; WX 500 ; N grave ; B 45 616 322 800 ; C 97 ; WX 674 ; N a ; B 42 -15 597 561 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 715 ; N b ; B 83 -15 671 760 ; C 99 ; WX 592 ; N c ; B 42 -15 526 561 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 715 ; N d ; B 44 -15 632 760 ; L uni030C dcaron ; C 101 ; WX 678 ; N e ; B 42 -15 630 561 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 435 ; N f ; B 19 0 444 760 ; L l fl ; L i fi ; C 103 ; WX 715 ; N g ; B 44 -216 632 560 ; L uni0306 gbreve ; C 104 ; WX 711 ; N h ; B 83 0 634 760 ; C 105 ; WX 342 ; N i ; B 83 0 259 760 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 342 ; N j ; B -34 -216 259 760 ; C 107 ; WX 665 ; N k ; B 83 0 685 760 ; C 108 ; WX 342 ; N l ; B 83 0 259 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 1041 ; N m ; B 83 0 963 561 ; C 110 ; WX 711 ; N n ; B 83 0 634 561 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 687 ; N o ; B 42 -15 645 561 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 715 ; N p ; B 83 -209 671 561 ; C 113 ; WX 715 ; N q ; B 44 -209 632 560 ; C 114 ; WX 493 ; N r ; B 83 0 491 561 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 595 ; N s ; B 51 -15 548 561 ; L uni030C scaron ; C 116 ; WX 478 ; N t ; B 13 0 456 703 ; L uni030C tcaron ; C 117 ; WX 711 ; N u ; B 78 -15 628 547 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 651 ; N v ; B 15 0 638 547 ; C 119 ; WX 923 ; N w ; B 35 0 890 547 ; C 120 ; WX 645 ; N x ; B 15 0 630 547 ; C 121 ; WX 651 ; N y ; B 12 -216 634 547 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 582 ; N z ; B 44 0 535 547 ; L uni030C zcaron ; C 123 ; WX 711 ; N braceleft ; B 125 -164 587 760 ; C 124 ; WX 365 ; N bar ; B 126 -236 238 765 ; C 125 ; WX 711 ; N braceright ; B 125 -164 587 760 ; C 126 ; WX 837 ; N asciitilde ; B 105 211 732 416 ; C 160 ; WX 695 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 456 ; N exclamdown ; B 140 0 316 730 ; C 162 ; WX 695 ; N cent ; B 84 -153 567 700 ; C 163 ; WX 695 ; N sterling ; B 61 0 613 743 ; C 164 ; WX 636 ; N currency ; B 36 29 602 597 ; C 165 ; WX 695 ; N yen ; B 12 0 685 730 ; C 166 ; WX 365 ; N brokenbar ; B 126 -171 238 700 ; C 167 ; WX 500 ; N section ; B 6 -96 497 743 ; C 168 ; WX 500 ; N dieresis ; B 96 653 404 774 ; C 169 ; WX 1000 ; N copyright ; B 138 0 862 726 ; C 170 ; WX 563 ; N ordfeminine ; B 77 182 489 743 ; C 171 ; WX 645 ; N guillemotleft ; B 77 66 552 520 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 444 ; C 173 ; WX 415 ; N sfthyphen ; B 54 216 361 359 ; C 174 ; WX 1000 ; N registered ; B 138 0 862 726 ; C 175 ; WX 500 ; N macron ; B 96 667 404 760 ; C 176 ; WX 500 ; N degree ; B 86 423 413 750 ; C 177 ; WX 837 ; N plusminus ; B 105 0 732 627 ; C 178 ; WX 437 ; N twosuperior ; B 53 326 382 743 ; C 179 ; WX 437 ; N threesuperior ; B 43 318 384 743 ; C 180 ; WX 500 ; N acute ; B 178 616 455 800 ; C 181 ; WX 735 ; N mu ; B 84 -209 705 547 ; C 182 ; WX 636 ; N paragraph ; B 62 -97 549 730 ; C 183 ; WX 379 ; N periodcentered ; B 102 252 278 442 ; C 184 ; WX 500 ; N cedilla ; B 127 -196 350 0 ; C 185 ; WX 437 ; N onesuperior ; B 60 326 382 734 ; C 186 ; WX 563 ; N ordmasculine ; B 57 182 507 743 ; C 187 ; WX 645 ; N guillemotright ; B 94 66 569 520 ; C 188 ; WX 1035 ; N onequarter ; B 48 -15 958 743 ; C 189 ; WX 1035 ; N onehalf ; B 48 -15 987 743 ; C 190 ; WX 1035 ; N threequarters ; B 50 -15 958 743 ; C 191 ; WX 580 ; N questiondown ; B 68 -15 516 730 ; C 192 ; WX 773 ; N Agrave ; B 4 0 770 928 ; C 193 ; WX 773 ; N Aacute ; B 4 0 770 928 ; C 194 ; WX 773 ; N Acircumflex ; B 4 0 770 928 ; C 195 ; WX 773 ; N Atilde ; B 4 0 770 929 ; C 196 ; WX 773 ; N Adieresis ; B 4 0 770 928 ; C 197 ; WX 773 ; N Aring ; B 4 0 770 929 ; C 198 ; WX 1084 ; N AE ; B 0 0 1013 730 ; C 199 ; WX 733 ; N Ccedilla ; B 49 -196 670 743 ; C 200 ; WX 683 ; N Egrave ; B 91 0 610 928 ; C 201 ; WX 683 ; N Eacute ; B 91 0 610 928 ; C 202 ; WX 683 ; N Ecircumflex ; B 91 0 610 928 ; C 203 ; WX 683 ; N Edieresis ; B 91 0 610 928 ; C 204 ; WX 372 ; N Igrave ; B 10 0 280 928 ; C 205 ; WX 372 ; N Iacute ; B 91 0 337 928 ; C 206 ; WX 372 ; N Icircumflex ; B -11 0 358 928 ; C 207 ; WX 372 ; N Idieresis ; B 20 0 328 928 ; C 208 ; WX 837 ; N Eth ; B 16 0 788 730 ; C 209 ; WX 836 ; N Ntilde ; B 91 0 746 929 ; C 210 ; WX 850 ; N Ograve ; B 49 -15 800 928 ; C 211 ; WX 850 ; N Oacute ; B 49 -15 800 928 ; C 212 ; WX 850 ; N Ocircumflex ; B 49 -15 800 928 ; C 213 ; WX 850 ; N Otilde ; B 49 -15 800 929 ; C 214 ; WX 850 ; N Odieresis ; B 49 -15 800 928 ; C 215 ; WX 837 ; N multiply ; B 125 20 713 607 ; C 216 ; WX 850 ; N Oslash ; B 21 -37 824 766 ; C 217 ; WX 812 ; N Ugrave ; B 91 -15 721 928 ; C 218 ; WX 812 ; N Uacute ; B 91 -15 721 928 ; C 219 ; WX 812 ; N Ucircumflex ; B 91 -15 721 928 ; C 220 ; WX 812 ; N Udieresis ; B 91 -15 721 928 ; C 221 ; WX 724 ; N Yacute ; B -10 0 734 928 ; C 222 ; WX 737 ; N Thorn ; B 91 0 692 730 ; C 223 ; WX 719 ; N germandbls ; B 83 -15 676 760 ; C 224 ; WX 674 ; N agrave ; B 42 -15 597 800 ; C 225 ; WX 674 ; N aacute ; B 42 -15 597 800 ; C 226 ; WX 674 ; N acircumflex ; B 42 -15 597 800 ; C 227 ; WX 674 ; N atilde ; B 42 -15 597 778 ; C 228 ; WX 674 ; N adieresis ; B 42 -15 597 774 ; C 229 ; WX 674 ; N aring ; B 42 -15 597 889 ; C 230 ; WX 1047 ; N ae ; B 42 -15 1000 561 ; C 231 ; WX 592 ; N ccedilla ; B 42 -196 526 561 ; C 232 ; WX 678 ; N egrave ; B 42 -15 630 800 ; C 233 ; WX 678 ; N eacute ; B 42 -15 630 800 ; C 234 ; WX 678 ; N ecircumflex ; B 42 -15 630 800 ; C 235 ; WX 678 ; N edieresis ; B 42 -15 630 774 ; C 236 ; WX 342 ; N igrave ; B -21 0 259 800 ; C 237 ; WX 342 ; N iacute ; B 83 0 388 800 ; C 238 ; WX 342 ; N icircumflex ; B -1 0 368 800 ; C 239 ; WX 342 ; N idieresis ; B 29 0 337 774 ; C 240 ; WX 687 ; N eth ; B 42 -15 645 760 ; C 241 ; WX 711 ; N ntilde ; B 83 0 634 778 ; C 242 ; WX 687 ; N ograve ; B 42 -15 645 800 ; C 243 ; WX 687 ; N oacute ; B 42 -15 645 800 ; C 244 ; WX 687 ; N ocircumflex ; B 42 -15 645 800 ; C 245 ; WX 687 ; N otilde ; B 42 -15 645 778 ; C 246 ; WX 687 ; N odieresis ; B 42 -15 645 774 ; C 247 ; WX 837 ; N divide ; B 105 41 732 585 ; C 248 ; WX 687 ; N oslash ; B 38 -46 646 595 ; C 249 ; WX 711 ; N ugrave ; B 78 -15 628 800 ; C 250 ; WX 711 ; N uacute ; B 78 -15 628 800 ; C 251 ; WX 711 ; N ucircumflex ; B 78 -15 628 800 ; C 252 ; WX 711 ; N udieresis ; B 78 -15 628 774 ; C 253 ; WX 651 ; N yacute ; B 12 -216 634 800 ; C 254 ; WX 715 ; N thorn ; B 83 -209 671 760 ; C 255 ; WX 651 ; N ydieresis ; B 12 -216 634 774 ; C -1 ; WX 773 ; N Amacron ; B 4 0 770 914 ; C -1 ; WX 674 ; N amacron ; B 42 -15 597 763 ; C -1 ; WX 773 ; N Abreve ; B 4 0 770 935 ; C -1 ; WX 674 ; N abreve ; B 42 -15 597 780 ; C -1 ; WX 773 ; N Aogonek ; B 4 -196 770 730 ; C -1 ; WX 674 ; N aogonek ; B 42 -196 597 561 ; C -1 ; WX 733 ; N Cacute ; B 49 -15 670 928 ; C -1 ; WX 592 ; N cacute ; B 42 -15 558 800 ; C -1 ; WX 733 ; N Ccircumflex ; B 49 -15 670 928 ; C -1 ; WX 592 ; N ccircumflex ; B 42 -15 542 800 ; C -1 ; WX 733 ; N Cdotaccent ; B 49 -15 670 928 ; C -1 ; WX 592 ; N cdotaccent ; B 42 -15 526 774 ; C -1 ; WX 733 ; N Ccaron ; B 49 -15 670 928 ; C -1 ; WX 592 ; N ccaron ; B 42 -15 538 800 ; C -1 ; WX 830 ; N Dcaron ; B 91 0 778 928 ; C -1 ; WX 715 ; N dcaron ; B 44 -15 872 760 ; C -1 ; WX 837 ; N Dcroat ; B 16 0 788 730 ; C -1 ; WX 715 ; N dcroat ; B 44 -15 708 760 ; C -1 ; WX 683 ; N Emacron ; B 91 0 610 914 ; C -1 ; WX 678 ; N emacron ; B 42 -15 630 764 ; C -1 ; WX 683 ; N Ebreve ; B 91 0 610 928 ; C -1 ; WX 678 ; N ebreve ; B 42 -15 630 785 ; C -1 ; WX 683 ; N Edotaccent ; B 91 0 610 928 ; C -1 ; WX 678 ; N edotaccent ; B 42 -15 630 774 ; C -1 ; WX 683 ; N Eogonek ; B 91 -196 611 730 ; C -1 ; WX 678 ; N eogonek ; B 42 -196 630 561 ; C -1 ; WX 683 ; N Ecaron ; B 91 0 610 928 ; C -1 ; WX 678 ; N ecaron ; B 42 -15 630 800 ; C -1 ; WX 820 ; N Gcircumflex ; B 49 -15 748 928 ; C -1 ; WX 715 ; N gcircumflex ; B 44 -216 632 800 ; C -1 ; WX 820 ; N Gbreve ; B 49 -15 748 928 ; C -1 ; WX 715 ; N gbreve ; B 44 -216 632 785 ; C -1 ; WX 820 ; N Gdotaccent ; B 49 -15 748 928 ; C -1 ; WX 715 ; N gdotaccent ; B 44 -216 632 774 ; C -1 ; WX 820 ; N Gcommaaccent ; B 49 -220 748 743 ; C -1 ; WX 715 ; N gcommaaccent ; B 44 -216 632 766 ; C -1 ; WX 836 ; N Hcircumflex ; B 91 0 746 928 ; C -1 ; WX 711 ; N hcircumflex ; B -10 0 634 928 ; C -1 ; WX 973 ; N Hbar ; B 91 0 882 730 ; C -1 ; WX 790 ; N hbar ; B 81 0 709 760 ; C -1 ; WX 372 ; N Itilde ; B 15 0 356 929 ; C -1 ; WX 342 ; N itilde ; B 1 0 342 778 ; C -1 ; WX 372 ; N Imacron ; B 31 0 340 914 ; C -1 ; WX 342 ; N imacron ; B 17 0 326 764 ; C -1 ; WX 372 ; N Ibreve ; B 21 0 350 928 ; C -1 ; WX 342 ; N ibreve ; B 7 0 336 785 ; C -1 ; WX 372 ; N Iogonek ; B 91 -196 366 730 ; C -1 ; WX 342 ; N iogonek ; B 83 -196 345 760 ; C -1 ; WX 372 ; N Idotaccent ; B 91 0 280 928 ; C -1 ; WX 342 ; N dotlessi ; B 83 0 259 547 ; C -1 ; WX 744 ; N IJ ; B 91 -201 652 730 ; C -1 ; WX 685 ; N ij ; B 83 -216 602 760 ; C -1 ; WX 372 ; N Jcircumflex ; B -57 -201 370 928 ; C -1 ; WX 342 ; N jcircumflex ; B -34 -216 356 800 ; C -1 ; WX 774 ; N Kcommaaccent ; B 91 -206 806 730 ; C -1 ; WX 665 ; N kcommaaccent ; B 83 -206 685 760 ; C -1 ; WX 665 ; N kgreenlandic ; B 83 0 685 547 ; C -1 ; WX 637 ; N Lacute ; B 91 0 610 928 ; C -1 ; WX 342 ; N lacute ; B 83 0 357 928 ; C -1 ; WX 637 ; N Lcommaaccent ; B 91 -206 610 730 ; C -1 ; WX 342 ; N lcommaaccent ; B 70 -206 273 760 ; C -1 ; WX 637 ; N Lcaron ; B 91 0 610 730 ; C -1 ; WX 479 ; N lcaron ; B 83 0 480 760 ; C -1 ; WX 637 ; N Ldot ; B 91 0 610 730 ; C -1 ; WX 556 ; N ldot ; B 83 0 484 760 ; C -1 ; WX 642 ; N Lslash ; B -45 0 616 730 ; C -1 ; WX 371 ; N lslash ; B -19 0 391 760 ; C -1 ; WX 836 ; N Nacute ; B 91 0 746 928 ; C -1 ; WX 711 ; N nacute ; B 83 0 634 804 ; C -1 ; WX 836 ; N Ncommaaccent ; B 91 -206 746 730 ; C -1 ; WX 711 ; N ncommaaccent ; B 83 -206 634 561 ; C -1 ; WX 836 ; N Ncaron ; B 91 0 746 928 ; C -1 ; WX 711 ; N ncaron ; B 83 0 634 797 ; C -1 ; WX 982 ; N napostrophe ; B 91 0 892 730 ; C -1 ; WX 836 ; N Eng ; B 101 -216 737 730 ; C -1 ; WX 711 ; N eng ; B 83 -216 634 561 ; C -1 ; WX 850 ; N Omacron ; B 49 -15 800 914 ; C -1 ; WX 687 ; N omacron ; B 42 -15 645 764 ; C -1 ; WX 850 ; N Obreve ; B 49 -15 800 928 ; C -1 ; WX 687 ; N obreve ; B 42 -15 645 785 ; C -1 ; WX 850 ; N Ohungarumlaut ; B 49 -15 800 928 ; C -1 ; WX 687 ; N ohungarumlaut ; B 42 -15 645 800 ; C -1 ; WX 1166 ; N OE ; B 49 -1 1095 730 ; C -1 ; WX 1094 ; N oe ; B 42 -15 1046 561 ; C -1 ; WX 770 ; N Racute ; B 91 0 750 928 ; C -1 ; WX 493 ; N racute ; B 83 0 516 804 ; C -1 ; WX 770 ; N Rcommaaccent ; B 91 -206 750 730 ; C -1 ; WX 493 ; N rcommaaccent ; B 70 -206 491 561 ; C -1 ; WX 770 ; N Rcaron ; B 91 0 750 928 ; C -1 ; WX 493 ; N rcaron ; B 83 0 491 792 ; C -1 ; WX 720 ; N Sacute ; B 71 -15 647 928 ; C -1 ; WX 595 ; N sacute ; B 51 -15 548 804 ; C -1 ; WX 720 ; N Scircumflex ; B 71 -15 647 928 ; C -1 ; WX 595 ; N scircumflex ; B 51 -15 548 800 ; C -1 ; WX 720 ; N Scedilla ; B 71 -196 647 743 ; C -1 ; WX 595 ; N scedilla ; B 51 -196 548 561 ; C -1 ; WX 720 ; N Scaron ; B 71 -15 647 928 ; C -1 ; WX 595 ; N scaron ; B 51 -15 548 800 ; C -1 ; WX 682 ; N Tcommaaccent ; B 4 -196 677 730 ; C -1 ; WX 478 ; N tcommaaccent ; B 13 -196 456 703 ; C -1 ; WX 682 ; N Tcaron ; B 4 0 677 928 ; C -1 ; WX 478 ; N tcaron ; B 13 0 508 814 ; C -1 ; WX 682 ; N Tbar ; B 4 0 677 730 ; C -1 ; WX 478 ; N tbar ; B 13 0 456 703 ; C -1 ; WX 812 ; N Utilde ; B 91 -15 721 929 ; C -1 ; WX 711 ; N utilde ; B 78 -15 628 778 ; C -1 ; WX 812 ; N Umacron ; B 91 -15 721 914 ; C -1 ; WX 711 ; N umacron ; B 78 -15 628 763 ; C -1 ; WX 812 ; N Ubreve ; B 91 -15 721 928 ; C -1 ; WX 711 ; N ubreve ; B 78 -15 628 785 ; C -1 ; WX 812 ; N Uring ; B 91 -15 721 1056 ; C -1 ; WX 711 ; N uring ; B 78 -15 628 882 ; C -1 ; WX 812 ; N Uhungarumlaut ; B 91 -15 721 928 ; C -1 ; WX 711 ; N uhungarumlaut ; B 78 -15 628 800 ; C -1 ; WX 812 ; N Uogonek ; B 91 -204 721 730 ; C -1 ; WX 711 ; N uogonek ; B 78 -196 716 547 ; C -1 ; WX 1103 ; N Wcircumflex ; B 29 0 1072 931 ; C -1 ; WX 923 ; N wcircumflex ; B 35 0 890 804 ; C -1 ; WX 724 ; N Ycircumflex ; B -10 0 734 931 ; C -1 ; WX 651 ; N ycircumflex ; B 12 -216 634 804 ; C -1 ; WX 724 ; N Ydieresis ; B -10 0 734 928 ; C -1 ; WX 725 ; N Zacute ; B 44 0 681 928 ; C -1 ; WX 582 ; N zacute ; B 44 0 535 804 ; C -1 ; WX 725 ; N Zdotaccent ; B 44 0 681 930 ; C -1 ; WX 582 ; N zdotaccent ; B 44 0 535 760 ; C -1 ; WX 725 ; N Zcaron ; B 44 0 681 928 ; C -1 ; WX 582 ; N zcaron ; B 44 0 535 800 ; C -1 ; WX 435 ; N longs ; B 19 0 444 760 ; C -1 ; WX 733 ; N uni0186 ; B 49 -15 670 743 ; C -1 ; WX 695 ; N uni0190 ; B 66 -15 617 743 ; C -1 ; WX 695 ; N florin ; B 2 -209 652 760 ; C -1 ; WX 751 ; N uni0194 ; B 19 -142 732 730 ; C -1 ; WX 830 ; N uni01C4 ; B 91 0 1511 928 ; C -1 ; WX 830 ; N uni01C5 ; B 91 0 1365 800 ; C -1 ; WX 715 ; N uni01C6 ; B 44 -15 1250 800 ; C -1 ; WX 637 ; N uni01C7 ; B 91 -201 917 730 ; C -1 ; WX 637 ; N uni01C8 ; B 91 -216 896 760 ; C -1 ; WX 342 ; N uni01C9 ; B 83 -216 602 760 ; C -1 ; WX 836 ; N uni01CA ; B 91 -201 1117 730 ; C -1 ; WX 836 ; N uni01CB ; B 91 -216 1096 760 ; C -1 ; WX 711 ; N uni01CC ; B 83 -216 971 760 ; C -1 ; WX 773 ; N uni01CD ; B 4 0 770 928 ; C -1 ; WX 674 ; N uni01CE ; B 42 -15 597 800 ; C -1 ; WX 372 ; N uni01CF ; B 2 0 372 928 ; C -1 ; WX 342 ; N uni01D0 ; B 1 0 371 800 ; C -1 ; WX 850 ; N uni01D1 ; B 49 -15 800 928 ; C -1 ; WX 687 ; N uni01D2 ; B 42 -15 645 800 ; C -1 ; WX 812 ; N uni01D3 ; B 91 -15 721 928 ; C -1 ; WX 711 ; N uni01D4 ; B 78 -15 628 800 ; C -1 ; WX 711 ; N uni01D6 ; B 78 -15 628 914 ; C -1 ; WX 674 ; N uni01DF ; B 42 -15 597 914 ; C -1 ; WX 1084 ; N uni01E2 ; B 0 0 1013 914 ; C -1 ; WX 1047 ; N uni01E3 ; B 42 -15 1000 759 ; C -1 ; WX 850 ; N uni01EA ; B 49 -204 800 743 ; C -1 ; WX 687 ; N uni01EB ; B 42 -204 645 561 ; C -1 ; WX 850 ; N uni01EC ; B 49 -204 800 914 ; C -1 ; WX 687 ; N uni01ED ; B 42 -204 645 763 ; C -1 ; WX 720 ; N Scommaaccent ; B 71 -235 647 743 ; C -1 ; WX 595 ; N scommaaccent ; B 51 -235 548 561 ; C -1 ; WX 682 ; N uni021A ; B 4 -235 677 730 ; C -1 ; WX 478 ; N uni021B ; B 13 -235 456 703 ; C -1 ; WX 687 ; N uni022B ; B 42 -15 645 914 ; C -1 ; WX 687 ; N uni022D ; B 42 -15 645 915 ; C -1 ; WX 850 ; N uni022E ; B 49 -15 800 928 ; C -1 ; WX 687 ; N uni022F ; B 42 -15 645 774 ; C -1 ; WX 687 ; N uni0231 ; B 42 -15 645 915 ; C -1 ; WX 724 ; N uni0232 ; B -10 0 734 914 ; C -1 ; WX 651 ; N uni0233 ; B 12 -216 634 763 ; C -1 ; WX 342 ; N dotlessj ; B -34 -216 259 547 ; C -1 ; WX 674 ; N uni0250 ; B 42 -15 597 561 ; C -1 ; WX 715 ; N uni0251 ; B 44 -15 632 561 ; C -1 ; WX 715 ; N uni0252 ; B 44 -15 632 561 ; C -1 ; WX 715 ; N uni0253 ; B 83 -15 671 760 ; C -1 ; WX 592 ; N uni0254 ; B 42 -15 526 561 ; C -1 ; WX 592 ; N uni0255 ; B 42 -69 526 561 ; C -1 ; WX 715 ; N uni0256 ; B 44 -15 632 760 ; C -1 ; WX 791 ; N uni0257 ; B 44 -15 801 760 ; C -1 ; WX 678 ; N uni0258 ; B 42 -15 630 561 ; C -1 ; WX 678 ; N uni0259 ; B 42 -15 630 561 ; C -1 ; WX 875 ; N uni025A ; B 59 -15 885 561 ; C -1 ; WX 544 ; N uni025B ; B 0 -11 503 561 ; C -1 ; WX 544 ; N uni025C ; B 0 -11 503 561 ; C -1 ; WX 773 ; N uni025D ; B 0 -11 783 561 ; C -1 ; WX 681 ; N uni025E ; B 27 -21 649 560 ; C -1 ; WX 342 ; N uni025F ; B -34 -216 346 547 ; C -1 ; WX 791 ; N uni0260 ; B 44 -216 801 760 ; C -1 ; WX 715 ; N uni0261 ; B 44 -216 632 547 ; C -1 ; WX 627 ; N uni0262 ; B 42 0 546 547 ; C -1 ; WX 734 ; N uni0263 ; B 55 -203 651 555 ; C -1 ; WX 635 ; N uni0264 ; B 24 -59 621 547 ; C -1 ; WX 711 ; N uni0265 ; B 79 -214 629 546 ; C -1 ; WX 711 ; N uni0266 ; B 83 0 634 760 ; C -1 ; WX 711 ; N uni0267 ; B 83 -216 634 760 ; C -1 ; WX 545 ; N uni0268 ; B 83 0 462 760 ; C -1 ; WX 440 ; N uni0269 ; B 83 -2 357 547 ; C -1 ; WX 545 ; N uni026A ; B 83 0 462 547 ; C -1 ; WX 558 ; N uni026B ; B 83 0 475 760 ; C -1 ; WX 693 ; N uni026C ; B 83 0 610 760 ; C -1 ; WX 342 ; N uni026D ; B 84 -216 429 760 ; C -1 ; WX 841 ; N uni026E ; B 83 -215 794 760 ; C -1 ; WX 1041 ; N uni026F ; B 79 -15 959 546 ; C -1 ; WX 1041 ; N uni0270 ; B 79 -209 959 546 ; C -1 ; WX 1041 ; N uni0271 ; B 83 -216 964 561 ; C -1 ; WX 711 ; N uni0272 ; B -85 -216 634 561 ; C -1 ; WX 792 ; N uni0273 ; B 83 -216 802 561 ; C -1 ; WX 642 ; N uni0274 ; B 20 0 560 547 ; C -1 ; WX 687 ; N uni0275 ; B 42 -15 645 561 ; C -1 ; WX 908 ; N uni0276 ; B 42 -1 827 548 ; C -1 ; WX 681 ; N uni0277 ; B -1 0 580 575 ; C -1 ; WX 772 ; N uni0278 ; B 42 -209 730 760 ; C -1 ; WX 538 ; N uni0279 ; B 83 -14 491 547 ; C -1 ; WX 538 ; N uni027A ; B 83 -14 491 761 ; C -1 ; WX 649 ; N uni027B ; B 83 -216 659 547 ; C -1 ; WX 493 ; N uni027C ; B 83 -209 491 561 ; C -1 ; WX 493 ; N uni027D ; B 83 -216 491 561 ; C -1 ; WX 493 ; N uni027E ; B 83 0 428 547 ; C -1 ; WX 493 ; N uni027F ; B 83 0 428 547 ; C -1 ; WX 642 ; N uni0280 ; B 20 0 560 547 ; C -1 ; WX 642 ; N uni0281 ; B 20 0 560 547 ; C -1 ; WX 595 ; N uni0282 ; B 51 -216 548 561 ; C -1 ; WX 415 ; N uni0283 ; B -32 -216 424 760 ; C -1 ; WX 435 ; N uni0284 ; B -12 -216 444 760 ; C -1 ; WX 604 ; N uni0285 ; B 83 -216 540 561 ; C -1 ; WX 551 ; N uni0286 ; B -32 -217 561 760 ; C -1 ; WX 478 ; N uni0287 ; B 13 -156 456 547 ; C -1 ; WX 478 ; N uni0288 ; B 13 -216 456 703 ; C -1 ; WX 920 ; N uni0289 ; B 83 -15 837 547 ; C -1 ; WX 769 ; N uni028A ; B 20 -51 632 547 ; C -1 ; WX 769 ; N uni028B ; B 83 -2 625 547 ; C -1 ; WX 651 ; N uni028C ; B 15 0 638 547 ; C -1 ; WX 923 ; N uni028D ; B 35 0 890 547 ; C -1 ; WX 651 ; N uni028E ; B 12 0 634 763 ; C -1 ; WX 724 ; N uni028F ; B 0 0 595 547 ; C -1 ; WX 693 ; N uni0290 ; B 44 -216 703 547 ; C -1 ; WX 582 ; N uni0291 ; B 44 0 535 547 ; C -1 ; WX 640 ; N uni0292 ; B 43 -215 593 547 ; C -1 ; WX 640 ; N uni0293 ; B 57 -215 593 547 ; C -1 ; WX 572 ; N uni0294 ; B 36 0 525 760 ; C -1 ; WX 572 ; N uni0295 ; B 36 0 525 760 ; C -1 ; WX 572 ; N uni0296 ; B 36 -1 525 760 ; C -1 ; WX 572 ; N uni0297 ; B 36 -209 525 760 ; C -1 ; WX 665 ; N uni0298 ; B 8 -28 619 582 ; C -1 ; WX 643 ; N uni0299 ; B 20 0 562 547 ; C -1 ; WX 695 ; N uni029A ; B 27 -21 649 560 ; C -1 ; WX 684 ; N uni029B ; B 42 0 694 760 ; C -1 ; WX 642 ; N uni029C ; B 20 0 560 547 ; C -1 ; WX 342 ; N uni029D ; B -170 -217 341 760 ; C -1 ; WX 731 ; N uni029E ; B 83 -213 685 547 ; C -1 ; WX 496 ; N uni029F ; B 0 0 415 547 ; C -1 ; WX 791 ; N uni02A0 ; B 44 -209 801 760 ; C -1 ; WX 572 ; N uni02A1 ; B 36 0 525 760 ; C -1 ; WX 572 ; N uni02A2 ; B 36 0 525 760 ; C -1 ; WX 1155 ; N uni02A3 ; B 44 -15 1108 760 ; C -1 ; WX 1214 ; N uni02A4 ; B 44 -215 1167 760 ; C -1 ; WX 1154 ; N uni02A5 ; B 44 -55 1107 760 ; C -1 ; WX 973 ; N uni02A6 ; B 13 -15 926 703 ; C -1 ; WX 768 ; N uni02A7 ; B 13 -216 778 760 ; C -1 ; WX 929 ; N uni02A8 ; B 13 -69 882 703 ; C -1 ; WX 1026 ; N uni02A9 ; B 19 -216 979 760 ; C -1 ; WX 791 ; N uni02AA ; B 83 -15 745 760 ; C -1 ; WX 779 ; N uni02AB ; B 83 0 732 760 ; C -1 ; WX 590 ; N uni02AC ; B 22 0 569 641 ; C -1 ; WX 415 ; N uni02AD ; B 22 86 346 641 ; C -1 ; WX 676 ; N uni02AE ; B -90 -214 629 760 ; C -1 ; WX 789 ; N uni02AF ; B -90 -216 798 760 ; C -1 ; WX 455 ; N uni02B0 ; B 53 462 406 889 ; C -1 ; WX 455 ; N uni02B1 ; B 53 462 406 889 ; C -1 ; WX 219 ; N uni02B2 ; B -22 341 166 889 ; C -1 ; WX 315 ; N uni02B3 ; B 53 462 314 777 ; C -1 ; WX 315 ; N uni02B4 ; B 53 455 314 770 ; C -1 ; WX 315 ; N uni02B5 ; B 53 341 422 770 ; C -1 ; WX 410 ; N uni02B6 ; B 13 462 358 770 ; C -1 ; WX 590 ; N uni02B7 ; B 22 462 569 770 ; C -1 ; WX 416 ; N uni02B8 ; B 7 341 406 770 ; C -1 ; WX 379 ; N uni02BB ; B 103 417 318 730 ; C -1 ; WX 379 ; N afii57929 ; B 103 417 318 730 ; L n napostrophe ; C -1 ; WX 326 ; N uni02C0 ; B 22 462 336 889 ; C -1 ; WX 326 ; N uni02C1 ; B 22 462 336 889 ; C -1 ; WX 500 ; N circumflex ; B 65 616 435 800 ; C -1 ; WX 500 ; N caron ; B 65 616 435 800 ; C -1 ; WX 336 ; N uni02D0 ; B 45 0 246 547 ; C -1 ; WX 336 ; N uni02D1 ; B 45 361 246 547 ; C -1 ; WX 500 ; N breve ; B 85 639 415 785 ; C -1 ; WX 500 ; N dotaccent ; B 183 653 317 774 ; C -1 ; WX 500 ; N ring ; B 110 609 390 889 ; C -1 ; WX 500 ; N ogonek ; B 166 -196 376 0 ; C -1 ; WX 500 ; N tilde ; B 80 638 420 778 ; C -1 ; WX 500 ; N hungarumlaut ; B 94 616 480 800 ; C -1 ; WX 411 ; N uni02E0 ; B 35 349 417 774 ; C -1 ; WX 219 ; N uni02E1 ; B 53 462 166 889 ; C -1 ; WX 380 ; N uni02E2 ; B 33 455 351 777 ; C -1 ; WX 412 ; N uni02E3 ; B 9 462 404 770 ; C -1 ; WX 326 ; N uni02E4 ; B 22 462 336 889 ; C -1 ; WX 500 ; N gravecomb ; B 45 616 322 800 ; C -1 ; WX 500 ; N acutecomb ; B 178 616 455 800 ; C -1 ; WX 500 ; N uni0302 ; B 65 616 435 800 ; C -1 ; WX 500 ; N tildecomb ; B 80 638 420 778 ; C -1 ; WX 500 ; N uni0304 ; B 96 667 404 760 ; C -1 ; WX 500 ; N uni0306 ; B 85 639 415 785 ; C -1 ; WX 500 ; N uni0307 ; B 183 653 317 774 ; C -1 ; WX 500 ; N uni0308 ; B 96 653 404 774 ; C -1 ; WX 500 ; N uni030A ; B 110 609 390 889 ; C -1 ; WX 500 ; N uni030B ; B 94 616 480 800 ; C -1 ; WX 500 ; N uni030C ; B 65 616 435 800 ; C -1 ; WX 379 ; N uni0312 ; B 106 417 310 564 ; C -1 ; WX 711 ; N uni0321 ; B 290 -216 634 118 ; C -1 ; WX 711 ; N uni0322 ; B 290 -216 634 118 ; C -1 ; WX 500 ; N uni0326 ; B 172 -235 375 -88 ; C -1 ; WX 301 ; N uni0374 ; B 78 556 218 800 ; C -1 ; WX 301 ; N uni0375 ; B 78 -209 218 36 ; C -1 ; WX 361 ; N uni037A ; B 115 -209 247 -44 ; C -1 ; WX 336 ; N uni037E ; B 62 -143 289 547 ; C -1 ; WX 441 ; N tonos ; B 169 616 446 800 ; C -1 ; WX 500 ; N dieresistonos ; B 96 653 446 978 ; C -1 ; WX 797 ; N Alphatonos ; B 25 0 793 800 ; C -1 ; WX 379 ; N anoteleia ; B 102 252 278 442 ; C -1 ; WX 845 ; N Epsilontonos ; B -24 0 771 800 ; C -1 ; WX 1008 ; N Etatonos ; B -19 0 916 800 ; C -1 ; WX 563 ; N Iotatonos ; B -21 0 450 800 ; C -1 ; WX 890 ; N Omicrontonos ; B -19 -15 837 800 ; C -1 ; WX 979 ; N Upsilontonos ; B -27 0 992 800 ; C -1 ; WX 872 ; N Omegatonos ; B -30 0 786 800 ; C -1 ; WX 353 ; N iotadieresistonos ; B 24 0 374 978 ; C -1 ; WX 773 ; N Alpha ; B 4 0 770 730 ; C -1 ; WX 762 ; N Beta ; B 91 0 692 730 ; C -1 ; WX 637 ; N Gamma ; B 91 0 610 730 ; C -1 ; WX 773 ; N uni0394 ; B 4 0 770 730 ; C -1 ; WX 683 ; N Epsilon ; B 91 0 610 730 ; C -1 ; WX 725 ; N Zeta ; B 44 0 681 730 ; C -1 ; WX 836 ; N Eta ; B 91 0 746 730 ; C -1 ; WX 850 ; N Theta ; B 49 -15 800 743 ; C -1 ; WX 372 ; N Iota ; B 91 0 280 730 ; C -1 ; WX 774 ; N Kappa ; B 91 0 806 730 ; C -1 ; WX 773 ; N Lambda ; B 4 0 770 730 ; C -1 ; WX 995 ; N Mu ; B 91 0 903 730 ; C -1 ; WX 836 ; N Nu ; B 91 0 746 730 ; C -1 ; WX 631 ; N Xi ; B 98 0 548 730 ; C -1 ; WX 850 ; N Omicron ; B 49 -15 800 743 ; C -1 ; WX 836 ; N Pi ; B 91 0 746 730 ; C -1 ; WX 732 ; N Rho ; B 91 0 692 730 ; C -1 ; WX 631 ; N Sigma ; B 91 0 568 730 ; C -1 ; WX 682 ; N Tau ; B 4 0 677 730 ; C -1 ; WX 724 ; N Upsilon ; B -10 0 734 730 ; C -1 ; WX 850 ; N Phi ; B 49 0 800 730 ; C -1 ; WX 770 ; N Chi ; B 19 0 751 730 ; C -1 ; WX 787 ; N Psi ; B 56 0 732 730 ; C -1 ; WX 769 ; N Omega ; B 26 0 742 737 ; C -1 ; WX 372 ; N Iotadieresis ; B 34 0 342 928 ; C -1 ; WX 724 ; N Upsilondieresis ; B -10 0 734 928 ; C -1 ; WX 611 ; N alphatonos ; B 35 -15 559 800 ; C -1 ; WX 556 ; N epsilontonos ; B 53 -15 494 800 ; C -1 ; WX 711 ; N etatonos ; B 83 -209 634 800 ; C -1 ; WX 342 ; N iotatonos ; B 78 0 355 800 ; C -1 ; WX 633 ; N upsilondieresistonos ; B 84 -15 543 978 ; C -1 ; WX 611 ; N alpha ; B 35 -15 559 561 ; C -1 ; WX 670 ; N beta ; B 77 -209 609 767 ; C -1 ; WX 651 ; N gamma ; B 15 -209 638 547 ; C -1 ; WX 687 ; N delta ; B 43 -15 645 743 ; C -1 ; WX 556 ; N epsilon ; B 53 -15 494 561 ; C -1 ; WX 625 ; N zeta ; B 92 -216 538 760 ; C -1 ; WX 711 ; N eta ; B 83 -209 634 561 ; C -1 ; WX 611 ; N theta ; B 55 -12 558 768 ; C -1 ; WX 342 ; N iota ; B 83 0 259 547 ; C -1 ; WX 629 ; N kappa ; B 83 0 655 547 ; C -1 ; WX 591 ; N lambda ; B 29 0 563 760 ; C -1 ; WX 711 ; N uni03BC ; B 78 -209 628 547 ; C -1 ; WX 651 ; N nu ; B 15 0 638 547 ; C -1 ; WX 614 ; N xi ; B 69 -216 538 760 ; C -1 ; WX 687 ; N omicron ; B 42 -15 645 561 ; C -1 ; WX 690 ; N pi ; B 83 0 607 547 ; C -1 ; WX 715 ; N rho ; B 83 -209 671 562 ; C -1 ; WX 551 ; N sigma1 ; B 49 -216 494 553 ; C -1 ; WX 778 ; N sigma ; B 42 -15 727 547 ; C -1 ; WX 579 ; N tau ; B 3 0 576 547 ; C -1 ; WX 633 ; N upsilon ; B 84 -15 543 547 ; C -1 ; WX 782 ; N phi ; B 64 -209 725 552 ; C -1 ; WX 645 ; N chi ; B 15 -209 630 547 ; C -1 ; WX 793 ; N psi ; B 64 -209 725 547 ; C -1 ; WX 837 ; N omega ; B 68 -1 766 547 ; C -1 ; WX 357 ; N iotadieresis ; B 22 0 331 774 ; C -1 ; WX 633 ; N upsilondieresis ; B 84 -15 543 774 ; C -1 ; WX 687 ; N omicrontonos ; B 42 -15 645 800 ; C -1 ; WX 633 ; N upsilontonos ; B 84 -15 543 800 ; C -1 ; WX 837 ; N omegatonos ; B 68 -1 766 800 ; C -1 ; WX 614 ; N uni03D0 ; B 54 -12 545 768 ; C -1 ; WX 619 ; N theta1 ; B 51 -12 554 768 ; C -1 ; WX 842 ; N Upsilon1 ; B 0 0 822 733 ; C -1 ; WX 1059 ; N uni03D3 ; B -24 0 1059 800 ; C -1 ; WX 842 ; N uni03D4 ; B 0 0 822 928 ; C -1 ; WX 796 ; N phi1 ; B 60 -209 730 760 ; C -1 ; WX 908 ; N omega1 ; B 53 -1 855 547 ; C -1 ; WX 662 ; N uni03D7 ; B 18 -202 614 554 ; C -1 ; WX 850 ; N uni03D8 ; B 49 -209 800 743 ; C -1 ; WX 687 ; N uni03D9 ; B 42 -209 645 561 ; C -1 ; WX 652 ; N uni03DA ; B 66 -211 565 730 ; C -1 ; WX 582 ; N uni03DB ; B 49 -216 516 616 ; C -1 ; WX 683 ; N uni03DC ; B 91 0 600 730 ; C -1 ; WX 524 ; N uni03DD ; B 83 -209 449 548 ; C -1 ; WX 659 ; N uni03DE ; B 85 -2 604 730 ; C -1 ; WX 659 ; N uni03DF ; B 81 0 572 760 ; C -1 ; WX 918 ; N uni03E0 ; B 55 -209 843 743 ; C -1 ; WX 627 ; N uni03E1 ; B 21 -180 546 559 ; C -1 ; WX 662 ; N uni03F0 ; B 18 -1 614 554 ; C -1 ; WX 715 ; N uni03F1 ; B 83 -216 671 562 ; C -1 ; WX 592 ; N uni03F2 ; B 42 -15 526 561 ; C -1 ; WX 342 ; N uni03F3 ; B -34 -216 259 760 ; C -1 ; WX 850 ; N uni03F4 ; B 49 -15 800 743 ; C -1 ; WX 644 ; N uni03F5 ; B 67 -15 551 561 ; C -1 ; WX 644 ; N uni03F6 ; B 25 -15 509 561 ; C -1 ; WX 737 ; N uni03F7 ; B 91 0 692 730 ; C -1 ; WX 715 ; N uni03F8 ; B 83 -209 671 760 ; C -1 ; WX 733 ; N uni03F9 ; B 49 -15 670 743 ; C -1 ; WX 995 ; N uni03FA ; B 91 0 903 730 ; C -1 ; WX 731 ; N uni03FB ; B 73 -209 650 547 ; C -1 ; WX 715 ; N uni03FC ; B 33 -209 671 562 ; C -1 ; WX 698 ; N uni03FD ; B 33 -15 654 743 ; C -1 ; WX 733 ; N uni03FE ; B 49 -15 670 743 ; C -1 ; WX 698 ; N uni03FF ; B 31 -15 652 743 ; C -1 ; WX 683 ; N uni0400 ; B 91 0 610 928 ; C -1 ; WX 683 ; N afii10023 ; B 91 0 610 928 ; C -1 ; WX 878 ; N afii10051 ; B 4 -201 798 730 ; C -1 ; WX 637 ; N afii10052 ; B 91 0 610 928 ; C -1 ; WX 733 ; N afii10053 ; B 49 -15 670 743 ; C -1 ; WX 720 ; N afii10054 ; B 71 -15 647 743 ; C -1 ; WX 372 ; N afii10055 ; B 91 0 280 730 ; C -1 ; WX 372 ; N afii10056 ; B 36 0 345 928 ; C -1 ; WX 372 ; N afii10057 ; B -57 -201 280 730 ; C -1 ; WX 1154 ; N afii10058 ; B 26 -14 1103 730 ; C -1 ; WX 1129 ; N afii10059 ; B 91 0 1060 730 ; C -1 ; WX 878 ; N afii10060 ; B 4 0 798 730 ; C -1 ; WX 774 ; N afii10061 ; B 91 0 806 928 ; C -1 ; WX 836 ; N uni040D ; B 91 0 746 928 ; C -1 ; WX 770 ; N afii10062 ; B 28 -15 742 928 ; C -1 ; WX 836 ; N afii10145 ; B 91 -209 746 730 ; C -1 ; WX 773 ; N afii10017 ; B 4 0 770 730 ; C -1 ; WX 762 ; N afii10018 ; B 91 0 692 730 ; C -1 ; WX 762 ; N afii10019 ; B 91 0 692 730 ; C -1 ; WX 637 ; N afii10020 ; B 91 0 610 730 ; C -1 ; WX 954 ; N afii10021 ; B 24 -209 930 730 ; C -1 ; WX 683 ; N afii10022 ; B 91 0 610 730 ; C -1 ; WX 1013 ; N afii10024 ; B 22 0 990 730 ; C -1 ; WX 695 ; N afii10025 ; B 66 -15 617 743 ; C -1 ; WX 836 ; N afii10026 ; B 91 0 746 730 ; C -1 ; WX 836 ; N afii10027 ; B 91 0 746 928 ; C -1 ; WX 774 ; N afii10028 ; B 91 0 806 730 ; C -1 ; WX 830 ; N afii10029 ; B 26 -14 739 730 ; C -1 ; WX 995 ; N afii10030 ; B 91 0 903 730 ; C -1 ; WX 836 ; N afii10031 ; B 91 0 746 730 ; C -1 ; WX 850 ; N afii10032 ; B 49 -15 800 743 ; C -1 ; WX 836 ; N afii10033 ; B 91 0 746 730 ; C -1 ; WX 732 ; N afii10034 ; B 91 0 692 730 ; C -1 ; WX 733 ; N afii10035 ; B 49 -15 670 743 ; C -1 ; WX 682 ; N afii10036 ; B 4 0 677 730 ; C -1 ; WX 770 ; N afii10037 ; B 28 -15 742 730 ; C -1 ; WX 850 ; N afii10038 ; B 49 0 800 730 ; C -1 ; WX 770 ; N afii10039 ; B 19 0 751 730 ; C -1 ; WX 957 ; N afii10040 ; B 91 -209 933 730 ; C -1 ; WX 808 ; N afii10041 ; B 80 0 717 730 ; C -1 ; WX 1166 ; N afii10042 ; B 91 0 1075 730 ; C -1 ; WX 1286 ; N afii10043 ; B 91 -209 1263 730 ; C -1 ; WX 939 ; N afii10044 ; B 24 0 890 730 ; C -1 ; WX 1036 ; N afii10045 ; B 91 0 945 730 ; C -1 ; WX 762 ; N afii10046 ; B 91 0 692 730 ; C -1 ; WX 733 ; N afii10047 ; B 63 -15 685 743 ; C -1 ; WX 1134 ; N afii10048 ; B 91 -15 1080 743 ; C -1 ; WX 770 ; N afii10049 ; B 20 0 679 730 ; C -1 ; WX 674 ; N afii10065 ; B 42 -15 597 561 ; C -1 ; WX 687 ; N afii10066 ; B 43 -15 645 743 ; C -1 ; WX 608 ; N afii10067 ; B 83 0 565 547 ; C -1 ; WX 522 ; N afii10068 ; B 83 0 499 547 ; C -1 ; WX 819 ; N afii10069 ; B 24 -209 802 547 ; C -1 ; WX 678 ; N afii10070 ; B 42 -15 630 561 ; C -1 ; WX 820 ; N afii10072 ; B 18 0 802 547 ; C -1 ; WX 556 ; N afii10073 ; B 53 -15 494 561 ; C -1 ; WX 690 ; N afii10074 ; B 83 0 607 547 ; C -1 ; WX 690 ; N afii10075 ; B 83 0 607 765 ; C -1 ; WX 629 ; N afii10076 ; B 83 0 655 547 ; C -1 ; WX 692 ; N afii10077 ; B 20 -15 606 547 ; C -1 ; WX 817 ; N afii10078 ; B 83 0 733 547 ; C -1 ; WX 690 ; N afii10079 ; B 83 0 607 547 ; C -1 ; WX 687 ; N afii10080 ; B 42 -15 645 561 ; C -1 ; WX 690 ; N afii10081 ; B 83 0 607 547 ; C -1 ; WX 715 ; N afii10082 ; B 83 -209 671 561 ; C -1 ; WX 592 ; N afii10083 ; B 42 -15 526 561 ; C -1 ; WX 579 ; N afii10084 ; B 3 0 576 547 ; C -1 ; WX 651 ; N afii10085 ; B 12 -216 634 547 ; C -1 ; WX 915 ; N afii10086 ; B 43 -209 872 730 ; C -1 ; WX 645 ; N afii10087 ; B 15 0 630 547 ; C -1 ; WX 806 ; N afii10088 ; B 83 -209 782 547 ; C -1 ; WX 686 ; N afii10089 ; B 64 0 574 547 ; C -1 ; WX 960 ; N afii10090 ; B 83 0 871 547 ; C -1 ; WX 1070 ; N afii10091 ; B 83 -209 1046 547 ; C -1 ; WX 751 ; N afii10092 ; B 19 0 712 547 ; C -1 ; WX 860 ; N afii10093 ; B 83 0 780 547 ; C -1 ; WX 607 ; N afii10094 ; B 83 0 564 547 ; C -1 ; WX 644 ; N afii10095 ; B 67 -15 590 561 ; C -1 ; WX 918 ; N afii10096 ; B 83 -15 875 561 ; C -1 ; WX 642 ; N afii10097 ; B 20 0 560 547 ; C -1 ; WX 678 ; N uni0450 ; B 42 -15 630 804 ; C -1 ; WX 678 ; N afii10071 ; B 42 -15 630 774 ; C -1 ; WX 711 ; N afii10099 ; B 8 -216 634 760 ; C -1 ; WX 522 ; N afii10100 ; B 83 0 520 804 ; C -1 ; WX 644 ; N afii10101 ; B 42 -15 565 561 ; C -1 ; WX 595 ; N afii10102 ; B 51 -15 548 561 ; C -1 ; WX 342 ; N afii10103 ; B 83 0 259 760 ; C -1 ; WX 342 ; N afii10104 ; B 17 0 326 774 ; C -1 ; WX 342 ; N afii10105 ; B -34 -216 259 760 ; C -1 ; WX 959 ; N afii10106 ; B 20 -15 911 547 ; C -1 ; WX 956 ; N afii10107 ; B 83 0 913 547 ; C -1 ; WX 711 ; N afii10108 ; B 8 0 634 760 ; C -1 ; WX 629 ; N afii10109 ; B 83 0 655 804 ; C -1 ; WX 690 ; N uni045D ; B 83 0 607 804 ; C -1 ; WX 651 ; N afii10110 ; B 12 -216 634 765 ; C -1 ; WX 690 ; N afii10193 ; B 83 -209 607 547 ; C -1 ; WX 637 ; N afii10050 ; B 91 0 610 879 ; C -1 ; WX 522 ; N afii10098 ; B 83 0 499 701 ; C -1 ; WX 637 ; N uni0492 ; B 28 0 610 730 ; C -1 ; WX 522 ; N uni0493 ; B 20 0 499 547 ; C -1 ; WX 774 ; N uni049A ; B 91 -209 806 730 ; C -1 ; WX 629 ; N uni049B ; B 83 -209 655 547 ; C -1 ; WX 770 ; N uni04B2 ; B 19 -209 751 730 ; C -1 ; WX 645 ; N uni04B3 ; B 15 -209 630 547 ; C -1 ; WX 830 ; N uni1E12 ; B 91 -189 778 730 ; C -1 ; WX 715 ; N uni1E13 ; B 44 -221 632 760 ; C -1 ; WX 637 ; N uni1E3C ; B 91 -189 610 730 ; C -1 ; WX 342 ; N uni1E3D ; B -14 -217 355 760 ; C -1 ; WX 836 ; N uni1E44 ; B 91 0 746 922 ; C -1 ; WX 711 ; N uni1E45 ; B 83 0 634 740 ; C -1 ; WX 836 ; N uni1E4A ; B 91 -189 746 730 ; C -1 ; WX 711 ; N uni1E4B ; B 83 -217 634 561 ; C -1 ; WX 682 ; N uni1E70 ; B 4 -189 677 730 ; C -1 ; WX 478 ; N uni1E71 ; B 13 -215 456 703 ; C -1 ; WX 1103 ; N Wgrave ; B 29 0 1072 986 ; C -1 ; WX 923 ; N wgrave ; B 35 0 890 804 ; C -1 ; WX 1103 ; N Wacute ; B 29 0 1072 986 ; C -1 ; WX 923 ; N wacute ; B 35 0 890 804 ; C -1 ; WX 1103 ; N Wdieresis ; B 29 0 1072 922 ; C -1 ; WX 923 ; N wdieresis ; B 35 0 890 740 ; C -1 ; WX 724 ; N Ygrave ; B -10 0 734 986 ; C -1 ; WX 651 ; N ygrave ; B 12 -216 634 804 ; C -1 ; WX 415 ; N uni2010 ; B 54 216 361 359 ; C -1 ; WX 415 ; N uni2011 ; B 54 216 361 359 ; C -1 ; WX 500 ; N figuredash ; B 0 210 500 337 ; C -1 ; WX 500 ; N endash ; B 0 210 500 337 ; C -1 ; WX 1000 ; N emdash ; B 0 210 1000 337 ; C -1 ; WX 1000 ; N afii00208 ; B 0 210 1000 337 ; C -1 ; WX 379 ; N quoteleft ; B 103 417 318 730 ; C -1 ; WX 379 ; N quoteright ; B 62 417 278 730 ; C -1 ; WX 379 ; N quotesinglbase ; B 71 -123 288 189 ; C -1 ; WX 657 ; N quotedblleft ; B 103 417 565 730 ; C -1 ; WX 657 ; N quotedblright ; B 91 417 555 730 ; C -1 ; WX 657 ; N quotedblbase ; B 71 -123 535 189 ; C -1 ; WX 500 ; N dagger ; B 25 -97 471 730 ; C -1 ; WX 500 ; N daggerdbl ; B 24 -97 471 730 ; C -1 ; WX 639 ; N bullet ; B 144 195 496 547 ; C -1 ; WX 1000 ; N ellipsis ; B 79 0 921 189 ; C -1 ; WX 1439 ; N perthousand ; B 32 -15 1417 743 ; C -1 ; WX 412 ; N guilsinglleft ; B 77 66 318 520 ; C -1 ; WX 412 ; N guilsinglright ; B 94 66 335 520 ; C -1 ; WX 455 ; N uni207F ; B 53 462 406 777 ; C -1 ; WX 695 ; N Euro ; B -20 -15 629 743 ; C -1 ; WX 1000 ; N trademark ; B 144 446 791 730 ; C -1 ; WX 543 ; N partialdiff ; B 28 -13 516 666 ; C -1 ; WX 696 ; N Delta ; B 0 0 697 720 ; C -1 ; WX 787 ; N product ; B 73 -192 712 720 ; C -1 ; WX 717 ; N summation ; B 20 -192 697 720 ; C -1 ; WX 837 ; N minus ; B 105 255 732 372 ; C -1 ; WX 166 ; N fraction ; B -200 -15 367 743 ; C -1 ; WX 379 ; N periodcentered ; B 102 252 278 442 ; C -1 ; WX 666 ; N radical ; B 37 -21 669 837 ; C -1 ; WX 833 ; N infinity ; B 95 90 739 504 ; C -1 ; WX 609 ; N integral ; B 24 -183 586 760 ; C -1 ; WX 837 ; N approxequal ; B 105 109 732 518 ; C -1 ; WX 837 ; N notequal ; B 105 -5 732 631 ; C -1 ; WX 837 ; N lessequal ; B 105 0 732 583 ; C -1 ; WX 837 ; N greaterequal ; B 105 0 732 583 ; C -1 ; WX 715 ; N house ; B 64 0 652 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 444 ; C -1 ; WX 538 ; N uni2311 ; B 2 113 536 647 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 444 ; C -1 ; WX 862 ; N uni237D ; B 12 -228 851 99 ; C -1 ; WX 715 ; N uni2423 ; B 64 -228 652 99 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 2 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 741 ; N fi ; B 20 0 658 760 ; C -1 ; WX 741 ; N fl ; B 19 0 658 760 ; C -1 ; WX 1113 ; N uniFFFD ; B 24 -139 1089 926 ; C -1 ; WX 500 ; N dlLtcaron ; B 178 616 356 800 ; C -1 ; WX 500 ; N Dieresis ; B 96 625 404 746 ; C -1 ; WX 500 ; N Acute ; B 178 616 414 746 ; C -1 ; WX 500 ; N Tilde ; B 80 616 420 747 ; C -1 ; WX 500 ; N Grave ; B 86 616 322 746 ; C -1 ; WX 500 ; N Circumflex ; B 65 616 435 746 ; C -1 ; WX 500 ; N Caron ; B 65 616 435 746 ; C -1 ; WX 500 ; N Breve ; B 85 616 415 746 ; C -1 ; WX 500 ; N Dotaccent ; B 183 625 317 746 ; C -1 ; WX 500 ; N Hungarumlaut ; B 78 616 497 746 ; C -1 ; WX 500 ; N Doublegrave ; B 3 616 422 746 ; EndCharMetrics StartKernData StartKernPairs 1413 KPX hyphen Tcaron -146 KPX hyphen Yacute -146 KPX hyphen Ydieresis -146 KPX hyphen Y -146 KPX hyphen X -81 KPX hyphen W -44 KPX hyphen V -72 KPX hyphen T -146 KPX A uni0233 -35 KPX A ycircumflex -35 KPX A Ygrave -95 KPX A uni0232 -95 KPX A Ycircumflex -95 KPX A Uhungarumlaut -30 KPX A Ubreve -30 KPX A Umacron -30 KPX A Utilde -30 KPX A Wdieresis -44 KPX A Wacute -44 KPX A Wgrave -44 KPX A Wcircumflex -44 KPX A uni021A -77 KPX A Tcommaaccent -77 KPX A Uring -30 KPX A Tcaron -77 KPX A yacute -35 KPX A Yacute -95 KPX A Ugrave -30 KPX A Ucircumflex -30 KPX A Uacute -30 KPX A quotedblbase 55 KPX A quotesinglbase 55 KPX A Ydieresis -95 KPX A ydieresis -35 KPX A quoteright -91 KPX A quotedblright -91 KPX A Udieresis -30 KPX A y -35 KPX A v -35 KPX A Y -95 KPX A W -44 KPX A V -67 KPX A U -30 KPX A T -77 KPX A semicolon 18 KPX A colon 18 KPX A period 18 KPX A comma 18 KPX B Ygrave -54 KPX B uni0232 -54 KPX B Ycircumflex -54 KPX B Wdieresis -54 KPX B Wacute -54 KPX B Wgrave -54 KPX B Wcircumflex -54 KPX B Yacute -54 KPX B Ydieresis -54 KPX B Y -54 KPX B W -54 KPX B V -40 KPX C Scommaaccent 18 KPX C Scircumflex 18 KPX C Sacute 18 KPX C Scedilla 18 KPX C Scaron 18 KPX C quoteright 36 KPX C quotedblright 36 KPX C S 18 KPX C hyphen 22 KPX D Ygrave -72 KPX D uni0232 -72 KPX D Ycircumflex -72 KPX D Yacute -72 KPX D quotedblbase -17 KPX D quotesinglbase -17 KPX D Ydieresis -72 KPX D Y -72 KPX D hyphen 18 KPX F uni01E3 -58 KPX F ygrave -54 KPX F uni0233 -54 KPX F ycircumflex -54 KPX F uogonek -49 KPX F uhungarumlaut -49 KPX F ubreve -49 KPX F umacron -49 KPX F utilde -49 KPX F rcommaaccent -63 KPX F uni022F -40 KPX F uni01ED -40 KPX F uni01EB -40 KPX F ohungarumlaut -40 KPX F obreve -40 KPX F omacron -40 KPX F eogonek -40 KPX F edotaccent -40 KPX F ebreve -40 KPX F emacron -40 KPX F aogonek -58 KPX F abreve -58 KPX F amacron -58 KPX F Aogonek -114 KPX F Abreve -114 KPX F Amacron -114 KPX F udieresis -49 KPX F aring -58 KPX F ae -58 KPX F semicolon -54 KPX F ograve -40 KPX F hyphen -30 KPX F quotedblbase -165 KPX F uring -49 KPX F otilde -40 KPX F edieresis -40 KPX F ugrave -49 KPX F comma -160 KPX F agrave -58 KPX F Atilde -114 KPX F ecircumflex -40 KPX F racute -63 KPX F egrave -40 KPX F Adieresis -114 KPX F Aacute -114 KPX F quoteright 18 KPX F ucircumflex -49 KPX F yacute -54 KPX F quotesinglbase -165 KPX F atilde -58 KPX F Acircumflex -114 KPX F oslash -40 KPX F ocircumflex -40 KPX F A -114 KPX F a -58 KPX F adieresis -58 KPX F odieresis -40 KPX F uacute -49 KPX F aacute -58 KPX F rcaron -63 KPX F period -146 KPX F acircumflex -58 KPX F eacute -40 KPX F ecaron -40 KPX F e -40 KPX F oe -40 KPX F ydieresis -54 KPX F o -40 KPX F r -63 KPX F u -49 KPX F Agrave -114 KPX F y -54 KPX F colon -54 KPX F oacute -40 KPX G Tcaron -17 KPX G Yacute -21 KPX G Ydieresis -21 KPX G Y -21 KPX G T -17 KPX K uring -17 KPX K Uring -17 KPX K ecaron -17 KPX K Ccaron -44 KPX K Cacute -44 KPX K yacute -63 KPX K Ugrave -17 KPX K Ucircumflex -17 KPX K Uacute -17 KPX K Ograve -44 KPX K Ocircumflex -44 KPX K Oacute -44 KPX K quotedblbase 18 KPX K quotesinglbase 18 KPX K ydieresis -63 KPX K oe -17 KPX K OE -49 KPX K Otilde -44 KPX K oslash -17 KPX K Oslash -26 KPX K udieresis -17 KPX K ucircumflex -17 KPX K ugrave -17 KPX K uacute -17 KPX K otilde -17 KPX K odieresis -17 KPX K ocircumflex -17 KPX K ograve -17 KPX K oacute -17 KPX K edieresis -17 KPX K ecircumflex -17 KPX K egrave -17 KPX K eacute -17 KPX K Udieresis -17 KPX K Odieresis -44 KPX K Ccedilla -44 KPX K y -63 KPX K u -17 KPX K o -17 KPX K e -17 KPX K U -17 KPX K O -44 KPX K C -44 KPX K hyphen -86 KPX L Uring -35 KPX L Tcaron -165 KPX L yacute -67 KPX L Yacute -155 KPX L Ugrave -35 KPX L Ucircumflex -35 KPX L Uacute -35 KPX L Ograve -35 KPX L Ocircumflex -35 KPX L Oacute -35 KPX L Ydieresis -155 KPX L ydieresis -67 KPX L quoteright -229 KPX L quotedblright -239 KPX L OE -35 KPX L Otilde -35 KPX L Oslash -35 KPX L Udieresis -35 KPX L Odieresis -35 KPX L y -67 KPX L Y -155 KPX L W -77 KPX L V -137 KPX L U -35 KPX L T -165 KPX L O -35 KPX O Yacute -35 KPX O Aacute -26 KPX O Acircumflex -26 KPX O Ydieresis -35 KPX O Atilde -26 KPX O Agrave -26 KPX O Adieresis -26 KPX O Y -35 KPX O X -35 KPX O V -26 KPX O A -26 KPX O period -21 KPX O hyphen 18 KPX O comma -21 KPX P scedilla -17 KPX P yacute 18 KPX P scaron -17 KPX P Aacute -91 KPX P Acircumflex -91 KPX P quotedblbase -202 KPX P quotesinglbase -202 KPX P ydieresis 18 KPX P quoteright 27 KPX P quotedblright 18 KPX P Atilde -91 KPX P Agrave -91 KPX P ae -26 KPX P aring -26 KPX P atilde -26 KPX P adieresis -26 KPX P acircumflex -26 KPX P agrave -26 KPX P aacute -26 KPX P Adieresis -91 KPX P y 18 KPX P s -17 KPX P a -26 KPX P A -91 KPX P period -183 KPX P hyphen -17 KPX P comma -183 KPX Q hyphen 18 KPX R Tcaron -44 KPX R yacute -44 KPX R Yacute -54 KPX R Ydieresis -54 KPX R ydieresis -44 KPX R y -44 KPX R Y -54 KPX R T -44 KPX R period 18 KPX R comma 18 KPX S Scedilla -44 KPX S Scaron -44 KPX S S -44 KPX T udieresis -109 KPX T aring -128 KPX T ae -95 KPX T semicolon -54 KPX T ograve -132 KPX T hyphen -146 KPX T quotedblbase -128 KPX T uring -109 KPX T otilde -132 KPX T edieresis -132 KPX T ugrave -109 KPX T colon -54 KPX T agrave -128 KPX T Atilde -77 KPX T ecircumflex -132 KPX T ccedilla -132 KPX T racute -109 KPX T egrave -132 KPX T Adieresis -77 KPX T Aacute -77 KPX T ccaron -132 KPX T rcaron -109 KPX T ucircumflex -109 KPX T yacute -118 KPX T quotesinglbase -128 KPX T atilde -128 KPX T Acircumflex -77 KPX T oslash -77 KPX T ocircumflex -132 KPX T scaron -132 KPX T A -77 KPX T ecaron -132 KPX T scedilla -132 KPX T adieresis -128 KPX T w -109 KPX T odieresis -132 KPX T uacute -109 KPX T cacute -132 KPX T aacute -128 KPX T period -151 KPX T T 22 KPX T acircumflex -128 KPX T eacute -132 KPX T a -128 KPX T c -132 KPX T e -132 KPX T oe -77 KPX T ydieresis -118 KPX T o -132 KPX T s -132 KPX T r -109 KPX T u -109 KPX T Agrave -77 KPX T y -118 KPX T comma -142 KPX T oacute -132 KPX U Aacute -30 KPX U Acircumflex -30 KPX U Atilde -30 KPX U Agrave -30 KPX U Adieresis -30 KPX U A -30 KPX V uring -35 KPX V ecaron -54 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -67 KPX V Acircumflex -67 KPX V quotedblbase -91 KPX V quotesinglbase -109 KPX V oe -54 KPX V OE -17 KPX V Otilde -17 KPX V Atilde -67 KPX V Agrave -67 KPX V oslash -54 KPX V ae -54 KPX V Oslash -17 KPX V udieresis -35 KPX V ucircumflex -35 KPX V ugrave -35 KPX V uacute -35 KPX V otilde -54 KPX V odieresis -54 KPX V ocircumflex -54 KPX V ograve -54 KPX V oacute -54 KPX V edieresis -54 KPX V ecircumflex -54 KPX V egrave -54 KPX V eacute -54 KPX V aring -54 KPX V atilde -54 KPX V adieresis -54 KPX V acircumflex -54 KPX V agrave -54 KPX V aacute -54 KPX V Odieresis -17 KPX V Adieresis -67 KPX V u -35 KPX V o -54 KPX V i -17 KPX V e -54 KPX V a -54 KPX V O -17 KPX V A -67 KPX V semicolon -44 KPX V colon -44 KPX V period -128 KPX V hyphen -72 KPX V comma -128 KPX W aring -35 KPX W ae -35 KPX W semicolon -30 KPX W ograve -35 KPX W hyphen -44 KPX W period -81 KPX W otilde -35 KPX W edieresis -35 KPX W comma -81 KPX W agrave -35 KPX W Atilde -44 KPX W ecircumflex -35 KPX W racute -17 KPX W egrave -35 KPX W Adieresis -44 KPX W Aacute -44 KPX W atilde -35 KPX W Acircumflex -44 KPX W oslash -35 KPX W ocircumflex -35 KPX W A -44 KPX W a -35 KPX W adieresis -35 KPX W odieresis -35 KPX W aacute -35 KPX W rcaron -17 KPX W acircumflex -35 KPX W eacute -35 KPX W ecaron -35 KPX W e -35 KPX W oe -35 KPX W o -35 KPX W r -17 KPX W Agrave -44 KPX W colon -30 KPX W oacute -35 KPX X ecaron -26 KPX X Ccaron -35 KPX X Cacute -35 KPX X Ograve -35 KPX X Ocircumflex -35 KPX X Oacute -35 KPX X quotedblbase 18 KPX X quotesinglbase 18 KPX X OE -35 KPX X Otilde -35 KPX X Oslash -35 KPX X edieresis -26 KPX X ecircumflex -26 KPX X egrave -26 KPX X eacute -26 KPX X Odieresis -35 KPX X Ccedilla -35 KPX X e -26 KPX X O -35 KPX X C -35 KPX X hyphen -81 KPX Y uring -72 KPX Y ecaron -91 KPX Y Ccaron -35 KPX Y Cacute -35 KPX Y Ograve -35 KPX Y Ocircumflex -35 KPX Y Oacute -35 KPX Y Aacute -95 KPX Y Acircumflex -95 KPX Y quotedblbase -146 KPX Y quotesinglbase -183 KPX Y oe -91 KPX Y OE -44 KPX Y Otilde -35 KPX Y Atilde -95 KPX Y Agrave -95 KPX Y oslash -91 KPX Y ae -91 KPX Y Oslash -17 KPX Y udieresis -72 KPX Y ucircumflex -72 KPX Y ugrave -72 KPX Y uacute -72 KPX Y otilde -91 KPX Y odieresis -91 KPX Y ocircumflex -91 KPX Y ograve -91 KPX Y oacute -91 KPX Y edieresis -91 KPX Y ecircumflex -91 KPX Y egrave -91 KPX Y eacute -91 KPX Y aring -91 KPX Y atilde -91 KPX Y adieresis -91 KPX Y acircumflex -91 KPX Y agrave -91 KPX Y aacute -91 KPX Y Odieresis -35 KPX Y Ccedilla -35 KPX Y Adieresis -95 KPX Y u -72 KPX Y o -91 KPX Y e -91 KPX Y a -91 KPX Y O -35 KPX Y C -35 KPX Y A -95 KPX Y semicolon -86 KPX Y colon -86 KPX Y period -165 KPX Y hyphen -146 KPX Y comma -165 KPX Z hyphen -17 KPX a yacute -30 KPX a ydieresis -30 KPX a y -30 KPX f quoteright 68 KPX f quotedblright 41 KPX f period -54 KPX f hyphen -17 KPX f comma -54 KPX k ecaron -26 KPX k oe -26 KPX k oslash -21 KPX k otilde -26 KPX k odieresis -26 KPX k ocircumflex -26 KPX k ograve -26 KPX k oacute -26 KPX k edieresis -26 KPX k ecircumflex -26 KPX k egrave -26 KPX k eacute -26 KPX k o -26 KPX k e -26 KPX r quoteright 41 KPX r quotedblright 18 KPX r period -142 KPX r comma -146 KPX v period -81 KPX v comma -81 KPX w period -63 KPX w comma -63 KPX y period -91 KPX y comma -77 KPX Agrave uni0233 -35 KPX Agrave ycircumflex -35 KPX Agrave Ygrave -95 KPX Agrave uni0232 -95 KPX Agrave Ycircumflex -95 KPX Agrave Uhungarumlaut -30 KPX Agrave Ubreve -30 KPX Agrave Umacron -30 KPX Agrave Utilde -30 KPX Agrave Wdieresis -44 KPX Agrave Wacute -44 KPX Agrave Wgrave -44 KPX Agrave Wcircumflex -44 KPX Agrave uni021A -77 KPX Agrave Tcommaaccent -77 KPX Agrave Uring -30 KPX Agrave Tcaron -77 KPX Agrave yacute -35 KPX Agrave Yacute -95 KPX Agrave Ugrave -30 KPX Agrave Ucircumflex -30 KPX Agrave Uacute -30 KPX Agrave quotedblbase 55 KPX Agrave quotesinglbase 55 KPX Agrave Ydieresis -95 KPX Agrave ydieresis -35 KPX Agrave quoteright -91 KPX Agrave quotedblright -91 KPX Agrave Udieresis -30 KPX Agrave y -35 KPX Agrave v -35 KPX Agrave Y -95 KPX Agrave W -44 KPX Agrave V -67 KPX Agrave U -30 KPX Agrave T -77 KPX Agrave semicolon 18 KPX Agrave colon 18 KPX Agrave period 18 KPX Agrave comma 18 KPX Aacute uni0233 -35 KPX Aacute ycircumflex -35 KPX Aacute Ygrave -95 KPX Aacute uni0232 -95 KPX Aacute Ycircumflex -95 KPX Aacute Uhungarumlaut -30 KPX Aacute Ubreve -30 KPX Aacute Umacron -30 KPX Aacute Utilde -30 KPX Aacute Wdieresis -44 KPX Aacute Wacute -44 KPX Aacute Wgrave -44 KPX Aacute Wcircumflex -44 KPX Aacute uni021A -77 KPX Aacute Tcommaaccent -77 KPX Aacute Uring -30 KPX Aacute Tcaron -77 KPX Aacute yacute -35 KPX Aacute Yacute -95 KPX Aacute Ugrave -30 KPX Aacute Ucircumflex -30 KPX Aacute Uacute -30 KPX Aacute quotedblbase 55 KPX Aacute quotesinglbase 55 KPX Aacute Ydieresis -95 KPX Aacute ydieresis -35 KPX Aacute quoteright -91 KPX Aacute quotedblright -91 KPX Aacute Udieresis -30 KPX Aacute y -35 KPX Aacute v -35 KPX Aacute Y -95 KPX Aacute W -44 KPX Aacute V -67 KPX Aacute U -30 KPX Aacute T -77 KPX Aacute semicolon 18 KPX Aacute colon 18 KPX Aacute period 18 KPX Aacute comma 18 KPX Acircumflex uni0233 -35 KPX Acircumflex ycircumflex -35 KPX Acircumflex Ygrave -95 KPX Acircumflex uni0232 -95 KPX Acircumflex Ycircumflex -95 KPX Acircumflex Wdieresis -44 KPX Acircumflex Wacute -44 KPX Acircumflex Wgrave -44 KPX Acircumflex Uhungarumlaut -30 KPX Acircumflex Ubreve -30 KPX Acircumflex Umacron -30 KPX Acircumflex Utilde -30 KPX Acircumflex Wcircumflex -44 KPX Acircumflex uni021A -77 KPX Acircumflex Tcommaaccent -77 KPX Acircumflex Uring -30 KPX Acircumflex Tcaron -77 KPX Acircumflex yacute -35 KPX Acircumflex Yacute -95 KPX Acircumflex Ugrave -30 KPX Acircumflex Ucircumflex -30 KPX Acircumflex Uacute -30 KPX Acircumflex quotedblbase 55 KPX Acircumflex quotesinglbase 55 KPX Acircumflex Ydieresis -95 KPX Acircumflex ydieresis -35 KPX Acircumflex quoteright -91 KPX Acircumflex quotedblright -91 KPX Acircumflex Udieresis -30 KPX Acircumflex y -35 KPX Acircumflex v -35 KPX Acircumflex Y -95 KPX Acircumflex W -44 KPX Acircumflex V -67 KPX Acircumflex U -30 KPX Acircumflex T -77 KPX Acircumflex semicolon 18 KPX Acircumflex colon 18 KPX Acircumflex period 18 KPX Acircumflex comma 18 KPX Atilde uni0233 -35 KPX Atilde ycircumflex -35 KPX Atilde Ygrave -95 KPX Atilde uni0232 -95 KPX Atilde Ycircumflex -95 KPX Atilde Wdieresis -44 KPX Atilde Wacute -44 KPX Atilde Wgrave -44 KPX Atilde Uhungarumlaut -30 KPX Atilde Ubreve -30 KPX Atilde Umacron -30 KPX Atilde Utilde -30 KPX Atilde Wcircumflex -44 KPX Atilde uni021A -77 KPX Atilde Tcommaaccent -77 KPX Atilde Uring -30 KPX Atilde Tcaron -77 KPX Atilde yacute -35 KPX Atilde Yacute -95 KPX Atilde Ugrave -30 KPX Atilde Ucircumflex -30 KPX Atilde Uacute -30 KPX Atilde quotedblbase 55 KPX Atilde quotesinglbase 55 KPX Atilde Ydieresis -95 KPX Atilde ydieresis -35 KPX Atilde quoteright -91 KPX Atilde quotedblright -91 KPX Atilde Udieresis -30 KPX Atilde y -35 KPX Atilde v -35 KPX Atilde Y -95 KPX Atilde W -44 KPX Atilde V -67 KPX Atilde U -30 KPX Atilde T -77 KPX Atilde semicolon 18 KPX Atilde colon 18 KPX Atilde period 18 KPX Atilde comma 18 KPX Adieresis uni0233 -35 KPX Adieresis ycircumflex -35 KPX Adieresis Ygrave -95 KPX Adieresis uni0232 -95 KPX Adieresis Ycircumflex -95 KPX Adieresis Wdieresis -44 KPX Adieresis Wacute -44 KPX Adieresis Wgrave -44 KPX Adieresis Uhungarumlaut -30 KPX Adieresis Ubreve -30 KPX Adieresis Umacron -30 KPX Adieresis Utilde -30 KPX Adieresis Wcircumflex -44 KPX Adieresis uni021A -77 KPX Adieresis Tcommaaccent -77 KPX Adieresis Uring -30 KPX Adieresis Tcaron -77 KPX Adieresis yacute -35 KPX Adieresis Yacute -95 KPX Adieresis Ugrave -30 KPX Adieresis Ucircumflex -30 KPX Adieresis Uacute -30 KPX Adieresis quotedblbase 55 KPX Adieresis quotesinglbase 55 KPX Adieresis Ydieresis -95 KPX Adieresis ydieresis -35 KPX Adieresis quoteright -91 KPX Adieresis quotedblright -91 KPX Adieresis Udieresis -30 KPX Adieresis y -35 KPX Adieresis v -35 KPX Adieresis Y -95 KPX Adieresis W -44 KPX Adieresis V -67 KPX Adieresis U -30 KPX Adieresis T -77 KPX Adieresis semicolon 18 KPX Adieresis colon 18 KPX Adieresis period 18 KPX Adieresis comma 18 KPX AE hyphen -17 KPX Ccedilla Scommaaccent 18 KPX Ccedilla Scircumflex 18 KPX Ccedilla Sacute 18 KPX Ccedilla Scedilla 18 KPX Ccedilla Scaron 18 KPX Ccedilla quoteright 36 KPX Ccedilla quotedblright 36 KPX Ccedilla S 18 KPX Ccedilla hyphen 22 KPX Eth Ygrave -72 KPX Eth uni0232 -72 KPX Eth Ycircumflex -72 KPX Eth Yacute -72 KPX Eth quotedblbase -17 KPX Eth quotesinglbase -17 KPX Eth Ydieresis -72 KPX Eth Y -72 KPX Eth hyphen 18 KPX Ograve Yacute -35 KPX Ograve Aacute -26 KPX Ograve Acircumflex -26 KPX Ograve Ydieresis -35 KPX Ograve Atilde -26 KPX Ograve Agrave -26 KPX Ograve Adieresis -26 KPX Ograve Y -35 KPX Ograve X -35 KPX Ograve V -26 KPX Ograve A -26 KPX Ograve period -21 KPX Ograve hyphen 18 KPX Ograve comma -21 KPX Oacute Yacute -35 KPX Oacute Aacute -26 KPX Oacute Acircumflex -26 KPX Oacute Ydieresis -35 KPX Oacute Atilde -26 KPX Oacute Agrave -26 KPX Oacute Adieresis -26 KPX Oacute Y -35 KPX Oacute X -35 KPX Oacute V -26 KPX Oacute A -26 KPX Oacute period -21 KPX Oacute hyphen 18 KPX Oacute comma -21 KPX Ocircumflex Yacute -35 KPX Ocircumflex Aacute -26 KPX Ocircumflex Acircumflex -26 KPX Ocircumflex Ydieresis -35 KPX Ocircumflex Atilde -26 KPX Ocircumflex Agrave -26 KPX Ocircumflex Adieresis -26 KPX Ocircumflex Y -35 KPX Ocircumflex X -35 KPX Ocircumflex V -26 KPX Ocircumflex A -26 KPX Ocircumflex period -21 KPX Ocircumflex hyphen 18 KPX Ocircumflex comma -21 KPX Otilde Yacute -35 KPX Otilde Aacute -26 KPX Otilde Acircumflex -26 KPX Otilde Ydieresis -35 KPX Otilde Atilde -26 KPX Otilde Agrave -26 KPX Otilde Adieresis -26 KPX Otilde Y -35 KPX Otilde X -35 KPX Otilde V -26 KPX Otilde A -26 KPX Otilde period -21 KPX Otilde hyphen 18 KPX Otilde comma -21 KPX Odieresis Yacute -35 KPX Odieresis Aacute -26 KPX Odieresis Acircumflex -26 KPX Odieresis Ydieresis -35 KPX Odieresis Atilde -26 KPX Odieresis Agrave -26 KPX Odieresis Adieresis -26 KPX Odieresis Y -35 KPX Odieresis X -35 KPX Odieresis V -26 KPX Odieresis A -26 KPX Odieresis period -21 KPX Odieresis hyphen 18 KPX Odieresis comma -21 KPX Oslash Yacute -17 KPX Oslash Aacute -17 KPX Oslash Acircumflex -17 KPX Oslash Ydieresis -17 KPX Oslash Atilde -17 KPX Oslash Agrave -17 KPX Oslash Adieresis -17 KPX Oslash Y -17 KPX Oslash X -35 KPX Oslash V -17 KPX Oslash A -17 KPX Oslash period -21 KPX Oslash hyphen 18 KPX Oslash comma -21 KPX Ugrave Aacute -30 KPX Ugrave Acircumflex -30 KPX Ugrave Atilde -30 KPX Ugrave Agrave -30 KPX Ugrave Adieresis -30 KPX Ugrave A -30 KPX Uacute Aacute -30 KPX Uacute Acircumflex -30 KPX Uacute Atilde -30 KPX Uacute Agrave -30 KPX Uacute Adieresis -30 KPX Uacute A -30 KPX Ucircumflex Aacute -30 KPX Ucircumflex Acircumflex -30 KPX Ucircumflex Atilde -30 KPX Ucircumflex Agrave -30 KPX Ucircumflex Adieresis -30 KPX Ucircumflex A -30 KPX Udieresis Aacute -30 KPX Udieresis Acircumflex -30 KPX Udieresis Atilde -30 KPX Udieresis Agrave -30 KPX Udieresis Adieresis -30 KPX Udieresis A -30 KPX Yacute uring -72 KPX Yacute ecaron -91 KPX Yacute Ccaron -35 KPX Yacute Cacute -35 KPX Yacute Ograve -35 KPX Yacute Ocircumflex -35 KPX Yacute Oacute -35 KPX Yacute Aacute -95 KPX Yacute Acircumflex -95 KPX Yacute quotedblbase -146 KPX Yacute quotesinglbase -183 KPX Yacute oe -91 KPX Yacute OE -44 KPX Yacute Otilde -35 KPX Yacute Atilde -95 KPX Yacute Agrave -95 KPX Yacute oslash -91 KPX Yacute ae -91 KPX Yacute Oslash -17 KPX Yacute udieresis -72 KPX Yacute ucircumflex -72 KPX Yacute ugrave -72 KPX Yacute uacute -72 KPX Yacute otilde -91 KPX Yacute odieresis -91 KPX Yacute ocircumflex -91 KPX Yacute ograve -91 KPX Yacute oacute -91 KPX Yacute edieresis -91 KPX Yacute ecircumflex -91 KPX Yacute egrave -91 KPX Yacute eacute -91 KPX Yacute aring -91 KPX Yacute atilde -91 KPX Yacute adieresis -91 KPX Yacute acircumflex -91 KPX Yacute agrave -91 KPX Yacute aacute -91 KPX Yacute Odieresis -35 KPX Yacute Ccedilla -35 KPX Yacute Adieresis -95 KPX Yacute u -72 KPX Yacute o -91 KPX Yacute e -91 KPX Yacute a -91 KPX Yacute O -35 KPX Yacute C -35 KPX Yacute A -95 KPX Yacute semicolon -86 KPX Yacute colon -86 KPX Yacute period -165 KPX Yacute hyphen -146 KPX Yacute comma -165 KPX agrave yacute -30 KPX agrave ydieresis -30 KPX agrave y -30 KPX aacute yacute -30 KPX aacute ydieresis -30 KPX aacute y -30 KPX acircumflex yacute -30 KPX acircumflex ydieresis -30 KPX acircumflex y -30 KPX atilde yacute -30 KPX atilde ydieresis -30 KPX atilde y -30 KPX adieresis yacute -30 KPX adieresis ydieresis -30 KPX adieresis y -30 KPX aring yacute -30 KPX aring ydieresis -30 KPX aring y -30 KPX yacute period -91 KPX yacute comma -77 KPX ydieresis period -91 KPX ydieresis comma -77 KPX Amacron uni0233 -35 KPX Amacron ycircumflex -35 KPX Amacron Ygrave -95 KPX Amacron uni0232 -95 KPX Amacron Ycircumflex -95 KPX Amacron Wdieresis -44 KPX Amacron Wacute -44 KPX Amacron Wgrave -44 KPX Amacron Uhungarumlaut -30 KPX Amacron Ubreve -30 KPX Amacron Umacron -30 KPX Amacron Utilde -30 KPX Amacron Wcircumflex -44 KPX Amacron uni021A -77 KPX Amacron Tcommaaccent -77 KPX Amacron Uring -30 KPX Amacron Tcaron -77 KPX Amacron yacute -35 KPX Amacron Yacute -95 KPX Amacron Ugrave -30 KPX Amacron Ucircumflex -30 KPX Amacron Uacute -30 KPX Amacron quotedblbase 55 KPX Amacron quotesinglbase 55 KPX Amacron Ydieresis -95 KPX Amacron ydieresis -35 KPX Amacron quoteright -91 KPX Amacron quotedblright -91 KPX Amacron Udieresis -30 KPX Amacron y -35 KPX Amacron v -35 KPX Amacron Y -95 KPX Amacron W -44 KPX Amacron V -67 KPX Amacron U -30 KPX Amacron T -77 KPX Amacron semicolon 18 KPX Amacron colon 18 KPX Amacron period 18 KPX Amacron comma 18 KPX Abreve uni0233 -35 KPX Abreve ycircumflex -35 KPX Abreve Ygrave -95 KPX Abreve uni0232 -95 KPX Abreve Ycircumflex -95 KPX Abreve Wdieresis -44 KPX Abreve Wacute -44 KPX Abreve Wgrave -44 KPX Abreve Uhungarumlaut -30 KPX Abreve Ubreve -30 KPX Abreve Umacron -30 KPX Abreve Utilde -30 KPX Abreve Wcircumflex -44 KPX Abreve uni021A -77 KPX Abreve Tcommaaccent -77 KPX Abreve Uring -30 KPX Abreve Tcaron -77 KPX Abreve yacute -35 KPX Abreve Yacute -95 KPX Abreve Ugrave -30 KPX Abreve Ucircumflex -30 KPX Abreve Uacute -30 KPX Abreve quotedblbase 55 KPX Abreve quotesinglbase 55 KPX Abreve Ydieresis -95 KPX Abreve ydieresis -35 KPX Abreve quoteright -91 KPX Abreve quotedblright -91 KPX Abreve Udieresis -30 KPX Abreve y -35 KPX Abreve v -35 KPX Abreve Y -95 KPX Abreve W -44 KPX Abreve V -67 KPX Abreve U -30 KPX Abreve T -77 KPX Abreve semicolon 18 KPX Abreve colon 18 KPX Abreve period 18 KPX Abreve comma 18 KPX Aogonek uni0233 -35 KPX Aogonek ycircumflex -35 KPX Aogonek Ygrave -95 KPX Aogonek uni0232 -95 KPX Aogonek Ycircumflex -95 KPX Aogonek Wacute -44 KPX Aogonek Wgrave -44 KPX Aogonek Uhungarumlaut -30 KPX Aogonek Ubreve -30 KPX Aogonek Umacron -30 KPX Aogonek Utilde -30 KPX Aogonek Wcircumflex -44 KPX Aogonek uni021A -77 KPX Aogonek Tcommaaccent -77 KPX Aogonek Uring -30 KPX Aogonek Tcaron -77 KPX Aogonek yacute -35 KPX Aogonek Yacute -95 KPX Aogonek Ugrave -30 KPX Aogonek Ucircumflex -30 KPX Aogonek Uacute -30 KPX Aogonek quotedblbase 55 KPX Aogonek quotesinglbase 55 KPX Aogonek Ydieresis -95 KPX Aogonek ydieresis -35 KPX Aogonek quoteright -91 KPX Aogonek quotedblright -91 KPX Aogonek Udieresis -30 KPX Aogonek y -35 KPX Aogonek v -35 KPX Aogonek Y -95 KPX Aogonek W -44 KPX Aogonek V -67 KPX Aogonek U -30 KPX Aogonek T -77 KPX Aogonek semicolon 18 KPX Aogonek colon 18 KPX Aogonek period 18 KPX Aogonek comma 18 KPX Cacute Scommaaccent 18 KPX Cacute Scircumflex 18 KPX Cacute Sacute 18 KPX Cacute Scedilla 18 KPX Cacute Scaron 18 KPX Cacute quoteright 36 KPX Cacute quotedblright 36 KPX Cacute S 18 KPX Cacute hyphen 22 KPX Ccircumflex Scommaaccent 18 KPX Ccircumflex Scircumflex 18 KPX Ccircumflex Sacute 18 KPX Ccircumflex Scedilla 18 KPX Ccircumflex Scaron 18 KPX Ccircumflex quoteright 36 KPX Ccircumflex quotedblright 36 KPX Ccircumflex S 18 KPX Ccircumflex hyphen 22 KPX Cdotaccent Scommaaccent 18 KPX Cdotaccent Scircumflex 18 KPX Cdotaccent Sacute 18 KPX Cdotaccent Scedilla 18 KPX Cdotaccent Scaron 18 KPX Cdotaccent quoteright 36 KPX Cdotaccent quotedblright 36 KPX Cdotaccent S 18 KPX Cdotaccent hyphen 22 KPX Ccaron Scommaaccent 18 KPX Ccaron Scircumflex 18 KPX Ccaron Sacute 18 KPX Ccaron Scedilla 18 KPX Ccaron Scaron 18 KPX Ccaron quoteright 36 KPX Ccaron quotedblright 36 KPX Ccaron S 18 KPX Ccaron hyphen 22 KPX Dcaron Ygrave -72 KPX Dcaron uni0232 -72 KPX Dcaron Ycircumflex -72 KPX Dcaron Yacute -72 KPX Dcaron quotedblbase -17 KPX Dcaron quotesinglbase -17 KPX Dcaron Ydieresis -72 KPX Dcaron Y -72 KPX Dcaron hyphen 18 KPX Dcroat Ygrave -72 KPX Dcroat uni0232 -72 KPX Dcroat Ycircumflex -72 KPX Dcroat Yacute -72 KPX Dcroat quotedblbase -17 KPX Dcroat quotesinglbase -17 KPX Dcroat Ydieresis -72 KPX Dcroat Y -72 KPX Dcroat hyphen 18 KPX Gbreve Tcaron -17 KPX Gbreve Yacute -21 KPX Gbreve Ydieresis -21 KPX Gbreve Y -21 KPX Gbreve T -17 KPX Lacute Oslash -35 KPX Lacute Ydieresis -155 KPX Lacute Otilde -35 KPX Lacute O -35 KPX Lacute Ucircumflex -35 KPX Lacute Yacute -155 KPX Lacute W -77 KPX Lacute V -137 KPX Lacute Y -155 KPX Lacute Oacute -35 KPX Lacute Udieresis -35 KPX Lacute quotedblright -239 KPX Lacute Odieresis -35 KPX Lacute Ograve -35 KPX Lacute Uacute -35 KPX Lacute OE -35 KPX Lacute ydieresis -67 KPX Lacute Uring -35 KPX Lacute quoteright -229 KPX Lacute Ugrave -35 KPX Lacute yacute -67 KPX Lacute y -67 KPX Lacute U -35 KPX Lacute Tcaron -165 KPX Lacute Ocircumflex -35 KPX Lacute T -165 KPX Lcaron Oslash -35 KPX Lcaron Ydieresis -155 KPX Lcaron Otilde -35 KPX Lcaron O -35 KPX Lcaron Ucircumflex -35 KPX Lcaron Yacute -155 KPX Lcaron W -77 KPX Lcaron V -137 KPX Lcaron Y -155 KPX Lcaron Oacute -35 KPX Lcaron Udieresis -35 KPX Lcaron quotedblright -239 KPX Lcaron Odieresis -35 KPX Lcaron Ograve -35 KPX Lcaron Uacute -35 KPX Lcaron OE -35 KPX Lcaron ydieresis -67 KPX Lcaron Uring -35 KPX Lcaron quoteright -229 KPX Lcaron Ugrave -35 KPX Lcaron yacute -67 KPX Lcaron y -67 KPX Lcaron U -35 KPX Lcaron Tcaron -165 KPX Lcaron Ocircumflex -35 KPX Lcaron T -165 KPX ldot l -120 KPX Lslash Uring -35 KPX Lslash Tcaron -165 KPX Lslash yacute -67 KPX Lslash Yacute -155 KPX Lslash Ugrave -35 KPX Lslash Ucircumflex -35 KPX Lslash Uacute -35 KPX Lslash Ograve -35 KPX Lslash Ocircumflex -35 KPX Lslash Oacute -35 KPX Lslash Ydieresis -155 KPX Lslash ydieresis -67 KPX Lslash quoteright -165 KPX Lslash quotedblright -183 KPX Lslash OE -35 KPX Lslash Otilde -35 KPX Lslash Oslash -35 KPX Lslash Udieresis -35 KPX Lslash Odieresis -35 KPX Lslash y -67 KPX Lslash Y -155 KPX Lslash W -77 KPX Lslash V -137 KPX Lslash U -35 KPX Lslash T -165 KPX Lslash O -35 KPX Racute Ydieresis -54 KPX Racute ydieresis -44 KPX Racute period 18 KPX Racute T -44 KPX Racute Y -54 KPX Racute comma 18 KPX Racute Yacute -54 KPX Racute y -44 KPX Racute Tcaron -44 KPX Racute yacute -44 KPX racute quoteright 41 KPX racute quotedblright 18 KPX racute comma -146 KPX racute period -142 KPX Rcaron Tcaron -44 KPX Rcaron yacute -44 KPX Rcaron Yacute -54 KPX Rcaron Ydieresis -54 KPX Rcaron ydieresis -44 KPX Rcaron y -44 KPX Rcaron Y -54 KPX Rcaron T -44 KPX Rcaron period 18 KPX Rcaron comma 18 KPX rcaron quoteright 41 KPX rcaron quotedblright 18 KPX rcaron period -142 KPX rcaron comma -146 KPX Scedilla Scedilla -44 KPX Scedilla Scaron -44 KPX Scedilla S -44 KPX Scaron Scedilla -44 KPX Scaron Scaron -44 KPX Scaron S -44 KPX Tcaron udieresis -109 KPX Tcaron aring -128 KPX Tcaron ae -95 KPX Tcaron semicolon -54 KPX Tcaron ograve -132 KPX Tcaron hyphen -146 KPX Tcaron quotedblbase -128 KPX Tcaron uring -109 KPX Tcaron otilde -132 KPX Tcaron edieresis -132 KPX Tcaron ugrave -109 KPX Tcaron colon -54 KPX Tcaron agrave -128 KPX Tcaron Atilde -77 KPX Tcaron ecircumflex -132 KPX Tcaron ccedilla -132 KPX Tcaron racute -109 KPX Tcaron egrave -132 KPX Tcaron Adieresis -77 KPX Tcaron Aacute -77 KPX Tcaron ccaron -132 KPX Tcaron rcaron -109 KPX Tcaron ucircumflex -109 KPX Tcaron yacute -118 KPX Tcaron quotesinglbase -128 KPX Tcaron atilde -128 KPX Tcaron Acircumflex -77 KPX Tcaron oslash -77 KPX Tcaron ocircumflex -132 KPX Tcaron scaron -132 KPX Tcaron A -77 KPX Tcaron ecaron -132 KPX Tcaron scedilla -132 KPX Tcaron adieresis -128 KPX Tcaron w -109 KPX Tcaron odieresis -132 KPX Tcaron uacute -109 KPX Tcaron cacute -132 KPX Tcaron aacute -128 KPX Tcaron period -151 KPX Tcaron T 22 KPX Tcaron acircumflex -128 KPX Tcaron eacute -132 KPX Tcaron Tcaron 22 KPX Tcaron a -128 KPX Tcaron c -132 KPX Tcaron e -132 KPX Tcaron oe -77 KPX Tcaron ydieresis -118 KPX Tcaron o -132 KPX Tcaron s -132 KPX Tcaron r -109 KPX Tcaron u -109 KPX Tcaron Agrave -77 KPX Tcaron y -118 KPX Tcaron comma -142 KPX Tcaron oacute -132 KPX Uring Aacute -30 KPX Uring Acircumflex -30 KPX Uring Atilde -30 KPX Uring Agrave -30 KPX Uring Adieresis -30 KPX Uring A -30 KPX Ydieresis uring -72 KPX Ydieresis ecaron -91 KPX Ydieresis Ccaron -35 KPX Ydieresis Cacute -35 KPX Ydieresis Ograve -35 KPX Ydieresis Ocircumflex -35 KPX Ydieresis Oacute -35 KPX Ydieresis Aacute -95 KPX Ydieresis Acircumflex -95 KPX Ydieresis quotedblbase -146 KPX Ydieresis quotesinglbase -183 KPX Ydieresis oe -91 KPX Ydieresis OE -44 KPX Ydieresis Otilde -35 KPX Ydieresis Atilde -95 KPX Ydieresis Agrave -95 KPX Ydieresis oslash -91 KPX Ydieresis ae -91 KPX Ydieresis Oslash -17 KPX Ydieresis udieresis -72 KPX Ydieresis ucircumflex -72 KPX Ydieresis ugrave -72 KPX Ydieresis uacute -72 KPX Ydieresis otilde -91 KPX Ydieresis odieresis -91 KPX Ydieresis ocircumflex -91 KPX Ydieresis ograve -91 KPX Ydieresis oacute -91 KPX Ydieresis edieresis -91 KPX Ydieresis ecircumflex -91 KPX Ydieresis egrave -91 KPX Ydieresis eacute -91 KPX Ydieresis aring -91 KPX Ydieresis atilde -91 KPX Ydieresis adieresis -91 KPX Ydieresis acircumflex -91 KPX Ydieresis agrave -91 KPX Ydieresis aacute -91 KPX Ydieresis Odieresis -35 KPX Ydieresis Ccedilla -35 KPX Ydieresis Adieresis -95 KPX Ydieresis u -72 KPX Ydieresis o -91 KPX Ydieresis e -91 KPX Ydieresis a -91 KPX Ydieresis O -35 KPX Ydieresis C -35 KPX Ydieresis A -95 KPX Ydieresis semicolon -86 KPX Ydieresis colon -86 KPX Ydieresis period -165 KPX Ydieresis hyphen -146 KPX Ydieresis comma -165 KPX Zcaron hyphen -17 KPX uni02BB Yacute 36 KPX uni02BB Aacute -114 KPX uni02BB Acircumflex -114 KPX uni02BB Ydieresis 36 KPX uni02BB Atilde -114 KPX uni02BB Agrave -114 KPX uni02BB AE -128 KPX uni02BB Adieresis -114 KPX uni02BB Y 36 KPX uni02BB V 18 KPX uni02BB J -44 KPX uni02BB A -114 KPX uni2010 Tcaron -146 KPX uni2010 Yacute -146 KPX uni2010 Ydieresis -146 KPX uni2010 Y -146 KPX uni2010 X -81 KPX uni2010 W -44 KPX uni2010 V -72 KPX uni2010 T -146 KPX quoteleft Yacute 36 KPX quoteleft Aacute -114 KPX quoteleft Acircumflex -114 KPX quoteleft Ydieresis 36 KPX quoteleft Atilde -114 KPX quoteleft Agrave -114 KPX quoteleft AE -128 KPX quoteleft Adieresis -114 KPX quoteleft Y 36 KPX quoteleft V 18 KPX quoteleft J -44 KPX quoteleft A -114 KPX quotesinglbase Tcaron -202 KPX quotesinglbase Yacute -174 KPX quotesinglbase Ydieresis -174 KPX quotesinglbase Y -174 KPX quotesinglbase W -104 KPX quotesinglbase V -137 KPX quotesinglbase T -202 KPX quotedblleft Yacute 18 KPX quotedblleft Aacute -128 KPX quotedblleft Acircumflex -128 KPX quotedblleft Ydieresis 18 KPX quotedblleft Atilde -128 KPX quotedblleft Agrave -128 KPX quotedblleft AE -146 KPX quotedblleft Adieresis -128 KPX quotedblleft Y 18 KPX quotedblleft J -44 KPX quotedblleft A -128 KPX quotedblbase Tcaron -202 KPX quotedblbase Yacute -174 KPX quotedblbase Ydieresis -174 KPX quotedblbase Y -174 KPX quotedblbase W -104 KPX quotedblbase V -137 KPX quotedblbase T -202 KPX Circumflex Scommaaccent 18 KPX Circumflex Scircumflex 18 KPX Circumflex Sacute 18 KPX Circumflex Scedilla 18 KPX Circumflex Scaron 18 KPX Circumflex quoteright 36 KPX Circumflex quotedblright 36 KPX Circumflex S 18 KPX Circumflex hyphen 22 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Serif-Roman.afm0100664000212600000240000020067510330505373015673 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Serif-Roman FullName Serif FamilyName Serif Weight Book Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle 0 IsFixedPitch false UnderlinePosition -213 UnderlineThickness 133 Version 1.15 EncodingScheme ISO10646-1 FontBBox -184 -505 1288 1052 CapHeight 729 XHeight 519 Ascender 759 Descender -208 StartCharMetrics 780 C 0 ; WX 600 ; N .notdef ; B 49 -177 550 706 ; C 32 ; WX 317 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 401 ; N exclam ; B 136 -15 267 730 ; C 34 ; WX 459 ; N quotedbl ; B 98 458 362 730 ; C 35 ; WX 837 ; N numbersign ; B 77 0 762 718 ; C 36 ; WX 636 ; N dollar ; B 84 -147 554 760 ; C 37 ; WX 950 ; N percent ; B 55 -15 896 743 ; C 38 ; WX 890 ; N ampersand ; B 71 -15 843 743 ; C 39 ; WX 274 ; N quotesingle ; B 98 458 176 730 ; C 40 ; WX 390 ; N parenleft ; B 79 -156 319 760 ; C 41 ; WX 390 ; N parenright ; B 70 -156 312 760 ; C 42 ; WX 500 ; N asterisk ; B 16 287 484 743 ; C 43 ; WX 837 ; N plus ; B 105 0 732 627 ; C 44 ; WX 317 ; N comma ; B 36 -137 222 111 ; C 45 ; WX 337 ; N hyphen ; B 43 229 294 307 ; C 46 ; WX 317 ; N period ; B 94 -15 225 117 ; C 47 ; WX 336 ; N slash ; B 0 -93 337 730 ; C 48 ; WX 636 ; N zero ; B 65 -15 570 743 ; C 49 ; WX 636 ; N one ; B 122 0 495 743 ; C 50 ; WX 636 ; N two ; B 67 0 539 743 ; C 51 ; WX 636 ; N three ; B 76 -15 563 743 ; C 52 ; WX 636 ; N four ; B 30 0 586 743 ; C 53 ; WX 636 ; N five ; B 84 -15 560 730 ; C 54 ; WX 636 ; N six ; B 66 -15 574 743 ; C 55 ; WX 636 ; N seven ; B 83 0 564 730 ; C 56 ; WX 636 ; N eight ; B 66 -15 569 743 ; C 57 ; WX 636 ; N nine ; B 62 -15 569 743 ; C 58 ; WX 336 ; N colon ; B 104 -15 234 435 ; C 59 ; WX 336 ; N semicolon ; B 36 -137 236 435 ; C 60 ; WX 837 ; N less ; B 105 45 732 582 ; C 61 ; WX 837 ; N equal ; B 105 174 732 453 ; C 62 ; WX 837 ; N greater ; B 105 45 732 582 ; C 63 ; WX 536 ; N question ; B 67 -15 488 743 ; C 64 ; WX 1000 ; N at ; B 65 -174 930 705 ; C 65 ; WX 722 ; N A ; B -6 0 732 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 734 ; N B ; B 55 0 674 730 ; C 67 ; WX 765 ; N C ; B 56 -15 706 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 801 ; N D ; B 55 0 745 730 ; L uni030C Dcaron ; C 69 ; WX 729 ; N E ; B 55 0 650 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 693 ; N F ; B 55 0 652 730 ; C 71 ; WX 798 ; N G ; B 56 -15 721 743 ; L uni0306 Gbreve ; C 72 ; WX 872 ; N H ; B 55 0 817 730 ; C 73 ; WX 395 ; N I ; B 55 0 340 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 400 ; N J ; B -84 -209 355 730 ; C 75 ; WX 747 ; N K ; B 55 0 763 730 ; C 76 ; WX 664 ; N L ; B 55 0 641 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 1023 ; N M ; B 49 0 974 730 ; C 78 ; WX 875 ; N N ; B 48 -15 832 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 819 ; N O ; B 56 -15 765 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 672 ; N P ; B 55 0 638 730 ; C 81 ; WX 819 ; N Q ; B 56 -161 765 743 ; C 82 ; WX 752 ; N R ; B 55 0 777 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 685 ; N S ; B 83 -15 612 743 ; L uni030C Scaron ; C 84 ; WX 666 ; N T ; B 9 0 658 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 842 ; N U ; B 46 -15 798 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 722 ; N V ; B -10 0 737 730 ; C 87 ; WX 1027 ; N W ; B 4 0 1025 730 ; C 88 ; WX 711 ; N X ; B 5 0 708 730 ; C 89 ; WX 660 ; N Y ; B -12 0 669 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 694 ; N Z ; B 44 0 656 730 ; L uni030C Zcaron ; C 91 ; WX 390 ; N bracketleft ; B 85 -132 313 760 ; C 92 ; WX 336 ; N backslash ; B 0 -93 337 730 ; C 93 ; WX 390 ; N bracketright ; B 77 -132 305 760 ; C 94 ; WX 837 ; N asciicircum ; B 105 457 732 730 ; C 95 ; WX 500 ; N underscore ; B 0 -236 500 -196 ; C 96 ; WX 500 ; N grave ; B 83 615 307 799 ; C 97 ; WX 596 ; N a ; B 49 -15 568 534 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 640 ; N b ; B 28 -15 590 760 ; C 99 ; WX 560 ; N c ; B 49 -15 515 534 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 640 ; N d ; B 49 -15 611 760 ; L uni030C dcaron ; C 101 ; WX 591 ; N e ; B 49 -15 542 534 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 370 ; N f ; B 36 0 431 760 ; L l fl ; L i fi ; C 103 ; WX 640 ; N g ; B 49 -223 611 534 ; L uni0306 gbreve ; C 104 ; WX 644 ; N h ; B 36 0 617 760 ; C 105 ; WX 319 ; N i ; B 36 0 297 736 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 310 ; N j ; B -97 -223 212 736 ; C 107 ; WX 605 ; N k ; B 28 0 613 760 ; C 108 ; WX 319 ; N l ; B 28 0 291 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 948 ; N m ; B 36 0 921 534 ; C 110 ; WX 644 ; N n ; B 36 0 617 534 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 602 ; N o ; B 49 -15 552 534 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 640 ; N p ; B 28 -209 590 534 ; C 113 ; WX 640 ; N q ; B 49 -209 611 534 ; C 114 ; WX 478 ; N r ; B 36 0 479 534 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 513 ; N s ; B 56 -15 462 534 ; L uni030C scaron ; C 116 ; WX 401 ; N t ; B 28 -15 395 681 ; L uni030C tcaron ; C 117 ; WX 644 ; N u ; B 26 -15 607 520 ; L uni030C uni01D4 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 564 ; N v ; B -3 0 563 520 ; C 119 ; WX 855 ; N w ; B 16 0 843 520 ; C 120 ; WX 563 ; N x ; B 12 0 552 520 ; C 121 ; WX 564 ; N y ; B -3 -223 563 520 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 526 ; N z ; B 40 0 491 520 ; L uni030C zcaron ; C 123 ; WX 636 ; N braceleft ; B 125 -164 512 760 ; C 124 ; WX 336 ; N bar ; B 128 -236 209 765 ; C 125 ; WX 636 ; N braceright ; B 125 -164 512 760 ; C 126 ; WX 837 ; N asciitilde ; B 105 232 732 395 ; C 160 ; WX 636 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 401 ; N exclamdown ; B 136 0 267 744 ; C 162 ; WX 636 ; N cent ; B 75 -146 540 663 ; C 163 ; WX 636 ; N sterling ; B 66 0 549 743 ; C 164 ; WX 636 ; N currency ; B 50 44 588 583 ; C 165 ; WX 636 ; N yen ; B -8 0 640 730 ; C 166 ; WX 336 ; N brokenbar ; B 128 -171 209 700 ; C 167 ; WX 500 ; N section ; B 44 -96 456 743 ; C 168 ; WX 500 ; N dieresis ; B 98 651 402 767 ; C 169 ; WX 1000 ; N copyright ; B 138 0 862 726 ; C 170 ; WX 475 ; N ordfeminine ; B 61 261 449 743 ; C 171 ; WX 611 ; N guillemotleft ; B 77 68 519 518 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 421 ; C 173 ; WX 337 ; N sfthyphen ; B 43 229 294 307 ; C 174 ; WX 1000 ; N registered ; B 138 0 862 726 ; C 175 ; WX 500 ; N macron ; B 104 672 396 746 ; C 176 ; WX 500 ; N degree ; B 95 432 405 743 ; C 177 ; WX 837 ; N plusminus ; B 105 0 732 627 ; C 178 ; WX 400 ; N twosuperior ; B 43 326 338 743 ; C 179 ; WX 400 ; N threesuperior ; B 48 318 351 743 ; C 180 ; WX 500 ; N acute ; B 191 616 416 800 ; C 181 ; WX 649 ; N mu ; B 28 -209 614 520 ; C 182 ; WX 636 ; N paragraph ; B 77 -97 572 730 ; C 183 ; WX 317 ; N periodcentered ; B 92 282 224 413 ; C 184 ; WX 500 ; N cedilla ; B 142 -193 345 0 ; C 185 ; WX 400 ; N onesuperior ; B 71 326 324 734 ; C 186 ; WX 470 ; N ordmasculine ; B 45 261 424 743 ; C 187 ; WX 611 ; N guillemotright ; B 94 68 536 518 ; C 188 ; WX 969 ; N onequarter ; B 71 -15 938 743 ; C 189 ; WX 969 ; N onehalf ; B 71 -15 906 743 ; C 190 ; WX 969 ; N threequarters ; B 48 -15 938 743 ; C 191 ; WX 536 ; N questiondown ; B 67 -14 488 744 ; C 192 ; WX 722 ; N Agrave ; B -6 0 732 928 ; C 193 ; WX 722 ; N Aacute ; B -6 0 732 928 ; C 194 ; WX 722 ; N Acircumflex ; B -6 0 732 928 ; C 195 ; WX 722 ; N Atilde ; B -6 0 732 921 ; C 196 ; WX 722 ; N Adieresis ; B -6 0 732 920 ; C 197 ; WX 722 ; N Aring ; B -6 0 732 929 ; C 198 ; WX 1000 ; N AE ; B -18 0 950 730 ; C 199 ; WX 765 ; N Ccedilla ; B 56 -193 706 743 ; C 200 ; WX 729 ; N Egrave ; B 55 0 650 928 ; C 201 ; WX 729 ; N Eacute ; B 55 0 650 928 ; C 202 ; WX 729 ; N Ecircumflex ; B 55 0 650 928 ; C 203 ; WX 729 ; N Edieresis ; B 55 0 650 920 ; C 204 ; WX 395 ; N Igrave ; B 55 0 340 928 ; C 205 ; WX 395 ; N Iacute ; B 55 0 340 928 ; C 206 ; WX 395 ; N Icircumflex ; B 42 0 355 928 ; C 207 ; WX 395 ; N Idieresis ; B 46 0 351 920 ; C 208 ; WX 807 ; N Eth ; B 55 0 750 730 ; C 209 ; WX 875 ; N Ntilde ; B 48 -15 832 921 ; C 210 ; WX 819 ; N Ograve ; B 56 -15 765 928 ; C 211 ; WX 819 ; N Oacute ; B 56 -15 765 928 ; C 212 ; WX 819 ; N Ocircumflex ; B 56 -15 765 928 ; C 213 ; WX 819 ; N Otilde ; B 56 -15 765 921 ; C 214 ; WX 819 ; N Odieresis ; B 56 -15 765 920 ; C 215 ; WX 837 ; N multiply ; B 138 33 701 595 ; C 216 ; WX 819 ; N Oslash ; B 48 -28 770 757 ; C 217 ; WX 842 ; N Ugrave ; B 46 -15 798 928 ; C 218 ; WX 842 ; N Uacute ; B 46 -15 798 928 ; C 219 ; WX 842 ; N Ucircumflex ; B 46 -15 798 928 ; C 220 ; WX 842 ; N Udieresis ; B 46 -15 798 920 ; C 221 ; WX 660 ; N Yacute ; B -12 0 669 928 ; C 222 ; WX 675 ; N Thorn ; B 55 0 638 730 ; C 223 ; WX 667 ; N germandbls ; B 28 -15 625 760 ; C 224 ; WX 596 ; N agrave ; B 49 -15 568 799 ; C 225 ; WX 596 ; N aacute ; B 49 -15 568 800 ; C 226 ; WX 596 ; N acircumflex ; B 49 -15 568 800 ; C 227 ; WX 596 ; N atilde ; B 49 -15 568 777 ; C 228 ; WX 596 ; N adieresis ; B 49 -15 568 767 ; C 229 ; WX 596 ; N aring ; B 49 -15 568 878 ; C 230 ; WX 939 ; N ae ; B 49 -15 890 534 ; C 231 ; WX 560 ; N ccedilla ; B 49 -193 515 534 ; C 232 ; WX 591 ; N egrave ; B 49 -15 542 799 ; C 233 ; WX 591 ; N eacute ; B 49 -15 542 800 ; C 234 ; WX 591 ; N ecircumflex ; B 49 -15 542 800 ; C 235 ; WX 591 ; N edieresis ; B 49 -15 542 767 ; C 236 ; WX 319 ; N igrave ; B -7 0 297 799 ; C 237 ; WX 319 ; N iacute ; B 36 0 326 800 ; C 238 ; WX 319 ; N icircumflex ; B 4 0 316 800 ; C 239 ; WX 319 ; N idieresis ; B 8 0 313 767 ; C 240 ; WX 602 ; N eth ; B 49 -15 552 760 ; C 241 ; WX 644 ; N ntilde ; B 36 0 617 777 ; C 242 ; WX 602 ; N ograve ; B 49 -15 552 799 ; C 243 ; WX 602 ; N oacute ; B 49 -15 552 800 ; C 244 ; WX 602 ; N ocircumflex ; B 49 -15 552 800 ; C 245 ; WX 602 ; N otilde ; B 49 -15 552 777 ; C 246 ; WX 602 ; N odieresis ; B 49 -15 552 767 ; C 247 ; WX 837 ; N divide ; B 105 67 732 560 ; C 248 ; WX 602 ; N oslash ; B 37 -46 562 565 ; C 249 ; WX 644 ; N ugrave ; B 26 -15 607 799 ; C 250 ; WX 644 ; N uacute ; B 26 -15 607 800 ; C 251 ; WX 644 ; N ucircumflex ; B 26 -15 607 800 ; C 252 ; WX 644 ; N udieresis ; B 26 -15 607 767 ; C 253 ; WX 564 ; N yacute ; B -3 -223 563 800 ; C 254 ; WX 640 ; N thorn ; B 28 -209 590 760 ; C 255 ; WX 564 ; N ydieresis ; B -3 -223 563 767 ; C -1 ; WX 722 ; N Amacron ; B -6 0 732 899 ; C -1 ; WX 596 ; N amacron ; B 49 -15 568 746 ; C -1 ; WX 722 ; N Abreve ; B -6 0 732 927 ; C -1 ; WX 596 ; N abreve ; B 49 -15 568 772 ; C -1 ; WX 722 ; N Aogonek ; B -6 -192 732 730 ; C -1 ; WX 596 ; N aogonek ; B 49 -192 568 534 ; C -1 ; WX 765 ; N Cacute ; B 56 -15 706 928 ; C -1 ; WX 560 ; N cacute ; B 49 -15 515 800 ; C -1 ; WX 765 ; N Ccircumflex ; B 56 -15 706 928 ; C -1 ; WX 560 ; N ccircumflex ; B 49 -15 515 800 ; C -1 ; WX 765 ; N Cdotaccent ; B 56 -15 706 921 ; C -1 ; WX 560 ; N cdotaccent ; B 49 -15 515 767 ; C -1 ; WX 765 ; N Ccaron ; B 56 -15 706 928 ; C -1 ; WX 560 ; N ccaron ; B 49 -15 515 800 ; C -1 ; WX 801 ; N Dcaron ; B 55 0 745 928 ; C -1 ; WX 640 ; N dcaron ; B 49 -15 739 760 ; C -1 ; WX 807 ; N Dcroat ; B 55 0 750 730 ; C -1 ; WX 640 ; N dcroat ; B 49 -15 611 760 ; C -1 ; WX 729 ; N Emacron ; B 55 0 650 900 ; C -1 ; WX 591 ; N emacron ; B 49 -15 542 746 ; C -1 ; WX 729 ; N Ebreve ; B 55 0 650 929 ; C -1 ; WX 591 ; N ebreve ; B 49 -15 542 786 ; C -1 ; WX 729 ; N Edotaccent ; B 55 0 650 921 ; C -1 ; WX 591 ; N edotaccent ; B 49 -15 542 767 ; C -1 ; WX 729 ; N Eogonek ; B 55 -192 650 730 ; C -1 ; WX 591 ; N eogonek ; B 49 -192 542 534 ; C -1 ; WX 729 ; N Ecaron ; B 55 0 650 928 ; C -1 ; WX 591 ; N ecaron ; B 49 -15 542 800 ; C -1 ; WX 798 ; N Gcircumflex ; B 56 -15 721 928 ; C -1 ; WX 640 ; N gcircumflex ; B 49 -223 611 800 ; C -1 ; WX 798 ; N Gbreve ; B 56 -15 721 929 ; C -1 ; WX 640 ; N gbreve ; B 49 -223 611 786 ; C -1 ; WX 798 ; N Gdotaccent ; B 56 -15 721 921 ; C -1 ; WX 640 ; N gdotaccent ; B 49 -223 611 767 ; C -1 ; WX 798 ; N Gcommaaccent ; B 56 -223 721 743 ; C -1 ; WX 640 ; N gcommaaccent ; B 49 -223 611 742 ; C -1 ; WX 872 ; N Hcircumflex ; B 55 0 817 928 ; C -1 ; WX 644 ; N hcircumflex ; B -30 0 617 928 ; C -1 ; WX 872 ; N Hbar ; B 55 0 817 730 ; C -1 ; WX 644 ; N hbar ; B 36 0 617 760 ; C -1 ; WX 395 ; N Itilde ; B 36 0 359 921 ; C -1 ; WX 319 ; N itilde ; B -2 0 321 777 ; C -1 ; WX 395 ; N Imacron ; B 51 0 344 900 ; C -1 ; WX 319 ; N imacron ; B -22 0 297 746 ; C -1 ; WX 395 ; N Ibreve ; B 45 0 350 929 ; C -1 ; WX 319 ; N ibreve ; B 6 0 313 786 ; C -1 ; WX 395 ; N Iogonek ; B 55 -192 340 730 ; C -1 ; WX 319 ; N iogonek ; B 36 -192 297 736 ; C -1 ; WX 395 ; N Idotaccent ; B 55 0 340 921 ; C -1 ; WX 319 ; N dotlessi ; B 36 0 297 520 ; C -1 ; WX 801 ; N IJ ; B 55 -209 756 730 ; C -1 ; WX 533 ; N ij ; B 36 -223 498 736 ; C -1 ; WX 400 ; N Jcircumflex ; B -84 -209 358 928 ; C -1 ; WX 310 ; N jcircumflex ; B -97 -223 284 800 ; C -1 ; WX 747 ; N Kcommaaccent ; B 55 -209 763 730 ; C -1 ; WX 605 ; N kcommaaccent ; B 28 -209 613 760 ; C -1 ; WX 605 ; N kgreenlandic ; B 28 0 613 518 ; C -1 ; WX 664 ; N Lacute ; B 55 0 641 929 ; C -1 ; WX 319 ; N lacute ; B 28 0 291 928 ; C -1 ; WX 664 ; N Lcommaaccent ; B 55 -209 641 730 ; C -1 ; WX 319 ; N lcommaaccent ; B 28 -206 291 760 ; C -1 ; WX 664 ; N Lcaron ; B 55 0 641 730 ; C -1 ; WX 400 ; N lcaron ; B 28 0 418 760 ; C -1 ; WX 671 ; N Ldot ; B 55 0 641 730 ; C -1 ; WX 464 ; N ldot ; B 28 0 409 760 ; C -1 ; WX 668 ; N Lslash ; B 41 0 646 730 ; C -1 ; WX 324 ; N lslash ; B 21 0 311 760 ; C -1 ; WX 875 ; N Nacute ; B 48 -15 832 928 ; C -1 ; WX 644 ; N nacute ; B 36 0 617 777 ; C -1 ; WX 875 ; N Ncommaaccent ; B 48 -215 832 730 ; C -1 ; WX 644 ; N ncommaaccent ; B 36 -209 617 534 ; C -1 ; WX 875 ; N Ncaron ; B 48 -15 832 933 ; C -1 ; WX 644 ; N ncaron ; B 36 0 617 800 ; C -1 ; WX 866 ; N napostrophe ; B 55 0 812 743 ; C -1 ; WX 875 ; N Eng ; B 48 -223 832 730 ; C -1 ; WX 644 ; N eng ; B 36 -223 537 534 ; C -1 ; WX 819 ; N Omacron ; B 56 -15 765 900 ; C -1 ; WX 602 ; N omacron ; B 49 -15 552 746 ; C -1 ; WX 819 ; N Obreve ; B 56 -15 765 929 ; C -1 ; WX 602 ; N obreve ; B 49 -15 552 786 ; C -1 ; WX 819 ; N Ohungarumlaut ; B 56 -15 765 928 ; C -1 ; WX 602 ; N ohungarumlaut ; B 49 -15 552 800 ; C -1 ; WX 1137 ; N OE ; B 58 0 1058 730 ; C -1 ; WX 988 ; N oe ; B 49 -15 939 534 ; C -1 ; WX 752 ; N Racute ; B 55 0 777 928 ; C -1 ; WX 478 ; N racute ; B 36 0 479 777 ; C -1 ; WX 752 ; N Rcommaaccent ; B 55 -209 777 730 ; C -1 ; WX 478 ; N rcommaaccent ; B 36 -209 479 534 ; C -1 ; WX 752 ; N Rcaron ; B 55 0 777 928 ; C -1 ; WX 478 ; N rcaron ; B 36 0 479 800 ; C -1 ; WX 685 ; N Sacute ; B 83 -15 612 928 ; C -1 ; WX 513 ; N sacute ; B 56 -15 462 777 ; C -1 ; WX 685 ; N Scircumflex ; B 83 -15 612 928 ; C -1 ; WX 513 ; N scircumflex ; B 56 -15 462 800 ; C -1 ; WX 685 ; N Scedilla ; B 83 -193 612 743 ; C -1 ; WX 513 ; N scedilla ; B 56 -193 462 534 ; C -1 ; WX 685 ; N Scaron ; B 83 -15 612 928 ; C -1 ; WX 513 ; N scaron ; B 56 -15 462 800 ; C -1 ; WX 666 ; N Tcommaaccent ; B 9 -193 658 730 ; C -1 ; WX 401 ; N tcommaaccent ; B 28 -193 395 681 ; C -1 ; WX 666 ; N Tcaron ; B 9 0 658 928 ; C -1 ; WX 401 ; N tcaron ; B 28 -15 395 788 ; C -1 ; WX 666 ; N Tbar ; B 9 0 658 730 ; C -1 ; WX 401 ; N tbar ; B 28 -15 395 681 ; C -1 ; WX 842 ; N Utilde ; B 46 -15 798 921 ; C -1 ; WX 644 ; N utilde ; B 26 -15 607 777 ; C -1 ; WX 842 ; N Umacron ; B 46 -15 798 900 ; C -1 ; WX 644 ; N umacron ; B 26 -15 607 746 ; C -1 ; WX 842 ; N Ubreve ; B 46 -15 798 929 ; C -1 ; WX 644 ; N ubreve ; B 26 -15 607 786 ; C -1 ; WX 842 ; N Uring ; B 46 -15 798 1052 ; C -1 ; WX 644 ; N uring ; B 26 -15 607 869 ; C -1 ; WX 842 ; N Uhungarumlaut ; B 46 -15 798 928 ; C -1 ; WX 644 ; N uhungarumlaut ; B 26 -15 607 800 ; C -1 ; WX 842 ; N Uogonek ; B 46 -200 798 730 ; C -1 ; WX 644 ; N uogonek ; B 26 -192 646 520 ; C -1 ; WX 1027 ; N Wcircumflex ; B 4 0 1025 931 ; C -1 ; WX 855 ; N wcircumflex ; B 16 0 843 777 ; C -1 ; WX 660 ; N Ycircumflex ; B -12 0 669 931 ; C -1 ; WX 564 ; N ycircumflex ; B -3 -223 563 777 ; C -1 ; WX 660 ; N Ydieresis ; B -12 0 669 920 ; C -1 ; WX 694 ; N Zacute ; B 44 0 656 928 ; C -1 ; WX 526 ; N zacute ; B 40 0 491 777 ; C -1 ; WX 694 ; N Zdotaccent ; B 44 0 656 930 ; C -1 ; WX 526 ; N zdotaccent ; B 40 0 491 734 ; C -1 ; WX 694 ; N Zcaron ; B 44 0 656 928 ; C -1 ; WX 526 ; N zcaron ; B 40 0 491 800 ; C -1 ; WX 370 ; N longs ; B 36 0 431 760 ; C -1 ; WX 765 ; N uni0186 ; B 56 -15 706 743 ; C -1 ; WX 636 ; N uni0190 ; B 76 -15 563 743 ; C -1 ; WX 636 ; N florin ; B 17 -211 608 743 ; C -1 ; WX 711 ; N uni0194 ; B 8 -92 674 730 ; C -1 ; WX 722 ; N uni01CD ; B -6 0 732 928 ; C -1 ; WX 596 ; N uni01CE ; B 49 -15 568 800 ; C -1 ; WX 395 ; N uni01CF ; B 41 0 354 928 ; C -1 ; WX 319 ; N uni01D0 ; B 3 0 316 800 ; C -1 ; WX 819 ; N uni01D1 ; B 56 -15 765 928 ; C -1 ; WX 602 ; N uni01D2 ; B 49 -15 552 800 ; C -1 ; WX 842 ; N uni01D3 ; B 46 -15 798 928 ; C -1 ; WX 644 ; N uni01D4 ; B 26 -15 607 800 ; C -1 ; WX 644 ; N uni01D6 ; B 26 -15 607 900 ; C -1 ; WX 596 ; N uni01DF ; B 49 -15 568 900 ; C -1 ; WX 1000 ; N uni01E2 ; B -18 0 950 899 ; C -1 ; WX 939 ; N uni01E3 ; B 49 -15 890 746 ; C -1 ; WX 819 ; N uni01EA ; B 56 -200 765 743 ; C -1 ; WX 602 ; N uni01EB ; B 49 -200 552 534 ; C -1 ; WX 819 ; N uni01EC ; B 56 -200 765 900 ; C -1 ; WX 602 ; N uni01ED ; B 49 -200 552 746 ; C -1 ; WX 685 ; N Scommaaccent ; B 83 -224 612 743 ; C -1 ; WX 513 ; N scommaaccent ; B 56 -224 462 534 ; C -1 ; WX 666 ; N uni021A ; B 9 -224 658 730 ; C -1 ; WX 401 ; N uni021B ; B 28 -224 395 681 ; C -1 ; WX 602 ; N uni022B ; B 49 -15 552 900 ; C -1 ; WX 602 ; N uni022D ; B 49 -15 552 900 ; C -1 ; WX 819 ; N uni022E ; B 56 -15 765 920 ; C -1 ; WX 602 ; N uni022F ; B 49 -15 552 766 ; C -1 ; WX 602 ; N uni0231 ; B 49 -15 552 900 ; C -1 ; WX 660 ; N uni0232 ; B -12 0 669 900 ; C -1 ; WX 564 ; N uni0233 ; B -3 -223 563 746 ; C -1 ; WX 310 ; N dotlessj ; B -97 -223 212 520 ; C -1 ; WX 596 ; N uni0250 ; B 49 -15 568 534 ; C -1 ; WX 640 ; N uni0251 ; B 49 -15 611 534 ; C -1 ; WX 640 ; N uni0252 ; B 49 -15 611 534 ; C -1 ; WX 640 ; N uni0253 ; B 28 -15 590 760 ; C -1 ; WX 560 ; N uni0254 ; B 49 -15 515 534 ; C -1 ; WX 560 ; N uni0255 ; B 49 -107 498 534 ; C -1 ; WX 646 ; N uni0256 ; B 49 -223 744 760 ; C -1 ; WX 682 ; N uni0257 ; B 49 -15 743 760 ; C -1 ; WX 591 ; N uni0258 ; B 49 -15 542 534 ; C -1 ; WX 591 ; N uni0259 ; B 49 -15 542 534 ; C -1 ; WX 843 ; N uni025A ; B 58 -15 904 534 ; C -1 ; WX 508 ; N uni025B ; B 49 -18 463 534 ; C -1 ; WX 508 ; N uni025C ; B 49 -18 463 534 ; C -1 ; WX 772 ; N uni025D ; B 49 -18 834 534 ; C -1 ; WX 613 ; N uni025E ; B 49 -18 568 534 ; C -1 ; WX 314 ; N uni025F ; B -97 -223 292 520 ; C -1 ; WX 683 ; N uni0260 ; B 49 -223 744 760 ; C -1 ; WX 640 ; N uni0261 ; B 49 -223 611 520 ; C -1 ; WX 543 ; N uni0262 ; B 49 -19 515 529 ; C -1 ; WX 711 ; N uni0263 ; B 45 -223 621 521 ; C -1 ; WX 563 ; N uni0264 ; B 70 -17 504 532 ; C -1 ; WX 644 ; N uni0265 ; B 26 -209 607 520 ; C -1 ; WX 644 ; N uni0266 ; B 41 0 617 760 ; C -1 ; WX 644 ; N uni0267 ; B 41 -223 537 760 ; C -1 ; WX 319 ; N uni0268 ; B 36 0 297 736 ; C -1 ; WX 392 ; N uni0269 ; B 36 0 299 520 ; C -1 ; WX 319 ; N uni026A ; B 36 0 297 520 ; C -1 ; WX 380 ; N uni026B ; B 35 0 358 760 ; C -1 ; WX 454 ; N uni026C ; B 36 0 432 760 ; C -1 ; WX 362 ; N uni026D ; B 28 -223 423 760 ; C -1 ; WX 704 ; N uni026E ; B 28 -224 676 760 ; C -1 ; WX 948 ; N uni026F ; B 36 0 921 534 ; C -1 ; WX 948 ; N uni0270 ; B 36 -209 921 534 ; C -1 ; WX 948 ; N uni0271 ; B 36 -223 841 534 ; C -1 ; WX 643 ; N uni0272 ; B -97 -223 616 534 ; C -1 ; WX 693 ; N uni0273 ; B 36 -223 754 534 ; C -1 ; WX 645 ; N uni0274 ; B 41 -15 617 533 ; C -1 ; WX 602 ; N uni0275 ; B 49 -15 552 534 ; C -1 ; WX 790 ; N uni0276 ; B 49 0 762 520 ; C -1 ; WX 647 ; N uni0277 ; B 49 -15 603 530 ; C -1 ; WX 602 ; N uni0278 ; B 49 -209 552 760 ; C -1 ; WX 500 ; N uni0279 ; B 36 -15 479 520 ; C -1 ; WX 500 ; N uni027A ; B 36 -15 479 760 ; C -1 ; WX 551 ; N uni027B ; B 36 -223 612 520 ; C -1 ; WX 478 ; N uni027C ; B 36 -208 479 534 ; C -1 ; WX 478 ; N uni027D ; B 36 -223 479 534 ; C -1 ; WX 452 ; N uni027E ; B 41 0 430 530 ; C -1 ; WX 452 ; N uni027F ; B 41 0 430 530 ; C -1 ; WX 593 ; N uni0280 ; B 50 0 564 520 ; C -1 ; WX 593 ; N uni0281 ; B 50 0 564 520 ; C -1 ; WX 513 ; N uni0282 ; B 55 -223 462 534 ; C -1 ; WX 271 ; N uni0283 ; B -97 -223 332 761 ; C -1 ; WX 370 ; N uni0284 ; B -97 -223 431 760 ; C -1 ; WX 486 ; N uni0285 ; B 36 -223 464 531 ; C -1 ; WX 324 ; N uni0286 ; B -97 -223 385 761 ; C -1 ; WX 401 ; N uni0287 ; B 28 -162 395 534 ; C -1 ; WX 401 ; N uni0288 ; B 28 -209 395 681 ; C -1 ; WX 644 ; N uni0289 ; B 26 -15 607 520 ; C -1 ; WX 620 ; N uni028A ; B 49 -4 571 536 ; C -1 ; WX 607 ; N uni028B ; B 36 -4 559 520 ; C -1 ; WX 564 ; N uni028C ; B -3 0 563 520 ; C -1 ; WX 855 ; N uni028D ; B 16 0 843 520 ; C -1 ; WX 564 ; N uni028E ; B -3 0 563 742 ; C -1 ; WX 655 ; N uni028F ; B 41 -1 620 532 ; C -1 ; WX 597 ; N uni0290 ; B 40 -223 709 520 ; C -1 ; WX 560 ; N uni0291 ; B 40 -93 493 520 ; C -1 ; WX 564 ; N uni0292 ; B 49 -224 536 520 ; C -1 ; WX 560 ; N uni0293 ; B 63 -224 536 520 ; C -1 ; WX 536 ; N uni0294 ; B 114 0 434 761 ; C -1 ; WX 536 ; N uni0295 ; B 114 0 434 761 ; C -1 ; WX 536 ; N uni0296 ; B 114 0 434 761 ; C -1 ; WX 513 ; N uni0297 ; B 55 -223 364 760 ; C -1 ; WX 719 ; N uni0298 ; B -2 -1 535 531 ; C -1 ; WX 551 ; N uni0299 ; B 41 0 517 531 ; C -1 ; WX 613 ; N uni029A ; B 49 -18 568 534 ; C -1 ; WX 653 ; N uni029B ; B 49 -19 714 760 ; C -1 ; WX 645 ; N uni029C ; B 41 0 611 531 ; C -1 ; WX 365 ; N uni029D ; B -97 -223 275 736 ; C -1 ; WX 605 ; N uni029E ; B 28 -209 614 520 ; C -1 ; WX 645 ; N uni029F ; B 41 0 518 531 ; C -1 ; WX 683 ; N uni02A0 ; B 49 -209 744 760 ; C -1 ; WX 536 ; N uni02A1 ; B 114 0 434 761 ; C -1 ; WX 536 ; N uni02A2 ; B 114 0 434 761 ; C -1 ; WX 996 ; N uni02A3 ; B 49 -15 959 760 ; C -1 ; WX 1033 ; N uni02A4 ; B 49 -224 997 760 ; C -1 ; WX 998 ; N uni02A5 ; B 49 -93 961 760 ; C -1 ; WX 808 ; N uni02A6 ; B 28 -15 772 681 ; C -1 ; WX 597 ; N uni02A7 ; B 28 -223 658 761 ; C -1 ; WX 782 ; N uni02A8 ; B 28 -107 746 681 ; C -1 ; WX 893 ; N uni02A9 ; B 36 -223 856 760 ; C -1 ; WX 646 ; N uni02AA ; B 28 -15 610 760 ; C -1 ; WX 675 ; N uni02AB ; B 28 0 640 760 ; C -1 ; WX 597 ; N uni02AC ; B 34 -15 547 625 ; C -1 ; WX 442 ; N uni02AD ; B 34 104 393 625 ; C -1 ; WX 780 ; N uni02AE ; B 28 -208 745 760 ; C -1 ; WX 766 ; N uni02AF ; B 28 -223 877 760 ; C -1 ; WX 432 ; N uni02B0 ; B 22 452 382 878 ; C -1 ; WX 429 ; N uni02B1 ; B 22 451 379 877 ; C -1 ; WX 264 ; N uni02B2 ; B 22 328 214 865 ; C -1 ; WX 347 ; N uni02B3 ; B 22 452 297 752 ; C -1 ; WX 347 ; N uni02B4 ; B 22 444 297 744 ; C -1 ; WX 430 ; N uni02B5 ; B 22 328 380 744 ; C -1 ; WX 391 ; N uni02B6 ; B 22 452 341 744 ; C -1 ; WX 585 ; N uni02B7 ; B 22 452 535 744 ; C -1 ; WX 423 ; N uni02B8 ; B 22 328 373 744 ; C -1 ; WX 317 ; N uni02BB ; B 102 495 269 743 ; C -1 ; WX 317 ; N afii57929 ; B 102 495 269 743 ; L n napostrophe ; C -1 ; WX 280 ; N uni02C0 ; B 22 472 231 899 ; C -1 ; WX 280 ; N uni02C1 ; B 22 472 231 899 ; C -1 ; WX 500 ; N circumflex ; B 94 616 406 800 ; C -1 ; WX 500 ; N caron ; B 94 616 406 800 ; C -1 ; WX 336 ; N uni02D0 ; B 105 0 232 434 ; C -1 ; WX 336 ; N uni02D1 ; B 105 302 232 434 ; C -1 ; WX 500 ; N breve ; B 97 645 403 786 ; C -1 ; WX 500 ; N dotaccent ; B 192 651 308 767 ; C -1 ; WX 500 ; N ring ; B 116 609 384 878 ; C -1 ; WX 500 ; N ogonek ; B 162 -192 345 0 ; C -1 ; WX 500 ; N tilde ; B 88 639 412 777 ; C -1 ; WX 500 ; N hungarumlaut ; B 119 616 459 800 ; C -1 ; WX 446 ; N uni02E0 ; B 22 393 397 810 ; C -1 ; WX 242 ; N uni02E1 ; B 22 451 193 878 ; C -1 ; WX 336 ; N uni02E2 ; B 26 444 291 751 ; C -1 ; WX 423 ; N uni02E3 ; B 22 448 374 740 ; C -1 ; WX 280 ; N uni02E4 ; B 22 472 231 899 ; C -1 ; WX 602 ; N gravecomb ; B 83 615 307 799 ; C -1 ; WX 602 ; N acutecomb ; B 191 616 416 800 ; C -1 ; WX 602 ; N uni0302 ; B 94 616 406 800 ; C -1 ; WX 602 ; N tildecomb ; B 88 639 412 777 ; C -1 ; WX 602 ; N uni0304 ; B 104 672 396 746 ; C -1 ; WX 602 ; N uni0306 ; B 97 645 403 786 ; C -1 ; WX 602 ; N uni0307 ; B 192 651 308 767 ; C -1 ; WX 602 ; N uni0308 ; B 98 651 402 767 ; C -1 ; WX 602 ; N uni030A ; B 116 609 384 878 ; C -1 ; WX 602 ; N uni030B ; B 119 616 459 800 ; C -1 ; WX 602 ; N uni030C ; B 94 616 406 800 ; C -1 ; WX 317 ; N uni0312 ; B 110 495 260 644 ; C -1 ; WX 644 ; N uni0321 ; B 228 -223 537 63 ; C -1 ; WX 500 ; N uni0322 ; B 107 -223 417 63 ; C -1 ; WX 500 ; N uni0326 ; B 152 -224 302 -74 ; C -1 ; WX 278 ; N uni0374 ; B 78 556 203 800 ; C -1 ; WX 278 ; N uni0375 ; B 78 -209 203 36 ; C -1 ; WX 208 ; N uni037A ; B 48 -211 171 -59 ; C -1 ; WX 336 ; N uni037E ; B 36 -137 236 435 ; C -1 ; WX 500 ; N tonos ; B 191 616 416 800 ; C -1 ; WX 500 ; N dieresistonos ; B 98 651 416 997 ; C -1 ; WX 722 ; N Alphatonos ; B -6 0 732 800 ; C -1 ; WX 317 ; N anoteleia ; B 92 282 224 413 ; C -1 ; WX 899 ; N Epsilontonos ; B 7 0 820 800 ; C -1 ; WX 1039 ; N Etatonos ; B 7 0 984 800 ; C -1 ; WX 562 ; N Iotatonos ; B 7 0 507 800 ; C -1 ; WX 835 ; N Omicrontonos ; B 7 -15 780 800 ; C -1 ; WX 897 ; N Upsilontonos ; B 7 0 907 800 ; C -1 ; WX 852 ; N Omegatonos ; B 7 0 793 800 ; C -1 ; WX 392 ; N iotadieresistonos ; B 8 -6 336 997 ; C -1 ; WX 722 ; N Alpha ; B -6 0 732 730 ; C -1 ; WX 734 ; N Beta ; B 55 0 674 730 ; C -1 ; WX 693 ; N Gamma ; B 55 0 652 730 ; C -1 ; WX 722 ; N uni0394 ; B 38 0 680 730 ; C -1 ; WX 729 ; N Epsilon ; B 55 0 650 730 ; C -1 ; WX 694 ; N Zeta ; B 44 0 656 730 ; C -1 ; WX 872 ; N Eta ; B 55 0 817 730 ; C -1 ; WX 819 ; N Theta ; B 56 -15 765 743 ; C -1 ; WX 395 ; N Iota ; B 55 0 340 730 ; C -1 ; WX 747 ; N Kappa ; B 55 0 763 730 ; C -1 ; WX 722 ; N Lambda ; B -6 0 732 730 ; C -1 ; WX 1023 ; N Mu ; B 49 0 974 730 ; C -1 ; WX 875 ; N Nu ; B 48 -15 832 730 ; C -1 ; WX 703 ; N Xi ; B 55 0 643 730 ; C -1 ; WX 819 ; N Omicron ; B 56 -15 765 743 ; C -1 ; WX 872 ; N Pi ; B 55 0 817 730 ; C -1 ; WX 672 ; N Rho ; B 55 0 638 730 ; C -1 ; WX 707 ; N Sigma ; B 40 0 640 730 ; C -1 ; WX 666 ; N Tau ; B 9 0 658 730 ; C -1 ; WX 660 ; N Upsilon ; B -12 0 669 730 ; C -1 ; WX 819 ; N Phi ; B 56 0 765 730 ; C -1 ; WX 711 ; N Chi ; B 5 0 708 730 ; C -1 ; WX 876 ; N Psi ; B 46 0 839 730 ; C -1 ; WX 829 ; N Omega ; B 61 0 770 743 ; C -1 ; WX 395 ; N Iotadieresis ; B 47 0 352 920 ; C -1 ; WX 660 ; N Upsilondieresis ; B -12 0 669 920 ; C -1 ; WX 649 ; N alphatonos ; B 49 -15 615 800 ; C -1 ; WX 536 ; N epsilontonos ; B 49 -20 473 800 ; C -1 ; WX 599 ; N etatonos ; B 36 -209 537 800 ; C -1 ; WX 392 ; N iotatonos ; B 36 -6 336 800 ; C -1 ; WX 607 ; N upsilondieresistonos ; B 36 -4 559 997 ; C -1 ; WX 649 ; N alpha ; B 49 -15 615 534 ; C -1 ; WX 578 ; N beta ; B 62 -209 528 766 ; C -1 ; WX 617 ; N gamma ; B 24 -209 590 520 ; C -1 ; WX 602 ; N delta ; B 49 -15 552 766 ; C -1 ; WX 536 ; N epsilon ; B 49 -20 473 525 ; C -1 ; WX 541 ; N zeta ; B 40 -209 502 760 ; C -1 ; WX 599 ; N eta ; B 36 -209 537 534 ; C -1 ; WX 602 ; N theta ; B 49 -11 552 771 ; C -1 ; WX 392 ; N iota ; B 36 -6 336 520 ; C -1 ; WX 655 ; N kappa ; B 36 0 620 520 ; C -1 ; WX 633 ; N lambda ; B 41 0 606 766 ; C -1 ; WX 649 ; N uni03BC ; B 34 -209 614 520 ; C -1 ; WX 607 ; N nu ; B 36 0 556 520 ; C -1 ; WX 550 ; N xi ; B 40 -209 502 760 ; C -1 ; WX 602 ; N omicron ; B 49 -15 552 534 ; C -1 ; WX 657 ; N pi ; B 36 0 622 520 ; C -1 ; WX 587 ; N rho ; B 62 -209 538 534 ; C -1 ; WX 560 ; N sigma1 ; B 49 -209 502 534 ; C -1 ; WX 682 ; N sigma ; B 49 -15 654 520 ; C -1 ; WX 553 ; N tau ; B 40 -6 516 520 ; C -1 ; WX 607 ; N upsilon ; B 36 -4 559 520 ; C -1 ; WX 700 ; N phi ; B 43 -209 657 522 ; C -1 ; WX 605 ; N chi ; B 12 -223 584 534 ; C -1 ; WX 784 ; N psi ; B 63 -209 722 520 ; C -1 ; WX 815 ; N omega ; B 43 -4 767 520 ; C -1 ; WX 392 ; N iotadieresis ; B 10 -6 336 767 ; C -1 ; WX 607 ; N upsilondieresis ; B 36 -4 559 767 ; C -1 ; WX 602 ; N omicrontonos ; B 49 -15 552 800 ; C -1 ; WX 607 ; N upsilontonos ; B 36 -4 559 800 ; C -1 ; WX 815 ; N omegatonos ; B 43 -4 767 800 ; C -1 ; WX 753 ; N uni0400 ; B 55 0 650 928 ; C -1 ; WX 708 ; N afii10023 ; B 55 0 650 920 ; C -1 ; WX 798 ; N afii10051 ; B -39 -217 725 730 ; C -1 ; WX 719 ; N afii10052 ; B 55 0 652 928 ; C -1 ; WX 765 ; N afii10053 ; B 56 -15 706 743 ; C -1 ; WX 685 ; N afii10054 ; B 83 -15 612 743 ; C -1 ; WX 395 ; N afii10055 ; B 55 0 340 730 ; C -1 ; WX 395 ; N afii10056 ; B 50 0 355 920 ; C -1 ; WX 400 ; N afii10057 ; B -84 -209 355 730 ; C -1 ; WX 1065 ; N afii10058 ; B -36 -18 1015 730 ; C -1 ; WX 1118 ; N afii10059 ; B 55 0 1067 730 ; C -1 ; WX 872 ; N afii10060 ; B -39 0 817 730 ; C -1 ; WX 821 ; N afii10061 ; B 55 0 763 928 ; C -1 ; WX 903 ; N uni040D ; B 55 0 817 928 ; C -1 ; WX 770 ; N afii10062 ; B 11 0 703 929 ; C -1 ; WX 872 ; N afii10145 ; B 55 -157 817 730 ; C -1 ; WX 722 ; N afii10017 ; B -6 0 732 730 ; C -1 ; WX 734 ; N afii10018 ; B 55 0 674 730 ; C -1 ; WX 734 ; N afii10019 ; B 55 0 674 730 ; C -1 ; WX 693 ; N afii10020 ; B 55 0 652 730 ; C -1 ; WX 872 ; N afii10021 ; B 40 -206 788 730 ; C -1 ; WX 729 ; N afii10022 ; B 55 0 650 730 ; C -1 ; WX 1105 ; N afii10024 ; B 64 0 1055 730 ; C -1 ; WX 636 ; N afii10025 ; B 76 -15 563 743 ; C -1 ; WX 872 ; N afii10026 ; B 55 0 817 730 ; C -1 ; WX 872 ; N afii10027 ; B 55 0 817 929 ; C -1 ; WX 747 ; N afii10028 ; B 55 0 763 730 ; C -1 ; WX 872 ; N afii10029 ; B -36 -18 765 730 ; C -1 ; WX 1023 ; N afii10030 ; B 49 0 974 730 ; C -1 ; WX 872 ; N afii10031 ; B 55 0 817 730 ; C -1 ; WX 819 ; N afii10032 ; B 56 -15 765 743 ; C -1 ; WX 872 ; N afii10033 ; B 55 0 817 730 ; C -1 ; WX 672 ; N afii10034 ; B 55 0 638 730 ; C -1 ; WX 765 ; N afii10035 ; B 56 -15 706 743 ; C -1 ; WX 666 ; N afii10036 ; B 9 0 658 730 ; C -1 ; WX 747 ; N afii10037 ; B 11 0 703 730 ; C -1 ; WX 980 ; N afii10038 ; B 56 -157 929 886 ; C -1 ; WX 711 ; N afii10039 ; B 5 0 708 730 ; C -1 ; WX 872 ; N afii10040 ; B 55 -157 837 730 ; C -1 ; WX 749 ; N afii10041 ; B -28 0 698 730 ; C -1 ; WX 1024 ; N afii10042 ; B 55 0 970 730 ; C -1 ; WX 1047 ; N afii10043 ; B 55 -157 990 730 ; C -1 ; WX 760 ; N afii10044 ; B 34 0 710 730 ; C -1 ; WX 1039 ; N afii10045 ; B 87 0 929 730 ; C -1 ; WX 690 ; N afii10046 ; B 87 0 623 730 ; C -1 ; WX 765 ; N afii10047 ; B 56 -15 706 743 ; C -1 ; WX 1193 ; N afii10048 ; B 55 -15 1128 743 ; C -1 ; WX 843 ; N afii10049 ; B 55 0 777 730 ; C -1 ; WX 596 ; N afii10065 ; B 49 -15 568 534 ; C -1 ; WX 602 ; N afii10066 ; B 49 -15 552 748 ; C -1 ; WX 561 ; N afii10067 ; B 35 0 520 520 ; C -1 ; WX 537 ; N afii10068 ; B 28 0 495 520 ; C -1 ; WX 684 ; N afii10069 ; B 17 -167 608 520 ; C -1 ; WX 591 ; N afii10070 ; B 49 -15 542 534 ; C -1 ; WX 850 ; N afii10072 ; B 54 0 793 520 ; C -1 ; WX 536 ; N afii10073 ; B 49 -20 473 525 ; C -1 ; WX 666 ; N afii10074 ; B 34 0 614 520 ; C -1 ; WX 666 ; N afii10075 ; B 34 0 614 785 ; C -1 ; WX 605 ; N afii10076 ; B 28 0 613 520 ; C -1 ; WX 623 ; N afii10077 ; B -17 -7 580 520 ; C -1 ; WX 839 ; N afii10078 ; B 34 0 802 520 ; C -1 ; WX 666 ; N afii10079 ; B 34 0 614 520 ; C -1 ; WX 602 ; N afii10080 ; B 49 -15 552 534 ; C -1 ; WX 666 ; N afii10081 ; B 28 0 620 520 ; C -1 ; WX 640 ; N afii10082 ; B 28 -209 590 534 ; C -1 ; WX 560 ; N afii10083 ; B 49 -15 515 534 ; C -1 ; WX 553 ; N afii10084 ; B 40 0 516 520 ; C -1 ; WX 564 ; N afii10085 ; B -3 -223 563 520 ; C -1 ; WX 737 ; N afii10086 ; B 38 -155 706 675 ; C -1 ; WX 563 ; N afii10087 ; B 12 0 552 520 ; C -1 ; WX 689 ; N afii10088 ; B 28 -139 671 520 ; C -1 ; WX 666 ; N afii10089 ; B 34 0 614 520 ; C -1 ; WX 850 ; N afii10090 ; B 28 0 802 520 ; C -1 ; WX 903 ; N afii10091 ; B 28 -139 854 520 ; C -1 ; WX 552 ; N afii10092 ; B 29 0 502 520 ; C -1 ; WX 738 ; N afii10093 ; B 29 0 704 520 ; C -1 ; WX 491 ; N afii10094 ; B 29 0 440 520 ; C -1 ; WX 560 ; N afii10095 ; B 49 -15 515 534 ; C -1 ; WX 870 ; N afii10096 ; B 28 -15 826 534 ; C -1 ; WX 646 ; N afii10097 ; B 50 0 564 520 ; C -1 ; WX 591 ; N uni0450 ; B 49 -15 542 799 ; C -1 ; WX 591 ; N afii10071 ; B 49 -15 542 767 ; C -1 ; WX 620 ; N afii10099 ; B 20 -223 563 760 ; C -1 ; WX 537 ; N afii10100 ; B 28 0 495 800 ; C -1 ; WX 560 ; N afii10101 ; B 49 -15 515 534 ; C -1 ; WX 513 ; N afii10102 ; B 56 -15 462 534 ; C -1 ; WX 319 ; N afii10103 ; B 36 0 297 736 ; C -1 ; WX 319 ; N afii10104 ; B -3 0 302 767 ; C -1 ; WX 310 ; N afii10105 ; B -97 -223 212 736 ; C -1 ; WX 781 ; N afii10106 ; B -17 -7 755 520 ; C -1 ; WX 797 ; N afii10107 ; B 34 0 768 520 ; C -1 ; WX 644 ; N afii10108 ; B 20 0 643 760 ; C -1 ; WX 605 ; N afii10109 ; B 28 0 613 800 ; C -1 ; WX 666 ; N uni045D ; B 34 0 614 799 ; C -1 ; WX 564 ; N afii10110 ; B -3 -223 563 786 ; C -1 ; WX 655 ; N afii10193 ; B 28 -139 620 520 ; C -1 ; WX 693 ; N afii10050 ; B 55 0 652 873 ; C -1 ; WX 537 ; N afii10098 ; B 28 0 495 668 ; C -1 ; WX 693 ; N uni0492 ; B 55 0 652 730 ; C -1 ; WX 537 ; N uni0493 ; B 28 0 495 520 ; C -1 ; WX 747 ; N uni049A ; B 55 -157 763 730 ; C -1 ; WX 605 ; N uni049B ; B 28 -139 613 520 ; C -1 ; WX 711 ; N uni04B2 ; B 5 -157 708 730 ; C -1 ; WX 563 ; N uni04B3 ; B 12 -139 552 520 ; C -1 ; WX 801 ; N uni1E12 ; B 55 -189 745 730 ; C -1 ; WX 640 ; N uni1E13 ; B 49 -221 611 760 ; C -1 ; WX 664 ; N uni1E3C ; B 55 -189 641 730 ; C -1 ; WX 319 ; N uni1E3D ; B 3 -215 316 760 ; C -1 ; WX 875 ; N uni1E44 ; B 48 -15 832 916 ; C -1 ; WX 644 ; N uni1E45 ; B 36 0 617 708 ; C -1 ; WX 875 ; N uni1E4A ; B 48 -203 832 730 ; C -1 ; WX 644 ; N uni1E4B ; B 36 -215 617 534 ; C -1 ; WX 666 ; N uni1E70 ; B 9 -189 658 730 ; C -1 ; WX 401 ; N uni1E71 ; B 28 -258 406 681 ; C -1 ; WX 1027 ; N Wgrave ; B 4 0 1025 986 ; C -1 ; WX 855 ; N wgrave ; B 16 0 843 777 ; C -1 ; WX 1027 ; N Wacute ; B 4 0 1025 986 ; C -1 ; WX 855 ; N wacute ; B 16 0 843 777 ; C -1 ; WX 1027 ; N Wdieresis ; B 4 0 1025 917 ; C -1 ; WX 855 ; N wdieresis ; B 16 0 843 708 ; C -1 ; WX 660 ; N Ygrave ; B -12 0 669 986 ; C -1 ; WX 564 ; N ygrave ; B -3 -223 563 777 ; C -1 ; WX 337 ; N uni2010 ; B 43 229 294 307 ; C -1 ; WX 337 ; N uni2011 ; B 43 229 294 307 ; C -1 ; WX 500 ; N figuredash ; B 0 232 500 298 ; C -1 ; WX 500 ; N endash ; B 0 232 500 298 ; C -1 ; WX 1000 ; N emdash ; B 0 232 1000 298 ; C -1 ; WX 1000 ; N afii00208 ; B 0 232 1000 298 ; C -1 ; WX 317 ; N quoteleft ; B 102 495 269 743 ; C -1 ; WX 317 ; N quoteright ; B 70 481 238 730 ; C -1 ; WX 317 ; N quotesinglbase ; B 43 -137 230 111 ; C -1 ; WX 511 ; N quotedblleft ; B 102 495 461 743 ; C -1 ; WX 511 ; N quotedblright ; B 70 481 431 730 ; C -1 ; WX 518 ; N quotedblbase ; B 43 -137 422 111 ; C -1 ; WX 500 ; N dagger ; B 27 -97 473 730 ; C -1 ; WX 500 ; N daggerdbl ; B 27 -97 473 730 ; C -1 ; WX 589 ; N bullet ; B 149 226 440 517 ; C -1 ; WX 1000 ; N ellipsis ; B 102 -15 898 117 ; C -1 ; WX 1341 ; N perthousand ; B 55 -15 1288 743 ; C -1 ; WX 399 ; N guilsinglleft ; B 77 68 307 518 ; C -1 ; WX 399 ; N guilsinglright ; B 94 68 324 518 ; C -1 ; WX 432 ; N uni207F ; B 22 451 382 751 ; C -1 ; WX 636 ; N Euro ; B -4 -15 556 743 ; C -1 ; WX 1000 ; N trademark ; B 118 446 827 730 ; C -1 ; WX 517 ; N partialdiff ; B 50 -13 470 647 ; C -1 ; WX 698 ; N Delta ; B 24 0 667 730 ; C -1 ; WX 795 ; N product ; B 25 -192 770 720 ; C -1 ; WX 713 ; N summation ; B 7 -192 702 720 ; C -1 ; WX 837 ; N minus ; B 105 273 732 354 ; C -1 ; WX 166 ; N fraction ; B -184 -15 351 743 ; C -1 ; WX 317 ; N periodcentered ; B 92 282 224 413 ; C -1 ; WX 637 ; N radical ; B 29 -21 638 812 ; C -1 ; WX 833 ; N infinity ; B 107 107 727 492 ; C -1 ; WX 520 ; N integral ; B 22 -182 498 757 ; C -1 ; WX 837 ; N approxequal ; B 105 138 732 489 ; C -1 ; WX 837 ; N notequal ; B 105 19 732 608 ; C -1 ; WX 837 ; N lessequal ; B 105 0 732 583 ; C -1 ; WX 837 ; N greaterequal ; B 105 0 732 583 ; C -1 ; WX 763 ; N house ; B 71 0 693 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 421 ; C -1 ; WX 513 ; N uni2311 ; B 2 126 511 634 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 421 ; C -1 ; WX 918 ; N uni237D ; B 12 -228 907 101 ; C -1 ; WX 763 ; N uni2423 ; B 71 -228 693 101 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 2 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 666 ; N fi ; B 36 0 645 760 ; C -1 ; WX 666 ; N fl ; B 36 0 638 760 ; C -1 ; WX 1025 ; N uniFFFD ; B 14 -84 1011 913 ; C -1 ; WX 500 ; N dlLtcaron ; B 191 616 320 800 ; C -1 ; WX 500 ; N Dieresis ; B 98 624 402 738 ; C -1 ; WX 500 ; N Acute ; B 191 616 377 746 ; C -1 ; WX 500 ; N Tilde ; B 88 631 412 739 ; C -1 ; WX 500 ; N Grave ; B 120 616 306 746 ; C -1 ; WX 500 ; N Circumflex ; B 94 616 406 746 ; C -1 ; WX 500 ; N Caron ; B 94 616 406 746 ; C -1 ; WX 400 ; N foursuperior ; B 25 326 371 734 ; C -1 ; WX 500 ; N Breve ; B 98 627 402 747 ; C -1 ; WX 500 ; N Dotaccent ; B 192 625 308 739 ; C -1 ; WX 500 ; N Hungarumlaut ; B 119 616 459 746 ; C -1 ; WX 500 ; N Doubleacute ; B 41 616 381 746 ; EndCharMetrics StartKernData StartKernPairs 1300 KPX hyphen Tcaron -35 KPX hyphen Yacute -109 KPX hyphen Ydieresis -109 KPX hyphen Y -109 KPX hyphen X -35 KPX hyphen W -54 KPX hyphen V -72 KPX hyphen T -35 KPX A ygrave -40 KPX A ycircumflex -40 KPX A wdieresis -44 KPX A wacute -44 KPX A wgrave -44 KPX A wcircumflex -44 KPX A uni021B -17 KPX A tcommaaccent -17 KPX A Ygrave -40 KPX A Ycircumflex -40 KPX A uni0232 -40 KPX A Wdieresis -40 KPX A Wacute -40 KPX A Wgrave -40 KPX A Wcircumflex -40 KPX A uni021A -54 KPX A Tcommaaccent -54 KPX A tcaron -17 KPX A Tcaron -54 KPX A yacute -40 KPX A Yacute -40 KPX A fl -17 KPX A fi -17 KPX A Ydieresis -40 KPX A ydieresis -40 KPX A quoteright -146 KPX A quotedblright -146 KPX A y -40 KPX A w -44 KPX A v -40 KPX A t -17 KPX A f -17 KPX A Y -40 KPX A W -40 KPX A V -49 KPX A T -54 KPX B uni0232 -17 KPX B Ycircumflex -17 KPX B uni022E 18 KPX B uni01EC 18 KPX B uni01EA 18 KPX B Ohungarumlaut 18 KPX B Obreve 18 KPX B Omacron 18 KPX B Gcommaaccent 18 KPX B Gdotaccent 18 KPX B Gcircumflex 18 KPX B Cdotaccent 18 KPX B Ccircumflex 18 KPX B Ccaron 18 KPX B Cacute 18 KPX B Gbreve 18 KPX B Yacute -17 KPX B Ograve 18 KPX B Ocircumflex 18 KPX B Oacute 18 KPX B Ydieresis -17 KPX B OE 18 KPX B Otilde 18 KPX B Oslash 18 KPX B Odieresis 18 KPX B Ccedilla 18 KPX B Y -17 KPX B O 18 KPX B G 18 KPX B C 18 KPX B hyphen 18 KPX C period -35 KPX C comma -35 KPX D V -17 KPX D period -35 KPX D hyphen 18 KPX D comma -35 KPX E hyphen 18 KPX F uni01E3 -67 KPX F uni022F -54 KPX F uni01ED -54 KPX F uni01EB -54 KPX F ohungarumlaut -54 KPX F obreve -54 KPX F omacron -54 KPX F eogonek -54 KPX F edotaccent -54 KPX F ebreve -54 KPX F emacron -54 KPX F aogonek -67 KPX F abreve -67 KPX F amacron -67 KPX F Aogonek -86 KPX F Abreve -86 KPX F Amacron -86 KPX F ecaron -54 KPX F Aacute -86 KPX F Acircumflex -86 KPX F oe -54 KPX F Atilde -86 KPX F Agrave -86 KPX F oslash -54 KPX F ae -67 KPX F otilde -54 KPX F odieresis -54 KPX F ocircumflex -54 KPX F ograve -54 KPX F oacute -54 KPX F edieresis -54 KPX F ecircumflex -54 KPX F egrave -54 KPX F eacute -54 KPX F aring -67 KPX F atilde -67 KPX F adieresis -67 KPX F acircumflex -67 KPX F agrave -67 KPX F aacute -67 KPX F Adieresis -86 KPX F o -54 KPX F e -54 KPX F a -67 KPX F A -86 KPX F semicolon -35 KPX F colon -35 KPX F period -155 KPX F hyphen -44 KPX F comma -155 KPX G Yacute -17 KPX G Ydieresis -17 KPX G Y -17 KPX G period -35 KPX G hyphen 18 KPX G comma -35 KPX J semicolon -40 KPX J colon -40 KPX J period -77 KPX J comma -58 KPX K uring -21 KPX K Uring -35 KPX K ecaron -26 KPX K Ccaron -26 KPX K Cacute -26 KPX K yacute -63 KPX K Yacute -26 KPX K Ugrave -35 KPX K Ucircumflex -35 KPX K Uacute -35 KPX K Ograve -26 KPX K Ocircumflex -26 KPX K Oacute -26 KPX K Aacute -40 KPX K Acircumflex -40 KPX K Ydieresis -26 KPX K ydieresis -63 KPX K oe -26 KPX K OE -26 KPX K Otilde -26 KPX K Atilde -40 KPX K Agrave -40 KPX K oslash -17 KPX K Oslash -26 KPX K udieresis -21 KPX K ucircumflex -21 KPX K ugrave -21 KPX K uacute -21 KPX K otilde -26 KPX K odieresis -26 KPX K ocircumflex -26 KPX K ograve -26 KPX K oacute -26 KPX K edieresis -26 KPX K ecircumflex -26 KPX K egrave -26 KPX K eacute -26 KPX K Udieresis -35 KPX K Odieresis -26 KPX K Ccedilla -26 KPX K Adieresis -40 KPX K y -63 KPX K u -21 KPX K o -26 KPX K e -26 KPX K Y -26 KPX K W -35 KPX K U -35 KPX K O -26 KPX K C -26 KPX K A -40 KPX K hyphen -72 KPX L Uring -54 KPX L Tcaron -81 KPX L yacute -17 KPX L Yacute -63 KPX L Ugrave -54 KPX L Ucircumflex -54 KPX L Uacute -54 KPX L Ydieresis -63 KPX L ydieresis -17 KPX L quoteright -239 KPX L quotedblright -239 KPX L Udieresis -54 KPX L y -17 KPX L Y -63 KPX L W -86 KPX L V -118 KPX L U -54 KPX L T -81 KPX N semicolon -35 KPX N colon -35 KPX N period -63 KPX N comma -63 KPX O X -17 KPX O V -17 KPX O period -58 KPX O hyphen 36 KPX O comma -58 KPX P Uring -17 KPX P ecaron -44 KPX P scedilla -26 KPX P scaron -26 KPX P Ugrave -17 KPX P Ucircumflex -17 KPX P Uacute -17 KPX P Aacute -91 KPX P Acircumflex -91 KPX P oe -40 KPX P Atilde -91 KPX P Agrave -91 KPX P oslash -40 KPX P ae -44 KPX P otilde -40 KPX P odieresis -40 KPX P ocircumflex -40 KPX P ograve -40 KPX P oacute -40 KPX P edieresis -44 KPX P ecircumflex -44 KPX P egrave -44 KPX P eacute -44 KPX P aring -44 KPX P atilde -44 KPX P adieresis -44 KPX P acircumflex -44 KPX P agrave -44 KPX P aacute -44 KPX P Udieresis -17 KPX P Adieresis -91 KPX P s -26 KPX P o -40 KPX P e -44 KPX P a -44 KPX P U -17 KPX P A -91 KPX P semicolon -35 KPX P colon -35 KPX P period -202 KPX P hyphen -54 KPX P comma -202 KPX Q quoteright 18 KPX Q quotedblright 18 KPX Q period -49 KPX Q hyphen 36 KPX Q comma -49 KPX R Tcaron -17 KPX R yacute -17 KPX R Yacute -30 KPX R Ydieresis -30 KPX R ydieresis -17 KPX R quoteright -54 KPX R quotedblright -54 KPX R oslash 18 KPX R ae 22 KPX R aring 22 KPX R atilde 22 KPX R adieresis 22 KPX R acircumflex 22 KPX R agrave 22 KPX R aacute 22 KPX R y -17 KPX R a 22 KPX R Y -30 KPX R W -21 KPX R V -35 KPX R T -17 KPX S Scedilla -17 KPX S Scaron -17 KPX S S -17 KPX S period -35 KPX S hyphen 36 KPX S comma -35 KPX T Tcaron 18 KPX T ecaron -77 KPX T ccaron -77 KPX T cacute -77 KPX T scedilla -72 KPX T scaron -72 KPX T Aacute -54 KPX T Acircumflex -54 KPX T oe -77 KPX T Atilde -54 KPX T Agrave -54 KPX T oslash -77 KPX T ae -77 KPX T otilde -77 KPX T odieresis -77 KPX T ocircumflex -77 KPX T ograve -77 KPX T oacute -77 KPX T edieresis -77 KPX T ecircumflex -77 KPX T egrave -77 KPX T eacute -77 KPX T ccedilla -77 KPX T aring -77 KPX T atilde -77 KPX T adieresis -77 KPX T acircumflex -77 KPX T agrave -77 KPX T aacute -77 KPX T Adieresis -54 KPX T w -35 KPX T s -72 KPX T o -77 KPX T e -77 KPX T c -77 KPX T a -77 KPX T T 18 KPX T A -54 KPX T semicolon -35 KPX T colon -35 KPX T period -146 KPX T hyphen -128 KPX T comma -146 KPX U Aacute -30 KPX U Acircumflex -30 KPX U Atilde -30 KPX U Agrave -30 KPX U Adieresis -30 KPX U J -26 KPX U A -30 KPX U semicolon -35 KPX U colon -35 KPX U period -91 KPX U hyphen -17 KPX U comma -91 KPX V uring -63 KPX V ecaron -91 KPX V yacute -40 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -67 KPX V Acircumflex -67 KPX V ydieresis -40 KPX V quoteright 36 KPX V quotedblright 36 KPX V oe -91 KPX V OE -17 KPX V Otilde -17 KPX V Atilde -67 KPX V Agrave -67 KPX V oslash -91 KPX V ae -91 KPX V Oslash -17 KPX V udieresis -63 KPX V ucircumflex -63 KPX V ugrave -63 KPX V uacute -63 KPX V otilde -91 KPX V odieresis -91 KPX V ocircumflex -91 KPX V ograve -91 KPX V oacute -91 KPX V edieresis -91 KPX V ecircumflex -91 KPX V egrave -91 KPX V eacute -91 KPX V aring -91 KPX V atilde -91 KPX V adieresis -91 KPX V acircumflex -91 KPX V agrave -91 KPX V aacute -91 KPX V Odieresis -17 KPX V Adieresis -67 KPX V y -40 KPX V u -63 KPX V o -91 KPX V i -17 KPX V e -91 KPX V a -91 KPX V O -17 KPX V A -67 KPX V semicolon -100 KPX V colon -100 KPX V period -174 KPX V hyphen -91 KPX V comma -174 KPX W udieresis -40 KPX W aring -86 KPX W ae -67 KPX W semicolon -86 KPX W ograve -67 KPX W hyphen -72 KPX W period -174 KPX W uring -40 KPX W otilde -67 KPX W edieresis -81 KPX W ugrave -40 KPX W comma -174 KPX W agrave -86 KPX W Atilde -49 KPX W ecircumflex -81 KPX W racute -44 KPX W quotedblright 18 KPX W egrave -81 KPX W Adieresis -49 KPX W Aacute -49 KPX W quoteright 18 KPX W ucircumflex -40 KPX W yacute -21 KPX W atilde -86 KPX W Acircumflex -49 KPX W oslash -67 KPX W ocircumflex -67 KPX W A -49 KPX W a -86 KPX W adieresis -86 KPX W odieresis -67 KPX W uacute -40 KPX W aacute -86 KPX W rcaron -44 KPX W acircumflex -86 KPX W eacute -81 KPX W ecaron -81 KPX W e -81 KPX W i -17 KPX W oe -67 KPX W ydieresis -21 KPX W o -67 KPX W r -44 KPX W u -40 KPX W Agrave -49 KPX W y -21 KPX W colon -86 KPX W oacute -67 KPX X Ccaron -17 KPX X Cacute -17 KPX X Ograve -17 KPX X Ocircumflex -17 KPX X Oacute -17 KPX X Aacute -35 KPX X Acircumflex -35 KPX X OE -17 KPX X Otilde -17 KPX X Atilde -35 KPX X Agrave -35 KPX X Oslash -17 KPX X Odieresis -17 KPX X Ccedilla -17 KPX X Adieresis -35 KPX X O -17 KPX X C -17 KPX X A -35 KPX X hyphen -35 KPX Y uring -86 KPX Y ecaron -86 KPX Y Ccaron -17 KPX Y Cacute -17 KPX Y Aacute -77 KPX Y Acircumflex -77 KPX Y oe -104 KPX Y Atilde -77 KPX Y Agrave -77 KPX Y oslash -86 KPX Y ae -95 KPX Y udieresis -86 KPX Y ucircumflex -86 KPX Y ugrave -86 KPX Y uacute -86 KPX Y otilde -86 KPX Y odieresis -86 KPX Y ocircumflex -86 KPX Y ograve -86 KPX Y oacute -86 KPX Y edieresis -86 KPX Y ecircumflex -86 KPX Y egrave -86 KPX Y eacute -86 KPX Y aring -77 KPX Y atilde -77 KPX Y adieresis -77 KPX Y acircumflex -77 KPX Y agrave -77 KPX Y aacute -77 KPX Y Ccedilla -17 KPX Y Adieresis -77 KPX Y u -86 KPX Y o -86 KPX Y i -17 KPX Y e -86 KPX Y a -77 KPX Y C -17 KPX Y A -77 KPX Y semicolon -123 KPX Y colon -123 KPX Y period -128 KPX Y hyphen -109 KPX Y comma -128 KPX Z period -17 KPX Z comma -17 KPX f quoteright 73 KPX f quotedblright 73 KPX f quotedblleft 18 KPX f period -35 KPX f hyphen -35 KPX f comma -35 KPX k hyphen -17 KPX o period -17 KPX r period -109 KPX r comma -109 KPX v period -118 KPX v comma -118 KPX w period -118 KPX w comma -118 KPX x hyphen -17 KPX y period -132 KPX y comma -132 KPX Agrave ygrave -40 KPX Agrave ycircumflex -40 KPX Agrave wdieresis -44 KPX Agrave wacute -44 KPX Agrave wgrave -44 KPX Agrave wcircumflex -44 KPX Agrave uni021B -17 KPX Agrave tcommaaccent -17 KPX Agrave Ygrave -40 KPX Agrave Ycircumflex -40 KPX Agrave uni0232 -40 KPX Agrave Wdieresis -40 KPX Agrave Wacute -40 KPX Agrave Wgrave -40 KPX Agrave Wcircumflex -40 KPX Agrave uni021A -54 KPX Agrave Tcommaaccent -54 KPX Agrave tcaron -17 KPX Agrave Tcaron -54 KPX Agrave yacute -40 KPX Agrave Yacute -40 KPX Agrave fl -17 KPX Agrave fi -17 KPX Agrave Ydieresis -40 KPX Agrave ydieresis -40 KPX Agrave quoteright -146 KPX Agrave quotedblright -146 KPX Agrave y -40 KPX Agrave w -44 KPX Agrave v -40 KPX Agrave t -17 KPX Agrave f -17 KPX Agrave Y -40 KPX Agrave W -40 KPX Agrave V -49 KPX Agrave T -54 KPX Aacute ygrave -40 KPX Aacute ycircumflex -40 KPX Aacute wdieresis -44 KPX Aacute wacute -44 KPX Aacute wgrave -44 KPX Aacute wcircumflex -44 KPX Aacute uni021B -17 KPX Aacute tcommaaccent -17 KPX Aacute Ygrave -40 KPX Aacute Ycircumflex -40 KPX Aacute uni0232 -40 KPX Aacute Wdieresis -40 KPX Aacute Wacute -40 KPX Aacute Wgrave -40 KPX Aacute Wcircumflex -40 KPX Aacute uni021A -54 KPX Aacute Tcommaaccent -54 KPX Aacute tcaron -17 KPX Aacute Tcaron -54 KPX Aacute yacute -40 KPX Aacute Yacute -40 KPX Aacute fl -17 KPX Aacute fi -17 KPX Aacute Ydieresis -40 KPX Aacute ydieresis -40 KPX Aacute quoteright -146 KPX Aacute quotedblright -146 KPX Aacute y -40 KPX Aacute w -44 KPX Aacute v -40 KPX Aacute t -17 KPX Aacute f -17 KPX Aacute Y -40 KPX Aacute W -40 KPX Aacute V -49 KPX Aacute T -54 KPX Acircumflex ygrave -40 KPX Acircumflex ycircumflex -40 KPX Acircumflex wdieresis -44 KPX Acircumflex wacute -44 KPX Acircumflex wgrave -44 KPX Acircumflex wcircumflex -44 KPX Acircumflex uni021B -17 KPX Acircumflex tcommaaccent -17 KPX Acircumflex Ygrave -40 KPX Acircumflex Ycircumflex -40 KPX Acircumflex uni0232 -40 KPX Acircumflex Wdieresis -40 KPX Acircumflex Wacute -40 KPX Acircumflex Wgrave -40 KPX Acircumflex Wcircumflex -40 KPX Acircumflex uni021A -54 KPX Acircumflex Tcommaaccent -54 KPX Acircumflex tcaron -17 KPX Acircumflex Tcaron -54 KPX Acircumflex yacute -40 KPX Acircumflex Yacute -40 KPX Acircumflex fl -17 KPX Acircumflex fi -17 KPX Acircumflex Ydieresis -40 KPX Acircumflex ydieresis -40 KPX Acircumflex quoteright -146 KPX Acircumflex quotedblright -146 KPX Acircumflex y -40 KPX Acircumflex w -44 KPX Acircumflex v -40 KPX Acircumflex t -17 KPX Acircumflex f -17 KPX Acircumflex Y -40 KPX Acircumflex W -40 KPX Acircumflex V -49 KPX Acircumflex T -54 KPX Atilde ygrave -40 KPX Atilde ycircumflex -40 KPX Atilde wdieresis -44 KPX Atilde wacute -44 KPX Atilde wgrave -44 KPX Atilde wcircumflex -44 KPX Atilde uni021B -17 KPX Atilde tcommaaccent -17 KPX Atilde Ygrave -40 KPX Atilde Ycircumflex -40 KPX Atilde uni0232 -40 KPX Atilde Wdieresis -40 KPX Atilde Wacute -40 KPX Atilde Wgrave -40 KPX Atilde Wcircumflex -40 KPX Atilde uni021A -54 KPX Atilde Tcommaaccent -54 KPX Atilde tcaron -17 KPX Atilde Tcaron -54 KPX Atilde yacute -40 KPX Atilde Yacute -40 KPX Atilde fl -17 KPX Atilde fi -17 KPX Atilde Ydieresis -40 KPX Atilde ydieresis -40 KPX Atilde quoteright -146 KPX Atilde quotedblright -146 KPX Atilde y -40 KPX Atilde w -44 KPX Atilde v -40 KPX Atilde t -17 KPX Atilde f -17 KPX Atilde Y -40 KPX Atilde W -40 KPX Atilde V -49 KPX Atilde T -54 KPX Adieresis ygrave -40 KPX Adieresis ycircumflex -40 KPX Adieresis wdieresis -44 KPX Adieresis wacute -44 KPX Adieresis wgrave -44 KPX Adieresis wcircumflex -44 KPX Adieresis uni021B -17 KPX Adieresis tcommaaccent -17 KPX Adieresis Ygrave -40 KPX Adieresis Ycircumflex -40 KPX Adieresis uni0232 -40 KPX Adieresis Wdieresis -40 KPX Adieresis Wacute -40 KPX Adieresis Wgrave -40 KPX Adieresis Wcircumflex -40 KPX Adieresis uni021A -54 KPX Adieresis Tcommaaccent -54 KPX Adieresis tcaron -17 KPX Adieresis Tcaron -54 KPX Adieresis yacute -40 KPX Adieresis Yacute -40 KPX Adieresis fl -17 KPX Adieresis fi -17 KPX Adieresis Ydieresis -40 KPX Adieresis ydieresis -40 KPX Adieresis quoteright -146 KPX Adieresis quotedblright -146 KPX Adieresis y -40 KPX Adieresis w -44 KPX Adieresis v -40 KPX Adieresis t -17 KPX Adieresis f -17 KPX Adieresis Y -40 KPX Adieresis W -40 KPX Adieresis V -49 KPX Adieresis T -54 KPX AE hyphen 18 KPX Ccedilla period -35 KPX Ccedilla comma -35 KPX Egrave hyphen 18 KPX Eacute hyphen 18 KPX Ecircumflex hyphen 18 KPX Edieresis hyphen 18 KPX Eth Yacute -17 KPX Eth Aacute -17 KPX Eth Acircumflex -17 KPX Eth Ydieresis -17 KPX Eth Atilde -17 KPX Eth Agrave -17 KPX Eth Adieresis -17 KPX Eth Y -17 KPX Eth V -17 KPX Eth A -17 KPX Eth period -35 KPX Eth hyphen 36 KPX Eth comma -35 KPX Ntilde semicolon -35 KPX Ntilde colon -35 KPX Ntilde period -63 KPX Ntilde comma -63 KPX Ograve X -17 KPX Ograve V -17 KPX Ograve period -58 KPX Ograve hyphen 36 KPX Ograve comma -58 KPX Oacute X -17 KPX Oacute V -17 KPX Oacute period -58 KPX Oacute hyphen 36 KPX Oacute comma -58 KPX Ocircumflex X -17 KPX Ocircumflex V -17 KPX Ocircumflex period -58 KPX Ocircumflex hyphen 36 KPX Ocircumflex comma -58 KPX Otilde X -17 KPX Otilde V -17 KPX Otilde period -58 KPX Otilde hyphen 36 KPX Otilde comma -58 KPX Odieresis X -17 KPX Odieresis V -17 KPX Odieresis period -58 KPX Odieresis hyphen 36 KPX Odieresis comma -58 KPX Oslash X -17 KPX Oslash V -17 KPX Oslash period -58 KPX Oslash hyphen 36 KPX Oslash comma -58 KPX Ugrave Aacute -30 KPX Ugrave Acircumflex -30 KPX Ugrave Atilde -30 KPX Ugrave Agrave -30 KPX Ugrave Adieresis -30 KPX Ugrave J -26 KPX Ugrave A -30 KPX Ugrave semicolon -35 KPX Ugrave colon -35 KPX Ugrave period -91 KPX Ugrave hyphen -17 KPX Ugrave comma -91 KPX Uacute Aacute -30 KPX Uacute Acircumflex -30 KPX Uacute Atilde -30 KPX Uacute Agrave -30 KPX Uacute Adieresis -30 KPX Uacute J -26 KPX Uacute A -30 KPX Uacute semicolon -35 KPX Uacute colon -35 KPX Uacute period -91 KPX Uacute hyphen -17 KPX Uacute comma -91 KPX Ucircumflex Aacute -30 KPX Ucircumflex Acircumflex -30 KPX Ucircumflex Atilde -30 KPX Ucircumflex Agrave -30 KPX Ucircumflex Adieresis -30 KPX Ucircumflex J -26 KPX Ucircumflex A -30 KPX Ucircumflex semicolon -35 KPX Ucircumflex colon -35 KPX Ucircumflex period -91 KPX Ucircumflex hyphen -17 KPX Ucircumflex comma -91 KPX Udieresis Aacute -30 KPX Udieresis Acircumflex -30 KPX Udieresis Atilde -30 KPX Udieresis Agrave -30 KPX Udieresis Adieresis -30 KPX Udieresis J -26 KPX Udieresis A -30 KPX Udieresis semicolon -35 KPX Udieresis colon -35 KPX Udieresis period -91 KPX Udieresis hyphen -17 KPX Udieresis comma -91 KPX Yacute uring -86 KPX Yacute ecaron -86 KPX Yacute Ccaron -17 KPX Yacute Cacute -17 KPX Yacute Aacute -77 KPX Yacute Acircumflex -77 KPX Yacute oe -104 KPX Yacute Atilde -77 KPX Yacute Agrave -77 KPX Yacute oslash -86 KPX Yacute ae -95 KPX Yacute udieresis -86 KPX Yacute ucircumflex -86 KPX Yacute ugrave -86 KPX Yacute uacute -86 KPX Yacute otilde -86 KPX Yacute odieresis -86 KPX Yacute ocircumflex -86 KPX Yacute ograve -86 KPX Yacute oacute -86 KPX Yacute edieresis -86 KPX Yacute ecircumflex -86 KPX Yacute egrave -86 KPX Yacute eacute -86 KPX Yacute aring -77 KPX Yacute atilde -77 KPX Yacute adieresis -77 KPX Yacute acircumflex -77 KPX Yacute agrave -77 KPX Yacute aacute -77 KPX Yacute Ccedilla -17 KPX Yacute Adieresis -77 KPX Yacute u -86 KPX Yacute o -86 KPX Yacute i -17 KPX Yacute e -86 KPX Yacute a -77 KPX Yacute C -17 KPX Yacute A -77 KPX Yacute semicolon -123 KPX Yacute colon -123 KPX Yacute period -128 KPX Yacute hyphen -109 KPX Yacute comma -128 KPX Thorn period -165 KPX Thorn hyphen 18 KPX Thorn comma -165 KPX eth period -17 KPX ograve period -17 KPX oacute period -17 KPX ocircumflex period -17 KPX otilde period -17 KPX odieresis period -17 KPX oslash period -17 KPX yacute period -132 KPX yacute comma -132 KPX thorn period -49 KPX thorn comma -17 KPX ydieresis period -132 KPX ydieresis comma -132 KPX Amacron ygrave -40 KPX Amacron ycircumflex -40 KPX Amacron wdieresis -44 KPX Amacron wacute -44 KPX Amacron wgrave -44 KPX Amacron wcircumflex -44 KPX Amacron uni021B -17 KPX Amacron tcommaaccent -17 KPX Amacron Ygrave -40 KPX Amacron Ycircumflex -40 KPX Amacron uni0232 -40 KPX Amacron Wdieresis -40 KPX Amacron Wacute -40 KPX Amacron Wgrave -40 KPX Amacron Wcircumflex -40 KPX Amacron uni021A -54 KPX Amacron Tcommaaccent -54 KPX Amacron tcaron -17 KPX Amacron Tcaron -54 KPX Amacron yacute -40 KPX Amacron Yacute -40 KPX Amacron fl -17 KPX Amacron fi -17 KPX Amacron Ydieresis -40 KPX Amacron ydieresis -40 KPX Amacron quoteright -146 KPX Amacron quotedblright -146 KPX Amacron y -40 KPX Amacron w -44 KPX Amacron v -40 KPX Amacron t -17 KPX Amacron f -17 KPX Amacron Y -40 KPX Amacron W -40 KPX Amacron V -49 KPX Amacron T -54 KPX Abreve ygrave -40 KPX Abreve ycircumflex -40 KPX Abreve wdieresis -44 KPX Abreve wacute -44 KPX Abreve wgrave -44 KPX Abreve wcircumflex -44 KPX Abreve uni021B -17 KPX Abreve tcommaaccent -17 KPX Abreve Ygrave -40 KPX Abreve Ycircumflex -40 KPX Abreve uni0232 -40 KPX Abreve Wdieresis -40 KPX Abreve Wacute -40 KPX Abreve Wgrave -40 KPX Abreve Wcircumflex -40 KPX Abreve uni021A -54 KPX Abreve Tcommaaccent -54 KPX Abreve tcaron -17 KPX Abreve Tcaron -54 KPX Abreve yacute -40 KPX Abreve Yacute -40 KPX Abreve fl -17 KPX Abreve fi -17 KPX Abreve Ydieresis -40 KPX Abreve ydieresis -40 KPX Abreve quoteright -146 KPX Abreve quotedblright -146 KPX Abreve y -40 KPX Abreve w -44 KPX Abreve v -40 KPX Abreve t -17 KPX Abreve f -17 KPX Abreve Y -40 KPX Abreve W -40 KPX Abreve V -49 KPX Abreve T -54 KPX Aogonek ygrave -40 KPX Aogonek ycircumflex -40 KPX Aogonek wdieresis -44 KPX Aogonek wacute -44 KPX Aogonek wgrave -44 KPX Aogonek wcircumflex -44 KPX Aogonek uni021B -17 KPX Aogonek tcommaaccent -17 KPX Aogonek Ygrave -40 KPX Aogonek Ycircumflex -40 KPX Aogonek uni0232 -40 KPX Aogonek Wdieresis -40 KPX Aogonek Wacute -40 KPX Aogonek Wgrave -40 KPX Aogonek Wcircumflex -40 KPX Aogonek uni021A -54 KPX Aogonek Tcommaaccent -54 KPX Aogonek tcaron -17 KPX Aogonek Tcaron -54 KPX Aogonek yacute -40 KPX Aogonek Yacute -40 KPX Aogonek fl -17 KPX Aogonek fi -17 KPX Aogonek Ydieresis -40 KPX Aogonek ydieresis -40 KPX Aogonek quoteright -146 KPX Aogonek quotedblright -146 KPX Aogonek y -40 KPX Aogonek w -44 KPX Aogonek v -40 KPX Aogonek t -17 KPX Aogonek f -17 KPX Aogonek Y -40 KPX Aogonek W -40 KPX Aogonek V -49 KPX Aogonek T -54 KPX Cacute period -35 KPX Cacute comma -35 KPX Ccircumflex period -35 KPX Ccircumflex comma -35 KPX Cdotaccent period -35 KPX Cdotaccent comma -35 KPX Ccaron period -35 KPX Ccaron comma -35 KPX Dcaron V -17 KPX Dcaron period -35 KPX Dcaron hyphen 18 KPX Dcaron comma -35 KPX Dcroat V -17 KPX Dcroat period -35 KPX Dcroat hyphen 18 KPX Dcroat comma -35 KPX Ecaron hyphen 18 KPX Gbreve Yacute -17 KPX Gbreve Ydieresis -17 KPX Gbreve Y -17 KPX Gbreve period -35 KPX Gbreve hyphen 18 KPX Gbreve comma -35 KPX Lacute Ydieresis -63 KPX Lacute U -54 KPX Lacute T -81 KPX Lacute W -86 KPX Lacute V -118 KPX Lacute Y -63 KPX Lacute Tcaron -81 KPX Lacute Udieresis -54 KPX Lacute quotedblright -239 KPX Lacute Uacute -54 KPX Lacute ydieresis -17 KPX Lacute Uring -54 KPX Lacute quoteright -239 KPX Lacute Ugrave -54 KPX Lacute yacute -17 KPX Lacute y -17 KPX Lacute Ucircumflex -54 KPX Lacute Yacute -63 KPX Lcaron Ydieresis -63 KPX Lcaron U -54 KPX Lcaron T -81 KPX Lcaron W -86 KPX Lcaron V -118 KPX Lcaron Y -63 KPX Lcaron Tcaron -81 KPX Lcaron Udieresis -54 KPX Lcaron quotedblright -239 KPX Lcaron Uacute -54 KPX Lcaron ydieresis -17 KPX Lcaron Uring -54 KPX Lcaron quoteright -239 KPX Lcaron Ugrave -54 KPX Lcaron yacute -17 KPX Lcaron y -17 KPX Lcaron Ucircumflex -54 KPX Lcaron Yacute -63 KPX ldot l -110 KPX Lslash Uring -17 KPX Lslash Tcaron -81 KPX Lslash yacute -17 KPX Lslash Yacute -100 KPX Lslash Ugrave -17 KPX Lslash Ucircumflex -17 KPX Lslash Uacute -17 KPX Lslash Ydieresis -100 KPX Lslash ydieresis -17 KPX Lslash quoteright -239 KPX Lslash quotedblright -239 KPX Lslash Udieresis -17 KPX Lslash y -17 KPX Lslash Y -100 KPX Lslash W -86 KPX Lslash V -118 KPX Lslash U -17 KPX Lslash T -81 KPX Ncaron semicolon -35 KPX Ncaron colon -35 KPX Ncaron period -63 KPX Ncaron comma -63 KPX OE hyphen 18 KPX Racute oslash 18 KPX Racute aring 22 KPX Racute ae 22 KPX Racute agrave 22 KPX Racute Ydieresis -30 KPX Racute aacute 22 KPX Racute acircumflex 22 KPX Racute T -17 KPX Racute W -21 KPX Racute V -35 KPX Racute Y -30 KPX Racute adieresis 22 KPX Racute Tcaron -17 KPX Racute a 22 KPX Racute quotedblright -54 KPX Racute ydieresis -17 KPX Racute quoteright -54 KPX Racute yacute -17 KPX Racute atilde 22 KPX Racute y -17 KPX Racute Yacute -30 KPX racute comma -109 KPX racute period -109 KPX Rcaron Tcaron -17 KPX Rcaron yacute -17 KPX Rcaron Yacute -30 KPX Rcaron Ydieresis -30 KPX Rcaron ydieresis -17 KPX Rcaron quoteright -54 KPX Rcaron quotedblright -54 KPX Rcaron oslash 18 KPX Rcaron ae 22 KPX Rcaron aring 22 KPX Rcaron atilde 22 KPX Rcaron adieresis 22 KPX Rcaron acircumflex 22 KPX Rcaron agrave 22 KPX Rcaron aacute 22 KPX Rcaron y -17 KPX Rcaron a 22 KPX Rcaron Y -30 KPX Rcaron W -21 KPX Rcaron V -35 KPX Rcaron T -17 KPX rcaron period -109 KPX rcaron comma -109 KPX Scedilla Scedilla -17 KPX Scedilla Scaron -17 KPX Scedilla S -17 KPX Scedilla period -35 KPX Scedilla hyphen 36 KPX Scedilla comma -35 KPX Scaron Scedilla -17 KPX Scaron Scaron -17 KPX Scaron S -17 KPX Scaron period -35 KPX Scaron hyphen 36 KPX Scaron comma -35 KPX Tcaron Tcaron 18 KPX Tcaron ecaron -77 KPX Tcaron ccaron -77 KPX Tcaron cacute -77 KPX Tcaron scedilla -72 KPX Tcaron scaron -72 KPX Tcaron Aacute -54 KPX Tcaron Acircumflex -54 KPX Tcaron oe -77 KPX Tcaron Atilde -54 KPX Tcaron Agrave -54 KPX Tcaron oslash -77 KPX Tcaron ae -77 KPX Tcaron otilde -77 KPX Tcaron odieresis -77 KPX Tcaron ocircumflex -77 KPX Tcaron ograve -77 KPX Tcaron oacute -77 KPX Tcaron edieresis -77 KPX Tcaron ecircumflex -77 KPX Tcaron egrave -77 KPX Tcaron eacute -77 KPX Tcaron ccedilla -77 KPX Tcaron aring -77 KPX Tcaron atilde -77 KPX Tcaron adieresis -77 KPX Tcaron acircumflex -77 KPX Tcaron agrave -77 KPX Tcaron aacute -77 KPX Tcaron Adieresis -54 KPX Tcaron w -35 KPX Tcaron s -72 KPX Tcaron o -77 KPX Tcaron e -77 KPX Tcaron c -77 KPX Tcaron a -77 KPX Tcaron T 18 KPX Tcaron A -54 KPX Tcaron semicolon -35 KPX Tcaron colon -35 KPX Tcaron period -146 KPX Tcaron hyphen -128 KPX Tcaron comma -146 KPX Uring Aacute -30 KPX Uring Acircumflex -30 KPX Uring Atilde -30 KPX Uring Agrave -30 KPX Uring Adieresis -30 KPX Uring J -26 KPX Uring A -30 KPX Uring semicolon -35 KPX Uring colon -35 KPX Uring period -91 KPX Uring hyphen -17 KPX Uring comma -91 KPX wcircumflex comma -149 KPX wcircumflex period -133 KPX wcircumflex wcircumflex 127 KPX wcircumflex z 87 KPX wcircumflex y 100 KPX wcircumflex x 84 KPX wcircumflex w 81 KPX wcircumflex v 100 KPX wcircumflex u 70 KPX wcircumflex t 114 KPX wcircumflex s 75 KPX wcircumflex r 61 KPX wcircumflex q 47 KPX wcircumflex p 68 KPX wcircumflex o 41 KPX wcircumflex n 61 KPX wcircumflex m 61 KPX wcircumflex j 106 KPX wcircumflex i 107 KPX wcircumflex g 47 KPX wcircumflex f 107 KPX wcircumflex e 41 KPX wcircumflex d 47 KPX wcircumflex c 41 KPX wcircumflex a 53 KPX Ydieresis uring -86 KPX Ydieresis ecaron -86 KPX Ydieresis Ccaron -17 KPX Ydieresis Cacute -17 KPX Ydieresis Aacute -77 KPX Ydieresis Acircumflex -77 KPX Ydieresis oe -104 KPX Ydieresis Atilde -77 KPX Ydieresis Agrave -77 KPX Ydieresis oslash -86 KPX Ydieresis ae -95 KPX Ydieresis udieresis -86 KPX Ydieresis ucircumflex -86 KPX Ydieresis ugrave -86 KPX Ydieresis uacute -86 KPX Ydieresis otilde -86 KPX Ydieresis odieresis -86 KPX Ydieresis ocircumflex -86 KPX Ydieresis ograve -86 KPX Ydieresis oacute -86 KPX Ydieresis edieresis -86 KPX Ydieresis ecircumflex -86 KPX Ydieresis egrave -86 KPX Ydieresis eacute -86 KPX Ydieresis aring -77 KPX Ydieresis atilde -77 KPX Ydieresis adieresis -77 KPX Ydieresis acircumflex -77 KPX Ydieresis agrave -77 KPX Ydieresis aacute -77 KPX Ydieresis Ccedilla -17 KPX Ydieresis Adieresis -77 KPX Ydieresis u -86 KPX Ydieresis o -86 KPX Ydieresis i -17 KPX Ydieresis e -86 KPX Ydieresis a -77 KPX Ydieresis C -17 KPX Ydieresis A -77 KPX Ydieresis semicolon -123 KPX Ydieresis colon -123 KPX Ydieresis period -128 KPX Ydieresis hyphen -109 KPX Ydieresis comma -128 KPX Zcaron period -17 KPX Zcaron comma -17 KPX uni02BB Aacute -128 KPX uni02BB Acircumflex -128 KPX uni02BB Atilde -128 KPX uni02BB Agrave -128 KPX uni02BB AE -109 KPX uni02BB Adieresis -128 KPX uni02BB J 22 KPX uni02BB A -128 KPX uni2010 Tcaron -35 KPX uni2010 Yacute -109 KPX uni2010 Ydieresis -109 KPX uni2010 Y -109 KPX uni2010 X -35 KPX uni2010 W -54 KPX uni2010 V -72 KPX uni2010 T -35 KPX quoteleft Aacute -128 KPX quoteleft Acircumflex -128 KPX quoteleft Atilde -128 KPX quoteleft Agrave -128 KPX quoteleft AE -109 KPX quoteleft Adieresis -128 KPX quoteleft J 22 KPX quoteleft A -128 KPX quotedblleft Yacute 27 KPX quotedblleft Aacute -128 KPX quotedblleft Acircumflex -128 KPX quotedblleft Ydieresis 27 KPX quotedblleft Atilde -128 KPX quotedblleft Agrave -128 KPX quotedblleft AE -146 KPX quotedblleft Adieresis -128 KPX quotedblleft Y 27 KPX quotedblleft X 27 KPX quotedblleft W 27 KPX quotedblleft V 27 KPX quotedblleft J 22 KPX quotedblleft A -128 KPX quotedblbase Tcaron -35 KPX quotedblbase Yacute -35 KPX quotedblbase Ydieresis -35 KPX quotedblbase w -17 KPX quotedblbase v -17 KPX quotedblbase Y -35 KPX quotedblbase X 27 KPX quotedblbase W -35 KPX quotedblbase V -54 KPX quotedblbase T -35 KPX Circumflex period -35 KPX Circumflex comma -35 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Monospace-Bold.afm0100664000212600000240000010177610330505373016355 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:21 2005 FontName Monospace-Bold FullName Monospace Bold FamilyName Monospace Weight Bold Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle 0 IsFixedPitch true UnderlinePosition -221 UnderlineThickness 246 Version 1.15 EncodingScheme ISO10646-1 FontBBox -69 -505 711 1052 CapHeight 729 XHeight 546 Ascender 759 Descender -208 StartCharMetrics 707 C 0 ; WX 602 ; N .notdef ; B 50 -177 551 706 ; C 32 ; WX 602 ; N space ; B 0 0 0 0 ; C 33 ; WX 602 ; N exclam ; B 235 0 367 730 ; C 34 ; WX 602 ; N quotedbl ; B 112 458 488 730 ; C 35 ; WX 602 ; N numbersign ; B 0 0 601 718 ; C 36 ; WX 602 ; N dollar ; B 80 -147 534 760 ; C 37 ; WX 602 ; N percent ; B 16 0 596 700 ; C 38 ; WX 602 ; N ampersand ; B 18 -15 604 743 ; C 39 ; WX 602 ; N quotesingle ; B 237 458 363 730 ; C 40 ; WX 602 ; N parenleft ; B 187 -132 452 759 ; C 41 ; WX 602 ; N parenright ; B 150 -132 416 759 ; C 42 ; WX 602 ; N asterisk ; B 59 277 542 743 ; C 43 ; WX 602 ; N plus ; B 32 44 569 583 ; C 44 ; WX 602 ; N comma ; B 176 -141 378 180 ; C 45 ; WX 602 ; N hyphen ; B 146 216 456 359 ; C 46 ; WX 602 ; N period ; B 219 0 382 180 ; C 47 ; WX 602 ; N slash ; B 55 -93 547 730 ; C 48 ; WX 602 ; N zero ; B 60 -15 542 743 ; C 49 ; WX 602 ; N one ; B 91 0 555 730 ; C 50 ; WX 602 ; N two ; B 56 0 520 743 ; C 51 ; WX 602 ; N three ; B 61 -15 538 743 ; C 52 ; WX 602 ; N four ; B 49 0 558 730 ; C 53 ; WX 602 ; N five ; B 69 -15 535 730 ; C 54 ; WX 602 ; N six ; B 63 -16 548 742 ; C 55 ; WX 602 ; N seven ; B 65 0 527 730 ; C 56 ; WX 602 ; N eight ; B 62 -15 540 743 ; C 57 ; WX 602 ; N nine ; B 54 -20 539 736 ; C 58 ; WX 602 ; N colon ; B 219 0 382 520 ; C 59 ; WX 602 ; N semicolon ; B 181 -141 382 520 ; C 60 ; WX 602 ; N less ; B 42 53 560 575 ; C 61 ; WX 602 ; N equal ; B 42 144 560 482 ; C 62 ; WX 602 ; N greater ; B 42 53 560 575 ; C 63 ; WX 602 ; N question ; B 113 0 521 743 ; C 64 ; WX 602 ; N at ; B 2 -156 566 682 ; C 65 ; WX 602 ; N A ; B 16 0 586 730 ; C 66 ; WX 602 ; N B ; B 61 0 566 730 ; C 67 ; WX 602 ; N C ; B 74 -15 528 743 ; C 68 ; WX 602 ; N D ; B 66 0 558 730 ; C 69 ; WX 602 ; N E ; B 82 0 537 730 ; C 70 ; WX 602 ; N F ; B 88 0 543 730 ; C 71 ; WX 602 ; N G ; B 57 -15 552 743 ; C 72 ; WX 602 ; N H ; B 66 0 536 730 ; C 73 ; WX 602 ; N I ; B 83 0 519 730 ; C 74 ; WX 602 ; N J ; B 53 -15 493 730 ; C 75 ; WX 602 ; N K ; B 57 0 599 730 ; C 76 ; WX 602 ; N L ; B 109 0 563 730 ; C 77 ; WX 602 ; N M ; B 41 0 561 730 ; C 78 ; WX 602 ; N N ; B 58 0 543 730 ; C 79 ; WX 602 ; N O ; B 44 -15 558 743 ; C 80 ; WX 602 ; N P ; B 79 0 561 730 ; C 81 ; WX 602 ; N Q ; B 44 -138 558 743 ; C 82 ; WX 602 ; N R ; B 64 0 603 730 ; C 83 ; WX 602 ; N S ; B 62 -15 542 743 ; C 84 ; WX 602 ; N T ; B 43 0 559 730 ; C 85 ; WX 602 ; N U ; B 51 -15 550 730 ; C 86 ; WX 602 ; N V ; B 27 0 575 730 ; C 87 ; WX 602 ; N W ; B 0 0 603 730 ; C 88 ; WX 602 ; N X ; B 13 0 589 730 ; C 89 ; WX 602 ; N Y ; B 3 0 599 730 ; C 90 ; WX 602 ; N Z ; B 56 0 567 730 ; C 91 ; WX 602 ; N bracketleft ; B 206 -132 455 760 ; C 92 ; WX 602 ; N backslash ; B 54 -93 547 730 ; C 93 ; WX 602 ; N bracketright ; B 147 -132 396 760 ; C 94 ; WX 602 ; N asciicircum ; B 27 457 575 730 ; C 95 ; WX 602 ; N underscore ; B 0 -236 603 -143 ; C 96 ; WX 602 ; N grave ; B 97 616 374 800 ; C 97 ; WX 602 ; N a ; B 45 -15 542 561 ; C 98 ; WX 602 ; N b ; B 73 -15 559 760 ; C 99 ; WX 602 ; N c ; B 82 -15 519 562 ; C 100 ; WX 602 ; N d ; B 43 -15 529 760 ; C 101 ; WX 602 ; N e ; B 44 -15 562 561 ; C 102 ; WX 602 ; N f ; B 84 0 529 760 ; C 103 ; WX 602 ; N g ; B 47 -208 536 562 ; C 104 ; WX 602 ; N h ; B 83 0 523 760 ; C 105 ; WX 602 ; N i ; B 69 0 569 813 ; C 106 ; WX 602 ; N j ; B 69 -208 416 813 ; C 107 ; WX 602 ; N k ; B 84 0 585 760 ; C 108 ; WX 602 ; N l ; B 43 0 535 760 ; C 109 ; WX 602 ; N m ; B 40 0 564 561 ; C 110 ; WX 602 ; N n ; B 83 0 523 561 ; C 111 ; WX 602 ; N o ; B 47 -15 555 561 ; C 112 ; WX 602 ; N p ; B 73 -209 559 561 ; C 113 ; WX 602 ; N q ; B 43 -209 529 561 ; C 114 ; WX 602 ; N r ; B 142 0 563 561 ; C 115 ; WX 602 ; N s ; B 83 -15 521 561 ; C 116 ; WX 602 ; N t ; B 54 0 524 703 ; C 117 ; WX 602 ; N u ; B 78 -15 519 547 ; C 118 ; WX 602 ; N v ; B 39 0 563 547 ; C 119 ; WX 602 ; N w ; B 0 0 603 547 ; C 120 ; WX 602 ; N x ; B 26 0 576 547 ; C 121 ; WX 602 ; N y ; B 28 -208 575 547 ; C 122 ; WX 602 ; N z ; B 79 0 528 547 ; C 123 ; WX 602 ; N braceleft ; B 85 -164 515 760 ; C 124 ; WX 602 ; N bar ; B 245 -236 356 765 ; C 125 ; WX 602 ; N braceright ; B 87 -164 517 760 ; C 126 ; WX 602 ; N asciitilde ; B 42 226 560 396 ; C 160 ; WX 602 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 602 ; N exclamdown ; B 235 0 367 730 ; C 162 ; WX 602 ; N cent ; B 71 -153 506 700 ; C 163 ; WX 602 ; N sterling ; B 58 0 548 743 ; C 164 ; WX 602 ; N currency ; B 90 85 546 542 ; C 165 ; WX 602 ; N yen ; B 3 0 599 730 ; C 166 ; WX 602 ; N brokenbar ; B 245 -171 356 700 ; C 167 ; WX 602 ; N section ; B 83 -96 519 743 ; C 168 ; WX 602 ; N dieresis ; B 146 653 456 774 ; C 169 ; WX 602 ; N copyright ; B 0 61 603 664 ; C 170 ; WX 602 ; N ordfeminine ; B 125 208 480 743 ; C 171 ; WX 602 ; N guillemotleft ; B 58 68 509 518 ; C 172 ; WX 602 ; N logicalnot ; B 42 176 560 439 ; C 173 ; WX 602 ; N sfthyphen ; B 146 216 456 359 ; C 174 ; WX 602 ; N registered ; B 0 61 603 664 ; C 175 ; WX 602 ; N macron ; B 146 667 456 760 ; C 176 ; WX 602 ; N degree ; B 138 416 463 743 ; C 177 ; WX 602 ; N plusminus ; B 42 0 560 627 ; C 178 ; WX 602 ; N twosuperior ; B 133 326 459 743 ; C 179 ; WX 602 ; N threesuperior ; B 140 318 471 743 ; C 180 ; WX 602 ; N acute ; B 229 616 505 800 ; C 181 ; WX 602 ; N mu ; B 84 -209 581 547 ; C 182 ; WX 602 ; N paragraph ; B 34 -97 521 730 ; C 183 ; WX 602 ; N periodcentered ; B 219 258 382 438 ; C 184 ; WX 602 ; N cedilla ; B 179 -196 400 0 ; C 185 ; WX 602 ; N onesuperior ; B 152 326 470 734 ; C 186 ; WX 602 ; N ordmasculine ; B 133 208 488 743 ; C 187 ; WX 602 ; N guillemotright ; B 94 68 545 518 ; C 188 ; WX 602 ; N onequarter ; B 22 -132 559 811 ; C 189 ; WX 602 ; N onehalf ; B 22 -132 559 811 ; C 190 ; WX 602 ; N threequarters ; B 22 -132 559 819 ; C 191 ; WX 602 ; N questiondown ; B 85 -14 492 730 ; C 192 ; WX 602 ; N Agrave ; B 16 0 586 928 ; C 193 ; WX 602 ; N Aacute ; B 16 0 586 928 ; C 194 ; WX 602 ; N Acircumflex ; B 16 0 586 928 ; C 195 ; WX 602 ; N Atilde ; B 16 0 586 929 ; C 196 ; WX 602 ; N Adieresis ; B 16 0 586 928 ; C 197 ; WX 602 ; N Aring ; B 16 0 586 929 ; C 198 ; WX 602 ; N AE ; B 0 0 577 730 ; C 199 ; WX 602 ; N Ccedilla ; B 74 -196 528 743 ; C 200 ; WX 602 ; N Egrave ; B 82 0 537 928 ; C 201 ; WX 602 ; N Eacute ; B 82 0 537 928 ; C 202 ; WX 602 ; N Ecircumflex ; B 82 0 537 928 ; C 203 ; WX 602 ; N Edieresis ; B 82 0 537 928 ; C 204 ; WX 602 ; N Igrave ; B 83 0 519 928 ; C 205 ; WX 602 ; N Iacute ; B 83 0 519 928 ; C 206 ; WX 602 ; N Icircumflex ; B 83 0 519 928 ; C 207 ; WX 602 ; N Idieresis ; B 83 0 519 928 ; C 208 ; WX 602 ; N Eth ; B 0 0 558 730 ; C 209 ; WX 602 ; N Ntilde ; B 58 0 543 929 ; C 210 ; WX 602 ; N Ograve ; B 44 -15 558 928 ; C 211 ; WX 602 ; N Oacute ; B 44 -15 558 928 ; C 212 ; WX 602 ; N Ocircumflex ; B 44 -15 558 928 ; C 213 ; WX 602 ; N Otilde ; B 44 -15 558 929 ; C 214 ; WX 602 ; N Odieresis ; B 44 -15 558 928 ; C 215 ; WX 602 ; N multiply ; B 58 71 543 557 ; C 216 ; WX 602 ; N Oslash ; B -3 -31 597 762 ; C 217 ; WX 602 ; N Ugrave ; B 51 -15 550 928 ; C 218 ; WX 602 ; N Uacute ; B 51 -15 550 928 ; C 219 ; WX 602 ; N Ucircumflex ; B 51 -15 550 928 ; C 220 ; WX 602 ; N Udieresis ; B 51 -15 550 928 ; C 221 ; WX 602 ; N Yacute ; B 3 0 599 928 ; C 222 ; WX 602 ; N Thorn ; B 79 0 561 730 ; C 223 ; WX 602 ; N germandbls ; B 62 -15 574 760 ; C 224 ; WX 602 ; N agrave ; B 45 -15 542 800 ; C 225 ; WX 602 ; N aacute ; B 45 -15 542 800 ; C 226 ; WX 602 ; N acircumflex ; B 45 -15 542 800 ; C 227 ; WX 602 ; N atilde ; B 45 -15 542 778 ; C 228 ; WX 602 ; N adieresis ; B 45 -15 542 774 ; C 229 ; WX 602 ; N aring ; B 45 -15 542 889 ; C 230 ; WX 602 ; N ae ; B 6 -15 581 561 ; C 231 ; WX 602 ; N ccedilla ; B 82 -196 519 562 ; C 232 ; WX 602 ; N egrave ; B 44 -15 562 800 ; C 233 ; WX 602 ; N eacute ; B 44 -15 562 800 ; C 234 ; WX 602 ; N ecircumflex ; B 44 -15 562 800 ; C 235 ; WX 602 ; N edieresis ; B 44 -15 562 774 ; C 236 ; WX 602 ; N igrave ; B 69 0 569 800 ; C 237 ; WX 602 ; N iacute ; B 69 0 569 800 ; C 238 ; WX 602 ; N icircumflex ; B 69 0 569 800 ; C 239 ; WX 602 ; N idieresis ; B 69 0 569 774 ; C 240 ; WX 602 ; N eth ; B 47 -15 550 766 ; C 241 ; WX 602 ; N ntilde ; B 83 0 523 778 ; C 242 ; WX 602 ; N ograve ; B 47 -15 555 801 ; C 243 ; WX 602 ; N oacute ; B 47 -15 555 801 ; C 244 ; WX 602 ; N ocircumflex ; B 47 -15 555 801 ; C 245 ; WX 602 ; N otilde ; B 47 -15 555 762 ; C 246 ; WX 602 ; N odieresis ; B 47 -15 555 763 ; C 247 ; WX 602 ; N divide ; B 32 41 569 585 ; C 248 ; WX 602 ; N oslash ; B 12 -58 587 604 ; C 249 ; WX 602 ; N ugrave ; B 78 -15 519 800 ; C 250 ; WX 602 ; N uacute ; B 78 -15 519 800 ; C 251 ; WX 602 ; N ucircumflex ; B 78 -15 519 800 ; C 252 ; WX 602 ; N udieresis ; B 78 -15 519 774 ; C 253 ; WX 602 ; N yacute ; B 28 -208 575 800 ; C 254 ; WX 602 ; N thorn ; B 73 -209 559 760 ; C 255 ; WX 602 ; N ydieresis ; B 28 -208 575 774 ; C -1 ; WX 602 ; N Amacron ; B 16 0 586 914 ; C -1 ; WX 602 ; N amacron ; B 45 -15 542 763 ; C -1 ; WX 602 ; N Abreve ; B 16 0 586 932 ; C -1 ; WX 602 ; N abreve ; B 45 -15 542 780 ; C -1 ; WX 602 ; N Aogonek ; B 16 -196 601 730 ; C -1 ; WX 602 ; N aogonek ; B 45 -196 553 561 ; C -1 ; WX 602 ; N Cacute ; B 74 -15 532 928 ; C -1 ; WX 602 ; N cacute ; B 82 -15 555 800 ; C -1 ; WX 602 ; N Ccircumflex ; B 74 -15 562 928 ; C -1 ; WX 602 ; N ccircumflex ; B 82 -15 537 800 ; C -1 ; WX 602 ; N Cdotaccent ; B 74 -15 528 928 ; C -1 ; WX 602 ; N cdotaccent ; B 82 -15 519 774 ; C -1 ; WX 602 ; N Ccaron ; B 74 -15 552 928 ; C -1 ; WX 602 ; N ccaron ; B 82 -15 535 800 ; C -1 ; WX 602 ; N Dcaron ; B 66 0 558 937 ; C -1 ; WX 602 ; N dcaron ; B 43 -15 711 760 ; C -1 ; WX 602 ; N Dcroat ; B 0 0 558 730 ; C -1 ; WX 602 ; N dcroat ; B 43 -15 601 760 ; C -1 ; WX 602 ; N Emacron ; B 82 0 537 914 ; C -1 ; WX 602 ; N emacron ; B 44 -15 562 759 ; C -1 ; WX 602 ; N Ebreve ; B 82 0 537 928 ; C -1 ; WX 602 ; N ebreve ; B 44 -15 562 785 ; C -1 ; WX 602 ; N Edotaccent ; B 82 0 537 928 ; C -1 ; WX 602 ; N edotaccent ; B 44 -15 562 740 ; C -1 ; WX 602 ; N Eogonek ; B 82 -196 537 730 ; C -1 ; WX 602 ; N eogonek ; B 44 -196 562 561 ; C -1 ; WX 602 ; N Ecaron ; B 82 0 537 928 ; C -1 ; WX 602 ; N ecaron ; B 44 -15 562 803 ; C -1 ; WX 602 ; N Gcircumflex ; B 57 -15 552 928 ; C -1 ; WX 602 ; N gcircumflex ; B 47 -208 536 800 ; C -1 ; WX 602 ; N Gbreve ; B 57 -15 552 928 ; C -1 ; WX 602 ; N gbreve ; B 47 -208 536 785 ; C -1 ; WX 602 ; N Gdotaccent ; B 57 -15 552 928 ; C -1 ; WX 602 ; N gdotaccent ; B 47 -208 536 774 ; C -1 ; WX 602 ; N Gcommaaccent ; B 57 -224 552 743 ; C -1 ; WX 602 ; N gcommaaccent ; B 47 -208 536 765 ; C -1 ; WX 602 ; N Hcircumflex ; B 66 0 536 928 ; C -1 ; WX 602 ; N hcircumflex ; B -42 0 523 928 ; C -1 ; WX 602 ; N Hbar ; B 1 0 601 730 ; C -1 ; WX 602 ; N hbar ; B 5 0 523 760 ; C -1 ; WX 602 ; N Itilde ; B 83 0 519 929 ; C -1 ; WX 602 ; N itilde ; B 69 0 569 778 ; C -1 ; WX 602 ; N Imacron ; B 83 0 519 914 ; C -1 ; WX 602 ; N imacron ; B 69 0 569 764 ; C -1 ; WX 602 ; N Ibreve ; B 83 0 519 928 ; C -1 ; WX 602 ; N ibreve ; B 69 0 569 785 ; C -1 ; WX 602 ; N Iogonek ; B 83 -196 519 730 ; C -1 ; WX 602 ; N iogonek ; B 69 -196 569 813 ; C -1 ; WX 602 ; N Idotaccent ; B 83 0 519 928 ; C -1 ; WX 602 ; N dotlessi ; B 69 0 569 547 ; C -1 ; WX 602 ; N IJ ; B -5 -13 601 731 ; C -1 ; WX 602 ; N ij ; B 4 -212 603 813 ; C -1 ; WX 602 ; N Jcircumflex ; B 53 -15 517 928 ; C -1 ; WX 602 ; N jcircumflex ; B 69 -208 485 800 ; C -1 ; WX 602 ; N Kcommaaccent ; B 57 -209 599 730 ; C -1 ; WX 602 ; N kcommaaccent ; B 84 -209 585 760 ; C -1 ; WX 602 ; N kgreenlandic ; B 84 0 585 547 ; C -1 ; WX 602 ; N Lacute ; B 109 0 563 928 ; C -1 ; WX 602 ; N lacute ; B 43 0 535 928 ; C -1 ; WX 602 ; N Lcommaaccent ; B 109 -209 563 730 ; C -1 ; WX 602 ; N lcommaaccent ; B 43 -209 535 760 ; C -1 ; WX 602 ; N Lcaron ; B 109 0 563 730 ; C -1 ; WX 602 ; N lcaron ; B 43 0 582 760 ; C -1 ; WX 602 ; N Ldot ; B 109 0 572 730 ; C -1 ; WX 602 ; N ldot ; B 43 0 598 760 ; C -1 ; WX 602 ; N Lslash ; B -20 0 563 730 ; C -1 ; WX 602 ; N lslash ; B 18 0 545 760 ; C -1 ; WX 602 ; N Nacute ; B 58 0 543 928 ; C -1 ; WX 602 ; N nacute ; B 83 0 523 804 ; C -1 ; WX 602 ; N Ncommaaccent ; B 58 -209 543 730 ; C -1 ; WX 602 ; N ncommaaccent ; B 83 -209 523 561 ; C -1 ; WX 602 ; N Ncaron ; B 58 0 543 928 ; C -1 ; WX 602 ; N ncaron ; B 83 0 523 800 ; C -1 ; WX 602 ; N napostrophe ; B -54 0 601 760 ; C -1 ; WX 602 ; N Eng ; B 52 -208 549 730 ; C -1 ; WX 602 ; N eng ; B 83 -208 523 561 ; C -1 ; WX 602 ; N Omacron ; B 44 -15 558 914 ; C -1 ; WX 602 ; N omacron ; B 47 -15 555 763 ; C -1 ; WX 602 ; N Obreve ; B 44 -15 558 928 ; C -1 ; WX 602 ; N obreve ; B 47 -15 555 785 ; C -1 ; WX 602 ; N Ohungarumlaut ; B 44 -15 558 928 ; C -1 ; WX 602 ; N ohungarumlaut ; B 47 -15 555 800 ; C -1 ; WX 602 ; N OE ; B 33 0 595 730 ; C -1 ; WX 602 ; N oe ; B 6 -15 591 561 ; C -1 ; WX 602 ; N Racute ; B 64 0 603 928 ; C -1 ; WX 602 ; N racute ; B 142 0 580 804 ; C -1 ; WX 602 ; N Rcommaaccent ; B 64 -209 603 730 ; C -1 ; WX 602 ; N rcommaaccent ; B 123 -209 563 561 ; C -1 ; WX 602 ; N Rcaron ; B 64 0 603 928 ; C -1 ; WX 602 ; N rcaron ; B 142 0 563 800 ; C -1 ; WX 602 ; N Sacute ; B 62 -15 542 928 ; C -1 ; WX 602 ; N sacute ; B 83 -15 521 804 ; C -1 ; WX 602 ; N Scircumflex ; B 62 -15 542 928 ; C -1 ; WX 602 ; N scircumflex ; B 83 -15 521 800 ; C -1 ; WX 602 ; N Scedilla ; B 62 -196 542 743 ; C -1 ; WX 602 ; N scedilla ; B 83 -196 521 561 ; C -1 ; WX 602 ; N Scaron ; B 62 -15 542 928 ; C -1 ; WX 602 ; N scaron ; B 83 -15 521 800 ; C -1 ; WX 602 ; N Tcommaaccent ; B 43 -196 559 730 ; C -1 ; WX 602 ; N tcommaaccent ; B 54 -196 524 703 ; C -1 ; WX 602 ; N Tcaron ; B 43 0 559 934 ; C -1 ; WX 602 ; N tcaron ; B 54 0 582 824 ; C -1 ; WX 602 ; N Tbar ; B 43 0 559 730 ; C -1 ; WX 602 ; N tbar ; B 54 0 524 703 ; C -1 ; WX 602 ; N Utilde ; B 51 -15 550 929 ; C -1 ; WX 602 ; N utilde ; B 78 -15 519 778 ; C -1 ; WX 602 ; N Umacron ; B 51 -15 550 914 ; C -1 ; WX 602 ; N umacron ; B 78 -15 519 763 ; C -1 ; WX 602 ; N Ubreve ; B 51 -15 550 928 ; C -1 ; WX 602 ; N ubreve ; B 78 -15 519 785 ; C -1 ; WX 602 ; N Uring ; B 51 -15 550 1052 ; C -1 ; WX 602 ; N uring ; B 78 -15 519 889 ; C -1 ; WX 602 ; N Uhungarumlaut ; B 51 -15 550 928 ; C -1 ; WX 602 ; N uhungarumlaut ; B 78 -15 530 800 ; C -1 ; WX 602 ; N Uogonek ; B 51 -204 550 730 ; C -1 ; WX 602 ; N uogonek ; B 78 -196 600 547 ; C -1 ; WX 602 ; N Wcircumflex ; B 0 0 603 931 ; C -1 ; WX 602 ; N wcircumflex ; B 0 0 603 804 ; C -1 ; WX 602 ; N Ycircumflex ; B 3 0 599 931 ; C -1 ; WX 602 ; N ycircumflex ; B 28 -208 575 804 ; C -1 ; WX 602 ; N Ydieresis ; B 3 0 599 928 ; C -1 ; WX 602 ; N Zacute ; B 56 0 567 928 ; C -1 ; WX 602 ; N zacute ; B 79 0 528 804 ; C -1 ; WX 602 ; N Zdotaccent ; B 56 0 567 953 ; C -1 ; WX 602 ; N zdotaccent ; B 79 0 528 774 ; C -1 ; WX 602 ; N Zcaron ; B 56 0 567 928 ; C -1 ; WX 602 ; N zcaron ; B 79 0 528 800 ; C -1 ; WX 602 ; N longs ; B 84 0 529 760 ; C -1 ; WX 602 ; N uni0186 ; B 74 -15 528 743 ; C -1 ; WX 602 ; N uni0190 ; B 61 -15 538 743 ; C -1 ; WX 602 ; N florin ; B 5 -209 563 760 ; C -1 ; WX 602 ; N uni0194 ; B 16 -142 586 730 ; C -1 ; WX 602 ; N uni01CD ; B 16 0 586 928 ; C -1 ; WX 602 ; N uni01CE ; B 45 -15 542 800 ; C -1 ; WX 602 ; N uni01CF ; B 83 0 519 928 ; C -1 ; WX 602 ; N uni01D0 ; B 69 0 569 800 ; C -1 ; WX 602 ; N uni01D1 ; B 44 -15 558 928 ; C -1 ; WX 602 ; N uni01D2 ; B 47 -15 555 800 ; C -1 ; WX 602 ; N uni01D3 ; B 51 -15 550 928 ; C -1 ; WX 602 ; N uni01D4 ; B 78 -15 519 800 ; C -1 ; WX 602 ; N uni01D6 ; B 78 -15 519 914 ; C -1 ; WX 602 ; N uni01DF ; B 45 -15 542 914 ; C -1 ; WX 602 ; N uni01E2 ; B 0 0 577 914 ; C -1 ; WX 602 ; N uni01E3 ; B 6 -15 581 759 ; C -1 ; WX 602 ; N uni01EA ; B 44 -204 558 743 ; C -1 ; WX 602 ; N uni01EB ; B 47 -204 555 561 ; C -1 ; WX 602 ; N uni01EC ; B 44 -204 558 914 ; C -1 ; WX 602 ; N uni01ED ; B 47 -204 555 763 ; C -1 ; WX 602 ; N Scommaaccent ; B 62 -229 542 743 ; C -1 ; WX 602 ; N scommaaccent ; B 83 -229 521 561 ; C -1 ; WX 602 ; N uni021A ; B 43 -229 559 730 ; C -1 ; WX 602 ; N uni021B ; B 54 -229 524 703 ; C -1 ; WX 602 ; N uni022B ; B 47 -15 555 914 ; C -1 ; WX 602 ; N uni022D ; B 47 -15 555 914 ; C -1 ; WX 602 ; N uni022E ; B 44 -15 558 928 ; C -1 ; WX 602 ; N uni022F ; B 47 -15 555 774 ; C -1 ; WX 602 ; N uni0231 ; B 47 -15 555 914 ; C -1 ; WX 602 ; N uni0232 ; B 3 0 599 914 ; C -1 ; WX 602 ; N uni0233 ; B 28 -208 575 763 ; C -1 ; WX 602 ; N dotlessj ; B 69 -208 416 547 ; C -1 ; WX 602 ; N uni0250 ; B 53 -15 549 561 ; C -1 ; WX 602 ; N uni0251 ; B 58 -15 544 561 ; C -1 ; WX 602 ; N uni0252 ; B 58 -15 544 561 ; C -1 ; WX 602 ; N uni0253 ; B 58 -15 544 760 ; C -1 ; WX 602 ; N uni0254 ; B 83 -15 520 562 ; C -1 ; WX 602 ; N uni0255 ; B 79 -69 523 562 ; C -1 ; WX 602 ; N uni0256 ; B 64 -162 538 760 ; C -1 ; WX 602 ; N uni0257 ; B 63 -15 539 760 ; C -1 ; WX 602 ; N uni0258 ; B 42 -15 560 561 ; C -1 ; WX 602 ; N uni0259 ; B 42 -15 560 561 ; C -1 ; WX 602 ; N uni025A ; B 3 -15 599 561 ; C -1 ; WX 602 ; N uni025B ; B 49 -11 553 561 ; C -1 ; WX 602 ; N uni025C ; B 49 -11 553 561 ; C -1 ; WX 602 ; N uni025D ; B 23 -11 579 561 ; C -1 ; WX 602 ; N uni025E ; B 52 -21 550 560 ; C -1 ; WX 602 ; N uni025F ; B 111 -216 491 547 ; C -1 ; WX 602 ; N uni0260 ; B 8 -209 594 760 ; C -1 ; WX 602 ; N uni0261 ; B 60 -209 542 547 ; C -1 ; WX 602 ; N uni0262 ; B 75 0 527 547 ; C -1 ; WX 602 ; N uni0263 ; B 47 -203 555 555 ; C -1 ; WX 602 ; N uni0264 ; B 47 -59 555 547 ; C -1 ; WX 602 ; N uni0265 ; B 81 -214 521 546 ; C -1 ; WX 602 ; N uni0266 ; B 81 0 521 760 ; C -1 ; WX 602 ; N uni0267 ; B 81 -209 521 760 ; C -1 ; WX 602 ; N uni0268 ; B 51 0 551 760 ; C -1 ; WX 602 ; N uni0269 ; B 70 -2 532 547 ; C -1 ; WX 602 ; N uni026A ; B 51 0 551 547 ; C -1 ; WX 602 ; N uni026B ; B 42 -1 560 759 ; C -1 ; WX 602 ; N uni026C ; B 52 0 550 760 ; C -1 ; WX 602 ; N uni026D ; B 55 -217 546 760 ; C -1 ; WX 602 ; N uni026E ; B 12 -215 590 760 ; C -1 ; WX 602 ; N uni026F ; B 39 -14 563 547 ; C -1 ; WX 602 ; N uni0270 ; B 39 -209 563 547 ; C -1 ; WX 602 ; N uni0271 ; B 39 -209 563 561 ; C -1 ; WX 602 ; N uni0272 ; B 31 -216 571 561 ; C -1 ; WX 602 ; N uni0273 ; B 33 -216 569 561 ; C -1 ; WX 602 ; N uni0274 ; B 58 0 544 547 ; C -1 ; WX 602 ; N uni0275 ; B 47 -15 555 561 ; C -1 ; WX 602 ; N uni0276 ; B 36 -1 566 548 ; C -1 ; WX 602 ; N uni0277 ; B 40 0 563 575 ; C -1 ; WX 602 ; N uni0278 ; B 9 -209 593 762 ; C -1 ; WX 602 ; N uni0279 ; B 90 -14 511 547 ; C -1 ; WX 602 ; N uni027A ; B 90 -14 511 759 ; C -1 ; WX 602 ; N uni027B ; B 37 -209 565 547 ; C -1 ; WX 602 ; N uni027C ; B 90 -209 511 561 ; C -1 ; WX 602 ; N uni027D ; B 90 -209 511 561 ; C -1 ; WX 602 ; N uni027E ; B 66 0 537 547 ; C -1 ; WX 602 ; N uni027F ; B 66 0 537 547 ; C -1 ; WX 602 ; N uni0280 ; B 50 0 551 547 ; C -1 ; WX 602 ; N uni0281 ; B 31 0 571 547 ; C -1 ; WX 602 ; N uni0282 ; B 82 -209 520 561 ; C -1 ; WX 602 ; N uni0283 ; B 44 -208 558 760 ; C -1 ; WX 602 ; N uni0284 ; B 44 -208 558 760 ; C -1 ; WX 602 ; N uni0285 ; B 44 -208 558 760 ; C -1 ; WX 602 ; N uni0286 ; B 28 -208 558 760 ; C -1 ; WX 602 ; N uni0287 ; B 66 -156 537 547 ; C -1 ; WX 602 ; N uni0288 ; B 66 -209 537 703 ; C -1 ; WX 602 ; N uni0289 ; B 42 -15 559 547 ; C -1 ; WX 602 ; N uni028A ; B 41 -51 561 547 ; C -1 ; WX 602 ; N uni028B ; B 41 -2 562 547 ; C -1 ; WX 602 ; N uni028C ; B 39 0 563 547 ; C -1 ; WX 602 ; N uni028D ; B 0 0 603 547 ; C -1 ; WX 602 ; N uni028E ; B 28 0 574 754 ; C -1 ; WX 602 ; N uni028F ; B 33 0 569 547 ; C -1 ; WX 602 ; N uni0290 ; B 22 -209 580 547 ; C -1 ; WX 602 ; N uni0291 ; B 57 -55 545 547 ; C -1 ; WX 602 ; N uni0292 ; B 53 -215 549 547 ; C -1 ; WX 602 ; N uni0293 ; B 49 -215 553 547 ; C -1 ; WX 602 ; N uni0294 ; B 81 0 521 760 ; C -1 ; WX 602 ; N uni0295 ; B 81 0 521 760 ; C -1 ; WX 602 ; N uni0296 ; B 81 -1 521 760 ; C -1 ; WX 602 ; N uni0297 ; B 81 -209 521 760 ; C -1 ; WX 602 ; N uni0298 ; B 26 -28 576 583 ; C -1 ; WX 602 ; N uni0299 ; B 58 0 544 547 ; C -1 ; WX 602 ; N uni029A ; B 52 -21 550 560 ; C -1 ; WX 602 ; N uni029B ; B 29 0 573 760 ; C -1 ; WX 602 ; N uni029C ; B 58 0 544 547 ; C -1 ; WX 602 ; N uni029D ; B 45 -208 557 813 ; C -1 ; WX 602 ; N uni029E ; B 50 -209 551 547 ; C -1 ; WX 602 ; N uni029F ; B 114 0 488 547 ; C -1 ; WX 602 ; N uni02A0 ; B 64 -209 538 760 ; C -1 ; WX 602 ; N uni02A1 ; B 71 0 531 760 ; C -1 ; WX 602 ; N uni02A2 ; B 71 0 531 760 ; C -1 ; WX 602 ; N uni02A3 ; B 24 -15 578 760 ; C -1 ; WX 602 ; N uni02A4 ; B 11 -219 591 756 ; C -1 ; WX 602 ; N uni02A5 ; B 13 -55 589 760 ; C -1 ; WX 602 ; N uni02A6 ; B 32 -15 570 703 ; C -1 ; WX 602 ; N uni02A7 ; B 66 -208 536 760 ; C -1 ; WX 602 ; N uni02A8 ; B 39 -69 563 703 ; C -1 ; WX 602 ; N uni02A9 ; B 36 -208 566 760 ; C -1 ; WX 602 ; N uni02AA ; B 25 -15 577 760 ; C -1 ; WX 602 ; N uni02AB ; B 22 -3 580 760 ; C -1 ; WX 602 ; N uni02AC ; B 27 0 575 641 ; C -1 ; WX 602 ; N uni02AD ; B 139 86 463 641 ; C -1 ; WX 602 ; N uni02AE ; B 27 -214 576 760 ; C -1 ; WX 602 ; N uni02AF ; B 39 -209 563 760 ; C -1 ; WX 602 ; N uni02B0 ; B 160 462 442 889 ; C -1 ; WX 602 ; N uni02B1 ; B 160 462 442 889 ; C -1 ; WX 602 ; N uni02B2 ; B 190 313 412 885 ; C -1 ; WX 602 ; N uni02B3 ; B 166 462 436 777 ; C -1 ; WX 602 ; N uni02B4 ; B 166 455 436 770 ; C -1 ; WX 602 ; N uni02B5 ; B 132 346 470 770 ; C -1 ; WX 602 ; N uni02B6 ; B 128 462 474 770 ; C -1 ; WX 602 ; N uni02B7 ; B 108 462 494 770 ; C -1 ; WX 602 ; N uni02B8 ; B 126 347 476 770 ; C -1 ; WX 602 ; N uni02BB ; B 210 440 413 760 ; C -1 ; WX 602 ; N afii57929 ; B 210 440 413 760 ; C -1 ; WX 602 ; N uni02C0 ; B 160 462 442 889 ; C -1 ; WX 602 ; N uni02C1 ; B 160 462 442 889 ; C -1 ; WX 602 ; N circumflex ; B 117 616 485 800 ; C -1 ; WX 602 ; N caron ; B 117 616 485 800 ; C -1 ; WX 602 ; N uni02D0 ; B 200 0 402 547 ; C -1 ; WX 602 ; N uni02D1 ; B 200 361 402 547 ; C -1 ; WX 602 ; N breve ; B 137 639 465 785 ; C -1 ; WX 602 ; N dotaccent ; B 233 653 369 774 ; C -1 ; WX 602 ; N ring ; B 162 609 440 889 ; C -1 ; WX 602 ; N ogonek ; B 217 -196 427 0 ; C -1 ; WX 602 ; N tilde ; B 130 638 472 778 ; C -1 ; WX 602 ; N hungarumlaut ; B 145 616 530 800 ; C -1 ; WX 602 ; N uni02E0 ; B 139 352 463 777 ; C -1 ; WX 602 ; N uni02E1 ; B 144 462 459 889 ; C -1 ; WX 602 ; N uni02E2 ; B 161 455 441 777 ; C -1 ; WX 602 ; N uni02E3 ; B 125 470 477 777 ; C -1 ; WX 602 ; N uni02E4 ; B 160 462 442 889 ; C -1 ; WX 602 ; N gravecomb ; B 97 616 374 800 ; C -1 ; WX 602 ; N acutecomb ; B 229 616 505 800 ; C -1 ; WX 602 ; N uni0302 ; B 117 616 485 800 ; C -1 ; WX 602 ; N tildecomb ; B 130 638 472 778 ; C -1 ; WX 602 ; N uni0304 ; B 146 667 456 760 ; C -1 ; WX 602 ; N uni0306 ; B 137 639 465 785 ; C -1 ; WX 602 ; N uni0307 ; B 233 653 369 774 ; C -1 ; WX 602 ; N uni0308 ; B 146 653 456 774 ; C -1 ; WX 602 ; N uni030A ; B 162 609 440 889 ; C -1 ; WX 602 ; N uni030B ; B 145 616 530 800 ; C -1 ; WX 602 ; N uni030C ; B 117 616 485 800 ; C -1 ; WX 602 ; N uni0312 ; B 218 440 400 591 ; C -1 ; WX 602 ; N uni0321 ; B 272 -208 523 83 ; C -1 ; WX 602 ; N uni0322 ; B 81 -209 332 82 ; C -1 ; WX 602 ; N uni0326 ; B 181 -229 363 -79 ; C -1 ; WX 602 ; N Omega ; B 43 0 559 713 ; C -1 ; WX 602 ; N pi ; B 6 -20 593 538 ; C -1 ; WX 602 ; N uni0400 ; B 82 0 537 928 ; C -1 ; WX 602 ; N afii10023 ; B 82 0 537 928 ; C -1 ; WX 602 ; N afii10051 ; B -17 -208 578 760 ; C -1 ; WX 602 ; N afii10052 ; B 88 0 543 928 ; C -1 ; WX 602 ; N afii10053 ; B 74 -15 528 743 ; C -1 ; WX 602 ; N afii10054 ; B 62 -15 542 743 ; C -1 ; WX 602 ; N afii10055 ; B 83 0 519 730 ; C -1 ; WX 602 ; N afii10056 ; B 83 0 519 928 ; C -1 ; WX 602 ; N afii10057 ; B 53 -15 493 730 ; C -1 ; WX 602 ; N afii10058 ; B -69 -12 603 730 ; C -1 ; WX 602 ; N afii10059 ; B 0 0 604 730 ; C -1 ; WX 602 ; N afii10060 ; B -17 0 578 760 ; C -1 ; WX 602 ; N afii10061 ; B 57 0 599 928 ; C -1 ; WX 602 ; N uni040D ; B 58 0 543 928 ; C -1 ; WX 602 ; N afii10062 ; B 15 0 581 928 ; C -1 ; WX 602 ; N afii10145 ; B 66 -194 536 730 ; C -1 ; WX 602 ; N afii10017 ; B 16 0 586 730 ; C -1 ; WX 602 ; N afii10018 ; B 61 -1 566 730 ; C -1 ; WX 602 ; N afii10019 ; B 61 -1 566 730 ; C -1 ; WX 602 ; N afii10020 ; B 88 0 543 730 ; C -1 ; WX 602 ; N afii10021 ; B 29 -185 593 730 ; C -1 ; WX 602 ; N afii10022 ; B 82 0 537 730 ; C -1 ; WX 602 ; N afii10024 ; B -1 0 605 730 ; C -1 ; WX 602 ; N afii10025 ; B 61 -15 538 743 ; C -1 ; WX 602 ; N afii10026 ; B 58 0 543 730 ; C -1 ; WX 602 ; N afii10027 ; B 58 0 543 928 ; C -1 ; WX 602 ; N afii10028 ; B 57 0 599 730 ; C -1 ; WX 602 ; N afii10029 ; B -26 -12 536 730 ; C -1 ; WX 602 ; N afii10030 ; B 41 0 561 730 ; C -1 ; WX 602 ; N afii10031 ; B 66 0 536 730 ; C -1 ; WX 602 ; N afii10032 ; B 44 -15 558 743 ; C -1 ; WX 602 ; N afii10033 ; B 66 0 536 730 ; C -1 ; WX 602 ; N afii10034 ; B 79 0 561 730 ; C -1 ; WX 602 ; N afii10035 ; B 74 -15 528 743 ; C -1 ; WX 602 ; N afii10036 ; B 43 0 559 730 ; C -1 ; WX 602 ; N afii10037 ; B 15 0 581 730 ; C -1 ; WX 602 ; N afii10038 ; B 0 -167 603 885 ; C -1 ; WX 602 ; N afii10039 ; B 13 0 589 730 ; C -1 ; WX 602 ; N afii10040 ; B 66 -194 603 730 ; C -1 ; WX 602 ; N afii10041 ; B 49 0 551 760 ; C -1 ; WX 602 ; N afii10042 ; B 19 0 581 730 ; C -1 ; WX 602 ; N afii10043 ; B 0 -194 603 730 ; C -1 ; WX 602 ; N afii10044 ; B 0 0 566 730 ; C -1 ; WX 602 ; N afii10045 ; B 0 0 603 730 ; C -1 ; WX 602 ; N afii10046 ; B 61 0 566 730 ; C -1 ; WX 602 ; N afii10047 ; B 74 -15 528 743 ; C -1 ; WX 602 ; N afii10048 ; B 0 -15 599 743 ; C -1 ; WX 602 ; N afii10049 ; B 64 0 603 730 ; C -1 ; WX 602 ; N afii10065 ; B 45 -15 542 561 ; C -1 ; WX 602 ; N afii10066 ; B 47 -15 555 761 ; C -1 ; WX 602 ; N afii10067 ; B 66 0 518 548 ; C -1 ; WX 602 ; N afii10068 ; B 108 0 499 547 ; C -1 ; WX 602 ; N afii10069 ; B 24 -172 571 547 ; C -1 ; WX 602 ; N afii10070 ; B 44 -15 562 561 ; C -1 ; WX 602 ; N afii10072 ; B -8 0 606 547 ; C -1 ; WX 602 ; N afii10073 ; B 72 -11 511 557 ; C -1 ; WX 602 ; N afii10074 ; B 83 0 523 547 ; C -1 ; WX 602 ; N afii10075 ; B 83 0 523 785 ; C -1 ; WX 602 ; N afii10076 ; B 84 0 585 547 ; C -1 ; WX 602 ; N afii10077 ; B 19 -12 551 547 ; C -1 ; WX 602 ; N afii10078 ; B 41 0 561 547 ; C -1 ; WX 602 ; N afii10079 ; B 83 0 523 547 ; C -1 ; WX 602 ; N afii10080 ; B 47 -15 555 561 ; C -1 ; WX 602 ; N afii10081 ; B 83 0 523 547 ; C -1 ; WX 602 ; N afii10082 ; B 73 -209 559 561 ; C -1 ; WX 602 ; N afii10083 ; B 82 -15 519 562 ; C -1 ; WX 602 ; N afii10084 ; B 80 0 523 547 ; C -1 ; WX 602 ; N afii10085 ; B 28 -208 575 547 ; C -1 ; WX 602 ; N afii10086 ; B 0 -157 603 690 ; C -1 ; WX 602 ; N afii10087 ; B 26 0 576 547 ; C -1 ; WX 602 ; N afii10088 ; B 47 -159 563 547 ; C -1 ; WX 602 ; N afii10089 ; B 67 0 518 548 ; C -1 ; WX 602 ; N afii10090 ; B 19 -1 582 547 ; C -1 ; WX 602 ; N afii10091 ; B 0 -159 603 547 ; C -1 ; WX 602 ; N afii10092 ; B 19 0 559 548 ; C -1 ; WX 602 ; N afii10093 ; B 14 0 587 548 ; C -1 ; WX 602 ; N afii10094 ; B 67 0 518 548 ; C -1 ; WX 602 ; N afii10095 ; B 82 -15 519 562 ; C -1 ; WX 602 ; N afii10096 ; B 0 -15 603 561 ; C -1 ; WX 602 ; N afii10097 ; B 40 0 541 547 ; C -1 ; WX 602 ; N uni0450 ; B 44 -15 562 800 ; C -1 ; WX 602 ; N afii10071 ; B 44 -15 562 774 ; C -1 ; WX 602 ; N afii10099 ; B 0 -208 525 760 ; C -1 ; WX 602 ; N afii10100 ; B 108 0 505 800 ; C -1 ; WX 602 ; N afii10101 ; B 82 -15 519 562 ; C -1 ; WX 602 ; N afii10102 ; B 83 -15 521 561 ; C -1 ; WX 602 ; N afii10103 ; B 69 0 569 813 ; C -1 ; WX 602 ; N afii10104 ; B 69 0 569 774 ; C -1 ; WX 602 ; N afii10105 ; B 69 -208 416 813 ; C -1 ; WX 602 ; N afii10106 ; B -44 -12 603 547 ; C -1 ; WX 602 ; N afii10107 ; B 17 -1 591 547 ; C -1 ; WX 602 ; N afii10108 ; B 0 0 523 760 ; C -1 ; WX 602 ; N afii10109 ; B 84 0 585 800 ; C -1 ; WX 602 ; N uni045D ; B 83 0 523 800 ; C -1 ; WX 602 ; N afii10110 ; B 28 -208 575 785 ; C -1 ; WX 602 ; N afii10193 ; B 47 -159 487 547 ; C -1 ; WX 602 ; N afii10050 ; B 88 0 543 879 ; C -1 ; WX 602 ; N afii10098 ; B 108 0 499 701 ; C -1 ; WX 602 ; N uni0492 ; B 22 0 543 730 ; C -1 ; WX 602 ; N uni0493 ; B 44 0 499 547 ; C -1 ; WX 602 ; N uni049A ; B 57 -194 599 730 ; C -1 ; WX 602 ; N uni049B ; B 84 -159 585 547 ; C -1 ; WX 602 ; N uni04B2 ; B 13 -194 589 730 ; C -1 ; WX 602 ; N uni04B3 ; B 26 -159 576 547 ; C -1 ; WX 602 ; N uni1E12 ; B 47 -189 558 730 ; C -1 ; WX 602 ; N uni1E13 ; B 43 -258 529 760 ; C -1 ; WX 602 ; N uni1E3C ; B 109 -189 563 730 ; C -1 ; WX 602 ; N uni1E3D ; B 43 -240 535 760 ; C -1 ; WX 602 ; N uni1E44 ; B 58 0 543 922 ; C -1 ; WX 602 ; N uni1E45 ; B 83 0 523 740 ; C -1 ; WX 602 ; N uni1E4A ; B 58 -189 543 730 ; C -1 ; WX 602 ; N uni1E4B ; B 83 -244 523 561 ; C -1 ; WX 602 ; N uni1E70 ; B 43 -189 559 730 ; C -1 ; WX 602 ; N uni1E71 ; B 54 -240 542 703 ; C -1 ; WX 602 ; N Wgrave ; B 0 0 603 986 ; C -1 ; WX 602 ; N wgrave ; B 0 0 603 804 ; C -1 ; WX 602 ; N Wacute ; B 0 0 603 986 ; C -1 ; WX 602 ; N wacute ; B 0 0 603 804 ; C -1 ; WX 602 ; N Wdieresis ; B 0 0 603 922 ; C -1 ; WX 602 ; N wdieresis ; B 0 0 603 740 ; C -1 ; WX 602 ; N Ygrave ; B 3 0 599 986 ; C -1 ; WX 602 ; N ygrave ; B 28 -208 575 804 ; C -1 ; WX 602 ; N uni2010 ; B 146 216 456 359 ; C -1 ; WX 602 ; N uni2011 ; B 146 216 456 359 ; C -1 ; WX 602 ; N figuredash ; B 0 216 603 337 ; C -1 ; WX 602 ; N endash ; B 0 216 603 337 ; C -1 ; WX 602 ; N emdash ; B 0 216 603 337 ; C -1 ; WX 602 ; N afii00208 ; B 0 216 603 337 ; C -1 ; WX 602 ; N quoteleft ; B 210 440 413 760 ; C -1 ; WX 602 ; N quoteright ; B 210 440 413 760 ; C -1 ; WX 602 ; N quotesinglbase ; B 176 -141 378 180 ; C -1 ; WX 602 ; N quotedblleft ; B 74 440 528 760 ; C -1 ; WX 602 ; N quotedblright ; B 73 440 528 760 ; C -1 ; WX 602 ; N quotedblbase ; B 73 -141 528 180 ; C -1 ; WX 602 ; N dagger ; B 76 -97 525 730 ; C -1 ; WX 602 ; N daggerdbl ; B 76 -97 525 730 ; C -1 ; WX 602 ; N bullet ; B 125 194 478 547 ; C -1 ; WX 602 ; N ellipsis ; B 27 0 575 180 ; C -1 ; WX 602 ; N perthousand ; B 0 0 603 700 ; C -1 ; WX 602 ; N guilsinglleft ; B 168 68 398 518 ; C -1 ; WX 602 ; N guilsinglright ; B 205 68 435 518 ; C -1 ; WX 602 ; N uni207F ; B 160 462 442 777 ; C -1 ; WX 602 ; N Euro ; B 2 -15 526 743 ; C -1 ; WX 602 ; N trademark ; B 0 446 550 730 ; C -1 ; WX 602 ; N partialdiff ; B 70 -13 534 660 ; C -1 ; WX 602 ; N Delta ; B -3 0 606 695 ; C -1 ; WX 602 ; N product ; B 74 -213 528 742 ; C -1 ; WX 602 ; N summation ; B 62 -213 540 742 ; C -1 ; WX 602 ; N minus ; B 32 255 569 373 ; C -1 ; WX 602 ; N fraction ; B 55 -93 547 730 ; C -1 ; WX 602 ; N periodcentered ; B 219 258 382 438 ; C -1 ; WX 602 ; N radical ; B 23 -20 574 843 ; C -1 ; WX 602 ; N infinity ; B 5 108 597 508 ; C -1 ; WX 602 ; N integral ; B 35 -183 566 759 ; C -1 ; WX 602 ; N approxequal ; B 42 124 560 499 ; C -1 ; WX 602 ; N notequal ; B 38 -5 564 631 ; C -1 ; WX 602 ; N lessequal ; B 42 0 560 583 ; C -1 ; WX 602 ; N greaterequal ; B 42 0 560 583 ; C -1 ; WX 602 ; N house ; B 53 0 549 596 ; C -1 ; WX 602 ; N revlogicalnot ; B 42 176 560 439 ; C -1 ; WX 602 ; N uni2311 ; B 34 113 568 647 ; C -1 ; WX 602 ; N uni2319 ; B 42 176 560 439 ; C -1 ; WX 602 ; N uni237D ; B 7 -233 595 101 ; C -1 ; WX 602 ; N uni2423 ; B 53 -233 549 101 ; C -1 ; WX 602 ; N upblock ; B -10 132 612 770 ; C -1 ; WX 602 ; N uni2581 ; B -10 -505 612 -345 ; C -1 ; WX 602 ; N uni2582 ; B -10 -505 612 -186 ; C -1 ; WX 602 ; N uni2583 ; B -10 -505 612 -26 ; C -1 ; WX 602 ; N dnblock ; B -10 -505 612 133 ; C -1 ; WX 602 ; N uni2585 ; B -10 -505 612 292 ; C -1 ; WX 602 ; N uni2586 ; B -10 -505 612 451 ; C -1 ; WX 602 ; N uni2587 ; B -10 -505 612 611 ; C -1 ; WX 602 ; N block ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2589 ; B -10 -505 535 770 ; C -1 ; WX 602 ; N uni258A ; B -10 -505 457 770 ; C -1 ; WX 602 ; N uni258B ; B -10 -505 379 770 ; C -1 ; WX 602 ; N lfblock ; B -10 -505 301 770 ; C -1 ; WX 602 ; N uni258D ; B -10 -505 224 770 ; C -1 ; WX 602 ; N uni258E ; B -10 -505 146 770 ; C -1 ; WX 602 ; N uni258F ; B -10 -505 68 770 ; C -1 ; WX 602 ; N rtblock ; B 301 -505 612 770 ; C -1 ; WX 602 ; N ltshade ; B -10 -505 535 770 ; C -1 ; WX 602 ; N shade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N dkshade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2594 ; B -10 610 612 770 ; C -1 ; WX 602 ; N uni2595 ; B 534 -505 612 770 ; C -1 ; WX 602 ; N uni2596 ; B -10 -505 301 133 ; C -1 ; WX 602 ; N uni2597 ; B 301 -505 612 133 ; C -1 ; WX 602 ; N uni2598 ; B -10 132 301 770 ; C -1 ; WX 602 ; N uni2599 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259A ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259B ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259C ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259D ; B 301 132 612 770 ; C -1 ; WX 602 ; N uni259E ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259F ; B -10 -505 612 770 ; C -1 ; WX 602 ; N lozenge ; B 57 -233 545 808 ; C -1 ; WX 602 ; N uni2638 ; B 17 103 586 657 ; C -1 ; WX 602 ; N fi ; B 5 0 537 760 ; C -1 ; WX 602 ; N fl ; B 5 0 537 760 ; C -1 ; WX 602 ; N uniFFFD ; B 22 -138 580 927 ; C -1 ; WX 602 ; N dlLtcaron ; B 229 616 404 800 ; C -1 ; WX 602 ; N Dieresis ; B 146 625 456 746 ; C -1 ; WX 602 ; N Acute ; B 229 616 465 746 ; C -1 ; WX 602 ; N Tilde ; B 130 616 472 747 ; C -1 ; WX 602 ; N Grave ; B 138 616 375 746 ; C -1 ; WX 602 ; N Circumflex ; B 117 616 485 746 ; C -1 ; WX 602 ; N Caron ; B 117 616 485 746 ; C -1 ; WX 602 ; N fractionslash ; B 22 244 559 431 ; C -1 ; WX 602 ; N foursuperior ; B 120 326 457 734 ; C -1 ; WX 602 ; N Breve ; B 137 616 465 746 ; C -1 ; WX 602 ; N Dotaccent ; B 233 625 369 746 ; C -1 ; WX 602 ; N Hungarumlaut ; B 128 616 548 746 ; C -1 ; WX 602 ; N Doublegrave ; B 54 616 474 746 ; EndCharMetrics EndFontMetrics htmldoc-1.8.27/fonts/Monospace.afm0100664000212600000240000011617010330505373015471 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:21 2005 FontName Monospace FullName Monospace FamilyName Monospace Weight Book Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle 0 IsFixedPitch true UnderlinePosition -213 UnderlineThickness 141 Version 1.15 EncodingScheme ISO10646-1 FontBBox -54 -505 656 1042 CapHeight 729 XHeight 546 Ascender 765 Descender -208 StartCharMetrics 835 C 0 ; WX 602 ; N .notdef ; B 50 -177 551 706 ; C 32 ; WX 602 ; N space ; B 0 0 0 0 ; C 33 ; WX 602 ; N exclam ; B 251 0 352 730 ; C 34 ; WX 602 ; N quotedbl ; B 165 458 438 730 ; C 35 ; WX 602 ; N numbersign ; B 0 0 601 718 ; C 36 ; WX 602 ; N dollar ; B 92 -147 544 760 ; C 37 ; WX 602 ; N percent ; B 16 0 586 700 ; C 38 ; WX 602 ; N ampersand ; B 27 -15 597 743 ; C 39 ; WX 602 ; N quotesingle ; B 257 458 343 730 ; C 40 ; WX 602 ; N parenleft ; B 208 -132 433 759 ; C 41 ; WX 602 ; N parenright ; B 169 -132 395 759 ; C 42 ; WX 602 ; N asterisk ; B 81 286 521 743 ; C 43 ; WX 602 ; N plus ; B 42 55 560 572 ; C 44 ; WX 602 ; N comma ; B 196 -141 369 148 ; C 45 ; WX 602 ; N hyphen ; B 173 233 429 314 ; C 46 ; WX 602 ; N period ; B 238 0 362 149 ; C 47 ; WX 602 ; N slash ; B 49 -93 527 730 ; C 48 ; WX 602 ; N zero ; B 64 -15 538 743 ; C 49 ; WX 602 ; N one ; B 120 0 535 730 ; C 50 ; WX 602 ; N two ; B 74 0 518 743 ; C 51 ; WX 602 ; N three ; B 66 -15 527 743 ; C 52 ; WX 602 ; N four ; B 49 0 555 730 ; C 53 ; WX 602 ; N five ; B 69 -15 522 730 ; C 54 ; WX 602 ; N six ; B 64 -15 538 743 ; C 55 ; WX 602 ; N seven ; B 67 0 527 730 ; C 56 ; WX 602 ; N eight ; B 63 -15 539 743 ; C 57 ; WX 602 ; N nine ; B 62 -15 535 743 ; C 58 ; WX 602 ; N colon ; B 238 0 362 520 ; C 59 ; WX 602 ; N semicolon ; B 196 -141 369 520 ; C 60 ; WX 602 ; N less ; B 42 68 560 559 ; C 61 ; WX 602 ; N equal ; B 42 171 560 455 ; C 62 ; WX 602 ; N greater ; B 42 68 560 559 ; C 63 ; WX 602 ; N question ; B 119 0 508 743 ; C 64 ; WX 602 ; N at ; B 13 -156 576 682 ; C 65 ; WX 602 ; N A ; B 18 0 584 730 ; C 66 ; WX 602 ; N B ; B 81 0 556 730 ; C 67 ; WX 602 ; N C ; B 67 -15 524 743 ; C 68 ; WX 602 ; N D ; B 66 0 541 730 ; C 69 ; WX 602 ; N E ; B 96 0 539 730 ; C 70 ; WX 602 ; N F ; B 113 0 543 730 ; C 71 ; WX 602 ; N G ; B 49 -15 540 743 ; C 72 ; WX 602 ; N H ; B 66 0 536 730 ; C 73 ; WX 602 ; N I ; B 98 0 503 730 ; C 74 ; WX 602 ; N J ; B 53 -15 467 730 ; C 75 ; WX 602 ; N K ; B 66 0 599 730 ; C 76 ; WX 602 ; N L ; B 104 0 557 730 ; C 77 ; WX 602 ; N M ; B 41 0 560 730 ; C 78 ; WX 602 ; N N ; B 67 0 535 730 ; C 79 ; WX 602 ; N O ; B 57 -15 545 743 ; C 80 ; WX 602 ; N P ; B 96 0 558 730 ; C 81 ; WX 602 ; N Q ; B 57 -132 545 743 ; C 82 ; WX 602 ; N R ; B 69 0 603 730 ; C 83 ; WX 602 ; N S ; B 67 -15 537 743 ; C 84 ; WX 602 ; N T ; B 22 0 580 730 ; C 85 ; WX 602 ; N U ; B 71 -15 530 730 ; C 86 ; WX 602 ; N V ; B 27 0 575 730 ; C 87 ; WX 602 ; N W ; B 0 0 603 730 ; C 88 ; WX 602 ; N X ; B 8 0 593 730 ; C 89 ; WX 602 ; N Y ; B 18 0 584 730 ; C 90 ; WX 602 ; N Z ; B 76 0 571 730 ; C 91 ; WX 602 ; N bracketleft ; B 226 -132 434 760 ; C 92 ; WX 602 ; N backslash ; B 49 -93 527 730 ; C 93 ; WX 602 ; N bracketright ; B 168 -132 376 760 ; C 94 ; WX 602 ; N asciicircum ; B 35 457 567 730 ; C 95 ; WX 602 ; N underscore ; B 0 -236 500 -196 ; C 96 ; WX 602 ; N grave ; B 136 616 371 800 ; C 97 ; WX 602 ; N a ; B 64 -15 518 561 ; C 98 ; WX 602 ; N b ; B 94 -15 543 760 ; C 99 ; WX 602 ; N c ; B 95 -15 519 561 ; C 100 ; WX 602 ; N d ; B 60 -15 509 760 ; C 101 ; WX 602 ; N e ; B 60 -15 543 561 ; C 102 ; WX 602 ; N f ; B 95 0 520 760 ; C 103 ; WX 602 ; N g ; B 60 -215 509 561 ; C 104 ; WX 602 ; N h ; B 95 0 514 760 ; C 105 ; WX 602 ; N i ; B 86 0 534 760 ; C 106 ; WX 602 ; N j ; B 90 -209 383 760 ; C 107 ; WX 602 ; N k ; B 115 0 587 760 ; C 108 ; WX 602 ; N l ; B 78 0 505 766 ; C 109 ; WX 602 ; N m ; B 53 0 555 561 ; C 110 ; WX 602 ; N n ; B 95 0 514 561 ; C 111 ; WX 602 ; N o ; B 66 -15 536 561 ; C 112 ; WX 602 ; N p ; B 92 -209 542 561 ; C 113 ; WX 602 ; N q ; B 66 -210 516 559 ; C 114 ; WX 602 ; N r ; B 176 0 564 561 ; C 115 ; WX 602 ; N s ; B 104 -15 503 561 ; C 116 ; WX 602 ; N t ; B 63 0 504 703 ; C 117 ; WX 602 ; N u ; B 95 -15 514 546 ; C 118 ; WX 602 ; N v ; B 48 0 554 547 ; C 119 ; WX 602 ; N w ; B 0 0 603 547 ; C 120 ; WX 602 ; N x ; B 37 0 565 547 ; C 121 ; WX 602 ; N y ; B 50 -209 563 547 ; C 122 ; WX 602 ; N z ; B 99 0 508 548 ; C 123 ; WX 602 ; N braceleft ; B 107 -164 495 760 ; C 124 ; WX 602 ; N bar ; B 258 -236 343 765 ; C 125 ; WX 602 ; N braceright ; B 107 -164 495 760 ; C 126 ; WX 602 ; N asciitilde ; B 42 240 560 381 ; C 160 ; WX 602 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 602 ; N exclamdown ; B 251 0 352 730 ; C 162 ; WX 602 ; N cent ; B 104 -153 519 700 ; C 163 ; WX 602 ; N sterling ; B 67 0 543 743 ; C 164 ; WX 602 ; N currency ; B 100 95 538 533 ; C 165 ; WX 602 ; N yen ; B 18 0 584 730 ; C 166 ; WX 602 ; N brokenbar ; B 258 -171 343 700 ; C 167 ; WX 602 ; N section ; B 97 -96 506 743 ; C 168 ; WX 602 ; N dieresis ; B 155 659 446 758 ; C 169 ; WX 602 ; N copyright ; B 0 61 603 664 ; C 170 ; WX 602 ; N ordfeminine ; B 131 229 470 743 ; C 171 ; WX 602 ; N guillemotleft ; B 58 68 509 518 ; C 172 ; WX 602 ; N logicalnot ; B 42 181 560 421 ; C 173 ; WX 602 ; N sfthyphen ; B 173 233 429 314 ; C 174 ; WX 602 ; N registered ; B 0 61 603 664 ; C 175 ; WX 602 ; N macron ; B 154 672 447 746 ; C 176 ; WX 602 ; N degree ; B 145 432 457 743 ; C 177 ; WX 602 ; N plusminus ; B 42 0 560 572 ; C 178 ; WX 602 ; N twosuperior ; B 157 326 437 743 ; C 179 ; WX 602 ; N threesuperior ; B 159 318 452 743 ; C 180 ; WX 602 ; N acute ; B 231 616 466 800 ; C 181 ; WX 602 ; N mu ; B 95 -209 578 547 ; C 182 ; WX 602 ; N paragraph ; B 51 -97 503 730 ; C 183 ; WX 602 ; N periodcentered ; B 238 272 362 422 ; C 184 ; WX 602 ; N cedilla ; B 192 -193 396 0 ; C 185 ; WX 602 ; N onesuperior ; B 167 326 447 734 ; C 186 ; WX 602 ; N ordmasculine ; B 119 229 483 743 ; C 187 ; WX 602 ; N guillemotright ; B 94 68 545 518 ; C 188 ; WX 602 ; N onequarter ; B 13 -132 544 811 ; C 189 ; WX 602 ; N onehalf ; B 13 -132 544 811 ; C 190 ; WX 602 ; N threequarters ; B 13 -132 544 819 ; C 191 ; WX 602 ; N questiondown ; B 94 -14 483 730 ; C 192 ; WX 602 ; N Agrave ; B 18 0 584 928 ; C 193 ; WX 602 ; N Aacute ; B 18 0 584 928 ; C 194 ; WX 602 ; N Acircumflex ; B 18 0 584 929 ; C 195 ; WX 602 ; N Atilde ; B 18 0 584 921 ; C 196 ; WX 602 ; N Adieresis ; B 18 0 584 914 ; C 197 ; WX 602 ; N Aring ; B 18 0 584 929 ; C 198 ; WX 602 ; N AE ; B 0 0 577 730 ; C 199 ; WX 602 ; N Ccedilla ; B 67 -193 524 743 ; C 200 ; WX 602 ; N Egrave ; B 96 0 539 928 ; C 201 ; WX 602 ; N Eacute ; B 96 0 539 928 ; C 202 ; WX 602 ; N Ecircumflex ; B 96 0 539 929 ; C 203 ; WX 602 ; N Edieresis ; B 96 0 539 914 ; C 204 ; WX 602 ; N Igrave ; B 98 0 503 928 ; C 205 ; WX 602 ; N Iacute ; B 98 0 503 928 ; C 206 ; WX 602 ; N Icircumflex ; B 98 0 503 929 ; C 207 ; WX 602 ; N Idieresis ; B 98 0 503 914 ; C 208 ; WX 602 ; N Eth ; B 3 0 539 730 ; C 209 ; WX 602 ; N Ntilde ; B 67 0 535 921 ; C 210 ; WX 602 ; N Ograve ; B 57 -15 545 928 ; C 211 ; WX 602 ; N Oacute ; B 57 -15 545 928 ; C 212 ; WX 602 ; N Ocircumflex ; B 57 -15 545 929 ; C 213 ; WX 602 ; N Otilde ; B 57 -15 545 921 ; C 214 ; WX 602 ; N Odieresis ; B 57 -15 545 914 ; C 215 ; WX 602 ; N multiply ; B 73 84 529 542 ; C 216 ; WX 602 ; N Oslash ; B 3 -35 586 762 ; C 217 ; WX 602 ; N Ugrave ; B 71 -15 530 928 ; C 218 ; WX 602 ; N Uacute ; B 71 -15 530 928 ; C 219 ; WX 602 ; N Ucircumflex ; B 71 -15 530 929 ; C 220 ; WX 602 ; N Udieresis ; B 71 -15 530 914 ; C 221 ; WX 602 ; N Yacute ; B 18 0 584 928 ; C 222 ; WX 602 ; N Thorn ; B 98 0 569 730 ; C 223 ; WX 602 ; N germandbls ; B 91 -15 562 760 ; C 224 ; WX 602 ; N agrave ; B 64 -15 518 800 ; C 225 ; WX 602 ; N aacute ; B 64 -15 518 800 ; C 226 ; WX 602 ; N acircumflex ; B 64 -15 518 800 ; C 227 ; WX 602 ; N atilde ; B 64 -15 518 777 ; C 228 ; WX 602 ; N adieresis ; B 64 -15 518 758 ; C 229 ; WX 602 ; N aring ; B 64 -15 518 878 ; C 230 ; WX 602 ; N ae ; B 20 -15 586 561 ; C 231 ; WX 602 ; N ccedilla ; B 95 -193 519 561 ; C 232 ; WX 602 ; N egrave ; B 60 -15 543 800 ; C 233 ; WX 602 ; N eacute ; B 60 -15 543 800 ; C 234 ; WX 602 ; N ecircumflex ; B 60 -15 543 800 ; C 235 ; WX 602 ; N edieresis ; B 60 -15 543 758 ; C 236 ; WX 602 ; N igrave ; B 86 0 534 800 ; C 237 ; WX 602 ; N iacute ; B 86 0 534 800 ; C 238 ; WX 602 ; N icircumflex ; B 86 0 534 800 ; C 239 ; WX 602 ; N idieresis ; B 86 0 534 758 ; C 240 ; WX 602 ; N eth ; B 66 -15 536 760 ; C 241 ; WX 602 ; N ntilde ; B 95 0 514 777 ; C 242 ; WX 602 ; N ograve ; B 66 -15 536 800 ; C 243 ; WX 602 ; N oacute ; B 66 -15 536 800 ; C 244 ; WX 602 ; N ocircumflex ; B 66 -15 536 800 ; C 245 ; WX 602 ; N otilde ; B 66 -15 536 777 ; C 246 ; WX 602 ; N odieresis ; B 66 -15 536 758 ; C 247 ; WX 602 ; N divide ; B 42 73 560 555 ; C 248 ; WX 602 ; N oslash ; B 22 -47 574 592 ; C 249 ; WX 602 ; N ugrave ; B 95 -15 514 800 ; C 250 ; WX 602 ; N uacute ; B 95 -15 514 800 ; C 251 ; WX 602 ; N ucircumflex ; B 95 -15 514 800 ; C 252 ; WX 602 ; N udieresis ; B 95 -15 514 758 ; C 253 ; WX 602 ; N yacute ; B 50 -209 563 800 ; C 254 ; WX 602 ; N thorn ; B 92 -209 542 766 ; C 255 ; WX 602 ; N ydieresis ; B 50 -209 563 758 ; C -1 ; WX 602 ; N Amacron ; B 18 0 584 899 ; C -1 ; WX 602 ; N amacron ; B 64 -15 518 746 ; C -1 ; WX 602 ; N Abreve ; B 18 0 584 933 ; C -1 ; WX 602 ; N abreve ; B 64 -15 518 771 ; C -1 ; WX 602 ; N Aogonek ; B 18 -193 610 730 ; C -1 ; WX 602 ; N aogonek ; B 64 -193 556 561 ; C -1 ; WX 602 ; N Cacute ; B 67 -15 524 928 ; C -1 ; WX 602 ; N cacute ; B 95 -15 519 800 ; C -1 ; WX 602 ; N Ccircumflex ; B 67 -15 524 932 ; C -1 ; WX 602 ; N ccircumflex ; B 95 -15 519 800 ; C -1 ; WX 602 ; N Cdotaccent ; B 67 -15 524 915 ; C -1 ; WX 602 ; N cdotaccent ; B 95 -15 519 758 ; C -1 ; WX 602 ; N Ccaron ; B 67 -15 524 929 ; C -1 ; WX 602 ; N ccaron ; B 95 -15 519 800 ; C -1 ; WX 602 ; N Dcaron ; B 66 0 541 926 ; C -1 ; WX 602 ; N dcaron ; B 60 -15 641 761 ; C -1 ; WX 602 ; N Dcroat ; B 3 0 539 730 ; C -1 ; WX 602 ; N dcroat ; B 60 -15 603 760 ; C -1 ; WX 602 ; N Emacron ; B 96 0 539 899 ; C -1 ; WX 602 ; N emacron ; B 60 -15 543 746 ; C -1 ; WX 602 ; N Ebreve ; B 96 0 539 929 ; C -1 ; WX 602 ; N ebreve ; B 60 -15 543 786 ; C -1 ; WX 602 ; N Edotaccent ; B 96 0 539 915 ; C -1 ; WX 602 ; N edotaccent ; B 60 -15 543 758 ; C -1 ; WX 602 ; N Eogonek ; B 96 -193 539 730 ; C -1 ; WX 602 ; N eogonek ; B 60 -193 543 561 ; C -1 ; WX 602 ; N Ecaron ; B 96 0 539 926 ; C -1 ; WX 602 ; N ecaron ; B 60 -15 543 798 ; C -1 ; WX 602 ; N Gcircumflex ; B 49 -15 540 929 ; C -1 ; WX 602 ; N gcircumflex ; B 60 -215 509 800 ; C -1 ; WX 602 ; N Gbreve ; B 49 -15 540 929 ; C -1 ; WX 602 ; N gbreve ; B 60 -215 509 786 ; C -1 ; WX 602 ; N Gdotaccent ; B 49 -15 540 915 ; C -1 ; WX 602 ; N gdotaccent ; B 60 -215 509 758 ; C -1 ; WX 602 ; N Gcommaaccent ; B 49 -243 540 743 ; C -1 ; WX 602 ; N gcommaaccent ; B 60 -215 509 789 ; C -1 ; WX 602 ; N Hcircumflex ; B 66 0 536 929 ; C -1 ; WX 602 ; N hcircumflex ; B 95 0 514 929 ; C -1 ; WX 602 ; N Hbar ; B 1 0 601 730 ; C -1 ; WX 602 ; N hbar ; B 34 0 514 760 ; C -1 ; WX 602 ; N Itilde ; B 98 0 503 921 ; C -1 ; WX 602 ; N itilde ; B 86 0 534 777 ; C -1 ; WX 602 ; N Imacron ; B 98 0 503 900 ; C -1 ; WX 602 ; N imacron ; B 86 0 534 746 ; C -1 ; WX 602 ; N Ibreve ; B 98 0 503 929 ; C -1 ; WX 602 ; N ibreve ; B 86 0 534 786 ; C -1 ; WX 602 ; N Iogonek ; B 98 -193 503 730 ; C -1 ; WX 602 ; N iogonek ; B 86 -193 534 760 ; C -1 ; WX 602 ; N Idotaccent ; B 98 0 503 915 ; C -1 ; WX 602 ; N dotlessi ; B 86 0 534 547 ; C -1 ; WX 602 ; N IJ ; B -1 -13 600 731 ; C -1 ; WX 602 ; N ij ; B -3 -214 568 760 ; C -1 ; WX 602 ; N Jcircumflex ; B 53 -15 474 929 ; C -1 ; WX 602 ; N jcircumflex ; B 90 -209 458 800 ; C -1 ; WX 602 ; N Kcommaaccent ; B 66 -229 599 730 ; C -1 ; WX 602 ; N kcommaaccent ; B 115 -229 587 760 ; C -1 ; WX 602 ; N kgreenlandic ; B 115 0 587 547 ; C -1 ; WX 602 ; N Lacute ; B 97 0 557 928 ; C -1 ; WX 602 ; N lacute ; B 78 0 505 928 ; C -1 ; WX 602 ; N Lcommaaccent ; B 104 -229 557 730 ; C -1 ; WX 602 ; N lcommaaccent ; B 78 -229 505 766 ; C -1 ; WX 602 ; N Lcaron ; B 104 0 557 730 ; C -1 ; WX 602 ; N lcaron ; B 78 0 566 766 ; C -1 ; WX 602 ; N Ldot ; B 104 0 557 730 ; C -1 ; WX 602 ; N ldot ; B 78 0 592 766 ; C -1 ; WX 602 ; N Lslash ; B -5 0 557 730 ; C -1 ; WX 602 ; N lslash ; B 37 0 505 766 ; C -1 ; WX 602 ; N Nacute ; B 67 0 535 928 ; C -1 ; WX 602 ; N nacute ; B 95 0 514 804 ; C -1 ; WX 602 ; N Ncommaaccent ; B 67 -229 535 730 ; C -1 ; WX 602 ; N ncommaaccent ; B 95 -229 514 561 ; C -1 ; WX 602 ; N Ncaron ; B 67 0 535 929 ; C -1 ; WX 602 ; N ncaron ; B 95 0 514 800 ; C -1 ; WX 602 ; N napostrophe ; B 11 0 574 760 ; C -1 ; WX 602 ; N Eng ; B 72 -209 530 730 ; C -1 ; WX 602 ; N eng ; B 95 -209 514 561 ; C -1 ; WX 602 ; N Omacron ; B 57 -15 545 900 ; C -1 ; WX 602 ; N omacron ; B 66 -15 536 746 ; C -1 ; WX 602 ; N Obreve ; B 57 -15 545 929 ; C -1 ; WX 602 ; N obreve ; B 66 -15 536 786 ; C -1 ; WX 602 ; N Ohungarumlaut ; B 57 -15 545 928 ; C -1 ; WX 602 ; N ohungarumlaut ; B 66 -15 536 800 ; C -1 ; WX 602 ; N OE ; B 35 0 595 730 ; C -1 ; WX 602 ; N oe ; B 6 -15 591 561 ; C -1 ; WX 602 ; N Racute ; B 69 0 603 928 ; C -1 ; WX 602 ; N racute ; B 176 0 567 804 ; C -1 ; WX 602 ; N Rcommaaccent ; B 69 -229 603 730 ; C -1 ; WX 602 ; N rcommaaccent ; B 140 -229 564 561 ; C -1 ; WX 602 ; N Rcaron ; B 69 0 603 926 ; C -1 ; WX 602 ; N rcaron ; B 176 0 564 800 ; C -1 ; WX 602 ; N Sacute ; B 67 -15 537 928 ; C -1 ; WX 602 ; N sacute ; B 104 -15 503 804 ; C -1 ; WX 602 ; N Scircumflex ; B 67 -15 537 929 ; C -1 ; WX 602 ; N scircumflex ; B 104 -15 503 800 ; C -1 ; WX 602 ; N Scedilla ; B 67 -193 537 743 ; C -1 ; WX 602 ; N scedilla ; B 104 -193 503 561 ; C -1 ; WX 602 ; N Scaron ; B 67 -15 537 929 ; C -1 ; WX 602 ; N scaron ; B 104 -15 503 800 ; C -1 ; WX 602 ; N Tcommaaccent ; B 22 -193 580 730 ; C -1 ; WX 602 ; N tcommaaccent ; B 63 -193 504 703 ; C -1 ; WX 602 ; N Tcaron ; B 22 0 580 929 ; C -1 ; WX 602 ; N tcaron ; B 63 0 504 812 ; C -1 ; WX 602 ; N Tbar ; B 22 0 580 730 ; C -1 ; WX 602 ; N tbar ; B 63 0 504 703 ; C -1 ; WX 602 ; N Utilde ; B 71 -15 530 921 ; C -1 ; WX 602 ; N utilde ; B 95 -15 514 777 ; C -1 ; WX 602 ; N Umacron ; B 71 -15 530 899 ; C -1 ; WX 602 ; N umacron ; B 95 -15 514 745 ; C -1 ; WX 602 ; N Ubreve ; B 71 -15 530 929 ; C -1 ; WX 602 ; N ubreve ; B 95 -15 514 786 ; C -1 ; WX 602 ; N Uring ; B 71 -15 530 1042 ; C -1 ; WX 602 ; N uring ; B 95 -15 514 856 ; C -1 ; WX 602 ; N Uhungarumlaut ; B 71 -15 530 928 ; C -1 ; WX 602 ; N uhungarumlaut ; B 95 -15 514 800 ; C -1 ; WX 602 ; N Uogonek ; B 71 -201 530 730 ; C -1 ; WX 602 ; N uogonek ; B 95 -193 586 546 ; C -1 ; WX 602 ; N Wcircumflex ; B 0 0 603 932 ; C -1 ; WX 602 ; N wcircumflex ; B 0 0 603 804 ; C -1 ; WX 602 ; N Ycircumflex ; B 18 0 584 932 ; C -1 ; WX 602 ; N ycircumflex ; B 50 -209 563 804 ; C -1 ; WX 602 ; N Ydieresis ; B 18 0 584 914 ; C -1 ; WX 602 ; N Zacute ; B 76 0 571 928 ; C -1 ; WX 602 ; N zacute ; B 99 0 509 804 ; C -1 ; WX 602 ; N Zdotaccent ; B 76 0 571 915 ; C -1 ; WX 602 ; N zdotaccent ; B 99 0 508 758 ; C -1 ; WX 602 ; N Zcaron ; B 76 0 571 929 ; C -1 ; WX 602 ; N zcaron ; B 99 0 508 800 ; C -1 ; WX 602 ; N longs ; B 95 0 520 760 ; C -1 ; WX 602 ; N uni0186 ; B 67 -15 524 743 ; C -1 ; WX 602 ; N uni0190 ; B 66 -15 527 743 ; C -1 ; WX 602 ; N florin ; B 0 -209 586 760 ; C -1 ; WX 602 ; N uni0194 ; B 13 -210 589 661 ; C -1 ; WX 602 ; N uni01CD ; B 18 0 584 929 ; C -1 ; WX 602 ; N uni01CE ; B 64 -15 518 800 ; C -1 ; WX 602 ; N uni01CF ; B 98 0 503 929 ; C -1 ; WX 602 ; N uni01D0 ; B 86 0 534 800 ; C -1 ; WX 602 ; N uni01D1 ; B 57 -15 545 929 ; C -1 ; WX 602 ; N uni01D2 ; B 66 -15 536 800 ; C -1 ; WX 602 ; N uni01D3 ; B 71 -15 530 929 ; C -1 ; WX 602 ; N uni01D4 ; B 95 -15 514 800 ; C -1 ; WX 602 ; N uni01D6 ; B 95 -15 514 900 ; C -1 ; WX 602 ; N uni01DF ; B 64 -15 518 900 ; C -1 ; WX 602 ; N uni01E2 ; B 0 0 577 899 ; C -1 ; WX 602 ; N uni01E3 ; B 20 -15 586 745 ; C -1 ; WX 602 ; N uni01EA ; B 57 -201 545 743 ; C -1 ; WX 602 ; N uni01EB ; B 66 -201 536 561 ; C -1 ; WX 602 ; N uni01EC ; B 57 -201 545 899 ; C -1 ; WX 602 ; N uni01ED ; B 66 -201 536 745 ; C -1 ; WX 602 ; N Scommaaccent ; B 67 -228 537 743 ; C -1 ; WX 602 ; N scommaaccent ; B 104 -228 503 561 ; C -1 ; WX 602 ; N uni021A ; B 22 -228 580 730 ; C -1 ; WX 602 ; N uni021B ; B 63 -228 504 703 ; C -1 ; WX 602 ; N uni022B ; B 66 -15 536 900 ; C -1 ; WX 602 ; N uni022D ; B 66 -15 536 900 ; C -1 ; WX 602 ; N uni022E ; B 57 -15 545 914 ; C -1 ; WX 602 ; N uni022F ; B 66 -15 536 758 ; C -1 ; WX 602 ; N uni0231 ; B 66 -15 536 900 ; C -1 ; WX 602 ; N uni0232 ; B 18 0 584 899 ; C -1 ; WX 602 ; N uni0233 ; B 50 -209 563 745 ; C -1 ; WX 602 ; N dotlessj ; B 90 -209 383 547 ; C -1 ; WX 602 ; N uni0250 ; B 74 -15 528 561 ; C -1 ; WX 602 ; N uni0251 ; B 76 -15 526 561 ; C -1 ; WX 602 ; N uni0252 ; B 76 -15 526 561 ; C -1 ; WX 602 ; N uni0253 ; B 76 -15 526 760 ; C -1 ; WX 602 ; N uni0254 ; B 89 -15 513 561 ; C -1 ; WX 602 ; N uni0255 ; B 84 -73 518 559 ; C -1 ; WX 602 ; N uni0256 ; B 76 -209 526 760 ; C -1 ; WX 602 ; N uni0257 ; B 76 -15 526 760 ; C -1 ; WX 602 ; N uni0258 ; B 59 -15 543 561 ; C -1 ; WX 602 ; N uni0259 ; B 59 -15 543 561 ; C -1 ; WX 602 ; N uni025A ; B 14 -15 588 561 ; C -1 ; WX 602 ; N uni025B ; B 82 -11 520 561 ; C -1 ; WX 602 ; N uni025C ; B 82 -11 520 561 ; C -1 ; WX 602 ; N uni025D ; B 27 -11 575 561 ; C -1 ; WX 602 ; N uni025E ; B 85 -21 517 560 ; C -1 ; WX 602 ; N uni025F ; B 97 -209 505 547 ; C -1 ; WX 602 ; N uni0260 ; B 76 -215 526 760 ; C -1 ; WX 602 ; N uni0261 ; B 76 -215 526 545 ; C -1 ; WX 602 ; N uni0262 ; B 59 0 543 575 ; C -1 ; WX 602 ; N uni0263 ; B 50 -211 553 547 ; C -1 ; WX 602 ; N uni0264 ; B 50 0 553 547 ; C -1 ; WX 602 ; N uni0265 ; B 92 -210 511 546 ; C -1 ; WX 602 ; N uni0266 ; B 92 0 511 760 ; C -1 ; WX 602 ; N uni0267 ; B 92 -209 511 760 ; C -1 ; WX 602 ; N uni0268 ; B 69 0 525 760 ; C -1 ; WX 602 ; N uni0269 ; B 96 0 506 547 ; C -1 ; WX 602 ; N uni026A ; B 77 0 525 547 ; C -1 ; WX 602 ; N uni026B ; B 42 0 560 766 ; C -1 ; WX 602 ; N uni026C ; B 76 0 526 766 ; C -1 ; WX 602 ; N uni026D ; B 87 -209 515 766 ; C -1 ; WX 602 ; N uni026E ; B 19 -213 583 766 ; C -1 ; WX 602 ; N uni026F ; B 50 0 552 561 ; C -1 ; WX 602 ; N uni0270 ; B 50 -210 552 561 ; C -1 ; WX 602 ; N uni0271 ; B 50 -209 552 561 ; C -1 ; WX 602 ; N uni0272 ; B 87 -209 515 561 ; C -1 ; WX 602 ; N uni0273 ; B 87 -209 515 561 ; C -1 ; WX 602 ; N uni0274 ; B 70 0 532 561 ; C -1 ; WX 602 ; N uni0275 ; B 66 -15 536 561 ; C -1 ; WX 602 ; N uni0276 ; B 33 0 569 547 ; C -1 ; WX 602 ; N uni0277 ; B 83 -15 519 561 ; C -1 ; WX 602 ; N uni0278 ; B 66 -208 536 760 ; C -1 ; WX 602 ; N uni0279 ; B 140 -14 462 547 ; C -1 ; WX 602 ; N uni027A ; B 140 -207 462 562 ; C -1 ; WX 602 ; N uni027B ; B 84 -209 518 547 ; C -1 ; WX 602 ; N uni027C ; B 140 -209 462 561 ; C -1 ; WX 602 ; N uni027D ; B 140 -209 462 561 ; C -1 ; WX 602 ; N uni027E ; B 77 0 525 561 ; C -1 ; WX 602 ; N uni027F ; B 77 0 525 561 ; C -1 ; WX 602 ; N uni0280 ; B 59 0 543 547 ; C -1 ; WX 602 ; N uni0281 ; B 59 0 543 547 ; C -1 ; WX 602 ; N uni0282 ; B 92 -209 511 561 ; C -1 ; WX 602 ; N uni0283 ; B 114 -209 488 760 ; C -1 ; WX 602 ; N uni0284 ; B 114 -209 488 760 ; C -1 ; WX 602 ; N uni0285 ; B 114 -209 488 550 ; C -1 ; WX 602 ; N uni0286 ; B 57 -209 545 760 ; C -1 ; WX 602 ; N uni0287 ; B 130 -156 472 547 ; C -1 ; WX 602 ; N uni0288 ; B 130 -208 472 703 ; C -1 ; WX 602 ; N uni0289 ; B -16 -15 618 547 ; C -1 ; WX 602 ; N uni028A ; B 46 -15 556 547 ; C -1 ; WX 602 ; N uni028B ; B 75 0 527 547 ; C -1 ; WX 602 ; N uni028C ; B 34 0 568 547 ; C -1 ; WX 602 ; N uni028D ; B 7 0 595 547 ; C -1 ; WX 602 ; N uni028E ; B 34 0 568 755 ; C -1 ; WX 602 ; N uni028F ; B 49 0 553 562 ; C -1 ; WX 602 ; N uni0290 ; B 94 -209 508 547 ; C -1 ; WX 602 ; N uni0291 ; B 81 -55 521 547 ; C -1 ; WX 602 ; N uni0292 ; B 61 -213 542 547 ; C -1 ; WX 602 ; N uni0293 ; B 51 -213 551 547 ; C -1 ; WX 602 ; N uni0294 ; B 94 0 508 759 ; C -1 ; WX 602 ; N uni0295 ; B 94 0 508 759 ; C -1 ; WX 602 ; N uni0296 ; B 94 0 508 759 ; C -1 ; WX 602 ; N uni0297 ; B 94 -214 508 759 ; C -1 ; WX 602 ; N uni0298 ; B 46 22 557 533 ; C -1 ; WX 602 ; N uni0299 ; B 102 0 500 562 ; C -1 ; WX 602 ; N uni029A ; B 85 -21 517 560 ; C -1 ; WX 602 ; N uni029B ; B 48 0 553 759 ; C -1 ; WX 602 ; N uni029C ; B 70 0 532 561 ; C -1 ; WX 602 ; N uni029D ; B 98 -209 504 760 ; C -1 ; WX 602 ; N uni029E ; B 58 -213 544 547 ; C -1 ; WX 602 ; N uni029F ; B 119 0 483 561 ; C -1 ; WX 602 ; N uni02A0 ; B 41 -209 561 759 ; C -1 ; WX 602 ; N uni02A1 ; B 94 0 508 759 ; C -1 ; WX 602 ; N uni02A2 ; B 94 0 508 759 ; C -1 ; WX 602 ; N uni02A3 ; B 14 -15 575 760 ; C -1 ; WX 602 ; N uni02A4 ; B 13 -213 588 760 ; C -1 ; WX 602 ; N uni02A5 ; B 26 -55 575 760 ; C -1 ; WX 602 ; N uni02A6 ; B 74 -15 528 703 ; C -1 ; WX 602 ; N uni02A7 ; B 74 -209 526 760 ; C -1 ; WX 602 ; N uni02A8 ; B 88 -71 509 703 ; C -1 ; WX 602 ; N uni02A9 ; B 66 -209 535 760 ; C -1 ; WX 602 ; N uni02AA ; B 112 -15 490 760 ; C -1 ; WX 602 ; N uni02AB ; B 107 0 494 760 ; C -1 ; WX 602 ; N uni02AC ; B 69 -15 533 641 ; C -1 ; WX 602 ; N uni02AD ; B 69 84 533 641 ; C -1 ; WX 602 ; N uni02AE ; B 87 -214 515 760 ; C -1 ; WX 602 ; N uni02AF ; B 96 -209 506 760 ; C -1 ; WX 602 ; N uni02B0 ; B 156 333 446 760 ; C -1 ; WX 602 ; N uni02B1 ; B 156 333 446 759 ; C -1 ; WX 602 ; N uni02B2 ; B 237 217 365 760 ; C -1 ; WX 602 ; N uni02B3 ; B 200 333 402 648 ; C -1 ; WX 602 ; N uni02B4 ; B 200 326 402 641 ; C -1 ; WX 602 ; N uni02B5 ; B 164 217 438 641 ; C -1 ; WX 602 ; N uni02B6 ; B 148 333 454 641 ; C -1 ; WX 602 ; N uni02B7 ; B 69 333 533 641 ; C -1 ; WX 602 ; N uni02B8 ; B 133 217 469 641 ; C -1 ; WX 602 ; N uni02BB ; B 226 472 397 760 ; C -1 ; WX 602 ; N afii57929 ; B 226 472 397 760 ; C -1 ; WX 602 ; N uni02C0 ; B 171 452 431 878 ; C -1 ; WX 602 ; N uni02C1 ; B 171 452 431 878 ; C -1 ; WX 602 ; N circumflex ; B 145 616 458 800 ; C -1 ; WX 602 ; N caron ; B 145 616 458 800 ; C -1 ; WX 602 ; N uni02D0 ; B 213 0 389 518 ; C -1 ; WX 602 ; N uni02D1 ; B 213 355 389 518 ; C -1 ; WX 602 ; N breve ; B 147 645 455 786 ; C -1 ; WX 602 ; N dotaccent ; B 250 658 352 758 ; C -1 ; WX 602 ; N ring ; B 166 609 436 878 ; C -1 ; WX 602 ; N ogonek ; B 205 -193 388 0 ; C -1 ; WX 602 ; N tilde ; B 140 639 462 777 ; C -1 ; WX 602 ; N hungarumlaut ; B 167 616 512 800 ; C -1 ; WX 602 ; N uni02E0 ; B 142 334 460 759 ; C -1 ; WX 602 ; N uni02E1 ; B 272 452 330 878 ; C -1 ; WX 602 ; N uni02E2 ; B 169 452 433 774 ; C -1 ; WX 602 ; N uni02E3 ; B 133 452 469 759 ; C -1 ; WX 602 ; N uni02E4 ; B 171 452 431 878 ; C -1 ; WX 602 ; N gravecomb ; B 136 616 371 800 ; C -1 ; WX 602 ; N acutecomb ; B 231 616 466 800 ; C -1 ; WX 602 ; N uni0302 ; B 145 616 458 800 ; C -1 ; WX 602 ; N tildecomb ; B 140 639 462 777 ; C -1 ; WX 602 ; N uni0304 ; B 154 672 447 746 ; C -1 ; WX 602 ; N uni0306 ; B 147 645 455 786 ; C -1 ; WX 602 ; N uni0307 ; B 250 658 352 758 ; C -1 ; WX 602 ; N uni0308 ; B 155 659 446 758 ; C -1 ; WX 602 ; N uni030A ; B 166 609 436 878 ; C -1 ; WX 602 ; N uni030B ; B 167 616 512 800 ; C -1 ; WX 602 ; N uni030C ; B 145 616 458 800 ; C -1 ; WX 602 ; N uni0312 ; B 229 472 392 641 ; C -1 ; WX 602 ; N uni0321 ; B 245 -209 514 63 ; C -1 ; WX 602 ; N uni0322 ; B 88 -209 357 63 ; C -1 ; WX 602 ; N uni0326 ; B 199 -228 362 -58 ; C -1 ; WX 602 ; N Omega ; B 36 0 566 713 ; C -1 ; WX 602 ; N pi ; B 39 -20 578 538 ; C -1 ; WX 602 ; N uni0400 ; B 96 0 539 928 ; C -1 ; WX 602 ; N afii10023 ; B 96 0 539 914 ; C -1 ; WX 602 ; N afii10051 ; B -33 -230 555 730 ; C -1 ; WX 602 ; N afii10052 ; B 104 0 557 928 ; C -1 ; WX 602 ; N afii10053 ; B 67 -15 524 743 ; C -1 ; WX 602 ; N afii10054 ; B 67 -15 537 743 ; C -1 ; WX 602 ; N afii10055 ; B 98 0 503 730 ; C -1 ; WX 602 ; N afii10056 ; B 98 0 503 914 ; C -1 ; WX 602 ; N afii10057 ; B 53 -15 467 730 ; C -1 ; WX 602 ; N afii10058 ; B -45 -15 624 730 ; C -1 ; WX 602 ; N afii10059 ; B 43 0 628 730 ; C -1 ; WX 602 ; N afii10060 ; B -33 0 555 730 ; C -1 ; WX 602 ; N afii10061 ; B 66 0 599 928 ; C -1 ; WX 602 ; N uni040D ; B 67 0 535 928 ; C -1 ; WX 602 ; N afii10062 ; B 50 0 563 929 ; C -1 ; WX 602 ; N afii10145 ; B 66 -153 536 730 ; C -1 ; WX 602 ; N afii10017 ; B 18 0 584 730 ; C -1 ; WX 602 ; N afii10018 ; B 81 0 556 730 ; C -1 ; WX 602 ; N afii10019 ; B 81 0 556 730 ; C -1 ; WX 602 ; N afii10020 ; B 104 0 557 730 ; C -1 ; WX 602 ; N afii10021 ; B 10 -169 581 730 ; C -1 ; WX 602 ; N afii10022 ; B 96 0 539 730 ; C -1 ; WX 602 ; N afii10024 ; B 8 0 594 730 ; C -1 ; WX 602 ; N afii10025 ; B 66 -15 527 743 ; C -1 ; WX 602 ; N afii10026 ; B 67 0 535 730 ; C -1 ; WX 602 ; N afii10027 ; B 67 0 535 929 ; C -1 ; WX 602 ; N afii10028 ; B 66 0 599 730 ; C -1 ; WX 602 ; N afii10029 ; B -20 -15 549 730 ; C -1 ; WX 602 ; N afii10030 ; B 41 0 560 730 ; C -1 ; WX 602 ; N afii10031 ; B 66 0 536 730 ; C -1 ; WX 602 ; N afii10032 ; B 57 -15 545 743 ; C -1 ; WX 602 ; N afii10033 ; B 66 0 536 730 ; C -1 ; WX 602 ; N afii10034 ; B 96 0 558 730 ; C -1 ; WX 602 ; N afii10035 ; B 67 -15 524 743 ; C -1 ; WX 602 ; N afii10036 ; B 22 0 580 730 ; C -1 ; WX 602 ; N afii10037 ; B 50 0 563 730 ; C -1 ; WX 602 ; N afii10038 ; B 57 -138 545 800 ; C -1 ; WX 602 ; N afii10039 ; B 8 0 593 730 ; C -1 ; WX 602 ; N afii10040 ; B 28 -158 579 730 ; C -1 ; WX 602 ; N afii10041 ; B 68 0 535 730 ; C -1 ; WX 602 ; N afii10042 ; B 55 0 544 730 ; C -1 ; WX 602 ; N afii10043 ; B 9 -153 583 730 ; C -1 ; WX 602 ; N afii10044 ; B 15 0 558 730 ; C -1 ; WX 602 ; N afii10045 ; B 31 0 621 730 ; C -1 ; WX 602 ; N afii10046 ; B 96 0 558 730 ; C -1 ; WX 602 ; N afii10047 ; B 67 -15 524 743 ; C -1 ; WX 602 ; N afii10048 ; B -20 -15 585 743 ; C -1 ; WX 602 ; N afii10049 ; B 69 0 603 730 ; C -1 ; WX 602 ; N afii10065 ; B 64 -15 518 561 ; C -1 ; WX 602 ; N afii10066 ; B 66 -15 536 761 ; C -1 ; WX 602 ; N afii10067 ; B 96 0 514 547 ; C -1 ; WX 602 ; N afii10068 ; B 125 0 493 547 ; C -1 ; WX 602 ; N afii10069 ; B 54 -123 554 547 ; C -1 ; WX 602 ; N afii10070 ; B 60 -15 543 561 ; C -1 ; WX 602 ; N afii10072 ; B 36 0 572 547 ; C -1 ; WX 602 ; N afii10073 ; B 88 -15 506 553 ; C -1 ; WX 602 ; N afii10074 ; B 95 0 513 547 ; C -1 ; WX 602 ; N afii10075 ; B 95 0 513 760 ; C -1 ; WX 602 ; N afii10076 ; B 115 0 587 547 ; C -1 ; WX 602 ; N afii10077 ; B -10 -10 513 547 ; C -1 ; WX 602 ; N afii10078 ; B 29 0 576 547 ; C -1 ; WX 602 ; N afii10079 ; B 95 0 513 547 ; C -1 ; WX 602 ; N afii10080 ; B 66 -15 536 561 ; C -1 ; WX 602 ; N afii10081 ; B 95 0 513 547 ; C -1 ; WX 602 ; N afii10082 ; B 92 -209 542 561 ; C -1 ; WX 602 ; N afii10083 ; B 95 -15 519 561 ; C -1 ; WX 602 ; N afii10084 ; B 109 0 504 547 ; C -1 ; WX 602 ; N afii10085 ; B 50 -209 563 547 ; C -1 ; WX 602 ; N afii10086 ; B 52 -113 550 639 ; C -1 ; WX 602 ; N afii10087 ; B 37 0 565 547 ; C -1 ; WX 602 ; N afii10088 ; B 50 -140 557 547 ; C -1 ; WX 602 ; N afii10089 ; B 95 0 514 548 ; C -1 ; WX 602 ; N afii10090 ; B 55 0 544 547 ; C -1 ; WX 602 ; N afii10091 ; B 9 -153 583 547 ; C -1 ; WX 602 ; N afii10092 ; B 39 0 579 548 ; C -1 ; WX 602 ; N afii10093 ; B 46 0 547 548 ; C -1 ; WX 602 ; N afii10094 ; B 96 0 514 548 ; C -1 ; WX 602 ; N afii10095 ; B 95 -15 519 561 ; C -1 ; WX 602 ; N afii10096 ; B 38 -15 571 561 ; C -1 ; WX 602 ; N afii10097 ; B 73 0 481 547 ; C -1 ; WX 602 ; N uni0450 ; B 60 -15 543 804 ; C -1 ; WX 602 ; N afii10071 ; B 60 -15 543 719 ; C -1 ; WX 602 ; N afii10099 ; B 2 -204 514 760 ; C -1 ; WX 602 ; N afii10100 ; B 125 0 506 804 ; C -1 ; WX 602 ; N afii10101 ; B 95 -15 519 561 ; C -1 ; WX 602 ; N afii10102 ; B 104 -15 503 561 ; C -1 ; WX 602 ; N afii10103 ; B 86 0 534 760 ; C -1 ; WX 602 ; N afii10104 ; B 86 0 534 719 ; C -1 ; WX 602 ; N afii10105 ; B 90 -209 383 760 ; C -1 ; WX 602 ; N afii10106 ; B -10 -10 608 547 ; C -1 ; WX 602 ; N afii10107 ; B 52 0 595 547 ; C -1 ; WX 602 ; N afii10108 ; B 2 0 514 760 ; C -1 ; WX 602 ; N afii10109 ; B 115 0 587 804 ; C -1 ; WX 602 ; N uni045D ; B 95 0 513 804 ; C -1 ; WX 602 ; N afii10110 ; B 50 -209 563 760 ; C -1 ; WX 602 ; N afii10193 ; B 95 -135 513 547 ; C -1 ; WX 602 ; N afii10050 ; B 104 0 557 879 ; C -1 ; WX 602 ; N afii10098 ; B 125 0 494 701 ; C -1 ; WX 602 ; N uni0492 ; B 41 0 557 730 ; C -1 ; WX 602 ; N uni0493 ; B 62 0 493 547 ; C -1 ; WX 602 ; N uni049A ; B 66 -158 598 730 ; C -1 ; WX 602 ; N uni049B ; B 115 -140 587 547 ; C -1 ; WX 602 ; N uni04B2 ; B 8 -158 594 730 ; C -1 ; WX 602 ; N uni04B3 ; B 37 -140 566 547 ; C -1 ; WX 602 ; N uni1E12 ; B 66 -190 541 730 ; C -1 ; WX 602 ; N uni1E13 ; B 60 -255 509 760 ; C -1 ; WX 602 ; N uni1E3C ; B 104 -190 557 730 ; C -1 ; WX 602 ; N uni1E3D ; B 78 -241 516 766 ; C -1 ; WX 602 ; N uni1E44 ; B 67 0 535 902 ; C -1 ; WX 602 ; N uni1E45 ; B 95 0 514 720 ; C -1 ; WX 602 ; N uni1E4A ; B 67 -190 535 730 ; C -1 ; WX 602 ; N uni1E4B ; B 95 -241 514 561 ; C -1 ; WX 602 ; N uni1E70 ; B 22 -190 580 730 ; C -1 ; WX 602 ; N uni1E71 ; B 63 -240 504 703 ; C -1 ; WX 602 ; N Wgrave ; B 0 0 603 986 ; C -1 ; WX 602 ; N wgrave ; B 0 0 603 804 ; C -1 ; WX 602 ; N Wacute ; B 0 0 603 986 ; C -1 ; WX 602 ; N wacute ; B 0 0 603 804 ; C -1 ; WX 602 ; N Wdieresis ; B 0 0 603 901 ; C -1 ; WX 602 ; N wdieresis ; B 0 0 603 719 ; C -1 ; WX 602 ; N Ygrave ; B 18 0 584 986 ; C -1 ; WX 602 ; N ygrave ; B 50 -209 563 804 ; C -1 ; WX 602 ; N uni2010 ; B 173 233 429 314 ; C -1 ; WX 602 ; N uni2011 ; B 173 233 429 314 ; C -1 ; WX 602 ; N figuredash ; B 0 240 603 310 ; C -1 ; WX 602 ; N endash ; B 0 240 603 310 ; C -1 ; WX 602 ; N emdash ; B 0 240 603 310 ; C -1 ; WX 602 ; N afii00208 ; B 0 240 603 310 ; C -1 ; WX 602 ; N quoteleft ; B 226 472 397 760 ; C -1 ; WX 602 ; N quoteright ; B 226 472 397 760 ; C -1 ; WX 602 ; N quotesinglbase ; B 196 -141 369 148 ; C -1 ; WX 602 ; N quotedblleft ; B 103 472 500 760 ; C -1 ; WX 602 ; N quotedblright ; B 103 472 499 760 ; C -1 ; WX 602 ; N quotedblbase ; B 103 -141 499 148 ; C -1 ; WX 602 ; N dagger ; B 79 -97 523 730 ; C -1 ; WX 602 ; N daggerdbl ; B 79 -97 523 730 ; C -1 ; WX 602 ; N bullet ; B 155 227 446 517 ; C -1 ; WX 602 ; N ellipsis ; B 39 0 563 149 ; C -1 ; WX 602 ; N perthousand ; B 0 0 603 700 ; C -1 ; WX 602 ; N guilsinglleft ; B 168 68 398 518 ; C -1 ; WX 602 ; N guilsinglright ; B 205 68 435 518 ; C -1 ; WX 602 ; N uni207F ; B 156 333 450 648 ; C -1 ; WX 602 ; N Euro ; B 18 -15 519 743 ; C -1 ; WX 602 ; N trademark ; B 0 446 550 730 ; C -1 ; WX 602 ; N partialdiff ; B 92 -13 512 647 ; C -1 ; WX 602 ; N Delta ; B -3 0 606 695 ; C -1 ; WX 602 ; N product ; B 74 -213 528 742 ; C -1 ; WX 602 ; N summation ; B 69 -213 530 742 ; C -1 ; WX 602 ; N minus ; B 42 271 560 355 ; C -1 ; WX 602 ; N fraction ; B 49 -93 527 730 ; C -1 ; WX 602 ; N periodcentered ; B 238 272 362 422 ; C -1 ; WX 602 ; N radical ; B 28 -20 579 829 ; C -1 ; WX 602 ; N infinity ; B 20 122 583 493 ; C -1 ; WX 602 ; N integral ; B 62 -182 538 757 ; C -1 ; WX 602 ; N approxequal ; B 42 148 560 471 ; C -1 ; WX 602 ; N notequal ; B 42 18 560 608 ; C -1 ; WX 602 ; N lessequal ; B 41 0 559 531 ; C -1 ; WX 602 ; N greaterequal ; B 42 0 560 531 ; C -1 ; WX 602 ; N house ; B 71 0 531 596 ; C -1 ; WX 602 ; N revlogicalnot ; B 42 181 560 421 ; C -1 ; WX 602 ; N uni2311 ; B 47 126 555 634 ; C -1 ; WX 602 ; N uni2319 ; B 42 181 560 421 ; C -1 ; WX 602 ; N uni237D ; B 12 -228 590 89 ; C -1 ; WX 602 ; N uni2423 ; B 73 -228 529 89 ; C -1 ; WX 602 ; N SF100000 ; B -10 39 612 124 ; C -1 ; WX 602 ; N uni2501 ; B -10 -3 612 166 ; C -1 ; WX 602 ; N SF110000 ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni2503 ; B 222 -505 379 770 ; C -1 ; WX 602 ; N uni2504 ; B -10 39 612 124 ; C -1 ; WX 602 ; N uni2505 ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni2506 ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni2507 ; B 222 -505 379 770 ; C -1 ; WX 602 ; N uni2508 ; B -11 39 612 124 ; C -1 ; WX 602 ; N uni2509 ; B -10 -3 613 166 ; C -1 ; WX 602 ; N uni250A ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni250B ; B 222 -505 379 770 ; C -1 ; WX 602 ; N SF010000 ; B 261 -505 612 124 ; C -1 ; WX 602 ; N uni250D ; B 261 -505 612 166 ; C -1 ; WX 602 ; N uni250E ; B 222 -505 612 124 ; C -1 ; WX 602 ; N uni250F ; B 222 -505 612 166 ; C -1 ; WX 602 ; N SF030000 ; B -10 -505 340 124 ; C -1 ; WX 602 ; N uni2511 ; B -10 -505 340 166 ; C -1 ; WX 602 ; N uni2512 ; B -10 -505 379 124 ; C -1 ; WX 602 ; N uni2513 ; B -10 -505 379 166 ; C -1 ; WX 602 ; N SF020000 ; B 261 39 612 770 ; C -1 ; WX 602 ; N uni2515 ; B 261 -3 612 770 ; C -1 ; WX 602 ; N uni2516 ; B 222 39 612 770 ; C -1 ; WX 602 ; N uni2517 ; B 222 -3 612 770 ; C -1 ; WX 602 ; N SF040000 ; B -10 39 340 770 ; C -1 ; WX 602 ; N uni2519 ; B -10 -3 340 770 ; C -1 ; WX 602 ; N uni251A ; B -10 39 379 770 ; C -1 ; WX 602 ; N uni251B ; B -10 -3 379 770 ; C -1 ; WX 602 ; N SF080000 ; B 261 -505 612 770 ; C -1 ; WX 602 ; N uni251D ; B 261 -505 612 770 ; C -1 ; WX 602 ; N uni251E ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni251F ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2520 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2521 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2522 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N uni2523 ; B 222 -505 612 770 ; C -1 ; WX 602 ; N SF090000 ; B -10 -505 340 770 ; C -1 ; WX 602 ; N uni2525 ; B -10 -505 340 770 ; C -1 ; WX 602 ; N uni2526 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni2527 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni2528 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni2529 ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni252A ; B -10 -505 379 770 ; C -1 ; WX 602 ; N uni252B ; B -10 -505 379 770 ; C -1 ; WX 602 ; N SF060000 ; B -10 -505 612 124 ; C -1 ; WX 602 ; N uni252D ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni252E ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni252F ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni2530 ; B -10 -505 612 124 ; C -1 ; WX 602 ; N uni2531 ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni2532 ; B -10 -505 612 166 ; C -1 ; WX 602 ; N uni2533 ; B -10 -505 612 166 ; C -1 ; WX 602 ; N SF070000 ; B -10 39 612 770 ; C -1 ; WX 602 ; N uni2535 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni2536 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni2537 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni2538 ; B -10 39 612 770 ; C -1 ; WX 602 ; N uni2539 ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni253A ; B -10 -3 612 770 ; C -1 ; WX 602 ; N uni253B ; B -10 -3 612 770 ; C -1 ; WX 602 ; N SF050000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni253D ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni253E ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni253F ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2540 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2541 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2542 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2543 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2544 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2545 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2546 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2547 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2548 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2549 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni254A ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni254B ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni254C ; B -10 39 612 124 ; C -1 ; WX 602 ; N uni254D ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni254E ; B 261 -505 340 770 ; C -1 ; WX 602 ; N uni254F ; B 222 -505 379 770 ; C -1 ; WX 602 ; N SF430000 ; B -10 -45 612 208 ; C -1 ; WX 602 ; N SF240000 ; B 183 -505 418 770 ; C -1 ; WX 602 ; N SF510000 ; B 261 -505 612 208 ; C -1 ; WX 602 ; N SF520000 ; B 183 -505 612 124 ; C -1 ; WX 602 ; N SF390000 ; B 183 -505 612 208 ; C -1 ; WX 602 ; N SF220000 ; B -10 -505 340 208 ; C -1 ; WX 602 ; N SF210000 ; B -10 -505 418 124 ; C -1 ; WX 602 ; N SF250000 ; B -10 -505 418 208 ; C -1 ; WX 602 ; N SF500000 ; B 261 -45 612 770 ; C -1 ; WX 602 ; N SF490000 ; B 183 39 612 770 ; C -1 ; WX 602 ; N SF380000 ; B 183 -45 612 770 ; C -1 ; WX 602 ; N SF280000 ; B -10 -45 340 770 ; C -1 ; WX 602 ; N SF270000 ; B -10 39 418 770 ; C -1 ; WX 602 ; N SF260000 ; B -10 -45 418 770 ; C -1 ; WX 602 ; N SF360000 ; B 261 -505 612 770 ; C -1 ; WX 602 ; N SF370000 ; B 183 -505 612 770 ; C -1 ; WX 602 ; N SF420000 ; B 183 -505 612 770 ; C -1 ; WX 602 ; N SF190000 ; B -10 -505 340 770 ; C -1 ; WX 602 ; N SF200000 ; B -10 -505 418 770 ; C -1 ; WX 602 ; N SF230000 ; B -10 -505 418 770 ; C -1 ; WX 602 ; N SF470000 ; B -10 -505 612 208 ; C -1 ; WX 602 ; N SF480000 ; B -10 -505 612 124 ; C -1 ; WX 602 ; N SF410000 ; B -10 -505 612 208 ; C -1 ; WX 602 ; N SF450000 ; B -10 -45 612 770 ; C -1 ; WX 602 ; N SF460000 ; B -10 39 612 770 ; C -1 ; WX 602 ; N SF400000 ; B -10 -45 612 770 ; C -1 ; WX 602 ; N SF540000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N SF530000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N SF440000 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni256D ; B 261 -505 612 124 ; C -1 ; WX 602 ; N uni256E ; B -10 -505 340 124 ; C -1 ; WX 602 ; N uni256F ; B -10 39 340 770 ; C -1 ; WX 602 ; N uni2570 ; B 261 39 612 770 ; C -1 ; WX 602 ; N uni2571 ; B -54 -505 656 770 ; C -1 ; WX 602 ; N uni2572 ; B -54 -505 656 770 ; C -1 ; WX 602 ; N uni2573 ; B -54 -505 656 770 ; C -1 ; WX 602 ; N uni2574 ; B -10 39 311 124 ; C -1 ; WX 602 ; N uni2575 ; B 261 81 340 770 ; C -1 ; WX 602 ; N uni2576 ; B 310 39 612 124 ; C -1 ; WX 602 ; N uni2577 ; B 261 -505 340 82 ; C -1 ; WX 602 ; N uni2578 ; B -10 -3 311 166 ; C -1 ; WX 602 ; N uni2579 ; B 222 81 379 770 ; C -1 ; WX 602 ; N uni257A ; B 310 -3 612 166 ; C -1 ; WX 602 ; N uni257B ; B 222 -505 379 82 ; C -1 ; WX 602 ; N uni257C ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni257D ; B 222 -505 379 770 ; C -1 ; WX 602 ; N uni257E ; B -10 -3 612 166 ; C -1 ; WX 602 ; N uni257F ; B 222 -505 379 770 ; C -1 ; WX 602 ; N upblock ; B -10 132 612 770 ; C -1 ; WX 602 ; N uni2581 ; B -10 -505 612 -345 ; C -1 ; WX 602 ; N uni2582 ; B -10 -505 612 -186 ; C -1 ; WX 602 ; N uni2583 ; B -10 -505 612 -26 ; C -1 ; WX 602 ; N dnblock ; B -10 -505 612 133 ; C -1 ; WX 602 ; N uni2585 ; B -10 -505 612 292 ; C -1 ; WX 602 ; N uni2586 ; B -10 -505 612 451 ; C -1 ; WX 602 ; N uni2587 ; B -10 -505 612 611 ; C -1 ; WX 602 ; N block ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2589 ; B -10 -505 535 770 ; C -1 ; WX 602 ; N uni258A ; B -10 -505 457 770 ; C -1 ; WX 602 ; N uni258B ; B -10 -505 379 770 ; C -1 ; WX 602 ; N lfblock ; B -10 -505 301 770 ; C -1 ; WX 602 ; N uni258D ; B -10 -505 224 770 ; C -1 ; WX 602 ; N uni258E ; B -10 -505 146 770 ; C -1 ; WX 602 ; N uni258F ; B -10 -505 68 770 ; C -1 ; WX 602 ; N rtblock ; B 301 -505 612 770 ; C -1 ; WX 602 ; N ltshade ; B -10 -505 535 770 ; C -1 ; WX 602 ; N shade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N dkshade ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni2594 ; B -10 610 612 770 ; C -1 ; WX 602 ; N uni2595 ; B 534 -505 612 770 ; C -1 ; WX 602 ; N uni2596 ; B -10 -505 301 133 ; C -1 ; WX 602 ; N uni2597 ; B 301 -505 612 133 ; C -1 ; WX 602 ; N uni2598 ; B -10 132 301 770 ; C -1 ; WX 602 ; N uni2599 ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259A ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259B ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259C ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259D ; B 301 132 612 770 ; C -1 ; WX 602 ; N uni259E ; B -10 -505 612 770 ; C -1 ; WX 602 ; N uni259F ; B -10 -505 612 770 ; C -1 ; WX 602 ; N lozenge ; B 57 -233 545 808 ; C -1 ; WX 602 ; N uni2638 ; B 17 103 586 657 ; C -1 ; WX 602 ; N fi ; B 17 0 527 760 ; C -1 ; WX 602 ; N fl ; B 17 0 527 760 ; C -1 ; WX 602 ; N uniFFFD ; B 40 -84 562 887 ; C -1 ; WX 602 ; N dlLtcaron ; B 231 616 363 800 ; C -1 ; WX 602 ; N Diaeresis ; B 155 631 446 731 ; C -1 ; WX 602 ; N Acute ; B 231 616 419 746 ; C -1 ; WX 602 ; N Tilde ; B 140 631 462 739 ; C -1 ; WX 602 ; N Grave ; B 184 616 371 746 ; C -1 ; WX 602 ; N Circumflex ; B 151 616 451 747 ; C -1 ; WX 602 ; N Caron ; B 151 616 451 747 ; C -1 ; WX 602 ; N fractionslash ; B 13 246 544 427 ; C -1 ; WX 602 ; N foursuperior ; B 130 326 444 734 ; C -1 ; WX 602 ; N Breve ; B 147 627 455 747 ; C -1 ; WX 602 ; N Dotaccent ; B 250 631 352 732 ; C -1 ; WX 602 ; N Hungarumlaut ; B 167 616 511 746 ; C -1 ; WX 602 ; N Doubleacute ; B 91 616 435 746 ; EndCharMetrics EndFontMetrics htmldoc-1.8.27/fonts/Sans-Bold.pfa0100664000212600000240000053203510330505373015334 0ustar mikeuser%!PS-AdobeFont-1.0: Sans-Bold 1.15 %%DocumentSuppliedResources: font Sans-Bold %%Title: Sans-Bold %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Sans-Bold known{/Sans-Bold findfont dup/UniqueID known{dup /UniqueID get 4209453 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Sans-Bold def /FontBBox {-408 -1034 3093 2162 }readonly def /UniqueID 4209453 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Sans Bold) readonly def /FamilyName (Sans) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -227 def /UnderlineThickness 258 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 0DCCF38C0827DAD224D244BCEBF02037A8EDAC52137129BF554E7742FD6F842C1F7A0129 4B32735E2577A5C1CE23FD038AC327657DDA7DB3208E0D3B03084E72C817100546E1610F 8DD1C5DCEAA480A967EAEF0A94D7703E669DECE5AE935F403F8F5DFCADC670DA86DAEB05 7B0B3C26740B57404C7FAE7E4493292E4F09E376A16316442AB6DEBBEE780745085F1DDD CAF11C9EEAB5EE6EAB731E090C8999F072ADBCB7B3C92A6C5BFC641D64568722EFF630A8 038A5073276E308504BA9F61F7FF0D8D9664E17BCDA15FFDD5FAD3325FCA7CC442E12EB3 B5DAE979ADF05DCC3210DD5B477ED9FE7DD447A468FB122A169ACCAE684A584C66C61C99 652E6BB9BC5699C9E3E2AF2B51A838A258AA9FC5961D99A9371B77A7C6220269039903A0 2705655DCE1F6F1036639E59E2A3DB76B5ECE66F3D5830911EDA758620C70ED22767F8E9 30E0CD470A87463C8E761E000CDEE37A0F01796EC83B844D29BD84B0669AA10D52ADFC91 06C44CB6FDC873F82F7FD21FD62B350346F01B7EFF3EEEB8C3C20DCF8F243E5B6C7D3494 5046E90A9B78DFD6DE7E7A28BBE0287F5D2F9448CCDC9C8C787FC39D2928C4BBEFAB4E12 00AD316A22C2BEA56FC10636AAAB75C3954219F274107B1CC537AC663A9E21558AD6EEAE 1E54427B51AEA6B1DBB43F0548BB91058F408413C792D754FDA4991097470046B437C2A8 780E365175384BC483ED8EAB6FAE498CE8A1EA7F5BC9CDBAB90190957548F93250535A69 058691F38DD5BF678BFC6A6B95B82FE4B99581549B2BD04EF5494D9C6A905FFC76566F0C 5C7AA09F4BDB4E09AF01A444E2238C898D3B791D853D348875E86A73480DBA941B635C26 0150AA2B93E8344B9B6D0A5D5E16E56E47F1A85B55414ED204C45BC53793A16F1330CF30 D89430873A6C4361EDDCC26D9CDBCBF732DDAC7C43C798220EA6A1DFE8D19D753C4D924C 9835E1D0AB83E0D4B5804FEBE9E9B6351CA8AEF54BA3D9ED5CC19842113CB559E9D00A44 C1317F6DEDD1616FAA449D243AD7A04A1883341F182854DAA7B5E02113E834052D8D043A A67454455AF2365E530E41B75679F71DA58E41E6034EF787D50301CAE517A7BBD6571325 B39701959F1101EF246A72FC5966720900CC9A2FD87287C8720811F95F8ADEFFA4616362 A9AB874F57E4903334E3D55484329CF7487644ED48ADDF811327BC3C40E9A538A15DE3F8 5B8772BFD3574A6133566D78AC1ECC4445A417003E263EBD55AA359EAA4204745208F45A AAE0677199A3944E8FECD018B42A4BC5D8CCBB281CC4145F334D9D37B7CD2BFB611B3176 474F1725C456875EEB0F4C71EA755AB01AC0004E6ABB1BE64EAB7CAD87229DB6A13B4486 6CD794F41FE25372030D08B43085D300377289E46CCFB937B7DD011A65A8E0BD75DC0DDB 4076E2C4AFDB69A0041BEA3184C7852579849DDDE1FAB902EB116E602FD11B7651D04422 6D0DFAA3C26A70A720AD007343DEBB9ADE03F4CB575BEF78A058A70A534DBACBBC3401B1 D61387A7FA87E03432A1BC2B8DFE314CF31EB00BD13C3F31900F98F7A0F7F821C8AE7798 D588519F23213A420010A38C1A22E475ED29B73AEE1ED6D8D96ACE3A98D169C4AD8F261C FEBF438CCC2F9AD30B452F92D13017236CDDABAD42EFBAADD791E01B9B82661B259DE3B9 F1C9936A98D9C45079D2D517CD655F84218689477E48DF0B87B9B76AADD932FC633F9179 7432B2CDA0A0276FC8478A2C186EB072DCE1B424822192CEDFA6B5FD981649BA07AD5AEE AE373899DDF699AE39AD6BD33968BD5C8F8B03D4F5DD9FC81E7D4A70FE1151D99AFDFAD5 0DA67394E518AD6937F420DB521374210F9374893F8C2D13D6D21538D71E70CD0107253A 4325E2484AE320F3FCEEF2DC6D98B58F9B1BD3762FD4680C26B441A416BFD4E0E1FB80C9 CA512B82B6B82EDEB03B8AFD478180E407C0F628FE396DD4D331B4F0FE81723A8E00BA90 6A36573CB86D985DACB86CA22507DC211B8AA95388C450B665EC3E0088CEE53F98501EE3 E59922BCF42DFC7B3D76E7BB5C6DD307C0378B0082D3B5042EEB5A162DB7445639FFF430 2C98CC420AC2C3A3D8FBBF4E0B9920D00042241705F71B0EFB7F0D09EBF59A377A0F134B DA2468274C66B634A8E96C3E48CE000F19ADBFE397C36D487F4473BFADED7CC358780BB7 B6ADBFB60AC3B73F6286112FDBADAD6CBA8282F237C8EAE20C3E8D7900FF5DFE8F8FEB8E AE37D4B4F5C949132F1244FDD866414ED5F0DD28A2DEECA7935446DC8D04E0E18978F166 B7660DC24773549B4ECE0F78A0B2F30DB9883C1E620587F22EDB28B22287474D9A11859E 5032C9B3C6CCB15559B1DC9403C38C729E7049176526B43345D286C920C6838646BBE122 ECC061B3DADB32DD5ED1079C28C609C671C0EB19A35AF14BAC1598B4C1A7BE40032BE151 F7264D4CA24632ABF1732382834C355C12127053695F53ED55DC7718C9A5876D67DEE256 ABFF37A18F790B57B91999349A912FA1E4F0AE207FA99FBAEB0829E248C2B2C386AE35EA CBA422D329A0BF81C2DCC2A01EE9153F711FE424013FEB910D232B27871A09D693B36BDE 3CBE23BFA07E873840EED4BF5E20E537072600B87B093C7C0012FCBC4AF361F5497B2CF0 12C57555044A55AB970C2E64A9A04CB1D0FAF1703EB60B97971A13E25321091116AF61DF 54CE052FCCBA0C145615E8B2C99330DBF7B9579042AB8D6304DA5C292CCA2A08A1571D8C 70C2FA94ACCE52A6D59BF53FE89CEE6094F68944BA0648043EBFE186AFA18405D219B36F 5848BC173872A7004E0B1516E7BC0D493B9C1F9034E36BE5E9AC0EF93F8735EEB9C9A630 E2159249BEB0C1C2FD06B88B611A366D2B39250CFF9AEDF9F0314B7B73ACFCA36FB62DB5 F96DA166725D721E4A8C8584A38E5740CC970244D61ACF5AAD2CC60EDD0EA23C7D779585 FDC73437B71DAEFD9F5C214DCC7F2540EF7387ECEF1E79718AE0801F259CC903B004B278 C3732EC24D11FC6B5A9D10E8157738F21BC9A38250813820EFC876F8061AB03FE849B07C 4137B3A29274406B52FFB55B329B759DE3437C9B88E8F5D2FD7783F646EAE9E84A5D0A55 5A1A43A3ED05BA089047A20929BCA2734BF5DBF65ECCD01FF04A2ED487C60CA9A0EF843D 12EFAE66AA139A4D988FDF6C3591FF401926CB3835D8B0F00BEBFB29BFE38C1737959401 4E814543BC22593578301C35A64C070404C173FCF2268CA0407FCD0F724BCA15ABAEA9A4 C9430A87CBDE7FB9BDC5B11B59F327812B3F7FC8AFC8924902F906619ED5514B800CE10C 5A907D036E6584C4DFF3A92B017B37B3CC95B5045EFDB098E07B53F67B95B437EE8FD299 B7544FFD9379DC64E702BB58F2B4E12057CE6560CF3894154FE4C90A0A1DD69CC5DD9759 0AFDC298A754A4B2FA6E2B68D54DB1F7050F74ADFAD3428690834CB805511BCF6B0E4D78 307D55D3F4F515C1BDB7390D0B29463C38C3A5335CECC6488B5FB35E446C5AD753A284C8 88D0AA472E5BFDF4C8FCB00B7B2F4EBBE1327F62D210A0DB341C4F0022EC4BF8E54627F4 877B440428AD3162ADD2315B5832911AB619AEF9C72EE3B087BB12FD605B2C4FCF860F58 C67944C034E83D555C4817DA8E462E053B1AB1F5211CEB0F4117A6F1613D335148791C6F B694D53083CAB5C7D014D37B779240D21D45CCA2412AC667158E709A0B9453FE849B0ABC 4600735EBCCC9CEA9E8F06E10EB73A88BE29939A76DE2DDEC901C7416F08AB680868539D 3B4673B6591541822C2A7402CC77A43AA01C382924855F4B890D41A6C1B323AE3CD6CEFA C8E6CD99490B49E27CD18FB1759EC094D211C9545FA833CDA4E7D9A64324E19FABCDAC2F 8B86A547E0FA258D2368C36F755019CC005AE10536FA13D69E0D470C8DE9BB07B3D7AC90 612E83CC17F34BA55F87B1FE0C09C46ABF1BE8340A19C2ACB47BF1CCF9856B3E7D2AE70A 49684656BEC669B5D436ECCCE234C13F17F8F022B949FDC9878D2F96398ACBCB29DD5E9C 2C5452222690560A28AE632E36CFBD5DC46B89AF71523EFB066A902E9A9FB104F92EA7B8 28FD2EEDEDE8845E2E104B48234D58FD1A76344038D1922FB8B3C78D0CA5A36CA2E16D94 BE65AD2BCDA1AC5457A72763F84150DEDE4042B7F179AD7D4861AC0EB6306B52A7105EA1 6B2838DD653CD5B17DC60BAD560F89C1F95396A1EA275CF0E509D9C7D88769F5D48BD74E C4943FC4A489C3155C55C3E9C7402E37974DBEBBFD3A0335BCB67C6DD8FBD29D35DA2A43 EF7C30C7021F71641106A469B11FF22B4B9DB90FAE8B4A72228947AA008D80079930A077 6F698D0129BA903B7F325F97A4E1362A3037DF709C682569BA92EA6DCB924D5E3111D575 59FFDFA739C088E84344E97DB83C0F941994B39D7C7F01E05C0A535DF8B290E0240A51E6 72B06FBD443029CF4AFD5784BE63435663AAD5ED84A099B09B86627007BF30AA8E29D49C 1364A21F04AA0BAA12929C43C4270332ECF10675B1240190899A2E5B4952D25CC82629B6 A6CEB5CC0EEBEE89F874208B2B43DB2989AD8A876F13387B77B064F2D90A0ABD46BC1AD4 B47E3CD94F96FC4DB0E466398A515BDEBACA15E6B0ABDA625F16145E1F0C30FD6F44F6B3 66F9D6E4DFED7115992925F1853970DC84570CEF9B70EF0FA1F4303AF1CEA8DB630EE3CB 2D7073D577A6857D77E682247FD4CC215693882964665CA4DDE385434FE94BE5DB1BFCC5 AD4B2EDB4F79EC95BC52B6B58312C153B20B9E9C00A1128078B607A7134E3F0AAB4A2484 52D505851BA8F82FF64CD3298D11237645507EA426CB14C1FA098F1D3E418D24FD6B9FAA A50A852C96664A074730D2C8DF7FBA94063B5FDAABC32D4836DE660D68050CE93C021F90 EF2154A2097DA30E2816C7381F7DD0D6A52DA2E5894BB6597DE2153508F4F225FAB6469B 05B97FC325BC3D939E6BFD4FB88B44F1CE7E354FAD70D969A98A82FDFFC48BF8826CEAC8 3390AED4F234AEE5F0B66BAE07DEC4257E7D162C9A0BE6EC50B40B44C5C2F9FADCE218BF 15D1C64613A0163012C46015F04BFFC990278420B81DF741B9102AC1A38B86B1EE33F0C1 F4E300406289FBD4D00C8294B2DD3C2BB101B617EC3C83AFCACDCC21416CF56351B53007 FD1132D6F65D5C5F67CA6D68CECAE52A0104606472B258370276539517B306704230825E 1EBB1677E1B6BC4B95FB74AEE616B11250E2FA070D3CCBC612C3EB58266CBEEBF4BC582A DF0F6260200C0A8E0948F91095317C7625DD5E1E90A6F66D44D00DC5B193EA66C30D6278 B53E25AC4F74876353D571D106AD695D7540258B62CFC61DDE329986130CD84A171B5EDB 50C4D32419774AAE2CE960A5FB71E70688B76623F07A35007E890E39906A3996F388885D DB8A653B577D6C916700014CA803C9F90E206BEC6C7831BA21027E588C72117C2478DDA2 5B016FDD481220EF8ABD94230D0F2B31CE500F1780D86394C6969F1CE3BF779E32EF8070 616FAAC92D94B8C3980AA7DFB0924AEE3B1404C16D522239F5DF9AFEA0F1A79E49212007 17020CEB8EA5A90C3CE6CCF3320C8324E81288CDB9D91546A5B616B5D2053E4F730A90BB A497701CF541F71491D72371C0B4BC791243854AF3484B47FC1B4F9550E5144CB2C86B5B 8E4A7A05645C4D1B0E0B8FC36B4045C16068D8B27D05E4EE93BD3A75A27529C42EF82C40 5C3F46DFFC7D1891866F878F636A888C8CE326070E52E2AB2FD7DBFCA2D9ED228D728A2C 1555290B7D301F99440B1D9926B0EECFB82D3788B5EB252CD80162580CA1538AC5E88265 319829F657E7ADE9FE86443D3DF8C83CF9EA76C376D4DCBF0A41A0D1C103829A3DB06551 D45B936C6FB8863191F877DFBA468B0B860BD2C42A984A7BE1033BD0EA0BEF5686075828 77A4CA85076E85A632B73F208C25CD583F64AF26B4248E8A5AE6DAA0B84AEF7C8E6644D1 79207755066437CB4D6C59424BF9C6616729AE6E75041F9D272A3FCAF10455C3601F9071 B0C0E0EEB02A4DC70BB16EE8FA7C6A491C3AA31C6A9B1FDA75901E5C6F1326FC8EA74B18 A552E2B97963EAFE02D20EB941E1A74CE32539C8B280ACFE6626C8118E98C5E6E1FA4A0E 47088D80342C44C8BF7AFEE3DB6C1AC7974050F600AE8EE71B430980508D970CE779AFE4 8963C6883C7DBC37F17484D20A23816F6EDBADD20B312188343B877B95549E6779924467 AD02418721E2CADDB857EC424E2C0A415671F5D06393A52DA1590DADC8EE50AB5E3C3151 B3CC9686EF4A1259130E91BEA11E3698CA13E4777742AA67037E4BEBF4B25DB781DA5D10 9B03F16374C980082A1BBDE993EE1564C81C89C8BF21D9D9E892F41562A2124D0B9EE239 C66F2B380F59A18069F76A84872C250A4A3CF84A85323FC2719A8EC2569EBB26A38CC058 B9A269A587593874C1138A7754DB7995DD2F418BE41759A43FDD0668408AB93577140155 EAAE420BEB425ECCD22C6909B911558BC734B45C7BBDBE8BF720695A0CFD6564A8E6B374 A112C98E6C0F8E621A41FCDE639F9A4E00ECAF8A51184616B0B676A3DCE272CFB83AE2AF 63BAE6B055A65347487317DF99D85C998D9447A80D9935CF643698CC04B11603314D7F12 FC905E2D6DC51FD8FFA529D61C1DA21A9599FE2B475BE00ECE845E2CBD2EF7926C774B05 C86F68BA99D042DC2B20541FC740549496AA71B07828E6AB078CED4D00B80C6427325303 FA3A0FB5FFA0F242B828865F87375D6FE2ACC1D3EFC212F1FE80FEBEE953D5C9A21A28D2 0E93C832EB11F16BDD0E6313A5322BA4FE164C5EBCDDCDFFE15EE19FBDDD27270116F60E 1CFD65FB639034E9F43F9D74DC42A84938691AD974D5E29D6F1DE7DDCE94A0E49BB4116C E68929AD08F82904A4549A075068534ECC9A6AEF2B0C50CAB47B19161FEF829C1E574F78 513AC8998F6F762CB234B4E9EFCCD6D1575310FDFD62A92291FFFE42D05FDDA3B5F67492 3A32641610CFA081B76A68418B443CFE12D85553FCA34850084BAA9676BD6ED3B452E6CC 8EC6D0D3A034E32074AE10B3A463F3F2BC3DED262DA47DA858B18417A0B5EDABA1025B06 97204A89E9A8EEF5E000F1DF31D16F8FA295CF9CEACF39C7B4AEC72FCC295DEA61DFDCF3 BC90CBA8188C6FA716C30A993EF1C5E18DE335D96584C8D40E7F673FB8B40ABD2299F3DF D9BF729DD2FD1B6022B74C47E0081BDC9D9B16F778280371E158EED7E3645EE54B96B2DA E1DBA0342151D8873A42784D551BEB55BF3B1CD13CB9FEFE0E868AA62D8AEE12DBF81DAA EEDBF821080C1FAB80C78F513991D9EAE9FA3632C82DDA6BF8CF8D0F0174F767E7D824B0 7A51CDC76BAA22C326909F75623375F0BAB1B3F2F0F18B12B7DC7CE7162D7BFC596B77B4 6535BF213DDC7A8C46AFE31BDDEA4E78D0569EF097B202EFDB09AC0F87400578A49EB085 E48B796EC47E1024177AFE57D15B1C247E731963CDE4185BF62935622FFE6E829DCFE7D0 073C3DCC2F5DF6D9447B534C0C0710D4B2793BF6E606FB1E39D055B04BCCA30F44C8B0BE 83166282A2E356C467CE4D9CB3B110894900E0274DD8C3795412CEBDFD9554C489CC7B2E 825D0D20E2D92FB6509DC726897C09FED78509FA3199CA6E8B7AA5DB11E67BB4FE5987F1 FB69E5350B281CADFAA2249AB2D813FC2991C64F3C5F871D52E6220867E083D44929DB0F 7A771D6E58778DD22FD8FFC14C2B09022FAC994EAAEC08714EE288FD06405F43D28E3D6D A0ADD43F9FFDD43A067991E62462CE7A698C026D13E8127FCAD70AB930B64E86FA60525A 8D23849E22B134744143409E8FA6ABF40DD1F36D63B82EC868FA5659D9262C142B866636 1F76046435F30D1C78ABF68BCF391A9509DC71FF4F41EFDE249570A0C288F71314B0585F 6BB583C0D72C84A2F55F1B4E3FBA401321CDB05A4DADBDCEF1E43E5E1888D2E79E1807EA CD3F4A7E49CAC4BC8F2BCACEB1FFABB627102D01558F61A10E0BA8749C2CBA55540B894F 0E95CF36E247ED9CF46EE6DC5B50ACC0EE245EDF1529F5A1231DE43256CFF919766881A0 F5D00583FB91C2B870455250B3FB2C43963EC0B17CD74D4D187B655AF0C23FEC8F651A6D C96509C8B9422E919C8AFD14AE2441F75C708517A9403BD988A68E918FF1E8FE600BA70F E81211EB5EC60FE1EDC42938489A84B588CD684C52304884C76893351D2551C35409BB59 F6F3A96B793800A125D6DD423540B8BDF40C1CC6FEEE5B8D66AC7B07B42AE533E3AA6404 58E562AD5A4EC84D41EE831290339D0D9038804029D4C7809CAF4D7FDD7FD6FE0DFA1614 5F52C5CF0DAC57D1AAB26025D82A9E9386AA6C8CF02CDC31850F90832AB4DEC5EF91D73E A43F383066436FC1F12B0E5C85CB03B3423ACBD818CE541EDD9D1FB74F312FF0D1C32068 82F23216E8511935FFD8286BF5E3087014EE0F9CDA73CE5D88735CCC2B7DDEC5F6571618 CD568046CBC02B8ED7BB746979F4DD1D180E74AF1BCD5F7F4044B48DA28A8CF4CC02D42B 0C297B9D94F7AEB1D8A253B41DFAE77EEBFE1C084465A5E6E28BE8D3012B9891854CFDAD 1762B621E55C7F7C617212CCF0CFBD5C36BB18AAF6106DC72C7127903207BFB7954A2C09 821E349D897BE907A8F99E6C93DD55916AF27033EB741087677C659D9A45B57F3F79E3DB 1149E7435A3C34B95F2BF6348F11960AB6B95EC65E1ABBAE0ACB16E663C143B47A764116 2190776D3F735A7DD2B2A52604FCA067BD6E5560C85F434B0ACE49091771604232075D42 79F60EABD40810CF08C1745B4A453C152CB28B6BD6957E90B17A3DFD805BAD7A6D05A958 E9636A26781C70495EF0647D47D0E941586F82BD4EC8F67755BC209D2EDD6BA9526FDEA2 C11435C6061F6E1D8D5741BC2C33990C7D78C6291987247BABD1F5DB03350D957A3CEE05 A533A0079E4DDE6C7135CBF975C46BA4E25107DAD61F19843E53CC2BA6EBCCFBC26B35B9 0C89D0F6F3E139BA03D1132E663D479C2CDC55886DEA86177B47B2DDB7BAEB2FB1D75E83 D842203567F0A6A57BF6603D5E9283BDEE01F8E36B110C1B31DFF2DEFDBE9516ABFD5F2C 205AC01F729F41599F0FCF18C1371F0CA9564B4AB52AFAD50F8752DB6FA0574F1B8BCA5B 9557539DA9FDEC0DFD41190692E437699ADAB5C7DAAD1423AF6DB8C529C57232292112A3 D568C4469B7C9B1B5A392642AED8CBDD2C37817C1D028A15B0F1FE826E0717F5F9D27AAE AD9CEFBF7757EA0D9407CF80246CF0E6B6A74D4FB2133FCF60FCE07BDCCB9513F2737419 2BA30B23F74894980A96D0433E4BA2B7C92DCB8CCDD5D619CC8E4C87CB0FA675FBDB6246 8EA8C1BE0907C7306C500D1557543C8BFED01E264E0EC30ECF8501EF6E575AA55C442C99 16F28D80BD8635417448B48C85E4612100402AD9F24D57F39DD910341FC02DB4E4E7E081 9BBC86A5D177FAE268E9EA0112F1804CEFA659A73868DA60842BAE4EB0AA6BA5B5C35AA5 FB1FE54D632EAB18A8FEE8382F04010E7FAC3037467BA1812AA1DC1E166976A1AAAB6BE7 15F92BFC37E2109EBA0272D212656DAD2E1052B469C6ED90A36236EDF2296E27BAF2E3AA 7AA34CE56BF4D26ED9186AFDD87891BAE13717E66736B72EB9730A0026EF1DC2C4FA3176 477024B5AA90BB41B614B60734553A3E760AC2A59AC3769FF1734025EB13E3336B856F83 C560D471EF222226FEDD2DCDC5407C2A5578DF26D6E04FB91B12FA7E467A1F312BAA714E 650AF2849264D1578021EE2DC11138D6EBD22AE50AD3611C166B8DFDE08A6C69BC39112A 22E11A63666270A99EBEC93AB046050DD78786E0451A2EC713BE0F18756FE7A1DFEA4536 414248F22A969D771D2A49CC7EB7FD3FA546653B4719EF9D4036FCE7355A9FCA254601C1 1D0F7F06B47FA3AA70DF55B9BE2B3BFE87EAF7D39C445DD3F15ED1950CAEA743A1549008 229885DE2FF1F9AAEB5391F3A7DA82088FF81A4CC13111932A3A0F6416FF474AD5BB3F17 B805AA0B184B920E187FFA3C740413ED925C55026E1FCC1946E4503068A94DC6431F2D4A 0694F5EB4C00E58A738607329268F44BEBFE521030460F046866D4918887D2A381EA9ED6 D3C480D84E6C40D7244018F9B4B870C9CD6288F5EC34351607FDE4B9F86A4B44F0868800 593A31772745639BBC6FE01F5580F800C2AAD3967C70C071456EA889DBA48B7A24BD123D 96A3E65FAEB7CDCD670DB229DECB47E7AB0582F4A724366EB4BE67F78EDA9E75A764E020 58F5C1B366F7A7D45143B5375ABE387E31B34BA5E4BE11D13F1AA5849CB4BC36D466C840 DFD0E429760DB81F141437378B48179F7225F75F1FBE6CAD0FCB1EFC5B5C42E602B0B5EA CA440D77A9179EFA687414F82D265E06C2AC88915938B79F82C7CE4F48C1F9EB802665D9 FBD5CC2C0E5251E27C6B93CCF9A39CFD45F4E19B085EEBA4C06276C865C384593ECBE0AB 37C2780B48516B2FF19AF60D09B87E6267DCFE29A09534D310AF843D3EA9CB8C08DC138B 2D53D11B424F4C6E1390D66592D6D69E46F2C72DEC48B7C1F492DC295396C4068D4ED9DF E0F5F944EC23D75617370E9939DA82A4E9F9BD465CE88960EE34775C13495384CDDF2CA8 5B1F630784831D0B946A1BA8640A8AE9402230DCBFDA52FFCF787BFB4616FA8FA20459E5 2FDE939C04BC8F9EE20C55856BADA92929B9ECCDF910D9869377D7CED0EA137A23CF2954 05BF96628551C3C14F979F3CB0BB85DCC1BC9598A16342C6F124DE64F8A15791F3F243C0 10896FFBFF9461ADD9644C26701820E608674ED63B5F1ABD51501F258A2B031B99915B0D 24FCB9A63D612C8050930FD8B75CDE52F8A891A88B2F5199B1BAF039ECF23559BAE34FB2 4C0EAED5B189840571AD2345DCD4B3928C5420B0F3DB97F04084C979AD410F813119CB75 7C8BF5B1BC2E1399A3EBE1F815B64543951BCF1259CF692FC47568F404E1A42545A5F078 59CC67476DAD0B46DBB543E99B0395F90D92C5CDA738A5D88DF63ABE1B3DB345FF6F3B55 E9D4762D0D7D90DB3C4C791CD525B0F7E04CCBAA4FC379C8561995386DDE092DEC788CAA D9657127253FC3625FAA4F4C66763332DCF0DD51CA90C4E02CE51849F1C4B3AFEFAE4285 7C3F45853685A5FFDE4D90BD4A9D17118120EE9245740FCBAF450E034784C8DE7F510A36 13B934D058958E6B7146E540D8D9B7EA047EFE2366570795ADDFEC29C359F99002C6BFC9 9382F21A650F2CBC9115A779ECF270B79D66512C2733F26BE88FF242807D147BCE2E4D83 8FE0C71FB651FCA979E6E3FD439A60E24FB56888C099608F45359680C5FBCF243779682C 43329A4E432BF804FB6688EB8A5B3921E9B1F5A6B4F2F8A69D384360092DC608D5220F77 09FFE6C10560046A927310AF8D41DA6EB4E74215CA25E158C6353D39AF5F5E00BBB71EFF 65A1016578BC630E71C1527D2B3F29901DC8C32B527D856B44769C495ED324A7E03DE974 4B4965B97D24C578880C1990C10C5DF6344D37B48C6D58AC7779311E63B2F3E14DC62E86 20C23BF41E9A84E546401210A94D4DF38D63B9FDAC4DBE816496D9A7D4A1733785EC4A00 786B811663999472E4B3FCA0C76D12FCB21882E92603F5E19AA5BD1C931B0DFC68684E30 F50DE0A1BCFB156E65527545406E48334C87AAF7C77271268A161B9F36419470CC3912C7 041E29329E96E1E5AF078B97676640CB388D33A118C0FA580F85F988C8DBE96970EEBF84 7F569E2A4F234466764502BFB4DBC2D03B8224B73C056627F20D4E113A5502FE6D572E1F 9B22BFCC7E1A65AFE54A30F1CB9147A330B0553B23FD8D958838B5419461AA3FC2F17E58 33A29547B00C95591A91857B918586574E5D3FBB8B45FDD6A24CBD9B42F0F087C087D2D5 CFDCBDAE2B50BDDC3CB562FF688B1FA4A1296E9EF0C50779FF58EBF0B7BCE0FAE48316BD 7F32246F5C1A0238F1DE70C2C6FBF2C9C37BF1447E7BCA4D53DF6E7674A6EFAA7008C701 8FB9CF30A6043CA9F3E15BCD8C047A48490E806480F9DECD23B321A16A46DAE5CC5A92B6 57B82727416802E2CCDDA3AF337E23DC452D4494A2E1F5E021F0CE8A87988495AF38E809 18315E0D961165B5D1A98A2727A1EC061047E2A1C8DF7B4F41B3AEBED0EEDBED24E1D952 948A652A53B82D0F27C235E2F3753A7FAEE60EB413948C82376232C02D9F3417E339B307 AE216E61BB7B72E6BADCF4B05F0EA216E6DB88403B0C43035329166DEA46C3978732D3B3 7E71CABCA0560724EEA047A0774E4E236585936C1698DDB3B2C177A07787B5646C4413B6 D3FEBC65DE12AF64B1CA62D4749C743E556D139AE6880590C83EB181FC0A566816AB93BA AB3CBE30F6D5DB1A2F8262BE77DB9DD8E5D42D013F8EC90F08CF8D6C2EADC960C4AFA6F1 C1BC2DF71E4107B80C1CB101FCCD675776AA473AAED7F7AC790ED6824D874F9568AC78FF 24C2B1FBA41984C7FEA90416EC63EC032DA5D21A0C36A2FAB2C9738DA0627CC3D788FB7F 6F7EE87B3DC89D98F5547F6F6DD6ABF53B868ECBFF52A43B96D5DB2CD4D8AE27B0401E39 56C386CF2C008CD2AD0567F983FF9E3AD720FF351C6D7D77328217D4337BF9E4B9ACC2A1 55EBEE70B37F573184B92AE6D07BCA368487A110AF4D1A45FD855E3FC62F14E6E7FFF79A 842100B966736484659D36A08F88D1A5FCBD611021EFB3DB0DD657AB7C2A50090877B689 4FE599833F71C8C3FE9E4811D587BA966FB87B90B00949F4B11DBFCE44E1D6CC68819FAA 3605A701B790096517163BE2C2408D9C4B28F9241D9D613DF533284665B396A0D28D7B52 91377B80A6471021A54DA6340A1842834FDF04B5E91D31FB2CDCCD3253DC349348C4763F 041B5343A666CAE8A5F0C996BD3A0494FB6A5CB5DF43052D0B17760D75051C390858DA6C A4E62287A6052A8F16289F75AB76EE7FDA663B94D451EFF98C0DC134336175DC4328FA91 3DAFB1BF88D9A3D0D1A136D613F6E7FA7A15513086EC1B658E60D53EA11ABB27A6247F56 B1F15F4F3C1E11716515BE6F3361F82D1F6CE6D8C12B12D12215B4B1BABB76C4332AB708 1D2F0A215AEA68D885DA9A585CB64033EAC8AE1333D13AACD9C209E48CFC160952F80832 AB3EA1B01080BADC0FE4A32FA1DF46A555F673AADC903763750C37193A7901B249104811 9BDA104E5B26EF20391D8FC7E01DF85F6171BC6888B9307B27986DB781A075F097C7B083 875E2D9A04EF69A9C08566D22314BCFBDAA7205A191A55087904FA192D60B2BFF8830D9D 3342DB41022846471C14B125F77A5C409A6D41714EC9CA7664702727EFADF6AEE5EBDCBC C3185FB22B0C52C7CB705ECC4E220661DCF5A2732AD077E3DF3E6CA4C5C593D086C6C65D 08FD2AE2286536E44D654E4BB2FFF99E9FC27B4E1381B3C208C0B276B87631617D1A92EC 537BDEED6504954C186FB683C1146BE4E6F0598DB49E91CADA027DB68709FB9BC28B9C6B DD95C164A0AA1D067442FB08A233A0B22980E7DC3E5D5A2F7430F39ECC754085920AA55D 68D55858DFAB10900B5157DAABFEC0978A91CD24D3FD83464A7AAD53C2D359CC0859BED9 761D0034C88CE67D1D4705C3477EA072FB9147916866AC879B261DC85B61D1F3A402DDE8 13844E55A49C235515C543E26A4E37C857DB9E79E4ABC41DCC1CDAE9FF190B85B9A36E6E FE3573CA956EB281812BEA83AD2740E041D1F04CF93B4D593DF26BC23436DF20FCD46817 FEAAE74DD535F1C05FFAD40E5260E18F7DCEB2F1B856D155BA948808EC9B9E4030F136FF 633359B7286D718C45A1878CC358F7E774B6C41ED16F66EBC00CD256EA8EA76EC680FEEF 50C996FAC22B9C0254D97E60BFA72A36ADCC5D9061FC79C5738FCA8F83A44364CE97F334 545CC17C53613A41E50DBE5D03139C0182B4EE6944D348CB0A462ACB21D73C422A5C7C9F FF1217DB65381558A9C570D1DC78ED678D45941201AD243E6B7154B956C34115172B7181 D51376C03111F3A79DED3CB35B263AFAF291797BCBB59480F185725DEED09A657AEA124D 1EDB9A1F93C404017C72CECAE04BBD24968BC6C8E3DB8A1F809FAB82C304B9BFE9FF4140 001167574F3BF49F8702D5C973EEF95FF2875F054A4174423006AF0D1DDD537BE854BDBC A1D2C995632860DA85B8CEAE7FDE1018FFCEE03F750E061EE2542E833E341079E9F3C6D9 A94736D9A7963F13A98F6732C7317B999D3DBE62C171224705D63D48A77677BC2989156D B3B2152040E8C915D86071C58008CD07893CC89983B8D56D287DC90BB39D35015A1594AD 46ED8F62F7936037C98E616583F2FFB56921A55BE4E0A3C1967E462525DFEF8DB6522084 501288D73A16794B7AF3A8DA955FDD135B890178CF271F4168E8B0AFA2686A2C2D39F2D3 5CE618CBB32056800A529511B4381EBF9516260B1B717749F944909897FC92D4E246CA3A 5D2E0C3AB5C87273E2019D64D3FCDE05993CF58B5566DF8171834B7AA1535C6DE58986DE E654D4CC7B25D43C55ED7F10E928C4F8C9FF0C684749E5F1C23C2DB7667C88860603CBDA BE15D1EAAECF172E4628B43C7B025AEF4F38E0BEA50BB87A009D3398BF1C34063B909B65 648BCCC81F7554A7D25CBB15FC5C9A8D082D7CA5FE1336746B6DBB63B5649B1DBD15C9B5 F9A3384554757924C0BEB8A17A06219CFAEBEFC92C8AAFEC933F505BBA1A88B24D858717 41262D99AB19B098153CDC09B9182FF9A1784C1CFB0E66A3E1C89016F3457772CF46AF45 BC3EDBF9BCF93D00C8F49CBE2EC1CC284FB8E24E1E388948A92A43A2CD7CD46D4ABF7D8B 334B020E1D292E7EBEB6CF4FDE53F326B5F2AEEA0C7B824EF682BF3B3CDF02A162C18310 724395ED6550819D14FEDF59D63D8A709D079C28C5B1800FD5BE648140CF77A210DAB019 6DE731432DA5CD9C818931C119DD8742476EE02FEF4203DCE0EBE855C764305E93DF3D77 BB49F75010117267628A2A4879F4447CE398A48EB90CF8684525188EB281B0BFE00FF0B0 C47DFC0EB9ED2EC5610C6ECF05D38A61F155EBD57582545BD9F6A2FC54CCC71F85571EC4 AF48BB83384A608AE6A3BF847FEF6C0BCE7DFAC52A06FF6281AD07F16C5F53A1DB9BE985 9B7961697F2AE9E69BC8EE6DE1B57BE20E5DDD48EDC8FC04D82140EF35F0486482302B11 814A55D7644D7D947FEECAAD40FC946E4333DC58B5A7388A4FDDAF5C0FE1D935E9C70D14 E51E121C219E3CE978109BADF8C660FAFF1036BCD318F53A3B5CDB1D94696245DC60C9A4 BF27115233FD69283CBC4244B9D306C0DFDDF791D9B52432856FA679544DB47F588BF86D 03095CAAE6BD79DA0CD23B0386AD634157797B060FD99B085F883A16D332018FDDDEAA86 FA806D2E3C8BFEFB8939DDE2FB9C6DD556CDA797974E092AEB36E9A33E5D11E58618B41F B9B900B9CA3B9331E63DCBAE6F81FDD11FA2FA8380AB82D9E6C1E69BEA7B3559328D4B3D 07361ED0EAF5A0FBCC4C5132A396CE24F2F18F09D53F07F37D7E3D15BEB09E5831C183E3 BF08E7456F9814161DAA0E53F2544E735BB695F6C7C9A9014A723DB0163E5865157BBDBE 857CF3F92CB0083FC64BE4F5B8B1AAD290956EE3F1C4E003EF2C3DE47DF6BCF1538559CF CB7B1CAE81767AC9DBE663C69C339DAC37A11B691576E208365921CC3ED5E34EB8DF2ECE 66D4147A2C20102CE58BC79C7B3596FA6BB03810F6FF3B2A796A42415C2E5DAA2A579CC5 782FBAC6E9B2486841346728015A924BA065078014683E9E528F8F37EF9084651DF16612 A5665BBC694813753152CB51EBEA434BB11278390C341267AC4F575080B7B9D01A732756 08933443854E9489E1FE047F2D40713082DF3DA308907AF92B6B8128BD16BF523B688E1F 72330C7C85BC43E555A6CBB59E94F409ECEAB0C905DEC948D359278BAAE3FFDE0B4EA64F 040BF0414F03FBC6CFC587D993223CB579214C06644F1D60D55C303D33A57DCA48777872 CB1BAA3F7C71632504A78D7640DDD9EFBB56E59B41F310B3BD6CD2E025B8BAE27B412934 FD118CF2D00E9A51DA49466B4E21E7AFCE21AECA8D7AA9DF1EA802CDA022D56EEA146484 7A0DFA84DB3084434C537F284638410B2C9314C315CC773ADD7652C533A9E3AB4FB93258 A267BF4FF4CAD318EAE9D89423C965B5073C0292AFF1CF1F9560B7D6C51A4FD862854424 E51C221A98D61058AB5F39DEACA343742E2C18D06AEBB91493A56E3211187E1DFEDD11BC 2CC9EB104285B111B0902EDCC9EE244F3483A90B01CA316735C15AB7E0211ECE4E7BBB57 8FD9CBC198BEDB547C8FB5138431F75A1D95681B923A0DB5A54574BB0E09B815DEE9C378 3673C1DB2C4DCE859C5900CBA7CAB167CFC1EEBDED7B513E393B42FB53F7518C075632E6 F3D591D8E9D53629605CC39047FBBBA8FAA26DCD21A1E8E1BB62B6E6DC972460C0F870F2 128EE3EFC6FC6FADDA28F8F823ACC910E4E6B996DFFE5DB37401BA3F18FFA5B4CFC5BA36 53831DB76443E0C85B2E014ED15D90A32B0AE9D1AF0CDF43F2E5E5C13A2642F5FEF0D9B3 F41F7952AF990DDF5499D825EF5FE80E70E054C3E2EF65AB47AC6E875DB11D957A82DD94 62A57DD1B11348D28E53884CAAC23F8BD7A2131A738D607C92548AD6482FF79A1ED545D6 C60A25140D11C77EC4E636DDF122D90DB3C3C99138F121C0178DEB7B210CC7D400698B5F 074383EBBC62D38FD49B50B602D83CB1F7811770F7B84DBC158E9B9E495038FE7906B37C 8D30B586782397A5551C0805075139D8BD4C777EA76052CC0C74DA66177B8E47351FC4EE D578A1CDE8782FF3D63F7DB0982FEF75C81F01661895943FABA887E5FD5A52692F4819DC CB185FBFA4C9A61CEB996068894CAFF19DFFE4F28B328CF43C342673FFC66AD279B033BA E789515D2243B2EEDC7A21DD2FE4AB6DC0DACFCD05AB77C730D826CED8727FF7FA8FE868 D64E0D237C26284373B7CD479E97B615AB61CE59792E6B1E4F2288E6914718B40FB04AED F1FC508ED1009FECB2DF79A3E10CF4EAC95EB2C4E7251FD054ADD8FA836D0D058D40D4D1 C8326919551EBD9BF2CF52810A0A78562FE0ED949C41CCCD5D6E3C4E57689DFF1E76840C 94C596C0205D53E6B27E624A75D484F25B4F87E7ABB359FA621B93ACF57431C0E06558DA 163E293A75E6B4A6EB0014AEEEB5410EBC0A9B53873B45F6217730D398671F6D822F48DE 13E275C14FAA80578FA9E63E86F1535D728470E3BF49146032C5C638A2E7E978E6C18EF3 397D89B2DAAF8F067AE94692991C3B751747E42CDA418F9694BC76EC0794D1DD91F60E11 8CB07FA44043F3C7D57596FEF1A897D784C3A9269E089F5C1FE05D397BF8007AB2B6EFA3 17AEC626A1A9130A7AAB0173B82B1D029ACE59D83EE561C32F36177A332B07FE173012D0 783D06C26250DB0A51FA6BF718D667688A790F3E60EB5960060ACA3038D4BCF44D38343F 749D3679DB268AC8DB361CB2B315A60C5BF918A2282B0840E67DB4A733D626E1F79ED741 A7866B2546BD783F132038E06178796BDF78DCC72BD14687FCB4388F4EA615585EA1EC77 55A43063AB8CEA4E8043E3B91EA84F4EC6899DC260342297A50BC1C9C1F462E925C2B68C 80EB1B5E70F7F047CA92E29095C771C941752DE25F7A0A893AFA9382F41CCB2C3F35D018 411DFCCCC2F02FD311556C15607D48CE9082EA6CF9BF97B1028A65BE2C75C9EFB8064E1D 2677EABC9C6B8005093E95AC91DDBF451A94706974AC26140C2D04AFF56213E71D4E9C37 3CD2542BB7EE4BB285821DF1E4D35E16881DD0E6C831484C506BBF8246A74D1760605251 56454A84062CC754E0EA19AFDC39663722D9DB6EC745477F37FFCA8E48ED2D04A264F4FC 7A06B4C10AA6E80D84BC39EF7C35477FC5E702EE1CF75C7E8486C13CF19368B76211C7E7 D669216DDE4A460761EA66B095B796507307BB0D2129ABFD4A87E72B3ED7C82457629A68 A5E5A0F278B2A62D12EC3BB1A49F9C439975B8CCD1E37B5F62E9200498CAE37339A57553 312592EEFC7AEE0D0910B29F253C973313354449A7D83831F4F12276168DFE1FBAB8D03B FF600A2A704DB2C24E1CB635F79AEDD811B13000A0CBEFA4E43D2AE988712C9DE5348631 28863829504FB18EC6E4044D370E208FB6FE33F57A4148E97042B0EFE2865F4DBE279F16 4F3C5447550281129410B1DA9826D735A23FEA276E10DB5FB9AE59268B4960080A4CA7A7 37C7F61BF46D98CAC010F14F3CF8FC2DD8890D6315C73459691C219053CD214D057DB89F D0E63A0C05D4D14BA16DF46181BA99FCA6C7184437C7C9D738343F0793EC60586EABC9B0 58768BD0E7122EF954386898B43885E47F89277CE0122E7C399C7EA8BD185C8E02AC8C1C D3FED93C6CFA75270DD95444A764BAA7B16239235D19079973B8D14F4F43C5B602E11417 C34874FDEAD73CE151DDCD61AFC9833B82ED175678F951252451746B1C3C9FB54ED82A95 8B6992CC940EE9E574DA7F953ACC9BB5F2F53D00CBDCEC15C1938ED2DD10361F8E5C1700 C7ED3419E153186EFC738422C1F7B453D2CD7B90CFC463868206BC716408B2779449B125 F459B94364EA3D2D3682A058085272282D5AF94BCBE8328A8B363A08AC7AE7EA74AFE9FE 2AC3E9112ADE1948557664DA976D5960D2D9452CF6E4520B7F31F7B95933431FA9DA1CF9 40CC3641A448CC3E3E21FB09D03BC764798C7902EAB3FB78ED24E211102E5EC40F150F58 B2E42DBC73BA7513C079E8E6226573E32B52DAE66022DDA15BCB86552BB80077EDF2745B 3688AB1A2C807934A93FC4728AB137DA5BE5D65603C7407CB9BB824F3EC1106099DA4EB3 4A6D2E6C2424F3A43411A2A05D29A4794534E8EA0C88A78CBBF16B817560621F0384AD08 3D85086432CCB422767B09E8CC40992C0100432F734CE4168684F6D71746A914DEC796EA 6DE23925EC2EACBEF45A781368E2E6577A9CB842456583FEB59FC661535372741726C359 6AF4595F92EF51710D531BA3D8DB56CC42E5800B99A6BFF4834C1AA63D50D0877A9796E2 786A64D1CA4D3B1C9811BBD98DE8EDD244D31AC1B9B702310F1F33614B0117BE9B6908EA FD1B0DCA17C51AF828EEFAE8778866397EDAB0A409FC16A6192DB3F3D70A45BBD8DE607B 04C1544B25A132CFF8125FEA204F48957A1E8E80EC4E535899F5A98EC2F7FC0935E89F24 2BFE1A8F38EAB09A29D8C3E83A0B52AC47BE09152D51E6F228FBB1CE3CF75214D37F1357 6FD71726BB41098E871D9CBCA18EA12DA99DA34C3EC357D6D01481315AEF09D82F632374 29E54D0613950A596D42E94DB0023695D5F744CC61489ACEA71230EA803C6034C378277A ECC0E91AF2FFDCF5C28C94C62EA2F01F9DA738F9468CA13FCDF0BEAA2C16ED7EF66E85EB 8FE0B5F0861D1E857CBFD52366FD9950042894EC59659E80440F80796BCED4667B2CCB03 95478EA18BF52C95291DE4A672ED282661D557524C1DB410E1EEB576E0C2218F0CE7159C 4A1AEE40E76A5B855F7A91E603F19773174279D44F517AF4D8F45C0A7A27EB7E140A6322 6B6837095CAF14FF99BB010BA2E634CE6BC05087506BFC246266760770B194532766F4B2 0BEC591583CAAD0068F7215B8EFB516C1FBE1D0AFA5503C1D56E7C3E353C5355D5B12394 0ECCA9753F8672028DFEABC735A6DD55758F9C5963ACD7AAB24BBCA2EECE0C5A5304071E 73FE2E249D25CD1AFA00C895DFA2A6E11A9210DF789897DC22E42643C79E1D6F7304385A B20B71B6BB9725991FB59B126196DBEC81380217A75F58B8CF5956DF97F5647F770B1110 5609B75BCA253459DBDA334466880105B281FA03C1BB7270B91C0DE0F8E1D51C15261ACC 6545738A9514A1991E70AB9CD2573CCCC6BDAFFA12F057315A9762FDB992516EEEDA011B 31B0C14B353FA6CCDDA00C7874F7E92E26142A43041F05DF93CE7BEB61F0CF174AEB1AE6 31D2C4377BBDFDD5DE2906F262E2170DCCD1A9EED6C8DF301C1496E10B49847450E687AD CC662EEDF3149BFBAEEF8E8BA3C0705A7C63575CFACA8DC3A571BBC999F8A85A0E549CE9 01915C79FCEC9D00D4926C7573D75F034A5867C967351FB5B0E41641E399F66A25F598A8 4BDB4495E21CE07757A96EF307CCF42F4A6EE6BB0061688C403BCCB5C6F4828C8058875B 96EFEE811F8A2B406FA1899A90EF9BA69BC983457406883B0DFB89807D6388EA4288E9E0 A12421F8438744E00151DB9DEEA25E4D22900144E23D490E741CB366EF633DF7E1D932A4 B6B4721DDC5176A39767B55CD4325F5BC5116C37BD7F07F3BDA28D193F811D3DF9E13529 BC95AA073DA48732A4113597BF5A4FD7761AE85357598D86557AABD9568BF15913D15771 17F51E750E06C8080AE8EDB14C8D782559F3998C1F00A4BB764D8C9B11CAE85D8D317196 C2AB0EE76EFB4189E9F27CBCBF578C0A7401C75FB240E9CD0B8C43FC956346AF2CA11A46 70CFBEEC88603B7CA6B0E12E8FE15C91ADACDE2F613A8E8F60927FDEC3439423EF363EC3 4A6397A5CD21F35B1BCC3C53B3351E395A875FF9C8C56A7B29A004E25E9964E0EFEF56CD A3B7D61B0D7D8B74AE54D5266C963CC2E303D6C6C46DA7359FE4AD84E99A5C34963B6014 4B0525A623EA095E945D56EF67EDB2A8CD4FA61841B73756E71E9E5FD51D8244E7EB5181 25436223BE24C0AA3BDD907009FF306A9922AD71F364FD85993E3DAA977979DB19EDB223 F0C96EAF046A22CFD63F065B08BD54F6F3BA760BCFD9AA10E4867918ECF653A7CB8634D1 E9BDB4A0B099BCB1AED48FB84B157D863133BF6BB8A3CAA980B3B0B43A376F87B5ED9915 E3909971737F01EB8982FABD167182F05EF6346C9E29861E87010943E85E0B7BA780D055 3E5BF6547A178A33B1A313C5EE6DD8359416358CC990B88A3BA61311F90C01D16B97AD7B 09266DB22ECE7023D038814D8C752BECD88E8A55898EC4A356A37E9C2DCEE55E1B5CA9CF 1284544C61B830BF6A09F0C5C8288565FDFC8FB1602A5C0FC2A2249FE458BC8CE3ADF8D9 6D97834A7F8360D0ACC6E550239ECE6C7187640EEC44D850325270B4534F919F1B11CE0C 5C9D3D627C3166D2D01CE8EA7C57A93345C2A1F32AE49E93AFED063D92EC067B917E4C00 EAAE239CEEBC459ADC99E6DD46218626842ED9B965E3ECBAAD3F0B634D132790AD545B54 338406707A506C0BE7A0FFC4394A5FCADF7A01C191B1D537BB06D1D16C78D8C8F6CD7D60 34109A9DE2DA206E19DC18986995F14BB62619F6F185C4FA7BC53C85C1CA7A46B6009A2D 81E6B26EA2EE146CAF1FF28F0D337C9399CFA13A29F7D4BCF40E384EC6EFB62307735C8D A2084D19A269E48995D5AC9C8942C5FF9845E479E9E1D3F299F6BC8D7471A600156056F3 8D60E8A3059BF27305CC66557D69509DB556F3BB6974C97BE9562BDC1B9143865747D151 782D38B1E58638A385B991F94AA63F59A5D40BEDE00C9EECC520EE0F297D33433033A49D C14825AAAA24089A18EA2A4D077E7ED4992C3E4A50127DCB9F95890CD4AC1EAE2F30EA30 8EF55850D7B313402ECBCDE500D43441946E8A44067E7F8D09429C60E18AA020600A0449 647BE79BEE255D0FAFB6BC4991E872F8FA888CA4F527CFCA964BEA15AAC822ED854991DF 0F8D6401419D1A81E268DDB995E437924937BEDAA53F44B656EC0EED0F2F554F391713C5 420A40909E3033939F8EE0298CDCB864B819916486DECD8A8B6126696DE496989205F837 B370F14AD170B4A6DF8644630AF85A75C64A13921A5F24C5FED9E47915BAB2CAE96E0E7B BC612E4DC178157E5A88B394981DB7AAFD9B494AF797E0DDD6074A7BCBC399C7D245A0D7 2BEA9BA6D059BC8D13990FA5FF8B0D77F8EC8E918206F63F773904E5673B29E0A75D815B E7B86C38BCA898A19967ADFA3430AE5EF0191315395C02A5B8CBAA66880B72E0EC47EF36 BF55E7B545EA6D12068B56B6FECF137D374EAA3E5D598655C36184BE358B2E3C935E5518 7D1069EA71138582D57201A791A6D6BE6E58ED92BC945D73919743E68945574B3D590DC7 4570D7505D53F48C1B144D2804CECECA5602B16C9D64CE36F15C0023F669CF456F87232F 6C650079776A55487C335F2A1E56848130B33183126A73E6F9EA217EA0B87E1E52A65239 A587FAEE7B620B3C71D232B7D0C2C3A02641E6A61436576CBEFF993D53A514704BD615B4 961259C90A18A71712562FFFCBBC3BD34DA6A90FD98D2E8D3F7BC51D928115EC72F631F4 6F04517E507975FAE52263B9AEA09809FDCDB7BCB2BF1B4FBCB75C4ECD522A1DF98FF1C4 80F98BC63A77D611BE66C2E2BBEAC0BD807AB04E051E3FF4121E5C0786053DCC6BC38C57 FC9F78018DC1AF2D1C9B8961AA87760F82642A975430F0B255F140DD834ACD1C8811ADCD 60D65B5465EDD0A0A3AC48E48DA16912E5BAE6DD9A6D47C6C10F855EF815DB73BBB56493 E277271C0EDDFCC746A9E7D57A15CB2A5020076497DA6573B03B0F66A41005595315ECA7 00CF065914AF225B204F9ADA9F6B79F44A73F34FDA3A6E2B9BF02C8E76C0788BCAACEF4D 6F68B78DB8990267D6643AE67AD4C5F40B0D89ED33B6F20CD60ADBD47D47E226C9C3FDC9 5CE3833E7F79878F6665BAD2F75D509251D9E1971D2D2F82031804BFF8EABB8E4D7F68F4 FC43B24F19296C1AECE25A52C62DD4CF1D7058A7260F46B06C6B24462B9FC5B5E74A2472 5660EE7E5361FF3B3F043AF83C2F0208EE877842902AD7F2FCF0BFB148E676770890B442 5AF2379B0A98970F6792537F798B977770FE4A4158B385BAF6119C045607550AB523D73C 8330A849AEF056785D012C3BE6F9458E27493FD04331857B07BC044A756E26A834D81C82 E3D22819182F032E14E4D21117E45F498123A5B99D203862EC066191E8678DF3E53C2BBD 6258EBCF45DD1C1EFB91B755ACAD26B1D6C1169E489F6888938D76ED9954EE75B7267BD6 50082D4B643E91F0882E872A0163292CD601458E8F4FC1E807EFC9EEE6A7225A133EE247 5DF1E5C7276AB4DB0C75C3C5EFF941E089FC80FEAB60B53327EFC5E20FC009753D972ECC 4A693EC5C0B41029A878169D39ED430AD305809F632756E67C395AF23228686074051150 AF7A7F95D518C9111DCBB820615F34D98756D217A4BE58FDECC84AE6E363D47669D83CDD 5B63F23921058D22663D0850CF7EFC0FD9AB3C62C950C7A81CAF475BAEB5A20D48FD51B5 94914EF6849A10B52C3FFE5AE5FC6F452C33F9E67BF8B346705C2733338581EB1F732233 07E38E47D45F65A4A124D45EB11609A0BCD44990F3C7909B2A0104B81D148C2A672E9D0A BBF7A1E119BEF358D75AA978BA725620BF1BB8E35A8DC25C28F86F3F51AD1CDD0343C2A1 B7739765406AE895E66AABB740BA71462B50B36345721121072ED05F15F2CAC1AE531E65 6552E89B590D4DD32D7A5D6F36C18D91947E85E13CA8CEEED4F8974936EC457B5C71CD4A 57709BCA8916389D8A60ABCE5B2871B96F63E92BF479FA0E1A5E6D7196151F02BFF8AB34 05BC6BC5ECC669EC6A9A8C42CAE2B503A0FEF18F2D323630EF42D460E67CCE0181AA381D 044CBDFE94511DD248341069D1F4097B1C7987B7568762C311BA6D2CBF7C8B46BB3B0030 CC79ABFA8981DDC4DEDBB52FF23BAA7A82816E987E2219BF116C53604D18E8FF30D787A1 DB7F03DEB0EE6EE33ECD31487453064C5E65557D37D368327BBBBA72C1B513A68D9D6BB1 1AE1450EDF2A705CF06FABB8D00521954BDABA388A482F5DEFFA9D8632A6071517FF7D91 55255763A86E0BF4BDABDB638B79A2747916C3B05E6741D91C406BE0B0563927296B4738 66E7DEC55C47989D5F2AC6AD95324925EF66670CBC821D7E0C763821357EBD70F1EA28E8 974DFA7F7C291475642562330C371B4D58025922DAB7190F7E8B21A8DB170321D29935EB 037F61AF555EC14FD9B04B1A9DB09A974097C64939F682720C068896E0034890375792C6 67722A1C40B72F8B96CC4857FCCA8932EDEAC5B24B1DFEE235E75D9B0438F691E2D4CD7F CDED00032CCA8CFCB620E3396FC28A99D9AD97F6BBF6E2B0A82B8E3142BA90EB82F51B71 6901D36B2D7CF1BEE968387EE3F01C72705867FBD9F3587A8466F27CD95118B993B8DA3D 0D220B6FF9BA4B30329D752A2343A2261B433A8EA7E9410F9D5D67988EBEABB86BAEA2D2 DED51876B4372E356B5DAD49B8FE9EE302A04084FA976867475792750A80074AAEC29A6B 5B081A6A0D69EBF975BFBE146B67BCB4D8BADCC893318E59D1C55E97A2EE201FBC8E82FD BB1EE2CB6E79660FD0395DC3ADA9F2F15B56DF886CF1CD976D048C0C88BD1358A35C2B26 62DB2B188EF3F057109E46AC63E7E9BD2C8106D5EE2BD05B03F05DC9CC31522988D90659 1B1821D5436843D62697FA4168D69BFE72A54C0DEA3FA7AD2CAC0608D08ECA45CE5243BC 89EABB9D0538CBD8853C3091218F7EC30A84CD777436F9DEE4F41312870836BF685ABDB3 7D1E8B573B6E68261C244E87A345398B87FCDDBFB8456D68704A875D7721485D57E0067A 425C89C542B57D26B03E54540352F44DBDEA13E174C36AB99F230F30DEEC78D35527F79F 4161D977644B3545D2CD6E18E1D84025583ECBC2211FBABE097BA9888392B8351FE32FBE FACDEE553A71D7C0F8F4359B7F40404B5FD5E759F99E5196D64251213028EB9159B8FC92 642A26FE021FF00ECC1B2FFFA4326C6B50CFBB0B2147B40253D5E12488419317E4A62390 AC88CA4E314D51301B691C3C722192F6061DACC3E758B6C206439F9BF96510D3C2FBA962 2B7D328A2E83D614CA5F085780B559F2A0C816490C2C2C7B50D0D3D962778A727B6854CF F8DFBBFF812CE525B19D8B467989B032759F98088C3E3DB318D96A028EC68602F48C7818 C9D35A27A5607557FED3DE0343BAECA9399996856C5C7EE1E053911AFB0AE66E2921F18E A6411588F546264A27A98AA0A3E6071ED347BBFD1FA67D6707D125C05ABE66FC01F2FDBB BD3601B858F29B326DE9B2520E1401C476E8008B0DA20B2A08EB3B6F21391CC12227AAFC B3BE71F4814495AEA1E6C952D71F48CA5E8677A9014D7169187980350FEB3EA82AED978E 1CB8082B3D513BB0D4A8E676C1AA658AA0902CF2E5DD7BEC4F9F3C863975ADDEEC1C9F4F F95E6DF98FC59EC74C70903DDB3C35E1A4DF964B85EA47A2D8858C39439A029957ABF373 7CC6AE3A7B44E9F18441C0F40A37BC7B83B875138BC92ED497417025CCB7EF1373A579EE 2559CE294F9CBBE027624CF023CBD169BA4501A3F97C0AF5D51121C8837D2373A844AD8D CDBF77920F058CDAC5520EBC36991D5C25E9E361A851F125E2D925EED8CAF623E280F5C3 DDA6BD0ED7963A86F3B3B17900C308D928123C5C1D61FF06BA8EA0A2697C5FBD79AF77CA D9B28CCEB5582C131C2999085D48EF85AE7A9247A14CEBFC70B6C011CD9772DE93E9FC24 AA1565A71C40FD44181149EB77A5C009697277CE6793E90BB7BB93BE901DB888C931A4D2 D56D9E91CB2626FFF163D142F41B65A934537EEA7261D56435EA4C93347F8DE6644636EF F79043386417D55FE1C3B49ECC749BE7E78E00FDBEDA546EADEF2072B26B95E08DB3BC15 9579238792FADBA8EB626BD609DDBCC150EB49DD62E4BCBC34EC4E43D534F623C3E045D7 35C074F0ADAB33B72E18E28DF87B9B363F4B7C2A8727C1CEABF1A7135F45842611ED05E5 5C0B3920E43046CD99216EAAE4801E13DF7C28EE442EA9ACBCCB5FA1DBF622D68C64B1E0 7479D8B6E4192D5C01E425221F8CF78BCE3AE4EC5E6EB52C28E15F9051AA9BB3AAFCD879 1503DC55DCE96601B77C245DC993A2FED7F7EB3752CA21BEBE600E730BAE0029FCE88E50 812E465B5E03F0AF3381D12CC4B873CE4A45513EC2F68C557A9948DBA98892B7DA190484 91193739E1D522EE07D8A83FC9676FDF297944BDA47825FD69F2FC18E3C27D56E5803AEC F4FA2D1B659186CD8445568F06F1B98EC6163348485D52941C775E30804BDC5CE423040A 114B5A06D01A1E76021E711724AE75B06975F2A78E2004D4AEF28CE4259A6DC1B644BE60 58D6D3CF9A1548BDB928EEE104D68AE3D13F0B720E9BB2BD36BAEFC360B4A123367F73E9 120535BDD9C83C3B208094A952257D23148BFDD5285DC18F6107C6E2DE0E47588565B8B9 76463264FC21FC06C20AF661ED21956D3C0077661978ACFDED11C4ED9D18004A263F6D2A 2972DA8D6E13CD54AED8A61537BD143D374A9ACB04616ECF08F2232077A38F97FE98251E 6512E18BF4495AD0D909AFC5CE6B6F535D74F23BA467943D35480BAD1A067C1326BBE37D B1EF7D66FCAABF8D5B84B7BADAA1EB742584D5305CF715584AAFE9158255DF767C256066 C4456DA242C64E98A9A689F0AD96A4EE0310B54453A78D10214BECAD42B1E673E8ADEC31 AE9B52A0B286B27D79A3CE337E415C21BCDA7745C3E6A38231F21EB40DEE805E7A26E415 52CBDE4EA1FB7F650A74882BAA4C631144EB4ADF5858395DFEC729513BF58F18B9705061 0A2DBC5D3A03AA75F78402AD6C26E042310CAB60AA0C0C8C8DDD367810AB698EE07C1ABD A2FBFAE58295E87DED87AD0BECBE63D8E61C66CF445112853982EA62D2E003C676F0A1FB DA6DC7282D913216B000E8F4008C5BBC5153954553025D20AF6D659C93DC692FCC7B3660 759E9FF73ADC9443ECFA3D08574022E6A60CE41F445CB838106EA4B8FBB5C97981C0AF38 65D34A5113C10B318C43EB47662B2AFF5C25C56BBA60A80DA4023CFF8686B05C93F1942D DDA6766333E43BBA55B88C3DEDA7AC06E9474C0F9F8D66ECC9400567E7FF5DF5A7EE6B5E A2377A3FFCA95AB7CB831AF4FB5168B700C36F39CFE0548F91511CD647E0E30C7BE37213 3FE3F27BAA2D080DFEA551BE3A53A52F0E1FC26BEEA10D069112B96B48DF4BF106081975 E26139A1DD0FC7BBAD9C443EBC7BD6B9FDF560D1B13A48CF44040D8511ACFA326DA84286 88602ED08E5591E97B918584607679EC6B8CE4CB891136F68A051A85C7079D9F34EDB879 3766E029CFB8A0104583B30A286EADA1696BEBE3F6946EDB57888461D907CCCE2C7896A4 CEC3864CCBC7920C97B167549836EACDC9BB38A6A23DE90961C78DED3CDFA0D0680D2497 97D069AD78C15A242B3915098C12779F020CEA09A0C07E88679267B842DB643CF5A1AD09 8032130436DD7D1D258149F4C055F956211F8C21EAACBBD59BAF91F46C6B8F2DAC0C9AF0 412A091D8CBFCE4F09DD6BA72FB7B37CB910DB597F51795029C0139A7A822DF7D110D8B9 166EBE845FBA141A52FCF923712B36AB334DA78031FF27D0BA03D4B0994DC128BF08CBCA A31EB3DB1C1EFAA81C8F71463CB83B8BB39B7E1382767C2E5D39A6546ED8FD16213FC128 066B21B90C9FEC6C95C39290B818F895F201F7F07960F9D84DBA4B9CD5DE8DB47A844B98 BB4BED9B432BF00DE1299C6ABD6DFE06130D6071463E1CB974F6DD1B1443561F5348EA19 730EE21E48BC68C45B40F0C8F03B345D109553808018C3879F161A71AF663E89BA10BBA9 5940FD1C3462EBC59C1C626651BEEB65C42545DEA51E71A4B10E26876A9EDD424CE70859 1FA2823322CE68E974CEA0259AA2DC7D0A2AA70676267A7B9FFB3A66DC68FF2881775808 3AA63AC57CAA485A66390AD14902973A7C31CB365CD98704BAFC06CF58FAE3F19ABD41A4 445F721D921AE524CEADA73E78C59A69BA8C941AE2C471BCA87FE72991DBCBBCAFB80455 F18BA70BF9769E534CF1D3A8A3D785EA031335033BC704463891FEEA1AB72F28767E6533 8B1F97620B644ECC3E950F1FE7B56E0026E263B45BAC3E392F4D6B456746B292FA771E1D 31574946AB37111DE3C4594B12390302A325F7EF07BEF279FB63F7828EDF0EF42F109318 17577859252C70D650494D4B2D3D15BE27746B028A6F948C53F28455FFDB166DFC9179DA 181EE43427C0242D1E8D54D44575EABA73F14A91995ADB59C080076126349A69C1D289FE 63DAA1351E9BB2C169B09B3165393B673F68711634EB63DF3E06D953E78E01A649000651 43E3392033F0B4360F394C9B0330E6F936530B16E077CC29CD4B3F3FE7BCC8D9A95C1C7E E8A9F3FFD1D83411BE5C42995118906B1F21CFC418E3303D8E6737BC5E5F5872156C1AEA AE5A58C744BEE94FB687701057140E313EDCD585F892283BB6DF4AD100889F92843B9D3F D8DDC08310F70D44E15CB8C90F676FF3CF3A3130A0D93ECD0CB2DBB2369B81146CF33B39 AFAE2206890FC45BA0FB6D8BB9FA72E81BD4208F1CE1F28D1081D98FDA4BE00D04F53FD2 95FA24E52948E1EEF02B7BD1E97784A9F9B90D2684B726033B71E97A9440C3E13946B48A D3A2DEF6A2C97D2A9CBBE455198A20924085BAF8FCFDBD3F1779681A7D1904DD9EBFBFE6 A7EB3D82A543EF3BB61A94EAA75940314C733336234836AF5FA9F122C972EDF4CFB350B9 EA60F665730277591A2C0A733ED0323A6752BDF76670E64B92EC36BF421B5FC2559BE2B5 F16C543981738BE1A1143625AEEAB2846FC1500F7C25323B11CBAFA2A7B378C62EB04883 F415E5751E72D14551E6DC35B93752EF7D72CEB160E38720E500085E2D76E1679EF63839 F7052FF35FA65D36A73BA12B5AB5D26B663D8C8B44AFDF1533B89307B3A4429ED7D72399 4018F42A250E20F3341BE6A1C842159530DA4E7B9CAFC7AF4EFC1A7919BBDEFC3E482285 01C26CC894CB7B7F7AB9C06B191EF0FC8D799DC828656B710D21794B1BB1141ECA0A3DD9 B133F3CC5ECFDECF838D4452789E5A71884F89C9581D792C146F37098CFFD81352810572 F53BEBF724B0CA9737E2A8D9B25AB208E8C21A8C511A2CAB7A241BD6FD7471769A4AC6D6 9668C3A2C571798FB3DF6A1F4F8A5C599AC76D29A0F53F03240A5F2F699B3329561CA965 ED10ED9CBFEDE11F8092BC2B60CDB5D006C462E6957AEE34D7EE35D49B12D2DB80E3BE7A DAB37B2E05432F3399C8E160635FE8ADAE6D1A32681204CFE118187457DD70B182952316 8D4D04B0F6F0EB108EC355AA74337D50B990CBF81F758B016D96E45F6B162F51BF328B69 6173F1333619C9CD8FACC0C0FCD8EFBE1D34116961F32FFD13598BA3D61DB93DF5B13064 3D48E3FC9A2BFD3FAA60D17D2050343A10650A0ECC915A3C19F31144C6E1DA552E0203BE 174714FDE4107472BCF0F0E6982C7C8890ADC5D257FF9B48863C133CF51DFD2D63E2ACD0 0F207FF89E65B136A2769B52C7E288977E992A60F9F5A17282F03DA4B32CF2D754575926 682D09947A9CB3CF9FA780141E5035A70B43EA7A8CEF0AF5BE96CE06052ED7DD550FAC40 5455618ECFAA6BF22FE5C7B4AB7E49D0C4E5F9C76DB59CF402B578430CDEFB0EF3D283CF BD68B6EE59D6831B8635B27A5C31A40DD44E6CF75607DDCADC3BBDFCDEE3DF669AF41C23 88C33BE251E36BB004A148386E1F557FDBF3694EB6BC825EA32E0D1EF3A4F47564B9E4CB 83BCF125C45F5467B03B4971C19EC8720FB8C4CEE44E40D49550B586AFC2825CC48A89A8 79D6828EFF4403247DD2FB26B835E7B62E2E0F31BCB06F69577E5D56DF78293FF0F148BE 809375770881E4AEEFE595589B0A212BCAE6FF55CDA0C8F8D2A0993E559006F5D074F291 B26B5882BA79EC784B923215B7897DB862737E8EB7722A07C75397F3949D6D5F79016988 7D83F875E42A626954A052B6A87210DD45D5439562B4A7B0E2AB6A0DFAD328AAFE029AAC E078BAC04D4591F26A5FFDD5235CA3583C2EA125DAFAF08695A87F79AA1DC1F5927A132D 0E1782A12E43F7E41C60CF65BF48AA1677DEE25494F413970D0923DF98D7DD8348303278 55DEC4929182E2C4DB095B78B5EB0D35BAB66AE686759E790C77E8C88CB9CA03DBB8027B BF96A1FCB0AF58D3FE6DE6955568A49825B51C7830CA5B338D730E4DDBAF09890969A40E 992D7D6818BF02FB7B2FC738D9B167611F1FFA2DA89DBA54133474652ED8AB3F66F658A9 A4C0EDA372C3745DC2E91DD1AAD8EDA4C3FD14467FCD8AAF29424ECECA118EAA1CCED696 497B5E390961D64E9DDF0394D1E9DA14ECDFDCE703A41EFB31746489758D8F1DBD6A201C 533A8BE11442C8A5845948DD8CFA564880EE02BD35097E10869BCE35E221C6EEDB81871D 2D5D7FE9F4883DD1C990BE26174F6EFEE881E4E2B2FAA21B18303CF0FE1CDEC096B502C7 DDA6DC387FFB9FC8101A5AF4155B7AEE21B836E16658357EE9682EEAD0F5A4466C0F4D39 50C8534A79560ECB615D8718CFD7A6F79FBC03656CE7D5E62629BB8568E07EAFEC3A3A42 15002302DD03CD20ADC72488426FD6BA3539E8CE255ABD13A4C26011CDB5788EC87E7121 2F92734EAACE9BDBAF6003B0EDBF3BFB6AB890B199647CF1EDA0D5FF8DC6D80F13AD30FC 04FDF57C752ED41B448A31A12DD44B060B0C5B185CE93526B4B84A56E57A0FD08778C96A 37C9EA1F4DE82E4F796A3B93B3A6184C7D3547A674A76146D7D056FC93F2986B3FECA20A AF6FEBCF5B86127598398BAEFDE763DD7DF0F3A498676EE79C1AA5E94311619765163835 DB8BEF6D8CE44D796E985B3004865E5DF37BFED55783A10FB7CE5A97BA0874D14AD4E6F6 A67AEF6119BC25317120AE0F34D0D7B3E5663395896BF1593F3A98F7D7EFF0EA95DF87EA 73CD4AD48A69465E5E55D6F0956638CDF859A6BDDC96BC7958981877838D50542FA12F72 1C66D4E18834B8239424333594C505C28B157473C1501CAAAB82273649EA9E803605F888 9C3FFD075EA09B504052695E52E7F4BC242963AD8BFD9EE0DD92E3A29E27DEF2673ABBCC 205CCD7678EFC2085893B2311569F2440B0A6DA1090BD72B9BA36566230B29A0610A9977 892D881CF3714BB6F53DEB43372CEDDBEB3A31195B31F784F9882231227AD4FCA156E093 BD640F2D49FAB27CEBC6D60300CDBF1FE4B333ED6F02A61451F209B642E8E972C9652A2A 12168771120BB997E6ABC8049506A77F585478B4E5D086BE5618E44CD88ACC6A369CDF93 6FDB694993811ECAB8CEF29B41E5B9385BD8D891ADFB04923669EB1E2B29736A7D9F0E72 3721055F542B6A2687D163939615E57E169E2EC1AF2419126C3700411DE40CD8B4BB31C4 A2E64DC2DC1DA250D12CD5C84606A44156DA98EA9AC9174F75F28785EC775FC75D44F517 BA27BB440D3FBD2D33987B80A017903915CAA747CCF4233AE3E589B8FA55C66A218BED04 51140D14BE338D1A094AD86A123C3C56428352EDAF530435FD4A875CC625589B17CC0CC8 424A7151BA6E7AF95BC2A734B722E78C7F2ADB667A5106ACC559AD8D99AE76930DCBDCB8 4ED53DFDD5460ABE5F73B772ACEC4967A8E7968F953823DB7F88AD159B12633D2C858175 DCA175A232D29DF992AC2DFA8CE457980A6489DE1A1C80FE8B5CD76697139523784AA06D 307D7747CF56BC752C5AB15C7473AD30B0553B5846AA7192DB862696076BE8D03CD18BB5 E55B2BD216D130D8CC005C92A6637743014D854BD03D8344E8C38F38923B02F43D38C371 5C8E5C26804C4A6CED3B1E0B22C3586144C213992F799CD6A538E2B56A2DAAB5DEB1ED15 963DCAEE3B4554E1109DF92C5A44CBF618BFC1AD45CD443AA7CBDFF17F9ACF79535967D0 1D94087BCE563E0542CCBF2B455BA9D5FB232301C1C0F51366D55709121B9C6950732010 FE9548FF80FD85756119DE30B666950AA9357AD33C5B94C5A43570F160849A6A2158A78F 5E3A4D602BCF175E597898E957F69AB8F0F405B2F8FDE619A1FE6062FA9A0C64AD4DBB25 6BE8F6121084D367CE1C32BBBA32BBCD7B656AA3B91C3112025074C8C1F160F3C6F3C72C 437E85D3257FDC308714971A69F49D7E5E8D3C48A43A922DEEE559A0F28200CCCA4BE894 8B927FDAD826728D20D5C41A6C7B03A8E7768CBE7620FE72F56DD20FDD616E684EC5E7CF 77BB566611673CE48E1D984A70F0C4A1C4F4D8D5846DDD1A724043465EC17C6F7F2960DA 42A5CB9D2D6D4E33A361E280BB0D1E5F38E386ED5193F8AE3EB9DB38E6A89428B084E5CF AF5FA1E2B8202E227F749102F41F70BBDD7630D75AB146952071644BDEBA60567F30D62C 77B0CF0071EBCFF8A51CBB190F8B376E2C574C5F871FE2C046C963BCB764B3D5543BFB25 2F038D531135DA8A754DCC8DB3566231E626B8853EC997721D603C1DAE4B2D99D8AE22FB F4A63D49B2F60C4F4B3BCF6060A262A468B72F97BC525CB1C0FDA4C51BAF2A5702FAF76F 3C20BE6CA7A1022F0D8831431D697C83C6C020E682C4D76FFA490E0981FA7CBA1AF335A1 062C797EF6427B58AB6493474D71BF5DD513F60C24D58A3B72DE7A428DD8169009E4C169 3CF953FB00F0F7DB1346B3C06B469EFEF0F46E62B8E44102AAFE6000CC5ECAB032C2D881 987B0AB93230CEEDA53E06F6AB2E2D30B1A13386A0B48F9476B8198C33B3EC2A6E741D4F 92EA4A7B82EA592AB5A30DE287F3FC8E1FF7B4DF3423C477BBCC689AEE8B36C9540F0ABC AA0C951F70B458436924FDB2EA86A82E7D68710E081525A2C735BF8268EEAABB95B181B9 FDB03064A8CECD3CD7BA2E91556AE3D1B4D337F0DD9443FCBDCFF4F42B6A06956346041E 9443344F440A62638046D499AC2CC101B0E011F5E03EA436D777A5C5B2708618E997B5F6 A6E8E7ADED20349CED69B40FE2F0784EA830CC77200C6ACF6095CF7D32175B22F9B1A702 009D5FB701C626ECD129421A2F474E16DF10B88ADD638A29F26687B0F94A337665C6554D 365A2D2BE35516A8740F64BC6984B13941B35B0FD060DEBD37FBB62CC05025E76B539235 AECC7A33C6AC2B1B0B5BB23893B920665870DF80AD36B990209BDF3640F2014DC21C13AC EAE893234E2022FB5EAA4D8859D643EA1CAF68BB5C9197A25E018D9199D62031F9C6ECE9 1840F84B5E5980925FBB0ABFD22E59AD152C81CF48605A06ED605FBD5756321DE59230F0 28346A84F2351AC9CF91619D26BF75E286B7A98C9EFC00CAE604231E043BB60CA0071DE4 B1CF08D6ACBB00201141F9990C83AFA9C000172A889148D99A007D75030507B459804FC3 E80ABA0267CB929DD7B9B50D9CFBA686957E416FCC2549DF95FF84E8C988F7845D37DB8E F3B0945CD43ABF2CB8BF060ABF592F3256C53B3F122FA3FB4530101270A6E4521DA43788 FE5440851DF750B58DF8CBAB9CFA310BAB5827E749D1137FBBED5F35FFF228E1AC495D48 DF3BBFB3133161CE36489D4A938205A6F10728E889CF4AEF4E4D70A56EA210452E25FC94 53819EAE2E5C982A9DAF27081BBA397086EDE68767AAC498E65BA102288AED23F9B330E7 0A8B3C0701DE0A90BF5CA46BA4D7E004FC346F843F125ED46F7963F202706F26B2427F25 949E6B11616220B70C2323EDECA1FDBBEA1DD5FBE8EF9FEF35AF62AF69852CD70C2E1A1A 1B10FEEB610AA030E94A4C8C56DCEF78ED4B45D0DC79F924F2FBC764DDFAD9D47D7CF724 8A0D83A2233EA15879025DC0930E84787714322990241B67BFBFC7DF63FC98BE41B441F1 0A889258DFBAA5DF2DC94DF26D4B22CC71873423EA195DBFA60EFA1A424E76522CD173E1 7E5562C5454BDC2F132E3B77188C0F211140A59711CA2BC37455C954FDCD214FD8B9202F 0F3EE02C977F20BB2BC5007023AE0C137EE60CB0D44D2115948C170C8A28133DC6ED3AE7 2CCB490E9A027F92EDC53C555160EFABFDEDA6B76148B7CB110E26EC99C983D4EBB7518B 521222021D57133628EFF9A6D1D667774510FF5B13C096155D8B62F821EE165A83C2EE41 DFE9068C2AE07EB38035F6CA4FF84DAF7EBD6465504F264ACA66D5D40EAAE03FD89332BA 3F910D51AF4A5A3BEB405DB847B0727325622BA71D4449D3649C879DDA7E63831D60A817 D614028EF147654BBC83F74672F8E5F6BE10DA958DA47C2394A8BE0E3F930CF9FC8BEA98 1D82C9282C13D627FD5B492A3D2394A1DAAAA630BEE09AF22610D86C2C866EEEF09F75EF 62089BC04F48B3A55D2AD95A6489DDD6745F5755F0B6D85455F66DAE041A8978ED7AC205 03061B23342BD736FF48377C039DEFE7AC7255211D61F1F691C254881DBC84A66367596A 0C7C2084EE6EEF36D7C68DCBC48CEBF11723B3B22F277D0173A25A5CFC5186C1A8755434 4E616C88CDA6BC1910FFF0F0A649546E27757D8F24D064CECF1C9E5DFFB98CA49315891A 22B89A83958316D74B80E7065FB5D8E1D6F9C09A52164B3349EBDB0A82CBB6FBBDDA9699 61ADD6C308D97CE08F966D5A65B79435BD728EB2091830B48BB3EC574F50A2BBE0CB6AC8 F1D41373A3722128EDAB7F7E7661F2315D5AE1AC34D67DEA245ADFEC04969426FF1A046E B09F3990EBA7E5F6E6397B030DEF29003C6D1724C78337F07EB5AAF567C2E9D9ECC23C90 0E8FC8A848D0BBB7981ABBE50719845B51CEBE3E5577B90B0155297EAAC9B236E4C0835D 94639E6D84A43BC9D7BA16F493829E8AA78779F15E22A7676571B7CE35827E95FE706D5C 2C461B2E4427C77D8FA1AB903DE0F1C16F2307633E78A73EED0C05B0B2A3BCF333B8442B 20DFF245987E2EB36C1357A731F8D2F297A1863BEB12E09945DC0AC464271CA94A288299 F2BB635444E99DF6750FD2E91DE06F21F21D3AF7869DDA992BE9DF9B12A5D7A9E8AB5068 212D88DF1B7F679E4F673302876293D0263694F3339281BB4AB57E336531014C5E4BA997 89E9A5F842F36E4C739D99AC3D2A335342B04068829E2F9D5C47BF0D52200AA53EA99D60 9B6417F607A41395B6BC5EBD3E30AE2C00E01E52B689011E2BA7C87FFF15370F49DE920A 0F8BABD3B5CC3B06F6E50CC23FEC0BA1C0337D61FA09B4E27743F67132B417F78B57E728 D0B4616FC7C50269D0C07D4950F139D5896108B821D3834623AAD4D1734E7450D8C064E0 E87B64029350C34C2F2395112D1628858E252E9B29BF62B81B9C64F777CAD5563F27B523 66A3D5C81654DB989008013C90CABE033939B8EABF2D4E868BCC1B8967E699AABD49814C 5D72B16659E6415563FC1782BD1D392007EEB3EA339F0E6C0964AA74F6F718545CFB18CF 15D8496720612F97A988A04633DF5AC779029DE6022AF221FAC69F40381485953A8B67BF 016220B8AE75F25D002EDBE1431140A746B584F5AA554BCF0C8F26BF62E0B291ED6A17FD 5E50A415A852723FC2860E7C102FB5D5835630793ECE561760D1B53210AF84FB1E47F5EB 2C1FA9E4A20567145A3CC76AB00C5A0B0A20C6EF7C4FD52D30B6AEF716743B3815196369 25E96459380A10B9B3F1A21BA3A0A8ADF8EB579D2C163B62A8F4E36677F5878199B77DC6 3AE171810E81F31FF876D73D94B1A5FC8630D8752351C6E6651C5ED34FC361C3169F1DB8 B9EE26B25AC6415FC169BA03BC6B14FA11DA951763ED81EA6813AAC9CEC9E452839CC990 61600C12E6DC8BF7F7A946A2C08422DA3F8DEFD8E9093FEB27CC250C23BF42C6B76E2257 F6A0841A178C9CF6D4A1FD2E6E9A5BFFED36D5AFD07C8462155185B055406848683923E6 2FCE7616FA3911A2009E940F23466C7385C26E69E98DFDE1D20E1D6C343F091552BDCA74 74F2BCC008838D3179C776461665604630A7448CB13F0080FCB8D7E532DDB784E8E28498 BB9105C0A8230D390622D9CB0C0BDBA178EDA7AED813B067D0872C5E7FD48DB1EEA1B0C5 9EA930F5813A6C1DBF4CF4FC778040E1BCDABD8D27E32FC0BE0A40FAC4D84E9A167E3E9E 9D61E616C3CE6C9609E260B9CD8171FB749F24E45721DC513F01CDDF6154E7EC7C44E4E1 8B280F85D136F7FE45969104926FEAD6C4AF3A43F707A1F162AB9C68CA15629E238378D4 F4E32750D37803F671AEEF6FDAF68E2F83821B6A69F3382E4C3992594863651FBE1D0A9E D42A9FFF2856E687655EE0F94F49E5041A6E4B7A2B0AFFAE770F000AA301E3B369672AA5 9D0EBEB23BEB09C648D5C632ACE92D4B14007F254040E4FE3C25EF525300D27519B90922 247D413089A57F5D9471D787BA976C05FE6CC7F86691472FD875D9ED2FA09FA63E934122 EC10F5AE071A97CFCFCC654EFE0F584007A0ECCF0FEC837633AB456FCF5C2B7E859ABE75 2019B4EAB5717E994785E49EB80D9DA8EB7A16898BD2D99032F1C99C978C8C09E41FB3C4 BE545FDF7C4D9F3F62ADFE8FB077124262A31C8903A70BB02D609DD695B560C150094888 DB516272CA2AD471DF543E3924A7E9C30F574DF259B2D42652E597E1648B16D00E2E361D F1A0A78BA01B9CE9D9A3882FB96881EFE7D79E2ABA9E396A31D58EE578B3F6251866878E 6F594EC3FAB01D4262AFDA2C0E6F86EC3418D0DDCC6D641D88BB275AFB31E9C93752988E 14D4DAA8ECF43CA73A81DEEBFC119E5683E3FA1EF044BCC8B1F3595F19CBBE87C76B6DC3 949FF911FF3E0E1754D7C7C49F6352C18B0EF86CFF461D3283B73D63B4207E5F4103BB45 69486AE46FE7B2A555D123FC9C2A8AA513A53D093B1DEA4E7A1276C5CD5B8C3384B38FFE 2C59EA04DC5E9AC33D9628ECA37CD458DF9A5BF185153F96A5C169DD12F849813B880841 1E62A80E02F232E95B00B5449DE4AF220AE11DB3D4B0D3F8EAA507041A519E60AA53E960 709402A22CC6FD6120D8771343CD104A9E0C5A0F81CEA0CCE6262D3AB929BD8CE9F9B0C1 36F768BE7614373A9E2D63ECF2FF14B9F44022D934D6E309D634449B2CC0B4C2426B3591 A4A176A09DF29450A2C171841B2A1457210511B07A1F178B52311BBF83EAAB374D4965B4 223D2F75D62D79C6EEB56738F80B8229D493DCDD2D0702A33AF7ADECBF3E3CC7B4D63110 280EC41B92DC72BDA0F83241A8AE79E610F15E0942DB6855869ED15218F6241B77C41B28 67F81D1AE2722154E3D81F4609B905FC899EE89E6FA79557A33C50975A268416F1358B61 4B97AB01EE82BF252C3D29556476BC643B7444D020536CCFB8DEB777C7A398C36190C26C 8803E21F288F765CE95418F1CD8367171DD76F38BEE0EC77F097A245053C6C9D1E3C868E 39972C50B7D4CD8CD77162C28863C0AD4211670C867046EF35D91BBE8B828E5D13117CB2 1958A2D5A03B259C74FBE9FB2AB75D79811F274A279615FEB156B20B87D755D6602F8DA5 CE045A5F80767E1BAA8069668954DF6E14F689CC82300FE76A4B686BE2969B211A49E860 816F7FAD3C5597BDF7F45032CBCAAF6F6A9F2C85019797101A1A8CA77D6B770DE718BAA1 6243B235361C6ED8A5E4BC1A6A1FBF0A438BAC50663B9ADCFCF24BDD3E8EC24B6E7EB806 EFC842C6D0DFB7CBF2121AD62B593917F0E83CF81058B9F4C8C329A7AEE17392E99A2FA7 CAA62820956F3BCCA4829314DD5073A44A246CC06CD9C38B0D6C1A57DA6436FB895CFB6A DD672886C89C5C83C94E2C932FA64025416B55837DA687F39494EA880E333522187B2650 DF1CF657F8638383FD8E1F236851D7C65E7B83440267353BF54B781F47C0640B8870B339 683556B9C66CAF82E4DD8587E291108CA4A227F676D08D50FAF447ED6193007B1D119BDE B129EE252DAD06753F965E72BAEA36022BAAD912B8C8AC4512BA830C2C5BC4604BB51081 971783CB74AD854BB1EC8983367AEF1A010F0D7D139844D4781F7FE939E8E59F61B91434 FB59B8F91B4BFFB43D1B7480D57CFC31ED87460BD0F38234AB507E0BA8A97EF845FEC131 37B757320939D4C9B5DBA84F0EBE6613695AD2BBB1FFBABDC22A06328AC7901164D1E85E 2F16CD5AAC33F879C44FEA6F742CECCA69F0FEB3AEE0FA11E912A3C41615F38BCD5FA008 53363A9B8C32FA0CAEAFBDAD5B4BC99ECD09087F6E26BF68D7967DA9621AF4C6A9D240FA 5032501F6C04CB9619B531127A3C7BB6D6CE46BA8B3A3B588A1607627ADA638FB15E6F0B B3766F0D4035DCC945A2F9A1CEAC233486D1D094B18E7E6404CB7B902A3BAB7114965E33 7E4F2C964E5452A6C8561EBFB284821943D421E58C377E4450413C637E2F9DCA16A6B04E 21B13A573A0A8A1B075EFEAD5C2CC3C49DED3613CE823CE3DC489B3A385B7836F18761F2 94DE58A74474E62B9578C20B8767AFF3541277D90AF4143BF16A3BD033D13B4147FCEBDD 37CFDF00BC64302657F34096D43638AF191F43BD121AF0533C445C8A54BE6324979CDCA4 B78103F2BFBABE9FCD2D132AD1876402BE93B53D5C7E96161890B78C210BCDA50A227436 F8A0C90CD262975299FA529710745FE6839352A0C2BC85DDB98089EAC384B5398B582231 8FE02A679FD2C45BAB241FBB0779256A0E1CCF25FC9CDD5C85D391B4DDCE42FC2C727C2D 8881CB2F4C384818EB239EC8A89EE32874131DB79F56486D2C49A20BB5B7A4B25D38D20F CAF42C51CA858A877EDDC094B0C65FE1A71CEB84B8FEEA6E77E0B73BC71B124A76B883BA EB1080074E416A849944EF6B99923AF9021A3159C0F2C61F6D4373912A08AA2DC17072EA 556E96D01F7F8DD50BE586B1CA7FBF938A1CF843E85704A485A82DF714337162A5E2B1F5 79F004AFC7F19E596F081083EE1D6A91C4748EA5A20474B24ACE974E512D7A57EF2E2698 1A10D8E6142AB02A51A80F017FB1F44F26F8532E479A8E2C51C602763445A669D63E2891 39CE05BB74F262D4EF15DD44C47A5751240F5DF2A6B0E7FC9D84A095E93152D1658C8D3C 0CF8DAE93104161D21043EB4E6439F8D83EB8333B56BBFCF0C5520A4012AD27F126A22E2 B1CB448241EC8ADEF37A7ED54970A83F5F9968285BDCEC0CCB914011721C1DBD455E5E78 7B5654D5D15E8C9C7B197BC17E2007D3D96965167A300514201231FB31F89075CD896010 A5507092E0ADC5DA1A8E64588E77E40A9FEFF859D2F3FBFA5F2BDD3318BBAE7DCB810668 9CB5C77E546EAC8A0B2DACC3CAF045CF09C0074C27984169E044BAB21AB1FC4B046E746F AC8CEDF9EBC7392A78F52C19502BF83B52E922BF4F6C866F6DB62BFE741325A29870D87C 462D06160A7C8B3B539BDEE9919C84C398BDF0F47FA1C0FB7A71B82158CCAD8FDA14894F 86E539975E5DEB88FA2D6CC3A1F0B85345424C284BAF22F36E4B488F4385DE65918657E5 9B3E20C3F521F52001FA0BC99DD104B5F9E7CEDC88B1E2132B1B6AC802EEB0B5BA2D5D18 6D97481BB96532A5BF0C19169FB92E981A1E777F4D1BD96B102EC517237208AFB495585F 7FED589E4D4081D962F5A2FFF1F4FE7430B2901C8C57F17064B42B0F40FADB16EE27B2F3 B1818BFC6C8AC69C658E8C6145A4BC891854D85B44A6C6D999EF91E515A3360BD0EF4151 8AD1C81214EA1C3DD2FB96A138F1AAEB39ED0465B5FAB41897427E6506E9A14867666CDE B97CA334388006FC453C1365AE75A125216223D6A4813135BD04B845F602E48503FE76AD 88DB5076B194517E25FBA5D1141B65EACDB22DB120E17DA31242EEE7E1A9A0BDE9BE7920 8FE420C2A547DE66B93B8B083CF1E4E4E6013DB99B2E5A6B9334D1093FBBC2F4FB3B75D4 A5F110ABA82DC09079F7213ED419A20DE94F9A545E0F81E8B79AF040797DF5806110295B F0826BE1B62B7541827CE68672B615BB7C7E6E85EA66A7504E26015CC7A7FD0EE945C542 58E3BC6848118E2CDA3D33C17551F2A45D4A3DE4B51E6E44249BB51D434519EAF769E153 A6ACCE4BDEB5DD523EB7FFB2FAF8C40E2BBC7F1E415FD6A03ACFF5017EEE242936B1A9ED 1C0EE4E6B995238BE063580256835164DB5C956CC2EEB3DCAF1A3227302CD59CE8D4668D B160E430F1C7862A407DFAAEB2BE8927F59D405791088C97C5B1F1B14E027EF39BC0C631 F500325A6F929970950A98B8D9C3115AA58F0581D1D27EFD9F56CC04883594A39F8DA4AB E089D8624C45D7CC9FB4F690D81E8BFA0875AA3A7ADACA2F505A64E1E6F9EC23A6EB87D8 6B2A75CFB0C5902AFA315EE4C1E3E6CC9AC579EA6DDB9F99DCAD589859A53E240EF862F7 749437F5565E19CD0BABB923245B64B1A22C8384AFC4C54C3B43B845299045D5E1BEB4E1 9F176D7574BAE684C266DB4A8D3AB55B10AAE219BBD7EBB81884831BA7653695ED20F938 0341ADBF3490C0CB1D52C8F65DA61A5DC17F4F2148BF83A2017CA00FD82EC01C7B343E06 F0740395468AB61B3D5F9E413E487EF89C651225B17315BAA6CEF7D8E2BFB0D178687F14 0A2C7906CFCB69879992F150FE47955B439577EBDC3DF6DF497B7C9AF8D1AAAD59E6FECF 080241D3019D5F0D3873A107AFD6D44695163816F71BC45B7B7AA874EA9A7C158AA04C79 25160F42B36C37D2C77847FC101E975484A8E098E7A7D4FE08CA86E733267ABC8ACDA373 080527A9BB0C93E10C84313AA6CCEAE0CE6DE4CB02A3D3D1324A03D1D267FF1CD49717FD DC5C3EE30430E327CBB711DC2F8AC4240582EE48F99090192F73BA2662166AB0ED36DBA3 B414B5C4EDFCA234C62D20BE9885D82A202BEC9247F84FF0BB13B952729E46306E60529E 7C21B5230D7FDFE2E4D1969819FDA5712121D572245CEDEF63C4875B0C466E5C2CA5D985 005CBF5943B1960959492755896B724A35D2C8D9AFDA6AD668CB4859EFBE9F2D5D740102 7795AE753F1BD7A731260983365C49A92B2DB2D4072E18B3D2597824F5EDFA5651FD1BFA 05C02C5817203E3910875B465381E040DF1CB6C9F96F2379867130D33584A26C13909911 37D3F5C06ED2CB9700139CB89A91957CB303C56E5B25E5A0C6455568C4E907BFD8D1744E DC3A46FF0DCD19B2BEA5E2A72F28721E29EA3F71E5D79FAC66F1E3A967F2C26B070CADE5 3ABC997E30D99492995CCE3CC38652FE315CD7D29D8D20123266D8DFF9434B3556D9020A 4D5EF55DFECBFC149D2C06C0196A8A284941AAC330ECA8680DE2B13670BADFE0FCAB13D0 7DC9CC82C0A5C87DEB13750C33BB7625A6728FE9BD820A69C7EEC4706FD1EC1AD96AD12B E88BBA3BDE0F0E8E739E94417AE3DB3CCF41F483337C1287B583343D754CF7CA8AD19207 0FCF22B0E88EBE9CBE21CB0CA5B28895E356B4B2BB27AB7B0E291ACCC7009BA3471134E5 5A0BEE9271BBF0EAA9ED396F5846A9ADD7D9319F03223BF4942DEA30F0B7885C14F6CB0C 20E92AB8EBE213F8F198697E2148668184C645208DA215C520E8CF3D8C249D505103C71A E54670FD06616EC81766B1726085C37FB66856D2EE066E8D78C33B05DEF4A3ABB0E77ED1 5878A4C6D900373951CAD998F5E4579D03597A1A5E4B96E285DD58CE178E91985C0CABCE 26213A986EF8005C63C1AAE1630D3E08E58A7F3F8B2304F4E9CAF4C976DA7EC3436E0536 1F64F7E8C562C6F63A9552C1BC5C01464262FBE5B5E2972ABE46F2A5254E2AF03871C0E4 2C338058B241CB9803AF5A26B7F28C581B34FCDC94B167FCE95F611616BCA814319B3899 8C3D67D9577E0F76930612AFD4C19282DE3415EF3456037FDEC876C632333B976922B3B8 24A70037356DFEC571767E8E508AB9F3F42210915FF819DECF89103CCB198C33EBB7C48F FADD186FCFDB6777E4BFAC574296A2F0C5E5590BE1B821F374BE627734359AB9578799B7 45716DCEE79D07B49D225C3EB52A6C032464287D9E3E29727BCBE49C8039B915F4969135 7D2ADF1F20E2DE19320D032775B3AD965E8A6EB447EC4BB01CABFC7F25D222BD1F06CFD9 458F8C7D42E6BB1B619BA81FB8303E65FA6E0577CF8784C4D5EDA73C52A53D46C06EBC44 1ECD0E03878899C39FA8252990D6076DD5FC2151459A00C1E821E986F358CD06485215CE A2DCD301996EFED98F0D1AE5DE6E56BBFB46CBCDBB2D9795B659C605F1A6413B5351A968 822FA87523A64ABCEB6C675D393569795CD2A786F2F1AC9FFE00F014DDBB0D17C2B93C40 3905778E4E1D718A4AF8A103490942A6D54842BCD304D99C9B75C0FC83F617B936C6063D 61640579B17E033D6EF4B5BFB5B67DBB5C9E87EBEB4C04E476AF0E39A04ABB03079F2392 4C3638C96321AAE926623D1B21DAFAA496CF904300A021C5356A74F204E5D7D71CF1B91E B1D67A2B1D38F3D2EB9CAEC0C9872A715C3EF51C6F07FFFA14A634344B8BF69D9BF2BCBA 70DE1C32A968CB706C3714DE2C363BE52AA49E66FE5891363F270DC6B91413683132890F FB9B85B1089BB174C962FA07F5EDCC41FBEBA0199F03A66F2FAD5F7E404896514BBE3C4B 89E187743B95661D759A08AD878C08E19BDA860B2F239C9F1B833AC56412EBFF4226E57A AED88F8190BDF0766EE0A9AD67A21D9A038DB8475CEF9ADA8FE140F408B36991A57C750E FBD6578F4239EECF9FA777C8FB07D045568131A7567C23CCB4CFD5AFE15EFDC5F95AA076 18E3BD39F737BDAD55566E888036337EBCF979716BC21E2940F9DB535E76BBE90CFAD80B 15A0C0141AB65622A70652B631E5885BE3451FDC3B9AB9D9519759681B86ABC8DDD56E1C 73C2DACDA15E5A7A568914A92E2F3E2A22ED3E7720CE6A32FACA211973992D6AADD4F2D8 0D6AEF564E6E6A22D821F1250D8836E3C44D3BECADB9BF5A251DDD9012CA21F56B45C2D5 1B31EA79033E4C8B5CCB190E79980817C2B23574475F8A5F32916EC3219416424226A442 2D0D0FBDFC19C6BB67B6B845EEBA4C227F3290A15C1C6E2B8C6CFC3E051D02B45820D660 4C5E39B7CAACE6C0BE14664FF0208C89BB05B921A72C8511001596730AF9B82CD5B52A15 8899FD4E7FA10D3EEA0E59453F28B892860567F8EE779DF4470CD9F40280D2C656549F22 E9476F63FF4F899B0E9921A58611FBF64C09B76AD89883C2AB9A878B719787C761C16CD4 319061DE4278414BA2D6B38B6D2E9CEA39763623914E70A7D0ECC13C1081029B2838B420 1737B0756E6A5E1FED9D82D491ADBDE277FFCDE3DC761819897EA0132F8639682929AFC0 04AC6DD9049147126A0081D315A7B185B6ED3DB940EBB13545DC09E7627BFDC999983FBD 49FD3105C0CF48D8F220A13488D3B80AE9F5C3537ABB39656141AB50164B94593E2B507B 6CCF06325C1552965C701F056D55AD496C9B778F3575E232D45D71487EB7F41C3A1065C1 3C3071F7B208BF265482E24A72521F032779FED35E21CFCC810D5ED671DB2C968C73AB11 805BCC475BA41F3B01F247412646C657E4CF51FEB92E6C5045456B9A1C7BE32721501C1F 2BD95FAB1B8346B130D002F85B443F23FEB3852DEE7CC1AE83C8A1716BAE2CB2D9CF337A 0DE4C1C54EEFED99CF8186487FDFDF29EA959A53000D7BCEF4C9F440B35075981BF60AB7 5BD718245F512029D6A8954934576E72E4415CCCAE093B74F6A57749B83A7C6A51BE8EDF C2E141F9959E2CCEAA8414EC5E8B3395AEDCEC32E369297C155900FFA7332D2F55E32D05 3210E4C12A0EB7FEE751EB381C7C4262496586AB785712A146EC2FB0E5E8C52C2CC3C19D FE7FEBB054F9C1BC0CEDD83B031D1F7042AA49C7A945C46BDA6AF3BDF9DD9DCB5D265A42 9CA71B0CBA1D828C86376961BDAC62461554012F418419816D4111C50813CA7EEE7B1617 514E8F6D9225949B5BB7673932E8DF22E7DA6A2E9FC2533C02A0D37796BF47BFC66E46DA 0D7145CA77424E26DA27C0A1076682C9859C8280D5EEE8F4EE3315DF9BB68D33CBB7839B 56B2587B221E5E2D46560442F38AE4ECA2AABF95C73524EBCF203B20CA5BC956D586964E 3470BD2824ED29BEE6DCCBB36006686FCB4025A75B5FD9DA6FDEF682ABAE2A82D808B032 871F8A00349D0CA66CF60BEE8DC74DCFF00AA4B2102F76ED0E5D592DA33C4DA0D2D1CC29 BFC3C2CCDE1B99A6D875E62135F6792FEA5C63B4CA3A1F25C8B2DF38DE0D1FED8EB2BF07 63BB7AFD215B098DCD32A40D634F69ED50BE52DBC098C8B695BC40E964D960F7E69073B3 8E1DD733B59D8FF6DEB11CCBAFE0BDCB0FC72156CF1A3F9729729B450D7FB49007A0CAC8 F1655374B7D7140EA62DBCD0154CF5C1DA1DF990296DD727B5E0563A7E9BCE72C85D5B88 5177C094EA16871FF0FEF91CAD46AF93EE1DA2F6ED6E1FE8611D6DC3005C0F76BB75B3C0 69E5BFC544367E401A46EBDE5BD4C18C39FD836A841157D013464AB9FB1931DDC4FDABC7 59B8457D3B8C9E7E7677AADDF420B461810424F05C6747A51469D2D4B55150ABA38581B3 94DE66888C279E9F5CB1D77F01ADD35A74E984FC01B496528D53C6A5C0DD94E84CA881CD 7687EDCEF098E66594AC5462E8ED5CFC771FAF69B090E438F239329E03A9E06794890D6F 7F78B47AE7592289FBE97A453BDCB99D82D4A6855939F7B3BFFF9FB8E62401531A3298A7 B0BC2CBD2CB7463DB63563147D8E4E86E1CD5CF549413BE00B1E51EE88D76031FB09B80A 6708A105DB9192805DAF0CE72B70AFFF2C2C932343B58CA9841DEEAAB77ABCD922308095 282600E26BF5161652CF05EE56E2D89A74BB22E932BDB9B9A40CAE7950A91B8081CE1955 CC18D234F97D579F1375C48F11653DEA50BD11B6435408EDF82AEEDDC9BF6A39159B3602 D5DC3F93DFD6E4D4D636C519DEDED059A7F09E410F8EA6ACCAC45278D995946124C3597C 031AD2C6F7827F827F308567C38A7032969028E6AF4E42127C8F461EDF001AB1EAE924BF B51EB985043418AD42B03DF88718737809CB5E86279F693281D02A4BE890983C6394F9F5 76557BFF532B81C0D394642B92FF25D38C82DAF6C828F91D0145A11C218051F6B1AD3614 B6EE0D767B9F9D61AD1C0E4DDBF63FEF09120A7DDE47B4D7866FEF4573E2E40D04C235F1 7A2E56F1989AC7B170541248983D1AD61584D90E6160B03BF8C2D987A9B48970264BFB31 D1E6A8615F634B8EDDE5E487F5AA4273D6D2DF31E8DBED2DD5D1710CF10C25F15C8E965F 4D3E6FF9ECB10201AA3A456F2DBF992B018476B5F9BCE56BFFB4B09D9B585AA7A12A6925 FF8E3D7FE3A289A454BCFAA1579557BD0415723F944A53F6112AB7A0EC393A85C4945862 14487270497A9A3A8BDAFD6B109B3AB3DF353FEAE8305293784BABCB67B86CACFE240B86 F8EB555CA3F9DB8F481168333CA091F9A0E2016DD8B3624F4684EC0BD8DD511EA504DE70 FA0A63F7C4322F85EFEC2E49798C7B121427AF0CCBAA62B43EAA0A682CC310AF894B5590 3DBEB988E09E2D81D5E726A2F77EAEB9C5DCD2D62BE2DC19BDA443380C3F93A40253961B B207F6820FC6E8D521E361A6EA127A9FB08334C3E0C5292E28C3D919379B41D04212106A 64107E93AF13BA8413CFDE8CACFA85AA37CDE85244FC79FD3FF8E9D6887E0604F6D48707 3EA7A7B2C3DFFAA866611E9FB150062A488266423FDD88C130C8E88BECC289BD16977EBD CBAAA82DA50FFA0AAC25C15E40435FBA3931849350A3778D69E3991F14B23285EC4DC1BD 57F4F7717A02A096D2B49DB39BADCD659A152068AF629875F2BC2BA88960E98218F77ED7 D8792A78599DEFBF0DD21808C8656D9C9B15DBD7C8448E0A8C7AE024417991612087EB82 FC870105740CBB14BC85CEFD049E8692F09378E8FE82E6E1F1D914F713D80E4CC9DB56B2 1A5E974C7B319482A0A0C62C8139507A6B6008DCB63267D92370EA8E3C20F482E04240F6 7CB60C2EC704D51F5AB86C15FB66E181AD397478CFCC559145F24BB79D5FBFD1C3C75AF7 927326826B47190414528E4DF7E7874966EAF8712BA5AD275AC1D185616F1E95F0A98864 90BA8ED607E1F97C2B24D3F8DAC74EF5EFA9809DF2FD8C08D69C31F45BEDDF01ACB08C5C 747C0B757DA339D83B9D0D651B49B7F97D32096CFD3640E1A0C080E3E4CD44CA3B6E8942 7DC09162166FA42EB5CF3AA49DA89AFCB61E7CE7AF4DDDFA41432C81BB077093C84E5AA7 5EB80DC2CE665AD54FD5C3214CC51D1BC22B164F3EEE5A23B421C8D84EFD9E70E82614A1 F40EA998FB4DB658D18622A11550143422AD59247D68FF2FEA801F89CCD7E43E0DA739CA 4B6E74A26C9AC911AB3EDACA2BC3FCE038CD16D20CA2451DB0642A73373963EC2CDB147E CD96EFAC5AAB6A42AA39D967CAC44293FD0369B118F7262A349DD89EC08EA1EED292FB60 184E8392EB1126EA8CCD49546F5F191987E534D2C5CAA300D47B336B2C7E43DAB250D037 90A44B4D73BCAB26488A09790AE3DC6E987327DEAA8A14EB3DFA12894495FDBB455AD799 552B61A2D72BC98EC546FBAB6911CD6017FBA9FC42F6034D4027B3083F24731663460ACF 70A0CF64F4297745179A9A011159037571D59416A838DA7110CD883403A4162AACED9466 9FBFD8DE64C8AFFC00BB53110CEBB13B933DD87787774B233E124F162C4D9B1BD9406B32 138E1BED3C0D4079A28CB9C2927D28F8598A124D02D81AA13A93A42F090D2BF6F4259B21 6435C1A31EBB2CE89097C24673A9135678C3B19028EDCDB8B787632115959A8210693248 192C0C448DDA1DDFB011F12FD4D864E02DA3AB00BA49331710F8F1C48CCDA5720EC3350F C7B371A0B9945FBABB97984DF222D6D902A0C912334E947F6077D95BBD37A727C9E30023 9BA2F8053D808BD82396A2E4D463835BFD7DCBB0CFFBF332E877B6EE3CA8F4802E40456D AE934AB7C285A69FCEB9DB7A981023A9FBBBF6032C4322A058D7BC9554CF7DB6B4A3476B 0C3F60E2B4B4E7EF169B2B36399C7B68BD2491A48D8EE2E1CDC11F28F6BEE0EB46281000 77523D7FF8A5644FB71A2B0975E3B2261EDB7E8CE47AF540C8C9C7D21C2FB52FD32594F3 A48655B94A5BB7BFABA6F0B2B5C2120646DA324DEE824C1052D0ABA85FAF1DB8C4ED05F9 1B062B2C14DE07DEDD6A27AE1634084CC9BBD1FEF9452F0DDA0AD9A1DA294D18910331C4 DFD278E6D741DACEFB11F30C69D91BEA7E182CFFB8FCF2A4EBA039D5DCB25BBA5FDAD87F 9A10B77A149D86804662FA1570D637D736010904FF2DFB9CCEDAAD1802CC4218C3110D5B EC740DCA9CC7EC5ED18B32863ADA0AE895191E2390658448F5CA4B5E002662D1606E2061 A7358AC1306A38A02501FB708DD5B8E3419972E6AAA0E9B58AF8196C23D3CDF7769EF20F C1E7A5ECBF6310691D5D6DE0E4310D6179AB2BBD63C1E3D391FEDCD919A89E20C29BA0AF 3674694C6838AB49237558D14FA1FBFB9DFDF803501ECA0042BD7B21DA1ED567C72F023D 1A11D3ADBEE029FA1B71499CB11A44CF907C3463D52A980684763B1CC825CC62BFC86FE0 A75E6C86ABB44F42334ACBE833DF7F13E5B7B5AED82AB2912E86EA0A1E7A5A05B84F8C21 4D25358DE4A0F06C0666A143A6F35C8FDA92C25B6ED29207FC10D17E400A09664CCFDD28 0C7B19C67A16C422ED869DEE2E039EBC0E5B6079A5044EB3BC1AB5C0989D4BCF400148CE 7352F6E350782E44A30371ECC50029F80C110BD240175ADDD3318B447838AD24099FE9A6 5974EC055C9C44B55CF43735190EB22EBE8E3BF186A85A97ED6CA9EC5A9898C63C69E3AA 72A54C396184EC154D9BF64645D78CEE9C875B4A3BCF9C16F480F3F7C0FA6E39A4032F4E 629870FFA0D034D1B4B0C34A38CDCA8DA6997F250D66C418D34080697A2474F6BCFBB408 1982DEC026352339C9EF7610CE80A13D84C8329607CC62343B3AC9B9112F05BE13C01619 8E8A9FC15E5A07C6F490167B0DCD6CC66A6BA892CEF5A0B3BE750002B365F2015956FC6F F6B65E3264F973B671AA688E8797559CF2C982065D4E8C4C052BB57DF3EB87F7EF730F73 694AAE1DA7A1332A7BC2750E6AB29439D9499DCB9651A864A44C2658DBC582B14309D467 B2A275D75976991E3CD58608B05694881DF5E8B95080BA6949EE106A086924D5AFCB3E38 1242CCA342951F9716596B07DDA84497BE56128DA51E2DD0945347783609FD92941F24AE 3028DC7EB84C7F407EB099C023606B568D3D2A6839D6FC4C2C2FABE23FEAFB0EDEB93218 0F0B894CF5FF43E52534B87A2681B13D7313E7A33F848311C353A2F9D6A2C06A9C289594 BC727286E666B1614BBBD2BE258FDF73615FBA24458905D5190473B02BC0F3AF38418EEA 8894CFE8694EBE87F1C045F2E148791D0FE9DBB848BAF4D3CDD9F0C7B0B50E78ECC5E450 00AE5FC7F9132710E22E39B6F1638F8A6C4992866D7D48A6F89DCD830876E2AE5948F9FF CACCBAA8A9999282FAC29006A44B2B234AE063A2BD5A06BEF11A504BBF5D2ABF1D85B5C3 AE492BA1AD7AC52210A39FE469C8752FD4B6AB4314ED9060116343E4D95B5D8E637F69FD B01F455D87B1B84961A517D1EFA12805838B7ABBDB09BA3D0BDA984186791437DEFF934B 12CB3BAD5BB781C3589AA4DA196242D8218C40C0787937757EDC405049A81BDC2D6EFE16 BEB6728F3F240A696A7310498AE6DA3F9360433352B9D2D12B568CF52D835C0BBB2746E5 D16387A84671E5A6DA0CAA7202962752678F26FD1B72864D6722D14D260A27BB41310FC1 F44BDC149981C0C23FB029B203CFF3D5DD37422E9499B72AE08A27C4469FE13F1D41EF4C 0FC39E90B44BFFD6F6EB9A586D57394400C380B2E1BD333162A73A15755B1CA85BFBFA8D 20C3608217B44D9507962E0F3214180574D52441DF1F54AD6C56046AA4C872902A2B0ADB 8F6F185B52B0D1B45844C862CDC52C0DD50790060020878DB2CC7AF9CCFC37992318D637 6D7BE729045125B4616AC6DE932CAFCC0BD0FD7ABC642D9BBD4D6EC3EE654FEEDA4EEA50 CF95B6980D73D0793497B72ADB8F65B3E39EBAA627D8D0B7764D9316782BEA1EC90CFFD0 1D8E50D29FC0DF7EE8D234A8EBED269D1A02762A902AA868E5E63C500D501F8C90600A27 B2373A688F8BAB3D1061C7ABCD21AE18164F640D001C3DA82C006759E6D0174B6A0B2220 81C633D3FE140977DEF02919DA674220966BCAC07E6A78385D6F79089076EDEEA51E733A 3F09008B362A93ADF0DA3DD96D1E2DE2A515EEC349B374AB7C7A9E5270F80782A095B65E ED124400CFABD72B86273D74E8A3861831C5AF38658BC19D136081A28C4D4F7B5DABA2A9 1F0BB54642A220249B1EA83D50E03C38EEEF16D35266065D4B2FC49699BE027172E50893 C645504604E00A037A2633FC0AD28D289FC6ED8E514B43E1FEE0E6C7E48DC73F4EE8557C E9A95897E990058EE1A16A9EC8AAE3D1F2327E8C5D5CA14B85234449352D0978648D24D2 FFD91E7C8D8D7831E7B04EF23CFC0785378D96202E1544E62AF326F8B98996FCDCD805E0 4C6F84ABE573820028CFCAB9F60553F9F42C4EB8CF9A75D656328B0931F9BA964712F60C 6C7483AE42BE90F54AA10BC1726D93E5B0F593FE501FEF81FE524340DEEFC554CCFA1A3F 12E6AD0238012DC51389997C4397C5DA2F1F232E7C2FCEAC2675BD7F4A57D9F6C92ED43A 2C2BB56686FD7FD257D872AF4F3AECD040586368DBB003E0F8F42A9635B140D202031DDE 22BAF338446F379E9A9BFE24DF6695D7CD2F44308A7E32C63F21DC8195DB97EC37E8CBA5 9B48EC9C012CEFF1DCF0197F26939E5E9B7B516A28AB015D0B9B0AC14F1F59BFE46DD0A8 F633A10563ED8073F03E5DED5715213C3D78500A98D352D2FB2FA38A5EC9AC982A9C72D3 247A3A2E44826255E9BF6B7B6BBE4EBCAED49043648A4DF95A9BD40F46F3DAB787F100F6 7A4DC5E877A5B6C39991D195BE27F3404B50F03922F1A25B98A2F59311AD8CFB389D6291 BCD2714B7937E7C1A6E8A1397BE467E26CBA4BB63551AA866EB8283C6801A8D4FD243772 13E23413A95536E8F76E921B0C43E5ABE6A08235F93F91C03394BB0B7ED4B63CBD58E68A C0AAA21B87C559DEEE36C6DAC763821DCCFB5DC9A561EC1181F530E01ED7A5784100D00C E6872EC95490965326356A26A7F0E19148D381BED4A1FF5ED1D23EA62ABD918F9AFB6370 902A66F4E1883609BE5119DEE697475F900900EB8950A828F908D245A195A83B30AAEDCA 4E10F9FDAE0C9C61F03D6FB23E62141555DF14405A3DDBD6DC6248575B5650A940848C81 82AD82EBD97D0C6E68099092BAE59149359D4065856AA6A653B0561EDBC0ABF2D62115D3 10EE18808EBB92250DDC9C3E6536EEFD67A1EF8BAD3C1B75E67A6F026FBC6D8E3C4A7F7F ED1BB6B3DD7C6022AD5C06B79ED09C57BCD037B08E01A34E5EC289C373D3ADA1B04191FF 025BE6FAC9464F475A98281323D3F9E6F660E1E2C97850C73E354A6443EDDD3F70FC09FE 52E730ECDC1A57BA329ADBAB401C624DF7E45C90046F8B6E486B4F922FD258DE8CCCDBC0 E7DFC52271302650D18BCB7BA263B3BE0DFE96253F9FFC1770235F55ED9717041C983823 49DC46CD6E371DA750CDB54F2E2F23C02F127AB3B27C52B159F6DA287CD654C1FFFA1806 6667789FC29D059C7FB50803A2365734AB230253BF8FCE7F66587474258443955D037B96 4420AD47113AC241554755FEC6E42704C97FCDA40BF5C59BC5473A2EE9A42D8C7EF60EB6 33C7BB9170FE3FF263C02D49A6021E72D3ECB4EA4F89551D563CD8A7E54FFF5CADEC186B E7FF6C446B3F94B99D857328E38D0527CC729634450D817B828E6453B8C0F659A0EAFAD3 89E34B5A391F6B9C454015A638C6EACF74B689AB4E216C969E80C062C3B877AC0D497D29 7326A50B0643906257B72234DC4B7F92E10FC4207E5FEC442073F04283A905011A4FCA3F 9D2277CB42ADB43BEE1BDF1079EB732D1939CA069A33BCEDD1AEB1C5A23B4F2D3FCF1C31 CCD31610F9EE4FB09BA84AD261581240AC57B530B3509A6A6BE02C6F0714FCA1F2AFADA5 D18F8C3E86F692D5C3BAD2ACBAC057BD73E542875C5157119AC2AE3C57FB2E3C0F342AB0 930B37DF8C53FB98B7D0651352C5DE04E45ADE25273B54BF9A75F358398545A6DC472283 923DD46CA00B29F582F1039B26524C7C0B9F6B39C7E45EA858B8A2513441BCE13DBC6BBD 032205BFD78645E11A19F9AF3B131D6FBF3F140204144A4E9CA87E6872B9101E8A1AD0DC 172BACE17CA32C8DC19D977C794CE5FB58AF8D6A1CD936C0812357BC156619463F8F7965 261AB8ADA4CBDF0F58024EFA840BDE5B9FF7A5940E765482233FD2772FB9B721603CBFB7 2393E2604F0F394C60B8D386E82DFCA939696CD41FD4C2249EAF0F5C98FB905654A4FDBE EA7FC32DE550695640E35A383AFED554287F777362D2DDD4D0D50FFD961B6C94FF301655 3CEE270890703CF66BC029C5494CE36F04E26527FAE6128F51DEE8B1DA1D50DECC1E967C CE6EBE30106AFA62B92009858825A27F539340A27C2F38191D45C387299F47EA60AB1C7A 392A280D692FB22B3C9F89EBBB19A20C05091DA88C7678F67256E7A81031C1F07C3804AC 81BA1E06C4A229CDBA48E7832A82ACCDED9E1EC854FFBD2190BC78E7FB817FDF4374FA65 E18464DEC63585879B416A8B2FB0A56ACCFFB00062D9E2A8B14161F833B22D48CF7D39D0 572E66B3AE5DFE7EC637743589FD0EF6FA9F6693EE704CDAD328D7219E61D3406D80D344 568A57C64B2CD0CB9A9A756953EBC051585A4A796070A8EA61C55E2B472A8A905579E8A6 D818FBE7CA3EC00275D1BB0A1FE1F5571D883C28498FBD5A71AA5F5451EECC76290C5A1C 6A64EB32D2C174180466265FAD67CD834DEEC6520C67305554B60D82530C928ED2EE133D E2A3EC42286E82CB19DFB35A906B85729135F0F45FAADD26A03BAFF9D69A17D2DF8D75FD 4E30C1E613F04B9108209895A7570B564F47593EAE088165A8E55D63B6BBDC1963A81FA6 F1DC7DF974D2868A4B70753A692179960A22C9F945316DF1CC89AA980B42505498A73CD1 87A2ED0A7C2F1155CFC9401BDA856EB23CF723B0C43C7A98F9E451558ED742C108BF779C D1DB9B8C4AAC08B65726BA05874B758EB1A8DA404B73188A1A79A38EA9FB9DD878AD6F36 DEF92E69B2BAAE9B94E5926AF4F9EFB9CD5C42445E947194CA2C4AE26BF5AAE5D21A4839 C5CAD8BE5D493FB5AA2040E377E1DA767CD764ED89B1D5A012CE4AD80F0BB09CC4E2D144 C1F2DC1FEE26984A682E672F25C948C864CB53F8E263618F2E329610BC9774262FFA063A EAB518A125833BD339609BE90C814408DD0EC7DDDB4EC812EEBB3F2667B54DFC51A80C36 5CE5C574B2FE227B6EC25233EF0FBC6F609E96752BB4D3C0802AF7A75764CD2B1EBF0615 60B970DFE967C4FC6881E7407086A6B1F1D692EBB3F603C1C14C1FA7CD1AAB4C317D1425 7D4F02C020AA5739242E698B6494243665FF51FC2474CECD3937AF835DBA47056615076F FBB5A2A200CCB460AC14BFD4DB1FE0C51DB4AA01D40F840C42B85FED85875D7FF235AF4B 9E4F0B2AE01E8F3FF553FFE1B5A4FF371F886DCC435EC3745E97E2FE0365749570839A23 34D97E454D4209C4F57C5AD823CE646829B5D47DA57B8D6B75733D168C71673F2C954FE1 FC780C100B7CCBB93D4F45AF6E12577075CB83BD73686C489A8E214189197826E5E6AECA 843B6A096B5ECE8F0D5B254D6E553D758D916DB7FA2785EC2D27D139782DA09CFE47489B F5A0814834C4F0B6913D3ED55BF18C1B249EBE3D284324DE913275A9F39AF438783A03E8 21C25F0016E039A271E0621978E192828877DB045882EF3E0ECA08F26B3518CAC8AAF48E 60904F93882FA353E4C2298856DEE7E2A536C127D8EFE1E18FEBC2CE0EDE7206B10F8203 6A6140D9EA5DF07A64D357842FD4C15D4D94B168E96FDD05BF3F0A7EE6A55E1A1BB00FD7 276A0BFD69B560B694E12E84AFFE140A41A31A5231CA8856A861B299666046C02E0C0C94 8C1EB887C2FBA6876B6171895064827BEBC1F2E7C1EE5A6442D7477D0A5138D76150CCF1 59DAA46AFC5AD3BB287DAA7DF576F7BA16047D724755BC47B1D33934335DEF084935058F 422CCACEA57396330A37023EB7FE7766F672A1D1F5C6FD6687DB95616E95FCDFAE6D8465 414C2D84B2E964BAA02C432E5A503E5D1F5170C9DA0D77C7CB75AC8CC812CF58B0869DA0 95799E93C3643AF433BB2ED3932A636FAF7BF586EF7BB6870EB2984D56AB57FA9C0FDF3C 0EAB4E3CC72D12ECB9D4B61A5D6AF08ACCC7D467BC1F7A48F960FF17C766BB1E019A7E91 DF500774AEDCC31AF820B917BB18F0E06317CA5B8C1E4E85D086ACB4D95B3C573D2DD80C A317AC84B2A2197816888CC7587C09CFBBEAC241B713E64E6A330FA71A3CE9E0F5422FD6 5DB641D1FFB1A1924A0ABD2980D30925A2DA3CC874E4C92C7A30E98EC69DE7B7DF263A11 0C63DF8EC23F164626167026F662B14437EE45A90C674BC425B266251C349E0E731A8AF6 63CF5728E8C57C28E91196F5B6EAB15A38121C26504F4ADEAB513F42F9159675275BDC31 44676B3D5A9DC6FDCDEF958B8C2662EBDD562D3BD970F7C94FBE71A047F9A5610A4BB4A8 FE2AFFCF2031318B8861E89A80E0893FBE4A2A74529CACB9C17820E94513043A6E1CD930 299DB5C70B6145C151596B9233563CC7D3E7CB58F50B096A18B0C909A61FDD5F0EED1BBD 96F2D0A668FEDBB1AB5AD01D09B85818ED29AE010005075F41644FAD188780FDD09D089B B9219FE86EB53296D3184B2B321313D0F49A22B369264E094F83C86EBFF72E41CC9BC377 CE1473B962076FD230FE0D53FD5A39EF50C3D001CF847386635AE02547CE454254504F40 E6D5C0817C37761FED755EE89F2AFDFEBBB17AD9E3061758616314CEEDBC0448A2EDDE6A ADE040ACC737EC887F3D11AF02988D15CFCBC06FC351F50C05E9677522C1323F9BA63322 5695122588DDD80805EB77703F09BCCDDA0B6C0E7D37EC698E98E8317D1D6B0F7787D18F 2E9E95AC64AD464525834961F2D27C63B5017C418D2C3C315D89E2B9A7124DFAD1A81810 5CF259B9C57CC83CA009445757D5A0533203906AEBEF10F89B67FC342488A55B1B61FA5B 0630E36D4F013F837549D9B2C5C97866567176CF42A11AA93A13AC21D9FA53342A949EB4 0327C88B20E558F56E673D2400CB75FF40DD9BF7C7BEBED63786D091C92DD29FF108FBA2 7552FC09DF071AEBC97993A4DD1421735F523E7FD281A73F721CD4591674139BE443B3CE 4855C5201E21840CD4C94EBA56A2CF5607F9E5250ED4D88FFA8B0434A120804BD50736F2 827175979D4657682290768C39D95A9ED2E9CE09E69DE63763FF1329993A6C88E76BF7F7 90DD2C89A4D627FA96A3D0A7A63B059F20EBE82215BDAED9E009B459B23E433987E8303B 83DFCBF9C3BD4B1039F599707C3E01A2215DD30E6CC73D790A3A5C5500FDEF8D4945827E 8DAB1B7559134C9A7AFB42AC3302F6D35DF11B15B815B34A2EEC36004E7067F809E73F5E B36519A6B8BA300ACCAEE3B1E6258CC0CA85E9CEF449E7E85F6A0EED5F9876662EBD9338 091C38C3AE9C54AF8BF45A9059C3A63D87AC51BBA8CE8FA7A502C7C86CEF231D78FA1EF0 39D598027D1E268AA0B2C5101D25B73E2D10F6E573F395F7AEF4CC7E2AE6D2707019D325 1BF70BEA21793D030CE4CC7CB872B0B9AAE93359546480B59F33D97B9BDC9D2512853E85 23D94591DB673C2A42749301C04D5071B8F1EBE664F0770B6B7F938C8E872B26F81C6A77 B0525C6EE5D0F99E9C72E3282A729BE48EA05234EB8624AE31427A8E83BD7EDB389A90A3 4CE2465246288A6632386446A3568E24E171597B8F72FF7CB308E76F8E446442A198DBF2 8175DF00B726E75C66381EDE36F9AEDA57F8FD89310CF18AEB2742E2A1BF70DF1E8859A4 A2247F5A9A721B6C08ECB510C6F8CC1A8745EC717AF9EC6F4A85C0E5A18B3AC097DB7345 A71539A398427008E54D7F6F17ED48CAB7C58F387B1ACE1B32998EF2C5FB7E8294010FC4 D147E86A767026CDB7C3993A9BC347952F8FF78DE4EACE9D87D4781F53653C9296E07FA0 25A81D6C6BE2095255A4E7721C6179B5E9A5D7A6ADE355AE94E82F608155B399A3991F35 FD7C498AA7FF8791D18CED6DA06153AB44920B66B7C9CB13D761FCD6C6B832EF7AD51FE8 A804EBE5043240FA07A306F98654908E1A325516819E4C498E2EB7772183157E55AC0628 95F404C28F2CDEA04FDC30264ED2A7FC8A6E2350ABF35EFD075452B550B8D444129036AB 13FDF1FF825690108DC1B2A38C0E60DBA0B087AC4D763394F5FFD0D719F2B13E31020A16 F78146FCAD6FE61E8FA3465414C2F9D2E0089D26EBB9DF3CE1D9FDDFCE294E75C235D147 23F0314D334B00BFE9F03839ADA89FC3DC2CAB17FFD01E4CACA677EB7D908E5C40635955 A1D961979E013DE360C8ABD6A8C3A7347AC6A4A60152E8F366AC57CB6E097689ED25AF28 5D65F4A8F1F12155CF1EDFAEB88715652A38455D1C3A5E6DFEAE631DDEDA07F7C84CE2F0 893B783DCC482E7A87FBD927F637DA85CA0B690853DDA8188884EE3135CFDA39609F488F 72B2ED9E258281D6B9F497DB197EC58BB043E39CC4CD057C3CDB36D06CA3ABE36FE473DD AE5E969F0D6239BBC127F59E7555F1F9EA17D732C2BA8D81B1B4C2ECF51602821D94FFDB 27F3816E29D4A4450EC41A9C7E10AEA935397374D212AAF24463828C56EE54964E039CEC 969E9769D4A243305AE898D6036E21D19C1B082187B0988817065EBD227A1F123B28EEDC 87C90C1CD78D38FE505CF08F72828C578D12FD8F9B41DF8A9B847D3BC04F19141D873BF5 7BB0F2DD74DEB9300D35AC1902F7946B097957B0D6D5988740E3FEF921BFA6FA8F081437 F2D0FDD3C5A1A896905DC9966BCE133BFA6785C1D5AFDBF68560C9D83EBD0D9741B6D59B 3D28914F6812CA9F2517675D8C2020F88CB40A646A7E1621FA2ABAEA7216B8F50B713597 904953583B5D6580ED33E4B3DE5A4780E9139BE8D9393F37195D926B4AC278DD2ECD1AAF 16E84A30E142EF2A321A46B7100ECF5D6E53639662B1C4D9841258F2C2835E20E884FC74 6A33A93027F47E2EDCBB8D033E5A8809146EF1691DDDE02B9260B1AA216EBC309F5B9672 21E896C8E4E8167A06391722610A6CF39EB122C0851318DAAB42BF4C8ECEEF70848227B8 EE60466045A32DCE52C3284B75E1D8BCC236A10E72D86062DFE1F37114A059473DB6B3F8 5D5795780C3D5D0BE79B10F9650F0D06B89FC81A504362D2AF34960AD9C46207E4963F35 B1C92EBA2081E7C41FE363DBAC737468FAF9E4146C3EB2B44890382FF770DCD77898257C ED518200624BA770FF9B40DC152070BB127221B42248E9A8093EBE72CCDB10233B1DC8AD BFCBCC24B768D6832465AF48206FAA0FB9CD837F615DDB6662222434F73745FB411BC177 A7B5E87964F9418C7C9FEEA360C26DF176D578F65495BA365EF83E58C539F5AF712DC1AE F8A50292876088271C0C4398069C18C1436318B60F2897792FF22E29E51D419089B3E0FF 55B2ADFD4E9E9E4C574936478A858FD5F0FC4993F3F78A4AC4E9C1E2651B058AB965DEF5 AD93EF17EAD9BB503FC3D9AAFEA6CCF17B48FC48C30B8872203E4C7A46E44057B171826D 7A5D78B4F33AC40D4B0EEF1B79583F9651DB32D6C180D267F5B445A37248A6657EC5A882 DCFC525AFBBF33005190721B88846D6D197B48BEC91D94E6CB520E9439A3B24626D170D9 426D0D51D98808CD50B1FB2EBBF2B66C3D6307D1ABB6C76593B2110A4FCCC2C7BEA9FF4C 0CD4AE3A1776FC637B39B7B338FF14BA11DB88AAC2D33F481133A5175159EA70B9D38905 F7ADC4B08D9ED2A0E0B98B252C6E5D148C93FD9A6FDEC81884CA94F9FA6A0BADE073C6CB 3F565195B7CB85AC0073C3A488DC30DFF49762CF95EF974FF4A0F4FA350D60239E409FA5 1E73C79FCE39AE87A15976E660E9AA9617CF1DA28E47734B7531619CD5ED1600486EE491 3A4B149FB5D8D89E391189D554F523274B3F919EF24D12F9792475F083B1B2FA28A2366C 63BA661DA2858710CBAF4D911418CF81FDF9853427165B5307B9079EF91FAFAA44C1778E AFC9DE18776BF5238801B0D3C8DFCBDFE1489DAA81F2DCD7E706EC0A3931A698E24284AB A86CF598847100EEB982E962177B7DE952CC0731B05997E9364F456E2EC5D8AA153DA9AC B4950DA54E444006ED91FF54D817773C4B1C4538AAF73B1FAA79379E20521929C0E3C032 250CAA3A4B9EA2D0B363945B2EEF30C46606EF7A1A14849C6CCCAAD110B60CB017F3EDDE 852E13E74425A06407C89A64BF6E2B3AD1C7A09AB7205D6E9E4ED8CA67D03D6CCEC9C9BA 9932FF96CFB4C3F91DAD3C420192CCF13C44D863BE1B19BAEEDD9357C8CA5BAEE604E4EC 515CF619F1777F18D123E037444AB89B2C919E9257A933DF438C426ECED36AC59A09D063 5245CE10C64F98D7BAA5935AA3343988115C3A097A627271C392C4EA4E9EDA5375A4FEB0 F5E7889F4C6798E39CEFB572F9E10473D99A51271845DFA73A6EB97EC3581BB80F44FFBF 55D2F2271BF286487194CB6F5624BC35629CB9DDF70B2405FFDE83854336F3226A81B550 C4777F6797721752F6235B567BBC87AA305BA8556FE47E92193D6E1B7612F7E91C09EF62 551E902C9660024EB66F158657C743B39EA961F1C8A53E88BF8D0DB3FE5B9D0D1E592B08 7F2029FFD6D055A0EB94CB3B8786F3F5A01B82FE68E070EDD77F89D1206793E8EAC6FE4E 38066815743C465274639620E9D462F3597A39187667A6702585D7F9A9621989F06F14EC 6BFEFE9C86D7E77AAC864D9D911A04B2DDE2ABE041C0DF5BE7427F6162E4AE6A20DAF302 92779635FDF0735020D558FC2535EDB8D7BDF36670C1D74BDE4F76BF5D356AAF33E0AD1B 4FF8DA66BB373E9F7F379709D6DEC425714343FDED00E9BBA3369670C50863B48EA64C14 996F00D76C0CDC35FEF339E120C3C29C8A73812F0E96C38965DC76A27B4791D6B934D9F9 8C64BA3462B3B8A578CA61A9A570113508CD932CCF642D6F7359653FE75313BC5B93C519 C2E0084C19D7AB0B245811754E1472E4E1C3119ED5D67909195354DCE5E9502DDCA5B879 FF391EA0B9B60D66C018B90545024417CF79992E3063457EB6E4D0C63B0E1AF53B5DBFF4 22B54AD24E73AEBD6DB223880307734CA8E2832978E0132C5BD8C05D3BB9BDF164F5DED7 507D830B3B5B2548FD6D95DF29D6C95AE47F08892EE244B57AD993D0D5CE3F2A8A85F12F 933F249A127AB7D721915159A7A3E07843B02E94292E834FDA7FF6C90ACAFBAD86D649FB 92F9D528EA85C6DB53A275BAF690DEDC14C3082D2451382FA832C09E8A66DD019B5A0701 7D6396CF6A558E6FD1805FB5E2B63A30AAF8D0743876483D2A4B3708E52B3172D005C114 8D3DE0EA15FE6C423697EFC1623A4E2D30F60D359B18A477AAEE19CD597622DF96468F92 17E19C409302A1645698744D56206CBF11DE980D09986120CE1F1D34B7AF9B45FAA64FF0 7125251B3FE91E7B8623A52D62EDA6CF81DB4177E1ECD67EF995B37C360D79C8ADF016A5 44A4D0954343E91157301CEDF538149D016D97871CFAC9184CB59D2089253DF50AD484A9 CAC98AED9285FA1388E6845450FBD026C7CC3D639EE123B0501D1099A95407115B578836 ED4D6F978F137BF4B1B1B5DC270A3B160E78798FF3020E7770AEB2950DF2A970858E8F6A 5B8A6148FA48BA477C85BD142BE423F55A501D83FB08C61C775D7F2C21CE30B859F8DB2D 3EB5F97F8D7B620E77BA8D52A6771E941DACD61F2424C30DD8D36697D5833FBB1137570D 07577A802DD36DA9720911C56FC360686AC007D4317017DF751A78D75601D572CCC8C4E5 EFC342ECD3F6880B1E2A611E7A12C6FA8AB311037AA3FF5A255B821846D55F133536D10C 91EEDF8DBD03283E888BEDC54DE75C42E56D9E81F0E21C6EAA5DA02EF5A854E4C5BAE435 22D05433C6651E852A944927279D5AF771A70C2F9F083FA74F1B4D3389EFB7730D26B9AE E2AB085A1D6DC937CD7D485C1AE6A9FF59567F122395A5CBB07C89D1A6CEBF4D0D85BADA E33E4BFCBEEBC3AD0003D97B55CB6D40E4EE4F8285C346DB110473147170F8608E7BD953 AE99B57F02E5F68F29BFCE8803E6599A645D068EADA9FD46697FD8F5ED054793CAB53AC0 9FE68E6D74ABAE4C4CAC3E353BAA2B62876E227D530DEF515DFDFABFF3F5473265FB1247 543471ED58B67C5D9A72386DE8820BD1F35CBFEE4EB12312D163FDE883D23B45A1841668 11E53392E743EA849CFB8633468F26BF0EB3ECB30C86AC1C91728544A21311E5258D3E1C 0033A10683B5E1E13971F090B59C28A2451C0F6E615F5E3091A71468EED9E024A5FD0E8D 2FBD60A6827503F34C37399A0D5DDE41CD5C6CA3BBEED4D1D887EE00688006F0A90B2684 E60DD6A571F6669658F4329916688128CA8019C8D054AFA03E625FB3764E3315CD4133D9 7D1FB7787CE60B256B1D16ADF2E7E793E5C022CFD0CE4332D3081792F1B37CF25BBCDCC6 1AE4FB7F5DA9C951A2B7FF3A50BDE2C4FD70D59040F2957A6726E31B021BC64F29ABF796 46BAC42A5CBB79C5BF26FEB8A5D7E6D8FFBF5BEAF4F888746DA5052F4FB042917C16480C ED73E6110B7B2E5FD98069A653D40A209FC39E7A9EACEB5169973E09D6C37E45733B03C0 4908D1B14D212E6CB8EDD1AFF0C805DB7EDBA2487DB5DAD1BDE2E6F9AD2DCA5C9070BD9C 8D2495290C407CEF138124FF8DB1C6E26371386842DA7ACDF20ACDC077612670D13EFB06 60541E4C8687B1DDF9151FF7BA4200196634823EDAB3B3AADFA0498327B41F28C359FBA5 CFECF74B78231F1B457267E3F8B623FF144C0F36DCB40C51744725E19057241AF50C6AF0 06AF63B452E3A0C33BAEEFBB7827CDB6C9B1858C69A43EF191EB66D9FCCB1F7545C1DD66 06138791A50519CB9370455470FEEB04DD2E56A1543F511E1C2331E301417A7740C90C4B A4D858BD24441513221D674B396034F5C7168D5C8D4D5B97DEACAA75F10A63A33414AA02 58BDDFDC93BB97E71A507A084D550B796C6634AF35D45520D7BA96C8905B4C8AF35B4CBB 1736C3FD04F7379BB40D783D56CD22B18D6B5B719AF4A2235A6A1070BD2F889DDEABABE4 3010D124EFD0EDC3F4FE439A618DDC9DC3BC5E33553F5D0F0CC835C5917C89A95E0CDA55 90F424FD0EA06737CE22647F503F37FAA5825CB6C6419AD07FD2556633069EF50D3571A3 2FE756D7FA0EA69F7A335D6E4A0B5B5238C24E623D8A37B8D85787BDCF7E3184E1DA6B03 B220420BB176021558F6C1FF8E133348DA8D1CA1F15336AA1C503E5951B02E7644F56B56 C3F8230B055863E752B29C0A077A60169AB2647C0A3EC4F342ED0E90D6B4649A6F819D84 FB57A2348E9B21D8D8483E5CE420ABF93DD7F8BA149766F5442F6F9964A07A15224570EE 153570277D2B46581E3735517EA6433018CA147259BFE2E8AF7FD084FF55EF45DAC2ECB5 312EB5F085FC327667D3482B7387C7F021942F8063FC9ABFDD7583DF5347FD90F365DE8E 0928A6AD44B2C55FD21FA1910AA20646149AA0C88C0277C3993C6450B4AEDF4D1B2B558F 889ADCA4776CD68EB15636B737C7EF1F82EAC9170032341882F729245F1D7149B9B1A629 34E42F235057EC6CDEAB4E5C9457D1B592D673B8F4CD9D6254A23D8F4021AFBA13765715 2F1B9E9487A081F39A229387E6B4932263269ECFA6BA9C1362B78D1931E8F1D41BDA24DA AB89C92B1D44F98268064695EC5A8E8459DCFD3DB8E15CC5977488560933AC054F92AA95 EAF4D20DFAF2662C3719CBB1933643D07E16B6DB9712536C55DA4058A707B8BE5A2F8C19 A578E9670BB85D7C8AFDCBB4A3FCF6924D5D5AD2D492614FBC9D730E6E380F7B85407278 32C5D59FCA0BD91C52F2CF59D0503B8D1945667E795EB3BEFECFEFFF06E04E7E668A6891 90F56E87769C403241A9DC3EBF5C3C3A304C1D7E7282EE6CED42E17D68382C6649FD0367 9EE4BB64D297A1ABB8005FF49F5C7DDC36344BF235352600CFD936AF1B551C7CFBB8C275 BE751455481C6E9F0C3B868CB39E3F1E7F802E9CA1B648F1056840EB9E58DFA3EFAE9BA3 2BA9D96C422B4729291CAAAD352DDB130D5EDF19109B0B32A63FF5A0E398FD036B67F8CD 9A135D161A5F933F3DFD1381B4F5F52069A59E11EC8E1F8BBEE21A1017DB292E82AC1AB8 065CA4560B7A3D0E49ECA2AFF6029BF1A470E1DE0D20E4273EC837B1CDF17DE447631F5D 9D6B914D2429039D009D9BD4AF59EC42B6B320B282F9B2D798C759C1FFCDE99A8014488D EC4781D86D77915DA2FFD02473D356752E7BF7CB74F419733DCF9FD3CD6C6E8C257E626B A137A1E91608975BC01136A3BE945D196B6F5A51B9B14B211A40AC3B91DD7C1D9DFF6E53 92EB8931C9ED2284C032583CC2BC7CC09A545F208612310C0867D596D4141EE1CEA9971D 9B98133742E4DF92D643EC413C0DFAAD548ECD6DAC927603EE671D83CE6C662B3B9DFC51 E598AE76170944E48EBBEC032685B763F2310B6B62DF96F88E811A27256E53E16BB4D601 ACAB5B61C9573C5A0C8FD9A3BA6F71C8E07A5D7DB790B61D0D6C82CB038C2A789AF83506 FCCB45AE14CF2CEDD9621857F4FBC82F85E21AE00B8C87A33F1DB002D007EC850191DDFD DE43E47AF679E86FEDACC9F93B9714F540D80540E4837D6F7C1C1287FE4B700098E89C64 299EC2F8438DD599E70EDC71836654813CCC8B55230A4453F5119726DE090AA5394EB854 7BC9FEEE3F7DD8964DC93D03D61DC37A303F3401B5D5D5574B0557FAB85FFEDAC23D455D 0C25115D17C483FC1C2CC79D65DD0EF2DC237A9141FC0B658801D5B3934CF25A8375536A 5793D6BE16FA12D5D4F00B2AAFED20F083BC316FF0A74E12BA64C43F4ADA755A48B5C0E5 47DF37F125AF80397D47A4262E2F8CC6CDAB45C09BF1A0B1F7EC84A3EDBEC568A19ECC39 4A214DD10E175B28588CD12B39DB2AFD754568765C786BDC07DC048611F9A1D90D5E679B 6A385775E3936A631A87151EDCCD9F88291CE4A177F285D242924FDCCCB0506F272745D6 97B1F1C856801407F457BAF8FBEBF2A4688F23374DF17185883A415D2E70F1AB4BFFD36E 349250CE5E77DCA72E6E5CB7442C6A582B894136F46E12409713990147EAC800893B0464 CE2C676CF082C7FA2803B497517EEFDF02667E88E293D05C9013F05749EF76B7AC71E58A D213A4764E5C6F4F0A908FEF778D436EADA18B9D298F113915303780BCF948B23B85B16F 82991103BED3FD145DEED65E5DE60F0B60917A39BB2C30795DB8FDE889F2233E42652CE5 CCB2BFA48D1D12FBDAD8F2A3B21AC52DE1210B126E039B1357F094A4A3A98F0D9B533DFA 989C487B6555C446EC5B24F5CC3CF4B8ED088AFCD5A39A5DA830922EA3EBEFF17269C1E4 AFF782FEB973B96CD4AD9A663C0DD2FFB9CB98196FEC8BEEFAF9BB1059580659337EB95C 4029A5727D2B041335C27A2256ED5F419794967A8FC5703ACD81DC71EA6F3F394D191E38 700C09AA39B9CFEFB26C098DF2320E4FE2EDA1C32C5A4A20D1729B7A9934D4F8C81FCFDF A51EC23B347AA6D82690FFED9B99F4D9A31CDC0FBD2F58C24557ED77238F6A63C5689187 6FEBEC1482B652C6F4C102DEBF0E213E57E2DD6800E60E6F32E976E1A4C91092C6D340C9 854265B1F46D88EEE96CCE7635D6354F7E536CB8F42364DAF63B708308B9B992E9E46F3B 53DF692B2D2B52FD263957DB7B5B8E50D794C795573F48E2033BA671EDFC6556E79B1EC9 BD8D10D2BB4E682C122919D88742A1E8F0FBC7E03269E1608AEB738B1274F32AE5EAC176 963AEAB7E567E25A75D573D5D24596E5020341E4EF45E29725DB94643FB9681D6E4E2CAB 7F747AF929D179124B5734F7641E3CA162B7653752103CA79C87B684D8FD9260337644B4 C08B2997C037CD601E0CBDCF7A4BA96E498E4F4FB3A3AD13248F650DF82F2C6A793497E5 D36D5A04FCA7ABD3DBDA23BD28947EEA5014EF7E8CC12F079C7656A986F15F7CBD01D275 1D26D08E21F62765FBF37F52D0BE8BCC1710A6C0615CFCDD40F7BBFBD29D37A968A7B00E 981703059ABF8F36379126144561C443E657F62F2C2BEAE03B18EF670A3F511B4B6FDC80 E9F79F5913032131B86DD08685CA121BD0355A3A055427753D9285C04EF956B06BEEB31C 2693D14DB8B1EC2660E413EDA34AF2B33306E51FA342004F4D29C909CD271DC8DA347766 1FDA967995BBD5A86C39249DE535666F668F43731C7EA4459503213E3A20A136B83EB073 6790BAB5AF79E5763CFACB5488C3020BAE3B985DFC2652377E62E795415CC7F606B5D9A6 7C8FD816E410AA0AF66BA52D213F124260304B28F6C131BADA35EEDA2084B0FCCE6B8EB4 77478B00D240075A15A78F994416C17170D5323CA69B4C4774AC3A24ADC997AC2D0E0620 DA7BFE455EB975BB45E0BF6EDAA0502A5B29E69F3136368B0C8967D0B7E7483EAA0B820F FEE30B42BB578185943BF36FA11C885ADEA8EF33DEB5139E357AA368EB1C4EB333C5EBFF 8A8DD90A282187C7DEAF730B8E2214DC45BF414F0329F313CFD27157183E241D2A17AE9F AA97721962230A00943CD24CA16F4C8465C4E51850D8B45D91E825377242CC7699F4B1FB A24D9DB1C0D408997824FDABA6524B9C9D09A543D4A58500608DCE7DFD4FEA2D37CB0767 390BBBD5497B59349BEA1E7F0BE20051B4911A135E2F7985A80E692944D17D8A39D2A99B 76094095A2DEDC8F21376BD7ABCA3F5893D3ABD66E13DCC96C1E082D8358DD4351E13CD4 1317DD8C7571699A1C10561A01A28FA652429F8950CFFA861FC28EF5159D0AA9DC545F5E AF8CC1D37FD79B1938397C7B379821B9A877F3E6BB4C303D504ABB6A99FF863DFAA1A7B1 F2E4A2A77A18854E90EFA88889BDA045488374D459DB52DC66B653999C8C3E99F9B91676 C7881D066F0BE24CD86064649146441D2467658A16BD664869788A97E483B6FC608F7F6E 968F0278810066F8518D6080482F99FB3328A6E501D7BD964A701B51EAB270E77A86DD72 EA5626D2ED4C1A87EF6B95A5084C7D11E5D3D694A847AF1589254E1B3E4FDAB71072BC07 27DBAA6A5AED6CFF28B1A8D447319709B48F2B619D5A10FCD6BF440A42F5FBAFB490245B B4C9F82A54C3BA499C398154B68BBDAFE1ECBFE255C73D467A6E60F769DEE42048CAEB87 0EDE859AC32F919FFC4985F9A49CDEA6558B5BC85F2ED3F220B82E7D754BA6C3FF3C4994 20C76D2F0D300B4176AD091D7AA946F782D1B7754AEE95880DE6462C298CD7416E36CC8A B735C133A91990CC1891DEC70E1C2E201A2B678B9E6BA98997297E091C4F9314316D257E 34DC73F3431D7B7E25E329846C31C59485D093C43B1F4D32E83456BF14FE8BE581A760A0 1B130A95CFFFD1BF73C9F9AACB6DD44A4591FE722A82B478B98D435E0C7F05305B5E3A06 BE14FA9CF50EC8F139838FC060D1BDD5E3C4469B50A2C3413DB40232434CE2DD6F5346FF E57E754DDA6C40DFE062074585746CF02115A7BC95E7948D03DF843856A246A877A2D5F7 4FE56BA73194384B7CB964BD9BB58625A88FE90429F2A2E410E23682D5679A5244B295FD E5443A1A8CF0B4053B271EFFEE09F78AF522029FDCA8E1C6C9662B80AF663E70FE018699 B7D67C4BC932B792A1647CE118E70808DA79B8CFAC6C5E3217021FD13EDCAAF3CB5D67B6 66FDBE4A0D9F487C798257BEE2DB8FEA4068DFC191CEB8E10148C11B75550241C0E3B9FA DF5B3CF01B34AB01F2ACF9F46EA370D973735DEA072BD2C5462034790AA667304B1F57F7 569DB1B7BB4025C3B036B02BD49BCA63C1F12530F2745E16D8B97849C368B7A3E18973F6 8F085E65B04FC4A0DEE3CB6F7372EB57C81FCC4F7AD0D9B82130CD4136E022DA706170B6 10D7E8A95A90B1428991A0547F65F83713E6E4913EA6837A1C26041C22493AF9A5844E7A 1D5F591D7F583B4A322A80EBA6778218DF94003BC00D24E968098C532D976C89A9F26F6A CED94B071615CD38635E9EE41C6CEC292C2F35136F194746B2D85D2077BAC8C14CF7E880 56A0A537FD51B93C78617F04E9995FF54FBF304149875A4E58415405FE1067A4B2895481 D7700C9786904126B076D2DA5451F8017E448E691240D2154887152DA869B3E6ABF6B4EA C55C4F3092C43D77E7E9E745219708CF6A6302FE30B85607EF144A047CB89186E18D78FA 627C920C4D471C05D29B0B4D3B48FDAD39A635DB98E716833FA0D3872C420820CD37868E 4117EB3EA9E7157599F739CF2F214D3F23483B0CC6DB88E428B3466F629BB03F7593085A 82964B8215C467F1485F8B9B4BC8D9E2C0F115A1912832B9363ABBDF0257602D2615E7CB 5B595AFD339B84AEFF8B5139E33A8D136A1A2A3C1806A62A36C7FB2841E6219BFE34BDB6 C72A6605852BA1C4A64C759C41EC8D58C0763B3B99CDE0E9165FEBBCD5A647D8620A8007 E99CA02BCAB84ACB8B2D1A676B4E079EA80F9766062D2D1E3FEF5B760765FBD6954E7FA5 2AB9D0D7473FEF77A25B92E39AF4FFE7AD9B986897BD0D10257CD827A518AE4C8DD5A0DB 09C1B756B229207637B3D03C46E222E91900B8C1000D0382F7396B46B1EB3156D4AEE15B BD3D88BC2B6D4C8FF7A4B42ACE9C8CC686D6F1113A330E95BA521725ACEE6EEE14518061 2A71B29C4725025D9732BFF73D9F7C42BB3325AC5952720724D37776F42D499A69DA6BA2 54F6A35B9D18C8E3E977D2A3D248D6C036C8D81EC03B4F710BEA9BA980DAADD7144568F1 546F84F3B63F145C16F13D4BB01CA5139DDD6708E52EF6021FD58491A0ED6579765570ED 17F12D9496550AFE953239D8AE752DC1174E71990C6C9ED98BC3B251179B48F489AC9930 EE68E0A8271D20377BFF82DC2570D36A7DE3E0DFEEA2B7656463827E355D297383B3624B 55E8B763CDD29601EF21DB0261785D78AF942DF1E209B8CF08C2BA1DEC4696F51173A864 A969EEE707279C57D8CEA9FC3AF324CBFA07EAB688541A1E9D07203ECAE41D009CCD2857 7504F15E2755C6BC5453E1BA856C53CE3BF3482DFDE0C094EEC422522326ACF4AC5E2AEC E025D0C9F59DDAFA0C897E452885E93939C522A04FDDFA47963B77C2163DE0CC68E27562 E62DD96AF28272A78D68746A1B600875C2A93754E8A931CF96194C9373066E9213ECFAAC 50CD6084641B0EF8CF243EC8E81BF5471AFC195848A8F0539A211135671DEBCB5CE2260F 7E4761FEB3E19A0288F58FF6B31517896BBA974AC4BD206AA76CE54E8FE6BBE51DA6BB9B 6AFB9C8445CBD0A92D7A3867A105617D4D33A6945E3B5D233DC2D5CF3D2FB8814B1D5EC0 EADA09B53B75253240A15133861760EA1383E1FB7598B13BC3205407425401D9A0034E6C 180DD9C4DCD31DC5D22D4204C3D53D2FE0F592738EE92B694EA7248FE99E4A52A1AFC04A 85F95C13F026BD1B9678ADF88240BC822AB0234864A13F5DC847BB3074E76C954236C981 A582B978438C496A3F804B363751DF6B9E5009C41350A07C027C21E2B62CBF52D83D0ACF 605A62EF28807B0679860343DCB4E2E8CA5718037E3AFCD6C5A20557E6CE598F4B7AADCD 6AB130717F247F4126EEB266DFA24AA7ADD704408111ADF7B977B0B0B7822EE62A1891B1 617798BDCF770A359EC2657EA9123F35635861069196922D74C326C0B5893CF6B45CDAEB 32665DC1EF01422DE32596A141E6B876DEAA00AC34EE7F8ECA5D9793CF8CE42AA82E97D6 7FDE0A39EAD3B784E996AA8C215A6515D73F71B4C23D396C3C292423DE46D80FA78A3DD8 26C30E73FA0246C8CBEDEFA8CC52660F5C6B24A94A93F34F5673588D5A140F9983EC6B2F D60FDCF3C0CEEC6DB631D90FDF6CCABE911B9AEF3C9C643F9BB9B08FBC72048E78ACDBD7 FCC20510C885547317F2AC35885D90458491A1426FC3F50748ED482BE3060BB8DD1A2DCE 76A084C9FA3D086110EC7B680101CB0932C4AE436F4CA6D6C2CA9647511D9233536D70DE A568C95662989E09FA547D193229BDAB8738E8E700E96F72DC08758CACC66E59B72D01B3 D343DB497B40B2AECB0575F3AD5F811F54522993E8DD057580AD204660DD6339D2E93BFD D02F16CA1F88D7BF2B4FF6D2B80BDC032C80E8A10605C7AB30D8C26A01596ED5951BAE97 177988B24971A058174EB7D4E19393363ACC6ED21CEA4F86EDA6474435F54449E9E217AE A877AB4E6EDDE1CC42B8564D4EA70670345A249E755455AE855D4D71C5572DAACE0BD79D ADAE3CE1221C8CD18637B06080FC7A6CDBB59FE8276F9CF261931AF5E3A6D05B605E5E5E 02247F9CFB174211AE5C2C1E7BE36594AE4B4674D21226C676BEC8673D6F8F99D91E0AA1 664F3964AC22D71336FA52309FF369B72891B10702B200CD7E58E870A52654D948FF4639 F06DE6736CD83D5FE528C4CB8CBCE253B65F70A65E54175F5C31948414C49D632AF9A633 71B80D351AF14193E4971A1BE08ABD49888FD7EAFE35B449A0115659532FE388A28A5F3A 4197740D56A73B8AEF6553B1322D8F56766465510F62BB0C4E1422ED5BDCDBAD66C8F431 026F5607BC44022DE11383E92B8AE361220393701F639D5F71525A59086A61B6874037DB E4AC0CB24FEAF5BF47B3F92FD808763878DFBB326100BCDA6D28F8AA22AA825D57F4BDF5 66384692780363ED8073F09D3445B7B4BAAA7ABB80EFFFEC7856E99C16D426DE1B68146E 5D0B6A0C4D473DC840A6D1D873BB5499AEDCDFF94C3C18274034A0973BF333D57CB2554C 2B1A3277F001F1AD019B8956F6AAB816A97B0084EE2ACE94893F7B6BE21AC3C7A33D9F09 15698546EF02EF6C4C9601D06D4CFC9BEBEFB5DFD85792834D79771AFAC4A89FC087AE5E 62D3304680DEDFDD54CA02E3A9936F6B2DADAA911533FE6BAF1708A517A948C1C4C952FB 5F1D017E43EF2E5EB497B692CBE4A914137FBE986B89E14979D03E7922B565243DD0DBC6 BFC8A78031AF69862E6EDFCDE6F36CA774C791DDA6FB7FBED7EEC3B1C36804454DD64070 F3762D889A0F5CD0C19E72DC1A7D587D3702C5DFAF4C2107B5F66717177683C447C7D6D8 A2760D7EB31D51EFCC6C472377D7BA68FD8A9354A69AC7708852FA743F4B60D02481B1AB 88ABA239A28ECA5FD028BB993AB5D0F5C288264DD7593352A02B6C7CFFAC857960EAADBA E28AF2BDF6F829A5AC101D842B988DAE717747BA950812B95BE0244F1910FB05A1F2B8A1 90C6368A6DD1B2EAE5903EC019105ED0A1DC62F7D50B966E8602007D83B2D73F4AA6EFB7 340E15311AE68A40CC6CE13B742007F69B8943AFB83FE4058B7C37C090629D46123212B5 758BDC95DDEBEDE3D4BF7FE52E39E074DD166AC161F4F33D5480A868CDC471B8A31D04C5 508FEB82D70E5FCC6EDF6BDF0EA965BA0898AA14193E2EABE676107F50DEC3A0476AA47C B8E38BDA8C09BCBCDBB65A1E56B0906FFB892D65C4559B18EEAEFDFFB2122554C79FC916 536A755DF7D6E981B4647E6C4C7F0570A96CEDF72E92B60D041249A63043553C6F4C2230 D44C00810EF7D89C89F4F95FABDB1830A4D6615B8A4324663AFD84B3BA1848789ABADA93 9C662A9072875B139CBA06FFC90170E7BB6FC41E29922F87BBB3F706A0DC3B4C60EF056B 5DE97B8D705FF69F76F749198E5058772D7ABB533B58526EAA60819538802F45E7612182 B4EDFD065001CFF2BA813203B7C578A6D73D8974851CA08C0EA149BC88046A4DC57E3DAD BB2CC4DA877EB1C9C1A0F439F63ACAF0799B5EE6AF24419C3BDF2F1C840FE713FEF0A85A 1F0DB9E66F54576AD01E1ED9C9AB6A6DEEE18E0CD8C8787B77452D7B9E42E3C891F129E6 6483FB46B3E76F534542F9D726549957A524BAF4F02F93B8623D232FB1B8A68FF11EAAC9 17062F9821FCEC6F48A56D10FCC41E653CAFDE9EBA81CEC8CBB11D94AEE9B1A1B4F94B26 3EB5D02C7CE33E090C179CC194A7EB20BA79E47D9E4B61E13D4B2C5CF158BD61A784FA78 13BA6CBEE798F5007316A035F951013BB1E53F7D7D3FC2AC26895D419C77DF3FBA5A21A2 A2DC56C3AC1194A3631906B38517B0761740F4BB9EE8F0CFA27198D4A289E751AF39417A B2EAB41FB26208555B089E9D060D936001934A34771983D047894ABFF2FC36D5F6BABB2B 0EB98C7E175A5889F6479CFA3987C5B033444A5C6DF0AB4A431631DD7FDDC340CE42DFCA 93B908203DA09B4FE4244706C7E952AEF457FCC6B588150791EAF7F38D8A9E3CCA454A7C 70F0CDACFE534CCEC246C614C2A711D102E1514DFA22CB6AC007BE47C2D7B84520A2C715 B337DF60FB06EA4A7388F6838639D6ECE790555B61A87484136FB69C5E2A64783DF9C0D0 7B7DF4179ADE208514B817E7C1938C78125B66EB5DA1AA41A99657C573A7A3240273EC45 AF77EDA976035E4E069A963BB26DE390289BBAC98395BD64EFD121FCEA22FEA248207983 5BAFC807E8C1819A4174F045C3EE8F5B871783695B32F15D257D3B7C68B5807C95505B62 E12640AB3FECEB14E0CFAC7F5834E2319C6AE08F0DD0C108498C940C014E84238D9EB591 99C41FD7DF7A1274B70DF0F86B9E12711B29AFD7AEBF1B8C9B84C2397FCA38FA005FA1D3 E6FB679E7DA7BCA29251EE6203816B7FD04A0FB27C4EE935B8ADA464A697E8FF62F5C7C5 503934FD036CE0188A7A6FF6B99FE4185BE900A10E01756CF3EA205D55B2ACA133CD020B 19D5264E0B4D74DBA063E539B81A67E6AFA23E862420DBA41F1830799528867467244DAA 37220A723592A9FD27BD268EABFEEF19F24DD8B209B6F7A2659E92B31AEF962E80D25795 74D535D5F5C15B86FF6125B066DDD606BC9CCC089DA19841B18A6A9D401BEA86EB819CDC 7C606E5AD2111AAC377312641315C8FC9B10272C0E4EC46DC77360ADA46AEBA240789596 46A9213CD48C40F6A47144FE6FFC4B7F476472FFA077A0034D7B658FEFFBE285FFBEE355 3B159258A790E5C449415FC372D9319BF964C7FC036E16D5FCBE045AA87EDC9BF7EAFD3A A3528DD8210CEFCE55F401E961A5B6BA8C8D827A3D5CFF411F950F2BE3E71FBBE7502CE0 10D2F00A3153C4725E89131F94E7C9214BEF12670B8C4E8EC416ACB99F62C00DE71A58AD 7CA80759A64E5457CCD22E80F713746648C337EFE1B649004738DA0E59856FE060E6EBAF FA4833179415425380D59F3D97560F2651D53901084D4030F4BDA2A8F260000D815F55C2 9FFB7493AAC2902DBD98F7A8F238C0354C0DA65BAA3F447DEDAB9EF4F5B444F57D2B5242 DAB00F08DF6F047A8C76F89FCA2A419C6B6EC34AC67A9F2FEC9BFF8BECF05C0079432A0B 3EC00D2494755F7B91A3A3A08BFDC9997022E606671E6C7D3AFA51376AF2B15379485CBB 65B5466E8A9EEB320F0A19FB3C0C4E2531DC48E5648E47C20563388A42C2F5CF3EFF5C32 2C42E9941DA0CC8C4B8377F6463EDF087A919B085D5C8CF0840DCBF1BA131868FF867F9D 5F3F9CB2F4A121CC0CB5F564262C5243E8DBFDE132F373F554361A0F7216AC2797874773 5CFB8DA55C68CE22BFB6D250A2BD9AEA26357B40095D03E6273496FBA1E536CC890E8076 E277AF36461FA64F75C3F9EB2173AC7A28EA7CE92F7B3924626C66F4ECD9D8AD9F20AA50 DBE0EC13528288981219D6F9DA08C13C1AAB234E5D56DE714B8D6274F4FCD7D33AB695BA F2620F98973788E64EF86AC7D36EA939A9427689AB2A30ADA06E21E3167F7113BB51220B 47E8C295F0CDE7BDF63DD006AD2A2E6BA06AB8F91F3E2349DD4E2D0B7A3E0ED3D4D36AF8 DE6256DF74B7754BF2762992F0DEDC21E1ED2699DC4FC20B0743D6AFFD05B4A087D67E50 F3B8C3B527E4EA1E11AD19243EBD27B0FA521219AAC50012262DF66F53CD58C9E829DDCA BCB5E1BF0DABDDA53289960C1A45C7F561AAA6833E562B8B0E87A05556DFB24F997F3A59 D1C191DF0E35BFFF87BA0822BF64A793F862CDFDB25795A86E793BA1E1E523F2D1E57616 93901135220EC5F1BFE274480F3EDCA052FFED67A7BFFDB476E6BBB8B49790DF83EB69FB 0FE7641DE98AD1E056AF840F27FD3A9E991629B8B28B1B06DCA549A15A85B7F84B7D07D9 186B0C02A11CC3962DE0A06095BB65555C77E3E324DA2489409CB6786653D7164988E6B6 70F3A81A23AE39AF5DC3E77F63D070F41F52AC4E8AE9FFF3FB2DBA6523D53AD671A3697F AAAC7986CAAE17165F4AB280B27109E5AFD1F403680D38A6314FF27EC5BD31A53A569CFD 0DC9F42373812EA70896750ABEF3D4354119C2CBE1C911EA1CE5F1C9D94BC7C73B582C2B 0448B5930DDC65AA3BEB15FEE6B0DF18C93C5B131BF2EDDAF78ED7F1046457300FE0339D A2A80DF62D0A3E0819983FCA58E1C542F69AA2E35F76B38D65F8185740FBDBFB78BDB1B8 088302B71E6A9DD709D472A1BDE0F059B9869D1DC10C470CA0622531E0CC4B386BDF1785 814C40D7FC08A00D69F8ADD1BB56B8E468AA9417F4C85849256D292B2A7DC38884B472D6 233F32C93E82C3E9A295C2E65B5EFBA10639A6537BB91E6D73AE267FFBBBD39AA9F27F16 A36B9F3F8272C5442359903D0AEB71F98C8979BB6C1D41F949B9DBF0146ECB8A084CFBA1 79D48465081151A6CC39631046B7D1563A3EEB43AE944DF7D0B815D720A8D1A07C618623 D9C4E2C5C4BFEAAEE5F8F8E612A20169B67789AF2722779AE8D67186B4DE55951D62CC5F F1114116576CA961DB26BED8087B05A363E5767F73F03164AC4260F64C4CF5E4CBF8129E 47B7443F9CC518B968523AA77B1509048A532C982F54EFD73AD57AE26CB3D27912005ABE A6EA080E8D29B972B5285566D316D5B0AFCA30D2997A8C2D85FE7B42EFAADBAC8BD3A50A 72542C8B6CEFEB3343E1443F36DA380148A79EB8E79B896C0F19D68F9ABCD209E5F6A98E 8EA096E0CB1B713D8269C8DD8A6162748753025DCBCA277BF9EC25BBB3C9CD1EBC4E24DE 370FBF130259D79857A93C80EE191A0AF0AAEDF0A0D73A047C7DDB193BE53E9B155E8BA9 90760293F0E53ED03006639B704E460AC1D320AEF66A314A263761B30567B1A3F053508C 8BEBE68DAD078DCDD5637813C88ED0AB2B6854F46F824B18B9A356EDB6B9DE0F6DFC93DA 026FCEB1BA9D1AEAEA5E91D27DD07BEF21288728DD7200F50B577E28121D926B61208AF2 28180AEE679C256BA006C92198C822D865E12C2AE3D3C67FA3FC3049EB00A58DBFBF3915 36620F3F2B0C39DE3A804753CAE74788058C0A15502E907B4BA4EE03D40030545D152B7B FF6FA377D5B4321EBA8129A09B349D438A7CBE862E7FF98EF1DC8CEEFEDECB620A0F9944 D36659A6649A2909DEAE8912439B137B7847CEC160FBDAA167454DAF001D8BE65EE2D77B E2CC17EF03A9736934641C630B6297E3B05655D7A35079F5BD29E63B3D2E8A943CC82A02 715BAFCFD5B46918243D53C2622A4DC53B6938D580659097A7934C9EC5AD81E3F294B3EC 985F8C543E607A2A99863CF1100109CC295EA0EF86C10192C94A4A1B0AA90E4FF53CC959 3E217FAD03D9FFBE8F992A6D05D5E480CC97DECD82E98C2B9E80C4FC72183472D9E0A274 E8EEB51A6FB53A40C19842D87E8EE420AAB5F18B02C0C6085C73DC57666F4D1595685FE9 E3ACF9D0DE56D714DF56F12E24ADD91EA6D00ECEB706778E90268D4D947E5D4AD9DB9D39 8A86AE064703784196FA4A4E2626CAE9E284C515CCE54BBA7F4B67424A73BB55E983BD42 C9585C7190D704338942BF83F9852C8C23CC67A9AF9D5F1EF46BAEAC33D0A9C8E6EBAF2F 7E7BAECB98448BAB23CC74AD37C44A2363BB345BC5854C2C423A5983FB598262DAEF1927 DE73D7E218BBDF74F96F828B061DA4C0B8B12A20B23E514A988E229DC0D49A89AD32DDA4 C7F2D578BA534525F44B4BE0CDCCA8A07BF7A00975C8D67CA5F6A3491D97E05EF854F09C 85EA32692E26096E7E475ED0479450CFA6735AC1021B9132F28A240E92B8C1B657ED7162 01C1F8A3C8B5C920363FC59804D0AE7FE23A076CBBFF9BD59460204676C1CBB6B06C47A8 33480559531C37FF21C8919F3AE9C42690E9E657594F7E6368C84E757E35A0EAA407D039 2B66F67C116395D18A6E41FCB7EA8B7E809CB60CE3DB430CB4CB223D08D36613D1323C1E CC2BC3540F1D3DCD2CA477BCECF5D671D1594ABFF57714443B570EDDCF93DE126CCED561 10DD055ADD9F5801FDF4CB48A64CA603A28CC733D6E3793B5EB3BBE5A61806733FA447AF 98493A44502D58A0764143296DD3671835A70DBD65083DD85014BAE6F36D34FDEF57E6FE 13D5DAAD5826AB9CE8FB0D2019DD926BFE998551CC0F3D1909D9911D6C87437F45305D51 564B6BF7CE37F354D68A683B610FA85654B44EA072DDB7122EAC17D8CBFBC7A6EE11F47C 5EA94ECB00B89B3A6C21276280D0D860AB46507153EE198BBDD170356A8707A2C550423C DF8AD76E5C28657382C8900FB2EAA2E8128DEC9CD583CC01B1643D9287BF00547C6311E6 4F59B340BF7C93285EBCC4EB1C7DE794DABCE50633F1754266669CB2767AA76E85D4AB32 92160D02A0733CBC5E2584A67E85503A06F769C38949DCBF71EED8BDFD3B5CCC58554DDC 275D6B652E657679666FB0E771E1BD3D53A1E595A79F51FD7A0DD5DFEF62A6F84AA92C0D D5552567EC4B008EFBAF7CF20EC504086D756C8B1F80B3C7742D69DD5C5107759A27D7EC 023E4A95C4EA6FDD8A3B9F40B6DDFDE490B6F8C3287AEBF6904D4C052D0945600209208D 4E6C258E144C1CF1A4E0DD96C4AD9B0CB79BAC2414ED469E4993A9A63024CA24AAA7B3DF 6B21F4A883334734CAC12F42ABEBACA6C38930C68545305E43E73ECC3971C12B50C449A0 D00757D68F6E4AC426BAA0F0708BD0B2A3FB6833BB413C4A88917796391F895E09577D52 705238438B34373908453EA2F80D99308A07B024D277FF369E56B110CD9F86942A6B2319 99FE1FDF58ED15ECADA17F7C168206AD77110F1836F4B340156D9EDB3B0B32EFF87E6CF8 BCB7F6034799F94AF33DBFED8F1C4AF413C648E92A7E1CB2044FAAE2240CBFF9BC2284BF F553EDBFCD7B3AF7CD51AEB855DDE53FF51F5B770D56C030FB4E3AC8627CF84F3E820FB6 40C96E19CC7A65E534CE29EF4DB8290139EDFEBF0D5C5B9CF2219A4F9C6E9E1F5B58B7EA 8A04FA06956C3B55717E1B7C4270585756B46FE93429B6BF2057A0ED27DBCBE7AC61C430 2463316A46EFD5D5E1BE1B93EAF8F3EC166C9B01D368B5B7A25AA6C165083114811BD629 039C5AF74090665A314DB9C5CA2BAF1931E713F355756B22FC04985BCF3D09055AA9F569 5F41EBFAF893E911825BB233351571AC2D4032DF6565D3C6DFFDC69A29B5864A7F4DD2BA B893AF236767E55CDA024489D2A07E91F1E4982314718E3F23F869527593D01DB9DB64D7 C9651A3B30401C214844ED8F5E5D4C252E5FB1469687FF9DFEDCA394021B429E1077F3B4 15922DA1B16B9932C69A7BC6273B4D22A832FAAB46BB1A1DDB5048FB57F9D9D833740319 7FC43DEFD4EEAE495E5F38CBAE7378D7BD23A5ED917C00545DA0EC6BF700EDC7E23A68BF FAD448369F8EE474577BFFDC3A6C5C668C14FBD0934935D4666C70E0D3088AD7BD4D2545 E988C9DE0BAE9D65BB63AF292F733C98FD258911DFD910AF3B1BB181B7EFBA03C2216F19 3A23A714116E9790918401E2C1A9F1627E31998D54224AEDADADEB007B88E510D5106BEE 421BA9CEA54CF33BA4E3F97682528EF6D24981490599A07B1833CCF0A80D8D401F873B8C 1E128314050B32E09CFB65E02C58B1C31E62EF7FC20F1F84FF49EE55469E0D5F21456333 045B04277CD2CA4201F6E0354ECC55386F38BDC84CE368124470F6822543EFCE981228ED 1AAE9E9A27B0A07B515131ACF69240ADD1401FC493D888DB05D37334759471117C9E8BF9 343C71656700718313B9839B306023807552BF317B5E615516F3A62A368C16B13CE6B2E3 E9B9327B7CB1895ACF6D46237B0E605042526EB6434CDD9FA1608611733F28D9E601A2AE 9E1551D6660FA7679CBCD9C951458A98653EB7598FD0E93ABA9E1355948A10E1070B70B9 6373FDEE83DEBC14827A2C8D6884BB4D3D5BC9366694538D284D01C83247581912911DC3 3AEFAD745ED28A41248049DE6ADC38F23440761D4B52F3C2090B4EE555AEBF2DD254B7EC F1329D943E3B1EE99F398DB434185C7F9C90F16ACA062475A369866EF6E5A387E60FF640 2362716865A3BC3EC680C3CED92D0E3611A8745064A258E6877A3B6EE867E4AD1876AA03 BEADFABC11B81775BA53612368EE6B1D9F52E1AD89BA3AEF87AF01C93C9DE656F640B39A E23BF2C80C461FDC12405B9E68D1FFDAB949CF662233997CCAF8CE77C5946D0A6CC5C6CB E048254FEF48F9156A17413B8E85FEB60FD25AAB10703F1E052325B5D55BC4BB7A43C8A4 8DE9999AD6B699700512C54A17125DAD80705E8A7789C5827D9819B34612BD7771FC9C18 4091A78E0D0DC4FEF327433561204DFC4F2D4EC0D67C7627883133E0B9C48CDAE8B01285 47D7D8A9A8297C14F565A375B59968C662FE2D277260C8B6E2266D44C020662C1D195BDC 804C53863F6C7FEBAE3A82A5D9496F9B63F719EA33DDE8504B158E7AF1BF79C9CC71B35E BE07E96AF1386A9DD5B547BF0FF89CD1882F2D8B9620EB182896857384D61989DCCD78DE BC16DD1B96BA4FAAB2ED76C695105A3A152866F6750D97384EAF65E15598797CA140C3F7 448AD30801BF61351B2A90047F3348E2306E67792F9B46F1FD66C90354940E437875B498 D5E2DFEB23793F75899AB504A431AF8AE3A1B28D936E6E122191A2D180241ABB707E2787 0EE80E8F324F67B86013E68B43054E96CB7E3F5A26C9B7FEDE6343ED3969DD33BAC41644 13BDBC672B6F8872FBADE8A253AF84BA00F7A41E911EF65AF7A056613F8745323DC5F1F5 00C179BCDD0EC671BD508731B844D9E2E04350A9318C0340B71682B68C481FADFA3A0A73 072A93E8D8B0615905096E48E60AD56F1A89D6A730297DC0ABCD93F8FD27116C27FA8A7F C277CC0CFFFD1170949C221162BCBABD8F12A3E4E1EC0B814A6979B6E7CDBED8C2750763 788A05FEABA3D8775E31245ABE3DE68B4950B0AC882569CA8986438632B1E03F041ABF21 B03BAFE97BB6E6C13ADF5DAAE19BFD3834B50628F6ACCB83104F36F94B8DB965F524D853 D84028B78623AEEF45F224C2F90572372607DDE2825041CA4FE767528A19C0464044CC76 E15117B5853CFE7EB309A396FD2349607B8C6463829F9A7BEB6D16B91C6613AF3089D83C 15800F05D65F8D199A7B8BAE19B27D467A586313853BA40A89F5C6711BD412E724A822CD 1455E94AF655A1BD8131130695205FA3C9DC56F5163DFF8225F727059AD1E66310FFBD3C DD702FF7F83E7424F2C4FC160401AF9DA9C153319925233FC6F7ABF3680FAEA5A96CE82D 716AD37E21AFD6D7E2EF67BB7D355A33EBB5D1018DFA58876C12150311FBFACFE9D03EA4 52F6D5CD4C9CBEA6CA38C2718AC077AD029765665A57EDAA76D08FC38A476A4F80DF04E3 03C667CE9650A05B3D8BC3403F4543F84BFE9A794C43F1C77A398BF45FEE2FF224FD9814 3DB0B9ED77009B9FBB99FACD7A096399BF48216DE75FA4064F83909F7929686CB3B8EF3E DFB27F8B317E075D07582F52EF6997656F359EBEC46D5AA603EB82E6EBBF3F4CDEFF7EB2 898D1B24CD54328C4E812DCA9EEA9C3AFDC3560585247685700FE51B62A348832169A40B C6B2D8CEEF47FDFA43E4977FDEEC82385B565FFC606E3CDCDA0B3FB96DD7F98FC50AE346 BCE7A7EB2A00E8808A7D9584F7DDF07537C869DD1CD65F9684A72B43E2CE43CDFFCFBAD6 6B2F85E802CADAE03F638B2CEB60E6A928B91260BE8758753F5F4D388AAA81C92DEC41EE B0D028528F7E4610D1D79C679ED0DF730E3178567A9F70EBD647F5F9AFAB3E3D50E88FFB 38E63347BDE04BDA012FF36B8497EC9FDDF9B6E2714B3B02E1467437374DDD4A41683221 8694440F7E7C656DB459ECBDEFCBA795E7149FD77B094746B3B7D9E6A5420F41119A413C 8733BF81B2FD1233443F53AEEE83E5312D1EABFA1F67D53B0799276A267F09E0B0A51C7C 048448021188F9D4BD0469D92E99843C12EECE232393A72BF3A620C70BE90131781C9169 B48CC5B6B54B93A7122FEC875F63C1609BC7C25261230B66E31EDA663991928CBCC29E41 ED0FA135195B59517EFB23FCD05BA9C4EC19056E3E0231F943B874FE8757FCA8FCD944A5 5916031CD14FB532C6D6D280DD670490EEBC84C750631953FAC66721D697EEA23795D1EB 3C65E66CC4413EB3D26ED91DB42ED477B0F3C32753592E268AA6A4C11DA4171D3AEF91EB 1EC50BA7A78DD2EAA1212E6A94FAF6C7CAC18922CB0ECB632180DAC96A6F3506EB4B35CA C82CDE9478EE1B5AB97362F265A92A9788BED5A8F9DB3DD84D796E7F4F8A225C070A58A1 95F06F43709E5D2E364D448916048F599F416BC3D3F8CC6206CD9EA4B9E29F6520A1AB33 4CD931472E014B4BC3C2CDB7604640A626994251B2A7A802852B5883AE0D03A5E6CD1684 4A7DC7786C4F309E7057077828165082E3DD877BDC53BD8C35758408666C9C0041DC5146 39163297C6F47DFE04699436D7E07F7D435B1181F10F5E15893A6CAB5FABC5C2C1566116 B9D039C3225024F2BA4516881DEB7BB9A3F1BF292E89F3A72AFB00DCDA970BC5D4EC8C85 388A815B1625ED5046738C798B0040CB8EA9151934FC7BA710EFA65C15C34E051F149316 99AC537F9409A4F1DD9ADD37AB76720C7763903AF14C8E6868C27FA913194A1A991D8524 D256C5765D8CBD4AA8E374F2052C567D327D7907C1BFCDDAA9A8A07B6B32502EBED9C841 A800FF0C8FDD1C23598AC2D62690D8C824E9AC763D9BC842CEEACF3933AABF4646F3DAFA FA7CB6298B20D68B2B288796F91A5E307537FEAA2BE5F20464848D1F98A2E9436071E999 90C383C1F06D2E9C9BD14D06DE8DDA5F5A3E32C12AB3BCEC437D1B92CE74A001D89B4E7B 2A0AE22019C3AF9961FEAE3B8ADF4186638FD6763DA407233CFBA9AE59C2BA5664E7BC0F A8061EDBC9D07EACA9985BC997EC3356BB87D4ED9EBDF71EADA6865899AEFBFE131F5A9D 196EDF343FD12A20C0D8C20BF917DFB7529CBF6DE777DFEEFC455360C80884EA3BA27ECB 392F5910221FD169D52F5D081E768140996FD40F0EC6769956849615C1DB0CA04A292168 4F967B0C36D1519B5B22BAB0281A17F22BACF6AC88CAB43DA584B6CCFFCECD0B66E59C8F DEF4A32FCD5B4CD9D43CE959658AFEE5A9CEEB9E418919560E4260EC61C11168FA63EDB1 A90663A3E071EC1753E602AD347A5A5E65866540996EEA625BFEE9D2F4CD85934572B9FA DE04F914F7D1275FFC874A4AA838BE4F4BC809D2338BC4C6F9639D7A5012502BEBC8E590 E4CB2AC6BC788AB37742BBFF4BE56C2DAFD31AE6640F828BE43F9C62A168490B5ADA535B 706C6883A3AAF8584FFCB1B3708480E267FCBC865118EBDBC15BE759C594F40BF2BC215A AB8FC1BF47F09D2E347B5AC022046C734CA9AD9A5077C551DB990E46776F0A165FB5D9D4 60F51694F26FA13ED6DDCB1B596592BCDBB3162C6B888D7CB4DA5B24BF25D7B1C0F7F77A 4C68315442260A97AEF37A93720A92FF3CF938EDFF05591BB98C845FB4E3C42330EC7E71 3FDF79183313AEA3943C1313806B67C2432C85AE0E769AB3D114E5BF24980DBC7CBD42E3 48FA0901FB0B42E4EF8449BAD88A4CBEE19AE89372880E3D48F7B5B067CAA054CBA8023E D43437AE8D20CFE4D44F0A617E4E5A0A03FDC227995789A138C38C89E66669A775A58196 9E0320AD391768EDDE1F5835C04F27D40B873D7CD28F76505CE7B9CE6A9BE057AF1C3726 544D25116F90C5615C55AC899FA9FC35B85F3E125E9C58D4AF019BB382870A329BA90A68 9C2239BADFAA3705CE0AF0AB34DA3973164FFA57432C0C773F9DA957BB3144CC3B83702C DCB37C9037EEBA0AB2BA0F4CB8B6286CAF8F7317307FBF22786C75F012CADFC6AAC483B4 7CE90EE44B81BBC90C70E0636B82710737D20562F3BFB827A10C2D9CBB8B6210AFB7F730 BD3405982B2904FEE9B5CCEDE5EFAD4A84F13BBE5B8A208A53D8225358CE5562ABFBBEE7 7BBBD7DF459AD2367E45A35FAC0EC3F38CB1A8167CA94B1E7CFCC079EBCD99D5D0A56E96 0EC00C618A00279A192E59E2979278CC746B8201E314709AFB07EB355A347DBDFE5C3DD3 82FCF0252F0A8257A42016EEC80F3479CBA15F1FDCFA436E3088A34254898EF5363E3AA0 1ECB553097D3C10669B44A73B6082BCC4219E18341D6ACEF628863897056C710FCFB0CE2 FC7C00A8151C67285A6E48B82901863BABFCE58748F0C0BE56726C77E2F48E9B68B1C7E9 3C1175FB20CCB9492136373FB358C0335A250B191121858708CEE3CE0E1D7D3E67D9CF5F 02D38D91B2ECEEF6C68BE4877AFEBE2D64C015AFBDE315F2C5D0619BE6CCB5B4C68B9664 2E9A66F934245DFE8B94AE3CEDFCF9B6C01768DF9DA249244AB930CD423D9EF0CEFF1DA3 80F76FB95AF5F504AB104CEA25B70B8E4A482B8EF22FC539DD842303F22A269AAC2FA1AD A6FB8928D9F789DE859DEA2D33309E59F17D3DE7D71B4062F7D3FC5EC9E02546D5EFEFEC 06A1CC4A176B2E0C63B773587695C1F7D6131F2511EB4EE50D5CC064EBFA071A271C5615 950AD81DC4634E3D352DDDBA3CC6CE973626129C857C5E6F7213B24BFADE04DC0CD4DD95 095AE4E8EA0A15828F11F8B6767443A907F7D6879E5347EF4FD6C5D53BF2A2131C45DE42 830B47DDF6CCCDE07E0C2C38775C3DDC1FE7936F90170F882D8A963E69B26758180E9A41 4747BAC45D643BB5FD63A57F5D045F44FFBAA5CAAD66D3E4ACFB8A5BEE9DF0FF9A382591 9992B9038861854413DE5C870F918EDC011968423071538068537F62A1F20C5717D90106 54EFE4E73EC991145DCAD2B93B40EB8598AB729EB71788A09861CE2C90690C447FD60847 59EB81BEDDF76351EA46660F35F3B716ED315C3CAD8CD424B136FDDCF2A3A7141F860110 32CCFCC2FE688875DD7F36946A9C1F73D000808CFB016AD1B2F60A711C8FD850D3707CBF F7DDDC777DAACEB3FFFCAEB9729F88932B7B71ABA483319BFBBC8F4BB8CEB0261A46FE81 5D451A8E47CD93638D273E90B9B4F03989DFDBFC5C9635563C6AFC097F9DFBA49F0C80D1 B556211D1F114AA1F89EB1B492FDB4D2E053B7AB523E675FE0D47028AF8252D5D1507099 F3E4810AA997598E893B244EA7B7DB74D261C5E31E961E56E7DBD35F0A94C9193520FD30 354C6A960024588CC12D13766B8209080A221BEEEF4EE288144879EC5BC135F0704A016A 3E80665D1E691E1F262BA18F217778DA9AE279ABEC6086BB9E6DC6AF4ACF93D36D8EDEDC FFEF1213A8FBD18D633E3DF02F8FF52D3CF20CE61D1522FB049D8A8EF5423B6893DEDA2B C3B49918D3DF16619DE4BF2D1555318F64774065C60BB3754D1FC78BCE8220F4F03D06CD 83FFE07483508CB4E8CFA2B1C89B8EE18BBD46AEE77DCF2EFFBAC3B3F07A2B442FFFE55D E2C0569B721C053FCCB7730A1CCA69A23AE03E8110876CA4104A6B91D1C9BE174A6A91A3 057051FB4EB972A7285A7981932721A1267E5CF9ACA8E4D8DB3118B78BBA29D84D4A2B66 F7C381DD1C6A3CBD1EC5DBAB7FEDFCD278C1538E10150039B7086FF4AB796EA381EF8086 B2E7F6FEB0AA17BD8CE0F24F72D7581A2024F20028F7474B23F23659B19225C6B8D429EC 4CE7998041B1178072BE6211570629A6A7C910185BC3F8446005B9AA157C95F7D01CC7AA 4B5739D65168FF2FEA803E8431CF352A430286A86DAD7904814EFFA9A19E631718CB413B 5017CE3F23EFD2E3B3E20F488A62E9E9B23A44B9783040802E0DFE8394432C001D2F3618 DF8FAAD31AA6332937AE0466FD76ECDBC413F6307974ABA27D1F4FD762780B8D438F00BD A924152A35BCD36A32C407EBA95BC82BC1566D2969101D755667EEBB7E1AA9FD43598F21 48D6B15FDB77BF25EAB7666C3FE8F246E9D7E0786572CB68421B8D6276D7CF664B87F7CC 16A26AB99D4700F431D757CAFDCB3119F28944D51427C49367DD82FF8B54325B44561790 F7386503566064EBBCC8BA4A2ED3609DAF6B084ECEB381B567D55F1C9061E7B3514424AB A0A13435B8F4EBF6F55E0D72D48D04007E3F1C57D9123B89C8845DB125E0290404787ACA 8DFE1EA78C3A5D010D771E47040EF13D7AA0D3C6698A5AA7BE38032ADF64D0ACB8182F74 DDDDF72D648426C915CBEBADEF10166B3443F2416D699FC84CF851223645A0722BCC4D0D 110DE5A1895C31A95080B83005D6EC6DF94DDC77B85EFC18F7D7CFFD4ACF3806AA0BD2EA 90BB17C8D07E7678B08C2E4E352E1BF25529115D1F6CFFE3E3F6DB7EFB140DD21A430B62 677CFA27BE4D355F07E80372FFAFE446E39856845D2A8DDFC8916A7E5E901778DCB0AD08 6872E4206F3B07FB6A10E7C3117D4652E98B9D7D89A49955148AB81F8D1BE16CF284FC67 62CB95289DA65ECA26D3C642EAF9AB47690258DAF9BA470184C791127F278E021118C563 768ED3DA7E7925FD47F8A2232A8E63A6ADE327E99FA0C643AC17741076C7D61973A26859 735FFE57B037057ABA98EBBA1D4CDEE45A6EE65DC13400516B97BB51AC217361C87CF292 8E6B2B331D96D28AC8A38D476049C94C6D0B35AB37C02E7AF55040272B54D19972011CA7 5D593139895E3B7CDFA265812B730E66E97E8C322B3ABA056FF33A6BDDE14DB13377E54D 85616530BE711921A530B150CC4F39B7C6E7AFC86D9652985B2A9914FCF571FA6E63C5CC 7E026AF5D547EB63213F4A4A0CEEF30BC84B1C7CA46030E805147DA449B9DBF0147A3CBE CA308B11A8CFDAE8E4500DC0322165195E14BD739AA2B0AB40258F68CA6D788166B858C0 CB100FAE18BEAD1AE9EA96D6EB9CABE0B23653E09A4122297DCE18AEADEC9A6E1E208BF2 1499E347525956151762149969209D0F4B43D8B812093FF6F5CA5A30733FB106079F9FA7 FEFDA15F20CA77627A526FE1A48F57DFB966130E5CA1908F2B33AD406E4C7797D407E3D7 7686D2A8B415C96279C4C2DB390F140B7AFECAB89BD1A58B87029A79B73C47E74A2D4DC3 E84730DA103F49F71AD3FFF9E1E516F29F0280218F2A1F88BA0DEF972984276357257EA7 1E7EBE6EE51040C45B95E5E6411E4147CC9337BCE3988664D1BB318F1C0855BC4FAE67F9 F5CA5A30733FB106079F9FA787053D656AE28F1AFDBAA008E3B70885055A956B3F46274C F53FB89747C66AB3A63ECDB0DA80D36FF0F39861006DBF8DE7F77F163E6A472074F47451 3080CFC0BFF83CE524946A7987ABAEBC3FDE1F6C87941998E3C52FC2AFB75E29CEF48861 98A3EF0A403268F0C6437520AC78CC4FAEC848DBB36104D4B5D88E1BB8D05E3A4AEF79F4 7513CE15DE39F804020960B586ABC278688F5E1D9ED7C756822E89BEAA3219DF0473A363 05EEC21255950476156316BFE09125CEF7544EACC5061EA7062AEDBF7D969F3969B06BB5 47D886EF96917ABD6F8802442EE6D3CDE9681EC619F2B3961E212D31CF3FA4342EFEEE4E 542975E41155841CEB376AC3201AF6EBD2CBD13AF03E2AF6A50F4B5B7C5EFE648E23E367 B5EE2E62D1B4C63641BFEB60290629D3B1EC6C19783FBC44E9384A850918C49BDD01C121 D2AFE82D5A29C837858DD773FF7AB752D8F86759C72CBFE3B003C4E20D9583E529C1F856 103D6E7435115AAED22975E06537E224989A51518403ACB7094848B0C364ECE8EAD2A68F F4F2ACB4BD0FF013988C7787F615FAB9D532D768BC5C2F30C6DF1AAA0F11D6136F0342EA 8D1C458AB07A2718E6E0510D0AFE349E815C6B1F7EF2D9826BB3A85755C5FD5A7641294C B520D0497433CA937A9AD7FD38792DEFDCBC7C63403785F1544F036324F8DF2951D46A15 184900D0E077F51D4C5A8FC3BD4BF9E2D256ED02EC1FC996A53FC6A2F5AB0051B4AB122E 9BDECA7817C2B322B615592DF8D47B0C0286E4CF6F940DF1BE9EDF8CA8792F1A82DDF608 D4D585CF3268D06EA597D5C7F5A27180075B9A316DF21052E96298B61F1BCB10EA782DC4 FF56CC7738E666609CF41ADFE91CABFDF3046642AE0315F8ABBB0D8EE7B4A956ED203913 E17A41363D3B7F5A8D8273F955D592A1858EC2364C4FB21541A62110C19C92E6E514B833 723CB5901221229DEBC352D0C2D1BEFE2CB4F3ABB3F344691425976501286DDCFCDC07CC 8B9727FE6F2ADA526084C4505F4C8DFFC825A44E03D58FC8D09612DFB6314C9B0165B9D8 E3BAECEE5D560092C7A2C749BFB48ED62A927E256DD7F324FEF554A829D715B89BC16A9F D561DA466A7262E9EFD3BEC4B207759D824DF19F90000BFE4ACD53B0231BB6116FA7CE2A 6129C7F92F049A42A94B8633CA2FB0484E7E4E17DB321C060E6C3FB558674910A7158696 481629EE0B2C56F33FB1912A1A4040E0F07CE30983183B78AB8ED13164BB0379855AF56F 1D6B7598D4B5119037B4F69FB4678AB6B42E969BDA349F610A2B4779093331DDBBF97AB9 72870F925832EE921C46505FC22EBBBCBADF78D9647AB444E3B7AF996CE98BA3456DA612 F4AE40757BDB6BE0E1F0346C08070B6661D0BFB4818CA5DF007203338C51F7E375388048 F78E3B02E7E5FC63EB694DC8B727071D687AC6056EF9D467D3DFDEBB71CE3419DF7DCFFB 24134F24EB6CE261A99B438EEA82669278D8490E043162C6A05CE33EBA94984C7FA6434F C937CDB0AE61C0CF0A6F208C25CD583F640DD5819DD9F2DE69DFC5A6DD8D98066D47CC75 F4EA6905E540FAB4D3ED586102505729AB8F6FDA10F06CF2C9FFC9EEAD7C1CB4C8169B57 D03401DF141D1414EBA9D76A5397044883DE4BFAACB9E776D83EB6E39B78C5D9EE36D938 244B4A9CA02FD16E76CE13A4736DDC7FB14C6300326EDDB6AE7B337332B88A0A5F567717 7507B3409C39AEFF6ABD086A32EACD96345E77F2EF442EC9DABAE34408D9B9B9A0318115 93AD90EEC1C8E3A3F4B0B84BFE6E45ED2ED2104E9AFDFE7485575B64268A1A23DDFC1E58 327619B334A0FDF9C3A38BEE9E9CA081A7FEC1BFDEFF57F57E0C3EABB5C4A02F0ED334E5 C449F42A9503520A21B81D5DD2C0FFB13A5154481A6A35C42B5568449601F19A00050248 E6CF8EB857B03D456D370950790F04427A1B16613E9F9937FA61249CF76D1A3DDC14D2D6 B0731259789DA255AEB2D040E5F17A6002E415E750FFC651C9F3D7726A177F5C5C0A6051 0D57A9CE9B11378B4ECC5377AC56C7ED7C819C3119A5C94FA6FC4C7C8909AE16C6FF0ECE 9DC5A2BF191F7B87E9E56243E34866103E7CA1D3C91F695A7BB0C4AF9479BAD7868BC464 69CC409D61EECC9D15782CE04DDC094CA5A816EE219AAD61E75FB03B19D0D7BCD31E5C83 69A6600F02C605F3E57FC61E58F3D4685BFA1CA5F3995921B7241705D443974DD816915B 306106E0941DE00800932C15EBAE0584699556EBEE29AC1022A2E7F240ACEF0E9124C082 FEF929CC2A27226D965D11015C7FC17917ACAF6ADA74329101E74923CDD36F2813E016CC 46222D4159CACC29246DA514881DFF04533F83476D8DFC75B46C6712E11C157F55D83D7D 363B00B939A070013B09FD265C2DBAB728B8329DEAF434C907DA74A18D67E0BF063BF0AA E4E38E3B027E0CB43D73B76D01D8ED48C6AEF84DB3CF36635DE09B67B5A955EC90BDFE31 E72B20DD4470469633A420D8DEA34786D61CA19CE7E96DF6948975DFF208029D809B6E9E 3A9556DB2E592F91B9E5118D16CBD52F73CE3813E7CB0615340E41DE1FDCA1DBB3572321 6B17B7EC1AD7E3B6466930A66000B9138C63C203AF7E62F5A63D10025DED72ED7E1773D9 E60FA23AB13935291FD33E822A79572CEF9BDF87BA2AA0847294B21EE5D915CFB9690AAA DC144448ACD85D048C2B11F530F6373C994DB05FEF53143F841CB7196213362028B770C9 7E6A7E4F1E0B6278DF91B01288E7590242B0712FC653C0E1D5A2CCCCE99E0738A61BFAAB F95B479E79378A49DA9E4642626CF8EEE07032E39EAD131DB80940E74B38EDAD9708838E 382614CA952BD8369E5F69A20421A9F8D60E6C779EB7B83FEB870C81123A767E27C2CEFF 9818FD4124927A6B2C0936CD35BAEF27C5F4A4194198C72AB6952ED0B3AB09636B6086B2 F224EEC1BF5D7A88D6928A8BD5112066279AEC1F30FA4E52EC72133A643D5F9FAD49EE3B BC44D8757AFD20A7900BCA7DAF47AE69266548CCC60CEDDE4B09385196AF5B6FD630BF2E B22810E941F6EE31F8168A5AD77C981E625A7B550D22116DC17935FD450521376B4AAF61 12CF6F37B59347C44A2CC6EA811B55FFA1215840825B4DE673D17E2B67A36ED57A359B20 09FE9C07882A8952D4D3D8289EA9FED78E329CAB8E670093131AE5AF1D1A48817065D0A2 3F7A883D0201636BC066B0106F3E71A3CE51D694EC8FEBEAC0E92229D8EC205B8BEA057D 628D2DE7FBFFF5315FD36EF85966EAD609E1D406DCB6B946751984F660D48263D7575A65 378362701475B30A6294D8B07247C2E70E37ADA6AB821CE45D16EBE1596BA82B3E31C5AC 5857A9582AD0ED58ADE81DDC0FF291F4D067042FAFD0A28C6B21C6DAD167D4E12938102D D89A3B67614DA7B3B5BC40FAFFB27451CC524514DEED849717FFD6E2A090EA2B9824CDDF D9A85C1025F4DBE857936439E1A185EC646A7E7F62E082B2AFCD833E2C1E40035FDC1B8B 2180E459CE28F9DE262E546C7F5A2B8AFE5FA25861A3C07BAA672816A028ACD08EEA7611 F4EEDEC967F73D9B62AC9E72831CEBF610AB7023EBEBF25ED8C65407DC548573C37771E6 6E43E615CD01322EC03C3222BE7F0BCD5F3F497BF2B05C630B4A9E7927404E754B278F81 158583C532596EF64783B0750BCA2283FC3332758C4BBB8CBB7315383FA2F8CBF590A128 5D7C884253587C5365777536DAF556E1458143DF3C78EB15E6A1DDAF3AB2AE1CD5D89126 0B314B8205D5E660803144A6D64BC4EF3F42BDF8FC20E39C6FD1327199DDC94A8422CEE2 6E3CBA4D168199177F364EA419F090FEFC2845A87DB8545C57F5450194C3C232C883B891 CCF09B9E57552A3E329AC3818A36FFC0A3367E72E74F0A9AF322CD8E22C3AE439319CFA6 1CE7606A8534A0BE7622937C46B6A4B9B09B833D09CCE1B2E5FBF20F8D87E72E47F1B416 22924F06F9BFD84BE93F5B6748AA51FA3B8AB74DFC4BB733B6DC52A03648BA3888B7B546 7B7CD98C2C03554B6B8140A7BE9F2E549A923CA1EF9BD6844FEBA42C703D7CA6231B0B43 1B764A911FDA32C478A4316C5F5B08AA2EFCAAA3FD8019FA1A3030514BEBB613A2F2430D AAC747B704AEABE4B44BB69A11E17FBD5117350F80C5AE708E99268B70133411365CA3A0 E2D5A5A2043E3CE017822F58A46825F27A29427FA5E1B1FE34AB1FE441D7DA07684E7DB1 41062226B4896508418D66302B1DFA70319377785064F4D11F2D87588C56190BA51A407E 07C79E414B034640C70279ED975DE690B9F20EAC5038E2998FE5EF69B810DC813061D0C5 3D6992058FCFDEECF60EC0285211F3BCBE7B39CD29A298AFABAEA71819B14A50017F701E 6CB8178B8773F393B5CC432ED78E19D5AA820B6781AFA3BA350FB06440AFF2EB0366AD43 975AA63A4A919FB3BB66F912A28AC2309D7D0416BF26B1F89D3D2778F31984BB9E2A05FD 19F1FA801822BFCD46A32E544ED2967AC48AB63323720C03ED2288A91B047A9FDD0F857C 50ABB19D1F04F690B115D849FD4A13BB1346A0B1BC686EB550E40D71FBC814FBEBCDE0BD E5D083A3FB05325AB7E95DC8FFCD1911C3EEF83EC1049B728C046B82F80C67C1F900DFD8 09D7EFDA9D8E33D1D7D069DACC403C1522FFF2274CD115213545E49204D9FBBD36C58D6B 7E6ABEAFA3D4371B11B9A5BCF7172F35EE144C7CA41057058A3FC5C83E3C78F15F5B04B0 28814368B0FAE8E719285D28F31235BE453026D282A86775C5589F326852ADE3BA445DD0 4CAFD3FDF5DA3088043FD27511612047D1A35AD6BE739722A5740869445C8320107D456A C360847EFEA2DDAEDB097D289B85796B806E1EEF34B17102800EC51D453F6908F963BE9B 87257B34B54DBD71C99BCDB0166B04EAA601954EC7F1A63BBEA88A459D35BB8C95866F1A 966ED6AB56AB3357737DB13A3AA88B8DE9F6C833DCB2DE8A686505E8BB0734533F6C961C 1528B6D555DC60DDE581083B206F3AD4D6E8AFB9AE9C7EEB5308327CCE2052E1EADA194A D80F11BEE7C6F6FB424273B395CA183CCA0B5A956982C99E13749E9F1FD6F397C81C3AEC 06CA51801353FC10671D6F1634F183A7253C4865AD3E9BC285466E00DCC2D279378A3D57 8E8458BFBB1000820CB12246B1B1B9EEE7EFB7E0466F436A9E0BED0EA042BC10F32B71E4 9525D92AB717846142A0A14B79DBA92E82EB50892623B634AA5D735E1C327F1648BDE02B A5883DE381F3E471E15639374C40A40CD1CF833930A80D0E65D0742133D541C186209978 121055D47D03E47AD05C66C0852405CC3AC167B1FB650AA40AFCA4DBD17539DDE6E430A6 BE5FF8123F49BBAD084EB776600FC3175B357BCCAC770E6683F0F04EC8EDC616905B9CA0 C2E64B24E9E24B35B021CC425386A64629E1B00CE043F77A32DDA10CC8B2A2F9B53C1CF0 653070F795D7B10B1045B00A5824890BBE233EF24F5D865EE470BF00BEFB695D11A2A3AC 3ECAF71B210350D0EC03B087343A9AC1E81162ADB7B7CA6FBC71C46F0D12336B89DA327E 88B58727C73B4DAE37416851A8818AD32F962E4FA0B08F54AB7433CC2E6143BED82BF507 FC210B8ECDF890E664EF0A591D7FA0923936A0969508551C728702C961B8D182308E9DCB D67DCA4FBA3A7726807F8FC3D61D59336870FC13E5F932EC60799C0B0A3522DBD711B4A5 DA823213769A525808C1E67899ADF0FFBD22399F56DF6C300347FD68B6EE22C8CAB19248 0F5E75BAC4C5D0AF490383C45D1E6D9B0E3A8CD9F4A9944A422E0D7D465ACE6EBEA76AF2 8423F130F26F33ADA9AE10E57D38286241213A8C41910D0F1842C342F4389E48D1B3ADA1 C16FEE829EFD5654ACDCE6CF0B407D161D27F7A4023A840E73C84A5861AAF24D2973A803 0E536B64CDA255E7E141F6C4BAAFAD4AED7573AB36C3C3581157A19C9B031683D1014B39 44B2BAD31F32E3A1C1291824C2CB325339424DF8680FF763B047F27DDBCBBF375CDD321A C3277A44A0498AAB56E96A6EF6A59341E027105D6A2D3707249DE20E29A011AFEF9DF0E9 6D46BB5371C9524D7C17DAF8890AB30DC97D055609425D22FFED30B85F8DE1B77C9A7CDA 58AF084930F408371A132A4CE8A9A2B0A9063EC56FED570657B6353C1280DCFFEFE368E1 CD3D0349E45F68ED75ED74F6F4844E6428D4C8E0C62CD295BC5D0763851455C4A79D4FCC 85996390B3450A7FE6EED7BC3F9845B8E68F40F251BFE8F0CEE0286E33CAAE44AEC0A955 CB38631E09217AA72DA39E7D26A7F921BAF02269AC2E2BAD02AEAB2F1498350265B47F5B 0C6A99868F893F7298F4214ABDDA69CB51337A63F999D0245C983F1FC7207B05845A9BE5 295DBEACB897A56EB468750A2CF64C75DAD9570E88D5B5A5D8E75D2D80AE39315409BBB4 E3BDF06A0F98054B7252568D2E99B86D044EB3C5017901B52F0E3AC1687A2DCA81D57D0B 217184FC08AA0E906452EAF73DC7D734C9135A14D0A6E92AC83546E1FCEC1765BF27E457 01EBC95B91E7051A3A57344BC51527C287259B91C1C4A71BB6B08AF1FAE18A65393DDCDB 395AD81666EF90F6FA8C905ECAD57A4906F383BFCED8B2EB7B3AF9B8B7F1459C1DE77C29 E2E8CA74E2E69678954CF7A9AB9FFEBF1702015CBF8F367BA5128083A48BE975E177A6BD 554A8A608D8EBF5AF65668BCAF4552CE1640F57730603EB3C841F473377C652CB7BC5D55 C43B7A9A8413466317A5D27B7687C3470FC9F325711BDF70851B4BD0A4FA847A19038F97 FA2A0FCC08179347DBAA327C0DE212FA328F551735C71787B49064FAB42140D1BFF9730A 524FFD0402DA5CD6E5205E3BB30B0AA3CDDBCFAB3B05CCA25B38614E06661BE3C9B43B0E 7F2CCFB11589FD9A50DFEBAEEA0A16296D0D80B1B722CB7F9F80DB78D6E41AB11C191492 C1366401844D874E2C7C79C5DE07130594FB6D70A138B367ACAA856A8A63FA469082344C B86DFECD9556736C09ADF556DB8AED556182714354ACFA981A80A8B748DE52D64316C276 3B1DA28AD18D4FBF5C125187804377CE7484846879EC057A5BF2C43E4409EBC0DC56944C F346A067C940634DD849A6BC8CD96FD6BEF2CF0BBDE08F7DE95EFBDDDFD550D1A3322BE6 8B79E761284102242B08143DE9744C1B7A404204E7816B0C8F934218E32F490606EA067F 58CC95F0160E9E93A973B85A40338977389671D62E73F8A6DACCD6CB38E3DFD22D9BE04F 312825BACF70D21309CFC0CA940385805AE47E4D70DE09BC6B7557F6142A6572E20B566F A1438AD3DBD28A7B534BFC37CB09CDF37BF75ED87109C56AA54EF4AF00962BF181E528B6 3717D2BBDD47C7CD6A9716B1C409ABCB570E8D38D1269FCF93407CE42174AA0CCD941B3F 4D36D79FCFF2FCC43FDE5AAC5066E9819F0BEFD466DBB3B67E22ED82E6AF4EBEA7AD1B52 CF43EC47B20D6F0F9FE259F14F4868535FF66F372AE3A39AE81E5BD40907E0BD8EB29C71 96EE5553194B184721610BFE28A85C9F0C1A0D309BD1322944A41E927DEAD321B7F94FE0 8DB7D3889284E799672E7285683463E3AC3534A86E15B424C37A3D153291F0B0508D0462 DBFFD3446D5341C6193231DC98A3343853D7E236359CA2F26D0A98894278020379CBC8DF 26D34E0F909FBB6EF2E63BD4ED0CE5451741981E493B3969D009A7BB4BD61CE4CB4E4BD8 1CC5FD7C9ACB9721EB40CEA8B39DA746D88CF69B3023ACDD8E429225158C848D561751AE 3D8690D9D03A4B9B06748B9571E2F9CD48DCC3A34F08E545FB9CBBA591091E9E1508EA7A BE49A4A1398DF9FE93446074E8F7B9FDA1F09F8A70785D402B9B1609DAB1BC547746007B 25E3AB3B929E64C4648DDC7F28EFC54882D759E58CF91D15088A88978937081C3653A5B2 35B5D23ED0F42CE7361082FCABD6AD611A65B87DA121B89983DB043F2FDAB0063218208C 1F3DA149CE6A0718803BB58FAFECC950FFADC53C15FEF7AA9880CC7A97665C2ED8A25651 DD337FABA9BB9387105193221570BA0C0AE6D315C2762236AA4DE3C636DB2D11067C70C4 983697BC9E0FFE17B8A9F8643424127CE8235255231F5374593E22936B9E4101F83845F3 FC4885D7C512FAE2006B51D9DBB26A174C0C29EB13E1CEBDC77BD72EFFF64A5B04137832 7D09C12592F4DF1B3C81E5ED77D82BE7E8A3B997BF6CB4CD11EFB032AF48D96FB52E1412 E7D61554A20A41423BE09130D47FBBA32E289777540C5CCC2954D6A6BBAC703766805594 9D8C75CF866851D8CCBD5151C6E9EDEC5895CA8A46130CF687F6A44AA9955CDFEC29DBE7 BF0A387EA4DD1F7E9566D6EE3D32301A2E9E993D9F4E7E6A1111948272F2F141264F1A55 DB65C79D54CA956D212F8E0DD36CD7C6D6F64DF7E39E41CE1A397E46E74E94061191A4B2 14C593163C307E7AEC6F5A1031625B09263DD6B9FCCB1F09AE0CA8CB058F3A3F97B37C1C 5670FE491CCF0797258CD71FBBCD0A3143873943E3AB39B5F01464D193B9D847FDDC82D4 791EBF322A05C38D70388350E6F4A4FF4BC33235D54A55AA149A1AA2FAEE489D65DFDF96 C2E667AFD377BDA642FF24196C9A0265464CA11CE2DD51EAD2092B2310876C8B5699CF09 EE9CD6AC0DEA7A8BBF601425593033B114C03DDB2011998703DF43E5CA493B6606C2DFA3 8EC7F3255629CA0582591353F44CB9C30DF0821F4141C5CEBCBA0CC7FD77017BA1FC064D B6CDD9D9F433A6355A49F1832F5A80F46F5FB39E91EF502391C7A22FD806C6CE908CDAAC C499B124DD7878CD7B268ED90A04F10D22685D09FF095E1DD3F2584796B2117AEDFF8993 AD2982DAF69349FE9B65002376B4161D37F4B47CFD165B5FFCB74723E6A515C2012EC996 87FB62947E4706EF03DB044D71FFCB9469045FAA1A33E55C4419556E63243879D716FEEB 6B48C36B0721280AD092B0A51174BC29C684EF1E9D4A1E1EECA8864283131F5FAA4A5EE5 5E31E1C353BDAFFEF6045A2109F5F4DEE590FE9AF64E6F5FC41551C2E16D04EE2AF0CE5C 9DED0197E7A28DEC320D6D6526F416A9AD115D1B773AD530C2B0EC773D3F9D5001DA7716 414092CD3531358550E2FE9D014F4940E7E22BF4B8A75DE4CD72DC33AA90801013B05975 47D4F8BA3B0F3E93A2C42743F51D927D0B56FECF4CA979CCDA2816170A3C36713579C0FE A94D5B6B00F617EB6EED07C2F050202A2262901AE90CFEB1739C42E954721DF8081755B0 B631600C59E75F046F60808BFB7D4A5FA7AB2002DEBE6A90C3E53CE4F78CE2072514D5F8 3106077C5AEAECC7C4486FBD9E5381C4434E514D0E2412AA3C971FE8941247FF72604DE1 95FD46FB6681BE1F45E9D71A9BFA81D9E7E50230906258FCC94F49741D96F798FBDF73DB E6694281C5BBFFB57019F753FF3033891BBA65C104C2ED27038AFCEE9D9BC8A004D34DD0 B8A424180D6160D5916DF75AEE10133C44F3FC23AADA8007AC3475B772BB17B8B6587D57 6E33D8A052A9C920D0582170CDCB833F0A11F5C35DC756CC26EFC32790984984FA64E7E3 26BCEE2214B124C046E5D1FFB388AA061A3B79950518EF44AF7EF000D445C5E319F9C2E8 A6227A96275648B97B46ABD2F469990F101C24071B26B40D2E7452C97F966DC83B1C5B6E 9CFCBC47387694CA463DD1D99E470E9172EA9A66650212089BA3AFFD6581629903BCBD31 EA39C0B4E05FFF7E1FD1B489991CF3C9EC15D0FB821921CFFC9C27CA376F449CF25C87BF 6DA376116C1CFEB98E1F605BF7B577A30EE42F42810209293969CC7816A20E5FF7C3992F F5FE35AC94312F2D8F79B4542D01B4E85624EE08A5313F3AA02C23D4575B3581CBE7658A 080CBC192CC68DE13FAEC705C7EF8B842D23A2378606488722964B19395A4E8B8BDE7422 163B79BA738D48E03D7E0418CA304CF31BAEF52A03B3BB3FA0A215822BB24EC75C9B5E2B 5BB9ECD489BFA82A5759FA8DC58D7CB165DE17FDD99F92013698D3D4AB1310ABEECC2155 546BD61743C5F30A15813BB5991BE9DD0631CE222C3ACA4CA4EC433A654CCD9D02B10936 6DC15608CD8DC5EC81357F8E397440CDA476349681DFB6BAAC56B2B9240E73783E3B151E 30790D69861A79666DC0662DE5212AE6A52D42A9E1D0FE74FE790717535245DB24EEC00D 118E0746CDF2D31F711E3853C43D3B21D21C06B999DB1D64D678E8B803AC4AA0ED4DE547 5984192B4EA9D33E19CB3D84ADCFEA501FCA42ED35435421FA035B8881143A61049A4D0C 87B212574A11FF0109AF4F62B537A68D2F66DBB164836D34BDE27C5C794DAE28ABBC2953 69705EDA527A520B1C1F55F436A58A6140E12D4F993BDCB9696EF86385705C46F69D8390 BB3EC4BFCF7F233D3011A4D6857D84458AE514071749C31A75237F08E1CB5399BD3D8390 65CFFFDA7FC5CA78C4C83A997AD1788E7992B794D8E2AAE9CF17F787A72A935B9EDB632B 3893C3170AAEE5EC4E92714F77917ABE5DC43D7F598F3889FE0396EBD3BFC07076F822D8 C771FB2FE3F9D007D5C86013A06C5439CCD1AD6FC415888931F7F8FA2DEC6C3A1539C7E6 824DE1437F307ECF7637C6BE98EB2E79A59360DA54BE06BA5136DB6989C954BCDD57AABE 15E1F30295A97B53ED30DBB51E5A10BBBA722FA1DB758205C6B5317981B048F36342CC6D ED66828ED5E9F4624DC8B1182592384511E8DEB64C75B09C6B95D80CDDC8AD4D593C1526 1D9B571397E3E2D90D4B308F45D8286A4D4827806B0A7A6083A6A09F463794CFB8CE9AB0 8CA706326DB06C2E8F6610D01EBE3DB1957C4C80456CB23E2E4A754274333BBAFCF52810 AABEE728C75437BB29F84268F7D647F62CD107587E83C330AF94CA5DD6D94D9BBEEED18F 48980DEF8706CE317A2142FF4948A32B5381D0D84D0E25CBF706437FFC428B7D1A2E3F2E 990B0C93B24F14691A62F2370BA0BD94FB092BC33F6421FC7BDB73095F76BD64AE94FCA9 2AEDFC642569307AFC98C3489A650F6A4767E586EEE7C7D72030276B4097CBEFE11B14DD CA173C699AC149244C71B4F7C705328880D4B907A316334309D4AEE056363C97F945E076 EC8103360B46DD3E7A73E8B2524451DDD9F59D8C439393BED4E0E6434A2B873E4BFB3EA1 7433FCA45E19613723A1F5ABC2C55CFD8993991E2F8AEB48A098DE694657D7E5EAE465B8 B015AF31CFB7D90BC3337A8FFE8FFFF4BF2C50D984E3F9BEF9F2877400B669F2890145ED 991CF048A3267CF7F426BD45588294FBAF97FEF2325246BBF5199C494B9D4806215ED6EA EDF72B276CB8241519ABB96E60B4AC054D4B81BD0187CE30BBEF38B922B01385273243CD 6E8C438335186BD63C0415C1324216B586E0ACC81F37B4F23FCE93482F8E4085271104ED E2F50383D32E1E959D6038D929576BE1BF6717F892EBA51CDAAE6DCED047DBBE91435C13 E02723D5C2DF0F9B003ACF49A0CC1A9D84DF8DE6BEC78C62A279C30ACF217DDC1DA9587E C2284BAB142CEF5AB3B7BFF5A73803DB35488C593EEAFBFF01F4DC7000479852E0771712 CFBCD6601AA9946AE797728BB8231A924C3DE285B0FC07A2F3D3C70CA515504454D05D38 03B6A245F961CBFBC41B79ED71839D3D4A47BD0B4D1DE23E5A3F2CC597F78566774201C0 0A299752F11261420B01513F7E7214800FC06FC79D964614972FCDD9C6693702A1DC3A8F F01116B2CE787C7F7975F372925CE7C77459B43084500FD93FF9DF4F06E01A557BAE9A82 50CAADDA2DDE3E894A87FEDC1B378587F0B9B3320858AB33C7998406A2F9A2B8804F30BB F7E62FFBE109CE9EF796D418FCFB4E21D2318D6BA61347342EE3CC1EA4F5F9C6C96FAC8A FD2FFD006177D37D7FEEBC4A1F398EF50EF2CF8B1049BABDCB885C3F947848E84F5F4626 353266EB25048E85B3FE67E586CA55874C983257853A5CF011EF8D0EC4C6AC0E1DC158AC DF89CD3C2725A7EEFCBE7243A53EA77C78E126A35A0AC1B33C0F6A0A240AE2C6BF72D681 F29B0E35B3B7890E8944139A2BF0B763ABFA7E50D8EF4D199304B3181C3B37E906EBD435 D7330A3A5E95CAD43B2BDC8EF5456153B7327EFFBEF967BABDABED25DE073366009214E5 60CD95B4BE1A0D4537AEF42C2E98C1CE202B492D28CA1867D5FAD241BEE7581036E32DEC 6456648C611D5C73C7718541825CC7D136F4EA1D5642C37E95719507DFAB38D0222550DE E1F23339C704F0D944E9647BD4D49D06C405A741592CB79596F6E3F15082271B7E355FB6 602F7E80F259ECD186128F428AEEAA7D26385F76E7DAA3A5C45E181A3B19ADDA12D702B3 DDF1187B74C66A7BAEB190EA86FB746F143B4FAD90D34645902194B721024ACF8279EFCF 877E9CF60580C620450E060BD02E02FB2964F432092178B8AB895062FFA7BF5CF9E903B7 DC191B13FE6348984C18FC446D8A9086F6F44B3AC191AD8916AC4C06D5451529B2138122 3836380EEDC10E13DAFFBA62E9119BD90F530A2525175FE01DEA929DEBE044A34AB0261F 80141717F9B51F5531694AD523535F09458F0042EBADCF1448081612F4A8F62EDBEE68F7 417CF0D10CF937A3BDBA72865ED921F38B83D2FD39B8A99CD370337C87FF1AB696F4E8D4 3141DC05B99538E1A13B77AFFA97C3FAABBF8BADD2C430EA5F5D9A2759DA9A94E6D564D0 68F0A18E57B1F77907F19FB5A905B0EA481612B90A94A4B46282093EB02EDDCE7E450B0B 1963EBBB791F7B19D83FCEB0DC2CE2BC677CC20EEC676A1F50F9E2292153FB5AFB6BC9E0 81742D8F36540F8CC030134028AE7EFB64E0C1A7511449BA9B635D8298501E5229A7FCEC D382C72D78BBC91CA27F21EE1855F13A9FE24713DDFB7FCC71F0FA002411994CDFC36FFC BA37274E4C8B35ED10B87CA906C6B317ABEEBFDC763F735E930CCF92018AF526C0313C45 656124CD8FBD4C112921907950AF9A09DD0BC9F9BB1995E26592DE7000896EC704118985 9BD6CABD58ABE2F6E1FAC7C5C662377604B5AF3F361EDFDD6BC8D5297BC8C0418D48A3E3 82A8118323A5683F86EF6E4772B98322858528D7FF5FADDF56FFA28977CB7D66B0A1FE74 B9B39CB7079C4B96C7CF4E8327F1A39514E47ACDBA55F3F88A848C892C384BC36C7EA9F4 36FADB7EAF5D2F47A53DC19F52C76AEAF248DC506F17410176718A1C3D5C60A3435E49C2 52CA43F21199F8F9F89FA1336290B8B2C5715273801EF3FC70592CEBC83F0C178776FB16 5C2C080D31E8B04856DF14F9D52D8E0A2D5ED7CEF3D1D527D2C1E81003BE8EB8F255F090 A1102458B81DDEE6665092316E509671892068634B725F72EAEDE805E8C575C2102314D2 C32AE4094290FECB477C178F6B1BE8D3490B077C5065722194DFA139BD3D2E76136C745F ED2EF568DA7DB68184BF7592F19438C03304517D92F84EEB9A7E2C5910A0A7E003EA5A69 A3D15E905101249C7CB22F78817CE01857BEDEE27ECC10753D0B31FF4C29027329D1D154 F98F125F8C16EB71517BD44CFA58B76BCA2046DB8561DE92DD59A0852E519CD6CED54A45 A8814A396D90FB08D5A14F265DCEF46CE2F64BB9609C612D5F41A4080AD58A47F175B1CF 8D4CF2E7A34302D5EABE1DEE41DD7CC92EE232BBED0EBC579DB40C292E0F04F4313A7B9A 793DD1C49A8530CBFFCD1D63877EF5D6C18DAC161AC1BB2E954861B31A7AA6C8BAC6C4E5 8CB681A66AB8710CEE97BA719DD5560623B8CB4A67E09673B599A19B7FDC489E8EC43C48 2B1E26EC81A86FE1919083A78FD9AFB2320442F0B51938B3CE04569794EECDFB05651EF0 0521041F4F269A72BE3B1E5CBBEC496F3ED089DC0F685A720AA317987F95940C6B3CE28A 435CE9CC440955C0E885049A770DEF15806E0EC10C7A6019DA25C79A3689C0867593875D 69F3C211BCCC2504DA719D1A7B87B65BC865A531CE258523E06A492710706A633AA13E49 DE797F9F53DCBE7C2EFA9E692B227187EA157C8081EF5FB5DF1CFFB79D792F16F7463888 81BC687E72E77ED0FECC000FB9DBEACC7760C4CA3F01D4F85FED33A9DE5C6E8900FC6DDC 050CB58C0A501EDC9AA220939830975BBA2D2631F802603FB4635F8086A945622F27A093 0F9A051F566C4D260650FB5B38FBC354A21EDFC1E98CA55A0B7362A00AC10AD24FE33E36 1D68958976E983717AFD4BC21DF0167FC7B579E9737886BF6EB5AFFE0F921CD88DC6CA5C A07300FF60BE0F54E041E2A2F923F888899E657E5586968D546C0EA9E494BBD9A5FD8FD2 400AEAEEEC8907B04E2727670404B3DFC0BC2E0C4142CE81EE939FEE73EAC7490FBD61B6 23EFD664EE8B44B475D40E2B4C9CC29DAC8FE0EE071D505FD57A0CA322C604CA7137C4BE FF996C4E58C8CD0172F8D024E7C34C50ABA29F1B4BD810CB36723C869B1D1C12DDBC7B03 B3AC1281C25138C756417B9FAFD562A2946A3A64345A2407D15D26531414B2140962B71B 9E155C3CD4DEB34D62022954F32ED6BE7B6F39D6E05CB33B8E74C99F3382934A25323E92 6BE73ABC78C9135FF996CDBEC82ACC20D03F1DCC6A064CE47B4F48087755A8BC65491F8D 2D41810D73DA35B4B1B6940C80D8281024EE9263BA2E53C0E16B0C6AB4DA1701631AA8C5 736964602369CCB31CE7D350F4A450A97A0D133158A435A2B08D02E10FFBAEEE5046EECA 7858DA83FDAF5174D498B598E898BDA2A27DB8BE24AB74F596A4490A3D2C84A7B73CCC83 4987399D6EBB9558B1C1B4D1289686A44A1A310D850F233C550614775BCA6F2EDA5924BE C8F08B3310DBFF9C5F316AA898A959418C2CF949AE0B57BD74B2E388CBE0281991B02898 B33BAA15E0AB05A732E6B44962C2ED6563DCFC2F0DB2ACDA2D065F7714F4D6B054F5DB06 544E1032F682E0F71FBD84ED85BF530FC0433BCBF6BE5365EA90DEB016CC3CBAFE7E3A40 89F3CFEA8ACED168A25C1B9A8E165A667FE562C46F773F3BF99C3F4DB140CD22CCB4B38C 0978081ACF8D6FAD2CA81AFACF5ADE9D56DE45AC7E6E5B791CCB1F200D09191F147AFACF CCE72E1E32D13A72409286E4F0EBB77BD93E55DE98D86A5F45481103F09BBF657D0632CA E0F45699ABA833003923726CFBA396B811CBCF3DE9B875BE89CE5A3867D69C6B4BBBD527 ED8A095F9CAD1C23D49A897DB83F426E9A489E8C9C88EF6E18FF78785245DA4B2FE6034F 4F731F8F34706B9025FDE2442CA5CA290EDC3551DE7AD72D9EFFB0C0ACE45EFE3317B2E0 4EF58CCF2E79C147039DA1290F9DC6C5FB283FA61DEB7081EE938D8A0BE0453BDE666934 A8D53B2B126C297DA5C6C516913E5D5C7679A08E39F3D15EAE8D97B354AD8059EECF0497 22811E9127DC5C0102B9C28D67F97C3546B02ACBAF068B4795D70C5717572AA435429EAE 215BE167C6796840DD1CBDD0F09CCB7F677B2003F65954134E0177F39A4978B93408F286 FD05F8DAC9E745EC2818F4232EC72987E96BC1ADA5BB7B9B8CC71617B75B2B0D57F87B96 62FDAFA6C3A1F653E0C0A4A2DB34B14B4EC1EF1CE8EC4BD615925EF596292D238EED1E49 E3A17B59F3E6C7A802F1F838BC1501E2B44786D0E71A11D83DF0DEA191DE3211EB4DED80 27E85F2C2F5CC7D5CF26351E62EF0BAAFAA9086ED93B68F14F82D54D3836AD4A7B256995 F8F5E7607182F37FE7FC418076ED0D12CC668DC16E5587BF9B954A8FAD3860C0787D2EBE 640007750ACDA7BC9F70C9B025443A90F84FA3170CBB69F538E5DDFCBBEE4D7000B7AE05 963B732AA2D58CF7C58E702CCEF382E3071A0C39C7F4A8C22A1795ED67ADB170B57FE847 F0F61850A15ACFF40C3B4E34D622ED062744ECB6CCB8881A8BA6013902A972B1093E36A6 1D493F486DE6594D82F7DBA4FB87B33C5BABB1560E6160CD3C5B28D5B8F7167D6D7EC3BE F62B1190C6B3D975BF3A4B7AC870C72DD4583514E3CDA707B63312F79028DEAD823B53D1 42376A5A3294E6FBC8CEBFF3C74C64977E3EB607A74E43BE485CFEEBE7B080D6EE15DD9D 85BA681039A14A9C52012C8D08D5C6FFD963145C02AE10FA878267173D36D963964A9A83 A3F4B8B204BBEB2F450F0C54447DCE0CD986CE820E827423C9E47B201E00EE5625A49DBD D517B48761CE0014ECD2759F79D9C628BE302B1281CBF996D4ADDE5FAC99AF0980613EF4 62DFF8C6132210915FF83188795AD07662EB41C565C16F08B34DE1D7D8FB55FB8912A1D2 11AF5B5592BCC93992DC205CFAE30CBA7AA02EB130A1F26D571F79CEFAF9EFA93FB6B70E FDDD485C0C2B28CD2BF73AC4E49E742C422AAC6D3F91E1FAF1E419848BAFBC129C32980B D3D2183EF82D8EF9A62A03FD21B2C226736CCA44EA84FB6323DC88A895EF8F9A8E71528E 5C25A6B95A844AD56A9539393FA74FDA862C8DF61559FD73C9EF1B55A902A96560D5FF17 DE20E0ABA9C9A6DCCC2E92F0499874CB4B0B06AACFD46FD2D6D4A91AE396878B5D941E30 FA7EBAC8981F390647D97CCE2A489FA700063A8DB34A28850D9B73CB8D26881A7A0D1B14 10A1F416392B30EF4F653BBC8A20E450ED09D831F5B311B59BDAEC44EE0DE563C64EA5B9 943BD6E56472377DA269006958D1C1EABD24877577BF40D372AC99BB66E900BCF63B33EA 3381DAABE4079EA6C86B5B8DBFCF77E4DC42CA9D37117A8C18C7F91EB0C3AB553ECD272D C254002AAF499AC0CBC1DA4891B1BED75294A7D12F8C4643A49398560D1CBE8EF3048D7B 839CC4E16C99B4CE162B86138046FFA110FCCEF39795D5DB18EA7C9C29FA5FC4E4E8EAA4 8D23C111E18FFEF03F974E5441841E84D1FF44F24678DA5945690715EC2ABD7B2E8A46CB E88FE80A627188162CB1712CBFC3AF6C57E6DDADA62ADCF45D11DCA0C364B0BD092DCF76 1D235AAF7898CFF3EC50A6BFD716609DA0D4956E1E81BE8D374A48FB4DBE00FDF4CADEBF A393EFAD850C92220909A138D9F17DD720C1BE89CD3116D1D0757A011C44AB92C70092B3 55DF4C722D91B19449CD24C6AFDF8B45AECBDF3DAE8C8D0239C31A9DFA3C07C05D1EC5BF B4A5D1CA7378B15F33324D9260D0ACCE9AC40BA1ACD3020EB327320877C04F8876C14589 1367B76A8553BF62F75E88494F0ADE8129092ABC6C98CB99AD401D58A851857CC5ABEBD1 29886D4E79A9B98E660A8291D03FEE93F8CDF00B1A49D0C6A7EEEC6B871384C45B623B7D 277B70CBCC296E9FC3917B26ADAA9115A7C0A4F327D76150F9366F9B87C49411B2DD771D 06D2520765AF87D7BB3840F5C04A214EEA147721FA8E6909CE1D8CD9D621E5789BA01664 92353CA94639005C845BAA6A109EE306CB6BDF2980420F9416FF07B425F413F9B8BF8977 115FA1F7911EEB6633947EA6B3395AE936BA0ACC9993689EE98A765F9BA3C2CC7ED54E22 3CEFEDF1D8CCE985085A35E2FE7B0492FBACFA1C93E370BCF122B641E9D38A2804DF6B3E 6A2C267F95F66795B43EE53B32F4F25911E06A5062FF24C97D4794A0A59EE8D66CE36903 9B34BEC026039FFAB02DC5953FB35A52A874B8F7100339E3E8A959B82CC53A134EA7AD7A C26EF14BB38626C7D341998585CC9AF460782416E8E072F84BE5D328A78955D9225EB139 57F29D7E7302821F4E06F2C57F9D6DF61BD7C9A15DE90C568BB2E3F8F6AB944CDEDB8A8F F39A545D580B580A72D63B69FF1861C54ED6C776A5434789186DEB8172B6D0C4533800E3 301C9311A82E2B59A2F55DD88EBDD04DB80736DBCFB9779494BE64773B9BAD8D0A5A605F E6B26B7F972758437A0D5BAABC7315BB3F680F20660094D8F4A811366E36C08A41309F4E C5A53A54814A07617EA6B3ADA4837FEFA4F922AECF0420DCF600488AB0B43F6E460AA883 1DC968B391284BDD7E9FC48B5E95F27F568F579AEC1099A57DB3C58BC0D0E5F3E8AE0D89 543193A954B4637D125CF4BADD8C0C94410F0D8BE1207DDD7A06967DE2CF9C3B8C4E207B CBDDBCE47BB0A3E320FCBAADDE2566B440CC6B5803D22DD4135E79C6ABB9F2126551E6DC 571AA8FDCC7A4803F341079D1B306CCB62307ED8E2788266F4EC84284C12B16CD75B91AF 1B5569C4F7B3F41B481079A0AA5AF452DE4DBFDB5AE722299DAC0210C37F961DF90D640A DE3055F867D6C3888B90240995C9B707FF12D648F3792555B9DC724D16AB4465E52A4439 2D5241AB8633FFD172005D7486DE63FAB06744F8042542B73EDF9A5C9AA190FC05CE7D3A 17DC54C79B83D5AABD5CA9779C30CF31B9EAA8A935C51DAAB024B621985983816A5E6B09 9C18A38B0EA7612E1F1841168A933D68780C5641A60A3E4AC347B23D6685B3AEF4596248 2E0E68C671701EC37F9FD1CC098B89B60FF0665EF294F071A482EAF8F5AD825546DE0BCB 7A8590BE7AEAC79B951FC69C14A81DBA31AE9FF893E6DEEB886B6E6AC56E2290D8EAA239 0B71C4A02B40EFAD78C02DB3AD00C33C50459AA1E6E803FF330F4FF888FF9C2FA56FE70F F98F3A44261838D481FBCE46A1900958F33517D1980BF940A6931EE0CCECD2A9F275B0DF A3B31ED49719204232C9F15A897036677791B24C34D89938E7EF90EF1B12D28DC954E99E E253D39BBA61D4117278901957503A8D51697AB708AA0C5DABDD1BEEC069CEBBF5B45F45 4799473333108F9D9DFEF0E367A414C0E7AD8690D592A01E17FB2D23C0B84F1D65F3F96B AF507E786E7FBB42C9EAAD418077C405883495902DAB7EB8DC2330917B9739DAD8CE9C19 9FC8A09DAB13CB94981797E2F8ED212A39380892D062D56FD62338DC58E4D8726A0870F0 CB256971FF29023F64A95E513044BBBCBD7A13C2DCCBC9FE102B67E4F4C3B6379B470E06 1681AE025DD25F3B2640767FC81EA2A69A227B23DA18445009CD5093B91EF037B01AC287 421EB5A2D9D003EDD3BB1D116F1661DA963532BD02E9620E062D16A01E4958D92FE1B00C E063D30FACD486FBDA18CF374BD580B056AD4E4F8717C024EE23AF7428459CC64549AFCF FF8FCDA64F548C25BD95A36F92FCF946BA03E191E60C239F5CEB5DFCB0165F2BBA12B3D9 0D8A295F07E081620524EB711AE432263A82935179A57F2431AC7A54517584E7B1DD7680 31BFABE94D9E2126141163A1C36EF92F5621E3613ED293AF9CF5287F1D7B819821F68119 124AE9A5E4F893BBE5F8ADBC84BC98062BC59544240046D3BCBBAD0761A433D57CB3032C 31364B896F8A8C50334BD9C936A0A50DEADDA6549C86C76318DBA8BDDF1D8F670B7DF2F9 DFDF5E19C05E5E1F1D9EDF0B96BC3804C150D35D6C39933A14CE06B8B9ABAD23E574FFE7 0533D8EF0C1CE46683451CE72FA06D82F787298212C6F3408404D896DDD4D70EF7AB287A 22BA004DE8B58A692AB3D0826365F68FA09B381C8E765FDBCD8813E89AA61AB018D31686 67B053C24F6E455844586D5A35AB5A2CEA45CE198B0957EC1E1491D113E5376146955DB7 FF9F76F5F014C29D7A21680ECC2EB80D9E92DC6C8D6D5B4BE90AFB1791A78AA4738F843A BA7B121124FB0A69923624D380059E2908E28EE3EE9D1E246FE3267A8FD84DF89F5A1EC7 A8704AEA7A3F5808F7F6C13F815F0ACFFB0888A3CEAFC78D092A86919B168C67DA063F68 03DEC8B724C8C8D6718ED5BA1EAA1CC6FBEDA690DD063276375AADE30C2DE41C25984C20 3E026A0D5ACA64C01C1CA0EDE5273944ABA9D8F6BAF47DDDA5AED7EB930808C165925CB3 83D98646512914A4B9B82370139A988D8F1EEC046FA8BD6EA6B69ACB9CFFCF434B05D9E1 EE93D137DDCC8E41E6218DE735D35BB0CE217B84A00F87B22A3E2EA107F865419F527FCC 77381C93214A8667D6D1A07ABF8A3FD9EA347995679386A66B11501577FAD8689AC55DF7 E01FC811EA7FC55096765BAB1CE35D39E9CB83F9B64D5F6998A521852455E0CA21FD97F0 7BEDF8256D22F0F0A4CE8D585B75A09D6D641AA5E4ACDCDB359C54298865885C2A8E5BCE E27D321FCC782D11954A21354C1FC5E83D4D28DF07C47299D13C4B37B375222F7E4549A4 4EBAD5918F17BE639D9FA01274C2CD4DF8699C5D5D1B887E75F1ED2917C2C938F2953215 44B6873A1EF53C12BF9AAF57B2EF244C18071E76E0009A461EED002F06C046900A18B53D 03F9E5AAE0E579EBE61E43797FC030F4473DBC882FD4778A83E428B764BA8D3BECEBB8AB DBA6C1A5ABD336EA3291B342198793BCFCFDCE26B9349630416700A97C2FEFAD0F3B3734 4E2D1F95B431041318F105E4C6DA771E11E7F9B98757B3944478B6DD9DC81E32E8A74BCA 9EC1F2C79CAB4C6560D3617978807B94BA9AC4B93C823FFB75E4AD08E41E832238DCDC27 626E2B5CB14E92B7648403108E84117FF48598975770545F3B1DFACF93700E14492D0E43 E979C5D356FFFB1B5959C165FD757963844ABA0558A520BB6AD38C5C8F244FA5E1A8D815 20F11E9AFC076CE648BE4739D1DEFDA0F6573E7747D4B483CFA528DCA106368594475529 F2F8E6B03A95679017E6D3B031E2A551CC5B534B5ED9BB7CF459B8E28BD7573C69EBFB11 99607522748D32BC065022813369D964836B7690153204B9E9164CE0049893325563C74E 511CDD3B98576692D48DC687DBD31ABF25500F5D045073E550E8D37C4B3EB22F1B44736A 18621FC4840329729919A91558A191BFB272FDEF9F03F63D12DDFDD952FFE88AEA4F9A19 89AA0543E283B20939EFBB657AAA977EF8BE5F308128B29288BDA0579522D1D2AE71FB71 D881152F34232A21D3D9B4F35F7D40BDB3D63CE52290DB0B40E365409BA9FEE167EC1BB6 A3C0B4C53897B44722D765CC94130A919467B6231B86F6A2DD64B80EE62F53FE9EB6DBE1 CE83CC076FC494DF9F402B6E913A5BB8F9312DEC74FD21091D0DF80B928DED0EFE9DC593 035AA7A327B729B7C2AE1651823934305F4D50B4ACCE976F1224050CF25FF200081AE0EB 4E0D1286CF066A658286A7543D92082747EE866B0740E8C412CBF6FAF6A9BE9528B21CF7 1E5DCFC12F744C48234955B2453E08DF3CFEBA948B79FA106825908D1A2C885182B8924A AEC41EB9CB0E415EBB4E2B2C8C8A71732861473B8D6E7010EF9FE0AF2B4039F0BD862965 5E97DE15790EEC27F22909048580F122C1965BE7871FE3FE5FDE332FC2D9900A39425C6F B143A7A9EF455D0E84A61D6FFB5F6717D448B8A1EC52DA7FA5BC60D6347C4CB75C2757B7 80C4C55EE84AA40737D523F611B960FBBF3BABF2C51B8819779DC20F2F4CB6239E7A5BD9 7C795F6C8680A08D921E6A8606484627066AF7A6206FF3BE45EAD3F8461A1DC9DCC9741C 018B5E27D3C9B3F9CE99155DB79938791FF7EFEF7359A55101FFBE89BB0F1E007BBEF620 0E95132890B0E6E168C8BCA434FDEEBFEE9750719E3F05318F81638A3ED3103E79EA811C C1DF1F572CBEBED3C7041E9B5AA2404A925B97184636D844291AA9AEA3BD2FD820602C4C 68A401FBFF80B7101038ED5CC53E8692BDB3CE6620982FAEA77C6A948D31AE3F642FFC3B 59DDA597F94FF34B652CE7A9F0DF19E68FA7D82403FA65E2CD19085800BF3A8C8A0BB649 6A209E0C09BAE83FD7473FD46871C69461AA431D794663530498E576F825329C70774614 F93A312D702DBC8A01826DBE3F4C2EBBAF3EADA36B252642C65A5A18B76D4469BB052FD3 3F53F0DE3879906AF13A740E2D3189EE238C80C1F39E3991174FBC3C380C1338964E1F91 796426D7EADE3CD75FE7C9AA675BBC1958D7B4413E54B4F758CD16012423E7593AA28AC8 AF472E96148AEB3118F420D8EE59F84575A6AB9C41A10103BE1AFA0EBEB26A3440425EDF 1DBBB497D2A4713D6AD85EDCCD50861C0F1ED5F9EBBE41C74CC3DD16E2887B5EA9F650A2 A5C3B44DAE23359DBD7C1045F66B09A7985E4D6E0402DFAF83B0339BF3FB30EC5EC487D8 139C057C36F83898DBD4019877F503726A3F3D1B41550B73FCB82935F4D7F585171299B6 FE67534EB78FF254C1C08808848BEEFFFC982EB087715BD7653736ADEBA7416F0E5DA647 B5F3AEDE8E4613CB3716DEB3C236D170EA0898801F64AE4DACEC73B8F3D80A94CD3C6E98 678BA1A7EBEC857987912DC58D82B265F5BF8C1E9E0FB30AA97B5765686B47C470BA94CE 205DE872265C92E6EA19ABA79E04CF54600AD15EAB96C5C29C11915E940C88A18380EFB5 9FE7C093FF0DEBC4F8E8B993692B4FE82203A308491FCDB34FB454CEEB01EAA4CE128CFE FEA618BFF5D074414EF1567DC8325BECA2E3EE2CCEB425DCA5F36014D5F3319836E51DB4 5F5703BCC8A2AFCCD73BAF504E38E2B121E9287BC55A45F690CBE6E5524B114430022938 DCAD2B0E28A0B11153AA18BE376598B6BB5926959E1FFB2E4AF7CA3ABF1B4BF84E448D21 14B6D1487F478116F35CC215CB44E92EE4061483AE57B30B5D16E5CA22C92B035CD363F8 E1C646E9169D4804AFB426C2DFD42413388FB0A19092B09EA3E57CE21D34C2FD94B13B5F 6A27885E12429A3D089FEE3E799610B48840685DA72332D24FCBE1F1897F4DB2F9172098 93409A3623D4B682BF2A303FF5658A7FEB3A15E1E52E150C3FC3BBF3C176089D07799BB4 FCB5EBAFCA83EEFC10A151A7616315D23218D1FF44A59C4445215C3D716757B8A94C5CBD DBCD47A50C009855C18883AF4A86E432B2F3AB9E1CA72005046A115EDDDB7A68992EDCEB 1C46E75672F3783ABC6A0EF2A85B361A90B63F6D7F4D9CBE6CD44F2782803E098864CDA9 1FDAA6E56C50948A640D9C42C7781A5EB44FC11EEE904C3BF22066D7334E3DDAB754BD09 89D64CA2A78C693895B1BD0C47599B6F2499149D91767E65C0A6D9AC31BEBD0C1518D467 D0E8C5152E7DE48C5830BF34DB2DA2A8A635EC1A9E54AE89CF332290EFB1D4F8F1AE35CD 8A8F4F1F81F6BB66E5673E0B137074ACCF0E5A34D2624E9A319B3CA195A3F9C962EBE43B 9D9636D37292A03F70EFCAF3A49CC028F2CDED41907CB1960E83E29E12C8285A20AF2F11 F469873189AD2920E9C6FA37D1E4FE1BBF42C8FE70067B8952F5D4EABE7F1632F48067F1 C45ABFEAC0903DB83A1460C711A4FB1E5CEA7AEBA77E233634EAD490D8710B43B75FA77D BD8DD4BA2E17CCB4C397235A850C579012279C6C892A9915F4A4CCD42C707FAA6C07377C 8F943F627CC82A79CD1928621367F5E1255F7B6723742B8C6BEABEF6A990F8CABC4B56C8 73C6C29726D1FE35F22D2F05F1107D4209E4305C1871B3EB0DE7E7ACB8E3858B978976D5 284CA40CF7D358AE64CAF264A2696670F0903C022B72956DDD196465813C6C23BDE4D4BC F5C6732F4CC709E2ED5BBC8EA9C8298EEE822D69165D67625B544391F6469083C25A3448 8878B121DAA401A006ADA85C558835F025658F4E2E84FE514061C739A14539007AE087F9 F1F212E9949A841E0D00F14D756ACB3442369C61AEA15908972202CABE4017E08CC2E963 C4F00E78B97697C4C63838E5D0DDBD04DFE65CA50F8CEE234E295C5AF945B108C937E09E 4E18B978F6F7069512C0E0D11AAB063C98E960EA874A65C1F1ECE523D5AFCE5904A6A7EE C8B124BCFD7EEB2BFE2D8EB092BB47653B2D75144740D00E939C6B7C0624CF7545187E3E 331C6A9418EBBDE553FC60A4AB8FFD590740BBF5AA324670B69393E2A9832C4C66A13FE9 99402F2B7BDA36A8F307F6E5FF1A16117C2CDA0F389EA9E1382BF4454138AEA20B550026 267F2AC00D7A8072B4C94093AE7F563DAB6D1CD20E6B75E8DD88A1B79F9A4A0D94E8C782 B6619D78A4200115B0BF697FF44D1D5C71968F75DC102B0F25FEE68C5411F5E625A87D12 1A6EEEA2362EBD198473BCD0D4F23DB918DC6C3DF40669113027944A54B1E0434B88EA46 3A98907AFD48B571F6F38ED121248D58289C80D31ABCDD2744DF972EF8BAB934FEA31F68 8433E9CDCF0761AC8C6330FDF461784D0AFBF6405E64EF0218737F964DA9D7A114696101 E2077288B693B7249695CB97948ADE379A9245ADE240D855E67275B870DEB464A1F773ED B848113C0DB0E0A2E9AAB000E3B152E8AE14011EDD469E72F874075672B09B892B0C7F0D 1967A8935EDD8045E64C19FC0887776527CBA5D529D00348B811F9B26C5317E8A1FF7336 4982C94F4E2A31386D615CB13D742C7F93A61FCA5367B4A461462FD81D91BE73D2EDA407 FE52FE7F9E1E50148C1ADA0BA65BF91251B3C7696E6753AC2108F28BBD44FE28C95A0ADC 67F14C050074A5DAA3B036C3D96244D12AEF5C1A7E1B58B5A49CC38D692C4C6FA1490621 48B12235B4FF37B41F62D51E37F9C3AE76D3A04F735FBEE870213E5ADA9B96B236296803 72F20D604A269E0E238181445A2314F9DEC660C160487E4443379D91E0C12BA0C645E042 15CA2562EEDCC65973BD09D587FBC2B0AFE0D5693C699DABBFD175802F30EDE9D70A3801 DCC74B0EDB0B364659E13526E8502C5D43EC915694F69A492DC88CE2EF5F5B81ACD59282 2A888D0314C8035E0757E03069B0E22B5CB9CF2ABFFBE6BB3781F59AE29DC56A9814CE50 AE211387B8B125E7F819D671CAC96C2EDBBEA42B1A81E0EEC33876089C7D0B255CCFA0FA 820425EDCC8DEAB5D092BD749BE5C5B198F2273D705373CCF3B355B89CA5069A7790DF51 8455D67CC9B61BF41B786ECA4D69D7C51449ACE66D56A91DE3B475173473A8698496744B C84E80D72771651BAD645812A2821E864EA13D05101B984C239F55426F3C0207B57B7F2A B0D02E7306120BBA0FFA30DD48116B2C35D88A9B0E1556990DB009BCB5814606808318FB 962C3E37A2CC9DE0253CD60F2D5531D54A5F07D4E7A54134F9808B074F9596BF72CBC0C7 8ABEA31F8B243CB5B95C192EAE84C14967A2D664CB5D8825C43DFF0E46E7E85C385035ED 6184B304699EFB6A8FE469876F4E7F31EA4360452669525F9A01D093A67B8E2D91816D45 C67478849660149F429C12C7F51E1804F916442370FD3CA5F49D2E84C6EEC38160FC37CD 6EBDA2104F273DF061DF0A8F1930ADCFA7CDECDD3E870D11ECB69049D3C99E5500403516 B085C3E59496C7A3114D4DA8FC4E63BAD069F96F92B0D3F63288AD0B4DB53835605E57FE 9C5A29267282260461B9E02A8727007A045DEE4F1C57A75AC3C56958AD40E5BCE8F6EA62 5FD2E5AFD95C4EBBA37AC5B1D460641380FA89B0C5C96E2DE6E3FA1CB79C38555E44AF0D B5BEDB2439CAFDD546F06A3AB0743E1C3684D54506F487C0B20745A878B83AEDC2E81240 0CBADE8C1C96A9BCC44608A498ABFD5933A86159E20E3D910ACA8075D0ED4D0E2EF05E93 2F1B42EC916B34902E11092B0185DDC834FA1CF92603FA99768F9B2695EA3300548407BD 55C1F1D29BF2CE132113C0A9B923EE7F820979EA5EDE1858E03A0E4711FF533B5AE79EFB 06FA06B62C2CDCEA20B0ED4534F17825A2C239F91345BE51CCED3E184DDF9F6BC84C4408 6780B24A79B9FF66715035CCBCFC8A721A17D0B71CBB7DA89563228DF0C9263656532E21 34E53EC5BE2BF1B80869EA0483A7294D1314135E9CF17CCF3277352ADFB772289DF16E7F 4C81B528E0CC5BB42191043AC4399CED246D89E0A576A383F653B81FF7591D3B08606E9E 4DFD7788A8D6EDBE6FE7DA9BE3A5467565D6460B03A92A29C0C1BE6BFA70F59FEDF4A5AD 1E69E0012A5A22AF9791BD3665FCBB4D072F1ED662AB1AD51B9BCF31A30BD3266DB366FB 99A0A05B694C5910D9807EA780D245F183AB4DF03DBEF748B48C171AE264472E3C520DD7 63C1F66EC8B0A9F49DBE03D081B7C2FB5AA4A211B5F67A86B2F9E6CB27C7A3BEE04FF547 7FDE8C83E1F7219F6218F35E00E10447C2A607596A5EBD0724096C8F9DE144CB82DD4446 3BA8765F1AEF934C5CA2427AE8B244AC4F6E4575F796A376AF4036473D2E710246C82734 DDAC382960515EE05AA04AEFB12D73DE14E1CC2D89DD071FC467BE878C3B74A3154BF78B 2B59FC6D52C0EBCDE1322C8C4D09775E2AFF05516E3079679B18217BE5E8E1BA461E6334 558E9907AA32CAD641E42DE1CB4CC76A7070C8717A5FE3038FD35378BF7BC52E036F8A80 49E5E99104163AA38F9F043F0E6319703F43420821BB0FE1172A6445825DA918FCBACC66 E7E774551775FBB5C80F569CB47D7BF3682ACA14C7B0E9777CF8725E5F510BDD01225570 1F78C5CF94827D07DB90C3979789552F2E8C280EE9907C555616DB8DA880A8C2F4419FFC B34A44DD9232567F8F0FD6B21D663389C7FD82B9A342C995C9FD6CF9A62773F8B98761E7 BBA4C65CF9518F55704B2CBA6E63B9E474539ECE65A733C2C0B3BE37CC1EE831CA0A5EC1 04D72C7652E3D21A82B8C4805DA898EE8847D3D21691351C7FDF728D26B898157C26E9F0 41503C2D17917CB691388EA7ED3648AC9B857F69E8EB62FA0E207F85000B64F1D60E1240 6B0FCCDE00FE2EE8914F96A1ACB2F58D0C42B16260B4EB169445A737B991755EACD597F5 0ECCA401B8D4E0B740C56690CAC125EB23C3D6055B176137C1B059CD0DB75E5CE95D39C8 7D1120411259C30E8E3E0A4FF7D4EFD92B5662397BC5F8236B0E58A40828E471A84D9340 EBD1A4AF4467C7A3DA5A9ACCEF45B84BBA5BE2302E8F8886A3DCFC0A76BD5ACBD89DC9A8 88B5170686AB16A94A0704152E4ACF12535D638F54F7D0403E3B41C30B523A97A6B071B1 ECDEFA457B715F07F86CAC41B064F1F82D01E48964884D684DAA9B19615ABFD463C6CE9D 47B0D6DB6F76A388BC826727BECB28D5D5859EAB9FB6B1EA544EA647B68A2925439989ED 07C23FCB2A5883FFC527C12E4B1BF1BF2AE761FC93CFE0825D6BA001E7EDCAD8A4944CBC DEC0D7600215A9D090989027497D0B928A3A6192DF5982E7999B611D713E840BFB0937F4 895A7D85A313DBC8078BFF29C74AE7FFF0BF18FBBC2FCC0B947BBDC66A2FAEB3FE0A04DE 13B24FCC3BB2E46DBB7ED8346B5585BA38E1D71D78E7001982410E7E3B6209C118C80C9E FE435C8619A06757813D1CF96D8E5F844D4988ACBCB41F552C515D094A82045FDDC11FC5 5E3234842B31AFDA1233B3AFD04E475C82C58509DAADA446048D19632DECABEC0CE6FD62 544D65A938C65B309A944A862BEEEA7BC245B72BEFC9D45462869653C8D6D0B3F082D94E 32070DAD996ADA830A4240642C61374296AE3C856E44A22FED37B4106A762EAD511CE8DC 7E74591F30FEC2BE5F686B8F186465EDB2CA69072786697F05446D1EB1509827F84EF4D7 C3885C8A11D356162804380242598DDD0E78802BDFE50FA1860DC6E82BF2F559BC80C579 A2918DCDD65F0B542EB0E15C4B0D25057A239591E3B8C2093D798C472ECBCEAFBAAF2627 CDCF3B66A1242F7E4BB56A351830F83B6C621E0A57CFE93E8E7A68126E4A83D9E43CB0BF 788F91A07E0CD52EC515106822721C56E057C3970212FE0929D474F503F2ADA0CAD528F1 69D0D529E097EB3DB5442C067878D916EE8B0F74D6F83C6C8FD9FD1DADCEA9B7805F56A7 88F6B5C22448F419F6E8AFB6A07CDB643434ACB78A17EFC5594B2759694070290B29B776 CBD5D8CEFCDBB04D167A7FF7F94B9228324C1E3D0D50CE1D8CABBC5EF891606D49673518 6C14A8367CD9156213A61B4FA3C2925DA32304F4B5F228F0022270729C7CA389A3C41337 8C54D4967F674E8875BB766519F766A454309AADC3D015551B79BAC5E21F206EC7D917E4 AEA6F08855997E12AF3F9E69E54A337D05F92CF49FBDFD5FF68E218D8CECA0E52B9A9A4C 2669DBE1CE244A2C5F38999162F4754468CFA7FB5133AF944D7227AF175984705D6B3CFB 5DF4E9167DBC7D463495211C6E112D4DA1AC394FA89C340D609DBDE0F92AD6C978C4E293 987D9235676D2E04FEECCE172DD1FC2811E471F6683DE7938404688ADACED879F4641153 E051E5553337B0C1B259808FF1BFE72FF520F1EFE676BAB1EE7B8EF1DB4CF3900C8C9B37 2DC6917E84A493140459E1021B09FE0E15257BE5EABF550B10B8167B21E0698B99127428 7552EBA4C062886F04C1D13F768A8934D10B818C771B0B8FF5DAC8509569966EF4EDFE8E C663072974205111EB906BD220B08BAD84412543C0FCE92400CC77C02CCF758440C2247B B5D7DB5425B024B2F680F2DA2BF4B56A133AB25F066850516DCE4ABFD2E057E424DBF4B0 43D163832BE32B6BCC6201ADB914E1A467AD52B380E737B8AC70A847FA63CFC5A0764389 883F0DC87C919CBDB07B919FAA1CF4E19BA02EDBE99B03B756BE940F02946A05E6684F5F BCEFB8F55CB9600C43F350C34D32796BCD27ECA5890D464C89CB1C1C4B17029E1589D6CA CCA740F3CBD2941BB461083347C6BC27DFC522FD600A0A113B6C6611BB21FD88A98DB7C3 014774AF1061F66C3F8FF41C6E79CC03CFD6954C5353E51F293E4A551D1E0BE6BEB0481D F2DE3786828B5E6C5981DDAD9DE51ADEDC1AF2F16AD9A657451E2364D8538C9400C17A10 C4B10CC28DD088519611917D9FFFF1BF3C0EDB163B7C1BC851A5FCDC22168A415EF20D36 4601C24B04BE6196836E51B8BC673742CB54985F8378D1B1D1053B3C04F6E6DF238405BC 367A80D5642F6E42E7968A1354FCB0113A069FCED95585342BD5F20BBC1C2BC1BB3BB8C1 B2F312839C1A4AA9B2B396C698F3E1B484C3E63005B62EAB8E21BF847F9408977176048C C013C9B8572B4D67B5D5793F90C28D392F816AC852B56034655F005AE760117E3083A2BF 2144C787EDE731EC079DE7A5E7061FF72441D79D722B5C6B38E85697260E0D94F5A93292 43495E28B48569C76D59C89FD6A9F94F105BF7A7A466D245DA656E41F2C23C685B60302C 1E24C91609BC29BA9D5BA37B83ED23893486D98C6895D690B109FDA6F283FDB0175CC66F 9652D0DBE805E8A55FCE50CD15DBD6EC198CD3156306F6FB6157888DD3AC7F301B976605 5AD5DCE8F45F0BB73A4D0D8E3384C6AB8F3717C7DE7C02B8521441A52299B28AA6E09DE1 72833E539395493604D010747BC4AADDB0009548183A101C516EF6D3CFEA779198E3B1BE A6694009E8577B80E548963006EE8220CF6FCA50D5E3340F9A8D412DA4C8A6DF8BE02C5E 6BA65103DABBA3188404E8FD22FA8503749745758B7CCB548E7415DB92C5463588646473 6489B997E7C14F4DE61BCAC430CB8E07D07297784E7CC6B318B9A2A123D22C9B5EC706A5 B14C7B55004D7E94B20FFD8E09E81804E349907B95156EB7D4381B3F75E8D40C447B40B6 CEE6AA5814DAA6FAC261D9398C4D1B384F7F1578EA20D6F7FC5B4A1C14AE277546FECA74 D930946BD72D5853B99203D18CFE63BA939FBE56DBB99EDFDA7F848B4ECBDBD1701B3855 964E8176E223C15CC38B1EA5DAA230D2404FBF568211C3AC32EA01DEA60FCF5AF814EA45 1E3E7C310589FFB43A2C75D6FA4397E0408E4625B927035EDFAAB1C3AFE04CEAF4DD685D 17782D1A6FC5B91A01774B2464B9CE68BCA7FB6E0E07681E52325AA2C6DB1DEC793A8151 E4DD66CCA91A17364AA8BA5160AF6CDADD13644CAF2CC83216E956176B42743928E03B79 12F79EAF4CE0A0C9E73BDCC97BA20A1B1E3D62064EC3FE9B66ED1202CC03D73155E73584 AB3FFFCC6F9FEBC844C821D1D6D8F0CF3E948A7D967CA7285A5630D90A762FB5241214C8 1090488F862B7C4ED3E1F8A3BA57B31F970B2576E1849861C18136FF4EB497AF190739A2 BE099AE50505380F6D5AEDDB6CB1C478563D15C0F80B18AC2D0053F08EC6F501F7C57651 A776B8DC2E0BC6E927B1E47ABFC864E6B3BD3B8EC17252CCEC1A0652EF8B73F3C48C787E 252BF8111B464130589C4537F840E063EBBFD9BAD163EE6A37289DCCA04209D8642B1F64 8CBF8077B12CADB846CE0AED7FD803B4C901238A737C7457144D60218CE0067F86057B30 384F9EE96B879F950327AE74FBD71E9D10BF74C8D67FBD6321647EB7E2A1FFE2525118C6 4D328AA1F73FEC8FC8A3D70BA7119953CD5C7A23015DC6442FD661C89C6FB49C6F80B195 C398EF280409FF91B5A54CCC3FFFB44BEE2BA8F0AC5197617A900BB00DC154B351B7E594 8EDDD439800B339623BBA5B9844B8A438326947758D1F514DEC5F017F7CAC2679294005D BA2BA9550F497562AA45A05CD9075D2B0755DC578D7C03AE950044D6A08C166DE7850158 908A27463B901C3367C4963B7EBC3F913530FCCEBC8740FB249814B63EBC3A5343DBC880 AF8EA93754F5845FB9309B1BEF95D0921B13B5E3FFBB4781B42A679093F326411AC7A5D1 14330D61171A3965A27FFC27CEE3C6E9DCAD741BA8431DB60EA11646DA43E96D969E6FB0 A2B4D85A4167260A19B8DA08ACDA49528224E4CC521A49FF919B81CB558A41C020A60E28 1F3C2321EDE33CC75DC79714471BC6AB9D309A23CF30477D820271FBCCFEB814D1A122F0 023549D1240DB2EF2E4D1B150400C9AA221C9193CA86A0AB594504B69C3C7BB2034FF020 47F6EFDEDCEE9DEACDE61D31F42CD34537742937F4B032F288EFCE7830D40CB5CB5456A0 39F2E57664A8F10374B46611E29AB8C492F8C2B6AE0121A98A208A57BE9462833A7C85F3 86583B8632ED8C4097EDDADF271AB5D7C601FDCD07DE77167A87E6669D498B2F7A801C3B 85A6272671F02F3635388BBBE1D2AB3A3C459FB55A1E39046A36A6361BCB039D62F69655 7A8C9D5A9A5059803661A7E2A0A90949ECEC7837AB2A00EEE1321D75B39D68B33E8BC872 503C797297A5D010892D6C546EF54BC4AB30F2EA826C85D7B25D43DDE260D1C306EB31EC D08F116ECC44BC5CC0BFFAF404B503C31E5781CAA9FFB5D068FB522B7FBBCD93287624D6 4337925861B4F2EB91250FB6E0E4822DBF7A22D75E5FD74FA6F5F364E03538CF34EC7F43 028A965B1151B749CA2384D0EBF1C961C06CEA5BE09668A5474153619EA85E7B80A54128 A0B3F25B65C61E66D9D5400B158B2BAD181DD57468BDC4BABD00B1CAE3D891A0BA6EF506 EDC8438BD3BE961C55BAC7E5635F46E15F863A9BA1A404E087BCD5E5C56E3D4E462C61CD 1D753A4FD66942990A6577BE3327503ED220FE29D60FD0CEE54F69EC013E80D4620DDC87 2199EEF709DF331FFCEACE5AD9FE6F5BC629D1256C3598F4836F874F0A490F1498244E64 9653AD6BF9197B360D66886A489F880CFDFEFD337A5D1DFBEA33BACE438702BFA90EF93D EB5F765F1A6B0ECF409CA91AC71B5C7EC4ACAC2AE1A2AFCE90E8DA0721522E07D3A56738 67D0790AD4A6C62165E91F0C66AFC8B3319A1B3741E7A60B5603094B259516C88C076A01 ED1A8D4B768B52D8DFF9E87EEE9581EC952550D619EAFE76CC51E0F2944F3122F3018DBD D390DCF10EFCF27FA4025EB2925B839A33CFDD55D707CEE52521EF77DE4040189068098E 307311B99CCDCC87B633119FAB49316F8F96BFD14C23278EF8AB508F2A382FBFDE97F9A9 7EA6AE42D57C9447E31F38AE0CCF6A5EC4D939DE9ADB98274A31FBA7BC44D191AAD85A73 0F4F85BDA0499D0DF9A02FB80A1D4F7412A10E73FF921DBF53F4F40CE4C2C92DC508B17D 0C65E9E8930FE64D56F94B2A9DF37186295417CEF24D6DCC1DD16752B38AEDAE63AE481B 7B1ABAC3E42B1D34498FBD257C691D64D9FEE9790AAD9666DCA2E411CDD4BA4D119CEECF 9FF14C849F4932868BEC541D8E58C46153CCF752B13752C6625C306F80491449BE3F99F4 1395A9D5B4D95BDCD16B55C5F0840C2546AD73A145828E9B29FF34A7655D25561EF64489 29AA07A7D65F94DB0FB7499E41CB437046922C645D7B3F6CA4252BCAE1EE90A004B94101 E8AF7380DA7A1C16F473EEC839BB9F4F9C165C5B58DD20D921943F7F8375DB51AFD22E38 86C1D1EA9AFC96543898801A284733068D9D994BE9F530B198B0C6A63E0C27056A2558BB 1CFF63C23ED39FA726027ABF908DCB95B6D1CCE09C934D71BC1529EE558DCC0BC819D7A6 7454858E2CFDED77A4F63436CA1ECB5898E9AE8F70F273322AC1CAAB5A6A2B41E1F623E6 38E93A0EC1B43DEDDDB747091C0D74F06ABB52698FE8BA72079048F62389AEA05FC92972 5202B9AE7BABBF047906D08F825CEE6E6C9F325B961B6F22E42F224851C5C6D183F94A9F C5D1EC4CFEA46A2A0103119BFB904BF6BFC30814EAC2C931C9FDC18F2B5C628CB32E65EF 42B54D75FE2C88BA32FBD3BD5C99A5E9221017E1FDD31341796119C6E572976F801F0287 7FC19C44EC584CA6EB86C6F9A7C24185CEFFCBAF24CC5EAD01CEDD1A762552D890EC642B 817E298E96DC21547129E5E9C16121F07BBF151BDB01AE4F5074838879A2E6D52FE170B1 6385D7A3F8625E9B19705160D43CD239D9CC82391E2BD4B6F2FB673CDBF19A91A076C5E0 8D2183EB477F2AAE83249591764C91293EA2863497155B9E3B686BC85EB7685EDDE50207 27FA5BFC8EB41EF90F590C8D3CC1EACB77B137F896E0745EEFFB673D9204EC143883E80A BEB38BD031291CA3835850B632DADF96C3CE44BBC2779824C33691959E82BB707E655FF7 731563E0F0FA452FFDF5D665209752F8797F2804280E665BE8B0785AC537584BFF1BE540 B8DFB9E5A0C7CDB451FFBCAD38A1AD04FE80817B67397FD4DCBA99B216C16E786EED423F B9C41C2017865D2B862BA4E42CD6602DFD0E21AAD5BEEA246D822CD8854C80B3585C4D51 60F53EDCC8363771E5060321D142C294D2E44DDFDB947B89AF47B9B49DE2853A8F807C1F BD786709F3256C94A9DEE7E161AC7D03BFFB6BC2A6F9A5D138A17D6D0CEBED7845DA42FE 4E35916A9A5B88046DA4E5A3EC2FD152DD42EA91ABFFA398446780D2BC04C5EFD1ECAC38 777BD00B2928AEF4B7D270E60A5B31A2056EAFD2D73C4F026E427EAB4CEEDC1C5A3D86F3 5204A105AABA662D3DA4A266D99CBB67772AA1976D70B39EAF7CB688039C26DC591F1D0B 3CB255E3F32892ACE4282D56FEFF522361ED8A22D7027931197B3E43437AC7DF5146A916 96E0E236E1C76F25DEB90B4567A287620E2067CD8826E8F2CB977AE38835345328975EDD 33330049E5824D930678808CB8A3A0D68E4AD0B38B4B56A49F9810279DD33623779B439F 9D90D0F6AD1FE4D362586A1A2E41A1D8A5CC2F9A64E4A261CE3EEE1554ECA19B2B99AE4A E5CD641671C3FBD07D69726E3DB337687B4DEFD587BA2AA01F6110AD556746C0AEA49656 322C656BA07FD912CE7BA6D9F4E8369EA481B0D3D15D0F3625DCECE8B1E7E8F3AB8BE353 DBFC5D97CE7527E989E3BBA4375442B3F3D5C5A74F156B57AE59A1D1611BA63EFA71EB25 C5821D59373B8B379261901513D33C5E0539C769C629F0E0A862E67AE00F0255018FB4B3 B3AED9C1CDE748A96F6CFED95C93032E5C709FBD06987F4A825DE684F2249BAACB1B00A5 B4E4F36F09AF6684CBEE580E0C0CE016ECD06C46D515F15AB9BD77ADA869B2949FE5691E 1223D1137BC9D2F8140D94BB17199C10BA2A392A89228E090765D6DC7B547F997038F2AA 4ACB6C375C2171BD4E0214803E03749BE071345040BEBADBCF66BCE0145A9CD3762525AA 9A56276D48636203E10BEA1AF3B825924AC61410AD6C83749E2B63F811FC1014EAC27A14 A41208C2A090C8BACBEE1FD79DCD4ED0A0A41787F683268A4C6CDD13D4EC5B3FB1B52732 6027025056F7BCC4F316868BBE41A905D64D4476042423D057D4FC4C047E813C885B4139 A70551FFE54CC54F93BB8A8CB1F8CAD20A454184448384EB14A221CED941FA84C50C354C 6EF0DBEA9B66B6E1728F54105194DC0580E8C34A859F15C19A6BC8786F7DAEDB4FA9D43D DD4FA351491761E49EB0833199D60D52135BD97472BB6F23B281D9A2B09756AC0AB05C57 FBFD961C8AF31C560F95919F30120E756DF88F59840360DE556C4EF1F9986A73E35AFD03 140DC1D5AAFA83B37C5AC44B3E2A4E5099911F90EF972BC91AFC741ED949D4BA1A4FE2F5 C9CA62B4888085ABF527556AABCF8AD79BD027536CE20CB8824D1CDEFFD86CFE8FC2C58F 2E7423B6A6E397019D9C3CDD12DE9FE9C8F9A1916569FF6373664B96AB172FB35CB41948 94C09A8B87F80C7C116798319413F608E036F9ECCA39D258011353CA3F2B07608B056CE6 7D44121835C6F23CF434D8D5B412635DB7B03896B1A39EE35B54A7029CA46501FD4D64FC E208B9C4F2166A813301039C2FC9574FEF5F146D832053CAA7323ADBAC95A383CD81575C 56BB2789FC9815EC77C6FE3C78F1D9BD3B82A08CE1F1DB06B7671EDCDA2DD8C8BE4C31C2 1516E50AA3B15361B7059FEF7C5055D2F34E026A879D027CF20D95323CF7650E772803F7 3CAA74B3F509C1C90D73AB037BDC4F004242910C36F2ACB6A7714D1BED0B351B01A83452 AEA7FA4FD1A0B4FEF50A070FAC6A6049DE434A66AD19BDA6FA1E295BBDFA401EF4260024 60FA6F8887C305373A2A028D23C7C6307AA956E95A8CF5AD8D17FC0B6AB67D3C78C0D530 D2B7862F75E7C61DA594E5B469E95BCD5F4665D2117C696658AC12FCEAE7A33120B87E20 83E87F895E65BC023126B643CAD22742EAD56774BF103A1DAAD3161DF655AAB929E281C5 BBCD7B1A3B6E553CAAA848D28F78D5B589640D70ECC5A6CCB9949B8C8D49253B06E86148 D883D3E8940CE61752C3B90796E415B60FC3AC34B482E6CFA06A82A9C5F92C648E9694E3 56B58056FA815C7F4F4393FC860A5E303536CA5C2A68B5874A4743819812D804E25E8CCA 7BBA339FC5A9006A91FB82C89D99A5C1A74EE2B976C9CAE635617018B824F7BBCFC5D00B D506D699AF35CF0BC864D3D8754CB6D0C726C86B98F16A497CD5C0C007412F1982087A0E DBF8180654D7FEEC7298DC46886AEF0DEC803095C6FCC28E42373900D75D36EA51845BFB 201BC9A893E25039A6C6836F4FF37CBEBDD0F110F65170E7DD368763A776DBCD74E0D4E0 779CA369D75F16A1778CE53EFC08C78A85D198968B4696E2C3D22B1B949D08962DE6BB8E CB56151899B40CFA999FB07072181F430F063D95231893252301826CD5E7B071C36CA79B DFBA2187530A8EBB94A8BE0E3FA2ED6007944F21679911744B051961BB3D90AE7C8DC11E CA20B60DDC1092B2EC37A66A7D2D9FB8DEE89054E1E348097EF4F567AAE042559D242147 9C4E966D8130E8EEBCA462DAFD31CBE1359F051E12A63CAFE0B45BEA49988B89843BA264 1386510BB5B323BF7256D4C6BCF33A6E70606E0C92339303E159DE9EF5B2CCC3243F40CA 2BB419934BECC6A57EC23E6317B767EB06056EE23CD36CFBFE8BD8E28CDF6E0B6B23DFAC 29568E31F35A003357123396E654A9D711A2446C3D2152215C660C2DE257AB019CD43EEE 13E524146D2478E9594A8B84792ED5406C9BE4212CE810E8837C8027046FE896D8343841 6514DD79C093ABEF941744A42C5A9A8EA0AEC56D58123A5BC8F64E1FB8E905B522259E54 F7491BCC357E03518566A46DD107882D628A55356A86F32280FAD8EED18948103AED0523 C97EC3DB479020285155BB44BE34CBFAAF47E3CAF4B4D698E3EE799F2773A50979C01870 E7B0B80E87E958B788F94AF4CB72D5FD95674ABB5F58D47A67A6E83C43FE892A649E0B2B EA147099EF0372B1DD1DDAEDD2006C531F8A329FC716CE2523662074571D3F31FC85E898 4DA49131A02E8A93CEA59D843E06AD162EBF632E48F3F65D3DF1465D310A9E37CACAAD5F EFF94579D4B53E11CA94A8F7AFD48D8A529BF89526A7813DB6AFB43AC2949C8DA81F299C BFBC4682BC0E3B26B1125670F52DDCB15EEF9E5CA823A5DF997444C88542CBB4562B6922 25EB926AC2EC38243119B5FC3BAEF49FDCAC9037AF79C0751975396FC8ED17296C11E528 E9D8E18DF880D884D3BE444F534865955405E9B940C7C2A11168772EAF9899B29AB41D2C 08C8FA66248C9655EF06A60F3BB3B42C5EBECF820265BECEF32EDFA2B9A17F7479CD3FB5 81D67E3B8C89960668982729E795E6730FD23C790D6FE499F4A4F75E203F53B2E63F0D59 B6D13584A6ED6C777680040E12A51B22BB46FE091413E8FD9EF9B84276A142838B201548 4084B8698A8590B0A148772105683A73656B9405EA3B581DFE76D2EA3764D436F4B07A67 570C1E42F7F406D2167AEA8B4C979A596AFF5A130A61E17E7549DCC47410E75C9BDE3C49 58E309C5E64E176F3964C7E0F82C2EFC2FA7376114C862FF6EA6C2B0D6D40F03BCEB8656 121762458BD91569BD16671BFC373AEE0BC098A73FCA5E84D19014C58A661CE04711CABD 37FC29A7B22F901400E4AE4690A011773C342E1AE7A7811E17A2D4306D7F097A22FE11D8 1BC6B268CECCCC5A43911351263A535375E3EBFD7F3A2AF4308359A145E81F47C3C71A7B F9E67505A609F390144DB65CBEB58B41291AD51960982BB7C5BECA37885E780DFA48E525 6B4D22DE41748C702E296275EC3317D42F3A51FE8B45B825D9D19E73E93E32931ACC545D AA6F3673918EBF1E32BBADF672AB4D79798FA4497B707E0CC2D92274A221D1EB29FF8FBF DE2C7085C33201AB647D317C77C3C080664EDB19C67734CF71BF798B848B1EAC7F1A233E 45C8CB34F6BEC15629DC08F27912C350ED0F156E21763AE6C254BADA5329AA5E6EF644D9 D7D7A3E34D13C2001EC13A492DEF4E6A96D433C9EABD8AC32FB92759F75E3AB8FE202DE9 16E0EF170A7C8EF0EF71BAAAFF6378CCD548C817ACCCD5772557B45D08E1FBEF920136F3 1E105E34DF9E2FA73B47D0E5C85DBBA3907AF8E8DA05AD72384DC601F819941AE4017E71 A4B9A27EC0B76A722A05671087190FF007D9BAC1E6DAD38227CE1E44CC7662A3A3830238 DEDAB809F2082624FE5D51B521E1E7224F71E8A179643424F2DA5EFA9AD52EB1043C0608 954EEDBB1F339FB5F0EB050E9C7A308E18A5EE415FEA404DF81CED675D60BA894911DB20 60636CB55689A6E267ED6924D86B7755DF92DB4E7AF2951ACC5321460EAB1BCD17505BB8 284092A7C05B75B08CE94D4E9DD2907CAE4C0C9B85A50993CE038132AE4E47A963C193A0 68FFD232CE6D6BECFAB2531DA78DD10EB5AB358798F8E2797B50552419108773889743C9 AFA08CCA41B25B02FD9CA145C0D6210992BA9A5BEF8CDC236909DB2E0BF8B3585EF73449 B3C9A02A53747AD10C0C9E86BB15C21A8DB2012A300668E31EADCE698246EC5BC3921015 B092A2106A24837353428A6C44B226BEE880759B971A11BE176BBCC5E9C9FE9A22572E18 F956D3F8D9B6B0AEADB264BCC29A9F6DE15EF80ECCF61049DC08A63B7E16FA55033053C1 288B2606FCD1A99BA93725FD977ACD5BB94E99B77BC6B0181188DFF6E91E8FD8CD28138C 6302F6FD053E155CEE103077BCB041E019A68BE6676B6DCF75C7AEEDFC80AD3BCF750A8C 00894E029BBFD6CC9B52B79DE4D2C0DA0A53AC91124ECB8BDFB4443850D6644DBF752A97 E2722C53BF3AE0A120BEADB0DFEA447A78F3289D53C93A3CD61008F26E20306C8D7B8251 299C9D0F93AB52C026381B17CD6468B61E49B236500323BDB045CF5AA728B452F1485C2B 28D1739FECBE466A4D12601BC00E38C87972F59884971971575E0546736F0645776F2406 CFE92E312135BFDC00D6B51D0EEACB1D5248841DD07980B315BE821F31DB3E500DBD4460 AB6821D815CDFEDFB06F9FCBB9797FE8B9CE2220E52F01BADE970DBAF97BC326B1659CB8 6E984289005CA8FAFB263925699B1D4679630BFD8343C267544F3B94C37DC020BB6172B2 50E372D1A07D0F556016C54CA9FE018E5AC9CB8751C45E64A41917EC9118B93070691608 ABD53E4E16E39CEF81A441FC6C3390EE60ED12213E31974F9E711938D268309750541E07 218CA4C6B1529830DAD9E15D652DF68050B6D3B9F625A480602EAA6EE6B3FB1B6491AFF1 D11E65FA59B5EAADB0C3C0ECF13191600E0A8F5E5FBD2002AE3F7E335FA779536141CF3D F715292C1D066E71F7BE2DE9F0D169F261583830119972CBE8AB9F743CB4888267C1A64C 1C465DD8866658D7E6212835348D7DA27A25FD74A042EA89BC37BFFFBE6C31D2AB431D7E 00B218E1EE9824B3641AE2AAFF0BC821CB70A756DEE00F1AF025C590249E525AAF0E3081 1BC5C0876CFE6A69391FB1971127A5045799D2954075C8F410FDFD52548A3FDBA2162CC1 72FE188698461F242463C8C72A2156B5771B3EB93222E6B36A2120A6CB46C34E5758A3EC A3F13E69ED4CE2766C49AA67D9F19FD5005B7CF223BE1ED663960836CB5234C1ECE8CF73 BB7CAAD1877E469725F304FFEBDB6CD7CE42 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Serif-Roman.pfa0100664000212600000240000057064010330505373015700 0ustar mikeuser%!PS-AdobeFont-1.0: Serif-Roman 1.15 %%DocumentSuppliedResources: font Serif-Roman %%Title: Serif-Roman %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Serif-Roman known{/Serif-Roman findfont dup/UniqueID known{dup /UniqueID get 4227401 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Serif-Roman def /FontBBox {-375 -1034 2636 2153 }readonly def /UniqueID 4227401 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Serif) readonly def /FamilyName (Serif) readonly def /Weight (Book) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -213 def /UnderlineThickness 133 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 3F117864171C48E52A16EC4270A352B46C612EDBA5A3A23A1F26B5BCF16A3B573EF82473 71388F40974509B639A14851995D01544D54499DB0A72EE70EEC16CEAD5B9B135EE334AA 4E5E92C2979EA1C45FB98A4EF581B9DEE64FB2FD23F41A9D4086A70510F5A864519DBFDD ADEEB58EA5988B3E8140AD55AA253F93879C971338C33A36A5EF06D04363468869F71C87 E1F68B8A1BC05D991D11EE3E2EE7F4DE025FF82D3E9A2C616CC9094EBFFA9F76DCE0F34D FA53DA8FAF0262F4D7D35FB58D8CD59EF05A5BA7BAE4BD12D72ABE2EB6E7796808BC7FBA B4E3BAEAC2B88ECF2F98933D3A39C16FF2750AF898FAFE69FDDD9FFB32F34C8D0E585767 45A31797F59B46F66ACA011D5BF06B87A423F21052B36BE2EBDFE358C53A913738C7F553 4D43463F22267C12B8DF99093585237AEDA7D6B93CED2212B44C936F35E3AF69F2C31DC9 6505B26A386749FE42CAE861FF7D3A6764EE7ADAD71F37645BCC739C6FDD90F50A9CFEB2 593027547BFBE06223835F673A79017872E388C5A5A8E1EAD36636A40EC93D9092972300 61737C3130DC96DA8131E61030F006F82C73A7650105F102BFAE3E015A2EF8622EDD5956 9735B6F777D1901086C11BC7A2A0A10BF3E5BC8C13EC2868219C179CB4D425403F33BB6D 57D99A668F2D211DB798E8863CA1BFBBE74A7CB97559C7BDBE2DE823299158F668CC1BC2 714FDE8808890AB78AF8B11CFB710A28683CAA8EFAE0EDCB63633774C9B60549E2CEDB4B AC108C3F96B615A0D0365487E8FFD60F22CD3F7EFD17ED599944404B601F5193B3C176C7 8364BBD8C89A03BA28055F26B544494E219BE212603CB328C60D37C9DCBC93B972E22224 6B32A4A077D11293634988C36E546423A4F43C731726487C3297308329C2483D761A49D1 4BC22C2AD000A76B3B828C7F4EFDBB3C51EF910ED4B3C4E01CFDE9092D352C24F760F9CF D8E335D43698B86482A3C6596DF26EA84DA6E4F1CB1854345FA1ECCEBCCAF659F0A1D0E1 43F06020F0CB1E3DD88AA3DE21020FD8C650910A1591B11A57871330BBF57EF586977994 75E335970B1BA16925A2B168AA5506DE6A25813F9997D35352B467D1407E5318C50733BA F9BA931D25550E755F0645D70D22C2F842577C4DFC25482A27A58AF233D15EAD8C426AE3 F822F6D166877FF2CE7818EB99A8E80923EF5CD58C336AD1983266C46426BB4FB5987C0B 2569587FBC5B2924126D0EF7ADBF88DD2E2C9B9D4282C862FBCDC532A86D7008F909B09D 6EC7170C5C69867A230FE2EAD244C7BD79E46D52B2808E1D1335322FC64420153AB7F984 8331CA5D49B6D595BD448FDFAF526C40B22182D54354F2BB6DDBD205EFE145BC12B3C7CE 2518377E5FA6A801398D037399F6E44EDDD1883B855F5708B80CCB5DA0345D9E1DBCCB55 BDE9FD9421584AEE9843A16CC2FE89945649DA499FB7DE7328461C1FE4EFC095E4DC9A5D 541F86E25E5462C8096107A5EF6E2141673CF6F61146E05339E44B88B9763E2DC4AC2363 625FFEB23A4B2FB19929F82F7A7D254969CE87F2D84FDFC1E7BADF5FD8D461B885A37CE8 8B46A22BC54F9D7BA752FCC387EC7B300C60072D82AF10A710F38AC456D55409263F189D 05FCDD11C58629C5D0475C4DA14409B1D184BB5BB0CBF410A8238E17C8126398EFCAC406 BD601A7D5FE3D445C07A209F17524C9264FB77A35A51D2A13E624348935CDBA428F77D60 15A8DCE2F3340360336EF1A8E87426C90BC6E98186324C281D33DDD34475C15BCB20919F 519EC7B7BED41A71C76BCE4B28A760B996A7C256AE0C56DF82B2034F267606949EB1D21D 51128E3CB48D1EF364F1867810FA0B6A136B6F7E78D009095FA979EBA0E2D93BD2332EF0 CD02B10EF84EDDCF83E25C032EFE1B462E56519CD83C20D909348083188D680E4E61F45E DA48C1BF7A3EC658440D37765F02FAFE33A2D874E5CB5A0CDA63CAABA4CA78DE5148378E B09763A7E89DAA9D79550DA7078E289817804A61B07C18312C8542E81AB40005C26E5A9F 036816968CE5B0D2637BCD0833094B81AD2E3BAEDC510C96B7483A65B4EA044EF904EE4E 7FFF57316EF2B1E524FD9755E362F97D3E1E5EC48986D6C03AD8652FDE4F1BF364C42026 F896C27EED95A0BA9BA563FFE16AF5C391A06B51647DB96480570F0589AFBCDA42537933 A13115063D241F5C2923819FB48629E60212D8D7F4A8C32227E91D64B8BDA6AF92BB5119 D281A496DF941C27C24D23D130B004080528EC9D5624082F7ECDE5A27755D461B5FD5D7D 098F7B95B93AF023956FA2B5CC7AA3830668DBA50588286CF606969E275792F7C38F61C3 F8FE1B8700B04CA0C714133D9AED58B55D7292A3A0F230E89F0A28F6E578FDBBA1BB6DD3 F3F7A819E3F8993F1E6DF3D1D45BD173A06B84C2EDF6B871FF3274405642626A1ED497CC C10A68ABEF236BE17EE157500C389347322A347D1A7A4325B193A4CA1657093E46824796 3C8715DF3CB12A10FA770B7360C06BA6608026BF02CFD23EDF9D2AC8B4DE67C4B611FDA5 82180B1C22525428F6EE1DF50BAA71033167A14CFE770363C11AC04CC806958E9848B585 72780A99746C1D2C801735502608580EBFC89C0AF5EC207F4A1EBDBFE8F6E1ECF4CD4A7A 90E119D9BA1856921D8BDB9913961EBB3EFF89E29167AFBED4F7FA79BBDA47B575C6B9C7 EE991FF3824BB70093D81FFA11EFC8665B3C57AD912E5EB029258EE9B7B65CD03CAC55D4 3770EEB3581D99D186794CEB3D40A8298B1305E251557C4871D66DAC955408AF21321626 F189B211F7F20EC5431691AB831389EED85D052DC824DFA1BFB551870067F98B01CB4697 A1D13529AB932CC32386BDF151278B998F800748155BE6635FBEDDAB001F0AFACAA4A477 E78459531FEB45EB5C124CCDF761D6A5A2B6344492F33A8293A413FC97F6F133188D94E7 1474A6A97BD84D413C06FD221367C6B3EDAC4B61D3D84683BEE3618DAA03740605B9F73A 00208229FE495934C0D85CEB5F2424BF3A2E0F061C953DCEB9D06BDA65A9C952C9297728 824FF002AC24C3F4B801F0E2E461346745C6DB46E23CF75F1270205DE5F9BDA892CD397E 8664BCE7636B75B90E0B5D240892DF48B3DE01396735B4FF93C66D2D4D44EBD1B14E7C00 6698E4D38CA6E924B54304A60EA1F6B5012DD55A7EEFC08F8DBBADDBA010A39B308FF8E3 B6C9CAC42AA3E675311DF059D59469D96EE859E43526F343CFBF74A166071D85D21F3694 B8747AC847D04840584AC45023511882D29B9A9020D92D803A6A6BBD46B1DB0EE476FF8A DDCAC80B7090360776F3AA48EBCB47C909B279B5C15FCD24B2C87A633CB993881233E81E 5CD2CA78B9B70EB074B473DCE15C3FBF9C0F3328456252A37E1F8B979367A9DD3A839334 947CE9A85BA08E48D59C75DF56F1BFC3C3008A2312618E45B2761CE67E87111856307273 16BC9C24D96556F16F13FB0699F0964489177C155DAF932C488BF2869A779186EE507AB9 4E4CB0E6CDEA23FD796C37BD291346115BA71244920A49941D6F6E46E733D33197A13E15 8E458CD74BC5798A0172A960A34D61E16CEF7BD085440528B6CF0B3AF9BFB636C1ADCE5A 7660580DA77E8999C26B9F1B002486D9114C84B3CE9F8DDDA2ECA8AA89A3FBDFCEF37F8B CCC7223B098E1321BA2288D7DEDFB3207390E308D1F6ED0BF205A82E1E25E55CF58AEEB1 C21B56C569899CBCE28605FBAAEDBE2B9E49567EE7BE8AC19E6E45A943ADBDB4E9F8EAAF 9DD402B02EF3792C3717188D2786867C2C1693B82C520372DDFF1F08B95984FC5DF1B268 38D8B262C5786FA483AA73C7B07154208089FA66A12394453B75293843360384E8C6B318 F03DE50C1523ACD2FE729CDCBF0C5D1ACD238F4683D5AE249ED3B032739A052C00587506 36932A81F9283E154D16C984D7B56959A75F504570BCE8831E37D995BAF9A144A5C9E076 CC35E1909047D65EC4BDC17F7C96A025692D069A077BA8DC2408285D472ADA5F611E3C36 9643BEAD81393B7F53A50A93F8542E973B19800AE99FE410550EB395052F59274E2AEDD3 2072958238B1DF5E90E48CABF9FDA459F5C6829242B90623603F7AA4408B1041364FC91A 04685BB161BC307AC7F6F33B166AA2DE11CB44F537FE13D18A87EE30E6F79F044B843924 FAFBB713D575A14C29E01B838C58D55D65E2A2158DB7AAB8E24CEDEFCCAA36D97EFE58D9 0E13598F82BAB44F5B9486F1DAECDBC71ADF33A598509E00598A31E0BA4C800DC5EF267B 4E65D21D7B6299DF65AF7A7561C9A21C0DB7DC40950BC7BCAE1C2287F163CB86D256CF8D 0BF0F80CD5F299D61197EC18072796CEE437D5F6B6FB1981DB16E9F40B9E07EDDEE03B57 DBB822E9A43CBB183FEF6E99EE85F8749F78D82E2B7D2F775DBAC49B9C8BBADEC369B134 A7DACAC27C83061603BA96A9B8A5ACB2271A2DE056480E274E56D041FCBB25A8117637B7 DBCF687D5F2FDCDA02BD88B6DC71C84B60C5AE605F0C33AD8444CA3D03068740AE436AFB 9BB576FF63A88D8BB0EDE87EF9D9843823EE41B7356973C2652E65B0B24084C24D7037AD 0E1F864762FE1AA1BA8A8533081CDDCC3B3C3CEEE509BC186318F01D1832E73537D3EA7A 72FEF5F98C8D3B1D5FD31E3EC3166AFEB013C8927CFECE3135D21C85C682DF89AEB835C4 64DF454308BF843FBBA289C32099AA17D910D7FA954F4B6F64D38C0C8012CAACDA6D4443 7C8C4B17A9520BD847FD422BEED5D0805E4FF473C2C99335A8FDD451C43690CC19B363B0 E2DDE2ED215DB07F7726C499CC46255650FEE9B350DB09836D5387435F216EA864D88B70 08B148AD68887A6221ABA7AC685D1A38243F854836F548C8E63EC0F85CC9D6C81916A82E C3075E3495A02E8CCD4A3AE47B600B4F1D37246587C809F95A26E60B96A1D145D3C3CB33 E0F49A26D7732DCCF7AF89DB01D261374EA479D0715B3FC241065C103659C16ED29266E9 628B6E91C9D14353A59F92BB1C5BE014903BF5595EBD271CA55660FB2609C37928A4E860 3B203710071FE294B707FD3100B059501591DC5D0B813EEBA34233B98676F3C17B6274BA 5E3D5A042625763AE8E0500B9D0D9CF84A1CFE21F211994D7A7EE618A55BB33E0877D814 37F7524DC72D76E8FEFED73E72A516B434BB0CE0C3826F455BA56A2490CD9B7B4087EB57 E9BC87B1B7ADDC47A2481CF77AC343017931CE6674EA1DE7C22736ACA87CC3CA18D94D81 7EE3F3BCAAF9C378C18909D2C4BA111D5540FE85EFDD3B24408091D62B6589084E2451F6 E8B9BF7531F2F02EE2D983DF0439999FD49770A6786CD5B04C15C02842300CBA61DF09D5 44562C03E438DD5517359EB7D025B86ACD5841E7BF8EC187FF30B76AD54F0B55BC15D4E9 2F42125148B931F16E660D71DEDAC590AE8E1914134F0217C5767F512CA3D539B6816C8A EDF1058B306B5049B868337C4E13ECB411FD4EC2B50FAFDEE715E865D3965A08B337C1C5 D34EA5332A37222F12C2864031C56C6DA11C83FC874B5C2DF173934ED97708199FF8C7C0 FEBC991BEAB423577853C22A591ACFD6C9395B2964A555D7C5CAF5395C79265845975C69 BB809438F90AC60368E8C3BB88E76E9CAFA741D8BBD0AFF37EE320B8D1747A1C0B0604BC 756FAC30B6C755AB365D99E79EC97023E43A0237D1D70CFF7B5358051DABF5D0C950D7C1 E4FA10743E9784E90BCE0C61302FB4575807483DA45F4D5E6BF6BAB931827DC56A533F9F 1D61DAE068D8A3AC508D12D51BAB60A66003448B630F61393D3B2733EDFEFE67FB35193E F72D7003E84CA6AA303178984252598E1E2A9C49E890E0EB8655A6D2446EF16553739B57 6500ADBDD6E6F0FFF4D73C7E9880736541194C41E82B8601C8CB7EFDF4439868DD1B80F8 02290402A94CA616A80196C5553C8EE8437F47D2A1F30F7B234A1691B5A16064D4D52B24 47C36771AFCEA7A90FBB8138760FE0E3B3B018949C3ECDF6B618F339E5A56DEC5A9136C3 20C0A93537E1CB8E5B1D6477D2438F1256E62640485F28DD875693A4A3890FCE80BD18CB 0CB816E5CA1BF41965F0AC151C6CBB022CA7AB0E77FEF33AD43074ADA683F319699DFD40 E871D2A84CAFAB1A979DCE34571F4E6D6FFE03ECE865ADC080552F64F63D8366852535C9 46530DA3324612B1E62D0B6147143DD75BEC13F1F10C6F210BC8D3FD74E46291F23BC571 49750350F0708F91FD654EEB5105037F38367C1D86896A355147B44C19A9C10D6634AD7E C3CB585C9CDE6F83BFB368388BF5677462BBF57607FEB9D21B6212BABE15FD3A755B39EA 41993D149C2B57DE2688E6B7772E24C812B179377AEBCE35DF615DBFF6800BE250E3EFFF C8E99D5A562EBD0A20BAAC7FD25DE6C5E3CFD8D6C3746B6B8D5D396AE71F5CE3C1A7EBF4 2E8CBB4614698E17F6E5FB4CB1D7D766B0DFE1A6EE0243BD8A01A46C126AE9C00556FAB2 A9487372E60EF1850051E98957E74374418E7901F13E2EED0DC5CE9B93A3891C29AACA30 17BFE014EFB0B95BAA5C630F626E2ABF5ABBB42E3DD2810D22023DE8736499B8C01C9524 341D8C57CC3F2AD711306C696AE7B560F384760C272D9B3F0B0A6E262DA4D301EFF2B060 F9BD834D7CEB806D28EA3614666569A070F97D3E1E3498C3CB6AADCEFBC38ADF8DA0B517 3E3D7A08CC67D1D3FC1BF2B9134ECF7BC6BD568B9556CB296E72C18AA08B83B46BF74F01 BD20A57985CEEF4463EC7B332B922DAF7BFC2039A4054857CCD3441CA8A02FA172D8E3C2 D8233EC0489BD98AE057340C536C9B22F4ED93717028D4EDC7892CAAED70031857163D51 62D9A3386C37DF8B8430B1DC3A4FD1467B239298CDCC48B44E8FFCD191346545E3B9DD38 9DD69D3706EC1A32BD7AA7E8CB13224C3BAA4DCE01FEA30BB853F2268DE72943A1F3AC38 F48E25EBF479D5D212261C608840EF7E9B66D345847F241CF089CE3D738DA73506142B6A A54E18A752827651C9296C88E539BB9971A5A9E520637C93368F3528BE34CC30B326A1FE 03860B4FCA61A58F32B098F1F6EAC56D13A60E1108FE575167D69B20F6B949B91197340B 0E0A0B063847DA3346A5AC1E1E81162BBAE840BD98BD3294904C99F053EE3A8EE038BB1F 7C6C28AB0DDC53AD725E4947CF5AF67450FE0B601C0DB79FFBD30BC897A126D2536FD3E4 B93F23D2547BD4344F8638AEA915B80092D57E2261912527E71E0198609A6B57D5B679AF 535D643EE0FDCCFF3845C666B1255494F0AA92F82DDE833C3E2F8DFA051C27664D5E39DC 62B4FF0D521F8D2BFA71D09039A897C3286FDBE2BC23518CC8C89896D4EBA38FA5E1CC3C CC85D019B45EA633850A5D7D8ED43471D0B8D5A1F306C1817DA897C5F7685770AE01CA4F 09BFF6AD874EF76D2DA69349BBD84DC1DECAC957EBAD40DC1B8AF772459F62675EF569BF 2C93545936E60A7E30189B73914639F299BE6BABA56EB109072F8D717195706C4134A8C1 CF843114FE10316E0A30979A5A32B0C05E69A239F52F5EACD6F505E25624AEB97735AA89 D8A5B26DAB21079F9F442377A0C1301BE5344DB3E08580CDF7C6E20E45847FD7E8D6340D D98849E23A7D4D11ADD29DB52C5B3C5373C89E606CE3C4D85A8C953D3402E3AEC584E3C5 6D49A5CB0D718F3A8C262FE8112F57C9B3F1852A6DE0E425184E91382184F3A441A39B86 5D3B8F5F4C2F16E8763503DF687646C9426E901F3D3C117FB7E4CE9882684927FCB99FC8 795956A117A0E739D75A03043506BB10BD0EE6D5D97488D71080DF9DD755A510F940E216 E65FE07A874C782191D80EDDEC2C0E1750963C817B018D9895A225D1663128DE028DAE94 644925DBB007FEF409DFF3C8258C3A4D80C3EC0FDCEBEE14463884458F30E590F690A814 A9DD8C822A4A353A6208B1103B0915A96598236413BAAFD8EB6637AB773F8FC6D93DB824 77AA01F9F27BA816D0164E4D433FD9F69861E5B12C7178226A6DA240A516C726C309EC6A A6E4BDF43AF146F04F6C86A38259415E63C817E44F67A3FE73DF6354B7282D93BDEA03AB DBECFA5A1A8B2CFA79C49978A94A5B4245F3345219E2EE0D217815D54BFB99EE7B1B95DD D6DE2D303C9B2A4E6F08F8DB64694BFC80E63710C96B3352948A0E77F176576E34311C66 B7604C93E6B60CC600395A61303ECBC6F9DFB52CACE234ABC6FFB58D7CB4A08F5A52C6D5 A4B3D3B6BE5771CE948E9C1A803D1D7CDDDBE68C54ECDE5C36561825AE56C8DA237C2C89 2869BF4DA4EE8EB536AB6EF136351074D064D7C7FBC7BAA46BEDA4208F9A062DF7524852 01100FA37FC7C3AD2FE656832C20D7474139493E9AD45C7971AAEC141389F1D6D3E1CB1F A6EBF625FE1605D70A8333BDC46F1720DAF6FD46598B08845F9FBBB1F13D8D522725E4D4 5B0E409F167A0C600AAB24129A588F58B8FAB985173298CFBA6ED74FF56108A87F77C1F6 66ABDE681BF3D1D937473ACA0BCDDBA6F65B4ECA2EABD1ED2BB6C10EEBA22EF9558EEE5E 52229C7731C92237673D761B71E84523FA5FAEC347A1A4687CED1EE84FE003B0AAEAF19F B87B590BF9EB665D701AA9D7F05C39CA12A543F6C285A1BE8EA4595A6F6FC7D2104D7F61 B0D6ED6E0B78B9F279573D402AE12D6EC21EAFFAB73C97F461EF4636C347C8BB01234DFC A080A6263E581DD807B2E1E4E5BB8AA8E588A5E347A760B51AD1C6B1C8DCA54C7F378B71 AB8D8D1B056C164EC4018231015F2E69EFCAD2168FA222A6A439ABB751A1B5042E1579A8 690BBA3167FD61E1B0182A1FD3821543C5975B3ED48DED26C61BF358A97FA807427D9960 4DF4EF7141B2B26B1E321252DAC15E43B70D4548B054EE92951E4A202AB03248A843E530 2C58204846DE729D99C83FD3A731476729C59B97439D271822BF6013F526B3728EC7A3CC 0F465F9536DF7A293C4384724518CA938F0FD5099F9CA66F330C3E0F0009E4ABFDDF78C8 FA2E8A56832EBB82EC25D9BFDA43B3996C2EE1D3B297E51944C2B7C2D72A7005E2158ACB 3F95CBB2BEDFDF7850C36C0677BB582380B3C6CBFD284EA456A4491661A8ECE72F4D4167 623FF5F1724142B7A7CB7FBC65612047F3E45DF4B51DF7BA0EBC24A76D641BC7520F4CC9 26C4C6AC900C79ADC8B25F8EE0E38FE1EC13558B6CE073B1F42DF3D74ED153858C2EB0D5 A5E5EB26B35493CD2EA6996BD279FA974AAE3736D416196FEAFBEF437AB3D411115604C1 55ECB35D6653CF98E71BEE5AD77F702111392B9E8B8CF679A66338A34D4CF85E307CF263 D5306A2B64A487E671C5374A1E3B3F09DA5197571530C9B4898214630933607ED4883068 57D7444A1E40339A88DE4B0EF5DBD784925C1461FD56A8708CC82C4B46BA5D0A72D8D4D4 517DCEEBDAEAD1715EED38133760B14DB588F091C53CDE5587A58385AA6229BE67641F5D B5F3BD027C67283ABF80ED015635E50C9603CD21475545FECDDE0CDA90CB47B904484FBA EA2BCE545F0467E0A0311B138AAD1FBF85A1DF754B5031F9D22B5503866C498AC75918E8 C94F1CE60977906A523F2044643523B8016804F79921A725ECD249DE80220766C94B2B43 FA9F47E2A8EC7D5AC20B0FADC13A51CA8742CE4247E22A02760494F61A20823FD860BCE4 3C66F856CCF6ECF07DB3850CD18BA7016E618F1CE95801826B9F9C148B88EC9C40D3ED5F D8454B642D05E267E62C8F8C54510A9E1DEDB8C8F61292E6999BBB8E5BF034DA8B45D2E7 AC752E77151A0B1E151E104CF343052176C8AF0B2BF0632795FA55A6249C60A35D3AB71E D76375CE60C87091CCA90304E98C41F9ED1653855D475E439578C173D6FE3EF696F2C326 3F8D5CE7C2A9F04C499ABE05E3C1EA268D965E7581019F45648F85ED3A094328BAA8D9B6 97A833E9EAB6AA97C9568D0EDF16AEA31B914E17A604A8CA62F41AF452C29C1BE2D87BC1 45B49D79014F0E670243FBAA5B6A6A2A533CECDE6F535D0F5951B73BD595DA5F37A4F220 0BCBE3E0980EE9A27D0B218F2E2328623791E4FEFB536AD008D26C25ABCAEE80D80D0D64 095E65B97BDE53AA21C48D88551BD7DC53F0275A2FDC6B6CDE17C53E57A8785E930A6C8A FAEE2A22DFA4C124515F38D0189FBB2C8B4E1F53810F7D277FF4B968E85DAF73D0B6F824 3AED976E57E436CA6A0B1DA9637E80791D6491DCBA8E122FD1538E9B45DEE48315010737 20DE571C95D5B52E619D83A87BB1D9608B1BABC63F2D921A8B21ADC9E0BE12FA6D412564 36A915DCB6FC6743EE6FC036E72D0B0BC0D34D302DE81EABB3785FF63B4FC19AC482878B A286EF474E7CE64197D41CFC566F1F8AD2CCBF508454FF9B554A079B89A33E164B262D2F C8B742BC4A82E37CF4F78AE62F94BA0A3C947EB190306D59F2F72F7FBB1D56FBB9A89FF7 B9118058DED89202198B3A5A7A48FEBDC62B177D875D43F551A82676929B9C4334B8EE7C 20797DB2185B0EDF6F9FCDE6742FB4D85B5DC7F53DC0A957C9784A1FA74CBA4FB6ED17AE 69603C2EA3B8D2E1B1CDAE38751AF388EF53BC625C2E2E1CABD5189FC5BC260F7B8147A3 416DA0EECC17457681F6ADF1D727DBB69F01939252807DBBCF1B9F07E1B999CE75763C7B 4470B178E614A3546212C7C05C244219DD6EE787591F70D898F4EDF8FB5E22A6570F48A8 67CCEABC6E37E0AF69B134FAC5A6E95367C4FE6A6B4A2120CBB45AB7C271B04017DF382A 4F5F18D9E6166E5D470A63665E010D1276637E06C4124181EE21C7ECCDFCA02F2A658CD5 9D524A27BB53C1B2AD23177946E312A5467B8D462E6961C0B716CE2E4FBFEC19FF9422BC 3D9414703DFD27CF1B5F5A96A48B780779CB9F4968A9B386521C1BDE7D56D65A87BCD919 FB2F4D7B6B6ACEEA27E5B7EBD460B4E37F306DF1640D02CE708F385B0D3475E97C7945AD D70F56962AF7B43E4D6DE2DEBABBE1F712DE6829F7661A21966725241087A68664B68D04 211042DA602B077AEDCEF4B8EF947FFAA9702E5BE4EB3CAC05AC49B5EE0AEBB35179F744 7A793C5EFE21EAFF692793EF4654CF4CA63C8CCACFC45F2BB584AFA6A48D3334EC6952BF 7EAD4443B153FEC7EF4102BEA3713F75408E29138D24EEE0302DD9DFD4EA0FACD57F624D 64B47EEF0C12392EC95900D7D23B7CCE1A7AE2197D7EF47817ED0782C474329574E655DC 2B21CDB75737FD3A296D7A235EBC5C9547A2981C29080B21FA8DE66EF2C67733CF517BA4 53121C8A0358432E4FAC7EC277A0B6C01CFF63F99A11DD5FEBA24C929AE3EE9A83402101 FC4D83E40BA3111C5DAB39E1820F253D41E52F9E57C989DB3FA2B675ABF24BE29E71571B 42A5315F26B07493A5E4090455678EE698C927A1E96B50D864EA43641E9D9CBE2F292C86 6FB65CAFC17062519B94B17C3630DB9E363105DCBDDAF4C24DAF1D63B7C3D931406A36FC DC502DD9B2FA979EF822F83CDC2643041481BBC175BD4696D17F08515D522F2B5DF80E9B 31BBB4ADF403ABEE0823B3149777041F92A1A4FF083A93704ED6D815BE266C0660434E24 1A269ED51FF32D257EBDD28AC1501C46F78F366FFAF418382D56D7031843A79F72E1AC6B 5E00FED5AE3F8C5589A799AAF2879231F11E049B8A579ED6F1218CDAF6FA45EB010FB1F4 2C39D7F6584AF069B67C81A0698CE8EE6E6A07896CFB8ECB4467F510BF18834184DDCD72 F951648B7B4C35672AC1778EA9F6CDE0FC20B4BD048D9391CFA7B38E18A9E2267B407C8A ABEAB51FBA92E828E0109F637F86EF6F615D850B306143D435053A7A6CF2F24E0FD5FDE1 C97C8984A8BC9B603B84CC7427A77F6BB7DFA8975AA6D106396BFCB597E89F060E1101F9 D5F02D039FCCA30AB3FE1CA24C7130620F115BD6B9594E01E0E7CEE1D3F2859669059B0E 714C3F9F9A25DD3FC65CE7EFE021D5A301CB67F16B3E866C1FB94BF02F1DC77A9E54CC01 F97E4EDF0F4A0FEA61B8AF242E4F815D33EA8FA36351A0478E11D8D08E286B9F66A5B398 13BE0355161BD9E572FB6FC52AC73A5AD7C8070F928D820B80FE4AEA9080CE1A7C71BCA0 99240A75226FC30DE2682CCA7EC8A91F9DB4438951484F47BA3F16492D5D28DDD3C40DC4 463D08F269CDACC37CFAE8F33A108BEB64481A3117EF9D25F1A39BD5D9F39927A432E388 4A8EA795BF0E3B7DB2B59B0DF474B7FA758DDA8FFAC8A1ED17D4A30AA246D00328B9C426 3703BD6F0049F1A6FADC2A2BC62283D2736AA80871FB0E70251B2FBFDA7C7A92CC399568 4BE3A31128C556BAA05A896C40378897F5685B3D35C7B88092E986D560378E1F388B46ED 4D3FE72B0C79C74B8D08C30D5BC50764C91C41FCF22442AA44D5998BD80F88A2C5F97DCE 05200A97E303958A9CD0ED2D0562132A5C7A665C596B1FCDC5F56B03784DF76DD5B3421E 3556AEAA0E597A1B008E12A9456D14DFA8B24E03D7CB6B36210390A41127DB52FAA5C162 F67053CA58516434B7EEAE2520FC42AF39F5671C53BB306A0A3B0457985BE29EBBA49FEA AB1B746400163006F48992B1F063BC705768D0C245977191D35CCDD028FA23E8675AE082 A2401CA18632F24E95E1231F529DE9EF7AA484CA30D12097C5E26E631C14463DAFF47B72 EB40531AF96A2E42EC9843DE6274B66B0B0A329066250E0BA620CB503A43A1424E50FBF5 4DCB46614ED38C05C0D93595D41F7078B6889956C620879FE4EDCE36EB52D03E65C08827 A12F02E3E37A975555EBF49D08D357B903EF0B50D35437C375CB6210666F818A5FC71342 73A351F55078651E177E52AE434EECB655C998F4B77CCA1A2A07D9EC8DF8225C7D3EACF5 AB85C8D84A6A75AE538F5E4C2729ED43D55A0BA03539F3C60B0C4C1D93BCCA848B7A0394 2393EA7C5825195E8C22F7D68DC7CE8B7F4629E304859B1D574C81DD316FCDE639CDDDC0 456B4E58E1E1CAD529EFE5FF51528674732ADA1C19405B9CB4C7D93C1450826B77864266 6E0C09BF02467F851734608027A3BD9CCD5FA155872D2CFFAE8B358ADBAC430CA280B427 E3D66339DE6AFB802EA8FEC2A2F3AD530110B041D3D689F5DEBD8CFA1FF1EB3C4855B35E A3659847028520B8C39A5F980593A1A0EBF1E96C3D8DC85D12EB32C8F6E00FC0BD2349A4 16EC3D1A4584188E6F14F409205F897F02B1027F4087A8CFDE3DA9D73CE9DC6A65A7739F FEA6502E8A2FFA0EA1CF547E7DD269C52A8B3F11B26FBA63CD82D603C22B3972E4320A08 26BF343566B0C2A3BBEBDBA394B908DA2109879F0F485C3DDA2A4041BD390A6FA0C55735 20BD9B76B8841CA5DBED94C17001E1061F0C5C412B9EFED0F37F9160D7611BB9170A4009 37A90D24B9D37E23D374553C6F7694542AE31C604548F4FAFFEF3400CE64C967B8B1C1D1 1E5B578F57FE7DBCC029C6EFBC08056F24A47EF2A07039F2AEFA9990347F875C6BB7B82C 9E1D604056A7672ED2D13BD138B05545973DE6775EBC3AA6664221D73C3990AAE16D383B 9D93F1CEED6CC06BC9FE94208C37CC896DAA86B6660DF6D58A5F93084D25DE413F1650E8 6174F0AB0E3BE746ADF02CB795FA65C5A171890611B23EF595E99A57768D99E1659860BF 9595CECB901989FD377E9C2F87C4DFAEE261D5C020E62100D4B3AD9C816B6608F23EFBA0 477A3DFC3AB6DFBD493627782C24ED195C2D1CF02B4B362D91E9E49C7D01CBCD884DED03 9A0A6AE3D4BD05FEB993424FB4A581A43259942B460A710D9E484405DA0C50E62D0A6D79 5E8EDE487299F0A1E6B43480FB53CB1E6E9362A2BC0CBF7BB023D2D247B4180D89A1234B D1F360FE7BDD61C91DA2DBEACE8842D58D79FF72CF252B12433B067F5E691C0F93D5C6BA 11B5FE53F55B75FDF3CC78E0B0BCD31F207E1DB47B80061D8734829B0DF4D9097F21102D B4BB732AC06C381F7B8CBA96CB574F973A9A101C369958A97FC52C2B34848356D31D305D EDFF110AD9468A0E4B35C45D666CEA7F75E4AEEA1E015F981B90528AD30FB3FD69FAE421 6171D314C5A4F2EBFB3378122651BE7115EF4DEE839841FCD15B1223327375A02A77F62A E414D4AC7C39FD81D75B6DE430794A3BB2A713EED6BC163E7C918AB1390FD6E95715BE40 96910A6DE3C69BE91D92ECB9AAAA6F5468E59592D33221351AF622F086B832B24778ED1E 2057402F9F6B86785E0647FA07C3463F3E7D2336B0AD9F3EEFF7B5B6B246FEDC4FE7EF1E 262B773143A662D6D049830C6EE7EFFA3C674F87DB1781A03CB3BE8B6CCAC017C31AC0EC 9D3C1D4DBEF9892D5984623EA6D33FF1CE3BEBEF4EE77C94F2EBFA7AB623CA3BC4DCE1F2 2EB28CC0D852A636D5D46C1BB1CE8E4818DF61BA024504FF7DF3413104C411C7DFA4F4D9 7843FCC023C8EFD9CE8D34F0421E6015638C5EC0E57DC9AA8B32DD57F5F195FCAFBC3813 596B7A0E0F69D0102FC44A3028684915C24F8A033A38DB9DB04CAA5479AB954F72A54D37 3690881BF07FCEA15DA396C99AD4EC8416B273C8E33CD921F3B1AFFC0267D070787FB10C 65108D91CEF0000AC12460CCC4ED8246789140751F0B7189DCE101E0D921C07F6FA2D99E DB89B97663863588BC2D01F820B5F4DD0C3FAA11C15483197E09D07725D105A956DCD44A 1F5753908F0A246AEFB641BBE4D4B8449D022C64566A43140C983CE6C7AA4E47D2E3010F DC0C16B290DC085E3ACF0D97200434A49FB8227B7F6505A11E4649FFC13FBEBE614C94A4 9A2EDB14BA18C77D53F1D9C079F54149A4F7CDCD1512FC42A666AD4460D38C3456DE0093 74A1235377B6490A4F866B1DB007D6A3C53DAEB8309DD6223C1FC80A9DCCC6342F21C854 8410E22337ABA9416420A8BF19E1B3A7045098A0937984E24D680E52077D1853B6B38168 F7ED37B48FAB92BCF26B8F7FE051AB4336DE49DDB35ACB4E64875DEFDBD1019A10B0C15E 55D0A60768758642CC9DFA0A97335096267918CC9F24763A1EC880E43F46A46D0E86653A 1A87ED81AB717B8D84CB50704E7068D2620724CB47C2A72F9536FE7F7654E62FD674DB0C 89BF68B03877444890B56872F37F520243ADDDEA19CCCBD207290FBBEBB5010065A477A3 359515E8FDCAC275871E9F972882E405BFCA85F048ADB64FE1388307A1AA084086D4FFFA 26993277C779F4E019765029AFE8950F22AEB24FA9924B580CF8994B083E8EC5D86FD795 7B23CF1BA4EA16066A87F9C239D89392929FAF18409B32362C51BE1EB1C95BBCF3902E87 697119E890D0B4E6841F44C5E09A469278127DFDDA1A27A67CE26B25CD5E6B813FC50446 20C1C6586647E6DEF7400DFA06DE4EF49A1B5A3901BDDAB13FB0FDBF3D68E9F675D46C9B 652E3CD3BFCC8AFB4F806329AF0051CF562FB61EFA6CC7160CF9326957334B5451C5A9F5 64D6E8B8A7BC78AA18D8AA3451018C2C2A05E48675ADFA60055FBA261B0E3A8A89546696 A8C475B00E2C5A51F3C8AC646B33591E6ECCAAB9BD37A9C52A391F2076E88A70BB0891AA 61EA4FAFB9631853CE0018303540891DB0E5128F8F7208799CAF803520E05C8330CB5724 A54998B2D9A1981626158A8346CFCF5594F3AF01AB83563FEB0DA42A7E3D1421DBED811A 20E6DC5EA631CCC165F72DB21F6C9C31B74E616EAF0437B00DD415D0F4CFF01A212F8267 84F079A2BE232C12050A8C0765A5A102795B95484CDDFCE1F613743498FBBD0D6DC7DC4D A0B71F959EC5498C6677B4882B971CA1735F1960AB4607C61EBE2DC2F080E60A3CCCAC83 F9123468581910C2904106EAF7FD7EA708FE9B0E8F146E7BE2BBB54E40EA98210F2CEFEA DBE190B966EE3EF7A9F6E1426D62F91B5E1D9E8AA5BB048C8B231F064026D0CA6B108BB9 F878DC49332A1B598A12EE2F42FFA90D2C7155FF6A5A77866B60820D59678BE66B9B25C4 479281A85D2D3BE2D63C9ECD804F763061C60775076D26A374195596DAB677307F3E7E47 A8BB9A5BFA9765203265B1241F7841DE99DAA118C703E7B431303622E8CD62B54BD29C32 BDE07141CA738CAD45ABC0FFACA4059F50E3C029EA4F861ECF8F129C95745DBCA38AB0BC ED7AE9E812731240D8C6C48E40C6CFF9F4B8C27A55E3E4B3B81164BF676E7982B5A685B4 CC205AB0FD68A8D10DABEF84CE5E9467D2B2E99D0E0DA843230EB1BCAA0153C7B9E63777 A8BC7387BD5FCFE716C0FA3DAE34B070DE832CFD1661111489926D87079C81113E54E9DD BD2F6EF018EA505FC486CF64A85689D1F1DC0043FBFB5ECDDAA2C5EFBD9D173BEBD908C0 6919D08F0EB815431C463746C5915D980AAA26046E143440D213DC8271C7494AB965F1AE 049D1D6A3EFCE21AD66D6C08D301D8872AFB045D6E2F6E3AD74C81E411013864ED77A1CC C3552FE68D4C0501A8864CA7E084CE0B7A58FA832C8981773BB588F12E63A211284F9348 D4A6B98F5CEEDFD1C37B0C0C3C5FEEFCC1B79CE0D0D620461F8C865DB22FA553D4C83251 C6B7BB034D409ED74A36D179EF07DBCEE50EB5311E98F50AC8CB0583DFFCF55AAEFEAC36 BB70F96C64407019D18836F9BCAE5A2B2FD638D316CA27D0B469F3E7C7DE0BB44ACAC615 3178DC6E88B07EA0DE2DCF1577940C03FE003F1592F6F80AB30E05810FB610579ACFE4B6 A48C4F232B1B036296149078C400E625170EBA7F9DB88AB58974F206E79D9B40D723EBE0 20DAFB6F25DCF63A75BB9F83A016A68CD2C4C4FA3B9EE9A6080AA1FB059CB548BF0836FD B4D851CE62DA7E2A6DF48DBCA589840B44AD3C03DD40CEF5F4CE3B04C65256FD8317E4A9 8B4A2450ED10AE3EDDDF331FB5B503622846ACBDE76AC3C6B179170641AECECF1A361FF1 2A247478B24E809FE311A542E919E00A449C50C827AF205F6FA284290C6B9908A3CC9382 60E492015F0681D6F590868FAA6D177C2748BEE1316FABA3309B54DB2D96A073CDE12E86 1EE3B9B60C8713CBD3847BF3CE8D15351CB32D7F4A98BC6F9B0841E44EBC587E4455A1A1 921BAF93A49F7113CCAF5C250C84F99CBCF6BC2DBD1483B2D90B6E8DFEFF0B2A97594FCD BC4491329038E73C8C6D2A049699F6A7BB539459B1B1E5CC62106AA882A45D2631F063F1 AF387CDA70C661FCFDE50C420ED15C0FA64B33C151FB0174DDBD9605BBFAF33383C653AE 116D09891E5A3ADA36B632E51CC921B7F83D2AB20F4050C2CB1AAD8D65FB0B89C218D40F 14A710D40AA9DC077CF216F04151CADF7F6D6C84309ABF290EF2BA04588BDFBD57424163 471BE0143813304282D35084E9DCDB7723C14E1515B979D0A8BECD410FD986EAA168B11D 374F3E5989457D24F4D7F29843C7C7C60932C82848797648D6A533E45D5313AA79B25F96 BC7F431B4705A16056318121A8AB8F878BAE1500099BF0362868F81A2C54358DFFBA8749 ACA873F8D9294F7551FA51CFE6138E4EDCD7C762B9657A03385F6F1914E0DFAA8A324226 42209A34650DB8AA57C6BD2050DECC6F91DC03F067D1BC9FFF1C060D30C342EB1371B80A 2DFE9BD9523D351BAF49810B815720FA90BB6950C91ABE926FB8EBDAA5187AED1C826ABB A4BA064CB253F93DFC4D58559F55F247366EA68530840E9E0FBFAC329513EC3479013045 67062ABFAB9840852EC33990035ACD8F339E0FAED10FB8DD2433BE2AAF4CD4E48601122D A191DFD60CEDEFA0AE8E3FA1971E73787A579AE156BB1D8750DF7EE663F5A3226CB7D9F0 1625ED4DB26F471585E49D12639F29A082441C17A66BAE63314CEDD0C22CAAD744F3F1B6 2F9B8B346F367B8FC24CC2525EB6909095C93354B9EADD9EC3CCE9330D941D1F16BCF802 FC6D8642C3C4CA78CBA3DA87F86750B142A3C7D4E5EC39C6D11FBCEF5753ADB0CAB51A89 A9398D99A26FB5E7EEACE08CD87E7EEAEFBD38FB782E19BBF43F98F9AFA718CFA574B072 23BA4A6BDCE6D10C4A8369CE8B1D99428488A53CE7A7A8A78801DF3718D34221E67088C1 8E0BD1CF5531F3A78FF2FADBED8370179E696814D5EEA852CC681758F3E412B7804C5ADE 1221F0F2EB1BA714A095E8E6EBA16D75A08ED8749B5DC33CA53653F60AFAB3A0C2F352D5 BDC2A5BC212E63E3E646B1FC4B37AE946D91D4DADB4E56168877C2D21953479DEAA550E2 D52680BF4D697D696AC9B60949162D960C77967B3FF18F2983170237A1312C04D7C1BA2C 7C3B53B5D4F8A8CD6EFC73D8B85957197288D127473F8F2CA21B335B9240066545362E35 C84D3B6E0D881B825E703EB69F644DF42FD5C1EEE0E8908026239E25EEEB662FC2367236 95516947332E6B0AC6466E1CC6B983F1E38F13AECAEC33EE94F2B38EB2E202883036EF99 F3B05F2745E7875B8A88E7A9612958C0B30D769E499C498992F12ADD53C258DA61E199CF 693BBD9A5BE8973EE1EEB7D17E73637EEE43BFE1E85FA9A65CC58461DF22E2D5FC18D917 7823B47406E0BA07DB7D7794E5E1BB9BE94451DA2ECE2F081346A2ED89862383A3B5C91B 6A05C367D1F4B8C8426C4839D9063A77AB035EA985CC11BD5057736AC0C5BDD683A26BBA CEA0FAF6E49FC6BC27A1AA28236EFAA63B2077BA0A58E3EE85AD198AB1B47C6158742534 F08D2001E6F68C95702FD5454B0C5CC54E9510C0D6AA56BC42D37C465B94CA7B01EC12E3 7643ED19CD91EEA1E22270EDC660313EF3794711457F1A86C252590A0CF5A6398F467996 4592823CF237A60FD6889428F2AC4684F84FADEADEA4E246F71F3624F390EBC7522CFBAC 121D2F4BCDDDC943E5CEC41D8758BFA6F6BFB97035FD5E01940763E6BEF10D342FE756C5 8A3BD8F27313C6E9ECD812A0BA0C979598F8BC0F8164AA0768A3A49A9D3D7ACDF823B6BA BACE53AF057737188DF4F494E79CAF7C61101B68901877A5121B2327965F6D535B43C585 3F6911594ECE905560C70FEC64005D627148781463A41EAD665FF35DBD11A2FBE83D2240 452AC61F7321F23E1A7067BE64E0422126490A55FE3BDD0757180B4027FE6D4B84E8F7FD 7CFF4AC0029DB4AF2367B0EE1C2F527FC814FB0CE7A55574B988BFA968DAD63449084372 990BDDD7412F2AA7FD6EF84645E896F5AB0D0BECED1A9F717006911EBD504F41F6D2271F 0328CE025384454A6FD97512AD91F88246EA16F7FB3792804AC77843E2F7A6CCDD12C593 FDE6374D81FC883353F876BE49658EFE84A8B5448DEDCBBAA48158A4CCA8E9C1E3B7F012 DEBDA2547DF870C2459850AEDB159656549796369CDDEE4D0C99CAAC75998014ED03D029 706DADD82A38C13ECDCA2AB98A10F42BF1EDBADC950CAD32998762AE5700E2672BFD7A6B 4CBAD22A8FBF318D5698D322F8B782173C2123AAB75414E06313FC40D23D40779999C798 4944BC97C6969F83B1B222BD3271B0EC820BEBDFDEDBAB1328B5C7AFA4D4EFFD15E59AF6 573259BB473E9138CC7BA7A57FF0E55FE939FBF554B9DE3337265994ADA0AB370EE536EA BFD9FF21A614E8381620E4CDCACDD93CBD664A927B5D7253CCC0401CC05A10570A8C30DF ADFA18AE83CC75185DD5989D6DFF375163BBB41643B4FB8A9404D9445405F16E89E52E56 E102925563AA98C07241B9050CBC849BB69B59AAD7E99CFE775A97720E6724027860A24A E0CF24EC0889E8BE57EC691784155689AFD581E51915404CF6317755D426B9749D09D14A A57E67B66B33E37F6911CB2AEC03A65C20805B10E3DE7715A706079369EA464FF632256F CB10D692332947F27C4165D69884732B0EA98E6B4D76F56330CEA9034E551604A4411627 EBF5D8B567B585A0F27EFCE7CBD741614DBB11FEFABC8F3403FC3ABDA6CD7CC6F97F265A 01A84DBDFF032D393529F1E7544A3F9157E5FC102B8B7A10F53BA7C5791F024E394286C9 BC63A6DB0DB75D6DF0AE5502D3B008CBA65CC2CCBB9DEA240E0133196833121668A8B3C3 D2CBE4935135AB81F381D8E6918A8DCC397D8EE54189C39111CB0DA9662E4738ED34D845 C7C87C015DC6EA1CF606EF982A211F294D65692450033C8263EE46105E4394689F7FAB06 37CC8732598B9CA65EDD4E6BB15F797A5833A357D918AA16B46370BE379D4870E3BBBBEE CA30D174108C5142DA94496E2AA8D56E4FCF992CD49AAE57248FDBA18985A5C8EE2A278A 9A9327B22355BB80BF15AA9C43BCC9FB779C09F5228F2C243B6847868CF084B96101363F EB62854E04DED6682175B74F5B3A5632129F675B412A76E9E1EEFAF5C4AD87CF2BD5CCDF 4534EB5503C45DC1E5F32E15D302422F8FB26F55172C5A57F92F2AF9D9F1F8F695A261CD 00E45272D7DD528EF8D35FC2DD5976A918603922966C04B4148708F9F03916CC84BE3534 5B1260832BD27F67CE6E707D277C6AA173A383F0EECF8CBB4613354CB6567D5DFA74E41B 5CA8BE53BB07877DC26E2CB5A964BA973C63960CE8707873DC981F2F1A5ED4C3B084F03E DA31B4ACF2C44AE60B80278DF111ABDA39AA0D41DD63BE22030F2B43C9FF70914AE1E568 AFECB31F93A2D6621FA247C5A3E85C7DB5034FFF7FC459D0F5BC24FBEC72521C01EA14BB 7E8616615FCD154CD6F71CC2B4024050EFC1918A4684D5BEF69FE8A9CA8B736344B9F00A 87938DEE053CE508A963F39DD050DD39236C70C1124802A601C9D0D10D0FB925E6F03882 838B9665C322B2111EE33912634E6569EE803BF2242623A7E404ED99DC30DB384C29525C A398F04BFEA40F907F5AE0115AF3FFD220B815D62F4B0C02456CE35E78955ADB2E3D6EF4 34D48319DBAD3DE8226ACF5BB2D091DF689FB0245EC7CAC2304B29066B36BFE7528E0FC7 749561F148E7941E743914F27F5951A89A43E438AED7B219E6723891A107F6D4389DAF03 465165FCD43BCB6ACE183D33DD98F1C45013A98781F64885D0193FA0F94892258BA9332D C5A770306F9CF0D73BFE212D3D89B8DAE86DE2C2D8C2F9DD17628A1381863F687D33D575 07C6FD533D5D88AB9D3145A00542DEBF8B179EC9A6EBC15C4DC9EC00888C74FA89685868 779D2F68DBE16FDA1F6BD7CCBA75641D8180FF85AC58064E81C678A118436035B0C5788D 36AF24A9CE8FB6B61E56EBEB0DE7873A39829CF63C8659E5A38C3DC85F580AFAF50FBBAB 4E692CC96CF3270256339E128C8F12DD8C6E1FD6B4C0588004D2A37E74502E6B94B9578D CB2823CEB58D88EA033D083F8241B211795BA0BFC7FB24FB019F9057A51C45A8F3973563 4885289F427A6CF82103B874639BC26FA63F6F95647541E90C8F9628568E7B6CF992250B 9DC68136DE5ACEEE5B7000C4CCF676864D0B99BE84D657AAFDAC96ACAFA39FCC41F3E2C3 BBEC5CBECCBC1E28B36AD6076859BC6CCA74B0320C5124E6BF7671DB275DEBF2EF9A7AF9 980BA7B519920451FAFEFEBF2E27C1339FB9E1025A815461828E5CD40B918C64D65B3076 72545B95E5B3CD965FF5F5C9EC8107F71081B68EDC3C2DFC62B8683C05037F8BF0F93AA4 5F8813ACEAEAC139B3228F115C25F8C1B63350EFFFA5B0B7FA235DAA677832B0EC30A317 AF72FAEBD5B8A8DE38E1FBA34340F94B100C512801B60EB0361EE2693366BACA8F73751C 3DA9D74B7EB2E939D40C6CD05D4E33E98084E77BFF43820457B90092D9D0153FCE97CFDE 0D1C843FB10C537F52279312D48CCF330B0F71EAF5508F16B8BB475607ADD7E4178E1FD1 EBCA0A147A560FA8896CFEB97C9D5A2C71A9FCC0D75F6B82CB271658A61BD7D73588E8FE 6F902115BFFC8F473D20E1B237C449BACCE1762B6FA29493E8DFEB2E8CE1C8926D67F8EF A5F09F64DFD78FB25917F56CDDF24B74DE576C7715C8DEB04C48F494AC27F4F0B1B71E84 900AFE3648D0695B1CD5C527295055373FFCB532110BF563ECEEEB6C2B4C68A32885FB91 7D81FB560F96F10610BD593152E614894D529F9A4A08F9A555292AACE0D8E728C7DA8F0A 3FD02895D493F9BF6F4C3CBB3E86A75E453D969593DC1613CDC5D66C98AF5443871DE1EC 278CF564152F2D297CCB64790390EFD8B9A7F5727A5D84358BA3CF479F669223428BAE1C C7DB8D3A5F2710D21E9B275CF57316A7B8C794A65A814DFC44F51AC4A4D32A29FC1A009B F6CB18841059589828D15D90294C0DC40AFAF1F0BD8EC18A313CBBCF36165402364D2C02 583A08E07A4C81680398A8D87E3C313539C83C5C63085B2A7B2BC90D72A7009BB6BFC420 2009D1AA773EDEC5D6C34029224176EFF4D2771F093728EA78167B9D3770DCC5A8AAE104 2EBEDC8A4A980F296B55FEC004F1BC8C0BF7323C06E94CDC54C6047C0C7D8D1C76FC6022 3FC2743A1A148A12A396EB211A326DB3747F9BA0D5F24D2795D3F29B89F3BD68DD2EA58B 6F8A2BAAC25E07EF9A2A3BAF65330B0650BA02A0A6D199E5E139EEB9BBD3C0486BD21C34 40F8FDAB0489899D5E441E820FB546BF63C8725BFB19D503D3CD786233AC3CEAC47C6B05 0E8431169B917023E26DCE9FEA9D32265698DC8CFA65E4915DFEA40513577C7A9E41CBF3 57E2F96DD8B0AD64D2EFFF83269622910895A2062AE2D4F2492A667462799916B44EC210 E7893BCBBE18D9A9E459E556DA8C6E81C25F4CC3250B7124CB5676CCF339BC68CED61D2F 0853E61C6B262F42D6551219F711505D74A5B11B05B223905F205A98A6FE648A5A150898 CA0B9E6AA1DC4CFF1A0D89CECF49D176061F4099EDD6536E7BFF0C10ADF045E05ED1FF26 92E195FD6671FE6DA0DEFEA37EBF04A74A77541EDF6BE774A3DF5CBB9730488A00FC09AA 6FE3C1BAFFC08C1521659FA7C02C18B5FA094ED54639F121144C3B43928B085B4359BECE 2F6E2310AFFADB074901776CD9D8CA5E9E71CAB7D5A162C3887A0CEEEF9AE156710396BB FCFBAC9CA167284EC608D27587E1C5A6B1DCEE1D731D6BA5300C1749F6BD604ECDCEB8ED CF52B8B3CE9DC198586DC1AE95CDADE40F7FAF5F8FA89219DC88221B7B9C5ECC772EE2FF 21A3A6ECFAA95556BB426A355F3B91F69E2177B9AE8193107626BA75CF9C1C7160464274 A3A5C0E3CB2BE09FBF3DEBA0FA490CCF72FFA01BE8A2B6EA4A28E469B309F2B443F0C774 102FBE16A6549862AFE79916D2BBC8143441E43B95BB2767C33FBA5CD3075591B86D5BDD 19899617C3A95D0BB503E1BA1C718BF2324F33889B37B6F6527A4F2A4512E7DE192CA829 008D398496D62FF1F8863C5BF93C600BEEA2C04BBD11FC62A38774992587180E36CA2E7E DFCA8D1E6BD42764748C337662E9FF625A622D7A64E6EE2C1D2DD563274470F35B0D16C3 35F02ED83CE2EDE6EAB31F7347F37CD2F1C0D562EB3181B4F666BAC79C54940857EF452E 9B3D3001F4E42833871DC20C9772F8A9A04D7DA9BB5737C0653D77260D36BE7733E04E4D C8181F1CBB379E38EF9F241A9A00EF5DD0A7C4249C754472836F7E8888E8AF58A461D179 8F308689FF6754838BFFD3E31E86528064000639FF9B92C7F65FAA8CCD3DC8A09C5180E7 6F57B12AA4A7517BBD2D2C1BC6FB81D9ADCEE649C9D177A5FC61F3E13713FC9F6F17B85F C329D24614654707A11BD5B515BF0CE385EACF3E7AA4CE950104D643663371360518D340 876F8438F2A3935ADAFD4EC0D623AFCBD1D564A8D049C31FBE925C170FFD843AFC7B64E9 4AB81AAB17B7E2691E6AB52F56D43890D0244C1B3D3CEE22AB555DEEC72770D79F893A33 20730A0ABCE6A8966D52952BC93BD81D783556E3BE8D8710C7B3E15E7A42964EEF4FBB79 88905BF47C02AF14E1B0A2499899B78AE752B6B4E45CD4AA552BAEE11453AFC999B4943B C9BED21FFBF5E7E549DD82EBE93512357630515DC94D10A03F0A828C17E0FBDFE6CE6F3C A77CB9D797EB9814AD4A9D31D2F33DE37FE4A4D3FBEEBF8EA263E3ACEFA2C0F919332962 FCFBE96E63C2B710EF91C7AFC6793B48CC61A6FC1A1C71A5C281D03163634E8F188F4315 A4E5D2A0419443518F473F51C964D7A54E37E35F3E3A2F3E9EAF5B7B27C54D6BE676BEA8 68F7A8C2803F5F07939280405C84BAFEA43DA5C6DD4C807C379DB0BF2A90AB21FABBCBF4 D4930D229E0066BAB2DDBA75AF3A1525A4BB702DDD84B1418662ED43157B473CC0C886F1 736D6386D842CDD8E13370239EAADD0DEAEB2EC106FB79D786F5B0C5A635947E8E77D9E1 7BED7AE89877D2E2D5495D1A78648149EA6CE588CE3BA12C1E26FD9ACCBD14D6FAE538D1 7BBB49CA8C2FA06CD6838D12A9CBB288BF07361FA419EF2CD6D99A9A43F1F9FFEC970B96 57FB829DD8594EB2DDDBC5B77351DF7ACA92DF3C882E6AB5E2DB8C87A7BB14FE37D933B2 009FCC6D8E3725D29248DE773CEAEA351289AE977FF5F03B29AB7F66CAE834DDA51197E5 898566C5456A32A7C3B77E6E3856745B0C7D7784EB868CBC0D6A367D9EBE5E51BBD82589 9E37FB05AE3CF6BC87CDB470A0E8159F2A90FBBB8EE67C0413C79D053052470B07AE82BD 3C81367B9C93D39EE2747A647B48452A39FAA6C986860B27E5DA3DCF1D909930D36774CC 2BACE79649415D316B482187080B18B2027CF4BAC551C1C9C01D3B63ADA0F5559692B81C E12F8557634F8E496FD3CD4D8BEE174F5690DFAB88A43640146CC2457524FD5F8803C9B3 2DC30AE5CD56CC4C2809BA84ABF1BFBA6908E88575CEE5BBCAB36F5505B13E87681B6DF5 BA43DB373AE0687FE96D3CF3E2F0E282F336FF41BF55D4CA11E7710597EAC0A3D6103EEC 2E2D20420C756EC25326C5421F35DC17D47F8DA8CD1C95A6F16C45BD697F55A30A6DDC16 C19CECAB82A586D8A964658EE446277B4CBA67FA6E65A2C81AE7AB55A7A8EEA43B237922 2280CE1F3F258CD31E16F65C267A3BEE6A5179FC315EE4C1A9602298E9DAA2D03EBB8CDD D0AEA89F37A8FEEEAF072D1314BD085361B5F5AC1DCD4907654799DD3B49A2E49B2BCCF5 107B8D8353E5016FAE78F4C7593616B6D5933AEDE11BBB850371892E71ACE47D0EE3F696 7E20FEAC3BF8D84FFB2259E0F23D50EFA6480BD6BF94791607B913F9A6962B0681DECC86 96BECF813D46389196BE5F606072E2F986FDD21B39837BF13FE9FA6C62DC5B4FCF011229 3B004B99F39988719C03ECB92BBEECA85D6323912D2B0792587D7E2F0F33D4AE01F11C01 1F9E1B7A1AFF37CF03EF826284443EA6494A40F33BE483D3D2D457C5871834200CCA8344 2C1A3E9347AA69C81FC1246F5F4C02258A954954F6EA39B51669D69E80BA569EF816884D 7BAE88139F05A676763BEF7EC8073861689D62BB8CB35853C7E8855FDDF2DDF03197D788 D861A7567D6D49539BE04176A9C1A46A14CB0936F299B0A6EAE71D1B717E2F41CED78C0C 421FBD07F98B3AF6FCE381A329A33DE037797DC8B4E14F94D09E2EA79F0242D2AB853865 BD086DB2A86045850874BBA114CD4C97D07FBF6F37230C69B6916D6155996B498E10036A 1BC02CA9EAA406889BAF4050C3A5BF6FC226F8079F0DE059FEBF700A34A5110DBE5DB558 BA2A16958C186F3906660346AFFCFBD0DEBBA81044431E3A45F096D201DDBAAD5E76F0BA 2861A1C871EDDCDA48589E91F30999174F817F8DB3C9CCB6EEA7374C665E8DDE6C22853B B62210EB80E4251DFA52A94D87E2B4A44795C2AED644AAAE2D4259050266EAEEB560558C E970968F75DC4F4D0593E9C3D9119D97683192A9FD7306C099BE42E7D8A723C2BBBD2A13 5688028991C2280A735015130DC4ED6FC1F0C6721A6383A17D8955D4E29583C59A5136C1 1E7D4B682F27C91CB424DDA137030AA6747BEEAB568E362089E2A7B239D827C775091914 86633A5089A611D66C0200A13A9F2862B7B0041187751D236C203CFDF250ADC4524057DC 92A9B10AB715D08E7BC616381D9699F18907D1C6E640A94044109967EB0AF5FE6D8AC5EC E8CA2DB55C6859781312180B108451094A93FF332A07CBF9F955F8D44FD90CAAF724DC21 9705D410384C21F054B9FACE22B823D6B1780302D844676188EA042943F3471D9D33142F A528511FDE07588EF87456EC955E821ED521D3ED7DEBC92EA0B24CAC2E7EE2F3A345AA69 46000859A241B3AEDEBCA1A574581D32C77DB9C1B1BB18D25DA0F182E1961520B9B8D756 5BB4CC2A098CF090EA072DFEFF12D06387F14034416C926DA69E41C7D74504F0DA715AAC 7CF314E06FB192D8AB439BCA655C4AA2ED4E97946C6B3EFCBBDCF2C45081EA69929FED51 EEE085592C372CD5864807054A7A5C6C2DAECB5A4A1FE9DFB1B8B12BA195930B193FE254 F8D30D769C8BC059FA2829CF8F9B2DEBD2E41360D5CD563F34EFF4FB031634CE3EB84D69 E383ECBB37AC7A46B98E40EE06B6CE9B0DCAF85E7FA763762775B5C1889C7E94419CA79F C707D844E9B74F49C260EDE9BE3AACC0E34C906A1FDFE3F846CFE8C6A8DAAEFE21D4E493 E1EB122F8C589FD0337F80248785D17803C9EDB895557D840BE077652FA683589D0B5E43 37C15F1B5A81BC34B28701FDCF8BBD59185A76D595A0C44DE69B587BB49522B59387DC24 26A449F35902EDA58731DA5C72F066E34F171BAE74AC35D5E79CDBA4F249648F813267F2 25FA496F1454568427D93CEB764B0C2FB0D1AB9968834B5F58CEF33A50422F60C18A8AEE 1DF7BD84251BD7EFE8805590739B43DA0279816997842DAA78EB8208CB08160AC80281CB 2E59580873ADFBE4F6BD20F8D7115ADC89E632A903A96219AC8D52771C6394ADE47B91F9 7B32C6B0EE22A06A08F916FB796880649F8C564D79B697C9D309F76B5ED8A7A62F7FB5F4 C7BCA5E6DB75FC7ADE40533A94CD5292107FE819212B2B8303A3F12D0EAC9D822106CE55 EC60A984A369AD609D1F0B8AD71D10014A24B5A42881F8471BADC5223F7E7CDCBBE487B1 3C7DDCAF2B7877A57B0AA166D9B51E52947B8092AF08F59AD7DA00E56647464D3EA1D7D2 9121E170C733E207511F46DA5FF3572B34ACA1C8AF19B61FCE4D23464CEEB4CE3B850CDF C1F665F724587D0ED881E748C201FCA09961BA269015407798B77DAA6105CC845D4BDFE5 214557B778C1B4B90F6826110AC5F9A7733295417FCAD72749A780EA480234E24B7C6FA2 2F737A71A13764A6019A53845BC8841CED4087302F7CC30018ACA5AB99D4D4842C016F0C 27A67F661D0DD9131569E457A7B2B207B2B01374ABD13082CA08CB2EC9AD69145F46758F C57438BD374CCA2666F058515FDB0D6E2B1E545DDCA38505CCFB05B71640591FEF1B6289 1A31FA2A3029713D0E0D71E86ED64B0808038F5AFB7AE90DE0B3DC5D1EC91F19809FC464 678C5EC38565F5DDE6A1316AB902C69BBDF9CD18A5E6497AC913F0B6AEE13D94236AB241 E399C06FBFC83F3071509D281D09BFB83E0F6F4519A1CD72688D52D0436F6C90742ED8D1 B0712B3E711EBF3B5733D36EFE8F689979E31C38DDB5FDA8552D72F306D3C3137607DF39 EE7001B37D0ED49F86A544FEB759EF9AF0FA72925DD2DBB1C271A8ADBF60A12502A45ADD AE46D335DFB885A92509EF105B87EE7F1F4ACD3F5B3C41FD7C264E64382039FDA7A297A1 EECF902100FA20307E8C05D4302AE7DB3B53641129140D5B42625E7796667D635E5FDA5A 1FF9B2434160F4326394BF6C7EF7760C0B1CF3836CE2934FDC77EB6CC143887DCA485903 F81A5DE74E4212003B36F554E2BD2C989561925278F28444BC0349252AA8B196BF36738F 3103A32D9CD1708B04E9281316CC0007321CC896D70F508055CDAB9A5E5C0E2DD47B7408 6940F6C880A39338C01A08AEB063B3A77A3DA0189C010F539315ECF82C9E1BE8511E1EB1 A679F9EFABBF8A9EF6473A84E956CB57F3FFA2E54C28224AAFD0EA576DC9BD9E22815997 1B7A6109FAC9562498EC2622D79A813B6782AEA2ADEFB4227C01A2C23589E48C5527BED8 68DB319B31AD19FF7C0087A785090E6C5EC91333D1DEF1FE26BF3BB06C33F746C723D987 A9ECDF4A6D0CE2CC66BE2F16B930F8C68D7FC7DBC8302EF72A9A78A0859964E3745E49D6 E995BCA4224685C842B52FF27B1F03481E9A50719BCF572DF5528D311058C1BF3D1E1BA6 BDA4F2666178F957978DF5446DB418BA02DF93FED980DAB2918FBE90D91148F917BF1644 44B1083A088F39CC6C920605A70C1C17502DD2D63529D238F92FE155DBF0C8AB4F17A20D 17A5A2BA1106F0515D2876538AE9A470E696A048E4B7A2A47E269837AC19AAD616E8BDE2 3B9EE5AA1480A841351CF254369CB7AF494C746B012739EAD3B784E59EFC893F2D5EE714 57AF87ACBB508D9A3F8B15B417A2B83CC7F21821ADEDBB67E231090A8EBC4FC102A026A4 832B45DC33B0C64F344B9FFE4DBEBDB321B3562C50AB0A0A35F31A25D13884399E269359 047B097E065835D45D569866FEF1A60801804C0D19BCA04692B2B621126179BCF7F949C6 BEA97D385B8D420C42CFC1EBBEDE89060AF7AC8388D7CAC1538D5EE71DE169A334FBC394 3B3A0C9261CE95DA78153F5799F706DF57308C0FDE58C6DB2CE9F6A38B87B8869158E086 F83E43786E88ED1180A18431135EAD84D23A49576EAB06BACB7EA6D3009858AC00AA0C58 A4BF66E75BABDE609FC0D1E3FECDE8468A15498C073BD160AE1FFE5FF90CC5718D2C4115 1CF5744DDDA11083A37557C19D478AD51AB04C0B48034F129D48C9CCAB8208E3FB0C0070 38F0281BECEA3BC0AFA51D14CB66ED0C5DB89CBB579EFDCB44199BEEDA357C1DC09032AC 6D992AE2A54447EF0F253B3A2AD0598CA86D7CE030DB485D0A7817F2656E05C3114D8892 C075C0EB6DD5676884B2CA19EB8D6B30F38E1159FD609C5DFDEA8CC9781FCF853EDF0D80 B256A7FBF58AC90F404355E5FFAF2DC70ECB675ACC9CC853467CDA0081956B4873EA8F94 4E1F0DFE59FAE5338B0FBB548154EBF42A18370B3E4225DD52D73FA5D32B7477862BE2A7 9E2278D61894716FACF14BA2FB4C360CB974236CA8AA2210F22B550B918A06C9A23332BD 42901D5297A12A86F91D3236BF0B1F36B94CF33B0286B55AB9C6280E2C89CA604BAB9244 F35619C8D75A6510D5323EB7433B804990D49657509140642E70863D68D11A92A96916C1 07646D39AB2EA6891EF12F2FC935E2380C40A0D5DF63796A1FF28B7B89252E786DCD6E9B B6D420B03F01C7E1E2F3C3535C9D51C355EDB57AF6F4925E03017C6A9F2DDB81612D28A5 180EF6C75C971A86349C36F7E1F4FF7BE36363E23AE210EEF8E4CE59E41EB67A0992BF6D 80A02DE68999EE770B92A4083E495668A354DD73D1D580DBAF7268D67B2E967C4AC8FD1C 75E1D5340DA549D25C727CF1B84DE470F5F4E9E86FC9FC6FF0B2AC65D27AFC51F2DD66D9 A994B739AD8E7BD8DC29C981923138F6D0D5C7F57B7E63EAB113C36E66C270894E5D3D2C 77306664454DE1F8D050E7D111A33427E2D9CCE647F2EC7B821D8472CA9E43FB16859A40 7B12D219FD73551A26BFB9522EFC9A9D9C4C23D84BA932673585100E6D4FDF0D20001376 9FFB913FC76071D73D1292EA4C82B5CD7FC0A571442F0A65CCBA23D98A52E01BC20AA2A7 AD4698DCFFCD7217008BC48FDBCD6E0F9666A2ADAF61E9ECBE8FC67659F77E61DC1714B2 2E0575E13BE98903D2EB3CC275A90FCE46FC01B32F82747A7A65F3B7FCE6AF6E691A9104 B374B4EB093A59C305460FCA0212A4791B9BE1716E8B92212B7CC351A2765450249C54B0 B3121A5E240402AAEDAEE02979E162BC2E476773E69E2BBC7794193B6970421D5425FC8C FD098D36A9E3515DDAB0A03EF7FAE8D2C6FF53610E3E26F105D5C6CEB961DBFDCD80A356 8E62231D36BD7FBDBDCD7DFEF360A758832243643E326262608819C0E705346A21E7797F D98D0498110AFCD2F747BCE5E387000CBB858709BC9FBBC0AAC67BEC151B4218A59FC36A 4A48A41CF4646A223F5E5581EC0AC459D4BF269120989901F1A41F42A2B4E1A033819B24 5DF6796CB4FCBAF1330098609085C4AB403CE848CD16F3DB74BA16C171B96078E3AECA6E 6BF3F1DC61442BAEBC52BD0C2FCFCAA4025C27A8C546D41E3973ACEDE79570B4378DEAE7 C25A29D439BAE43E7DD8543BF0E67BAFDB7A7A82ACB3BDF177C1A67AEBE749C1273D67E5 74B8FD13B9529B50CB27AE85687D1EF0F05E419BA17FCC941B59C48B1F15D020A3C0940E C14C370236FF0F043452D0CE771488126E00E79A49B2B875BD57968F0D2919D0E0EB5777 89550DF33992CA2CB36B6C121323A98FD13813FE881ECAE04513FA55743C43897D267E63 D8BB55B3B7A8192828C09F680CB303C8A20CF093147D8C8625AFA704DF029D879E7C53D9 ABF2BD16D3541435D60F502F4E6CC3707B9059B2F9B2EEFC1933B7DD423D33AFDF749587 78AE4B5281CED0D4FC6121D102D824BF7FFA03641A70798D575DB0AC4AF79057ED62B462 F8EF8921F61FFB717C2FEB81DE9FDB333F24927117E94A16DAEA552F3261A892CDC450B4 388BE0B5DA74AA1C8A782FE219173AE41260EB66B2D3D18300DFAC50299100ED70CB7806 AF56D0EAAC92C54769CE751C853EFC9F9E3790B9ECB3203D710C0481626FF4DC94D62845 29B74B278A65DF211F9705278A1F377075D424D3650D1EF0A334E88DC391CE84C6B5FFEA 2CB434A4E89D573BD359EA9E753C2EFFAF2EDC61BCED28816BE0DB57D66B13595ED47A7C 4FB2B5BFAC36D4C1621F3891CCB2D6E0AEC0458F84A69203B7B1F3A3A33561B8FA22FA39 260070E9AC7A2664F2D4970ADF79AD335B8E15794F31ED2E5B64B1A21E37D26EFA657B17 63C2DE20E2756C77252BA52431D8060FDAFC6F086A1943118FEA403676926BDF6BE61F21 EAD92AAA2A8C7CD95582FD93875E374692508F2086A85511988AD436DB9E2AE6B0FD5787 3C86593B611F16246756F7F3C4E2902BCA8669B8F22700CDF724B169B310D45D8B39573D 686987556F0489ADD00B2F0268CBE447B4E15E72286CBD33611F827F910EB9FA743FACFD B242EAFBD263D50E9DAFA9D8612C690737C65427D74B1F8F42BEBE26ECD12385F3792A42 41CE23345EA7204467B6781339A7E93633777AFF8BF7AB9B92A4E9EC9B3AC91FF75344D0 0D019FFDA96F92896E23FBCB0A8346C9B42554FCE0C5B88715CCAD1717ADD84DF239ECE3 A0B7C8818C42EA16D76BAE7919FCCC8AF3E2BC77F691BBB0AEA0C032CC715487827B8966 4573FFB622583EB1E6DA4B39A2D21244AE9B122AF89E62F6B4F9B1E6FF4D8E64FF43A966 749116FE9AD3A685BE298119FC18707AF9071C8B5D33033393B0809A8B0982C7F7D57773 C6B3960F1259BCD7002D09A16DA67C7FC62C3F508BF31DEABE675217F4B07425C5B9F500 8718CEB3764F9EFACEE4F31C27F9B8F60CD9A358772A023B9B1A51DAE751C44D6A51298E 061A8D8D9C4CC51ABFA875D000CF313F8966711B7A528152634F998B1B5FFE36027E3D59 9AE2897C9A81582174B9D7B6D54275FFBFE27B3697D922A290CBB6167282EB04067B12CC 8B050D4CA78D6B40F84FCD5B7E9DAE42A3A90922BEF78729091E656841C660808C0F0493 4A56A7C5B31D477DB5160B1D75E43589FF867D57F8EDEB5C29D560317870AEF7E6E6F6DA 9276BAD320CB2D2914B724F15B53528E264EE07422C73A42222EB407A140F25658630D67 D4A13455CDB63FE9FFA04321B7937AD03D6763A0C9DE4DF5F34E97E87D6327A216B361A5 984AC46EACBBDD4644381CF9A6DEF32620A0ECAC911C5141C6CB27099FBD15056A036EF8 3F929B4B12E5AE4D4350EA1B58D0E38429D876402300A92E706C00F34488769E7F4373F3 09F5796EE6AEB8F7C64560B5E9EC8590BD08D4E20138C9A574122EF15FBE387A66F9763F 6376EAD2001F149AA1033769781C6E629F1832FCFB9724AB5910228027126B5FB76269F7 5535E2ED7D85C2556600006D2927197F8DA37B67C75BCE8A320FF767E788331A8895A437 14132BDCD39B3AA9FEAAF88AB9ABC8B3909D018E9D6E6C464D67F5ED22C788524B990970 65B3242872C987C640026E311837129202CBEB935748D74DBC3E8FB71905129CB2A1C3B1 8929C55675EBEFDB2E7629E16A8400224F8C7894081079D66DB9E550A561BA94309C0507 10D3CEFEFBE66002375019CCAE8904454F394D544E39FCA68F4F8A31FE23D5ABC0EDA35D 5962FFB85E0F2895D241E2CB7A56C494C795ECA9D5963DEA39352D76A6424B19AC420D7F F2611F2F568A1908D21E699D5CCAB5EF7D693B05A63C5FFE88CB52A0FFFD1DE77F6AD86A 1A08BDE1EF0E0DFA804A4D3BFA527865E9826A15987110FF2647D3C06A1108A65B227E30 3994657613FD6D52DB7E08136ACD4D8B5DB9DF2343FC56228A968ADADDC28798ABD70170 D4FDD8E0CCA121E26C7A6972CD0F2302BC8F48D749818B2F64D8D881B508954BDDF0C690 9030A7B1C649E4E472A0B49FAB324C89293318774B35B8B49F2B12C03A73485A1F487F7C A75A78DFA9B5AFE05DB9C716F4083851822C8F2486AA3E03B0788B64F7E22A46F6CA80AF 6DD0D6D8C09807A0D200C76B7190E1D0EAFD29F9CDD21076611811D8C51625F2ADF037E2 2A6D421B0C47C584F76CA28FB54906BBD445EDE95F7900FC3C344494B15F7C383B24EE6A 7ACB5C34817FC2817BBBA36A0C199819169ECC1B763BD504E0D50AA376232B493300E73E C0AB1D36790464B0588782836F3B6912393DCB3B1BE20909FCDCAF052E06480E2D058109 E1985DDF653EFE3A160A81461CFAE41FD33177AD14EC7D83E795A9C6567A129A29EA9E20 410C89EE918C17046454CED1367E50B0BED37879F190F60C34973E3B7CED31832917ECA3 F11B89DDCB7AC20FAA9C36E3E8836D9B44A808F7AAA00556CE3D3913A59D8C241C5CC776 07BA559F9F2DF6EB3AC4DD88D815088E4264524EE3B0A1AC7DF8B6008ACD172DC9A509FA 89F728194610633057F534B9599DDFA62FDD45F24A893E579E3ED3EB985B70B3922E5D71 B7004802F9817C27496B88B7E6B89F1E42ED98FE05F8C071736C05E696E242DA8FF7285A 7B10FD936411EFA4C6105782E3F98CB63278BF4A434EADF236CBC573CAE2515C0ACC23C0 700CE27E213D24A3A5C258E88E4A1E9A5674E57C55D1D12F81CD66D4B2871D0D030D9EAD 87384721A0C118FE869A4672F009ED1E235D7188974C0067D69B668684201675CD585198 4378985CA46ED8B4109901287D46873236A195AB55A9F5F36893F6BEF30E85F8151C7338 58D4976F94322326CB4A39340ED8BC018CCC6DF01F4A3154DE13C48B05D30F33DDE126C6 90830C4A5B572C46DC0645182F4E7F9F59A7126CAFA62A2B7637ADF88969B528EF3E35F1 884463F4A7E202088E182EAEC0F9B2582F3616E33BF34EC233A6BB172A403E31F5E55600 253312F4F6DB66EB758C1CCEE44C8BE09474D9F60BC23666A8B91919D5481092F88DC473 21FF4B974F24F71E3555D34AC5195AADE9A95D9E90974E44EF30B96403A7AE914AE37212 7F3F6B9E974605B232D946B133468D0E68CC890D548274920C8F736DCE63971042C81D3F F0DE8B916CFB220305C0F693B347722CF6C100D19D5F4A88499E2A209ADBC8D7021566C9 87DFA4EFB8D5366DA7B3DDFE2FCE4FF5E0FF230BA591FF4AF3B8AFAAC2578F10EAC46F12 27D8F07F193DA081E52635D1234A01E85C33F3829F70C4C5EA0DC1921B19AF7DB0D37737 4AB66CF9C1AD118693E29B9625706D599F1E42624E4883D3B234C2A667BF68A6A417B6E7 073F243173C9FF6A560FF3D9A9F114E5A6A5E14A2CF4142DD2728CB10986962EF2C9AFE8 DFFFF85119453B3A2C404649BB7EDF84EA5B7E949BA232E2046DBFA99714A54D89C1E73C 0989C981F626FD7CEFFDD17B0FC2C1A56AA0335FCC297170911829CBF5EB31750936FEBD 940099D4506D288930BD8C82684EA625F773EB6F5B147C4975E9704F370351DF00AEA902 1316305709502049D3CBF5A5A0B250F6410E9DE965E492DF9CBDFAEA6A04A36596971F05 1909364166E1BC3F1D8F767D464BAD7452A6965CD36834E78855B8DD39C8834EE9B29B88 5FA0FEA1DFF807FC5C8D6B390595792C6A3553CADEFCF49CE05C9EE57BF5EAC041BEF75C AF35ED5EC4B10793308D9547C774D1238710B4A4D55894A1A975730366B315BF020007B8 195E68950DE77E5110573A79EF91345F219E4FF627E73D8190A95DE05880208E8A31CD46 508F25FD1C0D510A387A31AC2FED60783BC66FFA53CFB5E4C8DFE287ABBB52C85D0F4EB9 9B5DAE42AC22330C2C7EE343F35E223CBEF80D9E0FDE5F10520816BAF38E3BB1583C962C A7EDAAD0EAF4D38D658FAD0EB4ECC50D008DD0AE179C937B4BC718C3ED648F3C9CED2351 D081B880E03E0F0DAD950A57A532C52FC3D4CDB9498A1D72F00BF279BD1FFDDD085C4B62 FE02F078FA720A0BB25D6792362F4925581DCD1C155282FCBDE3B5E083EFB75385C7696F CD709992D94DAB1BF8CDD21B578C71F17C94B71258F731882FC663B1C296CC18DD2F931E 05D07292B1DA00E08AFCBC27AFFFF14D0F1E5BB910A1925DA246D133C65E083AAFDF4482 5D6EEE71E3AF34FC0F77AE1C0D643DE3191209BAF8D075638214254472B46E171B9803B2 1292DBFBBCBAD20BB5A994D88E5BEE22631C1E592E87B39336FC775ECFC1512DBC714A89 C6CDDF9EB4DF8AC6B9708B8653C7FECC6BA77A27E9A4B02007D1F2D05330C90A2F0BFD92 234A60797493CD8F2389B829AC09E27D4772AE0E29D5293A556B3A3A2749412EC6409267 CBF6C5E308C5596CD8DAA5A8E397ED681A64395ACE4A34B20C6EC5CE232C12ABEE52112B 1FB801080A72AEC0033039C901CE542C6ACEA0A38A59C85976C41FEE03F86DB54524AC41 86D184689899121BD12F5EDB30E868F748C3AD36E87EC2DF7ED364DEAC7722967A6271E0 55D5B48C40363EA115C3556E37AFA2360577B9B29163616F5F3CB3AF138BE49A0415717D FDA4E0C64C0CB74F2267318D4A89B5D99E8623019E26DEEFD9DC3182C85370A5E28F7D3F 2BC5126626838E9E5AEEDFF6619E93D007009B538FB8790CB44BEBE4B567F2AF6C737164 28984F4E7072D0852BA8A2A1C875F101A9869F0234E2BE07A8F99E81E08C0505328818A2 05D6B93907E87CEDAB8117458CD561744B2ABF2CDF885B501D792700167C08B51280884F 21CF28219D4763BD931A1B39FF668A38C2D5D41C3840913487E2FC3B255DBB98784CDA31 C56940DC382E5DF72C4762E70F7F33736E7E8FE2F84E3A3FD3BA9D2941456827CA701536 6B38CF6AD3E532D065D13F0E4AB3E73F779B7BA93442AC7D9279B941FBAF03A65026A209 EE8331738A6042BD33CB0EFD2FB1A37B1F71A279F3749137BC6E182A049E8626D5431C45 00A8FF43EE57D1830DBCADB5BCD8E4557EB3D9CDCF0AC8AD83AC34B482E6FD9474CE7DC3 2CB2B980E8B7B41EA5BE186FFE0CA784FDEA7F5C7984731FE70DB669C4AC4099672C5375 4020ACB95F22C31A993FD24885C1B400E18BA8CE85B3D1E2165689AE8E161669892A219E A1905D4975CE86BF903D3517010DABA5BE0B5F6D9F276FBE8EAB20927FB26DA3EE6560A6 87940ACB536729C2F0B02F9D0F4CAE5C0FFB098F386FCB14CF47D1A6C8F1E34369F5F252 F5931CEE86B5CABEDF2E5CD9732852AB08099359351C59C626C2AAE931E49B2B391D9BA7 A38A23BE9880205D1E9A7A83B1ECB9CBE34C2EB442DD9B4BCE3461C132CDA6A176AAB392 98359F5BCAF62A84045ADD8CE545555118647136B7C690681132C2095FE429F910DD6511 E6C18108D88001E261290B60F9F9816B8CD3CEB3C59C92C6DD234182FA314B3BFCF332B3 73DEFA5643EABED93475AEFCC9AEDF21D040CC232CC81F99EFCD4FBDCEC1739DA372B635 327779D3831C83236E8C753B98AE45BF24BC820EE0648F9C35DFD758E33F83A5BE7BD54D FFB61330C4200810A6043959498EE2A3305392AA90EEA376FBD4FE0CF843BB72978EB97F 2AB7EB5BB97782794175D13858B70EB0E4959DD61004D2663BAA7FCAFF939844583972D0 8B4F8A6A621F44FF41B5FC94BC16AEC580FF4AF4D4A94B3C26E262CF75BB81DA09F23690 F441F2743703CBF83D494B1E13F4D2BF97EBCF70086E23046852BFE0A1CDFADD868C0273 B193C2E4AB621524AE71596ACC4A9463EE0A1C9AADF9B337F7B311A4135134C3CC4A97BD C41869FB0751828A9C4ED511D45355D3D7AD67019A9A41B6D5BBB49FECBEFBF5C0E423A4 479D7CB627B5085B51612469051720822EBA4841E6AE98E2592976AAFF22090A402AE0EF 0D4217B62F3F97CD0B5866206C2F4EF83CA3C68960E4D2ACB787280B2709897D9E1F8E9B 1CA55A850AAA022A5D5DA0488C600221E65853DF699E133E020142873AA8493142943075 4516349CA81F2EF984F097A5B171F031B97AA15440E0E944F57E9FDF6FF6BC97FF60B0B5 871404D0C84FCEA20DAE175C40D69E64895B51F603E7AA6266A9A930FE17ABD4F22B4E82 363109E0EF8B38204F01EF87288E30E75A4BF976C306874B7AA5E7E099C0814EC6B125B0 6838034BBD580DB97C26BE56E8D4954C388EA8E6EB6B38CBD0CEC05D425EF9A1A350129C 60F502C99EC21901050C3AFC9F7F85F277B7AB8C5C8DFBA255A079540EF651A3E6E60F80 075812BD9056D3D8D6CA47974A3428042A6167B61622118DE63E5A06C648D1717AEB3EA7 B781609202D937F3F30F2311933A7D3ACBAD79AD897EE522AEBC6509DC214FC0FE08C394 91A31E4053DEA48217E0B69034ABDEF92C532A2F6D388A1635C1E088852FA5AF730E5C38 81F9D04B47E00E182737D8116AC039473A0D5C52F9E57E4D965485BD351B0AA2EB95BCA1 E7F92315B2D41B7270656A6C13394A3762A5D5596A94C634492D26D46988C37FEE684DFE F2277826B35528154F74156B7F2EF1D1BB11C05B6AB44D698729014678D1F35DAB51DB22 1488F1A5A7811DA7244BE0A2DC3EA56099DDA7E4969F76508FADD4692A92314F7FBBECB9 EEC74C82B85492D1D564AACB97088BFAB87F2CA98EE1CC0183D81B0BAF9533FFDBAE4268 8025BA2F1539ABC24F13AB5773D6D282A1C82C34B6218308E5E492E2718D704350FB3750 7146DABB12D6F2A798F47CD3734955E492C6EE86B9F6AA748A8072F0F7C89733ECFF6149 1764BC5D00A5780EED0BA58734CAE10DB8D7B8F9B99A4FC52E285FD9E140B88A8D84AE77 62A2606011113AB99896DF5401DF97F002133BB1D15989C976C462818DAC945BD6600D6C 5FDFC48E9D53E0BB5730C11E28FDA6673DDC2F9B5A07B8DE01856381C4E76E99FEC78B43 12C63CEEB1EC5E2E886DBCA7C7003A3E52257450BCC5E0BDAADAB142548F9FB2885952CD F7BAFB666C06F3F3F9C419F9A34B3C5E84D46C3FE4FB0ABC33C7390D7DFF77227AA54A61 3603BD16838EEE46E720081B4EDF0620F99EEF9A5C7271D638339C995D0827FC07F07B2A 6706B1EB2CCE8C8DECE1F1E01D91944B989167C5C87FB194007F79A2C9EDD8CCC1CB49AD 8805C0F901846C01E0CF9765D435A73ADF6AEB98BEA723CC47ADA9FB72F1899E4405C7AC 89B22916C700AE2528133CD5ACEB5198044A73ECF22C78D03A2563EA05A0ACEBA9E9FE3F A9D4E3A3C29D78D8E08C787B84F7551FEF00992A8A0455E96D6F8727F21B8071302AC038 3B6E9D3D9C896D3AFC44B62DF229B529D150D02465447C763E1CC1E9CD6F3252CDFABD9E 829D74A450BFE4146CD58DAF0C312B53A9E543675384867FAF57A419168F62BC2FC512A5 DE7E7DA0237646BF29DA545A0AF438650F10EE831B0CD950F7748AC57E3BBC8B0DDFA386 B19C2BEB761F02FBD42178E34A6D1839996C1EAA68C685444F7BCA65BAFAB74BB49D079C 9CBAD9A2F346B87BE65AE4E10E99D41872CFFD3B56739365CE23D1E3A2A984779B97ADC6 6B3AE44995ED81B6DFAB299E10FC4ABBB0501CA6E5058C56F66BE658BA96AF52624A2FBA 24B0B986F22C850798179AAB9FBE4CDEC61F07F6CEF0A7300A327A902912D305FE4FBA2D CF7F295573227D040C36BDF8380CCCB2DDE27159AF9B4522009E932ED61EE2DEA6DF83E1 FF1DF8884803C7AAC40A50AA938BE2B5E1DDDD0A05F4038FBE05675A20A7C7F5BA9C88DC 53FA285CF254B1FFB03AB2DA06F9F25F7E629B2B06781A7320DF95FE15EAA9EED78C8A7E CA340037746438370171099C8F885D4A4D2AB4577FE10F2777432A368ACBEF5887FD5094 38443AE25EB94598633DDBA8A222BEF6624C7932C6FE1972F1267AA269B313D36DB50A6C DE03222DF3CA7A8AA48ABD2EEBCE6AB0A7BAC7C6965AB872877A373EF33BD30278AD192C 584E0415F447C0B2964DBAE49045FC263F45CEC8D75DBC9181BE40EA787B4EDEB7F57301 E3BEB4223B08665ED22AE3CDA0370AE6AA584BF18CAE6C7E5F46A3B7FFAA74B961B92BAE B35FA5C7B6C163B15949457A1F8E51A13AD2C572F31348595285B35CCBA32FDA7D482793 70B72D6C8619EBF76D811A5378F899DEF2EA8A375F6D96F9C0E25C46A2E31B2ECC7F9F40 F61535623BBA8B36D0F4B4E892A87CBCFADD234B25B8A70F3FBAC9BB8741A331085C17AD 04BCBEFB9FD3E5CB29BA014B7115CA6B8A4A41354E531C47A9894DDE8A06AECE9FBD5209 9F1BE53FA1C9E6EC7FC50DAEBAFE3AE9383C674C328EFFB71FB8178C6CCB255E80BD7280 504158EEC6CC28483D934C17D5C05390BD34731789B545C78E78C93121481949D30C9C15 D04358E6234185A55D1C13B034F111428A09EA3B1F3160E41A2ABB63562AC01A3B7AB01A CA6D8627FBF2772C79F663C9513273A1498FAB6D9462A11AA9BADF2A19E2E8EADE02B6FF 3B4A68EB54230815A43C0BA91CC7076C0E9B3148C126A801A42C7762AC310B8D75AD22CE AD0B87AA7E118A7D2F31B557AC5250966E14AC6FB569403D7672CC43041EB4629768F631 9AC51710A6DCD797986051BF203D3FAEB2428E39AF38B99893E563779078D0C992C76FCE 2BADB8C78E9EFF5F79429A1C5E48F21B4927BB790B45B7F30C5A61639E9B91C418DE87EE 5096D094B02E28999199F188FD119DEE2A1017C95804ED47B6AA60489AF953B0BE8A0F4A B9DAD51AAE4A343E952EFD089F46C7714BB9048087E15AEABC12B1E0B7E6728A0BE68170 9307539E487D5DC55383C78D169ECDB576F20CC7F1EF4BD35D98499471A2365730A27B51 0D32C60A727B2D2E7FC099D4519FE11826E3359B9F817D41B80B949677D2CC66FAD4D971 E0485DC22F7826A9EC3C3F6C1ACBFA7F96229F4FFA076A5D9086DB1629BFEE5B19C79D5F BBC37DD2A1B3AD3F3F11EE46DC1A2FD340994124A647880A0081E27617C2529082BD3EE4 7D7A2FD2DAFB9ADDF44817A145885FB418EC325EF215815B8E500EAA1F3C21FDA8F175B6 46BB962C3076290B1EA4FB96321DA91FCAE50C1EF2E927DE7BDE37411E82241B18B628C0 882003A8CA0121969ACA4F8ABA83B753D2CC6D906952F87FA32D2B41001CFAA879DD7CF8 73C4EECB0FE57DD514B2316E541A25CFE39369E06E37193A68F0187E54217318ADBDA443 E313BE9BEE5B9FB9298002E99357BD187F09B4A373044C6331888A769574CE9BAF0584C1 93E7A8A4F92AE2104E03CF532C5676A373DDFC4E382677F91A4B03618907379FC4B62DE1 617016AA2056148CD114FE664826D3222C209782893148BA91CF1D6E3E37BBEC0FDA995E 6E20425BE5E5E1DDEC3DC01CF52A49889BCAB74C7312BE483B3FF749EE6A0D56C1E28675 0C637F3E3B8E4B3DCDE12A30269132646F5DD0549A40EFD6B4C0D51B8A4AEEE8482F09B9 0079839353A6CDD90F54F3EB3BE9C2E8CDDEFBF52DF39FA4FA9FC85EA145100F822C7FB2 0CAEE61E22C977E749DD26E8354A7343F7BBD781F108EB65AC5CF46708AC936D1772FDCB 333BD44AA87C066084E7C4E82B03F66E09A0025BCC8C3A15638A41FA3093E34085030363 4ED01CF9FED74B0E19A96CCC8F105ECE971DE7FAF92D7E18667B97E9E226E6FB6B555917 873A750D05CA97B6ED5CCC21631AF0E0A28AD36C7500067339FA13D2C6D72182BF365C34 E6D0B9D118CD7FCAF5185DF82360D1BE304621449EA31D9FBFFD377BC77F1B8B4D53ACF3 64155C94F83788545D2BFA8EE439B1560A57D8A4B6F630403302575AAF2671FF4B181568 A1D2F4AE126E3DFCDBDF82E6365B51278DC70BDF2265DE945350805DE89710C839AD05F8 B63991B2D9572CB451706F80D15C9AAAF908ADC651AA64F5783307CFD6EDF4518D3B1BEA 8B79006FE8747578F3F6D60ED8FD56CD69FB8FD57535F80657793108E9FB8C5C9C5A201A 2EA398DDDAC6A654235EBCAB3841E3DC123F58D41FFD0A47AAD1780092AB77D94BF4E3CE 8855636471C2425D77EC984C3B89B1CF0D211EB9F659456CC4E4CA3E099353F841343986 B77FF677F3B07153A57B2E4EB3A69BF464D21D6C6BFE4839781C575245160D97D9E156BB D535D4B882E0C0221576EEDB6A31E17429AE72918F8F2C597DC582D931FBA65295BFCA47 3A589BD785FA31BD1443697D872801B51379E3031357A3C4120096166864D44A57634427 65D48F360328BB771C893AD7344CC2C4C8E121CADFB4F5D1A8D6E7BCABB98A5DB0BA335D 34677867B949DC6B41FD8DA6B6DC965DFBC7057EC7C2F32C9A87A93F052B31D1C9C5793E B1C4CB97F90EF6EFAEB5DA9911103F66E00430071F204A409577A8E7C00BF30E7E512190 8826CA6B90E949874870B8DBC38A4BD1631B28A4EB050221FC01CE604D78663CBBE61903 80FA3C869C9CA57BBD6A4896B816AC701F837EB4A65963BE53D62F47CEB647C2311B6DBC F05F2A028E1209CEF7A901FFC2D1D506D4A5330510E15E6F894924A1821092B3C8A0018A 35CB4AF0A6E247B14A846511DB5E9D83D19F046EBE92D7623A0AE90C9891CE379FA8ADD0 14734B9ACDE19BDAB8900EE7BA7E411C8AF855668ED872818798324767E4C2F925A0F498 9F7B52946F0681E25C387AC416390BB56C4AE17852D0CB7ECE933A798518B5FF7F937C66 B6E3857804E9466DFA03C2E4F8EA7A07BB961AA8808261B4457A2D0D636A7126B82410B4 498770846C87A78908FB2CCC2E052FC2AB9D14CFD390CB9C97473D7903313DB6F524C52E E5AEFF0E31A7E3A81D17791C22C77678D8CD463A36F501C66AD0CFB57CB80BE65D1578D5 420126CF701C6C4EE7CDB2257F1C32D43AC5FB88DBD90A5C86492D145726E9DCFB9BFBDF 790D09621CD76D97A6DBB5619E7BB0EDA9C2C02FAF30D91B4BF833F07A74E0A98414F55C 6382C0D0E95C7CEDD87F940A66C6C9F60055EE0233D81D7147EF0E050B9834C21CCBE683 2AE542C4BFCB16B2BB5B981E8FB1B83D3DFF79FC085DC7E4FE5BC3D1C70EED4B0F4057A0 F9FF257A42126813DF366F0458DCA1834577BE9362B48551839376C943BAE784FB6DBC00 35D0BECA07057948119F4049B865A6A1BF4339C90235B494FC922E1EA07A1A3C78787F71 D22A76859BBB94F9769F6590FADC542256C360788C86DC282464C7355129EB8DC3AB637C 19A184288115B69C115764F991004B3ABFAA853661B3C16C59F1C469B9D4433DE3E7FE8E 699F746CF08693F6CD83EC6A3E2C55FACFA3834F93D19EE5E1F7A5C2532E885101CFA1D8 1C3F35EB2DE320DC85935B9F6440A58B560353C5E139FD4B30DFF1A9D1EAC9D1A2CFB86B EA2C6830EF96FB069CA1E4DE621F9B29E80EE9D75ED48569EC8ED1EC0411A83318B4E206 696F1738210D4D2ECEFE9FC52EEC111B5271F6B681B104C5DE064AA0F6035ACA8B20BCFF B66263E8C429E8AA2E6E7249E5946CD9D24E2C18C01AD02F183CC965F93E979606EA5B93 DB2F61A0D908B18CACE8ACB3A60758EA1803CA654590797DB9D7D675086E2A71EE53E388 60AB76A8747ADFE9973E1EC365DC717A87C3DE59709E64FC4924E74235AA04CB6D63570B BAF0C48FC4BF63129305EDDB9DCE4A1D53C46BDD7446B1A6753A909593DF2B6E0D8791BA 178AC13426C2453EA116E0DCB8DA0D1E7148193D706BBEE3E58819C240819B6C2EF11D1E 9B1A2454B05B6CDEB8E0189FD7B75E112712A5D98536FF68F1A5B6EFD9E9BB557E279F54 A9A0F5B0C4ACA7B62DD0F59F50D071185EB7DFD78A0B52732FFF51E63C8BAB2381EBEA43 6CE8EC9698425761692E2DF2D23F2B832F9EF2C3823BF3F42333C2B4182F4D6FA95C54AE 5B2EBC05FD5F400C9873C47657A99738441E70C9A89C5612818E28BE5EBB1EEA4F6EEC5F 0CA5A262142116E413BF5CF2C613A8AA4921270B4E3BEAEECB1ABD6D78E2D31608406417 69536E9D3712FB9E8845D8A58B9506F6A6511C3F55DECDB7B0F482A726745B843FF3AE2F E3C79EF78D9C313F110783C4C58C1353EF149D6DA8DC593D17A943D89EB8E1776640FD7F D184E280D2E0A1F0FD72CF254DFC183250581B4EF595354A38E4DB36351F6785632F605C 544EE9340CA9F24361004989A544490138679043386A06089F5131FB9F8E5CC10108838A 05A4F5E559AA703EE972A2E4FBB1824294B2CDE68AD98C7FABD0466E73BE1540ACC6118C 44DD1488FCFC63FF6F67C6B0792F07708529CEA7F9B02D063CF71A53CDC193A3CE98486C D5BB0E95EEF34AE0999F5CE0FC3FF36BFD61F1FAF4D9FD227568F9E462FCDD250F94A916 57360E6C90F7E4E33A7917A7997F1FE81378B19ED6091799F72E960AF9B08B37D0F0F0F6 2355CA30071EE8AE1A4115A606ADB8916DDC1A806181CB4A550207DAAB59FCE8BB265999 7154A78D0DBCA58C6D4E73650C9E3A125D01CCDC3BBDBDFCDED53D8DD0DFD86DF166BC66 EAECD30755B98CB62B360FE811CBD113548FA7575E1D3A375B345C1DD407C12D4085B5C2 F0FE1DB94C88F8A215AC5D6B6717F5DB29CB5F30397A07855E120B8F0BC131C480B6B079 CDF2C9F1F9934EA1BE6D5E736F2281E005CEB14A40B30457D010332287A65FD69BCE48FC 2DD9226F82424632A12BF95F51F203E1B8C5831843BD984C1A3BD1B948934FD7E2A4B490 A9C08357AFC1BC0E72334D06240FC77887E72D0DBF7D585D82D5A004BEF57ABDAB08E5E0 B1611FEA903D1B51C211BBB2232A175C3713D0B23EF3B69DF04F12EC71C212F983439806 68FA61367EC50A05E7BAB595524392EAF7554F3966D8CBE8519D83BF438C7E3BD516AB6D 45A3BF1FE19A31BFF7AC2EF6EB3C84AFF286D26CF46DF2A4AA1F2A59183697CEB045F235 C6F11A1442F7C21040AF6A0100E27DCCE5ABFCA3DD2EB5DF358E5971FBF0B67C7F991FE8 25AEE2C715CBE1F9339ABD461A791D1BEB526D1F35E6D1A9C646BA7D3711E22FC85AC5F9 F7160C2A51EC86C342335F3953E08C8756E41D9433BBD5F47D8D64FF5D49D6B94D7FA5B2 03A990D07B1DADC294DA315AC34FD4BB14B8AD774A2F1888A0C89D0303DF316F7A7A2376 39F04EE32F7F6080FA907262A3084067287F19B7FB80BCD89A902181BE45D4D6554EAE67 CACDCEA981BC6847A3F082BF40F991DF87A973FFA9C1568052B1FE62F7AA4296A68B3F10 765AC99D80169F0CC44D9D3BB4EE2F887740C817D8481DC3166EB57441BEEF4E28CF5765 2BF0E7AEF3958AB173095975D8812DB06C926AE1584CCCCC2C391166901BF66F25F959FA 771117BFB5BCC0458CC2AA7C60F25BF3B2DB5C4F52DEDEBAC23A34906CB4573E11626A8E BCF881EFCB5D74CD056AD972A288F8FBDA39176FBC8BE590B22D78E86BBF2BB062313D11 93245AC31B12B975F32FC54909330495C733B99AC7A1E84117538DCAC6C59FB56C8246FA 369073F179F4F3789B343C37884BF603AA235581C0145BCECA3865B25322A7962C9338D7 1E7536BAC833D8A7D12F4E953541E1D4516B8E2BBA0185BCCA0884CD30BE277A31F069F0 EE30AC3965DC89F1A12BCD516F0C4CC10245A225E7B4BDC8944A18088C9AE1DEA4FBD447 E9F8A318CA6049B4D5269DE3F80F161F5F403EF0E63A7209C39AD8EA50998E75C20A5BDB DE628A2284BC7CCA35F96FE5363F0597F174530B4FBC48861C8BCBA08B7DF95161368AB3 FBDB118E4E85F5A8BB877457DB427D52CAAE5B595E322B6C03E75B5CDA5320B060B333C9 AE4224FF83E80129EC333223941C259A3D866DB84996C322B8682F5819EDAD77CB93FCD0 FEB2817FA156F3073E0AC83B1D1A513BFBB92202E7D3FD4918195D1FCD274C572F107B2E 3470775273A7692FB4EBC9BBD19D3BEB9C9750FEF13692F20B722D824B39C32BC3932A19 D79931C0D6BD62EFEFEAF7352DBD295997D6B6C1A9FBE68204A67D6E8B7C9ADED8DF4446 3656BDA2F054D42DAF4002C3A64AF538E5281CE4EA458C8E25E5253522D9C7CAEBA95BC8 2BF3EAEA77EDA7515354E8471D9C61ACCB9F582304FA6E4A4A4559750193CA342525087D 025ED3E42BD67C1AC85346620BCA029BFDC1234BF6A3A1BD71862F4E473C639B9FC0E6CE C99BAFF38D9023806F78F02CFF07FA5C6C7DD108B112D74F03E388F306B8EED81E15941D 58CD93D88745387FEB9DF9808427DF809A334C4020A5CFB8381D3A31AFE1CFAB58A2A587 34CAE125450F8638328065B4BE9F438187D1ED057A41B90706CE73F88A756CBEB9DEC4FC 50E627C07ECDCD1EFD052BD86486DEF4E3D7034DAE6001550CD739611C851870411F3094 BB26F927F1EF7F3A388A0A3088D1A3829518100DCDAE9C95850F9FA30FD9A9BEEF1473EC 6F526C3E380D14CE0A6BAB743F3173EC30C6B5EB6B19ADB758253BEF2D0A0EDCCAD124D9 9D93CF406AE1A60097681CC91AE6010CA815C6BCE2F906FED0EF039A70F7BFD8110A5702 E861001B62AAE87B4EE2A862A77F8CE4684972E5B3367D2C46A37DEEB117E7D3B2023AFC A04E7B5B1C49BE4EE98F6F6790A19173885B1CCF3A1B8BA53C89F20FA4FB01E6900FACC0 98E608C3AFA856B5EA16BD2E10F3BBF6E278231B1C734ED8B2165529B95A987B86A289CE 2DDAEEB3E1B5BCC4647F638B0E8097C20E6BD02ED6325505296FF82916CD2FA6FA377B9B 57D46D577AB2273C8F0B210FB030694B38E3FFE0AD662E2313B50A1D6259D0EDC89F6F84 BF1D03B33475A731A5777F6F70847124BE69F007B87C9BCC615BE43A8AFB8888684804F1 2516A2940D42BD3292960EA4F7725ECE8CA94541D9C7EFEF708D76D3DC85D68F69F7CDE2 6E9D261E251A754FE8BD7063C30E8A36CA939F11FC1890EDDA85B70A326555EEE7B32EC7 1D21369546F2AC794F232CF330EC0966290291B026FB4500AF8D275CBA209C31E37F9FF5 26B0B7F5A52DD043FC83870C6041567A1C2046EB76073A00F48E9427D1D128B9E74C6631 7ED8BED2E2DA44174BD0D917DF3FAC900A8699F11FB6BE77D1B8F2D6914967E28FBFD804 3AB8C92254EBAE7D881EDA03D567058CA34DECB592CE0C77F404BC401891325DF6FF9F22 0804B3609442A34ED8BC0C350B025D347A7853E1A4A2E89A3A65BE622BF491B1985C6EF1 4687A804E5BA74606EEC5744C4C4649E8025BCEE344A325F705F21A581207DB830ECF235 59842099D0819935DC5D7995DC59C2DCAD8035AFFBFA2F42075F107AEBB693D77E2F58CD D2C0607B2677A95B21196CC9577133EC96566E4F9A53D4100720E9983B32891E9F2246BE A6975E2AC366D2804673BA076046C24E33CE4082BCEDC212103A508D98D9B1F44EF15205 29486D15E3DBAA49F7A40AE6E9B82942BF75586ACEBA65971C42EC8AAB29A29BE8DB0A0E 4BD92A5CE4E4B897A36FDE3A8A0DBA07B8D75C421F525F9BB2A9A63DA6751806BFB6C0CD 8B86768652EB5BA0554F2BFB4519E865CC4179F364E63E36D808EF380594E570CA264E14 07CF724E924D164407ED009375DB653FD7E4F93C0FC7038CC0CAC1CC517C355D2B590B3D 73E80CD3929BD2BF8172923388C288DEC47A5724AD9C4AAB420C58A906EAD3616109EA66 5F69086AF4E0F50623C4F210B451BBDDDAB4A7953E6A895202B38B3AC8898FF2881C427F 5D554F291292E594F8E1BA1EC60CFFCF3C532696574B7BB91EB0BB0F491AB23C7CD797A7 C7D05A3353E88BCB9BE06128EC8F0668F69F5AA5796639DE466D3480272AF700C9168F71 FB8DFD2851078E9EAE98977207DA165296690CB456D635D327776DCD4B073BFD339316DE 9811E8361B8F82D0E67F24266ACEFA5C429FFFDC4E9F825E81CF3CBA01700DC543DECA1B 165DFBCFA8EA33B577B4DBEC243BFE9577B33BEA0BC079699EEA02F7A7449DFB16C639D7 7AD5887677AE23DFFD8077AB0335528F884AAA2AAF9D84B6FB54E0D90C4F70DC2006C999 603F0D64A86BBBF3E04725FB0B3539D26E1387DC1757928E228A28185E6DEFDCD241C517 8A2F96637E651D394E8666E41481D662DF4796BB33C7331C4E207D05792F5F32104558BC CD84ED47CA8BC961C8DCA805AD06DBF9732A6AF4979BE84DC6EC73743B28C0BC19CA19A0 0DC71909A4B143F0A62FE007CF37F7C3B591FB0056B389769C90DC570E6E1F08C31F9189 AB1CB8E34558474E79C793E4E8FB9C021AA7B6EC541EB55D4FDFE02D11440F02C5C2D6CD 91AE7259DFF324195DFD8C787049C9C4995DC970D4973ADBB7368031FC80378875749ED6 F998624D8AF2176AC4134A619A2A0754F85180DA3C198FD08DDF9259AE001BBCC2B7264C F9F36DD898FB1A75FE740E16BD7CB55C4F384F0396C416466E6E571BDA48037B2BA1DBDD 4EC295BA000E1D856336413701A089312099E2F34ED5FD51B21A46066E99BF5456BFE794 03B145B7E60944D856DBAB43AA617D58839A4140BA0BB5E1BD3135898365C86527E14FAC 8062C9156EB74F0A28D345277F69235F35C112B9DEB0AAD5DBA55F783537D21DB23A7365 A83EB7CAAE24F0165644DFFB681E0457B4DEB60D7133BDFA189D3750B354CFF2A0FD0CB2 AFA72EE56ABDC4A17EB97B805AD0574A2773A83781F85D5ABA3DFCFBBCD1844272EF32D1 4C1F47EDD3CFB8A00F05CD0D1A786842B71B26A2C6E9DCD1E1EF4D857EA7ABDCD58386B5 76336EE446AD1B9E61000F53E812F00E87994A9E5CA47A8D7E7EF6EA9AB4003D8D6A6913 7733CA6ABCA19B02E942C1D7E099AF8FCB6DD5CF3F702377472D9A8BB0B8A8E39EB88160 DABC9D21566A9720E433DFA0E665B9AEC2A12831E9EEEB86C9B9AC3C6216E103DE39C1BF F09798C7242ED0D327B420D2B9CC17D1848A979872A8A261EA7DA2D2B23C140B07A86D38 1ED69274B31C106904AF120B4BBDDE1244C58DE6B1F1020BFE353D67A452406A77906FB2 E7D416F2C9AA99103FDC0EC6B0456B430685BBA6B3F903A6E11BE15B678027DA949C5E18 862511FA397208B12778F0EE23C60B38E6AC87753CAEDEBBFFB644C7D1BBC5048C28AD9A 99709EAE5FEABE17859A3388B84FD2DE21AE45E8C2AD21D881566BB015F051DC741E64BF DC8B85A84D1064F81A5CBF3B91AEB9FA8011C264A03ACDB8F235AFB38C1B7D4F1B43DCF5 90167B25250FE52FE9159C7F269BC7D282D65D78DEA4531606BEF691C9DEE9BE200F779E 845B6D3FDD44DFD325377CB95A8842D36141A4CD0304E5B6C577D8114DCCE2F7B8059E77 E7AB4953E797AAD6CFF02AD7A61F1811E33295581B0D547D85471B3CDC834028620ADB54 D34EEE0A0A4B6DC4F475B59DE1A984C5B6E7D4617D8E3AFB03B5CAEB81ED002F66F7BA2A 51A81D77E889D483EDC7D424CDAEE12D0C696C6976900666F096C011C21ACA0CC718E7E9 8A238113BC5B286B660D98E442FF91D70CD0C5478F5F0521275B04C966E33F13A2DB1E51 A5A12A3156E1E7FB1CE1F253FEEF4E245FABAC29F7FB9A0ABD7143D5346AE0F335E7CD9A A79C9B732C33E6FD9852AE80D21C3DF8D7E721A50083B77EA660137C75399D9285C50A06 42B9CBF25C0B4C20CE02C272D35DF4DA4120F0E14FB44BC93AF1FD6122F5D63C09987D84 8E9AE85ABDCD8DBEDBA33078FCC33540DD3AF8B7DE41DE7020CD5F0D2884AF7C5E7D5C3F 169D9F7FA42EC36F75BA3DD9B4AD3D134C55E56334F4737335A9BEB907F53DAB94EE7856 EFD146B31522D7352D82D4FF356A1ED8407E407E22888BA13DD0E1CEB1F4474E742F8BBF 352783DD6D94D9661EBFFD9C38CE32E79D167E092A08D2C64C42D0B7AA3A42827EB48FED 125F75F5D520D84B3C24F68A5BCB042A6B32421E75AB5768D4F8946CD709CAF72DA33EF6 8C584BF58A62553B580D304E20FD7E4B6E5F32FA52E162F1A8D0FFB42D550DB81AD5A869 1988EC81A7AF7589709FD13F2579B5D16DB4C6674C55078C20AAD96A43F2D4FF157B45D3 1070A1913B67E0FC63B2DCC276E8851A1E68D35E5D035AE12E82F7196683CF5F9F2245D3 542F0A8E59B9F6F86131C21E60E0B6ADCC764C46273CD2FBA50EFB12B3BFF5E6415A8950 6D3B6294B292F4BEFE8DF33033DB71E9259BC503B84181F3E200A6425E2D5DD47C604422 5D94587CB98B83C4DB768B72B8B06EA92D485C56450744E7EBA687B35F62C899DBFAFADD 9411FE32C2D881985D504474D0687B8824999211DE8EAE13A16F19C0BE8CD0F95EC2FCA5 356A23AA3B41090FF6A4AF35EF1A84BA6B54A671AA96C05E737066BD88CE790100EAF572 A6D603644AE7CCB874F3DC346B7AC6CC617E2185ADABD9138AB8AB28ABDB37AD4D6D18E6 1A7244C8E2C3923ABF071D9CCFA49D7DB66D8CF9CC5BF20AB1C10FD667DFE4916726F81E B0CC6143D3F6D6DB2B8DCFAEAC773BB63FB17A72C573E2145F50910E781564619595E426 F31A4FE485AC706698A8659F6097F125DE1182C6915393FDE3386C811AF907BF95C3AC5D F349F40CF711E3F03ED22D715B40B04065366C94CCE2AB6323751779CDD58D1818E5E822 EC3336CD23778FB40E0A87AE0A2028B3DD66EDF9EA12414A5CCEA8A9680645C96A9ECDD6 A3783A497A11900C825E41091E8240A17EF020C82D5DB35F59DC68F7137601D557C35F9E D349F4DEB23E713B390B87F26D98373C607D33234F0B7ADC5A60FD8B3E995CD11B8B8F20 82C312F3D1F8C8A3E523E7230F3138359CE834B9FC6151F559603EC39DC5D4477ADBD2F3 378009F9813DB32F5998B50ADCDCA39530C951DAA461C0DF30C1DF917A9A2FC60E95E6B8 4881BA49F5AFB2DA0EE7DD10BEB9C0F49F38E20EC9D0AC60C5BCC463690A08DFBBDB2538 073AB5C691CC0EDAC7A69EB941E6851569406692DA69745D991E9E6623C4B061FA2EABAC 8808DBDC75A26279B872CB54A63EFFF6C509E6CA5083C12397CE103CD6E716F10C268C37 317FBC2BD2AE550C5D4E039379619CCD1DBAFCEA7420D425B1C947B3FB88BDA1338D4998 D7F3D6163E9DAA97D93C16BDC549CB001AC3D301365396A3F2ABC8FC44CFAE90FAFA6265 FBAF7A8B9C6F2645287A39FEE5C24D85F0142B429CA47B0D3A7FA23C17050285A8ECA5FF D5E91F951897CA84D3489AAEDAAD0ABE8DE94F7B4A9FA3FE23AF1F83FEAE55534F8A1042 4EA6D866092DBF0619052F926AD9D194AF20935C08CE42028440F224663BF4BA7759EF69 C8990A9D1B320533130117D87F36EED4BBC4607E4ED78861C9C547366B17F44C47012CB4 4381E69EED598C784466C91C566E1A20A1B4EF2B0370F7B1AE9BEDA7956D74E547A9F995 CBC7E77A912384C0D1E325C40B0A6F03B37E5B25684FEB4C3E5D3F80A7D76C2B2D9282A0 6D9DBC05A56D787141001185A3D7AFAF758A7C7BE20CD4CB91813EF55C81E23B61E5864B 3BF31D6BAE83A8DA1B87F3990F56514AB78F2788A94EFBDB825330C5DE77EC0F779EC1BC B2C66FD896545103B36D90B7AA8B40A5B338452DC66BA18DF9609FA0B522BE9DD1742251 7A9E1062927E17B3BA7782F5E41F590FA1BF45402B2A7F7BD7C608FC01F053911756FABC B6D086ABC846532F961D8A8A74776DB06BC76F0207B6A7602EA1D3EA2077368AECE10F1F DA1FE16419C734C74E1C15C5C3E91602CA319C671D1B6F311A0129F9642DF8914FA59999 7209CF89D3276F2FEEEFEA6FB2BE2FFCCBE5E77D41A97D76CA8BD64C874A723D54E0DDB4 5BB30D3C3DEFFBCDBB233B63978F8470D5C9FA30BAF38BEE9AA3EBC86852318298996C04 0091018830FAF5E204D3A6B9A9B557DD0CAD4FED9329556181AC445C3F515C35C84E0A4B 44AEE2E6FF1BD47615604BA935BA73DBACD0A2AB85CBA7D09E9D9B3C5C7D743C3EF2042B 3C7455479200E2370E40541E2593C0CC6CFEE5AF9608B391296235DB46A5FD3EB2FB53F6 81953F5EBFE2D645D886DFC62713A803337E154B4EFB1F3B93BD418035E28C9D35D6CA5D 53CF86A38880B28F81FB765C4820C19114CD2B0ECD64AFE31BAE7F8D50A7EDFEC2CA7907 FC34C8C09239C1E56D7EB5D7FDC17AD1FDCA3F17809DD629805D62DABEB1FD598614E041 9CE0F5D720BB13B3FBCFE8F546C04E67087CFA9641C1D500163B04D1951BB115FEE428D0 626F21671C4C76EE99DAE6B35DBE6971AD0A5D2E8099C3EDFFDC3C7533FDE0DA33BB2C94 A3768FC8844B00D314C44E8D3D1EEF0792CB2C5B5C25E0AF6420AD1A01ECFCCBC45DDD62 A73D6A1CFBC02BBBCE55555CA4D916DD888832ACC59214053EBD9685EB5CC619F3BE916C B3547D995E3BCFC2C03518D62920C0B0BF75D06ED30F668DA95E549CFDB56A31B281CF1C 6DC7D144CD8BFD4FD58A8F954BA02C1BD55120AB0BE1BC306ECF1C1F7DF03A010C10864B 643E1DDAA01669BFE02A57503190CDCF80CF7EB0AE531560F2167801F83422FC7E18FF10 C2B06E76405A2367BCAEF68982E06A785C0701D1D3E77E3C1AF6401E42E3F82B1B4311E9 00D6843854378E5080105DCEC8D2CEE50B3514234F32F61E0E8800FF073873B7076494A2 BE7B5043EAEF4C02CE6D09415516767C08F538FBAB1D0699CB71C1BE8EDB107F5A68C6DB 4EADE53E77986C1DB79E13A0F5C53768853A612294268BF6EF9E0CD2231005652F487F1D C931C527C82A4746B04715DF947DF23FF944FAEAD9A58FB238999A931B04D284C4CA0E3C 2FE49E66FEA7690321539A702C4E3A3772F6069E17C70AB475C5744D3618E5251634A7F0 2CF863387185F1350C980315A1F7460152D020EB71CF7C171B492EF9AA3530CFBCAB82C6 91BD0F77F2B1D72E05D8BE69BD511C38734804431939F08F5F164810B5CEC0FA99674B34 29E91A6D9717D42EA5299C90FF0E9CE0519172B67F7974651D253B5C80BB49B64539F09F 169C238642ED578061222FF802052D12271E8DEEBFBF86B6337447EE2048290A004D2C2D 582ABE5FAC11361F2B2D56DA9F2CE6C2FFDD1B12254604F968BD6BA42C560D772C31E6B4 859A8F74281487B257D6F16D38A5ADEFB5A8E5AB371E5BB89CD5D10EF1FC5FF5C5B530E2 BDE501367E6B8D0FE8AF801E546B9008C58383E9ABA39D26A38AFF4AAFD9E9DDD94C7AB0 938268ACDEDEC13C45F41D2EC1171CAA8CA3EA8EDD9E60F6BFA0D4F70D1E51BA3FDF350F E6AD86F9AB646C5EE022FFA2A1BC869B83EE5BF0FA02C0B7985524F99EB130925F1F51C8 39ED51AA2209A038431D6E7B67383A719679CCCF5CEEE90BF17A4C84B4F6D4C3CEFB5E3D B6FC0FE95632EF532792FA78DC7EC56E0A57C64F6405ED24665D33E8BC5EAC7D4D3C5907 1723EB2544B34B44F8CF1D3C98373457D78223684E78421B8780B4A206881090D7F4D7AB A5E5CA8BC28D67FE6055A5A1AC561604E5AD160161E33CA369184EFAA9D75B75520D9FBD E2A04335EDF95DB9F2EEDCE8D758F2718A48D36D32DB4F8914CD4A45EF621E2F60F76AA9 0CECF908409FE8DA4A1DACA69ACA91F736D184B269CFBD58B5286B4F3FB28A7E6323DD47 B4D81B03D568523082C7DEA6A806A2A6A7F3949477B6F9303FDD4E0FDCF1B6BBF4A3DD13 3CB46E087034699B9A163B7F02C0E151EE41581D655D6E06DF00F321B4CBB79FA78A9C94 C4705664A5F455FD4B84198F3D364E2EB5DF5BDDD0C42A26367507E4A8753FB3C2901D64 8976EBCE56A38E66F9BE9E57CD5EF01FC62A25D93924C1D35CE81DFCBF44F5E0806B8F61 5AF97F87E8E6724049DFF39FDB8C1119154A4890D062995AD455724ABDAE806693C6C43F 0C33CE547277A89169390A21CBE040634E2BC87463E214B43FA124EE25BC849EBAC1655C 0CB4CCD6FFACDD06BDC18D560883B200C8A902AA0D7A91D2BDE9CBBD08FC3732EDC3416C 78DD3CDF1A918C96EB947A3BDA51B7EF6CD168196AF9BE9E78E91D9D816121E81658A365 46D05CFE59338C33D279ADD5B4BE2F2B839202822A4E566119901084D57A39455A307F02 863259A632F544E0670BE08D670B30DBD87A5917264340A653DBACC39C0756ECC42029C4 E447C55D67C871427609257D4872FAF230F26CD91E6A6C1F55BA4DAE016F686D631797AC 2D60DEFA1CF1D718AD69B01AE2BA3E586F208EAB3B39EA2A5B16F423E0AE8780ECCAB8FF 1A253B15CB0169D65C919671AC26DCE9F3ABEC521868CE7DAE5C2D64CDCFACFBF7B52523 3B0B2BD2E2E0FFAD1878B1720B5832F8C0B3D63EFF4D99B9725603B3BDB3E1F91CAFDBFC 03308993E6E36B0E2640B8434135A9FC23A302B9867DBD2C896F89568CE6B7DBE4146C74 606D8015594ECBCBEBCA074236CFCA07BE1FB885EA30F36F376973C83C6ECD74ED6A8CB8 7ABF94C93A8D2EBF8D598A5D7D6DD539FD8F09A6117D11F08F632D7207DBCC38088A66C7 A0F860BEDCB8D5C2092C9EEAD273EA9B57837CE9264B9728CB28336D6B8027487B0DDCA1 7C94809A6A5EF6D4E2C4923ACE16921711296EBDB53F061587486B7A3284D389DFBCEAA0 FB3D7C0B7959BE0477F44D797EC695B762CFA9D212CE44F25EAF44F435966D5C2CC0E932 22CD8E276B4E2762357684E7D9D22B50C77A98A73B7C7704C61D2D672EA2B5C0B3E5F1F5 59426B665585DB777DFE4B58E8A5B2BAA3AE5D92CAD4E256F4B20EBCEA323EFAC0C4708A DAEF960012942583883B064B651B98A4016B49E2A5073D53F1FFF59EF7F10F1F0C8D987B B3CAB58171FE01DCE539F18F26BE376F6B6E3E407928051505D35E5798AC0EA6EC545B7D AC2EA453CF3E209ABAB4526582AA563B8850422DB85522B8A75D9A3F72F92A80FE080652 E597294053EE5E9013B01B938711E642AE8430B42B961F7E32B60A63FDEE0FC287379574 E8861A7036F8C5DFE12F547F07AEF9D6E943DA0E6D428A845F55653E54EFF047C6AB6E23 6B79D3AF231C66903BB74D4A1C73CC4D592D2F99E72D804B4763F2E88C4D1359CB9B39D7 9A9DCCFCC8B86B53794B31B5610C41BC9667C5B69651354E8475CDE081C728E751EEE455 56947DFA332ABEE48EE076CA3D505216A36F43E9BEC296E6CD065FAA70613EBE31B270A2 6E479AEDA04AAA7908901742E0C5BDDF11AC49099CF3D4DE2BA21D5DAE7E6276C908AB73 0EA62C21647695C0A0FD7980AEAA57D6D801DF1B455CC09B539401D5E76CB832463FBEBC F2892B437A7608E47A299A71F9D66CAC64A5754A169541D4DE50017EC4534598A835A2BD 8AB14E863069882ABD8A025D2784B2B52AF1D2657E29FD0F78FD7D080DBFB95696AB90CD B6960585082FABEDE94EF21E8D8E53B53934B96C29834C8E06559EA61774BE36A824F8B6 3DE284E7EA4792FE6D8A6A6DC0415254EC8820E7B8924B87E00148783975AE7BA9C8DAE1 4F12865EC7EEC36DB523AFAC828217EB1E646F3660F42FCC63C37D02ABF6FD061F6E8D0E DBEBE1FEB2AFF76A4D934B8AB441D99B8959B0B47467622523ABD71006B97A8653090928 C1D29F7FDCF743F82763A60562C7C32FBC62A7C34B077A45E4D1A1C73A0E6F74E0E47E2C 35AE929F6BB42774425B10FEBAE1958814CA267AB3C13D9A5CB929120380B1BD8606247A 587906037FDD11C44DE0F311D5479DCAB1B718F39D9B714406C4210042AFB48B118F2857 13A22BE1FE82C96A65C8C85446B1FB5C4F1AB15AA5F3AC19A9D04D3B14231A85282382FB 6F1BF47F3E5706029C66F061FCA49A5557037B0B6618D543C7D0837E3F371D97749A1E9A E6733FCD44D16D31BB43150927845301263DA62EC98490C0678F81A841DB0967FF9C4A0A 5E8B5E20BF4960FFCD529FC490CEFB4E9F5A4CAF95FF0FED1A5F75858DFE172E1633D215 7171165A95FE04BE9EF8BE12B67BCAF8C88809C3949DF9B20155B9A33699B52C31B05493 BC9DB938C25B75DBB7EFD651112049666229910A2BA5FDF4FFFF0996975C39056AC5A4BA B8B005FC56D8C49DEC7213CEAB50176E864B7FE35C3C40D1B7F6603DEEC90A7E368E4515 A5F973FC9437F75534C0F0FB15DFFB7ED186F04EAEC24A394F9AF665B991541280CF67E3 D566624DA9816B606CC1570D8A8A90CF72C0C63BA94D70A431419722E09D4CDB8B62335A ED6E3A4BF58E13C68E7E2605E8A90C8DFBB1465E16E42FD42B54FC244DE5E8E76BD1AA9D BBC2832148F54CBA9725FF04B4246131990E1957B6F45D57368550327D04C111693337D6 5B0CD7E35AFF81EA340C1327544FB0D86AFF38CECACA05359BC19AB362F754F4199EFC83 A549C9BF3582774B0262E30847FEB6FA439B47066051081E14B71294569B6917BC622EC2 6EC96165357B39F6CCB2CD044F0AF977151A326C4D64F3AE5A708533F458AB5B2EF0219C 152C117F023ECE75058715E9DB39F09AECB236764E57F8456DF7B72B230F251186CE89BB 81187E291E285A66A4874DB3492221119D2FFDD0D8B3944B57EDADDBD30535F49ADF9319 07E65F8DC2471514E0CCAD6BBCA449BF024110BF4918050002E764CA888FD82519FDD73B AC207A2E06BFDD716A8A6D7F91F909D87836C174856B0026F86E432F5DB6A1B437D08562 48F96A10536286C9882F0A7E05578E0BCF03073509C72932A516FE54C6508489B81EE909 1E8FEE92F30836757429FC0E010FF0DF4A15EEB476440F56657F9A8D61862A1542BF7E27 8D09403F528D518CAACC8828F9F8787096DF45302433D6F09FAC5143A6D05F004BF806F7 AD93935DDE1E6DC2429C66526693C61590AE5F78B6B9B7E22633B270BA16D2CC26E1E11D 082BF3EAE9C1A73988EAB2341D5D8272DF4190241B78F22DA1C3963459C3FB592B8343A5 FB899DB48D263267F96E7B264EC64745741D422A062F3183368536C2C78A94FBCBB04267 7B33252CD1F2001F8BAC7641FEABECF9087A5C767E2EFCD948264118B9B6A582AA382B3C 9E5BF861E6BF2BFC1C42489FE30F3AED53FC5672ED1FCF68684FA0BBE8BA55DE88212ACF 57A38EAB27C7C30B350C970C8893CD6ADF828AB457F53CC29ABAFA51F1A2A9AF4373F23C 624E5D78A7E427F642272335D4AAEFD3FE2C8088A376517066ECD75B09892047E317EE19 8680671782A24C279371A3F031F5E6D3F88386E7B8E1D55152939506676AA49CB03A3C6C 352F25F738D2E8460BB4DB9FEB792C1318EC8B34957F92E7426C119523D409A2273DE4C2 C0EA76FF42F3F927AC5A2E11CC0D937C4845E17AAB1EC7220579025B4A079A7FB64F99DB 8B65819C9A59E2C8CE641474378B80A17B8D2F48C74101E5AED4495FE1AFFC0AD2FBD188 5E68CCE8479988970E826AF56B2A95DBC74AE448C84109C4195145DD5FE8280CD314AC59 854D847DD2B587FF6F162B36A789A19B8DC7A9FDFFC4AF98415454C47AAE3213E99A6178 B79884D4444A313ED4E1E3215AE123B097F5C1E11B5EBAF0581B1778798D5F59E7619699 169F59C9E5627E0D61C2B9357FC1D74BDE8AE564DAE9F45C8464C25A4DB9BC380BF71861 BE15459FE40CA4543994301C07C4EF1EF9072D049B683E0BDFA70733F9A26C55B7117E66 F185BA8570B28DDE0CD12A68B4FE184616981CC08B742BA58CDB9EE52F136B2A3564D315 27A71C77D579A0E3E1B8866D63AFE220CBB022BF6682A8C290B299835BD97472BB6F23B2 83BBAF27D72D675BA045A88CDB096C9988475D5E5FC560642BC169D575C866C7220E3D2C 2E829237F9BD1B0E36886FF9AB7DA57C0933ECF0484E1BF9750ED348A3AE3A83BFE0A343 417A1B14D8A8AFBFC637ABC0D1648BA7A1ECBBB2739A12A4895C9047EBE32BB1814CC858 2B03E99C378A8E2CD5DAD04A2F68C3D80945295B8710D790F9D2847672FEB4FBF342BF32 4ECCE8C66C41947D43CFF7D97330BBCE64F39896F999AA0A134D943C3D007D4EF1DC30D8 34E2A1A2AB20DADB0C9B3A2FB5756BA94B7885D12D915EC749BC6E7EA32399C7251942BA AE11B13A453F5F0305D48820F293D583459BDBCAE50FF85B3DAED2E7A581E2DE11DE85DD F0A7DBDBE789938A213164583CA40B6330F6DD784FA7C65B030C494E60A5BEB8571D6A3B 81035E3767D4EC913488C02C11D9E383F064C4CCCF9BF0A3A842753BFE82A145A0209F48 F546E930C3E35E62F8C4CD91AC953197BA4CC13F97508030AC3A0D9F14D0A15B086A0896 484240F88FEF9C4A5A2C4FF28CC67F6D4A8C00B0AA996301055C8213EB4CBCC3731222C6 133D48AFE0ABF3F8746581939C31399A766C681A6E58DA529967806DFAEE1B69045DED2B 2B481712AECB08ABC4FBA9D40AFEC64847144FFE76274623EC7608D16F5F85460E9A2E91 F6AFFDFBD0F700C105F32166C63B19D3A3C2AC802B6E082B02F967DE76F99281C1077A71 6D0C7E4B6D8DE985890E5D2EEA98C3AC462A29939AD3BD034458DDE2B97FCB33E50B0F24 0935621DEACC95AB18F4642548378F69D859BD8A8CFAB8E6EF15B034BBACD5CF72F55096 D17ED5BB5EA146F8B90CC5AB77311A23A74C2EE1BF2700B2864C9EFB6487E185E1701906 2A249DFADDFCFE4FC3DB200E3D16B909EBAE6B72CD2BF3DA831CAF03AEED18A5E6BA8EE4 F6D461F3F2F214A3353CC1C27B20F81CEA5686733636C9D6A3F2238BF2127174E5D3197F 26CCB19BAC0CD89AD9E84011B759083EA4506EA0E8DB05D6656EFF81E318D1D2D5FC6FCD EE6B305A2F0B14621B1431DE8A9698B5EF1B5B27FE35D46C920DA02787071178D5A42C37 5C7AFE1CB750141B183ADC3173BB13CE693A4CC6F848E8BF32FDFCC609F89520616E72DC AF6DB7688C277C6E9367EFC2F78271FB24CC038EDEDF3DE226BA150EA74CD778FCDFF050 FA60496672054E926895730F836E55E1D2871A185EA71577A90956294295B17D1167444C 058F42F4E64BC75EB9301B034F1CFB8FDF811E04EB451CCD9478025D88B4DF54DE03600F 612C74131C69023EE47EFB2F3B610AB043E1EB29A6906565D4407EA2A23FD5E55A86DAEB 6CB314026819F0375D1C5BDB6DD81977904CA4987BF764A4F3431BE86DD046BCA7D91A8C 4152A69AA912407066158ACE1F085C621569BA04D5B3E9F7B8D153494CB4F3CF0EB02A7D 6AF104063E16B559E671952C51920123481383CED0F144A2D93BC9472BC69D573A37BF62 496A9F1761F657CC5315B976A4B4972A2E32A1EC045EA0F51E15EDEE59A42E429F7ED221 03FBE927B65A8EFDB7A0DDB39B88679941CA24143DD5A6BB1A7DBF0F6EC98ECF6CD8887C 711232511927DA079563D8891153009018340E45333488AD15CDB6B36D903AE6F5262192 B2C8B6CB4755E197099EB7261FF7DFD5BC1CB9866A61D39FEAC0EC160EB6C2CF7B176B42 9EB8E2132C8D17DC72F899A896BC89D3F12968DCAAD35C282853D7C7B9A4C12540E87747 2C51F85C1F954C9DA6EE5D8C949C90E976D55B3BF71C6E37DC5B674E9F71E1028342A533 5A93174FDD6CC2C269A9A01918618BFDA641F959CAD8B5DA4DB5ABF750F197AE49D1B55C 7A3F5CD9C816C034C991AF12110D4E8B759F4E1B5943D3E20063D960A869CA7D40568204 5591736422866643FCF28CC27571D31EC49630473A46046B804649F858B30891358EA7A3 1CE57023106FBAE6419117F804C2D6AEE08811369C97AFB8C4D0C6E38CA93520C863D63E B24FF8F25A16443DA2B0DB07EC714D3B35D78DC1D0DF2143DBD7D3944DCA6B87EECF6190 A687AB88F7433BCA28FFD8EA201A97D548819F11DD13FDF34615F956DD242C3831E7F3A5 1039E4A540534F24FCA44D8E3743FC5F0CA75256A5DF41A5967E4CA23C2AF4A614F375E5 732E68D89B84AF3BF6881D3CB080C0D3870D66DEA18163E0000D35934837BE14F43E9DDC 449CD762B8FD20F608CF9C1EFA5C95ADC060CBAFA3732D5870BD88188DD677540C411A7C 7C3880383002DDFE06A86EFFF278665CAC8721E5260C877BA6BFE80EA036562FF536B300 2415948870B9B31D39F832A900DE245EB331989DB8002596BDA5AD83C29C74A96763BA41 B41208E172E9EB865235FA536929494E7E754002FDAB602FBDDA33C0546598AB094B6284 2F71E48D76C7A4D176580FE54259C146096E90F92DE24C3FE65C95BF38FAE8B3153C2D95 E37ADB59CADA850918847398390365E5DFD790D462E026FAA202CA9E4929FBF2DDBD68E0 1DBC17459381AD6E83E6B87A1DE01936263AECBC46A80123CF66757EDCC74475129A87C5 FF30DF90BAD389FDA3658577501C064BB7947F2B6AFA3D13EE181CB194D115EEA865705A 972945060AB37D3FB792C88E1DD3D8422341F022F76430B127565AD8D6F0D9F9B56C361D 9C41699A1BDBE4F1A019FEFA8F2CD38CCB4305AC41AB5CCFAA8C174188B6DD6C954E1B5D D3EDE7317652BDC9D0E4F314213D9442062E48A525023576DC0834B50B63FD4C3CBAB9B9 63FF5AFC7253669CAD7AE1CF1492D8306CA76872EAEF6D7689D3BB021CB45200D0C65BF1 1B5B1577389F43A65F5F7817DC3DD8E661FE978D89974CEEBC3B131C4E65B4FC8C9D4236 50028DE3DE029E5FB4B785A745E3C5DD6D8D3DF5926AA70AF0CA5A4955A41BCE478ECB36 77872E58E98B52561E74CEE95E0337D62E06A241EB60325921A8CF73F143EA0AAC299B1D D2B77071150E3368604FCEAF78C52C578E8E3867B3E85DB11F1B843A3BEA50506A3EA98C BF5A8EF95C3FDC7F5F0B5A4B5924E54B8969678811043E3DF81060414A62BC349265BDDF F47F3D7380F576C6FF366FB129A0D3002072FA59502F0713036255996DB84DDD2018B339 6DC3AEE0E7249EAC72C3E012EF262B518FBB16E78F5D1AD2B5D7A142312985344DAE14F6 0C032ECF57BA774C9E2693C47476FA76C557126C05484A1A0D7D60847456803A5051F1DD D175B84AEB5F4F4C69C52BE4588F6E39FD97FEA2E9AE280DA63337499C6CD957BC042513 ADA6859B5D70D537DFA1855EB25EDAFAF3FCD917B99898362D4ACEA617773EDCB6D26969 674709A13B5884269942998A313FB38F51E55A90ACF8E80B71DF977F182DAE152AD89AD3 77DA71F2E63363EC5A5A2A8EE01523C27B5507BAB386390B6894B6870476CA894028779C 84CAAA38EABB313350B44AB912FAD6EFE1481AE22B444C9E75B43D18EACAD8B1FEDEBA56 1EC281551DCB850CAA0F24A740BAE7FABE4A6DB7A7F03D1C3938E16C8497392E49ACA81A 7F81A13F776A34D58C8766180149AD5A4A535E56F06EC5910CD84F4E6225594104F16773 596AA664AE5245E5F59034B897A9CD010CB9D0E7F2EF9AD6F83C194A8A6FC3393234B3C1 E07F0EB366E8F9C4E97D8B166D9A21F9C9F2FD887745A717EEB9AEFE1B6C18A0BA784C98 2752D38935095312C68E415E57DD1022E43A7B17F5454881D9E0498D20FCBAB22D47E183 9EA0F44F6227A4BDB1A8E8540A90BD69C03BE70CD4BE94BA7BEA816B3CA8DF01262B54E3 BF45244DA694EFC5A2DEA6F95D8950832230E77952F5D3A07E57B4F681CAF086FD9E7C1B F8787E14C9F5117FF960240E135DF0D83316C57DE4A204EEF5C53265C08078A7A777F5CA DEAE071D98A3A8A3B84AA27685B37D6F8CDFAB65E2A824815DFA29B7793CB1507B2DE48E DDEA362BB0117EF915A6D7D05EDB12B24B3280D7250667A29D15FBDB89476537FF554915 64F9F64A2288E496CAAB98910D3B394D2DEB9D49FD6ED8768B739C4E55D337B9FB57EFF9 24590AD7F1206F724A2BFB1E625066E28CC4B82BEA33AF463D59E0C23FC8F94F54752A08 A1878262ED50B1222CF7F5151023F44834EAF5596A0A465FC623719F8070DEF4D7CEFA8F C76A7DA63359910B4127061400881F6E1F9E52D7D83ABF4C5507D016DF65DC71E98ABF9D 717D12D04083C3FB4FDDC0FF7C03CD5F5F35A5F57FAB93B21700EF5870A90BBFF566278A 15D670909B5CDA928379668A405299043101B641F65710A5F716D0FF0EA1C269317D9094 553D942EC232C6ED7433EF4FD9D70735175E809C5086BF6933166C69838703F2D4AF70CB 97CA22F29554ACBEFDE1A0B93B87AB38CD9A03E289E0241500991840303995E39409E005 0BE9CF3C87A3A42109E859B41953775DB7421F5015C11027C8B374AD6CBB3D648BE8E098 7A0EEDC021ED0D6BADAD7D82F7DD8C0A0975618FF1124DBE76AC3DA6A22143EDB15EA1CB 25C962090313834BFAAC827590034E801B48391158C6B9C8E3824FDB963EF8B83463DBED F948EADECE4060681346340BC98B2B295C9D84A9610AC4B5D856C25C85E9655F6E66038B 9715CB283549B2CA1986B17C5C44B41F27E940E281FD4D1775F93EFBB81D6193FAB845AF 1C1BD4DF9226241FDF239386FFC7137674C4D0338EBC6BD5B927C3FAA037DD4034C43F03 6CDBDD879095B59DFC6E1D06EA512362F76D419B3AD10B54DDD1DBB039A7A3793C512FF3 A42C44E20F31BA9F905681EB971125457C8842B0F0C3A0D46AED8C829AF18F0FDF26B467 2607B713734393FFD46CFB66CEA542AFE8770395178A3C459B035803D40D88B1669B0940 F2BCD1FFA3E6C735F2B1FA44002357AD81C0EF21CEFE327C8CD82ADFE5817753FBA34829 E70E0FC3168DE8F474A028B7DB23430C39C43A17564B0F09B82EFDE0992FF9913D11EDAB 1AD72487A2B8584A037D3F8DAFD6741448659E0EB04E24759EE1E3348717B732594A3962 2B9765F324299165E752E15CF94B2CAB52823E3767B7CF2ED79997F9C86BB7AEADF37B29 85D3EDF381C73A900CB43C263A90B388B431FB8B835AB803ACC7E1924B2CA3B0963290BA 5C32D62730299BAEC0414437F1168B117ADB9735763297E00AB7661BAE64764C5E33E930 B653813F6E2B5ED3DEB9398E3EAC8636574EE8F5F4B82524159C48547499A6CBCB742C67 DCA9E59E4B06228C3F4D6FE4CFA00229F589E1A7F3750A38300E13682A10591E6CE58249 BEB1E1D1939E10B647A17EA6A7F63B634FD0DD74EB7EC3A5F5A0B0A6810A960D15AA3C7C D777433B03844C1558799EA6DA025A935002A945F650EC32C2B2850EA54298DC4AD2F121 57ED333AED3E00F02A355FDAAD8F917A5D1DDDBE4DA68E11E454DF0DD1A985CB1B8941DF AFBDDD3A17E90025E79CB895842922BE5905B2F0C3A7621CBF97EA0C07ED94A4F2549E96 16DECC5A656AC322C2A566BB865C43415BDD9FCB33305A7A50539319167416F9CE4629A9 2951DC78A4035889DEBB00ED4B803865E2BFD11FD0BF1823D9D1C7761447CAAFE7F17F82 46D7321CFAE524A8AFC2BE21FB0E7CC4EADF195620FCD5527E5CAD3ED6BA00DB1C942C5D C5FB38E90A8E9BBCD9D41C17AF76BFE80B0E3B95F31F753F646F209605CF25A84930878F 6F0DA599D38CC532DABB51D20B3043E76A10DB55B3D04F2A93C8CA66466C9A9F2F3C48B0 CF23212DFB63A884A030777A7DBA5DDCE088241FC7FB8C9C6331E83BC3F68EF9E673FE78 56AFDAA98CD0A5CE96232F6938D9EBD391627994840978B8F3B1434FB945BF30EC6B37ED D385DC610BCA16281774A2416573AABEF6828176AADF852B0960FCBE16C63BC5986FC475 78741184158B14AF5FBA50E0236E99DB478769A53E7BD558372E77162BCA4DFCF7C6EF70 50975A32961639B295919D424587F4B46829A192606D8D5A4A056275FF273A26C4B9C900 99266EB03540B2F8352F3FE6CE1507AE00D19145602AA83F04649F9446F2D98CA9AB44FE 27A85464E268FB107EB017D224A80E4390C40CFE1E931CEE78906AB79FF8FF274FA5A0B0 E196873F3B6A905429F5A6B3428059CA1EFC84254DFE00107A90FD275C87D834D7403777 1A4CB06DA78DDA69EDAEB1A6F91F15B678987E4707B8F77C904300CF170F312C9E07C44B 786FFA22EAD9EF48C2C618CE20448D69BF6E1247A5FC13842F650EA96D661AD687636BD5 74E2733AC878084736FCADB922ACF3D8DD6F8460E6DAE0A68A009DB8A9CDE35CA7891129 7099250DF935A1E4659C45D1BE1A14F14D35C896839390C70535482248F56C1528804236 420B37DC90BD629ABFB143D229B6FA408861C64B1CA3F1C93CB2FBADF25ECF9BE49C10B3 128A0A7910F07039D17D28F067B52EF0149B2426E6022E911B3AB7ED0D9538546361885D 1EFAB356143F1D7078634F7E714CA49B0803B6DA83B847E6FB83C59AD42501F7EF3A93DA 7547482F0BDF0EB8F06427E1DBE1F3B6F7EDCFBD9C4C27784F4A3D074DC8DC2DCCB07413 1FFCC3242492299E791883AA5C4994DF54E5545C93AB919E0175D68CA592BA0D16C68EB7 A4357CB0834B70D0313E5239209BE964C0ACAEB6B8B46D240F9D5342EA766A08E8C813D2 0C978C80EA26BDE635E90FFF6A44A405226DB51B49E5818D10D5C376E24D34B544A2E6DC 8D671ABD179C7D1A2517D0D2E9BBE4073523D53BD7340891023EFBD00B2EB53370504B92 DF81F37FEF0CDDA20C380D086B3673426EB6A9E413F0F9BDD10652258593DDF3F387562E 5E7C7283076796918E87428DA641529875737BBCF2C5EEC9E3CF508985CA3C1890530B98 D5DD3276A557E12496B6496E5A6274C16C6732899123ED29AFBBF1DD613E1E2B2DD4F3FC BB041C829445A85F09D62D26A38554189B8D35D3B49F8A3E8A550A61F8B1D4CC39550A5C D7A67C8837D3F6391C51CAE7D4E7370A507BEC272BA421DDF1178C89256F1D4B5CBD738E 904581140E446DA2BAB6BE1833D82344616705582D278E9D4130165B09178565C5958A70 1D45BF1E1F97B8C5B3B72D705C5D1910094F83AA01281FFED34566FC37A1B2F032CCF663 8B425D0D63B43F7842F403F98406C704CE92B61A4647E026410389E40EC8BC11F9C6D2C6 892953EA155080C99D0682766908A8067AB4BB8CB0E26AF909599E620125DF103D7BC6E7 8A57023021048564C360ADA607FC3336892F5630CA653D480ACCBE8A6AEA39D5D4FEE5D3 4B1419B3C0B63DA7D2CC6BF15C30F7829CF1C40AAB7CBCD5FCB4969047D9AEAD36ED32CF E1CF252B688DF56B17D9D03C6D107467CF4686EEF3A929A8DBD6F32D250BC2CB1F0FA2EE 520762706FDEF3736146EC2A7CDA7DABB36BF6A99150642A0E4F4BFB5E3F202FAAF75A07 1A5FDA576FF4EF2628DD9C69433A0A7587916D5AABE82B0B79678B0961A66A797777DBE0 C75A9C0CE7BEE5BF7A662503BBB63F56985AD1F313878C9569A5C13F6F6A6D05EEDAE6C6 B3F40B4421DE0064125A779F08D1F9BCDE8D694B5082F927E77CB59A5B24A28153D5CDFE CCA25A8767E80C0D24BB1DB634445251AE145161F8872314E91BEAD7046142695F710B5E 62F458435D5DBF42B6A12A20368E3558BA6F4D19775EDBBB60935BEA07196E1F7C2C13BD DBDA64A9D59727B33715833254CFF703DC959BC1366DC10D92850C7CF59C4838B4E041BC 6DE4CC5A43C7F672AD2ABE3493179D2B8F9C50A5643164BD664182964BB1D1D3CDD3F8C2 1C6E7D0B73D0FB8695DE84395B4BC5AA678B169C15265E86A91C438EDA10A47E222220F2 3A7130DA75DBEC16AA7E37D6DF2B17683B4751B3E78C33F2E2B66FBB688F21AEDE71C156 936F1FC57E32FBDCE68AE98FB0A9D057DAB2CC12E3A669029B06AFE01262F0EA5A050CDE A3FD68D796D11AD92BA36B59D7B94B76C8E9F471BD1309E5197402908970790E5648FDB0 0F372690434E3D6479DE4F71F9FE06FBD17D57B3D183A1075871831F70C3B6D918221F35 2E13D26FF1C492F94A93EC4A4CDD2EF18436E0862DD2B13B78465D79B83D0C403DD9C820 60C20AADBABD44E4782C1A81EFBE2A362533D9DADACAF79411D2F9D3EC69061C710E9030 4F3BA7767C93D4EE7BDB3FBF7B22225161E081B14023889765B26A30F177ACF0902FFA4C 1027FB04A99F5AC7D575A7E1280A185ECA4A6C80873CB67F676746C427E1EC52DDCA8ACD 1EAD706D0C5DDA8F80D4D7E96E810CEFB18F6BE6AE1A12AE19A8C025122A78881DF02898 D60AB456DC4F81028A5A9D0A8D6316C24983261746A8C31E79DD5A847647BD9FE3D47315 877D7B9A4DF7E4ED79DC423F2B25EDF270A3FBDEB42C8F55E0D814C8A6623A822549D0CB 12C57BD852BDDAC25B3F5177C87F20C47D8CC955872E5722B8EA51EB67EEB25BC6A901E9 BA4349F92C43FEC64F5D82F8880DEE3AD0164BDB72C8EF4740E57D626EABA126987EA07D A2286DE96163FFF4A35D8497BA20E289A9A13CDEA8850B6F56FBD34B4F81A5577A0500C9 C8E46BD6B942DD24AA70AD8993A22DA8189358C145C85545E3AD1B59AF35CEBE5DF84500 034380E539BFC31F4193EE751A09AA595CD201805E3955E5B117214ED0D029DB8162E92A 14B35F6AF7CA2182E22AE46BFBEC212CA0B2239DBF97965D3F36DE1645A8889A7C546988 9036279958DDEC258DE73F4DEF4E1F55C0C59DCFA4A5ED063894DCB0EE9C3911051BD4BB 5004009326DAC190096DAA230DE20DEFB1A0C5BAFDE2CC858B65C2CD04BB0C0203420297 C0FDDCFFA7EE25DC83E462CDA0C513D84D969B2461C286DA024B5B797A1A6A87FEB10FCC E3FC9EA8B7C75D982DF6021998537848FAC86EEB34903CFDCC1A11CF811F4C61826F7FDF 9663E70C04F0AB7FF223B3575348B11488AF474919F65174FA946AC01ED9A9C8E77789DA 8C2342A2DE8006A59DBD3F1C6E4E0CA9A4FA2ED3F5741F931AC5D7DDAE5019D1273F92A9 613858A77B78ECF04EA6E4F4C75EA390E60C40B5B527CF394DDBAD812C507CECFE4D57BC 0D78D56A9A1319F9C706D62093A9DF3D0794D2573EF96D3FAADD6DCC29CE9A92B7572671 CF5CC680B16E8A18F7A4571CC015D597FA53B8216BE1DD4603FB25FFBB931326171A24E1 1418AE5857BA4C2AE126E719374FF42195EC630CE23D72E6703C3915A1792F5FAC884682 6B49CC47342A8D1B12A24586A4F8AD0C7BB332205396B9F2F2D61E2B784649E339E4C22F C4B68477A5A0ACD1A8335C59F4B45BAEA461E9BD80B2B9DDF785F264B74D51550DB9BEEF 3325B6EA3987FE6D73F722DC6FAD80CAC72C10FEC76DA4534701A45718F48D1C190BB2E9 19EE4882C8BA0D9CE26EB0DB29F9A73887837CBD84119EEE16E1BF47D54611408BDBEA42 A625A8ADF95F62B4F6623F5342DD583F0DF508406270CFC53064CF9CD099E1956F2C0DEE 866121906C5B8C154CE86EB66167EB73E8E72BE2BFEE751292D5F5FC1EBD094C0BDBEBFF 8FE77C3D27ED57F6C6CF1C524D5C222E8B20E923610CDDB16A365EF14C8BC1C4927BBDA1 EF09F178850B2CAB3C4DD40FD735DDEF4FCDABCD387BE5AC8436BD2BBBFBF6F97262D21F C02922F59FB948FDCE222D2BCE7730CD554996926CB3D79BF67D22552EEB7BF1226FC99C 36C827E2A38438C14082987A9D44ADC457C84496BC5FBD98717E5E567389860BF343A6BB FCC5895059AB0262F54C15A22263EDC09EC2B08E09460F3E4A8408CCA0212A809FB06542 809FAB4FE43FD57C0DF533B5E83EB7C33AC467BE152162E6D01B08B7282872AD6222EF69 50874589CC7DDBA88DDABEE35D6B4A97D2003FC90FCF457FBB0CC3D7B62C61819EE62957 9A16CFC1413EB4D89E77D6BD214E04D9A6DEB8A937F36A6E63E6BB533390094D0D937DD9 521C5A696514981F1A9F4A82548CBF53CC38D4CBDCAC70D3DD7754EDBC0F8BA88494F5BD 56E400B33493F98578E2733984206807E3CF08A6C0EBDD0C52A2AE6B655213EB5F636CB6 79B3825EEC62DFBC2F503E8FF64F4DF3BC6F6FE3B63A54BB3DCF77C37A4F0559453E58B9 E56FA59EA95620D18B42748ED410C4C5A33109D11373F04EAB48A3D2873435E0F3EA9133 4FCBBB4463C2E487BA6CC434FC9E13FC60CF2DC0FDC241097EF5CD51A064465A7E2FCC55 5D55F81F8BBFA82F20E77335CBC0BA4E93AE1BF1B448BF35BB5E372C36FEBA2F1390C133 64C8B5EED39F607086FDFA7C72E249B2A2196E9BEA18C718FAB193A07C5E6528993B0B6F 673537C6506871F4261E707B041A7B70FBD24482228BD16E07E432544B76764603DA9564 12808734F2CB881C825D56480CFB49406436372F49009936DC007E85AD528AE254325492 501365C6A4974C0B666F7B70D935283F608E39F5A6D1E1F3B6E85A01D1EA48C2EE5BC2E1 BFE149D846EADCFA366BC9A085850AF186002BD08DAA8F4331A08265A5D67ECE6013AB24 F8261D6792048FB81EE909B706CABFFC6EC488023EEB9037B2735488537639435DB1E2C7 5D6EDE7153AF181C1E672B68B7AA52A8E0AAA35803555551424437271700A4928A208DC6 87F1AE35D70CFBF186B622AAC0911E6967F216261700AAB6CF1E436DFD2C82333F6D637C 665D941D006F26A7D055BEE4B4D111421AB0662205DA121544ECBAF689A4470F2E61B8B3 813DFBCE79B5D5DCD1419CC3C73565CE0D58CADF9BE367EC36FB7DEE4C3EA435EEDD7BD8 E5A4BD6C9285FF3836A1CCBED2CFC629F473ECB1796DDF4F7B90BAF313FE693382CF6F82 5E76784F76D8DB55588B0E1D65D5403870546F53C307B00490E28685BCFEAB1E18E78E63 B6557F7ACE0956475088FF5CB5052C9847CA1F48BC05846BF25D09B95C97A5942BA78442 64BCDA02746568D383D6DC933AE6919345A384B3DFB57CF05860E81E3ADDFE96709F5569 4512B579FA8A73C34B8FFCE9E771A4D8926161869064F888BE60401232BAED71EEF73CEE CCD5F6E7AB09DB19709A0D0540B36250A5A3389BAE693A2BCDE04A5F1557706553071EBE D78F255A91E8A7446C238A0AE49355A8A908BF06D26FB7D304512B45F922D7C9C6D65920 81444C5212117E321764697B4E768892900465C4FCCCD9A5BD9755B4AE3DAB1BD0141A19 6CB0A48828DE54F5C570F0905663E132B1687931CBBCF4EB58A60FD49917FC7B1A89E713 6909A85EFA6E1BF86F9D7E3F66EC31697907AD0BA5EB2D2D1926D1B7B151B5C45A5F71BF C84F5D159CE3265344D6423A9797E7013EBA26D89E2ECCDB4F9B59DB84726C34EAA7544C B6F8268DE592E79F0F42E2F68474A7A2E84CA79B0BD55209BBA974688454B95716C4D229 DFD1374F3C5CE7F0A4EB6FF63DC10DFD7D2FE57AD1BF7CB618C77ABF18F0B838D68C55C6 2A3086272891BE4D1129C4C0C95410250A8C7227D893EC0AB09FD403E33CE88D8D7463A2 3EF003AEC2D22EC26F0661292ED78ACB5CD934153983542A7FC63AA12F1310F739AAB1AD 923A285C4F480251E52B0A062EE7407F70B7F6FD6512F74486B5743B1734F41AF82552EB EC81027F0F14A721E43F3E1D91FBC7270EDB7636E00BEA5F7B37EB1D2397F4486E0CBA44 9995B4C6E44AFAC956DD939DDE2217770DED66D92B06AD92A55A7440971E843C28B93A6C 635B1105F1C82E702FFEB13FC66D0D97255F1210C9542859971F6DE53C46CB43AA767D3D 58DBCFC433A4471155456157626F7940650CC07AC17AA3978DA6D277CA229E82A26BC24C AB44FC2232DAB192AC123E896159F3446174A39DBFA572FFE3EA8DE0ECCBA4ADF305544D 206E9FBF7F9DAA494800323F252D452CB5005C4C1B1A253DAAFFF7BF1404E13EDCD349EA BE5AFD7ECA4DE431AC957228D0EA42697076D085AF51432B1ED813CB2B62439FC8B575F3 A1D90C26DE156D47C06DF3BBCC805FFB7E6ED349ACF25BA1BE851D7905137A68954CB807 CE688C6A715E884F77A247A317291199C760D203F5661058CE05025DD2CC18E121014F03 35A57841FA157579F8A9C2471DB53A512285E699E5B62AD8FFB36793CDE849FE0D84B0DF CC97706B736B7CBB960B8CC960E158C313B76D81C103637C428EDE2DFA57292631873F15 2039088922262B8A7E4024D6CB043AD12212E79032BFB20A39B1185B271D838B692587A5 D9126C8FD53E802D14C07B83DDDD45FE95C1ED46348593DBB59FA1A831157D39BE72D484 A3DAB315AFFF2453C044DD11C53E60ED32A9B89B9C1198CB646C4C771DF544059617E33E 6B54C829B7DBE460FD63FDBD10ED99FB196A1F48E40FD10196275C810D2DD5F283388DA1 2ABC23A0E98793055DA6035668326AB515383DC2DBB1F0D72CC1DDD0458EB8784FDF1410 DB9D4D20FFDB89EBD44124154A23CB3AFA43655CAD84D3DC22733726C831064EC0560B70 36EEAA1F22EDC3DECD2A97E43322F0DF7269EDDA4CE0653D00EEAC1892CAB55161EA2DB5 256B54208E77BC5F580BB2674AEBD6D5890B9C6FDDC4729E018AA5541FEC756B991D8AD0 F2F6AA5A83BBA20CF8522DF91395960B71E4E393C99F256CBDF1D85CEE9DE06FAC293F35 F7D22B29F114B2295DF21CA7F079CB86A3D11B21446B31F5CAD5EE275F803A0C2B921D27 2716E5810F929769E9ECD8383A5F909DC61F5C7B69A8481CDC4783481CE2E7B4708ADCF8 2BCAA5920B53273E8B0FA06C3189C76966D2BF2CC18D76C90F44A00F50C3E4CD08471703 C1D8B31B9FF7D8C37BCD963A7963D43263D1B0467772EDF021DCDF9DAC467AA48487852D 67709F5AD3D043B1689898F485C498D7B0E77868291197B6CE7F31D7D33E818EDBA2D84C 576541FADF0DE8AA33713FEC7ECF127325A4AF2AAD22B68178863FF4368885347BD32530 2AC59762B384BC4EC6DD5A825483B22837C2D66B2A316862BDA42E16CC1666D72356F643 A8A923DF3B4F556040F1275ABDA42633B40A825866ACEE575279960F09E92B5E9710246A A539601270191AE65BF61B1FC69A5B0D37432DC07A62F88C4D0886BBA642720643FC2741 F90F84341F14684C6FFB38AF82378C7D44173B8DD44BEC85CDEB5D4E37709EE13C0DCA5A FDCE8CCCADD35B3ABC8E8C892A76E2FF25C68D5D359436872719CDCFF37CE7D113E77E05 B170F630B46AAB9C257787860327D41D6BF1B6CD0EE74D108F67F312E8591DE37DED2137 4CBB041AFB1B1C6558B0A6285E7494498024E265F80338D2C6D82C3263EA37A68D0B5705 0951E0C4571CC71AF4850F1FBD080A7B62BC7A1F80CA4DB3A4A13F24FF9608B318269DD8 9CB901B4D0071C0826073A421A94015E1C94348511D985DD75F60D04FBC6773A0655D247 8FE0D482375480066F9FCFD61F6F4734E9082BB0F179B98DB75A3764F2E07552995E0EFF DC00151F66B4FC060A117429BDA86BC4B6B0339E3D3118581BD5C8A7707F89790CEB3739 E7CE96F949D293DB8FDA5648858E77E9602EFCB919839C05FC1846CD35DBA1E631E4E101 24186DDE990680562377E47ACE1D12ABF1E824C81DAE7E87298548BD463EC51C9D760EF2 C975FF8190BF52DCBCD85E0B8AE48DE7AFF8CF0E87025645A82EF01AEE3FE1F719679AB1 E32F574DB243EA95C55AEC84B4E2C44B6698D2674C2B50E743FC02242D9D965E0AD59C21 E12DBD822B2ED72CBA030BF4279264F1CB871051B136A66923233404A2C587794C2BA273 E096B0CBFBD78CA6A6090DD94DF2878190FCBE9ED1A5BE95136018281D2D84FFD222280D D4C8E667A8C20612D9B7678CB94877E76C9DB85B54033AE38F58A84081838FEDA271CD37 6D1179118D2E517515857239321FA2651BED178D1AC26A891CE5BB2D128486B755A947B0 C06C5FD527FED12E1C923F2B3DF695BC656E85BD0B64FBD073E52CF075E5CE1F1DB8D52C 1F1E550258470EFAA707F754BD581F84D26742838411F69DDDFE1B76D4671396EAF1290A 6DE587A609D9400AB237A590A4E54CDFDB664535D3FE05528F7EA80B998E365961BFB7E7 B15EA609457BE02C020F2B16FB638B2062DBB26C5368D6EF1A2351C17AB714A537866E9C C8E40BB6577AA056D88F0F6E31B10C0BC1A598B9433F6ABFB7EE8054BEB4D1C479AD4557 B1929CAE3FE3AC896FDEDDD8A85541F0D27F53842BF49BEC1A4E6734B92BF2194C125FB3 D25F740E2C0B628D637B288DB5CC58F49DBA723CB54AC2A067F7C5DCC59A737BF97D517C 11784D6784ADFEF347C4767F1510F6CAFEB86851F0B5E4CEF03214F997151FBD130F0EC5 0478307DDAA043C1095384BC8212C81C0FCE2F3282D95F9889BD9A7A05214199C615F105 5C46F92D494AE876A616B586E9028AFBAB15DD61A80356BFA247D335AA589B37198E7214 D48FDB0569FF037302E8C6DCBD92AB57390142C4E9AFF309EA42D706BDF393EDBA42F1F3 BD043050D66F52366665C8A2A1BC67861DFFF0FB6A6E4CB974A16A926472BC77F9D07D7A 50C571BB6BC25988B689490A652990D6F674A93FBC38EE964694E5D6C01C99D7735583A6 24AADB05BBA3A5AF106E15682B64D2FF2E77A5C0A62E6810AEBCED0372759B31032C7585 53E345C67B33D9C21AFD762C5B86C409BD1EC6F59B3392536C175A37BF3239C1CB07790C 035B85056ED7D8E5ABA1C88A43909124E5B34EB414C34F614851D79B7DF4EFF9893F9F37 F455C293F839CD4D61D02F716FFCC6F813D55EBD2483D0E1363583E1C0DC402196D6036B 9BE11359E3F74CA54CDFC91B19E6FBADCB2D7159E41A821D9DA2C2318474923E2370AF00 1CF3BCBF6450A14D0142286A1ACBA81AB7DC0FA9A6C01B4C1C7903BDEEDA2A2FDC4D5784 47654D9418E8D1B53AD84691FCB2A1BB66B9B892C92D69D3153F81C4645BAD135FEB6517 8E4EF06A2E6E43D051ED880AA5FDB144898FF8B561C9CB8850BC9ED522981B8BA7CBDD1D 07EB7913A9147C61C521A6A7F29A862460F3BF8F61D5BB97377DCD8B97FF204F91C6E311 73F5A59378350D08FA729BB71E0A41917320745F8562F1715470F451AE7040C0243ED259 38F1B9B55C00415BAA2636E03267EF7103304678FAD7C1482995CFD2BE061A52A97B9C73 E575F4B7A0E58C4F33D38B81C0CBD09BA14630446478EDE114210EBDD9751F0E851092AF 0592D36C0D7D52BC60B4FCC82632F84343FBD07EC317A54CAB2336A9D91F243EC013B445 4DEA83BCEE6A9491F8133FF0CD86D91E54F51CBE3FFD80DD8F6A96196E6371BB2767D4B9 2B96AF129C23B37F85248AEA076BD16D5B85C8315D8A728368CEAD3FAEFF3C9057C89596 3EF567F5C667E193B046E39DCC42A705065AA71140EA70CC1A7CF4591ED51ABF80ACEAD9 286A3306D6FB83057A4F0023740CDB0CDE884348894C6DBA171EC57BC909C822D1C8D042 5665032106E1C608C663B821599D064DE2D6F304FB9F3EEC6144C95AA3D46B1A201396D9 A9BCFBDE6E39B33FC1DF5F2CC5FCA2948794B76DD313B025753E0AB4250A67817D21E9DC 757D22A588041C4C0DDFB3E92011D424D3A8ED50EDE63FCFE01C94DE32A4D87407E92C4E D6150B6A5612EF7D947744E15646DB485C2D9B1CF26CE0128E53081C2DAB0D5501EB560E B224B9119A45958C6387855045E068890AC90C71D86FBD29EDC47E7424A74A2E24D7D2FF 3D4FC2DA19336E97ECB4F122A390502EB714BE5597D30287368F8B1F10E7DC559B42F6AF 2598076B67DDE64412472E4569DE415D97146288F8670D4F1566E51FF74EFD027745E600 FD3F143D7F3AAB079E9D6C7D292476F91A11EFDC292BDF5F3D7783E5A963A099CAC19751 64A290BC17974CE57870A9D83BD59184908C67811090B68E879071F20C4B35552D61CC0D 4E05C9E3E8F5DD93E87B3FCF52436C83FD5D89EE1A415319FF6BFAFDAC8C6AE5BA8CDDBC 06AD072519EE4C9364E5C280369B77A152C7695799FF624E8FF2CBC09ABB7594D31B5670 B3744ACB84C0DE8832EC1FCDB17C248A3E8E241D852A14A3B159140D6BC75D8335A6D1EB 1AF950B845581086F5315C76E3CE605F7E06F5E0629CC6948E05E3B385664EEFEABB0BCB 1FE121B2C45D71AE18CBEAC0E4B143FB0E275A380B326E58F5E15914B66082DAFCD93546 B564055FAC1377A445ABA3237D708BDDBD2963A3A28CE4F89CAB6B1673298F726DCFBD39 0683E84D0354AFD222C75B0013328C1B288065A6BA6B6B59D9B88DEECE6E81ACD0DB0864 092C7060F14C28CA683C88F0C66C64B8E83B139FB73A6DE1AAA82F9DB72BA43F69E96E4A 8DF9E6A30393C46B2E924B1DFBCD9B3553CBE504A4AE52B8E8E246E54E02F3D2471F2B36 01799AB2BCC90022E56DE4D12D2C6947A3C67A798FF6AEB92CF4520E85772A6279831DDF 55E836DF61132B3D251D71D7EAF2F732B67ACC4904330031A3DAAEE925B26C01B0B69590 19F3107A686ED7AABFA28BCB6E9B4856A466C5109CCEDE1769F6538D51CBC324E91D95AB B7025C458EC9C6C31F513AF446DC1C1C7EC340EF8FF08BB16C329B79C17749E95B36841F 2F2181A3D36EAB13AC91747FB6E44DFAC68F2AA619CBC054A3A57BA92EB1357839B71202 D34436CA2032CBAEADFDF637A9D69D112BAF9EA63AAD388FB90A8BEAB149BCA30361DE6E A75771C8E810838388998CF2882822498D01BA6236D66D8CFAFE6E20FC89BCFA5B1C60A8 45104D28DD1EA4A6CA27FD1735B2E2D4A8ED0E33FFE024CEE3BC5905FE849B8A7803075D 079C48FFE12CE0F70083A1C469377E5ABF0AE99BA2DB246CE92D63466CF1A1CA0748AC79 A7642E7F37C66E9C879CE6ED6038F26CAB1FD427D4A7E04AA235658117CB8095DA215DB9 B042ABB397C5669F22C52E8C51F0151D583740A160AC1B12F9CC5B96A23675428713845B 40EDF816550A283404BDCD4BC07021E33C96EF9EE51CE7B7C1AE0F906619CDB96F6602B3 210EB0DC9AADCDC693A0D28BCC95213B4993048CD73DF24036ACB1C15AF9D71D7518A62B 81E933C8C557FA3EC96D423723ED1A7E0F3F585E32DE80053EB23D5E241FD367B646F84D 640B4056DF177841AFE2E6F14409C0766D22F4CD7D64AA793B3644D8968CD928B1C0042C 830FEC0415D0C1A011D0AA56E83F40B63BB9918F0F577683CC66093A4FB65E1CED52F3A8 C72B2C16B027B5A90CCF4F7B5C648806B195F331B263DB76E8FA75E4444F6B220D13D581 18C2A559172216F8AD835A3CD49964EEE3063B6560860A8F346E86C1A4773A7D3E59DB88 6A2BA697425EE1F5CC7D79993B70F1DD833756A0C2F6A01FC96076E35C57A20582B3FEFF ED5FE7CB0936D4CA2691E6D970476C317B07CE34E47725CFB60D47AE205C15CF79135388 5C248D234C03F6647E97772648177B3174CD6B11C1E25D0F5A347CC56063ED5849DB56CE 2115B042939A7FD109841FBBBBEFA7197BCF98B4CD8B578FE6CC955A16A572E5B5E55CE7 4E8BC39C101A51084ECF373DFD250ADDCCE8784980DA1A197A0F003557EB303EA8A7AE05 1DC14E10954E6CF06AEFE3F8C28E2CD0A8A9FCDB3919507D3B2245F102AA20E3D8377A60 BEF8590B98E03243DDF98D18A73F97E7649BBC83841914D9C8ADD8D921A6475AE9078BA2 02C735489AD341AA8A6610137EB894B9BC1D54D2F856D31B2D65758B0AD4F3D80AD9CB66 576935D39B7AA65E901713EAAC2F7B67CB089EE919A1E1A2928C0523F0E8BDF5FD989D7B C7F1D8CFAB3DD7926E508826E200A9AEB2F0BAC264DDE1C2F689A9254787E52B71E52328 857273F833FA80B208EAF63378155D78760DDBD3528423FBCA4F42B6EF7F31BA347FF1CA C7A95597D69498BD830575661807A0484D3A262953B2B2511CDD85FF9B74FF5EB21347A1 0FFA192DB3FB8D6659098D06CBC2D4D5F37C1C9239E6AAC29AC3812E20AAC2903A5346A5 E2F48E2456C10D34B06800A9CE5EB250802C1ED8231D850082D74C7764145850FFBD12A0 8B58A1C4F1ACBACD7582A7145DF3DE7DEBD2EE2EF0DDFBBBB1AA62A49F910B3A50A733FD AC94BF793081BD2EEB0615C1E558CF4D7E27FC83BFC49E8BD00DA2B816F790B0384B986C 27FA0ADFAA7472F109F959C51A3613519F24A09CF294192CDAA80F12118ED1018D41E8EB A13C8724CE98593DA3C97028E257A2ECA2D3AFCA21DB7176F2AF25D22C3B8D5C4A79FE14 5E25B7A751301D1EB109FC482CE84F7E6AA115A2F6C31815ECC8959D158201E65308A596 237F1C7F73B62CAE0198B968924CD1A81E267738893A781A3F605D9A61138E9C5095A11F 96DA588847E58F87A27FE9E936BBE655CC2FF14747C3E3DE31B2C12D9D7C2418DEBFBEFC A6DA077A294DC55A51F416368E936A3ECBB6ED4E79F9903C447841FD5D9F75C7268DC312 CFC3B2233273585336859E6A44F33AE2AFBE86E3601C1E228A521D24F5295E1C248E4C3E ED9359FA9561B38C0CD02EA0155E10B8C70CD952B59559EB22C6ADF36CF6092E8AADF853 82ED2EEFF2392A7E3AD6B7DBC63082FE05E2C3D5D2FE41C3E29F3FFD00CCC48F233B087F E717AE5E57300ECD62AC80189363B1FD346B1E87934A15F6F8F744D13382BA654894EB1D 30FDC7510744BC38E822C136DF045696C0298E1B0C401F444D267275255FF3B79E7C33E0 59694A0D6095ED287D442084BD9B2C25CC90D0A098852F0BFDE7471C5104BC113EA7F0F1 DA80161C7F8C6E236BB093D51105BA56BFAA588429023CAC2F024C866F9650C016D61D13 B53469DEA721F6D3709DEFB3E1F291CFDF426506A91D242488E2FFAB335CD446F6C3CFFE 5CA049E3E0C5DF685BE1E349272F73427B7E9B1A0F34450DE1C4A885CA838861D7D47693 B4C1C6A4695F637CDE9799863818D9167D3FF51693B9EA6B54220DD5CC94D1E2AEA2CAD0 66D50F9FB6BB0835081B5150402298AD0102D2E5A8EE7E4D59A978B050969D098E0A02DE 446748DEA923B4C882EB7719D6E8EDBE9AD91AA8A11D7F6F5EE72F892CDED81D24B7B060 9B172695C4478577E485756EC885C3544C95E10F50C46D530D1F19F6ED2901F3380EFA63 A7B5C4BF78C3C88F9401AABFC82CF395396D10E5334B4EB62FB7E316F110487137A28884 B549CEA3463B538742DB4CFE36B930536772C8B6134F83DF8AE007626B3488A029AA91FC EC37191F7AEE0505D03895C25289CD35AF7F378C50D21946F2AB3D7DFE02DDFB3BE13EA9 F4159F6085CB46566D9AF4635FC0C18B6F961F99890AD577CE6246D71BC6564946F157B5 E3D757CE953DB7790C79408CD94DE77899296F4F37D00926417966239BF56541D7451B77 28245A6D8BD88910AF4EFD2C85925B6385E983E2DFF58CF1C3696FB8940F08C2D0889CB8 A7379452B5C926B6FE8FBB254A1B665C4678427EAF123B7E63CD19A04126D28994675343 C77C6ED5F75F135DE6D0C70FB72475E663D42F2C8E60073203D28C1D493BCF13A670452E 6A5F4E7F6AB172BB93AE23C9A8798E6789B9A187507DA24E7E51D9018A2D7409945C7E02 DB4DBCA37095E107661334BA7821F15D7A9353E442100E929F6E3BA981A287FE3AD4F2A6 2BDD59A42BCA0F679FE196E60F385B0BAB692CAC7B8B416E897F425C017E8E29E7233D03 D5A933531BB7226A052F96B331F45126B784E4287E33D8A463AA2237581A146A1F5DD212 F70F52D799DA44C39F96E2E826B7FA31D176962191F8592A1BDEF92409B9C920943902B6 A64E31809B459A33040BBADA8248D7A188655B2CD24A9FEA9ECFB097B5C3AC3D62B353BC 2706B0463ACD437CDE007F10C5D354805954D6F7593133B61B6CAC3A154596B703244029 9EEE32F84C6F040636C85329D18AECC322A68D6AEF2B4006505B3F9E84BF2278118BFFDD C74621D14C2D685E646950A5EDBACA679BF22A360724DC3ED8A303DC12C68F8F7A7D2D74 D1CDA12B7F7CFCDA6F46E891B84E2F4C82DA1696C58C8B4A6EF67DE04BB01B72E48508F6 EB7E35C78D4EDB93923278037D29F7B5C21018F0C38A7A4136D995363AFF1D663DE1F1FF 0AD9ED83B1712EE119742C9B05DAEB7CD59288554B1684712F5F22437C08DA429BF812E8 A3DE195BD29653F82F416CCD700F3522731F1C2305B4D7B57D2DCD8935D5EF818E304732 54D4A542873D506755301723A254E14A1E8D50EBDED34F97CF4D435A48273ECD83748A59 91B1AE291CC6B6E787A213F3802D4CACF9C7C3E371F86179754A1CD6FA410EEB93583D8A F46DA094B149D0F1448E87BC4009C5A04ED33DC24E2A57E48E364314F81F14D4D1CF4A12 F42664980494A82C1E5E3D316CF395A21E66D35B0C056D4FDC9FB70C493454745035B422 348CE36D2559729A3EF206578ADB76D39F1B9122758312A17B725BA3D3DBEC5753B8055A 94F74BDCDA8FBF188F33096E292630C45D630949248957C6C245BA287493D81262B3D991 B4ECD167E81979F59CF062097B000A56E9AAE4A63ED071EAC839141C6E051D08C0F654F2 994EC7D34F0D905EE87885BE7C73FFF5FD65E09AD63DD8E77C8EED6101AA84964F6B2411 822D5EF76367181986A638901E28BF9C7187F759FBA72528EAE2D4BCEDCEEBA9352D810D FD100572C9610AEEDB4D130B0C9A1C3875133D56F7F48A9253F62662B81BC3970B0DBAD8 D525BA250F020FB708BEE8E8B7238221E2AA89C3007A05F620C45270F86DBE597073B9E7 3AC69242975661F2D41251456C91F7FA0FF2EADF1ADFE767B1D5048ECFFCB4F1AF96F64D 689CD56BC001C775496BB2ABBBFC8B88F07108C7293227BFCBAC3BCD1001619DFCAF4574 D2202A428EA3D6B4458F481B3AEF239A876ECA30B944738A8E8DBC79A123749734E303E7 E99B23C6C42824EB51AD659546D664148B36ED276B56F620A99CA11E4BB87F7A82DCDCB6 AC1164382515EBEAFA0B5B57256F4122050203180C747410B862230EF112C964BA6FE4DE 7987323B33BBE14EE9B8DE886F665F0645D83293B6D387EAA75B088437E984F2E4A7A8B2 B9798E7D3BD1941EB981AE1F09F1E9695D0A4E82D870C7DC460CF829826CD8D049AFAD5F F45E70E0A80AAC42EDD3FD12E207292C27D123D145B889AF508BC3651E5C30AFB53853E8 BC1DBB75664EA260135542BE85B9D7683082B45F3C29B2600A04617ABBB171487D0FB0DF 55C79E2A4D105037B5CA706172190906E7E0790BD9A04CBF02105669129F03F75B4577B4 72D1C328528201BA9C0DB07D394F91EECDECFDBF3E79A21F5144291501362ABC34FE4710 A44C4084469378B76636E5C0E8D2E3A0B312397DC710F58594FD6B7C71A92F0561B9BFF4 174CF44D8279CA280F6101C9F73F1163D5F53CBC73132D81674DDC446D3502902727E7E3 8A6EB82C9D185807C7849BC8DCC51B3B20EC5286D7E94D43C24B6451530E336A2EE513C0 1ED32A7FF27C87F880EE75E39ADAD71CE26F252A88F0B2ED6EE94B34A350E148570167FA 2ED3B9DAB4E818CA1AE16F03D9174F373C26CF574951684B8BDFF890312124C4E22319DB 5F423D96D180292FC9D22D60ED7BEE345BE669EE3ED25A8DB0E4ACCBDE32A20E161D10AB 3FE988181BFF7CA0394B97CA3DB866C436B7C5E3AD7C5B99DBB897B6BA4F94D6FF44E5E0 546EB2250293560578864D0AB23AC26DCAE88E2067B7B31E6CA563881E8D5DFC2E1B1735 C52EE31ACCD6702F08FAD519DA4481C185F1AFF83EC5610A76F86AC52ACBF6E006290F45 33454CECE44C2257B4505BCB865813BB3647CAAEB35C87ADF840AB7FE7479D51628B92A0 796F163B7196A445B60002C6AD22D73CC6BCF1AE3EC7E625622FCEE7C2AA5739EABC4E27 71B63B7D1177F0393A0C603C385FD0BA54FC4AB3323835E648E0D3BB25795526FD93AE88 961845EF1D0A3863FD51DB14283C5904744018CD4EFC7F37C63F27CA4B894A4E55A6A177 BE805F1E32CB05AF1D14B9045FAE0304F2EBADEC355A757D0058818220A6DD991D3ABFDF D56A017401B134C9A67EF3B62C3AF54958B773AD6DDBC8FE09F510A155D5D53AB5493AB9 34CDA0A67FAA01286A7A0C88B126E5130C2D47032342BE240C8029F801E3550730281900 CD22FD6D327CA80A246A6A8E4A9D7027EE64496154387698EAB8032D19A013EE73E01F95 6B028FD86773E6416146E825A591E1AC1F5BFA84A2B2A74347F78F064C33011ECF8F51E9 02A5F09C4F4A68B76B00532B862A7BADF0D8E104AE634404E1DFCB0D907FE76C1AD764A8 7F9816064F395DCF7F467ED3DF82E8D8433806DEA2204F6C4EF0891C6C76B29B6B37D85F 8E49044DBDDF9ECB3307738B9909A5A97C38963C0BA2778ECBAD3989608B630BB3013829 0E9474B379F18C9DAEE73614D5E78B29B01D287FE0DD8FDD537664AF9E8AB90293E29FB0 34CD8A3A235DFA23507840D9D066B63FF7EFF1102BD130A60792D1F11745DB8D57B44D5A F344404CE102C4AFDF9ECA5813F86BC9F54F5646C681BC0D9C461FD7AF047264084146F3 CDE5DFD4C945C65900DFDF03F21EF9A17C19343A3FA38661A1813A7CF640D3BF681E79CC 49D136432B3E16D8E349CEB2B9A085015884F7CE2D31015205DE800335EA8F4A8A7A119A 0D809CED7EDBB21937B05AAD69937C17E340864F2D86546F0214A54328EBE17EFF828894 BA59117EF9C01A1210A05B274FA4D5CE7A2A651EBC7FBFC0C5F774A421BD2884FCAD257A 71FFA9955043667BC2B7E7793BE57F224CF0F46D5D9B2457E5F1850C04A45B6923A817AD 89F248DA7DA177C2BAB4D516C0907F6A8D94C3BE1E8D14FBFD525F7E112B5AEE04146ADC 154983FF3C43AA65AF00E280F1B48C6A093D16F9D5F3E37B0E35F56FC9A685F29874E9AC B6E8605992B47819CC4E54D9CBA7703C1E9B204810D36960B852538CA690F428E67809C7 C3DBF084E4911031CC06BDF030243DBC622B0F8798BC26F69DB2D4E51E7A13AB49D23BB6 82610337432805238FED8587A7D08AFAD4386738144813875E0F51325BFC3B0E6DBFDFEE 1DEB3FB397330DC8CC0DA01B13703066D83F1D132F6FB826F00FC4B8D9B5B9E624E79AAF 38FDE3B84A90B2ADA568B5B44787E60CDCC03051B5B9F3A4F6FD8F9F09F2E9ED0209D335 E580C56A325813CF642A7029D0B4773E9386538F82C1073664BF3483E694241B4A174533 5F9ACFC33ABA8D343326F3F253F741A1BF0D0F2681864C068CE445DCB770A5283CF852C0 55667066F903E3DCFE80D797424A4FC2965156DC642DE901A65FBCA3AF41058197DA1B24 4369FACA2314C5259D35E8933E663833E1123AB2EC17F2C0300D27F74381C1CC57D50343 4BC3BF35CCAAFE46CEAC5025F3691FF6C5CB5DB8BE3C473DC4065F5C67D5DD2AE4D793F6 68DF5A2AA9B50978E6D94D45C3D0115DBF79A198E8688337C01D3828A9DBD55935070A9D 915392A3ACCDFA9B55057FBF0B18E9BACF975731CA0802BDD4781106131BF90CB9F9C968 15103FEE9D6F756B5BD3BC3A87A1AFE786B98728D688EAE19C5582374FEDF2FF31561964 E20DDE08047F7BD29C450129ACC1F10690D7D55AFDDA6FC595005760F95DFBF2495A1812 01E2C241F71EDF206C6C9E9C7044A691C6B65E40F08810228AF73D8BD69DB48D1B0AED89 7E7636B2816FBDB6391876965D12D14103ADFA49A3C892749FDBBF0F98AAC817D4D7B268 A0663010B6C8B54215C8D7310E79F7EC348114B0A3226F4D871AEC60B75D6D6E28DA6043 98B5E140DB3D91249ABF98FBA158EB341750D13B72BB1EBDD834E33D04B740B9BEE30F17 58CD750C3FE1868D4F80266222620167290B2B699A5AE150E81C745DA23A80688B34E343 865721ECFC9DE30D21D59E4B5E1AAE17C00F3F9C428FDF85F8468D178A0E6EC7171557CA E250E0F434D5734C6AB498DB558642EBCF36901C2E4CAD6354B4EB22FD842D182261CC79 85C3DA6796E64BA65693B13F4CCCD806B9E3E74CE87BBD4B1789CA6AC91864278E16B098 553F45BC8962A1F6F4682B7D40D2C30865B0EDF5022D650093B18552E868971337B11055 90D2F2D1E98943E91A092371235E94F559FCC1F0BF8E92405217C549FB5272596A4BECBF 50828FCE2257BCD198812B61EF7E56DCF638F96F5B406EE220440C1675BF22492DEB862C F5311811FAE48E7747DF044F75F1A8D053287B12DB922FAD853151B60C5E3CF881C12FC0 B0D9E9C498D73F96078669A69F69115E79004FFF49562397728D42289B354943E82EB9C4 D6522622F77784A846ED17AC5967A07B25F1BB4B1E4673C5E3A999E79C39A9798E353EB4 791DE4EC138AC53D2A74836EC99A52DE04BD33AA2CD8FEAD200D326DFD4961C08E39A19C D8E015A67228B05FC0E9F59FC73D18BA68F30EDB70A91C8B3BF001EB16564AB4E9B34EB5 1B5AC1EEA75D29331B6AF33373F8A065F0D0DF57A3B0B0BF0127184A79F3315C62BC6FE6 8F7B36006FF99757667B0701C98CBF3927B4BFE1B67D99C7D00562FE52E24E58C2341BFE 6E0A9DB0E9196FABB891D48468B2EB3C48200AB0126162680742A6A10C0E86214F81D09D 2417727EF55A4A021A16B8D5971B4357884641803B89D11644A36491AB1487AE62DC3C45 306430C357863DF3B6FF8BF8DB0190828C6A8584FBD0FAABD275D464D84880CDA5BA514C CE937C02FBE2A132EFCACC91270133127206FED856F9E05D1CC4EDC82547A6E159C78476 DC1907281ECF8FFC1DD069648838EE0610FF9AD59468A2012A4245772872273AEB77EA78 FA02679288109B4A256238FFE7C2E2DE33FEA5B0DA17EF3EEEDF4685590C977D30525460 7E0E0C606F85299856BFA30CA1EF1E6CE87754D700B37A113BC2837EB524130D0E1C50CE 2853AA1718D7EBE3AA3FD785A0AF5694DE33969B3320076952EAA78C7EFF71CEB15ECAC7 0EDE37FA02CADC70204C68EDEF72B8C785C600E6E5DE395E105E9A9FCE0A86FB202E28F3 5D1D04E6FFF5B893DC9D679906AC051A6D611BDFB5311790985041F7363E25373293BF1E 05118B98102B62E7FF206ECF2312FC29782E60E0EDA2236430B4F682F8C438E0FBC1F219 FCBBB1600BDCF8AA532B55DF857BFF0CAD427A8ECF54F4F616A9F50BE4736673ABF0FD87 EE3F21E4B61784E0A700BDA75622980BC517AB03F00C7DDB8869662AFDB41B86FE541F26 CB87106E5548EFA3C6E6C61497A500413A924D624A1A29B6D3643EDE613CDD4C2EBD2575 B51C53EDCB32C2DC3FD71D441C521F0F2A511EC128AF471250C3346E27EBFB816D84A9B9 5F1F58694A4A60331A3EAB8FBA28FAD17DC1FAFB7B82F7D2BF1E2978D917192B8AD79F33 E01B5B1FB55397522116BBB1654F80361AE02EAB1C12FCC271E96B9273342B7A6A435D76 0607307C0107E8D42695423B7A599D86888A8702F48A25EF5CF97A861EAA28F84E6D8628 BD81BF44CFF9D58BD6D79488EFB52EBDFDDC174EB141220CC044938B15C9FC8062AA3B94 6D4B5D5C216A53DE147C5FD14CE1B20FD822F78B42554FA894E6C06A0C21DC9D4D906C5D F4817977CCBE1D25C9DB74BF4B6B4FBFC1332B39E47103ED5191EE4E2108690B9E329DB1 F1580555019CAD04632E2E80BAC67F376D9D4DEB44473FA36AFA55DDC84BE4085200E9D7 1D968E1AFE82746C8366A16C8A3379BBF90E91B9A9D1DDC3024EE26DCFB70A07B1A2287E 8A677538D0D9B89A8955149899443AE5641DB6939E9BF639484490AC15139AF9187E4169 4559329DEE3181C14AB63FA18CCFC5F062FF4807F8E2FECD3EC3A70EEF968848759D8825 E0C4C452416E40A3604CF5C435034E6B7D6270D0DE5A23138DD7ABD7EDD82793551A0E57 877A7C232A3DA4B6A249ACD307956DAD67876B634EEEBF880547566E5421574CF52F1DCA 8AD0DDEF0A1C9AAD408CD8A1F2DF5DF056F5B2B869B7FB05A737E4FDC4E5DD16B3EFC4C6 D65325A0829B2EEF0AA7A3C3D38368B2E8B60349D77E99069D216BAC6BEA5C8BDEEB0796 DC47ACB4792691C6492C637AA3D75D748FD6BF4F8F5C3A9461AFD357A6DD6C61217AC0F1 3E8E4491251EE5F8380C79E02774BB25ED16E058430CC7E57490F23ABCEFC2B998F34801 612D198F7DF24D831EC9A034A04D7F74F8C95669639981E31C110BDFAD64BBF196A33897 2A340D5AD13CC6FBB2C40B77B252F9174BB52F2616239FADC0A04C04FD7AB2672D0F2657 7BDA30348F96E05832A4CC616F178B7E087591B2D79D48E23AD7C4D40915A951ABD2F6CC BBE5B47F1FC9BDC3A6E6C7B7935403223CC9F4B30A52E24E5804A94639B65400A1B98B0E 82A40E8E263BAF6C6B84F206707914C0C9E88EFD2BFC1D43D01EB3E13B9D32E7DA781B79 354BB9C1074590717775EB85A9668C54FCEA8905528A1E78DA81043CFF14BB28AAF0655B DCA685B76D4B25BE988E252110054FAE3111579EC8A7C3D0BF9FD18262E1F5CF93E43271 B31D225B2E9B6656749FAFFE55FD1E899C094E0C1AD8B92C60C1E9F5A4AE3ED457BB4728 B38029CA2C19ADCABB5293493D9CE083C7CB3DABA90423DCC216AB18637B4FEEC19CB43C 30468CA6141243463F134FA010C50A5D771C3CA3982CDCC68D9643FD60B6F6239A78EFC0 9A148065DDD3C86354281E43D5791DBE0842E89553671C2B88880097C45E9813E0270360 68D748C1E0603281F2FDAFE31498F9A2E185FDE15F4C1CB6B34629660A8365BD2A5B27AA 8CCCF358E7B4DDE8F6531D80450A4B82C5E756B05F1EBA041EAFDA048D21B96AAF250A18 239235163A1DDDF471D6F9A7D6E003B3AAFF48C93B4A1C7045279B930011ECA42DCF327A B270542DA265389EC449C1E1525713A12A79ADD9AB5EFABAF870269B3C159C82AFBEEB53 D876A6B160F247CDEF55851EB1A9DA302B7E5D9F949A4F612C8F49D748D9953D536DBB3F 467D7BAA9E0EB7B35699A379FC762B98EA630941B0BA9974F1533350C6A0BE0CDBE98D9B AE7772F068B491B20C94D471DF79283CB02854C002988F00948FD5683D7E4A51D3E888B5 AE0C3F9398B7CBCD0B93680983D72BA61C14CD45DF9021053839EF8E7837F6DFD08959E0 7AABE0F6551CD7386C5D328918A6B2FC382B3D14F76CCD1E2BAE33ADFD7FC0AD037FE05A 062AA37576DD75FB63FE8B73DF21B3F16C914CA06F1F76FB9576B6F03D5B4217CE629140 5108C5A581F3D59CB7379E66DB74B7986D19872547571B3DB1960DB3693616680EB22B7C A7533DEA30BBAF5974C3044979CFAE8BDDF3E4853FC2F4239041A91001813F8AE905753D 581176011BA0BED74616D95FE5DE3B1636A5703DE4929DEE42A31930AF2F7F3A8FA9FD7C A27B14625A47EAE7944A7B52B3848A96C001DADDD88DBE0D9FC0F2EFADF1717980B1E5A8 E499DAAB1CB95C1FBED63F68B402AC131A80208533F0243499630C4D7E83DBC57D772419 61F855EFADD123D79358B01C123303C7EBF33F590D26F0E61FF33C478BDED8991E6A6DF8 5A14ECB85DC7F6D0D1BC42D0D5C07A02B47C5533172411783E39AEF846D286E496D3C48E 593C9A6B47BA84B3A046A112CE73F632CD7C35B9748F61B8E2FC981CA14358CAB7ED7BC5 DDD3F4BD471A971DEEF4E7FF1DC82D97FBCA7F079F2036D061D872A800666B35F4B6C219 40BF112D8A5A19292F94694BBE2A85E10F1FF778560FAEE90424B6A90B7F47E67B664EE8 0A6D23B013111E3B9533CD0BC5BF7585A91371BC360F57961FE35FCD8943BA6B50695FBD 0D31DE578529499C26BA4A5A9E387B90D19CD9469F95FCEFE83F295DAB985913AE9CC01D A693C98D6323AAACA3F2779D0078A2B49DE9464D71169AB4D3B263C5376BB0AFB7CC2523 D3A1958B90C14BA1317A81868DBEADFA06956BD9704235098F1549AA67572B331B243510 99FC2E5A53691E35F17B2BA93CA202D88422A128291E8BE566F67F1EB39008C947A4E94A 1DAA9A6CE317762ABFD1F34993EE6FE4D706D600F9E801CAC5A4C767FDD3259893BACBD2 E1254B949955F12D5006C0A696A322E216A13770A44C89AF0A912BC615FEE85EF2F36B7E 0CD3581A069D7B8E2D51575EF0F52267B22DB5700F42DC8B7BD5AFD53A0BD76CEA34629F C82432DBCFB21EF1F73AC14E3F0E055F904A4768237D4D6C215A2A0B4657CE355B50A29C A1A17F2CCE23C28EBD0E3AA271A628E97CB89918157FE2830ABAFC7A3498FF01E26EA7E8 7D6225CF6667157C367605FBC0474CCD61E8A24789CBF380B2CD1021FAA7B227DCEACC16 5E8AF1E9FEC6D50C8B6DE603585FC19B1BFE57D5E60C5079AEB292C4D9A561C7724F2687 248F310FC3E885CA57FE3E4B39B5E7CB8F1D18099B4BEB5EDA4BE4542B0E1375921E8AD4 F7A67C5E8AA09DF3AEA5A3F8BDC146CFB55B0E17DD99B018975C62B2F73E02B5D41F4AE4 400B7DC58D1FF710230810B2EEAC05BE8F493AF3641D090DBC1273536FCE065E1775DE10 58F193CC1578B5EE01B20EFF63A6DA0D01BCCA68C3485C9CBED1E6CFF5BAD70B3173EFDF B7DE171E38B13C7990F4D21C49FE8F2F86597961A65F0EF065EB2DF80523C43D4D41AA2D C4ABA4424CCC86AE2CF266F29C959B757C5C0E8F23A26B1F0561629402A72C01C6B0FB54 5A6407A28DA0547EBD16665EAA3633B6275D0E21EC72A48CAEBE7C41F9AE9C23BDFD699F 8F8CF088137401C627F10AA4C3BDEF4EEEEE1C13582FDB3F046FF846E9B19CE3E12CD47C BBE0B5AC8A1061372738FA6819AC64E2943FC7E502BBE8B563D08B92DDDA662AEC2F8556 30CBEE6C27211903778A911246793D90037B9CE3BF0F9F2090AD081F1C6BEE6B1A15836D 4E1B6258BB82A133A4B881424A0B276B1F69E65F120B6FD8800A56D55D33C53191F48E4B 0EE86925EF1A32A2B24B91C176CE2436E4402966EABD0B275CE0290BCE6E175DD2AA4DB6 BDA8B9DDD043109971EC42A2049427D94A7FBE310F789523AD899226CEAFBED2377C6044 225DAE426632BADAB47BBF99DD7994C102ED5F8F47D4FB2795DE94B9DF20B4DB8D5D0254 41207C82902D14488353E64293E4103117C859694A42DAB6F9C7D8091F047120E1DCC73E D8DAB6CC83A68A5610B0480B6D0B8906E37CBD332E9ECEC7D8A42C3B43949F092A8B2D5F 68000B20164500604B975A5C676BE2E1F66FF4C17D0D002420622F783955BF3170AB6962 8C0D0E3F503F01A355607EE2F5ECE608795F09147BEC80DFE66E5D326C7F4EBAB12298A7 2507965B7BBD92C370DFFD0CDF3D1FE991EC702D89BA8286DAC492B66ABD6BDE6BF9123A 371B2E757A3900270364A9A321ABA9303A8FCEBFE2CEDEB4C8B93F7EC1B509B8DB352F04 69916C2B8AD59CDCBB484E3E0B7EE70AB5E43015E5AA02004ACAE468F9972443642CC3CB 7015B8A49565824C992F30F77E7D806EE8E17A91203966F7CCA2E60AD83EEF790574E770 DD55993FA1CDCE89031DFBF672DEB5E481F312A157DA74BC7AAB1D6F0573C21FDC1BB419 3C1342C8F17978AAAE19B61A12E2237DBF7DFE715CEC68965E4D7B0612B39949E27F8A6E A1E644297968AF95C69FB5136C79FF1776642E08E421C08562511C1A3AFF1E7C69E38DF4 A0C753E20AE2189887E48E2E740BC2ADA463D68A7BCD47E1FAD2E391D8D8ACFE4C75E748 D068B9FF7035EB9AF0B0D91D0A8D22A58E33A57E9AFD58B1833E565771C1B5E4C8DF80AF 3E1D24E1A0B2EAAADAA62576B98C64F47DF56D3F4ECA1D698EEB7F64F1EFCF9F8BB756DF 994840CA2F18D61080F5DA4E30E5D6D67E335CA805F2DF7FDABC46286819B38A6E58F865 36CF8A808917E24003321D6DFF4045C1163D4DDFC2636C0F780362EB77CB66863CABFD11 BD04B90F35829A3B9D87CB8208D84F7177A92B47BE88BC6FD59E232CCDD7979FED1B0B28 0E14F14AA9782DB17C20AE1FBA679101A12A17BD86131F0604930C369E0C702972DC5AF6 BD1ED9290AE754F869FB15F7A35454287F75F98E845CCE15271DAB9FC95F6B52FC9ECA11 E1404E89BD103FA314043B7331051F95E08AF3949BA05C2F9E22C40F98434565D8C9F7CF FD4734796F88ACE19403A297BDA6FF57796F367BACD628503D8ECA71E4FF67C3E88CD67B D1901844F9CB4941B5182F4E45E1467D5B0479D69043F652F3778919E249BF7196B0D94B B145AF62EF99B5CFEB0F8C4211C1017763E9B72C9533299F5A4C3C439041B2DE468543EE 587F345FAE87122D03EA9014BE889DE3F2A8FC86C4CEA0E3FEBE7E59F051EC6F4A5198F0 FD119BC9C8FAD57C622DF0B588E1ABC722C8DFB133FD2F539AADE0C424259FAA01D95CA0 FEEBD0F9E6844FE32197236CBFB2CD1BED1FE4FAC603344102D675CB55441782E196AD64 77B3D0A8FC9763B6551BF643BD9FF8E3CC85605BE98D3EE1159901DD75A00DF8235588FE 02348FBC6776F9993350297509924FE36535476576A48C0466563BCE4438A7C46D006A9D 4BC2C0C40D1B23D5F10511E3A8757B0CFB10A83F84AA235EE0A404D631656F56B03B4E4B 24651C7065BD7EE69E913B938011901AE43023C0977CCD438AF89A7783C1B37C1729F675 7B07F3A5A297B75C90FE5174F2B1961BBAC1499E2D7355F3DD18C5CE6EFA66FC1A80CF09 6F9D93400365893F43BBA6263092D8D652E89B0A260C78A99C0CEC0097AA9D6A5074527F AB89E10E847D1FBF5EB05DEA0D8F27340FD16F46D2692D97DCF7E5450A054E568EAA3328 E7B551C53CF079E8448D43E22C4B6C541E4B60D40DB41225CD14D77997B1B54D52AD56AB D79A2E86768A260B06AA92D7C939E88E5C8FA152E96364F54680E23A47B7AABDD79FB822 CAB06943DB71CCBA1C52167038D6B85939A07CFEECEF6E78982A1D9671DF698E814D098E 20EAEDAFD91BF5982F68D7AA8B3AAD4E7C3106AD7AC0EE9A7EE7EB29642D5C912B11CDCE 127A199EA51F20E8D85AA36AACE7A9713589064575AC00ACFB6255C93AA5C9863A759563 5CE500E0414512BA156883F7EB85CE8EE767E71CA67BB09387379F955E0A2441384BEC82 C1C0432B5A109FE8EEE9C4C96F2C1309C9586C2E52BD2A64D2B9177687E3881F9FABE882 B2B9370EA864E410E49D788EEEE1BE222E68C38C314DCE50355BB18557847AC02CB189C3 0DD25693055B764DD54F8CDE9CE72250601AEF6530BDD47FBCD20BE5DD71C69CC57050B6 D1B59F5D2B20F1EE972F20D894220F0075A216DB33F7F17522020AC4DB418EA60C65FFF4 4AC17C0EDA2105CFCB660B47122DFE33136F01BC8C6763560AC6DBFDB048762BD917CBEF 19B8658A16BD665C4B85AF471B7FB023C65339D89AE09FD1762E8FCC47CAF93C0F2332D6 1F77EFA50C6F3CB22DA24525FC61F04D4D6665584D794DBE107694E1FC5146BB174DC8A3 B57444D81EBBF19DE3175BFF6EBE700A58ED9DAA227A77D6F3847EDED7FAF34F3656560C 557F4826B15579ECCC37570CE408B4B623A7108656B650B6ECA20D31BAA8CB41CEEA1A01 9F252DF423F250A2554379EC090E4AA7BA2F15911053461E86F0316EB3EE3DFAD5491DF1 48B513254EDBD781FAC3EBEA563CF06BB05BEDCABAA6EA8B95348BB7E3F1BFBB912C9264 18E9A72EB82B035F1809CAFC66887F9096A0CE0120C31B3ADC2BC7DB80BD9B318C0D8817 2A543CE699EF2CE9D5989D5E805143D1F37917D25ECF32328E2BA18F15F9FAF1DDD96DAC 57EA6F883E9FB70DA2FC4FC013A29E99C05157C86FBB4E3E112DAF2FCC7D2D2673DE61A7 FC9FDCC4C4A5BEF8ADD30FBA0BFCFCA733184506032CEF84E6ACBF8B9AE13701A45E84E0 B095D5C80684D2A7D20CCB1A1E531BE887D340BEFD9D0503333A91C13259DB9386471EA3 0005C3882E70C50785CC0A09238F1F5A1E7F77531EAB02C85EBFC0030B20A92A9EADF775 4DAAB6822CC86166CDB2AC103B381A3A61F4C6EA280DE2AFD49AF71719D5AC59D18F338E A44B06EE686900E5434335D7DF98AA760BC2E37F9CB2C509BF39502B08600B4A10C43F66 9388ED3D1E9C8B6A8321C4FD0D16963A7B43B2872F4401C3FDC6D84B25F7EA599848F176 CBC7B02C9A0191C5828F9705BCC645F5B68967178610E62C442F5B3F4404FB948297A90C A563E6073E11F1E0035E5B485086AAD784C910D6D54F5A080A7FE36FE7F3E51CBA065894 4B8FD6D71437A225D39595A8B5E2BF9FBCFE8232C27E45FB5B1BA882B7699C024A18C9B0 D0F2E868067B3E7DBF742EA6171355D7924F8362E536C75A430384C610EBEB84EBE8D77B 01086F81901D431AA9F80FD2736743A17489AA944AA69B83F7ABA623EF873A402DBE8BC6 7E8A161D73C312F41DD2252102799D5C8134F6160765B169B36DE5C2F4B9059CAA19CF63 11B7437406F950EAEEBC3DD73B96689C8243351B952E0BD053137403FF95067046614AAE 04FAA4D0861ECF8F1299EBE6641AF30433594E104FD0B57471A7539E581C0E3FE08F07DD 5ADB90880D976FDA4C6F02E555638B8A8E30FEEFD6D7C0D6AE9832F4A358403010B9A5D7 8D37F84DB0DF5661C0582B564C2B1A32B68B1197503C8FE772B66C715CEDB52878461606 B5218FA8BB545245374E8E9C8DFEF7FF24A4CAAA025CF851EC4F353C80C3218364B0249B B0DD29BA35F6F8165260704780BAC1A0A25DECEB1CA8EA0F98D21447DCE1E95DE97E0A3A B4A9D6A41704AA5C66F4895F1C268C881976D5309BB7F47DD12EE9623AB29AF6D3EC6833 066C04A21367EA1ACFE6A9C68EBC334AABBC79AB9CCF9DDF416614A51BC4D0A752C6EE7E 7E800E7431400BC8DF6019B68A87665CA7ECFFCAE2605B21D31886C6F4F733444A668312 AE6CB4B805ED7427361B1520ED446F5B7718892D10CDF75DC7F9E07D53977CA8A7632F85 A646703374987E7AECBA44D152F9B111CC4DD1414CD823F1B4A4CC35B6469FB19D9F45EA C4B37AB32DB64FF938AA0FD50E408D8D2C1B02102C872491AAB61C6C70A0ABADB07A17AD 0948B1795DD1D6E4DB491A3775BB84ED44C91567775FFAF60C83649C72A4971F997C83BD 23E27F8919A40A34BA0E531259096C653BC4FBA536E4677A388BC185637327057CF70374 68A80755DDC734808212A7B27235F117A35944F78A2B02A0FFECC8EACA45D2F6320908C7 D03561FCE1DFE768BEE1E66E38CFB3BDCD079E0672257A59EB8182F95FB30B45CD234ECE B5C4BDFF45CEBFDE9C5427EE7CF4529F661DD2090107576EF324AE7953AADA4BDB9393E4 2E40FCDB40B5A491B2A4FA89A0DDC09327F8407F317C3F0C9051CF1E66016F0272494977 2FEC4609F33F66E6FD86686E015D6B08515B3D108D349C65322048E0AE098B9ED1D9670E 2A81D06437FAACFFE27FC9234530A6436BBD9BF9A7A9F7DA0CE6997F1D9984772DAA3BB6 67B4FCD2B2F7AE2715859B5C0048F8DD7C8E028EC2BD43CF68CFD61F5F624D0FE2264E4E 4CBD37F3DDBB88CBBBB9BF5F53A0659F73E2C57160532DA04BF8B65A450FDD9D26B9AAAA 3F4754E201EF001531278C016BBE9EB244820120D23C0EE61B51884D3179CC25C95AB8C1 71B63935F57AC40F8BE5CDA61EF378E2FE5B7E25F77656ED7711071B4F171CBFBD4DC98A D512CE26DC21A983E4ACEDBDE7B5070A5EB692090D226206AFE53871E2D8D2BC66377F7F 9A75BABCA1412EA66227D8D913DB982D5E8382A588528DFC77354FBEE466FDAC9EF9806B 1919CAFE6A9B0977F07155EECBD9B362DB36E86348E6878B26794AC7B01AAA1FC3382D51 6E9CEC74359594FA44EFD49BE5170B02BACBE226E8C8584485BF682DDFE7D36D7E9B3009 3AAF64C612EAF5C924EB281F08B0B5ECEB6C255C3BC9E036D2E9635F00E51C9E7A5B9FCA 18597A0BF423C123AC35B5C49A97718CBB54C46FBAD776A4E3ADEC0F60FE1DE46B9AA668 9B0B65D0C159E3B05D54C57BDB758C97E2FA9CF3E93D7A2763CD5CBD7F2EF8E64838F919 69DD1106CF3E3B5C95344DB81A37C88CE3F7A81F2DAE6C2DFF5FE08FC11A076C5BE1AE84 37996FC21AC332EE7A131C9D6B4086BF84B7727F47039ED4E3714D7B7B05D7E906950307 B98762E04FDF620FA6056F5410A4E0959F8A09191099BAC991DA1A5E1F88D4FDDF451E0A 939534C719042B530DE7847F861F989CF33B4F0CF7F74D804AC2933BFAFEEFAC2FDDBB51 E336216495ACF8B7A2A7081E7A60C776257B623E140CAC02EB8B15AC735068B0F42FA112 6A1EB3884DC5A042A6C6A437CA0E3EF1CC0B6FAC2852F3EE933D873D4847A9936A219C7F C814637296D006CA577C921784E369ED710A48FD2BC5C2BFD7864E438B2EC35F989A9FFC 9F9F239F96C42ED593AF80BDEA1D514C1B583B422C8C6097F77AEB756567FFDE7601762C 854B092D78253CF604E946DC0614C1082B33ECC5C2FEFBFFBC9E4E636BC9E53BBF4E42D4 0CDDAD9574A4E66B6D63BA83147BD2D6AF639FCE8E6C2D8594C5641D789C9AA1D8647A26 E75C50B91576BFCBE1AD525D237122D553967621D354F011B46E7C25B834CCFDD712AE10 A29567F6A66B6916CA3A01BB4BB66A96A740E7FE3B82E1DB3D8601B7BEB108721B0D902F 86DFA8AEFA77000E43D7FEC3BFED93C22261E467DE4B21109702582F8B7FC6FD00EDFB5D 5A8BF3514CFCFF2695567DA2FBFA7947E083193E1B70AF9D344346661DB0460EE401879B 2A19C67359623B55164C0C980D009292C68B3AACE6789326DB1FF748892AC3E66E0F2023 40A021A27EBFA927AE0072806E28E8EBC7DFD90EA81CFD92C19B1ED66F38DE3366759D0E 4927E0DA2DF2D9F9F4BBF3454FB1BE0C2069E3680F73128CAC6522BE7488C00A7F078244 D6352F6C038E6943556A55F33F60960EA729724090D86C5657EE888CE96C5A9D3D328F30 95C3D90B96279FCEEBB8CA455D2373F1FA2D4928F4F9EEFB8931424839BA631675B34583 02B49151E8D0540CFDA02F0F276136A8530EFF8F0CC5C03AD997B4F1B99A29423A71A992 2AA7779B2FDBE58F8E44D9B89962B0C3D29216C5A6BB88D1A3D056EC60BAD26613C2FCFD AB43581759F6D9F6F4742D1A71602D310C1706E009F960190DE7C86D38A339FC492E8A53 D3696DB9598F81319365E80494DA933C4031D2AB820383DA203E895EE21D10244070B078 91D3D983965B232476B0F6F8D160E805D2C58258CF433C57ED88D27501AC0820A1F7862B 6A5C1E92FB714A31F39A3E8E24C4AB345127B31303D361437D8C7681207B96D1E0541B91 375A908E94A7937D0BF0B1CDDBA791FA6CF9A64C108EDF801FC78891BC58B6A3186BFFB1 958A94F58CE17A7EC39D7BF517674FBD705D922ED923F60F15CB9BE2631F065B53103E4F F239036F48B73401645273ADC4AFA5D8AA45214CF1721EE07272EBB1047332D7576C399E 31A59C20312DE6C6DE50B0147A81B74E727F16270DA3BF9BB3FD9AB538BC41A40716FC4F 7AFE149B63A2367829ECD565FDD85E9B23CA427CC254AAFDA8864299815F0FCC5A4BB848 8B1AD3C09329F200DFFDB35809FC0C5D26EACC2347830C287EF9A163D08C67D9D919BF90 E89FBF295ED39298362DE47E5932C26DDACDECB2BF81BFFD48EB2C87810A8E9E83335315 5E82B9F1955A1CE2EDD4CE0685A509F847DC691B8261A4706B4B9EFFECDDDD373F5EBDE6 C1230B92DB19393AB671451E237C51EA75DECF474293701E32EFAA57591623B4E9AFF8EB 0EEA1EFA7D5755FF801FDFB7B8F01987296AE49AB4B6CBA9BD41815B686471F1FDA43673 7F4A4DCC356B1573B99B5359739C2BDB34D5EF4E3A8025302A748714B7622E59D9F6A815 F96BD6F5A7F0E1EA10F51679CBFE76DBCA7E60DDF60AE8B49B8D05E8E7995A8AD8781FD6 4B2D6897E695DF85458C4E0EA81493FBDAEF1DB1C4E4FBDFEF21476B8DB8A67D74FF13D5 C87028422F4DBCC968619A16E474C8066DFB2B1CA83A10D0327CB1960E83D01CAAEEC8EB 22E30A1FB8C70890DCE2414EEFEE549DA7799C7326771A4A81AB7086AE3B9D6099D310E9 6622C92C142F0DA65DAB0E9649685D49E4D1D1EFAA46A4C15E8567044169F0E348262D3E F830BB3F203807BA9EC58D5B48D2BAB6116DD62E819BB86CFAF4536A39C73181044F2A33 D3EE41E4E28534E0093A39B207D7856A89BAE2C7ED3D5230B62825603438225997832837 FEA0BD9E02290063E6FCB9CECB8EA441C82F74245AD001B10F1C123860B98FCF0FD79A57 3D7881EE04B3FDB0EFEDE14CCF6023F74B6228BE891BB3C799D85ADCF4CDE4C1B82BDC90 45CA1FE7136A336948C788038208013232E7B1A11075F2CEA85198B28BDC6255C2362678 580DB24CC6EDEF396110631AA6F87DB4D973A6219D8F8A2245BFCC8A81233B2764358DB4 EF4187AD91CBDE916C55117D83A734A53F37D69F9BD656474FE476A0C4CB12D22DB4BB11 FE7A7486D473EBF27DD515B5C53938D56D040C74A004562147B6E285B5855F746C750B04 46F5A36CA9D824783F197ECC5B448D2D8E63A1CF3E980BFFDE4FEC51552AD0E2D884FB02 C2794C4402979DD92D00C619335F3F2DE47AF57123E5FBC38A02DE5DC55F6FA30B2AFA0A C0A807EABFB2D00267D54BD5348E0CB86BC4F07AE86E35F95BA85AEA72C371CC8CD5CA68 7A31430A190E857AB0294A4F6B5768AE26679FC2B966377C411C2F3DC1E007E57B24FBC7 A575E208316F39210DD2A2E1DF7C8AD840243F97E1E2BEDD4CDC68D367768E0D41004E58 09213F780B4EC11A05293D0B3447578C74D42F4BF136AD060A2D69113C1C212AA3399456 210E3A604C17EDCF7A02859F80E4BAA8841522DD1E3BD8EBFC491D1DCC99EEFB7BDA79BC 0BEE2E163F625227AD165FCC21AE1355ED1CDF8D63C3D40DAEF1857BC6C06B4F573418CB 994B30ABBD38C95038062D5EB371F2D231A164096BA38739D91B35FFF49A37C745DE5381 98B409507E4780D11E5076F31552F287C63A4719CB11B8644E9CFCEDDA89858A2458EE4E C520456C3591A4FE7B9360626B27D06003FDD392E058F1679A5676A858C2BA1CFA0E18F2 FD63C6632C7461EB34EA0DB5C855548423D54CB6576056D5F580C4899E0E6D475B0E38A5 3A6658439792C9850BFA2D7938562BE4E48838198DE9CF055B86FE42F552A6702C4FED3B 8F87C9D5920361B15E7E6F184A9E1409BBB07815C6CAEE391BDECD18A2850EC671EE2E9E 869D260DA1CD9465D49F70FBCA4C5D4308AEA7AA432883AD18DE9E00184EC95E12B9F4BA D2948685CC3CFC82FAA7307DC14BAD7CD966ABAD372312BECA81F3D463892F436EB9F269 82A23F936B3BF58D2E95FF4C4962A6972733E82E79C7A8C6F216A6442169EFD829DC8277 6A9C81BEC1982115ED375ACA05D193821A252481051EAC324D43E0D957FCD1969735F600 F7AD5F2872DBB138B3BBDC45B1459D86665858C2763CDED9A08DEE4C6370F69283461FFC 94C1A0416C32B05C19F66C580EF8DF3A10D82C396A7AC2968D9411B04C27584293E67B95 9D271609C14E900DD60DCE13975041F1870D794C5B1F0BACD6A478C28F9BA72ACE1F93FA A6AA339453E08E0677438AFA1EB26E5BB3B27380462FA4F219C2A3EE6FD3813C9811B394 180B09DED887429ACE373DA392FA714BF15F1E52276E3B2C1F4FB48C532E7A2B944D8577 4542116B2C3566C8A6935790983F19F45689BB00498EB542FFA5264C5476091F8B87567E 510D38C7B58ACDAC30B2FA0A505D41EFE8438332FECD106FF015148D1ECD29B4D9E0D162 289056F720387BCD6F8DC72676CAE8AA54AB03A8EA0AC2080754C299B878A2BE85E8DCAD C10142325A38088C8A58306D0B52943AE01DD801C6625FAC05B0FB98AF8523931BBDDFDA 8EBD52C1870D61DFD82F5AE24C6A542308DDAFA460A6842C295545C26783F149EFB3AC3C 45424AA88C263B7D0074D00DBC0EBA0E300B0B219D38954ADBBC91C8FB4BB21BB5784BC2 10317F1D4E65D765EFD41973CE8F8F4FECD0030711E817A8F330CA6997460B044CD60379 5CF556B025FFDAF5E70B0DFC63701071D47A1388474949A1F745784903102515048B1000 47678A63D36662BFB613C5FCA1DD96316C7DEC2B8D2174BF865DF9C770ED1957495B95CD 778321B2D8558E4F3F400426D034DD392645AE662B028F5016652B4C5F4733628B461E42 164CA4C410FDDB7BE0D592F07BAF7BAD4C9B8C2B18C1178BD9489A74D354402FE86034E8 7CD09DF8E9DA583BD0B2FEE83D95CF15C2316CD5FFD4FADC30E33745A1E5F113E206F1A8 39C47018739537C64C71A82B72BBB426AF03172E78A268A8E78EFC86132ACED617350A66 A98DFEE2609644C573D47AAA516725ADE00C64C3595499B1834FB5C02A975E2F78C9A276 E274208D826E9CF24BECFE4C860A1FC774131525D3B27578165F549221D8532472D027A6 99BBE6D9B332D997223F1701A049C7DA55BA5D9C74D6A328A14FA5E9D603906E5965A9F2 A89D5490457FF2F0D915EEBB0D7E076CE992962ED97AB1A80272C37ACE2B7DD25B58C0F2 F42C6B4707636A7C33EEE0403515F4B725E7BAB75ABB043BF0185B171A0D78556DEA7184 8D2E13C8C1F39FFCEBDA782A3289ED0DAE685CF63C8F9C7953EA8A4388D57FEDABC55E10 1D5DE24D80CB22CE5225F84468807846A33B9C9A527514EB43096E065F6ABCF27CFC716F 5538C642F158E750CF4B91EBAEBB4033F53A9D1DC519554A2DBD587EE46590A11EF99E3B 8201032C77D3BFB6E5516FBD7E8050EB503AB9B29B3797666C767243E174869456BCCB46 4E352700056DD915C26E995D819193311E7F818582D08B77A47004CB74A837678028F127 C60485F260112ACA19A8CE01109D7559A661E47BDCBF4D6F294705E01C22C4258950DE95 58CF77234ACF9466EE077F499C159880DB1FDE6DD7E94CCEEC3C3369290963905916E508 8077EA3930BAA8F464AB006999712F27B38696128721A80069BE58C3811714B6BDD074A8 26706D62BECACC28896D4CFC6A444255523918F0A1B01676F73E3607DF0C0EA541D1F1B8 A453F5F16760B64EC8AAA66367114068159278D6D430553BA3BC5A8C5C005C00CA1C433D 19CE59068EC2DF4B2A5001A883BC593973F0C2E6F05BC79FF913E8919D30B8F24DB3E30C A60B3E392038D91FD1C7EEF7555CA3A61FBEC9FE8F3F21EB99DCC3CBDDF18AE175FA01CE 4897487B10BBAEB075B76B74251C83690832E19ADE0110540182622A44AA805E0B262A1E 82731A101B084F6E69C234D4DA53926C5B5B7C88214F368CFB6160FEEE40EF1566EABF0E 33095A256218767C7D0DD695C8D248B5D041B80DC6772270CD73EF78766E589139C4E04B 1B12D28DC959F61A40D7CCB8C0B4FD5D06470ECC5DAB7FAD5B0F6ABDCC57B47D3CB01168 FF7D997B3DF6542B8247976D62F1D076AF5509D8C58939F050CA96A403585697428BC1A4 CD1D3E97C93D68CD0B6500CDEC30360282EA89593294EC87C5E20F374ED6AAF90B4F256E 733891982ED378E9B6753265F682227421AFA5B2B583F080F6E8274D776AC49ACCBADABF 249781DB837A251479EF5C9A267CD24B1AB59E70C9848EC6FDCA3BDBB89813B2C9E0A83B E2774A649EAEEA725F28E3E37DA483F770AB7D5F2583F53ED154FD84180EBFF2789BA776 7522BEE4F687900313469E1B2B3A4FEBCCCD5ACB099849AC98E09FBB7D71B271140C925D 689B74FF6B1833695BD1A617E98DC03994ABB41608CB0F2D04E9978DBADC1468300EF216 4983F6906855E8D876C7DF9F53863424495575A28D904462D9714ED6121192B846BA91EC 3EE7867441322E15B8D2D3A5BFD4670BB2EF432BE69C222C870A64A6586784C56F02AE97 4174F090FC13A59382D71A756F457643E374474CAFC6812F2BE95A17509404487C27BE07 1EE079B12DD123D840027699A108BC759CD654B2F2C857D4B9247193DC5D4AB04604E3B6 AEC5588A1496DF4777E7903D301B659976FDEC221F3B008565830CE2D543B58DB6B71798 119C384A00BD541540AE8978DDC02145F48AC4ACD0DD164D4EF0A593223DFD00F372A172 63655230DFF27BD9F39526C75657CBC62C5983F166BDF460C0238C99205DA29B4F25FCEE F9804909FD208045C2016C039C0FB03DB5D9265CA97A27DCC28F43E15A295654CFB18438 AED93D4E86466DC2C22601BF94D0601989A1DC6E51869F463AC823707F71EFE7C204F692 2814F2C3AB995E467D12B42BB1466521B9F3F15BD7B48F4939D8891C4F1F51DBC9915B1D E5AB77689B62628D47D3EF69AFBF1BA0D16F0664A0D37CD0A083187009A8C94317BA02B4 CB3DC8F5996E603D6A59F341EDE0AB8902BD257B96CBBC85CFC678944032ABC636397726 92F821DF0E57055C5A36ABB6CB0B2034B67BA9018D24E9E2A268E29A5A1F80D0DBBBD8C3 4BA3A71749058CB66D180FFABC6A9E169E607F1F98375652B476A35F1276166E1610F122 02DB3C4B7A3C8C5628A4CADC82DEDEAF931DB3B5B3C187B09F0AED6E59098BD49A6CC205 191E7321497511935C91DB7585C4E3093E241A91F260098193A94A5FBFA5BC29B0619741 75D975DD351E181836E8C1A64F05129CCA4B173D6102701F2E3C80859F0A3045792CEDD9 E7D94B13C8D312266F85A95EC471E9C44821FB24F9C4A6A26FE09EEB1335C9A1AD845D48 D39D877097EDB20D6DD32DB220A351E572A212B266BA1C988765465A0D29DA9C79642269 C5AC7363FE73EA4F4B27EF96C5078C80DB9E3B2D62E88FF85F9D2F25D97DD13414242C82 6CA7CA0C49C94AF533E5D537C9B72097F875F8E54363D370C273B41A4045EC1CB68A7302 1A8A3F0951C22FF9357797D520D77413912C5C14D90D2658A4CECAA0BF23256487B4D9F7 03214E6AA0F552AD61F26AA5C37EE2008E9573FA471B16A1D7E473F9F8D4F0385879B6D8 1534E8E2A1E96DEB26B0B80A390C4FDF7B62EF86E76C1CB825F0434156EAC5DCA27C2020 224145688F97382D3FA8A0DF9E3D41D82C1222D8BDD41C5D50E52932A370658457FDFD82 30B887B6104AB12886F404967F99F2B662D680B330DC1F909ABFDD91482EA38C1098803D C50BECF20B1874A74DB0175EC68B446954982F557D77192FD9BC312B662330D3E88ABB05 5132A6BCF4DD62D6EA3CAFB69811822A326F290922C44DE9F6FB29C4C67873036BF12634 2AF2874BCD3D8FA6613BD85C828F78E034A7F663CF3E855D803381F39D7EB20B80E27851 1AD108089EB216CD0EFD845312D4E413C6EFD7F954C3E458B9AFEA966D9033C1E18FADAD 164A287ABE1A1B76B0E81EE0EEAAD94E5A18F00964EED3C2B51B58FFFD358B72AC09F8E3 CDE50F49BA362B2E69EE0D4DE122F7892F842C0A647C2AC5A2B5B2CC9F1276E779F3C859 2C8EB627801D82B455EDD69FE68A45F0AE0FB8546D54B143F7B148FD170554D7F456F028 2C87F9FD7E33CED0CCA85B05092A9E10F21FD70D1F7523E690228F9A86C7B62096CAF8AD 95091179B40A19061DAB0BE7C4EFB3F6B0FC180A1CCEE1439282581824394FC1032B7D71 16AE62CD287F0994B15BEDED405C0632F43961211E6A5E15AFC821A3462D60AF48434540 81740C2AEF91BC3EA0AE2DC71DC762839DE1141B60317AB1997F694D96A49776416B5192 9409D5559140AAF824A2F920CC75B9CA9582DFB5AF8FFBF3276FFF2B3BB3E0A62C4655B6 FEC11B4667D305793259D7F1EE90C4DDBCD9553813FA7F72A8E0C5B6C3E649E2CCD3E1A2 F32B2CCF1F09F0A21F6C0FDAD8C4019C1C716B6C1C4356B8A0A6672AFA5000A3727AA17D A7569CF6288338C1F5E0D910969976E7E6347D19ADA247804F6567FB2C03474F22217A90 8F2A28DF294DE632F753FD012E91CEA83C6983FD8B0AB3773C4C366634D540DD3B1D8541 AC4457A03EF0762ABA1F3FCCCF2202A83BC6D407E1AFDC0DF1577FCEDE28440A50BACA77 18A82BF6D6BC74E492B686CBD1BB16D5D71A0854014AB7AD595E010A1892B44E308363FF 20EC31C24004FCEEA3983E4D24A82884A0F118F89A0810BF39B3EFD4283732E87528897D 38AD4C9E1AEEF2161E1A043B9663E6DA0237656418631166C5F8B880F4D6DA8F2D51FFAD ADEC0127F4223377B96081CBE9C5B18D073848CA9BEA103693C74DFB7A3F80D2E4091926 D13898C28A0375D99C5DCB67BE1357971533B4C9B61D5D0001D91395B63F36E5FFFAC7F7 5BAE1AD4A2382A5EF9C770A888E3ACAA2ABA356F738A3A223C9E7A81C2F703D8BF899874 FAC37BD9831604914C1AD8603D00884853C930BA44989E876E8B3648BC6C666B8B1A140F DB9305BF6764F4662238681AD78F83905D5DAE1A36B996C8581E8CAD3CBF773CBB125E30 9CF795218D399B7C1E868D90B3FEEBEA24CAD84FEB620509F052EC37CF0B7723321C32E2 E7F5F7F7DFD6AFF5547575794F7478D8B6749EC00D0698B3DF51D15041A1E270D91C36D8 ED354785BBDCDD32318322867483B0EEC389816BB2E5B2F9A7248948DCBFDA264DF725D6 D55FB4F9ECE841D277EA7A5BCB8AA3F8A15E44B4490327966BE9289BE537E8D3AF4DE701 C0049CA1366F4B1D865233233547742ACC0C0D44A8B7E993422509364F731ADCFDA71043 18F39647576B03456F31B2F5495717649F75E54EF229BE0127D88A7C60FD54F8C814D041 E094F837EFC190ADD2569C4E27B2007C2CA46C99B1016F6BC5C734FD5C9DD75FA28B92F2 2E3D6B8751F561F9968FC8CF500719E21EE9771BA54758BA7150C9B59AF479DB9037E0A9 BF4BC6D86DD6F6CD3877E2558B708467659E3379FDB995D761857D560A298B7B513A477D 62F4B4D5A52CC8426CEB17CA7FD0052EA96D02F7D7A036201DB61133CE46086D0FF1FFAA 6C8CE37E32F882DD8BEDE27789C4567A16F6588D2A44F5F172278CE75906879947B41C41 1F9F1BDDDB4539AE54475F967E27A0A0F9D1839995954FBC23644DFFBB040F72120A4330 F9B74B3FAE49C5FB3E90F95B99DE74F53E3E4BE052DE566BA630BA3A452F8A9482D81972 B1A458D3E45B5EFF32D4234C7EFE36738D0B022EF52DA193ECDA2266AAA389ED9103333A B7B37378DB8C49D07F096A2A0495B535BDA59490FB262B31A2D43E0D35213B66100D9F20 398DAEA1FB5F395A911C32BB6C4078059852BBFCF016BC95C898BFB30BE383E4D8B27E83 F6198FB0DAF3769BE6D8E2A86A1468CF47CB6DBD6D1740B32C456B894773B1EB8395B844 E75F44819170CA5CF62E0B962BB2D2A88775B13C32BF08D09D38690BC305BDB033638E89 C6CDE42D29EA255D414E0C52ACA75DEB1F1E80B5959EBCB91933A18DA16F637CB1F84E13 59301D44396C80E62F26213AAC2AF6215CAFD99FDFED2753AB692CB4CD842D17EFB7112A 742B0B91D6AE33A538116D8BC71B130FF2709BB2167613C073D048BFC5B29709342D7643 C827DB1574B1D9665D0697F2B52B923AF172D5DF5A134E8A33B3384FDEB7D120AB8EA1FE 6889D299091C48DED5040B861C34E0DC75304E3558B297CC501A5B9A239548011F7FD807 3CB863FAD99B62C47C77579A708ABA4CDD65EBF264C6B3B06B8FE3CCE9EB8D1EC41E60C6 7D7A6E04EF55A260CAEF09409B529E345F5DA63E547E643F959EF9EFA287F47A9F030C09 32AF4684F253B2801AB3E9EF1F12591551A51B8D83C614FAB1331D7C2C81259556632F43 46F7670E33155BFCBA255A0718D90F29425B2551721F5977871494BCF06A4997B5B5B4EB 4E3C77A457A76F8463E4002C40C354E5E35F40F342AE456AB2597CCB9FD280A36CC5A060 CDD9F474E9CA125ED3177D2984DE7451B62960ED843E04B6744BEE0B956F5318B508A5E8 2652C54985CF603DA674C4FB8677CADE7B8E9F06536D81FBC2E3F0365A968D8B6760F075 1221E9D48A05806F6BAE39C4AF5CCEE1D470186DD1B7E15384FD8211B6F9226CE01E9DD0 A2C8600C2797FC85A0A26683E0F7AA76D84B09860FF098A07CBF1BDFBC5ADC80ED138FCD 5DF780D4FD92B33C63824BE5F51187246A05B69B0F54298C4BCCB4C028FA9BB126E4E72A 27650D6513F77870AB997B5839DA6DAF4AF2921F04D909350E9804707B3B8BCAFC80ED98 7D7A82E924DE3027DA3FB83F01A1D610330AD2C18C5B0B9C3E872F8B46B7C6DF61649AEE 63A9A4BC18F312CD9D4258791A7A52F6BBFDDF5D8B6561078EFD14FDAB8F10614AD14783 888531228F2CBA18171ACFC62EF20FA743350085E06B272156B92615ACE1FCAE60C26441 58DD67BDEC9162096BDC22FE247E97576AD7066F25A5D50A6A09B277409484105558CEAF F8CBB62798C65D29795B53228F3878DC1B3CD6F611E7BCFD593384AE21E2CA86CBFD0399 B9155AD0CE8074BD4ACD388A14AFEA32AC3AE7FB7D4723B501977E69776417821EF47250 FD37295709FFADADEEBDAE7154E1A33867E59311002C399E10130DF2CDC34FED5C9F97FD 94539C6C8FF7D177AC27B70AFFB8D934323828F8B6C8248C39FC4D3C693213CEFAFA78F1 F8305B753925FBE2A0A2EBDB2CD1041465AEB9C2AE8D23614DD33F891950F8E371D7EC9F F3B766B646038D6E814E4C2C235979FC2A3EED5896298DEF7A5F26F51FDED71AC4868E46 0C8E725A15C4C1B587EC5ECA2A555C031A2D43EF1D89504A5EA2F0A9B0568B06062ADAED ECA95711C363DF015CD6656275475E9299C48713812A1200B4EC33ACA4D0922994441224 38317D2B11DE8F683CE37B29AF14AE544151D753C039B0719CFF788BB338736A901E3007 CE5E8C6CCCBBE87BC330ACBF98E5F13A50CAC54AA910EE5C8C58869589C8FB208D6F752B 3E039DB00F333AFFBBD4DCC4AFBEDC29DF19DFC0C7F165EDA3646A5C1A345667740DFCB2 1881EA60EA88211F55457BAC57190A20894ADE572454AB0F26B3E7D7D6638363252C23A8 8901F41D2C504B3B7013D45C876ADDB8751602C0E901E5E12353E79B02DFB1EAB64D5C35 0BA5B468C04EFE749D7F263771AF1CEBEEC362D3567693126262F29CBB63304B5E22C456 31947D444EDD8E7C0A873E0CD212134195CADE7A4142BDAC21F25C3C833EDDCF25F92412 D4905459A59104822CADD2138762B31F5E96C0029B47ED765B1CBDE651CDA7B61C6A6E30 4B307B066DF504630E74563DAB6D69CCB4F9A14F469E22CDE47FF03311742DB0465F86E5 08FEDB9E4D5D5A1AAEB439E2283D393AFE5E05BED23AAE8B1E22945B3469BFC47438F50C DCBE4C0FE32E606FDE23C443D6FF325E468F47B60B238698B919C9F098807C137033718B 07F81DEBF6DB741478A969A5EEA21F0958E1E3C05B7FD77A7682867635B94C9BD215BA0A 49BED5AAEED972C60D1AAA713DD7B68116CEE55370255520AA8754CDD06FEEDE69668488 191263A8A4212056276473FC2650F33024A7B38A46CA274721F79EAAC153D2F1CF464AB0 B7ACB24B6D3E6DD39FCCFC0BE1D41F7F577432F709E7EF264F72F68A0D1BD34C5E105190 85DC1CBB08B18E3B0E3CBB73B93B32841C9D4E4C2FD8B50F3221B7D555E12C3D5D57CD77 A1198886CF5A3242E87E30BC3D5973E0EBC63208952CEBAF0F8369466F40FF7EA63E2E8C F645C3D437F3B327C4ED5B5ED8FB21D75B4ABD6547B6D06932E78CC409F6F41691FAD3DE 0FCD0C4C77BF6CC6361E3B8736CD077CC4D5AA9F01F71A9BF336497A349EE00AD360F759 6C15A199869F8414204AAD189350194E5B21BD2B6E1CC09CBAA5BB3CBA542E7409FB1667 F5C20520EDABC90B1986082D146AB098077E02FB41B1F762133B9E836D6572BD5C6E98F5 B84C5CA6E4478E4B46F5BE3495B82A948E2DD9D59AEE54139C53D673455346AAE660153B 0195C51816B592663DB920A87AA3A25EAA284260A139884422C3904E4CA81CA4A41221CD 52B51D2DA3EB1C02ADD00151B833381347D4A4DF6F3C7D3052841FC83393A1D34DA7716D 548183819C7FFA0E76687AA7EAADA71B9307052DEF1991ADDE7B16541D36A55080162296 CC3C2D989545F94A944719738910499F4CB638433C3B5E44E9ABF7DF82C06F85A1D3DA93 8FD9808F49751030ADA84171A6AE28CE2C93714C5D7AFA285F4639B331D73779FF9F04E0 7E890470E856D9A6331D97BC296234300CA3AAD230C2975B58719962ED080C940F70D596 A037FAB1C91B638B50781FAEAEDA75170AE5D5FC359B73F022A63DFC7104377EDBB00BD8 49B3030FB6E822DDF0461D66A9AC0FB96D572755FDFEDDA6ADA1789D2BDEFDE9B5FFAB52 8FE2ACED50EB9FF9BF58443C8F02740AEBBA62C38D3D2FAEF7E4984B99C5535D3F93CE62 00A14C16E985787BF017BE67E59B7B3D2E57C96B20AFA58898DEB9263B65EF29F6160704 D4200E7FD6E2932D7C94FF6CE180EE969759FC1170C4CEA26E2808E5872039BAE756A8AE 875B0DB673610CE13A631AE6DA16D059832A7EDBC96BA262901B89BBBB4F2EB8D952DC45 B7E1E44172B207EDA48D4F0646F02CDA0F403690CDEE1CF803AE12518D33065578385707 AEB9C28B856478A0D50E50EC054E3E982542AC60EB94B842718F2766856EF0FA4A46CDCE 664C023BE7F8B3959ECF87CEE5B2E482EB02E4648CC01BF46411AF452415930941E23A23 C7C65760E6C0738C59FBC7D2F1D68CBE9AF65474CE52316ED5DE60D9EAA992FBEDA1D2E5 A8817668A5AF0DD7848E0E1902809251F2DB4061C69DB0E1D71676513B160E78799B2C58 015C9B22BB3AD9D2E6A61A6089E95FAA29FA75DA2B2B883CBFA66C7EEB59CBF61580BE81 D897D9F3398B385512449A15D54050C422DCA0F2273CF3F6DB3DDA590548EDAD25A2D908 DD5E4A1D5573718A096B2689C28AFB7717368C6AB91E948FFDBA74BEAB61BDDB9092D86C 6844BD6E708EF9BCAEF3CC83CA4B22FCB7C273BD2A201676E8F5E7497C3BACFD98E517D3 C8AA1384BBA4FC98B0BA8540024662E52407823B5887804E7197D81380D7FF6D051E9779 8DB40B553B0F23B8E4C1FAF95110D5C59CF917F2D2E4186F7DF21F075805AB0A2A6B0125 1ECF605687F00CE09857565A1685CCAB4C4B1C1C408BD683C1C6E5C2D2EA886634ADCC81 3F3A5C4D6666DE33958C9D6157192727D8AC9C5B862A08F67D8B8E52E53DD37B5708ABDA D07A4475B7170B9F3F39A8F4E799B53FA37AB762B0867948D553B40236679F684715858D 6DF6994A91BF48148FF54680246F31BEA0B2A68C8A95CD6B312A3EAF782E7D1F43B9BAA4 84108272496A82155B06E3212D4493C50753F07F7EF0AB7CF4E565F4E5FA9EC2ECEF11BC 2E1F7A33BCE88B531967CD85419F1AE978748934D044A06129B7F43647E2E77F8F8B442B EB4C0F9C2C90287901FC0F796A99FB6679D0D873E83CB5C42FF65EFD411A3198A4F45789 AA412E6003EDB04C560CB0E547FD1CECF6670F071425CDA0E9C52E1C1EAFEDFBE09B4C8C 6545B7C5792100A899605614C8131EE5DEA381ADE63723DA1EBB9FE1865B23765158FE68 80C5831F4B5FC1ABA79958BF9FD6E26B230DB0E4D943507E56F251FCCD4069DF89A1F1D1 6C65FE75A1202C9F4CAC196D0D2986E9B74BA4D822B583B953A8E1AC6D76C166B70F1C91 9773B288F012FF0777AA15BE49E8B932A2AB8CA27924D3ED99E53AF6A9B8B271F291CC89 E0742C037B8084BCE4733636FAF9EFA951B5FF578D246C00FAEA92B595FDD513DD918004 8826DE11DC25A00BAC1DC6C6F6BB5EC21981130B77753D5FBEB2752A4B518BEC5D00ADA9 C34F5F898DCAA9C9F6CB90E1E82395134FDF562A5469C9D0AB6972B5E757A190173BD577 6B04613BCA99A3AC5FD9844832F35DDCD942E0B9776F1FB9477E109461B68EFD6611E958 E948E5CBB0B97DB69ED50D9F1CAD683D53E8E52D5251EACB4D3B9AA9ED294E71373AA7B8 B0671F6F84D31617EFA513B218F2BD3A93723FBF67868DA8F07DC4EF86AEDA7B20E1C167 17A56D1D9EB73B660B82E3DAE7EB8AC093E50B9009743276AAC7ED6C2463D7268810A317 0C170AF68E5DA440CE6694ECB16C10AD1FA437B08805273ABAED0878C36C6A62B2D201A5 58D95920A315641E325DBDB03D8A219E2CC4C14FD3FCFF1E667CE06CC6E94287C169BDB5 25BFF8D9AAD872D51300A881E2BDA4FD7821342A37B8774AA1880ADAABD371849EFD1CC5 61D5D1B37501E9EABB12913BA4004B263DB2FBB09A92664F5CA3E9E8755489B8ACD5C344 AD7E3E714AB03AEB3366D0F508C5C4574C126113229A8D822AD62F924CCAEA18D704B31B AE6A8DF40F674AA4EA1C896F6F7913A00F4A02E69267D04759EC7F96CAA1A3387684FBF5 DB75D4F2E35CD2D60892254C9A9B71EBF92DE5FB4525AAB0133D1EB7F594729F7633FB6A 536179F06A197090754133459FDC754EEFE12008AF2678F2F838646DBA4D82C01FEE67E1 073C5A77226DA8E920B36F0595DAA8BB61B7F6B5D536AEBBD5FBF04B1F7777C0B8B14AE9 440B6AAAA3F04D27CE917AEFDA964B23E00E93544D8DC58E19BE2C348042D5357693FC58 6930E52413A5B5500ABE9C6E7631B8439F8468ED0B477CB9BD5BD95F4D698342600B8658 BBA127E96A5454BBB33B424B2BA34B025E3B4007DA99A54D7E3FBF551E5E2A472416DBBD 817855EF826D02A5195D8A5A20872117736FDCBBF08CD995BBF6C5DE6C39DDB9B6075F91 0BEC23908B5A97F76960F543440B20076EAF9078BE833FEBC2104D52AF959B106BDD0C1B B25D1031E017E87A0F864C0C81EA3D162B871C8C8919168B2D5A8870BE8CD6B0EE532932 2F3380F9AE7BF102B6658B38B2763B7C36D521BEF278CF74EE1EA5E0A60D9F3B98B0FDE5 693959BD6F7654C6FED6B4E2288044488733D661A510BEEE891C409F00C3E9A947D7433F F99BB836865ED4621B945B701EA5355E9CB4F2357D4AE5ECB621AB702A816C935AC61E04 4D61CE13DEBCD51EE73AC884B1B8E6760576333A59BC13F38ECD023E5E16BC4084B771CE 840D74E5B4E760CE660E5B1321FE9E0813796DD516BE2E8CF5E95909D7FC15E9844270AA D71E0BA3CCC8F0B55EACE03F2BFE6003307BD1A2DEF8D3D058C6E648415A6F20BE3800A9 839F952FE41158D38D1B4D25B29A142400F20CF29B90983B0DE2F614C1FF7DBBF1A1C57B 68C1C4EFBD6D6C7B1F9F969FCA90CB12559A88A119F17CD24A80B1A3AA9B6A0EC38A787D 882BFB7A84D7F56186B7725C0ACD38E2CEA791EE12CD5B776A37CA66DD8C095631E33AA5 E64472E8900EEB66219D3ADF5AFB4072165670DE44E39387F1813FC3BC924F8B6A96979A 3094E4A6B55E6FD759E2EEA6A48993918C540346B8FDDF15097CFBA08DA9A6839EFD6B0C 3BC96A74EB62842834A3AF55538B2EF659227D86D69A5C71943A7FBD7C21539C88B82B7F 6B6D5FA583FE129B97D23AFD82E32F312EFF9C4E67EBD19F7E0792F960830B5B6A4523EA F2B99B29AB7D630B964C97582A15CFA87FD0C9BC34AAE7775D773B30C598384AADE084C9 E6B6380BDCD588398789B78DE5121DB7CFA98F2DDAD157E5BE30D62543AF99E49902DFD5 109608D131EDB3228824C5A6733A242F76CAFB3006CFCD2A70B570EB24C3DDB06AAEC65E B2B33BD17FB2A44EE684E9471FA91B2D1E491F64D5E03F282F76F088A8FE7E5FEAD1BF8F C56BD6D662AB89210234A31DF89EC0E6E4E30308BC06521EF33ADAB1BE8555399BB204C3 ADBF7E4DAEFC3352D0ACB76BD90FCD9A4BA4EFE61B214A23DFCAC206C56E7593DAB16532 6B5421855A3460653E448BEFF777C2FC80A34756337BA8274C3DFF12AFD1D6926728C7ED 39B0FA452EF6627F1EEEA47A8199204305E206AD1F2DE1A08EFCE72958862D80665DB816 2FE2C9A42B67BCAED1238807A7951D48B5C09713E8ABC1484D2FEF80481A1E06E8907687 FC67FBC47FAEC17EAB54C75063689C046DD500D45C44A35D406712AF22C4BF78A8119F34 A636DB291C9EF542DE9FBB5CED76B0016FCCD9F1EB6748364C2F48686FB6CB83FF38A306 42B7D7372283933D43880CC683C15D43B49DA66CC1EC68F30E562E2192F974A443D5CCBF 47942226BCBD29EB8C441C58E40CD6B9E6A97FAAEEEED368DAE60358ACD32F0A2C8E45DE 9977121FA4D1AF13B24FBA04DC03DBB775C3FC7461A609C6D117C1F101CDA591B81D5522 11547ABB409859B3FEA208AD271CF68B25A5C47EE115ADA7F06835FD71FE261134AF191C A77F95218A6F67E8AAE88849B846916F7482EEA03015AA41206F368E78FA470A6E56E00E B757B63941ACDD51A710593E8206F33F435366A953478E6785CBE3FED7198C3278F9D4CC BBCD5956F6FD9F2DAA380E5ED9701949AEED49791363F6FB3A0C005ED9EC12727C178336 8A5850FF7759B24F40357F6A0CECFD695687363451309CFA60920EDEAF50BDABE44B78A3 7D566FC4FD02C241B08A9966C3CEC4100983E8D5A2064AD5951F16B04A5595FA16DA1142 D7E88F5A6F430E2C38A23E3E53A1CC4650455F99436DA8B78EA41F3F0B1EAF4C27145BD9 61AF31C635DF4230DE1C0B9365043A12752444025C4446F13C67C1A8C2D07572D93A01C8 0C9D4F688DF1FBD4B8E65C2D7A6351A20988962111700557EAE46A230F773F97FDA090D3 748161EEC36AD36A67416745A26A62E1FF894AB0C7BC9222854E2DBD3B7DC55D2774DBCF DAF36980C1DCF4235B42E8D45187D2CBD1FD594150ED2E470FC834F986CD257B064C08C9 250E9186694F8479ED741115B60F4714CB338E65AE2ACAE418D2138CF9765CCC196B90C4 CB75BE2682C2EF9E2490BFA9A7C7470670ACAA06D1EDB6409EF79FDD15F89AE74A261954 F2B1A2FEFF3F5B4BA0BDF166EF2F63CD6976A747D510AA1DF5FDE733F8C1BA30EF919474 CB1E31D8FC845DA75A6EE5A41C6556A52680806C9D3BD69484261E3475A7C2E0BECD5C51 ADA49CACCBD3F9C6E507AF8743E069A7843E5928F82E0E24D7A7D0301694D77AEF7C7D6E D4FD84124BF7ED246ADC1619F20EB192B2070288077AD75AC1FFEF5BCE6D1EA64F9D6F09 26623382971AF0A41128A613EF60B689F6B115A9BF106156576FD51BE7BC484FFEB2D3BE B1BE1140F7B47B5B7D13170BADF692AA496AD09608E5D7B56FEF213650684565F21A8D15 C3330DBA474D376570BB47065EBAAE9D079ED5BAE7064EBC648307C88F5BBACE2C75174A 663967FEE903EF23E090988BACAB74CBF41D1DA63BF79131626687E723E974E970CC858A 4CC2EAE15EBA3599B81A4A00101A3D85EBA5438321B998A6E878C60361F0F3390C5059DF 020231C2F869C37C3D5A47B8E8B2E9A01C7C019510B720CD40FF671A22BD3B22F84A386B 39666875F6CB68587D2A188942DB0ED5142A0BEDE0ADB0435D3BD6C3C4F9729E3A583958 23ED76C1AACBBEDE9712D1D8412E0A12CC244A9F47533021A8BDE77A313E99F4DC9FAC2D A5413A8F3BB35935786A85BADEABFBA1E6E3C2A7D35515653932C5F6B76B383B295B7BA2 31DDC5A85A186AB4024B4DA21D95D5EC0F2EDAB8A630EC417F71EAEE2AE910F32A4A6F25 40BAE7348FB4E598A04692608E03D0E173DC252353FF964E9F3E956EFDD6E125D855E308 F99B74C6A80649ADB7C4CBC7635376F394C6F77DF81D1E54A13B39A04017B3D18385233A 2B3BF0340943C219C4FE8EA7D9B0DE975493C8953FB3D551E708C0F229B5D85CCAD2A13D 9D9455EDD49835EB4E3927E45371AE9CFE7F3C6ECAC0100B531BD22411D5DF2AAE34EC3C 21E58AD2858B7929F5D3BB0B29372491083EEE08FF385B3979DC634A240EC812E952CE69 F101CE1CB4C622726C001F96DD24C4F35392FC5C49C078A25BE2A2A211CB5D2521E6D224 DFA37237AAAFF0019E6D6009A3CD112CB76F579FEC08F63A473B5F59597E6FE0CA682888 E1845AA0D573D2D4C3558988B3892B6E8269DE7FC63ECC991F50ABCB661CDFD43957DEDA 1ED6A70CA2C17A363F2811863DE1C0B782175204152D12A7F9DAE3040E2940FE512178F4 B1F3AA1EBAD139A7315AD080D2F6326774A0EAE4F479AF37BEB1480A91EE172C45A91CFE 3E53236246CAC04B3203E6509ED01FD51BA0F5E2B0EF2F22824C49E55AE441CC3BE2FE6B 99DB9362C9DF575CD04848DED397E12450B3A22A507EF91E70FB6491F5C6CC7704DFD55B D072318C7D9F1108BE3340C7F3DBAD5E93CDF9F15BAD5A9D2E10ED8BB1DB7F3597857C38 81DF7BBA32C714566202B3D1807FF12013685A7087F96E29247C3FF08ED13EBAD66E0873 499A11D4B4CDD37232413CA94AA8F89EAEF5737E4411E76998CE9A3986EF67C529CD4771 7B388EAD7EE05E1F1F118C302E6562571E1051648EEE22702BE0D7ADE2F2CE0ECFC70A5D 7E42D781DBAC8A0EB634F60BAE7237D8A73DC524866B74ADD27190EC9D84D9D8891E7756 5AEEDA77D4B87810B39AB307D9012553FDBBC35C0C5EF7EFD1E8D5589B0428AE1F860ED6 1909A54BB74A523B1E6EA5CE9F8E61F95B00D320D767046BFA8CD0AAF1AC24E263DBC2BD BF6FF6199A09E0371B1EDF2D54DC49076F21590BB413F047829C50B1B8207CCA7DCDE612 5883CF661895F84BF5F1C2250E1D34346FB0822233A7C1F05EBCE0CC98D19515721FD4CB 14448078CB207B3BB1E3B34970B13C8A3EA37222CB81CE23BA8E8F78932B4126CFA25049 633FC42EB70B09A056A8096C17B0BE6584635B89261CD28D0817889A63F5C4907AC16F9F FBA722369F9F7E49F438DDA0464E33D9C25345AE426DBCBA0CC7FD63292ACB5186828C29 30599A4F255D1F43172223A51FCB9C871DFE1D25DC347CC197589543A14BEF518722B4A5 36E64D65B775DD106F159B6373E5AB86973ABDB16D4150920D24BFD58D9CDB3A565F9CEF 368EF9FE1433466F14B0FB3FAD357C0602D494000CBC262F0CC353C421CA49C98A90A311 60ABDC7FA9CA8A084A6F214B8579870B9FD760C9CCD88DCA5226080295C7ADB0240B43E9 F1C383CB395B3B86C7D122B8D8ADD25F811BDD7521367A6644437136787085928FE72210 56EFFC66CDF5F7E2E18B8511DF13F2C2498D5C8C129AAD2E9C36186B64EE1D6C69398D89 1893C54BC7FF51368A1D77BC8D5E6F18008BFA66395579F2EAF526B6B7977C0C7004794C 2EA5E8175709C91B485529EB2BFA428C4ECAD6A2746084B4E0FD1D140A09F8C9E0C33754 0A9F655B2E8CE804FC67F25DEBA0A043B7D93794A48FDE84E3F6FB0FBCCF228A9745FA6E 8F0ACAFE16B5927951D73D4736B15773DE26BD72C4C4CF2632F77780889D40580B866C7D DE36004C086507E59C2E18C9050DD86850A2E5E577C84161ACAE2F0788DC203BB02B7D8A 4CFAEA80F0EEF29A9960530AD014E74483EFA56198B13AEEEF4025FEC803962310744DA6 9958852F30DF7ED7846017658D9745EA53ADE69B4A08B8E49655E51BF676B8303AA8A695 54CABE8511FB246541BBCB9D6E372805B29BE1EA44D7F9CFA6B8AF98F31B9D1A28E7FFCC ED2DEB1DD99AB0E61D974F64C1265F7A003DB352B8D152770B86EDD60060C4F94F5060B8 C7A57149841F82D1DD1DB8F8763A0D9C4B03629AA7EFFB92A60519F4CDD5A64EAC46843E 8B85FB980E87A866CBC3115C92AC3A7AF9B65C3674B0D8C33B2D8A30074345ACEC5E2B86 034CE776A70E6325792A359EC413BA83AD428A9A08709F8DFC29B7B2876696F66E37E49A 656E5CAFB0062E1F3020B24C4D0782D64B73BD60213E66E97E4A2A1F2FF26D02CDB6A081 D362BEE0A099F0AC2569B368DD55491AE2B6DFE4153679E412B632D6B9B1741ED455525B 6D5F58DF1BA2185291622759A8D2B19614BF6BBC9DE1582D831B1C577E73E848E1787E55 23A6F4CEEECBE33594700EDD1597F7EFEADBCEEAFE5E35E21CBB84B77853C3540DDAC774 AFDEFC12BC3CC10130FE2D76E99555C00A3056F3E125FB4325EE31EC3B3B29EC116CF302 29068F4E3E23411F10D4AE97B10BCF04A0F34858918B4BD99119D8498C0D1497826EEEE1 93F3A3067A893D660E7EDDFAFE3CD3E0C8FFC5AE6AD6192CDEF09CB341F832A1254BFF64 9AA91FE1F3D339E2CA6EE1E2D042DFF3ADFD450DCC59C890ED64B2A629D0FC285CF2D97B 42F32CCFD507969C9CBFDB330E1027F39BD4D2ED053A1A6A612C3409BA0DC976F8BFB124 D656729B982C3068E0428136977BA83CC85A7E6B17BA704C3C0B3F9B33B2034626AFB65A 04A6544C33B7E61AD1000C6A7E97F3D3A92624745B55C8075745D33A9D8FE4F02FA40E7F 9B06E4466F105D3DC9498901F5EB8093FE6063682326D0A12697E13CCCAB44444916CD26 5048A7884A85D1CEA8611F96911EF04A27891C06597BC05226EB804BA00728C3E36CD490 B10CECF7585B0DE016703307EEFDB5973A746E410D36ED34B80316451E392940357732B7 E8DA4D1A3D4447688EFBD7D27A6BD884609AAD7268B5CB68012F7B05499D48D9243A9F9A AEB4156E97511B20EFBB3F9B61E5B87CAC08B486EB33D4A32F7716D195DFA1F76A4B0E50 68001915FE336E27410951DFAFD64922EBAB3BC39223588F53D17C6BD2FE77F1451EB91D A75CF7F5A20A4C0B67674A36B1761B7664FEE883BDCF2EF27AA8E101592A2061800D8D78 EF1AA29739FE3766E04B2C1DAE3862149BEA987C50069CAF2C190A3731AC1199F1527CF4 4411F64C0A055071E2F1BFE57E2994A6D1F0E491AB8E630C18E5875EFEF766F025D40232 109DFCE506E28E39F2FE1C9FD822EADD3CDDF0956F569F7C5B435013A2D349B4BF6021C6 F0FE10C175AF923F0F77A49E6D48BEA8305F4ECB64B087A0EBB96C0312FADDC39BD727F9 463ACE8F46E43E06CD3CD24EE4BE0A80B33215857BF632096F51D30AD7F044DDB1E30B4F C7014B6EF990F47B2C59DF2A6AB260F377B176CDECE8C76919A0F7180F720BED19FB9902 A26F4DE62E0AB466C88505A4C338DD88A56BE06B0FEA1F5AA34F4EFCD9986CFB8310AC6D FEDB93CA13776A04833B7908A069FC1647971E33DE261E463515AA3951EAD9118A0E2779 6B3B3E777E636BF8B5852D890387ABCAADDABAE0DDA77738198190CC4D86285BAE51C74A 128DFDA729BB27A0492070CD5E084579C8CE5778111D91ADE8047AC87B859BE7F5D36619 FE353EE474C513C0B38F9E2F5732D952D538B03BD01FCCB8C9E5AB192E86187C8E442D13 58594C329BEC610372D5F6FEC67E3C9FD56276E682132034D61D11D5C41DD85EC4C09B31 AAB837451A82492418251DB2411F5974566F8952AE7379FDFD87D8C6377BBD59E2B5D0FD 0CEAB4E03C5B03EBBA01492FFF496E23D0208ACEC4A55E4FA35B76140B767CFEC298A822 942A82D1B9D8FD2F10A219431CEA6BA3662E06C33CD5B8C4847A840BC3AE166ADE394379 89C509E436DA29907DC50C2AE50646F9C865346941D6CE92137F1F9867E9430EAC20DDA9 263521617FCAF1BFA8EF54C7AAB8B5329725CC363982142EA8C400DDA0DE402A544DFDC1 D2126D85D4384D8A8250E39B0CBA529ED3A4E1DBE113E1E734FDA51787E852B199518B09 3B6F38C266FEED3624499FF99CE2D3D12C2E213E9F243F9BF4CE75AECC8A3F5BFC8CCF5F 38B7D4F6A46EBC735EE04427AF9BD1A5D45E66C3210340058D589963A998925863F4BA96 E21B5CFC18938DB9537E64F12FD21D055A132227761E72C1EF31F5B44F2405B9F79F0399 987FDC2ED35B3487E2FC3B050B35B62691AF31934204B5E587C32FFDF4C9CB18840E9676 3D789820D34F53F8D806C6F9660A63D55D7AB1AF254214AB7D020645E225C0184440D30F F85B77C33BC6434248E3319B3A0438BF3A6C1F409FBFE141F78542FF47EE25FBD0F014B2 77C466C0E4B3F090F4FC27C377945B0A74FC8C95C1F61C58C156FDE8FAD500622A5FC09C E82F0C5A8574C72735D257C0AF4D548C4B2834FD34F3905342E769B84BC1C3A82E86EFE8 2157A80252218FC708A30EE2FA5FF179B3DEBFCC52600B0B1D31735EBE6E4B4A4A3A201F AFDC01DADC15A0C4488870724A87F01EF5AEBD93172DBF3475F8BB1161FEEC519A1C7C9B 16FEF30E81B5CF45338B097C1405F4F9CC395BBD0EE60ED098B2604B5D5389AD27DBF787 BD270B0F34FDA0CBAB3C77C367F10AE87C8D89D2B775EAB9FF67F47CEA72D86A0A7A4FFF 48095E5BC73319B50F8CE7610A23541E6D8672E663B1A93F3CD77852E38F96CC30FBDD2E 765614D436E24089A56F772950DB4910830537264B7EC0EFC9056E69D486CA11E2C61314 6DF78C054586791FB2D4EE0F20027619025A20900B8CFE36DBA5919DA4183A0029BA22A9 C51C104F126EB2375FF32CD25B544250BB4C4A156A85324846EC8ABFFA11641B6FD3EFB9 7251F65D8F0B716C28BA4B86EF04FD395AF2936B320A79C6EEB1B2D3A759D9E4ADB6F1FD 9ABAAD26986FBF942AB9CE2E7247857618587D97588420AF0FDE078D293AF39489426F08 0A6781B65605E00CCF4293B70139756098BC9A35505D41612DCE5DDB2A1546503631A2B7 21E047FA9033976CFFA20106815C18A3E5AF1A7E70C41D022685F8DF58D9703D88894721 8F88BDCB7DBCB77C8E240005D20D3CED9DA9D4B8D26C7245368FA748B05CDBF2CD4168F1 B8FF8E04E50080495DE5574E0C81BF07163BC199DC738F063CDE99B6B16C0547AB503EE1 82890369B88E877839F16FC8ACC312BA6FB6533742C6F12174966926FF09190C9376AC20 197A46BF053E139B62BD34060CC573148F6CCD92A6EA28F4ED23FF0939800779C578163C 05379E5F71D186668F54BC266B228D86C47E09B986CE9EAB05A5707C1B2E552188D634C8 67AE3CDBC146F5DCE2241072CB1633D67AD64846422636B14E55BE4FE20ED19BDD6BEEB7 8A383EDDAC76B3BD0E4CDCE05E8BD3F85F1C068DF041288E0C09921BD589953A43E574EA 479F65CB892504D4AB6BB6F04FBD5E31735DD2C0902B6BACF99C33AD3FEF447B3C59B8AB D11EA9F99A0A4A81FFF8674C685062661C56E516C7261E3113225BB7CFA24A9BAA8F1CB1 D1B56C0B860835510F8FCC45EF06F4C0BC5ED318F8D01CD7EDFB2A1F4380D5664B309016 7C2B816B8193F3D0C9642DEC39B04D7A187B875B75314EDFB23A3DD85FBC9438AEFE1CC3 EB67A076F67EA491D8077770DE9811C1179BAF3D6FC809FE651545EAD8B3B0EA0E00E0B7 610B089B730F9B97057BD0E1155B33C2071DB41BB2B5424276AACD169703505477B299AC CDDB35DAA4EBB95712F369E751D9ACB72D2A1557671B3D03C7579341767CFD557B1A7B6C 3AD086E3597A7CCCC6281794E48FD8DA85B0E9FE391B68781ABD89817F2509BA5DE61B9B 84E5AADF56C25844AAFAF25D4AA381B8C872DA0B49269BAD245365C85599A29007EF6836 62ACD77A8DD7A4AFD4E4B3C497BA50E60DEF6AD0050EFDA95AFA2BBF248A2191353933BA C7D91E2977471E7AA80AA737C1AF77D30623B14C01DC9E09807D602A1EB5BDEC955616F9 D4406AE3203886BA2C1C66B602110599081F8D3E2587AE0704101441BBA067538BE5BA2F 854335357BBBFB0E8F2EB736B22AE3608F499DC3F0D9D4CA85098116F44C5A83135ADF5D 1C8E41E8B095B246D212490330BF8061D9A27DF4BF9AF2E3818E712194F5E80B79C94708 1FFA324E7E2145B1055F55CD432835D25FC5843DD4F59C060BC059A02E3BE3A6B7215141 AEA3CB147017716C9319A3FED58A1EFF4559C859E1C880D1D7CF034D3F128D90C9D47661 2C2685FE817372E004FC247530E50D6EE9D6F69B402FB33C0506D4ABAE50295AD65AED3B 7904BEE9B14A589E3BF4799AF86E641F169C7F0B284A321E63D2011977AF731499839854 849B08924ACA122C5AEC892FF22A2C731062F05324A39A711E004122FB56FF3DCCCD3936 ED75AD7C18F4D2FFF39D65E7B95AC0E1ED0957BC3F129213C249C3212824575757E9A3F0 00FC2D3CB643F5BB051AAC37A3524C6F0406772F632DE0342EC1595C23926B21A67F7563 4FACAC20C6E60CDEF6C057BFCB3D97087956A04A77409CB710EAE3A5198F5186C5075C8A 5CFEC00A6108CACE338D1D6D47E59BE50E58142A64B71E133185AB1EAF57818E4C601FE9 9701ECE6E94DED298EDE77E4505E58545CE40F5EC710DB2786F3AF411FDD957E359CD9EC 6016EA259E8C8C5FCE4825EAC37618606BE620EA170051E128D59ED4C7970AF6CB9749BF 5FFA7230EADA9AFAB81907EAA8CF406034997DE522B6DD191A573243F848D0634788778F 34054F1D5C4BB139C8375C48711B2053EA0864CEB2D0F8757BB1B4A28C5F94C134F0C5F8 33D73ABD4870CD8EA42EC62CEA9EAF7EB817BD8D3F9BC1F52F511F2A8536514903B04092 AA4DC286FFCAD1BE1430FD03D026CCEEEF6AFEFD149DDE67026E49D18FDC4EAE03CC4780 5CEF48A926E6DD1D079FAEFBFA7F62A61A46362E2968DBB9E133C52E47DE328B58766387 B5799918A8DD5BE1C3C4403C7172F38335259FE13A2241CF8249A73410013401E59878B5 76D7366808FA8F6396C87FD303992E87208F5E7001090B27863B03FF6A5E906F5DEBDF46 8A99DBD93ABEB8E80BFDC6CF7F0A3A6E168FC54DFB2C17C34A3BF28E7694766BD2B6428E 57E04473ECA19B95B600EFEB62E757471307BC6CF5A630BC99EB493C39EAF53F1D339A59 6775A4F4C901109A32A41E1C3A2F1828B71B49BA2486FAEB6A439A6237694A90EC3BCB97 7E11A9BD73568815AD97F77357CB3AF131411C64C912000D27DAAF1E0D5C96736E9B9141 2778D3EDA0B5157D7FCC95EC9C796940DE13530DE2027149EB038C0945796EE0A513F2E5 FA23728CE8789BAA93651A64FB7D7BC959C1D6BAD8963BE6AAD3577B004649FF1B236A52 D03FB4C1760E5774C289859F30A9EFCDFAFEFD06D11CB25500EEEEF8236544594402C80D 3FCDD2673A598F60E0E29D6CD2A2E22ED49072957FC3FC4590C37F0B94857A1117258DFD EC7B69AF87D2977C37D48FFDA25E029FD2A6FE2CAF1919D0938A7638F38F78E581582302 ED66B59A290DB9A8458A49916A7FDD105DE06E890800AC3203FF4F9047BE703DD8FB91BC 3281327DAB57616B13D9A97207B11E025C43893D8208B4827FADBE5B646A3067F1CD2BDB 6F1E07D9250488FED79876A292AA7F3736A027CA18E184DB17ED0A6172D86A71369BFD8D 16B297A5F2E29A113E2704E0512CFE95B784A15018DB7760A2C09D79AF55AC4E9F665413 3D0E534AB0AAAA6883F0E7FB39D9C1A6D8FFB5269A03BC3DFCB2D052931FFEDB3D6F9866 6FCB4893A11A292B8D30C39F768CBCCDD088E6479F98D460EA7D307136AB416245D75707 E75FC0BECB4DDC57DB6D6B81A2811125884450A749BEEDB47D0929B6FCDE0050CDB865CF CA044B8A3F7C8C63FA40AC30CE96E0139D313C65DA17D4F3B8BA159EE04AF0CC170F8AAB 3C71415A63D4D6BE5ECD6C8D56FB26D77EB3EB5DE99EDA047D358B7B74F5165ECA7F9E2C 01855412432E63E92CDD5D423EBF5835CA9CC07388271A42CCA630CB2DF9F6F517B3C2F3 A79979AE51F83202867EA74557FCFF36740709EB4F064B6105B6E8463246760B84A4B7AE 50D12617C6AA13A659686F5BA8999E74FA2F815BE63B643ED7EB2DFFB9610AFE44098460 9540B41C436F45FF34793A637416AED4934CB1F8BD19F61262E49DAE04DEE509611A5039 9F0B66ECE425D0AED57EED7FD15AE6FF10E5232C573194362524CE43A7B55305C68AC49A 0009DDA0948B28DEFCD949A8A73D53EAD07AC3E0FAAE5DC80FB48838F8EECBAF8CFB0E61 648435344FF318B805E435F1C2A3C25C754D032BB7E6197AD74F0D904A35716A1B4F21EC 5AD1E5E46C32A4AD9191616360DF59D3BF490CB10F1DE40C6B98247DD09F7AB8D4F63587 8EF14EDE2283E0C9410A8D9004E1A9E65F16F365A5F9BE08AD6E493C7459AAB67C28790B 6E4ED021D1557DA02CCB0A5084AF84246DA5D7E851B7F634BACD71E030D2D7B78D592322 524E84AA761F921951EE3C916660ACB382F80DD52FD2F8FCD6AB1ECF779AED56AFC0177B B1E71178597383515CD9579EFE49148B1207DE2099C0DA8067DB4DE1E3A7A12818DC542E 60E14FC87305E1CA9E0930AA4E7F3ADB068C6ADA5E2F14474D4782A20C4301C217ED42CF 73D7BA9AC66D08FBDCE013BC6C71A796DC17F1A63B3B936371365D558A2060D04FBEA8A7 4D2F4899B00B929B65DBD34AC5AA26BDE33269DBDB29CD391B6A4EAC09AA9FEC55164587 42DCB12A1BCCC66CA644305740A4CCCF04C9318982B1996888003EB3FDD5758F34B5680D DE709AA131D1DCCA900353FF2A00EC5DEB1B0E72633EC0CD61B377061C6A4B9C540FC502 E575A9AA20D663E2555ED6D51BB2F0AB8F9F05B94DEEEB295162ABFEA9BF7F99FD15CEE2 ABDC35973C0092ED03BBEDC94F25430B3251546A2C39D997E675AEA252399B711060851F 86B17BED25AE7D2671701AFBF7FD6F2901FA428D0D7EA74ED745339235E0343638A444D7 36B1D319DD61AD78E51495656C77FC71BA5395E7ED59CAF3190A48ED7A7D55AA3DE81BED D58735610F4356B6F68C0E1429D703471C21B1C6875E03741535F8C6813736EE05A23381 FE3DFAE97E7A1AF24CD1BF006B072B9CAD97A38918D71F0FA8A87C43404733A497DE488D 07BD913C0DBB2E0497FEFD8CC81B1339000AEE9B71F9CBFA9D55D1936C634F3B17B64AD0 DBCD84627B9B8D65AFBA21CC156C9252E6570F8910FA1E572B61EDA5C4A8517BE80359FC 02082B666094721CA6C2794653584C534827B4B40D96D9BDAE56F607F0B42AADF044519E 96DC57C25BEA873057C1A80286373AF40AFBF8B5B62CAB5033EBA156285FBC1F759E4232 928C0CDAB5C1EC1C3068FCE8C3E85FFD1163E09A8149676DD4824B302FC53865EBC1E13F A42C8CFBCD791148AA2054B3FD88E64A37C3725FFAE6614246D4911F68A9AF3E0D8E2B8D 08333076CFE93BFCAD6EE77A9668BF427F7AED2ADF8CDBC6D211D9FAFEB3B7DE04949406 CE65149135D767EFBAD9857883CFEFD1AD639EC5C2900591F1316EC6A9E9FDCC12911FA7 15002735553D32932C9159377E3FCDC8FBCFE1A7667B9FE32B214AA9E41F12CD762910EA 443ECBF63F5ADD16D60F6B37041C4BC59C8FBFA17758CFB91B7288F80C5BEB659B855534 063C5E7A06C996EED5E62071299EBAF35AA46191F622B5BFEE642F9DC302971FAB62004D 6EFCDF303036F631D32DC1D8243189E03D0EC707A24A69C6679B6F46558FB8A8567F1888 9027031AF3A2003EAFAF477FDAD4D37E0EC71F57159E7FDDE3B006D735420174DAC72E2C 93B0580449D6A1E64CA030FEC6142B4AA33C1C5006F4A19DC2C549EA563272025F09EE6A 2FFCCFFDB79C2A96619EE96B048137DC3ABA6CA0944332BF5C961B0E8A484FC8025B4105 CAF856A995BB5CE24087AA6F79A073FC47C397F456A6A4B3B2576888432068251110D3E2 2BC67604DCCF5F1DF0E4C6B8AA8CD0EF3CEEE1E1769DCF972D25CE223DEAD94E4AAA3D9B DC6595F25DA4FFB09D8B80D51F28EAE43E290EB102F1EC5768B0B4934AEBB07FB323FB60 3ECF1D28BC37DCCC265FFA905D4312F7E600EB089F6F5F8EF30796BC6A5DD0ED300224AE E9FA152B222D1DACF46B40AEA9021C0342CCFAD28F8DDA2D1EEFDCC61B346E7F7E390EE3 B198357A815AFE0953873DF92E430114BCA3793394BCC29F0A57175A976D6CEDF3195682 CF2DDFAF3241824C01A6AEA93D0D3FCB9F35EA2A35701463D016883DC308302AB158E6B1 60B86BFB1305859CEF8F93987714232BC3F7BC54BCA3481ADB7D4CA539A9BFD4B66697F8 00424AACCF20E8EF9A501F85525EB8E8D6BC0E1FD795100F29417BA10EDE1AAEAA5000FF 7316050236E41842198B4D37D3CDCCF89C15926A354636DA9BF99E534655ADA0B94E17FB 3BB1AD0C497DD8839D8E1B80ABFB74E0D7FF753DC9447E27E8B87C16ADA21C14404ED722 72163150C632DBE35D21F95EFA4E58ABE4CAEADA908642572855664143848746AED57C71 9A8ED9180613324DBBD9F6EA68FC4AEA6BBE0B08FEFD04984212EF643578CDDD442427A2 DA3C39F2A6DB5AD9DD290A8FAB0903F78CDDA71FC274D1FE57F287B009ABBD1DD2D81FA6 A748A0167259254E0A37288CA06028CEDBD86393DA60FE07283CA1B6CBF9A7A7BE297E7C E2515F113588E97A8B86D55CDFD93CAB31E410E2C63ACC0AFC1CF7547D93F2E3920FBD5C C27B287B755FDFCAE46552D015797B4005E0FF4DF309145A8354CA67A508F362CEDFA53C F8CE07F8AACCEEC5BF4067BC467FA93B9D5378393AA50C2969B53317599125FA84C3C986 74717E6898A71186B64F5C418CDAAC01AD5482388CDA5F6F410036593223A470762BA6B2 AE91AB0B9CE44D4549A8AD39163C3D19B32C7FEF58DF2641746AA52364A3DFF6692A501A F673E4C6A18B29AE9F9347AB40065A4B472BB7793C4AFF3919AD94108B98CB42A290924C 6EE9052266A784864F2B730C6DEC85EB00A072BB4B3803D47C6A440E18F64BD8A49CBAEE 5A504C7825E028DAEEDBA962635E0ADEEEBAE136730ABEED148FF000A6933EF2B2E1C336 3ADF73BEF60E09DBEADF3CA694EFEC0CC566B05A29E26745DD9DBD58C75EEE2C60287EAA 860B23D3115ADF2DF6858A369002FCC5D7533ECDA2093DDD52A6D4088D1C7464A7F14525 3371DFF8036DEEDAFCEC83E393F789E5448E78E7127FCF37BD8D9C96DC674FB921B35648 1D25B3F1F7CD8229A1C61381AA3EB432668502B16C68DA6981816389817C841CEBB17748 51A9D80081A451F5345BEE3FCAC2466B6160A9FE9274595B1AEFD4BE9A25DC88F916A543 ABCACEC2D8C60EA333C6A1989D03E6615CFB6BE41FA3FC5B5DFEDA5AC42B7DBCE981EAE6 6837D7EDBE73F5BDB495A5F463097D6CE06E1EA0CC312960B6A1C15DF998A8B674B69673 43AB4000BF70FA0323A93D2BA29723638900C3F80372432A94AD40A064BDDFC5A07CEF90 F9A0AD3A7CAC9E82119650577BBAE1922A76CB7AEA56B789CF2A5D4F1CF02458214F594D D1CCF633AD757639F3230203B6473806EE7565F8AD773ABC41B308D298E331429B2D3FD9 C0520E21844567E635EFCE2A1FF053AF2121E3C86D409D79308618F1702E7017A43FCA34 BDDECAE1F0C9CBC53506D52F1082C55736228A9CCB4C45547F3BEC0B02B2E61BB835E53E 9B6A463CB3609B7B19C473410F1D97971171842F8A168EF01A28578773DF296838789EC7 BC9B97B4653C5CBE9915DF65ACA2023D6E010A3F5A2DEAA1B8C43203F3E81C6D406630B3 98C6C1A09BFEE3C255B3D5849D9EA6F7751BA153B513A22CDC8B79F07A472511EA47A390 F4569C9A19C20C5AE723B1E217C08BB185DD017DFF488EAB278B49D33D8E79060ECA28DC 90CEF2EF8C92466916C96EB6A5E0204F0223EE941E338BC4576AD4D166867A97EE43E110 C2667FF58CB054BE54CF6504C22A6CCF07871A2DA5B7E907CBF183D3D5B5534B11C749D0 5EDBA17C39BEF65ED3908CB9295854D6CB8382D30C1211E988D3A88D891D65F799ED01F8 185F1CB6BAE9EE6CDAFBA08D2A004AA74C00A1917B592FA1F8D5E95CCCBACB36EDC4BA08 3CC8A20AE6D982A7D2D4130705846FCA7FA127F47D80373913D17E5DBD221487B5ED10CC 8110EB5D2786F73E64AF773D14A28BF09B613FD86D3E4403C817BC334A62BB231ABDBC44 1840AC1BDDA9414F4D3E851D5228FB85163BB06672CC967C3B7E1B20B00112C04240AC29 FB681DD97AB6A95471A869D576761F02245E8499D8A9EC450CB6F848939755D51746FE33 99C06DC516CC79103EE63324972C560A90397AA64B5247CC0808EFEA83D8BCE4F54B0614 4EE4FDC185573E3F60A48B63217C3365CFFEEED54A89CDDA8628CB71B19796DD1E85AB19 E90ADB3F4B1210C422631732CF6797D843B3EF57D81B956A6052D7F0A02FE775D52A39B4 1914CE2C1B4D2DD9633FFF2AFD82B582DE95B8BE87EDA9071B603DE6E6C447C63600BF53 A986B8BE1E983EC208DB040592826FDE01683D0F78D9D354C90B405E0A1FDFF540068E0A 0991467228A19D7F8E3AECB7E66B142D69A606EB7C6CE61B0D4716CF394BD5C2A8A2637A EBBA8541A263171C02527A8BC192DA2F1B08C9DFD1296E902C20AF1B6D7FF169DE2AA1CE 20192686601E4B491F1064EAE68CBF3419F0E4B7F49A9B84DC890B434A71198B4C01655E E4F8BB2CFF523F9F04848B2A135F4D2E3327E85E7487AD4619CB0F3B00132C45533A128F F1CA873B2B3AC063FC115E43D170C33EFD0865E300CA1497A029F7CFF500CE6F4C8ADC45 BB14AC9241F1CC98EF500D00E0E5B036863079CECB31F62DEC3E10C25A00AA325E8D5E6D A69E7A057795E6D3F84C34C3CF97867D39D1400809AA25D481200640FA80A461A0F117C7 EB6A251FF61F9AC8F8F0D2D1F2C22F2A59D45B8AD5BB9A096D9D7C24B44FFB6D4A5AED3E 702D3A44B1EB01CE6F6876367A5125AA49BBC15F689E5916697843A224EBB727C6AA4ACE EB61F7D0CF4C9FD78D5745D00E8C564D2A0F5D64E07B0E096DEDB0EE258B71C71CED6010 9FB7DBD2AEF0AD80C73584EA8554FB19440DC65633A17FBA48BDD01AA8F9F3336FE86A0F 212D8BA7BFFCE3639C50133A2722029424F69C90868709D86E2A9BEED2DF0BC4EE54BCBF C41762BD15604417521C64EB54A9A1E6A02870AE7FB58D726E96EC7AC71A1C436A17396B 8EB272CD24B48C88B74FAED75213FFE000BECA99380521EBDB2C1A00290854B384F6071E B2490D173FAAAEE5D26EE92560FB68A9C69D1E9F9A43DF5D8F06B8D0D04475D9DE036C87 2943EAE46692EC36BC1CA02C17166BB22A67BC7485BA519AF17FAF3302266EA896FD0091 EF9708E8F3B822F9D58F1A267C71CE583D3D05A2C78924FADEE87FC49970CAE2EB837605 9ABF0FC4F675DCE2A49012719AFF160CD43280F4C817C190BD43C9F452CBD7CB6936AB90 CC7AB858CDF9BA5091963E395E90668693429B20DDB1974780917B1D3B648B9210B3B713 832C9B6F3C6EA2A03DA145738118F43C2DB54B0634E2C0059B00DA7C4597C77BBE404BA2 F2631DE0A4E24D2CF365411D8B6C80D2E2EB74AA4E419D6F7D6B7E14C312907D79C2FD16 7436D1F0A03315D1C730C64D10BAA19F5FE2FAD7D62230B3B4E7CE04111A317B3047FE95 4785168BB999AC3B6030431C80446169D35F3E6A05FB8AAFF0D162FCC37FEC73753FD61F 1D3ED6A05B89CE11ACB547F3C520A4349258E1E2F550D86FD6E26C8DEE7E4F5F4883938A 9574E8D6A75DDFE021471403ABDC5E0C29771E7438D70426A52138CFB25ECA6C883D0818 4C91499475AF2DBB7E10861857E38ACB77794855AAE405ED815FBDDBECB30F54259815B3 EB4150ADF722838E201444DD97CA7BB111D1790821569F1CB18060054D98750CB1C403C4 5990E7B9101954CA639A9842E784E1A008CF9BA724A70108D53911DD3523E49AD9CCF97F 86DB02A90663A3E07488D943DFC2F05ADC6FC0903B48A9DF05CA400E45A41F91BB4B67AD 0909F146DBC39CD1DEF40F1768B2A86496EA9B0B8452830F9CF1F388DCA1524FC9A3A3C4 E6BC90726C4BB0524F01981FEAEC700A7C516DBDD0D0A6769C4912073FB4B39017DD12E3 F28050C130F5903F946BEF506EA04EA074E25BCB11AD26ED9B33F5A2425C4786CBAA21DE 2A3E2A3EB4D8A7D021528313EEF03B34F03731405882B43D8083FD6CC4A1242A7CE52831 0F9575F881E8502D7925356C4A782D5DA38090958120A42C4703345579239729A039E0E5 E57E3138001398D6C7C2775A44CF230200986969478C90BA16F631F878BD6035325A3C14 E72216E75DE48F8290356F526CF69CE2DF21F6945F41B9C1A8D84D9DAAFAA506163B937D F13472A23C37EEC3DD03D15125FE49708784D10A660D003437DDF8B68A4EF70F602CC85C B92704DEA082092C2DAA0DACE0341B7D0B70844F2435486C28CC0273606690D81601980B D57220018B06CCD8F392988341C9D30FE0ED80B66A8EBD688B4B3C3D13F190BC82CE3890 8B7DA223808FC42EDF9AF7BF58DCABFDD4981A7C251F30D6EB3974AD79C316C2F450256E E1701B74733F0957621D84FCF298F7A611FB7EB6ACE1EF8D1F6CF72E02AF63AF7FF56B10 9D97E5227B0662D4FC9216E6DE6D6E717EAEFD72D12B7875849147E31E322092132F77D8 E8DF33D38F78D7807321E5BDFD6961222A57B53A3AC867484121DA4E4BBDADD3EF0DBC0E 75CFB9B697265F3515783DCEC6C9E53A436264A1E5478EA8951A621E724ACB46D5CB8638 01E5004DB1B5489644D6F79E4294C217C5C851D3CD3152F5C7797191C304089C1DE2AF37 F96F3D03221AE0114FAE7CABA27025C68C95AACA262BBF3F49EBC9B0D2C882A01AA2978A 6F0863113454966AF7E900AFB435E9D7FC622777417E354B65919C5319B2E4E4D3CFF159 6AA2921BCE844FDB673EF761387199FAF223D5B470860566260ADA7D4B325FA90ECE5E9B 6CA8FC22DA22C427BF20A4DF7E24CF6A374F1335086BE07839B6CD90284789759BF5969A D9F6175EE518B8E65D4CD077F1AACA1D9CB9218D33322F061E5F0517C672EDF44E29245A BFC04FC52059114ED27ACE9A54AE8953C52712FCBA95DB6231454DC06018D3D170C78BD3 D4AD365388BB0CC1BA351B0DC0195DC02EACB1061F0D79E211DB722D28077800C2113CBE C4B480826F905BD2EC29A1B412549F295BCB6F0F8EB24B3F66FAA9D8E79351718A508225 C2067E3A44EE35A1B83F4019C6EA197B9A96EF903B42AED351E254F1C6D28BE4903BF7E5 A41949BEA257AE3930BE0E4A5F11892547E8E84CCBAF0499552E3236766DC2D5CE3B79B7 FC48ABF3531FCA59720561C1A89A6F9AD49C7B1A55B4490787BD2C74D5E68095925847B4 97EF3A3771814C5EE16A88E38AB35C8FB25A5FDBB73C6846FCB463F7607377FB2A5783CB 9EDD73EF8AB8A346CB00BE707C02FE941357FC6E87F40FE8B073DA478A045A23B0A48153 8E4B5DB70B658ED839CF89DD903ACDA30DCDF938D2A704E90DF1C82B8B82AE61D79486E1 1B81808AD144BAC3974CA52C5121F3B474BEBBF19790C8ACD935CD899DDE0CED9BEF6193 7BE439F0B6595F6623D751B171DCF19D8B6541E9B3F92CC726B9154C95A0251494E16ECE CD59AA21A9340AF36851360E5AA051DB460D8FF998F33C8E2D742187336B84BF8922035C 3CA0991A2361B81019F2EA40B4C187F4303EBB5AEEB85EBF6C8FAD8D02454209CD46FB81 E35175A4F7859174C759BB40A8E37E6CB9E1AA78017D22E3098FAFAD3D23B167594D0C0C FE9AF1E516F805C61CAEE6577F61FB1ABC3E423F10A92F910447352634E4346D58F84D33 6097D651793B637460F8A186C80D651665D4C7C7AE5402D4332C83F9C4D84E942E6F7D14 3FC78C8A3D25B4E4933F1177F393BFA6883149C18BA21E9801B3B4DC2BD0FE1C8173E032 0D0144F64CC2913AFFC0FE234EE8C1EFF425E5A5EC3DCD16E848340942E78AF7CD06034F C92445D2E92D5B6E621F32106352A8CBBACCBFAB23B0D82BC587E2BCCD861AA5E681ACC5 88EA4B35C8801F46A7984C17B5D11260016451B70531F1427216B2639C6E3BCB945CB991 8322453C68BB9178BBA86B378D3E41A475992B209ADD888B795C83931589CC71EC93CAFE C722CCC2581912A459836A90EAD7524E65709855F572B6D4C0AF612C93B827203900D246 EFD39859ABA33669CC3ACCD0B8984F54D9C394EEE65CF0BD30465B95C559B85ED2FD6C44 BB0068447BC574403A6FE896E8CC2B48126F41553C919D963AD59016DFF5AE0BED090BD8 11403FEBBAC8D122E1298D0AB4646673721DC2D6EB8005A10A25524483F29FA1D3449D6F CDFA0D7B6B375C6F962F8F3981FD249801AEB60CC496D99871D90808B84281E3E4767D34 20C50A169B9D7F9EB92DB8727D069E398776AA8C7A5BE52E24C87331B41EE3D46A5940A5 43846094B9491E944DACEB8620173DA5EE8C864C67DA4CBE8C56873A176D83D5F60B384E 39EB3D6BB97072292434F27F4179BA917C6D1F7D4767055AAF2B131C8C1A730CAABB8E87 73E86B6CD3D73AF8E3F699AEBC18D2CA6ACD722E9DC4897750B764F7F0DBCC40E3127EAE B0EDB56FEC639F7A3E628DA259FF3857B4F220BAE35DF49839D288CDFD48AE4F1AD809F8 E08C71DADFB3408891540019D4E948BE1604D8F4CD27E69A202736CE04883F6AD85410DB ABB2D188B2E8DF456FF51CFEC6EEA4B860FE0DE80EB6A77D5512F8216317544862935042 E33678CBECA3939CF7C6F220B745CED4BD9B7B44B276A74207D6D4ABEDB36EE87DD76973 E9FAE172E5DCC665E4926ED22638443169E4B9F594B9133569F2BA6BFDE0D9684F8588EB 5C7CEF9113272AD2B4F92ADF0DF5BB6ED5D4E0E247BA70FF99D8AC1FE6B8CB1B57021DE4 C779CBA0C2788D9607D5EE721DECC2EE60E3AFE72D2A1AF0700D22A58370FF0D79007399 BE835C6F1AF4B8CA0F61D6C2CCBAC00EDD2080D5EBB00470843631F3CAAB03FECD730854 BF9AD4D5B17DEFBB9D37613CE04708523EA9D8B856BB71EDADCE01F3249E234147D473D4 25514D5B3F5F30ADD04056EB104AB2E1524700604DD6262E9E4BAF15A6C52E79E43A3AA4 E097BD99D4C6AD6BB5C90C4769C1028F4434052F34A96557B6B2785F3FA0250A887DFB49 D46BE822A0E45AD9271509C34E39F546FA2BAF2EECBE28FE03AAF3751D0367862B18308A 35F8B37B95AC0A6B8F4A66D74BB9ECE7C70ECADE5401E7C2B95DC5D37BE22C89E4A3548A 27797AC0003FBB4D7896CE583B4CB892DE73FA4D4CB2F94B5BDD28750A01BE0AE0C4B9E9 B29190D168FDD005122EB129789C07E24FBBDC253F6972A2899C7CD1F697B7CE1D18C5B3 AD84F3E022345BFB8F9859A1B1FB943BF3613A6CC5ECD96C6668C722A2C1D2380240CFB1 909DA6EB3EB4171C7C1B3637DC62ADCFDC3F797C026C876C8323239E69D3E73906C8D8F3 5BB80C72AD5CDF3B3B797EE98F2AD23E49B95BD9CA9D8FA69480E95B51A7DB0E7CEB4579 02EEB5CC0A2CA6960E65C2EC07CD101856D1B4FBD4BD13CAC1E6620B4895CF1401901925 8976A3FD49CF4BC32CDA4B859B5AEBE7D17C34223800F2261E1E93618A2968ACBB52EABA 0130C12A111F86B102C52FC60BA630AE034185540F6E2127152840A2D41A54455D53DAFE 90B4BE90D546D9D95AA34C116C928D301B536132F01D7A77FD8C4426ED7C58118A56EE9B DD8218701DB8605FEB313FC6D2831377988530F7331CD000961EEFA1075EF06AA05C0144 754D429936FDE8524C8F623FA6C788813AFACC3205103F95359E1934B91C0CECE8D6D211 D4C59C1F2D1E3665BF9E182E2616F41D6EA48932ED6DBAE5DCFFE7801CEC49B23E9FC047 B98CC780EBA2559A741B2D045C03CC1384108EA1301CA0371582448CBA4942AB7914CD28 484CEE45E131FB6AF6642F63B8ED36588F0ED7F76DD887FCE0FA1F39633180A048154515 C896E9B5CDDAE03F027383491ED5FF43F4E4CFC7A2B9AA1D53DCA53F419DCD98CC670744 C4CE0CFFA63FBCD80BCECED13CB07D1BBBA4AB69553AB4A385F80553D2D5B67E7E560BB6 2B8ADC6F50640905E7CB6669AE823BA15CE5CAD529DEB4C3CCA74A9BEAD83BF905AE53A8 6E0556B56677A4D3B1859E0F5BB465D3CB26FB3861365C5AF312478BFC8694CFC69B43BB DD2769C10BFF639CF2E809DACB2B8938B61BB43973A56032927C673BDE0E8CD14FD58AE8 4B43996EC266147CC6A0AB5783A1A86945B6F7080B0C1A262C1C98296C3D55D78A83E337 E0E04D71A6F16270C84125B285A03FA9AC2670F8A5FC9D1743ADFDB97007123E9AF28BC3 4E99C3C90F599E7AECE4470A703FE3ED92242D9D33385C59DAA56172C8C39979787D7051 EA49537242845F314253460AD89D066FD86B3D4BAF8A75B687FA9D66808CCF4EA0F362F5 7249D812D13CEA9161151BFACF378E2D1265E2247764DC3E6D71CF156496571972324E8C 4766A11E9CBC02E750E55045BBE2E18F65C94FD0B2A85D77AA6F47B7A30E3EB0C0D61DC7 C5B0B66012BFE3197F8BCB0FD40699DE8D9B58C77F2A22DD46B8DCFC5B285F28C8E9D14D 1799D4103C63070853C18F21F6B7AC342A7BBD3CBDF9870091EC13905137934EFF59480B 43B3FEFC9B66B94230C838173C88F26ED970DA042D79122D5C5A4594CA63726C3B39261F 6218B70B7A68E7A17F34A0AF6BD361D4C56C4D108480F4C473CEC41E854151D8E9429357 E29C95DB61B52CB23A3EF356282C957B8D784AE8A074840551EB94764B136CAD360BFF6B 861A0A3215BFB549CC0553AA4835C6B135783D86A2FF980F0D783BE0476CCACE74F204D8 087CDE4B76CB907B88005BA6F43B678DA9CD58999D1FFD544B0C2F3B511433E08EC19396 C7E9DD329D416CB24BEB05BD032E26344BBE3F08EF40412856592F27E9C7BD6A84D64B7D 29FCA60273BFD54580BBBDF0C97E8F839E82B90075B54CF7FC71E71DFDDCC18C39AB6D15 C245A83B982D897F1BD7A1F0D45D647AD534B82A72B950F5D8CC4781EC17F45396911B2A 12B0A8BCF986566D784D30C0F6D35383084859A9CB43FB92FEC9F13EE056DA23DB168062 849CF6184D27E1EBDFB3A1C927DBE2DD829396699C980FE90BC5E3DEAFBA77575DA4320A C51F35B1E1046BA8D0830CCCCDFFB447AFF35AAA0BDCF8EEB632445999E24BEC2E862648 F05F71DBAD6AC446C4BD74B8296838F92B0971AE02C0D5FF4696CCECFF27DD7EB70801AD E86B8DDCABB200956398F77BDAA6DC05139487F725F75ED282DB6676A5A72950F211B22A 988B8717A716297D8F23323B441194A0FBFB29F9EE4757AA2BE1E6134601485C9EED3B66 A2FE022AF7C933AEC4AC57A45F36103B7F0FD9D6338F35ECF300D7FC55BDACAD225C9CB4 380321930C29BFAA29A10E61C1462A023CA84467D589DE40FA6E4ACA0ED137D1FE9D40B3 3F31B16570913A571235218E6B259517A0E644A53A596188344A1290CB69D09772B48A7E 8995DC99B10461CAF7F8301454E0DD1EBFC42EA183A058F07C0FE49E892A0292A663BAA9 9A54D708BB0DA457303C04DFA18ACBD19F94645723C61B7EB8B3F7A851AF8002B7CB8D86 FDE2A324FB01368E20FABC32BD62BA9E37D89CBA02EA6FBBAB0388EE8926A6B9E5C3A6A8 A207090980B292455A662AB586177B31D9C8E4A8E744903734D50B2F8BF11588D5DE47C4 C37A8F2EAF09B1D782E81B6F3E41102ED1EE04EA2AF7D15427B48666B986D70B97449031 6BA022CA9396A5E2A5181439091D6123A3609CDF985742D4947F31DFC1F9F8EAF073F7C4 A1D3F9AA984CBF7DC34137BE26467EC70AE7C6858AE0C2C0ADB55CD332D5FEA80E05BA52 0BB62A253786D515B373DB6496B7CBFB0B87EB860D66633FDF8A853E591B3B1930AE3322 15DF131C43C5568357AC2C35227B8C3C3066BEE0B11E968ABDF8E9A46DB006DDDED199D2 2E54F562DA59A7181C7F09A1F0DEE4585BD6EA2282579B86C00940063360AC61D45523EE CDD7B40F8F2A44AFC4284A533B44B493F0FA94DA05BC3536AD125892B6A08F1F6F38EB43 0F54313BCC1E24F3BA5325ADBD7A4B385B98038DA0C9F6B90098F524383A96A1E7FBDF6E 71E6E1708E21D4EFD87E8A945062C2E2D2E35E9F16F12A2C12F68B67611EAABA840D080C F1EEF16B256C35512EC5BC5C4819813C3A946928EB3DA5192331A1FDF460F639E40FBC58 2512918E3B47D58C189569AC8C3FEBF913E96AA18F275304CA2506B35A731C10455285B8 DE01F7D925AA7CC6BF74799DADD154EAF7B01A63F1B1C0AA05212A6193A1AB8B6DC9B115 DEA66FCC1769A3612A923C60B9ABF7DC55A6B68971B1C68820C429D4784827A08C702427 F05F303219976C6A4E82A724B3484B05CD8A0E9835B1CDDE5E75654D11FB5F79173DC153 1942B29A07CAE50B84ABF9949D9C89A551BBD74025715DA3924AF07E52343AE901012217 7B8B6F58C5DBF3E3345A5558925B6C3ED103F6B1D2074BAE7583CF705362CF896EB3D371 5C6C5796DBB1D5B987DD2BC078FBEA9C69834CEA307971551B63C8BC9E9FCF49AC910F08 D69D25ECBF1606F747F2C7C1D774700EEA6362B15BFBD025D18F881A866322DC78259DBF 46CB1A234616CE425046AEB5612F94C5F0A28CDFAA5977B59F908483AF77C569B8DF4E42 F4D1B0DADF13CA72505A5D5441367A9E96E10B295EACADD95A6C33B70E9D232EF473E74F 1F338AC4CD995A0D94C28C86DD38D461CA3C2F346D7B088F2197D2EA2FA7EF0049B4DF6D 597DAD54847A66A4662D3BD08F95EF88B318559D250D6EBD8CE831D5B986F3A825A13672 E43AB140283C6D46842CEF3BF79CE2880FA6E9D36AB51B73D8FF5F75DC1B501C7ACE9FB7 333EDB5CE3DA148A065E443E18345D319C7A61E334521DBC8465883DD36A63DF3E5872D3 7D239BD925CAB1816FC63453C12CE0AC8330B06A317953B6C8533624E6A0B14332F3BAAB BB390E16328D76A8FA4807B2C116C8D143C563BA87C9839DB101728AA9E22684AB01902A 916FF931EC6C0AC02B979A10EED507B63497D14D575357831DFF84AD8325D646335287CF D4D96BE5B4394F2A87585C5F8C50B31A2C79210841152BDA4D793FC3877514E72FC8AEAE B3407173D8B4D52961D6E89FD5B1D50C307478273578C3EC0106036CFA4338EC7A35359A AC0319BDAC9A5E87B1939DB1C23FBEAC5EAA4CEDC23397FDBD718DBFA6E0AE38B9D295E1 4B9813C2B0B8EA8A69047F415550345A05CD7E1BD2986E34D99867CBCDB22E5FE971CE05 1386848BE45347538B3790D943E58CE9598B1EAD8F0A33C53D42F07F7F808A13C9320084 A7C14D9C233DEB085FCCB0727BF60CA33B532D60295D4614373F08474A3B75F89310BE39 F188B917F102589D4F0E9496103A6F895831A0F4C11E0E483008A61A56F84D51F254FD47 029170BA2805D00B53EFE5567CEBECC7007254492852E293EC8E97B45523110F176AA7F3 BB0FF3259FEDBC1C55B9272FC69945AA4F0E886A2874DC5E8CD6B54D801512EAB3694F5E D41F90FD87F5D6BD3753503D38F2D065CF5D793D38404357451FD8F1FC8904928C758B55 FB7F156295FBC5A3D9ACA569EF86CAAD1F12733FBDFFC296F8DCDF448D03E08A2CFAF2EB BB92CAC976E4D63D3A90CF88790370B189A5A9974BC93EB4C4473F983D9471EBEF430D9D A4109FAB69232AC001334540946B8EC3D1CBB349B0390AB731A92A045E5F3B2F87959A17 7E4ED7872C715069BFB138FC8AF46521A7274895BAD9CEC599D05A28DD6BFB0F2F1ABD39 98E1FA4C404A7BB0DF501610B1287344847D3DBB5E17AE3F05CB639BC6135925B0919F85 30CE3E72175A77ED756E5F08EDA3CF3A7DC303CBD460CE20F7F7962F23C2B81D53038A3A E9D092FAB7FBC00807F08146EBA1042E6D9FFB4C7E472F35EEBC737B3075C9B38E190DD5 D93E80832D20F2E4297CADCDE0C17D37FE3574CDEBE5950B0BED8E2E8B862B034CCADA89 3CE0CE55CA8ABCB1A0B331BF420FE19E7A73D72022346B5FD830736DCB3B566C8FF1A401 94A6EABF2DB6F185CF564EC9C80913D0235947487678DE84A4E6E18CDCD440E203742F83 F9827F887990D69FA9D9AD4957CD410629D3EB03FDB1F72FB7005A88B38092DAFB5919D0 B3C51BFA92571673237525AAD1DB8712D97159192E2623F57A00FEACE5303CB7DE1C199D 2D7EA225C09DF90ACD06E97ADDD7F35E77FE62EBB266BB9DB8D61264C5B2D0BB869C86AE F7AECE0F30590C481E2E2FFB9CA1A5C0A5F4707AB4FFC39DBFC48AD5D54F0AD1402B2274 073A582FF134E4B43BD9C6D52680052B5EBB3BF554B0B8F8C846FA3EDD5DDF16015707D3 76374ADB03FF804697B48F2E0FDB8A4CF664C53340D9ABAA519C3C40859233C00B139587 709ABD63F8C0673D13ADCF4E5BF9A058C43A6BA5ED90F3B9B0543B90ABCA5308F0D5AEB6 F66B93D7AC95779FC6576C05647B3E7413FD194F090A960230CBB9DE36EF2E609342F059 4729F9537BC5149E46618D3FD5E74A65883CB70A5543A961E05736BC5157D7829E67DFC6 88C23A60F1633FE8634B516CD00C59867592A5D73E309AA0A9D3E91DBC88EB410B195AB6 7AD99B85EC2C3CE9B16B5E83BA757763363CBB4BA4F22B624D32A0AA1F1B4DDB66047036 D193243A506C9461323BA81080447E13671FBBB8DA26C71CFF78A1EBF641140358CDC580 C4C03666576AB030965CEADD63A5D557AC24036C809453659815A563C8F57E94D0924AD2 A72A926CD6AABF6D44D54E4B41EBF2286B7D1B8890D125081B428B7E234C620F20D9A17C FDA97D14BA2C53718348682D3510F7256F06A70BA7C6B6E86F334E89D63C99771F2BC395 EDDD383B34B90415E19A24CC2DEBB2F3F39A191BA0822A39225E2A347126EA1145F99674 348C9CF3ACCB838DBBF809C042031EDA8CE5EB04E8496F4D32EA5B5038C8BAE3BBD39B1F 7FF7449095F42E2CD961979B718172985FBF40EF175C1F33AD19B0481AAF031A9BF3E502 8078728BB78EC068AB29578C397233D0AB90B2ACF3EB67B76D4470339B01224A6A8941FC 03E0A00C771E071FC6799ACE2C44358AE06FA69E49D9A93500811B4913F34293AE6E717B 6E013CA76B36A5A675E0C933D1A7E6F0DED0483B675047C928E535554C42AE547E1FB351 C1DD1C4B6C697CDCCD12A7328C5A76687507C60E7FF074D744877CBF0BE22AC4C91AB729 CBAD1171373475C8EA4229E11F131208C2A47545D57FBFFC4E74F7891FD1638111DE06A7 C02E50607AC718C09385CB342A4795AA10C502FD700026FBFB88D03EFB6F5B8AB7514DE2 2FB42E2B9303B66D13BA903F8AC0A4DDDFCEFDA5E2BAE8FE43234E188EDB593D602652B5 3DFCC4C55A57186EF35D49C81FE23E2DB52E14124973946CF63A00007C7CCA0B2EFD5C0E AC0019F5908576D05F42D3FED957FB9E4A373AE652A88BA97B82E54A611FAD287BF3C450 FDC67558EE5954483D124FFAB7F46DB8AAA63131424D20D485A53ABC8C0E7B367AD8BB25 0C1622CCE171F66267B8262C3D0D4AC2A4D0CAEEE19C138585F6032608EA9E36E6F789FB C931C23FB029B203CC44C9B0A3366E3A525EE7E77D6F99D80E149C50C092BDD5E384C44B E665A7F24121298AA75BEB76858AF3651A90EB4A92B3AB48DF5C72AE802DD4E747E2E583 DBF622BFA9AB8DC8A0AB7F59DD91027AB54AA6BF811F8750DF7E27523C39D6BC3DCE7B5F 9A1A91CB7FA4D2355030F71ED81631ED39A1A2ADC40B15C12B3E63BF2E4762B37BD101FE 9F62DE437E34A6A1E2AA9FD038827840D3681F8C1DCDC864F1BB8A073AB1302C15EDFC5C 6E9C7EFD39408C04ACA4196A21EBFCB5B23C06131240B41BB2B11AE8EF1BA75EDC81E17C 4F6233C37353292BE7B865CB92D4B022A3281478769EDBAB8613E3C266A910838C7C4B35 3A15454A47E44995603AB86B8D5A055EFEF76005193866F2D523898FDFB8955EAA18C93C 854529276820ED51FE05E0C9E69392E58B4D03086CCF84BCD45A03A5D9A9C879F7348749 46AF81 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Serif-Bold.afm0100664000212600000240000020364010330505373015472 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Serif-Bold FullName Serif Bold FamilyName Serif Weight Bold Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle 0 IsFixedPitch false UnderlinePosition -217 UnderlineThickness 240 Version 1.15 EncodingScheme ISO10646-1 FontBBox -187 -505 1361 1057 CapHeight 729 XHeight 519 Ascender 759 Descender -208 StartCharMetrics 780 C 0 ; WX 600 ; N .notdef ; B 49 -177 550 706 ; C 32 ; WX 348 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 438 ; N exclam ; B 126 -15 313 730 ; C 34 ; WX 520 ; N quotedbl ; B 95 458 426 730 ; C 35 ; WX 837 ; N numbersign ; B 67 0 771 718 ; C 36 ; WX 695 ; N dollar ; B 88 -146 613 762 ; C 37 ; WX 950 ; N percent ; B 23 -15 926 743 ; C 38 ; WX 902 ; N ampersand ; B 40 -15 885 743 ; C 39 ; WX 306 ; N quotesingle ; B 95 458 211 730 ; C 40 ; WX 473 ; N parenleft ; B 94 -156 421 760 ; C 41 ; WX 473 ; N parenright ; B 50 -156 378 760 ; C 42 ; WX 522 ; N asterisk ; B 21 277 501 743 ; C 43 ; WX 837 ; N plus ; B 105 0 732 627 ; C 44 ; WX 348 ; N comma ; B 13 -166 251 156 ; C 45 ; WX 415 ; N hyphen ; B 54 202 361 334 ; C 46 ; WX 348 ; N period ; B 81 -15 268 172 ; C 47 ; WX 365 ; N slash ; B 0 -93 366 730 ; C 48 ; WX 695 ; N zero ; B 46 -15 649 743 ; C 49 ; WX 695 ; N one ; B 122 0 597 743 ; C 50 ; WX 695 ; N two ; B 66 0 606 743 ; C 51 ; WX 695 ; N three ; B 69 -15 632 743 ; C 52 ; WX 695 ; N four ; B 41 0 655 743 ; C 53 ; WX 695 ; N five ; B 82 -15 621 730 ; C 54 ; WX 695 ; N six ; B 62 -15 643 743 ; C 55 ; WX 695 ; N seven ; B 79 0 613 730 ; C 56 ; WX 695 ; N eight ; B 51 -15 643 743 ; C 57 ; WX 695 ; N nine ; B 54 -15 633 743 ; C 58 ; WX 369 ; N colon ; B 91 -15 277 491 ; C 59 ; WX 369 ; N semicolon ; B 25 -162 277 491 ; C 60 ; WX 837 ; N less ; B 105 32 732 596 ; C 61 ; WX 837 ; N equal ; B 105 146 732 480 ; C 62 ; WX 837 ; N greater ; B 105 32 732 596 ; C 63 ; WX 585 ; N question ; B 64 -15 542 743 ; C 64 ; WX 1000 ; N at ; B 65 -174 930 704 ; C 65 ; WX 775 ; N A ; B -8 0 788 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 845 ; N B ; B 46 0 791 730 ; C 67 ; WX 795 ; N C ; B 41 -15 746 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 867 ; N D ; B 46 0 826 730 ; L uni030C Dcaron ; C 69 ; WX 762 ; N E ; B 46 0 711 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 709 ; N F ; B 46 0 697 730 ; C 71 ; WX 854 ; N G ; B 41 -15 775 743 ; L uni0306 Gbreve ; C 72 ; WX 944 ; N H ; B 46 0 900 730 ; C 73 ; WX 467 ; N I ; B 46 0 422 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 473 ; N J ; B -74 -209 436 730 ; C 75 ; WX 869 ; N K ; B 46 0 900 730 ; C 76 ; WX 703 ; N L ; B 46 0 682 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 1106 ; N M ; B 41 0 1061 730 ; C 78 ; WX 914 ; N N ; B 43 0 875 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 871 ; N O ; B 41 -15 829 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 751 ; N P ; B 46 0 728 730 ; C 81 ; WX 871 ; N Q ; B 41 -181 829 743 ; C 82 ; WX 831 ; N R ; B 46 0 837 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 722 ; N S ; B 65 -15 663 743 ; L uni030C Scaron ; C 84 ; WX 744 ; N T ; B 11 0 734 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 872 ; N U ; B 34 -15 851 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 775 ; N V ; B -6 0 791 730 ; C 87 ; WX 1123 ; N W ; B -9 0 1135 730 ; C 88 ; WX 775 ; N X ; B 4 0 775 730 ; C 89 ; WX 713 ; N Y ; B -9 0 724 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 729 ; N Z ; B 37 0 694 730 ; L uni030C Zcaron ; C 91 ; WX 473 ; N bracketleft ; B 125 -132 402 760 ; C 92 ; WX 365 ; N backslash ; B 0 -93 366 730 ; C 93 ; WX 473 ; N bracketright ; B 70 -132 349 760 ; C 94 ; WX 837 ; N asciicircum ; B 101 457 737 730 ; C 95 ; WX 500 ; N underscore ; B 0 -236 500 -143 ; C 96 ; WX 500 ; N grave ; B 68 616 332 800 ; C 97 ; WX 647 ; N a ; B 41 -15 625 534 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 699 ; N b ; B 22 -15 660 760 ; C 99 ; WX 608 ; N c ; B 41 -15 564 534 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 699 ; N d ; B 41 -15 676 760 ; L uni030C dcaron ; C 101 ; WX 636 ; N e ; B 41 -15 591 534 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 430 ; N f ; B 30 0 484 760 ; L l fl ; L i fi ; C 103 ; WX 699 ; N g ; B 41 -223 676 534 ; L uni0306 gbreve ; C 104 ; WX 727 ; N h ; B 30 0 705 760 ; C 105 ; WX 379 ; N i ; B 34 0 355 760 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 361 ; N j ; B -75 -223 280 760 ; C 107 ; WX 692 ; N k ; B 34 0 710 760 ; C 108 ; WX 379 ; N l ; B 34 0 355 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 1058 ; N m ; B 34 0 1036 534 ; C 110 ; WX 727 ; N n ; B 34 0 705 534 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 666 ; N o ; B 41 -15 627 534 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 699 ; N p ; B 22 -209 660 534 ; C 113 ; WX 699 ; N q ; B 41 -209 676 534 ; C 114 ; WX 526 ; N r ; B 28 0 538 534 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 562 ; N s ; B 42 -15 522 534 ; L uni030C scaron ; C 116 ; WX 461 ; N t ; B 23 -15 458 681 ; L uni030C tcaron ; C 117 ; WX 727 ; N u ; B 22 -15 693 520 ; L uni030C uni01D4 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 581 ; N v ; B -19 0 606 520 ; C 119 ; WX 860 ; N w ; B -9 0 881 520 ; C 120 ; WX 596 ; N x ; B 0 0 604 520 ; C 121 ; WX 581 ; N y ; B -14 -223 605 520 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 567 ; N z ; B 35 0 535 520 ; L uni030C zcaron ; C 123 ; WX 643 ; N braceleft ; B 83 -164 554 760 ; C 124 ; WX 363 ; N bar ; B 128 -236 234 765 ; C 125 ; WX 643 ; N braceright ; B 90 -164 560 760 ; C 126 ; WX 837 ; N asciitilde ; B 105 221 732 406 ; C 160 ; WX 695 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 438 ; N exclamdown ; B 126 0 313 743 ; C 162 ; WX 695 ; N cent ; B 78 -146 603 663 ; C 163 ; WX 695 ; N sterling ; B 71 0 624 743 ; C 164 ; WX 636 ; N currency ; B 37 29 602 597 ; C 165 ; WX 695 ; N yen ; B 19 0 666 730 ; C 166 ; WX 363 ; N brokenbar ; B 128 -171 234 700 ; C 167 ; WX 522 ; N section ; B 30 -96 493 743 ; C 168 ; WX 500 ; N dieresis ; B 68 645 432 789 ; C 169 ; WX 1000 ; N copyright ; B 138 0 862 726 ; C 170 ; WX 486 ; N ordfeminine ; B 29 246 470 743 ; C 171 ; WX 625 ; N guillemotleft ; B 77 63 531 522 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 441 ; C 173 ; WX 415 ; N sfthyphen ; B 54 202 361 334 ; C 174 ; WX 1000 ; N registered ; B 138 0 862 726 ; C 175 ; WX 500 ; N macron ; B 96 664 404 756 ; C 176 ; WX 500 ; N degree ; B 86 423 413 750 ; C 177 ; WX 837 ; N plusminus ; B 105 0 732 627 ; C 178 ; WX 437 ; N twosuperior ; B 41 333 382 743 ; C 179 ; WX 437 ; N threesuperior ; B 43 326 398 743 ; C 180 ; WX 500 ; N acute ; B 168 616 432 800 ; C 181 ; WX 731 ; N mu ; B 27 -209 699 520 ; C 182 ; WX 636 ; N paragraph ; B 71 -97 576 730 ; C 183 ; WX 348 ; N periodcentered ; B 81 254 268 440 ; C 184 ; WX 500 ; N cedilla ; B 127 -196 350 0 ; C 185 ; WX 437 ; N onesuperior ; B 69 333 370 743 ; C 186 ; WX 500 ; N ordmasculine ; B 29 246 471 743 ; C 187 ; WX 625 ; N guillemotright ; B 94 63 548 522 ; C 188 ; WX 1042 ; N onequarter ; B 69 -15 1009 743 ; C 189 ; WX 1042 ; N onehalf ; B 69 -15 987 743 ; C 190 ; WX 1042 ; N threequarters ; B 43 -15 1009 743 ; C 191 ; WX 585 ; N questiondown ; B 44 -15 521 743 ; C 192 ; WX 775 ; N Agrave ; B -8 0 788 928 ; C 193 ; WX 775 ; N Aacute ; B -8 0 788 928 ; C 194 ; WX 775 ; N Acircumflex ; B -8 0 788 928 ; C 195 ; WX 775 ; N Atilde ; B -8 0 788 930 ; C 196 ; WX 775 ; N Adieresis ; B -8 0 788 939 ; C 197 ; WX 775 ; N Aring ; B -8 0 788 929 ; C 198 ; WX 1034 ; N AE ; B -31 0 982 730 ; C 199 ; WX 795 ; N Ccedilla ; B 41 -196 746 743 ; C 200 ; WX 762 ; N Egrave ; B 46 0 711 928 ; C 201 ; WX 762 ; N Eacute ; B 46 0 711 928 ; C 202 ; WX 762 ; N Ecircumflex ; B 46 0 711 928 ; C 203 ; WX 762 ; N Edieresis ; B 46 0 711 939 ; C 204 ; WX 467 ; N Igrave ; B 46 0 422 928 ; C 205 ; WX 467 ; N Iacute ; B 46 0 422 928 ; C 206 ; WX 467 ; N Icircumflex ; B 46 0 422 928 ; C 207 ; WX 467 ; N Idieresis ; B 46 0 422 939 ; C 208 ; WX 874 ; N Eth ; B 42 0 832 730 ; C 209 ; WX 914 ; N Ntilde ; B 43 0 875 930 ; C 210 ; WX 871 ; N Ograve ; B 41 -15 829 928 ; C 211 ; WX 871 ; N Oacute ; B 41 -15 829 928 ; C 212 ; WX 871 ; N Ocircumflex ; B 41 -15 829 928 ; C 213 ; WX 871 ; N Otilde ; B 41 -15 829 930 ; C 214 ; WX 871 ; N Odieresis ; B 41 -15 829 939 ; C 215 ; WX 837 ; N multiply ; B 128 22 709 605 ; C 216 ; WX 871 ; N Oslash ; B 33 -39 837 767 ; C 217 ; WX 872 ; N Ugrave ; B 34 -15 851 928 ; C 218 ; WX 872 ; N Uacute ; B 34 -15 851 928 ; C 219 ; WX 872 ; N Ucircumflex ; B 34 -15 851 928 ; C 220 ; WX 872 ; N Udieresis ; B 34 -15 851 939 ; C 221 ; WX 713 ; N Yacute ; B -9 0 724 928 ; C 222 ; WX 756 ; N Thorn ; B 46 0 728 730 ; C 223 ; WX 759 ; N germandbls ; B 34 -15 726 760 ; C 224 ; WX 647 ; N agrave ; B 41 -15 625 800 ; C 225 ; WX 647 ; N aacute ; B 41 -15 625 800 ; C 226 ; WX 647 ; N acircumflex ; B 41 -15 625 800 ; C 227 ; WX 647 ; N atilde ; B 41 -15 625 792 ; C 228 ; WX 647 ; N adieresis ; B 41 -15 625 789 ; C 229 ; WX 647 ; N aring ; B 41 -15 625 889 ; C 230 ; WX 975 ; N ae ; B 41 -15 929 534 ; C 231 ; WX 608 ; N ccedilla ; B 41 -196 564 534 ; C 232 ; WX 636 ; N egrave ; B 41 -15 591 800 ; C 233 ; WX 636 ; N eacute ; B 41 -15 591 800 ; C 234 ; WX 636 ; N ecircumflex ; B 41 -15 591 800 ; C 235 ; WX 636 ; N edieresis ; B 41 -15 591 789 ; C 236 ; WX 379 ; N igrave ; B 8 0 355 800 ; C 237 ; WX 379 ; N iacute ; B 34 0 372 800 ; C 238 ; WX 379 ; N icircumflex ; B 5 0 375 800 ; C 239 ; WX 379 ; N idieresis ; B 8 0 372 789 ; C 240 ; WX 666 ; N eth ; B 41 -15 627 765 ; C 241 ; WX 727 ; N ntilde ; B 34 0 705 792 ; C 242 ; WX 666 ; N ograve ; B 41 -15 627 800 ; C 243 ; WX 666 ; N oacute ; B 41 -15 627 800 ; C 244 ; WX 666 ; N ocircumflex ; B 41 -15 627 800 ; C 245 ; WX 666 ; N otilde ; B 41 -15 627 792 ; C 246 ; WX 666 ; N odieresis ; B 41 -15 627 789 ; C 247 ; WX 837 ; N divide ; B 105 60 732 567 ; C 248 ; WX 666 ; N oslash ; B 24 -50 643 567 ; C 249 ; WX 727 ; N ugrave ; B 22 -15 693 800 ; C 250 ; WX 727 ; N uacute ; B 22 -15 693 800 ; C 251 ; WX 727 ; N ucircumflex ; B 22 -15 693 800 ; C 252 ; WX 727 ; N udieresis ; B 22 -15 693 789 ; C 253 ; WX 581 ; N yacute ; B -14 -223 605 800 ; C 254 ; WX 699 ; N thorn ; B 22 -209 660 760 ; C 255 ; WX 581 ; N ydieresis ; B -14 -223 605 789 ; C -1 ; WX 775 ; N Amacron ; B -8 0 788 915 ; C -1 ; WX 647 ; N amacron ; B 41 -15 625 763 ; C -1 ; WX 775 ; N Abreve ; B -8 0 788 937 ; C -1 ; WX 647 ; N abreve ; B 41 -15 625 776 ; C -1 ; WX 775 ; N Aogonek ; B -8 -196 788 730 ; C -1 ; WX 647 ; N aogonek ; B 41 -196 625 534 ; C -1 ; WX 795 ; N Cacute ; B 41 -15 746 928 ; C -1 ; WX 608 ; N cacute ; B 41 -15 564 800 ; C -1 ; WX 795 ; N Ccircumflex ; B 41 -15 746 928 ; C -1 ; WX 608 ; N ccircumflex ; B 41 -15 564 800 ; C -1 ; WX 795 ; N Cdotaccent ; B 41 -15 746 939 ; C -1 ; WX 608 ; N cdotaccent ; B 41 -15 564 789 ; C -1 ; WX 795 ; N Ccaron ; B 41 -15 746 928 ; C -1 ; WX 608 ; N ccaron ; B 41 -15 564 800 ; C -1 ; WX 867 ; N Dcaron ; B 46 0 826 928 ; C -1 ; WX 699 ; N dcaron ; B 41 -15 853 760 ; C -1 ; WX 874 ; N Dcroat ; B 42 0 832 730 ; C -1 ; WX 699 ; N dcroat ; B 41 -15 687 760 ; C -1 ; WX 762 ; N Emacron ; B 46 0 711 915 ; C -1 ; WX 636 ; N emacron ; B 41 -15 591 763 ; C -1 ; WX 762 ; N Ebreve ; B 46 0 711 928 ; C -1 ; WX 636 ; N ebreve ; B 41 -15 591 776 ; C -1 ; WX 762 ; N Edotaccent ; B 46 0 711 939 ; C -1 ; WX 636 ; N edotaccent ; B 41 -15 591 789 ; C -1 ; WX 762 ; N Eogonek ; B 46 -196 712 730 ; C -1 ; WX 636 ; N eogonek ; B 41 -196 591 534 ; C -1 ; WX 762 ; N Ecaron ; B 46 0 711 931 ; C -1 ; WX 636 ; N ecaron ; B 41 -15 591 800 ; C -1 ; WX 854 ; N Gcircumflex ; B 41 -15 775 928 ; C -1 ; WX 699 ; N gcircumflex ; B 41 -223 676 800 ; C -1 ; WX 854 ; N Gbreve ; B 41 -15 775 928 ; C -1 ; WX 699 ; N gbreve ; B 41 -223 676 776 ; C -1 ; WX 854 ; N Gdotaccent ; B 41 -15 775 939 ; C -1 ; WX 699 ; N gdotaccent ; B 41 -223 676 789 ; C -1 ; WX 854 ; N Gcommaaccent ; B 41 -235 775 743 ; C -1 ; WX 699 ; N gcommaaccent ; B 41 -223 676 754 ; C -1 ; WX 944 ; N Hcircumflex ; B 46 0 900 928 ; C -1 ; WX 727 ; N hcircumflex ; B -26 0 705 928 ; C -1 ; WX 944 ; N Hbar ; B 46 0 900 730 ; C -1 ; WX 727 ; N hbar ; B 30 0 705 760 ; C -1 ; WX 467 ; N Itilde ; B 46 0 422 930 ; C -1 ; WX 379 ; N itilde ; B 15 0 365 792 ; C -1 ; WX 467 ; N Imacron ; B 46 0 422 915 ; C -1 ; WX 379 ; N imacron ; B 3 0 355 764 ; C -1 ; WX 467 ; N Ibreve ; B 46 0 422 928 ; C -1 ; WX 379 ; N ibreve ; B 22 0 357 776 ; C -1 ; WX 467 ; N Iogonek ; B 46 -196 422 730 ; C -1 ; WX 379 ; N iogonek ; B 34 -196 369 760 ; C -1 ; WX 467 ; N Idotaccent ; B 46 0 422 939 ; C -1 ; WX 379 ; N dotlessi ; B 34 0 355 520 ; C -1 ; WX 941 ; N IJ ; B 46 -209 904 730 ; C -1 ; WX 750 ; N ij ; B 34 -223 669 760 ; C -1 ; WX 473 ; N Jcircumflex ; B -74 -209 436 928 ; C -1 ; WX 361 ; N jcircumflex ; B -75 -223 340 800 ; C -1 ; WX 869 ; N Kcommaaccent ; B 46 -221 900 730 ; C -1 ; WX 692 ; N kcommaaccent ; B 34 -221 710 760 ; C -1 ; WX 692 ; N kgreenlandic ; B 34 0 710 518 ; C -1 ; WX 703 ; N Lacute ; B 46 0 682 928 ; C -1 ; WX 379 ; N lacute ; B 34 0 362 928 ; C -1 ; WX 703 ; N Lcommaaccent ; B 46 -221 682 730 ; C -1 ; WX 379 ; N lcommaaccent ; B 34 -221 355 760 ; C -1 ; WX 703 ; N Lcaron ; B 46 0 682 730 ; C -1 ; WX 507 ; N lcaron ; B 34 0 517 760 ; C -1 ; WX 703 ; N Ldot ; B 46 0 694 730 ; C -1 ; WX 556 ; N ldot ; B 34 0 516 760 ; C -1 ; WX 709 ; N Lslash ; B 7 0 688 730 ; C -1 ; WX 384 ; N lslash ; B 3 0 391 760 ; C -1 ; WX 914 ; N Nacute ; B 43 0 875 928 ; C -1 ; WX 727 ; N nacute ; B 34 0 705 777 ; C -1 ; WX 914 ; N Ncommaaccent ; B 43 -221 875 730 ; C -1 ; WX 727 ; N ncommaaccent ; B 34 -221 705 534 ; C -1 ; WX 914 ; N Ncaron ; B 43 0 875 928 ; C -1 ; WX 727 ; N ncaron ; B 34 0 705 800 ; C -1 ; WX 1008 ; N napostrophe ; B 45 0 963 743 ; C -1 ; WX 914 ; N Eng ; B 43 -223 875 730 ; C -1 ; WX 727 ; N eng ; B 34 -223 630 534 ; C -1 ; WX 871 ; N Omacron ; B 41 -15 829 915 ; C -1 ; WX 666 ; N omacron ; B 41 -15 627 763 ; C -1 ; WX 871 ; N Obreve ; B 41 -15 829 928 ; C -1 ; WX 666 ; N obreve ; B 41 -15 627 776 ; C -1 ; WX 871 ; N Ohungarumlaut ; B 41 -15 829 928 ; C -1 ; WX 666 ; N ohungarumlaut ; B 41 -15 627 800 ; C -1 ; WX 1180 ; N OE ; B 41 0 1129 730 ; C -1 ; WX 1027 ; N oe ; B 41 -15 984 534 ; C -1 ; WX 831 ; N Racute ; B 46 0 837 928 ; C -1 ; WX 526 ; N racute ; B 28 0 538 777 ; C -1 ; WX 831 ; N Rcommaaccent ; B 46 -221 837 730 ; C -1 ; WX 526 ; N rcommaaccent ; B 28 -221 538 534 ; C -1 ; WX 831 ; N Rcaron ; B 46 0 837 928 ; C -1 ; WX 526 ; N rcaron ; B 28 0 538 800 ; C -1 ; WX 722 ; N Sacute ; B 65 -15 663 928 ; C -1 ; WX 562 ; N sacute ; B 42 -15 522 777 ; C -1 ; WX 722 ; N Scircumflex ; B 65 -15 663 928 ; C -1 ; WX 562 ; N scircumflex ; B 42 -15 522 800 ; C -1 ; WX 722 ; N Scedilla ; B 65 -196 663 743 ; C -1 ; WX 562 ; N scedilla ; B 42 -196 522 534 ; C -1 ; WX 722 ; N Scaron ; B 65 -15 663 928 ; C -1 ; WX 562 ; N scaron ; B 42 -15 522 800 ; C -1 ; WX 744 ; N Tcommaaccent ; B 11 -196 734 730 ; C -1 ; WX 461 ; N tcommaaccent ; B 23 -196 458 681 ; C -1 ; WX 744 ; N Tcaron ; B 11 0 734 928 ; C -1 ; WX 461 ; N tcaron ; B 23 -15 496 781 ; C -1 ; WX 744 ; N Tbar ; B 11 0 734 730 ; C -1 ; WX 461 ; N tbar ; B 23 -15 458 681 ; C -1 ; WX 872 ; N Utilde ; B 34 -15 851 930 ; C -1 ; WX 727 ; N utilde ; B 22 -15 693 792 ; C -1 ; WX 872 ; N Umacron ; B 34 -15 851 915 ; C -1 ; WX 727 ; N umacron ; B 22 -15 693 763 ; C -1 ; WX 872 ; N Ubreve ; B 34 -15 851 928 ; C -1 ; WX 727 ; N ubreve ; B 22 -15 693 776 ; C -1 ; WX 872 ; N Uring ; B 34 -15 851 1057 ; C -1 ; WX 727 ; N uring ; B 22 -15 693 855 ; C -1 ; WX 872 ; N Uhungarumlaut ; B 34 -15 851 928 ; C -1 ; WX 727 ; N uhungarumlaut ; B 22 -15 693 800 ; C -1 ; WX 872 ; N Uogonek ; B 34 -204 851 730 ; C -1 ; WX 727 ; N uogonek ; B 22 -196 728 520 ; C -1 ; WX 1123 ; N Wcircumflex ; B -9 0 1135 931 ; C -1 ; WX 860 ; N wcircumflex ; B -9 0 881 777 ; C -1 ; WX 713 ; N Ycircumflex ; B -9 0 724 931 ; C -1 ; WX 581 ; N ycircumflex ; B -14 -223 605 777 ; C -1 ; WX 713 ; N Ydieresis ; B -9 0 724 939 ; C -1 ; WX 729 ; N Zacute ; B 37 0 694 928 ; C -1 ; WX 567 ; N zacute ; B 35 0 535 777 ; C -1 ; WX 729 ; N Zdotaccent ; B 37 0 694 952 ; C -1 ; WX 567 ; N zdotaccent ; B 35 0 535 759 ; C -1 ; WX 729 ; N Zcaron ; B 37 0 694 928 ; C -1 ; WX 567 ; N zcaron ; B 35 0 535 800 ; C -1 ; WX 430 ; N longs ; B 30 0 484 760 ; C -1 ; WX 795 ; N uni0186 ; B 41 -15 746 743 ; C -1 ; WX 695 ; N uni0190 ; B 69 -15 632 743 ; C -1 ; WX 695 ; N florin ; B 9 -211 647 743 ; C -1 ; WX 770 ; N uni0194 ; B 4 -92 770 730 ; C -1 ; WX 775 ; N uni01CD ; B -8 0 788 928 ; C -1 ; WX 647 ; N uni01CE ; B 41 -15 625 800 ; C -1 ; WX 467 ; N uni01CF ; B 46 0 422 928 ; C -1 ; WX 379 ; N uni01D0 ; B 6 0 375 800 ; C -1 ; WX 871 ; N uni01D1 ; B 41 -15 829 928 ; C -1 ; WX 666 ; N uni01D2 ; B 41 -15 627 800 ; C -1 ; WX 872 ; N uni01D3 ; B 34 -15 851 928 ; C -1 ; WX 727 ; N uni01D4 ; B 22 -15 693 800 ; C -1 ; WX 727 ; N uni01D6 ; B 22 -15 693 915 ; C -1 ; WX 647 ; N uni01DF ; B 41 -15 625 915 ; C -1 ; WX 1034 ; N uni01E2 ; B -31 0 982 915 ; C -1 ; WX 975 ; N uni01E3 ; B 41 -15 929 763 ; C -1 ; WX 871 ; N uni01EA ; B 41 -204 829 743 ; C -1 ; WX 666 ; N uni01EB ; B 41 -204 627 534 ; C -1 ; WX 871 ; N uni01EC ; B 41 -204 829 915 ; C -1 ; WX 666 ; N uni01ED ; B 41 -204 627 763 ; C -1 ; WX 722 ; N Scommaaccent ; B 65 -225 663 743 ; C -1 ; WX 562 ; N scommaaccent ; B 42 -225 522 534 ; C -1 ; WX 744 ; N uni021A ; B 11 -225 734 730 ; C -1 ; WX 461 ; N uni021B ; B 23 -225 458 681 ; C -1 ; WX 666 ; N uni022B ; B 41 -15 627 915 ; C -1 ; WX 666 ; N uni022D ; B 41 -15 627 915 ; C -1 ; WX 871 ; N uni022E ; B 41 -15 829 939 ; C -1 ; WX 666 ; N uni022F ; B 41 -15 627 789 ; C -1 ; WX 666 ; N uni0231 ; B 41 -15 627 915 ; C -1 ; WX 713 ; N uni0232 ; B -9 0 724 915 ; C -1 ; WX 581 ; N uni0233 ; B -14 -223 605 763 ; C -1 ; WX 361 ; N dotlessj ; B -75 -223 280 520 ; C -1 ; WX 647 ; N uni0250 ; B 41 -15 625 534 ; C -1 ; WX 699 ; N uni0251 ; B 41 -15 676 534 ; C -1 ; WX 699 ; N uni0252 ; B 41 -15 676 534 ; C -1 ; WX 699 ; N uni0253 ; B 22 -15 660 760 ; C -1 ; WX 608 ; N uni0254 ; B 41 -15 564 534 ; C -1 ; WX 608 ; N uni0255 ; B 37 -113 560 528 ; C -1 ; WX 699 ; N uni0256 ; B 41 -223 783 760 ; C -1 ; WX 729 ; N uni0257 ; B 41 -15 784 760 ; C -1 ; WX 636 ; N uni0258 ; B 41 -15 591 534 ; C -1 ; WX 636 ; N uni0259 ; B 41 -15 591 534 ; C -1 ; WX 907 ; N uni025A ; B 53 -15 908 534 ; C -1 ; WX 561 ; N uni025B ; B 41 -18 539 534 ; C -1 ; WX 561 ; N uni025C ; B 41 -18 539 534 ; C -1 ; WX 907 ; N uni025D ; B 41 -18 908 534 ; C -1 ; WX 719 ; N uni025E ; B 41 -18 675 534 ; C -1 ; WX 386 ; N uni025F ; B -75 -223 362 520 ; C -1 ; WX 699 ; N uni0260 ; B 41 -223 784 760 ; C -1 ; WX 699 ; N uni0261 ; B 41 -223 676 520 ; C -1 ; WX 626 ; N uni0262 ; B 62 -5 571 520 ; C -1 ; WX 711 ; N uni0263 ; B 61 -219 638 520 ; C -1 ; WX 627 ; N uni0264 ; B 41 -38 605 521 ; C -1 ; WX 727 ; N uni0265 ; B 22 -209 697 520 ; C -1 ; WX 727 ; N uni0266 ; B 34 0 705 760 ; C -1 ; WX 727 ; N uni0267 ; B 34 -223 630 760 ; C -1 ; WX 379 ; N uni0268 ; B 34 0 355 760 ; C -1 ; WX 379 ; N uni0269 ; B 34 0 355 760 ; C -1 ; WX 379 ; N uni026A ; B 34 0 355 520 ; C -1 ; WX 408 ; N uni026B ; B 32 0 382 760 ; C -1 ; WX 514 ; N uni026C ; B 32 0 488 760 ; C -1 ; WX 379 ; N uni026D ; B 34 -223 463 760 ; C -1 ; WX 795 ; N uni026E ; B 34 -204 825 760 ; C -1 ; WX 1058 ; N uni026F ; B 22 -15 1024 520 ; C -1 ; WX 1058 ; N uni0270 ; B 22 -209 1024 520 ; C -1 ; WX 1058 ; N uni0271 ; B 34 -223 961 534 ; C -1 ; WX 727 ; N uni0272 ; B -74 -223 705 534 ; C -1 ; WX 727 ; N uni0273 ; B 34 -223 811 534 ; C -1 ; WX 712 ; N uni0274 ; B 62 0 657 521 ; C -1 ; WX 666 ; N uni0275 ; B 41 -15 627 534 ; C -1 ; WX 1061 ; N uni0276 ; B 62 0 1005 522 ; C -1 ; WX 749 ; N uni0277 ; B 41 -15 704 530 ; C -1 ; WX 666 ; N uni0278 ; B -3 -213 671 760 ; C -1 ; WX 571 ; N uni0279 ; B 28 -15 538 520 ; C -1 ; WX 571 ; N uni027A ; B 28 -15 538 761 ; C -1 ; WX 571 ; N uni027B ; B 28 -223 640 520 ; C -1 ; WX 526 ; N uni027C ; B 28 -208 538 534 ; C -1 ; WX 526 ; N uni027D ; B 28 -223 538 534 ; C -1 ; WX 451 ; N uni027E ; B 34 0 462 534 ; C -1 ; WX 486 ; N uni027F ; B 34 0 462 534 ; C -1 ; WX 800 ; N uni0280 ; B 62 0 745 520 ; C -1 ; WX 800 ; N uni0281 ; B 62 0 745 520 ; C -1 ; WX 562 ; N uni0282 ; B 42 -223 522 534 ; C -1 ; WX 331 ; N uni0283 ; B -75 -224 385 760 ; C -1 ; WX 430 ; N uni0284 ; B -75 -223 484 760 ; C -1 ; WX 540 ; N uni0285 ; B 41 -223 500 528 ; C -1 ; WX 331 ; N uni0286 ; B -65 -223 385 760 ; C -1 ; WX 492 ; N uni0287 ; B 34 -162 468 534 ; C -1 ; WX 461 ; N uni0288 ; B 23 -223 454 681 ; C -1 ; WX 727 ; N uni0289 ; B 22 -15 693 520 ; C -1 ; WX 679 ; N uni028A ; B 41 -4 640 536 ; C -1 ; WX 693 ; N uni028B ; B 34 -2 655 520 ; C -1 ; WX 641 ; N uni028C ; B 34 0 659 520 ; C -1 ; WX 906 ; N uni028D ; B 34 0 924 520 ; C -1 ; WX 635 ; N uni028E ; B 34 0 653 742 ; C -1 ; WX 726 ; N uni028F ; B 62 0 671 521 ; C -1 ; WX 567 ; N uni0290 ; B 35 -223 717 520 ; C -1 ; WX 567 ; N uni0291 ; B 35 -90 535 520 ; C -1 ; WX 567 ; N uni0292 ; B 34 -204 597 520 ; C -1 ; WX 567 ; N uni0293 ; B 50 -204 597 520 ; C -1 ; WX 536 ; N uni0294 ; B 123 0 478 761 ; C -1 ; WX 536 ; N uni0295 ; B 123 0 478 761 ; C -1 ; WX 536 ; N uni0296 ; B 123 0 478 761 ; C -1 ; WX 544 ; N uni0297 ; B 123 -223 478 761 ; C -1 ; WX 719 ; N uni0298 ; B -3 -1 588 531 ; C -1 ; WX 728 ; N uni0299 ; B 62 0 672 522 ; C -1 ; WX 719 ; N uni029A ; B 41 -18 675 534 ; C -1 ; WX 626 ; N uni029B ; B 62 -5 734 760 ; C -1 ; WX 728 ; N uni029C ; B 62 0 673 522 ; C -1 ; WX 383 ; N uni029D ; B -43 -223 390 760 ; C -1 ; WX 740 ; N uni029E ; B 41 -209 717 520 ; C -1 ; WX 645 ; N uni029F ; B 62 0 590 523 ; C -1 ; WX 699 ; N uni02A0 ; B 41 -209 783 760 ; C -1 ; WX 536 ; N uni02A1 ; B 123 0 478 761 ; C -1 ; WX 536 ; N uni02A2 ; B 123 0 478 761 ; C -1 ; WX 1116 ; N uni02A3 ; B 41 -15 1084 760 ; C -1 ; WX 1179 ; N uni02A4 ; B 41 -204 1146 760 ; C -1 ; WX 1116 ; N uni02A5 ; B 41 -90 1084 760 ; C -1 ; WX 910 ; N uni02A6 ; B 23 -15 877 681 ; C -1 ; WX 714 ; N uni02A7 ; B 23 -224 769 760 ; C -1 ; WX 908 ; N uni02A8 ; B 23 -113 876 681 ; C -1 ; WX 1039 ; N uni02A9 ; B 30 -223 1006 760 ; C -1 ; WX 790 ; N uni02AA ; B 34 -15 757 760 ; C -1 ; WX 795 ; N uni02AB ; B 34 0 762 760 ; C -1 ; WX 662 ; N uni02AC ; B 43 0 623 625 ; C -1 ; WX 442 ; N uni02AD ; B 43 119 402 625 ; C -1 ; WX 613 ; N uni02AE ; B -85 -209 697 760 ; C -1 ; WX 717 ; N uni02AF ; B -85 -223 801 760 ; C -1 ; WX 521 ; N uni02B0 ; B 43 461 482 888 ; C -1 ; WX 518 ; N uni02B1 ; B 43 464 480 891 ; C -1 ; WX 313 ; N uni02B2 ; B 43 337 275 888 ; C -1 ; WX 413 ; N uni02B3 ; B 43 464 375 764 ; C -1 ; WX 413 ; N uni02B4 ; B 43 456 375 756 ; C -1 ; WX 480 ; N uni02B5 ; B 43 337 441 753 ; C -1 ; WX 526 ; N uni02B6 ; B 43 461 488 753 ; C -1 ; WX 661 ; N uni02B7 ; B 43 429 623 721 ; C -1 ; WX 484 ; N uni02B8 ; B 43 305 446 721 ; C -1 ; WX 348 ; N uni02BB ; B 68 456 291 743 ; C -1 ; WX 348 ; N afii57929 ; B 68 456 291 743 ; L n napostrophe ; C -1 ; WX 313 ; N uni02C0 ; B 43 462 275 889 ; C -1 ; WX 313 ; N uni02C1 ; B 43 462 275 889 ; C -1 ; WX 500 ; N circumflex ; B 65 616 435 800 ; C -1 ; WX 500 ; N caron ; B 65 616 435 800 ; C -1 ; WX 369 ; N uni02D0 ; B 108 0 261 434 ; C -1 ; WX 369 ; N uni02D1 ; B 108 302 261 434 ; C -1 ; WX 500 ; N breve ; B 83 624 417 776 ; C -1 ; WX 500 ; N dotaccent ; B 178 645 322 789 ; C -1 ; WX 500 ; N ring ; B 110 609 390 889 ; C -1 ; WX 500 ; N ogonek ; B 154 -196 366 0 ; C -1 ; WX 500 ; N tilde ; B 75 638 425 792 ; C -1 ; WX 500 ; N hungarumlaut ; B 109 616 497 800 ; C -1 ; WX 458 ; N uni02E0 ; B 43 340 419 754 ; C -1 ; WX 291 ; N uni02E1 ; B 43 461 253 888 ; C -1 ; WX 394 ; N uni02E2 ; B 43 462 356 770 ; C -1 ; WX 475 ; N uni02E3 ; B 43 462 436 754 ; C -1 ; WX 313 ; N uni02E4 ; B 43 462 275 889 ; C -1 ; WX 602 ; N gravecomb ; B 68 616 332 800 ; C -1 ; WX 602 ; N acutecomb ; B 168 616 432 800 ; C -1 ; WX 602 ; N uni0302 ; B 65 616 435 800 ; C -1 ; WX 602 ; N tildecomb ; B 75 638 425 792 ; C -1 ; WX 602 ; N uni0304 ; B 96 664 404 756 ; C -1 ; WX 602 ; N uni0306 ; B 83 624 417 776 ; C -1 ; WX 602 ; N uni0307 ; B 178 645 322 789 ; C -1 ; WX 602 ; N uni0308 ; B 68 645 432 789 ; C -1 ; WX 602 ; N uni030A ; B 110 609 390 889 ; C -1 ; WX 602 ; N uni030B ; B 109 616 497 800 ; C -1 ; WX 602 ; N uni030C ; B 65 616 435 800 ; C -1 ; WX 348 ; N uni0312 ; B 82 456 261 617 ; C -1 ; WX 727 ; N uni0321 ; B 275 -223 630 140 ; C -1 ; WX 727 ; N uni0322 ; B 97 -223 452 140 ; C -1 ; WX 500 ; N uni0326 ; B 153 -225 333 -63 ; C -1 ; WX 301 ; N uni0374 ; B 78 556 218 800 ; C -1 ; WX 301 ; N uni0375 ; B 78 -209 218 36 ; C -1 ; WX 231 ; N uni037A ; B 48 -213 195 -59 ; C -1 ; WX 369 ; N uni037E ; B 25 -162 277 491 ; C -1 ; WX 500 ; N tonos ; B 168 616 432 800 ; C -1 ; WX 500 ; N dieresistonos ; B 68 645 440 996 ; C -1 ; WX 775 ; N Alphatonos ; B -8 0 788 800 ; C -1 ; WX 348 ; N anoteleia ; B 81 254 268 440 ; C -1 ; WX 946 ; N Epsilontonos ; B -16 0 893 800 ; C -1 ; WX 1118 ; N Etatonos ; B -16 0 1085 800 ; C -1 ; WX 661 ; N Iotatonos ; B -16 0 607 800 ; C -1 ; WX 886 ; N Omicrontonos ; B -16 -15 844 800 ; C -1 ; WX 953 ; N Upsilontonos ; B -16 0 961 800 ; C -1 ; WX 911 ; N Omegatonos ; B -16 0 869 800 ; C -1 ; WX 483 ; N iotadieresistonos ; B 8 -10 444 996 ; C -1 ; WX 775 ; N Alpha ; B -8 0 788 730 ; C -1 ; WX 845 ; N Beta ; B 46 0 791 730 ; C -1 ; WX 709 ; N Gamma ; B 46 0 697 730 ; C -1 ; WX 775 ; N uni0394 ; B 29 0 742 730 ; C -1 ; WX 762 ; N Epsilon ; B 46 0 711 730 ; C -1 ; WX 729 ; N Zeta ; B 37 0 694 730 ; C -1 ; WX 944 ; N Eta ; B 46 0 900 730 ; C -1 ; WX 871 ; N Theta ; B 41 -15 829 743 ; C -1 ; WX 467 ; N Iota ; B 46 0 422 730 ; C -1 ; WX 869 ; N Kappa ; B 46 0 900 730 ; C -1 ; WX 775 ; N Lambda ; B -8 0 788 730 ; C -1 ; WX 1106 ; N Mu ; B 41 0 1061 730 ; C -1 ; WX 914 ; N Nu ; B 43 0 875 730 ; C -1 ; WX 703 ; N Xi ; B 55 0 643 730 ; C -1 ; WX 871 ; N Omicron ; B 41 -15 829 743 ; C -1 ; WX 944 ; N Pi ; B 46 0 900 730 ; C -1 ; WX 751 ; N Rho ; B 46 0 728 730 ; C -1 ; WX 707 ; N Sigma ; B 40 0 640 730 ; C -1 ; WX 744 ; N Tau ; B 11 0 734 730 ; C -1 ; WX 713 ; N Upsilon ; B -9 0 724 730 ; C -1 ; WX 871 ; N Phi ; B 41 0 828 730 ; C -1 ; WX 775 ; N Chi ; B 4 0 775 730 ; C -1 ; WX 913 ; N Psi ; B 6 0 907 730 ; C -1 ; WX 890 ; N Omega ; B 44 0 846 743 ; C -1 ; WX 467 ; N Iotadieresis ; B 46 0 422 939 ; C -1 ; WX 713 ; N Upsilondieresis ; B -9 0 724 939 ; C -1 ; WX 699 ; N alphatonos ; B 41 -15 676 800 ; C -1 ; WX 607 ; N epsilontonos ; B 48 -13 555 800 ; C -1 ; WX 727 ; N etatonos ; B 34 -209 630 800 ; C -1 ; WX 483 ; N iotatonos ; B 34 -10 444 800 ; C -1 ; WX 693 ; N upsilondieresistonos ; B 34 -2 655 996 ; C -1 ; WX 699 ; N alpha ; B 41 -15 676 534 ; C -1 ; WX 664 ; N beta ; B 62 -209 609 770 ; C -1 ; WX 678 ; N gamma ; B 24 -209 649 520 ; C -1 ; WX 666 ; N delta ; B 41 -15 627 766 ; C -1 ; WX 607 ; N epsilon ; B 48 -13 555 527 ; C -1 ; WX 592 ; N zeta ; B 34 -209 545 760 ; C -1 ; WX 727 ; N eta ; B 34 -209 630 534 ; C -1 ; WX 666 ; N theta ; B 41 -17 627 772 ; C -1 ; WX 483 ; N iota ; B 34 -10 444 520 ; C -1 ; WX 749 ; N kappa ; B 34 0 710 520 ; C -1 ; WX 701 ; N lambda ; B 35 0 660 739 ; C -1 ; WX 731 ; N uni03BC ; B 27 -209 699 520 ; C -1 ; WX 693 ; N nu ; B 34 0 655 520 ; C -1 ; WX 592 ; N xi ; B 34 -209 545 760 ; C -1 ; WX 666 ; N omicron ; B 41 -15 627 534 ; C -1 ; WX 731 ; N pi ; B 34 0 699 520 ; C -1 ; WX 665 ; N rho ; B 62 -209 625 534 ; C -1 ; WX 608 ; N sigma1 ; B 41 -209 547 534 ; C -1 ; WX 737 ; N sigma ; B 41 -15 686 520 ; C -1 ; WX 672 ; N tau ; B 34 -10 623 520 ; C -1 ; WX 693 ; N upsilon ; B 34 -2 655 520 ; C -1 ; WX 904 ; N phi ; B 46 -209 858 533 ; C -1 ; WX 657 ; N chi ; B 12 -223 636 534 ; C -1 ; WX 941 ; N psi ; B 41 -209 898 520 ; C -1 ; WX 952 ; N omega ; B 39 -2 911 520 ; C -1 ; WX 483 ; N iotadieresis ; B 12 -10 444 789 ; C -1 ; WX 693 ; N upsilondieresis ; B 34 -2 655 789 ; C -1 ; WX 666 ; N omicrontonos ; B 41 -15 627 800 ; C -1 ; WX 693 ; N upsilontonos ; B 34 -2 655 800 ; C -1 ; WX 952 ; N omegatonos ; B 39 -2 911 800 ; C -1 ; WX 762 ; N uni0400 ; B 46 0 711 928 ; C -1 ; WX 762 ; N afii10023 ; B 46 0 711 939 ; C -1 ; WX 901 ; N afii10051 ; B -46 -214 816 730 ; C -1 ; WX 709 ; N afii10052 ; B 46 0 697 928 ; C -1 ; WX 795 ; N afii10053 ; B 41 -15 746 743 ; C -1 ; WX 722 ; N afii10054 ; B 65 -15 663 743 ; C -1 ; WX 467 ; N afii10055 ; B 46 0 422 730 ; C -1 ; WX 467 ; N afii10056 ; B 46 0 422 939 ; C -1 ; WX 473 ; N afii10057 ; B -74 -209 436 730 ; C -1 ; WX 1261 ; N afii10058 ; B -19 -10 1214 730 ; C -1 ; WX 1260 ; N afii10059 ; B 46 0 1214 730 ; C -1 ; WX 962 ; N afii10060 ; B -46 0 910 730 ; C -1 ; WX 869 ; N afii10061 ; B 46 0 900 928 ; C -1 ; WX 944 ; N uni040D ; B 46 0 900 928 ; C -1 ; WX 811 ; N afii10062 ; B 24 0 771 928 ; C -1 ; WX 944 ; N afii10145 ; B 46 -175 900 730 ; C -1 ; WX 775 ; N afii10017 ; B -8 0 788 730 ; C -1 ; WX 854 ; N afii10018 ; B 46 0 800 730 ; C -1 ; WX 845 ; N afii10019 ; B 46 0 791 730 ; C -1 ; WX 709 ; N afii10020 ; B 46 0 697 730 ; C -1 ; WX 944 ; N afii10021 ; B 41 -314 936 730 ; C -1 ; WX 762 ; N afii10022 ; B 46 0 711 730 ; C -1 ; WX 1317 ; N afii10024 ; B 27 0 1262 730 ; C -1 ; WX 695 ; N afii10025 ; B 69 -15 632 743 ; C -1 ; WX 944 ; N afii10026 ; B 46 0 900 730 ; C -1 ; WX 944 ; N afii10027 ; B 46 0 900 928 ; C -1 ; WX 869 ; N afii10028 ; B 46 0 900 730 ; C -1 ; WX 944 ; N afii10029 ; B -19 -10 900 730 ; C -1 ; WX 1106 ; N afii10030 ; B 41 0 1061 730 ; C -1 ; WX 944 ; N afii10031 ; B 46 0 900 730 ; C -1 ; WX 871 ; N afii10032 ; B 41 -15 829 743 ; C -1 ; WX 944 ; N afii10033 ; B 46 0 900 730 ; C -1 ; WX 751 ; N afii10034 ; B 46 0 728 730 ; C -1 ; WX 795 ; N afii10035 ; B 41 -15 746 743 ; C -1 ; WX 744 ; N afii10036 ; B 11 0 734 730 ; C -1 ; WX 811 ; N afii10037 ; B 24 0 771 730 ; C -1 ; WX 1049 ; N afii10038 ; B 41 -172 1000 889 ; C -1 ; WX 775 ; N afii10039 ; B 4 0 775 730 ; C -1 ; WX 944 ; N afii10040 ; B 46 -175 914 730 ; C -1 ; WX 910 ; N afii10041 ; B 30 0 859 730 ; C -1 ; WX 1117 ; N afii10042 ; B 46 0 1063 730 ; C -1 ; WX 1132 ; N afii10043 ; B 46 -175 1077 730 ; C -1 ; WX 880 ; N afii10044 ; B -38 0 826 730 ; C -1 ; WX 1189 ; N afii10045 ; B 46 0 1123 730 ; C -1 ; WX 791 ; N afii10046 ; B 46 0 737 730 ; C -1 ; WX 795 ; N afii10047 ; B 41 -15 746 743 ; C -1 ; WX 1287 ; N afii10048 ; B 46 -15 1229 743 ; C -1 ; WX 831 ; N afii10049 ; B 46 0 837 730 ; C -1 ; WX 647 ; N afii10065 ; B 41 -15 625 534 ; C -1 ; WX 666 ; N afii10066 ; B 41 -15 627 756 ; C -1 ; WX 733 ; N afii10067 ; B 51 0 680 520 ; C -1 ; WX 637 ; N afii10068 ; B 34 0 574 520 ; C -1 ; WX 871 ; N afii10069 ; B 49 -259 815 520 ; C -1 ; WX 636 ; N afii10070 ; B 41 -15 591 534 ; C -1 ; WX 1062 ; N afii10072 ; B 34 0 1020 520 ; C -1 ; WX 607 ; N afii10073 ; B 48 -13 555 527 ; C -1 ; WX 731 ; N afii10074 ; B 34 0 699 520 ; C -1 ; WX 731 ; N afii10075 ; B 34 0 699 776 ; C -1 ; WX 692 ; N afii10076 ; B 34 0 710 520 ; C -1 ; WX 731 ; N afii10077 ; B -61 -13 699 520 ; C -1 ; WX 1063 ; N afii10078 ; B 77 0 1000 520 ; C -1 ; WX 731 ; N afii10079 ; B 34 0 699 520 ; C -1 ; WX 666 ; N afii10080 ; B 41 -15 627 534 ; C -1 ; WX 731 ; N afii10081 ; B 34 0 699 520 ; C -1 ; WX 699 ; N afii10082 ; B 22 -209 660 534 ; C -1 ; WX 608 ; N afii10083 ; B 41 -15 564 534 ; C -1 ; WX 619 ; N afii10084 ; B 32 0 574 520 ; C -1 ; WX 581 ; N afii10085 ; B -14 -223 605 520 ; C -1 ; WX 817 ; N afii10086 ; B 41 -184 772 697 ; C -1 ; WX 596 ; N afii10087 ; B 0 0 604 520 ; C -1 ; WX 731 ; N afii10088 ; B 34 -163 716 520 ; C -1 ; WX 731 ; N afii10089 ; B 34 0 699 520 ; C -1 ; WX 1000 ; N afii10090 ; B 34 0 950 520 ; C -1 ; WX 1017 ; N afii10091 ; B 34 -163 967 520 ; C -1 ; WX 690 ; N afii10092 ; B -11 0 646 520 ; C -1 ; WX 996 ; N afii10093 ; B 41 0 959 520 ; C -1 ; WX 664 ; N afii10094 ; B 48 0 612 520 ; C -1 ; WX 608 ; N afii10095 ; B 41 -15 564 534 ; C -1 ; WX 1025 ; N afii10096 ; B 52 -15 982 534 ; C -1 ; WX 800 ; N afii10097 ; B 62 0 745 520 ; C -1 ; WX 636 ; N uni0450 ; B 41 -15 591 800 ; C -1 ; WX 636 ; N afii10071 ; B 41 -15 591 789 ; C -1 ; WX 703 ; N afii10099 ; B 0 -223 630 760 ; C -1 ; WX 637 ; N afii10100 ; B 34 0 574 800 ; C -1 ; WX 608 ; N afii10101 ; B 41 -15 564 534 ; C -1 ; WX 562 ; N afii10102 ; B 42 -15 522 534 ; C -1 ; WX 379 ; N afii10103 ; B 34 0 355 760 ; C -1 ; WX 379 ; N afii10104 ; B 8 0 372 789 ; C -1 ; WX 361 ; N afii10105 ; B -75 -223 280 760 ; C -1 ; WX 995 ; N afii10106 ; B -61 -13 947 520 ; C -1 ; WX 990 ; N afii10107 ; B 34 0 947 520 ; C -1 ; WX 727 ; N afii10108 ; B 0 0 705 760 ; C -1 ; WX 692 ; N afii10109 ; B 34 0 710 800 ; C -1 ; WX 731 ; N uni045D ; B 34 0 699 800 ; C -1 ; WX 581 ; N afii10110 ; B -14 -223 605 776 ; C -1 ; WX 731 ; N afii10193 ; B 34 -163 699 520 ; C -1 ; WX 709 ; N afii10050 ; B 46 0 697 873 ; C -1 ; WX 637 ; N afii10098 ; B 34 0 574 668 ; C -1 ; WX 709 ; N uni0492 ; B 46 0 697 730 ; C -1 ; WX 637 ; N uni0493 ; B 34 0 574 520 ; C -1 ; WX 869 ; N uni049A ; B 46 -175 900 730 ; C -1 ; WX 692 ; N uni049B ; B 34 -163 710 520 ; C -1 ; WX 775 ; N uni04B2 ; B 4 -175 775 730 ; C -1 ; WX 596 ; N uni04B3 ; B 0 -163 604 520 ; C -1 ; WX 867 ; N uni1E12 ; B 46 -189 826 730 ; C -1 ; WX 699 ; N uni1E13 ; B 41 -222 676 760 ; C -1 ; WX 703 ; N uni1E3C ; B 46 -189 682 730 ; C -1 ; WX 379 ; N uni1E3D ; B 10 -217 379 760 ; C -1 ; WX 914 ; N uni1E44 ; B 43 0 875 945 ; C -1 ; WX 727 ; N uni1E45 ; B 34 0 705 736 ; C -1 ; WX 914 ; N uni1E4A ; B 43 -189 875 730 ; C -1 ; WX 727 ; N uni1E4B ; B 34 -215 705 534 ; C -1 ; WX 744 ; N uni1E70 ; B 11 -189 734 730 ; C -1 ; WX 461 ; N uni1E71 ; B 23 -224 460 681 ; C -1 ; WX 1123 ; N Wgrave ; B -9 0 1135 986 ; C -1 ; WX 860 ; N wgrave ; B -9 0 881 777 ; C -1 ; WX 1123 ; N Wacute ; B -9 0 1135 986 ; C -1 ; WX 860 ; N wacute ; B -9 0 881 777 ; C -1 ; WX 1123 ; N Wdieresis ; B -9 0 1135 945 ; C -1 ; WX 860 ; N wdieresis ; B -9 0 881 736 ; C -1 ; WX 713 ; N Ygrave ; B -9 0 724 986 ; C -1 ; WX 581 ; N ygrave ; B -14 -223 605 777 ; C -1 ; WX 415 ; N uni2010 ; B 54 202 361 334 ; C -1 ; WX 415 ; N uni2011 ; B 54 202 361 334 ; C -1 ; WX 500 ; N figuredash ; B 0 207 500 325 ; C -1 ; WX 500 ; N endash ; B 0 207 500 325 ; C -1 ; WX 1000 ; N emdash ; B 0 207 1000 325 ; C -1 ; WX 1000 ; N afii00208 ; B 0 207 1000 325 ; C -1 ; WX 348 ; N quoteleft ; B 68 456 291 743 ; C -1 ; WX 348 ; N quoteright ; B 47 442 270 730 ; C -1 ; WX 348 ; N quotesinglbase ; B 29 -130 251 156 ; C -1 ; WX 575 ; N quotedblleft ; B 68 456 518 743 ; C -1 ; WX 575 ; N quotedblright ; B 47 442 497 730 ; C -1 ; WX 575 ; N quotedblbase ; B 29 -130 479 156 ; C -1 ; WX 522 ; N dagger ; B 27 -97 496 730 ; C -1 ; WX 522 ; N daggerdbl ; B 27 -97 496 730 ; C -1 ; WX 639 ; N bullet ; B 144 195 496 547 ; C -1 ; WX 1000 ; N ellipsis ; B 81 -15 919 172 ; C -1 ; WX 1384 ; N perthousand ; B 23 -15 1361 743 ; C -1 ; WX 399 ; N guilsinglleft ; B 77 63 307 522 ; C -1 ; WX 399 ; N guilsinglright ; B 94 63 324 522 ; C -1 ; WX 519 ; N uni207F ; B 46 461 482 761 ; C -1 ; WX 695 ; N Euro ; B -4 -15 649 743 ; C -1 ; WX 1000 ; N trademark ; B 116 446 840 730 ; C -1 ; WX 534 ; N partialdiff ; B 37 -13 500 660 ; C -1 ; WX 752 ; N Delta ; B 20 0 734 730 ; C -1 ; WX 841 ; N product ; B 22 -192 816 720 ; C -1 ; WX 752 ; N summation ; B 9 -192 734 720 ; C -1 ; WX 837 ; N minus ; B 105 256 732 370 ; C -1 ; WX 166 ; N fraction ; B -187 -15 354 743 ; C -1 ; WX 348 ; N periodcentered ; B 81 254 268 440 ; C -1 ; WX 657 ; N radical ; B 35 -21 659 828 ; C -1 ; WX 833 ; N infinity ; B 100 97 734 500 ; C -1 ; WX 579 ; N integral ; B 23 -183 556 759 ; C -1 ; WX 837 ; N approxequal ; B 105 119 732 508 ; C -1 ; WX 837 ; N notequal ; B 105 -5 732 631 ; C -1 ; WX 837 ; N lessequal ; B 105 0 732 581 ; C -1 ; WX 837 ; N greaterequal ; B 105 0 732 581 ; C -1 ; WX 834 ; N house ; B 71 0 764 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 441 ; C -1 ; WX 538 ; N uni2311 ; B 2 113 536 647 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 441 ; C -1 ; WX 1007 ; N uni237D ; B 12 -228 996 86 ; C -1 ; WX 834 ; N uni2423 ; B 71 -228 764 86 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 2 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 727 ; N fi ; B 30 0 705 760 ; C -1 ; WX 727 ; N fl ; B 30 0 703 760 ; C -1 ; WX 1113 ; N uniFFFD ; B 24 -109 1089 957 ; C -1 ; WX 500 ; N dlLtcaron ; B 168 616 339 800 ; C -1 ; WX 500 ; N Dieresis ; B 68 613 432 757 ; C -1 ; WX 500 ; N Acute ; B 168 616 395 746 ; C -1 ; WX 500 ; N Tilde ; B 75 615 425 748 ; C -1 ; WX 500 ; N Grave ; B 105 616 332 746 ; C -1 ; WX 500 ; N Circumflex ; B 65 616 435 746 ; C -1 ; WX 500 ; N Caron ; B 65 616 435 746 ; C -1 ; WX 437 ; N foursuperior ; B 23 333 404 743 ; C -1 ; WX 500 ; N Breve ; B 83 616 417 746 ; C -1 ; WX 500 ; N Dotaccent ; B 178 613 322 757 ; C -1 ; WX 500 ; N Hungarumlaut ; B 128 616 517 746 ; C -1 ; WX 500 ; N Doublegrave ; B -17 616 372 746 ; EndCharMetrics StartKernData StartKernPairs 1357 KPX hyphen Tcaron -165 KPX hyphen Yacute -109 KPX hyphen Ydieresis -109 KPX hyphen Y -109 KPX hyphen X -72 KPX hyphen W -54 KPX hyphen V -72 KPX hyphen T -165 KPX A uni0233 -40 KPX A ycircumflex -40 KPX A wdieresis -40 KPX A wacute -40 KPX A wgrave -40 KPX A wcircumflex -40 KPX A uni021B -17 KPX A tcommaaccent -17 KPX A uni0232 -49 KPX A Ygrave -49 KPX A Ycircumflex -49 KPX A Wdieresis -49 KPX A Wacute -49 KPX A Wgrave -49 KPX A Wcircumflex -49 KPX A uni021A -54 KPX A Tcommaaccent -54 KPX A tcaron -17 KPX A Tcaron -54 KPX A yacute -40 KPX A Yacute -49 KPX A fl -17 KPX A fi -17 KPX A Ydieresis -49 KPX A ydieresis -40 KPX A quoteright -118 KPX A quotedblright -118 KPX A y -40 KPX A w -40 KPX A v -40 KPX A t -17 KPX A f -17 KPX A Y -49 KPX A W -49 KPX A V -72 KPX A T -54 KPX B Ygrave -17 KPX B uni0232 -17 KPX B Ycircumflex -17 KPX B uni022E 18 KPX B uni01EC 18 KPX B uni01EA 18 KPX B Ohungarumlaut 18 KPX B Obreve 18 KPX B Omacron 18 KPX B Gcommaaccent 18 KPX B Gdotaccent 18 KPX B Gcircumflex 18 KPX B Cdotaccent 18 KPX B Ccircumflex 18 KPX B Ccaron 18 KPX B Cacute 18 KPX B Gbreve 18 KPX B Yacute -17 KPX B Ograve 18 KPX B Ocircumflex 18 KPX B Oacute 18 KPX B Ydieresis -17 KPX B OE 18 KPX B Otilde 18 KPX B Oslash 18 KPX B Odieresis 18 KPX B Ccedilla 18 KPX B Y -17 KPX B O 18 KPX B G 18 KPX B C 18 KPX B hyphen 18 KPX C period -17 KPX C comma -17 KPX D V -17 KPX D period -35 KPX D hyphen 18 KPX D comma -35 KPX E hyphen 18 KPX F uni01E3 -54 KPX F uogonek -17 KPX F uhungarumlaut -17 KPX F ubreve -17 KPX F umacron -17 KPX F utilde -17 KPX F rcommaaccent -17 KPX F uni022F -54 KPX F uni01ED -54 KPX F uni01EB -54 KPX F ohungarumlaut -54 KPX F obreve -54 KPX F omacron -54 KPX F eogonek -54 KPX F edotaccent -54 KPX F ebreve -54 KPX F emacron -54 KPX F aogonek -54 KPX F Aogonek -58 KPX F abreve -54 KPX F Abreve -58 KPX F amacron -54 KPX F Amacron -58 KPX F udieresis -17 KPX F aring -54 KPX F ae -54 KPX F semicolon -35 KPX F ograve -54 KPX F hyphen -44 KPX F period -100 KPX F uring -17 KPX F otilde -54 KPX F edieresis -54 KPX F ugrave -17 KPX F comma -100 KPX F agrave -54 KPX F Atilde -58 KPX F ecircumflex -54 KPX F racute -17 KPX F egrave -54 KPX F Adieresis -58 KPX F Aacute -58 KPX F ucircumflex -17 KPX F atilde -54 KPX F Acircumflex -58 KPX F oslash -54 KPX F ocircumflex -54 KPX F A -58 KPX F a -54 KPX F adieresis -54 KPX F odieresis -54 KPX F uacute -17 KPX F aacute -54 KPX F rcaron -17 KPX F acircumflex -54 KPX F eacute -54 KPX F ecaron -54 KPX F e -54 KPX F oe -54 KPX F o -54 KPX F r -17 KPX F u -17 KPX F Agrave -58 KPX F colon -35 KPX F oacute -54 KPX G period -35 KPX G hyphen 18 KPX G comma -35 KPX J semicolon -40 KPX J colon -40 KPX J period -77 KPX J comma -40 KPX K uring -21 KPX K Uring -35 KPX K ecaron -21 KPX K Ccaron -26 KPX K Cacute -26 KPX K yacute -44 KPX K Yacute -26 KPX K Ugrave -35 KPX K Ucircumflex -35 KPX K Uacute -35 KPX K Ograve -26 KPX K Ocircumflex -26 KPX K Oacute -26 KPX K Aacute -40 KPX K Acircumflex -40 KPX K Ydieresis -26 KPX K ydieresis -44 KPX K oe -21 KPX K OE -26 KPX K Otilde -26 KPX K Atilde -40 KPX K Agrave -40 KPX K oslash -17 KPX K Oslash -26 KPX K udieresis -21 KPX K ucircumflex -21 KPX K ugrave -21 KPX K uacute -21 KPX K otilde -21 KPX K odieresis -21 KPX K ocircumflex -21 KPX K ograve -21 KPX K oacute -21 KPX K edieresis -21 KPX K ecircumflex -21 KPX K egrave -21 KPX K eacute -21 KPX K Udieresis -35 KPX K Odieresis -26 KPX K Ccedilla -26 KPX K Adieresis -40 KPX K y -44 KPX K u -21 KPX K o -21 KPX K e -21 KPX K Y -26 KPX K W -35 KPX K U -35 KPX K O -26 KPX K C -26 KPX K A -40 KPX K hyphen -72 KPX L Uring -54 KPX L Tcaron -81 KPX L yacute -35 KPX L Yacute -63 KPX L Ugrave -54 KPX L Ucircumflex -54 KPX L Uacute -54 KPX L Ydieresis -63 KPX L ydieresis -35 KPX L quoteright -239 KPX L quoteleft -239 KPX L quotedblright -239 KPX L quotedblleft -239 KPX L Udieresis -54 KPX L y -35 KPX L Y -63 KPX L W -67 KPX L V -118 KPX L U -54 KPX L T -81 KPX N semicolon -35 KPX N colon -35 KPX N period -63 KPX N comma -63 KPX O X -17 KPX O V -17 KPX O period -58 KPX O hyphen 36 KPX O comma -58 KPX P ecaron -26 KPX P Aacute -72 KPX P Acircumflex -72 KPX P quotedblbase -128 KPX P quotesinglbase -128 KPX P oe -26 KPX P Atilde -72 KPX P Agrave -72 KPX P oslash -26 KPX P ae -26 KPX P otilde -26 KPX P odieresis -26 KPX P ocircumflex -26 KPX P ograve -26 KPX P oacute -26 KPX P edieresis -26 KPX P ecircumflex -26 KPX P egrave -26 KPX P eacute -26 KPX P aring -26 KPX P atilde -26 KPX P adieresis -26 KPX P acircumflex -26 KPX P agrave -26 KPX P aacute -26 KPX P Adieresis -72 KPX P o -26 KPX P e -26 KPX P a -26 KPX P A -72 KPX P semicolon -35 KPX P colon -35 KPX P period -165 KPX P hyphen -54 KPX P comma -128 KPX Q period -49 KPX Q hyphen 36 KPX Q comma -49 KPX R Tcaron -17 KPX R yacute -17 KPX R Yacute -30 KPX R Ydieresis -30 KPX R ydieresis -17 KPX R quoteright -35 KPX R quotedblright -35 KPX R oslash 18 KPX R ae 22 KPX R aring 22 KPX R atilde 22 KPX R adieresis 22 KPX R acircumflex 22 KPX R agrave 22 KPX R aacute 22 KPX R y -17 KPX R a 22 KPX R Y -30 KPX R W -21 KPX R V -35 KPX R T -17 KPX S Scedilla -21 KPX S Scaron -21 KPX S S -21 KPX S period -35 KPX S hyphen 36 KPX S comma -35 KPX T udieresis -91 KPX T aring -95 KPX T ae -77 KPX T semicolon -35 KPX T ograve -114 KPX T ydieresis -109 KPX T hyphen -165 KPX T quotedblbase -72 KPX T uring -91 KPX T otilde -114 KPX T edieresis -114 KPX T ugrave -91 KPX T comma -109 KPX T agrave -95 KPX T Atilde -54 KPX T ecircumflex -114 KPX T ccedilla -114 KPX T racute -72 KPX T egrave -114 KPX T Adieresis -54 KPX T Aacute -54 KPX T ccaron -114 KPX T rcaron -72 KPX T eacute -114 KPX T ucircumflex -91 KPX T yacute -109 KPX T quotesinglbase -72 KPX T atilde -95 KPX T Acircumflex -54 KPX T oslash -77 KPX T ocircumflex -114 KPX T scaron -91 KPX T A -54 KPX T ecaron -114 KPX T guillemotright -72 KPX T scedilla -91 KPX T adieresis -95 KPX T w -109 KPX T odieresis -114 KPX T uacute -91 KPX T guilsinglright -72 KPX T cacute -114 KPX T aacute -95 KPX T period -128 KPX T T -35 KPX T acircumflex -95 KPX T e -114 KPX T Tcaron -35 KPX T a -95 KPX T c -114 KPX T guillemotleft -72 KPX T oe -77 KPX T guilsinglleft -72 KPX T o -114 KPX T s -91 KPX T r -72 KPX T u -91 KPX T Agrave -54 KPX T y -109 KPX T colon -35 KPX T oacute -114 KPX U Aacute -30 KPX U Acircumflex -30 KPX U Atilde -30 KPX U Agrave -30 KPX U Adieresis -30 KPX U A -30 KPX U semicolon -35 KPX U colon -35 KPX U period -91 KPX U hyphen -17 KPX U comma -91 KPX V uring -63 KPX V ecaron -91 KPX V yacute -40 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -77 KPX V Acircumflex -77 KPX V quotedblbase -128 KPX V quotesinglbase -128 KPX V ydieresis -40 KPX V quoteright 18 KPX V quotedblright 18 KPX V oe -91 KPX V OE -17 KPX V Otilde -17 KPX V Atilde -77 KPX V Agrave -77 KPX V oslash -91 KPX V ae -91 KPX V Oslash -17 KPX V udieresis -63 KPX V ucircumflex -63 KPX V ugrave -63 KPX V uacute -63 KPX V otilde -91 KPX V odieresis -91 KPX V ocircumflex -91 KPX V ograve -91 KPX V oacute -91 KPX V edieresis -91 KPX V ecircumflex -91 KPX V egrave -91 KPX V eacute -91 KPX V aring -91 KPX V atilde -91 KPX V adieresis -91 KPX V acircumflex -91 KPX V agrave -91 KPX V aacute -91 KPX V Odieresis -17 KPX V Adieresis -77 KPX V y -40 KPX V u -63 KPX V o -91 KPX V i -17 KPX V e -91 KPX V a -91 KPX V O -17 KPX V A -77 KPX V semicolon -100 KPX V colon -100 KPX V period -174 KPX V hyphen -72 KPX V comma -174 KPX W udieresis -40 KPX W aring -86 KPX W ae -67 KPX W semicolon -67 KPX W ograve -81 KPX W hyphen -54 KPX W quotedblbase -109 KPX W uring -40 KPX W otilde -81 KPX W edieresis -81 KPX W ugrave -40 KPX W comma -155 KPX W agrave -86 KPX W Atilde -63 KPX W ecircumflex -81 KPX W racute -44 KPX W quotedblright 18 KPX W egrave -81 KPX W Adieresis -63 KPX W Aacute -63 KPX W quoteright 18 KPX W ucircumflex -40 KPX W yacute -21 KPX W quotesinglbase -109 KPX W atilde -86 KPX W Acircumflex -63 KPX W oslash -81 KPX W ocircumflex -81 KPX W A -63 KPX W a -86 KPX W adieresis -86 KPX W odieresis -81 KPX W uacute -40 KPX W aacute -86 KPX W rcaron -44 KPX W period -155 KPX W acircumflex -86 KPX W eacute -81 KPX W ecaron -81 KPX W e -81 KPX W i -17 KPX W oe -81 KPX W ydieresis -21 KPX W o -81 KPX W r -44 KPX W u -40 KPX W Agrave -63 KPX W y -21 KPX W colon -67 KPX W oacute -81 KPX X Ccaron -17 KPX X Cacute -17 KPX X Ograve -17 KPX X Ocircumflex -17 KPX X Oacute -17 KPX X Aacute -35 KPX X Acircumflex -35 KPX X OE -17 KPX X Otilde -17 KPX X Atilde -35 KPX X Agrave -35 KPX X Oslash -17 KPX X Odieresis -17 KPX X Ccedilla -17 KPX X Adieresis -35 KPX X O -17 KPX X C -17 KPX X A -35 KPX X hyphen -35 KPX Y uring -86 KPX Y ecaron -86 KPX Y Ccaron -17 KPX Y Cacute -17 KPX Y Aacute -63 KPX Y Acircumflex -63 KPX Y oe -86 KPX Y Atilde -63 KPX Y Agrave -63 KPX Y oslash -86 KPX Y ae -77 KPX Y udieresis -86 KPX Y ucircumflex -86 KPX Y ugrave -86 KPX Y uacute -86 KPX Y otilde -86 KPX Y odieresis -86 KPX Y ocircumflex -86 KPX Y ograve -86 KPX Y oacute -86 KPX Y edieresis -86 KPX Y ecircumflex -86 KPX Y egrave -86 KPX Y eacute -86 KPX Y aring -77 KPX Y atilde -77 KPX Y adieresis -77 KPX Y acircumflex -77 KPX Y agrave -77 KPX Y aacute -77 KPX Y Ccedilla -17 KPX Y Adieresis -63 KPX Y u -86 KPX Y o -86 KPX Y i -17 KPX Y e -86 KPX Y a -77 KPX Y C -17 KPX Y A -63 KPX Y semicolon -123 KPX Y colon -123 KPX Y period -128 KPX Y hyphen -100 KPX Y comma -128 KPX Z period -17 KPX Z comma -17 KPX f quoteright 73 KPX f quotedblright 73 KPX f quotedblleft 31 KPX f period -35 KPX f hyphen -35 KPX f comma -21 KPX k hyphen -40 KPX o period -17 KPX r quoteright 36 KPX r quoteleft 36 KPX r quotedblright 36 KPX r quotedblleft 36 KPX r period -91 KPX r comma -72 KPX v quoteright 36 KPX v quoteleft 36 KPX v quotedblright 36 KPX v quotedblleft 36 KPX v period -100 KPX v comma -81 KPX w quoteright 36 KPX w quoteleft 36 KPX w quotedblright 36 KPX w quotedblleft 36 KPX w period -100 KPX w comma -81 KPX x hyphen -17 KPX y quoteright 36 KPX y quoteleft 36 KPX y quotedblright 36 KPX y quotedblleft 36 KPX y period -114 KPX y comma -95 KPX guillemotleft Tcaron -72 KPX guillemotleft T -72 KPX guillemotleft J -35 KPX guillemotright Tcaron -72 KPX guillemotright T -72 KPX guillemotright J -35 KPX Agrave uni0233 -40 KPX Agrave ycircumflex -40 KPX Agrave wdieresis -40 KPX Agrave wacute -40 KPX Agrave wgrave -40 KPX Agrave wcircumflex -40 KPX Agrave uni021B -17 KPX Agrave tcommaaccent -17 KPX Agrave uni0232 -49 KPX Agrave Ygrave -49 KPX Agrave Ycircumflex -49 KPX Agrave Wdieresis -49 KPX Agrave Wacute -49 KPX Agrave Wgrave -49 KPX Agrave Wcircumflex -49 KPX Agrave uni021A -54 KPX Agrave Tcommaaccent -54 KPX Agrave tcaron -17 KPX Agrave Tcaron -54 KPX Agrave yacute -40 KPX Agrave Yacute -49 KPX Agrave fl -17 KPX Agrave fi -17 KPX Agrave Ydieresis -49 KPX Agrave ydieresis -40 KPX Agrave quoteright -118 KPX Agrave quotedblright -118 KPX Agrave y -40 KPX Agrave w -40 KPX Agrave v -40 KPX Agrave t -17 KPX Agrave f -17 KPX Agrave Y -49 KPX Agrave W -49 KPX Agrave V -72 KPX Agrave T -54 KPX Aacute uni0233 -40 KPX Aacute ycircumflex -40 KPX Aacute wdieresis -40 KPX Aacute wacute -40 KPX Aacute wgrave -40 KPX Aacute wcircumflex -40 KPX Aacute uni021B -17 KPX Aacute tcommaaccent -17 KPX Aacute uni0232 -49 KPX Aacute Ygrave -49 KPX Aacute Ycircumflex -49 KPX Aacute Wdieresis -49 KPX Aacute Wacute -49 KPX Aacute Wgrave -49 KPX Aacute Wcircumflex -49 KPX Aacute uni021A -54 KPX Aacute Tcommaaccent -54 KPX Aacute tcaron -17 KPX Aacute Tcaron -54 KPX Aacute yacute -40 KPX Aacute Yacute -49 KPX Aacute fl -17 KPX Aacute fi -17 KPX Aacute Ydieresis -49 KPX Aacute ydieresis -40 KPX Aacute quoteright -118 KPX Aacute quotedblright -118 KPX Aacute y -40 KPX Aacute w -40 KPX Aacute v -40 KPX Aacute t -17 KPX Aacute f -17 KPX Aacute Y -49 KPX Aacute W -49 KPX Aacute V -72 KPX Aacute T -54 KPX Acircumflex uni0233 -40 KPX Acircumflex ycircumflex -40 KPX Acircumflex wdieresis -40 KPX Acircumflex wacute -40 KPX Acircumflex wgrave -40 KPX Acircumflex wcircumflex -40 KPX Acircumflex uni021B -17 KPX Acircumflex tcommaaccent -17 KPX Acircumflex uni0232 -49 KPX Acircumflex Ygrave -49 KPX Acircumflex Ycircumflex -49 KPX Acircumflex Wdieresis -49 KPX Acircumflex Wacute -49 KPX Acircumflex Wgrave -49 KPX Acircumflex Wcircumflex -49 KPX Acircumflex uni021A -54 KPX Acircumflex Tcommaaccent -54 KPX Acircumflex tcaron -17 KPX Acircumflex Tcaron -54 KPX Acircumflex yacute -40 KPX Acircumflex Yacute -49 KPX Acircumflex fl -17 KPX Acircumflex fi -17 KPX Acircumflex Ydieresis -49 KPX Acircumflex ydieresis -40 KPX Acircumflex quoteright -118 KPX Acircumflex quotedblright -118 KPX Acircumflex y -40 KPX Acircumflex w -40 KPX Acircumflex v -40 KPX Acircumflex t -17 KPX Acircumflex f -17 KPX Acircumflex Y -49 KPX Acircumflex W -49 KPX Acircumflex V -72 KPX Acircumflex T -54 KPX Atilde uni0233 -40 KPX Atilde ycircumflex -40 KPX Atilde wdieresis -40 KPX Atilde wacute -40 KPX Atilde wgrave -40 KPX Atilde wcircumflex -40 KPX Atilde uni021B -17 KPX Atilde tcommaaccent -17 KPX Atilde uni0232 -49 KPX Atilde Ygrave -49 KPX Atilde Ycircumflex -49 KPX Atilde Wdieresis -49 KPX Atilde Wacute -49 KPX Atilde Wgrave -49 KPX Atilde Wcircumflex -49 KPX Atilde uni021A -54 KPX Atilde Tcommaaccent -54 KPX Atilde tcaron -17 KPX Atilde Tcaron -54 KPX Atilde yacute -40 KPX Atilde Yacute -49 KPX Atilde fl -17 KPX Atilde fi -17 KPX Atilde Ydieresis -49 KPX Atilde ydieresis -40 KPX Atilde quoteright -118 KPX Atilde quotedblright -118 KPX Atilde y -40 KPX Atilde w -40 KPX Atilde v -40 KPX Atilde t -17 KPX Atilde f -17 KPX Atilde Y -49 KPX Atilde W -49 KPX Atilde V -72 KPX Atilde T -54 KPX Adieresis uni0233 -40 KPX Adieresis ycircumflex -40 KPX Adieresis wdieresis -40 KPX Adieresis wacute -40 KPX Adieresis wgrave -40 KPX Adieresis wcircumflex -40 KPX Adieresis uni021B -17 KPX Adieresis tcommaaccent -17 KPX Adieresis uni0232 -49 KPX Adieresis Ygrave -49 KPX Adieresis Ycircumflex -49 KPX Adieresis Wdieresis -49 KPX Adieresis Wacute -49 KPX Adieresis Wgrave -49 KPX Adieresis Wcircumflex -49 KPX Adieresis uni021A -54 KPX Adieresis Tcommaaccent -54 KPX Adieresis tcaron -17 KPX Adieresis Tcaron -54 KPX Adieresis yacute -40 KPX Adieresis Yacute -49 KPX Adieresis fl -17 KPX Adieresis fi -17 KPX Adieresis Ydieresis -49 KPX Adieresis ydieresis -40 KPX Adieresis quoteright -118 KPX Adieresis quotedblright -118 KPX Adieresis y -40 KPX Adieresis w -40 KPX Adieresis v -40 KPX Adieresis t -17 KPX Adieresis f -17 KPX Adieresis Y -49 KPX Adieresis W -49 KPX Adieresis V -72 KPX Adieresis T -54 KPX AE hyphen 18 KPX Ccedilla period -17 KPX Ccedilla comma -17 KPX Egrave hyphen 18 KPX Eacute hyphen 18 KPX Ecircumflex hyphen 18 KPX Edieresis hyphen 18 KPX Eth Yacute -17 KPX Eth Aacute -17 KPX Eth Acircumflex -17 KPX Eth Ydieresis -17 KPX Eth Atilde -17 KPX Eth Agrave -17 KPX Eth Adieresis -17 KPX Eth Y -17 KPX Eth V -17 KPX Eth A -17 KPX Eth period -35 KPX Eth hyphen 36 KPX Eth comma -35 KPX Ntilde semicolon -35 KPX Ntilde colon -35 KPX Ntilde period -63 KPX Ntilde comma -63 KPX Ograve X -17 KPX Ograve V -17 KPX Ograve period -58 KPX Ograve hyphen 36 KPX Ograve comma -58 KPX Oacute X -17 KPX Oacute V -17 KPX Oacute period -58 KPX Oacute hyphen 36 KPX Oacute comma -58 KPX Ocircumflex X -17 KPX Ocircumflex V -17 KPX Ocircumflex period -58 KPX Ocircumflex hyphen 36 KPX Ocircumflex comma -58 KPX Otilde X -17 KPX Otilde V -17 KPX Otilde period -58 KPX Otilde hyphen 36 KPX Otilde comma -58 KPX Odieresis X -17 KPX Odieresis V -17 KPX Odieresis period -58 KPX Odieresis hyphen 36 KPX Odieresis comma -58 KPX Oslash X -17 KPX Oslash V -17 KPX Oslash period -58 KPX Oslash hyphen 36 KPX Oslash comma -58 KPX Ugrave Aacute -30 KPX Ugrave Acircumflex -30 KPX Ugrave Atilde -30 KPX Ugrave Agrave -30 KPX Ugrave Adieresis -30 KPX Ugrave A -30 KPX Ugrave semicolon -35 KPX Ugrave colon -35 KPX Ugrave period -91 KPX Ugrave hyphen -17 KPX Ugrave comma -91 KPX Uacute Aacute -30 KPX Uacute Acircumflex -30 KPX Uacute Atilde -30 KPX Uacute Agrave -30 KPX Uacute Adieresis -30 KPX Uacute A -30 KPX Uacute semicolon -35 KPX Uacute colon -35 KPX Uacute period -91 KPX Uacute hyphen -17 KPX Uacute comma -91 KPX Ucircumflex Aacute -30 KPX Ucircumflex Acircumflex -30 KPX Ucircumflex Atilde -30 KPX Ucircumflex Agrave -30 KPX Ucircumflex Adieresis -30 KPX Ucircumflex A -30 KPX Ucircumflex semicolon -35 KPX Ucircumflex colon -35 KPX Ucircumflex period -91 KPX Ucircumflex hyphen -17 KPX Ucircumflex comma -91 KPX Udieresis Aacute -30 KPX Udieresis Acircumflex -30 KPX Udieresis Atilde -30 KPX Udieresis Agrave -30 KPX Udieresis Adieresis -30 KPX Udieresis A -30 KPX Udieresis semicolon -35 KPX Udieresis colon -35 KPX Udieresis period -91 KPX Udieresis hyphen -17 KPX Udieresis comma -91 KPX Yacute uring -86 KPX Yacute ecaron -86 KPX Yacute Ccaron -17 KPX Yacute Cacute -17 KPX Yacute Aacute -63 KPX Yacute Acircumflex -63 KPX Yacute oe -86 KPX Yacute Atilde -63 KPX Yacute Agrave -63 KPX Yacute oslash -86 KPX Yacute ae -77 KPX Yacute udieresis -86 KPX Yacute ucircumflex -86 KPX Yacute ugrave -86 KPX Yacute uacute -86 KPX Yacute otilde -86 KPX Yacute odieresis -86 KPX Yacute ocircumflex -86 KPX Yacute ograve -86 KPX Yacute oacute -86 KPX Yacute edieresis -86 KPX Yacute ecircumflex -86 KPX Yacute egrave -86 KPX Yacute eacute -86 KPX Yacute aring -77 KPX Yacute atilde -77 KPX Yacute adieresis -77 KPX Yacute acircumflex -77 KPX Yacute agrave -77 KPX Yacute aacute -77 KPX Yacute Ccedilla -17 KPX Yacute Adieresis -63 KPX Yacute u -86 KPX Yacute o -86 KPX Yacute i -17 KPX Yacute e -86 KPX Yacute a -77 KPX Yacute C -17 KPX Yacute A -63 KPX Yacute semicolon -123 KPX Yacute colon -123 KPX Yacute period -128 KPX Yacute hyphen -100 KPX Yacute comma -128 KPX Thorn period -146 KPX Thorn hyphen 18 KPX Thorn comma -128 KPX eth period -17 KPX ograve period -17 KPX oacute period -17 KPX ocircumflex period -17 KPX otilde period -17 KPX odieresis period -17 KPX oslash period -17 KPX yacute quoteright 36 KPX yacute quoteleft 36 KPX yacute quotedblright 36 KPX yacute quotedblleft 36 KPX yacute period -114 KPX yacute comma -95 KPX thorn period -49 KPX thorn comma -17 KPX ydieresis quoteright 36 KPX ydieresis quoteleft 36 KPX ydieresis quotedblright 36 KPX ydieresis quotedblleft 36 KPX ydieresis period -114 KPX ydieresis comma -95 KPX Amacron uni0233 -40 KPX Amacron ycircumflex -40 KPX Amacron wdieresis -40 KPX Amacron wacute -40 KPX Amacron wgrave -40 KPX Amacron wcircumflex -40 KPX Amacron uni021B -17 KPX Amacron tcommaaccent -17 KPX Amacron uni0232 -49 KPX Amacron Ygrave -49 KPX Amacron Ycircumflex -49 KPX Amacron Wdieresis -49 KPX Amacron Wacute -49 KPX Amacron Wgrave -49 KPX Amacron Wcircumflex -49 KPX Amacron uni021A -54 KPX Amacron Tcommaaccent -54 KPX Amacron tcaron -17 KPX Amacron Tcaron -54 KPX Amacron yacute -40 KPX Amacron Yacute -49 KPX Amacron fl -17 KPX Amacron fi -17 KPX Amacron Ydieresis -49 KPX Amacron ydieresis -40 KPX Amacron quoteright -118 KPX Amacron quotedblright -118 KPX Amacron y -40 KPX Amacron w -40 KPX Amacron v -40 KPX Amacron t -17 KPX Amacron f -17 KPX Amacron Y -49 KPX Amacron W -49 KPX Amacron V -72 KPX Amacron T -54 KPX Abreve uni0233 -40 KPX Abreve ycircumflex -40 KPX Abreve wdieresis -40 KPX Abreve wacute -40 KPX Abreve wgrave -40 KPX Abreve wcircumflex -40 KPX Abreve uni021B -17 KPX Abreve tcommaaccent -17 KPX Abreve uni0232 -49 KPX Abreve Ygrave -49 KPX Abreve Ycircumflex -49 KPX Abreve Wdieresis -49 KPX Abreve Wacute -49 KPX Abreve Wgrave -49 KPX Abreve Wcircumflex -49 KPX Abreve uni021A -54 KPX Abreve Tcommaaccent -54 KPX Abreve tcaron -17 KPX Abreve Tcaron -54 KPX Abreve yacute -40 KPX Abreve Yacute -49 KPX Abreve fl -17 KPX Abreve fi -17 KPX Abreve Ydieresis -49 KPX Abreve ydieresis -40 KPX Abreve quoteright -118 KPX Abreve quotedblright -118 KPX Abreve y -40 KPX Abreve w -40 KPX Abreve v -40 KPX Abreve t -17 KPX Abreve f -17 KPX Abreve Y -49 KPX Abreve W -49 KPX Abreve V -72 KPX Abreve T -54 KPX Aogonek uni0233 -40 KPX Aogonek ycircumflex -40 KPX Aogonek wdieresis -40 KPX Aogonek wacute -40 KPX Aogonek wgrave -40 KPX Aogonek wcircumflex -40 KPX Aogonek uni021B -17 KPX Aogonek tcommaaccent -17 KPX Aogonek uni0232 -49 KPX Aogonek Ygrave -49 KPX Aogonek Ycircumflex -49 KPX Aogonek Wdieresis -49 KPX Aogonek Wacute -49 KPX Aogonek Wgrave -49 KPX Aogonek Wcircumflex -49 KPX Aogonek uni021A -54 KPX Aogonek Tcommaaccent -54 KPX Aogonek tcaron -17 KPX Aogonek Tcaron -54 KPX Aogonek yacute -40 KPX Aogonek Yacute -49 KPX Aogonek fl -17 KPX Aogonek fi -17 KPX Aogonek Ydieresis -49 KPX Aogonek ydieresis -40 KPX Aogonek quoteright -118 KPX Aogonek quotedblright -118 KPX Aogonek y -40 KPX Aogonek w -40 KPX Aogonek v -40 KPX Aogonek t -17 KPX Aogonek f -17 KPX Aogonek Y -49 KPX Aogonek W -49 KPX Aogonek V -72 KPX Aogonek T -54 KPX Cacute period -17 KPX Cacute comma -17 KPX Ccircumflex period -17 KPX Ccircumflex comma -17 KPX Cdotaccent period -17 KPX Cdotaccent comma -17 KPX Ccaron period -17 KPX Ccaron comma -17 KPX Dcaron V -17 KPX Dcaron period -35 KPX Dcaron hyphen 18 KPX Dcaron comma -35 KPX Dcroat V -17 KPX Dcroat period -35 KPX Dcroat hyphen 18 KPX Dcroat comma -35 KPX Ecaron hyphen 18 KPX Gbreve period -35 KPX Gbreve hyphen 18 KPX Gbreve comma -35 KPX Lacute quotedblleft -239 KPX Lacute Ydieresis -63 KPX Lacute quoteleft -239 KPX Lacute U -54 KPX Lacute T -81 KPX Lacute W -67 KPX Lacute V -118 KPX Lacute Y -63 KPX Lacute Tcaron -81 KPX Lacute Udieresis -54 KPX Lacute quotedblright -239 KPX Lacute Uacute -54 KPX Lacute ydieresis -35 KPX Lacute Uring -54 KPX Lacute quoteright -239 KPX Lacute Ugrave -54 KPX Lacute yacute -35 KPX Lacute y -35 KPX Lacute Ucircumflex -54 KPX Lacute Yacute -63 KPX Lcaron quotedblleft -239 KPX Lcaron Ydieresis -63 KPX Lcaron quoteleft -239 KPX Lcaron U -54 KPX Lcaron T -81 KPX Lcaron W -67 KPX Lcaron V -118 KPX Lcaron Y -63 KPX Lcaron Tcaron -81 KPX Lcaron Udieresis -54 KPX Lcaron quotedblright -239 KPX Lcaron Uacute -54 KPX Lcaron ydieresis -35 KPX Lcaron Uring -54 KPX Lcaron quoteright -239 KPX Lcaron Ugrave -54 KPX Lcaron yacute -35 KPX Lcaron y -35 KPX Lcaron Ucircumflex -54 KPX Lcaron Yacute -63 KPX ldot l -117 KPX Lslash Uring -54 KPX Lslash Tcaron -81 KPX Lslash yacute -35 KPX Lslash Yacute -63 KPX Lslash Ugrave -54 KPX Lslash Ucircumflex -54 KPX Lslash Uacute -54 KPX Lslash Ydieresis -63 KPX Lslash ydieresis -35 KPX Lslash quoteright -151 KPX Lslash quotedblright -146 KPX Lslash Udieresis -54 KPX Lslash y -35 KPX Lslash Y -63 KPX Lslash W -67 KPX Lslash V -118 KPX Lslash U -54 KPX Lslash T -81 KPX Ncaron semicolon -35 KPX Ncaron colon -35 KPX Ncaron period -63 KPX Ncaron comma -63 KPX OE hyphen 18 KPX Racute oslash 18 KPX Racute aring 22 KPX Racute ae 22 KPX Racute agrave 22 KPX Racute Ydieresis -30 KPX Racute aacute 22 KPX Racute acircumflex 22 KPX Racute T -17 KPX Racute W -21 KPX Racute V -35 KPX Racute Y -30 KPX Racute adieresis 22 KPX Racute Tcaron -17 KPX Racute a 22 KPX Racute quotedblright -35 KPX Racute ydieresis -17 KPX Racute quoteright -35 KPX Racute yacute -17 KPX Racute atilde 22 KPX Racute y -17 KPX Racute Yacute -30 KPX racute quoteright 36 KPX racute quotedblright 36 KPX racute comma -72 KPX racute quotedblleft 36 KPX racute period -91 KPX racute quoteleft 36 KPX Rcaron Tcaron -17 KPX Rcaron yacute -17 KPX Rcaron Yacute -30 KPX Rcaron Ydieresis -30 KPX Rcaron ydieresis -17 KPX Rcaron quoteright -35 KPX Rcaron quotedblright -35 KPX Rcaron oslash 18 KPX Rcaron ae 22 KPX Rcaron aring 22 KPX Rcaron atilde 22 KPX Rcaron adieresis 22 KPX Rcaron acircumflex 22 KPX Rcaron agrave 22 KPX Rcaron aacute 22 KPX Rcaron y -17 KPX Rcaron a 22 KPX Rcaron Y -30 KPX Rcaron W -21 KPX Rcaron V -35 KPX Rcaron T -17 KPX rcaron quoteright 36 KPX rcaron quoteleft 36 KPX rcaron quotedblright 36 KPX rcaron quotedblleft 36 KPX rcaron period -91 KPX rcaron comma -72 KPX Scedilla Scedilla -21 KPX Scedilla Scaron -21 KPX Scedilla S -21 KPX Scedilla period -35 KPX Scedilla hyphen 36 KPX Scedilla comma -35 KPX Scaron Scedilla -21 KPX Scaron Scaron -21 KPX Scaron S -21 KPX Scaron period -35 KPX Scaron hyphen 36 KPX Scaron comma -35 KPX Tcaron udieresis -91 KPX Tcaron aring -95 KPX Tcaron ae -77 KPX Tcaron semicolon -35 KPX Tcaron ograve -114 KPX Tcaron ydieresis -109 KPX Tcaron hyphen -165 KPX Tcaron quotedblbase -72 KPX Tcaron uring -91 KPX Tcaron otilde -114 KPX Tcaron edieresis -114 KPX Tcaron ugrave -91 KPX Tcaron comma -109 KPX Tcaron agrave -95 KPX Tcaron Atilde -54 KPX Tcaron ecircumflex -114 KPX Tcaron ccedilla -114 KPX Tcaron racute -72 KPX Tcaron egrave -114 KPX Tcaron Adieresis -54 KPX Tcaron Aacute -54 KPX Tcaron ccaron -114 KPX Tcaron rcaron -72 KPX Tcaron eacute -114 KPX Tcaron ucircumflex -91 KPX Tcaron yacute -109 KPX Tcaron quotesinglbase -72 KPX Tcaron atilde -95 KPX Tcaron Acircumflex -54 KPX Tcaron oslash -77 KPX Tcaron ocircumflex -114 KPX Tcaron scaron -91 KPX Tcaron A -54 KPX Tcaron ecaron -114 KPX Tcaron guillemotright -72 KPX Tcaron scedilla -91 KPX Tcaron adieresis -95 KPX Tcaron w -109 KPX Tcaron odieresis -114 KPX Tcaron uacute -91 KPX Tcaron guilsinglright -72 KPX Tcaron cacute -114 KPX Tcaron aacute -95 KPX Tcaron period -128 KPX Tcaron T -35 KPX Tcaron acircumflex -95 KPX Tcaron e -114 KPX Tcaron Tcaron -35 KPX Tcaron a -95 KPX Tcaron c -114 KPX Tcaron guillemotleft -72 KPX Tcaron oe -77 KPX Tcaron guilsinglleft -72 KPX Tcaron o -114 KPX Tcaron s -91 KPX Tcaron r -72 KPX Tcaron u -91 KPX Tcaron Agrave -54 KPX Tcaron y -109 KPX Tcaron colon -35 KPX Tcaron oacute -114 KPX Uring Aacute -30 KPX Uring Acircumflex -30 KPX Uring Atilde -30 KPX Uring Agrave -30 KPX Uring Adieresis -30 KPX Uring A -30 KPX Uring semicolon -35 KPX Uring colon -35 KPX Uring period -91 KPX Uring hyphen -17 KPX Uring comma -91 KPX Ydieresis uring -86 KPX Ydieresis ecaron -86 KPX Ydieresis Ccaron -17 KPX Ydieresis Cacute -17 KPX Ydieresis Aacute -63 KPX Ydieresis Acircumflex -63 KPX Ydieresis oe -86 KPX Ydieresis Atilde -63 KPX Ydieresis Agrave -63 KPX Ydieresis oslash -86 KPX Ydieresis ae -77 KPX Ydieresis udieresis -86 KPX Ydieresis ucircumflex -86 KPX Ydieresis ugrave -86 KPX Ydieresis uacute -86 KPX Ydieresis otilde -86 KPX Ydieresis odieresis -86 KPX Ydieresis ocircumflex -86 KPX Ydieresis ograve -86 KPX Ydieresis oacute -86 KPX Ydieresis edieresis -86 KPX Ydieresis ecircumflex -86 KPX Ydieresis egrave -86 KPX Ydieresis eacute -86 KPX Ydieresis aring -77 KPX Ydieresis atilde -77 KPX Ydieresis adieresis -77 KPX Ydieresis acircumflex -77 KPX Ydieresis agrave -77 KPX Ydieresis aacute -77 KPX Ydieresis Ccedilla -17 KPX Ydieresis Adieresis -63 KPX Ydieresis u -86 KPX Ydieresis o -86 KPX Ydieresis i -17 KPX Ydieresis e -86 KPX Ydieresis a -77 KPX Ydieresis C -17 KPX Ydieresis A -63 KPX Ydieresis semicolon -123 KPX Ydieresis colon -123 KPX Ydieresis period -128 KPX Ydieresis hyphen -100 KPX Ydieresis comma -128 KPX Zcaron period -17 KPX Zcaron comma -17 KPX uni02BB Aacute -137 KPX uni02BB Acircumflex -137 KPX uni02BB Atilde -137 KPX uni02BB Agrave -137 KPX uni02BB AE -123 KPX uni02BB Adieresis -137 KPX uni02BB A -137 KPX uni2010 Tcaron -165 KPX uni2010 Yacute -109 KPX uni2010 Ydieresis -109 KPX uni2010 Y -109 KPX uni2010 X -72 KPX uni2010 W -54 KPX uni2010 V -72 KPX uni2010 T -165 KPX quoteleft Aacute -137 KPX quoteleft Acircumflex -137 KPX quoteleft Atilde -137 KPX quoteleft Agrave -137 KPX quoteleft AE -123 KPX quoteleft Adieresis -137 KPX quoteleft A -137 KPX quotedblleft Yacute 27 KPX quotedblleft Aacute -137 KPX quotedblleft Acircumflex -137 KPX quotedblleft Ydieresis 27 KPX quotedblleft Atilde -137 KPX quotedblleft Agrave -137 KPX quotedblleft AE -123 KPX quotedblleft Adieresis -137 KPX quotedblleft Y 27 KPX quotedblleft X 27 KPX quotedblleft W 27 KPX quotedblleft V 27 KPX quotedblleft A -137 KPX quotedblbase Tcaron -128 KPX quotedblbase Yacute -91 KPX quotedblbase Ydieresis -91 KPX quotedblbase w -35 KPX quotedblbase v -35 KPX quotedblbase Y -91 KPX quotedblbase X 8 KPX quotedblbase W -109 KPX quotedblbase V -146 KPX quotedblbase T -128 KPX guilsinglleft Tcaron -72 KPX guilsinglleft T -72 KPX guilsinglleft J -35 KPX guilsinglright Tcaron -72 KPX guilsinglright T -72 KPX guilsinglright J -35 KPX Circumflex period -17 KPX Circumflex comma -17 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Monospace-BoldOblique.pfa0100664000212600000240000050456710330505373017706 0ustar mikeuser%!PS-AdobeFont-1.0: Monospace-BoldOblique 1.15 %%DocumentSuppliedResources: font Monospace-BoldOblique %%Title: Monospace-BoldOblique %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:21 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Monospace-BoldOblique known{/Monospace-BoldOblique findfont dup/UniqueID known{dup /UniqueID get 4092906 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Monospace-BoldOblique def /FontBBox {-173 -1034 1654 2157 }readonly def /UniqueID 4092906 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Monospace Bold Oblique) readonly def /FamilyName (Monospace) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle -11 def /isFixedPitch true def /UnderlinePosition -221 def /UnderlineThickness 246 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 1CED864D422F76FD8FAEF6132F502482A3D8B4A45438351BEF76DE83DDF4E51528714B6A 2E0891A07E6A4C4AF06631204074926585455A5677B5DB36647E8D4B74F135293000FE37 CEAC7E5D7112AD08238B10F0A7E8C6B22250EC0C3AE0CEC1B5D58D6CE79A5C9E8AA78533 80CBA7928F215BFBAB9974AFFD4EAE72E2F13FA51DBB826B3345FF4EFECC42059C923D3D 744770EB5214390157686984CE97B7A323A282FB3942AC23170668648757127D1F629DE9 F47CC4D8B96EB65B46A5F601947908C6623ED3C619000369C9E67729C539451F62FC5580 9EE2C0DEDB3928CC0FDD6D955E88BDD03D1ACF344F28493FCB53D4FC1B863FA25220FE1A 1481C7750500555A9BD2D8D14147C9F8D44BF71EF40F09B0A188725D6B400C688671D7B5 547DF767FF1075536B17074CB44E973ABC27A9494A2D5880537C8D53A2C7262E53EB25FF C4C00E380FF2F8B0A0D33A03BD016174D197257B13A27D23E9EFE76CC0F6D8975A0015DA DA093AA1B08F2BD290040DBD6674FF79F4718DA59796045B4D8091C39F6B407D5F2715C4 E5CCF1F7A8909DC995C81CB305B02836E96488ABED0835D20FBD3507AEA8C9B51EB85BC7 148CB611417A4A894FEB958C0CFC59F6359567D6A13A0D01A7AC80E9918450DE949D19BE 31C7FFE9CCB6A9980AC3CFE03409367CCF926A75F8CAF8C2BCE07AE51FA505E0EAEDB20C 4B530DFF7DABB79822CCAB90A5366E32840749B94EF996104D44B3E13E3EDA856C4CFD10 3CE65A33CE8A22AFF27E081A93AEC929F7766C0F1F8C8A5414D3BB4C46F8E791D02C1710 95FFE94019D62F166E3EDBD88B350E8211CFC504E546F14016DA01DFF478C25015A6530B 8D38CA3F7AF4DB3B8959EACC030207E8239C17E351E737F58960875256AE6BF5094C042B F753341EDA79F533F602F673B803394FA140B5F9E0768413A9EA96961CA0002036751C33 FEFB66DC4FF30585349AF7C9924B9C94E20DD44381028847816BE17FA4D554B30A78AF24 11318819B1553C659F9866EAE2C775A9E06BB5E90AF8B32B1A7BB290EFFA41F5B5033C85 401D3B85F125D61EE0B245E0FF52B1F46CA409A86A88A8E40CF38BB9940168BF936734B1 F45EF8AFE5BDA9F613972D9F61EF5FE3F8D4D19690C2AFC60C3FC4681906BD2570945EC1 8B6161A8A960546C23964E2B005EB85B4146C5EA93313E99557B8820C6690E945AE88661 AAB10C0D47BD67CC00C03BA82A04407CD9B692351FBA25E75E4486A21D9A0542762D5A64 F8B1B879A11EBFBCE426F221372C7DA133D7CC2B2C0F9E6F269B3DDD14A4167F184F76BB F0A6AE68F88340051B93CCAC09BBCE3A674F684ADC4F2F5D121A3CDA013FD031637EADC3 36D6EFF295A86B54867FCFE1F05BF5A73C737040BD3B1A0E924193B83B6BB378B2453D9A A3D53B864E1EFA1822D4D2EAE2B310A42389ABF90F4D439E0DC7CF34E8B90439EE25C677 00F9DD5CBFC6DD5681E3C79F26089F6D569E0F07CDBA2881D812766439FFC0894C0E191E 054AFA67FC1B1AAC7ACDC5B6D710F1D0D7D6EA32937FBD67CA71A1D5C5EF59A3C0D833C4 5F78B126A88A81E73971B7E12AF16C4B23086F282FB309755696851DB9685FA9564AD878 BB22CCFFF759CA65A594FFC2FAD61F774BB8450A09B08631B1E808E267E855F003A5B951 D8B4BB325401E199F57345709782E2959757EAB5BE7AD6B5BFF17014E3A1A8382819CE75 EAC4C68377FC032EC0D74603F25A2B1386F7FEEE876467D0DDEE2B2B9D03E25F32137D1B 4A8F90BBA322636C8571B6E215111579F95C346171C8BFE6777B081660877518D1B44917 ECAEE307B68D51DF094AAD59DDA212747661AB31A9F31392C4EEDE462668675988A83172 AD88BAFEEBBE500AFB2A4D9CDC985494CDB271AA0741C0709A2A4991B5EEC213F3BCF107 E6EC214DEE85916ADD3440AA2A7D24F0645E254639EFD1AA093BAE93015A7FCCADE66817 F4AFF9E5A10DC390AC33D707D8A8401F93D0318626FB23F8E6226B5C5230FAA6323C32AD 9F73A91ACC682BEF7AB3A99347316812A926E30DA8AD7CA702E52C73CC37D8A2F8D3D679 D2F4F17419B85D061833B63DDCA501DB6E5FE81B5F8E601C59057D912CF9163D1DDB4237 6D4CFAEDCF4E4F66600F71D7C31061A9846A0F153536DAD78AFC80AC89DFBB1CECE4D89A DCC95F5E7E03A41A6BBDEAFB3372ACF32ED1D5DA6CF8A768812D69620806585686FF6658 81AD1D1AB17E7282E6150A3EB40B400ECD78E202FA63A5508EC4D6FD78EC3998991D3829 B4CAF3B7714AADF0AA04D5239F5BB40A7678938E493E6E58BA9AADAC797A8A7AFAF594E5 82CE777C987C6E9B4EE421FD1E44B7C3DB349621789B8142C2773C049CD999E3BD26B634 BC86CDCC6F930EAC04C71A25E8A2D1DE3539C8981723ABBFAF835B9615FA36A3D89E1502 F46C09FE21AD93811C447461729A4283E1C865419A5437973C07F830FB3645906DE1EF79 5A4D0DA6079B77C3D0CC1D1581EB24BD9644CBE0FF57D58295D3C1529F95B61F21B4480C 9B1FDD14B20A776EE20F18FDB5A595778724CD68D237057519E58622DB09E9F86D8FDC28 1F5FC5BDA84BBB46836244A7510737F6FC411F39FC9A6EB3FCB5D9541C7B3410F60AA52E FF65CD9C4D20B21CC0E16A7DF3800DABF3475105AFAF14D2CBFE8C4A0CB98910441699B4 B7419F0F91E4E7E68F6AE3640B4E82A52856FEC5D51863D14CC9A7E54DFC3F18EA6FE05B DDA764A8FFB62408BA412567BCD78692A562E309C2DBCD900AC231610AB97A7701B98440 5EAB031BD3922A9B29AA0A38BA410AC99CCA246E324FA59BF265924EB41343043C2D8CCB FFE1F6EE81437B8C256179A5A69D7C0BAE4F13C59D7356B0FC9878D14CC9F1882E68EFB5 0B324F590A76A19F01520AFE617A6ED645A9BBB0D4AEF69A01099C2F7F93382700E3C7C1 2862E5289B66EAAB1DBE13802C29D11452A82968592995686EB09AC67B64CAC41E9177B1 1A21741097ED55CB5F383DCE927C5EE5FCC13B261589586DCB03ACF7E74C67606A71E235 A335469B97FDB6DA8613437685ECE63BED792266DB50ECAFBF082DEFE04803CCCAC08B1F 47D3EEE82D635A9F97975EFD80A316371ADF86031250077B1CC0F403845FAA306ECCAC14 A194E85663252D9FAEA449B2A2AC2C76EF828F9EEA8556CA4057EE0BEF356C1DCC76308F 05CD254A737EAFDF2912E74C38C3617EDAE3969A03B01AB3254C909B93979E6226E20D48 69B44FE0F9D8002A02ED206544DD099567DDA0489BD957DC14818C7CC1264D405BCC9E9D A31BA99C5A695E106794694B7FF847497FC8A7E961C57CE3959D71253007B8C2A6733FCC B6E43863F782DC8D37C60A226D46AFB6176C9507C7837C1DD2E23559FA1377794CC32079 90FD6E0EAB77096F8C4896081B5203495207EE8CFCE63AF48840778C1DE08A449953DF83 D5EC0B82593EF1D059D2C5B9350F21AE58BAB03F57A4CCDD4D4CD8CAF475E0315CA8612A C3E66CC597DFD5F4F53BC6788B84C1E2E8A8AD02FEE9D9D5F7471508D7E3F447F55EB1D9 D54EE8207131F8FB5B2A394C0C08F35E8F93AC9E0D0F93A77C28F9FDE8990CAB8E3908FF EB8DC0EFCC98F88315E0DA33B6C6B4B50B17661DE788C1A874BCD2407C3047DC79DD6650 B6908207965CB5BF7E7B83A7030D30D3799F406C9875E3CFA9A42401CA2C7115B1446472 4D38382EAD16C042B8F2B352F6A9FC7FBC2E488BE6A2D97FBC1E643FE4CDA2097253798A D26DDBD706E4CBC5661BD87E5E488960F643A960E9DE3891163276B377FF96D9D2E93B81 17DEC91E5D3BA80B14A699C56E8F48DA2EE0A8DFC2C981B106C70E0766CC379D97653EE5 465EED2B6FEE0C1CD2F4776D30E08EEAFCC427D6420F516F9F0CB3C060659C4CADAAAD94 40B3FF65406F49F4174C2B0C606A3B03A8BE0F7767139539BDC38B93965ED44BE4E2A53A 149EE0D512D37958A9BC369452B6A121DFA0BAAEC6E9F6E00533AD6EF857E662C7FF4AF4 5B7732E3C5A037E3A752682EBA6976330FF3FC1CC6271EB7B2024D2B00386A8A5737F052 F98A223E309E457645E4D1C91B59E827C451D0CF32DC3B3D725BF5E325F9D2CC1994C319 2B4C1D05BDCB87122F41D6F72A762FA45509074D76A32974ED953C5257F9EA335152E96C 1EAD2DFC8B7A85B5DDA1975EA400EF5DEA8F43C82EF663D3E5E122D4EB1C67E7E16CEA46 F12D63DFECB85A84C7B77637FD330F89503DB4B342124ADE972AA14D81F492A5695225D4 39A6EDB80209D1A49A7B393D00C1B5429DEE9D81EE2E7570A5E244E6457612C61E3869BD 772FB5CCCE59811D7CF516105765ACE6B68061B1B411FE664C84A767F66238231C96159A 21C3CBFEDF73F3B56A25264CD5FCFE91C36977A683B369716D6525FDC97E5D2828F26961 292D8D5F7279E6C0C87F89827B1ED97187E3EB9E3ED021F23DF98790F5095C6063E144B5 34FB190D15B1DED675CF8CF5C8FDA3434844ED1BB8E1D93F43D5829E6603AB001D423EA8 279972CCF3AFB4BF776483A41C607AF581B1031E6DA4D716B7876D7785FA7DA4C74DE445 33EE4B832B5B27154617AE7C5E32F4CDBEFA77290FE45D80011C0E7BF5BDE91A63708F0A FAC6D6AFF5FE1EEB23C187EF486BE3E8EB042616A4763634BE5B4CF31417D6B7A807A3F3 C3A6F6C285A7C7BD46AB63CA1F9BBE01A4E8E98E4CB44D2F26CCB99A85402F0A474E531D 9675475FA6F06A7347FD8FA30BFA67ADACCECA881CF703E2E15D8585A9EFE607E311922B D9F0F8B7715021C9A90986D4C0E681F024CD13CD38A34DC8415FB96E6DEBA849D1CFD157 181439E3C004ACF2D5E7C40F2366A89977662CC8D0C0CE03E77F77696871B7BCF85DEF44 9F1DFD9A9B4F68B870A1ACEAB20CD407A27C5B75533A08CDDF6D0C97650EC5FD4AC0208E 07C59FA798DFD38FB86AF3E71503F76634DFB15F6323927C87AFDFA9178D71391DC51E76 75BC787B749BB53926B0BA5FDCFFB241AE27B036C586CCCCFA0896D78A63578A986E329B DA9F0E5EB0C5C1DEF06FD3667910600941AA707EF6EA9ACCF721C8DCF7760BFA32E3D5CB 86E79CF66DE28D80CFF83950238BA7EAF551FC3A8E4EE0302C840E7FA11D2F1BBBEA8EEE 94C313EB4B47975CFDB214B3134711BCD1F2E3ABDF11E591E9EABFF57C226CA83B3DBAE9 DD3FC6F2C3C4777E9B5479A7E904D0E1F7D36CDFF6B32323E4218F8CFD5EF467865B2636 81FFD990E58EA69595D4D86F2122C52BBFB43650FA8145B1B6AF095541123E31E99B3981 A701C47091FA0C752499D2754E3D6A2E3322730CFA4EABB60807FC81AB82D6A4C81949EE 75B45A30EFAD61F1984993AB44AE604BB045120D01CCC85B0EB54302E05AF8B5FAAEF675 62057457ED730857620073F014DB40BDA7E41941A3FCB28A9EB2DA319C3193A90030F0CC 0DE63B94B68E7548B709AE50267036A770646EF39C64B31DB865D12A60E502DB4EB11C5F F784708E3F670FEBB1888296C3753D690EB6D9ED17216471CD3C4D5FB8F3F6DA866E326C 58E8E892A3E6BF60ACD586D6CC8A0C984EB030E4C5E1883B78C4A04ABACD295FA292830F 2884504E35363BF69D7B2F16E43F5B94CF2CA934185C684B1F87108B58C0FA15F75F48AA A03892283FD1FAB239D5A09BFA310E59F2244FEF8481E1494A263EC2E3D4CC5ABAE4E37B D73F74559FF9B32EC960E5689C3E86033F1D20210FC448143FEF0C77809CF789F6B8A55C F383BE3D85B82DEDFE4DC4480C508325A5D28216C097BEF9893103004E551D0516E05B33 1408028C881732A82151E3572C279972EE0DA66503B2A7A7E450F1A4866B9FD0215B7BA4 84C0E5B95276E6FCC43896D4222EC7ED7CA5A4D873D0E80523DA60CFED59C07C7704072B 8D988611AB4CE42D6F85CF336CD7FBDB4FD1B13BEF8D97BE6355EFBFC2F53E7D59E257B0 F71B620746A03C7D7C5B2CCE57177F16490074171B8DC509297CD5E43B498F86C2BCB119 8C408DC0DDC294DD2253FFC5B03DA71DBF93E8BF8E2AB316D852369AF766C92CB2C82CFF 4F9247BF252C7712AE3978F76F78AD8C9002426B3736257E92CED2337961A693797AD3A7 3138CA2489CC0E2AF826E4DDEBBB1C1C2F07C6B98C721A0519A2CA6DBF7AA6CC5C1184AA E5A05AD35274696A805327F95544D71747E356D5C1B83431FD8CE05F0378CA6BAA36E7F6 8CCDA7246655D8866D21E21E63B23440457B8863118B7080AA83318B32D45756D17AAF29 20A7DCA29679F76FEF9C33D543E54460506CF9254E16656E033D7558A09FE3BDAB6A283F 0A881A67E3FF025A92F37748527EC24A7337AAA5B6254A5F95FEE2380125D05A25A9BA64 4E60FBC4C25C2AAC69CDAC16ED0D79188DEFF61692D56DD91481D11F6B6AF7C86CE24BA3 761E2380974ED69FEBECB22EED4C4E244C635C52E0B162A79C948592CC6BFDDBCA26C8AD D9A35E6EDC3D659EAFDE4C4F430133C337461E97D2460BB6C8C2550A500433C5F96EC312 3044426764FD9EA134359F414F59105A3705DB72BB3199B0CF9240979119D7E0FC27BC13 849501B45F654ED63F93B6D74590BDA5A019A93A397A59E9B8A41E5F61219F5884390F12 321281D125799406F9E234F1133BEECAF2EA304AB4C313C902214FB7D7993723772C39CB 0127B4E82830DE0B9A7D60FB452F70F90ED4CD2D2628A132816ADED99B9F355D20313F71 1B0586F2A20C90705BBE628F2C9720534FE780FF3EC15DE762EDFC86ECE91A1A9E530C54 56A887921523806EFAB6E9E397838087921945D0EFDAD8EAD7D27E3C24B4BCEF2C8B92C9 06A725065BB42F0DE1653DF32C802EE2EC33EBE5FFB0470AE8AEAEF3119ECA6FA4728AF2 CEED07C5F5024A27EB62475A8254E8DD444685EBC545BCEFF63FBC285208350AF5065CDB 466FBAB8540D8679430793A202CDB44EEA4082A36797F4308F037F64739247389189E303 F31A1AF0C1780FD9AADC74528533AC6EEACE64E043E09EC5BE365D706FBCB09338597286 30962CBE409AEBA4142B80C11603B4276DF35E15E62CD9478711D2CC8454561B687C2463 9F68BBE2659168C72BF87743E758D33649ABDF6A7A4F42F625B2F83A4F141CFFF14A661C 9DA1E1D045F6891F82EF2E548E11497164235049BD3E3CE707E99874DFCF2E912DC431F3 7F9894E3C7BA894BF1677FA0F392BA9FB652BC93D898501C5E6B4E20FA8AC7CE6FDC9AC1 D86723440BF06D420E78F5B32BEE9BE5DCAE455DF6EF63128622CD90C39B46CB9EE4F45D 72A5EB1512EDCB4DB7220E561160941421D6860979A039B9E5D5706126A3D65BB8F46740 2332E34E1709298538D20F5BFD178A2AF0391E93672D1BDACAA87CAD9C13873C98B3BFE1 D28D783690420FC7A88F50241EDF64BCAC2B64E2B0BEF2B5C646318674EAEB1A15D431D2 1678A73D2165F9A356E648D47FB6B7B5A889391E194BF80550962C1E996DDE28AEBB2529 6508102B534332948DE46D92DEA56C8D19A08FAD37A646BE88C0B6178F72FFA422F33D81 D5C4F69504B96A0CC6FF3F4525E0F78BF4F1B27D7970FF1B2F9703952C823C0E99BBA0E6 63E413EDA3C4ED453176723D3B91683DA70365774570A5E36C40CEFAF29BB91948820395 B60D780E7EFF9BF0C7496905628CD5084A34D852EC665C81497DDAE2D38594C8556937E3 FC505A281C3B582A9288EBC36E39B8A1148AE6B29B265016DBBEE8DDA7B0E9C7EFF37B87 2E95507CCD7FEF306906F05B7FF2387A2AD253178616AFC3BE56667A9B1875C81D960245 54B5B785D210EB8285BCA0D3462CB40CC8A7310567AB5C1ACFCF279EDC74DFC8863A0441 897C6FC2C12B875832FC9CEAEF57543C65AE75987834B1C2ED9FCB266A9B8703C2F53E69 3375F4BAC0C609D464FC164426B01930746D0C66516E02FA50A95B742A7117DD03D67414 D40A0E37D0C9340181B3D689A09898DA6B4EBF8B9D022DEF18DCBB58D2AAE351488A28DF 8C01110345C31A7CCF136CAC367B7609DDF27B64326B1A93D69677314EB62E1603C7E522 420000203B5A9014148875FFB716CDA3B0EE8558AB8A864DF11BD863A640FFE835E0D469 F1587F32E5F329C2BAD5B2604B58204B7667397F349D4A5EC7D40F53AC32B5D493F8128C 295165B31A382D32383E1B45C12992EA246D677319AF5C09E2F540411404949A9825F62B 5A306FDE4A93720B5067B3433353F3473E078A92F433D8A3E7CDB486131A4EFBA06065A2 97C4706E1C0049557496AAB1BEA12A9B7BC411608EF41ED6F3EF7288494B9B5B9728066A F99B7AFDCF6C245C06FAB5FC1175D9816EB90FF3116A4040CD614F18ED3339C5828BC121 550D55A8595E4E679F37A744926179453C7E27190D64F3284656CE7C0D334A7420275903 F9C0889248ACDA0D646C1885FE98F4E2E9DA8353852DCDDC9A36DD4359723FBDD1FC3334 E4F49C07F30DED223A031BB54AC966DA65C9979D32FA1F3E9B2F46EE773891A4CD8A9BD4 EF1AF2763F1BB5A3F9067317D9B5BAB7C622F974A3DA0934EBA78E353E220C29FECF3541 528AC86A4EE2F73AC9D38FEE530D517C00CF43377D607942F881613C9BE20B59D48AE852 31E81B23EC531003D7505E6584FF64CE940DBF2DB3742B142A20B1C8B6AA07D9538D4E16 B70AD1D7C07EE5BA566876C92F548A643A158096AE000A8C6E1948D46AF2FE91AA3587D9 F39E0315C506F739461E8B73ADFD18B15285A15A6161491B7CD85F80C1C7240E35BA7FFA 40876F878B468DF1B50EC980FBC4C8C62BB16DC81A38A21ED69CD2AEA4A56B093BA9FC57 1EEF14D429176852D4CB3762BA789C741EFC39C26606E93BD525C2850E99822BE0DA5CA8 CB749B6A650ABE24C3667428E8DB1C790ACF96E0D4B48441B019D29D85AAD46F3FC6BB14 8DC9DFFA73A5C6B041C48A60616850C31D1F648757E4ADD8AC4B6EACAA801A88D3043842 6352AC493AD6D01C83BAA2B645217F62E167B30964B8493EBE3D5370EDECA3F75193416A C763EC9318BB4A8651D858AFD090692FE0F3114698F8F7E729C5F0C20BE9EEF9E12AFA46 8B77608629D6E5D5269898206BD5BB4D6BB72D97A959E793984D26012E4C5BF4B3D70C7F 43AB875FBC17E8CD19E0E56EE012782E73DC04B62B806142265938B4FB9B366B109921E5 353E29F046F530734E2E312E953708B41884E50A0B4A7D2BA9A8132BE0FCF7FF5E37F0AE 7FB48513B73D346FCD60996A2ABC8659A8E93CF9A0E1135BBC4A438E71813F2C217744EA 4D42E3DB03AE3038CD53F8FEDDCDEDBAE5C69D7EBF6DD4A41A1510A12358D5DA5F98AC07 DFB9C648B5A72AC100480E34D38B897E9390E223C1E057FC09AA828D2524CFEB0B36E2F4 794FF8D66E9734AF0559123BB70725C1B466E5230C8BEDB01B073C10F4011D7C0F6F2814 60A76371335A96AD7469C7C7012A3AF9E1BF900B64384B1FB1804CEA27DC37DCBB64B8EF 98BC8179AF176295DAE271D686E87D3B9DC68C138FB4F7E2FDD5962B35DC6FD46DD24242 CC30107200FE6F7730D33F274B6E532FE791EBA9AA79E4049D3E406C74CE152AE8FD1BAA 96920AB1EB2CCEF4D3E3F58DD499C8458CAEC9FE7F1E91DFB25BEFB7EC37E53EA6A524F0 6D22F8403643F13063D750BFE2CC05C32380A92172F9071F5B526764B3B98EA9246387A6 09DB489CCAC4B35B07FCF17955B42ACEE5656DD90B6746EB8D11A8C43AAD98AE1EFF5751 F313B455A66D646D83D4055FEF177C96DDB064BB5E6F880935CF01D146A8C792757F0CCC 25F3FF24869BA74D81DD1572901F099C6FEEC45992B8DBB77043A0527F628ABEE2DAEE4B EAE37E89071761307BFE39AFF657DAC83DBAD2C5F602917213DB0C5D4A9604F37DF37C3C 49FF2FF5CB143505FCCB025002F292789FA6690B573DF46E2DD0DCCAF4F5E4369075E359 5B999C19872053E9930701583E88627BCA93A11BF22CC6F45F440CE2FD768CD93B64ECD5 4916B0764C459A2689A72E147AE9E66995BF88E4EB0DE2B9067D0FBAAA1658620F4B8F3C 5B469F5543F02D4DCFFBA5071BBA25C7D025C1635C5F5E2F72A850C3E5F63978689C3D55 4F139D38F8F28E79D6C96AD77F03BB29A928F5C81FCAB3406BB16B427E26DD0394634FB1 1134F07F316FAAEC79F04BAA0F2CC7D8BE3E76805500A40DB647A3AB774DD011C6D2D65F 03B4F2A45079ECE8831C28A4EB68F462561CF76650BD8000FB8971FF4ABD066FFA0C1E74 6D21E35ACDE42E376A6C6488602674C537CDCF5F163101D4AEE68F0688E16337454C4CC6 07D2BF89342B8F38438B6E4F142BC7496E17F12F7D241FE0653E8F1AA12BF5E2F91F6886 20870CC5794A56888CC248E076DBC743CAB5B43D784D9C576755750C79F3116BAF053ED6 659D9F02375AF7D017CE1DD368481271F3959A5F84F49B1D0C796F547A5DF8551908E48B 65E05E8DA081C69CFC95FD9889148A5594C1C839EC62D9D12A20B39D4163C193843F829E 6FA88926D80FBA23988EE8A69544A3B6D72D7B87716A963B4A9498E11893F19395D7DC37 83FBE1AEDCB3ED86AFF660A4D3E25FA7F21848C1A8815334D443269EB21DBD8794A744B9 7C9BA089AE6D1F3AC68615EC11DC1A6FDE19B1D732BE963890C6DE995CB4184614B3741B A64842BA7486D4774D90FF43CAD4A6D8AB1BA46E0EB7A8812BB1D973F13DB24A043124FE 60C9C97151A8B582BDA433FFA3B9F734EEA35F1B86674150A50F75543D3BA208743F0978 C6532B70CF70FD58BAE0B3EF4157279C6E9CA885CD1CEB3694A286993A238AFD737D34E0 585C5396C21991883B928672AF8E7060F41EB9D955C2F3BBF7378E52964BB318920778EF A1EF42EA6D8C53508A79C1DE7D85E0C9A292B820EF3FCF714BB533423A60BA1D5A084A35 CE918A6867A12FD0C3B3BFD50BB025AA2B304EA290544A2758FACF6BC401A0391B070F24 C3777E8D5DD438F24CCC919DA93C2D548A2279FAD56A845F4CE6A9912A77B202DCC77F45 4A3B3BA11741E32D2D1C4F824978A078FEE972A6646FCB3843C655DB8FC065D66434DF6E F46BBA42413CA88FAA9F0B2FFD2D753D6B891D8A6B75AE8189123A0DB91B971C00300F5B CFC2387EAF61C367C981BFF3F0BFB148227E9A7DE7299DE595B027970CCBB78B0C524CC1 DA29C98A769081FF8B2EAD1D01A97FB975C084784F33109CE38732F4B7BC2E89E38F7C22 7E295B9D644CCDF0C3F899203C33DEEA916EE508679BC12117140BF786E118733EF50B94 E8547E486E9BEEA26D42565201E05B4F7354989423115D89BEB2F1596F2458D7F248483D 7E1B4E359D679B0F4E1B2C73EC3C37373AEDC75723340A07B4BB35C820D69B0550BFE3B4 24B44BF1C627C21EA62F4D81E59AE4FF9EE17315064544BA9908A49492439F5F4CA58F3B 82923CD1045F2A43449ED3BC3FE872A89A470857B1B0FFEB942D08B41E80EA5CD66FACE9 94559A4A143270F8CCC95D2880C2206E0BA08216A85966E084F061B13887EEE5D335DEF2 B872D0816C8923B106A629E90ABBC2016A819DB95E63CD4C7B56FE64A917915FB3E9E16A E1E74DC608F123DC565D6AA5839F8FCEDCA33258DD1F2471C787E8DEF9FB417D33225428 874680419E9DBB9479530B26C4385F3FBA517222155729798049856C640C8745A7212A4B E7473EEF586E548BDD5ABFB34EFABE513FF7EC3E28CBD7521C8AB00FC7162D85E7D9515D E56C53B4BC1FF18CAD6DCDF28317F32F5DC5A2D9F3B15616165F15D7757A05C4A7187384 1261A65046B57EEFDB367EE48468EB4BEBD7A67368DF534C217E3CFB16F15CA97B986922 B078C7B76E634EAC55BC29D2376AE295D49C9916F562ADD7823E23EC90CBE7395919DBB4 6B5E21E56F9A5B204BF0662F68C49E9303623D847763A1AC888D00D7ABCF34C3401D2EE1 59005343EE15EFB9D5A5A1D330A8D5EB442A1BB47C523A18F4733B76373FA37AF4234363 03EC4BED56C72AB6316966E2FCB2363FF2D4CA597E68BCC3FE3F139C272C7454B85E9FD9 E23D8B6A38159E91B587C2B5F01D75817B75315B989E85D71E52CA4F13497F8A11C207D0 89FD55A01D3251D7553AF6BD067A65158DAA766E24AF513B5711A0AB231087315A3D97C1 2B5E790F4488FDA7EDCD02DBC2FCE692DB6D56F16BBA576687769642F0169DC57DFD04F2 FF63861E7C03F841F84AD6C096A57520694E536A26A19D977AF1DA8793C7434764FC12B5 16BBCB418F59C91ED4BE658224960F0DB0C95879A591F94DC288FD475A32079D31E6C41E 808FA8D9968817012620E7F30F14B2C1C0A5BE47E647832CF3334F68F4CA0CF338223262 1A0478FA29D7D90CFCF76D83F39E44A4A878000A6A252BDECE5DA448EEEF21A63695323E 9C69DAD5E67438DE4F7B20B6B0A035751A39FFBD912F4EFA1713546D0156C53BD3F3BFB3 AD47F99BA96E0234178A7E980830ABDC6E8C5CE38CF0CC56570447291D422D9ACA5CD12D D4444402FE14825BA95670755422399CE362805AFD38C923358F5DB8BF1078C3FC6AB6CA E3B057B7760CD16F2EFADE9EA0D40D6296E4BDEB33AD023109148BAEB6307D20AD3F8A77 F5063C8319ECF4E56586C12982AB630890FFB2158AD97B5AFDEC586DE615E8304FCA1C52 0369FEBC2C9EEE9068A6DEAC05706FE7E024E8254C4CE5C7404DE853DAEA209E7D067F88 571FEF20076CF19D6CACD0D29B43E04E132D40C0FEC8FD4FA9A7621BD18215BE346A0F5F C6DC05175753865A2D987B947FEDE67B23FE2D3635C357633D57C90C41923F889541D703 9399785BAA6EF2ADBFA1940227CFEF4448BA652201223FAC24CF955B98087C4CA2664263 BE8746DFC29FA5DEA877AF83897FE2B068B061B5C05871FA675C449654E6AEAD3A8F896A A3588948271FB7F9CD953144CD070DEF9F6CF516C8AD51B47B87766087329889670AB278 9CF4A2552225A1C997BEE8C3D9FE338609022837E306282A21867ADCD56FA9763D34A547 8C7C7570B19D04D6164EADCE146E617C85A122E9265746EF9A929CD2A9E341095C7E646D 95D437FD5BE233E352B27BD9A19D0FAE0FF524257DCDA23C6D5AADF460EE7358D4490D7B 9DBD68A72EBDF1D266BC974D7F56D3C89850C024CEE759D09214108D6916D34B407E62AD 89B402AC74F74EF4C0E96569977627C9BB63B6C6F536D1A9CB279B636EDE90A804F32254 DC167ACDEAF8778B164E36ED23DB890438AEB44487E3355E536835BE443021621DCA9E4C 8C39A54F4B7C28716329997C1B0BE5CB5FFFC7E99724D5D8C829783D156155639D79DBF1 FDBF3082B62BCD5A3A04BDD2D94BAFB7BB997ED0A6524DBB227EFB29BD49A240CBF7644B AFA665795211AA5735F435336C88EEE7972E94505873F66EA6657AE8A1480119EC9896EC EB6C9250F5BE682193B4CF0C9CBAF146D2A61C895BE6518CDEEA1E460EA8119433685E51 87CC18A77BAFB8C8C411EEE0CC655631E7ECFDCE6C59B397C9D568D0EAF9C6C540E508AD 3CEC230FFC326F1D9570218D51591C335D89BED38711EDDACE3FDB2F667B1107EB410283 61F09D4082975C1EC481504D446B0284D017F96B94FA8875B08B11CE175C1CDE5D0CC9BC 93202FF57BACADCAE11ED701021E7720B88A78AFDDD6D71409E4DE4EB766970C87E3D900 76EAD2457BD9D819B99CC7B0AE137CC3E018F0EC1450E91D2ED5BDB94D86BB77BA4F291D 8DC1443FDD001C7EB25B09208B92FA8EA31CD9D0A6DB0059C0B4643D898CD15CDDCB211B 885155CCF420E1C62B867A923C1071D1B4495FC4914D957D3208D4C0EE082C898D74A063 2B60AB2D9657B9F510BBE6A2B9AC95D1192350183541E598FCD52B811F4543A1CF25A85C 12F9B4E51CDBB6067286D7B6919EE8BEE3B3B6C55BA28AF9E7604D13148000CC0C1F2619 DA17AFD8CE1DFE099B7039FE71D8F6439F0E046C72F76E2CE69E7D787C9AD548563517CB 72B57FBE712261D00FEC755C108E9020548F4B49D805FF248370459EB32985DFF1BFAA2C E0EE93D945744965FD6945525C176FD953B5394E521DA5CE283F147FE0A538C74F326BA6 60D9721EC2A777B3F9047EEE5535159EDA109AB7CD240520DB61BD088FC45F4A0EB42614 4AFFD87C7C1DF28DA381BA980D2B144708F7E471230DE98BB691D78F4D8A72B8CB519474 9D392D4CCD79A03DDFB93F8A8163BD07FECD4851EAF615A49607385852857FCE90F3E499 3056B7E80244FA21F488EFB3341095E684F428574DDAF149AA105863626B4952129CC819 06D28957E534DDB5C030E718CE15C9561A04BF18A0F3785CA6ADBB5E2CA74C9166D95FC5 8537624A9B0663B9D4684E64D1C17BA9DE128EBE66E057FD3CE3B5C7AD929640C7B26B71 48E82F21A36B86664317A1412DA80BDF4C867852BE5E650B772F6DA9919F32B96860783A AB469C9C88A0BA958D3986121F396C4D2183D104DB5D0382A846DF7D40E195182CD24C79 01C1A9E556EB8CCDE58C61E44E7E80F37568AB5858AB86FBFD0711552F0CEBC1F4A4FB1A 0D55986B73B49D49911008851EFB478C9E93BE7A1AD4E10FE0222432F64329B0B1577D3C E603C0B50AEF8FDB39804ECF0B566C2757DF12F65F3AEFEDCAD98A6B9DE485E0E96F3974 FC7B196065C86992DE0BA6D4CF123A0CDCB94CEEFB8420916000F18B643DCD6A48FA32D9 F5FA37D93CDFAA1BE4D95FB3D597CAF2EE196814A3B2E30A494C70EA193DF6647D96DF61 BFCE1C5043899E5D33176B746ED3F555AA0AC6A6057C0D1B2D283C33142114CE60DE0811 A8816D22DDE6BC1854B6C8930A5FA6496769388FCF338446838C3FD937C391CE06946181 83051E106A440443F143CCD973B24B9E5D27E384853212CA4AE98C16B49A4A311A7759D3 41B4497DCE2627B7D6E4FFF124EDC45B2573371C034707AAC8CD3A3F9547534422428B11 6F840382D0D36802DB6386A9E73B4E3E4D3BBC0FD636A9F21967B1D550D727CB401598DE 144B1E04B617FBBDE509F475F0F2181C0F0C6C3F49228D0859269839C52FC2018CDEBA3B 51108199DDC78BD12E55B48B557E07797FC27BD87D41FE591E26F284B3E80C3B6B4C227F 25562C846B64143CA3864C1974777D33EB196C29B3391D658208C62B8D0679C5A2380B4C 95CC97B4192EECE50BB950FA8387505E858D309FB172A852DE81ADE4F7B7D1AACEBFE2AD 6F0106EDED3D7EED9F3827929B54C17364D62141CF95137DBC1EE377FAEC39147CB344B0 94AFBA1B7A0A82D41E1FC63DAB168534255D02890B465F496A2625CB78E683DF3B64060F 255876747A24DDC01E0074211C23F8E28DBD6A6A0FE90C42A35983A92EC58F0383124C88 9FB29494FE686DA32A5140BFB5E34941EE0A436BC5777AC41D188069BAC81E7E5A76CD21 3D5312E317771DBE5EC3A6A3DDE1BF1176C051E8949CD8AEA5B12D67B8EF50C3ACB62E11 73B9C04AAD76EF38A14E2974394080439A18C0194676434BF803672E115B12401E2DB0AC 7DB89D1D784AECCCE8B0B1541D3494A3DD019EEE3600C839B16070F7373244891AA199D4 5AE86ECC513C403991885AFB8DFE85B21C3290DE9277B6BE583EDF324C3DEDE193B1D568 9977EF532122FE8592BE4B649B773685A6BB1EEB7C9A7B00F123A4DD784F52A0D0A88FC1 292AAC4EED21D1669C7BF24448A28405A6D958F702620DF8DEDCD899B7D88D9E8FA886E3 87E91ED91318B7C0FB7353FBA22DB282D8AE1EDE64EFE64DD31D2CEC0712454C66502976 2944EEDCB22AE9D3ADA5D9AA6D49004F5FB72CD0C6594D7D51F56FD7DD5FEF94B0CF6CBA C823B03E69EB1F5A067C384EEE3021A4EC292CE7A87CE3A068B51DA6C9BC7A5293553DF3 21226509A3F95ABC67B047D344BA7595A2D6210E748968EAB2999E24CC2041D1FEB1B7D7 CCDB4FD8E57E1DB84C47F072CF15CB9425FEB8CEBA0C6A7B807CCD6A640C2DA23990BACF 69E414FDE169EE9DCF25B85463CFB6B1212A980DF38301DD90961CA8B53AC3E6EE9FF9E1 54A3DCA66C6644F75164B3DEF201C66BE4D54F108A27689C79B0384070151567A306DC4F 61E6A5400E74429CA8F6CD35DE63EE5D81D30EB252BC34D99255BBDD7333A73531B4176F 104318299AE0FC04EE26B4B3B70C39AE5D96A968229113A6C9605483A55AAE4E1B4FE4ED C3E61E7E416F905BFC6E7B8B982919BDE420725B76E9F3D2C993DF2A9A71B62202595AB0 A15C1DFE629AECF2BB6362843CC82646B95C88BB074CBD23361008B6A575B19E27A49D26 CEF1C27B1DC89A9CFA5725E8C886D376166E813DFEC08ADEE5A31660B1882C4115D12B40 2D62CB4CB1C938D07FCF89E61B352551AC0B0E37837EAF6AC464C58A79068B2C7FD4FC89 D471C914D867EE903B948B64B0AB8E3F80CB1A70260E84418014FFDC90F20B07E7DF7751 17432E151473F92B8D7FC93827D2A1F1A204EAB90CC4E493F962FEBD84B816359F4088D6 3B9B33B4A2CCFCA49AE19EAD91C9A6D3079C1E0A167C874C16741F3A0243A88E45D1F144 32B31A286B1112DDAB9E816DF3BBFAA348C75305099E610EB9CAEEE570506483383F3681 C287B3ECC3CB25835A3594604EDC661BEB1E4EFCEDAD9E4B6B09587C4C2810550FA9CB99 CF035064646F9DFECF48B98DB27A51B26EDBF083A7EA8BC696DE161CC10301FCEAB82E94 FA5FB6707DA84B83D8007435F44B216B36EF71DA5E490ADE62D61DB7802070FEBEE23F42 4BBF0521F693EA29A40ABE744C030FB428C52A4CABD3D5E43283958CF3924290884E1198 E50DEA4BDA72BB3CF95A1FFC8508139A48AECE8FED2704BB2EB8851E3A7132DCD145203C CA826F0453C71FC2581AAB287947A14425D928D75307080488E1A30224D933A090857214 029F05EAC8F5724F146A5E5E6392DA33465082CF2FA942F83BDC6A6870C0585B1339679C 8619069983A6FD382142C46F2D63E4B129A62216936FFDCEB97A1C5A9575CCA5A1C421C7 600AF4CF4640A41F6584D73B5B3AE1A8D98DCBB4F3AF7D2E7316588C1B3BD6FB3E1FA8CC EC6C8A857374D1383B0C9D1D314A10EDECF095E3A4069E79A94DD59FE72639FB02413D68 4FEB3ED14BA97F733516C88771DEC6C4F7AAC18160D7F1C85916ED3F69CC6181574D0C2F AF7D3E1EFA05EB5084F4F9BF4DFC6A4DA0985918622D90860C8838C5B8EE35B059733381 EA94BF0FFCEA70FC4EF0AF2BB2B5FC4BAEF9D0CEA3E8516323451D868F723D01E0B78749 4A69738FB836BFEE328A0A4541A03012D44B4830F174B7E35B0A25086DF34532C428E41C 83F0814F0F0D52021F42037B4DF2A6759DAD05A346E019A0633745439D835620555BBA5E 136A950B9BB234C1B3450E58CACDD658FFFD69B8E87D4EAE015F5427452AE657736DE2E0 D66DFF9E03E20E37B377AE912B90DF242285B89610A55386CB1BFD83652E6BA1DCA7D1AC A79748D0C07475ACFC652460785F6D82D1EB593DCBCFF0157856D5799635FA3E129FC93C 71A23376E61DDE5014964C4554743312A14FBF83FE99739D6C9C45EA465A4B55EFE80045 D1021AFDDA6E5E13925F3F69A19741615D56991688E0A794DB1534BB43F010A76D4E29C4 ECD9A16A90A7588DA1C31500FD55E32B2ABA623524B1E4BD40259F5C746EA160C13416E9 167D2A5507D8D484427C0C5153E0865241A7BE0C298ACB22E5A2BB24AC7F78DB58415206 F1C435587D4ED941AB7335D0CFA0528409704BC8FDA106CEFD32B77F1D6A02DEE4B05FE7 3DF87C5D95533B4983A7FD9C3FD2A3C109F9D1719C372B01073C33C5CDA6E20F91EE2F2D AC11D4B111E070DD059698CF18553C4A9A8707046A420F9BC6A6C208906987F2F5883E1F 8EF30E5A9F78BD73AE6C563EB04FD51AC339900528D76C28AE2913FC28C4CF2F585876DA 472A01FE1934645BA0AEFD5102C2F36362DDFF6EE3B4A12B63CA06698F06A0F25487EE6A 28CEEC421948B856D0CD999682277ACB8EB94DD7D88F18FED1725C3F0A9545795ACA2B6E 9C44687395B6EF3B76806A500019CB2A70C07E571100B7FCF486E0D14340DEF49740B1E9 65ED400EABD0F69E310CBCAE8714030F5776CFDB057AB354CC2F1053F84EB8008F455DC3 9870CEB793F611999E33B32E64572D46CEB3E64E0881CA70C576E2FC07AC9349EBF26BC5 6D4E84EA3C835070D0C52A41DF388C8FFC979174084133CCD6639B616A4A20DB37F2A437 0EF7E9F11A14D28B18076E8321FA194D9070D1D8226B2911595E3567C156BB1624F63635 24D1F3634A08E48178D1486C48243DF9156D63B32901417626676305F6ECF88998B46F1B 50AF077104C052E9A20EAE6924DE1DDBDC99FE3305F4BF802ACD8DEBAAF15A3F8879553C B1F4B3D7839D6989775507FAC15DF1B0DC95F554B16E0DF685CBDBB41E4A852CF7DC8A96 8DA449DD5966EED3F7802A7B12A95CEC94DAF052CADC2CA2D84D7A8FD9BD74F90F47991C 4FB5C5D9342C445E963AF1CAF3E5DF7AA4D483C9F8EF73CFE48C6A25889E3B5B71CA4E4B 0FF97995BC83939E986AD7F6B379CAD7FD04C46234D8F85A234A878939110DEBDEAE85DC 636BE2A646F64D9661844FFEF6D22FB15F5B38C129DDF372C3198992CB6C378E8C306739 012DD4B486CC3148BA4498EA8C0149E59D4AF1E7A0C00E0F94D58CA91C0C4261F459A4B4 2F8791E72A634D734A3F5DF66AF91FA8ECD4671C67ADDFFD2E2FD30FCC3EFBF0AEBCE786 DC44B9316B000A73773D1C354964AA129D82722BE5C666D5DAAC7A087F1BDDEBE3FB9AA4 CA53FB8684F87577A264E607053D5E321108EE9B8CE78600F1986C9F2510C8AE368BF871 8C8AD6E2864E257E40602D3107ADF63FD9DA46BCDBDB77B5164C43C9F1D0A1E2A50C7C0F 7BC6B45BEC60EAF2FC74022B8F0463F39CBCCF2B38318C6EB370B7CC45AFB3C1350F2A4B 48629916CFF777829AE2904FA90C19C748BFC921ED3985BB03DFEC5E9E250321B75723CD 1AAFE40242C54B182846A979E80024A9E72029A7205F13157E57C5F40951623EF59EE581 20E1C1F1EC93870BCDF45A74A731DC31CB5EE13F8C568E4C80C7D9ECE815610F215AE88F 7157CBCE990172AE920EBED45161194EF998C933252599CA45540855A0E4FEA0866C2D41 8DA00464051D7C0E2E5932D7D80921BD7F6997C9FC550BDD83433D959768C0E35E8750BA 0AD159CC296B98CA650724BF9693E410AB6106B9D423AA2EE6A47DD102EAC9B74D66858E FFA99A6422C9B5B2D466E817E8ABCD4E953A9DF9CBBFFE5748E6F47DCC8831566DCA5EB7 26B68A5C1C575340F5D034E15209E7A6C5A3284F3720A5C197111539E4D3F4B3392D8F4F C400E3CC89544B440BFB258003A6B7EBE045D625BB3166DF4869F2D8CF74EB7303F0AC40 93C24843BBFCD9A617E2C7BD53572F0B61DF1BCF677B5439B97483C973AE56D0E206FAFC 1082F9B2D0D5F900F6575BD6E11FD0863577F4CB1277C1D156711DFFA1012EF22725D52D 0136939EF40B0F661853385E154C8660C3C472618E7115D705CD837DFB7C0EC85F8B0A59 DD1564378A8CF2B03768B9CC5AD7ECA0DDDD4D405B0DACD6D13468C833DE9DC82271BC80 E4A6357569407FB09C289458B2ED792D01A9BBC25ECADAA8F2955811145BD3D681834C23 28C5E3760EA15AA03D3E0C4E67191EFA44E4A4928089E1224BFB0E79B5BA440E036007D5 32CB8560DD157D60A5A690894208C9FCA54F32FBBF9C9BCB8A3A9ADCFCF2BCA1564290E9 832C9E79304A223F60B7B58245E65D598EFC1FA06847E1AAAEC8BB3ACB454AB5EEB9265B 04589BB8FCB5F87576703AA3594B688F5001053D34F17FAE60486EA07E6CBAE2C6358DA6 AA1E68A556A1E2B1B2DAEC2302FE04241CA53BAB74E4EF219ABB868FD624B519C70EAB34 B5A953F17AEB07E867B4317B48B2DAC162B6A9EBFFF4910FFD8A96BDF6E501030928E380 A6277590835C01A704FAF9C32907990804D0A1F70529C09742422B48586C8762D5E8871A F91527187537526FA52601116969BCF7C4FF8A22446A184E9CAC17AF709489FA39D372A6 6C3D580B183D1AFBD6A21736DE9A09F2968AE69FB587F4FBF7BF281DA926F6F55DB0430B B45CFEBC493195A1B98F68A514C64483E30F22A7DAD69FA38ABC4B51110560DF23517214 081F999A3F1D415D8993C940BC40C481F77402B51E7573801DBE672A8739BE239923B996 23B97992EE35B62734095822B8331F69EEF8BD26FE6A6FCC0F6524CE9BEEFBF40D70DCAC 49BCA97837DD526C105AE9624303C120407740601B1808D28F311B42B2EC20E1FDABFF13 2DC42A1EA01827AC85F44F4E24C9B72BC9EC17361053BFEEA913CA872A24FCAD6415C77E 59FBC9182B6E931C0580BAFE050432866D75828FBDC44889A794C63F0855E75CB056F36A A4F5F72D64E5AC055EAC800972934F2534FBB67469E7E41FB8F5819D03ACCCDEE81EF213 0E1A4FD88BC7074BFD5D83FEEC51C9D1AFA13EDAC699B3DE2595C88525891F2179D8A0A3 650CC93EC86F1B79D135BCDF82E797480322E4115A5DF19F16DF7C2557D750347CBFF239 979DBF0DD515FA7B9A12F57670103E579FE7E7A9E0608CA20D0CB3FD1862E99248035DF7 008C5972B216D066B473085B42AE54AE3C4651E4961F412E7702535F351F4273A97414A5 3FF91785AA3A90119E4B93B8BA0375207191A2EAF3600CBD3A2ECE12D8EAF640295AFFD8 83A7779F6DDF812467E38DB5E6B5F1C1DF8B4A0B95BF02E5C5F896936CB4408BF19CB9F5 58541953A868C07F1FEA9A3EE0CE28BA312C12336E4B1161A934DB4035DF951B428B0320 5FCAF9201D34DCBA174888CA3EF9D8E708B7CCE5CC95ABA181B7D251BFD9D6B3D7358EDE A8A32B7F85C3F2FAA6D2C8D08751CC807E719311621F76D554B7238E9BBE15F19A7102A3 0F343CC0110F464BBE35CD3920EC3A3EAE89EEF21717ED7015359D47FD7BFD16CE001058 0B6DCB1BBAC9FCB2EE435D6AF4284B0CFB140CFC4B7BAD83E8A5EDF7C27C3001225D1030 0F48379F84B62D77D289B6F2CBAB0CB27B5B9F840EE86072FEE3A858A62753BB5550BE8B A63CAA5AB5E3756451A79F6A65D6CAB3DB0FC739345392377CCA2661A58AF73837441681 567C6E81C0C8944033A4F36D599CA915EFE4D03D95C245298D10FA0A5BC9E9569D84E13E 9653D44C827182AB29339203E578FB73FD1F1354142BF3D553A6720EA72318EE76E226D2 AC788224721DD4522A247C18ECE489334991DCAE23D459656224ACD39B04DF5ED6A19375 DA2C2113CB7B8696EB78522BAA320D94A6C04E9CCE17D07C833B6760173F99151D27C561 61DFAF6BD81FC42872E3DC8BEF1472CD53E32271A997CEA4A057D8CB8DAE15FA7AB150C0 D92A1A65CA400C436CA993854B8C18D78F1B593139F5F227ABB34E1590A37886467BB263 14C735651C3245FBB4F620A013D98499BDCF3BFDD6F1923DD9701F295E50E4C3C74DCE02 571B4F4CB40C06B325AE0D51CF1D9BA0892ED1DE29419E3B8D6BA907B54A96BB67C1EE59 31E85906AD2C09A9A964401769446BBE07199EC8EA8E3947B5EC31AC7537F93C9CA4FCAD 771A110F2D3AC7CB6DBFBBC2855F2F360D8EBB53045AAB46D65D206F03E0F4C453FA6169 1DD1171543A53B89A2353511525EA85A4A825F3BB6BBD2889CFB8696E89902EB0DDB58A2 279D214EDD2E20E0DC1F06A02B09AE75B20DCD226D353ED6541007905383551B46C2802F EEB4AB6DA75C2ABB220E8168268AA384B3D4F8D9CA591B6BADBC27E4CED9B4324B2C4C19 80ED6D6F7792FFEA1BF7D9F4D5CF6E52120BBAD41C87C749C042EE247978B45A1B30DA2B C2785D51B7E02482A095B8D8A3D2132F9C80ABA4508931AF7A99A07C0286144C4F666802 A68D63210AD70C872F74D40F72547ABA3F4779DB29A4C86633E273B3DE4B5F52759E171F C67D16C74D105780E2B85DAA2D13807660CAB1830AEB605CA7577743D01AB9D001A65C75 95F576940C1D3E48C8F5FF569E6B17954E98284DAA7C062347F0C043D9B71AE0FE0554F1 D2C8DDA86EE58CDB0D63C974812D902CA525FA81B3332E4A87A5261D6B3FF4FE11F44A1D 73804F9DEF69D93F195C05C8C16781252FB8DDE0C59687454BA4D7A3CF762DB5AD308A64 6978CB14A6A8DC6570806D7016E3B7FC0FF01ADC1D983B8A720AA7882DC49442A7D94A6E 8F01E5DC1201D9D0747A7DE1500D7BAD256BB6992F5B5E1BEC1D88BA81C11F80F994653B 36586D1EA5B5F805B16438070875630DB4B42B0CD171B152FB6BA57E9A755F80F91AF208 2832357ED13E723AEC166195D6D88DDDE42571059A5B8667D28F3CEEBF24002360F226B2 9C6103C47D98A6A330FDB99A0326B702EEC1D3B8A118F98DDD07ADAF1B24470C8C465217 172119E78D37FA0E679D3F4EB4BD103D821FD839127AF7A26042853B99C89049A7268D82 DF8079A1D47144010BC562504310AEA3E2FE85D91CE43275B50FDA31256265A4C318E075 2C7CC99FA1618BC3979A58399060CBD9C4C8C7D5455A63BBC4963336C5BC72ECB5245CB9 FEB9D399E925F9C67EC1FFAF1B28A1071A58CAA3AF9ADAD934F4D1459FCCFB856644B2E6 FA6FFE63D48676EEBFCFDC2CCD9EC64B71A30342D364A165AD365F82C9971C565291E1A4 FB4A40806D264B5A3EA0EDD1DDD6972D5EE5A27D633D546EBD8D3B184D7740E519857AEA F8E2108FA525B504780CA54567B09C188D5D960C2CB3AD7FF016955229DDD88BEAC3BB94 C955A5A27029E2E76FDFCCFA2538DB7FDF8995A4A785630B22EB30AB37722535C95A432D 04B82EB054DD30227EEE30D77607A4C2BBFCB2F653CA8895DBEF75AEB36BC7A48DAAF131 193DC36826ACB8F8F33048F223D6BB88DC9FF78BF729C07E70117D205D39EC03A0C89BDD 926E7CC6664ED8355F2EC41D9B3CA8B4B58A201BBE9535A5620FB6C100D97161F308B01F 5E9E22428400DC8F41D6CB367BA6E8CD890D0672E8506B4C6CB352AE06BAA26700E74856 7FCBE12864C32480CA3A1CED87517146FEC7578E3DC027CF2A59A5A09A3CB76657362158 5A1BD78D218EAC0B318D8C96F2594734AAFABDBB4C2B6927AD5299698366B1BAF03BCAB1 E9BC91A11A33A1352BD8F7170AE64A116675C3ABB5840114D8E1208D851BA251C88A7764 A90E769FA91AB807AC6777F777030BA02DED02C2C391B69282AAC1BD8B99F7F9BC778E98 B2DAA85A3EF8E9DBDDB7887890B0B2310285DE0EDDB6B4628550AD5C2FCA48FEC21F1BDB 3C6384784EB6557DF3DBF585103EF3B0276C48154823C79224218011DAF0763BAB3A9CE8 C412D7676245E96BDD47F2E79E126FFD8AD75139B3B37FB13DDEE30FFAE28F7327B859F3 14E4514546B87FA7FD4FD545872FB0AE4F8AEAC3B882A23DAE3D98098BA60847B013CAC5 6577FFE3D8A1FAE941DEDCCDC7101E7DFB0B17F0E11100A2947B73FD8A22341639966D6F DAEFF59CF0508E01920C167369109507A6E7ECD9CCFC30F7AA87BA0C1C82BD959FF8C43F 234EC01C7E2B3AAF12F543FCF5C2A2077DF5E0E9E3A976F107BC8E8856427511FD5EA85A BE944C72CBBB3DBF4C9870F2EF2FB3398449AED9E345A43E8A6B0A99EDAF4118C89A3612 CA99B59D4BBF25800E147BCC6CC51D1B3239DBC3A15CE68ECE1F2CDD6D8732238A922C04 AB8859F9255477B00DB497320B8017AC48BE9C10D2452A82BDCE5C37953D644D50761302 FD40AF015C8FF79C82015EBD62EDEAF0C0AC637F54F436ACD2D0876390EF02E29A4E3B3F 59C7B3E1EDB64B75F0DAF5B401015114F226BC68E31187214A69EAE0261DD7DD59B033D9 311A2F01E44FC47F13927C1C9921A5881F2172CAAC71B0FE038C1B6CE87B04EFA42DD4D3 65F6249C359F8071BADA34F2BD0A2A2C7B6B8AFA6A1F765AF2A9E77942190D1929EFC2E5 509B9066CFB90D5D2A4732088CFFCB20A56A3218B020F491688AFC95CF8240EE7B7C38AA 13CF17FDA80F40DBFD5F92D1185968B43A26D0E38D0C9F91E7226E5BDE34F083FA117E2A EF3CA2FE14C63CF404CF833DFBC09E27D96F5A6C16FBDA79DCF00652DC6AB73C4F6548F2 16C8B245B15D9B5B29746E53FAA0D95E4C0357A3BE36A6CD993AECB9A42828E934A36388 FB546D8C9D3531EC7B729D44D8AB61975BC7135E5ED59FEE11F12CF5C9C59160DE698385 778A751CC279F807DD68BD5CF994340A16FF47147F029468C24E6E7AB08C2C69E9A5C5B9 8C62FF6197C8455BBDB7BE9D069BADCCBE86FEB495B52BF65CF17C4B1157210C98948036 55444C22444519D8A72A2899C20138698BD646E94748B62C3CCEB35C56837BEF1BDE5B39 AF2E40A4D73DD747F1429CB4A953F949B97D56DE8601E7F299C218FA0D367559A750802F 64DA3BC53F83A733B1379AA57CDB1D657C2EE623A9696CFB580CB63902F87B4786A55EA6 2BDA6CF94FA9CA44F388138020463F5BEEA1E273BD5BED2E9B08B60558D6A2901929C23D 2E6A61351A5CFA65DF52819D002CF21CE650520436C9681C60D81582D5568A6A0536E236 26A13B4CD55903D130BFD7EFF26E806768C8EEA16359FD842898B8DC539E3170D4FCF3B8 72621BD4C65DFD9F7EDDC0B17BB478990673970D4D4A07C7170698D784360F7A6A53768E D9B41AB73360FE08C21855615214C91BAEF2F6A5AB71CA45E4B52326EBFB99A0CD401A7E 2944424878194E14C2BF7D183EA1B4C0BF9A3B2157EDD6143E9E9B30891F1185C3E2942B EC87C1EDE03B77FE7CE0D145C0D918D13EB28EE264DC78409D7FADFB03718C6DF7D50A71 EB216B5735A990274C349119C8739E5505F23C7025A79F4A22FFCC532981D27A70B94A48 CDEEDE1590A2A0FBE661ED24CEEEC4DFFADA11F6514A8D7C026D2D685B07F9DFAD07147F C7EBD82D9A52AAB50D1B52945ADD441A5F3A6C809127457895402C1AA796582950808F4A 21BE6BD2FE25CB9576AE1640ECDE763FFCFFFDD8096C9AD89B8B2390A2275F224F2FFFEF 148E4E1F29DB6BEAE998065B0306535D588F901C3904FF47D1428DDF213BB0D9D558006B B5F032CEC1BDF4F8997B304CE400EDB24EE46C97DA278E03B768C2A23C88878B9A79DA41 68175815CD1336A71D57C6E07CC7B8596425C9F8214F0BC2D99400B9FD644C1F8CF0AD3B 795B074D9D9CF25C18D3847873744228A6AB058D5D213587F16740AB978CE10EC3274FB3 DD411E0392432D67C9945091AA3D90F95C3AF2B808FFA37B6C6359EA023D1ACB7A007F4D 5AAD3D9EE2467F5FD642FF3AAB11451EDE32138525FD48DAC480E29A16561A7FAF95759D F83FC7504396991BA3CE2072851D7B962FA387A40F62DA05B81B39CFA6123F5B2CF261B4 C7A84DAF87238729FF71D6F3DCED7CC97CB9C373D6B150C035853167C49368F16E447A18 0F7F9D4CC3978E3E6B5F3B4CC7FA3078883D4C8BAC0A94E9B69B7CCB94E6D5898EC61A06 E5A960058E6A1696C0BE287F24869414CA8D16E761C120FF5116A19EBD39109B0E251664 DB0A5722B4366151759BDBA4A74204893F585A940EB1BCC870873F6F4E08BC88A239F23F FC51016CF6F8CA8830346363BBA0E1FF376EB66174CF31ED9AE04219301EBF61A1BB5E55 A89EEC27A12666287AE6AEA4D45A3706FDED0A70326CB050B6D25FC56216F932C1294E54 88E3C331627D85B34875E7B51E4E7AF724CDBABB1F14EB6F23088595F2BF26D88C04D4F2 4B94D94DD47761AA0A9BF649B06F7A2D56D30FC432FB49B570A53280A341BAB378037DEF 7FDC3B284C83F7CEE6800CBA2E20844A4DF8F2F5400167D136F810A7A739195896E470F9 5875E669A770691C885365FBBAD1BD8461B005DBDD60891F12D8D4C8D51C8605B3CFED8C EFF997868478A6A9D642789127727FA231B4BADFF182AB67B8D19402633BCD4913957BE8 8F95E11EFB60934E8F26BD79622385F5D1CC5F7F492BD69C8C4BE47D76EE6466880A1885 F63C3F4C893032D90FA8CCAEF615340A8424B4B1752C9009DD1EE6E0A10A0BE83DCF2CF1 E746AC5A62FB5809310D5F64A267028A7EF02493B6DF22012D036A19B4AE3A9ED9A5F9C1 6EA82AFC6DF1DDD7E243B4464FDC28B63DF4CAB59A58949558B1C1B4DD96800A69D14E7F 9DA1E1FB6DDEF437C2D31493631E79A41AEF27721579C7B40AC30421726959CA6CFC3F65 5B309D67F0D50DBD33DE84CCB5EEFDC4923A4200341A8B5F9541428A9B6B94CB973BE6A2 F39DF0CC141B9CAC1D0F25FD087A176D68BF69C6D2BA5084B586B289B00346DADBB42774 251ABF854004F12EE97092CBEC6BECA5B74F21DB1BB72C9BBD9C0E11CDB4F64F347FCBEE AE58924610D8A5ECC6EEACAAD54B36117A2EA580B9D6FB9635EF4ECC1649D1AC8634CD74 0D01BA7F6F2379AB2BE4425C02198E8E75FB46CC405F706C2E2CEE54582CC08A239A6DF9 BBD208AD5AB256C5CA2230DDBBAB210FABE5D4582B22F0E66ADF21F4F755D8E16EB071A1 3EB431CB00EBA9EE617E43AC2E0DF733151A82D3000DE349C9B9E44227CF001D50E6C62D A792040A868EB92A635208145CF8C25F51B698BC3460273AE679D251A43D5D1ED8D5D759 6743700F9B67ADF9E103EE9C2D1727808433DA9D16ABDAE228FB35FADED5D54816E066A1 8EC29EF2242125D1687D60655B3EBBD8E6227D0CAEC0E0BDB7845914D063890125E568E3 8B14160794781E8EB631115576CF5A7E9639B02A28CF363720067EB527988EA1D2DDA4DB CD35790CD4F91A253D0A9814143492857A320088FB02B28ADE5CCB4BD7878682E2895B07 7029BEA07B654A13EAC49FC3E9BE70BFEB73418204F9164A26E47632CB0FB20C643A3245 4777AE40288C6942D4C0C88FAB77120BC73DEA4EF0AC703DFBBE9FE79796671938382F22 8A9C5B45C48FA131C17BE362EBDEE57378738DBC29297A9B69A7854A6D702524A76573BF F76434BE57EA370D43CCED36DD0223939D362102547E2B7896BEADA8F0B3243979B3B4B3 4F43500473F7C712B5E3B25BBBCEDDD40797649305E5E7AF2B767CB21C93195FA3B2BFC1 A5891A91CA879BDD643A4A3B384C7A55718BD872E01674336419D2B1EFCBD888FE8FE9EA 3F07C87A87BEF21E66F8B26D25841401C499B31DF68FF0491E660E40C79E5EC2312BBF1E 364F6177BDA9DA10DCB347E40C8F423B12700C4C47DA4B09A27CB14310C7EE8DBFA567DB 0BA6DF2499B5ECE65519504C42B6813E0B906ED94861EFEBD5281DC0531513893F7EBF2B 9F43022A81ACE291CA736570C6E099A8CCB59D8E7568AA5D18FBBA8986905D35E9B52D59 1E36EC95612B25F371F2743890AA44974F54814A4BDCC23F5DC100B5584B09A746938953 B5D519A50D3F1FCE6040918E3CA5E3DDCF5506055FF493A8AD4F8A081BC3524D88336AF1 80888D96699045EE95F984547B4D9844C9B596CDFBAC8ADB0194B7141DAA0385470F2AD9 F542FD1369E418C5B380CE40E2461D3B68E091021E21DDC50D96C5578D73B9E84227EA05 8231936F4264834C133C58D71D347100684A1F3F5A5B461D669B92BD7A00745C98906EB3 15ACF12D2E94B597940D85CA5B69506661133A6B11BC940ADB550FD9B3FC14499677212F B6166E695839DCEA3F1442E2C9E32E28EFAD1678796946725A1C0C62A1EC5972933A8FA0 D37AD1D8EFDCA892F53962F57906EDF22B55AAAA17562F2F876C0B5C85197FCD583E2A87 6C28672FB7ACCB063154A1FFC37A33B104AA37C7417F46EE3D4B59BB4E4DDD58A2EFD829 71275C35081723630CA67016C8BEB30A7441E0BC9A4973888F0A377D7A3ADDE25981BBB8 036AA2D9B15B71D54A7BC6C8DF79E7D2D50E97F1DB6E796655F47B5E988653996F1D3885 60BB63A3C364B5AD590A5DB33524282B3C6A7C228EFBFC222FA475FFF99E83EECDCC09C5 406985D9B3C00199EE2A620A7F820D1DC40353E0A76B46DA672AE1CFE632FA3523C8B32E 2C0D7344DE9DEB24C7E311E981B216361C401B2C7E135028BA08D3B91D39099DEB9DBB2A 4050AD37B9B823815BC6AA107A3C7B935BF259D9FECE88232061E4796B425B5BAF4C5E8C 4E9190E159743D7F3E4AB2191B8EE8877D8936E5D324FB57E6936F8267C015CE6D04291B 200E1C964660503C96C4A4B782D09F4D3BA952B7EC7AD5B568D27E3A07B26486BC45F394 128A011F68B0434829C59772C66A001A50FE3C5F2C4683BD81AD8C4B7F7A25127CDE5E2D EC216243C2398A1551F8C1E37939FF94CEC8A9C1CBAC52BF6371DE25BE148EB39FCD9552 3065F034E4F96B1C5D61120DC87D04E7DED973471C0A3FA1E1E6BE6E2F01DC0199399B87 5EB88A3E4AA85EFC9D9F28B3DC52319D374AA64118E1383A8A577538C29859090DB65026 4A866725524BEB3FBBBEF6AB74FE8F786D1FA8AD94BE90794AC7E72DB71DF74F577F169D F3B310C2D69D729A2DD755AECBC0E463716BA5DCD4680D4D4F4164420F2B46DBCC60BE6D A68DA2B2AF32608266241BDA6CF36E132D83D16092DFF4D138BED509909E250DFD9FAE30 53BE12A825D3A91E404449013E219BC67A2B18E40D497125A2F39BD16824CA7D2A2E5173 89D69D5D838BA27ABDA5012B426E58456B2399ECB1B4009CFDD6307F6D104647AAD6D083 A562E7282007B3B2A0B6FB23F2EEBD0E7F643A9BC7075D893335DB246CCBD8A37DC6F1B9 649AF15271717A769484B5531A1A7D99A43E90490F86C170193442D01EBF02842D349B7A 580D601534F1EA401D27D98455EC4A5800F4BF5893EE080441F6CD28226E4F6AEDDDB7EE 7CE77F2BB54FF006967504CCF02F4875EBA2448C00FF58DA77B50A4F4A007663B5B64B18 702C96AA0E6F85410580F931BBF249E91AF47477EA284CD42572FEA81C462D7E0CB5F81D EBB94225776D69B02F04D76B51BAF103B265139F85EBA00F47BACB0A1FAB9D39B648B5CF 06E58CF1CC43A431315953006CED0FF5701401B01CE4F335015EB6E41DE8D14F1B5C5757 1371E7875B17C44B374184836C07D47F4FA44F8E49959BA63A4647F757B3837BD334D2A0 423E620AC5E1C5B18C3A400A8CCB7119C3331812AD8863FC3A97B470293F83CFC37E8BDD D2EEE4C5F88423740C93563603FCEC652CD447869112070497A5141CD7DC66F62EB445F2 DAFE1378B286E730801959EC5FCED464E1BDB06D725970C08CA0ABB730C12C720E219519 FEF20F96A1B0FA671565B45FCF41A40D5AFBAA092A09F72ED35FE94A98DCF5649F6AA3EB FEE7ADE1E19B4429C4E1E76880C398246201CB067D8A734B23BD3118A8F5F7516E5B1452 72CB0AD9F41ECD8FA61ED0CA87385B2B45B1BBA6CDBD7B9C9890F727BBAF5EA03273E387 FBFE8D0143D1B215003C9EECFFC9970AD21B0A7E90F56E53B3409E102F89D95B3EC58DF1 B1C8D48CCF22BEE22EDEDF25CA18A0461D2C582220ED664F198B93B388FD8CA9CAA6D8AC 95F10E458BE5480C767D6606675208E4C823FAD4A3B8E77915BD881C345B0A8C34F01B75 2566AE58CF3BC97B215EAAA7189AD6BCE0A524C0998235A61713C538CBE9769E2350F670 4BA790CF77CE5BABE376D5C2B2F9EB8D90B762BC59D9DEA5234ED14A949B002258212E36 D5A22B4D847EA8C4171D74B78A5E225E3D956FE7F8B95FA133C50F864725C1B8F11C2D1B 3AA7D08C0745209E00B98BBE59E463D60C79122469F9ABB8A7CF777BD90999206C83F8CE 8C95C79993C20CA63CF556C821C8DD3D5124D2F293E5506D9CA515E026223D115DB59D8C 883FD825FA3EBB449524F1BE7811BE76856A063BAF9C09A3930417DB889B4DFC1563F688 02F4AE1BA0EFE463FE884CFAFC0FECD0F4396B006B9230D9D3BBE6757318184EE7EB6FE7 00E148C53CF3FB7DC90811F6D5CC8F9FFF975EC7DDA685B76D05C0320E7C3AB3479D00FA 927FB3E9E4363115D05E3D62AC3FD06310DFC6117117AD8BCF44233B05901E32D8A1BE67 CA059C513BA968CA1EFE077CF8D651540EABC16EA1F61AB1D7F74F41EA52E1BAA0A19576 5547168636187DE931C6F97C624391A212859C3A95F42DC367AACF13BBDD503FC1350FC2 FC6259B290A18447FBF37284CE1F00DD81929B13F366C0C4FE86E834DFC7FBF5B4DE4D5A 33D014E3229A7957A112519134F0794825317A8D56EBA39ED15725CD940D974912D4A79D C499D3B2DFD7FD67DC7E79F70A04D5AAF40FFA6A568AA4FE042FC2AE31E83F60671CAF60 B8425E4F3959FADE3947B2DD3438C7B08D71A036B2ED959168D507274BC4C04BC9A9448C 0385531153595DF90BCCA1EDD889B3C9F3CE3FE63FC858AE51CACCA7160C3296038EDA20 38625CE0DD5C236F6F18B3B41FB6D5953F18D5FD4F700A95B08BB10431090C652BFAD23B D4A9211D0CF59E5C2D0AAC5708386D14F02858C820A191239D08E6121A77A83FE89BF056 C42A6A56B55EA35DAD6696F64F3B702C21F4D97D87CB80ADF688E6F1094B00714820BA53 65CD655C9DD5BC030FB2029972D15CA71610085A1A7CA47E290D5554413EB88B70D94881 1BA89738DBC0C16EB47A3CB6190E191E67004BFBAB73A067501BD283CA816CAB52515721 4CF005497DC884ED61CD5F5235EDFC207A0E8BE0696E7F93BC267C1CBD85BF4BFBDB755D BEB88A7D4B978AC52B7D1AB8D828448F848EB6D2F839AE9F4BBF34E1BD5DE77FA93F23A9 D111529C49A295893296D10F51BCF03327CF774BB1AC501BD8BCA58F3E82BEF79C39F434 845435E9DADBEFA2AD5D79D8B0ADED3DAC9C1AD9E6A24B206C9DBBECD552B2E6DF97F864 C8925A37EEF8718CD4D277949D389959D852977FCF96E2C46477CA973846DD65AF478490 028CEF70A4290B22C4DD7514F1DB34820656EAABD1FCDB7A9BEE0C18E577D9F27CC50777 D55B4EEA53E8F681F76D4791300A06C380E57B35FA48314BE3C4A70D1B73E743A2B264F7 3E3C73CB25FD2D33D74064BA8803858C8353C1036E09EE4489433C92F43ACAE005051DF4 A89628CD3B3EB9A569AE2DC5EB290715FB1028B2E32BA7BC4C48AF1FAFD94412BC7A036D A31924EE68FEB3ED8DB8340154D5757AB86B7D5D37464D58A22B54E37FA9891FE1A54C01 D7FA05BCED8CA937BBE67979068B177A777B2B315E6B1F77AB6930DE1372A95A0A1A01FE C9405011F1F3AA2252EBA22A54C779661AFFD26FDFB10044D8B68277234762FA2ADF8EB6 B53B75E663976FFBF7D43502184FA7CF047A8CDC2CF0220E542ED63EE9588C41E35496AC 39715683CED932BDAC827F5CCB9BE1D3BDDEE2D2C900AB23E2B54766DA16CC227E58E53F 788F5A8880B5FE8A7355DC73B6B26BF783F02E2CCD5F96794DCECAA0E7A603CAF330FF6B D8D56153CB4272AACA3DCAA5932B7F754D23BE23B2282F6C2C59B2C1EE4410F342160BCA 093ED020E4EDD16C7E6E03FBDB06D510E6680A471E3B4E2C4319FC138B92A8EE4058A0D1 8D7FCC51D9F16E9B74EC75CB482903BFD27C4A17654A6AD85D608558C6A717D47005A8DF B52C28282EEF5B9F7DB1086D19021269438BA974CB8C34A8B85C5542519424FDA394E116 61636091F18BA443113DB75E9FE5C5B8971E8749D15FAB20B90C10D3682102CCC30CFC3B 67DC2D519C96B9F607B6BAA01FBD8B78236BDCD6EC3536D15BB3A069272C646403BC64F6 FD55E28988D01DBEEC75547D4D4A975761E5BDBD5E3D7601065C4F9657D3E492DB6A3558 037943383B261335F01494978F46999DCD5584F7B5DEA427D20F20E29B1D80AEF1E279AB F27AB8410172E203B3945F98FF87A2FEE2B89293BE2F5DBD88A200130143D79A5F8943A3 D0895650BD6CC2FC5D5675B30B12B4E095F2475F7D8788EC9AA952FFC8DACB281EAEF931 34A6F83920FF8E7C58441BE339ACCBBCD4C9BA4C8EB9A5F6A45614F991D9EB0A76B2C869 944CBE0D6C0CA4C8BAD0B897328A4D354C60A31AD9EBC0F97835BF4CB7976BDB95152A1E 919144C60E884BC6E6857496C77C3C7AD9F52C53A9051238011D41F14687E5B3F666CCE4 86D16F3CDFB9AEDE1CCB3452A68F5FD75FB96600750457E3C3FA6579BF938439AFC75386 D1C0A1FE73AD6968DE195544F85CFC697793F1F66DE6CBD8137A918B2C24A99724C978F7 46BF6AECA401F5D298CD1081970FA904F2E2CBB2D749526C2E14A43970B2B2CD28EE9178 A58F60F7BE3F87967B4C1BEA2ED73DF6692862CE919E3B406480A69CAB794692D0FD1C6A 65FB1065BCB5AB47306164C0241A6177D8AD8E629C77F84A1AB5CA62B493C5C016AEA0C1 E45AE05B54646CA6E134B776D09A11FE04953679CFF2777B01370F482CA655CBA8D1F91E 07D0106FE37E83267B5432ABB51D56C88EDC58A11D8D90FB5E82BC023C4521A6649B9388 5BA6C0D139C3BDB8B0325CBC27AC4E8F673E53D84476E1632DD4A09E94D375B65B0FA682 18609F5996F543A985FB6CA55D302D63F86F234F94C9A5A15B0333F722702682424DA956 1E6614FFBF8A9293F5750E06BDBB05D3BF6F56865577FCC010643699D0AAD5633BE88939 AE6324C36A7A5FD5F148162952C357C4FA5E8DCBAEEDD28D71A809ADFD563AB3C4CB790D 8FC41B81784B3E9C672A2F6A2230E90882EA374A579ED2BF72795E84B089635FC4F2B48C D51C418BF26AA4939CFF22A0B37182836E70AC08C971EDFB46A31BA11480BB855D53A01F 5A0688B2CDB04B9C2CF22A63ABCDC965993AEE1DBE2BE79DA4D1BB595E24E87267FF1648 D7F8E531B275C5499FD4202A948E2DD9FBC7CEF688566DBC53B886A2F9843F94CDECFC63 78E6937D4CB278E11EE9E2957D8BA31145058010C98A752CF568AAD0FF5C4C67988868ED 19762F2F54D6D58A3747A6C5A052543ADAF50DE5AEC5DBFE6A2F78F08A50E5F65C328290 B383524AD0A1A477A9815C8378DDC0CD7E8CDAF6F097E5DD40900B0DD7A7354A37B9D90E 7C4FFEBFD1DBFBE33B5EBCA7607243A53EA746FFB8CA2D88E73D2696281CB210E6D5A0D8 46F669F24E3448DAF1DE413B6248564E718D903654ACEBCE09A7CA994306D924535F5792 21C39D8E386B1573B9B7C26256419D8B52F4980018DCC0001DC87F590C378EC0DCBAB4B1 8F362A7F64BD16DE2E647A4B0573D92F1300D5D8423A1FC658E708457646CA9585071B72 E66A2D919AE292B460E816FDC8CCAD369EB90FBAF5BAC731FDE38CE2E45B755934264D8E 4EABBA7D6C0C91B4444BEC23D8FE44230223BD612D845BF57659A9594168655749D147AD CD4182BA77EC41BA34595990446E1D093CA7264512C12DB9EDCC3A2E97B478DA4A2E7A81 3CCE2592BB816CCED1196A40E76E4B0BD2EEEA1EA7BF331D497548FEE91A56C7C057C3CA E25412546FAA9C1B8382F5F01004E506A0DF3BE419B38AA7196EFB6C9B469E49DD63572A 60FC9A5483CFB723FA04BAE4AD526E8C3B14E252750A79C13D07CC1A1A424B33586F7072 F28D5C61DBE7F0EB9BF47110B4CB018190CF5BD564CE48B9775FEA3DC1FBB03206573E02 C60969330F0DAC03A4EEF803D7F860C14C50D809EA5D5FB13001048D2CEC6B56C2423CAA EA0FBBC4FDF550F0EA3D921F522A65CCB0E1F590106F163DE12D1410F35D72E7C6168D64 829F8144C5B7CC9F902081954923AD742954477ADFDD4D321A593A41806C002B02D9DE03 38DE6B6401408FB03D282489D23B6CD09A77EC31A7EBE000D54150B03A8610D0DB8BBF8B 9C7E94419C0E522521585F2B7C657CABEEEBA79F2C8FE57C86F593F805945E7DA313B826 2DC421EFEBA8237EFCF9B054D12CBCD0A3BB32C4A5BAC3E8C105C32860E80FD83F095A20 AA4497CB6F4A879E5F7AD6C2A8272E937A61BB95402F130A37261569D47A88D4ADB80A1B 1EE5FF03D8890B212E3508C408EF145C570FE2656ECAB9EF52657A04456B580344FD4F87 2B5D5308DB567B1E957073892D8F83A2C8F93CCFC11D3965EA0B985B5521C997786CE86A 3D9E0A3407EC73E51BCBE2B53D11DD304F0B7469E34A5F6904F5B3807A62534D742DBD4D 3EED49B28F68BBAF5DB1E261ABD0C7739CC09A4779D5D2AB15ED9762FC6E72F78B71DFA3 23C29D48F47E44A38D87168413E3F589B9470C79EF8A4EB6216F1F0F74FE2853E7EFF2EC 902018A4F6FAF4CFA75B646447DA90B8DD612A65ECD9504C751D331B3762DD369EB0D179 CBB70EDADDF73E58919C65DE73497A87B4ACF06360FEE10E7593507C6663B0FD0308C95B F21B9ADE7966A23FA4CD0648051F2CC20ADC25C8F983EC2DC97E2160BCC62CE3051273F6 3D65913AFAC94E548B6BE0BECE2B704778A24C4348F128A4EF617A7F43AA327193B5BE44 C2045CB1840DF5FB6CDCBE455EECA489E22F0FF715F4FD6D14A874031C58A8446730D0AE D36887A4B33DC943FB6A9469AA781FB0E994AAE327A86408D63885662065330B6AC00AEA FADA28C53CB4255EA1858ECD3869BD7A27EB5C9949530081E5E103DB50CB34534A4C63BB 78E91AC992D1D58F2D08E7706D25CE375CD041F049F762B4B20FA9052DB766881540D4FF 1BD7A4FB927F0A3ECD257938BE91A220D9FA4E00201CC64A1E9816E9D71E95931A5D018F 0AF2877F2737A7749BDF3C90A1694FB81EA9C970629EDEDB5EBF19A60EDA5D7419F3EC1C A51FF1544B23800B0DDE96AD4E5E660AB20AA419182AC33ECE2A48675FB2D74770AAFDBD 6C300C6360B9B5FF14B7022BE140C05133BD0D848A605491C156D08EA88FD0C4D2334200 B8437E6088DB32493099469000426A3CDCC627757C9DF0BFA4E9E0CD5D0C8F3E921B1E41 48CB6D876F445CA4CB9FD7E7FFD4032B2A97EFB025B182A88CA72212186417A5C373B5A4 3357E58EEAB3FD609C5DFDE96D4BA104C74D69AC17E20058D0B4E875A53F547DEACEBE20 CF74242301FA39FA6FE6B0C22C5FBEF3DAE3B2727949C20CB8A1CA7A70C7A09E0BF76794 BD67F51F3D3A1C2005E4DAA6CA87768747DB8A7ED1334F03D3C3EEBD796AF804DB774DBB 403B4B0F6820033CBC99BDDDBCCBBAF0FE7C56959608DA53BF83A56606CD524D3A80D591 AEEA4658F0E252308551371D192F88F5D8D58D2B898C494FB23463837B8249B5EA5B1DA3 12A1CCFDF4234C772102A6F0405227A48F6B216BEE7520409C77C77B8F962977F9DEC1FE 098EBC19A77E3B155DF2514D4E8087E0CE8D53B272735F463871AB02BEA13B9E402C2239 73D2B968E55031BF9A929B6468599889CFC84ACC422439464277D86FC347D3681EF42838 08CE24709A9A3ADF4621805A61E3AE1252051A00A8DE2ECE5DB8D6D415F2648E7FDF4219 4F8A063187F64980D3216EA297178A6F87395F40DDF9DEC4D649D74736AEAFBA82E7D0C9 05D44A8E2F02D356741C23DC37F482F54CE53DE8800BDDBCD170B8F089339C7CAFF13A4E 2D4C4EE33BAF718DAF51BDDA347FD8760F3297CC169112DFAFC9871CE42FF8C29D7A2168 0C6E23A2FD776240694B44696F69D11454646066BD4B6ED7BF4CF3550BF0F32FCD0ED0BC CE20286B8CB1645C308B74D0EF5CFF8927E1F2FAB0366BE55CD069AA7676E4592FD42342 617A186D3C144D173DDF6E01F5E5E5A67A9648144BBD646BD3D76BE1AF70EEFBEF0361A0 4BEFEB59E94AA5CE2400907C9FADCFC3633ABB62F24B0980093FEB72977CC3E44AEA7007 B4721D8B35BA81A01C600FDFC070A29337FDD56DCBA7EF9DF7364E0230500F9B8A075625 7B12FAA98EF15E011D6A6D02C84655D15AE62181FA4D0CE38A6FD6B2DE4F57B0B963095C 95536BD7A53D0FB7C1167F251A9C43DE263D68FAD27C6C10ADFB6D02BD1339CEE7DD6EC2 FAA687A55AC07E279CCDD84F46A6DEEBBB380B1DE2897DC279C784A9E352683352B059B6 15990972B53695F73097EE77081F23E15DA3B489A9B088C2D7C76B89948F31D68C3F3FC5 0243D545C56B62CFBF55E1102D9C761E8A7B0F9A547F9B0935CD78E32AFCE9A451C2F455 DF2DF4117955D9C9B30619FD8A9EF23827E70FF05B55511185288C06668B65BF67CD8C77 CE1363B83499E455CDF30270842A22F23D101F7CE773BD709D2E9172B169E25C2AF2B64F 93DABC5C18CF61B30DE7ACF3B7D746EC1B725B90B767D24DB244DC37A42861250A52A287 F2B7062AC268559A2C231F3A93E510527BDBC3DFC742B457D774C6FC8B023C02E783F2CB C50C4D37DD81433BAE0A8A9CFA280E7008C47CD75E1A77242B5C1ADCAF70E3C0F870C126 197091879369A7B31FEB8086E1733E377DF5AD77358D296D3C1CB2EB54B7DB9C8E5AB4E1 005A775EFA44328FD755D84A064876CAA2E1016DA7DCC961F2101A8FCB699B73A23CB866 51E728C07CB9EFF654EC83A5DAF21DCF2F777535680C32E4A88AA2D7D65F166B430CFE51 9F252F51640D7443D75CCD2F5E8494D1210B3F5BEC029002C754BF6B506B5715601F5134 B6D95060BAC8F6CFA2249FE4B5DA5B098873CCD2C5A6E983F6C62C3C0A9274899858AE7B 5364B4434187B91EFB705FAB6372E3A003D5361138EA6AC70C048E7E05E2F319AA81DE1A 8D1836CD2B049800B991CFEADF399960C02EAFA33CA1D987B161234EF3A67DC53B6FE467 857D5897446EC2D4C5FE183320F28B74EF3900815A540EB68C325F038A564A23AE235D12 A475030624FBEAB5A8A536D0011C89AD8557AA5307A5DD4E46AD91FA15B8D6A297DE7717 0BC90F8C526B6B9496F1D4C83491DD2FDE4CCE06420D943C5104B0C56DC184D8293D9305 9AD7C5F6251F7AE7C19BD13AC98FCCF587FA9A223082B43F04267535CBAF822F0DF7A642 7370794C4CE3723238828BC3459A01D8B363A6B9342CB523A13CE1139525AF0C372F8AA9 98A3E2962BF6728F815D33AA537B8E27ED9174ED4422ECA87BD9E0EFA86566C4314BCFCC 324D5FB4105E9A965CD258FB0A2B970FE0A21F951F3C86EDC5543B067E2CE337CDC04E30 EE665A3725A4110E845D9025978D445DE6284A55197735A5C018D99CAAFE6597F3D58D37 68EEAE6F5428AB3B23B5F2F9E8EFF5D6DDF1B4BEDC6D245E63F2E5DC0911E8CA2A9DB100 CCC4EB9C54BEB0EEBB2E1027BFBD041DD39B27C151EA50EFCDA46F4273F74C85AA88B1A6 7BA9A98C7C6D7C406D8B3F7892565B8856C77668B86A0BA9BF743C5884FB94CB729403E9 28EA9C8ADB060911FC0E3DCB9B828FDC489FBC1F15FC2D75807EE98AFF5D841D88303A7E 4CB6DAEC1872D384214EC0E3039478DF79CBB7C12202F9F56F3206FE61B04AECBE1D7757 0CB8A43D3E145B0ADA7CE219CBC99952BF54D734673632B68AEE6CDA8BA19BF7937100A5 FA294B86F7439FB59E367CEED44FEA1F4CC2FBA570AC2C32FA6D9F67474BCA9318A84A31 107CA7AE187454434340DB2F3A0B2B41E552EE49E828C20266B88BD04DBE61AC6FF59A8A D065A704C18C315CE79A72B061A94558964300564DE5B41B0BA3A0493851A355ACB34BCE 7FA00DCDF05F3BB733C9C79BE3F83D6103171A648F81BB138B4996B606A7A8A997761548 08F89BCC7C81BB14F916F8AECD873406778E51BB93E56C25DFEC6C3778AAD6B537E6F488 D29898E17B5D38BE14ED70D79A62B9282DDF229114C0BF9830F2E18A4717C45BF1B29A76 31B60D13A283C7F92EC4EA3D98D2331270030A14BF9A8E07D87E66BC034F830DEFFBB5D9 9E95293C70571BBC4B65E1AA13DDC945815FA79746024F5751F8FFE718D97B8AF465BA54 598EAD21B323C3CE47AF7BCBA58BCCCFFFA0FD2B463C85DE8D02378C86BA7D3F44C54165 E00E64FDF7228570A6F94C2A1F8CC5D947A470552302D6B3850EF092D6923FFD39E01F7A B0ACC7B6467877CC301A03136B93A57AC0949D62D3F3E63DFBAF695767877516DFA1CBAC F68BED7E2AC83C1612F234CB12A368CEE9657C6519908C7B046494842013EF81A4986D38 58EAAC69D84FF32CC5CCAE2E438DE88A426365EEE0FE9745DB5B7D494C3ADEE8C6C31EAC CAEEFC174DE952E2D668BD28D621DF9C81BA0355E943BA3ADFF04721B586C659494D5A36 985AF4AA408939371F448293A0C04CBE72C558E4DE12B36F823445A2267806836D265BC0 8B279386DF1579512252A9CC6F69D83959FD3F1FC6057DBF5F28C644AD4862ADBF133C2D 5779D96F1EB234FE09E0FFC62EDE6D295F19F52A9A6124197CC250EBF77DECDD5F8B024A D635E941AC0CB5CA59F6278FE2AE87F7A005A5A9FBDE7609B4DB903112DAB7B612969DF3 F99F3D34D95467DCBA57E6755BC80C4D18EF9F440A2562DDED104A80D075F8D0C308B10C E31B777B438DF32A77433152571170DD44AF096981632062E3F525ECB3697F3EDD316E15 2E502A9B8B351710611DDB75B710D6CA9801ADFB57EEBE007527611D47C181C3BA7BADC3 1210B9FAEF3608350D905791F025960862B0B06B4BFCCE7FD92EDA6D9B2FE67206ED53AD E69BE630442EAB6BD2977E3BBFF487CB15A7127B40BFA161D8BA602AE211C8E3FCE684C0 3E4B7E8148C2F61DD65E1D07355B37E62A6BFC70656B4C32FCDC5926EFE37AED5253F67F DF9A556956D96848B81A6E11D005984DC36E99F1874803398FA37966B1A37B8282BF9093 65A1B89C1E1CC37B02254B75C75D77A39F9D1DBFE7B79F70AD0DD6038D824A7DB8DBBD79 B6A5302D5859D5925B79A210210103791C4212F579EE900CB3FAF002DB06E0ED6D5E74CB 71ED20AD85A257F1244C79A2B6E703DADBFFBFFD414C1EF6C7A7CC4B12F72811C0F0DFEA A4DBCF715812A3E827C06AF347EE1D72F9FBE9BE3D061DB13CE123C71C8341C2F56762A4 FD0C1CCCEF591D01E7608B097621C45DBCFA96348DA2F80839F0EB6026AF7C14E73E8506 FC9C1F68C88CBEE385FC280F18D7817A8606FF3FDD506FABBCC72662B0DF81EE90727ED5 90306DFE6119A9CBC84172C3D434DDE35039F91591837F903585245D0131DADCB710309C 596B7A8CF8839B2C347C2493234386F988A7066BE6B26F9EC504868915D71E1EB5E9AD4C F2C5F71E761B50FCEB823CAD364F3E5F3B1D10BA4916D915ED0040A920C9C9ECF344E685 2B805F4B1FC9062625BA815ABECC0EE80D708D0BD141681233E5A483FB2DE7DF9B13237B 649715BACEAB3F4BF6C6403F8460D190C77E4DAEF62F437361F6B9DA9B4787A68DEC88D4 556111ACAB7C7BB5F2F1933291DF83425C10895A2B47330B661DDFA456F130D91EEE2A4E F9AE28D45DCB80DB7322DD6D7E394D475AEE95D0DAC575AE569BF9D26CBA1CFEC9DF25CA A1A701F60B297064A17CD878E101FD6A6F981905E50CD52A807B466465F0526BD502F249 B8C4408C130D017E6238B5B5BFBFBA518BBF414E11E2D25926362F4EC5E83E6C26B19C04 D68C4D6D891B10773EF156166D9CABB85F08A1C130D9D35351CC9E7E739460EAB51F3F8E A011A2CB3354F759E9EB297219157F02BED05B78BCD8C73E3881C835A7D986A3877815FA 5ADB7713819D931FD05C53FC0C584C45763B6725094485EE3C48E246A1E8968C6DA8979A 2D12CF4A97A8822BA5A066F62333C313694562FBBD8ED26D32E8D09426D0AFE33BFF61CE 23F03ADFE9FFF17EC5063381102289356B1696475310DB04806487792F7EF42CCDB4B8F9 9DE168D16AA56321F29B09EAEDAA9727CDE7DBBEB62F33EC6FF1E9A74696A7F4B15A2684 968D5CF34F65E88601368BEA29104246000EF93B64098CBB9F26DB4EA1791C48E245109D 23F39C97F87BE05A31B4AEB6B7A8E49A4648F8A6AA3EB1B80E2A0014CC18A59B43441A81 D78794CC162D367AC2E22C4985C0EC45B9E29F1D00EFCB898807DF65A3373208127922EE E16DB24D335DA01050CED1BE9470624CCBBD978063F6C538F90CED1FF48A83E404FE5DD9 2DC2DEDB2324409E78583E5C7874A9661480386FDC2FD62329D5BB33AE4B5ADE5FCB9BCD B016857AE69032C019ACC0D16E07C92B252C2AD5E2AB2BC9A1BC074EB697D7842AC5F61F 6832A8942C6BB35E3802123DDF726304D74F10FE22E386C2AEEE158BEC56DBDD264A2321 1A3D0B53183DB2F74A306D00758DF51ECAE68DD8944FAC719EF56190017CE10DA46066D8 AA27F9D6B8BE4911E2FE16D77303A58EA4C184BA139F7D39C4B1BE8C72B8104D1FF671BB DFB1C1F8E518CAD156D4ABB057B622287CEAEEB574F2C202462FE2575EA7D8CD820FB4C4 B87F022D732D07DD009845BA831A6E2A248D5ADF9C179276905A494DD35E4F7E581141BF AC76849B0F38B5A726049BFC2196C38B6EF6F7A0D38730CF3CF850A689553B7595070858 97211A03A40B37BFB57363CCA5CDFB04E01759813DF0B67A693FADFD5692DBCBC543DC30 65192915E654112AF3676DC58854D602C427315FDB2E0624D826BB60B5EBFB4CB190299F 930D0385629EAF0C0EB37F4C01C5C770BF1F0F825A2A4B6FE50D2DB566D5B7A819FAD0A0 0E4A7E8686E9FA936C0315622C95735E251FAB0407814B0F2F848860B942A413C7F43239 C413EFFB4B01C1CF1BB9AD882DF6A3B64B5B7C7F0EB4E707DC5012133AB2493E7C3A88DB 5D0A51394FC7D6E66ED529D16686537DE3FB1EA7116363C4F5945B344FDF031FDDECDACF 34F2458908AE0F62E2D200A9B147C1FBC1877FB41DF6979AFA02071312BEE01A786E5EE1 FF1B4462913540CDB34B783D104BE4071888AAB52177898F5537712D8DA1B09BAA0F094E 8174BD25333D3043CEC70925961865785A6F81359B7A580D60134A293C8DF73F9896BD62 809715A8C846915E7E636CEFD18125CDFF15E380A8901B0BD2B7CDFB80916D4839849795 A7231BDBBFB9858A7834BAC1FF8B8365D9602985E8D8EDF33D04AF77E24525460278EF7F 03AFD42AEC3F4201F8C56C2F4885F0CE693EA5BF4F62A8CD61F3A7827A1C40FA52228ABC 8D19EE1089AB3E80336EF6070B9EB31781EB9C6F6E3BF3BAB61443BFB63C08BBADE7E842 67C6A44128F33D7843DEBBA3BA7E723E91922C437D24A329E72547DE8ADE2C9676C2A078 A12CAAEAE690A31FA18076FA77BCFD1EFB5762ACE44FDB97FB5219DCF9F542F87A959EA2 F118162323B46DA8A0C116269D8301850EA28761CC0E5ED06ED48968EBBBACB891CE73FA 52B7C262C73DAE25843C00923D04893302DC2EA0EEC7A2CBBFD949A3B4135F5AEF66411D CDE7856F7FDAA0E630C3BBD42305182E3475589B41461360EE1B72298D97825C499D9F49 653AD3EACEDB5F9790BECB554A643AF9F1CD3455DD51E79FB0A6221C4FAF81BD822A1BE1 AB8F8B18E4141787961546744132ECC7F19EB3E81863CB6B3FAB60D3963D6E6F106A2558 589B07BA69CD18152F8A8B884BB24FF318A071CDC695F6D8DFF7D04E16F0AFE7BF2F03CE F6977E0CA4B46C24E22FA22C0B9DA11EDE76B5B511B1DDB6CDE7C314EC86E2B79E1C4FE5 357797A5EA3373FB14A212440F6CB0821AF449122D94828CC38E44AD6C7C7FA78B932192 55ACF779D9634B75999314B31F79003E030054010133046C6CA9AF0FF33AEB9E7C63553F F34203EEBF0E3F104453C1430A3642E79A4F5D708551C4751C9F4DF3862FA15814A10567 69516410AA29695690A5DF3E7B407A2E5F05C8DB7AFA0132D5F43177388FCDB17B325990 1AA479F19C138122AA2EC5674A7D41D85233345FAC3ECBEDE642BE5669128E17DDA2D86E 34088BB76C64685FF98F01D48175847E0F49E2404E9C5E9F9073F3796DC575468B53F9F7 39F93EA3FDF18DAC9489FFBB9B18F150CED84E6A4241580023C622129B1A91A8079CA92B 1A8B26B955986833D3144BB4EA25866AD4B499247D44EF273ACB2F1637F195AE7E89541F C6B70C8064F12B696A0C9BB09DED5F41E19914918F7F4834428A01350DDAFF763611C173 12EB28618542E8EBF479BBF5B120E02ECCF7D3F9638979F0602194DC2512C682FC947B4C CD5BE48F0CD4BAF3710BB42195ADC7DA9EAEC09E124D49E7CBAF579616DFAB94961998E1 4EFD0128982A15580D1A2ACAFC740EAD92FAC43E7FEFB551EB9322A8EA302B573A6C4B90 87041EEE1D7B60CF1E50A88F59EB46F1DE9F9760F21B8EB325E90B536AD68829FB965237 5097A06AAC312372A7D3EA7134A53C253505997B4FB2BC25EC2ABC8BAFAEE96BEB6EE940 A76AEDF4F00EDAE82434B3D5C8B854BFF71EC073A0DE2D98FDA384E4DDB1D84704BAB88E DF057C84DE21A1F7C4FA509F1E22C7B8FF788DA95A7215DEE81784B7F47643CB85D08DAF 425E251EB72FE482CAB41D49389B323E66D27863D719D78C676EC91981B0E516C21942E4 66804EED7E214B4EED83A1831D925019709A3EB1B2CE62491339DEA3A3890107CC5C486E F7A861D7B023B2835A87F62008BCB96748B6037BE07D54A22AA4206C85BF24208016BFDF EC4E68D8CA14CCFEC2CE496819159C153610C4521D312B8538FD3AEEC5FEB1021FE9595F 767ABEE99B952F0AF794FC4D7FB0BA7B8CD73B543ADF833989ECA557EF2FE9E80C786180 FE2B6249F45440E94C98C00ED7B95EF5AED26A9058826EEFE0377F4CF786450929E290E1 D89E70679A7BA87CB29FCBE1A79F24A2713D182F1BF990340FD0E00012A25801BC643A9D DA70E046D123E7E64B884B0F8024639E055D6F7FAE5CC5108B68125C02EE9EC0C41368E5 6F869A55ED15563BADF2F88086EAD3E67E8714AC03D2A12B7E99C2947D6422E5F11B74EA 2CC153B8409A2A03C0AE3AE784AB05475F3D086EBC28089DDCF12C8D4324A8659EDB40DD 5AE08B2752D196ADBD0E540590A414A6BC6931CD78CF0D78B23080B4D5C5D86B9E4E0EC5 3D774845DF7C74D07F242655018AAA23E64165DD462F5D2A282B5165096732D55A3946BC C00AEFA41085AB8F2B6BD34C065DA2C9C2999903FBF17E9E7E39E874981E9A850504F7D2 A1B69C85F532C6749BC675FC181CA05F486858C0F22BFEC83F14D4754C3C42F0AE0ADB56 9A48214A9DBB6D163E528E4DE29157A8E7089EFF2E2AA6AC85AAAE8925CA4A019DC38668 418C964DDD2EE6F2B92BA48E10789DEC415FA94C81CB95093F71BA384081A7A01D3C2DBB A934E37E27B4232C8A3802CAB57BE8BC899635B620F54FA5639EA9BFAA5294E57856664B B3B3DFBE40DFA0E09A14ED2DBE9C47CB032A86D9482D29959E21FE32CEBAB87FBEA9D283 7044E2161D62CCCF0A3E3195F874F78AE00DAC349EFCBA46A8419CE0A7788B1A2527DE7F 1908F9C67D4C59DFA016D21F61D3F29AA54763F81F2837C5D4DB2807F3E47EDF257588E8 64FEDBD51B1C169035F1B64D80EE209C5A2315B961D33E4957E11A2225F0E8CA0BCC1E18 9428EF1FC4BBFF887EDF1375E2768129D8558658D78D876F455FF4F0C65F35004AFBDEC0 F99C007905DB17D92A64B5D1A390233820D41BEA0F2B732B12BAA6777E96A94F23CCFB02 2AB8BF09CF9EE6960FFA056EBDB46B04B8F187D05CEB9CF0BA0F796BB494D5F511010E0E 14BE33E45C807F4FD23AB76B0F0E3969010DB86834D787B8E0F92689807033BEF513DED8 EB3EADA76AEEAADBB191518A950F227A0ACBEDEB778F43FCB3A281F7B7C35F58BB1B3814 49E40140D8059E950413B9CD3F93240629B030023DD6233C59ECA2035392E64869AF7FD9 4116ED71B821F0AEE5A68CD691653C2D6DAAB8AFE466D5D7F1BC3ADD65C0AF0EAAAA1486 DEF5F16684DFD78B7A41F7816CE8A787019D9ABD2F4E4253C9229A2DF73C22DF22B93A8E 4FFC4769448A3E00CF85A939424EC3856CBA520420BB7001372D2F703C5B36CCCFCC5BC0 1619D9DC961BDB0D9A2FB18759149632141348364E794B15E7BC79420F0711382127B262 292FBB7F4D0B37A7627E8EC5F5FC374B98B18FF02DB2F442D8DB5ED06F90C3BBB17D05A0 5D7D11A6A7C2E62F15E7644ADDA44F1A3CC71B61645C7497C242DED8199E31DB0A247C08 1739BBE040E7CC7299BF09DC0CE4CC6C59BA7D1867CD3CF518ED80959FD8B26748EBFE0F DF816836E57738FEE205BE2941BF7F155FFF82EB877B7DEE42BAAF4BF2E2057453611C33 B2FC235D7141ACBCF65F068F2A90A86B8D19B6A0D7223024B42CD6D71C04EE865279A1D1 6A401D2393058EB9A16020EC8E69943F631333D3C08C9892F8FA620CACC3D1A4F411FB78 A6CC30F441BE858EB8ED7A92164C59FAE8C5C6F275C2025FC60E326FC2F7CD6EC4612DC7 1D58EC6E363D90BFD5A93F552F7C3A6DE059A13C14CA2C15D35E1E5E10775ADC9D925185 1ECE6C1AD5BF430846F62165FB21A393838DC98C2501D598E83EE90B31378D4D92CFE8C9 869538BA6614A71D3F29E455DDEF8321C2AD78CC2C0A832B3D0F1C09E3B5FA99B121C283 0200791629A4094DE00EB9AEC55670263DEF10783A699D69BF861FEA783A51937E1BB83B D96026CD631C7CC3C7EF3BB698700B307079EF2F28F52FC05FE409E020B5E044D1766C37 55064E5B49FA1FCC37E6D8341525F9DC92B35455711091F1229AA39B397E9ED05EEE7797 B9A9EFB8FC162EABECFD465756E8B747A3041355178430CB089E1CA3783DE19454F97E0B 3B24813D695BA962CE2046C8F2778B0A7808D046AC0713E1A6DAD26033D153421A24E667 AA649DA942425C45875437F703E68F68AC5F5AF9B4E087FF4AB87DA00D174E090D834BB0 14B00764C1CAA2AD4FA2B457858F2784BCA840C7A8BC929505056E3BF3FF533D94C9CE14 76DA773403FC3F80E1A2335699A55079B6993B0FB187499392167930A874EB1954E6DA45 C9591EEDC1E8247F237C8657B6FAD992B9426D584E116EBAD9B9F2214A8E850F541A208C A8792F3980B4CF5E75970884DD7583FE277F82ADC1FF35E5F3FB216AB68C353B25F34C0C F2C4A60B1E51EE88F7BA84FB1C23601FA2270049E573C05218BEEFD56DF0A648665DB6B7 81C3B0B503202DC005B8F2F00430288086BC3B4D0625BA2966630F71DC0483FC43DC4AD4 AFBEFCE65FB61CE89F07FF29B9A9007700503043B24CD9DD8BF9E4714CA99B9504BD7FBF DAF7ADBAD4168CBEDD5EC802F2DFE773585C5162E564CF1C39BD04CDAA50C2032956EE47 948EE6628F9EC006711877235813960C9926CBF2372B9329C3CCE4F4190FACCF33B25BE9 BB4DDEB7E91E8D8ED843DF6F0352E51AE0670C4E0A91E78664D5F88F77F6B9EFFD25071A F9BF35C2D572275E5FBC2461277DCB0DCE505C6DCDF913CE7A99DA563AC06E1C4B07D7BB 0A24BA8CDFEDD3C16107DA2195FF9677EB104C08C085D6364BCB745BDE0D313D93E318CD F7929B299185C098642464F491E64EF9A2DC1DBC34153495AD62F886309CC6B6571D6177 91D94AD5A337912569067DFA1311EA41D5455C24D3B60ED3E698E10978C10FFB9A7C2137 92A6FC31939290392D8ACD3253593287DFFC13CC9D80870AF32A2B82AD21C49560FABC56 48FE43EE74D71F0E6D8008100FDC812029C4F1FA3ABE01A4EE9D99A2FA574F93BBC6F17C 7301329B2363DF36FA029621D478A795F9D564EE356CEF0A1E60ED1DBF5FA08590D677D0 9A1FFF7CF8D657D3D1CF2915BD56B44BCF420FF4A523162CA1791A56287BE773D74F7246 F52C0D1E22AEA987241202665D0F5EA6391ABF31F16A5BE4353FFAAC2408A0680A33752C D527145AE349CD781E339C8A9D87E5C0B1312F5B3C150FAFB4588ACC7D6357A5A3B4510A 556A7FAD44643F04BC6D42A23E83640091DC70FBE51B57A7E0EF1E2D6112624AA21136AA A1B1C6DBC1D1515491F0EE3F9C4338B58E3D0603E1C12A0588118F9261139CE44B5183C2 AEC863C7D7CAC0DD272FC5142FDD80FC668A6CE709CD7F297DEA655A767CB8A088474BDF 5EC4263121C7B3F154D8396B2470FF226A397257FE5D24EFBD3AE08CEB5CFE9194DC4C6C 147F24D3B36830FAB0AAF03DA1442C1E5E77951538CC9A022370A8C3E39273E4B8E3FB8D 28EE116FEB770A6F223CFFD7925C64CEDB8A7D66212CB443B2A0207EDF102672ADDF2084 5C2D36FF281B33BD3408CF628D7637F1E92A5D2168DBB183BDF98D99E5A68D9995AE6123 3675A1AE7BDBD80642E27D6271437F24D28884C90351E819D9785E556334E20EEAFCCDE9 2929DF0BAC01FF12B56C2B4EED3E554F3ABC0096BC7E5D9409C923E9ABE6032B20784815 DE1C1663D6EC86D7476A0E9698CD3B201F5F9CBFFBE604C4C2E823045473B0381B1968ED 20DC0D0EC89487B4FFF6F3F83A3D68EE78868FE5262235C3609C6756BE484D87923175F4 80A084A25B5776FF76742A70F7A60D8B76C3E13409A38A258E3E334F66FEE4567A68BF1C 8CEC4A80CFA0361BF63B7A0D5A0819C85E1A9EC223C0569857D730688E6D177E4BEB8E31 F873625E39573842035C5C6D66D923654A8FAD9421E1026987A9C825505DB5382184EFD3 6C84BDA96B464796D72571760CADB46199643060A0552D8DF95A9E6C30787CBD2F57B0FA D1FA43FBB1E488FBDAE8273BA4F191398652EC86743D32FD5708673AD1D39F62425934FC AC949F047C873CB94E4A3CCE44A458EAF26953DE54F645CA7B35553204A0F5C7A32E92E5 27785DE73A3E2A3A3FCB54EA4E395E73C5C89F64B77EE218F935AA4C42106A33C78D03A6 90813236AEE3E50C2C44323B83401444174174DE4895D090CDB64274B70F557204C772E2 D1C47C79C1EC238D5B345F7D9CBF27C6B98C5163E6D1D93F23F311DFD594658B903480F9 A475D3A3D9BF909D042CD76AF8D574D71BA12EB33259C745D3FF5403E579F794EC95CA20 9959A9CDF439138715101F9FFB3E867A2FEFC41EEE21AC816B7E48F340634714E98CFB91 E97CDEC4C25CFF567676460102255E8BF37C8B4BFA821EF0165779094CC8ADEBE5778333 9B9F4DC83DE0360DC52628543D41E0FC9EF2EA434DB9520C2CF5E74863D9BA197F8E7A97 912643D24CD024E6468A188E0D1E903C48B9A996ECF5D9B64A64E026046E90F5C92CE2F1 260BC6D4F298DA5A10B3620C4BEBB5C721B830ECC1DC8CDB86AAD6C20C9EB56DE6520D0E 29B6C3EB14A93D43B951CC2C690B277B426B84E4BBB4E1719278150A03C450A9FB44F6E9 16DFC8986441969A50F06A4483EA651839C31E89A9E4644E96094DE5320CE79DA5499528 AFDF9C150A4CB53A4EF9BAB6989BA5D0703A4F2F5D4CBC95719C0518DED3474F875DE58A 3A2C369EDF2BD851E5F2E0BCCD47A0452C8751E45DE47CC2C340EF4AB6F4F885B0C2C21C 8E8B252249C5B45EFA5B3E8A27CB39556A262F03A04639280ED71F8D01E12E4FF9D37C3D 3DF6164A4C300E495CEF60F368C4F5277FDC5B27E369483237780072A6709BB6B1E32F33 53AEDF5A0B1A30EEEFFAEC01A0E9630E5A50BABC081DCF71997F181CC310023AED5BA74E 769DA4D3FA84951BA80EA57C39C805F1C4B42C7673403CDE1573E1641B76F1AE22E57954 48B4C46AB50E3EA8B82FA89C9BEF737337168E18498C3653AC2BA51C757A15A8BE8B1675 FCB325B5130E13C36A66E3056C8A0157DB84F7D6636EB06B83FE198579DF5135C77839D9 548214B53BD51BFC1EBB8CF2E4B1ED77EAF56E953221F95D30D6F16DCF13A57664DB4DB2 B45DBB6410A9963DEE6496DCADA35B5AEED478EC9297FCB64555373F4ABE73D92B97CDFC 0D83E4D2E80C6433533451BA99E9B2777492AB98DCB69C2AB9737E5A075FA29CB29307BD 315A4A67E7A5519B55CD6DC3E241AA0A067B0FFD337D72FB0B5B290982EE91CAC2504A02 71315319A641ED197E14017EBCFF2B124E1D449C5A692BBD0E7486686DBEE2F15552583A A52385CC9064ECC3873A1530112161BDE2008B484BB616459466E66985829F8415D83DB3 4736B604DEB0E730A3ABA6D04ADE6666E303C40BA9B35FA5C753743239361A8AD23B80CD AEEC9B8BF6CFE55D9EFAABE474D9BE5F06255EB903315DCD4E2D3469D08AE17F2813D7ED F8B3B5D004347932D9B38955E27B786CCF0724784E0D545588B51460D9C2572C6E4C4B4F 9A01217FB8F2FBD0757BDC1882292CA04C24E7828D9A6F64B151A4EF2507C3D3EEB98F76 77D041A5DCBED1BDB61B43034F4F6F5807953BE78631376E6D3AC14411587526E7DD2E68 9D6241942A0C990123F2FB111F926A68B809DC5CA2CDED30262E71CFA275767F76D5514D 9B7A435A07670F011DDDDD31D8B944151A6A47C6EAF3AE44881252A078F261814A06492F 628BC815F32E0B889863A15409164250C9ECBFAE7A749AACEA6AAA3FBF9BBF40722DAE91 167BFB833791D3426DF713F829F60F3F9638E1559B82C3704E048AC9879E4AF5C70C9641 BBA5C04816B4EA6CDA7BE2DC728364587A5E7FFEB8DA7BDBFCB842FCEAF179244EC8B247 7AB7337897FC0946AE494BC487510CA123CBFAB3B7EDCEE9DA82C37D55AAB651B887E6F0 5A71F2331B1FF033A1D553186C786C224B1CA80D6693F4F6A948E338BE6CC540E86FEFED 280166B01B5B8F9B278A91E1BC632C3B06A4BC08530D8F1C89A6928E91B8E7C393C9AE2F 91F826E8AA3E11C72CBB0A552EA0261D5912A191127D351B12371E985C6DB66834869EBD 746F758FB0140C248852AECB41CC4972B6CEA24800F2528CFA99E667FD10EE57CF671099 527AA11667321AE9277E4293811190986CEEFE93FB7C4A1F1A5884BD786B13F8B73A1A46 19257501BEBE4E2A6BC3DF7BE7451D9364F00EF318111A8E4FC065022AF0EC88040267E7 BA268C6FEFBA8AFB91120EFE066B8B23E40A0A0F209D3097881CC2B7141BDAF8FF7C5964 4C029DDA226401B9B98C6A53AF6A93B39F6E3673A3054EEA3CF8CAFADAE0805018CFA969 7E879B9C31521B340B288FC8910E5B6E061A027A4C69DA1BF038999D693108AFB70D0DBA A90F3B2C073FE4251064E1FC887AD3708256487DA8EEE60795CF11DEAABF0CCD9CE8E372 AD4CC8C8DC413B9D2019440173F6F83CC66ECA28C8029C1AB834DF7BF2AF0E0D86C66BA2 6EF90A1761FBADC03C1FE598D954339A2970A5C9EC56236D9183E6155A511A272D005087 14F8749B03A5A2B9DE2886B539F1A377FAB65ED3437D55988512B1B1C638015B0ECE68C5 3AEC61020E34BD8E6AD7659399F0E1D8D23F5EE282BC764249B664D75FAFE67CB5A9DA4F 2094ECB30CB6B68D52AA665BBA751B446118C74148DF979A0FF173364D79202606AC2756 8D41821B1E4D4175411CD766FCA1C25093E6CE9A37C2048755DB82D7448526B59766288C 9225108E8E86261B57C521991CDC273C0BD25EF4434670C80AF8DB7300F26A9701537DD3 8FAD0BB2E9EB8F0FC9F2C8629BA97AA1980C39E9BE5740501BD4D57D71235C84C3EF6B4D CA3D1EFCDF79B8D4EB7C29EC5AB15EC38B2104745E45235A1F37F19E921CB2213F1A91C1 C392817E7D3AD3A6ED1EC8EE290CF5B1CFA2BF21DF8B9069F4496B7E80E7E96673B77EF3 AD7B2FD6653510AB77BBF1AC8A07DDE48A8C2AD11EAF2CA95540A164C1B0834106FCED12 E179477B185DF43148633CE3AF60539493D0C88173C0E63CB5A44790FE41C211966EE03D 424F492C2C87C04F0C28CAFEBEBEA7D11AC959E0C8A88776B4372E356C913943BFC88983 1C8F95A399DFD02779301D05205EBB921C1F52AA522746CA533AC829EBF7235FBCB0AD82 69A64B2C68748ED4843FB583151429A1E9537CB40960FFE9C9340CC11BEE00EC7005641E 964F4B0183C49262F3202EB6525EEC66CB68B27185B7DBE343FBFE8BBB34393DA1FBE929 50702ABD341F45EEAF0EE66C848EAC04CFC854FC058A9418834B4F18E6D861AB31DC1C42 DFA8D939921067BFF8815B708537A120CDB13E775802C57A0D0CCBC6ECD4CA0DDAD91F01 97DDD9118990BD71A1CB241B88DDE7EA4F13236CBCD7CA64FC858CBF1E5A38C98C19E3AE AC0B7B256BA7E15F0E49C84A437DF190A81D0E179B2AFD03A427F2F9AD83DD2A4EA893B5 BCDA0F09C419FF0D0EE4A811886E2784800865CC8177D4E80FA005C014AD9B124D3D060B 526237FCAF98F23D1F7195F72CDE4E72B87FC4A872FA95441483FEC58EDE0C8B97909B95 D5FF189C0D49053B187E0A1A8AB85DBB6D765EC78742E334378EDAD7F2FA77E9CED5F652 295145D463126659E0F6BA982BDC32363FCEC79AAD13248135E6A28222BE0127D807306D C94C817B649AC020B8B3DDB18CC5B05B83014A10DB5FB9AE6BE4A078FF056EF661B2F4BD B422CD7E80AE9B6835330AFF67FF1024136EF097F4DD5344D37FD7562802B2A1713431D6 FC1EFFEB21A02267D7F6B2552C97FBCD4BDE4214DB01C1376F07928CABFB1106B02FD2BA BDC8C71D0278DCB64375613479FBD3D7D893D279A3FBE92BC92BD99B6FEF817344AC2DD6 EEF172D3BB609E961180734E1B4C4F4B2D704BA4D1D3103BA4F62DAAD46DF7136070EB14 549FE8C727CAF060D877D22E21F474F9627507EB1FE2A28534789407DB20FD6D6D9F5CB0 7CCD392440EDA0E18E1A5EAA7B2C8BEB249A627EEA58DCA375DAE4EA816AEE7BE8BD92AC AE63C97BA1DF13081EE64198B83926153C8AD6F1C86FA73986BFAA5F0EF5091A4B591BB3 32ED4334E6D67A0288D390261E88FA39574FEB6F7B19B808DC87426BF13BFE2F76ED7103 87A5283D27CEF752B20D831D8494A2E35DE7F68856AFB67B6EDC883C45840C6E83F1E9D9 4E4351D50BB9A03B0F0B0527CCEED0081C96A029EF47F68A1BFB0A5DC673A0C8254216CB D84693230437E107267B9244E2287BC6CBCDF73B24DB5B947D5738568471FA1FFAC537B2 BF13C99D56230D49E12AAFDF51B03265A9A14529147FDE45C234282644C9BAD0C6892861 029C9F27E4AE13F8278E135E89E81A7E552B11DCAD49507502B47B1580A6222672EE9C3D A05B74A4719A849179B6C93BECD1F18FDC9CDB1EA52ADF96D29409B9B9DD63861A2C74F5 1A99843FD141AC60A49FA6A134FF4C4328AA9D95BCE4B89B4BE4CFDC1DF3603DDB0D7DCD E1A3FEC7059299A216BF88469B5C9B16C20680B14D414902E8A7D80E5429AA24D94EFDCF 500C1F1ED0F3853E2715598355B9440AFB9A8D06F6C038EBE0574B24E3A168E93833F462 B24FA106DD40C967878248B2E1D58CB8E4646DE1F2B5BCF7FC02B4BC7DF7593737F583AF 03264E5C35FBF1227DEF2C4F6889C2F77C3B84638CB682645D0F2E99E0C4EF9ACEBB11CF 0F658F7D3163C488C6E642B5B03C1E40F69BC2293497374FB157F42111ED5B96E04040D1 8C0020820B37A22DA38F4E21A64FFC24131CCA0F575529157E9A59EC6546004241A8F51E 9E85066AB22B72FA003CC868F965DFC34A2A0055FF86443CD3ABD3EDC30E9196C20629B2 AF3A1A0C42C88C20449F889A39BDE45EEA0551AA0BF0E9641D7D1FE0F3C286C7EE34800C 20A72C954EEE657FB36E10ACDC18D165C8DEFEC48D154FBA121CF1066508A075A669612D 26B9309F2CD33B2109AE9E6B1EBD4391F7B66F625367766F8CF0B8BC2D201124CFD9920C B61F71C4781B459ED271EED5937FBA4359FE1DDA7F3907ADD7C15ED021E7735985E6AA8E F21011A13E5CED0B69877C636D293BB99AE7B9457E8C4B84C4EC695C5944622B5F47DEB5 1F3D653C7ED73B53D16B504E761B8C105CBA84E45B408B415045310CFE8D693AAC924ED6 C61A12C7B0CED04E630D8A04F8838F286E646960120FE35D0D13F9E273DB647A999F1580 C1448CDA80B9489BB8E5E4507A7A5B5329A2E962EED597E4B7C4E6C72740EEB351A3364D 0B0689BC2658395E2B69A8FF0600EC50868404BAF6792A59983C6E372DDBEEA9953870AD 319849F018362B016EC38C0B7F947402449352CCCDE055068417434416F0475EC82A5441 987A472F59AD152C56FE81F1501E88D0BA843083736F783C366CB18C8A787FCB60E6F8C4 3B56BD458D9A42FBFFBE128C928DB06C7BF8F2C0FE209B25DBE0F28C1CBC8328C8E868E1 F1DA76549F34B6FEC13E1400B2F9A66E00D89CAA99B2DDD6A0BFC73C09C7D774CC05629A E23AF62DD1E58D3843EAE55452281A0DC2B31CFCE75A7FEAAB90041602CA5293EA58F8ED C18635ED0234B9799A12388C2AA469FEE8CFE1B112F7BE610990CD51BB13D955CD02D571 323F565D7BC240FE71E3A3A1B92BB9A1C7EC2EC6406F06AE7C0D14262319D389A7CD8D34 D41313DE9B2336963A5EC892A8051BEEBED24ADCB1F0BBDE77C4E3AED1D777C0EF2F1AAB DEE62B1967964C98CA08561EA234879DFB0F50BA067E1462CB63544786D56935ADCE3E7B 399B1B3D0098DC19E4EFC04922CCC28609390A7B163D66853C2C8FF94591CD1DF499DB82 F0F6FB7FB6D3571735528F544C16786CFCC7FA10D28FFBDB6C455AF2A6E1F6BECC080B6B EFAEA5D51607A260620EDD1DC6E8AAB588BFCAD39A98E028BD26DBCCB149D818E0B91BF0 8AFB55C618FDEDC15ED7055521BC90689E61965FBF22172F584827852B6DCD8FD466953F D16A806E20C5C96064F28BAC94F3A7818B18EAAD9BBDFA0FC302E663B989D97A76E925C1 CD1307E43C97F88DD731AC971B862E99633A531788BDAA4847A1FD124660B00000007168 72191B3F124402B990F3C379862AE823A3646762EF68A69D3AA91C56F50B10807C915447 38AB8EB6C01618880F72A6C2DA6764158320CFBEFC9F23A0C1DB0AED395C70B28C4D47F9 7C5018499E45AE5407C03CDFA41D02E18F7AE56346D872B03CD5FBDE0D0DBF11C1FD313D E0A7856974BCBE0EB331CE51D190BFDE4C08BE9CFF6F2A32072454EBF4DDDD1E3B9CDE7F 9ED3B2C1C5C60A12813DD88D75CFA6A9CC4583764D40C7001764B69A739EC079E7ACA5C4 1DDAD7D15C8807719EDCB3054D9DE3DA92912F019B50B62C8C4AE9488CD7D683565B2031 DBE9E7573595ABA60602B6023C1D4DC8370A529873DFF92DE908CFBFAEE97B0273CE36AE 6C931F5282CD2341DAC0D6DC59A693FF4AE740E77322F8073471F6CB3CA99E7A530F5E82 7E4C5185E015655F784855E4989F27CFB02AEFD20C3D0E9E4C1346ED248A6EBEE2BCEB80 1B912CE4AE5475DCD5D0516397CC74589AD3D52E70A9DC423CAB42BE428CC2DFA56E2C9B DB4F083F8A7B3B2B9063EAB3FC255A489707792141F87A2FCE77B89AF7099DAAE3EBBE9B 3655691A5538305B664C75DF2DCFCD53C87C38D9EDF8F7DF8A808851ED31E8348C77CA4F 3AEC6C2BE721FA3CE9D54B72B414A0992AC3A9DEFCF40579F59B0E30EE3A9B599772936D 5E5B921D5693FD702A30BDECC82AE6CC10132C2B6C697326CDB3201D35C4396887B5CD1F 1909A0C3A19BA71AAE02E8639B6AD1426866196F0F9F0DEAAF8BDC53720674296BD41161 DAA21FA4534BA100FA41161734E310C6E88B8BACC050174028F4DF483785184B30AD1BD0 2EEE2F93A187C5F48EB3ADB9D63AA4D52D76AB07B93CDA7F12F3C7D9E58DB297D2048375 5E5C6D1B8F9C5C07A142E0A68177BD7AB073CFB934EF14D9616B15BA2B38AB4FA4B5877D 04F5308D74D642B46352FD84B4FFF058C282D308AD2AA99270964618A04C0E522AB7A4EA 123FEC9A47F13060E534C0C58C327B063D59CF96413E176031FB21F3AF9E3BF1BA6521EB C71336E468A8FFD6AC2EEAED7ED016D2775AD2A7432534704B399BAD93E0A1FD5C8E6FDF E8DE157ED4FBFA62C5F0D12DFE4C519713A76D6B2D35FFAC7C0B90ABAA8BEC8D2221FA39 5685428736398AB87F9B73F7094E02A5019A360FB5E0A2857AB2439999377C9D4B1529B8 D8DC1EE0B68D1A5AE1BE39949A8D53F9274D51650124E4BC873C07FF0786CA64EAE168E3 B8E0210945249FA48059080232CBCB56A910E40D14A479F193BFBBD701384407A2DC56C9 BEE9A4F3F011F02D0AE09C3F6EE0808336C70C6BD82525858EECB6521238C717469BE58B 6865E2E9867FC248A82B44142F5E825665F6780B03015A6CD2B1592F36B7F1C03D58DCE1 9588FC260148D0DE42196BD052136CA1BD82BBC0AAAC6ADE4500B9F374DCE51779697BFE 670245D126066964B61D59864EB636C43D6ABA70429614DB400CAC2ED06D85D3E7C3D9DB B5E2E7EAD6031B9798EDF30772FB9CA88F52D2A56C1CBA8F95202DA92870CA6EAD0358F2 183C791783746255B2E87EA261A1D9C4B7B9B4174D412BDC01F4AC19DA76C423992291A0 B0B85C1F62AAC83B253D8C251DDC43D921AE994E7122F7A49EDC473B0D9B71D8801A0D43 B589E6C1395255D3515A637670589D6BF4CB75870D2BFF2491B7DF7EF95F04C0531C3C00 6BA3CBFE26F52EB9D041DB138FEF272218451237E60685E66390659CB98F178E3BEB8834 6B1E49C6D9EEE0677281D460E3AA55250A0D8D37DF9DDDE21F002A70E2F9A22F0AFAED24 80C169B2BEF14DB7E75ED43E2317948F2F5F17A8A301E5DD65D1950AFFB85A1B4A26AA89 104519AB57E70A3F506453128E1614BF850F371F29A9CA224B2B258C9830F3046D4F1C8D 3DCA9AAAC020617CEDB6FC6E1EDC69E17812FE92EA38C97ED91987A65C72FA48C353326C DC7BD08632C96BF3C9A7C095391BCD9335E8F254E937A77855854EF20235319423D2DBC7 DD2435B9EF9B9CE1046B95421A98E910196E802263650E5D2087E34E384ED7FABFB6DBDD 48342333407D7163A1B1031F841AD55FDBE7C1553CF17CF057652E243CDCFC8F86D8911C C6DA2FA6BD522ED649C52DB102498790D6D55EF2AE27790595E8D8489EFC05F505566958 33A31087D230F6041DEB7173D2BFFF6B59E643B532C2649D4902CA7FBD79F3347ED28EDE D5EFC41B0B6CC97F6165806BABA7930768FE8E4B8313A5C9D69BF0B029CFF51B9470A22D 98A6257A6BC6B34F11536130A980D985E24F69E0846C395DA6C35C036940E609F9677B0D EA2B923A92626EEC8E224E2BED76CBCCF6F2DC14CF8D90BDEC80E7088CA871846C68247D C4912B6DBAD4C97A472C1FEB6B2B460929E374B23975046E6081E210116ECB0F3680D99F E7BC4794EA19037638DFD2ABEB7365F2A7BDFA3C7766B3FF642F0639D897A3F0772EF880 EAC10E1BA44C207039C64D2DE51AB6F71E703F36B24F9BCD0179853B815DBAB59057E8F4 7C74B338BF128922C8057518CB7FA34AF8F590BDB76296E4258570F5CDCE24B4F9755C88 F4F3CFAFFA1EF7EA5052A2C7D8A823D0A1EA7740A726FDD7B1D28D17B01A0EFCD601F20E FEFB1688FBB375573F54EA1913230461B54B64174D7C99ED8A2DD269CB60B02050A2B300 C0E7039663C388C4670BA295EC5BFAF496DFC11816ECFB433AB94380D1982DF52B362305 289A0EA2205C91DAD93A6428491028D50A987C5501D0FEE5509196EFD2CD36D695B71289 E2A4A96BB065C0D9242351C6A3732E49D51B5E472F9EF2524716B7478AB7460F43267CE5 6B2DFBEE8D34E1BA79A57B175D8B9496BA2C806C2F6CDFDEB0DCCD0D813E79E766FB8548 9087D61E7506F04102C2DCDE9B44EF10B38443F7207B707A265E1111FC0E411F04A64524 3465AE5AD4FEC01561DFB4C1384B8FF54A0AEBBF189822B63ED986B8197B3B1085087B01 B9EC606AF3C1CBEF701224ACAC1BAB4DE76FE28BC7F538DF318EBB3CDA0E9FB06214F497 BC2926399C79CCC70A464C2B58D51A52BF06A5650D21929E4C2EE5AB624F5EFA25E64B63 2ABBC3285A79C5576ABE016283D08E19246B77166612E83B2244A1BF5A7CAE45A691AA7D BC31377285E78F094870584C23A2216453B9F0804BBF32FFDF810A2DEE41CB2743472A57 D050F61E285D232C6EA0C2EAC1C0FECA0E489970C7B83D6F1D64B187BCBDF29815CAFF8B 8EC2AC2705DB255240A5A435A0B0AB6F2C9451C7E14FED26DA327D432A30B672CC7E0D99 8653AEAA0DC7FB4161E604CEF7464934795E01C7CD625A2C7C4988CCD213C19CE963C6EC F45078DD17A158FB2F9FD1241FE5FE0C45D05AF19E5C5D5AED76D297414EBF0E95E451F8 B61EF47D7A80B240518FD2BD42C53B96BCB17F04B850CC889859887A2EBCA1499C10D034 D545C5101EC917FD27B1F87B4460B8D5036A7072070ADB83573796D07A4C4C5348FA845E C31C83BAAA79D880FC9965C08621C9BB6A982CACF2E9076CC88F14F4E2B1403A980AA310 33CC1C16B108D3C390F95E87D6DA3FB4E9AEECA82F70424F82C243D0F0DB273FEFA8F57A CB2994DF51CCD21C45A00F60EED00CB7C2CB6D131A57AD4CC98FA2BD0313E15AB964221A 6662B6319E305F2D2255741DA5465C9602E7AA3558B98B906B4AEC3AC8CBF877E51AE0A3 CD1423A0AFD38716B0B74C7F492412AB575D9DA05634E20D34026A1E02B58806AE95378C 8018A42F273FE95E72C6E8BC54646FDC010E807B2E78AEE753E9A223B8B014CE464AB7BC 5C6FFB19A0687C0FD300BFA19FA2E9A65FD2A4BB8B5E6967289A70EB18821A32CA0751A5 972A6F3E3054E10972F59A9DCDEFC5DB1E9FDD87003B98228BDDC733DF066CA5490A902F 2930EA9C937B586CDBD433532E6230F87773FFB354BDEEB778ACC289F3015C5158828790 BD620956700DBDD6C2A9CC76FCA2868936D279495651B5798491478B1B77CE6656E8FB2A 69FDFCC2C8FE04C5C6AF6054C01678278164ACD9CB8C7BB41E0A4A4A3513283C38B03B6C 27E66FA995F58346B724189632494406D7B8E6CE243C5BF1CDE8C87AEB0E6F43C52D5D3D 4F3F9C876FB9ADA96302D73FD3DD51D82E1314024C5B1262CC009052C4E598A2B7D855B7 BEF4FB97D65D8B26B69CA86C173CE21A159B3765FD48A6E978137FB2C7B9C4A39A94EB09 A9825BCFB87EDB546D917F4BB3B618906C643280D3A33CC87311002B465D440C5FE3B8EA 1C3AFE1CBA90999683875070513E14D37D5AC6214D5E38748901D3740350CBABF87ACACA FBE7CB2A97332D9BFED8B0A7EB95BCA79E8D4D6A80C1162A49C73961822A568D43BA71A4 90E3571845A95B8AC2313098F7C3379DB959167CA17281F8FC7933F10BAF70A573981F5E 02810780D9780AE94EACC4F4A2D1BE14649E1B776175FB5EAF25DE613686161995472B24 86AC004708550BCF2CE0CF3032A02BEA90E1163319C20894648844A936D39C7A266060A6 093B59CBDD59E4FC67AF429BCBFB4037DEC87FD9CE0FC26D488C1987E0D6A79AB19A7601 3C3286ADA28464BE78C5C591126978FE183EB480403432664318992C47600105BD1C223C E78F8F5B3C1C56F298C28B700886B9E467E7ECBA6BFD0BCA114CC74CFE8252FD9FF4C39F AD3071CC0E832A9F4BF89F9AE4FFA1FF02CE797052DDE080C175AE529C61B639D842BDBD B8D349090DDA8F503C909349A69BDC6D972805B15D2E8D321E9296E3E0965E7BDB040FAD CA90D1BE06E438AB653E7553EB43A4430E3AB1A43BEB97715FE97A8B76A7B5B1262DAA01 DFF0259186017062090F6B9A35B9962DF2F7EB85B6D20A693B1D925DB4BF06996F60BDD4 6C2381937E21B3299CF3BAA565727DFBFCD38BF24143D400CF99A7F3D09D17D5E1CBA49A 9C607D434EDDD31BC70D277CDDCC5CE03C001B53CB1D448A87DB676F6BE0681BF57F66C0 43BA1BF6889DC9F054A544C4D498B74988D5DC13262AB95205386343ED6D3C077B058B57 4C464D02E35DD342CF013B84CBA67538AE13A3F50BE444014ADF085E95D736139E1646AF 7C4A401E25B3511364DA040AEAFF801A664E71B0D2C6E46B510A97D5B75B2377E54BC7B8 C4B368602743EB5856E4385C4FB3F364C54239B5794F69E39791CE5BD967BD03E212B8B6 E14336AF3900878E5031993E3043B23376975A43CB032C9D9C1E485CF34F3A1F2055AEC7 9A2D2E68CF82F1CA0DDF7200B9FE4172947540769AC5FA6AA53A87E6A79AE9CAC84C0FE5 F0C0752F85329F95AB21AC314B7D32C538E70112C12A34DF2CE7127E5696F88CF65BD083 5E57CF98FE8AE4873FD1EDC9F775E6920E87000CAF9C8B7FE3CA5A84A5AFE056CA8D5610 69F8979E13055582F11FADFDE7BF60FA9EF36AEF0D85F29D94CE5C571574EE03FCE5E5BC A5B2D3E4FA107FED636226B59D00CCE51BEB891DFE12F04BCEEC13606B051D5A50B08F93 D0B3ECDE4EF0DE6E06829E559BB2AEBD02D0B7A1C505743ABBFE54A9682123C3695E86C7 54465D3A60369CF9C3FA800658DC52000B8F6915A9F5549849EE092CFA885BD5FA96E6E3 D04DE784BF6F17F333AC90FD8AFA98ED04F003E47A44893E943B6504791D21FFEE630A7D 026F82D0B903496D3E08DC35768EE6FF9AB617D29193A5FDF8A0976336297CA65BA71A1F 56E19EEBAF4AC438B9807AC1F4CB0DC9F740910E2BC32220D37A337FECB98301B0A203DB 739DC361838D4577296B9DF5E1DEF57DBFCA489801685288238CD8DA085C709663DE7F84 127FC9E6C4FCDF327532C87635A6D7822D36583930BC9FA1746966A175670A2EE77D5FE5 DB0F43189C37191F0ED80A333E8B117508E17C010FDDAA44820EF17FA9AFBDB754507F4E 1AC0D09A0FAFC80ADA11DA469995CD7FAF67CD8E29AB323C03B6A1DE80B684FC2AE84B46 BFE4748300EF789A12A166FCD29ED3AED2FDC431BF9B3A450E2B15BDCE9F15C13E4C28FF 15E145C661B3EF6DF748C32129BD734087B8DF6A5C00B4765F2B518ED29FC53D283587F1 2B62F177D14E3956A64C425AD811AE6833F2E095AC0F7BED54333095002EF33824F6A7C2 3CD332BAEC7AB22642A5331A0C1656E3E2E4FA99825B5F1A04350BD96AD4E491F97E47C9 F5FDEF0466EE0566D5F2ECBDC2C3B0DCA65728196BC139EDA445C7B5435E293F50C91CE5 4FF3AB7112603BE44D41198C3A5BF2CA4BC460C0BD8D86073948C452AFD0A35CDF30CE1F AB58276DC2A49CE15CB2C1EE44E0C3E07D73936CF675B1A40B1A2DA5C61BFE4E56C92FD7 CFA03B2D6A9A108054AE303195132BBBCEAE17F83B7B9140BB11DC6D2A3B17A46CE4FD4E 0EEB5FDBF8028B1E7052C602C5E7BC63D6F6A9172032D538B495C3D8E3DB6FAFB0CEE41F 35884819BB65463B11378A7526B582A4D2EE1726615B66E8514B4173C47B399F86ADAF7F E7F7C08A707A30AE31400B603A31951A7F617BC16E5905ADEA0197382CF2F799F8ABE8DA 134FC37C99767D4ADFD45502F189ECF7D08471186F4D29A054DED0C5AFA56A8AB3AD5F3C 71D784803E0237F41B764C6A91676BF4623E80803231960AF3B941EFD842235968071455 F1BECCB46F437930B443A1C4F681AE595A7F7057496C5BF98FECFF07CE1B4E3653B7AF75 2F647322BF2FD773C8C79B305EA2365EB878FEC55A277066560401CCA10AB996645BAE4E 728E34864C7F2F0ECECF66C0387B2DADBDA23EBC4C0B904C5D152C9856EA1FB76D10BFE0 7213A87551081FDBEFC207AE33B860649D445724095B28D45354590E967DA4960814E184 2ED400AA72982427E378092623D784272A07450265A89A88C13F0A71A03C4234EE525034 2F5F28BAF685A2D8AD6C195B4CC3ED9DFC0E82910D692ADE7236347002251126C4CF7C82 175624CC08445EC64357BE592FA06FFE3FB52720F4CCB0A78173F0BFE317F2C22EC52607 C9479BFEDD6FF60EC8F1F613251BDDED25F2639E469B344B86ABF4BAA8A9E05C5AA49C91 826B39636461E805364EA49E222129B12D357641D89411DC5081064473E78BE378BE642D 16B4CA3D926E508E5905AB84C588EF25E3AE064348C93A28880A02B0665C2486BB41BCBC 8CDB229607ECFD58E01D99D71BC1AE9DACE87D02D7567D570CE3BB7EBB5877A5E309B181 0E75AB6AA6E2A72B9DAFDF89862C96141D72DAAA090F0EC8A239F1CB565C7B7523ADD890 76109390815D4D128B26523BF36FFEEB3D1DEFB8C44460FE64C11F1183A99BBF9C5D7BAC B644531BC4873EEF693B2E5401D764F0172127F873786FE8A95142DACBEE14E4B1E11E5E 13B3015B6344C9B27CAD49C457FFFDA86E0097D8533F76344AB561593CC09BDBC1758F07 9F31AFC4BFCCFDC2D54B8FA7F1265E8AD350C44C940B8111B4A59D078423535205A22202 92F892CC2A5AA50ABFA912D6FB0304EA164E191CCC659DA1E00B2DE5A6830B60D69AC9D3 CEFEFC2CB0DC016B7FB41D5853A0BE141DC15CAE07A90E56187BAF3716B7A7CC839FB123 69DCD8656F62C1E631FCED16D171A3521ACF60675FFD2911A20DFE45A57887984AE2C41C A8C6C24A12445E167CAC1A3FAF610DDCC8649C6F6CF07AF89125C6F37C70B682BB77394D F4F6E7A111A0ACA9CD25E1679891B3FE9FDB3EDDE1D3805DF7C42BC5FE4A6D91C7042F67 6ECFE15B9A90AEA755B3E032C60A71554102A9FF4C2E9E467F0B7DB9CA0F2AC3CBC3CDFB 8DC2A7365807E409E75E89047415598A8720B25CD32FBC18C12EF6E1F9A193132C0DA8AB 134A567DE1BA0583E12BA2045A36C298ECC4F909510D29ACAE1EED825ADA28437F457BE1 94FA7EA3ACD0119F438ED2A2A31BFC511BCC3CDBCDF34B6DE3DFC6F4836178D9BB35BF9A C546AD2D1527D1B020D2A975E83848CC431CCDAB997A195E2AB6B3D5A8980D5824EDA901 EDBD85AA2B82480CC76BA911F2D4F7E2675E69F4005412AB2E88861A7D925EBDE0799075 F858F32B8BBEBE0F6138D4C8AEB2EA647046C533519867FCF286E04AB146CE6EF4080A8B 2026BDA70349038DE8C2B71B2B2834E57D4D486F95CAB49C4DDC2DD17D8C959101CD2DF3 D9E4E9FEC4CC05B2490A90A30C898E8588CDEAC838565BD0B6B494F2DFA565A606789728 0EAC877E47201EFF4329FE524BACE5E90E8525CA1F5206B83D1FBD284D1109651141B4F1 CD1D1F5A0406B90E4FEB435BFFB60BEC00454F406B6CBCC3883F8D470226A8214207DA07 76CEFA99D769166A8327F8543039B44FE297A1EC1611713846E67B20E0DF311F715E4CC0 3D1AD8EE1D14FE0AA2D55D1C30F9C1F12C9D8BB8E5429FDC4247AD4718B634AE34213480 45B9ABE0C2E231914402548748A388FFE3D5148DE9F9BE6CDC21DEE4B5F9FB0C3A52EE12 A9B23D6815E76979C6266A811157E380AF6C7911D55DD522FB766932E2CD361406517268 43C8C1EA841219D167757C201022045656A45FA93AEA1B404B16882F20BC30B36FC2DB62 96DC200D567BA9B4D49366EC4D3AF556013DA5878F04B437257CCCD164EA4460E472DBFD AF091AF1C2131C55FD31E7DE78BF0380C4B34C89528CE0A36ECEDEBFFB34DC33AF1006F7 EAE6444F7F063BD1B1B9C88850B1997D3A24BD1650FF98744C9A0CD6F7246CE22A1A91AC D1EA6FBD9237C32B80D6BF79B40A3E622E83DFF1366BC6B7B6295D5785BA00342C146BC2 527FCF50B73C17B76D6B4B0B98BE03BAD8A67C7D547C866DB6FCAC78C69735F26DE9FE2C D9504F5AF31727791158F17D129677F5F9BAEF97A1899A7DAEEA53E70EC6C822C3F893B7 3A4C313551553E902E762BC58D8D1E9508D9D3355D5FC528DA87BC94DD9EE305ED737379 CEAC96549D3E7E505A13F11EBBF0BEAD38601BE5BF68B1EBBC504F8D9B4219307F7DE93B EA6B153F5BB35E2B50AE9309229698580334EA4590E06E41D834EF86DECDF64687DF0258 6AB142A457531A9103D49D0D64FD583046A107210FF1FD544A8B07EA3DFCC04ED74BA498 E927C72907E896B8E6C0C0FD016A42B6F45AD628761A78C405C51BC07DB9D90D54674B0C 62F43785115A94708879349142D612DACF210116A3EE5F0AE9EFFFB694C328C73EB4FA11 56E38C4E25BFCF9F441C2B0A6752091DD9F9C2175495B973CCC0EBDCD43125CADBE4DFA9 3E11EE051D6D46B0B8A8C4DD6443D392CB7801D131DD58696594B1FFA5DB9D70F46E1C7A 84B445E50922880FE987BF899BB603CA937D4DD3386C24D24AD31038CD9C5727AABF3DF3 0FA105F554A39A091655147C8511B818A5932FA9B33C2B1DE319C5F704BD439ED6E1B8DD FDBFFBBB038B350E1B8579A1B2F55B24FCAFCBB6905F24C82A3FCE3374F979405E69BD62 6346E4531E130DA4358CC11FAC6E705228CD1D4BD865DE15F2C8629E77CE5152E3CE5207 D42D9265A4F27C5FC3AF11712F1736F56CAE5DB347163DE798EA934C189E5FD6ADF49DD8 4E9692559753CAE3584F3C43902F775B9534A4B541DF22DDDF723339562A5785E37CC808 47E59091A5A339467B57F15902EBD2399B55A19E098ED661A475A559E465A502CA339B3C 64A55AA28D3DDF57133DE6FC6443B563A0D49F898E0CBF45E55748AEA9E7A215D26E07B2 C8CEBD2D9D233D8E86D53D079691EA21DE11F9C4FE0D3C904C5FDCDF2301BE7C896C2FE1 036C2B3D9EC21292BF87593E27BBDA40DB83CA23F65C56064816657C97DD53CFC7FB54E5 353730E625C5B31F030BB0E1D09429E6C6496EBCB17C114667F9B8A31ED328AF0EE9E7F0 1AD0E70AF25BF2BBE8F99A4AAE42A6466347CE5FECF91355D61A312C550AABF782CBF1CB 649FD914B4AB1EC2BBDC6EFD65621921858E9CEAD02447DAC2CCD4D9D880BCB1513A5AF0 D931F417C1342554E7EFE9529B18CB931453AFA51E2830037D2DBA79C565EDF25A0A7059 315E242D82F2A32DACB9D86C62658FFB7E5A11D00B59CF45B48C1682FE8FC4A4FA41746F E6F734D86B7CA91C976D40B64601831546DF211405F1F44FB6B8FAD3E880B74B66A93783 F12CBBA01B8D456A1BB0DB78EF455B230B53F95C4E7B13EAA9A8BD49F886CEDBD9066819 085B30488B011B125737F16BB6B31908808E7B076BF88E2F23684929602C888BB3A51D29 A3D8DF55B39A48E5115E686380452EC5784D09C44ACB5EB20ABF8DFA9DF66344BCFCF175 A877296E511AC83765358D8C091B91A6C70AAEF9A66C2F36F6387D5795B60261381CAB7D 9A1EF15EE18683C485317692DC0CCC859F5DCF51C3930355BEE5592A9E5DEE4360E8151B 582E019C674501C0F27D1EEC05B1F55FE9F79C5FCA04AEC51BF01CF8BF5DEFA0C9DA4DF1 0D923E6E56D35364023C84D9D71D68168A73ACA6A6CB8304C1A830C3CC7155D9C5141DBA 165A1C733FF5320A1D1028B7B543D2A1516071D0C02AC030E52BF79E464D8938294A7D92 5874AE6FCB352EFD4790F6973A627FD2979C19FBF19D2870FAEB6BE729D34FED4C87264D 65FC15436A57DA96DC09C7CA864CEE0D98AE9C498F258C4599CC97A1B9095825760D06A5 C53E257F54407EF4DEBE04606D65E3D09C01535736D3852089D8FC0D2CEB60BE19D959F0 CE1858D5B4B72A953FDD1CAB16B1768236162A67C1B77CC4DF6393A480DA4223B65C9747 67A08C86DD75BEBC418E370D5C2853523D68852E705A4BE611142EF56ED90583181D8559 9AD285830BE0986BD8FABE86377F5529A5749A30C89A272711A694AE29E2700034B6B620 5413F9BB288AA9B0BDE0E91CE8643E96C8A771FEFD1EFED94DF8D67CABBE928E3A845723 BA2B85A2BF2BB4F784F2324040C42292BA0966DF1A495D7DA80B9B79F76D10F1A12D53E7 A16B3175CBC39C1BE14A36CA1E3C7CABD9F8DA323243F0703C3BBABD48B1CD35BBF2755F 2508FD2D66FDDD1DC21D232CCDD7CA5E749A841F82EFF35249BD72B0820CC69FF176164E EB3E885E1DA18762FCD40761FB5C91D692F2678BA2BC45CF1BECC0A8C28EFD62D1EE29BC 2CA29D922AF0A592E19AC004573F357ABCFA00916487664065D3864EFBC54AE0A70952EF 676B5087CDD43D9540C784DBAFA0C0ACB72E35CF6D82789E3352A16D379A4C26118C4B5B 8E5C7258B2B9082556A1B018085F19168CB7787CA06283382260FA3743D036EC4142DD7D 2654BF95651123718193310928CE49B532F6B26181B078228B97B4BACCD79F6A8DAF1004 096284F2D45BA3BA14F1D0CAD558239BF696B1F2D6F6AA2D11693B497A7FF12BEB36F65C C453320F8241820AFA96FB54E83DF38BEA9C7A004EE4965EB7104982F4D7847D397B9EA5 9F93C61BD259C3BAA15323EDA020E35DD78B7FBE6D7CAFC5C34D9C8A60B079EA6A3123FF B7352EA72DB9BF6C80E7D97AC188A9B8BEEE3C80819D35EDF1CE62AC4DA459EB208BFF41 4A3EF9C4E3514F44EEDF60CB817EC66E3D698702B5DC889EE0C064A387C7487DD97B4EE1 2792DAB796E4123E9D7F3191B22F2481A4602CFDE1E708EC6BFA63C771058B380EE6AD48 2524F9F1FB75D470EC11226A138F4B9E5360AB443D5091B324271E8B251297D8236E3C5C E92AB19E2005DB4A8BB12950E6A3C47C16229F300F8BDEB8A54211BA195589F6C8CE22C1 A32B3610EF0E43458132703F86AB9CCAE7F99CD7DA69EEE32CB011EEED797C841ADED034 4BE043DC76BC7E5F877620283E923259EC2100FB83832D104A256105EE8FA5742D7E252A 7539334AAACF79E4EFD98C32661AFCEEEB5A9CE44B2CEB765C6FC6B361E95CBAE60A8680 D2741C9AC12B834BE5EE4F498B1FC7137BCDC32A225DBB86B1F342BE3FBB03A17624066D 2D652F7F7F8D431AE8DC401FA2FC64AC056A9F29DFFBDE1E07BA398624F3337B6001D1B4 F54E9E67B059415D43144EA8DDECCB6B57022B678CE554EC7979BC4DE26BBDA16059A3F1 16457844011864CEA021FC099B7FC141923CEE982E2915C6D0C28767027E139BBA2EB02D 49DD1B247EFC7A2A1504C4DCAF35305671CBB20B2BFEB0EAE475ED4AD53293B94A6E6AC8 41FE1E9CACBADD1744428F6F992348A3B1D391CF65C86E2F1E57382D245C920C7CF3140D 6AF604F686019AF155ABC0B0BB9835FC49755277A5DF9E6F0A7B8E91EEE7A2287704D71B 64D4F6D0C927DF674B35A38E98CD7ED00B76966B2E44912BB1EB240C25AE3DE8E7668062 55CFEBBE98D8A49657D1B230F8A9AFB157AB3BF74C8485F5A275B2C065797A9B3E1021DD 7FC20AF45DBB60346C53E3CEEE031619153CAE0CA4A3C25458D73EC46E8B7196CEFFAD73 6243CD4F81D73A2A7D0C3F58DFDEACFD4330655FA5082CB75FAEA9B99D8BE6A0FFF920FA 9F8AA5CC2EFD3BD09C3B8A94BA03D1411D6AC5894A8402330D5564AF8E75AE549A11BD49 E15B20F7879DAF938B09E430CE1B57EDD9346CA8AF022DE5548A4726D49E8DC439D7DE79 7C006A7AA78B018A1D68E15AA83FAF97394FA4F0E1460DA5AA9710656AA1E294016F2F8F D7B10DFCD2D10AB59308DE6108C3D44CA6B5B1A0A5408E6FDCBDE1B5CF86CD7A9F815146 B9721F11ECF3EFF7640EAEE03D8D3B4B4F055C6EA18A7FF129F369A1FDEB7B71A3223890 BCAE11DB2848941B6323221AD976E5986280844ECB67C4A1ACE6BC87517A2DDB2F928A01 8727B99FDCF0D0CFF57A0BEB04C7DA62E41E9623AF0FA6EB651E0D1C9C72140CFF8A7A2B BBA67EEF1AD2419BD5D399E09F2BAE43881E8AC834E46F6F1C96B6EB4DEEB32637DAFA37 89C2BD92A4989F9AD822A6483D516A143EEF6DE93ACDFF3B118F8B80865EEA782EEF6DEF D8E5E9252B378E3F09E770F38CF1A71A5CA9E872EEC7E1AB4AE8B4DCEA41630FD47B9602 81A711304DDA075014AD733B83D5631276F636D4A470C1DB8F5B1E1AC5B005FE2B5B4D79 346B39D86048D7066C0F5476FA7E8A8F7D48488F49507237719121AAE83EF6938AF31754 5C848CE4E8A118A8093F5720CC4884D3886A5BEA6312782D229ECDC11D4AA1731A5B098E DAFBB3EAF2C539FBFE55E96C1129EF344000D8DDD7C7CD53196B27AB252155A634FEA9D7 971E3079ABD8F38DC7C166B5DC2D0B1C66D776BA678C5C57E8EFDD55EFA2F5B5FF8DADC6 0F18A0026B3159C7FF28D5283E6835147CE4D5E5ECB6A8E537CDD7F8F7A0E7B6FC53292E FE0F780D9B58293F527159A8440C09FD842877464711F7256DD732AB76D834EFD0C5557B DE603FCF0E35B4025848595E585A7707A33F0693022B06FC2032659BA15DA56C183E51DE A5A8921061E9ADC27AB380DCFC851ABBD9A51632F60EF08C2FCF84A86A89516D66DBB232 A4EF10707682B9AF6A9B584766C8432FE43BD4D2111F81446E0D508817D6E6742261939E 36C71EE1945C10C1CF6FCA1236AE71A10957B57B1F8F69EDACBBB9898735D2071C073E43 6585FE7EB0BC41E40DC59BCE6C311D84F9C41929DEE8317615033CE146B3C8DD7C1DFC28 471226DCBB5A003FB6185793B313EACB67A443C60A2A7873EA4F13C0DEE9209D4829FBDE 5E93380F14C2F04448CCCE8C92A0494E4F5BE68792D35D019F1C4279D261579261B6A990 6ED88C23D9D7993D36FB0F0ACC744B14FCA75D62AFBDBDDE020DB4EC979F9A816DB0AA8F 767A0CA4D561E00EE5917AA1FCCD701A8FA3BAC8AF96268B9E141D891F15B918882FBDF0 4B611708AB3D464936D9AB17E781DE646C2BE7EBABF82F4D547F09719EB03FC702894480 9E8C963D076BCF1DD1C29F3E6A57DDD550B4C50C940363F0015EC80F170B282BF9E9E8A8 7E11B31975583D1B8678BE0F782DD2DA711A0EFDC5EFD9BCB47C4C458AE693207F67915B 388CF71C508BE8A2E3336692A068097AFC21A42DF45A12CCD4E6E005857D04328032A455 070E65A5F1574DD06B48CB94508FC3DAB04FC0D777C24F1B8A32F5401919441A01C7FEA8 90AB7C15FE2FCFE62713F42E9ADECCFA5114E46E8FE38448282A694BEC76034775C730DE B2813ED4E2EB75C8D2CF9F6EAA42A82C5C711BE920E4497E4DC4F60ECD923B6F21FF8C9B 2AE3EB19CBB422FD027B4C8CC503F523E7B18DD1858D1DA08C9B0D0B9C9870D549436AE8 D21746C86310CB94923304496CB2112D91AFEA2776A9CC7CD79D381AB7E251B6B13E8DCC 36DB7BDAB3AD9D22C7A9F6CEEE7C130E3753C4AFC946839697EFFDBC4005EACCDFEFC029 9D259947810AFE57002A3FD3B9446977345BC5D5D53B6F9722C47DDA534BFF98C2433B0E EA965E20ABEA481A9C81C612ED51CCC35A74CDB473AD0A5D2E42950AC1F66DE6393BC9B7 B02B00441EF8CC421695854293874A7168496467FACB15062D50600824D18F65E3FB83DC C5273D5743A84DB5CF9D38AAB1478BC6CC1F849ECDDD397DC56D1B1BA395684520D68729 FF5132F4F7B48A17DD6FCC303871D6AA2F29CAEF2EF77E0C149829B9225746D43286D1D0 940E765628810673F32809AE451309BDBAE942726E9A2D57711683B3C4D39F6DC393A20F BF0A8F4F73E8A103B3D9B12572BA4B846A0A9EF3702546EB97A046264F067FDC72CCD091 E357B618687BE9E5C7E667914F44EECBF3DA82C9464380981288AB2F9B058DB262EF5BB3 0A4E0327AF77B82AAF49479A96A6CE7051D2277EEBF286FECA3B0CFB56E1A94B147620DF BB6207691D8E751D5E468B36BD64C8220F2883A5DA60346EED5616F924660658111CE6A1 0FE807C63FB67BECA2AC00D98C47B5F1CD6B9FCAA51848D97EAED90AFA582F925DB9DD91 F77B73CE5BCFC0A8B21C4A75862B345ECD68545A4ED15FD4A3235429019E3C922537DFF6 F0C2907B10D068D116EACC7E0C82EECD67C0A377E367500BAA0B47EE6444C4FA196C7DCB F1B080A2531A96E2A874DDD02793E72C1D259C3004474DFC91F2BA21554D2DBA3E4613D6 535691E6E4AC04940353EC25951DB2D4EB2FCE5D701249B835FFED7C78225A84A24D138F 631AB67295866BBBD000C1D5BD26B43EBBE4740716DA3D8293CE4E359792F7120811B32E 2B378B876D41E70631187CEF898EDE78C0A8986CA30889A8F53C2344384E3FEFFBE7AF07 171E031BFA6536E2E6719D934F74B39169E1D912790256B06BAD12CC3AE588B2B2DF1C7B ED6A3E99773C25BA78DAB1C8E902D65E4E55FA9005C4D80819AEB20723269B6C091AFEE9 29D46C11C198A7BB0D4260EC9464156F655EB1D460DB7C72D932CA927D39EF98F35EB6DA 7F8143A443DA3D0E909E6B846DC2DFBED888DB41F2C03D9C9B61F31B2E8334DB7205FA8E C2B94D71CCF61FDB51C66D8AF7A47417DEC7FFBD8A052779869E709F3B36BB74340E78D0 3BED0A4618738C9D2C3C447C0D50BAFD176208820D1F314E21615B7A4397883F8D59E65E 80A814CB6E8FBA91B0C410A8B7E37188C1849AA206A66162902591AA90F18E0426C586AE 80F63CD8764DAB7FE811172A87AEE833E935F5F56AED5062E2B35F6077EA26AD8DBB1011 745F36D936EE50A88144F211B37D8C169938EDBAF26E277DC7A921C0154317BB081A7537 F0FC37CD6EBDB6F97130CCE08B85690E173D7158367C616412A63D0B8ABAEB47B1BE35D3 23456EFCF7962953F630002DFEA23DF4672FEB5DA149B713FC91C94505596471E44D590C 54FC5D336DF319A98AA87DB9D313B9DB208DDAF46FD5469AF90F548E704DE24E3344B95D 6EED106864FAD4001FD8DE48DEB22C8AC3FAE18F7B176804DCE5AA2144A073FC9BFE4CAC CD6CA534902429E28CBEECFA8D984A71E77B5662A1AD114F301F548F192B11ED7EB56BB3 F8FE62001753FBF161D538878778501F917441F9C5DC3B39704BC1A234117157303EEB24 EF453A1E05208A07B8AB22DA331527E0871EE7D713917E86C80D2FEC3B934E5B7540C672 34D0FA0E4AEE6A5B1706F2F3AE147690A76815F5575A5C5B44682028A065FE8037E10526 5F282058D027620C117A57CACB77AE153E8517134168668E79017166CC435DD24831DE0F 65872D49DF581C872FBD74E0E2502B9C0C741322E9CA72152E7DA26D84696366D3DB5C56 943FE579F99CFE384EDEFEDFB30F7EF5ACFF5BB88327E5A63B796C7EA2461B21419592B3 65DABD1DB63F6AFE1B959CD018163A48D82D0D36284F118263E9D2B8FA2E3104BAE034E1 A1DEE263980EFDB385CD6D687D1092752D7E3A6C46D678BA2A2F3E208988AEF16EB2C67C 0C5DDFC85C6819746A034BE35F5C6DC967D64005E4104A7EC6C55CEE199CAD3F98D83A22 E9A32D0B0F4E7DDC4BF81D77914EC3C3DA3AAF51424CE3B50AB293152EF0EC717F16815C 4ACCEA27FFF69DAD5AC1DD549C6CB01F23F3C5A3DA340CD914849991C554202076C37DBC 7FD48DF9DF23F5DDDBCEFE0114A2877C31385A184742AF5AB3007908A359240E9DBB0AC9 501B7BAA815CC273D953E0D50802CAF8C00FCC054B10F0AB7C072C573FC4D3EF018754EA 32203E847125B73AD879F613804FFB9470CF39D0694155B3D5D500E3379A163C86CB1AD7 85C3AD12B724AA4F203C212FC0FB7051CD0EEFA161920E515FC83EBE802800D1C851E085 B069541D8E183032EE5FB6D8200376FF0FA5786796E7B33352601711A2323AB0F2CB64A9 B71C936643B259BB73CAD6D04B33201FD772599DC49B9611533D53630A3C91A6DA4E3CFF 519BB469F2C23613B0D445D98377E8EEE6218E0CF7333EB5C4257AE30DC6F8FD35C5978D 4071F0D9464C260223902E3C76703BB2E3B3FDD9ACB3F6E43C3BBEDDDAA846A4893A6E6D 6E8D5AF8FD12DFCBEF1B5D8F537AEE87AD8AB3B486910F0013FA6239528F698F61B6A2FC FA7CDF66B238222B989DD390A1647AFDB9AB7E287F5CD96B7E443C293B39C7C8A91A207D E7F0A73A48387C9955747277BCA7E97EC37EF0741EDC541F9804C12F95F3325F2E80CCCE 0CA03C931C7FFFB7419BB3B2A3A67325DAE74C4D597C41E922B09ED70F411F7E29486C5A 3D94A857CC69502C6DFBB6E63780DC3908B989F01116B28CD8BA096CD0B09B3EF4AC8E64 55FC7300CD8861EE2F1FEEFCC03D95FAE9DCA58000441A1D3419B77DA35E80CA40C0C49C E1DAA21511AF32DDCCF3935CF78808330C469C4F12481571303335C945937C0080E56DF3 ADAE10198495A9E04DA1AD8453A5C3B7D9E6E8A8F6F57BA249F0E9CCDFCD8D25C8E39BCE 2B158052D9112093EDB087E2DAAA0C835634BF21B6C767D7D622BFC669B78040109BD4E3 673468377348A6EF3D0E6D1D7BE8A07BEAE0D72CC158FFD8904003E7D928F7F9B78097AB A98804FF2BEEB62C695333EA76444009C03751DA71269219D0B30BE98C710803DC3C1159 2CF0B2D8317B13358B3D96F2B79F801E303417DC8FFA4C1B5B246C5167410518BF7B122F 072E1C356BB87B6BAA4B36609C3CBC4FF578ABCB0A9B4241AC991354B9BE34E831FBDDA1 D97665C37DD1AA4E2E2AF3D41D2E9561646C40D622883D790D6986C60A2E5B2D27D9370F 0F2E57DBCEBDB45A6244D1DDE4F64D30B94621B21EBDD2DD7F87E75E9BC4F47F1E94450F AB7D3A2687C66FE4495A05AD81E2C0AB09B4814422272290A024FC55819E7DDB08666BB6 FF9C9C4F1AB70697649197C550C48D221DD1BFFD20AD9B43F876F19CD818F3EBAD352B94 03A050E79CA2A369363033508882A1B63D0755B43E01BBDFE55E7F6C171E1A6BB37365F5 6241C6DF75D3E1B1364A655982D595C66A186310A5B2B3A4C99D39069337E0B7F3448D7E E8AB0C5EF3AD79CD8D9C86C1E54392437C1077573076513C0DACCE6D16A3ECCED9C438BC F7859B1ECB294B03260BA9D9890424DAA816587C4004FF0905C6026A04E130E3B59F1952 02270BCEFD5B7CF306389D3F255EC17C85C6C53D597E11DB5C1E0902508F22044441EEA9 A474CB66BC40D45A2E0DEF1C83FC4432E155567ED91D8A928D2986479F149E4AB3987D95 93B419964BFCA0E042CCF7807B125F29E22A488BDB19285FCAB04AC29A564D599075B2E5 B3CF0C6D53BCC23C1ED6A5206A6AE91E2F21AFDD4542D64A85F397B3CB0DC1F2A0C2AA87 5C38974242DFB90B4CA67259D610BC8691037931C69D18242CF469FADC88CDC85FDEB881 A431ADFD4071F3C856EE5BA0196D1A7F157887642EB50C8662ACF5BBD27C4038206FD907 8AB7146AF5B02FBC3B84E61DC936C2B79F204C8765D6F366CE1DE4FAA944852EA71AA25E BFD160E6286C927FC76EB19F4C5878B5D847FC5A941B8F2A1C7C38A0C310DDDB5D171E4D 0A1774ED965F237A5396E5A94F87367DB141DACB4448F67789C26DCE06FA01C92014ACD0 1209D727E37A5C64067B2DC0F91530D8AAF59DE0D750B2A18BE91D7A3362EB026C438FAB EB0AB75C8B2F4137D843BE8EF156CFA20563E291B34F19F97081D4E43F4A62DC72591D54 289D839CD857540EFA38AE1A02A13EEE35A0A4A3576FF6AD5598A76B3E83FB67F5062FDA 4A2DA616282CEFC090E154EBEE481B906CC206AC6A5A9AA442265E95CA379785B96E76DC D4095708AF8A65DC213E42581C59359F3B48EFE9F20AA85E04EBD4F8B4B8201607BC2CFF FC71D43AB06A3D82E766054F2A54734A38A714058C7573B847C8A3A82304638F2579F037 83B88E29709F5AED8F17F68BFED85C7589F5343D8A1B73935D693E70E49F67EBF2E85104 F1A384F7D6BB00AB4067F816CB11C71C625136E073E4C98486A5972DF70B5537693FF55C DA94FFF774F7C10120F4836B9E26941B8AD2E48B90D71ED129A48DB73DDC0E7CD569272F 33014FABEABE382BC029832CA1A7EEFBCBD24CB435B58703F1E9909FF7D30D37154F2D5A 29CFDBE1892DBAACC07E68544AD4A1E672DD620A5EA6F84B360D6B0C9D2A16600731892F 4BA194089DD0D829F7DDE7885C7FDB37B8DB601623B7B398070E617E2DB13AA6B7C7EDA1 352570A133F0DD267E23EF4885DDD4B6A2EFAD3B55741CE7B36475A878228A200A49202D 13A9EC655051C1EC4FB61E9D3C1029D21C4B943A64479F82B247759FE49DBCD64EAD1605 81159DDDF18584457D99949AF2F2EE4F2E3AED242C25919F51CB76A188867D5959D8AF10 FCCC2DD8D2EBD266B751EDF244BB8284A4705E1A4649A050348AE54A048E515F29469FDD B04A905C3B9C2B3744455C781BE4487DB56A085A9BDF8F8256FA4C1B37DFF3295F5418AE C03ADCB277B3157A1DA2D7176E12B334A49E7CB311D6BEE45459160E34B024E8B68A1768 E83A7B8D7E0D5167E4BC7EA55157A20C82EF009A2631CF53205E11B7D0E7675329822052 C2FD7C1FA61D269A90B94A4F103E6FB3EF6B1B0304ECF573EEBB1A432F7AC539EB7D40CD C2F67D1D3E87E6B66CC16B63E00EA442036DA83A7E3CC8F2946CA59FCC0C085D642DE6CF 7C8B642EE62B830ABCC7CDE13DEE8C11A4718ACE97C8D47BE41AF8DFB4A95D44EDD219FA 137541C53086519D6F32112A2507D37B2EB7D2FC10AE66CC5D5A2D6A4F8E6F084A95C923 CB40B8437D3D51231B50C72DC5FEC25ADEAED8D72EA6FE59859CD3512F36A0A46D55607A AA143A65CCA0203366C702554B905A093B2E845FD90002C689CFCFFF02586DBEBCB11688 7FF863EA45DD0EED511F4CAF921015383CA0391E393A44419B34E82789A62502C19B3287 DEF1F5B24C60F5677576902DCF76F00BC4D3A056875990D18BA69154154C76B2BAA38ACC 39C8C1D55892583B7C32CBE6411834223200F22B416709FCF635EA5016BC3CCAE42C68EF AA30B0EE474890D25C9EB745915FB60F517600C7F380582C7BDF4B34FADC9C60CB139D03 626F4DAC953F9446C02331E2804245F7AF2BABE7FD2636854AF0CC676792580B228AF541 6172AFF0C2FD5730C2D71C9FA3E17D36F9AA4120E180D025B710EB9F95AD8AE31B66D872 20F028D258A85409CDF37158F840C2F418A0470357AA99A825A9537D24BCEB415329EB6D 5D985445AB19B08ACFC1F58510119ED297B034334EEAEA319D0EF5F7DBE4836DF61041FE 071BCDF1644E9C2D924251049CEEB73548286CC1EA170F0895771CED237B33FA8EAF5571 E22C890F0B552D319EDE4A59928F14FFDD911F08C17E939FC035D7AEEFCD77AB4A2E7C4D 91B25D75F5C6CE9122C27E0E4A033417F389CF8796EE0F55794001AD285C9285436E983C 94ACA66A8C8027689688D0FA18DB23BEEF57C73CE751FC6ED14FB4D9601080258B7D4885 4CF3F9A8DC58E073B3D2961729AD90372490C0202095ABF65A8C95691D7A32DC000B6FB3 EFE315D903FF04A6B366788B5A5FADA322BDC00BFE337DFEF5EA0B899E36CC226DCE1B75 CC352F71064E7F05420E4C3D1102F55E082E04F1CDA182E5DFFB5EF1283E721CECC5978A A1EFACAB70A21438B380BE3A972AF19381FCDFCC60FF173ABA8BC049D0D9F22DBD722FED 1711CCDF75C710D083B0F3A56338A7708DEA014BA01943086306885854CBBFB8E372AD75 6A00B5CE723A2558D80EA8B34F987AF7828CC5457865D9299E3070077F8D04D94C569806 97CCB42D01ECF928629FDDC07CF668E87ED8313BDAA0D5FD84B0B416FA83998B1ABC0B03 A3E43B188B7D74287A1463CF2967C7FF64335B205A69E974789EF5741A6CA9A3B62FAE04 37B957A01ADC30C6C1CEBFAA7044161B9A094377D57E4E990FEA040EE9E37414D70376A3 66D16916752F4F51F45171892908A53A3F6EE0497A69CE4D4F4085B1BC10F65623456980 DDCE8C933CAC5C779D518720F5B8F511C8FE4C53E23103A12B2FA4DD02938ECA2AE76C58 000D38B2FA467C1E1A8A442F9EC4F02E0DABB0204F2AE527B6F7CC775DCD07DBD96C589A B912F727B9B81FCDEC5B3761842E845FDB6CF3840CF0F183F2ECFD28A92BB4F5CCE7DE8A ED8912F728E39646F57DDD2816BCB3BE81DBF41DB3D3837BDF55B60E083EEFCD1A012A38 846E025EC9AF4CA745679C60F88F01E3AEE7B65599AB02836F7A1F192466F5F729483DD8 7C2E1CC75A61F0D7171C85DB04073B9A319A2F2B76C632AF2ED220FD9D7A1F9010836070 E0D864D1D31180C1B6E35B6CA08D7261CC843915F15F802B3613E14218DC9EB7548A5680 C1A9E7A6AB73A75DB974B4359BC428F1CDD2BA5E7F4590DCD96F1C3BD35AAF8549463541 2A28027140D352FD0D9EFD97CCE7A86729432B246EDBC0A54EDDD6E67636A6F908BA5BD5 0A90F4F1365DEE1C1E8989C0AC6C4A64861096C1B1D3CFAE51DDDD96CC24C5C11275EC50 5F8DBCB44E345EBEEAD458D458A177542F5EE64FEEACA55A61AF8738E6BF38A6C9B211DC F7F2675EB86CF3711C97FF23FB5F5FEB1867467158BC75F7BF7414BA151937085005B8DA A6D82F31DCA1007E8D3D317D13BDE2428072D2A3A2743EBD214348B15EC3504426FDF73E 3588BD1789A8FB8BCC1E1A021BF64D274EF0C9FAC95EB50E2D7A1768E82BDB5A4239DD1D 9DD8E1775D3BD4CC4C07523E74FA545D5D650E9BC87B80E41EAAAD235833D1CF3B6B9411 4EC21687773049E082646C8F29641D858D9890B41FE8C54649F840A0B81166130722EFFC A6446C5509D988E0B4A9AE8E8765E1DFEF579A6D658C4781BA3B3DACB899F0AC467B9C14 C66C8930E9A8558C8A19AFD95FFF4A3DADD1DDF80245C2F5F91D23B39CAAF4D2BB1216F6 4490CBDD7FEFED8406D62DDA4A4B0F0FD80487C9752A0948F74930FD47AAD59FFB8B5540 DE795994B0B6F209699D1DBFE7B7A94DF25522C7BF57C77EE9530784756D2FD8D058B9F3 BEE20B4BCD63C950F9A4A01F66680608D66AA87E2FE5FBCC265505325711299F6E8F54FD 1686C4B532C504753EA7BA292A91A0FEB9E5BD690F1FC1D1B16D3B9870CB2CD14F7454A0 8F365FA3FF1F0A8A33F9476A7053BF19ADB66EE28825530115BF79F60AE108B28822EC6F 313C14E43C02FE8871307F481D8B00F0E7C847A3F239723F4003226EE84B31A72F19BE81 CB986F92710E37B1F6F263403CBB97392DDC7550F03A1ED56165B3082314995D75A4588A C4E503C6BFF1E642802E0C3F1058B45E370D3DEEC937533E1CCAB26BEA94E9F89F6C5DE7 6701DA7753CD1FFE77A42B11765EC6F80520EE01878ACB37096CB9C091387AB3BD68205D 1CA6E5BDFFABB2550E6B942F65FA977D55A459DDBFE4E17581CC19FC3B589F976EC22F91 8E95546F8A447EA621DC289B7B7D67CC9C246322B221E6EFF507C2DBD4A93E41C2F7AD94 4BBBB57372F85E601FFB6984CA66A5B7E98650E84F498AF13C4B0EEB0038953B5A33DEA6 9CAD47277A632B26BE464E87951E89B8E0C051BC34220EC245E6E31383B22980AC124D84 3662E9A1C8663100520AEE44DA661F4307BE10122C14D706993A586C7400BA3C74F020B2 047CCBE55A6DCCA5AD37AACF9ADC82A59060518FA39649A726CF23543CE91A1A1070FCFF CA48C8C6A9B02CC28479D8F58040984250C0AA0F581DFC8A5F978EC3DEAD276FBF7722C0 2C3E41D993368CC019110A5ABD10C1ACD5A5705160AF288A60BA2AFD20D22099265BD254 28EDA9461AC8193680AD019787902636FF81AF8C0CFE7BF8C064850BAE2E652CAB330EAF 13508DC67B881361C4F29B45D9885BC4CE554493AB16F995A98D40B7DB137953488710E2 03295B129EB42BE45B089F8F40D505380EC2EC7C1DDCA1940DB8678A1CA0232F3140FDC9 C00FC77392237C66F9A0A8B88A7D7D7162F72A1319BB22E8DDF62DDE64C9796FEB38C360 D00F5C94FB772344423AECC5B4491B100A2A93D716B57B5B44083101335682DC6BCAC0DC B500EF88D04F4F955A1214F56508DFCE4299A8B5DDE9A997E431A55B0E8DB6CA1C332502 200C5C5899731AF052BC28D2980C00DB0DAEA4CA5EAF199A5DBD0BF794AC18CBACC20981 96FD0AC31CEB455C61991445EBE8AC899B9AE530847D5DF608D011437B2FB24E4A1C45F8 05FE4FF8D4109B5394447D7C9FAE9F57EB904B7D6635C77377D84D628F0BB1898FD9DEB9 3E82CC2ACF52553E9ADDEB1E275280C62E4E8AC9722C5E1CB54DE4C4DCCCE6166F7F70C1 50747CE19775F12C19E4A81599CB9C57918A42BB0E9AA638429B13B606EFA7EE2FBD7632 0275BA3CCEB743B7101BCDDB2CE5EDF843E8944E4D87E1BBEF47C9D5611E1805CA0F2850 CF8A205D53F054DD143C3C90D9605C3B7AF045C553A6332D791209DE72E02C146312B25A 9A5F4AFDBCD83EB67685ACF487664FCF0CA5C455F5848E18A5ABCC174F55984E368335D7 BC77BE4E2923147A111FC8CC57CBFD5BD87D09867347F01E11DA0780E4FDE4DDA54833CB 10ED212340A0180CDC5924F675AC6DAE629555524297FD133BBACC4F51BA326AB7D07DCE 2093D6DC8E6126DEDE9ECBA129DF931399C72CE690C0B119B117A14E3AFC18094DEF65C8 4DE9705255D3D411BDC6958D872CBAB28C9586DA888066A2A00B05FB21B5DFE2B9B4C87A A0C4D7B91EFC7E8076DC5817C35652903605B78FEBFF1B4783A170D8060FC151CE533755 7B8B3B1EE083114F977201446CB8A5BFB5DDF0852365330CD5C82CFA9BB2DFA6BABDF675 45586F4D28605BCCCD80BA8B59B501C629D6E6BD5D676665462D5DB2784C5D6D8A42B406 11700F3A27FD143BC1EFD859F7705C795EEEA9FFE57E25AECCC5C7E270833AA9604C6248 612C356B6D9937E3B770F3B4FD632A0D8778C5EE2CE62C4E780AF5CFAC1C7C564637044C 0C8C90B9BD886F9BDC287FA97D4B4F4E4E8D7816BB25DD740D8C9307B94DFC8E8E91F41A 189E20E2B438AFC4F42607744E8BF74F3106312D7480A71840D4994ECB0A7A088784AA68 84BF4DA162D5C38A4EC6354D19F06313DF2D4167B57BD2E5F544490D711E4B97F8D5B68B F4098D8C9F2D8B8256EA8CCE05D189DEF0E86938052C44D7DA68445A6AEB7AEFD865BC96 592DD991DB7FF294AC7DD8241E23DE5C908046179B44B9E8A79472154E254D44BD9FFF4A 435B05DEB14C08377D2ABCB8A26F706A366335F2DBFBF5D59B9DA9C67CB396A17A40C874 C28E4AB5E242B6AE244EF37D90C8699BF1F2D5F8CD1D3130C0CA72B7040991FA90B3C413 699CEFA97113609A486483E2A72DDF26953094C4E2970A243DE23963F929C3CED76AB062 8072F5AF6EE3F950DCF88F57F33CABA2C8E4598D4FA6AF46656512E180DEA02FE3BC8701 C4EFD669BDB52129FEC53E6FC55499680208E6A874BE255EC21B8C75A9D0D8A2622A4CFA 7E6BB9E8986AD3EE513F341C595AB2A14784466170C4D6DC2E9BAC82B988CA2609FF4B01 185CC5A2B639A028E4A378503F55C147E6F8B30CFE5380A7A07981C15BE3C7120257C67B 4B603314DC2B65A2E4036151713B934F460FBC1B052417B907F70FA06E2219F310E34443 A17AD4524ADCD140341BF982EE4D8DE7D969AC5621129C600231B16E97B62B6F618CBBCB 638020E75A77DBE28CB0EC9E4221F5D573DEE815512CEBEA629E6761617E69BA730B1EE6 14C96D5758E519783F0862FB4F5C10D444882A344972A91E12051B2B29DFEF503D8762AD 895871D7CD4CC8BE62E1315831FC25712EA1C4DAFE49CA332CCDB5AC2C2D67F6594D592D 221B7DE7E93261E9D34179DE194AB2F4F4DA9DF9EE3EFAFEA6F1193940AED5655FEFCEE9 E38DB186C5B5DAC4B0AA13A89EA5E81303A681133ED154B164E3A1D416DF8623A38213E8 049B876C7C22F625A57248C0B61E4DE518F982E11672AF1765984203B7B7A17C2CD7C7A3 847B6FCE423541C14C6712572DBE3BB99D1144021286B4E3939560998BC16A6CB47F9905 BD48B9E25D1B548F6AED304BAD2823E364DAC055423B76800ECDA7C554211DB47BD28200 79FE362F799925A8BEC4B4770574290D0654CEC588933BE1845BE51FDA15760DAB3257C2 67E89BA950E833DDF7D7FC37F54AFE1954B006E3C758ED7BF3B28217EF77FFE36196D8A0 A81157CA87889D7239BCC205459C3A11B808545C8A256F97F3B7369EDD1CF5D916E71B0A 77BBC006A71865EB15837635FFAED75D3172D91BF820230392B102D1C6AE05F36AD0236C 90133DEAF1B0F7658B6121D1F2F293DBCC6524C89A3554827D44601BFAB910BB7C908B8A 7EB7E84221ADDE214CDEB6B74765F2E8148F013F4D6CFEC4C7BB344D82B176D665A98424 CC385736C4E1D81808ED22869C8132E5EFBFCCDFD1DEF732C3604BB683E4728EB60386E4 D03D08E76B36DB7D39F07F505FC13A336B7AFF4D9587D1EFA16105FFFEEEB8BC2406766A D3742312A7DA69A7B666A178BE43DE659D46CFB1A0309EBEF7B886EA3B3B554EB7225644 EEDCADBBA3978EA1EB59B35EEE61BF1396A61922DC59487016F66561EFCEA19F30295719 156A8C9099F0C07B5C076DCEA85C4924ADB96095AF46C1F9BA08BFAD5A4DC49E95CAB635 CF1DFAE9A1FDB81E27609EEBE67A9636AF703415EFBF5EF0EAF7C10B1B04F139E60FE96A 6BB3104555EF08139F1641575A227E86F0DF716C829AEB4BC5CA32128AE75286C6CE0147 F4D6873FF3B94A6CA54F701B9494B380D65E691F988CF7C6D74BF67A42F169FE5AF96CDA 656683349FBD542386DB635D09CC032C6BD486D08ABCD17A69C7FBDB61378024D2866932 47E834F7BE079A875D8243E46E1533BCD01EAD3BB390A727226935F1BB5A9A1C395C92FB 679D980E6E67EECF4DEB74D75C164D53DAA8AA3955A91C29F28AECFC65BA8D7572374DE4 F35056460B36941E7E0BAB36B8C28E081A29D92526D2F19BE960DB6CB355003BEB9B3054 2A56413F77FCFA28B73258A8F4D473C04F8876C2B32901F62FDCF97261B3CF09D0BD6087 ADD051543706CDFEF061C5F909E6BACFB2DCA11F38DA994E7BE7373AC2877648A0628662 00AEE5E012297FFFCF714986436209EAFF78C09FBD9C54160A4D4C0629FE3F85CE065438 8A996B462D6F520EFEDF8EA2578FBD42753A2882BB3FFFE6F65A89D0A74E27F306BBED76 1F35A13A1DBE04D998F5CD63054D98D5A209E82637FB48929F7C70C154F66B6E40DB0F74 18C103D628A4BEB3BD0455D886D752D58009ACB9D52EEF4F119F22CE23AABF40C558BA77 5363C68AEFA720A3B14576B1EFD95405666BDB2966B36C206DF8DC7C2797412602A7603E C13F0F2FE5747134C666FC26974D7FE913158CBEDA9AD94535099E136A43B962A93F881D 880E205772643F2B60C8BCEC7E4612BF86F9C0FA3A2F13191C1A6C3D50B35D6E07F8ED98 1B6D2F8DE15FD9709A8E541A0276CCA6542FF3B921CF5A5EB6FA0AFD68A952114C9A3F8E 3B3FF6CFB9EAAB6DBBC62F38461824B3D0831C5E560C6459E6453B629B95F9D2CD117AD6 E038075BE1D25A833FCB17D3FF657B483AB6CB82FE2AF17EC4AF1FDCC3FD6942A0425826 3DE038F6D17E3F79404D44819424A2A4C559D44241D5F577FD60A00990FC2D14C271DBA2 177747C6DE94CBC7C9C72D0459752D7E9680CE0181DBB43180AF135BCEE65DEBE77C1687 078AB912E9183A60EE6229F6B9ADBA395A5559739C3E29C8B0EB221A036BA888FABE661B F4D4EE0B4B6D62C5A6C96EF3C57A8B104E14B9DF763CC16B81729D771B557C4CD2191384 0B40201E52A80869810ACF32FF93C005CD90B15F8628832CC689542A4D4DE58B55B050B8 3E246BF54510B53218A2C556758FCC89C07E5E7D892AB0B9264529368EF16CC4BD6348B9 57F2D5AAA98E0F999D4D400E77CBE175D35F004A19AB64F00169769EFE8E7D287A7C024C A1A0D3F915EFBB25CF9604BBDECDA184C0D81EEB197FFC04B2190687D6086DC57FC08F7F 2DA512C57A3B9CE44115F9A6A7434E203CAB798A8ED7A68D9DEC0919B0B7B334337B652C 34F200CA9C679806B47152B2325AA1D1275B62F78B8610CE4D37F7F7DDD281AE294B7DAB 508AFE5492C4A497DF7D37837D43ED2A3D91C04ABCA7B0F7414A451ED560D20B0164DB0F 227CC753A9CD526F8C57468912A3780F3E9A6D626405FB486F6945AED27C48661FE726AF EDF3D69BC7ACF0CC657CFFD5347869D16AC4C6ED41F643C9BC981425125B563065DD7963 22413E1EBADDAA6993AA9629CF048863BB3AAE34B44308D27C48B6F4F9E8E1CE6C471466 678EE304328CCD8EF1DE777AE28EA758360EE7BE768332794871E18009B99351710E22F1 83146E57B21C72EB728B83C9BC618904CC0094FDB26814C8667AFA12D26076575D26106B 1407B08EBAB89EEEE0CAF34616054550D610DB759C168E26C08557822B995606459FE74F 1D085225CF359A8092A9175FB03ECA2812D7467622F4F0132EB4B1DC6C40CC969842000C 3DDEDCDCFA0E8CA62B214E34F1051F468224AA8D0867170019FE82F745DB85ACE622A175 E50A3A371D5580313E08E2BE5A6262A83CF8B6DF0A02F258F81C636D02F381AB20166A5C AD53633533D61E534CFAB2899BFAC061ED7734EF53E7652C6D56186FC27D54991C8411CD D2E9D048910765AF119118607413B556016B075BB4245947B9ECB4DE17C38172AF945904 92630EF8789A3B7D973C9152A4EAA90AE6C984622AAC31DD7952553DB1289CD44C16A3F6 7FCF7BB135F885F083A539D05DD1128322FBA172737E00842BD674AE3AD8CB68D95004F7 0EB5E23E04182E56D4E9355FEF193B4606D4C3D6B9275521AC4EE52E7148DE5196E7F84E A8E19C639D8D20F70EA1D413CE48295B47880A8535F8E0A626E913543AD381A8259FC5FA 593DBE84701260503BFDF27E719A99635B710F44EB5382AC3E6444E6B7C6D5931AD45866 08F06FD25CFFC918DFB136AE01275EEA017BFD989D0236E7297EAE998B198FD2DCA030A3 B851EF96074946664C4C12A680DF7A412475EF3E641DE2644A11F9FECF59332241712B76 4E6F32AA42AB853E51078416EAE47704A0063CDE2E539A46DC16516C1E4680A8B1785BF6 CFA86A558F74164390C3D35DB0CB7659910B6709393EBF9397920D1CA964859983FB49BF 7DF5472D866E654ED33A10B1726A5F3DA71B93CF1A21AD65ED51DEBE5625236470C49485 AA53F0271E41C2A20553C67DC3388EB8C51EBF88E533B014FB9CCECD1CE071FEB8353D85 E89DEDC7AC71C3873601B71CCC7BA3B5988DED9FF85CD350ED374EB8BBF2813854EACAE8 3460EC71E78B7EFF1EDC8EB3E7AF2764C63760B38F6015B5299A1B1969251CF1E80B8E50 4EC30439ABD13E9FE242520E37F523A1CE4008A75E490C2D5283F66FF5CEF6A97FE86B78 4551D1B4BA916A12CD2BF1434FC74F43342297E4E6BC9E0A0C9F54ED31CDF86C93847E27 B3C4DF7815D96E6DC9E88DF85BB7956FEC3DE7E867765E6986DCF54BE77F07AC3E36F27D C4C0BCAE8CF485A549534819543CBBF33C6DC3B04766DBC4DBEEE029DF6D7AF91D1170E6 1F7968397BBFA987A4C4BC74CE816AAC3646A02C8E216BF2CED3FBE06C98AD6C5168A570 98AFDC8F3D4C59616DBA4D3DD61E7774F6583644B27E85A670EA442C9D575265A892A87D 07583509186E84C57EC343221FCB436F363AF502CB6CE631EC7711DBB3C37FCAD34D110E B82FF2F7209B3F68EBCA22D918D3FE424215139DC75CA266904FD5F6D40269D39517051D 5B077D26B22F5D3F07CEB35444782EAC7DD819A401590F38571C148EBEA2E682E472DBFA 43103B2183117A9002D04D419A7DB18BE5365FE9F8E2F8498035A992ACC07EE86E1A2AAE 1258DC4B4C6F8D0D930B31FD0EEA876D0D726C7328DC4D5C76B6BEEE6190EB3B650F88D6 45BC3FB7822F2DB69C2174C93E39A70320B47816BA3E8EA313BBF34C3EE729112A0C9254 1D09C9BFDB31F939E8D03E31BD3263500F7B92E6072E1A418F7A70112C7C3609799A7203 3A1809AAA623C58E93213D12DD3A8C37F3E156A7435A42D3AA20E62DC8D4D69BC694DB70 533729E878603C0CFFEE8D5A4C1A7F29EB6E07799846CC096A8257643A9F85D5CC913E03 E72C1030636E078D42761C2C3F0E1E84C205B4D8A3D17F63BE4D70ADC45F2DDF2B5121AA A4AB3D909D1FE0179CF72BDEA0250B110CB4F74648535A1E9BE45A8844EB110F60C490AC BAA48F32526582B619AF1DCEEA109B7DCCE048996547BE21D4DF519608B5ABDA68ABCDE7 AADC339F5626E64C93110B21C112E12B5E75F15A8FF5B0DCDFE85A1E2F0968E721C242E0 4B9543CE6D394F8D00B20A007EDA10672C511445DCD8470ED2413862E6809C15A2E9205D E522936138B66C44D5BB9B20C908A6CC8D6F6DEDF3568E5EC6672107A24032130CB5D5CC B8849075CC87FF04B7D8D5370E0294C87D20283B1E6D54679D4E73CBD1D7BE72B992E0C7 0686C5BC456FC44BD468B6B1BB22D7DACC0FF36C94AC831D391CB9FCADE8F469A5F89414 B22001501F06BA70414A074A4B7A6A0F2AA2AEA1DAE282C549ED6F656394D187E68940DD EEAFD5414238578E2A5757134DA9B6730BEDDF727773B2EC1A17E4DEEEA30482475C93BC 484083883EAC5E0D7AA0DAC552FC82F99D6522FEFD818F8023B1F945FB86AB96713B3041 03F2B5E3913A5D769D5033B2B23D69BB7F21E34B0E808A750A89885CDB2B65B490F7EE6F DD0A636187F0271C9DA27274A01D4380A02BDECD5D7A5A1AE228C22532838CCA3750A8FF 48D831F27F3712E85B956F03F534D2A478F8F819EDE0071BF9132F78DC0F5B7D578FC0DA B3BA0CAC5FD186610C32FF89D130E0AB9E9E2980D9069D4AF6EA32E2ABFFE99B09BF4FF6 588E56A2A87DB9313742A901826BFD2C80526CA519010BC7290C8B3A9F47B917343D0698 E17565724A7DB1207EBC6B16B449D9E8B67F7CF227AF62815C71E553F644B89ACC4B9EE3 A8CB7073905DE06FB65E44E0A762AA5D3A109B5A9092658CFD43E64F634BC8C16945DE3C 267546354C88EA3C459AF00C4DA9214692BDA482D65130CB6ACAAA37CFAF3CB336090A42 E7C67D0961B02F1B2C167726893D18FA3092EA8B2CD553480FCCBCE14BE635D0399225A5 F65F995B463D640A43FBFD8892A6DD3E0B284455EACD55F2F973023DB12EC59EFAADE85F 55139137DD595514800B235421CCAC9B0CEF4701977406565B494E6AA763FDE3127B2695 6F0E38CEE9988649FDC62BB0C46DA3D253ED787F2997F0285CF008F7E34586E304AC3AA4 87316B18797A189483105B0B4F9C96BC191A337667B58678C725BCCC51A5DE3FC6564C2D 35432A453B0E92F550EE81A89AE84B79C3A0E22E6A23D0F2C263660AEE964EA461A40BE5 8D2B1CEC1CD8342B764DF2A9901F20B0A7B44E5EAB40D3F0A0601794E5B42ECB812AE487 4B96EFF33C2BA5801A2511B074F335AF4A530880F73F7A4344D22B2A9AAEC85B1D26C878 201247E53901F4C41CEE45555EEBB174270919C0448DAC16160EB7AE2B09E96ABD9C09AE B7A95C4B5226D8F3125DD27E6CF0CF6E2A0D5CD6BFB414ABBC6C4A382E5B7F34BF4BBFAB 013F885C4F224147075FDAACA41AF49F4D9034C22B0B9483DE0B075E641B5B3ABDAD073B 0374B79BF3A07FCD45C148C8374401B57421B9B57CCAA25D4C8CC7C9EC5BFAD5879CCC93 665C1BE2826EBB24893C36F75F9617BE4A54E01FC7A2F52DC845C95AAB9505EE18E370CC B5F6DFDD80DCDA36A05051C3478022A57E91F4A078F5B486F88C17763C285A2CDB6615BD 62544FBAC5F75939A9153D31ED2CB79ACA1FF6F2483EA35AA9CA0582C2F2DE156E8BEEB7 EF12CF7453475E7460A3E92DC95BF6189CE2144B23D4FE778E29AD6120B5B93F441D6FFC 0310F8F22E39393A21F342A59688B6C11A66A3AF852AAA03C46A932587AA5D3685A3F4DF B1B857FB12619686F7FC6C2430B9C24F1311DDBBCFC8FC294D84EF5E99FF22EF6BB4B2D2 20B301EB713FA8C76EC566A253A5A7DD2323D70FF5B48F2CA57A9D3F94C737326D2CBBD2 2D7FEE0100D039D28474A64372EEC52C616F800C2CC1B53BA93A18E153CB91E089EF0F12 318E3A844F017EF68C496477D1EFBED61D215ABE6467563A625FC0563E2A113B6A58C7CA 75ABA028750E3444F6B19DBD850DA52880F3D8B765A8E9310A1F22502BF2ACD7A3E40191 3A1D8B7B79BA0CD8D85225CC31474CBAF4479834FF184475C7FB6EACCDD0D5F1733FC56B BFFEA34E08A0B7EC795FBCFD8149E900F00B6E207B6E9464880A5344C309FD2BBBC58D32 68EF30C36BB5A5C892013E8832BA813AFE822D11B3E3ACFD02CA56421671DA938398F57D 11FD157449D3E423DB6A0A4EBCE845936F542BEB5B31406A6B5C8842783A5E19A6E8FDC7 94D322239F4866F9EFD89CD88D9FF11C167AA63A9B6707DB1356D757C80623F10B31C661 FE9D9F118208851FB3DDB8B0DD1937005B15D900B8B854C4571F3A9C1D0D67909E1AA591 A59B2A45B5D8F481EF7B5DD6D4E6C8CD5FBA9C812F8BEB1C2A6E4BF8F51D7A507D6B6E18 1991B5D4955FE3210612526CF495CDF2C3CD39A26F4BF6D98DD43C4D407D261C603B837F E8E09B15F403D721FA990224D46FEA9D7931D4CAFE3181F21B3B47A1D3910913C3110A1A 45EE125EE773556E17EB3BC516E336B2C7733D8FE30FB7C22626BF7D94EDF00FD945EC44 0D4570B85180A90BC46B280069BBF5B69A3DCEF13EF0F159B07FD5DE0289EAC807EFD6F8 30A20CFE8DEF807947EC1442EDBC9C32701A9CE873748F33ABE5BBA35A85453DFAFC4CBA 2F01ADE4DECE86290C4DCDFD676DA97B69BAC7A8BD920C4345DDEC907CA183FBDDD2638E D5432F9188CEA76B10E40260C4A8B559FBC422C41143432EC319E1727E8989EEF94B85A1 8FE398A4928F6554DA075ECAF0A5B9305580853E010CB59142F847621234B4B7DAC52D86 151E920633C2951731D4534A174CA7685E8F617EBA01DC1C756F91F8456DE200DD557AA6 830A506DF674D90871943F822ABAC2867414D3B9D8D410E8BE29C00C7FBFA5B03858146B DEEB557A662A30F1C858376DFADD19125C60CF5A73C1B4B0BA6B6218F1BAE096C21F004D 8716DBEC943156F291C61FA23F1FC37C20CA2CA6CD42A3A1223CC0DA7ECCC0D4C2604EF5 796F53C1749E6B5E2E22F52A2BA077D324253BFAD6563AC2F6126B3F94E160D579BD0DE3 8806C554406E63CC803A83D29E0DDE72B999D345E655899DD0E9873CA47C216C902A7443 3F54D6D8BB3A716DFA65239FA2AF27DE88A97E521119041FC89312C4B23AC10861590A65 871B7F0731BF11E3712182E7FD8AC4C94C366E93BE90243B0F5C29201E418CDF3DCD649F 0D9A0C1696B0EDCB31616DB976F4761FD47AFC1872CAE6802FB506DD67737DCC10A658C1 DA0CD9A920A96E5CECB844A302FF0C312C5D7A8801203EFDED0049FF37E9887132A484C4 1D332E72A6FCE3C3D48705D86F4187910AEAD72CED404526CDCE1B8A34C91FFE62BCC410 64663903D557C5CEE087600C09E32C8EB537EA43F56C62E78DA50FD5F598C0FEC55BD912 BADFA2F5DD75523FB189146F92B31FDF6BCDD1119867C6480B258FB96A916092301679EA E82FE1D96EE14E382B00484A2F983FA5272B2B86280917EA80DA0449286CE2042B893755 EC15ADDD93C432CD6989F9B6B8DE2A83A94F2B5FF22CC849DAB24A224DEA14A11BD68F10 06FA67E62E6507B027F21A940F7E63A09BC9BC5299143AEA8B008665C9EB1F584D7070B2 FD5B5E0C10FDE0AE740FC6C5FFBC1693FF4D2285D87392FEAC408409016980AAC25D93BA 3C3F5E1F432706E6122FE76519F584F96A552D58855495FE5F0F4919DF8285C668416523 DA7F2703095BFB3621FE24F6F2C97C073FC5AED60F7A32CDDF72327A1A0D32D58BB98F97 01FF1F6CE4ACB58F44090E39269DA552D9E242806BBBEE9B65A619728E863896C26AE155 6CE6915DC42ADB2E3A386FC4CBE64EF8CDD835A84783991F9274DF20FB6B1FEC860E54AD 44F85774FD50E3B7817173C23DD46003BCE91605B7F861666F0774489635F4611060EA85 8D66ADAA95B2BB066285F485B6CFC8FD3754B01CA01266D27BFD2712F4DECF25AB7FEDB2 A4455070BB51804379A3D4D184E89B1D1BF94F870800CADAA95FB57B1227F0B691D253D4 A85EFB1D8D182049259115AD8272544FBD0CD49E7A9F551E22F027272C60A1367CEA64CE 49A07AA8183B4B471D83072DF31DBD739B6F64158165F8941084E880C8CC46F06F3AC420 B70E97D8A8B3DE6478633FBD016C258DDD12DE9062988CB9CEC82E21D9960971AFBFE9C8 B2DB92E3F848653BF165A78118962E8DBE219E4FDCD68BA661541B0220B2AA0CAD74284C 8F28AC3E19638A0EB29903E703FC1145A0E9D33584455E5D1FA7BD6A733F8D8AA9AFF447 583B0176258139CA3757A4FEA374425E9BE34B4683B392B6E334951FDF4E6047077B7011 39F27A73FD2B4B115D8D408EA5E14636470794941040894AB66F19EFCFE812AB289C3315 2EB58271E458B257F63715B3C05B454AAA50290F32AD47F089DABB1C480D92D69FF08211 7C867A731F50E3EC9DA99D966AE570F584494A3A55EFA002D97D3A0EAD08DAD1494E57FD 61EF7BA94C4D0C3E85732A07994726452A69DB3C27DFAFEA6BD6A2D192264E6B4B846A30 A6BB1625381511EE16BE4CD4D5C7CE332A8524AD748DE4ACC5E08F3167E99F63B785964D B5871FCE8BB244F5DA0C7F00C5D198B13904D2B57A8399420AC2DF333B638F2A29B2E261 D447F2AD9EA4F11128EDD65C6524A6B53412A7E92B1F3D7B4F7338A1CEB909357ADB0819 57C48AD11E96AF967A60638E91B6FEEB4AD90C33F98AD1EA2B51F302B51D6D1ED82DBE81 3DA68ECE9BD145FA28B7B6A5D6A9F7141439DFDA0E2D59530751F16B010326B54FCEEAEE 2E5644C6F693FECC5AFB1F64CCA65DE08A89584B90D0B6B5C5F4CF75F2C2B1CFD0D32B2B F7101CE6BAEE7D0E845E975D44FDB3297D0944B9268E367A2608BF4BABFE4142B692CD16 73AC17BBFB416A37580302558CAC6F7549CD60B75C9B5960A86E050612E9EE6DEAF19EE2 6219E9C5D28AA076B3FA2504C1523269F093A0E00268E765CEF7DA0DF01AA3DAA12926B1 A89D9BB8ABEA16CA2D2867790C7553E1E87F8CDA07810A4D94AEFFBC15FBF4D543BE0967 B11D2FBD221D5BDDAF28718E4042000F5FBC07CD343FC7E6D9A94B8F6E9EB3B02D5BC584 9AFA37ED5AEFAD28217ED06986DB0F51D4632CC5D1E2A49B950C3666815FB44BD4059294 7401269A17539E88901FCE325629E59AD0CC15D6C3FF32D2497DC7A9797582D88C7F03CC F2F230692DD463F4A471540737E6995FC32200E7BDAE53AC1465188312C2FB7B52ED98F9 FE530B8F1CF8A6675FB9E603F58BE9CAC46585B6D305D888822806BC5FF084210489FB79 2E511A939E01E69AD152624777EE98EA396DEC7D2C633290FBA60BBC153D9A0C1DC5A269 740EF5CF4B2879A839932E1C8850D1EF95E8B5A0D719351EFC71D7AEEF92EF29D3C41D90 86DDA4AAA9735908CFEB590E365B69B2D2FEF8193FB2CB24113859F3BD2E99F01F2B1B4E 080300193B5AB6F7711522EEC833D74A13F8686A6E585E7B6315FA28EA544B4EAE4EF62B 88B781FED5741046AC84484CDD1B670017F0D0D2F19D3EF24E984B14CD052E3B38553850 6307817BA3938801B9E1D137447D979B5148AC1B822D49059EEB945AEC4DC1EBEC2FF6CD DFB19A0370A02F9CAA30B6725A6CDCBCA72242B805E6559BFD292668FB5ECE523F0F44E0 E75D483645B6988AFB0D5E8EC5688CB56B69A7B6A7F160ECC40894BAE45AD555571CC25B A86E81C5931DC238346DACF3EA05C078D309693F1E812BA249D84F6AD605D073B22AC83A F2749BF32A32C9115AC414D58A78D96A0F480C706266244B6A668486F54A16973E7A83B6 36EB03E66507A277958C19D9AD4DE66BEE89B7463731F724DF5650CBE74EC300665131C4 01BCC4D03891C6ABB61FADEDD7C83D56F35BAD5D731E0B3EA4F9C9A07FE5D3DCE21B5BAA 1C8E79B19E38CD61EB802B2C2F467D1A8129D45788B85C9F7B53232501ABC0768CF3830C 308A87783868ACC346DD0141702B517E5C07B5E29B238E55549F98EC3BBDB67EEC173ACB 0DD4B3550D958C7E777D39F9C21CAA5B51404C28DE12061DCA1CD427089D2AD99D23DF19 B0729235CA955CBC5E4077A0FFBF3BB64ACF02204B706733BE9CB2EFBFDF21F62E4E7ED9 34A78E626472A53747557AE2C209324D1F8278E31FF96305F0BB41DB5B165AED08AD9312 F1FBF368E09C4A4004649E40D578DECB4A1F82EF4EAF76BD8CDA9C4C61EB1E187E7E319E 03EFEF18E4969C5DCAB53D8CF41AF5D4DB3D9CCBE23D1A126CB60B1864DEF1B702995622 9BDFF2387711F1F06B807841406515B774B970666855333607B4DBEB4B670F6A452AD43D FA2F83DF711AAEFD9FD74A307335AE574B4097AF88C2B4C928BDBF40F822BA98F7F8CBE6 26DB9AF8DB0B6A309680C026E9FCAC9A541974056EEA1A0F9F71AF08237DC5FA78D8C38E 5E057DD2812E4591CA207000DD62CFF38CB97C8049B8CFDF0CE6BA900CCC85E02C758C1C 27B00DBC3FDDDE584457C872ED79218368C8D8F36079045A6B9AD62AAD7A53E2ABF1AA60 4AB15BEEF2736FC7AABED55B17B8E665B58D03CC42F70EEA4AF5F1D82B4EA91ED721C498 DE4DBFF06C3E58E0350BF931D27189680C68C68D73555F02B76F1A786B4FEAD6D6FF846E 370790C8529BEFE512A8AE178689A55C747FB7603D3F9A4BFC36FE91CF212CCC569CB895 7680FD2D466A1C057C0022B4972841AE7746C47813AA324519B461AAACCAE87134DAA64F 093742B7B3B691274EA2148071E77E636AE14ECD0CC3C9CC7C18ADB23954FBE043DB23E4 DA069CDD55E908173D71582A774B57793F5228274CA43C4EC01FE31CE14699656A9EB6AD 9468D7CA25467349B9F56CF2873A09467107F6B9C20147D2095B7294FCBB671EDF0B804D 76F6E1AA7CE9D7CF60CDF7F85AD1C410422A779B908F3E6F6C8571B6FC4F7F012FB99FEB 4292E9F354A3E9DAB81E22D4C75DA3BE9C8868BF2395D815D097010EF8A6A58CC91A6FBA C59344E785465D4B91F7633D1718D16852CE793825CC4B422EC90C3216999A55400FE0F7 CDC38A0F6360802991885FEB799FFDB3C1C87C0127CA781A22BFB9AA8A6D6E414DD2C31C CA6304577E4D617A5388657632349D4F49D1582152E43683200FC465146137FF942F1888 44975B7A2E508083B0261E8EACC54747310FFA32C00A0DF9B59F77A360349E259D9DB841 47ED76941E8C8C6F053116A004C3998B7C84D94B60044480D048AB31F355B8F6768C189B E4A024183988E8C3717BE19D29B4BAA4A94A3624C0DC4F8A7A99121DCC71EA32D2B8D6E3 B4DAA6B632E8D64717D32CC76C1322BF2FA82D3C349E7FBFAC44BA0304E4AB4A8689D819 CC3A0DD336BB7E45CA84991DE87CA3C615E3DDED468DC67E402BAFE01E096C61E0BE0645 AD50A227015278116EAEBF7895E5513E4A811BB90E1D2E204F3E0E656B3F75D25008E84A 9FC4AE44628B7B38A484E23992C2C1EC229EE966480FCEEE199F0892689FA18B489F2C31 F2F2196620809EF6E0524D99A86C627B053EA195870585D6B3C54C3B55C80E352482998A 2673772C4524BB4467A867FD953C07504C6154201CF96D422D0A3151342FC9C66DE45FD1 29EEDFC9ADF67374A4C1CD2E76048EA9D4212A32F468E74007A6C3A8251DAAC735228DA0 5C245346BFB1903F217D62F63087721672EC60B846652D9CE8AA2350919ACB2D8490C6B0 5B63EC808D611BB1D7AC1CB102AD7350773DC8248384D1FCD72953CE507723529CD4202F AAA080F519FABBFA48C620A1511A2FCDA8BA96E7784520AE0093AC58623AFCDAF0EEF6B2 5DC8813512254752576AA9608DBADCA38F319EBF5164C1244FC3B6DF2523D8D8F19D23E3 53C1C484FA52DA7B8D84D71100B076BC3082DDF29D6A14AE8BBC72B1626F882C1B98EB3D F31DE2C5174A0AC1E5F2F82EB3CFA93EF6741473DA694CE020EAC6E1EF41636351E12946 E3BA2B1D0246D059563F2BEDE7A67648AE6CA534F32E52FE7F4F2CC936F9EF70C8EF1597 A073E36D237BD34A3CA8BAD7D01C54BA5012C690D680158A694D2CC0362B7FFB8A888A39 F2CB418D7FDEC46B0E5F104A032581415B083A992D6E8CB4D0E9FA93ADDACCE7BA34D919 9E579DC050DA9032B1C8ACE46D1E2D224556FC0FFDC35FED173D86FFFED1AAE13734D1DA D2F06EDFC4FD311FC2279A79783B7C56928D5EA6F8FB4560776F99BABD3D228E8C62CCE6 C06B7A122FC441CC5490C9085C8A469F524403B8ACF9A607651464467DE098CE068FC171 55ED9489C819F31A3BA4E1EA3C728212D8C40CC1FDA9EC60AED881A93A411592719E4FFF B035AA8F25B9DA96D536969496A96B05BACF2BF1C7BA6EC50759CE388EB3625683C753E0 E3383877F4B2F74B1951730F51ACC3B0107B6DAE39AD2B17E78B4194F5C8D162CA37104A E00F81F7E254B4D1104C01F404F41CEF92CBA628122589CED905CDE34196FE690EDE9CD9 AEB0B9D7645D051E78CDDC34B58A64308A2CAE739A825F18525688E03E6138F5DA8D8898 539F5E4BFC1C64DB496A16D9542674AD655EEA6DAB57AE3FD9058532AD0301CA47AD0B4C 6998716CEF388E0B2FAD6D14578958FFA3330E3759FB8EBC2C25C61EF372235135D2853F CF308CF00441DEB973BB742C7CF4AB0C189B9FAB10C7969777928CC525D9C122781AEFEE 8B82537EB27D7B264F5CC973B096B13C688DA097128CA6467997A5401DCD797F08EBF73F AFB5EFAE784C63F5D81CB073FA5DDA3B8F78FBCB37AD0CD54514F07C59B6FEDF0C86FC6C C0C5E03D5B75B147D0EFE4A484A55555F7FB840BC2DDC488A1AE3C26A22A7975C57090C5 D2A8E484E6E7831AA47BAD43DF7C1D5C92AFE866DCE8E0B81E5D36DAA24FEF28D44C5E67 18B277E8CED636116EF9EFC5DD3F06241C40F23A6334BD4C7DB7523C565A669C19EF1578 329B297AE7F4EB69E25EC5F9BA77635BDED28ED33E3D1FCC4EC257E4BAEBE188003E3AC6 BB930837230D7625415B260E4CAA348690646BD20F33E1022E1926AC163A59CB3BAD761A CF10756E27B6FF79801478D2B3F1CEA0B64835439C60AA4D861B7C4FF471A169482B751A C64854226AD0E38528F72B72FD8472D83909464F26AD09804D05D3B6DFAAEFBF0D0AF345 CE1BD364299B1646141C294AC917E55458DEAFDDF0A9734218D5F5685F0ADDEBE6231377 006D9E3FB3FEC843050CE2050D818396BA57EBCBA3ACF483A42EAF1C434B35216305BBD3 F9598DDE9BEE0B47A4B8984849063BA638D97AEF425CE3C5A82F3A4B2CCFCF9711B77599 32D10869BA44FD4DE4D9EAA863C811DEBE27EB910C265492A45BAA73973E3D8849218608 0B6285D62F797879D6E118341BBB8AA44D0FE79DD91FD58F988D53AD07C17AE0EDA91C84 8F2E83031A8BE1569D1E7FF432BDC605E434CD52BDBD52BDFA689A6A52AA4204BBF90ED6 5A206B03D55B8E275755DD2853D6D944AC74107C3160AD7E87324BE16F5B0D6FC37DC819 8259AD5C06483BC15F983B4FA914BE907B9AE230E655EB1FBAE374EBFB84553420C34D61 AB2523A8C838526A9C88A1467E0C27AE1C3DEC1B011D156C8D8C2AEA0B7ABDA324656AB1 AC7D4F5CEC922426E9D5DCAD965E0D4D0C5F4A223230E157A22DDFA14FFECEB183168421 CB6462B3109211D59D9F00AE30827E55F27C17A7248446A21F4107973B0BC987919E692E 1F76F7F540F7A4C440597B265290601FCCEF11BAAD4FAF3DDC4AE6218213F42F2BB253BC E6B0EF2E6C3858988141C626DA7A65D7E48175E4DE032CF76619736AE7BBE01C026A3970 EC79C5DFE931F076DB5F674C163E5367F03AE6E2E7271B273CE5EF0004D7AE89B63DB32C 0064FE4980ADCDE7357820F5943FF1B2AC49DBA19B2F124F15C7AEED84CA6F15C30A9A39 3C7D492A0460E2000CDA313E9E420C5F5E47F959CC2329B6F8A1B7B818F0D44A2A176614 D847F360F445A4168693257AE71D832577FD2E432EFF0E9322B3B4A404EE13501645466F 5CE3B19EA1016D089DF6F96E5377A68592B981E728FE3DFB2449C7F187B3DED6F5DB1D55 14FAD8DC06D95B6B4377AD1F0BCF7B744EC490328CB734FB1A45506F9B6EA2B85E7CF093 742CB10D1D5FB7664A9A7DA82C2C2DA07F43A95CDFD02B9EE4D954B2BBDA540689DE8A37 62219CEDEDE4C78F7E314EB519996C0610ABD85C749012C63973AE84DE4BF8B6B1333024 BB6E856DE3BED4C890DA1B7612689910607EBC32814DBBDBF179AC0E7C8C0A31B19775EA 14DDC7057CA38E53EE24A11CFF34A4E78672C14B215A8F7B70F3B6231E8C9E2206052580 902E05AD3FFE970ED2228053898E3EE2605B4D4B364D463F0F3ADECA545BF39E0B14E0E3 A7E5429E661A9718CC86D935E11FB2DC10FB436AAB75BE0AA27B8480AEA99AE6ACC68698 7D69781BC4791A2A202B0289BADD16C29FD7A5C7C1146E51B4441F1BB5CBBB04D54C336D B0AD62057F7F97AF8F7BFFAE47D1BD86D2936B8BABF25E91E41CD8917AAF282949F0D9EB 1D4ED2B89478BC159FD71E7207A65437B20D18144E4BEFA99C89983FBB71240EAAB20E62 40E63F517EA139D1AC71946470F28E0BC26DFCFDD4533FA5BFC0C663F53C42BBFC16CB96 8C0E61E2A6C4DB7B688ADD4E2F9D1010FA4B4E8E278236C66C7C1E5FE6B3EF982A970C22 11006A98ABA967E7BCFA17176463E2509AA6218FE0A7CBEBD9F9151370FCC669EEA0AFA7 265F498B879C4C94AD02327D680059C8F7A388260D1013DB99887C5BED8A68925C3D9E0D 56335F93A402BE584D1798266F41C5FF3C647DDD2C2D788A7A56C8278303C0E9F20F8595 4F6B47B79B6CB9C6FC80AE76BABFEC2B750B5ECB267A6866AFC68A51F6FAC54B84B9FDE5 54165EC7104F5626108754BF07116A75EDE93A35CBE84FE778DC3BD50A8421A959B512D7 E7881889E5AD2DCAF9CEF64E86A98BF5384D4F341B53CED94D430F3DAEFB506EA693FA23 6830EC178791B015ABE069A44CE20752334986A43EC06F8ED44B0796FA741F0B18BA5821 10C4D7C3B9B681047FBCF17DCAE103ADA23C9D41955B2C0DF276D5DEAE83A941E8241B51 DD9FAC40AE8FA3B9308470CCCE30E17C1C015019E1A69BE8A054194A1190B956F414D473 DC5605BC7284C0025F01A715D7282736704B3E824BEC160772EA327572384DFFA650A292 FEF417B2C4B395AF893BCA339134D3BDE3E4A8CE7D76E2556C59D7292003C5487DF76D55 4549FE9977FDDE5460389F32D5663656528C257C2057EA3EB5D70D20F550824C71DE3212 32A29241C8BE67ED9540B3F461A001C8F63898DCE28423A3F5CE806DEE0B50E8F5A76C86 530491F67C48B8683996B6BBF6DBC1666BC6E9B2BF4624701A67B52F792333DC12CC6142 B2568EBB0ADDD4F9F3443D45204B013E098E62C6ABE0FB14C2158574A7C0B24EDCFE3557 2C5C30294889CDA3C7C1C67558AA3C05D012F516479DEFCAB7ADB890F9E96E9615634176 5E8BDD3CA8E85DA76443A538AD530EAEB42E6876FC74AF2B6AC2526F64C8D323B5F5CFC3 BAE26A4F30D4477EFBDF054BC83513705CE5830AF048CFEBFB4AADDF2E7483A4F1860D18 7D318914C3622F4EA58942D5527484D2AF2D0AE2DF74A1975268F9ECE82E364F5A3B186E 39A4A10049D6358C044B6B05E9B90217D0A3BC0EBE473DF1A7CE2A4DA8D5648DE7BA58DF 0335B7A4C4DB44B2BC583DF0394BBF14541329B64142B6FF4E37F523DDAFD8C1067DBE8E 4770563B8AE958C26BB51920158795D0A4DE9DDD3C2874A572436749FF5535BDB59E8C83 E421F605083516551E89A2FE34FB9B4AE55036A3D7ADC71F64281A3C54EAAC2670CB34E2 AE94E71943719DDD21B8AA335EA3181896301B065FB0519AC8160BF9FE18957E5B72396E 240ED3A9779F04FBEDC858B2DFCA71863A17E73D53958AAC58CED0DD0026D562BE9F395B 49C12C0C29D4B84C28881D17B10F5026F8B208BAA6DA070F94110587A76E00282D3CC5BA D88C3A9A714C063F8B325495644DCCEC332257733448C50A40DE95BA8E5AD73FBBE404AE EA1B1F49DE4F9F1770B73ACB5E9CC4B5D1204A97335197B14DCB3DA403DA430EF0C2CB46 E050B1E17FE0105A619BCAE09A33CA4DD54E84B8568299C1F2EB116C16D54DE40D9880D1 B2FE45706CF0340CD591FB94B130BF0EEEB3F1EA675B032AA0A780F0E0E69A63E932E01F 43EB43DE97EF02CAD65BD2013569695789971D843DF14DEE9A32A1EF22BAAD4A4468AC40 588EFF9BF91CE0C09C30DF0E2504AB95E85E70F6769679C12EC83204FF0C5CEC67A26CAE 748F530A80ED96E3C6D28F8F12F5B3A7A53B1BE5B096B0D186784402A3CC1D4EE4162128 D0FF956979EF79DEEDB9732249CA150D159D1FF502E33E4A305F066A9617BCB637DEB999 DE15A2DFCF9297E2E93F65D90A233B7F512882AB88439B26B9C672A08EC301262BD37164 37191838D992F15154E96EA15454E4EE9E9D4C01CE2090120620F5E5A0849036975EDDE7 9E207B17DFA344C8300D07BF024C89B9621F8FDA10A5032197BA4B6C127FC68C3D1397E2 88219E9F151363321807084F8596DB0A24A8D6E41732C843C01843A9B4D9C1041D28C7F3 F4DD289EAE019B6E8A3CA2952A8BFAAE3CFA6F0527BD3CC9544196A0DBBCAE1F095C3674 B34358049CF212CD96530B9875DE99D93BFF4D87E544C7FF8E79F757ACBFC7DED0A8FB1B 4BD53D1E76FE95E930E3F329DF6310107223E4E576F38CECAEF561B5E95CAAEAD603B792 F1B1BB7EBE2C73E7144AD8D50F0581AE74C9A811A52E986FB6E249F9290E515639900754 C8FBF4ABD9F642970190D28CF4BEEFC7C39D1271DE2A357949A69BDC6D8343487BF6BD25 1C1DBC1132B1FA6FDB4D3233ED570D9310F8C9DD92B7217EEDAE942A25DDD6D5C24BB4F3 9809C658BCD0CE41C70709AB8899E4956D9615C1A2B1A627E47CCC17DA3454291667EE26 AF97D99AECD1F7AAA7AEC910734786FC797D819AA8D539D10EE8DEF86E4499010310E241 C9FCC7F3E2B0FCC692D9B2D8346717A5781E6AACF1A891E2E6E65225F35026AE348E0E16 7475CE6A9A0C14FB588A483B9483AC475043907935061B48D03677ECFEB8377235E44F7F 581F02557B6F009E964A4C345494EF9EB4427ABF1D2DECCE71A87D55C57ED6E561CFB835 8C8A38E387531A6D04AA87F5AA92D73B2DF8C972402001B9FA67DADE45F803540AD55272 AAC3A49F23F910EBEE137F616544F86DC7E33CF672859A545677018279B5D1AB673640DB 4EB45C3049D2BAB6116D34B3CF6A88ADFCA5A657E93C32EF5912DBCE65C9527C068D03D5 A23A29E934391FB4317CADA46B7CA8A4F0440CACC958028D20197C1F1C0D3CF39F107548 5928CFC10177DC70FB5133A7ECC5C82C978858DC1CF44A53B4461E85B6591131B19806BE EB57CF868D200A7F27567F124140D712AC0DF6D6FB8045671207AB0CA4735D4422EE8133 3E0143072416E707CDEC20286F72E3070E374D79D95CE144AEEC86E6DC9001B991F15CDE 9EE7E8368B4BACF9DBA6E83848E5A3088C2858C71BB5841E990BEF89DE5ED42A6EF9F0B7 8127DBF344A29104E9272D0ED77B5C32D245B17293C54F8D939E314350B42D95A3A2F4D7 6FEC437F8CA935638E8558D7919ABD0DBD6323F83AF703B38E8445FDCACC8F1919D2BD4D 808D18FE28285B62FA958B34CFF05150BFC884F0A323F67CBEFB98B393607F500530A1BB CD2E2C93D25EF97621F872091C13D1BACDCE7DF636FFA29B24C51111E7C10F0FBD250FD7 0899B2D370B955A7B467F9C726CCA0C1B05938FAB3357BD97FFC32A78589BAD9B54CEB88 E0C95CDF9387637A043394276D50FD4E6A6170DB7325B11EA2145BAD3643F51114332630 229198CC4A68C207E61284CE848E0CB6F9F7FB24E72D5D0877F2697F39F7F9F713FE2360 A199760E993836E477943388D08EF210C1C782E086639B507CA9CD5428FFF902EA82B280 DD203279043B62ED9C93150CE5D365C3ABB3C353172273AFF2C75BCB68FADEC1964DAABA 777D83401AA12D8B5173796F691D8A2E9BE7FDA49421AB46A014EF1C566B78AA4889C684 D45B5C9181DCD1B12D4BFCC354454B6A85C4FA25E74D55A1C6CCE8C4FB9ECAAF885BE22C A5DBE8ECBCF909D4487E6C64DD9B489DF6BF4B1F2A38B7D18983B2E41696D55446FE1261 11A0940EB96A23142770F5A17CD8D89E85C6CF269F6041B0F32467D1DE4C0335F543CC07 492BD7BFD0209DFEEE502FEE06D2D0EA9A0F81CD36DBBFA8E386BF486338444DCA97AA8F 83FDC85A8A88A801854C22B3849467A660173E5E81C055E30CDC869B1BB9C367923A3491 F51197DC9971B477FE060AAC5C91FF8D67677C3B08705254972D8CBB0DB05A10771844A8 4391AC7B60179F20E345D2C9DFDFE1C42D947DB12F84F1CE05991AB56FE498345230BB3C 7F92A3AF86D20828D86E931BEBC818BE595D2E17D3F9E105E39649E89E13656F9461087A 36E1DB0DCD850BBCD07249227B65E494CE8C88BC106F7CEA5EFE48E482F66F5F6763A766 0262501535FA5FC71CFA87BFDA2F8FD2BFF0553D2008EBF081BC56BBA010C00081EA5D80 190C4FFD7A105FE500915F6F652A0A00FF97A7C825E8617077473C38B5D820C24F78E387 A776A8904C265AE4CABF3D1845011DB66A4D732F842FFD7CA1F5FB53714D0EA9F43AD20D 280FEBA87134571F5405A57094243FB22E12635ADBF0D1900E93684D1D8B5EB04D9D01CE A3CAD54C9B4666E336DC6EF82DA6915CEC1F11C89E249B0A5C460BE552BFB4AD545CEE0A 3A97B65EEBDE82FA1893442E7446C901C50838934D82DB73DB7780946506B966CA83A142 5D1A82EA07C3941EB1942325E258A5F39BC9D7B8D84F7AC876C9E47B854BE1D40154A54A DC42BBB5E5D318A6E8B2B985F2F87F5A2486F261CCB59F171111D04D29E38CCB692F21D4 E5909148ABDA6CE4FCD577E3EB39D8199C63E1EE22443B0176D84D2EC501F16BD5B01826 67DCD1C99DF0A8B3F27BEDD2917BB900484171D2AAA6E0B39FED994DEA6FBA6877EF4D94 F552177A83541F4111D1EAFE83A5D102A011726403648B148DEFD8754E91E52BFA9A5F80 273475A427EF5C5CA4D981A2D98AA00A4BEAA2779FF342B5EC0A452F860620B88AFBAE3E 1FFC666C05647B3E73CD54BF35FF47411585FC84CFD702FA116EBDEB396AF5D9C298C3CB BD97E8EE08EAADB0C854F18D2AC5D08771ABBCE5B70895E8F04C3CCC49525BBA4407E081 62A272E0F623578EF4502FE2DD325DD87021079967B1FD01B95E8A0CC6E65317D947B340 7B42052106F27ECBF69B431C6D73F9CE9220BE91C38E1AA2F9779E128BDA6A76ADE5AB3E B9744A6365A95368D5F7C9C297F5AF8C0E21B16FB8B8DDDE4AC3EE393BE599B2B3E3698D 38C84A69DA371E8C323EA53BB232F07A761473580CC3F0CBD5C73FFDAC3BAFBB1D9E7D77 1CA641EFBB2A190E8DFCDAD040736BE41D29723711CE965926CA4A56C6E4C5FEE60C6634 C3B3BBE74BB0ACB8BC0FF9C426679D863DC1745AC462037444B6631529D8A8BB22EF605E 53297B146FC90E7A751C5E151545E89281BCBC7271731E5B0362994090B2560A8E62858E 860FF9644008AD601B15FFD2BC3D25D06FA0D78F003AC39D89FE621C1E368BB9221E2C59 15A56634D5EBB299635F48DFA2BD37431E224E38CED95C183604B9CC3C8B153434D6DBA9 CA955106159337D2709025F848B5440990957B0F12D416F823A75EA2567DD02849BB9B98 FD5F32844E8F24ABDE050C333DCD9C9E4DFFD97C22C0045740B6B3E94DD8964F1E601544 4465655844C809A51B9658EFBBA085489139EBD2344E68FFCAF99BC6C50C68C0C03EC1E4 0C378E68F1CD3A8C459D732377514B1CF1594627569C16F9441AB05F9B4D7B1A6AF79E5F E62D1DAAF71234F31509DD947BF67EEBFA0FAD13B794D4292516AB84FB96F5DD8C6D65C6 0B822B78E917D7BF5BA9F2A4C90D94625B0DD2E31AD0D12EB3AC5F882F72D07F88045B35 55AF20B6AA3648EFD5CF73798F3CF86B139C909D1D253FDDCF78F0915EF8CEFF7FAD6CD3 C784BB88B8F31D1DA52FC67500D064DE56C233C333CAFD866D102FAFA71A2B2FCD2715EB 47C5B65909EAFDC5250EDB78FDA4854EF0706F226C1191ED8E1ECD79A43BAF7154547059 D567146000900625B22D3F7E356DFEBC00D4B6E6C1296A4E4038973B9156D5D748B6C0EF 0B82B459E24670C9A951629E57FA90935E710899C37A5310822E99AD7D7B32018DF94FF0 E723CDFFDBA6BE5DE8FC147C794E9FBD12D3CC53C5E14A328F6FC6C6FA479A0E0F760253 899B220E7ACFB537262764F994D680BD4A48F618E7FFE9E92FBB09ADA32A7656B14E53C6 B43774A908AC61698B44B4FF91D6BBDA42D53DDF348CD277A2A07A0ED439FF4D94F769D7 6FAFC6F19F7A307927FB233796CA701B40A1C3E93A98703802B5D41F8A57F0D699B7ADEF AD6D130B06C3D34C8D2414A21C75D4FAD9EEF2791AAF7731033336E141E15CFBCD7C3923 C663CB78D678F222738BB970C5ABDEC1C983D465F71D8189A9F1A031875460CB9E46FDEE A4074549FDE7A01F209409850C6848DBD1C9EA058A28D224363CD796F106683166A00DF8 F5239AE3288F9D0C14E05217849FA07DB6DE17148462C0AC9195FF3C20B76C452DC58273 3B81BB7526C69124C4AEFC411FBC581C29E01494C28F40A9FA088AA7B727E5C6D8842122 79BC38AF7593B2A53E8B0FAB585CEF88D5F497727EF2342F89EA4901DD5FC97AFC1BB805 817AF7C8FB9E1055D8A2DE3DC09C09BB71A999CABB055C4E2600D91BD4A0A6FB2E9066DB CDAD3FC26D0921B2B9ABDCF99D74CEEDAE954EE6AC80E6AF69EAD98BBF0F14788D973381 5714B6C0BDA27CB3E7235065ECF910CF27DA939D6354D3CDB120FA8E0E1C28E48445BF7F 06CE9F6867641A9238175665ACA110E8908243CB693C60D369E1C12D39ADCB6350395F6E 7ACBB1FBA75E91D21C141394842D6D107CB412C754C0068DB283EEBF44046213B55C2BC2 5E403DE803680684F0F5E2054548D3AA52D5EB1F4E8D32279697818359850B50DCAE5559 B000B4D74C97AD069101159A5FC03C66FD88F44824E0D28681870E6FF118DB32ECD10A88 1540C1B63BE33ED8EA640F50C47055797C2E6A04BE027BA3A2E8F9344FA48BE1EF0D3A58 59F9CFF0FDFF085F78712C711D4AEDA295775AD416408D226C4DDDFED69F5FFDDBD3D6BB 590EFE0CBA5404FE99FC4AA90D53FD3CEA35AB8042784717D1EB67529B74825206798862 08D744892CFE8944B9EDB4452072D39363878167C371C3BE4816955959F7773BB66AB794 2A2EB43BA482610A388035F9542C3D321BF1B1FFE827812A6C9A2F22B17CE0D04BB34653 02D0F9331F41370AEA4F1B09AC2AF71F588B250D4B777CE024E9280CFE9EB36D9CADCFBB 4C1BD4CCD1C035B15D736C6F49AC229909BC877036E6F584D4155E0D20AC99E41040AE3A 23A0645A1B3C8C9553840388140AC1B49585231B98797C1C19D483A6E69FF566E6DC0AEC 71807AC1F4D3DBEBB2F4A4F6576DBA8A0B1B8643C9BD1D97A912E90A737268F6A91E0A70 FEE73DAEED851EDFC631701755AC7B2EA3EC8990EBFB3EEB64B75FF320BA84821750BE74 F2F2C8097EE95B2402D6F4C31E1BB947A5F86168745F8BE621289CB65BB1AA299214F52F 80950D6AEE089AD94BA4D19B9767B4B3D3CA631DBC1B2A37B3BE026429532E717BCAEF7E 8BCE17D47F40F3665C00A0BD87BB6033CD56FA275BF4BD06CF4F2B0ED24A061064092815 9D73667E820E4235F1C4E629610A1C260C43774831CD75A5375399644CA9C46BE2F516C6 7B059743008E82085EC673CCCA702BF07B8A9F57BE338D2D0F8D2FF6090F3AA1BA20A9CF C02EC2471992118F070FEFD45B3C0FC0B55162490FA9D9DD60A6732532F1AC45A4D5ADA8 DAD9ED5D24080E2C94F6A30ACAB0F075A50EC19544623D14A5A9A783A61A75D6F6E6249B 7B4AD8EDDD1154ECCA8ACA427736DB27758A0D7AD3F79745FAEF53B171D96FC735281986 C4214ED6754154011F4D0B1BF910142DA99D3BAFC74D8F2BFED52422BEAA5DE0BD18538F 1C8CA315FBE5510954227B90718FB84785E0ECD9243B7C991690D2A7ED913E5080A15D27 927BF869EB1279474726B8317FBF9B77774B2A97C294D56D02C40087DAF596AC35C2BDBE CE3CC534DC34CB2042F85F686F4FF4098890439464D56CD011FCB85BA87C6B51E9C0ABCC EB9A96152F5137E6590DE02C9E9C24D133FF585394FC59779F64E1AEBED7A007A269482E E8943604DD95A632EF16B0888DD6080EEDAFE8F386E05427DA25E6D15E38BAC599A57266 C416F20DB2B81BFB7AF0F10223DF1E760C2B3EF6EC37AC447833E8220604CB3643CD2CE9 53FD9E2D22F6053A7780F79DD161807B661E196C77DFED2AAA7ED10253943A7FA2C25602 3586BF0508910EA8C688036557439C183A1E9B9165DC2BF055E58DDB25672E7E701B3CCA 056B592AE84DA9278C95328EEDECA8E7A4FB521D3646F3195D9A21517DF98B334AE2E201 BC4D0D3162B6D0F53F801263DB7AB69F1D2998038804A2A8E96E588853D7BF448C3DED2F CCB995EBD6520A2C6FED07E13EE3E546FFAC962C6C30F570B8BDE1ED758550150515C927 2C6760A12A097D07A6A8AC10C5FBB66E29BF85A74AB804A6CC99FE01946620D14C3B8B6F FEB0C74E4EA1A225D5B9B5DD45389FCFCBAE9D45AD3C7F3E875C0FAB231F7902B5C860F0 2B4A13B39AE999E051B7B8D05BBED72B29ABF13ECC485FC1EBF0DCE452ECCFE6F230B2E6 B778E45197B80EE42F4ED63DAAA570C4ABF8CE4B30AF7B694B70780F96BC9742F7F1D3CE 66AD5E473D8CD8002A436B078918949013B721329F9A931DF6F084FA5FB7C66BA81B6980 0CC79452F5EE2991BFA84EA8689A5B7D20AEE04B0E5B0FFC03B8D8D1DF4F1D3FA29BD6F5 433809C897B31F184AD02C8E9FEEFCA647EACE79EEA1DB444269C3F88EBB896B2A81995E 9030FD059C48589B1FECD0F98490152F1A1CCA7929F19951D345E342A805FE72B4A1B4BF F2730AA22A41D1E07A890AA61F2B9B6607191C92D052A673B15FD49145611AF6754E4F32 C12533BCF702626D7F1E44A7D7150640F09819CEAA1C0A2E2E8FCC3CB262CF29232A38B7 F0EF66086AC8197B5226C5D69A6F57F16733BEC14D8E7A47509BE951DF1B810CCF6932FF 4DC57D208B13AB86C0E22569A6C11661C91711C35C61BDB6268C82E08AC53589A13FFB3C F5EDBEC7E7A41CB81401DF66295606B544A9DF4924416423D6732B4631EB73266E370083 16D0DA6106AC038C1406A5B6F8639BE3EE6C880F9DDE71085C6446F9F2815E2A6ADFCA93 5A7BFDF4D5AFD5CC7C8C487D57B090A5CB7A7712E207FA7000E39CCB41AABB32923D5E1B C8D7F2C05D9A3FFDAE5AB0BBA940A8A25114CE99B207FC2DB264D44472B188C5CB9F41C1 913B880EF8108348BEB174712B2FC1192F37175C5060C9B1F63F729A4E94D0DA524E2DDC ED8C1F460B782DC62F4C23C6C0FDDCFFA7E2F918CF417C2A4ADDDE53381F65E3DB52D291 C72998809B59818B71BF922A04C053E2921679838CF482AC654E982A60D2C097C4A5B134 34657AA08F5568536FFD2574AA4A88873C762371971480ABF1290A05AFDDF9C072DD721D EF36CACA75F4AA4E28F965AC02A54735E167A7DABF06ABD1FB339E34848F1CEAE16D4744 0107AD4A526B99C6396BDC4426B858BB7FE38037F46E180E3F8108C79E457904E0AA9BFF 6D3E9B2A89D3F40ACC279C87F0A1DA1245AC6E766F7FF56A7F7DB7352673036D8162CB5F C666B6F2E944E19F78EF0B87EFAEFF4209A5F83A563A6954873F88B2CB402462804E2850 C1C5379CF747707E54B6FE28163C31E581B5951E1A12169B1496CFFD8D862FE0126A0460 7435B53E7E1453255BC1BF14B67D8275CE9DD068529E5314A28087EA792E841448B2720B FCAC76DBA06A85D1FFA731D06757170CFA16D6758D5E371655C64747E1FBEFDA27115923 C701004B5E38E32E4E9FFC294639B67A0A8BBB44D6050AD78A41747910AB112CC7D995CF 004B43B8C0AE28049672D0591392A2EF95A8021F2AB281DA86EC270D683060B8D9D6127A CD4D5900209C117295822A9963D86D5B85D66E4502E5D2E03DF43DF5A162F502C454E971 09A24B58B9BD864D5E11F8818811AAF0FE432527F897C7B9B1853DD7E73250BDC414A83A 85C6916FA701AB3B71AF0AA8429DB2A9F85BA74E49DDCAC5174C927F28C1970D0FCFF89B ED30E83163D21EE4741659EBD12F2FDDC934E812ABF1A0A0CD1D2AF47DF045BF6C6CC15B 4E61D058650AAAB48CB9027757EBB21398C5899AB5876F13E23655A7AB3C19AB2D3BD7AE 55F808B6F4409012629F99A24FA15581F9EAB68177DD80DF8A78F0440E5FDDDE882A0976 076F1B708C63FECE076193E53934681157F1EEAE0DB94A68289A3963775E0793C3FE3862 9A6D3161E25A76A5CC1017884136E801A9EC1958AEAEEEB543BEE46B55FACAFC0A8B0814 9121CFDAEDF975B4722D7EAC6768779DE79D4031D42622D3B2EC0A8DB5BB117DE455F37C 7E5A948088828127F042301446E89F67A6748440460844A5DACD816D728B00C725C771EA 647896AC27708EC7F9C858CD6E5264BA8DE4D1B2662CD161C0099FFA627070C7A228BE5B F38052CFE6640BD91780ACB62158ED53E83CB21BB2DD3C2C40B70CAA21FCFF4BD6F07220 67A644BE891798B0FCEB7FC5365ED584349903AE4BE36990F66113C3E3E2A12A2B822A5B D334342AAA886A4C3460598A6D2C6C120369E27F5D8DC14D2C79C7B5215F0D6D0D7D7F69 AD2A561C66C113DF9F60548A6725826E9C508BA07AAB59F3BFCC74D70D3D00546745392E FDF15D348F0A5E36AD6C250CDD7D4AC53DD79991F36631371908BB9CDCF2089F4E37EF58 E9A5AA78F3896AB9769C510A5965BFA79E40083388A56649126390F24312A4AC2D05C2B9 A5CAA54F62628212354D6EFA8875F4B424732598FD8ADD1DA5459243D233D95F8840D51F 93847579566AE17644FCC7165E551BB9BFE7666E02F77CAE781D41D2EAD5388553E06363 99653C07C45F603D6C017AC9DAAFA14339F25210A4A91DEC0DDED2501D38C15AD3371153 CE2CB9E7A77DFA80BBAED85CD46D3495AF1D3BA9246885CCAB880908970E87B0BBAB6447 A611956A2614BB89323FE3546868CD7C558C0BE2DF1F3649C0190BBDD38C8168DC698555 2E913FA8BEC47F2ADA8211F4FC25EA75F5BF578FADF6707F051A0DDE5CC99C83DE55EAB3 D81F40A05370B3609A9EE133982CAECB4108661833572E5360D31CB29916146F3D43C127 E1DD71CA9413C462AEF379BAAC990E9C3BCF2C22E90F15AE7CF1DC3C52A44894E123881D B6396ABA0C77AA2EA0BBD78C7312C9B9FC36271B058DAD3F57C44F57CB825908CB62B3A5 CE1BA60AD20892AA2A559C53E8A883E9F9CBBA38D13E8E71A8C008861454A58087E729F1 C50723854AE1F620D3E2D716697529BF345A269ADC240B8EB1593604E08A12E8C184EA2D A26B206A5643EF0071D752A3D4982A507246F237880919ECE1538E34EFBB9D991129B948 A0D37A10321F792A35C6602F5191D34100396E0E89C0CD41CF82D1A3E55FBF6575DC08EF 59485DDB2F33B1689738ECA78A59501F8A838D3BB960C025617D8C50855F31044D02F076 8B5B1E6058737389AEC850E66C6F478F96C5C1D2F451841C30D6C1EFFC5B780D26A3BB24 AA555A045DE634041EAE5F0572AB927AFA68877A77FF3AE277505B133BEF87C2899DD7CF A9275F03B6B8461DD1791D0B0558E2E7A36295DAC3CAF878BC670E6B005FA34E78938F50 DE3B75424769ADD07717737AB4E965A9565C1459C3197B545A64A5F22F7F3BC0A0641122 85134DF7405EB961B367250242455D9896F92FD1B784AF5DF40C408B0F30A4689168029D B522BFBE784FBCADE1D1301EACB5EB09DE63E20D5B313D2D04DE931862F08309633401FD 2117426434AB74A5A8480F6F9466E93FED5AF4DF1B3C81E5ED77DA855D1DCC9803DBFBEF 79994E045DCFA6FAF3BF1DEA57EB30FCFD0BE7A17855D82DEE77AD5F61C08DFF00958DFF B5604F75DC8CC24623F582BCD220CDFE0D340A1C476D09289C5213DD812A0BAEAA492E8E AF3436C2D490FB5104DF3139BA8D5DC7AF08BD1C9517206FCC738B626C3E29E590E2883C 30A4C745F59E54463086B20B76628FA4DD6E295144B43C87311DD11B559472034543C376 65CD9B874ACEF7028F342E2B34CA04260ABF8C8E6193A64B94B6E1EA6DB6AC39FF3EC27D A41A460DB7FB38555E272E1CDB792E682E887EB5C5AC5C0D4037C2BEE840A825AE864D34 B205B65BA9E9B4D07A16FD1D285EB96E172E89A1024E5C0BEAAF1E37861ABE6767B98CDB 50C786E66AFC82AC474391C08F1FD549FAD7401F72E04B3A9A6C52C1B697E9D4E3E33122 EEE5D0C72B03CCE96FC3D26966FC06C9BA4B7B838076796DC95CFA3FC222B3097C43BEE6 251843EC7E8C81377481BA2C5F77C47C2BBC53FCBD8305C557C2FF07B9CEA70184E9DB31 98CD10E6D6B9D3ECFF62AE429193DF88CF2A6548766C2DDAD04C3062D17BD5F4AE274043 07735A6DD95F65E3CB850883474E57A0376F867507756D7FA74D0ABC7AC4ADD08E0AEF53 39B613F64A33F92ED360B7C0A65F8F81290408D0B8752B7C03796629304BB83A455D51B7 4C89ECDA38CBE83C5FFC54A7E5CAF3E2636865BEB3D6092CB7E4EFE6B13F710988F1B492 9F4EA0676EA6B8495DF63F8BCFFCD47EE238221BA37F1C53B40A20D70347145DD5A04858 4F1B55173B2808416CA7BDDA7775DC4F208742F7DE0382C97916342A192E47D3BE4454E6 A2F80C8B72550D55E9B463299A2008334589CD4B5C19FD948BE6F9991EB7988F004E3BB4 EDCFFD47BCF21276935650AACC3169B54109D8C02EE11D3B2670A7CD006DBC704EAD9F5D 3D1678C93199034AC92DD1959D25423A135441DAB773A78739663959C3AF3BE598102B4B 504DE19444E3BBACD584E15F6BB0D6AAC894FE5F86999096DF225232AA65B122511D3D0C 6AF2A7B25273CDCE5F4791416BD85DF4841C49ED8179DAA39FBE9E8A5D0A1BE58D67A0CD CED550F9E02274A337EED7DFA9C3E23AB6AFF8F782AB4DBA173D8D0DF5A687070A4F8782 DEFAC64D97487B10BB114338A16A081C64853076AB441E0598135A79028847D19229E650 E96257DA27FA1C78F42302D996744BD5DDCAD26FD13F21B2D31ADD3878493ECDEDF6A257 CA47BB5203286AD59910C8BE7604244C6E0041F3AC99029A5C61CF29A105FE4572BDBD01 8B55B411B4CED2FB4F793F842CE40F2F8D07D8E10E79587970FD254F4106278DC7FC6E86 6D7A1729C01D612A7FF65A63CF1C27CC79AA57699B0188285F474BA5BE90322DA6F653ED 3BD73542F9557352A042731F7448ECC6F931218E6B25ABC903E201F61BF1A7796135506A DC2091CC49E8776202498C3C779C5A0DAA64C92D65FD3002E359062E1051FEC9DD47DDB2 08AC3EC609544FC692BC2638E17AE95601E0153EEEAF7FF294CAB662116B455AEFA27744 FA0AE2C7274442ED99491738BF4E832BD2991C59C2D94665FB6FE9EDD8BBD65EB2936F9F 8855722E84B50DD6EE83331138EF9779751C13E8757A54DDEE891507D2D00289B8667C6E D9DF722391C9A4C7BBC146C735253EFC8E7B436134CEC60EE2ABC2F999EAF00352F141F6 B3203DFD0FCEEF69B74CC180714A56B020B8832D291F17398E5B219300AB472699C5FFA8 45878442020D780E1F2DD784AD116221769CB0C92A8B9864D646FC6DE853C19AFA0C9034 6AAA5ECF81394BAB6F82035CF59E4CECA428E4D9513C5DE593D9B2A9EA127510CC68B5E8 43A17803AC404DDDAC646E6E73C63C63001DA49CEDB5630B2E5A4231CD3F21DCABE8B3A0 3ED509459FFFFB2457F1D5608E09448CA76E516407057805B82CAEE2B5FDF19BA480D93A 396EFE8199D04CF81E08E979C2C84EAEBC3CAD9DCF81189FF9A1ACF3FC19A88B30020EAD 5DE7A2EB7804FA0DA9BF71A339C3A304F51E47F11F9F0F754B04473A3ACADF6FFF079CD6 C6F6B58A4BD5B340AADACEFDD5140B637EB3209BF8FB72B493643CFAF4900AAFC63A4EAF D7B9A4A241ED10FC7CA1490304E2DDE4B22354B33253B41438CEDFA00E5146648B219E4C E22D7BEA2EFA6A063DC8B1772371E3698C243C48CA4705352C3996DA94B1258B79C0B4D9 63E69A95DD8318CBCB338354B91AF6852EE956A28F0DE835004D7F96C0E149DE50241951 0621F7317209D1E1FD2172242E4B079FE328941BB0720194EFB48EAA04E59196EE8611D3 325D1C12A3947C9E8453042F5F6F4B7B381BBDD7D927A8FABE70AE7282291265E7AEA516 8E8D1BA24C71653323E26AA6344BC0D9F1717255E81D4C6A8B4AEE128C71F228D5775ED8 257434AA754C770309C9FD1E8D1B69A12A78A726C80A9F74136FEE214D9EA87DD2E07F79 53C78272BC75F22F54BA647413B5500051159EFC793BF1F44A6B8053414A331AE9AD43C2 9AB2FDFA1107242078E6B581EA6DB98A73EDFB2AB8D733A91F8137C92E27ABB2ADBDF87D E8B9086A12D3D9F7F5CD98D8393FD4D55F8FB26E849373C89C5FBE982C59A13FD4C655D0 DD98A9056D4F4C36CF1611CE5B1931F38077D845F1D0CB9A32FA9E9560F3DE0D90B922E8 EDCFF38CE0F00B53894EDE37276432C4786665233C4B72A2E770C1A6B137EBCD8275F64D F1C19140C3A4186408993F112C44EAF2EB0D97FAD7503835AD56965D66B85B037984B561 B125093AAECF14B8240026FD89389E6B1485C76EF24B838E1E67ACE175054E8EB18DAC7B 9FE59483EDB1EF741098E13D72AE7C263A8102336E6AA6492DF4C098FEF95D7B73F90CCD 3A77ECCD01816353DC819A90AEC7F58CB524B91D861D24DC8565ED19C3E44B91F6FB76C6 E34B107A33EEA9BA30E8046DA880C4F6C7A5C3E58E45B4061E400F12F63219DB2DB438DE 57CB2ADEA50CE263FAAB683A5F993657C38A7301C8F0971A258465A2A03915341AF17D89 B60A4A6E35153F4089E7394EBE36F3FA0E52D561C6954E60080A4CD4BC3DCB8C38E2F835 A4F7EE9D8CC16A8FB6F205B4B9B9052517956A19D11038ABCBC28ADAED8AF15A274F634B D4EE6FA279A872A087A53486CE9F0230F464B877E9CF8002765094E2E3B08F2F479F311A A80699980FBD99914C09E6677161DACAE71884A21BB600BEB151D1698CBCB8F3C4CA9222 8BEC63501DA8BD9819EB03006A427402FBC8C702E9F8CF2B0DCDC7BFCF0A5081A47BE7F6 56366881FE8FB14E160E786A080B98A9CC17E0B52F93E31EAEAC7AF0FA0379C64F7EFC69 5B80F3EBEB7745F3FABFCF0B4FA1AA56CFC3485B50C09783DE242F277D1054891CD9E78D C67525BC2308F66F9CA11AA6AD31D48C3FE3FF0346ECD3648F803C50B86DAC19B0DD85DD D09CA881CE34034530BBD51EB6075147CF0077AEC54690677B17334DE7DE56AFDFAA80A3 D8F9700A9DB28A760C5DABFF102D5138EAD1E697D050D4BB9E6DDD28F0D2C669F0713049 29534D421413BC278180F1172594DEE9DDBF4BACE639DBD04EA2497A4E72032C5C981038 7749BA925E3E46CA02CCF1AC8C2931D1F538EED1B3B725C6C4AAC7D65DB7DFA4F86257D2 69BA6B0CA4902214C3A37D0D2DD45E2427599F3C55FD813840A251F96DEF09C7E72D7007 59A90A9F65B1DC63CB2020CEC0BCC6C54F428B8AEBC5FBA51EDEF53D88378F012C780D7F A904DF1DA8B7148308BF2175B11B83281E132FB20AF80ACACB781EEB48894FE148F5FA96 3AAECF094DB605BE46AE4EECDB1B8C1C64308F6F21239596B12DF0CFA846A09810F803BC BA672B89004AD755D201D19CEBA6C99873EEDEC4929078513912D0815566BCBE3994F345 68151B5B3375936A8825CA58392851D1A873DFC8BA308C58AC1F9EDBEAFAFDEE682C071A BA64798C8486AF1510073C04773B4CDF2B77C3C4E3A3EC365FC4E08FC93B116F8F183947 28029EE89EEC18724AC9D36A2BE1428D90F85557C4D2AD1442855DE6CF1D06C0BA192F79 2D08D3AD3FB804AF6B68B3885556ADB4A4D11CC336B1B998344083129C66446868CB7657 E8946E25AC33ADD0BD39D1D3396FA15B344B4BBA42C4F6265BA738A58FA31AFEA589A025 428664B136A771A9B63606A6E63A29376255DDF52E89C2336454C3452110A4D0C73A27BD D2A47D47744A3B9A4B84BC63349FF5C75A6CE2010E70B24A053C9BC8DB1089F4CB4047F0 D102860A352BD4F0E9B2FE00C730CA3620434DBBB5180092CED4F7CBB8021E705F4C13BC 759B366A4D054B804EA3A8A9604674EC0DB26E93112CB244FEB1DA9CF920CB24DF6A0E7D 7F3B117B9E62ACAE126303EDFEACD893A8947CC822D84757FDD6460A0A344E31D1E8FE98 FACAAFB39C49EEFDF56DD8014572563FBD5527097CC805E6B03066A81E6120337F83D1C7 BAE66253655316248F0CE35FBD61A2372D7B8A1573D34211AD49C592716566EAFA3FFB23 50B54A4FD1521FFB1DE011FCD82792B93D87788F8409AFD40C7448DF74CAB5343D62C534 26F0120A12C601E35C4A17788FA6086B3B4C7C70F1043198C61E3EA717533971E8F78E56 17C84A3B5EE522B4C7C33FB5F1B93089EE7EC6D3FA90EB7C886D04116C3C0947FC5F3B85 45636538CBCAA1DDBA880A0D5A30FFFB07401B25CA5572D41426D4A6D98F3EE01AC1BFE6 D40C58F4A2413631E59140F65AEBC0990A76BE20C2996D00053F353945CEC87AB8970B88 20DF8527A018548EEBC55906E04B0A3A498877B2D1ABAEC069260F05541301AAFB158200 DCD67355FC73930DD4B47DE9ED0501CE7E38823203CE6D714E5501DE6C9922187592236C E424564D6FA776E1EABC1000B2A854D06860F6ED7668C4D5DB5CABF4E89D9E05166CDCBE D679B2E1645790F968D0F12843561B95FC90B8CD75EE2D053CBAE61E215082E5609C1146 32C8B81CF298E477C0427D4CC68E6FCDB88393BE8520CA93DF1E3B519980FB3523BB18B1 99F1626457857CF7641AC66E257634B349B2D5A8728DD02A890391BF2EF8C6358E4BEFE1 6A214068AA175A1E7FF734960FDDC28989AED8261D18B4D996372FDF4788AED732041886 24521DBEB9985BECDA0A6CE64DEC42A2539CCD4F55323057B8AD70BBD5B05872B864FFFF 2D627668ACC1D8D1908C1E3E2C76D45DD2058C717C02D279B0AC4B2E526C657FF7C5DEB5 3538D1B2116AAA957A6B16F0CF83430395996462F8183F71041D543C330183A941CC5E37 8C348ADA81F946090676425EDD0EAD6EA996CBBDBF83B606D78B08684BBEBCFFED1D0875 6CF352F872A71DFEB693608F24E3F4D663E53661B35A0BBEB3B630489FBEA39BCD26BB90 0923FC711CDA89442435FE3A491FA23170B6223A577282C24FB7E895E2A0715D2B78F20F F1F9B06AA9D754FBB32CBBBA06663C59B7A8B22E666B26F2B9D8C55179953581E756BEBB 82CB10E21A7F590C6569324ECC4C34DB4BFD9EFA84897068199ED8344A438A1FFA475534 0EEB53B8E087515ABA25BA2B1414EE4F86E257387D4C0C7D010888AEF962069C57450925 6C3F0625BFD6909356DD62C01875C69204C843E6BA873049D72ACEFBCD9106FD45B8E9B9 8CED3AE42ADAE6A7BEFE925BF6421E88540D9E599CCBFB9E8DED2C5DE0B7AC4B331EAD42 DEE8EDC35312B1062CAECCBC903CEB8F67897BEC2305B6C333FB766D92C6CDBD77CB4F31 F63AE1C04A249361D2EF6E0BAAEB7FA3B87E0BE0E1E50C1F480AEE2DD2B6B4D7DD89A020 8C9B43ED6F46F3883AB7E53869E3C2ED3DB0DBB1A05B1629E48B3D7F420F02FDA6B1CBB9 3DEF237CDE1F7BD8C80AC7AE5388C30335378E0E374D0C41EB824BAF001A4C47C399F301 13B442A2C1B27EC161CF528FC2B256579E3C96AD5F4575454449B3B5E1CBDB300A364C7E 6675B6B924B48E58A0629E729941C3830D23968002C56F84F53CF124E771FC83CCAA3363 5A130FD70D9422B524BEBC6FFF2369A71DAABD932B9D4ABEE240F07A4DE04C280D9CDC39 A52D9B09799279368965C40C32771BCBA0EA9BFD488BFC3D154B8E421391BC7081D27262 B40B8B953C02432B8074CE466299EE8BA9A0BF0D47F797EB5A8300B1E80EB44EA0C0D51F 8577BBEFE06C2C31199B4B4483BDBC10B9821B7CBCCA73E4A96932ACB5DFA52B2F3F346A 444EED0B3B0E81E8B65867CAEC517B99B84F574AB31FFABC2E0DA312F12E549436538E9C 82417153110E8060C80101B8AB8955FBC6FCB64499BC6AA18EB6DFB9406304B2FA5A003A 650C15B78EF641381F9A474623E69167793F9896DC82AC4A01FE4E267E9713507AB69A60 DA690E3F3031CB836256B21FC26BE0B340FBB84AFA550F7ED8C3D0DAB80AA2FEC258477D 6576F86E6D8FFB91F99917A1EFD4902BC12AECE66A5EBCC6585ADE4D96CDF5A78D10EED9 4D543079A9F60B3650D17C81748189C5A1859982574E1E821E943AD2C59000D8CE586E64 178DECF669143E9D12131FA2AB2516A3472C7B41DBE5E8D2812FC7DBBC2415055EC1EE77 A1BC7FAEC22051FDFA79F47C5D511C3F55DEC0369CE994D574299A9E3AB915935C654D71 F3FD4988F5265EB95349304260ACFB633722F5AE8F43D3EF4ED5A0D333AB72ED10C1BCDF 30A2C85CA9A4B10DF95613BB465C2757CD153E81A1CB4B6D6B7A723BF5FBDB791B38E900 EE8CA0F36399A767FEEB1C239880F13643BFF60481776C3856A033436C14768B09134DD7 2C79C88DB4A5E7AF3F76B4806DFA232841268CE4D3D6D8FCF5820EC52B713C9ECAF0320A 5E94C45E93A785D5F4DB8E5A1F43BB8AF4218EBC91BF88D10311EC6812F42BDAB8BA486E 77AB14763C2E489EED940D934AEB3840BDEDCB9307830202AD02B3E7E27E0358F8502DD0 F01935DFA95F69B68F5CD4F90ED84AD59DEF5E62508CE3A5AF67B2FFE39D37C59E5251AB 5E26C96C0B08D593BDB3F7ED93F9BFAA609723BF87BA135847B8535611C5E4EA0BD324F8 3B38289C3C5D54713A58DE72FADFB4B89E7F4C40261C1779B97CB9F9570530D5943A00EF FE435F5541AA079CC0E8452EF366D9DC18B0A6A0454FF9AFF47957973F77B9806373C9A3 D048558F532788AECECD659B8B2751958B3F454011DB88F3BEB0D50053DC70B0244AC1FD 20D70C444E1CB00399EC559D6A2513DBFC001689156FB89CCEDC3EA3C9B70BF2FDB3A1C0 9CF814E7F1332B7C752DA6B2910663D3E0AB53E89A236ED66418A280FB4A561DF005B08F 885D58BEF1429418D81F67A00403D87E16519FACA45298D16ECD5CE1839D3BDBCD784710 8622BCFBCE4C100602211E6762998BE4F6F211EB916468F587A4DCFCC2030FA5FCFE8018 1299E339E35ECDC494D4314368270D837927C46EDC1299FA541480A07F085D583F2B9390 EF3B4A2A8ECA8B28648D8132A0D5B37E353731056BAC85AE7491369809C4A06ED7B0CB7D BB71404D67DCEADEF47603F7C1A3337AC93CA5510F022893466AF4C74C24428275C44E23 0FFA5972C9D36359FCE3899A3D60EF63920F154DD39CCE56BA57E540C1A3497B3EFE96A5 EEAEE028AC28D81A541F833A62C8F7AC492BF304C632A023C7A170F8B3ECAA4284CD01A5 6F74B4A41F1FD464BF46C890325D17CF9C8ADB8AACDD9CCA20015374111DACDA8744BE20 DD6C99E09B51AB2287016DD65383E8918B5557B78578CECCA7EAEFF8E9BE9E1B13A24613 C953C5BB45BB74A5A935F32E708927D5FDC1805B5EB9745D35654E25BA50FBBD7DB58D7D 6F70E102C640B771CAF3C1C138AA9A828E79F377A1FC8913012E5547D3602B22B4C365DF 269CBE55BC4AA79FABC53F01EE7D809481DDD3EE602A7266B7280DAFDC68259CBA490414 84E4EADF0F8E4CEA8A8CFF260B8F4C9C5A3F2ED699B4CC72DADF932F844E65C1BD385CC0 F2EF81820D16CBD8CE2B27ACEC225FD1DB77723EA0F03B1CF07630B907C7494EB4CAA725 18144B1E15B0B34E8F3890269BAFCAF6DF4EDF3861ECB5266C285085BF4E1C6FC0FBA7A2 6504467B734692FC2C9797D1B6536FD42314CB0FBDC0B104EBCA6539F47A97E1C8974876 9BF5EC71AF381DBAF9016B5A794EF38776FD9F811F31EB98010FB1FCBBF23A00794E2FC5 9637254DF49FB9C0F459FDFA0AB0C8C040AD780D6CF3C9173472B8A6F041D3B30720C1C0 324B977866A3F892FE9A12DE84A6F0D723ADC584A17C055F07F4BEC7486D6B064885E410 B48509BBD815C3BC2D57F23515AC82551CE3D334424F3456944460013BC5B7B43AB19D7A 62C9C2431CAB250705DDA8CD0395FC754AF7E0B10BEC12EF69100A831CEB62F5C016142C 32B8A41F852F57BA1DF144C2A534C06559BA009A92E345305589796697EF28E097DC06FB 8465A9DBDE8F5C38BD9D0EFFC3712F9F070F1FD50BF691811F94E12F26D47AC350C01C96 BDC13416E1272D457AD210AFD2822408337E8BA7E63FF468AE68983966BDE984F4894F2A 47E982E29C6855351180079ED4E9D53912764533F5EE35A93B31A4885855A31DCC719522 8D266F9C539DF45036A97F920B717D08ECF274B66EBA30E223A49D67975E8962F617C107 23261A6FA71061BF91EDC235B9288E4D856FF764A5E65AAA044865D0666523B24CA1AA3F 87A58577ADE42B6DD75960840BBE46C584818A5C7E4E0FC13D41E9E1062BF50260E86A39 09C5C59BE2E8301ED90C22A42CD5DCC436AF0A0E8987853B1FBF316986DCF54BCE866D05 1992116762A7E54B08DB4E6126604B30F6D304E3D1B8FC6E602E11D791648C024661CE90 7A6808EEBC6E3E2C0CFF9A9C6DE679F7E0246CFAB927F1D1A642958267645432FD9861D4 92DE7CD99824C0A7D93A27F279C0D9919E4D14BC0855F4B562447974B2ECD1171B848D17 8216047A6834390D7704EB2D6B16EC16A478C69AAD1A4F766FDB6D609628AFFA7F34796D 0667AE68EAF4D3BF8C7316A99E5CAC797F0220A930B7F3005EC0C72A2A925DEFD27F2DE0 8120030CD29A9F5553E5609363E34A9526327EB61AC707C48F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Monospace.pfa0100664000212600000240000055706110330505373015504 0ustar mikeuser%!PS-AdobeFont-1.0: Monospace 1.15 %%DocumentSuppliedResources: font Monospace %%Title: Monospace %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:21 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Monospace known{/Monospace findfont dup/UniqueID known{dup /UniqueID get 4166841 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Monospace def /FontBBox {-109 -1034 1342 2133 }readonly def /UniqueID 4166841 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Monospace) readonly def /FamilyName (Monospace) readonly def /Weight (Book) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -213 def /UnderlineThickness 141 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 17F6ABC0BD4E5B049FA8ED1415B73797205424D2E47FC5DF8590627DC99082760E8B3E17 0C18AF49528FA9DB386CE480B471EC8797784FB466233A879056FB46290A8F49442020C3 E00AF7FDB602BAC1C4F8636E32FDDB936FC70C567B075E18878EA286E1D24CC1E14B50B7 DCDD17FD5295A3F44E0DA80366E61263EA00234FA095739BDE371FED9A24338A8CAB0F53 5964F1515D62E477A2F1C2BEEA2DF171E3962F0DE53E2763D7DE117F6B5328691D69C4D8 D071D89F6AB4731DFE0A1FCC4F32351620B2B48E12AEAD940270EF4990B511E7D052C3A4 2AAEF583BD41B85778646ED2E9A86A73A1089F502672860E7A7A9CFC2F7B2E221C6C9080 7B7E7B4218C9B10B574C73E195D6C97D1EDC5FA365221BD82148D1ADEA7F235FFC14AD5A 47E11207058A7A9059FF373F66FEA5A9113CE0BCAF084AAE135556FE84AA4C5A9070BD77 E7D39A94BA711FDFE442366E9F27F14EF80FFF2C342189C2E28D9FC541F049944C1CF913 2A014935BF47B42C4E0847A335B4E6CE5016C1B8FC0C3E153C07ADF3C0B00CE001DDF36F DE0CC04A25FA1635707299ACB277BFF663DE9558664D1DE90465FBC67BAEA7B1851FCC85 7364E4BB97470017B40C4D54096C4AE2469A5D037963C7F009DD25A32C20487FF1F1F0A0 124BF0B10891BC1FBDC65F9192B7236A694E1CFD1388CD27288222AE80032683C803533D E6C39DF03BFA02DB5F35C1B99531836F38F6F04192AE3228C0F19841842F5C907529175B 6BF7B4A8D7B3F27FB39A58B7D3CF11A306701B548C3DC231102A45496B5535C96FBF0412 004ED0658F28F845F4B0C5F02A680737A738A559E8E6BFCA7584C0A9FAB1B5D3C8995508 856337933B9A49D0624F25CC06C8243C2A8816426753B631100403B630D81FCA4D08527F 3AE881DA5332F16C4D8B15F3CBD4DF36430C2199BE5CD27CCF4BE86F5519C046E73442E3 AEC3F3DAD10948A6AF7740BE87874A288FB27851EF698B571A027E5787BB45BA566A2822 69423D624D118CA8D14B389A93193F1C8CF64CDC3F0153D4B8CA8AA843C2C26AAC2971DA 7F52B17B21ACE56A7021C6255A2707BFF033A1477C42C0B5D2001820FC9A8BFFB4E9DBAB B595E925C78C9CF87420160DC0B549CBD8A3D12352AFE06CFEF38A2D3715AECCF86E0919 790BA8FEAE050576C4DFCB416E2DF5FA3B25192F16A935C9CA82C87CC997CA5909B956FA 1622B10EAD7465B8FE6B347675D7C363581C9B52C9D020AD5CF983284D9359F4C8F9E91B C073DAFC702EA788540E72A08668BEA885605C8D42E5F6BAE086F3591C614D438FAB01E1 3D69768ED2249FF1079E2EE704F9672DF9DF9C8A41CADAE9013809F1DA83673A8398B477 A13B4B0093E151F6489A2D9BC119A66232A1AB85F31979FBA9EE7F163FD59FE14C72FAFF A1CFCC482619E13021FEC7F10C6730E5A7FCAEE84EB5011F13E407591BCE6353D5AD0634 D4414B008C95F31170FD8F33F83C6B02DDDF05401012E7260A3DD0213857AF9072EF5DA7 389AE027997C2D7130443A4B2E505A9F17B00E84E142E4ECBFF3AEF2C2C4E84F162E2F7E 436222EBA20B0DB87346084A2BF64B70B1796729F845D456702C7625AD2CA3D232345C9C 12B9DCBDFAB9B8F697E5E4EF2D473D119F81A46F6FD8A03AAC73211F36FF824DE6E03788 BD669A0E7F2813A4AA830C8EF8BE445CABE6019318806D10C5952157FF8F8286C1EE7015 45C8F60EFA854EAE66835A2046A6915D395F1E0366A459E43236162A929ABE6ECDB26B57 EAE7CE3731E0DB75ED207292FD83B6B288231E4F3F8170DCB831DF571EC07CE2D698CB6B 88C63F342E89FA1BE8879269D9F818C4F740C38EB419A8A814E52AC7CA90187730F43520 115D7388390F20A8119771ED45AE1E58C1DD30B171E7B5B2E75DC63EDF55BCB9D7BF3119 5E4BC6D91227A24B996F83BF8AA17D3A1DFD34B32E91C4F51C229796662763D1668E884B E9BE85D60132A4C45ECFA6FEBEFFD3E34AF21DA897B24A5B836D4DF2E81D1B51FE682095 63128FFE15E36687F7720F3C980EDED7A794EB420F3E0465B1E93755F64A9C54A24058FE E496317919512048C2B01062574EAA66A2F86D01F58D9D252F2A84E7B44A057D8DE0EF2F EF7B752B46B1643D7E57D2871CC15D0DAC4852901205AEB7C996A957C4A0605AAC287AA6 581DD2C8ED591B89BA7126687F970D7D49E84AD96BCE16AFE6508B25E85D530D9A9F7A11 E788CBC50E80F8A4ECD26C241C37078EDC447DFF2A43ED7BF1E00B6F227926A9913ACEB0 98B833E54B3FD10F9D0CE4B8ED76549239A7F4FE846B9D57F26B53229856681CA7D3EFB0 22CCF57311C872CD0D0342A2FFC59E2F13B32D530B0268A4D01A14193D1B17001E205355 1E42338F7BAE7D9B02780A3D972AE4E904DD34761AA66159CEF52B226277596A2A9433D6 4B5AA165D9595B99829EEA6E26F4E10DE1B6E0F33BDBB010A036D221B7F4191F4420B6EF 621566F238B0ACC9A7C41B90823D9DA08E327896CAE4AEE60F860240EC8A89C03E44E2CD D4E767F4D457275E3F7AD41D4983D7C6BCEE26E6A7EBAD234DADE81B2C98C1F3F396979C 04A4E00E6F4AFDDDBE9D9EB775D1A1EE76399AEC7D30D3CD09AFD73601ADF5593B56D0B1 4471810AF628AF86D1237E3690509FBAB8FB2F4D041CDA612467B254CBBF83780C60C1C7 AED265168AFC379F832EBA6D6DFA2CE6FBE127690B37309F6A613608BA98A5B77E9ED5E4 E7C373750542C245C20D10035D1163AE93970F3A8CCA7B5A57DD0503060637DEA1CDC404 713E1DE9E328DD8D902D24E0C70B17620EA2217B7E51589626FF6923A0D76DE1B480DFC9 CE2B7BE62919C80623B7E39BBBE748E8E70242233CCCC5899AE70F1A3B380418564AAB15 E4CCB6BE3A9329C58D8843AA7D287D851168FB531FA694CAE2B9D77C13720A9499C13D50 B4D6AB2A5BCAE592D465FBADE34CF7316886A7287918889EEB7FE26AB47B5319F833422D 803421C29FBCCF0D64657D945676C968938B633371EA7B3114BE2C23FD20581CDE846A7F C5C57C4A4BFBE5A649B20E3756BA94FA8C45D0542134790D6105890BB01C961ACB87C761 743FBA8F2549015D6B171EFD0390ECDB7744E185BB9D88BA42C4CCD61CF9AAC20B6E4C0D A70F20091A75C9250C9F9287CDDD78D39400A85D28C70E38B38D33903E7496D3EE1FE98D B047C84C59A60A58DA8DAC47A058A825544C1B4F4CBDFDD99A04BB691854A20A773544DA A39EC11B14C864220F74CC2307075EBB4847AFF216614A471B1B169DCFF4F89FE390CB97 46089C958316DEFEDDDF9F3BE4A6BCD0423836A7AC3F7A29CC863418B703668188C962D3 6803BCEF438B47363A40762165AB9671A46F9253DDE8AFC38DAE53F7E34230ADE2830956 F5B7EB9BE9E0086B7FB715173272B381B494085744ED8F2EDFAA567E2DFEC2861A231157 818D7DC0898DCB8B8AE30BC0F1A65F018BBDFF3ACBA4436B5E824B6B4CC0F4402856E259 F1D5F1C770A1589A621F9747B5F7E81908016DD977ADED8019C39BF5CB9AB35CA82CC83E AEC842F6913929F8339EC1DCB27A53E3E1006174E2C8CBE4756F6762395DFB5AD85947BC 63137E05269807A5958D5A346528162B4C1B485E858DDB2ED3AF35A0485CBDECE9A2893D C28B94DABA77498C26861FEF72571B5B66477862642465030FA5633E47B24BB8697E5A20 73945D8E2338E554D66EAF307D9035AC9678414E799EC56AD03EB72A72B227DC18C3B27E 8AA1679D14FFBABF22FD2EE80C94AD06C34FE7F7597A82E1EFF272F2FCD72AECE10D5102 BA8682441BAB1E8DD83EFAD74757A96051DE07782FE7B7D7BDF36DF39A434E59F1D2630D 93B66D1AD1A9565211B13427A036019C538D4C4314905257E8FEB31FC5DD316F606D7BFB 9CC3829EBCEAAF3722E465C60AB1D7CBA1D2D229CC28D11DF8FAFD2169339C0B61AEC73B 6FC855B5567FBF05D9088734DDD8755700C80A5C942915811567F103D0CB70611DE63F61 9B2908AEED0B33A1CD43A84785FF49EE977D5C45E1ADE13672FBB01DB79096DFF6036904 30B27DD8C0609AB745C238EC6F73B1CB8234794DDD9E1A41681CC004362DB2A97B8A96E9 C981F7848C4BA5ECCE7CB87713B6B7C7CDB7450AFA5FA6719A8EF035D672A136AD494139 8E777EBDBCA5DC8A9DFD54654883221071167CB4756FCD042891D85E4B2F5F306F39CD0F B2E267665EC0A394A150D73A9AFE7C1098609BB6247A6DD24B01BD3B78DA1E49AAAFF696 D27A53696FC27DA3B017224587D43372CD3406CCE3AC952D73C9AF01058C8EFFBD0C177B 204C6DF2CFC597FF177ADCAB6FCBD5F0267B00CA18311A4250FD04DF3809D4DB2C0E4778 3D905D787362901E1171745B2A66848A3B617F29FE183DF6F746F9011AB14925AAFA1C4C 159C27D3BF8537D6FAA40A20B47745BD7148C698C450F18D0ADEBA3095F0379B7D0B4354 E1BFFF0C63C7D745F0085D7239612CB0E5EF4B8FAEF7C19A7300881206500AC612D0C42C 66F4B99C32AF8CFFB05749260B56B7B425B550C427368E45AB7BB682C9D3E07FAF35DC89 0AC6191384133DA9DCA3F3977243D277E0A1B833E37C4399B67DC083168310ED294ABA2B 6A96F5F1F7E8A18E5C8A95CE1E224DBBFFCBE5E54BCD199625EBB5E5DDF1F2795DD53D81 86A5EEE389B4EA7402B14D2BA4B3D9A1F50079AE9809A0B0A5061764A3320D9AB4B5CF1C 4BCAAA4CB0F2926A46397B9D8F3B3956E647FCF3034A34B6BAB88BD4C53FB84638DA56D2 2C65DB9BDEB68FCAD5CAB7B184EAEC585677704583CE9372F90471EA5B68FC5D1DD702A0 A7668E6C7416E4A5CD646EFD2359DBB7367492BC0B4E6BAFA13D3D3975604E1A187A6E61 EF6087394EAC2F8FA9FB4C040A994545480329FF5FF9B4727A39356F8A4043A74A9A7E2D 250826ADD481F91B9DB916A9FD5FE4469A9861A96BDF6BD3DAE13293B9DC2A318A35D7FF DBCD241F2FB394644895A3F53C457C752A72E8167E6B7D4495B3C1DF0EC53127509988F1 49D6C49CDA35B00652F148D3CAEFA3EFD8954E80766AEFCB85953366389FD4DF6D70E36E B321BDB176FE7B75CC31A73F4DB7BDF5E0B45C23FFAD7B7EE35B9B6E9EA4141F4F98430B D93BE0FCF80D63D7860E9B43D161DA7A68C2BD51E2E95ED7B54A91466D0716603CC41E83 7004D94DABC5D971330DF98672136E372129A77CB496C7200FE3E287F7936E8002B54C51 25B364B6E07943A078E2C018678B7E159C1DFDE7633CC3633B38D50C54B98B45DF4A972B 93B4B4013F8F1EC0083B09F3FAFD2CE2B2ED5791DDC0945679A122F21B4C5D67DA6E5A5F 2A5893AD3AA7AFD891ABC6860F14EE16DDE548520DC88C2CE6099861B038EB25A01589D3 2F4AE37FAA4D171416651CCE37FA4EB8D063A0977988E50F9036C0A9C8E99E6D586EED28 E0FEFBE7406386EB9FBDCBD8DF820F6371C99C6F7A4F2E3F43FD2792A9A2D3F81BD3DC6E DEB59B1B4DACC2F278A0C6C1D3B841A73525F311504CEFC8538CD53C487F612D9045AB40 8B8A76195907E3B679CE68322703C2F80A50401BD44BB5D14080A46F859075C9B51BF0A2 C42321EDE4254F558FE33357746631F407C16675320B8DF3E24E0FBE2E93BF718CBCCF5F F21F013313BAF474F239CD0FE72EB03279791A95BB322DF5C4725763052185CD5CDEDC76 071B4B2337B406337237A2A6490D75598CF6010D22582B8A12871C17003839A8A8C42E92 EFC92B7EF0763D7B6481965F890802C7AD345F2FFB5A444DE404C833D1D9DB1CEE2DABB6 42DB540CB398BD2C16A7383E649A0714154E72D94438FF904755399C1674F5E01CD45590 CD04C4FE3292356650A3D431D7600426A1475B5919722726468C247BCD565965DA6E4A83 28644CB1FD2A23B1B45F74E6B4BA9AE065BE873BBB80505D16D54D9DE69026CF1DE8DEBD E472F067C70CB4104D23ED0CC9BF68055283A6CC2AAF48FC59A580DA8597F95EBB8F61FB C4F6B12FEE888AD60897383AB17D227C0CEF95E86F149ED6B71C2FD67F5A996E8B34C5EE 23DFFEE49200A250611E32FE3300AEE9BF13790703B6AC983C965F1C52D2BE0BE876D4A8 85FCE072D5D584B12CF2CF91BD7D7F9EDA1D6FD62F40AB5682312D6138030FA1EBE9B194 1DA4ABAE5A781EA979F608C6F0D5481CF48AACE9F79031574204447596555188C3D6048D B9D7D8D1F0B67DD5F3468E7C7B647DCD1AC3B3C95E1DA6DA05816B49DC8BB86E85C0094C 6C9A703B88F020363930195842A753EE42B4BEC13B668101203BBB7D5CF7E9C3E39716B9 85F4BA374147BC7B13BC2515C8A500596D35152A102FA248B9E30D6050C11045B9A81213 7C228594EE2725F43CCE59D3F1669F0B4722B2171811C2A12B1905C0B40EF1B1957731A3 A20D29302DB48D061351430549F57084C31D008391BC9D20534EA98CA6F951E00FDE49F6 22913C19F44E489CF9A80274B43CA60CA5C517C821426D5BFA185649ADC0F1AFFE8ABFBC A0A03CF0DB690CAF902219A5580EEB11DD3ED650979550454929EFDCC32C7E8418B80F54 F0CAD6049E2EB23D5DBC2D680772F03E8F3D19913E6F771AC65C1575AA6968CC6857633A C2520C09AE900BA1CED6C5C21C2CF8BCA8D676A539F22DFE03B4134AA8181CB38BB0F69F C83517AB3AAB165F2A1FA474E067627199406D26881E8066E509D3C39A1A8C4BF99D4D46 922EEA6D05F7EBDD33A33774F24A650B9170D2CBC9A69317CF90010F9688EC72B3DFD2B7 0EAE5DE97C03A5CBC355E8A57F7C36D9AF8DA95B4A307965074244B72B5689F6DA0FD360 DD95C184A7037397C0598153F96AEBF3E059B042A3251AEBAFDB90631C7A7E52C89E7623 07487D51B8A019BE505E4078DF87A79565DAEAFCBDCF4D99E658A3A6F33C252CC8FDEA27 CC974B91269FB2FD905A619159300A0274E79C1F52ACACBF68E03CBA15523A0B2081C739 3D397D3D4BDF3094FBC5D20852EF7766A4C83B708E2F75008756044AB2B55C57559CF7A4 636F74B49D18E81057BE38166F87DF24C73B337533DCAFC8F7D4EF0A3C4C6B82E9BFA3E4 F3116E011FFC4A89B7FB72CFF1B0229D6D578AC85DC6E6C3CB956193689607D6D7A48367 0D7C529E5C5C223E081E3C6F1F3A2B8BA8EB5C4DBD19F9A5566694EDDAB69837B65C8299 63A95E321181E4BA0B097FBDF72647838C8B49DE3AA88B6F755317FB1785E12DDA71F944 49D3D1DBC0C167B3793747D9D6EBF6FA13A74FE1FFB6A2EBBDDE14A21040380DA4BC9088 C60ED587EDF6E2A00BC041990F00C7568373598310FBB5FE87A1656E381A2C449C63B236 5BDA6D3C51D1E5A1A0ED408221B2FA8397FE2FC992F990DB3E772F3EA54CB468AD471FB8 0FB1E1A9CC6444B98D2993F5DAAC9B5CDE3ED8AD6FD8DE80001DC7D67A09B39BA8D0B35A CEFD510CF34838F06C72047309CFA29787631CD33E0E4457DF26244706966FCAD9A90668 A155F9BC4214693A80C3440F56C2A01D87AD998493130C344E9560A88F9969585B6D2D4C AEDCA0D1954D6C84E0F717C48548C60B39D0013FC95E3DA0C13796130F3E0D8A240F8ACC 4BFD93D26A7185DE5AA0C493EF230D0A5EB0DDFBD49A66A61D814D2D03EE94B40A25F8C6 5F615B8C4402B4FFF0A882316E9123C0267E0773E048658ECF5C0008EC18976EE2F8CB4C E5B4C17F857B83E16622180B70F0433488E58826B39221566EAE2A9C350177F10D9737CA 6ED009C263E3198F02D7A3514B3AA1AE7B0BDBE901D84DC256855A3DFCC83BF51C9B3CCA 1FD2756DC6D54280E164E942530CC560BDD8FA6AEAD30EF5BD8A4A30EE5755C7A4D7C550 F0399CCEB87FB781EF298DBA53BF7FC3373388DDE9AE21AFE51A7EADFE83767E8A112DBF C595A9B0E833CE7F8ECE227028F10E36B8147340F6C0152DADF434AB60CC64BD9158E0E8 C30F38FD0D5D7573D43FC3AA9403BE945DF46D040AAD91FF69D0B0FDDAF19EDE36F089AB D8E00D8417C463C1CB3292E6AC20CAF026C74FE0F97CF8D7956678D1A104002A68D53664 A82EAA93112A3BD2B55113F37E8588E78C0429E482259A2A0C11F745A74429FBABB8A53C D40101CE27011FE51335D3417E41ED1A8D260EAAB7C3F118B426DF541FFBDA96C4FA9859 66B99AAB27B4DBFD28304F386879C6DF62242B689DE14BEAA08BF07AE4A38B203B024F88 808C5E227B6AE750142874E5E59B23AB9B36025B6D67EAE9B8DB60B9A04A388525D1F50D C46F8172AD8DACEB870ABB56944F916B492DD6E9D296049973D661689E8A416014D4D2C2 782EAB49362E9FBFD5BD6F0C95F243BE717535005F99A22FF28A7A02A5F4BA4B1F505449 61ED383753ADD0D2952FA9313CAA827F3D8F8977C98D760E4BBDC134DFBC0A008230D337 35A048B81A94A8CB7034DE777595158CBABDB648F1A2325655EB64B42C24D190C2979F9F AB4C9DA55299AEADE3801F9956E3C62A77A16746073EBBD364AC634B37671C8F153B8EF7 D9F110CEE184CE3394349EBFD88E43D15B309DAFF263F4BECF1C581FC4CE876B68D3F1C5 EB2F001FBA2809FDC3F834833F39B74C9E5018C8A7CBEECDFCB121EDCE0282988BC5BF4D 156D91F53B4EF6B9FF7D95CF1B39B679F06190A10C3FFF40D461000E3F8E422AC042148F E12B5A776BB1F15D44D41CED498A9AEFD2CAF59CDCDE5C4158B8CA1CBDF4FB5AE83D99B1 A39770AA15397D85F77F42846B0893AE39A0F4612A62A7D963B767DFB1E92A0B73FC65CC EDBAD8D74D2C24E08B2D551538DD954D94A80B92E897E8C10D1725988EAF003E9BABE962 2C9C8D278A6BF1935574C80C6815BDF0BB7011FBEA53A59C0C45D1978A1D3E6A7BCC87F4 2C5FDC7886044CE5798F06096AB7FB360316E1BFCE3E719A1EA906E0C5949E00DE7AED0D E6C25832D30CE1867387C8254F51171A9037C8CBC6D339B4647E9077D605C13E30324180 A433FF9F3A7BBC3B0B775A860F7BAB63D7538E2092F902F019D29FE8DD198EBD85DF0564 D39C10DC176F698641996117778D7F899153CB26D568C057DA39FBE2D21ACF39E0756E16 7FB5AF562F190A7B940A8F4BFF98AE156D74CE4C8CEAAB103FE6F06B7D578E5D7675DBA7 27FCC0B96031ADF2D3F204EF9DF63D8A4263EBE46B74F1A2CB67D620FF5B2585A53C7CB0 DA53F6F219B277BE9F8735014BDF61936C3377A6D1348D3C670A65CD057B32DBBFFFF5E4 D830E9CA83BABE9298431F93884E2083D6ED6DA68A30C7372539DE05E8CC9DD8A748C810 462687C6B9B75B305C3A31BC32A122365DEB55AF6F6D2BA9468247BC0853E7144E46AAE7 E0D7C76E8BA15289ED307E0943F5E3A05F051AD2C2EBDC7E2BA46F91B4CA94308D1D2FF3 FCAB4EDDF761FFCF83C23C979E4D318A51A26424D78E5B215EA33F04E1BE296A9693F065 9309FF404423775875D73F230FCD5CFB1AEF0F6CE5674F865C300105791111C1AAFC98A1 557123E1C34749937C8BDE11E41C21B1B0FC53E8C5D199D3289DE09C7D7A95EB23D5192B AAA67A13DABCDDF6C48115036065984276B126F294D6BDDFB90BE9319F3A3D031A22BBC6 05766A7BC934472D23812B37720AC3403189F34F2CAC2B674B04D3B3B46B6662B1C2489A 2964D8EE5EAAC87A8AC7208E5E87358DDBEF9EBB52B96102CDB82D8BCC5D8A404DA247FC C304D7153187BB579C75F71DA411E4B0FA80D2131D11C6BD693F3AA001FB349FA11B5FB4 9DDC4B2A6443A8932AC4813795934D61D38BAEB1847EE5D3A7D01708524B3933B442709E CBF2D39460259D44CE01645BCBCDC2BB9588C855936C6100009D867FBDC902475BB43DA2 F7A309AE56082F18E670A25BA12213EB7D9BF6679452CD4814353BC62C1ECD5E1A7C50EE 43277A1D5D124BA9F596E19A29C24C234B1102893D2BEEA07F22450E26BE882D0FDC2AEA 5457AFEAD360063AF6A079958A343F444DC6EE7126AB88ED079C0165CF95765CC52DBBB7 3CBECD85BB4F1176C4608201A6E2D3FA69C439B4AB2A9D5441F519DDC85C35C2DEE504DF 5ED9E958F768E9FED68D18748C8521FD6163FFE0DECF1BA44B11A261A4997D13E045C255 0CD95881B9BC5D65A7C4AF0DA73A637F4979A3B54B9857402738B1E9FF94CDC075F51817 CDFE1DC677E938F4ADB9E4CE4DDF4F12EE6C72352175B8389F39F84181C189F1BA529E9D 8D84B7E36790C1F57CE2117811E986D00B58EEFF6C8121934AF2FC54D09C486A5D9CA8F7 6887CF4D7FE4841F3222F0C4E4F7D92C014FB4D48DB83FA87C243D453915BD6BDF5278BF 1C16090730765D68AD17160744DFD19AC8A754915E669074D4F3A9A1F37F7D720B38D5E1 5D734093944BA853010ED6C6CC7D5D885D6A1366B2FEE42E54718A2DC1BBD437830EF66E A0F540524597090FC7C762F19C3946274500428C3C3AAD98D9611484C8CD302D64991438 1F7E531BEC859E6D6624ADE92B17C4D88AE651E49658CD23840C404E1E2EEA4F56D6725F E514D3AE47AB1127EA69CE677705C603CAEB0DA31233E15ACC5D78ECBB90DBA3878F19FF F2A62395FE3B8EEDCCBA872A42334251BB515C34F513D2FB745033E903863C24A7F8A47F 0DE02964F1D3AA92E60BEC967BE17A207ACCC4512B8E8D62E767608FEC0D4F0C6D339364 0332BFDAA278713788075972FE7B5799FCCA94BDE4C881CE667C4B7D10F1A4CE65766CC1 F3486E0F23DC940A93B3D88EA329FAB54F531034113FC7970DC304A20FA97FFE7116C6D7 1504BC0FED9A1C8E617AFED697DD3FA441CB5894D783512E1FFB859EA5686F64381EE1A3 471572DA94B4D7AAC35E3E77EC8ABBB310D46A70C5AB691B050019B1408DB7D155AD3F75 27E8FEF1F1492E8C96C96A0EAA70AEE119B244995F1DDAC5F9E1B4EDD07AA389382345EE 2873FF17B725037B66F7B5B3CB74237808E8A1E8FA6B597F418D62D174E716C0A857219C DD489083E9086E5A3564A8D0925003BB0935792B38A458F451CD15D8824E457132B50F8F 1A486AE2AFAAB124EB8D387A4AD23B552803298F23AB33D96547E1A028FDEE361836B59B 879F544757214D635D0AD01C8B8D8FD61B852E3F6BFC9281C99D1F360032349FB484BF27 256B591CAF48AE5A6A1117BFB824F3850E95E75AB6FF948233763934CB18CD290BAE9E53 747FA478BDB6E343336F58D89E05BAE9B912D484171ED576DE30D6516D68FF80CC6BC36B 62CCBF407447126E8B3D6D07DF3C187AAB240B84B5D07CEF0CEE8AAD28DEE446F321C622 0A7E0026C64802A9A006887A170FBCB19B4C29CE1D4E089F5193171CA3D3EBDC1A1286A0 60C648D24BBBB8791BC400BFCAC653A673F4C3A59C44D364D408B72437C06DAD89512F6B 9526FF964C3B2646DA7E34E3DC95D2408ED3816C6177133287B88C896EA7D575D1389971 2A9D3A2E689C003CE2D5DC4073ED052F37A3183BDCE5EB3B509385AC8268DDC54A33F8B6 865FD8D63ED1C51B89B07DFCA39914F10AE7233C7A62EC9B83A8C6E3CFDA24528B1D1F80 3C74A108E7239456B412EDCDDD5995A6E56535CC9D47E871B0CF8B36BED4818FDD112A70 2704D417B79347BA3CF24A1B116937BDCCACF86D8D4C544AE863DA44A29C308F740F5DD2 3FABD1DC281D722590624DAE38EB4A119F5F271C42169287D8E37D34EDAD684EA20CF29E EF4B6BA4D65E41E9E8BD9EF2321C2453DD84C5AA056017E7F5321A3C11614D810D0095E0 5DA9C4ED65463C672FF360E0104F58A79D7C399F058A9C6BC6298AE226E06F294787A1BB 0EF6E1AEF499BEE46F2AD81296667E2896098DC7535E1415E7BC0C3844E308807AD7E5ED 59EFB26E2E6E5FA00B7CB6B1A160DB111AA0072ECB249F30A29643BE8F51276A0DA7ECA6 03136C0147C73658D218BAD2A6DD880C62186178E527901CA62511326630815850E0F4B3 7D3EF6B96BACDC9EAE70FDCE411297A167780F749BF79652EC2BDD4E620CFB45B8AA9AC7 9BFDDF782E3B3A6FA9A0B20F8CD7362AE18479685828245B6069F437171A4678C6C1547B 5E4E998C8835104327C75298AB50A6A0D2ECFCA02D466C08669A93BDCD3BB186F04770DC 6AB7C774D2258C4E8C54D56C4EC2FE59EB24697C8BACB485E4DC203630B052FE09D83C97 781AAA7CDDDD22804591A689B563D318FF5D269ABFD3278C345F6028127C672C3D3D8168 5739CD11FF84E88C3BF219A41AC1C1272BE1D130A8D01EC18A83906CBC0E02FB4F430026 5FC5E19B6A5BF67379EA2AD989A1BE64B8BC230CCE5E6782514D465C736B904F42D18417 EF0A985121A8B155C06E1D0ED8BB3EE89226D931C9A8A0F5E80882DA98C72E346DEA25CA C3962B6C5879B6AEA1F91DE7FFF9453F98FF1FB2805B21994C0DB8DCCB8872273BD7D964 EBA87F2FFBC46DB4FB8FDDB5840A162CD6F6BAF0377B43E5DC9DF9054B1AF843D5A4A38A 481EB2DCF93C088FB019F8209BDD37502B8190281BA5F0A91171AE14E313617E74B751AC AB74070193E0F231497C20484851F0182889D77581BBE0B1539663F844854D59F93CB6EB A5CC3D2B3FCCF8D6C3758F5F333033513DB561A9E318F599797BCF0FC43391DD600A91F0 B478A983687DADDCF974419A58F98338D9FEF2036373B5CAE2CCBC0169413BEE50EA39E0 AA6E922F751B981FCBAA8702428C7FEEC0BAA712989D5F1CB3692F5EE3A014F716D42CB1 42FA136A7ED845F781C18C1ECA0B6B10699AFDE08BA05393E413BFCA01C7A097933F87CE 45D7A7339F2793483DFB43A26B277C5B5D5A3A51CDDD80D0D6C1FA7D16E03DA0F7D86E50 85D4516BEB44D0AA911A7945B244CD4A83FEC04985877D15CAB67EC734B1749D837AAE24 1832A1B555172307301CF5D25EF9DB48B9BB1979893FF637A3C3A86A6D1688F0B45A411E C8C02AEFA1764F5BB2423707FAE1439295E75E365785FE9B9E5C485779D124604AA59F95 B8A4025E3D8246CE7AEB3F659B0309C77B6D10FDB120F6A4DF76EE00EF3607EF9D22EBAD 0DBA789B86339482B98F91CB29598365A5E735EA4B7AB18AE1AA8AB8BFCB207C558BDEE6 F6865D10C8B3487D342C1F6E74CC0B13B522BC054AD4EA9EDAEA215359465BB97CEB6F7C 657ABE5577BCDBA7DD3A61B2C99F552BB70479328AD21F95C8A1F98D019CB23B6EED8808 658742B1AF408ECF70B36ACCD4F06E4D160EA52DEF62E9CED463FB758C6121724B6E31A3 A097A7D21B0D5A021B28FC000C68F6A4126A5418EB129AA699D04482EEBE82AFE18A7D3D 0608E71F5899272A4E614E34005578746F6A9D082E29E2F03EF54E9F55D393AD28477E27 C780AC02449FDFE3314490520FEBA7B38A16E94A302569CFF6958FCDC79561F3F93FC71E 14E780E4F1E9DA30A9B1CFF569368069B140F5B8E67EDA15D0F25404A32362327A0FEE9F 9AE430D517AA8465C72E9490C31153E3528F08843A100BEC4D4BFB6C5E87CA088D4D4C18 2E398D02AD5D8007CA369A83881AC0C886E72D91A48EC085002017066262AD81925B365B 7E594F3DF58C55A9DD737F2069BF951DB68720AA4043BD6F039AB927F7149DDB7830AC67 293A70B6906135DFF159B352BE8AE55F1D03AB3BF5642CE1B1A49F773FFA1FBFCFFF851B 3DA54CC2A5BCC6C2EB2BC5CD41676EB08B727526CBC01FC9C7A076A5342BAABD5341B6B7 3ED8A27013ECA0861430BE51B07CED3522A6031EE04E74F985F10D3776A206BBA86FD199 64B37F1A8998F4BCD2599A891C5A61C131B23D29788719C15728644886443D12492C87ED 8EDFEC9C5620F7AE2C5CAA568333C26C8866A2E2651408D2BA3B40B68875FE271283A331 F8EACD13FAED2342A5A3A74A1E76B74283898D8B265E0FC9CD3597CFE85FB55B56AC02A7 55298DAC4A7471FE68872B311B690E5BC0AFCAFC4CD7EBB5326E453BB07A94843935CB49 095EE8C7AB1BDFB71011CE6A8AB7F51363DCB97AF77C5C1CF0996F7F1A33BA929E9D32F3 FABF10FF45E9E53A4A80B808548BF1D70383418B57C986341796FC5E1309EED60AD85476 A7FE1AB5AE38258D917F267ADA978D02FA7F44200954F8230FEAABC0D7ED444864C91AE4 4D6BFCB7E09DB0014B6E11FE753C6CF12592156B7946465D1D51C8FDFF1671B9DF64FD18 0680EBDFE37D5B19B60BAF8A1081C8107C0C207941025CCBADF11423B7F09356B7D2B25E 3C8386FA4F41617DE67D7BE0C3790F853CDCDF996CAE79A0D0113AE8293426662D18E2F2 92452A9F2D9B3845FC5B9ED4088DB9CC86886D82FE7310F2A158BD57739A0A1C36A7EF21 6167ADE2542E5124FDD3143D353122182A9AA36A530C96AEFA8ADACF50A5B0266B59E396 AEA8DF4FBB2AD02EBF24B49D4BEBEA6F1555B5515FE3052CCE0C540D20A82D6EAEA1196D 5A2C029DFC79E48CE0448F7A9FD83C7F107B40E55383E9656321497CB2742756FBDC2646 A850AFBB90C1573979B32A29CD3E1C7A3350C9E1727E884CA842E9C60601092595D44011 BB4F24E8A505EEB5397445011750A059265CF4212B4A5EACF7CEF1E922722B365987886E 481215C980DAA2114E03DCC02D1BF8B29098F54733B3090E4DCFF294E01915AF5AA3889A 99F6656F8BB7DBB5844EE7A9FA0FDB8AE67A2634BCFF57B248772F9B5F2E9CF95410060E 22C51E6437EE48FECCF819B1655F052CE6C6EF2175A54652EBC6C38F7BF60799733741CB D7E030198D32B9956AE908436200C6EFF6611568EF351402A3EF854B0736390F7A16B7A1 50EDD6E39B2E0D42439FD75C1D0311C8C45138AEE49A7DA2F742AE3C21E19F6ABD62198B 6DC17A3A315AA746961425A18051A0C0C5653D40F9A6D3A542F430DFE71ADAA74586FA56 9EB935247FBF47098C4D85417C0A3C6E567F7A65B7C23C1060AFD086186E394896D1DE26 9244085D469240E8391ECD7B219A887F01853AEF9A3191AE70D8D11FB13C7578348599D1 95186180E4AA0C3419322A318487A712CCC0EE9954C87A6FF2FB447278EA942C101E925C 95DF648D275C836F03A4D1FA85144C7D57622FAD6BEFDDDD7AE2E931D430E29885E83E81 4C7DF4DFE157A423A163E1372999E34A0689EF8F66EAFA66BCE76DC6CD5F3317BC7801E7 F090410D2AB40B640777C30476CF9BD7446A9860594FEA131D308D9AEF8F96B7B8731ADB CAAA0FB8585DBBE770852E8A76A43FDF93FE9566F81A02C2AAB4014CD74CFC1682F33686 418EE5FB80C2DC2A155F16292FB6B5C35B230038A91814B625EBEC0089B75E7F3019490C 32BE5B78620FEC427B756A3A8085E42ED93304D80108A5D957E479933173EDF77913E5AB C5B84133CF6B09FEAAC3A41068883696A3E2FAA73FD401E4A5E58F3F7258207159970234 FD586D1C34EAE89F2213B28F3597EEE1C0D11CA93310C8A294C88119600944A539795B41 E332CFAC0E578B7E9E9CDB291FAC7B0CA3C125FD3D783E4D955DA04AF2EA8B5C97869104 84FB27D05B95C8C8FA91C84AD9BE171106D0AF6AF582343250BA953452E1237EFB0142AE 5837EBB076D5C7B6F25AF4625465CC89B27977E6CB71AD1D4058AA871CF3FC749BC4B87D D7F75D3D18E455C67705EBD876D9073D828D4D083ECD7925822732C07E1581B1FCE4A337 EC7644EAFEE206C62C1A64E10F0F1603CFC09C98FC36E61A59E9DF4C1D410BA2B775C44E 91001A452798FFD0954AD15D9D20823B52740716F40354E503816CDF0EDD7B6B97879260 1204972E0B4F8E783317388D31B2DAD3132653A0585F9EF80BA68093A79B773836CD6E62 CEF409A9A4007D3D7760167F0719F5A12DACD27BF8E0903C75A2BF680048538EF924B616 FADD681B2E850B2C6AF69E86C491CCB41F8F9FB000F76155B651133D09135EDE439B6A99 D4B35A49E2AF4F82A369ADAA500C873732664D50879258A9C663196BC29FBBAF20A7FC9E 7DC8904DB9536C92E45F958AD46C067DEFC27FDCB71A7A1E2391FA6B6306B71ADBF3D6EB 1544F077E38D93C9ED11B2CE62D3E94064FE75DBA762BADF76E071BCC5507244670FAF79 F5B0E11CD72FDF68DDD6C03E6D42E4D505F88554662BCD0CB4F5A0A33CAE7BF80854E715 8B4E020F2D7517F8B5AAE67675E7518C6A14F00938F36E23DA2172719B351F0A19CE3691 12DB35771C4EC37F61669D570932E14B82E3B419ADBF6D0E201587E0DC75A1DEE6262DC2 6EFB9A02174CE7C7BA8E626ED0BB8732AA3618909F69F2D4147F3018494E22ABDC63C89E DFEE86E6B21DA05163A32415E6142528918A6936F05948C14B2E34FB4694D5F664AA766C 5FEFBBA0F344FFA065F5394F621DB9E6427EA543BBAAF77515D7EEFC5186ED5F9EC74A97 FD1663195D941CD67C91A5217C8D5C7F1BB848C6A3BD03A2BE6A48C1B2E8BE247D02C01D B04A994F207D25D5FC46939095986DDDE77FCBF9698D3748D12888D33A7E429AE13C8194 D624AE196D2F1F384F2B31801B2C3FF3217046A5E11890FE1D63DB4159CFAC405D657BA4 E47734669D01E953B6702B972981C08A0B028F5655F7C8BD1DDFE145BA1D57129CB9D5E1 8996C0A0E01285E799F4753CA5879F862A765B6927D7AE8FB474E8169708E1D30E2780A4 F6893E46DA3F20CBA50BC6B8A310A9BB06713EB126961C97A9F2A4393D663E078026657C AAC7E6C723215F0FBE58AF074418AE70EC0E710C97A1CF4A0FF853A8051F18BF4AA7DA5D 5B52CE39EB779B75843F14E7736363EB213F3DA581741C7D21D8DC268063C46E97FB0B2F B525AEC2C6F2D25E0EC43F91225719B4087A92D3A44DF7B5333C64B92862755D5D9566C7 FFAA3554AB50821AF913213B8738D8FBEB7CF5BDC7E8F191EB3B66A8AC1DD9EF0D5FB967 B9B1833D8C67F0B6AB2A32F00D20FA51E841BFA6ED035779536EB6EEB30CB751C81D7270 FF877E2A0EB624FC8CB8D40830B9FE2762FDA8F5A861A0006CE1397598A712DEB751647A 2E5AA196BD31465961D4CFB2F9E8C5C20BE1C92592B3E457CDD05B11DCEF03127B494B8E 4AAE645ED3D891973EE5D633A24B19B06B0F2389FD5ECE0FC1C5091B8334209AC3DE128F 8772D373142113CD296AE0DE58B844496A70FBBC89C09629E095EB1E36DB8E73155735C6 A4029C1CB8D935F3B563F68AFB6D1DE6D40A59A1F7092466355C7C1A5C3792353FC4A598 73E5DB876C029895CC933DA80DC11368BB19DEA413FAF2F7652AC6A18ADD92A7D647883A 4201773313B677A7A1D0F4985FC8714CD9632C8266BF7317E557E79CE1EAFF26C5E19F95 698799264FC251C8382158ED39E613F3BE87660A5F1F2C6F7D9EC08A901E4800463E6498 65F2FCFAB56F971730824AED3970830FDF3E57802A4CE2DF1EC509522D0FF75EE464A502 D77A0E9095DEAA555B6EAB3506F2B13B817B60AA418891969AB75873FB0553874048C1F0 0A9C61105A9215572B1343571CD14FF0AFA30B040AA95AF309F412692288FF9D941CB245 5B8FE672B4E78D6FDD3AD9EFBE0EAC354C7AD246456CE0C8166441D72762B6518B6EA8F3 15898649D17F406FC07C50F87F04C9DC12284D655F3A4A14A3D55E80E2D3D054828CE8A4 2E33D9963903C2BD11AC757687014D2DED8D1238BEBB7260A96D973B062ECE3D429BEF7B 63B4394A2B1DE4F56D0729A7956030F8757762F13A90E211B7B245F3E968446F5AB19621 5C0A0F6F13957C0584357FB760C68D41A89049B5FFC42A021B1AE9217BCFFFF0063877C9 4E884FF624D80BFE56F79CA93EBD70844BD30D51D57E19634287881CEFF135EC18ED3873 596C7C9656B31BE31655F2630934492EE1FC3E44B9607F1AD8F4E162C356A1383AE4E797 0D2FD92A69282CD16663B2B9D199702FD3CA9B6CC7FB12A7A0C2713B3F5E81F844BEEB2D F3EE1F31BB05BF57377B9356B776D84711164A49AD69C338D8AA3EAC2F616E735E5677FB D54A8140DBA442BFC8CE397B2F7F200E9B8AE8417733F90B2ABD1C70F81259D944090B92 845767E935B2BB7D5181EF5B3D50FC31585BAC37CFA267B966DE999D3B40B2023F132ED9 C72F827C28D41751D67B98ED61FE3E611A4AD1AB2C45F303677C79A49F774F710004E604 0AE91BEFC6C8DB58218637DE4923CDB315E941E5E124AFED06CBD0B75484B7B9DB3179FC 5759BCE19BE50D07541DDEDF00C0BFCB084FD3BDD10C4EEC22DB607D65C29A6D78178AC5 AEF0CB466EAE31EEBFC7B25B2AE157C69BC0747EA3222297F4DD937E1523B9864B62A666 A4ABB9B4B3A908DA0C37059E847AC1405D2E4246A3CB9AD3B39BF3BEF16D48F769B69422 7D6743C49F6DBCBA1113DF16B64272848F092C34103B40DC3118AF1CAB1E743BE858404C 3A9831ACE27D3DE50EC75F982D9DC1B6E34BC678A07D214B0A22AA146AB298647927FA54 222DA2AE878C8A0FCFDCBF90A76CCE2D6CD623818121598C31D0485C900827C91AB17ED8 3DEE367788418FA250F9841DEBBC95114D82CFF93E8C6164C65CED77D5DDAB4F65FDF19A 26FDF57FC3AFB4F4D155B1AF747A668724F1E2FBCAB941987A17D4B455A74F4E5DB5BD62 496B197DF439701DD993EB50F92D161ED2E37170EE2D1DFA169C2AA43752C765FAA87107 3DE44D8BAA93E6511DC365B68157C81C8F3DAC8C624E58EB22CEEB668A058E23F3DAA93A D05C5B1DF3DB0C88D6FD40113A851F1387E9E2EBD2460EB7FB642BDF4CEDF1B22DBC51B4 2DD058AEF2CB32B20A30F1948A363458FE07B146012FC3842DE485E687408187A89B93E5 FFBE019CEE53E8A46C3BD54D12D35DD09D638B7033F0E8B48CC29FC898128F2359AEF423 192C75DFE9EFD8FB5CD2ACD71811F5B8BA259E9F4179CB1385F85C9B1CEDE79C47ABE400 0ED992A100198FFBFA4ED40B9B55FD2053DC49A2ADCFF0D18FBF9964BB2976D676FE54E5 5051BF7FE08C5C70E8AB9A363F98DF09D22AFCFC8290E828CFA5E965574043B310D9A570 98EC92E2876DDADC2AB52B05564EEF2A64AE2327DBD80795618500D96F296E178CEB3042 F1BC49CD8112A5A373D6A72A8248DF6D682245A134FCB990F9FAB1CFEE41DCCAB9CCA831 2B833D6D21BDE04BB26F445093A8C7334F58F3B0FE626C0832DB7BE2EE788357695F3B49 FDF2B8225E7ABB6FF7A51EA4F03F3F4CA1BE00F70D74416FFAC47C4A8480D12FDBDF2450 5D53A882988C5747FD8729FFD263C88749AAD3FB70B064AF33BD21630FD5853FC8EEBC7D 91CF02EAD8C57CE136A4B223AF4BAF7D7C08BF31F1718318BBFA9D416594EBC59E8D0BF1 A2AC0249835FC1C274065D9A28D0B8D751B9677FBE7D970771A8FD96700F00A13AF76158 AB7437F5EC667D32D8287ECB8A1794383896EA4BD9AE047EBE471A9500E94C3B9EDD0AD8 24C9D9DAFD1F058929D21244D81A276712454324322A3CFE36FE1CD8172F502F427322F8 FC8ABF150BF749B132A9E93FCD99AE015F1D75D923F9743C23F0F2264ADE0BD0AA7C1C8A 4BDDEDE18EBA55BBC33B3C9E9204B1418D7B1CF592A5707805C13D62C284B991C817B643 00FAB2E0457E59E07CAEBDEA55F1D8FC9F6938509E1A11168539B92705BCC03115D29137 45D24D1533D6988DBDC21795FB59E25850B74A265C47FF6F7A548066FA6203C503BE4E7E 1590689F1A4F73B7B39AD4ED10D89ADA19673655EBE215CADBA0FBD85DF65326ADDA0305 FFF9BE785E52F0797A345F8A49A58A704106EB220F88F27180B3630AA358BBEE6E27908D 512882ED69166A628B32F06FF47D9D05214A4C8728305DF287A48150F2652EFCB1B7CB95 AD2746D2F4C10847800E9EBEF69188B770D583A079C79DA8D7FD9349E925E9A9A30F2D8B 35EE7115158B3B353AD7E4E4E740D93289F2CDBE6A75E6BCC8A0A3221CCE578D3A974521 9C418768B4E332783174173ACAAC86FB61F81DCABA0F46FD3B90D46BBD8F6469C30DA380 A5A356499394FD428F7DA46DABF232202A8A293B2DA79B4933D0790630A57DDB232E9E25 4DA8C370F1B3EBBF9182C71EA3BB243DA9685B9B8C1DC22D73B3BE40AE56B08716D1F035 586556DC0DFC07AAA66F5B3084B7BF87D0AF89BC6AF8CE1CB73B56A39515D44DFADEF15C E018E31E7B4C61B109A6E105505AB97FB8CD2E53D37BAA3B1C2EC25DB055D87245A8BE47 94A6E03B71A5F1D13B6E5A7E6C5594CAFC6E303CCC61E01516262F9BCAC1B745EE5B2AA8 C0E8209C20A1EF19E93222C31B95E4B4FCD0F78F7821FE995494A98BD756FE546700A590 FFB496FF6852E53470E1A5AB253464BDC12CFF3B5DACF8EBB0B99E822322F21999337A6E 5E849866939D87B2F16DA93B9F8CA7C83BDC49A4F8C5EA64E8F8A1C00E0BEA534C499C84 4F39E38A06EAA1102A1DFC0E25643EF8A6245427D8E77EA2AC7B352463671EB6DE8571A3 84D98E1B35C3213F13132FE76D03AA87E5918FE48CBCB8A2F3EA9B1886BB540095D97BD6 188DA701888410081B8BF49C7043BD8C48E18A51042E92B542176964E292BEAA06E310C7 FDBFB496D6B7BA5B07A1D36D516EC19C37E1DD06B9F6F85BF740D26FD0DFC09ABC3D4A11 CEEC922B651C147BDC3124DECBABCC8986F5D48556CCC5AF38F7EAAED9D719B983DE7742 67F8CEB3302B8CCA7DB832794C3C4F0156E72BED47BFA0F7E4B25E13C0222584601BA304 FE38C5E96D3B5E709B6F5FBC623FC9BC36A4C4E8D82452D260F13186EBA95EE4DB5D4ACC 945D0A3C5C1800C1D3198D509F7B8ED0A0E33612E25B9344F1D53CD949CF9F65463B7C58 4E12D78D3E6CF003F9A4185A37ABC6D5BD7F331CCC01540452A36524DBB34EC2FA260C07 824D76439B0059A8127F940EFC1FF165005123C6B43C9700034D5AB9C7FA1AB62E9FD91D ABDE5F3D5C03A771B0554ABE655545E133AB8C230517D51830492F29E86963AA55E9B79D 79013BB52D623E660A4D356C293233B79E7263ECE8F8B6EB3E56C82C2051111F49D45D12 5148AB7554D601BEAA3037CDC84ABA8825658A09C008D19163FE5FD06D56D1A687EBB6CB 1C9812EE0E765F14077116182F67D3006048F8BE549CC71A354048520E66860A0D9350A8 864ACEF55EF91E17EFEAB4D6266C9BAA1D6D3D309073C9DE287BC0619D7E37EAAC4B7CDA D320D993B7B8F387FB039AA7E1F84AEF034E7845A1B1B5306AD8FDA2834B59F18E6F1A09 66221CD9531258458E428EA237FCC45BCBB9C5DDE72061FEF2FDE731706A4C92E5B0B255 49F60FD845C45D940B4C5A4F38740A40DA356A56B8D155477C04A26B747941180F6EEC05 A5BA892A0D8E4638A812BC405E2775EC3A2D0E3C288D0DEBFF53582FCEAC6936C152B8F7 6F9D556F2474BF5ACE2B63550FB94C36E29A8501CAA4C22FDCF908C62012639ACAA7619F 01BF96A552A662DB5664E1DB1A4FDC4E5E9050088D730C8E1F387CBF93619952DD8E23B1 4A385AC6C222AEB44127DA14539A079EB16991F0CA2D851467828C23A4D524CD5AD92FF8 0439F6F47D703E9BBAE227628420C2DE818A9D2A6BF085B5262E026C7A04ABE831065F31 68772805AAA986AD811CB78F3FF8A0FA7A211127BDDA087C1459520F9420CB06AA4518BA A8935A97BB88A62EC76AB2990D8D414392E31C68A91E9DA122ADC8AF3BF4CE550CB1D22E B2DC916E735D19215C489BD7B62B842970214B0D809639706303AE7CA8E270ECE748D283 A8370B4F6A37092EC768426FDAEADFADF8598591AFE55984ECAAD3177973A78EAD02CBC3 F7DB13A7864EC1E7A68ECC54EDE88E7A62A4AEFA9DB238BAF1A22079F23930CBF7CBE82C 2B98E37F28A47054BD47B48637179F4C57164B26F4EE0B484FC8692AADB29EA0C770C789 8FDC78DD58B009B4901A678305A0DA4E89B2152A596E13FAAA822DDEFCAA30BD2FFBB1A3 5DC54BEB87BF96E4C3D25334D86761D7D78C50D71DD13BEC2830A96761CBDDBFADED0A3B 6A0EFC34F96CF540E238410D22EE85AFD0AF104A624D3F9EE5F04D9D8805D7BB502E0223 AFD0CE95C2B32B30030AC7385BC898C282A5EA204957853640D4BF963C97540744F4D888 72006B2239C9EB3390FE16B4C3415F6EC97827597FF791B3D1B3BEE6D0329604ADD0C131 6B24B8544ABAD72B337F00B8FE300BB4EC7372EFE3AC8156328238B94E66E1EC7CAEF9B4 D58DED07D9CC777719E2C973EDF779310890AF183F94254B2CA3277120A03222FAD58E4A ED28AAB3DA49B5ACF246666A597BF2656CE2960FC95BC24CEAC5431F73074538B8715071 FF284765EB54207CA22596B3BECAE73DFC68A4F9A287B8DE7DFC27D0F860771239436FB2 587B07C1FCA6C74A020A819701431808AAB5B6291992D83DC28F2D943AD0DE2D94BEFBE8 A15AFEB7057DD4A97B4C172CCCDB490E6F9FC265636A35A2DC556648B5F9F80D180FA320 AC69A0A61A3954BCAD612FABC12D486A0F2FF0457073F61F2A74345B1ECA9DEDCF26EAD8 D02D3F4678C7AA82907721A828984C6196464440B2255DB9171706819E0BCB7169EB6722 912EBFDC6CD488FA34A5556F28D2B448A7187B1E15255202DC9DE4F609682B0B6D2F61E0 4EFEF15CAE39FD3F6F7B32F226C759A17E6C611BBA79D93186C853BD59D73B19E514D770 89CE29127F5B36F1C0D661597A6FBF85C15307F624630DB6564BC755145BD19088CBA598 86B29328DA2452957E306EE08CD942AD6FE6697231EB43DBD8D37B4ADD0B4D8947A057B2 1D9A133A7DEEB89C1D35B3F49F803700CAE8774A4F9BFD45CE309A4342E3B7DC36B6F76A 7B51A81B70E038E3E4999D6EE027DECBCA548FB5F4DE4C49981D4617133BB3E0919C4778 B80894FF4437120F1035520C75F882591EFD511B6F47C166C7663EA2DEEE335DB1A3106A 5FE0C49565C2AAA0BE977DB611B07D38DC41E6DB8F959798286DC0CE835CE64459558D4A 20DF59F2E8A63E2DB701619617CE4DD55E82EB396D5D701B691533D0B20C3A0C20F5054F 72EDE3BDC2393ECED94EC52C25A755B58F4E2596702FCA68B64DC554DAC85CFD99478701 BBF2A47966CF72E683B5934F0EA5DD86F35B1556026AF02BCADE75ED3C579CC1D9430956 9A53EB8ACBBA2551B9BF06594F66229489319F5A5A94E51281FEF7BE86AF12D8A8A1CF43 04ACD3B27D6B9A574F09E2C41D245D8873A78D1CDDF4CC88D96D9F714FEDE70ACA30B83A 797AD3DDA7D6E52A5AF906CAC560813DB2226BA5BBEA60932640ACEAA2E7B2D412068A2E 49FE781E2544FDF8C762D947871EAA0DCFC183676B5644AE02DB3CAFABFF140BBF755966 C9BD319925746E320AFD5B157C55E3EDB4D0DC3FA112964D68BE2A5FF08E8B31BC9E510A F6CAAFE84C0A103117913E2C9ED8FEFF96B941AC14AE07B1CEE2308E36F617DC33CCF32D 3A52F4F6561A784FF2C1144625133FA8E30F7A86E82F675F1EB56579077EF6AE086BC2C0 B389CDB5C5999A1FF3E51BF766227A03DEFF391312065305E5C3BFA97FE7D5E2ABD0AA7F 609D8A0E524F99B416172F7A0D174196FB411F79A7CA6F8694DF4F5DC48BB58F39460131 D47167AF47DD3A6AF1E12C75D947F4C130BAA07174DC577B49726123F34FE9C76411FE62 8E354B43A5F54BE0F210C7523BF018DB36CAD6DB8063F14FC3FD1B4B69706D45E615C3E2 9F4E1FF8943FA55F1B9B4411BD0DFFA260664CACF3C2C3D9CEEDC1274B71805FEA88C3EC E5BBA17D17E6250494278450141FD4A514CE968C33093FE07E64F168388D141E52E46DFB 1E2A9F4BB5132C1E6FE25245FBBB3B1CB7CF24FE6A134382F9863D4683AD93338D3A6726 BAC2C4174FCF4A523453EA28F2095CC1159AE0E0927380C93DE4B979E26D56881A2647FE 0C46D0B6B50B0CA3750D6974A8DE149E252ED68FE33B26E2F04F06FE6C3FEE1E7FD72C05 135DA55508F10522A7A2D8AB07220E73283F978B50D75FF36E789094CBA1A8E342428B89 3B9A664939AC711933A2A1C425291A9E95C396879EF54BB6F3DA82E88CA8C34E9CDC22F1 BAF6588CD3C54DAF5A7873501EDA6A25B793F219D3D229F6A028D34A19A9ABEFF2AAE4B8 E62A05421D9CC0F78E2709BEB6133A0708BC174F5D745A6CC53E6DEAD27A1E6CD77832E8 87935BB8736AFA3736E4B4313D6D1B7EB464A02B0C6DC3BC7C84630C2E9DD020AF3F6694 90BB8CF0185DF9239E0D27B20FBBA001DA7C30F0DAFC8AFBF45C02019E4AB0AAE458B083 1051F65D0E398A75F52FC3D617A25CDC2EA1FACD7113E0EBA0262595AB5EF65C1D54CB71 BD87CC35C9BB992E0A63ECB8A1448619148ADADB906DB75076E0DA42BC6501F6B6717C62 71E3881CC2D6747D0A0BC7B6B982CDA89E2B9D9870C96A86D3A4E1FA0B04140131F302D4 A36AB220399A6E551FB6051283E405556A1591E402FA9F04B87F1E3C2AD60DE3128EBAED 2CCDAC808AA1CC5E64052FBCDC1EC710A3551B3AD6E21D20FB112543EE0DE94DED4DD8C8 6526F470C83B1DB3536D6DD8C8E021B7A9A82C23A31A6F09E15BFBBEE0A8971B3F471437 F0873BC669016F219A728510C712415C515D3AE02BAD8467A1E0D911448C0CB280C70F26 14BC2E52782C1CE5E79C783BF880D1B914E44FAD64E140666274D68560DECA2194D70377 4EC76B35669FAC269409712901F0D3555B60175AC7799E31CAB70D06EA8D9C359C9DB9B6 A3E02F6923C498617C041C28CD7E57486569429C3E4C89944E0EB150813854E3C2EEC4D7 37E2DBB99287ECE4279F3E0D9D8EEFED11867F0E05E40DB8858CFC5DDBE873A174D756EF 5D5E0D5F251F0FC0BFA7F69EF8D20E34B1B3B5D45501DBDB453D82F56BC6271C281A8A1E 7D0D8C9B920256EF07F4AAC8FE2189485089F52D024BE36045E0BE613F0FFFE13D223B0B 2478A20B98E76A783A98E7AFC642AC9CB333D6D39AD4E08B2BDA75686951965AFEB5D211 57CF3DC3B911A4E45144B3D9D4AA4CF13DA039CC95A9CC8DF44CF17F3D09A1823D65CD4B 29E2408B1C3FC6C1F3980378E1098255136F0D4BF90D0C4C042F1C86D40BB762E72C7EE1 BC530755416A0DAC2B3DA0E7BEEBE7AEA9A39825EDEBD6CA316FEBB14C701BB7EA4F7800 3DF2462E2E429FFC3EE8904D963A0017A606EA0E526EFF1E60BF825B2ED9CB42678B6F6C E55A893A047A4E5E38F15349B777566334153DE574290C6043694C364A3CFFFD07180F5A 44CD991A0535D13C91FA1134BC457A455022614F3AFAB921A70603C47C96B5E466942AE5 83621BA1544F2AABC4CF7C6E8B77F52FE39F5798E2FB9F180E3C86ABAC210C57A0226E38 75885E3572BD47BE016C361E84754FCE64AC3345393F511C99BBCD70443D497D575BD81A 47373184CD09ECD9F4A55F1CB26E921A2B8BDDDBC8052EC0B8CC812CCC2353586B0451B4 791EB68293CB3B4C41B46723D2F138D5BAA8AA4580A5660F0DD13F25BD665D4994908BBB 74182C783EDA6C5187C32B7D5DDACE8DB1571E7061A063AA56DEE4B0B6F5544437417E0F 5F07EEDA1263224E5E44B83CB057BF54725859FED215E5B528BEFCA470C8527F40A09AE0 20CD42E31306D1E9095137CB6E7FA08191BBCD7176B87A372A97671B9CC090936EF7E4E7 85F1C6B541387A701828AD82A958C34DBE426FB12A03AA3BA2C97535DA8526164DCC150B 67442F7D6765D16EBE7FAF904F42A8185DD30DE284916705D3D8826DF1D37E668F9669BB 343D3200509218C5F929E0DFAA7FE3B79646F62835C808BAC29CEF8CA6D8363F0AC7291F E45A85DF8F0B9FC14C7182170AB1F51D9D9C33D8D98713CBF0931063EA95EBB031904EC5 7FA914B7D7B254C3B178E174F807269B2BE5F340A3674FC03D7550017B70C0E53472442B 3FDD4D1D45437DBC5AD56D690D9098D9DCDB17AAE217F73B54BA5D965EE197EEC8823FE4 783FB5A4693273C7142728AD3F78946C0A8B7D3714DEAFED570BA2A9DF9240B61ADA22AE 3F9B21FD1D73D4A474EA14EBFE6AC82B068D08EA2988E7C610EA5097B62DBECEDA5278F7 27824E5BA9EA442B328C3B02E03C88511DA9C72A271027176EAC2C7B6392E9E99D8B42E1 2CDD9991E43099C503DA5FB60E5D4F8FD3CB67FFAF46A1DD243D9DF13116880E727A9271 BB778126C01AF95B75137A0E3831BFF257CA37DE0B3B4DF3C983D091F09519365B2B812A 0B6273D30B01515013C73AC3B8D9C4520B5267E734651E013B8002D09F3B5BA7984A588C F6115DC9EB84C1C9AA0CBC9777D8923B3230E0A2963E08743E51CDEEDE33F7DDB10AFF69 BAC8682A2B0885B8059661599B805B9684010A3B6DA56E23E265BC209158D3ABC69BD6C7 6B13BA17F225D990CF0A42C1A37A5EC523FD80E60DD542322B42202D77F646FE34DB9AD7 9908DF03C1C5C351E542294D245E1098989BCBEEED311FC5E7C8ADD52E52BF6F0F1331DD 7F874B30B0A16484EE328FEBB0CA559613500BFE6994EA8357ECAEDB310CEA3235A421E1 85471BFDAA649E3CC9128A0409C454B3C951FFEFFE648F1ADAA14D5317929411AB7D78F2 B888B63481346F415314E1967919783F8D143EC05B7BC2D5D9F7315F41F0331911FD0018 44E301CEAC9579DC227E0DF9FE2D217AC8D7B014CCB01DE9AE852AD42FAEF07CD5CAACAC 324F3C00E330939FF4B5B677DA731FF712A6F8A10687D29A296B0E685A4F52F3009A4608 8A935788703C71B584A8E855683278077851E1416171568CA50BCB4EBC8DE6C952FEC45D 37FC6EA2EE7E151A96452C332221961EAED2B6262431C4C7BFFDD59EAEB9E3DBB17C3EB7 3D90F0F872289F8AC482B4913C0A05E698C91682C37503A38C841C25A8BA855E7C1CD3EF 5F1E025E58B2EB4599D76DEF57A60CF24E814B3166042F8084B08711D1C68DA4110BFA7D E8D3FBBEB3DE32CD01E237A403F8581AC2A015106AD81FA0DF90301D6BD887631A83623B 4EEEBFEEDA012BD6C504B450A5F43137757C2EC7DB3662748B105F8B22EC030895E0F607 5BBBF246422A7D0D6E8953CA66170A8947034CD6EE37EB7BBD0D9F02A538AA0F3D2D2076 8C307F9558765FA715444282C823FFA3E95640778053A383886551D4F86D490FC156636E A5A3BD258674262202F4F76746ADD02FE0DCCD540EBD60EAB42D01FE252DBEC93598D6E2 0312F2F4704AB003FF956FDA5C2A88F716A4EEC93503FA913CA019456AD0A8F6368CF6E5 AD1B7CE1BB20BF0CB453379DEB3423B0649A6380ED7D0B40768730D37A9A98B2339852AA 286809BC86757FAF3DD54C18C3CDE9E72FA874BE9D82655E0551DAF13FD665BD14DC7891 12FCA109A1C73D4B0A7F230E2F9512D0DDC8029983A1984406A5F100567B88BA186329B5 7A68539D43F67BE6263EFA278181688FA595ED3BC7C7483C4DCDDFFC01E641C231EBD842 D21B48105397FC32D6A8D555015760029C2CAB13AC8D603CABF46867CABA01A99B95C92C 3C224E8F59B3B327A01AE685ACFE6D67F28FA6663F6E47466DD0A6665592546D08AB7C5C EFD20D6D5115C775E033E0DAC75F2C6411D999DFB21172A8D0D3E427F768CF7535320DBB 6053BF3A17536AF6B2C00979FED18A593F71146F9DEA8B31639AE0586B24763DF3469507 3D1172972B5E1CB82BC46A60ACB82FC66B05D9228C67F3FB25E2D91FD11B696C9FE505CB 9BD2B2D85D3A22595C338574978048050FD13A59C41B3B0CC2868DE4E017B53935793DAA 3F6DABDA50B06F8141511C3D5093069CD1ECADB90C42431B5188D912A5DF033B633AB3EE 67E4943935EA094071001B6F8FDFA00C0E8415358DDA77F2DDF4F7E2694CA6933C804849 54A1DB8B5B6FE3A7A970DAFDDD1107FBC4C596C379881A6B148D21733CB2700FD9F4FDAA 6DC49C40A6675C0284FB931AB93CFDE9A94FFC23BF259230AE1724F22485864833541367 D274CE18EC890E4376F48144950FBE566FD285330486F5F23BAD7AF0A636821A122A4970 35D77B580B5862D776826AA3735AEAE9D5D7D04C4582778F9B0F713A906618632FB653EF 4FEA9BD993D11E0E51FF3A3DD50EFB462C4251A42D63863256FC819037BE597382C6BE60 955D060340A268DCDA514793C845FF10EF0C72D6FF27BD1858B49D50516D48D6FD33AF71 11CD37F5F7F0C4A4508BE16B80565557D025B529ABDAA2850E4EB6D8AA30ECF49B5D18CA AB0BE944E0B95AA0BBE9F4CA91A56FBD41983A6703FA0FE415171CE8C11AF45004FAC49A 4346C206EBF58FFA74F22D21A1E069AC9DEBE6D36156C32E74A4ECD8BE2C0A6983D404C1 07DE0A75C732AEA64C88389E15D474F8C0E7789B8707E2F46297012F4F51D07A10794D03 195654BE0F7DF9A4F5F102C5A68CD37D129051620F807301FC8BD8252B4CEEE5EF78E803 9D41B48CD3262419E9A4F93B678B9F471F4B221E7D165C1D2980CACA79F4E549D2ED61B5 02E583516547A49E2804F1149855D77A0D86F3B1B429C56523FA773FA9452CD5B6340E64 B04FDAE2E5B6B234D03E87E2FD39AFA134265000F7A9506F55505874D0B584C504DCD29E CCCB8D71485AEC7BC34AB30453AE4E3B2720CBEB6A9C9FDD7FE7DD565902C6BF2118DA3E 95595C12A7744212827DF07AC5AA7B1E05D42FF38758A3C3105C5F0422030BB0102A9BEE 0E07E20AA089C118908BD7207E686EDC8FEC0580F7FDD106F202676424FE815EAB287182 61FDE8A17F2662BDC02C0E109A020C57C8F37C4B606FA2AFB8C0993E2CD1A91AE5BBF801 390AB8EB8841FEB2B066F565E497DECCC37DFDC2581DA9AE15E8C215DC41FC92AEB57757 E92E18FBFE36E0E6AF6887671A9578C318C7FF50178B32CC9A046370946ABBE792708330 D1C370012CFA2BF4A5DF75CF019ABD1882566333B0E637B9935426FB127699885121D83A 4DB8A43A648A459C83D623EFDF5A60F11ADD585EFF0579C91F8B5ACBE889D4993BA6FCBD 64318022C3310DB5CE4324954D78F06ACAA1FA4C8C4120DD41DC4EE2CCA72CA36FCC368C A31323A17E4CFB07A0A02CA23F8518CE8ACE1548FD4B67F0A5C414C309DEE52E5327E09F 4B2A07EDAD8A309C54DBCFE3A59B9BFD3174BED78566F6642916B5B01CF4DDABF72BAB82 60EB5945BFD987B96B80DF607C64747F5344A27DCBF4EB9797BA5D17B7635D0D936833F5 0AD01CF4B9FFC273C05AD87745D79BA436590D9B50988311A06EAF7CE77B5492A542ED4D 129DEF268D2BB87D07DA19ABA6D4F78874A0A6960C9934670B9EDC47102EF929581A8698 A9CD8F43E4F071577730D9D18AC416AB398124D9EBB91AB66A4CADBEDE5043EDF627CC88 C68DED934ECCABBB9A7FC34DFB1B65ADD724BA67DAAEEBD04679816733D344635D997125 7B2BA27D1F44A7D7E48F9C9A4A412030AF12FB89B15B07C3B18F9C6EB6AFED69D6A9951C 3C1563481B46E4AE5841D88BF8C64461CEE73A332AA07C89414B4380D0CFAD8D61C72E68 6B34B0EA660EE0C8370A99398D9B0166F8A77FF24BE1AD496B0C0E8ED04734527A5A8C79 64F2568C9B00E98F7165D0594080DFFF7CE5FF8C26097FAFEEE33307E282858726E675C2 4B4C31AD2B5B1B855B73D553E77D3320E4D88BEFAB426B94EA33FC9AD8FA81B6636CD4BF FC2D11BD1F52BC5BAA38C072AB771A9A107554A327EA10452F9C7624BC2DCD6DE2D43EB7 0298DE357909FF66BE487285902388A024E120D587890FECE3A00376884947E1E6334BBD 79B4774980E8A110E7BB841F9289805FEED0DA0F4D4B8048F190DE68517EF34963FA1BC8 F8C575012E01C280B647902BBC2B80365E9A66E28EC8698EAC50CFDF1C6D113827AFEB9A 45434209C921460BFF483BE373CAD65640FB3A8B7E5AC12CEAEDD5EE1B244FC42CCE85FE 4D34FB21BEF3EA9B959B6DB1624F05ACA4602052A78FF842BB1148ED529A460DCEFDAE01 6A10B5B3C9D11ABD14C53020138A9624F0DFC3B1E445290EDCD7F2DBF4BE408EA8EC21D4 4D9DB728B76DA63AF62EB7F89DC43144028D1098287566586F195B124B89799E3881AE23 F89DD6610230B09D6B8BDE79BA206B87BCBC18DBE1BC155862D28CD742C38DF8CC906233 09F933D073491984DA9D927635800B84A1C2350CD18D962DC9A2A235E2443F5EA72DA9F6 45BE3240B03AB4D9D95C3B57CA05FE3A7011E12B182AAD81B426BB17D44D5C1EB10959DA 01563CA2260F6010ED7D37609ACF759EDF8C044860FBE3C89213394F03A309C04EE231EB FD84191ECF14A020C7A4D7BF855213D927DBD921E2324BBABA6B7A06D69B4271C66F4FC7 F15DD52ECEEB76C4C97A85CD59A38E1CDEE2F78354B0B71155227553FBBAE0EBF0D625EA 34B78125DABA3211CA9CF1D4AFA909080061588AF14CB97BC4DCC1E1A0BC04A40B107318 1CAB643F064192A6074D3220EE050DE3A56D1558AC0F7DA0E2844EB48999EE9409F0F683 92569D7E7DE78F070FA44C2E8ECDB09578598508EF3B97FA2B585A163EB540F2E8290244 D60006EF558A5CCCB1D40CDED1CCEBD665A320CB82797F38DE80CF0DA15BB0E13B8CC180 9D99437A5B25041EF68916C6E601B0432A2DB84C8DE1EBE4AD5A3EE34249E47CDA593424 7C9E3F3251C59AEEB48BE773A6D775E6723F3B2AA55B2439CF841E1C729153B22550BD91 F272DFD3EAA1336E94C8AEE4DEAA00C772BF05FFBE35BDE7AE2A0EAFC33A71DEC72B3179 E4CE0DBFC083372451A7006B32357B94CD7975ADF21D5977D10444C80257874005F8A02D 317CA3C38DD0F156F191F88A8BCFE274976220F0D25BA30DC195F5AC0CA478FC1173A7CD 2A93B482916358E8B0ACEC25E51F975E210C895E1200FF2D29419EC300BB8284EACA5027 69676CFA8099A110D1AA50B5A4523CBAF5FEEE90B605C5CADDFE233D235E008667D7C0C8 B2BBEE796F1F78F4819A201131D4399FF2CC2D59B05F923780E775A9ECC284A68A2D76E3 65E687530B96FC564DD173613D190EE8F1E6BAFC238FD9642D356E764860855820937E40 44A41861BC40DCC84BD6F9969DEC343DC6F3F7C8FE9342793553B5C335CEF67084B9F1B7 FDC790015B7F9D682EF547C986CBBC0606E0DE60E95AF386CF4A475902C58FC382C5A35A 2CAC908457D5B69C88E95BCCF40A9B12012DB3F548C3ED3A549BE0E5B0BD17B38022F2EF 2987ECC4A6EA46BBFAE4D6B330C3FA7DB68F0695F7A52C2E9BA1B97A6A2FB6ABA4B8EC07 5E01D2C021D66FD6E47A4014E5AB39DAD64DA85D3171D7398BFF397E371C483283854453 4E7815254A0612E9B79143E83555FFAB3438D5F56CC1B72BAD832D3F03F49675BFF38F9B 8F1A89D2E739F07B2FD36BFEE46B0F8E22EB6F23710D0BA81F3B421E9691306ED6D87F65 4FA8C6ACAA3356D8AEF5BABD5F6E6231E64A772C550212A6EB17D9EFB987D124E63EB266 72F2C1C00DF095C829BA7AE2EC7C7C26FEEEF5C7AF6DCB1C846F6B6DBF3F7AA0585F6396 0A27CB026B55B06954B296E45841706AB1D655A5EE4B774A336B137EEBB2AF2F958123A3 A9649E57BD61EAD0FD1B05C16C1AAD5AC103C0CB1BE0DA4BF4DF83A7F47814A64A11B90F B0E449D75637E8C8366346E6839AE374FA3A2CCF4437F3F4C21B3649E8F25499556971F7 210B267ABAF315E8B1D2120AD9D3110258BA296B3BA195931492AB8A28F1CCCB4AA607D4 7DEE5BF92546FCACFF9D9243B8941D011F272431B2782CACBC99D9BEBC4CA43C90864DC8 4C800605BDC071902BA524866FA1D98C709BF9200EA73C2FD8F41BEA226F37947CFE0B83 1BD00F2237535653F63AAE9A6484A558FC74B7475EB0D895E62344F509D216A97B96B466 24B8C4CDDE55B5E76D06AEBF9877562210AB2113912A2354E60C6986EB1077526250325B B926BEACF55EB2D98858849EE63A44003D3FBDC186315D8AEF57F8F829EB61C4BAB6C9A6 E3626F0F3D7E6BA066E31D3F322D060AB9990A619D26BF75C261C69F2B88A9C28C70007E 9B2C08AA5E8F73D00BC882F3680CC9A78E6D70DC8884A65D53E86B6A4030027F7D403CD5 6106F3DAACACCBB4481C81FED3B7A711B04F016E18330367108EE6BD1A3121A9BD33EB35 E824BFEE0D128D00208F3E1C860CC99AC8174444D75DF99CDEB40EB09C20355DCA68E13B 630DAFABCBB6BB51FA406C924F40FA40E3FD6DA0C673DF1A2F695E8EC2127D51B6F034EA E96345AF0294778C6BDE553B2A9578927C484B51B4566B120F8A074C52318F06033716D2 563658FCE1FC71C655D3319E3DAE16886B92DF451714283F5C1BC3FF960295B947D0D3ED 1A101F34565F24519FF5E7764E3C5F2304FC8F6F313CF6864E09FF079C93167E654A7FD2 4F6550BB972F93C43FB9399A0E82D58A43B926F454F38447110891E0011904A776271E60 FC7AD11E984AF84FB551AE9E7CB68466AF9AD82FAB71590A265A08A58C16046254ACB03E 98EFA92EF2EEC42B4733B1BD9FC767DFE45D4E74FE31B3EA3588746D5A6ED60F874E7C00 88E2E423BF78909FCE19952A9BF46BAB57640CE2478015C7137D87D722254B3A70D848BB 177F0926A2E8DB72506A41C381B6C9D9F4B22700C5AF711F5EE5C7C1CA502483DEF489EA 0EE03CDD50292460C7352EA9B5B4A50FCA148F7FB3191432787A1D4EE5AA9080D95B810F B13F5267F1486BF1A49740C61E0C6C885E3C5B9B28534CFE99F9C656CBC3500DFEA2C3C0 68DF8B93243857CCB6D50EA01222C1CD2AC256063A27F29969BCCEB98B677F10FF3041A5 D78B64EB9034C4D2B3EAB0BCBCC6C3A4E3F9F8EE0BC45A934C97F79E3ED5B9889285F535 7B5AECE08D84E86C95B68CD40E4D747A33024028EB6D6CC22D05306803C5120BA4988696 F91F4576E3BF631FE32273E3618F378FE44B56431230AD82B5F7FAD86941DFB3716D4598 C9B3C3B92E0839F583D28577946992529A301525F1D784C6E8D21999972522D79AC7072E DCE82D02F952750C4EF7BB486F202D22C5117C4AF3C61C182C177BD247A4F58A55764371 235A5BC43A4BF5F2977EFB2B293246BB9A55B4E52C4CC35F4C5362395B69B56CB8E21F4F 230A12741F10EE5869AFF80FB230EDAE5BACC982A7B715287BE10A2C77CAB7DCB986463E 00C3CF475A746BAAF746FC1657BFA756A3EF1C5721A9E5129AF438C17CF2717AA26F3B55 6E16EC7012EA595BE25CAC595AD380BDE9357F70CE740D44CED744EB001FA180E54CEA76 A0F33436BEF0173CFBE3F450823F53702405E39AA9AE532ACB2D87F94B89385941573FE1 B00E96F44433409EBC3B007A2BA87A026E9A99AB844F0826F837CEAF0ED515B75FE083EA 47AD5BCB8DCE6ADEB4DEBD9DDC83554336FB9B23FDBE3E9812E8D388DA8036B2EA0F0544 5EE65BD22CEA0325423876C76D30F77443A1AD4B8640369327DCB70945C94E625CA480E5 D18DB76FF293F7FB61730A67DEC184BFCB2CEC8A47476E40533B00EACA213C3A9162C02F 229EE91BAD96D2E7FC21930BA22596037E2BAA35AF874BDC4ABDC9DF92F2CA2CD38C5626 4457D579CCA2C2D9A69E72B46BE5B19789934A526195CE74263C4E4EE29AA0F0897E1375 F9914C3E39CC8E254031F58F1618565CAA96AFC2F8636856214A86A5BDC3B48F05FB5391 797D5A8DFF2793D1C1346E54C7EE0E6170C82C5F826C58E46902D7AE72F4725410FC008A D1DBFF2B0F6D269D5390F43663AF29E2138582F6B223C0C577428E2E320AD6E2D8EC8F9B 28F4358A71590309F5D75F86078B95A66DCDE939BB502BD0298E6690CC33832DAD2F7133 EC7CBCF9EAE3134D91FDEB4BC8C98AE7C8020BF3B3D88D8F207880958F1DEFFD714A947C 1E2A6DBBBA6E150EBBB7576D612BAEEFBA83E85F20F4B5FD8CA126CE2E063A87005E4FC9 4DF19C2EF01DBE2B45D5F255152BDB78BAA8506BA36190DD155AC40D4448F0DBB3A0C0AE FBE24ADC1CC30F4E1412CBC6CD52DF405A4252F8557E8154730E483B8541E663E0BAE8C7 816D95CA8B6D800446E4665EE726DBF0ED62395CBDE723ACFCF0EBA7D39697EF738A6F21 CF591045F1CA5C3E68C2CD77143D7F694A7B9FE3348F70719B0F7D805E1BB83A1AC9F346 1DA81E3167465C8ADDF6EB04F86193152EE00970D2066F79B191EE15E33606D83505C36F 9E8B05926BC156D236E865636E459EB06DC8A9AE6BF433511AAF8B2F37F0655488CD800D BFC43897B1028A659F689618B15FBB801F303FE42402DA3F49CFDC8D03E5C28249400DC9 44596A2BBF7F3BAD818203685C7C1B13C05CBB7E86EFB28B6C4D1C9D46DD08CA022E54C5 4C6D84E0B15412F3BB3B7CFEA7A9A06BBCE4C69157ABBDD52FC5FACF0A23A53953C35191 8379F3FF2F3BF089CF82158BD6E7013F5DC178EE34C55CB37A84C98C2F24A64B34978D95 F82760C5382AEEC5761418A7D75704EF2EFA8EAD21B8EE44B87A8FFC59EAFE6B2CAA3D90 CD2CD737421FEF85551E5E499847EF4B9D7D33F72A9B9E739CB294A16041EF1FAE98F726 AA1460D1C782A2D3A717F925B4AE0E1A32FBA63A20692348F7BCA69DDF3FC0BF734930BE 518FC35FE0DE9F36E6C6AF15D770FB35B68AFC513969D9A0934131FB9A0A60B351E38659 E3D6ED518CD1D9BFB40A16AC9E77CDEF94E5C3CF0FAE13076F4BCE2841C7EF7E0B364A1D 5B932335CE17861FEEE20D02237AA90A704EB6B74477BCA3B8BEBF8CE59E19E861832F0B 950FE683E1E5C05547F00BBD3478125768EBEADB91C6F3D2529FF871939CC7C10D0F07AF 58FCC9F8F9538870C3559DDF56BD94B5C1F239E44324C68F756B33989B482C45A7B78D76 6E95E12F4E8853A430877E892A392C0228C567BBD42BE2E2FFA7F27578842D7B5D05B799 C080B6E55B53D196FB2C4CFD7BF64115742FFC49465B2B62D80E877AA7E7D9D8811327C6 6DB937B48FF75E410B5F639F02774678625F24CE25814E5718941D731B2F8F52A61CCEEF 66D7A63A4D74DA48992E4794B453734C9C3CB488DFBA825C094CD8B9729AD572DE4B4B7E 557644A0821BFDF2AEB7BF98C740C6F7BB79E0D80891BD9926DA4DAD346C785B381DF173 23760CC55A8D050F73E8B8B751438037EFD9505DCFE058874FDE5AA5DEDF7B0B1978F714 3F0981B964DB2F7A55B97C7ADF41DC95CA295C8DF2858BEFB21B94F5957715F982BCA5A8 D6BD438C12C8E95ACC46E9720C7AF8A61A1D952F80E1D65769283FD18C2ADA03242F333C 527384FC8E5FC02B32B4802A8AFD6A0FBBD5678CAA927B5E970CAE60F72773BB4CE9E49A 0455728B49422E2AFCE32DE8528696E6ED42B350B80C39BE82CB53478FD8EA4B63DAE5AC 3ED27E83AFFCCC52E65675EED25001048297E293DADC529D37B5BFAD0C659292A7D89F81 88A37651DED8312E33EB4F39EEBA2102712D108E8122F06AAC04528E3EC813EBE0D99EA5 72E4EA566ABE4FF8FF53362FA3158FA52FC599728D97AA69A5C46FCBF2B0B75D2704F9E7 CC7CDCCA951FE69E9C2B9B448D44E82D3DE480087E98D1A580354D4D0A8F893DFB7EE4D9 30990BB3B886A2F0AE65B2F8C5FB109B5B7A69886E73E7883783FB030DA933B5853DDFDF EC18E867FD17F24DF97CF72D95C7EC0897D20F2FAE74A9280DDAD0497CA6D099FA350C68 1A46CCBD7B8E7AB3AD45658B8F8B3DAA18D6C5DF704A51DF6F2DB5F7FC218980B65BB446 99569FF1D4081B16356114E4E72166A09ADF09827750DFB537E9F3CB07A29E2D4A435579 8F9FCFA874A4772D04B7AF6306A75C68260ABCC1B2F59C447845735F8D9557A97635C2B5 046B8AEC2815C5094D918D67638C10C7820BBD26EA458B076D5979E4DEE7DBD341097400 2DED95CC963CA2D607FFA38BF2F6175E77ED9A8ECE8B81EDCD7FD6470E63E48A68C0BF40 952AD9C1426B3FA70F59D03F317C1484FEEED313A9B21DD3410F3DAF2D664C8176FF63EE 2FF4D366A2E12AE43B34039BA38EF175253B582F457EE300E0F4AE056909C751F8E9F889 EC08A1668980672230F7564C28C98BE3021A863086442F0D1B0169F98CA5460CFA959A93 61E44F39FD8F5F1395C18B9DE0DABFDCB82717E34E836578901B33EC4CC2AF27E94609C6 D78FDE2D2EE6D169036CAEE5530FC220D59A1BCE8DDDD67C2902E53E21493FF9DF4F06D6 0787A3E6D31507E4A924BA17142C4421D2B87ADCC7A1D0861607A50C49E8359E0BCEEBDF BF997E7988B54950D1B8104C504AF8B321D155FA250380D4753C739CC0C2866ACB76E1FB D3A7CEB9C6DED0AEDCB16CB9C0FF78FC48A3B7B9CB117DDBB3F2EAFCA2A9462C3F125163 6D130D50AC1C2E4381A5E89C22432DA5646E4D7191EB57F78AE5C8C63190C8A350D7A084 54619FEADA6DEB239AC9CF577DE28BC967871FEECA21CBC24B7F5BC4656441B627A81771 7B793E36D510ECD9835595B08C54504A35DCD31FB2354A2E3B9029FF9586BDDED0E8BBA6 C0DBBEEF15BD4ABA2296F949104B44C7AF0FE063A14CC8498E52DA2497EBF940DE5F6AA3 3788199C9ABC1A3EDE12C4CD6324EE6C6856BCF9C5B009C150A304BC37ED7581BEF3827B ED0C87705C2EE399BBC1A2888BB0EB5BE6CE090C4EC75F44B77EC20C37D890E9225CA515 0A3710734549550537F5E097610804FE488C0E67F063AE0B685D4AB5FF167D9462A87061 3E240E17905E7A47119CEA30BB69011C3AAE24AF76EB189D7BCB06EE72CBB7C1225D366A 661A2DFF5F3E9E5C6AF1D81553146BE97DF02DCB92B690BE5C0D2C44E1A57FEC0BED0149 9A6D08BCDC64AAC6568A1D3045616E470F23AEF55E642FDF155842FAFF49EFC7F6261F25 662E6373E1A107326EE123240146DC3E8A7BE75E51FCB2931C8F42A6E76542B763192B1A 287CF88D28D0C897BECC7924801EC1D7B7B7E519DF69DFA0DADFDA635C9942F0AE4DA3AC B6F1EFE8003E1192DE4EBB8C0656DC6BE46462C97C02B63B7A660B12B1E169416683BB75 DD6AFD649F97018C8DBE0D4CA139D964A7FE98E7E86EC3F4E846C3DAE736F4C348D39E35 C98D98B96E6A0436F5B5DD9ECA1DCCCA921879F11D42512810B55584A2F72607D20F801D 029534B9D3D7C2FA984005D00398FE7E549CE68EAA5B2B21D87EC383973C2D7A3A095293 A510DF4F80074C4919883DF6091561EDD20B440E6FFDFAC0895B3D4EA594B7396B4B3AF3 78559044AA7863D818DC89064CB7518D7448C749E66B56F9914E538EEFBAF56FE087CDDA AA59C8A6146C282DF632571830B849A87E0A1089979BA0B38911386EC7834B8C3D212224 D76CE946A6DE2B2C246A92CBB976736A586DAFE1B3D62DA86B7ED2C92D1B852FA2DA29E5 7AE135B93A7110018E0968145A18CA917354614CB1937AD9EDE813A70B30CFB5AEBCA5ED C158CF63704ACA8275356C4837B9CA53F4BFE2718FCD0F4502F90632E5F65FBB14C56351 21B5A367A979E1515FB818FD72D9AE26CBDE09F79C244AE16E4AA13609878D0DC151915D 151AC0844AE2CD57426FC916E920ED93AD36F9412EEEDC7CBE6EDF7EE7DF16D52CE0AF4F 2E5470517F51B4D4DC734AE36A66D44BAB9531B8E2AA28A811F08F4283FAF1394E56FFC0 9BC31790081146224C8A599F9209D59027843EC5C1DF4C9919B0513050868A107F9B48EA 8D68EDDC6947CBD4031CAEC69E35BA5F7F2CE967A9A645B064059A523A06E8BB5F33CBC2 70D056A003D76AA7BA382CD149BE61990747C75F16D48EB550EB230CE7A87D8150AE1352 C3A828660FEC741DF9A0F41677F8ACD0376724B7060B0DEA0478692B3E3EFBEC197768B0 022B89CE385C383C478221B9128B577FEE85289F1AE5680F3F0BAA120916102059E3EB49 74EE47955A35175C55EE172D41B79D47A1D69B679F08AE94B8CF805744C571B87A9B53DB 2C9F9573FE047343039413D96C6E757C9FEC200EDB3AFF4D330DABF5F2FD5A165C137BEA 4F975CB34D9B372E543A61C95408C284AF4ECB516028144A64CA94CD5B4282257E8820EF 1CE2CEFEF2B2254C7555950DBC6CE5E30176DBD5DB8DBCA2159961DCE778A703908A4E01 BA33D7645C00261888C7A63D0893DB6EE0BC2165F002CE8B909264173D563EA04940844A F99D5750540EA9AF7EE79B37173C4150F42CCD60053870250E45921EA215D6A318C232DF 9000542ED5479DCAB19B839D4F2BC2871F552FE440D7EAB59F1E46130D45E1322D1EB470 AD5948C18BE73A0EC5028E37D6E7A0D2B0305683D244FC5E80207825FD8E587A74900042 9C60722A87D9C0D96B32159A5E00120A9FB93A5F49014C86ADD51C4A1DE4D5120DC04763 136663D080AE9A62F7136088200DC77777868075E545F8AFF504E55024DA59E61CC7D28F 0D2CF46A746EA11F9CC96E28A12F1C4E208D77BC61FC5F7C32CD6210AF8D5167D0781F33 F55EB7C7BB8DCF35FEAEA7B268051C9BDE278D9AFDC8B1F832A96FEA08ADA9EEFD8B4D64 525E223E0F8BE2D4492FF02DEFCE293DF9BC0B63FADFC0CF36D86408C198354D60810EC9 A184885B1049D002D5250D46763042EF9466A3CC6D5D77F15DDED407743E5B0E66F07E2F 0D6B34DD74B03ABDD904746F47AC74EC694F2423AAD5AC1BA4D92CC812D14AD5BFBE7EED E711C2FF2CA96229106E9B1EBCB7B247E9DF0D3497B50AFB597128670D3C37D33E8B3E81 4CC5939FC944F0DA9F486517F19CF6DBBC50315F25BCDC9E2EC95BC5C32C3873FFBD02E1 10C4EBDB28C5D812B259385DE0F27DCCEEF80D106CCF483FCCA045664F74BB6F3A93467B F8CE0D96A004A1E0432B509E1E28CD71BEF3CC18FEB60DEC9C3C8B4C7DCDC14360C02604 65A67941AF7445642F51288B5BBE76CBB54DCEBFE0FC2BB4F9DCEAD53743B355DBB7095C 4869B00D783D56AB252AD6242BAC1D7F71701B0BDCCA9788B29FEB31245E97BA0BBF6167 570DE4DB44AB1823F301C2804D20BB08494685CEC27C481041C456C5D1024B7787385BA8 F7799355810EA9BC21F6B14F7A4FC8F85276FFBEACADA152C746133E53A53F8788030D93 5206C09FC2A130AAF5A6B28BF9F81A3AB72F910FFBBAAC14993777786D6F6B42FD005566 B7D5C006BCC0DD10EC2D8EA90ED65F8EB52B488F5D5AD6AB2A46FF7C06B95523D79246CF 34576847ECC644C0A85F3D379DB1F97A246FE3B066D0A6F7B6BA63854EEAC4C82A92C3F4 53A9A906DF74B5996B96D2A13A1F7EF9682D8F0669D4D241BA1012B13D69CE14263707E2 22BBB0E36F19ADB165BEEAD76B323B55740716B85043EEF89D393EA418BFA7806FD23FAE 5D26CB811E5113DA77A37560F82AE3D2F4D8C4970AE092D0E56888D525D45563D0CB4DB3 5317E01296570AB93CE8FBEE77BEB7E9DBDEE9F3208656C8B536F8E44F89203343DEF8D0 C6CF20273522C4E2ED3AB104E4C98E0C773C991C89E16BAD8D6EF4D70EB69F9B9E7192D9 36E057EEB0048168D2199D790379433974A70E9F418899D3822B0354596149DEF74FD653 162778EC18B4AC9093ED9A6A3B3C76EEC9CDBF5A4A4ED23BF60E04E5D53A1CCE0360E178 A682D70D86C5E5D8B4DB2BBCF7082558185084F8D8A22C96C7296DABE818F67FA9E5ECB6 F5064065B7CFD19BADB214DAF76DC8EE0348E93849BCF1940962F297DB8181847B9FA9FA 6B443B870C7FFC99CAC69584C8CB64B01098EA4D3496EB66CB4A146766706945BE8AC9E5 1F82AD6B2891A38D0065D37C2ABF340C05F8BEE47A35F3B01485CBD9B4C79D6DE4CE40C6 E73806BA1CFEBA9C3A0816054A8A41B757375D6A0E013F96D8D168F0A18E44FCE3975699 FAEE3089DA2C4C743E8F746C7CE589968319BF03874B6F577D2ADF4711B8BD42EB9A51C7 256916C4258B3EE07BD2CF4431F1C835C2E1E86887E100703EAA07336E54673C3A3EB4F1 B687442C6D4AEBF412398D1F1465B8FFDC4FEFD5ABD396EEA8FE981E585F3CA45798A874 EC4D3D7D2BB31E4CD62898F6D6F27E87B2D2E8BB78BA524A54731D04E0A21C19C05C5F45 357270669300949C580629390B2734F0F1A32C764E0BBCB8177DE0E5B8FE4E958E9651E8 703C8AB58326FE0449A73AC645B2DE49E6FC099399003449124AEC31A8714834A8601652 6198B6AEA7A2F0895EA9F9BBEB13311BB006F4F6452C8F23064057B7329D3B98C5C2ED39 139FA2436C0B610542069B96D6A0027D4C3B79CC646C8E063C38C3EE4145236F955A60D7 073D6B8DADBD102BE5EB88FEB9B889A0E7FDDE15B9F69F734EDC33F16BDCB9FB84481969 6CA99D5D5BB5EA6B2C082EBAA52963C8454A0A1E475013829CBC977864B617A14DDDA328 E086803BC06FEEBE32D8977F9A8376325B773199B29B1CB15CDFAE065B3A127D8D160E1C 472206B7E4497C9E91B5F487FAFF62724D86478741E6A2FF610256AB92AB688F2AB751DD 90D96090E98A2C94C59F0756709F828EDF55D4C7A56E329F3085A8F7CBC2765929BE87DF 11B087B08DA4D082594FB949640C24586FF1C8B505EDAF05C4BE22EF8574AADDC544C702 C76D7A9096B206979CCF7AE4249552B38A2FA76F2A9E4EA55ECF7E7B4AC88F77B6FE203A 2D4780CAC541C94107DA1031658D2041ABBDA42FA36A744F55B1B79090B3FC71BA917778 CCEA41B76A06564B753BA93BF518CDCC98192399E4960A870D13B48A5B18AAFBC7AC0527 66F9727D135DB7FEB447986F1817A66EA426643E1D2A4127680EB0BE913BFBBF01BCC874 92F6D772F4823ACB23F378CE68FCDD439A23947BF8AECFD88A8F8FF4E28526920B833CDA DA3F234880E1CF5DCB0D1E333809B0BACE4D1A3CF36E122F5258E7B277125C9AC20AC18B 9323D1C8332E6CE51FF5C7CFD5201E85498BD05430993DD8E18A04C75200C6B883B0386A 8E81A4A6E3CC28E4D0744D8EAB410D60B93B82B64D387EE84A27DEF4115D554C338EB123 40E9B6B62FAE4846FBE23DE6EFF018EA67317C8743F171AD6A008CC1190D6ACF47B5712E 607B1D6A6EBF3EC767F51A6D432CBE352E67FB4D976D852144289006679AAE4E5C582043 3ED4A6F4DDB4F6056AF923B84B8436BDEBE43AA7FF0A84B71F469C7BF396E0EA95D31AE5 23B41676AAAC68203F1214E08BDFA403EBDCFCBA37023A566A0BCF34D4237B6A86FAE988 DDF9D5699021CFEFCF8BCC3862836220C39BCC82553FBA41585259B0494FA1FFD2C92C93 C4380B885A55A0F4E829CE6EFFC72F6FE64B66E64A2E3B0E82043D164D0EFCBD3CE98D2B 8EC210F6570A60C92ED09E5B8BA6618BDA36F14BB1B1E6DCCEBE50E612A09660377A67D9 3B19D79AC625693FAE271348044AD13EA26B4FE7D1520A814C2F7730537068C5C34984B5 0B8BD7F836B957067E02A65B6D26456BE4334F180030082A26D89091E30D628BCA32307B 310C0078D3FCD2283D078740BDC955B4DE611BA1D09A04AE30EB30154C0573F459E75557 A006418C7EA44ABAEF9382C182CC6AE260328551D722FF8D4B06D292E09215F79118A716 77B0F6B4A7F15BAF61BBABDEFD83C92231DC7E4A491333DCE7B5D1FF92B6D79462D8B95C E8300AE364B0D92F7C40797EBBC62F9847C796775385E343FDB02A0726FF6D5E118B8913 F77E2DE8D7A93359530808B89BA7CE125C2DD1174D30F0EF295CFDC6E4B039283D23F235 24D860B97851E7A59A8863959F75757E6F9F7BB8C5629675225CE1F9543F3EED0D931D2E 18A9206F709E5586CF19A965C5CDDE330517E19596DB1A817C3146433FB0220655949098 0FF33A01F79C04CF7D46D80AEAE67F867DD572EFC12B469C9BE08D9ECCE54050A6331593 4FBAFBD5E4F2348251582AA624E6743A0C8FA08FB3739A303D919A9796797642F6CD65D6 7548C40C32912745452600D2093AD67A34D3219CB539CECB093009B13AA77CAE78AECB0D A624DA455725B2707A8B27FB75411B96DD0F8F33A31CCA0D0DF08BB08679C6D2F06CF847 23DDFCC89E54D68DBC2E8AF22D0E20F86317847D41BD78B463593DE423200FCEC1341B6B A61B327CD89757825968B6D40BDCEB55BC00827EDF7994C12CFED6A4C16F5F3CE38747CC 8942C8CE454794209ADCE9A7D2608224AAAC684EE97DC956453071AAB23DAC8D28D1E2EA 13D28DAFF068BF11859F8E1B8E8C571EA30CCAD1333788647E250577D2E908F41ECA1B5C 1A2199B479F0D38731EFF6F8DDF3B86FD436D41F24306BE4D1771EF24B287EA32C5A60FC BAD6655A20261020A3690E70DCAC494A6AF3214BAEED8C00CC86E861C4BA6F545F94194D 9FD1736A81A26ADB9BF05BBFED3157D6893014E87FCD8419D750AB2F51711D1D4FCCA860 FFD22A121805E91AAE796708CF754C5030742FA9AE9CE22FD45089F532C769E906D2D74A 6C7DADF54ABB9F8CE74AA0E8B86F9CE77CA934DE33404BD07BE3CD88FF1D9C27DF034032 554121F6214B95B17E1F8B2909C31B93E3BCD416DC76A4D150B7DC1A0D16B57A3E7207E5 34BDF060F416E97B6C97AD7FC846F6A3CFDC92BAA822FCD90087A19C6C04BFB4BEEECF2C E8B184E9D9A72005D2E2B306AB25E7708A36C3C6CE857244BAEEAED79DCC8420EE0DF1C7 A3BAE477C4DC1EFD1CCDA761F230AC93BAD22F569758FAEA83B6FC12796C503856E171C2 1B8DE2926E0000BD7BCB2087184865B43DA908765DB836C1397F86C4EF27C6B667D35B3E ABE731CD32C0501DA20A26F086373E4CCA74922D3988B857A715B8C70F131A190A33D9D8 C36E061A60E1B5C63C749AE965EBED843204279D515969A3A5A5C0616FBA3D7DCF19AA8F B0B8FE4D5134EAD0CC503F0BBFA49E7C2110BDD4BE27DC7B67DD0F417AF8C33FEC671208 9D5309074D1B15CD52FD2CF319D1A3B149D7A513AD9D7C0C1EF8CD2CD7031F082B27CFE3 1CB2737CCA9492AEC194A92BB2E5FDF0A94A30836D1FDCB78D9AD2A3E4A289A7E58177B2 9D92BA721571204A74441EDA8385B79E67E5AE5F52A2A181E8C22E3343A30AA03E2DF4AF B65F91D82A7823D2A172196B613DB060917CB303C574522DFAD536167A501EC998004BBC 7DCFE97EE8AE4F169D604214B9746475C32B7E557223B20DE15E67DFBE2B4251DE61F732 9BE3B01CA9D20CC06173FF97EF9C15C4109A1A6A321C4CFF59F448D7021A0A0E2ACBEB78 C4C7417E652E46DB60BC50D79A8247146CCCD3D288F7DFDD1379154E6E67C3245B8D4F78 394936ACA8A3BDD330219F916595035D95CF1AC043B3205981126CDB837EC4A69FD88C20 EB20E8204E3C5388A84F25AC5E96F58BBD258326C4961CC39627359AC1BBD203C878FA14 6466C407F206184AF3D5666E7A3D6A01A866523FB85A86CBC08C62ABA290248E9E23647E 4A3D39C6C1A4DB8EBFE9BE7D70B228A3D426D6F5F0B73EE30A462983D166782B02AC2B3D CBF181470A396FC272782D83A2F6978586975FF35C955A2A15DDF14A0A152B91344856DE 24E10D9BCA853424AA1ECA78A8598A300F620C5D5DCAFC26E087A118219F6F17B1A468A8 B3C2CA6E1113F428BFA8776F863D89B432CCD125F7E37002067D775FADA0365E6314B022 E782134FCD614431D014018CE7E6A66092EE5113F3E94ABD5CC5EBB42B11DAA52D18C34C 3A8A973F1BB6AFA1C81BC36EED9595E5AC3ACBD580D6D499273CC5A04FF2FF51CBF886D2 4A80DC14D0C7C69B04E77E3C0D9DF24D295128632562A1BACE9CB3D69332EB08490CBB94 37A4CBEDA79BC03409C7EFC8B8C38072D37F9C2EEA32C59644EB148EA83C21534D28211B E074DB78285632BE3DEBDE8524490B9CE18FD89374171B546D349828B5C2E9A497539CCE B501FCD13C47F4C2C57E7B625963E7159A57A3C18FF6DE06B357E7D125574D6BC2A3B891 A918E00AF3BBDF845E6E3BB21FFDC4F724085C73B147EC7C72AAFE2C7087133CF8759CE3 5365425F272C61CF5F96B1490DEDE8E9FE77E6F7FAD03A79DF2E2A90E1A12263EE5E67B4 4B1A7C1737E4B178FEE720652505F6C5AD062FBEAF7C8134E984B8FEEA448340FEE7E3B8 54436EE0CF964B7F854AB52C1A7FC0CB455EA3B879034C34361FC56935B400E93022A073 44F0552946915B6DF0464C8F7DA5EF0C6CC85A877BEAB9FFC4854252FC2D01C275E634B5 2F4A439AD072ED4917A6132CEA7669CC1D91CFA66EBC689CCA482E9D5DAC4F2D4A138041 82792ED95C8305E0BCD5B0D70C6E89F7F292FFF59D405B86A00765E0E2A42C18004366A4 C9AA307E15395495BD16D691EB48649FC2E377B388B6F5A8D519D6CC18B4F2176FA9481A BF4A0674FD8627F5A544C3954A4F51C234DD631301465BCFF18734190C48531D3C22A368 3A8887D4C665D442C58CF05192C957A5B8D5246E925963FB22A4476E74122D5C5A45A64A DDD5280D5BCE3DD52BA0C2C5BB01E25C6107BB785D48C5E37EC652343D5DF64124E0544E 58785F88A7677C2995B938923A3D31BFEBE629A0C0B10E89DC24AD5C5BB67CE96706620D 44122A38FE39966D83C60B29DCEACE2D5B7C62B8DD63A8C4933EC9C2DB8F0E1EA95C4325 E6A392A6FA28BC9D8A4614B57D6454ACBE1D4855126AF4F741EA672C5DC8785B9510F1E7 CD009ABC0DA119E418B9D1732893A71295FFB947382B621A35430765814A4D87BC9225F7 C30315EE1C82AA20C6694A2BBAB918D6218A862B9606E868B7CE46ADD21F18FC192F3E53 680F2300AF3404BDA02406D991FCBD977F993BE179ECE640101FF69DD7130AE252104759 BE35F677641AA99B77998EC68F2C33A8BEB421CDD80A32C85187445EB30F882B11DAA52D 15208664CED636B5A8630DAC33A8F1A8ABF26A1E28B1E9C5A8BF20B535534D337780DF72 2D36FB033EFAC9F460A030DBA78B9DA909984C36A8D3A206501585E2E7CFAEE68CFFA72F 3C55906EF2D704D8815FC8DA8CAD942581B20FE0532732DD02C2E7809FDD9EAE6CDE2B79 F81DFFEDBF5B25B0F81E884877AD96AC10D4CDE1212BDF99DB3BE6B407AC12D6FF84909E B43A9E47C76B6D10F728AC30B0AC9902AB6FC8F894FF1B8EC121C32DAB55C6A781D5AD57 45F94D85EF8BCC8F2672EDA77E61499065D9C1C6CB105E0DA67E2562663B52D97CE325FD 4C0C6A01D33FB1D3DBE738088EB49F61BA3A7E70F567109226E247AFF09D9B0A2103C79B 33467BA06B94DB8BAC62F45935DBCBF027F1C7C36DD12E895077A646392EC61266C98961 FAE84D5338D421424846807E904E1B276CACA31010E0B3E5F5A05E98B82A5576C060F452 6CE73581B41C6BFB71867D47293EB5E120E0878CBD4F670B69EE75C203CACDA0B87CD4D8 6A7FE930BE7BB0D0E004FC34C2A51B5304FE437BAE9F2A2615DD834E6D680A1EED495A87 5362C820E355D56B2B5D2C70EF2756A992BABD7C94555961A2C39C5AFF95AE8B88DB2B33 2D0F4551212BD258BD2D6C53A290657A3475E173AF1CC8A893337932D9B35FF9CD005B2E 7854D0997F23CB9D359D7462EC0827DAA520FAAB6B0A396695DFCA5758BFA64DDF4203ED FE4F89457895CE06250121FD57536E08E898DC20F084890D65772A9E242F5A07A0CA75C9 C3551E79784A8A3256455B6C88CDB8652ECB2A457D00B90E2C0DBAEEED508EE964DF1329 B34B20E37D58D92B6AA15B5D5F56702C9EB9755025FC8FC393C430CCFA34180ED1BCF887 05C6E3EFEE8A9D5C99EC0F48CBCC34F37FE10FDCC68B021E14A1D131FCF8D5C2F8FBF465 8A60A554D418D590E03A268503D12C542393342599828553AD4589E8B0E6DFB2EC663AA3 B6A37FB206C1B732C18A052A0F309DCA19DAE82D110FD3337A863206216B00317508BA1C 1859349EEEE49B9D25C897D29C4F28C3757D350B3000612D4C32AB5E072DC92700132514 30C91CDE6C1035138C683763736103E836DB99ADC686EDE265182E8B02063D76441E6122 F10EB88DC27F1273BEBC4219A5E6934C51E2A9FD36C7CAA59FC5A5D2049C0781FB48B30B 750640992D5CE69D1602543B81712E8514041B4991A115956C268DE747B0F136F8819023 8D14DDE8DDEBB7E147057EFAB2D0F0002CCD0C6D997248A1AA973D284D6A04A3E009EEF4 3F9E859CFB4833C7E485DF4786089D9061F6F4C1EC74BD179D01636788A88597B7F9742E 17C41DBEA3E371FC867274D265589AF7BEACF9748E7E21B73318BB6728F455EF9BB67165 6C39614711B33B96FF3F74EAFFCE174F0CFD3704637E5CD8AAAA0127AC58C82CA7B20971 670582631831E7E5EDB9A27C26C67165C891679515E0514E6D6CB7ADD9CAE98B9E578DA4 7B521CE6E8A0AD1DE58A024F954A424B707C462C83F5B459D000E5195F45FC4DD186DDDE 4E305D1A2743BE9C41B337785B9D57EBEC790987B6E1D03EC686CD01C3E2E14D63E07AC8 FBDF1D5D1B38A2BC1BFBAE604908BEA0990033F9F4FBBB8CAA310EA2C217EB5FDB8E0B08 98F64639043595E8D09010D98F959A7BF315716FE1E05109992F33231C10B7296E284A87 219767CAB7BC5DD096DC7E164E114FCB6CB16F078275B08936A7A036D17B96863A068423 D4B72E67EA43483968214F6243E538AEFDD7B076B0B6F7CE98A914D2A2332751DA48BCC8 0A950FD81DACC79DD6E3A2EC69B724FCB10CAAA58272FA64D625557153DC7C1683858F9C 00C98EC395D7A364E65B33A0A8FF31C7FC19CE7DFB5D77E2B5196C924039F2B4D4859C11 F3E9D42760F5DDB4A3BC9B78C0CFD18F9B75F4756DDFE2D7C3C8C4A60E6ABD17A234CC78 10A6AC5778570C86C63B27926FA00D01A204CB6E7EDDFA36476E7278B67789B17EAB6F9B 384465DC8EA130CFB75204A20E63D0A77F4F2148BF88AF8D86A7CC39FEFCEAFEB7CAF7B0 65D7CFC437E55773A2F24A1F7156C4488FEE00627ECE1B4CD8F8536B91B477331073BEAC A38423E177E3BD2F6E5E31673EEF7C4510D430BE12AEABD40D3E7116C4C91F47CF12E4DD 6500656EA37E109AB7F5982BEEBDE4C4E1AB125EB84B560F82716B4D672D13CB3D424596 8B201C3B628AE15A0E35EDAE952720D3D7DC3C373E1589C1B94E758BA485AD155FB984F0 7EE774778F52A84919E48959C071F7ADA4D5D64A81E8D5D792F9E8DE6C491EF9ED29EF53 3CE191646D7EA108500A935EC3EC9B4092EDC5920FD07A5549EDA2F643175B7CC27F7AC1 098BD65DEA60D6780634EAD4FA2117E74458703F9722C9BFAC8863D2BBF338EF586B4E34 2583F1EE4907414A1FF2DD25BBD2F5F3B10EE054A6783DE20C414E7366BBB3068D0E3CCD A8AC3FE053EE1B89F32EA80EAE51D9FE242D06752BECDEF0F9FCC48DD72BF764378C8628 98B308C826837EEE3C1F745325F1D989D33650C5A11AB9F5C47C20993159CA359ABB6E14 ABED7BD14F7AB1B604EA8179D2254BB6D2F9F08904B91C645844368329765045BC4B0EDD D8A5256C878D64941DCF0EED82A61004E584A8BA9CF9ADF76F5CB0B2F26FA4A4E6499C45 92ECBFBD4736242A8C64D6E692524B3E663CD47D0341637139F2029358BF07AB385466AC BFBDA0A68E684D4132E529F4CA6E3017AB2EA78F4281C290E2EB2A948281C7C466AE758C 19FB86A7C335C50BC32E68FC5973E533DC14720A90E5AE57F8E8D87B0567F291C797A00A B00F1488437F05B149E4CE5B182C5CF82C3B15097C269913088C9A493C976319BFB2C669 553240D1025AB656ED019592AA7AA98DF352A6F0CD453FB20FDA9BC5E53B003528C1701A 94F06022EB7DC590D290D564DD37357DD75AFCA9704642DDA1E23E47FE3EAC9E6B5D22B8 AA0912C8176CB668997D9B9946314647ECBAE379CC2E8A836F697E614CD975560278F0AE 74EA9A7C10F94564170B11426EB79670083D2F68E3336898E5D670AA4785929A2ECB553D 356F8AFD7B0F95E8AFE1947C638684800A8720AB299EF7538D6D56FB1B679FA5987BAC22 A06F3716B089EA008B1DC55E3CD09A39F0A903B8EB764E5AA9C1AC0B5231C440F68D4E01 C36BAFC2FF18F34087A5B90744D85B8DB03B3F8F3578E1605487328A11ED9C7E7AB8DB6B 580D7329026F14F24304B195893CC1D091D960730D2C45751109DE55DE39047015AA14B5 C497C41867A5DA02E7091FB40E952E8ADDCB0117562A04E71739AE2F9F2CF315D510DD0A 063AEE64F428F29AF03B9436652EE54D68BB45FF0E3A373E5CDDC9AD707A989AEC860A32 2AB8C2CBE68F36F2523B1145ADF788BDBE0F577AD7F5B082ADA4E4F798199883011BDDE0 18783C3E8246D2829325798FD75CED42DE6FA551BAB1A8E0637BE3D487AF286EC8B42278 14FF0E5BD8B32A0C524FF0A0C22C8735BF7145D82F6721E7774D2EAB4C28BCE0634A10CD 571490C14979ADB3126983F20925E30D7DE2AC03C146432D8B15DEFEF9504467604D9F02 32F7E56163F09E9BE071FE10FC3CDB00F40004AF8B01239CE23B5F69E37B35D5DAFA76B7 8576B031E3386C6099407C8042816A4EF9CE790110CF24C114EFDB9C8529A43C41168F10 A17C2ACD6C4E299A9DE70657E70B16CEDF35EB41392648F09A02E1E4717400DE1A346671 37A7CD6A6EBC5F48A19FF169A279F815BEAE49B489923AB6243E4C8AF35B4CA1EFBD8EA2 D21211D869E0D3DA441860B6BC465EA8497507B8323CBC9B41AE6C774EFAA7224385FDA0 CA5104978442A4279CA25C29401BBA1367CEF35A2BE9D24CADBD7BD9695BE9AF03BD8DA6 A62111A9B59A24A4ACF6334807CABD977D251213079A7265437C822AE4893BF048B19907 E997F038CBDD1FD0B412AA2817453698EF05EEF47AB03E9FA77751C57210969591876316 C83D5052163EDC28DBACB472D2873919B63E9271310702DB9521E8C18020470A4DC60EC7 A1007BC82BCCFABFA1F575011A9067817930AE0321659ABFCFB4CFD6EA7AA86AEC98D64A 1854B666D075107ADC85FCDC67D89C379741264E6554B7F60E19A5292D356E64538777EC 830B8F0931D34A61F9CFF3C37E187D99D5A2E7E876D1E8996F73FDCD7E614101F97B8BEC A0744AC91DB473C0103B6820134BA545183483C05E1EF90B59B78305350080D2204D751C C8AE8DD9462DD62F0FBCE507F6EF39AAD77024E89975AD12BF8F86130D9B76AC7BC4D4BA BEB06B76BA3D77DAF45E769C732882DF011DD3E00845CC703EEDB8EDCAF7A6EF4FAB06ED AAE69FA3A9436774577899367B202442BD6CD24377AAAB605114823C26D249CB0E130CF9 60D8313DC983131AF766483BA063D7ABC0BC24EC06DA0720D4884F9421B9946AC15C30A2 DFD1375F5CD56D83C8B94CA84D3467574641768C02ED50024DA171F856880506E3AA5840 1E65B0B73B80BE8CAAC83A1012D1F244F4B99BB4BFF9F001FDA8F06946883B1F0657C3F0 22900DC7E6EBF936A8D55CD5D0D66291E24240F8B997361BB943B5A9D36900ECE284CD7F 66047938301E2632D00CEC224B1811F43475B3EBD58006DE58DA2F91EBCE1833CC23C395 C071663B9A91B8FF22C98D840700E3256087FE0A616FF9C2323FBE8CA67CEE432A2D2AC4 D00407877B33CB35B83591CABBF8700623D58B8C745C6FD0CDB21A2C7B26BD8495AC72EC A551C5B077D0EE92F5A67FBB4D438114D161566167535A3B8BD74EB10382D997C418428E F88388B24D9D78C103572341D2BAF842DF6522087E28058CCC1A8A7858EAA41D1F588C55 282E7AD9708396959DAD7EEA79291F5FA856A15E0DBA1758E9788685F3FE87AD15E29379 8CA04AD209B10DE234315BC07132D32C82ED96B649EF7BD65B80A45FB3A48C5C3A994628 118633137D02298916DA8E3EC7598B8FF27058EF911807A26F2189169D7D53A305F89659 B6AD13AB05ED759A14FC3FA59F36902ABFDE6D02CA63BE37DE57EA0FB0ADE69626B8AFF2 C4CE000A5AD361A7311FB0503F6C6EAF4E12E90DD26C2FF14CF944F1C7D370D1035DDDE5 DDACF493116C4B10BEF55FD88CEBC22252BF641FE8E871D2A051F774A5D3D9921D1BA16B 26765180C16A4800F59B9A6B990340D78EF95CE32DC7F14F34A67FFA19474C8EA4641284 DBA859874D070F5B345083E1AC095CA5348E0358FE7B10F3DB25027CA0C6F63D034974E4 64ADDEF24654F73B0473208664323C568A2EE651373FB821BA60F3ED0844FB75754B1D3F D47D3097CECD9D8AA2E3C12A286F3AE09EE3F27E136DCD543BC7BDD8F4E1831FB190FBCB 8B5EB2BB4C91830CDC404EF0F46DA4A9F41345181D0F74F39F36F5D1E2FB935D595E6331 80AB43D32F82C5F339DEB75288209C1F7E006326239FAD725314A95ED40D51CC657E52C0 CEC73AC090702C85B9F171C89B2C787F1E7B4EDAA41CFAA83E47CE0BDD74E9AD13E71539 A19872ADC0B12C705E9B4B271016B208974D97623777A64FD6F4DC176B98B07F9BA07D8B 949DDE4A4236D3F19F360265D8E745845F2E6D74C1982803330033B524B6692E58EEB2E8 D1A3EC8575839D85FD65EFBAB49938B9BFFCC0A23D8549BEFFC4FFD9B5644B205E17EFFB A6D24813F3F490722DCC5401EC9BB107ABD77D11FDD60D882E20F1993F9F471BDE3DF47B 13D8BDC905A1EC61E9325D4F6CB62477FCF08BA409B7B1BADDDBD072A8FB38E26AC452FD B77D07A223CCE2EF62F7F7365B8C9697413D77A188491448143F300B09DAC3F77EC6E287 C372410597198B2E7AF074597B6AA4E86AEBB31E56BA401D0E6E94C40A4F6EEC7703C3EE 06EF6FF5DDFDFC2B7443D67C04D7311BCF21761DCEA797936EBA6098C91A973EAB0A9D6A E81C1893C7CE1A8D2181DB792D20C29F3E6C5310DA2F4A25DECE6246ADE8B78C0593ED7C 62D5D6C89B6EA4AEA664A79DED2FC50F958F8B1C7B92942B4E58323F2BABCA0B77B79992 4738A89BE91ACC5306B0B6E45D672069AEB3485A0B52E931993E600B2E65F969D17585B9 23D1E5C75F44E2866DDAF942C6ED937C4B7BF2409F1BF6397FD27BB5DC7DD077F0F988AF 0677615675590C950D0F9A39EADB0FD85644D3996C41A5B45393BF9FD3EAA4435F9A99CC 5A35051000E4FB703F801E8B71115A0EA3BE19D5AACCF5B0833AA87FA7CD506C3131B6E0 5B3B92A493B57268CA478EAB09E71B1DC304A329DC6E7453F4B3721CD13C2B670C19A764 9CCB29BACB087E768F9A817E893A4A0A7EC4EE391DF074C947B2978A844D944A10E2229E 0BBD69B27AA210D58954353D1266F57823ECED7EAD0AB583F4F27CEDF3F92D1FCCF34BBD ABD82B2BE6BF7F958EAB3F5921D8CEC898D7076524B12D68DB720BB81305F195EF87BA96 264878A18F98FCB5136177EF743037D4F7141A15744FBA348614DEEAA97A3510FF277A18 8081B35AB29A53ABCFF2AF1DA946971AA55A72022A6DD32A7F55C05EEC925CE21704A5F9 C35D5CE2130C32A48EBB7C30EFC34419355761BCD0732AD4B351BD046C32805BB089A3EF B013E4F54374E8AFEC10ECFFEE05982915D22E25A2158F5BEED6A95EC6005490FF895CA5 DB459A2DB44108AC0A9602723619CC2E013155ABD1286C9CC50397CC7AD975A042833A03 3C2F010A0208D2B5F7FCAC1F4661332E91F43507BC6C55396FFBA9E2965CCA72EA47E3D6 A0EE5BA53A8DC8579A85383B394A043B26E15EBCE158D95F14C714793513A6E11C0B4FD9 A02704707112AAB327416114A7E25F6487E6749A8BE860330104E85A2791DE3C98B6D6DA 8D9F251995C972404D1A0D4F044E828F03848565B821BA154D836BF8BCDE9B4F3968E32A D031AEC5216746F5BB0C24B6EA06EC50E0AFB4BEB48CCE75B016708682FBC063DA14314E 37152516354E42C8A6AEABEC056F7D9B85CE992D20061F25C87125A9DEED6DBDEF357EA8 68E970CC703B5C8E67F94C2084FED1C6FE0F9BC6D26D132D7A8AB5EAC1B2801ADA11C806 1D005081A47B901204BFF62BBEC6E119C24E047088B44278CC47816306864CC85A242CC8 0D2A4A10BACAA701E62980CBB93B59190E7ED184E280B0A20F8CA4749C6375EE133A0A79 5215D020563EE1AF19A3C573BCF56533C2BE07D4669C21E22FD33530D408714E42371322 E72A367B66EE7CF614BF7F4647E6FC1B9F9E18867CB630B159D965F6B4CE54BFAC489F10 FD115E894741C99B40E2810CB37E6F9529CF01989C96E6242D67BDFAF52888F1AEBF1870 AACAEEFED464733028168BA7FA51311F251B9EB544BB6BB6F5FA90A20BCA883E3804916A C83A39F9381FEA3D8ADEEE8A62634D02F3C7FCD8F01268976A3B90C59BFB9AB1F7293C14 48E00102EF69931EE40BC3FACCAC7014FD78DD06EB156C860DDFCD7963038197189A681A AFD7B886C6E7E26C87D4293AE6B1B4E7884FEDEACC9A2B049119147417F3AEB87B33A413 C4FBBE3D0E5FB7D61B114A85A9C6F4A95D123234A394615192765DD73865CE47E4E0402B 42D3A1410AA055B18FE654FEC978F28FDB9865B09227A98940613EB39D7B8E4CF55CBCE6 C13A5ED3DE5F617B495CE502392AC8DCE6A7B8CC7AE9B37943DEF4E6D4015D3936DBE823 79E1210BC38B20BECCAEEABA24BA09357AD20C0289D2DC03E4CBB007B8B49AC2F1A47CD0 5037FA11C1E1F36ED2F1DED20FF9D5042D9F9300B5C79C1803A9CFD65D80BEFF3AFFE22D A6A1A48AE94C7F647195C920B4FA1E025B960BF661D592FE4FEE71702A7093BCD4AC1510 7CA7CD0BFF3E766CD241DD6059DB2EE8AC74EFDFE8EAAF57B8AF7AA57B41EDF431549CA5 DEA22928192F8D1D14F3087C9653F3C8FADB30FB994C72FEFAF5AFA5EFFCEC3725285D25 19B356ECF7F22D1C6101DBF3F476575476166E599DA264073283C19A8ACCEF9C0EE2C69D D9F0FEE3E57CF25CF842D0D3CBA7204B63FF0C4FB0D364BFF2D43D04FAEA7BEAE5300B14 319DEC628BE834B7F995DDB697963AC750576C154BA3B31C102BAB9BB93272D6799437AC 9CDD83275AA5A15164757D9D06F95CC444B756237352134AACD5BDA0C41FC0FD98DF9C74 96D32139692846A141BEDA8E79E7279F1ACB7491ECBABD9FDD1AE69C61B22DCFDC81E440 B2965F0D82C291D07806957E6D017B8EA7AF37F05F5331BBFEA70A3AB8B078C4F87F4D64 CCB62D889852BAE9C0FED70BAEB159343A9F3E1F2BBFDE54D5E9353B39B65C16E2412234 D4E7E1C96D282E1C8D1B38D9B9293FFCDB5EFD759D583C9EE63A407F08A6B212AAD91FA9 FA501D1C725EA8B08AF2880F1BF0EB6CBF885B70953517189B8536EC2C7960C7E6D5CDE5 22282682107CF85CB025FBFF2E88FDC5ED4EA44DF630359EDF17BCC33BAB47C302F193E6 5EEE260DE65D388E935B2471A70A40B5DAAC06911ACD2E5BC9D2853A501EBFB39711151D 643E9E4F78CE0FE4678ACA19C3F7B45E4DE13696E35FDB7EB7AB60853A6CB942DB425AD5 CCC11AD042773482E0DBEA11FB1D3810AD5DD26B175339603E4E8F32A14BF7E994ACD717 AE314DC77EAB6061863F7DFE05D95FEAF8436FA218FC3F59EF8FCA198BE6CCAEB3D4F3CB BAF8F585FE5997C4619EF19E53DC30BD017A67E318612FF82EA2553D060B7D406904327E 779B4980085565B8FD0D7B497FB4350AA989820067B13355329BFAD8D9281F0703A9049B 75DB584D5FC19F3015BC11EBFFC3BDE393117DEEAF11994DF5B62B5CAB0B16AE64DB714B E1ACE83640FEC6AFB4D5A66D7DF0AE5DBF347EF96B535E8ED1839CB030703846EA3D2E78 6721D7A3409C8C23E7B0A609525D8A675C88E069E4E39C4E06EC3CBF5D65F4FF176DCDF4 2DE2AD6EFCF7D2EBFA8E3FFB2353676C39B167AF4BAE04624856DD334890E8446134DF7A 2435D76D4D76090E7B6914873A08688FAD94CD3CF36C10F983A211BC0A8B0276265CFB28 A976E83092D7B210B997F392AB4B31AC6DD977276E3EA61B4095F5804ABA0E21D8681A5D E660B5C095054FEB45E9CDEE557675F66C4380A89FCF51E51347BA633FF52CE6F3FD9596 5B329DE8A88AEC6F101338F1E0ADFD99212B29B725A6C4997117FF445DE895963F2787B9 0A892C0A22B2D244834CF54A73082597044AC27F5253BBD4B01C42A69B8DFE25299DF085 8C545801C56453C0E3659CA5A6F4FA3622968F77EBD8E551C8B5FB354B8192F3978E4DE7 52544D029EEC168734C623C3DBECF5B362328EEAB289EAC40B85EC5A36FA3F73CA1C9A61 771E4B2DE1633636F3BFCECC3D70741DEDA306255AE27D4FDBB89B811BBFDEEF8867E490 C1A731C51EBED996DF36340D570FE89004AE7FEB5F686E1129100685EE41086A245154C8 1D80DC435DE1253923B72DE0C6B2EE3DDDDFE5C0CDE38F683E7CE4813425EB35F9AAD55D 3CD3E62314510DF6C2FC0EE94CC188DA028C82FD9BE6C8597B271FD0ECA5FA6AA0704A0E 9C1EA47EE0DAA990E98E4BCE43EC3ADDCDA75ABFFF6E6FB98AB71271A73C3DFDFAE883F3 B37A0D2193BD185786280B4DC961470011902D56F511759FAA40308DCE49EA5DE8C073F5 AB3A29630B93ED1D1EC77A97CB5B157F65B583A96D2D50FD6EE078CD6D7A7CC4A31DFE09 23A866725740D3E39ABA8305BBE4D4196EFF98A37788B9E71EA6E120DF0E6B9F14BE583A EF3F2058C22BAE7DC3B63BC150EA62ED03BC238C27E65DAFB0992DFE8C8F5879B75753E7 375E76ED56BEDD1C983B9548818E6C2BB71E38BF3F771B65F84706D75FD761A14ADAAD2F 4BC97ACCC1191441BF0AF940FDF539F961C670AC4C8129C1DF1E479207F50D1E08478503 409C4E9D165946571AC1CA1D7EF9D31546CA99C1AF6F7611E605A08EE2E49162EFE39E33 726D6ECF05520DE13F634AAB828595C898678BD119D7F6BE976AE504AF22FCFAB6F930A0 29E176F442504F3ABAAEF24723311428384D691A98DF4689C6930D8860FEF6E355163282 700594922D73799A67D834F1551D7BE208615F590781651CEC7AB705EB278B3470D7371B A90AC7F0FC6EA11A906030EADF328B63E21A135A4BE6C6C1670C9F795097749D994277D5 3866BED00493512C771C973CFED9D7125A095FCC4ED15B97E3CF56398981A8ED0D26266E 5516FBE18D099AB62B457C6D8A1CACDBD04A3F64D4D95A6F65B7DB021DB83C43DFC24A27 E772D8A805FDE4F4645178693D5CD29B7ED26821B4DD1AAB2D256693A99F612500A903C3 65889A1266CEF14E112C91F2E2DF5B27A3D979E957C5F70C9AB7F64B88F2466ECA5DD0F4 465D920F5E78A955878C261079CECD27783086379EC6BDA8CBAD8726167520DCEC08D65D 4A9BB2729462365F7E3B97E6432EC01F8833870F1877FAE22E893400A346BF8D8729727E E7694035DDCEEF10B596B3CE9754E69560A1D8F61AE59FD3CFBD0D1CB94A14AA155C2CE5 03D238912CA0DA82E700EED99544762C22B8CB36E4EE2C73738CF1721ADDF2091411F98F 2F7EB86C46E4DB9CF84EE208F6049F73B788BFE5B38328DB074752C8BF9B51327A7E40BE F48A409C0B2377236D94327A0A1E36BF296A670F5E75AA2F4C0AC6815D20B635F02B6929 D72C60CAAFBBA4DC377B5DD92E904EBC2BC2ABCBE404197C803F7878F33FAA8C66EA0062 CBB1E24BE46D23AF9762C2050F85CF03084FDC271BC0910266FB693A4C5EE4057C2319D4 3921EC66E5408A0D28DB2C094C92CE16A2A9802A3D075B12D15C0F4F4B603EA70D69D94C 102436EB6A835D4E9C0937298843750472396D20FD66A039871D21588EDF04E607E03A0F E4671CF071D2A24DE7AF33D9C1E3124607854CCC014BB6980C4ACE3B73F1544846CBA010 A86E003A464014699ADFC587294C8F64F80F1311F4E0B8CC1624B7CBABB7EDAC646C7351 D67CDD61B352D8E21DFA5D802D5CBA52A364B019FA24579BA36A99414E3B018B8632031A 365F4A0E9E5CFEE1C936E546C11AC93A2B7EF433C2010FEB3B2F315D806F6D1F42FCDA3D 144DE40934AD30A14F3AA66539FD901C6A7A9173DD4B2EB6F0F546C43DB1BE141B1E3442 E0E0DDDBFD1E6C582102C5D3CA9A856A7082530B3C84DAD4FE67C718D7AE874C0B59171E 2CB2F1BD37A1C4DBB3E767E0E844E6A189A828384D042D055A118DE26D9C5787CB81B102 F8DDFE285F0D24E0CA87658F2DD9B553B1D52A37B0E0A1E18AAFE6EE4D0CA2E3CBBE5907 16FB32D9030A6C60523FFCBEA0D682CFD92341BF5C533EB7084EB42EF42A0B6E7D172B14 805780F54FDBEB03AFD73D2219C74CBC569573B5DA65CDF3CD11D8CD1E3E60DC1AFAF5C7 417DC5C8BCCDF6E129DE171607901C35ED11B0299BF2104C08158EA843AE803B63CAB426 842C3B4D93954728352468A44B6A02115782156AB7DE5FA01B7A2C7C3C69BD02999A4F89 3600E0E79F60EBF221A40269A40904EC3DDE24A4FCCF92DCA20AF2614B11D85F2EF90015 9C878BE4D889D1471E17AEBFDF34C29ABFBC8B1FE07BA33A5C6B51B3DA5887AF6C6EB0FA A7F7AC8EE55FA82C66210012FF0EF781815EB18D1530008AD7EB0705E854B3FA44AA79C8 EB7A91BC40EFD85DBB3AA61209C03D1C8D70A57AB608FC5EDA04465E8C6545DCF52C867D 6F2F5175EDF68957BA609B1A5E6F9FB15F628EA7F0D74186E278D45F89F981660029CDA0 B1CAAEF12FDEF8C4686171A9FD08BB0226DB70C564766AF171C6D25A08C6669F71CE6749 43F553CCBBDA80CD3C55F283F3068BC8070B96EA52D2853565E00DDD209166FD46C17B85 604F4F4FBFAC1E7B3FBE13DFF9C2354E625FC87FB3EDE892C48BBF9D11A3FCDF65A29E76 FCEBA941644FF4485A4E14E5749CAE0CA96819C9B637CFAE5B6CEB8BC390444763570362 D8B397C3783EE5DFFD08EA0F09DDC3F1A29452B3287443D67C04D6ED1E61B2DB7921A52C 7D25073B58CBA2699AB8578FC49CA9D550D482F1BC7CD283BB8B02390DDEFDE7CFB447B3 FE99D6FB4A225DF571790CFA6FF35BA51440BE6740510D7BF8CD55FE16E6F394FABBBFE7 2D2070BF9CAFFD58FCA0A70BA2F898511477A950293A2197A3E8A7E3FE7AEFCA9DC6704C 0ACAF82C39784D0D800F52E775150D976F1BC9B9D91EA99E44FC9CC9EBC08DED6F939CB9 86CE37724553657133AB4903D0950B235130395EFFC27F76466ACE37A323358C6F935EFB E8109BDDCE9EA7B22F92DA7A5F5AC992B4FA798C0F670C0467A63FE7571F707053A11071 F6BD8D93C1B32F1359A827222080AFF5940135A1DA02DFC6AE1113A93E5FC5BDE02F9739 0FE65F8680B0999EF41AB024E35A88876DF86E413AAFBDDFAD693C0BCD4654FD8F5B9A51 BEF91593357F8F16B7C59CF6DB3E5B6B5597B8F8EE953FDAB759EF5F42B8D7E0282CBCFD DD13062501C683FD109D972DBAB823909E117A55B08E20776A79BA61CE6D84AD8995BE0D 4D2AD126F6C195AF54998FFB9131E1F3DFC61F6AAD217D0DC339BF8DCE17D074EF5537E4 7EC63E4B707D0048543D939DCE6852DAF6DC1FCF95D689441B998C8A5EEFA7DFEB894B4A 90216B335464CA50BEAB87DBC6B3E23AEFD21DBA17B004D9BCD94357EDA82F2E388054DC 593050F7226E133A937F83462C4A91079B8E96029FA17A4162384ECF11F95D53F3984022 B02C4C82A702F75C0C3F91FF94571981380466C8BCAB42C2D3A33C282E7E6F5A73EA38FC 7E296FCF8B1E4C24DB0E2F7F076F659EAED92DA4C9700B6746ECD85995746D648B9FCEB8 FCF7DE89F299DF6A6D7DD11FAD78270D2F45D75FB0BE0FED1C1290B733212C1D1BFA80B5 D17CAFD3F3FF5E504B3EA44727AF6F3F37DCED87DB486BAEFC2D7DD7DA55635F671895F0 EE51D1102B1B491542C9F3CC8F1D1F14CAE5700DC1566B7B44ECDA0150ACB072820C480F F92F348C108CE1F70BBB830CB9BC69A3F3E4E52D191BCC2BCE475734B38238725E3F3A01 84AB62B13458F221C2C505587407B5623B23FE444ED5BEB0F37CA4265FEAEFA74CB365D7 401CD4C247AF0DE67280316545EA659C2401A8D8F8279A8BEAB4FA83F9AFBFBA32794C7C A7268F6BD3CEBC42895E3317C1E8ACC0D82735559AC7EA0378524E879BA243CD6F938C6A 6BA39385EE7944805C6E3D0CEC912D1D711D90459D032D0F29DDED3320E437A8809727F0 E42B52CDF7B49A350D8DF3ACC7FA81AED6E290DC3D40BA6A7001ECE8222BFBF2E7D21AF5 B5DDDE2E531A5042892CAF60BA4BADD60AD61E811BCD9D7608E00CEB90989E48DC676155 EF3D790B8A4FC96A351DC301FEA7B959A8CB44F228B852CBCE8F9450E4D288E48C3A5D6C 616B9BE51F38E9ABE16CAE86549316ED8B58E9B0D81E7994BD83A314601CFEBB5413C580 399D87BF9ADE8D90BB6CC68CC36972159CB55335D74EAAB882A1C3724A2707037E5098C2 2A6655650DFBB2F87BAA1B3EFF8AC76397A226B95492C64E648FFCC08F8A552E333F1E65 660AEEAFA3B0296CFC6B300D3C6FBDA01CEE297241588DB27E449C03F0386EDB5D4DACD1 59BFE6C5915988099909AEFD10008CF1BE8EE8E9F1DCD980DCF0394503177FF49827A3B9 D9FADC16F0890A6D330146809CB5F3823DB1F9FE042B95146D6880EEFD113174FE00681A 697ED8BCC6E6B61188903CB3CF5F6248EE181772F5F873B671812B8FA93C1089BBFEC5EF 0696EE1715FB37348E75AE88A096C1141D19E7AACC7A1DFB282D180E8A08A8C92610D2D4 E3ABDEAB7DB34FA630A8F5151DF12269454146FF715DA88798240C01F82BCD3BCD81C558 E6CA13767923803162A8EADC641182B71A205CBF91D93ABD4D194E327234F4FA56F4C496 40BCDFCCB269A49F449929DE799A99D15460CB9C131CA83204DD513D68F10A07FDC0DCC4 6B93F8D87EFDE4590E3FE360779B5082401493763FA73519E8CBCA4F815AD8A95BD10135 3A1F379DBF7ABDACC2E5FD6CBD2AFE90044D86BCEE408AE8A32C89C224EB483256854C72 E68653701EA2AB54C09F98A365FF042C4018A0DDACE380B54FE568F3C72FF16E73A594C0 E9F3A228171F6EF548EEB0A2F52A1EF48CD81AE008B8251196854A03D4474EF064C3B9A8 C92427F5C3297BFED28C85C235272303BBA92E37257868DA3D4CC651A8E8B007AB388337 29587176479D1F6A95417EDC03D9AA5B6FC390DC64753B279206DF1037A26F38A56D8A5E 97DA5E3F416F12FA14484C939EBB24CCF60CE0CB682821439DBA8DD842E6AEF330609AD0 756ED23585F99CA1BF6A9D1520682D939B38408BF49DE661E632FFE11A7B9286AF457698 1F26E731E8576D259BE89AFD3E96A0872F1992FFC3D5687C5324822D09FE555153E1B03C 7C1FBDCF72E8B369BC26A0995C6B5F5C3F0B6505AF28033E46CCD32D396F1FCF2BBC314A CAF1BB2CDCE7B5E89015E304E1ED36853C9B8C4550894C208398A4596EABD6A675EA1716 2AD277A409A2809727CB0F7D02F74910093346FE37D14EE063F6D3B6EF9C682988ADFAD4 75D07035999A7247440FC2DA98D5EF04D718281C8F36719ECF7701D2AEF8B845B983A1D8 46AD41CE818E1427A23A2E5F842A4BE05A6E867653B6D4530E40B96288C1FB0C49F47CA0 ED4CE1456C3582C385155F309A5EF60819E3E2EAAB741278811A9DFFBAB54762ABC5F045 1841D0984BE8960BB21E8642071E442D5EB7491F2261C855151628787A4C699EDA1F05DD C578A9CB506FE5308A90B3752D067DCE9E715F12F662C5303CB064B3F5FB46358CB4F803 21D29935FC49B937C066A1AC82913863D01C1FA85156CD0869652350602D766CB27BE412 1E50493C0AFAB232057614AF48CBD74C4685360FD02900F8780AA8F0827F2F7E0B0B0306 80A4CF3969036081462D92FE2DDE06DB413B4E76550706B43AE982AE2467353B8059A32D B35DC0D388D6264C573182970C2D0526A6F57AFB21DFC59D22F8D791A214F50D716428A4 BD37D25A5958BFAE8DABA9E2438270B90440AC7DCD9D4D8A3AAE7E6F0D54FD15D1C8C1D2 3E04E9BDA3CD2D97C1DE1E6499DD2B2C9D1B789D600EC6B2B9E24739D65D9C8114606645 D8F2ED5178E3647DC8CE3827E53FFBDFD5948F7302AD1D70987FAF02E5FD03A1B9CCC6AF C658B742C88DC2547B3A4EC4CC5414220EAE69E23F7BEC39DC476D24331422D0FF109416 CDD40545F6802040ECE231B7840CD13B8611D88A25CD60BA268CEFFA145592ECF8CEC07D A9846135D35E035CB55F46FD5B9AB7D60CCDE973A3A51AC2F0314471629CB80CE30E6ADD 71B6819EAE128437C1AA243E869CE668C8BCA434D5A1156A41581D27F3B52DD26BD4089C A25EF40DF171EE2109A17BCBC93B05EAC8418F4E415B6AE72CD4211DAA97780F11A4FD11 A96409AA6BF06A69E6ABF9D31FB157C698F9CD86DEDAB707BA74814C9C96BADB58EEAA87 3B4D4BE0C4A6FEC42B9AA8A70F57DE8399EB5D574B132BCB2D3FBE7ABCB621BBC3E483E3 378CEDBD2FC9B758AE746BE44EB4973581E0F402C1738FB987E7C7B32FA9E3DD3E822F7B 7B79A5D67E0E7C455ACBB780BC94AFB886122FEDE728272B619765C841DEEB915C501C9D 5E162E25835F660E33C017C88A2BC8D1E93D32CE0C43A83C17937B7E886810F774215EEC 57A17AFA1F89AAD6751ADE08A4EE4A6DE1208F3A35D927850042155EF6F44BBA6BABA143 BD726F652D7F8EFB9EF14D281186F9A8BAE057F048D7914429B7BD0D95DECE36C48C6F17 599FDC8F31FA2A0444C683962895C68AFF8B343B9CE4703A2761AC84B1B31946A7C8373E A369BF33219296783C5A3465179E1BAFE1BF8443801C972CF6D28BADDA13F78986F6DA38 8CE4453D5E7AC0CB518D5C889688F3E54C3C00BAFF896961357BE6B4B487064A9660E353 E8CD453B5B828AC0F166B50E0C1CAD4CE97469403B22EB2C3FCA6A734706EF4CF7F9331B 53E13D0A5653473636154D94CCD625F8858B69ABC25762AE4FA1763BCEB2989CCCDD275E ED8E95DC14500574276083F59BCA0A2BE8BB1A9A5510C63FB48939BB2ADE959B0342E759 F556A6BEA0D78099719C9D4FB5D8741598522D483B77155C9030D252E28C2AD364C84364 39A58ED8E27CCB1469CAAB4CD8B7293BFE89A7BB6B72C4EA5D7C29EBD5B2A9DD66BAE6F1 9FA45E886E5A79B5FC7A65438695659213E0F4C7A6590911CA0C976668C7C2697C4F0A54 4E3240D23DE40D53274415F5D6CA333CEE4E6E04EF7C42E84DC0B8F583F83185E1E1CA10 D210AE0816DBFED7AA382EE1CE6EE1ED7B3F3AEB25DA4B1F3555F39BA2DA5B87B9F78B57 9B65915E2440B09090E4E8FB0C342933AD8DC8BA3DE1340F00A037CBC4D1E775D3555532 F828FBAD77499AD45D007BDE4AD065F462D727AAA69E314BFC1055C5FE9637676246DB67 A6BBB7A78AAF4DD18611871835C218A45DD0852434ACCDEEC60AA4DC48D752FE4303AB75 654E270D27E951410DC5354E85590305BD4B0631C90E369D992ACE973879CB962EC25EF8 D01C2F4BC4155F409AA95E65B89D4D1AF4989B6BC3681E913CC4CD798AACE97678D4EB0F 131D6C2378314EFF41C585571F3901B0D7BBA1E30CD7ED9E4C706446D55B9E269FF75547 AF498C716FC0A951DCEBC8BFCF05DB2375B79CC1EDC162ABA073F01C06C0D64E4D17A692 98482F4B4C1747A08B78073D590F5291936AC3016D5C2CF84DD6D93CA7FBF9FC7C9BCD98 4EC0E07F03D6E632100BC328068B2C9C8BAABBA4E0CBEEE49D37025FD0CD005FE50DE670 F7BF621CBA9C4723F3D7A6D1BA5AECCEA901403C03B66F6F92D403E4D89C238D75946080 404B79D35F8D5E0DCDFB0E22AEE8B6BC7D994D05B7AED76A40A22DF9339DE4CD937D54D1 E09B6660992B6FBC6B36791D5AA53093E29C78BF59E0D137B06FEE0A553939725EC59380 82954AEB8EE503154E8B56F4B45B6357402D78D1282BFFD0D38D8940F0B3AA1D48419ADC 33E11C96A48FF09E3A6CCBF7C88A0750868FD61D0BAA581E6A010BE41462FF3F71DE3B9D 6951D2771373AAB7360AB1A7EF6C04113553AA399FD21B02E1C90FD6FF8DB09B6F485CD2 EEECFB5CE1C4E0F3675CD792BF28D726C065D5B8BEB92681072CBF17EFBA31BADD5AD401 C3171B406ED57D757E59AE1C61AB425A580C179771334CDBB633428DDA41FFA7E6BA6668 568930B3AAB9B51EA7E63845A2D50CDD60F8F60C3FAA5549626895644C1BC9DDAC415BF7 96137F82FD0FBAA9F66269000CE1421BE1F617564FAC0CDD70AB2B2DDF5C804540182B4B EA2608F4C00A220D73EA038B76AAE89BDB8B6496D3F8CFC7FA60701303795C1BA8EED486 48BC6DBBE06A28E84D4151F85C790E5C6C7862B7B5E1ADAC6EF0C300B1AAE19F092A0D2A 160208C31B9D36A334511C10339995BBCB3C06D5A7E0658B6E7988FA3704C6E109EB3E60 687983DEA045BCF7596F869A5FCF88A68982DA5FD4E26F72E758C60917094E7A0BB9E32C B16880994E573A73F4CEE17243CFCBB4FD85F64A249B74454654E360DF55D6BBFE5DCBE9 AEDFF628B1F054645AFF8DCB417683CAA103C4FB59E9FCDEC985F0CB8FE454B245C42F81 BB62E1128B7581F1634D63FA0DB839B631A5C46A6AA19A0586FF8E1F36639B416C2E348C 2BC4A28C9A4BAA5274EAF37037C0E0B1F74715F5DC6040AA6BDF49175744A7B214F90355 2CF60765D50B7A92B7CF05BE188C4934EC815F2F3C274D5DE6945E5A25631DD732EC10A5 D1D5911919442FB0BA3B411A655B8E9B2937D2EE2B317A9F8656898B2BBA3C93BF7FF001 FEEEB4701A01F6493C6AE310789AAAB18E543F822AE6389A95F8E07F6948D90DF226DC22 3FF6584CF81705161648F245BF7A95ED126F084190D003824AF91827912987CC74BBD073 5898D710810A4057B652E46548031A2473758D5157BE9F657D6AD6E598FD6EA797F66E6B AADF37C84C671A8938BD6ABB7B9B3B793EC1B8A70C1284D8C31B180E68BFCA71428EE2FD D10185264F9AE8049B64DC56132A74B609867D3B9D4815D1BBC83A6CDDE66504F2917544 5FEB2E0203BE174203BF266862F83828A462BF880AB22EDB59CB180A8E0CC4259E4DEF1E 1F3114AF8C03DC00C7B1F39027EBCC62D308E1A99E9C0B4AF746DB1BFC872B10C8D1275A 93128F35E8883DBAE47AE1EEEC72ED408ADB618C32C9D780AFC63F1F4D3CA1784A0E483D 401BA2C3E2B8B9A13307028DC563727C72F97C2A7373F9B8B664782C69999D827E4EA508 585A47401D5274B658CC683401DB1B0977A4214BF0E747116F3A2C06F75395A4A4A5D8D2 68E17F8AE00E264098436DC1054456A72D426FF4DD84EF7AE9F4C49434CF6C9218E7B91C EBA8EA88CBF22F4F2DBCA527FCD11EA79E4E5719E8FDBFF5ED895F5E640353DFD38F6D11 BA785ADD90035A3D7BA68620F26CBEBAACC14E13C904F0FD147D0D6326D94B42748B7D72 94BF4F97386309EBC593B8BB4AF0D09C2EC2C666CF0BC151CE7F7F763FEBF83F521CF115 AE13A8C069F3188140C2E1208BCCF8D05A3A79FBBE8E58232A7438DE1EE565B56146C9AE 4DC0CA21A5F17B05229FE0373C3291266A413C382CFB63365ECD9F80DC6CFF7C37CDDB9A 98786B3130B61DDE400B3383D300974B9CA0BE9326C2843267B805D9C2BDB088156A7641 704B203D0485852AB3017B851D63BB4876A3CA32AB30B87A3A9789D10DD76168B2FC0BE7 2DC6037A9ED4315DFDAC2691ACBB975B777FA7460A851217B7328BA52876260F0E9A43E2 962A80174051139EAAE4773184190EB46E72554267C0FD1B9388271B7DED405931F65479 FCC4596027F11BEA64C684BCCA6896CBE3BA2CB2F71C1AA16B55F63D27CC239ADEF62E8F 090863B0659D8E41B45B65F91BA24BCCB6FF5F37A03320282156468CFE46F95612300B5D 1D811C58AE9DDD905174565900634F0E20AA6D7A15E43872300C876087B005CEFCDFBBD3 10D23C04EA817DE15F350C4F90207637DDCD73BE0834A1651709EC3EBC1F7A73457ADED7 68D88A2653796D132233C25030EC8E8159D128E2260D60F18097E68B95A56E3C590D4F0C E778F72FB0A5E182264651B3B93BB5115BF14FB1D71AD9C9EF953344C4E7B04B16000DF7 0D8500FB657C4D368B669D92638E0FB331EC3AFDC59E75730FACB442DFC31FD087174379 B491511BC6727E4C31C2FF756C409508979DC47972A9C0369BB61A450BC888B21213DFCE 0FB400AAFE8B250112CFBDEE410B03F344E1C6E3A5743304D23BB7897D6DD6A052346AE1 66C20F309083C0CC33B1B7D4909D8218AACB35134DF67F72752F697C4A6C568ABF2A6BA0 6138D0DC6FF73066A5E9E559E0A25A0E4BAA0F0544D680C812E16F70CC0F3521491ED1F9 747958D476519258AF9141DB94B1599F78D80AC9FB2AF393CC98B307DD3DBC5BE037C41A CA0450771CD31D126F3577A82E0D32E1E114753962A635DFB27FA9BE95240B38D4B20E64 651847E20DB85F80D062E80D1377EE0D6A751B5C5E5F89E6A9F09DA05C3BA03ADA1878EC 6EAA9FB0E3D4A8E707B0EF507256D60F76E25B61421A4DC14CAF733B03F43951CB3A4880 7664484002BCC03695237E902217ED414DBC57A89802EBF93D4DF4ED83E5CCF8A79BA8C8 92ACD02A4D1BC0BECB65C3D2CBFFB5B11CC143D37EE56A55338854EA43506FD200B7F350 EC0DD9A283D0C46C5D3E728F920875DE6D3EAC17B025CFD20823D2C435C120D20F80F948 6A37B71B68462D9C38AC003E66871047A6DDA56FD5CE319C209DDDE831FAC80D8C6BF498 DC6B58592451BE41740BEA4766E0D71E540EF881A9110CA16E9ADF2ABD9FF296279AB2F5 CFCFCF8020D42B01F4CEA91440C7634A4B901E5B2377D6F37174C692ADEF3337C616119C AB1735338F2E3AE72B22DEF9735318CF8B69F23E110D8439365C67CABA3D2C16FC96FCD7 5076AA46F4F5B0DCE6E2D5250E2026609A76C41410B8CF45DC8BCB815E45C07F0C248BAA FE71A474EB9CAC749EDE8FED1AC13AEEB5549AC306B1ECF05DAE05E5A339ACCD9FC8E52A 4EDD4E2E5660CB8640D7DF392BF2CA1B0864C01472B4ED4A7649719276F3709FDF5B890B 6150DBEE2EF12390B63FAF9C65AE46AF648DA2CAA1AFEFA6982E07C63F810D044BB122DD 2AA67ED2E98BC3B7505BFAD72E05E228FEB9FFB56068FBBBA1E8193EF539DF257A1D3019 3B2E42386E6017DEC0593454C76E13DAEC50FCB81BA6ECC997225B79DF89783784083F87 BFB92457456F60D9424C93CEDD40D4D462359E7060282A5A54E3F8F54C86CF6740A8AE60 C66DEF9B52513D70B64FB40671EB762780F36180F14724069D029D1B43DDB672A5A6A9C8 9BBBB54CE48D4D25E61A670344B4D8DDC7E57ADADE6CA7A1BB5134276528D0450E5DA9C1 B8DDE79D25D3DDF220204561E67855D168FD7ADD01F497AFD5D3E89DD83E069486F55B59 B91823689873ABA14D5CEAC606FA8393F1B34582F871B6C4131B9C483A4BBED1CD69BA47 37D050F57ADF9C806CECCDA795101376838E893016CC92DFEAD0699E6BE626FFFAC028E5 462A1E7CA9AC3FD199B4C4FF894A3E695E18646BA33B900365CE6B810C7D53DFCBD7F8D0 D6DF20F3B09ABD2C7E862A5C8280E55612343FB741297A6BB95FD9423C4E0602A8F8156E 365AB54540AD5449FEB3E4D13C94794F17A0BD06D9E26DC3833C87FAA477041D1394E0C5 993507E130C4F60019FC0B4B74652B2BEF4A9603FDDB3A534001448A8F691C0A97267826 1CDBCDF47FB4B0A7830B434F180625B451173BA129726834181EAEC346CDDF68F32A57D1 5ECD44FEB77C2054908C6F6CD73DF94E4FEB47EAB786106F25CEC7020AC7BCE0C45F7935 46E02937D310ADA5C46379838E266B25127413F0AAE1AC370E3C753C6A7539C8AE525CE8 9BA7C49158D4205E10C054DF541B7472A0A6040E68897ED029F42E013E0B8EA547A7612B 157718C7ED485CFE6CF0500C88A0CA1C96A2320535EAAFEFA930325B59E551C8D57BBF90 2A5A7785E69CA885CB7456ED7D063C93161B7F0AB5C4A33B19CD8F9260114B75BBA018E5 CFD6EA1CA19DA6A157C632769EEA695B634311B4168E776F9B81AE354455AB0E9BB355BF 1AD45D85173062B1B2E66F2820512ECE3A912A5383AD544FD4B0269E30EE1D120EA034FE 5257DD2B857C4812CFCFF94EA3B8AD00E18C2AA887CD8E2801740C69E148DCEFB34B4897 84D875555B9362A35304998FBA3FBFA98D6902DC326F0F407751DD3ED02C77F9B22D768D B8C3BE360CED4964E0D413D9B288E403DC8E6D89EB0B68B4BD3959B151B45FA8BD1967B3 70D20BC10CBBF7F626F1B4C3F125833567B9E88DA21EF2CA6C209DEC8EA977752467090C 0467D01B5B0EC2ABAD8596A3A342B120A7E3103B009E8BA2B95378DB329B917C95587A82 EF5F72890BAAA37264BB4555F5C69D10A4E64A462ECA8B4A1BB166D88036BA071BC33DCE 3E79FC9F144BC2E446B720155812C06F10752D1391963AE98C4CB8B035C3C8E2F7CCC529 ED8AC3A052DEFD0302D1F4D5A1BDA6B042C1D90CF84123DCE6A7C29B3AC8FEA16F07A210 3B2C7098ACFE7FD92682FEDC1132EA886581B798496D59B5AA47CE3BF3A9C7CAC6345386 F60ADD73B0D52642F4E87461B1C2792155D2123D0D7BA43904891ECB1573D871B973FD0B 52D76A445B55F960BCD3AC44BF762B7AE12DB4FBBB0409C102445C759E7738C4D3FE2BAF B97DAEB3517F5FA545180AE55DD7D4A0BB03EECADD21902226EE99A7156689824D02FBFF 41FF30B9D94D14348BEAF7D3710725E9A8054DFFA2794D7D5A90482E9A49600885043C5B E0E220ADE6CE0FA63C5826CADE8A8363440C47E6E7590CC8F5D445121E8F8B947D8DC4E5 DB5301E89AEA62B903ABE3AADD4E93A49A83B0BEB040F7F2C320301042CC9D31CCCFFD70 32DB766066FC83EE7109C6D8DA79610D5E1E94848556E4DE9FCF55DDF8BE524361A4D673 6F09CB8AFF3347C41B9397538ECF26274DCE7A27E76301007A492E0C6BECDCA0B1C9D1E5 345AA204F29F361FBAC0211BCB444F8D9B9637791F5D3B869A5117CCD73EC5124F1ECF23 705209F4CA831C5AE5BE9EEEB390A8666BE40363642DABBE28D1E06182A95ED0F7D1177E D3294B4C29D8D1FAAA210543C3850FBCBAC813C21AF5D62621623DA41A27F9DA0ED6B0C3 A2AB61A913094FA2574C52FA1195521962C8D6B8DB2A10139A9C09AFAC133A8BBACF0A86 01F38217602E70DB3651DBB083C791E7317694AD1F50FAE278155390264C32975838DE33 CFB0ECA1B0BD993C2A02E1DC2F46293018DA3AE825AB81621894620054724C3A8D95ED48 1E899F972E6537B21FFB8A4C55319D15A03ABE885C333BE19ADBC450D58C5DA2B76DA6E6 2487A71FFD2A851F0551F17A00D165FFC44F204565FD24B0D11C2C21238F5D6F64277FDB 4D0704DD6271C69F4A5CE05258832BFBB7D303C00EBF68DEF694D77215084C74BD2D89C7 8FCFA635F694723DC79E99D87F03ABD7A06BC1BD7643092790AE2D15D63D2C98288AD284 7F48081116C31D98680BF2C03E4C2FE4DA45851E4FCB6FEEA80294ED5709A796716B134A 8EEE8ADE6C3709541E3D234F952B4B2ACD1422756B8765AAB9C32338736207BFD12DC05C 4D7496F1AC0797D5A3047F9449A8C5237C75EFFEB8E157B262A833BFFA03A26CA8AA1188 84426DA94B43BD21B1028EB2A6A30F41179DA886DCBE99AAB28A1B329BFB743ABA0A2F4B B4C400F1F3BD3C9A0109F63EE563AFBDC1591BF3CFDC863429A79F6E0A21A749A934EC7A 08541245B9F3CA401EADE0438C18B9FA2A78B618F38C611F6C053D2F6A0726CD20687DD3 B09863DC0DBAF040D15DE51397DDEF2712F688D291B71DB3F59A7D87E2F44FFED1144981 A11BB9824B1F4FB6C9A1CB11867A187796E5076C811A9E085EB5C202E0CDE461CA541CAC D3FCDB4031FC78D7410C4D1DE558A5B697F03F9EED11F731678677448420B876AF142242 574C740985FD2B6038AFCF1A81C4D89D00C73A09C93AFE68E5158B06B1E4A5122A371687 93C5744583791291A8B8C2CCADC8C1BD233285F91C87566E36545ECBF3A8D5F9B3721292 8BF2218F2242E3F19F91120CDF7D7B118392A4F3742911D47C4B6B2A61A7F79378DC8DB5 9DB041A761DB0EFF44C948341C174E5C6660DD5D3E5517EEE0DD88A655F3F9524168CDB8 AA2A506EED7498CD8A320E2FA42D10B1F16F8FAB5B5E85DEA6DA3005ADE58DB47E35C71A C9527AEB0DB1B59D7DBD35A5E5C3643E17139FE1BAF662C7E88031D01A9BEAF71A18DC76 F8AA4EE94C2575C438BCEDE9118D5124135A071E3DC0B103DB08D7277EB7E9BBCEE953F9 77E01A009A031D4A204B87C0F0BB722508B76E4F4ECE45295A2FE89A1DCD981EBB4F9877 246527356F2E8DDD3A67C8A39047F4DBD69B37112BDADAB6342FB6C522FA37CE74FD74B4 D37D919B612C91586A2F1EC2E1AD95A5DA5F6FC0E260362765A262386FD8B9C27CE5FA84 EF0B7CA9A77B1C41DDB5CB9450AB1366C00176A7D47DA6E4BDB2C1C548426B69987EEAE9 66F4A937FA6597B2A1F2A690C3B467C57DC1A6E271B4B4FB7A60EFE602B5A2CDEA496F54 073DF69EE58BD31963B17870B41EF97E852E286E1EF07D48FD2CEE44F51FBE8FAFE8B171 82DF3D6343C85AAC1F58494274574A6231652AA194027CDDC257B942A7FA1E9002E9D75E 80EF552962CC5DD48735A14C8B81020C167319755636653041031E89BD815A299BEE48C1 626BB77614622D88D310B0E19CB4A9E57C174BC369BF13C727FB452170D9E830ACCA78FC F7F0148CA9BC1EAD7CA3BE325B60C676B3C5AAFF6FCA80FBB8737C7BDF51549439E06B38 79D71DB53A757EC2C2D66FFE2CDD0C166E2981980AA2166112BDD1B14C19916A14403BBC 7E0FA36A3818F6B4D4711BADDA0B113F6EEE39916EC8952E6A7858BC65BB175488A6BB74 6E78C5D7C565EB59ED211C5DDA7443653F6467C403F9725AE83953468488A6EA8237CA9D 538328329A8B23D3C96727A7BE68B59048E394D2BD3E9B5B97E6C88DB0D3B2CA42C1E845 9B375667990B8B28CAE32BB63B8973E40533D1E5FCB26B2F680F985DF33F37AE6F32B9B4 CDA270B0B060C8E511A0220EF06F0BE429D2B977A3782A086676AE58C244D74E364533D7 467DDB36A7B93F27A9B729BB3F0087C01E6E38ABB26A2CCBD35F2AFA01C1A085535F4427 521B968EF7DC76BA612329090FBCB6C99F73A61BF1B3D0975F2C7457666994C94C5E6FCD 4D4CCF29DA3E355CC64034655471885713804F44081F1F4C426670A0390BA6D2C25977A4 91720310D0421B3D5FEB3C88BBD35B2D4132497904A74C3535A15B924023C464CD70D227 F28490233A568AFE309F6908C0F369189803ABA18497C20B5E47D5D969DA3EFE03059316 C0CC37688CC42783823A1618AA7C0AB924CF1D4B961CDA7DC6FAAD0E8F742D33ABC15730 CF0E246173CD0A8F21466C9A4A9F86EE6ED508BCFA0E4AB5AB079F1EBA14D78E4B562F81 4A1F870260F35D55D415CD2C10EDC209F23BD8A0A0ED6FB8EE11C30EBC2250559B02221F 7861C08C18BA12E748D7181EA7314E355E27EBBE1B3C00C69C549D4442998259D9966E9A 6C89F9D8796A0DA2745CE68C3D15368621F9AEDD74264565EFF245EC7D5E235D524D19A0 6D1512B3A823AFE1944DEEE38E6C365D8EF2917C382A537FD94DEB1F7A959A69A3990033 F48466A241B4B39E8AB9643677BF42BFA3080B8B389DC2BD74DD9CF7D2D466CAB7CC7EBD 33FDFC9CBBC0B2A0D3176B3D5D9C78B121705E9AC8DB4B76711A8D299D6EC76386C78241 FBE1887604B50BDAA81187B0987D0B7A2108A32BAB0406AB8977F4EB25957E88F93D0CDC E9121D49CD3FAB7EF4B4627A731C43E7198EBF05E662A2A81F46E0C55510B6D47A5363BF 63A34E483316B4FAB3BCBD0F190F554E8133E1F31745424E0B29C031D84F24A1250CC3DC 28384EEA40BDC069C457BD958A8D2ADDDE965903B436FE8BABA1D722F82B6BC781980B54 86FC63E2F918716776F756BB91752A0F591F518CD941AD6453AC1D5ADB8016E17F0367EF 973A4F6DF74BDC2691457DB95EA4C5729031B8397663BD0C4388B8E514B279F0F003947F 9DEEA6E76F6C3D3BC3F64987B5AF5F7D520BC76119DD36265453DF598CFA741E9A404704 4C2AE3E1E7472CC11BAA4D5A32304447DCE4A766DD19A50542BF90C3F1F93BA6669BCF83 808634A13FD2AE46048C42A90A8D0768E3BEE2B902E564CF27FAE1AE71E5862A8554967B 1BC8FD84EDD3410EADF57CB3E4617B65B26A2B90CD6D47E7796217B51BA60D29D81F424A 4590B5A8FAB9B7404CD142CA01B5ECDACF659A4B4997BF1D1B6F9847D3BF5102CEB53754 1410448BF07E8E49786A718F56FEE3966C4852147B9193233C8008A2D2DFB70448078B95 81FA5F9CFBBABBBC5D7E6BED86C9E69E71FB53AC96FA096AA8E6E46B67BD96A58A18AC48 854D5C6466329B0A9C7C910A0ADFEC02A784B3553FC43E4C2EA8E1382AB1D9C103CD1260 E3709CD18400AF2936AF02BC37FC32054A73CBF36B98521FBCF62D4F25FC7E0F3989B25C 084FC5B84F16F1812B52D7AB115F0A80DA3D846A3DE4A83C512778B469CB887EDEA0FC37 9581C927228B510F441071FC705C98024CC64E9BD21CD7DF90BAE4D271DCEB183FCBAE68 DC78E977A8D23206CD3D7E3AEC0E8607E24A431C6E24F649370C897A65FECE2BD91C7D82 F7A1CFA96AF95891FB8A2806CBBD2AF6DE7205E8E7269DD0E8703758F93D0BFE29CD178A 62BE495A0F7574EDF1679AC65A72C43131B63AA8507A225C447CB2D71E0974A1405E5CF2 E13C7FE15F3FE046377500E9C4A1D0C2825E49B8AFFA5B54785B39D27D181B0AD38E0E1D 35C03186235676EB44E268F6308B17B45B2AA604CBBD05E33497F4788E969E01EC50A3E0 F8A6CDD1CD8950505828E16F2B85AED36EAFC45D9466045D43AD9B3B3B2B92D5AE0A383C 4C0D8C27BBA70E4A6E7F4D134E4D684B9AD5BC57F19810F88F618F49C66DB98D76F950C5 25AEDFFFF5641D0DA2532994BFA810022AEB15505DFEB561227DAF7FFC9B2E1578108ABD 66424877BAEC36FA8FCFCD8E23ABD236399F4AB2FCD5CB2DC84B80ECB9C6EEEE7271999D 37272C0F8D1A306814BA2D302F7A3D8C08EF5375B38450E852820875DD008B55CD50230F 9F1C513684B5A7E0BC1C992804AA638CBEDAB8D673556F9ABCAEA81059B0EDC0193FB823 92E4D7B739E8B0053F84B7891434CDDF773E15DFD66122A300E0A561CBADBC15058310BC C9E44582D513D63E90832C521CA6F7E6C70D3A9F461BC33908F1773575043419B5310F74 1FC502C5E52D7CE3421D0BA35BFEFB54E477106DFA69677F822FEE85CFEAA54EDF1E641E D5E73F733F3021A0CA6F5CD5EA5ED8C09B1F3B1CA953E92A4117839A678572DEADA59C50 BF67C6367BB03CE4FBFEB71F652918939FF2B61C6A89E2278D42FB30BEAF2CE7E6ED6D59 CC0B941DBB15F4BC70AF627817277ED59A95A3FA22FE35AAB686FF442237C1B4A9FDF6EF 62E4F90266EEDC96AF7F7D538DF26632B6189C2C74F62106734308EAF30D9A6E25A8FC26 12180B467359D44B592BC4679DBE01856CE65D2E0FAC04DED5207CAF770198827720A708 E0667AD7A3EE70879A25C40D468E307E01C4EA8B0FB67A854674010A90CC42CD6821F717 19055EAB05AF9C9856C6FB31850960CDFF7CBA473C4098A45A1E15C533182D146B64D9D1 BCC4EBE36F926B2D4BCA8737364CA448CEE8A27610425E06420404B99D7C2FF4E02A90F8 583262933685471C74FC236671D814DE1F3016BBBEB1780E4DE6489CD71F5DC6DC2BCAD8 D742B695074F28EB6A91DA6977D8BFEE0A7012DF751455F36459FDD63FE1D1317858A2A0 EBCC845331CB6BC509661F464ABB2B3341D1AF150993D73D547DBE8E13A249B4CE85D9D8 3F35B2B7AA450CE28CD22F826F69F7B1F7AC8D802D97FB20536ABDF8CD275E67C22674B3 1C6B69C7C8410B93FA3FD167764F2DE0DB966B9BAE9168554D718E00A5017263D49F1CA3 443F1C126EA11DE16A4D19BFC9BB8AC52A5471D755EBD49B535760254143E163B22940A8 0F2AC318C264DCCEF794B02CE91CFFD152416C37AF6F7F1D151F4143FB808D10D635E811 CBFEB3EF3C291F8CA480769FA0D3D80E1ABB4199DE5EDDFCF720D95B1F7E57B80D529A22 49AE1E2DDCDD4CFB478E88CA5EDC7C4A97B7BF8D1DB4CF194227B699D1A5884FA7163E87 7117F2A46897135F0202B6AD25EA7BE2AAFC933D1E3761F0DA9432A72BF4FA0755CF555B 7DC892A63879333E1D5C4614215138BD11967D5746163ADF35C13D81DDC09045989E9AFB 668CD3E34572836F7ED5981CE6ED895DBD5B7BB1AC7BD9A4A197FF9C400050A97F8684A5 E9732512D1BA6C9F4EB27773CED4ED9E63DDE7DE003BA708798235CF66D0C7517AEDDBAB F667F6AFC423511BC344A8CF07EB7C697072B9CDB4958C40685DD2C6317B20ED0CE5DF6C 204B8029D48783B1AE8EF5FABFFAFBB42BE9D26B4840C04FCF826CF6168DC1533BBD3452 7D2AE02FF4237675F45ECF4C1994D45E0A15E6D03A3E399BF9B0821AACB73329636833A8 B4937F8DF6DC557D20FB4C1A33D7E7A2411BF35BB0888ECBBAFC4F1DDDFDF71BCC627304 C4F92B71BFF5D96A822DC9C71687C1FD37299C4BB76B7F2343741882ED86E05FDFD97CC8 76EEEE402AC25F9B5945C48629A605632DB0E7D210CAE8C887718F10FF689AF3BC23E960 A1872ADD99BDCB14CB388B4BED0C9730947ED47775DC9A2B028778ADD281B8A7107C7348 FF35B6403BFBDBC3AEE99D2DF222D796BE4EEE6071ECA471DB5740647D136B49D2FA83EC 7C12E402BCBE75C7BE2CB2C058D041A3A390D60165866D1B84A5A21AD65E5B7313071ED0 CF488AD4CB6D7BC4CE06B620262D4C3952BC443E10EEEF07FE3A1CC72F2921AFA14CE11A 40655EF499B2FEBAB39B530BB27682D3618705104D6A781ED1463EF6217F8DA8DB308E47 2654FB4A1F5CB5A147B50FE10357E109DCFF49AC818F53621619B37A9FC57A5DAB97F829 82D2A91D92888851F9C58DB754808668EA721894C859EBB4E09123B8E21AF0D4ED31092B 1E866C80FA135E73CB59677CD3E74925A82A6E8AB6A1E28E1735E2BBA3B79CC8D1D6531E A41214CB887AA60C94B642AC36F9720A420E64F321A474FBB57576C2B0155450B51EB175 D39DA3945AD41ACDB958DE15C25913F7C3D7C0AE3A6CB987835B26DEE2F92FB85E7B872F 1035CC7E7332A9418126BD493C892033FEB7A254B47623F8645C52D240C70F1FEDA77C1F 87A90806E9AAEF356EAC0758714EC5018B1B481B79B416A2D6DC92D7B22AE75894517C16 C3DD09C667BBCBDD6C3D36AB00B636323B2B6116125F6319FB4C16A57764E8B879086C2D F146DF03073509C72932A516FD7BF9F9B1936B643201F590D1D551C2C5D48BDC93785B5E 67F1E6EC0A5D14D59A190CF6894060C1953D2DB3C79F48844F7A0B0F0FDC3AEA8A53E33D 577B67E9213ABFB350929FEB36A97DE7658B441CBAB1F0E26B3FC5612202817A5C2F423A AE4430703E9FEA99B861C4A8CC09F79AC6E6F53DCCEB0EE7847CBF73ECF35D4F5530082D 1AF3AC71BC3918496CE6AABC23D61A98D11BC6D7B40885FB6FF6AC67ECF47C6733390DCF A88F9B9326B5D130874910D3E479ADA40777274C02847ACEF3AEE8E0DA0434C9B35859C0 3D23BFCB376446EA2DE09F42AC3713F0673D7DE567E8A0A1B15A1DC88FC081530804B744 2B0681289D586D9757631803ABE18DEAE727DBE5DC052A0A1F0E70480DA458FA96A010B9 57E4D1CB0085713817AFEA72535EC98D71B4B9ECEBE04C51974D94F874B0E3E74D149C96 BEB4CBDC17D81564C3C84A14F5130A08AC7B71F1A2B81CFF6682062EC4DC6D8E1BDC312E ED6ACE315A2A28C772216C052947E079071314DD07BB321F1EC8322F00CE57D3B0E53E6A 7A2B9002F1ED47621CC255EAB1F3152D5CF2456764014A5DE60DD0CEBED98B584457377B F67065F706978C6AA2914A68A942DF2B2742622007655BA8780AEF5086CE17B67B8B3AA7 E432EAE81226FF8CEC95D0498BCC0FE737DEE690FEC30B80F8DD74F05B9B88794A54611B C12F61CF8BBDD49F33C5690E1F03DE89937040BA0775FAEC6ED05026ECC6DC4D0A0EB441 66ABCC55B3194DFC9213025725A8EA81A3290031FC365D3741922FA26E1499B93C2B59A4 BC226A3F86FF1551DAB5F9F850ACD311DF36EE86E5B3EAA4579972223DAAF9E475F9BDA8 4D95A89DBE06611D73BF0717D1FE0258086C1B97103CB62D8DCEA974B41388C00F176979 E8EFBCF4FFE9144820AF24BCC47EE0597276455F92BD1FA21FE19E1D98E6E8D6BDD6AFAB E61C7B650C109A61E1A3C6E92A6F2BD8C872A32DB437E2EFA5A19641608CF2D5E109952F 8B2D9C0F0B96322665B1698490E37E860900EC392CD42DD9AA6DE6F0E5A5EE7BCD34A538 95D129885A10D9446993F5CFB6978DBA5B9BAB29773756B9867E4A2561AEA643414BA7E6 00DA0932D0252E094EEFE73E2AB163397C2266CEC81ED1CB7724335E1FDE7CD753646810 F94A631F2DCCED349080D4E9BA7E9585E3F52F77114012C081C806A447BA8AE735E406BC 532B46F55134817DC0B30496C6F5367A4DDB55FE033A236404D643C4C3DDF9D8DAC0F165 C2B8BDA4194795FF0146830C21CC1E991300548E7A0A0B032BFBD828A960FCE987A5ACB5 E2224DCCE6CEA1F7C6BE69248B6044ED317F1F3C028142B52DD60DDEA986214D93685E9A F3A2D9F7899A614FB41BAE93640B9BD10CC3981505415BD61325AE4E2EDF73E7AFDBDA1A D4DD09F759787DA42A474F1B6C134AA6FEE8CB1B5BE1E9AC6AA2D1E60F7FE74EB2FAE2A6 BD8874F746D14A51F860741F5DCB208C461F8118A4741573CE37DFC57E8B6EEB1D369758 7956D6255ABB0E047F04D5AF7E59DF62EE011BCB403ABE71C63490F9E3F28096149F866B 480EC82AB9BCF835EDB42F72B33526DC06CA515920C92FF73CA0C1A1F1F61FE8F373C486 5DF775DAF6C7BE60F2DD4232B73801BE6BC491FA63205730E4974A531F1E75E74A9ACD2E D4A9A9A45FEEA8414614B535372F94E55BF70152086AD2738807B85E0ABB2F5AF149C8C9 9A9F38A6CF85E31358F8846145F428A89DA1C26DAFCFACAE7992CAC52BE50FBE0EE43CBB 2228490A00E9716E513C434DFDFC38263D773404743713BB490DE92A2C4F3E2E67032D40 B31649A0672EB3E41079316EF1020DEE6DC23B95B093FBB87A0A88733645423F72CFCA9B 4B499F178EE31E5C8B8D432D5872CDC09713CF21DAAC84AFC235E8AF0F8DD6D6CE213937 7314BABC357F9DDE5B3F2EF4843827A6F0D1DE9C8D0DB30E14F9C94FBA3A7726D6479706 162D0071B70C19CF32BC2FD0113504C82EEC7669A66331267B4EB18C5F1902B6B2C78C3A 86E5AA1D2BEBB6AD05539A612C230DA216C24B40029A8CD96B8FF0FF000E816B6A7C4F70 90E217124A1D6A78604D5A340C278BA9B16CD4B5518E0376B3C518E1493AFA9FDF83C36F 6F28785DEA18DD992EA6C2909ED188A31E933A0F5B521ED9C46E7A70BAD32D05AFDC381C 9EA3D56E2E8C48276A82F9EC08440D6468D0DE0577EA8D5171B678F3AC9F3BE2D5DC899A 4D945959C9990F334EEB92F34B88F256FFA564C591D5B18F79BCF9817E827BE4BA219423 252095B90DB4347B2D54F2BE6D31B87B525D103680700F13CC1C0F72B0DCCFDC01F2E924 B5E1442F21025659C39289B7B4AF03169F584C49D38EAC00B1910B823745054F00B322CD 174BE2AB28915D81A829B6C87486ED7EA4D44D6EDB6BD69C25112E0387FE9826C0F3F2BA D1C6BE26E603730DF1C4CB227936404E138136082AD61492923E173484955187CE3DE172 0FCDFE244D85D3C5716B7A4338A8130748567E0044D3D9DAD19A9785272819ADC5CC9876 B764CA881499268F67D6FE0ED4C73D463BA920F27CC02D187573082A1793D228D2011E2F 59A15D7349B2EE7C9E7BE1AC231DCBE9DC98A2796F5FD4A5853B8BAF6F266520CEA0C42B 0AA848B977E9FBB93F77CC2F6224A339242BA2D7CC565373E3636DC0CFAD06B7C5C8FF10 392C03A29675102DAA1E7BD4D45A2BCB6F6C73F8C3A6DA9D520F858EE0E4028FF39A7C8E AD10A54E91112AD1A6BB7DFF7D3421533DE306FD859D5F750268EF950F4CBA3623B38703 1FE153AB39B304EC57FC95710ADFFCAC53508224A7DFFF79AB8A24E4DF0846926EA4CDD5 665E4F1734764B53C911EE8AB436EA08ABF1FC7BDFDD754D22C6CDD1D6EF1786C10688E2 E2830A80A5AA37C08D1545C24EEA559618C927E4E5A1D6F83CE3CC7B100D4E04561B1BA3 08A400644C6B49F4D5AA8EC1B5D769D16B28E1FB6DB45B118FD348D2A6F241766EC0BA04 DD24F51F3F288D954D2C7E3B402361D6343C5A26F78D2C220E83D33662BB0CD33D84209F 7AED4D30489645AE647D045AB0BD56E20943BBC8642B2DCDDC09F955EFCD74F04337A15B 9DC924D48D1AF6AE222B76563139CC37966D32937FC5BA436843EB57761B9F052B0BE1F7 132E40D0F0C783CC80B728B75FB600127673C0FFC2838A8B52AA3C957E978000314DC091 9D1DE4DCF84280D7939ACCAAA46ED513080442D497C7CBB2EF36C43CB3BD66844691DB7B 2F1ACF8D9695E03F747E3C0CDC2105871F13D27C3FA07E30A27F5414960DC3A51AC1B569 F30811EC03218F259BA3E4668F83F6670968C7DFB3E7CFF0D12CE126E4C27DE03595C823 528C95F4B1C92AE796CD890EBE3DA9746B92A835817B6EAA2FCD276A77436225C44E89B3 6A0066BB7AA1E94C3203AB45A6E2DAA5DEA3B0F0E068A251CBBF98D376CF76ECBEBCF3E2 1F375D73BC558151341B01B27E16ABCD30F60FF9A91AF52808606625051C54ECFDD28E8C 90E211E0174A616C68BFC718DDF2656FA27BE3DF485F050BB57F96B7D1F6531CB2B73B46 D21629F201D40C5A37B572428805651E2EC179424D8F5251A84384783A83D2C89B6833D6 D0697FFEEEBFEA9C8CA21A627F50A1168EDE8C5E085B5930192973DD939E36F10AD90B9F C02C0B116F922ABDB2A94213E4D9AB7903770FE69017FA7B28894A5CC4C66930FA7FE05D 35D664AFD098B8A76C9F2EF0A11E36B6D7362B62205AC9282D8082C15E1BA41E8A711DA1 CFD28A83BEB3ACA3F7095FCE5880F18EE93F9EE03C706AF5547B198B4A08B9731A61141C 9A953B2A5A3DFEDA3545EAC5D7D8D556E72118187899AD1D13D51B44F1E422F4809BF42D FF01E2F05B9BF68849A398CFC799771C1AFC256B7D333549A0A71FB7A8813D5028BB8F2F 397C1A68F22F3F1B9C2B7C2D4F4EB721E73D6E63BA651C802CE8E57F5CAE8C1F6C4AAEF7 BFE00547D8344D7741BAE7BA30F21197146C8B31523C1C651420D130A2DBC055FD437CD4 D92E7DD74D6F1A1027CC95CC028F44F2C5B95E72CD31F200B0A3584946E55B9A6A20163A 3EC73566552D848290C8EE0C821F08DC9F1AD94C9E94E8C5B865BEBE2047092AFCF291BC EE941AF3156D6C8AE07E63B81F27937759F91A6C8795051BFC02164475850E295E6F40E8 4DEC3874F6762DCDE08F738816A14E5D5423590D87B85F7E0E88EA234561903039FBC1F7 70ED97405878F62A7AA078601FF5277CAAE4722171DF7954AF82DB007C56E59A7A59F133 071E193E18D2D24EFBA31F3E598B9FDE11C0416579BA3AF70C8F7F0D069C3BF3FDCA150D ECD1E82A3D7E1C11F13D37F27CA578A761A9E5EE2B425EAEB8298120429D457998BCD81E 81531F1F23CC05417FD802E9C1B7FA92F129CDB8F498C78F9B936FBDB2EBEE402AC25BF3 CED327EACFFAFB1619E023F018E22F30FAB458228AFFC545AB15D66D4A0B08716E484F4C FF688C67B70B3878ED20939A1EDFDF9D62FF19EBD66C9FEA31F18B6221208CF315DF5108 CE58848845FE2386F9F916108102A8EEA1E6A4806535410FAC7AD182F6F317E0A864DA31 35FB3C0802E830A039535E66BB3ADCEC299454B7966FEAA81861965F79C0578D5D48F3FE 5FBAD2239BBF5F107E5FF42EE8EF094D8586E8810522BAA1E231B4FBDD6CF6C62D3B36AA 8477D9273E95D66CF67F5061EB4E3EC2048518063703DFB7EFF5C2F5A3968FAA705225FE 9E088D592EEB980C54777F46BB385CD979BBFC34F3870583C13643D449A49D275E38FB4E A31E0C69CC3CD31BD790FD0960EEE331BC1C7D47AEE5ECD11D6EF0FDAFFD1FA2C0F33C85 31357F04EFCD25B6CA2E0800E7CC8B467D4EC22FCE69FA0F1245253B8B3E842C10276456 ED5D4BA9B19B07B8AE60115D4F423228878C7E6461523A102F03E2C997C826B0E01A8C74 737BBFCC420E2A864B051B219EB2F65AF711C8034EE858E8E41E93E80D519D7D5B78FDD0 E4BC44CB9657C8DD9C37EB9ADC2E33E42B02DA3E069B9B20D7A727DE8070E17FB032C9C3 4F5623EBABB58EE9097C85E0A2D93279EB7F6CCFB82CC798F06208D106AE7E811BB77F43 E4F96EBDB0E29E9CC6CFFA79A00837A14A424A9E97B16F52CE9C0068C43523E286038ED8 D91087DD7764B1DCC9FB73CB72A1AAFC3A09D353C64A8E3480D2C3E9D1F583E2437BC1C0 529AE01639F1CB00AF09CFD84C38037DA70512DCB7242EA3BDADF8429ADEB743E5509292 37BA921D7AEBE87A100E99B0D806D0AA4B3BA6740FBDAB5D1E0FE3716EE4957BDA0258F2 70B527DFB9E2FE35FB0A6AB0FFB583B9529FB51BF336852ED0D4135E6408AD228714EA74 D76CA630E0AE366233CD90CD586C9D8031173646A78B88F1F88B409110801D522DDE383E 93675E5993EC6C007C5ACF1AA8D0F10A85A144E189273AC6E135E986EBC2A85074D3C290 1AD3BA21B44827EC7A55EFD8A429FDA1DAD0929E86FA7692CC46E7B312B441806598F2FD 6090A17540D1140AE17D9A96678347EFDF0B510A8BD31A07F26FDE43A5E012D76BB72FD8 8A70CFE950A471C724288EA13FCF2A5A7A3D54B2D30BAAACDC818C588BDE628B30011DC2 5CCFC66F6C7C5F780280D8E4C421A0C30749C2B33EB4AB3882CF161E116498C4204455C5 B70C59800A0530493F63B843B3BCAAC5F025163431DF3FF39FF9330084D41A696DB77343 7C3DBD4E794431B80E72838210F2BFDEA75DDE26997A6F28065DEAF13EB71B0B098C8209 3121ECFE486A0CC366FD76927D530C3448FA16790C4A96F66274D5E7A71427AF984C5004 620F3011223C4556D8D996A9415812F1868EC9744B1101FFD7876B0F0765CCA2E7BFCEFE 6AE75779A6AC7876D5435153A48C4B931D23F7AF10A71532249DD0BB4F52514EB90B98BA 7EFCB01C47BE21CF5C2C82827AECAB3666D9DB46D415C31870CC7934BA73C5736117F639 45883151F82A1728E5E591DACEFFC0AEE8E0234EE158F45F8CE995953F2D52D0DB5D23F6 E02079E115F3844925501E263EA3EA7C364DDB44BA125796D630202D46DE831E5FCA2BF2 8709E4C2A8139444CB401254A0149E4DCBC69AE1438FDC782A6DD7D08134A27C1C32033D B1707A8CB8F458B3FAC6643712117752FCBC008F2EEEA842035EDD4E50DFF848E20201AB 074E662074C5F57290E7FE6EC37D5C1C11EE8DCAD4BB3CFEF95193F16A3AC6CBE11EC609 111C0C056856B5CBC8C5F59CE7FB37CD8F3B53FE0EE6DCAAF3C933B849FD60852EEADBEA C506630B94EB9814AD4A9D31D2F355A3A176685CED59E6F2A6F61458311635006CCA9833 BE5552DEA87A360F2FE23679A8C5E05A5A8C395FA909C7BC287C6587D2BA7C4C22DC3396 0BCD0B32BA37DC1C1F59E730B8F1ED109E215993B16FA35C7859B8F8F299449CE26091CC 5E9A4893D1D1AC688865BEBC3805855B245A9E90F715B904B9761E3EFC7676E9DB688EAE D6C5470282E8F065A2CF7CBE00FA66260F1AE895921852BBE6CCC06732EF7290620A1371 3C98977827D534617AA33769F4A89CE899D29A6048516B0B9E764C4B7A668470CC188EBF 54D31E95714E4F85F3EEDD46DF34786702A088B30A31D55BBF6EC09153F5A170E28FC2C9 F39EC3EC34BE68B1B13F39C7138B176B064210B8751043F03C35601891F31570D77B94FD 05420F77B5BBF0F15B62C06CD8E026D7402D53D5455D608D9A903482DF22066AA82B0927 918EFC606CEA50534BBC94269A487505D937C2A0FA09DA28BA69A0B90EA305CA02332254 5AABC58727B5169F010548A30B750484B8A6F33BFD0026BED604C56CE9CD713A05FD9816 C1A8CF1FFE9A458AD7A3A0B0F4FD0E506608C58669AB9809DAE774920917406CA8E68F9B E4C6B9D36C0A31494625FDF84661D20DB004C8E6C1CE34646992D7A2780AA7BD04B7C15D 8A696817A5D5F4A00D9C25E6695C383C273877B1F75544713AA173E9892ECFF80CF54382 02A2513C677A4AF1C3BFF5B282C807A77F222ACF5AC497A36DF8BA7C537391827360220B 40F2AF6FCD3D3A9EB8847899F3FEEBCE598050D7CE593565F3CDDA813453B62983C0D90B 71BFE793AA1B2F0CE07F43C8D4DD8BF656EEF5C6C3CF0FE90C9891344FE3F4644ED8E98F 6C1E8C00726BC7B8D2AA8AD0681339EBD2B1BE983E36988BB22257DC27CE5E183AABA617 D9AF549235E8EC30B37B85BC3F371764AED219FACE0CFEACF611FEFAB312466E6C02B341 904ADF69B17706D8AB2EA734D8895813DF940ADD72547D373DCF82D1C484D7544B06AD93 3C4D95655ACBF08429DC60D26DD8690BB9B865D0846FC0D32117612B8A8DA0D6955B38E6 7B7EB2405F7177097ADD4CF54475866A52BB7FB9DBF8055D96586EC8C634DF0768B27E29 92CA552A1E4B920C56DBF6E6C03A74745A0AF944DCE92093C8BAAED7B40F2185D776081F 5B3049BDF295D0C4EEC9E3CC12F9B19922A76724879D842C1851C16A9447296DDD5096FF 804D0DEA8530DC5D0AFAFFEEEC6B3057F16FADE808E85040E4275FA41A9B7770048508AC 6AAC18540E2D903789AEA54DE0AFD72E582F596734D44EE33A9A719620F0B17FF028CCC9 A1DDC29D41D9714C27CCC48A06A49551D8F5754D8AAE52D92D31269C9696924D52A44EC3 D483A0849738125FEE094ACDC8C09574D7FB5FDAAE0F44497115EF7C152453BF1B6EAD42 44B784EB072BBBAAF2962F61879D74D8850B1C544ED2AD2483EC46F99CA7E5A281C38C40 A5BFAB0500A37CADA0FA0DCD05838A4180C0DD8AABAE616FDA7CD77572EBAB61656158D2 C27C2DA43871390F39B4D3E193CF95C19D2D2B8072857284405C68F5AE101A49F786502B 8040587DC7E2AD00DF02504FB119202E0FDFDE2DE00D4AFB2B67C8DAC5838050CF1C2D19 C2D2F17FDA9BB90DA4F6DA74DCED5972E2F8221EA6A0AAE477190CF01D645D452F0E477D 436DFB6EFF88407904DD172E6CA5E132CBEDE212BEE43C446CEBBCC250D13467915BFAAC 24AE63D231CB519A0007AECCD201482201282B6C7BB3C4C45392D32D5E6F0A673FB8C27B D70813CBB4285D3755BE80CA5EFF3B8CC0738C090F535004A14D6EEA4B56CDB2E70DD71F 98DB9A8041A2F80882BC5EA1AC8661C20632CA27198917A619646193B4A3EDD8CFA675EF 5F83AF3D18735EB811698BA7EB58563F0C706A2DC7D372369CE227DE737713C18948DC20 5D9E574513D54ACF922CC559100D90AA3439E5B3D02E0ED2EA9005F75BF378CEFE680D93 CDEA6ECCC4B3F43CA57B128FFD4ACF5020CA5258B2A03AB259EEE34B80590D44F58F3D18 7190011DDC9B6FE1F5D9D8F1090EE4BDB4FB56272C579E33C7A3ED0AB39D96C1AA74E197 7F30423B3E2AC868292F70B3DC9D2A1FEEE89FF3BBBB195E409C5F473BCDFE107769B6EF E8371487FD8408D67313A1E0A6E2E448A0321C0FC931AFEABC4F648E4185DAC8DFA30D9A 87C0380046D38FBDBCA63BD498FF6F96FB141AC9D0CCF2D58971BDA0703CB600FEC9C22C 781DD3CF1D0604930CA0D8D9C35C247643892A82095F9F12196EBF4638132CC259278A69 6BE54B1BA1B56DB1EE0F1C8FE42989AF69E38473B2A4317356A415E1FCCAB2463C80B5F9 185D0B49D4188DE1B620BA6D108F3D3732BF34FAB723C1373FE6440296A18732444F56D2 2E4666EB01FD9E25BB52F399EF53375C9280D7F6C3E774A8FE3EAA78EED6A94F85089E6C FDDAAE0774DD926D148BFDA4563FDFFE56AEE78D03B9BADC66DF13351F3538D6220D5D3B 814D6F55C97A4509358DA25B47CB33923506BFE54ABC45FFCE8B35EC6EC9B5EF3AD16EBF 9FC871736AE364350BCE0C88152854A653BAC1ACA37600276DFBF99E9BB4B19E90A6F234 A11071922039565046DB5A6912908CB86AD30FD7FE3660C06F05554A0C970AE20BB57E92 448EBC532764FCCD1FD1F8B7E10FD0EA90E043C3064B246CF3E2299BCD5FCBB0B8BA8C1F 7A78688A0AE89D73DA9E7D94B20A3566F0870462FC72C6D7390CB82761F428AE82DDBB9B DDEB99B653807E6257A2DB61EA8F4FB2C1D133EB3D8D6DDAD980E5DC555C4183B6F1C380 B932C33ED0AF6426372558F6E01186A41CB25FB6CEA786229ACB9E61A133E138685C485F 505EEA8B5BCB465E5A697E2D6AFFDF040CCC78B8A7DD2F76EFCD0ECB1DB60B7F6996A75A A0059F9458D34FB95925FFF126E616B6FF585B566CB41926564D8BD98D8353DF5725E722 86E1B9D1DF3644A4C45E3318ED821CE90B2D0495E97C5033C8733756CD10C763C2BC5CD8 0EE9043A531A0DE7DCE115224D0E272AD0CA70D3E206B070728E093BA13F03E8D419E50F F85B3DAED2E7A581948541410B2469172006F0C24854049C0180D0DF6686E314757D9D4A 7F6D641D499DF6550A60ABA333DB90F4615BACB3C808FF6F58272CC252236B29FC67FFCA 5ED9063DF8100D915C5B8F10D7B1AD3E848E797F82E9B76786A4524AC083B09D91396DB9 05F133D6E300AA5FFB1E1D161D00B4CBB09DFEB87CDA9527A23FD4591E2DF7E920A3F4F4 26A7D3AB614E8D45DB0399550E166F01C4C4F660430642F813212E24C7CB24CBA11EBAA7 B9F63BB00955F125A92658AFAC7044896843138F90299686F549A427A542B2588230C21A 09938ED97A7A6382FC70174F303673CE2AE93D8103F5E633298E1DA2C36908F6F6039FD8 37747FDE7F714A66CD8871AEF65B8A68529FD63F87AF84F3AD411F820AE9BCB84A7EA4F4 3838492DC675D80FD615CFC9D6EA741C6B91AB432C0CBFE06FFCC562D71C6440176F39F5 3D810FD4D3810E22089724E8A7F53D295681C2E07334D656EA4D3F7AD037D3B9C760042F 86A0E2240343EFCAC8E2578DB30BECDF093CFBD0056110EF5834A1E683CD7D624B04AC43 A663469E0D3AAEF64944EF7C43F8FBA221DC846E86A8866AC53384FD35D10FCF34EB7404 BB38289451048BBBE520F6018C3F3B8F6FF3FDE4C5F33D89E44DBAF04AC4FC17A4196676 F16B8A2F02FAC4B8933CE617FDF903113354619906A8637566B3E61FA8C849261A625CBD 87BA5F1EC6479E7B9423BA14D9CA0C68E11BEAF1D1E948DE44257986388E75DB6FD9AE41 13C36EA637EBD0812F272EB8381437855C7B0F262728CC886BCB624437F8CA30F107427C 7D1103CB94B19CB2129FD2B388D62CAD6078EB7528810DC458907A14EA0CA0B0C28DABCD 988174387FC28FF98B7C9BCCEFA0407D138828621AF7815C13EC04F7FCAF82ACD3E8E773 B886BBBE2C4F2818E39A2D7F964A29B9E977F53C7107EB586D628F85798E70489189808E 159E28A8D81FF9D642F3FA4FFDC2059947719184D1E83FD5EEAC7FEFD5DE2DFA8D808AAE 91FE63E94AAFAE17FEDDE11C1EE21085438581DE1F5EABB4FD2A2C3CE0010492612F5797 163F19DCA534DDF49FB45D0381664FE5CDEF1CD0C319B6748AC4B8996DED871EECB3E223 8E924F30CE315DEC278EB94C6206951B2D4E735463650B5020CA8CBC756618AE1D8781D7 B22ADE2D20CF71A9ED08111EAAF4E3DB1F081CE992ED1F7BFFF2B883EFD95F51CE612CE5 6588D7A8F342EFB74A989AAA55ABCE83A773333315FAF1AEF25CDC4F19FD2293A51AD64D A070635BE2763AEC91BE2DC9F233D8968860E76352E6DA9F7E5EAF068E19CF1DDB22EB76 FBE149738F247F4369273B6A901705B7DB396F662986D91803DE93D89B8312826CAF94A7 80EB2EF254FD8F19710452E7EA41399D50177F4A8CD017EA2446C1295B6C1598BCF35060 4288FB0A9C7CBE9D94E6517CECA11528D286CFBF0D621DA7D93C7D1029FE0C70F20ADA26 E05A67C4E301A086770130934D6ADD3419070C6E2F0173AE4DA51F478DE9BBE3687D09A3 A48D7FFCA601801BA38BB9D87F091DD410BD354C24C74E2E049407B8A3A98F90FFA8327A 6260CEEC0D9CFCB9BD04C3C08FEA15D0884A9017E239335985C85E17697F874DD3EDC192 AB8542A11C8B5F50A2B737F27E9A4078D72ED0656D5AFD0EB04F76565CA2777930DC4B0E 62715FE6D2A8A78D8C0187FFF43BF6C434DBB5DB369F4045558E5F4F047554D4641D02DE A9A78C9B3B64D32D3415CA488D399273879BB9BA3EB375F630F273DAB8EDC0B015A3728E B55013B32BE513A0AC4769876686C9816035C2D199E955DF7A99CC07B680229F2E9C4302 D5F7F4DD4B9C3BD69982E0DD8699EDC973E55A259376CBABBED36F28024A9EA504154EEF B9F2C5649E7338C52CD19690D7BC56CD06D5882366EE32FE4B56D7703237F3D38A4D5C07 F4B851534F597A1723BD364620757118169DFEA997B90D243990C23B6583EAA176021C29 923483CC99E04537F611D02C44E99A05FA78A0EF13F05F695F38E3E631750BC0427F162D 96057F1A50A392131DD979868B617C037D26CB9A92F478C57E822C3E946B1A30388A3813 39C0A4215EE9314A42BED741A0345B13D16F462E60E493EB57A775B3A01EBE558F8423B3 047BCA02DCD80CD35A3AD41ACB26D75C92B1DEFF4CE5E8A8332AA185DF670FA87410E36C D27F4064090E39970DE94F2A9476DFAA41225BB65C0103F5F2F277F932CB3B1F273464F3 1C6E88064995D7C6DDA4C597ED8C8AA2174DD99D8769F818CBD824E04EB3458DD29A78B4 1BACA60903E1BC1AC6527351EE55A550CF7BB448C3926E5AB461E374AAEBF86885B8D912 23108CA0D5D57C333DFE6EAF41FB5C7071B83EDA33362E2090A76DF9832BB5DF1E3AAFFE 135801E3634415E1E8A561360B599DDC5F84F3DC12E3A4DA3E325A67DB748F6768D42289 0520E9FCA4928178B888C4BB626D82D9B52DD2A8558BE9A3013B4492CD8F11CD4B8CA79D 771D9A9127EB7D3F8AC0E09CF86F94AE011B568EC3A12B6C8B930084C0982FF9400E5308 23E79DE9CE44B754947CF6EB96BB9C9FA45869AEFC46A19F957B677E93E25D7CCECA4389 35D70BC5C89EA5E2D1BC207365D7950B8227E70D4CBF3613A1ED87A7CF85485DAB70AC0F 3CD67859B72D6384000CA9B3831D32CC774B27AC9A2C21A4CAFD3493A2BFC37464066BA3 4A4BB4BAFA36019452F8A580C4F27BB5D81BDFD8902B510FE95DDB23CC43AAF71E464CB1 AA6120E3CC15775000BFD24AD031F000F787696A6A6FE9F2EB409B259E706BC64E2BB7A3 286718CFDD3D1D2F3BBE7218949E69815A570AA59CE6545BC1A2036381515AD097A81D2F 51AC22395AECC7D208F77CA9ECF5F2C121A7854AEF87CD2170A1F9F7FE9657F2C5C77344 F7F07A90FC698A63382D7E59D7EBC856553BC2C821A6664E3BFFF963C3671EB7CD32C9F5 AAD7CF79F066B847C533DE4298824AF0DB3C96B780358DAD0F71CAA85AA876EE8C056864 FC9F11FBAD9D966AC00667AE21F9DA3555D55D81283142FF4071541CEF9C87882323BC72 454D5261D13BC65EC5113899474CFD4C05D13D8FCB5F3A49A4967B8C46817DA1E71F7EDF 3FC7375ADA580A715D37FB8D56B2A9EE3296D302AC10A9C5AF7DB8E92C39EFBDCF74D102 C9939DB7F7C2293A9BF92E3A81C2A17B1C2048150935B977B85EB6AFBFA266ADF1D7CDE5 8EEADD8B2D7D2EE4D9FF56CDD2CB1CBDBE229B03353D7370F9149ACBF086403B96B6E859 952A34C0B58B4891E029FC505417DA6175CC8786CD4326548C65941E17587AAEF46006AA 01599C4D9C3D66BC8F7776B38822AABEC1D52E1B29702C498D6583AA9BC40F656DD6F74D 0528F562A31E90F620B7E96FAEA15F1F2F0B68FDDDB00D9FFCDB10635AA54C47AEB4FF60 EB3E40FC4F82A0F73B8440023753309E443CA66CBB5C02CF7D77DDC5917078EDCF50BDEF 1341027323183AD881EEB8CE2CE4B983C611508E8911F098ED89DBF2ABBA49F1E7DDBE0D 6BFC1EE74A839F7CCCCF4A12339519C2EFDA56941A74044CF1B0222361ADF02CADA96F2B 94AF954304B3CB7635C2E7E6BABDAAD0CADF6127F63A07BE097E6C7FF598272D39D3EC65 4EC2E9B795C1E6A65C50AC1D540130B16DB5D763B9923DAD3CC2D8DBA1D3D2158C01EF3D 0F41E368C49FE8AB6DE7774CEB1134B1FED9E8911F9C2F29B8A65D2F030B966444B96EA3 48E804BB6343A01E2A5A4B3A39EDAC4EC5A8F9F8BCB4377B0A10820E5B5FCD84A1343A02 CADC1D5EC78CEDA3EEBC08E795D41C30390EDDB0D6228C706CF39C2989618E1A2C86FE80 32E093F244E65BBD5AE8EEB19AFA5EC0717D5A0365890E707DC35B2B56187314BC1EE8AA F3CF2A8E90B5A04CC30BEA3E50101256E48D0DDAE0E8DE05D62DC3AF06655AE331010C67 EF2377D07B7075866B905644D7003205A1D9380B56386E291962F5A8CC209C4D540CE82A 02B4E654BD66EDEF1DA488CF02B1F37ACA1566F5FF3E4A25E9DC0FBE6F1CCBF4315DB6EB F3027B8751BA5BE3E68C3B428012CDD1F23ED25C9F09B53321698639D37C581873723846 06606C0B4E522B57B592A205EA908633A20BBFE46689A9C749FCB2C1BA5D4B3EC7DBF4FA C810240BD7D2CBF721EA3F824497D9B105348C6DF4E964AADFF293FB406A4678D7E1CD5D 24E189EAEA1CF128CAC24C3764922AC24104808451776ADDF427A8E1DE5227B82546F1CC 8FD56C60EA96726924AD39459785E481A86C59E43F2964C332FAF11BEB87EA9F7CB71920 1E31DB06A94C12CFCFC4CB0E5925B81BD827842A8FF3021BCB63E9CE7BF8984006062267 DB5F53DCFF1F1C08E053020257982E81CD41F6D55D6DC148CE7E1588146E2E7A721E0C63 4451BA6D6B0BA5E1434EA112CBC5BC508BAC211A55498D30FEE9DA4BB5D39E19767CE082 CE5E2737B404708070E8E6F325D8E9A705398C4D2704CD50AB6567411B18D49F2D55D690 CBB1B4D50EF9893F8071E8423DEC6A6738A92E527446549C87D4BE374C6BAB141331BE47 B0A1415937AF7A047BF16B2AEFAFEDF28D15B66C241E346884870E8F3ADCAE8A1403CC77 1EBDBA2F12EC4BC01547238E69EEE4B08FBFAFC2E81CDE882C9D7558501B0BC04175CA89 D1EA401ACD6AFC5AAC4128539AA1F3ABFA352F69A1322A7E505F68774598F26EF248F658 D0EB1ED0278DC608903AE7D8DB3A2FFBB486057720D8F7B6039C2BD00FBD67B73E183EC0 D539325173FE5D5F6443A6D98B967ADFF599124199825EC044717674D4EA3D0CB23058DF D156708E37DA80BC192F0D51ACD25D144411F856E36B135403F818297025F27FBF7EEEED 1D964BD4F0BEA178AC1780B1FAC7D64C2BED556696F164B97CA0C400F8ECA0E508884249 8F32B23F9AC97B52EC55580C0C7DF9EAA9B8DAAF266DC0A02C2F3AF10D756AFF097A7610 9C299FDFFBAC8A6C3652285901A145DE49C093F4AC2BE72327C35E6F0756F18C9D219D28 24230C2F226FB0E9E47291136B363658230009DD11F2A8F23BC2F90E7EBFB384E1BD8E75 42295AE84096E3BCB7F7E7ECFB394FA8B2C9B4746455DB755A59613D085C34D07BCF89C7 2EABB16DDBA4C2C09B48A5D21D75CD9529E4684F29479264C9DF6FF211B72559F0BE453C C83C1FB4EAE42A8DBC18B2F0DA7DF4CEB2EA36129B469CB59D74C5A6897676B3855E9E28 5F0BCD467538175CD6485237686CF42A046B714941BFC56FD1ABCDFD292B5368AE331149 B401F69DD62B294FF941B1CCDDEC0DCD5507889C8310A6FB7D7F3A9F0713AF8E52A5077D 10ECCD6B5E24B260052A25E09C477D1F4A4710EF521C44F5765EF8DAEE3B7BA4E286D764 59802F38D8E97D9A557963FCF5CE32A7DD5BF847703BC9314102928DA945BC4301440841 94AB6BEB1EAF29A147BD1155D2A5E68517E4C347098D4D49AA10A359132C633B02E3AB33 4BA68714EB41277EE78BDB1418DFC5A584F6541F3EC0EFC75E66263F61CF2DDDC5DE5648 B14B8A275CAE0728A9B60FD75210FFB3EE02535815F68572A9C29DE316C7A6C991DA22B8 08CD58C392DAA11A2390AD45CB6161063043C464DFEC11E8B068A0CF516E38BF736AA9FA A03AE4EBC45C03A4064A4CF07B171499954D8F93A7598F3D51E953F91C7A70F35C88A384 97839CB7F9CFCF788932B261AB359F8834660BB0CB5C69A4178BC3A6A98D6DB0C7C346F5 E44ECE30B1C3E5EB4D203CED8B5DFB17F8211D672013A41F5760D90D593B7079D6F231D3 03E9C3BFFFDF1E98B8F156BF47EF60F082FB02AB362582361B5274444E6C615A8ADAFA43 71CBD86CAB86AA91D096EA244AF3C69C4A2F9D62A0F5BDB7649DEF309347F364469383E1 4B72A52AB0B0DC030D8E785C81724959CD02E1BBDF43E6B92DCC1AB433576ED1F7B7157A 483C99F4662ECEE5116AFC2B28263AEAE6FC04C656B02E15D619275C7D79894320559E18 B75EDEBFA7230375F5EB1A66DC3AFF798C6B67D05D8B49F28AEBB509364AFFA36EF12063 8D958796CDB5409D5D3D8270B4E602A530EA46300695868F972A1E3764FD44BABAB416DB AD0E3799FE67EA3A134F9841C79F89AF7FCF182A484627FC0A70A8528346E3C27F655232 10ED76FDD4626CE3EC9F34F506F9A7F68C50B9434024B7C40A3D1ACE1E616694E442625B FB49252EB156B12AACB84BB3985FBB8431A9BC0D1F071F7947ABC095FEB24EBDC9381FD4 ED98028BE53D441AFA5534C9D27A3D21CCC2EA3B6A652E08CAD80B56751ECB06F18CC9B7 CEC29919314FB5283AFE5A1951D3669B446F094550DAAD91C36CE3E5D30238C65D2E1D67 5648C147047FDCF267AACDBBA50B1F9C7959C5F12DBB94B64FD02741211F297176F5F849 412EDC12029643AE2AF2CAE8552C69A90BA2AB2DED3FC3D5D5E8987CB9B538FF90B693D4 B842EF7D8AF1055F53FF8442AB5854E94BD016AD3F29CCE91F6D222C7E0D3EF3DE72AD41 C2E179FC20B4E0E694E50082E944C77CA4D878BA6F19410FF616569C59E94AEC542AB9CE BDBC0C9726DB1D56FE5B66463699266E4802B8572C7D2E45DAF827DC6FF7543A45A8B7FB 908AFA10A67EDA2CC08F677503D0D30D74BA3379234897DBAA955011163C4E0138858535 1FFDBEB8804F00B6799ACE948E698EBBA5C391BA1D2FC74F20C448FC0BB8766BB3858B46 2E06F751F2762A5B8DBC4D2B7B96FCB3EACB4757528964DC348C274F757178EB41BBDDE2 E075E7F340C899F2253DA8D35B2C544792077D7CD7678698C2D8A3E36D440640FF920E74 7036EE2E46227F170C5F311BA5D89C0EEEAE6BD2CD006C5D18BEEFD521894E5DD7E865A1 B894E8D3E24AFC5A89D18773A7028DACEC61BDF9CFEA5FD37826AC0A7B51C7CFE3813A36 8D62036C6B5CE16E56601864092F2997816C600AAF2DF34CB4832981CA5737A5EEE14F2C 08302588D473353CC126C39CB3F6829CF84358384005A577A7F8E9BEBBE001DCD4BE0538 6490A8E7BBAB5DBB98B5548E478614B9CB730CFAA373114384BA850D00FC9B4DCFCB6B8C A57D4288E62BDF5D36BBC888C6CF5F501BA8B6D8C5D69D5699D80AD979974F42420D114D 9BD3F2ED149514EF44BBB2746A00E3C633FFA966AD76B0AED0568E44B94C1F820869D86E 91A78A7C5DB8F454D313637FCD271D92FC20C9F578B21A969EC9B1C015D8FA455AB419B2 B743CF348AE9BBF466F8FBD617E29374DD71A846A75441CC79C4B1030266EC8E46801E38 CB9FAC30D2804203AE5CA81D0FAD237EC8D8EA6C544F8BA10B91C2D3A402E940D3092E16 9D44A95F8292E2DA06C709302F69729A5C5042A009D319FC7049C50DA4653337A6BE5A22 B325F1C64CAF8682D3D4904654D636DDA229F6F41FE01DFE8CCA48B171FAF8C099A92C28 D3691CE8EAC30941176151B67198121ACCF7A6EF4FAB0843C385003036DA94117B66FFAA 0A6A8C007404A9C0781D60652E48D530A656B7E005C5053A8CB7483D1EECC4A85D907859 982A74B1731BE0B8F4B1E91E4481A68057F9AEFD9438343C1229B0E676842A85641CF32E 364CE9EDBB8D4603CAF04A5B2111760E1E77370474393F89179413D5B9184938BB00DC79 FA7602A1A591EAD89E9D7DE655378E10E301B4005D6B5BF682DF253B0D8A34004DE431B7 C82C1741D9952B20F7312F6B44806226115791D0E38C6A5E855B2197DE0317858F25C62F 2177D7E6237CD2CCB630FBB13107B25EC2A75EEA8AFE6AE0642AF1F23D171E99AEECB731 5034D2410795B40495BE25FC6EE051D78792D65BEF57BE88C0DD7A7C6221D0B7ABD88762 9AB940664A7F4B6261069B5DBC95BDBFB9DEFC25D4DD38B184CEDFB2653553894B7EB379 4CE19DAD9160266B97A32BFF96C0A1B7B6EC126F34DD8B242AE0FCCFB7DA22EA249A14C3 E6208F2FF090AB21CE1EBA11D66D654B30CD73CA6B2258F67706792E63E52B1F9829313A C0D6FDB303995546B77974C0B07F906944B68B50CBDD7DDA5DBEC4740FC6333D1E62984F A9C13C623620B27680BCDEBEE51E3B5841643383374E04BC65E4CBFA38C91ABA62D7AF44 C721491F6C78A9088DDE50BBFA9CDDA44E567D776559D3E11030CAEE6E5E7D07289CB58C 852AB6E55F52A6F5730A099C982DD11296E4E33CCF20BF6EBF16C1EF76785F13A1AF9EF1 A52FF02C06A959B6839550F4FC30D277AD524E215E05B63A9C7B74E2FCACAEF3DE606002 349C3FD26BA26FFDD6737BEC9C5DAB55F0A63AECC534DBDC2174490980A9AE98B00F6BE5 2334C6090BDD9AA329F6A66F551B3E41A0DE3EC021C7916F521DB7CF1D5A6B7B9D72851D 285358554917F453CC15A1D73FD528AD12230892C6774001C56840F60EC5439F6F54F741 96E6D3D74010F14A30DF85B16D23A7194634CDD9E4D2D74FA1ECB3DB09DE7D7FA438468E D1AAA438A463FC988C4460B1C55FAAB585AA17837CE6597B162601010A04725655079C2B 627139B1A2AD607FC365CA845CE554AC4881BF87DA677B2B240AF10286A947D624EFC074 1D7EDBF557FC7BF5409AFEEF4535C7A02D9F195B1A20D54C25BB918EC1DE3492D8301448 81CC8EBA460A299805212312643D95AC08F93ADE8DA467C4286ABC575D17265D7B268809 C055D44FBBC1672E34B73EC73F114FACCEF8817B3EACC68C88D07249769D0AFA2B797863 B6ADDE44995C903A35A619EEDDB8F1D76E736C26EC4E8BBEB51B05DBDFD840C0DB53C766 625664B8506BB1A66DE8A04041ED2F68663BD15E3B932234F37CFF8128E4B2AC1C191297 D4202B56DE39AEC4006ABE003B7594062C26F206C124E1AD656B8598F190A335A0351034 388C225B0B542D11E3CC96C0B72789349BBCD9C445C19265D32440F6248F2315A9024BBA 0CB6B71BD71DA2B06B57FB0483262A653161E6ACFB5E916C22B6DAE5847740A36A40A505 668EFD5FB438F9F1779C02A19D2C14D6F1DB6B120C060D2ED8BDEE9733497FC9134A82E7 42970EDA3F136E0740CCAA97EF05658BC1BC0F5855303168E2BCBBA37305459215393674 3D51B4670061818712549FB6CC007C1F13B8C74A8AEB05B30D37E6587148A94CB7C1F27F 1B4B37D298DA91CAA996A180DB262FEE001AE974B819D288A619A8ECC8E442D4A2EE0D93 B89A0FFB9A03EA573BB8D40676E9C67EAADAC5C0A807D7422AB90881515D4DE087893B8D A0329DDA3C42689CAE4F29C791EF79B2965F6DBA3C25AB0CE23ACFCCBFAF41ED546B4A05 0203147147ED047719FAE976A2B71A81A0EDC3DF0A3E03B4CB8208BD7AA6CD91151B1A31 5AC3C27534D9D73F285CBC0F3D7E0C2CCE2DA1502BD04AE6789ABF17DC7CC9214C67F2E8 5DE2A1A71AE65A91D7F139756A1A9F912D759CA02A433F0C44E12E8739C4C2BF217B8FF9 55FB47DCC70B1790B3E906B9AEC41467E5E0E9CA0317BFD62F2A493EA5DF4103A385B56B 45290A56E816C06EBAEC8D38509777CEBB11CE12509834FB28FA7A19FAADE81BDBF0E427 46EAD35477D51E467EFAFAC373E3E72012AC7AD85901AB832B8197A5EF7ACC5A9D6362DF 89CB52589A3CE810CBA525DC46E2C00680EB66CB4E20CC4872B5F6F9BE3636117140C3CA 545CC3926EE9005FFF15AB7848A95ACAB42E3B565AE93DC7A1CB80B2854EEE6F14422013 D50C7BDD75E97822BA7C7D65FD383BDD5BE7DC9942888CB7C39CF56F17ECB0676B73D3A0 2A37319899D89426DA1B299009379DB2C217DC43FC08F4A43E13BF8522A2275EBA64628A 78B877E2EFF40FBF2B5C628981B0E66643757F5F8412A5B48AF6CE0D230D57100D2F3446 CA7C8EBF6F3EACC15C3115BA9BD61CF3D6309C18BECDE16EB18F6D008C5C5CA0FA426B52 5CC0F33A5743D4FAC4830C4B7ADD35ED3BD7F7B072847D2D430DDF667A6FBE49A371BF0E BBAD32173AB5928B86FE1F4E74116041E0F6E4F1041BFE588A17C7ECFF96EBCC224EF0E0 8E3D8566BC221C1991BEE248920A4BF4E424FFD1BD34D1CA66F53DBD6A1AA33B33CE4EC3 ECE8DF81BC73A54DC350A3939F07521808FD40C566B03124BC7300D28035F2162B76F6B7 F7A26EFE392EBC35BD718DD1697BC9FA8214A1E137E28308F7C37854FCFC6BD031A851F5 E54751C2C409A314A0AF104BC8D561A5A8E7C6B0BF4F1EDF9B42F577A9B9AA91D690DA70 6BFD54903E6A1591588A845EAF9B49A8C5BF35B06AE495F4A8CA94D64163B2BC03482DA0 BBA8B30CC65711C8B45AB4EBAF027958D578B94DCA70863767A0627B0751AD63EB628BED CBD2C89DFC2A3BAAE500389F9D25F1EE6FAF3BD85B018296528A0B6049688B2CF7BB1941 386D49D254EAA716D29051B9A5295E937F700C7D46872B6D593869A88576DAC22A2F8B3A 5076656122DD5178AA5FF49A84BBBE20DEE581FAAE017BDA5B7D4886BD8E90755D766EA4 B2E825F73B8DCAFC4AA1A8263A179EC15E6E7EA656B1BBA6E19756324876082C9CBF9094 CD62531D1BC54FFD2F9F9DEB6282DE12B66D570EE73905B0287CF19E628533EA058D5FCE AB66B6DFADC6AF54995ACB056B8BF3AF89EB021073FA98A4B6803DF89CEAEA3874B09625 67D46C4D830F0CCA68C7F24B20B94FF73A0D270D2247193214DE5E85775E15F5ABF0C88F 59931730842A814185AE10BCC62DC83846FE3031B140D6E0E05F4E5B6053F71781B10D05 81904D48290FB4A157670B791271F7B1B32BDA4A71776B196767EA25D5A935CBE1626C6E 5B3D8E64F74F03DFC72FB5C63BF586540071EE17C883AE11F2D154EE9AC0B2F7F71D4D08 CC170A9D5206AF1585BCC8AABC2C2C714DF83AD1FB773CBECCCC388E0D3769CDF84DE17A 83618678EF40D4171BAF7236BB081887A042DB575528027CDAC918086C6D8FF005639565 F6676782F78AAA4EAD4ED8162A35E447C2D60A07E6222415B516C8FE60B9C0FD24E78996 C1316D99AC6BF81AE6A7E53BDB0DF9AD231123474DC9A0105CBB4D98EC4ABB4F9BB4D3DF 9BEFC99537B06378E91C875FCE12910CA65C33C47F1D8A864D17D5C5B288D5BF6393C576 ECB62660756C8746C2125A8434A5DEEF7480CBC48C21595A28BC9931AD897C754A87CC3F 608999E7FE39CE1F60C099357246117C8A074BC1E405EA7FAD3277CA45F5053C2EE050C4 B93A1F85B90084A12D625DABAF2291ED36699134DB6BBF4AEAD7CFE27379AA6AA93B31A9 AAAD3F8F998BA94D3CED13C1730326F08928C6A648CD010845C7CAB2B935ED2450239B20 63D25104A1E9F4DC48BD8BDA6FEC274BE5807DD2355F6CDD587263837ABF3C8CF8466D3D 9C38D0302F1CE94C967BEF58E6B867C9FE138A7DAA9E7C791865A3E8BA65A254C7032E38 FFAEAAAD4EE632983D975F167172AFD8FF70A1CF6C90C24B9C1C3E1CF51046BCA8C2F0C3 D56B931C70848521756E221AECB2F0015B3476FB304B28C4B7966A3F693AC9E1C5D69C55 8DE014A05981CC5E1AE6083A91594F0BF812B1348B5401E4170AC65CA29A7182073F0E18 8BDFDA17EF3933750DE211D30CED8B11A1107DE4F12336FEEF5AFB522B2060BB745526FB D06E42C1D4C7F529706078FF598EE48C9521793F53F770636FF6CE984FBBDA645DB8E631 E041B10E43E836B1F8C58C4F2D4A7BDD4165FCD7B19243AC560E80A6FE7A3EB4FFDA465D 9ADF12EF99FD68D90139A58A53583CD9A0A574B8E0A604E84FCBDCCF67B8A2DE8D411996 12EB00DBBB8448B80098B458B143C6D1CCEFA354EDD81B01BD6EE4A0ACF2AC0338BFE143 06DF27EC691542D79715D36E06DE6D7C2D3C9C0A7DF0094CFF0B50FB21D67138DCB7D447 B45EAC890C4C6E08852F9C00D6DFB9C60A24061A3014844C84BCCDB993E0B8206E5DCD85 A97D0F1AA82F5AAC40B5D490BC1C60F05B33BFE6F6C07138A4BD1ED177C2FFD13278F53B 1B20218F1685385A604934223F259646450DEFF801D97C1D38E8621C612A4E49B9CC2279 7DC683D7AFAFE54FFED9563E880B86C25982D6733EA3B8558461207C91F024640FEB1D2D 5A7F80D16FC694DDC1A59B7E30D1924ABA53497F37345B31D2429F6804AC66E9FCCCF4EB 9EE2BF2836E5B55F29D445762ADBF6BAA501E198FC7FDFA66F3474B116E9A77319AFB981 7C2F4BE21CDCA0FCB65F07DCDB906AE92CC40B4A8E967D91A00E9110BC5E3289AEC2643C 02F77C6313DB7BCA506CB8BB3F3A434904BBBB46D7C724766DB3BB73422B659F7D5AD5FE 6DAD7B204230C92AEB30AE4E510478F620BE0E4D6AB477971A22A5C6AA66835513B1E2A2 278BE747880EA3E1EFAD48ED0B7B5C320B833587A22D5C944F5ACA917C4C49FCA58CCF19 BD800F5DD3246DFB9A772AEE6DB700127D07167F2D69CABC855BA8850571850D913A0606 3DAB1EDBB6AEA9724368DABE65C57341467A58E819ACD98BCCCCC971E30F0488694579C6 C4991EDEFF6DDD79693EA8BAD8AC9495D8884E5B09D163C7A0D343C031CB29F879CC5064 B65AD297089E7AEC41026B5E055DC47A7C529ED28F3D27A191239D4E3EA911C84084B411 13D7029A39E6C6A2E931727711F1F06B807841406515B7711A6B96E6AEF79E271C6E7D42 7146AC3915D35E9C2D4C9E7C5689F7B0371BAADD037840BD034F4C411AB29B36D4314729 E97666CCED8F1A5AFF6FA352AF6AD9D9343DA8E3F97A8C756B48675750D128A3862C19D9 086B597EE751BB0D87A3B7A56866CB6AFD2CF8B1B322C9B2493D40BD5B89C4AD69F347D7 26C22E0E39ECE377C995A611B54C0B2EE3B6CB16673F50779C212AF1AFB93DFB2C931A09 39A1379C379E3F7327A687B5C4D8D909D3CCC5C3195935D8A09D5E5BFF12E61EFF4FC6E5 F99A1460C5D1FBA82C84136BCD64D96AD968D6EC728DF4A85573E021734AC6C2100B6F67 F4E648F5E284618A1868E773D9CC819AE8BB433FD388E971F211301B3ED077CC37FA4B58 0B50F8BD2309D8E81936C050E3F0C8C7D81A80DA508533BF5FCAA977C17A572DD92CF1A6 B7172AB4C66890E9F4FEC661AD629FA0FD23E9427C481408A637F9E649DDDC31668366C3 692B524D9B4DA99938076EAB2343FEEA1560550B8E8CD18D3CB23BDB1AF30F60EFF18936 46B26A09E5411F6C456917CFC6BF3F74B2079D0AA56935E672464F6444F2E17DB330F94D FA7CFF92DB6C800B2311AB86A21658D431EA7C811E020538CA2335B9DFF550C077E83B29 544FC63F5407B1C9CBC3E6E6259742EC85BAA006D2715D686619A94AC7EAE394915CA656 B8DE89A462A85CA179C276B4F90C399167DF0D928518DA2A45B3125CD16AEFD65C85801F BDA3D139B3B349AA86037B579B8FA94C713DBF1DB2A904652E89AA8281DD58D4CFE3434D 6C86F0BF7921486C9AE78F322DD841CB43AD7EEAFB5735DBF68D03DFD6640DEFBE22B305 B33DE7C444D16D31C3EFBDC78547D77962EA985B734970BD6C4B729C7364348B1CC321A9 46D096A078A45797F63B1734E968CA55B8E905160740F68676AD286C9F44E1A94D17F911 0EF21F8EFCE27A76D1D7869FD19C5A9AC889675172335D312E8E1DF59ED55F8FC13D0E6D 9601039BAB9AEF7A4F3BA688E288A089B326E0B582384B9BD80A0BAFA1130E2034F95D21 49DEA8E5F576EFE035C5E58CE82CCC0B3A95980097B2D4A80BE162C8E3760C3532697651 2626F6C64864810E304D98D77F13BD535DD5BFCDAEFFFCEDC1CED370DB2EEF6D90E1F0F8 D4C3FAEE71AD31B0F4798ACD68E1A5FD00A327846DE3AD55B0F493E534AE6E30D2DA7EDF 3F68459CA7192321B98C8DB02D3399F72A0216F822FB8D0B5B650B38586BF22197F78D31 55B67843202DDEFF5B04D4230DB2FC50443C21C8C28E7AE0E399767E03BEE4590C4D47F9 27210114B296F1E8263213544DA56D46BB179ADBA6DC415D6A46679A4A7494AE4B2F0812 9C5D06F92D2D500F336304FE3454F07A2083D6B6BD5D5AB3D6F917F555C7F7124AAC6F38 4262A051D865369A95DD8EB9DFE43DCBCE770D3C8BB6630AC2F8DAFCE58C5C4060BAC1B2 EEBAE9E56AED8725DEBA7CE23DF18E1A52A5B87F39EF416565DA17A5BB6566A8129CFD77 D3DA3E3583E6F59EAA14F7788C06D3492FC84F7C6BDA74C9FA885EBB7125E87760A1E848 E9CAA638A813D6EBE8EA2A3E9ABA7DC8C392A066331D9EACDE6C6819AE12A85B096CBFE5 29BA283C2CB73FC34472C5289914EF347AC8119139A3E6F0CFFB5772D5AB65B276C171EE D565CF9B1E629AF962BBB00CD86FED8DCA3DA0BDE9ACB286C516114BDC1AE1AC41DD8453 795253786205499EF2E971F3DFC51C72AC5225EF4E0D9DEA403F24002591D9F55276CC38 0DCCFBEB33F7733A1DACEBF1AF33D55029C44364284F6CDC12ED12BBE809666607771634 90828A6F10683FAC8C3C4DDF38A0CFD1D1FEDAFB7100FD9C02AC8796C7B3B2793D11C107 DF10D22D9C294A3AD3897431EE593AB265D97450A6B2DC4917ADBF04B04F32F5802EE354 4D3A95CDDE623A423213D0063B79F8F40EECC82F3C5985CD12B0A46F5AB9DD5175A9F3DA 06E40950ECD37DE39B5EA6205D9427EF43D5B0D090A62B669E437D0C31B6A03850EA8BCE 5D2D48C25EDA80913821DEE94881348DF1726A7D61ACD9520267B5C668F46B1660E87E27 658B7D3C2F1C06ED70D97AB144D22A4CFF4A54D73F703A5AAFCB5AE2C7C5B33CAE3F0BD3 29600C9BF8BAA060ACD3C4D5A72851A2A18AF29212B1E070EEFC452048CF312134436B5C E91FBD2E526CF0A35F42C1D8092DA30270EFF9577ED231B303B472670B458C6B53B1C766 09159D861584F0901E7C8DED964E9ADB0B424092B4B50C490BC8DF607EB9345C7AA94CEA F430F8DD439472CBEBE11C26F9D7C7C5F8F04F6D3D97043E282CC848A1BFC73C095841C0 ED64E7449BF4CD53A64F0B932C45B0770D6D18CCA6147E9F992A93275AC93D1B3B0F02B1 9F117034AEA1F3F0F77D482A3DD8D5B2F69122E5B08C067D39A1C25D042D1EF4F47377AB CE1C38418BD39E7400F10247FA13291E34BA3CE681CDBD28F3F14EEC90A21C76806DA1CB 25AB9B96031D1A472C1146004C4DF21E61E07087A8DB5C33DCEA85EBDE4587FB2FBCDC2C 5C6B92E61C72B067EB5F07233162AFD24FE6A2A9D0BD11F401610D5C5F91E46D36B2401D A81BA2716D4AEDA19136E58A14F5A367942B70DED7DB1E0703609FB97F8C72C062934495 DE54A6C45EE6C8B5F368F2817ACD4A10F14A846C1FF578084779649C4BD01D9CBA1E88E0 1DB953307EE9BF10E6C17B020FCEEF709840DF73B4CE45D4C2583CF4B357C33DE67C8CFE 8FFE367E89759117EF10E08899F466D342E75083CAD4795950C026505BA8CDE648FEC333 BC5842ABEDC3CFCD3B27E707D6EAC3D54FE7B9C964E28AE0FFC96A06802C5A8327FC2CBD DBA565FE970FFE18008C9DAD42EA99FF7BCD0656362AFF37432A182C59988B0BF458C370 725CF7D7F864747CDEFA9688FF6D2CDCB49052F349F9BAC9F8261B5FF65BCD2E531BA32F 7FD7D3F0E3042811B345E8676907FE71D4FA94437A3A42872285F010D909D468462942BA 696325E79D943D0E44992A20EA118ACF9CA5F1B20E52719854476111D6479B3842A9CEF7 749437F57055B19C5FD6993F5737E8555B19161FEF7F3560C6FC498EE8148B6327EC40EF 7CABBF6B7A99D14A789F6F5431BA4714CDA494E29542EDDBB4A250ACAFB9802B6A3D8FE2 1CAB7FA79D9682C1B1752DD2E671ED5E4574BFF967156A503753B65075653471F29E06BF 7342AB3284E9EAC6F14232F32C3B0266416738EB5A138DC33DB2FA3A74E649532B4BA7A9 AD51E0278FE837ED68A9A5E40AA236314885AEC0DE2BB1811BCC18F0A75CBEF875D886AD 55A873B8D3FC81BA69DA0C68778CFC5F02C17A851EBACDCFC9A0682D514144CF47382163 6B1A61CCD572575E6A81671DDAF8C442E4268041F8E03398A9EE0F63B352839BFC4D4720 0F86CB77549091DAE5FEE2CEFB21F4B987496FB8F993E3CC18EA9CF06442403830E06738 20BBF3E4690163AECDCF693BEACC77B5591FCE1D2DC11621BE67F9C439F7864BCF981F3B 8A9CC1F21424AB86102448FE45A42993737F7C09275C627CD601906B75CC9370AD491B59 2777DD8683ACC7CC961D6CABAB46A2AA65D8FDA3E66DC5C75ECECD209FFBBB76263E036B 8F62EAD1B802D3662A23A28079CB47ABA48799F3DB0D7E46710675B2C434513E997D189E 0A9661186D9D623D5B47BB377E4B0CE197D80E9AEE04E55059C6292C52E00D0AD892FE67 600AFA285DC92263DC1F15EEBCA803647789D4D420FFB53C0CE4A669B4B963D5F2FA6FFC 3B28AABD6D97AA2F92EA3FF8EDE7AB264CEB19062030F43D8438DA703B68D2615928E4F7 9687B03BAD9F3447ADD3090BBE186FFD3E42CBA236104DD1D9A8E9357CAD999E889D313B 262A4232C5926869139EF1165172932601BA4CB406177E25E6150605DB931A70870F5BA5 1DAB4D15D500B261F9D708174568422C714F30B696095757C66F7D2E6A5CFD146D90F21F 27F62393B532583B49558C8C6124F2F428794133E093D4FE09805FB2F18BED35D12CA321 B79B0369E46FE3191F47B07D234866AD7EA52C50F4C0562597AD1F7D186060BE2339C324 F154C2EDF64C7A40E8419E7542B8CA143E172E3C62471AC1F42342051B3FEA08368A31D2 56A7D51FAE801A420FA30E5D479283A21B50AF52C6BB4196433D933FAEBE36EC577C59A9 BF52F260443A622B637FD4F6BFD330F8DAE7E4374E16B8E98BE92E3404CA22763671CE0D 276981334084462B06763958C81E7D85C76223546F3ADA094E5597AC68967D96CD9E76B5 0518144684C71739C488751FFFD3B9859E23DFAEBC15A0AAD8417416CD5B47656E8BA799 BB2ADFA07B90E634895108D5F97BAB5B560F0608C1239F49967B34941B908AA695840FE8 4519FA60763EF706ABAF2E0C7D407E5DF05807FCDACB17685226D6B5070522D4A6AAC8B8 77891A1390386A074745E5F4875F625E9BBED05B54D04EB6A6D8352E7E4E47FB7EF432C0 808D0C139EF7EF5220838D1CFA3A839B10B772D8F2A197E8FCD7EDFAB65B7234A7E1C0CE D75C3120A58706A26004C2218744B095AF45009AD3036AEE08068311B20974C4A95C8CCD 4EC20B2B8B8EC4F2D6F9281968EB51ED0E377E3BEA2481810C3B0B289AE6A3EF50339AC3 B7F06050B7705C260D942DFE3B104C13728A2140F9E137AE5E476FA67245FC92F1DFD28A 81CDE2EDB4978F971F668664658A674999A62287F74C8BCDF0C306C20FCE35EB1BB7318F 9D7BC39F215535A9796A7AE7D117A273DD5F1B0F5FC5F87863A817993C96CC2CC0FE3504 44698065A0654D045BE4FAA60A218D260FB013868B18AD6DF01B793D298F0CE041671E71 81893BB81310462FD1906C5F8137FF46937B206588D2715297D008E6AFB90DB28E3D64DE 73EFC4A6DDE7466A3D1BB402FC04AA80DF2BC39AFD30207230828FABCECFBED8E11598AD CA43FE742EA8D1BA8CEBE4449495398E5DE432B8218E02A5340C854455069082EC8AA449 63A13C0069F468BFC1D3D75D4458383E04268297EFAED1D02B91AE933DECE8DC3337DC99 D7AD1DC4B999A3AD5E8953C7820BBE425470B21BB61ED6007F236467503327FF73979677 918B34DBEBC181DB99526586BB6E9889DD810A0CA022C62FCA58F2D4D738A74BA24E2FA8 29B80401DCB36889A4CA08B77377DEB0C4172DAE920E318DCE78DA14ABDB77EECFA5A1A2 6FF51D6569AF1218C4256D4B4D206ABBFB1D2C7AC2102815EABF306CDE0615FBA775B5E3 446A2095C406CC1BFC1BF4A53E65FFF0ED565B45AD332505AFE0F91C8569897834C06194 6C745ED6618A60065F6E3B3B49A61BF3265F3BB1FCF8A25F4880DC771ABCE6BD03B48C77 83BDC1CE678E423ADEFE9AB04D40097D8DB062DA0A248D1C81AC57FBCE032B232C6FD553 8AC5AE7983412BC80D23EB71E4DC3B946FBFC4B98C4250BF8D57CC55D929B55C354A3F9D 1C5329F36B06CC099C2201E7FA501F75CC7D5579FFAF9F9C63C6DFEDE80B5387117EDB49 9D3F1C72D650FC120FDFC8E42479469DBCD81AB244C316963CD6EA1C34DA43400C5A2B7F E9F0B71EC4EA67255AAF6A2F49982441962CA30DCCDE6F7894520FD2B811619713D91DED 5D1FBCBB42B1368E7F8F4B8438C515B4661879D353096F880AE278905424DBE523DB7B41 A5867878E478B85960607BD1C129E85249CA520BDAA479CFFCDA162E46DDE5EF6BED9684 31F3289735FA2891C13C0C341159905F43BFA6412B6ACF04C2A11B87AD4B41A35385AB66 68CF890B1E9A43598F03AE5A833A932E5C5A70E498C405CC56BD0BF1074EF1431980F575 67D7C62291703308B41C4B94A99DB6F6F1F924E791025D5E2F56F3A0B60903FC0CC0B2DA 8CC5785C6FB239ABB091B7718A9BA16D5A33083289E8347CB56172FF037F6FE1A9F7EF4D 5D68E23A9A3B9F63C2045AE2B1758489AFBABE23DC1FB610B37DC573D2C0AAF544ACC904 B69C7775244B1ADB77B51727FC66D02637CF2E9C596A05AB6BEB23295A093AA90DC3C3E8 F17CEBB44AD7A8BFA8898D6BDA4F84DCA2A30FB5F0D151D8F6666690BC71002F31AF05EF E033513CE82E8639B45CD235F24CDB7C7C3576149CE989FECDE2F51FC835CA9A023D889B F6DAA3DB5A8AC49DEFF48266333B5B01130F954242A7D5A369CFE937D3AF1C4F2C64051E 59FC2AAA3871EA827C5B74C70C259FD4DC5DE81E2970519C433F1331D1D08F5DB9BBC9EE 80D1B7972C7F1514F7116E25DF3E382785504969CC0AB8DEF43F5F45676B2090DE9A775C 04B5A4613D38FA586F05753CC38A684BF33D2991F909CFE097F97696CA2C59CC20A6D89F 4710B1EF765EDC4D5A0B7BDD33D8E818D97C9A19848903D1684436488AA7E204F577BA24 F1D1E0D39ACE2DCB56550281BB24BB686F605B7146660EBB47F8E329EA27F94319D795A3 71D2D04F6B3DBC4A61D4A7A6B748A60B5D8F3586FF31AC143FB706770E4DAC9A6741EE88 79870FD251625EE5E77853F6C5D2F621C26757FE64857FE4D0502F84C14825D9BEDAD55A 35C640D9999543CFA0467165E5AA8E50699A1C13589A862BD656A22A50EB6F479D5C79F4 585212673DC2BA0DA86109FFA40F5FFA1F660F8C055D2E9B9668B2966DCDACF5F189D835 C029F51B85111D9D48F507AE75A7BA53CA97B39A5287CA4709DBEB723E6D68BFCA745FCF 7DEA768DB0FE6140198D62E880E49E2997AB132521C94D259CFFAC9036B0F2C2E15E22AA 6151E9D4737FD36B9676450E6F7C9E7531FD2F4F307D6D548F37A3DCE2CA5A811EC19778 12B37C5722AFE78E1425C2C1C06461C1508818C9536FC9117951719B8D431551B4793C81 CA6938CB75BF746C247A9F48354B0A4BDFB2D6DF3E305218173503195BBBBDDA322153A8 2085F0FB5ED657637791A4A7E1C1B23CE0F8AFA1ECAE76A3FBB3E6B7A2BDA2E2252B2E43 4413F7B626AB00CB381737A2BC0837E33C3E25C63852B841E70722F7ECF6238890D63CCD 2C93F7A2CEF10AA710AFD333322F4907E87A12DEF07F5C7BE344E73CF12CB388BB6F049C D9713EBD215989CEEA7473C00E40F79CC0038762139D9FE2B2BBB290C51A3B4B9090D039 C22B1A620DC1C3128C0EAFF4C62A29AF0338C65B6730BDB7D5A6A7261C04816B7D11463A 935AA0D33802EC148CB8E7DF6B8FD0FB064BDEABD0DFC3AD5A80CDAE645B7FBBC59359EB A0D70699CCB53887530C3AC4E796DDA9AA05F36CC0A6D0C2F616E761CDB1ECEC164974B5 0C0D38697DF56BD7F7F1772771054F18E3F5EDEBCE00939E70A43766D0E99EADFEE152A2 FEACA0BD0BDFEAD28E3437753ED58E345FC0D6F4E395667411D4246C460DA5D3BF2F5374 EAEAE1DF1A76A592C4957BB9C4D406257388DE96591969B30D10DED2C5B647B66CC0BCF6 146FEF353A20A3A2E40C1A7B7964033816D6A544399965E9C17FC44C524268B0228E209D 2276C1071535597E57EC3D9C4D8328CA914F54536B1F63C89325D6B26DAB4A5B1FB8260C 241331D1B55C91406537C5323ADD2E3CDDDC9E199CE067262690BFDCB5184E25795251EE 181E745001ADEAEE0A9442D57002D48D6B53E693C37E0BC64ADA28301235E9799D9D0AAA B4A23F6D8B4EAA5AD3B6B40618330441F6A24E44B160715740198B551C2883CB17FAFFD0 3B4CE68ACBE3F6B33E29987B5258C1F7DFB87DB89735F05AE7966FF1F2B6546AF2A56918 3687B6DC7B1AD435DA0209B0AE7CA01A3A3359291B1435C0BF04BDBE2B8778E4EBEE35D3 17EB5CC7A3F7C5B7743AE69B16A6B9C89491D121617C20CBFA52E93274E6BBC8C0E9924A 002CBDD7922F3437560E3747B93775FA549457CDCB2A9943AD403BF8AF05EB1CA0EE347E E832C6A17A3A53EDD50EF553A0E8D6723D3DAACEB6F81CBDB5B78A5B207A98183C3650BE A88F82AF734CE32FFB1118E54FBCBFA2C2705D65FD4A1B3A3734F188078A7B09738C3EE3 A12FCE8B7221C3041224D324AD3C514EEE792E3D47B1E8DA34AC3E577163E7AAD2C85170 7D630EDFF8403AA2720B09218E0013FACA789243FD76719860373949951B1907097E01F7 2840CC3089FBF9A86B01E6E5A882444A3D167A302AEFFD3AA9463A68C7922104E365FEDB 9BE61D5EC0A3AC5722F2BCC5101BABC86333955964509096B6799F286BEE15441C3DCD84 A846B35D0B027C48DDCBE123DD9D2DD6A4808F0B3F98BD4BE29E1001905D8606390EEB35 396A3A981529655D67FF0539BD3E1FF2FABBA0D4393CA781FDE2864DA5D2A0FA6F78063C 03CA44F27436C3421683D242EF3952B8707863F6DE2E3C94ACFA9FC60EAF7C8D09BE2D27 BAEAD24C01748E1EC790EF22AF24F1F7BF0AA1FACDFB5C8E0A9B3A1E9E53047E4E791D7B 9DBC38B9EE8EB0E5CAF79C84E81897A4B202C6A3F22438D9B043D982F605E5C73CB01CE9 56E9DA66D7BB53F38BC43DD2962D6589AA47BA3E0AD6BB8E0557127CF8F6F83AAAA3597A 8B57BBCDEEB2223AA2EB36BC84C7BF53F3B7D9C221FE76629512D04EC454D92060750F55 0E76BCBBFBF9566266A8D033931774C37CDBE5FA71FB43137E5592DD67945201E1D10467 A3BC5C273DE16E64035C39E4A36D7AA7F4E8389A1FDBF891B00613396194EFDC5B77A9D0 9AF9C1A4EAE52C87A096FDFF8699EB01E9EFD3F786A7D45AAF8D9D33B934CDFD85C495F2 09009C628EE54F19A9F02CE631DDC692C3C56D2FF00B8F277A18D1F38A63C394C717A0A9 0B01AD75390D853D63D0E0678C35022369BC8C985C8229C98CE6BFE1C40770461A5E26C7 7A7AAB035D6AAA9B0394021020797E627E2E7D17B39FD2E7AC6FEB917A148FB996911869 49A036A0E5B85D8BCC59570E4C689F2E802262ED26A13C18A57F99A74DA94491C5727246 D3FA45A7964F212454E119A32738582CD4F5899ED604F76F0327CC1E5746A86CDADA7F97 E11EBB6524AF8107F3A8F0B8E5F887B799DCF9F9481859EC4E5FF63AF0C294C2AF716EB1 3EC7DCFB796E3CE4B4CDA1DD15186CDE479CE4EECD1FB27F5A05B69FBDF436EF246E8BD1 A03FCEA5FB213D81F80D6ED7960896101E046D1101A7522F31AD1BF6C08C5ED8F6574F48 2B6FFEBF34A2A157567F1B82BCE3A46C14A168B0F4658055BBBA2E9C29A4DF42764F95CE 0EE9645C6E0BFF33CBBF3436F7A4FAB4B2A5055FF1DCEC075431A99670E03248CBCAED63 4457D0EFC6565472A356B1169775BF5156DDF85E03688FE2AA31A158A65A1D9AA4489CC5 6FDA78AB85C35C42B1754180577244C5343C21E222DA72B8BFA097BB860E9F834B62AF9D D50481FC4B1B9861A1C2A9F340237C949FF030096DC29FEB028A00A5AEE8507AA290848B 714C13145AB3F4EA42C8EBBE4A3CC737C487D0DA0CE29BEFBEEE34F5CBE03DC91E5E2053 F114C70CBE94DEA1653A26DD4CD332F62AB71115DADB2C6B3339878B9997AC3AB5F5ADD4 9F432AC706A5256DCC4592C30DF40C5C47A2FDC72851FBB0E4EEFDA227B72EAEA758DEA2 341344315496A6F22D42FFC55B4E90821C251F0D8B5FD3E0802D04E10DCC31E5024D330B 25AD95CE31981E90BFECB17E786A10ABF9A19220DB82744A43BF5B4DE0FD8C54171EA498 AD14E0972D6EA90B5CB9846354C855E2E13B369BCACBF8F1852CE60227AB27CC84B9D326 68E851BCE4086558BA8106D9249C3785F3C59E43827307C87C72033501ED888E32325158 879454289A07888F09EC7EF1D6F55B92363BC740E170085C4D16547007A66B6F0E1FDB4A 4FDE032A497377F8B309B5803CB7B450A246A0CAFDB2F8CEE254EC5F6BC7C1EA38BFDD79 268969FE9DEB9FD896E40E479222BD480EA1AD9E5E0EF7780D3E48D62219E5518499D46E DE92464609DCDD07B5C948792B71F1854C114259463E839A2DE74A11A7FD114EDE9329D9 F1EE8BE5463AF8A04943BF77CF68B0F3CA2571D4BDC19B980F8919AFF6EC80758056F93C 76758F0AB6313052355085DF8F0BD62C7380AA3D32102F48F4F84C153295AB27F3F55694 E3C6339B3E34166DB450373B9F326A1E108ECD95B0887A4CB8C54A811B398C0B37289C81 676CD8D528C75437BB2DA5C83C0FCDA94588BD785E4F800E87FDE1F277AFBC3ED0C5680B 27DC483446A828114CC9B239D8D1C2D920CF149B097F9A78E35C0BAFA1B0AAE5730BA067 B142087578ECDED1DD73E8541BACE5FB813E14483193467EF8585682295816C4E29E197E ED404E94340398A95A470A9E06BAB7BE0F5FB22338A833F9157594C5030639AE0E69894D 49098CA950C39937BF17194797AAAB7E076A2087467A2D29683142D84B0810F1C603A95B 3A81C3225003834CC446ED0944654805AAA164B088489DE9F71701AF4DA42C675388EA82 CB8368EB21003C19AA278FC474731F2D74A008F24792F651F110E23EFCAC719E2E9C0481 10968EB515AC09006E062EBDCECDB6D93772EAB20D7C105DB828A891F2711DB786B575ED 484349390AB27A3A767D8092B7585C8CF32F5FDF2B9D78A27FB8E05C4C25D970602ACA43 31FC692DC5C7F7C0FC5669DD8B150D7A4EB22218DFAA75E79263D106AE84AA8B573B722F BAF6D7F79097AE4007A3E519C107AD00F63069BCA7314000DFF2B06E4A9DC82FD10B27FA 16775E13913364DA3020F7CDF748CFCEBB7117CC4251031F6795F4289C4A63088E985927 B971471069135C4DC3BE1FC3912B02F933F26F72297FCBA9F21820493FB49A1A862991E6 948A274C9C5954AA6BA752D4B4096C953E92D916369F9AD0DA5055521E3420ACAA45D436 6D061135613BD328630FEDA1634FFCD8E2F23097218C2449520D986694B882081A791CB1 78925494D19A7EC770AABFB956E69DAFCA7C72698AEB9DA304765F3D9E351022F02B0C37 9E8897E597144B416A008212A0780DDFB9FC1D89063A05D216AFED272F8836E5356A8BCA 818D7F491044995DBB9574BFA5B9E346409B9C4F768B59F654E9D607F3D5A078F1F5C0DA 6EAA9123F369B3341B40BCBEF1EFD9D56DD82A15B550E105F03100B18C7647702879FE4C 7D61243D5688B2979BF250CB1E594B1A2B9212EB957DBD3D41C0029A06C9BBC302F6E969 4E998A090296411D7871E35D9B367C1191A3F9A638BDE0784508A7B4475F768C24BCAB2B AB375DA779894022D09EFC62788289D9E72B74F7C52F2AB389038D4BDD244E1CC79B01DF 79E905BF50CFF6A5C06E68FD894BB1CB7E513B33F34400DC38EF8EF6E39268635F66CF70 D5EF4EBE5D4F36430233785252376CE73CC9E6F83BEF01F6D1C5AAECB6848CA50996581D E069F69083ACF3090F29844580712073716A36392BB2FC1049EAA0E114976B098A344B66 E0CCBDCE847B2D3B620DFFEF1ED2FC8FEB76D1766F76F3855F2C2DE7CF10F4DD4664B006 2262CA279472C2FC0882A8F0B5A4DAE04D4293FA7E08D7639B3D7FCAEA1124A261BEA0C7 560C6C52E61802C8502C66D4896EB0D8964E0ADE75283048DD0A1E243690D989A49FF16B 33740C7A49B820032167807CF695F91C55C0BA6D6AE7FC7368885C674B8BF30931870677 03A60AD58F42F6766DBE60A74B2C2E7CBCE56EE68DD0D269FDF5765AA414157BC63F5CB9 123E0532224DEDFEA2E668F3875AE4C5260F93398EF86BD5867E0E18B497FD85C4FF4A4A 3AADF54256544BCD7811B58134BFC41026132D8D30BF6903C2940157AF0568C9B6BB3009 7577212F65BDEF06FF06760E38BD32AF61BCFA7E2324D68AB590F2E45A9761124928F6C5 64BDDB6B51180CBF141F48EF9FF6DAAAFF2E379A2CCE80EC839A2EDB91827F9D1BA0AE40 FD36DBA0E8ABCE564309F7DDAD96A5C7D87212F8D586F013ED189D6850322E4670CE2D07 18CB688DAFCF1961FB0F4AFDA71382DE9CD976FC29B4CEBADDF073774D9B8AE9F2374C04 F704860ACB17F8A16B4051EDBDA362CED1BE1BFD0700524188278DC8D6B22E0D585F26A7 C4447076AE0998A76AECEB8454959F30BF5A4BEF1495D6549392AE39D97388B5AB14612A D6472A6B625134E17B540AC0D514C1239ECCAE5C75C9F7ECFDDDF66320D00052D874E6AB 792FB1CF5F37BE8F34A14CFAF642917406C3C519EF56C92114E706BCA38731B52D68B9E1 61BDADBD17A62D1074CBED9FC77F5558CD4970878E0349536745C3DDC0E6BB4CE878B2DF 361B4DCDC5FDEBE160168F4D0DC81436B008714A2EA3BB569961F07BCDAE095A44F578AE 6D0E6B5DC7CDD38FCC37177DF292411C89B4B64612C82029570C5A7B9B55F38E063BD3FD E00421B42FA18751B624D59495604A52A0DE27FEBBF7689E0DEA085841050DEFB7C9FA52 D3515731A1BD61D4BF5E82841B221EF88D921E1EFF65F731948CA481E500A46E84487BE4 E3F9DAC68918F117B77A2B5B68181C914FB764CC5876D2A42CFE47F045F72E5E443B4921 D0D63323C748984F622F00F63C886F404C671119FEC90A598084F85B4866A5C79E987C5D BE5458A2A0FBCE0BA6ECB7433F9D75142DE04FBA357042FA9793BC9803E78E573A14E140 BAE5E044DFB28D9BF672461BB3A3E50E1BFC83EDFC49A962DEA01047208F49C4CEC837A9 D2318E35301D2B18DF1E8D828B58FCE8D5F1450E4CCF92BE5CA2B30516A4E585D6C83BF2 80C7442A4F942584BCAF4C2CB5C2F56170817BF0535EBA87C75BDAA0190710A7E2D4029E CC54559EE6424E26F0FF8E1C2D3D012B3FAC397B1A446918F1D299A19B7A28C4D7F146F0 CA4E29B96D275B54C16B1AC37FAF498462C7BA8D2C11291175FD05A5B3E08290EED58ACF 680DB2202F229D7A69F982E644285FD1FAF320A0C88E35BEC245D249AFBCF6CAD552423B EA2AB070F314FB9B3EE02ACDE1FFA602D19E1805F27D1AFCD58D6D227EA765E6630149C9 59ABDC3067CC97A797C555FDC59B9E4DE3B0681898C970609B1B6B15A15A65EEE2DEECE7 2BEFB1E2C7A2BE2B3FF19B2CCAE4937DA4B593A60FBE0E0DF3925043E677D44B5FF7B42F 73EB65150EC0533B294B675BD7D5CC6A7BB6A4F043FDF87940F8A8CD366BFC008273CDE7 72EC15D7367371283EE5BC26CD6D46CE665661E16C691727CAB0833942367DE588BBF434 06F4DD67988AD1C0D5C3D24DA8A833021F65E4E4393959434E03CCBBCC98699A8B1550E9 C3192D3D3755F81C51E6CCF4C4E6575D9D4EA77261B987C8FC8CF67035D281D76041F70C 2B2FDC8FCD2719A93FBEEEDF54685031ED2E960D2CCF2B5DB0840B2554B1723A703C41CA 1E6169F96A1050CBA7A1554FF8A6D7E4BAB0B549664DB9B808FE7C5EA9ABA7B071E71125 54D021BFF7345D1295333E876E28E14F2274CA0E5E4F3838B775890CC30909661D5B86CC 4F681967BC8B5B9169C6D8F1B30ACB914E1140C6A5AC5B6855EE83BF9F8C5AC875D93BA4 1C62B9D44917BD3B46F65B23FA3044FE5A6F812DF1E77139253576ABA80A57B38D315E82 CE42DBB3BEFA62E400A194B5F59DCBFE915D3B5DC010B4DB140127BBF0195434F5A43957 881974EAA69CCEB2E588DA124EC3F7CD00F6BB81AC494088F061065C204A851B8890A5F4 EBE9D680DEC34FC853FBC85E20E3D9DDA86549FE11396BE73B2978AA8A4C80BA94788D8E D03D48C88C9E047CAB868D7DB3837EFD41267AFDF4808944506ED385295788CFBCBD89A9 8DD84168F808E49BD346874FB281AC70FB138E100D914093C582E7C85F5EB6243A941DF8 253B06BD01E8F75C693123BC20D17307B8E8839CDC5CD180FBBFAFFF702E0E9F6077237C F81EBE9737C296BD5180F40EB79A41BDEB37FB0FCBE238F1B86F45D8F25B39FD7DD4DE88 4F1D9659A27AA3F25CE066D8D84FC09932B8B2D3BC89941CADBA33F7AA87ADC13453C674 E8AF9CF633ACC730085EC2A843949B9E5BED6AC3ACAEE21D620495A0DC04260AE555D15B 59143C29566D3331B26DD93469C682409BE8D37BC93424E115F7DCDC95EECD57953BBD28 974F249FC98A73A384260A0568A69B382886A9AB09B6215E463319F8736865F700134E65 1D78B9C819501DC01CE5C55A2D58F12D74988AF124CC6C7E213520C940F6F8CB4CDCA9A9 DD2B569D06A967208EC37AD2F0BFBA7AB7DFE87AD7A5AF4B6E77E2C8F90C9A97D7EC58FD 2D7ADB97CB6AB5189AB4E5C29A1044887CBF775E09348A2FF946E9D7FAB0A13D7405937A EA98600DF50B8FDB161DF14D091B58E925BF12EF3176F3EC504E1E75FB868CC46146389C 23DBFE0F908356283136F4A2A3AF2C197997302BB3E545907C3295AC0FD06D2069D602DD 052BFBEE41D7C926B303D4C1CB548EC9537A0F5FB5C31899FD160BD9EC390F2E0F6575AA 032A78BFB98714D731B0804898F148ADF072B3E714009932FC8ADB363B18B2B15627D3DB B20DE94FE90B2CF68F85D7961E9035DE17AA5505254D50704903F28EF414D3CA13077AE5 A0BEAF8F5E11FEF25C8484A34A1C39FA1E8CE92F42BEB83158BF26EB1944E6213E5B1531 C7065B2F1449D3D444855727E691A501BE62F659322006FF9A22A5288260A785611791A4 56E6915D344495E82303F067471E323B888A61ECFCEF90676C5F490A9DD6B6803C5789FC A7B0B7A1C7EA4BDEF4463CD5304C626E8D714619CBDD4C4EAE61EA1D2386642DD4DC77CF 3351FA6ACEB1ECD55CE4308DFE9A09763EA427021D90972F2B8711A98C246FB448FB3FEB 9887A101F53321CE647B3B9CD077A31915269E6D049E48305F3B2E84351FA7C2394520FA BD5EC8CDF9EFAA99573B1788E0C77FCA125F590C38939FDE67561BE1EB47575028ED1F4D 27A7094B0500824F6FEF2710FCC5768F506616AEAE73807BE2ED2E0DD4C1A337993C9A62 C7601418A586D038E886E1E22843C38A9F34845DF71AEC30726E9AD413A84081F1E31A53 73D5CFDF816D8F6CCD90C2B438BBF715F0EDE86DC31341A0899CC6374C573FCF2AF67A47 5371828212D9AA17F18FF25801F83D0AE19A4712E24C2C024A7505A2FB269EB3E7DDF59E 7D95DAD916A5D35B7D16A82764DDBB3773CB0C6E3B1F2FDCC0553B26795C348B6C0DBFEA E7CA7B74D90257D8AF4F9D4F3C776D858CFD230781D2D6F28CEB29BF4EC4D413DB9B47DE E4B36F6CCE14C09A033D580D573C21B4A45DC172C0EA0DF41A0BD5CCCD6479166B30961E A2094DF2262D9E81465ED2C66BBF8B28CC4A25CB7C259BEE2C2F0991614D161B25D4635B C869B8008A2156BA56B48D6220DEBB6713A035003DEAA0160477F5BF7E336E90CCF67155 0A55B6A015468E8A8FC8050C979178EBE2F7434E11E6A77E2F99A133F81FB87A75F42EC9 AE9ED23A3DCB35312036CD819952BCA72525A39594C79C52568556C3A90E95C6E789A99B 04348DFF652C9A178C5F88EE957D2D037FBCF584AB699B276AC228DB743B4C4548EB54EC 38F6157163A870C35A4A7861ACC66118FD3EBAF43154C13A4FB8C52AFAF5F7FC67571D85 F994E66BA3E8ADE5973138F61AFAC440C1EAD910FF8F79B11B73C697FF7D921266E48D51 DA2FD0B438CCE7BFC1A1233FB8B5D812D8E18846B6401E9CB3A33C514693F19CC21A2500 FCB0B0EF63EA74441BE9BB70477A63A641B639C54F93F4D4BB8E76D0E6F49D134FEC890A B6E118D754ECDB3FBAD7FD4493AD9415ED13C05A0FFD949F3363CD400C5E2B547F1CD6FF E503F2F4620579B69415F4BC356F943868F198B4243D250992B83BEBA3F07930F0F93366 72AE171AD02B20606532EAA8F819AC8968430201EFF0FE42E8CAB1A10431FF0353827919 847B2B20B0B60241ACD440C8917B4D0723D44A5FDBA7681E9541AB784B1A109473D3AAF2 C035C27419CE30E5EE3C62F0EA884E4D4F164776DFF12D212629EA3AB2B103F000BE0A92 298F4D73B79AF1929DF56280BAC6F03ED3F9DCFEF4B138F88758E14D4E90C95DBD9FFC40 173E6F795689C812D24BB1791879326ABD3CD7FD2985FA950B73099AE1B86959E46C4709 1278D31A41B159811140598A24861E34F2BF09ECE88BC36747DDD892AE3918C41A961D35 28D8A8649E626FCDC9551E073855DBC34B57F6D198831CC189FE1C452FCAF8980998D621 F31D2B9C7794DDC8B32FF3F8BE6934B03CE603020E7A37B51DB4E1FC33F625A8983B95C1 853A1B1B4D4F4942562DB9A0FFAD4AD95A977DE81139687123317B757CE75ECDC8287609 6D7797D50287BE38960290831474ACCE3F57676811A5DCEC78E91488C53167DA013E3797 A9A8C05968C8888B2A55EF2032D66F6174B61CD24D0C62BC49250AE6D9B505371CB15160 C591809EE7551D40D3CBF88D33F8A3A9412E6221D9E656D22083980999E405957E9D5A36 64EF1F676EAAF5FA309D23C56C95541E7E51958358B436DC4CA542DF18398AB8E4D05FD2 D24BC091DDD9F4F963A20791D88703056B5AAB84655B3739821EB288F1A1182F67154973 AEE39C7E8CA894130CB0A9A811A1DE595BF12D04EA825F2A11A365CD1CA85D7C7F2DE801 985F64094A9D168AE1F9CF287CE99031D0A1742DC08698572926219E0965501497C9D355 6E9E32D23BD070BBBE905C512C864DCB8BD9E8AF46FF4CFDE9D86E8F34DECEDD99E8A745 E72885340086FC17EBA499548D8C535CFAFB42D202DF4C91BF817BB786E577C7508CF99E A088D9B070F5A5201D23CD76C9DFF960F0A77EE8CC94FB5CDB8707F8A7420B7FC2AA40D0 6E04F60C595DD66DD436A4E2BD606121E423E0177B17E73CDC168DDB7806294A1A2DC177 87C4296B2BB174D55D9255EC44CF850A68DA75BE1B577E8DC80B715876712DF29CBFB81E 80BE970CB01B9F8018C381EE021B57E01FD3A742CA387317883EB3F06FFA93E0473BDF27 98D77D6B3A962CF9F42D181FB4AFE59DC053F2C059035649A646F22A927A4EFBA9E6D3A0 2C7762AC72BC6827D49171F1F57C354FEE5E92E96A30156B8484BB3D9FE7A21B59008AB9 9692940D35EDFC207A14D20D2FE364ED08F54A255D1F434B432F00C67863997266F64862 D92AF31C3C7961692F6952157C8922AC8C8061E5CE8E4FE5E024C1324140354E9DC3A768 B2092B0184FC1A46FAE459AFBC0069ED4C2CEE34ED7D756D65A7474B28FE5F56F6E69150 6EA2272C75943E3CC9CE5FEB2346AA91136F5B306805EC51D6BC12E5D557F1F290E14CC6 043CA5CD3D0EF095D4E62BF2068072ED630BF1451B8A35DB5783B6496DA31E98129FB96E 02175D288D2854C505E2403AC9AE94145AF6D327270DB865EFF70867894567B87FF7E5D0 16848740741342E871BBD632ECF7673E1C3ED00255BB34A67D709E16EA1E0BD24F6510CC C1097402E3994605B5CAD28A48DE6F37787A77488D8C62614F5FC3340E952066B61C9DE5 1EAE3FBAD5D8B5AC64F8B261BBF06FC677A28EB58F4C8A08A136AF3FE387E24E6B100774 24D077650EC787BC8498BE6D7A1DB54A690C768825ED63AC24E62E40D5CCB2AD05A2675B 301C895800F08F936C7175F6BB3A5CBB86536D5EF41B111F3EBAD9769324DA1D88C4E835 223D976FBE5B9DA39161F6F3A7BA02031BC20EE1143E1FA73599CD30CD43F0552510F0A3 67E8E0963D12B74C429E15BE22C0AAC2717AAF021D437A784CCFA60E8BE2ECBCD962B1BB EC8CAD0439CDB73131D32363354CB9BBAE21B01A27830971D1D7B842E3145D5A400BAEE3 76C639A3B5D2AD8D51B75F7FA86465DE401BB13FDE3407A093479B87B0E3B2BDF33E9569 6501ABCD07786B1ECF72DA8083FA1D79873753B466A0423F1B504236B95C497F39F5D5A0 0417B3D8AF9721E5F3B5ED2DFE47D9BD0930F4E9234F181CD24394891F7B554766BFEFE3 CB4533E3D01DD656FBE2C170B82393C0F3BBCE9367C9D5735AF8317450C7F4B163CE95F2 6F2F7DB25CD88EE9B01716DBF1FFDA7FF16D54EA39841BFD3EDAF3684D2298ED45C8486A F5014230F331FCFB320D28D5A1A17D02D5593538946C8669B346F4693FADAC663FC608C6 E091F481E1C39749D26AA37062D7D94115152B214506B91617E829833AE67807905C70A6 8412293287EEB2286A27DC7D7B9AF75FD4E32DAA4641EFFA2A79A04DA0EFF958F411890C A50246E5A1F53315ACE19B22C9C14B897272237374BDA4221E3FD18A7D4E26A09DE3D246 D604FA90092F188E4D2C6C0144E6D49DE9BC8ED4561B9CD8EE8D308EAD97B6150056AC9B 9551CDC472A642A9DA02BAC20EC5B57698D68ABD0ABF1B0FB5231479D72CF429C39DB34E A75AB17BA21AB31E9DE9E2584C2EEA8BDCA322F0D03291CEFFF011843BD70C43F49551B9 B10DA24AFC0B79A87B6F493EF73E690A4A705DC8CDE5E2602EC6E99168357A69816EA5A4 5945A242CC85BF5E7B665DB8276C11483E879A1F9A59E4FC8D6B700519ADD96909BC3EB0 DDABA0BA75AE8809B6B802FA830E63583622109614A63B928AFE297D434A33BD0A12ED89 0C15CAD72DBFA7EB5F30B12077EF47A6EC309ED1009141176F7932955588C053DF307C96 B719564855ACC024859429DCF8DDFB3F7ADE1BD65C9B6A97BF5A56FAE58F41BE9ACC6AAA B0356F58900CF66FBAB2E2439C031103D8600FCCB20D209DD510DFE90716F654C539D349 99130FA43BABF53F8AE298F10CB073B797AA50E00FE9F88D9337CAC4DBB0FE101C28283E 6D4DB8FAE80B4A998525F647E7023AC5B9BAC987D5A9233541214BF0DCCE6C524BC1C56A ED18B4F76F8010AEB8E1024082D22AB60BD9F338AF6228A09E7DFA8438F2ACC066D2CCD8 853062A5818DA00F1747B6BAB166F40D7639DE8CA985C2808B0010608FC7923C7771F728 FDAFB1F118E2640C2C42301C465F40817C13E20448F16AC7D42E39FBE359F744C12DC67E 99A4B92D9691E1F6D2096F11FE4F017A4C2B22E4C550DD25E3E31E8531CE8DE879451600 4C9236E36E8009F5706C8BEE72F007538DA5918999B97C386DD6D62F7B433DD99B74B490 263C2AA2D059D2DE95CC604A5442116DAE3264568FFE88A9B1E4801052084DC11101EB03 E514E220E7BA851FDB7B5C8CF635B2496FF38CE6DAA23FEFE02C25B520473E5E07EB9354 EC2CB7A7A75FEE158D51A7CBE8EC36DFCD038BC52E9FA6483A5F4815C132B2C40544B08D 8C8A80B1916609636C2B53FE27E2B4715852A6F035C139F9EFA33ABBA2550B8CEB8F9C0B EF80BF543D1745FA88347997D01BEE8A8E2FD52FC40D3BFD3D438FCFA1CC5B4082ADB51A 5EBE54EE1C95DDAF8E5FF6FCC98C3336A292A0FA05CB5B48C122D6A3330898979AAD071A 4BAC19B03B03CBA077252506F8E68EBF004B962BB85B15A87FE5497E8F2E208117834E48 62EBA7AEFBA9A8997F71142BD6F6550F3BB358738B182A9CDD411159DA92B0B3E49E4226 627A196036ABEED57F176C72B30AE16C1C01B330577FE8FB0C0F7E09BF821BFB4F056A8C B52D5797C0FA48A9625292440F76387FFF46837A2445688696830AF32EACB2B6096367EB A8C8C42341D2F3EB5D5190D9F7241FB1EC16DF0D6D40FABACD1D7E99EEF4AD6118696165 3354A8DE539F92DD3426A196A7DC33F92B170D57E48AA80902D9F31AC582A4B569D15C86 A8E6FC94D75970BC6BCDF2C77318B1DBCC7E398B48FAC8D2E392E93CC37F0BE6186DD645 EB077151C6F58EE8203B697010EFCA123FA904A4EA80388FFD88C126AF7F6656E66B5417 8134B77DB4E0797C9213483E787939113C39215FB9F5B3B141512D962C500863C2F362C2 3B73E9AB89571A003E413435A02FA3569228CC6C0D5EDED34373FC7EBDA1200537C1B72E 9FAEC2E74E5E6C3E13CEF1B8F332E7CE6CBDC4A17EB9CC265638AE57E28E34CE99CB44C4 AF96FE97893390FF2583486F7D8B0B2D9B13A8DC0551E8AB85046C9E4091B6D5D5B193F8 3EB3E2131A6EC9DCC9DE88F4B64E45AE7B5B6CF10D4F812C9C784BF65FD9E942951AD808 FC9F010A0F45723593A354E578F8FEB67978485F40620C83EEF210B6678CF323437DDC88 5436567D76EEF3A83448EA76A3306CDE9D5045FB2BCAC94A7A58B21C0166D5C4339566C4 203535359326524E7AE47FD406959610B24FE98ACE978A82B5F644B112EF6A289C018244 85AEF2D0C38178851D0D5A6612C861AB52B46597558EE8E588F95BC8D657B02AADE2AA25 9BDDA214A736CB417F9564699D293A98C7A7615F47806B5424CD1FB7292AD1F2D7DF6837 675AD97FDCFA6825F4E22A4C0930299B0CCF9BCC67806E4E6A8EEDF449D96634C19EAA00 912240EADD63C8FB02A227B987A17964F5C867079495B383FAE560309FABE8BBA46C3F85 E766A98E5B8A980DF3205AFEB8416B4610E6853409B658DE2A7A3C2C6A292FF33A46D9C0 E34FABFD57E19C89A8F88D8C4798A96F4C8C3655808FF336C7DB56F52E0C6AC761DC0E0B 39E33065A02A8812D91AD303F3DA2C1D61913C76F1D2DE272503B223ED71DF65A5168433 A7BB3C3547A7E6A5A190F200992B73151BB9EE0D8D55F9AAB9D2E73677D3AD16D20D553A D7A7A1668B19F58E7BB9A5CF973A861645016DC2D07A39D5430D6D1644B88035B8575DDA D2DB0E6C040FAD93BD0B8486715821F2D47814EBC7EACE1A5CB5D3A2E19352EEE008F258 6192627BD0B3033199DACE43803176F7A19946985CF975DD1BB313DC58DDB80A2671637F E89D6354DDE8F8825550F1F616DAFCE19CFA095A36BC49B8437C00DB2DFF9B82ED7226A8 06020769A534706BD6180DDBEDEA953C98D639FBC8130732B42F0C512237F541ECD03603 8EC9F5BEC45B45F87A324B60E13280A18A2F6F333C34CC254464F774DD53906B7FBC79C1 CA8CABD58310D272CB49F4B3C83EF616A9743CE5C56BF52B00776EE469A45B18B8457CE9 DEA7CD6378C87304224B578E213AD3D9E5FF6E642BEFBD59162DF73F0B631C8831132284 39374839A1DBA4C4B4C4E30B7D411B5247F258F18A8723659A17A52F8194FD810318B32E 19DC9B355C028E98A36545D65073D0F8F4DFF0F9637C6F599C2F883B10FADE5077B49257 F16D0ABC0DDD9356F6B10FCB64D6B6ED9888E0312B092DC9D154CE76AC14D14DB564EF77 0EB48216D431D21672D50AA13307610DA45B3AC8FA46EE7F61D0C643E53B65CC659E91A6 71BF448EF3FAD8D18794B383523AE67CE1903510BBE2B2D5CC5D29F3DAFF71A54E582E22 420D62CD7CC8A4E093207432EE4FD0FA3B2E72E5E4E62B450C557BFD0A83C540C1FE9E80 C62D150ACC0CBCE73BE88F13D7E4D9A3791C806B38D12315C043CC022AC8CD3C61331345 5D19B2036306F132C074043CBFED8F1C1F60C74F074708D3755A6F28628B31C0D8068669 C8BB86C6412F32C8D6772CFCEA101D1ECC32AEEBDBE423A7DE28BE36D54D61CED5FABCF2 F0E731800ABB9B10E413129331BC441F80A6617F9A5E551CB4BF74893227C7D9DF21DC11 6C7E796F8ADEB43D2D223B4647DC5D53E65786C5A0DE8F3CD5BC6662B051291E36D47414 F94D999AD31C1D6916EB723436B41A72844806C0A8D4BA41A04F1848DF180A3C3E27D8BC 961FC8509CB3D4069B33C5E01F3C0B04D55AF2EC4CFC4DD7EEC9AC9426CC907DC70D9EC4 E428D30D8B28A27EF202E3788C5D14B0AF13D750EB7A8C5C4E5141AB5A477BD660753B64 EF5C871681283A0DA5AD98DB70A90D72BFDCA0E18450D3091EFAEBAD23EDECF3F016BCF3 BFBF286FD52B5D38D3D02E8161F8485D3B9B78C485A196C5CA052DFF546E4CAAAA9F9F8D 925E6F4D842B599E1A482C92F8CC86789F192987C3750771A11076C35415FEA472B29595 9A437980A15C2136D26C83DA0AD724B1E961251F80B9D751A89A004DBD66C2540F758AE9 A8D9A87A40CEC4A048AD21AAB511A630EE7C6DB0BFC5516B18140B0FB30CCD128475CF08 1B10D9E5DED0BE1ED477142BAE698358D9FE9090CF0DE3FFF6692A18E2AEFEE40CF40B0C AC0CBFAFD61CA62667B8C6AF75F2C8C610189522E5C334C3EE4C5949629430D193846DB1 3F2F49284722C3D93FA7553DB263182610D960D1154CE3E72E93D477003E26405DF8457E 919785328FD7A0EC5E75FEA4A69A4B83A0B1BF8A257C95DB99ACE02E4E1AB1C7381F70EE AFF4424E5DBC89F8744C31CEF9E39CBE52AE7B222C3003ECE5CDB70CBC5705BF14A8DD96 858B2D91BCD9048CF5499B557B47EC7EAD4F691D9C0ACB5AD0EDD67F18D0C60BCC5B26ED 977B54870AD334A5BC6FE43C10EFC67449DD1EE7E447AAEA62CBBD3708A5C53B50D9A422 D90DED5D2DE9496DCBA55431336DD959C87DB3C827D74142F295A7FA2AFF3FF16B6B3A19 1947BEB998BFBA0058C8A0C851E677368674FE190B2498042A1091F5DE30DF16380DD89D 0F8D076F0AEA1FC15F065FB5F094FD7DCB9BEA369B473A796441BB35C3F7D083CDBA9263 3AECE8EE5EA3A475C84552463F714F38F73B83ACD3DC7FDC9731E55C25735B62EC439FD7 421236A8ABF2E15F572D93F863CABB5104F2F71C5CD8360ED6A16F0EA6E20965EFFFAB3B 9AE5935C206A074C7C3A21F8B50E6E19950DC462F06515B3271974877B0C33B7D2F735C1 06597443E2C5421CAE134AF0E035786DE9969914E2F0B8982F9496D64DBFE6DDD678B875 9825EA82937D32C5D3DF19C9F35700C733C65D3AE498C2039D41BBDE6CE9D975E753A022 67E5354D1739005A656DEA77ECEEAD9D8C3B85512D8BF6B1B5ABD84B6D05CAF87B254ACC 3F650BEA548DC6EF6B1467BEA6E424945B7A6656F5DBC695D3E5434E0B88E5BE68B5BDEA 9F91337F7A74A5E7AECF9EC30AA070AC66E8B1D8AA70408B0F11683BBDE539EE5DBF9D32 9B1A1C8CC14407B0FD0BC4E282D2BB466E3CFCB7E2E375A0DD49FEC7A0ED1CB15EBCF2E7 F96F1094AA840E618E69EC295ACE5999BE90F77C523822EF0C15585CD816D7918D2AB0DB 65CB72F1AB5CE5625C75B493E801D7A0DEE575BCF53E4F0BAA2290275470C5F6B49BCF03 E4E8E31CE64D3A6A6C42ECE25B6BE2D2D8D8A821C4C727806944639CB4DC84777A2CE101 8CE5EE0470D863ACDBA2B69B48EC7EBB23BC73760396F13BF6A60BB6D664D7B553C2AE9F 32EE16F06A114A3BC7289747FC6D85BA0332D23EC947B25D6C10750A83027A745C1737AF E9BBDB080BEE663646BE3894B184F9B892CA8EF2B3AC255DD53388D87859F9EAF8BC82CD B12EE266A079F78EA317C41C505CDFA41B1CDD8A63B884DE1EEFDA7B7DB1EF77D0E98742 79C50B55DA61FF95BFA7076ADF6BD3586E2120666BBCC3E431CBB19963982E50B9B1F375 55AD6DA4AB02B305E074972C7961D66C1D1327AB93813F7A7C6C860A81281795033C8AD2 8FD44E1AF0668D8ED469DC184B612DAFC1529F3AE5D8420B703821A559D58D5C574C15F4 9C6CB20FCA5AF432FAF63E73F23638129D3E80509C0BE0034458DDE29F5C88807FE1C90E 5BAC2CFD565D686945583260334165D27B08EF3C7839396EE421686BBFF67996E5FC31F7 C4C96155412C4E51D5B6C97F6C47AE74BE984B347222CAD8B76EF218F34CB3BDCDBFF446 C8E52F3E2A121903E260C844B093439194BD3078E158273B28A7674F0528C9306CD09C1F 8D612881D46B8D4AA4C33206EEF23F0DF150AB91D4EF3A55120E3CABF490A2FDC34F85DE 0B4C3E712D3DE425B3B0B5053CCF7729D8FF20207EE09D7ECA11A2685FD4AAE6275B9C0A E26543A3F0C826FBAB318690FCB471623009FC751E656D31538951000A413132B4C95E2A 75C56BAD12A492F5F44C14016CE7751831A892BAF050422E459E71A614409DFF87BEAF8E 9D61471C279C9B2981C3A1D119678516111B965A060822114F9CDA77DF46059D434C6A0D D4E57EACFDB4560FD29807C7160051BB778CDD807B3602F6CA02F699E8A42C7A6143B149 2E78C8796116ACC803B5CEB308B9F8E9F11DCE649719618A9EF689919605EE6FA001E178 4A008D1D5AA354777566B4F5D496ED915709E2FB39688745DFCC3AEB5D520B77C8066429 6C67D95C50FB86B9DFBEBA2AD8234EA2C967A02B72DFA5BEA5BEB8DB4A30428FAC98FB5E 6FBECB93EABA637684F4A82447EC00D422DB058D521299658F7D392FC1B0130A9B995477 7FC2011549660457BA46B01E4D7AD51D1829BBD0C80576E893816FF1355C006FD22876AE 654B0D851931E1BF3E80090B762846ADC7EFE333D7C6D529D6B50FA87347EB35438B18B6 DAB4B45CD3202370F744013D15C01AF637A755734706E667AFF3A498F437465B45255BFE C519F8BF9FC37A61707A8D70F26AC6C90C73AC9CBE1A2C7F9D607BFDC999B784C7D15BAD C0CED80AEE87A20D3CD2C57834020350B4310B17E62B192D376EF6947C8EE477331DEA66 CCF090F1787B19397BD8129449C47D5E03EEF8D4B8238105D626115DAE76062AB6A01E4A 874EE181607F505FAEB9F8743CC79A0C674B8E5BD9EB8D02A5653C8AD1E6CD5FCBE83D12 A64399F646860E564F1E118C5F18ED59BE775F93A3CDD8F1D4630A48A43C0F2AC8DA9A45 7562CC56B57A802A3F8543BED0A96363529DD39675BFF7DF6F532D190BFD5C6B8AB3988D 6D375A117DA0C00AA1C9AB60C5023D52793CAF943B7318DB12377D962E53DB536BE2A1B3 0199D481CB100B3DFC30F3D01EC4EB8C9CA7CE497440C54A12F1EFA9B50ECF7C6AC073F5 12AC731C94BD7C24209A1BD1340DD6CA5C787E42DC97E23B125B786D4AA2B149D05EA6AA 891AE6BA361D1A42665E123EFABCCE667BD894ED319B8CA398EB6A5E213F813FCC912F54 205D51716450E1744CB2A5A8612EBDE46F35257AAE6D3AEC55D65E07C50736AB52295D2F 5FF8D43AF818B05071354B5A462DCA72E6A5E482A807802A1DC14132E50425E75C6CB612 F558228B7659A6CC4F2BEE307FFA31A861D88C994C650DD0F1845A26EF0B8D975B9E2120 D6C669DE20802B62F23867D708EE1FF1EA35CCD53F5CAEB8EDA12E12A58E9F90D150A692 194564E1DBB173B1B3AE5795460A5D1204F1C02A960659A0C0063A7D5E7497A581B0972B B235C90F7D2F89D6F1279AC5A0A15DCDC5B1391F5E5C94AA03320AFB4895AC4F31F28C29 3D9F6790243F7070E0AE21864C7A42129AC0EEADAD9D11CD447C307ED64DB0BB41BC3BDE C9EDA6638EFDBA140CA92B7AD459482B2F573E29B03381A23176CEC332BBD7219231554D C5FE2C2C56676A137945671D5F55E080EF0306681C44B994A5FEB444A672512C424991FE 6D8D33D099D464B44C8365D37CCF13792CD726375A5DA9CFFB56A5628FD564DCC124D2DC 4FC1E2AC8C0CD8DBA8E27138B3B5DBF786AFF59096E52C999D6A26C5637F277FFEEF34F1 841A3420594149463AF075107E62315AA0B2D78CCF9A72D1EB9CFD1E7900B0CF877BE2F1 C7A0B60A1D995F2C5C37F7EDCD09998E7B7E3E2A2C90D4AF8F9DB1ED529B9C3DFA0531A4 9359BD1C4BF3B82A095562D38C7F15C3FDAF09BC39B670A529B9B7EDA1683D2410856031 5737EAEAD181EB46EC51BAB3FE026E532E65F7E76A368C7100DD7AE43F881B45DE624CAB E5AEE7D7EAE8CE12230A0336A098760C71E0003321B6F512527AA59726B249BA92A18C1F 1508D2E3881C1E004B830F9F24A706153F4B4565AB16978D608184FE0FCF816F567911F0 9BFB10C7FCFE2CDE6ABC0C83657809FB8BE214E5570ACA4CB31226DF4F590BC37EAC8226 DDFD5DF293A15CEDA79699E59CE459F1BFC0B08DA76C1234F996BF4B2B345A18B1AEBC38 C04218864D6A7ED071173DB25DC27B8FA8A6DA897D83085CDDD24B3F3F1CF936C74B61F8 020620AA9114411700938AB9E9269C13F97723E29E86EB5F14D1E86D15E8C8D678EC3CFF DA4577F97BE67A8D3F60F56CDF929524E00A400C35BF46F64134324791FCD6DFB72DA7E7 8B7EAF388F8D3C860E8E295867BD9032E74239F627DC645D0F2E99C6F56E3DD919447CE5 CD3126F491688A53F54FACAAE5A14C796CD964F693C8556103BF132E93E2D9816282CD3F 32B84CA3798DD4675F6CC06E0A26C443E8CC9AC465E57DBBEE15BB206798C8ABAE8BF0F5 DF4F029FAD45DD95671892AA63338E63779E321AC933FA3FFC368412BD62387E45BF0808 7C3594EA7E6628BF2921F2AD33C4A7AB22DD7EE3272150D07ED085C5EEF85F5CF78FC9B1 468D9698273BCBF896DA6CD43E088F7AF97AD83BF300817D35F93D74FF285EB6ECB223C3 9368103876A36B5D84C099136868530F1DCDA96B56560E6B0B18D2C66C7FED082850CA25 E7947934A1B66176B5C332CB1DA71B6D49754A06873F8C37C2C64A16442F0D983F6B989D 8153F027A9C8FED72FBB1C2A7A56361BE460D85338E47D0DD878336B040E685C48993D7F B6B12CEA753190E47BDE31F458FC098A286EE4EF94A0804EEF0324F92643B4EB5FF1767F 9D0A99B59B1CEAA7FCB5CF1AE8B5E70E3949B085287554E8BB456CBA6EAC53040C589860 195605D082EBF7E46BC4A7D2284C6518D8F49D524712B15981CBEE064FF6BFAA6BE46386 BB84F6C20D8D0EC6A18A6B74C30A4BCB0F2B81F100A6E78DC4EBA3E6B9788F424467BCCF FD6C58F5DA79A9691CB6D74DCD537AA085D385318AD6EC7C2F04567BF97EC15A73E963F5 37CE3F70338D0E3994E0C9412702FD7BAEEE2E7A35A65E57FECD397D3EE54C863E641E6E AC90E91A8C0F00D839B5ED9D9B2D7D78088907ED499480BB50EB9EC1FC3608A8FC1A20D6 0C1F86BB28318444201E7E9F0D812D71B125B467BFBACBEFE734A7635786A7AB03AECF40 AC5A6262239EF8E0F538231D2ECCC1720CD40D56CDAF38AFC197BDB28AFC98F57FC9588A F65EE7268ECB44AEC3F5DA1453F0B4021BDB7D7829043C2B1D55BDDCF4687FF7D5092824 30AC8A512FCD528156758D24318A9CF77678F040D05FA800B1910B33B7E12213008CCE3D B9A5E90F708B26AD23F82CF3088D030B0559A6598FCEA3392073693C64AD3BFEFF0A05C1 C9BBADB073A756AF42D91F8D88F0839E32C317319AB514A6A24CED9082F6473E2B983EEA 6724C8D82ED94A9A2BC4F375DFD2C84CCF06F9EBEFC67D357441CD976F0CBAA0C8BC2DED B2AD5B5CC894AA880A164B68E2F5031566D8785EB72CB183F23AABFED617A6A9B08F4B8A 203D029CC05C13537C2FD2C98FF701CBB7FCDCFFF2DD7C1B152D68FD70E9F15ABB7634A4 CC1DD8BA1F5EE887060F223B792F7D204A338B8A3526841D45D872DF6DC3A9073E4A828F B70D993043F881AA83A543EB448B726197AEAC9A78CD6456035E5DCACA540D559601B595 580EAAB91811B756A069A6EBCB887120F245D9CC70C730BF1F7990D119BA7CB75B5278D9 045BCACF83947457578586A93E32B03E95942B3C036A21DAF4C6F0C5852EB71499C3B9FD EDF36F528E9A0124992798C4BCED2711E4A2BEDA7A7FEA0652962B4448818A141E81BDF1 2F11F423BF5675CF46B506DBC8FF2C4695FD27FEC069DF0A43B7136791E0A3782FC4C296 9E06336C4F6109809F6ED605A56D1330046925FB5F62032E0E4E2C3FED27427C8B766C2D 26738A0AC701E7FD89EA4C9136E5F82306DB83E2E9C2B0CFADCE967B2A8EBCEBD67544A1 89614D6B61E9C77AA77E3E739C03D593E00B07EA925F6321FF5B8F3C0FDBC3948C6D649D 96529559EDDFF57ECA28B2C0FE35D90D010C10E6E1B826CA23415E17ED863ED5715E7B4C 075F0E1806E51DB91E55AC8B64DB7731E8A33C1E8F5C8FBE17309859E5DCB58D10D3F658 05923AFEC306B4359EC6A6E8F9DE3500799B7C7B322204AE472ABC69EFC886C11DE790E3 603304713B3312C9CFC76ED0E421E2A034CED3E88D53A8D80A3F28F2CCB9E3358B152EF4 421447CAB89C002C355274B50ADBA185A44A746FA19D7D481F7CB902E73E4AD2A74A1CE6 3D9978AC3BD8B0DFD03E09425481F63EE2CDAB4AE17CD75A3AB05F9246B3DDC3E0AF1D9E CBB521D540C01CC26CA6F3AA5BB49C804D312BA93E92CF11F6BBAC18A0EF051C52C41191 8C01263AB5901221AE0F1BA6C924B8F937B49985E6D5C17B54E39E649E6D023F0AA42BC1 D75A384B05519BB0E4118DEB70D272542D60E64957B749BB76016A1D356C681227228948 5D89E1CD945BF9DCB49A5B831C082755540A032087A2ED82D166E292303CB1180C49E739 5E403D0C5E6931ED6E36B52FAFE37CDAE28183F15C8AFE3DCCFD9A48A4BC21669E4D3667 0DF71C4E6087F5B3ED2FA7AE8B5AAEF2A27F063332527B09D712CA18521744D89F90E9D1 3BCD7EB332AD7BA8055BB8A859C4C16591FC3CE1474E260A74E3160DE648F815383B0310 DB2FB9A4587FE13A4E909A83594584CFD382F05EAF8654DF5B44E39496290A7EABC36381 8978F6C05B5EB3838572EB0C64C1D81E9AA0906FCD84E62B68E2D3BA876D536E7794067C 9C2370FF2E2E46004062B260CBFC29CB5FA0219C2EC6C8AB8CC4418ED8FDDE6747F8EFA1 76A6C6D1276845AEC38B41EAB3727BBA0462E2E809D76E0B5BCAC08FED585BA6E5D8D0AA 3A36FEE108F55C23879B62C0A425F176E3C8C9031BD8B3E1B6C3D8DC383FDE0E36B33901 50296F6869A4FC7E095517136B547295D1DEBFA341EBAEF34A179B070EEB60AA91839D97 AA51768827E4A1CD55C5303D1D99341537B13FACB6F490072D8139BBB060FA1A02C93D3E 08888E313859B439AF27A3E5E7709BDA43F851D13AB5B2EF395A931A99D0A2FD8C6088FB 33D318D8EE1F7C7EE2D2199A638E3858EEA06B3A167F69FA5AABEE4558773A75610E7E30 F3062576A2A7FD3E9F08FDAE5F1931A7FAEF85496071AF8E16AEE74C0A756927E0720708 7846DF0F9A7C5444D007729FB69042683DFD7DB0078199812F85FC9DFF1E45C77C104F91 37787E3867D5AC37FD7E86D52AC67672D89F04782F980EE918C6152DFE7657C6798557CD ABC854E81C980DE5AAD8E0BC259247F73B92572973D482BA7E4F619F50B0DC247ADD0997 CE4E98A71E4A041F46CE605D32AD047D2E4260033C3FBF80525396507815EEF46960A904 1B83CF32AFF7712BE97D636B4162190F2D13CACEC58BB25E89496122D23CFA6676E790CC 29F48483788C724531BB3EDBD557950162907B68541B51ED6DD74C06C2BFD5346CC819CC 8CD654F17C9E798168C90DDEEE78B6AE37709D35923AAC0EF066146D93C8179832E1A7F0 44C4637E560853D227D3A14EA62E2428567E0CEBCAA3C43B0977DA30251BCB74E445E981 6521CF8F1955A9BF920121E4FFD1E022FF42581269DAEEE779282512DD46BDA9F7BCCFEA 77886D52E0B6A9C64A37AE0564DD09B4868BD1C6860FBFBA2FF022C291AAF670DB7AC717 D82F709B07DABA0158FA67C0BC0DE958FDA1A63ABD29864C005FFA7FDCF73AFFA597D16D 51A1E16FED7C1E8DB6972353AE498A9F1B0AC3B778675312C7F01A7533E1A53F31964A3D 372A140EAACBBF7EEF600F69D8C466905CC21CFD1D1EB70B2469788BCF405ED84412A5AD 04AE871A79DEE0797426510EA8F790993002857BF2BD33963EC10B329A596226AAD8745E EEC9A84BDF4793293D941756C6A582D273467EE704A878C40A1F8E6F4130DBEE6E484582 4B78AEA786EEDF2E119F0D563C969A64B29F13327C52D03A16CD690341B2E0CA3B622F15 ECC91DE30A47C82390F5EC38D3A52C24D3F4ED18E8733C1635C25854F05C394686913404 E6A11B597213B0D506EC7EF6B9A6F4755B5A71099AD0FC9FF11244D70A5B987603F59AC2 A01F251D9CC39F24FB322ED3FE0A0014A412D7C9A94088C8C2FC99657219FC27B299FBC5 4E08F729AA6C013BB76CD320B23DDE9D9D9B78A34E6424BA1EB1C95B5005A53F90D3A2FC DED3AB361A9388D2EE3FF47F4F9BFB29A1375351FDA929DE5A89346D7BDE86588EA5F95C CD052B256653437D4B9F98F82A4E9D860B9E6CF4616E80E743936059A3ECEE59298A2CA7 D83610215D893D065D73A0079E6BA899593C2D46866E980DC125DDA38519F181E20B026F 86B1CC7ED4C00C954146B530CAA58C3C52BE08BCD25DE61A6D7F8BF7C7D1E325C4D2D610 169CCA13C7AFFA18DD3907C06A0FFCC09C7033B9B721871E31E4A25DFF7FC74899E1886D 8F3BD163AD7C34FB6A948C0FF667D97C8E918D8E663490CC7BB6AAF3689689725C07569B D17661CB0990AF49011A3C324CA124C4CF555C021041B7D301FAB7D36518B34771E424AD B62E962D8B2C46863DB108E1316AC529A404741DCB27DF4A081965B96ECB7C4564550BE7 78629AD19568AB733BA2A1599F585BF5132B5B5E59F51BCF1C284AC371799C898950667B 44E71E5FC7E221C927DA70742469E3BFC1813CF5EAE32F109A87BB258438A6B744D3D642 5B3C42DC2C542A8382C3B7BE8A5C43DE7E4A123D4130D3ABF3E95568DE13C5A5421352A3 5A083A98EE09EB0EC99C0C33EC688D2573E9969AE74329D3D6E925C568A5BE0811C333C3 372551F2A32BD9E0FCE86D3D2E83379BD55634101F863DE3407564E3A1A73D8572341037 A6E3AAFA61F7ACCAD510F7C17261408E8BCF0AA72436BCF21F69EF6D3128CDFF321A54BA 3014DBB6E3354197EA88BD4AB5EF052589E3635601EE76508DADC4E2DDD9B9710CD11963 B8B611C5D089CF34D6DB9E94FA9696EBDFE31DA2AC089FB93B8F5CB31C301607F29494E7 490278F0E378BFD712EA4AA99234E3205D0F4E0F0705F352B62574B884E571183CF1D44F C911A617AA1F23AC0BBE3E088A84D04AC51349E3E92ED227268DCB4DDA76B2DE3B473331 91087C2A70BC8B0554C3F21D5B5A303F6FD58CD4343F0EB68087715D0086C3938DFF43E6 92F01DB8319C4C2DB1E2D0B41117431086D4C51B010420F52C94C4B2040FA0FF2ACC4A23 8C44EDE007896F73FD591E491C9359598F5786978E481141D70BD1FF759CE62EDE7648C2 9E1C59FA4F7F61A2ED8ADF9E4654F1BF161D7E19FD0CA8307993F2FCDB726E4C92412D6C F260767375AD211B46CDF539D66B2CAD7410FEF73A289812B6DFE69F6E6F24A3E66653E6 C1BC17BA415FDA7E4FD466433CF5AE80827D928EE9A2B4FFE178E37B01E8AF99A8A26490 0AB2637E25B3B5F4CD857E7CDC2F589CCF52D546F217D9B48C894E11F57BCFD6B6CC54A9 B2242A8A39FEC8578F3F7D9B726F977F78103E4C2429A3C9B96372F3622D7C6FAD2C660C FC73A3BB8539853BB061AB6F1EF3E6447983CCC1131276693F0BC5C2938DDE7864776E92 8C2AF847D27FACFB07656A2DCDA533FF094927D920E227E9618A47E949E20A61D97412BF 273AFB50BF67F54190D982231FEFD98ABB2676E59E106F5E3945BB9739A87DB7E0091FCE 97F86052A8C9E9A49753E66CC322C3051FA489096E2FA9C2E5DF52E439EED2B9D1A8D918 E19A9C8F97FDC6B9A8982A1AFFAAC4E50899661D2BF6EE5EA6F1FF825114A1B3316BEC52 EC64416C7161B920D7DE9C339DE346A2BE6792F82CBCFCE4FEE70F04DAAFE5FD13778B1E D7F5F6BBC097FDCADD6808536570ACCCF31DEBCAAE581CE6D4C6364E58665C530026FD50 1FC1B1414B0371D2BE2675E304B041C7E635DC98DEE3F1811EB0995FB3167480F31C8F8D 85E3B5F1054AB5B5721B7E8C3FFAFC18F50C8EB58A5CA56DDDF3FFBACE09BDCB27852DDE 9A1DB9A9C4A51092D145A41E07981235051BC56F9319F03FD37B28388FF4AD8007F98B67 C7E8FA79B54EB9F249A0A383F7AB987B6EDF5508069528D49FA26659AF0203E73A13AD7B 3F64D294AFF49E42A76D493AEE50B099E049F8750AE058C2863FA2F4EF9EB18F6D2C11B5 906194F7B480DBE6FE3D6610BD08AEE0078BBA1411B26DDF14B16A3DAEC2B18B29EDD557 645FF36507654C2A86B7B2D18C5F886E8F02FA3092D35D4802AE25A6CDF17C469E85F67B 1964A75CF22A241F2580875F639ED480E7AAA04620C6C58B5C839F0B659D9D2AB6EE6E0C 80EEA564E9CF0F9F7F0E70410426047F0EE92451C92C483AE8F456FD95E21C7549392C5E 41018826DB42CE4709FEE1A86F6CF18A0DF73A96F8147AD819E5639F95E6CA508B9CD05F D0BBCD49AA42A09A168987B7D8747E4D3CAFC699DC40EABBF633E2B6339A824058BDD026 180BB7BBE9937EC7B87E853DE8308BEBA2D7B1156E0524DB6D983B9EA396B3BCB9A6E425 8C55325437EFEC9AA659E57B07B838576B65B10A9B4A77304383D9540200A24ABE5663F7 29C64D293498F678469024A1F552E508B49B610D3EF334279AE58F4BE914742752E9FE31 1642DF1310E0E54CABB5CFF9CBC0A9FD8C81AC09D7762D9A989C2ECE1B24CED02D991D83 1E6BBE94F7D981DC75EE82BE1AB6E1021046AB988E5147D3E037E447B1B38834F9FC48A3 23A734D2DF86BF8313892964B6FD68CB8E4DC0B1EAAE8E85B137E34C22C8F6CF2A5DE4B4 B914D13FE7C0E3B73AE8A998CD19BA81E3825ADBB97854B7B89C7FFD8E059340566B7348 36E6FD18BA8B1B60EFD13DB954CF005A501D70673FA63F79FDFFC78571E075E0503A472D A3AAADEE2A7EC2710E7E910C9B3866BEF6001C47235AF38A70553649D910DC9195389373 A87A62E97BD65CCA58128204FAE813DEE989DC1E72D36AA9675A25ECF1B8FB2CA45DF4B0 23887604842BD3626CC1DB5722382315912FBC9C383275F430A76AC081366D100F40E42B 7A4D3A3CDEC8C47E8C56C696A756EF3EC9B47CB9570EABDDD906EECC8F754C92B174562F 118BE4FF9E0E84E15BBE5323267155546449138A613D2767AD28F188442F1FD558F1D09D 2C296FEB0FD94EDFD259F9C0E11F255FA4C39DA709FF2AC75FC4259BAD43DD8B27127F04 049683A5A26A38E27654DDFD99247AC366003DF016EFCF2D96C6B2F9858F21BCA07EB0ED 516C2BC8EE39B0C568FB5FD8886B21632AC942E7E02C7BB24E007A08E8F628D74EE676D6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Serif-Bold.pfa0100664000212600000240000062307110330505373015501 0ustar mikeuser%!PS-AdobeFont-1.0: Serif-Bold 1.15 %%DocumentSuppliedResources: font Serif-Bold %%Title: Serif-Bold %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Serif-Bold known{/Serif-Bold findfont dup/UniqueID known{dup /UniqueID get 4085518 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Serif-Bold def /FontBBox {-381 -1034 2787 2164 }readonly def /UniqueID 4085518 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Serif Bold) readonly def /FamilyName (Serif) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -217 def /UnderlineThickness 240 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 397D96250598C730D75B9220462B05651094D10B720EF6D4A01FD63B007EB73ED6B9AA21 DFDF9924FC3A7F862C52075BD4BE02A0C51A90BD4B1FE91736C0D8D4DBC8EC54899BE94B 411DD78F7AF46F9F195AB9E6C1DD60DFBE62CC29FFA00160AA03C6594BBEF0CC2C32F63F 4105072177682FE5600D0DD00C60F92E7D82845DE3E8CDDAF88C7481431C4DE28FF25352 274BBC4251F8E5A9C70BD0A59B1D9FE61E7C0EF57DC718BFA048323350F728FAAB37D3F7 5C7E5CE11A8B551421AE00C371B9466477274BB7F37770E7E296892C4DF198FF71278698 0303335103F98052B338C10CFFC117258C9D54C202CC22796EE1E1A520D93AD044878DE6 F5ECEDD04EF63E3C4075C805D037232F42BD11B8D55DBD98221E9E4E54B750D243FFD4FE 9C52CC82A268FFB7AE592E957F92C8245CA5F0AFDE1C8D159F9AE4B68B178E3815D14AD1 1E5F855DEA0D94573E6C273142F6DC97EBC03B817110DBF4DCAD104D7838E219367C7871 BE25A41018D7F5EF38A2A43118F2A623596AA436B5F5632A9F0ED1A5702028747E527856 F8FE9F72EFAF519EFAB7540AEB06E5283B44B29DF0BDF5A09922C43F66B534DBC23A9F7F BD940CE840FD497C1BA91E35C6A9CC01C24973349A993A86BFD5240854FC8B3760B10401 83F9FCBEC29A1E449DB2DACEE8D0A9C8E1969448E1E37A46003BAE10AF3CBDD9D9268BA5 C6675DD71FAEF1F0DB9016112644E06F3B217002DD8EF79B120A4A82ECCC548B4DAAB739 49431A7DA5E0C77B13BB11F4A8875E372E83E1FCC04BC52723ED74341E85B910ABD12BA1 CA6E8B4FEB7F79D0E5C82714A1D1207C6DC8BCE16A9044FFE227A18FB223DD0C1D247521 F3C9D398B9A27B89DBCF70BB8A1CB15375D9111B8AD9B7EB13142F2B96A525EE3ACEB4CF 2502B0CC02D7F37FAFA6C47B105199F621A02CD0572C76C510CDF9289C7EAAEEDDCC89D6 E195751A363F5F54661ED331A568BAEE7036365CDBCC76751A578B1159AE5D74A954E3CC 3990B56205783A442321D7961D00071C856B8B0E6A39DAE9EDA11F3E2B2D3A90B7B766F6 5A967AB69528FBD945B468A739FB264350270EC52B01345AF0E68BD792A09F5D63FCB665 194B3D092047371D9166BEB7009B1D9392049B7C3A65155351594CAC80A5B242BE788889 11A060F6B4D5DE84052253323523D06AEBB9BE0798DCE0CE652D38B2D020EC371F54AE77 2F5E13CF23BDC39E6C460BD0829B9E15C94E184803D47A5485CEEF4463EEDE3CEB3D4E25 9594FE6A8777D9DA1E1E5D36EE9FEA5BE00E62E6C8E49B644A809D0BB7689F13D072DCDB DB2EFE989E82617243108628105A97C6AFD1C929298D0452383EE0A48C26F06E9EF2EC85 152C70059D1E626632ED939E0E204DED6701B2EAC2328C18F4A0041362E9C76C85AED5D2 7C0409445F426B3F3E4E21808E8E334AF77C17DEF17D359F7CA79FD95EB0D04C4722D9AA C9AC493CBC54053BA1A9357A98ADC6B7B8F08799C9EEDBD40CD36C27D16C46BC8A2B056F AE9C997815D048523F8ECF06BC05AD623FC0E478BF3AE3E4A759FCC3E01FC999DB6AC246 384677A32994CFBB772B6193831D48F8958DC85B87E8FA6208A2DDE90A2E3B22EFD09388 7F0C6F555A040141402956B2AB2789172B95020614697A33C3DD36213FB76EEB93844F39 BC9D5840A24BB31FC6F12E2FA7F0F0BC397F24EE55C1208DC3B617C9AB94FA6CD33F1154 56305010F773939D591EE50136026D1AAC29DFDE189B70B26E583F26A57D52D6F0801250 566F26CAF1674C274AB79D74A40BDDCD381B5E20C64D48531A7E3CB478A7C760BAF73E8B CD2C487CACA5C2AEC97924E84154965F49D012A4BD312E2108F02D882921108B41E4984B 34567287E1F917D469F45D32A0C5F9A86E670BFB85B2B2A77358FFD58CBDAE1AE25135CE 199532F58D8B6B0E58CFB9FC72054A911B31E37F7909F220F26E94C594D488378E922C89 585CCEADE7910643BEC900FB98C53184C922FC684BD74324AC2FFDD60F18279C886EE455 96CC1CDCCD24292F94851D44272EF1BB1BD73F3C4E2353574BFB94C297E76BFB0AE1777E 6D3B5126700E604D17A756F79DA4471F17BD671B8EBD54A648FC4F5A6EEAB780F841A6A6 7ED4B4F07D290302E59A02BE1DF8942D0FA86D954E96ECFB692FA04BF8AB2476D0970FC8 0263CC4F6511F130D24AA10B99FBA0FED6BC2E7479C1FD596A20DAE42B3E719F34A8705D E6B99549F26438E6D6678EB36DCBA4B3875E501031175718494FAAC0FBA4E76AC0A6DBB3 46F2DEC47C2AA7A11BD1FE73B29D830955865CE15D189BCC776AB0641DDF27D12F02B3EB 37149C79D158125A71D8F6150838CB1F5D9F6895D068D244E687A899DCF052A044D194C9 4742A66A85C2524615AFA6C3C0D23E01A7C9EB15CBB871D713F0302704D9398690E38A8A 8C07022C30FD7553F7E32D1292E970091F6AC935DBAEE5057E8787ED3C1A76198B0B5E23 F23110C1E93A8D6D28CB721E856F0528F64A374575841E2DA3BAC6AAFF407D2C6E95DB55 AF51E20CCF04A224319B32154DFA29F5738E7859B8214473B7BB844020CABAA2DAE924EA B929D8FA8696796F03AA0826634202EBDDC50C329D920712BA3FD0069FE5B58CBE411BC1 8E45067B682EDACDDE13FD10E0A0DD564189C7D13CC5912306C07961D171B68E7BAF07C7 38BB67517570545EE8EFF4B34034785442AAC708C532EAC77C26F25C7BCD7C640F4B5676 B2CD6B2A3DD278E9D90D4719BE3F808E3DDDFDF58E25FC886C31436E7BCC0F84A42115D2 913E94853CD379CEF5FA9B3C7C58727EB3944D3486C2206DDBE5BBF143F5B54DB043FE07 B6C9F1BBA8D0DB525B725EB088B8849168FB5CA16F991B0D53619A93394C987444ED3E4E 85A0E0570A7FA90845050E25307A64F11F1EF5D7449C55546EC284E66762354EEE44FA73 D73AB98AA6A9049CC4079595804E77C527626FD0FF0C37C2F8225C463963C2DC9E11F700 9218E0BB50FF1AACC7E8687E671D9279CBF34065832869FBBD31C0527854A0C7B6DC812D 6949231AC92AEDF78A2F5B13844CADE1205859A8E6D67A12F893C8BF04B025AF58E5C48F 2E74E2864B1DE9D8277E2006B938237BC41B0C1A961ABDF71643E7BB96517A797B908EC4 6DB57F9B81C373E125376603137D2B7D1988B7F390D51864BBA9D12A95AD6FF5CF7332AE 3F691680954B65AE00B538972F881F852CBAFC18DB7B8DF81B9DBFFA79F474F76C72CB1E 6A5ABD67961AF26B8B7DC917E119510A480A1653E362F3B5954D2E6CC9F880A504FF6570 0DDF01A04EACE46FD4C9129068DFF781FC5B10B8B05A118562606F010F12E81A05E80723 1DB81D17B49B88B6CB846678F038938628923F53D5BBD0509800C1A6A754BC9EA0F38A62 31B0F370FCBB50854998A3A6C6BB2FB3FFE0FB22A1A7CBB3ED35B4AC22432A7BE81EB700 15EB79A0E5B6E55029E4A2EC547D8FDD30FC8DAFF8A9D5BC17634CA4A40D4A808C1BCF32 E8248458DEBB3C1D25A45CB08E81F216937E4CA5FA0D513A50CFBF78AFB2569209115D23 ADF72C0B453BD9D0577BA92A4802992B2CE6DC726E9F7AFDB7779D87BC258A3A12330973 4CB4A826E2F8C2ED9001ADC2773B07360924DDA8D6C2F2705A72768BF0655DBAAA5CD219 F13DB111CA18056D9A0B793C02CE83490CEB2DD69B93B8426140B1E8808A6D6C9FCC8182 E4077EE42336734479E8C74C4BC6C109F867DE62FF2BEE1E09A2859D476B7674CBE951D4 7664648443A753EE014301913608D58EC656D2158CBCD2130CFC9684391DDB38DEEFAE6A 5B3D74EEAC4880D9056C91CE2AA8146D7562C1CF9AC9062A3078C55BEF60EF93CEF63AC3 96B18881EDBD4E872054EBF6AC161E4E755311B3561E4C464AFD25B2AC6B6E6BC40D349A AF034B4BD61954E2376ADCFCAB1F1105F24D569872840241D666C8C7C2F7B901151A2E83 8F2377ACFDF9846A478226FA0B792EF25E3D77D5963D96E987B96663903F9958F35B8DA6 7C5A5A36D715655BC45B283ED4D79D593E05A52C3C0B731DF73BE60237D94BA763D71C02 65E252ACC11AE7BC5BC918C4589DB6CD46B9E0BEEA74D8B518F95D3C01773EA5A0BDB8ED 33E4FEF2CAB92085E09E4EAF7A95CC3C40A46F2AC704432BA103A295CBCA8E7F6BB710AF 2BA5FCE8C568344DA894C0081E5E9B7D47147B6F340CFE219330C36AF88AD131A0DE8FD0 FBC70C1BA2F38957DD7251DA9E6C1CF744A5883482A4C16321A774CE0AA1AA767A78E0E5 DF10A491AF0F10D0741798431E78F956196CE18E89198B079D87B753F95E9DAD5B6DB2F9 DF990935856881FC0CC4BF24C861B72C4AEBA54F44934B99B950AA6424FE97DD9556E197 51260210149D275028377B700139AE17E9DF28A55308BE0F02F8CD1F003215296610D63E C737A61459EA50260DBEB6204C230E077F5FB04E4367B8593BC655E3104F5E84646BB490 870F14B42D7DB4044F57B27FF9B8F2A1C3F08CC4EC6694FB11586D0B95B492E084C5EB9C 73E4AA9932448C1553EC54320B412FA5598EC1154E36CCDE2492108155CFC608BEFAFA8D DDF6B5257D4554AFDEF9882F98237B1FE45704B4850FF606EC0EE496CD901B7CB5A83E54 AF561E5BFC22FE1CC84B7AEE888982CF27C39C97A329FB12DBCE6CF13215802553BF2B11 17A1774B7ECAA39E674A7A5F6F373CC6C75CE5CB4CEB50D221FD3832B1F46133B3FFB973 AA7201D5622F2FE2D95BED2873E1797590FCB95FC2A37708220F56510FDE3B14B5FDB1FC 82B2F43DE8FF3087269F333D8E905059CAF939DCE6141D453D38C8F008608CA04B879971 8B6A1D104DEDB801EB7D46F50C6EA73E9093068EDC92D50797C24A42002C98DA3F64F105 E4D8025AB51219F5FE630379B9770DDA60204DADEF70D36F9AED64A5F0F04EA233A0CC27 9595238201CE37DFDEB4A6BD78F9E8B2ECDCD30FBFF0F9C4F658CE5FB1A7501D062001B9 D13434E9D3BACC3D63F97161BB6D94EF01C0294F03A40839F40C301F1F2147885BD9F6BB 1932F2C429B63214098E34055D85699E439B8627DEF8F5A1EC1D70B936B3AD8E92D6FABD 43941A66A2EDF82CE53284E53ABB64F700F1684F6E92D9D55532FF906FF194E6473AA127 7ACE7DB1C3C860B086FB3F767CDAE9BC6C9785E92F48057D62305E6B6D1BB965EF99B9E9 E8324123166EB0AF3327B4EACBB9F1126EC70E461913C05BC160B7C053009BD3232B02F3 DF0F7C41D5EAB1A112D4C40D83C0C17897F648534C8B215BFC4ABE6C861772B19285C366 9F261E713AEEBD4415DC783AA25769494EBAD6A402FC913F290C7501892932050D5F3555 8D803A2E44AEBBCE3E192396063EDEB8E7447F6B534C0BE2D879AFB2A3C6EC167E3FE5FE 575287B6EB52831D4B702E0E72D891ADFCBDD9A1F5005352ED41B2B07317C982EA88915C B45F1FE668C427DC7731BF86B005FFD56DC9A570626D940197D293D091E90803EDEA9A52 49D347AEAABD5C712D6BB40DC6D3B07341AF9A72B28BC7319E117559D64C5E88FEB0D83F 84DF3A739A4B78DC9E68624FD9B9F1EC917B8D8450E5AAD2092646C1FB3B7C151F46AA29 4429AF265719A754592AF22A600F8E76E3B909FBA19A5559D0C4DDE0E9EADEF374439AA5 37029FA73791D6C1BEE06E5204CFF2A5C69AC6FBA25AB60BA9AF0110491EADDEEFE14E66 DCA0067E2B9833D99EE53D6C1D24B0546A6F0D16B478583216356EBD3EA9155A30AADED4 8AF71EF31BC8822AEB3DEA3DA08B9E234724F44E89A667E5B15BB931D18011B410393B98 03378522D1BEAC21134ACC482A539EA6DA8E02FF61A5553D534FA01830B4E49648C16985 B96714010997211B77D446CDB456CE46C6D154A0FB580093E6DBD4E4B7B638F967B4FE6A 2D0E8E8D82BC34A92AB1B2D32B794F29D80F7B92060A5B10BC96DC7B1BD85FB2CB78F949 11444FFF315B9301A1530000C6ACE04AD0D1F50C9CE2B316E7A26DE0C838257003319037 66093F2F1E0078A32B0235EB66CB12787A36B32F2974908864D7C46F29AA9270EAA3EE37 2FCB178803F2FAE862153480B0F6DD9808F448DDDC71546648743095746B78F04DDBB7A6 EAEF20F2633D59E8267E360343F3CE93DC7F33722122BB710B3E879EF15A97BE29EDE5DD 38A4C48D4E7ACB51D5EE1CAC4C6A8A187F59CABDAA767FD53573161EF5838A6E379EBD0A 92599DB19FE8B78353B8716636AD458276AFE8522315BC2A6BA94525D6B0B632ABCFCF6B 3D15F78DCE408DD4691AA2478A3FAA03372CA3D4E9EDE9820D15E8DFF2A9C52FA122BCB4 75FEFB00107D631BFCF23A8BC2DD867BFBDB2BBA3C02239206FC630B9BF7E7D5D1E15992 A4E1ABA8C4D2D516B7B7BDC76D60AA0D969A65516E23C2E325918E5680BC68818855BB7B F5E123F2B4FE14226FB4D1DE24B15DB61E146F8CDF065ACEA21BE43F3CE7A98A71F1F833 5E38383C32A146CF801405E59BEDD91DB793A232555EF0F4971B446B168DFDC2EA2F53A0 E9879514907D116C14256C5BF58F6631CC2F3DB6DBB060B7200EB92557051D5640934C94 20789C4069D632BC4711215743B6EC5E768A8ABE092382258217756D1AC0CBEFF0E53E3F 149A2998FC65E6FC1A8AC2EF815C47BFE7B718D5AE4283E8BEFB2E949DA74EADD5064D1F 0A4803216E986581C2178DDEA4554F328B9A65AA854BA63CCD92A680AE35762C314CBD03 7E873B211C5053D910789B67B52D37450A0333E0CA5280CD3C0AA295456783A2F583F100 5DE1B4F2E0259ABBD6B4B0BB62C6DD5E3355EB8288CCE47B701756AAF1399450020267C3 566728E99B36544C7098172A669BBFC268A7106094BBB72E5F4A732D4BD33CFF019AAF11 0EE0B494314CED98356F4CD6BF32994961F380062B3A6D82454DCDDE727D8F99E18A3A5F 9E3BB52C0CBDF17070FC9955E01AC938C84B1813B355DFA24FF596B1D74FEC469B6097B6 6485263D643BB81EE70911DD46AE4695ADF8BF91A5415E60FE005E47CB7C51533AD744D7 726BB419BFC98075C0F915972E680EA1D4F86999E45A832302309786150E35A6062110AD 97C5B8201C8E5F8C42EF8A15C5F4264ED6A0CE211A6D080875A230E252AC9579D9799607 1A029249398331298B9C0814460CC3AB2E6B00E745A68DA5E03F6770B2548F1137A7C9B0 B264BAA860871BA61F94254729DEF693B3EE025799533E4D0343A0CBC189FCDB91FFA5DE C47C2BF2A95CE6C6409096E8FEBA7A17CEF235DF1A8A4A4CDBF4FF964F21F54E85A0057F 431F9AE853D7E035B1A35E63D54588DF2D8E3F979D3D88E628F8BFE8AB752BA1E5ED3F79 CC811F5CE7856BF9D19299F503210BBC276A526DBEBD4B1558C9A232EEED1E8796FD60D8 7E1FE4AFA87D0F8CAE7290A103649E90C2A3BD843510DB947AB0BE7453344CF8E27C7EE7 65258087704926A581D70B80D9B39C7FB5A890D564049B042AE5B9803455EFA5608872AC 8D0B27A908B0757DF89D48594ECDE706A5365CB27FA2AE64E154912FB3A52B096E48D851 D037DD89D4997187EC84EC4C9C0A0AD3029595F76DFC296E6D6523457AE4F80E018A7CBF 8835B020787E851E834E556EB950BC689B2A7AA82072FCD9DF4F8956462ABA7317ADAE03 38FEC3E4143C205695AD8928F5ADA0BCAF080B56A0A851BBFE6B65EC8696B79BF87AE6B1 8333034815F3B299B17E500AB6B5A12A719B64401726A29C9E514DACA60639F9DB8709B6 01B9789C351C46B398B33E99F2DB044DBD4B924753D086834F549D3131182AB2C7874969 76FD3EE462381EF902E697A2A69C62BFE0D62DAD094A8AA875DBA23D00B1BD0C6A856014 8549683AEA357446928EAF6862131F0C172D0B4FF494C2668BB2268216A45C23F6E4F13F 278C0BBE80093D74FC73C14E00EB29A27DED4BF947C7D00D9D16349023AA574F3EFF17D3 17785202613CBD6BC7240A56D6C23B31D511E288251F2EA73D7A16A63CC1C264E5032DEC 0A4E0C9A6D06BD9A6755A6B56BEB1A9233F5218E8C1145DF77A5B90A639CDF7E7655C148 DEC4C4ED89E0FF00198F60D6AA8D2F06998003866A6E4C83D0AD28B2721D86827B2D4EBE EFCCE83737C53E0F4C4F035BA7AA253D649B0012A16727D8256CFF26BCF1A4EE18610C12 4334276BDBED975E00350F403D1DCC59E54BCE16EF468A20C255DAF122DDC3899BF001DD BEA41E2F97FF46889477CE89F619F34CA7C4A090C3A95C26393F958386D885199A3247AE 35EAEF87ABAF867F360C4AA04976E9E45D34C63D1D87AAF57FB4A3F52D5DE86D451CAADA 3C0B17A0178B4346E6CCE0E7B3E5370223C98D80CB40CEFB91BE463A18993CC97721F321 D74ED8C07ECA788783965DF29CFD89FC6F798CDF827126C40EFDC566623E0B4BC950E9A4 F00A0C1823A5586A625998F4B24ED446DBD4861D1AC63CDE9EBD8DF9E2F3CECD050F7BC2 85BF9F6D7E211556896EEEF2AB29276655E37D970D4D5829879E0B21C7CACB9C6C765578 36DB68EC46E61BA1EF56BF12394F7EEB8B38136B64245630E5543A3593144754DB1B1524 F5AB0989EB12FE4CFB3E046E6668A687BE95E2D1C000446891683DA997FAB85C87B47119 73C037F8951ACD80837CB5E67C42F7C5E57C2B1DB4FB103E7C429D3364ABDF1E6B2E9004 EFAC784DE4B5CA81DCBE0B43E408BB9D0592E36F4F0EA8F2014F7E913D0E906088CE34FA 48BE6F4E90D60A4553BFCAA09A61A99BBC7B43936C6909FE12C6D0FD25008EB45552FCB1 57F1CA401EB3FE1BAE5AACA96714C024118829BEDBFEBCF9E3E2FAFE465266282164AD9A E62DA732BCE543286EB90E7B5777BD4EC79D62501DF34C66C1657B595B9853B1FB3C6CA9 9364D44DA2EC19BD198DB9808ABF46C3F982F58E1EF2A7E3F4B1FF280B8D911677C11EED C99D73132FF6406CACB91D3BE08AAFE98B38494CACC2249D892B1E4369D1A734D08CF6D9 0B8E29239B76A674F539B70E1AB6EB83A3DE1EAAA5C87C3121E7E16269BF6EED09D97042 ACEB695A504955CD2778F75AF9AF10D27A8B3BBCF5358D7532CD340EB2D841ACE62455BE 02EBEB9D7EE3310FFB40791658113B702B2C13F341AA0134ADF923F763345B815D8DB09C 076837A3A5A68B59A79CB77D1F1B54DAF160A440F40E3D07832155EC04C96B754317DE6D 19FFFA269C8553905A0D843771D38D8C0C93FA43036C900240E975F8E50D6780D5ECB58D A76E1FF482153EAF5191002C53B0A4DF672F96F43BFA28E8C3D43D5F74543E53F8BE9D47 6148F4E99B31BF35180FE4668979840931C5A57BF00CA9A10894FD7A2BE42B56ECC2CB37 F92A142A1E9171A61315E9068C032EA11A3F888EB5DA76F4AC1AEC3B9BA413F41C44F98C F2294DDBA3CD46E8CC9818ECCB29C0A9BB1326A8303910A29D1C6BA63B53543A9E7AD667 1D9CBC82CB13435F33E44BCDB8F786264A022665982F420D8B6725425466DE3567FB98B1 F91A75242C53F8E7DE4DAE00D18C92B2392D65B615D9AB94E553A029A704D9A4CD7C8BDE C91475D015BED03EFF539E38518DDA613837F4BB31F800755C99639EC99B746132BB1876 28B816728204831A4790D7877935C12B1A494E5545FF417F53E8F19D94606E5EAE6E7D86 2835480A44486FDD67E677401B2187A1CA1C1E47ABFB04C0D7ECE58BD2503AF2BAC64AC5 A5B46BB998C7ABEBA90AE27B5786E5DEB2A7AD8500D56291A8AC118812C9BB0C2915B0D6 D529C877E9AFB2A7F515FB07387F4AACC7827E0014D6D14FFC51003996AC23145E26A317 F3DA0239E9FA93C2A147C08A2230CA7CE4B5BAC2FA30A57843B82549FD2EDC04C625A381 81AABC3A27087F8B18C9FD880EF7017408A5F9CC5040E407603C6505CA697118BBABD1FB 43289C96E8F7BEE9310EA55EA66FB771552A2D5D2F7E2C4261017BDC3468093A8D36451E 02B43DA8BE60DC98C7C68D8FD4A8375EB238B69ED791C9D1F0375DDA5241AFE3A73EE7A3 4FEFA562A52FF97DEEC3A0967A41257D5481B6750CA9A8B6A59EFF1CE54B52436F0516BA C8B37D1B4D4845AF230E35355F63B49F7C38BB91A7889869209CB8D4B4D9FE03DFF7AFB4 BB908206C98BC4CCCA101E55FEC84A19A3753B0356804E76C65C5B282E30AEAEE09751DD 259CD893F6B738B72F5C97BDE83096D97C88ED92402A217C2035519C001D6072A1596ACB C0504F8B03A6B369BC47630D4EA0FD4EEF4914A92B9FBE0169D70444A234149ECD5BB283 48B804AB0D041A0C1E30C36DEB222FE1BC26364C54EC6DF9150C5B923CE3217907B47763 CD20AEF8AD58F1D2886A2BA64B94A7CB9039C2522D8A2F15D432C4C322BB3E6F97FF6F9C BFB44911371EAA957FEAFE6FCC212EFBFBEFB2E023B2CF08162D54EE70C1187F89DBE717 D715297373F3121DD93B11CE6DF311B201FB0B09DA8983C78DAA8170A6DA73957D250B61 317336337ABD7CFACAFC8172FDA771B8C440FBD0D8645FE7389E8B034C67B5788D78B801 02369BDFE51325914DAA249D474699E5F36991497C298181254D80F629D9944C0C343490 3813E4DCB64BB074C6094FF04D820B9F943106669C1592097797F0B7D9AAE5C5E01DC8FF 532AD00D97808ECDE7EF83B3E67B068D28E0D7E83B387240273948F3D9A0FB038F4653C6 D0078C1417D8CE749C02F998D1C6974A18AE5C3E4FAD459D4952D0128C9FB38AAAE524C8 A1091D4F2AD2102A0EEAA1A64515B584ED35EF48B0D457BCB81432BDA9B1F9E3443FAF35 941EADB16964EBF3EACAA818D9038C6E41B54DFC2134D852D3CAD816603820CD00876670 449948FB01DFB9F6ABBC4045A8C4BD86610610434E0508797C82A03E0F004F1B9284367B 49478A0E8DD4A6B2AEB2A7A02BDC90077CEEEE0BA105A40B72BE9E563712C375D16C33DC 7214DEEA793D3C58743991CB53DF19BFAF169327284313AAF1FDD55FF3BE5737BCB9A47C A32455CC5882FEA6E30396631F4E02449414D956BFD3B68F080359BE8153ED797E7569F7 1563CD9B7AEA2F8DB5E33F769B0B0F143C1EEA5ECB57D2DFE342A0F84AEC12661DECD009 1F0DC83595F4D7672CAD007AF73379CB66996BF0FE5A9FEA318A54F3CA216A561379B648 ECC43E078D49ACD067F4A91D18EF3FAA5A3B4643E1DF06DD32014C5E4B6C92BBDB8E8ADD CBB875FE5AD3AE1F815B987891D2BF9FC89740B5C0AFFAD4370EE7ABAB1E0553FB340345 1AC302AEDF3897D980F7DD0488F98B01764BF4F0FA7E8DDAA7E09B097EC942CC317216F3 AA81B9E8B5AA935F46AAB2325FA92AB28C960B3F7873A164EB57C655EDAFB1DADFC697AC B314B22D987201519923FAFF569D55BAD978DFD88D771F5420D549596B783747FD41007B 21153FE7A8383F5841ECC0B18C48527F765A667E98CCB627D2F072910CD0AA0671EE2025 430C84068923C1A27D6479083A4E8609051B51E19B697B871CA86DEF9FDB304680AB831C 03E5280ACDD48546FED269650E563BD0C5A53FF068AFA838A14A120DF2205642365D2824 0CF95F531E1CCEFAF93B7CF097FE6FC6EA97712E8EA0BF223325A2EFF73B59DF1A876BC3 63C8650D0738FCDA4F4DC49AC3283680E78A56A058F422F34C23AA38985AD1FDF0BCBC39 2BA9DCA67A58A96A90CFC05E717CAE65509FB1DF17492D3D9D379B04757E1915C9307413 25D12072F7CCC5C5C28E782FE9E2804DC16ED9796762E02C0E5C0024393A1B352AD6BC54 47AE62118FF56BA2C275F5A8271A8E78688A84D4A177200EAB93A347ED038DB5EBD36EC7 0BEFEEAAAD98E9FB62CCE55845BBA3CAACD4B5D6A58CFA80C75EA0C8C41891A26ADB51C5 0FED441B25BD2AA3DFD24DE05512E6F56B199A067229533023F9A2F6773B0D22B73CD7CE 722A42A7FCDA69E68F2A60A8438D131B46247085A2AB1D0B8BEA3D079BB9086E3E4B24E2 FA0D2C2B5594415B2EFA98657F299A0140B3BE0C5DABF619AE54839FDCDAAD64B7E8A97B F62D1B896472658EB1BB0D3DC1D1835574057FFFF44826C25FA0BF3101DB51DCC0530474 03124BE581FC3C226017A53EC4760449D4477E7D2DCC08448A0D84EA997D55F520463F9B 2AB7D175D54AAE19505169C1005BFFD9899B1B192D3A75C9174EE16ACEC1F6784E871DB9 B47E047E618D515D497EEFAF01CD0B9328BB95824B328612878FD5C2F21180E576E6B5D9 D5E580238532E3EC0E6250F493F84E8C22C60CB28823DC4F4B52BF89E67935D181086D1A 2EEB63CAD9A64324E19FABCDAC22109C39CF1706A33C4D15887E9F9BCC56483BC3060E5F 3E61EB76A1E2390A2A7B9B213BCD203BD33C74B36B5F042C041E04DCD78B67ACB9C1F781 0AD18AD6A92A17B93F606AEC74060EA49FBC06A8246CA7110DF3A7067FA3BF796C2E5C66 1323268C6A88334F7DE8C7793FA15D9F4F25DFCD75E639C65E29FD8FC0E216FB25D10C11 0368E28D8ED5EFB0EFAFB038740FC9F6A23D9C0EE9ED4F01F6E4D925BA93416B6758A648 F622DDFA51827CC426CF37B7895B0BD18D29291B45766A267311FA1058E9C6FE5FCA7EBA CFEACE5DCC6AD21F8BA4273BED8C6E6EA14CE6B399E1C7D8FA909A64FA730E064C4097EC AC68B593C2885B9B4FA46644217AE54FB18C7E5FFD39418F8EA8590C65922E86F99352A0 3A042D203FD9C052DFAFE61A030D11F1A374351ACB855BE1814B894202A14682CB06C134 869E7CAAF21B49D75028498005C8BD017B134DD0AC4E8A554CB9194EB0508D605ECFC740 631490106ACBE6BE576AE3EB9F3B3A7C0BA6A59CD15856604611809BBFA2C4A54355D8D0 096D340D7E9D3E4701BB906DBF825E6CC2CEDA0ED8F3891926EE038879A64B8D654139CE C8A9AE9B8C6596A5BAACD685097D4C87ABE153903796B00C9C4439B49F593F6D0E45164F 8F158CFCA33C04ACFDA4A60F82BD3948F56874C17233FBF9AFBE8164254584D4ADAF1B40 3EA7C54AC96BA8EB51BD094A8A527664856624F0A84EDB2E7F851F0A78EA7CD530393464 57A9D5F5EB5FD112B59734EA29FE5EF21CE7C5C3D0B35CC1E0BFEFBBB83ABF5572083A99 E6BDE1FE63B2E19DC34F8B80E5501D8F3363C8EB162584426DC433FE55C124D2559203B3 100F298CA8241F7BA81F2C9142997C7939BA5D5F87F6EE10779BEB4D0F1D53181EFD79EC 6EE33EE241BFF0346792123833EF3C911E73AFFD85F770B2401FFFAA4F01C399278F9F43 5737D546A3B123B65179CF2D889A589DFAA0CD093E375225D37F1232CC99C35E1E723A4C 48B8FAB5D9FC068A3CF20EA55CC5B68392E7993CE925A30E4CB79B8C54B98ADFBF4DA2B7 32DB23034640538CDC0C493FBB2A3B74CE7FCE8667202FE7993DBB451913167BC2ED6029 4468EDBF255D72BE2C21F4C319CE41F5FE91128AF07AC5242D03E30CAB7EE76E15A42925 E77AF1BDA7EC339A2893AF744E790CB65A3FED587B80CF79372D3DA5B3E7626AA92B783D B35101F3C098B85F1C1085E3DCE2F90C5019D13BCF140AF8F600013329771B5B43142D26 2A5C28EACC47756A944BF60B61C71F1B1CCED5A4D2401A80CE21EE5081DA042BB57DF3FC FFDE23A7622FAFEAD1F88E91F11B2BEB7189BB8BB190F6D251DB379D018D45AE01CB003E E76D32255DA445C06B83318423319A870F5C3A188D41F7DFE26834B96D9B8883ACCFA223 E5E0982022BACAA7B127B11BCD7E121FEA4A6A49806B9B3832A35BB32C9DAED3261E758F D64DEDD8B7CA5EDE539A9976D52008074D6FBCC56FAEBBE9E67D1332AF89E212E32A8E92 EF5FB5B8929B28ECFD0E417BCDE241F0C253873FFB1AC1AAA33FCF59AB672CE66D782780 07744F5725BDFA7E6457D40EC53CD9C2D3EDD44844430277B6220E8508F5A1FCBB798134 16E4A0E406DE5FEFE5501C47D34A9DA232DBF58788F04FD4A1B4DF43EB184AAEB87ADCB6 40EBC910AFE1AA2E3566010E942873F37D994635ED43B01C886A5D76C824DCB3DEAAB2F7 6A71BDEBAB71622D0A07E882FF40568449D049F28B8ADA30564FE7CA6C9AECDF09B0ADA2 D569A9A4F6EF266F70E7760211A3178F8D68FE4800B2BF79D0DFC4A1540B73A956B8C46D FB3C20567011E823723F7776DA0289364325A9E293CE56695B496C8A5DA4DCC8006834B3 22DB0CF6BAC10637913AD2EB4987D97191715A959B86A4863087B37D1D81C67F2B6731A1 98373155F41F28B5B43F35C958337B016C9FD1100401B2F895BBD72533E843DAA811ABFA 496C5116F26E127A33114DCBF61C39D6007D9EB37636C48F2ADB6565B6762A06300580E2 ACA02B1F4DE65AFC86F402F79AAA867FA54E58BE3AE87A0ACEE145226590BDDBDADFB66E B727253F9B5E471E3E4C4C0551683712D4A25196A7113E9DA6272F019DCED2CBE248A6FE 664DD2D10CC3421FD217BAF29C21A39EA7957B5E370103D394F2556987C249E434A5EBFF F94063D272BFD9B4B08DBEF5C95F612A0669882EFEDDE826038F0AA90E140A16558FE493 0A718A9F2AFB1E43A1B375EE25AB715F183F366AF5E2FA6C672AB594515E77BA1F9F521F F6016684298E5476086D538742370C289567608E1D8333FC2B3FC6910854EAB9F4DE8F32 7BA5532EE93A1B55B83514062057A8B5F11AD0A5B34DCF6994EAFAF0A7E8B33634774709 8EA4851CB0E3D5FB47EB8AD84EEB06FDA755D60255776305892A6E3B3F75968621474FCB 2136E41061424CD94305C480DAC8FCCF7BBB4834736FE3BD8BA2A3ADBC5F6B461DDDA3BA 4170784BC7CF17E4D711D30D9DFD865FF57A97FD212ED465ADD4689A2557CA728243ADE4 64A05319C51F8CCB628F93B6E58B3E26F4F5821DF74134094563790CC22C491F3A800C86 6A975C51F5F2157E538D0E575FD9FDF6451F67F7ED3642642535BAE421AE34F812D870ED 25CEE324888E649C08805F8916079E3860878B4B689D266F81B6C4EF629590E19BE13CF9 2CA069112BA2E076FC63DDDA42C28D029BD974046C7F5EB68A7026B48A292161ABA39247 AB670B0692806F698B80CADE9EA58CC3FCFF7C175A50E2346265D417D2990712CBD2A201 B251834E7931394BF43707CC5B5FF266B75BDA8E1D2B97BFC1FC58BFC07E41E6948771BD DAE723AF397E9CDBB94470736B4F61F7C25F7C9EC4EFA51198BC1C9EDD39E8B15616DA91 8DEAB0D10DE3F8C3B0D9410D2ECA6B2FCFEBFC4695A8D130C2920C72F71E738BBD090FC0 116B7F11380EDCD7F9DB8804553EB57B987CBE89F1A96E2BC3CEF927F059B6B926301611 2B9A37DBE096E8F4850E76CA916A9B02BF1FADA004A7CDD76829D6CAA50E92D814FFE8DA 4CB789D5DD4A070105C7DFCACE0B4BC164A08CD3A17C5B7220FA5FDBEE98B1064FD4586A 92FD21D8A2BB8C0D30FCA76E7034C1FB44253B1B0DAAF3C2242287E511EF4B83F912742A 3E25FC3BFA069FADFD288C4EC5B2192B84ABCD9330DEA89946DA8CBC1CDBCA2E00486628 84A91198134B80DE39B413638354DDDCB9B3761AA94B41D4308E13CB3C4C498387C8C3AD AC8E23B6F9C9D672B9CD3169236EEC7E3C7AD01DC50852C8C8391CB62B0663E66896A322 B4BD4C8F00A9080E1FCDC70B4E5DA2F7951058D6DBE67B2EBA05C882974856D3100372E7 29C44CECD2967D4CB6BAEC75C36A3D388803D993D3056A146B6B81D4ABDF3C687C6CB944 EC02F4E065C71FA9D992621BCCCF2C318176952B24F1AE4D390EA75D998D4EE5788B8848 B1B399B1DAF4ABFE5CF05AE6FAF942AFAC1034FC7582583BB170F0F83D76B6B09EF94A42 33214A8F61F54F8F3B522DADD16CB92F2952CBC9D32F1FDECA02154A500FAE8F64A3D4E8 75255429DCDAE678029CC028DB4B493D19DD3A070FB0915A3F8968CB809D9C32FE9C1433 E81B07A92AD544D20280584B5C2970DF34B9F23599D57F5ED3F55364581FFF73BEF389DC CD84A4AF91AF74C29ADC055E6BC26959BD2CDBA5ED4B36710268AFEFAE3A3AA49A56BF9B AE5924E0303C2AD692B7E2D9C03EB3B8EF5E520CFF57C9F964D4C148386F9D80E0B6812A B525E2A718D0D6F42315B6AAF6D0EC69D0B90BE3319D67BBDDFD423C7D869C97424E1114 9F7722F4BD0C8BF508AF8133E1F0C59F800216F649696520EE50A8CA1A61091E70F8ADD8 33734A604DA83B576DA667D8948FE8A0C50A7A326B24C471AD74BB3D307A424468869683 3B7C9DAE13FE8EB15898FE8DA4D7EB19FC7D9D1E57CC372B278C7C24C2947DD6DEAC36F2 295BB20F7F4F659709483B7EA74F44DEF494DD71B24D6811902BA133212C4F50A5065E72 A30A461113794C675BD6465737C2EFCAFE72A390ABA79AFDDB23227CCD9AD5901DDA37E3 82B545AB8FB104A59040734EF924A13A77CD5D1C0238977A537893BE72E2A0951D92B381 70F28153FEF39BABCCB640354A29FA9E962DC65E62AD82C6275C03F52879F6187BB669A5 6D2F25EBCE57CCC2192C8770ED9A3A5461963DA9E4F9B0E72465C433EE52693FD65DC44E 6D3650C6C1E1957358F54040B45D78D84036ED28203ABCE62E607EF15505EF752B0C0E7D 4E49305BE31F31001EB8138D18980B6CF5D16C6952E5E21CC1537B361BBD3E826B9E71D2 82F10CC84B125BCE558DDAC60E37879466293794E9FB392B11227B5019F0C990D0459CDB 18D40D9C7A3B844618307590C249AA56FCB2B70C4DF1F7A259E0754EC3A9E3BCF46CA409 D6089BB3E0F0D716A7E3F3B0BC1A9928B7C72E1ACD51D2239D6C8DD86DB016BC857AAE67 E5D7D718B6D6E5BBB300CB7F15D2F5DEF127E0BC0DB6CD9C88249EBCCAF34F8F1EDC5136 9A1F4669680E1BB64E7587602959C7D96C5BF98EB0EC6AAF95F04DEFFA489C32F1A39EEB 281F268A3EF9E9B33CC5D7B642255AA7485A958B8B29A20FDA342BE687AA3C9F19BF026E C32914004DB45BD2E5AB63D43A320F04C3A9CF4DE3253119B60E6CC59282F06C2DAFFDD9 1275229E38266DD10B906A68C145F937DCB0B8932C7D29912D291894878E1E6FE7C3B486 508981036791D68D4DB4EC84CEEFBBF7A4AB7D7A7351F7760BBE30367EACB114774C4098 FEACDC2186BFB066A588B3FC60BF8978328D2FD2F42E2093A60DE1FAFA9B374E36996C3A 6527D0D2616D145FCB83F0E199D683055E4218F33C23F7F985B109F49F408C7C37235E6D 362FAE81A01FA36FE6631A94151B08679E7E7496CE14E00D0B95A343F7895874B8DEE4AB 574954BB35F3B95544321B60736D09E8ADDC3CAF73A7C3615848220A776E2331CBDD5A0D 1F1B3DD777825E5392B08DE84BFE34DDF486CE3B983EF5DAA5F8C3F8083343287843256A 24E0C05EB393600C26A02D82A6A1BC680D5A43FD1273F62AFCEE1F5B5FF3B7B7D94EF914 ACB614692BED62AD985C462721FE3053D28B523DD8E312BC4154F9757CF331083D349280 8FCAF43F55F5039ECFD8A2499719FDD97001135B7ADA0419355E7F9CD7981CB5627E465D 086C689ED0FD339C99DC12EFFA31F104AEF05B9A2B0582A3AC14B9C0ECF948B0FE34B08F 6BB7FF842F2BC792F7793E4CA637413C1FABCE88586812490D432F612C2CF097F1C532FF 84C9003C88C8D00E3337D2057A8D2701EC65BFD1C56E8F9933CBDECDFA90CB321A8FD361 AE6B6F0F69E89DD057837CF05E71ADB5A9D2C9B9D01E29BA38C7252CE400057349EC95FE 7475161F449E9A55857D3840B4B99A03C48AEC485E98B7E047203F163BE051E9C3604317 AF11251FE273DA377BE026D4B28B932406BA5F91BBDC77F1615C1E2C2B3EFC20CE7B398A 3C8C34FD4F87CED4FCC0DEA1E4FF24FCC782F2CFADECBD48E603D1485601159A97DD2BDC A4CE27D36A47B3D743FBFF3F53A10E970D405B5800061B3FCC2BD272EE29876D85C7CD6D 0508CF97CFCF9D3C8431BC838258D452E731374EB3CC8BA8419127E3F63AF5475F08E245 A3B3A9978758DFA7F562059782511A97983D9636B850219D15CCA0DF25295AAF312DBDD1 64756AC1ABFD6CE0287D6CA66B06DD1E51AC1353F7C1C410D783C040CC31AD0329AE153B 0DA09FCC78C3C89F556D4AB483C03CFCD92BFF49AEC55DD2C057EAB0EC2F5418B787320B 4EDD3DBB219CC45793D072850784DFBBABAF23A76161986DE452FF170CDD3BC0A001EB6C 0F4ADAC7240896C7FAFB8F51B5D9E2176F14BB672B6AFC42A05EB0E150576BA2AB5BCD99 50F61FE252D7B5E8A49DEFF705A8620386DB8DBC2AF28B8CF006D41D25A2D7FB212F4C50 3C7CA2D05701B2626A62E77FA790BE70E196FE5A3FC4619BCD26C873AC1C5A548BCC4712 4A963F68E9B4888F5FA06C02E904755BC48CBF8ED21C70BA52EDE4E29FDFFC9C8A7E3A0C BB331CD8C2FA7526F48E7BE7FB1AF91099C68C2B1BCE184CB399FEDEC0029D463A106BF5 4D3312D96A87C95645ED67DA2128C7281D49AF063D7D136CB518B1ADC67BE4C5F9AAA697 185CC8A85242A60E639521C8353B7EEBC2EA4D2BEF1098E8D36AD52EF26D777CC0E406A5 D45A3450FDD3B1D34E8395999DF4E1C6014280109B8936D1F59DE7E04A88E37DF37BA8FB 58E96B66DA6184B81857F1C4991AB8A8ACF90E6829CC5832A3BAD85BAE0BD7ED547B2DEF 812DF2B0AD907AB94DE7186DFBAFE83B79B7D1495F248D59BF175225011B85B215A4D288 866FDCCC7A56B55281DB1DB78549598AA98292B7A5B74386F15406DC5B7E3064A3508404 463656F91E58E04C3B06BE84A91FDC7FDD9384F3E927F4B7BAB4AEC2A18075E2CF374825 390142BEA3D6D4CE528C4C6C87CCF2BD51B7BE483313C674FE35B70B590FB8832B55941B 6E745167D7A97B17BC53FD3B65B41037B59A07DB58D84D92F0A5A3160110CD427140EA82 BFA8684A8DDD166EC4ACD1C9C4419424098F40335607F1E0A1F42E0D1390484EB1A83BEE 5501DAC04E159DD5E4FE11C2C0375E2E44978523FDB71014F052E527C49A2E7B6E39790B B7B6AD343194ADBB1688455AC3A42BD50C77DDFFF165D3435C88C4E4C77A072E7E3B8DAF E550115C3C9C6E24A3D61BD5CA36F9C5E4828E225A47A4CABE0E221FC278C22D35B1AFA2 FBBD2AB027A667BE797C05FE6BB4BD6DC843B5446A9665C866FEE7EE418F292653308624 8BEB12DFD9DBD37AB50AD97F327E2DF82840CE378A6F326360A9A5672DC0A23003D28BEF E81B50D6A55BCE303D1CA67FE7D8BF79E8FCC1621467AE0C7F63904EA93B62D8F1F75557 D47467EDE13930937B29516FD958A580FEBA14A5B708D6A5C8140FA8C7024ADA5AB913D0 692BFF281045DD0CB8C6B41ACB64F10511B48ED966B7939DFAECCC761B2BEFCAF9B8C669 5E27A2205A185A54F8C17A5827171C31FFF30ABAF07DA6D6BE58F39D8AFDCAB9AE5AA1A2 F96267EF466090DD03BB73C97CD11DADEFDBCFA982D1EC42F237D3D5CB2E1D1F7ED5E430 03EC77AAC37EB356EE2CEC8C9B0C3CCB4555D38A9D2F1A506E0F141923A8ED6C9E83A243 50986B609129E411499B8A365083F41C3434A18564DF32DFBDA8C9A12B1CD6B4C71B3E7A D669024CC41ACC1B9AA385CFFE1F7BD2BA5CF413E946598205C38661524389E7F5046CD3 86952F569B45BEF7F51BE3500A276196CB3FFDECFAA369EE21EC9A13A8AEC075FD99315D CC94E3DA53DB8CBE124D00B4AF820AAA380A05CB88228B2D6BE462E39A2F4634115A6A95 BF3B1C2F8CCC17FE14C5FAC416D0D3022E74DFD13FFC1E832C8031E7913A44E1B7661DFA 64C729681AAB0AAE886B2D76F754D9DD089D64FF73BDB514A5252C43CD63A38A0A819B52 E8E3899018C5D4DA526983A6435DBCF0FF4DF0ECB4DC451C32C70EB0C436FBAC61BD4745 EA918D2769EC05004A3160F86900E2176493DA6567BED34727F717508F7E7918BBC1EEB4 3200DB0D11E8D19E09821BD1223379465287DCB3C579BAAFBCB6E9587DB6FC13631AF069 F4B8E9002DE90F331E0C4628E95FD8B78BCAE49CCE57BB2A17C2C5B19728C1A3D1532DDD 2586F12C1A741FA77300B17F51C74D751FCAC51FDCDF5335B14FFAEA3D5D5C781E25465E 34B0E51D7E5A12AB9B7921774DA2A8F9088B879E222669CE317357193F485D65BF10104D 090B027C1B303DD72F9DEDC3F59C5FE85AFA9872939C6A46E557C501F27D948B963CE19C 21E10770D326D7EC874AAA0EF9C249B4A53515110492EEB8A3DCE19749B334F9AFD354C0 4C700FBB29DF2FB865C80F0EC8E178BCCA0E2286BCB593BA356EF32ADEE0354C97C6506C AE1134FEB17E70D1E22EF97A415815520EDD17FF86A1CC8F0C78DA8E207425242EC4467E 903E013140F23C07A7071150216D42B5BD88A906BEFCCA351A4ECC0BD9308E09537CD172 FDA83BC5FE4FF51EB23959B629180FDBF6833F7A4BC824C32353660CFE75B7ECD3FDEE3C 9BD84A05DD11C34222F3CDEE9BEE052DDB233738F043DBC7EC494D99BDBCB1E5210E5921 2C68225EC342243B70B07A48A2B37794BD1290C8FB0C11F75B9FFCC4F510832AC2BC62B4 4A7771279B763FDFB552592582570B6F13F3BB1095C8473236412978D6BD52A1E535F84D 964B227260EEC9FEFF5835C841A252670CFCE14F5D3F03534ECE1708D8BB63CECC2768DF 443C23206D435C3324D9BF6FE01F5580FBAC4504DA0FFAAFF7FAD24187F1B8CE519871D5 23B5B81C103FA6E831396813D3F5585CE837CFA83A62642BBBCC5D172D529160B0180F02 8DCE4C5EB76FBA2E66131C9991ADECFFFF4EF07B6072614209AC809766054B506F7F4937 545238DAAB16453B934905064AB37900CAEC8CBC21EFA758105B6E20919F519EC7B7BED4 039DA7B3301CA925A730673BD3BEC054CF08BB2A15990FE86D2DDAF5B71B9D9AE87DA7CC E5B3EE29DA78461BB8BFD8A3D67625FD8E58C278C54BDEC0837E4A5D855459660A983904 4F05D7703139CB391E94A34CB7107BCCF147C1CE51798F9618FDDDEE4859BB84C2A83FEC 0589269BA15B1D152D0A7B899FDDC8F369F23BAD6ECBF85022710C6F4E15A73FBD176DB4 91B4B30D3A4C824186D329A8501CB18CCE51A35EC586E35D4D1C669D48313EB71A10489C CA1DB4A246DC8495C395958551279BC20DF1160A220B2106EDB56CE535D7792904CE3A19 4D0D05C3E96230462F58C4B22D67D20CBAE1F7B7C3648ED3C18EC194C29E23254A42D110 3D2DE1F3BBDED6E81E63F3417D14AE1CB9D49758CE9CBC0156BCB7015A7E4C008BB07588 D405329D7A5822F0724E9556FD76B012DF00EFC5FCB0A2D57D38920CD1BA2D35657EE2E2 BE4D44E36D08CB9AE61A17538BD8AC1E099948927181F3FA0F425BAAB96BCF0F93E07FEC 34C9D699762F36C88982CF8ABFBD3467D9D45FAFE8E3784A4A7AB3FF36F4D4B1F0DF089D FA0F0FEE5B5100DB90644A3A2A34D9B1F1DF385CF154659275E1ACA74DDD55645236DA1D 4CDF939BC187C65044380801729494FF485DDF23DDECF7A15777D87F621D9FBF34ABDE15 2275B0D4ABA475CBC6D2BDC0BCC771B7CC16F09D2B8A3B514BCAE6AEC582067CC2A5A107 52F172E686C00D7B37D2D3DAE3B916AAAFEDFE64027A7BE5DE75E15BFD474D98B7555DAB F0F20169AD3970B2B20FF046F2D0A98AAD6F462EA043E79C56887339BFA98A2E7598727A C7F6476B6B87B1DEBD0E98E919C960C14739CBB5DD4F129688AB986CC6C627AA5DBB6272 E685C5F8A290C827F7A11C58D57C811968804863B74F4A54CC65A43D5F851E9A9BFF8A8F F33B6DDC7C40CB7344CCFD6EF40260192AC4D112CA98D78EEC2CCF579FF6171C6D75488C 71E0E58CCCBA5144BA86FEBFCCBFE37FD0CFFA682B4B17B5B5383320F39D77C6EE31BD64 7E784362357F21C82958197C90F647272F23127590FF16CB99B5DE239707F12CD56A1EF3 6B3242DC7C340A4CC35D5616D0B52BCEF2E45C67D82B81127C802127C6CC8821B05E0EE8 42A45A33EB46999E061A5034240BC51511AD8497384E85566C16C8B63B4CD68EA904B2FD 8856749419D62F04AF20DB65CDC2F6995EFB53974E227BBBD497FA1EBA2B66D598C1A12D 2FB84BD46FD963D99A2F3237D4A1FA8F8EC1A673A2DB6CD8EBFFC90747FD9D39AA3DA51D A114EE394356A0247DD1685E7ACBB1122843361EA0AB0BBA304CF793941BD99B935CD688 7666C2164D44CD0BD59E25A6510117462AD740FC582CD0A06DDB685F119B16CEFD308ABC BD1255E9668B0407B39D61080AF9536FC699C7748AC31C60F8896F3013CCFD7924A7EC90 8189A2A9BF8379F1FBBDAC1AF7C0871E68E6988455B64F5891C4DB6E702E762F88ACA9D5 70BC19F0E25180132B27422D85FD74F351034A7BC422177586EE358285540B88D908863E 76AA2E6CB4B97A1DF0AC642D2C553EC8855198777509AF725440451E0A5B2E4333E463D4 C7636243A979B52F200DB3B23709A939210D64FB80910FE6B4638559F2A591C49CE58D41 E76F5D23FF8BEE3A309F573978C06D359A5A42A68846245F318EB15499A10A456B7CC902 2515CB9E91AAED964F9380BEC68581AECA1C326B5EAA000B864A1368DE5B5531BB39B491 B7C64754E33A1E908E2037627CDC97C4DCD35D517E59BA365DA3AAE7139A3ED7FB557604 D29C88370FD01971ED7174246856794A439A42BA3C45AF6013B375616E8DDC7BACB452B8 BBB2A1332C4B8189901DE64198B83D82D5659D68756EBFBD5A4C4FDD3D43D0BE6EA8A0E5 FD9452A737690334D63D7A026DB34208A44D5BA75647CF7AD746CE960549AD25EEDBA4F3 4B4B871B77DF5C1D0D0CB8BF0A4E7AF8E879EC3C47252754012F76F1A3F941904BFDE8D4 54B78870635397616E669D73F28907D047A81C9003A9A051BC2ADD596318ED29BCAF8C37 3B8843B1D9862DE16E54E4DACDDF5C120AB0FEF28F079F7CD6B7301F182F7FBCDB6EBD37 CA29D2CC954EB3669AB875F0EA51AD4F0240E29DC0A1E2B88F4838FA24E93670C9E465E8 841696680D98E1BA3FF1EF0275E59961A033FD286D71BA0083649BE1B4989E14B3002C73 CCC91688A9F968D2FD751159C17AAD1AC6F58B4EB35EDC560D34C97F997CFDEB25C826D6 E96E65A13648C6A03DFF6493D0C23B4BDC5A30E29A84D361282D6F63FC1554EAA56079D2 21C94405AF435D6368ED93AE08E9AC4BBB0BBB484FDBA4E60145E0497B14F1D9E0FAFB40 498789F5597918BC1854B796C52E5271D281263E6D262B27E4FD9E2873ECBFDC539255B8 1CBB0E5F9D838EE17219ADD19396D7A94740FB5D853198656F90F4956B0F6A1984EF55BE EC40EA7511D2B90AA7F954BC39280BA314AB310806B3A7245ED3337FC45457047D92560A F5BF93504DA10838789589A7A19E33965D8C93011947EF4A14867F47D8CD780982DF0CC6 263454EE16C588BA3CA2154F60D0CEBDA2AC5E6DECA98E0F61E03026E8F5592929593C44 C5F17AD6B296E873FD297F7F55A03300ED03DB6FD2DB181952FB03778E32BDBC5609C60B 185D61B18645FCD0C86AB63185B6D9D4D41A576B7FABD8101AF23C54EF98C4F428F7056B B26C254D4048A8E8D947D566EB50300141A6F70F318A2408463F3B86FA8F7C964190C6A4 11D6BE41DF69D753DC9698303FAC8BC233D7D68469EB2108B7229F3BFD87C27C658C132C 99EBBB06EEA5BB8DA0620983D02CEC12120DCC1E79A6990D99E34795AB7C5B4280E9158C 1D41DE827D95805A9FC2C8396EF75BD68A4A13CA9D26C08653A6002F6EFB79C79CDDD6E7 F8684F6C7825E651641F1A1306B97C33EF9E330AFA371D75D1314215458F779D053E4187 B2AC5D8789D4819D42832C6602B2FB0D5376D2EDE946F9771C21E3CD7FF1CC0D9AFE63A0 259D2784878AA5F8D183D26D346550B08BBC1A7A6F2BA2F3766FB2CDECCD2434AC198959 EFBC81B367C72044FF1E2FE3C8636680CA2D4940596596447443654B23B6B2612840CF1D D26ADBECB50DFE7A218771FCA2E4EA7E418937C35AD4D3251D15CF487DB6C5B37783BE4C 57726BEB87B722B6972B4572490C5AD3D5373B5B241B9F914B7CF1F640FD39C3BE09F829 ACC6B44B7FB231FD5A98F058C1BF7F355153DDC87BF21918E16F38F055EF4C09128DFDBD 42A1BE35BE86EB74E275C839FADBFB66431CBD1F98C2BFDD352F4D43B462BEC610EF1258 A54BF7EDD335423B477841009A83F2C426F1B5C6CA2505E16B485D70FFB013A8325D2593 D3119239E6AA762CFB57228D44C6884374DC86353FE6B7A41063A806BACE64BE713772D8 183EFCB3F24AB3DB07BDF68ED8C66B941F85AAA9F5A8788FACAFF4E1A034CE829BB84732 D066693D8AD62C32EB92E45C8CB0F0360E54BFD9F77081F4509962F774A15E01AEE58412 39051849EE5951062F8A94F54BD2FA6292D5A999F06FF38A55F093D921DE7B0DA2CBC8B1 AD45477DD72AD561081C4DAF768C06C13176D3734063E517FEBD33A88701BAC3717CF197 AB5691445320FA30FC6314FCE3D66EEF744F7B8B677B6085EB4016DFCCBDB7D3B502852D D09DFB1601D66522C23442A1B4DC9706EAECF2D3399D52E35AFE09A63ECCA05DDB4AB70B F13E537D3D2C9BEA53E4A0F375017CCD1E1F03F8A7737664C8C6BF00B51AA39F7788BE67 B76BEEA547E78C86D0DCBAE41F98765FA563D3EDD95DE6E370ADD3283CCFDC28A9A8DCA1 331414EFB3C83D726709B6EA4D0A2C43C0B7002678B6DC974A969EB0389F9D4131166A12 AC9E7C6960B02783E4D8A64A24C6AD5BEB6F98AF796E0142FA4C5350C6CB153ECF77B85E 6F3472B1A3EA22E186C1EA9DD07BF5A9527C3CA934F094045DB510AC2B25C4133DC6618E 17D665944914E54E71911E3CF9BC2E3C9C6075794AB9A40621ADB59CD9445BFE0D0112FA 47DD5690F39DB04BEC1587438E55EF870723292345C18C809F5237AB110E7FF70991088F 3DEAC8CB13F8A418CA12B65D8D503BB9387E16E39A5372988E352A75261A9C1FA9470A00 D078F5813A6C1DA04C99B056AF6F4A4DC92BF19E9E4E02D960CE46FBDF17CA74AA426871 7BD1A3B8208961D4E94CA05C5FB1111E3CEE589EFCE785AA189EFCD0EFDFF4054995F1CC 8F319ECDCB86750DE452689FDDD92EB4694DAAFC9A18DC0A0CA27954BEC16CF17BF33616 07250D2C3BAE78ED2F96D171CAA664531E5B3F9CB624AA4CB3DA3098EE213BD8AC0B0B90 B1C37561C287A4A1D3DDDE5F3B77CBA5E6AC1FA213930E655EDCE258E73063BFBCBCEC4C A3107266FBF85108762A585F25914C73BB55E9CF44D716DB8A0333670360A364168E5645 F962E21A33D13DC5C9DAE939F7DFD3E7A0C8E571D5FB09486885805412CBF38614978CDB F225B23E632798C105AD7E5D8C717FCA98D62B29765135DC9BB1142A824AA462AEBF9112 C331428DF3873ED9B50F4206C75D2810AB8AB561A09ED59C3D81AF22281D2C07C83F5FC9 79B417EF1E9AAE7B677F085DC75DE310EC922DA67D560FF05644CADBCC134FE833A6194C F7D8F1E9E389C2BF7D2430A3E0C0CFA38C796059DB1E0D1C2081E5571348AF5AE982B4D3 071C07AF407DEE966157B115498D84ECC6582CDDFBB933228DFA1780FE825BA5D1F379CA 4F3CDD43413DA9EB69C4A6525D3B6A2EB0D59F18BAC4291E174A64C02019019715673B49 03B3304B6BA6AF0CB163ECDCBEB65D736D0A3F384B1C603ADC143C5B051CFA36ABC5E743 3C49E880C11634C159D08AA8CFDD1AC9F8C4E31A8BE40409D991F2E9E49F0D224EC686A5 194DD477683EEF841C51BDBF2A130F59028D51C1849D9CE9B6196BC52DB1A74B8DA5D886 5F0482F9847A116562E94B9BFEFC5716A3CAA0C36DF67735103EE93B80C91842E60C56C8 FA0EF35378BFA05D9A542CE6557C91A53527B3120F6FFA473A5909AE0DD403D2A4EFCC40 B879D7EDBA8044EE235C16F7B6C93FDD3D26B929FF474B0B724A218BB5BD13293B231FD7 B3CB35734C21FE6B40F94FA7DD25ACEFFE657C6B2E88BD0434C5B613723002CCFAD01073 C5DE8995126B6242DA14E3E0E18D41A0B02C4E23776A0B14DF4BDB878F0CB4EAE70703FC 82C86B0FA2C146A01999DA7F811B5A014A3CB225683DAB3740F1BB1D866E793B884AF62F 617CA037BF90A08B7664E485E32B3D43D786CC7B9AC235DD008EEFB091435E9C3852F809 A80AC147055C7F42884E8BD2DEB27C731C8D5AB5FD8A4D2B553280F3877584D0D3B2C699 AD5B4EBFAC9AAF0FD389D65381B9C8FE7DE0383A2E28359C38AD76C1B0C02C659A775724 84FA4FBF442F5409D3B3F1112C02D48154CB77257015DF626CAC95AFB806C76A0822827C 474C2B19A2D9E14C92CD9A353C29C9F4197B5C7CCDBC684A2125D3272A920FE4650990D2 1D7382590FF82BE7DF8B5F5DFAFFB627DF16B055F4B7EA4564E83DEFEDFF78F7E78759BB D5B7D7CC9CB40DCBC1C7E0EABF2426A7638001EF4F7626634A53F598F41203A76EE81A70 4F5527A0B93E3F2B1E1FEFDBC6A28F6BC975A2F9BAD8F4FB7B2EB246E8491B2DAE26AFB3 EE584EB0A52C533DBBC70F510102B097336AEEE4CD5F34E4A66CD862FCD20337CE7AE5B4 62D6E4F35EA650B8F8E4803CE84E2AEBB9625B6D7651CAA4239B82E6C5F2E7748087519E A8F146CADF48FC33B0AA599DECE54B8EDED4529749079E9FDBF0CFCB406DE08847A4D5AD A86F7075D7F47BDD0111BF6C13B975955788AFAC028210AF9DD7CF4C6BF230ABB872D5E7 FFF7D6739317654C54D16725C68756C65D3D5B99C2C0CC5F8216F87AF0450EC9F1497D74 6222ED689F15359A1172CC8B7251BC4740E10E6AF41AEDF1F4DC02EFF9289A158F2D0BD2 075399F896C7807C494E1FCBE90D4AD92B8A0A71BB44CF553431D27E348C1D5A0F8896C1 45FCC3F12E82310783B64DB8B9ED5F3F6F1384AD29D96F72723809A77BBD21DC33EDA097 0840BC84C7F6482B0BB35A8E6A3C6F005C51CE3AEB2A1625FB1CB35E48B3599562494D87 08A98A6B73748B57570AAB8A4A74D2BAF0F741F343E59C6A145A6CA06112B5A6222167E6 4CCB9EF1D2EE262A46737C3A06AFE2332D05734B2EADAACF5D4DB02EE2E38571159AC96C EF3F818F8EF3AF6D15A3F0BE0DE76981FECF2F041CB4BED2341419A34A510079D0A78B04 FC37EB6CE5A1CA7A77B954538D3ACB370A3FED19DB17173ABC3BAA941F8DA892BB718368 2A4960B64236C41277701D68BCB9A618C27576340A7987ACF856EB1C1F5D32590F13E1F7 6C2DFBE4EF438E39DBFD9FFB630FC7B4392A4EC02A6DA33529995577FC20A9E355007EC7 5B365D390B01D4D8A21CD9239449DEF0A2970FB0F1179E450B7483F038318814934F542A FF1D9ABEE4DFF26D271B7756E971C74DFD72F6FF49526856AA6DD60C4A7A9EF693C30F79 23FBC2C625185A2819344DCE47D51E8B5DF654E65E336431447D681E4C75A6DC4C7BE023 5F44CD2AF1824D10EFEEC6F15E1742F315BE39EAEA5A9513569406DDA97A8B5902749B37 A55927979DA3E28B1A0C458D3E0802C4BD7CD2EC39082CF91F6ADC470EBA065C394726A1 A5151524B688EC3AE22AFC864D84FEE80720390100355AF9B1D514750DBFCFB939D90DC4 E99CC8136F5E37E78B2E5EE8B22D48B1EF8AED754ADEA79952F931B727BCC3DA6266AB9F E7F56F62BB6CD41B6FF94F7197C0D359C4112783E84730D9DE1E13DC73A8D851B4E1F6C6 FCBA29001BA5BD4FA815286616539775101D09BB7147C7B1DD8F9681726FC0F41957EB27 53EC0B88635E35F96A5A4E7CAD1F0A28E4E753876D40CA35965311C9CD0FEABAF93DDD09 0A1A71AD454BB0E150A071BBA7401E9E791AF0F3E9358D92CD3CE08FF3C46890F14DBE91 798C8B2EEF3BC046C24AF60358826D8F3ED610D7660B6D556C5D6CB161896D6E347DA734 B52B5446074A43EBC1159A6F9E4634C900B6F1D1E0784A06E4406018E1D956E1915077E3 2C2849840E6A77ABA93F020D09533FAD7EE6BB22C2E3BDAAF93FA226B43D3E0C6EF15FAC E798F1AC04F1C4363AD2F060D9AD7321646035C010C1BC9891F0D92A7A4B2566FD8EF48D 0273CC45CC552BAD46B5EDFB34CB45467F5EBD87C249CBBB0DB1F8EF8A881CB2C8753F11 2FE40CBD4ABE3DCD0A4439C5DE1095E1D961959DFD6CD47645B8691360C12B1627DACA66 4D8E66B8E9D185C21DFB9167287667338AD8740475A96239435EAC209AF7B99467C30B80 02FF6EED4C575C5B9A667DA452B568BD5209BAD673458BDA44CD5059F8565C82A2463F57 C2A3D5B7169C201CE8A640FAAABC86830EC7339520644529734BF38C07AED01153E671D7 A227060233E5C9252EAE7F1546530DE51A679A961304DBEA92D86CA502EF676BD1364326 04E16201CC33CCB5F1095584CBC1C2F6769A5A804F48A353E3F5519CE8F10F588B94EDD5 CFC93B05E9168EB5586148CCA8F05B12615935C1F1EB905C9AC729C67F58A50B73BA14D7 3F7525EAF0220C1FA1FC6B151F9E864BD9D5EBE0342668480C61C43EBC71D15EC0768957 93A7489F957BA6C8C6175EF04EF29530820B898380D807A828A677DF187FC0EAD736C4D3 42E13018BC64A076B26A8F96127CDB21153430BB45B97935B86BC976D1CFF432C50B41CC 6C5DCAF0062A2CAD96E0D2D49FF68231E1F74A659F1F1B6FF415AD22997AD52A8CAA52B3 F93A8B516AD6220313D7026CB15D5A38ABC2F2BE32B5E7D29A78A6F27F48DA86989BF4B2 7FA3040893935BC8CD371A50162096B0FFDF40C39BD71F2AE2975A5F353D06369DD1C879 4C0ACEAF27DB11848A5A6211330B3A471ACF5F6ABAF386EB4EEFF3893B6A774BE1E2BD82 E3159AF92F7D22C07820F55A2BDDEEF2EB6DAC3EB7D96790FD55A0444444A406FC4264E6 6CE6CAB1399EEA07C656B05520AB023327C5F6D16A1CC237B19579FB9C1D9668AF2F69D8 C1DF859185F00035BE8A29DEA84FD6AF20391F4B0E263A16ECA654CB466F68A3661F6DE9 37379EF1439ADD43650175CD01E6AABCACD0F669203CB7802CC00B50AE21E1BE732B3ED2 A2CC086A2334EB11A11EB4AE1449881DE2BB2CF72247AE1FE8C741A505CA06252BCC1D9A 04ED88C6192E0C7FC0F4749EB6371BF3FE111BFC3BE935DAE4772759432F937BB6A901C0 EC2849C55330E85618A7C5561646208960DD4C36795D929E087C221EAC33C71DB01CFE34 9AEF8BC3BE414D0E50B2018A651B740261744B5EEF563FFA92533A5EA5691905255F6873 B225E5D71D3807EABD6AB7B847B83BFF973A9395BA1BC9D99D25FA99A3281AAE82D6C569 249D654342D7F775D0D4151F3FB9B6613C5C30A39A1114DF0B26590D4CE41C604D363BC9 18B4C64562A4AAAE1CE016B5CE15A1F1BB93C9BCBB28B1627A8B44E4030B743EBAEB061A 9FE06E20BED259417445AE7197DDE3935791CFA99A4AA98B6663CAE8057CE4D0F4CE564E 881B8D0DDC003A7509075BA2C5BCDDAD5444CD4E8F53CB3C0274233D08B539E88C45DC86 45FF431EDE78C34CDAFC979174084CD2E715365662F658C41609E30FEAB60AEA61568959 4FD425C800664ACE0EBDE5A534B19A54F4F49BBCA94FC62E594BA0C605A71E1611D28C24 F3D710EA207102FF109B6B62A34015F38089F2EBC91A1E0F60A531F2F54A67DCB1021FBA 14D5AF0FEB4776D6B7A3F9C93670898E52D13C131FBB0CC4620D57F6A32E18DE694180F2 436D1E67BCC330F7ABC90695321A8336DAC6C3190F6EA7C3D032D4996B4BAC718AA9E226 DE19577AC6F2271974BD6126892F23C5BF05A66C8B2EE0708689A32F8B4CDF5CA2472D4E 19DF58016217016B3BAF65EB78666818BDD7808EB758BC025A86A6B2F241470994255164 BCAAEFB3432A0D60062B87EC01FE1BFDCEAD08AD1EAF49A750B3FCF1CA4AF81D1B0A512E 4ED287A30152AA3FB9997F099C8DD5CF12CBC46DA65EE746D043097D66E7D244EE14D5AC 9ED69D91912637D4AE10F712E6777E271C80F62531C48A951DE87D69A2A8A892703D3B5A 377906C6697F4A403B7AFA4DDAA9C3F20B79978E42D8A6FD3AEEC0EC14AE937A98EF3B4D 0296E6EE008A09B407DEDCA8B7A9A5AD4003A67518A52EFE6635F6D48667C0A87B077CE5 029207E0B1D78A6C96160F72A9DEEFE260E80702078F5A4393E30DC6BB5623BF9FD3A447 0B60619A1902C87F60630DD9D3E46D9FD28F556719F959C0260CB85165EE6CB481A47148 34A82F287830662375AD4A68C04CFF009BC54BEDBA686FDC229F4EFD47A09CBBA5A04F1D 820DB5808A229D72127E0AAD6B3F451D629E3AAA9797041B8CE971457740C97156FF238F 32525B6844CC07A2E6EEC7BC534E24FCF876F2DBEABA0F1FAEA3DED53A8094310E2F368B 5D586721A3E1F3A97BE35815D9ECDBD0E622C2D0699FC416D8AFF314B74540344A91C272 F0959FD3C691C25271625F8150F1B74EAB4D4FCD43B8E36A8958A922C6C69CEC9B9E81CF 8F6FCAECCC8FF96E462883A8E344191703A07036ACA4AFF07ECE29C09DB51BA6491E686A CEA1CF0C08CF3ADAC304B0EB860511DA33F2BFD2699C303F6CF3451F972DAE4B3B253BB0 AC3C9D7C19C1CC34CCFEE93D7002D25DA5301E65FFF10FE84C7FE9D8F3B1B128F68673B2 10EAD47C321012AC10B652C3B87B1CD488CDA8A7223FB81835AE5DB74ECA756F60AF0966 140CA1807FB0282479A4C3656315173BEE906DF89EE7E33566B9EDEC5E9AD4981B83DC49 95211E914DD837217D7A7ED15405BE243062B67094128A238B4D49A8B99CB9F6A521BB88 3301B01F8ABFC1DC4F321D9F41782F65EFAFA56B559FDB5164BA6899072B9FF9B19910D0 BB68670C02BF242499DDE7AE5FE549071E92CDB0281D8335577E958DB2A7D19A6E19667E C9417D5CC38369E85C7157EF5D78E5F00BA2E4E81DBB4399C14B7BAC5F31AB26271B5068 4948D20E6E671896C2F1FD76180985BF6D072885ABC9F05245C4A80A1C30394C37CBB0CF 41F1580FC40272913571BD8C537318B4B7BFAA6BBE048A065EC26316CF9EE2435398CC5E 423E46BD426DFF1A43F584477FE2FBE75514766F2C5AEF6BE5DB0EA8C40B564371245D11 5EDD3425292D6FE2E7F9C80C35BE2F56C702091E5084036EE7154C0E6AEAFDA875605470 A6774D949E04A8F1FAA2D920DC42BD469C682018224DD52DD18AD3D7EC17A40A6A33CF87 DC90205333866D2A472A0E3DD24E51E6517B36A6D571F419111431F3AC178619388F02FD 2242015909ABDA456166E1642E943835BCD973B574247B3C1876BC08B46157D64683119B CF36FD362786C80685EBB7B10E57AB4CECA6674AD60CD7DD6E03788CD8CB215DDD895139 4B2A03F5B492438B0E06F1AE3A473A542AA005231D39B7ADF75BA127800EE862F4217F3B 67CD0F6418DB3C81F7EE5154A77BE52D562F7E6F753851CB72074B901CEECDE4D3FEE2AB F913E6C6A8941EA9A32072F9DC595A665B5BF3636C53DE2686E26F280E4654C553E0A348 9AAF24EEAA7610CFACE8D7155079866825BEBB362AADFD7CE93AE9765CC1BAEE13269607 D78CF9817EA93B49ABC1CD2A480D32398FCE0D7B5E91126FF80B2F25C87A71A3700E8BAB 3CF8DD0DA097A6943C63A9DF9F3771878579750235099A8DF3F42C00F213C4FCE43E9377 2A6A77DD3D1B689D9FEC6192E9FB947C376973DE5F6869B50543837054A519FC95A985E0 047DF0FF928A7BCA54067D8B59066CB453E338046E33C1A0D2837BB47E8B207B121E248B E77EBDD3110877F2697F2D8A0B782C1C292E37394822031CB46AB6F860521B6869CFDB10 F89DD849148955D6EFE0C8BD09E4EFCE18A8AF1146437768660087F7CAA0892F1D97B134 27B54141404E7C6D92D2A1FB5FDDDC3D2E64E6DAE27F54E4757A0630CFFF83BF3514AA92 11A72D1EC7498AB526A544D9182DAB988B38EB1510D5ED5BCA2F4CCF8F736E11B5700880 DFA004B18B3AF537A2881D7A64DD95A73DBE2E9E5C710E107AABAB26EE37FB67529F23B5 BC64BF06B11BF131AB6DDA3E2776210456641523277EBFF1BFAAE368CC0CBBB2CD2801C3 1579686EBC5438D850C4B2769706041E4580D12C5E829D1C7F479B7E987B40FED60FC4E4 E884D64FF1D5DB5C8D2AEEF2BE53C435C1FACA226294A2C01FA9F33C6995B03A028D5786 3FD0621916123862996369FA736D6418CE51F12605CFDD287DAE5C8F867A70FD61EF7D92 BC57D0B0486D33E6314AD7E1EE14488F84B509F7C1C886F3D0D0E8B146C8FE903D62A402 9BA117B02FB84A3FC3AE1E2521B249C12BA87A0D9C0885681ADF8AB183D584A06FDFF5BC 8C2E28873C50E568D88EDFB259F8B7DC76889AA5EAA0516A0349F107567DF402093F0BB7 FFD2E39739FAA8A8D290908C80337E91C75E91C5980CAC2E6DD46A33D3A5D44069923343 D6363209F6DA58544162A60112BF209188944865B20E5F07F1CB05D5D9B609E46BAC84F9 AA210D3DF7C6DE120BBF89CA2D5BB2C8F24E484286C17144EF5496023D4D75DE8D439F6D 7C40F70F437DD703DC64F8FA746402519ECF13287F8FE145977C2B607B2263A941267AFB D8D028148ABC977A5B1605A28E28F3E896B9DF12908309AE87F57FB395345068DBFB9838 B9AE3FEEDDEFA773EC2EE2C4F9E8D6439CF658F863F82A00F7DE8A4F98552D72DA71E156 5F5712B9E7E0BDC06746C0968AC4D569EB231C3D0A7213E891E3256298A2D474AF431746 3148EE76EB6F8085A5A26B0A164A42D689B0E9FD73E46B3ED01CF53D8BE10FAC911D3FE0 3FF160947717FA84270E486D47F933E1BB4EFCBA2980B656EC384F576D637FC3D52F3C28 88B82C187C92BB4D039730AD24E6B2F83F701B797330C7FF007A4C0F1A908528043F3B13 0E48DC85268891FA2F77CA7DC1CD2BCD92D8F7897DC8BF42BD89E0FA17100CF89D280AE0 FE736440C15752981D7E357BDF64A0524262AA46B926A2CE35A8E5028F7B10DD9F0449FA 8FE0156FD04C714F5A421BA230B25781CE68F5C9F6CCDE1581551FCD9F3E2D6D81CA7D7A 5DF36020CBA423E20E6D2CC18ADB973A8F4057E4207A45558FBA44F6AB869C248DE1B9D0 3D747A1E11C0138D8F7D33AD880636D45F805EEF9B837220653FD07401A236ADC7CCBBC5 F5DFD58C48238A0F51B58325969D0A6FFC38992A3895A54F2E8A5D25FF8E868445A12412 3582D819FEB07D17D0D9459C6893FF149CC4E88A9000016A744C37117625C47F01160249 DBD56E1E8F38ED00FCAC13BB5E32D94198177212D35599759B6BCB76A8E3E5984F755FAD 09FC143C4EEFE8828B616F4AD3DEC7F6156B9BA9E1DAE9BD24528E7B02FFAC21A3F35C74 215B1423B658131846098BCA1E6D8DCE8CFB18A2534DB1FC3D1E6D927C4FD3F78B4A150A 1F5258199200F80ED16BB1F09CC260799001E0BCAF6603B40450DE04E89FBABCBDE4A01D 9FE3494174BF09D98146725359327A09E3658C5CDE14545C1DD475EF70AB883C1EEBF200 12BB0D7D7CB8AAC311BED043939C7F83FF2CACFC68ADB3B8950A121F2FD75F798A7FE52C 6CEEBD5B3644AF0166EBA690F2BAE6DB2356A04013BB82F479156E63D96ED595894266D4 8A7F3A8068E0DE927A0532F5B89EB5AC9349DBB2AFED0C8B472D16B5A8A916F01F192B87 5DC9100CC8ADAF8809DA4C7074D2CBDC1838EA12DAC1CFAFCE802ACD1E54C574436FA63F 028A58BF8A62147872D493F23ED2BDA1B73C410EFB38871FA0C3A9562F672583AD338920 B6487F3BECD939AD70C674ECBAC967FD12601E4D8FCE8735ECA3A2B2936BD6D802EAEC8D FD14A2ACA5396A5C6A91AC3A55753CDADE237EB063AAEA775EC3053AFB3CD5552BFA1FC2 C7A903F3AB844A8D8F8FC2F170034645E7B57A0087FC1B12961D2F4BB97CFCFE0F209599 53ECC0DB9FFC9E002FB760CA6F08423E9E69803FD159D1A10A53F46DBEAA668BF263EE5F 00728A7E55CEF425B96E1F673DB3A34DCE206F61FFBBD3C998DBB44B5A82902A82B9119A 8F72D636F3BDF30F837CE40299B0FCE5C09B4F8AD7D7AED9BEEC00CE8F6B8CE7EB105145 BDE37E1639ED47E764AB7F801981E318233F9D3912A205E3C769A3019DE5E66A6A4FA066 0647968CE2012485CC009B537B7151BBEC89344EB5A7B46DF61F643689734DAC5AF41391 3E23D1828A31068AA6B232A13044672223614189A8E7C5F1BE044D0F1C601AC557C2099B 6CC0F52164DC5292BBBE4DFB9B489D2D85569BA3E7A2C3DAFAA9E72B89D936A97006AF1A 02E4EBEC9F5B7D6A789D4494CD6DC268F0582E56E7837EDC91EF9840180FE4B4E8B20750 32EE8EBB2209154498BD571018E1D39C743F96C8B3F41773B4E4C86C92CDEBC6CA4B5C42 B7230252DE16BE7AF78ACC31A96C64DC95CA41638FBE18F304451964BCFC97A12ACC6277 6D266DD5F1300495F091F8C606075B71B7749395FD907E988DCFAE5EF49BC24A83B0B2E3 A91083C8F3E6BC5F1031FACF3F869C6B446FAF277940EF66142FE851098D914AD0DCF07B 21C5389EB29D0932293BE30EA53DB8308E4B8552176A8F89F62A59F6CC1489E9D40328D4 C0E258AACDEFEA9EAED2C647A2D3A44C9B818691445B5C4193D27671E8E393FBD1754BB0 152D1EC93A0D8422EEF96FDD9D5540D685EE7C39C21C0983AB0706958E7B22C2B91D259F E395BE66BD03F77E7BAE3A79A9F27A5250BC5EB02858024F9FF77FE20CA5DCBC8E182210 613DA7E55692FF144AC7DF9D2456017A287B6D522C00EFE394F5621DE21FCA658EF11636 B6995DBB52C99CFA4241DAA3B1BD2612E4C4724277608F9135B701CD6C55C5B272235D46 F006C4FB47F91A78ADA52DE3797B1E0AF0EC199E34E232AB09674F4550504A76C0A3C0A1 AFA6EF1333DD4CFC6DBA278C28CF54DCC26E2A96D1F1A165295B37ADD22E1F97C3153C14 A4BD92033FECC6714422DF9D3097ECF1CFD149677ADB1251466E54454B872D91208133A1 9D0C45262B4685E966937DC9FEACA3EAA26EF73D1A8B40ADCC792700B319371663779909 1C8856BC9A5020FF1548AB1D8E22B99AE47BAF3257AEB6D57B9F42230BD56A649A469CCC 41794543FF6917E5392A0940A96EA125992C8EFEB62911FB68695851E0CF477B2DE2E341 CDF5470C289C0525D977E810F3DF90BE7170E59435C69C30B38DCFCDCD4723E24108D770 8E370C39442B94B63E3028D885972A1E375068B7F7F534286B56DECE6F74142FBAD2AFD2 729CB1E201099BF4D208BD7E4D92C52B235ABFEB9B370666F754C6D181889CEB9B97B991 36C8AF90C3ED9A8C40A727C3A125C4108D7F11D4C56F7615D8018FE42E9A3019B1CDB72C 29B4ACBE1FC11FDFF44BC335FE9F3DFAA4150609F48845CDAB52B854557DA09246A35083 511B5535F2F15F93CC9F315E722E98F8D45F1DA1236452D5C57D636F71A3AE6759EC2197 8E1FCA050648122D49D8A86364A328D9CC0A0D139ECDFE0D5D381EE55FC19A13A8CEEFDF E813F535517904F4F1A3B019770E0AC09D0C7C69964A613E26CC8DE8596C140989335480 B648561FB14A7C9556211ADC70C5C7A2D8B89D28CE2169897FF93417B9CCF42F4A6EFB98 E702C79D286034FAAA16805415AAE3202611D0176251AE6A964FE66D0970523D5F0BC403 EFE8D9AA013B2CE208B94EA2CA78B83C645DCA7816A10666F14D322989B47C1BE2BA65DE 4FE1F2D9A2AD1DA1DD284FADB6B54C3767F1A95FD69439A8CB63F03A1E7F8C5E957A04B6 CD8F4D7700553F0F2FE7D211AC09241949CD2D26EAD34EF4E67875D7B74551A7999626AD 64701E775EEE450EA0267D7A79AAAD23734443558B02AD938DEEBD20A32F629B4F2B81D7 F0E2E9A872435DB63B5F23512E8E0A205070F482B81389069E832BFC1E7E9A9FCC9FBA59 AE2FBD52B3DE75737E4FE7FF6E40BAC1F3EAB5EF00B7A06D66D4037DC6FDD117D9B751DD 0C57E4CF38C4DD98E299578F414D9A3E1E0D5B11DFA0BA9BB732A98B69E4E22FB3AD668E 642537451B793186757629176D45CB81741D8E8D7C5C04AECE2EE3D73277E78BD2A2434D 498CC083F63FA989EFA0B96D8E784CF152108CFC89443353F018C26824ABBB08D6A81EBD 9EB9D4B317E1CAE2AA3CB9CA9007CB14B6E0D68FE2F73F477BC5C32CC03C6EA8F6BDF31F BC3825C3D15D60BB0CDB4DE49B5D501553179A42C6BC785E975AE8733297FA60FB20B4B5 34E20D7CC75F25CF95CB047A08425A62D7C867EC34BF5A378C80F5AA7876A867A3F28C74 0BA3F4A81ACC9F27E577AD1A2BE44F6FBCB9E1E46A393C95991D6334530FFAECCCD4E1A0 61B8A47FD5C0B669125BA1F5C5CD558AA86766F91C6CCE523697A0907FD84EDACC131B3D 661556A5515AC13EE3DFACAC51419C9AB2DCB9AD22C404871F0B417D771B5C6673730B49 2EF7F4E46B1DA0DA74DDE8D3E828136D0F74F3DAEF88F06B28C1FC5EB0A6A2503489BAE3 80D6845430B5C0801118A5636DAB71C44890620737B1280ACF6EB0DBA63223F4352ABE42 6C9C89AD536523C56EAF5FE48CAFC25B499F28AAB384E0C085AC0D811FFA29BEB0CCE371 2468E0E17DD5398B1EEB5F1B9D89D41E4DC1092A92F0E6BA59A530B5EDC9A40FD502B77F 2314A324100505D1CA94913A54396A7A4B47BA955D3B8E1886E035F549CBA4CC50D05DD6 9860BC6821737102B28A484BE894806A187993200C6BAE2D06D7DF9BDA8EE87C86EA7850 FE3B836DF0E1B2F6A407427002F0205039A8DB1275D6BCE994269DAE552CDBD63C625F68 B946B118F616027201C4005E5C03CE41BD4E96E9C615C78FBA528C401C6467414D6D8125 B84E23E894DB2F0F7CDF56F6E3056C39920050C5121C7BAE6286A8C52BC73C961B9F1560 AAA68C24DD16C4FF762EA00C323FF10E373116E00666425A214DEA5A40DD636F52DB8060 51ED311517BBC9468CAA506FB1AA14D4E45E5AE1C60833D50641DCFD65DED80AC419F511 0782463DA37C4BE38320E214E305382223B79D31876015E9FA59E9C8F237255DC3860B24 1F12312CBE8D6D63201DAD6D9164665F1A35D05601124ABEF3347761FF0BDCFD17659F11 CF833321D41269FF950EE0FAAA72CD5FE7CF9F95EE8235C817D4D208F2FE526BAC91B119 B5E35CF775AE968E8CA441FCE437A7FA3B0DBA30D474875A33CDD3B2BDF093098E029588 A19F84211EE967E49BD1D26E080F953D0B7072DE5406C871DE5102C24C64B584DCECEF78 EBF4C3B2DAD58733E58AC1CEB33BDD5AA5EA650FEBD648113A209F41C4118F47F40376C1 AFA1A27DBC36220CF256C708098B95CBF070467555F718B47B7423773ED0F9F988B17314 539BFBFF3AD5A87295970C44BB648F9EFB9BC2302DBF38323D50B98AA31D7702B488F030 149CA88EAAB52153B07A7FFCDFE4C146A50E5F226702403D8E56F66B9FE45EE3FB4FFE4D 247E1531753D28B396D9230C664961546A13C3C1E1CA3D27BAC4072E4B0F021D56156AE2 72BC49A614BED6F3FF200E839EDDA7D96893BDF23D6CEEDCF2AA850671437396C25AECD1 C48CC4CB737752D8074C75F0BA5016CC7EA24612F5A14D36FF6386818F67EA4A76E6E0C4 E105DEDEFAA23D6C3BFCC5F9AB87C0C5E255E50A171321834A07DF4D1E4060D469AC9FD0 8870CCF4286E316F3D0CAE40CA11088420CAEBE85B219B9110EB0580BB8A721F48299024 239E04B37F6EC4EE0BA7EBF85DB51A5C4BA5AAE5D85679004B93C113381FD1B6B0CF92E1 D6E600014EE1878C01CB8BA660110B7486AADAAC2191B6B4F96203BFC5148DB44DA67008 B9284C0F9B11F5D35451A7C471D3F0A4108D8614EF9B7E3063C535BB6C09A622A5C2525C 4DC81057D8B16554E4C28017C0839757042C28E4C388E54E30E495E6A05A8812BB9F5F03 F71DFF49D16ACBBAC6FCAC3C69FFB2A611216BF0A7BCC29BC12BDC7B531588F9F524DDE2 6350CE36BF4D750C19D2F6F4973054872AF01E2B01891C266B8D389E46BA087F9A12A0A7 23E416F8AC6ED621714D303BFE8F32A04865E4A8C93D939C19601B5CF0EA63C64BB9909C 3731B7802A6F271A0E751DD60C8AEB70A5623D56BC6907E882469F8887132BED37E6F45E 1D51800FF4E0CEDA3E4F704E451709FC99C5148B0AC550CB93BC1888E668C12E8D340CB8 0BA0D25FC345158C38D3C3CC04F4CBD46D9F318C5E3AB091CD828F17F0E85A20DD2A3C82 FFEBC5399AC9AB62E69F09A2D38C2CF8205D200712ED72D13EEE9F8E9399C10EAF7B9412 AE46A23CB756C8D937A9E0DB48426421BA861F49D0C7FC2744C2A6A8722EE8936B42F758 7349F285E894F66AB98D0BA53771AF989D9A7987AE8E61141B1BB7FDDA536EBB3A124B5C DFAAAD620A8769442D1F2E34246831D500B42EBEBF39271FFAEBE10D2209AD1E35C34A3D 74725E858A27DDD7282DDB13F0049559A1AC3618625A161BC94F238E68B98BCC86248527 46831B50C99622018AD426DE632B594B1AA16E51611B944E336FDD1F6AC1FBF982ADA04F 104D9BB659E3EE9AC22DC5762E472400A3E249A6CCDEAF72F0D76E030EE2E5C40419C103 D1097BD8EB9C0EBFAD670947F9F3E92F194243D1652985C55D069C41AEC29B9D67CAE44A 5174F9915293BBC2549AADDFA000CF553E665306A7A21A196556554B7114F6ECCDB19936 CDB32F8880319411CBD874F087DBA2B4F17BD617A6EA17646A473C63FD886D146E77228C AE55B564505F44F860EC504E883BA36F9542B2AE826C5571B970960855843047024384EE 71D03A54DD683759B4CA15AEF3AAB0E6D521B42B1A10559B3BF0A0E8A24BF359F6B83050 4ACE6599C4669C5B5940554168A41162F580BB5F727E35AB22B971717D2130B2ECE0C05C 3BA785A117E72EE21DF16F80B7676234071E089B0D73EF8BA8194C7B38EDD1A2F7145C71 2CCF9444F304369E44CAF341C0B0E8902AF64CEDEBF28822B92B109DC7A06F396373703A 1F8EAE1D7742B0A8E2F84477422D8F3A02BC4B7517F7A61D58B3A723011B508615CE3642 720A07107A320E5596DC71F5ACC096B0EFBB32CD3C4658A99DD87DD2181B43D4FB9C87A0 4AA3CB23AF93B61618149714B1B2AB5A82A4B0D8F513A1289BE5C114DFAC8E8DDACADDBC 9B3337E258CA5ACB1D1FABB80BA7829271D5855AE3733677357B602C58D608888F5FF0FC B58E9D761DC617F7ECEB85234A2931CC36E446D47A1673A43891EE2CEE757F402E4FADE3 4FB38BB7045764EEAF17C6B03E851D1209DB26C12186CB81191AC0B1DB8A2CB97E68461E BA3A745FDDC58BB2EB31A2347D77D546244ED272107636C4F1EDFD7338E223589F92D0F7 04279CCC89192B3C9115DED09E463C3A1029ECB5E87A6E953BF5D739BE6D7E409079654F 229CEDDF242202E5253B8C29CB40046F178A3A1BF69C1EE3B6FCF1AC46E3FAACC4AD9D58 B46DE5E2ED23A1407011B792CF10B0DF243226CA59A2B9A3EA817547461A4EF946FC3A11 B2BE205FF584B228478D45832982E1F1BDA1F5BA7F8BC7B7A5D33B5F35678CDC41058F51 DFAA851D352411106E76B7C954DA2AAAAA452D7989E80F714B2EAE37E6128926316C61FF C87DA29744A744F5ABE829BDF6228834BADC7D7936017455423FC4F7B510A04B4EF124D1 50366ECD2C641BF5196E0871B88090052D02D95E017AA43C7D06BAD638B5689F3FDEBA48 E48715F304EE7DEACFF711C6A50979F666C8422610035952352525FDA054C12E648E78C4 ADD4C3C5624D1F893E3EC77FCCC12C80353F5D239217EB695B8435525D13309B7E17F80F 0886DD2EBE2CD5F550FF71B1B57ACCB67150C681EB06772DF9792050A3CAAC2721EB0EC9 E663DCDD2DB468477019463212BA14EE75F54026F23096F9D931EFA769722E25E629A36E BC3EE1D006E52A7ED3599CF46C30F6C3690741E61E54D10912076FF11CBF3A41F90ABA38 43D18C79FA1E69DAF7378DCCD5118617BA73BCB03F41132736526326D80139207B28E2F0 89D58EB7035F0FD5390CF9B169327BB6B91B01B463B64A1B3D12F6293CC7160D022B014D 0A63AF0BF7EABBD2022AC878B2E9B13BC5430901105E6F89F48E45D997B98DCCF44B35C2 70EE77D30315605CFC8378ACBBDE1FDA57282F275DFD100D3BFEDF73EBC195CD0FAB4B77 8A0A1793C37A8E534CFC000BCD0B7A126D14E017D2E99A0610D1703D4279A86D744B9F56 77A396669EA8DE3D1D30FD181528B2CF6604B648FCCD4A60873FEB6FE5256EA1916EF3B0 3D890F32743AC2E6518ECEE1F61018E0E7CD5AFF2D1489C1A7FF03DEE86FDE5219383BB9 BE31EAD8093DEE883CEA2FC5B15C096E57194F0DA89FA7FC902DE22D8748D83FF7DAD87F 9A1086F7D7877E47C5BE006DB5DBF0D382BF08E59C3D694C8F19CA196F799DBDA2F6D822 5F8D3313F93CB9845173BF0025F5A9BEE0CCD1A475852CA53A797208A174A25A5CCC1E8D FD69F334A19D6A6CAC0CB0B4315073A97E28C6EB43B59480799101A25F6497E69E1D1959 622F011BDD0FE59D81ACF21FD4B024B238F47CC224DBE090F647F534F6B7D678DD2EDD0C 3816B1AB446DFF6B5030F69A441DDF273D6F8C6B1A89DE154CB521F4BBF3365538F41DD7 F45211DB7CA7D8E8B7EDEAD70AA105EC27E96A134E6381F8172F9D5C2D1B3242F09A3271 FEA392652CC05AA8A72BA6A02337F13684D58916C96ED47FF44E2005A8607C1D9F3D6625 B925DC28DC29225E6C2A0240AAC67FADE067B24AE9AC5715A5BC847846D1DD6BEBEE86FD C01EF19929C5FB2AFC905BEE95C3F59392B072FE61F13134A2AF359F364275CB003760E6 23BF37FEB26C1E70ED5E0AB995EA076F393835D904E3382E3F7CB6A602EEB8A6218BEDBE 65CE2D79DFA7CD767C6D3F9F6D2FE5CF607E5588A1623743FF42155258C36800A409F6E8 484A7408C73D283DF1656BF95BF96C05791833E1E726A45F1BAFE5164C263EB3B2F81CD8 ACB879BADA8E8625A91A66F5770700E48AD0A41AF3F3FBAC69023BDA7B51D026806DD5CE 2044A7AB84C2D4510FE0AC1664CA38F6CAD0D8A291FF7AFD358340D3574734D4D16D00C3 93E80DB7B923415D97527E67E5EEDA4F3C3745BF7BF40F908AF560E1F9F89407C5D598CB 058FAE810674BA5D12139CF97315E92157486E3BBB56BF05F7D2CC2B320224B232B5E031 25D84671993C6F4307257A00E7A6671763BC7F095BAE32F9D6546FE0F82B800F0E02D897 6E2D31B0EC4D651846DBA83F130B00B91D710AD227ACCECD58AB653C8692D15DCABE2E8B C15CEA3DE9C6A2444C5663409C40F530FE27449024D0DE85D9E8D86E0191FDD988F5925F CFA44B210306D64007E17A8B722D3D10BECD637537D1DA5CB40E3D3A37B4A9D87719E10C A916ACCB0FF1B9B23450B924096765AB0600B3B4177E75387C1A9D5BDCAC6E2DB6B3A13D 00F767CB4EE7149A5EE63784FBE96CA2F0F4B9285A591FCDC73E431CC5382B43B39A80C7 BA7B6D6082E8F617EDC818D16F6E5F2565B9F684592073188C6A84A9D416F3F4F4B6B710 7866018C9B0F44A4509EAB6C0BC343D3AA0D70DCAC921AAEC0E9B89F7326BB4F070CBBA1 7E89D4BDBCD95136511464D4B7FBE30CE66AF5A8A85FF3392074D255DC9E1EDE25375E66 41B93C0A0F274E7678F25A68D84164149F8DA7F44A4A1DDAB969CEB547D6D79D2465074C 39254B6C394B7ADC62CF0C39CDFA4A20F4B52B3AAE16FE6E90BA901A4CA83D55EF7A304C 012EC6079785617693F7FE07D8858D3FB4B082CC97F236390FBB65281B8BBC82E48B3C03 0D27B136F64F392F80C538130F53BA346DB288731E7B0814A3665A6C64A901DFABA4ED4D DAAA4A23211A3D09E6A55E0F82B130FE08407CFD595FCCFAD235E475EFE323C88347DA12 406C2271D1F43EB8CC7EB1495E57FD89294DD4C22AB8C384BAEE3A3165B0EB4FDA422C81 6E6A46C796E92EF4AAB4E317AABFE65D6DD7C1A45510C7A4A4DA5F7C8E9621B28E98E87D 9022A932A744FF5CE672A1A9BCCB2A01C20DD8BB4EEA1F349AA59DE62FD7B71CBA42ECD5 C92599B4CFC92CA7FA9EC06457D15E86EB72ABB42E37830CD328A7A002F9947F6382F99E C186D67823B7A6169B0AC9949BC01CE851FD6789747E9525952193B16B4BEDADC0E57305 89DB65B0CE5402F573BF6FA65B1593F7B05757A951BB4E6C3A03A887611F80BF0C632522 99205D11FEA1FF820C67B33ED65C4AAE1548D279F77C76E640FE78585C7AEC7B06917DB7 FC7C21B29B5345686ABC26A08B8D95C576CE00441A7221CEF9BCD3BD5B54345E6CF03403 959847178166BC6EFF8B96217DCFE3EF72F6E65ABE6F40E1B80DC37BAB642B678D5FFB40 FFF0875A5EEC42E5D2A775A1F0CF49794C39E16B7543151AE94D557BC79CB2E7E2059A95 F955DCF0701F87A2F5E49D578B3251CED47F079F6F8F4A8ACB2062D20BF9C887D04C2104 CD5616CA39DA6AA603763492D40AE00250D69BB6475E18036BA2D4BDA3507EB6F108DF8D DB11BB3C1052EA4959F8ABA476A6C783A7B8ACAF54278537206785742951304619ACBF54 F1031357A67001DE2929C10A94B1829C03A46686BB7067596EA1E0FE2513AF25893C68EE 143AE62753505631AE1AB1E2D0869FF15A72F227E945FE0C9A9BB3A284095C1196DB13EF F2E26E6CD66EA5BA7BF78B0246D9B4FAB96CF379EB3B32601A68E9DEF9AAE77367E5F206 97222464374C2827289B40AA9FACFDD685834A9E46BA087FA8B5CDD3E067E08CCE4FA85F F2C8D8FEFDD33AE18AF43A0988B7EFA224B98EB3EF7316CB1D16BB39C5F83D81CAD6C27C 5F6D2E0233611A6A98F2117C1CC5014BCC03FE8B376327EB92CF2F321E074C159BAFB54D E54F1167A16FF3840A43A14FAD6E9BC0C119CA2040D11DD09ABC0E90720109B536AB287C F9DACFE22C5924D4B9F3283BB4CECCB0DA9AA414DCB45FC24AC771EB8612E0D362C59739 251233A694D0CCF794C0E15054C5B3599DF0F626C91079F60BCDBBE40592C01BD2411D95 2572E7E62B09B7F27F9CA6437CC8717DA87E74479A217FFB541B8CE68BC0ED2C7C960F0B 2E30BA63708D5467F2E7F8D272DD4C9C4A8E54CF42A1316AC4D5A4DAE34236CDA62DD4A3 69BFDDBC74B9E8265A0C8814DA92AB0C413D736324EE02C6238D2A6346B187DC5839C44E EC1A6829687E2F6BF0DED227BD58D3FE15B0136E8E8DE514021BE3902D968A7BD85145F0 68347F955EE24270647B63F1BEFADF2AE057074A8D87DC23E4406455827B8EABAAE6231B 6C58D80311D2B8D6F7FFBF819ABABBF27827C4189A8727D5686E5EDC1D6E32E12EFE3E60 A603A8AD85B2420CAF2107DC8756D7102F0D0B1FE5B59033465A2FCEF3787D981D492A94 54A7637AAF056F3B2CB8E91A5A75D1B03C7D0817234252AB5EA0A72766F101B538E6DCCF 251669ED3B27CA5BDF2CD2DDE1A069B3EFC34C6FFC554540DB2F1D44390FDC8D1F16BAC0 F0191CF7DEDD3B9D7199B502D918C86D3F3412C98A89408B5EF2DA0672483C72E9825381 23474A48034DB05C922C59C760B5DC4273082C30952A7D521BFE0C38980D6C37105E3415 450A02468759A718B0560F1182EA2E107F7AC2BDD2323F2B90E22E354F22D35FB29B08E8 6B2685AD4AE325BC648804B2E957D8AD5BCE8F9870EA196C54593C4218C30B09DF45FCC1 71EF1E43A148D4DAF84CB42AAF30AAA2EC86417BBAE47FE90E3A987433EB596CCDD09410 B3AF89BF07DDDBC644E61BD99EAF1258DC4B2B9C10CB6BCA80E0FF6BE65C13AFE4B7A9D7 F21948A8F98ACB124F21501826C62BB7E45A82761BE599D0068B90A9798C402CC783B082 D9BCB832D0E0C272DFDA6F6856ABC8F2DA7CDF6F40B9804E198EDFF91165EF491982DD0F 820A1AB39B05B624D41545001A2BCD25EF0969BA1D3BF4AA86D10EC86972EE1C37BB4054 E1BD29FDC2700FE0533696D4E6746726045B5BFEEF66A21A92599480375DC95FFB1DBAFC B3E2C6920ECCB08FEE3A46B87CFC9A0095EBE13D28AC9CB1AC40696886C0EEC16F400663 F0A1DB880CDF206D814CCD54C94F90E4F5CB3028F334D1BD56FA7F8DC44CD39C1E52D652 48B09CAC1776B05308143D8FC6E27C56B72D87F91414B2FFC48B00D54868FFBCF44874D9 41DD1EA5892FD7695F7738569A8A66925234968C8B9F061AAE7066E06190F656A5BFDE9E 6F7C37D576B590E96BD98713966EB6AE3A18D48155DF48F70B66146D0626410DCDE3B05D 35AB2451A86E77087D03D25E19A540E0E0EA4C98E57729648B2B3E240C600C3AD16A4594 C71B3345743946571FC1396B262D033C0DF513FD176C69D08CE05F2FD6E09F1DB0643D7C 0BDEC7129B6CDE893874112BE48F546F372EBB5D391FC947C64B76B21A7F9AD03C5626B6 239EDEDA60BCDDD9A8B40E5DFE38DE21EFD4A6B523C29F96D9220AE3D9A9A3ABE979C544 F3F72F1E8279EDA419E91B7A7D49F2142E19A4058E42AFEE6BC509453A750093713A2BD8 55782D08C491B5B77CF6125202194CE651E666C2C776AD3A241980C3B7C38F2A67101A95 9EB0D0FA79E9B2B9A587DE17A84B0C5AE86EEA9923F28A827D6F853F1365901911DEE464 69C06064BFA884223664D8DD990583788BFB5F6A4C853B641B0CB2299B1D813FC1FE35A9 4B25D4080FEA5D2344B745D51FD32EF69C8210F65BE7D3038363347DB4CAD016DE688B9C 216E194D1A6CABC04BD1DADBAF2FF82BDEEBAADDE415FF83300CF07FE0561DCB0E85EF4A 82F1674C36B4D752ED4ECD6EB91BD7929C01137A0B9A41D8140ACC5300582F8BC08731F4 855FF96B2B63496A8022871558FA48C60F296EC461310C039E6D2DB52CB90DD99F6D1B90 4CE2C17A2B2AE2BA73FD4AC5886CB15AB510377884F1A1217B9D834DEBA3FA57F834FC7F B010754AF5CEF23C0A4F159DB14E4C67A20907277D7342C794075BA0BE6CBFED0F08FF06 F639DF8392B00743E8CA71F7A65BDC34BCA6B34F152D83F28AA3C37EEA33CDE329A750FC 8F9D11F2003CE1F33FB652ED5C8F5F7AD4AD21FF954187FD0074216330371D8647ACA6AE C4A3BE853E01F5D2EAC33F6B5BD135345717FC3144FF4AB061BC17A8DE86425962E54551 3B88DDF06407E569BF0506B02124515CC72717C8B36433C15CB28C36A825A811CD3C05D9 703587D3AE72D7A89ED14B73B1831EFAC06F9CE063210EC74507BFB318F1A013A57CBFD8 E3BE9CCE190F2E7B9AF94F94A579E0433B76715950AEBA6C9821DF36E111A5716FF32D47 3CECFA927F00ADF95F62B4D65D68AA23E9446F1B0B7B0442479E47DBDF5E411075A7D9D6 A582AFC2929EFDC316F7CD8FA5834C71674489E8BC8FB38A2C9362D495EDEB7D990A2A76 74B8656BE86B7006764AAC9574F689F35A39F2F7A816968E704F145D8DF097FF86B52814 A08FA75E38F94FD6A39DDD6716696E5E4BA61F6A4463F83DF465D6FD63B756B108FC27D4 D127910D01E06E626EDE13B13EBC6594493FA27FA7BF336EC4D7380BA888B37AC919AAE9 A675AEBFD38C651BEE1DB5AF22B0191670DD542A61FF3D278207ED89019BE172C9EAA111 3BC3A9AF2E3EB6F1392B3AC72625638E68424E904DDA5C71ECDCC6907D306D68DDB8A875 990023ECBF46DB026766520D0FCA0A63BDF576705A6F419B293F02A0478FC65D3A86FB09 E0AFAF6B4D9EFD15A28A8876BF70FE54C90664BCE0EE2BE9BE32ADF9A1905F4281F2150E 31D99F3C6E3C6B15729D469A2B632011BDAA97C632D85F4FEC8019DBED3CD7D9967B6836 BFF8E4E992A094682E2422BEA722505AFE5A70A55FC5BBA188F8DC7F53DE2844E3C30A05 653B9FEB6D1A3BC92C65547B7C56B05B4EC12B24EE3F13C42CFEE167C61144A6D04079F1 F4F025ECA296EEAFFAB08D96AB8018474518ED61499E66C46FCBDCA878E22FA8D9C3043E ECC833A737ADDF9BF7AB8A3BD4C519C70529AB6FE047499053B52D167E6EA28704D23501 B9F21DF7523118D50E54639D36369A8EA75AAA02B556A768B03119A2D48B3BDF45C61A54 350D68B782420451AC213D4AD107F2DA945C31D3DEECFDFDBBEEA5AFAD11875412B5F090 70388A668EB63E4BD5BCFBD15333D5A6DA73042DB24D1D4E9225C87DC0701F1F4A19DF8D F5CE0426F13F7818C8CED602EDBD33B40B98E0BB690FF93B6B5D970FE5E42FC24BCFFBC6 9743F4642ABEA73A359CF645DB42685464405DFEBC17D91013C17D3C4D775B3F99036E39 E427382CD4E724070E4837F6A88C056A6BCF53FB94FBA4D6EF3008BBD3B1ABB909D0AC0E 6E5B60CFCED8C6B01FEDA9EA9F657E0450631D19307E6DC05E13E484DAC144EB49EBEAA2 C66753584E5A31D4F9F1C8EFA3CB8EA78E303BBEA8178977315E29EFD719EEC53EDE9D37 4F0C9EED6083F06A170AC6F1908630F65E39CA4F37DDA709A4F8D47D5BE7170E58A6C6BF 4E7B1509E2C78A97642EE707155BF622DEE29CCAA01D6F45CA121630C781FB4A745475BB DBAB7BF2116C8658735B8C9ED2B716E1A8DF9F2E8125227898A5E72CC94BA5CD3ED1A224 8FD84606FC7E6694E377455FD3D6CE0E701DA313E47B5188A77851B8EB1659E9B336030F 09CE032677B871908E871AEE32F2C7194FF6CD46750A8AC0318AE98D58AB7E5206F18B41 3A7EED416D769DDA524AE65879FDF1C8A71FB5D36BBD9EC76C663A31CE585A758A2EACC4 05D46BE881D1CABAD8C7E7D28532D982503C3693006A5C0EEAF1B77712C2377218AE4B02 D4C3D75DBB159690ED41966BD61D6357F5716A43A61E06D5036CDDC05E551BD444FC4BFA 286F9B86D50AC5A4CA0F9606841ADAF70E85F3C1D017A4AC2C154F390EF531B828D57055 97FD743995C3C5089C88899BAB672B036B3997B5BEB59D9E76F0DB81163FE3A53EECCA89 EC6678B8D3A8D2425448CB397711B2F681DD610649C64155258D6AFA52114DA6F7CA78E3 719ACE9F5607411D6371B9A1DB2582E55586388D44232DC7FDDD1EC5191E68ED21103EA4 E43D166941849EDF702C56B836B5A78DFE01378617BCB519DFA29F8203954065BA965382 A35237CFC7CDB714425DB3B914702034D20D66CAA3E1122D8DC700D770EEDC770D26821C 7C564637146B6313B65C4FD36264F5DB0DCAAC76A755FE43D2898EFEB4C807CF2D27CE68 BA4D2650127B8DB3C6290C9D90455F2141786C7488A5BAEB17DA5459629781FB9DF466C7 4D13A69A18C3D831BB6913F32AD8F16D38A9CE9DB5EC1EA43F422D455B6EEEDA011ACAC4 0EFE7F66DE85F5EAEDD6DF249979D99B100C292FA9D989FBC0414908BD103F687ADDBA4A ADCDEEF4CBE8782CCA498B8B6835A88ED2FA7E7FA2F5021DB416D5CCA0599682AC6E2BD2 2042E085C3E9339F119511CDDDAEAF098BC63B463326A2EA8C9E5CDAD5EFDB5603BE9E0F E850B3A55AA34012E9197CC830B1568B7CCA12CADC15ED563CE4E276925F5ECA78EB88F6 022B9850E76E7DB84D057D1147AFD721E1DE8591B1DC74400905F511C049DBDB5A1A1B13 F969395862B23DECC497D80D6F96F18B11B2D61A37E3A403BF936AC2AD2B9F4F041EB497 786A71584D508793540835DF874CBB2EDFDF62D21CB5DD271BBCB5CE349DB2BE7D91B8D3 3E1D3EA4F27221F4D6911BA0CF9D571326F7A48009FF3A5B6F27086DD21D5515993A1240 A0A1E9D1FB3627129985EAF6D49865718EA29CE5F166956FAAE87379FE63EDEEC37E68B0 5CEA7A7B01672E82A923F9CBA4F7EE281A91F8BF22AEE6E6D1C85F24D517A110FEF1F651 CE42BB4EE420E5C3F9BCAB8F9A913A57A75EDB3819EAFA68AFFD790AAC0F59DAAA7F57AE 73D02F31A7AB358B27CE35FF8475EA229C69D179AB7E99B0155EE26577E370CFD218B310 8C53DD0722573E6554C1B10AA796386C436E93B29D2018329CC3D1D58471FE83FA4EAB5B F8D30E051837195712F2E41339C6FE5F3D761B72F65D8AA3D8D9AE7567704699196DB8E6 25C64AC522F27CE2E877FF8388E8BF4494605D14E695AAE4E7E8889AF3FC341B08AC247B 1E37E2C206C69B290E1DD31CCAB6D21D4FE6B64CD190FB7CF278A76F8361B96494DBE32D CC1684AE9C4D2F1503795689C812C861E43DB471AA97F24A34F540204130EA3F1B51771D 3492D43193FB6B54DFD8829BFEDC277F349B4522B0C4BF238A8A1F8C25ABB5F8A942B8DD A3C4F32B3FC77646876522BE3960F9BF0F996DE6DC4AAA3B83FE504092E40F5BC8C3ED24 AF73030A9FB6286CF3AF2EF7F36537B95A740C5346F03B3AD5A80B88C4634046A1797167 6344DC6C6E74D3C1382BCDEF3DC23BDD9B801FB45940247384F9C7021DF339E44AAD7FFE 7DE1DF502AAC30F868A64AB7790F536FDBBA46CD1C86DC328B27426BE24CC91B99AE5F59 26112CD8D8EB1E6C9E51970E9E18118794029C0A8C714DBF1EFF0784F402FF1CF3E65BC8 D151319F079DB8C1265002503DEBA30A75C48518ACADE4FBE4A0109A409A0F16B964E2EF 1D928ED20AD06F4B7E804160DDCCA3C52A7B2A2C5035D26DAB932488F5B753EA50FF52D3 F9E6E18B43A64C785DCE11DC9578F9EF07F76D7438FE26A98F8574C7935A04347D9151AB A1C7CE7EB3150C77997ECD452051A7A280ACCA0C557FE5B8934F7268050D0A22FF5C1157 3273AD5FBA3136FC8F2A2A42724D578FFD5582FFF9F740EB9AFB0318A70B5C7278F60100 CD897D1D4E6FE35BAC3267671E1B40CBBD61BD4D1D64F4DE5490FF1C5435B1952B06ED33 6B6AE3D125193D3B737359BC6EECC402F1A292B0A5AFB197DCB4EEB123702856EE1F1F8B 2CD6D71C04F5ED0848F956EEB5D5C22DD5AA7E90FE8FBFC770445852E65CAB9D446E34A2 B88B5F15ABE114979E042E54DE3FB322FC78F2D62412C9E4D846FDF91945801CA7DF7C46 DA918229DF45436138374335EDF95DB9FE5FD3BF3570EDCA4809A26120E4860C36A1F17F ED00FB85011ED7610B900EDFCB4F721911D6919D4633E0AD0FD2447FE1E646AF1625C93E 5CF2E0C86FEDA49A68719F779579ECE95A6983FF70E68406D9CC86B6D63043D363167BF6 FDA53060C6FC9023144D4D066EC1BF54FDA02FF585CBC6EBDF4CF436770B7A467454A1A8 DE7B6A32AB8B8D3CEF3FF38802EDFF4F9ADAC0B68894D743F72C47B39478B70BF3AFC2B3 2AFEE8EF22AA18EB1D0CAEBBC40FF77B67BD27C483471529DC102ED85B8EE9EB2CB00A82 3587469F5C124BF95543F5C1ED8507370CD66BD499128F524391CDBEA98CB162518635CC 6FB54D8B27A79FD7E9D50510FE008F0B34B50433ADBD3BFAC1AF8FFEEB31BD45CB80BA05 1C77240B23DD70FFB0362D44A77F83FCF92B2011FC0BB5707A758E2B1B4979B7E3DD5881 FE9ACD6BD5CD663F501C2F361681DD8FA5FB2BD261C33355F75674F5F631E1A6774F30B6 96E79039D90FCAEB34425862C8ED99CEEB865F56DA7C3FFC10F17E81669C8D4F416928A8 3C1756454EC367F85818D8F11C3FFD77846AAB01FE72525DB167ACE6D489D7CF60CDF7F8 5116156AC98D831C74ED254B754ABD0B95895F511117FB463A2DD1036CD3B91BE4EB93B6 FE22420DC00C0F2E851D6E26D881F65C9BA6827A958831D754758507FBC3AF4AC4904E98 D277AB18F968D3E822188AD4D5C70468F8125A2B4C4BD9A0C3EA1EB5FE1F589031A154BC 2107BD362BB3E4E3900266FF74A4DEC9A6EB4DCCD7B937CE3B25EAE1240A7B85FC284D8B 59D70D24F5967FB2C3E360E9E03F43966B23B4A70CDEEAD317ABA0F45DF7C4122FCE6D2C 285AF3348558A3E1360D03A62AF50EA48AB02B29B8E455235ACE7CBDE1EAA133C14F8F8D 785FA25710E658A7A3D561AB1413E6E1955B66B56A907FAAF95993ED6929EDE95D5F48E9 8B5F0D2B30C674299D239BFACA07D328DA92B7E733BE70C86C8FD72D2F1A18524A64FAF3 86FCFA59218056117EEEC166326D8EE48A11A28CAEBE7C26852DF91E19C49086497778B4 6FE4F67D51A585E094C881FA85B655334939EBF0FA5AEE7C999F9159659665D6CE2EDEB5 919D1F36166732CC8525D4575080562E4FD4809AE77A4B17762AB4FA54E617C71FBFE22C 8A6AC41DC531E87FB7E21BF95F2A1A9A6C9B29673605669B80CF6CE1D4F4F704FDD1199A 604BD4A8820D6484A22CB246AEC0FB625691215A2C0F5B3546ACA6B19A5A2AA324A550A7 9B855379DC2E450C00B6A6052F471B6C1459841027A9D6E492AA6333ECD4B64D1A29DC16 40FC556CBF38E42AAD4AA9756E9374418D7C0B786ED04F0540056D21086A9889BFC46669 305C03D17DDDE18C7BB377010C1ECCA41ABAA08A07CAB069443B811372789ABD738108E0 FA3046220B8DB425C9A018D8A476AB2CBBB8193B6CED16C269E6FCF27E54C89533677433 3CBACDD57CAF6AEA46146368559D1315C5EC51E363EF6A3621C74BFB606D2530CD48F7A4 F7C3D7D4125CE2051A62DBABEE76D67B4C4F3144DF9317D1645194C47CF348379854CFD3 D223FF9ACEE9ACA996E54A65426F025BF5D09F6098EE664766F83017F67D3FE56AD3C854 7C8530E65C9CD5B1469A56DF69BD5B1FFCF47F6ED5E6E36999C4FEF18B44F9DB2516AB62 49B6F7D5CFDCF1A29CF30344023256389A340BB9AE13CF016389FD39E0E7F7B4D2A1B656 4545102C5853FBE3AEC761DBE67D5BCEACA127F55F99C740D49D34B9BF06109B19E63CC3 DF4CB43ACF469B73C5E9117BBF2DA1F900A33A55034C99E36274DCDE002E7462DC5DC5AF 9AED31DE25D2CFE8CC582E67ED5386683736D22D156C4B5133746051514F4C8E847DE954 C5F8864D14937B0AF03AC16959608564CBF4E08260F0CAEB29A0A914ABDCF8793B33B388 785F32005E6A9FADB992891F407ABE7D4C7EDECCB08DBB35EFF5EB207FC9BB8C58ACA545 ABFC702DC9D113ADC4AF65FD44A906B3DCC925D86C07875EA326FD2A1E0B56CE7CD78346 A350F86249C42956E4B5FBB88ED5B89EEC0FB342293AA3B236CFEB8D90AA03176D849327 CBA648292FF1ED43CFEBEF218BB6B382E7DE3804C6BF2201F34F6C86A376BB05F5508632 05019237A0715E796E33D05776EACA3996964347A6F5DA7895F034A303A654C16F183E6C 80CD8F0CDD134D699392C0C91BE7DEFECECD1B9127D8FA946D3BA7AF2AC40ED9319CC2B3 D7BDE6BE248776AE541B5C2A87ECCCC4B9D0CD68FFCFD77D92E5596F77C847A1E49B4C6B C73E08565E8D7CD326691ACD8017B91244B92414A772AD1E0C436F1E8526524004C6757C 1E7B724ABF1DD34F9D52F933AFA664EADD77268133B7C995E82C6681DDF7313E9E8F2F3B 031C50E9BE5A066FE65F77CC15BB59E5FB10B0CB4EE9B8B75BFDBC9A4DC2C7B4F386C956 A2B9B918F0CE101D4F11D53B1B88882F4D48376AD5E19E3C398965D86D12DB5D71DEF7A0 AEC0B3EED0AEDE0E160715F0556579AE491D141F15C6FED9D52A212BCF68380423F297BA 0BBF6163944D650B57CB3EC5B3B034527639912CE98F618F1109120D4F3BEFABFBD3BE03 B5B54B81B1AB88AB9213E077B2EEEF5EFD09DA8F0F217B1DDEB6245D5774B81DDEF20009 FAB5393CA54EE81E96E9895FDA83A0A02D2A3FA49B3A4AD46E931B83B3685A3C066E1DC6 9BD6377F521E82FC35773AFF2F7F0AFBEB00DF1C628A47294986FD9CBAF435AA560EC090 2B161259CE183E9D9F924D0509D7B365DD6CC50E54AC0453199CFB1C51FC9BD1511A9411 A7E79DAEFCFA1164CBA6C22426E1F7F8D62808C18855F8D63E1CFA255678F05A9E57865E AA8EA32E686820862E9A4B69905A15C2375D2670D9F894E462462D52713660567546ED3D D26E6ACF1874EA69D4D9CB1DD8A452997C7F7A80AA234F9AE6AE09BACF5D379F97B5560B 719E17A7D2A4738734555E62A8990D14EBB3C7935B5052D2909A4CF624A12765A1DA1531 80CBE3F6B39D76D8E08A83E5EF6EA3C2912B97142C684B443724A35E38EE6DFA661B9C7B DBBF3A105FD03DBD4C6584F317098A269AD80D39E5D2B0E8637FA9F2E2CBE4068F170DD6 44D5DC05D94F1C38D768AF9FEBD720201E29D6BD816C9F71D0A154E05F98A441D4E71BCB 25784BD0E455F39CF0D103D93596B1DEA09CA465462CEA574DFD63BBD9D174CA9006784C A1889CE6288B40436C52D252EEA7682BFA105EB965D785E91892DCA85F5B3B5AEB8997FD 1E4361FD6124ADDB2CD9F8D2A678E3BDD9D08F79E80543D35D45AD3324EFC5F52C865F4C 27DC41A52D5B47C3356C8421A48CE49A6BF158E5F53AFCEA4D3A7FDE6B774A821026BAC7 D20F5B3C784E369E2113A949BF4F15D4E673382D68E925AC2C426E1EBD1666A4CDAA7801 8425141C9559C7FA32E2B13B5AB01F6A9DA6B29D0BD0727EFC2A24BECFDBFD59BCAC78C6 93BC238FE6A74D9BA22F97BA9F43F4CDF6A99158BF335BA2E787E1DFAD3E7E9C8AD39FA4 BA0623FD59DC4E6789A4AF04328083BF12A57DF3DCAD6E0422482B5B57504B65908414CD 9621E66895AB6910A5C88BDBE275C7B0A0FFCC52D632A62EA15FE984A67FE09FD9924969 CE1D24A2C497FA3318E2352FEBEFE199C7E82D773F47A1B53557DB3D144DE493CC4CD1C3 6F1EAC12A5D517C6C4158F16A0F9A01746D7B06030CF6CB2D1D81A509E92C96AF8ABC2CC B47A6EBDA1C23DA0BBC653DB086F6CAF1C6DE8C87961FCA666244FCB91AB8133F7C0F31C E3E5B091AEB92CEF2BD533CB6564D63CF410CDC19E8F075563CC21783D225B25EE59FBE5 4BD1D375900F62FA2182A46B93070FA51DF5DE7525BEF1AAFB47F911EE4C8EAAD433C72E CF6A7C24E71AB20519CEFAD7C09AD6067C63F0AAD6AAC449E41BF22616E1FCCFAD3EEE4D 51736DA8B016DA3F9710F92F61BBD7E6357506CFC6D6ED535A8E031BD351BAB29B5C8C6F C1AB5697934F76F602C8485112A1DF7ECC6A8A8CF544F1DA54985D1DF04B7ACDA3659FA9 420A4C57EA54F0DBC21B5B69FE0B411D481DCB1BE5429F3CB6F27179D20940C4AAC26AF9 107782E513B66A3F20CB63974A3BD6ABBA291E04D15CBACB3F42B9C088436BD2101EBAC7 0675F919638A317DFBD006986C65A79E92CCFE292F43B779A87D2B94C2F9E3BF3D18F87E 530BB9EFD64B2ABE83EC06B5563D2EBB332EAF23EA18EEC04B9317D181552A1D931C75BA ECD01EC7917C71B8A81615EBF1668EE51950D05DBB3C6B399CE6BEC3CCAA6A857EB04BF2 D7578392E38C333AC77711006B630D3330DEE0FAAD63E25F251C879C0556489B6690D49C 56F8C1A5415C4844AF8042C108D32740CFB844ACE05AD166C73B6A80257EAB3B83F57D40 05D03F15837AE0EF5C7C39D589B2CDAA4CF938AF76D1D018C56F0A5EACA96825C538B050 0F473FBF5803B12E160335271F53057FFEA54E86F49F32A078D5455D91EE77BADC424012 997FB26DA3C145222DCB87F5CBB30FB0D51D1A4985D6417B96E6B4DA7BB5CFCAFBCBF90D B60C90A3A433CE15F903555D37E6E933C22931469336414A4E58B66B51B83425B4719F05 3954F41199C6B56F56F381307B6574767F72A60D005A705CC4487F81428D261DD8E4D11F A6D90C29A01763617217739CAE141C607E33B243FDF9E30EFB69D4A5E334457158E83A8A 9CE58373DDFD90472054FD97F363092B6217E38227F61BCBA51025C97F023459B30A29F7 9DA2756BC220CF98C826A7D05ECBC2FFEC71D59DC70560DEE8AB4AAB214C042058D3F0E8 3F15EBD1222B649C27371D2F634318B1BDB54D3F865CD7F80D3660E4F868D05AE9EEE816 D1673BF20B6EB9010E13D779EB8B79A9096898A2D54F4C66282F1517BCCF69E5A91AF4E4 291946C117A95A3BA08907891020E211ACB3BAA233569B2FE5F3CF9179956E4A5B22FB5A 50D895121FCC4A99211E7C3C04538910E5B5C692CF62839ACCFEC05E4DD8B96C05121153 1FF6080EDE1532668F1CAF057DC41103E89028607CC3785FB85B2DD21C7023C182931CBF 35E34291E222485CE9AE3AAB0E7D5FD2D5836CC8D9700DAFAA90BE083B8714B4A53A87C6 14648694CA2E48C0DCFD458804CBB8A0652B4F4EE190C5BB300EC90BA4007BC4114201E0 D4C913FDE9A2C289162AE6CEBF3662CCBC8EF52D8F3C5AF099CF524F83FA8AC7834B1553 4E253B878D020BB997ECD71D1047B4D4ADCBD9339A5F9D4D6999953E3DE2C12B44E7A5F0 76BA2A3BDBDF4D693B1F3FE1666DCB54C81CE4086FAFE87DC5B4128AAAC9F3C532151281 A3E1D467455310C81E73AB2B1589942574792403478ABD317840D7E25874A8FE29C193BA DD7668C9870EB0126EFE1717B1C9654511FCF27967DF3ED664E340C653F44C29F842D845 70D8C80356749BAE21A1E5B42744B4D6E4CDACED899B57A35A40013F027202F29DCB49B2 14ACA5B62650D2E180EFADE14EA5FE3295BCED8D238883986EB544E17F683B39EA5752C9 09EDDEF04CA8A69C403D28703FD53833E95C9C1BD856FD80FA7B8AA38654C7CE3900AABC 0C50C90E08605110719A4C25BBEFB4E90251B12995B3D5306EC7A4C5F626E63918993CC9 57A54049A1BE779AC8C083644CDCB648142C222D7F79B41E3E5F9116B0548D6CA41793A8 BED7B7F1D1FF75AD5F3C758FABF1DA1ED5E777CC378CF04E21FAE38BB809B0868D2BAD66 BCFE2F30D8CAC791A47FC63D335E71121424F42F3B1461ED9E0C3C39E2C91F3F0074B94A 95F2807E1A2844E7D6F8A4F023F121A49D3F324C98D1520A95FA42BE1ACF4AED65FB5D59 A925F28A5267FAB86A7283FFD107C0772DEEB88A2F7000F02D6DB5AD781EECFEF14FE047 FADD109C63643C92C78D0F50A788E54606BD96B559CCFBC687CDB82E1929B830F449D8B6 BB1D6F5CF2265BFABE1A5AF213678B7042FE8F6B42F15A2DA13E416808F68E3ABF939792 D9DC1C47C8843FF764883C4DF3F85B2254A8A0E786915B1218123981DCBF8AFE3E546E13 231B5C89B4794042768A1BC12235ED59A7FA91CD63AB3BAD7F38AE2A3ED7924A667D21E9 2CC61A04CC59DA48894A3293AC2B0BE2300C95B4F5990BA00B8C6AC3C8E8A7580A5765C3 C998A5281210ECD3A78E0B707E51B8650B9AEA043C5E49216BEDBA219BA699CAAE0ADB94 5AF3D0F0B4FD56D47109FC2E186DFDF79E386D83CAC735BDA10B0CFC2E1E3108D61E88BB 7328F717EE8DCC0EDFCD7C61A574D8EA2A23CE29BC38448FA3BC13889274595B1AF4A328 365291D37AC94A4B73E3A70064C5EFCBD03AED28378157C025A631E1DC8E7BC8C99C1E2B AFF9F4A8AE178689815D529DA2F45587419C7017852519617704C5108C67912419E9D3CE 40455C4FFE344DE1746304B25C091300D80777977BC7F4C677CB4CB03CB6757252BB6258 69A5E7DCECCB60860A899FE3A112FBF0FEB05C4D3851E45394BBA757E65EB1B87766F1DC 4CCA77F8CB8268DD5443AF32261A54D5018F032D00CF3D0866AC2F5B54C7E036456F1B0D 76E8A737E7C73CF41B90EF99099FBE15526E62D3690A36651DB09D30B032CC947144451B 66CDADAB471597B00DF7EAB289A4A2C59D0E7E41015A37C315E76DD7311203BBD5EF65D0 4E228671E127E0A8EE1AC6DEC00EC8FDF6F179DF48197B99494886519EE823FF036E6B54 9672E79A90698673B9DCAD2D8B2CA07B406DA501E1BC32D9C28C2965011708950DE5E36E 38938368F8679B6BBF970E54C3BAE0B68835CD93CE8437E4EB392385D567371FD232CC10 678087A334FDD2B7178DCD656B41467F2FDCECAA402848ECD19F51B5DEB6F61AE29ABBE8 6E28ECB57B7F7F2C7D98CF43B020A43D197BD5F5365CC29759D7D2D1464C44961D719FDE 0189E2EE15CEF17E3ABA9A92D37E2C3BB0BFCDFFFC773CB1368433681149E2474F61A466 4F8B05664F92A4410C3AE90EAC1DD82AEDDA5B8C1F4A66D9110C2175D203BCDA3C130997 0428EBF4B8D8856DF07B29B28FFDC1688E4D8871C80C80621F52E0B240552F7D600ABE41 43FBB2B6B61502416852AE5AF2A6FA224A90BFDA75F73C808256EE6AAA136A572BC44718 6AF2696B32913C6ADCEF5A9A50B1531263E9EF0E4CF137E7F6C7FBCAE89D3AF20A6CE28E 3542E0BFFD73FD7D2EE8F4F458E80AA32D14D1FED523A325FE4ED7E0DE5DACAE74EBBE83 8D240A0D0909A66BCB44C912FAB172023881A668981F4054BED8A6B277D382CADB85A69A 63A2B2F579AA3F8C35B92EED0D6C411123761A0F81F8BDBD9DD3ADD0F1D5C2183FF8960D B3899EFAC4B147CBFB16033A62EB46EB2BD1BB5D77F07262D6FDBAC7583202BF411A4416 06DF3FBA1CF381F4B0ADB7B90D74E649DADD0CB10B8365FB033759C49D0AFC3EC02CD51F 5396F4E6574C6D051B85A669B9B73DAAD2D1EFEEC63C01C88464F472ED7C9BCF5609992B 2A0FCDABEC4896A8B879342A09788EA8093868A9B45EB356F73E4FBE85B2E60C55CF475A 1AF8415B6086838A1C14A23F8CB86BA8D64CDD5C9B2E2174C92B3F7F803794BDA9CF5E17 48F419B73AED9E9F1E1983F43991E2B58C9CDDF7F79FE3367D6C6D32341B3C49189BBBC9 87E07E590468A05C82B0CE2E341794A3618E6E6C5F6FFD4F4476968711C8886BB67012F3 9EFBD3D56BB5C38E990032D1299625896F85D1DFB288629C8E549E06778922AE3F72EBF6 758A878BABBF93ABC352CFBBA1B2FF68CAB45F5582672A864DABF4E217F2172F3D9CD142 2FCD09F06C8BE72CED2EB5C23A04DA42C5F7A54073EE0ECA5DBA2436DA317D727F984532 437FACEC8A05870B38041CCE315FED8A93F61CBA6BDB046A1ECEC9E846F412C52CDA5298 6BE76EB4C4B660086D9DAD10D55D84BBFE736270EBCCF24BFFEB34E663C9FDD6E450F5C8 D2045E32BF7BD5AABD85721C079968BD6C580C4456BE3DDF5EACDB42BC8F10DCDE9F5731 C816C367B9AE7AC77B1BC5BE6D15A983BC1EC1A200D3C0C2267984162EBA77F064A0CE54 3F63EA00B07D94AD80A02237271CFB2EFB813E144827835187CB4219D9E5B4B5FB106515 EDAB0ABAA2ED80696020C8DA96A26A86F675F820572FEA01ABA1395AACD3773F4837F98B D31C5FAF474A56967187F7CE6552783B92AB9B3AE0CECAEC028041A8A703EA50C6F6FA0B 2E2A00ED1C2643DC302E128A5219D914938A18DEB9FF76C175936E269C54124DC0B816EE 4C38058D1C0F618E5D4354B7D1401EF194B582C5A986FA727EF6EA9A0872014FB06EB246 A7335BA95EF9550C727A0A7FD19F1054B765D0DC97354740F4EB39ADB956A33AC370314A F1AB5D362F9083663DFA5380D1D333C5DA24343827E044B9516E70A93A9DBF553D433DD2 B38C07D9ED091BD301FE23DEC195BB4FF77DABBEE913C9DFA6A9F6C933AF20F993458E55 EF02FF0647BF627079E354C0313CF0CDB371EB8F097DF792B49276D891E576A1265755C7 CBAEE3A816531C9AE9AFCE52CDF48C5CB9559E337B6128AD90E894D4E0AF0FA9DF7F2AC3 86F15B3443A97F2CD5EE6771B4B8A933247607F72FC373B6FA25E8629B99471A865ED922 F746F23007EF07FE5C49AA191534716920FBAF59CFA935F38450A540B9B43B117CBADCC7 735A3F3B8255E77C17D36D871455CC2BEF8EA6AC10A37C3BA8B7266F32370B860CC67840 CD354F52F1289109271AE3100AEA92864B3278B0A63B0039706C13589C595E5F6E59D960 F0289E07AA2DF1033F84FDCFEB0BE73EBD71C6642AA5EFB6F578D42F5E862C9A8A431C83 41C2BBC86136964ABFCDC87762C2005FC8202E54093F0D6A02DB8C4F90CACCC720797776 2EE20D69097C31C6F3800327FE498DA351829D12E2FE73DFEA8C37A88AC788FAFC132AE8 F65E4B8C569FBF203277AB808FB5B38D95A34CE47C8D28DE0F4267B65054C5927656B2B3 4D7445E56AC040011665F23AD198FAC491076BFCBC36324E18691C409A5E85FC9E8A7012 855AA2CDF7524997B688213DE97FF97F17854048CFF07FB4A6CB0B11ECD7ED2A018AE5B2 510BB9D790D43019381BBF5B7BCB63546B3832362487E9F7809482BE2459B75BE7E79E76 1E4B15A818E210D9129BE006E448B8AB044A04922C8B22ADA0BB59FE24156DEA4B0B6F94 EE07A52FB08BCAD8C78751972C33A881E26370629CF9293CB42B55AA80C7F6382A9C830F BABCC49A52D17C037C13E1750043F935D1DFAE09D63229769472F6274BCA75512B0FEB4F E8CA021B739D901B3003CE674142A9519E0FC0283A9C9E3EF90E1D06F218BC48728590EE 82ADCAE5FCF1ADCF4772B68DBBF146A63F7AE12C5D8BBF61D0AE1EC957C0615307200F29 EABADABC1F0FEB462299755EE396557CB4379C6568F323B7DB59887EC2A5C1AAC244FD34 6798C4C004CDD9B8715133DCBD38AD2DC0ED2BFD21FD0495FCA6E286D8FE981BB34F1FE8 AEBF681F447D9985B9B001E4D79E1EB8DFB4026B4966920BE8185742621C93CE00C26B89 72DCA3AC9A76BA3A62E8AC40D2F6509F956B6E21FB76CEBB6690CF202F178249DA7BF2C6 783A79179C9F93A82BFBB10E142062953542A9D2528DF0C287883F75EA3C3B3AA0F9C352 59973B90290F876F04B2D6C2D415707B3D8B5A81CF55191DF9987CBF40AE2722DEC0CF6E D0CBCAE87B20F6ADA0B7B7088B866AA782E12E303010D32AEBA54F8E6627A53D088ABBEB F731479E52042B53FCF4AEA68601B11E77F4F4774F800F470CB9C39D3C2247C7688B5132 5FE2132DAE92F80E83897319DC5F36102DFC37E7910B04C3102AD6D1D0D158AC2127915B A5D1F184C649F6D8C3AE4382EB13C477B657CD168C48BB6A5FFA8C5AD85EFB315895C19A DD870B4C789958D47DD6FE1840F7E43895055C7F04B078DED1F2CFD90A475ED0BB670CBB A17E89CE8A73C9482BD9F172C8099C4395702CDF3B5353A52819FFD24A01C74ABBCDBBC5 60BB2668BD5FA55C2FB61121C6AAB902BF81A03124D5393B74F58605A3858F7C9508C644 2E27A1104BE35D9152C1066D8F9E38A0EE5FCE1935A117EBE88F39069BD926FC51CD8317 CCF4943551B0C17102F478B33420292C2DEEDAD6FDC2BB18A108912F477794A8FE012ABC 395A22055B4ABC30E5FBC718658495130A442DF1C2E36DE7C033B6C1A85B2FFAB3BF0EC1 083C811B44AFFF32D8AFEC0E93764D4C47D74FE4A05E2AB593A454C78E029BD133AADABD 7A804F820A28FA9F0B782295C278EA3E0A613E9AF7DFCED8350CA99E59E08928CB547789 9E3D2BF8F992AA305E0E033D6F0DF1BB396CF5902A86EA6B1DCCC79FE50929F035312D0D 81CB3D7168FA02162988E13B574FB8F529AB98A540EFF49777DA3CF223E2716D7ED1BE0F EAE8F120342871988FA4DBAA1470E158352EF4D8DFEBCCD1B9305B58AF1F21213D83AA30 A8CC975F26445EBB3708CD38C5D4D01341F3BF77041D20EF27CA5E47896B6A14072647C6 3F0E9A9ED1ADBAF79C88FF03BA1C2FC07751B796E5B0ABA24A342248338131D9901D15DB 0ED1BF82EC5F92CECEB61C2E3F388798FD949E82CEA3DB2C8821BC649C9186A511620B9B C6E96F0578DD1A6E1B69F05EA676B8BCD755F6321DF42FAE66298AD886F60613D5FBAB17 02A6CAEDEBDE341ABD65C09AA71C23478ACBE6CC14C5823718428A61B30A8AAD859EE4D3 B21F23E88871877DEB2E62A1BD10E619A6050DB226924AB08FB5D19DDEE823F763D70174 AC8718D749747A0F31DA30BD20AE3BC4F52D104A585B30F6915B1E1B2ABFBC381D84C7A6 CCEBFB9BED34125E57ACB2D2F9D30BC21F9DBAA6008709BEE19AE89372889CCE0AD90422 504EF786F53E53FD9A907CE0910AAEB77F05D5F163CB69FBAFFE8F6D7622EBF54D5A4659 B577E6E3EC81F7079AC62052F9A4649AA582E4476E7E75FCD1E51E064769DF05E92346E0 9D661675FB9C139320A53A856FE4EE9DD4152E7225EA13ECC4DFD4D3C38C6077FBFC3399 4F6251A4FE87999741996C2F86142EB28F01CFF6886B2C76ED729067C7CC27031487D5EA 91F8D39C44FBC27E157B69EC28FB1458DB12D705AEC2C6688A8C5008FFCEE16B2F6A23B4 6B13181B38EBE612BC0D2D660A1D538FF5D68906CEBC59D2DCC520BAA9C3B9725D8BE115 FDC3F780BBA5747D8C2ABECDBBA427AC6E940025D9B60E428359BFD171D3ABFCC7118DC4 D0955B4CB7E893C32E59F624CC861166D89F602A0B8939E4B573E22EEBFB86E2C53153E9 9AD4F7CB26DCCBB108A68E1DF87EB78EFD6EBB5F7447C984C780B46AA6CE9A61B5922112 B2C50F4C014DC5CB90BFC1C443580A7C566ACC12F4243E7052BF49281CBB22381A356E5A 52CB4E2AEFC126676D26E34523111AD30600004D17D6771F1B7A7A60F674AA29B6744B3F C152C80AD08EE330ADE7A9C34A1A524194DA51E2CC7067BEFE5B482BF06EBB5F976F3BA0 9DE6B7B8C2B4271893B981630A345D57215C697FF53358F57F7D3840EDD870579EE85F3A B01A7B276537FF7952A39BEA00A2A1ADDB66B2E1981892CCF94527BD90EBFA9B022F790A 2A727F5C00FF5384D818E23EE165EECE1280406134028183777D0CD1743906272CC807DC E8D03DAE2D5A3729FB1DDCFFB97DA6CC6A0AB33F9978D555833AF15B430BC067B32F8E86 CCFC17A38CE652F29B77A507F3FAD2C0FAA883187C557544FBECCF821ABC3E8365AAB527 D91E46BAB9ED5AAEA784479067E592FEF67182E0C5A764D77EED57D5EE516320A95D3B20 C4EF1EF47BF922520F1C51BA22D0AE6F23506F1F373D3A637DD3B67A582EB5EB2AC1394C 2E0EB319DD6E97F6DB6B2983D37D1B8BF8DCAC9292D47BF5BDB9954D3BF920E708EE36A1 787659EB0FCFDD17DFC943C474D6044797E8CA2809E4FA5676EB91B8F9121A43C03BD22F 619067E93581D0EA3EC10F27231F213D98CA78527627C9A9DF1C180441E449E543F4970B CE5847305F6EF9C40A4C6AEDE8C9127D5F125A645663D851343E72C98126CDAC5BAE92FD 1865953475C070893A8CAEA7172D4C7A207B7E13CC32D6454BBC53A218585F18002A38D1 18FDF18B9C3523132C5A99A720BB82C04E22D65CE8D8A4BF2F9659DB642F0E14E97E29F9 8E3CDB62F161AA13DCA06F1F6B69FCF326FFE56EE29A348C7A619D8F6441401334A6CD33 44640835A76F6DDB70757AE5DBF3354CB97605DEE7CEA2BB8F1FBC7CFC56EF1977C8F35D 3C7F8168687D5E472293EE5A1CC8182F7FE8771F525CABF8CFA19290F83E8AE7EA997C4E 129CF802AB7B4566A5556ED1E80AE169EE9DCF3E942EA96461DED87BAB8347A266A4A2A5 B366BA560117B0D0199C96EB155714D43A36F1EF146E3DC0265DDC7F86D7D278F66FF3F1 0F1F0C07C4655781E1038866CFF3A53E525EB43BECBB96D34A971A6A695352D87BC99B0A F4F94AEFFF9F84EE6414CD281E529FEE985BF2713207A979F04B8E9D4F48441F0B6B2811 E2D8B78F8BE8EADE9879C2A17F95D1B9070275C123D23CA0BA42EF3B0D95F053BC3D6125 07A14D320CF637BCB289CC2D35B2875AA7CEA25CCC7B9D9D0445E0C5891B7E282C1792EC C52ACC839FBA492841CB78D4D7EDA85873F913F9C5F929C8D346053A6673334D6C3CD35C 52FC6F67B6B35D1D2DBEDDA78B5C2769506E388EC0C99A37B76CD63A299923B99628DD6D 01763682F4F0512C5E34E11D857748D8804273583A6484711CC8416594EBC5848288FFF2 2389F0713BD524132546FCC87059E1C32DE1899503334EDF313B51F04ED9182FE439C65D 2101512FB46D541CB13DEEA7B7826827790D279858E25011615949A3CE2243192DAA542C 53993C07E871C3A0FBAC276B8D320E4308597CE147633CEA29E2BC489E50EE58396F4FE5 A7C9ADB62FB5485E160306DE3E43464457DEAE54DB5531053B10726B3F52FE40296F8DEB E2C9D7F9912713C5F7FAD306D5101A3000C966D1FE6DAACDD207F35F504B92D3785D5B17 5E6EE23DCF9E519713BD4EF3041C4453B4EC77354258BBD08553187801E8EB93CCEDB20A B4D8EC34C2ADA37759DE5736DB50390BDBE8CDB3D258109CC2DED4A1C298B118F4E532B9 B589A32AEC16C7CB376E98E7369B318AE2DB326EF6143F2934ADDD62B5F46F200B75802E 6BFAB9132AD2D6BFBB6DBBFF2D6C8C447A8250EA4BB6CCE803C811C459569C59BF5AEBF4 005A1623EF83E0987290783146D18A9C0A17FED4346BAFC4712FD91DBA8C1527E0B8DAAD 9A22E8EE144CCDEDE3B525EAF12BCDF2B0B14F7FF56AC00AAA82483A42262B1343317837 8E74704CB5990BD03C493A4F7C9DC07F697C71F8E780715102B4A5CE72C33F06DA26C71C FF6B3CEBF7EBC3BC08838D730543072FBDB41ED5739D5E92E678AA046744DDBD5DAC48AF 30C0106C8EFC3A4758F312D022A1ED8AE8517C21918DAEBD6AF8CA89D2FAE6A72CE18DDC 0602D0B6D2C97B2D83B13E55945B26B8DE5E9B81714DE04F9871AB153403AC4F64FA39CE B71DF9B5A5FC5EAFD4B343F2AFDCA25708C3E9DEB41DF4EFD46E50475E844F5450385935 6E1A07B42929A76EF4319D05CEA76F1E63CC21BA0835AFBA27D73E32114B259B6BD2E1F1 1067BE3ADA49F430809E4F5B05681CC5B5A6FA3EE8C0B949886D6419398E70363D0156CD 42DAFD3FD3261AC1B50B5287D95952DEAAF012A5AA0601B61A69227A31A9478AE693F30F A4B18E7E1559037A30D667D3487A3EB4320E1A29F8247324BD5F34EA9693AFB220B080AE 0E51EAC707B25FB9252A3D5638FA3C9D7D29C2A2241CBFE455DB516DF731F27BAE4430BF F2E527374FD642AFEB9ACCAE4D151B669107C12336DE0EC9E1FDB818A534AE8A46DAB33E CE3C17382C4FBC926496E36AAE5A0044AC66A4624E6416F7098D2CAC17A010F7969AED2F 78991AF10B579A18F8723D8CBFDFE30CE76CE78C2EBDBA50410D9983384DDD9D396AECF7 AE4D48D324CD6E5EF3DF999FC7115053021EC6E45F79A5E0EFEB02A3929D19011EF5D6DD 5AC0F9C96DD2868F6A1E00AABE25EDF263E44567FD135AC553B2F66BC0657520B6F77A97 64347B0E456C3C2A6A1F801FCD1C3D780EF22B92010EE92760D22A4A29BF9FF0493F62AE 28B792363F440094FA1F3CC32FDC3DDDE85079024867782A8071DBC80DF74D93FC5A8E37 75CE3ABE1B0E28E9E8B0DD2F03845582B7ECF590A35FEB671AFE3BBD407A1024DF0DC143 4BACCE0B6E5DD6978B4DE528440BC232C939F1C5F25E60962A433027BEE97F469E23F4F6 7066B3215582991D03544DC5AA82BCFBB63E22B8B4E0D3F56D91B5FDE2A4947842F6EF98 0201A3D270A154FADBFFE583335DD1D7472F1E1BB366F58939B28C9346E9CAEC72EA04CF 2B75B0BA93EF4953F98AEAFB8B9101FE5B4C6EC1CAF79E71140D042F52F2BC091E996245 194248148739CC5AC038BDEB9D69D3A60B2C45843D5E3B94B2F35C5F49F5BDD1F7C5AE79 5D18B44116511BB232699EF456A307703C092556D95F82144193558F48545878473BE39E B1B6415EE0C55947A6F492CD0CFB0793AD5E619CF87B2B45B2CDE897191F11F1250C6CED 743A257A70A083F032FFDC4B0917DD4A9127182DA88F76D08BE26982400EFCFA0F97DB7E 94CF7B1330AE7207D6D83C0AC15B25C216548FB03C04252119CC7CBDDB91793817EC69DC EEEDC601032068801E25E3B470666B027BC54542CE95462C3249CF5008990524E4456792 9DF458082BC75D47EEA4C16C02461D3B6F1A7BBD1F68191FDAA79FB09426774CA890EB08 316060EA4A8FF5BC34A4249CB6F4EBDAC9DBBD468927483141CC97903FE9ECAFA52090B9 756E1B266F5A374C6810BD8236AEFB2920E362262A2FE94D7AD81B538CD9B25281A16B57 82C2A0FEA5C419183CD20C64798E7915562A4DE0B0DB0D1234FED68FC089925CC5A22A97 10139806D680B610D0791CEED599145999F1A5513069FC54BB0FDBAD182EE0EB5D8EAB84 115D6BF93FF6C1A4EF6F2664A04F17CC9B5A0FCD9AB061D7FB0568C4B490C11A96143152 422DF2A82145754716D67D666AE179E349D8A0EEE5BCB2A01362C8B218479431B48A3689 CB32965C3955A7D105ADA0B88FA87E7A0F637ADDA337DB9CA6A7DFFB501CF841FD3ABEEB CB0CFACA5AA0A7CD11F53ACEB8D5FB9EF038B64309372297AB0CB67E3A9BC8522F4B1464 E20D1870AD94E7EA5F820E384EB73D4DC3D8782A8E5DEA6E03D37F88415CB874C915444B 0419A006313B5E18A9733A5CE1F46108255C15B9604D4C6C5CAACA33BD6C41153460CFA0 C7688DB0F70D0959E0D84CBBFD6BE9563BBF6B415B2446D13B1F46C4DD1D440A193A50B5 BDED1A439F58FFE7B3EBF183B671C981BC85E35A2FE8422AE2AA7A499AF58B0F507E7B14 DFBE6DA5833FEAC3BD66E9431E73FE0A7E2B6B87AFC261527F79A321B20579BB3DCDC957 09A8433CDE9CB1B98649716464CB44610F08A28DBE9ACF8916F180D2F42B54514AE711AA E8A52D651A34C811D182E8ACFE5E94AE7C7D04B417DB07076CB50DE0A8E36B8039A4A244 5D5E0F61F875875116736FD852B7BC933F725BB40642C0456B68228AC999A87F3A1A73EC EABBA0AD6E4A12ADAE06420BD6E43167C95B137E453CC4DED8F0AA09A0E23FA2467800EA 9B1EFD1ADBA74D0AA2CBE280379BB727FCA99C2006DEC4A236331BA21E7CE3DE5D4ED245 B8F265FC5A98B93C216E770FB7A931BFA2ABF6E73B0B460C9918B389A07B078E5757E790 69D4A087A27773E34FAEA257856F2744219040EC06F3466E4E829D84DAABCB4B5BB7D99D 3EE28EA113191B38C367DCF09EE815269E6E320712015C3FFFE9BC81C78AB579A40DC167 1F32D7EF3BF6EC6BC82681A06D483D29D1664C160C5F8E3716A391BB75093FA1B70AFAF6 28F7969A5CECECD2D6ECE75B71DD53DEEE0C028088CF8DC3964373B736524170C92D721E 2E1CE04CE2D0F3EC94768A73D43317F7769D685D920F78061361C31A047E6182D9CC1ECB 3E5834E36C20DC3AF85A4AA4D44CC2BBF9C128625AC54A4614CB5B916F79170E718BB8D5 697BD1E9DFE9CE203A8A8403DE9936401F7FBBE83AA1F4E98C4A4EDFCBBEAEB5A5AEC48C 42947CB057BA8E65F9002C6C382698DD816A4166A4F394E832EBB6FCE0F54067EE7C892E 2FA37CF73794A234F44E1697F986767FA689008A0D1DE9AB4C14E209402431B2CE250501 9B8992DA4D48B7F37723C0F1A6C39DD2A01C8DA45CFF0D17D8C0F59474F22FEFAA3B929F 8CDC600DAD67AAA33F95EC1128EC601DFFE6059A4FE082BD03BCE82C115DC66C2EFA7EBB C7C9FD7EC97DCB1EF5768FC6B10F14E206FF2C2B24522BB273CDAA2BBD5421A9BE4710F3 E6CDC50B078F0BDB251A84A5BCF481AC8B3043C35E424DB78A04D86D61F491EC6F679FF2 41490BEE5DD2DA42B010AA7B04B19A7381A75D0561CD5724CCBD601B1D0552097504D481 1408702801BA1773BC12B5FB38CC5B607C62DF22BF421CDA6C72F06847B1E83AB237D841 A5D2A2A77B1E084875EF50AD8BCADBAB6E4949D05C79D2EB4916A0D57C876AD23928304D D5DBBD4B44BB5844F5D0A7E25613E6E06D05283F69E79F777EA9656F8F562A218E75654A FFF174C6476DFEBA547B7D31E0652BCD0E561EE6BFB80DF11D1E53A8CBD750F9D6069068 4BF49C89DAB880FD1D38168700D7ECDF811F1DAD3AD64AE8FE68A8C9A9012359B423109D D9387B5CF4A11A76141E7FA701D9E6878FEAB57486C77D2710AB21D3A8B0615075395F5F 9C3D2EEC83D70855804AB020585B2BAF816D34ED9568A15B3C4B3B6CFE1FC066805BA932 0B510CA7D4239DB04EFF44A1D661D55AFB9FC9A3F6ED195C67CBCA8587121CC010C2BC6E 798A26510C9BCC1A4D1B1CF9854EFD7580F1E12FE3BAD663ED6F48F2A6A674EEBDC689D4 07833DF0C18D457A7A7234282CEC258AE003CC9625BDA6C8FF98931210CFE5EF246A529C A1B517A38003F001046A4F3F591F29C6FA4F96A8541F6FB49028D15916767C2570B995CE AE66C5046BAB717A29A33270AF8070CE014EA44E16E4CB88B26F63505B9A1F449AACC0B0 725C740E681C7931ECDB55C198CF1067E299D4D675FC7D01FE08A76389E7CD0672717A73 7AC2DFEE613580D06A4E5887780825F0F8B08740AB297CF7D0C2EBD4C7C6E9F9B9B3DCFC 61FF14C2D84E1D28C4FEC7F5960936242E2CEF07804E3109133CC44CB5DF7BE91B68775F B6581475B86351E3A84BB54F4B97E6CAA649279FBCC5DDE237F7C2A29D7693E326CA99C0 D14F48AAAB33376EDCA7A7C4EC699797DBF4C705563608F104E6570EB662E5932FEC61E5 90465D5E7B004BF8C58D0B2A710839485D00E656360EBFB3BE8F0436F9A978A85F1CF6C7 D43D2B9B1CA62667E645D9046FE78DCDA3BD29497B6076DD7C0D458DFCB6F2BFC6F63D89 75950A5DA9186FACED6923ED2414B5F13DCF65835D94E42F481565BE6BA95E468EE6E911 68B5ECFAE42AA2F4C4A92EA6FA84ED7E0AE20906BFE8525BE3AB5255D678A118F64DAA13 E4F5281484730235D9EDB0DDCEDA75371E2EDA5D5418B57723E44C008E7DE93D3324DCF2 EAB5EBFD2E346DB63ACC910871B1FF317CD0F196236F5E441B20C66692DE67D682EB5CAD 462957ACC9F1CA88E990DF3BB78F146149FAEE77AFAFA14794BBBCB36E479E078E02DA20 281DCFA6643F8ABB9B1972FDA05217F1D9282E7869C47F2EAAF9B709E707F09FFE52FFCD FBE5A9915A0C894D15F529867B187C30FA5717ED93775B884A4F5D1E477425E39B0D6F2A F676A6E2DBCC0387A43EBF0B104EE7864EF34687FF494C87CE5CBEB76CDC3DD98A8417A0 90520E475A0159F0E86D508573F29CA53DF733461FE9017D9E03E251CC1AA8101C040DB5 0C06CCC155844A9694209061AEF38DC3BA2CD80F112A4282A8556AA812ED84CFF17CAD33 15405F400EE93B955131EFEFB7C51D0EA207DCA718197656349D21E55C4B8CFA909B1147 ADE6965734D24C13FBE276AE65C7AE59ABAF3A2646E45E141A1740A5126431C605E41F3C 0B34042A9789583D8ABB857D440B7B30E247F2E6381DBC1E8C75AA563CABC635D40A09F3 3E1566BEA7744B1DF8C068EA03E4CE9A7AF5F1E2AF83070D47BE6D15938B33246520136A 2AF7F030B05B26BB9A371DEBF27EB96E8FA173E0A793081C78BAAB7AD3DCC8CAD1DFB4ED 83B2E0092E0D1BB88BAC1DE6FFC11366B52FDC90DDDF5948C039D98BC5E60C61052646C7 CCE949AE42F08ECC36A3BD2128331647C426CC3A0DA91714B708A45F5577B64392108DDE 33CAA99CF55241E48976E1E475F9F7B346B011A9ACC0BEA3B7D636A47DFE8D3F3BE853B9 32E51F8CF8C5CB227F9DE4E679E771CF50782E44A32C7123651BA770C8A214C535799D54 EB3C1BA8EF987068669C0E67FDDDA0101DEA6256530D8C8B4A0F67B79BC3652F48E43440 F5F544B4415FD8EC019E9B5DA09264A0674D0E0BA051C216A7406562ED87F2FFF4CCD0D8 90BE4F2BDD0A4579A3DC671FC031E82AE9F820D5042419D545A69259A4EC3F5AC708A766 84F6F746F6FCF2C43FB9E2C31832E32F5E5FEBB01D96842DE9157741A3E3E0E90D793AB5 33BCE207CC5898A54A792C9F056F38AAD345EA663F37B0DB809A6BD93F81CE6815D2A171 360F8147498DA76A65F06B2B58480BD869023793C1180F4C4E4C8347708C23A2399DE6DE 88A4E1ADE746B575F1EF22A73DE4132AF6289C6938D7CAFDAABDED00735E2F68D2AF320C AD801E3B79B9E5B3CF41DE7869F93D3BFA9B008101CDE50F37AC2D8D5621A0CACE6B9E0B 5E24458699F91621BC5E9819FAEBAB2FB56FFB3019C0388B64E367E39B96E98634351C7D 4FC2EA4583D2F91AE75E79DD94422076FF718C033139C4C848ECE0E6F2C9DA266083E7EF DBE60D39B2676F6DFB5C63670A4F0928A91BB55DAFD515FB3F3AAB8C1373A99E5C2D72F4 5C0EFEE2C55136D1698E8D54FD5A14FC38357D73EB7C7C7500B3FF4D5EED36554636855C 12216E57490B4891365BDAD5178F9DDAA2ABCF9431D0A8FAFA11A1D89AFECD238AFB8CC1 A9EFF90158AB5754A8C2E85E8816294C87EFA6886F97F9163460E48688047548C66A0D6A EEF26A24D5D710722014FEDE6A2D8E4BE6A5683403DFC73E5ABC0F9BE4FAC1E29080985E 3BEFB524E233F4E146E07E0F1D12C0450FB7EF2C25AFC60CCD997DDD7684C1610B5953C4 70FF78C3F442B32296AF7CC2C33A33601C9ED84B07E6348662A1846C8D9440D97BCE73DB DF55020493242833373505C80CA920223431FA09127DA777A203347FDCD9D6FBC842AE2F 5A628C95BD6472DF11E51899A639189FD79E2D771261FC2EE668D78514254753405A2E06 8219047E29A93C9165096EF1156157691AE53F5BFC3F98D7F149B44E099AEA885609798F D6D626DC4809AFFA04D7B521E20FCF690F40863975C26E5C78A9ACE71EF8E6D25D330A7F 6053BF7CC333F1AE27513EDAE4FD1E210DCA8D4EE6760BC300ED3829249B26BF621093AE E283713831B730726978FA339F42161E03DD8E42541899417716775E55E6F97F14191F4B 080BE830A3BC7A72AEABF817E384019DAFC03176704385DE0775BA0F8B1376826D7BBC52 BB3AEB373708B489207F6901FB656AD0BD911F414BA445891BDA270666CD34C5646E5F3C 75F6B079F33DAB2DAD1882BDAC6411DF7FA00147FC7E5487AB26BD25E47865FEF13F26B6 AE3418FC0551918B00A8B425FC0B2D7D508EAB0D3BA3C6978C217C0FDF9E53541A1DAFEE E80492CF7C4BACA5B15EE056139EC45153D4DB98EB5DD0DA08C1967C7ABCAD1B7F8193FA 0A0EC7B8007FC8EA068BE1E1DE5EBF633DFBCE98D4A2701E75E2502C2D3556681082EB40 FEDA74688A2C2422551748C7D8D6C178B172459C41A9244033C6B946808F9822589C3BA0 913E5CB736FA46E1CE7381A75691EC9D0DECE032AB6F58A48CB46AC62BFB3BD9FC4B811D E5F564D3FAC02786ED9DEBA084304C2E70A6B6AD01AC1247C06A93CD36C8D527557F56E7 BE2966D31AA2F1F803EE1130729AFF4A15B574E803EED98E0902D1353A75D59AD9AB33E0 0E48749ECC5914ACD50C6D580E87097AD9FA7CADBB1EC34964888FCA27E9C2C1C3BB1EFD D30C3F347DDFBEFB939AADEDC5FB1CD993B9701CBAA422FDD13C8FB7059F73B0FE232D36 2EA650BF3E4F789434FE3F34EC43686F0760BD477BCF9C1753344964FB9FA0C4FAFDA050 C22413AF858DECF56DB211D9100111AF38A90CFE151262371EAD7D0DD55FD438F91C66C1 DA93D236483D0F75C54DC1E7BE91666BBF6E6AA1BF071CDE0D286CA3EC8082721F12B2EE 290AAA3858B2206024DF735C997BB87D18B1D8A269354008328C3D59DF2E6BF9EA832ACD 84EB406DDB6A7B4DBC98C37493FD75F1A389A6ED32613863378D5B2BA3FE06E312AFDDF4 4E972F1B6E430484FD1857BC340003E3E80DBDAB907F7DE951A76B4B871B809D9A8BDEBC 10638CF222194B9A7872439C46C3FD29CDB6C7E46E4572AFFC566956972E32E0F7CE3BFB 4F6F30D3A382645B83E26AF8FDC4CEE5B7FC88EE0D003175A857F0B1DB168141ADAF460A 047AEFD281DFBBEDB6FF9F101D1719E72584F7560A0F7463A0284998A064ECA5AD29238E E44A4354D4A8B72A225B563950CB7652E49CFE4E82524513BD54265709ED9557AF570DCD 42EA2628A707361A5A40FA8AD047AEA39A2CBD7F24E261EE0089F7D81AD63809A0C540CE D2573109E914C0B4E0A0EC1491AD916499B2525227BF241070D07A88E7E1593DA98947C1 DB18B2B051AB3AEBE19F19AED054F004B8E986502DBA78C3CC2ADB0939DA74A5F5ABDFF3 CF45EC0165BAB76CBD3C74DDEACF395DA37F169DB4FC6ACBC8E76CC0DC9ECCD0C19A910D 88A04D4225722F7EC40A058542104FA001613506E7159520F5D51078641DBED3EEBA4509 DCCB30FF0DD9973D4B55AEE7C565D68F7565854C8EEA4A6793AEF4F97AA5F621640DEA9E A65E83CFD145ECBDF35DCC715098D15645228E42EB6DF3ABAF2C1A0910FA32C081DE27DA 7A87DBCFD37A6147E83731FB01379BD7BB3891338ECC49649EAC3D2D6AA7AE6B687DD4CE 0296EF4F1F4A33E244C38CDAAB7728FD5244B5E41803F3D23363E92104D22C1E3F662A7A 86E79F3138C4E223CD6580F683A8DC1CD44BF283CDD9B8B3258A24F149D6EF3911931653 CA7971B045E215B94A8E4A78B040B17CFAB47DD74AD66550FB3A4BD254C35E3656CCC708 F5238EBA310934B7765B05C45C6379D071240AFAC6F9C85FB0A3200A44941720C9BDE04B 6406AB9EF061A02AF3AC73ECAE83748856742B0589C302F0F5CD1CF83FF0605DDCB3A882 E4AF361106D82B37CD69091EE4D4DA5CE2AB6B56CC9C2759CE0FF4F3C18D8361EF228EA6 F7E3488236AD9B5173159DBC0F3B55B210D8614E2F74722288CC1D7413CD59D8F4F5DD4C E69889CE5DB57584242B02B906B2B6C722DFD7950F577A4363D17E150E9C1547564C6AB6 C2FCDC0FD01DFCD1A578AA946BAE392637A59579A8D08F58CAC924493B25DCA1EAD974CB E5323B2318B36B0A96C172B9B74F42BBC06A6D1907EA7E07F62950FBFF7ABA745CD1D45A 37C1ED7D7E2EC267423D5DCD021D3F6E1467254D034EAE5EF5F1C05B008CA9AF78FFDA30 8C85A6102DB01D4BF0A0F3CF3632A15B4A56DDFE0020DD4ABF672C7895761E3193C9ECC5 AA660E18B042EBAC82F154D79A9FA50FCA72E55F705743AFB1BAB187B2E3EC543D33C223 D61FDB4B9160506270BDF59D93631AACA444258CD143B80D7D90268E98CC280E50A7E15A 17218E53FC431534C96574A6D40284E4B2F4080DF4291570ACD6C964FAF7B9E2BCB98567 2E5791A9BE0098A221471640D48806E72831313440E8E2511784B1E27466A92DAE3A7C20 B54895257F65D18FED954DCEC9598F4BD98A181E55987A894253DE08DAA99C02F14C8BF4 71C4E2D047A62A78D3ECA478B47450A48BC79298D0673A2CD03C6AEBDE113E0630223DC8 44769FB0205A61CEA64C11E32F6E781402351DDAE166A7554149C0AFC1870F744CD22829 B2E7BD854426A192B54C1713A9218106C9B68FCF53BA20B1EC0E883335675201319CC02D 9FD5F14F62809C95D47B8582C202B9C04B4B4A2B944F3081E71B6DC5DA9A85F106E2137C 965A2A8716FBF09313047B7F9F6B69F08E5E2C1B78E4E3BBF56EA46BA29B940C454498D3 83430A8387AF79FE40D2846CBEB37989935DAA83B2EB8A9746542A0069249DC5C7BA4705 CDE464E9FDC294F88D892A5A555F0FA57D2CD287D733D2D6752454EE2463FFA0417A791E D8ADF3F09CE5AF0F10E73D71FF5F4E875EACAF807613E9B7A35FD44C3AFF2FD52A7DC478 096BA345B8E3BBE8C13E55D5DCF21247B52CD5C2A9A610D53F4B0256639A331CB891B681 42E1DAD59AA3A1072F422E0A61EA26974EF92DA8678169ABAE5D26C09818E64A3872E3D1 E1457EAEA68162894B3B26B37E174D54339932EA752881A6E0189910F6A9E782A6B568CA F0905D965DD4B95B9FCF358997C80582233F6CA2998F2DE0B992DC48AA576B2863D76934 DFE361222A1EB0859BEB704FB09F12E93D2F5E00A3B7F8D5AD06B31F61D7B2A9FBA37F35 F9D173C16F0E63A44138E1E44BFA04E46718500A304D98D71A8FE74718AF66929FBAE285 E29B38BA589C0EE8DA56E6B96A167603D8430A25945695E3F88A779400822CA053612A31 F31C18847A729A6FD31F86CFDA6BA617DF38035EEA2D2065C175E3E8C8D474F9732A1D94 96D0C86233F56C34A1AE19B232D52D9188EC095F2872E52F8EC0AE0F93A81E77C3844A9A CBF325DAB400040C9ED4317E7998E3704A2171955211A68CE108858DD7425B8A8A012C46 8998CF28E3DAF67A92E38AE8129B55985476824BF8FEB5D9D6BC2F1AFC5ABE9327E17258 3A302383CD5C7E7CDE43933EF293A4526CB1BB0B6441BE9545D0C19122DC3C79A67E00AD 06864E03E0FA63FBB42F74A6900D2C6FD31D282696552390ADFA06678CB21DD4C323E86A DE941178DF909C17FC99B88A886E10D2E2263B02D967AC837A6EBF6DDCE3C7287F381A42 2858DDE91C583FD7FCC8F96DF467636D5A1CF059138F6F932AFC6E6EDF3A600ECAED5785 2A3A4B2E558E869969C2D8105100815D95154B983BB73ACD8E8A680CAD75710B826EA2AA 19F4AA850E48436BFE8A234893C0544895F6DF61009489A8E94AB90CA1CDB9BDE34E022D 801093FE02A4D6427FE7B561EDFEE0AD1863D2E1F4DF4C40EC2AA35558B71FBDB722E466 09C8F7A55C1454C4EC8C708D53786A53734F3CF66C478FD593D343FB5CEB15AF9BD1EC12 D570B46C091628C2B842D3D4A500F3EB5E41DB2BD78FABDE8E1DE46A3FC222A4A5378CCD 4CF9138C49A78544ED0AC3A6D62565A30EFD569AF5871EDD1572FB6B07C2AB74B63C5E7E BA960B2B1717B6F1DCA6B270478946F374387FE769B1BEC478D1404486458E26C4CB77A1 AE3AF60AB559B77BF4269803F4DA1C2F5747F298371698A7A6971345DBC9B57E7B8547F9 5273C293BC7A3E5FB424225CF401B0FDEC665FE99C7EAC79FBEB951742146199D7F914BD 14A70D71DD639B5593DD640E30694C609BB81B69F1AD6781F593CD5C6FF82CA943B18DB0 F5F17C747575D03F4246966613EBADA2057C0636BB25A7F25EB3F1FC28CD621A24B7853B 2CFD889805A536C1B17878A76E7A49680D4363F79D93AD7D223CB7024114DB46F28B714D 7EA4C408F109FBA7B8D36B1648CF9E5F27790654E48D7885DBD33C855ABC5FFD3652BC4D BF0083961ED0ED2739C9CD7DEC40DFEA8D0F0518530ED2C771216843344188FD6651FC66 2338805689EF657FE952DB2991B5FE23900FE0FE24CB8A0CFFAFAA33CEAED052F9D07D61 CF2DE8B82187F754FDA4B9A52DD2FB5F1FCEBEF46CA40964147DC9751B4178AD38E75C4A 556D0A4E3DD5E8782E828F1ADF8E7C87C779089439A67F4891034C181141251AE9AF211A D987392C1933CBE40C3BC60A8ED4016B54B41E6975CEE1AC72F4DDBC6C84F9FBBE2B9CD8 6558EF0B340CAB3E958FE51F9BF8063AED9CCA01DF5A45BEB2DA1C7FE865DA431A8FBA82 68E994902AED2B5FB497A15B371D10C4FD5CF9F9030C490C54B45EC532860CF9887E1FC5 D32E30A15AF79F168FBD06D9EE4F8AD665C2A27F4AEADA215B87B61F0886B73294338481 B54A6B286F2D88C8E515A413C36D07BD86FCC6C28884D4D2F522E55119C98CA08F9ED8DE 6CC37FED6A32281001F8528CE127B643EDCC4B2250C3599E956B751DE606E721CE21FDB3 34CB0E882C112FF0D7C556CECC37C2689E6B99BEE81DC23B8811456828FDC5F4F95E71B7 05E0967A083AE9806D4C10E0FA73125931255151F4FE7DA7F30D1623C4315FB984AB243C 5A26975C8B2C07A97C846E3F8120F247131866E3BC63F4A2C9A0B812DE94D6788CE2A2FE 0031E154F58DD8FE867F73CA2BA38818D6C2B401491CCB27BB6481076CF4595412FD0C63 4191309B65C4B32A59E5B31A9F531B46AC6AA3A84676D2C805C0461401801A56A64C66AC F17C23424B35F44D6D80DE1866A4121E1D458360695D592B2011C28E1EF515D14C736867 D52EDF1EFAE142836D249A73511BE4A0ABCD4D4D5F0E284DA0F4D79C6109BE44170E145D 289F291A81C5AAE0FD483E45812443295A33EA509AAB9D90B811C38E22D28ED8B86C8035 C6CBAD6C82EBB22385EEACD21E36F951D97A326D46A424AB10C79D8FE3F3EB1FEAB10736 5AAF787187BAA1B782852955C4B95269C81B102A1CC1F971F8EC15C21011750F447636A1 896BFC0AA3F4291DA47FC02F489463D3E937DAFFC051969C5D0AB12575AA4B305AE9D192 F824AD426184C4BEF50BB2BF5DE5A62FBC4CD9379F12450B064080447A00AC34E2689D79 AF1279EDEC7A4B1DD91E04B47529502118AFE8C9062BD7937358FBCCFB1127161E0B4C05 48235EB0B625E4F05F42B02DCD6795AA47DD7F863ADA096462AEF3EB5A6F18E0D2A905EA CF0DFA2C7D4023BE571F5C884B18F997BD1FE1D8B35E0A69ACBA53C38C165CDAFF05ED7F 4781CBFFC3CED0F73C5EA42FE8C98B341ED41D50BDF79FBC5EABD7314EB7BCFCE1785F9F 105C998EF62D2FAC57D3DA1A4388BCAEF017EDEEF585CF81024B6D52F1386002DDE2D4E0 AFBCD3C1DD580CBA7119DC111601D1469F1085DB0A7B4D620B12F1A6F02BAACF4F29EBCB F823D57BCDB1B38DDEDDDC0DEB38B30F159C8784D4C4A83F47747739694767F5258FB7E8 5FCE22AE54464774058416434BBF1F6AF4974A474B47E3EB313FE92C8974A0B098D815ED 748A3ED447EF5A0C7519D21E039829562D240C68FAD0FFEF625AFA1AB307065025F4FED5 B5B32834035B3C3B68A60007238A17BA3D3E2512227D679709EADA20261C004A93CAE073 2926A44B95B2A77A3504B3186C19CDC7B2C40F4E9CEE5A760FF2A4DD4FFDD7D8762D9D6B C1EE568465D9578124927AD6087B472E4D9FC96EE0CE06933BBA667FA6FFE0636029A657 92C0B6BCFD67A0E955200BBB1C0AEAFB673E19E0838AB29AFA44ABF7C5C0E851B9B79240 6375ACCAF9E9CAD98C8EBC1DDDDA7254FCAEF1EEA90551D79FF402AA8EDC9A435C2466FF 2A0F4B4F4BFE5552F7AD06CF6BD3695DE54FBBD637D6B7AEB084CE38531389477FE2F035 DE52E1971E653E0C4F2758C3BE7D4BD151FD37324E68EF181FAD9389F7E877FE450D3677 FB9F0158E709F443B9491944110A20E8677569C6A47634BE2B826A90C358B2F3AF37C277 E1DFF3387382643A5810E53109C724593217048E9848E4DF069CD4D0359B4EF4BCE7C1DA 65E98B1DFD683FE1616A8AEFF80B71808682BB9E589F7B7B93680647D6FBB17B6E5D2947 9EBCF3DC164A0BA4FB11E35B7E53678E500E3FF926B392A22C5B3900379651D13CD2EEA4 61A1D9C795B8399B277DEEDAD0CDEFB6712CDBE48A4AE1715045BDCF1728FCA741451485 93FDDB1905250DBED851CC1026A06E90923F3090E9EE4AACA10A078C18DE62317F8D5C0B 60CC65A9AF971643EEE73AD08ECF23244B0F79FEB5EA76EDC628AE76707EA5907FF7D4FB DF6971F4F0AB9D9651CD2B857F2DB2502E22FBF48EE5BE4BD695B181C6F27858B06D0DF5 1393DE43FF2600797E6755256FAB5858A18DA4B9ECAD9E8660EFFF6E8E435A5FE5E0A5E1 C8F6ED331563A08E7DE867F1509F1A607B126A88CA476F5ABF6507A83C856B9F04E9F939 620E645C0C86EB2B04C99C3A9194C10176B552F3257B04DF3D27CA75E958AB6D6A48884C 09D2EA7FEF1DDEC9341E81B7BD8B79DCD54AD2F638C18DE83C2489B788F611D6AC4D8472 9BF2B28676261CDBE0DE18ACC2E1755C30E24B38800297446837AAB13A470DF47E4CDFA9 8EC51E9FB471B71D98C7A72B26EFEB8E0CD09DD8C48348A3BD08070F8F1128DAA5061606 AC8BBB8597A4BEC5CB96B6F00104189B0D588E1D9369519AB1D65D512C5A9A96FED4C20F 1FCE28B19912FB1093AC8F32A7DA14C63DA39E9C37AE1AF015382D08AE65487B348FA8BB 17E0DB88BA40F6B8CBB7AA22F0A9B4789DE5DE4E8E1746FAC21ECFDEBADD3524EB90E74D 496BB9474C92D22C0C31ADB4DA618FA5D37A16D5EF063E6AE7D36F5616AAF6184DB2803A C503B39488CF32DB0A7D3BC773CC473EFD9B5A1AD4AEF13069BDBAA90871BE51289FFD94 490F0E112CDFA5C81FCD6491582586CBD27B638407B668C9C74B14951DF91A703EC7034E 8845B45B05993C526B312C90008F45DFAF605AB547DFA885C758B909BC14A63018CF0A5C 849242AB26041D75FD3A84DCDD883D202714718AD030A0D3215614F6B658D7933AA5700A DCFB73BBDDABAB2923EAA692FF1F9EC310A054756ADA4BE20B23D45002D7DCC67CEBC601 7141446F9005E6F61D715E887471C9A8F0C41ACBD2EE09EB4652D70739956771488D1178 1097965AE0677F73E68D39AE457D95AF13C4F442716ADE069D2A83AC9C2C613220094E72 46F2B9829B85560B2EB75E2C80715D81E0C64C9CDF6903C69705DDBA04F956E206F38BD4 2C977209E3FAC5271E0A472AC0FC43A781F191AADEC5D53D46AD9B52C2E3AC19D1F20C75 2225BC5E9B359FCCE69907EED2CEC36092C38B5E293BB2891018E61E65B117AC0A8BADCA 5C2159655D439AA23128DA9B00F7997A880AFAD2AEA5DC145060ED0F3FE70440580D8734 BF39EB804ABE60287FFC7A30A423FD1A4DD76841409365689FC168178608744A6344B373 11E4B2A40E317FF657FB6D954C03FC48E4D5B9859D0781B36834C304407D9D0C3BF218AC A029D8447BE4075C58DE014C0840B1F776DD072F221CBE6D1B070D222AF259E990273C1F 91B3CBF15D84ECF1C461D5EF99CDF04F1D5008A461760158FAFCF1C78F3572C62311E4BA E9D92AEF3A3B27EFE49C2BF06D22591B9776CD551F3D07F4FE7C934FA74395887F5ECF64 11B25C8636E4CD287A555313A0201B708304600B12D53179DCF12214B7C7C7935272A674 76575437768F8B5E626610C854C3721E080EEAC51D0BA5A90D1B7EFFD7F026451EBA6049 A38FC431A26159C0A65B6E8EE579801B2CA1B447BC7FF8C26748F3C727C254C54662D9CE 3142AB2F8421D7D61B22B9FBF027EF1B8A7F91EB70E405A63AB29F92DC7791290360FA66 9D91B49A5E55AC625AC729122C8E50EBECD426A197025FBF0E2A0336F1855380A1D02845 5D76559D58265C26EAB83AE6DF288EA478B7AFBB8DA3915EACC6CC055D66984CC26A419B 4A05525E624D7E48167E489576ABAAD20F6DE528D1A4C71B6284567CCF01F03E32F98F3F 789C9512B8EEF6759665F186CF7FDDF5C47956A334AEEAAB5BDF144959CAC3996042E6D1 1F67DCEB78A927346A8FDD992FFAA37F0C10042BF4AB2E4A2D5F1985EC053F322E2882B3 12F9FDA1766FCE329002F1D00D7B2FAED8D53F62EEB413FC6ABB83A94C152B6718204C58 469C535247CC235CDE3687E4E60D01B2843505DAEEA3C8C472989B1E8FCD7EBB88F0376B 1F9B8D39DD745A2AA5CBAC44E9E7F6B95A2A05151412148B2D395E3F9A4B036F42600DE7 2D7889B5BDBEB15CE380041601D24B1D4F8822804536457A9FB21B6F309D373E054DF307 FA5B68FEFF963780EB75FBD2A5DB77B4A7FA5DACDEEDA4E07E6ABE00960F5D7AA865FC4B 25B109CC5513280163C9B35F6D9F9F2CF0CFFB5772C1C33FC23496DFCE7C0BBC856DAEF7 746211546427CD615DCE55F5E7B78F83AF6785BA4331FDBDE4118CE9F505A579F6C28CE6 31990E80F630F12A7F22B6EE9F24F784A53CF91F273BD276B22E10CE636E2D2FC53B306F B00985ABCF21A9D72B1472EDB38763E4BF325EDAC67311095ED2641DF74F15BDDB4ADCB0 DBF7F74AA5425F398E79464182485E4431E525E56BD01EC20DED16ED4CB578F874EE55C4 E032D1760305C79EDA14F43FA2B5147A097207DFA18DA4B9ECAD9E8660EFFF1E0C649F4E 3A5BC850AF86EA92D9F191BB408C69C52F0D699903FF43ED4EBB6FB0B029C5AFCC7B039C 1D128DFE0685333278E1C2BB1271EC8E928CEA7FFA85BF2499611409D573D26CFBA7EE16 3A8983A333B1E70895D1196F5FF4810733EF3776C24CD2E36BEE0EB93EE2743CBF9E746F 6690E5209606DC20E65BA3241AB21F8024405C1651E8E243AFC41F08B2C0C8207DECD574 3AAB3F49AFE2594D0F353D9D561FA124C377C3FA1CD33474C6666EF1290910A458A63307 AAF4434C83581A61AFBA787FF88DA202742251DDB989A8EEDDC67C744882FF11BD6DE59A 270111ACC9C350B469F3D1D79E17A5E8CD969C130D204012656C26927DC6F5CEEE5E4CB1 42003E6980F0840AF2C2ECEBEE6C7FBAC89E0E10EFF48DEF6DF51FED60BD8CC88BD486DB 641AD325455B9ECE288D6EF74CC7A3787893E2429E2E5C1D1632051E7202BBECE4E76FDF DA457D8DB87924F2E83F8867C14848E534CFBB8A0156C89061FEB4E45EF27199A195AB39 236C67C93C53BEBAB7ADC04D14014CD57768EC029A58E0B2B62326DC0A4F775B32C7AA5C B272585AD6932E788082FDEB5C36E34942ADF5BE0DEB3E91F2C53549DE15F8EB8C248BB2 35CE2F3F3BCB0186ACD058F97B14EE6988B26142064DAA27E36C666C8D83DAB7B5C5E91C C71B3C612D3EBF83E0472F237CEE5CD023B7AEB8FF49BBBF2DF3048FCDE8BA62184D38FE D3E67EB91A4F64BFDABF5A4590234F61775109AAEF0CF8FDB790C2B710115309E048FBE4 91519F8EEC62FC11D2EE048A03573185D204A8555ED14D37F498A9961DAA77CF2F35A546 C4E908AB6109A5D21C7788CDFC51F40D0C230EF84ACB0102AC202ED36D8DB8B9B3C1AC93 9EEF1393E50B99336A0912BC1174B815C45B764398F1C75739F78BC496F2B563C028E6D6 31D353D463754740DE3E45D214C55206A817B09FB44DBA5672979E28179A42250FA11509 27DAF7CDE602959C7023B2B61B50505781BB2E63C99502A2644114A1F6E2DC860BE6164E 7F3FFA29FF09D934960CD5B3B583CE2F4189A1FCEAD36C44439D54C83807E01E755BA433 7F23E8B57C2E5D0547EBDE3BAA0DB640970DF413496D9FFDEA83AC7A7EBF74B7D9C19D44 46C3FD448C761FC66C7807F595E05104620BDC3FE18795BFE7C53F6CE112200EABEDCF33 4112D8AFC803C0AC298D3A91E8A92B59D87FC7888B0102A360B1726F4CE2514421FE5B1E CC31F04137FE1C5295E050602D6B6A654C0BD8990DCFEFE425329D44425A1EAEFC8861B4 CE3FAB5298FBBCA5FF9DB63C725CAA5A766D67BD3461E9DBF6AF15A516C9881F2C552CEE 3F305E4A9F8CAB4054689C06D8B81029C9286F9ACB90784B12E50428C5D019D627454047 DC13AF11E7FC504ECED4A7827D66354419AC974E6DA5BBD25004F0F18EDBA923B8CC03DD 14A8E38AE423B53710B669F88F266124AE60955FF03093391490467A0F78B3399722A870 C6663369D8B6EFA8B407B95DCCE99029831D0C90FA08F04CEF061D4B6500181F67847186 E741EE577EC3606A0F3FE2C57935CD3854A6367FB69AA5B62CAD428F120B543BB19F9DE7 47822534DEAA15F2D0ABEBE9C9DE62D5D50FB76EDF8C1169ACA3BBB24F1062B3C5C450DE 1EFFB4FF15CF11E44845FA3520F3B86E85D4D2ABFAF009F8DEC2FD16FFF5D8AA9D5ACF22 4EBA8957812D1BC2856EC72D8D9858979787069249077D297CC2B5616C4DA565B25AC0A4 4ACFC626677D424FF83779A9C4B1E0152E867B46F31DBFEFDBD18964DE947002DF987A0C BCC2A3E27C78B91012C2150016E760F012BE9C28815C84AAEEDEB115810C9EFA1F5A71E2 EADF28E3281EAF153380AD4F018940FAACC62D3E1CE76111BAB077C7AF25E3818919F28B C7970F45352A4603DD38BB6D708531C2031EE0E02D3101D4249BBE0F1E5AAF5BCB9CBD12 441F6382340F4A833CEA017F345B62020AD57981C66AB048309674897D2BEE1B6F6AA7B7 FC0763DA4FF64B20C2868FBD765B33038270A412447731FA9E94B4F0F63DFEDE4F0CFF19 6CB261EED09B3DB353253B2955EA1D3381165F369922FD47F08B7583C34DF138BA8A9050 AB015FC99D39A5C476E61A5BD15F892EA7B46FD343BF8359F3A20E5E22A8B7366BD55C9D C4F14793CA5AA3FE8AE78E350F2001AE136926C30939BEFC91278AA810F789325B20186D EEBE864ABF6C1298A7FC9A18B4F14E85F6D8C701AF1432069E89611795A61FC50FC30349 9BCF90CE68759EB8C5BB96E6A6926CE06B7D72A9BBA9783060BF9F201D3DAA456B29DCE5 6316B6CDF80EA61750BB04F8FF2398EC24EA4E86A181523DF11F3B7EC023B6216D643223 77A755107B9D4E97C5C7B674F0B8DB490DA822FDA9F799D43C4FD9F1AF9ADF0BEA5FF100 E7B927C72C399168EE311359E81EA937C790C5952EF960CD32BEC55BD71FD17B4F3AF99D 149F643A25848B6A2E791C531FC148C955F14B79D5203BAE0CAED5575E84F8BEF6467A3A 7C765CD79BABACD8EA9C037DA5E0D1F6BD0FE4834B2F3C34ED0933DCC08A74CCC14A67AC FEDA19AB4E83433FBC9FF1F82141B68D3263796FE50E3F71EBB8032D19A013EE73C6EEA6 7A63A1CEECB32806DD7212109CD5C3F84A24AE57DADA405D34399697AFD5F0EF328EA727 A2AE5254442B2CF1DAC2860995B7951831DDA42B916722AED779B94DEA58984DD71F9C39 960A540806A180243AD0900B339E1E023B4E9CA7E209206D3590BB18F3187649C6E0D44E 074D1CCC80076C4913236CBC34DDFF6941B864750AC996B3DE2D3A9E59A6821A3F64A3F1 B5079C2FF8A782B589EE416E480E1570AE301D07AF808D790581196DA90ECA6BA2515E3A 39124F5D211C171F2ED9CDE7A2C9889ED2211CE7FE6ED76422410E6EA6CEAAE7A820BE3D 1A586EBC254EF30B023B5F7544E80B63490E45BC4806B06093DF799B8FBF833B0D91A8EA 67B0342DF34D1AD0DDABC677D66A5D373A88FCE539D3712CA318F560C93C71401300EA9E C848BADFCA74902D0CFF46847D84327C30169F5C2C278366D0FFA18E1639D68D18E6C11A 7BD4FFA74EE420DAC2A7D386BF6DAA4BC08CC8DD31D1A36A67FC6F54816CD318EC848E51 1B69C579FB6645F3DAF0C4CC20030BB203DADF2BD78B9C06C9889CB667FA6BDCD8417753 7EC50795CFE864C1660AC41F7CA3360B91045035C0BC448888E1F984BBF4F7C60255309B 9D0C901BA9C10FC7178FC221B3EE2DF670939E9A35755C2E593DD331FB5B2FBA9F6E1F87 660B88AA71DA1FD8127A848748D9BAC1F7E8532311DFA88FF05AD582A480CB342C6D58D6 4895A30B5B81F8EC1475FC400BB1D9AC3C5706D5729A9BC3E5E8DB1432320ECDE9D82999 E5DC4DE3BA999444A1DE0E50501F426F9B827DF326CBC18516E171F72F792F84D17A1281 5F72E0382ECDBA959AD2B421F032238F64065E7150A77F2F3022BF97D554B30A7889C3D4 549895D00F3BB6B2B773789D849C80F998D971613BA665D475A0CD81CB0656B5A0ACA7B3 296CF78375A658AA9F84FD07FB97043D970B7CB280F145F0BDBD97F23429E853BD4656FD E59DC5ED15DE6A25DC2EA0523A86DDBEAA88FFFD52F4E2B89C1BC9A1BAF351124664EC71 B3418C77428A986A31896D1935CE52AC6348C73D3F67CFA44D5D8F4FA2CD2CB250688CB0 0023588BDDB2F092503471BB20632C6EBFBCAB20465F7180B3B77ACA96509379479482C3 D48B9CBB4ABBC9662E7CEAEEABF9F51729751752662AF751BBCB42F20C2F3138721D0017 5B424C46A50803BDCA952A5BE05CEBD3531CE99CB24A4C491C56CF4D62A328D33D5C183C 457152AB091FCA3BDF0D1FFE976625B8CBA2E69FA83BE53DF56F575AE947006B8A8AB317 56FF8747E45389A475C83027751C9BB68351F28D8DEC1CF4F57D06E040F4946C259B34F6 319FC9977F54CF09BF194C10E0FA7312593125515FB99DE5D39A010E4C93819E1648DFF2 E08B01D7D820E5F8313D64777618BD99C833052B7A4083FC0AE34AC619FA33D1D0806FD3 0771FBDEC94036B45DD7C4EE4ECB5E76B9FB3DC2ACE6847010CC251D0A9C8AB9AFD179D4 7927D1CF0EB7D89779AA2CBF433A714F1C65357BEAECCFE1FA326066085FA655A9FAD54B 6BAED5F8704B8936450E3D26A021C037157A88B3F07A767974C5110DCC82D754311C56F5 BCB3143A9AD76BEED11668E22BB0750622338DFFBFB03624ED99B18D693DF56EE8E15D67 0A4C1302740435BBC7619C3619897811760C0FB94BCA318735ECB983A4141F166A0A4204 1E782330579B828F5FCC05CF737B531D29F6F1A34580C7473903F6F1D158A5BDA65D18DB 41ED31351C18AB6B2443FA18138238E8F6BF1363D1F987AD58D420ED17E1ED276B2E09DB 61E4215F974480D4888AC1C5B2F469CF76DE61A1FCC6CCDE44F63DC121E06E83CA08340D 4A710CD4EFE77EF471E5BAA0295CA59224724AD53F4C64595AADBFA445FF76A1459E4A07 C692C105944C8D041CFE73197E6C366148CA1118F2B713CC875C71A7B3562E93015CB991 4C5A9610388BAC897F9F9401AA575F08FC6BD48F976E231016C67917BA11708F8DFCC694 995C477C06FEE5791FED9C61ED61F560B2E28211E6AC80D12347C1A60973004EBC8ACF18 57111969CAAA98349BDC393D3FF6F52AAFE0966224D4BD6C5AA3F0A35E987A590936E6CC D425020F556C3B99F6E3AC377E3CB05D92159E1CC7D0E5B83E8F7FD2707118DF97779FA8 9DDDA281271F28F2F8704C4421469CF2F23DF03B540EC6E2DE0E2A3B238EC14C322A1A63 2595DC40DBC540C251B04C235615C8D89743E3490C0B9F423C13250BDA6B60DF66B72AC9 B0ECEB05AA6A3A956DEBCA9924A4CBD934EE3CC1536F8ED257D6C346FCCE1728867F6566 B0A3D4818B87FD2C50733CAD9CBE2B8D86C4F83358AD515630F5699635305A966647D230 C8657C4EBCD0760A414D96333FD4BE991B08D509608E55028F0A93FBBEC68F5BF13B6B65 7F5088FE1DC882B275E018CCD94BB71BDBBF43159F2634950B8D79A280FBE66766204C68 FE47A2A362F1E065B383C418FB8785EFC69B84FF86A63B82E61130408CCBEDC3A6EEE35C E940CEC7FE5090141FEE040E338FBD12DC08CE43083366432DF28B9C527FBC9E3DEF6949 434C8984FC9678E7DC8ED6239E91BE9D9BD097F214907A0DD01E3558C1FE5ACA1FFD8D93 A260AAD1602DAB811327D8F4BF3410FDAE51FCED4DF202A9937D3E7F57A7DBAE43F4489C FCB3FD47D52505BE2DD8FC9DC7C847955A270BC78C287CCFB6B21F322CA264A7D1A88FFD 41C6E2B7A0B59CBEE639FA0A742B75CAEFBC0AF7EC1A8A664DE25FA168C70D0813A31FE0 07D9A33899A93ECD971C54F1D487D8CEBDBE74AD577848437EA0B15380EC065B3ACE2FD4 489A23CA3703166681CA18C1EBA3ED81D940193C444C0195EEF376E980D23BB546D0750B 138261C0B594A2245DB4E1CC3CAA0C58965B79471ECA68133910306BB5C08EBEB9C5624E 0206F203C5B38C7C9F23330B34C5E62AE0AE848AC005C421B0E66F7EFF0576F20349E10E 760F5DC84D3C9A430B9EFE053BCE9C61F6C2264A3C77D5B0E7A10EB24946BB92AF7DB2C4 D7D24B7786739590D9568D89F6BC983139A9D403260EAAE95490B88FA88E33A7439D33BA B80956F058384488903029A9816B16017DB6A3F5D41FDC26FDEE843961306BBDF70CEA3F 8BA2C2E93FB4BEF7B17F4D8F4F10F7E9FBA2191A4108A1EDFB9F1955F576C23879F8457F D24A05F0ED61C393D07DA5C96765963D192F29995E2984AFA85CF287EDD14ED00D7401D0 353DB0DB1C53636D4C4A9BD50DFA252E3A9B39DB55285062731B569A6EB70EB32AB8038B 1004B8D014E70357A531EDE157C41BFEDE23BBAB9E86E48500860987B366DCA36D309C63 79A5E6F126DE4688CD49ACD909678ACB61C8AB443547FFD7F32A0D54F4EA7B1350FBD900 71613A7B74C6A480B34983297ED93CD0D613F99A4D2DE262D1B58647FBBCC7BE69EFAB56 6287535A8E32F64872EBC5D6838A14B11F0E91371E814390EEBBEC69EA754A659A8A9DD4 92E5595FE4F4707481C79C8F4DD30BCF0BFF02769EE5ECEBBC5577DE44AB53C1EF7AB8C6 8BC82B3329627B74A83731C79DD2B0C6CA3F2031423CE60BA03C42CD24CC51C92B45B713 4D1EA3F0E8B1DDD89BB44257B718D243D3906A77C2B365157D37E474F551A6C903DCA63A 85508B081BCEB4339AF5192A4DA8D56499400EAED144BA785F3F7DE2FC07ACEE409EF49D 87DC21CE65739DBE30DAE3B84B66C6445B26E01772EE17D0C8DC1BA7D44EF762631AD6D6 99989FEB0F329ED2133344E8BE4C54DFB4580B6D2016A39C8C528E33FE4CC7C7349451E9 B5748D584BDFBF7F24539212D38285B717C9DA8AC1449B19CF069B4427C8BE4B7C682411 53F02C4A4C24AF1B6AF6E7279D5B8FE2AA79DF9525B3882246BC8529F4553B0C7F677F0E 868363AE72A8023CDAA49E5EF8AC6B9DF758EF950F1CB2115196F39417FA587543555065 7DDA408631B84A6A8252A9EBC4ACF0EF1DA08745D04D369BD742949BF282BBD582C728F0 8E9FA4D12CA6475BC37001489F00D836185D51AD84F2DF58DCCFE377DD76A49E53AD9BDB CFDB7158BE1DB39A0C30801591329FD27821BF5532CDB3E0030BF341CCDEF3601CC68763 E31A37FB41CC35BFFBC8EAFFA5CA61CBE2EE085869EFD3AADFB29DF7F18538E0D286CF03 36E7F1F8C5B986B842E850E7646DDD8BC73D6241EC3FDC2A595E0756728C34B3264685EA 9307F7B298824965C747DD1910178AEE3136D50E90BDD4FA058429A05D2874D12A5C7B3F 6FC52A86A9CCCE9D2A83BAA521FE20EDF3B5FDCC7FE6DB874A142082B61901B5AB99C35B 8B2AD1D1472DBDEA134837363660498FE784D78BDE92FEBD46C55CAFDE1F656E66227BE6 F265CC9BC662D80F8FC301EAD5360D42526967F40E7C276191E528848AF2CB8C15AF3E5D 2892242F933E44A9D4DEE21807AC5A1AA02E70B506EFA880FA8030150A39B6D9D48EFEA9 252F193CE210E84C443F88040C501A0726F87CD51B98F8BD87B9EB9AE9C6C63F199AAAC4 1BB04E8C485D8E2ED741A538278D599E820D0F0F4C3D389FB369A95AF115103307024278 556B6B80B9B6628D39512E0CF99268A0B4CA5655833A0EFF8C3E14663F4C4CB57D972DDB 2BC57C01EAF00BEF410F5503B7FE7F6556D366937FFC30EBA5EE181ACAA4F46610C790B3 23BC4374188D92F68FAE37A938519F703ED9A7D120CD48E5484F67C4FDF4168A825CF3ED 6DDC79F18F2460A7F7405BB9B350CFFD7829C0095844D6390DA1C769DA554A4DED659875 652D11F22851596DC45140230D5DCF4C2938AE958DCFFE9E0B34ED0ED76C3E22D4C2D044 A18B7B26D2E2D44BB25788D7246C1D7B2D295278EBE87A314DF0017F35B4A89580A1C2AC 82E86E590FCFF476D52D30F36ED3D42C771F2F49943FE9CE94E74A671E3C621738C85DDF 1CD97B497399E46A39B20A76C5FE428FB8A2A0FBFA5F3AD8380FCECA61D350E51ED09B74 455FF8CA74CBBC5CE5150444FBC4ECEC3E1F491323F7D77FAC562333E3C08E4349BE9C35 DB4E81FA36A74561F978D60080E0314030D434E1C4F3185ADDE54D907EA82B9EA7DDC380 27C17B910A9ABC884ACFC27D235D1B9D2259351EE3CA46073AC20D12B27399D983144ED7 41F28026D2D201ABC6BF265F96A426EBFA521ADAFAE218BAFB2AFE82D8A6A97A29DF453D A5BB81947F7B521025DF2CAE5BD0A916F3B11FF12416A80085E3E818B80915438F3F3138 378232624921D4421F65424F4E77DA420AC2E6721A7FDF5F1ABFC04630893DFD2FF3BD05 5071AC83A140260BD0337D84C373715D68120580BC8F5B2CC420A3FC86B0659441A2979D 3595B43DDDCA08F24644C3AB26ECDA8799F8682C2B49889D45729B4FCFA9A7092E2F9474 9B80FC661AE18F02073925A150E6AFDFDF3E7E58E4FCE58032918C3885CB94FF85C481BD D7988D73967814FF86C2464C7644BE640FCA443B3BE83CCD91021DC220F2F8CCF573F449 216AE383ECBBE396FC9F749F8CC96E05F740D188CAB9DC3AE51AFD5DABB2D3B4670FE021 13BE235CC8F6DA03760CDD876623F146A952B77FBEF5230523A14CE6423C9C26149843A6 95B29E5769B0225B1832080492B31768DB99EDD7DEC55F8C93114292F0ECE06A0E6226FC FD53EACCB782E8CB196F3B5D9841D0AAFCA244816CA8BBC6FFE3C6EEB559FD00A2577064 007C709DEF6E686D90E89886F1C3D41EA6A10F1D0EA6A004E83F6761A3EEDC0177944C5E 4D25F2B2F09E3A6CCBF7C88A0750F2EFA3BA4355454A3AA0FC13B95FCFB8AA07C82AF04E 83115B59B2A9B7B2B438E67F8DEC2AD0656EC3A4A0C45EAB9432CC948E26C77A3322878D A0B0BD10EE970CC32263D4E1C5FD98404DAA0F12DB358CD1B5E9C84F34E216D9C313D8C2 D96142BFFE341AF46C6E075CADFAF052D8D195091EC6A7305968C0BDF7EF8DF54A9C781D 91B23400B32DF34B1C54698F0916AC14C67D0DCCBBC90486D17E69F25F898C269D4B285D BFD09195B29B2B7E677ADFA378FDEA6953DC74849F52A9E0EA80753A30A62DB1548B9F8D 9B7E0B7BCABB866CE49EBFF117042AED8E65CCD8F7C80E142312D89CE67B360406F714F9 F5E75F9C5E4C59D6FF0BE8C9572E9F59844DCEA772A242D930717B5EC78742C6A458696C 5C670BD06A731045118B4989B980E2172A68D39EF5969AB3750C059A3727554361357278 0A78F82D46606F6C4CB4C0B62EA1C53998BAEA14984B76B7FC76872B86F8ADEE2F4B8C25 399E425CA75A17C78DB1396D3E989F928ABAF46BEF4CFF7B572188FADCD7808512CC8F2C AEA86BE50A7AC3153E168BE1A6E2D1C87CEF7FCF5840E1E4711B312F9C37BBC1006BBF2E C848FF19003FA0157B7EF4F10E6B85C206F0FBC6CD23021838AF0146D3F12E68A8696DD7 364E2DDCF7BC62D412C8F2555B23B747B76E8CB42E4364EC5E16B46718ECB28BC633E983 C7C7B04DF33C8FEE511893C7C5AC7E398364941514CAF9559EC032723F58E575E2ECD560 C234A6942BF7146DF23CA07BB0558D45466EE70DDBE0EC123285346DEB9662B55B76B614 E18078F4DD5D5BD200495975DF64F382DC7A25F5412FFF2155519E580884929DC40441D1 E3DBF645505510840B03D585779E6A4AA993D4D26252CF0A175EC455D01C8730FB74FF95 7A6E54A68251A386A0988683DE6FBB610908573190A26CE79BDACFFF9DF5E1FD6AAD2289 6F473069EAB266CFA645C80D4242FFF64D0F449864825F4F21AC8BC1B29EEBC3AED7CCF2 A4FF4A2C7C8CF4F38909676AEBA1A90A1EA96EDE3BB2ABCD7624323DDEC10F3B1E841525 61CBCCD653643DE301E15E1BEEC532E56084E1718FF0265607A91DE3413CEB7C09E53EB1 CB214BC8852433BA6FD3B9B48C70A101E3A343B7238F4E009A1608003B6364464A43B669 8F6B25698914D093B149878F7770DE34BE80EE61D3C1692D7BA9B273C388643C27A9EE89 4320E34B1409480A0E2DFDDD1F40850599CD2C3BD9797E69E88A835E0C708C9896AE857C 53563CA84E4DDB974CCA4B983DAC63B292CC523B747124B1FB4A59D6A425273AB0199828 6CE62DA60B4ACFA418C9A3FA50129E06F33518CEAD7791CB902CE69CF316A9F234E6D5C1 55FB9826C278B5F3DD44F1205D9EAF1B78D28B8466D95A86773BD84C1136ED6892D03154 E4CE8F9E8FAE0D3870E841ECAB1069FD4591272C9CDF7B5B30022BECE0A5B8D85F4F1E5C C82DB7EF43D4A4DC6DBB4D7ADA56B7F2EA2DEDFCD20956D14D9C50583E6B41B9EBC2F6FC FDEC4FB8C99E91686495C6141FB06BF68765564133BF84137C8C2226C9F9BCAA91C6D381 7EF4B9EEB3597E4DB8DD6B91016A94EB950C8D93ED113669B64082F0C4D8AEC0B38FBA79 9B2BB154E885CEFE076D0A44B41CB76B36AA00BDBA2816DE688A20617002AEED3CF58BE7 A8FBC106B075DF2E01F96A7EBCD1A1395ED42FE47FFD5DB3126574D08A0AEE359F4934B5 411D5883D24E91EB2B7A235BDC143D13B93DD3E751F5D0B2A222D0827AB2ED2395BB31E8 9F8D8C60E5C07F371E69D68AB0B160E7F0F8BF78232498E56F75DC3E1FC649405DFF89C8 C0746F804DA4BB01CA552D06E3373940E45FFBD836809C46C1AEE1012AE39256AA11F24B 119D2FC14E42ED31FAD62A585589CF79618E244E2D108BCB5163220FF2BDEE8C600B897A 610FC25058CF85927EDD1DA7F799BC63836D27E19E0F0BEDCBEFB6BDFCF55B7B0D1DE43B 238EDA9CDDDA2FB9551FB7B9542796E628C6BAFAF3E1241ADB2B16CB0852B15353261BCD 4AFB252723531C82ED19180E07D44CB8CF3BD0F235362A3D524489FC98103F8219E35CC0 169668ECF45EACB2D5F78CF40FD7B87AAB1F3F54D27B0B00390E50D402A338D0C0C60AA1 5E1F3C67168C8B7000FD124FD7CDEA7B7FAD8E45A04554203D436E6E8839EB90ADCA7517 4CD5545BBD8F32BA7589454DAE7025BDA7F844F959839501502E2BC1285665917D89AD76 F761A45B25A7592DEEACFD8309713CD7498246AE0F57215581941033FE30506BB4A5814C ED78100AD5CFFBED54EB382EF4B35D9B5B46DAD6560BF505E6AFB384008A5EBA86A25FAF 92E0D7EBFF822DD5D882603811F9AAA73BF0528AD2348193776CC52FBC51330E7EE4E410 5F663A40454BF0F0C98002D5D366F1BB7E2E71B8142B662E8D256886E65217CD0C40CDB0 35ABAC8ED1DF8EA3DAA3A4C6EB72048ACEE905821663286DC63F2C154BCA9E43CA176796 0AFDF0013BB3E395890B37AE5B0C0CE683788EE32B78D17EB64AF126E39DAC1C16D08A04 536E18230C38D4F8D048344D53CA507C2BB6E6FA04AA200F9203A28C22557B27B7DCCCEF F9765090E72CE4C34ABE83E18473A94F5D3C597E746DFF19FE55D3D5D8E2388865AC4749 B5591971A8700AA91B1B6E76DCC019952403A83820F2372D35F717CAD5C039DFC08B1D97 15C277F708239BE485A092B2E5DD60C78F7A02B97A5A39260AA7B2261FFA0BBC42A1D895 985B4E6BA58CAC378F0CCFD570D62A01FFE229CA1A07ECD362D21D8584CFB9289DB92A2B 30B95B2B00F084108F4DF854762249E5357FED1AB8412286B0C58156E3233D2887A5F03E 3B289A7CED2DAB3B32326156ABDAF48076B4F336B9479F369C596B23006104A715F7B2D0 D0E99C058381AC3CA8D9A4895470FB1629AA422DCBBB6A1753B1A56600B5817F3414A3F8 501A54C8B3A30D2109FBAA2A08B8A5601BA3D3A88CC82B14E90520AEAF4876C7C5F19B8C 56AAC5C0FE4405FB80223BDE863BE790B7AF1A7BBB35F88CCF9DA47DF71868CD65CA2664 5A271F911AB462C764981D59782333D6D84C1CC1D476A6E138631FF36793D311DE768C3F 27C9E229D9BDD7141BDB598D50BD519BA9BB9C7DF336B62AA35243CA89C633BE95612B2E A7D12FFFBA5E65D8E13B6085B41A7DF6684801B6A0D94478524BEA6E44FA5126EFDF225B 9713E590F3CED2B77478977AE0210E66A57067F1E0A661DE4FCE11E58CF68DDB8CE6D9AE 9197824DED1114B101617B55E327570DB6875B7AFFC2CE14037E38838FC2AE0D90487004 A2B26F90F5622FDF48BE86BF499EAE8AE95A9C89CF61E603417806310D816EEA7732B893 260C2616B5228839A2294B6D747CEBBA43306BF2544336361D9F5715CC86E7A2C0E4901D 0CAC48B4F5AF5365768C9C1987AAB241C058EFEA50167666B772EA8A0B1C644A28AC5912 610E007E298501444DB9E30FF416B5F4D13831EA99856B82A8517BA46010D64087469F8F AC834B9BD6AE42E89B20CC314962D9C12D6BF7EE0F1C3A96116FC8267EDB58AC31B45C34 690BEAEABB8173ED0364359D2B48B1AC9FC5538C94BE7A8A1438CB467FC10BC813B6F5D3 B05ECEFACB8A7C694840EDBA0E1086E2FD447B9EE099969D94D2B959B901CE8A9E28B256 10F79A4F6CD14E62B655C3A044B57C64DD4F2545B9557F38B0CD601CBAE7D951E75A8BD9 6EF5DC32515898A7A75D93BDC6CBF9C638CD8AB65694E9D97434CA7840C67C464FA84903 0E5BA060D1F65B850DA1FD5B524FFC83E751D367E45EC3FDC019BFA7C9D7C780C13E43A8 CEE433ACF90EF78BFB809C1EB8A3E66BD5CF510835DD8E40EBE54C482542A74AA6E865C4 6656F7BE1B32229876D9D107C18171750BB49D92523242A414E4ADFF9BDD83877BC51E1A B6315D65E52CAD70E5031E49A0C816D9D0383115E228C3EA66041D1AB54A3E0AE69A0D2D 3D2BD1F4DF9F28472BFEC555FBB41C2976D6548919B03ABCEC5026444BA64D8362F5384A 864A256075CC4F16F2053A57234DC6E41B6861B209EA25C6FC89E777651780492CD360F6 B4A3CDB9AF6A3452E5218DBD8B9536D9C5C045EAA9A772439FC78CCBACD98003D787FA42 3ED6DA206B75D876E00E37F095CAE6B6DC7BBD26F827E165BA8BBF356D05B338996756B0 9E8CA69DBEF0DB6DCEDAC1F46D57CA251603E9E0E4F7B329DC0B99D0E4A7F2C134E3BDBB 602E2F1C935F9CE2DE29E83F3F5BAE8891A89EE54A8271DD9E419BD6F350EA7540341A8A 8E5D27DEEE154A751DE71AFE5475D9B1E5C7CD830F4C0A4575C8DB49D2CF1FA878ADE141 BD03D284935DBF698110C8547AA7031A90BBF8333DA7A8C84FBDD712F0F25313D7E11F82 5B25252C6365B315B150F8815674ADE582852E8397653C435357368E93B0E2244919CDD6 DA2D17E3027889B0E757C0849FE2A6A0872CF3D82B2F9BC0BF0279AB93FE78240BD93E9D C371AA2A67C18DB687CEC9A9C95ED01E6C297C762CEB9579014A822F35D07D3E6C7E9640 81AC92B84653DE77D0DF817CD41CC2D8223014376CF81404786949C06FC642910B8D056E 576C4CE687249721D44B93624A491333DCE7B84AB167C5FFE6A034C149498BCC36359927 7112ACD1838642B725DB2138C3CBA1D7653A83460C8A3758F7091380FFCBF5F68350706C D0ADBF1E196701E25F639DACDD73180F52D7238E7768378C3816E882F54132D1086E989A 809C71C9A7924FE1442B1F39CA0332991EB26462114554D80DA1F08F7A7F3DC617FD2757 07FBD1A74E1DDAB693CF01E1E229AF8CC93ADF4171EF80E24B69365093821A479773A492 11B99EB8DA2484EC8C592FBADC47515608BE61CFA75C0D81D7ADF12D00B802412018E8B7 B2E91F74728049575303B74A9D10DC9C9B3EE5B737B0D6EC0546025F333AC16ACC42FD63 AE4B0791C6B6E5979855FD7F5CFD0F257AE9EC9055522684E8D5750EAB68B0C3EB2A6B52 A3BF0BA49DA95FDB61F2A31D9D226C0B619D813DF58658B28555A469EE00B0C7222CAFA4 D8C9B7FD5E9C3E011EEE5DACB773CBB9EA8EC6EF9F0D6C832B0E03E420B3498CD36095A8 D7BAC29D21A3D6BB20BF439C43623B9C01F4C081798C0D164F7C33161B75E31BEBF5D5A1 E261402CFF66785E2A860CBDF0422837C5918B7BECD44245A880ECB7E16B2CE8270D7B7C 9DEBE326E9416C3188526FECDE18AC1E9E7D53E5217E3C08D845EF493C0C527132E275B4 66CBBD5D836F70C886EF5DB157F5BE828B0C516936877FA049D6F4AB102650160474E715 754F2FF7252CF200A41B3659672DB8C8F760FEBE5ABE344F1D4AE7313536C449CECA5092 363B7B3D179B78751863B8234F740A61B721E8D930FB7207F426119E588CF00B70DA6766 E35A174800725A583B78643932D2B816E66D107F09C5DBE8B682180DA9DF440399E67E3C 5B1CBC0D44CFBB887A911F0DAAF52CCE7C51086F82DF5767315665DE54759A53B3DC1046 8E557F9461FC5791704201CCF9321C8DBEFEA557D623B1A1434E397324A5A3DC3CA8CCB1 DCDA93A7DBB26A7DF9B69CEEB2AC316DEB74598264E5192E8B162FEDB51A5D54F4ABA73E BDB6C7D145F9573EAB376FE89AD9D5DAD2F57C8A9350F69D821FE5DB33842A7BA97EDF07 2413891B4E7DEAE8CE886394812764D964CA71BB04D864D696D809CB4D6E4D7552373397 7D00B5ADC1107A978A24E4CF1B82C936D1AEB6C5148168C3035470165B7344F13C89A193 C252C300568F9B05EC36B18CCE7587FFF8BC760101D205DFA8170DCB53B60D85534D8A16 67A7EC3A55A65F31F2585CD267D2B8105747148313FF667772B8F7694385EB3F404BA84A B4AE7A07E23316D05131479E37184A3322C5EDA04140D9C3A620289952361C7F546FD96C 0522341828CC8E1F9774A098B86794002BD4A4C5EC2FCE4313DE733618F024C7AED7FB70 059AD3DF46B0E386BCB62AF51726047B72D4E074C058565772FDD21235397E5EED7033F0 F49C4EF186B35A89442E4CC54DCFCC6C6E5C21AE406CFD66911FFAEE5DEFC45BF8B5DD24 5A18CC54BCA9083923C3478A7F1BF940C007740E0B68ACE928CF175D73829431EAD75B56 457D8D51A534DC2EFBD890D849ED34D0FA9718E3E7984BF4021579A44E069A367C0E002A 15718AF463C8880E4A378A1C5AFF63B79BC41B93A240A8C2787B966AD8AE12AE42F58AF3 74A0B4232BEF49C0097E4E4036E744FEE3DF5FB30B5E76479B5299F7F04EE2DE3F02ACD2 D728B8DDD70CE3DABFBB37DF8AE350A9277B35DED944E1B51FB1761800A91CE468CE3D36 07F3FF61D5DECF1D16C42C0B01EB5FD28AFFC96151A7FA320DFD09050C7172997C428885 1F7A33309B9C5F053EF1E72074AAB86281F06A41AE6DBBAE64A415CA7B3B6701D779DDED E9B8F36546B6D8C649F245EC630D96925A488A271201B774859DB08A5A3E84ED9204811A 3A5C9C4EE36394FC238F531E4616B02A5CBA284C4464F3D7F8B84D65CA2A460C47B6EAF3 7528C2091BF73CEC5B440B2D7FD334CFFB347166BE34EE1CD09D96499E5201B70AF6CA59 D716335447720FCD310B65EE83C4A05031C90DD7BD2CFC1050F43ECB5FB55BB7E3E3648B 5D1D05B43BC38369EECC9F3CDAE22D750B3C0F532DA91943981BBD86EEEC8756CC850530 88F48FC6C575CC0BC2DB09FFD1A818AF19C722B22F1BF6C2C401096C320B2B1F983AA1C3 D08C21C20EC23B5B5471F61F9789293D9AF29562CA9B0321220345BE16E352570B051A31 6B9B0DD7BF02D008E35177EBECAA9C6D9CEA1FC8746E0CF7945F115043D62B9E14FCBA27 D1BDDE5619AAF98C19351196657C61DDA1E4DB10DED575969278FFB7700A409C0E3DC9C2 EE002C71DE53377798602628863FA4DB120F1480D3114671F301F7B1C45383B6973D7AC1 7DF5887B8E4D9A749E0DA70B9D9879B4DD83260C4A8EB658D77A5EB176523157F58129C5 272577552EAC64557F41297B90AC58ACAD9EE9DDBE614DF8959FE24D147B7D9322282BDF BE9B6B26DA29DF6926B8B99591253E09387E7882BBFF1436237264979CA7ABB98A5D151C 7BF368EBCC2AD6D72924558DF5903667B4CB69237F7622D769C070347A7F836FDCBC5137 4ED948B4584A381629A6A8B1A74BC13F2F20E324B6A4C47EE75F6A31F3563C576A9AF483 EDA869AF90C525650AC218C745818DA75889733879348DC18EFA7509911B19DDD3002C6C F5423174C24260D3A4E73563A0B4D85593B1CB5B5138BD2B32E7BF190E9A460EEBD073EB E9AB0BFE8A44A18D91C79987CD74DFC8340B7DCD48C8307ACAB9E7E7DA8E3A56A44CA127 8434B6B671C94C38065F7CC16C6A17200E25CD603A5F3C36F0CAEA649199A996D197001E DF7B8F3B4C83719990054F121D3219A92394CCCDAAFFFB9052AE58E9EFC4990CA3C73E3A 39E30F2ECB579AE43403F3DCB9C12B3742A7A187FEADC33322593E860C8CE98CAF151986 13708598C03D34339FEAE7B21FE452F2AFC1E97AC0637253BD764E50D4F560EA01F9ED1E 2A800C643E642BC970E310EEE3060ECB7C490EA5FDC2B0A0BC4FAD29259EC9AAF5FEFEBA AFBF98BCAC4875CC59F87F0F33F8AACE9CB55635489A4CAA917D2D3AF5D97A67771C7B14 188B465EC9F500FF577E874934B27B51883FDDA197FDDD3B84FE680CE55C6783AAAF3F31 935EA06307F745DD5D4801DA36955774217EDECF30F0FBBF066324CB67C25A1EF58C1135 57F62273A2A4876822BA9D87DEF1002A3AC0AC3548B826558057CA15EEFDC16D0791540E 890CA0AF84D8436A7D0C0E3559E76F34DB3FC32DB71F67219E4F713F4B33836324845C01 236175E23F086BAB8B94CA54F277CA923CDD0AA25A84FA55C26EA4FBEB4E44DC9A9B8D87 46DDF6D4244B40BC58771C79E45C3BE21059EE5FC736C34C73764A53CFE4C79F02FB184D 28713997A8207D08F7EAE7DF5396333C120F4E38A8E6C5E52E033F5F44DD0F46EA89996F 16DDD0AE00A8D5C4D531D8A902837B21D870513E8C915AD638186BFF85A5C3D86DF9B908 9DF79F324636F2E56A5AAEC9722C89C4406D66A9605285A46F3EBB8250656871D2FECB08 14FBCEA4C7A4B8399AE37F8131CB5652947597B453986951E5C24ABA5C1CB4C2100B68C9 AAD8DC198128CD4F2D6FA4C10A2063A8C7E992ED1F7BFFF2B883EFD8910839B149DF4AB0 32C02B8BDEDB134B5C44E56465257A34E0B59F6C54B8187A824F0CD3EA06A6137602FB94 40F8E45A0E8DC47925C961E2C2976644501708914756F6C277430C39CD6285BC4A161779 C2E4E8E0DD08077655A7F2D5227B6DAA52147454D01F072A41D0DAC007F5D54C839C3F30 0F38C96189BBCCE6367FC5FDF2DD4F555E23D9BFFBAD37CB905CEE00933BA6B8A3C1C1C1 D33A75986E65289FE27E798C4094A572B476DA9256928E6D8F0BB0AD4EB1E08AE8DD387A 4139EA4FF356BE2A870A7053FF648C2A2E7CF2A5267DBBDAEE5FDCE00D26548FDBDA37FB ACA1B28DFC7557F60623A0C2E9655E73360AF08EC9893B963CC686534E3716C2BC8A932A 22F525DE2872EDECED3B479214806F75438E141CBD90EAD60CA7345E3802375FD2B86E2B 41DEDDA8575A42C3268DBA5F60CF2554F8D849D6925B93A08414FCDAAFB5E121B182446F 19E41F3FE6A14A99A5AEE57CA2F43EE00595567D5A21C9C1B0F6045055F144C41492EB13 46F9CE8FE8E97A56AA0D9688156C02B07FB0EDFC179AB683605C1B8E8B0C8DF2C9F22A07 83D4D278FAD40FCDA6FFC8B6E4877FF31AD98C9B3BEC38838AD53CDAEF207E1750FADD06 F8C03C32BA0EF3FEF7D16F6307B51CA8400801FFC5001C709B482D17438FBBDECF0ACB55 495C73FD07DC488C20F7A6809847A31A9E9DD8BCC4727019F31E5AA7B26A3B146D853170 BE33DD2DF5B58520BAED0F0725D6F9F3AF1738EC0A9DC6A8B60B568B74E5F2EAE846C875 28C860BFF64324647F39990AAE0E2B910264A8863B1450920F20D271FA36D4F66745EDA0 B10A3490DE542533923C6AA1283DDF79886A4A2D009A936201E7899652827C1338FEC8E8 24997E96CB640339D3F4E453A45E43B9C404BC09B8180669F7BCF7A2834F7E4E9A567185 7631E89019DCCA10BD15954EB46883C4EE17C735A97D622D37E3EB85C18B9FE2D9059B3E F262D9080AC0BEDF71AE9300B5B1EA203763B8D687170146705C456311CB313D45057558 CD10CEEF4302C1944A1530D63683655549F5AD6080DC5DDD5BBA7E58157CF473CD1EBEF1 3FA622D28EBC30EE3019C77E3D97102C5FC4B86D635FE9CED7F349C4EC55BB6B11EA4F47 F8E4BC9A03424C7DAD2219701209EEBB1A619F26699F86A530D441AC71013E490A2BE39A 1AD79183EA53F292DD76A4DF41642571A0B83F5B8527C79E5500B91A1DFFF4E719672271 346E8B5F18D85D36AB50ACD20BA8B2EC5A1A3D76B9A97A8CB88FAF0949A3D0BA02969D0D F2CA7E7E95A06CDE4D0A5D1583CC4CD45BFD6F1378CBA567A576537B7616AE844D641105 2D4A2360C032D79DA1AB04B5EAC6AB500FBEC39FA9D086FB4C3A3EEE7F50CC4C33D706E6 CDE1A76E6FBEDB7E671DB6377E803A66FFCC718AC5745A039DCFDF4DC1404266DDB62819 32A6D85881E588D3A14E02F38C889C781BA8DE7CD685E30DEB86368508639AF15CD63B83 925ACF9C04B73FBCC32D2C620A7B5BD37B7A6F7759FF9182407BFCD87490CC69330095AC 0DC27F72201148410FFE9C865AA5ACB611E3B733DC73D8C96768A8D35AACA16073B78CAC 37C0E07501FF4A04AE4B1C8152082B6CA2BDD925D98ED124C18DE73DAEED850B0EDE45BB ABF0BA08A653AB6603E7BE1B92701EA4A59EB897A54B711319B6B80CACFF87BDDFBDC3EE 0CAAC2F594254B7BFA414FC32FD7306958BE38052442A8E490B4F4319393629449957E07 474D54BC5AAFC2F6978730E87C7DF1AAB27AA918BE73A94C90FDA533507D861DB67FE8BF D20B134E7FF1DD6453F0777E64CE904B4F135EE69E0B71F501BDDC717CB73978A5F7C4C1 4B6B5F8A6609C2D9C55F9890851D17E442DB79990301465D8F374C078A7E9362402D28A0 E909CB9B4C49C81F69960D6B24D30E846B66B42D1D658DEF3777A56DE2FD8313F81C6CD2 E6DCE0367EF3B069049B8FE5FFF075FD469CE8E9AE5A44E0DEEA2D24942359B44A9944E0 FFB4276980ADBBD4CF2E0D722C2807945CD6448071BE7BA4C4918FF916B122AEE181DA00 994B94EBF8A779D313A8F94F77F978E168D5CBC6B97EDB08A2FC3AF849820DD87A9E267E 57420779725CDD2422BEAA78BD17D273A95FE0F96E5A0FC830A22C927E4DC979DD771183 F94DEF1320548D50936054CAF3D0991567F94D2651F54AB65F528D4F3DD5C80593B83306 BCD5443FE99B3304D563BE8127B8C98DF5437CA80A458A863EDBA328BECE3EE4F83D55D8 B3930B3E90CB707092A459598D54A58E46F1551421023EA273F160EAF3159B13828649EF 3AFC4494F6DB3C5EA66718A2DEBF8CCAFF82E37784A55A7FCE2D0978D44862926234DE86 229AFA5DA3E8BA761C1A5A5DC2C2A863267A242D6D4006670BFA51900EA8CD4A5AC1B4AD 5B8CF1F033C068CBDC0A6BD847632A0B864B347BC561E53A496462945E8C7CF4F85E47CD 5A22A0EBE1F8C43D93B3BB7F5B0B883C96874D7A78BB7B42028CEABC204F4CE6B0526E7E F5F4BCD4B9B5A93D00E1FB00A209E649E7C8441C909BBA0C026101D9F8EDFA6D72A7531C DE344ECB596FB9E45694237593125587DD18C82179C4283564C965EDBFB69DB3BBA66DDA 85E257A13591CBE38845114D33A10E7397D7593D211D6745A324F1740DEC775C03638409 E0719445B6F271376155F55EBD5020D7EFAC0BEB1415CA4014F0BE4A370C083F3D2B388C 2F1E3DE34217F171356A09AA89DC55126CF14A24A79F6BAF64A16AD784CE444759E21B76 B73C97A0A5AD0A072A1D863321789E84BB052183E04D229D2F52DED0D2EA990F62381C71 2960E9FD9BEA08AE3FE06DF5702C1B97969DEB5A4B31C6DBD8FD0C7E0D4D584A513497B6 6A99656AB9FC702E4754651D31F85374A67B01AC6597458CF00ED75B879E811F1C57F608 759AAB83781E7319BC4DD113138384D472BDD3C644AFD52FB6A45EE1D4FA9BA0A4E3FBE8 558BE0D7D31B11589CEA79253BA266881BB2DDBE7FA70E882B5EFF479240A0734F72A38C BC8DFA4977157706D84BCBD0D17F3787B849724518EAF1C6873EB065182D20E137F0E4D0 53BC22F7FECC0A8CF80AA423DBFAE93C9EECF59A23596392EAAF83FADBF673C15F3132CA CBF75CA4EBB4EB8C49B67FD1F0504DA01A2938895B7AA87E0C8CA3DD53FAE4F8A59C6C74 90AF7E61E160CAD699925DF0524D2023E3104679AFAD1A19B01ACC878D2D049E48ABC79B EDE76732771BCBA0DA7EF84019823CCB25A1A84D178F7043B29E585B83B6F607186074B0 879A87AC0AF8706853BDDBF301BE76486B9977E7F2243D633A3FA7455C57892FAA2042E1 6E1EFCC9675FAEC922D367B791A85FD8D6F05F9C980299D9746DAD2AEAD1904E054C2AD1 5A2A84AEC36FDDDF820EB2D1CD308A29C7020B37F417208E475B8DF9013C978669648956 0C58E02E470C308D469DFE017F2DFA91A23D56BE73ADEFECBCDF1C3829628F6DF4C285CC 063C88EF6DC3C562AD9F3C2E45A32F4AB789D4D92FBFFC55B627555C1F186477CCB88F1E 636A510A663BDD07F6DB34ED57F682D53AD7F684D568CB9FF3F03F761DB80CF089F401F2 FD315FA30A6F8648E9CEC32BB5D1D53C12EE2009B8B16800DED4950805306B9493B21F65 A12341FC86095A9C8CDC8303C11556F4E43FCC1DBC6429FEF89F57519F6CB64737A7D0F8 0E63D57B55E214C4EF94F3DB664466FF320FE0D248CD94812122FA60592B6A83D3D685EC 9DA81C1E761CCF691782D851B1A11B1106B06FC47027D8A32D85752A40C13607FD44CD62 3875C95A3A8F556FAD961398A33E9C8AF7825A5CFDECA9D67A1C13B7AA7EFD7779116EE2 318C0A6ADE1F5796AD6C5BE6E311A059EA670D2AB3352C0CC31F660A58D2702A151F3DB0 D104BAF2C4910744E49DBFE021E1BC062EDA01A8F38413ECAA934C31276C93683D88B5A2 F2534ABF6024D5B7390E3276F7FDE9B28DFE614F707DB225E7F942E22989F45F6D53AA67 9E952D3371E4ED37FF9FFADE3C8B461CF1948C061230B205D1D5BD3B007EF3C5DD083553 B037D17B826D58398B25AABDB147C0987B0BA07E427BA9D6BD840A2E254F43083C1EF46A FCD13C72C4217E4EA53FCBE103E16DEE2EEB228D9C4434381B466A7237F98007515092FD A00220EFAAAA790D0A4C90A8F8E4AD567C0D0FF3CA5D718207A1ECF40B91A778C8E35E8C B102B8F82F4D04298C47D159AED5316EDEB53813938B81AFB1DB7E7AFF93E2AFEAEB0D33 074CC33842D7ABDE4F544A41856ECA41E3EC71BDE01F50DACE68CDD72F1F3B6C4FA0A99C 4193E69096FCAB6BB8911EF0E72B53BC0DF981333A0E1DD668FE76C3B2C5D84E97720CF3 7DF1513C6289FF3BAC1E340196320DB063FB3A213B80A317ED90080E13B77D666CEB385E 2F9E5E9A60A079AB7E2FCBC0E08BF9544E3404D4287BCFB911B549E2641AB16118675D07 E4CCDA0E73A54067237E9D13457D46834D80AC51CF7E1DC1B996A7317DEBBD0766A56C63 4E88DEA159BA83BFCA2DAC43769253E2B6C45F072D95DCC7C18A376FE0F152D8984D309E 787AA852FDDE50F363348D25FA277D7025CB4BBA64029240B6A695A6C8FD1D4E91AE0206 76B51F55A9BD8656D76DC3884A4973E48EB16C3049D985A5729254A47C6A40E833D0E069 5DF5EA8C5EB07DBA4994B10C9B8083380609E094128F5A05C97369122F68705149684302 6A795C51BBB2CB6E47032DE9DEC61B4147B398F4E3C05783F5731239F3D5D91CE7E2EB1C 4FC34735BDF69657BA954B2C8F33D0902E2E4D91D50EFBB1E1DB0F0711E8936BC73C8588 92207A37263468537A103373CC3A67095C482FED28634ABDE5AC9E2417305B0EF4A9F67B BC1DBC91E3D863BB63BEC79A5DCDC2225EE883A585F280CF09D72E8111317E442D99D8FD 2CDF6E6DE25F555846D9F1CF08C62F514EC6CC630FEF8B9EED09744EF9BE1A1C5E3ED790 D85000AE004C5B94E1DC6A91579D64B13219698B49E9449C99C63C7D873E1DADDD35B938 C84B3AE77A83EE27D7518AECFDC663ABECAA2FBB3CE9E395268D1EE6895DE3C665D45CA4 3FEEBAEEB2BB2BDF8BAA2AED433E790C55651D8710896D42C20685251B9048C2DC70A770 631560CC0241A0899905EB337F9A184DBB98E0190C9E63AB5973C20E6C01BC8DDA9AF134 E4A4B823B4029FB8A23E1CBDF48319A94E4E2C8EF2C70BEC800A0CD99EE12BEE2C58BF75 2E3EB954F51A6460D491664676DB601CAFBCED6D86770D0E52D33BEEE2F6797388944EED A4B97E0CC094C67AD76F5C7B79AA8C20007F9278C53AE7B26E21955B94C8839C0CA9613D 0FC20E13ED3A75DD97915FF941ED0ABD01285A4CD5D7268E395599823F78EC5220F6CDEA 718C875C25918C87D802FAC4CB1A9A36CB60DA34B1388333B39B82EA91845FA9DF96A177 7AA095C43561BC8524959108BB5C4562E695C3AB3B7935BADD02330F3EBD26B9418E05FD 85C963AEE6763C41E9ED28E442FFDDA69D6BA2FEB97B7E254E99BAC7D1A0B5D936B226AF 226BF7004B4D79E0A646A3373F0FFAFE01DE239EE5BBE1213642634B0EF0F34016B8145C E812A7E42FCC77FD006EC3A2D50FBDBC88366C942DCC2E32282D7A70327DA582AA4D44ED 94CFFEDC38C2988CE2CD3394A2EF9C44556B21075C57D438C616DB2D431EAC8BD057321A 4638D3D0956F0120671C4D79AD05A6EE89E91C94D9922B7148CDD292688A6DBBC316144F BA8167D7494EEDC035C607EDE2BF2A12B3453DCA95190DA99A3C4399CB9C09B0EF287A7B DABD5A2A44CCE5EA5EC0288AC11BC34AF3AC4E46D737BA244359CFEAB69E34501BB3136C 24E0607B439183D6A2788C3DF2AD724879884F7584E8615AE16DE6A798BCFD89198857E5 85001603543B679D0D618A36A53681281E739EF5155D16D810B4FA8AB3A8EE7B00AD76E3 FE8894DC6E9704D1F99FCC07BE35D51D8C595F4A97CBE60F81213CCD2EFE8C9DB67BA99E F0F5A87EE77C7A83CCCE4486289E72B5F72F8C65B35E2A680A70F0A55DBBCB35C7B27191 E744742D29E6B3D5B7A9B70C313AE5AE4999BF961E0E71F0A466EAE72E148FA52B9FBDE0 327E08AC593934E726F3DCBBE36DD7A0660E4E6F9A42F6C184646690DEDEA3E5C334712E 8B2AF43A04719BA65B3E54CFC8379F72079D1A2CB3FD17766311F538F10BDF2734FD4E35 229B97AD18FD8C737FF981F8FEA4E97EEBBC9E017D45AD6972CDA28EAE7A028B9761BF9B 91BF1633CA36E6BBEDA22C97FD4444D1D31EB9948C1C78BB51755DCC493B4E55D70E3893 4E5615406DD6B1B23DF4F61D9640226A661AF96C145D63C2E2DAC3AEB07C0A3D3B980A38 966B3D0594F3208467993AA52DDF42304304D7AFA999A0DCD3901E505284FF3947171E07 6643D65D494AAD94DCF8649098BCF9876F6D20B0970E0DF13AB3A8B36A87E81FC284B80B 49C9AE24988EE6C4DC4AC5A70424C0DEEA664FB32F7DF5839D02B242C6974D1FB5BA6CC3 0BCE6ACB9887B5C2DAF1B04B076461FAD6930928630C6153F0B90960253CC524F26DF3F7 16AAD96AA76B20209C27F5771F7B452672D32BC7809251006F7B3AB1CCFB7C7200299C17 74C56B5D780D7578464986752B9B670906526C200D0795492396F03786447BFA898E8280 0E385EE085072451F3AC3DEB0E020DEEAD35329911F3D8E4452843DB94D57E8B1778D97B D059D177B0EFD0B0CF127888EFC89A458E332DE1DB5085FE85891D1A3D5D8E339A0912B6 95D5A67DAF5EC86AF789CCD65B805BE0E205766CEC7F9CEC85650F27DFE0B662567F37B7 E0A7121A6E0CE898C1DB3753DB702B11D58BAE7E489C9DAEEA5F9A0CBF85A90BE5B3E55D 979154FE1063C19688A91019FADBA7D3BDCE3AAE31E35DB499A19D3FE33AE42375DF6B09 62270E07A18774E07C20BE6857748EC4DF5576E0C025FFC464D7F65BF32EB4975355A097 59AB56C0155CC730B55579AC766A0062ABD215F3DB246F7D004B984704B8EDAB4A0B96CD 69CCDB16B5746A6CD3543116A40313B8037A361E2C613E9E2BE14699E5AD2CF2DA2E5EA5 69C54A4BF72055DADDF7E37AB95E45706DCC8FFBA8AC56D9635F38B8C9AF1A646946306B 62E0B037019762E04A8FF4F3E972508E3DDFD3125DAB373C651774FF48A7FAA83DD0E825 0C61BE62E3C8E2FB9A54D98EE33D5F410CDF042814BBABBFDA6E3D50761ED9050C5892F9 514842B268D0EA4217733CE516E1FC37B3C2268971977F3B0C1D0DE1EDBD74CCA29CDB27 4882CD67B6B3BE2EB21B5A6BC9EDE67498A8D012C2DB2146FA0F234694C9B14CF3F3E3B8 A84D9A43890E83A18A0A804057593D980A8274BDF73096FC39A78D17AAA9FCFA109EAA1E 37B32859667FF2EE559BFBD27E45D24367B2C7659AA3A6C40274ECA05AB0BC69994678A0 E1D54B1A37C751FE658D5B52848BF87C571543A94523A2174C794434BB59ACF1082AE0B3 20DB760B318741311888F31C16A9B51D2AED26DDC23EC7DF14011C033555F1D141AB547B 7CC477D293686DB136341FA38CE9F6697B45FEF7D4C218DC6F2E1CF60667371D40231D1D 9B09A25DA4535C250A6741953A95DD228D3506F0B2C6926533A14FD51EA9B6D63471EB93 31F70612B618801318DC16983A4704850ABF3F80ED71839636D25E518C628EE7A81AB30B D0F7F199BB698D95D26F80CDBDD6EBA398CBF135E42B976B849C532DDAB2A7139E4BB95E 2219E4BFA09AD1DE8C87A8D98E13552DF478A6891689251700880F37DF5A9497ED1AF6E4 2246F872B951DC4AEBD7B4E70CAFC14B3ECCA68A8045DE82C034ECDBEA634434781B178A 95FEA1FAF22EC67495ACC9F4A96A9651A47C7DA6D566A17703BE2354FD1CDB09D0201B26 F204CEA7FE082B8D60BD84B99DEE01BE78993BF3BB552491C32B80B8A58A81BEEE42380F B2A00942DD756F2ABE2D0417AEE6B4ADD61A6072D73D2ACC707343C90B2C9FD9EFEBC208 D91521876A55B371DE4C6C706BA28AA518ADA2F41B51316EDCA98A8210FE96BE664788F2 296CE8B4AD010061B5D8E1A3B5E0A546722F5E24D06E5660154E22D42AFD7C468E192E50 25F5F4364934948294714A3CB0832CDFA330651DE060136929F87764B588AB3BE7837106 83B7242532017BD344CD7784CE435A7881FDD14A86FE405AAC07AECF1790BBCC1BF6A7CC 96C59B6BE20643A7F8B7D59E56766A2FB461064FC9E002100B9F3DF86F10D433439D9B92 E0244D726EE374A457626CE99692B06AA03A3A221AB83F48DF5E620ACEA081C07FA90BE0 CD30CA9D919A780B5789C09C93509535BA7A60AC1AF2C9E6B374020CD132A843686BD9A2 1822FEE3F89B595DE59059B8FC72D38DD03FE0369359D8F98D7832F5A4931DE6023CA354 59DA7736153308A0A7F2BD206BDEFFB5C02A69A16A1CC916A48C370A147EF2DEA5B920DF F824AEBACA2093963EACBCED5F07E60D4F795510AE616E494DE32905C3C0A01B9FC85EEB 0E76263110C2DD734466BD1F097E524D34F09431652A2CB54EEDC026C190AC52D86679DF 31BF82AE7EE371C835AA95578F69BDF4B49792DC3B8780C68EEBA83A0ACB64162B72FEF9 12B57F0E1A88F38EF8986AB0485CB1737DC0F722E5EFD2B49048A28C89251DA84FC4B9AA 5F5E842535651F7612E016657BB167EA16718EF1160912A1E77038B3A589690B5DE019EA 6FBCF905950833C5D8795F2D1FA562413C4E6402CFF2F60EC327169377326887DD05A180 973B3F7BA77F47CD09CF8A8E7BC2C3CA57FAF9C6E51CCDFED8CDD9F3A6F5E7EC92C672AE DE0CEFBE7943545511D34650AFAD8A5DDE978BBB67746FD1ED0B855420D101B3A5EB6F72 8902DF01F72C550F70F921FBD7D8F7BCDDDA021DE02B6319BDE3116283078E75A7158397 0D32368790CD6346EAFB4451587A553132031B133FB4819A86E6D6893DBBCF57020A5A77 39AD19F98049BF6DF2216209AA4317E721D09C7759C63DBB8DBB6CBB270884B5036CBA4F D1932D6E1F59956B228053CD930F87F4FBA60BA482063B204992E756A5E52738B36815A1 9305978167D2393EFF94D0888A716984D534E8A8A49A119039D303B98AA11977A06897CA C68D5B03161CE728D347E75D26CCD8CB29584A91C67F092CA87E78D8534575DB31341882 950D16720E49291FE5B0CE87D52BE31F818BBC868C0346B9A9D745D952DDBBA164E31833 18C231B0C298F13CC69D67028F2D4041AA3973BCDCD2A89D8E21E4FD78D3204DD1B0BED2 8A8E16EF14EB627BC777EA13305FDFB1352851F14A7559BFDA7F3312C1D915C91E637AD7 86C9F76674D7DD5B3984DB18CF9CAD4FD69A9DEB6AC684FD933E0D4AB0449B666EA1EBC4 ED688777F210C169AAB220185615EB6F632A51061E56964BF51974AD6C6D19DE75EAFFB6 856E91485356876AAB8A40D34A49775FE6411DD919628CAA2FFCF4B61FE3516BBB20E16D 9E54D7F3F950C3B106B2DBA97EEE66BEE4476D90882C2BC613C7592D9AA655E296B8338D 0ABAF6D1581A9FED764D0AD754132D1AEC9020E60DB8A186E6F539A3F1B246E6DCF9D42C DA831960EBEF3B4162197BF89F5FE02DE5A80F27846226D0FDFD4915EC9469ADB397B9F0 B1843EF06B1F9C7D1E136CDF6881D175FCCB7A50474668CA612FCC7C74D75588463CE772 A6954B7F5C5660589B90A8626C2915517C765B5E2953197915F42A4A2FE53CB9AF6EF6DB F5A3B85CBF75B3CC95451A6386EEBB4023EA00FF8FDECCBE7A4D712FDC593DD8FCCCD5B3 79DF29FDD48C510CDD41F357665067B91FE8754478BDF8118A97A78295ED5C451EBD9E9D 1D4336E7E7D1FE482DC0E69E8727E167EBDD919BAC9FD5AE7EDA6C85F65B6552F1F052E4 053C05EC7CC5434AD38F2A6103B7E5357B6233B833AFB11B74C63C84E6D7D178D76107DF 8BDDA21E356F24FA412B3F7CD7658E4B485499EA4B01704D0B88C1697A794BB47575C6EE 2BFF8EFDE2739445588ED7397EA648E666E0658C6D049AB05AB8290C8F8E1001ED660BF1 9C651D0634C830486F69CA62D5C06FEF2D89C1766B3F0471FD58E207D8016DF3CE59DC2A 34CA9CD236724A05349BB186FB2ABACBBEA1069E88D7BCE1C93C99529E7CB97DCF14CBA1 F3E4399184BF664BE5B13916F1F44C773E3F01C45DD1CD5E1087DC1A9F5D8085FFAA9C27 23F992B560BDC1161A61F5A39CF16F8001E438EF3916C16851DFA44EE0B4D57FC1F9F347 0970FF73A8096E951D8BB08CB1DAE67E41C20EBEED40A5E5639B59904828F3CF24716E28 0346D8F50A9292258760D83A1A985855522678EE07D01CF6E40D9E5C5082A170873E8A50 79E589F1E7B1EE7531B3348885301744B465AFFD3F596E9C7EFD390EC9650947F9C0A23E 1F7646372F3206C5DC8B03053E8466FA0B361BC9A7E353A1240B2030323B7F046F57BF64 D84E35A96137B6FD9EFD534C86653045517905A77EE13733237942C32309BDA74B63A7AE 5A2E6A028443FB4A9966D38B69B1F17364528B64693EB2F95D373716DEB3C2256AA537CF 7BF8EF8071B9A1C20C435011CA327D280F68AB3EC14CBCB1735E1B181D38389B025E4E8D 4D3AA30DF77B2FC0CFC497CBE8F482F5A782496CABB9F6093585CB33FAE733E30667B036 C0F639184DFFBBB9B53232A1BD11DA904B5C61C4EDD22FEDBA407E76FCBB915783CE6BF2 5A202DA40C75381639C474FE1614402FED8773C34280798EDFC37524CF8BB23803DB3E8C C7AA6D26CB36596A6F5F592D66A44FA1C0C531EDD07A7E5401073730F4AC88150979838A 484D39C7E933DE98E071681C5DD569AADC70240D7894D5A512E110C472BB94E6F3CC9F5E 45EEFD732BB90F681878699E94B70001C37E758C6DB87E39F18113868247D121BDE82987 CEF058A5260E5721189A70B1B336D873B9F089808581A8B5425F12076B90FD0CEDA19C62 8C45AAEE634AF7E0F165E7A43850B53DACE91DCEE3D0ED7593EB626A5C8EC5FE78FE09C7 2F2C3FC4B9ED786D3ACB08C31A86C1AD6F7E90A7F971E3C00A328CE1574297C8CDA2E9B6 39365713C7ED337020AAE12C75291E3C78F2688200AA48B5034CEE4C44FB1030A2ECF782 B77B5C800D0722874D89843916B8A16ED7208A90A9FCACD03A16A4E11D593BBE60F839F1 D5118E622C376DFAE8ED4C8E8AC76FC61748A7CD2B55F812249263590EEFFB02E8E60FE0 F9316197A334F60319BD97A07D61E2787FE13F8AC2257105A54D554A35F4B0A388358DB7 05DEEACCBC1831F0E4836B4513D7D649614B0FFE380E47D0E42287DD108022EF43919414 C180060520B8DBC890AE1B2DFF2FFDDDE6E45C662194D2221C627181342271C130209C1C 3F4EAD22C08B18CEA23151AADB72BA32F2C30CF6893ACCAFD76152DF98B89015810951FF B60E65ABD9322FD558A8ADD5CC2DEBB2F3F384C0A87701A310A742B9194EB0791F707930 3E205AC09886383894E3451BD5F56947C7477C2FAB26745B9DB5A362EAA09FBD0BD86851 9D9C3E60EDD59A34F37D9E8A47446FA860EB1E5AA78D3BC9E45149B0330100A4C909F237 06773085DFF02881331685E30F68766394BB3AE299DA532622D0CEE0DC5A29387385BBE1 FF52C4E154377F428128D7C8EF9D7E0DD8356BEEAF49A8472F119020DBB9635FEDC8F0CD C7F6B13D5A26A40DEB1E82776013B137B45B02B22B86DE1F6F9B5BDD3BD7A43E6FD4D705 7B23F1F69190ED4AC590FDD8282E17D139ED33F1B3EC3DFC1AD5073B70F83AB146A4F957 306B1BF5AF048570E1C2E49EEDF67886FF1D766B2EBD0B762766D27F9544ABC55504E3EC 27B99381D7635322B3CD58E3B9A043342632C88BC2E13EBEA3D6C2ED45990EBB77A4A503 7E5B3E1A4222B136B87A9CC14F00BA4E877001015F44A3D8BE38913448E79758CDE55121 5FB7AC436A3F8E3A10133BB384EDCFAF06EE1248787639C2D2B1ABB345768EC7ADC0F208 CE14A85E9FB25DB82D098445FCBD0FF7C83A8EEFB974F0A582D7B7774DA3104FCF5BA8B0 D9C92FD055AEC62A9282B5494DAD0F1EFBCD085C6A6E33327F00D4A2DCDD22F72E0D672D 60861848EFF7D07DA1229071DD74B792737A99BEB14634F23C82004A496FC263A9A60887 B9BF63A56076E79F1AC64ACB94FE9CA963FC5F28842EC5D5FC8F8BBEA21177BFEE825C79 F818EABD1DC6334BCA431A9652B7BB4C2B1A62795AAB7561987E1F4414DF29B5F1C8BE24 580D037B52395A57386785F15CDFAD14202F4AF73C021E1B044A06A1943B647AD13AAF69 4BA3404B0F154843C81DA3CEB8BE3BA9CD63989B586EF2E6CB09BB9439DF0119161219DF A4FA14EC18FD60FEB8F1F9386BDAF57E6C5550EAE09FA0A5E0FD8C8DB0CDC76E35FF8D03 79A2DF545320F8B9A3BE1508AF6EAC032016747639DD33848559164C15CF679D4F1DBE69 F65E3AB4898E0DD01296075AD2EC87A9EF4A5A17B9051BF73C815F4E4C132691BA26B978 FBD5B698094B8D293AC65AE82F0F3058957FC70D10A05A8DA389F8499B398EC368C55F15 9E29EC1737FD0DBE2D369CA06F69A5AF8483F26548E872BA30EAE5BF88FE532F0D260248 0C7192AF9F3DD07036B581C133BEA435CF91EF30D478E4CCB566960CE57CAE0EB447D749 87036764D656F95B003CF703BB043BF0184E9B6ED2C4AA84BBF5D0703DEEBD22C9A3DA10 4CACFFA98FD7B73F7656629DA98BE04A335785A9CEBC810F197C1EA12CB362BF28CF3BB3 C8B1D107FC4C12F1F97C0DFB2ECC693F279A44295E29B17790FB59DE78A88191270DC057 899736E0D5E379641BD46C34D44DCF679CBD2EE8D58FEED0A327921FE4FFB5DEAEF60B43 F6972142244958162B26537F6EBBF2A9EEF892AC4C9C6AE0DF73CE1BF36028192FD3E2D2 86FEE069752C286966AD4C057A4DDEE77B60252772588C9B549B7F71D061FD3614197515 0575CB3666136B2CE6713D48718D1E48EBCA64C571F2AD1958CC2A4631780909E89A026F 257726938E9050AEA596DB363BA9584EF2388E8E9ECB29D0012F816408CBA1CB995608A6 8FAA7956F33323CBA32CB0FDD3A492C0796604D339B3A966EE881D182D1D1A6B08A23458 57364CF99DAA221AE7A6B4DE89A630A4B51317912119F9BF3C96D4633AA2802CE5F7B3B4 467695FAAAF62F97655851B2C23E2169C636A6AB2E40B5128103947768ADCD94E25CECC3 972A0BC8024A436B201845C8857C8514855FC4404CB32486383F4D0EF76B81A874821C36 5A22C1F408869D176A9A665EC1B6207855C26227846B5FDEE27C07ACD95A0C336D184081 1B35C30ACFE56184BFBFD858B5EE6CC01A4FB44545A6A34605C0657740AF651CF9AAA064 9FFF1E61AC326E2922A8CFCDF58C2FC810E9C56F942A5707B96665F752D188099B4D32B7 FC2710DFA5356D49A09A9A87574AC55D9B92103BDEA9342B9C05934894C88B394AB31C1B D000D41F3F6C67ED7A0B8B33E807A8024A093CE31D107568F33C1759F8497DA92DCE21D2 71ECA522B11F5D6A181F2CE6D700CCC1C3053F0C38F9E0923315B4F226E75EEF08204E7B F354F88707D0C797B6D0728FF905642675285E34692C1E037FF107A6EF77DDDFB53F13DB 171BAD0282D68445A2A2F10F84741C307E94FF74929444016BCAD98004F5295C70AC16EE E8779AD0D63420450A131A95DA3EC334098EC225DAF0AABA13231710AAE76888C288DEC4 72A3D15A5A5582C6CBD9B61E40B1867C8B3D818046DF4FBA81FC941C2694991C9736D0E6 BC2F8E64431FF3365D9F00C68BDA51F6CF5178E681ADE022E0AAE96B388A3784AC16C9B0 24CAA23FA3A14B2BB176D46DFC81D841A04605B7A14EC4ACF0317DCD15AFAF7792A14AEE 9E054800CA5102DCE98395739C933FF6A8CCF22037FD51945DFDB357246F15318CDB0BBD D26EE70C4D8DFC22ED08903D54C4C71CDE2F94285ACA43A7810D7393922F60748F8C3698 BD16E31695DF841EA85808CF425A6EA9D31D835F28D94156656CAACF5D0E8268E0384F1F 85AFA9622A2FF4190D8444B663FBCD25DA762F8F641A21B104A133386044D3349E986A29 1BF601668441BE66A5B900DF5190BD3051F7AB2E30E17CC95D5BAD4E451C79C532B8C368 1906BD36A4306CC164B9F94D2F02D6450EFBEC535D29E9497E075DD74BEFF312A21FDD55 E77689497C574AEAC4F836463E1C89BC71CE028EE7D9173DA620CC5CEC1221F2D904C051 4582ED513C132E3A21BF7B0E2DC78ED4BF9389BD5B3C68B73DB996F7B13F61E1AB4CCE01 526CCAD6D34EA7C75BAFB2B63A070C429A44969312EF2412F6930E6922220EF4CEBA5DFE 069A8667E641417674FEBE4E1E9597F4E5973DB2520F8D90A817AFD7B886BD50EBDE0072 66232C6395AD25C5F0519DB8B9DB74A7068492AB893B7D9BB1BD64F5F9D06D5FED84A4E7 CF300130BF5ED9E539906470CE147E64D13107E1E607076C9E797707DC6F01C3D25B4077 377022C7EEAC6E7AA950F6F2D7A6F3CE3FB9B0D70FC50DA5ED2B5DFE60EA59C76C2E6C0C E63A7DEFAF460715ADAAEFB3F2F0E6D1B6B926B61EDF7CF36364D5373281985B97140DE3 AEAED78D2C40A0ED4EB9A193E035E002F8933ACF7A921FD86E12FD61838D0D733F72FD6F FD4E29F013F928578ADE0AE98F5F9CE2FD2A8E65153B83353C08B931A8CC18E04614D73C 266802B3F5AD13504916E5DCEB029FE57355443A7379D57BAAF5B7D6386DBE50D6E3330A 723AF1899042D49FCA78C953A03050490C0B2E3520E55755DAB7465EB6593921FCC4CCA0 5151663C68718ADF5B257E64FAAA9F18AFDA9EB658F9DF0FDFF94D95A3BA85753FA3E3CA 392E9026367A83D7D9350F2D2195BBC755E76EFB85C983A034DFBC73BD183418175947FC 875B808F13759A09C14D6CA71D552FE098E62AD4410F4203967072C4DA9B6893A4D094C9 EDB804BF2D0CAAC4EB502729D4D650332B019E7C6FD15C3279D96D05DC01CB66B5A4537E 14679A0B5535B6974DCFA237FE7354CC63B76F95B4BEE626DE65844D3FDE788A551A26B0 8206B69F98F7A07838F3D5F858544B9909B058ACDBA2E50727ECC4CD0A5675411ADFFBCB 337D92C6D0F3285E4C015616BC33CBC8A0DEEBD240753CE85B0C4DF6F95E9354AABD967C 14F725CE5E106259DFD4E9E5E6046EE45535D66EC2C5FA504BC2F9B0B7B256E244EDE6C7 7A6F9238AD68791E5449323ABEE5597425541F2F074286125F6082D1A74F00B187C7F90E 9BB719983FCB165D71CA8AC91A91751F356777B4B17D1057C227301FD00B5E52DBE44F04 600C70CE8782DB4C284E00AD9CE4C8E70FECA70FBCDAB21302455D6B8A82B4300FBBE446 825F75799E23898DC41BA48C38EDB3AC9B2A6654ABF48140E0CCF46D962EF7F115E264AF F94859ED3FD9895A08139809D03155A080FF846C1C78DC5E979D832E5191B7FC4B8D68B3 27CCFE81322F5DFA4FC0BB6418FF7DA325021F31E37CA31056252C236CC3F07B13EDD919 06B960B44EEDF6B125472868BB011697C86CABCFF1B390E828994183D737A306F4524444 72C223331B95EE59851B33FF50EA7D9116D70C6F972CED2CCADD5115B11E1FB8791E8703 1C0A785CA3ECE7ED476BE9A0BEEF76118756E2F1673F48A318D0DC2A16AEB9167068E43B 62CDE9AAC1376C5F62D798A39FCD2DC1E83FA8547B16F69EEA307701AD25D5E8B726797E 99447AC693CA68C2D0DCD665A22631563B49BF8BA0C1D9BE62B7FE27A63E70E1E603C1FC A8F7F14E583E9CD04003E831007F83103A13AFD814FAEF43CC84CC6204F0FA518D0065D3 7C2E745FA6F52FD091AA0E901EF1FD6CCA2AB323A10B656086939DCBB4D99EDB775F6D71 E74A6C9ECAEBEF2945BB9A68A70CBE07D029AF1F2BAAED8F00178D5E660953C45D06ACC2 836A4B5D05E01088597F7AAF609C20C55C87D0A27AB7E096229C2D58103B5A847BE7CE46 D3114674191A71A91CB56100827F3197CDE18AF8239F874EFB3BB1E2F4E57B000597C6E8 E9BD881A5C7B6533565F4C95C2303266062B0C5F09F8DD61EDD442FBB107BED43CF1BF7D 44DB139E2D4C870E0322226A12D2D03E2D71098FADCB7DF80BEBBA65992BB310089BA596 A0C9C86D0171B320DB7E24AAB85683F75F9B650CB8E711D898C3C73A6C4DE251CA6C24FF 468784CB89B901928089C2BED741DDA74F16ADB20FED14CB69EFD9C139F7B6BE51E7C9FA BB0EB00CBBE4E8529E1AAD71362C9751669709961EB7257A70831DB2C179122B66F746C9 1B852AEA1D18BAD2727BC7B15BF3766C2B7328BB4843640A68994C900347ED273ACA1741 964C1C502B5DBB937810BD1A02E2C34AEE1CA23B0D76A28DEBE1FF266D0A5FC30C734AF6 09F07C4304A1FA77918C5F8D6E089A7E2C8CF12E3EFC4B382403CB42477EB0DCE2BB12FB 7972FCA87B0A406C9317D8B596A2F66F7EC26A93636FEAB276BB4B3F88158FEBE16BFB01 F2A46EB0CD0624F1458F0406E0CD356B128D6A96FFAF1A76DC71656FE1CBCEAA0C50FA76 69FA580B20DB882F7DDFA50FFD9E6D58EA1B44FB221E229CCEFDFBFC696AAFFF7853086C 02D39CD3FB031FCD60A78399EB54CB77290A335AEE342D0888379D74A80207263E1B24D0 69EA7B6FB798F537D9C9DF8FBBFC55CC7FC61941B4461A2412E2F45EADD791FDE0A52D0E 263C35B5E12C688D3641675FC25612CC4EEE01419585B988B9399743D3476E4FBFA792E9 3607988A7B82249BD61800E3E2D3ED58302A7E095870FB8BAB6AA7F920D1560C76827EFF 402E319552E46A41525F571CB90406457C3B7F38E5E8FCD706A6ED1A3117571DCF8C36CB DD7708E5A93C2267111E3DA436B5BE51A9864316BD21711176A32FCA76E0D257670C9306 93F2BFEC33F6EE819AAA6A413B7DE1F768846AD2009C2FD41775701209EAF581E5192DFE DC044B9D2C8E98E8481A369C0CDE1F25EFFF76005FB127DFB9914E552B5B8088F4800D8E 9E4850298AFE02A82C499327EC352B9CA1767637F5622607A31954748D940BF9A5E2F705 1933C17CB5C94E90595F1B2B1A21CF493B8A82985C2052759B012BAF379DB4197A2F43A3 51753999058E78C8950A0F9EB0A5C01B43D214E82CB4174FC44D121EE4A0F4FDE7B15646 F11D6824CC2D817FA95E550994CE7362AF31E2D72276B6CB2D8DD3062C117AA2E73FB7BC 37CA5530BCC3A77753FA4D30600F9A92FC64EE9A5890F59382C578A9AEF492186B40C839 77137A7427EE1D6CF2442843A5515DFD5870D9B129553FB6BC49B4D876FEC157F1953838 FE3D315AA61F6E9693C9E7B6CD04BA67A514CCD9877DC7B0CF55DA717350B697A0C2895F 8E51396FE70CE68150A9AC16F2408B8E56070EAB994C9FED4CA0035635AA96F496CDAE93 C9F3B96D3F311DC2519316ABCBE4E3AEA73E8FBB18951D5224EA7F0060D8D2A61D166878 9A25694DA81E25B28F5518857AAA9D86E4F991FA4FC0F429A36FF47E857A285E0EBC9781 8C1BA2182B1FC8957F3648004149A7D391ADAB1F58D447D116EDE43D62375AEF3E01FA91 0921A22C0E5385F8CE9E929265F4903BEA9EA2FFFCB2CBA33186ED08FF05A082FE12CFB8 9F818150648DB743FB51A0D65E314D0C1A2CB05971308EA07177FDD5765820DAE44BB0AA E0C69608273EF0EA6E4268F13B2126BD823015C5E01773E14A65308F0264B05AD70BF24F 70DBF2303EDCE81D674913921C3797558C9518FED0A00DBBE22D71DB0311608C244D1974 E63E9F9822A9BA644F2F92C0145A2639EC1A9AA7D9C69CF83519F7122BD3D631660C5883 F440BA5CAFC659E8C6954654B4500072911D849FD60A6D574ADA0FAE64F7835C49BF739B 0B0566B6CE83752D3B738FADA9B2C88330D9FB63500EAFA674A6465CE6843FE80BA72B61 06B4C5D18FCDE0301F475649FBEA6CA09E34A2611BDCD6E0F33129931DFA3C8593255AE3 C3D2C849D6611CCEC50901170330B0E4944497B836640199D1440B97F42A15F74190C36F EDBE8DC336F10B031E6055654F0B7F649D8CB7C1D45F8EAE40A54B9591266C2B154B1DB4 E2A69C4B57D358C8508C3CAC3460250938210D45DCA563A2FBC8B31022FEA348475BBA01 C111C684983D3A8A98B43EA3E996330F5B89B1B50960C80F52E1E2C1B4CFC4A3A3E67E72 90A95FE45F109FD405E07DB9082272512689080CAD2F073A1D3C516F8F4F47FABFE3F5DA 888DBBD56F5BA6755E00607D7DEC637F5DDEAAC1A1373B93E0BF1950A8A921742D43FD52 5227CC16278AC9A9E3D3B120C48B5E8C1573973041BDEA8DCD518B006F46E2486EB33899 BC5A43868B1FCA17FF9A47EF2F70072A1F20390F41235C5B1E6BDDF532C6791135D9F6B4 909F6D2F6A35B5213704034DDAB6B74E4CB5203B12C581AE2D3CD18331B6469388C8877F 60E2BF6C49044936C138AB972E21356DD3FC73E29671E54B6D2754BD9BB8FBE0F658E3B3 99D23D2A6EC8B87048BA57672300DC702F2F02D36242B553CD95871A7FBD159CA9CA27D3 68B0DAC9059E08571CE9BED283CE64BED67EE5672F61279FCE795D9CD0E75CE87601BA05 314B6935798610E733FA404098D3D63AD5E0C1C84C111B9D3BEE6EEAC1C01A5DD5BBAA02 A4B1512AA2E6323892BDDE8502E40EAAA1103159D12CB8EE3B17A2B614970A0CF3CD07CE F4C3609822A3561B4D75B2A31ECCF89C10A1A40C1B24235845AA5AB3181F21F995D41652 4DA6349689E29E89040833442076A02B022842C07AAE26F88CE296180B37F2EA8E4C0DB9 905F269B7B9010410CF4842EC70D9B2EA3166FFA2E084D24A3E43D3E70748BEE43C09A02 3FCD6AF6F35A54C571F5D2D2EA1557297E54AE9971E00F77CDD3AD5E9BCF9959F17B2784 6B8F8EE03C845B2CD879216E89F4D60B9BA2286A9F6285475D0B572DDAA935B3A47AFBAB 739479EC4268D529E31D17D5C1A4DFEDB119BDE106D2234D5700F3D2D4790E009659D2EC 6DA4CB5126F2E26B0BB3CE9EA4F8A75129EA774F95222FD45D5F6F9708F7DD8FF1201135 A65E57FED9620821BB2DAEFA051BFA7743B29E58097B39FA57E4AED7824357D9DEC999A7 8E977C6B90D2C20DF413C9DD58ADAF9467C25B2E69013C3ADA999208B13F29B82DF79574 7844AE151943508E6A25BF71EBFED2AEC83B736360082D424441B02716D8F53838B25905 ACFA3D4E904745DE880A1C827106D0EC559823C8A7684C98B51C7F209193DA56B2EB84E1 EEF762F70F2BABD9E3FF6156C8DA59B8DF62F0E6ECC54F69599D3D3C7F8844BC8232F0B2 D60D5012A64A482473EDEB2CF8EE18B39078B48E1793C810EA50AFCAA6F9A504EF6402AF C97F4884E10AF3F0CC15CCC2AC5C649E1B59654E97776A0409807C4DA2CB08A701EA9190 D3A6AA4A1EFA865ADF1F19737B1ED44DB4A88216EF606CB9B241E1B851D48069E83E0C2D 0349B631802A26966F9BC475712DD0EB188AA3DB2E18BB460CE25666CCACB280E1978920 BAE6A2293622FC61FDF3684A486F5D17CDE4BA28BC7BECC765786A45BAA6CC99D8D6162F 89C621A17158B3110388D71CD6BB63B46F93F1DEDD9B9AE7AAC160A9A00EA8E6C1C5A8FD FD4351F600143EBB59CAA418003BB007B5389AD62C00626D375727C48ED0BB96BE0D8452 F4359E4513AD18D544F36F32D832E82061687E6FD0C044E542B727D2B44F0281E45F0328 F94DC98B73E63B97B83A380F696B6C507168CF8244BF480E5E162FBBF01ECF5199360576 5C2DFE743879509B7C242FDB0E082442B473E3B52C2353D92D100E6F3A743FA4715FD1B6 DBD8570940B9E0E5940D3BDE48AE5164305D6F3AEA51277FF822BAEA4944228159A58B80 213C60518DED108CB0FED3FBD417D8674043BF12B4B0F7678E2A24E6E04385E4E3119915 6662F397DF0150E8643D61D1A6F4BDA87DB6F313BB70DE61329211B19B81056B790EBD27 A44840EB0BD43E17470EEA795EF5F4309A459DF2E01E1410E59D424DA1DB0007AF03A6F0 E0035E5BF73AFD24D45C56175A0C57AF78D956F1E1B9539033757CB0B542D547A3E8F159 E6B6EEBF0D40166CBF921D0E5D9E1BCF04FC8D3A6953A8DA8F773D87C7C8B17E8995DFFB 624D0989933649D0C275DE63555C2B39A34F2B364BEB95213AF2DDB492857B0787ACE227 981460EDC1498FEB0F3CD66D7F180EC79E997DB0F2F9E0B1B79D9D99522AD3F7405E4478 ED27E51B3130142C7FE4B1FE1853148CF16339AD52FC5E637BD8B1761A76904E13BFD062 A34A8821D48B4404C55C651BBAE9AF9C35EFC8A1AA33D73AB9C08B470E0D60B2D2ED3F1B 72C156316F18B297239A694393AC6CE8ED382E6D5CF957ECE132B4BD7F20479B56D0F610 072ED13AE7B26DEE7A28333258D8D43AEB2AE95CCC16F723DBA7BE729A5D69D3CF5CF6AB 5C8D55AD767085B0450093A4F53C0B1BB34CC8A52D5747917482BF838E14BD3584B728E8 607F471C3C7BF5C8E48EDD3A35DFABC45060E161124374C801F93A26448244D8BEDF5894 7E85BFA51EBE5948AC575A03945591841455F76F83EF347AD8C125085231D5F41217566E C2964BEA153BFC91F597A87E17F578878DECF6FFADB0EC20EF4AB3F968E7CEEBD69DC4EB FACB082708A08C02CA67AE62BC90EB20AE55F4B9B88537E484D61BB91A5DB8372EDEF03C 06721DF88EF602F4DF3023CDE0176BACD6C46DFC03A2C294FC89DCCA0A3E7F8AB444B85F 4524EAD4A44EACC491934E10B8DE1EFB409D93902042200C4E05998B99A527EAC9FE657F BB26D593D286D20886EB7223C880C3F1184405D9E317E55835637BD189F791C0B31B0E1E 5B7AF61A7FFCC0CF868A4BA9502AC23422E1E0C353A41B5A3EABBDD2192AE1A32EBDC668 58C94624E9100C738CDF2D670906431E3ADC42CE4A60C377C1BF0BBB4DD8ECA09D9B77CE 1ED1FE8F3292E2AC0AE81B6B5990C73363029778AC1BC12D40DDCCBA590D84002C2ED6F4 2608A998163D22F9929889F9CACDEE0086A6B834342FE40E6F7EB439BFE9663190B0EEF0 97AD9169E4EA73CFB5F88DE046AB1765677B8646C74D5241125D9EB363D013FA9BD613C0 B59E4A768AA3C4191AC1B92FDE82188BEA3D0308D0E840E3DCF048893FC49529001BC1EE BDF443D73068FAC298C92D09A99BD7B66990DB24B0AB6DA1CECED92277C20B4B5A873C59 C58F974194EE257A06E15D054F45F49A0036524155DEF03FD84DF3214B4BEDC2A40ECF07 43A5953A4CF6F374D9A53D2C4D6B53BEF0D4AE49DBF7A2BEC9D8F9173232E8C7BDBC8BE9 EB616ED1A7595328FA92479EAC945A57031334DF85D63945BCC7B04F65875D9CA8743910 EB75906C7DC9C2A0112B15056B1417AF935F2C7867253947A16755850C990325C03D636B CC7FCA7A56C1346FFC0D775BFC42F57406621F0CB514B76D6D0FADC205EFF5949B588A5A 68F8A07BA5CAF7462A4ADE89BFF1DBDD2EF4336142AAC3AD20ACAB3CA2F0537646B51644 4285F122697AA08A075A0F8FE75FCE0C515B6198B517D83945E215DFE487073FF4EC5CCD A1B5551088FFD01D476A9C5C6D2A1E63B2C8E81413886722C3D8934F4F5C8ECBD6345F06 41C525CD8A2937D0C0A3D2BE8A09AE5200E1A7423864E70AC26D42A5F2C250090084F21A 832B043674D342AB8365E010F3786E54FB8CB431E2DA297C1EAEFA6B24A854FCED2DDDD8 A85541E4694656D46F34E07FA4474A85839B0C98581BB1D9DAE8EE1672563F2E58755072 DCF992546EEE2B6E146744C177305FFC76055C79F1C4EEB85D93826D86726308C18508BA D56C76508998A285D22D6A60050D1A1E578A5913A05AC7F53DDC965005497A3B40E5FF7B B52939A14A5BBF2A74306E3D73A3FB99EDA84E5E8514F907EC2253D12A5B99B1705E47F7 A62330CE8E47648A0C338B46226749F505F1F077502989D9AD48F5EF196FC27B819F7344 E47634973FBBFB815C63ED8245F8C8242D6E60F7FDCDB2532FA555951FD32C10636139AE BBD1B3C49B28489B7781724DDC5DE1086E1407536A4CD256B30190200940FFDEB1B1D09A 2D39AE5C97EC7A21CAAFFC235FB389ACD0FE331973544DA9293B5ABD871641D62E7A4AE4 F5DC835062709434FD56E5BC8A8B144CFABF650B26E12D6B135EC19615CD5C02F29D26EA 0AB3F44ACA92D44043CB4251BC2F3227C0FD70CB385A01F2D14368A9ADE5ECB015F2C589 80B949E2C51CC06CFC75A9EEF0F6A555914D67F8FFDEAE94733D6B8F793DFDE6A149EDB2 DAE35F1A1EFC562F3E7391C2C7358C6881E30BCE85223CB176807C8EAD4A96B822DD291A 21A1338C1B3C4AB866FD5A1F189E158BFC22AA8B76DB31BFF537C70C6AD90F0E58E30569 AF4379168E0F4D5E7CF5AA2AA38359DFA59CE08DEAA6A22E3902FF4435CA7E9067B6DE5D 48C22334701F6BC89B7B4AFB6BDE97E57BD89F83BA9237CC1E903467000D41A6747C4C9C 5440642A40B22E2385357793F0CDAB298988214AED881980388489DEEC2DFF2C3E60EAE8 7851F35380B241DD7C31CA36452915331CB75D0B5862ED9957027361D42B29874F9D2FEE A8AD23A7BC094E83A8F7A17509E9BB305CC229F2B52D3E6A6C46A648C7D867D5E48C50D7 13A19F1FACCA8CC569A4BD39E0417EBBB23B6F38D3A40FCDEEB23133FE2452A69A5D07DD CDDCD487374718E1D16E02E1F8988AD8F11C00F9D2E4B9F67CF9A02335978EC992F002F0 B00601BB09A988DDF3485F3FCC0C64ECDD3B797D4A3E7399716C8911CE22750AC7D2BA80 0AC419253D6475B93268931EA3E74D44A65F0A90A01EEFF058CA74C21E91B3B0C5323C9F 0E85E6B25FF28637C3059981336BCDF89343109E53B4817E3DBDC2EB18F327B16737B667 8D15E4B972B498DAE09E4203F8DCEB73474C38E992A1634216EEAA013EF273350E5A8CF8 E7C4BD75F9F711A974534CA61920B4A390F4E77FCE4D42C981E88379CC48AC9238646C4D 67C784204F01E76B10EEE341F5CE2A0485D093D75B77B20710A6F777FED791EFAA516E21 A91B896E5FCD8C789363D58864A9A93F3969A9E59F9E801647DDCD6C012C5B2B2E55DB9C 4617FEB1F3E0AD731EECD274FD56E47A5F5E987A05F120293E0E78F1B9A45018CD7855BB 83FDBADE6EDB06ADB50080E772F3E946B4CCE83B1EDD90DD3A5EA0777D5E5F83805D4C99 DE7EF2C5969243BA2A229CD59728F132DEC1C892EE9EAEBE6C5D37550B58E48AE5B96539 F8235F88F58212F54F854D1B7DC9B8B6FBC9887526076A34D5F283B1CE621DCEEA3E65B9 C47768B5B1B7BE471D5A4391F977320321A5F6E7999E0D6922F6E8AEB6553A860DE793E4 A81B999BF8B36D0DC8A7021C8A224819B9ACA7371C1C7829CBB478A9C3392C7BAF6574D3 43233FB9C4DF02C4242FFAEA3BBA76AEEE1301109BB2BF86CBEF19910027EEB15BFE3B88 06A8CE373469DD77451454B1DF791FA298577601408AA709DB0991F48AE278BBDF8A8BCA D5084A66FCCCED664736C1FD7E54F320568B81250270B6C2BCE403842F2E1C120E35F7B1 69C1BE9B1208DC578075080994476DF6387F928330A6BD049D6760BBA5A096220E194DC4 F211DC2317EEA8107DA45A58D70BE8324B4DC7E58184D91EC62279DB856D83D9B57F3F2D 6CDCAB266648EA3F3514A350B9681E57B9F4BD19CA134A05295B53339D5B93704B75C722 C4D56616D818021B27476FC8E1748B21B7189E5890165CC54BBBB3529A52B3D81B98FBCC 99477AAFD7805AE42AF0D01B14DA927BACB452B8BE2E45214AA1DC67B6866C72914A0DCC 61CBA33A8522824B981C4CDF127B7F13489B9A07BB0C685B77931726E81EDBE4F5CE3C45 E774B0052621CFE912D958CC77BFA01A33268890C5C7AC2A2FCDA18F89906AE7BD6F0E23 E1FB473867627F33CCBAB74BC55AAAA44F2207FE1C7B5DFF6C1768EB7F42E2616085E13B 300EE37B8AC308F7A2C9D1748595FC06D65AF9366F2DB233AA3C72600FEB5822C7C4A48E 87CCE8E8782AF9CE31E6B0AC3AE1394D72389152FDB9AB34FBE1884411705D2147669521 73F9C9E53EB5413AF1335D93D3C7D0C1DD35F21D4F3AF4C5A029FC8CFF5D90CBAE7E874F 3E1CED9249E56839B4B7E3AFE24004E80CC8D04D28BC1159FBE646780CABDD07D20C777C 610BB89FD70BCD5F36C8163CFB810CB1312D129D05DFFAAFB066E6003B3F757725DA3EA8 723DBCF3390CB140044A0685563CB7A2D998F8FDF992B49323B735527B76AE30B192355A EE7EBD006A37362D8197C521A0D56D712D194A859E3A6CA20899E03ADD939D7ACECD7258 3CE3E9DE4F3D84CC976510549C76461FB87323AE02137791175FD13AB9A41E8A26478267 4AE7D744455200A30312DEF078DF3DF343546ABC13D87D66F525C2CC9D6721DFE1996B68 DC10A40D9EC33026E57A22BB661CE8806D442EA3DDDCE0971AA55A7236504849A6ADE829 F3EE5944BFDF588D270AF9A98EA92F9F1C4F7B2A6820DD376E68169E7F970DEAAB519F6E 2AEE6C9CC85E21B436FA6D41E086DF47CA443CF9A85D354BB760CCBEE0F07750B53CD501 DF51CB8D5821BE732A53B389719088E5EA1351E60CF1FB67F86FC312DA545962850A5132 8AE86A268583BA2EEEEAEF8D6195A7570B565D08B200446411FBF628FAAE85726F63DDB1 D1741D9676BFB425F968CEBC926D42862120D0DF13528BB424973FBCB92F7F49641395AA 54AFC7834E5C2FD3F6BBA8B8D99DF21C053BD732D30F61B177ED3A20FF9C204A5E3F0576 2D906D137085C08B1280C830E538020FD838BEDDB4E0319C39D37E7B66C9D49D6CCBE151 BEC87AF09D2298B63B44FB8619EF627DD8D69F4A5CB90BE74A2F27C200DF1266D057C3A5 4063BE3D172E3D8F16C6981E85911A7A270D0CE27C7E2EBD124E4A5CCA98CCA71CDAD841 4F8D09393D486C9F651F0268E640AE2DEBCB8AADC37BBE619AA91D29DB4E106005761FDB FF957E6FF21EEC96FB89D41939ADDC1D96482A9B4467D54F8627D464136AA2BC07FD20AE E30ACCFC831C304A01AD21F68760DE739004C8338FA684DCF29C1513CF1DC25E2F83EE3F 233894ADBB9B0999478A826D968885F3DC48901F738746E61BF18729FD2B34BA28D345F7 9B998484107AD91F6C3BA45632EF358966B543F85B9DEC5A04FA3393EA447D85E9870E64 750ECACF9F3048C9163685BEBEBA9E306E185D384BC2536386A8C2C52037F7B8D191B599 DFAE4E43E2A45C55F327C07A45DA0DFAEDE8B9D8F71D9E504E5B81239A5A84982DAF027E 473AE2684604D24E5EAAC4C1BA1B1C9A93D0FF690109BB469FA4AA50578039B0E6429E4E 9342FB0608A323791205D4F47A9797644480E6EE31E8BB85AC9532BD5EA65993C8B835EA CC7ACF7BD589567F4D9F007EFC851A4FD552AABD0B455075DE9610EAC0B7DAEB3D9FF95B E7D5813C83FAE72EE4A7B171A6E359A22600C01889AB6350EC19DF8BCB7426E20FCC5EC6 7841727A8289472BE8AFBF383CFCB52920F5041BC256CE8E8C41D27EDA4BFBF80C4FE636 28E16D6E885522D0BC7250376F495BE04F1D82D3709675956FC2A104CAE7E609CFE3DF40 985264E81460E7B3F23AD66174B4500BA2788CD5D2AC1A2EDF548AB0E372AC759850C913 68B040F2D79EACA3BFFA5896D5293A95ED2020E7FC6A4110B1B9EB9D75241D5276A05582 648DD0247832BAD32476EA880CDD5015F3B83D4AB3229E579800126FA6065B16AC9AE17B CCF3BC6B2F7851C783FCA5EC54E0293A62A46B143FFA2689FAA7195590B7D50D6E9155D3 BCE55CC59B17991AA0CF57CC522A3A6F43B80B8649DDF013024B107A55D25AB595D2C288 1EADB47E8264A270185C68214EFA92DF7323CC462A5209E8DAAA69232E9F2B2A477BF4B4 1889FDB0450D467BCD6F5A5F6F1731415A11D85302D30F7DB3D744D21F084172F3D6CFFF 70A011F17E5874BC25ED6BCA6CE9F3CA399317937CC2ABFACCB63C5FCED25CEEFFF369C6 EA9EDBB58C2789EFD1BEDB0BF39FB01B603603F847031F6D7B0BED82D712C22F5BA2CF62 FD046ED149947A5A4BDD49C392A7A0E226AB31F49ACD25E83FD712DD9DBC568FF98E7CAA 48B5F2B02075342611B292A930FF805585574357B6AB1AC78F3E970B697DA4DCBC35987E A56390A59615E29E36F1B2F7CBC62C472106A902F772D7116A8A72FEFF5EB1B3C31CF11C A34BECA1EDD32E97548EE50C7CC852BC6AB863151869D1160037A88AC788CF951609C2CF 03676F40A8B75978D4D7FC87A8BF12DA4223BE83101BB266E2BC8443C5804D582204BA17 6CCDED66F41EA20B329503732F55DC589BC19958ACBDB48C088D0C8AB1D9B56D571ADA90 FD6E25A90B1E6CF3BF22BA2113E8359294117245312BFE3652D8A3FCBF3433E78E84F788 DB8E6CD640DCD89ACB9AB79C2EBDCE9D7D0DE109D64968D0153050ECE83F9FE7F3FF1E14 B6837FADA1C74171893D0385DA66A64F75E46B42A44449D8C6360BB24F19DC0CF59EAA6C 5285F4C39851FE6F6C422B0C7ABCA94AEC6FF38C5B7CC1D88A319F76B1E16A4FE36301C7 BD377F501BF754C3DF21743D37B23B3F33C33A54F95D5920DD2BD49A3322769F20B4729F 7073FCED816BE1412F0DC47AF61EF220D36EDD33722CC97F25E2B55DF4F7C4373DE3FF03 AB8B9B198128AF18D5E492041806FD1828C97AD5258BCEB07EB7E4AD47ADDE34400A1704 D0C408D2F0D16853211B3AA239BD78878CEF3A9351A0C918AD745AC965E5B43EC8A77A65 3422C9E4FB9645CAE10AB372389A4FC9F4B2ACEB0EB23C21E48E2481B75D1DAC186AEE56 B71515DCE39921418AFE5848FA355AFCF67A49E5EDAB5629F23A25FC8DFEC4508A442098 649AF8F9534A3985D6407B1FA3FB5351754BFF50914558E8819458A8EAC7E80B01DBB6EB 750310DC4C5C05BE1E441186E180D81944255DC485B8CD0B235DB0870CAD4276FE50A8DE 694A8659357D271D1AB57A6D1E8E5F048F644D273FC7F3A133C09E49D548B7EA06819262 8297FE2F2FA74962E92E0191D482247E127993433EA5580B7E9737FC35BD2F2143FCF650 30EB708FA77C531ACFA8378FD2E1704FEE0385B799E649640B142259EE887944F8055CE6 724378D601955E452EAE1FE8BC0548E7911B5138FAC328125C621C06F4B5AF2D49F73859 A08470C4ADA19132EBB017E0165E05A6066460A42CCAA1334C6695E3DD1F290216F82265 5C6623122EB8B98E4BE9E8073B2088150D54B855610415254412B110432E452A87289AFA 2263402FAA88D0EF651606919F60754190AFEC5E8F7ECB5A1AA296B9BDE679E80ED6CCC3 A78305362AC673074AAD2A197493213E8AD993283519705DC8EE3AF9E455460C26847B9F F98F39E04CA93ABFF57AA91A0CB350E958BEAAF3D964478076D19684B4A3D5E0217A967A 49CB2AA2FF8171130D024C736E84BD07F91D617782D39F35A36ED6967D551D8A269678C0 13188C1D7ED3F7E1747D1969A74D2A45B8C8F7528F0FCC71431A4F88FFD3E99180CEF79E 7C0E2A5D29CD78DEC728C2CF5E340DB4B798DE47E52A2F3476F08E1CCB7E8F294B230F3B C8FDDE1D0C3315F7316C6EB1699CA7E88FC074E821BE9CC3A2499876BF47E32DD7AFEABF E7062D2A334C364E13496D17E6BCCD2380E69BCCAFE00DBE70A65BCECD4A226E0BA198A8 E1A3E2508574490013875A710AD0B3D330FB62847C1EA97AB9A931481F8338F1F02AD8E7 0CB7AD50687EAAEB22E2E32B284C4EF6FB8FC22CD96FFFA7EE36726D353B531572BE880C 4C295B85387A987F8F34AB24FE9E92E519E790C4378BF978BC50BF45C3BF8A70CC8AC00E 107A568D380A4A22110CB2D45F8F9F9FF298D88BE65DF504641E9B45730813982300A6A7 EC101E5E3002C117E2F899E851D8D44C14B3665DCEC5C323687B660B4BD4863F82B1302F 64B1158C93D25EA5CBEBAA1B778D3A84B480AEB4BBEAF35D03DB62A984CE54AD59199ABA 86CB0E19885F65CE41DF591ED258DF518108FAF6C9C8E70F20B3BF79F3CD6D574E7F31B8 40D0BAADEE693FE4C28C44F64174076948A93F7260EC8E5727CE01234C84905F77192C44 AC6D5FD77DE5C457C31AD5B41C4B7E9CF8F75F9FB99ACBBA205E6F0663BF7389AB319CF9 FD75752B114BB4A593E12761C52AA742FD3BACF49DEA11B0EEFCBAEB693BA76419C6F563 0E00A76E5031F050262F13EE4FDC858B91CA6FB2953FC3E97858C27335BF71451B74FE6B C4B2BE4FF7E5F2D4CB1D601127DC5E17D2690C9EF93694F5652B261F778A21862CCDBFCC 7B1B8129772A0DED9EEBB4F3F94972C87609E4C1A4928D1A848FE9A09D06957A1BBCD1A4 A3795462F595CA5DBD94D816E4A7A60F93EDED9B5435CFF8043BEC23E4F7BD911C762F87 9690A34F0849364844F050FA81134BAC200A129FCCF7D87A6AC565FC8A463A8CA08CCA7E 6CE36470FEAE4C88610CE016447077F67D1CFCE2642617580EC803ACFB93C0D16CF3ED6A BAA58F58AD7A88A2DCABE8966499B57522DD42F34148FF00127D5A1A385FFCBA8D9D9032 2C1D648FE0239C564FA78142644C4BE73BD4BF9D892F0FF43D17CA4DA3E5DBB2E7480D55 827C96507E1F15C52B73172ED22491FFAAE7AD04E65C067A10509DE3DB88737937B41451 F91BACDFA5BADB0D75990ABDF10EBA1C035401EA70855171535BDD0A377D78AD8108A12F 0F6653C6BA18B6EC447F81093EAE490F08EF37CDF29C07F16F3290E5A63C5AA46FC9AD88 B7323560AA2A7759E80E88A0ABA87F9C0BB8CEE0218220848BE7156A8A410194527D6A9A 4010ED2A7AB7DB964042ADEEF7992AFD9414EB2EB01B69BA546895670EBEF93B6243FD70 2B3F32FE8F6397BD42992FCE0E8E20D2EC5D9B7AA5CE4953AB4019127F52ED2F7719944F 43E0B80ADF8131077E4A293A84454B064A67D679D12905CFE1FAD2B2FBFB14E05A5A6D90 B8AFD3BD5F9C66561FA1E519FDE4893C8FEDF0FFEB74E9248790C5187B2D6F4144B9DF88 253A14314E20964AE06BFCDBD47D0EBC66489B415B3F1DF1169DD2772B0A818AC4292E5A A8D481F0717F61DC3FA12CBD7CEF5482D61F4AA78F948BB7BD084EE4E0EB3565D5ABCF7C 0AC4430D8D39047DF6651A4C3D388B18EE835070B7BBA9A536D5C22E8C54A8927F50B383 864B6F99A6D5AC396F2336AB17D73D23FC41C37FB0CF5C5E056B71B5D2715EE3ECCD008D B58A6037CACE4B40BBCACAE04D4F8AC95B454E0E6A9FCB70983C3D0D412D52152DBF6767 480CABD9FE2123D1CC16294D1C9A90B3AAFD1E80228C684444D229DECD782A262F13850A 9266C7B3AB74B28EDBB66B7FD66618F71E5A3ADA36A75D5E966B863318FBA302B64DC817 50E96F3EF91873982856DDE41C7F89C28B179F744F66DBAC5DCE1DBDB49F91E8AB563E21 1A3116E4BEF1AD00AA6FC7F552A2E8785C1431672D9162CE8354840C1F17613A92A94593 A4101EBD642C9DA34F7CF112D1EF537E131520E3AD388B8CA941E68358367A5E5FB44D64 CD84C9B85BFD34CD1AD10AF85C2A588DDBDA46E1063B4BA46CF8FF154F2E677F78638CED DD4B3722885B9B4DBAD47EF5D98768A3F67B0318FE51E06E4892EADFA84F6F6AEA704AC1 1AB4B1DCDE663B38C2840A9FA4EBAAF9884848AC4A1A38518052F050BC8E6E28477C5CC3 28CEDA8831120FED9A29D0DDD3C00CF0C58ECAE51EA90345A48B43AF3E9887BC9821BAE9 3DA5FB6960E33823A2C7DB1A96B4FD4EE6C2160827D938E4DF3F08DDD2EEFCA1AD0C108C 3BDC204DF8D7CDB782E035D8625309D3B9C0CF6C400F18684AAF3A0454EFFF9C3EF7181B 6A9B772B665946E6BDF17923E1DBE5320898E5D421C0A76B00BCA800E56E12A526A4FBA9 31BAB616B351EC86CCFA59C5FC9B97934D588B8D7AC7BE218A17B818D12C36A624EDFEFF 8B061EDAFD18C49FF9E6A9750BAF018394576A07C337614B1091FA1848866665C2554AF0 10E03DB4FB5C5BAD819470E16C68C5EAA28B8C65D3D519EDF4D051E8B7E5E6E3B85FCE50 438181B39C3684B8F203CBA81C62C45AE185EED77B5576D9485ACE53BC7FDD7F734DEF5F D7FC488D22886D068C6D4D072BE78977275C84AE51EAABEF92CCDDFCA3E735C3FFE3328A 3EAF8DD170FF7FAE01080201C6956993CADE35E920AEF245D0BAE4850927D4DFC8F8A651 5583B4B67C869CF79E64BF21EBFB550B73E270E6CA1099348B8F11A0BCF10E578D596676 31BE911B1DE6BEA6DFE80F50E7DC29F32EC6128EF23B990D78FE155FC9F725AED7BE7AE8 361C67BC2D0485139E71EDBD23A563C1DDC899D878168A4EA4DE0D4ED2FED7B488C66CF2 AC6D9E998A28B892AAF51712212DF8608CEAB55C94CCA6EFDB1CD63B0ED5FC6D3C1B6E45 F3B8B8825B23E40A62EEC9ABF09BEFD58E200461EF8DA5E526690732EF5F4F53BE51DBE4 94F2E786E42FC193ECDE36CED8D1337E4F51E2C8487355E9EA540A47041496F35B877C8B CF059AE0631182AB79F4FF10572173B7DE3A897E9B4F83C6008A3C123BAAEFBDCC86E25F 10B90473649CE248B262212B075FA259ED0F1D7444E81D3B61F43DF24DF8778700CF9025 496D9626B8EEF2A8CE9164EDDD80392C996EA392EA139E0AF602A0EB47808CF112F3B6BF A3791BB131F1F9EC652F0879B81A568F98E58E5004AC43AB71D6CE9C76EDA7DCE7A853FD D3743607248FD8123763A7509075CD90BB37204C56F6405C30B7683AF16C85B9CF5FCCBC 3E116C05955005AA770F4F937F3B5E066F17CABD120B14E85F782F231E68B5BAF3D927FC 536A3A8FB7A7D3462A02531F0D53FF190AA9C41D984E607BD50BCD50813E2D267C52100A 6F8C4FBE4EFD497BF3AE632021136F3F55B29DB05106D175F501B1AB7F4CBC9AF3A68B4E 82F19C854A20BE7CC5C18D3C5340BFA1914C3F5D4F7C5D4735BDFA3ED67D4563098C1115 B6FAA6A58A6954DA96C195855089EC4ACA573CA7E4D34F10868376DE88AF8A72B5F704A5 8551EC6D96F3939E28AF1E74A59BCABDC01D7058DC18964622319B6557F083A68D399188 C0FE3FF36D8122BFC8A2F650DF4DBEFB81B256A93C7ED227B2CAABB8C7A4D6A5EDF0177C 16F19307A4A0CA34D72298B259270431E6E82E1AA36B76EAB2F83A1132733A71F32B0564 E7177FCFEE97AEA9DD96A13002FD8B22BF5E8F48B914631BD555096FA650B056C47F4ADB 1B76EE959CC482B36EFE4140EBDEA9B1E4DE7FD0BBB6AE7E1827B7307AD7CE4E4AEEC3D3 E525946023BF7EE20188EA1027E2537AB18E307AB79C3D6A05086F09BDA178B24E8B2DA8 A1B7BA43F221D4A527CE938C269726A754FA40669E9EC4806A02E4BF4EB990395082B728 7F4DBD9A017384EC88421B5A9FF180C3C42F091EB3D78790108CE79D9F02B9567548AD3F BAF7EE173414346E32FBC2141FEA653BEE954AADD999A50D2FCF29A974ECAC8188F7C51C C159A478CFEB0F0349D5FCD0300E752666FEB04BB1E73601A39DECDF61E9B60E24786285 4F6A84E8F8B90653B9986BE6333750555A7CBF0D3ED816CF8B7392E0AA00AC5F1F972670 39258DAB26F507B72A1349712688E8F24D601E33A8D1E3AF9AB571C08B9C102F4BCD0639 6536666EDF68C3DE85D16B062DBBB5B091CC7101F0A822FEC5D836132CD1ECCAA78CC0A5 C6ADC483E441DE27DEE55432AC892C09670AC60F8990322B81FEFEEB0E20A2F1467A4AD4 51CC7A75B8C9CA0A084479F83A2D0911BB3180F3E7B3CF0EA230B17520D41CCA0EF0031D 146AD8E04FB08474799B2E989749CFA1B92B587C97D6273271A6CF7EFD27731C2B19E9DA 7BDEAC2B1FBE5CD69BCE7386BD161D6302D6A665B2F34E23727281FA71500E121A745D4C 7CCAC670DF0E05DBC663686AB55A2465BCDB4BAFB178A53A301E38D52190268100FE1A3E 7ACBBB22CDFF321A609108A3475969A14642F2C25D478A49FC0969570E5411433832D91F B4726992246CF61B6A0B1752FC2433917603E71960CBDC51BEDEF0865202805E583A68BF 941457298D44CBECFAD0B29827BA8DAB2C2C252CD82342274591F95EA2988659A0561DA4 EF832EA4D31102B7EB32B87BF233E7C8163AE310051C1C9F251BCACABB96012FF4766904 F989074C0A915824616D5F409494BD04C2927B2D4FE72D96FACD54E94B29B84A70FB756D 260304886C76A7D44707416A7555E944CB7E10118881FCF4285D534F35D7CBF4EA521607 2FAF34A65BDDB35E248561C4372F1005DC93D3BB3B77138FD8BE517A7A88CD12C2DB7705 536DE9B51D85D5BC7D04A9F802B013509B95B243EC7ACC86DFA15E1C5FB1C3D5D2FE41D7 CAC59127ED5E3681388A4746B602E7671BA1D1F05D9675B6676F6C89614211825F852D04 06521CD1FF160F0E88C763CC3B1752E5037CEE55D0B711975529D5C85A389EF1FD3ACC6E BF296A65E6C114EFD685D0409E521DA7424D972E0BB5B7EEB38D53D5BB3CF978BC3EEB0E 03BF3B7BA9ED1BBB3BE2460430517D632A9609EBB687D257CB0E16E33D49657857FA0E44 ABAF2B4F1AE97DC45453ACABA86ABC76CBF28554AB43D697AA98B19C32CE570D000C854E 4A26B40B1620E31B93ED2444AE54D8772E5D4DF20101F24EEEF72FFEB6A5C6636253125C 2086F09118D04D41739C7221718338BE6146A15A96ADE0219B3CE77F9BE8ECF2A19B038C CAB178B71DCE1A79413F213B08E8D42EC9C1ECD5B161B2E1204F6A8007649676634C2C73 0EBA99FCEC5A6382D3EED299B86C4229A00069ACEA2BE8ECC07A010F8EC7D04F9C0F9E88 6FDA571975201168ECE45F5B383C86A6564ED41B9FAF2BC8026242D766684EF29DA65945 E4EAAF52C7879944BD9E79EB078117E83B2B24C4B3D60DC072BDC835C324714A10AE5ADC 6BFF1128B9CF1D47B9AAB2B825E99304FF3ED83B99F68A2E92C0A1A7AAA3717373A86681 31AEC50C06446A0245C397D3EC934A65D2C1F077B44ED38A4D84A7CF830004902DF3EA05 BF8CED075BCAFDE6D972BC4E35AE05262BD9E40AD529B4001D06D96DECB66354791D25E8 3A8455D04478F7239C7175D5ECE78076CC2097B6618EB075F4C55DADDFA2C46F7ED3DCB3 73DEC1B00043A97A334D42FF3C932D3B9A7D97CB79D0F58A24812954F83BC5C133A63800 468EACA7CD89029B5C0016E84F5CA1168A586598DC942BE0F2ED7B878383DC751C305211 1BBF821FE1ADEAFC195E23223EC97034E09D7B3E25F76E35471E7513BFAFF88A26AF05E0 D1BC8EF718F499A07BE84DA43F85D183E31311CAF488B4ECAB9B702770882925B5505A43 59A09DC66608ACFB67A2D6409998110A21BCAC8BA9E2E246D735B2F75424D1EFC17E2A43 48976C776ADC201D373A5D7E6C7384E92AE015394A71961D2FE4491E841CC3C58E41E733 672E6C5ADE0CAD33808894949501F869C4D3C8EF9B0968EB63102F3346D451BCCC3838F4 D6033D3B703CE5E4CF1088781BEAEB261EA8678A6F53100ABFEEBF998A78F092F02802B8 1C5F7851E7084932262275B890DD657CDB993D84EBFB9284DF267107861C1180D289E2A6 6CCDE49F3454BBA696B0421D8D77BC7E475C0D31B81984FD69B49922D1712FB453C2F003 D4DB22B9603DA87FBDD683A26BBB1B7E4B44BEE1C916DA145ADDF5CC69BE9470EFAC22A1 93BE76765933E709691CA47CBB857AD30F74D6E94BE7A0537424CF481B0C69F42AACF2D3 4FB158354B62F0F17FA9FC85D14558A029292813C4C9B24152873DC642CAE8B6AE0B34BD BC4DB9A908E40177DF10CE3789FD51103FC2D21A69109AA9A8F729F38CF18044B0402FB9 B178086DC57FC09E4754CFBA960CB8F1EA4D5D3EAA5A4DAC8FE51276DE829615A51BAB00 7A0402477949096F3F4A9CFFDA50C7B15EE9A45B5C7D1F3D30681A8FACF2E0E7FFAB6F30 78F641A37241CD1ABDD030333208C4E07297AD3AB5C1F0FBC5DF1910D089954183FCC871 0659F8F1C8B9C3D8442DD24DFCC21E3BFE5669BA0D3E8BE5C58CF104413B36D8FEC7C3F3 C70A4AB81D35D7AC19ECC35F7CF2D8CCD26135C8EFBBAA2F2D2DA3A55A3950B9FF4DE1EB 164B0EA6F86662B1A007B09968D74CF8004160FF2A0070DA644EB2A25DDAB0FBA3D07635 F4F37EAEF469F33087B10BEF72620E730D3699EE1CBF77E16DCB43E55776FF5B154D6E01 D03178AE394ECEC17E5550FA97AAE952049BA0A26B632E0266CAC44269FD93BF5A190B5C 306756397AA3C0A01EAADF04EBE8A7FD25547D7E5EA283B1E3E6521492B7D087B8FD41DC A2160F668B12E3AD4D69E1CDB418AB8B91A0D477A143A9C8C6B8AC1E514F3A2EFEF2215F 24199D0B8D4E1878C57F52A6D6CBD248FB3946613949F689ED96A3737A2267A54568D9D8 EF1054CDAD8251AEC5EA56F4D0C4DB34F7DC4A32ADF77C226C8C4D49AB4A0CA9C430BF82 6F249E81768912903D6389971EAFC01411213065829CF88A3831B72903DDF92E7CC9FEE0 72E82C06AC8A31454CB2D6BE29457F85383301D1910B0E46529678ED64F3871097750F20 78F30E4364015E90C75A215F8A46B7542EB3051E025C9657F445C1CAC0F0BE7CB314653C 0526F62BE2F28F3145C107667043A0065FF0B74C9BB69C43BD43E19F91EF5ECA74891585 57BF5E7DFEC65AD7ED29E0D8637E93F0289215D97284528D721E3CA842B3A955FFBEDBE3 4E0555C51CE9C1CD9E1424B3497C234D23141D827EA98EEEDB8EC1FBF86ADA52DD42EA29 686A5B08BAA5833F83AC0404370BD345DACFBBE858EB1873FF49402EF667EDE58638A129 D536AC00F20BEDB1FB058515869FD0F8697BB914FF32B7855E010FA65520C5FE53F482E2 39FA285DECBF9CC5215179D7984EBA3F1580382C01FE2FCDCB8F01238FCBA2B96369AC6A 82D7D3FF03AD92B9966C98CF2225922CF58C53CA6E0D47DDD3DB383DF3D528BAC306D098 662732DFFC97893C8E034AA17E72E74F0A8EAF5E0604B7718FA83D7E6BE935B40FB995F7 61305FF47E92E30152F42F9D83ED21283A15D5C69D73E593B460836ADD1A861E6832C417 96E6C9406B51E68F5335C83F9BD1A2A4A55038D956E729FC79A1CACCD124DAFF8F0E4137 F8770DEF408607C464E4B9CD6151B116BFA3847505EF48E319A05B0E01F939E0A1E7827E F82362FCF26D90CED70CF6C78939582A8ACFD8D22B2B513E99B270FB4BB6BB71A99AC909 38EFC8046FB381AFDF48C3B94C1753E03E79D10C2254724E06751DAD001AFEA53DF789F4 8369139D9EA80A8F06B5A6166F7DC454DD6C3DFBDEF8F5711C9E05D280213DBBCEA38C71 EAAF6E8513F5781C1B258D87C5E38BCDB4211A7C42E639CF38AD16F705216FAF64589315 5289F53A07587D0338E6CC6694ABFE1CD1F0723C555494D9A0BCBD269ADAF12BEAE77C5A A3BDDBD068B952863471632472E42BADF68A2DAC91912237931C26BC315A11BF05004E87 B97E8E685F38EF4F26931AFF0E3ED56960472842626C924887B89EAE3F0D60079165ACA8 555A1AEE898D9DB871591069299DBDFA88FC8D739C6DF423A13688543646FBDF182CF2F1 839D38782A2450BED9DD9BE2C003E9B84501272A35F142E0DF9BE7A59BDE47FD59868E18 50C2BD66B8155D66410E54B9D94DF9705C723ECAAC1686B026760BB3729C17423E74A41D E9C3D50D7EE7956C33097F4FC9D20617DB16E194267B7106AB66C288D58307375DB32A9E 2C36E61AA8254F4D580ED4F462E315CC695BC1FFE9257417A03574A1E801F69C74C64738 2E200DD44D0AD71E20F8AE8D7B2CBD5CC4F6E100DE1573D93BEE2DDC929CBF233DD4A525 6B2174F79B50743B276A2F6554050CCA931C80D20BADBE0C742420FBCB16CDBD16B19F8F 9A2F1BCC671446C8356EAFAA58F132B05DCD21F992022C5DEC7923CA3E8530E4034BEC97 AE5684CFB5C7018EDE0082AC4CF49DC064E44C50DB435DD981DCB758C39B4700EC256CB4 3810EA11AFDB5E2179CDFCB97FCAC84666A02904CD3BBFE78E54AD91A4CD4E50253901BF 9E9ED0FBE9830DAEA4F87FB56B5537D31E99B02F4BA816938AB985EFC650FB22881328B3 EB2C51DE1191819522A6353B12E68BB11F897EAF99DF60C6356C13CD35FB8E0E3456FD00 F087CF44B834F077DE2F174471AC6033F54303A3F0D25D9455CC2A1EEE022F83112698DA 8D5755C786078CD72D12457F88A213E4B6E60D5389683413CE16C703E6C44E7B1DE23D86 FBC17013A56F0D5812BE12FA9CBD660061DF6C8AC6396D36050A5ACD9BD06CDB3DFC71D8 57BC576A3B11948C4F78524CD2ED7933C09C72D679DA6C08F648F8ED2822BB40066FDC9E 0439293804ECCD8026E0B23C3B79E044F08D075FB73F1E4C267BEF1421E6F2B1E21D422A 9081BD1AECE1C9C74307741519783EE230F601BFD66A79CE3F6A931B9ACB1BA6ED6B5399 325F9353775D8F081D9AE5908FA5DFC5B66DC44A7AEAD7A1092029B12A020509577E2465 14C0C5C616DCEFCE3CF127C93C4E9CC56AE73F1E144072BE9D917024238C61FB7776FA34 FE5846225EC253A0B6227D6D7165C9683161C88042B33F02D5C0A1663B2310E2C6636237 26AAECDB138BA10BF2518C510FEEBFDD249217416AFA6C371B37B43B04C18CADBC032CAD 721E58105BCDA1AF3716935D0E5286FE5DA1FEBDF62B304D65B1EF48DCE637684AF9BD57 1A09FF2027797FABF7DFAFAF0510C8A296FA3FB76127517B8C8EFEDC2AE615DBDE1B9CA1 00D00C565C9DBACA4E1E5A887FC2B00665C16A1658D0C4B355DC9D7A10578ABEF8208AB3 2CEE0C68D38044987F3CE8675090F93CE282D5B1598DFF336F6EB403C5EA947CDC505FFD 72D5B0C6BBC18969E92EBB652BE5AA4050CCDF1D7CAF8DE2B239BAEA3F1ED47EDAE080B1 E1D8DC75D6C8208CF0BBDE3DF05904CCEB34B2D618B4E582CA33ACD7E4F3C75940F4A5D6 339D162E3F8ADC6C401588DFE9F74562724EDAE29DDBBCF5762D3B1DA0E7A355D6EB5E8A 90A654133A65A5C9070108FA56889A0D5C5DB447463A74AAAC9B79C67FA7AA8392A048E7 A7981F015203F46C167689407173094443D998E88E4AA35887276174C0AF0ABBB4395F37 72BE055BF56332CE02718F93D78C4646F2F081C6995F2F3508B5112C448CF69B1695E682 56B97EE8041183FBE2ED3A82AA181995F68F34F5F3213FFC75175ABF7BCB2ADCF92F6D1D C42C470747580939B397375F3E8EF9C108B417D458087609214838539B918BA65C4F7A34 EF275FAD42CC093E544023524AB7416796BA812DDF3EF9430E8EF62C2B4A134719612CC7 E0B953AF34EDB9728BE24C2C10649F38AB50EECAEB38247852BA439989231C47B961EAAC 5968541779F2973848AAA564ED9C26DDF0F9433D5B5BECBBD276A51DAB98B95B0E49DF07 B67569EF183045258DF6349664A3B33F4BFFCF9B24F1099F80FF6D4B8188E67CF0C8C3EA 7DBBF16AAFC60C978AD249B3F658BC4F3A28E0440267137F456ECDE536088F9C29A8E0E8 0D0EE94BC115F1D1CB10E96C8174C48D84D25F85B348C059E9A440417669375B6E901E1B 9093211A65F98CCBA35B5CCE03457E29CBB10A19F21F02317BFDCB9555FCB02809DCA308 331289385B8957353B39481245E7BDE6B9C63EDE864A32BE5396F4B253DE6C589C3343A0 23D53326D017BBD604F6D43A3FCC1C8CC7C4AB4CAECEDB26FB54D3C1289C0F113B188920 1F61686761416B3270F7EB57A8DB54D8E33941CA0476F2DF08051DFB3FB6FE98CB4BE82F 9EA10B318B21D0FC141B5B8484B766184D35BA6F66272FADE2E74D6451156A375D57370E FFF28C002A8C747AA2792B12B7E8A726F65DC44E07D51C323C700DFC0177C5D2BEC27C2C 179E5CD16AABD842FF44CA17600FD72C0292786D972CD270C91B2D3575210C0901ADA197 D57CBFDAF9255D607ADD4DA6A0DCE8CC28F1F8FF137C89A9923D6BA1B22335201418CC75 B682A7D6DB695876E509A3766D839EF8D07BCE2DF1DCB78A76093F2AB6687092C33BD259 0F1DCA48A60548A6C62D4E8C9875EE63B8536D623AAFA86ACA25C75AFD5110D6FDFD35F9 71A1876DBDE38C7F26CB838A1453BE8B797E009F7E8F145BE4376B33AEBF4E3E79EE5914 47B886374710829429BFB17BC8E94CA9E409AA2B43FACD8F35BA0EA58B9EA42BC2B3D713 7B3B21010FD3E4D1D5258B874BA26361D2CF624C4C5CF2DE9F009BEF65621264A4DA2BAF 148C475F62EDB4A6FA8AF34CAA5EAEE1A7E88C1F4FE200BF34780A1CBA76F4AE5F11D064 C7D64D6E23F9D1D5A863ED35CAB98876D3932064BADCABD778C3E6CE0E68DB59ADF18C28 4CE187BD9026FD1D4E0C1BB618C5DC0071E7C8555CE634A433848D2F6D1098313145DEC5 FC93824C27F1BA4C10B0762C01C412BD42D9B402F51FD64C7D64A7DE06D8E2B9BBD0886E EE640DA6E366E9E3C13562F7DCFD02B8ACD2AB8ED1D61AE2716BA52B04524EE1741F95F8 62BE7B2A83B95FFEAFD2498D6A91690D9674BFE6677162CE4EBE6D5FDCCB3F1E7155CC4B 9795E098044D5C00DCCFDD2BC542E8148B89EFF81AF7B8695133AD1322F347B24623889C A2E3B79170EE3B8C54DAB0C2419000FAA6731CCF21E8C20B796D5207EE785CE9D462D542 5EC36CF34F5870996A4BC6591C32CCAC86891862FB90567E1CBCE1AD0A47A13E993CC190 06CEC1A7C2846E077083C81F704B09E6FC581E94C9D3639BF6A9C7DCFABE0271DD480E25 4FA511D5D1AA3E352D56570C7A8649C4BB8433B5478CB07066B3F5DDBFE5F07FDBAA8ABF 5E537FBC224EF7582F9E4047BA3BCAD7FFF835A3D4254DB06EA06D175C284C4C3C55B622 AEFAE481240F74B1F1BB1C2480B4F9F54DE19FE6A16CCE6F8E45037690312F65B8D3B81D EC80F173A95B8437066C8DF011F8C0036B2A15859B5CFC4989A6343E98C1E9E442C95B88 3C6124825080AEE6948D21257B9F8F4902933324231B840DECF4BFB4D3F4E39926AA4949 9C49A991549DEE1B9D8996C7C6E43F14DEA01D9637823AD92A11B80925E1DE73A09BCDE2 723A5775DC36EFF8721D541828409F39156C010FCB53D6AB720474830FDCF0AA444E2798 E0C1D380B2FC45C6CCA221504ABF48B4D23B8AC9BBF71182F745D3322E55837EEBC47175 49CDC4A8B3CB1BE97BEFAFB15F9246B35877318C9226C2FEC3740EFF0645A251BA0EA928 B9D13CDF6EC2BF73FF32B2EF10A2B7B35E961199A652E4B8F9D6CDA39499DC0190A28128 59034EE49A0597F1F02D1F86139B4347728522CAC14AF84DCDA198A733452DC5E5CED501 7F727E0495BA88FC28AED8C34D2451DC89DFD82D15ECAC961B2310B29837B75A351C358B E20AAEDF0AA00C90C443C218FEC9C111207F00CDBB7E8CDB18C42FF5863103A40B7A1ADC AA7130C63DB69CBC55525AF217A96C827A001A1FA608FB480DEEECB30041CCF54232B0F3 910B7B18FD77DED8ECDE2AD1AC40152EC84C4A1C50894B839EF2B741083705F1D7DAD1F0 3940ECDCE00E5E2F682D5E021F235866BBC45D29ECEBAFDB606EA70905AB1F40635F9FB0 52D7CB0629199F48CA667EB5AEE6F0F9A6C96704DF37AA1CDBDA3F636F1489353562CFE7 AE598F584306161048480E3B78F4D7AC8EFCBFB04F13F561ECAB3820111ADB5736BCAEE3 E129BBB3BA0DE94998A1D59A8F87CA9686857AA267F6A8AB7170148648E65F3795578C77 1F24B7510F8CEE5C1A800C9C4BC8A520EF216BCD0023E5D8C2DEE317E0381EBC5E36072B 6735A65DD3CE795147B1D84B2B105BBBF12E74DD67E6B5495FAA9F104B22643CC5CBA52B 424A042361A53F4DA24F6D97D4550931633DA69103D7B8AAD7B4793A3514A2686994109C 42FB80893C07153EFD6E8F2565AC8257E20DB0CA0D62D999C43B3916731CE01216DA182E 392205B7D1C494EEB126A4868901BEDDF6FE867E2D505C5BF821276CD48B3213A47EBCBF A0690730D0CEF87C29014CAEE8B2503391557E34710C4E652F84B20DA3751A6043BCBCAC C635A6A57C47A938CDD5E34D99F3934863823249A79CA89748FB9192C3C25264568DADAF C5F8218E918649E5C13DF9FFD1931689BD1C1C16D85D62C91ACE9054F956819C9039CE7B 234287804FABF0A1ECDDA38522845829AB9B4287C5E183F52DB0414410227822B9D61052 87718629142D2C2E09F5634074C5CD67E16A78110F5DF632D66A0FAC59B4C9C885325237 13E023DA93FCEDCCC06BE61D25F4CCADFA672CB7D75D03CA3A3387A15DBC4F78FC0E458E F7DA9B519748573A63A54EA3040F07521BF2951C4D60C41EC438D09985913B2018B10A23 0AEF40006C31F46F354C27FC20C4CD37BD3786A79198E1A5BAE23C45DBB1CE13E31E94E9 C93958EDE6A280D2576A12620EAEBDC1D483424C3A98BF94D967E0F5190E9754A6FFCB10 5ECA4DEC6505E7DF9B92A7BDD8FC9CDDD06C9B6070399EF675D906142D6144C5CD56D565 6D5CD32E6B9F0D5568CA1953335DF11AA4F4F8273D2C81A57F6AE201F45A6C7E7C3E494D DED951966C4244E86628A00F95765EABAD01DF68B994335CB3612B9D6C6B4304EBC5A278 7A82733AA58C3DA6BFBAA4171D8165FCDC441CA4A8A2988F7160C4B76BF27303BE0455F8 B64073B97698C9F0B64EC25AC958044261F6B1895104A138C702C58AF736021E11C30C05 15A585128750D0680953A7112891B7D892E711E3EAEFE52495E620441444344F1B6DBDB9 F7180D3C3CEDD83AE36066FADE059AD3F903B8DF67F15D905D869D4FDD52F855D45B05E5 AB52B41D2CF107AC6E33359439F096D6C84257F658A0D04ECAF2E4CDBBA2B9C959911904 5042D99F0E0B914757B30BC88FAD8889F4C3CB7E890FB5E04E291EE8168D704FCD951B77 86CB52D73D840D44FFA0ED5360D11936B770BE4334F7C1409978BB43BF1164FAF1CA84C4 4CDF4B0FAC59B9F3DF83AA7E9636816280F7F095BE6B34735137A45550609A0D66604716 6107DAE9EF8B8AB75ED89DCFCD1846B19C25069FC64F621D64732BB0A678C20F96A84380 B2D2C400E708D54D4073C4054ADC9BFC5E9F35265D7851829324D681697DA71833C478FA 843D2B38BE97E53316C49C07A7FE05E34944B506A45ACBC77D1170F7BD346BB549818E53 62D0941ABB453095FF8054FE231D12F08AB0C4AD42553266535EA8DA34256F2ECE24ED64 1E7D284D2B397C73688D1B2C6F7DF58C194FEE942109691EAFA9122329C653B2F9F1C443 7A94A244B579B80A164D995282B8837AB21979E24F9A15922EE8AD526F904D59DD82AD83 DAF5D0B5E0E80581551900E61143DF2B2B9B1DBA5D88C4D35F041D5877CB45A63EF405C0 3DCE66A9A7E2C243ADB083EE8EC7C492A76B6805CC93839A2410D586EFE88D1E81C94DB3 B0E94DBE3161971EE6D7C80980BFA0ECDBD1408192089BE1328FCCABDE53C42ABB563242 C2E61C6F29BFCC3C0CA327D16BFD3D4D9A1D1905936DE2203D4D83FBE9D0B136771451BE B0AB70507F7AD7DEE91B954E50BC6809BC3E03D6287B060E87E0D0218302342E9C7C98F6 7B05A6BFEAE36CE0556BADFF434BA64BDFAB1B9B55C4C5215E99AD95A9D65F7834A0FBB9 574CB1B4E8B255E22B346B4C780CE8EC44269096E39D348E9B53BDC5471366E086881FCF 5B3B88E91EC5714381A07CA917300AD43E35E87941552EA8F0AC97C7A89A0AEECE9A1829 EFA27DD7283B1DC579F84CBBE48063D25A376A45C0BE8740DCC6CEAB8EC7B284F710FA26 C88527B1F0571C36D6BCA9E41F31F7F2E9573C8F512C0B06D12F251752FF6E45D2DD5D7D F32B7A49825D19D0DA606F501CBCF7BC2F0BC24FA151FE49E7FFF9D41643723570E3A279 4328165FB5D9D4675757AD946D22FFAD92E6DE2159598C72C983BFCB0328BAFC5D5AABFA D42041FF30B9D94D143489092557716FAADD83226CBE9D5FE4AA5C2493A28EAA8DDD46A6 F423C1E79B330928B54D24BD2E2C97E3487A9C919B6F05E378A6C0F3DC15594A9381368A 39D8FC4E5C4F703D12E3A5890AAB2B0F0F0C4AB6D8587958B1D933979D0B541AD0E4C717 832DD1109DD53BA8982AE808FB00B98A9459F52EAD0225B85D58AB35C6B623DBED0563E6 CABD5E1BC07CE11A08BB10F54B1F2F5AB35BBCD145269D80819E72A82E8EAAB6BE26D7FC 679F9AA778B6D4EAF233318D5901A4F26A776065C893D58CFC21B4C3B7632F911655C455 C29691B32F65C0EFBC232087A9B2C089D3EBDCBE9C40D585B727E19D191C29E6A158616D 35E7EDE75AC7C61A145ECB0BEEE4FA85EBA1A359BEE688B9E8C7A94AACFE7CDA93A329E7 3A7B98DBE09F2DC61D13B8C81EA638075C4B4345B9EFA0EA3DB750C870F574BA6AF802BF 4D2BF0CF3E1DBBFAD0C0ABF2D632B33141D841EE4253703C7560AB3D5BD93A7C001B1320 E62C897FED2AF0FC3BAB7CA91E54C7F43D6B8FDA4166B43F3DFE5326B6E6E9D9F5140369 76A75BFA03F30ABCF830B4F8227F2E2E731B4FEE84BE3D9AB925B9DA291CF377746BC950 F964B79BE40514908975DE940C12C8A4047B3484D9A76205F14DC980377C030CF540BB55 DEDB771E02699894B4EA53EFDD5CCD6ACEB3F59F2F2623DD2EB8ABEE7378CE553E46FB37 A926E6AB776A17263C54F10854916FD65F8C0B886D0EF317F4BBA1042068ECD47D0961E5 2B18FBC4C36F7DB6DD0226625C2F7C7EF834A6EEE67960BA35D5831DCA1D4AD99BEE273D B5649A5337FEFD02A0FC93816B414D58FACF2EBAC6482BAE6EED20A78C47C844969FCFC9 F56B0AF95F29C98BB814D96B31F7A8B312EDA616E32F8280ED45AC35730E27FC1338905C E19778934793D964F8655B76386616311F876A156345EFB079F1EE2D910A6BAA08485345 5BEC77AAC3FDE0894F874025D86EF564FEA735BE3DC22E910838F21BED5E3D418C7363D7 5F653C6A73A5723FB26F1A33AD57ACCDB4F71EC6F5CFE52B693E416A222E88C762A63DE2 468161263CD109F91A69B9FCA4BF1E62A0BA989E2F814F77C934910D9BBE8C539C3A50E2 B1B9F1D250162DB1F11DA5C06130F8F65E9CC4B6ED9848ECC1CCC61DD1846BBD85BA59A5 B0AA28A95C117958D650400EA6981469BD03421704CA2DC30E1406FCA7409DD859807F1F 993D5D845592736279FC9FFB130347490CAEEF2B02116EE6445E5A0D8ED4541E395DE43B 421ED67B8ACDD1F8724BE6D9D3AD0BE85C34A78A601FC5E0382ECA9DCDDC5A919F580BC8 6228835D0DA621E20C962C5BBB4CC9C044AA7AE287DEF581ADB3BA8E3A69B6FB55984848 629B1295466AB777595E0F1AB7887F18C009DE83CB09933A6D5C178C1FA5A78806338C56 283E4F36C258071F902E611D213EA4BF23433D69E4960022DBD9E5F4C03DB2443AECB21A 77A1F9ACF58469177660257DF213FB5C7424783BB8468FF0B34760F28A88C64CD4BE55C3 8518751FC67E5684DD7C7B0A81614CF68EFEAB50A1287B5F52947ECC8CC3C16783E08B4F 9020DBF6050CF9F55755C599504385942D3926B41543BED80C3A04E08AE03031E3FE0915 45881D32AB23DDA57F2938419D6B4490AA1B6BF891383C3E5E6E56DA51C8A79983F0D654 209322E627B0B5BB18BA0BD25D4B1DE0C0C6E33E9A813700799A7E7C838136B4C7480180 24B263BC834084705194BD67ACF72E18F3CE13F7C1BCF49FAD234FDF997A8A1C1D08F651 CAB73DC69C380D222BD8D10AB95C331390FF6C03811B3D23B82A16F7C221C4EC0E76E641 1C5A0E7D69370B15883E500570D4AC5AFD7363317E42E6A6BC412675D9BC7ECA1453DC03 69CF6B9848C7BF816F9BD26FE1DA9A6BFF93DDE35B2744B22ED33F9E1E56896B15A2DF24 35DD66B437A871C2357B4748E6438FF41DED08D0F2BE03F4121DCB256EAC779123CCB7AE 3E9B1203A142112D779D619ADC284D6C20EED8A2EDB4C801B4DCD5A5608628FC155D4A90 F0185E6FC3A63CFD235A889ECAE49113331D8C65DFCB6492D487F1A808672F8A6B6DA14E 3A8404C83C0A353F85C0AF19CF5AAD32DD750C2E398E9373F3C0E1D63D5D4D139DF261D2 2CE49060AA2125128F1F5AEFC97D77DA0CF4FF4D6662092B5A4C01DF510A4CBA1D7009D5 8EE9B24AAA0B0C9E8904CAE56621E62736F002F42819D59285DBA7841104D67DF854DBC9 1F0553014066C4C9ABA4CB51008991B64D14E94B39010BB6A5C08D3A8341FCD22B7F0E87 84425318040813BB5E5AB09431381318FC098E0FD1E00FA9D14FF7FE4ED0C792AC878E67 7D635BCD953F5A7F27197DFF71174A661491776007F6DC222039CAE1AB8B3E7788FD961D F8F2EECD8230EA5CD2A1CA712235547DDF27958B28859FD588968B30E3D6AE846E1FB01E 19110BE50839A4511B495EB500478AAC2F6033B174E18981106AC854B6D4437FA8022E99 DD8C39F84ACED786E28F35B57375837144B0A0701932C9CC44B8D8A566AD5C5EBF503323 354714C4990374137023F9D62232033CC68DAB391C5679DFF4F098A0FCE0C70901288D16 88AD79D2DF70731F221BA0BC700ED1AC2D0D0D83B224F4FFBE0CAA59F46AF076BFE8A8E6 916F0FA7D1229A70784EDDC22CC489AD6DDE1D5B6F60D0677A8D26FA1DBBF203765E7101 8B97538249D38785F89C8FB6234E2321829B9A489582A9BFAD6B64CE59DAA30055A72A3A 802DD84019738233A0516E11A4CB9A6DDFB302493F3271BA74A6990103A87BC39E645998 0A2E87B593131204ACE94D09539C46F9A273B6CF0A4C1808E1800711E73A699DB9D68F71 5E28F32190CB408F2333F33908C4814AE967FE9A6396F2E33B796F0CD34DD58807BF6D73 84E4800AE3F78E1E3879FCB575EF117801F55AD31728CADE01E5DB7E66825DF797826106 3A4591FBCB6FA089CD1C3FC535616EED857B88CD8FB810058E5548B1ED9DB181C072F058 392EE78C2661F2E540035B510B5C61D4816FD1B924A7B57B57C6AC54E791F3453B0C796E DAA043FD9E3EA6646B8138556E67A65ADD2BE4C847C26BCF78F5D613F2EBB12B517F8805 09C6969EB13F9AC3D2C6FF4DF3036AC10C6F1C153021F1DAFEE5846618F09663F991BCA7 E27506BE0B43540115E1F4F4E2CE54F1FEACE6DB1F72BC013CAC5D2C8F0A5331291C154C 8E2742305E489B49C083DE392298C106345D3936E7A2DE98DA272A3886B669237F2B427B 141DE2BD33792746F6EFC9503663F130B8E5DC699384452FCCD8ABAEC16AEE5C2C40088F 578D88E414F0F5415A13DC2E8AD72191B2AEE48C54ECF136C02E4BA0B4497F049BB04CE0 73F4FCAD9DC83AFF8B42FE3BC1619CB04076989B4F378BAA99F27D0DC314884B0ACD3FD7 CE5D60313846DD7D9527B057AE839A5D9E4C3B8CE546B1A1512AE7A7B60CB9E8A4DC5F49 738AE9196EBEDEFFCDC2CD2EDC3ED7638F3D3AC7127B4DC9080E6AAB3BA53942F2F20F80 7336BC0DDEEF09D37C31B4A8275F45409D628CDCCDB4B71FA713C16058DCF018FCD38FBF 772863CFCEEDD003E79367241C1324363E07F56C66F8A5DB86FFB41726193F11A18DDA6C 256E4CEE4C8028E2316BC88FBAC6328022A4589375EBC64DAC988713DFE64518E2306660 A8D810F6F9F245E1E1FEC6533E2376DADC0DE29C7265764731FF7F975182DDB3149668E2 6F9EDB0D0D5D3A8F8CD9147F941487C4538010C93E9C12886D80870F8B20609D1D490148 0750439B7BEC501FC94B298E4514184D161443CB0A664868E6938438CA882A49084A06D3 5447F14D6D0A35B2261F6806F06BD05F41267396C81703F56A439A429EF851C7E3148BAA 30D535BFC77654CF19050529FDAD0D70BDEDF580C5B8849C5F5CC8C04A7D39BE51D5C15C 88308CA90557E6CB99FDB961A890858D760C2918B8C2455A353E4E39382E8033F22F3E2B 30A8BB489F5861EC0E5CC2AEECF5E9F3064E93BE0755840E5F24B172FB45EED1424D1184 774A8EA31D149589396008D627815DA3C9AD1151A2C38B63A1ACF3E9E96B9EA2EBC50DC5 EE9E5FBD3A2C7291A3EED224E63BEF7950B304BA03948E05C189915E378CC0E77A71F052 3A45B3600A21D8B4C8B91B812448527FE9B3325715472541FA8A0A6DDD17E4D773B7C5B4 6FEC36D0CD0BCC1E8F463CFF30F1AA23CB13688D13987C1E570BD6F378C468F726494C14 E47CA5B11B138FB3BC42E59416A4AEC3690F1313299EC390432B5038AA1ED0173F0A8446 03E9AAC008B9C5185DBF78AC1C99AAE8E5E2658D6C5D2F8E25F214A14682686A772B1937 32FA542C5342EC6CF6801F604BF2C171A5FDC28699A853330FC3B59CDA7FB27534876F7C 0ADBD834BE8CB7A9F60CE1639489F94F5AFA6E5C96B06F787DF17A0C0933C1A20FE6E930 7FB8A957A5DC04F5140BB255CE49CDE866C571239E350B89DF296CCB49DDCFB405993E27 1DD77457D6B1A01C9DC10E7BC081916722F624729FDED951ED77E7F2243D646FD085239F 43FFD3D72E35178EB9F5D266D75E1CE726EBBD9414FE966AE48D0E4B886E8F966988172D FEF949B8219CEC2CBD0D397410769DF5B0F97FD640CB01F719A7022D421807F08F05B2D2 B77B28FDA59E3B0F8D3FFE9BD8BF8D9EB47F4B38FD9934B489E75D4AD49E35A69EFC492C BC8DCD4A02CFC57E6AEAD3326193ED92BAA71CE453A76C48E9E70D170FB7CFB2BB4ECB50 043508B48F54D849F7A09B394CD40CF48E5C020F6F2F891785520491633903DD753E078F 2B3C33768E785AEF3E4ED00DF6E3516AC6D87FF12A342C785548002BFB98679659B56101 3AF8BAE2E94BA74745010B8DF0C35AF1A77476381F6DFF03AB96BA53205BEB05BC848FE6 D575E840370E2AC639A743FEACF5B316849E4B4B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Sans-Oblique.afm0100664000212600000240000016707010330505373016054 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Sans-Oblique FullName Sans Oblique FamilyName Sans Weight Book Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle -11 IsFixedPitch false UnderlinePosition -213 UnderlineThickness 143 Version 1.15 EncodingScheme ISO10646-1 FontBBox -263 -505 1474 1030 CapHeight 729 XHeight 546 Ascender 759 Descender -208 StartCharMetrics 823 C 0 ; WX 600 ; N .notdef ; B 49 -177 550 706 ; C 32 ; WX 317 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 400 ; N exclam ; B 79 0 320 730 ; C 34 ; WX 459 ; N quotedbl ; B 96 458 364 730 ; C 35 ; WX 837 ; N numbersign ; B 69 0 773 718 ; C 36 ; WX 636 ; N dollar ; B 33 -147 570 760 ; C 37 ; WX 950 ; N percent ; B 90 -15 859 743 ; C 38 ; WX 779 ; N ampersand ; B 46 -15 736 743 ; C 39 ; WX 274 ; N quotesingle ; B 96 458 180 730 ; C 40 ; WX 390 ; N parenleft ; B 77 -132 427 759 ; C 41 ; WX 390 ; N parenright ; B -63 -132 289 759 ; C 42 ; WX 500 ; N asterisk ; B 29 286 471 743 ; C 43 ; WX 837 ; N plus ; B 105 0 732 627 ; C 44 ; WX 317 ; N comma ; B 2 -117 193 125 ; C 45 ; WX 360 ; N hyphen ; B 44 233 325 314 ; C 46 ; WX 317 ; N period ; B 58 0 186 125 ; C 47 ; WX 336 ; N slash ; B -74 -93 427 730 ; C 48 ; WX 636 ; N zero ; B 49 -15 586 743 ; C 49 ; WX 636 ; N one ; B 48 0 485 730 ; C 50 ; WX 636 ; N two ; B 3 0 575 743 ; C 51 ; WX 636 ; N three ; B 1 -15 572 743 ; C 52 ; WX 636 ; N four ; B 18 0 565 730 ; C 53 ; WX 636 ; N five ; B 20 -15 582 730 ; C 54 ; WX 636 ; N six ; B 62 -15 592 743 ; C 55 ; WX 636 ; N seven ; B 92 0 627 730 ; C 56 ; WX 636 ; N eight ; B 33 -15 593 743 ; C 57 ; WX 636 ; N nine ; B 43 -15 575 743 ; C 58 ; WX 336 ; N colon ; B 51 0 256 518 ; C 59 ; WX 336 ; N semicolon ; B 0 -117 268 518 ; C 60 ; WX 837 ; N less ; B 105 45 732 582 ; C 61 ; WX 837 ; N equal ; B 105 171 732 455 ; C 62 ; WX 837 ; N greater ; B 105 45 732 582 ; C 63 ; WX 530 ; N question ; B 123 0 512 743 ; C 64 ; WX 1000 ; N at ; B 58 -173 951 704 ; C 65 ; WX 684 ; N A ; B -54 0 616 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 686 ; N B ; B 26 0 625 730 ; C 67 ; WX 698 ; N C ; B 41 -15 695 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 770 ; N D ; B 26 0 723 730 ; L uni030C Dcaron ; C 69 ; WX 631 ; N E ; B 26 0 630 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 575 ; N F ; B 26 0 587 730 ; C 71 ; WX 774 ; N G ; B 44 -15 726 743 ; L uni0306 Gbreve ; C 72 ; WX 751 ; N H ; B 26 0 726 730 ; C 73 ; WX 294 ; N I ; B 26 0 269 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 294 ; N J ; B -165 -201 267 730 ; C 75 ; WX 655 ; N K ; B 26 0 723 730 ; C 76 ; WX 557 ; N L ; B 26 0 498 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 862 ; N M ; B 26 0 836 730 ; C 78 ; WX 748 ; N N ; B 26 0 722 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 787 ; N O ; B 40 -15 748 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 603 ; N P ; B 26 0 602 730 ; C 81 ; WX 787 ; N Q ; B 41 -129 748 743 ; C 82 ; WX 694 ; N R ; B 26 0 601 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 634 ; N S ; B 5 -15 604 743 ; L uni030C Scaron ; C 84 ; WX 610 ; N T ; B 42 0 676 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 731 ; N U ; B 58 -15 713 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 684 ; N V ; B 78 0 743 730 ; C 87 ; WX 988 ; N W ; B 96 0 1021 730 ; C 88 ; WX 685 ; N X ; B -43 0 704 730 ; C 89 ; WX 610 ; N Y ; B 62 0 676 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 685 ; N Z ; B -22 0 704 730 ; L uni030C Zcaron ; C 91 ; WX 390 ; N bracketleft ; B 40 -132 420 760 ; C 92 ; WX 336 ; N backslash ; B 84 -93 263 730 ; C 93 ; WX 390 ; N bracketright ; B -39 -132 342 760 ; C 94 ; WX 837 ; N asciicircum ; B 105 457 732 730 ; C 95 ; WX 500 ; N underscore ; B -10 -236 510 -166 ; C 96 ; WX 500 ; N grave ; B 189 617 389 800 ; C 97 ; WX 612 ; N a ; B 41 -15 547 561 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 634 ; N b ; B 36 -15 587 760 ; C 99 ; WX 549 ; N c ; B 45 -15 537 561 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 634 ; N d ; B 45 -15 640 760 ; L uni030C dcaron ; C 101 ; WX 615 ; N e ; B 45 -15 571 561 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 352 ; N f ; B 67 0 479 760 ; L l fl ; L i fi ; C 103 ; WX 634 ; N g ; B 32 -209 597 561 ; L uni0306 gbreve ; C 104 ; WX 633 ; N h ; B 35 0 566 760 ; C 105 ; WX 277 ; N i ; B 35 0 273 760 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 277 ; N j ; B -113 -209 277 760 ; C 107 ; WX 579 ; N k ; B 35 0 612 760 ; C 108 ; WX 277 ; N l ; B 35 0 273 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 974 ; N m ; B 35 0 906 561 ; C 110 ; WX 633 ; N n ; B 35 0 566 561 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 611 ; N o ; B 45 -15 566 561 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 634 ; N p ; B -3 -209 589 561 ; C 113 ; WX 634 ; N q ; B 45 -207 598 561 ; C 114 ; WX 411 ; N r ; B 35 0 463 561 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 520 ; N s ; B 11 -15 500 561 ; L uni030C scaron ; C 116 ; WX 392 ; N t ; B 63 0 423 703 ; L uni030C tcaron ; C 117 ; WX 633 ; N u ; B 57 -15 589 547 ; L uni030C uni01D4 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 591 ; N v ; B 71 0 605 547 ; C 119 ; WX 817 ; N w ; B 84 0 819 547 ; C 120 ; WX 591 ; N x ; B -26 0 601 547 ; C 121 ; WX 591 ; N y ; B -25 -209 604 547 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 524 ; N z ; B -3 0 543 547 ; L uni030C zcaron ; C 123 ; WX 636 ; N braceleft ; B 121 -164 605 760 ; C 124 ; WX 336 ; N bar ; B 126 -236 210 765 ; C 125 ; WX 636 ; N braceright ; B 6 -164 492 760 ; C 126 ; WX 837 ; N asciitilde ; B 105 228 732 399 ; C 160 ; WX 636 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 400 ; N exclamdown ; B 84 0 327 730 ; C 162 ; WX 636 ; N cent ; B 74 -153 563 699 ; C 163 ; WX 636 ; N sterling ; B 23 0 638 743 ; C 164 ; WX 636 ; N currency ; B 45 40 592 587 ; C 165 ; WX 636 ; N yen ; B 44 0 673 730 ; C 166 ; WX 336 ; N brokenbar ; B 126 -171 210 700 ; C 167 ; WX 500 ; N section ; B 12 -96 485 743 ; C 168 ; WX 500 ; N dieresis ; B 184 659 494 758 ; C 169 ; WX 1000 ; N copyright ; B 138 0 862 726 ; C 170 ; WX 471 ; N ordfeminine ; B 40 229 446 743 ; C 171 ; WX 617 ; N guillemotleft ; B 62 68 556 518 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 421 ; C 173 ; WX 360 ; N sfthyphen ; B 44 233 325 314 ; C 174 ; WX 1000 ; N registered ; B 138 0 862 726 ; C 175 ; WX 500 ; N macron ; B 186 672 493 746 ; C 176 ; WX 500 ; N degree ; B 95 432 405 743 ; C 177 ; WX 837 ; N plusminus ; B 105 0 732 627 ; C 178 ; WX 400 ; N twosuperior ; B 36 326 385 743 ; C 179 ; WX 400 ; N threesuperior ; B 16 318 369 743 ; C 180 ; WX 500 ; N acute ; B 251 616 522 800 ; C 181 ; WX 636 ; N mu ; B -14 -209 592 547 ; C 182 ; WX 636 ; N paragraph ; B 78 -97 574 730 ; C 183 ; WX 317 ; N periodcentered ; B 113 285 242 410 ; C 184 ; WX 500 ; N cedilla ; B 48 -193 268 0 ; C 185 ; WX 400 ; N onesuperior ; B 65 326 348 734 ; C 186 ; WX 471 ; N ordmasculine ; B 40 229 462 743 ; C 187 ; WX 617 ; N guillemotright ; B 62 68 555 518 ; C 188 ; WX 969 ; N onequarter ; B 65 -15 959 743 ; C 189 ; WX 969 ; N onehalf ; B 65 -15 953 743 ; C 190 ; WX 969 ; N threequarters ; B 16 -15 959 743 ; C 191 ; WX 530 ; N questiondown ; B 37 -14 425 730 ; C 192 ; WX 684 ; N Agrave ; B -54 0 616 928 ; C 193 ; WX 684 ; N Aacute ; B -54 0 616 928 ; C 194 ; WX 684 ; N Acircumflex ; B -54 0 616 929 ; C 195 ; WX 684 ; N Atilde ; B -54 0 618 921 ; C 196 ; WX 684 ; N Adieresis ; B -54 0 616 914 ; C 197 ; WX 684 ; N Aring ; B -54 0 616 929 ; C 198 ; WX 974 ; N AE ; B -45 0 995 730 ; C 199 ; WX 698 ; N Ccedilla ; B 41 -193 695 743 ; C 200 ; WX 631 ; N Egrave ; B 26 0 630 928 ; C 201 ; WX 631 ; N Eacute ; B 26 0 630 928 ; C 202 ; WX 631 ; N Ecircumflex ; B 26 0 630 929 ; C 203 ; WX 631 ; N Edieresis ; B 26 0 630 914 ; C 204 ; WX 294 ; N Igrave ; B 26 0 292 928 ; C 205 ; WX 294 ; N Iacute ; B 26 0 383 928 ; C 206 ; WX 294 ; N Icircumflex ; B 26 0 379 929 ; C 207 ; WX 294 ; N Idieresis ; B 26 0 392 914 ; C 208 ; WX 774 ; N Eth ; B 0 0 728 730 ; C 209 ; WX 748 ; N Ntilde ; B 26 0 722 921 ; C 210 ; WX 787 ; N Ograve ; B 40 -15 748 928 ; C 211 ; WX 787 ; N Oacute ; B 40 -15 748 928 ; C 212 ; WX 787 ; N Ocircumflex ; B 40 -15 748 929 ; C 213 ; WX 787 ; N Otilde ; B 40 -15 748 921 ; C 214 ; WX 787 ; N Odieresis ; B 40 -15 748 914 ; C 215 ; WX 837 ; N multiply ; B 137 30 702 597 ; C 216 ; WX 787 ; N Oslash ; B -35 -33 810 762 ; C 217 ; WX 731 ; N Ugrave ; B 58 -15 713 928 ; C 218 ; WX 731 ; N Uacute ; B 58 -15 713 928 ; C 219 ; WX 731 ; N Ucircumflex ; B 58 -15 713 929 ; C 220 ; WX 731 ; N Udieresis ; B 58 -15 713 914 ; C 221 ; WX 610 ; N Yacute ; B 62 0 676 928 ; C 222 ; WX 607 ; N Thorn ; B 26 0 578 730 ; C 223 ; WX 629 ; N germandbls ; B 46 -15 590 760 ; C 224 ; WX 612 ; N agrave ; B 41 -15 547 800 ; C 225 ; WX 612 ; N aacute ; B 41 -15 571 800 ; C 226 ; WX 612 ; N acircumflex ; B 41 -15 547 800 ; C 227 ; WX 612 ; N atilde ; B 41 -15 563 777 ; C 228 ; WX 612 ; N adieresis ; B 41 -15 547 758 ; C 229 ; WX 612 ; N aring ; B 41 -15 547 878 ; C 230 ; WX 995 ; N ae ; B 41 -15 952 561 ; C 231 ; WX 549 ; N ccedilla ; B 45 -193 537 561 ; C 232 ; WX 615 ; N egrave ; B 45 -15 571 800 ; C 233 ; WX 615 ; N eacute ; B 45 -15 577 800 ; C 234 ; WX 615 ; N ecircumflex ; B 45 -15 571 800 ; C 235 ; WX 615 ; N edieresis ; B 45 -15 571 758 ; C 236 ; WX 277 ; N igrave ; B 35 0 263 800 ; C 237 ; WX 277 ; N iacute ; B 35 0 396 800 ; C 238 ; WX 277 ; N icircumflex ; B 35 0 352 800 ; C 239 ; WX 277 ; N idieresis ; B 35 0 368 758 ; C 240 ; WX 611 ; N eth ; B 44 -15 587 760 ; C 241 ; WX 633 ; N ntilde ; B 35 0 581 777 ; C 242 ; WX 611 ; N ograve ; B 45 -15 566 800 ; C 243 ; WX 611 ; N oacute ; B 45 -15 579 800 ; C 244 ; WX 611 ; N ocircumflex ; B 45 -15 566 800 ; C 245 ; WX 611 ; N otilde ; B 45 -15 570 777 ; C 246 ; WX 611 ; N odieresis ; B 45 -15 566 758 ; C 247 ; WX 837 ; N divide ; B 105 73 732 555 ; C 248 ; WX 611 ; N oslash ; B -15 -46 623 590 ; C 249 ; WX 633 ; N ugrave ; B 57 -15 589 800 ; C 250 ; WX 633 ; N uacute ; B 57 -15 589 800 ; C 251 ; WX 633 ; N ucircumflex ; B 57 -15 589 800 ; C 252 ; WX 633 ; N udieresis ; B 57 -15 589 758 ; C 253 ; WX 591 ; N yacute ; B -25 -209 604 800 ; C 254 ; WX 634 ; N thorn ; B -3 -209 589 760 ; C 255 ; WX 591 ; N ydieresis ; B -25 -209 604 758 ; C -1 ; WX 684 ; N Amacron ; B -54 0 616 899 ; C -1 ; WX 612 ; N amacron ; B 41 -15 547 746 ; C -1 ; WX 684 ; N Abreve ; B -54 0 625 927 ; C -1 ; WX 612 ; N abreve ; B 41 -15 563 761 ; C -1 ; WX 684 ; N Aogonek ; B -54 -194 619 730 ; C -1 ; WX 612 ; N aogonek ; B 41 -194 547 561 ; C -1 ; WX 698 ; N Cacute ; B 41 -15 695 928 ; C -1 ; WX 549 ; N cacute ; B 45 -15 581 800 ; C -1 ; WX 698 ; N Ccircumflex ; B 41 -15 695 929 ; C -1 ; WX 549 ; N ccircumflex ; B 45 -15 552 800 ; C -1 ; WX 698 ; N Cdotaccent ; B 41 -15 695 915 ; C -1 ; WX 549 ; N cdotaccent ; B 45 -15 537 758 ; C -1 ; WX 698 ; N Ccaron ; B 41 -15 695 929 ; C -1 ; WX 549 ; N ccaron ; B 45 -15 571 800 ; C -1 ; WX 770 ; N Dcaron ; B 26 0 723 929 ; C -1 ; WX 634 ; N dcaron ; B 45 -15 820 760 ; C -1 ; WX 774 ; N Dcroat ; B 0 0 728 730 ; C -1 ; WX 634 ; N dcroat ; B 45 -15 702 760 ; C -1 ; WX 631 ; N Emacron ; B 26 0 630 900 ; C -1 ; WX 615 ; N emacron ; B 45 -15 571 746 ; C -1 ; WX 631 ; N Ebreve ; B 26 0 630 929 ; C -1 ; WX 615 ; N ebreve ; B 45 -15 571 786 ; C -1 ; WX 631 ; N Edotaccent ; B 26 0 630 915 ; C -1 ; WX 615 ; N edotaccent ; B 45 -15 571 758 ; C -1 ; WX 631 ; N Eogonek ; B 26 -194 630 730 ; C -1 ; WX 615 ; N eogonek ; B 45 -194 571 561 ; C -1 ; WX 631 ; N Ecaron ; B 26 0 630 929 ; C -1 ; WX 615 ; N ecaron ; B 45 -15 571 800 ; C -1 ; WX 774 ; N Gcircumflex ; B 44 -15 726 929 ; C -1 ; WX 634 ; N gcircumflex ; B 32 -209 597 800 ; C -1 ; WX 774 ; N Gbreve ; B 44 -15 726 929 ; C -1 ; WX 634 ; N gbreve ; B 32 -209 597 786 ; C -1 ; WX 774 ; N Gdotaccent ; B 44 -15 726 915 ; C -1 ; WX 634 ; N gdotaccent ; B 32 -209 597 758 ; C -1 ; WX 774 ; N Gcommaaccent ; B 44 -230 726 743 ; C -1 ; WX 634 ; N gcommaaccent ; B 32 -209 597 776 ; C -1 ; WX 751 ; N Hcircumflex ; B 26 0 726 929 ; C -1 ; WX 633 ; N hcircumflex ; B 35 0 566 929 ; C -1 ; WX 916 ; N Hbar ; B 109 0 868 730 ; C -1 ; WX 694 ; N hbar ; B 45 0 577 760 ; C -1 ; WX 294 ; N Itilde ; B 26 0 416 921 ; C -1 ; WX 277 ; N itilde ; B 35 0 388 777 ; C -1 ; WX 294 ; N Imacron ; B 26 0 390 899 ; C -1 ; WX 277 ; N imacron ; B 35 0 382 745 ; C -1 ; WX 294 ; N Ibreve ; B 26 0 400 929 ; C -1 ; WX 277 ; N ibreve ; B 35 0 381 786 ; C -1 ; WX 294 ; N Iogonek ; B -7 -194 269 730 ; C -1 ; WX 277 ; N iogonek ; B -8 -194 273 760 ; C -1 ; WX 294 ; N Idotaccent ; B 26 0 297 915 ; C -1 ; WX 277 ; N dotlessi ; B 35 0 232 547 ; C -1 ; WX 589 ; N IJ ; B 26 -201 562 730 ; C -1 ; WX 555 ; N ij ; B 35 -209 555 760 ; C -1 ; WX 294 ; N Jcircumflex ; B -165 -201 386 929 ; C -1 ; WX 277 ; N jcircumflex ; B -113 -209 361 800 ; C -1 ; WX 655 ; N Kcommaaccent ; B 26 -216 723 730 ; C -1 ; WX 579 ; N kcommaaccent ; B 35 -216 612 760 ; C -1 ; WX 579 ; N kgreenlandic ; B 37 0 618 547 ; C -1 ; WX 557 ; N Lacute ; B 26 0 498 928 ; C -1 ; WX 277 ; N lacute ; B 35 0 423 928 ; C -1 ; WX 557 ; N Lcommaaccent ; B 26 -216 498 730 ; C -1 ; WX 277 ; N lcommaaccent ; B -34 -216 273 760 ; C -1 ; WX 557 ; N Lcaron ; B 26 0 498 730 ; C -1 ; WX 329 ; N lcaron ; B 35 0 474 760 ; C -1 ; WX 557 ; N Ldot ; B 26 0 498 730 ; C -1 ; WX 595 ; N ldot ; B 35 0 443 760 ; C -1 ; WX 562 ; N Lslash ; B -21 0 502 730 ; C -1 ; WX 287 ; N lslash ; B 17 0 318 760 ; C -1 ; WX 748 ; N Nacute ; B 26 0 722 928 ; C -1 ; WX 633 ; N nacute ; B 35 0 566 804 ; C -1 ; WX 748 ; N Ncommaaccent ; B 26 -216 722 730 ; C -1 ; WX 633 ; N ncommaaccent ; B 35 -216 566 561 ; C -1 ; WX 748 ; N Ncaron ; B 26 0 722 929 ; C -1 ; WX 633 ; N ncaron ; B 35 0 571 800 ; C -1 ; WX 813 ; N napostrophe ; B 74 0 733 730 ; C -1 ; WX 748 ; N Eng ; B 37 -209 720 730 ; C -1 ; WX 633 ; N eng ; B 56 -209 587 561 ; C -1 ; WX 787 ; N Omacron ; B 40 -15 748 899 ; C -1 ; WX 611 ; N omacron ; B 45 -15 566 745 ; C -1 ; WX 787 ; N Obreve ; B 40 -15 748 929 ; C -1 ; WX 611 ; N obreve ; B 45 -15 566 786 ; C -1 ; WX 787 ; N Ohungarumlaut ; B 40 -15 774 928 ; C -1 ; WX 611 ; N ohungarumlaut ; B 45 -15 624 800 ; C -1 ; WX 1069 ; N OE ; B 45 0 1067 730 ; C -1 ; WX 1027 ; N oe ; B 45 -15 984 561 ; C -1 ; WX 694 ; N Racute ; B 26 0 601 928 ; C -1 ; WX 411 ; N racute ; B 35 0 549 804 ; C -1 ; WX 694 ; N Rcommaaccent ; B 26 -216 601 730 ; C -1 ; WX 411 ; N rcommaaccent ; B -34 -216 463 561 ; C -1 ; WX 694 ; N Rcaron ; B 26 0 601 926 ; C -1 ; WX 411 ; N rcaron ; B 35 0 492 794 ; C -1 ; WX 634 ; N Sacute ; B 5 -15 604 928 ; C -1 ; WX 520 ; N sacute ; B 11 -15 549 804 ; C -1 ; WX 634 ; N Scircumflex ; B 5 -15 604 929 ; C -1 ; WX 520 ; N scircumflex ; B 11 -15 500 800 ; C -1 ; WX 634 ; N Scedilla ; B 5 -193 604 743 ; C -1 ; WX 520 ; N scedilla ; B 11 -193 500 561 ; C -1 ; WX 634 ; N Scaron ; B 5 -15 604 929 ; C -1 ; WX 520 ; N scaron ; B 11 -15 524 800 ; C -1 ; WX 610 ; N Tcommaaccent ; B 42 -193 676 730 ; C -1 ; WX 392 ; N tcommaaccent ; B 62 -193 423 703 ; C -1 ; WX 610 ; N Tcaron ; B 42 0 676 929 ; C -1 ; WX 392 ; N tcaron ; B 63 0 478 804 ; C -1 ; WX 610 ; N Tbar ; B 51 0 685 730 ; C -1 ; WX 392 ; N tbar ; B 15 0 407 703 ; C -1 ; WX 731 ; N Utilde ; B 58 -15 713 921 ; C -1 ; WX 633 ; N utilde ; B 57 -15 589 777 ; C -1 ; WX 731 ; N Umacron ; B 58 -15 713 899 ; C -1 ; WX 633 ; N umacron ; B 57 -15 589 745 ; C -1 ; WX 731 ; N Ubreve ; B 58 -15 713 929 ; C -1 ; WX 633 ; N ubreve ; B 57 -15 589 786 ; C -1 ; WX 731 ; N Uring ; B 58 -15 713 1030 ; C -1 ; WX 633 ; N uring ; B 57 -15 589 861 ; C -1 ; WX 731 ; N Uhungarumlaut ; B 58 -15 730 928 ; C -1 ; WX 633 ; N uhungarumlaut ; B 57 -15 619 800 ; C -1 ; WX 731 ; N Uogonek ; B 58 -202 713 730 ; C -1 ; WX 633 ; N uogonek ; B 57 -194 589 547 ; C -1 ; WX 988 ; N Wcircumflex ; B 96 0 1021 932 ; C -1 ; WX 817 ; N wcircumflex ; B 84 0 819 804 ; C -1 ; WX 610 ; N Ycircumflex ; B 62 0 676 932 ; C -1 ; WX 591 ; N ycircumflex ; B -25 -209 604 804 ; C -1 ; WX 610 ; N Ydieresis ; B 62 0 676 914 ; C -1 ; WX 685 ; N Zacute ; B -22 0 704 928 ; C -1 ; WX 524 ; N zacute ; B -3 0 549 804 ; C -1 ; WX 685 ; N Zdotaccent ; B -22 0 704 913 ; C -1 ; WX 524 ; N zdotaccent ; B -3 0 543 758 ; C -1 ; WX 685 ; N Zcaron ; B -22 0 704 929 ; C -1 ; WX 524 ; N zcaron ; B -3 0 543 800 ; C -1 ; WX 352 ; N longs ; B 67 0 479 760 ; C -1 ; WX 698 ; N uni0186 ; B -4 -15 655 743 ; C -1 ; WX 636 ; N uni0190 ; B 41 -15 602 743 ; C -1 ; WX 636 ; N florin ; B -23 -209 619 760 ; C -1 ; WX 685 ; N uni0194 ; B 84 -210 723 661 ; C -1 ; WX 1455 ; N uni01C4 ; B 26 0 1474 929 ; C -1 ; WX 1294 ; N uni01C5 ; B 26 0 1313 800 ; C -1 ; WX 1159 ; N uni01C6 ; B 45 -15 1178 800 ; C -1 ; WX 852 ; N uni01C7 ; B 26 -201 824 730 ; C -1 ; WX 834 ; N uni01C8 ; B 26 -209 834 760 ; C -1 ; WX 555 ; N uni01C9 ; B 35 -209 555 760 ; C -1 ; WX 1042 ; N uni01CA ; B 26 -201 1015 730 ; C -1 ; WX 1025 ; N uni01CB ; B 26 -209 1025 760 ; C -1 ; WX 911 ; N uni01CC ; B 35 -209 911 760 ; C -1 ; WX 684 ; N uni01CD ; B -54 0 616 929 ; C -1 ; WX 612 ; N uni01CE ; B 41 -15 547 800 ; C -1 ; WX 294 ; N uni01CF ; B 26 0 414 929 ; C -1 ; WX 277 ; N uni01D0 ; B 35 0 352 800 ; C -1 ; WX 787 ; N uni01D1 ; B 40 -15 748 929 ; C -1 ; WX 611 ; N uni01D2 ; B 45 -15 566 800 ; C -1 ; WX 731 ; N uni01D3 ; B 58 -15 713 929 ; C -1 ; WX 633 ; N uni01D4 ; B 57 -15 589 800 ; C -1 ; WX 633 ; N uni01D6 ; B 57 -15 589 899 ; C -1 ; WX 612 ; N uni01DF ; B 41 -15 549 899 ; C -1 ; WX 974 ; N uni01E2 ; B -45 0 995 901 ; C -1 ; WX 995 ; N uni01E3 ; B 41 -15 952 744 ; C -1 ; WX 787 ; N uni01EA ; B 40 -202 748 743 ; C -1 ; WX 611 ; N uni01EB ; B 45 -202 566 561 ; C -1 ; WX 787 ; N uni01EC ; B 40 -202 748 899 ; C -1 ; WX 611 ; N uni01ED ; B 45 -202 566 745 ; C -1 ; WX 634 ; N Scommaaccent ; B 5 -221 604 743 ; C -1 ; WX 520 ; N scommaaccent ; B 11 -221 500 561 ; C -1 ; WX 610 ; N uni021A ; B 42 -221 676 730 ; C -1 ; WX 392 ; N uni021B ; B 63 -221 423 703 ; C -1 ; WX 611 ; N uni022B ; B 45 -15 566 899 ; C -1 ; WX 611 ; N uni022D ; B 45 -15 570 899 ; C -1 ; WX 787 ; N uni022E ; B 40 -15 748 914 ; C -1 ; WX 611 ; N uni022F ; B 45 -15 566 758 ; C -1 ; WX 611 ; N uni0231 ; B 45 -15 566 899 ; C -1 ; WX 610 ; N uni0232 ; B 62 0 676 899 ; C -1 ; WX 591 ; N uni0233 ; B -25 -209 604 745 ; C -1 ; WX 277 ; N dotlessj ; B -113 -209 235 547 ; C -1 ; WX 612 ; N uni0250 ; B 44 -15 549 561 ; C -1 ; WX 634 ; N uni0251 ; B 46 -15 598 561 ; C -1 ; WX 634 ; N uni0252 ; B 1 -15 553 561 ; C -1 ; WX 634 ; N uni0253 ; B 18 -15 570 760 ; C -1 ; WX 549 ; N uni0254 ; B 6 -15 496 561 ; C -1 ; WX 549 ; N uni0255 ; B 52 -71 543 561 ; C -1 ; WX 634 ; N uni0256 ; B 45 -209 639 760 ; C -1 ; WX 727 ; N uni0257 ; B 27 -15 822 760 ; C -1 ; WX 615 ; N uni0258 ; B 28 -15 570 561 ; C -1 ; WX 615 ; N uni0259 ; B 43 -15 571 561 ; C -1 ; WX 795 ; N uni025A ; B 43 -15 822 561 ; C -1 ; WX 544 ; N uni025B ; B 29 -11 524 561 ; C -1 ; WX 544 ; N uni025C ; B 5 -11 507 561 ; C -1 ; WX 765 ; N uni025D ; B 5 -11 791 561 ; C -1 ; WX 681 ; N uni025E ; B 50 -21 659 560 ; C -1 ; WX 363 ; N uni025F ; B -92 -209 258 547 ; C -1 ; WX 637 ; N uni0260 ; B 32 -209 751 760 ; C -1 ; WX 634 ; N uni0261 ; B 53 -209 618 547 ; C -1 ; WX 629 ; N uni0262 ; B 47 0 570 575 ; C -1 ; WX 685 ; N uni0263 ; B 100 -211 677 547 ; C -1 ; WX 591 ; N uni0264 ; B 100 0 602 547 ; C -1 ; WX 633 ; N uni0265 ; B 85 -209 617 547 ; C -1 ; WX 633 ; N uni0266 ; B 16 0 548 760 ; C -1 ; WX 633 ; N uni0267 ; B 37 -209 568 760 ; C -1 ; WX 371 ; N uni0268 ; B 25 0 309 760 ; C -1 ; WX 387 ; N uni0269 ; B 71 0 259 547 ; C -1 ; WX 371 ; N uni026A ; B 3 0 368 547 ; C -1 ; WX 487 ; N uni026B ; B 71 0 422 760 ; C -1 ; WX 487 ; N uni026C ; B 38 0 417 760 ; C -1 ; WX 278 ; N uni026D ; B 30 -209 279 760 ; C -1 ; WX 706 ; N uni026E ; B 41 -213 662 760 ; C -1 ; WX 974 ; N uni026F ; B 72 -13 944 548 ; C -1 ; WX 974 ; N uni0270 ; B 91 -209 963 548 ; C -1 ; WX 974 ; N uni0271 ; B 56 -209 928 561 ; C -1 ; WX 645 ; N uni0272 ; B -93 -209 591 561 ; C -1 ; WX 642 ; N uni0273 ; B 56 -209 602 561 ; C -1 ; WX 633 ; N uni0274 ; B 32 0 604 561 ; C -1 ; WX 611 ; N uni0275 ; B 46 -15 566 561 ; C -1 ; WX 857 ; N uni0276 ; B 48 0 814 547 ; C -1 ; WX 728 ; N uni0277 ; B 55 -15 658 561 ; C -1 ; WX 611 ; N uni0278 ; B 45 -208 566 760 ; C -1 ; WX 469 ; N uni0279 ; B 2 -14 430 547 ; C -1 ; WX 469 ; N uni027A ; B -19 -14 451 755 ; C -1 ; WX 468 ; N uni027B ; B 21 -209 449 547 ; C -1 ; WX 469 ; N uni027C ; B -20 -209 449 561 ; C -1 ; WX 469 ; N uni027D ; B 10 -209 449 561 ; C -1 ; WX 440 ; N uni027E ; B 0 0 402 561 ; C -1 ; WX 440 ; N uni027F ; B 94 0 371 561 ; C -1 ; WX 601 ; N uni0280 ; B -29 0 455 547 ; C -1 ; WX 601 ; N uni0281 ; B -29 0 561 547 ; C -1 ; WX 520 ; N uni0282 ; B 10 -209 512 561 ; C -1 ; WX 335 ; N uni0283 ; B -113 -209 450 760 ; C -1 ; WX 380 ; N uni0284 ; B -68 -209 494 760 ; C -1 ; WX 461 ; N uni0285 ; B 85 -209 342 550 ; C -1 ; WX 335 ; N uni0286 ; B -208 -209 450 760 ; C -1 ; WX 392 ; N uni0287 ; B -12 -156 344 547 ; C -1 ; WX 392 ; N uni0288 ; B 31 -208 427 703 ; C -1 ; WX 633 ; N uni0289 ; B -9 -15 641 547 ; C -1 ; WX 617 ; N uni028A ; B 50 -15 620 547 ; C -1 ; WX 598 ; N uni028B ; B 71 0 548 547 ; C -1 ; WX 591 ; N uni028C ; B -24 0 509 547 ; C -1 ; WX 817 ; N uni028D ; B -12 0 723 547 ; C -1 ; WX 591 ; N uni028E ; B -44 0 587 755 ; C -1 ; WX 610 ; N uni028F ; B 104 0 607 562 ; C -1 ; WX 524 ; N uni0290 ; B 10 -209 556 547 ; C -1 ; WX 524 ; N uni0291 ; B -5 -55 541 547 ; C -1 ; WX 577 ; N uni0292 ; B -24 -213 554 547 ; C -1 ; WX 577 ; N uni0293 ; B 17 -213 554 547 ; C -1 ; WX 510 ; N uni0294 ; B 92 0 491 759 ; C -1 ; WX 510 ; N uni0295 ; B 67 0 523 759 ; C -1 ; WX 510 ; N uni0296 ; B -25 0 431 759 ; C -1 ; WX 510 ; N uni0297 ; B -13 -213 544 760 ; C -1 ; WX 602 ; N uni0298 ; B 40 22 562 533 ; C -1 ; WX 579 ; N uni0299 ; B 32 0 493 562 ; C -1 ; WX 681 ; N uni029A ; B 26 -21 637 560 ; C -1 ; WX 708 ; N uni029B ; B 29 0 801 759 ; C -1 ; WX 633 ; N uni029C ; B 32 0 604 561 ; C -1 ; WX 366 ; N uni029D ; B -208 -209 279 760 ; C -1 ; WX 666 ; N uni029E ; B 70 -213 651 547 ; C -1 ; WX 583 ; N uni029F ; B 32 0 460 561 ; C -1 ; WX 727 ; N uni02A0 ; B 45 -209 841 759 ; C -1 ; WX 510 ; N uni02A1 ; B 7 0 491 759 ; C -1 ; WX 510 ; N uni02A2 ; B 67 0 523 759 ; C -1 ; WX 1014 ; N uni02A3 ; B 27 -15 1005 760 ; C -1 ; WX 1057 ; N uni02A4 ; B 46 -213 1024 760 ; C -1 ; WX 1012 ; N uni02A5 ; B 30 -55 1008 760 ; C -1 ; WX 824 ; N uni02A6 ; B 52 -15 789 703 ; C -1 ; WX 609 ; N uni02A7 ; B 65 -209 723 760 ; C -1 ; WX 778 ; N uni02A8 ; B 58 -71 764 703 ; C -1 ; WX 848 ; N uni02A9 ; B 55 -209 823 760 ; C -1 ; WX 640 ; N uni02AA ; B 21 -15 600 760 ; C -1 ; WX 654 ; N uni02AB ; B 20 0 643 760 ; C -1 ; WX 515 ; N uni02AC ; B 22 -15 553 641 ; C -1 ; WX 515 ; N uni02AD ; B -28 84 543 641 ; C -1 ; WX 570 ; N uni02AE ; B 79 -214 624 760 ; C -1 ; WX 663 ; N uni02AF ; B 79 -209 623 760 ; C -1 ; WX 398 ; N uni02B0 ; B 15 452 345 878 ; C -1 ; WX 633 ; N uni02B1 ; B 15 451 345 877 ; C -1 ; WX 174 ; N uni02B2 ; B -65 335 169 878 ; C -1 ; WX 258 ; N uni02B3 ; B 26 452 289 766 ; C -1 ; WX 295 ; N uni02B4 ; B 5 444 268 759 ; C -1 ; WX 295 ; N uni02B5 ; B 15 335 278 759 ; C -1 ; WX 378 ; N uni02B6 ; B -15 452 350 759 ; C -1 ; WX 515 ; N uni02B7 ; B 56 452 519 759 ; C -1 ; WX 372 ; N uni02B8 ; B 8 335 396 759 ; C -1 ; WX 317 ; N uni02BB ; B 130 488 321 730 ; C -1 ; WX 317 ; N afii57929 ; B 61 488 252 730 ; L n napostrophe ; C -1 ; WX 369 ; N uni02C0 ; B 85 452 337 878 ; C -1 ; WX 369 ; N uni02C1 ; B 71 452 355 878 ; C -1 ; WX 500 ; N circumflex ; B 165 616 478 800 ; C -1 ; WX 500 ; N caron ; B 200 616 513 800 ; C -1 ; WX 336 ; N uni02D0 ; B 4 0 279 518 ; C -1 ; WX 336 ; N uni02D1 ; B 69 355 245 518 ; C -1 ; WX 500 ; N breve ; B 200 645 507 786 ; C -1 ; WX 500 ; N dotaccent ; B 278 658 398 758 ; C -1 ; WX 500 ; N ring ; B 208 609 478 878 ; C -1 ; WX 500 ; N ogonek ; B 98 -194 279 0 ; C -1 ; WX 500 ; N tilde ; B 164 639 514 777 ; C -1 ; WX 500 ; N hungarumlaut ; B 187 616 567 800 ; C -1 ; WX 425 ; N uni02E0 ; B 61 334 415 759 ; C -1 ; WX 166 ; N uni02E1 ; B 15 452 156 878 ; C -1 ; WX 373 ; N uni02E2 ; B 29 452 331 774 ; C -1 ; WX 443 ; N uni02E3 ; B 27 452 415 759 ; C -1 ; WX 369 ; N uni02E4 ; B 71 452 355 878 ; C -1 ; WX 500 ; N gravecomb ; B 238 617 438 800 ; C -1 ; WX 500 ; N acutecomb ; B 300 616 571 800 ; C -1 ; WX 500 ; N uni0302 ; B 213 616 526 800 ; C -1 ; WX 500 ; N tildecomb ; B 212 639 563 777 ; C -1 ; WX 500 ; N uni0304 ; B 234 672 542 746 ; C -1 ; WX 500 ; N uni0306 ; B 249 645 556 786 ; C -1 ; WX 500 ; N uni0307 ; B 327 658 447 758 ; C -1 ; WX 500 ; N uni0308 ; B 232 659 542 758 ; C -1 ; WX 500 ; N uni030A ; B 257 609 526 878 ; C -1 ; WX 500 ; N uni030B ; B 236 616 616 800 ; C -1 ; WX 500 ; N uni030C ; B 249 616 562 800 ; C -1 ; WX 317 ; N uni0312 ; B 130 488 304 645 ; C -1 ; WX 500 ; N uni0321 ; B 160 -209 506 63 ; C -1 ; WX 500 ; N uni0322 ; B 25 -209 303 63 ; C -1 ; WX 500 ; N uni0326 ; B 108 -221 283 -64 ; C -1 ; WX 278 ; N uni0374 ; B 164 556 336 800 ; C -1 ; WX 278 ; N uni0375 ; B 26 -209 199 36 ; C -1 ; WX 361 ; N uni037A ; B 122 -209 225 -44 ; C -1 ; WX 336 ; N uni037E ; B 0 -117 268 518 ; C -1 ; WX 500 ; N tonos ; B 251 616 522 800 ; C -1 ; WX 500 ; N dieresistonos ; B 184 659 553 978 ; C -1 ; WX 695 ; N Alphatonos ; B -54 0 616 800 ; C -1 ; WX 317 ; N anoteleia ; B 113 285 242 410 ; C -1 ; WX 766 ; N Epsilontonos ; B 58 0 765 800 ; C -1 ; WX 903 ; N Etatonos ; B 64 0 869 800 ; C -1 ; WX 434 ; N Iotatonos ; B 61 0 409 800 ; C -1 ; WX 839 ; N Omicrontonos ; B 63 -15 794 800 ; C -1 ; WX 859 ; N Upsilontonos ; B 55 0 919 800 ; C -1 ; WX 904 ; N Omegatonos ; B 52 0 837 800 ; C -1 ; WX 292 ; N iotadieresistonos ; B 42 0 451 978 ; C -1 ; WX 684 ; N Alpha ; B -54 0 616 730 ; C -1 ; WX 686 ; N Beta ; B 26 0 625 730 ; C -1 ; WX 557 ; N Gamma ; B 27 0 623 730 ; C -1 ; WX 684 ; N uni0394 ; B -64 0 605 730 ; C -1 ; WX 631 ; N Epsilon ; B 26 0 630 730 ; C -1 ; WX 685 ; N Zeta ; B -22 0 704 730 ; C -1 ; WX 751 ; N Eta ; B 26 0 726 730 ; C -1 ; WX 787 ; N Theta ; B 45 -15 742 743 ; C -1 ; WX 294 ; N Iota ; B 26 0 269 730 ; C -1 ; WX 655 ; N Kappa ; B 26 0 723 730 ; C -1 ; WX 684 ; N Lambda ; B -64 0 605 730 ; C -1 ; WX 862 ; N Mu ; B 26 0 836 730 ; C -1 ; WX 748 ; N Nu ; B 26 0 722 730 ; C -1 ; WX 631 ; N Xi ; B 27 0 619 730 ; C -1 ; WX 787 ; N Omicron ; B 40 -15 748 743 ; C -1 ; WX 751 ; N Pi ; B 27 0 725 730 ; C -1 ; WX 603 ; N Rho ; B 26 0 602 730 ; C -1 ; WX 631 ; N Sigma ; B 27 0 630 730 ; C -1 ; WX 610 ; N Tau ; B 42 0 676 730 ; C -1 ; WX 610 ; N Upsilon ; B 62 0 676 730 ; C -1 ; WX 787 ; N Phi ; B 49 0 738 730 ; C -1 ; WX 685 ; N Chi ; B -43 0 704 730 ; C -1 ; WX 787 ; N Psi ; B 78 0 803 730 ; C -1 ; WX 764 ; N Omega ; B -34 0 732 738 ; C -1 ; WX 294 ; N Iotadieresis ; B 26 0 400 914 ; C -1 ; WX 610 ; N Upsilondieresis ; B 62 0 676 914 ; C -1 ; WX 616 ; N alphatonos ; B 46 -15 612 800 ; C -1 ; WX 542 ; N epsilontonos ; B 38 -15 562 800 ; C -1 ; WX 630 ; N etatonos ; B 56 -209 619 800 ; C -1 ; WX 293 ; N iotatonos ; B 35 0 432 800 ; C -1 ; WX 633 ; N upsilondieresistonos ; B 66 -15 616 978 ; C -1 ; WX 611 ; N alpha ; B 46 -15 612 561 ; C -1 ; WX 638 ; N beta ; B -2 -209 577 768 ; C -1 ; WX 591 ; N gamma ; B 103 -209 636 547 ; C -1 ; WX 611 ; N delta ; B 43 -15 573 743 ; C -1 ; WX 540 ; N epsilon ; B 38 -15 506 561 ; C -1 ; WX 625 ; N zeta ; B 91 -209 632 760 ; C -1 ; WX 633 ; N eta ; B 56 -209 587 561 ; C -1 ; WX 611 ; N theta ; B 39 -12 573 768 ; C -1 ; WX 277 ; N iota ; B 35 0 232 547 ; C -1 ; WX 604 ; N kappa ; B 37 0 618 547 ; C -1 ; WX 591 ; N lambda ; B -45 0 489 760 ; C -1 ; WX 633 ; N uni03BC ; B 11 -209 617 547 ; C -1 ; WX 591 ; N nu ; B 71 0 605 547 ; C -1 ; WX 625 ; N xi ; B 76 -209 605 760 ; C -1 ; WX 611 ; N omicron ; B 45 -15 566 561 ; C -1 ; WX 659 ; N pi ; B 38 0 618 547 ; C -1 ; WX 634 ; N rho ; B 16 -209 608 561 ; C -1 ; WX 586 ; N sigma1 ; B 80 -209 571 553 ; C -1 ; WX 633 ; N sigma ; B 46 -15 661 561 ; C -1 ; WX 528 ; N tau ; B 37 0 578 547 ; C -1 ; WX 633 ; N upsilon ; B 66 -15 598 547 ; C -1 ; WX 688 ; N phi ; B 98 -209 658 552 ; C -1 ; WX 591 ; N chi ; B -45 -209 623 548 ; C -1 ; WX 697 ; N psi ; B 98 -209 717 547 ; C -1 ; WX 837 ; N omega ; B 79 -1 748 547 ; C -1 ; WX 290 ; N iotadieresis ; B 42 0 391 758 ; C -1 ; WX 633 ; N upsilondieresis ; B 66 -15 598 758 ; C -1 ; WX 611 ; N omicrontonos ; B 45 -15 584 800 ; C -1 ; WX 633 ; N upsilontonos ; B 66 -15 598 800 ; C -1 ; WX 837 ; N omegatonos ; B 79 -1 748 800 ; C -1 ; WX 614 ; N uni03D0 ; B 64 -12 535 768 ; C -1 ; WX 619 ; N theta1 ; B 39 -12 578 768 ; C -1 ; WX 698 ; N Upsilon1 ; B 54 0 742 733 ; C -1 ; WX 906 ; N uni03D3 ; B 58 0 970 800 ; C -1 ; WX 698 ; N uni03D4 ; B 54 0 742 914 ; C -1 ; WX 611 ; N phi1 ; B 46 -209 566 760 ; C -1 ; WX 866 ; N omega1 ; B 94 -1 833 547 ; C -1 ; WX 662 ; N uni03D7 ; B 24 -201 649 554 ; C -1 ; WX 787 ; N uni03D8 ; B 64 -208 761 743 ; C -1 ; WX 611 ; N uni03D9 ; B 65 -209 585 561 ; C -1 ; WX 652 ; N uni03DA ; B 91 -211 654 730 ; C -1 ; WX 596 ; N uni03DB ; B 72 -209 574 622 ; C -1 ; WX 575 ; N uni03DC ; B 26 0 587 730 ; C -1 ; WX 524 ; N uni03DD ; B 17 -209 522 548 ; C -1 ; WX 659 ; N uni03DE ; B 64 -2 640 730 ; C -1 ; WX 659 ; N uni03DF ; B 86 0 577 760 ; C -1 ; WX 865 ; N uni03E0 ; B 109 -209 803 743 ; C -1 ; WX 627 ; N uni03E1 ; B 21 -180 522 559 ; C -1 ; WX 662 ; N uni03F0 ; B 5 0 629 554 ; C -1 ; WX 634 ; N uni03F1 ; B 68 -209 608 561 ; C -1 ; WX 549 ; N uni03F2 ; B 45 -15 537 561 ; C -1 ; WX 277 ; N uni03F3 ; B -113 -209 277 760 ; C -1 ; WX 787 ; N uni03F4 ; B 45 -15 742 743 ; C -1 ; WX 615 ; N uni03F5 ; B 47 -15 533 561 ; C -1 ; WX 615 ; N uni03F6 ; B 43 -15 529 561 ; C -1 ; WX 607 ; N uni03F7 ; B 26 0 578 730 ; C -1 ; WX 634 ; N uni03F8 ; B -3 -209 589 760 ; C -1 ; WX 698 ; N uni03F9 ; B 41 -15 695 743 ; C -1 ; WX 862 ; N uni03FA ; B 27 0 836 730 ; C -1 ; WX 696 ; N uni03FB ; B 19 -209 686 547 ; C -1 ; WX 634 ; N uni03FC ; B -23 -209 608 561 ; C -1 ; WX 698 ; N uni03FD ; B -4 -15 655 743 ; C -1 ; WX 698 ; N uni03FE ; B 41 -15 695 743 ; C -1 ; WX 698 ; N uni03FF ; B -4 -15 655 743 ; C -1 ; WX 631 ; N uni0400 ; B 26 0 630 928 ; C -1 ; WX 631 ; N afii10023 ; B 26 0 630 914 ; C -1 ; WX 786 ; N afii10051 ; B 71 -201 705 730 ; C -1 ; WX 557 ; N afii10052 ; B 27 0 623 928 ; C -1 ; WX 698 ; N afii10053 ; B 45 -15 705 743 ; C -1 ; WX 634 ; N afii10054 ; B 5 -15 604 743 ; C -1 ; WX 294 ; N afii10055 ; B 26 0 269 730 ; C -1 ; WX 294 ; N afii10056 ; B 26 0 386 914 ; C -1 ; WX 294 ; N afii10057 ; B -165 -201 267 730 ; C -1 ; WX 1093 ; N afii10058 ; B -46 -15 1001 730 ; C -1 ; WX 1044 ; N afii10059 ; B 27 0 952 730 ; C -1 ; WX 786 ; N afii10060 ; B 51 0 686 730 ; C -1 ; WX 655 ; N afii10061 ; B 26 0 723 928 ; C -1 ; WX 748 ; N uni040D ; B 27 0 721 928 ; C -1 ; WX 609 ; N afii10062 ; B 22 -15 665 929 ; C -1 ; WX 751 ; N afii10145 ; B 47 -209 746 730 ; C -1 ; WX 684 ; N afii10017 ; B -54 0 616 730 ; C -1 ; WX 686 ; N afii10018 ; B 27 0 592 730 ; C -1 ; WX 686 ; N afii10019 ; B 26 0 625 730 ; C -1 ; WX 557 ; N afii10020 ; B 27 0 623 730 ; C -1 ; WX 776 ; N afii10021 ; B -68 -209 745 730 ; C -1 ; WX 631 ; N afii10022 ; B 26 0 630 730 ; C -1 ; WX 863 ; N afii10024 ; B -42 0 881 730 ; C -1 ; WX 636 ; N afii10025 ; B 1 -15 572 743 ; C -1 ; WX 748 ; N afii10026 ; B 27 0 721 730 ; C -1 ; WX 748 ; N afii10027 ; B 27 0 721 929 ; C -1 ; WX 655 ; N afii10028 ; B 26 0 723 730 ; C -1 ; WX 751 ; N afii10029 ; B -46 -14 726 730 ; C -1 ; WX 862 ; N afii10030 ; B 26 0 836 730 ; C -1 ; WX 751 ; N afii10031 ; B 26 0 726 730 ; C -1 ; WX 787 ; N afii10032 ; B 40 -15 748 743 ; C -1 ; WX 751 ; N afii10033 ; B 27 0 725 730 ; C -1 ; WX 603 ; N afii10034 ; B 26 0 602 730 ; C -1 ; WX 698 ; N afii10035 ; B 41 -15 695 743 ; C -1 ; WX 610 ; N afii10036 ; B 42 0 676 730 ; C -1 ; WX 609 ; N afii10037 ; B 22 -15 665 730 ; C -1 ; WX 787 ; N afii10038 ; B 49 0 738 730 ; C -1 ; WX 685 ; N afii10039 ; B -43 0 704 730 ; C -1 ; WX 776 ; N afii10040 ; B 47 -209 746 730 ; C -1 ; WX 685 ; N afii10041 ; B 119 0 659 730 ; C -1 ; WX 1002 ; N afii10042 ; B 27 0 974 730 ; C -1 ; WX 1025 ; N afii10043 ; B 47 -209 995 730 ; C -1 ; WX 832 ; N afii10044 ; B 79 0 739 730 ; C -1 ; WX 818 ; N afii10045 ; B 27 0 856 730 ; C -1 ; WX 686 ; N afii10046 ; B 27 0 592 730 ; C -1 ; WX 698 ; N afii10047 ; B -6 -15 653 743 ; C -1 ; WX 1030 ; N afii10048 ; B 32 -15 986 743 ; C -1 ; WX 694 ; N afii10049 ; B -42 0 668 730 ; C -1 ; WX 612 ; N afii10065 ; B 41 -15 547 561 ; C -1 ; WX 611 ; N afii10066 ; B 43 -15 573 743 ; C -1 ; WX 585 ; N afii10067 ; B 35 0 532 547 ; C -1 ; WX 491 ; N afii10068 ; B 35 0 528 547 ; C -1 ; WX 671 ; N afii10069 ; B -72 -209 609 547 ; C -1 ; WX 615 ; N afii10070 ; B 45 -15 571 561 ; C -1 ; WX 733 ; N afii10072 ; B -32 0 740 547 ; C -1 ; WX 540 ; N afii10073 ; B 11 -15 486 561 ; C -1 ; WX 656 ; N afii10074 ; B 38 0 614 547 ; C -1 ; WX 656 ; N afii10075 ; B 38 0 614 760 ; C -1 ; WX 604 ; N afii10076 ; B 37 0 618 547 ; C -1 ; WX 639 ; N afii10077 ; B -37 -15 607 547 ; C -1 ; WX 754 ; N afii10078 ; B 38 0 711 547 ; C -1 ; WX 660 ; N afii10079 ; B 38 0 618 547 ; C -1 ; WX 611 ; N afii10080 ; B 45 -15 566 561 ; C -1 ; WX 659 ; N afii10081 ; B 38 0 618 547 ; C -1 ; WX 634 ; N afii10082 ; B -3 -209 589 561 ; C -1 ; WX 549 ; N afii10083 ; B 45 -15 537 561 ; C -1 ; WX 528 ; N afii10084 ; B 37 0 578 547 ; C -1 ; WX 591 ; N afii10085 ; B -25 -209 604 547 ; C -1 ; WX 916 ; N afii10086 ; B 42 -209 869 730 ; C -1 ; WX 591 ; N afii10087 ; B -26 0 601 547 ; C -1 ; WX 680 ; N afii10088 ; B 38 -209 618 547 ; C -1 ; WX 590 ; N afii10089 ; B 96 0 551 547 ; C -1 ; WX 872 ; N afii10090 ; B 38 0 830 547 ; C -1 ; WX 892 ; N afii10091 ; B 38 -209 830 547 ; C -1 ; WX 703 ; N afii10092 ; B 56 0 628 547 ; C -1 ; WX 765 ; N afii10093 ; B 38 0 725 547 ; C -1 ; WX 589 ; N afii10094 ; B 38 0 514 547 ; C -1 ; WX 615 ; N afii10095 ; B 23 -15 566 561 ; C -1 ; WX 812 ; N afii10096 ; B 38 -15 765 561 ; C -1 ; WX 601 ; N afii10097 ; B -32 0 559 547 ; C -1 ; WX 615 ; N uni0450 ; B 45 -15 571 803 ; C -1 ; WX 615 ; N afii10071 ; B 45 -15 571 758 ; C -1 ; WX 644 ; N afii10099 ; B 38 -209 562 760 ; C -1 ; WX 491 ; N afii10100 ; B 35 0 588 804 ; C -1 ; WX 615 ; N afii10101 ; B 44 -15 530 561 ; C -1 ; WX 520 ; N afii10102 ; B 11 -15 500 561 ; C -1 ; WX 277 ; N afii10103 ; B 35 0 273 760 ; C -1 ; WX 277 ; N afii10104 ; B 35 0 383 758 ; C -1 ; WX 277 ; N afii10105 ; B -113 -209 277 760 ; C -1 ; WX 898 ; N afii10106 ; B -37 -15 823 547 ; C -1 ; WX 891 ; N afii10107 ; B 38 0 822 547 ; C -1 ; WX 637 ; N afii10108 ; B 38 0 562 760 ; C -1 ; WX 604 ; N afii10109 ; B 37 0 634 804 ; C -1 ; WX 656 ; N uni045D ; B 38 0 614 803 ; C -1 ; WX 591 ; N afii10110 ; B -25 -209 604 760 ; C -1 ; WX 662 ; N afii10193 ; B 38 -209 618 547 ; C -1 ; WX 557 ; N afii10050 ; B 12 0 638 879 ; C -1 ; WX 508 ; N afii10098 ; B 17 0 540 701 ; C -1 ; WX 557 ; N uni0492 ; B 27 0 623 730 ; C -1 ; WX 491 ; N uni0493 ; B 18 0 528 547 ; C -1 ; WX 655 ; N uni049A ; B 26 -209 723 730 ; C -1 ; WX 604 ; N uni049B ; B 37 -209 618 547 ; C -1 ; WX 685 ; N uni04B2 ; B -43 -209 704 730 ; C -1 ; WX 591 ; N uni04B3 ; B -26 -209 601 547 ; C -1 ; WX 770 ; N uni1E12 ; B 26 -190 723 730 ; C -1 ; WX 634 ; N uni1E13 ; B 19 -258 640 760 ; C -1 ; WX 557 ; N uni1E3C ; B 26 -190 498 730 ; C -1 ; WX 277 ; N uni1E3D ; B -124 -244 273 760 ; C -1 ; WX 748 ; N uni1E44 ; B 26 0 722 902 ; C -1 ; WX 633 ; N uni1E45 ; B 35 0 566 720 ; C -1 ; WX 748 ; N uni1E4A ; B 26 -190 722 730 ; C -1 ; WX 633 ; N uni1E4B ; B 35 -244 566 561 ; C -1 ; WX 610 ; N uni1E70 ; B 33 -190 676 730 ; C -1 ; WX 392 ; N uni1E71 ; B -15 -244 423 703 ; C -1 ; WX 988 ; N Wgrave ; B 96 0 1021 985 ; C -1 ; WX 817 ; N wgrave ; B 84 0 819 803 ; C -1 ; WX 988 ; N Wacute ; B 96 0 1021 986 ; C -1 ; WX 817 ; N wacute ; B 84 0 819 804 ; C -1 ; WX 988 ; N Wdieresis ; B 96 0 1021 901 ; C -1 ; WX 817 ; N wdieresis ; B 84 0 819 719 ; C -1 ; WX 610 ; N Ygrave ; B 62 0 676 985 ; C -1 ; WX 591 ; N ygrave ; B -25 -209 604 803 ; C -1 ; WX 360 ; N uni2010 ; B 44 233 325 314 ; C -1 ; WX 360 ; N uni2011 ; B 44 233 325 314 ; C -1 ; WX 500 ; N figuredash ; B -7 238 507 310 ; C -1 ; WX 500 ; N endash ; B -7 238 507 310 ; C -1 ; WX 1000 ; N emdash ; B -7 238 1007 310 ; C -1 ; WX 1000 ; N afii00208 ; B -7 238 1007 310 ; C -1 ; WX 317 ; N quoteleft ; B 130 488 321 730 ; C -1 ; WX 317 ; N quoteright ; B 134 488 326 730 ; C -1 ; WX 317 ; N quotesinglbase ; B 2 -117 193 125 ; C -1 ; WX 518 ; N quotedblleft ; B 130 488 521 730 ; C -1 ; WX 518 ; N quotedblright ; B 134 488 525 730 ; C -1 ; WX 518 ; N quotedblbase ; B 2 -117 394 125 ; C -1 ; WX 500 ; N dagger ; B 41 -97 501 730 ; C -1 ; WX 500 ; N daggerdbl ; B -18 -97 508 730 ; C -1 ; WX 589 ; N bullet ; B 149 227 439 517 ; C -1 ; WX 1000 ; N ellipsis ; B 64 0 859 125 ; C -1 ; WX 1350 ; N perthousand ; B 90 -15 1259 743 ; C -1 ; WX 399 ; N guilsinglleft ; B 62 68 338 518 ; C -1 ; WX 399 ; N guilsinglright ; B 62 68 338 518 ; C -1 ; WX 398 ; N uni207F ; B 26 452 356 766 ; C -1 ; WX 636 ; N Euro ; B -20 -15 607 743 ; C -1 ; WX 1000 ; N trademark ; B 144 446 785 730 ; C -1 ; WX 517 ; N partialdiff ; B 50 -13 470 647 ; C -1 ; WX 668 ; N Delta ; B -3 0 672 720 ; C -1 ; WX 756 ; N product ; B 76 -192 681 720 ; C -1 ; WX 673 ; N summation ; B 12 -192 654 720 ; C -1 ; WX 837 ; N minus ; B 105 271 732 355 ; C -1 ; WX 166 ; N fraction ; B -263 -15 429 743 ; C -1 ; WX 317 ; N periodcentered ; B 113 285 242 410 ; C -1 ; WX 637 ; N radical ; B 29 -21 638 812 ; C -1 ; WX 833 ; N infinity ; B 107 107 727 492 ; C -1 ; WX 520 ; N integral ; B 22 -182 498 757 ; C -1 ; WX 837 ; N approxequal ; B 105 132 732 495 ; C -1 ; WX 837 ; N notequal ; B 105 19 732 608 ; C -1 ; WX 837 ; N lessequal ; B 105 0 732 583 ; C -1 ; WX 837 ; N greaterequal ; B 105 0 732 583 ; C -1 ; WX 634 ; N house ; B 71 0 564 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 421 ; C -1 ; WX 513 ; N uni2311 ; B 2 126 511 634 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 421 ; C -1 ; WX 757 ; N uni237D ; B 4 -228 753 102 ; C -1 ; WX 634 ; N uni2423 ; B 26 -228 583 102 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 2 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 645 ; N fi ; B 67 0 642 760 ; C -1 ; WX 645 ; N fl ; B 67 0 642 760 ; C -1 ; WX 1025 ; N uniFFFD ; B 95 -84 1092 913 ; C -1 ; WX 500 ; N dlLtcaron ; B 251 616 413 800 ; C -1 ; WX 500 ; N Dieresis ; B 179 631 488 731 ; C -1 ; WX 500 ; N Acute ; B 251 616 480 746 ; C -1 ; WX 500 ; N Tilde ; B 162 631 512 739 ; C -1 ; WX 500 ; N Grave ; B 227 616 389 746 ; C -1 ; WX 500 ; N Circumflex ; B 165 616 476 747 ; C -1 ; WX 500 ; N Caron ; B 195 616 505 747 ; C -1 ; WX 400 ; N foursuperior ; B 41 326 391 734 ; C -1 ; WX 500 ; N Breve ; B 189 627 497 747 ; C -1 ; WX 500 ; N Dotaccent ; B 273 631 394 732 ; C -1 ; WX 500 ; N Hungarumlaut ; B 226 616 608 746 ; C -1 ; WX 500 ; N Doublegrave ; B 158 616 457 746 ; EndCharMetrics StartKernData StartKernPairs 914 KPX hyphen Tcaron -72 KPX hyphen Yacute -72 KPX hyphen Ydieresis -72 KPX hyphen Y -72 KPX hyphen X -35 KPX hyphen W -17 KPX hyphen V -40 KPX hyphen T -72 KPX A Tcommaaccent -72 KPX A uni021A -72 KPX A Wdieresis -17 KPX A Wacute -17 KPX A Wgrave -17 KPX A Wcircumflex -17 KPX A Tcaron -72 KPX A quoteright -132 KPX A quotedblright -132 KPX A W -17 KPX A V -49 KPX A T -72 KPX A semicolon 18 KPX A colon 18 KPX A period 18 KPX A comma 18 KPX B Ygrave -17 KPX B uni0232 -17 KPX B Ycircumflex -17 KPX B Yacute -17 KPX B Ydieresis -17 KPX B Y -17 KPX B hyphen -17 KPX C Scommaaccent 18 KPX C Scircumflex 18 KPX C Sacute 18 KPX C Scedilla 18 KPX C Scaron 18 KPX C quoteright -21 KPX C quotedblright -21 KPX C S 18 KPX F uogonek -40 KPX F uhungarumlaut -40 KPX F ubreve -40 KPX F umacron -40 KPX F utilde -40 KPX F Aogonek -58 KPX F Abreve -58 KPX F Amacron -58 KPX F uring -40 KPX F Aacute -58 KPX F Acircumflex -58 KPX F Atilde -58 KPX F Agrave -58 KPX F udieresis -40 KPX F ucircumflex -40 KPX F ugrave -40 KPX F uacute -40 KPX F Adieresis -58 KPX F u -40 KPX F A -58 KPX F semicolon -35 KPX F colon -35 KPX F period -128 KPX F hyphen -54 KPX F comma -128 KPX K uring -26 KPX K Uring -17 KPX K ecaron -35 KPX K Ccaron -26 KPX K Cacute -26 KPX K yacute -26 KPX K Ugrave -17 KPX K Ucircumflex -17 KPX K Uacute -17 KPX K Ograve -26 KPX K Ocircumflex -26 KPX K Oacute -26 KPX K ydieresis -26 KPX K oe -44 KPX K OE -26 KPX K Otilde -26 KPX K oslash -44 KPX K ae -17 KPX K Oslash -26 KPX K udieresis -26 KPX K ucircumflex -26 KPX K ugrave -26 KPX K uacute -26 KPX K otilde -35 KPX K odieresis -35 KPX K ocircumflex -35 KPX K ograve -35 KPX K oacute -35 KPX K edieresis -35 KPX K ecircumflex -35 KPX K egrave -35 KPX K eacute -35 KPX K aring -35 KPX K atilde -35 KPX K adieresis -35 KPX K acircumflex -35 KPX K agrave -35 KPX K aacute -35 KPX K Udieresis -17 KPX K Odieresis -26 KPX K Ccedilla -26 KPX K y -26 KPX K u -26 KPX K o -35 KPX K e -35 KPX K a -35 KPX K U -17 KPX K O -26 KPX K C -26 KPX K hyphen -100 KPX L Tcaron -67 KPX L yacute -35 KPX L Yacute -95 KPX L Ograve -30 KPX L Ocircumflex -30 KPX L Oacute -30 KPX L Ydieresis -95 KPX L ydieresis -35 KPX L quoteright -179 KPX L quoteleft -91 KPX L quotedblright -179 KPX L quotedblleft -91 KPX L OE -30 KPX L Otilde -30 KPX L Oslash -30 KPX L Odieresis -30 KPX L y -35 KPX L Y -95 KPX L W -40 KPX L V -72 KPX L T -67 KPX L O -30 KPX L hyphen -77 KPX O X -26 KPX O semicolon 18 KPX O colon 18 KPX O period -40 KPX O comma -40 KPX P Aacute -49 KPX P Acircumflex -49 KPX P Atilde -49 KPX P Agrave -49 KPX P Adieresis -49 KPX P A -49 KPX P semicolon -17 KPX P colon -17 KPX P period -137 KPX P hyphen -54 KPX P comma -137 KPX Q hyphen 18 KPX S Scedilla -35 KPX S Scaron -35 KPX S S -35 KPX T udieresis -100 KPX T aring -104 KPX T ae -123 KPX T semicolon -91 KPX T ograve -123 KPX T hyphen -142 KPX T period -118 KPX T uring -100 KPX T otilde -123 KPX T edieresis -123 KPX T ugrave -100 KPX T colon -91 KPX T agrave -104 KPX T Atilde -91 KPX T ecircumflex -123 KPX T ccedilla -123 KPX T racute -77 KPX T egrave -123 KPX T Adieresis -91 KPX T Aacute -91 KPX T ccaron -123 KPX T ucircumflex -100 KPX T yacute -86 KPX T atilde -104 KPX T Acircumflex -91 KPX T oslash -123 KPX T ocircumflex -123 KPX T scaron -118 KPX T A -91 KPX T ecaron -123 KPX T scedilla -118 KPX T adieresis -104 KPX T w -81 KPX T odieresis -123 KPX T uacute -100 KPX T cacute -123 KPX T aacute -104 KPX T rcaron -77 KPX T acircumflex -104 KPX T eacute -123 KPX T a -104 KPX T c -123 KPX T e -123 KPX T oe -123 KPX T ydieresis -86 KPX T o -123 KPX T s -118 KPX T r -77 KPX T u -100 KPX T Agrave -91 KPX T y -86 KPX T comma -118 KPX T oacute -123 KPX V uring -17 KPX V ecaron -58 KPX V Aacute -67 KPX V Acircumflex -67 KPX V oe -58 KPX V Atilde -67 KPX V Agrave -67 KPX V oslash -58 KPX V ae -72 KPX V udieresis -17 KPX V ucircumflex -17 KPX V ugrave -17 KPX V uacute -17 KPX V otilde -58 KPX V odieresis -58 KPX V ocircumflex -58 KPX V ograve -58 KPX V oacute -58 KPX V edieresis -58 KPX V ecircumflex -58 KPX V egrave -58 KPX V eacute -58 KPX V aring -63 KPX V atilde -63 KPX V adieresis -63 KPX V acircumflex -63 KPX V agrave -63 KPX V aacute -63 KPX V Adieresis -67 KPX V u -17 KPX V o -58 KPX V e -58 KPX V a -63 KPX V A -67 KPX V semicolon -26 KPX V colon -26 KPX V period -114 KPX V hyphen -86 KPX V comma -114 KPX W aring -54 KPX W ae -54 KPX W hyphen -77 KPX W period -81 KPX W comma -81 KPX W agrave -54 KPX W Atilde -49 KPX W racute -17 KPX W quotedblright -17 KPX W Adieresis -49 KPX W Aacute -49 KPX W quoteright -17 KPX W atilde -54 KPX W Acircumflex -49 KPX W A -49 KPX W adieresis -54 KPX W aacute -54 KPX W rcaron -17 KPX W acircumflex -54 KPX W a -54 KPX W r -17 KPX W Agrave -49 KPX X Ccaron -17 KPX X Cacute -17 KPX X Ograve -35 KPX X Ocircumflex -35 KPX X Oacute -35 KPX X OE -26 KPX X Otilde -35 KPX X Oslash -17 KPX X Odieresis -35 KPX X Ccedilla -17 KPX X O -35 KPX X C -17 KPX X hyphen -91 KPX Y uring -91 KPX Y ecaron -109 KPX Y Ccaron -17 KPX Y Cacute -17 KPX Y Ograve -17 KPX Y Ocircumflex -17 KPX Y Oacute -17 KPX Y Aacute -77 KPX Y Acircumflex -77 KPX Y quoteleft -21 KPX Y quotedblleft -21 KPX Y oe -109 KPX Y OE -17 KPX Y Otilde -17 KPX Y Atilde -77 KPX Y Agrave -77 KPX Y oslash -109 KPX Y ae -91 KPX Y Oslash -17 KPX Y udieresis -91 KPX Y ucircumflex -91 KPX Y ugrave -91 KPX Y uacute -91 KPX Y otilde -109 KPX Y odieresis -109 KPX Y ocircumflex -109 KPX Y ograve -109 KPX Y oacute -109 KPX Y edieresis -109 KPX Y ecircumflex -109 KPX Y egrave -109 KPX Y eacute -109 KPX Y aring -91 KPX Y atilde -91 KPX Y adieresis -91 KPX Y acircumflex -91 KPX Y agrave -91 KPX Y aacute -91 KPX Y Odieresis -17 KPX Y Ccedilla -17 KPX Y Adieresis -77 KPX Y u -91 KPX Y o -109 KPX Y i -17 KPX Y e -109 KPX Y a -91 KPX Y O -17 KPX Y C -17 KPX Y A -77 KPX Y semicolon -86 KPX Y colon -86 KPX Y period -128 KPX Y hyphen -137 KPX Y comma -128 KPX Z hyphen -49 KPX f quoteright 45 KPX f quoteleft 68 KPX f quotedblright 45 KPX f quotedblleft 68 KPX f period -17 KPX f hyphen -17 KPX f comma -17 KPX r period -91 KPX r hyphen -54 KPX r comma -91 KPX v period -81 KPX v comma -81 KPX w period -63 KPX w comma -63 KPX y period -77 KPX y hyphen -35 KPX y comma -77 KPX Agrave Wdieresis -17 KPX Agrave Wacute -17 KPX Agrave Wgrave -17 KPX Agrave Wcircumflex -17 KPX Agrave uni021A -72 KPX Agrave Tcommaaccent -72 KPX Agrave Tcaron -72 KPX Agrave quoteright -132 KPX Agrave quotedblright -132 KPX Agrave W -17 KPX Agrave V -49 KPX Agrave T -72 KPX Agrave semicolon 18 KPX Agrave colon 18 KPX Agrave period 18 KPX Agrave comma 18 KPX Aacute Wdieresis -17 KPX Aacute Wacute -17 KPX Aacute Wgrave -17 KPX Aacute Wcircumflex -17 KPX Aacute uni021A -72 KPX Aacute Tcommaaccent -72 KPX Aacute Tcaron -72 KPX Aacute quoteright -132 KPX Aacute quotedblright -132 KPX Aacute W -17 KPX Aacute V -49 KPX Aacute T -72 KPX Aacute semicolon 18 KPX Aacute colon 18 KPX Aacute period 18 KPX Aacute comma 18 KPX Acircumflex Wdieresis -17 KPX Acircumflex Wacute -17 KPX Acircumflex Wgrave -17 KPX Acircumflex Wcircumflex -17 KPX Acircumflex uni021A -17 KPX Acircumflex Tcommaaccent -17 KPX Acircumflex Tcaron -72 KPX Acircumflex quoteright -132 KPX Acircumflex quotedblright -132 KPX Acircumflex W -17 KPX Acircumflex V -49 KPX Acircumflex T -72 KPX Acircumflex semicolon 18 KPX Acircumflex colon 18 KPX Acircumflex period 18 KPX Acircumflex comma 18 KPX Atilde Wdieresis -17 KPX Atilde Wacute -17 KPX Atilde Wgrave -17 KPX Atilde Wcircumflex -17 KPX Atilde uni021A -72 KPX Atilde Tcommaaccent -72 KPX Atilde Tcaron -72 KPX Atilde quoteright -132 KPX Atilde quotedblright -132 KPX Atilde W -17 KPX Atilde V -49 KPX Atilde T -72 KPX Atilde semicolon 18 KPX Atilde colon 18 KPX Atilde period 18 KPX Atilde comma 18 KPX Adieresis Wdieresis -17 KPX Adieresis Wacute -17 KPX Adieresis Wgrave -17 KPX Adieresis Wcircumflex -17 KPX Adieresis uni021A -72 KPX Adieresis Tcommaaccent -72 KPX Adieresis Tcaron -72 KPX Adieresis quoteright -132 KPX Adieresis quotedblright -132 KPX Adieresis W -17 KPX Adieresis V -49 KPX Adieresis T -72 KPX Adieresis semicolon 18 KPX Adieresis colon 18 KPX Adieresis period 18 KPX Adieresis comma 18 KPX AE hyphen -17 KPX Ccedilla Scommaaccent 18 KPX Ccedilla Scircumflex 18 KPX Ccedilla Sacute 18 KPX Ccedilla Scedilla 18 KPX Ccedilla Scaron 18 KPX Ccedilla quoteright -21 KPX Ccedilla quotedblright -21 KPX Ccedilla S 18 KPX Eth hyphen 18 KPX Ograve X -26 KPX Ograve semicolon 18 KPX Ograve colon 18 KPX Ograve period -40 KPX Ograve comma -40 KPX Oacute X -26 KPX Oacute semicolon 18 KPX Oacute colon 18 KPX Oacute period -40 KPX Oacute comma -40 KPX Ocircumflex X -26 KPX Ocircumflex semicolon 18 KPX Ocircumflex colon 18 KPX Ocircumflex period -40 KPX Ocircumflex comma -40 KPX Otilde X -26 KPX Otilde semicolon 18 KPX Otilde colon 18 KPX Otilde period -40 KPX Otilde comma -40 KPX Odieresis X -26 KPX Odieresis semicolon 18 KPX Odieresis colon 18 KPX Odieresis period -40 KPX Odieresis comma -40 KPX Oslash X -17 KPX Oslash semicolon 18 KPX Oslash colon 18 KPX Oslash period -40 KPX Oslash hyphen 18 KPX Oslash comma -40 KPX Yacute uring -91 KPX Yacute ecaron -109 KPX Yacute Ccaron -17 KPX Yacute Cacute -17 KPX Yacute Ograve -17 KPX Yacute Ocircumflex -17 KPX Yacute Oacute -17 KPX Yacute Aacute -77 KPX Yacute Acircumflex -77 KPX Yacute quoteleft -21 KPX Yacute quotedblleft -21 KPX Yacute oe -109 KPX Yacute OE -17 KPX Yacute Otilde -17 KPX Yacute Atilde -77 KPX Yacute Agrave -77 KPX Yacute oslash -109 KPX Yacute ae -91 KPX Yacute Oslash -17 KPX Yacute udieresis -91 KPX Yacute ucircumflex -91 KPX Yacute ugrave -91 KPX Yacute uacute -91 KPX Yacute otilde -109 KPX Yacute odieresis -109 KPX Yacute ocircumflex -109 KPX Yacute ograve -109 KPX Yacute oacute -109 KPX Yacute edieresis -109 KPX Yacute ecircumflex -109 KPX Yacute egrave -109 KPX Yacute eacute -109 KPX Yacute aring -91 KPX Yacute atilde -91 KPX Yacute adieresis -91 KPX Yacute acircumflex -91 KPX Yacute agrave -91 KPX Yacute aacute -91 KPX Yacute Odieresis -17 KPX Yacute Ccedilla -17 KPX Yacute Adieresis -77 KPX Yacute u -91 KPX Yacute o -109 KPX Yacute i -17 KPX Yacute e -109 KPX Yacute a -91 KPX Yacute O -17 KPX Yacute C -17 KPX Yacute A -77 KPX Yacute semicolon -86 KPX Yacute colon -86 KPX Yacute period -128 KPX Yacute hyphen -137 KPX Yacute comma -128 KPX Thorn period -72 KPX Thorn hyphen 36 KPX Thorn comma -72 KPX yacute period -77 KPX yacute hyphen -35 KPX yacute comma -77 KPX ydieresis period -77 KPX ydieresis hyphen -35 KPX ydieresis comma -77 KPX Amacron Wdieresis -17 KPX Amacron Wacute -17 KPX Amacron Wgrave -17 KPX Amacron Wcircumflex -17 KPX Amacron uni021A -72 KPX Amacron Tcommaaccent -72 KPX Amacron Tcaron -72 KPX Amacron quoteright -132 KPX Amacron quotedblright -132 KPX Amacron W -17 KPX Amacron V -49 KPX Amacron T -72 KPX Amacron semicolon 18 KPX Amacron colon 18 KPX Amacron period 18 KPX Amacron comma 18 KPX Abreve Wdieresis -17 KPX Abreve Wacute -17 KPX Abreve Wgrave -17 KPX Abreve Wcircumflex -17 KPX Abreve uni021A -72 KPX Abreve Tcommaaccent -72 KPX Abreve Tcaron -72 KPX Abreve quoteright -132 KPX Abreve quotedblright -132 KPX Abreve W -17 KPX Abreve V -49 KPX Abreve T -72 KPX Abreve semicolon 18 KPX Abreve colon 18 KPX Abreve period 18 KPX Abreve comma 18 KPX Aogonek Wdieresis -17 KPX Aogonek Wacute -17 KPX Aogonek Wgrave -17 KPX Aogonek Wcircumflex -17 KPX Aogonek uni021A -72 KPX Aogonek Tcommaaccent -72 KPX Aogonek Tcaron -72 KPX Aogonek quoteright -132 KPX Aogonek quotedblright -132 KPX Aogonek W -17 KPX Aogonek V -49 KPX Aogonek T -72 KPX Aogonek semicolon 18 KPX Aogonek colon 18 KPX Aogonek period 18 KPX Aogonek comma 18 KPX Cacute Scommaaccent 18 KPX Cacute Scircumflex 18 KPX Cacute Sacute 18 KPX Cacute Scedilla 18 KPX Cacute Scaron 18 KPX Cacute quoteright -21 KPX Cacute quotedblright -21 KPX Cacute S 18 KPX Ccircumflex Scommaaccent 18 KPX Ccircumflex Scircumflex 18 KPX Ccircumflex Sacute 18 KPX Ccircumflex Scedilla 18 KPX Ccircumflex Scaron 18 KPX Ccircumflex quoteright -21 KPX Ccircumflex quotedblright -21 KPX Ccircumflex S 18 KPX Cdotaccent Scommaaccent 18 KPX Cdotaccent Scircumflex 18 KPX Cdotaccent Sacute 18 KPX Cdotaccent Scedilla 18 KPX Cdotaccent Scaron 18 KPX Cdotaccent quoteright -21 KPX Cdotaccent quotedblright -21 KPX Cdotaccent S 18 KPX Ccaron Scommaaccent 18 KPX Ccaron Scircumflex 18 KPX Ccaron Sacute 18 KPX Ccaron Scedilla 18 KPX Ccaron Scaron 18 KPX Ccaron quoteright -21 KPX Ccaron quotedblright -21 KPX Ccaron S 18 KPX Lacute Oslash -30 KPX Lacute quotedblleft -91 KPX Lacute hyphen -77 KPX Lacute Ydieresis -95 KPX Lacute Otilde -30 KPX Lacute quoteleft -91 KPX Lacute Yacute -95 KPX Lacute W -40 KPX Lacute V -72 KPX Lacute Y -95 KPX Lacute Oacute -30 KPX Lacute O -30 KPX Lacute quotedblright -179 KPX Lacute Odieresis -30 KPX Lacute Ograve -30 KPX Lacute OE -30 KPX Lacute ydieresis -35 KPX Lacute quoteright -179 KPX Lacute yacute -35 KPX Lacute y -35 KPX Lacute Tcaron -67 KPX Lacute Ocircumflex -30 KPX Lacute T -67 KPX Lcaron Oslash -30 KPX Lcaron quotedblleft -91 KPX Lcaron hyphen -77 KPX Lcaron Ydieresis -95 KPX Lcaron Otilde -30 KPX Lcaron quoteleft -91 KPX Lcaron Yacute -95 KPX Lcaron W -40 KPX Lcaron V -72 KPX Lcaron Y -95 KPX Lcaron Oacute -30 KPX Lcaron O -30 KPX Lcaron quotedblright -179 KPX Lcaron Odieresis -30 KPX Lcaron Ograve -30 KPX Lcaron OE -30 KPX Lcaron ydieresis -35 KPX Lcaron quoteright -179 KPX Lcaron yacute -35 KPX Lcaron y -35 KPX Lcaron Tcaron -67 KPX Lcaron Ocircumflex -30 KPX Lcaron T -67 KPX Lslash Tcaron -67 KPX Lslash yacute -35 KPX Lslash Yacute -95 KPX Lslash Ograve -30 KPX Lslash Ocircumflex -30 KPX Lslash Oacute -30 KPX Lslash Ydieresis -95 KPX Lslash ydieresis -35 KPX Lslash quoteright -179 KPX Lslash quoteleft -91 KPX Lslash quotedblright -179 KPX Lslash quotedblleft -91 KPX Lslash OE -30 KPX Lslash Otilde -30 KPX Lslash Oslash -30 KPX Lslash Odieresis -30 KPX Lslash y -35 KPX Lslash Y -95 KPX Lslash W -40 KPX Lslash V -72 KPX Lslash T -67 KPX Lslash O -30 KPX Lslash hyphen -77 KPX racute hyphen -54 KPX racute comma -91 KPX racute period -91 KPX rcaron period -91 KPX rcaron hyphen -54 KPX rcaron comma -91 KPX Scedilla Scedilla -35 KPX Scedilla Scaron -35 KPX Scedilla S -35 KPX Scaron Scedilla -35 KPX Scaron Scaron -35 KPX Scaron S -35 KPX Tcaron udieresis -100 KPX Tcaron aring -104 KPX Tcaron ae -123 KPX Tcaron semicolon -91 KPX Tcaron ograve -123 KPX Tcaron hyphen -142 KPX Tcaron period -118 KPX Tcaron uring -100 KPX Tcaron otilde -123 KPX Tcaron edieresis -123 KPX Tcaron ugrave -100 KPX Tcaron colon -91 KPX Tcaron agrave -104 KPX Tcaron Atilde -91 KPX Tcaron ecircumflex -123 KPX Tcaron ccedilla -123 KPX Tcaron racute -77 KPX Tcaron egrave -123 KPX Tcaron Adieresis -91 KPX Tcaron Aacute -91 KPX Tcaron ccaron -123 KPX Tcaron ucircumflex -100 KPX Tcaron yacute -86 KPX Tcaron atilde -104 KPX Tcaron Acircumflex -91 KPX Tcaron oslash -123 KPX Tcaron ocircumflex -123 KPX Tcaron scaron -118 KPX Tcaron A -91 KPX Tcaron ecaron -123 KPX Tcaron scedilla -118 KPX Tcaron adieresis -104 KPX Tcaron w -81 KPX Tcaron odieresis -123 KPX Tcaron uacute -100 KPX Tcaron cacute -123 KPX Tcaron aacute -104 KPX Tcaron rcaron -77 KPX Tcaron acircumflex -104 KPX Tcaron eacute -123 KPX Tcaron a -104 KPX Tcaron c -123 KPX Tcaron e -123 KPX Tcaron oe -123 KPX Tcaron ydieresis -86 KPX Tcaron o -123 KPX Tcaron s -118 KPX Tcaron r -77 KPX Tcaron u -100 KPX Tcaron Agrave -91 KPX Tcaron y -86 KPX Tcaron comma -118 KPX Tcaron oacute -123 KPX Ydieresis uring -91 KPX Ydieresis ecaron -109 KPX Ydieresis Ccaron -17 KPX Ydieresis Cacute -17 KPX Ydieresis Ograve -17 KPX Ydieresis Ocircumflex -17 KPX Ydieresis Oacute -17 KPX Ydieresis Aacute -77 KPX Ydieresis Acircumflex -77 KPX Ydieresis quoteleft -21 KPX Ydieresis quotedblleft -21 KPX Ydieresis oe -109 KPX Ydieresis OE -17 KPX Ydieresis Otilde -17 KPX Ydieresis Atilde -77 KPX Ydieresis Agrave -77 KPX Ydieresis oslash -109 KPX Ydieresis ae -91 KPX Ydieresis Oslash -17 KPX Ydieresis udieresis -91 KPX Ydieresis ucircumflex -91 KPX Ydieresis ugrave -91 KPX Ydieresis uacute -91 KPX Ydieresis otilde -109 KPX Ydieresis odieresis -109 KPX Ydieresis ocircumflex -109 KPX Ydieresis ograve -109 KPX Ydieresis oacute -109 KPX Ydieresis edieresis -109 KPX Ydieresis ecircumflex -109 KPX Ydieresis egrave -109 KPX Ydieresis eacute -109 KPX Ydieresis aring -91 KPX Ydieresis atilde -91 KPX Ydieresis adieresis -91 KPX Ydieresis acircumflex -91 KPX Ydieresis agrave -91 KPX Ydieresis aacute -91 KPX Ydieresis Odieresis -17 KPX Ydieresis Ccedilla -17 KPX Ydieresis Adieresis -77 KPX Ydieresis u -91 KPX Ydieresis o -109 KPX Ydieresis i -17 KPX Ydieresis e -109 KPX Ydieresis a -91 KPX Ydieresis O -17 KPX Ydieresis C -17 KPX Ydieresis A -77 KPX Ydieresis semicolon -86 KPX Ydieresis colon -86 KPX Ydieresis period -128 KPX Ydieresis hyphen -137 KPX Ydieresis comma -128 KPX Zcaron hyphen -49 KPX uni02BB Yacute 22 KPX uni02BB Aacute -118 KPX uni02BB Acircumflex -118 KPX uni02BB Ydieresis 22 KPX uni02BB Atilde -118 KPX uni02BB Agrave -118 KPX uni02BB AE -146 KPX uni02BB Adieresis -118 KPX uni02BB Y 22 KPX uni02BB V 36 KPX uni02BB A -118 KPX uni2010 Tcaron -72 KPX uni2010 Yacute -72 KPX uni2010 Ydieresis -72 KPX uni2010 Y -72 KPX uni2010 X -35 KPX uni2010 W -17 KPX uni2010 V -40 KPX uni2010 T -72 KPX quoteleft Yacute 22 KPX quoteleft Aacute -118 KPX quoteleft Acircumflex -118 KPX quoteleft Ydieresis 22 KPX quoteleft Atilde -118 KPX quoteleft Agrave -118 KPX quoteleft AE -146 KPX quoteleft Adieresis -118 KPX quoteleft Y 22 KPX quoteleft V 36 KPX quoteleft A -118 KPX quotesinglbase Tcaron -109 KPX quotesinglbase Ccaron -35 KPX quotesinglbase Cacute -35 KPX quotesinglbase yacute -44 KPX quotesinglbase Yacute -165 KPX quotesinglbase Ograve -35 KPX quotesinglbase Ocircumflex -35 KPX quotesinglbase Oacute -35 KPX quotesinglbase fl -35 KPX quotesinglbase fi -35 KPX quotesinglbase Ydieresis -165 KPX quotesinglbase ydieresis -44 KPX quotesinglbase OE -35 KPX quotesinglbase Otilde -35 KPX quotesinglbase Oslash -26 KPX quotesinglbase Odieresis -35 KPX quotesinglbase Ccedilla -35 KPX quotesinglbase y -44 KPX quotesinglbase w -35 KPX quotesinglbase v -54 KPX quotesinglbase f -35 KPX quotesinglbase Y -165 KPX quotesinglbase W -72 KPX quotesinglbase V -128 KPX quotesinglbase T -109 KPX quotesinglbase Q -35 KPX quotesinglbase O -35 KPX quotesinglbase C -35 KPX quotedblleft Yacute 22 KPX quotedblleft Aacute -118 KPX quotedblleft Acircumflex -118 KPX quotedblleft Ydieresis 22 KPX quotedblleft Atilde -118 KPX quotedblleft Agrave -118 KPX quotedblleft AE -146 KPX quotedblleft Adieresis -118 KPX quotedblleft Y 22 KPX quotedblleft V 36 KPX quotedblleft A -118 KPX quotedblbase Tcaron -109 KPX quotedblbase Ccaron -35 KPX quotedblbase Cacute -35 KPX quotedblbase yacute -54 KPX quotedblbase Yacute -165 KPX quotedblbase Ograve -35 KPX quotedblbase Ocircumflex -35 KPX quotedblbase Oacute -35 KPX quotedblbase fl -35 KPX quotedblbase fi -35 KPX quotedblbase Ydieresis -165 KPX quotedblbase ydieresis -54 KPX quotedblbase OE -35 KPX quotedblbase Otilde -35 KPX quotedblbase Oslash -26 KPX quotedblbase Odieresis -35 KPX quotedblbase Ccedilla -35 KPX quotedblbase y -54 KPX quotedblbase w -35 KPX quotedblbase v -72 KPX quotedblbase f -35 KPX quotedblbase Y -165 KPX quotedblbase W -72 KPX quotedblbase V -128 KPX quotedblbase T -109 KPX quotedblbase Q -35 KPX quotedblbase O -35 KPX quotedblbase C -35 KPX Circumflex Scommaaccent 18 KPX Circumflex Scircumflex 18 KPX Circumflex Sacute 18 KPX Circumflex Scedilla 18 KPX Circumflex Scaron 18 KPX Circumflex quoteright -21 KPX Circumflex quotedblright -21 KPX Circumflex S 18 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-Roman.afm0100664000212600000240000007625207477306250015721 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Times-Roman FullName Times Roman FamilyName Times Roman Weight Regular ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -168 -281 1000 924 CapHeight 662 XHeight 450 Descender -217 Ascender 683 StartCharMetrics 316 C 32 ; WX 250 ; N space ; B 125 0 125 0 ; C 33 ; WX 333 ; N exclam ; B 130 -9 237 676 ; C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ; C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ; C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ; C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ; C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ; C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ; C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ; C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ; C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ; C 43 ; WX 564 ; N plus ; B 30 0 534 506 ; C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ; C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ; C 46 ; WX 250 ; N period ; B 70 -11 181 100 ; C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ; C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ; C 49 ; WX 500 ; N one ; B 111 0 394 676 ; C 50 ; WX 500 ; N two ; B 30 0 475 676 ; C 51 ; WX 500 ; N three ; B 43 -14 432 676 ; C 52 ; WX 500 ; N four ; B 12 0 472 676 ; C 53 ; WX 500 ; N five ; B 32 -14 438 688 ; C 54 ; WX 500 ; N six ; B 34 -14 468 684 ; C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ; C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ; C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ; C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ; C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ; C 60 ; WX 564 ; N less ; B 28 -10 536 516 ; C 61 ; WX 564 ; N equal ; B 30 120 534 386 ; C 62 ; WX 564 ; N greater ; B 28 -10 536 516 ; C 63 ; WX 444 ; N question ; B 68 -8 414 676 ; C 64 ; WX 921 ; N at ; B 116 -14 809 676 ; C 65 ; WX 722 ; N A ; B 15 0 706 674 ; C 66 ; WX 667 ; N B ; B 17 0 593 662 ; C 67 ; WX 667 ; N C ; B 28 -14 633 676 ; C 68 ; WX 722 ; N D ; B 16 0 685 662 ; C 69 ; WX 611 ; N E ; B 12 0 597 662 ; C 70 ; WX 556 ; N F ; B 12 0 546 662 ; C 71 ; WX 722 ; N G ; B 32 -14 709 676 ; C 72 ; WX 722 ; N H ; B 19 0 702 662 ; C 73 ; WX 333 ; N I ; B 18 0 315 662 ; C 74 ; WX 389 ; N J ; B 10 -14 370 662 ; C 75 ; WX 722 ; N K ; B 34 0 723 662 ; C 76 ; WX 611 ; N L ; B 12 0 598 662 ; C 77 ; WX 889 ; N M ; B 12 0 863 662 ; C 78 ; WX 722 ; N N ; B 12 -11 707 662 ; C 79 ; WX 722 ; N O ; B 34 -14 688 676 ; C 80 ; WX 556 ; N P ; B 16 0 542 662 ; C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ; C 82 ; WX 667 ; N R ; B 17 0 659 662 ; C 83 ; WX 556 ; N S ; B 42 -14 491 676 ; C 84 ; WX 611 ; N T ; B 17 0 593 662 ; C 85 ; WX 722 ; N U ; B 14 -14 705 662 ; C 86 ; WX 722 ; N V ; B 16 -11 697 662 ; C 87 ; WX 944 ; N W ; B 5 -11 932 662 ; C 88 ; WX 722 ; N X ; B 10 0 704 662 ; C 89 ; WX 722 ; N Y ; B 22 0 703 662 ; C 90 ; WX 611 ; N Z ; B 9 0 597 662 ; C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ; C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ; C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ; C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ; C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ; C 97 ; WX 444 ; N a ; B 37 -10 442 460 ; C 98 ; WX 500 ; N b ; B 3 -10 468 683 ; C 99 ; WX 444 ; N c ; B 25 -10 412 460 ; C 100 ; WX 500 ; N d ; B 27 -10 491 683 ; C 101 ; WX 444 ; N e ; B 25 -10 424 460 ; C 102 ; WX 333 ; N f ; B 20 0 383 683 ; C 103 ; WX 500 ; N g ; B 28 -218 470 460 ; C 104 ; WX 500 ; N h ; B 9 0 487 683 ; C 105 ; WX 278 ; N i ; B 16 0 253 683 ; C 106 ; WX 278 ; N j ; B -70 -218 194 683 ; C 107 ; WX 500 ; N k ; B 7 0 505 683 ; C 108 ; WX 278 ; N l ; B 19 0 257 683 ; C 109 ; WX 778 ; N m ; B 16 0 775 460 ; C 110 ; WX 500 ; N n ; B 16 0 485 460 ; C 111 ; WX 500 ; N o ; B 29 -10 470 460 ; C 112 ; WX 500 ; N p ; B 5 -217 470 460 ; C 113 ; WX 500 ; N q ; B 24 -217 488 461 ; C 114 ; WX 333 ; N r ; B 5 0 335 460 ; C 115 ; WX 389 ; N s ; B 51 -10 348 459 ; C 116 ; WX 278 ; N t ; B 13 -10 279 579 ; C 117 ; WX 500 ; N u ; B 9 -10 479 450 ; C 118 ; WX 500 ; N v ; B 19 -14 477 450 ; C 119 ; WX 722 ; N w ; B 21 -14 694 450 ; C 120 ; WX 500 ; N x ; B 17 0 479 450 ; C 121 ; WX 500 ; N y ; B 14 -218 475 450 ; C 122 ; WX 444 ; N z ; B 27 0 418 450 ; C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ; C 124 ; WX 200 ; N bar ; B 67 -14 133 676 ; C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ; C 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 ; C 161 ; WX 333 ; N exclamdown ; B 97 -218 204 469 ; C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ; C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ; C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; C 178 ; WX 500 ; N dagger ; B 59 -149 443 676 ; C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; C 191 ; WX 444 ; N questiondown ; B 30 -218 376 468 ; C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; C 199 ; WX 333 ; N dotaccent ; B 118 523 217 622 ; C 200 ; WX 333 ; N dieresis ; B 18 523 316 622 ; C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; C 206 ; WX 333 ; N ogonek ; B 64 -165 249 0 ; C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 834 ; C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ; C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ; C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ; C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ; C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ; C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ; C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ; C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ; C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ; C -1 ; WX 722 ; N Uring ; B 14 -14 705 923 ; C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ; C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ; C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 622 ; C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ; C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ; C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ; C -1 ; WX 444 ; N edieresis ; B 25 -10 424 622 ; C -1 ; WX 600 ; N dcaron ; B 27 -10 599 683 ; C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ; C -1 ; WX 444 ; N cacute ; B 25 -10 412 678 ; C -1 ; WX 444 ; N aogonek ; B 37 -165 444 460 ; C -1 ; WX 444 ; N aring ; B 37 -10 442 721 ; C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ; C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ; C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ; C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; C -1 ; WX 444 ; N adieresis ; B 37 -10 442 622 ; C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ; C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ; C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ; C -1 ; WX 500 ; N udieresis ; B 9 -10 479 622 ; C -1 ; WX 278 ; N tcaron ; B 13 -10 300 676 ; C -1 ; WX 389 ; N scommaaccent ; B 51 -281 348 459 ; C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ; C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 834 ; C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ; C -1 ; WX 389 ; N sacute ; B 51 -10 365 678 ; C -1 ; WX 611 ; N Tcommaaccent ; B 17 -281 593 662 ; C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 834 ; C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ; C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 834 ; C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ; C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ; C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ; C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 834 ; C -1 ; WX 333 ; N racute ; B 5 0 335 678 ; C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ; C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 470 678 ; C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ; C -1 ; WX 500 ; N Euro ; B -16 -14 477 674 ; C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; C -1 ; WX 300 ; N threesuperior ; B 14 262 291 676 ; C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ; C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ; C -1 ; WX 333 ; N Iogonek ; B 18 -165 397 662 ; C -1 ; WX 333 ; N Idieresis ; B 18 0 316 834 ; C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ; C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ; C -1 ; WX 722 ; N Kcommaaccent ; B 34 -281 723 662 ; C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; C -1 ; WX 556 ; N Scommaaccent ; B 42 -281 491 676 ; C -1 ; WX 611 ; N Eogonek ; B 12 -165 611 662 ; C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ; C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 834 ; C -1 ; WX 278 ; N iogonek ; B 16 -165 278 683 ; C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 736 ; C -1 ; WX 500 ; N odieresis ; B 29 -10 470 622 ; C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ; C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ; C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; C -1 ; WX 389 ; N scedilla ; B 51 -215 348 459 ; C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ; C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ; C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ; C -1 ; WX 722 ; N Gcommaaccent ; B 32 -281 709 676 ; C -1 ; WX 667 ; N Rcommaaccent ; B 17 -281 659 662 ; C -1 ; WX 611 ; N Edieresis ; B 12 0 597 834 ; C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ; C -1 ; WX 500 ; N uogonek ; B 9 -165 500 450 ; C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ; C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ; C -1 ; WX 348 ; N lcaron ; B 19 0 348 683 ; C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ; C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ; C -1 ; WX 400 ; N degree ; B 57 390 343 676 ; C -1 ; WX 722 ; N Aogonek ; B 15 -165 786 674 ; C -1 ; WX 564 ; N minus ; B 30 220 534 286 ; C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; C -1 ; WX 722 ; N Aring ; B 15 0 706 915 ; C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; C -1 ; WX 333 ; N rcommaaccent ; B 5 -281 335 460 ; C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ; C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ; C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ; C -1 ; WX 500 ; N ncommaaccent ; B 16 -281 485 460 ; C -1 ; WX 278 ; N lcommaaccent ; B 19 -281 257 683 ; C -1 ; WX 564 ; N plusminus ; B 30 0 534 568 ; C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ; C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ; C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; C -1 ; WX 500 ; N kcommaaccent ; B 7 -281 505 683 ; C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ; C -1 ; WX 278 ; N imacron ; B -16 0 292 601 ; C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ; C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ; C -1 ; WX 278 ; N tcommaaccent ; B 13 -281 279 579 ; C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 622 ; C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 622 ; C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ; C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 479 678 ; C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ; C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; C -1 ; WX 333 ; N commaaccent ; B 97 -281 236 -38 ; C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ; C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ; C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; C -1 ; WX 278 ; N idieresis ; B 11 0 269 622 ; C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ; C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; C -1 ; WX 564 ; N notequal ; B 30 -3 534 509 ; C -1 ; WX 549 ; N radical ; B -2 -65 526 924 ; C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; C -1 ; WX 564 ; N lessequal ; B 28 0 536 628 ; C -1 ; WX 564 ; N greaterequal ; B 28 0 536 628 ; C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ; C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ; C -1 ; WX 722 ; N Ncommaaccent ; B 12 -281 707 662 ; C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ; C -1 ; WX 200 ; N brokenbar ; B 67 -14 133 676 ; C -1 ; WX 611 ; N Lcommaaccent ; B 12 -281 598 662 ; C -1 ; WX 722 ; N Adieresis ; B 15 0 706 834 ; C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -51 KPX A Ccedilla -57 KPX A G -57 KPX A O -60 KPX A Odieresis -60 KPX A Q -60 KPX A T -54 KPX A U -62 KPX A Uacute -62 KPX A Ucircumflex -62 KPX A Udieresis -62 KPX A Ugrave -62 KPX A V -131 KPX A W -113 KPX A Y -81 KPX A a -6 KPX A b -20 KPX A c -29 KPX A ccedilla -29 KPX A comma -3 KPX A d -28 KPX A e -27 KPX A g -20 KPX A guillemotleft -64 KPX A guilsinglleft -74 KPX A hyphen -23 KPX A o -40 KPX A period -10 KPX A q -21 KPX A quotedblright -91 KPX A quoteright -116 KPX A t -20 KPX A u -28 KPX A v -81 KPX A w -73 KPX A y -83 KPX Aacute C -51 KPX Aacute G -57 KPX Aacute O -60 KPX Aacute Q -60 KPX Aacute T -54 KPX Aacute U -62 KPX Aacute V -131 KPX Aacute W -113 KPX Aacute Y -81 KPX Aacute a -6 KPX Aacute b -20 KPX Aacute c -29 KPX Aacute comma -3 KPX Aacute d -28 KPX Aacute e -27 KPX Aacute g -20 KPX Aacute guillemotleft -64 KPX Aacute guilsinglleft -74 KPX Aacute hyphen -23 KPX Aacute o -40 KPX Aacute period -10 KPX Aacute q -21 KPX Aacute quoteright -116 KPX Aacute t -20 KPX Aacute u -28 KPX Aacute v -81 KPX Aacute w -73 KPX Aacute y -83 KPX Acircumflex C -51 KPX Acircumflex G -57 KPX Acircumflex O -60 KPX Acircumflex Q -60 KPX Acircumflex T -54 KPX Acircumflex U -62 KPX Acircumflex V -131 KPX Acircumflex W -113 KPX Acircumflex Y -81 KPX Acircumflex comma -3 KPX Acircumflex period -10 KPX Adieresis C -51 KPX Adieresis G -57 KPX Adieresis O -60 KPX Adieresis Q -60 KPX Adieresis T -54 KPX Adieresis U -62 KPX Adieresis V -131 KPX Adieresis W -113 KPX Adieresis Y -81 KPX Adieresis a -6 KPX Adieresis b -20 KPX Adieresis c -29 KPX Adieresis comma -3 KPX Adieresis d -28 KPX Adieresis g -20 KPX Adieresis guillemotleft -64 KPX Adieresis guilsinglleft -74 KPX Adieresis hyphen -23 KPX Adieresis o -40 KPX Adieresis period -10 KPX Adieresis q -21 KPX Adieresis quotedblright -91 KPX Adieresis quoteright -116 KPX Adieresis t -20 KPX Adieresis u -28 KPX Adieresis v -81 KPX Adieresis w -73 KPX Adieresis y -83 KPX Agrave C -51 KPX Agrave G -57 KPX Agrave O -60 KPX Agrave Q -60 KPX Agrave T -54 KPX Agrave U -62 KPX Agrave V -131 KPX Agrave W -113 KPX Agrave Y -81 KPX Agrave comma -3 KPX Agrave period -10 KPX Aring C -51 KPX Aring G -57 KPX Aring O -60 KPX Aring Q -60 KPX Aring T -54 KPX Aring U -62 KPX Aring V -131 KPX Aring W -113 KPX Aring Y -81 KPX Aring a -6 KPX Aring b -20 KPX Aring c -29 KPX Aring comma -3 KPX Aring d -28 KPX Aring e -27 KPX Aring g -20 KPX Aring guillemotleft -64 KPX Aring guilsinglleft -74 KPX Aring hyphen -23 KPX Aring o -40 KPX Aring period -10 KPX Aring q -21 KPX Aring quotedblright -91 KPX Aring quoteright -116 KPX Aring t -20 KPX Aring u -28 KPX Aring v -81 KPX Aring w -73 KPX Aring y -83 KPX Atilde C -51 KPX Atilde G -57 KPX Atilde O -60 KPX Atilde Q -60 KPX Atilde T -54 KPX Atilde U -62 KPX Atilde V -131 KPX Atilde W -113 KPX Atilde Y -81 KPX Atilde comma -3 KPX Atilde period -10 KPX B A -51 KPX B AE -44 KPX B Aacute -51 KPX B Acircumflex -51 KPX B Adieresis -51 KPX B Aring -51 KPX B Atilde -51 KPX B O -24 KPX B OE -18 KPX B Oacute -24 KPX B Ocircumflex -24 KPX B Odieresis -24 KPX B Ograve -24 KPX B Oslash -23 KPX B V -65 KPX B W -59 KPX B Y -68 KPX C A -23 KPX C AE -15 KPX C Aacute -23 KPX C Adieresis -23 KPX C Aring -23 KPX C H -2 KPX C K -10 KPX C O -12 KPX C Oacute -12 KPX C Odieresis -12 KPX Ccedilla A -27 KPX D A -67 KPX D Aacute -67 KPX D Acircumflex -67 KPX D Adieresis -67 KPX D Agrave -67 KPX D Aring -67 KPX D Atilde -67 KPX D J -41 KPX D T -10 KPX D V -71 KPX D W -57 KPX D X -64 KPX D Y -74 KPX F A -71 KPX F Aacute -71 KPX F Acircumflex -71 KPX F Adieresis -71 KPX F Agrave -71 KPX F Aring -71 KPX F Atilde -71 KPX F J -13 KPX F O -10 KPX F Odieresis -10 KPX F a -34 KPX F aacute -34 KPX F adieresis -10 KPX F ae -36 KPX F aring -34 KPX F comma -51 KPX F e -19 KPX F eacute -19 KPX F hyphen 3 KPX F i -13 KPX F j -20 KPX F o -21 KPX F oacute -21 KPX F odieresis -21 KPX F oe -21 KPX F oslash -21 KPX F period -58 KPX F r -10 KPX F u -11 KPX G A -26 KPX G AE -19 KPX G Aacute -26 KPX G Acircumflex -26 KPX G Adieresis -26 KPX G Agrave -26 KPX G Aring -26 KPX G Atilde -26 KPX G T -21 KPX G V -23 KPX G W -18 KPX G Y -26 KPX J A -53 KPX J AE -46 KPX J Adieresis -53 KPX J Aring -53 KPX K C -43 KPX K G -49 KPX K O -51 KPX K OE -44 KPX K Oacute -51 KPX K Odieresis -51 KPX K S 1 KPX K T 0 KPX K a 2 KPX K adieresis 2 KPX K ae 0 KPX K aring 2 KPX K e -19 KPX K hyphen -63 KPX K o -31 KPX K oacute -31 KPX K odieresis -31 KPX K u -19 KPX K udieresis -19 KPX K y -86 KPX L A 0 KPX L AE 6 KPX L Aacute 0 KPX L Adieresis 0 KPX L Aring 0 KPX L C 2 KPX L Ccedilla 0 KPX L G 0 KPX L O -3 KPX L Oacute -3 KPX L Ocircumflex -3 KPX L Odieresis -3 KPX L Ograve -3 KPX L Otilde -3 KPX L S 5 KPX L T -73 KPX L U -26 KPX L Udieresis -26 KPX L V -115 KPX L W -89 KPX L Y -100 KPX L hyphen 25 KPX L quotedblright -100 KPX L quoteright -125 KPX L u -10 KPX L udieresis -10 KPX L y -56 KPX N A -28 KPX N AE -21 KPX N Aacute -28 KPX N Adieresis -28 KPX N Aring -28 KPX N C -16 KPX N Ccedilla -16 KPX N G -19 KPX N O -20 KPX N Oacute -20 KPX N Odieresis -20 KPX N a -27 KPX N aacute -27 KPX N adieresis -27 KPX N ae -27 KPX N aring -27 KPX N comma -14 KPX N e -17 KPX N eacute -17 KPX N o -21 KPX N oacute -21 KPX N odieresis -21 KPX N oslash -20 KPX N period -21 KPX N u -25 KPX N udieresis -25 KPX O A -58 KPX O AE -50 KPX O Aacute -58 KPX O Adieresis -58 KPX O Aring -58 KPX O T -9 KPX O V -69 KPX O W -54 KPX O X -55 KPX O Y -72 KPX Oacute A -58 KPX Oacute T -9 KPX Oacute V -69 KPX Oacute W -54 KPX Oacute Y -72 KPX Ocircumflex T -9 KPX Ocircumflex V -69 KPX Ocircumflex Y -72 KPX Odieresis A -58 KPX Odieresis T -9 KPX Odieresis V -69 KPX Odieresis W -54 KPX Odieresis X -55 KPX Odieresis Y -72 KPX Ograve T -9 KPX Ograve V -69 KPX Ograve Y -72 KPX Oslash A -58 KPX Otilde T -9 KPX Otilde V -69 KPX Otilde Y -72 KPX P A -90 KPX P AE -91 KPX P Aacute -90 KPX P Adieresis -90 KPX P Aring -90 KPX P J -52 KPX P a -17 KPX P aacute -17 KPX P adieresis -17 KPX P ae -18 KPX P aring -17 KPX P comma -94 KPX P e -23 KPX P eacute -23 KPX P hyphen -37 KPX P o -25 KPX P oacute -25 KPX P odieresis -25 KPX P oe -25 KPX P oslash -25 KPX P period -101 KPX R C -41 KPX R Ccedilla -41 KPX R G -44 KPX R O -45 KPX R OE -39 KPX R Oacute -45 KPX R Odieresis -45 KPX R T -34 KPX R U -56 KPX R Udieresis -55 KPX R V -73 KPX R W -67 KPX R Y -76 KPX R a -2 KPX R aacute -2 KPX R adieresis -2 KPX R ae -5 KPX R aring -2 KPX R e -23 KPX R eacute -23 KPX R hyphen -52 KPX R o -36 KPX R oacute -36 KPX R odieresis -36 KPX R oe -31 KPX R u -24 KPX R uacute -24 KPX R udieresis -24 KPX R y -37 KPX S A -37 KPX S AE -30 KPX S Aacute -37 KPX S Adieresis -37 KPX S Aring -37 KPX S T -19 KPX S V -27 KPX S W -21 KPX S Y -30 KPX S t -20 KPX T A -53 KPX T AE -45 KPX T Aacute -53 KPX T Acircumflex -53 KPX T Adieresis -53 KPX T Agrave -53 KPX T Aring -53 KPX T Atilde -53 KPX T C -8 KPX T G -11 KPX T J -18 KPX T O -10 KPX T OE -4 KPX T Oacute -10 KPX T Ocircumflex -10 KPX T Odieresis -10 KPX T Ograve -10 KPX T Oslash -10 KPX T Otilde -10 KPX T S -10 KPX T V 14 KPX T W 20 KPX T Y 11 KPX T a -77 KPX T ae -80 KPX T c -87 KPX T colon -87 KPX T comma -74 KPX T e -86 KPX T g -91 KPX T guillemotleft -114 KPX T guilsinglleft -125 KPX T hyphen -73 KPX T i -18 KPX T j -25 KPX T o -90 KPX T oslash -89 KPX T period -82 KPX T r -50 KPX T s -73 KPX T semicolon -87 KPX T u -93 KPX T v -105 KPX T w -106 KPX T y -102 KPX U A -65 KPX U AE -58 KPX U Aacute -65 KPX U Acircumflex -65 KPX U Adieresis -65 KPX U Aring -65 KPX U Atilde -65 KPX U comma -31 KPX U m -33 KPX U n -31 KPX U p -28 KPX U period -37 KPX U r -27 KPX Uacute A -65 KPX Uacute comma -31 KPX Uacute m -33 KPX Uacute n -31 KPX Uacute p -28 KPX Uacute period -37 KPX Uacute r -27 KPX Ucircumflex A -65 KPX Udieresis A -65 KPX Udieresis b 21 KPX Udieresis comma -31 KPX Udieresis m -33 KPX Udieresis n -31 KPX Udieresis p -28 KPX Udieresis period -37 KPX Udieresis r -27 KPX Ugrave A -65 KPX V A -124 KPX V AE -104 KPX V Aacute -124 KPX V Acircumflex -124 KPX V Adieresis -124 KPX V Agrave -124 KPX V Aring -124 KPX V Atilde -124 KPX V C -63 KPX V G -66 KPX V O -67 KPX V Oacute -67 KPX V Ocircumflex -67 KPX V Odieresis -67 KPX V Ograve -67 KPX V Oslash -65 KPX V Otilde -67 KPX V S -47 KPX V T 10 KPX V a -88 KPX V ae -89 KPX V colon -90 KPX V comma -105 KPX V e -85 KPX V g -101 KPX V guillemotleft -109 KPX V guilsinglleft -119 KPX V hyphen -69 KPX V i -20 KPX V o -89 KPX V oslash -88 KPX V period -112 KPX V r -56 KPX V semicolon -89 KPX V u -51 KPX V y -54 KPX W A -113 KPX W AE -98 KPX W Aacute -113 KPX W Acircumflex -113 KPX W Adieresis -113 KPX W Agrave -113 KPX W Aring -113 KPX W Atilde -113 KPX W C -53 KPX W G -56 KPX W O -56 KPX W Oacute -56 KPX W Ocircumflex -56 KPX W Odieresis -56 KPX W Ograve -56 KPX W Oslash -55 KPX W Otilde -56 KPX W S -41 KPX W T 17 KPX W a -80 KPX W ae -81 KPX W colon -81 KPX W comma -89 KPX W e -72 KPX W g -91 KPX W guillemotleft -97 KPX W guilsinglleft -107 KPX W hyphen -56 KPX W i -13 KPX W o -76 KPX W oslash -75 KPX W period -96 KPX W r -47 KPX W semicolon -81 KPX W u -43 KPX W y -45 KPX X C -52 KPX X O -61 KPX X Odieresis -61 KPX X Q -61 KPX X a -7 KPX X e -28 KPX X hyphen -54 KPX X o -41 KPX X u -29 KPX X y -96 KPX Y A -74 KPX Y AE -67 KPX Y Aacute -74 KPX Y Acircumflex -74 KPX Y Adieresis -74 KPX Y Agrave -74 KPX Y Aring -74 KPX Y Atilde -74 KPX Y C -68 KPX Y G -71 KPX Y O -69 KPX Y Oacute -69 KPX Y Ocircumflex -69 KPX Y Odieresis -69 KPX Y Ograve -69 KPX Y Oslash -69 KPX Y Otilde -69 KPX Y S -44 KPX Y T 13 KPX Y a -99 KPX Y ae -102 KPX Y colon -109 KPX Y comma -96 KPX Y e -103 KPX Y g -113 KPX Y guillemotleft -135 KPX Y guilsinglleft -145 KPX Y hyphen -98 KPX Y i -17 KPX Y o -107 KPX Y oslash -106 KPX Y p -88 KPX Y period -103 KPX Y semicolon -108 KPX Y u -78 KPX Y v -86 KPX Z v -48 KPX Z y -50 KPX a j -26 KPX a quoteright -40 KPX a v -30 KPX a w -31 KPX a y -32 KPX aacute v -30 KPX aacute w -31 KPX aacute y -32 KPX adieresis v -30 KPX adieresis w -31 KPX adieresis y -32 KPX ae v -27 KPX ae w -28 KPX ae y -30 KPX agrave v -30 KPX agrave w -31 KPX agrave y -32 KPX aring v -30 KPX aring w -31 KPX aring y -32 KPX b v -29 KPX b w -30 KPX b y -32 KPX c h -15 KPX c k -19 KPX comma one -52 KPX comma quotedblright -29 KPX comma quoteright -53 KPX e quoteright -30 KPX e t -10 KPX e v -27 KPX e w -28 KPX e x -35 KPX e y -30 KPX eacute v -27 KPX eacute w -28 KPX eacute y -30 KPX ecircumflex v -27 KPX ecircumflex w -28 KPX ecircumflex y -30 KPX eight four 0 KPX eight one -64 KPX eight seven -15 KPX f a -25 KPX f aacute -25 KPX f adieresis 12 KPX f ae -25 KPX f aring -6 KPX f e -34 KPX f eacute -34 KPX f f 6 KPX f i 15 KPX f j 8 KPX f l 44 KPX f o -38 KPX f oacute -38 KPX f odieresis -1 KPX f oe -36 KPX f oslash -37 KPX f quoteright 17 KPX f s -21 KPX f t 10 KPX five four -8 KPX five one -70 KPX five seven -36 KPX four four 14 KPX four one -75 KPX four seven -42 KPX g a -17 KPX g adieresis -17 KPX g ae -18 KPX g aring -17 KPX g e -25 KPX g eacute -25 KPX g l -7 KPX g oacute -26 KPX g odieresis -26 KPX g r 11 KPX guillemotright A -62 KPX guillemotright AE -61 KPX guillemotright Aacute -62 KPX guillemotright Adieresis -62 KPX guillemotright Aring -62 KPX guillemotright T -114 KPX guillemotright V -117 KPX guillemotright W -95 KPX guillemotright Y -138 KPX guilsinglright A -72 KPX guilsinglright AE -71 KPX guilsinglright Aacute -72 KPX guilsinglright Adieresis -72 KPX guilsinglright Aring -72 KPX guilsinglright T -124 KPX guilsinglright V -128 KPX guilsinglright W -105 KPX guilsinglright Y -149 KPX h quoteright -38 KPX h y -30 KPX hyphen A -26 KPX hyphen AE -25 KPX hyphen Aacute -26 KPX hyphen Adieresis -26 KPX hyphen Aring -26 KPX hyphen T -77 KPX hyphen V -82 KPX hyphen W -59 KPX hyphen Y -108 KPX i T -28 KPX i j -36 KPX k a 1 KPX k aacute 1 KPX k adieresis 1 KPX k ae -1 KPX k aring 1 KPX k comma 4 KPX k e -19 KPX k eacute -19 KPX k g -12 KPX k hyphen -65 KPX k o -32 KPX k oacute -32 KPX k odieresis -32 KPX k period -2 KPX k s 5 KPX k u 14 KPX k udieresis 14 KPX l v -28 KPX l y -25 KPX m p -9 KPX m v -30 KPX m w -31 KPX m y -31 KPX n T -55 KPX n p -13 KPX n quoteright -39 KPX n v -30 KPX n w -31 KPX n y -31 KPX nine four -7 KPX nine one -63 KPX nine seven -6 KPX o T -91 KPX o quoteright -34 KPX o t -9 KPX o v -36 KPX o w -36 KPX o x -36 KPX o y -41 KPX oacute v -36 KPX oacute w -36 KPX oacute y -41 KPX ocircumflex t -9 KPX odieresis t -9 KPX odieresis v -36 KPX odieresis w -36 KPX odieresis x -36 KPX odieresis y -41 KPX ograve v -36 KPX ograve w -36 KPX ograve y -41 KPX one comma -48 KPX one eight -68 KPX one five -37 KPX one four -72 KPX one nine -61 KPX one one -78 KPX one period -55 KPX one seven -78 KPX one six -66 KPX one three -41 KPX one two -34 KPX one zero -54 KPX p t -6 KPX p y -28 KPX period one -61 KPX period quotedblright -33 KPX period quoteright -58 KPX q c -7 KPX q u -12 KPX quotedblbase A 12 KPX quotedblbase AE 19 KPX quotedblbase T -60 KPX quotedblbase V -104 KPX quotedblbase W -76 KPX quotedblbase Y -87 KPX quotedblleft A -86 KPX quotedblleft AE -91 KPX quotedblleft Aacute -86 KPX quotedblleft Adieresis -86 KPX quotedblleft Aring -86 KPX quotedblleft T 14 KPX quotedblleft V 1 KPX quotedblleft W 7 KPX quotedblleft Y -1 KPX quotedblright A -94 KPX quotedblright AE -99 KPX quotedblright Aacute -94 KPX quotedblright Adieresis -94 KPX quotedblright Aring -94 KPX quotedblright T 11 KPX quotedblright V 0 KPX quotedblright W 6 KPX quotedblright Y -2 KPX quoteleft A -110 KPX quoteleft AE -115 KPX quoteleft Aacute -110 KPX quoteleft Adieresis -110 KPX quoteleft Aring -110 KPX quoteleft T -9 KPX quoteleft V -23 KPX quoteleft W -17 KPX quoteleft Y -26 KPX quoteright A -130 KPX quoteright AE -135 KPX quoteright Aacute -130 KPX quoteright Adieresis -130 KPX quoteright Aring -130 KPX quoteright comma -71 KPX quoteright d -56 KPX quoteright o -54 KPX quoteright period -78 KPX quoteright r -44 KPX quoteright s -47 KPX quoteright t -43 KPX quoteright v -47 KPX quoteright w -47 KPX quoteright y -45 KPX r a -1 KPX r aacute -1 KPX r acircumflex -1 KPX r adieresis -1 KPX r ae -3 KPX r agrave -1 KPX r aring -1 KPX r c -8 KPX r ccedilla -8 KPX r colon -7 KPX r comma -41 KPX r d -10 KPX r e -6 KPX r eacute -6 KPX r ecircumflex -6 KPX r egrave -6 KPX r f 19 KPX r g -15 KPX r h -6 KPX r hyphen -46 KPX r i 20 KPX r j 14 KPX r k -10 KPX r l -18 KPX r m 20 KPX r n 22 KPX r o -8 KPX r oacute -8 KPX r ocircumflex -8 KPX r odieresis -8 KPX r oe -7 KPX r ograve -8 KPX r oslash -7 KPX r p 25 KPX r period -48 KPX r q -10 KPX r quoteright -19 KPX r r 26 KPX r s 0 KPX r semicolon -7 KPX r t 23 KPX r u 19 KPX r v 20 KPX r w 19 KPX r x 17 KPX r y 22 KPX r z 2 KPX s quoteright -38 KPX s t -15 KPX seven colon -68 KPX seven comma -72 KPX seven eight -40 KPX seven five -59 KPX seven four -63 KPX seven one -56 KPX seven period -79 KPX seven seven -20 KPX seven six -46 KPX seven three -35 KPX seven two -31 KPX six four 12 KPX six one -74 KPX six seven -29 KPX t S 2 KPX t a 10 KPX t aacute 10 KPX t adieresis 10 KPX t ae 9 KPX t aring 10 KPX t colon -8 KPX t e 0 KPX t eacute 0 KPX t h 10 KPX t o -8 KPX t oacute -8 KPX t odieresis -8 KPX t quoteright -29 KPX t semicolon -8 KPX three four -6 KPX three one -75 KPX three seven -28 KPX two four 0 KPX two one -60 KPX two seven -16 KPX u quoteright -36 KPX v a -24 KPX v aacute -24 KPX v acircumflex -24 KPX v adieresis -24 KPX v ae -24 KPX v agrave -24 KPX v aring -24 KPX v atilde -24 KPX v c -37 KPX v colon -20 KPX v comma -69 KPX v e -36 KPX v eacute -36 KPX v ecircumflex -36 KPX v egrave -36 KPX v g -41 KPX v hyphen -28 KPX v l -31 KPX v o -38 KPX v oacute -38 KPX v odieresis -38 KPX v ograve -38 KPX v oslash -38 KPX v period -76 KPX v s -21 KPX v semicolon -20 KPX w a -27 KPX w aacute -27 KPX w acircumflex -27 KPX w adieresis -27 KPX w ae -27 KPX w agrave -27 KPX w aring -27 KPX w atilde -27 KPX w c -33 KPX w colon -23 KPX w comma -64 KPX w e -31 KPX w eacute -31 KPX w ecircumflex -31 KPX w egrave -31 KPX w g -43 KPX w hyphen -24 KPX w l -33 KPX w o -35 KPX w oacute -35 KPX w odieresis -35 KPX w ograve -35 KPX w oslash -34 KPX w period -71 KPX w s -23 KPX w semicolon -23 KPX x a -11 KPX x c -34 KPX x e -32 KPX x eacute -32 KPX x o -45 KPX x q -26 KPX y a -32 KPX y aacute -32 KPX y acircumflex -32 KPX y adieresis -32 KPX y ae -31 KPX y agrave -32 KPX y aring -32 KPX y atilde -32 KPX y c -37 KPX y colon -23 KPX y comma -66 KPX y e -35 KPX y eacute -35 KPX y ecircumflex -35 KPX y egrave -35 KPX y g -48 KPX y hyphen -27 KPX y l -32 KPX y o -39 KPX y oacute -39 KPX y odieresis -39 KPX y ograve -39 KPX y oslash -38 KPX y period -73 KPX y s -26 KPX y semicolon -23 KPX zero four 12 KPX zero one -55 KPX zero seven -5 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Times-Roman.pfa0100664000212600000240000026217407477306250015724 0ustar mikeuser%!PS-AdobeFont-1.0: Times-Roman 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Times Roman) readonly def /FamilyName (Times Roman) readonly def /Weight (Regular) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Times-Roman def /PaintType 0 def /WMode 0 def /FontBBox {-168 -281 1000 924} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020931 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6db3dc98343c9cd2d09ba4312225f67dc69b9ebf6788f6eb296e972b66 105d0f9b72a7695ab14f20ca7544f6df6e483149ad930d519e44c63233f6 6e8b13d5181461ce56c068c015df16d752f5aecc3d441b0593bbd552f4c4 10471aae8231bfe2fedf619e5d4cc615bd2436aca507faa7ecbd97aac254 7c447f08a4ffb28e12c5b6e3d5f110277b39b6c53f031a3b203434593b55 469d1a9f0f823738ca8491c3f035cb745171772c4600bece8645c5797c22 98c78e7837d6f9b18ba86d037028a819709a03a1ade46fd4c912d86acfc4 31b59c2707f663edcc194b904bf0acdf91b6f768faf9f367b38842af9fcd 356cc5b6f7ddb7405d062f27453b989ee9ba166805ece707320aa5042914 4c1d97779ab462712055a7432a3d49be61af9b6de8a9c820c0e70d43e51d 09b83720c9d206dee13784cd0cb21512f7e0418a9071975e5b69a55a9755 5676e823e940f5a5e6e67b40054199a5f8ae9741d2d5527153f9cdc08eb9 d95c4dddfb0948051953f39c6d2d811d3ffdc25f786e072b2a8a1f4830f9 e556d78a2e5c0c7138e07cd5a9c2c8a7a61e21d9281fa6e6d5d4d19deb81 3ae44d4a49709e0fc5632624610533275a51e93b50777e12d9359dbb3e0c 3c8f3e33d4e14d03ad885241c894d36407f924ffc10112b8e10f4a5f1c47 87d66b4441ed836218c0446d204a89bc157c4a6c384518e530abdaae8c29 d39738de4bae5ac68d6234031623a5737ad7567f516cf361bc42db1410c2 812a0f7f11ed81797ff59f25d0ac1bb7138984906112f747956bb865eeb5 5dd4f48bae75ff778851dfbff71e9b3be5917edb74e7ae6c334252e8dd5e 1f0287bed3fbdc20f95b78911e25280df0b8c867b3579b9cdb190e4802d7 143c2164b0c02bb7a9b1282318f7f61a6288a33b83dea53a9d1bc4ca8293 e4d993a1d275fc86cf2617e9213829b5f7a30135d1caaac711984bc00c3d 209b05e8fb22993b3923d23c15bf486896fe3b398ae560d6cb11b552be1a 5ac0f861e429a9d9bf84dc5de0baa75d49adb441abca51e3f87bb6163957 478b4912ea80753f0823b60e9fbed3552db48967f2f47b16061dddeec78c 186e194e62ec59d18db8c84f56f003514b2a0ef7b0ea9b1345de35b09b42 ac9e57adf2eecd0f68b100b9647aa415460191ca3255620a35bd3604ee5b 7b9c5d72c81da6a6a37c1b03ae4ca6055e180814abe385251128a0a6ecd5 79dcb1bea31123d98e1b3c657b11080a1c13962da7e4740f8bbc91371b31 e70a70dc912ed7e2e6138c0e3d757e8dbde0a88c1ab81741fa70bc8edc79 5c8ca8480d4bef7b1b5bd96da7208b4e6ff1528486b4aeef0fc7d21aafa4 82b4acd3143473218b6e51f82ebe9909f5ce6d50afef6e0569d607d2f962 729b45c3e0c7260ca20bb04cc1aac4f108d026d5f9b0262997da26fae37c 80417451121e40b4111511a7fc534c807f41b8034e0f96f116d2d3fa69f8 64a63076e4fca3d709c7d16cda76dfd840a204c7fbb96f9f2021a31fffbb e6166750adc49b1f5f600d218d7cd0567772a7bbec0c6c49a295b2cca64c 0e3e83187c69d36126b8bc8e30ec69062bcb62eac182b1ffc57178dd3b16 89dfd57ef6455e4cbd4ceed062999e3fefe3946ca837b087b840c3e65245 eac47a870d120c44b0e84e17e885d0fda7483da2fbd0cdb9192cbba46931 5a6f325e6dcb13659cdf9cf8d9a3e6f22e3d3a3bcfb65db1a10646d08aa2 1c608fabce6756ca1ed8eceb613b3d5e76070d394836bba9070953b10740 bbb31824f93e64a990fd8afa989eb8ba0c4352165633e79bc99b077579f8 7f7d547eacc4f4b69c8afc240c23b30182250cdbe461fec4c2e67d397fb2 8d8d4ec078b97c43e71da903ea0e80c87b65e3504eef8495148a00282fa2 46f7d62021e05d2624b00b9f7f62712b8a590eccd3f81f99da5e6e318ca3 dbeb233cf03fdb0af81c83b9097c0e8ed1a7a2ad78d7e1baf3fdf211d5fe 83f10e426e13e2ecf3fddc149c5561cf793d0ad4588feb34d15405037d92 1243a3aeb331ccd8c5a949fbb529f1575336ef66fcf240291ee3bdd29642 b061255c93ecd94a9e4f6fa09ae69c1496a8bea5f48c60e370754666b2f8 6577168d86b98de567fb37e8f70beef43ecc25bb0c4ee70cab7c2c2858a0 d639161d0acbf97c6cc5e1c96790e1e180cafa5d09b1c6520703f3fdb3d1 a8c7b829e7b7263ce0746b96ef1ae6fd46cc2046499b6357949f550a4795 e8b4e9a41846381dc9d1e093599ab035a3d9e355de386e2a72fb009528f3 6e79d3b2b768768321f4f5971d6370e65233b768d678432ea96131e8d6d5 e8f281df69303b29d0275e10f95539090ab2eabf276ecce0798093031653 7514f963b0f2d8204748e7152846ba1324c897249fc69576cd2b143891eb 69eede25a0c58c9f02ed2bdeadc40a08553b28155938cd652fdb1f59f47e a3af8fbf0c0ed8f3918d1dcb9200dd611a0d4aa2a1b2cea3641f12fc2a45 5157b1c9d035dcf911b941a500cfba9f65e76d6828ec84d275c0fe675ec6 e370b94f19a5c5b5d5394bc7d95ef926e4630f60ddc5b06276684c2d6549 50067abde1c37aa4ec9173a9cb5187ee10d7e13a54842f147ae6ee4afb50 b84ffc836d5a5b893eaa18b98ae9fa745125f51b5acb7eeaaa838e11ae69 e8551ab6eaaa0d049d98dc53dd73b3a0307e1e8bfa338229c9f3bb56d03c da746ba5aea5f25462b472d2c3c67e71d8be2b727e0e76b8b57e4c28a4a1 77dcd7d375cd749ecae829f99f87076955c6a2c56a1ad58fdbd331c9f459 25ef8eb5bf52706ad260532621f1c1b19ac7cb8173026474697f1db6e55f 2ebba3f513eb6ff41e416680ac7fabb50bd0bc0896f60cb304316a945370 cfa23b1739b485a1761342a39f5f6434c9c79d0a10a4eaa36622d2316893 091161285284febc79674b4fcc14b662926f34ff616c9e48b54080840477 44c14eda3cf09a42a4408fc0033ceef644edc7a80f97e2812a2a3294ff30 540e9a74cb796da395180abb066ecb7afcd5aae34f89846e5adf77465a5f 9bd2e4fb2d4828f0656a4b02e562f15e630dcb00fb8b54ff10da11cac0fb b4b48b02dceb29d184aa9a5f0b00cbe121208569c4af9cf71513d855cdc3 baa79b0765db4424a7353d9a366afa76cc170ea63ddcf98c86ee5d21dbd3 4d81c30bbaa8bfca634397723c604df9a29dc82b981ac295107e783c69ab 612f12adbab51cce116a4c9bcd0bb25e144c39d74a33559423ecace8cbb8 4868330f7d9d1caba32e69156d282bb7bdfc5534bb41a6ff75538c745ee0 41f16b1310cf0fd9bd583016699a3fdc335f3c7f984c76210217cb0b626e 6a70887599c320fc7ff9c287c9ccf7b74332ddde527ccad32cb17662609e a7fb6779f38fe87245ce2c4b260605e262488cae3357c1e63d9d795e8433 18139d0e41ba3e7894db41fe1e3781899b0190cd9c6944cb0d342190a4f9 a5a959a14f5ec9e325d9349808afb095dfacbdf1d2f97dbcdd1d4b138415 55403382f61847a3cd4cdccd7574aa8de3b033e16b9dce00cc9cb9f67650 ce7a717d7fb15f7c70fe86dc15e6b05258daeeb7490e747b3f4082281f57 ad4fb03a92c4b0b8f617033147a0194391b50d55f47f9a6d686ded51a3c7 3cdb5bbca8c848963020a5b1294516734db9b91d72701a04cde888f88967 cf82c547ce1f1aeaff2b35a4581ab3426b888fd34b5ed99df001d2e484ad f64844f80ae2577d211c806bf6156600f09a16dac73e1cfed74178e6aa94 aa3bfc7b13ee73d22eafd4d327c78f57dbec80d7ba2d9be8600359c3c371 d02911f1d5e3fc3242072d73d67b65840676b693775394d59eef806bd53f 42bbeaacb46faa6f768d14386a0cb7378114bd3726f3734bd35b9b4d9632 b97bac71b29aae4ffc83a933dfa5abaa123e9e560d4fee47723b5d387fa0 ee0651f8f104b6d70b90ff0ae618bbdfc9b4febd0b26da3b909c693e8d32 ca5443d98654f70c8adb04fdd10fa5129bf4a7e1d5bad899f54c36b23529 f808eca59dfb1c98c75787a7d93932e5d115ddf58c9a9995d8a8ece2b737 4827ae96036bd5872fedda784524e0bb5ec02680d834b180eb559729bafb 50f8e7b9f261b394ad166d78e5d917a2c0b5cb167f457001b8cf633992dd bb45ea13c99c659c0fcadb366cd0283a6bbb9bfdf16ce498184ce25c2bb6 6a287d2ba92a6ce6bd440086327e137b8de6a23b418ff169ee4b87a4700b d5d40ea463cef58b05df68f32d679eef70e88571ac7d8de9fac6d4655238 6049d59ae3a923e62cdb3b980e4c3dc89d78925356f0f6ef013f696f06bb a6e6ed89bd50c09e1c7c0db57db6cd3e1f1dae4294ef8b428bc4adcbb030 156afac0064bcd2c8fedf460786759897494cca03328604de6870f6f2c2b 07d8926e830e29bb5ed5420b389c97e5bb5ccfc444537be322ecb3c7d589 b1cf76f8a0bdcf583efbe1ff38562c7f2bad537a5b563d36f1fca9535234 6a96d2e2e6cf103794c29aef3f7f863140bba6ca95929df2d23feb974d6f 23c214b936c397e8fa030772c0dcf74e67c5139c5363c4877b6698f02102 dc0b27cd99ac7d748cf08695a3aa3f3a1388df56f8dfa9f4769f9c686c55 643fe4ba9ea1354f3ea2ab3d9a3781744dee788754e00df0759c4ae95a30 e2aa049a980bd167221076cfdcec914942b1e5b38bd30286e0a8b3e4a4a0 c2cabcee19e27a066d6b8f923ae34b82bcfcd7738d3b4d3c62d2cbd83676 3870280eca09c55a80abed0cd63720fa99189e3d30864a4ac4d5da57afa2 6b258684833bc91198457d3422227bda3bf0b60235000bdad21d129a893d 752af2acdc13243530a378ea396d97f61769dbc1c0170a7f1eafd1e0b843 460be9518c8bbfc07701f1a6be13ee3a74d1af1aafcb202750edf547f1f9 5df14b96c1f5d03fc5179d79a0e9618c39645936b81798fe7f80fe81a7a5 b53e680760c174216ea73ef03626cc1cfa369b5640c23d76a69dcee8381c 65932cabf3262c8b70126b9a1bb7e58596ca74c9b7e91ca30da00f269fb3 8586b046e8945f5fe3f496a70b141231d5566b1c688df52a52a90fe6297a b473a283a44bc7c98de16a4dc5f1b03cda3ee14dbd8b72b01885792109b2 5fd8ecfd6b13d2731de7067dfcee52e2c0ab0b5ddca7961322f919263617 63b893015f48ee6747f0011f695118657324aba04e86f41d9bcb4160acea 9aa6365a1c2b7a182e07f2c5d48190747d72777639ba246caa2804aa3c28 a7186b1bf98d99e6a83bfe4ac6f848eb2a58701d1389ae6ed4746670ac62 ea2c099e213ba47b6d8128ead98af167692fad5b3f8e442492e7a89d2df0 a00a3a117af086f5015e43b5a56a502f29329ecae472db8f963dbc89a238 3121482b77271f8bf24a51eb2c8faef5ba41d174b85a3c89dcb80a5d5bcb 857197af86374130e0e7a9ba425e081bb1cf6dbf8730f2a4ab20aef9642e edbc0857dc4f818504d86931257341ee8043218e77db9426b483d93ff1c2 01c8b1a7ade21f92f19efd5bb6744136cbad1023756e10c10718e97459bd 1b05c56b741c99278070bacb74b707ab92a7a86799c7e5b32e703c773313 9ffef7eb85c6eafd1f87e8282705a06f2508c6fbcf5e427a337e427b10c4 06421ebcf15c2a8995debe580d75f5873a6f37f0783946c71bcd813491a1 035f357a76fddc3d0cfb59da67858f9393af9aa5e6e947fcf49174b80db5 e961675fc0ad09a641d93ee38d20ea38f60867a9c17ab3e3dcac7fbe0542 9ebf2169a8092e7b0cc9b824007a7a113ee1a23d8d0a626e6e61847d02d9 679f9456cd7ecb1c71589eaa2aec52e3a4f818c78dd4720a3ea136f8256b 7dcca0aa2e2435f0332ee6e2b7195382c640fd9a1f15a26486027c0433ed b6ea1346ce258629ad3c42ad41847e3c93dcbfc55466d61903d0fe6d25a9 1a66c9d4b8666c1ef73ba4c7fca94a395f4ea4e160cda20ac7978cbfd27d f6943d1f4a09678e2e00d92107ff37e672b108f3cf0f0bbf75bca32329be fcd32e21389644ce5b7bcc1308ea5568d073ed46c68298c9fb4e588b0c0c 69ff0088ac55eb492ac30d9dd0af149c2d7a532206cbda420a3ac189ca34 8da4933a13a0a38dca8f99a2e58d6a7d2e118eb8f9f3c2335f5579c2462b 2f87d21497c993c6e09bdd2fde4c295151be69a5328a2fdc905874ea54e9 092dddc6522a306eb48440d16a80addede63c7e44d55aab8fa863530a5a8 7c446ffda36e5edd6453c550f3faab0bb65544e2e27c86275428da18f8b6 57f32340fc82e3a2edba810b8b51c2cd00eff381eb477f8c9d8d83343986 ee995ed8689df05a591b102f3aae017016fe59cbf9a241d30d0c46d69f77 f5ed42255593d34939560e77f9ab66e60c8115d28a76aa3756677c679e5e eff85da5d95eb2dc5e10a059edaed8c145fb91edb892cd6c01a2d8fc7989 ee78ffb2b30d1bc75cb0dae3ee6fd66e13f50199bbbe22afaf5278c82cda 9a25eb183b3f48d6885016aa5085329a3abd8a260ac8404f98358e087905 181fa6d69160bc58dd95b72f6fedcf8546625eed9ce5c0e19a3d98fa7c79 413a262f5a147980e8cadd6e019e016dda699544c7b75c381968c266081a 583eaf93160124b52610abb7578c29c0f3ff83b3e52574f2bc949604d635 c05ad2ada4d017a84b0c8332c0ab91c32043dc4211faff0909e7247be7ce 7e7206c16b76b46326bbe3d97abc509916e73aba81847390e03aca7a2bae 2123668a6478d2b54f1207559d3edc24f13c9b92a88bf677e36025b84143 5ec1fd22e301dd2f070892f3d67a34f7a79c2b7d53082cc63bc664169b32 ef7f1030738d77abc2db30b1b241de50305e6a9c19b9d24fdd859fb848bd 7a513229798576fb9d9d73ea96fef282c55cadb69dfac99e611405a20af6 4487159b663738e918b17e14f8702e94725a511ebf1fd9998e7642e8c6fc f61820ca87112d1b5f49faa0cbfe85341df9a6d29ab63138e33aa0bc8406 eba6e9845d01d441545dd1ec9aa62978afd34c4d8d08d399ca51762b51fa b69842f68becb69aadd4bd3c20017a9411bf924de016f8b4c7075feb7dce e474a079ab2900350b2fea765b68e59e03bfea937847a21088ee2519b09b 49b3a88f10bb26871a09d6ecaed6f3b1382732faaed04275b49ee17c674d fded4e1c8298b3fd21d1fe47d7d00156c328736455bcd1324970493bdb5f 504f691a7cacc6f0f7c12a3886e625fd58823eb91c49f3086d3f93557bdd fb7bb08d27f5cad8e57395071fbb8a257c95dbb994e1888efd02e0c7a12c 05c03044c5484646327afca6d3d6882bf5e872f3f494398b881f50f8f99e a475e8cd2026ee028198dfd7488d961f8e8016a56b28ce5f7def368d0924 85e597cb06a9c235000395dde1c3cb951af96ca447a349cfe6aad3994057 f339a9ff49ccd16d913c2b011665153f46eb6ad43aed8e4847646a88427b c6af6108ea80378911789bae231c898b76489d249e72657c1b8850066e97 e663fd86ea70650c849798757cab43fd6c9733c2ad7d09de36b9c608a477 017045555e4204997e85dfa6ee8d1b26cf0c8024e2959749e610d02cad21 8d69302a8b4ad3f6880a5548e4112eb5505eba021bb00beca223143d7430 d6521ca73cf789787edd1caa6a64af045131194ce5ccd4fae5041d1a7a6f 59dc8af259594752fa2e39a58ea6347640a3034fed09bd85bc5213fc7625 9e25860a3e8c45ef151daa84c3f9fb951ec636e142f78458571358906ce3 50bc4c84c90fb0e7c366ca6f51cabaaf6f0f9674753a6a9731d4a493fab5 bf544ac6f0e9fd1e3d63ce12cd3759914a19cf9c590b3d41faa247cac5c3 b75c640b78632e29936378fad69f53c5477bbe7a3ec00194cf01b6b4d18b e7132f024627c593273ea9ac13474407faf0f3232272d7a9c131236a229b 1ec2a82fc1a7c255a801270b11395c99425d5a3e59a6973e88bf7ad7433a 53a93b508c990fd5dd14d8abfb6007f574d718da3aaf8630199186eab5ba c397587a6da9ed2ea6634aafca34766751be83d86139cb2a2dbdbce57eff c52413389e88f6b79ebab3d1d4f44b2b9da86475232f0ef82f4485598157 622405d2442cd5da68f992b474a48445c43c4d5a45f85a787e8edf84558a ea40995c46420e5faeda784d20f06ba454296ec17a8fe8fc122c049463ae 81f75310d8407933568c91a27e78462b97c779db6f09568fd192e619a50e 25f40ec8f7ec8e78849f9a1a1b87dfc06959cfb774b1515c7c90fd045f1f 84251854e2c06aa2a59f6455c1680435b9978592982c6eba8ab37b5c35d0 75c414e0dc27603c8752634180f486c6150a2f990827397a0f7fb0797cbb b9e2377dc05b536e14046b90c79c4e7b77f70ecf63fe15e393c3f3334854 c525be2f0f713e6e547dffafa5f98cddb57e71f1ea9b963122a1ab3928bf 706b2d85d5b82cff6ebcd4364b76198719c2728d1853d0195d5e74d488ce 619fc10bbfbdcf134e1deda3123f56f9967e439584bfb274c4d2299a74f2 41050a0d7757a4bc7c674b84ca45ea044edf644bf889cbc2cf5c8d1e82b2 5b790e7a0800dee0069ff404181a874a9c8c2c6e0bbe3de5134ec49ea8db 6e0cc76939e993806eb18e1b4da518f5adafbc84be4849ad3979d2f4aa17 c6d739ca0e7e142e3427a92f9ce0cb9ded7bd5c1feff382fa74a085fdd2b e71ea8e2f40d9906d07bd8e6c849f8bfb906fb799e01ab8339f685454470 fcb13914c915d81363af828d46838b68b06900060949caf66bf1433f4644 9ee4b39d259e2789ed74cbf16364613b493b745f973316936b4b568e6156 b36b1c4fef0926518be0f5ac8605ed1e2cb6e076d75724a9649fd0a0c09f 19e93365b348c01f66e492c7f1a0225f5e96938e68fc8ea33dafa89f10eb 1608b37c2903f6ff36f9c529ef32943bf1c3cc06d2182e9d24488289e6b8 6baefd77aa61cae2c5057487bf0cfa62fce09eb85af8b0305fbeb2fd88c6 9ac5e1bfcb9de72fcd5a3a04f82ac871b94bac8e4f31b8f89fdf177255b1 d69354f74db698442a4ea1d80e56f5be682193e60b2b5f1d2bd5c33fd184 9cfd1907c7c8ae101cfcd2ca43728c2380d71cdd63b933865552b6b9f998 75d5a737d682c7e32f52a795b18efd0a4f2897079261ef35a1eab57e3d94 961a032561f5868490a9e3b9c9e603ae975ac36ab984bc2a288cb6271fc8 ce07d041fc958e7a6eeb4c29182e839fcf9791631bcb008f6db509b06ed8 365a57b530c171f0702ccd8a947ca790678c091fe49fae07fc45aee111e7 516e8a8e96353df8bf4306af12bab732ad211be8aca46f92701b8ce90b2b a74c7dcb8d72862d87aee5391f05c1f5500529b9c5f70b995c61d16383a6 e7c74b3f067cc1df9f31ca80d14ed8173012b6f47a07750727693f0b06cc 0aed118424e2d8cbfd0197fdc795ee6b7c3a544b413ba74a2dda808d365a 74684372376779b2ed46815d4d4b37e6e5221e367570ccb79e4d3abba70a 32f1068b29b81a980c9f58b591b3d1ffd9ec1abd9c3b609518eb3415d111 59d5db0b61842667ed5ec12e38ce3f625c57bc2fc8e5152132578b6ac726 6fef823912ccdd4d46aaa7ae961d0414a79d68d0f3d9b06511cec905a466 540f38e107a2ed70930dc43d002b9869cbc1774ea3adca7dc9b6224ad99c 6b52980a9b6b0eca59fdae1a015f1402e25f97c785f780d6a39820f9e92d efa661deff7268111258d137e8ed210d4c1a043406d18e93ff65e3a3bf37 37757c1ab0f52d9145f1a193c6e5216a02356254b65c725e3cfb3810cfb2 000c93c181a53bc4b16901233d51bd214b178fd3b1a32fe6e5d07400061a 4a73a4d83cd3e59a98d1da1e4ec8986b0ad3f995525252d4441af9d0d47d 82e65259ca587f1d3c76691e5f0459ee3f6613b7459fec2b8d6768d0594a 1222d6ca47cda2ee591279b6013e718bd3815899f7a6e4d572c996f8f626 df2a9c9bb8fb1b2b9685573bda329d9d4d6bb70222414f010261d131b4d2 a5e6a005980cc28ffff04050ccf16619af0785e90c2940b7fde68c185058 561d1b33f89e773f50baceea3a651c67b0c90d00bdcb65e3bc14f45f7245 8b00510fa674c4d3723eed99e367bbf3212d8390edb58ea45cec2afbb2dd b59c782fbdb6cbd8454afcaa1d05d91bd4b395c5db0866a7042b5348341e 98abd65073fd822cb20e364dc5522c7caa10d0db38599b7eab8f78fa878e dd874932dcbf72b58f3c56fb86924fed02bd1c760f4285417039b77cd272 3c1f66488a5abe39be1f868f816bd4f012380be167b3d26259f4ec35c615 7f1b0d972b5921ab5709858044b76783e8010b5438b6cec81d781e95683f 976bd5fd50fad3fbbd2e6461cc7ad6ca2dde98861df3ce5e5169e44c0cb4 e75da587521cd9c906d681d43639c98072b43f9f5e9e55170af128059295 08ded34537ce2d959e3a57fcdd55c3ecc1b8b7230c66b517e34cdf3d431a 698bb831ca240b2ff10f8707177af767b83f21c3732258064b3e173c1429 3af9d15cb2317a103ca0ebd0bca4f7af2ef9ed5ac30a07bb8593276d52a8 baf39883ae2613612990ee631aee29a9fd878d6c98aa781f9b5f6742e60d 5fb024caa4bfeed2be0ec6d19893171d29961f254f07755a43be1eb36903 d8020cd263d0c43363a68d40fcd6d9b32185db9abfe154f357ba3c1943b8 74cfb7de71074be8f14699937ec5e60f6199f6ab0cb812c74a27a3734b08 b2ab5a2ec0934604df879148064504605a048163f42c1b867d2d10c9d2e6 a3e2938f9a1ab0507d2420257742777f621fad9b48ec9c012cef743be11d d70324b2ae26624af819eb30cf399532ed778ba9ea1c3741ed5b196b5e13 3786151fd06b44e9d4473785ca75aa15df79cd15c7479bd6abc6d1a03186 3c3b35046f2bd459bf77a22e9781d0e7b328dc2d1efb260939145a230196 e82bd5a4a3389e0f1e3c1ca2a2f0533dd793478a9b167790d04047266206 d52d7484cf4249edcab4b923d2d95285846fa98efb9bbf86b62029875492 04aca04113edb9ec511d2259015508ad2a31290142c192f82dd9484cda0a b26fc8966a295e69a4adf76ed06c85c5b804ddadd811db5441905ac8b36a 50a2ff75d5e164b4517a93e97773f7a456070a2c5ad34b7f7a36163c6db0 868e2420c25a0752d72896aac7b9e338aab44e1d8280a572562f0c9b1b0e 0cad794ecc260490ac60c0ac7135c0ee205eb0deb4493d2beedae620a453 2bbb0fde9646fb43ecf754547b193283cf9792cd7e430d7b8502372e37a0 3d3fe02663355e219946ba76da4d0f3d78c160d39058cacc0a1186ea4ba5 95ba53d5456572ce60f28d5ade1c4b8379572c44bebbec40b5c004131055 68834e1b4f5494fc8f01bad10d9de571b5e71f57de29a400dad6a9794333 ee2324c2ac1a3d392dddef7b460b3ccfe60314c813377a30e0782cd53474 b9dd81e961661d95263bce6e0c5f985802faae7ddc9b47f057056c44f753 34b2345f847c58d1245637714edb1243064107cd218337d63e434b24b598 2d6537653103444dada774c6463477073a2240fccfa6434be5eea17f24fc 2f80268b835d3c976e64c24e8b2bb1c6f516f10b5d8575997d6b8ae10462 221e1a872ddee2fa9e45cb8723d4d6706ccc05401d35b2f319d733d37296 cee11103a36bd12c181a8eebc677d6c3fcdf0035eea5e01d53f6893f3c54 a4a5a823a88d5f1348947c21a4b771175dd6c3c2e456f818bd729b7d9c9e f135164675216c6df39e82a623c08a6fea7d0184749aa5763566d3d745fe 0c50cbb9540e40400fd8e626299f35236df40eef5e0aa601e3673a2809bf cf9c01c02eabb1f9cdd78a9fbc31f94a17b0aa94d6ad6914667e0c9b6e21 f1fef13352a1f229176d6e5b0e5b8bd5ab85161d65b30b94829cbc5447c9 652b428defc7d14426f25e256c95680b10ca18962094159e0eefad779197 7d01b1747bd524717f4d5cf699a36aa9b2da8306ff4d8fd81650af70aab8 31f5c39d8e9eb59d6e268a701ee5404c79d5f8e8c02c5a353bd7ec2acc17 f21ab8528ddc7bb7790c74783345147f456517edb169679d88b20dbbd196 9ef39d33342978d99464d46ff936a078d6ae24c15111aee83af4efa48bbd 58927c997a18311ef146281bafd836a5923d3e6da44af7e43f43afbdc3c6 da722ecf7db14cd44ddc2afa37bb54c4afb0862be1bd9cbea9605cb9b576 f4a07c9637d3a49a165e36b84f04b7cc18fb7963e04cbb75e122474e745f 1670ec9fd442bd602cf82b4f5729539f4a6196b09cb7fe4ad114076e79fd 9ba37485b09ca69ea7dfaf4f0245fd2c31060f13c929cfadeb193709370d 73416491068203cb0839d8f884c97818e42cbdcf3196b98833dfc21c5254 51bc0ddea56e50e5eb87491afc80b61c63d16374027559a8b3843f4572e9 d7b154d285113d1a122e55f70604748506547d57b9eeb3abcb38c07044c8 3a32a712343aa577db5c440168224ec43597c827d1ce641c8300c594fd7e 063faa688bb258cf46775a23f739c0ef93687b524a396829f1fd015b5ca2 9a7e732aecb42d0690f99917a1902f53e4a1889b54dcc9ab1d2a4a24276a 2c9a2bc169f92a89067875b3594ceccf71b8a44ccb06b704fe47d4a22175 f1a0a38f345f7e6eb57d05098c3a042ccca2643fd07d8f6e3727dc134720 e0bc62d9a2b0d4f3f594e3632c77bdc7925847334818bc0d8e16ff9da844 3d96158321a8c2a0db7bd37caaaedb552b5c0efca944a22d424751e1515b 67504cd95dd5c68f4d21bf436a8640e8ed240e8ecfcb43769db2010c7de7 957277afc6375b14c153aea9ecd10f3078d02aa98d1eaf8eeb635ebb0718 92e9c34c46be6f2b1e9877d715480bdc09ba727f96bc84b3e90fea605dc6 aec13af387d0f210b9d7b1b7e0041ef67a55ed4d1f223666fbbbabe941c4 f2c46d178863fa2f026d67785cb1d2dff8c232d15395c85dc68cfa27fd54 258939d0c34a9dcc4616152743f40c78bcf05f02baf147bf9b87216bcfd6 44568c501821af805778694cd2ef00fa4ccd7d2fb15fa379c2c3426562cf 11a6ac713c7462ec6790938e9142f39297faa4eeab303882774a12666851 49bc5ad0083a61b82aa46ecc09b5ccc93eb0db7f998fe54081c637a7e82f fbae30e8c0ad4cb05fc5b92100e55fae9c252523a7b2a79abe9a288ecc6f f0af3d4feaea7a09930fb881103c83ccadbd72a38c74708544955958c4f0 1ff92992a293cfacfc3c8765c3442eb8cab0f872ddef7202627f3328d156 1eef396f36af1500002e746348d9db2244220a093f27ad276c7ebe9bcee6 7e6867e39c0e1a56b6cc8188c08f7daeaa39a25c601eaf81ef6581c6a856 757c5f8e4ae8a2f23bd06ecb013803af79a9de3b5fb003cefdb12ab959e9 c94651e2cf14ac2be886d9d9022750e38547604976b42a4426f41eb38ef3 a1dd23aa94d46c9aed977923fca3e98419982d72900701b8fbf99c025349 a868c4ffc45845d6466bf424232ff2983c3ffa0e90b99ec48350b56d6801 e5c9956d9772cd260afc21419ce9d3135caf4338f26891285bd280e15091 41582ea70f164c0e4820107b7eea1b1193fe19268d72c479ce5ff198bab0 29eef2540432ab833dd31da9d3b37570964168625849eed2054a7869f56f 6a235c744086503fdf38a20966ba6ea105696e341e4b533c8db7a48f652e f1c3afcbea6fce3f92e03072c214a0bc50b317f350760c01a3f0b7fa898e d5735feff5d80267a3baf032951f69e7155c875f1f7e8c8d94e99ede98de 732ca99ed28432f07a8ddb76928beb2b6e600534e81e9ddf1f8f99b54ad5 73c038fdbcbb1346bc62986cbefadf03543f5812081b1b71d233d8548de7 2cf59c399dad0e3be8834bfb2b8632c5a26b6f4fe32698d2cd86398814a5 b0dfb2153eca501fff53ca02fe2c91246c2236b4f20fb4bfbc61887624dc 2378d84d1fc5d37973e2fc844c87c58be559d060b6f04dcd3cd71195f169 3bb5cdc95f3f1ab86b8c18656192592fd045bbfd20b7aad69139e1ada037 a575032e5ad019527a955c5840e7cf2048c6509001f9e7a014902134aff7 56ff26457594c66f2eb9e41eb0182c67ee05b6ca0175b6a937dc86436fa1 244e63d6a628bcd9d5c2833e2df6ddea07a6f06d5e262c50efd34c4ef05b 41b1484694921512f7de93337fc1b77623061e16d0472f3780dc9af3f839 48821e40d1608fb9fdd538f65883d5717ee6278f4736a0c0c66260458277 f2b285535f8d8c67e5df522bc97cb489f83b3cad0059962c4824240650e1 09ebf1c45036db8786704d2f749380ed6fd8d2ffe9d9775ddd587ddc8cf2 1cb7a119097ac2662b9bf8b3ff721c8a2bfc379a48a2cab1e0a4c790854d d806ff8cf827fe2ccf04fdb39b9eb357a06cd67e25f3014eae9d07ceed88 8552651973bae2072d951ed11a1cc5dc3d1017501c4931e1bd72fe3f3c4f 48968e02ee54c4db86334a535c5a6dadbe950e00062d256d9d1a435c79ba 92c88e025ab27925e2156387ed859c60e143fef758c818b026db97925e19 74e0f1fc52ab932e8505934c912020f3984d164319055df4b8127200fc55 e428c1379f4378a629032ca064d4d5a6e7a43f995920915765c8b584177e 6c23c85be7d3c192eb08143c224a4ee7ddb8b0752f4bcd376b93ddc2b699 867eb10078a55162e4b9957f62a653018e98204b5ffbacb99a960eac2e1d 1bf7838f2a9a504b2a0a92d4eb157baeada78b27ed20c2d7a3bcf48e8f06 04dac482bcd931b96223b29c0b8d4d341522293954cfc9ccf9c45c403ef9 3db5f7a94806d763978a2930a6e3cd2ace5fea045629580339952df72159 d86bee849be3d596432a0e31ed7e8ab636448427489d01e446771a3374fd 4e519062c2cfb27cdbb243090fb70f94025caadb048e62a36c879fe0b52d 0f1b3b617e06110de51061ccce9ffbe37b6495723bc93c38808d0c1da6cb 516f82cf23c2a91aab97cba97418103d847e43c5045a537c367504ce1ac6 138feae19a615989e3ae2b74255d9decee6f9e9fcd65139b82fec3c36287 440ef3944bbb4e0d24549bcedce5b088430faedf970635771eff726d4cfd 2a9b64e56bb1730b9e3b0398afd90dd9c1ea285bc3eef918602dd666f33f 3fd15816e0e9dbe6713116c8b9784cfbb39f2b3bbd8e9e3a3f84ceeec397 f62274540b5e208c6891ef2a7e3deb535661ebdf9a7a98f35d6b99f23d28 aa3879ca5b9a4e0a50a5974d2d0e142ff00ee359ea6416d91cec8ab2ca52 031eb32982ce16582e7c6a6b4cb7b429ad57af9dcf94e33b6f1a27cb0d07 e0634d699e6ca7f4ea74689b2e13c3df41916277648c4e88dcf08f2838ac 08244234e4c6b0ea56507c3d9d43097aedbfcd6a03d5e0b950a20de54d18 f8e1b350e13cafe3323a0f86a72f587ba9a11a4d4c5765c4ad10bcb4c38b 971bfbf32b061e78c54c718b2b37f7402a68778686e7ca0ccd805bad2542 d0ed94dbee1aa64ef97a7743696f82350c126222f217c1fa5ae053a92b95 b4803c1c4015be752b591d5f543ab9c388b521a301510ec7fad646ec17d0 ce83d92eaeeac83cf88f4569f1860b2b907d0a0631e385f29397aa880a14 6cc516acd809e58f5fe6fe89f24b224695de81fd5fe3a2cc640bf2b2faae 50e908a436207da9169218d70ef87fd2b9530982324e37079e6b44a50641 d5b3df0508c4d35d879d748910614afe4b810fbef817dce1ba41e510f1b1 c11451cceeee8d687d7e23ebd2427f97f584a2109dc1251fa8edfcf13733 9de3518fdae49d71676c776b26a6d83c99f72c4696de3a57494caba06323 34bb5437f756719129dcd58d1760c711a40fe7fe507c9adf2a5a659c918e 13aa5c1d7454f77c98d7f48aed17dbebac4547ced62d0b1804227b1f17e9 6e13cd59288fb2f3172200df3f14ed7ba85aa03022a8611bb4ac0bc79b34 b4893068e07716d1635a78a3f5e583c6e859b2a64659b83978699b881ffa 93f53ff5590d700be85d67605160778330ef14cf1589933c69ebea1d9386 3918184feb64ab0950715a334d1238f6cfeb55341d3fcd917b1c8a9ba6a1 4bfdd6348d681a34b086d801e54ec5ecebba2e8137736dbabdc86ee288a3 171308dfbaaa08e3af7c7102796855e211e675143502d36736fe4ab2c659 6aba6fcee9a2509f1ca6898ec096f24aba440c9ea96a227eb50e62666f64 90fc84b57d78d30cb62763f54165c98cfa24e52f6042a578f58ea8d525ed 12f334a8bd3f121c8d281dbf33426daf6f608d105e1292dec2ea771a3852 812cd6b56cd08cef6f2606541ee7c378e17345ad788d25dcac0369d7dd25 7890a6b6d9cdbcc914568ca153b6b477c24a622ebd8aba6bb5c2f5b5a6eb 6d3a2fda2e47aadcb3286b3ff2d16e15121dcf5b07166195c65b2182a023 d5d8d6b6803e9032adcdb7c3931096d416e0b70885b7806dfad1307e218b 27ddfc0a8c32105aaa5b62ef815c6ca4de4efb936c7ecf2ae7710f5f10be f20738615c597b08dec72668fcf26dbb9acd565918f9ed22231a8038738d 7b55560db1d261236a64cd0e3b60cfb41578dba1aa241ce74a54decf38b5 f6874548e822d40e4f34ea6c8c692d18e4d1922e48ad34aba04879fc48eb 3b0a808c884f0e073866ababbfc25b334cfaf4ef43f7c7dccec4d9874e46 30195aa65f4ecfcaf1c3215b3637455635941b7944260036dd3a636a1cbf a002d98f15b8851246ce002aeb78b1262f7ff64aa7bc0b3eebc2d463a461 9e3d729125debf0c29742053cf94fe707c377244ae0c6870ce71fd95c0ec a73bd13919ba719c14d88a5e8a2bcace8c961716ae76163a2765c35e6977 332ccc696b1c30259637176ffbcbe1c6cb2eef9331995af70280cce01857 b0d9207840d6dd0f833c60d7d0ddb69d012360110f4c96e6dd5cbe77ced6 3883513416dddfb979ac25f37a4e4d1d9011dfeeaa27ad91c44c28f1d5f6 98606364fdf8193b0a04b367d8a20c9fe85a835d46a69d1c4d102502a45d a8bb96da9db53869d43dad4647e63126f2c838c705709759aebea33fbfee 44f7a1982da6c81fc7c1e5331e5ea9771a61e4e2d01342a38fe68032b72c 34ed3b566a9b6b538b4f5cb6da9fa376184cfb5da542ed2305dced2fcb21 b0345a1f33f12fe8049011ad4c5f22986e52a8b3ac44650077b668fbcece 86d88e8cce771c1dc72354153521f52c9c678dd83d9fa4f69a1d57ec1b0c 91f20f30a6a174beb44068bdd70eba2919e9ae0619b1de7b3cc92280f5a7 4bd643a561dc7eacb2091d122abb1e3895716b18d146975993e68da3e1ec 61236ecbbb6d9a1b5b0fe37eeabc612988bc67e9f2d3bc8d252111e859af 552eb20407bcfb5bdce3dfec1964c5a9e76df633a58c0089cdbcf97f6917 3716493e1c55bba48e5a23cba3c53adcc0aa090e9550c7013551cad0a271 06459e27b31255a1550f8acc4be04cdfc0c82f1758d1786ad39ae1e3dbed b97ace47c41eea7cd01effc8df9c2d5213c97a16dc06a9c1ac42b75bfc76 7e6276757c044bc731d32af7cb6af35d2aa9116e2b5582d7b3253c4d0838 2bd6d9db40bea9bd57fad3c4bee02d87d6bee02e18bd1d8cc22c714d8cbe 776e9612509ae46f5116042c8e64d6719e864a74877ab52380ef177ded7f 12ff891aac70cd89de424583167e75b35980ca0dffaf62d9df3353f64f09 3eeb86ed4836767ba48d8fbf5f1bfaf84313a89ec4a4622c1a1af1c6429e 7b9bb5b264399d901f1df3288822eea3e7192daa0d6f9e1e9f0e9f9d7b9a 2e4d6310d438d74b617b48155977c0959232198d1f49252ca54dd5bfe8b0 1c6b3dbe65b7a6a0dcb6ec4ef97d7880d9033e8a7b5ee7acad968fb4fd6e 42d82c460f5521c971982519a3a628d302697b41d5484ce83622f80bbf6e 4426cb70aae0c164b5c309a8fca6eeca0a809f8ef09dacccc674821c90a6 175956c54e62362b8569857649c0d81cc38652ea69d88a340c8365af4e4c 89055dc154769fdeb9633d33f6f4c1976975ad7ac904e77e0d40b7ded2ec b0955921f6dde799ab8516752731510bace6c6c043c47ceb610e17c96920 583dc5933957fa1b35ca5f0fd0e850b1508355bcfdfc40550bd56a9947dc 9406de86d904d29221ff0924db8d24a2b198654b0cb8b5eadd6293abb2ba 2632a526ca38baf2c8e9d2977b1f73b2213f47b15ab45fff99447f544809 2deccb9ec7e35030f1e1e9809ce9bef6434c5cb58239d1e4e404ccaa91fe a4efbe8b712ea446c4ad12c31467458df6b6f69da1318cbe124d00b4af87 71af415cca0170e014fe8f31a50eefca7617b8ceb9aa4d099a0aa9e7fec2 1b4e9efe23fd65345a3fe61b5ba1369d3204d66eb0fe9a3c201b2f1bfc54 630a45d2bee293f0c47add1137492abacb90a87376e5bb49719d4a027e40 67bf305c0d4403e13b82e6b093d58c17846de1d6705b74048e5da26ac7d0 abd2f7999e8be6f294b3f26f9e7d5102ee96e161b7c6cda4b8d57609851b 622eae5ec481d8e9ef87b2545bc1de8daea21902bed714b47f3b51750c4c c513803690b0096fdd1c1dfebdd93bec88d1118e30cea0f5b5087b196258 e2bd2b2a21ba498a48be593d39de76b169fb07ff6a7dda846752fe315d3a f8dd342f6bd1f4da6293a581f0c590d7fb9e51e0efd14b8901d5713a5992 9b2edafff6f30313c1b0710e48e1ef3b3ebfda6538eea25bb7c0d502f52e 703eb6f3f277230d34376f35b775d2179794310d61745763fcefb593e2de adc74a7b20414af22d3dc04323f9bae278404c5ede4fd5cc47cd0d56a154 f2f5d7bc62244131cc9468ae4e29e75c5bfaeb190bd6e1eb8bbeec39dc6d 4f4ca355ec20fad5f81a912216ade68a9840a6ac0921b528fc49ab619f66 f0ee35fd7cff4ae7bfbb34eaba4f71adb1d8a253bdac2da72a5e74e25712 e436f25c4bc7321fcf2123c4637f4627d5ea773800fc50e406fda3930533 ffbfa7d387aea9e5c024db8e329f4076202cee3c7ab77297d6eb72946033 cd30c124dffe0c03facae420bbe3d97abc50991686fc1ebe669803615ca2 e1daccf91238cf323530ea5f5dae0bdfb457007c17b4d4d1ee29cd494fca 66ba88c2d570efc9bcfacac774c5351a830ed733de7de4ea658fabd0c8fc 22c4a6a8beee6a8d0dd38ad8aacab446b96d520060f0de62721e2d212452 67f2e1d7915f6367e0236ca906f5bed5521d3034740b91d32cef208f9338 a58f8a83c0499b6d01c909cd734bc7062c12bdc17d179ddfea71de6a9c96 c6540c70f6f22f46215facae87a4302f008f78dace5a54c0708fb4d7264c 8bfdd8a86afa7608594a152d04596bc2791dac2624b79dbe53f17b725c08 67e4f5ad6d5013dd95cde96bc9db1aae2a6cd061fb8ac6c1b259f39a4ad8 ce9ee48fa6bcb501cfce96e5ebb0cc1a5bad65e63588e2e1e8c5027df18c f4c0f0a720f11f218c97fb22908dc1bd5b3c1ee8345de1194ca983002c29 bb19c211fdce599f4ac1624825d9d0e5feb31ad831275095dd89b456c5ec c63087ae009817c1f74d67f35c775a63bfeb55b5d49e23ec0368e35c246a 89890d1f0822f0c769a09ad7be90d95f50e132e349b3ceb4f970a7d45c4f 616b24c057a645a94aa5de4483aa24ffdbf959b2bab60a87d29bcc555888 3f8b2c17e391620601ae1d8c13bb3e11d01c372b3fd50f25208b39f81923 8e80a568f592e6bd7762a86b3a9c5035ac016dac780f33ae5d6b4a0428d7 f3a676b74009d1e4d6223e2fc32a972f92b7611e130e52a13836c4738b6a 52ff0e536e48fdf9de9e55eb8407c70f2e20699df9c58ad61c3651e2aee0 cb6180d5d4e2c2aaeb9fa0f176cd04230896847eedd10a734c52fec0589d 727ca2bd6eda120f1eab0321d24482415d948cff6024111a1fe6105c2390 b5b2fa66ccf1ff0249991f5f57939d5d05e540124d192fe40f94b0ab86b0 0aa712cfa5847f448193a307280a1df1b09377c328c652e7326c400dce97 d3384a6aef322a8a948797531121dd459d8cdbc5a5cc97bddaebf5dbc346 0b9a4a67f78a8f58c2e35656cc9f8dbc66be57945a5df13f52329d75b4f6 df2716d16576a48ca66b510ce635376487080b18956fe7c820d6cf43bea6 44871b11be4446ad456e455b032cc420cf40fb9d50eb183a9e4f15732b20 f3b3c66e6e80ccaeab958b06d9774d944b8f07e704b8515fa0c6754606ac 4871c41cd9e7efff4d0b9117d06aef7ecd40ad6b3edc433925cb0da90924 5de5fc9388b242cf9b5b93ccf21d96a2f0d5b232396a45c96c85cfdd0a1d 4cfe92cbd248e41ccf4fa973134372970aa993582c7f26e1cc99c430eff1 49ae3e66ae6de48484daaba836f46183a671215193fe23f868c5092be089 745d94070847f76c2b8da34c1b10b61eb3b90091da43819e9f8cc8f0dcfd 449c9a1cfd463f6ebb9c7deb8602373c3815a66a0c69eff518984e4f2bfe e0e90274816f1f78dd934d6c1ef65ca1b039a384ec95847063fb992b97ae e0511789d1885c6903faefad786a2e7c4f2d776bc06b5db604c7bd1d3cfc 2f7d5396ff50677328b086f5fa2241d09a417e54d6116d51112dcc34359a 5bd0081d2248687fbd56a889caff523617c718ed828ef9deb5614c6d718e 4c874932f0f0bdc029ecfac5e1ca37cfd6c882202555959e5baae6f31720 b6ac528293978a1a1477050fda8ccf8bc2f3b24068143575a3fc9e80104f cee05d3fcbbcc15ddfe91ea70fafb312986143729bdadb42d2aa12394410 1c6700207a704e520619a8cb313140d57e2082e1043733d69efc40b77156 39020ae28ecc0057aa353e9112bffc7b1221645aec20d3b3cf63077d9e9d a9632e0b1c2b801c0f406b25333d3062cdf03fc6a4c2fe8c87d6adf80c75 5bb8f00039fe1cf8fbce119c59e857f13d01891e3afac323393b700db336 5a59275d118ccf9bc2aafd705b75092b304880691ff588f3f2c2dbc63c89 93d1ae865412ceb8fd00c82d3aa6d20b12e6f64d164206b35c10f881ae48 c23321053eb9245b1c38db9aa74bc7198690f432de85d9007a650f8c4243 e04e0974c50cf4542e4e34af53c238c0b03d0ec2c91cafa18af56e7af797 d861185fdf4b909aaa4b85f6c08f22b01c07428555cc7e59f7b1d4909f15 040ec17db26331eb66cde8b0a839180d1384d5fd2ae1b8ed3f84e86ea7e1 3c7d56b7702b04cf75eb63c62f572586067325acefdf8730c400a1262724 f59b94b56de99e9a5175a11cf9322f86a2f3118790f9886c1d94cb612c62 9e7bb81eb8fd5e2bd946e99c0f28418b2c298dab681099b93cb7c3cf9834 9691cfe01e6c40b17d40dd96067ae715b1100d0f6d0ca67edfa64334e3ed a223b4fb7b82b0fe06eec230ce4c822b41f188e0cf738283ce2c626a4a6e 59f2ab4d5559ad87cf4d8f354f9f6f408cae1edd9d3cf890022773ed247e 079fbe9f20451f67ce9cdaa2b3ec9cd80c465bd34f8fdd306b66b9355ec5 61e89ff45349f0309ea8a5f0a7ae83cb7c8948f823c324635379630dfe8b d92217c2d9abdfcd14ceb8e52b273b7b00d0680b40ef0212a3ebfbe882ac a25fb6f667241c1f473735263b0d1bfbea59d951415bc2399c41df4cf997 b9d2fc1051e592d423b74b1477e76d386017cedfdc9ccbd3f3a92736820b 5bbca6e863fe4dfbc58567d8b3624f4eebc57c46dc137c6abbb5f90c5fb3 17fa34af30ea6ac305d9827ff1c110d761eb52103c3b3364365f2d7ec427 e6c56feb21eed5c4c9149946d1c1423b0cb3e5e9a6c13b3b69d51fd1a4dc d5853256308c6cc6349e6d09199ba18e24b9dd877f279ff3c93327320eb7 4ce8bede97a1c184e10410f6614d90e72ba4351ae9570354ca799cc2f145 9719b2d35b7579a895a905d07a02bbdeb7659d710ad6b8e28e8b05dcc713 26cb4d3bb694a3da64a4a4bab35fa3ed57be14cbf304b1b02d7a6b411e75 2127061cc300f58e02f333ca671720664a6eb6627ed3ad067a8ce5bd7b6f 49124f8f6acd6955760cbd9693e100b0e0914d57de84323c2b06b189cb7c b8d76ee3a33c94a3b9db6dd7e823534eb6b86a712a5198d8ad45a2a1e4e4 62be4d4293cd8e0c3c38cf5bce1920090e44be480f257c511c80fb39a99e ec4c7e41d2c030dead28efd5182968c138c8595774895c8fc40944e8d80d 5bd9063df88e60ece3a72b0312166ae890c5d1756c9c1b64e6afacaf9be9 9a74047abc75b0475726ac0db92ecaa2ce81185af8067f0c6c53f689a959 179e03eba0ea6749ed4d55af20b7e21c286ab0f78e660e8485af5dd484b2 f7aa3229fc6f318d3acea43f6b6ba222c1965f57f4095468d533575ccbb8 e24242c59f32288f236b7fbdcba46d3e0e41fdcaca6282e1804fdb04db6b 7d2466e7fc38d94ac8034c1dd9c8df679ae5baa569262d5537fd9659c43d 0200582673ca0e9a686f7a58d727bbecca32280db5270fd917c7e92fe792 84f25a7e5cda21e7d78585c2564e04a514d5d8dbbeea1d0382639c736a12 f17ce938f00aaa35e1e222faa4d2287f231607c7dcd9a90abce96a9d9ce9 cd0b005142399d5d34134f0c58bc6a3690eb8688007fd7e84e4391fbb920 a3b082395de5eb16ef78d45f420f37b88229a756191df8c0bd57f4f77133 6d985c9ecf3de9b6f43fa61e90a2b7de7928de6b7a78340759474f8532d3 6b329a394d9258fe5e4eed1b87f8a43fe53f100de329f20b91408c9a5e6e 296185d6710528b833e411ffb54c319c14f7080398e188b9fd7841b74aca 861aaabde18a5af813fbedeb4a7ee2aa1743b2dbcfdc26225c7203227fc7 73b147202949566ba7c81f5ad32dfe3ce783d1708c7b9b8c9b4373042c7c 8fd0de02f9cf42f238e4b51a917e4b63d8c31ac6e18fdc0ea1249f3175e6 59649aa0f2d307df86fda42d80a3bd4697da5b1b05d346b3faeed2c8d21f c7aa47ba3e2aedde00559c948648e9d1b7bb16e61ba87b4e08cae59e8391 7900ef4180e4d733d0e01c54eaafdfb5514f33848aebd09720f6f7476c43 0f0edaf6c62d83149b03b5132e241c7273a2f32233c212c6fae8973ec98f 87b7e329a9eb6736ad05e6e305f7d3841355bff69fbdf2cdfc41c942bc29 7abd3f37bacb53109d638947d28db97773b6fd0d1bd3b11246a38a21db04 406e0f9587745b9a2be9ebccf1054a505cab2705882090d5382f6f99648f 3b019e624714b5fbb1f9e0c8d15d47e5854cab0935cd1af213b208b6ac25 117a214c6a91f6401a26edb3d73c937511ee785f444b8ffeceeb8b8a0357 b309dfc0e9bc186314ce7cfb9bef2639a2d3c212d7d6666806d7af8ba502 23e3e0b251bc96cadd4878a29d55d141b76578ed375aa5175abae675d96f 03c4de61ccb198cee37ac4d1f9de70d53b0d49313dceef64a9b52d6e7c74 e75a6f28f82fa25902aeb49f81b84e4d303952c3ab7dbd5837eeca211f1b 823479e76be374138ce6cee44ba9941cca39dda6d6c9b4019a5b3dafe545 46491e12d9d439d455ad21fdd504a3e53f753bb35f3ecd0a2b3cea4fa60c 4f8c74fb5e55b107b719db7e22cc007f07c6863b57dcdbcaa2716a7278da 0e933f79780e5086982eb02756db47250b897f436fd207e988882628ec7f 29e672173ce7be072f6b0ae59de0dd1b08d084acad1ab777b87bf3008301 955ba71918d6dc67d6e80dd138a076e7c5324a1d1b02a77321bbb320e7d4 7c785183c5e1eeb19c6c9c9246f8dffa1a09500d9b58af8d1ba891d9dd03 75788f394975c92806f8b4f4b2c2b0b15df8cbb214cc0d7fb17d8c3f2ef5 37ede0c8ed5e842029524618c506aa21c1bb97eab019e8fade46888153a0 732dc8c35cb086714320941ba5ab1c82c65f8ca7c0e4f041552dffb3cf61 dbfba6bc07dc6dff0421bbb002a432c1667b650e5c96f77c6d6a88cb11b2 00c8993708213528aa078dc8aab00146f355d525edc43871b76e77b5be3b eba764676dbffdc601d6fa215be533d6fe918a06d0c6bf2fdbd28f8ab4e5 c53e3f838d6763946166b30a6eacb97cf3eb6c9f4c2a1d095e23aa28e07b 444d079078a2273b8df6b3a47a135b8abc8137daba913a5e578090e4c263 266755b07c1e96c45887f1ab883482a892ac5c5e7eb612af8d71ddb6a256 23048979c5f8d1d5fa97e14bc38f85334aa77c91345d491df96764bb14f2 671a5c2119222f8388a6dba26752f421aeebfbd6c473149b6f21599d16a2 47ed41ae690573115f3854f8abdeba55223c56908d00190c4718db9206b6 c415688b064b183692f80e2d2a36a545e61f2c8ab09f928274d4befcae45 0cddeb06079abc2a39fe970ed2529c5e08d04b01392f47769752600c5db1 e34ffb3045f19d7d6eb3c4c2c25559531fae3859858c312eb58e51338e21 3494a85018a22c3f6c9607b7e519bb14c0cbf4127377696e4b673796f396 1d7f071ddaf0de5e59e41f36c61fbdcd1ab9379db193877948ca4cf92f1b 2b5d9087981f6be9437c9a28913acb8a21295436507e70d3eb88b1b0b6ce c500ff9f76c6863f0de62631035a2b1cd89056f21fe1843aafa6f854258d ddb9d7b65e8552e1f7e0e6494eb76834074989dde213639678ea90fbfd18 76176e6dfa37d4628c0b16f650771bb18e0290445f66acb3ff84dd73d16e 2566c45ab5711ca884b1c7af7ab29eec53a815a026ef3a4a5ebc6f5b297f 34eb113a737364b5cef8f7551b366e323cc73458ee60ed15b59acd4040dc ec2b18fc849a9dac4490aeb6b3d26c3be813eec167b02ea27571cfa64c33 b0c93129fd61253437a5e4c916d7e388ab6bb8913a752a3b95dc45d2c2f7 ff2fc245360afe0a716341a5ea89c6601f504084ad96ff89a05b6154ff47 c69a628e7b2e44f68c52d3bd87c83aaaf308eddb1b5dea54a99d386f51ab b624fe78f7c6c8bb6a9d7c57c1de21992f63029dcc00eae4c96ac10463f7 222134b2cb06583a51f8facfe9d03b9851fc3441c520de013f978772f70c c1a45212c4d0b43fd36b52800bd4fba745d0e32aac2a367321b5b12e86d9 482dab615591c8e824cf8f8c48b78a8038e17a151568e5d4eb45bc3f0f44 6fa61ca9336a52c6911f981ca945093d477eb1f5370dd1d2d5743f151768 61cd63ea561b19e694e7e162fac094517d3287ea85a4884c45559a4d2993 7e188ada64581718adf5fb6c901b69d1ef82dd7efd8298c5bf693f3612f1 aba89d947f1172332f13f00eff77e2c01c238d48a7d8f35004e7bbf5d149 82624fbfa0af18eb2b7c9cb94d284fe1a2425329e33bc9929e65ca864afb 7fda0d6451be80c95000a4cf2c0a3d17491d1950e3282df9aad61d9cc472 023991d2866956caf067316a9800815c397547c4ded0bd2c4a2ae2fdeb81 c4f141f5465bb67cfdd4077da39d165444e9a89f291b3f4f9cd6f4a54673 97b517d6495f6bd6aa7408184c1269e45d6e59916586b4df9b1a7a34f95c 14a7dc84a8be68b8c5a73b6a88cbf355bb69eaf3dd435da50f2b2aeaa8e0 712ef9ea9dad4ef5b86122cd060ed5f89365ab68f0366dcb02afe8a5673c 5fe3c800f0baa3940612af0fefc299cfa3adb9df1a8a31228f3dce3aa583 5700279457fc6f8ab4327a9350d60bbce173c41c2635ea2fc24425bf796a 8a3e3730e36d9cd412ca409e2a7dbb78bfd85c57240c300d8610901321ba fe2b00508d25e212394979fd04cc1af164072b928fa24381630e4c93426b 162dedfd6ac85e9b09a0777befab24fd951954f01ac80a4485a47d4de63d 5593a9a8375809c5b8d923b14013f5554fcbbd4e2e38acc7a1b3d79d547d 76fedeefb10074d330f4fd2e9fec23d1aec2ddccc24decd495494fc1f80c cf8dbddf74f5002799691a91acb26f6b25684913c42e1feea29db8331c61 3cbf9e9d4a13015f467b44db28a941f8daf0c8d12c43e8c6f9665d7e69fe d97209d5a676de03462160ee42a3be1a214167b0b19a8fa36a9a8cb43b0d e9de6f6d83706b617a8a5a28ce8dfeaecf282ff42340ae1622be6c99fb2b 8218805afd7f0f378378e779c84a75bfe953705768c8283ac9c762f84392 eeb6d57b9958826e10a3e37d71104202fb3f677dc45cf9c7091e4c4e3668 4ac785049849ed59aa4013720907e8d64c99e9ca4eb8cdd1da0d6df04072 3f1ee775497ee0559c01123e9753fa4057ee587cc6babff881cf3b0dd4bb ff40a3b80a0c46a15608b913f6e1eba3e9dee6fb656241b847ff505fe91e 1433a56a4bb31cb36898f6a4ff43001cd38aca5781ae254cef32a471eb15 213053591a281284c096da4b8fa15fecf155af9f2fbf4b6b73608413b836 93ca0abc1574d7a9bd598f36f37b199443c862466f8632fe9986beeb83f6 46ad74858a90d2c8584ef7a7e87d10ed094f00c582e7d0918a74f09eac09 3149f82cc7a2dee0bc7cfb62c74b5095145db267d3aa1f5e718cc5a1f0ad b68c7c69b2e030d0e8d105a169ac0997004b1a7492f62c1ccd56b5cbd968 907925e42b07cfab6516bff1271ef8ef5763310e5b1cdb15e8d0c0f7d841 6730afe42c93e51fd69989610c25144825fa36bc373462d18586ec4d872f 828f5928ed0a291928eef59a7040cb91aa7eec566e9c4172d0e1df7d342e 81a416baef22a1975474a1117fb2976622d1b8ccb1be17a8df2e1d812b40 b75bc26ce8bbcb6d292292226d58102f6a764c04d0dacfa9a9fc988992b9 8edb14a4da1a69f1565c7f50538d39ef62a8a0f0c1a3147de4de3c6c9820 b48b707bf2f2bdb6fa32c4a30c7f38a1c33c543f9997f7869cdfb404531e b1ec420a711aa2c790914f209b9e899230ac556fb49899253dacd5819e45 f5b07ba6772279beef5929c919fc01cfe1ba26934dea2aafb83d43736917 72a120be7ada4309bf8567a084887cb0bef23aa5ab6c8592545d7c2d611f 8322a8ef2454f6b35be71bc358e6bdd724bdadff050f8d0ad37479d3d213 9c7b0cbdec5902172ba2dfbe05f8b1e56d5878af6679357f313a5ecdbf15 74bbd9a5b6de09355ffe63d5c2408de6ae099e5c21bf7b130b7d09dab396 5eab652b000ceb4c8bf382a97fb071efc5aae7f0e10ca506279aaa3076cc 34ff6c70508b9ed225d9d69b6511e8229e1380c8a865a4d3fa183955b37e fed9832934117842ad2f2b1fcc96d6f2d15c7eb1fb162884629748787258 5c17344c4cdd6ce70ac7d0b7edbb11adcc33f06353345b9e5c36d95fbdd1 0fdf56bb6c986c3c2896f9ea2196238568724a94ba50a9eab29f4db60dd0 baa9212464dcbd1e813349d5b407573115078a745c66e0b2e885339a803e b644a15f025bdec3834d69fdc5b7204f57f3c9aea8f723c245bf18debc7d e13354b86afd2aeb3e7c7f8d42c074e8860035b6c0ccd7bcc8ab933d28f7 3c44f2f90b498dce6d10d5febcf8aad4af785f97aa8b0c468319ba29739e a2391ca354542e579ed44b325e7f3dccc672acfeca480660b514e2903ebb baf70f7a77d728f6108c1045445dab806a811b9bb938b3712ab65b3ea6b1 714697d3b96dcb67c22c89795638b9d3eeb5afabe69ff4b9b2755355668a e302293042fbc192b7d49f5ce52a72a962894aba2bbbb9b567ead45bac2e 24c6960bf7eeb485117a8aeec1909fdc3388f5af85465b67d834a02f96e1 53ef5bede85aec137daf7669ab0f3514b4acea7ccbb3f9dadb8d10b9a807 e5a6ced7955dae29649a3a8c770fccd4cab201e9289757406bb245159cf3 a33537835b7b7c371f386d381c39d68b3b0ba0c45795337d8a456af50284 e79d10863c5736aea7af92cc6959a24c82a70e9b87d2e1e4c356ca05c2f7 40c62d4f7f515e80d49575d8d5208e0f04be51bfface569372567cd37f91 f4707e6436cc83c2d532d262505463b2b003ee489b845a18b58a28a4ff0e f93501bb2992ed6171b0e25fc7496e989440901c0cd96998d2bc975fbe75 aa00953cdc3c55598c9daaf64e3fb89153898e7497e226f02a2a131ccfa7 22266a13de895d6f6ac674cb92d69d7b1c01364ddceb3e61e4644052f666 b652b73c8e03df06c39eca69f987fd283741e7102381706f0c54e3a670b9 c2b0ce8d9016a8c09e64338475e8e16c81b859c790a2c71c6f3d274597fb 36654db804257515d57af8275f1908b0453b07176954ef2d0e4b7f9a45b7 308b94185feb67a88ea99e66bed9420c4c73ebe3a39ae80449e212df2f0f 90f7e13ff8928c4aa20fc2263a7a8e9157219f7ad010d05a896d1d7e8293 0d1fde197f80ff2d2a7ee4f7ae08d8a25cd80562f614837b8b67165f8b3e 7827666a8de5559c819f00494660ed214ac48cb8935891e419ec17099d6d 008a7d71d66b0a193cc892fe2a5680e381804dad9045b9c0da272517598e ea55b254479271b9f13dd0a8069ef965a8ffa6cc4b77ead9fcfac2a65b0e 75a774aba9855cd6fb9faf4660a2c81ae79df8ca51e9dbe296498f5389b0 d9e45cedb6015ee34c9ec09ff5dc258e214474c7ece7334f03730313d118 67bb4fa4f8aac235bc863688b43efc2ade7f8e98f00895fc4b3384246d63 7239468c518b4b752ad32818ac17e19b96c1ba00b916f7dc998161c52a14 d69a6ad2e4e746199640feb1b333738fa0660aa244e4c4738c11fd38649a 717705a6c566caeddb35e6b94114ee7ab7361013f1ab2e2a4860b760feea 5efae639c3cea7d883f721c52d6a631c2852820b807c20eab7e6d6cb9971 edc7b9853351b3567648489cadfdddec7ecc635b9c40c0d223ff10fe0e22 5c8819a6d9ec7bfa1b1102bfb2b75f9b5117bd6d7e086ca77e366b2bd679 46cacbe95088b019c82187930cc9ff2b43ef65e290442ffa305aec950f72 1fb034e81220edd7f1071d546daf91a7184e10f5fa08a934a23da0bf0664 6aac4eb2f8a9f5fca39bedd431184486cc8c52a63ee0e45cea6a28ceecd5 51d569541f02edb47bec1833d92dd774e11dbaf9003c6cd3cca66d761487 d4ba1ad17e75a13eee172a64010c55e14843ea66029010cb9d6443083486 80c3087709fff64ca55c846eb3ea15d6a0d4e3fc0cf88114df2a5ea6eebb a0361f59415899aaef7e53afd5ce30c2be93f2dcf23556a69deaf29fb0d2 974f204e35277f255bf200edb1dde156ef2a6f4f7e3df922b9466bedca9a 35792a211ab121f7b7f50c9c1f056d2aff165a11283d9c60d8b38f9a618b f44dc840ecb81749bfccb9a7837647a5b7b6ec4ad830805823b7a7837862 c2d88650a3d38bf9c12e37376f3e044060f2d095e1f21b9492ef80720ee2 58dcd1696241da355f2c91a8525079b97d00760d4bb234f95e5175205182 546c12a5f66b65b3fd95df307588d0a50008612c61a4ad5e294a6f3d98eb bd8b2a042fabff48a7059e97fc7e7aab20f1fa9f9c7f724a77df7fc53e52 513cf1d9dc95ca7bc258f150a7f094e7db91e991084502f1715eb5b785d2 ab6863aa8997022bf816524f0081061680c23d83079a75bcc6ad9bac578f 26ea9a4bd44e9fcdd0ff820a42440bf2f22969804d5a88d38c0c23d14538 5d896383b49506fa57b5eaa58064ae23e567fc6b3cfd76973ec027df1248 768573ebbed1087400cd5f4c59102333c67f1ade0b67e030bbd210363709 96aea300bab90e24d196658a763a8ec428cee0b947d2e5069ad4fca2c075 3939cde60e2a962930d3d0c3aabc75ac1c62c05dc059224d9e55977bdc88 12f6767f323fccc018fecd761d210d2c7e5084c5d87faa6cd3c27f51c403 39bbd717ba38d53aa0321714299bbe1e3b9f14f86667077d175fed73effa fd261766e785e16e8784f099dd517003edef62aa43911eebe1513c864a62 2a52c64408f4dc33051cd55e50508fa2cf568d3d6631a772d011e10154c7 3d797011b5e827210d1b31b457c71da764db623d1e0af437b8405976f644 d63c23ddda83fa4d14d6e18392597fe5a145dcd812fdad35bd6f71cf1192 1a001f68b04377e9dad8e9bec3df1b92c2f1e7efd1acea25c2acb92199d9 b1209151836368d1a2215a72eb0cd98b6caac02870636958fc8aae7cac03 a9125a3b90ce131da8a2243d9dcb67d3bb43df16921dc8b20053d645211a e82efd782051c629a88522195424a8ba5cb44e2860e5f640cbf31dc72e40 7853d11167d45df63f6442a1d0a4f689dd6ea7d1de978d08f85c57de765c d6b2f340302f1a5da25a1ae5431d1d8dc31f9c826dd1b4d5a1d9ff023bb1 521e39d8d2dbc86d24566f2a0ba6eba63c991ffd3e82a66cf9e0e8c433c6 0f2fbff869b0840be2101333c0e343bb16449961833ba2923d0e02aae258 10e46b22cf80797569aaf423c3e3a9fe1852ee6ac244cb68f69455966f8b 58af7e4ac473d65358f2e03c0e03de15b8c036f652a6ab0bc298300418fd 2e28e2f36ee8c8f6ec311c10017080e07f60c4c94f5b3c5aa2bd1fdbc54e 3a555c08c120fba3400fd2b5757b57a7f5491e5d7936403ab23e1b54cd17 e24e344ddff72fbb888e9ded5c5d492a8438efc0a0010137d4067a26c233 a35d0c053060789212ed925c55e4b0df0ececa6091c02fdc00696a85a930 48c10dacd7f25485c0779b193e61fd8f794da299455f2cc4e48742c16e5d e6ffdbd8d709095930150d0ab4682bb5a45f98a8ff709f413df130cd4d53 b47f913508ffa7a3fc7ef91cc3574eb5c9a48364f481cfb49bfbccf942bf 71a58d5ad92cae65bffe573cd6669e2669d210368daafff5666ad0b6f710 05309afcc032f5962d497013b1849b1d4f350bc23761fe83cc85c9055225 8d0593ed7c9e2ab4b083e0a404a0e1fe35bec0974d22dd79aedb537b136a c4d37f8d982ec01d5eaa68cc889dcb72595e193597e11e7b09fc5019810c 4a10fd95b8e17e8369f9310184102d164d5eaeafa822ad00443040327656 b0d2dc6a4d248598971cc475116f51879cb1937a5b2306053ab76c0b64c9 07afb3dc5d913addb1bc34909806803991e1791df09b4a17aeffdb094166 02bbc3a8775179a4a7070b9a7ccbf1dfaf95244b0c7dbee11f2a903ebc38 20f68e89446cfd3fa8ef73a535c7b98251e4b7befa105f6a85f74e0c1947 cc8947ec414b9f28177010b2f5cdf73307ba15d52001c565f254f4882f30 b3573e613d5de4cf8f483bcf7995750b80ddcf8197e69082b871cbee0b9f 2f97356cf3fce8393a0918039980e601e659d5f3a343cae05feac35180b7 a733228b04fe2afab5e9f03dcf0a613edc1081f73b9bfa4ee4f8a603f416 b69eaf9f46187a82f2c5d2185a002d31646150aa9bf8866318b97efd0e4a dd1d974400a8c2d1f9d75f65090558cdd4b537353a986fe3be5a77e57a79 648632c02b482e3650d9206fb54c11ed5b05d822d22700ba5ffc59f769d0 6731c1011d1fbe6793b07b7e1e789fe7c35b58858af09cb63c65afe00688 6974f52e77fdde38d2b4f7db6f55c92321176c816a156c480f3a55717818 db5b5fda5028d6eaaf83614ba82fe5ec9cb3d123370c6fb60203353bfcec 94ad7e4e7cb805d14bb7ca7afba40b1ad37ce87fe666d300f8ebdfc9e0e8 07cd07daf7317ac3171082eb978da0217141d4722204f43d1eacd21c7f17 dcd0e1382439c91eac03b990aa1bdb3b888b4265e7720a2609795ee9a617 9fc32e5248e1411c909004876599b270fb5d25ab835b4e0510adef8e428a 63e89e653f77b478161c03f4b038229a92dedcf609b06b735ea3af215acc 8d2b084ae60d57ac06881ded636317a9b1632bc553af2245c384db00a2b6 089a597fde44d208d1ab0bc3883bd79f6c3df49d307cae69dc6462c398d0 e68ae018473ec5843b87491558374f2e3a7e872ae81e168a07763c9ab9ce 66fabf5154457299416d74edd62a7f77197fd30c70ea809eb3b797b25cf8 f3e37a15c7479907f2dae8d925985eb7cdb7a78ed3eeeeaaf21d9aae7590 7c397012d613f75d47beee3c63cf2fd72a8be6aae95c65d7b63b7af8144f 29974e37922fe535f8ea10c899e3a97c7577c5e1c2198ff17e755189a75a 740ac7a449384cf6a957c2ff6d45365d856a8c34bc6b1dfb0b9753d6a9d9 eaf9e6f85e2bafabfbb7854c063145ec91e9087962438d5227321ad3025f 7f9270933d8b167d25e4f3c70091c357c3b4873beac54d4f9b651ab6c4a1 23a5d28216384f61db9b978823715d7aab2d4dbb3217a9cab717bde45a7c ad56b3e3055ff00c705ffc77f21485abc19bb04027b8424883d72a979c73 fa77b1b1289b99e622c97188ccfed3b75dba77fe6e65ce793e505d4da087 20796a3e09f5d20708d39170ce7e533cfaa7f8486e04f392167ea0a093fe 99b8297c2b1398c6215d4b50925338ba59578c9901655e922e18b4efc4b4 26db28c507333ce4f609c3b8890f6776cd8686b954f03c08e1ff996800ef 0e8f3a6d969b2833ff156f481dbe415fb345b63ffcecd86c86bcb3a4df03 05d317644f49ff1f55670b5efbde62c0d30fc3a98e121f9d594dba137ab4 d6feaf7ac8ee0adfb2b7206ef286d4d7097461726543ff20d3adca462217 99d9cace688f4a5a0ec260031a34114eada87f99cf414ca88406e758b476 00839aebe4412ddfef9ff01bb0a1b8c24d293c6e283faaa13e291b8b22cb 28c70c4bbc384a8536be3ee208f51617657b854d070896a2a6866c0c5af6 ee226c9c0bcd5d85bb6ec3a1a3000b32e0eae0b56fa35628b6d4b68490b6 c7186b34faada48272533de405a733adacd490c5eaadc73290a257428c5c 7ae16e19f8155b55109fb0a0e970e8f16991202e5e1842fcaedd711dca36 1ebf3d1449c0dc1df0c2a8c0ca5b0269ae314fb0b402c291a218b229493b 35f6193ae25dbb665927f97b1928524d666ec33e7f034ba8bfacda7050d2 3d9454dad85ad711b16a0cc14c2f351bedae8e94733fe7eb241e22424f3e 6bd8838b9568705c61dec5de3748d918e8821ff03345ca86aac452c85706 5725aa2510df8a0600caa6c0c98cda6dd5f523b26f17db8da82a00e49d37 6a504d86f7088ff2901299cb6390e8ed62c9a49d021f25d8db8ec0c89440 04642195ee1d1100eecdff7378e6e9896f391a6a5bafb888098610901321 bafe2b31b60a608760094a918195a530e97ceca114a65a7e3da53595072e f81a952592136700078ace186903fd672a67cb7a88335fb557d229ffd038 c697a1aee6f6006266e6bfd3e49a33bf0be5081502e8275b74fb5a9c6eb3 923dd82734d447a5df73fce03697159d8e8ed143e25c62fcce0fc3f01d40 05b7c1df9adbc81a3f255d85276e5e47f7841778ed94396473c2543604ab b28c7dd64f1252d10711bb4c7633eefe7de3db9a8327e8fc7419c96d6c09 6ee542dd6c89eba3941e8a86a42a8acaec9b11e824d115227982c3e12708 4d19cb560e713ede4ded7c9099e10af27730ca63ac1d8d75588710b7e6a2 2539ab706880cf38f36a2c529839f5a5dac486b5e7fca8748e85cd4fe72b 9206782bdaf7b7e1d91f51996ea6a34943cd9f904afec7130de52a499193 4c511fa689364d2dff066e5bee375b7e0101a80b02c5aa368e0ea4fca434 d181eea3439ea6398a72602027f415cac1cfb84731a1095fa1135cb75c4f aee714843f6117ab1e3e688477d8cf9d231844a3b0005e620f9fba3dbc93 8c6eb5e1f06bedaeec978de801fc94b0257c6ac5cd53e064c1913c14dd1c df90eb78c216b0e3c024cf35206e9b5f7b71e1741028ef6a592f833e0df3 afe04e474a02367606acadde30dae4e6470d05eb3358fea023b0abf864ca c75e4bdc38dbf76458a459bf38aefbc3c4c7c2c8b82449bb1576afcace81 194089b9a683bec462623126071b1c44c33644f5b05df59bb059dc31be6f d5217584ed9b17657fa329c08f340df9b60c5be4ea5f2552a8ec029cfb98 63498f4e0987a7259df50d8727a55dc5384be16845474a5fc4e098d506a7 a80475da85836fe4d63af6868efeda1ddf88ad2cc383bb5999631881307c 71108606c8cdc9f8b626961570c232d5760842655fed46d4952a4f1cd68a 2002c32fe639c56634c83d9de7e46403eba401589d741455df6cc61bf4b5 99930ecc63475bbb8c46d476dd085dbd1402d3d9633835b1e1044db52dc4 a31379fda9f7bfa8605504db016a0d4851a6d55a861342f5e639577981e7 322de7913c696053ce877dc4fcef5ac1169a82f5f6fcb6b0a191f89f73c5 716efbd51fbdafe1850eb007cab5326293cccbbc3531e22ec24d9f36d2f5 f0257a53249617f3f44907b70042bd72e7bb36fd9206a0c9e7fa35d01f4d 1653c16298fb2ea00472578737a9ec5352ad1574aa8107a67054fc08f150 3127df54edf74e27a725ba17f5f9c9fa8b15d83e9767c9259c53537e97a1 43df8457aaa084a7f1efb372d9cee21dcfde598067652f40114557db8950 f999b6dc831412cbdfffa08ffa6086a10af54bebe10dcd481fc9414e4042 dfb5a093ef543ae14e2ab4fdfd40c30ed1b40a3468ecc8e194f2284e1df4 9a7351d4d8a7fcb0764dc7d3e780e50544b0d2c13625c2b93803f63aa28d a81c7ea92212fa96cac2f64763e46666ec006f8b0fdbcc6f19c123cb7c91 3b754062fd84122a221338891908e457a1f70ad7920392b60bc28b3c6515 5dd356b1070090c49340bf6efeae03c92e1fb5674866aeb3297ec0220c91 f8bb04bf837077f490fb3e9297f8b60b5be4ac0f42787463b553f2eb0359 dbbee5e317735e3bbfa55b73c6c5e165866fdc13842bd25535d1861df4f7 130e571dfa358601e6a6f870b323f4df9fab195ba9df7e0f8cedebbc3450 eb972ddf293dcbb8dfde3307810ef09c3053a60114d0fa747853fa6d422e 0dc2758f34492e39b8f1450b698e6133cce3d263bbc2a87b58e42f4087d5 88bafa35fff56db4ad47ef207d946270196f649a6e9b657acac1e9029ab5 1d96edba156d16f847845eff4deb668f9cdb7ab724698c51a9eff4bdc3c4 2348e96d5689dc5deaf638c0b240184d666a820f09ec2eb0d5a8a56c3051 4e16795668329f2b14381b3fb7e42e849ba3da19688e475b0ee6cefa43a9 bcd2ffb5f3e3aadd6c477ac39efef1d211dbc33949f7fbc9f28bbeeeb764 8552f438c7cc63e4013d54a90c8139eb5b157865bb72c0b9e91acfe2e1c2 cc9674a5c339f88c1aeceeaa78dc83c282022a917015832c9ace7f207c00 1d80379bf9920503de588890b6a017e5da8af3e9e79a7fb0ac4378f4fda4 6d0e7d339b7c6521b3bc4ebe41ef5f93673f8714ee43bc5b5de91b6e3d60 9ad334727a8005bf075149061a1854d1f193f1bb9523e3a61d147af4f886 9cad028b9358f19bfe36e6e71ff44c1abd63cb466071bf799d61349b24a7 3cd24929a975a301328ceb254ad51963a81f30990743e00580126c5c9104 3e5ecdb76a4b8ea6284184dc8d7b3e5208cd7b6957872d152aa67c55054d 63ca8089498c834f0c6055a183387cfcac534daadfd0586e9312b0b3937e d1c9a61c96cf576aa41b2c1f3289651fb8ce3ca3f5d017766a0cd3d9deaf 8df675a69ec77165d62087556f60fb17912927377c4c7f69ad0d13b7c2d2 2a3e3187bf1948fb7d06ba541126966dea8401292861d2e45c703c3d38d2 a06f8890e64cbbe176024aa68d9fc431165911ecd2de108cece49818ecf8 9ffd32c76fe711ea3fd834350d568f4ccb6ea396fbd70b617a882f25c1b5 f4137849a3748955e0e825aeda6011155f3b8b4036096c2694dbbaf882f8 deb040944f0334edd6ef0fde989538a7d7a06209d209f79ceb09be51424c d0b38b9eeaff2c4962dd6af3fbe890c7f46f977d7a7a0801d2127cd03d04 76e56a231d9d40727121dd5fac6fad2b71ad34f0ee44c088f5e1d7ec3f62 0f2f52517a8b223e083f97a6c80b6ff7424473bbfea5548e17062f26425e dfdb5eb327a16e6048fca43fa6a3b57f6281b2a12efedfbe4e94f4c8d8b1 7bf0c37a6bfbe13250260dc8abfa80b0749a09f2ee7f660717e05d7acf69 69007d8c9f53b074611a94109249efc986d556c5e31e48e7011ea34a5287 2dfc66d585ae313c630a2a84b93293f69ff3ff06980743e9a32e6a3b3f11 127e2996ec6bb90e5d6f00464083be85e5393b576c16abbad4978b5fe9cb 0cd796e886345b25012a0415983ab0de7fb0265edd8fdab66b9fa072b45a e1992cd12c1db5e3d6a68e548227cfc5056aa4a26ff09f63277bfb37a4bf fa826d18b6a0ffc21db55786766737ba99e20b916d37e810b2c4a52e280f db9ce27348b9460926f59d8f5bd9c4f024e726510970dadded8b4b8c4a8b b18f34ec8f4d7433e6c6aecaddd4c23126df0d8341a54deae9f3322a582d f6a0425f3cf416ab104f8d3f764923c78b7cec0bfddedbc86ed3ab022034 b4e8799e769367dd6b44b81382b01f765b725475a97ee58e3bc6f00d546d 63fd390406764a7faa8202401abe74d85ae635982ad00477d490c59b2648 76312003a1c61857bbb9cd6ab149ebaf718b40360e47a4a0ecd6ca564835 a8f572fac37cafa870d394d635cb0e5a264e6a4d3b38558c621b254bdf33 ab748213b21fecc099e583260ccbfbaed4b7f00e2a883431fda8cf0781c0 36f998263dd3d9770e517d75c61ebb1ed4fcb1904369f31423bb4e5dcd01 0dd5a1c8cd4354686f921ce845b98f903e8035a95e6a200b262eca94cc61 a5264fa5bda951a8aa5ab7448e363c37a0fe1a1481dc983f3392b83650bb f50bd8e96f7e1fc6e39b91e4e35c17c23a0ffaa5f9b8d22b5c77994d9202 f94a84a92b6aa1d63abf40fb62dc6bc225425386007516b95d8cf2b6c99c b80086380d491b49393bf06e809b6b8a57ec8b226d4c07ee0bf34cbaa35c e394060e833dbd3e7b8932dccb28da486a59eb9b7915e6561d4256e0b088 7b0375971422a7b4808e2fb859be6edb7cbbd35cad5d98ffe517d05f6a25 b92661816fcf6cdc988e514803a43634d3b2b1835f12465f18be2e38b26c 28d3d8c5f828493c50f0448e29cc82c2e58989526d7ae5d2de1a12ae2e64 693d1487e0135deb93e41ce26d5cb89b4241e34d6b2bd3b72ce9a3691e9b bcfed93b8625fefb32152f02f7727c9c9338cce74a830dbb837113b21fa6 ef1c61e4d18d969b4770dc01a50009217270c888ff3ccaa94bd29a908762 6c40d17399be568eed4311da10282b875b5334be9cba953160eae6899672 69583b69055a3320172dc627587034675721a7bf546427bb8c0c787bbde8 92b4f179d1514f49d54a45ae6d37ab05e7f35fcc4ac84d9100f9396ff282 60ad68d8965fbd5198b78545a1aa4e33efab3eea196de3b61ae48d1a3232 b163b0465611307a7eddb355a46e3fc2d25c98310446944a6a7ee4d358f3 e38646fe8b3a640db737d0248c564cc75c0e4d7ec1c723b330643ee9cb29 729a08a9b33694954941c9feaf4bef97f88206bc6b7dd808c538960fe6b9 8ae9cf5ab32c9bda1a12dabe705ec1d4515fa048047c0b264479109aba51 5993c73ed30e00154a4d1503eb7237f78ccd3e3e57052444394ed9ae98f4 b1e391df36941e563d5d492495f8c7249a24c2429f7db1c4a431b4a2b1e8 dcbe28457ce7b414245e3a177a170c87ae12adcf96f4757d115b16cb0fd7 88c77a1f9fb3686bdbc927051c4678f83e8dc3b96468c5a8ca83a46c7be6 2663bbad179dbdc55ba0be6dc1de5735a0d026103094ba57c155019e3b86 a260fc7b3fc2a0adada5b9fb56029a282357f5cfd4cee02b31ac601b573c 457f4768c182e7688a66a8a0ba05edac2dbdf4fcc88fd61f95aca333683d cb9df793b80d5ae280820c42c6309b239be4d877335140130bc6c72db0c3 e6de3c94f462d1cf7d9d2f1df28b93d4fe7a92e14ba3429bdf0e8a4338a6 582dd26522aa5c729b52e686a720f3a2880b5671c626bd0ea0aee1c117ea 3e3764dd05feb40234c7f2b95ec801cfb63aa35b6551421de7713b1aef47 06d246521007ee358199e77f3fd39238f81fe6880f3544d1c8a7973b43dc 220d1952a290aed70ff330007889a222a8308575c502a2a229b0692b69b2 f6b1785cbca28f1bab88f89660c1c466aba3ec761ff61de205e095c6444e e95d02f445e09657991ad181d1325b248e0c3c69ccd3a89fb16420f6f968 b2f6aeb82994277b95abf09791fba8cc559de2fb78feae6401ce3d03c968 3b22c4837a580f06b1f35be1a2c3b9802e36907bfdccc2d9a8cff3c8fe48 b040d71a5500dbd3f48215950b434eb91af8ed0440c28561aa8e39cae6cc 1c23761820b1514299b0e0184e943c606aae3d6c66d3306fc8ce658b4461 23c7599409907369db32021e6713fa887d8f94dd50a86fa74adac8b5d3af 085093c7d416277bc9068b448dc19107cf83892618ca5455da9c0fd04027 e299e5ccb93c56d7b2d5d951626c621a8400038890fb211939da3dfd20a4 2761f5fc4429a3f801534d3553fcd2673626872c1bdfced9b6b1df486dcb a6638707d6e5f1308a6385541ea53e2cf40bf259ee36249f3a32b8649644 79a2aa2792b55b81b70506422e847e5063660ff5b15bc19e64274967508a b5353b6428ab17bac7fee212d321c9c6de3fe8a34749018e5f57f19503cd d1e0e54e7d0aa3c8f8fe235f473e343828ed33514ff11b6d6e5fd84cae88 e168d0c1126dad6409c098ad4b106289cb5e3968f5d3da4b13285b749b81 2a1b5724a43337b9f6cdfc7d1a9881fe70dcdbcbb1cded41aa15248a9c37 3e2c22bf57006ed558bfe985d533f45e58ed1884f347f4c3b24d159c49cf 8a491353aae81d00f94ec899f2c6390352831f84b52606ffdf14a2301832 fdb117ccdda22af5288ef1cf9295bb77ff54f014cc8107cac278bacd1ed4 a984ecb96f0230c533fc487415bd3b8a50b6299afecf242a747a92081b7f aedcec3eb384789ca10dff04ba9934b6f87e4f06905b1341a6ae0281a3a6 4598448f7a1dc7ddf6308653f6497ab133e3aa8510005513cd9bb5ad5c5c 1708d4a2f484375b60303a9f284a4337c2efaa037660b5f2bd61a5ab20c8 2bb582ce902afc34577eb882bb91dbfad6fdbce51275aa63569526b53bd2 ff81bbfed338e74848f6144a6a471491542a69f48d70fb98c3ed8342f0ea 7fee57fcea6c646cad118811e3e27245ca83aa92ada506b9de4d054f3b07 8793997d5b8041a9995d0d8a2a636018618b9f06f57e80956d013fb0402e f2691759accbfdb17ea584ba57c550f78b9c308137876d461b36569cd507 130e8f0f94fe32b0e4e122920c1eaf7964bc3106a316e24e0f1108543773 ee3373b473767a4a90ec313502c53b4c199019b13507bfe4ba32b4a854ae bf84c87aeba8c81d21a36fa3e311f969f9ad09431d7ab84f535aed674a1c f05c477475aacd43ac1ab7ea13c48a3b247b18e2f8d82ca297e13f1b6341 a8b9faabfbdc68c6eb5da22d72387cebe06165c63abe0fd9cc92b76acbb7 787fa3ec0f7641b878bd76ebd2782c93ebab525148d83ee93b1c734bc2b9 4b5137eb1f595e6a4ea5129e519a495431260d42acbc62510fe05bddfa9a d5dfb3606301ae6d7fcb2b572b8e567e246fff658abce1c2859c1ae56c42 24fb535fb1756c71c9b5ef77e9825fcc7e8315f5cf21f11e38a520a02240 f9ba2c3549027e56f553a8767217bef204910742c7c7c4c75f95efa3780f bacafb41c09b0211054103eedacbdc40ebb942b3ae2bd3d9260f1ddbab91 6e638fd108e286a053b3c463a4e459552447458d9219e0987937a9402003 15dd90dd1fd3a988f2e08cc1412835d3d462a71fdef54a4fda08207a5968 97853696284cf90d1ea794b65618c3a4c510fe954590a06ed515bb7e70ae 6c4d1aed393cf1744e2bc149cdaebd9c4b3a13d67a66af0dd0536465f067 75704c73adc9fb2d3b88debf44e4028b867ff55d532adf33dd5767b4eeb6 8901c4aa471269a218a1cb03fcb9456e9a507e5760982892e452d4a623ae 7c8bdc081e46e8c666ed8073f0ac827968a25d1a5a8fb6ae064be1e2b8fd 88be2540651521d4e60c3ce240eef192faea9e3852296669f977d092d74e 6ebf219321c90bc4b497be458d2f9aba039573f37261df4c9ee8fcd9ba47 1305a2a9cedae67374bef91f5d948e2bd1bf675876f78a6b998f32e90624 0ec3ae236f0b621ad622119dda900ab4e7dbd96a6d0cbaa1e5653fc695ac 3356573f3cc7d44afe2bb6c3c8a4834b79e44391413f42ff0f39bf1e0cf3 9299b5dd80203e4f8513934bea6ffc8106f65e7b7828303d3ed935135364 3777520c6a20fef58e18bfe544d06131d34bb1d0b85eb75965ceb71efb8b f1034fcd47d90f238ae1dd889be84233cc53ff48b827d57fa0d2ad3383c1 cd52a0d971c47e80267447ed241ccb346e8a48466d60aeb862303353d30b d63ce965753d5dcd0207f16a224f65805580f4ebff87b988fcece20d411b 2318ce87ba7ae74ae7466270bb544f86f1070637cd45fd30a27031ce4257 5a8e58ff7be95d6f44d70bb76f49156f1cda09123a1559cfc4c5ce0dc697 04185ed756596d8b26ded83a3e18a414a132a75a251a58c62f30226a7a64 c9bf30ad7e7201587d17e43d5c6e6640c5c7968d3cab013035f0f3551e80 67bab561667ce8cd280b84b7d607ff0e50046afbfe9846eba6c118972cc3 c1b92d5011f6b11ef0d1e85baeb6371e623dd8dd85e65c6a456dee6f48f0 85ef2927a8b3c4304e3ae8be2d32c2329f9a50d8b589e95759675fbba884 184782a0f73ba0cf85d4e0f9204c1e9d9bb337abec344deeacc8ed51d93a 855b631b0df3d0f07789ac0b0dc439418b8ef30c58364a99f764420c7e31 7e8c0827cb301b4b4d9225d0704ed13ff4aa816949f84552309eb21923f7 26f6ea2d28c176600cd6ef24c42996e30b6d9eb33d1e774b673ed8c59699 8e9792fa6c531e5a9cb2cbf8a5fc3b09b4df271d62fe8c1ece1ac0a1d5b1 0cb19d203d21b5c993592f2828ad8a4b199ec6d8916bfb6bb517b593ae02 c2f75fd4f3d76c0d9b86a70095f2907b020cd828075ef8869033fc9dcf14 3af0f5fd21377377d9e3e361043e6f4b2d6acfdd405c41d9bdc26b450303 f4a4fe7900eac6339253086b474cd849288236b1feb6ef4d970573ad69c9 c82d97150768b008ec3940f696ac6507cff8a8a59fdbce82f4d4697b05e7 2b817bd5669fa8bf01ec9f7506265469e57bd0a454a54e7b3774e28bab59 5d81c32c048e660e744a5bdbf4000f6ddb0aeb76785cc35f36189466dec0 cf01c68e1d5835d0b7b7fb5e02e4dfe5d62d3d4a9391e919a6b753c3d90a e71d4a7efe66cab6fffdca92f7c422ae38dae2c9312fe2fc74123aa9e42f d7021e940f4aaba9d15ffaa386243f3b9a0222ff1486f98c9ce305b4a839 943c92a631cbc5f47f939e320968e711f2e8b62b682a03e6f08829800a3b 1722a1f95c2425df8142a89c76afd7592d7e7547bc5b6d77b2b3ca9cd17f 671575fb3390677540dd767bcd343b302e452df556902364e7ccc7c8039b 70791ba2b0daaf3e66edcd2d5b2b10686599b0b2aafa9e5b8ab706a3123c 2b0cd41bd20072bd8d7ecf9d5ff0c9f8c887a79c02dcddda0bb1a25f53d5 88014bcff4a793a6a2f83918b22c57548eaa967d3c2984a37adf52bfdb49 6b2a98bd3806682409e628480ad31e45ba8810acc6977700771dd0729a56 a9a7f9a829974772c34b246c62e2d361b22829dcab0484756a115725a057 793fb36b05bc15235638e06eeac9258c3559f404c3092c30644374bc2e0e f109b6a89629c7af6d5bb4d5f73b2f578a629c5b95854d7b942d779c1c25 1b6728739b8a82424b0b4ece2353938e8eea1e459ee8cc549e5e3244a345 30a98820259a0d356d48357c358edac1a36c05d057a596a6712cd45b2007 15135955fd37ae52a6f8bc86aa95d93088b8a3d34d223df6e882f42f9e2b 631b59b11c4dde8a6df5ac06e6802ddf904d846a1f5bcb9663f7d7d6c1f3 7814d1903d5c500975b7e4b469ca8196b034bae22dfac47afd28ad8a0ff3 fe1d6924e6a44884dac899e030324d0b58082e938bb7ea1f5bc2869b8f12 57933c4a46374a49a2a37d6fefad4d554869e63858132d6543a8c74f13c8 19898ffefccf0b49090181cdf72b1da575ac41218ae9f7fbe6cd8f374eb7 e723bc16d8a1a6b5fc4f83a13569233b7e735477bdaf216950cca8bff03a b6c766aadab26dd1b2814a02476af5cf4817f187b084d8bb43def8a78d21 1e1c8ff663a509fb5c184ccbe1791e553c5814d2a62113048579624d3a1f a84daa2b06cb45b888554adb01f522ba04e519ca31b1a9f6c80b13569ca4 f32c5d52b15f96211925e1b211e90d829965d75274bb512b2bccab53b383 5bf7d0c0812add921b019b6f9a7386ecb44e360cd501db77472cabdcd761 7ce292683ee7a267077ab09d41e012b0f0f6b0d88bf7a998ee3ce358af3f baf34f6e268ce4e1221da756234d4bc7feac281f7e47b852369d84109a58 68b21e2a8693b9cf27151a1916116053e12807e5b72a7bdd123735fd52ca a482610a6045d8f82472891f263533c656a05bbd26d41ccf5bb964808522 2f8569f5aae053fb4738dfc03c26e46e3c9a8ba78ed0e309f88f4b55ce50 ce875e13c97d62aa2cef6d46b8c8c56e02b14ac38b4eab34bc8bac5f1f7c 963cfc17167f4eb7c680cf51d3a5fbf0a0e1b0bf5c723016272d7ea3bf9f 91a2ef6be6227652b2f7c9e932bcd66d59d431839063d99dd0870d93cb7d 685b6f470d26bee9cece2fe498694621375e95f3488ea724ab2f3d895d21 238c5c06e6e8d308b9fb0f145c1a66afef7bcc00bf38d33d4ea302ef25ae 8c4a0be2cd99da8a88badc55fb9b4a0115a3069ddf1e72c1089363d91610 2ad2c09ed31d13ec9dc54bbd25eef884ff08b5596eabf1b94b505e2acfe3 be4a4a473cd31ebe4df89c303ac79d83e6d3ea045cb3827bc0dce0b3b84e 21b6ca6327b10338d8bfac7d2d433c255ce6d12d6df15f6ef5ef8ba1adf4 3d4d6ca7dc9892040b7770d93b672ae7002f3291a4f83a56d38bbac6ae69 e43a3f40a36290d585e3d5e3769242c171c686484d50e389cabbd88cbe4d ffd787d127b1674dd40b46cc7251ba7a76344bbefee80bb9a0d28ae8369f 9dbfb3a78024238df6795118ef4d10b5b28c084ebe41e697d6d6b183f175 2c923114b845cb9ad5623346a244efbed38e4b8967a0b25a9d29c95e507b d27bfb5ae62d9a4406816fcc0e94f9263789a4a98195be810765c358e26c 2277016ee6c32c9d7cba0af08eb5bc84af151069200f1e6ec29a5a6f3a51 5fe7242767d1ed8355dfb466f0ff440f892fd2d120d8dabff46fc395979e 34ebc110816c6326ed7c14e1cd8e80280a4f1f935e55b978e266d00ea507 797ee5f33c863621cb66a2dedf7648c1a59260e82ee776c3f85594fab5c3 e280938872203f35f12e27b94e66bd20e25603929b0c21ac7c2fab2b0382 f429613bd0ccc48015f16ffe8af8ca10ef54a247e7dc86a6577311aefa0a 1fe350e7adae7e2194fa1305358bbedd351f2e6406e8dec90cdb41f084a5 4b0140b4135e3d128fe5a9c4b3f0666fb5f02ef014a53912c29d4d0c2157 65ea27f3b4063fcb1094ccab9f99b20d9ea0dcec7dfaaad781c65aa6066a 2e4e2705362a60d83ceff05feefabc0bfdf7b7842a752b8761bff3ce914d 544cb826dade7ffbfd90aa263517bce0d247248d039a35fe30face0c07e5 5fe095064de92d56547e6d45c83f29f55c8940e5d4801b1b5d33cbe59159 c37e69d4330668f68b87b80aeb9bcf0db3cacd8f96be53ec6d0042607da9 24ffba123079fc7c0deebac56d38ae8c1e5e7b9f93ea7955d581f60e931e 7e0183741e56498ca3b3ef988c0e5abad734773980408a6ee7a9e8287764 72d17395d417fd75a6287f36f7fbfc4708a992c87f050ca2c7842fcaed2e 37e3553fedbb0bbe867f6ea27acb63103c4947ceadc086cdd7998f38924f 1be731fac3667acf3d8455d1bc4abd711d8b62714a4453f511870b2cf5bb a31c74780ed44d117e1c942f9e7a4ca9784ec2bfdef29f123239ffadde75 1ef339835358ee009893e453958f5036492970994bd9b7abcc24cf0d3bac b902ad4c56b222402986cc9db4b9a486502910dea3d30d62b560a20818c5 8a1ae41f88fa357a2e48cd70d331c89f4d1cfb5ce825be467b5500487567 30a510968920d4eea719ca4cbfee1800d2c5f6829cb3cf180684a9f66a68 7d55934cf43ffbdfb76d633144929903594cb54d58739f0c7896cf6dfd79 a2df31f44b216b0a7c6b892ccfef37c12c1f21ebce6d38ba7168b894bf17 06a8e6a3c09df624f74cb17e075c7abdbeed94485dabaaa96dfc096bfb11 0be9567d097fc482c5ad8f059f0722909a3a64edf462f34ef8740028b95f 7edd45c13f41060fec44e3fa4953e731a401c8f0819978042ebb09e9f830 3bd3553373c3128b064ee2bf2f13f7e08b901c1fbae09a38c0a660a0e705 ab881b3ccc257dbc590b699f4a05407d5aa1b6e52138fb7cb3d42bc8c38d 00dbcf8236a835ac0b347641f11c0ea705f6c0d5e0dd05fd75725bedf771 76ac31ca827df5822344dd329ff4aabe8219e2cea447cf8e811199eba7fb 390113a43c917ec1fcc321f6733f7d9cd1650fe8c00090ae553e3c9a5021 8ad8a1267896a4831e69b3041cfeccc76858179ef8d24386f6fdf3558534 86c99ce06b221acf7ce8507767e2f9ac5d0f508865413ab4069c3bb11123 33734f6befeb7d50689070b5d05448eec27a3cdfcb3b9897d206fa88a535 5f305721e1c3f3a772456f745fe6e55719872e8700bcb39951e6835c7735 2e08f531c7135f59839dbe7b7ceca65a8680bba243a9a0b72d12914b9b44 3ca1c0650098cd2b8f13faeaf33727bfd86d3d0145e1e2f5e278c1b8cdc1 02a94856e60a1966df388e219f054b5d11b11163d9f2bb715e6e5e72c8cd e6d571b43d15dc45abee9a4ee0e5a52cc070d26a84ea59ad45b2a73dbf3f 3eedcbabc0e12071ff081cffea66c65e1ab7a2729df32b76df44459ae098 9e9c36fc6f0f734bc85a4383f380c770ada26edd7517541ed04697d37f4d 8591e5f78510c5e0e298a419e44cfed0c1f0d635d925ed2edc4e12816fae ab87998ffca04f85b85c08d06d27c36cb939a14455871393d9057d67a340 01671c74796af289db1a6cd90b129a5aa3cd6870ed3d88922bc463b38fc9 580ab56f33e6b5890b75c983baaef6e8923c2586678dfd41c9d8664101b8 22236f93a04bd5cc3b320ee360657a5884e15f07cb9b268c967477803823 f96766893c2c2a5bb87bf11cb4769d6658d45cdba299d4a6039bbf027e6c b0a3489ad3474552e5a2fd20da2ddafde55927ddb087abd1d727e5117801 4c9836962ae22d0ab234305196f2102b7e1e1c4a5e8e382777d5bc42e977 0ec24fca8e5fcd4bc747525f7fa391de53b294376ed3d26dc7d41a4abb12 dd70e049f995f612c240c8f017e671b47a859d395f402932898ecf8be33c 4b58f81c2bc5fd7e0c6aadfc300bc68002b7f1d00322a28f3c68bd346e6c 5dea709b36d7f8635921cbeac0402eebb36a92fd29066f35065a82cb95fd 46180c5199165b88d48e1e77b97fc8946efa99333a3909c8afeb2681f6c5 0b781a4c845788b9acebf45de8c334b651d429ce7c740b924df54a457d40 ece8b2a4be096d4eb35a42b720761eb0d5233c3b096b181ecaab751415c0 28137637da11fa3c5d732fd312da4e2edcae33e9fb9c3f026151c536672f 11b220a19a03df800f34d3abc7bb2835733e8cd214b0089a204e2313e131 35bf6c0bc2a256ff89c8c27090565de65fe7093be7989e53112c03280bc2 75507666527c387a5bed501f1fa769cd44443e35505581c9a3c08d2f8daf 4fa3f4cfba1357d8e49ff82314ef3abad4d97775d91eb48cef51c14ca31e d946d96c4a3eaa39c5c7a3fcd0914d9b3b5c1275bd724fa32c1708c21f5d b2ba7b312d6fa2f33d7090d33196bd9475c58b4a73db13dfe24654a1f1c7 b35eb5e1e3a370461a979c0ad56276ab2e5470f0658839fe0cec3366956e e9e0b5726cb68db2399ce16e2d57f8dfdb4a6f5e49ebe28bd363b97a0863 09b4964a5033b6d78235700b1ac4fb8b210e64737a6cea4d58d4cba287eb 65db38f78c5ada00ebaa35b40e92fca825eed5635216cd72e90324606873 d0ae48ecc22068468aec18d647a6da9de18fd07c0920982cd3014fa44687 a5ae3605864e2bfe23e3561eca3d97564381b84546b0add840db4f92c68f 66f53329fd55bd9aa76a0bbdb290f4d6d270406edb56494e4632ba4d7018 0b210edf5936c987200afd7c7dcbc036539b8ea2461336c0312764b0557d cd4b56159131a2dd352d3664a4ed34036e0bc4cfc0ffdbf28c0bd8c2468f 3bec5a4a2179b89ce011c69c451f80c3bfb70f631d7e24de7cabd7824b66 8c76863794c44ab7cc9d224d2b27787a3451d04cd1d761a20205e725588f f3f133616efd3f8543c731cd671831d88d8c3f730a2fee3a29dd04774d80 bc4ba885d360f79da220f97103da0c2302f7e2f38ca2db9faea4885a3974 b3c65dd918fc1e6812e56b83fe8bdb1cbbc88bfd76ca382f1041168253bd b7f062352540e1d8388a2cd727450e8d583825fd3d1870f1da04302fd0c2 4ff024142d289f5c8883086dd4134d5f2287947d80de20534f625972f318 40b5a53af4e0f7e7d4660df8d050d5a7d076995e6474b9849cb3aac240d0 b54a2568bb58cbc8e07843d35540f387f88b4836eaf8288fb03474deac4a db7ff6b7c3f1a714a5053a84354854e5c00b9afe095fdf5ccdf91431645b 3a9cf01393723a77c02b070eccd28d897b9d75d0c322a9924b1b6f8a21fe c38774b5f194aad07d81c6f368a8abc12cce9ab060c656b527aa9799b363 f032521d10bbe3da1d811e300f5232a7ef228dd09d956e304096b603b678 dc241a12dd6868226fe4ad9771689ab97851e7acc5a2cf3d412327d8f52b 698d539c111de0e25658d2fb86a45be9eb2bad85e0689294a615856e2205 fa2f949672ddc387132eb85413617b5269314ce3c0f3a18e54817f7b0ab4 b6253bfbaa4a1671693c220a6ff2ecbffc9d5c4b048ccdf4957541643234 a86d56648c02b9bf2b64382385bf43d089abf1aeaa5cfd9bd946c3e1619c 7f57de41659f88212fb3095b94f2d6d6c5ba13c560519df69555c9b7126c 6ff45c61ba467c29cdf3cea6e910aa5e161a4afaf60d3925d01de96af096 94fd5970375891d35abf6429089b9d81693b70e98c18015ae9cd03fd467b dea6bc09dce22161ed976b3da2a80cf04a83c50360d6a2200022c06d9998 9ada2e2705be9dc5a6ce3201e2d226a0edae502ef272eddb88cf7fb3f291 16c559eef8405e770564554502852745d3d48b1ad7c34debf5f190fd02bc ac796c2be38017726920604b1984ecb320442818797fa14003118df21f99 abc9de4ffdfd3fa6bacc4558ce63e189cdb805775bf24c8f6fe5b62c13de bc8d08ecc64e0459d854da7de0fb3c6479e9681b141b94e48c3c8603faaf ec08c9c6b3997ed043250c4d8019efad1a676f1ec5ce942ac813aeef3795 c69de57714f72a90da22e3dbf1f7311adc48bd1ae8dc3d37aeb5652093ca befedc166c1d27b1dc0dd24e73ee08de04b5c9ba8030cfd294833314dcef ab3343b33ee74fe72673bc921254f9e1d8b1396e8298891a23e3d475cf4a ab97ed794558789c544e849b01a3a174e78f21f37ecc1de241ad327b5bcd cac1ea995b9f08de78a282cccb2cbfca7c0098265edd8dcf56035ac0646e 771138b95318a5efdc202c90683a9361bcabac02871f1e6760888e1460bf ec1a8e9c9d63ba765274d4f5026a8b0b3dad68bdf9115ba8bb22d048fe8b aa60e986f77c262c92290de8e466f8b19a501d4b5aee1ab37b28e4d277e1 2829bc464649758262885045b209b1fee74aafe143f02ce5f37f4fba6fe6 b1342327e88fbc1bc0b493b4e1a326549c948b6fb8c43e80bd8c1060509b f570799cd603209a4cb3420e807f7b2762e21d98aab1bd63e88152180f0d b9e4fde5c3659614a13c09b5e13cdb782cdd5e32a0ddf309482c78271c62 97ee797c6e19a58e3e50e01c9f4a1849bf0ceeeae91f648bb0607c4b7d10 a12937eae49c2299df39bb1092c6dddcdea4a585256ba5739bc177b411eb 236af3eb6c3012837dc9ef2d83ed27f6bed06697508fc3add6a46e97461a ff7592666d91304a4a525f2094a7832400a87b21b12962f063a92a6c8cfe 5d7a22ab680dfcaf3a6e4c2211cfe271fd532c50d20f2479c5f0e47173ec 8c72da8eaa963e6b59b0ebb49c4d1f572c6f431965b9e2217ac1c24cd2bf d8140ae17de96263a679900b6d8b222c6ebb93d102ab3543c5c503d13677 23c1e03e818f615b5066b582765b060386bfc322e1d7ce397a405b5013e3 47cb1342d138e65cd5a9033974d03ec3755f7ac092c59f32ca3e6bcf4d2c a9da21009c905b6fd2d2d1e89bc840ab025d0350512e03cfb0e93822a49b 38c082afc534100b70ba2097ff128e0fa5b25d6769f162eda8ae80a42822 aa025b6ad36d1a63b952eedad08dfa536dbab176b8b7d4dcd0ceb87da469 1664e373b5c24bc2b222e7e9cae2bbc4d231eb5e7dd87a12632c5b6f8ed0 31372c52d22ffaf2c5fe17caede01b652c860924ec856144efa8d194ed13 d22ed02f21e36213dfdaf0509fbc9667121be4530c9f681a1ca5e74be0b6 c4c0c863966f9f2d7534744b6b9558078dbe76729d6943714bf86d8b9d4c 11f94aa6f8f1a36605286d62957ff1eb7ec532f381aae16c9a1b2f8eaac3 28b2c5e4f8a9528a8f24c77726b8c20c7b2e4daa4dc0a6cd901b558b070a 57618490edeaad367483373bf897c3460d4bda4d884003c562738736ab1b f914f2cbb58922f050f65a0ded96d342819cace6195f4c93250176b51451 be03def3fa5318dbdebf5db5e11016f0b271a006467526dc688ecdda8821 1134488b251723a642ed73d6a9106a7750beeb0308e10d4abc218be2308e 6089b05a1127f81cc304962336f38ba173f805e848c940736e16fa82ac0a 69ac37fc0be24d39aed4dbf9c7b08fb942d96b8ccb3961f426761f41de2c a4e8ebe039ec641c9d2c19c7739af1a34f1f2ac15880886ae65a10f482de 121a580dc8305b3b8ddbb834f1ba6d0136445cf7670ee01b6901e3da11dd a675b31c09962f178345d225d01c910699d6fdf07c30b76e7e3a7eec6583 32283e058cca83cc74e2af6cd1b55bb3eb889c3bec30ed0b989a29924a52 22b9b1099eab1f75da7ff5c6a9bc54cd625ce0a4b16e962897497d0e24c0 0b58024f263a7e9748ed1e4d3f27030595a4ea3af3b7d3a706d5817ca8fb bd200b90a3f035060e49adb80c35592d419f4ba33b01a22f873d19ea2274 2e8d1c7f73592ac142c78ede657aa58c1f8e76ceea5a038ae383b8eaf990 5cf57fe321da19052af965f2f20934ca0699c4fcdf1f650d75b215f5a44c 1e05f2698b55e5d0c7923869ce9b68c8a264b5adc138deaf45c2a27c73ea 4c06c32db39f39e44eb4b7efb76b90c4191949cc11e1959abbf21756c217 65470d58618aedf343393d713204de9270536f100944681fc03a844b2ed8 4f1685f67f81394a35a2c65d76814b0f352caee12680e32f0b86de652450 1fc5bb4a110eaa49add692cba0a1d4f64b6861f8e88ae14e133c58d716d2 9e8f69e86a77897b208bc55a2894f70d245e0746642a4c68cbd1e81ded4b c4aa729a8d74930b4230cfcbb08a80812c2ad09aa2f9f7a71f47a495004f fac7580463227d53ff9757b5b9cfe2a3f20859d97ed690bda43c15d59dad 9fc8df7f2b4151630c5ebf40020c5124d31d4b2fe4a9078130ef57e1372b 16c6a7ff21b688a6909bbc1fb1cc0e555094438fa4b84ec53a5f7c9a7815 3c215eb672d7d17fcfa5b49cd7842b4bd5ffa49e880687857e3591a9a189 d1f6c1d0a3004e3dee09613df2d7ef26ad4640b57a1755886d3960762130 233093aafa54ffa5ba8c81ea2207f64d4f070d2055590cda7d2afdd5bd17 73bc54de2e56474ec7ad1cea263756d275db7f2acfc39ea8496931dc5a2c 687579959dfa8c3e9a7bcedd4c883e32d35b056d4476db5990bcd8e673fe 737da6e1cefe2b9e6f67c15141213aa3d81c1303fc4c4315770c14e9a12c 0520b52ab24cd315bc351e05f170f52c8f347ff9cb7d2edd77f0f4cf50cf fb84632a73627afb04cfddc11b74492f29ca6141866f9c08741b589ea02c 5504077ee2c6efd0b5a0814a853fa956df10d1be66772743e1ed8d60220d 48826b2cfb65bf35febad3954f3078ef06f3691d07c56184be07fa192952 f322cc455711c09dcd5c3fab7e2ee21a21704f739ca1a44ab7fa83606f43 ccb618ca72a185108b916b4e69b949900a654a8c311d3b3c8fe030ffbf11 abce1b8a86bc379832ca18a36a0dc961361dcf61a596375c264a8b37f069 c08a50fa879ad2fe472abfc9cce57e9b14e315703af3094914f0bd76ba2a b44694e474a927d3fd9bbf5b2ea28f34ebb366a50e0531e9285ac3dac97b 0a7b40bd3b511a5589f8e2f2b38451f65a2d26aa4ea24be633bb96d8fa0e 198fa27cec778ba68ef2b39d80689c25bd44cd3da6fdd58c7a8b2205379b a584ab116a7e18d709b55eeccfa5dd004a725d9eecb57af121e4695e8ef6 b5c6f115d787addafd643c9afed6747befbc4bf6eb975472e90a88dad99c 610ff4a29e9f10bb3e31fe51722aac41b5abf2dc3222b1b4740222323b0a 175a5b4ba0a50464fb9700307d6ddc5f898f5bf30dbceec0ef18a11ca795 99030728b32ffccb03dd7296c27c18cc04077225c5e7aa0f15dfb83b2034 049614f424f3fb483599d8a80a0107767be7a0ea37fe84ab38f5864b176a e297116d7bff350ef087bb19ea66b31d2a82781818ab68b3467a50c051a3 fd143801e4684431f325f0e2ae40c39612f7ad911a35adecce0654389d3b cd2997ff95a34762411a72165c094415358ca9bafb2f338407be1d791e6b 71757556a44d744bb53a265f187d5156da61d5428a53996453b8cdf3392a 7e89a301d1c037389755e7d89a80e29ad7a00c83d4a24bfd22865b0695eb f75387380995474498cbaa0e68438f41eea95d77f6614e28c64cb040096b ca3c448721dbfe68cedde09a8a9b38609edc28ddb6c33af42234d9ef5804 64f150e29f833eabadfd9a9b64a17000f20e1aad16cf0dfbcbf50483c28e 13130ce2f4e8797777001f02a3df54be0afc94762e8e3193b884a3ed95ce daa22d8032b98a80e2759686835cef28e525104d1aa7e7d0850401176cb6 93426e40369d392a7140c0a4740f5c58d7e5098fb21ec5612536321ef057 51a513eb07de7c8b9a668e4ad2b34039b847cb2593c5c866c719a1184bf3 0f979e317e62fb4bd6e6f335f2f27c4b8dfde99f4c90ef8b75e29e4052db 0fcd5cc7b64c9854c9246340b5de6fd9b6d7cd1c8b082e81ee08e8093c14 dfd45c470bf7875a7452b25f6d86a806ef453d606cb46fa63d9456f99a17 ab6d98a4c32b07b3b96f10feafc997a1271b54ab49430bdab5871bac734f 45d3cca51f52429e53934a76f3c41609da9c466d89351ba8f8b6786d6375 e320da2997d6c9518a702105db6d91e2bc095e572c9d670cf19f0888cf1c 242ed225e3653b2a4e07820b8105127bf04e2197a57fecb462810d0ef415 3893c6ff92ecdab47cd91bdb064e1aa06db6d203f2c89a09153e0d8f8129 4a89bb8355e0154eb6d8c873b049d2ec998c2320dba62a476aa42305a837 ee4775710faa436009cde48954fc088fb897e565a5df28b57330ddeb1497 138da753a2088afa90f16c690eaab2b71ee5f95490e5c45d2e2ff34cc0ec cd94ed09190095c0f226272561d349adf2a1f5ebe3ec23fb6d43432e0acb 38c3948596b4bcfe665c341ce006a1979e8927346405bc791f083fa4a4a0 14a70829af99f54adb742d24a1bf81a6d62986dc68f1f229f6f6d1bf18b4 529a545b20a8e654bf4117b408b6b86f0f8a5ee93f21215ee69ebb98cb78 3a8784ee3bef4b339d8439a35edcfe989a0f47276b7723134087c44c444d d0d4a41c62c108e0d95ead8fa30d90a8d87f9a1086f31183e47a544aa9c6 b7c631bc23b3e4de6bd0523148926f18fce8a7841c73b476fac1f67d2394 f465e1df25a2ec145dff15b8319530251af18153affc1551d7b381cd4d19 aba0b497779b4202b82bf4acbf4cd24c9e12f6050dc845aed80bedf0b0b2 2802ce89357706406fd5f26a31b56c36881652aa34d0a31f60e84450d492 99260d70c978689cecab196f33d220279142ff393d30ac8f8f95a2281317 f64cfd402a68af573172cc5c6bacc54dfe25f42606cc6ff77f15e2dd42e7 ca9fefe40a59e9fe990b2dde50743cc20a16a056f80022bc6d32c6c9f395 99b669796ff4ef8c0a292c158dff872744ea1e2ed24bc5f80e4f2a39e45d 2fcad1d9f3aaed2a3a223b994c55dbd87ce8c7086e88a1f112744734b33a 707df7acf05f74d745455ac8d83393870a2efc21193ff4e3104b89b67f75 7259a5d32a90763052731b549fc917974af25ec33366adea1809b6a27569 ebd06738fb891ee7178c45aa46c397140b7ae472855d8370fb696c48e3d8 d1f7c3bdad4e00bdd09702bc3c9a2d756c344b28616ba349fb9e79d8b1a1 28160481c503e9f8885fbb6ffa798fbf5dd1809b04c85646e66f0c346fd7 d466b83e65a487dc3e4b15bfd204b573a9f1c6c949d373483a1520ebc70d fee0a1e383f061d94751aa148fdb79f1aef212f7defdc6f41f3348703558 f16c45fd0b4392b417cfc1b21d5c4ed17c477096cecf8ee78688d7074e30 9be9b5ca681a1098158e5cdc1654759baa0582c7c362ecaa00e50191136c fbacfc10472ce34c325d759b2bf26d7e0697af0a752477b29b0d09ec3195 08ffe690f846fca29d7f7f265666d7579b7e8f1ace09868cfdc7ad92e71a 9b273e029b7c278164f42b067f49c7c8ba3ac4d705de83e85ca21177f38f 5f1e9aca6f90bf38d85fae324e1a2eb3758de43e0a910db6cd3a7946c4fe 5faba6f2f211f42f10a8d3e1f7a6bc6cb9297ba33b0476376182b78b5cf5 88fdc37574cb6fe660a6d0c54fb49086fb54864ac008a47f672633295d60 ced2ff9a76f8aabcc4c4057d115c0ee9474e7ce6af8e5c9acf30caf8d26c fda16a5e9ab7ebb40a9ea934aaebcc1d02d15e5fea050bf3dbe0a309a6bb 387396251e36271556c503f9d1998ecd9c9ab8b6e88c7e1f32596ce183c3 e6c8719bcc0494a57230e7fa5ef9b7852290138f6022f6d3004e28ae51ea b113c099ede4ab6d73aa1f8dd5a4ffbb88d692b017e3134b55cb416c7101 3e3a7f0492a779cf2cd03082ee643d2538e093ec92ad71cc99a0c6b27ae5 023d970dc1a99925e5eb4ca8d5d83eb13d2ef87d6613c44d60d29f8c2ea6 b0c0b24e786e0aead6b645cbb6e11c96e2d46c73de38786235d56db6bc2b 786d9dd8e1dc3c8b2c2e828ee011a1f816dae78ce7fccdee2102570fa986 e85e5581b1a8b8ed8d6bd98a0fe48c98b0ef14f1d24d4c82bf8a47b24c7c abc1d37d26ec537aab6b3751dd8f0181ac081ba0b1fe273ac1e19b508c65 d407b9c661d46e6401a573c7ade9a6f6485d55da2787e79fe08c143fd9d2 a746024fa4273ceaff40e9b6c8a01051f482885bb8ce46e4d23aeb88b166 2fa36dbf41fe7096827239f427beefc4c44e14e546ef52bd4d685ab4e604 0014f1a52a5e71a25506f5a2163301fa5f6619d2654db03a90c684ffa97b bcad46775e0debea0fb908f08846c59b9514e15b8c49b953e643f451d24b 0f15bb9310d672e3d85c5d7ecb04398cf1778a6c25c64c13470932c8511d 7742771fa40e5ebdb4385438064c9dfbb795a8e0558439d97094864ef08c 829a94c4978397a9011b0ccca9d42a29e43b77118aec948491bcb9d47632 8fadfe05823af4894a77eaeb584323bf2530fbb5a00d30772fbf97081982 c15a312852770dab7d9bc19ab74a4d6b76537aef6ac86826cebcc3a77faa f4238dfb04a02f288a63c4f3905c084e4cd0ff350d1ceface92be195918e c332c869a9cda08d3b73a221ce99aad75adbf1959f7c106fdd981425df9c c0aa3c153c2da679ef348f1350c46ab74f105537991f00e68e0464915e4f 53700752c00b724110b2616d477206efc417ec230f7b5f158f5b706e2731 8cdb01570896dcdffef073fb9bcacb23d4baee95397f0e98e39861df47a5 cb0121acc227d5d2ab8cfe04a5de20a172e114eca69a3dfdf386f0a63f7e 6a8924874de68fd4d2e05417a548c754ecd59542d35d45adfcd296f88dcc 52a09eb9e7743f88eb731866acdd4fd2f2ee04136142e57ec2934c5f6fcd a67d271a033fa1d88eb79449216fcd3d2de71a312edcffff9c056045a036 9ff73387143ff57e306d99acddb6dc308ff9a5b38a90bd8b6d9c7a802b6e 110ac392aed8d8bcafa6315cfde8ca0736dea337ab569101b70985c13fd5 9815b3d227d804012417cd4bda9b34f8f10ac9dedf4d8adb30eeaf030956 d747f58b36251df277acbb19e5d43634983a5a165e538271ae3523c24b5f 758adda56305fffb7ab06215e1ce041b087bb3f678f823ace8e2b1d0bb90 6f5f4040801e676be1dac36ac67bb9f0a45c6638216d30834c016fbf6373 1af93c60a14692bfc3ef8ef75eed3cacdc863f619a7bbdce4401cb1e5f4c c8301eaf26199fd3171d977c37dade2726b7f18c768ded89520fdf293409 d2091071b9cccb400a6c76542235cd40f9e935bbaadac04243bb423430e3 cc04259794d6507fdc78d234928029786a698228ad2c79716cb2b0a20974 b3696a78e996566ff8e8bcd47cd70cac9b80b6f5adcafe083cf29a41a7b7 6164ac417fdb660cf2e604267d3321ab531f9cb4345cc545bc36dc34e476 a98453dbceca98f7756b58168f9ffb57537ed8371e1befa7b537e91c1d11 45af4160e5691a32a21fa0115a9ef751b16358b6486760012adf24ed30f6 6103b18a2f7051c01cd1a2e04e5abc79c09958b08b314c6a978acb1b8805 07577d02d94f7753b7a1f221c7e3f3b2a5aa96d5f18ebff2771a55ed3a29 2d089d85616c35f0b80a2f7b499d88f200df44b2da72e7995d31fe38ac22 40eedad4059414372e659bca7517c4ccff7d8af92f890342f10319156ff9 b33c8fdcf6f754defbc58b7435d719226c7bf9bde4c647bdd3b1f1426137 9b4328fd1bfaaf2f7a8034bfbf450f5c5f75450bc1a399244e8f0effb154 710b85046f197b347a5d47ea97d01c6b80b8e147159cc2b96f6317d8c3f4 654e5928328fb844c6aebbc487257fabc2cf76d35f7c77b7ee7ba035888d c8a11571210ba2b46cc20365642e3f7423bdfce297d083aa3f327d9701f1 4fa649f876931f16344ce8c840d4e381edf3b815348887fd607c4373d187 eb862cd4bd150b6489a3718c0acbdb3c5dcce929a3c8d073b74c82dcfdd7 ac313c5dc3a0f8043f8ebceba434e379558ee88cf9ce1d91ca598f4cdaa2 943fe76d9aae39087f86769732b0151c2aeccf1d5a72896249add52d3c94 d316eac121d1235dd660f642767c148b4011bc2d8b57d3a3bb654d23c764 60c9a7823e67cc0658d9a51e4fd4fe31f037d375039011ad4c5f22986e5c b63d023631b83df8009246a588193ee2b562ffe2ea2c2713946d2f479fbe dcea97e1a980671b3a2bfc8e2875552b3eb771ea0f76df4fca150f21e2d9 82bb1f3e85c77ae3076c736f4e20ddf920b7d0d09196d5f7268b83b4f657 6d082590c629a374e6e9358870907477da2db81fad82a4487a5ccf5ac186 2abbc98519113574a5b068bdbc13878233378ad4edc021c19ee3a13bbb09 248eb431045eedd08b95ee05d51106b0ffc58bff9ca77cd26308c4d03f40 18809e8680bcd90df5823321d6ad773dc1f063f37b82fc27be505d124b75 e59241ed0cff5ea1d81d45e9e0345c2e6d9915b63305b133ac7a370f8b6d d371d5071eb722cc32cc2da3e08bb217b14761cae8016bbbf565f026955e eb3d342439c7f4072c04e86b7115c524cf8022ed01e6489603ff0d934cbb 59fbf32c89ccb2dff32b525ab2b1d3c81e84bcc37e324efe5ef580dfe9fb 4d629177c78205e3faf040d6a30cb50c2d88a0790bb62d555f356418f4c7 5dfe6af64ec58bc9054253f0cbc17be66c3d2d5b5059753111bd68b23c51 bf9dace2fb8b89683e828e761861084c0dbb0afb1d29928b910c10311791 747231c4a887ecd3b9920d453dee2650346e3c517d6564c2ccbef21b3b10 63d1f6ff5c90450c0b4b00d07d1bdac2f64729bb64c3c01c3df3ffb76ce7 311946a4ebac49797e0e52ed164e268c92dc4be5169bc2937af2b1eea588 93599edc8570e35c2a7f25aef8cca011b4c3953e51007ee9c268fe70df6e 0eb8f412a1e0747877f6235b516d7ab68b029f8f4369ece86a771b89e98b bef2b43cf69945c01ef60e2e34092fc5fb2b146d8c1dba83b872bbda9584 2d11acc70a551d8e9551cea018daf8bf3292785a9bff606c1f735cf43abd 0f6419cf75929efe45ab6652a63145770920f739814c06b96b1591fa647e 92c56303ae5a82a172fc9d4eb936eba624d016580cc98c40a9a7baa9dee4 946715abfdd7999356b8cc39eadc00f42aadc0b16e178c2e663da2f464c1 809644ab1796eb8290f70684a6176b0814e6890da69467a63f74dc687e0d d0f9a7a18485d1a685097c32848122c7a211c2da72845200c1be63fd0af2 dc8a10b5c880704d33975dccfca050f0d45aad987fb7fa629cc27dfe90ec e1f552eae546ca8b2ee47d9e349da32e0e0b1453e63cefe7022234993f82 e3056e045faed95712261d33297bcfa9cf11768d8116d143e653c64fe898 27908647c7b194402ecb48a732e74024f74aac33cff6ec9c97dfabaaf735 ad5645b5223028688c5bf8badf9cf6519b6f080763fcc4aaab8d4a6295e1 e7f73a06a6db3fd286ec633928a2bdd3317839dab98a851ddf2d8c5e735c 8d0eff04623a9cb2679b5cf8462eedfba9c372f64af9a4c8003b66a815f1 4fd7ccff14ad1a9cddd1af8005c520dde0a8eda007a44aaadb82ec52b4db 31c3d7b1252d2e7f80461aa9479e9df2dd371ff1ca90b0239454bcd1d5cb 4b60b27621e774219b5e540e06d8631355b7dd2620bb1cb643d387d8804d 54f8f7af3cdadce2fe6dab3ceda674d3af0435d29796d0a45f0d9c18cbe6 414b9cd5e36cae3ebc37ce15ad5caa9c68ca6b1e26e5cd2a92c3f42f4101 ac4b690dfec290b0c8699b03ae919f8e535ad07eb609c8a7ac12c640e72c 7273cf2bff6a59735d3b11ae906e83dbea270c6b11ea83078f810fa04603 a6b0d97276e7ad7728fd4e99eb3912073b0676491160018b008afc806dbd 6c989215f46e7d04a96156f259a04a4d44b1e9295f471e0921dfc61a631e 2d708c3187175803f804f6fb119733a85ac350693e34faeacc4bbc5d091c 38fab446e9139f627c38522dab9164533fafce83f811185f268e30ec43ff 46e56b0043958f52f1440356b449c780db796c2695befdfebe928690cce1 b6a530b0427b4e3389100dc861a50e1d9e04bf71b49d901b0b9d3becbecc 33ef3c83ee7966387c64008299acdeb2f10d3c72f5417d1b54104f98e9a8 5a2e693f77b02e676eda4861fa830697cc37cf10ebb617cf36c36aa9f76f dd45fcc5c195ea8555a373c335a41698e74f00b7b6b5ca8e16f936bf0cdf beba2cf46b16fa3713d791391f38e5b19a52ae58384775cca3d2d1fccb86 740616fc34cc8d83e9813291335747457032e8f989bb125b0775bb50160b 3ba0041f6712e2277219733257b3e9787e462ee84dfb6b085bed21686455 6f47b63d5ab10c46dac073bb8fc2255dc2b9902c0fd82a36dbbd35c10565 129cef728efc1e60734a6edfc558dd3ce680d34773580cebad927b9a8496 9e51e63d67d41b431f034c51763bcc458f437f56984f1d48a094ba57933e 819f0037c506bef9ee3533af880614339de22c88d416575d5405e3fe1f39 2ca3a188cf6f21184515124dedc6f22fb50303809f118b7df338485a4bc8 0773713f4c316b22be1b8c1cb4a28119398ef2dd29e8097af9f83415a8c9 4b281d5f8125ecb656fa9dc4af3fbfbaf6f224e7241b1d62e842d9cf1b60 d277ba794541309c26a447e95fe9c4a9e54a6c81f8dd2019484633dd98cb a028bb6c6ae3561d03ebadc6fb78732e1ca817e12b6acf46e2142aae2f88 c9c9c35cf6641ebaff70944d587b3a84a89fc8d6af6b60dc9627d1af24e5 6d53198f71bce353d3dbd26e5473d60ca5254b32756000af032c0496810d 9bb7ef8e835de8f1a2d679a4ec5dd863a5a3b5d009dddb0964a513885570 023133a994b0047101917cbade926e91df34b05cee043cc58553cfcfcd20 e38383174a7ce27be337161541f11bff6ba9c5e760f645ef33963d94dcc9 13df00ae32705cfbf7a1b395354cebb075e7767cf34f8852e7c19990407a 8e96eef59d221fd33dcc71554da8aa472ed369d8685cf5780075df40f454 444a79eb4e758784a914ad53bb4fe9559a1c7a89773a9ca18257fe68ce91 cfcbb82b4ed5766cb4652bb3c6457c7ff69dab764d5299614bc0404409d5 06088e12a5ce3e9c7f4aa56a4ec7ebe6a7867a0c146665531e58cdcd3666 fa9654fa9e4535b5cf60016e161f55e8b14ab9b2a83a57acdde98ef2b2cf 20c275acbfcf4475a0bccca31443fe3277a240d33d14a453b21432c7973c a2419109d386ba72349f4a641844e18f2107ecbdd2be6371cf5479b02158 657f91006baeab5ce40298f0703116906edabd18d1ad67dd820ccf322b27 d10148f5ae316ed6ce21aa50ca06a8f09fe0d3e9abd915ad014c7b237fa2 20bc179708c70badcb7fec850f51f7e970520adc4c3de7914bd5bebca7c2 840925b97d36590a7933a44325b168999e31ebdfe198394c8652739d9f9a 6e5414c4e20d63b967237637555f2933e6b204a3412cc196180ce5814b01 47c2880569c85fee35d75d58bb28dbf2d3d90393e136aa8e39fde1196922 9202ba615823e2dbb7b489129747abcbb11a1df0c46d1b62c6ce8209c642 720a7f45e9b36ed8c62fc2357ee3f47cc2953dbdadb5a31c48fdb101c844 459417896193020e58964e11776e58e0797501a5ca6d822b68d41334170d a1f572fa7904e279adcfb8ec9bcfaaa5602a9bfbdeddbdaddded5d25dbbb 28988fb14ec3aaa1caecbb0dfc2047430677cb3519d90b623200ba3f4371 fb63e1d448e861c535abb586821f0243fae9773b1c5fc0c3e66b076e777c e24c0c3bb646b12adc15bfc6295316499e38fd94df2cc16c40b2d9e7f631 98d5675eb0cab69d7ee92b1bfb9f6a8733978cf68c6bc3e9d4f96891818b 8d08e42cada1dae7ae58ed10ac52a1f742bcbe66ac21a27bccd7d24b4547 cba227cd0d999d8838d162ed050208b9b12518cc2aaab3f1734732ae144d 6713ac1020fc67226bd0ec23b0c27bab908f3275d8ea27faa4e6d959a68b 153e0688b5c7a8d155886e6d468ef2bacb8109a69ad2d6d14e955ae4b5d4 c32fdf6e4a39b53c0c5726e986d461101ab1c8fb92bc505689744ed35ec2 ba67e8d9e8166cea7dc0ddf61066fcbbf06cdf1fc981319249f9a5ecc385 4cbca3124001324c5c43464d994c1d3b2d011e817645be4c4148131916bc 4d1850f19d854b318b75a6a6ea2ef84c2ff178490105cf80c618c1814f11 2eb8bf06aecf9206997f4d61f4c909119db64438c3077a2428beb3fae6f0 7732f7358279fe0cf71ee480cfe4208425c92367264559a5848760bcb8cc f6ca712f6aca4d7724bae43d6be2cb94c023e6186a42046019771c88a5af 8eb1596c13e02804c4fe1b1f5655786bb6efdb705a02ff2f018a1e0e3556 31eb8467f5601bf62817dfd657b68c5a3982347bf6e58850cf965a21ef86 83e7e4461f10b85a68ca1573699559f2d8a89e0d8f3c99f6199978d859fc ed9e614298c97ff66e1741566ec5d65b9f0c38f6305bbd8c44a39a7b0206 99005f6c0d10759826dd8fefd7a9c72a6f45675f800cd66c5185fd77b4cf 9f92658c7013346b036415249a6201358eecea44f0fc4efc5101158362c9 d2d2937dea087ee00eb1155e84f8fc1621f7243b5a07af02d6fb6d960e9b 99067e54235c241e365662f6447c26eb6de90d077b0b52fe184f45b123f0 1d51b1caa74ae2958d9ae497a89d3ffbb5c8c75e442b6fa7c0f989f31b3f c7a1ea9ba483416c0a07d23b8206e08bffbe3dd3fe30995fa30cdc8a0469 ab14bc835bc5fa6b79b96dcb805737fe3bee4d32ee04f90abb299a343fac 41fd240a52726417893dc197d6b6c97b46b9734fee5b8e2a21406ec58689 924e2a651a02c6d7558d9c872faab74290223362a771fd2b893f60740d35 d1590368d32ca7ea746a7a3c4c726bc352d118351c93bc7a25043ea297d6 96194115fae92a5af36f26a3a73bc41348fc7ab309d35388d675ec6118f8 b89f2d935f4f6655b42785fcec234a29ee2fc01c259197c21e42789b292d 4800f6ec96f5082b8d4633b428a76e7283964ed493b876fbd9c83b37abc5 f8c43414ca2a0693605d13ee3d6137eda02bd6a907add165a0c1e2c56ea5 c8f822c53392daa65f0c85dd70006b460f706ec5678b439628b4ae5cb5a0 a3f295b9e8f6e28ecc6769d988894557af3485ef0367151184db5fa0b27e eeb06b98a1b995bab5c4c1439efec6e3a7147177ec34568433f54f579a06 d831499a8422cb917686bd58c743d655d6f1607f281dfa157a97165fba9f 66e50fbde8219b410ca27334198ae5af2011e3e80b4b0fc2843773cbb52c c206bd94d77477b6bc3c344af2dbb26f098398ff147b30baa62aef99fcf7 8ffd93dab2fca22356e61d032f1c28e0a69e3de08428cbf9158fb0206073 a8f68f92ff19fb5b7a8898f7b609e01a8cb5820c1e166ce318668b046714 c095e5d2deb3717d13ccbbb80f3a4ea7e5491de9e18af6a4f26f3972f5f5 b778a566f7d0774fb48db63ce6fe819fd96c5898e7b1ead32a524b70d503 a34118352c77e260597dc59fdbb1bffc5c79d5e8f847ada5e186970f0680 e73e7f911c7f3cc4cfbb0b9b743486e0a3eb7984da9149983e01cee019c2 bca3ead0691ee643203eaecda99c0b90da25e2da4cca5e6b4ab209d541ce 1f48b488d9e2dc2158bc1898bb63a70222e366ad379f725b96eddb2b90e0 f01203f6d3b442dc567a9f3aa3470e44d36b93df8911267ba87cece176e0 ca07cdf75d305db40c1ec9e5651a68fca845a547cb50656b50882cf3fb57 02317e92ee09708e69f5afaf360e5b9bb16377a11e54b6a3b9958e52f016 04b6d904e0ff2c7e86583f78de4c66c860a55dd3931ef24c15c8695db881 16ce053bbf4aba9010ca14616f9bc7190004d7ffdeb77ba46362d205fa6b 4780af6e53ae5ab657fd336171ad9e1ab3afc497ac3f14c2d40f64f6c19d f7ff0ee3c854597910ad5e45554c2c5e468a3327db55373e57ab392d070f 2a4df5a666e35179c11f366ca31dc0e2d755d654286d5c2c2d8ecec32dd8 8e321cb24592d34cbdb87d3597599196b3d43814f9a3034fbdd31f29bb5b 22e5df1b74453723e27d2b0e10878025912fd4fc5a7a2e3f109cca1bf9f3 799daa423cec6e029523d74d15ec5dbd958659b504aa92b83214caf2f8b8 994ff9fd1cb15d3aa5c1b45ac980017a1cbc08cdfc308c242a92da45de68 fce03b9ba3f631566cf3526b604ef5f3230501cc474a5e366733a15924b1 2504f5ac463759333b27dff603992452c8bb318f564c92ce3a2afcfcc52c 1833be00f49f92c2d06f4818aee233a53bb65090479b79f5f6ef5b5ecf05 6f8ec5986c170228308d28ad056d437d6ded7bb686f7a1c5c019de58b78f b0a86f8a106b8aeca8875da6e173fc4b2a134a2d2123ee4c1a1b04f732 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Serif-Oblique.afm0100664000212600000240000016607710330505373016226 0ustar mikeuserStartFontMetrics 2.0 Comment Generated by FontForge 20051018 Comment Creation Date: Thu Oct 27 10:50:22 2005 FontName Serif-Oblique FullName Serif Oblique FamilyName Serif Weight Book Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.) Comment DejaVu changes are in public domain Comment ItalicAngle -11 IsFixedPitch false UnderlinePosition -213 UnderlineThickness 133 Version 1.15 EncodingScheme ISO10646-1 FontBBox -257 -505 1259 1052 CapHeight 729 XHeight 519 Ascender 759 Descender -208 StartCharMetrics 780 C 0 ; WX 600 ; N .notdef ; B -36 -177 636 706 ; C 32 ; WX 317 ; N space ; B 0 0 0 0 ; L uni030B hungarumlaut ; L tildecomb tilde ; L uni030A ring ; L uni0307 dotaccent ; L uni0306 breve ; L acutecomb acute ; L uni0304 macron ; L uni0308 dieresis ; C 33 ; WX 401 ; N exclam ; B 75 -15 337 730 ; C 34 ; WX 459 ; N quotedbl ; B 71 458 389 730 ; C 35 ; WX 837 ; N numbersign ; B 46 0 792 718 ; C 36 ; WX 636 ; N dollar ; B 33 -147 575 760 ; C 37 ; WX 950 ; N percent ; B 84 -15 867 743 ; C 38 ; WX 890 ; N ampersand ; B 39 -15 835 743 ; C 39 ; WX 274 ; N quotesingle ; B 71 458 203 730 ; C 40 ; WX 390 ; N parenleft ; B 63 -156 408 760 ; C 41 ; WX 390 ; N parenright ; B -19 -156 327 760 ; C 42 ; WX 500 ; N asterisk ; B -2 287 502 743 ; C 43 ; WX 837 ; N plus ; B 98 0 740 627 ; C 44 ; WX 317 ; N comma ; B 19 -137 246 111 ; C 45 ; WX 337 ; N hyphen ; B 36 229 302 307 ; C 46 ; WX 317 ; N period ; B 92 -15 226 117 ; C 47 ; WX 336 ; N slash ; B -80 -93 417 730 ; C 48 ; WX 636 ; N zero ; B 51 -15 585 743 ; C 49 ; WX 636 ; N one ; B 69 0 440 743 ; C 50 ; WX 636 ; N two ; B -5 0 565 743 ; C 51 ; WX 636 ; N three ; B 12 -15 576 743 ; C 52 ; WX 636 ; N four ; B -4 0 562 743 ; C 53 ; WX 636 ; N five ; B 22 -15 576 730 ; C 54 ; WX 636 ; N six ; B 48 -15 603 743 ; C 55 ; WX 636 ; N seven ; B 121 0 635 730 ; C 56 ; WX 636 ; N eight ; B 29 -15 587 743 ; C 57 ; WX 636 ; N nine ; B 33 -15 587 743 ; C 58 ; WX 336 ; N colon ; B 71 -15 267 435 ; C 59 ; WX 336 ; N semicolon ; B -12 -137 280 435 ; C 60 ; WX 837 ; N less ; B 98 45 784 582 ; C 61 ; WX 837 ; N equal ; B 79 174 759 453 ; C 62 ; WX 837 ; N greater ; B 53 45 740 582 ; C 63 ; WX 536 ; N question ; B 107 -15 528 743 ; C 64 ; WX 1000 ; N at ; B 56 -174 949 705 ; C 65 ; WX 722 ; N A ; B -77 0 672 730 ; L uni030C uni01CD ; L uni030A Aring ; L uni0308 Adieresis ; L tildecomb Atilde ; L uni0302 Acircumflex ; L acutecomb Aacute ; L gravecomb Agrave ; C 66 ; WX 734 ; N B ; B -16 0 678 730 ; C 67 ; WX 765 ; N C ; B 46 -15 747 743 ; L uni030C Ccaron ; L acutecomb Cacute ; C 68 ; WX 801 ; N D ; B -16 0 754 730 ; L uni030C Dcaron ; C 69 ; WX 729 ; N E ; B -16 0 713 730 ; L uni030C Ecaron ; L uni0308 Edieresis ; L uni0302 Ecircumflex ; L acutecomb Eacute ; L gravecomb Egrave ; C 70 ; WX 693 ; N F ; B -16 0 723 730 ; C 71 ; WX 798 ; N G ; B 46 -15 758 743 ; L uni0306 Gbreve ; C 72 ; WX 872 ; N H ; B -16 0 888 730 ; C 73 ; WX 395 ; N I ; B -16 0 411 730 ; L uni030C uni01CF ; L J IJ ; L uni0307 Idotaccent ; L uni0308 Idieresis ; L uni0302 Icircumflex ; L acutecomb Iacute ; L gravecomb Igrave ; C 74 ; WX 400 ; N J ; B -169 -209 447 730 ; C 75 ; WX 747 ; N K ; B -16 0 795 730 ; C 76 ; WX 664 ; N L ; B -16 0 605 730 ; L periodcentered Ldot ; L uni030C Lcaron ; L acutecomb Lacute ; C 77 ; WX 1023 ; N M ; B -16 0 1044 730 ; C 78 ; WX 875 ; N N ; B -21 -15 904 730 ; L uni030C Ncaron ; L tildecomb Ntilde ; C 79 ; WX 819 ; N O ; B 46 -15 775 743 ; L uni030C uni01D1 ; L uni0308 Odieresis ; L tildecomb Otilde ; L uni0302 Ocircumflex ; L acutecomb Oacute ; L gravecomb Ograve ; C 80 ; WX 672 ; N P ; B -16 0 673 730 ; C 81 ; WX 819 ; N Q ; B 60 -161 789 743 ; C 82 ; WX 752 ; N R ; B -16 0 717 730 ; L uni030C Rcaron ; L acutecomb Racute ; C 83 ; WX 685 ; N S ; B 28 -15 641 743 ; L uni030C Scaron ; C 84 ; WX 666 ; N T ; B 47 0 729 730 ; L M trademark ; L uni030C Tcaron ; C 85 ; WX 842 ; N U ; B 108 -15 871 730 ; L uni030C uni01D3 ; L uni030A Uring ; L uni0308 Udieresis ; L uni0302 Ucircumflex ; L acutecomb Uacute ; L gravecomb Ugrave ; C 86 ; WX 722 ; N V ; B 50 0 808 730 ; C 87 ; WX 1027 ; N W ; B 65 0 1096 730 ; C 88 ; WX 711 ; N X ; B -65 0 745 730 ; C 89 ; WX 660 ; N Y ; B 49 0 740 730 ; L uni0308 Ydieresis ; L acutecomb Yacute ; C 90 ; WX 694 ; N Z ; B -26 0 710 730 ; L uni030C Zcaron ; C 91 ; WX 390 ; N bracketleft ; B -1 -132 400 760 ; C 92 ; WX 336 ; N backslash ; B 79 -93 258 730 ; C 93 ; WX 390 ; N bracketright ; B -10 -132 391 760 ; C 94 ; WX 837 ; N asciicircum ; B 79 457 706 730 ; C 95 ; WX 500 ; N underscore ; B -4 -236 504 -196 ; C 96 ; WX 500 ; N grave ; B 179 615 367 799 ; C 97 ; WX 596 ; N a ; B 25 -15 528 534 ; L uni030C uni01CE ; L uni030A aring ; L uni0308 adieresis ; L tildecomb atilde ; L uni0302 acircumflex ; L acutecomb aacute ; L gravecomb agrave ; C 98 ; WX 640 ; N b ; B -44 -15 576 760 ; C 99 ; WX 560 ; N c ; B 42 -15 542 534 ; L uni030C ccaron ; L acutecomb cacute ; C 100 ; WX 640 ; N d ; B 19 -15 601 760 ; L uni030C dcaron ; C 101 ; WX 591 ; N e ; B 42 -15 549 534 ; L uni030C ecaron ; L uni0308 edieresis ; L uni0302 ecircumflex ; L acutecomb eacute ; L gravecomb egrave ; C 102 ; WX 370 ; N f ; B -38 0 500 760 ; L l fl ; L i fi ; C 103 ; WX 640 ; N g ; B 33 -223 682 534 ; L uni0306 gbreve ; C 104 ; WX 644 ; N h ; B -33 0 553 760 ; C 105 ; WX 319 ; N i ; B -36 0 270 736 ; L uni030C uni01D0 ; L j ij ; L uni0308 idieresis ; L uni0302 icircumflex ; L acutecomb iacute ; L gravecomb igrave ; C 106 ; WX 310 ; N j ; B -184 -223 295 736 ; C 107 ; WX 605 ; N k ; B -40 0 612 760 ; C 108 ; WX 319 ; N l ; B -46 0 279 760 ; L periodcentered ldot ; L uni030C lcaron ; L acutecomb lacute ; C 109 ; WX 948 ; N m ; B -11 0 880 534 ; C 110 ; WX 644 ; N n ; B -11 0 575 534 ; L uni030C ncaron ; L tildecomb ntilde ; C 111 ; WX 602 ; N o ; B 42 -15 560 534 ; L uni030C uni01D2 ; L uni0308 odieresis ; L tildecomb otilde ; L uni0302 ocircumflex ; L acutecomb oacute ; L gravecomb ograve ; C 112 ; WX 640 ; N p ; B -44 -209 617 534 ; C 113 ; WX 640 ; N q ; B 60 -209 681 534 ; C 114 ; WX 478 ; N r ; B -11 0 528 534 ; L uni030C rcaron ; L acutecomb racute ; C 115 ; WX 513 ; N s ; B 11 -15 480 534 ; L uni030C scaron ; C 116 ; WX 401 ; N t ; B 54 -15 404 681 ; L uni030C tcaron ; C 117 ; WX 644 ; N u ; B 68 -15 574 520 ; L uni030C uni01D4 ; L uni030A uring ; L uni0308 udieresis ; L uni0302 ucircumflex ; L acutecomb uacute ; L gravecomb ugrave ; C 118 ; WX 564 ; N v ; B 37 0 613 520 ; C 119 ; WX 855 ; N w ; B 56 0 894 520 ; C 120 ; WX 563 ; N x ; B -29 0 581 520 ; C 121 ; WX 564 ; N y ; B -37 -223 635 520 ; L uni0308 ydieresis ; L acutecomb yacute ; C 122 ; WX 526 ; N z ; B -11 0 532 520 ; L uni030C zcaron ; C 123 ; WX 636 ; N braceleft ; B 120 -164 601 760 ; C 124 ; WX 336 ; N bar ; B 31 -236 306 765 ; C 125 ; WX 636 ; N braceright ; B 35 -164 517 760 ; C 126 ; WX 837 ; N asciitilde ; B 90 232 748 395 ; C 160 ; WX 636 ; N nonbreakingspace ; B 0 0 0 0 ; C 161 ; WX 401 ; N exclamdown ; B 65 0 328 744 ; C 162 ; WX 636 ; N cent ; B 68 -146 567 663 ; C 163 ; WX 636 ; N sterling ; B -6 0 606 743 ; C 164 ; WX 636 ; N currency ; B 7 44 632 583 ; C 165 ; WX 636 ; N yen ; B 45 0 711 730 ; C 166 ; WX 336 ; N brokenbar ; B 44 -171 293 700 ; C 167 ; WX 500 ; N section ; B 2 -96 481 743 ; C 168 ; WX 500 ; N dieresis ; B 191 651 498 767 ; C 169 ; WX 1000 ; N copyright ; B 130 0 870 726 ; C 170 ; WX 475 ; N ordfeminine ; B 34 261 432 743 ; C 171 ; WX 611 ; N guillemotleft ; B 73 68 562 518 ; C 172 ; WX 837 ; N logicalnot ; B 105 140 732 421 ; C 173 ; WX 337 ; N sfthyphen ; B 36 229 302 307 ; C 174 ; WX 1000 ; N registered ; B 130 0 870 726 ; C 175 ; WX 500 ; N macron ; B 179 672 486 746 ; C 176 ; WX 500 ; N degree ; B 91 432 408 743 ; C 177 ; WX 837 ; N plusminus ; B 45 0 756 627 ; C 178 ; WX 400 ; N twosuperior ; B 3 326 355 743 ; C 179 ; WX 400 ; N threesuperior ; B 12 318 355 743 ; C 180 ; WX 500 ; N acute ; B 256 616 517 800 ; C 181 ; WX 649 ; N mu ; B -42 -209 600 520 ; C 182 ; WX 636 ; N paragraph ; B 112 -97 652 730 ; C 183 ; WX 317 ; N periodcentered ; B 91 282 225 413 ; C 184 ; WX 500 ; N cedilla ; B 125 -193 344 0 ; C 185 ; WX 400 ; N onesuperior ; B 46 326 292 734 ; C 186 ; WX 470 ; N ordmasculine ; B 20 261 439 743 ; C 187 ; WX 611 ; N guillemotright ; B 50 68 540 518 ; C 188 ; WX 969 ; N onequarter ; B 46 -15 864 743 ; C 189 ; WX 969 ; N onehalf ; B 46 -15 859 743 ; C 190 ; WX 969 ; N threequarters ; B 12 -15 864 743 ; C 191 ; WX 536 ; N questiondown ; B 27 -14 448 744 ; C 192 ; WX 722 ; N Agrave ; B -77 0 672 928 ; C 193 ; WX 722 ; N Aacute ; B -77 0 672 928 ; C 194 ; WX 722 ; N Acircumflex ; B -77 0 672 928 ; C 195 ; WX 722 ; N Atilde ; B -77 0 672 921 ; C 196 ; WX 722 ; N Adieresis ; B -77 0 672 920 ; C 197 ; WX 722 ; N Aring ; B -97 0 652 929 ; C 198 ; WX 1000 ; N AE ; B -88 0 1012 730 ; C 199 ; WX 765 ; N Ccedilla ; B 46 -193 747 743 ; C 200 ; WX 729 ; N Egrave ; B -16 0 713 928 ; C 201 ; WX 729 ; N Eacute ; B -16 0 713 928 ; C 202 ; WX 729 ; N Ecircumflex ; B -16 0 713 928 ; C 203 ; WX 729 ; N Edieresis ; B -16 0 713 920 ; C 204 ; WX 395 ; N Igrave ; B -16 0 411 928 ; C 205 ; WX 395 ; N Iacute ; B -16 0 447 928 ; C 206 ; WX 395 ; N Icircumflex ; B -16 0 450 928 ; C 207 ; WX 395 ; N Idieresis ; B -16 0 450 920 ; C 208 ; WX 807 ; N Eth ; B -11 0 759 730 ; C 209 ; WX 875 ; N Ntilde ; B -21 -15 904 921 ; C 210 ; WX 819 ; N Ograve ; B 46 -15 775 928 ; C 211 ; WX 819 ; N Oacute ; B 46 -15 775 928 ; C 212 ; WX 819 ; N Ocircumflex ; B 46 -15 775 928 ; C 213 ; WX 819 ; N Otilde ; B 46 -15 775 921 ; C 214 ; WX 819 ; N Odieresis ; B 46 -15 775 920 ; C 215 ; WX 837 ; N multiply ; B 94 33 744 595 ; C 216 ; WX 819 ; N Oslash ; B -21 -28 839 757 ; C 217 ; WX 842 ; N Ugrave ; B 108 -15 871 928 ; C 218 ; WX 842 ; N Uacute ; B 108 -15 871 928 ; C 219 ; WX 842 ; N Ucircumflex ; B 108 -15 871 928 ; C 220 ; WX 842 ; N Udieresis ; B 108 -15 871 920 ; C 221 ; WX 660 ; N Yacute ; B 49 0 740 928 ; C 222 ; WX 675 ; N Thorn ; B -16 0 642 730 ; C 223 ; WX 667 ; N germandbls ; B -44 -15 587 760 ; C 224 ; WX 596 ; N agrave ; B 25 -15 528 799 ; C 225 ; WX 596 ; N aacute ; B 25 -15 544 800 ; C 226 ; WX 596 ; N acircumflex ; B 25 -15 528 800 ; C 227 ; WX 596 ; N atilde ; B 25 -15 556 777 ; C 228 ; WX 596 ; N adieresis ; B 25 -15 528 767 ; C 229 ; WX 596 ; N aring ; B 25 -15 528 878 ; C 230 ; WX 939 ; N ae ; B 25 -15 897 534 ; C 231 ; WX 560 ; N ccedilla ; B 42 -193 542 534 ; C 232 ; WX 591 ; N egrave ; B 42 -15 549 799 ; C 233 ; WX 591 ; N eacute ; B 42 -15 563 800 ; C 234 ; WX 591 ; N ecircumflex ; B 42 -15 549 800 ; C 235 ; WX 591 ; N edieresis ; B 42 -15 549 767 ; C 236 ; WX 319 ; N igrave ; B -15 0 277 799 ; C 237 ; WX 319 ; N iacute ; B -15 0 427 800 ; C 238 ; WX 319 ; N icircumflex ; B -15 0 392 800 ; C 239 ; WX 319 ; N idieresis ; B -15 0 408 767 ; C 240 ; WX 602 ; N eth ; B 19 -15 576 760 ; C 241 ; WX 644 ; N ntilde ; B -11 0 575 777 ; C 242 ; WX 602 ; N ograve ; B 42 -15 560 799 ; C 243 ; WX 602 ; N oacute ; B 42 -15 567 800 ; C 244 ; WX 602 ; N ocircumflex ; B 42 -15 560 800 ; C 245 ; WX 602 ; N otilde ; B 42 -15 579 777 ; C 246 ; WX 602 ; N odieresis ; B 42 -15 560 767 ; C 247 ; WX 837 ; N divide ; B 98 67 740 560 ; C 248 ; WX 602 ; N oslash ; B -17 -46 615 565 ; C 249 ; WX 644 ; N ugrave ; B 68 -15 574 799 ; C 250 ; WX 644 ; N uacute ; B 68 -15 574 800 ; C 251 ; WX 644 ; N ucircumflex ; B 68 -15 574 800 ; C 252 ; WX 644 ; N udieresis ; B 68 -15 574 767 ; C 253 ; WX 564 ; N yacute ; B -37 -223 635 800 ; C 254 ; WX 640 ; N thorn ; B -66 -209 595 760 ; C 255 ; WX 564 ; N ydieresis ; B -37 -223 635 767 ; C -1 ; WX 722 ; N Amacron ; B -77 0 672 899 ; C -1 ; WX 596 ; N amacron ; B 25 -15 528 746 ; C -1 ; WX 722 ; N Abreve ; B -77 0 672 927 ; C -1 ; WX 596 ; N abreve ; B 25 -15 528 772 ; C -1 ; WX 722 ; N Aogonek ; B -77 -192 672 730 ; C -1 ; WX 596 ; N aogonek ; B 25 -192 528 534 ; C -1 ; WX 765 ; N Cacute ; B 46 -15 747 928 ; C -1 ; WX 560 ; N cacute ; B 42 -15 563 800 ; C -1 ; WX 765 ; N Ccircumflex ; B 46 -15 747 928 ; C -1 ; WX 560 ; N ccircumflex ; B 42 -15 542 800 ; C -1 ; WX 765 ; N Cdotaccent ; B 46 -15 747 921 ; C -1 ; WX 560 ; N cdotaccent ; B 42 -15 542 767 ; C -1 ; WX 765 ; N Ccaron ; B 46 -15 747 928 ; C -1 ; WX 560 ; N ccaron ; B 42 -15 563 800 ; C -1 ; WX 801 ; N Dcaron ; B -16 0 754 928 ; C -1 ; WX 640 ; N dcaron ; B 19 -15 814 760 ; C -1 ; WX 807 ; N Dcroat ; B -11 0 759 730 ; C -1 ; WX 640 ; N dcroat ; B 19 -15 665 760 ; C -1 ; WX 729 ; N Emacron ; B -16 0 713 900 ; C -1 ; WX 591 ; N emacron ; B 42 -15 549 746 ; C -1 ; WX 729 ; N Ebreve ; B -16 0 713 929 ; C -1 ; WX 591 ; N ebreve ; B 42 -15 552 786 ; C -1 ; WX 729 ; N Edotaccent ; B -16 0 713 921 ; C -1 ; WX 591 ; N edotaccent ; B 42 -15 549 767 ; C -1 ; WX 729 ; N Eogonek ; B -16 -192 713 730 ; C -1 ; WX 591 ; N eogonek ; B 42 -192 549 534 ; C -1 ; WX 729 ; N Ecaron ; B -16 0 713 928 ; C -1 ; WX 591 ; N ecaron ; B 42 -15 563 800 ; C -1 ; WX 798 ; N Gcircumflex ; B 46 -15 758 928 ; C -1 ; WX 640 ; N gcircumflex ; B 33 -223 682 800 ; C -1 ; WX 798 ; N Gbreve ; B 46 -15 758 929 ; C -1 ; WX 640 ; N gbreve ; B 33 -223 682 786 ; C -1 ; WX 798 ; N Gdotaccent ; B 46 -15 758 921 ; C -1 ; WX 640 ; N gdotaccent ; B 33 -223 682 767 ; C -1 ; WX 798 ; N Gcommaaccent ; B 46 -223 758 743 ; C -1 ; WX 640 ; N gcommaaccent ; B 33 -223 682 742 ; C -1 ; WX 872 ; N Hcircumflex ; B -16 0 888 928 ; C -1 ; WX 644 ; N hcircumflex ; B -33 0 553 928 ; C -1 ; WX 872 ; N Hbar ; B -16 0 888 730 ; C -1 ; WX 644 ; N hbar ; B -33 0 553 760 ; C -1 ; WX 395 ; N Itilde ; B -16 0 463 921 ; C -1 ; WX 319 ; N itilde ; B -15 0 402 777 ; C -1 ; WX 395 ; N Imacron ; B -16 0 452 900 ; C -1 ; WX 319 ; N imacron ; B -15 0 360 746 ; C -1 ; WX 395 ; N Ibreve ; B -16 0 461 929 ; C -1 ; WX 319 ; N ibreve ; B -15 0 407 786 ; C -1 ; WX 395 ; N Iogonek ; B 2 -192 430 730 ; C -1 ; WX 319 ; N iogonek ; B -17 -192 289 736 ; C -1 ; WX 395 ; N Idotaccent ; B -16 0 411 921 ; C -1 ; WX 319 ; N dotlessi ; B -15 0 263 520 ; C -1 ; WX 801 ; N IJ ; B -16 -209 847 730 ; C -1 ; WX 533 ; N ij ; B -36 -223 580 736 ; C -1 ; WX 400 ; N Jcircumflex ; B -169 -209 454 928 ; C -1 ; WX 310 ; N jcircumflex ; B -162 -223 360 800 ; C -1 ; WX 747 ; N Kcommaaccent ; B -16 -209 795 730 ; C -1 ; WX 605 ; N kcommaaccent ; B -40 -209 612 760 ; C -1 ; WX 605 ; N kgreenlandic ; B -17 0 635 518 ; C -1 ; WX 664 ; N Lacute ; B -16 0 605 929 ; C -1 ; WX 319 ; N lacute ; B -46 0 375 928 ; C -1 ; WX 664 ; N Lcommaaccent ; B -16 -209 605 730 ; C -1 ; WX 319 ; N lcommaaccent ; B -46 -209 279 760 ; C -1 ; WX 664 ; N Lcaron ; B -16 0 605 730 ; C -1 ; WX 400 ; N lcaron ; B -46 0 492 760 ; C -1 ; WX 671 ; N Ldot ; B -16 0 632 730 ; C -1 ; WX 464 ; N ldot ; B -46 0 422 760 ; C -1 ; WX 668 ; N Lslash ; B -11 0 610 730 ; C -1 ; WX 324 ; N lslash ; B -40 0 327 760 ; C -1 ; WX 875 ; N Nacute ; B -21 -15 904 928 ; C -1 ; WX 644 ; N nacute ; B -11 0 575 777 ; C -1 ; WX 875 ; N Ncommaaccent ; B -21 -223 904 730 ; C -1 ; WX 644 ; N ncommaaccent ; B -11 -209 575 534 ; C -1 ; WX 875 ; N Ncaron ; B -21 -15 904 933 ; C -1 ; WX 644 ; N ncaron ; B -11 0 575 800 ; C -1 ; WX 866 ; N napostrophe ; B 38 0 770 743 ; C -1 ; WX 875 ; N Eng ; B -21 -223 904 730 ; C -1 ; WX 644 ; N eng ; B 10 -223 579 534 ; C -1 ; WX 819 ; N Omacron ; B 46 -15 775 900 ; C -1 ; WX 602 ; N omacron ; B 42 -15 560 746 ; C -1 ; WX 819 ; N Obreve ; B 46 -15 775 929 ; C -1 ; WX 602 ; N obreve ; B 42 -15 560 786 ; C -1 ; WX 819 ; N Ohungarumlaut ; B 46 -15 787 928 ; C -1 ; WX 602 ; N ohungarumlaut ; B 42 -15 647 800 ; C -1 ; WX 1137 ; N OE ; B 49 0 1120 730 ; C -1 ; WX 988 ; N oe ; B 42 -15 946 534 ; C -1 ; WX 752 ; N Racute ; B -16 0 717 928 ; C -1 ; WX 478 ; N racute ; B -11 0 549 777 ; C -1 ; WX 752 ; N Rcommaaccent ; B -16 -209 717 730 ; C -1 ; WX 478 ; N rcommaaccent ; B -11 -209 528 534 ; C -1 ; WX 752 ; N Rcaron ; B -16 0 717 928 ; C -1 ; WX 478 ; N rcaron ; B -11 0 542 800 ; C -1 ; WX 685 ; N Sacute ; B 28 -15 641 928 ; C -1 ; WX 513 ; N sacute ; B 11 -15 549 777 ; C -1 ; WX 685 ; N Scircumflex ; B 28 -15 641 928 ; C -1 ; WX 513 ; N scircumflex ; B 11 -15 489 800 ; C -1 ; WX 685 ; N Scedilla ; B 28 -193 641 743 ; C -1 ; WX 513 ; N scedilla ; B 11 -193 480 534 ; C -1 ; WX 685 ; N Scaron ; B 28 -15 641 928 ; C -1 ; WX 513 ; N scaron ; B 11 -15 524 800 ; C -1 ; WX 666 ; N Tcommaaccent ; B 47 -193 729 730 ; C -1 ; WX 401 ; N tcommaaccent ; B 37 -193 404 681 ; C -1 ; WX 666 ; N Tcaron ; B 47 0 729 928 ; C -1 ; WX 401 ; N tcaron ; B 54 -15 476 788 ; C -1 ; WX 666 ; N Tbar ; B 47 0 729 730 ; C -1 ; WX 401 ; N tbar ; B 32 -15 404 681 ; C -1 ; WX 842 ; N Utilde ; B 108 -15 871 921 ; C -1 ; WX 644 ; N utilde ; B 68 -15 574 777 ; C -1 ; WX 842 ; N Umacron ; B 108 -15 871 900 ; C -1 ; WX 644 ; N umacron ; B 68 -15 574 746 ; C -1 ; WX 842 ; N Ubreve ; B 108 -15 871 929 ; C -1 ; WX 644 ; N ubreve ; B 68 -15 574 786 ; C -1 ; WX 842 ; N Uring ; B 108 -15 871 1052 ; C -1 ; WX 644 ; N uring ; B 68 -15 574 869 ; C -1 ; WX 842 ; N Uhungarumlaut ; B 108 -15 871 928 ; C -1 ; WX 644 ; N uhungarumlaut ; B 68 -15 621 800 ; C -1 ; WX 842 ; N Uogonek ; B 108 -200 871 730 ; C -1 ; WX 644 ; N uogonek ; B 68 -192 574 520 ; C -1 ; WX 1027 ; N Wcircumflex ; B 65 0 1096 931 ; C -1 ; WX 855 ; N wcircumflex ; B 56 0 894 777 ; C -1 ; WX 660 ; N Ycircumflex ; B 49 0 740 931 ; C -1 ; WX 564 ; N ycircumflex ; B -37 -223 635 777 ; C -1 ; WX 660 ; N Ydieresis ; B 49 0 740 920 ; C -1 ; WX 694 ; N Zacute ; B -26 0 710 928 ; C -1 ; WX 526 ; N zacute ; B -11 0 549 777 ; C -1 ; WX 694 ; N Zdotaccent ; B -26 0 710 930 ; C -1 ; WX 526 ; N zdotaccent ; B -11 0 532 734 ; C -1 ; WX 694 ; N Zcaron ; B -26 0 710 928 ; C -1 ; WX 526 ; N zcaron ; B -11 0 532 800 ; C -1 ; WX 370 ; N longs ; B -38 0 500 760 ; C -1 ; WX 765 ; N uni0186 ; B 22 -15 715 743 ; C -1 ; WX 636 ; N uni0190 ; B 38 -15 606 743 ; C -1 ; WX 636 ; N florin ; B -72 -211 697 743 ; C -1 ; WX 711 ; N uni0194 ; B 67 -92 754 730 ; C -1 ; WX 722 ; N uni01CD ; B -77 0 672 928 ; C -1 ; WX 596 ; N uni01CE ; B 25 -15 531 800 ; C -1 ; WX 395 ; N uni01CF ; B -16 0 466 928 ; C -1 ; WX 319 ; N uni01D0 ; B -15 0 421 800 ; C -1 ; WX 819 ; N uni01D1 ; B 46 -15 775 928 ; C -1 ; WX 602 ; N uni01D2 ; B 42 -15 565 800 ; C -1 ; WX 842 ; N uni01D3 ; B 108 -15 871 928 ; C -1 ; WX 644 ; N uni01D4 ; B 68 -15 574 800 ; C -1 ; WX 644 ; N uni01D6 ; B 68 -15 574 900 ; C -1 ; WX 596 ; N uni01DF ; B 25 -15 550 900 ; C -1 ; WX 1000 ; N uni01E2 ; B -88 0 1012 899 ; C -1 ; WX 939 ; N uni01E3 ; B 25 -15 897 746 ; C -1 ; WX 819 ; N uni01EA ; B 46 -200 775 743 ; C -1 ; WX 602 ; N uni01EB ; B 42 -200 560 534 ; C -1 ; WX 819 ; N uni01EC ; B 46 -200 775 900 ; C -1 ; WX 602 ; N uni01ED ; B 42 -200 560 746 ; C -1 ; WX 685 ; N Scommaaccent ; B 28 -224 641 743 ; C -1 ; WX 513 ; N scommaaccent ; B 11 -224 480 534 ; C -1 ; WX 666 ; N uni021A ; B 47 -224 729 730 ; C -1 ; WX 401 ; N uni021B ; B 35 -224 404 681 ; C -1 ; WX 602 ; N uni022B ; B 42 -15 585 900 ; C -1 ; WX 602 ; N uni022D ; B 42 -15 582 900 ; C -1 ; WX 819 ; N uni022E ; B 46 -15 775 920 ; C -1 ; WX 602 ; N uni022F ; B 42 -15 560 766 ; C -1 ; WX 602 ; N uni0231 ; B 42 -15 585 900 ; C -1 ; WX 660 ; N uni0232 ; B 49 0 740 900 ; C -1 ; WX 564 ; N uni0233 ; B -37 -223 635 746 ; C -1 ; WX 310 ; N dotlessj ; B -162 -223 284 520 ; C -1 ; WX 596 ; N uni0250 ; B 90 -15 593 534 ; C -1 ; WX 640 ; N uni0251 ; B 41 -15 662 534 ; C -1 ; WX 640 ; N uni0252 ; B -1 -15 619 534 ; C -1 ; WX 640 ; N uni0253 ; B -44 -15 576 760 ; C -1 ; WX 560 ; N uni0254 ; B 29 -15 522 534 ; C -1 ; WX 560 ; N uni0255 ; B 51 -107 551 534 ; C -1 ; WX 646 ; N uni0256 ; B 39 -223 675 760 ; C -1 ; WX 682 ; N uni0257 ; B 19 -15 812 760 ; C -1 ; WX 591 ; N uni0258 ; B 38 -15 550 534 ; C -1 ; WX 591 ; N uni0259 ; B 43 -15 550 534 ; C -1 ; WX 843 ; N uni025A ; B 41 -15 918 534 ; C -1 ; WX 508 ; N uni025B ; B 21 -18 481 534 ; C -1 ; WX 508 ; N uni025C ; B 26 -18 492 534 ; C -1 ; WX 772 ; N uni025D ; B 26 -18 848 534 ; C -1 ; WX 613 ; N uni025E ; B 44 -18 597 534 ; C -1 ; WX 314 ; N uni025F ; B -162 -223 284 520 ; C -1 ; WX 683 ; N uni0260 ; B 11 -223 833 760 ; C -1 ; WX 640 ; N uni0261 ; B 35 -223 683 520 ; C -1 ; WX 543 ; N uni0262 ; B 42 -19 543 529 ; C -1 ; WX 711 ; N uni0263 ; B 108 -223 693 521 ; C -1 ; WX 563 ; N uni0264 ; B 80 -17 552 532 ; C -1 ; WX 644 ; N uni0265 ; B 87 -209 593 520 ; C -1 ; WX 644 ; N uni0266 ; B -33 0 553 760 ; C -1 ; WX 644 ; N uni0267 ; B -12 -223 557 760 ; C -1 ; WX 319 ; N uni0268 ; B -36 0 280 736 ; C -1 ; WX 392 ; N uni0269 ; B 76 0 263 520 ; C -1 ; WX 319 ; N uni026A ; B -15 0 348 520 ; C -1 ; WX 380 ; N uni026B ; B -11 0 368 760 ; C -1 ; WX 454 ; N uni026C ; B 23 0 411 760 ; C -1 ; WX 362 ; N uni026D ; B 48 -223 355 760 ; C -1 ; WX 704 ; N uni026E ; B -24 -224 677 760 ; C -1 ; WX 948 ; N uni026F ; B 77 0 887 534 ; C -1 ; WX 948 ; N uni0270 ; B 98 -209 907 534 ; C -1 ; WX 948 ; N uni0271 ; B 10 -223 882 534 ; C -1 ; WX 643 ; N uni0272 ; B -164 -223 596 534 ; C -1 ; WX 693 ; N uni0273 ; B 10 -223 708 534 ; C -1 ; WX 645 ; N uni0274 ; B -10 -15 670 533 ; C -1 ; WX 602 ; N uni0275 ; B 42 -15 560 534 ; C -1 ; WX 790 ; N uni0276 ; B 43 0 806 520 ; C -1 ; WX 647 ; N uni0277 ; B 29 -15 597 530 ; C -1 ; WX 602 ; N uni0278 ; B 39 -209 557 760 ; C -1 ; WX 500 ; N uni0279 ; B -14 -15 525 520 ; C -1 ; WX 500 ; N uni027A ; B -37 -15 549 760 ; C -1 ; WX 551 ; N uni027B ; B 7 -223 567 520 ; C -1 ; WX 478 ; N uni027C ; B -31 -208 548 534 ; C -1 ; WX 478 ; N uni027D ; B 76 -223 549 534 ; C -1 ; WX 452 ; N uni027E ; B -11 0 475 530 ; C -1 ; WX 452 ; N uni027F ; B 65 0 389 530 ; C -1 ; WX 593 ; N uni0280 ; B -1 0 521 520 ; C -1 ; WX 593 ; N uni0281 ; B -1 0 615 520 ; C -1 ; WX 513 ; N uni0282 ; B 11 -223 500 534 ; C -1 ; WX 271 ; N uni0283 ; B -186 -223 421 761 ; C -1 ; WX 370 ; N uni0284 ; B -186 -223 520 760 ; C -1 ; WX 486 ; N uni0285 ; B 82 -223 418 531 ; C -1 ; WX 324 ; N uni0286 ; B -175 -223 474 761 ; C -1 ; WX 401 ; N uni0287 ; B 19 -162 369 534 ; C -1 ; WX 401 ; N uni0288 ; B 44 -209 423 681 ; C -1 ; WX 644 ; N uni0289 ; B 21 -15 612 520 ; C -1 ; WX 620 ; N uni028A ; B 41 -4 580 536 ; C -1 ; WX 607 ; N uni028B ; B 76 -4 562 520 ; C -1 ; WX 564 ; N uni028C ; B -54 0 522 520 ; C -1 ; WX 855 ; N uni028D ; B -35 0 803 520 ; C -1 ; WX 564 ; N uni028E ; B -75 0 596 742 ; C -1 ; WX 655 ; N uni028F ; B 82 -1 672 532 ; C -1 ; WX 597 ; N uni0290 ; B 11 -223 664 520 ; C -1 ; WX 560 ; N uni0291 ; B -2 -93 541 520 ; C -1 ; WX 564 ; N uni0292 ; B -12 -224 561 520 ; C -1 ; WX 560 ; N uni0293 ; B 29 -224 561 520 ; C -1 ; WX 536 ; N uni0294 ; B 40 0 477 761 ; C -1 ; WX 536 ; N uni0295 ; B 98 0 491 761 ; C -1 ; WX 536 ; N uni0296 ; B 57 0 449 761 ; C -1 ; WX 513 ; N uni0297 ; B -11 -223 453 760 ; C -1 ; WX 719 ; N uni0298 ; B -7 -1 539 531 ; C -1 ; WX 551 ; N uni0299 ; B -11 0 519 531 ; C -1 ; WX 613 ; N uni029A ; B 21 -18 574 534 ; C -1 ; WX 653 ; N uni029B ; B 19 -19 784 760 ; C -1 ; WX 645 ; N uni029C ; B -11 0 662 531 ; C -1 ; WX 365 ; N uni029D ; B -172 -223 351 736 ; C -1 ; WX 605 ; N uni029E ; B 27 -209 679 520 ; C -1 ; WX 645 ; N uni029F ; B -11 0 502 531 ; C -1 ; WX 683 ; N uni02A0 ; B 38 -209 831 760 ; C -1 ; WX 536 ; N uni02A1 ; B 40 0 477 761 ; C -1 ; WX 536 ; N uni02A2 ; B 98 0 491 761 ; C -1 ; WX 996 ; N uni02A3 ; B 19 -15 979 760 ; C -1 ; WX 1033 ; N uni02A4 ; B 40 -224 999 760 ; C -1 ; WX 998 ; N uni02A5 ; B 27 -93 985 760 ; C -1 ; WX 808 ; N uni02A6 ; B 54 -15 775 681 ; C -1 ; WX 597 ; N uni02A7 ; B 67 -223 747 761 ; C -1 ; WX 782 ; N uni02A8 ; B 63 -107 785 681 ; C -1 ; WX 893 ; N uni02A9 ; B -17 -223 877 760 ; C -1 ; WX 646 ; N uni02AA ; B -44 -15 606 760 ; C -1 ; WX 675 ; N uni02AB ; B -46 0 657 760 ; C -1 ; WX 597 ; N uni02AC ; B 23 -15 610 625 ; C -1 ; WX 442 ; N uni02AD ; B -16 104 443 625 ; C -1 ; WX 780 ; N uni02AE ; B 95 -208 706 760 ; C -1 ; WX 766 ; N uni02AF ; B 97 -223 809 760 ; C -1 ; WX 432 ; N uni02B0 ; B -16 452 347 878 ; C -1 ; WX 429 ; N uni02B1 ; B -19 451 344 877 ; C -1 ; WX 264 ; N uni02B2 ; B -27 328 260 865 ; C -1 ; WX 347 ; N uni02B3 ; B -4 452 324 752 ; C -1 ; WX 347 ; N uni02B4 ; B -6 444 323 744 ; C -1 ; WX 430 ; N uni02B5 ; B 6 328 355 744 ; C -1 ; WX 391 ; N uni02B6 ; B -6 452 370 744 ; C -1 ; WX 585 ; N uni02B7 ; B 45 452 563 744 ; C -1 ; WX 423 ; N uni02B8 ; B 5 328 413 744 ; C -1 ; WX 317 ; N uni02BB ; B 78 495 285 743 ; C -1 ; WX 317 ; N afii57929 ; B 85 495 292 743 ; L n napostrophe ; C -1 ; WX 280 ; N uni02C0 ; B -19 472 254 899 ; C -1 ; WX 280 ; N uni02C1 ; B 19 472 261 899 ; C -1 ; WX 500 ; N circumflex ; B 169 616 482 800 ; C -1 ; WX 500 ; N caron ; B 205 616 517 800 ; C -1 ; WX 336 ; N uni02D0 ; B 63 0 274 434 ; C -1 ; WX 336 ; N uni02D1 ; B 118 302 245 434 ; C -1 ; WX 500 ; N breve ; B 197 645 506 786 ; C -1 ; WX 500 ; N dotaccent ; B 284 651 402 767 ; C -1 ; WX 500 ; N ring ; B 206 609 480 878 ; C -1 ; WX 500 ; N ogonek ; B 157 -192 340 0 ; C -1 ; WX 500 ; N tilde ; B 178 639 528 777 ; C -1 ; WX 500 ; N hungarumlaut ; B 188 616 565 800 ; C -1 ; WX 446 ; N uni02E0 ; B 57 393 437 810 ; C -1 ; WX 242 ; N uni02E1 ; B -19 451 179 878 ; C -1 ; WX 336 ; N uni02E2 ; B 1 444 298 751 ; C -1 ; WX 423 ; N uni02E3 ; B 0 448 388 740 ; C -1 ; WX 280 ; N uni02E4 ; B 19 472 261 899 ; C -1 ; WX 602 ; N gravecomb ; B 225 615 413 799 ; C -1 ; WX 602 ; N acutecomb ; B 302 616 563 800 ; C -1 ; WX 602 ; N uni0302 ; B 215 616 528 800 ; C -1 ; WX 602 ; N tildecomb ; B 224 639 574 777 ; C -1 ; WX 602 ; N uni0304 ; B 225 672 532 746 ; C -1 ; WX 602 ; N uni0306 ; B 243 645 552 786 ; C -1 ; WX 602 ; N uni0307 ; B 330 651 447 767 ; C -1 ; WX 602 ; N uni0308 ; B 237 651 544 767 ; C -1 ; WX 602 ; N uni030A ; B 252 609 526 878 ; C -1 ; WX 602 ; N uni030B ; B 234 616 611 800 ; C -1 ; WX 602 ; N uni030C ; B 250 616 563 800 ; C -1 ; WX 317 ; N uni0312 ; B 86 495 260 644 ; C -1 ; WX 644 ; N uni0321 ; B 138 -223 497 63 ; C -1 ; WX 500 ; N uni0322 ; B 54 -223 361 63 ; C -1 ; WX 500 ; N uni0326 ; B 59 -224 232 -74 ; C -1 ; WX 278 ; N uni0374 ; B 54 556 227 800 ; C -1 ; WX 278 ; N uni0375 ; B 54 -209 227 36 ; C -1 ; WX 208 ; N uni037A ; B 47 -211 166 -59 ; C -1 ; WX 336 ; N uni037E ; B -12 -137 280 435 ; C -1 ; WX 500 ; N tonos ; B 256 616 517 800 ; C -1 ; WX 500 ; N dieresistonos ; B 191 651 582 997 ; C -1 ; WX 722 ; N Alphatonos ; B -77 0 672 800 ; C -1 ; WX 317 ; N anoteleia ; B 91 282 225 413 ; C -1 ; WX 899 ; N Epsilontonos ; B 72 0 883 800 ; C -1 ; WX 1039 ; N Etatonos ; B 72 0 1055 800 ; C -1 ; WX 562 ; N Iotatonos ; B 72 0 578 800 ; C -1 ; WX 835 ; N Omicrontonos ; B 61 -15 790 800 ; C -1 ; WX 897 ; N Upsilontonos ; B 72 0 978 800 ; C -1 ; WX 852 ; N Omegatonos ; B 13 0 805 800 ; C -1 ; WX 392 ; N iotadieresistonos ; B 77 -6 492 997 ; C -1 ; WX 722 ; N Alpha ; B -77 0 672 730 ; C -1 ; WX 734 ; N Beta ; B -16 0 678 730 ; C -1 ; WX 693 ; N Gamma ; B -16 0 723 730 ; C -1 ; WX 722 ; N uni0394 ; B -33 0 609 730 ; C -1 ; WX 729 ; N Epsilon ; B -16 0 713 730 ; C -1 ; WX 694 ; N Zeta ; B -26 0 710 730 ; C -1 ; WX 872 ; N Eta ; B -16 0 888 730 ; C -1 ; WX 819 ; N Theta ; B 46 -15 775 743 ; C -1 ; WX 395 ; N Iota ; B -16 0 411 730 ; C -1 ; WX 747 ; N Kappa ; B -16 0 795 730 ; C -1 ; WX 722 ; N Lambda ; B -77 0 672 730 ; C -1 ; WX 1023 ; N Mu ; B -16 0 1044 730 ; C -1 ; WX 875 ; N Nu ; B -21 -15 904 730 ; C -1 ; WX 703 ; N Xi ; B -16 0 713 730 ; C -1 ; WX 819 ; N Omicron ; B 46 -15 775 743 ; C -1 ; WX 872 ; N Pi ; B -16 0 888 730 ; C -1 ; WX 672 ; N Rho ; B -16 0 673 730 ; C -1 ; WX 707 ; N Sigma ; B -31 0 711 730 ; C -1 ; WX 666 ; N Tau ; B 47 0 729 730 ; C -1 ; WX 660 ; N Upsilon ; B 49 0 740 730 ; C -1 ; WX 819 ; N Phi ; B 51 0 770 730 ; C -1 ; WX 711 ; N Chi ; B -65 0 745 730 ; C -1 ; WX 876 ; N Psi ; B 107 0 910 730 ; C -1 ; WX 829 ; N Omega ; B -11 0 782 743 ; C -1 ; WX 395 ; N Iotadieresis ; B -16 0 443 920 ; C -1 ; WX 660 ; N Upsilondieresis ; B 49 0 740 920 ; C -1 ; WX 649 ; N alphatonos ; B 41 -15 666 800 ; C -1 ; WX 536 ; N epsilontonos ; B 22 -20 517 800 ; C -1 ; WX 599 ; N etatonos ; B 90 -209 577 800 ; C -1 ; WX 392 ; N iotatonos ; B 77 -6 427 800 ; C -1 ; WX 607 ; N upsilondieresistonos ; B 76 -4 624 997 ; C -1 ; WX 649 ; N alpha ; B 41 -15 666 534 ; C -1 ; WX 578 ; N beta ; B -32 -209 530 766 ; C -1 ; WX 617 ; N gamma ; B 84 -209 661 520 ; C -1 ; WX 602 ; N delta ; B 19 -15 556 766 ; C -1 ; WX 536 ; N epsilon ; B 22 -20 499 525 ; C -1 ; WX 541 ; N zeta ; B 40 -209 592 760 ; C -1 ; WX 599 ; N eta ; B 90 -209 577 534 ; C -1 ; WX 602 ; N theta ; B 35 -11 566 771 ; C -1 ; WX 392 ; N iota ; B 77 -6 302 520 ; C -1 ; WX 655 ; N kappa ; B -10 0 642 520 ; C -1 ; WX 633 ; N lambda ; B -34 0 542 766 ; C -1 ; WX 649 ; N uni03BC ; B 44 -209 600 520 ; C -1 ; WX 607 ; N nu ; B 71 0 576 520 ; C -1 ; WX 550 ; N xi ; B 29 -209 592 760 ; C -1 ; WX 602 ; N omicron ; B 42 -15 560 534 ; C -1 ; WX 657 ; N pi ; B -10 0 672 520 ; C -1 ; WX 587 ; N rho ; B -10 -209 565 534 ; C -1 ; WX 560 ; N sigma1 ; B 61 -209 561 534 ; C -1 ; WX 682 ; N sigma ; B 43 -15 706 520 ; C -1 ; WX 553 ; N tau ; B 66 -6 567 520 ; C -1 ; WX 607 ; N upsilon ; B 76 -4 569 520 ; C -1 ; WX 700 ; N phi ; B 52 -209 686 522 ; C -1 ; WX 605 ; N chi ; B -59 -223 655 534 ; C -1 ; WX 784 ; N psi ; B 128 -209 792 520 ; C -1 ; WX 815 ; N omega ; B 32 -4 777 520 ; C -1 ; WX 392 ; N iotadieresis ; B 77 -6 410 767 ; C -1 ; WX 607 ; N upsilondieresis ; B 76 -4 569 767 ; C -1 ; WX 602 ; N omicrontonos ; B 42 -15 571 800 ; C -1 ; WX 607 ; N upsilontonos ; B 76 -4 569 800 ; C -1 ; WX 815 ; N omegatonos ; B 32 -4 777 800 ; C -1 ; WX 729 ; N uni0400 ; B -16 0 713 928 ; C -1 ; WX 729 ; N afii10023 ; B -16 0 713 920 ; C -1 ; WX 798 ; N afii10051 ; B 19 -217 724 730 ; C -1 ; WX 693 ; N afii10052 ; B -16 0 723 928 ; C -1 ; WX 765 ; N afii10053 ; B 46 -15 747 743 ; C -1 ; WX 685 ; N afii10054 ; B 28 -15 641 743 ; C -1 ; WX 395 ; N afii10055 ; B -16 0 411 730 ; C -1 ; WX 395 ; N afii10056 ; B -16 0 472 920 ; C -1 ; WX 400 ; N afii10057 ; B -169 -209 447 730 ; C -1 ; WX 1065 ; N afii10058 ; B -102 -18 992 730 ; C -1 ; WX 1118 ; N afii10059 ; B -16 0 1042 730 ; C -1 ; WX 872 ; N afii10060 ; B -2 0 757 730 ; C -1 ; WX 747 ; N afii10061 ; B -16 0 795 928 ; C -1 ; WX 872 ; N uni040D ; B -16 0 888 928 ; C -1 ; WX 747 ; N afii10062 ; B 61 0 774 929 ; C -1 ; WX 872 ; N afii10145 ; B -1 -157 903 730 ; C -1 ; WX 722 ; N afii10017 ; B -77 0 672 730 ; C -1 ; WX 734 ; N afii10018 ; B -16 0 713 730 ; C -1 ; WX 734 ; N afii10019 ; B -16 0 678 730 ; C -1 ; WX 693 ; N afii10020 ; B -16 0 723 730 ; C -1 ; WX 872 ; N afii10021 ; B -51 -206 856 730 ; C -1 ; WX 729 ; N afii10022 ; B -16 0 713 730 ; C -1 ; WX 1105 ; N afii10024 ; B -7 0 1087 730 ; C -1 ; WX 636 ; N afii10025 ; B 12 -15 576 743 ; C -1 ; WX 872 ; N afii10026 ; B -16 0 888 730 ; C -1 ; WX 872 ; N afii10027 ; B -16 0 888 929 ; C -1 ; WX 747 ; N afii10028 ; B -16 0 795 730 ; C -1 ; WX 872 ; N afii10029 ; B -102 -18 838 730 ; C -1 ; WX 1023 ; N afii10030 ; B -16 0 1044 730 ; C -1 ; WX 872 ; N afii10031 ; B -16 0 888 730 ; C -1 ; WX 819 ; N afii10032 ; B 46 -15 775 743 ; C -1 ; WX 872 ; N afii10033 ; B -16 0 888 730 ; C -1 ; WX 672 ; N afii10034 ; B -16 0 673 730 ; C -1 ; WX 765 ; N afii10035 ; B 46 -15 747 743 ; C -1 ; WX 666 ; N afii10036 ; B 47 0 729 730 ; C -1 ; WX 747 ; N afii10037 ; B 61 0 774 730 ; C -1 ; WX 980 ; N afii10038 ; B 46 -157 944 886 ; C -1 ; WX 711 ; N afii10039 ; B -65 0 745 730 ; C -1 ; WX 872 ; N afii10040 ; B -1 -157 903 730 ; C -1 ; WX 749 ; N afii10041 ; B 33 0 754 730 ; C -1 ; WX 1024 ; N afii10042 ; B -16 0 1041 730 ; C -1 ; WX 1047 ; N afii10043 ; B -1 -157 1056 730 ; C -1 ; WX 760 ; N afii10044 ; B 73 0 686 730 ; C -1 ; WX 1039 ; N afii10045 ; B 17 0 1000 730 ; C -1 ; WX 690 ; N afii10046 ; B 17 0 598 730 ; C -1 ; WX 765 ; N afii10047 ; B 22 -15 715 743 ; C -1 ; WX 1193 ; N afii10048 ; B -16 -15 1138 743 ; C -1 ; WX 843 ; N afii10049 ; B -16 0 848 730 ; C -1 ; WX 596 ; N afii10065 ; B 25 -15 528 534 ; C -1 ; WX 602 ; N afii10066 ; B 21 -15 585 748 ; C -1 ; WX 561 ; N afii10067 ; B -15 0 520 520 ; C -1 ; WX 537 ; N afii10068 ; B -17 0 545 520 ; C -1 ; WX 684 ; N afii10069 ; B -50 -167 644 520 ; C -1 ; WX 591 ; N afii10070 ; B 42 -15 549 534 ; C -1 ; WX 850 ; N afii10072 ; B 3 0 816 520 ; C -1 ; WX 536 ; N afii10073 ; B 3 -20 475 525 ; C -1 ; WX 666 ; N afii10074 ; B -17 0 665 520 ; C -1 ; WX 666 ; N afii10075 ; B -17 0 665 785 ; C -1 ; WX 605 ; N afii10076 ; B -17 0 635 520 ; C -1 ; WX 623 ; N afii10077 ; B -64 -7 631 520 ; C -1 ; WX 839 ; N afii10078 ; B -17 0 852 520 ; C -1 ; WX 666 ; N afii10079 ; B -17 0 665 520 ; C -1 ; WX 602 ; N afii10080 ; B 42 -15 560 534 ; C -1 ; WX 666 ; N afii10081 ; B -17 0 670 520 ; C -1 ; WX 640 ; N afii10082 ; B -44 -209 617 534 ; C -1 ; WX 560 ; N afii10083 ; B 42 -15 542 534 ; C -1 ; WX 553 ; N afii10084 ; B 65 0 566 520 ; C -1 ; WX 564 ; N afii10085 ; B -37 -223 635 520 ; C -1 ; WX 737 ; N afii10086 ; B 30 -155 713 675 ; C -1 ; WX 563 ; N afii10087 ; B -29 0 581 520 ; C -1 ; WX 689 ; N afii10088 ; B -9 -139 678 520 ; C -1 ; WX 666 ; N afii10089 ; B 74 0 665 520 ; C -1 ; WX 850 ; N afii10090 ; B -22 0 847 520 ; C -1 ; WX 903 ; N afii10091 ; B -9 -139 860 520 ; C -1 ; WX 552 ; N afii10092 ; B 41 0 485 520 ; C -1 ; WX 738 ; N afii10093 ; B -22 0 754 520 ; C -1 ; WX 491 ; N afii10094 ; B -22 0 423 520 ; C -1 ; WX 560 ; N afii10095 ; B 29 -15 521 534 ; C -1 ; WX 870 ; N afii10096 ; B -17 -15 833 534 ; C -1 ; WX 646 ; N afii10097 ; B -1 0 615 520 ; C -1 ; WX 591 ; N uni0450 ; B 42 -15 549 799 ; C -1 ; WX 591 ; N afii10071 ; B 42 -15 549 767 ; C -1 ; WX 620 ; N afii10099 ; B -12 -223 578 760 ; C -1 ; WX 537 ; N afii10100 ; B -17 0 552 800 ; C -1 ; WX 560 ; N afii10101 ; B 42 -15 542 534 ; C -1 ; WX 513 ; N afii10102 ; B 11 -15 480 534 ; C -1 ; WX 319 ; N afii10103 ; B -36 0 270 736 ; C -1 ; WX 319 ; N afii10104 ; B -39 0 366 767 ; C -1 ; WX 310 ; N afii10105 ; B -184 -223 295 736 ; C -1 ; WX 781 ; N afii10106 ; B -64 -7 739 520 ; C -1 ; WX 797 ; N afii10107 ; B -17 0 751 520 ; C -1 ; WX 644 ; N afii10108 ; B -33 0 579 760 ; C -1 ; WX 605 ; N afii10109 ; B -17 0 635 800 ; C -1 ; WX 666 ; N uni045D ; B -17 0 665 799 ; C -1 ; WX 564 ; N afii10110 ; B -37 -223 635 786 ; C -1 ; WX 655 ; N afii10193 ; B -9 -139 678 520 ; C -1 ; WX 693 ; N afii10050 ; B -16 0 751 873 ; C -1 ; WX 537 ; N afii10098 ; B -17 0 574 668 ; C -1 ; WX 693 ; N uni0492 ; B -16 0 723 730 ; C -1 ; WX 537 ; N uni0493 ; B -17 0 545 520 ; C -1 ; WX 747 ; N uni049A ; B -16 -157 795 730 ; C -1 ; WX 605 ; N uni049B ; B -17 -139 635 520 ; C -1 ; WX 711 ; N uni04B2 ; B -65 -157 745 730 ; C -1 ; WX 563 ; N uni04B3 ; B -29 -139 581 520 ; C -1 ; WX 801 ; N uni1E12 ; B -16 -189 754 730 ; C -1 ; WX 640 ; N uni1E13 ; B 19 -258 601 760 ; C -1 ; WX 664 ; N uni1E3C ; B -16 -189 605 730 ; C -1 ; WX 319 ; N uni1E3D ; B -118 -244 279 760 ; C -1 ; WX 875 ; N uni1E44 ; B -21 -15 904 916 ; C -1 ; WX 644 ; N uni1E45 ; B -11 0 575 708 ; C -1 ; WX 875 ; N uni1E4A ; B -21 -203 904 730 ; C -1 ; WX 644 ; N uni1E4B ; B -11 -244 575 534 ; C -1 ; WX 666 ; N uni1E70 ; B 47 -189 729 730 ; C -1 ; WX 401 ; N uni1E71 ; B -21 -258 404 681 ; C -1 ; WX 1027 ; N Wgrave ; B 65 0 1096 986 ; C -1 ; WX 855 ; N wgrave ; B 56 0 894 777 ; C -1 ; WX 1027 ; N Wacute ; B 65 0 1096 986 ; C -1 ; WX 855 ; N wacute ; B 56 0 894 777 ; C -1 ; WX 1027 ; N Wdieresis ; B 65 0 1096 917 ; C -1 ; WX 855 ; N wdieresis ; B 56 0 894 708 ; C -1 ; WX 660 ; N Ygrave ; B 49 0 740 986 ; C -1 ; WX 564 ; N ygrave ; B -37 -223 635 777 ; C -1 ; WX 337 ; N uni2010 ; B 36 229 302 307 ; C -1 ; WX 337 ; N uni2011 ; B 36 229 302 307 ; C -1 ; WX 500 ; N figuredash ; B -7 232 507 298 ; C -1 ; WX 500 ; N endash ; B -7 232 507 298 ; C -1 ; WX 1000 ; N emdash ; B -7 232 1007 298 ; C -1 ; WX 1000 ; N afii00208 ; B -7 232 1007 298 ; C -1 ; WX 317 ; N quoteleft ; B 78 495 285 743 ; C -1 ; WX 317 ; N quoteright ; B 54 481 262 730 ; C -1 ; WX 317 ; N quotesinglbase ; B 27 -137 254 111 ; C -1 ; WX 511 ; N quotedblleft ; B 78 495 478 743 ; C -1 ; WX 511 ; N quotedblright ; B 54 481 455 730 ; C -1 ; WX 518 ; N quotedblbase ; B 27 -137 446 111 ; C -1 ; WX 500 ; N dagger ; B 52 -97 514 730 ; C -1 ; WX 500 ; N daggerdbl ; B -14 -97 514 730 ; C -1 ; WX 589 ; N bullet ; B 146 226 444 517 ; C -1 ; WX 1000 ; N ellipsis ; B 100 -15 900 117 ; C -1 ; WX 1341 ; N perthousand ; B 84 -15 1259 743 ; C -1 ; WX 399 ; N guilsinglleft ; B 73 68 350 518 ; C -1 ; WX 399 ; N guilsinglright ; B 50 68 328 518 ; C -1 ; WX 432 ; N uni207F ; B -4 451 359 751 ; C -1 ; WX 636 ; N Euro ; B -24 -15 605 743 ; C -1 ; WX 1000 ; N trademark ; B 129 446 854 730 ; C -1 ; WX 517 ; N partialdiff ; B 18 -13 489 647 ; C -1 ; WX 698 ; N Delta ; B -46 0 597 730 ; C -1 ; WX 795 ; N product ; B -63 -192 858 720 ; C -1 ; WX 713 ; N summation ; B -81 -192 683 720 ; C -1 ; WX 837 ; N minus ; B 98 273 740 354 ; C -1 ; WX 166 ; N fraction ; B -257 -15 424 743 ; C -1 ; WX 317 ; N periodcentered ; B 91 282 225 413 ; C -1 ; WX 637 ; N radical ; B 36 -21 718 812 ; C -1 ; WX 833 ; N infinity ; B 102 107 731 492 ; C -1 ; WX 520 ; N integral ; B -56 -182 576 757 ; C -1 ; WX 837 ; N approxequal ; B 71 138 767 489 ; C -1 ; WX 837 ; N notequal ; B 79 19 759 608 ; C -1 ; WX 837 ; N lessequal ; B 49 0 789 583 ; C -1 ; WX 837 ; N greaterequal ; B 49 0 754 583 ; C -1 ; WX 763 ; N house ; B 71 0 693 596 ; C -1 ; WX 837 ; N revlogicalnot ; B 105 140 732 421 ; C -1 ; WX 513 ; N uni2311 ; B 2 126 511 634 ; C -1 ; WX 837 ; N uni2319 ; B 105 140 732 421 ; C -1 ; WX 918 ; N uni237D ; B 5 -228 914 101 ; C -1 ; WX 763 ; N uni2423 ; B 26 -228 712 101 ; C -1 ; WX 769 ; N upblock ; B -10 132 779 770 ; C -1 ; WX 769 ; N uni2581 ; B -10 -505 779 -345 ; C -1 ; WX 769 ; N uni2582 ; B -10 -505 779 -186 ; C -1 ; WX 769 ; N uni2583 ; B -10 -505 779 -26 ; C -1 ; WX 769 ; N dnblock ; B -10 -505 779 133 ; C -1 ; WX 769 ; N uni2585 ; B -10 -505 779 292 ; C -1 ; WX 769 ; N uni2586 ; B -10 -505 779 451 ; C -1 ; WX 769 ; N uni2587 ; B -10 -505 779 611 ; C -1 ; WX 769 ; N block ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2589 ; B -10 -505 681 770 ; C -1 ; WX 769 ; N uni258A ; B -10 -505 582 770 ; C -1 ; WX 769 ; N uni258B ; B -10 -505 483 770 ; C -1 ; WX 769 ; N lfblock ; B -10 -505 385 770 ; C -1 ; WX 769 ; N uni258D ; B -10 -505 286 770 ; C -1 ; WX 769 ; N uni258E ; B -10 -505 188 770 ; C -1 ; WX 769 ; N uni258F ; B -10 -505 89 770 ; C -1 ; WX 769 ; N rtblock ; B 384 -505 779 770 ; C -1 ; WX 769 ; N ltshade ; B -10 -505 681 770 ; C -1 ; WX 769 ; N shade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N dkshade ; B -10 -505 779 770 ; C -1 ; WX 769 ; N uni2594 ; B -10 610 779 770 ; C -1 ; WX 769 ; N uni2595 ; B 680 -505 779 770 ; C -1 ; WX 769 ; N uni2596 ; B -10 -505 384 133 ; C -1 ; WX 769 ; N uni2597 ; B 384 -505 778 133 ; C -1 ; WX 769 ; N uni2598 ; B -10 132 384 770 ; C -1 ; WX 769 ; N uni2599 ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259A ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259B ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259C ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259D ; B 384 132 778 770 ; C -1 ; WX 769 ; N uni259E ; B -10 -505 778 770 ; C -1 ; WX 769 ; N uni259F ; B -10 -505 778 770 ; C -1 ; WX 494 ; N lozenge ; B 3 -233 492 808 ; C -1 ; WX 771 ; N uni2638 ; B 3 7 769 753 ; C -1 ; WX 666 ; N fi ; B -38 0 592 760 ; C -1 ; WX 666 ; N fl ; B -38 0 626 760 ; C -1 ; WX 1025 ; N uniFFFD ; B 94 -84 1091 913 ; C -1 ; WX 500 ; N dlLtcaron ; B 174 616 338 800 ; C -1 ; WX 500 ; N Dieresis ; B 176 624 484 738 ; C -1 ; WX 500 ; N Acute ; B 252 616 463 746 ; C -1 ; WX 500 ; N Tilde ; B 157 631 501 739 ; C -1 ; WX 500 ; N Grave ; B 215 616 376 746 ; C -1 ; WX 500 ; N Circumflex ; B 154 616 467 746 ; C -1 ; WX 500 ; N Caron ; B 184 616 497 746 ; C -1 ; WX 400 ; N foursuperior ; B 7 326 360 734 ; C -1 ; WX 500 ; N Breve ; B 197 627 502 747 ; C -1 ; WX 500 ; N Dotaccent ; B 281 625 399 739 ; C -1 ; WX 500 ; N Hungarumlaut ; B 226 616 592 746 ; C -1 ; WX 500 ; N Doubleacute ; B 53 616 369 746 ; EndCharMetrics StartKernData StartKernPairs 1050 KPX hyphen Tcaron -35 KPX hyphen Yacute -109 KPX hyphen Ydieresis -109 KPX hyphen Y -109 KPX hyphen X -35 KPX hyphen W -54 KPX hyphen V -72 KPX hyphen T -35 KPX A tcaron -17 KPX A Tcaron -54 KPX A yacute -40 KPX A Yacute -40 KPX A fl -17 KPX A fi -17 KPX A Ydieresis -40 KPX A ydieresis -40 KPX A quoteright -146 KPX A quotedblright -146 KPX A y -40 KPX A w -44 KPX A v -40 KPX A t -17 KPX A f -17 KPX A Y -40 KPX A W -40 KPX A V -49 KPX A T -54 KPX B Ccaron 18 KPX B Cacute 18 KPX B Gbreve 18 KPX B Yacute -17 KPX B Ograve 18 KPX B Ocircumflex 18 KPX B Oacute 18 KPX B Ydieresis -17 KPX B OE 18 KPX B Otilde 18 KPX B Oslash 18 KPX B Odieresis 18 KPX B Ccedilla 18 KPX B Y -17 KPX B O 18 KPX B G 18 KPX B C 18 KPX B hyphen 18 KPX C period -35 KPX C comma -35 KPX D V -17 KPX D period -35 KPX D hyphen 18 KPX D comma -35 KPX E hyphen 18 KPX F ecaron -54 KPX F Aacute -86 KPX F Acircumflex -86 KPX F oe -54 KPX F Atilde -86 KPX F Agrave -86 KPX F oslash -54 KPX F ae -67 KPX F otilde -54 KPX F odieresis -54 KPX F ocircumflex -54 KPX F ograve -54 KPX F oacute -54 KPX F edieresis -54 KPX F ecircumflex -54 KPX F egrave -54 KPX F eacute -54 KPX F aring -67 KPX F atilde -67 KPX F adieresis -67 KPX F acircumflex -67 KPX F agrave -67 KPX F aacute -67 KPX F Adieresis -86 KPX F o -54 KPX F e -54 KPX F a -67 KPX F A -86 KPX F semicolon -35 KPX F colon -35 KPX F period -155 KPX F hyphen -44 KPX F comma -155 KPX G Yacute -17 KPX G Ydieresis -17 KPX G Y -17 KPX G period -35 KPX G hyphen 18 KPX G comma -35 KPX J semicolon -40 KPX J colon -40 KPX J period -77 KPX J comma -58 KPX K uring -21 KPX K Uring -35 KPX K ecaron -26 KPX K Ccaron -26 KPX K Cacute -26 KPX K yacute -63 KPX K Yacute -26 KPX K Ugrave -35 KPX K Ucircumflex -35 KPX K Uacute -35 KPX K Ograve -26 KPX K Ocircumflex -26 KPX K Oacute -26 KPX K Aacute -40 KPX K Acircumflex -40 KPX K Ydieresis -26 KPX K ydieresis -63 KPX K oe -26 KPX K OE -26 KPX K Otilde -26 KPX K Atilde -40 KPX K Agrave -40 KPX K oslash -17 KPX K Oslash -26 KPX K udieresis -21 KPX K ucircumflex -21 KPX K ugrave -21 KPX K uacute -21 KPX K otilde -26 KPX K odieresis -26 KPX K ocircumflex -26 KPX K ograve -26 KPX K oacute -26 KPX K edieresis -26 KPX K ecircumflex -26 KPX K egrave -26 KPX K eacute -26 KPX K Udieresis -35 KPX K Odieresis -26 KPX K Ccedilla -26 KPX K Adieresis -40 KPX K y -63 KPX K u -21 KPX K o -26 KPX K e -26 KPX K Y -26 KPX K W -35 KPX K U -35 KPX K O -26 KPX K C -26 KPX K A -40 KPX K hyphen -72 KPX L Uring -54 KPX L Tcaron -81 KPX L yacute -17 KPX L Yacute -63 KPX L Ugrave -54 KPX L Ucircumflex -54 KPX L Uacute -54 KPX L Ydieresis -63 KPX L ydieresis -17 KPX L quoteright -239 KPX L quotedblright -239 KPX L Udieresis -54 KPX L y -17 KPX L Y -63 KPX L W -86 KPX L V -118 KPX L U -54 KPX L T -81 KPX N semicolon -35 KPX N colon -35 KPX N period -63 KPX N comma -63 KPX O X -17 KPX O V -17 KPX O period -58 KPX O hyphen 36 KPX O comma -58 KPX P Uring -17 KPX P ecaron -44 KPX P scedilla -26 KPX P scaron -26 KPX P Ugrave -17 KPX P Ucircumflex -17 KPX P Uacute -17 KPX P Aacute -91 KPX P Acircumflex -91 KPX P oe -40 KPX P Atilde -91 KPX P Agrave -91 KPX P oslash -40 KPX P ae -44 KPX P otilde -40 KPX P odieresis -40 KPX P ocircumflex -40 KPX P ograve -40 KPX P oacute -40 KPX P edieresis -44 KPX P ecircumflex -44 KPX P egrave -44 KPX P eacute -44 KPX P aring -44 KPX P atilde -44 KPX P adieresis -44 KPX P acircumflex -44 KPX P agrave -44 KPX P aacute -44 KPX P Udieresis -17 KPX P Adieresis -91 KPX P s -26 KPX P o -40 KPX P e -44 KPX P a -44 KPX P U -17 KPX P A -91 KPX P semicolon -35 KPX P colon -35 KPX P period -202 KPX P hyphen -54 KPX P comma -202 KPX Q quoteright 18 KPX Q quotedblright 18 KPX Q period -49 KPX Q hyphen 36 KPX Q comma -49 KPX R Tcaron -17 KPX R yacute -17 KPX R Yacute -30 KPX R Ydieresis -30 KPX R ydieresis -17 KPX R quoteright -54 KPX R quotedblright -54 KPX R oslash 18 KPX R ae 22 KPX R aring 22 KPX R atilde 22 KPX R adieresis 22 KPX R acircumflex 22 KPX R agrave 22 KPX R aacute 22 KPX R y -17 KPX R a 22 KPX R Y -30 KPX R W -21 KPX R V -35 KPX R T -17 KPX S Scedilla -17 KPX S Scaron -17 KPX S S -17 KPX S period -35 KPX S hyphen 36 KPX S comma -35 KPX T Tcaron 18 KPX T ecaron -77 KPX T ccaron -77 KPX T cacute -77 KPX T scedilla -72 KPX T scaron -72 KPX T Aacute -54 KPX T Acircumflex -54 KPX T oe -77 KPX T Atilde -54 KPX T Agrave -54 KPX T oslash -77 KPX T ae -77 KPX T otilde -77 KPX T odieresis -77 KPX T ocircumflex -77 KPX T ograve -77 KPX T oacute -77 KPX T edieresis -77 KPX T ecircumflex -77 KPX T egrave -77 KPX T eacute -77 KPX T ccedilla -77 KPX T aring -77 KPX T atilde -77 KPX T adieresis -77 KPX T acircumflex -77 KPX T agrave -77 KPX T aacute -77 KPX T Adieresis -54 KPX T w -35 KPX T s -72 KPX T o -77 KPX T e -77 KPX T c -77 KPX T a -77 KPX T T 18 KPX T A -54 KPX T semicolon -35 KPX T colon -35 KPX T period -146 KPX T hyphen -128 KPX T comma -146 KPX U Aacute -30 KPX U Acircumflex -30 KPX U Atilde -30 KPX U Agrave -30 KPX U Adieresis -30 KPX U J -26 KPX U A -30 KPX U semicolon -35 KPX U colon -35 KPX U period -91 KPX U hyphen -17 KPX U comma -91 KPX V uring -63 KPX V ecaron -91 KPX V yacute -40 KPX V Ograve -17 KPX V Ocircumflex -17 KPX V Oacute -17 KPX V Aacute -67 KPX V Acircumflex -67 KPX V ydieresis -40 KPX V quoteright 36 KPX V quotedblright 36 KPX V oe -91 KPX V OE -17 KPX V Otilde -17 KPX V Atilde -67 KPX V Agrave -67 KPX V oslash -91 KPX V ae -91 KPX V Oslash -17 KPX V udieresis -63 KPX V ucircumflex -63 KPX V ugrave -63 KPX V uacute -63 KPX V otilde -91 KPX V odieresis -91 KPX V ocircumflex -91 KPX V ograve -91 KPX V oacute -91 KPX V edieresis -91 KPX V ecircumflex -91 KPX V egrave -91 KPX V eacute -91 KPX V aring -91 KPX V atilde -91 KPX V adieresis -91 KPX V acircumflex -91 KPX V agrave -91 KPX V aacute -91 KPX V Odieresis -17 KPX V Adieresis -67 KPX V y -40 KPX V u -63 KPX V o -91 KPX V i -17 KPX V e -91 KPX V a -91 KPX V O -17 KPX V A -67 KPX V semicolon -100 KPX V colon -100 KPX V period -174 KPX V hyphen -91 KPX V comma -174 KPX W udieresis -40 KPX W aring -86 KPX W ae -67 KPX W semicolon -86 KPX W ograve -67 KPX W hyphen -72 KPX W period -174 KPX W uring -40 KPX W otilde -67 KPX W edieresis -81 KPX W ugrave -40 KPX W comma -174 KPX W agrave -86 KPX W Atilde -49 KPX W ecircumflex -81 KPX W racute -44 KPX W quotedblright 18 KPX W egrave -81 KPX W Adieresis -49 KPX W Aacute -49 KPX W quoteright 18 KPX W ucircumflex -40 KPX W yacute -21 KPX W atilde -86 KPX W Acircumflex -49 KPX W oslash -67 KPX W ocircumflex -67 KPX W A -49 KPX W a -86 KPX W adieresis -86 KPX W odieresis -67 KPX W uacute -40 KPX W aacute -86 KPX W rcaron -44 KPX W acircumflex -86 KPX W eacute -81 KPX W ecaron -81 KPX W e -81 KPX W i -17 KPX W oe -67 KPX W ydieresis -21 KPX W o -67 KPX W r -44 KPX W u -40 KPX W Agrave -49 KPX W y -21 KPX W colon -86 KPX W oacute -67 KPX X Ccaron -17 KPX X Cacute -17 KPX X Ograve -17 KPX X Ocircumflex -17 KPX X Oacute -17 KPX X Aacute -35 KPX X Acircumflex -35 KPX X OE -17 KPX X Otilde -17 KPX X Atilde -35 KPX X Agrave -35 KPX X Oslash -17 KPX X Odieresis -17 KPX X Ccedilla -17 KPX X Adieresis -35 KPX X O -17 KPX X C -17 KPX X A -35 KPX X hyphen -35 KPX Y uring -86 KPX Y ecaron -86 KPX Y Ccaron -17 KPX Y Cacute -17 KPX Y Aacute -77 KPX Y Acircumflex -77 KPX Y oe -104 KPX Y Atilde -77 KPX Y Agrave -77 KPX Y oslash -86 KPX Y ae -95 KPX Y udieresis -86 KPX Y ucircumflex -86 KPX Y ugrave -86 KPX Y uacute -86 KPX Y otilde -86 KPX Y odieresis -86 KPX Y ocircumflex -86 KPX Y ograve -86 KPX Y oacute -86 KPX Y edieresis -86 KPX Y ecircumflex -86 KPX Y egrave -86 KPX Y eacute -86 KPX Y aring -77 KPX Y atilde -77 KPX Y adieresis -77 KPX Y acircumflex -77 KPX Y agrave -77 KPX Y aacute -77 KPX Y Ccedilla -17 KPX Y Adieresis -77 KPX Y u -86 KPX Y o -86 KPX Y i -17 KPX Y e -86 KPX Y a -77 KPX Y C -17 KPX Y A -77 KPX Y semicolon -123 KPX Y colon -123 KPX Y period -128 KPX Y hyphen -109 KPX Y comma -128 KPX Z period -17 KPX Z comma -17 KPX f quoteright 73 KPX f quotedblright 73 KPX f quotedblleft 18 KPX f period -35 KPX f hyphen -35 KPX f comma -35 KPX k hyphen -17 KPX o period -17 KPX r period -109 KPX r comma -109 KPX v period -118 KPX v comma -118 KPX w period -118 KPX w comma -118 KPX x hyphen -17 KPX y period -132 KPX y comma -132 KPX Agrave tcaron -17 KPX Agrave Tcaron -54 KPX Agrave yacute -40 KPX Agrave Yacute -40 KPX Agrave fl -17 KPX Agrave fi -17 KPX Agrave Ydieresis -40 KPX Agrave ydieresis -40 KPX Agrave quoteright -146 KPX Agrave quotedblright -146 KPX Agrave y -40 KPX Agrave w -44 KPX Agrave v -40 KPX Agrave t -17 KPX Agrave f -17 KPX Agrave Y -40 KPX Agrave W -40 KPX Agrave V -49 KPX Agrave T -54 KPX Aacute tcaron -17 KPX Aacute Tcaron -54 KPX Aacute yacute -40 KPX Aacute Yacute -40 KPX Aacute fl -17 KPX Aacute fi -17 KPX Aacute Ydieresis -40 KPX Aacute ydieresis -40 KPX Aacute quoteright -146 KPX Aacute quotedblright -146 KPX Aacute y -40 KPX Aacute w -44 KPX Aacute v -40 KPX Aacute t -17 KPX Aacute f -17 KPX Aacute Y -40 KPX Aacute W -40 KPX Aacute V -49 KPX Aacute T -54 KPX Acircumflex tcaron -17 KPX Acircumflex Tcaron -54 KPX Acircumflex yacute -40 KPX Acircumflex Yacute -40 KPX Acircumflex fl -17 KPX Acircumflex fi -17 KPX Acircumflex Ydieresis -40 KPX Acircumflex ydieresis -40 KPX Acircumflex quoteright -146 KPX Acircumflex quotedblright -146 KPX Acircumflex y -40 KPX Acircumflex w -44 KPX Acircumflex v -40 KPX Acircumflex t -17 KPX Acircumflex f -17 KPX Acircumflex Y -40 KPX Acircumflex W -40 KPX Acircumflex V -49 KPX Acircumflex T -54 KPX Atilde tcaron -17 KPX Atilde Tcaron -54 KPX Atilde yacute -40 KPX Atilde Yacute -40 KPX Atilde fl -17 KPX Atilde fi -17 KPX Atilde Ydieresis -40 KPX Atilde ydieresis -40 KPX Atilde quoteright -146 KPX Atilde quotedblright -146 KPX Atilde y -40 KPX Atilde w -44 KPX Atilde v -40 KPX Atilde t -17 KPX Atilde f -17 KPX Atilde Y -40 KPX Atilde W -40 KPX Atilde V -49 KPX Atilde T -54 KPX Adieresis tcaron -17 KPX Adieresis Tcaron -54 KPX Adieresis yacute -40 KPX Adieresis Yacute -40 KPX Adieresis fl -17 KPX Adieresis fi -17 KPX Adieresis Ydieresis -40 KPX Adieresis ydieresis -40 KPX Adieresis quoteright -146 KPX Adieresis quotedblright -146 KPX Adieresis y -40 KPX Adieresis w -44 KPX Adieresis v -40 KPX Adieresis t -17 KPX Adieresis f -17 KPX Adieresis Y -40 KPX Adieresis W -40 KPX Adieresis V -49 KPX Adieresis T -54 KPX AE hyphen 18 KPX Ccedilla period -35 KPX Ccedilla comma -35 KPX Egrave hyphen 18 KPX Eacute hyphen 18 KPX Ecircumflex hyphen 18 KPX Edieresis hyphen 18 KPX Eth Yacute -17 KPX Eth Aacute -17 KPX Eth Acircumflex -17 KPX Eth Ydieresis -17 KPX Eth Atilde -17 KPX Eth Agrave -17 KPX Eth Adieresis -17 KPX Eth Y -17 KPX Eth V -17 KPX Eth A -17 KPX Eth period -35 KPX Eth hyphen 36 KPX Eth comma -35 KPX Ntilde semicolon -35 KPX Ntilde colon -35 KPX Ntilde period -63 KPX Ntilde comma -63 KPX Ograve X -17 KPX Ograve V -17 KPX Ograve period -58 KPX Ograve hyphen 36 KPX Ograve comma -58 KPX Oacute X -17 KPX Oacute V -17 KPX Oacute period -58 KPX Oacute hyphen 36 KPX Oacute comma -58 KPX Ocircumflex X -17 KPX Ocircumflex V -17 KPX Ocircumflex period -58 KPX Ocircumflex hyphen 36 KPX Ocircumflex comma -58 KPX Otilde X -17 KPX Otilde V -17 KPX Otilde period -58 KPX Otilde hyphen 36 KPX Otilde comma -58 KPX Odieresis X -17 KPX Odieresis V -17 KPX Odieresis period -58 KPX Odieresis hyphen 36 KPX Odieresis comma -58 KPX Oslash X -17 KPX Oslash V -17 KPX Oslash period -58 KPX Oslash hyphen 36 KPX Oslash comma -58 KPX Ugrave Aacute -30 KPX Ugrave Acircumflex -30 KPX Ugrave Atilde -30 KPX Ugrave Agrave -30 KPX Ugrave Adieresis -30 KPX Ugrave J -26 KPX Ugrave A -30 KPX Ugrave semicolon -35 KPX Ugrave colon -35 KPX Ugrave period -91 KPX Ugrave hyphen -17 KPX Ugrave comma -91 KPX Uacute Aacute -30 KPX Uacute Acircumflex -30 KPX Uacute Atilde -30 KPX Uacute Agrave -30 KPX Uacute Adieresis -30 KPX Uacute J -26 KPX Uacute A -30 KPX Uacute semicolon -35 KPX Uacute colon -35 KPX Uacute period -91 KPX Uacute hyphen -17 KPX Uacute comma -91 KPX Ucircumflex Aacute -30 KPX Ucircumflex Acircumflex -30 KPX Ucircumflex Atilde -30 KPX Ucircumflex Agrave -30 KPX Ucircumflex Adieresis -30 KPX Ucircumflex J -26 KPX Ucircumflex A -30 KPX Ucircumflex semicolon -35 KPX Ucircumflex colon -35 KPX Ucircumflex period -91 KPX Ucircumflex hyphen -17 KPX Ucircumflex comma -91 KPX Udieresis Aacute -30 KPX Udieresis Acircumflex -30 KPX Udieresis Atilde -30 KPX Udieresis Agrave -30 KPX Udieresis Adieresis -30 KPX Udieresis J -26 KPX Udieresis A -30 KPX Udieresis semicolon -35 KPX Udieresis colon -35 KPX Udieresis period -91 KPX Udieresis hyphen -17 KPX Udieresis comma -91 KPX Yacute uring -86 KPX Yacute ecaron -86 KPX Yacute Ccaron -17 KPX Yacute Cacute -17 KPX Yacute Aacute -77 KPX Yacute Acircumflex -77 KPX Yacute oe -104 KPX Yacute Atilde -77 KPX Yacute Agrave -77 KPX Yacute oslash -86 KPX Yacute ae -95 KPX Yacute udieresis -86 KPX Yacute ucircumflex -86 KPX Yacute ugrave -86 KPX Yacute uacute -86 KPX Yacute otilde -86 KPX Yacute odieresis -86 KPX Yacute ocircumflex -86 KPX Yacute ograve -86 KPX Yacute oacute -86 KPX Yacute edieresis -86 KPX Yacute ecircumflex -86 KPX Yacute egrave -86 KPX Yacute eacute -86 KPX Yacute aring -77 KPX Yacute atilde -77 KPX Yacute adieresis -77 KPX Yacute acircumflex -77 KPX Yacute agrave -77 KPX Yacute aacute -77 KPX Yacute Ccedilla -17 KPX Yacute Adieresis -77 KPX Yacute u -86 KPX Yacute o -86 KPX Yacute i -17 KPX Yacute e -86 KPX Yacute a -77 KPX Yacute C -17 KPX Yacute A -77 KPX Yacute semicolon -123 KPX Yacute colon -123 KPX Yacute period -128 KPX Yacute hyphen -109 KPX Yacute comma -128 KPX Thorn period -165 KPX Thorn hyphen 18 KPX Thorn comma -165 KPX eth period -17 KPX ograve period -17 KPX oacute period -17 KPX ocircumflex period -17 KPX otilde period -17 KPX odieresis period -17 KPX oslash period -17 KPX yacute period -132 KPX yacute comma -132 KPX thorn period -49 KPX thorn comma -17 KPX ydieresis period -132 KPX ydieresis comma -132 KPX Cacute period -35 KPX Cacute comma -35 KPX Ccaron period -35 KPX Ccaron comma -35 KPX Dcaron V -17 KPX Dcaron period -35 KPX Dcaron hyphen 18 KPX Dcaron comma -35 KPX Ecaron hyphen 18 KPX Gbreve Yacute -17 KPX Gbreve Ydieresis -17 KPX Gbreve Y -17 KPX Gbreve period -35 KPX Gbreve hyphen 18 KPX Gbreve comma -35 KPX Lacute Ydieresis -63 KPX Lacute U -54 KPX Lacute T -81 KPX Lacute W -86 KPX Lacute V -118 KPX Lacute Y -63 KPX Lacute Tcaron -81 KPX Lacute Udieresis -54 KPX Lacute quotedblright -239 KPX Lacute Uacute -54 KPX Lacute ydieresis -17 KPX Lacute Uring -54 KPX Lacute quoteright -239 KPX Lacute Ugrave -54 KPX Lacute yacute -17 KPX Lacute y -17 KPX Lacute Ucircumflex -54 KPX Lacute Yacute -63 KPX Lcaron Ydieresis -63 KPX Lcaron U -54 KPX Lcaron T -81 KPX Lcaron W -86 KPX Lcaron V -118 KPX Lcaron Y -63 KPX Lcaron Tcaron -81 KPX Lcaron Udieresis -54 KPX Lcaron quotedblright -239 KPX Lcaron Uacute -54 KPX Lcaron ydieresis -17 KPX Lcaron Uring -54 KPX Lcaron quoteright -239 KPX Lcaron Ugrave -54 KPX Lcaron yacute -17 KPX Lcaron y -17 KPX Lcaron Ucircumflex -54 KPX Lcaron Yacute -63 KPX ldot l -110 KPX Lslash Uring -17 KPX Lslash Tcaron -81 KPX Lslash yacute -17 KPX Lslash Yacute -100 KPX Lslash Ugrave -17 KPX Lslash Ucircumflex -17 KPX Lslash Uacute -17 KPX Lslash Ydieresis -100 KPX Lslash ydieresis -17 KPX Lslash quoteright -239 KPX Lslash quotedblright -239 KPX Lslash Udieresis -17 KPX Lslash y -17 KPX Lslash Y -100 KPX Lslash W -86 KPX Lslash V -118 KPX Lslash U -17 KPX Lslash T -81 KPX Ncaron semicolon -35 KPX Ncaron colon -35 KPX Ncaron period -63 KPX Ncaron comma -63 KPX OE hyphen 18 KPX Racute oslash 18 KPX Racute aring 22 KPX Racute ae 22 KPX Racute agrave 22 KPX Racute Ydieresis -30 KPX Racute aacute 22 KPX Racute acircumflex 22 KPX Racute T -17 KPX Racute W -21 KPX Racute V -35 KPX Racute Y -30 KPX Racute adieresis 22 KPX Racute Tcaron -17 KPX Racute a 22 KPX Racute quotedblright -54 KPX Racute ydieresis -17 KPX Racute quoteright -54 KPX Racute yacute -17 KPX Racute atilde 22 KPX Racute y -17 KPX Racute Yacute -30 KPX racute comma -109 KPX racute period -109 KPX Rcaron Tcaron -17 KPX Rcaron yacute -17 KPX Rcaron Yacute -30 KPX Rcaron Ydieresis -30 KPX Rcaron ydieresis -17 KPX Rcaron quoteright -54 KPX Rcaron quotedblright -54 KPX Rcaron oslash 18 KPX Rcaron ae 22 KPX Rcaron aring 22 KPX Rcaron atilde 22 KPX Rcaron adieresis 22 KPX Rcaron acircumflex 22 KPX Rcaron agrave 22 KPX Rcaron aacute 22 KPX Rcaron y -17 KPX Rcaron a 22 KPX Rcaron Y -30 KPX Rcaron W -21 KPX Rcaron V -35 KPX Rcaron T -17 KPX rcaron period -109 KPX rcaron comma -109 KPX Scedilla Scedilla -17 KPX Scedilla Scaron -17 KPX Scedilla S -17 KPX Scedilla period -35 KPX Scedilla hyphen 36 KPX Scedilla comma -35 KPX Scaron Scedilla -17 KPX Scaron Scaron -17 KPX Scaron S -17 KPX Scaron period -35 KPX Scaron hyphen 36 KPX Scaron comma -35 KPX Tcaron Tcaron 18 KPX Tcaron ecaron -77 KPX Tcaron ccaron -77 KPX Tcaron cacute -77 KPX Tcaron scedilla -72 KPX Tcaron scaron -72 KPX Tcaron Aacute -54 KPX Tcaron Acircumflex -54 KPX Tcaron oe -77 KPX Tcaron Atilde -54 KPX Tcaron Agrave -54 KPX Tcaron oslash -77 KPX Tcaron ae -77 KPX Tcaron otilde -77 KPX Tcaron odieresis -77 KPX Tcaron ocircumflex -77 KPX Tcaron ograve -77 KPX Tcaron oacute -77 KPX Tcaron edieresis -77 KPX Tcaron ecircumflex -77 KPX Tcaron egrave -77 KPX Tcaron eacute -77 KPX Tcaron ccedilla -77 KPX Tcaron aring -77 KPX Tcaron atilde -77 KPX Tcaron adieresis -77 KPX Tcaron acircumflex -77 KPX Tcaron agrave -77 KPX Tcaron aacute -77 KPX Tcaron Adieresis -54 KPX Tcaron w -35 KPX Tcaron s -72 KPX Tcaron o -77 KPX Tcaron e -77 KPX Tcaron c -77 KPX Tcaron a -77 KPX Tcaron T 18 KPX Tcaron A -54 KPX Tcaron semicolon -35 KPX Tcaron colon -35 KPX Tcaron period -146 KPX Tcaron hyphen -128 KPX Tcaron comma -146 KPX Uring Aacute -30 KPX Uring Acircumflex -30 KPX Uring Atilde -30 KPX Uring Agrave -30 KPX Uring Adieresis -30 KPX Uring J -26 KPX Uring A -30 KPX Uring semicolon -35 KPX Uring colon -35 KPX Uring period -91 KPX Uring hyphen -17 KPX Uring comma -91 KPX wcircumflex comma -149 KPX wcircumflex period -133 KPX wcircumflex wcircumflex 127 KPX wcircumflex z 87 KPX wcircumflex y 100 KPX wcircumflex x 84 KPX wcircumflex w 81 KPX wcircumflex v 100 KPX wcircumflex u 70 KPX wcircumflex t 114 KPX wcircumflex s 75 KPX wcircumflex r 61 KPX wcircumflex q 47 KPX wcircumflex p 68 KPX wcircumflex o 41 KPX wcircumflex n 61 KPX wcircumflex m 61 KPX wcircumflex j 106 KPX wcircumflex i 107 KPX wcircumflex g 47 KPX wcircumflex f 107 KPX wcircumflex e 41 KPX wcircumflex d 47 KPX wcircumflex c 41 KPX wcircumflex a 53 KPX Ydieresis uring -86 KPX Ydieresis ecaron -86 KPX Ydieresis Ccaron -17 KPX Ydieresis Cacute -17 KPX Ydieresis Aacute -77 KPX Ydieresis Acircumflex -77 KPX Ydieresis oe -104 KPX Ydieresis Atilde -77 KPX Ydieresis Agrave -77 KPX Ydieresis oslash -86 KPX Ydieresis ae -95 KPX Ydieresis udieresis -86 KPX Ydieresis ucircumflex -86 KPX Ydieresis ugrave -86 KPX Ydieresis uacute -86 KPX Ydieresis otilde -86 KPX Ydieresis odieresis -86 KPX Ydieresis ocircumflex -86 KPX Ydieresis ograve -86 KPX Ydieresis oacute -86 KPX Ydieresis edieresis -86 KPX Ydieresis ecircumflex -86 KPX Ydieresis egrave -86 KPX Ydieresis eacute -86 KPX Ydieresis aring -77 KPX Ydieresis atilde -77 KPX Ydieresis adieresis -77 KPX Ydieresis acircumflex -77 KPX Ydieresis agrave -77 KPX Ydieresis aacute -77 KPX Ydieresis Ccedilla -17 KPX Ydieresis Adieresis -77 KPX Ydieresis u -86 KPX Ydieresis o -86 KPX Ydieresis i -17 KPX Ydieresis e -86 KPX Ydieresis a -77 KPX Ydieresis C -17 KPX Ydieresis A -77 KPX Ydieresis semicolon -123 KPX Ydieresis colon -123 KPX Ydieresis period -128 KPX Ydieresis hyphen -109 KPX Ydieresis comma -128 KPX Zcaron period -17 KPX Zcaron comma -17 KPX uni02BB Aacute -128 KPX uni02BB Acircumflex -128 KPX uni02BB Atilde -128 KPX uni02BB Agrave -128 KPX uni02BB AE -109 KPX uni02BB Adieresis -128 KPX uni02BB J 22 KPX uni02BB A -128 KPX uni2010 Tcaron -35 KPX uni2010 Yacute -109 KPX uni2010 Ydieresis -109 KPX uni2010 Y -109 KPX uni2010 X -35 KPX uni2010 W -54 KPX uni2010 V -72 KPX uni2010 T -35 KPX quoteleft Aacute -128 KPX quoteleft Acircumflex -128 KPX quoteleft Atilde -128 KPX quoteleft Agrave -128 KPX quoteleft AE -109 KPX quoteleft Adieresis -128 KPX quoteleft J 22 KPX quoteleft A -128 KPX quotedblleft Yacute 27 KPX quotedblleft Aacute -128 KPX quotedblleft Acircumflex -128 KPX quotedblleft Ydieresis 27 KPX quotedblleft Atilde -128 KPX quotedblleft Agrave -128 KPX quotedblleft AE -146 KPX quotedblleft Adieresis -128 KPX quotedblleft Y 27 KPX quotedblleft X 27 KPX quotedblleft W 27 KPX quotedblleft V 27 KPX quotedblleft J 22 KPX quotedblleft A -128 KPX quotedblbase Tcaron -35 KPX quotedblbase Yacute -35 KPX quotedblbase Ydieresis -35 KPX quotedblbase w -17 KPX quotedblbase v -17 KPX quotedblbase Y -35 KPX quotedblbase X 27 KPX quotedblbase W -35 KPX quotedblbase V -54 KPX quotedblbase T -35 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Sans-Oblique.pfa0100664000212600000240000054524510330505373016063 0ustar mikeuser%!PS-AdobeFont-1.0: Sans-Oblique 1.15 %%DocumentSuppliedResources: font Sans-Oblique %%Title: Sans-Oblique %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Sans-Oblique known{/Sans-Oblique findfont dup/UniqueID known{dup /UniqueID get 4182250 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Sans-Oblique def /FontBBox {-537 -1034 3017 2108 }readonly def /UniqueID 4182250 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Sans Oblique) readonly def /FamilyName (Sans) readonly def /Weight (Book) readonly def /FSType 0 def /ItalicAngle -11 def /isFixedPitch false def /UnderlinePosition -213 def /UnderlineThickness 143 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 0E850A061A391BAA6F75E50F4D4CA8E37A93712DADF2925436C32E2D7F754BCF37BD3F68 4969408772EDB394AE309369A3990C13A1958DD6BF8EFC6B3A56DA7C07120968AB0D7A04 6EE7B98F021DD36ED49FAB0F4BA7437210E788309C6C75AA7F22268B83D7238D271DF264 E69E53014266463698D73DECF968760822D0A88C4AFF1C63D540B2D096398D04B1AE8127 512B171DAA54D9F3C1FBD0B7BC9012E6862F8B6CAAAFAE1D596CF690883EFB45323EE4C9 B61FD12286F397A32DA0377AD3653D4AB5E0904279A7731ECF54B309FD16784C5FF30A27 6EAF635174A26F60624736A4E77FA5FC97C47A6C7C96A4A8C08E4520BAB4A430655E10C3 B9611A2AFA20E44035A90C519FE5ECAF0FBCAD5FACB510FC1A8F615AE8AA924541FF8CA2 F036BFD0830E1729C73FB2B451BEF3C715F2E39D5FCC829AD8995B3067D476D3C7F8AECD B027E5823CF30A31E3EA3A55FA22A8111A190828222868EC438BB75D695E739BBC2B78E2 98960739836267CA99C7E27E3443CE2D559195F1B36CA4CFF5AB8A0544C68DD8EF43515C 04D528A729E74AD4CB4A32F8F17996BD8AB177ADF379BD7CEA410F35606F6B880F8D586C F68AB601F67A164084C09A0098843752A5CCA2201B6A68C975B992258EF8E46C71AB1882 610194E6A9C52FAA2D9B827A07B5ECC04D21C7C2C0AC729C4B92E2287847A79A76B76012 E8C904CA5F1C75B33AD7C913318CC9D8A6E5E07E3579E4A99BF1D551E43D1D7F139C9CB1 D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9AFAA5A8301EDABD5660B04283A AE6D12B27C419F13A57B743762E9F8CDE517CB55D47CE3BCB18F2947C57450E6769D57AB 355AD56EB787EA28E3A0CFBB743EC66D1451D8B69F8E2323501B395C7DB7BD2680C4000C 25816A263BFA42E3CD0DFEAEAF09421643D1B97E9A4CA8A46B9A5D24FB94D6969B447E5D 9178E1880630A3FC7EF8959174F52E62835BC123A9AC3B975FDFCE200EF5CAD8E57392E5 43F60F9C2FB84D3CB410EC521791ED0F161CBA15A4D6B920B84E040C63C81A9C2280BC55 B50BD07287401EE44482A5542CFC4A772D8C343962E68C1D8D7CFCCEB928D3ADCF826E15 3180D394B56D253F7CE3745F5CB63C99F2D844E94E773764ACE941E8CE082CD5F8755B26 2DC9CB77650042AE9DECD27145EA4698F548322518D2D84CE54DE8F63BAFFEF2685E1233 0BA2D2FBA256B1361BBB2670CC97569D4715AC2F72E57DDD345F864A87C37B483937D541 8572794F99A8E7BC6BAA5BAA1CDC3948E9F91A41FFAF3626B283237D93CFA14F988C4AFA 5EE552760C36A59F10364CFE74208898905BBB31B0D9930E83A4A34769050F3F884E428C 2EC6F1C32819C3F7E96341727A0754D6DD6A9A1FDAA09A0EC93308C28B64F9C1D3F254AD 98D0609BCD600998C7FD633BE0A9EF8C8C9ADA6E49D557F0B8C5C34DC3BFED7606CF104C 5DF1CD504E0E7CCC9E95AB44453B294961028D8B77B44283CD59473CD22048F9BE874303 2F84B37197EA008822240920710C102E07B3F7D0E0CC7B6952D44E1B0748E587651401ED 0DDD9722F301E73B509EA249747478264531126532AC35EC26018F50F6ED33207D8511A5 6D1316D2DF94BA140C89EB94806293A6A11BC0A7651631D06A2022027D5AAC8ECBCEA89C 2F96AA234D39E6EED18C6EEACCB80ED171F9EC04A0E014A2CF6320959C57E6D6ED415F71 3F3FB318F8789F8C2F7239B03D2D1F3745B5B17F3714383616B2451ADE5F93F864A08AC6 C5C2300C2D4B1E06C88DF102F8BA5838460D6E722EABDE6392A4A1434D7C9D3E80C7B20C 0E225B9E736C677D5C802594630F615DDA4ACBC4FE621F3DDE6A55C90E2A0624C73E0C10 F5C619FB47F2DB46627313C763A6D752895AE1148204B5B0D21A3B1CECAF4436C68F053A 0025C18DDEC2B7C2D419336897B47B220B526A515AF436E4B597B3C2D1CE5D16A0741789 A763FB21E6FAC4813AE25150AE0ABDB604CB54E1A4C379CE43D6BADD76B4D83C5C475082 5879DF1C4B468B48ED96FC6EB873CD10F55978E7EA41F352C74C1A52B438A139BBF8B551 1ACFB1E4755A4F27C921DF17ABC83230BF3F1AC0969FAAAF30CDF4E95A64F121861891AD 9987758C944A55726BC8D7A9C7C9235DBBD50ADC6EAF3E4CB94AAAA8B527E16B394BFC47 8BFEBAC0068B25D519AE01DFD2207AC1DEF06FD366791063AC8041F5584C99407D840C89 E5701F40FC31DB29F0EEE1774253BC17CA822D07A045C96752D543699833D2A495BD8FCF 0FD722044A0506C88692BEA5CF462CF3FDAC4667430766D4678638C2645666D5BCE4704F D7DB2B7CB6726F41B5678E82E2FCA11D6ABFB3B185B87D254F0AE75DF8703261B09BF257 495B959CC1C269355351A131AB275559C3D518D6B9D706835375970B2197F4F468D24C75 935CE375C0C053C02FCA63BF20F034C7992BD94D0BCBCC6FFB9E909C9019819639E9CD03 8C7D60A3055D56B845B58DD0661069A4B4962CD70C40EBF9CED5B50938F079C60A704A95 9CA2BD880D33B63DFA6C31BFB1D1337C8841768AA8446BF099B7586C40F78F085A928579 59F75E10D3F859630594BEAA6060EAC61600DE8932C6AD1A83A809B7C2197645EFC16F9F AF01B07F3D5B951A7D88791357835F33BDEBAC1DBCF7497877C23006C79E8A26735CBE1D 6FF411B76F41C6BB61CDB38A924CA0784DFF3DB74552884D1AC8491DEEC38CCA1FD3ACF3 60A43A5BA70AD179B8AD641A614028971564609F5583E8B9F03EBB137C5D6046429F9947 FDD3A34DFBF0824B337BA845FBAA9E8A643BF8D5F620B3FB737EEF932B817C1819854EC8 8AD2EEE381A0C21316ECE82B29212FB5789DEB3CD1A6077B63DBF69CBAE7AD6E1318B23D D6C4E9CF4897CDCA552C47488779452D1CDE48B1C0D54881F9203E7A6566E6D62C2C5A4B 4A66AA49B341E1E8BA679ED8F1D7E0C65613E4C795E2D153B029A92D216E540277D26CC0 58FED40EEC20FEF720D1DE1C2C6EBC3010B51CB99181A199F86776D9C210E2C6906D0CA6 51A6DD9C4C9CAE421D9D3107821578AF3E05DEA93019E1D7B107DBAB77C7F1F5737E635A F0A4F516D4A3778A24D0CC86FDB8E6BF5730AE3DE1681C25CEAB294D0F20A34F2C080F47 530DDCB2F4F2E7A97D5D148CC97EE73DB9A724C6D0851AAF13E0C0AEB8E3F41AF99DA6EB FE9487599EAD2930EE95ABAE64FCBA4D74CAF6A1D4CA5AFC5B8CBF19D53A62B6276AE4C9 075A2438B04282D9CD2FC0411575DEB8961FA721EC0BA1A96BEF58BDC3EA9D641839DB7E 253B8131D89576FF8959056E5C99F561BA667E7D3F2DE34D6777C501064451E83558B14E 1B402B5414EDAB097F4091990F36C4F374D647D20BCE726435240A3F02C3A479385AECF8 643C5553BD55A5BFEEB9C949E038B8C3E09E7411F7D6032D5E79B209B6E82CBBBF0CDFB7 9141EC8A3A7675BE94AF3DB202F183784F0262245E1541878590C000F1E7E307867BE93C F4270A351869259C5623CF803DF01FD60556C64DF292B5F2F53DA3DC0D142ECC02791919 26115565F6F58BA6B8F262CDEF130FA9F61DD44F826F9EFDD7479527AAE81BF46E2F7340 761155B8E6B64F9AFBB3A2AA23A0B221880489653F5FDD5BD5B502FF8DB17AE782EDF154 5FE93305A01EB4AC21E4300EA5B9384370A7FDD2B866255752BAFF670E2EDE9FD468CE32 57688FE1B8A02EF8B9BAF508F1C71546E36A904B802D6825992DF04C28957C0585F9E9A4 B56DA5C4E21C7880429652A709B97470C1A8A0F891CC2DE76E571C0A3ACAE85904FF8B9F 6BCD13A21AE6E7FFF72EFE9097FC0DAA24E727F2BE666BF99C8697B5E6F66C5D3ECF2D1B 3F100085E19547792A3D9728EEF695473FDA395D64550E030EF03EEBCDD0C677E1C51620 EA395E165147C4441C5C0E0D9E88ACC23DA2FB25FBFCA987D1F450487F4FE29C48BDAB55 6BF4A145CDC8BC90BF7ABE4C88C42EE0A14DCC40A660436B9045A4EFCA8734A125749C87 793BC3F577F2A16188D249CDF0C8C4C0F4C7A4984353FA79A695E14DD87C051B8407198D DA4AC753E5FC385F3688739ABD2449AE9B8F20F0A3C0FCC9C886708B6CDFC272638D6D43 A31321D694EE004270B5FFF7503E0AF729B5CCE7261E1C82B3A87299CE3267EE36F280BB 6D7D7C4574F0F0515717EDDA0A61F5083D9DFF13636EFD683A95401A3E5FEEF575CAEF50 4F4AD34883A76817E4EEBBCF202AD27D2BB59F349F7BF2C884343A0C090F9C4351E96819 5F16CC99E9064A158075E43BAF0356360D7DA57CBBC64F071842A1B6D5CCB528E5586C95 9EBF855DC99F2E6CD7B7A65F46232BE86E5060629C426452449F38EB053CE95544EBB3AC EBF54DB682D75D5C256D8ACEB2638EF91642EEE82F1F93B891C18DC18EDE8798B5A71705 308F44E8914C026F4D4017108F788B02318CF087870529D3EA7EA137831C8A436C860DA7 8F1A51CD896BE969808A2B5D56FF28CA8612E2F6F8F40276698E15B8B5B5B275A9D0B055 FD21EDD20F14909B96883D4EF397B9B4BAC3339335F198DBE52286AF1611180264693CA4 4A66D951D5D918B6D98E5E2200D002F94319CD702F13C994D3AB9B251C2648DDABC59CED 9B88DE47FA115F5281ABA9F479B5E8EF65885340BB52EEE9693ACB6D4218526C57C73B3C ABF3B18FC5851E14170A5BFE3B8B5CAC93455D23A4C542211BFE1AC3F46AB99B89A3016F A9988BAEB8E96BFA706BD95EC3E3A9E8E70AC38178134BFB580A5C5C38CA924244021178 19699CF8ECB44A5155599947619DBCBD8CB559158BB736D4C4FBC74E191ECE74E2406D3A A08503B2E5B7AB3245271B22ADC9AFDE58036A18E7E8B2671CC9210C39E09D9CCA9D7304 FE4407BD42B2964857CEFACD54A81D935A26F41DAF471866B4433586FB525394FA97F998 45BDCE8C031951F2B7FAFD6F5932324A6C213874AC1322E6169C36FBB6F0C082811975FC 0EC2D09D582F05D3461E880D185FE9B3DD37A39417B702A98C81AF72E43A08E0AF11390C BACDB12BFF3FA46EFACDABAF301F8A1766F3D882CA8CDC5BA3F519D8F83E42B0F71CBC84 F7A055F90549887E562DBDCF13F0603A4F7DA261492F2D6D58FA09786997857D427C6404 85390F4A9D97E055EBCF41C6FA74E7E36E419101D525815E620DC5D3A23EA6C27ED28EC7 9A12D21E27D062E69184A2E9981CB83F92BB68858DF50222EAA23E03CEB5765B270A18A4 E99E52650F8D44A7B98EAACAEA09A498309BCD5BF18E2A47D2EB458811CAA7D55DEF072A D9575966D1603EA3CF7F456BBF854B39620D65B078771272847B20F9857FE3502EBEEB7C C504A8B2EDA40AC629C6250600581E27E82F401DCA7BA663731F5DBAFBFE3CCC6512D39C 49527EE2AF4AF38BEE8E5AA5EBB29EF77BEC8A7F3F8BEB28494037FFF24893FC28915675 3BE86DE17EA2BE92646E3E2C8E83F4823E22CB128A535508F1FE37A4ADCBCD8DFCB56863 A8F78C99D8A11ED1BD0C7D34315BC455A4DA7DEF2AC19D3D4B2F969382BEE68EDAAEF4C6 9B45B6580A5104678F6E3A85C245660695AFFF4FC58D02146136DA72B6681726AF073049 5803061FE194CDC487C22A43B80A29C2D5032A0FCFBED4472FF557350E304C1CA77A175C 1AE6DAE4BB78E6F87C9AB034627A9ACE1163874F9A13D15294287374E47300CCF8DFB60F 5CC5F545C12092EE818F3DD496256959BC7EECA5E31F8DE3141F56BD19442B231546B264 428650561966A6F673ED5F7C863E9142182E0F9A4AB40A3DA7D4ADD95AC278059E8C8274 E28F6AA76F00BCDDA4435BB76DE607D9796624C2ADC7B3BAE3C3103EB0092489E1B52A3E 59FB538EF6165679C092FC045EC9D058F3DFD7DFDA25103D310E9DDB543A141DF0E1CDA0 6F3A2BCDE1F82E6A4E1AEF35841CF89ECBB295ABECE4542A78AB7E8101998C9711C32645 A4D73F9B024E91E1B993D7332A3722EB6D3FB5966F8C0B4F9B5643705F2A655799EC34C1 AD7AF7A9AD84ADF380CC58FDC7F1956377DC4957B683947D545A88E6EE59C934CFAFB377 85890142628A05B8BA75C29CE3672B66C240872FC5B206586BDC996982B8C607E94D1D9A C57B49ECB8E05622926FFBEF446A0550BCFC50E19760C5FC9620DEB9595EDBBB8207FFC4 C0671B64B4A3D66C5F15520B6D21DA7D7FF4084C7F7E7F210CBB466EFC69BA4E62FA5A90 95C8B4556A8BBB04820C6216CE602D4654BC49B0401A98C26A6DD18039AD8473D717DA36 6E23F25A3B04CB04ADA545AE76C6E032F694E7568C1FF3D53DC9EB8AF6D82D725010603C C25259A59249F5F822393CCE4208AE9469A16EBB09027DFFC4BD7D5FC14900234841EDE0 A21EDBFF305EC006E0A9AD0DB301E6365F428ABFC7EC6EF679121A82BC02D3F8D9E47879 832AEC89DDF71D4FF197EC026CE898E1DDA4AD7B4C6BE400AA4ED6C9B1C5026F0D615D77 58127C108918234DADD6DD6CA03368D34D31F985668B71CA74F6565DF4BFCF76688713DB 9B8CBDC0D146C73AAF134B989CA1CDAE45AE9CE666F698050EF6E5C9F973F3FA316C878D E54121F42424937E842DD64236AA45462100C4258FB18C92EBD2B5F1A7E1DE87B57E0CB0 FBDF5BC950CA5B2CA2E0C4B123EC4969BE3E82E36D4FCCC3DD56ED87B344B445CBD2897C CE6E6DF35A2D4CDAD2EFD16D0852F29C927D827C092AEEF24B3CC0B7DBC8BD6B0D67D359 81D5EF1E8F2EA8DBDF8D0A1AC5CD18E99BE0A1C7D0ECF94DE679A6CFE0CB46E159B28CC8 E269C57B7643A18965A8CE5D09BCABC18F5CF2DAABEE6F8AD2F52217DB990826700ED998 F52519D9AF3CCA4AD13298EB369F7411FC0ACF23F2854F096C84BEC74A49D0B13EEC603B 9F7D68588FB4EE0BB96CC93FBD4FDC04C2F2D3500B1B174E4B48EB9957D8FF1C5616E4F3 D8B420B5C9598B823699D42235C451661FF1D3925AA5DB8351A109CEE66EBCB7F9CA3CF5 DA74F9BD87030C545160C6A37506F25455BD7B650929791307B8F7D4D13B200AE2A07CDB 5C88E2D77E42430BAEB57211C3AFC69C4088668C8339CEC896501FB35D7902BB800B70DB F7FB4BDD7BBC9D4EE3C9E50811E4B3714834AAFBF059250BC81C8726A5EB2EE214EF1790 BCF8BF85887208FDC918A0948A83CB031FD514458C3101283B42742740C094C8B4BD5601 CEB6D079BB72728E235424C9DBA750AA55287348329B290DAE0D870289DC4B98C0A2C85F B3B753AAC1CB9BFA83168ECDE01721139873010E79E64C91B69D2E6056085ACDA58F81B0 5AD64434B8AA61D952290BE620AB235717FB6813BD35CE5FC37CB67D4600BDC4FB99D266 9F8BA7C77D416C9EC2763F6061708AC0B5B8C92AA66BD3F0BA02E1418F52A3F8FE3FAEDC 4D77B9E9FDC449B7E74645CAFB5BFD0ED223DDA1924E9E0C90252F5301400A0F8365547B 0B213DF5526D8B41B773EC52C728E60350BE34E978615AC52D64CC65C39717F8AF609221 AB9050A8AAD3D5A9A20EA3F54009355FD3E88101304CCA72176F2280782B325A0B3CF632 7D5AED9EE8902283F20C82DCBEB1C035C17AFA4B02DCD3638F6288F7A91857E09C2C619C 6D50C564E675EBF33BF7753B55891E331DC35A6460F03DAC0C29597714B660E3B7A9B851 5FC1C6FEFE7A8069A068E7AF13A4943E9AA3F1AEE9412608EF6CF20A595369A0BF63C723 20D0499523D87EEDA5AA158EC44BBD0543872FEBA04ABCFC8BF8CB5EA9D581EFB711BE79 72FDBE2A71A78D65FA24BF9CA62A832CB0856225ED2EC27F26C4521DB38B209A4660C488 2127C29328ECF8ABC2FD67CEEAC1C514F95990DD09F71FC4398FE04801E6B51E12B24A7A 87964E676C9FCC9C894CFD8FAE88D1A201005BFE1585BA8D84720A2850314995F4DBAE5D 59D3FA8F0782C48FAAF6EF932C6B7FC55BA1C13E8B68D3712CC0D200604B1745C8F12D90 F451E1F779BD79108BF55E0373D99459D286E4199EF01165D48145CE776816FB7B2DAA62 C67AEB7A59F18FFB08DD3E68A3210CFD7646D778D37D09F55CB1B589F652D5C6424C6D0E 6A2926847B0D3E2B9FF728461D753A4E645CA46C6049B1241EEBC16AC575F2ADB34CEECE 854FE9D2FF0DA3BD764C0040D4FC65A8376F2871447822C30ACAB01329969517A7E0AB3D 06E1E2012E05BBC075E0FAC6D98350607C221D0082D0A2A9A7AA530730B9D0BF75E6F404 33CBC8479BFB1DF78C3EB736013C02CE14AD01FC415AEA7053D4CD9FEEB842DE7357ED71 5210975536D1B37188CBD507BAC53ED9D25AE46B7B558823B66DE982BC4D25BE18B176E6 714359F57F49DB43556FF78F5FD4FC1125C44F6F2D570476A9CC90ECFD90AA25AE6F4524 1E49710B0EEE32C170B906E806990AAB9B2B031F59FCE601238614F5C2F97A50D599D4CA 8558D79A2A150AE45EA25C4F2CFE7EA94891C290B645FA53CE6D260DC546841B27F2276C 372B8A5B4640C96D95703F219CC6174EA32D4F5E0797BCA0751B7B963A0FA842CF0A3D2D 3BAB836EE84F197E3EFBF17115FF5EEE77FE30A314B3BC9AA287870866C450696E7DA7E0 FDDFBAC9D1F1FBD742BCAA3626288971FFCD8AB78869776AF72D9DAB35E75F598A088C5D B6612A579DC0479EA8C8C3375048C5F67484E528F0B88ED9682DF865D85004773BF8C813 C3A7B9D216C83648300C8C4E43B596B8C00E6B54A046CFADF192BCDEF55E20FE8FB1F756 59DE80EAAA9EB02061B13DB2D787379EF425EF9D376DA10300CC7B898FBD8BAA1BB54D59 80368562ECBAF3A6973CE056BB36132D39A44212CBB6BE829E3DFBEF23EABDA452D80CFE B32246F16C0DB950AEE0BC38C6BB77956E1504B5D45A3564DEA6BF5E58FB7665BEECF499 9C437B845B7A60A6A319ED7849584DEED77FA88BDBFA8273C0BAF4E3620C4116E310D38F 7CE7F06420E7BE87C7A1AEE07E8228B63616A83EA315CC3463FB04A619B8C60274019C07 0A220227AE9E367AF49AFDF8F30F4987CE0CDF4FC34A8BBF671D42233FD9974C678F3374 DCDD475558FE4BCC0E42F09DCF9663E44C938B05AABFC598D1ECEABB8C7B637B3DFD4F13 C4A8CF295E0E21E4A72F8FB97DFABBECBAA076ED6B4FB40EA2B9950E0DD7AB7F3E0BF238 37781BC01E30BEDD3BFD8D5EB97D065269BE9771B15F03F55C7A775CAA7EF524BD36C830 F0D6A3E7C4FA79C621FA10CB4DB7220E561160968B0B52739476CD65BF3175669C1BC183 6320CBE6C9AF4C249605A04249A432020EB6F3676F1D9146B4568EB7562520F600B6FE8A 6B7E61FB6E721BE0B1B74AD4857E7FDD32BE45CF70B9F4207466D4A977CA90C817CB343A 9E352D990457765C7BE8F5740B6E3B10996708F9FBBCBA79F2E3D98AF892D9D9623B7287 051BF7C58B8C2785A0A22404F1893600557FAF24A62F24D8B8C93B141878513010901FCC 75148C51957C868A0744D3D583D599C9F093C7D47518ACDA0AD4221D28BD3552E2F6EF8A 24935D1B9515E4692222D6AA3283F6EEF29A5F8B3118565789D79201582B85C73C227436 1D3018160AFA5306E2F45D4ED54B4F714321E9D51ACC2AAC53312ADF21129680D7762822 4F2A0C19566EA88F2753D729D4777BAC781BB3FAA495829987A5485487CB134B7C0978BD 517963942DE167E09A663FE70735B84DFA06B993F5A4C790A0002847C2D52D4D1BEDEC5F 4FA147053CB4043A00E7E66B6DDEC7533605382B0A058ACCE10D39633C0A636B8208BC62 E0B0085FB811070F2F4ADAE5AD3235678314A4000C4D16DFCA2C7E1C667485CF7665D8D6 BDD4C7C58B91185A371C9696F6AAB2FB77F23E09A469C83DBD2182CCCFF54F65C149A101 9479F32FDAF2C64BF4E384EC0D3ACCF32FB0C44AA12BC6A105BA4C153BF2E860696D7940 798CABEC87330E5972573CD2E42819E144C777231D65517F24C5A0B916A1B1D879CD07A7 C8A49D44AD4CDB96D161DB25DF2195E62C699542D3DBAF7A4EECA7EF7A27E078C53A1D09 4D7930F80E94898927EA6F030C399EA7096E76CE0F5EAB0DAE13DC894845D7B6B258DDEA 96F0B0F985722E4C1F207400B97BF41E8908F3DE5886EACBFF2F01B6A3EFDEC820B5D6B1 C8C120ADFBC41491B3D649CDE10C4094D09FC2197A3CD84E991ECA4C29B3A69A09F9433D 50E7697D9E847F1A06A50C6401577BF5392448D8850462847D477314D355442C167D4973 F2189198A2E43C133AB6E7753206A699EA73F6AFFE6DE2F42CAD8486CDC05A3256141166 B1868711E5D8FAAB3368B7733A4E4C4A06D6C2E0C5A31E35448577F879136FB7ABB72E56 4654CCAE28E4B6E20FB925544017CA9E8B5322AB06220F7DD948055697DEEE583DFE7618 A0D71FBF12D384FF866A72654B70047BFF15B351E2EF5D4F9BF3034FEF65B51624C51CF4 54E33DCB57BC2A24224CA5468C3EFAEA5B9422C738B84E3C82E629889A3F5106E469A96D 20D9D54CC6963939E616F0E13F0C23B1BAE9431167351A16BF15902EEEA5CB0873477155 82F40BB476A8A6A1A554A7FA51461701F4CCC0B28553447B267723455291553EFA10D2AE A4588C8D945FE4D14A9276570306487B8A16E97D364916EADC13C77B3E6083A933D029F9 9428B05ED88502B4DF8B7D4BB8D8CF29FC459579692DF14C3D346C1C59C09B987CE0725E E3537A9DE8E3C33249AA6775A424AA064DC53AD6B59E7CD9DCF3D30C6D94C19C0FB37A23 567A25D5F9B17135B8681CAA1A32715B5ADB3D7771AB712EEC9F8BB73101527FF0407965 6FB415D442C2F88A49CA4FFD0DCE8CD551A08024CC0F95C5E96D957C6EB4074A1F33032D EC53C70B6F33308DEA6337832A5699B2FC46991EB657A66C587F16F3B417F7BC377E41FA 5ED0835FAC721DFFF5725A1BA21C2AC3FE0331E99D5C1A257668D85FEE5F44DE6070E8E4 AF61928A2B4A88CACA532D330C7F1EF77945141F506ED990888D5AC2B0FC3AA8DF8BAADA 0600F4862A6B07D0BB9384ED9EF710AB99BC45A2A340CBBFAA91815B51C8839D9FC5CF7B 9B94450DB082AB7BF10943833DCBB5C45A1F1791776C13384D3DA97E018B5C0D73290288 7C5DD475E46E838DC59AD0A094883D4D59E418F331A58B7A1E1097729159E63FF205AD11 424292C952C275CBB0DAC09AF3C778B842829C1CF1F182F6AFF0116033E80731A3B04BBA 7E193069451339CF19CC1A2DAC1ACA23FE009B5DA1E6489B103AEB5B4BF60378A83E6206 C84CE5BE81C2368006D95233DE90FD6D12EDC3381060023641168010F304F3DF6207B340 75691B94A63D5E2D9AC265CA20109F9F4245A025D7B189A573648FDA07B43B65547188B1 F99E5F3FBCF094818614DB47C580A98D81B329A11DAE3224C71611E9A753E6536D816D87 E4E92390FF9FFAB7A8C1A95C3F4C6C0623BE5A8C7D292182D7E52B0190A9631A9B3A1D19 E69F440F4DDCCF7BE7256513D3D8FCC20B2E14ABE98645D6C470D65714538B27E5D215A4 CB8ABB21B22F486C12E8044D92D50219E48C3F88757BA1CD197848383201420B68CFACBF 86177DB99641A81464D3EF22BC5184D2FF54D4B304DF771579D98E146A4BE12636F131E2 5BD78029F4028E3CADC751141EE3BFD4967F27A501D2257A6F5C384E75CDC4B045FE2994 8BA4A0B09D6CCF1F7B52D3566AB67D75834D15364A4FB4B2814C9ABF7549290742830957 982BA2CB32696D7D3C22DE78997041A2B435CCD7DFDB3BC4FAB32F374A41A634005E58DB 0D4586A55CDACA80902DB87A7EB0ADB070F32268EF8FC882FD8D517E9D966F44401A76AF 45BE3B932A866670516B1CF10B577F769349ABFD81AA11958CB98BCAC7CD79A05A7329EE C652B3C882B1EAD54F593BA1A9933F69D6C079D9EA847310A95B9CFC46CA3D96BE9DF92D AE268E33B7ADDA5956C753A30402CE47B48C5DEF1B54BEB3C15AA51F26A4404588E68D34 20C69CA4E3328E72DDE98EA19D00D32C1133F8E1545350BACC8E13060B20BC68CA528982 6D17AC5B0337B7FD35A59B4D58FB14D5F84653B60B9A3E317B2FEBF750E17AA24D302D45 B9C27C73A436148B743FC5E5088E227FA0588847CB1AF308FD00DA5AF2E8D781DFF51406 37E4BCBDBA84098603F33FE5D708813E6735B25355D60741C7A175FEABD32A4921639019 57507BAA4192C38B0A255DDF53AB27CAD8D4C059DE6DBC3E92F82BE2FE8E735348D1EC90 32F24ED8F7853E842A8498FD0322046046CF801A593CC4AA5E5BC6F29EF32650D4525D5C 469905E7AEBEC0E72F856176A6B46B1163AAC38419D719490567B6C67736C9DAA7D3D806 6CB93E1248739580715DBB4AF022204ED1684784B00B2DE75189B30E95C69EED55D578E6 6FD788E06C1A40797B87C4F8C9C855D55604CC229305A05FB99890D4CE2281387E7FEC07 15D8D07374A1D613FC7220B4E869EA06D47A253CDB908754242EC819A76D9912354AFEFE F1D7A7FC139BAC02C5C4CB0933AF88B4EE44AC57D29EDA9456AFD7B1D0EEE0FDB167D055 06A967E3D1C8F1E52525071F1D1C81D83C963D899069BC6330A6E7D0A71D97237E2D2A25 DBBC9A1CF74561F482B7D17D92913F9E77547A37953AA1B9AC9EC6FD37ED92E6611B0E77 08FD9B6F938D1783115D2FCE4565AFC408D04D07C90A6664C0D527173394036C56B75D9D F9171774C0ACC8DDE1DCA3D67625FD8E580F0766DDD16889A80EA35DB76661E357EA4D70 5872E8F697B07419C4B58AF18AD03205766386AB1E8D153430227104AF607F8634CA9281 479EF18DA22377EDD881F97B956C68C94304AA4B1CEBE9B7BF54177F19AD5B716CC51FD6 C34DE989A746EB812E1AF58A09B085A9BF790EECE12722F9E4BD775DAF3A95563E5B01C3 DA1CFC8186F7C9E6C74D27E6C996AF9D5C08295019BC3752F768B3DAAD1267983AE9ADC3 9A0CAF0B2941AEFB97DC64C3D3434AF882E73F9A76ECFE06BEE7FC4AEAE792FF8827B29E CF63414F5A07CF9A9EBCFFB3FC12DA2D13F4BA5DEDEC0DC7AC808E594AFAC24B5E1D0D61 114F00562D057F973BB706EF0931C9EFBA2B76B46276A36A39A55701BB163FF86FD0B099 C55B85514B2350502AA9A8ECB3588EAF9F8DF640E0BB680CAA6A28DA8EC745EAA54ADA85 A5761E2F66B5624F1C8CF8F3073EFC57BECCBE050350ADB05B111569BEEE795A18DEA68B 98E8AC7C4EF3E67CE734AA0950B5AC4EC85B956BDD56B292B562090979879AAF51B66802 8D4C58014243BADC3BF12BA3BAD27A85825DD97ED5D0E0E7EA49AA6C7D8723409A5C7E34 E47521EFFD36E9CB073F0EBDC34248FE140EE96BA09470F84E209EF8982B854A388F79F5 D6A3DD2B3639C1E68E1C4DDE141D13AD7C7F133E005DD01EF4BECD91AB1E9B834E44690B 43D689624562FE26FD42FFF834BCB3B5C1398ABBDB1971BB718A5DE07D509D7B4595EAF4 A1C1D0DF8B24B993243840B2C4F3A5EAAB46E6BEB31DCFD89CFC53335A680108C88F9821 2139A1B300C70F2C0AF6AD730B6B57B9017EFCECDDCEC2ADA0E1A6D85A28057A248ADE1E 28124DA28874BC99C16744AEB4F5616F927C4FD3EAB51DDF4EE8B4CCD5B7B283E9732E30 AB210C8D1E3AC9EB52680B0537289FD961186BDACAADC6E4F71266FAE98C80D912012D84 79D9218082AC0637E95E0B5EA282F0B701960683AC169F8AEC1897A39C741828401DADC4 83594B1132F70493D683D3E738D3058F19119A3DC4FAA19365A41EC23B34A71711035322 0E4E86C8B743D0FCBE89FA9CB8624670CE1118396091F1D10BD1FE3BEDF503D6CDAF4CFA 20F1D1694B4DDD5F2535BE0A22E4CDBC19E227D4AE19774A1C28FEE5D80FE1720A204452 59938E88AB2240061E8C44FD850EB0349C5CD4E06569E3419A6842D40CB8DB9E4CC75E70 7379865C0FC67D645F8A348A9049B9D256DB180139C17EFC4910A2D7E7F93BFA25E74ABF 6F0C72B225AF1ECA6E2B84C6ABDB1BA6B43338B94600B7D9BBCB7E07BC2B4EB6EE4D6A91 F67063D4E3E9FA176A6C1F5504B3AA0015DAAB589A14664D0736501E86407F888E725E0E BF2C8F702AFA8BC1A9F62A1A5196C118BD85BDAB0340ABCE1BE9EF9CA734B13CCEDFD3F2 895D67666224A53E2806E7E07CCEF4113CA99280CAE6B26F2DF6D0AC59BF3BC0BF43713C 81B6A9E09116A063508C263716466419C8E337B1CD3ECC440962DF1E92C0250F8964B78C 8692717EF05D1780A3CEBCE16F3464CBB9A487FB60DC71C5E1A01469EDFA7BFF3F38DE99 33BDDD5F24E600003BD00340F0C1A5F5010E3782BD406C10F2C631AA409D27B86BAFD81D B9B300A9EBE8F6E1F69B5ADD4C02578293CA47756D066BC05AC89DD4E04ED6BA03FD4D16 5B74C1315632FC77DB843544AC782F6479C35E5411944C48D1670009B44651C988C6353F 8FD2F406244D08DD02A5714C858CC8CB648D7AD4516537B1BE8718683217B357E201A9CC DAEBDA7E9837872EAD5B5FCF3A5E21BB4D54401300B7983A4B01FB1B2CF45BABB8DEA215 FBE0C1C3310A6DC274BA1235B98D2CC74DF3859FC76C2BF1E5FB5B6D859781CC73CC3899 849CB58E0B79914FADC54C26C7B5116CB1DB69EC3E4C4514F3C0ED85859034D845774499 51122CA1C3D0F1786C14E60F57C71D2FAAA7CDC8ED362C8197534EDF411737FB925B02C0 6D683B25D9E3F7B76667FE49928275308D0F1905E846E05F5879221E71C48CDF3178DE5A 6ADF80FEF03E78EFAB0FA121DFC48479DAEF30F3BDC661E364EF2FB286FA525A49AF9CD3 2687DA4E20A1E0FD390862505D6807A2A0B113849CAA80C1560EE8455D45B331E9110CEB 3E23F767DCD8AFA87D9452314E935403AEC3C340E3B9924DCFA9D6C6B7E516AF4BBD9071 1D30DE61C88345C909492EA744E17AC46D42E8EE3F36CCCFA2D7D8837C753472152AFBDD 347698C62B6580DF4123CCF0A6D46D811E105951C02D6BC5E8D2A3F805B5E2C7BC224244 3688792A1D610AD258F26DD99495F517791134AD2D43C9FDA8A41EDAA1B2D65151395A4D B39F6E221E3FBBE540CE6BE8C8E9174032D61C6E698C41D9B43A19AC7190DD5CDDAD1A72 1198B836D4340586F306CC226DAABCC1185FBCD00590ADA1288EAFB97F6A40055501598B 960E4825B82BA3654960F5F17B8E9BB198053DFB08DA764331FE153296F140C0549F59F1 55A5907BBA7679C7CB59CC42F65B4CB21601A6AAB603D04B507A5E380E53E36DE1C7792C 489D72A8FA6C4EB2E6BA60F894A39CC37AB290F652A08D63825C2B380DFD6E6F6140E727 2C1893163DDC0C57DAD68A03833900094C14393BEE760A8C19EB3BD2CFE4A5AEDBBC922A 57F450EBE18955C5D61E662A5B3D29AE4A3A2029D2AC7134817ED0AF274754F749887F94 58D05279F95998F77FF115FBB5C5451C1F093B7FB4B8B5277B974625B8B14859803166D8 3C8F1C8B7668F18A01E7E34257920FB766C8DB4AA2C3CD50BC27377E9A883D5C88DEA537 B9857569738D18764A0CCFB37419D5DC64D131BAF2BBB7F32D1E039673DA82B1F6E86555 D8326329ABBE44FA95FD01B3BCEAAE80F80B140648855E2FBA42EABA225CE53A54900031 928BEECE359D71A7F4F17C66951B55FF6C947194B02B92531B5AA3A3FC09D7209147C996 47D210235B744D4486144CF8D0219C394E33CF183FEB232D3E5ED4232072B2038720A969 73D0FBEBA9DAED81C57D51BE6039C1F149AA6534973D1F9EF5CD6D28ACE7EEB6D27B917B 866A104A4F09B758818D13EFE33F79E4C9761D5BBA2C4A5221AD42C68AAC9E9EE68CF6A2 130F2F4169EDD3824919BA075C894CD1E1272B99C521C31D12DCE2AA241297524C828AB8 EC32E65E3157E0BD6F8529611CECF75624B41E01969A69A738D422DF8E5AFCD7B19E78F4 1C69879C0D9863BFB04B7ED270512CA32A246817BE4BE91BA325F36B32C60CCD64095A0E 1FDFA40C086D82EAAFB72E5646A2A391BB5B868DBCD7C4421E3BAAEEAAAD6B9F86796964 495B43D24FF4742FD2F90D0EDF781411D78D1FC36D391CA39090045EF236A33F30934502 75C70A07F392FEBC4914B958C9CCC54DF74FC8FDF7AD7A90260E6210536016E1B47BC97D B0F2F9E0B1A271AAED73417C9F67EDF582A3D8CE7A8D701911F42D29380FFB678C542F57 804D30699F9F632978B2CAF797995DA94B5FDAB4CB22EC67A3480D28A93F43835F87A333 8406BD197070579D1B603AB0926341DCC1596E732CE7AC608BCD178E9F347C70AB365AC0 DE4F340AF8A8FD8E3EE86532773CF6B9662BC8BE142E90A577BEB3FF952545A085DF8FF3 028BFA8ABEBCDE6900486B7F2D84900744D661629447757665BAF4B1F114562C1B03336C 6AB865F2D0880A158B787237A712D57F717F12D3D5D30C0791FBFD16E44A0D2D6FA83434 84AD3FE2C70280B13EFDABE2E1DF7AF419E2F47EC3543800A885E1176A4FEC1E2EBF2936 82F41094170EA7B020469822BA805FF2E2B32D7E6FCA71C08F8E0693DB3DD7A523AA1089 A89AAA15BB53B8227FFAE1FD5CD72116EE21D49388B772B2B3E15C1C7E0BE0B2620A9A0C BE3C7A996878B4CA81BE9BC1B1846C604D00242AD3A62830062EEC0F5A436CC0CD1F55DE 1529FA924FE8A81B739CE429F8F750E1691A62A11656E9E9884E9AE72CD2DA0A654533FA B46F6175751997A0365730717C2D9E3190F15E1EDA31CA34567088CFAB5A6828B49F2DA8 D214B250AA7C7A26689900F18922442CA01D988830FDA8F06C51F9CB38F88DC9BCD813A6 EAF8C6A916553603046B44BC8C7DC54BAC8A1ABC9CFF44460503124D2309A7CD92E5E7FE 8549894BA5CEA6DAA1F1C3B59693BFB20D1983C0E020384437FF2A731041B3B1218F832A 4C1CF4FB699B48A4A97A43BC4482B5F787B2AAA9864E07230F182F310FA0912C88095F5E D20D64EC0C6DD1C412EBB05052FE4100AC9F7323304D7E16133DE0ACDFC5DD8B96ED6F4B C9C0BEEF1B0CCD5F437BDCBD5275AC89A365EA4571436213193B76E4A30D3DEF306801FB A5669C270E104DD19E8A1CD0EB2C64BC3AAAD4B85AFEA057EAA02281968C5C57FC521198 B7C3C90F717FCF9089168742A16786F6117CC426F08F531E8DFA4CA56A9BEA2C49998332 6D24A74F4887CC53CA775122D4B79698F34F308283A99491112E40E69FA80243CC640306 58DF3BEF8917D53194586ADE1FF4B0207FDECAE2B714877140B8C50BAC8C874CA9CBA95B 7CA005D3880D1437384A958EDA4603BC3C4EA59B53F6EACD173FAB3E1B0A7163926BE731 8E0C013A483645EF98020F52506C64D2F5E4FDC5CE121454EECA73EE01C9BD82424EAFA4 333D2C440E33A3CB8E98EE29B75351A6AD288ABE843BE603BB5D9BDAB0A7D021DE4693EE 7D2051A7C0AD055F38C8485093A35F240B3D716E5971B316781AEFB4609152F577758ADC CEB9BE87DA4F122465F13AE9DE4624272137C631BDE0499B7D89F81634340E8EC725CC53 F73F3A325AAE0B2034CCC63A574F4E3AD567579C707D37D45DF5C8D6D726DE007A38FF01 35E0879A4D4737B5C8321F5A46667F11EE14E4EB763C4C6486F000AC55AC6F69EF1F4173 DF8DD7CECCA7D8A999EA4F1CC6A38291C5E4D0B0E85B0008E0FDF1388059249C6FB3920D 786A424DE6527888F6BA26E3CED0327414FE037ECAAB90FC730B2CF89BB394BADB32712D D6A06E9D3F2AECA533067CCA5A2CCC3C177AF61ECF7F6AE084476CEE7FF1834810CDEED1 5E7EC2358F458C5F47E8A93DC712AB3376E77AA3B2A68C8ACFB72F1253C4681700F01F54 7179CA647085C1E787495C601813D6B7175B9D7EB7D8443C1CF0E186226587ED5AE6B5E5 BDCCB8752DA236800B8CC79E7B1C08E08BFA9016430F7AEB1B6EA33440EF0FE252C71A74 2CCB2DE476A605B9665DC0FEE7D50E714B82292882E714B845CAB9AC5A5A4E4A692739A5 E1438BAF2F37AAAB7B7F8DFF54802CDE07B990A2870FB24BC90CCB5D8AA8D9AD97736017 7DDE8162007D13B1C6D9619E3486C851552EDFEF27CA5E4DA8D83C41DE7E576B9587E9C6 86BA0D3F6EB6AB861EB994D7533C33A2D9679DFE296468563CA9C797B88E2C5BBBB35525 E693C44B442ABD2E962964E23460C326FFDF822B55A5380619A7822651BCBE45A143C498 1D664785E8757490308BD6CDCFE7B73F2A777483D76948F9BC4679B268E6BF247418EA8B CA7684A86CE0BC3C6E428F5783E5E5FFBF459BCB627507FBDC1525C0FA80134C323EE0B1 21D1DC353AF7C08AC2D3610555B448A3AD56F929D7B459597CDDDED6A144FB7247972E5E EACD6E5BA6ADF6473FD815A483E697557D0F6B7FDC40C57557B4CDC889B24AFB6759DB3D 7590C5F8D26E9CA404ABC139C8648942F44D353BCF9343DB6E8CD29955490DAAF4CEEEA3 6E8B8DB7E22007DC75BE76DA8645DF6F762998B9BE68D610744FCF1106367477A88FD036 30A9B5D2B5E30AB72EEDD69F5BB32D9CFC65D2DE282283F01522398A68B023061C6A4707 7853CF1D549C2D5CFFD203851D2C62A10B977151BBA07B665006EC24FAA5206ACC544CEA FFC6AC1CBFC9E254A814B82DE7849341E2AE8D3FC8442C537684E6FC8B4278C08D139457 837A0C2F555CAC7B4DB5CA448BF519694F61F1C76308B27C0B92EB92C29792D0A809F2F2 03666CCC7E2354BFA6D6454CB7370025A0C3F98C1C5699A7AF334AE3229C0ED7E95DBFF4 5712A0FBC44652ABB8BA22F4089BD3410383527A95AA64742CE042E73924241926D7079A C87B80A2D78983D1D1E5729A463B3F18FFF5411A804A29C022B4A5A621712165DE3440BF 5DB997E6BDBF88E9DAAE8C620B606B90806ACEA7F91DEA52835BAB3200B9D9701A37959F 9F60F3E17849C13C6D956768E9FAFA0E7B5E39B9B1209F558E9C1C1ADDE4B4858FF2ED77 1E32907B3D68020D6E8543BC8D337FDA838A0B43332206460CB23D554AF38F960DAB0349 837E6EA473015D616ACD9FB211BB3DA81A4A72DFD0EB0F99FD712323008415C61EF88A2A 68CBAFB5CFF0F56E74937291FF874B7A3FDE276B9B5312EB35A6B604219241B38FC40008 A078EEBEF13E4B8855C5C726C9966B7480933243BADFD3AEEC5F002A33F7B1FCF43C5A40 14B036023EF7DE648EF482250845BA723BBF413707AB20DBB7FE472A525F8839E2B61A5E 8EBD627A4E6DFD0388FF3430E8533B3AD0E28EDD98240E241493D1E4DB7113C0966EFCAB 769BC438EE2A7357D519E8634F531A81B01DC3C45DFD2171377A563CC2D27379164AECA0 8652B8C45D3408EDE5B6DC025E197A2344B32B9EEE7C602C44BC86C1136DE46A85133B38 063DF28304F208EF7708FC09A9CDBAA16DA29918E1931587AC852560F039931FE715FB02 3A68CCC97E2C1DC6D92C4FE7A3E51DE8700FA4B7B6B252DF1B7612958F4B8B7F9F9548F9 E1EAA74AB287B258705902FF35C83C66C214910D265B6BF50F2D424CA3E7B3B045992C9A 91631ACD64248D00962C9912B212C1EB88082A826C93CC38123356E0865A5C2C6DA5B021 26E8D0C2F2455808ABBC38D3A3DC420D67B6CC0548060B46A801DEA21A1680FBFBFD5D84 B33FC91EA8DE46DE8CAF4870FB2A1E69B13CE0DBAE3B800A12F0C2F86E39109B0E250282 BB64C44463F39D0AADAF1B242F89ED4B902CAB0B24380A80B69751BC712CA1F4D15765D4 9CCB0D9B46D405C500CFF45E8CB83B5FC2094E171E946465D5153469A63029EF0BC4D377 F3EA8BB3F0D00FD35AA77CF5E9C81746ED91ECE340A927D7B94B3F562E411268E8C03CC4 D709489980F7C093032676B71A9744A24C76113E5F1B899972E42CF790CFE056692928FE 33DB0E67F3E4CC9A38D3532A882FD1C7369F8D638C630C934A56D0D5D6BEAF2BBBB1262B 7AA6B5A77CC439F2E07E20B80B777C8C916D1BD2CA10E628EE5E433FED73B458899E0754 028844C939A11B7F923D562701F171A4D9A3E2FD0D2975901227F88ABB51B2B711BDBA6C A65017A2C1467FEDE88D7C1F3A29C1BD17A6C7FB0507B6B19AB01A9CF2D5D6C3EEF3FF82 8DC5C55D95773EDBB7962CF3B5E38E2A60B74F3496EBD499FDB4DA42006A34B894D22856 BC1C4023EA5C5E603AE9BA36B223127E669D8B1DC5701D468785BC092C91DB71D8324271 5DBA1498E19D7C0D0475C276DD63C92CEB9F3F9A47E04A3702619F3696BE7920E04C17A3 73773937FD4B1598E4B9C2CAA495E7730AD2BCD2663E73FB515BDA040B974CBD8B6A7309 40CA850E1C3D43E8B4C21F71A0D609DE30DDDD860DAFD2C27BE112122EB336521E0B8391 CEC295C365A8FB9A3BCA49005121BE54B5A821FBD7BE711DCBA4461A0E03089599535927 CDAAC6E16AC854A381A2C86AF587F872E6F4039261CF6745A6FBB2C8DB390369EE0C6A55 9485441D6E5B02D350CB517EA1D211842279804C19B193D9456B98EFDB53211F471A5792 DD8FD75C706831070A0BDDA15C465F268B6E6DE468356BC72F96CB96C4E347A8885F575E 3DFF6B4140E5913431EBCE9DCCF6F3B64A0D25D4D9540873853A85D6D035661BBBFBD937 425248B11AC0972B8B32940CB5DECD6710A19E04C51D1A75ECECBEA6BFC839397C592F4C 950BD72FB1ECF212611B7C7EB61F08821329AFC226A9D64B5FAA41763D5179BD89AE0A28 09DC56451EEEC5A912E71C45CA11DD2916981612DA08B8EC016B0A7BF76253F79B2BB563 D9757025D1E6E99EC78E174345F38054A54354EBD9EF6EE07DC7D3AFD1D7797639B12A5F 35C2018BA9FA7C590CAD320A01C368020CEDD4A648A93E69CC3AA9B3C6F51B0B98AD4B0F C506DB8CCA38024687C851EDDF162DB9FE4A52FAD60B068C0621E239FC627ADD9F23D2B3 2CF91BD6F7B46435A33337BD9B67E981A69A080AB129D2559ECEA9971D9BAE1A7ADC22BD 40967145CA9DFEA2DC8CA0E3EDAADA8E57078B7C6F2DEC64A1799F375FA9AFC00E74C6E9 B764E93FB280EB184121097ED965A9C99AA4CE50055598EC541E9C975B6FF07900F2753B B19C1FFBDC6A34D05950F780D2B9BEC58C69BDC0172DE12073BF1DB2A90442305585BA83 0172E9329E5B83B8336846F979AC6486992AE98C18E37A9B8E5872BF38A77D428A9E8303 5D12145CE836C6D7CA3C0710FD804D9E7CF0CE3B378DDE9FC708DFC25CADEBFC5CE55654 95E33FB66C98551C7C48528026F793BFE5882531BF28811EDEA947F8E55916753B9BC22C 6C0C7CE8A101D221B669C152D462E5A9B5565585D7D47C02E83EC63BE175131CECF2050F 2D59E6B06464EEF095C9937F81DD3AF55F8A2518A8702B3E48AB7AB16AB570FC28676C70 4B9999B36B4AA4714D70D64024CD887F95EF5B8AE89FF13E29A62BCC5A33AD29588F6ED8 FDFAFBC5D99ED06C7DE3F3448A4DE6F6869402A350C722AFD4B5E20F557C19FE6C6B1433 0A36364BC215B41D65283206BF85B9233325CBE217F0AAB1383F2170DE55412E41909FA4 38AF935A102BC4B756E880119EDF28F0FC586DF8C5F76F7D1D615C6A5BA120C27B918B0C 6F76B52344946B660FFDBA74DCA9DFBE31C3D3B947D797458F9CA4D72BAE82E7FAD41B0D 59380B84DBC6BB1E7F44AA60614E1C21DECF316E30DBBF2A2268284EB7A579AC3929AEF3 8A917E6451A51F9E8BB4E92A49A13B1F1ED01941C9E0A41913F4FDC928B2705B79A4A748 B7A64F95A589894C7F9DA1E18A1ABBF88213D9F35E2B7719E76905DE559B5AC3390E07F9 D29CC7B18CBFB3B61AB3E19CC8533B6A12551F7F6F4DA7154698E654B000066C4BFC75B0 886561B64363F7970F5ECC7790C31416BD872520F105D0549589E371988BC4B0E2348D37 D3CF7D675601EEA730A62B5176575A455A88E27BD9F33F26778DF609E5CE7B6E2F45C063 73866D6CFE199FEA82E20DDA0134E87F5419372EAF7A8A1F4A5920FD433203B521E14B8E 367F2E6959DB8953CC477FAAF53E744F4AA94677492756786BEC01AEB506E2E9954CE457 23BFD45A5C3A9EE4628E24DDB35D519E50D5AA63A66880F02F261668F730C6C381272D59 2BD74C72B0958C86142D68853549C8C8977A801A2873B1C520EF0F0C9BAA7C1704E77F09 13D4249417E975C8C7C1E57E3B3C80F19587EF7F9D98303440256EF27B77A6FFB4006855 EB04F375BE40053AD3E5F667B63E660891D4C12946F20C2C1C0E945FC7EF0F749A37C0FB 845946A2349D8D2551F9CDD8A1053C350064F79E6832A4225EC067AE258C531B1E98AAE2 80303E44502EBE493B220D79567C26924F394B8352FD5D39DD44FD66EE30AE2C78958B9A CE5BBC173FB3EB632A51EF65B251B6B5FC2ED06ABBD82CE7DAC25EB8B3B54662B37BD185 D2F69146E9C91FE4544330BC01645F0B6217E06569B224EB303269D0AE9FB52AED374D1B 04ECA5624BD1206390D948F72C599DB9F37E04C6BBB1040BF50377C73DBACBC1CBBAF994 572BB73099E639EF8EC2111F57A4C74509AC34DAB7A1B6664726D7DA709AB2A6CA58C9E4 0147B9B11BA4220476B09FDE7EE21E15F22E8A3C2E841BBF83EDF6AD1D9A02D30F6D69BD C9F442D78DCE5D575FE57EACFDB45DCE2BE4AAB9583F0F79AE81E9173C531DFC2B1955CD ED8A905E23CC2DECE4A32E3EA0F37DC85B8DF4013D7E5EA124FCC865CFCD5F18FB1E5976 0AC251CD67964D781D0555CA9AADDD5B4F8F0A825DDB75E8C1604C2538E47AEF92D5FA08 5D7A5EFBDE66090D2EF37C2699893158B7C6D17EB82566ED7036271B9A4B494CE48FEECD C6B84C97F9E3A43D3AEF2BFA23E7096D87502B95B1D753396661AAE5A0B8912221842196 33897715D7E282C2B6218C776868FB5B9F715B54087F1E93E7897D674CE27E791D70FEF3 4F259947371AA8C6BCD9AAE54AF2C344E59A12D626C122D41996A35BC19379E1DB4424BE 8C180322266D8BB7CE268878E52701EC2D3A34E2494A76823406EF214AC3954B2B205975 F194B30EF41D680D49DC8102A757F08785F8E0A577AAEBFE99D88F065433A0F9D4E2929E 244377CCEF269BC4D0C84BE10B2336E16BDAE216E048E4CD7C606F373374596BC5FE814C 8F93F0D5FA0606C2B1424CA3FBD9D290228C1F42E5DB2B4888BA37075C57C5242A323B1F 7358373086C0EBF14D13128AAFADBD1F3A71FEB4DDB7292BFABE0FE44D3389EA278ED890 123154B543674D2D8350AD79C101DFD4EDBF3EE508D649A781F8EB62D35FC7929C0C32E7 EB66733D80E435E03117F975AAFB37FEEAA923694EC48C3BC461C60F76A6F7DDE6004E28 429855C174756B154A6BBC56433D869CDA48B6017E7B046DB8F74EF298FB56CA70A907B0 8BCACE63DA6498F1331DB52DD069DFEE293F5381BECA058A44616F345557C6250C4E5BFE 9AC4FD02CA633A52D5314035ABF8F5F6BDFDED140562E82498D9A150885C50E31D9293BA 4E223C2BC240F040FDEDABE91CF3E870DE4AFE09D70FAB81620D2920F2C490CAAFF4ED9F 9A5EFA63615ABFE86C738A77CFBC870181FC80D470A31DED9E256CA392A757A1DCF6B64D 5887C62974A6D61FDD0262E267BEF8439E58EE1F647EC67F2C34E4C0D15C8128605BEC2F B3EE9B591ACD4634F92B4211B464A7EFF01696AD41A5D2A160A9DE317463F693E090CB08 CD8D03BD48AE6795526E77F1ADE5B06A1A5BEBCEBEC0FB6C14AD4F3E09B9C5F467F07431 622F5094FD42DBCA25DA949BF5694079AB30519415E05B4C72EDCB8557867A3C81C19167 BC3B23B9E82171C9052F012B51432D3FA9F2E420190D173A1355709DD5D962AA9B3D6098 DFA18D09FD938E1009E46A924464A7057EC5805EB2ACA83D233709B9E79CA09969DEC582 CB4F26A0A069BB137165376DE1DF306B0346283516E742227FAE33136D08D3362FDFD625 E4008934876486FF5BE6F3152B87CF9E18BEFBE64A7B5BAD7EFA41F10E49DD11A5C253DA 4A456134704E98E2F4A495FA13705A9E9172297A5CFA5EB1514A8EB2D48CE9044EEF00CF 3A0FC7957768DBF97D035E041C70154CE070D833B133DB565D65C753C4C3A18210B85F18 8C3B77EB90BAB578AE1A6F406C41F17FD228BBE3D3E90371EA1C5A002635BCD5E765BBFC DC880BCBF85E208FD47E10E67E1B319AAA406248C7ED5B4D09C4629AA98E83AAA2DA2FCF C83955B5EED2D3525920C6553CF36E5F2B01D3FB1D0C734AA7BE08B09EEEF863A21B47A2 7B220224DF1206E68E76B80E491622AB7086F49C5B4B3969FB639C831FD007AC7DB9B491 A36B6E30A6111EDD4F53737F05FC1B90B8C947C828DDA69D1CDF60189EE9BCEBC2AB83DA F99401E22EA58DD712A131ECA6BAEA051B36A099407A4D5130003B6C1859265C80922859 943FC9337269F1E0F6E95604A0C7C7E1C4CE6A8120987892AD65F707D59C1EACEAF04DF1 8C70FF74C061DEBCF8B4E888A2CED7C871209246D5A02CBCFDF121F3489CC88FF86DC43C 2C083F313086BBB722B770AC915DFC66102800B1BF9869086978D57E261E2870336244AB 9547F7EE3BB856DA5B1881E1E6FDED021B025255091DA49A89FCF9E02CFF6388F3205019 EA29E9EE795C42821FD59BD54C5719F158B164E8278DE93E465780836F566E88F0DE1BA2 0173F81FF53E8E366FD982CA7D108F722C1672670596C1B0C0A374CE3234F136375947E0 68E5E608DD609B8DC50231C5C607588733DDD3DF59B4433704B2FCF39430617B2D7887B3 878779F185A5E3F2422A2A58EF91B1B16556AAB165423F55320CAA4523F3CE6F04A92EFC 368C7635F7F1F5E2F0B432BE8F1938F903A4BBAD81363C6B0FB8656C84881BBE51950816 425811DDEC11292A60DA15D859FA1E24AF5CED8DFE2056F81A1A2152C05AA6E35341D486 A1465A8D0F0E9BA724AE6B09536F008699FDD4B00EC995C62E3E6645871F88907C106ED0 AC533AFABD30A7472B60CB30DCA23C74EE1312FBBDB63A7CEE46DF172921D49C3B31A5E4 30A8D75374F4E91EE92E7D98638F8DC52CE995C2EBD26565BB4EB1B7C7C6C6E6EEF82A24 1ADBB38109FF58C960085F40AB145DAE0CA5E35AC126E45EB1A05B07755C38DDDD853775 965ABFD0D48E7EEA834E0A8DD4770041FCF018508D1295956910D414424A91BD677314C4 28BE3D9A47280DB0D987CBD3B211751DF71BC60421FA040C853BF68AFE7545A9E683AA89 3B682DC2ACF3141748AA191CDDB64BA4244A4A664DBDBDCE08678A9C9F87C762997D1D8C 27A6525358FBFEF4D582481CA4DB7B62E12773E44503100F3E33A783573BE31242B9A414 ED13F1C5B818E99C05903D6C5FD5AA0B225C182B624F35C7E060569BACF9687A6DEA35D1 CBCFEA0D63B8AC1A36221E5602C7D70D7FCC3018BF45BAD7D6BA0B916D4A05374994CF3C 5E779F5B173BAF7FC9F233B59CFCAEB8F4A1FAA77DA95A530CE60FD99C6F1E1E0BE988EA 80E67CEBC0381CF678680AD350834B85CE7E082EDFF0EFCC33A730685494EDCE98237417 370C1C9637D498BBC6FFA69B410799010657D49214B2C1B00D0CC8A836F2BBA87FCCBBD7 531E126EF285F40A1220C8D97945C68149B4275084F4938F6531844BBF08BEB9A15AB23E 220AFFEEB96CE09D9BF1542A0EB4AEE487592BBBAA7F455DA79BC530E78C349B9B7C536B B5F79CEFBA0B692BAC2D53CF3A98EBF32FA2718CF4DD2B8406C0C760F02AA049BBFC2AE3 EA137C31C52EBE0772A62B7FE4E6C0A8CAF0990FA20EDBDECE0DF62B05E948C78C9CA081 AA31C782752630CB48ADD7FA8E0E64C92F685C6ED62968C6F33657E7346288EF0BCDFA19 7A4834B467D77E89EF73DD984F467785871D08DAAB12D0AB4479FD88D7F5481572B66A80 57F6F01F5A95DAD00D03E21648CDFDEB3ACC71DC006106016F62D59DC8F24B58947724E9 BA2103DD9453A2F394AB18CA92A529F8A16B2D65711737C9EC05BE61B039F2814436F8B2 6CA3066746223751EE3B46B215652393CC8A80771C1A05386ADC103BCA7934A473227F03 1C96185DB9B40A2D6BFF8ED161B7D7CBBCD0395872C36EAE21EF599900A513A34B12B58D 2787E4636C880454380FD36C3303897731CB4D2AE48066701A4DE2F4D1BBA322BC8EDC93 B6CBEAA1960FDADA3A1E15D7D88E1ED292A80973F14002EEDE2C8DFB39EAF4634F980316 937E0129653D04AF010138E5C14EE6342E8E850D481F958161F52089B0F81BC2F9FEC570 120BCE0633E9A0B16D74E1178FA235B0894412684ABBABDFAFAEFC8170A7B7ADC6C781D5 34E30DB861FE82BF3982DF8F1952D392F4886563692FFFE9437792DAD9B625EDAFEC7A1B 501FDE361778212019828F01C2FAC3D032D499583994BB094931CBD7C9A48EFCE8F08724 A8F525DC1D5DED70864F89B2CE0A79BDCFD19A293533424BB532812F2F4E82FFB85D04A3 33BC60C010A27BD3B51FFB00800185B23598D60C58429EEE5C0C57ABA204BED9C421363D 0180B6F3F9C69D6DE5C6B999E247D9D03C0307B96279C6D4B886A0597E8ACB58E6CA60C0 DF9FD197F2425BB10BB835CCB35060CCC3179065C10936AF0A3B2FC7C92F6E8193F6EB6A 1411BA8B7182B6B66397984DF222F59B1030B10851B0215F06467203D4E9A35995A99E46 237A6FF0F234EB45EA81250D47F5FEFDB5DE9E1AC26E7AD9F4238380C5098A092A834BD9 776F7B0F6A3065A93077F60033C7C9D04F1FBB1D19C49476CADF343EDB21C9AA2B57FE64 AF722B1B4A51B89943D32F92C25DEF4D61685F598B40630DAF49A873E3997B042EB0B924 FD08A319F6F89FB815F1B16EE89F95B0D057CDC9857D00E303B42838A5C91444847A319D 177A9F52CEB972AE0FE9E96E241CEA8090D34B8D7106E9AEEDA5A7E0E2C10AE73B0DB666 8412D5352B183F879753E785FBEB79DD9E2F8385BA419BBD9E5336E56534CF880F046731 1B2E73B8DA96BB66C0D5ED3896D5C526A782517F079682F86F842722951140CE1560A00E D820DFD2E630D5B3CC0F7F316A98F44FA6BC79AD090D1C1AE1F385DCC7F4BF5B1497EA20 68CA5C0F1E43559F9D2572E4CD2CE3F45229FBC114DA7A7AEA18EFCFBD6A502EBB1E3FA8 D07BC0C5B438117B2CF77DF3F42ADD73CF7D9EC61C7EF14EAB6591E7CA7B74D915F9A98C A6B9D325CC736544EC34E58BF624E73012C647A220700F51026A68BA590855A85762E966 408DADF64F9FD8194E604A393759159CB7D20305B1533284055B72E2BAA0923CF4AA30BE 37E7F1FB311B10B16FC65954787CB3004F93069FE9759577C5B2D97A08A953FAE93730C0 1C13304754F10618DE47B8CB2BBE582669F6DC65C599D795470F4CA9000EC9767FC5B1D8 FFCEE5A90BA25CAA10DAEF2C5F29B4B31A7406760B21EFEB4B15EB087E66BF7FB7DD7A68 50C3555E42B5F49FA4D41119CB05A26B0A86CE9522DEBF63BD1B94CF71C72D62505169B3 B5DDFF35419C687DC3C56F2046098BB9960A7A64A41D745F8806BDEC77961FAF2A3467FF 846EE9148A43217506533055E88C4702F868F39EC4D576234F9311B82CBD7ABB47B8DB5C 032336CD981F04D4CF8090F0F64415BD65DE75F9ACD9F51CAEE044489C5582E15DB5F53E BC830193589C7644A345AA245A5EC9FE8E0EEE9376912826658067C3042FB6D16B564385 C7349215189C180E9CAFAB1A84C57D9606C831F4C8091BE35BB73410E1C79812324ECC66 92F57F7B4CFD14A53DB4C773D7335BAA26014B30C21A42B284876804B2DBAE019EE9361E 67E7A46679639991107422704C51F222A7C6FC6FF57E7B8D1AF50CDDDE71EBB2D0C1F273 20574B0BB33D5FF782762E00BC8C602D1ADCB979D52DB001B0CF3B653F215E80FDD1E72E F7B3C8E27C1DB5CF6FBB559F48216152456806A82569BC98F042DFD570D99D032F86C122 527B522D8E931D9419B655D2106922BB3524657C49BE55C258A398C3A8C6607F9F345E58 D3E2688F4656926E66B4CBFF82EB34B16B0BDF7519666676FE6C0DAF6B0B1ED416CE42EE F8C90DDA7B740609A13AAE1D9DD299C0ED98ED14DE13CEE1739C057444007CDEF40C818E 4A7EE40B172F6D1406E511B96E5B30322460A1782C5C1893126AF87C587F965273F94D15 1072A21E7FB1D6A70A10F5B9909789CB5EC4C5B64748996AFA6FE4E388804F7FBBA12E26 A59384DB52FD8C1A0C447598641425199C2F3ED4ABCDDE45CCE8863F30F7233A93E9CCBB 224097FA18FFC7CFFF064D27A262D8467F2020A8B3BECF0CA29CD0FDFE8811EB7418460C 1FFFB62653FA2682B418CF293F82CECBD303386A08D8FF83F87E886900A2109972E5B472 7552FEBAA2E8ABD7128602D9C98D7AF7500A31DF48B80C90F96838E925CD66E4D75F9039 4B1409206BF6ABCCEA18F6268E44267F101C7E03EDCAE479A40751A8D66CF4FC978B690E B384FB9A220930E2F87B83F39431F0C547CADC00A44DBB741EB38B1F59255F4147013C51 AD12A962112A1AAD651340AC638A9F1DB9A00D9E225E3611008FCF38D8632A2B70A49EC0 0CA727DA7EAF3ACC637EF182AA5AF90E56AC07D906A0CAB6E33FF16D33ABF3121ABDC0DB BBC1385373B5C64252F9A72F09ADA3DCFC19B6307950D9768E24F1619450DE2EDA62F9FC E622F4E5C32CBDB5FD904F554A0A72A08E46B2C607DCF1B4C4611A45CA3FA3D3B0A46A25 A7D369A02CE925B7B4FEE6E4B5F2B4962A2FAEFB1B8FFD74601F099850621C7B5BFC4380 FD333BFD3431245DD366AE948BFCA054F5460DCCE87957AF4E45CEED4826BFE4E4FCBB08 572233496A82DB3B007A8AF7716FCB8C2B0CB66C62C6087F8D137D1A5B51B62A488DBAD1 7CE8C48703D9FF15132D98D94531FA50DE06B3C42BF35A6DC783F86140A7DCE4555A6662 2DC5C081286A3DB0139598DF9403DE251528AD8B1D621EAE58AA3EC3AEA53A2E3CAA3078 20E9C3501BCF363970C0C4348A42895A29CC1F51EA0D284BAB75BE63BE41D00F8D6072EA 211E852E36884E3B724FEAF19E79ABD3E3C1B434571599006A6DA8D0D8EE61E2533A3EDB D0F7D1FB28956EB1CCA6C77A6D8467255307893BF7ED6AD8BE89B319576E93BD2422AECA 3A8C1477CB833E3CCC980DFDC7D0B9B82ACC34A4E32369F82E67D9FDA7EFE75F7D5374F7 3801B2E343C24974C9FF5A4D0A1B0E440DBD0FAD35020ED422C2FB5C5810B5D8BC012002 3B014D17ABBAB6EC20F8D1082C57217739C28C9E715866ED98DD9C8F3E52D36A3647271C B5CC7B8586A7CA5FF2FF8B95C556FB9749BEE25F6FCBFA53811820BE717750CF7F6C995B B95B3B329FF946FA2AF8DBD6F4C33635DDD52F82916D6FD3BA0C65C2C370D735F39F5E35 4612A48CFD4B02A31F3BEA0EE21E518490076FACEC016BB6F8BD3FAD63D82F79B46EF13C EAD18FC6629DEB5469FCAC13C90F140623734E5A13C6DF01ED6316FBC433F8C5276609E6 44A8D7C7C9814B6F06BDAB0223468D54AB09C1BBB18582FCE973443ED13CACC463D0F154 FBB41F8ACA22C5A0C6559954F792DD0017E2796B856B7497E3DE60AA6CB7B3D6CDC15990 0D5AA3829515D10950E46FAA2A59115AAB2162B136C7067F87554F0FC2899C0F16984363 CBE1DA525AF5B27D11399C2A4F585EE12D12DD5E6C93C7B2005B1826218A0E610464CB11 4B0227673C591A563D0C6E5A09197D75ADAA78E16D3DDE5758370228CE1EE883030A8921 6987CC7C8E45DA9AB897050E1FD7643D11ACE61C32A8831A4B7D421AE6A5A82235E92325 59FDB9030EDA2C2D5FA7B351972EC74AC63A71B3E3AD8B882811D922FBE42AE4E6D5F12E 01377BA77F7C1FD3B1729A2250D0F7C5EBFC06F711762BDD8EE94FE9F41C939D79B1A5BF 498E9F49682284A5B978D6F9DBEF85E7188E35AE751360AF53FC035BE3B2BDED651BEC5D 80B6BD0718472EEFF901C32D9C3C211216BD15EAF6812B79DB25672E24E8CEAE3032093E B02EDDDFACE1BFA8DA0E678AAAE79BC58E4F7D90B0576E3F2BDE1A6AFC5CCF8133DD6755 169292E48894AE4A1FD39E335398FFE916B4626AF2DD974384D3EFDB45E5CFAD5DF1049A B1DF04F131B6DC88C1CE7C2A1863DD821A26C17371B409F30C6A160B8035D3CC8D59B641 03926A20F374FF5E3EC0EC2EFB38BED24F08F5947C7FCF16C3F53A138D31050E0191D1B5 95E3C130F3E0051D99F5E4A9B6328DB80AA3CD939BB52B7BD0BFC13B58948DDBC53D8321 85AC9E81497234CD2FC91EFA33C3D7B460D6E6550969BDADDDD1CB91A76CC7805E7FCF44 6999B560B2850CC449827E5349D9B3066E8300BE863AE8F38C1203A6D7687C0A9D1DA956 3ADD4F57F4162113CE3FB614346FC92EC809125DE5F7DF595AF4FF4548F8F60570354058 5B03A4F2E6C436C7ACDD5BDE567D0D216477EC8A479BEE7A42D2A8945B2D5416539FC054 995A514164DBEA7B23A55A229B99DCD07D8F3A0832406B5355AD7472D4430A3C59E47E16 F9B8E03B30ED339E3BC14D2D9436C1530CE3CF978DA84C3F8BDF4B89749770324BF3C0DB 13777A8CE46CF6EA7D84A7E42D3B03D4E1550C12EA8748C8CD6AE8CEA05DAD602E71F873 D7A0F36DC71A3DF10F3F170F93357671900E4F99D1E122CA429AFBB3A2984C4806B141E2 912A05073574A3F719B3B3F97FA29ED2D7DA8C05BFED3888A6A5E7F1974FB4058E12A562 0B6D83C9FBC25D75A094A446DCC4C033205D32B86522C52FE16E832F7A4DC555E0F6C674 3E7824CD7FDB0AD65F7843664A2C82EA3548FFE077A140EFC8D65FDE4B3466C3781A409A 2B880198497B7B323F3022487D5EDD4185AEDFF2F811779212E840DF2C6BCD0D34E59905 A7F2C31A83425EC3C7D5AA6E98E46CEC396CADB7FEA473091E49A80043970411C83B044F DB4FFBA5844C1A4D2E99CD46D2D017EC64ADD99B823D70DCE634F7B91811F8110FB5E77D 3E83C965B13DCE2AA58B4A65E9BBEEDF975FDE3104E5EDC53F847790AD66A4C378729DB4 4B9DE8248560AD2C5F609763AFA757BC4414116A9634B880A3B450B6EB28E528BDA2A200 2458AB8D2E299FC0DF79E8AE07F515CB5D33744A2968B9F1D777752206E3365890F507FE FA905CB999C545CE4D21A90DA7BEF3CF3A7037F435DF5EF4202486B2CEAF322BE47179A5 CEFA081623357BE6F1E7CCA55F6D81C4BC23179917D52FC2AB65419E07DB3E408BE84F6C 7F4B7CE7FFB0A3FF08E3D850764A1151791820029ACF810841A92DA8DEBA08C12FA0CDC7 28387E5CF1AF2FF337DDEBE5231C3D0A1A6ABDE709FD30D7D960D5939C61FB5D61DF0F84 A0CD33E996ED021CDCF3EE94D8C9D4BDB182A448D34DD970B43B2594AC2D721ED5443028 55A11CCDE5C8A8AB9641E4E01B67B02BE18A49BA49CEBB68060B6A9393AFA0CDDDA4820E 2D47EA63D4B019119D6C7DDB490815CCFFE30D5EC7B1672A3E23CAE00F0C5932EC9624FE F3DD84885EF3472747ACE325F9C55E6DD6F1767F75E5CF9C20DD4ECA34FF05AB9BCE4C11 6365B607CEF188632BAF670E46E32FD88A8EAACC71A6AFA8B77B6A02528560010D7AAFF5 9C5F847E9855AF409A4A8783CD1E4A3C4E00E17E265C696B64A455AFD3F22C1CDFBF86C9 A0F7F173D919A1C32A3081D0296AC94BA3D98E860DD82224DD91DF70A8801466DE539408 BAD5B14E99E193617BF630A947751F84ED25F32CC732589E7FA64B9E871DCACD1D7D184B D88A5B436A9C8325874410507E8942E619E9F9F95B095C2833AEFB32FBB50A7EFDE15EE9 0370994907B04EE66BB91312838D81CAD3CB1E4BE7C69E079A6823EBCB620DB06D53A8CA 9FF23D2B442913B07D896DED73B8A53419E7687F5657843A72F59AEB0ADCD905ED7C870F F370499F1CA0268C4EEB08F61A54D6633872FEEE490F45503181DBAA7B0F37A48482AC34 A2B8F53DE35972B2DE96EFB0FD501841247A85E286F9FB50B99DB81D398107765FD6E3C9 EE0B237DD11A5476C9AF77FB21525384A3BB8E10A1755B2925DDEA827DC59100FD2B1EDB 244F45F85B618DDB98F9A3F687688BBBFF1C9B5CC68BB34989958B6529B72673807E7234 89A8F6D0EA64AAD384B4912E25C14AC35786143A2FA0DAFCC0DDC53524494FD8742EE2C6 2DC02C17EBB179EDF0C46C802090A10F22A879369E8A37CE0E5E65505335A7C061AD8E78 DDBCD70A5E22E2ACB40D76FD808DB74A9864BA9FC5CD153F97BA35D02625A270B6AB791B 977801FCEC886ADD89DC6893BFF300BFD55DE1A45EF27DFC68EC55B4388BE0B78A2F702D 25B4EBC7089A8F707EA34D4CA262C73264CCCB915B91076AF54A86D89F3F1B26504B014D DB2F5DDE5996BD2C355287772BAF318960BB17B965CB102CCA4A49F11EA4B6840E04C1EE 3270E41A56257926C4E8FB41ECFEA5BAA96F4B41B3A8B3FB11557C21BB3BC458B276E8AA AB5AAE0F91D02875DCF445AA2499071E8339D532A9C0A0AD8F3A9E2295379190259A1818 C351628A2D73E02EB6F494BE76E9DCD2F57CE37C67C77BB1C242B6D3F3B5332344F6B6AE 3B32FB4A7048BB0DDBD1BA7357ECA546EA78D112ED4D6F4436090C4F01A89FC6B2649749 B5DB1176CD0D65C2D509D28FE18F3B5C68E6022C58583CAC75DC479EC1E07E036C298EFE 61CB8F5B55F5B5C4C3AD46861CA5A1B5A035D90432963431B1E9FD3DB223C28CDDAA927C 646FC5F2ED8CB481C03544FBEE00C8A025C027BABBA18B3BFB41E29228C4A0CF64A659B2 ED97747EFD2CE572DDB09646EAF276D9D7CB90D219BF9041DB8D75D6732CFFFE352475DB C89DE90414A65C47DF7CF537C5EA12D0181A82629FDD7484EE67889198889438510F42E3 636FB90F8506D35542AEA62584D8B6DC411CF3A3943DD449D5802C09696F63339ED5BD7A 38EEE00E5E1DC1CAA430B23DB91F6142A8F62550DCF9D9408C18FE9E0CB9CC4506C2DD2C BB9DA8ACE305736D48F7C69257823679B0DCCD254028A1D4D434D57B1BA2979AF2B200FA A0CFC32D60D2B271AFD1CC31D6F8883D98A77AF84BF6F602E3B4019B5B58FEF8B89D132D 4107A79CDC3E468A50FA9383B0800D0BC4FCE6FDB91655EDC88DF275C1E389E7E9885888 00C98C2F2179FA11564A95B75169CEC8EDA1452877B3094D7548DE6198CF574595B856B0 1B100938E3F3401C298A81C6E27FBC75B0FB3A44CC3257607165764B051961DE1BA12837 919EA3DDF7B612220EF9746DDB78D7A3299C5058D3B69DD9C43356AA36222E9A636DB177 10B0DF72B2A5DED55F23865653CED25A5143B56E44566A772DEF963CE825D4831FB246A2 9CD7A316F18A8F05DDFA68CEC6626C54DF58258E46F1B20168070059141CD2BE1BCF44C5 800C81A743D7C604C0B7E53821F1FF7B45C34E65E4B35896D8A5070917652F6A85A334F0 2AF81F160FAE14C73E929C353FCD78A073945AFF70FAF250CF7F61FD79853F141886F0FF 73A419A385962DF3258A67B574029BB81F50DA81934F74FC43D81FBFB9700F0D9DAE6A0C FA88644EDDF12BFA529901B25954499E60F6057A6C7ED424EC5C4121811E06738C76E60E 041E57F41E2D036E6F42D2BB67C5CAD4BF545C0043954F185618A28240AD4685E314BCA0 58F252BB508F59DFBFCCB55204485C94B722B922BF49F444AB3A77DB0EA7263BDBA58141 CEF5036659E841B28E7F2E5C91557086632AA3C994938A58699ADB05BC4BB73CEA8C6A47 8CB555BD4E58E0A8B926173D7ECC5CB1E712DAA1ABA20D293050225113D3E1BEAD4FA692 B425512BFC9036B100DE9E92E1D201A4E2DF1D60563D9DA808FD198E57FC42AADCC534DB E9E58EB66A9F170D22B4CA05F014D1E2995A57B72FAE17FF10797ABCDAF61D121C08B896 81A519270702FE1C6620D9E2D8C4F6B197ED786E6758C983BF1BE4CC991B259E803B3957 E1701A903C6FB476A99ADA01EF768B2A2D47832F8F2C19BBE4DEEBB42C1CB412142F4698 C84104A89769A7D798833F7858503DE35B6B7FA7C061FB507B34843942DB1E767BEFDE62 B8E2034DBE4C7A8F6B6F5101157521C226899AD14AC10770AC5D6DF0E8A931A2F96F1086 A92E1A87226CC3A0EA1C3E394C465ED9E3381272AD383BB47365CB7D9C420CDC3DF17351 F4EFEAC64425478AD56C38287CC1A9B0BBD2DB9470145B3404A99366D0472CD72DA36E5C F52C90400CE6F6AD82B9205DCC087CF696864D8F897FDBE2A9666A5A178AF41A449F71EB 446E9F6D9A9B1AF11A719C0ABEBBFC24B2E970EAF6CCA21153C990C02EE3292C05DD7EE8 5DEFA3129FEF9F2112825274951C533BDBB54A89B7708865B1B0FF2737D974E127F03FB5 3051D4B9425C79679C50A4C48D7B7AB6B95B4B0938B43E55E3E93FC0DCF45BF7FD932AD5 71488A94109106806B5E412EE8F403CF2A5231D3D08D7B0000D280971CFDA4D788D1870F EC7137782B74BBA7A3AB82FEA4E1CCA0048DBED074F9FD5E8E1953628700A5D7EBED3B58 25D81F22F2498C6B27F19F0C15ABD7081374A216EC55C8F59D0322E44253B41E8C2FFFD9 768EEEE40C191AEDB863687C9D463F1848780B9AE97B2A2A7DBBC67933D63BBA43CA2543 E9F6B49B3761A5211F74809A552DC76658CC1F84D07B52DBFBD746B011600D89EC45A361 5F6163EEADD76D8533C19BBDFEFB87E0DF93974DAAE8302850C48DC98E552DD3E57F86B8 8DAA68F60ACD6B88AE7BE9F58EDBCDBB87F61BA0A7946654D2F461C2B97F28F14AD2D52F 6EF669F4425B2F4BDD272856CB81C9749D6643A5D1F2741071888619D7A3D0172A87B276 4F398AC9C7E2DD320ADC228981522DF1EFF0493D45629DBA5E9CE539D648EAD3A1C45A1C 822303C42A0D668567B13933D9A0B96ECAB64DAF1A29F8CDFA08BEE87A2B32E6A4C592CB BE0A495F61646B099FD29E43B5DD82E56235A3AAE26B383FE8C18B505CB0307A6D92DE6F C74335EDF95D8FDC12773B3A1BE49CB9A414C05AC12A3581CFC0B5A0FBD6CEB374041EF1 5A9F7BC35BC6319482A0A0D038E4DD7573F113A9BE7EF0EF4DA8424F7CAEE8B90F5D922C 012C83B8C2CD7539B38D7BBAE810CAE31DF83BD4C8E0FA393E632B96A52A8ACAC86BBA6D B8DE15680192F1932FE04CC54FF9B67184F6146C0D4CB4BD743B32C4D3AE65019F026602 7D2A279B7E8174BE39B738ACD19E72A007738CF8BA65614A708EB93276152E8E91FEFA4E 68D4D61F216E693CEADCD01A0B857702DC9905F45D607B704B31C461CD5991418FA63E79 CE97F9B850AB4A0B15AB8DAAA80BF015170765A4161ED8581B503C4F0DD2E36AB6F8F731 1B3C8D1E1AC3D7C22C39B977D152A7387C6361B5EC065BD3888EB8C2B310AC9F98359E2F 09F403E88D54DC2794D4A9C4994A341AEA9211B6684816592069C4E8991C2A6849FE9663 DB3DBE83BEE26560D8B7B66FC6684BE3D87A4BD9FF64C0DCE8B8DC27621266AA215585E2 72EDB5CD6BC8EB91BB1FFF72E33523AA39BF21C890878A1A3A6DB2D2895AA60DCAE1CF3D D9F1C38660A1A348B5D529317FDF9DBFB1B4EC1DE9869CA6F582539BDA41F54EFEFDC5DE E2BE741D98C2E7FAFECA6480DE4E3C3D909E7110966C846791917038F10CB111200CAE0F 68D1E4A4DAA6A322ED76D8585B56034459BC5AD74889532BD8BD5218656265591B896669 48F82B9E5A588DC905868BA07D39C84634C2EBC07FF379A2CEA49FF18743E809809A3ABE 7AFD34F7012CCABD53248CDED51DE272C87B8BD0CAE1A424E50BE6BA427A583418810AD4 220024ABEA811EB42F2CAD4F379CBEE8DCFB3FAF3FF904CF68723E135CF12F213464697A 54B54ADA4EFC7550EE73335522A810C23E3D0C5F0732DDBB5C82928C226A40890CD6E45E 2DDF591E496582449753712262134A85A9C6514A2FF615DA89A99B20D1ECF6D6EE4828CC 698D478D64F5219B36FB715465D3E97701294AF652947CE15A1D9C63090C441A04CAFD6F 914F076CAB282D5087E5522C0F49B45CD73DF49E0EE187AC4753740AE91BE79128839482 3144D863098F56EC13441CC5BF449C645B9A4BB2CF9D516A8F14829742E72DB821FA98BE 7B567C458B65A86889D78B06FF47951C2A33194F0E11B97C529E0F0BA553E8A5431BC548 484EA90F4E54E8DF571010DFA54C39637426412040452251930600DE0651E17737C7921C B20791A46685CBE7658A34D238CA45A7CC4EF9DB04477642A3800B18A2037FF16E68EE1E 2BC9A39001169FFDAC2065B13B7B3A546BDCAD4E7B87E8E6721D91049774E3FD3EC227F6 55071D06FA9AC94245A4A932CA4DC0727BDB19CB70EBF4BB74F805E4B7C1EC69B1C75564 A64612CBFA202D6B55A0521490EF9087E04497497CCDBB41EC49B71C93F6C2A5347FBAD5 4003A1CC8D657EAD8BE7FD1FD27A683466B26750975A465F1A9D0437D5FB865614DDCF75 BBD262B8B9E1B9135DF08CD8629EC3C945F1195991F4A1445F4AD073867245E36CF6778D 459D09BB951DED122099ABD4FC23A011C26E7760D9BF02C86CE524B5CB8EDF9911781D48 8D4BB24E5B5FB4203B2D84EF6092B8BE35BB8AD86A376F7636B194BC1A911495A758D288 5DD59BEEA11295C30B1A416FEF4706CAC3AD02C1438FB7C4334D9AADD9363F7624486237 6EEF8E8C979DB71B531B9EF274FCB3D4FB1D60616F725545BA1026F8772211EC7BBB3345 99A63D9E64A0E84E27022AB17B75E57CCE84FB492CA470E98B01C68A8B46EDF9A49AE8E8 6CE98F93F9FF2DD8A0F5DC792DB177F366D16C51CAD786B909DE9BCED4946DA95D217B02 4DB58319B7DCA3898F4695114918BFD54DCCAE1102F3CD4981D8DC042C1C8F3DAC8C54B0 BB44ED6A28A74B562CE367DA8AAD6A211CD7A826668659728792C376EF58AEC91FD2E0E2 4BEF9F9DAC4A735839DF99CB89A55E398E4261F18D7164AC2994F068594D5D58257A550A C5996596F0CEFA52930A889CA57307C4BC945D529AF582630C746489F5519942822FD559 C5FB1EFA12CD25742693197578931D66B931E4828AE093CD5D9E03B74FE16FB2A68683C7 B4E9C43AD529A595364AA60788B483E3C44AD074ACA23CC9559EBA2625C1F112BE36B4DC 3E77DB8EC3D16502AB72A05EBE5CFC18938D816C1B7330C941FA12469A35FD5C23B19176 D555ED6034817B52F3E675762577028C681FB17FD9F32DA3677EAD7E15A276C19BCD944E 9AF9B1DC2D81ADEAD6382A5C412C85CBE077990DC1A376AD59E9110B7907BC25F17F563B AF47E59459149151F403CF5E982CB80EEBB4E39470EC6773EFDBD50AD2255E9AF4AD4C4B DB450BC43ABFD4EBBFFF9022DDA60D5ED30F1714247481A69BAA96F710E8B3AD0969E5BE CA24D6D855F1D33170FAC980E57BCE49584DEF096A9EE82E2E42F9883482CB71C2D955C6 DA70DEAF15BB8557584B199855D1B18055FC2C6023D2E03F945408978F5DEFCE19407299 FDEA3A7EF784838B838A427251214EF7682F464ECD3C41C229A54AA65EAE004C1F497E71 C930BDD01AC6E4D12399433AD8507AEB03596380FC53EAEAF71FF34FB1DC39CCF27E31C5 C8503535FDA2D096DF252E3962DB9DC9C12109EB4AF8EC7789AADCA049D3AC1A21463A33 53DE655EA7B2584247829FE96579F11AB9900532CDEF8BD0310795F0624187D9C9ECB093 075D1ECE4AE2D90FF1BDC7165A7983D7DF52C5BF34FB778F6DF769687DF82F0B4D548410 7F6924596A6C31AA8EA0B4913E05D824E17997E070C6194D84943CA9527F3D962C8403B9 A780204B31E1B4AB4665F469AE66F26EE1C27BDFADC55972381230E0032C2C7096B3FF18 680ECBB7591C5A31F578A2D4D50D4BA19B31B5DAE21D36652EE54D4C3558D7DB2B071B4D E711E125E7E16D8901DA757622D9F00B6EE0D750E84CA3D810A80CDCF22FB0CF2102AC4D E6C1AD2BE3E7FF5D01EAD41BD9CA703E8442CEDF8B7FD4CB1D6A7C9EFE2361D5946A772F 6DDB42B7E852EEB11D3AEF1311E00B2EA5C035610096836E85231ADA6D25FA7A85BFD2EB 1F073C1BA734763CDC3D8C570A540D12800C26D852FD30D48CD32B4C9CDE8DFAF625EFA7 C328D4BE16365E8C712D272B29EB02B75DFB20387D411CD9584AF74A6D0C59F85A6BAAF4 72426C5B26553835CD2F82DFE8507B2C75E109B3DAC61D640F9DC73F60F5C2C233BD6837 AB8C9FCFBDB182D6A608661B1F7C69B7DE5C06428A535906CF4239D7C0C947969E50A17F 092871ABA7A100C6D8FC78EDE65CFB99F5AB629779826A90047D052695CEF4A6D6935188 5EF47E86F5AC45E7D9DCEA244111A9C30A2CCA82F2625A3C3A73C89FDF67C2CAED5E7D6F 9A9A820025C288076020910E8B798ACFB87D55643E9D2169EDAA72D4D4F4559F4E28B1E1 18EC4DD4CFDEB3E89308E16DCAB6622C1B106231C4C1C60A5EB1630F076344ADF6C64BB7 554A0030A1839630EE8E03EE94DC86CFD82BD169515EA27F963E730A9286B48609918C24 11EAD301AED8CF4D358785B1F35E75B77DA67BEDE82E69A4E7221A89F367CA3209ECFC12 5171B90516443D7A693B4ADF046A2A48262213E8B3C085F65C18B434E48CF0660DE3AF9A B571C2E99307DE2C4BC00ECCA6BFA3968802F3DBBBBB844BB8BFBFA3E3A0E3E5D6D296BF 8DA11CDD3B420F8214E904C427B1E6D5B8EE141048C77D75CCB6094D1D00E8FB45DD4A64 A3F76AF82CCC35920515105C7599F0CCF46B6E5454E8D89C07C6569FFE289F31931D9D8E A19A55AA4EEDD80DA42A7426741C524C873CAD614B86AFD6B3A317D0BEC432B395EC0C64 D3D0FB8EBEF53611EDA96A204B277B02F60B565263F3AC6FB73D3453D1D4BEB12BF18147 28CA1614E652B2C3E35C87033D8DE41F7A059831E6E3682FE70B972E5E26B7583EEDF313 E52B7762F91E6509E1B154E54BC4F504F8C3F07EB42AF6B7407E8C6C659C8A670D7B6C97 0CF042BD304D2A869252E1022EBD9CF2D4C16AC5501E1CA09136E33F79E4C96FB4DAC06B 5DDE6605863BA9AD17AFD7B886D28B6DFA3143D5AEB1A44F07862769D3BFB3F7F4BD616A 99384F03261D7724F3DA78E236F9CCD4061A342666EA23BBBD905E27BC163E40E684BF15 3AF8C7D554B4B01340AEAD6BFF1A4883ACAA118964EFF6E4537975E46849CD20A5AC9822 4B0C5D3FAFECE5292BB4D77039679DD6DDF4289295AD8568B58AED8939E424A5EB6F5CF0 0179FB355DF9C43C1B0D1B78F7C352FCDC05E2255388707F31A847A6C1B7F959556B588C 74B47478393090EC7F36FB47AB38A1D457CD5E91355AE6F1DBD2F136925E72CC8D29EF34 F1190E2A0407BBE87BF0A8380CD5F2E44A8A53E5A976773CCF3EDCCAEBFD23D6F35043B8 F4524EE84E188B807DFEC4259BE4B1CB47F3B39DE194A531E1D2AAF0950183F4193554F6 C70267D4A501D8F56FF9FA64B3EAA04D5D509BCCDD30D475651EB2769CC04E5333DD3E36 FD697DB4266222E1E0C3E64C6089786CD4C350219CFBA197F8F86771529E0E228040B2E6 59B7C248D3934551EF1F64505F8008C1E0E8D0BF692C815AC0D5722D381EB0E86CFD7697 B7CF25ED997A02D2E0AE73EA7732B14532CDA27EDFF8A44BBBE4D23E8CC5D0954A476C2A C6993871E92444FBC1B6D821D0FACC413480AD796C2FBFE765D72F3D29BF72B3E27A786B 5BD7DD10B0CA9CEB7A328ADEA1059F0772DDEA1F797ADF97D3FEB87C6430A36EB1302269 1165FA36FF625860303053B81FE9F876DB778E605D7EB231F1FDB281636F4E51B78E92D5 F55F6312DE7B0BD91C0BD0B956FDDD99748C67EB78E7F5950D8CC9EC1A4884988AA75A4A 5F61B8BEFB5FD19A996CD8055CC8B260D0ACCE9AC16880E272EFDB776D51F6431D692841 F1AD3E859864A22F52A4AFBD1D92117AA5C0414646087C463D0340FD3FF60805DD2EF779 A6A33591895BDE445E1F4BA1284FA9D87D80CF392B42B4F44D3E462A89E8AE39825CC623 002E66F161DECB1CDD164367963762836420B4BF7609197F4898EBF2B8B137939AAB35DB 25196090CBCD89C9F3043BE4409E72997B72E71B79E529034657BC3B0D5852F33D4E1D30 3F315D4FB74EF3BBFE7BEB3D7050DCFF7D9B3D8FC57C8179A52D6D7ED744BE5FC40181BA 5930B44AFE67F326FC36E2E60B1128B70D1EAFBA8428F4F81FA98A53FB86E4A7DA3CDBF8 62AD356503D6572B433EC4C8DB52E2299C0FCD9F53E0B22EC44B8E5F11A50009B027F9B1 0ED90D85E7EBED2C6C64244EDD1E808FCFF68C2B74B6D485725E679CAC225631E615D0EC 99825B6A62662179F9D0F7FFA911BDFF623A4F26B9661C20A886B3C5480C8C660B8D45F8 BC28DC82397C7E8C18693F03F9121ACD6D0A2060C5C9827DDE58A323CF625F5470EFD931 1B3FA30404F1FDC17B73E4882DA75AE9C0016CE8CAB65E0CC475575AD9FBAF2AA58E19A1 72A8B1DDECD0963D180E41F597B55AFD842641E3C592A590DD6B5D197EA6D733340EBD3C 2811979060E333654F60883402D888A877F167CD67BC6869DE21A79CEB192A2727178758 1B93D400C75E6B0E660C9B11FB9F844A1DECC673C887B0C6B5DB2A3096064DADF4F97C73 41B2D6516E04EDC0A3F0F33429F60FFFC4AD55A4CCCCBFE29E8D714E257B6431F5D721EB 30554684FE5DDBD4AD002B6980AC840FC1174CED7EA9CA0ED720029A64EE942336065DF9 23A6020250142C014A2F37005EC22BA1E2EA17521CD6E445C38E1ACA44C969BDE1F12D02 F737A717636472F5752F32F3177969A9D077AB07742BA775133E0856C39CFF877C6AA716 1593C6DEB42CD64398CF6A7D12A19084EE739130941D668CDBBC08775BC9C0E4CFD5CA44 C79D653F51ECDEE1C13DA370D16512BA9840FC65DB6A8F8A5C72DF46A350F1BBD18E2F26 D307E511F014FEB9FB3E6EC60ADB15A2E1DEA3E72761F78045854115D72ABC90D9B0DB96 047B58AF73FF2BB0F0A3EC6403F82CCC35920159ADB61FA268DB0198582939241D21F355 EF26228468B778ACF0763576394D8B5D3FF2F4F5DD64B0E662F424FC2B7475A800B66F4A A1EF8649F5BA6A80FC3CAFF14F7222C88839BA99141403880CDC724B9E41E99313DF9535 E444002C75ABE837979EF5B145A543BE1B4D120FF67F74ED3C90568CD0749CBE97575C79 9DFC19E8520580F33CF4CACABF95CA472CBDBA09EF3537B2661AE6004E8E64F07FEBAB84 4EBC0D51851A13D4078B48165C5FEE40D988906BADE1CF8574EFB8C05BA4D4AFF2C7985D 782A64C1A30207128091D9D9ACC060FA82503C822118AE29C349339CF66C3ADF9A4DE037 96DA0C5E628A29526C24DC539A10CC84020DB944F525BA88815988CB5884A19D1B742E75 CAD001B97DC05357F755B7099FBD4BB7D3B0EA07D93132573459DACA29102E44331F3E12 34504FEF882F2F678B84F824EFAADAD628DD97F54AC98D1F4CFF02B41AFE0C7200E9CAB8 FF79B668DA2BE8C05ED8EAA51D3E32AC853AC328ACC083469F281B4C5C555D20771EE861 852C6489C69E69C54E7109E003FC6808FA8F63B4BD2E960051694DD1E731C73ABCE39DC9 09A29638EE06B5887482DA9881FC5EE046C4BA06C37637AAFD6D5E9DA87047DDEB69AE8F E2EA23890FB82150195C0DFF2C66C4B65F80893442A4052D5CAFF31129285FD50101DBD9 BDDE5DB0B1C041A65C5D875CF6D6B3BFFAA58D22B84C6D4D2B83D9C119CED33E326565FC 0515375004FB15CB6D81A34E22DEC53CB9E69140C6ECA17526C3C5404C4D0EBDB9E7E69C 3310D273FB6096E2582BD75B91C17FEA8C952CA2F1740C8502754A4CF13F3D579CC980B4 DD3B2EB2D97C0456587B0E6C80CDA0F226A6CB433DBD5C2ECF56BE7274BCCAE7D86F2420 C931A580600A3049B82C62EC6594EBC25535A12796C39FF62FEC246CD2E90DC2B1BBF786 E58FFD47ABE6CA8F0614022746A203F7D5F880F2B0D3C47920BE122406F85B346BB47813 62D3184964115CB2DC3F6FC3290AEB6700FD0E18E495DACF87668E60499F9D6530D29479 7333E53E6FA065FD4406B7C31552B30DE9D223933D8C934D6CC536A32C839F72004D0F44 EB9EDAEA21A8D67C60883A57B7E295E3D88158A61252477DA8320F46EAE6C756C100C325 BEFC53E0A6E71878373D0B1A4B8978AD8F10B4B6490CADFAA6540C660D4018A4F615E850 1627255BCDC143B8AF8777CE3260AC35510E325B02317A495B6881C772E1FEE438B875F2 FC6B67700C845B6BA9AB04CAD9F7A18EDD115250572C14F345668DAAFA7951D88464FADB DCBF0E8BECDB1CF7B1ADD73C974F275181D781DABDD1847911FDD97480337F6C0E1AFEA0 22F013C1E94DFB37E22D0072C4DE6E9E93E8EAE31426D535970413C4C03EB389910396FE 0EAB5E9F62599E3EDAB75A0A94C7DB16C9CCC91D622F315E645EA1E19AE39096C4234815 F52045E5304511115BC41962C31B7DBFAE99D77C1203002920D017E06E84A2F45E928998 3A37D1B0F1EF84B536A2D7B71AAD8B9354F0BE440FBC6FCCF9467D7B3738687BDB387B18 0879E2FDAA97C1F216502B1F128F05CC7EFF1A5740CC5F256648A112DE80410BF8AC64F2 5C08410CEBA395E553BB225C3FD576E700B6B98D81137C75E493AC2A5D0E5ACA0CDBB286 BD0DF3DF70D8E60D56B9A38DA52601330870F82A9C98D4771F4CF69D835573C3D6B5DA4C 4E3E59612EA5CCCAC11D7668379FFCF762105BA8CA0621182B9EC157F3E019C9DFA9715F 239F0320E93BBCBBA6A5F53CA27762FF9EC00575EDA204A4D6426E4B1E4D339E1B9C49A5 C659138A3E396C688BA61D82775438141E9A80515B923728E3652559B09B38F644D267AD 8C95499C1E19590399EB4F8A6E893A9248DCE7C28522DAEC760E99811D89127744E38E16 9B601B3CD5DB52DF50745A91364194F9C8503344CA26F37603BA3CA44AFCE4ACA585CE3B 39D0530D78251680B24DD0CB70D5BDEFAD4F614128250296174B3D5374C63D50E897A9EC 1CDB331459EDE4BDD4F2F2A5926117A275734B462720C176167FC6E42D8DDE4433F7C98E 1A65483D074F00158EB48A9D608E919C894B8DFBEDFE0B5F28CF18B937D8E2BC10EF9B97 5642FE99418C0CD0D42CE04A12AA4620AD7A07BFE69C74E6D4FD11B81BA78EBAF9AF0984 E37CA12F078D9DD41E1C7CE51EDDA73DC327BF766926722EBCD877F1100F12EEBFDB7C03 948A013A08DC999B3AB336343B27B233797C613E0C00E1FE9FA468D339D12FC53BF37553 B25D240EBFC0D4B64AF6AD8ECB54760A37D4C047C595D214BB67D4F77F08B76A5635F865 3D1DD14CC1DEA8033E990B4604B01CB922C9D8887DE0EF5F0CE326218FDB68CC71772706 A47EAFA326D31A51477B1B34C59B1460693226DAD4AC15FCDC7309F92793D35E956010E2 D7D1943FB912514BEDB873B260E3F65EEBD6534199DFEDEAB16B60228CD8C5434E6F6E40 A56D036DE075C1AB9360AA46B51479B6583683BEF945D9171C4081E017CFC3C74C47CD9C 50709C64E15E5CB240DCD3DA0AB55751C2DFE99023144D5C405CF630FC5DA48BD3389FD5 3AE0E0066A38A5AAD930A822A9981679BEBE0FB6EACA3AD4D22B72DF1933E1D6C3EEAB4C DEE0232CB00F895329630CAB1E22C6AA913C37F4396A45C354189AB03D3BAD29096DC450 E742786402BA3573F7BE1D9D3121BE8FB9C59654B5FE261D8E6CF42BE97DA3C26A8EB030 7F1322950122F7FAEF3DAA9EEE8DE423B551617D4B0BD946B8F7D4DEB62AE0D8543696B0 6C2BD2A90E09179FF0C9773E205D7407435A8C0F5DB6B08495621E4297CEB2F693A4E936 CDB0B92140F309B4F3C73C9A8CB72A277032C5EB1936741D9A1C36BA879656B405B7EFC9 48FBB353D534BEA4E937CC574BF9FE5E08CB3E1927CD55E317ABDCC2FE46C2B0343B095D 620BD6F97B82F4BFF59A7096995CAD1B3FEB94C018607FAD0C9506FC0BB24A7C41E42DB3 DB4AAD39E46CB6A853E47D373053A769908659FF5E6CC0B737548BA66B5F274EB8D03196 DE4C28C757B38BDDA61C481EC956574807F479C47D1A39A0AB74FD667E90D563E6E699C0 1176A7990DBDC5499FFBD0448D1608AB5EE6C6C5B09A388F4136808F9B26107CAAC8B4E6 8660FB2CDA885FB21DE40897FE48D0E47674FDA3FBD5C43BC13B884716CBA5F5FF9AD868 90C62E63D8C200FD3729C8A36D77B768E5DB2B7C49FBA785EDE867E733251A1E4A0ADDD8 DC8B2216BF834DB6F4DDCB9FB49784E138C7A535BDDAA024F54A75FF5158986FE5CA9CDE 8923EBDCC5A71C1499EEE598E56F556749A34E1CF36096494253D4E6BBF9169A33E74EFE 6DF38051BD5FB757873D44B474526BCA380AB3C81FE426486B1897801790EC9A1CA666B7 FEAC578C6ECC1610A56B28CE5F47E7F760F6F196420CBB85EF334B26A7FCD62C593DA933 53D0FFACFD9702AE8AE7DA6599986287F0FF275A0A3D696DCA8E1419EAE121A8E8AEA1EE E5C18438276AE9CF4F84BB030CE21B977C650DEED4DCB46FA53C77EF4ECDF0A1D6B0E9D9 4A12EF514DFCD3A1BB5A42CD93BE22C07D502FF6825A5CFD77DE576C599541AFFB1EA490 B84AAEC4D172FE1E0ECE0BEED5915BB5D34B085BC92DC078BB72957156958652E0819219 2CE7DB1C658A0CB867D5ABA473258E4969C707C95F9E83F4CC4238BA32070FC5C64C90E0 1E80D13BD2AAD3DB11B821976E4AD8E52FCF9BE3EDB50C81368E6A5D6CBD5078262666AC 21E457222C95937A5434462F2C1F338C1EFFA91C21B93F29D03BDD5CD333E5518328C170 72EAF924BF417F10EE883ADD85478068A77B4BE6BCC91651722EFB0F49476ECCD9045FA4 04AA6C66A1B44A0EB86D204C007C9C2ABED7E2B37BD5BCB6C7DF49619A7541DB9B7CA314 39CA372B7B302370A8C854008993D57651D2172128978705EEC99945AA4F20719630A39F 194E8987CF0D75ED7DA7A8BB2D31A0865F9797A71906FF47951C2EE3AA474825B3E06D78 80F9FB7BD964674276A2F2CF7B31A9932CDB046A05CFBDC83C061F33C54B644FF13E3993 7987854B523E660C64034495A4ADD55038E2BB0858F6275EB023DA3092E9D28FD88F0B6A 6737FD2D492828541D5021D75F0F7B85EBA3C1BC6A9A2094604B10DF93AC6015C0AFC6D1 9F097F7711638D8125A96D04C1793ABE484058D00FFB4F6D8F668E42041EC006DB6B1A1E 18187A594CD21E9272852E6B3B946BDA69524B90661E0D95593F5F5EBE74E7EE50CA5E8F 3D8D85F555D10495D4A1324574297182256EF15153EE380409DA7172ADFC4F94271BC743 7391B4DF3B4E7D6629DBF4AEC22660E9041C7AD1A85F7176C01586188750DC95DDFF81A2 A2E303E9913F2F02D0385F622F45ADC48341849DF4D618CD44E4CB8BE2597AA1247CCA48 DAB3536C6377165A1B63C9024CA36CF4DBF11717C08A1A8DA4612A2F0C2E15D51102FB7B BA6682EB44D3E6D33D6FEBE06CA7D0CAF8AFE2F6D3F43EC4840AE3E02CA950FE8AAB2569 E4DA89B3649D27D7280D617F53CC2142AEDE6FD9B6DA4B6A4FBFB83D1F194181B3065905 1551A24CDF67271E782152DDC49382F5BED4A40D0A684B980F1CBA2710213728533FB006 78EAF6ACAC15DBA88100BCBA9D9AF218B7C5BA0D985DC14AE3C6CE22D833DBFE278A3A74 3A9A1DE3035C6DC30E8F91AFF472E1CA203203BB52866E0E14CA7C909D574A1B85594125 95DFFE5DB3740398DD58E01A522F69AAC7EF3B8E1E5343E80D795EC1DAA81AAAA85FF362 5616255A5327BC28E01A3D32A58D7729D361466BC17E3DA4A0A43CA5AFFEDD4D46C0E339 40A95873726CD1DCD8E30A215192BF38A86A74DDC1C3D236F0C82E8952D6686D9C217B18 5BF774C232A448F46CF389F23BA0E7066A03160B3F4A8036315E79DCDA648607BF6D56A1 F0EFDB417DC9FD05D09BDF2232A9B19B6097941CEB59221653FAB513460F68560AB14E0F 011A9F9B50404CD45FD7050D418162609E3D47F1B42F012A2713A55872265FCA9CC4C7D5 2755BAE363342969130948DCF70E842A15A4F759B772D7937BB819EEC00388CBCCB052BA 4BA1741A82AC381E133CF43B82B0054FF4FF4D996C9EC95296352F19B77422BE59EAA4DC 3014E311B3BDD211D8E63EA77434032D0A35976358CE9194F81B7258095CB352014509AB 8BCCC7081862B3DE888FFF16450C50B59523A88A0D05B4505822E1AA8B93A0C58A8CA7AD 8D17E59274F69EA6AF2332014F7CE53FB1DEEBA365758637B3DD955C87A1A00D20892815 1340840B5A79298119B3C55C4F373FD6E1F3C87D438574A92F8F2F962BDC95620B977604 E591DBC3ABD3E6FFB4A647677788B2D2BCE4F0A37C532697F34307C109B18BD1D5A7986D 6337292631C3126D7FD27327653D2FB33D866EE664AFC7D309B58B9761BBBC66B7B6BBD6 63E69D96863223BD0D4CFCB2DCE1F76D070AD5359DAD5240771676826D6D9E9684486271 AE8D0CC4E167D8D9463EA2A946A83A6CB98721E3BE22A15155C7992E3E1AB4AF28ED5B35 5558523BD4244473AE226AAE2FEA713FF149A64E788E5B3425E78A044EFF32FC2648D17F 73B1445FFBEE0FE1B494DBE512FDBD4368AA780B6CB10BEEF62BB059F3720C3A381360CD 5892AD8E6205EBE4E01E73BBBCC902D22F18DD9CBE816E5FE285C494586203184FC9C8F0 220A5917CEEE6626DA2F64F7479499CCC22E7F62CF117D181529AD50748121061D30C143 1BF8A4FC3B4B60E35678BF81846690A8CB4A0F9FA45152A89017D9A0B70C359599AC2C63 23922765C310A1CD0D381E055E941DA048DE74B46070657FD65A079E12190259304CE5A9 EB635ABF3B9978C45937B52ABD8D5633ECB6874445AA67BCE3FB4D277AFA039207ED9586 DDCA76FEAFD2C6CAE047B04BD2E9B83A6DD0FDB7EC13C0FBC743E421DA5A9913B10D7D6C EBA9405AF418A17B4DE3C32692465B27B59D5F79DE7A18559E4EB9092400176BC899F676 7244AA95C63EB7F2DF27C03D5A999D8B9A1EE3435E47F8FAE3211DCDAC17A7AF2513B95C DDDF7BBC9C36AFF920D156DC18E3FF14A66B8E0AE6A7E9D2573761A60EA219C4E83352D8 E2F4BDC4C2F010C63B6DA9EC64B72FFE00C2256EB1105670603F034E0B40C3B8691C696A 4FC111D69D818C1684E5B8B23A0B3931A5998889205B2190C6CA34690377706E846D0C73 818B36B0A0C83ACDC880295567161B4D4455836FBC21FC063379F1DFF657887FBBB11F44 80981B0CF9CCFF33EBF20FD41E15A84A9DAEE69D6BFB89230B35F6F5DA31DF01B90A445A 7D397B37B3C273206F96B3D5606E226B8C06188A7649F0FE5468FAAD31B1794BADF33C72 699D0D9A0C81DC941B4D2F0F64592E88DA5E977A8B213252244D85791B243E311DC7683A C589F33ADEA30BACBF1D2FDB05B42C0C1F1E9BB79FF732F51724353371D2E292690342DB 6AB6241331F3858F52E238601407FEE9B59FB6E520378C9B0E2D95125ECF77987CCF1B4B 38D067D946CBCF80C1C8A9E37E53D8C9D7C432342C541026DB3C628712C925C54BA6CB47 327EAC30E2EF5FA37CBBDC0B30C5C9B795337687D42E24D46DE9507B18452FE4C5B4E8AD 937A39C9C7DD9EB64CA77F4532BF6636B90E6341ADDAB727B9F80611A500334DBC854044 B7682DE93151C9E4879120CCC73F1FDA9E5D5FA0C26BF0B243BD84F0F7EDEC90464EED50 7F8E115653AE032B96A0364E2EA85195F5F9627EBB948B7CE0BC0D3A728ADF1B9D81A6DB 27B1CCF754D5AAD8B1A7BCDBFD1033256EB2972E4FA96373101E1723F04B07948B0CAF6A 6E9DE518FE527C44BD3FACB7BA803C37B074997603ED7A97428A66D3AD18F9E55FD87923 5B31CF9256E3C4FC9DBCD6E8EE30656E57F4B215DF43ABE36F0E7CD4153EC23D95D96146 D4B6AAB8F1CD1A6E537709EE8D61E8BF23F365E2905F8B753131BD60ECAA8AFAF2D6B47C C340E28D59C894342172BB99D727E9134CC2A4FB465401660AD8259FC3DFD5A6B2BD3FEC FB876970CB8B5D11BF1F4265A22CE2158FC21B6DB8F0B6B69C7EA1745FDCEA13A9653A62 AC204FA050B94CA2677AED1C4E49FA867363D5E3030206C5DB1E44C0C96C7E7A04577B48 9F29A89EB6DB8F9CB85F9246B38D73275BBEB59F6A8AB1B8D549DCADAAA9A3889684206A 2BA56AFA55843A9437671A20277EF0DCF88C9746DA9F3E4C8F60973D9E63D9DB74ED8187 F425E5AB12E35E424D240EC647ED6FE1BE784C4B1E9AF6571D69D2A6146D64346EE883ED 8C21D28EB4FB72E1C1C74075CB5756EFC9CE801FF4F9D89E5E1E317A6DBC3305073F396F 3ABF4575D71BCF6605884B15336147264D4FEF3A22CFAA4CD8D4A732C2EE6AFA1F7577A3 65991F5D85AC2566216ED4D649C487A0269951C40B8EAB696C02F160216A9412EB739A0C 55595F06FFC95D9B688F9FA141D8C3E18F595C7C2E18B866DE800C38D1DD1B8B25450614 B78E03B22224649EC6EF8883531FDC8CE56872B939AA10B369DCF969B43B9F2622AD2D7C 3EE1B5C8CD12610130A16AC0FFE8DDB9935DAC9BE1D2868B56D092BDA17422A319156E54 48E4A69CB9E27143ABB2C75BBD5C87FD3F320F153FA0E0F1235F9921D55959B342647E06 3B9DED3790382D82097FE7CA8516E360D217203786E6169887E45874715E2FE6722ACC7B 854F57EA26D98C79BFDB9F221A5877A039830B7D92B1ADF3045169122C3FC9CA8501E9CB A84A953C51E0AA15955B11D90854FED6FBFA80BDBFDADCD89F57436E9AF02684A5B67164 C8B0A4C2BB11CCEDF13370BD07828494D5F2B6D9C804C89BAA269DD3F5A9B9250D42EA7F D8189BF9D0E3D4155D0B3FCA0FC62C6B6A9FC8B9F7871F74CF5AE38C7A42ED43BB134B92 74B91FF14FE61A8A5A44F4D74E6B075E3330D86A875187122AD1A7FB2274D3D9F5F03A83 FEE32120F1665069E33C3740736B4FF0D4B194334DC50A34DF8C44655A4504B1023C6678 6836607435641F2DE2D08C7DB81277C8CB82D0013B609F5436C1F2384E9BFF39E6A9CBCD E5D8CF171A0CB77578F4EFC0C2F6DA437F3F771D0F353457F42FD746594BF4D37A60A7FD D2F5B0618DE2A548F8F9F5FF08F73B53873CE1E88DF966830D0F9930C75E79EF03616708 E7DBFC6E3FF67E8815990B9D59CEE18B12CB89A2A143DF91E8E9725842287403947C4B86 086FB5D8D2BA1089D03F2FD58D67CF4E4987AFC839182F066F4CD46B9D83F936979A1588 53FB40CF7DA358E8826ED3F931C6A6A299A5EE01C291EC02E2FB11F5819B16AF7825929F 7202BC0EA2ED491C5BE8B5566F36C831F0188656EEF1FEE5B5A44D90B454EF1E755BCDE7 5AE6E05031458FF26288155F86E143F4A163D96B30B491CFE1086DE2EB3DD8BD6A978EB8 A32EB2AAFC78A28B1B32349B6CCA3DF9FEA2EE2FC24AEC000950829EDE8C9B0C61FD8AC8 4E254BDF47AD00BCF47AC2629C3109EA889DD84082E15B992625F1E8FCA54343A6F71D93 C7F7667A833B2ABF0699F5BE45210B22C4F9E7264592C1C053801D2DE75E27BAC534B30C 28A33F64D680E84DACFC796A44B4134F123D98DBC2D36547C0F3C774D90C0B2247DA59B5 67895A56DC9CAC5C5E70CA37AED792DDDBFBCDCF35A5AB6C0DC35D418DE0F969B1FC64D4 FD0A43E1C9CE947BCFBF22265EB13F9B32810CDE2F5B3D525035E90DDF6A51EDBCDCE668 F72B588266919E06081417D0F2C9DD7A8452DA200FB50D04494D4C6518D02E24EB69181B EF7EC94C62B13A3F6D3D5F23F9C4019780E3503F180363627438C69210ED2513CA1D6F2A 88B7C2C6B2C8112095360147F81200962710FF2647D3F999CF166F2EF27F65FA70CCF2D3 C2242B357F80C0726069AEAA59C95736E8FCEDC998F0ED0DDD0F21C86C5041E401AAF35A FF54DFF159FD88CD4E7CAA58A51B613BC933FD30199225F3B86B8EE1FCB0C31EB7CB1E1D E540B6FBA1644318245F56267B9C2C54FF592B658A098F51DFB5ECEEC494F0A1E08E1EFD 4E957E550C86E2EF82832CA70A038D6F9E27FE20D669474B4359219ECFA08DE83A9F20F7 7014F5EC9EB743C9DD95F459512FEB819A988454C435B217925FBD325567EE55D4605769 3A68B68E787AE08EF2B3679BDBBA7865D414D49E919F2040C832235561A5D22E3C6F5B05 7E35A7A9D5DE23D83F8BEB5A225283D605E50AF2A7BE59455C92207BE733E9AAE58AD00E BA9B301690706EBB1709B96700A607B2BC8A85DAC387F0915F18B912375BAB06108F12AE 9547410FB884F13644A54B38CE586629DF6D943E02F650B480AF19B8C54B624ACA4FE235 2AEE7D16C02BA171C088B24396D005A8FF32AA35379F989ED7A10A6581D34F7E1B72AE34 F04D86EA8F42DED4B3ED5CBD6073FE7C74D3702C6740B8B164C8CACA7C51FA3BD7A672A4 DDAD2EAB7BAB671FCB8A9BA67BE8BF3F7AF717B17CBF7F598673A6D9A30D8989A8E32131 F16DCD48707BE927073281F23E481739DB19A868C51BB8E5FAB11796F33AD1CC13BAB6AC C4AC2990FFF20DEAB21897E3A9BF1C4EE693B20C5B858DD5E2F43350D375B65B0F9A2A54 C779661AFFD26FDFB101702EC507A3B3E59C1BF07B2BF03C1ECE6B0888B92C736F0F1B0E 46C23ACF9D328057103E655A284CB06C3A512EBE50AA44D25672E3BDBD1655A136F667B1 9E06F364CB594898CFCDFC08FADE8D27B0B7BB300F0FEBE9E43F9B3C60C638D2C3E0ED80 B4F905E8099A4F6E0A4E2B1BE71D6352CC676FD0A25E5303BF9F25F9D07CF2E328E43127 F1D268DD8C3FF60ABC9EE9BAFA76DA26721D143C826401A1CD9B626778C8357BF60E8D96 00043F9795DD5208D207438023477F284232539733CE08146144E2380DB38B9C5DE25C16 AF12D788F3440E20DA6F67A5A3017AC9E65F99C7C26105637C7F93B93BA8AABA28D86561 044E4287D5234039E9D01C0D023843BFEFAFABD65A46EC1BD9B2983FEF6CA00592723FE6 B7428101BEBB6F14BCD93FB8C15E2596AD0BEF5A7186C56881F1F594BA57F57719BAF225 AA042A84E1DABD8F16DA3D652AB7E17706DA4699D3246F943F660A72B56B28867F41914E 153181BA8B8F7CDD28B05AB7390FB4C747B3C6590B579569E0D8C62D1302A3B4A732F3E6 7B1D6587DD669CE4FFEDA6EA27C957730D76F70643F6E28C5BE92911E270CD1E8CE7E41E EAA3CAD3F0949368C487374A6E59F29006C2E5162DF03B8D937F875A51E9C5D871A88B63 1527DAF960EC321A9205BE202ED1A2AAAF65B1C54631FFBF495D6FD50F6062951D545CAA B11BF5C7B14FC730DA239425CDECA6EE36F447CC5A81DC0987AE93D8805112BFCE7FC7F4 20876A677140A9E6E72605BB407EB7FC692791F9E8C5792983B5BA90C060B1873362AE45 4810E3C5324C62A344B9C18F26027625046542BADE24DA5415B2AA261610BD508A78A009 B059CB402417A0A90D743AD7013805BE42D4F861B70FEBE5F522D20769FBD6A1E1A5532B 6193ADF67FFD3607A489CE0C845FA3BADA9138D73437E5FC000A0B283541F42EDA47CA58 647D10995A55B2642A308F226FCDAD4E094D5247164B941536FD5A9EA2B3DFF2046B0DBD 1B76D8067856A90F91526E1C5319B4844795F381EC6B7892A1D2D326934EF318275E7573 7EF614713A4193A94301CB290173F156E691E86EE9515F396C92D8D8931FF7CC3C6F8815 CCABB420049C1EC3E4753F837D1577EA87093AA715288E41C58EA02C2EE9F1F23B883CA7 09916B2039F44CFBB9695F6079ECC04BD256A3280B14C5E625BD2BCFDA1D27F99715D4B1 A3402CC8B4504FE3245B4350DCDA2FAD6B558F27F2738EC09022E673DC39824AFFF39208 F626005496E3871C6BF0193740176845EA9CB09390EDCCC2411E1DBEB3B5B38C79189346 11AE025C4CF1CA285EE5A50B6E17C252D3A95121265C5606210150A6C0AD695A48BE923F 7D076CFD8C8C941D31F6CA7CED34DF81718840BF34BEA874991490030F5B359E57C29317 D8C91BDA11FBFACBA60202D40DBF9654EC0D395625CFCE6AD8E77EDE8545136FB3CD7F3B 247463410FDDB0582224DC78C5EC746C98D2E79B91218734D24DE4CB69B88FE6A799BA2A 10B031DB068D2E11ECB2963A084536335E5F61A3C25724EED409700A3570A7AA551ED8E7 748808E7939C1A58E8E3B3F8C419488AADA5D05CD23CEC50326FCAD7A44E262B31492A07 41507EA364651521892EB35F9348BA72F08652084E21EA10CCFFD7D330599B14BD795124 B3B7946E42C6D202045119F263A2F793685551CBA247026921DDD63D0E7398ADFC652DF2 3EC1A3A053E672A1A989CB696FCB54AF07332EAC9D99E180BB9EBF89C2AD01B9DDD4A890 FD3373EAFDB255966432B8494F88AE83294DD894EA10D81AD122E4227AC45CEAA1129C52 088C4021766CEEC0E027FB28E5C933125FE4571EB5110AD724E20DE599E73B0BECC46878 EC26178D6407C0DEF4530EAAADD141362A20B6C8DBDA2991E48A8884E1D2130F34C9694B 6F75AC00ECEB46BFF671B02C4A591AFE17533D3BEBF92B181EDE67C15746B555E6AB114A 624C87FBCD21ACC959D1B4F9BE9A81EEEBB59590C5D52D855203D70EC18D1CF7DEA143C1 EB56F288BC3C3D95820FF0242F727E5AA5110DB6C21C7C545CB2C2005D0435A96D8DF61D 15EFBF69EFB1D64270C929DA1BA3B98D8C1A7380A3463F194C2090C5DC4E3F46AEA2BDF4 C3212FAF90872D90CF823165D692F2CF7B76504755C06548928B0843C115F4D8EA793850 26B432949795290CF773DA3680F1EE94E150B240A9C9F28A7F185FD1DBBD9DF118508F37 348D5DCA197AD62974D1C93733CBEB513970EDDF773E8C208136A577DAD1FB043DE6FDA2 8885D9B0B849409472D598814F4BC94626147B1D44DA03D8D4B5B8CB421D248F7986F654 94E7F2358C3ED3BFED9D1003AFA9E8F7626E83C379932FF09F68C6710C3FFE09DA73F69E E866737559898E6EE2FCF27DEABB16F3FF55B380E6CA39AB9B2C602F521451C25A99BD0B 85DAAB001A7A2244F773E64B974389F9863763F197FD84FB12025CA9A6BB93F656C40059 26EB1263D8673E61127F1BB1DB4A2D3E22AFAF34873BBCA746D9C56B0DEE64E2CE85E341 F545F039C2419899BCAEDE1CCBABF5868221CDBADAFB07DC49AF818A8075F064D35D8A5A BFF0CEDC63E1E981A09D25FF91F2F595DEA5079BB66EBA836FA8761458B2FEE9E7731CA7 30EC2BEE942D4D667616EC4FF621C1FA1C19EFE06632D45EDECEC4B617822D7B8F650479 4A73BB3C9BAEE4D366582F723D9C51D16786DA5D0EEBA132E5B6F2CC844A3E2E9CFA6211 6A707F2D17C5A2E705D41F64A8A340CA519B768C2AE1D3CD987050B14CE8C48C5CB4180A 661D0F9D13B81C5178440DB8966C0A0A02CF8D9AE49463CC396E1F993F7FA8D8FB62088A 3CA549CEA979CBD6B4190E191EE77C62A91A926814A7AED3BFB2C7C5F5B18694B322E17D 3500166479DEE8B5F11CF1C1349B193FCBA08EEB893CCFD1BFDE3E7C2608F030BDBB764A FA4EFA61A9236F6AE2435B4B0E8C0C1D3E48C8ED05931E97D8A5555AE4E59E892A029776 1ECC2E23EA52D2F45E42474A78DDD8C0C535518C889E07AD24C05E07CE79A216336DA8DC BFA5A0B17B173F6BE178B5DB12334FD48C68EE35B735D6B338BE3557DBD6C8FA8BA86D70 B9B5F564101A71CCF857A83C8BD0BCE0C8C771773F8C83C54619BB481862956E94528B55 7AEE421FF488A6AA263E45D43BA52506B52EF05744A07DFF847DF681FC2FA6ACBE2E5C2C CD3E59DDB89B9D9876A5B460E104AF97ECFC112A2F3BCB579C47D132B0A38B75B5E42E5B 44828AFDEF9C376435E73AE2A0BB48DD45BB2285FE654CD6D1C3CA759A54030ECA8077B2 28C5C89004F9592DB400B2D2DB6B293739D1D09C2EBB112FAC685812A3BA7C28D6E0DD57 759FDC856C400F0EE42914FC45D0CCE5D5CDA86E2C9D574733435A1E595043266E99523F 6D29F073B82CC5134DCA78C9471EF1455DA08C360608B74854EB42BD63DBE8E292588BB8 944E1856A4F63DCD177F75E56BF21F869CB77582AD13D1CC124F12ADD099E1557F54FA4D 211B692B3F9568EC9AA72FC1F60A04FF32EE018893B966F5CE8D2E0343B5A11FF54DA8DA 2B5FCB19A192B96DC6CA1C36E273574A1692491A710CDE8459A8AC42B7B0D2EA9E03FCFB BE73EB1DF6865443A5AF5D642AE1788402382224690CA8B13CC7E84A840A0A2B7F006A81 A2C95DE46407C1C7C156E59E13F013A0DDF04A5E55F53D641F2A60B76BA9DEB9956F92CF EA37A1F8920ABB0A93A56B4C1854585050DAC9938BA621F27BDBBA162BB7CED220026FEA BBA1975518E54EE67B5E775D9E01FCF3E161CBB00ACE02DC40754EB4993417F6A9E16613 A86515B111DFB8F8F9E96D75A4C01448FB2533587088FD0264555D8CA9182568BBB7BC8B 2639FEF6C20DB7764BDC5150895AC50E62B8B280E906A71D9E6334008168D986EC6B22F7 7844E6B832F5C9FFA9A57CABA5886056E757D9E30F6C4A1D7A1B8C8F41689B04FC6BB81E ED12DD9FDAE6DF7185D2589A3DDF5B9F23051C62125175A4314947D52990F1B970347831 9B0190ADF0B16B9C35ABCEEBA8BF3BBB2834BE21DFD9738DC571B7B70729D7F0937D7CDD 7F5F6CB3D512F1E9679DACD0313F828731C749A01304004AC376A049EE2E0831E92B8892 F5895DCC163F7FDEA0166CE5FD0E91EB4473B23A3EE9F5255A0A5C49556D1E18753CC00F 2B9CE6143A812187087BEF4A281C30540867E630C18B9D5C24329369FB2A029CE637314E 1A5ACE2FCD602256AC2C6176452A38EC6CAB0CAA3B7BEE2CE4EBD21FF4E865D3FA62B729 D92C10C3E32C584CC8EE929FBADDA8B9C1850F7E27CB50A2018C66D557DAC5D598CAED32 0B5D9CEF4204E542EB990EAA7953D1935669C1E10F12E082D6BD9F303CEC85D055611185 5AEC00BE0443F7FAD4E42F01FEB961ACE4700F97A9D4051EBFFCBBDBF536852F3F0D9185 C86E0C1B5E517258F9EBFE54D157E25228567F1FB935CD95D672E99A73577F4BF44CEC47 AF0530A0A013516073EC14DF7009F020B3DADDDE063D98AD92E71FF5C1216EDE3F14DE62 0F8A31280DEEB3023E12711C81404A39F9560DDD419CEB28D440B63095BA454B4899E9CF 06ABAA4A393A0CD92C321DBDF53440AD6A501E8A2754870AC36AA02C2CAD335275A3D6A5 211A10174380CA14FD109C707B8D2C0DD12DA7AF2BE7E8AB037A6EC998CDFF856FCEB0ED 315BEB3F691D5CE469C8ACA3976CCE01473908EEE680D6719FBABBD3254973D54BA53B49 685417735A13FDC852CF9919EAC1D9115B6A6290688AB488916B7F6BC3C1E9FF896DF5EC DBFF4C171350CEA916477CB441628C04000424EEED0795DB58E38C2948F19771B6278CDC 495BD47AC031B9C6F7CC018E6B182BC6101B69367FAB40F29C9BEF9AD4BA2AB6A90DDB28 1CF7AEEE531BD18587868A08908B5C88EBF686858B245FDE704FE336065692D557C8A9E0 AA419D8D230B0AA46D4BB9C0604CF66F65B1C2C56FD0118E06F586955849A78DE37C34A8 39E093A8D1271C49729BA5B7DE167FFA87B11ADFCA19DB1734BD41B7BD3CE567785AC168 0C7225EAA7BE0A13B76D614771358133BB12A63A82909FD7DFD3B22DCAAAFFC44B36F7FE 127273879C97CE39522909E457EB450BD5B872A278CF1F302E0879DAD64D183EF3A346F3 6A10442E4D468A07E4CC1C2B80A7BB407292980169F9D0B48A4F1877AB28EEFF4EE1C6AC 80E7ED89711B5C247D3F999315616C8B482874EFDDDF2B302135EC36B55CC20B4346EB70 04C7A9350A55F74FC0E93AA5B2117A00C26907474F82E26EB6037C67C435634904F54B50 91235BAF1365B5CEDB3933D919A40287FFE47DF4C04401B491AEC9CA9A13F7A0714EC102 6C2B2EA786835A4E52C792FC59BF7C9522A015914F1DBE4CF14B6ACC80988D2ACA847BD2 866602FC025E5C10CDA1E0CA519CC27F08B9C4F2166A813303E1E9A7E116BA6D00C44C3D 52A339E99FEA2C162060921BE6E6F5E49B4AD104F2B035C0A033590B65AF35F00DDCF8FF 1E756E51CB96B72D277FE33140FED0297817F2393ABD2D6CA1C56F122285A840EA9EFB7B F787F1E9ECB0C950BB3C9B1F79F8D18A8A962FB700CEFDA54DDE8A29B1D9DFF7BB1E681D 6D4DBE6314A00CB6A1B121685ADCA6E11101E91F18AF85AD93D2DF2EDF59563DC00EA55C 2F7A3AE2C683DC06BBE56F416BD042DC15AC9E5C314CB3979296E57688C4304796A615BD 7965EDC3EEF5BF4BBC8279BA98645546ED11F3A6DCDF3EB5D6C974E7993678CAFA27E6AB 52F0E51F123CCEF8DF8EAB7B16172B2E64E3B286F1DD2E93A4F19479AB84FF3F4E6BE96B 3063CF7DC6B1AD1EBFF4E9F6B468AA06A8EFD6BE7B7A3C323C118DC16A255B41D5AE494E 79985C047BD16C7D17FB1F1013A81A171A205A9348BE96F31615FB6BC95D90872B3C99AA 015ADB28CC25D8719EDF4E169C0C8D59983B3D9C47E58A886B9C29DCC14A4E0A7C04061B 833534808E94132C3E8FEEBD078BB9D56531D91CED234C2B05E34EAA9CE97A55DAD9F205 E03B27705CFC0DB672FE697D299BB4E2C1EC885A66BBDEDF8023E583849B680A39A526DD DE6F5BDB14DEF4097FF1711ABF8BB2E6B91A5BB820393809F571D6906F613832F33B4053 BD7970A3294D2F389CF3C6BEEDAC8FAC282F4AE8F05E4CC2C82781F52150CC0D97339355 159900793B5DC6C9E3432EFF3E9089CFA8E6BCBD113F58EF677F3C8130E7CEAB82D5CF93 6F664B26ECB74D6B1424D47236D16189973D22EC67A5FAABF4D018F14A14108103172BC2 0A613C237A3822C71EAAA3B9C02D67509149A4496DE621E137FB533EECE4E6B9E35F8629 1E5ABC25FDE25BA99C640E379E8D6C2983E01C853C4A827AFD80328F770A3B172C481600 BE5D2C8005CEAD65C2377E3BCA0B61DE95B8F137F93A89D62BE1D559293A8761AEA9D9D2 48CD00715E1ADC66F582D90505FCA558714CDD77D33366C3C83C5F126A25AE0D1E1AC124 884D4528B9CB70C0F11F63685B72F82F83B277AB2D4C07819A4590D8AD0A9667B572CAC3 8838B45CFE046BBED8BB44BF61C28E5D7578B2C3C52AA850C4A4F9F68C8D9C1452C85775 E3547E8B98AE3F5DB91EDF13CF6E213EC371FFFE7D5337D488BCD0AD58979B849A67784E 5E0046B85DD5AB8B28EE0FBC11386C47FB890B781F47A2328F8148F2D4255CCE44BD1DAF 6E86FDF2D3B5BED5A37310D29877B756AD83E2093DC2D865AABCFFFE3108BAB0DA8042D0 CA428213C185E1E0D99BA22C28B87DA2D6D885C3EB0DFCE9727E6A2D00A0248571B00A3F 2C8709C61ED4C522881AF0851D2AB9F39F78EC4335CA3A2ECEAD019422B0A9392FE86C72 A355F0451672B0FF10969DB145D6D17164A008B49521FF4E599B191F0D82BF9A22A46FFC 0A70097AEB09E6D3D0104EEC7476AEECB206C276447CDD3A4C348CDC8785B3905BA69CE9 17B14730474BE4FCD851B10B2FFCA15E33C8D8DFE4AAA4A5E62491D3AC42988ACF504B65 21107A36AC0794061876D041D861204CC4F69B2DD07123C72C57B4459A5DAA587E864BB6 959299B03E0238DFCA6702200C3271B68EF1FF803C82B64443407083EFB85EAD7C52FB57 96C48DF64B7EACA0B63D7D5F6E5B77FDAE3D97DB35AD29E4BB96E4E34A3E9E5D6E803378 021B10DD7A0AAC3E908B42E8801E842CDB6A0360C6696F42871E71DA00FD128745B8D53F 0C91D788AD5CAD0FE1312679096C52E2793744CD3B95157E24C7FBBFB5FF2AC5F1954856 C6F80EED69AFE09725756BA44E2FC24BABCC69D8C9BDFB4CA9AFF94F06E37CFC0957B502 DD4404E27EB57CFD1ECB74C6C4A65F6DF04BB56D584BB29FFB5E1AC1563328841BDD55F0 C70CDBF62BE6FB26BE1CD83F7A177DA948D9BD925A0267AF938FB62D755FDF8FE352A0AC A92163D5192D110DDCB03CA613B19A2A6A9D9231D8E1D1F748531DDEAB15F21DCBB7A061 CB42D49344CFF69BCCBD6C249C72ABB43F0AD5A2EA65AB954E1ACFDBFB53B8F352A65DB9 557FB1092B61EC1CC64866346EDD673F23E797F89828EE4C149221A04E36AEA74D5B1515 9DCA6EAB36E1E1DDB4B0AA67CFC4C3A845086218C2196C397257A094FA76F988112BD017 49B7A1977ED1C88FDD6CCFE511C05FD6A1FF28290D64A178EE739AF8EE9FBCFE902EA29E AAADD03277D997F9D87AD58D581EA7BF56A9A3D3536D684BC38F5ED74EB453AA618F0ECB 6EDA7457372961D811ECF7D1A47AA536C94CBCE773D588FC4AF021F2ABE97B6666CC3865 18D623C690C01ED346E8FBA64AD8DE2D408A2294487ED444BEC90990F6D640DE5EC33644 CAB682520E98A265F2191FA66AD34B65E003DAD3E39405E1418BE02B1EF943C6C5D72231 50560DE3095F58D0F7EE2DD3F651AAADC38FEF5AAACC0D4E7C928CDAE58ACB9CBF606974 AB1772F409F71F5D37A43B14EE540A0A4A183E4D811A909E333E7628F26BBC0955EED2A8 71328B5D0C66417E0C3501BC8F280F81679EE0A2EAC89E97FD70ED1CCE378EA7CC0FDCA6 4D567B0D6F3470028C567155B6073D01846F80378547D3A806720201EBF4AD167601B114 449ACC87CD5BAB6D08104A1D0B903CEA2ECD201BF0868AE7333898B45F06D3C9997C0D06 6764C31B0F4ED85AC108BEE5C7845ECF8AF8CA1C7393D0C2096DCA4E077FD1EB21F52D5A D86026A079DDF42DD67CA954D380A975BC4BD82C136FF6EEBB8290F01C2695928C48A460 09562B86779EC8318BE1900FAA58118FCCABE914532105D709ADDA3B3B6A82A797C6F025 82CC8D78674FDB1E4A5FD7C397EAE2D00BE6928026BCD60D9931DDAF5AA569A2046AFD70 2FF7C2FCBA3883E8C019183891CDDB1697C86D8327A4513542ABE19EA481ED6EE3B07F30 FCB53349DF8BD3718E3D2195BF5822237C8D5174110CF8643E4836F2FFC7D8AC5121B60F FF9AD4B05F6ED5F6A13F5643FAFA28619B01AE16B326D06369A52DE8E0E85D33557CD5B0 275444AD1F41FED92E3147B92E732355860E26E54548D7EAC30A2253CACA91A3BB849E95 2C0EB6DF06ECA4B22DAC4D936E23474F7D64A86EA50F870AFAF881156A695CB9313860DE FF0C93697D8B1FDF335ABEFFAE647387640C0C5E6D9EC0D4E138F69CBF4C5CF31463780C 56418336DDEB0E2C8B167CAA90CAFC6383D7A37DDDC4DF2CAAB53E83C56BFEF8385C5CAA 23F574BFD0CEDF17D26618EBBB53E92D8E86BE883FD4E8113D5115E0CDA730F8557D1B34 EFC07E0D4DC0DA3FDD80E1A922680077010EE201E8E103F3F6D2E3458474D7331DA75F2F 304E1D9D8AC3A8E4CE84C042F901B5443D5E67C652A7E80C4AEF394B9D2E8D8EEFE58237 DFBF091B0D79DC6994FCCD93F92F6C8FECAC2AFC43E0F210C75201657078A42241940CF1 F8B789F812C58A4AD2485AC7CE638CA5ECD511C680EC3E6D9FF9FB692EF4B03B8D3E5D21 C6FABD858C06A2B9FBB586A7A50FBEB188442C9303F7DD297482B00C85869F3C3C203CD6 8034C930DBBDCA7F6318710C7F62904D0AEDF81E5CE6B08EAA772A3252B5A92A108EEECF 915CAADA6A514A7BB3DF0628D6254346523393D6807EBCC880CF5A16C77410226C18EA45 01B06B4E5939A1E6A92B3062FFD8DD1B2424E4C7B83D6D3BE66B620211CDC5D4835BECE9 F6993F703EBB2680DFFCE46E18E0CEC2F08EC29E79319464CE955BBC53FC9BC8BD197588 46362DC8F138E61D7D4DF8B801B142AFD6BEC8B233B85E8818AE8ECD2863FF141A592BA0 DD5CB881D56F0503669A211B7C199F687ABABE895464403DD8AA9356842854207E3E6BAC 278068993BC5B3C9DBA95BFE8DF9DEC46EEE8D69B8F60BB4C5CD106F351AFF0A6BB90EA1 A95725E7284A05A31A5723F457E5EA71DBEBF75CD4149A2314E8C562157364A955471814 F0FC3E52CF7658085B1143A7B755E1B392FC456BC7E581114904C22C3368636B932D0F5A 155F2F218F9EC1A1BF9588E7F3581A033124094FEB0BE181AD18956F0C07D7D61AC35116 D8B6C0549EB505FF8C89AAA57CB2DB361BF177A64407924C5909AC5356C5956764B51630 8673322C2DCDF1CD8E33723D55D4D324973D76A8C4E40BD477E7F677B1E165E957B4A6EC 905B042EB888A963CFA95DFBCF463D6BA4C32F747B00986E0EE88957CC096F3A16C8C9CB 12E9CF0313A30B06651C5BDA43533AB5952AEA64CD04EA64FEC00FC45276D5213FDF0A30 3B20B443D8C47FA74EE2A59F3D20482FEA9C28C3EFAA36AC8E7F7BD4D9400628B700CA56 D774AB7D841190CF06AF7EA19FF75DF313CEFCBAFB0AD6CD34A4C6C39658FB0B237BFA93 4098B520EB24A89073E01DC5E8941695C7D68F57BBFAB54390FEC85B5B023025E2FCD0B2 D6BB547FF74676FB17BC407CB8767FE62034CD18C25028DAF5B71B3E4EA1A3928C8AC9CC 8A57CC821D12A86260668B986A46F9B41BDC9B22DC14C25E4DE86D977C48BBCDC130E7CC 8B7E8EC2FA1E7A94487344618A3F7238DE191D00B685C6BEFC2B34CDB76513A8314924DB 7A2DBF3B110F0E3772666E59457C38544323F183D95E0AB0B284FDE9870BBBCE3AA2F92B 9D5E63191E2D87B75F0963EAE996E35A4CAD8E2B901C082078F739DF508F4A70CC88AE60 A1488D6B38BCBDF55255709CDE1742829344EED4C440CB7D84F5DC156A755FB224C3208B C3D762B1C406469A21320A8B2EBA3FE0AC18EB6B4816455955F7672D2F11455F9EBB2575 D84F4E2972B0A74C3C2ACAE43ACD5134F6E4A01CE181E3A57BF01EFC22D881E76B92F4A4 39F9C5BFA6214D58B41E924D7970BC2A7A1216539D82DB65E648F2CA575C5A40D2563C20 84595564BBDCC5B0411E60845E47BB69ECD22813736DF69E861F4DF1D6B69B84702C03B0 C00EEBE6AA702290A94841D27A30C57E8664F510879F27BD68B61718D87E442F8C0FA8EE 34753DC06F30E97DA730567C49C9B588AD6BDC5DAE3D6415B9A910EB0ACE2FDA14A575E4 9D87ED2AD9382DEAA2A4CC198C940499A0D1B82DE8FC19DB894324958146033E0A59494C 5CA5DADFEF7EA826344BF555F5C866D9E0FFBD62356FF1296A1F8BB4C23507687689FE17 C4A62F76688AFAE6F6AA65C05AAD7CBCEEAC0A99CF5DCF050B2F8D095D82EB2F75FDD5C9 8F6513731B2B59716555BCF787A78492EE51EBCC23414BB69525101ABE0DD4AEC5582805 E8E88803C8C644A44F98B1A87A0EDB2F135A643ADDE8263719C9DE29DE121FBD8ED5D5C5 CC8ED09873350EA945D55D7BA1E416CE360BEECAD058F6BE2AA3DF487A49F7202EE6FE4B CA898BAA4F4E41E97A271AEEA3539C6C41E90202A469A3D05D56687F021FD91B81E87B73 02B83F44911C1C8A017B47AA03D38D5A4F86C5FB545384E2CC2855120CA3F2127B1D4E72 34A88FBC9ABB890FE5ADA16ADB6F4301DA11ADCA4B52D01A869C671D8D23B16763D2AFFC 89AC7451440D8406290B12F36B226DEEC80CEEF2F9072E2B3CF357CC984AE140183971D8 7C65B1724661FE1D08D121FE79243002740F18BF3F6FAA8337D7DCCC1D62479E4ECBC083 C6737C6C324FAEC4EF357A728688FD3FD189D3E3470439C1C3B16A4F7898F6FB62CF93AB 581E2899B729FFE312F7974B1582CC501FD06049EBC76C8C6733A52DCE4483475390104F 4D62115177D67CD33EA66C8F368219CD5F5E36CFBC55CA52BED49794EDF7F6B5B913A4E1 49D685389C7E68E330C3FE086E8EC8AC9485BDF55D3319019F8F6E829487520748063206 A53AB72DA0032387DE5CBBD0AE4FD1D6C6357A4DAFED7DA681F24B1A373EF4CE580C207D 26F38F92603D130F51FEC1AFA74D743DC57C73842F447D5521A19C114EAE4581B165A420 9AB4DB7D0A76F3622DDE475F09A8933B97D0C38A660665258AAAD6C0B62E365F19E44752 D3114892436919488C05A090A08D3C4932FD10A520BA4D117B648F610FA250C75556BBA9 EB1090E7C6BE6C753851CB488C56F4DB8D1873E390679458AA364FD7109DAC4ABE16B104 20D6A14DD0AFB588D7771A3B2A048F346C5B7AFD0E1185C14E1BED7BA99A9C562A0113AB 76F6092B730A03C908196F40369BEC9ED84ACAA809A2C1548FD7664531DEA4D7C152CEE2 3F9971C2758B1F13DADE25AAB5BC46CFA82E3D7E61154E9C4BF8906E60DD633861A54D00 21B92FAB681E4E69235D750AFA1F397F4A26F7261905E49E2DC4E52F674A2E25A0435EEB 5BF9251DFE2B9E87A7074116B9657A6035AAFF43D4A6B9BDC2EF14EEAC3C4743A18D0362 A9AD1491C36C0A53F526D3595B768E2B1D8F9E5871B14465422681CB4D9B67E268BDCC31 A63BFA73ABF0B7F15A01B59FF41D06EC7FB7054F5C7C9BDE559945AB57B0DCBCC7E1C075 35E41A15200F5C4151583CF0DDE9B7D930552CC0336CC8249F12C2E7CFCC8E9AE201D1CB B3B155AC9BE69FB6A047247E1F115B1506B0ED558A2F1772E432B81086B1904F6708FABA 9CF736092F601B982181DF8640314C695B10CFA6F7E6B3969916F0E9BADCAECFFBC613F4 9D4D4935D2B62667AC4D10504168B27634CA6AEE676D3692B30A4ECA41D1344A87AB643E CD69AB3E9E10258565E41EA4007C7F8014ACF800388D914DACF7969B97401CB28259BFD8 01F05F0B9E0294FA9DA9222B60A27FD4A159F7077B88BE2DC235B433C9B2DD6981793480 DE84A30852117E48C730257FF6DEC24A0614B7191B80B98024153FDB33EDAFA42C129832 E900DB83CCD33A99AF1CDD572391796C8B9F1FF0158E2EFE274DB7C2EF71FBE6CDA9AEF0 F542F4D524A732784AA06D304948829295FEB66FEDEAEC0CD3285683F5A6FD1E0B53F7A5 A82492498A27CA6EF6071062887E7B89DE93C6FADD6E49EF1D8C85F7049D14619DFA3B69 15B8F8A03C669F6C62A3E3109896EED4405400B7974AB0E368F4B2F494EAB454897B2297 F8D746E0C25C67E39A847E02B31F851D3D0079413234E3092A46D27FDEB101918FF2A169 E7AF1327052ADF98FF2DBB5F5475B2233A0C9A5592E056E1C3363EBF9C017755F53F9E32 578AD766D655669BDCC4B336487197865FA98738A42C10E3866804FCC3F8A7B6DCCCC03E EA368F39F5D31BEE14AA98F92DC1C1D9A833C83CF063D015FE25956A67CE266741F55DBA 923642D8C2880CD63BC76FFFD6475C2D61170BE7412DE1447D8C7ADE9327CAA2E485D5CB 7113813EB9732D362662F088CF9083785289CEE904F073AF1686A29FFE87739D571DC509 D1BF05FC542336289366F175AC7964F4DD46B983ED876049D45F6CCE6419B65B5D9A302B C589706B0DBE6B3D8FA5DE1126E6571399CF3DB87AAAD0BCC27E949C34F3C7870FD5BAEB AEDAED4BAD5F7EBA052B47963810F52E2F6042AF290FA23DC978B020F52D6A8679D7B4A9 EFF5E4897E22D29AB7B59FE54FCC4B76B7CD8C14C8875D1FA4D4A50824BEBD80B2A7DA96 B121E9D738ABC7520865D4DEA6B2BC1929913F953FCDA4F97038FE1A612A4CDD364CA769 D91CB503E9CA889D1D09D25F0E2CE2A7716CAE1B2DF547C557AD07171333538C5EE29B22 74AF6305AE2755C05A04800C5044C7BD8AB91061FE39E1CB48AA2C728C15F7E60D347835 DF007F90B01A9207343E5A0A4EAE199C278EE53A4A55122F39B8685FCF3C622866748921 30718C501EF287044CCAE0A5E9693478B9CE5CDDAB2AC04D29671CC435BBE90B6C57C82A 49F22890F3AAC9DEFE7716F3B691350D32D3B339589F61D95435BE77641A3247A0F869A0 52E7902E4F79A20CCCFA43F5EB6910CB4E46F32FDCC2368965151BD3CA11FAD13AFCAEC8 1E0892A322187A1B7409CDDDA7AD1274B907E5B55CBA6287B00325C76D5479F640500B23 297604E4DE8D99EAA4DA8DC7F7FD46128AB0E6F6C1935816915A0F2CF31AD304BF93C549 C525820402E00AE09FB3767DCFAA50F38A4C20B6F5990F3B10C6D8ABB67E7223A5E1EB21 1094EB6B7932F15F00618D8DED38FC0D4A0C9E3AFAB56D3FBBEC0E323BE5258FB7A01D20 D61A34306655760C28DFAA1D0B0C3FEA43AD2766FECA514A3FE2DDA44CCAC88A0DBCE0C1 1B9F0B2FB9CE6DBA424B01A2B8E0BD0F8BD37D5556093AC6F8940B6BB9F5C8A175654150 ADEDC45D744BEC6DFEAF35678BB95DED21C33A5021D49CE7F11628191294AF998EFEBA6F D4D16708DC8B5AB1895A6009191E298445F9B3E785E2FC66B6512BA305ADB51974533EC0 710158E105B7A9A2AF1A6D0CA4677B214598E9D8CD50FB21D6712C6379DB3DB00EF1014D 9793FCA362A57C74165D8BB4AA0F9E4938A29A7A00BC1A557187A3C029E7A96093CDDC72 AD9ED2F5659E2CB54C5A2A3E84C13F63F578385A565BED86432BEC6B24D733E2F6C138CA 5D98AC1102EFDB85E0D6F2975ED105892A9011B4E80F5028D4087BC10A4706ED9F15D2AE 46286C6E7861A76E99A0DEB490680D5623493809DAE04A6C693732664D4D3504CFA5FC3C BEDE2262FD45D912F59F56A78D4233D2A2EC599F814CA0F0B50A2D96044F86AE904B30CF 8D4C5AF8C8875453FA8407323CC0516EC4DE53B857DCBE2E487DF3A09576B22D0327D350 B2938C640F5DC5DEC3E4DAAE6B0F89788FBB79A7CA05347BC4E877D23F4F9E3E8A567064 5ECD5605FC3C57FFA0674698D5C7935CFF21EA71D48B6AC5592ED8605002753A2CBEA450 CD1BFD2032C357045BD4667CC76468DB17510AE4BD5CEBB94B1302117C4892D235B8C993 F3E8E7AF0A3F620D6330F243DDEC57643FBA04AFD04A5F3B021DE63DCECEAE842F8FBFB4 806A743EB746ECBE3A723DC68598E1B142C95EE8C77CDF65B91FCB9003827F5B1D216B91 5845C6C63845751C4503D1B87D80F3D034A5209FBFAA0FBCC7E848CB39C14AA6A377B1A7 3FC59026F2BBA8BF6A6F96D9AADC0C5AB47DA883FC0CD7C7D49DB472BDF042F7F8B3C01C AEAC29671946919866BD81AC04DA76E5D93955A42196AC168AA5B457873669D5D47CCEC0 0272EE300FD5196B5410AE0D5C21C61E0BA3BC5164ACD0476DAA6B2BF98588EB812E17FC 75CF63FBD3E008D4F2C5ED04CB57CF5E094C8C2EB47A427C3D8D6AAE0C992B98D07355D7 627226DD7C6BF55DFC60725822B02C12BD29E825F54725F20DA68B6A911EC2AB4BFE5567 86E3186BB9CF33BD446CC1D5CA8A4F62A4DBAE868E3854D26DDED90B8A122EC450AED393 85F884C886719B2D658B949F596FB570C6DE2163ECBCDED1E9E52D461CC2EA5FB81E14CC 5BACCD90F7ED5D714D14DB07E81D9BD3D95A0F0203B8272A9A689941D1226EA7ADB7C3EB 19F6984ACAC91AB2628E973CF29EAADC0D5DD565285355D7EEA2B1037B884C613E30F0E1 5DAABC7733C7F5C259CC01E4DDA3798677397E00E129452F1A5F937E4259597BB86208BC DE9468E3F54E3978789E14D81BC865E148C43755B7F02F9EDE088996AA9FD7008C844120 60493C21FEE73876DFE0A68529A119F9C7C03AD205CAC2BDB6437C2EE6C4114017A995A0 9C8997B20FB23210112DFC1AF578B6196F7BC2F54D552B652E5613E1044FBDD5E142E2E5 C81AC5FF45AA34BF66A17F164D82711C51EF949306CBB93168384F465A829AF9BADE4BA7 05727F13EE85DCA2A62D098B8C1C1B3DE87B8A56C6A46238174CE19A33AC27FBB7356607 707AF2588CEC08F60901DAE320CA46E06925867FEAE0033137B187888F30B0BC86AA1B08 9F19614211E1FFEFF95CD0CD7A32F02C646DDA49A1F86FF0BAF602ECDAFDAD39A4F15DDC 18DAA1F8F7C9B8B31D24F565DCA8C1B903DFAA4E18853D631CB0D6867352965457E39FCD 134FBFF304449D529E4ED6A8F5BDBDCFE5D1094B3AC2DD6876DB25C0583E7BC9FEB834AC 626C393E1CAD46EC8D17C387DBF7E6A5904EC3AD29CEC48BE4D17B3FE5268875AD1D8342 93A915793794693D1EBED8D5D99A4912C85965CACF72FA935A4D634954BCAB3C9471AFBB 8FA99B057CC9BE8D16586F561E21B43F9AC65D432830BA5F8FE046B2508D98710D1B4A61 B0D1F5B698183C2A2A60E8634C201C7BE7F90EF05BA8EFD05BFB5435B26579EC2E9ECF90 6439B4FC509A27CC355E9676AE14A5BD3C7CACF416CBF655513D9465F4D18C2A332C7DF1 E357A2AA1239139E144608321121922F7421BF3DA831FDEE46FE025556B016FB88122E80 52339D423C33EDFF2DA31FF8E1CF284FF0B8F9FAD07905F6EAEE8C0560E59351B62454E4 86F701C8DC184370BBD02B32EB50381B2305187CBB53A0457737FC4BF8EC6B219FBBF18A BA16F80980BBBBA41EDBCE74DFC228FE4C136C2E08C4544D69B024E9503FA95506766E56 98FAA78C2F33C997A7975459FAD4E9A889F0112CE80E831DA585B0D58FEEA91E7F692267 5652E1AF826AC936EB8D7FA1A520DD800737478E648BC312A36149EE6BD6B6ACA2A9EE98 39F62BE9A2F5CA211654C2C796EB61999AA3E88B18D1410E01918CA723DB050025901FB6 AAA2FF88B04E1FB11AD00124DD51D7B5181B46FE6A035AEDC045FF4DEE849FA6323A1010 03088EFC4BF05A93DA809657659CF39B95A6C54B799ADBEC9E055366E9D42BF0D2B4E56A 8FFDD102682944DE6EE5A3F9E015CCC31416AB35D8C592B1657B8B0534C8FE6D95A64AB1 EE27C8CEA84DCBF4823537F149A2538692071823239941FE5D5A78F69CE027413B308249 E26F3F649622D361C37039E035667F09283BDC988281B281A63F733874F22E1A0E0371B4 0179A241446FE2778B3D66D7AD922BFA9F181CB09104D25FE21369E2D93E0CD77212F578 AED6FF47F98C4EFD0D3DDA45F404667DB6B07D066A0D675D26578B6E05544CD5DC60C9F0 091F7919F31464C8705942384CBB6D06C37ABB8DBA4CB19AB11DC84B7DED41E9624F12B1 D25F7990C9BA7F6692EDE376CB41408B227CD1D30BCF443DA54B1D524DF9B2E210EDB929 E33E10CF9B9D20BBE117D6B2B5359EE54A2C565C2AB0A8DF872436D1ECAFD51AE031F034 EA9F2FB738417904FDB491FECA1655B601371B7FEE1CA0256C9A9431E935D835AA83B8C1 717596030A7937ECF6E629D989E00DD4E2E3C03F237F58B48E9307A656C992B5509B4395 C58C04AA53D7AB3D20DEAF7B0799AD3D14DA4CBE9EAE7CB2ACECCAC17FB1A65F9C6625B2 809341A5E8CEA80CA0F48E5058F981995C5B8F7B1521DC49A779B6F4BD55AA1CD78D6E12 8C00208A2D11A7C1F8254BF21D6D8567EEBB15CB6954A3BFD6264A48BA3434DD0C8948D9 933DA39AB908A5AD6BEA442EEF4121F5C49864C5F65C3BB01F588E3843AAFE048CCCC227 D2EEE382DD487876BEB3421664F18D716414EE9DCF8BA069C6D9BBD6665DF33684F06022 189F50E60C10A177287F64BFAAEDB283AEAAD66D4D8FE9154203C1C4D9A9A8A91D4C921F CFF8DA2D213F17FF372B359BC56942B8EDCB4831B86379D38847CAC4459048B0594AA7F4 708CD4D50328AD2AF77BB0B713E4E5147E7775281DD6B4D961081F13CF749134C0F6AE82 BBD34D2841DF2A62DD5E52F85C2F65546C9CE3A816E235BA78730A41F8878C5E019CD4AA E955CF31A502D20661FB244D0EC24F36541813BDE486465138C458DF31F69EFAF7E694BC 42B12B85ACE77C01D51B6826535F6DB3A7035A0BFECC12BD14B15C3EA19A363F98F69A89 86E546DC8AF88973593EB1B1993E64EE3334714C1BF34C0D09A36B30F18C0A688C146438 E319206DA8D74138FE4954E5D8399174E4BEF7F94F5509578F8DDB89640DBF5AA6DDE43A C413C5DFD9CD0D3424DD85DAA19255EFB478352F3BBA5FCDADF20410291EDDA09A7B3AE3 40F2AAE87114C6B09D3946F7F557259C26F963D71AA2C9B9819EE158D23D27AFABDE2AA5 AD164A287A4328FFB7C91468F9C3EFCC0007F022B97B795A78CB52D5139F2493A7FE0A95 DF9B0B387EB7270CABE89D7751D64AFB5E97AB083C64F79D90E4668BC3EF45685C4F9117 D582F5E7A3C286E71323113657A64E72E7CAA26B36DE62343110D689500D26D566B13F92 A5010689F779E58BFDDD025D3BC4C0F1221C39040B1A70E505071B79631D020D18B86715 2EFD738CF92BE95278B7C471AA79DD6DF5EF00FED6E29BB26AF8E8569F2ADEDF9FE6FBA1 5FD3F70DDA455CCF078E0008FF3B3BCE36B8B397DC852F7DF01A233F0167A06916401913 3975FDB1AB3FB5DBC97D198D172285D2522433AB4B00E6CB9DCA2D69AFC04C63B3603F62 859BC24B464F8EE3D060874FB976758211F051BD11DA23407A2658DBC582B143E38B36A9 9B78235EB3082E609F0619AF031C6109E781F7A4068290D49384927E5F29FDC629B21B9E 2A23D85557A8A0B2A2E6D1D31C4BA4478FA023EC29DDAD764986FDF4D9981FB7BEAD8772 E9918EC2317ED1ADC124013CF404ACD86A84109235B817F3667B48AFC4E8DCE8F67AA412 D67353A1E0FA13F9C0EBF824468CB2E44B2E9F589842002D6F3D93702953E4948E0E3AA2 E640D3874D8E90688B3B9B84FB7FE4AA9110888BB9C029200486634D0B3DB6280D22A2E6 7FC65E25FB69FFCAA3C753246215FD3C5964EDF1711DC46C0CE743275470D6890E4B5592 18237833A90AD9113B482847F0FDE9B2AF83604B7FAF478CF44516BCBF3AE0CF1A6A47FA E3F44574E2D1D659B2B948F2A0796DE985A375003B537D287AC8AC2CF13CF07F19564F36 1DACB4422B8A86E524A9A1DAE4787421DA752434C374E661C821216D301A0E1286872DF3 BA372D561A628ED22D184DF0E32E28DFCFC7E0D339735C800F55E4426C1C20DC707BE5F0 BDF3C03634E8E4FA2D830293440FFA5723F5C2741AA2E488125B240870AC8A77F21806C8 D2FB47422ED52776062055767929DB806287E7252570C55E0DC512812ECDEBAC54E79C37 F9A9F31F2AE2C79C20F3C15959831578B863BFB0A9C9A0013114DD3C2BD164B5A2E2675A 3E6745E2AA10BEDCEA50423DCF3B2B8D200F2820F34BBFD4468B4F5ED0E19369ACD6C43E 229D9800B8701564C806761DB59A5FC462C59E783A4DF3B11B99AFC68B880DA90B669A8E 682E9DB6D306D4C5D12E70F8B0ACE915B63D32ADB5F6BD3BFCA44815375DDCB7CA965A30 729DA12D304192871D5DD17BDC694D37C7BB50D4B139BF6D77C71F267F4324B839C2C5B4 EB78953D727F51D247144CB86E87B68B0C0955553722527ED54D22342FC898F0FBB7A680 EB1FE6CB4CB3AB6D790EE2626CD58355525427C3EAD706E538C2048E0F50B027611837E0 1EF18146BED07C790F8BEB0643D4E4966E2AE9FE9072B72D4DBCCB5A6CC60D8F31F4C705 3BAB150098E84196223CADF965D72696128AE258CD44240261B36DA8AD2E793DFE42DA3C 94D2223724D720F903D2AD093D8CE50514224827415A107683D99E8D137FB350ADE63FA9 F3B93EDCBC03D389B4DA23058D117D0F9A2D46169E7DB25DB04AE1EB90FC4F5279F75C3F 40659556C8C38ACD81A651C5324A72BD1C4DA03A838A726D964896A8F07E5EB919A33C5D 22A338348B9D3EA8C23FA0FCBC205C81963DD396065E71A10562F45B06204D8950231FDA 5C8589ED1ECBE6450DB5BA10A469D2A115A96C47DE35F00FB2C5AFF236276F38ED5143E1 5766E8479A0A67C705C5636D896B81952FA386F9183C01EAE66C9CE2CB22EA4770391902 046DB4D6EA8FBE82058610C15E186BA6990D288BE09994202BAF08C82E9FC4856B97ADF3 532C9FA55EB20FAD6F0A2B644EAF3E1C9508C2C258F957DF26DA0CB73FE399A209769EDB 6AECAD0ABC1FAB4869A9C6C5DFF55F9D2BC954AFEBCDC149797861DD336F1E824232ADFA 8A79B44644DA8A12F98A1BD7D339387E7012F5D7BB5A80E224F33B6B259661AEB29814EC C5586939A8FE4C9B15CCC8BD0CA8223D529AC005F583FC6D7284DFFDE40C59FF69418C82 C19DAD9A13DFB45C960A8A080EF8A3F36D0806EEBDA98705C284F249A156E330E3B58090 BCE04A1D7FBC9F4095F5908B87CB0F943054E64151D2E9467335D0016BEBBB06E2CFB3FE 48E551AEECB6D82FE8BFA30B740993B65FA71D58C02F8F7CA6C265CC4D4D1E6C7814B341 C652D3659841BAA7953986DDEF2F84B187B467480947700B3D66DDAFEE54A606D7674BA1 7D2837D229306F78877649548F698168C88A82ECAC47555CCFA3D0F5583EBC53874BF3C4 A79EA95B34D2582B2F9688A3093A4E2B8A41B9E9F0154F1BCC79F28351CD9271BD616CF1 CAD0603D032D7BD4085046C7E6D21E3CBFC8D5080C4637E737ABA402EA78DE5441615DEC EC946999AB41181DAC30E057FF058161853DCE56E4C68673BB036D997C8A4C75EC2567A9 D2A7C9A8BF03A93836BCEE24ED39D88704FB8322FC6BE50BC7D36FE3BE45436042C2007D 8E76D29CB7BF25CBEF2094A92952ACF87E46B56778CFA26AD8506D9D9E6DA041D06BF3BD D9B695BDA12BA04E66F200EBD1113A2B087403E972E630B17BA758303764FBDE52E8FF03 742E594BF58C82AD1EC7040A3559CF41E6D31248CEA0B6DC08A7A351EA0238AD463FA4B5 B98F33EBAB0CB1444996882FC938D4B2369BDBFB670A291A8688A4E428B03317814241A1 A4D6E3B0238BA540733DF03328696CB699589F9C483A02A8D2FCE638354CC943D7DBF509 B6F37D1BE70D407B715512C3113A8D1FFBA407F1A48053D46A98954756943886225906D8 112EB7E5EA81BEBA413A68599421E73CE792CFC9B21646AFFD0B2B54645EDE214B0CE4A2 5813F5D846F2A7637B09C653D47072594E85DE3FF23250F395BB89920ADC807D473263E1 F9F6662844889B5FEE244A8F1332AE96F32F49A7C6E04C75FAF0CF79A354F7BD7572C69C 775AF86BE4D61227A6F789C05B1977609331659A3A5D1B455A18966BA6B57C23836F199F 239D0C8592FD2AF086C9990B7E30FA2A485E4DF23436B0FE640410B5CEE4F28B50A9A1E8 46FD2DF9A7FD32457A5C5B456A4C8734A5DBEAAB4FA2722F04CEBD69DD5B6409B40FEF56 D975E77D6855E1C70EC7BA367EC33434496E1A6348C96DC01056064BBEB9E80A187CB777 1B7C2BCB51EEB36C273A18565807EADCA9D15D5AA48B3E8829ECE1771E3F7CC2F1A18BC9 C08600C6F49A67929DDFF73B187EA2B39B3D7E2740CA19F0D682E61CBCA9EAE80D0A27B7 20F1A563E10476FAA44F378D18370AEAEEF6CA476A5BAA5346DC2937DD3236EEDE5E0250 C63EB284F61722C4AC4E5EC8703B642EE9B5626E27CE018F48946041C3A1732C6A73DAF6 20262E9EEB2D409BA32BF2AA748CD903E0C9C9D996B49F3B628EDF4E60949308C4536D1B C0BAC9646AD4E1DB0B46E2FF3DDEE54B7D43E5D0764FCA79497A6F478702892727367ED6 D4BF294CBDF179203761FBF3DD2C58ADBA176EB142BEE00CF5408A4A5DF87D41E9C953B1 978D391603CB3259C745D3DEF53E54B9EB256CBFE017BCB2A2DF271B9E565B6B900781A8 1659B118364F25380A65622210AB95A5ABD9DA70916EAEA09B59246972AA2DAA8EB167A4 A3DBBE80BF6C54FF83309E557A347B14E1E8008D9DE8A34BC1157EC99A47879EACFBD0C7 0E8862935CAD600FADF3AA2252EB96F22F9869C8E2E0AF97150AE062228BE4DDFA9272EB 19C5C261B9EB5A571F044747FE88B26B831DA5B1AEFCB318430BF8E4050308CBEF2E1D72 E1DCDDAA124EB64B6C178B0BF48551F079736E98C73CFCB4E8FF9F37318B9D774544A6A6 5893F77FAE7E7A0A7839A3BF3FF7BD293AD9FE2927BE5A2B07CC606C8DDF0B1D7BCF35B8 F9802F07A3E055ADAA81DFA19C019794D4234844AA4E45029DCE8CF726EFF6B5E1882F2F 4A656E130DD4273DBD4846C3E47EA89AF6697AFEE9F213FF097DBB46746799E9FF0C8897 4D91701E27A0918191ACFA9930D2A2A756D2DD0DBC5223DF1B443DAD16E60D4C277E4309 23BBE5D9BF45FD9980FB8E7F0D3A5F432B4382C4589BE6B5FBA1AD97D8172B5C9D8F4EE4 62EB0C6154DAD097698D6DB06DF84F4E22A82F4973E8F5C8E337A2F4ABAF964B6AC7D2A7 6DF5FAA1E41D719ECCFCF888EB4390684F186BF0F98BF0439C2B49225E24B5A344550AF0 A3ABACEE79A8CA79AC1321AB0AE9DEF7577B6553713525FAF938E4B46B456758426A2026 9C9DAD7507C142BFAD7242880CFAF1FB0A7E13745C287D0E632C913D4023CF472799CC77 9A7727AFB1D1D4BBC5EDD0D964C14E59AB58B0AF11C350ED9D93D65294887036F9C1AC0E 128DC786BC981ECEF72CDC75AF5E2B9CA0D0BB4C2589E1250C58A8EE370395DC4A808D84 4FE48A7B01795A057BACC8F7546F77913524B5EC47DD1B11DE5FBFCF07E2930CE830DD44 9044D91B0064B611C9CC79BE52091EB66511097A2CDED9FA6F663D94C7A4263169A35501 EFF889C1F08EA9015BD9915F39A8B53932ED0AD251124C2868E087F554967778325175B7 244D1E8874F38CD9EE28BF1E239C783944A6F37D35CF2B739AD75A4C09834E50131B7CA2 5F504EFE78C8795A770FBF145C57428F57E29C32C5BF24BFA1E49F906C10545581FC27E5 F6B1BB92391994F81983AAE3CA15DC1008CD79B6E85B96EF1D29A8DED394451E4CAA33FB 2FE8888FD22D5B6212B2614BC1D3A22858FE722EC66D4BB707E9188021F3D1C26342D1E0 4B90C564D5379941506A0A135F1505B6A471BA1D57013F680778DFCEB4358DB21EF35F68 007DE41F514C82EC04FA672F69471770177F4615F00DB39A4A73AD4133B9AA77BC4B9394 C02C53AB8C4C7E9D7BC908740BD017FF82C2B4EC05CF6D379B7E945E37E2FAF9589B0617 B5C04E547B7CC477C26EE5F8906FCE24FC16015645C76FDE27B7D25E9CB6EBD40908040B DCEEC2F62193147B5AAE9C2C34B91CD77D676A33C660537000BFF0AAF709F0D35AC5D5B6 CE9181E79C4114AFA0CCCFA456019362A11F109EFDA28CF1E06236F15F197E411631FD8B 5AFC2B8A17FEE9FE8AE8C0DAB9C9FDBA21ECB702EDC02F8DBFF4DEE1BCCD578461D8CDAF 4E8566C2DDB43A482C46B8286A098D3372C79B2116888FE7CB1ED7BD414BE97583A463C4 BE23EC5F7AA73546F0DE7B4DA6A0B256009C585A25D6482B24F7D31586026778F5D86818 12CE8B35A802F71FA96AE27E6F994C584558EC1E6C9D11D42047C3B4ECA36630783C74E3 C1E512FEE4415B4A8A1D7B3100D33E30E02B62DA39226B18E6BC172BC485ECE55A5DA69C F4CF3D7CF2C2D4D2463FCBF61CE961C51677CAC52E4C6C82B4DC6938864196B4AB2CB4DA 3F9955F54417C467FF9ED66A7780817D9925F72FE7B904376350C46DD1AD342301CD41FC 2C3CC863EEB5D0B3D259CE6F848770F255BCC5DA1D72EA6EB342E23C5EA5D45E50F6362E D14DAA2C76CE168535AE2AADF931DC054D64AAED4383C95A0B9A7C7BE4E876A54DF5CA0F 6DB44E9A961CF47D6FEFB6721A684F7A96C0972E4421DD2B42445278066C232465432646 7B72F59968044D0BBAF97BC33B06CF0CC4761988D3D0873F58993B2D22B0149EB222E7A5 75A4B58C7D05ED2162D47170F66F7BBBDE2B659252E0EB0CDD846A98FD4779FDD7B30EA5 907866654FEEFA42A1C3A70F232A321A9723DB10305E1316084E1E4576B6754B459C92F0 7B920664F943E12D1D5FA47F440C4491BFAF8EE720AC43CBE31720532509555ECC13C9E5 EE267C5F37AAB66E25477B11C815CCA230EA5C170B18F60D4F163AD85F366AE0B0AFC606 26C8C3B130A59936AEDA32638384137773F16A1499C38CCDECACE883F6E74758FC80FEEA E7952483FBF4DE9A699893074623F15D3291383361FABB0608D824A381B3F44E9F01FFD4 0BC94BC8A919E7F1C65203DB4D3593FAE91A903EBD743FA40A0BE67A60AAFBCE3D3A1E17 C414A049CD33B63AB7C454BB5C15C512EF057111028AE958F987CD927CA54ECDB0AACD3A 7C53C51B1884C2DA87DAE9C3F8478D5BEAE953EBB687B0C2F56C9755888DA2DF03F4B9CF 792C9DB56AFE41896A3086CA6996DFEE0E53DC824C4F74B6DD6C08794C32F1D90B6DFB5B BFB6981629721F4825242C1D46ED61C654322F4777670FA07CAA0A501FC3699615727EBF 8F6C492C293C25C682A2F37DF6BEAC223FA4D8EE1AE04C5EB5354F4AE5A92063DBA5FDC4 3C5AFDE1D4F349890805310D1518589918C554A53881EF8F62B0D0CD7AAF24A0AF08F25A 295106A80913291B1126FD939ACCDC5BDAF3A38697CDFB9F0AF07A2231A5A1B43343CA91 A3089377C85F6F56D357C38409264BB20B11475CBF7FD59B0D2AEC841CADFF3AB1EAFE73 1FD247480EA97B8E77C2789AB57EAAB9460BF896C5429821EC0995FC117DB8D6986C6CCD F592305348BE4AD755B6D1FCC542715D4B99358D141C28B2666E58CE881591CCFADB53C5 A3C222E8D22908B30CBFD9ED0FF18C2719C089CC546B084A2ACC61D2C048E1E627649B10 2C1A73659540712340134932DFCD7F1ECC0A6A15B815CC674969DF014AB6D3E1D8530423 571355A08C7B209080C91D49D2ED05A11AF78E4B512B2A5108B92DAB563E776F1AFAFFD4 171FC29154130A0859A00F45061DDF100C5C1F395A2FADAB71A6BFB77D9330D8A03259CD 66FF1B96A8DE99B9B6D7FBB8CFF29923CD5ABAF2A53EB114D9843F1D350CFCC24FD1F3A2 9C2640453A89A3D5E906DAE2FA1AE9B95DF14BD81484957C9322488BD563CEC15BEF101D 0BEA6D20DBF44B5003DBF93BAE3347D872B75C1D528BF3C0A6D6012C90ED51ABF96F1B44 81A5B508AEB337EA4CA67322AF78040A529C233580AA99D75E46F7067201E4433D61877C 96219F7D2D9B2E2A5BD6A8E9A44738864DD61AFEF575DF40BCCA4ADA482CF129BE29D483 591EED88F59B4A079B2B1158ECE9EADE34A167040F20B84568E4291EA93D6127B34114E4 FC7151C0BC0EB7EC575E9AF576581B4D96650971AD64D7D808E70C74FE730CDDE6522D1F 665AC6462FDBA2F95560F1BA45AE9DF9C6929BF926EAB80EEBFC73D240DC8B775F65AF8A 724157F68943685275E5EF8175B5C77FE6D9E5EEBCB7535C71F373BB5C287968A1D0BBA0 C794DE138715CDB057B358E9C57D976012098F852589D77A542D338D0903528C4C2F5CFA C0312490CEC57E81902F3A9BC5E7C08DA877A044ECE609B1B4F2658E919FC69615027E65 DEC93907C35DE20BFC2E110DCC82D754311C56F5BD826C9353996621241B56250BB66087 1C9788B57BE0F5FA6D9D99FB51F485243CFF1ADEB75BF7EA74351742343346283E5AF913 6DB6A955C17B04B096D5F3E4A87D62C8D09CFDF4305BBD4C6EDB7D87DD8E61E8C6602C4F 154CB9A5AB831097ABC1742039E1476F8F6BFEBEA442A327BAB3943E8BCA792D7A64DB8D CEAD644D834FEB304559FA385DA6F4215DB3C098C3AFD29A1064B941EFB8497B9FD97D38 066923BB4E4E6E14284B8AA3D9CF3AAA29A9DD452994255222BE2E4E14569C33FA1B05A5 48A49F1E63736A0F283E70527A043F23F91C1BEAB0749E870716806B5820051094A5B721 21C6F461667D2BCDD2BACD4B7DBBD38F7680056AB437369D165C368DEDA0F48F88ED695E 3CE154B10D803176382DD781A8180AD1E6BB868B38544B8A78C4372A0B484A7B52703A04 112B3FDA8526DB216470168A1FC83C2E9CD9A72693A86C6BFCD384A0BDCCCBD82B0E7DF9 3507AF33EAF8357EDE6B066280FCA6D9D5F2133E6284DC08282145425B4ABA61BE59ADC3 06464D7EAE4DFA6CED615330EE614AEEF0C6B996912367CE2D5D23710D150A40467B2900 F8F9350DEB9E4DEB3A83FCC4DDB92A8A28E0D170FA6CB5701B11CEF79D1120177B8992BC 5ECDDA7B143F83649B30E17AFAB91A6AEFB2C316CE1DB548A175F90D74E05030F4141D07 BB15D00C7846CE7FF2FBB25ED359DE5DC97CEB96662851004DA69643D53E7A7E1B3AABE5 D4A2F262598B6DE022D92F9A5CED1E447CBAD2934AE139E0B3E1CA6473B546D51CF221FD 09212B96D08006AF4D5643094732E74525CC40D1C692C1F174E832FECE7A08A26361F421 E072FCA753D82E34C4252E7A084F382800CA4C706D6E2FE36D4C0EE7AA7CAB17E26D379D FE75ED28ADBA3493D020BD8C2EC388518CCD86E6D5DABD44312617F9E44087FAB898DE4E AD25613984515685374B50ED1832C4CED66E262F757CD93EFF1C650FA8928BFA732D337C D691CF962090818257C6571DF9C98DD8587C80A44BB5FDD068ED33DC2D575B251946E376 2AE050E58B0A7BBD6EFC52842AFFF4D7BA6FEFA8EAB14ADB4CDB836CF1AC22F1CF247EA1 837790767BB4B4B17AC9D34CC1CFFEB892F65F6CF088700A53FC8DE35C95527B4EBA8ED0 29657B478CFF542CC87434606AA45FEDF2F8A880ABF1A93A794D97CB2FE3E1996BDC71A2 5E6B0F88D2E69B760442F9B4C0429B27C5F93C782B557D6130C0336C5BB61D83AFA13BDE B9E06C49CA0ABDA227144EEB023C2C205017B37CECC3A011F7341B8751A2F22D5C7BD822 2E9F28DF0BA02364F6D398E9D7787501730DC3F4DBE19F08AC9DD5067FABB2F85A1AD1F5 688934707615307FBF1E0368F82DC7D101F0C90ECE4F58C9AEFBA49D9136AC595855AA3A 1405751EF7D2CED14DA48DDDDB1956A29F3223762519545C13494C12F762A342452EC866 2CAB80CF8009750F548E14FF746C484CA413AFDFC5F754D617120496903ECA71EC9308D5 A520523EF1CFC662E324BB153C7489B4E694CB77C05C97F338B3E8F1DCCA6CA38FE4A4B6 A6E1884235BBF36C3BC90224C4933F72437AA33EDA29D2AA398863CD0D8C5586810DA25C D4BEAEE6F4045F0790ED9A75F5F2509AB176886564A906F3AAD390DF39B3EEA952AD6E2A C6DDA1F52EFFD49E244D7FCBC31E08840162BF762A74A3133EFFB246B68B47C1A1B57466 210C255FA0C801075D528931E53C0F6E03088A46D9BE447615AA4950531A94B2A03135F3 4E729AD7AAB241ED628CF6A7D34688AA83A81BE9EC957596689C7FF2F010F1344A4353F6 BE9E2AD2D79757926BB42260DBB71DD5F80E9748C629F1AC455B04764559B06073AE96AF 6C84DCCD85C24DA3937CAAE101439ECE8ADAB0C9C395DBF6B35242A461FB802120ABF5E5 24046A6786F59DA353C5FA79280DF6464B1AF5C5F0CE7C8878AA759EBFA34F89AA5FBA7C E37A7B9845D597C66B3FCEDE2EF822D449F1AE3DDE2DD0B96E522109D2F55DAB85A61439 F455E76AE59A65AC31B1C54C6A5A6E449664F4D1372D62C987FBA8A0125C700AFB2927CB 46202E7A0CAF5BA0E4ED13A611096D1B4DF7EB27AD6062E3DFC649406454F4BF8B66F887 647455320EE6667D47240CFA9F7DA40F4AC4BFE301972B264BEE32A87DAB19D065E92833 9A4EE26A804B940D01B1DB4465E24DA93B35F175A86E0E2469C1F2D228F0463253B2524D 4B696D6125593FD8D193DD9ACC050E7D16D80AF3AE6EA7DB609E3E069794E901E248D970 BCB82F2A948AE6B1044054552C1D1291EADD624E00CF30A616C7AC6B453C1E928AA0205C 9D35D7BEEEF0E796F7A6EE9BD1FEC58BDD647C0CC38374DFEACE51CAF05416D14CE23920 2049F168090742B5884D4AEFA2F88AAF28840720FFDB58EB7A20EDCDC1EE1B334D218A48 3416B477E813B122C498F64EA4D12631DAD7489D95970AB04C96283CC87DD2EEE9D038E3 E9534A386117F069E52164ED0149896C1714270AF7FB0347E2EE89C76C39ABBE687D6278 82FB7EB6ACE1FD2CD9FBC41338BD09DB850407B39DCA8C18A1511089744FFAD7D484B0AF 7783AD264EDFB0B0D2052435AB50F0C80C34CE9E613EBEEB4AD1DC5AF5CF4CE24DF9B57C DD4C1EBF414BEAABADCA9B22CD626C9B55538006EFF941865A59182D2235A711F0B195D2 6C6ACC33DDE2934CF1762B3FFA42CBE3E68DA46C56A0B142922643B3392B5E4062481F0D F8985779EC9709ACC47F7764BB69B1EC0FE7134DD3A31FA3707EAD039D24925123A8FCB8 AA75DA59AC8DE045157BB1104CD2B5906E9090D8BC6957EAFCFE6E3709EB52537DEB9507 D8423FA2DEAC4549F19151592A1435D62B773CB2627586DAA3D5BDF8BEB5E1DD5D27AFBE C4F1B04EEDC467C00C4CD0FFDBD7B5E02EA60E7FBD12557FEDCA49EA83ABCF4B9215EEF5 9CD5A38EBCAD3395C2AD3013FB1F984B2829C31C889566CB68607B160791939764A8C857 93118B3F1944CBEC88BB044A13A03190AAE0AA01E1B2D5ED48F57C7689CA80EBF364F5E7 2B0F6A0CFD0516E306D3F6B232B71C33AAF983FFF716E8CB792AB5D1C6680C079743910C A682C2DDCB87352A51F3F5B5F5D5018F35D95E82F6E2D232C83A41C99EC72981412925D2 A5EAE69956022C2B806A46F3672880D99FA92E1637AEF72384BB4B109FF11DAA61D076C5 D124406D29E34881B25BABF5BDEDF62114B2E57F0129B54EE15F9D6D5FF9AD8BD12C2A6A EFFD0FFEC536961C5C1F31CF3B8A8F6DBB527410A0F0196E55948D86BAC07911498BC27B D89C5CEB8140E3450702507570931087050827BF641F44E41F5DADB28DB877EAAE795C6C 07F1B3B762D9FB5BC75F6AFADE7C9E63DF107A2D2EE5A6C3B068D44AD9E55DA9D0F65DF6 B51AEC8241CEDA80C8A2E4C5C5A34CDBF5A78DA540A1C6EC4D9141ADC8FB41D907C0C8EA BF17FD6629B61AB0E659253269B6CAA3FB3F5B0211E1ABEDB21039C436BC248177EFBFED CC8AB0C3F609040616568B63BF96D3CA5012E77F19653D96C17071DB3424131B1ACCC1D7 2C2701B010DF689B04D172BF189301895A90D60B0484953E1687F4D26C99E0EE046F57E8 109DCC4589D7BA1B08657B7405C4B4FEAFBF7DD9E773BECB28E255A8B6BF0145AE87EB1D AAAA5BC8600D360476C591EC51113F8BE83530896E84C5D98F3F65F688FBBC3B6F78331A 4B57A4A39C01BA7312B123E73D183BAF73EF86DD7240C6464C3DE9A9AF0B38B3BF3582BE 819596AAD705D5F2DF1A5ED93D5E633323FCDAC530AF7E6ABA9A141F6293155DFFB0A4C3 2C2BE79450A26F5AA54F6CFF900502BFAD5DBD016E692AE0E590C67E816819C907E5A75B 824873CF7FB9545C9BB8D07D6949B29A9ADEC92295BE119DCF715E570D78270B07500949 1362156CC7BA9FD77C9FE3C676E6AF10F2B71FAF920278B1927D84DC3720E174592A2831 181C966820A541241CBF022E962BEE9C9BD489D7E3A63A7A789EB1D456F55560FE840F87 3E5DF11DD0EAB9522CCCE0B601A49958E37E39B0E2153C01DB8516218F71E0F224EE09C5 33288BBF9EE9FA672D7317DA6AC3E7F3259D65D1A8E70B85F48089278690E24EF5CEEF9A A0280661098A984A87802E49ED96C291A2D93A2ABB7A7BF07E6B7BD3ACEA664E251E6767 4752988197AB5AE5741B6D67589E68A325EDD4C05B6BECBBF52C390FCEAC6BEA651665DD 24BCC297601021B92DD4DB1438176A6B090BB070370DC4C63EB71815EEFA94A1C6D649FA 43D8DF8FD67A4B3617DBD203F946DB8CF7D2685D1596720DE6DB97337B04AD4B04CC2043 0B9B3FD72E9ECE509D8CA0F0D9B0F76AD85531AE2C7D47D518FF3C3637B71888AC2A0E88 C9099DF0422DBC471EDE80DD87A7BE2FAD4873B592CE55C40F4CDA91A56E816881365449 DBD5DB8DBC82C634FEB13926FC32F0F67A40B72A5A6A410457D042F1F861BB40C1A50058 6702F9F2262A2BA7C2E73605814D4595F48DA594E178E8B96964345A9EE0F6AA1E46D8AC CA109DA212A52EDE923C25BF1C587AEC22113770DB923725E6E70028043328A5C8FEF9EE 99A41F3A1DB913B5F934C5D216B9513E47E9D81BC66DA833FC2AED5F22A990F759D43E63 0FB7F99D10C9DBCE637A8DAF51F882FB93CB038F0C51C8D16C046840132A845649427B6F 7596A73FE0627085DF282BCC7967A552F762D63A1CB0AE3C605B1D65E03A6EE9CB8D512F BE5543209E9236FCCBAEF7A56A49A2A6EC56A32E1B3CBA07A9CE1A496108F323867C6B94 3845954BF24E229925FB68806D0B17777CEE49749AA166F1103167E34C9FB647550BCDCB 882AFC6167EBAD771897257FA6E03CB6617206D62349D39CD1F455644C638CAE93265016 02A163E0BACC48518A61D6563A38DDDB421FA0967926D7BD6ADF2E64EF8654C949F59436 10480D1D72AC370A681CB85F40C3F553A239E7D80816273E01EB4585AFF4D8987600F1F9 9A2C4C68E89488E270C99B40B540F43D43F3E246CA42E31BD15F3F81ED61DCFB57964E15 A5CA770DE5083D979640D337D2FD7CC013969EFA31957B28FA3F823A06FE6F2042E15D19 F0FE6B560A18634CBE3C88302F8FFFD6D83E94231225751989BE1965A35307D017699D87 97DE3DBC0E3DB1D898CDCFB5D5E6C82544E290F372AC5622C9B4BC1E0ECFDF58034932F4 44A8401C318F4906EEFD5DEAAB10A38B1869B48C4C22105ED81B8907EEC973A95193350D 886FA7B61BDF4D5E1818649DBE2AEB7B7AC0343ECF21287B7ED8B396B4955401FFADF1E5 218B2CA90097AD9C5AA47F3A31998469810BBCF2B49A99BF603F33FC1FE320B1B4E7220D C707701AF244D478E48B081B849CF78169282172FB3FE37BEB995C0547038DD724717D19 BAF225AAED6B5CABE9B2D53544D898F96F0DFF77FD2FE45179828610B0B58D26B6A6F9B9 D532E95672CC30CBDA970EE74EF9417D7748F2830ED4053C21294EB82B2DBBCD772AEC6B 498CB8574640165E09C9AAF6119033BE6635F3BDDF694852CFC100C043DD152662F8E306 13A03C261AB341724075A64273ADD4CEE1F35DCA32BDC58F8E7D6EC99EB0142C9DCEE216 CCB1144343650BB8823EBE58082B8A6BAB43837C391802A72CF5B050265181E68E972973 646C5A2CB59605B8175364D9C62CDBF1B82661CDCCFE3E9CC9B86F9E2C997CB50828AAF6 8FE71B12B38E93392F02A2827F838656C084534F8CCD209C187846BFF2AFCA49A6506273 8327483C2D5B9F21D8610F6E0EEBDC5E25C0AFA6396A6F09853E95D75FC19A22ED26806C CA8EC4251F5FDD7E1492923812740C2E749B9F8277470C2FFC310473149CBED5D498D265 2FE83797FF63BC125624535B553B933A95333435F3FC730D292CA9E06AA2EE0C4DB1770A 166C11DE4FEA72F703134D260746EC89031154B6E823A9FC457BD7214B784BBB9BF9CFF8 62F6332AEA7B08D4DBEED91ECA3B0F77A7A6FD1B20A58D99057131C0D85BF6B191122FD5 4D1A62CA238B025A3A3B4042D365A0F3D0416715D630CB2DF88B1A991302ACD9C0351239 141628873371A09DA7D701593C1F6F34EE24D761E76571CAE1EE27029DD2089163C58792 0C500636397A49CC0DE97B470DFFA8A6CCA03022FAFE7BE47C5790D507715FBC10178EE5 F8245468F3BE131B52877F64C5178E12CDE8CEB151AC3E0C89BEC9498D9F6B62B9BF8EC0 911FB54D165BF055FCBFF82C295498390C0E06AE1E0E113BA1A8BE6C8E7038B0B82A3EF9 914F25FA805BA386A9C8FBE6E6EB23697CF01E3EA56A4F85D1CC38E2268382BA153DFCDD 91453628F24937CCB1F6DCEA65629812F6AD62F756D7BA9D958A496BB35AC804AC9D719A 0014BA7C3B2EC975B325674477544E6398FF99F3D5E773EC8175FB26ED1A5AB8686F2972 8307480047F1525D05EEF98C8C737835CFBA01BD92C5D59B7EEF844C7A3E2F4161DB6AD6 16220EA6E3212C156D8CCA3B3F276F1FA3BB7EBEE7954F808F223D41628F72BE176AD267 6CEF7F51F126D404240F6C93DBBE0A01D83D2D68FBA2264E9F7B162C94FF49D5B489F417 F1D299A1FD4DDFE96A3B6BA5FD343F2A35291B54995146C3C2BAC96FE8A37C142C952BA4 01DA0607C7188CEF990BF67B8908D4D7B012349941F8C83F65B0132217AD5487E8732373 99ACCA8A83DBD6CAE3F1C4B98CA26C3A0A5B1817800FF66DE77E6E53006803CB2D04D2FD A015F0DA8D11FBAEA20412C740742B43EC9583FBE15A885A55743AC82E41F441235C0652 D1E88A8AB86649691B20C68EF961E8F3E44A5EA4424FC8F4CEB885CD4622D60509A3E77C ACBB3F6EF2DD557C1C78859E1B06942271D7FD90FE5D3375891CDAC5B08CB94E61A5E376 F7E5489FC49C76F5BE4602F4034BB2978772F92E48176ABA01A996984319FD5401F3F134 D5EFE0B4E7E3C45478163B96A1B214EE232C1EE5CDBEB0B1A1457173F083DBC5A59D7298 1D04F8B730118BF5151865639E2F672520E5FFDD32A55B532F03B16DAE0D084DB8245522 E2A3F6635668E8FFA803BE7EF4AFCDDE5AEC1912CCAD2C2FF3F06C639919D3C983CFA46F E166B469B912A7E739A833C32C80C851691699CC2320EF52DCD35D47979F5E6BB0110600 EE6037ED48D6E7D38805A15D60CBBBFA93D2FCA57A71C5F3CF1693F85F6B27DB4D3DCCA0 228D73C12A0154936EF65D0AE47366BD0BD44EF8BEABEA0D550F102B7AA91321FE56287A A70BE3F515B9F12F228DE922CCF23912711EF67AD504172459C498E4D146343DF352EF04 B1E8D3341DA52A761341236FE75DE04D7FA13C588D8797969D7C646854CDDC9C44AA2761 0401785B7554B512466A5052A73E5AEE2938DE307695019CBD45D1F75F429DB74B7F1FEC 10961A1902A221F60A6545362EBB4D8BE430489E75D281EC15F7BF6106B3CB7DB7C3C90F 71798BE23FF7B28E0DC8DE04DA06B8D8B89FE0B72DD1D1C221747C2A67CB468877C8FB07 D066B50DB43FBE804EF105E200EAD481FA5E9AA746EDFF1EE144FB9AA71C7A4C61D45889 A596259027D0FA44960FA7C8279FB7DEDBEAC2C52305377A8F90E485183BE472D2E9B388 C90CF4C32DE59ED0C990C1715E15C07C6E560A90DB9EEC914124BEC1B9865BD5D499642A D95EBA72E831B88B893BB44694E465C233814D38B939E03FF9EE982FD9C5127EC914B009 3A9A11B7858028CCA4520FC933FAD352B9FF18BA45136B1BDC6D0D47C8DDA98ABDAD7081 1D34C14AE687F325AE63CDCBC75580411F128E7861C0BE6303495119CD305C76FCB699CA 64A842FAB5C9E084200CA7162B6D41A5F8CA47A69C154543E2F742D1EBF55E4ED6DC7845 21F5FA77B250074E55480439D2E416811F5CBCAA2C007F49142A7EE78F8F6A120DB554C3 1FD0B2E0D023D354E2C76F491F3A2E8ABF7B3CA78432C07AECBB0E33E01AFB2382893DA3 9F4B264F16A25BD2985ABC7F94543B34F16B95AED106D75B47D4E97B0ED561B290F9EA24 D775965AA0984A30DA1758D7FC7DA901903E486445BF07BCCFD2904AB16BB02E48CE5CAA 240857B78DB96878E9B17767365BEBE17BC2BA3D7BE8F73F9AB84D0649998E11D95421FC 9FD79491F3D40248472EDF3F1249AB7221ABDDAD5B5D57077D4E2BB51CB20FE74D2F0804 3F33A5C42579CFD78E1373A514B85925EA37EF7E0C59C54334D0355D390F2E78DF0C636A 94495064F9886EDE741CDC9DB228C80974CAC9B1579C9A90FDF9C173833D60772F33188B EDA84C82A49945610CE31C07D0C1D7C8B6583902F9AE00C39591A0FD6F184AC016703567 9333AA925CB9F8641C226AE8CB9BBAB562C223F29A9ADE858A8C2EFA9E692B3659CD091E 697AF99E56814F1ACC8FCCF5B1D150722203B08D4C4802F7932DD2CC05D93D83F3EA7ABF FA979054287003BD87D501F2381B4107F0E679F2146BEB5EFB65A04AA7AD402C2C55B547 014CBF51DC7CF43B7A9D6E76A593B96FAEF9A0DF53036F1C53CE11971A5F2DAEABC5AFB2 99E072D0D0F0722BAD272B5E929B59AE7980EE3E6DF93CA1181468A697DC3F4E35B54A4C E23D888B588AE19C5569466B57537C6F3FCDA0B054901DB87DE44FB1B5322D54C9C12466 8DCE2B15C893CCD71B738B12376B7BF27EBDE19E2576E9199F62979154029231FDEA58EF F0EEBF92FE248B18F0141FF6535C0EB83F6B721E5BFEF3AF8A38BE96A83A0840520A9D53 6DDEA0014F5BF69F4C2572BA8280EFA0D20F5566818A000E9077719FFD17C6B7823E1F89 777FF71428870C613A2B9A65BD024ADF205A11F792804C75E571FB6F7599E71E662E788A FF9DD96A60136044B3C62697F9723BB706E1AC469072CB3135D5593A73E19938DF440ADF DB7AFF683D062D6A6E5E26C8A2590A44FC2F9D478A988E763C7EEDFB3675A4684678CA47 BEB55EB166A9D7B9F3776B11D9D2089D1E81D091F137167CD45B2557F33DA3EAF22FCE58 29E4AF7F5DC7C552A9D380EC83897017D94C6CDA7A98624F4F5568B64C00E31012183C6B B8CF23E3DC32ED7A73FE2D6FFA40268367E6896B1334BEE65A6F90449D7B447AB9FF0902 619E996E6C24F1729D1B1351E39DE7B5CE688B95F149319866FE1E21D51BF60A258361AB 620EE1158285101786D654F0826F01CA1D6C1C5BD27D1BA3CA92DF9C77D69EDFF13233DE EB7684EAE2BBA7E9F5999F5D5679B335FB8383E85E5B25EAF47416970E40481D61DFCCE4 8B407AFEDAF6C5C70822C6A865A513585295DA8611A224CB8875D5C92A5F7012201B1C10 DEC9B7817327B8CF8D67922D85729F838EAFA151C6A67955263279CA94E8941A8B414FB0 9B2A284F11B436832707B51EDFF397364F8451FCDED3082DDD6C830784C584D09E6C9E8A F381159BD74EB740C38DAB3C6F9079D3A4DD890AC69C6A3D6FE40F9E9038CD889C65A901 E11E4B8E4B32F74BA07265C1B731B03EC4D6B7B1450C71BD09484C25DC29FB92957D87FE F030AF95F4B01A1088F2E6921AB830F62E390A2DC3BF39A7F60DAD91BF7529DC4AD5E2CF 557C9F1476FAA608B5F64F8B6661553807C88C2A12BFEB4A3220468C1719C81A08552237 AB95685971C5272999D268A8A4FF6C02D73D2384BB70E7E3F8F0124AD63F01F89962BB84 97E8562A1B1DEDCEB02F22F16D9A8702528165A8272E8EB0AABF65965FBB4D0B0EAD1AB7 9C4DC63C15F85293C5FB1C7884D028DA8786D0276355AD7F611CA6A8E80CF3B7C39FC72A E417CA903B5F97054CA5554DBF0C96389FBC75680C10B65217DAE2657B0AABACC84BB741 F0960289A296EA5506BF31DBC0B25138AC1EED42B8B3B2503134760522F13A2A99852BA3 0AE4A001581EEEDDA5F9D3D928695737F913269C76AD20988199895C24DFA9658FAD32B2 1E5C084E19236FEA241BE8B705676F2F2DDDA25683BFC002EB6E22D469B27B1FD7AA4F81 521E3FF5892FD6083A10B8E925B0434A8475F6EE454CA160BC3F076E005F4BEBB3B53A1D 64670E28BE6541A8EE72F26BEFB05F1CBE0B99F01AE46253D086845F86F84EE638B91FD4 9550A133BFAA2FE631D266135C6974F80509F8EB3DD678B16344EB09D5A8862F89724287 B984D088E782A9794AE9D56CBA5ED1A48B62A69957FEB8FAEA444259DB2EB3F57FFE69E5 D8E8C7FF83930D9CEDEEC02779C33226996C5C271C5F6DED79ADA127EA336373AF68D0B4 FF87D37A0DDD37564D5B0E8C1F77C81D1C68B2BBAC15DF02050CF926046754EFB66CD77C CB3EDB52BC10E98B7933ADE33AA424965A402A4E50DED86A154A33A86C9DFE5A51E7F527 DD21D60F0E80020C7FEB54D07A1E211D61618B37062605FC4945DCFDDA7EA3F1324BEA22 D0CF5CA95A7A49B2B15DED898EF9A0978C431D474682C3CDC7836630DB6765447B7455FE 40B3E3301FD8645B0ABEC1D0BE56996C11191D431A67EE45BA3FE9DFA95F01896A823C0B 270357298B700A1623228BBB0ED6E9C1D4994ECBAF02674939E502C5240793AD47FE12AB BA47EF5DE7289768369981AEA01E6156C9A36F9457152F74DC8047877B50C96BCBDFBCA3 4F6B858B8CF67B3234CCC1C945EB8E13BE448FE779A0C66197DA9123947E1ED2D0522400 928A9DB90729F9F672436FD05F2D2863C39BFDF058272BF52CCC8ED4D56DDCF7CF2AA4A7 C02C6AA642333744139273E31968D755E8FB60D4356E12BBF2BB4B141EF9E864A7338095 815683ED8B23C8D4D0136E434D0DCC3DF20E658FACC78366D4BD2B8D475A34AE7E80720E E26A21AE30FB383BA2067BAD459CF53BC1E43AB0D05B89C75FFE9290C629A15CB3A91F49 FF2BC665555B97652A50A8823DA98209C7ADD0D3807D6F991B344BB673157723EDE82C20 BFD029392B10259C5477DE5ADAA7F622A37CD8F488F692A22DDC1853F74851BB97254BC8 7A8C406A9882427F929A6AD86DEBFDC963AFC36A9B5166B1C0C8546089C968D910323D0F 254532174EB60ABC61CB3A9D4885B5CCF42F4A6EDB8F30C77B4493DF536ABD59104A8901 D0031DFB7203E24A3A2CF1D91EC2C9B7540324A413BDC6BE0C9DB2090551436F4B1D83B1 51470255BE8D34234C2B9B8FA530794602D808E445B40DC3E69F96E2CD03FAA3B4608D70 209527719DA41FF6A3F1752BC01634DB2FB1206AD7B8BDA293DAEDC486D63FCE463A1999 B69A50F418EAB8AD71D3137196BB75E0C8740B68B7B3258A1BF0722CB9944BCDEC5949E4 C6E9DE98A9D5BAC2EB888CF0D5F6105FC35E8BC6D08B1DBE4132751790229AF6A12EC762 4A14D2963456CD061A3B7C5DC0BC5B775DB1A104B65E6294BFDBB804744FA75E15CE4358 EC83B743745A938C942B95BED80D32B518EA8DFCCBA98432070F0CF0D8D8A29D3376F6CC A60FF570F1C93DEF15D11BCB0ACEAC4861B714FA9A4B4EDF9069BC102124811BCE03BF4A 20B7367319F294EEE7FBAB7D7FE5CEBCA421A2ACEB8CE3AFCD78072C9B27AD2167855143 45386DDD8C7191333D15BCC816211D5CFF80EE06C8F2353BE89E0B668CD163F6F4994F4A 303200D0FD9303C9FFAAF8EB0D1A0038B5888E5B1AB357A1B4DB0ADACFD1C5475FAB75C6 7777E110418DC037323C509A9A3DCAF591CDED29D85DAC3B6D2F261E9B0CEB27E247B773 B42755655B7B942F5F2FB1E4C5E751C99AA500C3FFEC66FA0B73174A2C35CE645553DB39 8088CD050B85E3333AACC0E34CA550C1EA9EE7F48CB33F79143D18D2C588D9CF6E68877B 654DD0F57B82B55E1EDC5CBF87D3460840CC649C3DEABA9DD8B2D2683E5A5390E9B108C0 1A7A38118BA5388B8633EFF4DE31428C73B756DDF7A0442CF67C43608617AA10D8F9FF9A D8688D4C068322D17A842B9EDFA69A260EEAB21B90BF13C06BDAA3588452B693A873A2AD FFEF50F7D9EE2E73C31977A48B29406D3959D2062BE4D9AFCD69FAC40231CA27EB0E8CA6 2B214E95E4A38FC53096F30A3246DF1F3B1EAE27705A7BF71132F6C58E2C1FF0D29FB492 DC132D86AEB664D5ECAE72CA41FBD4B5F5BA9533B0AB731E2B71D72026EECECEA1CC34A6 94EBAAFC5EBE52469EE3D1533123D5304280048DEDB33DF5F30AA629B31A8AB0C4AD4274 3A40CA8E70DCA3BC0C635E7C89784FA863AB868B2EBA5E29331BE53528A99F84EA77A6A6 193534051E1E18E48D9D7DF0D52261938DCC793AA3D202A5B983CA79FADC9C800494965B 45B0836E732DF4214DC47D3EA57CAA2FC8C83D9927E178C3AED7464601C62313866FBE72 B080A5FAA5C52931A3BE87F80CD03161FB70B171CA624FD3D29D0C72F0C3226688D96F96 9A6D29AE474629FA346BF9C7F5BCE0A27B5448632FB1910F581019524217A03606C3F4B5 05A105A2FD3FF1420BD472575C8BA4585680408A3D44F4FFF976F7B42EB91F361F5903EA A217D8B49BE53E6D7D6538FC41E8A1ECB3CDD96A07E55E38524EFFF0778EEBC5E51A4FAE 12A562D36C6E7DF99F2C3995603633C50999D77A151448F9C4A0C0A7834F5A3F258243E4 3EDB4E342D472DC0117FDBE51B64C8449BA82BFFC71C37CAAE9B433197723EAFA3931E25 103A5E753AA97486818C2C072C7AEDA7E426F3914EC29AC55D96DE14A9D526A9235CEB88 16AB8960EAD9B53753D703F261F0BBCAA70C186182A4119005FEDF9DAB7AD8EC8E9451A1 0D2C4B7A0F4FA1C7720C9889514739F814E68547E794F5B438D81FA74F8CED806C2FB88A 4F73ABBE525BB533404CE0332B74D2CBB1C98202CEE7D87F6C5E119D5D596B7E095190FA 3ADF7ACFD8D7C3497D221148E5E331C6628DB3920E33994D6095C662D6779F571DF7EF1B D7FFABB1C5CE5A4383F34466608CFE5C1AA96B343384CC250F006497C22B3A019EF8B92F F6B26537348366B9D691BB92CEBBF86646DBEDB07EEB7154E676D068775D27982434153F 6D899430D221B47A858A3C4B075AE3AFF83C6E0888D5661B20EDCDD0A038B664EB471014 C3F8E82DE83622786548DFD70F885155D47469ECEFD656FDBB846DC1A1F494193ABF0D89 4941B24D99D83DDE1759211FDDD2F16CBDE883162FC76E6DACED307676DB678F7651EBA7 CFD8BA5DAD2F99EA61ACF225DB2419047BB7924569BE410127097EF13053BA3DA895BE74 3AD2E517C8DEC0471C5834FC2E66F46A5F77CAC8EB29885A14EFBE6459AE6704C81E2444 FCC88F435FBF6AD0AE482179E26C3537EE2E55432DE25ED7B53A265070DB1AEE4853F862 67FC0FC1C73383DB4E53D414831EBD09EED14D826897ED8BAEA2B227BA7DA88766303B5D 02BC3993C178C1CCE22F2C588E3AB745C889870F08F572DE072294BA38EA651072006B56 2EADA24CB52268BB4AEEED69F363D0B935152AF107785A4E8E83CF3B0CA1637ED2CB95FF F9E00575714B9CCA755548CE0092E9F65F7B190EE31257028D5D4D31424AF8058C7068CB B8CA0FAB23EC2057E1CC5EFE48199AAC3DD3D5FC3BFF0620FE9E7B06F6EB66EB4507201E E5E83B089649D15511DD8C8D88877AE16BDC2C84E505DAC50201A759E843C8F4E5385C8E 8517B4462D49A38A5E6CDC4AF37423746F7D2698FEEEB2F9382BD9C2F4A7EA6A14F7A184 DC0542C7B9A69A0443864DC2B68E63689BCEEE7E5687BC065B6F36D811FDDA53AF36C4DC A7C2493206584B7DC6E09C5936A301E01069A559A36926175E90FCFCAE84DF9645900ACB BBBC0D341EBEE8591E5F1E9CB9C9562E791A2C3CB3AB675701CCF0ECA92389EF07FC9DFB 98E9071919FB64D95DBC05D3BC36B2E5DC24816036929936A4036E803FE6DBEA6A0A29E7 E7BFE9C96A6567C35CFD25228A57DE1289145DDB633D62B22D6EB2BD310EDA7EE6F607D8 9B4308971FEFE13C92EC0321CCFA7E5D590351DCAE2239368B18F810616A623F7F601F1A 2EBAF2E5273711BD1AE8E736B19EC8842EFA5E0FA5CBA4252BCAE1F5E0FF9B78ABA87498 97DC2201727883853CBB9E1EFEEC90307934D997D6373BEC00076A01C65A9D045321B123 20541B039203CC1483D98357A0DBA9CC9F8BEDBF34F2B6523AF08658FAF6E373DFE750D1 4F7DB0D980BACBF45429082A1B2C84216953B5EE76BBA2E204A1AD31B7A4A8EA9C7A212B 501D83BDCCD4460F147EC1439E331C135B6EEBD157FC909EE014D25DC5943ED7A91F22C8 41F39E08D4B19136B0EC6945EF1EAA705C5454D295E8672047AB6B7A776C30AB13A0E75A 468C506A21C55289C4DF4C277D26E6A01A7687FFCE780A1A5C2FEBF0F31BD76B54EF05E9 A792A90A5A83AADD59AFDF10FADF38135D6E7EF5C511837AF5B77F200AE7A7138C603882 CC43D623481AAD10D43C5C24CDBAA184E2241F85BE90031A58D8E05D6CF5218592B44BD2 3207ACD48A326322721F17BF1CEA981A7C65CCCD4165E4976EBB0DDB463AE4227A8113CF D2F6D85D56D3D48E7ADA3A1A16EBFD32140C6AC35DD3FF5B25FA342FFAA294E7148B6FE6 3C9D4532393B1A5B6DCCAA513116D0D3EF422F5C27E9FEDEFA7993249B3DC9F795131EDA 9CDC6689C748B923014303ADBAC705D85D2F8E4BDA16F56B5BFCAAC35DDFAD3F7EA84F76 0C3AE0D87586DF5E020B5DD0B3ECB3572434EA98A5B073C9376FB78F7E728F0E180C584F B7CA7446242A41887780AF6E02986E3ACDCBC1697161A3BA045CA7CB647F1C1BA070ACA5 59B5C08B9CB2F7F089FCAB8322FFC477CAFB7103207332FFAC2EE82412109EB3CDDFFAA5 3162A36C01E57B13CB994F02F2C7A9C290EFF64022027BBBB4450F12795D2CCCCDFBEAC6 79182DAC776EDF163D4CF1357DC79F978E9DB794D6C2EE38C8B054E4D3B7BC85C411F472 B3B6D29F1E75790A9909F903C5FFD8E983216883FAC1B4555D04A121F06FCCA639D13D61 14B5F1A9F30D0C0DAE1D39BFABF283787C9DDA96B1652CE8E45CAA7CFBF68B80A19B1075 308451F6EB53FE120A95036895CC1B5363BF75ED25978E41DCBCBA957FE16918922C238F 86D5522137DC6F6D7BAE051EF11CAD1C8497DC05AB5D5C67875A09219835E89449AE4EB9 8D7EADFD3F11B599C35B01429DDA8B402C41B35DCF65A4152F8F95A04887C98871946B8A E6DD7F350EB6422AF4CB0D99B1D3A9778B1284A0802231DA6A0CA27CC901871219D8BFD1 8AB8DCC02BFBAA82686CB1D8E2D57F666279A8B08A849D915AA5B28F7243E2384F535F86 C02D185DE5C6CDB5B50A0666DD09FFA0654554B24977A798BD4E82AD883169382B3C6094 42D6339DC6703089EC0B6E53C1EA3B920C277263488E268434BF28F9415EF47BB7EFD53D 3420577455EA87F18ADD91B00B4504306241BB0673D98C0733F004881DC61E3E636333AC B6C60D003D55DA58D156E503791C04B0C4D8E8420DEBB0B2843A47118809AEDE1D5DE019 6EC72C598F9BD7EE4CD66DCC293F1C87D1A794B880C39A48BFBA0CD3D8B50828A7A6728E C98CDBEF22564E55C2EA35B1F6A2154CA2B6D0C41DCB413898E5FE9F8659D96A33ECDDA7 F97AD024AC396A418E6441D2AD6BC722A24D5A21B632288469A8EB379892CF371C1AD2D5 5DE660D5E00BDFACD35FA92DF31DD0EAFC2A639F54C63FC9CF7D44DA8B754BB55D89A6DA 9A0F563E817EE0F55BB0BEE555EF3F525875B50FCA4219E572CB2ED1EB9EA52F56279777 A8C8D625315BB016050D8ABA8E025A64137100F5A28D3CCA67659E1EC097571EACC30CC8 70FC4DF4FD73EBB5E2972AAF4963B9468ADDCBAD2DAA938AB4041C9660E81BFB21B1638C 727E4BD9D4F973989D5AE6BCE69DCDE5B37DE758AC44B461D1A205E610CD98231D6970CF 3917467B46E54058F52FDE5DDF813C3E2BF74F412DD98374E75DDE78290E8AB94EAD7B62 43B2A88BD6681537CFB7268D7935029BA7A8AD2A4BDC97A466DEEB8E0800433B0ACE627F 8399EC5BCE07C3202EE717478E6796E80048716209B6A305A681F172453189624282BA19 E9B52FC6D5BB6BBE661A7D7F1AE30F3BF0F33A22C6A16E774CFF4785BC82090F912891AA D7494C31E90A77CD3A8CEC1E70CA45FCBE5D374D8165798F5B3BA9700FA38CDCE91A4647 99077DCCD6579347B15AD6541130D0C024CDFE1FC5C8B0C94A0B777A7E05BBF47AACDE2A 1DBC5549076830972EC79C59B3F72FA88D17D539E894FA9001D3069144747254BCBDEF40 13A453F19CA2D63D9A8FB3C1FC7D1B8852D41BCCA71E32777EE6FC7B974D8CE8F8AFAFF6 E5C8D8010F2EC3C3B5B1F7F161C0143ACA25D6B0DCCA1D2CA8C7A834688A058E235257B7 01580E9C963E0A63DFC32E5F7EDDA203641D7B8206BECF787AC013936D6E68AE451497BB 25C19D2A38EA6EB5FAE3684E60EDD3DC2E858D318380EA83A1DA417EAC99C9B8AE5261DA BB36A14CFE96E72458CFCF38121C5556E2247DDB76260D7C778D14508A15EC9F368FBA02 9EC4C5DEF958C338DBC760E09685A626F8027B54BCDAC341227F47D98DB6EC32CCA68950 790122DFF463D62E72F5388BB1DDFB5B3801ED8C4B62A749B49DB188A3E4E397F16D5BB4 F366A5972CDC8A1F15E0546FC4B5ADA39699BB51CEAF26902CC29A3A64493E4372D30754 49471DE91AF782FCD8E21B6F01C282FE881DBB5655CB5293C889FDE9190CA834664DDB51 02A83E2D00BFC701DB7280A7DA0AE11EDF0E9ADCAEFC70EA50FF36EB80A3C354C51DAAC5 4DE61E163666D84C804D883314A3C1DE0F9DB499E0789453DDBE0C9C0FEBAF83B288C8E0 D2DD2BE3947AE7E9E788ECC06FEA760E850E406F2833A7755CD7B1B11DB1AABF4B752E10 5E8E4905DBC52CE6B9FDA82C7036937E473946C9FA13D91304225AADE88CE3339B2721E0 A38E946B23EE926B33B26249C90329DB8DECBC944CFEA937C9A9F90912A253EE036E35D7 2563857D6C08E6715936C1CA17EF9D98762AED5D3EF6C19DB09FDC6E2F3DF2E4441E6A40 9A1B5D26C0879A31D562D44CF0BE847862134E84B6D5AEBB7DEA5593F4EA04ECC3A12881 C26DF13B455AAFA5A8086DCF433115DBE6F37F70080A84A8223E52FF548C3FA9C792510D BC0062AF3E5216E974BC0127759A7C145266B48858E13AEFCCDFB13AE3659DB486386AD8 DAB6CC83B2E965DE45FE4DF70E2BDDEE68B4CC7CF4E8A2640D908868B780D20B5E0BF34F 629FA96639D7545745979AD64563C6FCF98BE47354DD339C1E07B0C28C5994DF5D7424BA A445F2E68D7B0B84243D48AF022DC9D56ECE10C19DFA26A94AC2155549DFABA70D42E427 D64CC71E70ABE49A658173ACBB2059F26FFEC152D7FD9B148E64370A5FE8447E1B6A5C78 F9163D95543C7441C1AA23BED8DA8FB5CA5073BAD2CFF27BDF1FC8C4DD0EFA9E8E99C3BD E749BDC8228F4613C0C19D1FE7BF06C58578CA2B9C82E15C841DA328E2DEB4ACEC5A8BF2 19748E28125C23CF6EFF5D60E7F2474FBB8B46AA87E463315D2415C946A3BBB3051F56DD 423F901ED592579E20D82E6578FFE347DA66B2B7F97C3A9302C72FB0E426F5CF7AA5B260 A9EF9F522821D20A183B03674D4417499CCC464CBCB28DA68C690060F7F046CEE7DD6EC2 E71D932DDC2210CEEDF77353B07870C103820D624DCC15AD86F493125DFD4DA48B979677 801B1F96E5D0D48A2221CE4E1F5CED2670096A8C2545D53C5F31F911F945A8F9BADC5B17 60009874A970D939D5A7EE266B46DEDD9ED2658FA6201E7C5FFA9706E41AF7A9E131D047 BB9AC178C8F4A3ECBDB25F763B3CF0E3C085546691C2450562246148A8F2730F430C3FF2 AF9898E02FCB24362ECE6400C8C36890BC2B504BB996DB3CE5C05DEC01806472AD5CFC21 C321337F7F3E157D567DEEA3B2D353821569B7EAD27D4F5CF1CE8A988857C01F066DB94D 3DAD01CD9CE70A9C4D989EA0B8EC283CF44F64B7343CB139E5B411E0BDDFCCD6633003A3 EFC20BDB275EF64E46BF9092A603581F8179410347B60274D2ADEC46E7C5AB47DE196CBA B67DFBFFBCCD9FDB82EF0929E34F95827246A5331FE8B08072ABC1599A723BD7F9EE3BEF 3EF446F997FFCC08BB81BDD70BD9EF9D45BF8F5EDFFC4819C7348A17060573D98E689C8F DB30C05EFECBE9C9003A8373FB9DBCA1807D2E3710F498C77C2747F49C3EB6B1507D7E61 3214BE679A89B90CB31A7F01544B118E5085A94FF5C8217691001A679F65A6FB08E07E18 F90FB47FD3A8E3287DEB07A05DB8FA6C7C89D14FD71222CE83C6129581BDB8602C65FDFA 67B3403F88E656A4C3373734A0FB3D6079E92ACC805874040310C0BE0F9D52142CF652EC C9E1BF6A797B7201515B9EEBDAAD439A6DE3C6C9FF367CBC95CB5E8E9E5971DC1D1F5E63 353ED575A5EDF9B5335CFDE426433F7B50E0EC93FC0A58BC7E09211E7C553F00739D7EC6 6F58F9F5028F2F29C71637A3CE8AB48E3832A64466D8EFFFB421385A2EF8821B91279B6A 88AF42F9E3F649C078DA86EAC34BED79CFB263FB3B86481D20DD02C201643D48677ACC79 BBCDAD6B77F5079408F011FE08CFF2C54CB26CE44A21E14F578A5866AD20F4C72103A5A7 A30EF13522F779B8D8F6258B86B716BAD5288A11BFDB87EC6227F6C1D5A1032643759F2C F2F9B6283BAD9D38B2BD0ADC27FE2D682E4D1DBD07FCDC53DEA459EEF1E23B57E100411C DA751D4734F431A509522BAD97AABC7573185C959DA1511C14CDAEEFF3CF7E4BBF01248E 0174F11A1CE4ABBD3BFF5B24031AB7D932C2BE212954EAC107098CADB025F79FACCC461B 1E9051C7086332EA3A6657EABF5EA7F208848E3DB279ABCF663EFE455E619978A4D1989B E9D97119C60078E86934AB08E3FA20C7AD47885B3AA86D6A4321FB308D31BA933579ECD2 5BC2D520B1B6B4B117DD1CB63F2D7D0F63CC5ADE4B079C7247A37AF9D163DB1EA14C7909 F3D8FBE5B4ADE7D855F3EF8519159D13B7EBD64B5EC5E0EB1A92B79D24331F41BB1AEAD8 E3CB32EE0F942D06CCC910060161CE75F37B21B7539E805049FCF70D522B5AD7DB0D4F19 E1F91C7E48A81AD8848E69E4DD53DD32FD8BE0711146E84737B0C13949C8B734B5E6BBFF 58A8F32863057B1E340A3BCFFD49B99CB22EE84E78FB463016E284B9C93B1E7949019B45 E3850077C08137C7664DAB6ACCCD72D9539798E7E06F86F6FCB4CB89972851FBEB610C91 7E4C593CBE71FCE812AE1B818F88B8C5B983844EBDCD8BD8954DFF2992F0060C22FB9D4A 8E4B64552417719220D0618D8868EEEC00633CFE128C0AE536CFC100D0F2455BFF22898D 53A2D62B92A7A8F1749C3F586E2F92CC813FCB82222D31BEABA7F9FDD6C5FC2F501A4DBB 72919F13208D97014DBB636EA28B4AC547BE41093AAE62D415D2DEDE48B32EF99CD201D4 F45286DB21F8968E689E55A6E9F53077266BB3705A6C562E57BC5E2D2483612699B0D51C E39DE3AC0C72246ADA1660F888D28789D7E3A3B72393D847931F482F1CEB00A418D3F4AC F14050C09E8E8979CFBD5B5BD3245B8E98DF44783059594AE8C66F2844C8B193C703AEBD 89BC28E45360085D4B56B2B0434655D10094EA08E026A2F5D633E1F53FB99B7A694CEE14 774D59AFA7273A209C53FCA83092EA314C2F4F9DC6F656CB62984873A72080324F4ED5B5 A32D890612274A5E9A3B806B92384A13A47D04BE5F0F07AFF949702DE2BD97896DD688DF 45A7C7667B0692EBB8E8A7E8124BA3AF85DC951D3AAD0851A74777D48EEB08A0AC2B2684 EA24DEB8DF355A807C5C3D46844EFC57A477D3E8372989ECD7FB5D5227809DA3784519E1 2A22BA359D400AB88173C22DA4F678735896308DC8BC80B812443381E773E7700CDC07B9 C92861775E92C5A5B25010334DF13D2DEFFE8F71D6F740953B0A94DC1951090B119AFBD7 DA6766500110A7D3C074F5A2F1D92534DA14D226C6CB36F1A54332C63AB68D72BDCBEFCE 85066AB22B72FA003CCA8D86750FBBF8A8AE4EB2307D9CE08511AB99C9A2F2181629FD32 EAAD5EAB4C0532C5BEE754A69B8FE4D2ECE0A6F855E66ABECFAE03763CFF29666DD0BE7D 6303349D5F298D54A63BFFAFEF0AC509D2B5757B63D0620250B42D115FE3CB5AFCFE94F0 EC10D6A3F4827132FD22E64BDF24DEA20E453355B3E590129FE323F4D7CB5EBD93B27577 FD8EBC10C07C831106FB064CC15F86B2906C565D7D7F9FCF7FC8E43C33EB2D62D76C36C7 51C918CD1C6BD0BC4832405AD295A123383142BB59775EE11C5A2242F16B82333BD6ABBA 2922F14131469639C3490BBAF97BC3419D7C345AF711A1936FA9D7E157E5F1B0A35D1AE6 30C54B80E125F1E2BCA9F35DE4BDF591EF88C838F8FDAA6DA5CC89B3309D233552BAC23F 912E397D195EB2A498A8F69F38E17D1FDC8E638C53DD34C925BDB942F7787DD11F6C2CD3 682EFB241630FE93536B547B3FE3858671A4920FA4980881E9A4CB5DB4A0A6D35519337C B6A4A53FAC471BF2691F84F9115450B53C87ADCE04777B8ECB4A6FE513B3EEAB9BAD3AF3 57FFB6ECD88821DAC4CC96F4FFD1F1C82B27DFF9741A9090F198CBD6F6EF0CB54E1A6C40 0D4665FBA325B92B585AD9BC179B67F7200AAF967EE121D7065B7351D995CE030D497FB2 E0BDB44BCEE28176AE2A9D437BA21E5C20BE0CF41714551C78CA3DC9FCD0C108EDD2E377 96E53A3DFEBD7FADEBE451EEE6E51D3A8FB8D753B51B26C05145F6A8CDFB6A1C3C5F3E8A C9313FF6D72772D07FB27AD28FC6B77C1B24EF32C7233C3C96E4EFEE04FFAF7D923815C3 53783343BAFA26D11CA737B63B1A29695123593109AED52178E8DA23C1E48BDDAA8C4536 D4CBD0CB8A0B6DBE2D9AD1FC8FD35C52863A33B9054DF625DB0849A6CBB842A7D503398A B1314340791BDE2166C0200ACE08E0C036CDF08531A13B2B9B71E842376A36ADCE7070BF B66FE19A09128B82A719C33D57F7AEBAACA184B0385065182087A39090276944D8C414E8 54CE4763B374F3CFDB8904A7C0A3DAF30075536C8914D92C27A6FCB88B6B1C78EF463D7E 645FC1C1EAFFD474926E418B0FE924229DEFAF112635E835A7F4F07B20A402A476467D09 85C55C620A963E147F190EB17B96617639B4D62B174626E6F43F3E80F1B105793CD3EF29 E643382E63DCB2405417A4494A197C34EFB52F2835D29B482A92B3D4447FE9FE58E8A860 9EA2E0FE017D6B957F782FC38816BBB00C50CA7CD19E86BC2D49DB3B7E7D03A2E5F77C2D 424C86EBDAB6645CA2586B48E6B90DE919DEB22916AD39EEA95AA380307F197A91C37A12 39A144388349904B1842463D7EBC4FB939AA8EF8ACCE5E7897B22BD6A6B81FA9A02A3F44 CA78605023A8613964594ACE8F498A6F5CAA2BFA65AA2AFBD4EEE19E5A675234AFF34E24 6476CF306D2B589D849CE6D75AAF524FF705DD639B9C1702CB98BDD5AB6C21EAE478D715 DB4A91AF69F7EEA7943B9A4ABE4AF5041E1EF109A0CDD1B8D4233FB0E757D9314BABCFA3 EFC802504DE1AC0BD3ABCF102516BA5EE411DB3CF10D99008FF7BC287C4EB60A2EB27EC4 7FE3A88CF615B05FBBD28DA2766EF0E1288536FABE6239F12BDA4AA8EDBB3F7044078EF4 159F9281CBC996F2824E50A6912AF1EB53C90D6DACDBF405556CCF2F1718F6923A17B892 B8A1713A93DE54C239367E394DA95582E7064F9AD71BD11D78D471FF52D079E52943BE58 CED40D6E640EC99E54FEB1C7D6C24C18E057E413CF9E04840C0D6E448A25E559599A122A 0105239458CFCF28436A85420AEFC43ADEFF80D7E074DE202387680268E12DEDD7C2C255 DF1749C83B4574F6488708FE768DC79A04797ACBB5FD442F1CB432FA7B272694DC0CF827 2750832AAAF02912C49193913EAB20D9855DCAAED7CC0AB7BE4C60A5DC0509C535D15A8B 9E08A294F436CE1C5CC11E89C6959D8D4AE7FCB511B478AA02B926D91FBA4154A23DFDFF 2283CADCC05FF9D02E4CE0619CA32D0EF386E7B25A5BA88D7A84C9E6448F17EB4211502E 861AA8E98EEC83ED9F93545A8CC6FE263EDF1CC9FFCFCF757ECC6CE91B2AF4EE8AD8AC69 18858BE9F6905FFB72153625BDF41551BEE3C697DAF0552F9CD1D18FC8521DCB70D4363A 7BA11F65D87B0FA54F5EBFECE566F0F1E57F01019B384339D901B308636D3CF4B2ADDC01 77AA25AA51632EB3403E4DFBBC1AA672F623AFEB898E02C87064177A5E3398C6C49D54F3 DCB1A46CD6FF56BC08B491B089A6CCB16C38A5BB026D31CDD0B788A608B293784E2FFD6D 82D0C3AB27509E9D7069C9C4CC591A2AAC8E36FBFABE703F5FA10BF75403C5D2882C48CD A258AD806740DB0D1FBE036733A1436D91CDAD0059B2BC9B57F8204DDB94AF96E65CD9B3 5A7CE71D658430770A4DD668D0CB19EE47A6A59179073AA848DD7A724A33313F4293B743 5BFA74CF5B9CF75756669CCA690FA8D5B3BCC657B392DB7451E3B53C3682639C9F4B327E 93822AD792D80A992D0B857AF39646F8FE735A0D5310760EBF611516C94598B945487274 B60110BC1989D0A3AAC5B398A1DB9BDFFBA4624EABA620855E48AD6F6BB13CF2A3E17941 4B9A40775F9F8F7F6B8C3376517CA1A93B199C78FCCCC0B0263CC88EF88F78C3BA881760 B651926C337B5A7ABA7A4C201FFED48019373607D5C6FF6D4BED1F4FD7A3D938F0F8662D 278A0750ED39E33E44A3419607FAC26231A0D70BDFC754973C84A5FCC35A8CE5BCA2EDD6 F1027AE3779998A096D99E336F60D5660EA8BAEC08D2EA43874FFC0CA746623CE9305474 E3C97F6E901592C8FECBD9A63B26250FCECC0205F71B5D3C560113BC623EE82D0A24038C 458BEA59083C72CCAAEA90B161436C5D743DDB437FA7619A9A717A4A821F1CBF08720FAC B4F1CD8B81B90F4EF5A36FF79B7EDDA74ADEE7DD2CC79D8041C81DB4DE253549FDC8C640 0362FE235A054543B0C9EF928149A1AA2DD5F6D7B67403211AEA2E4BF7FF6BE9BA60F816 ABEE01073890164049927C53E306E0BF28ED2B10264B68553212C078D3059B7FDE3DD9E9 3AAC6F22310BDB2B3570C85E6C44A46A4CA3DE73AC96CEF56F2C656702528C2874DADD50 7C6CAE6F8160BB169D47EE036650F364B33E1EB42E9B945C75CBCCF8E4493A89E84C1496 009F3CD5CA407E7251B128EBAC2FFF4AF6D5E389E8BC5D4144BAE46A265E9CB7EBE273CF 0FBD037F1A8216FDD240485D727663B4BEBA597E58838375E1B5C46E152F35ECFC17D0D1 FCC87AF92C28CE388EB3625683C753E0E3383E161B42BE2403C1F1F50A64747A3951A17F 47CA08CA3EF4F6562EA34D1948D51EC0B92059EEF9609FA0B5114E0515E47720D1A48969 8F2C0AEF1704C7382420456A13E7BF3B8EC347268E2479F8BBCBAF16E20D5161751ED969 F707932B15F72A25C3628E2EC39659FA91C3D29D373AA55B5E98826410AA053458900DE8 45CECB03A5BF70DA63ECBECDBEC26EFB3325842A21BF073B48E3BDF0A7B1A934EFAAF515 53E6A30B737312885E9FC1D261FD1F8B32DA272747412791C7F15DA64C6F656635E27408 BF3B092D62D450215E122BFF5B5CACA9179909BF50EC13A14F6C4F258DB97E8D83E4B7B9 C56E882F9207B2B33D43E8123D5F88FFCFEB4FDFF41CB24D69EF3A54AA7638DEB4A43928 826FB7730ED418B21666A5757A9B636643A7987E7492C8C00024DD5800A64AD0734FBE5F 57B3446AA93B2CCA4F9C32E2E1395B98B3A88B4233D276B6294B80223514D63263DC9C81 0175ED47A2B2E0637DE42A1BD17D8CBE4FA9BA8EA5B0A8EB328379B42FD818F0AA5CB7D8 82836283D787379F4CCCAA7D2D131719E15AACA39C4C2AA1CDB547DAC68C6948C722CB04 8ED82005B7E67C45216BE1E68A0361074D29047EE1916A113BFA8FB8D2E564DCC7CB4B17 B3B3E07DB171FB430D8476C5E31F37DE1C1A41F853C87B5339B22F16D7EF3488555FE7E4 3DB50454749ECB34EBF31C02D161A617C0943C5342417EAA002F4B73DF6BAC30E0A26B1B B69E416AD6D2D5ADDA1C37E48817D84A1157FA79C22F8267E00CEF41339B72BCE54464AA 269179BD833EDF57FACFEF71DF0B8A04C290439AB2B448A04B80BE3B64147D3BB9FC26F5 789DA861760C7471A9ED2EF72A9682A790CDD6105FE554D23977E3FB1C71AB519E1E835E D41F90FD932EEFE1D03AAFEC9B0915E17CA03560E0CE415E09AB595F1D020ACEB05C7B03 2B95A5E8EE207337BE0690614A28F7B99713916D49ADBD9A9BA912A3A693A6A2471200EA 6B7C152E3AD53BEF67E3FBDA05896689FE73F7FA0A04FB6888940B7A2294218BCF1E239B BAF11D660C27A27B8DFE8046C41D4FF11EBAF4B4D003ED3D7C491D3168B1B4F17DB75507 CBA79478BC178AF691BC86BBCED10918F136A64F0497D0B15CD1E6D162533E175FCEC2CF 591B5E765C64DEB02ADF6DE0D55C89977A9DD9B4C4A90FA4A8935E8E2D1730A469E8E9AC 7B2B8CF13C8B94FC56081CF664EBB35406E7BCAACDE1D6CAB974D24600BB99D93DD1E9C9 DE40D5AC57C25070A80D8DFEEDFC806DC93FD467D6C3F92DCC5F483D0FA9F03DCC226C7F A3288F95FEE20FF503EB939FAA3E1C80C2681CCA1884E2C0AC632F74CA12DB3685B69FE5 23F3A4F6863AB684D55B32D20D6A418E1D96A0728D93A15A67F894F8DE241923869E6468 62C6252A884CE55FC4EF7664D0E1BB481B04F49A00DB9AE94EF52D27C2F2601C171F9179 6426D7EADE3CD75FE7C6004315A7F63BE53962472B431163D15A9C2D6428E6BAF13EB133 E96640A95AF97C6E9978B49813B7C8069F98C97A57D32444C0EEFE0E9ABDFC2EB5AD5721 7B39AEC33F038A161E085ADA6E72C7540FC3E48CD8EEB9839A8456CFC5314D2401189025 065A90130205377ECEB1A67A427C6F1FB92FC731AF3AB9819B943BE06CC35E4B898C2CC5 5F38357712BCB7ECFAC06F5A17D07C7443370DFC43AF6EF43A13151AC99DAF2425664EAC B3DE6FA551C9C98199895C24DE99E3A62B764A08EB3AE2F256EBC005D181E64C739C0E60 7CD274B2B517AC90EC08449673C543C9F1FA81A233E4FF4B95CAA12209A6A5E4387590FE DD1124F112F1322BAE68638C4CEE4036D25231CA1A0BCFB27C2A71FFEB6ADE3483239E1D 3EDE268E628F13FA77DB6CB5672AB35C690F396F02A6660000478600A26D6C994E83A4E6 9510AA1F5B7470E723ADFF75D75AB57823C05B81CBC27C291EDAA1B7E6E55F0BC050BD6E 8CD31BF54238876680B0FB3A6A93AF9EC56DF5862AA82FBA86D85DF9AD77E926505D6FF5 29DF487B3A84C898B09895FB7F921E70BB73B3E296759E9AB4626312075F1E9CEDF58AC2 BCC0360FDE86A0A95DB82F3E404C25C00EDFF2160C87AF7E5216592A26160C9B905538A2 EDE7AD575732CF9315BCB6D23C88112E46AC17E77745F5D5D70E072B4EA2EDD0E6AA3F5C C26F716AA4DFD62DA51ACC6EF10C871E8B8DA93B10D65DB44CB11DB03B0B5A3D14ADA8B7 B56349E20D3D78F4D8DE678F739A9F4AE9F47B93DFC5FD9EEDEF6976455548D21F5AD084 203906207CEB3FD8B2A48734DB503BD73F6917F36A24C998A884B2DD9EB566F66502ABC4 B2D25AAF5B33D96DA866748355062C44C5C420B92F98DA0D8C0D93B815683CA6FA8DA61D 03BEAC0E7D869238ADB1E1D84958AA0C2116071D1CF0E0E009AEB14E8F9E34956F81FC48 B08DA81C456C30675AFC4B51F4C967BE18D5081780FB9FC2DC380025A58F196FC6E53A5B 0448128C43AFECE269FE508D8DAD26F8EBCE82366F754C2F974110FEE30BA405D7E2DF24 1BC56DB01A6E89D6FD2C1CE2C68B807563AF0B83A70F28D08832CB975513FC1F5CC137D5 5B841218E4B70C3D1234684F7428A1B8643021282F1AB0E7AB96ABCE88DDE66EA8DEEE49 189AF8A18F4CE10F5F6DFFA8804A478A4D8BABABA7EB871BEBA07ABA55B3C86B8ED92DFF B55C725E3CAD70AF9DC03A96414348E83C8604D0978DA42F248E7823F574C7688CA9920C 42C9504B0C3F45A86B443EDCDB1E07A87705B4E52BE7140B45533881E816439E5B040943 3C9B0A6F77057B41943ADDE60637EA2F1E7A0460E9F4F6F051D9D73C59C85C567376FD61 3B453E15EAE44CCCB756A9117C30F27695F55C3815316CADD0212C2F42DB15E5C28B36CB 79899D6612BE9F48F653D822DF9BDD408029A6317F616A5C39A6E25FB6FB8190DF53716B AF72B8F9B76B986DF08E35B32959FD2FECEE73075706F6B9BE8472057D3900534B4894BB 92D79D0285BEF8D4218AA3D0F020DFCC6E98B1D244D9BCD4D414F1B14D679E95B6A24A44 6452343B5EE7C06B35D8F73ECAFEED2371F92AE96B1573CB93406B5121278A470F816647 AADC0CC3C2CE6206F630D94ECDC42A3BC43E4C2EA0B22046EF834D61E0FF816DC1253649 3FA91EA1AA3FFA7527A9CE29C419CC08EB4F2435393FD41E3F1AB018A81530C9FA4DD87A 82DCD5E3567391E4990782969C71EE59C284F18329F5FD3813A354519AE6F5449D1D294D 8A6EBE1BBE260B350F898ECC0449506D99B31D3355C93F7A5B0E92C9E9F719EAB91B63E8 8D5CBAAA50AA201FACC1BF9650F2F29EBF8E3498DFCA2048C6509001F9E711137379FD05 6306106DB256F24AB2501C6647BFBC0C112B4872A72B7A4E80F7378DA3DFBEA22E125717 2F4450ABC348C560DA95898F46B91FB9E4A96AC1B7B1701054A182516EF68D5A972C74B1 D27CEE7E45A0EB98FF4D33C7E3A3FDAF2A029DFAB5BDF2F6F70BCC5237FEF536B9070C1F FF6AE64F5D2227B3B9F42CB4D23A399C0C4CF40F1091F672E567BC52DE4DEE191EFA3BAF A6BECBF846DEFDDB892DC20092948EEF70DF9909B81CA0BF6E4E851CF8B3C77ECC3E338A 2D006066469F4D87D16DE009BBD57D5592DA15B26E0EBE094FE6C9D49E36DF5324E56996 72AEC4460166FEDDC8F1F471CD259315AAD0B2974564DA6CAECD35218DD35A513CEFA08B 8F96F5D216BA6814E74683A377F74C26BD7F5EBF9B32F0DA620C4C927BF841797D87A6A6 11BCF82F9B66652651F9CD2CFDB325C8BD72FBE97BB8B063E911925EC9572889D3D1F1F2 12E4CA45AEC8CBEF5841D846178A1CDF63CFFE6F594227B03DB13040DF0A543399F1F118 FC3499D7EBD4BE61114333FE36271838F7C801F7C34DC190FF20378E6F15CDFA03AC3103 0DF3DA787FB22DA8DC7C9F9B602C5FA5A54FCEC2AD2A1860B293271265DD9AB0A95A5050 E2E13D54A2165156925FF9B02D80B8FB6ED1421E3D28A6AA9DBDFFF06FD7D82B920CFA89 48FAD688C2016BE0A369859AF7CD7BE5011EBC4124E19F58767608026C90A05D2A522244 47E2A2DB6365D7C8598EE8F7A9FC5E1D15C494CA5C20381DAFC5DADB4777721532470414 99ACE0231D37A3B2D9E7145A3A30A14060F55E28D07F85943B44A5CD3A2EE1A6452F2FF1 B6F8627E6F60DE5D49DFF4690F320DAFA48FD2BA6C74F7C89F825B0B4593C5FD0C235EC6 9FB267480A61E0C4C002AAED1FF075F57FE9DE769F0696FC00A0D9072D0975AD9BC28570 7D4E8E79EC37BF32CABB4187246F943F6607D4782B84208127BEDC63A61EC3DFB39D85D0 89BE8761F1CA7479447BDC072ADE3865BA7983889B277FCA92481E2143508F2B3626E83C B5268D4DC362EC75AE8EDB7F1837236E9EFE00D53E6924F7EEF6C0E56DC5995BCD679CD2 6B8AC544777BD7861E8E6E805027E1A73BA25E0E59222E1542038353A87F19F44BB73FB4 4B276912C305CCB3FE1D5D759B9BADD8B3676825663558A25E8E9E777FA0FB00E8159EE7 BFD55755B61009C0DCB8D4E4BE89BEF655D13C693020ADBE159BC39CC9DDCFBB3037A068 0B2F543780E43E04CD8B0DEA397540EA1351A80E07AC402BDC7AABC96D87AC52F7D8F02A 5F87EE1C2BA5C0F1BF54435EDF7D5606435C42EBEA38DA0B65E5DC115DDAD9A6526DF963 16B7E975821624DE1FB7CC3C7A290A4FB6FA3DAA8732986407994210314A60DE01C89C4F C51E26D89DC698CC7A2141F824133789E9F433A4852E5D4D97E83CCC1A983F3FEB0E18FA 368C79D1A2D6830AE39C5A96A83A327F2C598BB4E3F7153E8CE49817433ACB74B8B04135 13626761746A9D54F479547CA5A19A98C66C132660B43920F58D4B51B08C9D9090209558 1F1CC6A5E5F7E4AD065166F46A41E312ECB97EA935C02EAFD25C17186E6315FCFC6F904C C65FF4CBD6EE5F67AE1F6BA470BEA965B32F64F27D42A29A220A09F7B04529CB561FF974 9B8CF07D57F52B42581459D523FEFD08C4F0B1B4A91F707CE34C7E3CBD4578B10E80D50D C041ED7B7038C8140190967BD492912ACFAFAA2A8A7E60308AD29A8A9CE73E9688E3E889 837F4776B468303FD6CDE2231DD1E1C421B120C1FA08716390F84D239BDBC5F12D011F93 95D47706A49A964352CB7591122CA962E9A96AD8B63F86C34A7A5A9F9AEF5250D9F9FC72 70F8C67CFC09307C5795A8C14758062D40375F3F936186041F737FCD4A12D679E13FD542 27DA0D6B73FC1D36CD2A3335AB96459D6D3BA0992EF6F514C0CB7AC88C88171A124EDDC1 B57F526C3477F7FDCEFF6AD4D406E571FE0A1ED9791920CF327EE0F04E9ABC6011414255 306809D1CEDAC703D6A8DDD1659B32738E7A8381B9DA566D581A728E4C01243B1EFC7BAD 648DE5556727AEF85566051C72BC20DF4814A6F687453CFA93D8C84C48174F4BBD7A7DFF 8FD0088F4B2DFB6C45935386B797D59F79D397779796D8307256D189D37246A498A0B015 9B14498182C2D8F62891FCADF66019FDD3ED8EEB87A4DC3888D380ADA145A9720376E5A4 CA97C87FDDD57028764213D42E3A77FFE04EFEF3EC3EE6346DDEDB43E7504B06B731EF96 B5B074E3E977DBBFCDE617DC13A83061A08939728A15B6785A9AB509B4EDD2A804087B79 2AABB06800443B74DA5014F1A66AE4573BCA0901E3ADC1C5ECC42C18058720C483B2AA8B D0BF3E18401C0DC6EFE4E3CA9DD68910A2B5ABDBD02DF0341A0167681048FAB7D85FB1BD CBA66C0599E2E87A1D4B9B2066735209B1B9C43360C2B85E0FF50F1B665A81B686CCAE6B DF5A8CBBC23CCEC001B6E901C0FCDAA6AD904B4CB9269DD5D9451983D3A2EDD7F3CC4E4C E07EBF246282FF9F204792CB5186FC023AB663B9F1E6A73DDA2176E90DA9A4D6575B31DA DC0047E38606B62FF9757633AA4B18BA549F2FD60077A6D73D20F430CE01EB0D013F78F4 9E095961522626B05EA960CAB6BA28440AB1BEA6B7F26E8896EF2A70BA6CA4104D11BD22 6864D8239A352B60117C49AB22E92E5EDB13F88483CB41422C5D7FDBAE11B4D349316142 427F2F9D8E885CF920CE082200B461858E313EB5F13E33E4EFC1130DEE083E9F71C9B7CB 5C6B9335CC455371FE7D402F8A2904B74E0CD7250BCE7D0598FF780F3ECD6E9CBAEA06D0 6BAD608FDDA3C79E1529502E4FA9E8E44B18382A97B7A535C8795AE83D7291599FD6E356 53649FFBBBC3D5EFDFCA1F261AB3C2826E06AFC79A8C633C6837A94A78799465FB4213D7 553F553F0AB09C897D6E653BC9888FD662E22728AAE61F1ACC5132DFFF99F4F08D45519F 1BE23F1119638FE87D8CA8DFFD5290FFA0B3C70193749E0001040244A45FBE9BB29C713C 7EC35244CF7F8A1433A26642192C0785B4080BBAFD654F135C2918D2317644C2E2037ED1 389E7BAEAD4740A01AB0CE0A7CC96B71C65A1AA5454FAA589CF87D149C9CA722E24D2E48 B114BFAF877C4BD049099007B1D113502C5705E25764F39E518A50F77E3714F4C04A9D43 1209398073D028B9AFBAAFD1BF93BB019C929065DACF148504C9C172A8C54D42D0FD7AB0 44E60482FED6C72CED76DCA9204B57D5820BB86F94679586DDC64240AB450E3B9D6B08E2 D1F87989651E319A36D06CA80EE218CF17733226CCD4C9DC4267EEA9770CA3DEFD8025C2 3F37CAE401081E7E45130B6099C5DB42A508CD45A3C3BB9160C34256E9DF1AD3648EBD74 B3F8EA1EC7D633CD9892C0A842F9944FA2775F6147CDE1F0779D7556C42DBEC9FA318FA2 E8E4996F7A2C240A5B149BEAE96354BE27C33E8FEA3A1F8AA506A6B1B7702FF52ADF0B62 A01702090E5AF80DC77C77EEF25B33E97CAEE80E9A9A150F612F4675BED171F502310663 8BB37EF009D93E6FDC868C2FFEBC89124C800846754F919D8E9FF7DF28BCC4C575B25A36 3CD4682FC476603DD945E8A4E259E0825998DF4731E57355525B6BB667747923E3AC40AA B62C980C4A2FD3D9B9741540D875E8DC9873BE10829B2992863E2AF2E5AA604D0D80AE87 95AD06B9A17B0CAB23D947A72F2EB505A1D92BC1AD36BA5C47FBF622CE97114F9E847724 AB1D6EDCB0AE6A8AF0673882E942AF45D966AE631B01A1AE18164747757B2DF0759B90C2 072C7EE708FD1A0268681369ACD21833E7CB35057CEE06383238316A75E52E030F725548 CB68779C959B30396E0052F46F582E093AE9780D8895ACCB2A6C67ABE1C60AC49A68475C E2410E9F55D826076DEC18E9B98011F38ADD6536057F83352B8860F137EB2D541F3BA41E C6331EF5DBF812FC33747593720BA0B08A681609F107D01F84AFF34D8B443AEDBF948F71 BA6A1F6C25AD5CF03EB34DB5B85A548239ACBA83116F1785E228BF6389D8AE95EEA55F2B DD5A5F64F1B0B4C1C54AB5C206998CFAA41C2453D12673E4126B46CCD29ADA2D92123351 76A73617E6F29FD9A69D108A0CB15D6CC178FE07CD299C5EC266F98B6C3937DD9CA41C19 FF0CD33AD3E2918B9BBE58CFF259EA17DA0BD20040B7E26B09231F24BCF4A6757BBFAB9E C625E429AF5C0AD2C0FC6589AE4B26F5129BF48EDACAE7A2F2DA62CA6C9E604F4F09CEDD 52197B234B93EF70E1F3B672EA5476D6F8A1824F4282F8A1B69ED693E42A13C741EB6378 228A667598AD78B5488DAFD29FEC9C8F7B34375336B4CF567BA2D952F987B00544CED365 FFA51C1CCF0A7DE889571FB9C461A5A3E662C731BAEC77F8D7F207D0C55942F818DF308A 03C8C3E3EE9238F2E64698BA939A85A1A1679EEEB110ED6DF2EA06A778FB25D5598FBB94 BEC940B5347AF2737173ECB54140E58C17B540C7226E27D3C0C704985EECB20D07A90644 86ACD3751A4C0E65B9DD2533E37446EB020C3BC564FC2A7A83CBEE737C8AC2DC7B103DFD 8BD92383526AAE6FB4B072187180386F85C94F3F84F9AFE19ECF4418C8E89BAB856DB4CA BFB8FA6F7A9FB8229A146175246F275955D14402878EC7C0AEEC4DFAF398C8A300882DB9 3507C474E3A6E0386D060F0A0EC4F5FEF3317336313CFE39C4EB03C1DE2BB2B15ABB32D6 373BB52D40879A9E7B34C3E380E8922A5BAE712E2B9CC218EA278363C558684F4E8855FE 10D61857511C7149CDAD9F862C7A1404C2E7061ABB948DAB18CC90F87A0616C7FB297E7A D759EC937003E748C9BDA6F0490F62C8DE55E682F0EBD9BCBDFA15C7F4AD7FA2C4C14ADD 281A81404A3962B1FAB81C34DA31F545AC641E59083B1656A2C9D883A34DA3CB1BDAE2C9 B7030BD4ED64F827E9F87115370C6DE6BF5EC102B5B7FED43929FE4749A8E834BEC76DEF 182ECA62A8DABBE8C97F6497E9396F8D7510EDFD4A8E6D48FC7EA375843BCA20AFB259B1 76287C8CD19464D89F4B8027006013909EB2309538D59DA34AB80252CBA1EA13B93AB79B FAB5967D66F4D1048AF5730BA4B9AD9B215588546392139093DC715B8052AE3DFB5623F4 DA5DF10CB9BDB1BF283C49E15205D67FC31D271A0BEB02EC11F721940D8E4B64DFE8AE72 74FBE82E936E1F31A9E8DB8E936F4C405DCA18EC907C3E74957D94A11B7D08A726051DAD CD47547B2BF087C1252DF7B5232256133A786E346346F99392DCBEA2710D515930B5A35D EC269976DC787C3A92A12E95347A02851C0BAE2AE6299533317EEDABA7F4A1695A00718A EF32E1DAFEEF4643C90A12E801C738706219A5C85AD23F8044A22E157F41908DCF51F0F7 24B1B86929250FD7E1330B633F9FF61E7EC2CC027D30D2D29CBE0A02B0918C66F2A4AF2B E094302A905ACF5FB746592CE840B7B0E2190C86CF292AFEFCEEA4F7AE56C11D68D79A12 66DCAA7036247E9009E38663E14977FC1C9FE3B52FB59648B1DB62AF785DECD1BFECB41C 22460EAE8EA4E67D28BFE07D789EFC0C2C287496A913D0FDDC98E32FE61242CA976945AD A7FF60FE40BB0C1CBDD048C56E03A7593334265A961743A62EE9DC09776A25C22B80CAB5 8B027793F05E3706E634DD2B8E6602330BB5F41843DA986ACAF3EC9953464C068B4EB516 92AC4BB838D1BFBA6C6F236540620158DBB7840F704CCE5A7A10EEAB8E5E4994CC87AA7C DC690BCA0CA2DC44618D2326262DE11CF0FBBA7E4052B92286651E6873CF03D3E83AE2A8 B8B8A5D359EBE3EF1681CDA8DA7629D2546978C282C833F2A605279FADCF446D3694EFEA D10754ECC9A3D35F89BB8819B41454F90093CC62480C4FE087312CCD2BA06DC83B4E89E2 70A07CFF86A355990C5DFFE77627E930798D1D3FA32AE21619649A5F149F4E4E867293AE BD76919CE514091ED98AD6DC02240C54625D42C341BAF00327EB9E23A49FDD96CE4DF144 B735533B46CCF3DF92DA9274F69F4C82F653DFA15EBC04C4F40965464F190EE7F765520E 263F41B631670D9327C2F6FC9CF8FE3495D464DEB693179BF29B0EBDD463829D2DBFA2D7 77EC1C127015F904224979F27A91C8DDC86F23FC7EEB5960DDF9B7C17F7414B0AC217608 BA023A012EF65DE2BCC2542588CEC5D7C8C8FD0D01F35A9A3BBF263298172C753C0D2F80 73C195BC3F82CE610BD45F4ED18262CF9A5A67C9EE30057ED359569B530C6FB81815AE38 6456AA73BDDF9CF53342C2EC4904A47B8F94C272456B6F764B526129A5007367E8B1F5F9 3BFB26DED9F825D83641BC11D3A4AC1A4F8A9F38503B1898129E5235EC81008158C24E5E 10BACC25CB3F400C86CCE71F89E907F76DB87E428912577A1A422396E599C98582879B03 B3B7A67E8290990439F9030EC694D9822EF6F0FC107BC77C1BDBF0C2916CC9395F48F7E6 A9DCEFAC0176F1C626093948FBB3160AF0FDBD57E0652E1C9224CA77418C75951A4D78AC CE65FEA474AAD84B650D36009707FF3D78590B996048A6A88E8DF0B9157FDB03FFC42676 472E15BB9C776185835EBD153BA87225A6EE86F087E9656AE4CF8E0CB97037B1AAD2D1CE E4214AD3C03066357E989BD43D94510F6B69E2AB97882724899B48D96199EBECA35AA12F DE1509F619C2F69808F305BDC23C7AA962E578D7EE88DC68794C517C7A4D914D692C5BA7 9D7AA36B9C682B6A251C364F70072D721040E89BF1975869B401D5EA41DCB561D844466B A9A0C8FEAC7D631E85EE69AEA8D9FB07CBEDE721889C4A25F3609FBFF7EEB5AA4A0F98BD D1425152DBF2BCD3F470AB62BE62E2193607C4CA42EFB788FEDA3A1C551A0CAB2F615384 DC18984CC92C2B0D7B5E27E607703E964041AAF8F8BB3BB28849E5B6DF9959E97F831334 EAB6BB1CABFC70C98F8CFF1211FB6CFF5BF8CF30DB6CB3C822D788212F7FB705259B53DF D0BF6CDE69884C6DDE9F3379F51629E34F1B89AAA0F0EBC76A448D7FE9B22CE706F40991 908CC6B4D3BD79EA0E0565CD67F0725A5D1D40C757865D493078DB60E9F23D6A34428212 D2089FCFB4765DF3A776AC39182297534B55953340293DC5738C4E0CAA46F4C57EAE1117 97207E100B482D53EE36769C9BADECF179E456350A40CA51B4468D69484E542DBCBA9F4F 13E83C98F4FA3AC042F247DDD190B040D01A8B4FC4AC00101417532214ACF6C87FFCA790 5FBFB2E744364F91F4067993FCC24729B207252844A84286D8C305F9164A9DDA69D9B6ED 0C6384FB51C6F185B1BC920545EFEB1044A659829B9878607503D47280018A39FEDFD7BA 004735B6BA650E44D52BDBF6A52C4A97B3E9B0EADF2A846999D114ECEA8B79A7133F8661 248A39C5899B661CC537A31BED23BFE325202596731CA62BB6F1160B418554773D2A8073 AD525F552A7E2F6E90E21FB9529F332B1CC6E1EA1479818212C8460CF36A9074052B3CF9 0AF5F895B86FADE3B2DB14C3673A4527C5DEDE88F7455C14CCCB92D42AFED1839AD59F9A 8F4E27C00D272173B4C1EF6B03D86456FD2809D54D46948346B1CB57D66C0E999FB1447B FE95AD953C57B27EE0B6324D16F69F801FC06D116C9F531DF100B7BDBFE2F3568A04704F DE14CB27508275EAE2A8C0DD7272265EE82DFE552EF95E8F5C751A09324D60F0778F2D46 53E827143A7D84AAAFC09D9B63DC773C75CEEEED94F711EE8C58E226376A0BE0F9C40232 A2A6EB0926813076D9C1EEA28EE5CCE6FC8DF422049B0BF9EF23C3449ED773059B2F9495 1B75F805E42DFD4DAD0946ACBA34CF6463238377399A48C53ECFABE7B5612B71C059A037 C2069C3130CF2276A22AA380E9305FFE9C27AC10FD9B36B8452345F70CD009C1EBE3CE58 47390066B7E07B8B5F1C24269BECED1198918BD7383F95AA671DA70556044D0E43458612 E63A46A86F5F994737A81D0165B3AE3A96A2EFF9C3BB622B5804915FF4CFA1834102F39D 275A675E25782080A8019B8647EDC72947FD2D8BBFE33EF618A78F2FCE52F1D43C8E551B E56F62E48F5416F51CCFC1CDB2D0F7FE237020F7850595EAB3A8B3FB1159241C08F7E8B0 5EA83F52ADE5446B316DC51997E8E5882855336599DF52B005EBCD76DABCF8313FE7301C D0DB7BE7DF393502A32D6FF99CEA4A71C58CE01A57F23759F0BCCB4186A30D7115351A5E 660EEFE4FF80BA898272BD37E619742C9BC6200D3A34B15E1EAD0B36F682674ABBF27437 F9326D596B9036773FCE7556C571B873FF02550806757074DED64610240A565F45063346 1DB63C4C19CA9BE9FD8BDA06F6319B7B99A425312F495D3C26C5D79E904D319078E5CCFA 5A74336FC3C83B5C24E58D1F203F3808B19249D63CDA93C235EC6B2AE598D5092B65D7BB 138EFD45615C36A89A2C64AE7C081335971CB80011F3E99C01B3F72B1B24FC05EB9A76CB 02255FD15460AE29E87340D124D2A9BCB516CCFCC52310D2D612843BD5164A6D8E2272B3 345435C0BB4A1B5FB4ECB24D47AB244CC37DD63EE97B55FE62E9EAA9F49E85F759B1D391 13E50B5A31ACD5106D0B5BF132454BE6B1106B91DD10DCCDE56FA2477B572717F580706C F1272D398BE3D0C05C6D91D36B776A6EC4B7E076F24D354382A17C7159CAC72B6C2E1C3A 4D33E3BF11F128D18D4C68C98B34B4863CED334049A75FC1930D1E762D9FE45F249D0E1D EB23865B8225AD42E3EF63082B3A249393DD2E86A2215D918F39368C251DDC5E028FC423 E7C867891A06ED6561369A3E9421D068B1D670044AD0AA97DB765BEDE6823BC97FAB91E5 45C7759B7F4B2FB26B93F454DEBCE0153C4ECDF2D8DDAF015D7F743127B12DE908DF679B 52318A42727BD0A2610ECF2227E6417A972964CA78DEF1BE1313052DA5977574DCFF8370 E91582F5EEBB00C5294C3866C4BCF418F6F5990A0456B2C7422443E3EEF9E7BC3323C98A 0E4A92240A4EE8A5EC59A8F6CEAF1CCB0F649E8331E1273A74291A98CBA6DC62DF121F55 13E0C5351564288085F594FA5A5935CB3687E99A604BF2D452EDC88585621F41647ABB43 AE5BE92853E3FD831093B7F2F0BCCD514FE3175F11BC53885FDB0F3C86707C2FB3F359B5 7945B86E18E5860D0802941D8846B818B70367CED4AD8A30AF7D7A67A81EE8CA579152FD E0CD532611245A8E1B5F71953D0FACA286468745D71E943C8F1BCB1E1D906B9576B31601 FF4FC28EA3895DB837DDE598C97E48E8FD10AAB27BEEF5FEB0F9EE40179FBF1D3599F8B4 702F2A9666F3CD5EB300B6F1D1E075A2F5C42A7C607A9903D4E42194A490C4674826A070 AA048D3B3A8F2DEFC469B0FA5CDF3C20B7EF8C0F8ADCFBDFD468A568C417F924346ECA64 6A16C84E4644CE64DF381A9E77951B19DEF22616F1D472FA636D5CBE7531F2996BBFE84A 3E1CB1DB5F9771F4AF9400A261857E3EAF67C4C86DD37DCB7AD2DCF4CBBE9835174DED5A 3BB33D879D903C2B0EB5FF3C3029A073DAF0B81D18DA7FA5197F45CE0C07F7063E67F6EE D1BC768EC627962002581C599C90F184A96E1AD3CBC26EBE82FA5D4197E6A75696947229 9842D3D1E40A2191C14CBB44D6273E28C63E8E07BF049200DEB6D529DA168A9B06FB1E77 4B1ED6B32EAB0B70300B132BD4CDCC4A9B1CD46313857E144413EE1EC4EF62D9ECE73DAE 6BBFA844DA6EF8B95780B5637CA417348CC01B4725AD91E7AA0197A7416742DECD10C261 790D0ABAC32006B49CAF2A55D238F2C0DFEABB0049D0D321339DAA415047B8511AF00FE4 37931014F2DE41B54EBCE25E229F12A8E2CA9533C04011A6066A2963A9F85F90C66BF1F7 2DE0AAD1C81015D27E7E7233553C5B8B42C318F69A44FE40516E60B7F79FC38A3AEA8BFF 5B633E0E34DE522D9234D514FFBCA56C1B1B2E26D2AA7797B1594F97175FD213575F8C7A FE923097D5CF14AD5B71791CEDA79CD3B91F11931E2E19E4B2236DB8E2D9DCFD9B042104 9815DD7E650D7F62CA93D9799C0DE63A2AAD590A2C50875F861BE16F5835E002F88B7706 A112D96AA2F19BB2DE46DB3D15D7F4633F9CC0F8553885240FBA595DE3B1798C47AEE734 2169A6D87505B079AB3365ECBB7CA7663D56B2644F187D464D362415EBDB25DC5935EEDE 57A0191689187BFA86378C708344BDD177E6DE829A1CB8E8B1C618699E11A0A0EC7E1BFC F6268BFD084F44360F2D7B40FF0EF43D2913AC2A3CE9B646F559811BC2D48D79A845C795 CA6FF24522986E2B0CFE4A26D6A076FDE984EDC60DD73CDBCD9E506FC1544B2FE23ED159 11A032649FD208104D0A97E863BA4E4CE39872A8066C33BB15C5FA98346670E1A1DAB994 867722597CFE32FF6E782EFBCBEEF537E38B74CE84F1FBF6AB70F80D83B2C724515BCA04 E6FAA07C7E6081767F3387D0262F6CA32ED87B292AD3C6A169D28E75B0DC31474DEC6A7B BBA25164AD0B502A17C3F966BF63B04D24D9287E95DC727B66CE3CE9227D2F90990E22F0 88BDC5DB04B7251DD7F43A5419D8811A1B9AF84BFAB5EAA7F0F8EB94446B1F972E762BB6 7ADF18E5B3F948826B79D3FD02CC0590F00A332A113CE34F537F6C562E25958128E2A99E FF145E634C7139F88A2B6988F45FE7F51880BAE393E2965080B5FF4A0F673B19F38E0958 2E6751A631681462537AD3B4F228151308208D8A7D137106A433CA4039603B49FC15CD54 946B604004B4EA84605EB247BFC9A8F9ED03BD157D870170F0A55B5D4B24F58666C756F6 695976D57C848D10B3EEB46A95BE6DD1EA0037700608598783FE666DB392DF6C74C63DE3 F913340A05E5086BFFF4159E61170BCCC321621F96345E04B66C28A6F9F28865965797B2 81EB0CB60CDDFF5AC8D4BC2DC3B5D3211C1066F98CCD67889684F770AF4C2E6CBCD45616 B639A852A5C4F9AC83EC904CD82CC179CDA04DFB72E717EAFC619C54D45E31CA91A0DBED 0BF0FAD28F8DDA2F6A71C289C9D864D4C7089DA757870B753C36BCDE862EBF07CD9C6BD9 C66C7E3EBCECC4C5B928525C5DB99A9B4900B436A35D7ACF90867EB8CB433B98AA22EB2E D491219F247B5AEAAAE9B40F9BCEBB3759B49F58FE91E914EF34C32839188C01593233E4 62B9EDC712643C5D2BCCA436FF2CBCA453A5DCA2001727ACB617E592618F6E928D1303F5 2ED31E9717C89216C0C460D7F6A561F9A13A1077FA639C07A3A1E9B3D67CFF801A19DBEC 4CC750CA11099EFCBAD17BB06DA26B364A8ED424BE9CD27D9390471236962D9E2DCFCE5F 04E8D569280917141DD8C14FC4549EF2C7F23CA76689D06AAF70403491AB92D37A7C43B4 6415A3C992A5D94241971A887F76FB9B3CDB5F5F6A15F2CA6C206886665A1CEA0796E46F 7AF672EDF2851D8EB0D9EBD0FB9EE2F0A2C54635EE53A96D2B2639DF6D268B4C3DA0F5DF 39EB21887DF452FFB18D46FCC6D6AA8BA4E30CE56959F7F3A1216EA14DDE6EF19C33730E 985FCE879145C2E919E65C109B9E2B17326D29457E56A6B731244F1C5172E654BE49C719 6A7C3F2E9D130D47DB490F7C0E75EA7395B16933ECAD924C3912B95DCBCB3D9484EF9322 A1BE71ED99A52917B2444BD725FEFC16055D70337011D6CBEFE4E31D7A19868F554BC8EF DEDE9EE7B2D5F29084B53FB20CD534D3485B5FF7B55D37703025C83BD410AF0EB6E86C4E BF81A9D7E0F1FF89F114AB3B840B4D08C964DC79771E2A6B12878869B30CD5CD4D345BE4 7E9AE4CB24B808A5A9C5B17FCBD6661C9C4D7B0C0AC2E115CAE88A74CA0B067C7FC9745C 0E06E768208B683E8BA19038E26E46A1B2AF39930752280F1099D2EF3AE0DC66D6D80B51 A862B2B0408D14BA3C4729F52C1EA60D848A9816C9545115C2BF46D48B0F5A09B0672ABC C8B3A0A967EBDA5D184138BFFA29970C33872CAB830B490978F86C7EA04D0F909CD16918 7E618FEE56AAD6C37C7BD11B5F81F6AA4C2D7802A5BF9E36D9CC75FADACE842614C1BB1B 34C8496AA2644673E5765968EBE92C4F44404D086D5869C18576ACDB1FDEF1CDE176162A 5CCE4F1663B2C6494E5EE47405066E37F2CBD839F1EE4E4D117AA4A488A55FDAA6F41911 494D1C316FB9D732A164B24A13074B5387F75619D9673EE99774FF1E5C55A9915B1308FA 9BEE993270E85F71E96BE3DAD52F49612393A83B1B67CD3CF503F6BA7FF7023A56A2C9E5 E01A8E1D8BFC03134043FC012F4B989511E39A6EB93FAEE5E4A72E4DF5F9D8BE595D4888 448D7B80E5E83C1AED9F486CB1DD40E53B4CF41CADC2A676223EAA14F3AA046AEEECF4AD 1674F659C90D608C214350BE4371FB9C54F1D26349648AB74FCC3F7693BE60E1D88CF68E 97BB705269BDA721AC927C18395FF13E798C14AB66524307BA580995F89462BA650574DA 9C3AB69F7758D15A42A252AF1938F6C7A8B2F81378E3F02A8362B85562EFB35FFE60EEB7 0BEF6994FBEE5C24F3B19912C9C153C35FD94E7E64F8CBE65E0570A01652FCC5881132A2 F0FA5AEE7C9E655092E7BF7857D79D50972DCEE55E5969A87051E10B40EE25E7E530B2C6 F45D4A19AA23DC3445FF7E9CE65988FAFBA3C9E3161D0497B369163704BB96D960237C00 03C55F92EFDE0A7A4F67DE90F8E1B34E2775E7BD16211D55CF8A439608C5A960D6E69685 05F0AD7CEEBEE6C5DC87C76277D0AD3B3762E450DC3078F60FB50A9824695D0E32EA7DA4 E522F98331751084CA21CD3246228BA2BE595E029F7BDC7671E45D58315AC5C3BB616B35 E6DDBD848B872B6AE1CB8800F156278CDE827D6C4D797B6C823618AEE1E22199FCAED379 DAE56785C078DA66DB39DF3086C28EE16B67EC68168F11AEE5AA914C19221700E38322E5 6D5637AA754B922813FFD511FEB3468E82BB108E219C6D5C14D0CE387C6123051968F2EC A224E5F3A231585FD74CF3E5E0CFDB88926D30090FB06F64A61541137844A84C756A25B5 4F6CDAC0DAFDCB20579A7CE664A0A532E6408993699566402BEA509ED457E4B415EFC21A 009FB643C821CDFE11F36E3078B52050F25691B5FC37BD658E52D20542FCAF253FF86159 965D95B8DAB4EF6E454F8FF6ED1666F3F7B94ADB7B8DF0EC7150C1D957EF0BF81B0DA7D6 F3A5C2BA636E9C5EBF310BF1A55AC7289EE82C4694B3545DF68845155F61927EB10BABB6 4F0A08FEE251752C508F97ACB41EDE4368D3014563663BC4A7922807E087719E3D8D718E 69AD0B5E05F20501BF481A0628D5E1B5207420410C7FBB8F16C64951BBAD981C93AB476F 84F69B484960E0CDA0E632ED96A3D4710CB64978D2617832DD277F85D50C8CB01E5283A8 887B32FC372FA310495F53544FE0C37C8CF44EB127AB637F10F38A9E48603056265C02B2 14F8C88491BA30A69AEE6B0DFE4970FA2B7ADE7E287B95C27B1F0C2739950930E7C19463 1C6F9662660CC7ADFD207D2ECACF2B3A7E9FC8E9FD2A1AAFF20C571412AAC8068BFF52DD B26A5BFF86F8CDA166A43DD07FBEF4CE6E3A576A297C0199E389571799CEE9725F49F067 73AB7A51B3DA0A1A9366E02136ED3971E5C44C5998A957CEA525ACC6D3F24545390748E3 28347257F5D1A02A31AEB36B12ABBBCCD4ED6D901C1794A78EEA8DD32263FCDF175FFC90 90E0660899F49E03A26F79B50372926B58915F87079F50792C500F96AE0B58F6D0FD2922 1DD2FD6AEEF103EC451DC8130B0FDC192624F7483CC52E57EC92C0D5038B2963E5345D5C 73466C60D27D7716392F56542A67CF873B4E72EDEDAE73706A40F0DD46CC059AA952B6AD C7AAD577E6A1818A4D882A98CDBFADCB6677DB7EB9C3DB74A640D22B1065A735C82654FA 4C3C1C2D463F96A6004F884BDDEB709DECE4CA35C0513A4A4E510CBDDAD57FB30534DBA4 61334CA8D8CDB26D1EF6844C9334FF32520C2AD6D1D0D168C068315A06BE742BA310AF94 1A8CBDD03224ABF28017814C0E936EDAB4F8ED9EEF4320C3426A4E3ECD30AF9DA6EFB553 2515E72E69AD60C29E6EBD2D1F814EF2D208C071A65B8819995CBC0EF73396AAE210F374 0C5331171C5E06D3D622DBA165D9BF243E6CF3C9CFD7798F1BC86726245E5B551EE0D5E7 34965A04A28183C91A9324A5615080BEBFF46B78B82E9FBB6162076F6660F57563337161 D1A2FB0925581441E5075152F1609DF475FEB0B689967E66441EC70FB375E3E89B054623 889ECF32985578EFA5C17E216ADF50B7DC9AC02E5E7601BA136078217AA1908CCCCFBA1D CFD86C4240D38FB022CEB53A8DAD6141D5DEB0D7BFDE34F877F83007252CB52E70D1CD04 D607D200F5D1ED773A4427544A9666F1283DC27FA4C77BC48C229B88EED3B25D7B349236 450B8308A4F7606895739769C0898F31F747E4740B05EC72FD4BE4B0304F0CAA133FB6DB 5293EDB58A5EFD84290A3A2B6A72A25FEB164183AA7B1BC79059F788FD5C35734C57C0D7 599B502F52DED061686CBF31A3A4A62806413C39A78FA010797DE5EE85CA03B21C090C80 319FBAA6035DCB6889E49A0CCE2C63614981DD76277EDDE051E2686FF58373DFFF8A4CE8 B742BB9767356B10D519FA920DD2456567949BB989E66EFE5550B47768A9FA566B6B59F6 E80DEEDA4B8DF657D271138445C21269DC1633920D962979C13A70C0ADA1F7444BD69840 E984C33F24D0D01C55BC0E25297CF96C930F4057FDB02CC6E894CD69EFC9B5F44C743C72 54D31CCB543BF81D153E6C3556CFF962CC2728A46ACC53A1CA755E3C28A5213F15571B8D 42B7CC19D7063EE5E2D43CD2D4F6C833E20D9C01EAA4F53DBEA6524D07CF406AB9027EA6 AE575CBCC018DB420D83985DC507878DC4D2B61BD10C7C3172C7A35FC033A019EDC2AA1A E66C756356C8528D19AAE2EE773900B42D7486A72E72CB23E011C6E96BC7F7D75A96A418 D13ECF6FEFFCC14F9AA7AADEF28892DF5DDF5276BE28DEFDD2395AB4CC26C227B12D0243 79DC958046C15BDCAA67C671CE37943069CA70047AFDCC4580A6FE4548D546FC9498576D 282BF9A10AD6AA487F014CE91C54285D609E67C687132293995829FA595C882652362C39 A2EEA43CA627B13A92AFF42F4A6EE6B83F3DA8BD248F5CEBB1548809B95E308EF45E1CBD E48ACAC89D2FB82A4F87F3A59B1AFDD11AF5CD92346A0586D4A38E227B890CD06E08BAC7 212B164C6F05F39BC858D3E69697D1E0D6832E5B226638514919F25FD6AB60F9F3925B8B 44821C731CE01D5651709F460E7F58F6A0D86501E7251DB244DD804A28F6F4600D7F180C FB86D4B3E6E475B60A8C6D56A0DB64D66EF23AF545061E53450866486F0E235FBDDC8575 DB27DD1FDF56C7D8512C5ED5E862B5CDCEBDA6D2D3A68A03C1DB638BD4ED924F9A3287F1 3F1F98B7763B121B1C4592F49477E75DD31D15FD34714AC43995F5A9CC546AE6E96A277E D4E17075860308851B7573158D83BB84B16DD61959602A6C155949287205487BF55B43F6 1D03891E7B5F5455A9DE7DD009E0DBD4849FC97BCA4224147B4BDFACA750D9A2AB32BC5D 23C731458664E3F35CBA327A3A3F136A2460F9F1B4176E66B0513B6526B61F67429DC488 AEB526D9C8194AD2F8D307296339C447790E54AEB8B45BC0F0B7FC02BAAE6C479C7C0E0D C48A00C61E5BA3294F7CBB5EDD7F1C7106A3749E04FCFFCEC385525F1B9661DF56A1D66D C39CC2B340E6E8EF886213A416AED7440553BA423AEDF1D8CD6579DDB3CDED100127B777 931D7FC44DD888D5F187827EAEEC717B9C6BF6059373B3946A8B9955C4FEEDCB91FC3E52 6B5D1C3C3C0661C06827825DFD6CA1AA6000C077C4D1FBD08FEA18E6D29465DD5A7C6672 C762797A145EF5EDF39DCEE58FD5F64B378645628A022D369EF79489FF3FBBD173C039F6 99273423CB78B4F0968F086840EF3F10F1F5B50D79108DB208BB065D6D9D51050471011A 29ED2A48B71D5DDD51A4AD82E5391B4FC16F60D17973AC95C07952187138B05ADBC1A83C F79377F794DADB297D72809B83F4C55122E26B27C069314BE18B70BD626D36E29E68BBF5 A4551E9860BF231E06A54441670D9E2546E0E0CC222205C14B42CADCFD2DB7BA49046754 E9216A73FD6DA354960E1AC4B37644D179F2CCEE5126BD4CE62A129FF88C1FF27CD84A97 C6E5A761338E320282576F86897771DC0703CC2F0772B7579E55E2BE170FA14F9D46BB25 3A875327C13EB81B74464FA6B6AFC7A4E687A4C8A24097583422FD86E4354EB6537C997B C300F986D1E1DD3B2A2DB9F5FC8FB976E1085C4C1DD4B7BC323E725B36ABE50AF8A8DC4C DA1A6C266277120C0A34B9E57D693AC6A9816AB5F23348825B842A0F1E3E731B1A57B087 CEA4768FD801840D3051817E92A01E2930956C44CCBD9435965450B21549711AB0EE21B3 E624D63702CC1D2D8A9A953585143204D35083F99BED74A4E7E040057F011515C41E0885 6B68D6363D28EBDB5B1F85DA651E2E35A4316B100848F9B966B13AEEB6D532E3C6441BB7 6276648BF82DB6771FEDE810FAA098B1C60D7805470CEF3362BC95A76D3FFA26F89375A4 FC25B6E6E26115D34F4BD2CBE34A6352C5472C52C0615320D6BB00D73464AF6CE4415FC3 CDD6DD68327F1AF381A57A123BE0B3DF10C7AF43E0CFAF9CF959DD19CC04C815DB60D2D3 55E85D1C62E78294E5E731734E1C4B8070F196DD2C3848F2E2B1C43D04BE82D14216A3AC 6AEAF6D3A16ADD6EA8510DAB66965C8BCC861BFE8346D320E144B4DC0A013F414CF7307C 149E5D78FC114C96511D724A00C564CDD36148E43974DF7C4B626BAA891C9AC25B96B4C2 E1826AE6622F09E20902FD32C433904124583E0A1A9B2CA3C1DAED9D746452C08EFE26CD 3502B574DF140285608EB5025D732ECFBE1F51BC3CE91E9BDF8255DFECD696DB3A5202BE 0B8A1B44914990DF4D48F9A2E185FDFC981112AD33A40D2D9D95F7D684EB640FF9475FA4 FB63EAD39ABDC96B5F10DCE0DDC52556551BCEED1F1111BAD88EC7774301B42F4FB3BDF4 FC7EB895090A84D32BFEC4CB347FD7FA4434BE0A32B906DE4F8178C334195EB09A9F0FF2 A937201D7E70A6E8B3344292FCCE33FF2FBE4105DC53432C5E1F75ED2B2F663A9E82EF6C 6046A95FF311AC4F5B9312EAEE59BB44531E9FE982D4EA2853C93370751C16D2ABE1B0AE 751961FBF4E311448E8719CF9A83EA07067A9583D6CB1E6F46C39871AC57E45D8D31363A 1792831F09D7366F0710E2718331B2FAD210092BBD76AE1D8CAD26603E731E0579F507D7 410180C3AC0B8460CD03DD86BB684C7289B9445206626B7EED957CB697D255570ECD4225 23D312762B85429BD8F1B61D192529BF7964F5E69ABABC140D33759A67FC5629AA92E48B 32CE197F62B167254A5AA65A0EFE266853DCB6A9E1DC4D3B78F881FB93684FBAA4D6DED0 9A7F61C1F6A7FC4ABCC179AB77E5F05373C38EBD099ABDEE1F39F63DC47C2957558A8E89 C4067627675F5BA678753933BFA76F0D4FA8A99A16D4C70A3318C044731B1258CE5C7C0A A0D3F18A6C75724209AA851C19FE756B21C28B5C34FE56383432C60E201C591352A2E00E 58CCCEF4606FDB40F5857DBA2BF19747B5D6C4E854BC529C3BCB25908D54BCCCA5C5B1CE 2D12B6451A5F4DB46F261F278D1E06919D515FEB186738AE1F44EE80BC3CAC7012891EAD 573961BE873C3D31D9FB780F300BFDCC1788E7532BD13A6D4444C8E402D2F9AC01C192CE D06A76C22C5D6E22AAB354177500D9F1A76F491494CD8351774C35E0FFC13C3D260DF18D 6965BA09D48E4EDB203F546887B6F9BE43D6896C0590F0083FC6AA0C3D4A6AA5712A4977 57FE575BF870092D03586B94BD12ABF0545B4E3663C30E395D119724CE0DA0A8E5806B80 043C209FB5FFA942BA3C0CB6910A8D01BF3DF05A8DBA738F9F22C265AB1BA9A81E909FC1 BC066DECA14EF9772663555458CBD7B7D4D98F6E94F9C2005986592970DF34862BBFC734 AAD0616E077BED72FCA1CFBDD2242A74A465D8315DD0E742805FA4D9285EBF2074721FF4 B9B11CF8FD80E0B83ECD51D978E08A4AF273D86CB0D7DA3AE05F49EA5BACA81B90481854 C778A2967775F3497ACA3E64B944231ECB81829C96FADB56FE6AF8DD5B07A059855425D6 383BA871D9A281E408526BFC6B782CE5F93B6A665ADC25F777C306DFCD2B16141B58DD00 8345D2C7C00AA4C41982E45AC2AA353D0F5D82ED04722A205890BB5B2FAEF02737F727B2 76ED0FFC0D95C7C5135710A6CBA07D75DF644D146FCEB21A10092F4F8D05FC3FB2B0F9C4 71B79DCC9658C84384F493D67EFB9D469CBE3A2150C43F54910F1FCC9A7DC87BE0C6DD65 D69338310E3E38BCEBE151977B37EA5A25B70D88FA008AD4FD016414AB858C76B410B77B A8E515526FE3F3B5F40DBFD4E746547C9B61D893E096DA76A7A50FD7C9ADD29543BA637B 635AE946C95EFEB6B9AF7E4C54D47C324085506078E298289585D50669A61398504E5FF5 A4D68C7E94B9835E0E896177F04293CDB141F8512C53B6626A01DA7266FC7DFF4992D2D4 F196C89D3FA2CAD6A869523E94F7414522A708517115351A5E727BC13E362911685A5829 72D9068AD46CDF448E56EAA5CFB8AE545D6627DC61CBC2F1611D04FAD7B204ADFB39BF22 9F6C2E91062BB76B3426009FF6001A03F1478D316A5CB26627D01EDF97D8EA0914EDEB05 003AEFBC3C4F917DF18ADEC723EAAB66D015D673BF52D9EDA35512347764BA33854013D4 0C3CA7E51F97B26865703EB597AF42B288A60E1F34307F095063FADD95B9B924BA32C366 A226F9543A1AB4A51D30F6BA61171117A1BD783B80E24D93EEBA0BF6A494283DA6845B89 F3B3FF497853F6080A798CA43A3F90B7DF4DA4315B204AAF94C9D71D56B8FFD2472F22B1 51A5B6BD86EE394F561477E3DDC788A3AC91AEC7BC0FE4AC7C4FDE290966F409E56997B5 32B5A438A96CE7BBEB3869502C4054B33A2DB5CD2098FF41AECD9C900DD48D3229EECFD0 085145BB399A1EFF90D3092655FB78388FF78AC2C4313B257D5EF8B69763BF7571150842 E00A5FD133B282D2908D486038EC666D8900A3EF8EF719E27B9C7762D80EEC3A9EF6AE7E CF724F8DEF3A8E036F3BCF7FFE824FE6FF70048F13304BEAB465148EB13DC8C6E51D2037 1625FA6109210BA1B42106F00774F73F6539F9B28E7EE2FBC70FDEA055B71F924A831B8C B1D598D7CEE40914DCA60E9ECFE1A4915609D913876CF03F207029ED7810C6DAF8656150 6CA9AE865FFCF1646EA5834B684E60D212E284BDCF52F1566FD594EFF1A2DFFA439B7E96 7317A2F3AB5BBEBD2042DAB3F77A7AE8FFBC5A3A7C07A5507A81010776960C77F308D66F A3EA2E4AA66A5917E3AEC5086206822FB2663EEA259A5899564F22CBB7E438353A5C0F55 97501C227444EB0DB16B568FFC984C6C25C16D02CB699D090BE39E5341FB3566D6BB4893 54AF4C84F1A7FCE32932F6AB5A892671A3143766D6522388B5853333E0C4C735D3CEE2E1 00A947DE2DC6DE21D9879D25B6F90071A41769051503DEAE9E3E670A1B324B46413EF69C 48D4F36D679656F6BE0A4031F20819235776CD80E2E18C230B79CB3A934A53989195B68B 350ADF80BB58C7A5B7BE9057EFF1F6A45499BCB2A30A1937645F22B5B6263478F1537EB5 01E8D19B69BFD3C2781308F286D4EB28B1D974D6673D33F28678CBBDA021C09C49E6CF47 A68BF2ADD21BBA42D67D68F37E030E6BCD19274CC7D3B7A1EC61CC1550723AE0AB2DB369 458248C7623AC81AB35CCB191238BDC61B348CE91D02B189223B8009E9D056D595C5AA8C 0B3475714AA58BF802DF14D6B3225754E816A05D35309DB1D1C2624995A265723F970717 36DCF36DA30959155F054BB23D6EDB92E6FB60ECA5950502C63780C618C145FEB5598341 42BBFF8D3B76F4DC030646D05FCC206B86F91E6E00384E0EA82BFA346BF995783989A692 F7ABD0B11A39AF063036116A11E40A8F2492133E0CD068D67CDAF73F0D1B59B8A2EC94C1 A00C0953411A4E61E3DD8C4CF903D51368742D5F8F57C91BBEBD2EF2CFE70DC98D2B0A41 9D7BDAC89EA75B05586C596074F0070F0E82C786B9574EC345F1B6BE90D0DD8EFFEF9163 6161CF6DAD4A98DA29DE278256A24E09B9E8D3CFB8F4C7A3FB5582697501D8E3B48706AD 850B4C0DA64BBA57B2C4B7D18F82B23D726C55DC09E513510892470CC11B1BCDBADB2837 57C753FDA89CF7604C5A93CFD1343C5FF1AAD6233B4ED73565097FF5BF6757CBCB8F4ADB 50F51116A672AF6A0B1157E29F7950EF890BF5E03394EEB89879D6A5BC04486643F57FD2 E5743741DA1B15126F94FE3555B2B7870AF8089275C244E9AAAF740CFCA132A8B248152F A5188564E5BB67E38CD26D5BF8AF721A2EDF049F619DD1CEB87534BC210621A99CE904EF 0CD8761E04E5FE8AD5BC0F778403421AE44D81A7780AA51D73EE5C21B3A87DE8FC906A42 00F2A1856CD12E49D02DA81432B606961405170E2ACF22D91AAB2A4821D4EBCD3E89211A 047F6AD3109ADE10F56BB587571C7FC7E2363CBAA09B0CC932DCC78477B6A1A243AE980C C5DBE2B80A2CC224B7054D0830B06F9F2C6BFEBC1BDE51F9172B205FB813DE3F5154094E E8EEFD98BC5B7F8C804F904043E351708545DAB0DD75D4755C769A98713ECD8BF83C7584 BC341550435FB69BBE14D384188AAF127F02C3EE1A2C362977DC8AE4FD2503CD8264EE3A 7D6E935D4C6084CD6BB78D266CDE7792996E97EFE00D35BA618BF7F21F24761E7CA280E6 C5F785DEA6D37FF622BD2E74E3B239D5A1B5ED86AA2C3D23AAD48ACE392C87183B214613 137BB51A476C7889AA310D53B364976E89A6FB3B92F3E0E734A829C5DFE6EA51035BF872 CBCB3A901B9584A75930FDFF66AEBAD6ED2C641F4A901B9F1054366FFD459A2514541B16 179CF1AEF8D366077AA6148703FEDD023B401A358A0F4DA59C5C6591FC48BFF423B52193 B428A19EF622376BDE8C6B8EFE6E980B4B69A6BDAEAB52AF7CF50CC8F6D6ABC0710BD05A DE2E97A9BB5BBBCE086B65BA0E372EEE35A684A971F14FEFF705DCAABA39C36985F735FA 96723E09CFDF1618A13B042DD86E577470AF41283AEE581D646B727072A61FDF12C11608 DFF7ED899C3124C03E432CABDB8FA78C0264EE51F34909E64D681CE54B194D30F6E6867D DA6C150F6DED33FC2D1194AF42B38DAEBFCEDB17E82C92AB909C30D3D6FEC632A25775E8 3993CA22E556685EF828AC56A1349883685069D27C9C581C3F68B24F86FE5A437FC23E64 19A365C00B58E9679B873D03790E47F4D630D49922E4D97E244D4A8DDE4B3A4195B38D4E E65FE94C52587EEBDB4EA406BB51FB4344BDA776714EA31BF5B217377BFCF1A776DE7FD1 EB511B02E33C3A3609909206E995A63990EF6B695970A24BF392625A2AFF05AC829AEF26 1883BBC2235AC5ED54C9DD8D002CDF7A261F4E4F01E125BB89940C3282A046BC3322B050 0419150B1C2A175861CDF82F4A585F844A4232D4BC558C6B29FC7A97F31D2E7017A2F06E 709C7FCEDCCD5D9F9BB3D9B9C8354363941B4D6E9B1D57B90DEC2E25CABF6498C922C010 B8CF14E388A79BFBA1FBF6DA069F02494F582CF7D72AAB564A88910AE8A8BB6109D81ADF 959C6B65B0866116502CF5E08024DFF4E0FA618C34597AF77D4695158CC34763D911F709 8E0CC7BD7D8C9A4850CEAB8C5EA9B7B08DB99A0ECC2D392AA189C740B3B37B1868AC0EE7 DE56278C3412A15EFE4EB51FC321BD19A2CD0EB4115A5328BAA4D22D1A33A1E29F557877 6ED6A4C52D5EBCA85FDADBE45B3B237E280C9DA69FCCEC0E53B7DBB75FD6C147719DE5C8 9D74A10ECB0F56C17F164269830EC4B99FBEA07E7FB1C74C7F366585DE5D077469D88A1B 678A54112276EEFD55511C51459C4A1D858AF97246FE4E095A00D2A33CAE071050FB74D5 FC90940903F516E0C948A62C66ADF1BBB1A87FA281B464C4ACEAE5FE5370BC4820A67DAA DB9CADC377E9E936BB42D556C7BAF4CAC112B7731011E5FD0BD1DE139F0FCD6B9ACDCE3E 093AB1F543E0B2E05B204184953D2987CB6EE2FDF65177F0D79D591F0C9AC69FE7CEB73E 63294399FFB618CB2C6626D8E0409E928599FB0AABD8F7AFC0CBBFB4B62FE2894AEFF47B C3F5E21313A96E82B73EEF9D63E413B3443F59CD69F8F992C2172663186D9F3BB7DE1E2D EC2E99DFF681915445B5A998DCAD6E2BE20E510AF8A870060EDDC6482E74D3C7C2BD71D3 1579C17AAD1AC6E305260564F7194C1F6458BA0D7700593449E3D2EAE35E7DB89E93B269 581E8232C19A4E48CA0681D7DC05059BFCA6574EDC0FC74D3C8F5608D579D5119CD35CB7 D037465C88DBAA3B9F24B8F59E59E0967EABF81A6D6977EBE74AE71401EE6651EFB25F4F 834801E62FB68511BE1EA461668B5AE72FEFA90B1706B3B03E4C1DDF8BB83C3D2BCEEAEE 832E459096BB929E2FEB1461C49971DACE0162F6E1C3A1C3B8BF71C35A39EF129A2B5336 82237AAEF4542E1FB2D4EC04E5BACBE05111BAE586372C90A753DD31A11D54CC20553D8E 9F6F51A7AA94F7B80FB70EB45ABF040A7AF1B759D9CF44483F639D0CFE52B138CDE59069 93B6E099938BD1CF093434D03BABC7ED72857F6E91E5D9E6C4EBE2A045E8852F5D8A14C2 07C97EBD74A7DFA3954F8FA7AED5751185E5C950300E2557B0C3268FEB553E41964A8B0F E920F470BCAC1B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Helvetica.afm0100664000212600000240000007577507477306250015503 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Helvetica FullName Helvetica FamilyName Helvetica Weight Regular ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -151 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -174 -285 1001 953 CapHeight 729 XHeight 524 Descender -218 Ascender 729 StartCharMetrics 316 C 32 ; WX 278 ; N space ; B 191 0 191 0 ; C 33 ; WX 278 ; N exclam ; B 124 0 208 729 ; C 34 ; WX 355 ; N quotedbl ; B 52 464 305 709 ; C 35 ; WX 556 ; N numbersign ; B 14 -20 542 697 ; C 36 ; WX 556 ; N dollar ; B 26 -126 518 770 ; C 37 ; WX 889 ; N percent ; B 29 -20 859 709 ; C 38 ; WX 667 ; N ampersand ; B 52 -23 637 709 ; C 39 ; WX 221 ; N quoteright ; B 64 497 157 729 ; C 40 ; WX 333 ; N parenleft ; B 73 -212 291 729 ; C 41 ; WX 333 ; N parenright ; B 38 -212 256 729 ; C 42 ; WX 389 ; N asterisk ; B 40 441 343 729 ; C 43 ; WX 584 ; N plus ; B 50 -10 534 474 ; C 44 ; WX 278 ; N comma ; B 87 -147 192 104 ; C 45 ; WX 333 ; N hyphen ; B 46 240 284 312 ; C 46 ; WX 278 ; N period ; B 87 0 191 104 ; C 47 ; WX 278 ; N slash ; B -8 -20 284 729 ; C 48 ; WX 556 ; N zero ; B 43 -23 507 709 ; C 49 ; WX 556 ; N one ; B 102 0 347 709 ; C 50 ; WX 556 ; N two ; B 34 0 511 709 ; C 51 ; WX 556 ; N three ; B 32 -23 506 709 ; C 52 ; WX 556 ; N four ; B 28 0 520 709 ; C 53 ; WX 556 ; N five ; B 35 -23 513 709 ; C 54 ; WX 556 ; N six ; B 43 -23 513 709 ; C 55 ; WX 556 ; N seven ; B 46 0 520 709 ; C 56 ; WX 556 ; N eight ; B 37 -23 513 709 ; C 57 ; WX 556 ; N nine ; B 38 -23 509 709 ; C 58 ; WX 278 ; N colon ; B 110 0 214 524 ; C 59 ; WX 278 ; N semicolon ; B 110 -147 215 524 ; C 60 ; WX 584 ; N less ; B 45 -9 534 474 ; C 61 ; WX 584 ; N equal ; B 50 111 534 353 ; C 62 ; WX 584 ; N greater ; B 50 -9 539 474 ; C 63 ; WX 556 ; N question ; B 77 0 509 741 ; C 64 ; WX 1015 ; N at ; B 34 -142 951 741 ; C 65 ; WX 667 ; N A ; B 17 0 653 729 ; C 66 ; WX 667 ; N B ; B 79 0 623 729 ; C 67 ; WX 722 ; N C ; B 48 -23 677 741 ; C 68 ; WX 722 ; N D ; B 89 0 667 729 ; C 69 ; WX 667 ; N E ; B 90 0 613 729 ; C 70 ; WX 611 ; N F ; B 90 0 579 729 ; C 71 ; WX 778 ; N G ; B 44 -23 709 741 ; C 72 ; WX 722 ; N H ; B 83 0 644 729 ; C 73 ; WX 278 ; N I ; B 100 0 194 729 ; C 74 ; WX 500 ; N J ; B 17 -23 426 729 ; C 75 ; WX 667 ; N K ; B 79 0 658 729 ; C 76 ; WX 556 ; N L ; B 80 0 533 729 ; C 77 ; WX 833 ; N M ; B 75 0 761 729 ; C 78 ; WX 722 ; N N ; B 76 0 646 729 ; C 79 ; WX 778 ; N O ; B 38 -23 742 741 ; C 80 ; WX 667 ; N P ; B 91 0 617 729 ; C 81 ; WX 778 ; N Q ; B 38 -59 742 741 ; C 82 ; WX 722 ; N R ; B 93 0 679 729 ; C 83 ; WX 667 ; N S ; B 48 -23 621 741 ; C 84 ; WX 611 ; N T ; B 21 0 593 729 ; C 85 ; WX 722 ; N U ; B 85 -23 645 729 ; C 86 ; WX 667 ; N V ; B 30 0 645 729 ; C 87 ; WX 944 ; N W ; B 22 0 929 729 ; C 88 ; WX 667 ; N X ; B 22 0 649 729 ; C 89 ; WX 667 ; N Y ; B 13 0 661 729 ; C 90 ; WX 611 ; N Z ; B 28 0 583 729 ; C 91 ; WX 278 ; N bracketleft ; B 64 -212 250 729 ; C 92 ; WX 278 ; N backslash ; B -8 -20 284 729 ; C 93 ; WX 278 ; N bracketright ; B 23 -212 209 729 ; C 94 ; WX 469 ; N asciicircum ; B 44 329 425 709 ; C 95 ; WX 556 ; N underscore ; B -22 -176 578 -126 ; C 96 ; WX 222 ; N quoteleft ; B 65 477 158 709 ; C 97 ; WX 556 ; N a ; B 42 -23 535 539 ; C 98 ; WX 556 ; N b ; B 54 -23 523 729 ; C 99 ; WX 500 ; N c ; B 31 -23 477 539 ; C 100 ; WX 556 ; N d ; B 26 -23 495 729 ; C 101 ; WX 556 ; N e ; B 40 -23 513 539 ; C 102 ; WX 278 ; N f ; B 18 0 258 732 ; C 103 ; WX 556 ; N g ; B 29 -218 489 539 ; C 104 ; WX 556 ; N h ; B 70 0 486 729 ; C 105 ; WX 222 ; N i ; B 66 0 150 729 ; C 106 ; WX 222 ; N j ; B -18 -218 153 729 ; C 107 ; WX 500 ; N k ; B 58 0 502 729 ; C 108 ; WX 222 ; N l ; B 68 0 152 729 ; C 109 ; WX 833 ; N m ; B 70 0 762 539 ; C 110 ; WX 556 ; N n ; B 70 0 487 539 ; C 111 ; WX 556 ; N o ; B 36 -23 510 539 ; C 112 ; WX 556 ; N p ; B 54 -218 523 539 ; C 113 ; WX 556 ; N q ; B 26 -218 495 539 ; C 114 ; WX 333 ; N r ; B 69 0 321 539 ; C 115 ; WX 500 ; N s ; B 34 -23 459 539 ; C 116 ; WX 278 ; N t ; B 14 -23 254 668 ; C 117 ; WX 556 ; N u ; B 65 -23 482 524 ; C 118 ; WX 500 ; N v ; B 10 0 486 524 ; C 119 ; WX 722 ; N w ; B 6 0 708 524 ; C 120 ; WX 500 ; N x ; B 17 0 473 524 ; C 121 ; WX 500 ; N y ; B 20 -218 478 524 ; C 122 ; WX 500 ; N z ; B 31 0 457 524 ; C 123 ; WX 334 ; N braceleft ; B 43 -212 276 729 ; C 124 ; WX 260 ; N bar ; B 100 -212 160 729 ; C 125 ; WX 334 ; N braceright ; B 29 -212 262 729 ; C 126 ; WX 584 ; N asciitilde ; B 75 268 508 438 ; C 161 ; WX 333 ; N exclamdown ; B 121 -205 205 524 ; C 162 ; WX 556 ; N cent ; B 52 -120 510 628 ; C 163 ; WX 556 ; N sterling ; B 26 -23 535 729 ; C 164 ; WX 167 ; N fraction ; B -174 -20 336 709 ; C 165 ; WX 556 ; N yen ; B 11 0 545 709 ; C 166 ; WX 556 ; N florin ; B 11 -212 542 738 ; C 167 ; WX 556 ; N section ; B 43 -213 506 729 ; C 168 ; WX 556 ; N currency ; B 67 133 489 551 ; C 169 ; WX 191 ; N quotesingle ; B 48 464 142 709 ; C 170 ; WX 333 ; N quotedblleft ; B 48 477 299 709 ; C 171 ; WX 556 ; N guillemotleft ; B 98 106 455 438 ; C 172 ; WX 333 ; N guilsinglleft ; B 91 106 243 438 ; C 173 ; WX 333 ; N guilsinglright ; B 85 106 239 438 ; C 174 ; WX 500 ; N fi ; B 12 0 436 732 ; C 175 ; WX 500 ; N fl ; B 17 0 430 732 ; C 177 ; WX 556 ; N endash ; B -5 240 561 312 ; C 178 ; WX 556 ; N dagger ; B 38 -177 513 709 ; C 179 ; WX 556 ; N daggerdbl ; B 38 -177 513 709 ; C 180 ; WX 278 ; N periodcentered ; B 87 302 211 427 ; C 182 ; WX 537 ; N paragraph ; B 48 -177 522 729 ; C 183 ; WX 350 ; N bullet ; B 50 220 300 470 ; C 184 ; WX 222 ; N quotesinglbase ; B 64 -128 158 104 ; C 185 ; WX 333 ; N quotedblbase ; B 47 -128 300 104 ; C 186 ; WX 333 ; N quotedblright ; B 49 477 302 709 ; C 187 ; WX 556 ; N guillemotright ; B 98 106 451 438 ; C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 104 ; C 189 ; WX 1000 ; N perthousand ; B 9 -22 993 738 ; C 191 ; WX 611 ; N questiondown ; B 95 -217 528 524 ; C 193 ; WX 333 ; N grave ; B 22 592 231 740 ; C 194 ; WX 333 ; N acute ; B 92 592 301 740 ; C 195 ; WX 333 ; N circumflex ; B 20 591 307 741 ; C 196 ; WX 333 ; N tilde ; B 5 613 319 717 ; C 197 ; WX 333 ; N macron ; B 28 631 302 701 ; C 198 ; WX 333 ; N breve ; B 15 597 316 732 ; C 199 ; WX 333 ; N dotaccent ; B 115 612 219 716 ; C 200 ; WX 333 ; N dieresis ; B 30 612 296 715 ; C 202 ; WX 333 ; N ring ; B 79 579 255 754 ; C 203 ; WX 333 ; N cedilla ; B 39 -214 287 0 ; C 205 ; WX 333 ; N hungarumlaut ; B -35 590 348 740 ; C 206 ; WX 333 ; N ogonek ; B 57 -205 265 0 ; C 207 ; WX 333 ; N caron ; B 19 591 306 741 ; C 208 ; WX 1000 ; N emdash ; B -9 240 1001 312 ; C 225 ; WX 1000 ; N AE ; B 11 0 950 729 ; C 227 ; WX 370 ; N ordfeminine ; B 37 303 333 742 ; C 232 ; WX 556 ; N Lslash ; B 0 0 552 729 ; C 233 ; WX 778 ; N Oslash ; B 30 -23 744 755 ; C 234 ; WX 1000 ; N OE ; B 43 -20 959 741 ; C 235 ; WX 365 ; N ordmasculine ; B 40 303 324 742 ; C 241 ; WX 889 ; N ae ; B 34 -23 845 539 ; C 245 ; WX 278 ; N dotlessi ; B 94 0 178 524 ; C 248 ; WX 222 ; N lslash ; B 0 0 212 729 ; C 249 ; WX 611 ; N oslash ; B 18 -30 529 539 ; C 250 ; WX 944 ; N oe ; B 40 -23 899 539 ; C 251 ; WX 611 ; N germandbls ; B 126 -20 566 729 ; C -1 ; WX 722 ; N Udieresis ; B 85 -23 645 914 ; C -1 ; WX 722 ; N Uacute ; B 85 -23 645 939 ; C -1 ; WX 667 ; N Scedilla ; B 45 -214 621 741 ; C -1 ; WX 611 ; N Tcaron ; B 21 0 593 940 ; C -1 ; WX 667 ; N Scaron ; B 48 -23 621 940 ; C -1 ; WX 722 ; N Rcaron ; B 93 0 679 940 ; C -1 ; WX 722 ; N Racute ; B 93 0 679 939 ; C -1 ; WX 667 ; N Sacute ; B 48 -23 621 939 ; C -1 ; WX 778 ; N Otilde ; B 38 -23 742 916 ; C -1 ; WX 556 ; N ucircumflex ; B 65 -23 482 741 ; C -1 ; WX 778 ; N Ohungarumlaut ; B 38 -23 742 939 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 85 -23 645 939 ; C -1 ; WX 666 ; N Yacute ; B 13 0 661 939 ; C -1 ; WX 722 ; N Eth ; B 20 0 667 729 ; C -1 ; WX 722 ; N Dcroat ; B 20 0 667 729 ; C -1 ; WX 611 ; N Zacute ; B 28 0 583 939 ; C -1 ; WX 722 ; N Uring ; B 85 -23 645 953 ; C -1 ; WX 556 ; N gbreve ; B 29 -218 489 732 ; C -1 ; WX 556 ; N eogonek ; B 40 -204 514 539 ; C -1 ; WX 556 ; N edotaccent ; B 40 -23 513 716 ; C -1 ; WX 556 ; N ecaron ; B 40 -23 513 741 ; C -1 ; WX 722 ; N Ugrave ; B 85 -23 645 939 ; C -1 ; WX 666 ; N Thorn ; B 91 0 616 729 ; C -1 ; WX 556 ; N eacute ; B 40 -23 513 740 ; C -1 ; WX 556 ; N edieresis ; B 40 -23 513 715 ; C -1 ; WX 635 ; N dcaron ; B 26 -23 648 729 ; C -1 ; WX 500 ; N ccedilla ; B 31 -214 477 539 ; C -1 ; WX 500 ; N ccaron ; B 31 -23 477 741 ; C -1 ; WX 500 ; N cacute ; B 31 -23 477 740 ; C -1 ; WX 556 ; N aogonek ; B 43 -205 596 539 ; C -1 ; WX 556 ; N aring ; B 42 -23 535 754 ; C -1 ; WX 556 ; N atilde ; B 42 -23 535 717 ; C -1 ; WX 556 ; N abreve ; B 42 -23 535 732 ; C -1 ; WX 556 ; N egrave ; B 40 -23 513 740 ; C -1 ; WX 556 ; N agrave ; B 42 -23 535 740 ; C -1 ; WX 556 ; N aacute ; B 42 -23 535 740 ; C -1 ; WX 556 ; N adieresis ; B 42 -23 535 715 ; C -1 ; WX 722 ; N Uogonek ; B 85 -205 645 729 ; C -1 ; WX 556 ; N ugrave ; B 65 -23 482 740 ; C -1 ; WX 556 ; N uacute ; B 65 -23 482 740 ; C -1 ; WX 556 ; N udieresis ; B 65 -23 482 715 ; C -1 ; WX 308 ; N tcaron ; B 14 -23 321 800 ; C -1 ; WX 500 ; N scommaaccent ; B 34 -285 459 539 ; C -1 ; WX 611 ; N Zcaron ; B 28 0 583 940 ; C -1 ; WX 556 ; N ecircumflex ; B 40 -23 513 741 ; C -1 ; WX 722 ; N Ucircumflex ; B 85 -23 645 940 ; C -1 ; WX 556 ; N acircumflex ; B 42 -23 535 741 ; C -1 ; WX 611 ; N Zdotaccent ; B 28 0 583 915 ; C -1 ; WX 500 ; N scaron ; B 34 -23 459 741 ; C -1 ; WX 667 ; N Amacron ; B 17 0 653 900 ; C -1 ; WX 500 ; N sacute ; B 34 -23 459 740 ; C -1 ; WX 611 ; N Tcommaaccent ; B 21 -285 593 729 ; C -1 ; WX 667 ; N Ydieresis ; B 13 0 661 914 ; C -1 ; WX 555 ; N thorn ; B 54 -218 522 714 ; C -1 ; WX 667 ; N Emacron ; B 90 0 613 900 ; C -1 ; WX 778 ; N Ograve ; B 38 -23 742 939 ; C -1 ; WX 778 ; N Oacute ; B 38 -23 742 939 ; C -1 ; WX 778 ; N Odieresis ; B 38 -23 742 914 ; C -1 ; WX 722 ; N Ntilde ; B 76 0 646 916 ; C -1 ; WX 722 ; N Ncaron ; B 76 0 646 940 ; C -1 ; WX 722 ; N Nacute ; B 76 0 646 939 ; C -1 ; WX 556 ; N Lcaron ; B 80 0 533 729 ; C -1 ; WX 556 ; N Lacute ; B 70 0 533 939 ; C -1 ; WX 278 ; N Idotaccent ; B 92 0 196 915 ; C -1 ; WX 333 ; N racute ; B 69 0 331 740 ; C -1 ; WX 278 ; N Icircumflex ; B -1 0 286 940 ; C -1 ; WX 556 ; N ohungarumlaut ; B 36 -23 526 740 ; C -1 ; WX 556 ; N otilde ; B 36 -23 510 717 ; C -1 ; WX 556 ; N Euro ; B 2 -23 543 709 ; C -1 ; WX 556 ; N ocircumflex ; B 36 -23 510 741 ; C -1 ; WX 351 ; N onesuperior ; B 61 284 222 709 ; C -1 ; WX 351 ; N twosuperior ; B 19 284 326 709 ; C -1 ; WX 351 ; N threesuperior ; B 16 270 322 709 ; C -1 ; WX 278 ; N Igrave ; B 1 0 210 939 ; C -1 ; WX 278 ; N Iacute ; B 71 0 280 939 ; C -1 ; WX 278 ; N Imacron ; B 20 0 274 900 ; C -1 ; WX 278 ; N Iogonek ; B 66 -204 234 729 ; C -1 ; WX 278 ; N Idieresis ; B 9 0 275 907 ; C -1 ; WX 778 ; N Gbreve ; B 44 -23 709 931 ; C -1 ; WX 722 ; N Umacron ; B 85 -23 645 900 ; C -1 ; WX 667 ; N Kcommaaccent ; B 79 -285 658 729 ; C -1 ; WX 556 ; N ograve ; B 36 -23 510 740 ; C -1 ; WX 667 ; N Scommaaccent ; B 48 -285 621 741 ; C -1 ; WX 667 ; N Eogonek ; B 90 -205 652 729 ; C -1 ; WX 556 ; N oacute ; B 36 -23 510 740 ; C -1 ; WX 667 ; N Edotaccent ; B 90 0 613 915 ; C -1 ; WX 222 ; N iogonek ; B 25 -204 190 729 ; C -1 ; WX 556 ; N gcommaaccent ; B 29 -218 489 817 ; C -1 ; WX 556 ; N odieresis ; B 36 -23 510 715 ; C -1 ; WX 556 ; N ntilde ; B 70 0 487 717 ; C -1 ; WX 556 ; N ncaron ; B 70 0 487 741 ; C -1 ; WX 667 ; N Ecaron ; B 90 0 613 940 ; C -1 ; WX 667 ; N Ecircumflex ; B 90 0 613 940 ; C -1 ; WX 500 ; N scedilla ; B 34 -214 459 539 ; C -1 ; WX 333 ; N rcaron ; B 48 0 335 741 ; C -1 ; WX 667 ; N Egrave ; B 90 0 613 939 ; C -1 ; WX 667 ; N Eacute ; B 90 0 613 939 ; C -1 ; WX 778 ; N Gcommaaccent ; B 44 -285 709 741 ; C -1 ; WX 722 ; N Rcommaaccent ; B 93 -285 679 729 ; C -1 ; WX 667 ; N Edieresis ; B 90 0 613 914 ; C -1 ; WX 556 ; N nacute ; B 70 0 487 740 ; C -1 ; WX 556 ; N uogonek ; B 65 -204 521 524 ; C -1 ; WX 556 ; N umacron ; B 65 -23 482 701 ; C -1 ; WX 722 ; N Dcaron ; B 89 0 667 940 ; C -1 ; WX 292 ; N lcaron ; B 68 0 305 729 ; C -1 ; WX 722 ; N Ccaron ; B 48 -23 677 940 ; C -1 ; WX 722 ; N Cacute ; B 48 -23 677 939 ; C -1 ; WX 722 ; N Ccedilla ; B 48 -214 677 741 ; C -1 ; WX 606 ; N degree ; B 151 383 454 686 ; C -1 ; WX 667 ; N Aogonek ; B 17 -205 692 729 ; C -1 ; WX 584 ; N minus ; B 40 197 544 267 ; C -1 ; WX 584 ; N multiply ; B 95 34 488 427 ; C -1 ; WX 584 ; N divide ; B 50 0 534 472 ; C -1 ; WX 667 ; N Aring ; B 17 0 653 953 ; C -1 ; WX 1000 ; N trademark ; B 63 292 938 729 ; C -1 ; WX 333 ; N rcommaaccent ; B 65 -285 321 539 ; C -1 ; WX 222 ; N lacute ; B 63 0 272 939 ; C -1 ; WX 556 ; N omacron ; B 36 -23 510 701 ; C -1 ; WX 667 ; N Atilde ; B 17 0 653 916 ; C -1 ; WX 278 ; N icircumflex ; B -7 0 280 741 ; C -1 ; WX 278 ; N igrave ; B -5 0 204 740 ; C -1 ; WX 556 ; N ncommaaccent ; B 70 -285 487 539 ; C -1 ; WX 222 ; N lcommaaccent ; B 63 -285 163 729 ; C -1 ; WX 584 ; N plusminus ; B 50 -11 534 623 ; C -1 ; WX 869 ; N onehalf ; B 61 -20 844 709 ; C -1 ; WX 869 ; N onequarter ; B 61 -20 849 709 ; C -1 ; WX 869 ; N threequarters ; B 16 -20 849 709 ; C -1 ; WX 278 ; N iacute ; B 65 0 274 740 ; C -1 ; WX 667 ; N Abreve ; B 17 0 653 931 ; C -1 ; WX 500 ; N kcommaaccent ; B 58 -285 502 729 ; C -1 ; WX 778 ; N Omacron ; B 38 -23 742 900 ; C -1 ; WX 222 ; N imacron ; B -16 0 231 701 ; C -1 ; WX 556 ; N emacron ; B 40 -23 513 701 ; C -1 ; WX 556 ; N amacron ; B 42 -23 535 701 ; C -1 ; WX 278 ; N tcommaaccent ; B 14 -285 254 668 ; C -1 ; WX 500 ; N ydieresis ; B 20 -218 478 715 ; C -1 ; WX 500 ; N zdotaccent ; B 31 0 457 716 ; C -1 ; WX 500 ; N zcaron ; B 31 0 457 741 ; C -1 ; WX 500 ; N zacute ; B 31 0 457 740 ; C -1 ; WX 500 ; N yacute ; B 20 -218 478 740 ; C -1 ; WX 556 ; N uhungarumlaut ; B 65 -23 530 740 ; C -1 ; WX 556 ; N eth ; B 36 -23 510 743 ; C -1 ; WX 556 ; N uring ; B 65 -23 482 754 ; C -1 ; WX 778 ; N Ocircumflex ; B 38 -23 742 940 ; C -1 ; WX 333 ; N commaaccent ; B 116 -285 216 -60 ; C -1 ; WX 737 ; N copyright ; B -13 -22 751 742 ; C -1 ; WX 737 ; N registered ; B -13 -22 751 742 ; C -1 ; WX 667 ; N Acircumflex ; B 17 0 653 940 ; C -1 ; WX 278 ; N idieresis ; B 3 0 269 708 ; C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ; C -1 ; WX 711 ; N Delta ; B 10 0 701 729 ; C -1 ; WX 548 ; N notequal ; B 32 -25 516 486 ; C -1 ; WX 542 ; N radical ; B 7 -36 512 913 ; C -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ; C -1 ; WX 667 ; N Aacute ; B 17 0 653 939 ; C -1 ; WX 584 ; N lessequal ; B 45 -11 534 639 ; C -1 ; WX 584 ; N greaterequal ; B 45 -11 534 639 ; C -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ; C -1 ; WX 711 ; N summation ; B 17 -97 694 760 ; C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ; C -1 ; WX 722 ; N Ncommaaccent ; B 76 -285 646 729 ; C -1 ; WX 556 ; N dcroat ; B 26 -23 557 729 ; C -1 ; WX 260 ; N brokenbar ; B 100 -212 160 729 ; C -1 ; WX 556 ; N Lcommaaccent ; B 80 -285 533 729 ; C -1 ; WX 667 ; N Adieresis ; B 17 0 653 914 ; C -1 ; WX 556 ; N mu ; B 65 -220 544 524 ; C -1 ; WX 278 ; N .notdef ; B 191 0 191 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -36 KPX A Ccedilla -36 KPX A G -35 KPX A O -33 KPX A Odieresis -33 KPX A Q -32 KPX A T -93 KPX A U -37 KPX A Uacute -37 KPX A Ucircumflex -37 KPX A Udieresis -37 KPX A Ugrave -37 KPX A V -75 KPX A W -51 KPX A Y -99 KPX A a -4 KPX A b 4 KPX A c -11 KPX A ccedilla -10 KPX A comma 5 KPX A d -8 KPX A e -16 KPX A g -10 KPX A guillemotleft -44 KPX A guilsinglleft -40 KPX A hyphen -3 KPX A o -13 KPX A period 5 KPX A q -8 KPX A quotedblright -56 KPX A quoteright -65 KPX A t -16 KPX A u -12 KPX A v -31 KPX A w -21 KPX A y -34 KPX Aacute C -36 KPX Aacute G -35 KPX Aacute O -33 KPX Aacute Q -32 KPX Aacute T -93 KPX Aacute U -37 KPX Aacute V -75 KPX Aacute W -51 KPX Aacute Y -99 KPX Aacute a -4 KPX Aacute b 4 KPX Aacute c -11 KPX Aacute comma 5 KPX Aacute d -8 KPX Aacute e -16 KPX Aacute g -10 KPX Aacute guillemotleft -44 KPX Aacute guilsinglleft -40 KPX Aacute hyphen -3 KPX Aacute o -13 KPX Aacute period 5 KPX Aacute q -8 KPX Aacute quoteright -65 KPX Aacute t -16 KPX Aacute u -12 KPX Aacute v -31 KPX Aacute w -21 KPX Aacute y -34 KPX Acircumflex C -36 KPX Acircumflex G -35 KPX Acircumflex O -33 KPX Acircumflex Q -32 KPX Acircumflex T -93 KPX Acircumflex U -37 KPX Acircumflex V -75 KPX Acircumflex W -51 KPX Acircumflex Y -99 KPX Acircumflex comma 5 KPX Acircumflex period 5 KPX Adieresis C -36 KPX Adieresis G -35 KPX Adieresis O -33 KPX Adieresis Q -32 KPX Adieresis T -93 KPX Adieresis U -37 KPX Adieresis V -75 KPX Adieresis W -51 KPX Adieresis Y -99 KPX Adieresis a -4 KPX Adieresis b 4 KPX Adieresis c -11 KPX Adieresis comma 5 KPX Adieresis d -8 KPX Adieresis g -10 KPX Adieresis guillemotleft -44 KPX Adieresis guilsinglleft -40 KPX Adieresis hyphen -3 KPX Adieresis o -13 KPX Adieresis period 5 KPX Adieresis q -8 KPX Adieresis quotedblright -56 KPX Adieresis quoteright -65 KPX Adieresis t -16 KPX Adieresis u -12 KPX Adieresis v -31 KPX Adieresis w -21 KPX Adieresis y -34 KPX Agrave C -36 KPX Agrave G -35 KPX Agrave O -33 KPX Agrave Q -32 KPX Agrave T -93 KPX Agrave U -37 KPX Agrave V -75 KPX Agrave W -51 KPX Agrave Y -99 KPX Agrave comma 5 KPX Agrave period 5 KPX Aring C -36 KPX Aring G -35 KPX Aring O -33 KPX Aring Q -32 KPX Aring T -93 KPX Aring U -37 KPX Aring V -75 KPX Aring W -51 KPX Aring Y -99 KPX Aring a -4 KPX Aring b 4 KPX Aring c -11 KPX Aring comma 5 KPX Aring d -8 KPX Aring e -16 KPX Aring g -10 KPX Aring guillemotleft -44 KPX Aring guilsinglleft -40 KPX Aring hyphen -3 KPX Aring o -13 KPX Aring period 5 KPX Aring q -8 KPX Aring quotedblright -56 KPX Aring quoteright -65 KPX Aring t -16 KPX Aring u -12 KPX Aring v -31 KPX Aring w -21 KPX Aring y -34 KPX Atilde C -36 KPX Atilde G -35 KPX Atilde O -33 KPX Atilde Q -32 KPX Atilde T -93 KPX Atilde U -37 KPX Atilde V -75 KPX Atilde W -51 KPX Atilde Y -99 KPX Atilde comma 5 KPX Atilde period 5 KPX B A -21 KPX B AE -21 KPX B Aacute -21 KPX B Acircumflex -21 KPX B Adieresis -21 KPX B Aring -21 KPX B Atilde -21 KPX B O -7 KPX B OE -5 KPX B Oacute -7 KPX B Ocircumflex -7 KPX B Odieresis -7 KPX B Ograve -7 KPX B Oslash -1 KPX B V -41 KPX B W -25 KPX B Y -44 KPX C A -32 KPX C AE -33 KPX C Aacute -32 KPX C Adieresis -32 KPX C Aring -32 KPX C H -12 KPX C K -10 KPX C O -8 KPX C Oacute -8 KPX C Odieresis -8 KPX Ccedilla A -31 KPX D A -42 KPX D Aacute -42 KPX D Acircumflex -42 KPX D Adieresis -42 KPX D Agrave -42 KPX D Aring -42 KPX D Atilde -42 KPX D J -5 KPX D T -45 KPX D V -51 KPX D W -29 KPX D X -53 KPX D Y -63 KPX F A -69 KPX F Aacute -69 KPX F Acircumflex -69 KPX F Adieresis -69 KPX F Agrave -69 KPX F Aring -69 KPX F Atilde -69 KPX F J -51 KPX F O -22 KPX F Odieresis -22 KPX F a -33 KPX F aacute -33 KPX F adieresis -33 KPX F ae -29 KPX F aring -33 KPX F comma -108 KPX F e -24 KPX F eacute -24 KPX F hyphen -14 KPX F i -10 KPX F j -12 KPX F o -21 KPX F oacute -21 KPX F odieresis -21 KPX F oe -23 KPX F oslash -21 KPX F period -108 KPX F r -35 KPX F u -33 KPX G A -6 KPX G AE -3 KPX G Aacute -6 KPX G Acircumflex -6 KPX G Adieresis -6 KPX G Agrave -6 KPX G Aring -6 KPX G Atilde -6 KPX G T -44 KPX G V -50 KPX G W -28 KPX G Y -62 KPX J A -32 KPX J AE -31 KPX J Adieresis -32 KPX J Aring -32 KPX K C -51 KPX K G -51 KPX K O -48 KPX K OE -45 KPX K Oacute -48 KPX K Odieresis -48 KPX K S -38 KPX K T 20 KPX K a -11 KPX K adieresis -11 KPX K ae -7 KPX K aring -11 KPX K e -32 KPX K hyphen -47 KPX K o -29 KPX K oacute -29 KPX K odieresis -29 KPX K u -19 KPX K udieresis -19 KPX K y -62 KPX L A 17 KPX L AE 20 KPX L Aacute 17 KPX L Adieresis 17 KPX L Aring 17 KPX L C -41 KPX L Ccedilla -37 KPX L G -42 KPX L O -41 KPX L Oacute -41 KPX L Ocircumflex -41 KPX L Odieresis -41 KPX L Ograve -41 KPX L Otilde -41 KPX L S -19 KPX L T -105 KPX L U -35 KPX L Udieresis -35 KPX L V -105 KPX L W -68 KPX L Y -121 KPX L hyphen -125 KPX L quotedblright -141 KPX L quoteright -149 KPX L u -7 KPX L udieresis -7 KPX L y -56 KPX N A -9 KPX N AE -6 KPX N Aacute -9 KPX N Adieresis -9 KPX N Aring -9 KPX N C -3 KPX N Ccedilla -3 KPX N G -2 KPX N O 0 KPX N Oacute 0 KPX N Odieresis 0 KPX N a -5 KPX N aacute -5 KPX N adieresis -5 KPX N ae -2 KPX N aring -5 KPX N comma -7 KPX N e 0 KPX N eacute 0 KPX N o 2 KPX N oacute 2 KPX N odieresis 2 KPX N oslash 4 KPX N period -7 KPX N u 0 KPX N udieresis 0 KPX O A -35 KPX O AE -39 KPX O Aacute -35 KPX O Adieresis -35 KPX O Aring -35 KPX O T -42 KPX O V -45 KPX O W -23 KPX O X -46 KPX O Y -59 KPX Oacute A -35 KPX Oacute T -42 KPX Oacute V -45 KPX Oacute W -23 KPX Oacute Y -59 KPX Ocircumflex T -42 KPX Ocircumflex V -45 KPX Ocircumflex Y -59 KPX Odieresis A -35 KPX Odieresis T -42 KPX Odieresis V -45 KPX Odieresis W -23 KPX Odieresis X -46 KPX Odieresis Y -59 KPX Ograve T -42 KPX Ograve V -45 KPX Ograve Y -59 KPX Oslash A -33 KPX Otilde T -42 KPX Otilde V -45 KPX Otilde Y -59 KPX P A -78 KPX P AE -86 KPX P Aacute -78 KPX P Adieresis -78 KPX P Aring -78 KPX P J -78 KPX P a -28 KPX P aacute -28 KPX P adieresis -28 KPX P ae -24 KPX P aring -28 KPX P comma -135 KPX P e -31 KPX P eacute -31 KPX P hyphen -40 KPX P o -27 KPX P oacute -27 KPX P odieresis -27 KPX P oe -28 KPX P oslash -27 KPX P period -135 KPX R C -16 KPX R Ccedilla -16 KPX R G -15 KPX R O -13 KPX R OE -11 KPX R Oacute -13 KPX R Odieresis -13 KPX R T -23 KPX R U -17 KPX R Udieresis -17 KPX R V -39 KPX R W -27 KPX R Y -43 KPX R a -15 KPX R aacute -15 KPX R adieresis -15 KPX R ae -12 KPX R aring -15 KPX R e -12 KPX R eacute -12 KPX R hyphen -2 KPX R o -9 KPX R oacute -9 KPX R odieresis -9 KPX R oe -11 KPX R u -9 KPX R uacute -9 KPX R udieresis -9 KPX R y -8 KPX S A -22 KPX S AE -22 KPX S Aacute -22 KPX S Adieresis -22 KPX S Aring -22 KPX S T -28 KPX S V -42 KPX S W -28 KPX S Y -48 KPX S t -3 KPX T A -95 KPX T AE -97 KPX T Aacute -95 KPX T Acircumflex -95 KPX T Adieresis -95 KPX T Agrave -95 KPX T Aring -95 KPX T Atilde -95 KPX T C -44 KPX T G -45 KPX T J -100 KPX T O -42 KPX T OE -35 KPX T Oacute -42 KPX T Ocircumflex -42 KPX T Odieresis -42 KPX T Ograve -42 KPX T Oslash -41 KPX T Otilde -42 KPX T S -24 KPX T V 12 KPX T W 16 KPX T Y 20 KPX T a -100 KPX T ae -97 KPX T c -90 KPX T colon -133 KPX T comma -100 KPX T e -95 KPX T g -89 KPX T guillemotleft -121 KPX T guilsinglleft -117 KPX T hyphen -77 KPX T i -3 KPX T j -5 KPX T o -92 KPX T oslash -87 KPX T period -100 KPX T r -92 KPX T s -92 KPX T semicolon -129 KPX T u -91 KPX T v -95 KPX T w -93 KPX T y -100 KPX U A -36 KPX U AE -39 KPX U Aacute -36 KPX U Acircumflex -36 KPX U Adieresis -36 KPX U Aring -36 KPX U Atilde -36 KPX U comma -27 KPX U m -4 KPX U n -4 KPX U p 3 KPX U period -25 KPX U r -4 KPX Uacute A -36 KPX Uacute comma -27 KPX Uacute m -4 KPX Uacute n -4 KPX Uacute p 3 KPX Uacute period -25 KPX Uacute r -4 KPX Ucircumflex A -36 KPX Udieresis A -36 KPX Udieresis b 3 KPX Udieresis comma -27 KPX Udieresis m -4 KPX Udieresis n -4 KPX Udieresis p 3 KPX Udieresis period -25 KPX Udieresis r -4 KPX Ugrave A -36 KPX V A -71 KPX V AE -78 KPX V Aacute -71 KPX V Acircumflex -71 KPX V Adieresis -71 KPX V Agrave -71 KPX V Aring -71 KPX V Atilde -71 KPX V C -43 KPX V G -42 KPX V O -40 KPX V Oacute -40 KPX V Ocircumflex -40 KPX V Odieresis -40 KPX V Ograve -40 KPX V Oslash -33 KPX V Otilde -40 KPX V S -35 KPX V T 15 KPX V a -59 KPX V ae -55 KPX V colon -66 KPX V comma -89 KPX V e -57 KPX V g -50 KPX V guillemotleft -83 KPX V guilsinglleft -80 KPX V hyphen -38 KPX V i -5 KPX V o -54 KPX V oslash -50 KPX V period -89 KPX V r -42 KPX V semicolon -66 KPX V u -41 KPX V y -20 KPX W A -50 KPX W AE -56 KPX W Aacute -50 KPX W Acircumflex -50 KPX W Adieresis -50 KPX W Agrave -50 KPX W Aring -50 KPX W Atilde -50 KPX W C -23 KPX W G -22 KPX W O -20 KPX W Oacute -20 KPX W Ocircumflex -20 KPX W Odieresis -20 KPX W Ograve -20 KPX W Oslash -13 KPX W Otilde -20 KPX W S -24 KPX W T 19 KPX W a -38 KPX W ae -34 KPX W colon -52 KPX W comma -56 KPX W e -32 KPX W g -25 KPX W guillemotleft -58 KPX W guilsinglleft -54 KPX W hyphen -13 KPX W i -1 KPX W o -29 KPX W oslash -25 KPX W period -56 KPX W r -28 KPX W semicolon -53 KPX W u -28 KPX W y -6 KPX X C -48 KPX X O -45 KPX X Odieresis -45 KPX X Q -44 KPX X a -15 KPX X e -36 KPX X hyphen -51 KPX X o -33 KPX X u -24 KPX X y -61 KPX Y A -96 KPX Y AE -103 KPX Y Aacute -96 KPX Y Acircumflex -96 KPX Y Adieresis -96 KPX Y Agrave -96 KPX Y Aring -96 KPX Y Atilde -96 KPX Y C -58 KPX Y G -58 KPX Y O -56 KPX Y Oacute -56 KPX Y Ocircumflex -56 KPX Y Odieresis -56 KPX Y Ograve -56 KPX Y Oslash -54 KPX Y Otilde -56 KPX Y S -41 KPX Y T 23 KPX Y a -88 KPX Y ae -84 KPX Y colon -87 KPX Y comma -111 KPX Y e -89 KPX Y g -83 KPX Y guillemotleft -123 KPX Y guilsinglleft -119 KPX Y hyphen -84 KPX Y i 3 KPX Y o -86 KPX Y oslash -82 KPX Y p -54 KPX Y period -111 KPX Y semicolon -88 KPX Y u -63 KPX Y v -36 KPX Z v -33 KPX Z y -38 KPX a j -4 KPX a quoteright -23 KPX a v -21 KPX a w -13 KPX a y -26 KPX aacute v -21 KPX aacute w -13 KPX aacute y -26 KPX adieresis v -21 KPX adieresis w -13 KPX adieresis y -26 KPX ae v -16 KPX ae w -10 KPX ae y -20 KPX agrave v -21 KPX agrave w -13 KPX agrave y -26 KPX aring v -21 KPX aring w -13 KPX aring y -26 KPX b v -11 KPX b w -3 KPX b y -15 KPX c h 1 KPX c k 7 KPX comma one -100 KPX comma quotedblright -41 KPX comma quoteright -50 KPX e quoteright -18 KPX e t -10 KPX e v -15 KPX e w -9 KPX e x -27 KPX e y -19 KPX eacute v -15 KPX eacute w -9 KPX eacute y -19 KPX ecircumflex v -15 KPX ecircumflex w -9 KPX ecircumflex y -19 KPX eight four 1 KPX eight one -48 KPX eight seven -33 KPX f a -9 KPX f aacute -9 KPX f adieresis -9 KPX f ae -5 KPX f aring -9 KPX f e -15 KPX f eacute -15 KPX f f 22 KPX f i -2 KPX f j -4 KPX f l -3 KPX f o -10 KPX f oacute -10 KPX f odieresis -10 KPX f oe -12 KPX f oslash -9 KPX f quoteright 0 KPX f s 0 KPX f t 24 KPX five four 1 KPX five one -76 KPX five seven -26 KPX four four 5 KPX four one -84 KPX four seven -56 KPX g a -5 KPX g adieresis -5 KPX g ae -1 KPX g aring -5 KPX g e 0 KPX g eacute 0 KPX g l 0 KPX g oacute 3 KPX g odieresis 3 KPX g r 0 KPX guillemotright A -50 KPX guillemotright AE -54 KPX guillemotright Aacute -50 KPX guillemotright Adieresis -50 KPX guillemotright Aring -50 KPX guillemotright T -126 KPX guillemotright V -93 KPX guillemotright W -66 KPX guillemotright Y -133 KPX guilsinglright A -44 KPX guilsinglright AE -48 KPX guilsinglright Aacute -44 KPX guilsinglright Adieresis -44 KPX guilsinglright Aring -44 KPX guilsinglright T -121 KPX guilsinglright V -88 KPX guilsinglright W -60 KPX guilsinglright Y -128 KPX h quoteright -15 KPX h y -18 KPX hyphen A -7 KPX hyphen AE -11 KPX hyphen Aacute -7 KPX hyphen Adieresis -7 KPX hyphen Aring -7 KPX hyphen T -80 KPX hyphen V -46 KPX hyphen W -19 KPX hyphen Y -92 KPX i T -7 KPX i j -3 KPX k a -2 KPX k aacute -2 KPX k adieresis -2 KPX k ae 2 KPX k aring -2 KPX k comma 0 KPX k e -21 KPX k eacute -21 KPX k g -16 KPX k hyphen -41 KPX k o -19 KPX k oacute -19 KPX k odieresis -19 KPX k period 0 KPX k s -3 KPX k u -11 KPX k udieresis -6 KPX l v 0 KPX l y -5 KPX m p 5 KPX m v -13 KPX m w -7 KPX m y -18 KPX n T -96 KPX n p 5 KPX n quoteright -14 KPX n v -13 KPX n w -7 KPX n y -18 KPX nine four -3 KPX nine one -43 KPX nine seven -37 KPX o T -99 KPX o quoteright -21 KPX o t -10 KPX o v -18 KPX o w -10 KPX o x -27 KPX o y -22 KPX oacute v -18 KPX oacute w -10 KPX oacute y -22 KPX ocircumflex t -10 KPX odieresis t -10 KPX odieresis v -18 KPX odieresis w -10 KPX odieresis x -27 KPX odieresis y -22 KPX ograve v -18 KPX ograve w -10 KPX ograve y -22 KPX one comma -74 KPX one eight -65 KPX one five -67 KPX one four -81 KPX one nine -65 KPX one one -118 KPX one period -74 KPX one seven -90 KPX one six -62 KPX one three -67 KPX one two -69 KPX one zero -62 KPX p t -4 KPX p y -16 KPX period one -101 KPX period quotedblright -41 KPX period quoteright -51 KPX q c 8 KPX q u 4 KPX quotedblbase A 30 KPX quotedblbase AE 30 KPX quotedblbase T -75 KPX quotedblbase V -69 KPX quotedblbase W -34 KPX quotedblbase Y -91 KPX quotedblleft A -52 KPX quotedblleft AE -64 KPX quotedblleft Aacute -52 KPX quotedblleft Adieresis -52 KPX quotedblleft Aring -52 KPX quotedblleft T 9 KPX quotedblleft V 15 KPX quotedblleft W 27 KPX quotedblleft Y 5 KPX quotedblright A -53 KPX quotedblright AE -66 KPX quotedblright Aacute -53 KPX quotedblright Adieresis -53 KPX quotedblright Aring -53 KPX quotedblright T 11 KPX quotedblright V 15 KPX quotedblright W 26 KPX quotedblright Y 7 KPX quoteleft A -67 KPX quoteleft AE -79 KPX quoteleft Aacute -67 KPX quoteleft Adieresis -67 KPX quoteleft Aring -67 KPX quoteleft T -5 KPX quoteleft V 0 KPX quoteleft W 12 KPX quoteleft Y -9 KPX quoteright A -72 KPX quoteright AE -85 KPX quoteright Aacute -72 KPX quoteright Adieresis -72 KPX quoteright Aring -72 KPX quoteright comma -60 KPX quoteright d -20 KPX quoteright o -26 KPX quoteright period -60 KPX quoteright r -18 KPX quoteright s -18 KPX quoteright t -7 KPX quoteright v -2 KPX quoteright w 2 KPX quoteright y -6 KPX r a -5 KPX r aacute -5 KPX r acircumflex -5 KPX r adieresis -5 KPX r ae -1 KPX r agrave -5 KPX r aring -5 KPX r c -6 KPX r ccedilla -9 KPX r colon -22 KPX r comma -69 KPX r d -1 KPX r e -11 KPX r eacute -11 KPX r ecircumflex -11 KPX r egrave -11 KPX r f 26 KPX r g -4 KPX r h 0 KPX r hyphen -47 KPX r i 1 KPX r j 0 KPX r k 6 KPX r l 1 KPX r m 0 KPX r n 0 KPX r o -6 KPX r oacute -6 KPX r ocircumflex -6 KPX r odieresis -6 KPX r oe -8 KPX r ograve -6 KPX r oslash -6 KPX r p 8 KPX r period -69 KPX r q -3 KPX r quoteright 1 KPX r r 0 KPX r s 4 KPX r semicolon -22 KPX r t 28 KPX r u 2 KPX r v 29 KPX r w 31 KPX r x 20 KPX r y 24 KPX r z 9 KPX s quoteright -22 KPX s t -3 KPX seven colon -77 KPX seven comma -119 KPX seven eight -28 KPX seven five -30 KPX seven four -93 KPX seven one -53 KPX seven period -119 KPX seven seven -4 KPX seven six -40 KPX seven three -23 KPX seven two -28 KPX six four 1 KPX six one -43 KPX six seven -30 KPX t S -8 KPX t a -1 KPX t aacute -1 KPX t adieresis -1 KPX t ae 2 KPX t aring -1 KPX t colon -28 KPX t e -14 KPX t eacute -14 KPX t h -3 KPX t o -12 KPX t oacute -12 KPX t odieresis -12 KPX t quoteright -1 KPX t semicolon -28 KPX three four -2 KPX three one -49 KPX three seven -33 KPX two four -37 KPX two one -36 KPX two seven -25 KPX u quoteright -8 KPX v a -18 KPX v aacute -18 KPX v acircumflex -18 KPX v adieresis -18 KPX v ae -14 KPX v agrave -18 KPX v aring -18 KPX v atilde -18 KPX v c -16 KPX v colon -23 KPX v comma -69 KPX v e -21 KPX v eacute -21 KPX v ecircumflex -21 KPX v egrave -21 KPX v g -14 KPX v hyphen -12 KPX v l 0 KPX v o -17 KPX v oacute -17 KPX v odieresis -17 KPX v ograve -17 KPX v oslash -17 KPX v period -69 KPX v s -9 KPX v semicolon -23 KPX w a -15 KPX w aacute -15 KPX w acircumflex -15 KPX w adieresis -15 KPX w ae -11 KPX w agrave -15 KPX w aring -15 KPX w atilde -15 KPX w c -7 KPX w colon -23 KPX w comma -50 KPX w e -12 KPX w eacute -12 KPX w ecircumflex -12 KPX w egrave -12 KPX w g -6 KPX w hyphen -1 KPX w l 0 KPX w o -9 KPX w oacute -9 KPX w odieresis -9 KPX w ograve -9 KPX w oslash -6 KPX w period -50 KPX w s -5 KPX w semicolon -23 KPX x a -17 KPX x c -23 KPX x e -28 KPX x eacute -28 KPX x o -25 KPX x q -20 KPX y a -22 KPX y aacute -22 KPX y acircumflex -22 KPX y adieresis -22 KPX y ae -18 KPX y agrave -22 KPX y aring -22 KPX y atilde -22 KPX y c -19 KPX y colon -27 KPX y comma -70 KPX y e -24 KPX y eacute -24 KPX y ecircumflex -24 KPX y egrave -24 KPX y g -17 KPX y hyphen -14 KPX y l -4 KPX y o -20 KPX y oacute -20 KPX y odieresis -20 KPX y ograve -20 KPX y oslash -19 KPX y period -70 KPX y s -12 KPX y semicolon -27 KPX zero four -2 KPX zero one -46 KPX zero seven -39 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Helvetica-BoldOblique.afm0100664000212600000240000007623007477306250017665 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Helvetica-BoldOblique FullName Helvetica Bold Oblique FamilyName Helvetica Weight Bold ItalicAngle -12.0 IsFixedPitch false UnderlinePosition -111 UnderlineThickness 69 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -177 -309 1107 953 CapHeight 729 XHeight 540 Descender -217 Ascender 729 StartCharMetrics 316 C 32 ; WX 278 ; N space ; B 245 0 245 0 ; C 33 ; WX 333 ; N exclam ; B 112 0 417 726 ; C 34 ; WX 474 ; N quotedbl ; B 177 470 579 729 ; C 35 ; WX 556 ; N numbersign ; B 33 -32 660 697 ; C 36 ; WX 556 ; N dollar ; B 59 -126 628 763 ; C 37 ; WX 889 ; N percent ; B 129 -20 903 709 ; C 38 ; WX 722 ; N ampersand ; B 89 -23 720 723 ; C 39 ; WX 278 ; N quoteright ; B 165 469 356 729 ; C 40 ; WX 333 ; N parenleft ; B 84 -200 458 729 ; C 41 ; WX 333 ; N parenright ; B -21 -200 356 729 ; C 42 ; WX 389 ; N asterisk ; B 145 407 478 729 ; C 43 ; WX 584 ; N plus ; B 87 -10 596 473 ; C 44 ; WX 278 ; N comma ; B 27 -174 245 146 ; C 45 ; WX 333 ; N hyphen ; B 70 207 371 342 ; C 46 ; WX 278 ; N period ; B 64 0 245 146 ; C 47 ; WX 278 ; N slash ; B -1 -14 427 714 ; C 48 ; WX 556 ; N zero ; B 81 -23 614 724 ; C 49 ; WX 556 ; N one ; B 172 0 529 709 ; C 50 ; WX 556 ; N two ; B 30 0 628 724 ; C 51 ; WX 556 ; N three ; B 67 -23 613 724 ; C 52 ; WX 556 ; N four ; B 57 0 599 709 ; C 53 ; WX 556 ; N five ; B 59 -23 641 709 ; C 54 ; WX 556 ; N six ; B 85 -23 625 724 ; C 55 ; WX 556 ; N seven ; B 131 0 679 709 ; C 56 ; WX 556 ; N eight ; B 60 -23 620 724 ; C 57 ; WX 556 ; N nine ; B 68 -23 611 724 ; C 58 ; WX 333 ; N colon ; B 113 0 374 520 ; C 59 ; WX 333 ; N semicolon ; B 76 -174 374 520 ; C 60 ; WX 584 ; N less ; B 77 -10 630 474 ; C 61 ; WX 584 ; N equal ; B 61 52 622 412 ; C 62 ; WX 584 ; N greater ; B 38 -10 591 474 ; C 63 ; WX 611 ; N question ; B 168 0 672 744 ; C 64 ; WX 975 ; N at ; B 73 -137 1032 745 ; C 65 ; WX 722 ; N A ; B 26 0 703 729 ; C 66 ; WX 722 ; N B ; B 82 0 762 729 ; C 67 ; WX 722 ; N C ; B 107 -23 793 741 ; C 68 ; WX 722 ; N D ; B 77 0 776 729 ; C 69 ; WX 667 ; N E ; B 79 0 762 729 ; C 70 ; WX 611 ; N F ; B 74 0 741 729 ; C 71 ; WX 778 ; N G ; B 107 -23 819 741 ; C 72 ; WX 722 ; N H ; B 68 0 812 729 ; C 73 ; WX 278 ; N I ; B 63 0 368 729 ; C 74 ; WX 556 ; N J ; B 59 -23 641 729 ; C 75 ; WX 722 ; N K ; B 74 0 843 729 ; C 76 ; WX 611 ; N L ; B 80 0 606 729 ; C 77 ; WX 833 ; N M ; B 66 0 931 729 ; C 78 ; WX 722 ; N N ; B 68 0 816 729 ; C 79 ; WX 778 ; N O ; B 106 -23 828 741 ; C 80 ; WX 667 ; N P ; B 76 0 747 729 ; C 81 ; WX 778 ; N Q ; B 109 -54 831 741 ; C 82 ; WX 722 ; N R ; B 80 0 785 729 ; C 83 ; WX 667 ; N S ; B 76 -23 725 741 ; C 84 ; WX 611 ; N T ; B 142 0 753 729 ; C 85 ; WX 722 ; N U ; B 119 -23 809 729 ; C 86 ; WX 667 ; N V ; B 179 0 802 729 ; C 87 ; WX 944 ; N W ; B 168 0 1087 729 ; C 88 ; WX 667 ; N X ; B 22 0 802 729 ; C 89 ; WX 667 ; N Y ; B 182 0 805 729 ; C 90 ; WX 611 ; N Z ; B 30 0 733 729 ; C 91 ; WX 333 ; N bracketleft ; B 23 -200 463 729 ; C 92 ; WX 278 ; N backslash ; B 138 -23 285 709 ; C 93 ; WX 333 ; N bracketright ; B -25 -200 415 729 ; C 94 ; WX 584 ; N asciicircum ; B 119 270 580 695 ; C 95 ; WX 556 ; N underscore ; B -65 -145 550 -76 ; C 96 ; WX 278 ; N quoteleft ; B 167 469 357 729 ; C 97 ; WX 556 ; N a ; B 50 -23 578 549 ; C 98 ; WX 611 ; N b ; B 59 -23 640 729 ; C 99 ; WX 556 ; N c ; B 77 -23 597 549 ; C 100 ; WX 611 ; N d ; B 79 -23 700 729 ; C 101 ; WX 556 ; N e ; B 64 -23 591 549 ; C 102 ; WX 333 ; N f ; B 90 0 464 729 ; C 103 ; WX 611 ; N g ; B 26 -218 656 549 ; C 104 ; WX 611 ; N h ; B 67 0 629 729 ; C 105 ; WX 278 ; N i ; B 67 0 362 729 ; C 106 ; WX 278 ; N j ; B -43 -218 365 729 ; C 107 ; WX 556 ; N k ; B 59 0 651 729 ; C 108 ; WX 278 ; N l ; B 67 0 362 729 ; C 109 ; WX 889 ; N m ; B 60 0 911 549 ; C 110 ; WX 611 ; N n ; B 63 0 629 549 ; C 111 ; WX 611 ; N o ; B 82 -23 634 549 ; C 112 ; WX 611 ; N p ; B 11 -218 637 549 ; C 113 ; WX 611 ; N q ; B 72 -218 659 549 ; C 114 ; WX 389 ; N r ; B 63 0 487 549 ; C 115 ; WX 556 ; N s ; B 60 -23 589 549 ; C 116 ; WX 333 ; N t ; B 101 -23 414 674 ; C 117 ; WX 611 ; N u ; B 88 -23 656 540 ; C 118 ; WX 556 ; N v ; B 129 0 651 540 ; C 119 ; WX 778 ; N w ; B 120 0 881 540 ; C 120 ; WX 556 ; N x ; B 16 0 648 540 ; C 121 ; WX 556 ; N y ; B 37 -219 653 540 ; C 122 ; WX 500 ; N z ; B 21 0 575 540 ; C 123 ; WX 389 ; N braceleft ; B 84 -200 472 729 ; C 124 ; WX 280 ; N bar ; B 57 -200 335 729 ; C 125 ; WX 389 ; N braceright ; B 29 -200 419 729 ; C 126 ; WX 584 ; N asciitilde ; B 97 142 581 314 ; C 161 ; WX 333 ; N exclamdown ; B 26 -186 331 540 ; C 162 ; WX 556 ; N cent ; B 79 -124 598 634 ; C 163 ; WX 556 ; N sterling ; B 49 -23 629 715 ; C 164 ; WX 167 ; N fraction ; B -177 -20 489 715 ; C 165 ; WX 556 ; N yen ; B 107 0 702 704 ; C 166 ; WX 556 ; N florin ; B -21 -220 690 744 ; C 167 ; WX 556 ; N section ; B 56 -201 596 723 ; C 168 ; WX 556 ; N currency ; B 66 100 644 604 ; C 169 ; WX 238 ; N quotesingle ; B 177 470 343 729 ; C 170 ; WX 500 ; N quotedblleft ; B 171 469 588 729 ; C 171 ; WX 556 ; N guillemotleft ; B 135 72 571 481 ; C 172 ; WX 333 ; N guilsinglleft ; B 128 72 351 481 ; C 173 ; WX 333 ; N guilsinglright ; B 96 72 319 481 ; C 174 ; WX 611 ; N fi ; B 85 0 703 729 ; C 175 ; WX 611 ; N fl ; B 88 0 701 729 ; C 177 ; WX 556 ; N endash ; B 35 207 624 311 ; C 178 ; WX 556 ; N dagger ; B 109 -194 626 709 ; C 179 ; WX 556 ; N daggerdbl ; B 35 -194 623 709 ; C 180 ; WX 278 ; N periodcentered ; B 143 182 270 282 ; C 182 ; WX 556 ; N paragraph ; B 121 -191 684 729 ; C 183 ; WX 350 ; N bullet ; B 111 175 367 425 ; C 184 ; WX 278 ; N quotesinglbase ; B 37 -135 228 125 ; C 185 ; WX 500 ; N quotedblbase ; B 37 -135 462 125 ; C 186 ; WX 500 ; N quotedblright ; B 173 469 595 729 ; C 187 ; WX 556 ; N guillemotright ; B 103 72 533 481 ; C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ; C 189 ; WX 1000 ; N perthousand ; B 72 -21 1021 739 ; C 191 ; WX 611 ; N questiondown ; B 52 -204 556 540 ; C 193 ; WX 333 ; N grave ; B 175 607 339 757 ; C 194 ; WX 333 ; N acute ; B 247 607 475 757 ; C 195 ; WX 333 ; N circumflex ; B 135 610 453 757 ; C 196 ; WX 333 ; N tilde ; B 117 622 500 744 ; C 197 ; WX 333 ; N macron ; B 150 642 467 722 ; C 198 ; WX 333 ; N breve ; B 188 611 455 754 ; C 199 ; WX 333 ; N dotaccent ; B 241 621 377 741 ; C 200 ; WX 333 ; N dieresis ; B 147 621 469 741 ; C 202 ; WX 333 ; N ring ; B 214 593 398 773 ; C 203 ; WX 333 ; N cedilla ; B -13 -220 270 0 ; C 205 ; WX 333 ; N hungarumlaut ; B 82 610 498 757 ; C 206 ; WX 333 ; N ogonek ; B 23 -233 248 0 ; C 207 ; WX 333 ; N caron ; B 167 610 485 757 ; C 208 ; WX 1000 ; N emdash ; B 37 207 1070 311 ; C 225 ; WX 1000 ; N AE ; B 1 0 1104 729 ; C 227 ; WX 370 ; N ordfeminine ; B 96 262 451 729 ; C 232 ; WX 611 ; N Lslash ; B 54 0 624 729 ; C 233 ; WX 778 ; N Oslash ; B 34 -39 906 749 ; C 234 ; WX 1000 ; N OE ; B 90 -23 1107 741 ; C 235 ; WX 365 ; N ordmasculine ; B 92 262 471 729 ; C 241 ; WX 889 ; N ae ; B 54 -23 927 549 ; C 245 ; WX 278 ; N dotlessi ; B 67 0 322 540 ; C 248 ; WX 278 ; N lslash ; B 50 0 372 729 ; C 249 ; WX 611 ; N oslash ; B 12 -38 709 557 ; C 250 ; WX 944 ; N oe ; B 71 -23 986 549 ; C 251 ; WX 611 ; N germandbls ; B 67 -23 654 729 ; C -1 ; WX 722 ; N Udieresis ; B 119 -23 809 920 ; C -1 ; WX 722 ; N Uacute ; B 119 -23 809 936 ; C -1 ; WX 667 ; N Scedilla ; B 76 -220 725 741 ; C -1 ; WX 611 ; N Tcaron ; B 142 0 753 936 ; C -1 ; WX 667 ; N Scaron ; B 76 -23 725 936 ; C -1 ; WX 722 ; N Rcaron ; B 80 0 785 936 ; C -1 ; WX 722 ; N Racute ; B 80 0 785 936 ; C -1 ; WX 667 ; N Sacute ; B 76 -23 725 936 ; C -1 ; WX 778 ; N Otilde ; B 106 -23 828 923 ; C -1 ; WX 611 ; N ucircumflex ; B 88 -23 656 757 ; C -1 ; WX 778 ; N Ohungarumlaut ; B 106 -23 841 936 ; C -1 ; WX 722 ; N Uhungarumlaut ; B 119 -23 809 936 ; C -1 ; WX 667 ; N Yacute ; B 182 0 805 936 ; C -1 ; WX 722 ; N Eth ; B 73 0 776 729 ; C -1 ; WX 722 ; N Dcroat ; B 73 0 776 729 ; C -1 ; WX 611 ; N Zacute ; B 30 0 733 936 ; C -1 ; WX 722 ; N Uring ; B 119 -23 809 953 ; C -1 ; WX 611 ; N gbreve ; B 26 -218 656 754 ; C -1 ; WX 556 ; N eogonek ; B 64 -233 591 549 ; C -1 ; WX 556 ; N edotaccent ; B 64 -23 591 741 ; C -1 ; WX 556 ; N ecaron ; B 64 -23 593 757 ; C -1 ; WX 722 ; N Ugrave ; B 119 -23 809 936 ; C -1 ; WX 667 ; N Thorn ; B 76 0 721 729 ; C -1 ; WX 556 ; N eacute ; B 64 -23 591 757 ; C -1 ; WX 556 ; N edieresis ; B 64 -23 591 741 ; C -1 ; WX 722 ; N dcaron ; B 79 -23 882 729 ; C -1 ; WX 556 ; N ccedilla ; B 77 -220 597 549 ; C -1 ; WX 556 ; N ccaron ; B 77 -23 607 757 ; C -1 ; WX 556 ; N cacute ; B 77 -23 597 757 ; C -1 ; WX 556 ; N aogonek ; B 50 -233 578 549 ; C -1 ; WX 556 ; N aring ; B 50 -23 578 773 ; C -1 ; WX 556 ; N atilde ; B 50 -23 612 744 ; C -1 ; WX 556 ; N abreve ; B 50 -23 578 754 ; C -1 ; WX 556 ; N egrave ; B 64 -23 591 757 ; C -1 ; WX 556 ; N agrave ; B 50 -23 578 757 ; C -1 ; WX 556 ; N aacute ; B 50 -23 587 757 ; C -1 ; WX 556 ; N adieresis ; B 50 -23 581 741 ; C -1 ; WX 722 ; N Uogonek ; B 119 -233 809 729 ; C -1 ; WX 611 ; N ugrave ; B 88 -23 656 757 ; C -1 ; WX 611 ; N uacute ; B 88 -23 656 757 ; C -1 ; WX 611 ; N udieresis ; B 88 -23 656 741 ; C -1 ; WX 404 ; N tcaron ; B 101 -23 578 829 ; C -1 ; WX 556 ; N scommaaccent ; B 60 -307 589 549 ; C -1 ; WX 611 ; N Zcaron ; B 30 0 733 936 ; C -1 ; WX 556 ; N ecircumflex ; B 64 -23 591 757 ; C -1 ; WX 722 ; N Ucircumflex ; B 119 -23 809 936 ; C -1 ; WX 556 ; N acircumflex ; B 50 -23 578 757 ; C -1 ; WX 611 ; N Zdotaccent ; B 30 0 733 918 ; C -1 ; WX 556 ; N scaron ; B 60 -23 597 757 ; C -1 ; WX 722 ; N Amacron ; B 26 0 706 901 ; C -1 ; WX 556 ; N sacute ; B 60 -23 589 757 ; C -1 ; WX 611 ; N Tcommaaccent ; B 142 -307 753 729 ; C -1 ; WX 667 ; N Ydieresis ; B 182 0 805 920 ; C -1 ; WX 611 ; N thorn ; B 11 -218 637 729 ; C -1 ; WX 667 ; N Emacron ; B 79 0 762 901 ; C -1 ; WX 778 ; N Ograve ; B 106 -23 828 936 ; C -1 ; WX 778 ; N Oacute ; B 106 -23 828 936 ; C -1 ; WX 778 ; N Odieresis ; B 106 -23 828 920 ; C -1 ; WX 722 ; N Ntilde ; B 68 0 816 923 ; C -1 ; WX 722 ; N Ncaron ; B 68 0 816 936 ; C -1 ; WX 722 ; N Nacute ; B 68 0 816 936 ; C -1 ; WX 611 ; N Lcaron ; B 80 0 607 729 ; C -1 ; WX 611 ; N Lacute ; B 80 0 606 936 ; C -1 ; WX 278 ; N Idotaccent ; B 63 0 388 918 ; C -1 ; WX 389 ; N racute ; B 63 0 500 757 ; C -1 ; WX 278 ; N Icircumflex ; B 63 0 467 936 ; C -1 ; WX 611 ; N ohungarumlaut ; B 82 -23 710 757 ; C -1 ; WX 611 ; N otilde ; B 82 -23 639 744 ; C -1 ; WX 556 ; N Euro ; B 21 -23 648 724 ; C -1 ; WX 611 ; N ocircumflex ; B 82 -23 634 757 ; C -1 ; WX 444 ; N onesuperior ; B 210 284 438 709 ; C -1 ; WX 444 ; N twosuperior ; B 124 284 499 718 ; C -1 ; WX 444 ; N threesuperior ; B 147 271 490 718 ; C -1 ; WX 278 ; N Igrave ; B 63 0 368 936 ; C -1 ; WX 278 ; N Iacute ; B 63 0 489 936 ; C -1 ; WX 278 ; N Imacron ; B 63 0 466 901 ; C -1 ; WX 278 ; N Iogonek ; B 7 -233 368 729 ; C -1 ; WX 278 ; N Idieresis ; B 63 0 483 920 ; C -1 ; WX 778 ; N Gbreve ; B 107 -23 819 934 ; C -1 ; WX 722 ; N Umacron ; B 119 -23 809 901 ; C -1 ; WX 722 ; N Kcommaaccent ; B 74 -307 843 729 ; C -1 ; WX 611 ; N ograve ; B 82 -23 634 757 ; C -1 ; WX 667 ; N Scommaaccent ; B 76 -307 725 741 ; C -1 ; WX 667 ; N Eogonek ; B 79 -233 762 729 ; C -1 ; WX 611 ; N oacute ; B 82 -23 634 757 ; C -1 ; WX 667 ; N Edotaccent ; B 79 0 762 918 ; C -1 ; WX 268 ; N iogonek ; B 0 -233 351 729 ; C -1 ; WX 611 ; N gcommaaccent ; B 26 -218 656 854 ; C -1 ; WX 611 ; N odieresis ; B 82 -23 634 741 ; C -1 ; WX 611 ; N ntilde ; B 63 0 646 744 ; C -1 ; WX 611 ; N ncaron ; B 63 0 629 757 ; C -1 ; WX 667 ; N Ecaron ; B 79 0 762 936 ; C -1 ; WX 667 ; N Ecircumflex ; B 79 0 762 936 ; C -1 ; WX 556 ; N scedilla ; B 60 -220 589 549 ; C -1 ; WX 389 ; N rcaron ; B 63 0 533 757 ; C -1 ; WX 667 ; N Egrave ; B 79 0 762 936 ; C -1 ; WX 667 ; N Eacute ; B 79 0 762 936 ; C -1 ; WX 778 ; N Gcommaaccent ; B 107 -307 819 741 ; C -1 ; WX 722 ; N Rcommaaccent ; B 80 -307 785 729 ; C -1 ; WX 667 ; N Edieresis ; B 79 0 762 920 ; C -1 ; WX 611 ; N nacute ; B 63 0 629 757 ; C -1 ; WX 611 ; N uogonek ; B 88 -233 656 540 ; C -1 ; WX 611 ; N umacron ; B 88 -23 656 722 ; C -1 ; WX 722 ; N Dcaron ; B 77 0 776 936 ; C -1 ; WX 384 ; N lcaron ; B 67 0 544 729 ; C -1 ; WX 722 ; N Ccaron ; B 107 -23 793 936 ; C -1 ; WX 722 ; N Cacute ; B 107 -23 793 936 ; C -1 ; WX 722 ; N Ccedilla ; B 107 -220 793 741 ; C -1 ; WX 606 ; N degree ; B 240 383 543 686 ; C -1 ; WX 722 ; N Aogonek ; B 26 -233 703 729 ; C -1 ; WX 584 ; N minus ; B 77 172 606 292 ; C -1 ; WX 584 ; N multiply ; B 102 18 582 444 ; C -1 ; WX 584 ; N divide ; B 77 0 606 462 ; C -1 ; WX 722 ; N Aring ; B 26 0 703 953 ; C -1 ; WX 1000 ; N trademark ; B 213 273 1087 729 ; C -1 ; WX 389 ; N rcommaaccent ; B 8 -307 487 549 ; C -1 ; WX 278 ; N lacute ; B 67 0 474 936 ; C -1 ; WX 611 ; N omacron ; B 82 -23 634 722 ; C -1 ; WX 722 ; N Atilde ; B 26 0 739 923 ; C -1 ; WX 278 ; N icircumflex ; B 67 0 426 757 ; C -1 ; WX 278 ; N igrave ; B 67 0 322 757 ; C -1 ; WX 611 ; N ncommaaccent ; B 63 -307 629 549 ; C -1 ; WX 278 ; N lcommaaccent ; B 11 -307 362 729 ; C -1 ; WX 584 ; N plusminus ; B 50 0 630 633 ; C -1 ; WX 1055 ; N onehalf ; B 210 -20 1050 715 ; C -1 ; WX 1055 ; N onequarter ; B 210 -20 1032 715 ; C -1 ; WX 1055 ; N threequarters ; B 147 -20 1032 718 ; C -1 ; WX 278 ; N iacute ; B 67 0 448 757 ; C -1 ; WX 722 ; N Abreve ; B 26 0 703 934 ; C -1 ; WX 556 ; N kcommaaccent ; B 59 -307 651 729 ; C -1 ; WX 778 ; N Omacron ; B 106 -23 828 901 ; C -1 ; WX 278 ; N imacron ; B 67 0 424 722 ; C -1 ; WX 556 ; N emacron ; B 64 -23 591 722 ; C -1 ; WX 556 ; N amacron ; B 50 -23 579 722 ; C -1 ; WX 333 ; N tcommaaccent ; B 62 -307 414 674 ; C -1 ; WX 556 ; N ydieresis ; B 37 -219 653 741 ; C -1 ; WX 500 ; N zdotaccent ; B 21 0 575 741 ; C -1 ; WX 500 ; N zcaron ; B 21 0 575 757 ; C -1 ; WX 500 ; N zacute ; B 21 0 575 757 ; C -1 ; WX 556 ; N yacute ; B 37 -219 653 757 ; C -1 ; WX 611 ; N uhungarumlaut ; B 88 -23 697 757 ; C -1 ; WX 611 ; N eth ; B 83 -23 633 744 ; C -1 ; WX 611 ; N uring ; B 88 -23 656 773 ; C -1 ; WX 778 ; N Ocircumflex ; B 106 -23 828 936 ; C -1 ; WX 333 ; N commaaccent ; B 43 -307 217 -60 ; C -1 ; WX 737 ; N copyright ; B 54 -22 837 743 ; C -1 ; WX 737 ; N registered ; B 55 -22 837 743 ; C -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ; C -1 ; WX 278 ; N idieresis ; B 67 0 442 741 ; C -1 ; WX 489 ; N lozenge ; B 95 0 541 744 ; C -1 ; WX 729 ; N Delta ; B 8 0 721 729 ; C -1 ; WX 584 ; N notequal ; B 61 -74 622 544 ; C -1 ; WX 542 ; N radical ; B 102 -36 705 913 ; C -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ; C -1 ; WX 722 ; N Aacute ; B 26 0 714 936 ; C -1 ; WX 584 ; N lessequal ; B 35 0 657 624 ; C -1 ; WX 584 ; N greaterequal ; B 44 0 627 624 ; C -1 ; WX 584 ; N logicalnot ; B 103 86 632 376 ; C -1 ; WX 711 ; N summation ; B -18 -97 760 760 ; C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ; C -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 816 729 ; C -1 ; WX 611 ; N dcroat ; B 79 -23 746 729 ; C -1 ; WX 280 ; N brokenbar ; B 57 -200 335 729 ; C -1 ; WX 611 ; N Lcommaaccent ; B 80 -309 606 729 ; C -1 ; WX 722 ; N Adieresis ; B 26 0 708 920 ; C -1 ; WX 611 ; N mu ; B 11 -220 655 540 ; C -1 ; WX 278 ; N .notdef ; B 245 0 245 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -36 KPX A Ccedilla -36 KPX A G -38 KPX A O -37 KPX A Odieresis -37 KPX A Q -39 KPX A T -91 KPX A U -37 KPX A Uacute -37 KPX A Ucircumflex -37 KPX A Udieresis -37 KPX A Ugrave -37 KPX A V -74 KPX A W -57 KPX A Y -96 KPX A a -11 KPX A b -10 KPX A c -17 KPX A ccedilla -17 KPX A comma 9 KPX A d -17 KPX A e -10 KPX A g -20 KPX A guillemotleft -48 KPX A guilsinglleft -44 KPX A hyphen 2 KPX A o -19 KPX A period 13 KPX A q -13 KPX A quotedblright -71 KPX A quoteright -67 KPX A t -21 KPX A u -17 KPX A v -42 KPX A w -28 KPX A y -41 KPX Aacute C -37 KPX Aacute G -38 KPX Aacute O -38 KPX Aacute Q -40 KPX Aacute T -91 KPX Aacute U -38 KPX Aacute V -74 KPX Aacute W -57 KPX Aacute Y -96 KPX Aacute a -11 KPX Aacute b -10 KPX Aacute c -17 KPX Aacute comma 9 KPX Aacute d -17 KPX Aacute e -11 KPX Aacute g -20 KPX Aacute guillemotleft -48 KPX Aacute guilsinglleft -45 KPX Aacute hyphen 2 KPX Aacute o -20 KPX Aacute period 12 KPX Aacute q -14 KPX Aacute quoteright -67 KPX Aacute t -22 KPX Aacute u -18 KPX Aacute v -42 KPX Aacute w -29 KPX Aacute y -41 KPX Acircumflex C -36 KPX Acircumflex G -38 KPX Acircumflex O -37 KPX Acircumflex Q -39 KPX Acircumflex T -91 KPX Acircumflex U -37 KPX Acircumflex V -74 KPX Acircumflex W -57 KPX Acircumflex Y -96 KPX Acircumflex comma 9 KPX Acircumflex period 13 KPX Adieresis C -37 KPX Adieresis G -38 KPX Adieresis O -38 KPX Adieresis Q -39 KPX Adieresis T -91 KPX Adieresis U -38 KPX Adieresis V -74 KPX Adieresis W -57 KPX Adieresis Y -96 KPX Adieresis a -11 KPX Adieresis b -10 KPX Adieresis c -17 KPX Adieresis comma 9 KPX Adieresis d -17 KPX Adieresis g -20 KPX Adieresis guillemotleft -48 KPX Adieresis guilsinglleft -44 KPX Adieresis hyphen 2 KPX Adieresis o -20 KPX Adieresis period 12 KPX Adieresis q -13 KPX Adieresis quotedblright -71 KPX Adieresis quoteright -67 KPX Adieresis t -22 KPX Adieresis u -17 KPX Adieresis v -42 KPX Adieresis w -28 KPX Adieresis y -41 KPX Agrave C -36 KPX Agrave G -38 KPX Agrave O -37 KPX Agrave Q -39 KPX Agrave T -91 KPX Agrave U -37 KPX Agrave V -74 KPX Agrave W -57 KPX Agrave Y -96 KPX Agrave comma 9 KPX Agrave period 13 KPX Aring C -36 KPX Aring G -38 KPX Aring O -37 KPX Aring Q -39 KPX Aring T -91 KPX Aring U -37 KPX Aring V -74 KPX Aring W -57 KPX Aring Y -96 KPX Aring a -11 KPX Aring b -10 KPX Aring c -17 KPX Aring comma 9 KPX Aring d -17 KPX Aring e -10 KPX Aring g -20 KPX Aring guillemotleft -48 KPX Aring guilsinglleft -44 KPX Aring hyphen 2 KPX Aring o -19 KPX Aring period 13 KPX Aring q -13 KPX Aring quotedblright -71 KPX Aring quoteright -67 KPX Aring t -21 KPX Aring u -17 KPX Aring v -42 KPX Aring w -28 KPX Aring y -41 KPX Atilde C -38 KPX Atilde G -40 KPX Atilde O -39 KPX Atilde Q -41 KPX Atilde T -92 KPX Atilde U -39 KPX Atilde V -74 KPX Atilde W -57 KPX Atilde Y -96 KPX Atilde comma 9 KPX Atilde period 11 KPX B A -41 KPX B AE -30 KPX B Aacute -41 KPX B Acircumflex -41 KPX B Adieresis -41 KPX B Aring -41 KPX B Atilde -41 KPX B O -18 KPX B OE -9 KPX B Oacute -18 KPX B Ocircumflex -18 KPX B Odieresis -18 KPX B Ograve -18 KPX B Oslash -17 KPX B V -46 KPX B W -30 KPX B Y -63 KPX C A -34 KPX C AE -23 KPX C Aacute -34 KPX C Adieresis -34 KPX C Aring -34 KPX C H -1 KPX C K -4 KPX C O -12 KPX C Oacute -12 KPX C Odieresis -12 KPX Ccedilla A -34 KPX D A -40 KPX D Aacute -40 KPX D Acircumflex -40 KPX D Adieresis -40 KPX D Agrave -40 KPX D Aring -40 KPX D Atilde -40 KPX D J -4 KPX D T -24 KPX D V -37 KPX D W -20 KPX D X -40 KPX D Y -62 KPX F A -68 KPX F Aacute -68 KPX F Acircumflex -68 KPX F Adieresis -68 KPX F Agrave -68 KPX F Aring -68 KPX F Atilde -68 KPX F J -33 KPX F O -24 KPX F Odieresis -24 KPX F a -23 KPX F aacute -23 KPX F adieresis -23 KPX F ae -26 KPX F aring -23 KPX F comma -84 KPX F e -12 KPX F eacute -12 KPX F hyphen 4 KPX F i -15 KPX F j -17 KPX F o -21 KPX F oacute -21 KPX F odieresis -21 KPX F oe -16 KPX F oslash -24 KPX F period -82 KPX F r -35 KPX F u -32 KPX G A -17 KPX G AE -5 KPX G Aacute -17 KPX G Acircumflex -17 KPX G Adieresis -17 KPX G Agrave -17 KPX G Aring -17 KPX G Atilde -17 KPX G T -28 KPX G V -41 KPX G W -25 KPX G Y -65 KPX J A -38 KPX J AE -29 KPX J Adieresis -38 KPX J Aring -38 KPX K C -59 KPX K G -61 KPX K O -60 KPX K OE -51 KPX K Oacute -60 KPX K Odieresis -60 KPX K S -45 KPX K T 5 KPX K a -17 KPX K adieresis -17 KPX K ae -17 KPX K aring -17 KPX K e -38 KPX K hyphen -52 KPX K o -45 KPX K oacute -45 KPX K odieresis -45 KPX K u -35 KPX K udieresis -35 KPX K y -74 KPX L A 0 KPX L AE 12 KPX L Aacute 0 KPX L Adieresis 0 KPX L Aring 0 KPX L C -35 KPX L Ccedilla -36 KPX L G -40 KPX L O -39 KPX L Oacute -39 KPX L Ocircumflex -39 KPX L Odieresis -39 KPX L Ograve -39 KPX L Otilde -39 KPX L S -14 KPX L T -104 KPX L U -35 KPX L Udieresis -35 KPX L V -102 KPX L W -79 KPX L Y -121 KPX L hyphen -20 KPX L quotedblright -147 KPX L quoteright -143 KPX L u -17 KPX L udieresis -17 KPX L y -64 KPX N A -15 KPX N AE -2 KPX N Aacute -15 KPX N Adieresis -15 KPX N Aring -15 KPX N C -1 KPX N Ccedilla -1 KPX N G -2 KPX N O -2 KPX N Oacute -2 KPX N Odieresis -2 KPX N a 5 KPX N aacute 5 KPX N adieresis 5 KPX N ae 4 KPX N aring 5 KPX N comma 7 KPX N e 10 KPX N eacute 10 KPX N o 1 KPX N oacute 1 KPX N odieresis 1 KPX N oslash 2 KPX N period 8 KPX N u 4 KPX N udieresis 4 KPX O A -42 KPX O AE -33 KPX O Aacute -42 KPX O Adieresis -42 KPX O Aring -42 KPX O T -32 KPX O V -40 KPX O W -24 KPX O X -43 KPX O Y -65 KPX Oacute A -42 KPX Oacute T -32 KPX Oacute V -40 KPX Oacute W -24 KPX Oacute Y -65 KPX Ocircumflex T -32 KPX Ocircumflex V -40 KPX Ocircumflex Y -65 KPX Odieresis A -42 KPX Odieresis T -32 KPX Odieresis V -40 KPX Odieresis W -24 KPX Odieresis X -43 KPX Odieresis Y -65 KPX Ograve T -32 KPX Ograve V -40 KPX Ograve Y -65 KPX Oslash A -34 KPX Otilde T -32 KPX Otilde V -40 KPX Otilde Y -65 KPX P A -71 KPX P AE -62 KPX P Aacute -71 KPX P Adieresis -71 KPX P Aring -71 KPX P J -52 KPX P a -14 KPX P aacute -14 KPX P adieresis -14 KPX P ae -15 KPX P aring -14 KPX P comma -103 KPX P e -13 KPX P eacute -13 KPX P hyphen -7 KPX P o -22 KPX P oacute -22 KPX P odieresis -22 KPX P oe -17 KPX P oslash -26 KPX P period -101 KPX R C -12 KPX R Ccedilla -12 KPX R G -13 KPX R O -13 KPX R OE -3 KPX R Oacute -13 KPX R Odieresis -13 KPX R T -12 KPX R U -12 KPX R Udieresis -12 KPX R V -38 KPX R W -22 KPX R Y -50 KPX R a -4 KPX R aacute -4 KPX R adieresis -4 KPX R ae -5 KPX R aring -4 KPX R e 0 KPX R eacute 0 KPX R hyphen 10 KPX R o -9 KPX R oacute -9 KPX R odieresis -9 KPX R oe -4 KPX R u -6 KPX R uacute -6 KPX R udieresis -6 KPX R y -4 KPX S A -26 KPX S AE -14 KPX S Aacute -26 KPX S Adieresis -26 KPX S Aring -26 KPX S T -15 KPX S V -36 KPX S W -20 KPX S Y -54 KPX S t -4 KPX T A -93 KPX T AE -85 KPX T Aacute -93 KPX T Acircumflex -93 KPX T Adieresis -93 KPX T Agrave -93 KPX T Aring -93 KPX T Atilde -93 KPX T C -29 KPX T G -30 KPX T J -95 KPX T O -30 KPX T OE -20 KPX T Oacute -30 KPX T Ocircumflex -30 KPX T Odieresis -30 KPX T Ograve -30 KPX T Oslash -36 KPX T Otilde -30 KPX T S -7 KPX T V 9 KPX T W 15 KPX T Y 7 KPX T a -77 KPX T ae -78 KPX T c -79 KPX T colon -104 KPX T comma -75 KPX T e -72 KPX T g -79 KPX T guillemotleft -107 KPX T guilsinglleft -103 KPX T hyphen -53 KPX T i -9 KPX T j -11 KPX T o -81 KPX T oslash -80 KPX T period -73 KPX T r -76 KPX T s -81 KPX T semicolon -105 KPX T u -78 KPX T v -91 KPX T w -85 KPX T y -89 KPX U A -40 KPX U AE -30 KPX U Aacute -40 KPX U Acircumflex -40 KPX U Adieresis -40 KPX U Aring -40 KPX U Atilde -40 KPX U comma -17 KPX U m -3 KPX U n -5 KPX U p -3 KPX U period -12 KPX U r -5 KPX Uacute A -40 KPX Uacute comma -17 KPX Uacute m -3 KPX Uacute n -5 KPX Uacute p -3 KPX Uacute period -12 KPX Uacute r -5 KPX Ucircumflex A -40 KPX Udieresis A -40 KPX Udieresis b -4 KPX Udieresis comma -17 KPX Udieresis m -3 KPX Udieresis n -5 KPX Udieresis p -3 KPX Udieresis period -12 KPX Udieresis r -5 KPX Ugrave A -40 KPX V A -75 KPX V AE -65 KPX V Aacute -75 KPX V Acircumflex -75 KPX V Adieresis -75 KPX V Agrave -75 KPX V Aring -75 KPX V Atilde -75 KPX V C -43 KPX V G -44 KPX V O -44 KPX V Oacute -44 KPX V Ocircumflex -44 KPX V Odieresis -44 KPX V Ograve -44 KPX V Oslash -42 KPX V Otilde -44 KPX V S -31 KPX V T 12 KPX V a -51 KPX V ae -52 KPX V colon -74 KPX V comma -76 KPX V e -46 KPX V g -54 KPX V guillemotleft -81 KPX V guilsinglleft -77 KPX V hyphen -26 KPX V i -13 KPX V o -56 KPX V oslash -55 KPX V period -74 KPX V r -43 KPX V semicolon -77 KPX V u -42 KPX V y -19 KPX W A -59 KPX W AE -50 KPX W Aacute -59 KPX W Acircumflex -59 KPX W Adieresis -59 KPX W Agrave -59 KPX W Aring -59 KPX W Atilde -59 KPX W C -28 KPX W G -29 KPX W O -29 KPX W Oacute -29 KPX W Ocircumflex -29 KPX W Odieresis -29 KPX W Ograve -29 KPX W Oslash -27 KPX W Otilde -29 KPX W S -22 KPX W T 16 KPX W a -34 KPX W ae -34 KPX W colon -61 KPX W comma -53 KPX W e -28 KPX W g -36 KPX W guillemotleft -63 KPX W guilsinglleft -59 KPX W hyphen -9 KPX W i -9 KPX W o -38 KPX W oslash -37 KPX W period -51 KPX W r -33 KPX W semicolon -63 KPX W u -32 KPX W y -9 KPX X C -39 KPX X O -40 KPX X Odieresis -40 KPX X Q -43 KPX X a -17 KPX X e -33 KPX X hyphen -33 KPX X o -43 KPX X u -35 KPX X y -48 KPX Y A -91 KPX Y AE -81 KPX Y Aacute -91 KPX Y Acircumflex -91 KPX Y Adieresis -91 KPX Y Agrave -91 KPX Y Aring -91 KPX Y Atilde -91 KPX Y C -60 KPX Y G -61 KPX Y O -61 KPX Y Oacute -61 KPX Y Ocircumflex -61 KPX Y Odieresis -61 KPX Y Ograve -61 KPX Y Oslash -58 KPX Y Otilde -61 KPX Y S -39 KPX Y T 14 KPX Y a -71 KPX Y ae -71 KPX Y colon -90 KPX Y comma -85 KPX Y e -66 KPX Y g -73 KPX Y guillemotleft -105 KPX Y guilsinglleft -101 KPX Y hyphen -55 KPX Y i -11 KPX Y o -76 KPX Y oslash -74 KPX Y p -53 KPX Y period -84 KPX Y semicolon -93 KPX Y u -57 KPX Y v -36 KPX Z v -21 KPX Z y -19 KPX a j -7 KPX a quoteright -14 KPX a v -23 KPX a w -10 KPX a y -24 KPX aacute v -23 KPX aacute w -10 KPX aacute y -24 KPX adieresis v -23 KPX adieresis w -10 KPX adieresis y -24 KPX ae v -21 KPX ae w -7 KPX ae y -23 KPX agrave v -23 KPX agrave w -10 KPX agrave y -24 KPX aring v -23 KPX aring w -10 KPX aring y -24 KPX b v -23 KPX b w -9 KPX b y -25 KPX c h -9 KPX c k -5 KPX comma one -79 KPX comma quotedblright -39 KPX comma quoteright -35 KPX e quoteright -13 KPX e t -9 KPX e v -22 KPX e w -9 KPX e x -25 KPX e y -25 KPX eacute v -22 KPX eacute w -9 KPX eacute y -25 KPX ecircumflex v -22 KPX ecircumflex w -9 KPX ecircumflex y -25 KPX eight four 2 KPX eight one -32 KPX eight seven -15 KPX f a -6 KPX f aacute -6 KPX f adieresis -6 KPX f ae -6 KPX f aring -6 KPX f e -6 KPX f eacute -6 KPX f f 14 KPX f i -13 KPX f j -15 KPX f l -13 KPX f o -16 KPX f oacute -16 KPX f odieresis -16 KPX f oe -11 KPX f oslash -16 KPX f quoteright 0 KPX f s -10 KPX f t 14 KPX five four -3 KPX five one -37 KPX five seven -17 KPX four four 0 KPX four one -55 KPX four seven -33 KPX g a -3 KPX g adieresis -3 KPX g ae -4 KPX g aring -3 KPX g e 1 KPX g eacute 1 KPX g l -5 KPX g oacute -8 KPX g odieresis -8 KPX g r -3 KPX guillemotright A -56 KPX guillemotright AE -46 KPX guillemotright Aacute -56 KPX guillemotright Adieresis -56 KPX guillemotright Aring -56 KPX guillemotright T -115 KPX guillemotright V -84 KPX guillemotright W -65 KPX guillemotright Y -117 KPX guilsinglright A -52 KPX guilsinglright AE -42 KPX guilsinglright Aacute -52 KPX guilsinglright Adieresis -52 KPX guilsinglright Aring -52 KPX guilsinglright T -110 KPX guilsinglright V -79 KPX guilsinglright W -60 KPX guilsinglright Y -113 KPX h quoteright -15 KPX h y -25 KPX hyphen A -7 KPX hyphen AE 2 KPX hyphen Aacute -7 KPX hyphen Adieresis -7 KPX hyphen Aring -7 KPX hyphen T -64 KPX hyphen V -34 KPX hyphen W -15 KPX hyphen Y -71 KPX i T -12 KPX i j -7 KPX k a -13 KPX k aacute -13 KPX k adieresis -13 KPX k ae -15 KPX k aring -13 KPX k comma -3 KPX k e -19 KPX k eacute -19 KPX k g -26 KPX k hyphen -31 KPX k o -28 KPX k oacute -28 KPX k odieresis -28 KPX k period -3 KPX k s -23 KPX k u -8 KPX k udieresis -8 KPX l v -14 KPX l y -11 KPX m p -1 KPX m v -23 KPX m w -9 KPX m y -23 KPX n T -87 KPX n p -2 KPX n quoteright -15 KPX n v -24 KPX n w -11 KPX n y -25 KPX nine four -6 KPX nine one -30 KPX nine seven -23 KPX o T -90 KPX o quoteright -19 KPX o t -13 KPX o v -27 KPX o w -13 KPX o x -30 KPX o y -29 KPX oacute v -27 KPX oacute w -13 KPX oacute y -29 KPX ocircumflex t -13 KPX odieresis t -13 KPX odieresis v -27 KPX odieresis w -13 KPX odieresis x -30 KPX odieresis y -29 KPX ograve v -27 KPX ograve w -13 KPX ograve y -29 KPX one comma -51 KPX one eight -47 KPX one five -50 KPX one four -70 KPX one nine -47 KPX one one -92 KPX one period -49 KPX one seven -72 KPX one six -48 KPX one three -53 KPX one two -56 KPX one zero -44 KPX p t -10 KPX p y -25 KPX period one -80 KPX period quotedblright -39 KPX period quoteright -35 KPX q c -3 KPX q u -3 KPX quotedblbase A 7 KPX quotedblbase AE 19 KPX quotedblbase T -79 KPX quotedblbase V -77 KPX quotedblbase W -54 KPX quotedblbase Y -96 KPX quotedblleft A -72 KPX quotedblleft AE -64 KPX quotedblleft Aacute -72 KPX quotedblleft Adieresis -72 KPX quotedblleft Aring -72 KPX quotedblleft T -11 KPX quotedblleft V 0 KPX quotedblleft W 9 KPX quotedblleft Y -15 KPX quotedblright A -72 KPX quotedblright AE -64 KPX quotedblright Aacute -72 KPX quotedblright Adieresis -72 KPX quotedblright Aring -72 KPX quotedblright T -7 KPX quotedblright V 1 KPX quotedblright W 11 KPX quotedblright Y -14 KPX quoteleft A -76 KPX quoteleft AE -69 KPX quoteleft Aacute -76 KPX quoteleft Adieresis -76 KPX quoteleft Aring -76 KPX quoteleft T -15 KPX quoteleft V -4 KPX quoteleft W 5 KPX quoteleft Y -20 KPX quoteright A -80 KPX quoteright AE -72 KPX quoteright Aacute -80 KPX quoteright Adieresis -80 KPX quoteright Aring -80 KPX quoteright comma -53 KPX quoteright d -30 KPX quoteright o -34 KPX quoteright period -51 KPX quoteright r -20 KPX quoteright s -27 KPX quoteright t -11 KPX quoteright v -11 KPX quoteright w -4 KPX quoteright y -9 KPX r a -1 KPX r aacute -1 KPX r acircumflex -1 KPX r adieresis -1 KPX r ae -2 KPX r agrave -1 KPX r aring -1 KPX r c -6 KPX r ccedilla -6 KPX r colon -36 KPX r comma -64 KPX r d -5 KPX r e 2 KPX r eacute 2 KPX r ecircumflex 2 KPX r egrave 2 KPX r f 15 KPX r g -7 KPX r h -12 KPX r hyphen -40 KPX r i -12 KPX r j -13 KPX r k -8 KPX r l -12 KPX r m -8 KPX r n -10 KPX r o -7 KPX r oacute -7 KPX r ocircumflex -7 KPX r odieresis -7 KPX r oe -2 KPX r ograve -7 KPX r oslash -12 KPX r p -7 KPX r period -63 KPX r q -2 KPX r quoteright 4 KPX r r -10 KPX r s -4 KPX r semicolon -37 KPX r t 15 KPX r u -8 KPX r v 12 KPX r w 17 KPX r x 7 KPX r y 14 KPX r z 2 KPX s quoteright -12 KPX s t -9 KPX seven colon -71 KPX seven comma -95 KPX seven eight -10 KPX seven five -28 KPX seven four -70 KPX seven one -21 KPX seven period -94 KPX seven seven 2 KPX seven six -21 KPX seven three -7 KPX seven two -11 KPX six four -1 KPX six one -29 KPX six seven -13 KPX t S -9 KPX t a -3 KPX t aacute -3 KPX t adieresis -3 KPX t ae -5 KPX t aring -3 KPX t colon -41 KPX t e -5 KPX t eacute -5 KPX t h -9 KPX t o -15 KPX t oacute -15 KPX t odieresis -15 KPX t quoteright -3 KPX t semicolon -42 KPX three four -2 KPX three one -34 KPX three seven -19 KPX two four -16 KPX two one -24 KPX two seven -12 KPX u quoteright -8 KPX v a -21 KPX v aacute -21 KPX v acircumflex -21 KPX v adieresis -21 KPX v ae -21 KPX v agrave -21 KPX v aring -21 KPX v atilde -21 KPX v c -25 KPX v colon -41 KPX v comma -57 KPX v e -18 KPX v eacute -18 KPX v ecircumflex -18 KPX v egrave -18 KPX v g -26 KPX v hyphen -5 KPX v l -12 KPX v o -28 KPX v oacute -28 KPX v odieresis -28 KPX v ograve -28 KPX v oslash -28 KPX v period -55 KPX v s -25 KPX v semicolon -43 KPX w a -11 KPX w aacute -11 KPX w acircumflex -11 KPX w adieresis -11 KPX w ae -12 KPX w agrave -11 KPX w aring -11 KPX w atilde -11 KPX w c -12 KPX w colon -36 KPX w comma -38 KPX w e -5 KPX w eacute -5 KPX w ecircumflex -5 KPX w egrave -5 KPX w g -13 KPX w hyphen 7 KPX w l -8 KPX w o -15 KPX w oacute -15 KPX w odieresis -15 KPX w ograve -15 KPX w oslash -14 KPX w period -36 KPX w s -15 KPX w semicolon -38 KPX x a -22 KPX x c -27 KPX x e -20 KPX x eacute -20 KPX x o -30 KPX x q -23 KPX y a -20 KPX y aacute -20 KPX y acircumflex -20 KPX y adieresis -20 KPX y ae -20 KPX y agrave -20 KPX y aring -20 KPX y atilde -20 KPX y c -26 KPX y colon -40 KPX y comma -58 KPX y e -19 KPX y eacute -19 KPX y ecircumflex -19 KPX y egrave -19 KPX y g -27 KPX y hyphen -4 KPX y l -11 KPX y o -28 KPX y oacute -28 KPX y odieresis -28 KPX y ograve -28 KPX y oslash -27 KPX y period -55 KPX y s -24 KPX y semicolon -43 KPX zero four -3 KPX zero one -29 KPX zero seven -21 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Monospace-Bold.pfa0100664000212600000240000046745410330505373016370 0ustar mikeuser%!PS-AdobeFont-1.0: Monospace-Bold 1.15 %%DocumentSuppliedResources: font Monospace-Bold %%Title: Monospace-Bold %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:21 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Monospace-Bold known{/Monospace-Bold findfont dup/UniqueID known{dup /UniqueID get 4234665 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Monospace-Bold def /FontBBox {-141 -1034 1457 2154 }readonly def /UniqueID 4234665 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Monospace Bold) readonly def /FamilyName (Monospace) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -221 def /UnderlineThickness 246 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 11167FB533773667FB8D3EFE82119D83C5E325D3F9FA9CD7D01B1F3F3E52876279E4660D B5D444F0B7CE226ED8DF687C9F94FD3D6282F90864241946A4B8E8575E48452B9C0794B0 E485E0EE753D96B6C08DFAE68281203752A25CAF8EADA400FDB4F9AC57F07D7C3CED86D6 7F5FCFCD9D4635282E9D92A5D9598F79FCB9FB1A677408CF7EDE532374FF6A6A9703662D 17B5D4F6CD9CF249432F8C76D70BD990DDA5FEBDB59A17FC8A068E1DCF23729F4CCF2C91 59376F20EBE27AC7473D31BBE76EA67D9AC99ED58644032A828859BD9DDE391FC993707F 97CABF55422D4C37042F25E17BB78E63EABE7783BE0C56F59E74EFBE7783B90310E817D7 A01D0AC31EA0C9B67EA7A3EAC553F3DCD76270BAFB428DC7AB7EE802E06EC54B705A5A6F 125250A008FA7375643EDFF171457F65345A08795AE0F1E5FAC5A9CCD3E258A9CF83382F B3385DA7FEEB19F6D001A7B5A214115B01B441014E51A9BF8057017663645BCE7E2C6228 940658CCE20121AE23DB19754C876CF1E7ABB40B2C949C0D45AEDCEF0165C46A0E720BD4 6260D7AB7E8B5A77F64542DB42BB3C48EF0F9D026C8563478B4B80B60DE0005A3C61B5BE DEF534F95EC79CDBCE5AE2CABEAE6289BE6D998B2E0B090DC31F890A264618C9E9473962 3BCC88789A953C3C9BD07F5B1D7A1621B71A12FE379E85E6562D62C449F1EF7B467D126A 41D13410BF85D7735CB440A7363A7C9755F3BAA6554FDBF71FFBC2B9EC7EF2BCF0228D5A 98361A9F79AC87EB346D5AC82847C2FF02AAEAAB6C8272350A534C5BCBD678B28C6F7B97 44BF3243F970909CBBE5E4116F2A1F56EF992D3EE51889C80FA54C5C9982BFD90C1ED83B 3D7A917C2588207D5A15D4316C408332591A8845B322124D17D41E10FABF2662439FC0FA 92B839F0A6AE2065D029FE012F75D7B4B0947202894211CD4786A74385DC0817DDC3A2FF 8EFD3EE4CE9F31AA40282C2A0E88D02ED77F991C910D3CC20F1A6C513E105A65117D6FF8 B448255F66674BD2CD7B66EEA96CEE551D97B27E7B0BB692664DB358985F0DCB1E5FA9D7 F92799971280852C5DB56F5E0788208521AB6B2589034B48624D393F005525342C7441E2 67D1BD07BBF43C69DC7BEC5A47993AFF6F6A9747787AB8FF45BCDBE88FCF290DD28FB3D4 2FB726AECC1832A03E970FEC71D7CA532B45C8C5BF64CEA9F6F9483D369EC9FC0D82E3C7 A5863D816D35503EBDC1CE27C57258E0D773318E88B9006AA04541D8F14B4F23F7B3D23F 6B4E990457C5525DCA3B63EE75C3A53611FA30AEB04A33EAC156049E60651AE830726330 C3530A1BE5F3CA8AB63BAD85DA0080A22FA54A6DE4AD3EE96BB9EC60D3EC4AEA7B5FC82F 8EC803B2C6198E5ABF9B67A82B24D8F5C672E6A825FE0481B1744DBC008B0B1110761F23 ACF02284979F836FAC0BAA9216C35A5AB25B95197F282592E27C9FBD8D5EFB330B08A956 B6079D05D4500F00518B164CECA074491CEFF09A99055371AD3D0A9F1DD2EF38B33A0FBF 6C83E4AB7584D24400671CD568DE38F6DAB1660578C65AFC0FB5AE268AB26D47F38CB9C7 E48BD5A7D4F62199EF7180D923958A41F3FDCDB0A856375B3BBAF2C4C32752FB0B641240 E50FD465CB53BEF09BB0D73D204B2064B3B6322A1D227E8D7B4FAB71BBD3E2FFC59712B1 EEC12CFEAEAA8135895D705C6BD8DC5726A21888E25B675475D53431DE441B7177F41A30 A216DC48B78D025AF5CFC53ECCF08C494EDDB4D460CADF0E325C81B932F4BE839E5B6F3A 3AF49B330AB3DD8637D9D0BD305C15D20FB84B14725D4269A78D316B2C2401698B125DEC EFC2D7DC0206C6535846C435E5DDCD2294C5ECA8FE4C3342D032CDEC2398A43971E15CDC CC308BA14659D338D478ED2C91DFEE282D221AF7150507F3F35054CBA77F7B68B102C7A3 B0A94AAC5EB7ACC45F29A2B23A8BA397727E1533E78F84870A647D8D2F364F0A9D9CFB1A F82AA4A2FA9D4A33E2F508BE63488D4505E4BF2B22029A24EBF8ED5BA75646FBA0B80D8E B076A4028B10A89BA8735E03092071307C212B76BBAB410DD4783C8653F472A853105F4A 0900CD58BDAD0DE8967A8084D49E03CAE74D6724924E2D85411B0E712ED4410F59793490 429E6271123A4A3B45BE180248BE5F2BF16BFECE9B005C9AF12523C38E6DEBAA9F1BF6D4 AC2B193FEF981CD5E4ED3573521A82DDBDDBD61F43EFE8CF474FFE43D82DA07FD8A1A494 6E8C187FC6C85663A05E65BE968841C923CC2AEDC5193F624FE2FA5B4F33232BC9361141 60C54189960EDF10F1B44C91417CA26FB66E4A89B19AC2280C59CB7C3428A0251E34B5AB 90368B31EDDFAA2BA749EFBDB7C99EFB9C5E67E9C6C62438E73DEA816919881E804E3D8A EF1D5108C4895E2E285618AD7DC3A42F1E28378335D46ECAD9B3058B165257BDDCEFD817 350ED1B3E3ADF86C3BA4E9624C2E592A8216F4B2700BC88992913406E7DB2B5F5DF3174E A6D7639B616AE160282DCFDC85CAE0C73F3E695B09EE0FF5752321EA51A914A7C89FD9FA 0E66B2F01EC9033EE9DBD246725CB36EEBD34EB3481FC21C4AD3AD26B394E858E3F4C3B9 4CCF83497813A5CAA32C5FE41787FD97734992458BDDEA1A9CE2D7135A65B592B73FE851 C2671A257B5518E2C008553432C6FA79BCA95000F31BF7F0AD101A30607D1D34987D89B0 F3E1A190231908C2451B8FB0D18EC8F873AB09F1419D48B041A02BC4F819FA17E81C3289 77EF1BCA4E86CDE766B795EC8A1B299F57DBB4C72660533C8A96AE701F9EFBF198FE4D5D C66C3EAAB293D0D9D908236037C83A759F2156AAEA78B6AE37DF0AA85A5F89215171FC75 3A323D43A3295A2462D8902458F15F6345815BECCD373E3EF4F0993F7D52AAD4E2030CB7 2862D8FA6E6138B71ACC7D62E7261FBD56148C8DE661AE9844FE920ACC2503E278DF0B04 F669145B9C8D435BD90C3DBA004C09B39227A5409965E6ED90E5082B923D69B0842FDB38 0D742890F9A9FE4BB8F923FFED2581277AD8FB61E2F17BB90D1A7E4195D7EB3FF833FE3B 72E696C3DAE0A3A49918540BF1C6046FFF094E01680EA558415209926FBD70B3CB4B044F DC5FC844150C311F9C1C031F4D5B99DEE4F72F2307B8EFF74735B1ED593465D0D7998E61 DA4D497AF119FC332156B8D882B4005FC8850E4DA96B7AE93E1552AEDE068D0E2B266C45 0753CD2DA48A059CEE49F1E86E2F77F701FB177FA32D5F93FE4D6A01275EEB54692AA6C8 95EE530E862079535A543DE4067CD630A7D8CC83AB9E04377B8D3A05F23280A6E1D68356 C76D531990EB15EA707C0E5BB5055F428997E2A731A4F7B5288E54B2C4B949833EC117F3 0A0575603796041BE985C63F48CD55E76638E7E54BBCCC9D2C73ABE423C6A7159CCBF80C 8FD931FACC6D8257D9202645B3138E367E160CA3CF22E1C5ACE59AFC77BFDFC25A5D6DDF E6C2F6B68D062D0490D05B05B55A7A0C6E56A52A2EADC106E3BB6410205CED012BB49DC3 6EC89674C22C7D17E3A6AD10A2812095454DA4D44414F42A8678BEB35D372D3851EBC535 888D9E937906CC0475986D2656E16D78B391E8E8D3E9C91D980D526C6470E79B728ACB9C B9F63C6000B9E60AD76959F7B14F06B631778911EA9DB59D8B9BE7DECC68DEEF068032B9 272227B91840B30B7506A3FD57306015EF686A174F48B734D9070498D2184773E7353A24 51D3276238B8874FDEB7161D1A8506BEF79EC5245651C29B9251EE17F834D200E2219A3A 9CD838C9BB31182C00A52E06DA6EA4E446FCFB62C92284116E14C3D38973F1704D5EB2E7 6E6F88F7444364046AB43C4D7D44A23FA47B5EA158949A3E1F15DE70F40812444C6F0F4D A9940F2B3CD1B7B1450C1BFE7A6E111503CFA45FF012A6DED44CBA623FCEAF5262BBF810 90A4FC1EE72D5EF3852987026F50770F7410E486F1D15D25888C8D88188647F8776CFBB0 C7D4F02644BD13C84C592DCE82A56F08920B2FB13BAFB405154895458F55DEECAB846104 7B157C02450E0E529A10559BD8CD9592FFBC923092C1EB0AAE96E5CE64A6D5B636988F69 EF02E3F5B84451BA2F6CC360B647908FA940E844C3DAE8FAF73E9ED416D6B8A20660EAF0 2C662828F3E137B0956B15AA9C129A312E753202D429FC734325F1F82A3D9058ADB87688 4B979CAEFF660A8EF9191F4E0D2CCAE5E5458139A0AD0637319FF41CD7DE9877AB094F4A 3F27EC8F5C7D42B1D892B829E1DBBFA9295B8383B23658ED25DA227B9F625B89E26C854C 0130CEB1F82D24E53D5FCCE082433A4029B1B4A5905D25BA809EEA54895220DCAED1B2AE 879E7BEE3CFA3C71FFBC77AEF4A415C96F2CE40EF47E2080FB59AB00DB4E8D527D9E41D3 8DE95CBE66EAC589F5831C4BF0BBE1455F4960FE388B84074DA43DF499BE3810C38A4BA1 D23F3A6C331F09135931FF0A7D77160E3FC9CBF4937D5814A12848C17ED3F62FEE21B11E 43889F3947F67F66BE8DE7EFA954E2CF8BFFAA33DEE3F3C397FC572DDFD7E42578DC39AB 7CACDE5A30E25CB6D949E2C89B02E48F70CA2D0FBA47F19B72CCF99B4C71C69B1E1A381E F620B2BF283FD34CE116F5C2DD1BB9DAF60BD431A6CD475ADA9F7490E17D5DB183763467 0C167B8E958A4C476820EB53A778B9131FC7205BCA2EE3791B8FB54AB6996B82B65B8E60 71529E0E3A721E6306EE6448EC9607C427F543EB8C6717D0BF598F619D36A3FD7C0E3DBB E7B5D923DC8EF2BD288C55EF93640E4249E0E9E36E1FCC19CEC8619495B71D84236313E8 C552ED0F230DBEE3C395269DE393EB34F630A5043B054154A47EE48BCFA1B3DF9D142315 F1826809F0BADC495B2C7DC93D34155D843427BCF872288B49D2A0AB22AF861112C324F3 4428FD31584D3B5E88ADD1EDD809DA66F90C756386198CA263562A95BAAA64B1CA36897C 1069CDE2D44EE87FC186A24C10C23B8F3DE59B41D1AD8E01EDF4C32EE70F053DAB84D24D 33A6024D7A86570D96B34892F8E299414E7084D99B3C3A89531A7861A39EAEAD9506B0C7 017E3A730C91AF6857DECFCE2FFF482DB160369A16BD17456EB74258D2D39F7177998A85 6694D74A57318BBE392EBBCD069FCC8EFB71AC1516E350FE4F936BECB2A8DC4280BF3A64 27F1B741C4FD53AFB32EB78D9C06D74B5F71DD967E087F733D50655900E086D358B46C2E 8EA8CB494C0EBBCA4B0A9C74B48E0236F9CA651D73D2DB6FB1F1F6F7561194C8858F3FF4 B3F46FED001DC472F71BD6E16EC1516605779FBC1FF81D6ED6996F955C001DB98BC8E7EF 16065AE3A00E7C65B4F080F78C5E0CBC9EF8D4E6A8A3E76258B31BD4F6766A4B00A37AA3 E5BEC4C495D5B92E701B7423FF09FE895CA54F82D584942A93ADA1C7AC5576345DB685AC 6E04586E55C997FD31D13FAD4D2FEC0181A8A0BAD0CE863F9052735AE3F245F549B8F2C1 A5486F65BC217A57D404832AE633EEEDE8806889AEACC54237FC2C493CABE98111D34EDA 6739E5CA8FA33EBD70757FDC1243E9F1D58D69796A7BE700CB9A39F69ED0D811D4D286D0 80BCA0D9E78E54B63E640C53BD479106062953EDCD604D10F3FF50620AB8D1B79F1F873E E47512F37296FA930C5FCECC28FC6025270DF4B2CBC428ABB88BA940AD55CCA0EBFDDF91 3AE3271FBFA6DEE0B62D6B94F40053A11410D91A1CA9DB0E9947AB24EC592A9FF3F00FCE F1C436A94332952DFD7825CFE35489E12C6A8A7521AA5B32B307A7BE5200E45E1FDC5588 96F0A32E97E31CF40BBA08833E7D7EF78DDD5D48685B19943705D87E40C235C0EDCDC6E5 93AEEB193C8957E5A05E17F4609FB3626BD14CB597362AA65699A50DF076A54FB1012403 E32A3CD7761DFF0B3F41AAC0BD55C1148A24BBF31B4CA15608F12DA8F671D76E33E00AAE 450412798B7BF74C216E112883E9920B0EDD24701790AEB565D9BF4927BD3856493D6B56 2C5A231DEFF338A986DEE08AE42A6FB978608C3B9A4A1D8E17164A08E2FDB5D1E1D38AA5 5E2E4B4D2F5C0317ECE305DCBB207D7599943B1116A0AF9B917E1EE7FEDD285F249B212E AA66724290030E1220C5E26EE5623636FB5897E0CE1E0DA00B8E716A963B4A9498E113A2 C6E68B6D35503EFB27C4D82FE3B48A7005560DF04BC6AAA01EAA47070C81D60C40614920 12654837A5317AF1D7F24404E050CDB6C3D1B1BA2480FC9940707A9984D507A3C078365D 30662300B4E28756F69F8B65F9212B4A0FE63448CAAB6331DA9E7DA65347370F03E51135 591456D774040BDA4BF0D318161C082F69ED644E51EFE26EFC45CFA0391220B09BE1157C 3E4B55CF5203F2AFA61D7C0F6F281460A761987144ACA50A2834954890D9BC811B72D0D5 FBE77F8D01496257522EC90143BDCBBC30EB08B9D15097E0AA0AC15F6F7FEEE91224BC4F 531A65905AE9337D97652775BD7C43740E29EB66AEDF91D658C2A2F9849A26457C8866F6 F96D59E6721018ED0637D6126F08EF685174F130D9735CA45227B508B52FB7D9BCCA10D3 BF16A889EEA13847DA7CAB63C73C0F068C3BBEA8E162295F884B7E28BA144E30450A823B 9025847C739B6EEAD71967F8DBCA0AC8FBBC2A7847BD7B957B8E44EC96CA2888B47F86DA 786EFEB0C741D7CB67CC25371E59148D4C3ED2C5349A1EBE6B9DC8744EBBA600856B22F5 1832C41955FF582F4E0337809EEFC33FCDBF9C31723278A8D085F1404D16A573314F2876 85C67FC651E691B1C12121B0E209E3E7A0FAC4272D58F16863202CC7594D0A6B10A4948B 1FEE719857ECEA0CFF0D0643154CE968A7E909A6CF9A9672B2159717E854044AA6A13F05 A3581A47D624126498DF26635EA643734E2DD2A2EFF5D2F70BCDE6F39C9D54F0A1DC05D7 8BE1C28495B0064C2A18A02859FD8B1F91DB7D29BBBE7401B1891CAEB5BE54468DBE8B76 74C2257466643C14A9657C1E79627D8743C14B4CD25C03AE56AB0D1D5EF596474C7881FC 0706543A538D2017E48205664D7443834DE0344BB76CCBFB64824E753FEE37F39581FD32 27AF8959D869EA87D806668DC29436C60A8C9DCE55349B7C992F821C28A28482843577A1 44C905FED079A06273C7960BADCB5196F3C9E2DCC87C0B1E03C5B5CC64AFD58CC72DA649 040DEBDA7ACDA5BE6DEB142FADDFD883DC4F004B7B7FC5A1A8A44AA9C4A6B3CC034D4F92 CB6293FE7A3EAAADE9568655CC3CF1EF283B1ECD15EDA0A2E3CADE0C3148A5E449CD5D92 557FC15E2A3B99F6CAB2DE4E3DDD038184E46F1914481C7E5B5A1862C899AAFC1A4965F0 5C152968522019B3D635C2A67DA80CA60F264E6F75F419ACE6F48F32C5B6FEA7E340DB0C 5C25F7FA380B1A7D7F4534F0ADB02EA93B4901B581A9EE79D3710248F0A5E03BABC2A066 5583642E51E78893B375950891A694ED7C18B2CE872619ABE151DC8710F5395E79E5FB02 5F05A3BD9364756A54FB8B31C81C2285942F9FA6940BF3D676C16FBCCF34A433028A9A0B 18A39831E0F04F03D7A4465DAB80894AD108CCFD1F004013B9D619E0EB552DAA5BFE0EA5 53FCC2D38EA0FAA38BC25AA6E954A2ABE35AEC8383E556D1067F2A8F4FEAF745DF55771A 95502B33A40807C7692BDA00A142A4EB394838F57880B4ADE4D21DA150CB60752D5A11E0 A309F50D63AF0C59DB2D58EA0C827441997566E8AC0F39C354CE94175BBC62A265FCA7A1 87B3BE75E83EC96FFFA43F6675D9374771E2AAB0FB1A14E9843F864852CDB0E23D30F1E2 EF19FBBB4501D41F4878208E041A8B5C0A46B3352A2CD1F5BE78B3C89B58DE076CC603BF 04163F64660236214F9B029CBE96F0F4DE40C8919EE1FB5435FBDB25083FB3EBD505B0AB CCDAE8CF4AEC0DA7D890621D68D0056FBCA5832892EBE9E2BB72A2BCBD224F1D3E8E7AB4 771CAD9C6A4A0E40A6BFE15313E15EDED08DB8941E04094149B69FAAD438E8C7047C8A41 ED0B10070C48F804C11FE88BCF655BA3636A4C7426584812DF512535225E8499D867F83C 86BD170854BE047A028889695FEE4E7FC63DBD109AE00664414FC96496F85DC4BB719BE6 B7C5BC4D7289028A003CBDF447018981D0A8E11656A4D75D6F5145C5DE04CFD6234551DD F89930E9267D1080FAE4F9C66B1BC736C7375B902FA53D9E8BCF2B5A7BC4B6341CD65F79 9673CF52F26D649882A3A2EB1609DBF2D4A4F02DA65BB417EEEE635485BAD51E96EFD4A6 BDF0861B1922D31BAE22AEBB9DF54E2C5ABA5B97ECCB069903B2AA28D790560A64E3B93C E0D3FDC457944A22A390C874D655AEA7BEA5B305B1BCA2F13DC73F1E8DC7662E20FC276F 1D29E9D96E8EEF0E3B2B0FAEEF541CCAEBAF485019979872A72A8ABCF89071E28DF389D6 8418B9EE2488F611AC58EBBC150F3E93AE1B3A1C5426EFC55B22E5A7D1DABF78E4C6D196 757CA1120B657ACDD4EBD7276EBD4A67A7440B46FA59C59E2E6681FC2BBA58FC8A82804C F8C4AC4032B09681B6CCA415C532B91CDF0B0400AA088C9044C3895F3BF46C611BA136EB AF72086A9D2BC385201BBD78DF875CD8F7D67C0D4F26D3D9C6345C55FDCE9B26BAEA3963 A7DB21622C3B3B3DD82DFC66FE74937EE3728FB20328B047463856F9BD4E1B1F0D088A3F 19408DF937A84D543A5BB17445979A37399586A368E99FC2542D8F401D0BF360CA619854 EDD0BE31318865A20F221772253518E9E09BE9DF95901147411D4C0879D26D8F930E4B30 3FFEBD5FBB076BD9BC5B0A4C99F0B85800F25994108428F98697DA6E7C14F1780BDECC94 16B682AF9E92A7AA7DD0B33EB695DFF884D14BFED98D3D9F84E36ED4FB2DD86F1A42D8B4 A2EAF46CA449E0ADD9BA067F2DE96897318BDB05A560BED7588999185585F81C9BAA0AA0 9449C1BE1F14AA0C729E6B66622D18B8D5340B74BCD66B967E6F29365A5745012C881F6E CB10CB82B46B7AC551B5ED79C41709AB70B4AB493C4BC6DA1CAE87011B5961A5FF4B0ACB 17A95F29D49FDE6830C3B2D170968738A8815149B242B4884161186079DD6A1217FE9CE7 E60E7045A21B10138832AE5C880FD54FEC7B71974DC8704DEB006E01EF9F61F7FC22A117 123D5A2EA6AC39CDFC6BBB6380404B8F98CCD1E4FF7CBBCACC4AA13F260C081D9AF5108E 518516A2C58B27CDF940B960FDD3D51AF3FA1BEAA90687FE8BD145E9984AD71187BE737B 6765F385FC7A58FA771C84759CA27F908038C2B7BDF81DDB6797A3EB4EB6E8ADD3FB9FF4 E92692577747890EC0CF77796BCC291929FB27FA69F10AC7912D9A7E6FB84DE14D9D6D12 115A8630F8CD3F26A86F291714B931D3822B8A07E9276659D5F36EFE72858A444557FE0A 3BDC70E9D52F941E790EE7B7454557B792002BB07AC33F10F2CD2E5E16E88018F6F79D54 34E408572D30A3316C3F1BD36E1BA16A49C3623317C62ACCCFD869EA76921D729E70F2F4 63FA8F0035EEDE8EAB1E7BEE4C389DF3BF6625DF10CBF19701381B68525BFE96C2CD919C 2922EE99525048392C1BCF26B3141B551E9DFE25A2D0E84348BC032C28ED8A118DB6A083 B1AC44A0EC9184D101FCC6A9CC4F5F9756783376BCB2DC289982795796454835FDF5F325 DB4DFE924D2C02458FEDED43FE8DAE2EC4BB61536CF755E7E920835455CCE84B5C0C791B 9CB6D494445F304B173628D8057F45E9860DC8DE045E351750C0E71B2B13F78AE4941AA2 F3E2E8E05125DFE290AF817D87693AAB16345CF0CF6CBFF594371E9815A5F3360CD52D8F 095AE10808F33F86E07E4B8A2BB3486F93D04C88FCACC7907E359442D0CAFCC088657360 6C54F56DDC5039A88396731AFC577DC3324A0D24AA9348245F660A496410E3286B81D6F8 7999933D898C0FF0D3FCBA5F9D5CF3326B863E941236E31FEF86B7DEF1014D1C6CF86B92 4FEBF9FDEBD3709805485B618DAD03D15B5C401B94B2F4500F2FBE72CFEC2A69164D6185 DF5160441DF72FC509EB7C1C1322AA5658B09E1BCE9BC99763E7DE13057E836E57D24460 DEFEA1CE7C2553BBE5F5CDCA7869B7153A0C5349A7D0B546F971FC63864BA7F00BFE51E3 905A87F67398D568709D27E5A746970F72EF9C71ABE7CE96044ECF80352F712B605A6B10 8426A06A27E13FD837C520096D15F9B1A44E6F955E3FACD91B643BF0EE74D3FD6E9A10CD F05C01FBC7BEA26D8AE8565CB89BB2E52EC98A4F4898D146084CDF4E6509462D267CE81D D7A0E6E2EFEAFA1BBF696803FD40F021716C2838C19D32F741FA334D228E2BD34DA2D561 E6609CD823CE02EBB683A6F1EECD93C9103E5328143EFF6C9E05956969D2F25AC992FC76 39B5C238FA4A3157B959B4AF11B6AA05823C015134836A6560EA7F07EC86117511E13B10 75D0D2259D36E7B8065D930184C7DDB1AC2B42A566FEEA6927313BE91C7EAADA352D9E76 43D467F94AD5ECAE37BC145278B4048AFDF432B2E2F219661CEE53E159490F1E0FB04DF6 D42F4B322AC01E5732859AEC445D6E120091996DCE46602EFA8C01EB0E1D8BB6D0D12174 E4990498577B86CCEF0EF5F7EE913A3A8D78EF9CE4F37B0BE1B5F40A4D0B00EADBD92C7A 5083E8D4B093D7BDA5B88E08D5DA4EBF7FBDEA06DFB8C5161A92548160163EB7AA97B603 96D869524163EE546E1E35F764A4879D2DF056A5E77438D45D81F9356A4F8EA0D007E0B5 DD2441879A48AEEDCB1A2F493C3E648EA138D4DC080022EC7A62E08373CF032F48C2F585 0589F04122726500E8B29216CCCF6ABC2A04A726224F9B029A25DE8C5965A6ED3F6E3518 B72C6A0A64802424E91DDBA855C20EC358F6FBD79C30CC6DA41C9C117B23139C150DDB33 7FC090A907DCB0FA4DCF914E3CB53EDCF7DFB6D2A200F7C2E8401667D828605C64D9A62C 7360AECC44BC3951D2ABD75976528B0B98913A2741D0E160B48FC0458FF56DDAF4FCF5B0 6A351BE0A90F851C44BEC636C0AC688226C8B0FD136F2B612BB66ACBA8FF149783F24B99 A0FFBD405F655FE2DC577E01953716C44965782D86658859FA313876424484951448ED6C E43106D4F8FAD95C3163A1AD47AB14DAEE015A257735B0B14BA8C1F807B54E54670BFB7E 9311D936086C6DDADE803F4E304B6E823A937E1A92C28C5A61D0FA1DA992DEF383ADC936 E910075C9573B15ED356345ADF2EABFBBF8CB6D1D35DB404CB70DF440642562D8778E5E3 1C547AA1DD408A97F44048AFF9317364BB3A8D35503CA5F0FA509CD0A20DE629DD243EDC 163402620ABBCC4E9D7E679A92E7FBC45CCD3923AEC1C20C8F15647B0E661F82C738FC61 FB3C954B9097633B78D21C958491977377BA0FB845FA5357F3519572002CA6A88FCC39BD CB51A2F2BA462905906DC5A76632708E41585A47368D650954826C722853A1B9364D3F21 0A844A8AB86EF33C8176B76E891F2AEE7C1DD8C6B0A2B52CE2AB398533B6D862593D30BC 2BC3046C588E63E2C02F17A5336D7B03B8CDEE76F5B8A8AB32F431F9FD1FD85013779781 274597F8B717CFA22066ED723769550D604ACA4772C711C672FA57A9A30E962E9ABBA798 AC43517D02EC267E25CA09B5FF087C0498660A975A7BC1F726B9B0362E786A5E6DA97B9C 83C8B7BE172423C79CD95A2DAD481CAEF11924E4357833DF7692C22ECE4A7C92B6C84B8D 4E1332A9AC1C897DF2777C9A3C8AA4B77574A5BC296BD2BB4DB715609DEB685CE804B710 D098CF51391D799C2F59017002C2F2018970BC614F4A4A246A49E795FC2627A5361A474C 4EEA15FD114C5E067D2F091A25E56A019A2DC6E00F9A3CEAE73F68C7387A2BA310AF9980 8709635A5A2AFA101FBC0FF8AF9D7F7CC1E44FD2344BE0ED353D24E8624D464938BC13D4 078B481D9B32937D75B52CFEDAC13FEA859123B76C50856986F05DAFA7AB1885ED53E88F 57CB20D166DA5B3723AF472A0C3BA1325015BE2097BA520E15E0CCE3FC8D3AEC37F3DED1 671FDE5EF193849D5141B9956A68DC514D6A9FCD67AF25D8751AA32D114A58728CDF973B 05464EA3CA55ACBDBC0C2CE814CF10E8639273C33DAA263C217A8C6F1A8EB1BACCB6C7FF E50DFE35E2919D0CDD7C099FE7313B8D610C90034EEF74908906ACE8631A193C5C6341DE 6A311DAC36AC2E9FA441E985249302F9273EFEA3FD5AC02111A0B697CBE2FF96B245D2B7 0847404C184BFE1E3C883E66D90EA64C797597CDE06554DE22537638509E69D9E18030F9 E2ACC66700F2429D8C5787837421EEB83B023FF531F48B40EBD3E58A13A0FDFB227C2A28 C9A81C16A7554BD0831F68AEEC7A1E834BE1F90CC96D7E6C5B06A5EE89B231C183E2BAC8 4840BE8EE0CD47E46517F6C46F27B3691E5D271781E612602AA935061867860C660E6BBE E57583687BE3C61186D98BCF7EBC3A3AFB9B88C7C466DFA58BA37840A537F1206C522FA5 DCD1C129B51AA8EBEA4F5883B7D1EAD667B178B56FE7D831DAF15C631F52197F7E92B34E DD68CFC92859C49922404F21F4BBBE4643501E39AF897D93EC8B89FCAB6BB8912F42E805 532691D4BBA96077BB351BB9070DC2D5C17D60374AA9C8CC6B6ACF929B77E252F71A6F61 74FE8058A8DF23CFF45A046CF30031D87FBE2D408BDB0C9939FBF6F16CCA38D97AB8B19D 7278EF78814FA670EC235651A4703B229B50BA6B3EAEC8A22F41AF0CD01984238C34C2A7 9E18A8E493F64F74EA3638FC4EF88B7D788648B4A2ABF02432988F9A3C871FCE7C59B339 4E00539AB825DFDA2C420E378D1A20CD0FB6F060349ACBE266DB820841088A9FF50C2686 F90561D8248881869D04A809E738761CD091B084610BA958A39CA3F19CBE38437DF0FE69 D23264E56B4760044F11EC435631D06C6C7934427BAF1015C9BA4E370CFD16F1E892AC3D 7932504A52DC9D9576CDCE2C37AB393A55180156F6F583B753E117E42F6BA85A64155118 2FE36FC5D5C4C80F88F8825E88CA9F5CEBA97FD8ACBFA3C87FC906F443361B71F6B2D875 DEBFADDC1CF3EA8A7D099C30A4207CDCB3901C13FA35DA02FB95DD0E6EB587D46D739A27 B2A325237F8D33B1413618E8FAF1C9C146581EA841E8B85174D1787BEBEE6E409FD6B64B 3B066F62CA10009B10FF02A9D708203C02EC1F3309653B617F053754EE9863EB202D7ED6 F5E47D80B48D99040CD17B44646694D8BB68F39FD6EE4ED77606D35B4B668A16608AF657 FEB98F826C291B26325B6EB8587CC3EDFF18FDC96C56241ED36A6115BAB6579D5CFEE016 75D3E4F23ECEDE16AB09586B9F5A56511EAFE9BD38D5B36B0CA45F1992475C129798465D 0B7E94BE9B308E87794522507AC3AF7B29C91AE0C6ABEAB8989289F238509063C3E74CB9 393F2934A5FA0EB173E2982F412875AB7F1ACBEBCFCEF7647203869322300D4C110D30EC C61E846AD1FE42361F357830D5D6DE7DBCDA6154F8C5B6591EA2580F34C2C5422150BCC6 E8076F510E571BF3633255677A1971CB0624BB1A6DE11FBE9CD1260FE400240C4C5CC59B A1EC6CEE2E054995D33FB5ADC781D78A371A9116CD8F9DC09CFF2F3542BC1DC1B4E61D3A 7310C9674DC24DEC68073F4A979FFF96DAC759988735089B043BFCFDA203DA4F99D8E719 1FDFDD18F3B53895F7AD46093B8A9D55CFD2E527A50F46DF23E0288FB8F61E2254DE6933 DB7E78462CF03E7E454F6774415D3DF25926B9C7E48AE576B05FE164CDBFD3AF56FF9A94 D0C08EB26C4514140BA55B503A52D98CEC90C721AC3D2E280288D0F73C2A5ACE87AD9798 E15AED95526210EC6428D10C1422482799D1BF69DD623B1B16DE95592FCB6366B5E91C1A 3E03F6D086258AE19576E5E66F9E6A8C029E26FB7471ACE648E9A9FC74251ABF854772EE B42D96D9C87EEB12785547AB30CFB71FE683C621CBE389225C1F0DD6CC7C24FB9E5AA117 A4A9C83A78776C0198745A21B6E154A9D560BBA0D419092CF341F1606686D396C9F417CA DBFAB2D360D2035196C85A204AC2F0F3B3EB17BD337E6E9D57BB414613A636E22E944FB2 556D9046E9CCCFE0B82BF68E0148B17CABC0A926DF4885D2572D53435CF8CA462BBD9A53 AE3673D6C6A7BB9E857B9E01CD95F2336EC1DB562088E8C2B4C6DA9F8E7F6506A6E69D06 82785BEAFEE2B57C1BE191673F51C6E2DB711667E34518363119A27D7D3618AC791B920A E66FDFEE50BFF094E587DF23A4C100EEA75AB4E1B3384F99966543D48A3FCAACFC76E5C2 00DE81A2DF1C7D7E4FE1D8FF59FE187C6271A80B42C9CC854096BD3FCE15048E7AB421A0 89C15E9574D535142E877C1D72BC5A1173D157A1B61768CD39FB88D574A1BC3C67BBFDE7 02EE677084111B8ED795273745892D9260CED632285E633DE80F3DE62FBF73350D71D72B 84F5A18D3BD43386D05642FDF1FAB29CA63B82E1969679FAA6283160946E0E3C7B3519A3 5D791580141D2F980023C39C122C2D102E4243502B517678C7A4E522753F91F4EAF73C75 C644080E3509EDB077EE84E1DAFC06B25101FDF01F1FDEF68C326A6F67253E18A0336EFB 2375FA4F70A077A2D09471AFD31FF4DB23B1FFEFE8A0CE644E864BE68E05EE75192D65DE 9D14F9A385AA2B9C4E5BE385FF1E2C8C9ED1C9CF4D48AAE769AE7FD807280FE96EA290B7 8DC5A9F78F89CE562183C8D8DF90E6AF14B20C0431617FBF64BA977EB5DC3BD63BF0B81C AD3D586409EBB6211CCFC8CF02A74A30CB9B3D2BFA8F954E3F9590A664B16E4E3EE7092C DE1D42C778AD283AA66B630DCD68C968B393C23CE8D76AA2A9B911AD24D3C73C02B2763A 088ED7A1CF3B4BD07C9A0DFF7B642708B13B8E9C32923FBF1531AFA279E162804C301BC2 F69F4E24A05BC2D93BB622B5528D2263FEF2C8A4CC1D6F01C282FEF8A188484450FB1359 DAE4530DDA82A2B5359165BEDF8FF28880034D8EAC5E7C03A8FDD59EEB8E2564B3889509 27EDFD59C2CA931F4058C6406DB402B71CDD3EC21F2533903830DC407F814B86ED983E29 991A94AF27C008B2B448972C6CB7FBC5C30D577774624318C371737D090F67F6C36FC195 F7E2DB836CEE170DE9ABDB2D99FA06E340CB144F8E65A29F13DDB34D2D462B38C7CB6695 09D77000F9044C659B941CDDE2CDD35D12D6FE94B502CE6C67824A695D42828E2D111AE0 752383F579A86B38BFD3F173D34FD9937F11027F44748A8903342287B85AFB49BFE24240 0049F4683217BD8974D21EF4E373EBE69221DE4FC036AD9CDE8D1986D16260F361255CDD 6357354CCC036EF8248802C5A9DD6BE470FD647A913409EB0AF9B629050604C166A70835 3B78E1A2A179B3161553FDD55B036867914EFB8A9436F668860770DC512D8779E53883D4 DCF5913BE9C0AA9D002788725BDDF0B5FDD0B3E49A4DB4F79E9D28FB4872CDE8999A0E62 A6A7934A80F1DE7B84672A65513F4B1B845437DBA6DD1DF9ABF70DD356DE74C924213528 F24124F153637EB9ECFE91AA71DB9A92C19B376F7E409F81BE121349E2D5173B821F018C A19039FBD57F6F7012D5E4684D149E92FD9E1EA48F3037B162560E3F29C6AA8100C0A633 D685733DBB08D30DE48A53E28A3D4776B715355EA7E690664BD3F1F77AED2343A05F748E DB986519D8E92CB843BC8C62EB5F46E73D734D079464EBBC97693FB5A95FC3CD7EAD4A42 AE6090F18938D286AAF8D0AD64C77E46822EEAFBB655A0995110AEA8C61C4F198EEB8E8C CD40D1A4317508E96EF47F6C9F4E6D37D81F8296BEACA5FF63732C8FFB8798545E86539D 6FA3EFB324A89107534E638B54059790DAAF10234064B5C51B1B233F977777FFCF18AEEA AC8E9691C9C4E5652B68D4BF4D262565AA53E2E639FA7DE00A6E8E81075DAE11D09DC355 2DF890E2F4FB7BF42D94BEDD9FF9E708765DBB5E2D86984BB5E9FD3AA69529A7B4A547A1 3E7DD7AF3DB740A8076FB06D05EDFE10D4F77467D4950E515CCA452D9FD9FB023B7F7AD7 188060BC823B479ABE20DCA872E7028AB0F44C36DB113876703856A5C632AB2D5F6543D8 98C9FC6EAD7609E3002A348619733FFB0C715F55842ECA2FA2A1B89DB93A3BA102504DC3 BE1F54AAC59EC23E6EA3223912EAFC711DA3210451BB58AA7AB7F14B1621C61D9875C97F D4DEF3435C6C8BF9BA8574E2D2CC43EA26E34C774953AA0790E650ADC9BF79D57D90F994 C1EA2B452B4CC7A59463C7CD5675632250C7A51A13B494D7228EF4843C8C1A75E3E2DD33 3B64FA9ABF7E79185E0CFE9E416B619BAB1F0E27524B1736A97629DB8A9723231E1BB587 8F94C1A223CABA2435BFDCC4D2879FCCE344F6387E33DC32DD59D38388A7EB620A28153B C3BD9BDC43B6918A64E00AC4B27B4BE4A1C7BBF0A6EAF2656E196F70526C7ADCE42B3A12 DF7DF2DC001F96C1C9D6B74BBC11177772A906922EAA6D745CF0A63DEB2D8C0364D2BBB8 0A0A2FDA0DCF6E4325742AE90BB62AEAC0DBF0962C8101216C67D0535E96A464BA2185CC 612AEB75F66FA580590C43D13C7C8C25B858F63AD20258BE0C77809A641A8F8A662B9C81 0F4B3D1A53A80E062BF3F388A2AE1D4877BE988DEAFB3A5EE0743EE75CD07D7BD867606E 45AC6243C9C775429CED85E6E5CA20021C6603514D6A6B36C153CA063213F8894ADBE917 891A1ECF868C64E7BCA2580A0180F6746F4B6016A5326D778EDBC993072DF8D6F78A53B0 5CBDBD5EDA4C30CD8FA370F701F093A06904AFB9D82167C82E1D069047D37B9A437AD75D 9F7F6AB574925D167B6C4BEFEC85AD45CAE11BFC1396F5E6B39843E71660875105150AEE F2290EFA830DF0B9817D30D52B75FCD43BD20D30ECCA85B20B32698600DD8A8D0BC107D0 C77B43C87161B766C69F02E81D58DB7006C5D5660DDE997AB669060C70F8AC2FAC3E13E1 BCBAAA34143320C795625287013C7EF306BAA36A61B9C71F91AEE7E543F4586A7D8BD432 BE60AFE2EE0DDF5718B227784E7165C4D2C4610ABE9521854902526E553D0A0CBBC26EF6 E109C7040C3E876F71581B2831BB782CED2D8ABA918859741B1F748E0B8F81B168C7AE91 25957055231EF91B31C3C09E2FEFF6C1BA4CDAF73B07684306BDF5F735DE2980E24C91E0 A96B53BF903A23A324E2C3DE3432762CC7995CF5435A07252D6B8053DFA0A02AAA0E52C8 8AB643C591431E6D3271B7AA05C5B5EC445463AF4E13D37E419947E18F22EF9CDF1BD04E 2E7F106D231986C21CCF02D103253678E4F56EAE1078993E69B76D07F1DB6B7C91F2C754 7D521E7FF0ED8DD23A6277AF86E4F67B1D9B4FEC627AA69470922186E477EF75A7D77EF9 FC4A16ECF9A37597119B804C927377352CEF88AC515D6E914FC1EF5AEA7AF1F3D3802C82 60305538E678EDDDFA87ACD3BAEF1A09F4F4AE1AC97CC0E7785F3DB18B6EEAE005FCFD6A C2A611CB6F4D8671C08791B9FED03755A13B8AD33C3341CE9C4FA948103DC77EF727AE31 0C00806D7639F922B967830BF717CACFAF26E2331C571CFE01B214ED596815C833CA2973 1D3B159B691BE5722D8ECFC2FC07E0E2A12FA9E76AA3F13374310C58E8E7CB36C68DD1D4 3E1EC626199B5B77D977E9786CD9102454834775BEE6EDAB046E7BF335BC4572544D9377 D60C6C389934E35E40252BB891D295E8A64C12C3790DDB9AE563FBFAC83A3AE606116ABF 36E94DB1368234A61027B95C152985B30D67C03A99C6C6A6DCAB9AFF3A8B5766302685C2 A6438B11F72D91D3B1D2DCD97832861DF613EF54D4858B02A73D37AFCB0BE38C44ECC588 20F47EA30645B18817B79268694829B33EEB7990C52A4057BE22490C688ED1D4B0B8096E F6E24114065FDA365D05F9804107459ABF86DB0E7F38378C018003F089E79764B45D087D 02DBDBE171A3F280F8BB673D13826CDCFC624AF331BA9732D81E16E522B551CFB43117A3 D2FA42EE3159041494C5B94E66FC3D59C0AFCC0785C89F4810F772E72CF7133CC7C75A25 BF0648BE3E0EDD3A724DDB9277D8956876F0718ED0FFF0D7CCE2A8CD683D2246EB26C7C5 0EDA3D83BF795B55207FB1B8F9559D27194AA9B0DFB8900AC8227ECFB43EC08A7B325DDE D23F0ABA4A1B771483E181383EE1AD282C1E69B5A9E652EB71934CB6065FFB8FBFDB8307 785AF2FB59FBDC229974A8714C47302429B17F5B10492C7594D66BC8CE44A8C42755499A F34DD4DF71DC73E2DDEB16DA14D446A0E0AEFAAFA47A5290E7ED5AB76C076B892156B159 A5FD0E83D88CCCBEAE6395046A76559F8F33DBADD30F8D530A342297E4E6BC9E0A0C9F17 60ECD67C3008E01E34E5F688377CF8B6DAC331FAF3974572242DB1850F972DAA8D73F9B4 1A21CD8F3ACFAE89915EF1A2E369899F81826565A454B0E68C02625AD18E47742280439E B28A956044CE0A1A6E71895528109927487B2E543BE901144FD3AFE5811E2D5937439E5E 29B6B5CDE26F27174D6DF8D026696953A6ACCB3E84AD623C1183484F38484C41E31D18FE 52BAF597742D38312C7F83A31DC53EF0FB87325CC73E13A9A8B467C07237D23FAD848035 AE90BC164C363787E65E8E759BFB8A1D0E36205BD6F9B5D95788E2A8ADE9D6CD15E1437D F89755AC4FA834643732D4F5AFB8B379C8A404EB2D5795FBA40A0344DDFE3E0BF2475616 9AABA8F303DCD70653B3FC4F15565E9A3C53E2190F3F8EE18DF5C5E74A5EBA1375946280 93BA397B914D8AF25792043641E70260C6DFFDDA2E09DEA65B3C58260635C4E3E0D4E384 8D7CC744A7D0E00EFE5A4F35B392E536F2EEF714EC49168304DA679F87088CEECC5DDBA4 EA30D04BDD075553947644E66E5D5F50643FFE8A48D3B16633CD2083F05755BD47B71767 53983E6F4394FD61B4964F749977AE31C2D5C25C3C40D1B7E070C7A019EC00E3C55A3255 EBC73C47F2A4BED7BF0387F9E494FA3E2327D76584727AD5E8198BD80A56B7EBA9B0D92A D0310E640E53ACCD7DDD57F3A286A301FC3E1ACBE21A4E9C572BB15721A64648027EB8CA 13BE6FD4C97E304406554A623F3F9FC0F95497D97A325BBCB5735E2A67BAE21C6650F633 05B25DA1E1DF9417597E09C8EAE3C3AFED656BE4A8021F5AFFCF55CCDED9BDCE2E7E195B 1BC94C800ED80960503D735684810117CDF144B739AA5F912E71530A244D4C9DD5BC1AA6 4A6DBACBF7B11706973418E8C2E04CF96E21B56C41162C78FCE26B025FA9E920C9C7641A 1303D118AC0AFB7C87A371346C19944F5AB905B59AD125C892D213989989BCE2366CD210 8A07518095BF0051EE471575E0189E41C7350F1DDC40526C34081730EDE9756CA029B128 6C63DA99B0A4422DED67441301E7AC53A74190D24E9CC438FC2826339FF05E3B58F8FC83 FB8F58B14DC842565BD87ADF791E8E4413030B60A484128B0A91F91EB8F69B90FAFEE2C8 7326618D44D4845ED40A2DDA09B5CBE186E330D4BD84A49A28E3F5D1AA6B37773C12FEB6 885436DA31DF8145CF2A993242E6F2177BC470F58DA16422C8BAF4FFAEBD8B0D4AD5D41C A32147945C2158CB5113C64ABA334DA9EFE8A371332F1540E374E0AEBEAB6BDDFFD4545C E156121E3348E6BC1D3120D4BA238EBBFE05AFA4FDFB3968494088F06109BD62AF8023B1 1F8802FA6322E0F11C03C97C229C80C656EC7E96E4B5D7BC8040E0901BECB86D9A4A5C70 52B867CB27F11307C4CF24BA0F56CF555DF0A8F247D5A98B1B04B19EE9B394B3FF9473B0 2D943013C77EBEEF429D97B42BD8E25E251FD7BB352C3994DFF181324936F0AE8267CE8B 657D167E89F690B0079BB26351FC13A13F968BC5E99FD306DAFC454A5F1A7ED0F388CE57 62AF1A627ED239CE9B4391FCA709030E0734D5D8E1F7F89B3BA991AB9D4AEA597C4B074A 69F44BC22323039A98347F49DF7A98BF48E617184A03E7276716DC5895B5628A004FCF5E 01C22F2304746521740C919F3BD418DE025AC898B104BF9D15DAFE189246D3FF215BE37C E1134F41B0D0F0AD80719202E6E3691465AC0C9430C80028CBACD2B80A95A6C10F39A5F6 12DD73AF2C3E4E0770FA137759F5ABFED0186BEAE50031C202975200B58CD5C7AF95E60A DDB460008A52BB26F4847E6E290A2CCB1F984E97B899D7B63948411FB074178475CFC3DC E212536D720C6F704C1458D45E5F2D7DA34903ECF51947DE98552CB2CC5705494121A96D BABFF6E7B1CA155EC91D910DB288BA8DD87736EA60C2B5A35AD67E4C4B323F1CEFD5844F 1B6947FCC7A11305A1CF3CBE545C891CCB7A10F9685C9E2979F7DED90DD1D5C69B934635 B1444A33B4CB56210DD269B7CE94BE1282EE7A2E2652CC743F33D25F1E83680DC05392F5 31CE3343914C7E6C77D9A0AA13DA8E7A97B402924097FFF414076A8E055E76FEB93C4CBD 8841A560092F4ADCEAB9AD16D7EECD6696BB47AC93950A844B70386F77572A3766CF3AD2 500DB126AD78931F8FA3D7DA41C1F3E8FC42CFAC03070E28707D0FCA1A6A837521BFC1C1 86990ABEFB76BA56B8ED8475F19E3B6EB8AEB62EF86989559B76679FF475C79DEC1A0DD0 FCFA1FE72E35E5A50086F49757FB1E65957488453EFEC4E973A48EEEA0F4D64054DC9667 0AEF518AE6999EB2A61C1DC53795AD29A18F30369C3F4378B78DD76781E7B96C39D068E8 819ACD8DDB59E4D0B60D42398E336838FAE48E164F7935EABCF60B8B6CDB887BA75245FB F061E3756EBFC0ACA6E0FFE3CFE8D3F67FB75186DF4557165E1A492FD523C7343B1C2D37 F05C4CEBC077B8DA778BE378F322AC5CC3B06C2A74687B0B3AF9D08D453753B5FC6E4289 F362954B80C0E4DF1915E1719431244BF87E065B4A033E0B204E6072D006EB10DCB9F916 0042925BB8A82EE47AB260686DF9EA59803AFD45C4D0B19234F6BE7913519D61B5E6250C 4E5BC6CF722B53B283F4D5E5D2AA7DE35B5C87FD62C9E9DFFD671BAE7E08E68E11710E80 5448DE7D5D65F4AA2E27EF0FF16CA3E6569A53745123A9FD7F0DC8A57D1AAD7CAB961645 F0BFA125101F21F64F0CEC860CE306F02FB0AF49F0C0C6D11B437FEA68992FAA2D6CDB42 6686056F769470CDA1C158913715FDB4D4687D06545AC87BBD5283D8B9E1FD1B1B0F256D 7C675712C2A6622A179F5AC2ABCD06070A038068033D07E64E0C70DEAF9D61DB3F4EFEE9 ACA908C30023FE3CB81597386872FB5D5557BD4461D513B6A62EFCBBD3062E67095F1DBB 3167E0338EAC1A52B38FED183AB520E882595FA77F561312F83C102B04486D2942CEE713 92563D7E609E81354D6F8192CE3310890CFE69B41907B023C3451075383E4BCF6102A669 4B0593D81EDC415CF7EE2C2803CE5810EDC28B09155F92CB20C139B43E07BFAB08978CD5 65270BD77658B0D4259BBD9C3A2200B64F73ABE0D77CE6D491253C7590F98F3AA8AF8BD0 5946A659EC1099D13E733C96A4D84405915B12D7A5399645D0C37C1944387D088FB083FD 22BDF34BB31B396F618C518DA593A9584F8ED6E9F299E72A6F0863B4A3C9F184B1AAFC98 0CC313B225EE3384D2D814A4E96C744E0DC6A666114241DA125F1178D8F1D986B7D31548 F9B6079DD38BDBC0AA94F135C44D8B7B6E9A0A0B63FB5BA59152E97F61515F49B906C9FD 42772EB4016B53417C5A2C8E881B0376656115231306FE3AEDEB6182220C2181DA354D5C 28E0D758C573C113542CB5346ABEA9B5BF0243146C186DC5AE0BD9505E5517A6224EA50C 315C9BCBF6707540621B95B9F0BCCA2DF5BF3E8021CE9DDD2A74B6DDB0E9F6DC8E3BFC11 C0697E87E6C4C642D2172889DDF4C17FCD3E463B30D7A930E4B26BA7289702ED77F2AC66 BC9ED957863A22905F0996D337CFAE61389D3C70ABE7444E8138BC1BC31F8E572C0CFAD6 BE60B1AD639AD39BE03AD66728C1CE5B7F2DA53098008E10B82CC2BECEC7B45421F0BDA2 183588B519182DD0C80B0EF409E2F34C38A7D205CACB19864507CCEF34C5B7A18B9FB51E 3AFBC0970A799FD34464F7AA8135C32914D4DBC466DE2922595EC4A255405D04139C0CD7 F162674F39D8C01F1E6062B5C946F2F4F5E2F49ECDFE43D2642272377C5393E9717CE335 11B8542FFF199FDA0867DDE128B387A39CAA79DAA1DA1388B88A5C921BED6709418DA595 7C8D96831B6FFAB26238DD3D11181345B4AA07FEE3D76093BA5C069C9CFE9E823416B6ED 487308D542C84630AAEDDE0B59A256526169B820E56504014812661336692959ADEB6805 C7091B7899F0EF46299C414925315D10A8C9652931AC7141FBD3DBB0C34476AB2808FF11 9B10C17C796E67EF18A386F9E55E34E0D32701D1F77C78FB542D49C53337B9074D92DCC7 0D4AE59389BF27E9CD453608A19855F6A976347AB95CEE2B07FFF6765F97E66978173C61 61E38E6CC3BB2E278C61BDB601DB7835E9515D347F37A63EC6DADD2F72BCD46AA4FBC82E EC40DC7ECB825867B98D6F457BE4502C98DA8756CB9285B7DD1C867B9FCCE8591EF331AF 44E38E3523AA39BF0922C6F59F1E9343AD34DD39DDF485FAC00B38EFF62E16CECB735ABF 903630A30396F2912163FA8B23E97F5B81E2B5B538C454967644E63B351B068EF4BA9B3E 70C65BF5BE8F0352F7C0E25EDB22716A632FD832D51AF2D26C880035D8017C02B0065DF8 44E289E6D559125A31F76E256197DEEE1F2CE1D0BB7303A3CE177B692D3D0F8931A35048 F86168DEEF39FEDD4860DBE06F21F21D35E8B982D299CC945E2C8E1D73D1891ACD1AE977 9584F2F3E9B5621C6EEAFCF91E293996F35562C16AB5F35B6A0B55D9FA85FE3B08692C03 E453B44C8E1438205A9F18DB136F954C7155DA1288BFB6927A4C308C86C682B78087FC5D CD3976667B4CDFB90CF4E882B1C35D9515760DD4ECADABE73C3E9758E0A8A3B01BAA6A2F 091CFB987E893A722ED935642252512C3C3492FE736403EBFA8FD18FA9E9CC5B0E802E4A CF77415626A072B3EA3C637D2F998B91B7A7274C2DB664F4A9D73595C2F47DD61E303403 04E0DFCF9CF520E33AC7E0978B004641E5B6A88A0657F615C2FAC770AD1DF1E31BFF6E1B 8A32F32F0BE2A2649B9BF3F046D8ECF27A0AA62909D0A80262633733EFCB4C21A295120E 9B9D193A12073BB638C3BFE75AEAF1B3F43FBE3FBA8176DBFC8AB0CCD2E874DE912E3A7B 13421673D66744ACD888E2687051B8CBA461B90E7302963CC5DB88AE64303BE9BABD47BC 05A780E1545EB389973A5CF4CF9E53953DDD085E617213B10B3836101E98A0638C1CDCE7 C9E0D9FE79D94FCA6472E2C9C9FAF3D7D9F260FC849EED1236AD5774045E52CB82B0F7A5 FE589651B53D7E9FE4A8848A702D6D5D0A415337F6E8DC7148ECCF94B23AF1C11616158B EB253C903DC963B61D2C27DDF6E13CDA799C54FF9762A1864E516B913C401713B8854414 B4CA200EBFAA01F382C70F27589796D7EDD4A35334853B33347F231F24C1817657C93000 2B59E0A2C4A9796822D5F7BFB3193DD9808398FDC53BC25F402AB126C1B2C83914888851 037FF02EB53642AA0E6CCBF0ED5812527BB367DB4E67A6B8046DA7C215448808EAB80496 FFADA52671C89E018CBC8D36CF78675E0A721FEE1112BF9C78D478024364E91CFE2468EF B6A0BD9E1DA67863124D9F5F996EF1FED356C7FD2AA3DB3E3F6CA36262E896894FED244C F3BFAD999C6F42F13D4AF617C03E29DD1F8ED75BD11F94B1BEA408ECFF117610EAFBF4FB 241AC338E6A8714A92F2A5AEDE86C493792743F648F2AF6E9A2C692A9669180F629947B2 6474C03FB8B712031E24F7529143F432607D57E81CBB91A0DC6588EAD2DF8AB5C43C45EB 9DFA398AE8272E43503D987B36504181B2E9AF2357ECD3E6FDEC731B623D921F8D1D0A19 027876125DC02D8FD29CD8521B36373D4498E2D2D9144C85BA8D5D9AF13BD5C8278F036D ADADFACE6FFEFDADFB88D3CFF12B2CA14BBA16CA7267A4CAC32A0EDE215D7C0FC7EF3B6A 59A33CD5145E2D8E3530F94B5BECFF74357DBA205348FB22D4E3D40F77ACE73BF519CAE7 5277729978A61B1B9B76E846EE15C8139B927EC9E2F8B684E0E5A30AF34A0027B9F2351A B149CE2C8DC951CD54B4D6974E0BD74BA6C2F83BF680F0A01CB39D8B835C097E262A77D9 55A699E86D30312427EDDD64EF7A3ABA1CCDEC22EFF658FBEB30B8FDF59A9C4185A55704 530A1499CD700E1D6AD5DBDE3B662DAFEBDBB185C32C7E34406FA6B3878D5B564ACC5D9B EDF6C7B42411081423FCD2BEB0AE7EE02272F547D551547A11F8CAF8D9F2CFD8FF3626E6 3CCFFCF9277E6003911C54371677D671AB17424633B776DC98004EA4EA0917E085616ED1 273E73F2FB891557CC5A9BB65FF704EE526EBF8B34359AF0381A61059E7B740D8069C128 0F942C6410FE3ED272251F2653817FDDEF786B1F7BA9C6CE02C56C33D98E937EB303717A 1AA3FE1CE2D10A5D07F0E7DD4269F44488ED497E75C92657A2CBD792B9E3DEC8C073ED52 661DC43A52A6A8218385FD37E1D7791E540F225AAA90480B69468660E05F5B826851F985 8D127FF6ABA8E58C4F69961AD4896B4EAD41D14399A3F7588E04E63FC1435DBD45530015 D9C5A1DE717D3923919C31B79898FF17D949F47D354CD81840DABDC5585E3ABF11E556F2 9EFC55559AF05084F95A5900033AC0AA2FE370C49C71411B98B69DAD30D9D9F75DC90A04 E59234156EB4B9DD2F923A2DF771818759BC86E763FF36898697F37343FE7197EF5ECCD5 0933E2C446D7AD1AE945A87A3B7F62F8E14899729CEF06BCDBBF29D65ACA3EB4293CEF53 501735F2DEE6CB331ADC94F27492130776C3E3B422975275C115A1E9882C6A4559A698D4 46C5CBE11497CB48EE316810CE428A6A08BFFFB3D196DAD7BD4778F216055C79C325477C 92443E2978BE1EDFDE5836C722B96A070269D2D3A1438374BA6071FAD1FFC511BD8974A5 803AFAA40E3509B10223D7924DF9215650E9F13E75293B799B4256B7DB4878F3936CFCBB 33D0A37E209A1E3EA8EE6A3455A84E28552DFD56BCCA0BFB10B7F7D25983D3865A9C617D C85CECEF64CD8E470916B0111075DF6D051186CCCF48813C07E53D7DE553FA3B50B6F7D7 EA60B3EF169527C6206D89C15436344E8C4AAA490C0D6F300D3A18EE3C50D30BE9ACB50D 5BAED6CA52732E7530C67CEFEC9ACE3659FF09897A62F22A6383F7B62289052485B2139C 48187D0FD3F64D65EF4E2678AB5133A09D448986C96C383FCA7E3518D91BD02A51BE54A2 F7221ADC7317ECA49522C765BF38BE70EA692F063BEF59D5465E3D65DB466ECE7568BBB8 526587C1A4FBCBA6D585509FC29F6223D68C4BA4AB48D83192EF4D323FCFCD2C399BA52F 776CF7CBC0F7B9F828A7441FC1540DF41FFE91718AC9CCE2EFD9D0E8D8FBCE8402B441A0 AA2F95E4508D703E86875A48BC8C579A2CC0D3086B99290845A44B3E14B28D95246607D5 ABD998C92B5CE660D40D31BBA97CAD73DB5ADA4613520BD4C4D19F34A9D3E57D66DB2090 30CC7F57D5108AC7DF5F528C04A15B360C8CD1ACB78F090AC2518C1EA0D64F0DF393460E 25C7F07970E49ED6DAF204DD86A718DE11F8DEC66E247880CE1DF51FFD8A5797C63948A4 80D37C43C508219F322B346B65ADB3A801FFB1033D409838FE05234432EFF0FE2127AB0B EBC5890CB026BF94AAC5DD98E4153015B36D30B72E5192DD9D5EC6E8609423DDFF7339DE 5EAD4AE73019DFBF3BBD13FC154FCCE5F459FF033A826C7C4DE12ADE39CD85D3366B8CEA 64D4CC905F352424FE9120F447B75A51379885369A73600366055384C7BE79205D2B868A 1A6246C803C27D558DEE4EE108C013C6CFB8AC1016479E37C0FF0D4371ADE9EDBC986BE8 A8861975C6761CF9DFB6F89244B2B447AA9E48E8EEBBFE1AD875AFE06D2BD72D0867FE65 68D316B08DF35217AB5BC65200870036F850433BA2C26D1AF67C859E8DEA24AE44C6F303 059B3AA2CC0F2DCBFA798E151627BB8CA785FEB783D59D10132725E44133655873FA414E C6C9EB631DF1D0D3ABEF257BDFA9B1BBF6C17731195DB3B53EA289A0D3E63F41A330CBCE 863B1B6352A72A11F54C813595FA055BB5FF7F27735D4D3F5C87ED89FD18A4709B73CF8E 64F9793F12A0946B974A03C4BE4C1C2CEF752D57E323981438F021334D69737DB7B9A0CC 4CD5A93A3B9478DFEA4096D143BED8D3C4E19C7BE85436745B6BD0D54DE8DBCD1268E5AE D92F8D23596A27B730088F4529D03E2C88966525D62C4A90D4869514362F605EBB9852AC 904758B83108A59E29BA45404380D86D51EC2567A3574A9C6889B22CC1C23063A782746A 02F43654B378E2C60A66F583FA666105EE8AC6C54C17AE79D0BDCAEFD951139FD96D45B8 2F75F1928870A9876678588B6FF4B76F3062A0B895F8095ED27A8E620C2CA398EA161BF6 9EEE9567D3C4CBE7ABC01D7AF30BFBB269CBBD0BCE7208BE1C94E95639E99337C56FBAF3 AF87E956EBBBF2D87FFECC8B32220949A038C48BE761CAD77799F8191AC0975236C15458 A7957630480517AC0F89026DC1B4AF3B005DA7DAEDBE41EA451D4B28516204427BACF5ED 968101E14C29396B7BBDAA67F10A602207F365E96CC6E050248C46BAE78348C4E016AB3F 1A1DB7E9BBDF6C8CD37615A12891667153DE23FC013ACBDE84E5E490FDBF9066C1CB00E0 528714B54E71B5626E71D387B8FD41B21E2DD15CD595EEDD545A90E8F0D02388820B2A97 527EF7DAA65732B6EE2F07E2936318FB75143DDE8F5FDE804346AEFF05637BF48A705A85 B6F3863470ED141E118801AD9F47FB05BDC65AAF8F398BD3EB895C3AC5C94DB7CED1AE7D 1D7311DD67343AE0B5724A8827CC26E463AA76B00F4CD3168F1C92C64EAB1D001907B900 6B1A12550668E688E2D0ED3355ED0271228CBBE4D56848F0B08EA24B00B5B20BAD06EE1B C6606DAA509FDC41D2BE545F9FA650E8FBB0E78CC856A5331A8A6476FA3C44487B9F37AA 5DBDE9BE2A64C69CE8438170E2B40893AFFC0BE099EAB03E5034458D54BF9B64BEEF7167 A25AEC8A1F7217E492E5674E4C8B343B9249B384BA88DCC4F8902FD4D535C0246E1609F5 4285F84C2D4B489369576E74272255C329942F764CD4A51C730C99E7F5F8B7C52DD252C8 500319E4CBE6C696C77CE1ED8BD05D22E4861CF9D156B95499B3718A47E5BEC9FD72E1DA DBDBF137EFD6CF8BCE7D64A27B8C9BF6E24C929BF07F5A62BEC7BC760706D31B98DD8E87 97559CF8E4357AC49FF6B47667228686A3AE789D68B059FBAB877F3F1BD00841A1F151E1 EFA94F69BCF41D4F9DB5423430A2AD2BCD53BC87A5178F74EE469772FEFE1153C8454288 31B12B8276E3E54162B64B393BBF23F1EAB4D1D385FFA5CB3C57809CAD0A453A10661D25 685A9C56B41A53C3B1CE6E41418D8B8104A2BAF3667EC877C9B6269BCFCAACFAF695EAA6 BF13891E52B4FBB7543F1BE26A867EE6B515DA051C3C7BA25BA135FC186D4379D9AB4949 582692485409A5DC52BD6836D8CADC2A48A4F5B4FCDC69099C3EFC7166ED293A795DFDC7 3FC01A91C9C15219723FEA15A4FAAC3511AE8D0DCCAA1FDDF7E2AF4CBA80E38FC6D2D8E5 B9AFE27366ADFF0529348BE4E56484F0E31BFB7B9DA4F06626599FEAD323CA644677794F 541EC7888B181EB0AAED60E6F0E5FB4F2FE2564E2988D6441E58C2C0C1DE63CF65D625B1 46FC422A0E0E77C43C8FA2CCD310B5694EC8CD1B9A3ABFFA25687D4013C0E5703094D5ED 37295E540A1B2B2E836FF73B23E8CDD190D1FC04DC6CB9D5947AA853F6748388D400B6FC 7DCCA73AFE6D1FBC61A7A3AEE4D24BA702A2F4493D484F19CDA1A850C95486E4E4D43F8A A584D14F82AA0B3862E1FB06E941A90FEACC607D27AE58CF19399886879BAB287A429D5C 0C821C26C61F169F1B90CF77878968F56737041BE38776374546623553223E6E2A8682E7 737528C915EBD41B263DF7E12E4A4C6967FAE40F90DA0D0410E0F22BDE01F018D63A8C23 C157E72C6910157A63B33AAC9E5F3C58F771B8CD24F0E24C4EC17277C8B8DE5DDE52176F A9740EAD3F62125BE32678C35005CD445EEAB9AA1E9A71FD11614426E171EE85F5D9A17C 536C87D58C5140A64B080966EC5A3E0AED8BACE84496BD019E6023AB562FBC1F28CBF296 3FF98D715ACEF7BDDDFD65DB78CB3F0E16C440EE636A0D7C05CB97C085F7C5222ACC6305 4DA8C3F7D950B0399B7250BCB66D0D520AB951530E728B4892779DF0FE56C9A27E279DD5 02883DD2E2E4013D03491C52B21DCE600D68156106418DF5273C6F6FC9A3E1E9889DCE43 17628702B21201E48D23A7E0EC5E1DAF104F3BA1F659B8FDCE301C3D7ACAE1B7CD6846BD 496B16BF6DAC876C117242B3088287DF82F260F960CF90849F515702F71EED275A40A579 B0B8F707681B5FAB21A81FD992254AFC0D43E88D641445FDAE5D6874C4EC37B2BE38D5B4 6DEB232B7100BCABA7ABBD53F5455EB07ECFA23B1703A2690869A8D0E60276830D7B4FAB 231FDF2784CC788CE61A4909B89C5B8A5791FC3160166BAB1BE25E57BFB2D162CFCF36D9 CE524A56A15DC752BDEE0CFE605E5BA650ACCF0DE4286C70EDDFDF8527A02C3958B17C82 1769E8EE3E46FCD93AFABBDAE4809836C56C242B0C6C63107AC6C3364B7C79BA5C62BF62 EB6277B4F6905CB999C568AE118A690FCBDB37433DD2B360A7C66EB52DAEB0662D61DE6A 74637C6C8B373F9EF9A473486F3A4326ED5A442BD2566912C9531C5EA6BA89553FB67C16 1933CA4D7FF5886F2F6B3ACEBF939B682968D4B0590B0D39A0871A78EF3885E47F892C16 FE93101266B12AB988DB622F4E408C442937B56007334AE919983566CCF994B3084C0D42 5EF94563A51CB142F0829F5398B647AAC6E0010DFCCCCC15BD0EA5A6CC90EF8F790980F1 4C8A27B2792B3C83E1317CB932DB3B28F008D442D374AA75573F5A324D7C5D6DE8ABE5D2 CF78A931DCCAD7831AC5A7A5D5DE80E475DB271F0CD21A47B1E7DB5233705ED0D421EC5A 2BEE73D5949400151866E065B28D6E1F6574E2D335BB542D16EDA5823886430390F9A0D2 B937F7ABD1DA9E04894ABC066F8CF0B8BC196BC1465A378BA14D2284AE4DEA134DDD7440 77DBA60CD0F9E478EAE5F7DC0D6309C9EA514D44C279700088581B29BC0136E2F4EA3E9B 64403DDB054736966C331AC20514637A3CAAD1B27C569045C444D48FFB63091B6D20CC67 FA5034880794ACF58358861548044DACE9BF02B4A23925639B7A6A5DD4B6AEB2F18C1619 DA2E4597905CF4A00ADA215FF258BF38FEE6923D67424DC1B05015C8D09DB1FB7F660C6D E061FA2690AF2CA528AFDDEAEEBE6291D61955BE374DEBC8A915639DBC5382A17810993F 92E7EB5D2492E76F6142679171DB74170A6B390CBF7E13CD5307CF04D4C471BE0C7EFEEF B36F609D765DAFF2E682983BB0CA6B70B713F1217C8F2272637C8AE97B3E15D5D451AAF0 44FA166A93B277E334DB8EC58EA397CD013B53DE2D7944387712E80F086942728B9A4877 C1193716F71ABCD563EA769AA555CA4C48FBAB634B1AACB77C7A576C4DEE78C5CCE3D3F6 E483B076A4024292A35BC7080245E56B6D58926983C0D9C31206130B3B8AD5CCCF8A8659 465C36D5C5FBEDD7B455EB4BAFF35AAAA12BEBFC6A7B40AA15B5B957625C37494177CBD3 E3E59740FE558926927022C6411B9F07ED9BBC31AD206944E56146CA8BC0A9E8C9172C0C 0B7C46FCB490EBD02E86F69564B8030A3280E376839D680786A0A068DFCF0A3DA5048898 69C9AF0362765CB583B785FE8C0FDCCE4F39527A7B73565CEC9E798FCE909941522819D4 519A12043D35DCFA7D9188EDFEE780E04A868346C68A3ACE74B16641873B8985C1F0C263 9BF63ED86CB556943932F9AC71096EC23E9584C8CEC8E95C52A493E4463B168BEB6F259E 71B2B22B53554E487A897256E37BD4C1D3B48DA9AA5C5CB8D5D85C61D6E1BE3A607BEF1A A8ACD46A93FE3C07D0BB9EBBAAF0433C7E5C6D5040CF9F5AFFB1AD8104D1328005CC5B10 A1993D3EEAF3C3BA4A0B1A260A72DDA6ABD5358DE5171F1DBAB667AC022F46D3BDE54809 790CC4EA533392E6C039013D4B0FA21E36143CD9E708C89CB13E09D624551CF86BB79C3F 13868988903A7C5C744743FC8CC6B48219FBFFA584E016953F8CF342DCD69077D9387A34 EEFAD0463AD98FCE21EE8342A3CC4B9CC10F6804EE9CAF70FD1C56CFEF02B7CF2D89CBAA E45918EC9445AF3D1C43DFA501D9B3789314063A748A6907BEC153F294D6D046B9C76D01 4CC021D3074C0A2D8E92B45EBF14C1C5AA39546A2362CB8A6FA0F5198AF84119260DA3D3 A89AAF0A976B1D5A020ED16268C8F1908400DDB8E27F57DC2B00E3E4F0DF1777A934DD89 311A8C7309C24A670A6A9E03C094B548D223C31521DD7FC2BEB3DEFAF7904EC0123FFBE5 4E627D9AEF3AD29FBAC003520D0B165F3AE91AC94FD8F3FA9A6BF9FB81863D03BEF8506A A74C7DC0B50BD327C6942905BD07FBD62E4C3B16A06070BDFBD80414CB9D5261A5F721CD FC7D1F1A6811E1362F9372CBAA3C8DA63BB103B2C10BF6F2504306DB05835B80FB70BC39 DEC4DB3ED1EC4C2B64CC907D751407B6B8379F449210D0BB68CA1C445ACEEBF9C31419B2 C4C5B8780991D042AB3948A5C5C8005E0BE1859B13F8AE6D4AF62F00B415BE5BB641B964 53F037C492B988D839B96AC0FE01DC0EA9E064FF06EFFEFA446F41AE8E44AE58355CBBE4 57DBEE1EACEBE69E6686B687CFFE11DDF76C2EEEB6662B1A2A176BA63E8800A51160A6DB 886AC4C5868D17487273984BA2A47F39837F197D6A9B279D71157B6ECC2A72F83C1A5C45 B17698F3183C00B6A61C732604E5520320309069628602318F4F68DF0BBC2BAC6E90D1DD ADAA738EFDC3F63E8F24DEC44D41D2CA546AAB5A88FF61081C144DF568F35C21A887FBAD C87166B58486340679B5F844DBDD772E9848400746A207BD04F470D2B2F14A36225FD693 E1BC7CD6AA3BC7FE471C56B411B084FF8A67B0B42954C0915C7388BCC44DB2CBA0A70F4B 1692AC59029B8181D12F6A1F22170E04696799AECE8E6B4A96FE89B7A18A4B6684815BAB D8D94F98302D44EA827914CFDE8CAC4CE48586630DDDE0FD1F9A57E8AB0EBD27F6A25186 7986192B6D3F46C796247B1A220455A49745710E32F4D03B4F15636197C6F84967054365 F7C0B1C20DADB63AA474551586EA5F055F8F3EBB1214ACB3128D4C6FA566C8E506DAD848 6DC4A245D1977218241A5FC37AF7C03342EEEEEDB2EADED36EC0C43BA42F14E3E9601784 5780F5C6E5262D96C0C50C87C9CE4E4666D1EF982FA7D4F99EB0A5EF4AB0456FEA1225A4 E6873C1B6888ABEDCB0D84275EB400E73695564A15E338E00DC77981DE14FEFB40796373 631102384B1A3C0EC239F19A2DEF2689F75F5D55E22AE9EA06A8A33424765D84E458AF21 B8C99E6BBBE5517587FF76E7D02BC5AE43007F2228014951C93C50EE50EAB764BFC8A084 86E97549CC9A8C53E442C8AF409C98382080D32974A105D60383E077138C34F887159B4D 5745F7B6443B446C5840BB92A3B0BC317EDB0CAC5310AEBF16285AD0C4DCDE6E27C0185E 9CA90D3086D6E11EB43E65F25F74377AE8BABC97E0D9ACFDC1339D0613600BF6E2F6FCBF 66A0AAAEBDF0E9B3241F57D08C17612666F8286FC17AD0CCC5AF7F355668E146C3FF61EC 07A85AD2A655DACD2CC58D5D0216CCE6F8621405AC7A4A160B6B2C9B6C5857D40A5BFABC 199AD07AE8BE3169A9182F81F80A094608F1C2B894A6CC33CE4DB65AC02E3528601A27B0 FB7E14B2B97F6391B0CC8963A71C6794E74037CED7C0F2D9B7EA192C44A5C1EC78535F45 A5A38F6C9E9E811B950B7D0B2BCC7AB21E8B10057E64A72CD86549B52D74C806C242FEAD 5751BBF62735377DF1C0582C89B0794D01FDA343EFA486AB2746A6780508206D0C42F020 94F3B8ED6371412FD4CFF17DB123DD857DF02FEF68954C8A64FAE88C67351FFE15834360 1F9DA7526CDD58BAFD5372A39BB7AF47A04BA972ED382B7CE3FDD92B98B9147EC77C5496 773F33E58D6B9F48447D3BEB6B12CF2FA194EBD93B318014CA0EFE61E6299E097B394F88 6D15B7DE6DBDD12A8B38C5D0F328FCA5798E951D950DED554353AFC64543CF6735456CA2 72333B0797B4CF24D247BC76F9FD325A2044F01046343862E92591CF371C1A2F6118E36D 2AA1EECFFBE7115C525A722072311E353526224622B96265B29C10F6FA3E35B8B4AC8AB9 084F74CA7C2E39C19361F97BADE96E7962B8356C92DCCE8B5AB85C48F569001F238D113E 8E0D83B793ABB238B8DBEDF30F33BE03ED480AE7672942C7F60FBB2B2ED85451DBEC08D6 3F33AF72437E6598E90C52D62319A1F2018AAB1155506A96D4F2558004CAA6EC715D8EF5 A34C7779ABAF2CC9A288DD88B96F0F3F1E45A6A7049348446526EF562DAB4EDDD8BB3030 E913252DED80A8075C1C93E27509193CAEEDC132A3176490B03C53DACCC26417A5838515 FD4A8093EAF7718341F9A6973474EBD66C63884BC78E318CF04B9D3449196110EB6BC018 C1DB6CCBCA2ECD1016F1E884320B14B27BB8A15FB42E190C30E45965C32C21104F49FAA5 B3F983C768BE7C909127C19EE6392D6E9E698D650CEFB7AE48B2442522D88C6D6FDA41DA B8B3187F497DA1BDA3FDBC8B71A619063D9461393FFD5A072F237B7FAB49597636B7A41E 91DE676102B0FB2ECB4D5135C015B99419925667444BAB52923DE73287D3934DCB1BDE9E 72ECC4C55A55BB24A71B5A37960993BC88A0C66B82C2E2AD597EDAE4F74FE918106413E7 233C832EAD1D2A2E515D734960730EDB2A8072D539E2C69CC5C9E569109B20670157AB44 41BC249E8DAECBD9F2115663E7C88AD8C4067158B822CB278DBE410E8B1E3E79D4E20C6A E8FBB5746390C823D5D818C3583A41A2D080DF439916FF23709C6E816F7DA9FCC60E5B6B FD17813DC59636D33A2523AED576BCDFB0DC88725D6B6F286B2C3DD85E53D825DFAAC9A8 8572519A254CB4435907A2A57EE96CE3078F80E24C0DB0FC3B047684460F5314B1EE091D 6CE4B884D06DEEBB7E1ADF4B44376699AEBD7A5F4AE19B5FF8022459E9E2D43117F4C1D7 630028D14169FBCB72DDBE7E4BFB4B7EE1DCEEEB91623718BD1E5B9E16DD4F3ED2469BC3 1BE0D51A530DE079DE096431EB3C624898333E4A271A79D33816881ECA7C355C1C0EDE72 039E2800D050F507D05D8DC2A6F79C1E58D269B1CF397160A813A827B5D5060CE32B3454 DBFD65339F3B75CEA60BE92A1848B7CA7EB730BFA278E8D549D3DC68E9EB32553FA32360 4F516DCCC56EB0751383005BCA15849491D9A0BA4227295B88BD819FAE10216E1E2F7CCC DE0FA17076C881DC4ED1E03F3004437849D059449BF180F4E5A547218D6CA90D235A179F BE73FCDE7531099D073127D048B9D3050959CD6DB6FF19E57BB9F296536E33293F4856B8 20A8E948E00F7FB3226F846EAB9F1A7DFCB11871E7B85C4A7BE6A023BDB2314FD77868FB E02DA316769382443FDE43AD3979D243726923904918AB90A8405B0184189C7FD724DD7A E4EA99A6E31C18B5A00448A8146A9897584A935118BBD8F7BA9EC471461E5D932434345B 630674C3ACD3C97E0A5C1E6FB286D9A3ECF40FA51AD7C1FF9992E0EFB3633F4FE8450FB2 15947E2AA9E07D07A98723DFF9D31CF3C50C4796D98DEBE12BD475765D8AEA0180CCB73E C33CC144FCE23D5D90282349CB17E9FA753A6B8D0F3FA480C5D6D4E11FB30393DC4A774A 6C568A6794F6C71DBB7A1E0D9F5BF8DAF1EC3CC18CB067FF86201124CA66FD8F7B884910 DF8511ECA9F027A27CBD235BA14613E32213923BE966B04A79A6328431B07F762BD7AADB CAC4E00EC767F91C3BDC7FB20329CBC2A91A98EF384CEAB49CE57F3A4D83C4A690E49D37 BA278E9D39B92740923B3F3E5B8AA7743F2B8EFAA230C211884999091373843DBE82C2B2 3FF81D8D7BDD75E9782C9F3BA1C587402A335ED42FE47F837366C61306807EB50BAB23F7 196DD1080B0389BD1221115F17D9B51FC600C77D5B02D78F05ED65F895AD34CCEB36EFDD 8A3289F4AC4472CC5513E688B96053B6DB54198E0C0B51C3FA3723AB54F2615E0FD7B488 B3DF35A895E558A05C100605A213129C0D8DF08C92A772450F2F1EE7806DF2B5C5DB82BC 4B72137716329403F9CCF85B592DDA02CD4FA4780D60E8B9BD7D079C59070046432F8A2D 8BCE7098D4A81E6933807B0D9EB617C2D8F7DC8E29A5C10030C93918378EC771EAC7FC78 9BB4D5D1CB078D4B2F0F239039EF9F1B45D768CF1870089F76F54F86CF4BF7A443A1B333 EBA476838752720F8ACF49C0147F62068606057E9E8F55D3C26BC0328216D6E55B9A18E8 BD8FDC0AE1FBD60D1244AE9B060313ED36231A8610D0DB8BBF8B9D0C218082678F828853 2BF2FCCB4E13251E1FB176AF17CFD1B4E74B195FD65493F74C9755562D91D83CDBBF8693 161FD054345DC816F885596C6B5F423605D0DA925E27D8A44F6EC50E36C368B29AF9FA5F 7D634E4390814758A934E216DC092F352B49916F6F117EEC457AF1029FD0FA1B267BF519 C85866DB602A67F6ADCB772EE699DF5FBE9799BD6B0CDFEBFAF2FFBA9E7D1C7A4E9A8D72 B1730290E8EF082B6313E162E1C1EFFC7A404C28B4B3E4C9485041E941455CEC85C94BC6 B727E5872EC049B0F6654CA3F21E107FFC105175C30BD172B8FEE93D16EB85F14DC911AA E9CAB4579778040FCC18F15C35F5CB1DDAB8C393476B882571B1C81777835F011B5DC4D7 91703453E60205ADB46E9F9049F980603DEFA613F14F370EC8729C5D365BC4D128C65114 833F57FEAA89834597C2AAFCDB74C5CA0A35B6C380EB029CBCEF5B7BE1D253760653677A 78D18C6230986DA5EBC43888B7CD821C1EDC997A4A3574F695CFBECB60C7F07C5FC4B9CD CC49ED481593019AB8400DAE0BCA31F101B5483B3DCC330631F1EC7F4E5D3EB5D6E38ABE DE013DBDDD4FF6D9689C2F4F3E7D0F2FAD680B94B5375853A079678C3C2FD7CECE27C8F8 7603BA3C73B1CA9CD33F9D114630E413F118161CE5C6B38C8C5827710231B9E8905FAD73 DB3AC1FB0C7883FB8C0A96E05859265637903B41E662CC4D5FB36368E4400737C5F34F1F 465CB2065E90A9B453C7D2A3102CE69537616A15A462087234A358808EECECF2E1704E35 0AF5A17DFC5D5E83798E98861B94A1170CB4DA8BCA63957EB1B7E0515CAAEC440A291161 F6B81BA7DEC7270FD3F2C07B8629E1CE3FF15376660078185A05C41D4FBF99285413F001 4CE1D20E4EB2EF6676D1AA2FA8A4DC9BD3AF6F664F9B4E4B3BCF606D14AEA0DBC253E9A8 75AB27F3D5A7328850C2E90B6BDA2420E82BC0ADF07C005357514257694FD442A6E701EC CC91B7E0845B17CC8F09892BA35CD5334DD73AA0424AE8A0E1CA52D2109E62EDE237177F 1B469CDCB95F1ED1934C09C1C71A9061D0C29059C00D7A6CC1DD2AA2DDC209164890161E 8B4532199F7A5503A4438B3769C9E1F8368764D4F5A5FC7CB397E27844ABC9F2498A6BBD B6AA3C33125B52F692D2E4ED469E7B3ED78D60BA285131AA78F581FECEDADBFD2E7932A2 D96A86944BC7D3F511558E3BFD8AE1250924162874186ED3D12210C79C044682F7BC3029 D9A352D3533BD903F26A180686482129DE478F6A0FAD7DFCB9EF25F13260B9B0273645B6 24583701E37773426743C9AD1569FCB3C69277C3958944EB211758D1787C86F9DB344713 9F522EC5328337AA586BDE5B734EBC6F5F392F7BD9D6910F204C63E9529C9561FEEFF567 800BCB0E900BB465DE21A576A809A13F3E4FB24A9223B41E52BC297040808840FC7FE337 7B7B71A0318EFEA9A421FBCF3B797BE09579FC5559C3085163CCD30F2757E457A04923FF DD33B439351FBA13AF5DF216A968D8F093540D70222A5F98CF9E6EE6FA6ABA02B3BFFFFF 1AD6B5A3E48298FDB66E69459C7E9646829B032E99DBC5B4C98731D868D14159E95224EA 9237CFDF32A20DA1A4CAFC0D55CB9DC4BAE3468A0A91EEACB9F6C76F677DC6BB83BABAC6 7A7238F67F41F0A67EAE0578F56D3734C87304C0D3800E9B52DBCFF05F6EAA9440691225 CAAB4C86856463B0E0ECE208CF4920871DB1EADA477879A4C64194DDC2325040FA104327 FEE2F853DB4515C154B3B8A78419DC4B17C78F14BE6C7E8BB47388B11075474AEC54D6AA C53AE725242BA69651DCDDBA6774C3DB95B947A044D009DE74575030C947F25274EB0A1D 331D25E53F231FE7C2B7817F44B6E98D0B845BD0A31DD9C8E3B6845CC80B259C0B850278 5E0542CD65CDD0102FADBA33501C1251340F10AC63988FF53BAA60345A145455009B80E6 D67C8722B22FBB74554A88B0284F641DA252B9A2556B5EC15DE1EB75C0F74CBEF4FF7CA9 50B90497D23A935511F5B7EEA0B92BC686D71EA186B49B21E9183279379637F8BC3A3079 3419AB94A6EAB55F602ED0D4EB20BF6AE82050C432FEA1EA3B5BF2A16B879E586C1130D6 CD5682D7A1F51704EB03EEF129D7994D80183B70E3D60A5EE4CA8E21D4703605FC8E2CDC 03E1FD17A2B788FD74DA79A0942856C022E9ED417BE6F097328E22717AD8A4976A855FC1 5B8CDCB66FCAD6E6D87021578F2A3D93CBA708390E849C1A96E234EB91F54F53299529BF 1BD1DC11722FB9DB27C98F2FB05D62DA1B7EA32CFEA033EF7C1C47B3FFCFD9A4BCBAEE4D 66C94E8488D397644A2735E9AC8E0A5B4C61504D43D85B27026F15059B0717A0E9C2A893 FD1A0C53815951FE68958615A581D9F1C22DDB219C3C7213F20C496AA0D04E9B3957F71F 94A2A9E20FC1DE943A30D72E20E0DC0AD7D974164656FFA36F1940909464CA435D47546F 4E74ACC7817BB6842CF97FF285E4EABC7CFFC7A314983AD5DE3FA821AEBA7E95252B0524 D423F8FE71FC1E4D8883876DAB19415FF39A330D8F1F2E9E728F2D47EA05397F8F6D4A17 7BE4BE649DB34CD403FE663509DB51FA3DBB4F3DBF4C969DDE8E18CC54AEFDBB23E286F3 EF0AD94165558C2E1E91854A7B2D547735A3BF9A4AD940C328709F99801FD5CE9EB34C2C 394BC530B2F79D6EB01FB151A20C03F64A76D6018699B09BABE16CCCFC516FE46A906633 26E06B7BA28EE26134B52B96696BBA8A235103E8516FEDF892039A768C632C39CEDB3AAC 19D71D351AE1DBDC46ADA5D3D547084243A87FECF11DD3A99C79E08A17969322C177544A A0A79990D1C52BDE6777A77DE02D9E9192A6D06D4B1D2FA19A95D1EB5B2F700A3D76D383 D6D8E68D85759C829BA020BEA26587350B8BB4A22BB437999F0207B51E3C29508CE76AD0 CF2FDDE225F0A1C2437E8607CD180CCE7A4975A535A9F1AE496A3A7D83A276C67BAA1981 66BD3AACFA8CF66632E6D18D256F878143ED7EC542D7C29F16B0CE96D65201519B1A1C6F 941B4812CE4597C92727C2B1E3D41AB59F3B026C32230374B012491D5DC66E20871B0EFA 4A1989D8AB26B772A7BE6002E4FB4AF7F5DD5B0639FB0E59349A6AD7522240F19DEFAC33 D0FD050E565E36E87C5CBF0D924A3EC16BCB31277F53770CDC95254C0B9DF1CBEA0D4386 299D005AC2C1B4985DED85978FA75596D95488F9A16F77CD6572064B658D6FBB7F765CC3 18C1032AB570E04589F6B56A67E0DA0D485062899BBB0E760E649B0485B13F76922AFF97 59BF4651ABD8AE83EAB7544A2CF451E9BB18F0C4EEB431D46B65CC1B9049F243FE740FB0 276059C3A80EAC689D5A511399334BBEFEE83FE0138D3F46FDE381EA63DD0A5AC4E36754 BA7AC6784CF3A1428945483EC5DF805B846C2C758EEC2DF8A63B55EB7FC0762080071E10 EEDAE6674E5539B69A6335C68F1FC10BF1F41157D082CB9376292CDD4362F14185D87F50 369E7B562DD7F75DCBC86A5E8187192B61E3EC233F9E26230855498C1A580470CC20E233 C8215A825640A89D8E21E4FC2A4EC8CE44778B4C96B217C0CDB6D2645FD5E4DC24D293C3 84512BDF80C6B99FE14E429AB9C08E7AB2D752F44C1E826E91DF652505F6C84F050707B7 9E222C6861D5302739CF4561C0A5FF82CCF7E7BB2B3F23360B8B0AFE8D3A272F6EAEB35F 5419938DA96A1EF1FB50DEFDB9C9895BAA791556F51D3BFDC373AC0FEE03560918977CB7 851EDC56750C708883149FA8D939B5BC7F7035ED3E2F2CE7295765C0BC09FA3E18D350C9 9B40E2810C1FD915C2AF3AF93855AEA12DBA06896A51C9B2443E2D9A9068FC76E353699C B8A782C2126D7947101849809294F5763E150498F31BFE1D5D8AF704BB59176DA3DF2CF9 0013ECB8E30250E5AF4152D892F4BE558D140613936DF6F9D43629B1594FBBA870B0FE5D 1BC168BC183C60BA2ACB3C9BE52F853AD4FC1B009801ADC0FB070C65084ECD3165874E91 4915B5F188E4CC3BC03240CBE3224662D2B3AB7B3E177E6ED05C7EDC0E96600FF6527A4F 2A63179E47E74DD67A4D11BB1954DD479D7B66FA38BCBC85411B841D963417853482EDC6 0753CBD2E0B0EA725170E33CF7B7F801BB348538360EF54A01CEB35AD465CFAF5ECA3EA0 CE3DA1240E1C94A7F88375ABC46AFB407FED5EDBFDD79AF542956435D271EA685D9E8474 ADBB88246355C959AE1408A5C4E9209FEF36253B0EA5DF070DF4BB364FFA3386A7FDA80C 046EE0F54552D258C3BF0C964718077914D4A43854FEB495FC4D421C2939978770ABD337 3160C7D8C9D81F1F3ECF40D24885AD5F26805DFAFFBE9661031313540B02E71E1B9676F1 5DA9BC5311178BE39B0FB98F3D7F1064B7E76FE3A15315E234C712AF8542E4E1CA1BC2E0 8AE69382A34FAEFA2E0F67A6B62144B0C767A45C5DB57648171D43E8E07611E04E230C15 5A16B786236833B51833EA22321EE4A3B2E273EA7D452957438428BBBBA25E31A5332106 54AAB61F2302CE54F7B2A0128327D60ECDDE0E455FA05B16747F75D9A27638A174482ED5 DD91C796158D9A20FB380971BC4E30FF0BC9B9556B4B53085044044AB9418C2144087A39 3FF2988DAC87F5B872684A327B30E362978BB4903DE7A4C3967F62712B8EA2221CFE4BC8 72E0EB73E63A06844ECC468DD8C9D2D774C3332553B9FFE6143545F214E3DCC512E15990 9EA880363696C962E6912D26FEF0618B88BD1587CA13C3A82A423F19CF9347D55D005380 3B1B91B352177813C3E20C5F04AB4B9A2AA11CD39E11125CEAC385C25299DE0B617D81AD 8091CE925DBF4675E7D70A515B83800F1115762A7E964FCAE0C61BEFEAE27CD77E39153B DAA1C87FBAC70011B9A0F62A838A8122903AC09A39E53F56935778804BF3D025F664A9C4 3E314ED0673FEA3ED9857079FC6A49A8B77617014A7054017601B5C6E75C8CD05F89C2DF D8ED46914521C2D972BBE86480177A3A2B2DD174C77BE7FC9E0069568B392C124774A1D8 DED4DB00F17024B55A5048A4F33C6EC5B0BB43EE3AAB650D9BE28160D4C0F128BE5FA21A A29DC060CBDABAD9BDD6CE0B5A4B2051E038794AEA31C482C2B5586320652D940FC3D6A8 012EBE0EABD7BC1491162F8FC1C40D07B904B5758515C1286DE71562A790E8A86B6D626D 6327F9C7EE4EAEF270D5A6081025B95DBB7F57C33B819CD417850311E3CA2899703649A2 623255DF77C213A59602CB749F49A381C6101D27D7975ECB414D601B1F893AB8B8159410 E92550514FE10C04C2D218C7B8EFAB3A007816C50B3CB724411558E8DC8520908C205239 501DB6FF5B5CE1767C7EFAACE931987BE0797361B3565571F440FE447A168AB3360C3E36 1E6DCF8F6482885ADEEED01DFA23F47C6B44E6268DAA6962225B10D37E57E20D9C55376B 9D6A880A90D535F91D3893FC09B5409F2D2A428BBBEF2D9DC4686BFF8A863A6CCAE5FCBC 5090B2B9841AD3205B0EFBFF72AABED459118C799C6B281B64500243BCF11D5531BB74F8 A7F676670EA1342A41AC8FBCAF459C9D11D5673A0592AFF53ACD4B94904F7FB3759C59A2 A7E5FC2126ABFB56535D0A6240CDB83223EDE4371D910931D7994AE05CDC24FD81FE8126 5E40835FCED262A0DEE35F705E0668983D65A8CE7DB1177CA8B7BE0A73A99D4D3C44F401 DD6CC8CC119FC36438F18A924D6DE1C2040D2BAFE336277A751D6D4D05A828AB3FB8BD48 A7DE7C166360788AC8DD81662727B330D860166B2AE789181E4231B5AA3A205663024162 C053F2213D30B5102B3C430F9B67E3FCE64FBA1BB617DE61D2A64FECEF8B6BE7D4074E75 DD4AA701474CB17982EC4203E1754A19DE41874EE1818BD4F243869BEA6422CDAD1FDE4A 84A1410C9BC92A32525D6DC52EF3E90F5829CEA418542FCA02FDA62666386F628543CB04 D08188E6B9B0092E6D00C6C75C5CA9436AD0597C741D4B2C63E585470994B5466C509B0F D077B49D87DD6BBEAC8C6C4197B9C0789025B49BDD9534F42CCF987DF9B04B18D19F9343 A91696E0E206F4DBDEB45D6D7697B49C4FF5584800CB512611EEC8415BFE1983BA96BB82 3AC3E496D9D79C6426B97A1455E070695A27E407CCFCE7472F147EC95134B89BFFB87146 982FB4756612EE55A782F303B54670333FC04E707FCB84D255B05D52AFAE8F473E8C4FF1 F6E95EC1B820ACD2D3E980A1B778C4568693AFD446C6E416C48A45CBAD61564329C4ECB3 A98B4ECFB3551D1F1C03717D29A5DB62C8F1B21D036714A94CE536D0E84E3E10800AB513 91E05C62F2A9FFEB3A738E3262E1919FDF43EF49842F6EE5D309FDFFA0B74FF64262AB5E 813C8042B2F450A5CF7B547A8383039E7C14567EAFCE9644DAB0A54249EDCF4C24EFEF7B B3EF129DF5A11E12A78FEBA6080680AF4476F4C0AFF6E8B27B07D6EBBF5B1FEB28341344 3154B99A65CFE335224F382137E3AC87777A6719AC1CA6832B61AE8CD6A1931105707F0A DDA25615B526EA2543F6FAFD00D70E4091B6D5D58C9CD62B19C70D7469F6FDCABAE2A517 66C9B0DB0AB351973A4E2FDFF81DB1651DEDB905ACC447FAB2B2803E90DF264C96092528 8211E23246BF45FD1AC67983A7FD5B371581B8BED06B9CF8E6AA6C4BC84771219E7404B5 6DCD474D9B859D1891FC2231869763E6B8F0615D7AE7B83260DE84BA39D6D60F50BA70A9 EA8FAC771A0F0A745932D00C1328806D938CAE671B94EEFF484E5FBE9A74A97CAD47358E A3CE9F399407407FC199677DD7BB6B7B9B00AAE6EA1633EE18DDBD40FEFD138F8423B304 4B9E9AB192B7C767D7D63AAC804F0D5309E0FE72A8259BF12DBE7A215B8FC8460C285C4E 26067E3C558163C1622617B082C6FC941F8563CF4ABECD0DBF79CD5DD86B492E3C46D0DA BD16AC96ECD6B41212431FECB4EF59DC7DD3071CE030BD5DE690BCDDEA9A2594C50CF77D 53B223EEA513B40CEC7005C4F6B6DE2D3680EAFFB6FBE0DE70E7DB5C11F2BD4085C123A4 73E5CA0785FE70E38E081B5971D4C390A87CF5DD83C8BD63C4307D22A1680792E27FC431 8D403102A052645B4AAA9BEEE578CA28E2C15DFE12134BCCB2171C15A45C5D4D8ACC0EE4 A2C8AF801D64D5979E52AC410A69277160104A386D747814F0DC0C178CCC2BB40E175992 9D3F05ED411630ADFB8E4E57CD223E012F457A8A7C2BEF27BDFD41D3B39673ACEB92A48C E3464A8720196A60E21C1736066FD19154C02D7BC22E821C76F4B89185FA39B48B00BB85 AE14236DFF7E1EE1466C65A1B4B9453D8ACF727CDC0EA04D85E2A4F41976E4833C145444 B0465FBCF96BEA9554304FBFBA4C39ED11F2E1D9588EAC200B31441889B081775BF75B6D 7AA3055C85ACFD57DCBDDC12257F565F1980DA3215AB29A2545B2FEB107C91A454DD3C32 D7D620943472E7AEB5805E64EE7B1D3582A2DD74D439AF03C00478FC35EC9017F1A37B59 A31A196CFBC38B4921A76E41E3A6E2C0E5059FC3848DEBAA378D87736B01C6710B5B0DAE FB06D00BE44EE7C687DBF6CBAE699D88694891A95392324C6C49595C7113FD6D521A182E FDB264432F3B661D4E86766A7DCA2E53F72F7FB78A0C436DF0D516EED141D796F3591226 E617BAE549DFFAC4CFA0F555DF7DFAA525DA35DB699A892B09E654992F99F89CED6273C5 9EB9C512BFA0465E61FDE63D312B1B2758E645893A19C82A81E5E0F5AE8E51621EAB69A4 1D425F9F78B47ED5CEC857DA012E641D5C203532691F9177F4531EAE8E6A7D5A2B1B374B B921CA70F41E7F32A8D83C54AE01DC76C88A96C1403FEB6942029A86B1306AB096F8A42C 2D7FE35C7E9F3DD494579CEF39755AAF7C74909CF5F7322C4FFB2C5A196658B7AB49056A E3DCABCDFE40DB0912B5E15BBAE08B72D7AFA7D64265F4185401E6E723E151EACB8C7494 819998FDEE918EE491E4F9D5F889378256F2F7858762A5E049A618ADF34DB73540486414 1187E3CCF635097AFEE95F695F806BA1419D85C50FA033E4E9FCC155849677B3A20F6451 D8E4E5AB1BFBD967B5F53C21A30EDF1286A0E19FC557598294586D5184D1CDF8BC83594E 17333A522E32233DAA8A6EB39A6330013C32A2E74F0EB6234B63D47A4C8D21E1618E5906 5EB21FA9A926E01A78A60FBD71808A0B75F65786A9E3E08488FE89E433C287DED44763E4 F317DAE0709D7D54EA969B751F4C62AC976693FCD366804E66B2BA8D955945B86D492E74 F17C0484FA5C45D7F60DB0D4578C5725A88A9DEF8E5D31EA02411CAF6F703AF96F50FBBE 6739B57D4C1C318FE7D491C94565DEBC43078303D329E87078EF9B48D66C3E98ACCFEDC0 A31761AF6854E5C4DAD36C809876D93C06D91416770CE8852B5E54AA22F6EF1A5BAD532B E4F55FE7E2AB457F3242030F443975DFB0F2CDCDC1BFE629C8BAE7AF2D21C9BEB3EA10CD E4EAC54AC081CD3C0AA161C52BFAC3A9E4F0FF77563D6FDDE73E44E926E1BDFAB4B1A11E 2B4A7E1D2CF9D6B9DE48D99DF99E0DA53F5A449B344AB2ABFB94BE9E60E6E9B328B58337 A4D4BD60CBCE14C364A2A1D5C02410C2E8A98CFF3A48D23C752413A4FCCC5C044AC99451 20B15B31CC5C7B5FC6D80866C1110B45F9B274326656CE6D74F3481B7D5DE8E5AA907509 C15914FD27CE89F911641DFD588812A8292504EBDA5645E8C510F5E88EF44C573CE46D01 EFBC6E3E1BE9600D77210B10330748F210F2CEE4841940A78AE1352654139757283F0FE8 12040846B6B24F1D96EA06CEDF19F0E3359C8B30C3986C2E20F5801C7F74ACA621E8C4B2 4C38B9888AE24013371F19C80165522AC90C40832C71E617E042ABFA071BAC4D87D91F86 4209F5073D3E54A26FC2FC8F89DE3C1B121881665D48339FD2FE7B0ABEF5491941DD26D2 B379900687DC8DAF6E35153F409DD58DA91742E93CFAFD431EDB7A32FF814048DCEF7459 830CFFFCF958160B1B54525EFC46D8892C30561D0D7780625B0876D816A0099AF1EAE992 AAB126289D55638559BBAF487E1A9E2F118B3D498C49767B28FA680BAE464632C94435FA E32836F8093885A91F66CD5070B91558616853AB410AABF0DABCC02BB85344751A2B2911 3847CBEDA65616487A853D9104D0E00012F179EEB06D9EC54CB50DCEE655CDEE79F89318 F8212779CC310304A2F604402C8EB99DEDB3051CD1EC0D03309EBDB8C3B5A89E06C49957 5E00904DA0106F87D58FAEEB8581EB47E982E29C5ABEEC747205A33C7B05A0CED74C3403 0012BB647B5AB617AC8508E8A0F254E102406EF1EA86DC39CD9335FC8A5CCB1504757BC3 AC11BCBE92800AED15E84FC3A6FD8BC6C27C4A13AD946DBC65E45B3C1F72D4D2C1793512 9CAF2C6C238F1E57F428CA2CA51ED139015DD06B931A9FD41A8A759142F50D4A18D9E071 3CC7607EF0337C7B401CC2E47F0DDE63B32BC1DF572F94991D1BF97F1BC17DCFAB95A834 E34652C6BD93277754DBBB1DBAB6F0158CBB6E9304F9A1B5DBB370C3EEF6A0F937A0C7BF 789CBB57E308D2D3EC0A0F04BC3BAC016AE4CFEFD4A5F5FF9F2289460CC7E6FF27A7B421 BA3BA86F2A48C2002C4C0379D90B50952B6A629ABEC22143A906752E0BB2DA15C36EF74E DB102D691DECF27A7C252D866640FE74BB7BD351C4DB5C8E4956FD73CD6675FC53DCAFE2 256AC5E46FEF1D0044B5A347682FAF71ED9CC08F231605BC342148E3CAD6A80ACEECC89F 767E814046DE67F5277CD737D09A62B499DFF7908242C6E5F17987573334AC66ABEE66D6 1C61D14C3687DBEAA7BE38D248A7B8CC775C5B577305C3F41BAF7C7D64B43E7326133C2E 795F50EF42EB3F5817277E2690C8785064AB6BC61AB04F578549BF671D88E113DC704764 91AC7787C2561DF6AE9F3BA5FA24F5F2C49B8B72833D030536BCF0AF10592FF37E223065 ED6F4BF075F70A7D0ABA84CA427CCACF9A0CFE46A429FA64597C677C71A231C997AF401D 07FD7FD98F4A5826DAEC4D76B2E6A8DF68AB8EF09A0A6BD0097840364FBBBD4B93950A16 CD68B07CDCE7C341AB8647A3338B1608D67CEA47D26EB1ACC0F94D928F2930C2CBEA594E B773548213CF17642DF03784B9293BBB8BAB745893C2CA0F9450A337E448A282A285867E 0B0A2F5DD49A23D475709131946B03E8C2F7B2D21DD7F1EE583B22A73D81E5F72136802F D917750E53E63031FFBA218DAF8B3DBEC561581706AED8A5CFB6593F5CC98BABB048587E C9EE27EC04859B6C233474BA9FA8F8D909B17705C6F2BA0CEF169B46497E712C458354F9 F0E1B72581F18BF74AE06CEEE0DC27FA684432625C579A29843D44973D4BCA13998DBEC3 0375F1C05CCA91819C3F7C7F2A240B515AAA8403230F9367CF391F3538ED5BD391E70F24 51B6CA9F969CCCBB58A05FB86E90BA4FDDAEDDA84A73CD40617486DF08FE7985A55F77A6 B2CF450665F98F0D173D0DFA608A4E89CA6B7CF2F86134CA0B97FE3FA0856613C7E71D9A 4389BEBE6C1DDF23A7D617ECF980EB78AC5FE99665CEBDF1BB8C1CF29C345B94591CE29F 3E77AC66C3A9A1FB34526A1F335E71FC1AB62B4E8237E80CAA0265FDD418322B068FD4AB 0E603448CC61D57106F1BDDB5785AF5A18C211021FB6F91AEA6112BE9F34A75C6C428EE0 8101FD9904EEF19996EDC2235F3CAE00B0FD20331597B63535D001A5A2951F4057C83A8C 04EC71AF466EB9EE31CAE51F453423FC327FCC256D71D4E2D956538C16231BC8E6A54FB2 85E7D5A967CCDA56DEE48109FA4776F87466F0F62355CA0990097B2BF7F947C0198F13F6 EA5321370A9CDDD612DEB3C91766A19B4228AD5A4D782D9C51BD3DDF268D53C24F6E4543 52B2780CC5906D6D08A27AC49043FC1ADBFC07ECC113D815AF2BB5922E42776ADBAFA1D8 E8608AEDDDA45E181521E5A8C39BFB2E9E72A7342D641574D84AAE3D23F114E2C675E50E 98C0C4D59107E15753F2E29B2EBAA4D40A0FCB785E0F20FE5EC3F4C42AF3445298625AD4 656A42B95D3F3BA64495423BCE66806EAD119E6F949E5E0CB7D20D8B218FF77704BA5CCF C6B96CDE2E22E2A1866F80C103C986D01BD96F2207438F8132ADF46C5E889C2752458D26 050C2D2D9996A7E90414880A34BF4F6F7EA862ACC40E6446C8C64BA66314493C05D5552B FFD967B26CAFB3238DFB04A14757FCF34B547F81448D5BE2C385775093FA69D2B5264954 7552C28488251224E4571A0537F87370D575C6093047374077BCDD8315E40EADF2ED65B2 9BE930D5A78E0E4F21ECB50582FE1501FF48EC392D1717D5037175395D726475E79B5EA6 68150DA75B9FA24A530FEA3EB4D2E4D73A66C800452FA1053CCEFD77046B058693170362 AA4EBD8C51C334C4C24AE69086BA5A9AB3E8540E0AC782324DF007DA127A7CC2EAAB55D7 33201140FA9B632F11D41030ACEDF37F12D4E4801645CE624BA973671E41C1A11169592D CC529462D2047E2A5D06FE543E5471D0A0FB591A9D3568D2B642C2DAF22BFAF136DC1635 11611AE38717F04BCE872368BA82FF9256AAB0AAE93D52A286FC62802FFE2E8FF98414AD A2E28D0C07D95FE5C9B025A9AAD8A355710C6085D45BCA501AFE400EE1F9B34545AECCE9 8DF25A6C7330711288765392C4529746FACD974BD8CB996395FEB547A9D674F5E56D4841 32A4B48D87A380C52E05C86083677D88696CD2CA221E676C8F950FEB61CC6CE37D055DDB 83089B0814A90EA5B3EDF692055D7DE2208F5F5151667ADD999A0301E9D2A017634D3C5F 8B645C726D0BEE71D4098E0739B44D565FF574FE93A250AAB0879413C38763AA3B294956 BF0649C5495E92262A3EE9E3CDCEFD1DCED80221217ECCD09A04B2759C746D720C3E88E6 22174A8E496228CE9BEB430557D8AC5A813670400BCF93AEE40CFC554A933EEABB239B80 EE603F1617B3238E4EAF043699EC674D348997BD3105B8EFCD06E55F78AEA6AFE81EF9EC 836F4703650D803CD01DC38094F11CFF0B34734308908ED646E5B37BB9524C886DF94F83 B2D470752A139E6A06ADAEB559E3D5A1F4EEB78F896AAE3D9836D4C7D4576877307821A0 DCBC61D1318B937ADB53865F9F9B6B90659DC518108B81196CB6E81D676B1EAAF9B0F3F6 FB499A99BCC7169E7F37E9808634E2A0CA9DF40F204F86FCD7BD135D177ADF005B5D9D9A 0690DAE940905664994FCA90777CB9B3C4591FC0881FD146A41E9EBE7B8F74DD407642F4 5BD399C6EF5471E987E01A009F532C2E66305C890B0B582824B527ADEDF668456AF3776E 4634332C59C3133D8581D47EF6B45B636422CB5FA0B117FE1AE0361B93CAD6850624F353 FD41296FE84391636A2EF92A3658E07B857DA4FC19889E760494957276BFF9543FEC23E5 2A7C9174B581D299B52DD03AE726A95634C8BAC12F17B80B3B40BF98BE848CC4837C3CFE FE2E3B64B5A8BDE695ED0BA15451AFC5F0576DB1E9E9F29F05D4DD02EC3AE44E15171CC5 EC254176D86C83C062B7206966E7F0A8822816251C0AC4A746F661897E24D2A44AAE93E1 259A4C582FA34DBD0B4952CEBD2753EDFCC37ED685FA00E67C455D03072C2A218647B582 F58270B59936EFFE692E0F27DF5D73AEB8D2CE0970629D51B9EB91C0D2712CC3BC71640E 9ECA1D662FFA06E071D1E013695854792DDD672080A0AA42657C9664D6D850757DDBB167 9FF6A837674A5DBF38B2A435C2AE04EB86D351FA0CB82F0D5F00A96D55976B44D6B6BF5A 75346A8CD71230B6A44268B73188A84C47F09EFD13CBEB51CCF7ECDE43A3BEC6933643A6 68B023344E407CB2A6055EBD6E75A27B6FFEFBD095828A8C5B9A14FD78AF99BFCDFB0A27 3313455D19B2036304167E9F8264FE47E1F5AC04EC94FFB3E1D6C90E1758758D2E811C7F DF1EB0AF24EF89E907484BD07B8D825B98D99AEDF1FE0D67FC98A0159DD6492503B86C35 FDBFA654E3CF4B00D0E4E50A77BAFC6D4CD69A668AB5D0436E9A2DA573E04EF308A6A928 29F21A8419FF3B7689590D3787B3CDAC9B6A98FC0AC7B06DA9748F5765A25708C3E9DEB4 1DF4EFD5BD9E0C1090BA956EB65087F5FA803CE15BD0FB4090EA9DA33F86512A67CF8775 BA3C3D834FA4D6798CBE5D5439279DD0EE083DE2026B2EFE83C203C632193D30D390443F A5D1D1288C2B7395BF91F3FA657BDD688A562EBBA50DF28EA5834DC1F9CE073B704D2DD8 594620A53DA722209A6C4A9A906B552B562917A86373C43132B5997CCDFCFA398C35EAB2 D275883CF4C5AF773B535BBA0CACB12ADBD2B3407C8F046F1D4F391EADA619AA2DB788A1 93B7F6975889D7676AFB6EA09978E9590E75F7B106112D0B62063A21DC59110EA5E123A6 51F2BB21FBD6C80083E5B3405835F9AB6DE5A7C579F8F7B006983B897E4C9224BA21EF0C DB8546D2F477D280F554F98AABF7F6D7E890B327129F4D43E3BE119D1E9B1D42FA1A7F39 0941803CC1752DF5A9198AC5AFC71DD6402095EE312A89D1466307F0353A610881A56891 4EAF39DB13B984A78C1B9EF169EF8781DE0BE7B20698502E8F81BFC06DBF766B3CE28A43 4801EB4FE9703BA5933AC6F0872CFFCDDADF1135D02714C30D5F54D36DF3415F416D66A7 EA918A64E00AF9213CF9CFC63B200BBB4402E53DD95BC8B5AAC20E62964AA87173563396 AFDEF06AC069AFBB08D6600AA3A61C23682551F73B2B7E4DD70392464C439FA6CEE41A1B 4EC280388A8DF86195788A9B766DCB0E1AD6AB7A1C66A1835D7AAA8FC92741104C6A5553 C149A5BEB648BD3488C13494D9661FC8F9DD431E9EC1989CA9B35E67A2BC9FED7BC3E362 6389B29B863DC77F8ED314B47B4B86C9E559A6E41366D47672D9E9314B192833D3752C70 3A571CF80D6F165C660F42F58DB5CEF453943C7DD0D252476F678E44C6340B7E4D52C927 5855FEA030BB191D34FBF80C039955C2AC6F0C38F6FFE281A52F13B62543DF45BBDEEC7B A2CC3A125963D1524EFF639AFD013A472B336E43E9256C3EBC5910A05F641EA1ECB98857 FDF7613E9A3790F9FBE16F8B1E9CAC2829EC0B651F00E1B6B56F0025ED82BFC5FE1D227E 3DC00ED525823F310A834A747ED0FB5F5DAB7EAB307D0906AECE8AEDC3808C53C3C9E954 6771D79028ED61CE595EACA42B6ACB8C47B1417F1E88391C0CE35415C9FB29106F8EFF96 82843119AF94F798D7079D40F21B94BB3061C2155A87075846A62B1E1292B465E946AE00 A3EA7C2057244AC8C4D54A8618AD7B06A833E9C26BD2BF4A40CFC7F7D780DF4C31B0CBE7 0657FBF4AEED88152E1FCA2956141559002CEA98E7299FD83BC9BF9CA0523697D9E188AB 2D883665C329A8A4803C8E66072DA31E615FF9254BA8CD94A5C6CA0EE7AAFF3108F48D79 0523D58E98803CE03FC53E71DF394691240284E210C77595F292696975A206A43AA7FC7E C0CEF778307863F56016C13EA6A26299FF417E0668692ABCD895E7CAF13A9C1BEE2B1E62 0DF960006550CBCFCBBB006257051D7254425C49F840B8EE5A44A61E5AF465A3A831FC26 A8A2062943955676AC4D5168EE2464067C056B1DCE6FE780108953F9FAFB6F89DC775E63 6E3EBD3308468ED7B31CCB4D80142AE342D630B919584B2DD67E904A48C5CEEB65C1C84D 8D2964A4842E8C2A83129C91662137BE032B007A30A0A4D2B31ED3B1F44AD5275FF105BA 929ADE2B78FBE0F3F34E2E9A35568D96214AC1A347510E8E5EF0C9CCF08798C5B0C09DC7 3FE817E2BD84AF14627A8210099509770C680C327ED697A255B28E81DF6B512060D47084 B8AC21EF59C34AA36A9D14A093116EADC45F3F64AB297E114053081C8D6B135B36D25AF7 7F2050648799554FE6BB50CB6E957E26A0C62788EB76901B438AA6422118463BCE7AB3F8 C21E007C21A9434A0294650543B58F0925F664585BC875ACBFCF44F5BED0D8AFB0D8FD6E 215A03ECB350DA054FE30172E920C34E64AC011A655F5A782178DCB3F65FEFE0CAA68993 DF30FAA2471396F6D74213C38A511773DC7E84A9831C2E8C4B51EFE3D8DD0674050B8DBC F1E09ECA5BBCAB73780ACB37D46742594C6070EDC7F5C555FD50044208F6A26316F17B25 1DDCC694443233702745485F3CA188CD3E1F833C99ED46EE525D31C6518A86B723E890CF DE3A834170507C9F24F28A124DDC734BE002039E81148D73F8C86918DE78E07964001EFD 9A3EE31A0347EC258360D2CA6AEBE7EC4D5FE0A29D415DD78A13B8CB8DA84AC8E480FD48 F4A9440EABFD6A1C4988A7D6FA7146CBC14FAEB8864C578A81D86C61C0D08AE6D50F5654 DDCBD02D7D9D9AAA56C417D2A3C42AE47ED81350FF917E7D5D390D4BC8AB934353D902AD 98BBAE982ECABC933FD33310FEC3266BB373AF3B53D8880A8106253FA48D78899D0E6548 A9EBCDED56B39BC0FA78BEA9A795BE60BD3D60C1DDF5375DE0800F1FD55AB46B49536F7B 5986E790A4FFAB8B81B7CEA21980D0634E7B2CC00D1D7A9A7C00A5CBAF65476A714ACE77 99795EBC2A944A688BC40F2A23DF71B3826654EA7646D2338BF23E216A8EA59AE50DF2E1 D6A05A86C25EDA267225592F695FFCEC993CFAE93452BB3F2C17470552564F2AB70AAC50 D49ECC01A418903401B4BC6F3E0D3DAA9CD062AA1A8B93016BC008924F8AA7075ABDC5E0 01A215A63EC8A8F1FF0E7F5A1102D2D5DBEEDE248904EE28590A4E48C98B4E97DCA69479 08FEBD5BD880AA737D2A600A71D1CC35B20612F656EF4C125ECF75DC0E1BDB57BB09BB26 332CD1B9AD52147CDD30D03EAAD4EDF4C7C2E4092C409701BBC8EC163E4C660EB018B0C3 4D4844EBB910E0566DF844ED250624A6C8BAC481B32024FD4EABA3D4E8A67F83FA4E4927 A15D64462B3004F5610EB847E9413CE174D64908B0464A144DB43FA1FC8356FBBC00D303 74E22B3EBB141575D6EA036CF0B469597C57AAAC00F840EDF201E57C0D84929A34108847 E90C97352CA858A6B1F76E1C772C1DA2A8362D02EC7C112E8755C7D720AC5A2BC528913B 37E0BDF15147DE30321647D8001FDCFA437709AF90ACF0E56196A9696C0054E67BC6630D 7D99F3092D8DFEF0C788715D9BC43788542693045A485D5231D731EA740BE448DBB72ABC A34AA5B8B2A4EF6E91F61B0A8AD9666808888DD61A09CBF2FA30E812BF1B73EE2D387C6E 4821DA27733C60795C8EA0E806F74601EB9F3676284A37ECE9495CB87015F18DFB39B9E2 93303261BE268AA644CC7793A6266C026A06BFDC3074E7A67C8F6B35729CE40D6C343C4B 95EB9C778F6D513CFAEBC5FBB8AC844D1982F300675B0920C098AB288D12423A3401B6BC CE7725E619706B6241BE210CE68A5B3F068C7255C6A0959CCD3AA40627230F27057001DF 328A741F867833911AC3D24DBC1C79462012801A6E0897F2896AD1B5345F72BB639C799B FB4C6EFCC57760C82015F6855099EF7C5DE59C5766BC6DD4F4A61110E8CD93BDD891A83F D8DADC0AAF16032E8B02E69F1EF25EF7CA8C23815C38F7FEEC5E4A4F11BF1E0C2275FDE1 B29CF45A585F47962E6137150F0AEAE31ABAE6DD3D66E54D8B7E6707445857348F6326A0 9F403CAD72D93B038C91B7465347160DE4FB2F2F81B4BD24449CE03BA177C8E13B3D590E A6F4C5CE396D238C642BAD4C5BD4C0B2EC8B935BF9D9A85F64D867799103E285264A5F53 CBD2E0B0D69176ED284676494369C38711ABCC23E61961F6B46C576B407D273EE84E274A E02EC5C8923ED2D5AE650450F5A1665CC148AA0FA6E26143BBAFA846E9263E49C9ABA1C9 E4ACC9A7E6ED0865B42023F21A1F234F485C4F22B58925B336BF883906ECA1000F456773 48250626716520CB2CA5DC9EED93F694A1CC6D7EE74CBDC660E3A033EEB0CCDADB32C5FE 9F5A4BB9BE18F13A6CC678213E631916E283D5B12DD6B9926279CAAF46A469CC3D4EF950 D701A667C2BFE15292FC3A2ED9E1C916B90C9E25606ABF91FE44BBF18CB230EAEF6B0C30 3E94C24F82957557840C11F4845C7F2C49337CB588FB9791EF1C40D4CA00CD5254426E84 391C265D4B21E9FA474843065E306BF794BF3F798505285246B906CA4F343743C5539EFF AFFF1F93CBC5DBCA989E64B2133EDC8DECB05FFE150469EC1433E3A3C0B49B7C14EF6069 CCC488A1AC96C39203C010647ADC1BF32B69623D291608BBEEF2C5FDE603863C91029AE1 B6287F8576F73922B5192BF1B226ADC2DD17D98B8D0558874DEBF7018C82A9E9AA9D89F7 DE237D1DFDDE2BD43EFDCE2ADE67906EE2525A667883685DCF78BCBAE353486C96B3831F C1E1C7DF12DDB8CF10895DABD16A1DFA87AF1FDF8F4A6DF019395D713269024BA721CA02 C1E2E605BED8AB8C822CC84903A7E5BA090900F1A409F4B1D30F740325E4995A5C9FFDAB 1B8480D7B5B8CEE4F35206E13EC960650A2C1D0C4D7D7407A86E583EBA40267A67A8E87B 19D41649DDEBD7A73593AF94C2366CCC6F81BE9558CCC90CE95060ABA2BB508467640E6A 726ED96B571CE6F2AC68EC104D3C2D3AD54F8490DE638B77C93595E2B1A44B079F79B487 B92C12B16B203F91DEC2E7183AE99D79DCE4BDE5B240767D52438DC5AED4ACC691683BB4 3D2A1636C917B6E270F309D3B75D34FEBF8BA64B01FDDD848D52C30FFAEDE43EA21C9ECF 487A31ACC1B1405E615C9DB6A9B96BC45114E20FAD0CCA71B410BB14A39997E9653FB11A 666995E488B650EEA712FCA7206F5228061BD5BC385DAE9CF087449EF683F69F673F30C0 33DDD590F086EDBC3A72F9B17F488E2B36A381141F355AA1AC81AD4C103101AF96259CE4 30A0612CA3110A5953666DB362D982687010AB9B81A63256AF6E69AF6D8B3150FE860D29 E0DE5D686096A3D523EB8CEB214DC73CDCF00D2E98BBC713C6D7883AFFA02188A5E8A8C1 007EEE1B185AF14BF0D0E06BB144660A5891C8C7710B2B85CED49F14A5D5B028A8FB6464 3CB3B42D1EC8C334D51A270A3A2D483B223C3D95C733D79A9EACD97F7BB32D28BB381D40 399F0B9BF194521F189D37040DAFDC8723BF45FAD60D2527503894BCD4B0B746734915F4 F5B04D4E5044631F40BC3758DCBBB2A2AB63D7B44EEED53991AFD2988E13A7A6C389641B 32819144DA32DDB3ED45873E6BA0604A9E682558C0BA2B139D29E4986037AD326BDF4079 B6C071DC3607D52DA49F6BF8DCEF6F04C4AB860D660BC30E758518E16102642A190F89BF D0078394DACB5052E74EFEDA5BC176A861D8C5D78C83A46B4D5230786068F12BCFE1E73E 4F7865D5B86144B26AA5490F229E6FF7CC5964AEB6631B08E2A4EBFCCEA10488CABAF2D1 576155E6C862855CCF52C74834BE25DFABC0BC4FB7A1EA21B2AAAAE45D1455D844C6AC2C C57D081149F6E40B1FE620B697424B85A7177F19BC63E93975A08CF009C4659EF47A3680 488C43751FCD7D848FF55C472F02029253403CB04872EA4364DEE69934F6D049113FEBC0 E3E5D978CB8A2423B9910E3901981DAB495C4F323C3E3036BA45B66BCEFB4DB5C7AE91B1 7A4A956471BC552A1C109EF67D97069D3DD5663063262FF4270CEC1079BC4C4C2AF643C4 FE0B5F3B39389C104D40B84035710A59AB041F67B5FE2E5D3CA3E720D1C7A3F104A74C05 DAFEDF29777AD6FAFCEA4854B864DDFC878DAB7C42CE153FA01857AC1D5B1990EB73C82B A01D3557E10D14742444761671084F1242C9D2EE9E211465F5F8F0333C77B123D6C03A92 D0D8B91822D6E20DAD190F4D7A1FB12418D6FE63A2B1148CBE94328ACB42845E27928643 444C3378FBBA83ADF56A3DF9ACF9C1F2A8F3F2F3814E26D9DE7494E2F709A57E373A594E 4F64FDFDA6BC3866E3F7BF58127F6337165826F3D20DCB22EE9D7DE5CC14D10DD3BEF093 2B0D75E289E5A332700C2CC5EDC65CC61C592E19144A13A38E24B1FFF7F904CE261FB76A 31DE7360290C8B750D92E08A25DCBF3BE97529DD52F004AD59C6721FEF0EA46F1693C5D0 992C517536B390C86F5E788995B35B6311E6EED72D15594717CF385DF042F8515455E808 C54A0155E58D4277FFFE04CF0C16E1259F39E84292F592BF936FD50BE54ECAB54BD27CDC 4AFD246C35D901882765CFA13A381A4F888462CA5A775DBFCF37B864AADD8796ECB2E13B 4156BDA78E6E7308F3CA382B478A60C441B09483E6CCBD51E02E5664E8DEC087AAC030D1 431A2301C1034BFE73EBB7F2744F689D09F424F22A48960C991526F7063B78EE26D0F997 B917DBE51D7D291F54F1C22D3E9F9B8472CED7317B6E91F4BFD2E3623D6F3FD2401BA7CD 6F93918D2D629AB72C4060B6E72AAA295F0EAD79B0A7C651D5A9FE6348EFC9396664557C 0D5688F01962E8526CE7A55866CD56847F49BD43A674D6C22EA7EAC1A4D437D2A9BCFA53 5361CD640DFE5189DEC2AF088359B13C6AE7027EA51DD1E757DFDA89A9BC23BBC1138839 C549FEA71E42F497440214911982F115D3A9278D2119E0A17F0BB1F8A86B7A776C3EB940 8819B2602C66C523FE07DC9AEB0E6D4AB6F39A308A6E8F755CFA0F41796159FC55B3A083 F28494B4C0FC25322D17E6083E79394BA1F444CF84E5DD9D9721121277CAA3E0E380A7BF 93C2335695E2F34D05CC3C3FA3322A7C863A16A9A5AD4BF1C629BEBFC20FE361AA2C6CC4 C0D3EAB00097D9D2344B8772B049CF951DCDB1C23C138B2D7DA551A22A53EA2F604D7BDE 8AB2D034ADB57A65DCA8CB55AC778F9649BBBAF8E7223096CDB9780455268FB9CD379AF1 DDECC2F7C22A25683BA56EC7AC869150810D8A6A5B854A78DDA6C21C9FDBA227E26809CE FD44A8E4593DFA5B9D170A19B9DC779F507FA0B28B5C8E3AC017005FDC519E8CB69B9385 760AE1A8A111E763FB0C3B083BE1F083AA14DF9CC83142A1DFEE5312097BCD8DDD91F113 0A3B920FEC7E9383B23F7A396BDF28BD1EBB48934BC490D133D594021C256B698BC4E93D 1E746522E485DD53C1B7980EDF066F7C7FF9F27FEC20ADDD1FEB09CFC81F2B0E0820B90F FB40B66CEA152312DC5E7F8CF45AA0B45636859EA9DA112F76B714CD83CE2803D3BDBBC0 A3FD5EAA7609A1E4A82DA08701A3AC0818DAD502DECE3A5C7D9B5D6DA50F8535AA1C3C91 A9358EEBDDBDD94AAF1DDE610E9036E1D5E1F180D426A8B33B4E640BE49073C4B0C0639B 0A28D6E08D76DCFA2F4B409EA1EFF27437809073F29FED0E64506185022EB0A5F9A54BCF ACB0F2BDD859222546338939F73C212749C36D6B0E9AF72EBD059C3838FAC738DFAA69B4 FA87CFF491D877DFBAD90222DFE9564CDA37E5576BD66F635720F398EB6863C5143FDF5D A4F07317547B86C5B335CE05755AAEEAA8A927933B252E82BEF3DE30DFDAC82D1354CB63 028B03BF59AE93FF30771BC27B186C7A9F7AFA7525F719EC5EFAF2526524BAA29793D5ED C1003A42ADC2A344D0E4210254F2DD33AC58649887FED4080AF18554646C01BF9BC54959 D0C06E459CD818580444E37BD2852F44C8D6FA18F7DB6FC15174524EFDD0BC9867832DB2 F837374BB8C9031A27B17A386E6D00BA61D49003665E1231D79E05EFF440E48FAEC9CCC3 5985299B3FA94586B516C2317B1AC9C91005994A84466514D7EBD12AB998D4D99BA37C73 EE3C723217B4D9BD5A0AAB12760886A8A99A4AAF038EE5626035CAAB42C6AD08EAD6CD2F 0FCF85C2CE2D6150A559250140D19610DDABB115D625C17455F928B55F762028E49E4769 872B96F84031DA85ADE6F18D601F6D576C9CB68B8FF011B13DA0DDE4D6E35E5A3E6EEB73 248161764FB3B122A4F40ACC83CFC073D4657C042248684EAC14C56615AB156BD549C964 C8E5A5DD901BA9B583B4D176FAACDE48BA78601EC7BBDF45AC7319F7598A93B68088BC1F B6B4F429609FDAAF3235BFEDF0AB25B6D2BC024B533E6E300165ADBE42C890F17B9FFF6E 45B5BAA3A14FB36D26E7DE60CE24F4893BE0E2CC7A780BEB1EAE0C6AA0EDCC3BF991E5B9 A6F98F5F5428AFE21113C1D8DA34783DC47969B9669EC1F97EFD43FAAF5C02FDB722840C 108CBFEAC5E0BE99AB3E21CE4E622DFDF8C32250C10D68EB0B6788E5269479CC441B32AC 1FBFC5660164E498713F6A2809F1BFDD79E8340EBB90481932706B378FE8DE987D5BFA1C B688817968E797903E558F8C7D0DEADA0B5F08D3D9D27C92E4DBE0F123261737DA41C264 E59CBA14C0F60459CA59AC58D1A766EABC8E5CBCE3D94E1779099B56EBA27F5263DB950C ECFF97261AC0BF39C4364FDE7BB1CF10DB8C3EF5763BB7976815D78C6F886ECC77F92BB4 46D284D2948A94FA4E5E59D104858DD3ACEDD4088302B71E6A9DD709D47DF40DA7FF78EA 7A1E226F2C24E73D292B63100F1A6C98548019DE887E739A4DDB4E1D0676967C64723EF0 F1CEDBA21FF8BA11539BA9F93E55FA54B3DA6B81C50899ADE4EF9369DADE1FA36E2A889A A3C22215AB36718E57BC68FD115801B35CDCD592DB87FBDD9AB399896E4DF414835FCE3E EE36D6ED5672E8113B19913958321650C8CCD69DA0D9D7E9C0607715534BA674118C8BB7 CA7AF1A57328FA73270221F6A2D429D4424F1C13D8CD7C6FDE11B2A119C30EBBEB1DD394 29B266261E39BDDD5F2446444A9AC581712FCA7B9073E1F4BE450445FC14EA0352D7633D 75C5C5F24DC0C99B888707A6E9DE9927EAAFF533868CC8ABF725EEB94A96699A0821DCEF BB2A1DFD6D566446CF3CA7C80460C0772C5B7D47BA2D601D3EE74A5855AF4A35649D7DAF 0A87747B37F2B1BC2E13DA21A70EC7D78831B840EE91B89BC147C1A58DBA58FB3749F3CD 1216FF6DE2271EC85C84D07598EF77275ECECBAEC3C99F7686836A8480BA6BCC30B555A4 0CD5506DEB52F16CC6B4F7FC8B2D8A508FE947505B6C4DE055A188D28FB639553C63D5DE 2FB330ADD822C7206651DC5E0C5259E6F3F489C0D57BCEC574BEB3E8CAD2BD4FAD239B9C 4E6C0F410805E831003F27A569B327A52A5B72446F83813FB2230FB670C2DAA0E36876E8 82C612BA77B7C486DAB6B41AD9D41A5A8FA66E116F48F8A4573536008C9677D75EA140B2 C11892F86AD1FC350E49C55069284311885787693154DC010F49927AAB51AD8C816BB00A 216DB9AC0739409ACEE53EFBE5429DC7FFCEB9F54909649F1CA3DAC3B450703DB8A4DD3B 170969E3381FBE10637C9E69A646C1E58EE791FA68E4350FA17BB704AC1C746591B940DE 618B5ECF8FE03DA7E6ECF7F208A004815161E7F680AA7EF1001D6E99526DCC4F9E8F7754 A56EAF46E1E7CCA21E319FF7E44D531E4BB04B7138E6F6A522B58CCDBBF09EBB18287550 66CC6E7D2660B9DAEE62164A62E49684BCB64D521F6062904D26D8DB101AE8733777CA16 B20066E6E88C7BFB3C56156AECC89B449912B0C0F362C949FF0503D9C349003284CAF806 952AE72AF962F13CAE5A87FDFCCEBB81F154487B260229A9904C44F027C776C4FA9BE776 DD6D4FE4B8D8C9F52897F843CFD2B14BD3FDE0509659E8065F6790F2C95EC56FCFB366D4 582422CC5011BDCD3466235BA9212F14F2FA0F377DF05784D75F45E5F863A27879B9BF1F DDA7916CDA88995E2B52F93A7433CCA2173C1B3AFD83D736D4555A1BCDC83740E9E69A11 9B5629B03F5A9D18047663D0A6154C4772AFBE9DB5DCC115263D91F95DF2CCA51A4A655B FB0B99EA0BF628C0FFD5564E882303DE00B69D666F3FE93A2F2358E3BB4BF60B6F89A7F7 9421015C3B64A82FA30A92D62B0D3564ED96AD8C228A30F4BBAEC782E3A01DF417CF9F5E 8B7BEBB8840BEC912AB7B35BE4EFF43E8891AC25F57DF8AECEFF1840C865A93FD1F6C3E5 F0E48AFF008F52A23B5F3ED5612823AE23E084A84201F9BAAFA5C1D6670CA499BCD92FA3 C51C0F5C2262941FFAAD5B4317068E78A1215B8F32E60E77196008D95FBE342426E61DB6 7DF41434115C10B5E04DABD307EF04426DA652094C53EA304AE96BDD6DAC136E1B0913B4 6874CECD3F1EC272BC4B5A3264A7C3D8881F2415165383BDAF1DCA39A1C53C3BD45E1665 16EC26F583D1705592AA862D75CD754B66F0CC89EA5A06351BAB9FEF4A8B592D636C23A0 7D82581D2E972AF42ECF8CFEFF5168695E998D8A756FBEA0FB03FF2FDBF1A3979767E0E2 A15F041CF0870AC7105E8A2AF5FBB0E00F212C0430C407278400139624895C0B67AE7649 207A1EE4A781EE6AF39E8C4A77FD75DB7992CB90D9AC239BED5A56105ADF5E224525B4EB DE5D43734ED2BBBA28C8CDE0334C9393DF8CCA236FD8E15D5D970900F4DB12C02FA5E2A6 837C40C097B24942820B116C7693B43F0870BEF05AEB81D73E2CC42E448712D37C22212C 280E111F738B765A74DF533182178E6CE806AAC22F5E270E1CFD406902C45BB6A58DE01A 9D75F874C698BD4A9EE40414A446B6E49C8D198583D4A0B51F8FFE1FB809B8E7EBA85242 477A9C0AEE9DAA8F7E78A5B73DF068D38CE0A7B36D857862DC2CA4C0FAC20A0B9F7F6BCD EEE7EC90079B59F46B7A354D1A8D6D4A71DF790E23C4E106EAEC1497DA2B5E36F3EB9E12 4D049B5E3D92C68D388E1D9D8749E93D2AE063770EE9B9D9491E62223949D60B11AB8C97 A87C3CD45D13D1B033272698389E80746211AC1E09ED156F7E3AAE2016B178CD4ACAB399 0C849249133D5C2F855D55A31697C551581953F622621231DBF209EB003D04CFD33BC791 7AA01C79C2AFCC2308263D0B886A9524FEF38FB01CC278A73A86B06A0467F6A8E57F488E F20C22BCDDF368A4322F629D81680312B763585EADED366B810A95977066B421D630CAA9 0A18AE200329931AF4A1F4DFA5830DB32425AB3B36A023ACD186B4F51AA3D021B44ECE3A 042C12DC54CEE0B038DA451724D8DA69CA2ECBC3C9E986263ACB791A659174BC940473FD 03CBD870A2079E225D78D7AA550A3F42FBC2F027F184F54903A1DEED269E6F2CEE48A7E0 E9DE7018417C65A6DB9CC89A93B1297981530C330F7988161203354F17ED6184EC023C95 584E45E8E88836C5263398540DCB7EEDDA5299BA8CDFC93E39287F425DB852EAC42A88CF 3145792AC6712403EB9BF1ADA24CC204F9757B4EFFACA94F74E5CB546569F0C21EA5DC63 6A7C20A40C6FFF3B173D7C64DE1D6E47AAD74AEE3B27FF5E577CF3BABDAAF91BF166FE00 65B36A224C4E83252D7820667A3D7A1EE57326683285F217FC893C374DE7F859DED7C50F AD5A30931D50E568A12C43C746018C1C35306EAD324CB66B0F747BD24023CEBC636F21AA B1A396FF13A2ED3321EA129F72CE2E2B9FA6E00CAB30CD5E8DBA1703962F33E9FB3CFB01 E91BADEFD13500034B926A667F48ADC59A4CF6D07FD4E7EA96417B25B08FC1F284EF2B3A D0A720A95E1AEB3834C453ABDB93F78CA55544597E02CFC6D818423FA15D5D7AA96D9EE7 6FB33A9A708DF038B19E7ECF0E068B627C26E5A3C53DFDC0A9678C8AFC496078056F8902 05A38FBA09155052F80832357B84CA86F3B9C399410FFED89BCAF4ACD808B6C7BE343571 DD2E812C5CA964B8933141A33895804CA34F77074785B58913B2CCC2445B0D54F4D326EB E5D8307C92E0AEBA068341A5A14D3AB5AA38D35C0C020F3AB33608BB9C7C28F7BD1022B1 5ACAF78740EC7DB4AFA3F8917D5722CED290D5764E7FDEB6B0E9EE78A8E51F4F88FDB506 87EAB486D0218B9DC1D29FACFB7BE25F4D85C1E8AF20B039E23F1E92C79FB13C7EEFAE44 6567C47AAAC59487CA15B65D3D14CA2D8AC17A8F3ACD19C7B58C2BBCB22DC2F3DE7FF42C A6EF389584E4F59CC35D84EF94F3ED5A604DF5CA83035B54817526302662BA6DB7202638 B4BC47B6E907B0BC3FCF31D06943FF8E04C1344AE04F96583A8FE674A79615A76807E1F0 FA1EDC93A9538ACBA48C054B4087CEED23E7B4F1750A7629C333102F38001A7A29DFA697 A3DFAF60BB89908CD78AF393A469E54A41D31CBD35D2BD98E5C04DB8ABD7C6AF6A47F51E 2F9F4DB3CAD40A85C32ACEAD6C196981E16F90541929DFC9BDF8293ADDA1840EC116F3E1 191AA907CC72F75FF0923BE2862199035CA1CD4C423171118BB8D250B5897EC9C2AB8C88 D7FBB99AA99D6D194B33A9152E8C1750498EAAD12C4EB45C1604FB747BA3FCE8DA3EA4B9 6861CAB69A1FD8D04011CDE1807BB405DFC1482CB2ED7D3AAA1F8714CC8163FD8F0B36BD 31AFCAEA934265898AA67B80877BDA58F3E701F78CF052AF02F08D3AA1FCE61EA12D53E7 022B3824A1B700FDA87D31F3413929CC5D1D287B2B5C91F82D9F6DCBCB599D19B4220E27 C3AAC4F0999C1723924CD7E9C06AFF56F27054FCD334BD9567217D5BB294CEDBCB77920E A6FBA60BF77B255E5FBD2BAE7AA22D0AD45C8322A899C45D0B12B3EFEB4444B0CB284019 33DADF209B797C0F2E77AEB82AE01F09E7897905A43ACB91D64BC3DFFA88A52F8FE2C901 78A045A48573C28B02782D54B9BF615CB5FDD714342378CDE02AA661A18893B49723A650 308A721D0D626460AF055C356B3503F6B4CAEA685B1495CF6AE66D14CA45996137D7E173 7B1ADCC54A6F30E1E270F4507D9B4B10F647320ED3595D6C1B077C8DA047FE03665AE73E 68A82F78EF7C1DE60427BABED7396E6C412E44FC8D98AEA402C00A784D3A3FBC7793AA8C C87A07101BBF6FA2C3178D93DBCF3E00C95F5C0E2ABEA7158330D7EADDECD7B5EE420BD1 C4C40016AA88FAD7B44B6DCFD9729B136DD16F7B54470F0FBD3A671A13C5DA0A52258636 1F2FF96985D9B5B582A1B0E51FF2A2BCB8EBB5018DE067019B6C3DE3A052440D893BE3DD 414D2FA37489D3E34FC6E97FF94D2A2CE6B460498B996D2E21E2EA92E937E68AA000BC8B 9349E5DFDA563D70EE336C181E9B12FCC65C40A2507685E03D2D4EFE013BA6D6B36D5D5F 03E7B0920B195FA23FA98993DBFC8F7DC4B7C6BC72C8280C78C150B99604C93323273001 6078600837D5B179B1AF3FF5692963612F93A8BED3B2630E9EE9738B5F016B0D42D908F8 9D67A5555DADA0529F1F0445FDDFB01953E264DD3AD489AC710CBDCADB39A99CFD9A0200 2CE7F462BA691742EB31B0DBDF6F7F26FCEC9BE173A4D78CB40332EAD8A1793F70598EF7 CDBEBC02F493DB8C654994F6150B43FB49CBB5E886A515828E25F83C8FE14E782C43E332 B351A8E68094839AE4BE33E8D026CDCF79995EB0160FC1ED53C1835909A1F51407181A1D 82B529685DD92FE74A21862FEF7B2ED4962A360BA825B08E961380522CC75BAD11FB7F6B 15378AFC8BBE9521854926147E47A08D728CB679330AE15AB75213AE7793450108837607 F592719EDC0420A2D9CCB8A9BD7D58D9C7E4775B753F2E928588DB470F6A23378968AE20 380CF35131CA742AE80AB160434F7AA2A88B2FE42F54FBEDE83A99D5DDF22108250113B4 34B8C3F8E46D57658C37E229B4791CDF9B2E2C5CB26A83F4B71739741EDF475222665072 EEA39059AE36739F8CE47842BD9CCC13BABCF2888CB5AB13A12E83E3E1D0BB27C879D435 684482F1ACBCA88855A0BA49E685B8EC66ADE40A153F64DD355CEFE3FA55F78E499A0303 45CD4B0471B73FDDB5E5F3B7233F6204EEDE30D7DF03617F267636A4276F6EE6D065A405 03081E2FD97C1738247526B2F1E374665F400980561ACA6BA65076EB0A23F4955268851A 3781AC4CE6687986945A3E0AFAC73DEDB76E2FA23BB33E094DF1FF05602E52A49E1B510B 5562EF0D58E45430AF43EEE073DDF0EC00614C0E2DF121C173E1ECE36B4D87D0FD9D13B2 75A7C0C8F9B62B5032B77C8909097B3D4B7482A3623DD75BEF4EF27EDCD3E91F628DC448 4E15D7D633B3415402E48B1B577EFAB6413CB65CBCA453F5EB78E778055798816D895A42 22EBC77D51C992C56ECDB984D5DD94BFFD01E3EE1082F6D189E3A4D04D6FD2C206235A44 2578CCBA9CF00D7D2CFC3BDB2D6CAC8AE35DD17F39E0AE8D0A84AA451789BF3C672F7F50 CDE8F58C4AD3251B124722AC292A11FE426B0B51B2EE4EC7C65103F1128B54820C458E09 7376F3295D30ACDD561EAD278082B7FDBF592F5261B0BA27A71B8474EC2815A8E62957FC FEDA68BA3300AEBC9FCC1C5ED4ABFB2B91C08AAB32BBA60A669B9BAF89524FA6B3B63AA4 6191B699D7DC81F8E21A990BBB3F906D4F93C3CADD734FE6BC866DE02D2EE1D119A71565 752224235EB79D3668084A41D7CCB27C48595EA82BDED902BBD71818547D4E755DD372A5 276B2EC7C66F730F79C111AB99493BF93BE7F252EDDF129D8F7B7DE6AB41E9F8861AB866 51F4D928F6449852F6FDF2B84E2D8341D6E7CF35FFA7CFD875A02F83733D2F8EA7FD2448 7A575976B07F5BC799DB0925F0D6967E0C18DD80906639AEB86B4098A732C969703C8DB6 E9F1E849E75FC37714D4A745A08EA4B374CFEEEAB664116D809AC06A8B3FB1DF8F71BC8E BB5AA0467A728A6446768BC45F128D5EE2596FA35BD65F90DBA5A78B5D02E2FA2EA43FCE 1D2987C8081EC335A63ADA5DE5F6A87020AECCF4ABE0D17D4AFFE79462708D14E3A5820B BA2663912A5CEFBF01788B0BD19D08CA965E30C9B7FDD2B8156F23AF2653BA4D42E6AEEA A4A812E561FC68A7316634CBDA855E683AFE67ADB8632345B8718289DA3D1F0B00234049 08EBC15F22DEB99C37280695EAED4D3EDBC084D9FCE7214B85788B6DD81E5AC6B93B47A0 4BD833CC79B0AA2D4FCC9707874F3C7149F5F751D1A52F59B014E604984C6B2CCF869B38 A045E50B957DAA6EEE0A74305705DFF1D7EC14BA595E5EEFBE93903DD31B977525AFBCC5 7C31113400041DADCB603614F882FD78B88D6931DC3FEDA881B6FE8081110CB885B8EEF4 58DFD7D303B413024A16D40FBF7792785C2B5DBA567798CE9C99195EF294799EBA4CE802 3D6B0B1C344C90002AB158D3617EACA713F48AB12C062E8BDD7D7C5EBCA6617547A915DA 48C5497DD8439BC2C304AA1ECB709867EAD1B4E37305A3FFB1A8E9D52462C769CE6928CD CE5521F6C134C61F08832CD620385D38CDAD88BEB32B997D9C8EEFEA6F17135A47116412 3EA3E64254752EAA4745350ADA708255901462AC021792ED74770B031C21C58A7F50A32F ED93D45E5D9DCFC27891989CA4BB010E2DF384657530B1256ECFB2613F7FD59ED67E5288 048E5994C2EB3DBE5D9E77536B967D7DFCC87376A5075C7CA33B7C36251001F0501137FB 62E0D60F991CE5E3992C3EA4DF89FE2B75048B35B95C5E6EDDC4130FEFF7586C58629AD0 752666C8A3A1885096FB0ADA14524AAC57E72F66304EDF923F2547D6AFFC0823CB5A8EAC CC46B4786B46D611FD42D633818CE9A23DED24AA2764AC6AE7884AFD1DE22A63AD5B105B 4042B44E44E8A5ECE975FFB6D14E1BF1924F4EFA0D0DAD4E2CA0F5B1473F6D9A7BFD42CA 966B065D46D3F97056CB9BBA064E62E6A1CE5836BE83371BA46B58BCADA103A2F0E72F68 E361D46664551B3AD71FDCCC221DE21C3E78C33D597AF3E533EFCD4573E0C2EDE28FEB42 6D9B7A423ED593E57D7D5FD7C5D97D0B8AA3C1B1F902E89201E28EA19D0D140F8DBB4BD1 A62309913048A6A82494D26CBBF9DD4456109471043BEC23E4E3D52BC1A33BD7DA7CD67E D13E738B1FCEAFF839598F54FACEA0EB1F7D3C5419C2BC588B16A1CCF8814C0AEAFE671D DDB96353D32D1F86191490516C461A4666235CCDC5179B4324B7936E26916DA037699EE1 622E25173E9E1286306E6034D667CF1510AD4789188F7D0772D2DB127665273683698804 9B9EB1D8A2689D5C46B5B455492FD96281133AA54945D039BA684A89ADEDA43A9496F996 EB442E2C020D4EABAC6750E320D8DDC7256BEADCEF54E609B20DF4A6E39CEED8B3D4CA98 0FF47314CC3A3A3E978C4F8911D5AF92C7A0110902A8F5362DB47F19DBCFFB4789C90A34 8CFA880D4CB23D284C57072C7880B016C2F4338288D32F641EFF0E1F2D04FBEC6D02C61E B27A4146B19A5BCE213327C003B1DAC40740AA1E9FB73911F3777FD976F90FC42D91D5DB 7ABB08EB6A5E4D367DAB5B31347A726FE7F04854DBA180019823FDFB4A44479DC0F84952 8BD0BFC0025117A8D6B36FA9F88A76DC36E4DF00A2E3D2BDC2FFBCFCA12E3F4CED77C1EA B2AE53A27BE8D1E77A618343F6673CAD03754FC14543BBA5FA50E1D7A8DB2646042879E5 0D1D259898D91048C8B8B0D421C3FAF3E875D7FA4D7EFA088B657442742D89D0923577C7 7ACCC9D8319DE2640A2422AB011CC520245A59A1D86CCD5F9D5616A35BA2977AC7686BAA AFE1A277F407594D6A60D5231EA34761A78C1AAED1A1A6AB100535435C615B8D89C4E078 829B475470ADDC46331469053DA6B4DAB9F0B0344D97B744BBE1962200DA293864FD2936 2A6F74DE71CA9A5A1A6E697CD643D33B89A7314A605E54CBE1CF0EC3AE3F11982EC3B0EB 5D9505D4BFC7402D6539038C6D5E0B27620F7FAC514CE55B230F9A7AD528ECBCFDCDCBA4 AFBB51CBB1F892545F88C9C5AEE7D3B522ED35F53696EFA39D72B734086CF673DB0EC924 556F1CBE7D12A8232E51F563E848D7C9170A2AB0AA5702DCF43AC2DA03403374BD85E3F0 CBC2EC8D2A823A8ABFAD7FE39742DC1DA40DD0AA6E5E1CC84B3B80C909C2E6E01659194E 592493C1B1D39EBDA54FE9E501BC06D9F2D5B507B8A6A5A9A56DE260459DF378DB3C5348 84C391C7BFBB36216286796C176220211850D52596BEDFF1455EB36F869D93F275BC2E02 07CE5F8E5F07ABE7D6B59E6533462CED7C4288A61A5AA7E206986061233FFF0CCF6EF957 D9FA5B99FB733BDBB3BA0C66508E483BAA1FD689D51B5175533DE2614ECE76F9BB8C5DE0 DED71BB2F386E03D51CCAEAF84F0EFB290FCDF2C0219B1EC25CCCC33571E29739D8A0025 FEDA1849B5EEE32D4DB59456B1CFCA8E8F7108003DBA2A20120DA0D7E3CE40FEA9193615 2F1EE75A674D8C6624CB60E8A42B218AC9E41EBBB6771DB40D83262877AF2A369A20CF57 BA61484D323FCFCAC034BBBCD8F92644830578DFA45421988048B1660C823CE8F291E099 311CF62AE24CA332086F6C9CEE197DA96FD2EB0A8E49D2E7045AE7619916124FF5D85907 DF15FB7951BE56AC6C10EC2A98AC525012A7A75F39B5A6DA63168608C5D1F8A4188F12B0 F37049B2E1E70A225DCCE1432B0DC309215BC07A2D68A261664C3394CD4A800E30E77823 E1D8D98B0002208B09873C0A3E6724B3A1A21C074232C400EFD5D526C213550F826EE84C 3FEAEADF6CCC9E7FEB9A91DE653D1F4CBAECF29E197FE8B9CE2201E39DBABB02299477F4 791D5CBB3ABBB53077409E1C4D23E7E43B071E523414A00EB50E0A1BA6CA87896C9191EC C6154FA8483509FCB65DB129EACF38D00481C70D5D4A1FA9A3B2E84B321222E1CEBAF617 A8E7EDB4DF284FFC1429CDD667C52D8F2D79E97BBDEBFA0EBCD52A54C963797F9940942D 3D4D1E9962C34589D754761089F50A3BFE1F9F51C1F1F67560BBEDFD67680C61337F53D2 7B2D18B4DE7DA691587FC93909CCC2BA2E853D4590936D3B989502BBBBD9929E370B59F5 073D7EDA6875A191C5BBB8C0413CFF0444F16685442A6EB0F33EFFB569D3AB77151271B0 B2C5E7078442F1568B5BEE33BDD450854289BFA1CCD81866AFA983921423678D8C9FB9A6 D9E77A177CD5434BB12C4615DBC5A21317F9B6775EDE6E44A29AF506F119820B5197BD05 207E0607F1083F0FA4F1E34E9EEC2AD41DF659EF2473724C7FE34AD74D33B15AC0877234 224B88851D27BEC30033A417C61798F8C0C35123860ED2569A62BC7B2509CB0DF03E3A49 9CA57311614D12AED1DC3FB1470726AD11CE5D420F4A94586435E7C18661CFF62BE322D9 A395002F4DB83E37145BC240CB6E5FDCA11686656EECFB072B3422184AF75C8FAC2B6E7F 33C3BBCBBC8B894A05BE1B75BD64A3CCB485F7359C785C449AC4CA3EBF59496AAA7D0DAD FF7BF3F8300AC6644BB4C8E7613C5A4C309EE67AF77701CC1DF39B0C01A296309FA6DF84 3875E1A057BC7E5ECB644240AEC11AA4157F67136831E5449EDB5017C03509B78B35B016 DB6C9DA02AFAA51337B3E6FC0091904D04B328D1D57F33CA77E5BDBD38AFA74A7444158B 20009EB4A2029AC86EF3076BFA6A97469DF182172D39D9BB16D5F15B526B61FBCA683306 7097DF4ACCB7CFCABB675161A3EEC657E8A8DA7AB590CBB4EEE9999BD8BD3C2885E3C0DD 52E7850E680F9CC5048FE8B0BBB656CEDC82C07CB9FEF713BE8C5021CA593E445C034796 B34DC2ACC85FD770DDBB7179F518BAC017B53293A52859A4220DFADC93FBD31F191E2467 DEB59636682EA309C19F1C5FC8643D9D7BF9A9F928994D15BF645E83B37DDB833F0422FF 6422A9545FE2F0B2D959C8839BDA8F2D76E369AB05F324089853CE660EEFC774D714954F EBDCD762E9490AB0B5CA9EF9B4DA51665C5CFE10AF8822C0831F80470467CF1F49B88E69 4C75793F8BD37EEAB798D310F5115C5F5DF6D650D75981132E94140843F8440739AD7543 82B6A4109CD818116DA0FAD8E0FB22903897A1D4C49284411F0BF018E880AEA118322543 098F74BCA2C1EA19B2FED0C0D1D74329F4F23027D75C304C2BDC5355D5B5424F000090CE EF554020B76DFF1EBF9EB929AC89CD76CD5D0E784207743F1C8C0B2275EF960766295992 5C97D6D4EDFE071B4AFA15C5D9EB72A67C1FB72FC634337D827603AA7C37E62EB623F5C4 5E23AB693ED30B6736149463A8A01AB28A087F8C80ABEDF20358899FC34F1B587B017B30 99E8AA24D9054F66E79DDEC2AC82FBB0115923D68239EF1CCA2CE89E935EEE0C451301EE 075EE992B3183D0E149A65A12AC23DF90D4B05E79F8A0120123D972B919EC7DCA6F00711 FAC4F842BE2B8384137E5858EC111C33348E85EBBC6C176169969F30841CE85A381EE1A5 BAF76C017C559D955FCF8FF05A5CDB40E91AC7BD74CDCB519DCC657F3F3F54DCD402CF96 FBB2C1EFAA5757CDEF80BC6575CE488E2DC246AE31A3E9634DF5337FAAE9259DEBB8C64B 5F190C04BED5616CADBA4C014A6290BA5D70D2619724A960D60989F52B79C09433DF6715 54167E161E4A1455A02846FBD422E4270D03841B3B5888FB8399C1F9645B870ABD3F9199 B8D81BEF3316A3004D07B378962BCB2A0D6531A948B59B7C46DECD179FD73C95D5EF6390 A105F0B15BB743B0B7D0A23EB7F9065637B717840FB9A2F7FB7C5DB79DD08DD7E024BBDA 9453FCF5AE11747C590480EE6003F5330860DCB1219FA7458846C8F25B816BB245D50901 F892E2489F34259C300EDD02B616FE650D5514AD5734B77C7BED0DC3E495C418B6A9EC0B EC39E783C913F71D96E9B0A476CF3F2D0253F90BE85D186A823453B109C79AB859726BDF 85236314120C93F4D44B55EB5A0C11A2D4602149DC836A2F41AA9F096F4082E3B199BD2C AA2653AE68087AA655B4113CBF54998BF44C8837E6DC8FDD599160C1B191C2B18AF7EDBC 2BCC5CEAD0E765C856E0A39E8E904A821DA88AB030ECBAF39CEB016FD34BCF6049F558B3 EEE3C1EA53B87E7BC2CD8455209A708590ECBB9566A78262C6268FB2180C3C4825267A3F BCAC25E204D05417C85E4C46BE30E4FC876D461967483D9ECC839024333A235C05E61545 E52220B3E3CE601C4480A959F032244A1CF4204A36CA332EC0258A916D0E68B043F30949 0DDBB75B000DDB359B315FC9BBDE10A42A3A7D6D506B21D1B48254F84FCA27774A98E249 FCFCE9E96B7EB51D85A671987AD1F3B35C755667B64DA70EFAF67CE8B14A866AE04CA6E7 EED0905E5FD17B98D75F91279E033C5FAE681AE10A17C818E79204D6AF3925D70AC627B3 6B81D9D8D75232F308BE848BB67A87A561821201C796FDF6F39B031F5049490AE19E8DBE A908EA44E378232A09032D368F1C22E1E7984FA82E14FE340911E786105AC959A5A52534 C585F1A85C5DE7F78CDC5B43546C8CA3629906BC586B11DDDF157CF1031B182BA3D335A7 A779F56FC0C037C2948DFD410B53FCDA94E73B53BB76C71B132405ECD8F0B4AB5262BA72 230B7420F4E03F7BDA0162F59938DBE1220B5CEB12FF83C7C9606A67078C95075D827631 1ACC893D484D548A52A547C96A30AE7A3B30FB715770CA5861556BEE0E9D8E837D385C7A 40D24B46DBB4A23A24ED5844F5ED69D58CFE897C8FB9555D41578C97234763E41E1E3062 185FADD8A80EB9BF519D1A21C1EF6ED7D16F42F5F083046A63711E79E2B4646EFC2E656E 55355D7D3E6411B465B535043F9A6A57601D15F4B24D1AF71EB93A0C7C07C85FFC32871C 1DAF85DA374524B0554E196A18A149870C508BDC9FE22CEF54BEEDBC1820BF4B7DEFECA9 062F3ADC6E93E560F7D37EF6AE086BFA66D02D82C8454FC5CEB362007AB53947B2A14059 E449E45A379008271758E200F71807B3664771BFB9C46668BBE1A35AD7B208C9AE0CD84F 8ACFCCDEF782E5E6D3B21F236F004B41E7E6FDA292970F74127259DD470368EE2C17E7F3 215DBF172A740F42F74BC74C8A5469974446122D11741EFE5CA3AC65D03154E425C85F6C 525B3CC38005CC7999643144C6BF34EE658BF922456FB08DA18CAF92332BA728EC95FAF5 8BFF30FF9F1FF2BF14009A5E6B9536F6C5DF9CDA8C2F34842C8EC1FD510F878F1D3605F3 47B6C95921C8700AFF9E75B7E2B404D13BF906CACB3A1B0529A3168C31C96ACC12723A00 455229C1BAFE2DC474FC46E969F6A07CBC2D4C3D9C8C81D9BFD84A95756451670D128EBA ED2CEF998B03950827D203804F46DD1F1CEBA6110E29A93DDD2C38E8D02769A9523842C8 533F6EE2CA11FD585EA4FB551DED51FAC17FD30E0BAAC02D6206159911CA2BCB19CADDAA 4FA6F2911442CBE8A69FA4CF3CC4792CADFF5FB70D1A8441046F0103A36CDC7B8F82C115 DDA815EF71DC8295D8BEE1D412DB942B2619D67A5C1F8B06DCC13BEDEC191D9E818E722B ADE04C6C358A27D1EC9B5C0C198B9B235EB6DAE815C0561A8C29526AD3212B32A3D4FA35 831008C5A9AD3B9A8D68903021B9513619868E2F8535DB856AFACC031B890ADE468A9903 B716040C73E77CC57813869E1AD1FC706BC34DF7477FDFE9A0C21AD33C78AE789D829935 51CF312B811250B8F6244A098EAABCB3A6EE2DCF7209F04AC039A4EF35867AF00F01657E B517482EA86295127A388A8BF4B605ED4E13F03B2A3839990ACEF98156084F5BB2206344 5941C560132D0349D52CB72C85B983DF6391B885C5C6048D5F74FBBF496C70FE021AA578 280053474B6C1F9AEC55F6DA9DCCF3CAC7A7DEC6F743A81FA0DCF7621B484589330E3201 8A1B7257F719BBD0161EC4ACAB731F2026B77298EFA4104EDBA6B299858184FD1D4C907D B3A6D0192F8C7DF66D3B0C947AF0F91F7CB09320BC0D0B11CC026162450096809A8D1E8F 01A09E2D3C64E6C91E2B31AEC3F1607381714BAF0D00240FE58264BCFFDA303E87296DFF 1BF630DCF9AF3BDB5ECA30991897AED39EC4CF40070109746FBE9D6E5A24F70D8B2D050E B63D55AC6D18153F3D5D04E10B704A2B47E7555627A84F394B3FFFB6AB7363A9DBBD11D9 323050BE1C294A586CCBC043FF952C34582F4D4F8A9F6E71A246B47B7B87AFA9BDA0ACA3 CC3ED5129B810A98883B1A449E5834344BCF7C09117052EC619C8512DDFC81A68CB6D179 CB3D6F3BE24A1F29669B7C666A9A0C6148E54BAE665515F5490639C66BA808E40B615EBF 5B59D3CDEEA96951927E406F696745250F0A5A8B8850C3A3AA7F59CC3F18F3FC141DDECE 33CB43777CB6359B9015B27CCA83BB4EDA646BEBBEB1FE0BCD0E1114C0F983918DFF74B5 57B7A614EC0FDB3D1FA926CC76D3B6F0527BADACC1C302DC6D4019E89EF7DD3195494638 794543E29846DCA17B1724C3B2C09172B9402437E747F22F1C959AFD01C092E87ECC0CEF C7C422538164E8E551775CB7660B90009EF7C910845385B97FFC2DD5E8DC1DD3C0B2128E 9553A042C74308F74DC7F04CA995F9B9870AD1E8F89382E9E9DE8600936F1E2180D59B2C B8A3536BD7F2C47142C756D26411B6E5E34B03C49CFE87398C7334C786B729DA1F36028D DD5A16009B6BCCA2DD6737C7C4C3CE7004B488B86507D095B567868A6ED59964EA34095A DFE44C9FEB502977A1369EDBFBEDE949CF421C576859E181AE2CEABCE6C35A88F5050345 FBAEE8E1FCD98F6DE17E66DAF5D5929046C074E8D85C4AFDC71367857E8A7B1AC3E526F1 8B7DF5E90F2DCA4007344D0EE044E663D50BF80300A3F1F1DB03B14DF2CDA7A367F91A5D AC834BE8E057EDCE5274252AB3FFC1D1DE90857EED51040A2FD881583184CDD2CDF4D629 B907353B9F878AF4E46FD64C85360927664DAEB7371EEB887F5AEC4F76C6700824FC8E05 53A785DE724528E12C1FA1A8D32059EAA3A99E6D481665DA762E6325A4310222D7DF3918 E96FFB85B3C04D9E7CF4F3328FBC31F736E93559EEC6D60A878990E8108012A2785233E8 2E57C735254C7B38E16C6C7E7179246054583C7299050C31496993555A1243826532B139 71188CC8580B73C43CBFD1E8F23369F56EAE15FB0FA461BB771026722695A8F4C6BFFA3D 76BD2E85D3BBCF1F7F53D23639E39754A4D71B48F1A8C8A18C2004A05EBA0656E3E9884F 9FCC00D55514EE382FEDB40BA636BA174FE950F2B0BEBB9C926E77ED32B08ECB1F4D4499 02387444393D3A97BD81109E56701374F13CC9774778ED60E3EAE3C78BB6E0B7ACC43B0E 5F29F3DF4610E97F86D7DE9CE585E2BC144E1193C123BDDBCFF83336625ADD90F1DEBBF9 74CE0797BD5369D2E3C448BEF8AC728723EBF987B4F1CCCA1B3FF3C0CF8F0287E3F5430D BC67542E10C560A28AB12B3513C1120D8975A6EE71DE0175AD8FB16C3DCE4B265DED2815 F03C7FDD72E34A27215870758DB124A5D630723BAE250535FF92FFADB0ADA3C4D31D007F 562836EB114CB81FFE1E9F54756A3D1A8E3CE7DA8EAC4036555B6583937F6307017392F0 FA28BE83A6C4AC9183B899DE736F86D05A91CCC5545B7AA2694841AA98ECC5712A76011C 9637D079BCD5295AE2999EC5C032F7ABEC0804E2A2510303EE071A9777E89E32804C51F6 1458AF5736CFE2DCC50564CF3EFB629FDA6C39CCDBC5417AEAEDD0509A025B43A682B218 8AD0D62B96ADD583B027B85C532A1F1C2CBDCCA5FD54A3ABA6EBEE74F2568BD9AC0E19BE 26C1C2436C4FF76B4F50F05A37A1A73A02D155C2DB4A849082AFDB1284F9566407CBF976 F2D7C124BB538A0B26898CC818BFD9D34D41DA06677516C8D78B6C801B864DE2B7830E1F 868F33DA7E549639ACF55183CAEDFDEA0664AD59BBAF56FAE34AD40EAA21F539F916E41D 690419E36D2C268B7F72B86BE962AC175BED26F6411B70A92CCB9D7A27FF88929F0D13DA 90CC5948B6411F7B04586E283389D530C85CACF958D145C88A34E03781617B40171D3187 430BB6102B6F1B2C9DE91D2D7BC2A8D5770736B9402415C966FF73EB321FE99505100C1E 47433619A68E08EBC593B85B638EFF1C484BAC03B045BE97A0E8AB48C929F3E801A3D057 6415902C739C6F92B15E8AF8DA0DEC3450DF6AF7522ED6F316439B8C6FEF58F96BC9C096 C6E5C9FA97C1524F6F4B84D614EA7B2217B7DFCA1AE90496066A04DDBBBEB49965526701 3A7513B3453AD0543D475A82C2CDABEFBF7EE5FE95DF01DD6EB4E2F5B36E5AD98A5CB658 87327AB12AB875E4D9D7CFD34C4F02325EC3E37553B4EE12DD5CE535B2F6C7651DC26A62 CAED8B3A97A143029F3EF41678CAC2E5F2CC6EE9BD567FF58F32435045214B62BFB112F7 14FD95F9BBB4F3B3FB620429E12CD2C52C55E483CCEEA72D524C4CF1D91E80F27ACAF36B 5BC7D386BFCF9D70D3CC730D5D2C9C75BAAEA9EE1FF093321AF65CCC73B6BA6F977249F6 746D69E200645A4E40EAE0986FF0CF3F1B5572BF9536DCEA02B6925801D1C466129D45A2 E927BDBF6D6F84C3548C78E70DAE806CAD180FC468F979685F845BB2311524539B1C7ACC C9EF641183A100AB51C155E89961090E2349C601C6769CAC3B1C2537BE0CFD560B9B2369 4E1B8E9083DF9261B17EF6475C0A42466B4DBC8C601CD82D6236729CB8C80FCB57E7AFA5 D9D9B35F66E5B29251086BB760BE94831670D955DC8288817A9DBCF7A6ED48038596CD76 BB2FA5541EF78AF5CE421CCFB286624BF3C98829323A7EE8CDDA3C5DE22044672C8D233A C08521CA69962135FDDC8EA4139BCB13B64EC0DEA02C437BF522F41A8768ECC542D5EA8A 9F85417B598931410BC08259AF88E410B695A9A6EBD730853F2FDFE3FB00875F21E1EF5F 60D8D8F62E643A6F4D124FD84FD72FD21DCE57144CBEE5EED9C05796B3F59338903913F0 CA0B073B074A44B1E1951353EE514CB41BF3D50DCFF683CD15836226EE9E73F55D4078F6 5E3A288CF7F124ED183DDF2C0EDCA6C375160756DC3DC33757CBE85822FB2ADC859CA8CF 7CEAB1DF3A48E751A6604C3E4E53A9C9CB967813C3181D7E4C1DC954A26EA4B28E23E39D C2564845970739B40AC5B267B4CC07C90E289EC9288AD379A7B684B97BFDB45F036BA95B EEBB25A5BBFD3F0EFEE2ECDEEFADBEFE80BF2A8C01BA345B29DFA9B25B2D2234F358BB99 2054FBDB728192CB5EAB19319257140E95B8F31E14BE579364136543A847989F4E410786 A0A068E38A439250C3D61EBECB1AC741D529A5A74A546FF7BC9F2CEEB11CB98F4FA97BDA C74A7EC4DE3948859D3091CE7D8992D2C094590B0AF2038429E30A6BF3C7533A900A4240 E082BC40535E8A07E55E6FACA93FDCF4BE35823B30A2810DC991AEFE4320F927105101D8 48A790904C823CBE8286DBC1D8E7CC50B1E5931640FBD0213B0FEB7AF7AC38CCC6B738CA 74B1FE58BF8B559A7D3AF0D2ABEF706671A977E737B5E49C4BBBE7B412FC8512C17661A8 9827E24623F4428598A65FC5A79E77736EE2506E5A61DC3ED221F412AEF9FB3AFF6A79F2 EF15CE24C810321A72FC6705FCFE24032801E3F61EC145D6A82C43DB8E5F9D20AE3FD7A6 72477CEA2B6D04C24804AA1597A4A3E0B7E3E15D307D8A13D4311F4EA895199D208B23EF DB35D975CA9D6D9A036F27FE597C41804A8B5EE10EBD4C16DD09C6228988A780CB315C53 C2455FFAAB2D71FF87E67EE35A65AB2B8BCC351DCCD62BE2DC199B3574FCEDAD5809517B 8E3BB1B197078CD7F691B4D0474EA1F398AE3AF07263E8BD0842B8012EBE5F51CD5FF11C 35CBA2B275CAFC8D0B3D4FAD5B0931C03A3E0F79F31EED87ED8AE3C4F628FE1A1F2205B1 55BAC7504D754C58BDC458A4B24F8A4E1401AD5B66E3547DCF9409C1C811CC2DF862062C 74A773A5B7686504B4C7396230D5F2F0A2BE098245EBA1758F20E0E5FE2C94E899AFB774 4F29CF4D61334CDDD7C38BF479B0CC3DA8E67FB6D3150523C09A24286D86A9F4E1F5C2DC CB18719F6087FD27EB5BBD9BEDE21B10C26BC38CD98952A128F4CF48F8651B97F6244F23 E61EE0FBCB5D3BFD9C2E14792920066CA5E70449C4F13057DFD33A11B71C7991D29A7185 CBDDFEDA7CFB85ABDB7F854F4342EA020DB708556762994759BBAD1E9F83E7F2961B017C 4EB56B73B37F019A8B91DF3EFEAEF75E016457A70AA33D31C9BCA76BA4B805646F8264A4 6C15C2470F4903A99B0D0BF9B7B7D384F640FAE3DF6AC2ECB533DF89838B258D8128F5C9 1DB7350B9BDF201455D5AAC7C08F39B643D8CCF26AF3563DBA05B5AE422388644CEC7ED2 3EADA9060442A728F966D50989C477BD2E4BD4E206C8B014D2707DA596661CD7035B526B 61CBD0FE916D0D7B4B22ABD91B4902C44187E74D71647F7143FAC8E4E9907DBAFE15215B 6F20B82E09B29630E5F1CD15268481847192856F1BB23A00D7E6522090B3672286DCA1E3 D2DE32FFC4C978F61180D497D9DF1C1CD48B1857CBD40EA172DA1438862A7A28F570B5B1 73B53E1E81C6EC11A269001C6E6070CDD0156DE95E320F3B496036C1136F15EE35D79F2C 962280292A3678BC4DE5D1C2535F09571A5EFF5379BA71C9996B7003F27BE9C810C68D9E 8D55287AD3D1B570C57CCAFB53109C3EB5674920E6FE3AD170F783B1AF3BAC0BA5CA1598 6218777F4EE1FD7738963D6DE1D8E1BF1353D5D96DE89C2DE3AD2015265D9077AEA8F26A 9A391A61A27CB0F9E8CE16A12D1C2128E8CB7AE0E861E3CB56769A07E812F1169A283C65 A22F19881485367B098EF3B97BB9E41775BBE13F4E1560F2AA0FEBE4A31118F55142E590 B51D5A0867B89F00D9D461D74DACADA920DB5452D80982761B357AFD2F613113854673B1 3F0F1EAA566427323E2B35F2FED6339DC28170D90EF4F8E4E77506115BFB2FC891AAFAA6 59611E9FC6F5384DC5096D54E09567BA8379C7D058CE8A3E203EA28DB122519E483A46D5 F527919C4AA0F635F6F29C4AC9363EA96B0802002BD547E0C248AEFB8DAA0A75DAE5B8B2 7C7B4716769521B4F3A8B68B0251CA46BA9B7FCD00B3D4A59002B249860669961FE8F4B6 B594B68D781B24DEE41869F320C0CA419B596F3AE725B4089A388AC4F84A201392C1AE79 D6AD6F13023E6412BF29DFBF33F00D8966E8C87FB883F97B1430DDD9EE0D0E8ECE00DACC CDDE43F90351DC64D38EB3013CFCAC2792F613EB56CCF8553C3D9A4B2E9544058BCA3B86 6F2E33A68CB60097D017252DF367F584DD224D38163B6BB1F5E8154C9590B8E3425FD89F 4575B5150F2C674CE5421E4930766BE7A55D1A01044D2FDA079E1E5CAD18F5F0B7897741 EE1F4FAD109E503F44526746BB3B5C803047AAB46B1D2CE31F3E026853F52528C3CF6BBB 6BD36DFB524170B10BC85C070459CDD84D25C0EC712B5E8C8D1E6A736993351DA8261CA2 81F4013542CB6BF8168AE8F04C55BD7EBFAE0EA6C3B45CD9698C7CD576793A1007E2B391 0310CC96F4D2C5C0565CFF92468AAD585185BF6A19CA9D27D6E1440CD56CA0AD46F4D1DF 0DAD5F2A2C1D2B1ADD80030E38080DC4CCD773B7E7A74EE7F9A964BFAD960B2542E6EFB4 64FFA0ED1C8828B8C266897C0F7AED40851746A573DBF08F602BCF9E1B339BE24BF35D0F AE254E6D6170A224FB5225D8859F5C440F96359783D21940DE8553275485D0287DC71919 A3D81FA8D8167DDA0F42E1CB15A19D673B896729B2A492531E9FB8811837318C24546170 9F428D0E7B0A6C416FCA1B5B8849B86EB6ACB1B901E2D90E0939F3856934894315E3BDB8 1DEEFF69B45C8C7871E73E6A20B64362FECA450D8BEA3878AAA0676BC8F9DFF37AFECA0C C1096900829EF7DE769DCFA7FF9DF38C9C313829A5B9A7FF7707BC554F1B4FE54214371C 6681D624954BBBB90BA5AAA44175DC50C6BF1E8A618471C3D1D58471F2567084E503EFF8 F4083B75F03B7848069ED9AD01AF51BC5A9C3F34E0EF36FFDD3D3DB350740A56231E8323 60E8327F218D6E7F2490258F03B904CBC4763871F37E1B8C88D592876E0648184954B702 CA5FF4851485BE6501DE9AF291D2D4A55CE425E405833285358EFB271ECA61CB37942EC9 9D53EED6939D6E828C6B2E013E0ECE1A60736726F77775C299D6784E51B1863D304A9069 F217C825FF94E4982C8B3CC30242232FA59A8274011712957B3F1DDF558CAF79DE460A9F B15A2D1A3999EBCB3501BE97E719138CBFB37242A4883B3300E20CD21EDBBE0F0D8EDE3A D6940338657BE43C6C04EA6C48BD51CE3D064B55EFC5DD632E1084BD01ADDF53C114D329 438792E470EFAEEA5DFD2FC40553C736BF612A8AB8B0FFE6F16DE99FCA0A0B5026B2A50C C15F0886047EBA1F115984B30050C579C1CA97D31BF4167448D89B3BC66EB4A099E4DE4A 89F186334430655C7A2709930DCF66404322FE8C1AEB3C7952A4DD19CB35C3F50802FD7E E82D233FAE8EE5377A6211C0D55E5C188CC858D2A38990ED8B2E804FFD60DA6C477D90DE 24A93AE87BBA8558770C427EE99A8623F26EA053C077837CB691CD6BA6A22EE8C584594F B5A8F2C75D5ADF7EBD927BD53B6F5809A0D6088C094EE056EAB006CB8C4BB2C035D57A55 57C3BB319E4F0F9BA89129924EB53F7D349C0435A1ACFAABBFF97E9FEF3DB3DF03C21E47 C5FBC852A8DD098CEA2C335CCDA04F2D2C9E7E38A327C7D78CCA84B96C432EA51C9A3CE2 37BDEED3EA86D69716E5D60DAA77F31CADE9BB9FA1CFFB8A3A293A5B3FF9FEF03CF96BB7 F259C3FC6EFC422FC55673819F3F4272A675B2ABCF8A4DB411090346889715D49FB199B9 6AC6C2981257EA9211FA518AA5E582E35E0034AC42F607F587787EF3A6EA75C1C396FC99 331D4DE3A906906D334CE8DCACAD9D6880B84BE0068ED1F365B9E7DF9D35E79412BAA94A BDF0274B01E64B865E7D4532CD08516C8649BCFD7EE65685B27BD947156ECBBB358C110A 5D5767808E8D924F31464FD3BFBEB53FDE41411840C1B689963B2A5781467C9E44E681C3 5CB292DFF210C75FB4014107B364F2D3B8D3394AFC8B14BA28585E1238DCD8395E05852F C813E23F7A278E72C7463995EAB78999388E9F093C84F3FE3A164FACC9A0890FBE7CEAFB 0C988CC963B228D9939928E886095F772F12F8B05F4D66ABD8F3332BF5426002B905A049 886BD5D9EBA35960612E1DFFC74FB5479E37A19A17BCB600E200FBD9437F1FF156028386 FA46C79694EF0EDF059E63EEB766646DFFBF7385C0893EA15B3A1C982C051C49F4AF465C A9E6E837C463F580B883A93C1E8BDD68EFE50FE6616A831DF101F184D2ACB6112A10720C 6D173FA6E5C494A271FE20AB7959234BA355301BF8276B34BD198A6F6415C094936BB323 322CD5957A5BDF76EEC4EBAD015276DEF92868B49CA04FAB36BF6670CA237B4530BF5DE0 B5774A3E67AAE1EFC2653CF7ACE86FDEB7C8D78B29D1B92170D47EAD57AC140DCB44DC34 AF59FEBC88B667842227BAE500E6A1DBEBAB7750429B00703863C2D3B3BD0420D3660EBD 6C14592216F03A404E4E46458A9370BE3A92618924313DE6453AED7361D34CFB4369C789 770D33E94993EDD582C6140423189EAF3CDD7A672D0DD00207B86A4D8FACE9976D83D81E CECF00CE22D20B441038D424E3958FFFB7FF68D6214BFDA59085FA022DBA5C94071A3F72 1221CE61C19B19542C3321030BF5CE4D8022B49573793EB824E9CB243D0E9EB6B89A34DC 744450FCDD335E607B45DDF26A57C7DBF83A8C0136ED272D908A0A469C9E61F3CE9EA255 3D81B9E0B98F323928B0F44D62FF942276A4BF297FE225EDAE82A20680A011229F58DEA6 9FCE234B22B2AEC35A208E23EC809A5F790F09E11FD738CF62168B1BC2F7DA9564B8D576 11AAE9CA0094FBAA861B6114A66A4692291D5F4EDF5E230CA8E6526C55B62C8FCD46D435 6407C7082BCA46845FB9A2865EE0CE8F860278152F0A849BDB8B85E481132797F49DD35B 247BBE4369FCB4A20FF77D6F791568CFD158CC1319F17868CEF028224D2AF3243EC6740C 93FE35E7372CF7E68F06DECC8160B7C04F7086F4A4FA66DB58100D6513000C4CC90BB363 6BC1B6ADE24EA559EE3245CB74502FE440D7ED58AE19B182E0EB645D7BCC5D8CF1EC26BF D8BAA713B6215595BF42FC097D5DAB7C030C522A694E027CF558BA7EBD711EA18249BDC3 DF346537E5FF50755BF03D38A338EDF1974B21FD6E75548FB8E2CACD173F40EB5A9F15B2 FFC720F0190ACEE2B6E5B040F7B89AB214DD89E1E8AA859BF436EE19C5DE800ABBEA049C 9B6FA77C93A833C02A11CE4E502D174403B582F617D388CD71407FA8C7060B9F3AE414B6 63F4B524051CAEEFE1C919346B60DD19E9FEC14191B72DC49CF0FA248E568F6AD137EC5F 73BC3F3F79CFF305D88447E05B4BC7B25D20B5916787EB38D2BBA64411FE911BAF1C69F0 FECE979BA0267D3A297E80FE07FB6F6330C3D4E9777C095B74DB138EA9BE483655FDC269 A8759203B594DB7C9F6AB5909651C4A27B18E51CE5F695C2ACEE18DA6AE89A3BCFF95D65 365BF11C14A5FB2BD261CF6ABA383FC467C81FFFD366672895BA37633C3A89739B397604 0734CF9218B3710863906ED0002D0E756F66DDA0B38F40882E388DDAF61AA9EBCC87B0DB E04F06F6CD3CA3F24EBC695C1CA0DFDE7DDA8864EDA643FB93E0AD976D5C1F36F65E7A0B 2B1767B0C302AC325B83FB1BB658381C387FBA199CD1C3EC7602CF0E19C96C10890DCEC5 6166BD141F3061BB7A0654BEDC8DB922337942873A2F6E8E11FC291F8C16AF1A0C8221E9 62106D02C4F575F4A9F61287E4C20D948E9E4CC7E74B99776EF3A27A0C2ADF127E60174E 4BFEA136B745DCA205A07EFBA484F7E0F76E5FA389DBEDDE4557C73C6B8BD6CFE9D0EF6E E197EB8A5EB0468F5A80F6E71F9D65382067B3216C740744E671A533F046B48D61845500 488CF8202A1E91176F97E50970BC00D58CFC9B1BAEC3435DE567CC6B5C601ED7BD437C25 86E02997F7AFE95F1AD71CCEC4E9C2B9D8D17BDCB66A128122AC0E0CA37CE810AEBB216D C4AB46AE69CB2AA97CAC99C1C6A5B112A1BC553658BFA93E931B4F28ECC6C0C43E18FCDA 5972FCB8882A86CA41349630542DAF536846B01DD5ADCC84FA4AE1CC58EC5B325C4EFFD4 E32EC77120141D233E5C02CF7A52399AF39D64F4B9000B881F13070D85E8DB91DBD38A42 08D5C6D8ED42A48272851DE276E5ACF698E6088343F852E0B139E724BBAE48A44EDD7A63 B5772F61E178C2CBC38F728DC708FD792737E5A495FAA3335133C45CC887FCC94889DB5E 2DD34C1DC8B2901EF49320B2B8E7708A778A54A540CDF310ECAFE13653DAA2D6C9CAAA00 7AAAC4D9CBD01F61F0E1D8F35C06019B1D6CCCEC5CD9A1A263CA630C8C14EC325F8E5718 D4CC035FE652C2A2DCC53B7EB5AB33B43C7D1EDACA8F589C5966BD92DF8B62D56523BD33 501CBFE506B9061B096C184C5504A61CD6B5E03A8338F5B16ECB0324A8785DF1EE193710 B76D5301448B0C664F565ED0538257FCFBCB051683FC200D4AD675FC4CABAACBEF11BC38 E95F474AF3FA7FB187E5876B1F04A26DAD7904E39F3D53A1D5FED70E523867C3E1A5B65D BE0B1D6CA84EDEF3D0A24D042CA491D6BC39647EF390BA25E2F998ACE7386F8424E3E03D 6EAA815E717F835E3528069BC3A65CE58FDC49B602E0418A3972D9E5F6192AF89397AED8 32CB25A607DDE31B69FB61164EA5633C019B3E4BC93078739879A2364CF42633C07D1BE2 57AF2B07A1E5ED68B06BFB81CAC77F6D2EA4750266E8919E8911391688D4EADAB19B3E54 4460DA693474250CA9A864C17B7BB5059C0D08B32400A51339C4ED7385D9C1DD1839D96C 8C0A6BE1CECD38544854E9698401E33EBF50C1DAAD1652D0EB978D8025D86E07C3DD64FC 92D362A13E173F1A5D015A43AC3CB57732C6A2A204B990635B607938D99422B450E54B7B 4CF6D22BE2F6B9E936611A0132538CD1D8AF62A260501B3696EFBB0EE006F658EFD8AFB4 19C3C8957B3D9DA5F8758CCBD17734D80E2E207A58E8E97B2B9B78012FAA2C73CBE0061B EB3F30CC034F7FE5D3251DA71BD8372BCC7F271B5DDF11167AB166C59F63B9923F043611 52240DAC4CE6B15DD8FF9ED6F74FAB00A4D2D9F89BED255126AEC97ABE2D0C7D3947907B 0AF2FF6A641A43BFDE3126F54E213C03C54E01BE7DBA01F71E523FCAA4C02970BAFC51DE EA7A8530D73D62B5F3F457AFB500C5734AF579603D2CAB9AE49281EED2CC8FF7101B4F45 F619FE5FD48A83D934F6A0D394B07B1235AC8FA8F3DC3CCD9479D87398074DA6AFC3402F 21B31DE8621AAD29EFD4F9CAF0A9FA9D9A0D097625412B4FD723E1363E5729F40D8C02DF 8D222A48C23B2E25CDF4F69D283E006E0679F1BD904A9075FB0A8094C1BBC3400A2BEE5F 736CDCFE47991E539406DFC399BD0B76D3A5C8F91BC2BCD841E4AFBB521D46B8E0558F4F A800637D47167FD2EF79F5251095FFA2F3BDB915015010FA689E4E87F921298735A30EAD 938B6BA40D4E58042A3065AB059C598A96DEE3AF09237FE8A6BE9CEF014AF36D91508C93 F7A18393BC321C3A4110B160261477F6D9B6771DC8738D8259BC4FF1F2C1A657638CF4F5 08AA9400D4AEF4ED4508BB30F35E38D968E008230DFE501A9612966F7E35B6D8DF26338D B63BD1B88885992D8D3BC7EFCCD89622689192CF14C328C4E4DED3025E56F3E73FE2472A 144AF139106A197E00EDC57C2443686A234D214FEE4AA2E3EF978444D4A2BD1373423CE4 E5F82099974FE66D53972F774F2BCE9003538CC59003D0DDAF9889FBF2519EA31F3A515F 8D2C0091937DCAD3FC757E18FBA1C37F8FCC69685E95932B3DE60F80837EAE690DCE306A EB060698E560BD148CCCB42240665ABD523CB02FE18214AE45C44756E9D3A8183DED7506 E560EDB4D43E3971712C3D23714B0F83D3BF19C7320FFEFD07E9E8CC573D97FED37FD3DA 5EE98331C70CEFDB6F6564D8EA0B985F1206239822A4644CF2D7ECDC63FC5D2014359891 5916E41FB338545CECC1B9E37DBEFCED4A55DB485C86C56EA97DA572A2B74D2650C8C839 1C57A1FC4F75913C8446846F26614E8C72080DE0FBC3FCF92864DF37F8A3C66109AA56BB 3CDD02BF5330C38BD39B081AFE90F775FA6C78BBFC51DC0FF37B9CAB4058888CB3D4DB26 40D7224C0DBF9467C720CBB5F684B2A1CA8951B29182A3913EE398B8E77CB27868A439CF 9DD03BAA0B60DEF70FF776096D86E71394968B7D64CE289373BFC8BB2CC0BDF78E1178E3 D6F5473427E7AB841223F963FBB2A5743A823367D9AC4A5ACD8BA483F5BB5AEA19B1E882 670B74FF997E3321BE8A96D7C0435EB77A36F7AD6AD0C7B21F5C74895090908FCDDFA655 628898D8FD6218A60C301D959265B430369C564E01CDCB05F42B520625FC0FA93F9736AC 7D5ABC70D1A25F6A6A95C1CF4A584B51E9CA9FBFC9F24EC4F2257B2AEBBD9581438668A9 F84CE7E9919C84227D76B11B1BFB61788C69603F0106CE5FA226129EBAC295709495748D 7E1856EF2F1D5F19458B977506F64AA7E433E4E62662F10FFF43701F2A726C3F8CEB19CF D467C3B4E835A99941C7E46101CE2C97683A17530F32808DE665326D6605984689241CD4 5DDDBB5C964F3FCF7FD89D8B580D941B856613EB1A8E59052B296E8CAB02B561863B3671 E0E73789B112F7DB5F0B2313B083D17166D05B65DCEE648210AB9D3F3DFFE60EC4649552 2F101001B3FBAFE7BF2F0EDB70A95C572767FC1880F84A70DBEE39648A176BA8C7C87EDC D424245F6F66C910AAC0C60E5078260A698AD823965D83268AC7A98EA0E7A23A7599470F F6B2E6C6F32FD3714B210C775DFF039590A0A159BCD248E95CDE7A234CD8F64CCD5ED383 D2E49F9FF4DB2BC7E7F8E1F45643BBA556CC2A8C7C0D32CCE2D17CE77C6C8B021AF086B5 1F0649C7E2081705B2C0C57B205E8C6985C849B01EF956BD97F8862BE1B061733C8DECB3 47F4AA8CCF7FADCC4C335D3917604DBA283DBC054C76199749C7748A48417624EAB6C930 B403FCF33E8A48AE4D064E70CAF24F68AAF18D1F87E4A920E2796BAEEA34BD4F208C90AB 87D599E2A4A2427715819D7FD510ECBEA421E32FA9C3B672BB5329FF756B0E4B31C2B16C ADB8ED6D90BF002B29D4B4F9AB7DB03B83EC9A165A3F1148A9C1958B8071F279440A019E 743A624CFD4166857D8DA38C230DBC91DEDCE97E006B242E14CF25EACDE17E7E2A6621F5 662820DD295589E5BCFEBA6E737C3DEF3D3482D7737CDE224E3509858B999B66F6F365B7 34C207A58FB6C0DCC099E1A50D95A7BA53E0E51EB4D6B55B681B37FDAC9543F143EE5B57 292DE45AECC7F8528F70642A9ED6A987748EB0FCF8E4964131787205AAAE1D84B18E2736 911C20659F9813B7F90F69F2B93360E2983CC40A3122DEA8263FAFD8DDCA7CDF12908042 F5B2045B3AA8BB0336816C80F1C89F7141CB3C64C08E8879145B10696164E0872635D06C 186444A971B188D84C0B908CAA9D14DE8E69A758841AD6FA932A648E9694E399F234D090 D365A315CEF4F66DB8E959A56FBEC35DF6A4E969A49FCAA95FA2797D401DC1B42BD82BE6 5BDF85A7B8A3FDE93B698F10F675E8E0B7D2AB4B3DB8E0FA5D21184C9487BCDE17AB44BD DDC9278A72C83EC2896B02DA5D91F2BF9FD44D56CB65B65DBE0D325427E6456E4046DB1C 5229F513A4EEEFC319A58334835FA5DDFB73D4C8E92C4A3A2F449939939E07BF9B3B2200 1488481193B08870E0F077E47E7946186ACAEB9FA732474E2DA080AB573A4DD27BD99894 F2EED2C80BC44C46596FB47502649BBD83744562DEC7224B1CC54CF28192D3C23956A7EA 96DBF54D85353CBBA1770E0FB58B6F1852409BCB1BDB61313C3C7C3A349591AEC393EAC1 BD80E7CCB94C3604C5BA8B0828AF45182C683FF51D2D2C00570F6A172E2F9DEE877B03BB 45E866CD7E5A99E63B4141C4B12A21F62CFDD331137CD027F94DDF9F054C162D74FA1CC3 94F404C707DA1F4BD2A8C1C762F243F14FC71E546EBB5733C43AB43FF23BA9C2CB9058CE 3F3808A129A03B6E13BF8DFFD23A1D02C839FB6ACDE2BAD2474EE64FF7AF05FB40E30A23 6BE270B787D6FB1FFCC0C4D7625B13217071FE46C2DC56DA79F278C69E85D7856927D0FB 108EFF1E3AFBCB9CE54BE2F76DD439BB182D3DF1F2796DF6B5733959A950ECCFFE7E0B7C 6BDF71CCC7DA4FEB31D6FD79C506250FEDE21414A1A842747F350664CF53E6710808AD08 A6FD26ABD8CC592F693BA372A5C0D0A6F4277A92553CC72CD6212865DA7D032D1904F1BF 668B0B37511CFBE3AAF595EFE422FB3007AE3022CEB6C87058941DDD0DBF6F9ABC5E8CC2 6AF7BEFBC1F4B1A03636965919D070FAE1F7F9BF42FF16E9778708478A279DB9DDA512CD B372E39B9C5C87CC7A6E55BAE1626E8AA3ED7BAB198149D33D8E79960DEE846CBD2ABA76 1979C57754955E90D7533C0B38CE5851C926F0738CF4EF1BB2951DCEBAA0A0704870DD80 FFDF92D2136C1F470FF5345C7A93F4DB72360B4DAE833E2614154FA43A2347FAF4ADEB0B 73C8FB0AE22A42F80B03C7207F75851AA036C76934BF67B10ED6A5B2000A2F300A9E1552 FF9F4C66ED0FB34900CB8649CA50BE457B967184D0AE2BAAFFA2AF24881761BA01759D8B EA601F2C09E5A15B1289A9BEB266392CF5CFF78EDDE664F3FD6B77A6C10BDAB1E57E4ADC 2EEA4F2897D2ECA99DBEDB2046C7E889EE2FB30F172EF290BD4E16FB68C14E88A58E3F70 9895FC431776EC963284E03B6975ADB155128913F0A3C910E6D3F0AA11A1D6D67C0EF96C 145D63F6E629C61C934BE19A0EC8D5ECB08AB1305C5C53F41628E7AA2945D72A18F5CD78 3DAEDA17DBC867BD813F81E2D828B09EE77EC5BD7943FAA62E9682214C65735152E0AFBC E7808699369C181FAA4977771FD8D716DB2BEA0FA4CFDB606A2EE243E0F4B576A3C5FAE3 8F67C4E29DC0D86EAEDBBA90803E2AB710F16BBE42748967150D969C2E07115A9B2A2507 A87F7EBAC946F7178505BD9FB0E08D86DAAF88D8A5EDB321FC2E7915CB80E6C0C2B125EE 0FC6124990A00E685E157EC94D72CCE6169F852E0D19DDAFAD022C4DA4D19B979D33790A E763E04F78D6449C7D3674A12D1C01BD73872284A3D7CE4B551CB80602FA4145DD2E4360 1CDCF3D6567887A6B0A73B7E1B6BA01DC93C51E9FDA181B20835A75541320F1BA53EE871 16D938FC03B909D4FC6558223DF057E3E6195C1E26D33B28AE7156B88D7B5A6A85ED8498 48EF890A5402467A8B11E2DA4719C395D6F40E91535F1DE6C7FE1FA57705A8F1321E2D74 69593D7E6FD067E07B51E7BCCB382B1B00B655116F3F382D990AFAF26347CC6FDA803727 C1E13C6429D1F5D5E5D9D56EACCDB32E30AA10DDF5E0294E59123E4C2E020AF1D13A0F89 99F30A49D8049E7D9B8676D2C13DD896FF4CB82995F6517462886B4D6DC37BE8B13D07BD 23CC78524F835DB22AAB29A1E6468E8607FE3C9E1B1CDA29B98623C87EF39A2DE0BE849C 438EEA208FAD0DF05BB478D8E54501EAB704ED405598D38D6A58628BFF784EE969725A1E 8BF897007D0D6F53025453714BE52FB6A5E4FFADE5563846F778B71FB0D225F8C9AE9985 9CE14DF67AACCBFAC3AFACF1CC6FFB6BB517C87A382D1AC1615DFD97E52D3020E531B8D5 C6318FB90D30C2CE9EB7EC0D2DD8FBC83A48BE41F22EFAB7B5CB7262E8BFC1196C69AA92 EF1AA1D59DE9B1C55D5B7C0019D68F23323CEB4FA767550B090439C2D1867631A97CEF5E 7871494CBCD1EE56C0EBD4B2EC412EAFFD1783CF073E9B6575CE9642F704486C6CB319BB 19CD270D1EF9B63FE25255F6CD5D3B77B64FFF7B562742593E6DAB5EDC5E9E9467A1A478 8BFE80F892B3DD660B1765B757CDF91B61E5AC7C7FA68857656473C32CDBCC21C3A0E812 FBB939809D552C9394686F8CE36CFC3FE8994D26CF4917CF0F11E0DF8B806B5AC7B092A9 255EA0364A9DF03B85D67BD2B4B4FABBC8161542814E432486F103F2DF6097DED715E2DB B130A753D35EC68126DB76A2952575BAC3FABE2BE9FF73D18E60BA667575FE3327769770 925F00FE13573F5050DE00CF24CD231CF619B2351371433DB15B1E97AFB39FDC4E07F1B8 45449EF4CD86B3F0C0BA12D52A81D5386A9B3DDC62E588FA80D5A1E31FF503945EE0FCC6 841AD3D4E56F9C801E84B01FE978E7684F451822423122221FDCF6702D48CD226DB839A0 E095A31975298CF2FD71E6423F0FA5191D8BF7E27E6963A23F31131E68278485BBC5208B 6C5D2765BD053C47566A65DC4B173E1580183763326010D54652BCF7BF68FADE1E3B8B28 E5C601E241431E665178E56C36AA1125B07D8E4E9627027D73CD5A664B40D82199E3622B EB76FC104B2E5A6E009B4AEB180ADE287F763B73A6F8636C0CBAB936F79859941ADBA525 72CC725A8834FB6247ACFDED0131BD5032ED40A04AB7C655AD7E954E4CEAB74524582D7C 142FEAEC28F549E36135C085A35DE07E782E72CA53BF7B2C8EE8C3D8346E2C2BA619924F FD9E5FDF9564723BC0FBC215BA0F785532DEF5AE95939F027A62A402A7FECD77F064AF12 9472A23D2118B569DE04888A8ACCFD6DA14E928A7C2FCE35531FF112F93202859771381D 6D161E6BCF5C6DE9B375DE8E983A64AE6AB75FD52D590B78C13885B46FBEFCABED5BAD69 04C4624E71B29C4EF6B6C2564485210616C08A3C41C83BD947940BE454185EEB33B0F0D3 680F9BEC8417063BF03100F3484678BD0F51869F3244EB71775D0397B8DB029D13A2A318 2320FAC3561E7C994DF8F94EA306736B7059857552CBDA0E2DB4689A1572B509DC658E6F 5C7FDD812DBBFDDE644F980A58E05F14454F916D4458DB067719254EF77A887D71FA3385 3D6A8D1FD29885E3F52C6E424EE0AC4E1E64180999A7266C896CC3140A3C59DE77DD941D 376EBFA09D7F3761704BAA2C738610F39E7FCA335BE7B36F9306795D5B2056C57FC42C84 66BB9141ADE2ECD7A4ED5BF9251C3091D8B950B95CF07303B165A65A4CD198BFFA8DDB46 1032A70916E66838CF2A76CF444ECBCB9ED23B3B32143C9A98A395E51CFC281106A7DAF3 74AD4BDF3089EBE727C93E58025BD6C8D917065C4873A5DB3E90084716C5082F6CBAA4FC E60176DA9B75DBC2DC5BEFDEAB261C915A7F68CD5F3296FA854324B661BE571A9CB98157 9C6FE6A5EFFE43C9933EC292550619B794FEDB97CA0FBDADC4FC665D7955B43BD3B23A0F 1B76D78F7A1CED8FE598074469135890FE8789FADA3CFD4FB965A1FA62E55328EC450B3F 1E6B00FE274A494D25E94A2A95131D5E6C8DC6E27B65BEAFCE6095420696940A282C5AA5 B9E66F243FA307C989352A1D557B83C5855C004D86A4BBEB11BE9F152693A77925B014E1 6AD084959F78B2A136EA406231AB1509E43176B268B8EE14FBC281CE832FDC2475447A21 49CD45645A78E4A0027060CAB18394DD5A3E7721B27AEB22C9E98AD563BB5FB2B0A0A759 93F090DC2249F1CD8ED869E0316A2AD4EDB4C24B18B758AD2C746AA9E7544299C8170211 6D591080B15C376BA8386FACF02BF9E84AB8C7470483A4D6921CA9A2F191A42BA49928BD BA244CF5918E55F59E27D9CE90517F9485D91F1D5B02EC941BEB6AC9C7CE3E684E882D18 7C9B3EC948A745932BBE4DAF8FA61A84FD7D1BE556891F8C339E63457FB447024A3EF140 99E8FD37DB2AD623BA1476C883F62395E98C1B99F981F3FCE92A9DEE9D99627F5DA6753A F46B1B69666048C981DE59BA35C0481FA33A17D511EEDD45D90AA7576573625F167C3BA4 35B8FFEFBED92F368B92A0DC32975BB2C9C8B1A121CFC44075474B78B496E953D45B9762 B2ECD85E0CE52B15510E80AE563235E400CBEAC6EDB602386FE1237ECF4D3C14C92280CF F9768E60748AF4865981EDE419204FD2F18FC50E49245260BE2319DC1E624C2E59BFE1FB CD04A3F5FAFD8D159E42B8E52E0B2279FA442E613AAE3DB6A1016579D3170F8F489E3793 12A6E32F45128B15E01373AD0C1449D0E5F31D5DC50EED3EB856629EC2E51616F40C9DB2 F4EB8BFC519F473A02BBF02FE0E8F86D0EBBDE611081C24B3ABE09239A9682D8D573580E 86D5FB31227823CABCA34D9BC918F38D9B3273223408871EE2D29133367C6048E0FCD93D 22144710814CEF24D9680041F020EC73546ABD22B6F521DADB8E1F6AD20AA8F33FDEDDAF 273CB366CC1F7FE33927075C911FC4D9D8175A7AA4E483C2F4AB658EBD523405F83F5CC7 E328F3FFA5A66900508DE0682F4B4632880A3C807D606A2038F796B3A150F2202C538F3B 92DEAAE46528E1BA68E19E6FEB80CBF5155A91C16AA6FF5CA472B4444D0981D1D9F7C9E9 FCCFF9E67FDFDD78AA2AB765E34C7BC29B2D8BB138AFFC8351FA98DA41C552F6C1479229 5909A4EF7F4865E16BBE81EA742178C3E86B9D2B957DABD2D6A558921D4FC3429A30BA66 13783DD39563547E9CD1FBAE6257DA11204DC8130C89C5B80541E0668752872C050A4320 92BEE57ECC95266FB612532DD8D5465C938AE4979559CBFA8F2D7903E48CF9DEB397EA6F 31F274D48E8956D337310359199708CEA05DDD64CA417300ABA7EBE4CCB70DB7BB31FB45 E2B9E0F15423FBB2EE5964278A536790F16ED4F9CE31F6DACE8C0FC489CA73D2457CF3CE BB9BEBD0CFD2D1F11816BACCA5D4F9A84EDF8D7F09190C16F1B6D1766AF98A34E5A28693 B555E507017C1B9A1B9D8D2F52E2899ECEBB6A341BDB98DB0885D97C5BB9D35EB6D18099 594DA2A6257D5E4806D45CCA23CE2545697E3DF34B6E7558D080B030268AC56A576AEA44 B4DA78A686340EA9B2249C58381347DE308439CBCB5988DB881340139156FFCA9A8961C6 2004EB36FB0C77F8B762B388EAE846531CC38B75AEF785311A6F8AD5C0FDE8A61D89292D AC55E1920923E91BBDBB40675A3D956163323406F2EAD0BC79E4E31C2C2B22B46D266657 FD150611305CE08885360A76FF28F3DC837ACA58CAC71443120508A80F9F7086DAAC40A2 9082706907B9751B19D67567FA243BB6595E1DF225DA36FC4F8D86712B1BEAA0D297AFB6 D20AB0ECC8CAF709E991604552ADAD7F22F8F229527B60BCD4DD9786AA36A13328881677 7E00F57F9E562B2CCF2D1F6F6968054D8C9B08FCA9E0DFA07C11BCDA281DE484968626FB 52B677BCAEF983444B24B0D959B66FBB9631AD4796C435888E09D90B1FE97274D8459A07 9863D3DF6856A45BF8555999FD430FF9AF50FA060364A727503362129D627BCDDE83F679 549FBE4258B08DF47BDC2BC161D5E61804588615C5CCC3CA6948C25DC854EDEF94A2315E A89ADD8163BFEA9D72B430ADE3D9C17D69C9362D2827EEB15BFE3B8806A8CE373469DCA9 13FE773C8B9DB720538BCC4D8D5481CA29661C00D1F5CAD55799F363AD2CD563EAAA70F0 6E250629F63A0ACCD3AB2F89F579557B8299F1642663399DF9DEF3BEBE9F9FB3505E9581 4D58D1335C9AB341F1928FB7553474865191AD7D8A89C8505B88C1C22BA7E3A88A512AEE 41B79569560C45B67497A6AED27FBBE40C8B2310157AED1078B9F352B79BCC93DDDE7803 F479CAF0EB48AC801A0BB9EE972A258F110446154E8DF88DDC10523E8CA22A62285B6285 E7B3A4AD23216701310C4152DCD1E39F771BF8305D35E0BD42432A0C03AF965756F25CE7 0869B6DAFAFC69C8DB3631C918A7CB0A1A6E3248C5E1E665E926DAAFC9BED400CD4584AE 03DAEA56407CFFE84729215EEE16B10BF164B5AD7303A77423679FE14F6626C934A14587 97A4ECA95603E5F4023CFA4262EA9E949CFF449EF9A82005B23631255E615B060E4BE2F5 526E06676500DB126EA3D38E3562E1819BB68624010F5A984D446790AC8EBE11C5137500 1814CCFDB10A27EB87382CF5788150D66B803F0833CD73063F2CDB1C2A56E12F8DF75310 EDE85042D615FE028F68C668017A2A32594B89C428059DDE3FCDB18F9906C7E813DEA4EC C3296C1A21BD4BD3C373E91E0D6B6582D99DF35F5091C09602547B864DFE966532EE4669 49DEA26C0F7B42D8023F8EDA050D8482361EA43C52FFF4F54335284BEAC3F427B6C59058 912C233525631F113FB15B888D5112759466A337C37A22346C6A4963E3CB53ACB141A59B 3BAF30349CA7D8827C2CEEB62EDBD851C2AD9BB8083DFBBF305ACE6868046BD93B59C2AC 75D6F3B1C243C6EF66533D2DADF52D81DF1397ADC532CE86363BAFD043F9B1B8E6B83547 4E3BC3018912BE08A570BB4000BB13F249F38DF8C73906EE9ADC7D5630F04BECA0A86EB4 52ABFECF46D03CBAF4BE02061EA50576A984FEDE9DE35DEDE1988DAF0A6308EC4B6BDFE2 CB0C7198122C19F73CA7436955379985DDE2ECF851D83A425B4427A4A17AAC64D9E68691 2645FEEA0A8A0F7A7C1CC0B3E96C519386EC14626AEF3E9E8718877DBDF45C9B8984F81C 99980A8F8F3C9618F34407CA7916D2C4741AB9B4F916763E1592BA2C2D5979E2256E2D17 A77905EC38606C3645F1348E77ED501DCB783B8BF677E55415DF7373C47212BC59CB71A5 4425410E29A19F74A9EA8AA508B19464BD0BD1958931B135DB014C6F358ACB880C189070 E27188EDAA43009B515994E8F3481A9DFF6DB2D5D474F0957603B0A45A7E6ABA97640576 11054B1ED7C692263C1B2BC424FC68615E9973A230849E771175432E48746AD8E3A15746 1622190775BAF10F8BB66D2DF99170760B26DF8714BDF178334D0F90A615939C95DF51FF D90B28F5BB67FA593ED31E035342E6F187DFAC21FEB26107E4ABC7F484AE11CAF85543EB 6FA887B4FEC65A760FA33E6AD078F420D4828B526B37B4AFCDF396459B6338896D7EE8DE FA3E10C6087DD4E3F56CA302D955FABDF1EC04A5FE4F12CD40535879AF0AA992D40E53BE 2EFC1FD35E3DFA33EAFBBA4E851434334BD4551B4228BEB88C5F8D259864132E2B893C98 2A9560ADB25C06487A75809CE201F001E426EAFDA88F9C7AC36F57B06B212F03AB8FD9D9 6EB6122E968F3536977ABEF5E75AF5C9C30684D3D7833E3495F7F9BA021B5C4A1F76408F B42837E068F91D9D2FB467802873702AF6216CFE60C42B1C8F70E7555AEFAE95B6D44C9B 967E68064CEED38C09BC1A3FC447FEA9902A26B6D5FCC8A42F47AD2FB2C4DAC61AA0ABFA 58515C45C912BACA7D3D32EB79DC14A4D8DAD9EC0CF8F4F213D3E109127FB7047D2DC47C 0DA7A5B790318A1E13163DB7DA71AD64BEC58BCF31A596DC90163B1C46C9175059B27DB2 D858EB1AD055891E58C34233140240EDA5AD13695EC1FA606EC0CA9CD84293A75829B1DA 2DBB20D97F96D626D7E6D2332B664BF543849554B07ADAD02CF6DFA3BBA2D8D707810B0D 20BC441FCAD69B8D986480B1E191FF390FA02B76787CE41E3F779936A2EA8CC0167BA167 E4E08204BB8F4D0CE908AFF57F1E9CEB3F00C1B863BF65443684BA425888ECA909B2A6AC 5436D996810370BE779C30D21941A101B2EBFD4F38DE2295CA0FD39AFEFC997377EFE1EA C62A9347DE13284235061173CDBD0C97A06045EE97A193E79350B8762ADDDC2494A68628 173A30563595266EE3AEAE1179EE7CCF47A7F9A84DA4B4120FF6B12FD8784BBB674404C9 973DB36020A9A7EC459F263213846A56FB52BE79B8D1F52FD8EB086A761C665D94D01336 D5029A5C9C7D7C1234BB170E90CBCF1AF8E5F5B21CCF7C11F9F2A28384B844B1F8F1E543 393EA9DFDF15ABB11520408BA5242CE5B5AA7EDA7DD72D3D9B939AB2AA4257764929C8CF 5F6806A21D524DDBABA96FC46B942AA00F9485C1F071BC6C94E65A153045F88BACB20D69 6EC1405D8880ED1456162625EF0EDA8ED6022F4E6BCB8800A23F762EA3853E45B4ADE7AD 4620E7CB83EB1CDBD40ABA6234EBE853B3378EBD4F077AF9E12E692995EE06D45CD4CAD5 ECED7947A89DCE4A66F1B265BE66BCFAE487B41AC623ACDC6667018626CA450FA2E60512 23B86144AC9A5169C29FFBAEEB9E1D65CDEF2A5BBD29DDA5021AB9F435C459A3809A5DD3 6EDDD773C0530A1BE54910B014A6AFCC1D95E36A5C8C7D8DD1DD091D7B14E811D864B1E9 41122A7867ADB016F949DFAE0BA06FBBBCE87C833C6B244AC48A7481C54FE756C2438B00 9ABD319AF57D0F69874D274F96A12BD417E8CBA7E20FE608A73A88A935EFB77DBC198005 1CFB9CBA94E196A412C45CAA4F890DD9334611CA1D8D6F6DFC3C180180F22683BB00B8B1 0D78BF4D64DE288D2ECA95878C2BF266880E547D3826C5D1F3C6B4B0A3EF0345D8FA66C7 EC77180BB59A6CA349687F18FF5FB5B10AFDD7A440E20F55650F258A10899BD9467DE2B2 086D32150FF9242346A6546F9A1548436BEDD02049983A46A2CDB4BBA8BFA5F04D7BCD4D 35DEBB30496780236DBE224DA28218DF58037509FAAF6BE46DFE5A93C1F072F37D80FD97 33FDCA1345C468C85CF501D4EE30D36EF5FD87837DDFBD703B8F6AC4AB3DCAAD7E7C5E54 B6383A74F4533EB9FBA0BD8D1D1703590CE24FC3DA5E5BC929BB6EFAD09F02BBA5E30315 2AB1CE32A6A2F61448A765D912A8DCD8A8E0003CC2BF739F4DBDB388320D990B9F00E04E 05AD6B650435F44CA9570D878D89CE782E06C68BA9024EB887C6FA18223F587338BDA034 893624FB950E74209BBD763A9677FCDE1236B74CBCFDDBEDECB58DB1DC445BE8672ACEBB 05F0E677D133DDAD4607720462C63FD9409C29C75039A9EC34EF0BD89B3AC6045389A3E2 136C9A6D502D335789CB74B7F369A6877C01CBA68278828D17C5B7C0DA4F385FA21DD8C4 C68B9E17A35905DC4006DDD3D35186E31CFD74C26E7FDC450E6729F81FA36000E7EF2AE3 9C4D80D9A94429DBBCCFC44A7044F424E90C5D156CE1696CFA2EA4742338359287297CAA 5D616C1F7C7E7E71CE9099028D6516FFAE321143EEA343250553B3249C2937C1797ABCEB BFBBA9BDCCD5A15DFB20E3772660DBE2C410BAB6F4B1BBDC61AF96F88BF830C23564D4F8 2FE22F6B22B63D06D1B40DDD976E19C8B361239546890888FAC5E7ACB15C4762C4871DEE EF368A59B6BF8A359E29967FDC8A59E03E357D3B84843B20EAE12741CD9E2F2A3A32CFF9 1DA33E881008CC686D03A1D55651986C00F7796559D4D8825AA811EE8810B921FE485D43 1873E682B76E96ADF5A586B9C1C5A876AD507C51545009F09E2241835ABE9C6CBC76D88B 7BCA368487A11BD7654EA0B1EC5F8EFC9B587718C732037B875ABE9F5D44C82B29FEF550 B80FC0FF7AF43A6CDDAD7A3E8024A09C04CC5570C1E91B97E7829AE7402C870E5496E8F4 B12B0D9DD500DB6F8546F7C2F965387C37A701F2B43D236AFDD777537967741E88F7BEFC 9D9B3C7D6A86B1AB92919A48589CF276BB9F00DA2D7BE38F46C9E5B2365948E32A30D830 0FA8980D7D7C6ED2252D9465EFF276856698108122833A0B3E774EFDF55A69070FBC7E53 E955C4E02CA71323261353E8F5D1A4948ED41F4AD7E25585E6DFCF5553C9187632617F3F 9D2230A478E4BB63497500A3CD8AF78C780E700B14272AB399D2D2FD9979A9F422DD2B92 8CDDFEED37A40A77F93A1BFB9ED9297B2BFCBF9FD40A44D2227F4C7EEE3066F1020EA335 91BCB47A260B744919F0359E2AE3C619592C325474063675E5D85DAD5A00CC879EFE071E 68CA2CBD108FAB3849D312DDB823BBD18D7C3D61DE7A5E4AFEDB203D4056B43EE1D93CA5 0BCC10AECAA08799E0888B637B6D122EFEDF40DEF30CA93485F424928F3CD6AC66D85035 F8BEB418C560E00331294B1F57831C33F8ECBB2561837A5A0B0E5E2EA2DC3F72A1C09990 11BD2F0A0916AD62A8DBA859AE63FD73491390CDE70B0C0B7D36354BAA08BD6014B790FB 33FB26BF6C2215E16379072959ACBEC5485642A7C7ADB0B826DF3390C36C9B28E724D2A5 7F57EF0B1846B358669EDBBDA569EA1B28E9AFF2DB2A8DEFECDC073D954F3879175289ED 9F159376F3D1301EF514B47D3EDD5092C4618A80D20ED37D4EDFC8621CB7E4683AD8B2F5 51D666B8F39C0CA193BE383B0DD31BD540408314871CDEB6117ECADF8E187D1D5ACF5239 1F8B2B1C6E6F89A35022D0A2B8CE22B79B200AE116A4E9E097872CFCE5BFF8CE9DDE2E85 087649207EBEEA22E07187C24404533EEDDDA851CA5E7C18657BAB75029DED2D381CF4AD 2D5D52A310EF4B8477008C11393D74B34F0FCA4026ED3C12C71941A6D77F501A649C8823 2D9A1EA080561578DC7A1D591B8E922BA280977ACF3549A24125FBE9049C30CB9DC547E0 766EEDD5C0210C248C4E7E435C81AF15B187F84C216BD842380436BC3467225938AAC1E1 FF7CBC6E6C59BBD50767D3BCFE93564F1905AA38F1DDAE4A783E857D148289304F8DF194 CCE5CFE440CEEDDC5F3CD1E1587F67DBC41DF3CB4F08AD19178CC4B77B1DA3CA02B6F40E 36984E0439E53877225B9F8576A9A2B57286D6F759A060956CD30B6E37473CBB55D76FA0 2F4588E66305A1F40DACA56CBCD42883B960B6DE2F91DE519C80D8FBEDBE38024EC6F6FB B6FBDD5323235130771153124CB95ABDF622F737A42078D8E81C9965B7324F231A072739 5129FB30006987B2BB806D414672310FAAD37F3FD005EC54D6BD2170AAB9A21E52A9A7C8 C6AF03F51488D34B06F22D93E72FA5BF7097918FF67DEF79A6D62CB216ADB114A01CDFF7 DD387A0CC150E852D4D267187F6A6DD6B78C9E283C9D547DC6373A36F3252CC683CDE9D8 EB7221146E8C54D1A90DE57003A0CA78440EBFBF35028112B431C508298BAB97DC45875C D002FBC1E47BE8096D13D485E2604EEF44B0324B0F494D874A723D080A9A32B9668605E0 18BDA773FFFE5566DDA289972B087D9E69268B2CC04CC1F22DEA738A2248F370328C7FE6 D50DCC267BF736C8C3418626BACC805DC44F60A862413D4C76104D6AA64F813ED9766563 3236CC8EB519A9C3A2D53D20658BD68463BFBB0B97A795A78280B0C05DFA3FAA5EC6E6E2 879ED3817C5FFD07949528C3C60DC6A8F1C73B7B87975A101AD9097F694B7D3140B2EED4 52E98F073ED4648992EE76954A712C1804DE95D1C1C98048E5ED790B3269BE49C7653292 E69CB482E19611F24773F00E483B8541F7D1EF3CB9730F527FF6309EC105CDDC9BE9F9D9 4C28B3520719E5AB1EACB85BFC4CA92ECE780476DFB3BA759550A261B675ED4E1C1325C2 EAC510BCF993FA03281FFF75833EFDB168EAF8B2AB92AAB82B389E7086822363A74829F9 FA36C1703081E55EAC5E6358866EAE8BC04C37770DC97392713F110C143B7CEEFFCDD84C A6713C01B4AF3732DE935DCDC2223015E57FBF98DCC32ABA1A989176963124CD353DB3E1 8998F5F322EBB591528544A4A4E0618076FB07540DADD6D00F8B66A60ED5496CBB703E59 45EE138D7CD77C301CBF0814A7AEAC93127862431265081273C1E04B6C2B4DD0936D8F34 98B2EDBF2E2E09397169EC99FB85AF23E929F4871EB8FED7AA77B2E22AD7AE6C86F15B07 A01B8A1E3F8381CF2A7AA25FD49876DF2E0DB253DED331F7CC0A545BDFF42CACED8946D7 9661F3A340952AE1CAC541F0F6E66682A22AEE604941AAFE270C3C2AF132C9925A01B35E D770156A0AF4EF33B00DE099330D5A874F84A23621C6352DE80952305BF501442710DED6 97682CB92BFFB645C2A48C49D47F8664BFDA17F5ED7A0F64CA28A05CA58F06A9296E6BFA 858B5A728B28E12C75D947DBDF779F738D67BE839FC0D80F3DECCF255898CB916E2BCFAD 74FE85DB8AA036791DEB28487B368F14F1FC79E54D4D94074F8FB530036B09CA8C44468A A199990933422C6AAAD716F03358E8FCDE9DF706F0590037971AF1D705DCDB45085D8940 31468CB922E90E44AAABFE7DB1D6D4BD37081491EF89F46FF4F7FEE501495112CF757202 448FA93DCDA89464D7AABDDB7BEEFC9671BE5A929DE84677636F12F4BC22A59E22F57BE1 E680B67FAA2F00FB39B6FC7A48E43DDAB93FE9DD75869375A874B7CD49D22C314D617848 139D61022A79D94AE1FF9E07C7A7C3437709E09B92A8F33AEC386DD37374051F0387BBD5 F366C3EA12F5AEA0569D15B22729E006748E900A17E5D4EDD52FCF4561925C7ECEE84B3C F29BA83B03EC7ADE70040D898BD3EADCA66DF42045C795ADFCEDE3DFCDAFCC68391DF6BF C9CF4A49A45550F6301B581D19B8A8F7CD9E06BE7A3C5358D6A319188A803E8A5CBF9877 B8E53CBD98E3CF270330BE2BE853E5BEEC128633EBD5471D9E5AE1D67D28E17C752C5443 E16B6E1AE341E83ED9B6CFCE88A12A7329525C0A3BD2D8AFEF72D727B3104F12BC874446 FF1E5204DCFC9CE7F772855D63A2A8DE36D382346F8C43D7153B9BDA92AA04600267E704 E9F43F3D625EE0EE228617C7ECFF39AE97806096BD66B914A43EEF2917100C2F0E1B2554 C891D50C3A0037190C9AD8BB6563E004696DCE62881C1F6F8F05A96DDAF3F89CDBB780CF 6B7196124DC1730D05CF821CA85156F7EA996C7E3A44BE8D4EA29ECEB2E49CA7D676EA3C 874594DA4B8ED45B1568EACD8FF68963E24F2E05EAE0908D1E81165B872F3C6284181CD9 A06996A7D247A1661D65DC5558E0CBFE14724BE1D44B08A1E06D880D87905E889AEB0ECE 71E3A9037621470305B423EE63C2BCB5B227B264A4CD5CF8573D8B320004D212B65A44E9 A856A3631BA02C46868994BC9985F219C9DFCAD9591F2B76B34904DD221E7C9BD2DF06EA B632E6CA2A24699AE6C9C6B4937A8293CA61D36F3193D888D5081E4CCB837D93438602EE DB2D197BDBCD0A00534B493E250ADEBB1D79238C8F8076801EBE4A282C98750ED7BA28C5 9B903A26553E03E5B1B99A2B1D13BB6624717357E3F368B65C8B2AB2606577E45345C971 CE54702D072593814090A9EE9559DBB28B3A3F44328C33F652FF066F87F1B251EA5098F1 1E970A3505B982A023147D7D8B077E626727B1AEFF6277BB306423D55070829D73895B67 3E2E6F9A1F954B6EF69507E1BE86D6C594AE270D54C39B1645FDA847DC3D3267AC9E3190 9A509C03DBFC0A063FE9FA2BDCF21199FF1397A93F13522702B339AF7E6CD121FC2E3D4A 22132ED26FB31F2EAB17B8DA9AEFD61386EA3EBB771A43B60EFFF3CA55238BE1A0852F8E 5B78DE572FF42616F1D4A64E40C722AF8E194464F506FB9A6F52E52ECDC7D31287373EDE F46C5DEDA0CDAE20AD6C88D6315714304D8589D6A24DCD9A0491598AC69638C04A19C07D CEEC1F8325317431B3892F270779A55F293085402C4B4085268AD69995186470A2E2A106 44AEE77DBC20926ADA20F91B5BDCC0181BB34C18D1FB68A32808ACD569EA71E627FB5419 EA3228DAE56414EA93250EA395BA750C60084D2BEDF6144E970B0C5C7CF40B05EDB70452 7775F2D0A55E33BECD54B9F91807B097575929FA313EEA4B8EBA80F9499BE28AF2A3BF03 CDFA19AFB30DAC150756F90B432083DF21C79616A054384D91F913520EC45133A30C84B1 C1EFA0D1AA9B4FB33908CD93F76F6A8CD03F8714EB0E688DD3A5931BA940C68DA296B217 BB6E1BA16FCC974E3E9F45A30B47EBC5CDCC6E2FC6AFDD826A1BB6851F68BB88C2879B21 81BA06EB195D8775B8CA20B436B664BDEF465309FBFFAA48B0736069FD790DBA0047E4BE 7591F6B5849B2A1B891895EC40234269370FF1E66AF3D391300E07F7987D3B168C9F4770 9AEA1367B53613F52EEAA64D8D296396EE3B6338B8479022B19A9992964200413F29C3C9 9DDC50C2C61B92465E339B9A585CF0BD532B2F2F3B7BC3597AE2B89C686781AB7C1A2A44 A6A897F1CEB49F63DB43D9DAC45F92880661E79D2C292CF910A3E75013D4D3EE05CC1A7F 7EFF6810E89660F47D06DF62507A067B1F37A100CA620992848EF811D2B0FFE0FB8A85AF D58086E2BF8ABA3FF4435FCEFA66F460BB9919A7EF73B5FC511BB3D4C91BE3E90DDDF6B4 4A2521451B568A167D4CAA98A2BC114B77B2184D15F98943660EC92BD6D0B5D79449FAE3 089A4709F68872DCA3AC59ECC84A66EA19DB2FDFEDF7F8E57D90F6FB0E856931EE8EA3BE 8F3D692E4CBA21BFF24CC7DD3366D5F7E57A190F61502CBA9C274DEAED962E5EE3CE7B16 2E34BA08806B7358D820009CB348B10F225EA9DCB92B0C0CCA4192C3437043132CA73E96 6527062BA32227B2DA597C8E3E75436467F2D6895B5AAF1BCF55A02267E5FC21AAD0E8E7 F2459C0B6EF0C372D72F697DD46475075C4172E50405703CD18C23A6D3E7ED6F526C3EDA DC5AF40507AA9A76C86E8136CD695C955D7942553361E63FAAE9C23BF3A24F35F8F9B659 90D7A6656AE186B1C596A8E3F69748427F0C09F5641F284B674F46CF3D0E2708419C1689 F40A35DFACD95F8C6A1EE07E7AC8E9FAB58FEE8D52E81D486F5950685CD4EB36EBC16FA7 C0F420D6ADE912042CD2AA3C60B2468A59DE0A5CDAD889180BF05405064ADE97876CE977 D6F665803C8BE866AB0F1B08452A478408095AA3B8EB0FE8490AA682DD00CD3AD3592FBB 54CC977B46E3CE307E7D8EFBA586000BB17EB0F2EFD0B0EE61CE18ECD565DEE97E37CCFA 323BABB4D6354DA19CD9080C96D13A5E6AA1888B17970D7DA8D1B461822CD70CCCAB9F30 D48F924C91DE9F3243FEABDE5C3C620CD32A5AEECD6BD20EF890F1457285ECFDBBD22BA3 FAF661BA18BBC1E6EF81DAA2E2A7CBD7A058ADFF961B5A103D967C610530EB58E2D78DAA 17BEC7C9176EFE8EE633FC227BDA64E54A6533B6D56B787F5098C47824ACEECD50CF4C3F 172C3C7DAF7B6EC9FA8775C52609D08B073B784951D66C8AC33222604C634E99E99D28C8 B45846715733EB3446CDDF659D1BE4B439CF32FC2841AD3DEC81A95B20B04790A669EE4A A9B40DCB3BB6F0A68E5A2763A8CE7B72586CB6006FCB68C3EED89E54698EE5928F10F5D5 616EDBF01C349C20E99261495735C1CAFF99E2B1FC986A36552A37D7B57C1D4EF460ED45 FEF6967FAEDE8AE1B2C7AD835D31AC8160B760E7A36333B83843EE3F55BA19E2F6CD7D33 9FF0657577CA58BAFA3AC0B7302E88871974DC65218E856338C81F00E4FB35F8DCCE6208 D7F1BD45C3792D21C308A3CB7B50AFAD17EDFA027545355991E99C1EE99D85BBE5BBBCED 4E9C6334ACE88F82894B4B1F81F51DC6BBFB2621CF7ED7FAB3170A5DBF6F5E82BA316172 60223D7049D20ECFED36DD022307D5ECEC358D4A8E7DE800F7D7C048FB265C96108B6D56 EFBA19A79D37CA7DF37EA1F778B74CD5BE98A2B13BA7E69DE56365CAC9456A3C248D6828 6BBAC51CFD6D73BED3BD7A7A7B9800B63D1A94882A52F322CC329F1BD691574732DCC32A 3425E83B88EEF053240D7C7C643A7FCB0DC7B452E1AF9131CB776D450EBEAC8F282B218F D1540E4816E53C488F026A6934CD059DD5A09DB1DD8016815D066551BCFCD503CAE5FC7E 996E67351A6D681EB67D78F1174B3041096687912F43F6ABD7078C7792EC69A42ADB3F40 95F326C049344123D0F93EF2D79DA7E77875AE9110F3E87FD87AD187B566DBB723E06877 462C366B15BCBC0D244C2DA7D033E0BE800D3DEB29B295B6326AF0E5F151D50D6E1AFADA 88A3E0B990C1660004FE5B25F2BD607AC5A141ADCF984FD2EE49871B9BF5D5A1B3D96780 B4E0AEEF7B4400AFBBDA0350A1586294FCFB5EC075978ECC7F6222AFBC50C6A0CA10DBD7 8615D8128DE67FE07F2E3869900367476DA42C78AE359894BF443298166E7C935B310FF5 E1BB2FA0677A947A7ECF0A89C3FBBD60D4D8104F220360D505EFA6AB9CE111C3137F6E51 0616EA60ED8D1ADBB1B058BA22A6A76CCF8F0FBC04AAB81C6439F44D5659E937118995D9 C299BC02E354FD4E62E10AE9D2D80CCC72780909F49E6732A61B131E7AAB8EC3D7EFC725 A153D69D3204AD5F6A3AD6728C2B9E26D337E846A797A13CDB160D740D11FC38CCA2DB5D E33074C7E5601C8573641E40BCEDD6B84CA7D15C1B86F42D4EC74C2CDAF65D5E22929717 C6237AF09A0461AD9237F71C011BF36C00CC630E0C55D1B04D7D989EA011D282B77A4BC3 C54B5440557303C245FAEC70FD1945A8556B8033269E6EA1C1DAAD39CF5A1BA9F6448684 EC60E9809ED363B0134FD6F19F208FDB26A4A828EA42322550BD312044EAD339FD8DF100 0E9F64428FF8C72C51FDAE3E7A69B6D0BFC9B2664D7864163ADF48D2F3EC3629063A39E0 0B8B4DF52D2B855AC448BCFC2A3BED94D0CFC4A66FC6CB22D158C9B1FF632CE71DF9E1DB CDDCB6AD62101DD1A776CA2A111B283E25D1CFD8B5F238E0FCB2008FC1DDA4EF6CC11C85 96E38D6DC1CC624C11EFFF6DE5AD410B7773BA0C9C8B9E5F3B7C601222D810E921D55DF1 575F452CEE78BAC9E306B0801234709349F8C7D603AA39CA94E878781D5355B6A534D5CA 06B774BA53AF73D36F60705629854BB39552ED6A4508A20633D2FDE04ADC59EFB86BCC91 AABFC0BC1CC136BBD43D8934C54D3062D129F4AA3A37AAB7E870C6272D32D2E56D0F260A 75F6037AA30AE59A3A5C3417021026BA3DF9E6E55765F5B0933AECF62E28C342CE6C6687 6FE4231A5AB35F194D7029849D8169BC54B94F34DCA13AFE4F5261102648C1FF98212831 D76A892CB55AB502AAF52AD08635464A7C65AA6947F6CE69BE3C7984CD36057A31B2D8B1 935122CC567A10025B6F4E305D40B600D3147961F914DFF15C07E6971A4B58E2D8F02F4D 54F50947094617BBDC1811AF2FFD72F5376BD65059737BE960D52C9B41F2FFFD1927F3CF 750FF71292AFE92B978F1A89EDB201F71D014FBC8D2758687039EEBF1ACFAB367C555381 EA24C44F1E0EE7FAE39EBA4413FA3DE14F947FF5B3909323BD35193B6E2BEAB668B94A12 40E61DC39EFB28634214B3A46CC0E00BD66D5B2D92B14A708098207C092B45351778E984 E75DCC4AF44F9774821AE9FD16F44B733C611D708BA56895FD42150EC39E3A86E7253C70 480114E55C14AB9F448CDE802540B710B1B22C0BF0CF557FE300A2BA25A0D841084A0178 338EAE9D3DD9B19B062C76015CD0CE257D80DFDDF86C52FD7BDC4648EDF57FE1DD48C1C9 AE6A3D17FC3CA05716E302BDF2F219B52E16CA97E63ACF67D27EBEC25BED0450B057D378 9545B823DDCB91E9162D0B8BA526A918BA140A99E32287165394D51499E3CE10F75C9881 BB3E3E6734B5380623496697FF66123076CAD8648A11D710988ABE094F9A11F4645E399B 91444EF95F0317E07B38A3D6FDA2241425A175F8495D25FA347425E419A78BFC62D17F92 888986182D3DD448C236B84F46C7100EC23F321E73BF1839EF3500A0B147DA4B93CAB290 CDEA0EC5567AD07078D426A98601D292966C172EEBCF61258B805CE42DEDCBF73995B8E1 6580EE97FF610B938FCBC6D2DCC05D59E5D9F3BB90981F92C4545DEE34794CBD60FDCDFD 80449225D216246049948AF7B161D509D34F457F210116D1BDB10AFF53AEA6B51A49FB22 FDF56471F610550D3133616E184B7D06539032DD560C4B5B54859C4232781326ADDF91C0 98BFDC7B24A57BC4E69E97707CEA01F58D0E5B72919B202EB8852561D37FA219DE667986 23D6CD0535C2CD0F642238D80452DF1482B1197076EA7CCDFC3C336B0FC883DE2FABB5DD C80041A4104E575BFD65B4EED3BF9CDBDD4B83BCFC7295392850F8EB50C4D85DCF6AECB5 C88F6EA597966AC63872251EDBF270A94512187EE6483D272D50B5E4B7F4556EB9B474E3 85DC8A6152FEAB40CA34CCA515302C6FF2E66C42E731673962D2FE5320D577A67AF1B02C A3697EA85E771565B97A476E388A5DA358B8A1D30DF2EF680288F20E3F5BAF340B44B7EB 5E531E569896FDD63DA9AE424B0CC244D99A0256488922A394F2E31FAAA47D95D90BCB0E 83429ED543041F2B8635F3033122F4E114096D497F6D993541A6CD7A6747232B88A3593A 71DDC13689EBB077B3552C366A4685B48DB7E9A0102F02A1C1A31662568DD1D4D3D95D9D B2C491A04534833CA789145A6570F4B6E8FEEB77A9E9240FA9820695380C4A231D61A58E F20C07FB1CE230170387CFA28C408D3251ACE1216FF77CA0D54A35591822489C0CF393B2 4C26623EBC3A3A9C8DBCC5779A2EB09A8EE6F1EF3D97C107F9BF10252698367A16D05E84 E0B41817D06814D26FF79AA87661C7C2D5487DE11BE2E4DDD7C926834DF8532652AC8DC4 43FDD086A256005BFCD9C4D9F05D0EE9650FCA24327400BB5FD44F183227F62720787691 75AF9CF033C19D7B4D2D52FEF89DC3BA145A1CF750AC8AA71EB65FA16FCB377F0492736F 33A408D699FA3A9472D422751E333B368FAB32C05E959591C3977F0A9B94E0EAC792E1DB BC609E1315D59901672AE9A5ED9381FFB2864EDBF657D8EC8FE580409B0C8AF08892C00D DA1D2D32CB52611060BFBDADCC73B272936A150A03EC52B4AB5A196C28394154DDBB879F 627E656510322DAF03F018E917A40C6C70371658095B7A9CA96575E976DE9D2E3719BE63 33CE53FA1B970455CC734181CBDF92969555C42909B590908F43C81FBE180F043FF8EE57 965D3B28C0FEBEEB075B2DE3444B117F6836E12234670651230446DFD71133C169B9D743 1B26A1E5B251B4E7A170133FF9B403D3F345213A67C80EA3F48E12A2B564B97E5E570651 070EA250C155D9F7F50D95BF852F1A337B152A2167BBA4F2E1FD348DEA9AC2B2DB341B06 07422BAE29EFE1F7E1CC7EF9EB9C1CE879C0BC2B4D3E3BB126879C4BCC0F9219D89064CB BB943487ADAD2E7A5E6A72FAC3C2002226C24462D7CAE7ABD0687F785028CC6E3C4F1026 A994669C2320444BC35BC6CF8239FD0A4B4C663EEADF9FE60ED2E4ADD276680C5C84488E 2956D72DDD2A49BBC3367EB742CC9D69AE615CE4693636373743DE1FC06429C5D5F19E42 A6285DF5394041362F5F43F219977A7B4101E8A3EF45502DD8E702D677423271333664ED 727310F0A2F12CB90332228BDA42FF040CA6359948EBBFEA768FE2E85F344E38A48A21DB 04C8C47CFC95B14DB8ADEA6A4994A366E8D46A4A1453880390130A157DA8B5D14B250893 C3DDE306C62E466968F1EBFF0AB0224AC7F87B8746B816EC02F7FB710176EC2104662591 4D2E5083ED6DDD42EB82AE75EFCA4B4017E00B80CF11CF347CF1D9A1F43C5A7E16A47CE1 CF113A4ED121F109F763DE14B756E396C59E9412CB166FDED494706C7B9BB806387921A4 C4A1FA6556D82F252E69C479D4314252A146F14A310B0D3861FAA13FBAEDABDE8B238342 897C50E88A951A7C63670040DC49BEEC93CE42819BC79A5C974E968E523CDFF701B6A0C2 C1E00D0A2C889BC270C0A94A58B8F44AE45AE3ACF02357A1A78AFE2E09755E0E48BE6221 A06C91800234AE2E2687049E0372C8B0B2573BA6F044FB9827C1D6DD90234D91CC1BF4CC FBF14E163DA400E2BE334A4D806B3A934CB6ED7674DE6267B3BA9BF4820C4D41FF661E7D 10E0EB3F7358BAD6C01B7E1EB1DEF5996678548E589A2FB993126E55BCD6BC1BB1F0D4C8 1B1088A7688BF682E63D54F55CAF1C2EFA84B79974439C4F90B8D05DC7C300D450BFCA2C 240CE0D01156FF5EEA35C9542374BEEFFBFFB332E14526213ECF605DA61DDDE45AEED1B5 C29217566ABCD452A266C8668369B6C4871FED4D830735A947A15BF41F0210235476E83B EE843F80375DC95FD0D3D0480202033BCD2D83DEA1B0DBECB3D55EA6AFB96F5B6FC48B6A 7C1308346583BADC3B7AA668DD819F81E82747226FB67162B8F921790663FD7C0F7DBE63 BFA878DA1434AE325EC02D786FECEC94696863A3235D048E80BD57857B7F0E6B84C2067D F04AD7AF6AF06195B4FCD01D3257480979D79740D4A5EF82D2D5F6359890B1BDA818B8B7 43620F6844689B7005B608ACC102444067FC7752EE4FCCCF24321872ED9437AF8D263AB4 123213968A9801D2F9E902D540FBB430BFDE25C15A8185B42BBE510DF4E9F456286F28AD DBEA5596EBDD910C7E375DD40500995C867C2E5BF9AAF54E57E730C3C1F199E78ADEA406 8AF853A645C0DEDEC05C825DF25511FD40B0B6761547BB986AF1E878F905723580D7490D 026D2D7A49A2E553010593189A0980DFDB18122405110422806CE79E7088487F7FC5C80D 33217362356D42CCFFC9F51FC103A68A60E4CBFEEF0852C998FDF4A3CEED447A2D77A9D1 16F88B6ED092FA4D25C59E731A03ECE98247E96B055EB4176B8BA5F795E6EE92F8DB0446 540207D9FD913E00D20683128E3B99F3EFA0ABBB945606B30E0CAB0EB6B91D30EC381184 E5046DD2DAD0A4B5D3C6ECCCFF402C1BF5B42E7AC1EB818BC76B92BDE97DB485A9E4660C DC3F409129B5BD00E573E2B4DFE2E0113E288974DBF9AC6BEFE9CA8DD0F73C8443C906CC 4D21BC9ADFF2E9ACEFEF101A1087EC168EB9EDD54D55CF072F4DAADA363C28D9E2FE52EB 2A58F4BE72A494F370575246965A4C4670A7F4B47F118FE5BC17ADF7DDAA469EFD6A13D9 8A148B02700D4D374EFA01E2C6502E6BE36F2FC25CFF1D6A4695110595BD358705674162 54D33C3DDCBC891265EC7F0FC06BD7BDF70D7000328062F889C4BE68F4FAF0D2C2F5D8B5 C61C40A3134433C222071270F466D9EEFAC22119C67A9EB2F626DF8CF62F028ED74CF733 1181D642532801BFB127A1946362F2F8BC33B8651A565ABA0226943CA88FAA9F0D8CAD31 7B7D2B0B0A5D10907355FEBAA4BFC717BBC99A604178B897CC8CD98A14531E9742FDF11F 8D17D2ED67DE68CF3E2DBC0FF6A23C876F3101DF942314DF0D06160643C4096C65B90E15 4E2D0CC44AE46932068856CE3EBD03D8A74EE5BBFF74CCC54F0E1D3EB0756C29923686DA 2410B414A5CD43855C82BDAB7AE111E284FA77BACBCD412A438F59FA4006C11F4B45C502 24F939A12289F846A43E1A5EF39DED94922AF63537D12EAE8E4641D5434BFD058FBF163E 586556CB1E13D15A5487091D9BD004C556CD533A25E40F97AEFB4AFA5A2079C87701E65C 96405AF89D0D7BB41FEC6C4AE2834F99B1426B47EEA08FF81B13AD5738DCF2013E45FF93 38652EA8A36B8690ACF0997A1CC2501219AFBFCEEB79ADF018B5A55C8734924D5F6EA575 F0DE17E3BB3AB11F8930DA1A8F3CACD9A0452145BA4F00BCBF072826F1B6F1B9FFEA2736 7319B85F39FFA7EBA15305A338452211E2D011E566B2B5A822E478BE2852853A1A8D1270 C9E5E6B80959DC2C1FA70F62765CB50154AE0FAABAF9BC997BFC4C54F63D4D2B948FAA26 0ABAC11CF0677CA044B1783FB87D31B1960CB0B21024AD08580B0CD6BC4BE22BF8A144D9 88063037F1D2F17552A15D47D21CFE1B88298BC7F715555783299A9FDD4D131F1645D195 E6AC8EC0BBD1827548A0F971080AF1DC214CC3720969B735EB0858DEB89821FCBD047BEA 1F1F8B5F27C98785342D56C145D03A0469D92E932ADBF560D35D555893B0D2F795918DDB D65386906E232A3545C916A9AA57403E5244686BD99006CBDA3E93BF9A22A2F172B58147 4480A90190018CE07634573D67C93211A9577AAC8799CFE6FED8F9274D45ADA841A66CE1 EB00BB0330615CF756DDF0D6B9DA2B59480E63F0A40DC2E635EBAE9C5ED7283188B89551 96C155259DB91835ED78A3D3BF07EAF6CB3B3CF6F4C0633C764D8B76592FDE07B62D7DF6 F5D16F26EAC7DD91E4296442225A5A02A2990B222BB8A1239B38F83A807F828683935682 51A567B9F68558885FD32E58C4B22D467DC494F20A3428F68A18F0037E8CF4837FDD62D6 EA3CB73E8ECDA81132256DD09F7CDE0CDCDBA85DF239F2671E0295031A3184F7A31F5F05 A29A40534BB0E02C99089977172A469A12D331448D690EFA0E05099A960ECC3D9DCC4BE3 1447F5D77CF9F59078307213D6666E6D9567AD8A341A10C93A6EE3C726FA3A730835E134 C83E47BBFFB68A5B8ACA88414800FA1971F0B7162DF5EA90BCBDEC7B2C2916F4EB39FED7 98DCE6D49E8D36A188A18596C02FA8F8B5B1C9C67BB8BB1369EC2FE51BD0E554F52517BD 5736CB8B581C4B083F891903EEC740B3F52F404BE51F26FBB90739620719C528DC56AA6F 185DE3A0145225AAF56C7B8B510F0B6C5BCE56F69DFC3AB39C5A9A6110C54B0C014BFED6 06808B965E8B4CE61BC3CBE66BCB6AB0C53457E2EF94EAA1B05A3B9C459542579FC7FD69 043E9A4A79E6688CF835BD981FF5935E7111EC2B4FFDFE1E05825BC54C55A06D737E1BF0 5F332D6B958078B4F3BB7FB1952960F35C28AC9DE3B8A5443650A22DBD69F43F1008543F AD0ADAFE7A2D4CC1158F6DFE38D5ED78CEA0E8B742D86AF575C3DD05E07339D95A52E7D0 8F28B53F42E0EF55E488782D6DAC953C2B46C759D7AB0FD9D521B996B4F492C762250AEA 0371EDF1A6C892CC2AAE5E8CF85C9532294A7598152455F1229296BA051DD83CDC08920A E0CDCD29814EFBFCD435FB171DC21C75B6765E2FEE6EBC57941C984E05C107F0B696839C E94FF8D337BF520AB53FCA1CA456E5404EC1F05F71725E8545FE4DF3E612FC6C14403108 2EDD3E5150943EF21E845230ED91BB60C95CA91F1389F299667673221A8680DE65D12BDB 1AFB6C7BE73520179FEAB41FF62A57B14FDE16CDE460F4FEFA016A555445C78CE88DD0EE A01D49F22F4516E316BB4EB03E5C012291EA5A5314ADD2D16645075E84E50A11F7ADE384 592EA0A2AFD06BF19D2AC55F9C7EF98FFE32747DBB496FE6A61F01BBF83E0AB9CAACBBA3 3598EC42C422EE412EF1B1F1704E7E59F28C354F9F6F5B64E780EEE47370607120870DE6 2623F01C4F8A46059E4DCDF4CCF5775F157DD756D45AE5AA6BD5EB415B04559796AB1270 3CBAC585D4DE40AA03CF8DA7BA33D863EFAA0F7B990316A7351D9A533E2AB6576024DE45 176D6823F31DC55A0CC29B5BDCFEC6C75F5D11D67BDFF15D083CA9CB9DF28DF02AE258EC 5611ED8D721FE60910CA5484A9F5DF3449F85D7F9900C61F4FB43617446E5E74E1849977 0A0B686EBE371582B0F8B9D811F40D7B01296DD6D3DADFEB2FCE5DA4D93F97B38251626E D3C9350AA320EB926688474DBBA786DF88FE9BB502AC65937890DF9BF4E1F20197F3CD40 9B2F7766078FABDA9C535FE03BE36DF70FF23BA71CB322A9A18A88CE6ED79AB299A0B707 6E180B8F282CEDE8551094B7D2AD13360CDD68E0F4B8488324C0ACE44BB04EF246B02BED 49DFA83A9C5219E88FF327CC0599177FCB71819B2EF4758D1D95911FEA16A6C50ED66FC4 6B478A4DA493651F59A1F637C656AA6F8B11102EE41C33730E4BF7F400E6947A4F1E153E 2460624E874EB6BA5FDE3C2026964483783E1767F6E8AA12F646F3C47410F0040DD1207C 56F29EE16D2DD32C0FD73894A44E87E656D3582E3D615C6053E1B7B70E64279D617A958C 265B6BD1DE5F706ADF911D83972D46F929331C5BDAB2DCC47D10BA4D62D5B246F99A19F1 E884117F99304249E8A87C6E6FA5083DC0F9E97626DA3E16AE4ED909D1B7E3A911B99E7D 9808528039AB0641948F10D793A2AEBC4686BD895773F143559DCFDCD6C09D4C1630E454 0F112093F70B4C76C5D97D28E6FC8DFE2B2322E000404218CE03458E9196B95E63CD625E 61C03D7A4271A6A4AD5CB055F113D7F10C69E4F282B9D6EC5A60A901ED1EE9BAB97FD40D 33184163AA17A3F8EE9CADB38F047772FC8D39E3BFC7C9F5D0A3A277F7BB73C27516363C BB23E8B0224234F7FC63206B19687CE91EE596D7F8921A5C7FB1CB746511BC9AEF5B6B74 45CE95D7B58443C4FB4DCAB1F6819B94336058A708F936D38860AED70500373A4CC6A1CE 10F2BEF120E18CB10EF236457BD1529A5C6C2DBCBFB85F70F7DBDFCF25B9485E92C02108 88CD2DD84215188B778BF35BF1381779ECC36974BCCBBC37D7999EDB9EC98C92D7C8BB3F 798BBEBDD852E320E3540C46C0371AF1CCC1F59D9C78A92F710C28A2B9707C8567A9AAE1 1642EB8BFF1E9CE99B30A784DEAF11210C44EA275F137EBE69C197039E9D35A8E76C799A E73B0D65EE4D1FD59E0E8B32030B6B4CE02E698F7090205E7B466C985ADEADB18CBCE64E 5074D90C4764823413CDA39DC16CE421D60F485FACA831FDC4EF6204894EB5B108734F3B 48E6AF64C0BF82E71AEC055DBD588D62AB4585555FCCF3982204397FB4BB4602B313EDB0 B746734B8E6AF4FB59CA0457D45F6CA15966C3ADB050F7B83D75D43B2D54E8CF9604494B 7C712E0263E7154B31C205F51F1EFAE4FFBFCD5F522FD9E85AD6C6DEC091D7CD445F56F4 A6D087280B252E7901A34EB4BA00206E4EDFD63FBDA45A17DFB1873BF8B6E82B4FCF7AB3 CC1099EDE08FAE748854C9E468C9C8B8FFF239E366B4E8FC76048B0638F7FBB9DB80E711 91F51D4CA50ABB65E361BE32D12605B10C8ACDCF2101D66928C9D95099C296B33651B44A BF0EC9C0B7A6B686AC630264897CD3274A1E87AA8FD7182A124ACCE7CAFE4887E06A7B34 FC7DF7973AEE69B8381047E2D254375C46BEBA1730FCC6FE4D6564DA9EA963D0B7D45475 FBBB54BB12F389AE979D1F36E4FAE0EC7A1B2B7B86ECA42C85268E0953A461C8EE02C407 FC387141C52866DB49D8BFCC065FD264E5F57423E3DBDF1270D2BB7DA6A860D22722E052 3489A3A0B5F0E7E46DCBABBD89D3E4112A031B37576D35B95452B25B5CD04E18EF24FB0B 98A00B549599F3E924EBFC4FAEFCE504A1877F69375FFE7E9E7D2EE82CB2C80A87630A98 88F13C26E568F5AF98F6D30A7C3E20695AFA9B2809FD646A8334AAC86B1020FE968085A5 70ABD597C472F693F3EDCD5E88767D23293C1F64BA94029DA5921C251FBECA22F1BA47DA 142810A60CC9090E7996F3B09423D4D850C83F47B497E4C17718020B0DB9915933FD016A D32B50CD62E6E20BC09646093ED3BA9F9D0AB09F5B6B01F69CC8F706B3CC3828B7794A67 3F2C3CAD3A2EF13171C65111A9D34F0FBEA00FCD22C509FDD913C7DC144618BD743B3639 1E4694442AA86AECC639CB1A857DEBB2D5DBBAC329C4E1AE4F095EBD6259D0EDC896A818 829311503650962679D627D060C51C4A78E80BF764C7DF2121896E0B02E74B9E65CA2CD5 5A6ABA7884C961B474FD4AB32172A6E070B29FBFBB424417D6D1F89F6A8BFCC880C82C9B 7C4F23739259076A57B3BEA79878839E3C0DA5FBC47A52B81724DBD303C58B027F1F1D43 2DFE420EA7C773BC0884909AD03F7793F40878A46813EA207D855FD8D397DAE056F89394 602DCB1174532DEDAA96C5907FB020BDB735AFEF6896EB193CB16A56A3274398A20A503D B1B66729D094A21DD45E12511715FC962E0F3238630954BA513374FBCE28737B80CEF5B9 802097BA8D3BF8BF5315838C014B08D9BBF849EB92459D04D0B735E487858E333E140CDF 71A6B463EBEFF3A86A5E1AB29902A14DB4C72DD9FDECB05F2EECDCC4314A600D6724FE39 7478CFCC6478622A8441B88BBFF9AACE6FE02E7B96B09BAC4B90A65F04AA6126304339D7 E450C24922FF6F3027FB0F6AE9C19BF3C633708255E1E9F06B8245485273A72DB47FF9F5 E5AB05B1D8518691885AFB8DD3350D9305C4DB91FB120F666DEAC0AE0C64EB19106F386E E8A848CBCC9091EC8FA9004353981D5C214D920A07B439E78EF98628E1C0CF014D54F271 349676D7BB0E41418A67DB24F36B3D8953A73D18E95DA0645666B485DA0061B2D49480BD C081AE8CE6C696BB8A7224E933FAECAEA2C09551F961556F7D1314A869D1E698DC887BFD F0E57FE8459FB5B1EABC88F50FB6B3BE5B6DEED96854201D97A6A199F4C5E0929762832B E47A897217131F32718E2FE87A2A5CAF8594242C504CF3C86C73B68C09B05DC02F428941 F441110CEC6283 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Helvetica.pfa0100664000212600000240000021245007477306250015465 0ustar mikeuser%!PS-AdobeFont-1.0: Helvetica 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Helvetica) readonly def /FamilyName (Helvetica) readonly def /Weight (Regular) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -151 def /UnderlineThickness 50 def end readonly def /FontName /Helvetica def /PaintType 0 def /WMode 0 def /FontBBox {-174 -285 1001 953} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020902 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6e63352b5c33762c8e49d4354c993a76a04c246ca4dbac98ba3ad17322 cef1de206193e69453d9fcc7e398a7c49c3b93405163497a4ca8fde2ea36 6b4779e5a7bdf2b1a0a70be8a3b35a9066638559edbab5c00b30401f5c64 9bd8cfe02283d8f21905acfcedcc43814be7172380e60ad992bc3acba3f3 6e07fe7473896741b41968e0d0781c2f521c09d2c8f5080565bde4812752 3e7b7195c2b97fc3b127d3f1018f8912f858f9ece9e3924a3c32a61e1175 9097ec5f6c3148da3547878283ad6fa571b2ad41f06ae8e94cfcdde02ea6 3df9cd3140eb8892f000753a6c9b4ebc3a8fd8c7ddb608afa76f571288bb 046fc54f8429c3c57a058bfc5826931177665cbc527352ecf3b8fed5374e 8cd2708ac2a25f5b870fe60d642ba5ee186d29df668d9f7f8bae34a06449 c36d34628bc37de78a29f2e5c679adf2ec56a69a4512f5ea8d5b0af88201 431f31b90d2b1a91827fed4ee4e979ac99103cbb163a9350610ce6a43463 dd66cfa4a16c341063bbc3849c63a768b76855b8ace8b8c5e9886ebb98f7 858ddf94444a2cb3fb04968d6b4df56ac4c88d1e723671b174b84cdcf9ab 41941b639624a2c2053354195132cedbcb91e93278f8677437f751dc6ca2 1bf746f678203318f4f48b0f41344946fcdcdb3be61280c14034695d81c6 3d91835557a3327d5f53ec9545b509f8ccfed3ef691aff908a996daf16f7 8a67e1b540e4480ddc4b2caafe7c7afad26c98886d83722b908845e40e69 507ffa1d13b77eee57113433399809e13e509d2a55fe8c7a1bf1fb6cc6d8 cc573f6788ca66a55eeb6211fcfcfe92558ab73a38efffe1d6d3cb626ee8 730e89cc42a5fdceb3dd3b4cd6f01315e083a01a8ff11764e1c4c61f6289 3b17e001ec78c5f39a2b5b442a4064c43f05d9f91aeab9998d69c87e9eda d3bd5ae49686c963a8a026e3439a96d99be40570d6e0fa1c33da80a9a9b9 4411db4fb4c9ae8568058fb2728f0261a31d2e896a9d3325b02a5198cea9 94b83de6cdbd70788da30cb790e0502978f1aaee073b5c3a0b93d84365fe e276bb54960d3f3f47b848426f2ae9dff9ba0431e3388ecd15f4d2eecb3c a8e18df76402a8d7fc0185f92f775bfd4a720d62ffedb37260e8ad89041b ee2e0fc52bd926488a7ef159f76c3be4fd491d78d1f9a53640bdba55bb80 493fd66ca154a64ffa1e87ca9376bc18f963eb57ae8c6a4bf7579eac8e10 bf6c809cf54ae7772c119b88b06e588651fb7bd1826f46688b1d87bc477b c13fb3235f5122507c702542dcc4f62d5404414a8160c08d534de9b4180e e8c835b057d5953ba5c9aa76b10b2c5e45e5d0cd32fa8f6c4f3fb28af32d fcd79be50fd7aed054eeeac8f49007cce2c1b99b8ff8553520651a4bf163 e48d71ac12f418aec10a09f7b7d4672ea0701460b561c2a73c292cdbe3a6 7514a0e9fb3f684e851f2cb49abd0f653684f04ab469bda36d807425daef bf9afd80b76d7947eff835a0adb77665eed274860c3b0a75a3c717aa0595 d5ef5aa52acc70c91b876a480708b00bf4d8b3afd0a0029b0fe520dd0336 539d94fc56ddf34179d6e8899a3c1aa557285c8581754a5b551b90e4c1c4 9ed43d7052f0a82427fb83831b7089535d50f3c73b58f4bc923dde9f3b04 019ce027fcee538cee80b28068807043a687f901b1d007425224a88a3df4 d154176673803709c650c338f25e97bb4a408c9c88308f00a153bd28b7d7 315235cd9c812430674841e82261d165eb467b00b038730bea3912f7efe2 431636e19bc9cea79528792c74f9552e5ae808aa4a28dc723d86f32f815b 48128d1b5b5cf683625e67348a28cc8a656f4ca519c9e8b24e10362367db 7f06b86095774b86852471177682a91ccd93a6e856387309e24144ce3a48 b8f070742cd5e44e8010f5d4d8992632781128948a218eda8601bf9f55d2 1371e8f78898e722b9aeb36f63a6f73a85d5595103543e88290b8ab6388d 30fc2e239c60ccfcd66ceffe590e21a8c2c664ab3b30dac1755406b793aa 659341ed721e395868113a90bbbf6d40f3944f97b98a94159f180917e89c d527b9c6cc82cb79b6746e856edf0e20b212680efd0ba3a114db9840fbea 18a1a6d6e86d62b3c300190185f8462d0cda1d4c5250d0d3cda8b1329836 cc6166f221f32e8afb3b88422aa702f0cf3b9d0d97f7f1ff470801b1d150 27fab394a1cb4bc528ff77ca9ef33ff49ba380590d680c5e99d16628c239 c496145e7dd84fa5c3a7f8157a1ec78fa6eea9a9c2805f46dd32a4358889 f6ec66fa0b727fc6ae76de6d2c47a179254dcd90e4a089a51671bf1f3eca ca66a1ef9108015dc0375e1593f4704351e77a341c02b8f6f7be6323a050 f1a6b8b6ee571ec64d4e1897abfd9be6a7f0ac611ee0b7179bcf8d7465ff ce87d86a9cab3b8f86c9c968ec8c9e80aad15dd2581b1351fd5fa440f581 ec9293dbb7445b93a86d3985c0f8cc292e0bd32943a53abb3c3a0528c013 a3bf811d2afe618c6f0a941885a6d478331470d531a4d0721bd450a2f261 ca7c1a3014cd898e9a52e0545ef380958db049bf0fed1c92820ae8e8280d 6ea12ba411a0e1aee0a521c2ca1263804010595373ab55d2db23d23b849f 64770d7c956d8b0137ec269e74f41b61ffdfcb0e66d11956ef2f1d0008da bb61c597c67f9b0ff182a05745d055715aa9d15eb6a459a1b22b9e75ad0a 5d2e23697dc52c0c7dad512448901f6044d5af5c2c2e0baa8cfa9c69dff4 eef4bbd92b2ae04e3b0753e044c784073b487646ceba92d692fdb9462a2d 6fa30e7cedf6891fc807ddc7f0a78bc541c7ddc68a26e11d7a9e01c95d0f 8ed66dd9ff21b84d20bf831116b79da7991a1e999af4744799a46f92aa6b ff2e3515ee5b4ec99719639fda77aaa035608bb2f5df7fac7bf27ccaea7d 49cfc0a6cda92ae2a49fcea43a89d50973a6abbde5e9e5dac59898327d89 609a09c33a0fe5a1e72617c87b7f5af3193b75f2da55621709104bdb0ffb 772ba2561537539a0bed90db3e5ccd8845b6ba0d0ea2ecd7105e084fdf9a 698102ff472d788f18140d4066c961bf468f25aa88d5535580e1d346582c 2e711a1a32537a08edb3620c87010ea3e5636f23ede44fac4b028833908a 537b647db29985a7ba957140056f3910bd2fb11075d56be38f70239fd522 edad8ae882a59fbc9d05679d290a356a68c1f9cf39f2959ca7c6fab616f9 350eacaaaabd22f85376b3dc275c95ee5f8a4637ef450bdc79d1fd5ba0a7 803b07d54e603d88211c3185514b5f3926cd47f8cdcd18d1087777b7e20d 3890376553785adbed0451c01dcc92b888d544fd87a7b8b49f9c22f3d973 713419bc0427b9d9afab69416f518b0dc2513c42672236f80938e2a77d50 e4aaca93b86da664511506f5f945e006946bcb9ecc32f9191fbfa235e9ce 18b233ffc18303bb3b5d53c6cf79d0b2983cee21ff5d899dc641e75d13b1 59a76326ab4929679ef111d554e47beec284b9f6e0cad92c41c21ccffd62 60b15fd8a01c40f2d9572535d55b1f77c9583e05ab8fa5a38a2a7bed7c19 07ddf54a3ba9ecc476b52168f454d2980112ae3fb79b060a0d5703066324 cce8b4d344833809cbecd41de5aec7455f7d0fd0da63ba6ac3ddf9afa8d2 d9a30a750cba3ea0cdce9773caed6b58b571c930f76dd45c1f88bec8275c 139c390bc240da061cbd23085be75fe2fc405028f96371df0c55c942aca5 75db3c418126e966af3390e3fbcc3960ef5ee1a49c6b865b75ea22aae714 06cf97edbfe5cba92706c56298528f866a6ffcd97deca99e09e80c8a1c40 0700df352521c4fcbf37306d06c3c37294152f5095fde3db33575c26569c 56de8cdb881c3fb7588adfc9d69a3b6472ac8984a4fdf59d5c7d41650ebc 88f5fb5af773887c0d943bbd2f3e86d63329a076af009356deb6f20a5f54 535ab1e1fd73afb4d935b09f36a2593dfe5dd90aac7cec8eedaaf2a3fb63 0b428d28a70a3e73328fe5b93a877cf541bcb0d3b470a6886483c58f2f27 b70622c61ded4b37cc1f24c7fccd88d691afcb5144d5410293876760528e 2793036d63f360614d31556d499bf49f8cc230e5c1d2ee6567b11109e03c af962fa690d637c213c795b4db48c06bb92840a2a0a0d6262a7b24eab5af 9e96acf678d6f5ea6f4a8729ec7c3b4ec9bb0637553a35a72ec74b678823 2a43210e9fd1b38a30deef5e1a8abdd43711f1e5b7da0d48a6c441568e7a 87e955cb14bef7cb6e95fd9ed44f9bdfaf69b4ecf9265953e222c1ab7fd8 5347b79a61558bf79c3b104fedada1e893be6a01291f5811a89f3f1d593f 32085ec2a8437df5f02a16a56e811e6bcaf1cf41922a8cf8461081e67e5d cf4e440bbe8f040a96bd14a374280f60476526b26fca27cc6d88cc3da1aa 9260cef54bdc18dda1a65058a7ef09dfba0ef65308e705db3afae7127b01 9079ee85a8cabab1d382cec2720b26e80a7e0207bd48fe8067160c825977 52aede8895039580cea9a30bd8581750d8a0a612a82ef3ca876200d5fb4b ec4fe23b946a855b5ff4ec40ef01e1482cc1b43c707e25d106a585e0796c 553782053293e9ed08c4f033db388216355eb3a8b9b4b5caac95c4995de9 ca6a557359e8afac748b77f65ea74cb0a90a6257e8cce1e3329440d6c918 3d198ac01ef37396da3dca6b8566f5f83a1d60cb4423fd2c0c1afed4ebf6 09d4487ef7882666a54e68baefa240865f625827b48e8a17012f04c5a67a e11cff0e301e1706f1a7e597334150db3e2c7fab27b80643ca898baa2cfa d867604f387d866e3048847925f29eabb4e86185b2018e783522500af27e 0c2793f238d8ccad5ebb69db666a1b6cfed9be86191df340eaf1d60da476 9b34d12177830c3b5b440d25a9693ec34a75985bca28808551feb3c603fc 2a137fc9c4b0c0b8a6181de0670915c269343ec794a2848a42b476952fd2 f0515a62db20d065ca60d035e6ac70e1b1b50c997158277158abbe6e9f55 34471710b60c894d78b5eb1ceab4e63b7bb4ae81d886c94df87f396342ba 3d13d2f697474cbe515fdeebaa19393ce6696fe4cf2e7473d0240f308e20 21fd8d7c23a1a9391cad3d4bac745e5c22f0b6190c1f0c4da4a69dbc55a4 d4a7112fb4a4326e0d8d4e648e30b867f57343bda80962345fd4eff85458 c32e4835e6129bb655ce15810161b370d88f94fe686f10b11a571e461f8c 5f82c1269c4f2b311609fff4de0d61acc9283f78d982daffca899edd6493 400ea400e1e5a27461dbf91cd46c3a38fd74ca6ebe545bec02c145ec7ace 1b8a044bd7dda3b337c0e0f47eba286e4f53700663a852293c93c0a00bd1 9b5533bbd35eaf75f5ca57fe807e6626c125300357e35e1805174baccabc 7b5c3329fcbfd894d1daa7a813e3da55b009eb04b7db9f680c25ee5185e6 3c14b5af665b13ad6b151184db5fa0b27e8e5e7d95c516bdeae32dd4672f 7b3e0026dee4ed90af97200a30035e388afe6a124bbb18a47c7d73bcaafc 7ea1203a686b38bcb61b03e6de12915792c458c4274b6c0f87894c34617b 36b8eabf2d703be3824fde6b35f108fe1c1e016929d6cc8308220151cdd7 6c31b2203ed9bf9f14da73954347835ea45e16da2e1fdcd603ce76f72416 81d3eaa0c83b21850b63f7e9e9b515e6396087e2938c2c397010a1c0e5bb 406ac7f9fe68745c300ba2fb19a6031f0167b0e5b66f9cb31546f4470f8d c9a03638e2e475c09772522bdea30c9a31419de068d31edd32ddfe93c86c 3f6d53014d3134b27937c340a47a73c0c2354e464bd58bff629cfe81d098 be34f1ff36b7de1c16685b030bbf8d971be92c14023d6a5bd1cdbf2d84fa c1670551cb5eff0e3ec7ccfd77921c79f575fbe4d22e005f21bf23b5a47e 26dc09e8f755c19dbc80fde4c81a4920adde68ccae80b0fff8f6fb83df3d f60185c23f4199388c49372ddaef0f8b0eff1370c71aa18ec6958b7a8d87 aa41dddcb9b951df4004a6edc2865a7f425bb01cbf93ddcf76052e265c06 cedd988562c3c455bde331a707de151974ed3bcb3a9c7f033e87dfab3dca af09cce2e3e1fccb25920cb8d9d2875e9f6c0798f5c481e2df7d0873a4ee 0450e4c446ab053e02648c02bc5f76df8344e00502d2bee641ab53a4f503 c0405c4505b02007978417acfb86dca0d8f760e88e9f35b7a8034edf79dd fdc6b7c2ea0db349480e8efb77f865a55a0bd09d3a46d8fccd022c0fcd5c eda5ecea120ee03eabfaeb29069985f2625ea0b5b62b0d30ae17a1f0d3f7 c4732fdd42276e5d09646bb6027b5e035ebc482fed0e63f90b8df6a0097c a897827377ecfc18ace82161d314b32c01a64c1b5bdd57921e0b1cf86ed8 3f3d39bb928cb6a4b52d88cf16a59b037a447f8cc88bd98af4dd3062cd98 a870c13dbce5204eed825778a21b0731108eab28d124a8896f91e7deb2f3 a5a879bac553f3e19828bd6051c839b094587d522b4c01fc9a7870df64b0 6e1aa550d627eaefa52d9a99a47d10708ac32dd4739f3edc205fae7ad9f4 59c540822fda7925d2ad1aae225d5125a3cef2b649393e530139be17db8a 3c0b204018a70d71590c04d5f897d3731ec2e00ac1f0f5f458f50f1e0d87 10278357d8659bcc810aa010af26ac7ceb42bf31946911aed67c129bbc00 2fe537909967192bdc1bb28ae2bf8e9f267d510f55255071f54e82bea4fb e2757f29e5b94544ee3b11f2694e2f6ee90006649821307ffe0178f6e6ca 34b93ec9ef01553b8a04c95f12a5bd2dbd5e417c703c75f6b1e8b7f1dae4 b1ca2f596979827b33228be06358e0bbd5532b6340b5b757cc6849a365f9 a2170b1f000331b2debfa31b503cc24e14c1c2775eee4059767de45f966f 1a9a0e68586f0a199b13f41e57913b9f8ebb0afb645ccfcee8a7ae4e20a2 f875eb94c653b9c7a376e95d7f665952c5f84ee9e7e43707530ff446f50b 0a6e2139813ca3c7d82a4155fa494199a3bd3d684db5972947f4613909dc c901ea484544387847eb6d026ea9c907971bc8afabf24e0b4252f0f0a021 8f99633a762af271d55c03b2e10e1c58e641ceb7adce872a4c027edc6e5a c069c29dec4bda087768ec44a893a71d33e5a1fa9b6e2c7a364af6733b62 461804e4b7b7206ef286d4d709cce4e4cef441b1dab69f693c23ea48446b 6377c63ae18739c56695d0aab8907017c2471247556e5791cb51fced6df3 85eb045535e44a6acb3dcefbb8aa723296e000463fb6be1622f8fbfec1b9 7c6bdeeb14d6fb1a3c7a7d18d8e7cdecb79e20830f8ba3a96083e0747a35 8f8263a216cfd62cc563ae222154e693ba6d1a0c80d37e1e2654dbeb3db4 3a4ac3f4a017f61e0a249cbdc985277bb919f148e03e8f2d128e028617dc ccc3608e84698dce1ae9f0792ed1c554cdde8faa8b867cf49ad37132bf2b 11775929b1246264534fcec434910d8aeaa2877b58cf1ff93e9d92d8151f 6cc3022987f1d61e8dc9d091f67a9b8344279e282622fa6c76f044d1585d 6fcd93da56d732905d09b1a874789ae6c7d9188014c5b184b42ea5146e17 c191098281032f25d25382e07a033a9a0303ff19283a82e3b86f6f254d2a f6f77467c222c0c236ad058561b4e00c448f263b24f5ba553f5697ef6f02 9e650d480d21013ed909fab7bc135534b739bb55d84e02f4d625a8094864 998811ce2124971aa11b29631f202c37b45f47522bd93ad906c7ac139b7e 94419c752b920ed949e70014098b2ebbd97ca83499d5b650dea3a1a3f71c 1778ce30ce36c7aba369f97c09bb87ef99dbe36c2c69894d2e6c5bf5c1fa f8d94eace7c4017addc3d3bc7f1e5ecf6624baa632825543d0f6dad28024 4615b3e3e566569c22edf3c9b6e95ba14850e255fc0e6bcf3b98128fce22 1ab59bbcef0fff3d28b3e5715626d7af60d92fe69ebaa3d28b3d54b4e8a0 4a72b06ec93758557bb0f607a1a8884b95944683da89b73b6492164c322f 22c4bbcae2f14c00eae120665cea063d7b15889aea3a57c9aeb36438b94d 02f56194cbb7ae97487a7d1f28ce391befcd407620e2e15fa4918b8b96d0 5b446c95468a3b825ab841dac46794a3ca9cf5ce733fd08e7214fcc53be2 7ceee569efd096d163feb38165bf13ed0b7e4505203ba11ee0b17492a029 f7cfaec61194ca7db4c690e35bf32a43529a894801ef34964f03a2745d60 6bbe742dcd35e81f2acff1679f17d2f569070c62ef5cb37dc55f6d1ed1e3 81872efd28ad05efd40f3fe554cf0c9aa1e935a68070fcf58a92e5eb23ee 0a6a68f2c060aae78d1ceec87d11e6174bfac18decc57053453b53e24efc 9c26c871d9592afe1d6488fb663c9940299f921d810e01b5c76f16682d9f 027ee63010e6a47e9b891c289395d9d28375e69f9427812e31da8dd0dfdf 35813bd907d122f302ffb65c1618c7bb46f565ace83e015824a44b4139e8 9bfea5ea413a3fd8a427cdb715660cc2ddac559d4ef25a6e258e275d60bc 89e95ebd86b3b9f0a91f622e56316af95c701f92d6154a8a9b499142926d bec428b706a1178659345d36dd56eef77ce8ce6f04ddbb032cf0dda97fd7 338148492789396a4489d046c4d4a759eb481c05baebc80f28b6860b4c3b 3743aa8ab5957d00a61fc6cbb14801ba21e3621ce960b8d969b26808da97 6a5d129fe982d4b29df4c2378d0f3cfcaa1763e6439d40d345986d96b7a5 22f866554b223c1cc6a866af0bfdc51ed5bb4b6acd2ed85bb0abe160dcdd 3966740113c25f62b3bdfb59f5ff1eda6917fa9e026a5ea7b14375404680 f440d993857c706e114259f9942e3b7f33262d95e340a0329b0c87ebfa70 9765b65343f878f22da7b0a939c3a82bfdb44e558a8018093fa3e8ba66a3 2f784647b03ca1581294a0597c0ceb20e6cf526580dd4ba7c47b6867ac61 2c4a7ba39f5ecd9a12bb545f8d8535965c35c2381e5943f40d3e398329ef db527ce7627a3f2cc92f86beddd1bc9e20310e7f9a817f5eb724168adae8 a1716bc8d90adbfa735373ccf3c501c3d59900667351d9e7d3ebb447fdca c65fd5ea572ab88943380036ec60531395d3f434387771966d6f0ed7f6ed 6cb37e5426dbb71eeb10090057c013222dcced4a4196b5dd738e6120b495 151e6d60eced359b933b9f46f8e728a798a1fe401a9e37833afdb4bbaab0 7c4ff3f4ae191adff9f5db0f77d46136cb46baa942d6fb17dcae007f6136 e6ce5d077daae47e6b8fb0e3a76eff9a963e9d1ce200c54a60bd314f31da c21510ab1dd5812394b31586024d3f85ed1599fd29b9e25f66e30ebc30c6 bdf16a0034bdf46cfbc3800c3ab9e1655abb19a5849cb4888a353070e6be e601ef9f95e9d8c63bd74ce9504531a4c814827859901570f600faf4b493 c2e5d4b32c24dc191a682fbd83f2d3dbf637154f7199bae1f436e1e7e81c dec1dba0b6b4f5933379e631fa2a9d8d4f2fefbbd39715f388777224fa90 90192f172d05ba039a47474a6073888eeebda7c82b19d11a7aad4ee26a25 829f2bfe574a12c1c074d5ac151b6e331d99eeeac430924593974a3cca5c cb89ba3c73f2199f4343e6dd62baa5def296ce3177297efae96afc76fde5 4be1956bf9a8edbda1a397b8bf757f4ab6e20b19a0039def9fd70d901647 9fe9d984422d42820072b6a90a78d7fb8e83cdc4ada79f7c85035f6ac83e 492595325d2def9851ead2d9a4c9c6b46eb9bf9d20813656fbd8f2928ab2 757c331367425f83296f85483fe343d5be5d62bb6e7729c380c81de5895b f519fc93753331e300c278145349ca83a6883706888c8b1547683bb6773f 25b81e95e1b0429a0f9dc857b00835d6d270d5456dd520435e19ba59ad8a efc954b2505c13751a607026d2b3187620fab9a59d2e465ba8fcdc854635 94bae9a6899dfd15f62427531a5095f9f6f36fbb0cfa78a1198c21e044ed b5ad852cbd82c7852d7adfbd109b514b077e49ce664587d7485263a2c954 cdd88890a61442cfe2fb7bc36505512607e0859a21afadeedbab15056c2e ae8cfb0aa1c09feb388478845a8f85157b0be05aa33a3f84ceeec397f629 d259ade5c40ff0c0fa1096312b376cf769535a73f0a33a121fd898304c6e aef043a58af3db3191dfd0c105cb6f4572c5eabef855cd86093fc6ac7f36 70e6d9a4ad9cb286c8b6c075de0addcfc4dd17352573c90177c84b5726ca a65bf5d2c359c95ae34ba89b96d9dce2b6f20266f110110c60acd291b580 3e4e32d24f5e5bff00ff62a455b751e5418108a6ab7f065ed7ee9405cb29 e40cfbcf6a1f058dcdd32d50196db527fa62f247bc65d89971bb5510ad93 3420d26447974d5defd378719199f221f2160539a227a23b5d64337532ed 534fa57c501eeab82aef374fb9bfab43b20ecfdaa100be728339da3a20fb fbef4724c1082f9c7feadd361654ad20d7cfb9564f661803e8b993617095 e81316e0c30d8d0b3970868bea64122621c2ee6e6540d5a2602c826c9763 169d6ba9283c269d2e3bc90cc64db37a3e1b1fee1c119a58c91e9e8b994c b6ce8d1a64cdd91a971863113366ed45fcc8ef9b732b104cf204b5dcd232 ebe8021e7a49b60f41bf15637e8da8cd1cbc87e83cf72141385d80d5b21a d48de9a3f5b5dcaeb2cab8cb7782fb069aa69c73146316e797988a7abf3d 7d2dcc9f88d8856da7689ffa32f2c8e383d6e6aad719a820f226da6495f7 825faf2baa60eea76834c0680c7a69963c0478d72b62197bf55b5c870be7 9f5e0824afb06fee63b7643817f0ce798dc546a50791b89fbca8cec903e9 abcb6adfdb518ab186411f499b09cd8f1266a3f24f52f2cceb7984d2ac4c cf96093a54dac74d8013a50457c106e95582ec2347a9d9d534674164563a 2b8538fd37adf9362a12cd64b07de13202329b00235896c0aa65ddc25283 d80e0eea4a5ef1ba9457012e53e3bd114455acfd98828308831edf8979c2 c77291ac24180667955f7051f016b7b274aff01f7a428e0ec8362ca45f05 a9c49877475bd1510e15bd53a41931b10586abeb987f71f327c7c75cae19 d292bc1c00ad583f6c69aac1891fbebb1ea9c8089c4bc9e39f5634d5c5b8 2d78c98cfdf38f611cd65043acd4c62052cd47181c522bf2fda6b320f745 e1d1897d334faa7eb71630271d3a21942a679a4ae0b01efcec7ddec78919 5d75660a29ecc9458217ba5121cc668427ca01ee67982d602c7351acf994 a977eb9a8c85b007d1135d873233d371b22b801e4af89319f6b0ca892589 a64ec00217eaa51f7ac33a81947faeb404a78bd765a8fc8069d4d1f60d5f e92b3a0f3de38b0bade76b4668807c238b1116f234a8de901a282d95e340 a0329b0c04f4f7e997e22f3c114fdc5bb73c670a75d4877a111b6677c267 3a778b833326ce81f28e0185b6e3d153740c1bf0f07276434b5f951af7da 035024cd4abd2941b3fc26f21c4e57f094e892497c655970855ad4bbc56f 5f142c781072cfaf2d4c0c408d4e16c65f109870b77c81889061e66bc18f 51276f57b54389c5e44e2868858d97301f29a4da5415e8b04a5c5338b14c 93f707d6ed4d57dd22e480cd066d10196c7aad3f85137dd5b67f55dc5ecf 5f72bc11ec52f9475837a50dd6fb2fcbd1facc52358ff5738d65a9fe320e fa9d8e4a45dc4e3e2050cf5099081b038bb1181134cb88476e322a0b5306 76b75a9a8117975a55aa95941f1b8622a7a5d19a2d5ec34221908fc65500 c95af22ed46d0cbef0dcab7b585a6152ab51733126709ff083b86bd3791e 1829af78de86a40ed5db2e493bd318b37ab983d687adc5eec6fcdd4b4ea0 3de72c3be2882190616f793db313e081311c3cbcd12f4b5876f2245644a1 7608f7771ad5ba281f2cad5148cf54c8e0a982c457cebd2753edfcc32b21 2dd994522b1927d0085c5c787edec83c46c846131efa3541582667a78705 a3d10fade9d2a6ec2b2af1d7b2a32a7b5bd090d3b00075e00323c03ede7d ed8866c460e3b18a45d6f516078c7257f7f3e4f54a3b2186ca773f3edfae cb20d4b63c6e08d48f400b1a60291840de9f73c85460e05a9ad253cfaf5f 038ff602e7d0b63eea6da05101ea98cafc7491019dab308d0d61f9e99ab2 59d579e4186b951df74a822052701b48b81f5df1a4751a41eabb7a164458 6449375aaa6087705ea96ea798b8aa66b493f5a9cb5d15a80fb65246d93e 36a7276793d1a94f0a8c9985149d040c5e94c3207f689ebac351d14b2211 806883823f43d20d1f4c229c62e68ca7cc2af124f2b7fdd27f19e6357811 74a4160349f87d51ac76aa548825ae7576f90355dbde0e80a69ce9326bff 63a75ee33539755da7aa51cc6b2111780920029e8c9ecabe458e13aefbad ce6636876c4af1fcb51dfbf33f122ef9d7ede3a6f22ca7edb665efee2f58 970d0f8156bb2a1044b616c6a53965303798f64f0fe42b6efa32ee00b646 79e15ffea94f1b56fcb61e390d07fcaf6ce0b9de59b157353dad9ae40360 69b82b2b80fd046e86e8e63c83ba875a31dade0298fa44582e797078f964 9cf38685ad7afc361dae2ffe5dad9da0b459a2b4e61ae3649ece9f7948cd 797c93e5c3c3ac328c227df198aab93df30fb2c3c248a2eef7566792983d 762df597e1290ab84afa625a99e9db89c431519dfb2fd053b3578d3a6c52 758bba708aaa2c2d73edc1e2c201816d43a06b820a3ae3717750cb5d789b 0d4ce125e143a385d84e1032f6a220700ea7084168349fea2457831a92a9 23c79d5469bb569146d8b60af167d5df2b84dede3765250ada6cd048518c 06bec38194d7713be1054bae9861f545422077a223478fce391364ee8e9c 084003e98f6387d0c864ea8156085b18b24412acc867eca20832c2c0bdb2 b67442bd6c77f2ede38f570e2a4fb015212a4a169e4278fd6011d0003997 ae80abf325a157adc658d422e30683a75a8cacbd5e8a357f1a3a920ff163 e28abbaaecacff756d394700a3fbba70b8f82be3d305009d4a504c2eb8d9 e6f7ec6f9b1b31f1760e4cdcf1cbd94c9257e1fb4da36fc35c6463a15498 a0121d558fa53904a1934716d372fdc2296e71d56665f190e7c0bdb75c3c 98b1bb88603fa15f096501102d4fcfd4b6983aed12a6602cc243a6518e66 fc58a220893ab4a3d453b781a7b9d5c80eab6628fc1edfa53672f8b5140b 8204b229c844097952af18d3478937c2310df2d0e6e8bc4d5a4155189f5f 66491613874e3c7df0600c501bcd327dbcbf665b008967767c4e40f1efa4 bfc6ee26b25694628ac48eb4fea085b8f6e97f1b970bdda22629d82aa533 46a5a4f9147d29e2a6b596292eb123ba88f4bc6e8be80b33b2200f2e8fd5 a710e36129c633d1ab42bccba128fbe4aea452aab51a8187fff6c1fc23bb 1ab52f6f9a7b88c2c153f54e65250ad90ff1bde5c1428d62a32d7f9979be 24a6a444d0f7312567c9fcdbc6e59743fb201bef561470e58176e8211cec 734cd0d2ab2a616f6ddbaa1172a04e445a28f5cc7fb3a5a83ef43af4e29a 49d2ce41fbdfd654ed3f85637b1712ef1244bca7affe83767e8a5d9eb331 78a7ccc6f53357461eaa4f2dda2a4d7bed8aa1d064af913e1f8d064df12f 3795a089c53e49ed0830c01ee01ef5ea9a35953401d625ebb2e1b22dcd30 1b451c59fce2bc58d09fef36253755dc95ba21f63e21326dfc2a455157b1 5115a7957e0dd4b1f3677867d45e5814b4934ec70e60563bc1abb768a216 633025d70f6b46aa731deedbe7884330efb2bb6659a1753d3431939ffe93 500e917b9a044cfc448d855960c6e0e1d8afd0695b4815384efe2029d7cb 4b04f19857bf3676d63bb634a5ad86b66f4c70857ac55c77c77bd273c47f f9b0f06f47a155567102c65d305172191dcbc9a4552af17906937041dce5 d25be8f7b89e34636d2a9616c90046c37808058f869ae9c399b81268f3a0 b7f1524717063596ddf8165d2535e1feef1301df2918b68c585a1e9b1dc7 073c667208b34da04136984a7d02f1555107800466bab7715f450a171488 9f33c39de977e849c9d2efe0bcb8c9a1ab784f8916ed7b7ff35c8cf566ed 9c69baa34c2bcca1c0d92c58281eace62f86e5d658d7beb094714d79df8c 160a001e09f272b31ef41d3ce547c0215be2f0604cfb7ae13fd43f750e23 149b7d5393f0d8e38b2c18353e3c80872a0950518e4ce77c0890a1c7c8a0 e4feb31389910ea6bc604d7dd5c610ab257db7647dfb88c708e11b2263bb 5f7fb3e90bd88ea0204231e924f935a739f0f9ce056ec96dc1a22351a4df 4e72b9a46fcb41ba7a5fca25da4ee317a0a1b529cf946114715cc3bbe561 0a76a7b7af4c41dd31574ca3e5abc355c6bc55ec167370dc6ed5310a54ef bbe33611dec1ad24f491234e8e77a7caacb68bc36422593879fcdcd1eb9d f7477a180ff35156a475078ad3f55d378098cfc0ea10cbb4832fea385701 250b3fc5f2b4c6772e6a0bd00b814852bbaec182720ce4a857d91df16472 d7ab9466df49c023e733705b97d3ef7715a21145527a5ed3ffb733dee911 1ab5690aaec235e2495946bde64585a55ddf317e6e43085290592eb65a3b 6cbe4b4989f0ee44af66ad28e7d99e24e51c238a97ea4d6445370a3f1e0a e71b737130c34025aaa0791b1140e4813fae175a845e5a41d79c06cd6c81 ca885317206d366844af50f92ec64fbe64b72ce1ed0b8a34256f78a7d494 72bc48671a35ff2e1fb51fbf1d5296252654cbef3443047e5a22c3428316 f7fe5e2304f4968f93bb138464fb55a90f49a6d41742bb2a02d8c54f00c9 372e9e95ac5d7d23edf90a6cb747332fe1e3fc91864c5a409586bb852c79 c2de0dbc1f836b17b7fc7cdb15ac81815fec58feb6c6ddb63503cf2be546 0df295c9cd39d97df78a45f31bda4d3bccc2e02cd7d690d27321dc055460 88547e4108b71c84ea6dcc55f5d5122137bd1b6ee5303f59799d8ae08fba 3cdb93c7f7bff929ba9712809f85865e4e817698a462c10ec8f9f7af3cda dce2fe6d87559dc0eb9e4c86d292b1540a8e398c3715a16342d8f83c0893 478bf7be859470248a0e549467925f7f82451f711c074a9c05a17cbb38e7 7b0de7b46eb97b9dca2e2e41af4b59be795f7022406df0e3c355709d9b89 8ac6bfefe0c8624a538eefba6788a85a20b377d52d90e3e1ce94b2f16d70 e41689a9cc363b59047c128b83aebb9c640f2027278b4b3cd22551ee8c27 23de2b6eef14ca7a375e33bd22c89faf6c0830ee371c3016f19dbc35e4bc 805c8e804471ebb8954c3a90ee78c55c975c5e74a99b3f406e45ff5ee4fb 0eb9138113706bf40f13c19859791278fe2da4b5be5cff57c7a4655eec70 832f31d1cbcf72a757ee0406154c74144d8890c46af653d807644fa8ed69 e3b481b6d7c945c0ce2786971dd0edcee6ce7f6a6a89416cccc542894bfa 5fab8f7b9e6dbd695f9a1a944f17eab95c82445182150b2693b607a67e0a eab7817f18227e0bfd02ce8df34adb025acee6afc4e282d2ba520eed987e c8e700b1eb2cce2d70a82a6062b59df6b3e27c9afe46ef1f58a1f94dfcf5 77c46eca51443aed4227c29702bf810480116c42ee60caf860335141b839 f335f886db616c8fbe0477c2a6b925b9aee8fb59fbf05b8ea3e4feb31389 910ea693bf79536cfec3304c897b8a508ed3835c7c0468d1304b5a92e89a 2b817276aba0206109c889750be5bd6543be0a74bd41353fac87b0cd86a9 e34cc5ec9cd475ab067a03ea5bb53e317f174d7b18fad360cdcac5af294b 624e7a52b638db1cb123ccff6957a5ba2939559f969e9c38dba8fc3e81d5 6603eed02c24c77dbfcf038a5916c351881c627e7f67df63b1582ce201e7 c1cb8c35eb8baa0a4f08e12d71e9649540c8d3c441c699dbad877ad5a5e6 d54b33a5e73edb47a4961c5100b606a2319ce1f3fd23b068ac13e8de5e44 d23ea646e669322a81d45f48cd409ae9f48f7fdaf4b9984e6a9f496c9f4a 04a6a2639eb0b1973ac953e1f7ab95ddf37037d4245c00119b9d0de93e17 5be8cdcebe33820ea5d778e1000dbc60abb15e8b5d6c34dfb9e70f63c5d6 3aeee549cbc8761e2621cf4aa72e3c75d32bdf0c1d1d0bc81a8e289cbcfe d7027d94228dd8e1b5af666098f74a2f58a033277f604b87105c003810f1 f8fbafcbac133c6025d12e13d9de5d6aaf9efc4f8b8906c6a7e3d7177dfb e28311077da030938e6845d6aab43a1d1c7c25002dd132b412fa56f08c6d dfbf4cc6e06f7f4ec93865bf9090c752b1fc3410dbc4c8c7e91e13f6a3e7 2309a62259f21de4dc8448464270d9009fafff1565de455baaeae1a211e9 c1771fdf46d313b7cb040ad1617e1ec06077423d7886b2509c8aa0f9275d 1f3607dd9ed17813f9d20ea2dd21935e6263225c4d4b75d90719f114a6b7 b7e3e6b42ea4db97e7122ad2bb2bf6f298003d7be570670e9fcea47c4021 a78b5194183a4d1ca156a3ba769842827202faab9bada3a1c76426cb9de3 e1bd16158380257502747d6f4ca1bae30917143ad3f9c81afc9e992bb9b2 472f2fb1da0bd63ff4b8a25d1b5f32cc9ec7a4afbb516dabb825af68537f 69d224a305ec6a1f02dd9ba956aeb2e2759d04aaf0a3207ac0b79d757e6b 6f759fdb452efa0085e35a5ced6512e4293f2cfbc6a382a2b6962bf1e3c1 9f13168f37c190680b7aaec1de170eda2794d4a9a330c3e249433907c83f 794e7a08e1f3f0380dfef3b4484ce6743839ed72eee42dc4c90ca17dfe77 ef9003aaa58ae0c158940cc86c3e3c6432e9d2b27babe2862624954cea91 b7de3e98b1a1076d26db35135695ae9883f6fe04d9f6bc5a4bb935267916 18bfd2d271e9e629110f0eeab1840dbe22b4eacabf1bf5811269dc408e12 160870621950763f9cf76f3fb12d311584f470c51db5d773365df26e9123 0b19a8b1268985336f8c3bfd2caa335fb4c1f2401b8e19ee306b4ff4af7b 8e04998ced674baa9acde79e40c5d8ee9dd57456ca8dd69f8dcd51bb3ed0 ce2b41a5b4d82b66476fb91e7c2468fda2d2adcf2b5840284de597fd6a38 076489b61f03066cde17ed24c9cc71b41d4a52237e1bbc3a0d3850446866 1f391ba445b20ebf03b0adea11af504ca9f86f09e943de7c7be91c04d73c 4ab1192322259a4c5813564d1868036584ce01e642327b74b616a836f0d8 2e4b805f314fb5e71bdea38bf281c5ada8bc9ef10c4aa176b351397a5fb9 e4adf33fb52918d28cdbd187d682215c8367a919721b2847f02d996db00a 93d3f19ef4cd0fc3f01d47a992d541ed2e7e1d7f440b6140ff89443353f1 f032ff8c5cd2bc958d87c8109ab2f6b84ca99eb7c30b9adf8411f51c9172 5f4429d487e6beedcee7b7c9ceed9df9abdf3dbe0765a7728cc8e1860f9e 0a33305da679058e7aa5b8b5f2729125bc2b499cd3c1e1322df32502c83e 4681722b7745ad161af39ef2407a18c5fa931acae3c089e81bdc359417a8 16d318dc35429c7aab2c838f312906caa0056e5b12706a757275ee10b348 e8dab8fa7d935a4fd76d7a26f6181eb8559ecfa8ab64288bebfb6fe9a076 6e27987941dec9579a4b0ae74b34dd2091ddf7c5f819e430b4c42b23d133 1e935f94f2a58a4a118d44ceb6e1fe76a5574677e4e95b1f84922b0a38f0 7e41553aa746fca85b091e8d0cafac81a3bd48bfe205478fb0aa8eb48271 23efc28bd7e4bee5909755002440d25db3032bd10a47c7bbc032dbc860f4 6ddb5f4f74bf3787c6c58d2d93bedabc7c47532b4b6b33c029350b424608 43934aad1084a96092477ea49ed8caa12e08a421ea86a82e6118d555704f 65c8e7f99d2280bc552ecd04e228c48cb1be7685636ebb30209493c3651a e955a4dbfd7a064fe63c05030938c18a4be558d0bd2c85cbd66c966c4088 3b674c2f39b93aaac7e779d6b500803b6d24e724f2614a802b2f6caf3a0b c0cc1d3ccf823ca5e964c8f727f0280b64729999be78b4c2e67e0058fb9b e3f4d78ebb5913aa531899d8620b976587771627221bae170ad5a233806d 9cd136ef656484642152ea037b6e7138837b764e5c85d8c27dc13b8e42e4 5064b6095579380d432b780d10d8b91c40a435a105529b004d6084e94cc9 f4a6d9eb6bcf0ff7406589d4f6b533408f3d7332596b207b4a64593a3d79 d85a4c9ec210e508bf1b9b61d9ddfede31aec977f1a7196f19b2c65e3f5d 8032fce0b50cb70df1d8d531168ac0c6d575778b008c6ba616ab12b6fac2 9b2b3501878dba00e1db9b4befa08ac091f493076f7628dee0e6e79f86df ba8148469e14bfd584093cce2940f33790dd7c0d193d8addd2ad66756225 504e76c4301b02cd5b1089915ff34e426e865dc8ba1e647f4a8b8b04028f cc01ccfc8b196aebf46e3e212e2a453c3673833b9b5016eec4cff0893e8d 65a70c484eec8fef266e612839b8fa55315d061775c5be04878aa53d0658 c111d0cf563ce45f7749b47f16a73667e4fb2b19dc9b35c23652c13339e2 b5414505079f7c8c0c2d14c388f2bd36f17f33e86d8170665abb3653a459 360d096b4f6e0694b7d83f79c14b02f024eb530b3d4ac1b057b76db0c061 cb279625fe4e499f20c2cecd05c5b904f4260ee15367d721293a969ce1ea c32bbae09ceca9d993398cb341270db5ea0dfad46e6e1c6ab41da9250d62 f5a9489d76b8dca7269adcde517907e3f7d4542facf01fcc77a8a5123f07 e7a1fab7f124dc400bcc226b85811cd3a63070eee21ea7a46c4277b96164 4f25b47a238758c3c8bdd139d5c0f2a9c6b2cbda1e9b76488a272224dbff 59a26839140a205467265a4f59542ab14888e71ac758d62913ff2bb17d2f 27f12dba823a39f925289c5e9d01bd4f34041977da4925cf49f751833e83 30aa4c9824ccacac25ffe6eaef9a98929ea46e1effb12c70ffed1806b0f6 8ccb1416622352696fe46e703b2ae6e3afdbe2f17850034f79af308fda1f cfbcd75bf2c16a24e1f4059b764cabe2821df0d37fac8409ff3168d45304 4495d26b10a99e210c7929e22f7aa9a41732f501ee1c9fec6ac0056fe628 c2de0d43f5248cd7ca865656dd7362294f95513e54bb9bfd4f19d70fca64 4790a91e44eeefadfcc3717fba1d1247350fe9878c8600e87d7e2b66b954 a20abdada4e51b1d60c5bd585e9a487d8a5206a5fefbb513d150dc75de0b d09c2edcc29211eaf6a54c0e09d5a46ab72353c49ac81a651ff701e4d5f3 bc354be03dfa8d277a033e5c2e51f20f6fc2194b11922cc22d402c98e0be e304e300dec3a069431442196402ce82b9a393188dfc15895157fbe62aaf b6ce670f04f13d16fb82bcb6bf1ab82634ac16894e9405ea2cb2c5206144 c2af1b0b26d4522bf5898cec4be15fb0d983f4648e35877ccf7ecca006c4 9e10091fae714fdbb556f0161fc770e51fa4ecfa97edaa4843c7fc30dcb7 6b46d4f21e3e618b0811f6c3d7a6543a982d785ba59d46a448d60cfc6596 0f2557b4b87602b78552eb053f28d9fb9a1b69f76d4b7e0630e8aa813192 d5dc9c9ec510110edee354195a2563759d4633c28dd6e0b46c778f5aa3c2 8bf5eb9ebc887eeeb55d003eb6bce8d1f4026e07e5c5137cea822414d8f5 619831706a1bb33298840d0ddf9fb89c529f2da526c7e8e4e0ec42d5b1f4 058678b60d13e4dec5e11d5e8cba8e064789613024fe01f27472f27bc0d1 114894abda5591f3ba821fd9ece025170fba6649f15a4f35c4537a23437d 03de07b5f4f4f9cf0d41b55f8c189397b960e7a2f5dc169bf18475e592ce 21d12e3e3002382f6c35ef976e9cb0086b40c26f975fe985ad4a47ede500 a98180b71858eba07b4b7e6c306f51b94e7667fb28452a7f08b9f65a16b3 07d9b1a59090045318be64a1134cd9625581af37a2dd3f8d68e67b3498a8 69c494b6283459384d2c4198342367a9151764c06df1e5cf5fceeba97fbe c38c4e18b67a4e08138a57802e07bd42d3bbdf1a799b42694132ea5cf923 1489fcf04a1522be1bd6b8eadab4172c742e60641011f31b28f91be3d819 e4c308b4f4afdefc7eb5d1828145eb1c29145478a0cc13e55629609cdbfb a2df21fc7c8b32aa5cf9339d44488d58dbd6987f096b06a92175987e3417 f01ed4667b044a43195659ab29092d7eca93ad6a56a839831f1a8d110e5d 985aacd1c5d1e2bce0027947418c4108a0a488fe38a2bfcf5ca00d2bf4ad f3b16d998cef4fe5797a5ddab0aebc76b9407b0746e90bef0ac185a491f9 9496dade57880a3fcaa2bd54c959375de0d220a237e7a2236b3fd59af8e2 797bb52ca056c422d627911e85b375183ad9ed1fdbeb05d748e1e871293f 6134d36a3a836001cb6359fcba0ff7e9f895df649fe5991ba0f292d513b3 59fe3449f35686dd7583fe4bc0a3a38b77d3836bc2d6c4fccd6fed37b007 a50badb91d677cd945c368bf89784ca0dadb5d0e680c4f6709d62d02dd57 8e5e195cafb0eea94f61aeee0510d8247cff07ac1325a524d676161b9bfd cddd5646436bcc5dbac184dc5eb9aeaa3ab5a5f4068b93df1a4acfa1bac5 8282b38a92034606232363538ff48e07934d1a9f7020f29599ffdd37d67c 398e0a86676783a90194b818c87ddc44bff81966e84521fe2d1a11984ded 9e6f48cbd6a3fc154bdfac61168da24f31d5ce10b10e3ece7911768bf949 41137cef5b56a226c0904b9e996cbf597bfc505a8f1c9b0cacddc071122c 9987ef9be5cbd132bf5f7ba9cf28268854f3f8b38e0928c753df0b90029b 34e09baa559efa99d573454425bbc37114dbe926acd1c28e98c2adb2991f 86d5ee010a75c48519cea71ff18bd30e4e8185e98e9577de92090220a9f5 d84023955e68c374a108e95faec5e1cf73f2e2561a54e487b01c71ec341f 8f50259429a28f6657c76f77b697c4f4b970e03b8bba535eca15767ac0a0 359b8e939939e73f69fd0f2b7aa768fbc08bdf6f8200d6acfb223280c618 c1814f112ee02ef332a528b6009aa97e2e32b771f90915e7e09490715354 28187e282c226c192376289a94a3a6160795251cebe01d7f25a3216ea2f6 fc782b2fc88ddca735f5c240aa725cada2572e6e545ec3fbb6dc06333398 f1cf9a8952ad42f3498eacf1be5494dc0f5f3d1a7f40a6f85466ee125ae9 42e399de399abd3a58e5ebbadaea91d4bbe5162ea7bd1d773630655ca2e2 94616df435df85b1a07aa22aac9827022be28d12b608c19908567e154e20 c739c2df2eeb6071607a873dba37c81c205c134119f76d5908b9f70309db aa33d0060a6aee77ca4eee24a98fd6034452b433fc328f4d836d20fc9cbf 4d187253ec5573b7c97a3f08a7d6549b730374f5251ca0f561962dee29e1 68792177d1c36014803afe98f5b2ee9ba62f03156b605fb0b2e4b57800db b95419161ac665cf559232af0b333d31c66c09baf1d276f66161d8aab2a1 ae05ab984cea02cf5d6054c0167e7ece25aa1770af8b3549585e94245d9e d8177ee5b0a8fd4d4338259077130a31368a68f94ce1c2c89bc52bfda330 f8a2dfee311537cd8b359e536d07862d3090ac8a817e4e78de4041628652 3fa553a1f14a3f8726ce876afa8ebc2160cf00740a462e3165e756776e89 bd6ecd4419c89cab53cbb3b0723061cd74ecce2b278ec180df006f51aa6e 30336dd2e00468e2caa502da1ef2315996c89ae648625c49cdf796b24b19 8d6400697dc0c5d49640262769ede6119aa5dbc4fbbb797a555448852ec2 87783701b36fcf90ab6cf9e71a9327c9b4b3a1f6551242d7870b10013188 5db8d0b72a0220026ba6002806e4f045d589c4e179fa6980581698f78d4a 3f8af5066cfb47cdefa4c9e53ace5b0d49e53d7f03bcbcd562759cd5b472 9c20bf45a8f22fce5e07f929f53e569c077acbc2e0f515a46f8c5db01386 8b0c7ada83818aa528ca62e7a0bee16d7a70626b32f73e965543953234cf c89f1b5a8e83cfdfea7741509621e0e5c19d61116cae2027e9978b3792aa d7883c7196d3b8fdb828986367e20355f8656d4bbfb134a6028783c03aa2 23e4f408d6c1878d66de87dd9b3b44db5e82bce384c6d76d85e3f1348b2f 930c2f48e8018acec20afd8adc8c5983072f3e8520ef14d134d8bbef4067 aecc76a30b4dcffb2712bd6c55830fb36445c72158d84ea9b729f90b7363 95217bbc86587898d242ea65d543773d54e6a13b492b70b2dad02049b1b4 c3110b9aea040bdaf41759d858123593706076d62f4c40ef30576d1c22ef 0fa515a0f6aa7a8091422e993b5778959ab51e752954548c7b477dea6305 7f7e0bef389e941bcb25fbf929f490c993a8fe2c014b595d99ef6b07e7e8 f48904ccb416e871381ad306367df796a46920fed2c781b053aa53cb29c4 255c893f7749c446af6ed1fcbbc0ac9019bea7ed758c7af6c50f63a358ae 2e88531dd7ae95c1988b8717a823393e49d20f050e311c708e1cef240677 571c65c536cf1df65b5f65ccbcc5f42e14a711243233184d7d99ec034c9e 8df2c32453fed3aea9f022f9c9f436cb620a3e1de8c9a6f35977b137dc48 e1a58e7c971751647f4e53e32eb472a68fb760d84a94775cd7c0da456908 8b061078c9d52021d2dbb2825a66d141292e4c3381446188ac975063b13a ade42915510d6bdc6d2baec11cbb9eab2ecaae98e998891526675a976290 2ed27e333da798855e1644690ab45affca8482a6d3df2230f016ac74a819 037212af6f0f2b2b537d84ffc41a7763ac0d630ea157f76c76aca4dcbba1 cfa4da1516c9eb562f65c3dbc289d2150b8141c9cc3d4b6ed208f2378f2b 409f2121528d42bf271880fb46896d3ac72143df0342e3ac3d94c8e61000 6c5a8aaef35a1ac28374303a660a894063832cd5d9f739ebbd302d14f2ab 5d83ee3b127ed2f4a20f9114843cddf1932a26b699a305cf0cee48903f0d 55cfe703a81f00490427b84fcc53c9c9d4e176b50db98341c81a668fea1b ed8c6605efdf603255b5a82a6adfa8c05dee03a4050546782846c323f727 d546b3d51b38a2081910ae9d8ec1ac0ab693413b1ab7a39a2030f9d95333 c8b106de40d7271e9f373f731c04cb7c06261a544eab5c04c05207906655 0c6dc8afe03c88fe41c5c8d8b98f187fce51ab8f720bc940fb5b0df8d8c8 14e6e6198a8ff29b1efecaff3192f0f1230fcb97060b82e47dc180d7da56 10629812bc7dcfb9c6854276ff74b175d69c515920facfa00218cacb9f5b 9a26dc0342b2520ce2e0b7543b2d3c708ab9cf31c2866055737a667263fb f588994fdd75b58612e7cd0267453413203c68482afcce7039c2f6110a42 d0f70dab8a11cc3aa202ffe2dc080ce5621fb7ed2b64cca60ca676635a56 3b76610532c6a17eccc1504d783b05130fee3ea2a62bea2c2c9ceca055da 540d5ba65d139a03a1612cdc04d444a17688e6a3bafea5b21a3cc688c233 e54db628ba55be66b8828b43dfb8d3c04a1e966c840c496bd1a8b258ebe3 19879b5dbd7ff3fd8db5f952611b70efeaedd57cb6f1d58a2deddba033f1 79f99cc01dcb3b7243b35c3af640abf4b557b4cd94fb6c1dffb4ff157057 4eacb9af4d10234d235b5ff71b18e24b23f8bf2b4691251569c47ba82fc4 2606d98345fe9de6c05541c0db423e07e505c4541a5e79f614761634e7a0 c182fb17f1846579db02421cca4f7ebc264d01de723a45bc49841fd85bf4 fd518c2dc81da53359de2c02d8bed01c9e96966fa7040b8e2ff3fbc170dd 4ebcdd0afc6e68c520f715143fc098eb8aba549e3f6f6a397d8721bef66a e02ce151c932b7da39c083d8f16be65e2703e21287761a7386848e51b202 e5e75ec312cade185bd38bcf2e64ce4ac07aa3966f967f941b55c4b1e83e 5a0bd1c76c15068e008f02059a3a078cce806583bc8b543c6140db32fccf 1fb00b197af683e17fc8de6bb2f4cfc111ff2ab306bed6225a8d959a8db9 36a6fc494a583e8c3de898f09fe27e6efb85792e78e81d9ce04c5c360dd0 289ea0812eec79abaeac3fe73fbc3d072741141aec9abeb2bde1f685a20e 8e858aab2e20c4c3a286dff5061f348c9433f213535d430eb9dd7805db99 2e7befa87b9e2990a86f77bc3cf674a83896e6293cfa009027c4dda0ec56 d3f2b71c38ba12b80eb22b1182a353c398f74287577cfbb142198add8a9a 5cdb7de863a39402805d387eecad03076fd2065e66ec823dd331db59b88b 8d22292346583a8abf35d5a17affe42a605d72f8158f8033fc139f2a0ed3 991bbb486a42058776c0929d691bd08291de41fd487b964f30736ef9fcbb df6ac40dbd674d0677d907055650b89ffd72cb64c9c576c82a0a3f597c72 79955823f2b85319f0bbe566b1f3413bf0691c23637ee81ab4d1d01f3e2a 101f7dee6553ba479bc43d766b649bda2f95c6ae83be1c7b95c80e86b1d3 9482447d7a00d4bf1028c29adef25703dd7be6d75be95c712aca3fc58792 34ad61f886369cbff0da2b42a1f8aaf43e534c4a697f7a70c651b23cc30b 5439e4af1a0e1329763c8aa4be67cfca2a589236540d4e6efcb5b02f4347 fb4a293c8e354fca7569edcc7448c85d8ab30d4dd6c57bffc336624fbad2 981561a9b1bec2c1dd2f2126206c97b3510c74b95ddacbac1620bce6d681 ea7c9b12adca343f41161ce4017814d693708e5e0d63dfed6dabf467616c a0a5e304c79a8bc0ad861c6015f2c1d4e2b4e4fb6e20ee42c2d182ee0d2c 7df2c58a2742f0df05c13c1afc596133247bd842dcb653b322e3a907e458 055345f52a41a453e624c6caedf88eaada9845f7d404c8187d158b2cb434 c4562fea0f8b1d83bac813e58b129f4fb801ea3ec1722d23e892038fa9fb 0c1aa9244d915acae548b4a3ecf8c8250495083b7ada61149461f02579f1 98f06a3f2b5d841e34aef728ddf4ebee2ef0df263c05e5b2af0c287e4496 cd000671173e4864bcc2751181899569ac6af97c25d7d354f401def4cbdf 2bd4e05147adde764ce4e665f277b8ed5bb06df691c25106da3ac2f575f4 a979ff04f15d5b5da74061fec5b080c50edd09006e060ae1c66928fe2514 c19a900b2e8033280900d22d315a47e46d1ba2022e92c0fecc2b58b28f85 50336da14b9ec1673fab04bb7a522d7a22e01d85ed8f1c5608877c5f66a7 5c7691b72ad442bd66d336390c3ba5887bb4cf6be8a68a17d931762b701d 272c6d34dfba9cda6011a5d3fca24d0909f68bed66298ca76f3012d7fe83 035e3cf58e4d2c02ee805e8f243bd302a0ee32e96f7210ce246713e3ee0a 9a87144ba23380d6d2c3c21d9a40841287ae5ecf3ec31c3091ae4127b420 b2f77ac35501b9b02de5b299e002cbd37b9149d3ae62fe9428d4855c15a3 c0fa879a16c76d868baf04521e3900b8f9b2547a28efd07b9c5c65deaf3e f5dee957a1a73386c111fd580e73567e158eb81167d5f32a5bcd4591a2ff ca887a84dd507d99fcc5a94e483e9f2a1cf178340ecc9a5c32ba741275d3 ce5258fe9b3ab95ce02da49a01199c6235b9a010091125f8e8d7bcf78ed3 1f22f8b0c1d09e7a657d71eb973667cb336e9845a94471b292494d09a17b e0795042a5dc3dba966c91bf83af4632c6915f9c7e478e49439a56a3cff5 066e8e38031459e91cea5bb7c13be8072293947a4405d2c2c4ef646f149b 614171da10b8f8a5cbad8ab324c8da191867038bf6a297938a3c986ed187 221e029e2dc82e911929d203f2f86487d0adb8cec9bac14f33bf9787b118 fb8c42872c42245e23fc675e689d0c1d1f97d940b7ab1294cc34a4e8e324 be44c471f95dcdeb95b95e3e947ee09460e33db066b89de88416ba10a8a0 a1fc5a1bae2248f8483b34f00e9c6b85bafa1cb834634c0997f1aec97438 4cfaf2e4668419fb14b3f359a9639cc09881401713477f1fdbe32f94743b 7726d3cae5bc6962292eba6755e358f0ed4afbb8b91c3187a1217e049a9e 329cb59a5198605e790b45885a64e33d85e09c88adebadb5120ede63516d a86a289e93f21bdb2c570f99150d33779604967d5170b7f9d254c36d4cbc 59141aba05db9f3265c2022db5f9303574f2f32c94626d11f6b62b7b85f3 91e8805395c70028524139b697c0745e31ce1626d8f34e8c6719f08fb0b6 2e88604763ceb7371a184db1d3bde42c12b26a2295e9006734367d3f81b6 c9b878907eb65fa74350b1a4744e92fdd54bdd8c7f8448ebb184be4bcf1f 5d6d589eb96ebdbb03377bbbc099324e6e8191f1b5fffce469f496c1dee5 d0a3fda4109748f2556325d31a1ea57f8aa0728d1e8b86a279ec9c02e430 052807083fdc3d98ac58a1d852d9e9df35aaa96e4e39db16ab0b5f244cee a41878715307ed9a92c14180ed8f1cda2d49d7cd3834a2004b364eda5b72 defdccdc1d155e58bb06b521d539f602517ce8b59aa5ca83d1528d8ef5b4 33f340e30bc887eea6b08854dfc3d132b356989c61941827282be33fde4c fef275f62e72049d10ab37bb2f28ee17edff435090d48f3d6f5f5bbaca5d 64c94f53333e6f0d6d931aa4e51f41d80c85f94bd052233954805066375d b02d5e820ef3f9547f4d9aa4df99bfc3ee5f2a03e276da3bfb7599b02e5a 8130f433954520ad4db9c6a734fcdfde7ddaa72992c198acb47e3ef8bb1a a79df9cb1376903cd897c7fc4633d0e41ea45d41c5eef25a072a6d5cf9f2 91c936cf4c31e45d5de2aebe84e9e4741db698543761d52278159d1334e5 8a8c82378d0087dcc9f033e8c46284c5dbd52e64faa437ce8faae955932f cdb5e085c1ce74d5d8986c0ca538c85727c64f5644671664d0bd1dcdc256 cdddf5394011425e0543b421d079f3741b29d7d5d63aec561bd8632dc2ae d517267eb064ffcbbab2497ab9505c76eebc0e06df3134d928aab905bbfd f6830497834438b0603dbe75329259c76993aa30d1ab32b715efa6019d6a 5823e13d83cc84039a71bda609b841a68671b325b21d93e7794595eb3940 030f5cad843692e9a48bd9e78a8517c2d2cca054c8ab7b5f9bac1ae81ea6 64b499d08cf5f5f0506d98d7fb8fa79e90050ce7e1206266d574d9df322d 024d1fe001adf761f321534b4837c51e360c49b9cc86d2ffe4c4129c2d34 2ca7541ad74b262000325ae8ea5f19a7daeeffce8b0cf0e743444c3fb0b0 3f82f9914ddbcee8edba2137ef3b6f9a5c6f1908304c0764c7640d4eb479 eeee2066880a1f294dbc38c85f9917d2328a5b8bc8bba4eca790abef0a95 3334b0b4acc0adbf4c316f8621bc0d50677b474434d04c32f4903ef6e8d8 4f6cead31ee9198a3101c34fd180b33f645469fc476b3225a3534cad58e8 9c3750808f2df6a3b6681c63bc68a7423d461c3aa8c162c693b0f3a44365 680ed2387ce091d06350770ff4e1ed0e51e7964437205743e9b15edebb78 a1406013a254517f74accd7dd0849c4b1e13fac418e059dc21aeec3b6a87 c1aba088d6d51abeee72034b6f85d0641f30fc52c22e1b04c0601aec8d34 7c8ef64a4b35884ff9a965bc696b6dbfdc7bfd2ce0b605903b428f9555c3 2c0d1894596c800cf46a7c69b6bcb00df2c0a1c768fcf23a8d8efff385d9 786c6e38b44f33d37f5f16dbdfc9ee1306510cf755fd1e08fdb2118ee4c9 ca8bf07f12ae9d82fe7615e9e80d22e85eda3e4fd80cc514ef3aeec6375d e23d5ded53c65ccbed35e7b98dc0d7a0d0fef97060812c3b76dc795b545a 6255ed2789bdd3902c2b2384319f8a2604a836f2e5d93b8a042db6201056 c654765e10a134489a0fbd615142e5316a7a46afcba91b72d7440a7b0c1e ca62944d2b9154a2a94f7c3f4186951cd1dd9770add35a064cb1a64a452a c90adcd347c20026e1368974ac34e25502b86e8f9a056266bc6ab5967459 4fef75bb03e3e389dd5136d9b98070273b5c32696b00a56d1ebcaab52843 b9b33fcfed3764d1fc6054e4cade26e80d96100d0ce94e66f739bad1f701 65a8db7b3e80f8b1c1ba5834f6a278d47078d674182d56a8484860a704ee d51d8cb0496c8ff6ad380dfb03e40a51c74afa66277f76e28e63b839b802 596487705545c940d3f45918d8d6470761e12fae2cfae26db2cb3a80578d 0725a50ada28c2dc354f7c7202eb6b7808d9623645f5314f648aafd0ac97 91f9612810db4cc7a3cc34f852a6a69681ca9bd63cdbcd9ed005ae8573ab a58a1231633be4e05a2433bd698efbf2a65b411eef14b6dea21da0f29812 0b9714372ace81bfec4dc6dacf823fc5d16b1ad11527a71c30cac83a14d2 5fc06d8d22861a1230eb40c01cdaa7071e4d5d4e287fcca34a94a1afabd1 9f84c2d2dbcd5bf0025c1d1437eecb0f96547c3ab5f043057c0fe76ea088 c02bdc089775466743221e36047377959bc157302ecfb9b5f1f97252dcdd 09010a71f3070977af8fcf42640fbd3beab962c2ad2af67e91ec2b918244 a0fc9b37042ac3dbe85adfcf2fd2432c8d84e31627f15ef927092b5b168e 7806aff1e7f16107a71651ca6e3bac7c2a03cff5a98eb953c819fd283309 e9066457a4565abd422b02c70a540ed632bbc44dce3d67bb2275d8aa11b3 90e580e89cdd314e58e9e9c60e98c513566bc6a9a24e2fc5ba1e5c3148ee 12b084bbc51a59d2a64230ac6d1483416354c17a9afe884d0993e3447c92 6e204beccef285e2c6c948af218aa845835fa5e291e0893c5fa3228d1c21 8252df5465d733c3ec780562b3bb187495ddb8939d15f6c90d0656db3d08 1ce9cd78af2eea9429950e413698044f77c9ef13c77f198bdc02a828de05 c39b7fe23f2f3c2699240a90641be72fc8ae9d835be3593bd5f7c4c3cb6f 717960034befd8e909311eb2f70e263d604e53091f7b4d437eef8031b4f9 cb4b46d02ab05e21af93a45cbb505eeebd416be641070ae181b42c37aa7b a9a0b4a876c71188524e2a57e9ddbe1e561ea08c5655dff9c5932b0a7dc7 6eb9fe706a3174731f3e18adba3308a7877cef16765fe536468d99be0774 8b8c872db839881da2565c7b52237a3752731f35153f40807354eca15549 80e13b37fe19260eb8570250e4732afb80bf452437731079e8768873d2e9 c085bbb0831a1490189030f26f7d3c13ade4e2f6eeaa07e4c467ac960448 6dccfa49acea3347b325cabc42ec0df3e3a37483357cb93b0ffee1d02329 2aa121e17bc5efae9b9b9502f4a01f53f8b7b6eab16ea4b6b1c153587a0c d13c900d4bde5c027e5ffae768139cc92a327864ac8564a600869a608632 d92ed984c42a57a5898ae09747d377ec09ecd5183a2294cd0aca19be3aa7 8099c2cf8f4a4262603f7b03b0c29ac875f9cc7699f75a7153f526005c60 d3bbc0f9ec05809ddd6b66c358c0b1fab012624b8304f32c58d972d7812d 52a2a7597e7f190e5a7d032dd6d56847ebf5fddc64058e1c9ffab52a1396 53345e17eb873b37ddf061081970fbcacb7c01aa43db9366082e9a648213 f43bea641e049a6b6af7d46b87457d609d61f9bd3ae181aee3110714e6e3 20493350028443c6ea1cb16d65e7c0fb55d32a834fb0a6aa76d96a8adb5f 0c7ecbcd068aba3b0fee750f3029636ef8178f4b72de071deb3977a5138a 7857a8fa4f8178b028ca1bc3ee3c7e7d61ff0dd680cf52d4deec45e393c9 c7c194e8b486132e7bf1959054040a623173142584bdb14fd652bee4a61e 231e134a377e1630b7c0e7ee7b356d3feec817fec4223e98af4f23c320da 55abd77c30fb52a523a6a4386b729487772b91be948b7a9bf6f40c9e7166 50bc1652def7ff216936eecbd42d8242216ec4de7cd329d7bb7abb901980 0eb8b8794729d6e16bad6d330b7f177bebbc9e01aa7172a8619d0e5e38a9 9768bee2b9bf40c06e4b576f7018fe55001995fa1c455527bba950e56a32 f6d43ab0849676fb42090301d5dd7b08d2ead9557bb5aba35866ff5971aa c3732655119a0fc4a9cd66ca7b7628e42f871487639f824d078207dd9274 09f004770f8eeb2a4d518df5fe96dbbb62dcb6b959d8c4074302d6349ced fbcf948badba1d3640104c87151eec9cb0cddef9b7ee29f4447fd8a650cd 01c39455001959fdff6393cd856d677ec8a7d178021a83fe7379a26742fc f785c89400082e1a90ee8b0bd2f05184edccb53c9e116ec930bf19d9e6fe 6a1ff37bbf5995ef30e9d1ca1dd6613f3a11f0c695271cebd24a39998b88 ed8dce0d2ebd4bb3547875ba4fa093711c5b1f067415d890fe59d5a3ad27 47ea32feb41c61f68e48d84b6cffe2b822d924e67b10f1797a4686b2825f feeeb7dbb85d7e44648873d6574f16c94a8e88b302d06e122bf867aa0b45 8d8ef48241a7cbc311377b79df55e6239a2ce7a9e7870c3eecc6c3ecf5cf 2b9ca927fc26adc1cec5d58584c5009cabc214a38916eea2117010dfc2b9 e1ef7d6ff00055856cc101efe24d681e77b455a27daae1432a12d1737692 5238b03e88e5d1f0aa19ffe6a24d5936aaa0ceb6dffe706f381a678e3671 780d36f466c4fa8087a3f48ddee39a65d2bb4c0fa7806dac99019983f77a cb275c5ff17a31248cc758c4421b138d2c3c97604ed301ad3fa9e2b8a331 f63af2564f3accd5cdfc4d3bc589e6c7bc7efc3d08c997fa9ef75b3c1a36 c9996ff54625d053633ea3e5c280a856dfe7a08412672f0630a62215866c ac778f783ed6c2207b1a42957743e7a36bf710d4a3e5063e53d924e9b956 8268fc30291310a5f55bc7720d36f2a22949ed6fa9fcdc3b2705a3778efb 7a36e412259e600b50ad959ac17d56608d6dfbd6b95a754d7fd5dbc8c6f6 c7dbc76a1cf29ababaff2f552514c3b4469cd9579a46993d1b3ecad53f65 c87d50d5cf3349956e8339e6db0380a0d9c1f71f5a151a470b07ae878173 2ea4885d312918a74d845cd18fabecf6253efee2ecc1a32b5445ed77fb2f 988f6746fbeb25bbbed163ea44e5cd04a3c7d1544cf4180dbf44086a3e5f 53a3ac71d602c057e9211d25c72df37468734ea3601b7c46c4bf02f072eb dc7b910bbbaba8f054c76718d27c552116dad8d2600635ba3d06d36d51f9 14d0ce9ae6ff6b996ff3beee3b055ef04433a2ea56275ea837301e9fed3c f0f6fbfbd7f91b57f85e478bcfe2664689bd1d5647a800da919e7007e51e 1835d90ed1d61247b1cf7324523aa303c8f431dd2ab474cf25a4ca908f56 d9f7ed759091062e71fa43a78ee87c25912b457cc4714ca5550b3af9f3b9 64d42cc8fe83c44f18ad055b4b6f66cca3953d43041350ed2c21f91f2346 5811fc711ce078d41306ecc77a5c3c9733c6d411422f02a1cd89f68d9133 1dad76711cdf52d9b62d4402f1a1e00f9ca340771430ef54a552ed206d69 ca42b79e52fa5730e478369e2fc808e59923d8fda9f61a5958210bfed7d6 257972e7529c8f15c4012fc28f2dd6b41e82eec7d8058a8391681960a454 2d441cb3aad0f242a8222c0e1fd847b1f28b3656bbc27e8404b47be4c2ad cec63006ddbae4a2c5b5d41d5e030efd88cc25282c047fc17d57a7083b95 eca77e9bc8572a476a1f590b805b3451264dd2cd5383a692ff48c14214fa 0964296d9cb116eeaae9dfca13b805f2bbe2c514d534805f82c1913e85b9 56a767159d859873601d0929cd3a04ba71e2060f7c1678e8a9ae449e935b 87bbb8ce4c01d77e0d15c3aa077d9819ac9541c43d3d9de27c6bb865f26c d0a5df8e87c92f66d8bcbda93b686df81814becb271f443f52fc2e68efab 50a684882f5afae74a012d2b0a4308312ebc6a9c9961642f53950e90cda1 025629c570eb511980b35c5626c1afc340b99fed406397edffeede32f7ab ec18249710c2d8e3e19aa0d75663af5c1737c8f35e85d8ba7fdf02a64d6a 051ff8645d91dab1a702c956b528e0d6d92c89bc5581ee6bb37567230ae0 d758317f663fb4777d461e98a19733a1d3c84ec1c9c7fed03cc06bef0b8a 068df44516d0a67ed197c8247f8fa179d21dd141349c6407ed42ff1f3331 bb54a311b59c93306309dc2964a3512ac01ed165989a4b741025c3c204e7 b135a18842e2ebb4f64cf663c8e317762abe99b890ebc31a1e861cedefb4 941acb644236bf373b113d4b375dda563e29d337034afd0232f0b4fc8051 30240cb61f56f656beb237decd9db5aac74301f131562750b540cc4b7aa6 014545cb853872550ea042ca81f50cfa251a8abc77898105c6ef100c8409 5fafd21e5148772f59b5217f9adf3c5fdca18bda91f62fac2f2e1f29efd2 5a781858c35d0e9f189b877d05d8a63763ce0c8039ca08b4c73f27a66844 2f5d0d6c567f9d5b1552a15c450e5188f70e33bddef0d200200811c7813e afb9adfd82f5cf85f83cc2bef6cb0197a1e7dda4bcfa2e9261a3259f2c14 f26e660b174b31e4ae8f42753d752a8fdd00cdeb3a3e8888247738a6f77f 8a2ed42ca19bfe67f488d893c732f219ac1c2eed44e5b4e3ce5e613fcb8e 78965e9cd3c538264711bd8fc39d5badb6df7e01199e9e3837dc31684876 4022b85c36411bab3d727c55498883702f5e6b297938532d0b00c89c6f11 7b24de43ee3ea05db5906c0c7d69334e001aa2e759e34aa7bbabde81fad7 7c3031b5b962b23ac69df53dd7c2c3023f841c17027bb6ede68db4af1dd1 c238e1c85f57fa15a789be3e24ea2ebfdf6c13659047719208856c0445c4 2db3c05da75f8314d42807022b2394c490a3a0b246430c6d70ed9e610290 5bd7597e9c864932463bbfc33829a718741d4bf6de8cf93903639c20343a 5fcaf8205a66d959be1f393a1b90c2eaef3ff20f67ebe3139beb5c22a820 5e9eb638fde23c37d8591a4a66eb2a6c857c5a1ef90f06fb79476193532f 64ad5aee17551d5f34bbf75e18d247333ff6f0b5d0cc0d104792d2a649e6 2df913b1c21cd6909cd9033a451187a0db7e3c97192ce65d065a558de76e 4dbc987d92cc492ab791f0ab6532c7f145f93066c26715a15b4d06ed756f 17f67353343062ea0928d08d2c11f769c388302d0006431bbf8a26fed49d e9061b28bfb040f7f20c7182600ad8460015e69655c05cfd6af705748bef 834e4dfce6f88e9ac4a672bd63c70e515d003220b07a30e00e5303823a2f df86aa30b8c1f7e15588f3acc1f50258941de4cf698b42e83c37f828d4d7 c4f05aebf41e8db6f73d1905768cc48ed0ca59049bd1fbe46da687500952 2803de1396ec0df8de561e1f3db2f3601da2f90d471951b39244762e4b66 fed7d4713dfe41a030baed3fd785b856fea6b1b5ab85f55694b88b4fd731 cea43545398b9eae1d758c352e87f532b174fb75a1ae1e5ca5d5f9334cc4 704d3163f32bccffb0f50e04cba9a291123a276f3483ab906cabc9e43de1 f62eec04fab3de409883649fa1ba3560c65ddaf0845a1d5ae96337ad96bd 646d8cfae4f9d4b7b837066e6216f94af81469caf8c22cac2bdd7bd9b5c9 4cc471ebca2ba990fad7f27e03b09fbe86fbe3cfabf46b5acd59dfb43616 8f4b4e2dca9ef957a67ec986438acd7e0aa10ce66abd32c98869299dba45 21dfe90a8a77d48d0d8e436956c3c8ba3f73b4725f7577b7bd24e78b6e33 4cb83b4056c19917d5450d60727ea7859efe6a496e7c77173a0c60960c69 9d4b7b99e5254a83db00c3b8c208149b8000cf30bd45eb7df7c831fd3ad2 355eefdcdd7bbb620054a355763a43eefa17e07dc6069d5607c0e5a05259 86d54ae9be6cb379cd841114734a51094f9b45ba6aa67a7b5a97b7bf7822 6c6a35381b50459739f304b7337601c45a1068b069053aaa6c3d98420217 a532636507cdc7171dbbf04f1832503025a84d10cf5ee66ec187eca1cce4 52988d631f0f21266e707f08901016165d685c4576670dc21a0f081675af 772fdd46b123f82343ae5b65ae45189fb9c524649050b3568489524ad834 d455440b264bbfb98ff1835474cdd933b3cfff87d8cbb2b049b0529fc098 ab6ad5d1edadff218775dbcde8b8af0b3dc20b64f93ff369928c40b862ad 44ef9a4227f3f1383f9d2ae6ea55cdb0a24e50aff0f2d0cb76a6fc595800 3880d06ac7e5e797f9d1fd994dfe84621afb07a59dc11cc91b95b5d3f79f 2e50badc8626774a1ddb4ca3e829e52c204c4bcf99dd85b8b5edead25012 14b979ba3579beb05145729ef9d7869fc4b3d8b12920d5129fa28a435429 6ed7b1e4cf1ef3ae947a59fc1fdbb53735349f8566d01f82e79dfa0f9098 3f6cbfe244b1a9c083d0ded2421ecc1de0ecc3c537b07a34a7f1a5291de9 bebbea42e2f682008b7088129e463cc5ecb5bbea8d5b1de8722094469072 0bf96ad6230dc70843a1bf150e373526cf5509daf3ea7c3d7a340af5d429 dc18fdb34e8c12e44b434d2fe6633c7e51d038f8e5655a5360b85b9d380c 9d8d42576a9c1694a66068ce664bcc5e9ec48fb507a3117af1c2a1619b0d d82044b3c4e84c6f75e40709dc144a508a411c2d9fd1c4554a60892bb900 13abb16189e48cf1d3c945c8b5ca4b6c6ee74033d6b89da0e22cf26ba948 a8c26092095bd4a00f66e1ccd02241926fe2aecd146589dbc317a5a77974 459a7878467ae95f3caa463bac0433f63a578b0462a12818a104c57a4fb2 c2ca4e89f6b47b872bfa7805a560aeab1785f30e83a4ab725139581020c8 1006c70ae4d0fa117d084da7e7b665ac7cd4be949b3701dd8b387310a84a 2a7c613cb44d2c8418698b53cc5fe91bd67a1933379c99096b5389b98dda 244c4e0bb776fe6127978aba6652bbdbc6b4c8c481eb8fdfb9d832a97058 0686bcb7e97a1f3e9e98b047eacec37bc8107851721ff9a83f9e2f9e6231 e26c986c6f4acd7766a6e3ab20fee269686b59da69434f1b47ccbecbadab 81700692c56e8bcc052336c05100210b5a2f7e6afa2c8dc4b68512901642 60025777a493f5de7ae54d3ed76bccb0084003ebb5456470b956cae5b499 ae586bcf2a07805ab9de77361af5fb448fb8bbd7d71cf1b04830be438277 0d41a99e5e09087a8964242f91bfae5ff439ef53194c5d39801af0219b69 e2665010d9282fc6898a8f5cb188ee9f280fc6ba6266e740c5714f813687 df54ed7a0ed25658ef9dafeca9583ac9deff89f7c38ab450b50ecf174eaa 0450f1a4c66d0dd81b8f1b7dd7d528edcaa28cdb10be51c52c619fadeff3 f79d9f49fb585eb5180250da390dcefa8f16e284eae4c9d9a236b2c0bb33 6e2450bd777ae71105ad93923eb023bd420224a3a16efe0664332a9f5d04 7cafdd088201724236341b14d18a288be5b241a8a43d693ef5166006448d ba7aa5b899dc7657a2f8633c2c41cca9f5639998c9b0b5c6d7b277f9814f 69a0b8f7bf674bb2b3127093370e949be71afe30d1501bf77d36251c09b4 0a202c8d6b5f1991dbfbe763e060dddabdf6a577c2d688abff78d86334c0 ecc06d6db669c548f3280f565085aa4cfa095e3867c6fdbc6d04fa93bb79 5dff4a163574ee72f2ffd8fdc50e0b10b3718b17b16924cf7d8d32e17513 1c8cc487f77a0e8c9c7f9d5af3970b6373cfad5a5e58d4a692a43bbad654 bc61749d98197cfbba934464bc78a7fee62f8c3563048741237adb773509 2387c9ae73740494ed79f500c87473766d4c66357d7c78e1ccc5b1dd0319 aa66c7b90e2e5c1c248820861ed537d790953a9c0bb32914b01922f1ce75 75c467b37870cb666228e4020f98c83a6b944ea0d02f49581f684c354766 312d7af339d4f8a759ed0cfc9156737f206dac70ab43554f6c117aae98e4 c4c8677be28751048e8639c4534eab383b75947c59f6c61aad10102f2a9d 07b7f8fa40cf8c06678fb8c44a213391cd76daf82db61b2363d5160ae345 b2f5dbd0ca96693ad1d665f297ef9625e51d58adea3901a0c2646d3f2500 142328313810bc781cf1d1dc74c51ef2ea576d26aa298982dabf5371e17b e855657ba15a190746e586b04c7a1e60df896dd8dc77b6cd1dc2bda2225b ab8d54b53ea4b01c137b210b8ac02ffa4d5a5b1d1f95ba2ee024ee177280 c205006f53bd35495c9bb514649e1b48edcb3e27c3ae04f4ef8b812f1363 7be64e135574133fc2c425ddeb38261021ddbcde9372159f4d6319c31ada d4dcbc5928ae68403ac7d2ebfdde7cbfdf902773e99f895ae1542df9bae5 9aea78ebe1aa43fcde9ff229659e9dbeafab71146f12ff7a179242a31b69 b4d82ec763a9796e96753aa8b9d40f63043196baa257046e135fb2ffaffd b60d010de43bb22068f6afe4c3bbef8b6d13442c8454c0d65be93a5311dc fef607241215863be2028af6ecb356174bfde7324a3c9d80c97117cdb114 d1edfb8a385b3789e7cfb7415095b6da2469feed53bfc55412a2ef07006f e11efff0debe1566068240fe1e66bc2ea738e7b72ffa08d9637d4194cc4b 5def328e9065b57c33db6887fc28162203220cd4691b8e8cdc26869c49ef 341a71b41dd851e0a7e72556bbffccabc4961f60bce2159ecbf12ec4e3a3 5142bbb29c6c6d58b2c644dab026162afed9e2bc932c639c9adc7cbfb3dd 151f2a3897460776a4641cd4ca5035fc45a06df4574b901ff5483d0872cb b7bbce4d194602a27d387b40b30b6abc72c79d27eb369baea999f2204051 4a23b3fcfe863992efbb0f88289d66edd30965d9272c6cf0d17d1b1b160c bb3ecd1dab7fc8fb30ae318882e1f3d841a9ad8d658477748cfe367c1eb8 4d41e053487faebc18b2a1a197cf48e8110f6e5bc0be80654c7f14cb0268 b5d4f0c57ec1bd3ba6364c70fd444f3630252784f5fe400a3c6047102f65 c5498ad667b95e254ebdb0bf646d4699c13dbc2eb4488ed4e08b772cbf1d ae7951a819382b712fb33bfc34138d10b15007fe29af414274bcc2845dda aaae68688015c14180c34498685d5b1ee31660b7621912b12d88fc56f39d cfb3eb5edd8f4c1f64a008d4b9cf48dce4b6501680f708d60909cb182950 89b0b00cf59bb68ca7aeece26b1c165e727bde0ec2155fb7f3c1b6d646c7 5122866e9c79539574c2c49e5f04a46017a2990d884668c16e574186ee44 f4fc339ea2f01088f3ed31a4d45320bd10d9cf58c71e8da3d4475177bd05 6e235d5235687154966d8b42878fa12891da91ab87761a7c070ea75140e0 39cd8be41db34439d1075c8d3a7990f9fac556c05b0607a72d142c844baa 0d2ef732fad381d2e461c8b1d3e85580bad0c250814f5524dcf338faea1a 7c61c3a618f1ae94891a2a2f503a21b3f0146e17951788984930439178cc ca593383baa44a210395eba85e6d28c23782f1c651a8e8b4d780b70dcb4e aade26d63de317c10ac18b9323ee4c860fe6f658221925b471556907209e 8194aff8994d630874b8f8016952e97b27fcaa4e755126c315c28e790256 1d29c2a7f586daf4786702c617652f6e6ec6778ab5d04d8e491e06601360 b872fa2bc122edf66c1809376eeb4bcd1785d1698514054af553059ed601 ffae052351e9fe3a456a2ca12e7dd1a7f2032a35484cbe0aa4a832af7b9b 6afd4dbb809667fa73f91f6972f8cf4897bbbb76a0b0610571168011875b 792188b76efe6e6bf2736c4c8f74563684a5a83439c11e0894349ccdfba8 5a97c45aa1d989464ba21ce0522b8b72fac4a566da2e02936511f2c5c11a 3a9a52e07c891d3e94d3ed4bbd1b5eb3f168e3025eeb8de03ed1ab3d8039 7076b210d9f9f214f8ba23d135d49f713d4be58b0167187d3c6b095dcc7c 92fc14f2ca250831ee9ea64ac7d4aeb4f4cef1c016142c1a8b337ae2f456 d5a193f2fd3f463ca4ab3bf2c3269630c1bc59c9aac028a72185bf11eec0 a07678627bb20c2b39ad55a2f7900a3e254857626229028abc08fb27fe2a 21f972050bf291c2c9e8579dc3d7e79c310ee72b4a8c61f55d8f9553e91d 610622acc8bcf821f943e7de0bbf8ef47e81d00ebddcd920372be4610de3 70b4d63b780018ddb4c800881823ba11feff2fea80235decb3f2125ec6e9 4178cc13dd87be8c93576589d52aa14a214fb4e8473b429b0d4073a563c4 a7d973ff363e3c7c0a7569d4672518912fa8ad9864b8abdc8ac9157b31f3 f36bdda10928096123fdd8c1e2bd1d4b5ed29c1a4619256aebba78286cdf 4795b8c11d95df2b43c2481c238803c403c3c99106c025372ecebdd1dc77 267e77e31a2b0da083297722a857773a27d03563d01c1ffe63190d6327f1 5f47263524458bfc060a84dfe01a230ac67f142405ed713b353dcf880581 bfd03f67e73bc1721ebbbd7b9a8165984cc9b976e3015f7200110c76448d 2c08db670ac34b78ad8e7971ae5ba8c72b021754e2ff06bd607e45b00546 988e3f38b33de9a46ac97110d0e32e6fa56668a67f40ed847796eb4b78b9 0314af9588dfe80da237a115049d048e55498c2df7fe31322d1e8d137d0c 9321438ac4c8ebe7cdff6953d18ad1c25733d40351169ee2225fcd225ab1 fc04d7eecc3ae6eed044c6237e9d887a1919dc94978eaa3a1eaccb460766 4fd128d58f48cf49d33ebfcac7bd30c4ad146d643432f79aad54aab62912 13608598880a0cd15576902c689c535a46609d605d38a64d80bb00f48c51 a60717f5f5ddd29ffdd50b10562ca672656fe370b96c607dc4975973f92c 358382b94c2a048b6336a8210c6875575c08e20c023ff3a5c127104eab17 06e3277fcfcfe806cef23f8e4c0f56b1919958a2df069a0152ad570c0ef8 f0e385745134156e38ac656ecfa161989366cdd33841178263500eff95e2 09ee4159cac186357f1b3c30884f4ed00308a8360663d20bf5853e5d9a59 0f38a00d98d7e28e208f3402d4a0c4ea38b01483aa42d90d1055f06d2ce7 f43098de1ad9c96695fe503195dadf0c97f46189bd59fc693b023a14c3e0 88a5415f32190dd9ae469b88d395150ec2d0581280bf1d9b6d5a3669931b 52d885a070eab23f41804fad5fddec32d6d7c59c4c1f7f0883e090666cb0 16da80c3abfa6249023e41457f982c5301951fcc8f81e53080a2a9f129bc d18e80b216c27327dff85ac5d744b5b0617ad70fe882b9ebc97967cdbdae 1eae9f1f010e21f3a064d972889d2ab95a3cb6dda5b920fb2108c199d58b 3cef6b95fe5a249b59fa501b63f75a326c4090c4de67a1c63b0eb5448936 17d939882140ff706e752ee3a9de5c7608a178f2c705ef344211929cc54a 159416e4b14f338b45f43aecfaa200f1df911ce57f8935def66a649bdcc5 a439cd98953f67c1e4384b8d9b8ef829c974a776aa03281b9052c590bb20 4c96be48259149c8f67755eba2f10a97cad710a0336fc6ab608a5cd34a9f eff4dfdb4ddf2e046e7c7b35863b3b931661901bf26c870f3a68489dedef 1d341dd9badc6b61256183330f210b8b0fed4a394077afcccd82cfc233c6 0f9769395162d0390639f319516ce2b8d1f276cf4f99926a872b0f1b73ea bff619c9b3f7959be89a43d3f0d6d9ac1da4fb0f49de66f006a7c349b00a dd768436f78e9bc1d2221ed4173f07b928f96e451344bcec1f7bbab481d0 5c69088a0ea1dbe8b6a27d082f1b878761c68a1fabb26a217314c72e164e 893413db1ba36264636b7039be13d748664afc66743b419310200e80bb3f 3e60c27157eca06e5a800f094235cf0215ed5c1ef3dcf4ec7c036c35f886 170e2417cd39171e1729dc32cbdf5cf8ee0a86fd0936e8dd6499af394a3f f5f7ea2469145ecad6e928eae83a551d6e50c491103b6c2d4c14398f3292 c2e30e091b0c3dbecaedeea326e2a43dbfc86100fe994f12cb65d04494ac a0a7b0615c369d527d87d30c4e18a292229b62e1f67574bc349e97bc0ef1 03567f98fba51cee50facb498dd05c77270522f1445697adc636d4bdc3f5 4f116157a9591e102a73b562b322f9c36a5650b8c77d2419648e8451b3a9 33248c90a7ced751c5eb612def459fd8f8c386b166a1234adf391182ff3c b87d135434867c65093fb7678905ead5d4781d6b4e2eaf09720171caa998 ee4ba3f4fb61b119c232154b3f4aebd0af762a311e68d2f3532e85b7bb3a e900b300fdbe5e77ec4114dc918bd1229f5bd85494c2a6bc9158af99c61f 98cb90c7122384645579c88f888e6ef5395e077341b519236c6b2c51e1b5 e4b7fb5ca6698a5262375e86f99e0e2f866891e01333360380c6b4e3588b ee7d1b93b2e1fdfbad3643c963c71c697bab8d28b13022beacacc718f590 5e149ec8c984818b66c98a60b5beed90d70e9666c922341dd503f52f21f6 9f46cfd4b044312366d94f3b2dc05e79f694fc4635defe6b8b2908c5abeb e96611e7deebdbc3e6c357cd3b73960dd41b9761999cbca7a525e3f5f32b 501d9d8623b7e7dc402479e1d5e5d1fff0dda43d51733a6a848f55ddeb05 97206042c03876b3ddadc40a08553b281555f530253100a1c5c980cd41ab bdc0e8324437d2e63452781b0d5a412223afad04e227aff048410c12ee6b 42d3ee79a56593e3f159560a34312da0fbc01abdeba1155449ae4791fd09 2da673b73c0871fde58727efa4ab79c567576a931fb5419de3d039002bf0 fe11f178a9ac5ac7208983661389abaa5732146bdfeadcc2f5038a484a02 e7a0997b5cbe1a4262815c71e9069ffd8548c24fceb453b81ecb10c3cc25 ac61dd975b2195cff86600c64408981b942d22f21cac103980333d73f8b8 28d9dc5a790a2506930dff22b41d8df04ece6e249b44497d16464f0069a7 dd04b416276f98709047c366d0e3051bb13ba2fa8b9bab7e4d17ad5544d3 f9ba746535f6262870b2f35fcc2b819cec1aae01edae61599882b0025d25 7624b3ee5a30bd0ed5790281de88f025dc033ee74252ca1532b254701cd1 d365e2531c306a276706e8320b6ff0fb5cb3342de8fe957358a35eb84db7 5283b85b1e44ccac79c393f38f735c17df38ad67cbc51846bfdcd2946f08 5f8675d03d531690fff2c17d63f9091246b26649bad6123677a7aceaf4b8 b9a1895ae969c5f858ad4ca34dd77a293ef8593996044bc1f6267b9f4ea0 dc4faa2273efacddb9dbae1a18201b9ee104d1834a06c530e1ec2bc0d760 da70ab2ff8d650ce3ce4df22cf40ce75b7d69d021a37c79bb6afb9f9eaaf 621c5bf12099048b9264dba62de54631d7974d68a4f3bc2fb038fc02b996 90ed8f35485762d450f5cef06323ff63264dc2f6c675c18a9ffe4d298303 a611a3143606200cae4cc5a90343115c694811160329b74871e52bb3a9d6 a759631a55e754314d1c003585e8be3ec00e3b099476682f3569310a621f b67bb34b1e45d7d3de3c5c637bab1791c33e9a7a5763513c7d2005a8cdfe 9609b6a1dd64e370aabd26a6e039506967d8d201f9039f3d07ebdcad2d1c 459fb8824ebaf0ec3dc3aca74a531e3aac7c8a218010583a700fbef6e0c7 a88aafc7f197ebbfc09c5e73911f11120275f408da8f5ee862751f7d0fd1 b8310696ccab0e36aa42aadb76982ded213249d10f073a4613857a8dc53f 04b5e2a4297b40291dba07a789c68b3ce36262187cf49a8545a762cf1d78 3ec7b15b43f0375565c5731b60cca3ac625b7aa920c7601d7336f4bdfa6e aaa366ba722f7939b752d92c2625c133e2b93da370c56864a2df79d941f7 d525a2e897fe7f3cafb177bc18a95f9ca8fd3a9d6ea26ecc36f1c78bd0fe 32b26278fdbe5cf72d4bf0af78ee4d59d0edc8b5b866bf0547c5ff56f8e2 0158187dd47cdec4459764f8d6b0d3e158c82f1670e32081a9f483e89206 27bb6926d106a89a2ded36915714151d29ce9ded48392b7bf2e17d219436 cbdad6aee2cd9941e45592aab14d7ec956e543b1e2c3e4bdcdf4fc065a3c 46e25f1f7db1b773732cedb79379139d479c86a8e8bce45ad1704249ffce badc4547911bfa0d88256e88d47dc2a15a2329271ff06a7bf1c928d14c0f cc82ca93b77bb028a6cc672733f8de1732980ec2adf03757e55da8134962 daafa003cce4f69b9c78bdd9008cab02b97f129acdf8d5cf087e7c645daf 94193c502b5cdb96f907d7ade9df6b106d2d939bcc9176fe4faa81c90474 c80fd8919ae84f8a0a39dbdff0be611890a92b45d9a37e4d7687725d7e3b f941e96ea8c4f4ea20888557453b9f5958a9d3ed907ecd5d1f816c5843e5 f5d18dc904d79429fa017cafa5f8e3e1612420b59c493fade5a0da49e4d4 98f987f2798a571bb050fee454a1e7d80e265732a094ca026f0f09a54edf e46e89471a38ed3eedbe8c037575d010f581b0e19766ae4f473c8efbd722 8a8e5ba2fa027f5c3fa6c335e9c6e32fbc55c913a1e90be681eb3f24b60d 3da796c65d3fb6e97ac48951f51c48f6683a23992bae0395556ef2beae21 c2082b9656e7634daf1df9b9024f7cb920e9974c299b5bb8f4d918d12a26 69d629e67b1743e40913160f18439ab0d8438f18c18ad6f079248d6f1d59 71e5eba67fec47511f30c14c325c6a0ed524231cf0ca0f98b022a96d31a3 8ee4e89cd19839f38fa9418605950dea6277226070ad6583219f683d7081 9ce014b2d56172993bf21da939354fbbee334510de3cca9fb54f7251ddc3 53126f20899603a71e0babefb673a7c4488ce30007c97d668f36ec4f678c 27b14afd0644f84cb93e257d446b47cc7dbddccd66f9b44df93f536684c8 44189c2ee1202fa5224ba789f83d8efd62502c1c252e56ba3b2b2ec4e338 a75a6f7a21aedaf18b27dded5df19c3dcad34b119dee44d4a3529df1e97f 1c28ce278d0a7d5c7c5e7eb1e5b9fb175a397580742a7002e85c830718d4 c5273d3cec99de04fb2cbbe090d9ee85dee72a7b78037baf204928deca23 21519fc81105665a0c0d8d2d1b3d9571d0f378e09a737fcda1d1a1472c87 3fb009676b3cfa42e85e772f4cc41a3c2801db4920b8fa2e4b8b7ae71a3f 43e9603bb50dcb1c3b6510883a6fbfd1f152391e981cdda2eba62b1aa3de f167a18b3c07b321cfa0087d28c882e7376746c9cf9f779aef911b81f4ff 341e4553a8539d9f0e5d886f106396c88b3c095b9617b7842f7bedea6c4b 3f05c2b6f638a91580e7ac33c550bd076271ed0844fb52b5d3020900d849 a3e28d65be5fe6456a08a31d0797c7d0df8d2de7fb2df41743c0506493c4 64b24456ada7229ce31461cf3132b36253e2a5577fbc458b389fce422345 776f0e553d1bed9ce7dc057f96195d046067452e23e566620d079b3c4767 dda83366e198ecee4639d41cedda50fa969d3ec486c5b74bea18f4524741 586fe66ba62e35aad67c5115ad6c9bb3c356f3062ee8b5fda307f8fafe31 ddbf41641ebc87fa0c95c76cddcea9ffb2239b3bbc4a6102a88d2002ca45 97030826c73ae8c0cf40d8b4750f2098a44730dce4a7967f65a9cccdd66b 12d9e4b6f75decb1b292053b668ea3fc26b17423cbe43642099a0d54b749 f7fbf1d24169ae759a9a29139ee760bc1baf95c596895c9caf5db82ac3cd 68fa565911d14f425c5793b33895f53c9a84e0c33cddc546459aa37f13a7 9c444c37c2130246a7b6914373bd2407e4621742758b51b1dfbf6e4ab931 b71741dd3ea1c2b7201445c484ef38e8263aee5e623007f875fcfc1f38d3 14d4d6b8bef3c0054ac6804f38fc30c04d9f74bae2a379754d677d26890c 123823e9f4c7be2b589ef92b201e58b6b949fdd1bdf5fc4842d1c880cd6b fc78880b7821e859b8f04aad7509b9d08dde8dcb9a21ff038273466d703e 4c38b938c0256eb11057091df613ac44bf8fbbacb1d719ead29305c0e32c 4097985855d34ce25162cdaa34b707f62d3e29ae4f59a9fa9f8390b331b0 99676d1900e13fe9e834d48ef46487acc8ffad5d825c5bf3d94108c07b9a e2e320a7ba04a92b62866430d528e06d5fc27e01ae9f45676962b31684bc 4b8625acbacdfdb41039d21d41ba1eaf8a89d367ca0e4069e6c9f0e05b52 533168a8a9bc9f544a59488f18a99bb6a7021814e56e789e34aaa2ad4f5d c5e492df9aeee12c6db4fb7086a1495f449fa1633db8b588f54dcb9fa538 51f02f26234e35034892dfbf51735436b2aa1c0755e98c5759563ce73be7 53625dd6550445e24f4c2c67c028c88b8938b3a60baf7e298c85c6c62883 c4cf486dd5b6ea7005e2262965f8e3d535150a6ab248ecfba991deb96456 25e224e29673c1dfebf40e63694403cbe76d90ee405232566ceecbbe3edc a0cb9922b4a3ef9a4761f9c69e6518de025ad0426d0849b46950d4633761 9f86afcea5a13762003f5669098f4181db5262c424f18ea3fa635172d3ff 36d19ab569ade4d1e4a5911abc71ce2091ce983b8de6307580028925bd78 82d1f6a4db15bdc026605b30f4af31b93e0d700aa6725b590579eb89e34b 3f95a49fdf1512586a9af103318b37bd96c938df91e6b3a615dd42b2efa3 9df50fa5df96c1edd5cc7a988bcc4c1d1a0777414c350faa6ac81066b1b0 f83522e688ea6dcc433a14ec21cd0529f43e0ce6ff00f936210fad46a7ae ee4a27f2a9961bb67140c1d8cb4d8f7ff216f9c2a6b0cf986fd92481f712 59a424290a20a3763402f8230225cf6571f1172218d575bb3038ce5b48cd eb5cc117e21aa4e3a44fac67bb0e65c990ca52655f9cfdc37db44f789781 e366354d02ffa1a90784ab7eda08f14cb6fa6c75932e2f298c5dff8a7f45 abee6b829701cae35cee16ff68f0e8af7f0329566ff40b754f4c4ffdc994 c042545676b7f71bd0124ad4ed2427eb0e050e484fc3953a85c43351e16d 05be0d22ec6d193df337fdee172b1df1c3f00f2e1cb1cac451e1fbe53d53 1c06a2877f3017821fb07fe71dfd8a38c89381b0fc7b7786cb92e5b9a8d5 7191ba7db72ecc1cd89e2c6f3b46ccbe3465044e2654e9cfebd596ed2169 83bc66763b800d5f89704e8936a9ee4022640582c97265f29cf8adede80a b38537912d113e5f2b828d686e8a5a7ab9803232574a42a0307fc1868b5f 3d166c13ad35bb29051136916ab526335dd22b0a80801cc0abc3116df7c9 20b3a7736f0ed513df45488c62d0f22db0529c397db8d832896cd14c08b1 74daf07eeb73b29073b4527e525979223c88505ead6eef52705bfb83643a c101337ae5ffc5f4625417be886da8097b1e3dec92659a615df7c5ca25e3 caec24fe454465d83e68ce5efd696f5e17ae51abd5018d1f92fc9e584c6b c882881f0676947cf96ed775e9bb4e80761f7cec7325f488d0742269086a 55a4e2aeca3ddc6033ae3a183cfe0ab891d107994a68a11ef7128e6e123c 315a151b3d38411dbc6474211d67620f41235f1d4a7080e1ddb0e5f4f596 be02ec17ddd9388e45abbfa6625b81a141c3dae611f8b744571e20d88059 374dcfaaa1fa598a3a2efb31b0ac64526ea0a7828f8107e06daa1ca67c59 460a49f6164cf44b7c18d78e10c4565f4a656e0e06dbd9114ad8ad49d48f 2f59915067f00d9c262b2647aadc8fe29fc18fb0203e3c1fdc570e05e3c3 feee8c303eacbb1ad8c59b6c3fb0321d441a6bbc12c26c8ad6e1bac331ad 1f3af78f020be5197d11a26262535c35864248356bb4b3485bc0abb8a7bb c55605437d37cd60419d40976ffbe00f25c2d19780c0a42c3020bb3fbe18 50081aa81505a36582a3a23315d43f5ca162badf76e107548b5c54500674 30a1a4198ce017b9f80b7ce1e54b37b48c6dafb92fc14449196df549564e c8632d6f221c9d40cf5b9e9e60c7e57e4173d71d0f00aaaad844b4a5c4ee 2caa7994b58a242339f3fcd7719149a38bba5a6e151a2c67ef55ca3ceff4 9645f8ee953db07c848309c205f814b7b2fab2d3dab8313015d3f198ecee da4ac21b417e31887f89a5762d13eaaa84d235030c71664af49f181789fd fd669303eae925b181be88c4d3b56b68fed6bbd62ac99d50335b269cb24f 2d331e2018570d2277ee1508f7d669c5a49dd80090ced71aad2cde777464 2cbb01a1cde2b81ab7d90ff3bff2114c07d9356ec74041d82f545af1c9ce 0eeec25ad44935b96b8d13d6ec83d9c5ffe246631697058c14ced09f9c27 04e971312ddde2b7e5852d4ce7797734958a18b8d03bff578977a66cd227 7b358bba826d0881e6fb950473f0ebe706306e1ad7fbc502b176a5edd028 202df281264682d75e1e8fde360b3818c4c7f1c2f9460f92b2a11f993e9b 67b66e5a66bcb6c210af68f020a27c6a75ab214b339944212ae206abd7a4 2b0f29caaf6424b6faa516954958f01b4eff829fb304aa07d3e7d2d67453 c1ff852c85996873c979fb72af5146ce6365dabb8751f0d4dc58a06b732d a7d731ab0a8a24a76476ec8bfba2a63f7d8f5a4bbce24c53271f84d61431 73d1caefc15d5d7ba5444e0af730e6a09e8e40f994a85a31fa659e059436 9aa713f90a950d8912413848184264fc003a155840cd80fa9a6a16775394 a3ce780996c9ea673937cc3a9554ce3834cf61ec013092c7ab9d34c66d4c eca739609c1b3a6a9d33271c7cd747ae272c9ad4ee81402de619e0c9e585 c3a7fe989df3aaee9318506d93045b1949c04c61b63c4486940791edfd1b c8a01917e4951aed115ae9d4c66228df066b601c4c67d08b4b76bafb470f da90e5c9825c7ad2509a21be292f9501b42ce2d4b565f6e63a8bf9b92821 4f03427d0c1ed0636ea807379479171f9bb32662631b08e4ac18f4745fef a7c9b5684f9547e4afa6fd413c912f29d0cbae99d55237288d74765d9336 979373415acad6e7950c6b1b8694340a716d0916b32c591a738843bb6218 5e66e43c357c5047c74533c65d3bee2b8b6fdf99dc59adadd5dde4fbf87b 859b69814c05ca9385006b25b674f8053e9ba90a6860dc939ec787053762 3b934bc2104487cf2c4fb6c7c240efabd67cac5e6e5155e9157eb43aba84 94ce853a0c066b9d0939920e8f3a524bb9f033e341aa932fc35f9b0421d1 085c7196e341571878e40466f3ad5b9f8d0bcc7b0e6635257949d78fe631 7f81db317a186a8dfd52bd549edeb497307ac6075a3cdc5b02411ff9b543 eb422a01896bfc350d68d8e1c1737c53fc715f717c03d896f95862477cdd 8e4699c7bf3098498d78986f9740a6629533ab47d4bf85ffa6235ab531b5 53796a3561eb8193bdd207276797a6502c14ef1d5f4cf4286f49ea6a77f4 955c47c8648590e933028dd802fac442571397429a76bf76b877420a2527 6f43f507b15ba8aaba95db926b418cbb92bfe6899c00970eca347add1b7e be547f10f4f1fda8c69708f85f99144c4b1e54fc16804a3c89ab5463409a 8153bfd9c644222344882d4992fa32fba54527c553fb9a802dbc7ed7285d c70e41e94b66b5ce1eaea1463630fb193fcbeb073a821215a0296f963815 ce97aa662e7d8900dd5f3e30a82364c9d7035ce80772fa7b813141e7f478 5e0457199cbe952ab8af7b7b6aa8a03c9015996df381f38876c3c967951d fdcc03cfe553ec4b05a8706e271580efed12c9f953ecd4e0e06355d9b204 10f88bd055a783ae4e7f1fe907a5b7afeb64f0eafdc64bad1148720ad6a5 b37a8e28feba29d2fb5dbc1103123f6be7a07249e1442dd03659bed15f13 c17e1583ce3e69a2fb1a8bf80d100633550b086b9324309ee050ac637ac9 1e518a6d99c82edfa5d4ad1e032526b07a2a23520b33f0a46e22d4122bdb 5bcbd1a67dc0d8e702d5cf602804c128d1f56e802d437c33fc8fdadbc43b 3d5137a70c7c47b82b47da7cb4abd9b410422df623b8d91651d4f65f4263 078802832d3f3f556778baeeb2842b85e35ff23d0747ff35bd30d00482ac a8dc227d1b3ecbd5989318e495c40497c38f286c3d43489b16e399002a86 693c0e61b45c16cb50c6595539d265d6bb7034c7e3347572879a99d6e9df d354596b60 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Helvetica-BoldOblique.pfa0100664000212600000240000022635707477306250017677 0ustar mikeuser%!PS-AdobeFont-1.0: Helvetica-BoldOblique 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Helvetica Bold Oblique) readonly def /FamilyName (Helvetica) readonly def /Weight (Bold) readonly def /ItalicAngle -12.0 def /isFixedPitch false def /UnderlinePosition -111 def /UnderlineThickness 69 def end readonly def /FontName /Helvetica-BoldOblique def /PaintType 0 def /WMode 0 def /FontBBox {-177 -309 1107 953} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020910 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6f2fe184835fa9b8ba775be9425b7b2783c5749a80cb47863298cc9511 c33e13e1b659ac7895f1f2d64fa9b8bf65bd3b69a7d21d8cf7ce10e6af8a 5445af7b6ab8766dd0072f1140c9870b61399d3afb72a8b811754ba9d9b4 b65c66461c4a6baf8a93da10fb4440c025f6517bf0b4aaa320eab6cbad8a 3a05aab4114a34694ef86193a6faed248e1cad53b16e7a33913d9144b2fc a93e9c75accb70dc55dabb5b1e84f0ba793be45417295312ead0e8b77bae 40e248658151b2e52c54e6699f56f323196b8d6200c29ab256c6c2f03fdf f7e481c51e8cad25f059d796f78a67166e716a220f63dfe394d859f9733d 848b1df369586e6383ea0de1e0aa13a2739f68948a3ff2e6f63a48b64f31 905296fb3ee182939569e0338cab3dbff43676b45637bdd9a954bd700dfb cb614490c555886e3592dac080f890829725239d32068e1f813a330530c9 02eb8f3ce8a2938ac2359280dcc7525aaa7f28200016f68a541694db9c2c 148453fe350361addcc6b73c36e0e4fa488e2d33e2ccf9c8690dd2078e98 0d1c6818413d8a756636dafa4820d898789f62cc4c2d36c56e48a982aec4 6f0d565976b86917897a3ea652dd1b036b181b8ea347cd4bfa3440464e97 4a4bbc477369308ac67b5c0c54b0256568b7b4e5d405200ea137fe99a7ca d604e8a8037491992010a69be0c3f4f251a263426902d99cfc512cee516a d34e5aa99b313aac5264f0058de583646e4289f441fa0dba0037f04a857f 2efd0af8e7fe455256d5736f1ab1d9b562e9251204a97652e2f8167b7dce 38f3e1ca081d08dfa789764e485016d6e9d689636b60f90ceef1676d10c8 add420ce2b9dec4fe72733bf06fc65af4a7830ccfcd66474bd45dfe81172 bde4379f058c76fb40c3249ca8000561d2f1199b5221e8a6404f90fa8fed c0848f010fd51be1cf3ef6feded25c10a737403fb4803bd635c05ca8d5cf 9bcc9cf53232454b91bd2939876ed54b181d212a369531c4f38a56f59cb4 84a2f92a69cad37feeb9720a49566edf37ee388a99c258dcde5998e5d851 e1c123d704b37f22e06a761a634163c2ac415bcb83023d2359945ac0b31d 21cc4ed060a034ff2f3b605081d468928eb72fb55e0c1abe0921aa04d215 40a9272a535487636b8ad398a19cba9a2b675b7bd5fb56fcfc046baeb0ac c6e6830e402e29b30677f5cc6cd60008783afb2bdb23445990439ae1f337 dc418abdb446243b76d42800e77fc5f480c8f3037d8a575976b56b9fcec9 f2de7424dd7f850590cf22da6bd562eac3c0bf4d1ffcbdf81f1d5f9f51e3 6e4d4f01a4b671ed7938d04b12c784e4acbc3a4a02374c82385c083d07af 133b41bf497549fd24169a8715226e6adaca39820b33508263ebdbac7178 8daf9ef841b0d19230d8af79983d5176121d9b82d7bac7cfbd83110639a9 999aaa35157a1d21eae6368a8d3515fe8eb03da2b3209e17f22e4f250b1a 22d6cf37a7864060894693937dd40d83c3165d76c2f77fb5bc2dc80469d7 f379c9bf315bcbc1b4c0738c33b54df08c783fea738af1ea813b2ebb3f3e a42ef8dbc323983fe37962c8d1bcbff4de8ddc956a8e4bc27857a5516078 87ee579f68e428f80f1fb710b1d8085c00d5fe70576ea42392aeac7895fb 592b70d96ecd4717ee5b31279cd27dda52e47b94314321c04ae86ef9aa17 ce23b4acb0619b98f65ee74a816bd9634b7599362fdc9b070ee26230132d 2b427b8583b96e7a7b62ade6a55284ad768e7b6e4aadf77995966df90c86 6a5c27172a2002c48da7b38141df3f596abfeb51fe99bad3ab3d069c23ad a0a8cba12cb7112740689eb60166b17182a8799fbbd824021bbfcc140650 fe0764b9db274764c5c105f018c0a9ba8b3ce553911de2697239cfb5d970 47970a8f7e0327b71679da7a215d91827cb1618893b78aec8743dffcc5b4 00040a5b8b138e7bd40af3779f9ec4c5b264105c6698bf086f3c3df84dba 71639894973f86ddee99bf8e334fb0dc8f2305ad2852f1cf742bbf2a9869 f45b6d4b76d2e51a151c149e1d6fa71f8a4f04f0ebd06f765f0ef680a1ab f17481564451000a0e04a85d1bb2fc31586b454ccfde1c359ffed6aec631 e1f06b8e71fc1aecd7d078b394a25c3aa5888497f40aa57f64366a754d6f a9397e317b44d9aa41945e06994ba2dd437de45e448d259d12b337dada82 a92afbd4be0f23fce5d02fc489ebe0c153c107b0bc7506839c26d78f19c7 17fb2da74a53d2375e2f37692fc67720bd203226e92b7ae46cfa91df2a9a 6c0648d5210e47bd53b3d96d090ea8f8a19aa550a1fa9f8dd16f80ed5008 15960ca82c66f49ea0175388e865801a5a5ceb0a250b1f5e7834138a16e9 f85e35cdee0a8a530bfbcec9dd15e195a3a96ca3ad055ae2e6203e017666 41951ee5574f5da69faad5257cdeedd1889fc51906bbf64ca6bf40f0ea37 23a0eadbfaad78cfeff5ddab90d2ebfea47587dc7d4030e3204539762a2a 1a8f232ebd5d990483c91b2739006e78e1e4862ff87c25ad67d929ce8be7 ed648509a4a1427ef7ead08db803d0c3d68709a70953487f54649fa47e71 192f1590bc89f3494db6229a8753ceacc46106b31565b499bfdb6e6884d0 83004df3373b8e3ff2eff7db3731d58edab6209adb5d3e324bd8204c1682 3ec06c3d4282ead2740cc6d8080518943dfe23911cb31239e96c9ed3d49c aa2ceb2446117e7e61b34de4fe75b8ba276ab2d41b812a11dd50729c10fc 199be27cd71cdf37a9b57466cd11b5a3cbbd98adbe9c610014150f3f82bf ee237ee99da692054a4089900c8bb961f507706887062e84f8d043a93e7f 28da453a501498922df57319bb52103db8624a38d6f9ade99e3d89ae225f 954f8306eb5fe5c73edb09555a13e6dbfe201b1c9f4f5aadc61aed85f5ed e067598e1b8dc4886e4890ff43cabcce04e2fefb420fc44518459b12da39 4ff35f420d53135a856ba0552233328ed17ead7ade363da21486dc3d7c0b 9bb48dbdf15d08a71d428bc24f8f4074b96c1734f0baf1a92df39131695a 11cc6bf6fadcac39735095a31bbf3ced0496f4e0da40a1f37478d9f84613 0f496935d1e3d28dfb831a75948c683bcfe474121ba533b55a64eeb60a46 7f7ddb3cf556fad68c634967113345221695665ae021f551cbbfeb1d3dc9 12999cf861f03098112c416488deff645161521191e08fe564e52e882d50 a90aa1e85302ac8ee5561f6a79322df061090193f91d9d898c2a5d8cd5a7 33669e1d9f459ea1010e73e14a73c3f1fbfc0fd8c6aa823668f73185ed47 6172f8ad20f0bc02a0a3f6507d170fd5b8acda2c3abf2b3e92559226fa06 7bbae8383ae08a7d848e5eb4aa0f5f43471f2e852aaaac41a8422465c7df f29398cab9c9b1b9b14101a8fb99c00f61e17954220b99e89ef55717bfbe 8d0ae4de67b2d52cf54d7efc6012c7c89c0b70f7654db9922354018270fd 8b785b3a7a1dcc45bd0c74ce1002722daf3ae4d6afadfd1bc2d1308e8e2e 8ff8baf34bcd7d34adb82cfc3f7bfc44fb1e11e9a38b8af767639f5d159e 477b208defee12b133084a43f8af483f9b1313bc42925ed4364408ffed7d abc74aa45408f9d278734a58566398098f8ee6f2ce803809239394ec1837 a0c53e587bc8071970fc33fe7c565961c2a01071dcfb4356ab5f2f38d70f 5703e7644a30b0e61fd1559931afb2d86af619640708c0b9df1086845193 ebe4ae0e432db8c7976155c3a0dbea417649f9f9d8f9a03e9372691aae59 b279496a13f01fc2cd49dbcad8be8fde97b65fd609da87ec24da8f9f92bb 320461f6684d0799772f7be0992503a875ce4a11679a251fe02ea6c5ff3f 0ade1eb45ed25ff4999515e13dfc049c4e24a0e761ae4dad97eb59ea5eee be6a81134c6b73608413b83693e565230e6901177e34e3f18f1bfb8cec0f 15b81f2ed51b7a46d6915478556f4668701128ed6b7072312544469b363e 6701a4ccfd2354af3edc379546d7271e2d5d28b7c77c86f2bd956eb0a35d f6b83e48b7d8cf1d0b9bf1050e0bd679fdbdadc0e1ce5b156d6a9d0d92fe 2ced5ed2a62a9da9414fe2e6075a16391590c1a2556aa0540efb6bebdaa5 1f03d5b655efe60bfce05e645988470686b39fa5390fd9062d746ec9c059 2f995c63e170fd123f73b4e7341e10f73773691dfaba23d7976ac257ba56 6fcf39f675a1f8bbf65a1753a2e23ade6d0b9205735f814ae55dabfdb38b d545fe2ffcd51cca1b3f18ebc172584ee169cf987d4ea037f4a4453f70ad 32f497c37dc02088bcc1f9de00f337d74ddbe79d611e7b7282b839317499 cf51bd51b099045c8fd28fedd99d8110257dd0b84deadaf95a2d1fc7f76d f5953fd454efae5eb888eafc7b4dada770883791b42364382116a593a445 bf74a731c20ba3f81c5b3146a31095cf611460c554b80b5a7c816c1bd368 429fdcdc16a22ef611ad57dc42b67904f2332c835ac0ad5a5961df2fa6f0 5e777cf210384efc65b866c77cccad5fa2cd9e35987f9ebabb74103e1393 3f04f9a2dd044293880db216e9ca5a374da769c49ed911d3f649a72ff97b 1ae979279bc1e60d046724828fa352217d8f7de2e0c6bb7996cddffbb8aa 723296e000463f7ee26f2e8ac4ea9ad45949af98fac0e1c1f0af10647e68 adb4cb7f372dd0cc0e22de169d697d0559ea000ec86d72f885b64da23777 df762dcf6f4594f099b8fa36670b10f6bed0034f5810b772fe375269bd5f 1f079081b3592604eaadd9c2e5a8c476416c07a9f3a424d5e141c70cf343 1840de12fbf07cf93169d43bde761144e00a1ca8e8ab3c5782bf3fdd7eed 453296212854f974a142800f1a4236fc4c1817a5d4b8ddd32e7b8157c17d a4c0862f291f270c8b923c1a66b6ac7ee9e03504af1268460d83d1f94cdb 14868a7666f30f538b6f6ea776b1635430accb0d1ff0849e6e7533651714 c1a4fd2f2e422884678cdf3db7d7da528da607c7685d3391e958ef60a045 ae5775efa62c39cf2708d76f67b00f6b9d1fbfa08c1e24df6c315b0149d6 ca45a8f2c7ac61a9d82fb4961259f62a3e1f4a2bac717f5b97ae0bc57bb2 46040e173042cb34b10255094e40846292a84441115a0f5850962b567024 b42bc972b81ae527e833693483792e4d27c220611a604f7e9944d31b8452 58ff0c9116bb0d0046d2b73e4cee25a2494b23f4737e1d4c88fb9a23b8bb 4a46413d174cd84184376eb020260635ef4bf7a1742636331371433ef9a1 14f9c7a715cf4d65db22dcfb5fed5e9bd2275edd5e42d3d28976d7f50488 3229160eb3df0b304c2b6056e4c9a19210aea631d303f1f5015ce4b3feaf 5a6d8988d1dac909cf0a166fa02f6f0c2fcd20f8b53b1c241f04b9b03cf4 b3b1c6585bef722132f62cbe183b20e5dd14bf75e71b5b6e7022c66de7d7 1960c930212f72650789d01d1ff042dcb7834244446e1a51b31574b2fa8a 71c5d37eb3c6ce374992ee373c7ed9420619625688ca6f6c580a8110011f b86106ec7c748a40418ca7a780b79c49dfad8691435a24cff52fe27e2741 691cdcac60202b1c9e7c12b3d1c0f6fdf6fd995b55831b32eb18c6fc6d3e f9aa3d2918e584d57c2702ce726bf0280270a76253baa05f19e7bf6bfd2c cbef439e7ecebcf86c12dd0e858512896815fbeb166016c9b1284bf26e40 479ebe4eddb2522ad4446726e20d7e5b727f9cd1526071128320ab3b084f c0ee4687c57c6a666c26fe41818333039d1ef471134523fce496acc5d304 6bba49f665460b2792ee227bc677b402cf54cdbcc1959a09b544bc1dd0d3 596594f481264a3a81bbeaf487b2a105558e3bd9ff64becb66d9d4e72534 bc62ac3f8dc5a593b40e732d3986beee9baf321a2af2256ea095f5a91e96 fda24d8765f6ae4e1fb2d04a011ae33fa2100df8d2848e029ab198980601 ab25a07c4761ca6d1e140f5d32b88608879fd9f54027c158296372d8b9f6 20fae7571f9542fc06cbc1292ec387ba3f4b37134bfe41314fa52f053c71 d78f3aa1be8f7ab1dbb28f1691318d0f47be39f450f94730077f32dc1272 f75c2009e47507a4000e9d2b941a4b89540237df5b9b1ccd7690902ac8fc d55bbdbeec235506afee3621747fec1fe225802b1602ba24e16f187a6808 72fe961c62995826f977416c8de97c2e08cc01f6c12be6b43d8a8808759e 95a8672cc66f2c5165c2ac17638689e052231f764594238d618b6ce7cba9 fdcbddd6bb934c25006c411c156474b4823583f7ad5778fc835f33bdebac 1db52d6e916c0fa938b0a661569423451105ad8a5c5b66d2628694612a77 9adb87df894d4e5bc82400494010293a709a042337b5562c613071087923 28348b3a1d3b7100537588b4e9c3d822a994343a57474bc4ad55237d9a1a 1dbd41db89c4563ef30cd667a8bffb7944453323acbeae7a530d5e089a1f f51c1c301df524062c1f8a9beecd4968929464ab12b01fdda34736d7383d 23546a24c6fc9a768cecf51ce3a68d1663018a50e12b9e8855e3653f29a7 7e275c07af9856591230b56c9ecc67ef2b0ca34e3c531d23db30d0109ea1 c93584ffc205efe07868dfc2dbab3bd971c72803758da3ffe6e3269c262d dcec53b53574d4a99536b237182b2a54831dfb1b0ed0cd9b806719a0858e f3e72086b86a75bdb10f9d0d6fe7fbdb23c419cc471b55fd8941707e9853 bfc7cc1cbdae2d72b78c10e395b22a43a917c05499a2488588aa7e046070 ee75029e991753eb6f867887fc98add44640348fac43f936de4bd2483db4 eb1d2322f73a79315c5d392138e7847ee609b82478225d1a63e440a7193d 13cc697b15617e673d8abe24d6f77ec8a57ebaae74e8f1802f1e7c658b4e eeae75eff8a0d27fef34b67d69caa1e94049ca1e65fae1d0098a1fceb0ad e8277562f40149eacbeb6ecc8848d17af5e04a02811bbf588ff7ef09e4d4 cc420e007a4f7eb6a7e3aa925784825b29510632742b946b1cc1dd8f85ad 47305555f3d41b358ecba778f43a0031662802f3fa167bae4b7ab9337397 0e9d6b83e5765d3752bbefb9a5a2f4381ffd442afe09c570e2c531549b03 e2110e483cab7eef5ce47a5b5366b9dbadb6aa3f2aa0287312c1e7675765 49d5a3093a86c2e81ce03a917b629295da2e8c469bfaac944e0b3949bab1 733b2601e54a8d9f752c97568438bc686cf1a6c5b22fd073701f40d82e18 8f76a44dddb0f5e05e94dd9523bf92155b30dad3a885927de7a7888a0933 747a15a094637244fb283e8583aa61b3c39f4b7ad4a7814faa22d4a512f6 4ddfd19f1c7c545c5d6e59d47de5499df57ae4a3c2d0887595a0056c2eab 8052f70d344309171cbf4b5a68f5df71fc609fe2449e2658b741439926f0 2b1d51adfe75e1c6b0ea56507c3d9dc9dd97d28dc59311499db2a6231ff7 7f57a12f5861f357e30208e26ca7debe36a84a8183b6adf7dc3192c650fc d7d1f81274b3a20e20e72eba3187acb150a0b433f1c76989de8e5435609a 235501eb7cc575ab763b66c370b6ef23932db9da87cbaacf85d1c841266c 1f2bbf84d50711b36fb0a288c4f04f1134fed41b082ecd7bc598e7813555 6203c1dc97d61e38ef6adc6132e6b9112fce17ac4f2020af66a456a2d138 020f593631e24df48080deb01b48844fb0e218e9143742bff51f5ce8d482 4c8d46c03fe12c4934035ccac9a2caa283443f6e97da7996380563bf7ac9 bbc3a582d7a26259bcff03976a2adcf78308a9bfc908a2bac4b3f6765d91 c564b0a0f857abfacae324705be0751b1d7e0f921bd82ddfa79d31f0b450 682ff726d822e0d19f000df91eaed957e968ea6cc4fd5fc025ad331f4bf9 6d22505ec7c1deb87c1095dc2399ff839d1d5d6324033545b07667df3636 c4f5c221a3663047cf0493b3ababb91118965b87f7173e8bc490821cc3e5 45d801d1460e1189d7bacf8c6a5e038dc1f103f6fdf3d90d232b560ad126 c0d2f05764e60da1282f47abc989d52b96cfd9f52abe0a375ac473c0452b 72fbda640e79a9f7b03f3ee528295f3d41bfd936cf09c431129611d298ec e4ac984b371920c1222c40183346a8bc18fd46cecaf9b282d3485ca75822 b86936d3ddba031e45beda8a923618ab693b8bb032c391a01805c776dedc c0c149760a801a2fcf942e7bb98ebd2981554e9dd3bfc7614951c7bcf644 e1665d8c4432affcbfb7a228a5848e0385887e0a00795c3711f3cb2021af f1a8abf2c8e1c8831df6310f83eb8be0b6ed9a70ac8a8810791d8613a84b 11df1b58c641d6051e47ebe7e097223c19b23511f9c637e680f53dbf9140 7e438f28bd4d270f575915b0767e3238bef4542133e16562182071dbabe9 2ef771bbf8e18ddf55c42d244d9dbcaae0d9118f1ea0d64f3bf02c62db46 fdad3669205b67fd9f8598ad4f7511e69f97e7d9775ddd587ddc8cf25723 d66801bdd83e24cf855c8e8aab4caa2cedb34a7fe627fb43e438072c9b0e 5adb905a526efeefd44eaf28708ef69029ea6a156cb2103db4948d53ce37 202d9686fd713653d8395e92a1dc3b58a4d8f01cb97fa4acce1db888d452 725141ff7ae67d07bfd45e99316b0258c20ce9c9d4a0179bdde6524d9d91 8018d6b7103c432edaec183a31c067181fe0cc9f53c6464a6dacf6521e33 38279e6f5d423ee506413835f732ae50383718c2e021f978bd6492f7ba61 20f86a425214cc1464615266f8826098e950e009d9182c028aeb426d5222 45ab09e83cd166f2445e020ba8b100947fd9c0aa090e9550c701c8acf744 11916b90913c583e374580605181ae2ed903e7b54769b3c3deaddca86c11 3f239b3fddb46d6343fbeaf44135f7ef5ea217902d3be6e43baa2b8ffd8e a065729ba462fd1965f8e5bc599d614610c343cc4a3d315ca002041ef809 a3789c35f70ed6bef71eeaedc8fa92ede906c3df1f4f9e936739d8f3becd 441a5e7f490bbd7a063b64c1ea82bd4445a7d229c2db61bd6f50d6c3e3f0 285c15d5a480a1c9b231762e73fee574a8b3c5bbec36b2bd38c83a295c45 1ab123be578632808204e2c98c9d87dc6c6f912963c9b2584ce149d28727 1a91f40be4bb03281b19582e927b0cb81a0477eca4838aa3105eee9257ac 0763ce1ceb30fdae1c496b5d0e7c9d06b307161356c243f8b24ac016b8e6 052b74a41866866465ad9dfd2dd631b00b77c07dcc63b8a8cf769475502e a2abc40b64a430c0aa75c18b5119852c8ea274290fcee70e5a48b74e373b 20f8913638a86d48eae562cf5971e1aa1d73795fadea098471fa36626332 089d85f3f38a57fde80600413cb4b2c03981365e7eff3e9551ec3e60955d 1fd5611833d47d5c0cf5ca536cb32927a36ff5bb92a96b146adfbea8f56a 2bca48a4c08b22999ed5b373e167987284fff79565612a51f550b6569d06 d39a61b679ed2780740e947d5d19c1ef2756b044659baf4d791ec7f93e85 8d749f9a2d9201463680c1ce8e617900238b4edc669be39884957e5ae334 39c684180deacbf522e4854a274c747b6bb63ec2a17fc77a24d5fc81e9b9 47296da15b6064e08057ebbc8418b5ffdc93cde179e638168fd95ab9de3b a849b9ab2bdd2e1582bb6a27122a8ba4d81ae3d3f96d74b0fcd1f5410213 76b7f326561ab5c3f5e36485b500df3edc910fcf365465c2731e42bdcdbd bde2bcae6be641b21e0e49a97ea10a067e1de1a9696131eaf569bbabf136 72847f2d0c7ed958e1c82c7232ec089a82e95ff4e336fbbd2d5303a6d335 5bbd85d66d6160c3b24482bef8fbebf27b617f98872d1588092f3691d9f9 a8223f7baabfc959020bb25febce1c41a7878d8a380d3fcce590d329ac56 2b889987c28af218d096fc2ee4011feeeba63035395b77314afbc0921d9d a790dab33e7a1daf7dd4946a2c30d634f09d2805722c04f19a3b390454e9 c456f8349c249464d3e22e18cfcf902fa90ad8b4b7b292b8ba20bd15a1b5 e6652d6ae15e4d4aa24c00be8c9edecf2a505e3f50883297d84d111c88db c2527393e4d7f5af521c6b2bf469144f2dd1f6e05db40400e25d70a165c4 1c956c90d73d1a83c0538df2f85a9ca5a786a8121602cd9e1c54040bb87b bb7eca6b992f830d83dadbc2d91ce0b64624c6c77524ca3ae6133b7657c5 128c541bf0bb97b1031bda000179027883764ec5c692f0447e5ede18f855 3a7d7fc8dd95b8fa759cfc3590209aac46df4de98279ed8d7dec9e43f0c0 1898bfe47fa60ef3b88cd94b16bd05fd0d9b42420673f371c6f585b621fc 39f60fab42b11bf74d596af4348a6d43c6760faed50fc8c9b3b3f5e8a4f2 1b86a8b66ae57cd44a00a2f1b77abb425c542dfc8bd4eb48b33535e03e4e 5ca5f02541625f4bcf80cfabdb7b879a0559c8d8aa9ce2ea00d519f2554a c5a987e2812b8ca40282b2e6be782dc5eef946897682b3c9ec9d804d36d4 6b166e1f260d64a894aa6957a5d71c8575c08dace0382b2812ba941c14aa 2099883e52de8b76e7edaa168a53631d890882836514f5971421bb6689c5 2b018e46ebe6c47cdae3409d24027446b0481ef348a109e83b411064a150 661bf773648d3b970d2cb80846fc931e965594e0364f1d4317ff65a55ca2 ce35711b8c15ebb9a3b5b6ca6e649044cfd49633d668d7f68ec156537038 4853c2992bea366858bba9ef079cf6e466452f2f827a38ea312506e84ecc 2584fff467ae15874b7c424e4cfb8adbd1e3f9ae4a101d1ce2235589192d b93ebce5d8e8eb108c52750ccf9294f8ea9091a16e9a0750af38360acbda 4b8fd30ebfd8190e5f3ee8cb6b15b2f530d78306bb0a102f2037fb450aba a90f3bf0022e665579ca99d01a141a84213c30fce2d9b0f8fec5556d7772 58a7bc21439e0adc296f59fc689cba73696ad0ec751fda27f37a41be0368 908f0a40cf39db91ddc2f18d67bfed2e4562ece1260f6699d945a6e25243 58958ef8e381a4458578db1d57359800c2184c794f0ddda48d9af44bf4c0 e1c0d26c114012969b56e16d440b326143953b7fe5768216d5a4dd597644 ce567468375cf1546572770bbacc0e25b74272880a91acc7c9b4b985c174 3ea5d8f68fe300363e28c8ab16dcc72f57f8c1646da3480c857b7e2fe26a 023ecb0501dfbc5d80e82fb7b04e5ffbccada79f6e813bf2e9b0a86139ac 1a77a5a22d3746bddc39f1ae04524d79c6f99063d84302c5b845108ac75e d624297249edd95e20df0ef183c5f1c4a83fba022cca3181f28aaedaa857 785f7406a4659de5af2d5d1852745159077d035218e3ef5901dc5eef33a1 62bdbd4d90f1bc259ef60fbe1171dd9ca99182e509cc719bf65298a8eb41 81f1646148511e09f8e21ef907890bc4bfaf9a7d656181eafcdbe9001509 c1ff6979ee901070a024d698d5196912eec276e3a5117350e80806722d98 7d19f7c5c7f1cc13edc577ed03d63028c2091c86dbca8b53f3e0b6710984 933d67a6e0d770a1b8da494dccbfdfc1c98ee686b4ac3e3cbff16a569cc2 354d7b725c511f6b4ff5ee705cb8e8e58d5fbf8cb94a0c807f4ba98e3711 f38e6b8e0315f5236be4f445b22f3cef9b5696f109cb770e77edfa30ceb4 16fb3029adcfe5c2c5cb2d4bda4efc75cb69b897493c3520871c10a734a3 58ee71533396acdee7682facb61b1b4309be34848fea0015ccdbc307ca0e b22c91abce2a7788f44fe2170560535007cd9509a00bd80c0a81ced0c6e2 88e9c66d78037ab1d61012cf98d9768033c4df64bf19160199ee852e3860 5c1f9131277e833d19303ed8bdd942d52324e57c4171c1cbcf567de3bbe4 cf14af5664bcb5a71663b830a2b0a2234c478644d8c48a8f5abd86cb0f8c deed1180788e231559dbd1fb713ee633a734e70b858d357f1856444c23f0 7b048a3dd3fb19155e2c97192e8e1f0ae8ac6e6f2adcf1d8673245d3b793 87f2652b2a8e1ff334c322102f98dd2b22cffbd7de785ce175b921697f9d e061271900f3285f5ca35b476ec5577975e0459fcafc4808fd36d3ce8153 4ee437e8cc70140638acfa462b0b5b41c7a4220b04d002ad6604aefba209 66896c90bb3ce4e1dc3e2229a7e030922609e0397ab0c3b9018490abba4b 6901172dce6d4afe3c8ee7eb63c10daa800cfa681d3179815acb60603870 583723d39626f105de635669f23c312405b058ac106cc4d0bee97ce15df7 f0d97f71a719f2ae7a53fff7e50bbae6e3ff15a0cf278a8d4f736845e321 916153a4c9b1809466bf2240e2a71cc53e96e0afe8357a7ee7e75b3be438 9c31f2bd054d371c9f9b7d7111ba7ca0ea1c34e7e5d123bf653f266b625c 72610262b90d8a9043a119eba1652c2a0cefe8c3e8e6642c9f209bd6979c f47c068953cd0554e042a5f7bba8ab4a510c567f6535bd373fbb6bd8dc25 2c36f10ecc2bcc3541227df8f6f48e4d371bd41ec0e761068c2da4b49153 6cef9d619e1739cb745fb5c7e7b58c9f90c924ce038057ec257cbe336620 6684d3dc247bce1ab4311a9a5f9cdb725ded2ee6621e0af8522e7c869f0f ec14afae4c5e3ecd955e47fb2d58d56d57e86d732e8ca6cd8b3fb77cb29c bd2867162a1f5564117616f927ab3a4ca523e2c09ce34f561c0f16f1b40e 5ebb1a3fcb1fc8fd435ad5b14c803828f5a8bac827c6108722ee85e54bda d7a6df940e23fdf88c52ec84c88c4ecb478dd128135df746994341a37ec5 fb30c68dfaa3d4cb5e173274f4c17764ac3d55e5cd43451c00e0a6809d7b 0714503dc1af1fff30072ece43ea876cc50fa0c3717e619f68fb03e6b884 c68afe30a6051913c3f258c994c4b96d4043e64e4c08653abc4f26ee89e4 f31c3cb6623933699e9c6cc0827929f4e5be2240a9133ca83b5abae16ca7 b8ee51fb92847e27b311c9f0cb9a26a93a465c10233d077c23718e3a8943 9183c71196ecbfe60772756e3f98cfe9a1771e3098847902cbc6470ed7ba 917fdd1e0160607cc35986beb89c5115ca5d5c24d3b25e3c834f74628bf6 ae5ac1735a2308bf77a3fbadd483cb828225d6216659a8aa3d9ccd692c12 aff153c70aaa394a00d2e2fc7d7e10ba8f5425abc7a1469192fc2dff6c0f 10074110bf19a25fb6d57a74947e1e25c98e92979341589f6a4e64e9a5b1 cfe781cffe49b360bdc5fd87420520cfee453a8e735d338b3ac33f62de8e 12918869072de135eec2516829bed50c47681e39987077c71a385c3a77de e0e6581cc42b61da644eda8eb6b5883e32850e2e11029a0c37fc4634c69c 09f6b2a5fda819b31016fa0d9c802d4a7b7c92e1b05e7dab4441611034e7 2b0edde3fb4f9cd60de0b464ecc57c540e4aa4ebaac976605c4d5498adb8 83e273b0780533fa70683657e32a5eb61f0c232b033c06cd1c9cb9eaed9a 868f418780ae4d074b243572b5a579ec88e8b8b35059fb7c5117a9461c92 de71d44f58080f67282ab2f511ccf6d58e55a91a137436368b0530da3c40 1a57e17201db7cb38f2ed456f73a72048fd353b7aec9529b983ad6cde3aa 78f790c74b5ed463b7c86d689c2cb4eaa73595e5ef148c71bd591837f40a 4948cf38a45ea24346d0cdda52c46dd00a6c522d3a33507560fec3e93123 6c5f3b2fa271bea8008906eda2871f919eeb2b3a8d9ed393cf307e4022bf fbaa0247c5ee233c987c2bb7907163be124399d38b97c61dad97b9fab84b 9320abb9969bfa659d8ad94f1bf70e2e0fdf33b86fc4d0746ff9e112781d 53309a7b3f956c231d5ad72bd4897d9037bc9c02b413d17c6b6f88ca7768 42c2037f65d93fa0926b3e0c84dfe8a93e81de63b90dd027174436832079 018ca74d5eeebe9e6ee4e27c174f3c5e4f5dd2ce200a1d43806023951109 cf14ed1392402b378897a56f67147810f4cbe61d3205d271fc060d9a558a 469605e570615ce5a6629a38f636cc63ea594cdbb59a4e381052669140e1 1905f67695af2b3ce07b84155702a784747c5b9378f6e10123143f05d994 8fe528f0b8fd58b23f8fae1250d5eef440cf4575999984412ffdecf12ea2 b8e4513cf22c8087ea64a98bcab9ad67bb653e1371bb5786150863d5e14c 5c8b11274b927826ab4f59ec26e3689221ba9f3749dc640fcc80d9948d49 1f9b4e5bbd78d8d31983b6a9db00dfd2e6ddb08a44fbb17fa759d24d4508 0439b3af7375b9f44747b91de35a9379da0cef341cfc3dc57c4bf8cdbda0 e00e908f86ef05198b223da3d03d25d898d90a55be0e06e45c9ea65740d7 cedd01fef9e1434ad47eb6907c6b7256933433de5579226ceb2d1a7b0ff8 85a343a37ae27cdda654b4ce77e8c59d13bb4f9481461332f7563553cdcf 157b89b32726e721e0db58ae803476dd7fb67281c0d6eaac3ec9889a1534 ad7f61b05f4b66368df8d51a66f5de023cb53c6ab9a5dbe617b81f2cf84c 11e4b3cef9eaae9bbb514c5d27f277eafe2bdba8661c968e20961fe74bbf 7a56667bc6d19da87d8c89fb14fa87a752a3da5630be2ecc3d8b5fd11e6d 2ae59df61f7b30abbebae79740788e47e204cb4847e4c21c3e27702a18ab 9b7bc8f7037f43c7fdfe66fbbf4cc9e54f68ec3d33eb103703854415a838 96ff2814893ae8bc1384668b0b5c31d522d34fca880a6cf31dc0ab123566 75e22de0ece2c987c92d5bdddbd3f7fa81730ba229a47e5493ae14bbf936 e60678f9c2759b6c2575db22e363cd241539979520a903e9ac8cf2c3c75e 222098538e3f5868f64a6a89df7c833282dc83c925e6dbc13088c7a6929d d9a99c9156c5f52ef04853f878c553d7e04ece87c1a570a4366549413bf6 d168eb5e19b3d198c3ed4738e6cdde03dbb8b319ac4cdaac4d7b009365cf 6fa27aa8117cf119b74aa04dfbab7ba15b0ed18b26523bc58aff78ef906f 3622a0fa5a18321056a39ab1e7cc671f131622c010361a51f02a61d54e80 9ea3f225433e2ecc746b31fb02c9f508de64083aa71e8ba46d9ae80c4b30 f3eb495add9583e61fb5b86c7b902b8f516c6841d9c3b1ddb61eb1ef60a4 d042bb74fa4f0cd0148f02098719c8662feac47a4d891ffc269d2e7318b7 289e2612eeaffe5a888030e679661b03d75cd251701b242f53c5327e0d4f 42e47649af18a82d7ea4bc51f9d17b4ab2d00f2c3d1f7f244dc66aa1a4df 51bf0efb5747fd1f7a7219697f2ce063b95d040eb8ab39b1246f54119c1e 0e9686f723c74f6c9ac4b97045423c5db0e3d5230c6fb0e684b3b6c374b0 618e4d7428107f7b3c9101f157293feabffecaab225d552e4d4bab373165 848d9f625d80e3de0d2332ffc00ebbf4f6d87d0a43072b7623016c06e6f5 364ee5c77b2c1dc92f30bacce783c40c7db87e494ce0b564bebe2ff35e1d 486c005e6aac5ae1931e3ff7358f152d4836ec7adc7e27c536e722cc9a1d 2b5d685fdd26cfcb61704cf1e6ea09785bf8e7f0c694301fe751828de071 2a8e8303eb6b37f85d3989dc0573f5da4259816e894405f28a1e348e7f6c 596ce8c5f2ae7bf6bdfe1d3592aba70405d18880bf45e631094792538a8a eb32a15bd57a07c6018cb7acc365e308a2b0cfbeccf6c663bc1cf0040a19 b0bb39a8516772ccca9bfb073a63d33052120f6d9066354777d511ddac2d 2179fcb15715dd63a14fe70b42b30e2ca33891e45ba4218666ac1c9f10d6 cc823fb9e62407ef9bffa079c062db8f8280ac2415268b3bfef931586b45 4ccfde1c713583d67a033175906db6958567fd1fd0242277841b5a98e68b c40e9a994cebc0619d87c4a290f6027680f9ce1156eb4b34144bd90906b8 5ff82a044802c7f87dff6642ce94fe1edc43fa986dfde29666f5067993fc c20f752a751a74cfd8e7d5fd7f4eb06616111485f1a8e25c3512629fbea5 821874730c3e761f3c0bb351fc4249c22e2808714ae92989c382e8fac295 0ee43350dc319aa83fa4039c1896f65bf0d3f99cb2c01e35822540940da4 8786494612c7bac3490528087ec5ef4e9b98b8b5fad119436bbe08ba0858 d4368349bd837f09c08d9770ea45b8766ebc5c051fe0f63868664ab5eefc 7b82057503eb97e0e1386c9490690859951d8c5fbd4ab4372b248d4a9d1e b2a5ee3a2c81283675f4bac0137bfe9feafc4dd1f6398ed3034db067a1d9 6579c978b2cb30a466f4f1c1cca8d9ea7017459fa93b2fbdfff226f5820f 0d260b7deba7eb57a35a0d8e7d1c7043eeb51ce91bdac412d5da3e2b65ad ceedce18d40e97301d493bcfad6209703bc21a22c469d08443e9ccd15ad1 01fd21c68e3982c558f6fb11e4f68265c0ddffa68218df587bd534f0ed5d f988bfca40c7bf7385c99365ea2e40419aca6f1897d8ff11d5bca1ee80d7 6feeb08fcb381273b6980ef3487d49231b4f7ac7ac97d02baaf1412d525a e6eeecde894bbca8b17a7001ec95bbc96260c32693b112653ae0f26e471f 920f4759cbc2995db0deb5390c88d2833e6e13535307ef7e9141f1f8d004 7fd452096ad687ac30b06bd69512e7cd009aa2c7f43754687a2cdc058535 efac6bed4e0999446b5531b53b77b6070291d08902cbfbee1c06319eab17 32a1eed556737e4b04b03d4460f5b814fe77301a9b589d121096e279f6af ee2631790e7148fcc94e1fa86ddce4869f967b246d94b12617abae2d95ad d102898d3433ae7de4dd1a0b2078b6a68d6e0ee1832e5d36b8308d93408e 6fcb8ae9f4c6b525583114795bbbea39df033f8fa90dbac3a4ee552c7ed7 01e1f5a7dc411aa9b527a24956326a86c36fdab2da6b3d655efeabb60c89 fd2b50efd688b76112925fd94f66289fdcad0badea45c3289b7f147d45cb 79ab08fd4890fbf5cbb8eabf2d703be3826f5fd583c92a894c1ec9dd8534 a03d63e1869a7193e360463adc0d7de4b930ce0631f2b7397413809f1e31 43e6dbff1271eceafa71dbf717559f65f64f61ad7d993131e2b5c4e326ec 013389b5db81e17428ef9716e846794dbd830a740097ed598b5af04fcf4f 865c897275f8d8a1fed77f5b16ccf1d221e919256935fbab3ab002693ef7 f7d8cbe19d9442e2f482897191f6770441ab62925039735be04a09319474 46187e6aa575eb4df1b8b313b7de574e81577e664863e542c022a445a328 293e4e788bad6650bfb9b6c8a7753f8860c7b3813aa36648bdefa3932474 4463f387316f710f5c08db31929ddc5fed2ef55a11ee1db3bf32e7a737ba b933303a7d07628f293e39f633e024c9df82759beb437e4edec5668039eb a723158ef4f7998b686a86a501dd02d9872e4dbb8467448cac3e42df84ec b92a6030a13d328667ef97df07765ef3b9a3f2a647ed0deef59aee7bc883 009e32c3ee53da421357486e3acdc3a2fa74a7ce1783ebe54ffd387a93f9 b3d25865ecc1c2a250a2caae87e54a465b651bb460884aa7cb857cceb590 31c937ed291a933a0302afc17da77820120d3afa07d502113752cb619506 ffea6744968106c89c84e929f2ef3ba2171167ddf1590af41d7dd0a069b9 6bfc66b914fc1bdb0cef99314d78991300b3c0505dd175a836c0b5999d26 66664ceec520b4e98577c982974cace0872fc10158ceece2322701888e64 8574f51476570478bd6ba8c3218e963b5ad9fa67a18823af5c7de79ba10b 02a1e688e5c29c3a4a9a6c5ead6bb7bf5a1b00b21515bea752086c518553 720906509d8f4bebbe293f8c7aa2c454985a12a662feff7f6faaeefebe7c 6d7d4588e1463babe83bd903151012cd34f95c9c977633cab6b36499b25f 408d7e62b1f8a9027d511d8906a3a82aba2ca28b128c974cf2c2ded168ce 8a1d3a97c855c12c51f872c8ae33ea97bc95cc13159fe93c979a32b05e32 6e2720441beec565c308f2e8880016b989c32555a562ba08f3c5b042899b 1faf9354f1f0dac4b09c321ecb2c662679d6b6925c1d615b10f634ea5cea 4956a2c0df2038f0a85deab7b6c1561991f87198d7bced45cd1522f69fc8 5e67561b3c7345c4b694965f81b156d2a8571847bcdd302e172288dccb63 7726ee2d05601506f2e4d1f5eab9d2680fd58ddb00febbfef05180970863 19e658a3d6bee929cb8d001822c3092b92f001c518ed07f07033ead7bf86 125469b4cf96ead1b327d50034ed6a1a35f3b114298d75b53e694a40db4c 9bf29ddc3923442b9b169c3d0a5350d810df19e646f2305e4eeba561bf85 eaeae51e4d7b81d3ad256e95eb6a1fa92aa429d7e2595a6c87a994525950 0326c3db1f59d3eb8cc11c7feb8a6bf18246863166a09e7a8c8f2f543bbd b5a585922858d87e87962313e72ff2823fb0262865ab2b5eba8a8f1c8240 a3d3864ea1a7aa743a98e09e6a816dd7e107d150471264a8050d023e04fa 481578410f996afc214fa6468d184a591031d57263ffabf332dd702ac4ff b0a28275ad39a468805a400429fa3bf2ee3ffc181367abee6e57c67a4d95 d5016a818f1d8b26e038e11b2d13e54ba4c2f92bff7c502c5aceff584a3d a402f6c7d43d04e0f2f6c416aeb097ff423af24b9e1d24e130d981c137b7 76ea5951ae010395ca3080dd53771e0ece0bfdaef8312927b5c7377c4980 933c2158d476d0fe07870335b0ad61fb0e7e91d1b59a2f2699d13e52e911 3579b9432db79af88a0ef92d3baeaf8c0352122ad40a38b48c2012e0ea44 e7547cb449f5513bad474b2338bd9195cee42a8f9e555c38fa1f7b95fc02 3c1a302d52cc4fb241d602c427315fdb2e0447dc7bfda8939aa8dacd33d6 c4e4f5f4c9ee77a2fabb2e016ed1324a77f8c20c1fb6213e5ca5ec5fec3f 6097a99c683aee276bf3197ebe547f10f4f1fdb04e23dd9d91cc1bb52d63 6ca6459cfd61004dca5a306559c6e4a70391548fba7d2808fba504187323 554fbd54eec1b72058deb6699b3bf7732816bdfb6514bc4d2dede888f603 0106509d691a75e7d88f8f31439d7c5056368d897bd4d61d691a83b54537 785116e1649aa8db4f30c1da1f453f7ed785e9cc5708d9b0ca0ada30c953 e196ded7a466249690a03535b2f9ec9df1cb5e6048e3c5d6faff46c7ec1f c7bbd530f9fe2f3b9316fcd8e96de30e2f4efb2434e948234b2ee73ef687 c6f2f62b053b04299b29817ef3d2880fe57f73e9dc9121ab995d3ffdca8d 7367c0f201dde1069f65a227ab4826d99cee21a050c971822b7a55ad6e3d eae6bc81b77c675e1abd74fee7e6cf103794c29aef24e5f525cfcd85d985 d67b4ced53fae861b34726f913d9cc8357f0cdf04f1d69ede6fa446c216e 504507f0525cc36259182e8f03d67da3530ed98f284b975fd3c100d5f4d8 7ea5a4c0e6c8c81999ee704df78571e1b790f676c996c4e96fe2aaa69a9f cfdd02b22af2a316937af3e98a4fe7d2356469a427021244b246d5936fa0 6de8d2dd0cd59ebd4d8e3704aa1bdb76a797f34c044e78239f35c4b188cd 196031443ec706de2a02e324ddf734dfc04589a7fc27022579c93a516f2b 223b90536cacc2a78c46e5a04a0f3b17244ac50026fd0fa59a0d43007834 deebf087656ff36faeb0786a083d2cfd974033c8db66c3f052b49e75dd69 112e9bd024539ee01536a9971983979b100b84152cf61da5c3dd4381d205 f80ef1237689493f7cbdb69f8509082449ecb946268c2cf350b3fd4b664e e10b63364327b11c6ad9295efc7c92a57d7e92bf786b7c3470fa6e18ce64 859c242258b85d6146f04a5be1f876c9def36fc869db7a34475e511f534a 3bedd69f1c2a78c073afcd7efe5880ff4d8c05908e45cd5e2df810a1ea27 b8727a076c02456e036b9f85cf9cb96e83f87c8cbfbf65a4de6e788561ae 2c05a55012019991bbf4efcb93a1d5f76d2c373ae4c7e27e37cd4a8b103f b4118bc628eed5490fdf9b052028ee4fac83de476db0bd78e8b2d4dfc5bd 60da73b031cb8e0fed97d9976cf7b3928bbddbfff1b471a9e7df5b3265a2 e251389afce62266d8b2ffcd7bbbf43d803f7a287559809952bca75da0b4 35661b3ad6d25a4c03c55771ed4232f06b37c41904574371d27f680399ab 14cd7c75eeda104ed519584839ce0339bf6bc5cc42a5c4dbcc59b43864c7 ac859dfbf3621d19284637c4399ffeb7cfdc8d02011b58bc269bac8c5cec ba489a7bdfca42080625c566fe16f178094bce7a382dcf859090991c85ca bad2b74af1e805724446acab13d75e4f9424f3af64a6f01f0db9b67aa027 24fff51c0c1c6eb83eb3f9d3547e4108981d73462bd3383da8353aef3eb3 1fdb3490c14ccfbb531a83bfa6bf969f0f658c642162fb9386669bd19bc8 eeea777ff6301858719a5a2df8820ab9e8be225001f07de1d0558ea23660 593e012d4fe13bf01add65ce3c7e7942ec52dc814b424fd65726df766a69 134192d4d6813fa53700c18c67ff769f7f1af06d48061ac73a3e3920aa6d 1a2b43d7d582d38c6039b15fcaaef62d43f94a665745e2ec204ea0883b42 c40bba1a95891c23ebb91ae10711f177c965f28c495bbca2d55739363c0c ec61a6ee48a77596ba0cd63469276a48c489f1f265747a2f241878a70644 23433aa77a768a3dab05ce2df1eee43adf71a018ee4490f8e93e0016505e 0fb695a3cc9f6b92889d4d9273515e30ca618a64a11327a695425a850abd dbc0e1b2c268c998529c410e371a51251fd27feb64744d64d806eb9d7686 74779c1ddb157400c8e6595118b7451812b1e65c5927475296d0ad9e54e8 60feea07ffee65be29ce0589a5d395b7a93d094d8ffcbd258d92a8276d02 9d2961ded8e93910b2545eaac27820d498b792aa6f26b630db498cdca1f8 122fda99fe16b5f5b3ba6e40fb48c2cee2a123bba7701fc6e30fb42a1813 69feb1b2ba297bdd5a6902f6e3a37d5fb6dd000ab5a9177c220c0275a89a 344ca6ff2bb187ad19462a63fb93ed3153a12387b923ccbd7317ac222d65 c5920db55d7ebeb918b3eec583536245a0036e5b04263ae987acd504044b 3207b7a1ad017628d75a9928c1af3429f56354a2c9bf01e2b178af18588e 520fb5590845c84561d3da0e504cd7454e99ce790b7f3aaef4993baf7512 759a98f0e7438276f4f8ec6248e3484c842775adaeab06541189f098b04b 1d4874f1f232f931adde0ce14265a8b298614449b1a7548883c04efd89e0 c8e8832c1443c8b914889caabd87be9a600b7e97cead30a6f805e7a5d601 17ab3a170c1e386dce8916ffbfd7313bda01a9b34b4332bdeb85a1b209a5 0133e396d8f18b4f33247d94e49919426ca409a61e48b7f0303d7b6657d5 aefd18808f9dcb211a253897a598df120f12eebf5f137aea20eab456f6d0 e4058fb34847b6cec4dc22ea55f944a973828dcf5241ed8a6812e01318d6 d5d89c22b1fadcac39735095a31bbf3cdd9236dfed16295f35b8004d3777 5a510b3f9aa879b2b28e4a3b17fd955dee8b8b92ad1618e9a347f3d674b9 bee9f6f7be3c79d3761e6f1e29a2a0e5c4e8a6074d6773771397084eeaa2 6f837246a9eba3471f985d01e1550c5264785d44c934fdece07ae91197b3 dab82a9ea316bd3e112bcc88bbb521404c14e41063fc9bdeeaa0a27cea0b 264180924affdae5d2205e9ebd45eea46836e78729951f101d89e9a286d7 214f54c982da3248a053ecbfbd4ee8ca18f182ef865be4f488f6b1844ba3 463dd3bfb91a8302b71323c59e0424fd3b068ad698bea3b9e2b5a85333ef 933c0625142c335dea00259d733cd071e6d7ec70847f405648e9d59816c6 9b7beb4018fad4526f1dbec8c1caf4e80a4b5248f9460b957d4b1952194b ae019ad383fa853d8028e8e1bf0d982cd10182fd9e9f6bf6b9433c149fca 759c538dde6249e2b4e137f3a6297a4b187e3c76bba684173bcace60dfa2 567750f795346089c7f36df92ba6ec7e8d7f72270da7db4e5b313ba9795b da6e0cef76b87b54f2a88b0a33df2bab6183b2a6914655b0fe6b76f1adb0 ee5dbc20aa78e3e3f4d024005340d6129422cc722d00c56a20ddb117ee9a 938a72836c15ce045e6868937dc1411f7852030a1991e0004a9ee0e03207 fc7ba9cb6ea9d3464515a1dc0f99b3c25a26649394384a87c50a1eef11bf 9b0f2be120b0c058e26f1bed0fe4efcf053b1431fe9761235fe341025938 e82a8effb69bdb828442718fa8bf2fb37e22b4349ec38f596db80b4a8bca f608314d4774cb2900f1b192936b48b07096aa20c4cf11ba8b0c39b08060 827a1bbbfa71e1eba52a316d480d9250a1eedec58f27b9787f44c9c0f1c7 c38e202f3ba16f2fdfe53e6f244d972e496f0217b42a6e30946f0c146b9d 507e221456699f4dcab035bbccd190b8bfcb00046d964fc35e1fe9a2ee4c 4ed1f370b729d6bbad3b07823acfd2fad4edfaaadafee78e1d8dee0cd68c 3269e13ae89cd1c702b08fc188dd6fb3861ed537cfe4b321af26cc923c4b c9355cd59870b800727b01202c53a1c4a06709b00cd125fd0163c48ac733 41e3710867fc8e8ef83b41368b6bdd11a8cb27578dacad1b85f03d52337a 6f4897d38e4e9b75241b2c554e96faf9991c5fdc668c7207571b1602e439 be3c5477305b88ac132d54a5a9c90bcba0787567198fbbfee14bf6d33a71 e33519729ac5a8924fc827e1683411bf81af179b02463596bd2678fcee79 6c25990edb92f5924a967d6fddcf9c50c99f5e00373d0db4d56f014cb5ed cfac8783e757eed0ce31a0f4750e86873bae359fd78cc753b7669bb74cf0 5e85910514e701ad1de213c21b8c2466544ed7b0b91e4e5376fb794c3d07 3fff4bbc2bc4e78397d73b38175b8191580d41d1e1924a5bce135249fa14 af88d918a00586245fe24978296a6dc1f95d44af0db56f0d924607118f8e 3da45e47890f51fdd0b453f0c1c5f8e603bc7c1e9d22efe693bbbca2f2ee 693ced5ba74ec79c63824245cab90ec436223045d4e709858d3f5fa05a9d 5fffa704457ae2d5a1604e4c4a0fe67bdd56a53f1930702d622716c79074 a51c312f0f09ceb92e30bfba5cc811064f0b59ade255e79f0f95b00eb087 75c66bc0007d8021ffadea678cde196f3847d0f980a93dfbb7dd56513a6f 8233a28a6d21bc95599e2f792673ed7204eae53ff4e796b220e75792b0b6 b623f7c184469675b18076cee55f21e3821ae7fbb1aaca4cf377c847defd 552d6232d40cff4bcfb0972530ad13662e2aeb28e9d80fab07f12b1b15f4 2953ac45ea325cca6ff332ad14f4ef00dfbf16e9336438672058de371a28 faff08194f0fcaa29e6ae7f5947703ba00e51f1b2dddea3d68861c8cc243 e10154ddde7f27883f0ae985cae203e6f352ea59c4b0015d03f4ac50d0c5 ef290f812a7df8704ccdee031615431bbc4f3a43f3d4127a1a37f4e71f77 8d4f0a4e88a0c32460ddc818d83179bc2d82925fbd448ff995f98b6901cf 802092c6c39708f6eb06844bb49d4a0fcee7b11a3173dcf7d11a687537e9 b180bbcd53b6a5067b6a406591958e564a1f5b0c17024930df1f22e33138 bc84b181f140d8e249ac23bf4b6a568cac82bb4b300d4126149301f2bd61 c3aa69185a10a0fdb094bbabfe17289b0b15c33c672c444deaa50206458c 105476760e2ff01e4559604af6beae51ae12942b8d9fb8ba73377047cccb a2376f2edcb7189d78c024a1b6aae86458f766ca17c866db6955a6b2feef 168254fa59a3901dc8b66db20f4488f1b74c2a82b88d474fa9c5ea56f4d4 3f9b6e5adeb7a4f39427d32813a55cf47f253f7037ddf06b574401cce611 991bcd40f60cdcf7669babb5df65049d97b7a1c67a2462c77ec0edf68f9d 1ef7c919912b9aac60857f420e5e594096b62f97609fdd6def9695cf004b 476699919b84b31b7b0c53d467d0fe4656e33cf647a49fa685d0bceec7ed 88e6d34c7b03d4ccd1b03cf3887afe6d1d47a660f279a918d72051db6cfb 4cc35b22ffa6dde085a4a8b6617640d601a173b935dd21cd8331f80cabba c51cfd69afa0c6e1ade92a6e3d7a90b34002e454be43246a115c40b33884 7325e3f3f4a29d01936cdf33e885a705218223ff5f597f8c61af123a2def 0aada7436fb189c82f1821a404cb0933a543032a7c7269a44c8ba95e3d39 ac7832bfe7d60c50255c59461953c9f6c3f83ef9402c2f38540761994a7d 47ccaddb42679d53e524341d86468ee7b4129c55c0a3e608e190fce94213 8790c78fc770238bfcf7af3cdadce2fe6de0b3d651fafe09e67c0e887f29 43aa58f968c1792b1e8a7481c554e8727ce8fe1d1369bd52b5595b333a06 631e0b1157a2afa8283c1514383087f56e59208ea8038fa516a77a4b550e 1e572236c8c9c79be3ba3702150af3c1afec8b0cf8a5a7e1994dc61de0d9 a25721ca6cffdc888916dfd8cb51d1fc18d0795fc0574867e7d057b246bb 248cb759e5f8bb98e5a29342d4c808765d3dd967b7110873bd30ae9a5d3e e852571a63055c72850454e3194fe40bd058d7b7a624a24e9a66411327dc 55acba2831708214e5af962cfd3cb4f0d7aece2648466619c89cf90e9fef 228a509fae278673cd16d3adae95b437290176b3e0b5466949d4311cdf29 8a1576c1c801ec0d435b8514a8abbc574e1d3d3f3f97da53da405d9832e2 526e3616a53dd422d17ee6f466f1018b343ffd8aa961b035f8d6b2992755 7898ab401f00b9c64b3a1a89cbeaa44fc21159effcc291b05412c20dbdcf 5760480b5f60aba3101a19bc7445c39e86047fe4d4920aad1fca8e8bfd74 431cd017b502da75d209571380e7572ba4c1f828493c50f0448e1a3c04e2 b297ca443e9831c88820ac7de1cb4b9ce113f622ee576a5f4dfea781e0d1 b05dc6ad3989b3b8308a38e9cc93b9ae116382105c3009d9f8367fcde3d8 4f0b5da670e1331d3e68bfe2180e04a16c33a258f07244ad9cf56a4f9d46 f02644fd2afb9122443b060db89944f900d77f37fdaf7f2f6dea557eb6be 0b1025e1e742d0f510dca865a571a631329fd1c8475045897c8555a5a148 9b845a1c6859260884f19396c5b6befc12165774678b4fc74c5695f7e73c 8426e988bca8b98e51433dd76e0b94bed505d7c8108b55df1a81dca38cff 885aa045da0e9d921eb013e6aafab5ac1528bff1109da71d853eb835cd90 e9c2599d73c812e82959d741666cb6133185c8395ac69732a49e73874b3d 7b7153014fdddb907112bb2da5e46162a1d67f5288a0f740abb4e4bb33b7 da08d8f3dd15dcabe73027f418b8b66c79745a41552f95f784ddf46233a5 a6e73b9b6fb2e09f0e9009525fd449aec93bc9e214899016586e908029a3 98da590f47f3b513ec08173d71588a0c196a583a6a02ec3418033152bc35 e711f033756d803ddfa67a103e41bd54f8cca25283087e6aeeb53efa40ce 6f11c0535cf073634fe00b7e17d7717c9eb78c4b42b3dac39855931e8936 d156ac0d79db34c95a84cdfacc5d7e104ab8bf56d63c8d7cbb66a8a24e93 b02d597b16e687bd30f1c3425c415c1773327637ffeb4c02cb0d5df5d8f5 b0fd857fab47964420b7a7d2667376912c04d48cc33b177816e83bffbc7a da7dcffc4c17eef125c98e5326c49490def7b1884f672932ba3bac55016a e06595fbd61aee4281171d716dd7ba2f3cdec592628472fec04bd012434d 6ce8d11ef257564ea711fa4e71f064aaefe9ce4147a9cd1c4f12145e4720 cb3696b1c1fb00fc87549620c9888de3bdb4ee52d9b8769601503369373f 9a9b33bab4c9747b56a0b356e93b2081b432be5c6e473632cddcd2c2c7c4 4f87eb4a1746be209c53705f0487689da135ebd29c539c3b9c2dcbb53328 b3114a0fc97229ef947eaa7011e95c48e9647d7b106513fe57fb00052d13 f359e40709d42b9d074f17bb33b7da140bed7ef8deb7e1ceffd7558991e2 863ef443691f69f1eefaac647662acda0ebc8aa7cfee6b21b3ce7122c8c6 1198fdf90c1bb94328fcc896c4bbe6e0a71da4415842c0a0dd6facbb4b0d 9c6ab548918b3d97905f5875bd3531b2b5f0eef621b81064d2fa5117b6fe 748cba72611f6461c08a9dd56e69869e965b40e42f5105629b1b892099d4 87d9f8e116587a22eb4e437321d8e5c99ba8938d4fc11d8986108fa09ad1 ad6bde1ac5b3d6805e93dca2836f98afe8a113378495cab678a2dd3d6889 f2a966d580b91e152457ba0ea2ed319547d336843cf04f7ab8e71ae7ca1a 9f9db0d7f087ab00aac58519edb24e4b9b35c062c225262c2c7c2d70e2b1 1db4c516276db51c9b6664c67ca309c6da777c0c08881c0c0fad6c854729 2f044255a9d2dd540655e4aa4376ca0b334f28dafa47ae506e7dfc9bdf91 470f1f5046ea972f656dc7f571c60ed8129ece0e5af57805a1f965dad87c 8e1eba4fecad1f6f32591658f4666afe30bcdf7e64567c9d80d1829dff3b a3973bb3eb187d60adbfb03f47355be2b54ce495e3be43845411a1a6bfc1 07bf8b2b4b9af6fb33630c5d15e91ba14ba1e929152d319c56277a760b85 5d65a67a84b8a5fd316ce7798d747eb94b00fc749eea1d3dee08c0228e84 2ecb99060008f4e7485a666b36cec22fcf9be9de529bb45858657caa0252 56b6079eff5407dac219c4503e22ce5b00ea7427499097d806b4286d2114 94f3ff1378477d0e8eb080338c71ab89d5fb9c9270da036afe827bed8d29 a02988e78694f4d0cb3ead82435d32c77435c9df53de05e15f5e441bcfb2 262080e6ce530032e7a7845af2db298aa8f817d11a193739470d2488cab2 8381714b4ab0b3f3cf384e033cde56e978af4f3ef7470b6aa8f3e67804de 8369f1aac06b13d77dcee4a325b6ecba22f13f695acc1abc34f57eed15a6 95b5cb5e5f32a7d101cdb5e113fff78fca36496ee30eb74398d143a4329b 4a67ff94567dd3f9b3d4f42d8664f56632004cd3f88a8f8ec5875727c3e3 638762e658fc9951512ac3e823aceec442ac6847f2b3291de6c85768f21f 2ccc151e4afe9e7c4d3e565b08f0a3a092947ed3ce9e9405afee9511e1db d7b7a8302c648f98ecad8c879cb745a43bff57feea261990417aec40cf8a e9191ee4a54fba506513bb4918266c94f7a21d4da688dc4c4b69b2f012f0 e253baae619154b09fa93b074359d9527efcd38b7a63fafc34c6e500b8a3 903e5afa607943a9bc2d4528c56eed3c6cd8b61d7433dfa17354cf46f90a a607b47d9694ee257b1567eed3dd7565c4bcc8a605c69010d1a441948606 0152ccdc51a951120c9f95d584c11cf6b2fbe943ad36e92dad1edec7009c c7ec5ee1eb55ed13b16b932525e99f5834c4fcb9f44482f19852a81cdf14 aed5632d0345e18d827296938139d9717a946a8844b503011b700000f200 931b8819d074b780bdf330e15f57c9a5b713e41a0306211c93ffda85ae60 e6640ce1d20ba0865553f5cfa928fc023f9138d83b848e819175c41424d4 000531769d04a124fed746b10eba55bb3439884b27e61664c83bee6464f6 ca6ac3d176a2680502a062aa2ed8b2cd9983e9e52c20b8c2309fbb744896 aba7e6ab62fbff7bc59ce5c6454bc183dc54eebea0be39e97bddcc797708 e1dfce82d8eb3552d02f6cdb3575b61729ad5756e41439424be5919a27cd c1385070f64b76287c1f1047f47883359e828e571731a44b0c2814f0247b 7b0ee8403dfc1a79fd561cc2fb575451a3d0aa375d13752d7f15918181f5 65602361c2c5f2da1a8adce8aa34d8d7f41756e43061f054ab56c629083f 9eae544a4b51a40d61053fbeab3f096a64070d8e052f8dcb5367d9fc51a7 7ef953100448505e73717867ac4c70bedee27ee145b5da4b6a4fbfaf7245 d820cb0b65975b6b2c14692c8de7277579eab33796da83c23df95f6cea46 4234b93ddba021b96df9833aaf175ee2e00a4492085823ccd6ed1746f027 6d8ff470c829354aedf8683ccd454c2eebd5cec506fd8ea909d23e253c8c 7995736a1f4895cfd302eb5522cef9a3d16979d5cd38467aa9c9b794826e 7ef50bcec5a286683b4f5e5afbe0975b45c48f503de04b15f806f407dcee 8b295ca5f60f6c907c00b17957e2233e6fe3c16131ff2a0f3adb7c06787c 73b45eda3cf7e8d853cda7cea4d5e75a620f676abf517e30fc52f97dae4d f5adf693d6d4c3e9be090f784d7cac72c6de175fe45debdb0701818900f2 51905de1d2f991d6fe87248df0f7ff46fb584d6fe18dbe5d40231d49fec6 851f356d68f03f2e01e50ee6155e9b5a1f80d025b7a76569b518b4a3c467 32d9ae3c38da3f3643ddc6352554f076e5c17e65a92d234fa8a59fc00a7e 47567551ecabd73802809616beda5aebbf35da9fd2ce9c483b660129fc76 17bdc789060ab625ef3809f434acc1c5f5b706fe6ad8ad3bab38c74dee73 2443393a3d6296d68cf801000909a00cdaed28ca384356235f856d68a119 ddf1cb416fa908c27df5dae093ab056b28c6c041b29ee521879e4f30385b 9f8d6ae73ff06a09aed4f38da984fd1b103cbf89dffcbaadfe1af835b7bb 637f6a2ce11e14e59813fb0cdfc9a340eac682d07e9b807746c1e86bb5a6 3920c8a44c6e69c81dc3b5863a543b297cfd14574d3420f25defe6e38660 d415a82f1d1ba2dd859d00dc19c1f83b06fda044c9a3c423d4376f440d0a c2364f4eaf6124f24d2ad6350287eebe31c029894a65bec89c3626377e13 16251fd3193fcc24aa71f8c194246313d56543008e2ee3e1ec5a3d87bba7 70fae77f71b459ff4b6ff23bd7aae5e2721fddc434a714216efbebe6ef6b b2dee8853d170fffc464b917147969ef83193e431f54591b4eeb1ab0ae42 95aa9f2c3e946b3bd5798857081f0ef2f1b5a87e1f262e02160418d718ed 215a677b41efa3892d8089bb3994ad63d63c43277094159701528359277a 31efe6168d1b7df54842ff9ce7f895bda58a95ed59c329f73b045baefa1b bcadb939c3e1c492d998a43d47bc2560167d1a96a1dd0173b8aff01ba255 8384392b9a7ed737edcdf331e1c9c2dd9b239be9e6e9305f85357b300848 ade1f20f52f4461ffc2ab8b442e21d95b30898eb389516f7314c9cfb3f9c 2dcaa12133b5b601d1f21fa06b672eeb8ebb47ce77c2e64d5d6f8cd4f07e 93c54adf76cf98b9ea6fbd1b946a81324a305fe66cce1ca75e9c0cd3fb30 e5ad8c8fc00c2310c2d90ad824c85fe7b5c88ac54268e19962b62ed92027 c031eac2a97af270c227d0f384af7257b3244550acf00bce930f6409b1b3 fea760daf514b07567509cf3111e0504c4924fa41eb2be9f4381bb511b7e 6fe5d9003e286b69df49c2d5c543c833bfc8f7bfb7b4dbc138094ec454ae 3f3eacb0763699d8fcb01ce0006ffd03eb814ebbc29cb05cf89c5c6cbc9d a113b94863845c366379479abbe697983e4f14463ee42b206ae7b7aeb0f7 9cfc91bd7602376d8a70e2a39bcc5764dceba3d048b7ea062080f31706ee f2f218df970f123c8e13b1fe2762e834bc961556bf990a44ed98494f802c 4e4b8b400fd1357f71adabe92f0911069efcbc13069be51718b0bd488856 3e3e3d7dc9f3415ff716410bc06e25eb8f6b585df2109ae2d8d9a99c69c9 71dd0ac0aa31f27fd0128dec42d9c7649ae94a4971c4cc006606a693c1cb c8ca615c312b70d5dfdc788a91b9ae965f610feace9982b1aa2bf72c423f 061efb61ff47eb58480069a1bc01428a29f72b3f2fd58bba0ae257675f14 63abff37aecd69182002d4363461567a476f329d1038b4112d314b754d95 671560ff5baa66fe4404abbbb5fd9706b1236a4447d0e2200e45684c6393 75a10ecc37008d5e02773d8b3f05cf86ec8a779d264a3419eea603130a45 8539255e45c427705e242e01c0445b56755a28598f8cd515cfda25de48f4 7678ed32efa2e3be23e88779dd053373e20d1cff562e780805a87a12c31b b1d9714b92e180ae204b99a9798f090c81d991d5650399a143b20bc4386c 7b9aefe233ec7bd48b0ddc3d26c905676826fb352a88e98158207e702d32 726a20462a1074d09b37829c0edca1e49955dd13ab30454deab2f65c7e3c b4b56e6960be53d6937f7e63a080dfdefedecea0d88ed6ca8ab80466e3f4 6555bd628ffc68c55e61e9d6d7896630b4ea408aaa63f1ca08414979dc32 a199b343ae9967b2b397dcc47de3befc0cb885c1f84aacfa5e67f924ed72 ee17aa62a4837f6d2b0479830c1fa46eacfefd490520a1c88936fc7cb9f2 386703f712e45759bf06b40321e2d023ae40e12e0e4906c387d8ee954fe3 c63571dd9e74110c06b3a54e1938b57035d7c6568a3fbdc5c96762ec5ca3 78394be987bb6b50296c4a52897f872dfe8ab4d3846068acc757b6119fdf b8d68daa23917255fbccc46d6ad60fc5ce686aa14fa38d0d6b9cc611e3e3 f7e871f2c4624631e6506ecc8b7904efbeb2dcf1811c87f512fb68538d5e c0dfea4af47b28cbc43e2bc4bccc850ee9c0cb1b80c49969f2779b4cf664 efc7f861bf73c2730ac2eb2064ac240f2f3b866d14e36d6cbdcb9703d333 9de04044b54fd85544a58a0d298e0fbb7d0fa30539d45e466c394e28a4b3 f1ad6e165e16fe91f24ab67c9fed2b7031a4f0d02fa8d8b4e32da0c3773c 923b47e8d16f4ec576278fee14f40076586aa4ab91818d2445fd5a5df184 fc30402563832d7ca74968e0f57d7398831cc19d9190c8e865636e5cfa75 7a13ac633fd8b7dd6f1a7f663e7112903136f785add71221c2541984b98d 3c70c5458132f2dc98881773bf6e38fb8f84e72c0e0375c3b7ba8230ce93 79b86a565cc603c6ea0168524a7aa55148c3f363f77e4b29858668fe5ced 96f5a64e6059534f4548566be9ccda43b84a7450c26ef568db387369a88d 3a004be9068d74aa6a8cb1f0d797bb01d4a10a753b058b06f3aabb121c72 0aac4365394931552ba62b2564bf034aa19ee148b3bde1dd30ceb2a8b899 4a5a2e1cdbf72dd63b4ba66eff387d12ea530771645710c734a19274b42f 74d23b643a71863deb1d5b602778d210c9ba1fae61797e86542e15d94a57 49f1367f7779f6dcbc26d3aa3daaad6ca1b2fe8c8878b8532ccd3db23dde 102cd1d860b4f6a21fdf8c621bc8dc95eab4fbbca1af2ac2601c8c2cbc0a cd5e7c7743f847d619345401249ce1add8a835d95d718b789ad87d78e026 df89d3535c8c6752bab54012b62670a2ce0c8d8d2301e335707debb7ba57 22421e932d46ed77f53f104a9bbc2ae671f4f52918ec3715ab36ce82af76 0ef22afa09cbff1b79affccfb5a83f318bd7c2f8e91ed6870929a9c3be02 826cb53d4f6a8210ea4729016ea7a5dea6490a2ee3983379e52b691c04c3 d4c7993312977d6600ba61d48c146fcec9c485fc65a15bfe66c7c144dc59 18fd7949ec323221aa190d2f6c630cebbdfe98bebbf9f64cee7768a761fc e0ffbcb173cfb8aaccbbc97c9e64ed17ee0b5323a575e10783f7f495817a cb6a5bb491581ff17aff55d604f4ebd532a0f32e08d21f50e9cd298d52e3 b101a10177c744a92e83b19d40131e10756d69d3f0ad0df31f014e6b9886 e4fac3cd9ce636a093007245af40508f4aacb5f8d23b55d05bbae7f684de 585db923535e83c8212f3f1850095fbd414297947335cb9800a890813a2f f307a54c4a87296d8b7b0c378a147ae2a46ef7b558919d86d229cf844f9c d60de0840523c3e305ecca8a785dacd1d50825947ce1b0b483c91c6c66b6 6c72233f347a26cbedecc319fa76256d93387bed903767257e52d4710e6b d1326625d7287750af1af3844f5a1fab4dfe22b3487e6070da6ef2dbb2b8 1b762666824ca3d35deccb0a0ffc6c07223323ebeb6991724db3f5310626 ccb4ace03f49ed9f24551684c11bc8e0db5845bbacf5bc2f07cc033540bc ca37fa6a8f3741c4e29ba08bf104b7b56c14a6804124aa3981685571994b e75d0d4b66ebf0b98025b99ff239e2a4f63f6e66e7bcb269284cf8fa4a00 cea6daa1f90a8a988857e565095eb561222cf498728566e9e1d7bf110513 a7f6851df11bd53ae98519b0ee996354e09a2764afff7282a06aad6be18d 9c1436cc61c77c1d9af7bf11d58c3d54d672e5a422e71f43c245d3030d1c b6476ffcbd720cf219c08dc4bc4cbfa5540b22f062b233f1532b33b6c23e 22159ca2457c20e0a073ebe7f9b9796af520e8efbae698bb8b7db2e9c655 35474eeba2572af5ad55f24a99651afa0d775d5a2297eb93835ec06ca9f7 a842f4159c003fdfed376d7690f2058c09706d0a63a875a496947067ec04 ca29ceb8b562df4f289f67b61aa11646b281141119cf0258985a9fcb2d23 704f0b7121b918c7e6928304dd8f603ba66fac82d253d8255267c8f00168 ea5dc90ae4c974f9c0498f6ae975cc33d67d8c8c23e5a620f4fd87fd253c 7c2640139badadd6d4dee7fbf4c08fa09661a62e464fe65352f56e782ece f000f66beec2d4443509c69283bd28723e63455937d8869d4497cfd90953 f4d896c77d413ae70b6e2e081fe18e5a9be1fb726d48c51c2f4c49765549 19784bd559d6f13ba9fff34250daa5cb35fe765c88005bad274854743fc7 9c10233cf14deb0be4e12e8b0ef61ccd18c7eb4975216c6df39e82a653dd 134735b4622e1ee31dee6d8044c23c18804ba094cc6c37ea1cceb925652c 0913852998108a4a1c6b361577e25c0ceaa5735fc261486fb0eba52d950c 770a04a20d31e370c9b5080172fb96fbb20360c62bf814287c27d62b154c cfd9aecfc9fb0b4adb6acad0520cd4b62f106659c72f3eac43b711fca577 5e59ea03d02f2421f91b90aa2bcaccee12a9e5fe3270b01e2c858e7c2d0f 10ec39ddc2f5293190b6d70be37dadae6f4bab6c243823220accfd2e28cc b6592f325691f2d2f4849c16d67306da8d2018b4a73bea4d373bca1296d5 25a5d1412514e905203db858bc3dc674b7f057f12af2990afe4d35d0cebf 827d3b63146b41257f5f48c633585a69125ce5afb236d35494f3ffefb0c2 512b480637df03ce1f55ec65398ffb16306d16225588981f4106fefb4d35 69f85b92dc908878c8cd0c874b3d339cb2a77b444841189c7c94605a7719 c7c1689d17a88a65dd7eb44c23fbb274fed95a6e4467d17e8f744b92961b 2dbd7bc78a073c4da71504f1e8c6956b4753ef2383c40ea60e04f7f86759 b9dcc29cb95e15e8d911988d54b8408baab2d9f71c30592bdd01472e3f37 0f9d4f3340369dce78ebe70af02a6ad4538916239c7859a06d12f93c7f4d 397e914a2aefa98dc644c41bdf311da08d1d271be22919e7c4fcd4b16974 43a99f2391a48a425ad87bfe428389529781095b6522d6e4c97a5c5b90a1 f7e718ea70c0aa62276798f08778b032bb48205b919a198409fa90951d3b 344d0917af17ceec504d0826182026a8dbbb15b10557ec7db5136366979b b5324d941768593b75002c60f35fb2a91a369ce1bdb5d18a55d32abd55a5 04b2e0a1df61d7ae8e764d0ad422302baff33b76f0a26ad4f986179e8897 0050c0bc72e76870e1c716d87800ae17cb4e2b6023b8dc6da42a90736873 196a1437a3a59dd8fa358ea387785d203925aac389d196431c0b7188c6db 3f3e54b5de3d0a9b5213ac90a10bf91c561694ddfb80cd99b7ffbf25d99e de21825ddf3a2d8d20c8a1e6bcc99314613e1bfda27cc2fca6960009f821 d2e0a9869bca2c7393b1914609da6e5aded71a8bf087d89db8d6e0087b08 5425f657b985adcd74935dff2da15f5ff9dfa6aa08561ce5db7789a8879a be5e7d04e93b7a3f2bcee4d651789b20c1de0ab8a9d8b25fd538f14b49e4 5db86709c5fb5d943fe2b3e64d9a6efe4255e7f53df4d7823a7ca6f6b5ce acb592e05de7188d8ac4d22631dd9d4b55d3308c57734b39e0d3bb0de639 295c873b4d47f0ccf2ec4b69022f89a4876b70058d0b0bf9fe7ccfc111f6 fe9b5d9cafe8ec358b77cbc827c6f60b6015962c80b9c9bf2820fa6bdbd6 5af5de3b3babfa6c5ec81ecd846fae0673b00e6e542af4049681d7b185ac 3b7cc9553ffcfca837e5b17ef3e2268fe2d3c38c408c997467911ec57852 0156161db8a35a2b65a72519dd94b7abb8e75e4c84dd63c79cc0561f9a2b e67aef39521052d74a94f447a97175e146d43d6b6d34e1a4ed9445a99969 9b3a1fdd39bf99823765f783f02e712031244a9ed8f2231c68919471e0cb 082135e758bd3cc157bff2c05a7f669dfaea4bebcb00a09e27ae9578be28 9125e4f90161ff7140ffbc5eab390a9c44d1ae25ed4874cbc6d87df73220 6f15ae4dc7c24d185de78e1caaabfdf36a1aa9a6c60938397befd3a10e20 237256898102db46e1ca78bb7b6aa029388ad074e6af0ef256e895c51a1c b147fa8d8e2ec2be15db6fbaefcbef9f7df01eaca8962e2d4e5afac0362b 5b8b2ba2996fcd6f441e25a6edb7b958652788f5ab0f327c91e265cd1c9d 51c11cdccf7ab5828b4e98766e16aaeb41e82d326aede2427bdecbfefc75 a40d18354393f1e4b0e75bf5d77c650925af93ff737d9dc30cf74f5700c3 3766ba731c8bc48f283de9ad227eb88e2799c3489014f85177c6998ba7d6 9087d7a719e5e1b807273001741094b334d10b1ce5d91ab1c7395cc0d0a7 e759720b1a8e553a9b7eba4e3a2c9e4fd33566710b569fdffb73f3bc562e e983d13da0b3eadbe13516dbddce1859d179b05e639fdddb08000b5dc35b b68c3c079b165d6df2a2a1b783f3063ba59a93fa5170eefafa29174459b3 4034351e036df4af27943297332fdb94a0d96e085bcd1a8f058810e4e4f3 c35328141203e788d71e6825c0809b246da94825d2c8fef1a9953713a162 d821539a7d5a74b147218c987d664ed4b6e158687bc40f1abbe488ccad6c 3c935e56c0712fef630cfe46e9b239e8f17ba9e2e880cf39b61181c3b6c9 3d6630cfe57876c7ed9f30cd4cb16efb8e90c55fe0f8515bf7442aad7554 815c4be0f67b567b1c2a2eedd2d328ae14528e21e253c1997ba917ea9b62 93f1bbdf3c2111b27c12f49e7c1e6f7ffcfa4e09233563a1032548aeb109 6644a92ea67668e46a1b38847ab61bbc4797f74c69e4c89fcd24b48bbd07 ab2c99b7363a4ff9e5fd1f63d59775cb6980ec4f1f82a21e00876090a7c3 b1ea994cf2f56b781684b9c7d3b0d7021c2b0e991f3a9c62e026441d6605 3cca0e037c7d2452cea72abf67bc93bcf2420b4e63dd380aae601cf97e93 ec7b5dab19e4c8dc737d031b7a105f31c1d109d9a0ae710dac898655eec9 1c8c27689b9f6c5e91625a6605c4daf9274f72aafb1bd294985c2783edea 1d5069a0f2902b7f9f048eb7ca6da61832fcddefc977bf83090100551ec1 41700d6a48b9aeaa95107de25b397a1244730de00c797137093f48bbd669 79fda7cdc800d3a3db418991efa6dcc4c88fa1a557d3781a3efe99415bc4 23ad68ee2cdc3adad81e2d2a0918f787eb7d46099f8668c024ee853131d3 7242ce817d2d49d7b165b6fa1d24404398b884076427aa42325d94b263d5 4e93c2f20cf0e151c862b0c1ad158bb77fde60507d0e6d2214d83e916ab3 84a4a0a9e799c3390150729d3950820245ce094563cea58e786cdc7820ea b1417052dbe3bb6886efea84399fe749ab039fa291a0d0f06e7e7d1dac6f 55962b3e73daed0763ac30e3db80d634a57bd5b3a444b9049bf639333141 28765cca6694106880cea61f4cb0b2c0ed1d62801e3f65665c11535dc653 1f226c2345058b9ada27474c20807dc2674bb0847c0be9212230d7ad2ee5 e26fe9f79a2252f21b2c379517f3c4b7e78135ac237407fbd41641560c3a d76044300dda61843127af23314cec80e3c1afaa40a2d07221f79f23cefe 835e5d113e2f570d5dbdf626100094b97ced7d1d2da2cdefba168309c91b 000104aa77fd1b4ded5c60823f5084fac739021ea12b48d633c02deaba42 817e9a400d1cc45f165b800bc363fc484d87c5f45357d056ec4610071958 2d1fb0957326e2572d8e9d8c05b117785969778380aeb669a7fbf181eac9 39d1167744a38a1c28d78286e7e79495abba8d53a32f5612bb7b7a310a9d cf021309cdc8920e67c689f8498d1c0cb378ec2371e9f1efc9e5767fc756 c2bd95a32ad8557b3f6cb68570ed38ce722e783d30c1b87333dac9831223 734aba532007b0caeb26caa5f8b51db53952106ebeb12d7822dd3404e4c3 675fced9628b01ec6f47c8c3ee0ca1b977413cb4c424a1770771f49e3044 3edbd92d32f27fe58cd1e7252ba89e2e9f2fa01de4fb54a0613c18876c8d 09d5db9d8692819fb2f9cc5a55bcf332b75bdd06f7701bb020a8f938a464 6731760090f0fef9358bebf7a508ae8c21432e99b7f99b58f95fc6e3cfb7 357017999ec2c8ef81f6dcffbf30abbe42e19d7cb43eb64036bbd752c827 4dce3db63beff0111454bd262bc5901ab233456796f2ab8d2deb292f07b6 07b449f32144a786e5cf900fd4036962ba2e5e0b395e292b8a096d5ed4b7 a41d677a93bb77e08b39ba77a46d465368de4ebef89e975c81fcbeffd80a c1e701a416e566562adc89cf698c61b8adba7a8d3ab07c92e5789e4b27cd c7d2e8a5f0bef798690f0f9a4531261d5fdc25e792a55ba2b72ec00996b4 006f3b766c6b89960fc4c3d9e7f7f3a77ddbea36e513df8d576fec8b4703 1c2f9014bfbb4abd91d466aa89fc521e4e61cdae703a19a0021f33cc319b b73634243b1ca48d3803d0a3b05a820b55fa798017bf0fdd13450bfcb2d6 8b999b92534aaf0c14280e1a54f46b5dd079ddaec97781f286ab7899a102 4a460303550573d7a4b47dfc8228bb1e12a886e331dbc63407c14bab9aff 81cb25ccc8274d38d73921f3a8d5a7f3af3893657a67a53a2a3c30185f89 ba992a3a3fa8135ab075ebc8b8cf3425ce48f54267fe5b9d1a815415779a 928c8a7f7fc6733db45af13ba45762b10ce8d1b3368fafd4bb301f952969 524c666f11b00090d1b8fda5aabc278c38d9f41c616226ac46749079ef56 67fabf1f6044996a0958f414eabddc8ba950770bdc9cb62509d90b0d216e 143e51f8bf07c5ca19b00b8e5c46315673f0d111c067059c8761addb8536 dd2f2f6581ae5fc3daf23ed368607143b29e58c9b8665612353d59bb1552 ef1ddf11a5508bc21b6dec1bcbd5aef867a645f980b59a98fabcc960488e 5b2403f9842b09211ce169197c0e81c43edb53918157a1f770b5f3e53f3b 8fb98adf637b941beeb4c596004df1ba32a511b79afda8208c53c048051d 7b813891fc6a76904802cb8e60e887712da9e0b90f56ea22d2f59934494c e0543443885405180d8697e22fd45086f515fd6d2ffe87362ef7a7e50cc1 7ac438c9834a85c9f482e2175fc01648ea69d37176a068029ccf52a1b394 7e4a96db43d6aaf0728bebc203b3b9686527590572c2e45e0bea33225147 57f873a1b18af5b10fcb9caf17a74510dd62de285621140ccc9ba0e2d925 cc352619efa55f1cc87e4798682690d6ee60860131d52699ae48555ba856 b84e53703d009cd210473afecd3f1a8f7765daf88a3d12d6b8a27fdbb8d1 c6db75d86b588b1b67c24c896b2a239d656139bfc29a4fff8a1d08237477 7755a77b47b11c9ab14dad2533477fd4e69afb23c6fc677e3e3ca3a9f4a0 7d51895e3a4cca57679b478ce7168e086ea2f824d92b8b987e4c57f8c422 617be29c1dcdd0ed8dc21d9cc6f34fd6d4ccfade3e3bbfb40ce72daeb0b4 4b04a2ee1f75a14aa04625b4f1dbe861bd457d174fcb0073fa322746a19c bf1b4810cc7242067e44d5d150436f913a64afed47053623998c6eb055c2 58ab164995faa517808a13f174d59ebf923b7db2007a3a4ced9d6dcf4e58 8593086d0f6b261561e6dffacf6172913c8e1396920b62f1e080c0550387 2384c1f36456338d63f84d25edbc4db9889fbf3cb559efe2c4dbcd6b34e5 d10ab591aa98bf559bf387b8aa39abd83a0dd0adac17e50e58a74abbf7fc 68b17144c1a5671e96f9c63b24c877a87ca1943bd9f9702d87ea3cfa6418 ce51f05d9d0cc65fb90a1cbb4c168386ace863aec94651a9a7c556f3620b 750a6c924653aeb9757b9432b99b4e9f5e7897f185726976d5ce34ffb5fa b613c17e2cd3306c1ddad45331a879f35214175713abcea9f8754ee02430 753105036a1bcfeaec70b6189cd546d33c0c8d6e9459967a0e57470e46c1 2274e8159ead3083f43f62883ee9b197dd59c50ca883281bb40f78839f48 be3532660df4a9d7f25d2702e47be4e0de1b9afe745fdd97d522d9427ae0 2a2a72f17f78253e3e39b4ca396b2552bdc1889ae4b2fa6a53b8332b9952 6f8d0caa88aed3288abd39f351b422fd2869e666ec536f2339a5d520df82 85cbb977905b6f65ef596a7c57d96aec3b7750fb5be657881b2cd0c7b114 c59d60fe724abe9bf281f26eabf1035010a3bb018cf1e9c633048297fb56 b7016ad3ee510fd039ed4845e2c516bab4746ff9e2c5fcdcfab337671bee 72bf7bd195691a6579055b1967125fc8c4ce565fdc116f8047ff832a112d dc4250f5c8c3460466c9f9e615192233c19b2125a730777445c99e705874 22467ab1f4baeaa23ddff40a9410945c6fcb67a862df95e66603f9456b57 9d4fc28cabfddfce6d4b79162e070b7be6526e3550fe4cd220465c15345a 599b93b64a3deff68b6eff9cace87cd08c2d0b8b3d958c63b213143e349a ef61c49de74eab49afa0e2d4da5ae8a9e436bf9b1f8cea5aa371638f4cb9 ddd732fd8ea7f58d45d8f8f82bf6ca374ce9eaa393c18e1cf4ad5d387231 18f089fed413c347477be204312f448d821a5b05a1b6efb64a9a4eb234f0 b3b477857b6030df008a9beac34c71a1058946171ae9aadf02af4ab35786 8c49ce8378c8581de7b77e51ab2c48f031b5717c8d459c0fc3a4dbc6e35f 7e916078be4c48dabe2cb000107c3b8463b56b3ce666ef894b061520d188 3de476ab1532414904c276205146e03b0f477b9d6d72238a16a61b4343ce d7537feafbed2e6553780974dba82a1045a6ccf70deedb94adc64475e3e2 d5e7e397023e2c91761a2a92ff019ead83f463d5ec8dc9dbd5e606e1f993 1f764118c223634bd4e04f9c1c3a7c1a65437b0fb9ef1e7eebf340cab513 e34ebbaa0d901ae3ef7fa4efcca30c350a5b475d21777580fca924b448b2 68c87a2f6c2eca019ec3fef805db2f05b0bbc66bae7d9f468c19329ebb50 053f74f6740415afe48377c834559020971d0adc6cdf54f434bca3115f02 0e917c156095f390f19056ba37a0019958bbb7bb8774812694e54557f0b4 aa459afbbba9f7427bb57bfd50eb85dd544af02e574d3629056758a32dcb c6d06edf5abc06ef8587c9ef904438facbbe1896e326efbb7653af027953 bc6744e4dc15ad3e40cc851f5012601e7729727f00e8543c4ad786cb5037 3ab7d47b509a1af44c2e53552eeb669a24c5ab72a65a26a404d41082d231 a6029141b14d6d69c3d15503a3127dcbc43145e0ce2400ca91b0a2d6e9ff f9cfadad64bdb7b459c47cab8d3d76ecd2882b91fcf71ab160c7a7abddc3 408e6c537f44f9c8c285cb80a36faed7d1d09f536c7b8841cc0a10e70b83 7e21c32b7039e11c8791c312b4b31b7b9a1db54625d8aa3b7d71f866dbce 9f4d83d0eb6f5c80d03a40240021401ab8518b5ae70e6a46c9b0fe27e0af 7212352f896aebf70d0acf08c4bb3acde8dab83a4d8c332e228c7b66e7be d8004fd48c5efe7f1b2fd6ba43e9710a85b0b209c088ee5172ce7c8d6b11 1befb87e136a845e63a48807f64f41606c1ed59aa325bfa82e5b0b2d36b7 0b467ddca0d080c41f0d1dbd613fe13efbc205e5ddd1f565025e87c861eb ed7986c7dcad30621d07750a8e76968ad3c8d40aac0482ac9eb2e615f6b8 8a13d5087fe383b994af3cab98ef8998f033a1e08f0522f4837c25d4a3c3 fa0e2d2e07389d697fe965ac3c67e8c33ade218c70d62490d1a0df53dd71 b9a9aab59d5679df6cff5f790fdd8572c70aed395c74605fc5fb76f8f88c 07f962b7b1da376119d1e4bd658e9e4936d3f2e0df3198def1beb1266d5d cd3925c8915af90e8ec6c8c2ec53c626294c5f6b81ed13595bdeaf557e38 4da7d73b6500b1162778692d446e713a899a09664f6f5d6cdec4f45d8669 7f0554877b2484671d0c32d470ebb8ade00e5f8652cdac1c070735ef3ad6 bf5ee14a1b78697516c6cdc934054827e0b686bbd9b9aea49d55e258ae13 aa5992caac537daf0590a1a1b1c3380a8cd31170bd59c93c5433cc12d72c e0170371164178b472f77e0d88c63c62a912805e0f7053a289485ea49914 d6557a23258b4a00740f4766aaa28704b8b3bbe02d825a6daacaa84990fc 4e08923b74641c1dbc55249590258f32d2c8b510e780f3102ea747b59d64 94117f5cb526c59ae2167cceedcc99db7cc5384595d03255f76a74441730 e4d816f8c9082c9b9a6c7af788de15274347e30cc19cd7b1d0c56b4a8345 bc43bc96b4423ec5910f80b287485b2a8c91e1f96a4a8e80416305468780 82c392daa11e066383ec32757dcbc79be28250accd1a381f3fcea905c862 9f3c6dd21a4e8adf4ba2ad53184ec16ad9199e7e4296f044baf52d4c385a 1625953f3bbf4342fe5ce93208dbc9696ef0c3a9ec296a98b58920a6d326 1f152eba489e35f5090b85baee9087aeb86eb06c28de7c056f52e7d66e0d 551977811078d23a18b1e2bafd13378ab8ed33b6e3739f94ee55c7606a35 e2dfe6842490b402ec2f33e78ec1622f5b301bc00dd396f5cf213ca25fc7 3c81ee32349de719fd508f57737aaf031ceb887f71d87d1b1d84f5185a1e 3183b623b051512a3adb0b384d1b0a5a85524af21e1734bf88210f16a0fa fb275de91f70834cd87397ca98125add115d6daa178c285e111405d932e3 a911e67f919c935126c2e6f58bfc95ae40136ae9c4f8f3896a462ec0cecf 70e7facc49d5045d945400779fb6e9e014d8e0505435eefca5d3c43835dd 1946d5267f98ad8cd9e784f1f5d67e7c220c495c1295293a75558c0dc1b1 168a14d44ecf46483680588dd97b4d957aaf5edd309543c6dd31201cb504 c43a87080e37d12ead8a75d971537ab58373483264fa68e14a712ea811db ad158eda6f08d870a4d9815c440086b71571cbd508d8461ddfa092398eb3 048e221da33e1e8139722b8c733a94a403d6a1db3e1c85e9c72b4576b73c c88536688f8e2c75d7460ce1c9873e63e73287c29cd1e4bd76aa79739c4d bcdca3a9ce7a4bef6d9ec60e6170cc21dbc4d9e3c132ad2cfb537df660e1 6a0079be5416c42c2230042983bea539e5e0d52353030d70468c559dd70e 669d8a36873556f5469302113c4b84eabe166b65b8bcdca773410c2756eb 278017334151891e115e3e56739bd3e14fc9d927c380b85d12c2785b1c42 2974f48d91571e0de000c92293ffec582bcf933e7e53314ddf2119796525 88d1a2b33902f7e3800ae53dcc6ff10d7806a39575f8ec7b7bf530275300 95be5cdd069acc8cf016b1feabc107857ff255558fba651eb30052844720 a4093fe1f7c4b6030b7aa9d4e5b1f65f461b3a240bcf420b2184f8949b2c e9b87d4655ba8b2e17e2c99513d45546e8c3767c5d6e777b583e48c492d1 5a86ca0336545c53089450e48992204d858e8f968980f9c79bdd373d37f9 d4ff06ab0ad0f32fe6494a4fc0a29617d4608dc21a83e68b7ee3c9a7034b d05d83cfc2ffed1f561c952c4d328d7cd4c922748f6cea155cc31c6e46da 7710bfdd87103442e5914afe4a91b2682df46c8a208fc3336d7d155d3d70 014def06aaba4edaac1fe8eb358dfb21d3e8cc5292f3d44b19b0da15b86e 35804588f5f3a01fed8e6d3722deef911ab2d54ee8b6c52c61f9f98b3421 16f980d46bc68aa3248a44606190ba94a55784ad908470518ae998562364 83782d70c57f8a4f8208571ba5db5aab173d076be7ca13c409cc456463d4 04f35e3ce6a99abb0722a6763abf34af5ba8ea6286b4a096f21515ec1d9f c6e4ab1f6b3ad29a9cfb33032a73b09f51b2455f1e8b9b029b671a199342 63d1116583abd32752ca9d273684cb6c46f4b2107acf9a8c7664b8d3db8c 780b00204b66d21f5fc6cd47fa842f4d81f904ae24503196a20ece5bfaa7 1719936d0a74481b0b3b5885968f32979373c430f2b7f9993ceb72aafe06 51025791251a2882f4b1433ce0a6d1747aa314c8b35b792ee428d0625a39 c73c684aa2db744dfe4108c30dbbc10e10866534410f49170b907d71ce8e aac297d60fbc4818ff422294adc7dc6d7b6c3bf1df7859574a163732313c df81f717e68ddde3a137f44f9103340d708c818b21a4059de8f424d77f8d 3029762aa5dc346bcddd02e28b34c8b6d5cc27f55fed84e6cc3aafef087f 4c21b4dff7ad628b172b05655b40526a6d9bcb1f131d906f425aab4d255f c195d8d1ac2026d11d742a7c52853e0be66f79d6b976e01fc5d386788a3a ca7fd9a9344aa566e796cb64414e56b185e4b96fd797458bb1d55af42772 a9d8f79ac837b3386abf1048b60b5954ca7aad50b9299f3858584af39155 bbb01bf08c10bb5667e4e1457f14563467ac0b68f1088e8df866dd12a3d4 97fdd1333d38557e7ba393930bf35ec927d44c8e5f12244fb1520dbb54d4 3c6aa3b3cd2571ab0a275ef181fdbe2cdee3f706b54a32727141831f8809 b16dea5b1b0685bf8bada803687960e1d585d88fa0096d1358ada6bb49a4 5814ef460736efe7ef2e42a0a9ff3db0b5b036df137ec1cfd1042858ef29 6328d19417f34577315e9db6c1844b06edc09fed4fdf3baf4db999e79ce9 e052b6122625e2ad5a1daf394ca43b1b176bf3c02ed2652fc6fc4c548d58 4640bd5e1c4ef0447bee6ed272dc860e55fe1a2b73056686efc66403561d d05d9c4949e31f9e3a79c10c095ad7b518e1eebc0136fab164ad6505246a ce1121ee0873f8c38ca8468e61678dfc951c8d26b4c82493363c2f88e72a f220956b34ac6daae28c9adec21020f19595539ceb39e7db77346ba0f338 d49285c8f6d68e4d33db8c60fd13193e4d727e949702ebe539f07d85d03d 1885d01f9f68f478bbbf6525761c9135556135812e04f851884e613c2cc6 5c41637aa0fdedee6e9c2c1415bad42b7ac6c428f8a481f69ad18208c9b6 47b161ee3972d65fbc5b6c12b674777b3835b146c34fba3f125dbf249101 c73b1df4a1ef86ec9f9de1c29e7930b21b179b691dfcbd810a97f1de18c0 a6d89f7fad8c12fa9bf0e3c7373923624759ef52970955c83cb1590d7c58 a541ed617fbf4196e7fd320639fd9c7b6d42d0c571766d182cd82342377f 0c6c52ee7600c8b18b925396c2211a4327b62238fab529e0ced2028fbc41 a4b2702c5c2969133c292cf1daf9594cf1913612b6fbef7f9b29525d9c3e ca53827bbfdab651f3eb4e1d1c5ecfa2d9d90761dff95950fb4af6fd2ef6 e19203454a07b13738ec8a616d25e44277110c2c807f6848158b3ab148c5 33d876a46f4234bcfc0545d7648e70cdad3583007cfcdf6a0c0f58c98b26 492586965e7f46bfd93042710115d292f15a57de91090c9c6e16b8465869 e8960451aa68b508332ba22177548c5d15bca267df09e9187c838aa396ac 6f79eecbb0f0473a6b400c9884daae6a71a8b2f5577abf588a9d31389cb6 7704d60fff294f70ea28789130bcabc389e6cdb75200fcc19c81cb8c2de0 3b994d8b1b553083ca45edb7b6d463661e4fb89d28b5121f8148e833b4ad 3be48712befdee5dba70f7a4f64330618cbf8950e57ed067e940164a2010 51f52131043d680be47f7e5c1312a6265904bc51eea19ddb9640e8204af0 d2b98f15021d75501de9e590f064f92c155dc2a0f6aaf3aee91e20bc05b9 41344436d01faaf5c47ea3a484bfb67853e2c05f2b65262fa306a8b1128b 1eb95951b3765e8a9fd3061c4a320c6e36e9b53d30f96ea46bba75ab8678 d40c3b58d800bfec207cd029fb0c30ca9c9172f330f7631b94c5d341097f 7559239c09a5962d39455065460c602c7523cdae697cfb1a7e606c987574 5d83077b3e1dd7cc030979756ec13b5611a62c16d3ee3273fc2f3b1b4727 fc732d766f82f3a48a7ef9160ca82293b9b5108fed88e23efe7230d8f7be a906dd2b1fde77a0bbad95900db4a14f7638dd177f91e7856b906a57df88 2219ae12c7a19950eddba7cfce11d4a1d50c895764f0001a6ec55420bbbf fd97d4fb8643a554ffb5746141e436991ce5072b6ba62027f2d189110bee f783572429e3fda68644bca327efe9cbbbe8f95efb368894f4199741da09 b3af8dff735149b2a2a5ff20cb5096964de586f746788a39e056743017fb f4a44e421155f000b53d9ae3740da405953b270b15506529b09354d5ff29 93b271ca82ebdf3dcba198d72f519c05e2e220ae63c2226b1c28e0a23756 2fcf5c36556bd93947339672a418528dfdf96019fb2822ae4d85430b6257 ab60df45d10d622bd637a0bc8a930a9a512f2e14b71c6ebaeee69b4da43f 8eea3274b00960209f26799f7aed567783bf6cb407ce80f557da13126e1a 3dfee4e1ea09785bf8e7f0c69642a7900cd9cd2350b0ff2417fd8c23ac90 694bbeeb87abbfe14125674b08fc22b15a7b6550e9ce91fb0547de312644 324f84bf04608dfb1e9bfcdb6545b9478a842591733243cda46956704b86 e64e36bd2fa55c39c5bd499268a473a7577ba18ffcd295b219758981ac91 a638a3f6e4f6bf29293f2d061ad4b447caf5125b111d138cacc778b09164 60423f38b330d3a1bb5a5f7778691c4f1cdd43da3c114d77d17eaa35bd7d 13db100cb563777dd44a9e05be09e932348bd95b700c1a05967c8ef25a22 cd8b6056747fc9275359581b482280eda3141d2d9843bac3cc6170666e97 ad6a12421faa0b4e27e261d45626bb29366d3719542ddd2543e7032c99e4 f6e8e28c56e7df1960cc21bbe1acee7e3f02c750ad26ec75590182e7eb68 8061efa1bd417b973e9bd99d906d42d322b556eaba268a4621be8be41b17 8b317cd27afe64aaa79836247ab90361ade3ad8037a32e6494c839764d78 070171b0944fca3f1a8ceea7a0837a0dd1ead10bcc5a88ef29f6dab28f9b 7a7210a24f3515c89da441647bf419c79087e9b61653a88389d3bdd042d3 4642da7b9b24f54bddf551d5f5b8c0b663c39f0ef1dbca915d356889f438 fc0e57dd7e9a4b85d9718b32e87c206a7215211586f91262c1e03108ae9f 9a731902cfa47bc633d4770ed9ffde8aff27b639078456fb84c7c2dcb272 c05cf4e05d83876037f2b1427b0c571d9ef04a0db6a6978977ad0060d9d2 8a45ea683df15336d07a783ab57af45fbf93feeda39c294d127f31d84d13 26e90342fcb42da2e8f5c959cf3e94c9aba2fd9e7f838f927d15b46f7300 267cea40ad8bcd241c60884073554bd08bc1451067979bcaa92e26d00d22 ed750d12a6e2095285fd059dac52c1803ca3fa2bdfc99a9ecae6859f4a8f 62b35d6d623c3c75a8a792ce5485979bf06f469c78589fdb4a378d0532ee 6d859edd756020e7f51daa098539472ae437bb5ea57cfc716dae73402b25 edc8b57f20c8d4b10e92c4ec451b7d9e034abaaf677153ed3cc9f044b0f4 73acce07bd227a62edd031af9a3284ff99c6ccaafeafe2e44e23f0e23a28 551c6599502365f3de2e227f762fe812eb8f3ac804d95bfe95ce7f291f08 195613296e6b58ba6c90b1bcaba320465e969e911bc9a32197e74cee2c29 fd76290fb9c8ca1d9034a8539ab5c88437c67204834a372a19b9def14290 0353efc3a77636494ab74c25d8fb64439791b36e437b89682e617c0fa336 9eebdb933cbc73466da52c57277d8e933276ba2ff1e47eeefd6f52c4a3c0 476885457944b86aa396f4c9130927907350832c039875113cec72a10cf7 09b68f3af030f590b24a9bbb6d414b723be28b003a4358465bbe2ea40bfa 7c0e4cb35633309fc2bfc2b1d7d773462acf5ae80dbac595410e845586c9 adba0567efca8eb3aa0abe05782de56efb249882ee29ab097e571eb2fe9e 52dee0253fc26f25326dfc2a455157b15f2f0bc895eeb591af22346f51d7 1f18ccbe5823b8c4f4c596c283fee1770c892953cee14079771740e5d7e6 d62d649a3c94dc5271978970028a2902bb4cbe936f0e427f168c6fea5974 657a5d0828bb7aa035cbbaca03060125211226f5c627ae579509227aebe9 7d7870c4b4339b199f2513d61b44c3940a8fa6b87495925d66820a767760 d17b084afe14e25d48150794efcc553fdc56ff27312f8f682f5fe3815d6d 2d7e52e36c6bfe1993058a09ac4c0c6217a5ded18a06454f965541f91d57 ee34d6ac4f2ee159eac66cba941e338bdcff9036861b2867d097dfe0d32b d88549bf932e05c2eed8c2ad2002e13b03538bf3b20ae583b351a9dd8691 63a924c5f3aa2e0485a9e7c1fe2f5ac76300caf0ba4f17277599d97a4aac 9ae921834235d680a7ebf3451f8ff482a57cdb88d5f9cc49c2d95fbb8628 f5b9e70405b93cbeda17093df1fcf3d808025ce2bbbf9f36ef079102c068 3ca5963f794ec5a176f450566e58dacbbbb7f256f26b6a0c274d46cd73a3 3c5f631211a8aa0f71ea23a9f56480dbaacee8b0dab4e65e41e94c7460f0 5a75f666bce860cc1aed581047c2ac3d5443ed81c5cb001f5d71f3a23f8b 41d54f8ad9b98ac68d31a64fab7cf81c33e5bf0c3e801b716950f9314e52 be0455d52ae96d2a11ae3b0b1a7d0cf83fa8521858a5d3c338498e6e9dd8 ea17a721f336d07a49d99ba1fce861b8afe2599fee93722fb565e7ab2de1 c887d9583960603942df377735c422d7201b6dbae3d530d22352f85971ac 48a20db2cf375168be5c5e98a44f2997a592c5bb81bff3093fa115bd529f 6fd08f2ac1598d02fcb00aed3e54d0346c8b108c554be8a8acb5fd842fc9 9b7c8e38a33b7a490254c5502ab9797b709c6a6e0c7199c613a8692d26a8 5ed23d9045b49721beba11f5ebbc8fd7e026ec1c90ee15b13ef257bbc540 20a5e97f3cfb12fed960908da6cfedf5704143ce07839739bc2054d6825c 31c7503b50b1fc16bc83d9996cd0958806b5fea455be640666c6f5205070 703c6c195748b5e5e66f018602526e36f38800d3a38a22c28319f792163a 908f7172bda1dff0c2ef1d31969d3f14b1f49050e10971e2865431953660 1c2d6e161ba14e3bafd97a3e45d240e7f663d8034af0e5f033c3010ede82 27b10390f55a0ac716e041af3dfae057939c02f68c77c0e6b29f518579fd 021f7e64626f257eaee70a6e2e333bdad8f83c646bf65d629297caa6de4d a37b2d07e06f64556b91034db6b716521b772511c3afd52f08ca7a869f39 cdf551599aea35eaa171ea77b053558486d9b2e650ff97d00a97e1fd6bb2 30285e39641f2e6084545acaa3de83c37352e65bdb23e3ccf6509243200d 857ad24d47c02125df0c8fe861c3b9182e6248f6f34f73015f4097fd3286 53a916d7185e47b83ffb7e4f4786c4b3c16363aa3bf9476240a78d1382f8 ee35119c43cd7f1c8fe1742c1e1fa447d5dd21f5aeb3e67a8e9e87b26edf f421ea626fe78f725bb78571cff335ac2a491450890ab8defdf4b488e43e 17b94a39511f0f1100555b2b783bc41cc156f031c217f0ec65dfa9ca1fb3 5c662535a607cbe374a68126b077a61138133b9c78ae55898f4ba5378159 aa5dd6095771748e0ecbc7903a1e74d530d51a53fe38666d1f0999c0a284 51dba77a1c2d3c3471a62704cb0d9ac51afda30c6709ab417927965973cc 806c43931b2e6dc37d770dae94203bf88afa8eeacb132074cd115b559af3 0bc28f72c1cd4cbcd004007860ffd587e5dd0a3c379687ce1aed32c32cb8 e00faccd9f93e28dca95745ee7b1040214c8414df2e84d2dc4d822d5dc45 9185f05c9b609aa7714de408ee6eeaf73d3b49b69db83d8e60d8c9904484 06dfea28c570277de48b1db3152e3b56134d3c4365a1c1131d1b5210097a e1f1231bfd15bf728ae279dfb472954cbf85e420802f2cae550cd09d92b2 7d5e5ce7da7028eb9ad30ba3b7afc2d2299e4086bc34871f69690ba0e2e4 d1ffec7d3d89b4bcb2420a397fd01350f951b261055cac6b9a1d8c7fd891 96033c0c67353cbd922396ba25b809f6f27d13a22ac4b1d33a6d4240800c 1d221654463779b5207e52e1c1d2ee59202c2f7be3ffce14269696312a7f f7c7ae04589b8b12d072bcec8edcadce439b207764050a0f5a7852d3491f 6fc2fe1dff80ba920d18bf68ebd42b1e324033425d278acb5165537aed62 a0f720688490c3d0634a4599651977e5ea0963e8dbbfe36156770c3574de dfc3928949f16240dbcac62b2f6aa13848cbade64564b5d41ff38a8ecdc8 4ec506644c1edf35d24f100eba6a51e42d5e5f2eae841c5b60f0eb129a6b 8925201b2ec4177f40dc6d74857e0cec3b9bc00b053c15f7ba1f801463de d420234d498fb973f7ea8ee43d8ddd32a240fd49ae15a9be3232afa9b048 a67c1d847267bce1817e3e1266a9d3fb95cc6d377f09a17f4eb68c429382 0c1eb62f8b5627913b74f6109792840060c9d4d6f25493fbea5fb1d267bf f043bbd391fb255648245a21da38b4aabc2270d80bd87ee51fc82d8b25ef 2d0cde607452caab956fa311f2e3484b95369d3ff7f87b8b56261555dcd5 dd4b9133cd7422c2bea90ce88e3b71cc5ba380e37153391d9f783416fefb 6f034bcc7ae2a2c62b2423502b7059d0d0f14c30050c0700e77eaf14bad6 5ab87c21accbc9cae3f0c13aa324e383367c5a45e37d50853b97b66c89e5 2b67137c662d332f08e15462154a8a07d01fed1c418666958ecc52d63f29 fdb4d17e633098675447fa96f7352ef49b6a1c88d0b213ca2bb20e1a6a87 c9da43ca669a2c7c9a03eee8c3fb668ded19cc92dcf67893882f010ac115 9f43f6fb17c19a17eea02546b37693cadfa3adf5aeecd2e0f74aa771beba 83d418c18c24e1a608c8317705e9a438cfc82cc0f08f5d0650f9c496336e 15e8ee3c0040fc2a7a8049db495b9be1d1b6fc1dc47764726c851a6c8c2e f0c54ee96f5af3474014dcfdb71fa19b0cf618f7400e87291c5a018e063b ceee5dbc6b5a0a3c9c98a66c60fe5b865a1c52bbc2dc4cbb332886515e10 7b4d9e31107cd36ee1c93de801f996420b530effe1e12fa69055e4ce8b39 d9c37e977839267a17b2eb18d0b2b33c489ed720bd88db83c0ff58002421 efac172edc847c17242e3b855cd4e8ce526c326d492b43daed19509976fb 4376fe610290de0c81b01f01e0b9ad8556725e30d539e757fbada78285a3 fe82e15163e0f997d23970c6ef43f10f855c70659b1a41f853db0af5236c eccf677190c3c5f04d0557d90085d8afc025726a7a221ba24a1468444986 f498d11795ecf6c18941ee2c93290a81fc5e0cb63babc1ad2eebfbd8fcfa 4cfc1afa7c15cadff9f319300245e86c2bb93d18b62659d625a8426aeb9a f4eeccbfbef007e09a671b66863c1edc5cb473e52b787553166039ecac76 7d9ef8f571a58c50a87831a3de89a0a03d477c4b1f1d23cbc7a3d8f15727 8bc9925600bdbc335d154a52a27ae081656b4104dd0d88d2525eeeec8878 01b30ca71c9afdf0028acd99c21af4a1080e1778c6c11f17ba340c47beb7 f47d676c324a61964b07195aeb1b7ca32f3813d401f2557769f9744da850 a70559ce120b6dc1dc7ed9f1f5badb6a793f7406a96e9c4b56595acb1abc f4c66b148e036afb7f0c608b8a6652f462b701ea14a71ef954bff9524a13 c7441651605b6080d0018e0200d117f5af3938f05ef07a5e76a2fce5d0d2 d2211499adc54563a966dc4fb77a025bd7a852a3c84573bef515a459776d 04726823b4a414611c80fa575238912443879fb8af4212204353ba2c30de 3f2566c07e5fd06a8cc451057dfc9bd9adac2ae0ce9865f0ce6aeb917abf 60467dbd53f44e36639d9ba1140336bc8cf7efc552122b2af9e8bce91eb0 fd8fa6321c651a6445f41d42049bdb8fea69ad6a9f57cff654490cf965e7 5f012dedf3d01228ae451a7915ddb9959a9855b9974867f4f5bcb793a102 4060339b0723a4936e8cd8def44ad7068555070754acfa1162b4e640b6a4 d1b3a8c84b51230461fdb0a7848971fec7d4a9310f7061f5eb5fc164d1d6 6b0acdd360ee68e5617a3aa5c8c11e1a6126e2ee15ceec6b61cf029e1216 3ad33b200ae21d0404dc09aee9dfbeddcc0d3038a981c646cfb902d5e357 5314f0b1737a3e9424e9f75e826d18aabf90fcde25186a684fc191e0bffc e7d83cdbcd9ed005ae850ea0015a31c38fddc559384ee88eb6d835693da9 a54606f6b461044a328ea71b0498c6483c90f5768b76af0803e771053e52 f28c488f1140364d9c8e8a7e042a19576a2c7749f82411134eaf015a934d 0346b7063c978ad67eab45fcd51d4170d105104a6fb8d3f164303a21eb23 4ee89efca5ee4150a8d0814370dd82648d69be27980b3de14325470f842d fb431a266c176b7e0bdc5f3eb90e90944fed3f088efbe3c752b11c9a23ed 9bd83ab84edf9a8433004551703e0c4e67246fde38aa7a1348799fd375fb f8e4530145d80ba7810358fba312372139988bdad96c76f50d32a656bfb9 36c200c0ce33ffde8d9778f1765089ca1479e1a9f4da777314aac9bdd8fe 386c8020457c6c0113269da3dd40e4ef955c48f85f2dba00d58cfc32379d 20d76349748dc9afdccf839c26c79e853a0c1512d0a40aa15d0646bb99a5 bdcdc939c662f0ed07885f2fc4d715fbdd92c1f3a96d0fc04107c550a017 18d7104d14fe588430f383bb9af5a2b180355d53f5fb60215f8aa23f9f70 30fed702183444fb383004c9facd707ec11736fbdac295e48dd87cf7d654 4bd22a81970a5f41f61b344de0f01e5c1a742d05621210ef4d504cb34977 5f4d0c59bacb241bdb29ac4b430de0cd6173fe171b4a697b0624e168d029 2928aadc7897c4d40a69843b0f301b2962f17e1280200d6d0866d24a5b07 9341f762afa4027d3fc7ee2e1c3905be9351abc48a7c0114a341a4ed5d97 cbcbbe6209a0e4b28cdd45a1188d070f6a5d836d711e05cd72489906f9c3 b8d6cfb6b33118e81617ef5e3b58870b534e58d6351e31d39628b1e89cf2 6ef37a5fc9655b21613e92d21dd1cb33fab2bb3a9889c0d313bb74c2021b a45e595514cd6ee23d4b40f5cc555b1b04b488f7b5016f08636e633d82e1 9198d3a8dcf9e0d0670ca2f1602705b834e9b039e29275f06135b575b35f dc63cc70d948f8c63e520559078f5bf68b2c430ae1521142ea998a42d363 de643a1fa12febb381abbb5afc1dcbe287632465cbcf326ca20f3a697416 41a7c4fe895075a29b7d7372d8d0fb7c84992827ce03d8a78904eb2d5986 b5bd486f0bbd3159a0dbc3b3488614221a85035ccd0afee30956c26418e3 e49a716faa46d68e32398fce1aeb02030c0cb68eee6b1b28aedc545f5e95 082986d33fec6c8da874c4684e97c3d7d22b476492ae14bdaaf257920dec fc9fa81154b38095c25fa3c496cd7fa1132eeb0c74a56c63d183a940d66b 3567a974777b6a66c910040a52e53650a41132e1e7ec05a82b66d8abbab8 4e2dd44ea2e3c0d7b37d86e173d65e49f4a1f69ff175a06d63038eb0b384 7a0eec63767905c38bf04c10218f5109992f347b24179b6eb149014bb6e8 e6bbdb103a2a25ff95b5f2b44f8bb655f14c80331bcdb1570f77d0f4f86e 0e4f2f0bfaef6c36ec193b186cf89f665654697d9bcbd4e6a6c27acc3ee7 b9b275ba9cbda5e8e59017409625b8c7ba68af2eab63cc29c4ce1210aa93 09a3645f491b455c25c12cda6b62af472e8fc49f450fcfe0cdf3261dc793 61b783c030737a3fd364444051d3895755ea09921f05568d9b7048f8c5b8 0ded796532e36630c61b98dfaa6072d7a0f68318b640671471d34b08ffdd acedd55fbd310a0daf0c1b2edaa00e24c92986af0b14ba276829b524d141 f6fccfff7cacaa2dfccf2c1abb94662bcf5721faffcaa3af786ec23ce136 e5c9f352fd1d1d3093c18a 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Courier.afm0100664000212600000240000007623207477306250015174 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Courier FullName Courier FamilyName Courier Weight Regular ItalicAngle 0.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -12 -237 650 811 CapHeight 563 XHeight 417 Descender -186 Ascender 604 StartCharMetrics 316 C 32 ; WX 600 ; N space ; B 295 0 295 0 ; C 33 ; WX 600 ; N exclam ; B 240 -15 360 618 ; C 34 ; WX 600 ; N quotedbl ; B 146 315 454 604 ; C 35 ; WX 600 ; N numbersign ; B 92 -62 508 647 ; C 36 ; WX 600 ; N dollar ; B 113 -92 487 655 ; C 37 ; WX 600 ; N percent ; B 87 -12 513 611 ; C 38 ; WX 600 ; N ampersand ; B 105 -16 478 519 ; C 39 ; WX 600 ; N quoteright ; B 135 314 340 604 ; C 40 ; WX 600 ; N parenleft ; B 294 -124 458 604 ; C 41 ; WX 600 ; N parenright ; B 147 -124 311 604 ; C 42 ; WX 600 ; N asterisk ; B 113 250 487 604 ; C 43 ; WX 600 ; N plus ; B 72 32 528 530 ; C 44 ; WX 600 ; N comma ; B 135 -145 340 145 ; C 45 ; WX 600 ; N hyphen ; B 72 258 528 299 ; C 46 ; WX 600 ; N period ; B 226 -15 374 116 ; C 47 ; WX 600 ; N slash ; B 113 -81 487 668 ; C 48 ; WX 600 ; N zero ; B 113 -15 487 618 ; C 49 ; WX 600 ; N one ; B 113 0 487 612 ; C 50 ; WX 600 ; N two ; B 84 0 478 618 ; C 51 ; WX 600 ; N three ; B 96 -15 499 618 ; C 52 ; WX 600 ; N four ; B 105 0 478 604 ; C 53 ; WX 600 ; N five ; B 96 -15 499 604 ; C 54 ; WX 600 ; N six ; B 136 -15 510 618 ; C 55 ; WX 600 ; N seven ; B 105 -1 478 604 ; C 56 ; WX 600 ; N eight ; B 113 -15 487 618 ; C 57 ; WX 600 ; N nine ; B 136 -15 510 618 ; C 58 ; WX 600 ; N colon ; B 226 -15 374 417 ; C 59 ; WX 600 ; N semicolon ; B 139 -145 350 417 ; C 60 ; WX 600 ; N less ; B 72 44 522 518 ; C 61 ; WX 600 ; N equal ; B 51 190 549 375 ; C 62 ; WX 600 ; N greater ; B 78 44 528 518 ; C 63 ; WX 600 ; N question ; B 134 -15 487 577 ; C 64 ; WX 600 ; N at ; B 105 -62 478 624 ; C 65 ; WX 600 ; N A ; B 9 0 591 563 ; C 66 ; WX 600 ; N B ; B 43 0 541 563 ; C 67 ; WX 600 ; N C ; B 63 -16 534 576 ; C 68 ; WX 600 ; N D ; B 43 0 520 563 ; C 69 ; WX 600 ; N E ; B 43 0 520 563 ; C 70 ; WX 600 ; N F ; B 43 0 520 563 ; C 71 ; WX 600 ; N G ; B 63 -16 562 576 ; C 72 ; WX 600 ; N H ; B 53 0 551 563 ; C 73 ; WX 600 ; N I ; B 113 0 487 563 ; C 74 ; WX 600 ; N J ; B 84 -16 583 563 ; C 75 ; WX 600 ; N K ; B 43 0 572 563 ; C 76 ; WX 600 ; N L ; B 63 0 541 563 ; C 77 ; WX 600 ; N M ; B 11 0 593 563 ; C 78 ; WX 600 ; N N ; B 22 0 562 563 ; C 79 ; WX 600 ; N O ; B 51 -16 549 576 ; C 80 ; WX 600 ; N P ; B 43 0 499 563 ; C 81 ; WX 600 ; N Q ; B 51 -115 549 576 ; C 82 ; WX 600 ; N R ; B 43 0 589 563 ; C 83 ; WX 600 ; N S ; B 92 -16 508 576 ; C 84 ; WX 600 ; N T ; B 72 0 528 563 ; C 85 ; WX 600 ; N U ; B 40 -16 560 563 ; C 86 ; WX 600 ; N V ; B 9 0 591 563 ; C 87 ; WX 600 ; N W ; B 20 0 580 563 ; C 88 ; WX 600 ; N X ; B 40 0 560 563 ; C 89 ; WX 600 ; N Y ; B 51 0 549 563 ; C 90 ; WX 600 ; N Z ; B 103 0 497 563 ; C 91 ; WX 600 ; N bracketleft ; B 280 -124 445 604 ; C 92 ; WX 600 ; N backslash ; B 113 -81 487 668 ; C 93 ; WX 600 ; N bracketright ; B 155 -124 320 604 ; C 94 ; WX 600 ; N asciicircum ; B 113 354 487 615 ; C 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ; C 96 ; WX 600 ; N quoteleft ; B 260 343 465 604 ; C 97 ; WX 600 ; N a ; B 72 -16 541 431 ; C 98 ; WX 600 ; N b ; B 22 -16 541 604 ; C 99 ; WX 600 ; N c ; B 84 -16 535 431 ; C 100 ; WX 600 ; N d ; B 63 -16 583 604 ; C 101 ; WX 600 ; N e ; B 63 -16 520 431 ; C 102 ; WX 600 ; N f ; B 105 0 541 604 ; C 103 ; WX 600 ; N g ; B 63 -186 562 431 ; C 104 ; WX 600 ; N h ; B 43 0 551 604 ; C 105 ; WX 600 ; N i ; B 92 0 508 624 ; C 106 ; WX 600 ; N j ; B 147 -186 458 624 ; C 107 ; WX 600 ; N k ; B 63 0 541 604 ; C 108 ; WX 600 ; N l ; B 92 0 508 604 ; C 109 ; WX 600 ; N m ; B 11 0 593 431 ; C 110 ; WX 600 ; N n ; B 53 0 541 431 ; C 111 ; WX 600 ; N o ; B 72 -16 528 431 ; C 112 ; WX 600 ; N p ; B 22 -186 541 431 ; C 113 ; WX 600 ; N q ; B 63 -186 583 431 ; C 114 ; WX 600 ; N r ; B 84 0 541 427 ; C 115 ; WX 600 ; N s ; B 103 -16 497 431 ; C 116 ; WX 600 ; N t ; B 43 -16 499 563 ; C 117 ; WX 600 ; N u ; B 43 -16 541 417 ; C 118 ; WX 600 ; N v ; B 30 0 570 417 ; C 119 ; WX 600 ; N w ; B 30 0 570 417 ; C 120 ; WX 600 ; N x ; B 51 0 549 417 ; C 121 ; WX 600 ; N y ; B 51 -186 549 417 ; C 122 ; WX 600 ; N z ; B 115 0 489 417 ; C 123 ; WX 600 ; N braceleft ; B 197 -124 403 604 ; C 124 ; WX 600 ; N bar ; B 280 -124 320 604 ; C 125 ; WX 600 ; N braceright ; B 197 -124 403 604 ; C 126 ; WX 600 ; N asciitilde ; B 92 212 508 348 ; C 161 ; WX 600 ; N exclamdown ; B 240 -216 360 417 ; C 162 ; WX 600 ; N cent ; B 113 -13 469 630 ; C 163 ; WX 600 ; N sterling ; B 63 0 520 578 ; C 164 ; WX 600 ; N fraction ; B 50 138 549 470 ; C 165 ; WX 600 ; N yen ; B 51 0 549 563 ; C 166 ; WX 600 ; N florin ; B 87 -93 518 618 ; C 167 ; WX 600 ; N section ; B 66 -62 534 603 ; C 168 ; WX 600 ; N currency ; B 103 95 497 489 ; C 169 ; WX 600 ; N quotesingle ; B 236 315 364 604 ; C 170 ; WX 600 ; N quotedblleft ; B 93 343 507 604 ; C 171 ; WX 600 ; N guillemotleft ; B 63 0 541 417 ; C 172 ; WX 600 ; N guilsinglleft ; B 63 0 312 417 ; C 173 ; WX 600 ; N guilsinglright ; B 293 0 541 417 ; C 174 ; WX 600 ; N fi ; B 10 0 585 624 ; C 175 ; WX 600 ; N fl ; B 10 0 587 604 ; C 177 ; WX 600 ; N endash ; B 72 261 528 302 ; C 178 ; WX 600 ; N dagger ; B 124 -63 476 604 ; C 179 ; WX 600 ; N daggerdbl ; B 124 -62 476 604 ; C 180 ; WX 600 ; N periodcentered ; B 226 217 374 348 ; C 182 ; WX 600 ; N paragraph ; B 79 -62 525 604 ; C 183 ; WX 600 ; N bullet ; B 202 141 398 337 ; C 184 ; WX 600 ; N quotesinglbase ; B 135 -145 340 145 ; C 185 ; WX 600 ; N quotedblbase ; B 93 -116 507 145 ; C 186 ; WX 600 ; N quotedblright ; B 93 343 507 604 ; C 187 ; WX 600 ; N guillemotright ; B 63 0 541 417 ; C 188 ; WX 600 ; N ellipsis ; B 51 -15 549 84 ; C 189 ; WX 600 ; N perthousand ; B 34 -9 564 614 ; C 191 ; WX 600 ; N questiondown ; B 113 -175 466 417 ; C 193 ; WX 600 ; N grave ; B 155 490 320 639 ; C 194 ; WX 600 ; N acute ; B 280 490 445 639 ; C 195 ; WX 600 ; N circumflex ; B 155 490 445 639 ; C 196 ; WX 600 ; N tilde ; B 145 516 455 605 ; C 197 ; WX 600 ; N macron ; B 155 536 445 576 ; C 198 ; WX 600 ; N breve ; B 155 490 445 620 ; C 199 ; WX 600 ; N dotaccent ; B 250 511 350 611 ; C 200 ; WX 600 ; N dieresis ; B 140 511 461 611 ; C 202 ; WX 600 ; N ring ; B 207 480 393 661 ; C 203 ; WX 600 ; N cedilla ; B 210 -173 377 0 ; C 205 ; WX 600 ; N hungarumlaut ; B 155 490 445 633 ; C 206 ; WX 600 ; N ogonek ; B 280 -155 433 0 ; C 207 ; WX 600 ; N caron ; B 155 490 445 639 ; C 208 ; WX 600 ; N emdash ; B 1 261 599 302 ; C 225 ; WX 600 ; N AE ; B 10 0 590 563 ; C 227 ; WX 600 ; N ordfeminine ; B 155 279 447 574 ; C 232 ; WX 600 ; N Lslash ; B 43 0 541 563 ; C 233 ; WX 600 ; N Oslash ; B 40 -43 560 605 ; C 234 ; WX 600 ; N OE ; B 10 0 590 563 ; C 235 ; WX 600 ; N ordmasculine ; B 154 284 448 577 ; C 241 ; WX 600 ; N ae ; B 12 -16 578 431 ; C 245 ; WX 600 ; N dotlessi ; B 92 0 508 417 ; C 248 ; WX 600 ; N lslash ; B 92 0 508 604 ; C 249 ; WX 600 ; N oslash ; B 53 -43 543 458 ; C 250 ; WX 600 ; N oe ; B 12 -16 578 431 ; C 251 ; WX 600 ; N germandbls ; B 43 -16 499 604 ; C -1 ; WX 600 ; N Udieresis ; B 40 -16 560 761 ; C -1 ; WX 600 ; N Uacute ; B 40 -16 560 789 ; C -1 ; WX 600 ; N Scedilla ; B 92 -173 508 576 ; C -1 ; WX 600 ; N Tcaron ; B 72 0 528 789 ; C -1 ; WX 600 ; N Scaron ; B 92 -16 508 789 ; C -1 ; WX 600 ; N Rcaron ; B 43 0 589 789 ; C -1 ; WX 600 ; N Racute ; B 43 0 589 789 ; C -1 ; WX 600 ; N Sacute ; B 92 -16 508 789 ; C -1 ; WX 600 ; N Otilde ; B 51 -16 549 755 ; C -1 ; WX 600 ; N ucircumflex ; B 43 -16 541 639 ; C -1 ; WX 600 ; N Ohungarumlaut ; B 51 -16 549 783 ; C -1 ; WX 600 ; N Uhungarumlaut ; B 40 -16 560 783 ; C -1 ; WX 600 ; N Yacute ; B 51 0 549 789 ; C -1 ; WX 600 ; N Eth ; B 0 0 520 563 ; C -1 ; WX 600 ; N Dcroat ; B 0 0 520 563 ; C -1 ; WX 600 ; N Zacute ; B 103 0 497 789 ; C -1 ; WX 600 ; N Uring ; B 40 -16 560 811 ; C -1 ; WX 600 ; N gbreve ; B 63 -186 562 620 ; C -1 ; WX 600 ; N eogonek ; B 63 -155 520 431 ; C -1 ; WX 600 ; N edotaccent ; B 63 -16 520 611 ; C -1 ; WX 600 ; N ecaron ; B 63 -16 520 639 ; C -1 ; WX 600 ; N Ugrave ; B 40 -16 560 789 ; C -1 ; WX 600 ; N Thorn ; B 43 0 499 563 ; C -1 ; WX 600 ; N eacute ; B 63 -16 520 639 ; C -1 ; WX 600 ; N edieresis ; B 63 -16 520 611 ; C -1 ; WX 600 ; N dcaron ; B 63 -16 650 616 ; C -1 ; WX 600 ; N ccedilla ; B 84 -173 535 431 ; C -1 ; WX 600 ; N ccaron ; B 84 -16 535 639 ; C -1 ; WX 600 ; N cacute ; B 84 -16 535 639 ; C -1 ; WX 600 ; N aogonek ; B 72 -155 556 431 ; C -1 ; WX 600 ; N aring ; B 72 -16 541 661 ; C -1 ; WX 600 ; N atilde ; B 72 -16 541 605 ; C -1 ; WX 600 ; N abreve ; B 72 -16 541 620 ; C -1 ; WX 600 ; N egrave ; B 63 -16 520 639 ; C -1 ; WX 600 ; N agrave ; B 72 -16 541 639 ; C -1 ; WX 600 ; N aacute ; B 72 -16 541 639 ; C -1 ; WX 600 ; N adieresis ; B 72 -16 541 611 ; C -1 ; WX 600 ; N Uogonek ; B 40 -155 560 563 ; C -1 ; WX 600 ; N ugrave ; B 43 -16 541 639 ; C -1 ; WX 600 ; N uacute ; B 43 -16 541 639 ; C -1 ; WX 600 ; N udieresis ; B 43 -16 541 611 ; C -1 ; WX 600 ; N tcaron ; B 43 -16 508 616 ; C -1 ; WX 600 ; N scommaaccent ; B 103 -237 497 431 ; C -1 ; WX 600 ; N Zcaron ; B 103 0 497 789 ; C -1 ; WX 600 ; N ecircumflex ; B 63 -16 520 639 ; C -1 ; WX 600 ; N Ucircumflex ; B 40 -16 560 789 ; C -1 ; WX 600 ; N acircumflex ; B 72 -16 541 639 ; C -1 ; WX 600 ; N Zdotaccent ; B 103 0 497 761 ; C -1 ; WX 600 ; N scaron ; B 103 -16 497 639 ; C -1 ; WX 600 ; N Amacron ; B 9 0 591 726 ; C -1 ; WX 600 ; N sacute ; B 103 -16 497 639 ; C -1 ; WX 600 ; N Tcommaaccent ; B 72 -237 528 563 ; C -1 ; WX 600 ; N Ydieresis ; B 51 0 549 761 ; C -1 ; WX 600 ; N thorn ; B 22 -186 541 590 ; C -1 ; WX 600 ; N Emacron ; B 43 0 520 726 ; C -1 ; WX 600 ; N Ograve ; B 51 -16 549 789 ; C -1 ; WX 600 ; N Oacute ; B 51 -16 549 789 ; C -1 ; WX 600 ; N Odieresis ; B 51 -16 549 761 ; C -1 ; WX 600 ; N Ntilde ; B 22 0 562 755 ; C -1 ; WX 600 ; N Ncaron ; B 22 0 562 789 ; C -1 ; WX 600 ; N Nacute ; B 22 0 562 789 ; C -1 ; WX 600 ; N Lcaron ; B 63 0 541 566 ; C -1 ; WX 600 ; N Lacute ; B 63 0 541 789 ; C -1 ; WX 600 ; N Idotaccent ; B 113 0 487 761 ; C -1 ; WX 600 ; N racute ; B 84 0 541 639 ; C -1 ; WX 600 ; N Icircumflex ; B 113 0 487 789 ; C -1 ; WX 600 ; N ohungarumlaut ; B 72 -16 528 633 ; C -1 ; WX 600 ; N otilde ; B 72 -16 528 605 ; C -1 ; WX 600 ; N Euro ; B 11 -16 534 576 ; C -1 ; WX 600 ; N ocircumflex ; B 72 -16 528 639 ; C -1 ; WX 600 ; N onesuperior ; B 191 259 410 612 ; C -1 ; WX 600 ; N twosuperior ; B 175 259 405 612 ; C -1 ; WX 600 ; N threesuperior ; B 181 251 416 612 ; C -1 ; WX 600 ; N Igrave ; B 113 0 487 789 ; C -1 ; WX 600 ; N Iacute ; B 113 0 487 789 ; C -1 ; WX 600 ; N Imacron ; B 113 0 487 726 ; C -1 ; WX 600 ; N Iogonek ; B 113 -155 500 563 ; C -1 ; WX 600 ; N Idieresis ; B 113 0 487 761 ; C -1 ; WX 600 ; N Gbreve ; B 63 -16 562 770 ; C -1 ; WX 600 ; N Umacron ; B 40 -16 560 726 ; C -1 ; WX 600 ; N Kcommaaccent ; B 43 -237 572 563 ; C -1 ; WX 600 ; N ograve ; B 72 -16 528 639 ; C -1 ; WX 600 ; N Scommaaccent ; B 92 -237 508 576 ; C -1 ; WX 600 ; N Eogonek ; B 43 -155 549 563 ; C -1 ; WX 600 ; N oacute ; B 72 -16 528 639 ; C -1 ; WX 600 ; N Edotaccent ; B 43 0 520 761 ; C -1 ; WX 600 ; N iogonek ; B 92 -155 520 624 ; C -1 ; WX 600 ; N gcommaaccent ; B 63 -186 562 666 ; C -1 ; WX 600 ; N odieresis ; B 72 -16 528 611 ; C -1 ; WX 600 ; N ntilde ; B 53 0 541 605 ; C -1 ; WX 600 ; N ncaron ; B 53 0 541 639 ; C -1 ; WX 600 ; N Ecaron ; B 43 0 520 789 ; C -1 ; WX 600 ; N Ecircumflex ; B 43 0 520 789 ; C -1 ; WX 600 ; N scedilla ; B 103 -173 497 431 ; C -1 ; WX 600 ; N rcaron ; B 84 0 541 639 ; C -1 ; WX 600 ; N Egrave ; B 43 0 520 789 ; C -1 ; WX 600 ; N Eacute ; B 43 0 520 789 ; C -1 ; WX 600 ; N Gcommaaccent ; B 63 -237 562 576 ; C -1 ; WX 600 ; N Rcommaaccent ; B 43 -237 589 563 ; C -1 ; WX 600 ; N Edieresis ; B 43 0 520 761 ; C -1 ; WX 600 ; N nacute ; B 53 0 541 639 ; C -1 ; WX 600 ; N uogonek ; B 43 -155 556 417 ; C -1 ; WX 600 ; N umacron ; B 43 -16 541 576 ; C -1 ; WX 600 ; N Dcaron ; B 43 0 520 789 ; C -1 ; WX 600 ; N lcaron ; B 92 0 508 616 ; C -1 ; WX 600 ; N Ccaron ; B 63 -16 534 789 ; C -1 ; WX 600 ; N Cacute ; B 63 -16 534 789 ; C -1 ; WX 600 ; N Ccedilla ; B 63 -173 534 576 ; C -1 ; WX 600 ; N degree ; B 155 346 445 636 ; C -1 ; WX 600 ; N Aogonek ; B 9 -155 600 563 ; C -1 ; WX 600 ; N minus ; B 72 261 528 302 ; C -1 ; WX 600 ; N multiply ; B 118 100 482 464 ; C -1 ; WX 600 ; N divide ; B 72 25 528 540 ; C -1 ; WX 600 ; N Aring ; B 9 0 591 811 ; C -1 ; WX 600 ; N trademark ; B 4 243 598 563 ; C -1 ; WX 600 ; N rcommaaccent ; B 84 -237 541 427 ; C -1 ; WX 600 ; N lacute ; B 92 0 508 789 ; C -1 ; WX 600 ; N omacron ; B 72 -16 528 576 ; C -1 ; WX 600 ; N Atilde ; B 9 0 591 755 ; C -1 ; WX 600 ; N icircumflex ; B 92 0 508 639 ; C -1 ; WX 600 ; N igrave ; B 92 0 508 639 ; C -1 ; WX 600 ; N ncommaaccent ; B 53 -237 541 431 ; C -1 ; WX 600 ; N lcommaaccent ; B 92 -237 508 604 ; C -1 ; WX 600 ; N plusminus ; B 72 0 528 529 ; C -1 ; WX 600 ; N onehalf ; B 23 0 573 612 ; C -1 ; WX 600 ; N onequarter ; B 16 0 580 612 ; C -1 ; WX 600 ; N threequarters ; B 6 0 580 612 ; C -1 ; WX 600 ; N iacute ; B 92 0 508 639 ; C -1 ; WX 600 ; N Abreve ; B 9 0 591 770 ; C -1 ; WX 600 ; N kcommaaccent ; B 63 -237 541 604 ; C -1 ; WX 600 ; N Omacron ; B 51 -16 549 726 ; C -1 ; WX 600 ; N imacron ; B 92 0 508 576 ; C -1 ; WX 600 ; N emacron ; B 63 -16 520 576 ; C -1 ; WX 600 ; N amacron ; B 72 -16 541 576 ; C -1 ; WX 600 ; N tcommaaccent ; B 43 -237 499 563 ; C -1 ; WX 600 ; N ydieresis ; B 51 -186 549 611 ; C -1 ; WX 600 ; N zdotaccent ; B 115 0 489 611 ; C -1 ; WX 600 ; N zcaron ; B 115 0 489 639 ; C -1 ; WX 600 ; N zacute ; B 115 0 489 639 ; C -1 ; WX 600 ; N yacute ; B 51 -186 549 639 ; C -1 ; WX 600 ; N uhungarumlaut ; B 43 -16 541 633 ; C -1 ; WX 600 ; N eth ; B 72 -17 528 620 ; C -1 ; WX 600 ; N uring ; B 43 -16 541 661 ; C -1 ; WX 600 ; N Ocircumflex ; B 51 -16 549 789 ; C -1 ; WX 600 ; N commaaccent ; B 234 -237 367 -60 ; C -1 ; WX 600 ; N copyright ; B 3 -15 596 578 ; C -1 ; WX 600 ; N registered ; B 3 -15 596 578 ; C -1 ; WX 600 ; N Acircumflex ; B 9 0 591 789 ; C -1 ; WX 600 ; N idieresis ; B 92 0 508 611 ; C -1 ; WX 600 ; N lozenge ; B 89 -11 511 575 ; C -1 ; WX 600 ; N Delta ; B 43 0 557 563 ; C -1 ; WX 600 ; N notequal ; B 51 94 549 464 ; C -1 ; WX 600 ; N radical ; B 27 0 628 699 ; C -1 ; WX 600 ; N Agrave ; B 9 0 591 789 ; C -1 ; WX 600 ; N Aacute ; B 9 0 591 789 ; C -1 ; WX 600 ; N lessequal ; B 53 0 525 535 ; C -1 ; WX 600 ; N greaterequal ; B 59 0 531 535 ; C -1 ; WX 600 ; N logicalnot ; B 72 168 528 438 ; C -1 ; WX 600 ; N summation ; B 113 -127 507 563 ; C -1 ; WX 600 ; N partialdiff ; B 71 -17 529 582 ; C -1 ; WX 600 ; N Ncommaaccent ; B 22 -237 562 563 ; C -1 ; WX 600 ; N dcroat ; B 63 -16 583 604 ; C -1 ; WX 600 ; N brokenbar ; B 280 -124 320 604 ; C -1 ; WX 600 ; N Lcommaaccent ; B 63 -237 541 563 ; C -1 ; WX 600 ; N Adieresis ; B 9 0 591 761 ; C -1 ; WX 600 ; N mu ; B 43 -200 541 417 ; C -1 ; WX 600 ; N .notdef ; B 295 0 295 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -33 KPX A Ccedilla -30 KPX A G -27 KPX A O -27 KPX A Odieresis -27 KPX A Q -28 KPX A T -27 KPX A U -32 KPX A Uacute -32 KPX A Ucircumflex -32 KPX A Udieresis -32 KPX A Ugrave -32 KPX A V -74 KPX A W -12 KPX A Y -28 KPX A a 8 KPX A b 46 KPX A c -19 KPX A ccedilla -15 KPX A comma -39 KPX A d -10 KPX A e -14 KPX A g -23 KPX A guillemotleft -49 KPX A guilsinglleft -49 KPX A hyphen -30 KPX A o -16 KPX A period -67 KPX A q -24 KPX A quotedblright -78 KPX A quoteright -98 KPX A t -26 KPX A u -15 KPX A v -55 KPX A w -19 KPX A y -60 KPX Aacute C -33 KPX Aacute G -27 KPX Aacute O -27 KPX Aacute Q -28 KPX Aacute T -27 KPX Aacute U -32 KPX Aacute V -74 KPX Aacute W -12 KPX Aacute Y -28 KPX Aacute a 8 KPX Aacute b 46 KPX Aacute c -19 KPX Aacute comma -39 KPX Aacute d -10 KPX Aacute e -14 KPX Aacute g -23 KPX Aacute guillemotleft -49 KPX Aacute guilsinglleft -49 KPX Aacute hyphen -30 KPX Aacute o -16 KPX Aacute period -67 KPX Aacute q -24 KPX Aacute quoteright -98 KPX Aacute t -26 KPX Aacute u -15 KPX Aacute v -55 KPX Aacute w -19 KPX Aacute y -60 KPX Acircumflex C -33 KPX Acircumflex G -27 KPX Acircumflex O -27 KPX Acircumflex Q -28 KPX Acircumflex T -27 KPX Acircumflex U -32 KPX Acircumflex V -74 KPX Acircumflex W -12 KPX Acircumflex Y -28 KPX Acircumflex comma -39 KPX Acircumflex period -67 KPX Adieresis C -33 KPX Adieresis G -27 KPX Adieresis O -27 KPX Adieresis Q -28 KPX Adieresis T -27 KPX Adieresis U -32 KPX Adieresis V -74 KPX Adieresis W -12 KPX Adieresis Y -28 KPX Adieresis a 8 KPX Adieresis b 46 KPX Adieresis c -19 KPX Adieresis comma -39 KPX Adieresis d -10 KPX Adieresis g -23 KPX Adieresis guillemotleft -49 KPX Adieresis guilsinglleft -49 KPX Adieresis hyphen -30 KPX Adieresis o -16 KPX Adieresis period -67 KPX Adieresis q -24 KPX Adieresis quotedblright -78 KPX Adieresis quoteright -98 KPX Adieresis t -26 KPX Adieresis u -15 KPX Adieresis v -55 KPX Adieresis w -19 KPX Adieresis y -60 KPX Agrave C -33 KPX Agrave G -27 KPX Agrave O -27 KPX Agrave Q -28 KPX Agrave T -27 KPX Agrave U -32 KPX Agrave V -74 KPX Agrave W -12 KPX Agrave Y -28 KPX Agrave comma -39 KPX Agrave period -67 KPX Aring C -33 KPX Aring G -27 KPX Aring O -27 KPX Aring Q -28 KPX Aring T -27 KPX Aring U -32 KPX Aring V -74 KPX Aring W -12 KPX Aring Y -28 KPX Aring a 8 KPX Aring b 46 KPX Aring c -19 KPX Aring comma -39 KPX Aring d -10 KPX Aring e -14 KPX Aring g -23 KPX Aring guillemotleft -49 KPX Aring guilsinglleft -49 KPX Aring hyphen -30 KPX Aring o -16 KPX Aring period -67 KPX Aring q -24 KPX Aring quotedblright -78 KPX Aring quoteright -98 KPX Aring t -26 KPX Aring u -15 KPX Aring v -55 KPX Aring w -19 KPX Aring y -60 KPX Atilde C -33 KPX Atilde G -27 KPX Atilde O -27 KPX Atilde Q -28 KPX Atilde T -27 KPX Atilde U -32 KPX Atilde V -74 KPX Atilde W -12 KPX Atilde Y -28 KPX Atilde comma -39 KPX Atilde period -67 KPX B A -9 KPX B AE -9 KPX B Aacute -9 KPX B Acircumflex -9 KPX B Adieresis -9 KPX B Aring -9 KPX B Atilde -9 KPX B O -10 KPX B OE 10 KPX B Oacute -10 KPX B Ocircumflex -10 KPX B Odieresis -10 KPX B Ograve -10 KPX B Oslash -8 KPX B V -29 KPX B W -12 KPX B Y -50 KPX C A -9 KPX C AE -9 KPX C Aacute -9 KPX C Adieresis -9 KPX C Aring -9 KPX C H -26 KPX C K -11 KPX C O -21 KPX C Oacute -21 KPX C Odieresis -21 KPX Ccedilla A -5 KPX D A -42 KPX D Aacute -42 KPX D Acircumflex -42 KPX D Adieresis -42 KPX D Agrave -42 KPX D Aring -42 KPX D Atilde -42 KPX D J -31 KPX D T -40 KPX D V -42 KPX D W -17 KPX D X -55 KPX D Y -63 KPX F A -38 KPX F Aacute -38 KPX F Acircumflex -38 KPX F Adieresis -38 KPX F Agrave -38 KPX F Aring -38 KPX F Atilde -38 KPX F J -95 KPX F O -27 KPX F Odieresis -27 KPX F a -47 KPX F aacute -47 KPX F adieresis -43 KPX F ae -20 KPX F aring -47 KPX F comma -168 KPX F e -56 KPX F eacute -56 KPX F hyphen -67 KPX F i -47 KPX F j -54 KPX F o -63 KPX F oacute -63 KPX F odieresis -48 KPX F oe -21 KPX F oslash -63 KPX F period -193 KPX F r -32 KPX F u -1 KPX G A 6 KPX G AE 5 KPX G Aacute 6 KPX G Acircumflex 6 KPX G Adieresis 6 KPX G Agrave 6 KPX G Aring 6 KPX G Atilde 6 KPX G T -25 KPX G V 6 KPX G W 1 KPX G Y -14 KPX J A -7 KPX J AE -16 KPX J Adieresis -7 KPX J Aring -7 KPX K C -42 KPX K G -36 KPX K O -37 KPX K OE -19 KPX K Oacute -37 KPX K Odieresis -37 KPX K S -9 KPX K T -12 KPX K a -1 KPX K adieresis -1 KPX K ae 26 KPX K aring -1 KPX K e -24 KPX K hyphen -61 KPX K o -25 KPX K oacute -25 KPX K odieresis -25 KPX K u -25 KPX K udieresis -25 KPX K y -67 KPX L A 17 KPX L AE 16 KPX L Aacute 17 KPX L Adieresis 17 KPX L Aring 17 KPX L C -11 KPX L Ccedilla -10 KPX L G -10 KPX L O -6 KPX L Oacute -6 KPX L Ocircumflex -6 KPX L Odieresis -6 KPX L Ograve -6 KPX L Otilde -6 KPX L S -24 KPX L T -52 KPX L U -29 KPX L Udieresis -29 KPX L V -66 KPX L W -27 KPX L Y -53 KPX L hyphen 3 KPX L quotedblright -66 KPX L quoteright -73 KPX L u -16 KPX L udieresis -16 KPX L y -45 KPX N A -3 KPX N AE -3 KPX N Aacute -3 KPX N Adieresis -3 KPX N Aring -3 KPX N C -12 KPX N Ccedilla -12 KPX N G -11 KPX N O -9 KPX N Oacute -9 KPX N Odieresis -9 KPX N a -19 KPX N aacute -19 KPX N adieresis -19 KPX N ae 11 KPX N aring -19 KPX N comma -58 KPX N e -6 KPX N eacute -6 KPX N o -10 KPX N oacute -10 KPX N odieresis -10 KPX N oslash -7 KPX N period -83 KPX N u -9 KPX N udieresis -9 KPX O A -27 KPX O AE -26 KPX O Aacute -27 KPX O Adieresis -27 KPX O Aring -27 KPX O T -30 KPX O V -31 KPX O W -5 KPX O X -43 KPX O Y -52 KPX Oacute A -27 KPX Oacute T -30 KPX Oacute V -31 KPX Oacute W -5 KPX Oacute Y -52 KPX Ocircumflex T -30 KPX Ocircumflex V -31 KPX Ocircumflex Y -52 KPX Odieresis A -27 KPX Odieresis T -30 KPX Odieresis V -31 KPX Odieresis W -5 KPX Odieresis X -43 KPX Odieresis Y -52 KPX Ograve T -30 KPX Ograve V -31 KPX Ograve Y -52 KPX Oslash A -26 KPX Otilde T -30 KPX Otilde V -31 KPX Otilde Y -52 KPX P A -79 KPX P AE -76 KPX P Aacute -79 KPX P Adieresis -79 KPX P Aring -79 KPX P J -82 KPX P a -52 KPX P aacute -52 KPX P adieresis -52 KPX P ae -25 KPX P aring -52 KPX P comma -156 KPX P e -42 KPX P eacute -42 KPX P hyphen -46 KPX P o -48 KPX P oacute -48 KPX P odieresis -48 KPX P oe -13 KPX P oslash -48 KPX P period -181 KPX R C -27 KPX R Ccedilla -28 KPX R G -26 KPX R O -25 KPX R OE -4 KPX R Oacute -25 KPX R Odieresis -25 KPX R T -28 KPX R U -32 KPX R Udieresis -32 KPX R V -33 KPX R W -13 KPX R Y -29 KPX R a 7 KPX R aacute 7 KPX R adieresis 7 KPX R ae 35 KPX R aring 7 KPX R e -15 KPX R eacute -15 KPX R hyphen -48 KPX R o -17 KPX R oacute -17 KPX R odieresis -17 KPX R oe 22 KPX R u -11 KPX R uacute -11 KPX R udieresis -11 KPX R y -15 KPX S A -22 KPX S AE -22 KPX S Aacute -22 KPX S Adieresis -22 KPX S Aring -22 KPX S T -42 KPX S V -10 KPX S W -16 KPX S Y -31 KPX S t -18 KPX T A -27 KPX T AE -27 KPX T Aacute -27 KPX T Acircumflex -27 KPX T Adieresis -27 KPX T Agrave -27 KPX T Aring -27 KPX T Atilde -27 KPX T C -29 KPX T G -30 KPX T J -79 KPX T O -29 KPX T OE -7 KPX T Oacute -29 KPX T Ocircumflex -29 KPX T Odieresis -29 KPX T Ograve -29 KPX T Oslash -29 KPX T Otilde -29 KPX T S -43 KPX T V 10 KPX T W 5 KPX T Y -10 KPX T a -60 KPX T ae -33 KPX T c -88 KPX T colon -136 KPX T comma -108 KPX T e -83 KPX T g -92 KPX T guillemotleft -122 KPX T guilsinglleft -122 KPX T hyphen -94 KPX T i -58 KPX T j -80 KPX T o -85 KPX T oslash -54 KPX T period -136 KPX T r -54 KPX T s -63 KPX T semicolon -111 KPX T u -84 KPX T v -93 KPX T w -88 KPX T y -103 KPX U A -18 KPX U AE -27 KPX U Aacute -18 KPX U Acircumflex -18 KPX U Adieresis -18 KPX U Aring -18 KPX U Atilde -18 KPX U comma -76 KPX U m 6 KPX U n -19 KPX U p 0 KPX U period -101 KPX U r -41 KPX Uacute A -18 KPX Uacute comma -76 KPX Uacute m 6 KPX Uacute n -19 KPX Uacute p 0 KPX Uacute period -101 KPX Uacute r -41 KPX Ucircumflex A -18 KPX Udieresis A -18 KPX Udieresis b 25 KPX Udieresis comma -76 KPX Udieresis m 6 KPX Udieresis n -19 KPX Udieresis p 0 KPX Udieresis period -101 KPX Udieresis r -41 KPX Ugrave A -18 KPX V A -3 KPX V AE -12 KPX V Aacute -3 KPX V Acircumflex -3 KPX V Adieresis -3 KPX V Agrave -3 KPX V Aring -3 KPX V Atilde -3 KPX V C -29 KPX V G -31 KPX V O -31 KPX V Oacute -31 KPX V Ocircumflex -31 KPX V Odieresis -31 KPX V Ograve -31 KPX V Oslash -31 KPX V Otilde -31 KPX V S -34 KPX V T 10 KPX V a -60 KPX V ae -33 KPX V colon -124 KPX V comma -129 KPX V e -52 KPX V g -53 KPX V guillemotleft -75 KPX V guilsinglleft -75 KPX V hyphen -43 KPX V i -60 KPX V o -56 KPX V oslash -53 KPX V period -154 KPX V r -46 KPX V semicolon -114 KPX V u -15 KPX V y -19 KPX W A -8 KPX W AE -14 KPX W Aacute -8 KPX W Acircumflex -8 KPX W Adieresis -8 KPX W Agrave -8 KPX W Aring -8 KPX W Atilde -8 KPX W C -8 KPX W G -7 KPX W O -5 KPX W Oacute -5 KPX W Ocircumflex -5 KPX W Odieresis -5 KPX W Ograve -5 KPX W Oslash -2 KPX W Otilde -5 KPX W S -24 KPX W T 5 KPX W a -20 KPX W ae 10 KPX W colon -88 KPX W comma -66 KPX W e -6 KPX W g -7 KPX W guillemotleft -31 KPX W guilsinglleft -31 KPX W hyphen -2 KPX W i -43 KPX W o -10 KPX W oslash -7 KPX W period -90 KPX W r -29 KPX W semicolon -69 KPX W u 2 KPX W y -2 KPX X C -46 KPX X O -43 KPX X Odieresis -43 KPX X Q -44 KPX X a -7 KPX X e -30 KPX X hyphen -75 KPX X o -31 KPX X u -31 KPX X y -53 KPX Y A -24 KPX Y AE -27 KPX Y Aacute -24 KPX Y Acircumflex -24 KPX Y Adieresis -24 KPX Y Agrave -24 KPX Y Aring -24 KPX Y Atilde -24 KPX Y C -51 KPX Y G -52 KPX Y O -53 KPX Y Oacute -53 KPX Y Ocircumflex -53 KPX Y Odieresis -53 KPX Y Ograve -53 KPX Y Oslash -53 KPX Y Otilde -53 KPX Y S -55 KPX Y T -10 KPX Y a -60 KPX Y ae -32 KPX Y colon -135 KPX Y comma -107 KPX Y e -78 KPX Y g -81 KPX Y guillemotleft -115 KPX Y guilsinglleft -115 KPX Y hyphen -91 KPX Y i -57 KPX Y o -83 KPX Y oslash -54 KPX Y p -35 KPX Y period -135 KPX Y semicolon -110 KPX Y u -46 KPX Y v -39 KPX Z v -50 KPX Z y -61 KPX a j -87 KPX a quoteright -56 KPX a v -28 KPX a w -21 KPX a y -38 KPX aacute v -28 KPX aacute w -21 KPX aacute y -38 KPX adieresis v -28 KPX adieresis w -21 KPX adieresis y -38 KPX ae v 21 KPX ae w 21 KPX ae y 10 KPX agrave v -28 KPX agrave w -21 KPX agrave y -38 KPX aring v -28 KPX aring w -21 KPX aring y -38 KPX b v -12 KPX b w 1 KPX b y -22 KPX c h -3 KPX c k -9 KPX comma one -144 KPX comma quotedblright -119 KPX comma quoteright -136 KPX e quoteright -41 KPX e t -29 KPX e v -22 KPX e w -19 KPX e x -2 KPX e y -33 KPX eacute v -22 KPX eacute w -19 KPX eacute y -33 KPX ecircumflex v -22 KPX ecircumflex w -19 KPX ecircumflex y -33 KPX eight four -58 KPX eight one -75 KPX eight seven -68 KPX f a -38 KPX f aacute -38 KPX f adieresis -22 KPX f ae -11 KPX f aring -38 KPX f e -55 KPX f eacute -55 KPX f f -42 KPX f i -36 KPX f j -59 KPX f l -25 KPX f o -62 KPX f oacute -62 KPX f odieresis -27 KPX f oe -20 KPX f oslash -32 KPX f quoteright -56 KPX f s -41 KPX f t -6 KPX five four -52 KPX five one -86 KPX five seven -72 KPX four four -62 KPX four one -66 KPX four seven -93 KPX g a -10 KPX g adieresis -10 KPX g ae 16 KPX g aring -10 KPX g e -4 KPX g eacute -4 KPX g l -33 KPX g oacute -8 KPX g odieresis -8 KPX g r 0 KPX guillemotright A -43 KPX guillemotright AE -39 KPX guillemotright Aacute -43 KPX guillemotright Adieresis -43 KPX guillemotright Aring -43 KPX guillemotright T -121 KPX guillemotright V -71 KPX guillemotright W -29 KPX guillemotright Y -114 KPX guilsinglright A -43 KPX guilsinglright AE -39 KPX guilsinglright Aacute -43 KPX guilsinglright Adieresis -43 KPX guilsinglright Aring -43 KPX guilsinglright T -121 KPX guilsinglright V -71 KPX guilsinglright W -29 KPX guilsinglright Y -114 KPX h quoteright -49 KPX h y -32 KPX hyphen A -26 KPX hyphen AE -20 KPX hyphen Aacute -26 KPX hyphen Adieresis -26 KPX hyphen Aring -26 KPX hyphen T -95 KPX hyphen V -41 KPX hyphen W -1 KPX hyphen Y -92 KPX i T -58 KPX i j -142 KPX k a -6 KPX k aacute -6 KPX k adieresis -6 KPX k ae 21 KPX k aring -6 KPX k comma -53 KPX k e -29 KPX k eacute -29 KPX k g -38 KPX k hyphen -99 KPX k o -30 KPX k oacute -30 KPX k odieresis -30 KPX k period -81 KPX k s -9 KPX k u -3 KPX k udieresis -3 KPX l v -83 KPX l y -93 KPX m p 22 KPX m v 14 KPX m w 15 KPX m y 3 KPX n T -42 KPX n p -5 KPX n quoteright -47 KPX n v -21 KPX n w -12 KPX n y -31 KPX nine four -51 KPX nine one -75 KPX nine seven -66 KPX o T -85 KPX o quoteright -39 KPX o t -22 KPX o v -21 KPX o w -6 KPX o x -26 KPX o y -31 KPX oacute v -21 KPX oacute w -6 KPX oacute y -31 KPX ocircumflex t -22 KPX odieresis t -22 KPX odieresis v -21 KPX odieresis w -6 KPX odieresis x -26 KPX odieresis y -31 KPX ograve v -21 KPX ograve w -6 KPX ograve y -31 KPX one comma -91 KPX one eight -86 KPX one five -67 KPX one four -119 KPX one nine -75 KPX one one -62 KPX one period -119 KPX one seven -141 KPX one six -111 KPX one three -61 KPX one two -47 KPX one zero -94 KPX p t -15 KPX p y -19 KPX period one -119 KPX period quotedblright -108 KPX period quoteright -125 KPX q c -2 KPX q u 42 KPX quotedblbase A -3 KPX quotedblbase AE -3 KPX quotedblbase T -78 KPX quotedblbase V -83 KPX quotedblbase W -23 KPX quotedblbase Y -79 KPX quotedblleft A -59 KPX quotedblleft AE -52 KPX quotedblleft Aacute -59 KPX quotedblleft Adieresis -59 KPX quotedblleft Aring -59 KPX quotedblleft T -37 KPX quotedblleft V -14 KPX quotedblleft W -3 KPX quotedblleft Y -35 KPX quotedblright A -59 KPX quotedblright AE -68 KPX quotedblright Aacute -59 KPX quotedblright Adieresis -59 KPX quotedblright Aring -59 KPX quotedblright T -45 KPX quotedblright V -14 KPX quotedblright W -20 KPX quotedblright Y -35 KPX quoteleft A -80 KPX quoteleft AE -73 KPX quoteleft Aacute -80 KPX quoteleft Adieresis -80 KPX quoteleft Aring -80 KPX quoteleft T -59 KPX quoteleft V -36 KPX quoteleft W -24 KPX quoteleft Y -56 KPX quoteright A -140 KPX quoteright AE -149 KPX quoteright Aacute -140 KPX quoteright Adieresis -140 KPX quoteright Aring -140 KPX quoteright comma -196 KPX quoteright d -126 KPX quoteright o -131 KPX quoteright period -220 KPX quoteright r -145 KPX quoteright s -140 KPX quoteright t -114 KPX quoteright v -108 KPX quoteright w -105 KPX quoteright y -118 KPX r a -20 KPX r aacute -20 KPX r acircumflex -20 KPX r adieresis -20 KPX r ae 7 KPX r agrave -20 KPX r aring -20 KPX r c -24 KPX r ccedilla -28 KPX r colon -81 KPX r comma -97 KPX r d -14 KPX r e -12 KPX r eacute -12 KPX r ecircumflex -12 KPX r egrave -12 KPX r f -18 KPX r g -11 KPX r h -19 KPX r hyphen -120 KPX r i -28 KPX r j -35 KPX r k -29 KPX r l -47 KPX r m 33 KPX r n 6 KPX r o -19 KPX r oacute -19 KPX r ocircumflex -19 KPX r odieresis -19 KPX r oe 18 KPX r ograve -19 KPX r oslash -19 KPX r p 28 KPX r period -125 KPX r q -11 KPX r quoteright -37 KPX r r -13 KPX r s -24 KPX r semicolon -69 KPX r t 17 KPX r u 17 KPX r v 24 KPX r w 24 KPX r x 2 KPX r y 13 KPX r z -19 KPX s quoteright -48 KPX s t -13 KPX seven colon -148 KPX seven comma -140 KPX seven eight -79 KPX seven five -84 KPX seven four -111 KPX seven one -67 KPX seven period -165 KPX seven seven -62 KPX seven six -99 KPX seven three -72 KPX seven two -69 KPX six four -46 KPX six one -61 KPX six seven -48 KPX t S -35 KPX t a -20 KPX t aacute -20 KPX t adieresis -20 KPX t ae 8 KPX t aring -20 KPX t colon -102 KPX t e -37 KPX t eacute -37 KPX t h -7 KPX t o -39 KPX t oacute -39 KPX t odieresis -39 KPX t quoteright -94 KPX t semicolon -80 KPX three four -52 KPX three one -74 KPX three seven -67 KPX two four -92 KPX two one -66 KPX two seven -71 KPX u quoteright -38 KPX v a -6 KPX v aacute -6 KPX v acircumflex -6 KPX v adieresis -6 KPX v ae 20 KPX v agrave -6 KPX v aring -6 KPX v atilde -6 KPX v c -25 KPX v colon -71 KPX v comma -113 KPX v e -13 KPX v eacute -13 KPX v ecircumflex -13 KPX v egrave -13 KPX v g -11 KPX v hyphen -24 KPX v l -82 KPX v o -21 KPX v oacute -21 KPX v odieresis -21 KPX v ograve -21 KPX v oslash -21 KPX v period -139 KPX v s -19 KPX v semicolon -62 KPX w a -6 KPX w aacute -6 KPX w acircumflex -6 KPX w adieresis -6 KPX w ae 20 KPX w agrave -6 KPX w aring -6 KPX w atilde -6 KPX w c -10 KPX w colon -71 KPX w comma -70 KPX w e -1 KPX w eacute -1 KPX w ecircumflex -1 KPX w egrave -1 KPX w g -3 KPX w hyphen 1 KPX w l -50 KPX w o -6 KPX w oacute -6 KPX w odieresis -6 KPX w ograve -6 KPX w oslash -3 KPX w period -95 KPX w s -18 KPX w semicolon -62 KPX x a -2 KPX x c -29 KPX x e -25 KPX x eacute -25 KPX x o -26 KPX x q -30 KPX y a -17 KPX y aacute -17 KPX y acircumflex -17 KPX y adieresis -17 KPX y ae 10 KPX y agrave -17 KPX y aring -17 KPX y atilde -17 KPX y c -35 KPX y colon -81 KPX y comma -117 KPX y e -24 KPX y eacute -24 KPX y ecircumflex -24 KPX y egrave -24 KPX y g -21 KPX y hyphen -24 KPX y l -93 KPX y o -31 KPX y oacute -31 KPX y odieresis -31 KPX y ograve -31 KPX y oslash -31 KPX y period -144 KPX y s -30 KPX y semicolon -72 KPX zero four -58 KPX zero one -81 KPX zero seven -73 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Symbol.pfa0100664000212600000240000017122507477306250015032 0ustar mikeuser%!PS-AdobeFont-1.0: Symbol 001.005 %%CreationDate: Thu Oct 21 1999 % Copyright URW Software, Copyright 1997 by URW % URW Software, Copyright 1997 by URW % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (001.005) readonly def /Notice (URW Software, Copyright 1997 by URW. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright URW Software, Copyright 1997 by URW) readonly def /FullName (Symbol) readonly def /FamilyName (Symbol) readonly def /Weight (Regular) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -229 def /UnderlineThickness 46 def end readonly def /FontName /Symbol def /PaintType 0 def /WMode 0 def /FontBBox {-180 -293 1090 1010} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 32 /space put dup 33 /exclam put dup 34 /universal put dup 35 /numbersign put dup 36 /existential put dup 37 /percent put dup 38 /ampersand put dup 39 /suchthat put dup 40 /parenleft put dup 41 /parenright put dup 42 /asteriskmath put dup 43 /plus put dup 44 /comma put dup 45 /minus put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /congruent put dup 65 /Alpha put dup 66 /Beta put dup 67 /Chi put dup 68 /Delta put dup 69 /Epsilon put dup 70 /Phi put dup 71 /Gamma put dup 72 /Eta put dup 73 /Iota put dup 74 /theta1 put dup 75 /Kappa put dup 76 /Lambda put dup 77 /Mu put dup 78 /Nu put dup 79 /Omicron put dup 80 /Pi put dup 81 /Theta put dup 82 /Rho put dup 83 /Sigma put dup 84 /Tau put dup 85 /Upsilon put dup 86 /sigma1 put dup 87 /Omega put dup 88 /Xi put dup 89 /Psi put dup 90 /Zeta put dup 91 /bracketleft put dup 92 /therefore put dup 93 /bracketright put dup 94 /perpendicular put dup 95 /underscore put dup 96 /radicalex put dup 97 /alpha put dup 98 /beta put dup 99 /chi put dup 100 /delta put dup 101 /epsilon put dup 102 /phi put dup 103 /gamma put dup 104 /eta put dup 105 /iota put dup 106 /phi1 put dup 107 /kappa put dup 108 /lambda put dup 109 /mu put dup 110 /nu put dup 111 /omicron put dup 112 /pi put dup 113 /theta put dup 114 /rho put dup 115 /sigma put dup 116 /tau put dup 117 /upsilon put dup 118 /omega1 put dup 119 /omega put dup 120 /xi put dup 121 /psi put dup 122 /zeta put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /similar put dup 161 /Upsilon1 put dup 160 /Euro put dup 162 /minute put dup 163 /lessequal put dup 164 /fraction put dup 165 /infinity put dup 166 /florin put dup 167 /club put dup 168 /diamond put dup 169 /heart put dup 170 /spade put dup 171 /arrowboth put dup 172 /arrowleft put dup 173 /arrowup put dup 174 /arrowright put dup 175 /arrowdown put dup 176 /degree put dup 177 /plusminus put dup 178 /second put dup 179 /greaterequal put dup 180 /multiply put dup 181 /proportional put dup 182 /partialdiff put dup 183 /bullet put dup 184 /divide put dup 185 /notequal put dup 186 /equivalence put dup 187 /approxequal put dup 188 /ellipsis put dup 189 /arrowvertex put dup 190 /arrowhorizex put dup 191 /carriagereturn put dup 192 /aleph put dup 193 /Ifraktur put dup 194 /Rfraktur put dup 195 /weierstrass put dup 196 /circlemultiply put dup 197 /circleplus put dup 198 /emptyset put dup 199 /intersection put dup 200 /union put dup 201 /propersuperset put dup 202 /reflexsuperset put dup 203 /notsubset put dup 204 /propersubset put dup 205 /reflexsubset put dup 206 /element put dup 207 /notelement put dup 208 /angle put dup 209 /gradient put dup 210 /registerserif put dup 211 /copyrightserif put dup 212 /trademarkserif put dup 213 /product put dup 214 /radical put dup 215 /dotmath put dup 216 /logicalnot put dup 217 /logicaland put dup 218 /logicalor put dup 219 /arrowdblboth put dup 220 /arrowdblleft put dup 221 /arrowdblup put dup 222 /arrowdblright put dup 223 /arrowdbldown put dup 224 /lozenge put dup 225 /angleleft put dup 226 /registersans put dup 227 /copyrightsans put dup 228 /trademarksans put dup 229 /summation put dup 230 /parenlefttp put dup 231 /parenleftex put dup 232 /parenleftbt put dup 233 /bracketlefttp put dup 234 /bracketleftex put dup 235 /bracketleftbt put dup 236 /bracelefttp put dup 237 /braceleftmid put dup 238 /braceleftbt put dup 239 /braceex put dup 241 /angleright put dup 242 /integral put dup 243 /integraltp put dup 244 /integralex put dup 245 /integralbt put dup 246 /parenrighttp put dup 247 /parenrightex put dup 248 /parenrightbt put dup 249 /bracketrighttp put dup 250 /bracketrightex put dup 251 /bracketrightbt put dup 252 /bracerighttp put dup 253 /bracerightmid put dup 254 /bracerightbt put readonly def /UniqueID 5021339 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a13 e5927617ae7f247a71ce0c7d56afd75d85ed2d9f20ff9a6c38e8d5205197 d08780180cca9c35522b1609b501724d4d6400169b91bceb6a4de00afc78 1cf8873012b3117d22a18587895543dbc2a1ffc7752376decd4c92a69122 4258e8f8f113f2a5cb3d8da10fe823c6656a8800cbc7ffd018a28ac2885f 35e22ef9fb549b00e23d31bba304dd9c28df02a8c370ce49c58a40c9f673 ad61f5abee9d62ebac590b5a44f2babd96e137464db066b602a5d8d43ed0 41b780f0fb98f9952f20ad8084199adfee9ecb193c018772e63a5a83bb06 00962fe724f63351b4b7a16412743ad14a38418877768af423e3348d48ed 773c2e87624cfef777a15b6872f54488e42c4849ae6d54cb857dc0972e1b 57c88f40b89928ea43c18dbc73182f69b52f0bd66b7133881676616ab669 723240f17d5eaaa27c8e295862288dc30918d00008c9592a51f39e30ddc4 62f6287654eccc13fb9525f6eac5709e952fb237e8cb0870cac5ddc13da5 8dbd060d3193fc92e6c4cef3bcfd81ce6b3679bfc5855796cdfa8a26d63a 659a2ff7a1a7e318a7f76ff80e846a2d647d38e827ffaf54bd5a9221eeb4 16a475eabf4ef0409b3cc15077e01f742c46ed43ca72924c32e48a786224 63396680cac363406c524a9b3b768cd5a6892643f78b7cd65c610ebfebd1 058dfeea67d8a9b9afd9bf39033a56856537c06f75bab0a47079dff64cf7 343cd6e7fe7bb1fbcee32749c91435cb86f7550d505c81deffbe1e3a1f63 04dd03cd20842b335d7fce6eb31f175724d51c184800c3756db044e2fe04 bf53e995fb425aac96fcef384c930334b5f384536cb3abd98447844babf0 4ca767edb70786132c796cc2f6530852275ab4df0c8b4d2eae01380ed24e 62f5a85dc8345d556c67f00f622d32dd66fe18219169daca3744a819cfac c305fca9471a0de5936e270e3b2d4e1211d9da8de26e790c6f56c2ce8b19 e175256e8bf85b8e52db7da8c44fe52e57af48de9b771658139b6b81b360 92ece2b629c0f64d31d62dc7d422c2a204bc0414cc6f78f4e975bf8f27a1 7cc3b35b31ed313b5274f487a92ebb33b02af472ebd84c4b1b4006e5c522 8a6f7222dab490259de2223f4cbcdd006a6549f08085eaeae51e4d7b08ac c8b08e8f98dbf79ed4220132a755c007366600fc27e0badd73c875074b6f 211da05ff1454730f3ddfe96d36ca12f8249cbe74c82a940f1d60205cd96 24aeb7824d5b0a1578eb3fd45ffdb97e66bf0faa27bc25e631c20674e7d6 db5e4cc7b10f3a77731aa3a53a187e5211da39f2e97c0236e36f8714c49d 630e6e1fb42206cad9361794a9e002369ccc6587f9a4cbce5cfde26656dd 8a36663ca82efc1e93cc58863e3a290090906220923f544e8ca05e5c8377 24afc674e6008278fcc696462cd7986aa3b884ed5c17f9d035b9a1a169d9 f8f28875f7e5d7bab34668b61d026f77e37277d53e9e0467152f6ac7ab56 ae9206f15177732ead7b2a003799862772b241d65818c0d2d6c53fd0945c aa1719db446f7ce5c383f28bb1f419f023f3def204e895b8057407648efe 1973dc8f7b8c17abaa1716ab69f3bf0575f564c3400fb55bc430f455b266 871e7569c39a81bdb082fa5134239272f9d69d2f5be493292555a5115a0d bdf30da71bdda418cd5875bf2c0ccf00e236f2c97056b102e8e014c2c118 a76cf79c10fe2921d32022b8f96443bfa1b34189e5c5abcfec51ad20cc45 08ac5376690bcfe01dc8f924fa190a6f1295c15c74ddad5e9c4047ad0145 76858a265ffce0be9e77e763e911bb662359df98dd767367dae1b686eede cae1f0c9cbc54bc4cd46e51471256bd340b338c38dcbd6d327fe6d2348b4 eb2a1c95bf082f2e4a1bdadbe349fb331ae9ea002c602097746265455a5c 60a7c0bbd2f407c8a7e5fe9fbea4bd8ec9962542e2e3021a0ca40f3b3ffd b790592167afb21dbbb9eca9012d06086f1de6749ff3c63be36e0a55a9a1 03406d8ccc095975872fe895b8c43a2a445afa5e03c7902489d4f4c4a9ac 829121e532c6604c059c355652fc9c2f16a553d5368ba0752dfdca4c0e9b 944bd1c2d115c25e4421ebe412b171290ab0d0e5b0b2c42bbe58a4eb39ea 61c710496dd8a4f0de76759f5d55f557224a4b9549cea21b8fe277fc5848 8fc369d9c0f1a3dc52b8542125bb42561b594bdf33be43aef93f00ee5c60 274affc05484b0011d8c465f56bb9d04feb88b6de54fc2104b07dc5ec8cd 419d9f597e5f4ddfc0bbb0e920629fdf06492bec78c970c1e6653d4bbf92 d3f1cabdc4fbae380b22f1db6e8aa9b050e33a384d5cad9543a3adbf91a4 a94059705d20d906fc7ceb2577ca5004339ecbd2a3679f29eb43c89247fa 11350bad35ebc938bbd745f774727de92eb78bfcbdb109c54022ad09c21e 85600dcb70cb1b51aeeab9cce57b8b14c54eeb1e956a8c39617472165808 22c531bea4051318283a3cf1f612360b4d3ed785ec76c59ea475c15b15e9 e19314bfc6a12892491cd9d7cb3afd9020bd28b685129ef9e2c151c59599 f1e8e13eea8fb5746cce8ae317691a28d263c77714e5f401f9edaef085b7 2a86a9cf5dfd56739e3bfcab4929679ef111d23378a443440cf9523d3bf2 3f9bdcdcd7f2c40d75099f3777e66f6e3f1ae4def3d5b062ffbb2fbda4b9 38f80f74b6be3032bba77f99501878567f48a64eb09f1684f095f8b4e407 a78c964825abdb71faadb42aab7c41e146ffd21ac742574049dca257e9f3 d4ce46d200f776ed7915eea1915e321177963dedb2a24c8701d70a265856 8cf1313fdc4166e6ea59a4bd300930911c13b7bf4e72012fc99cccda3b8c 6d07febf15c0a15c01b220a6dfbb1d80ceed73812be525e5b7b35bad9b67 72c6673ca1f580fff16f3c96b9b9b7f041aed50cdfcf7246db20787436c9 e2b8706d38591372badac219b83ddb3bfa1af853aa3a7da41b16bdf5e42c 8277c2cc73c1c9f668931e66ad5523d435dbe68071d056cb8fe1de179c52 44cc511d40bba8311d976a2120a6c46e85b939291f60394c911e30a214ad 03bfe58a03e92fc67bfe81b828028e263650d27b064558e3eb72f01b40ca 4cf029b6f1c1843193fb23721f1f6f19922f821c28ecd4340f10e96eb38b 788c589cb8815bb708b0c46c378e8c16eacc72ccf9ca0b9ebdb0b4906af5 8fc5cb8e7d62191f1c11943bb76d82251258c4b251aa9561d42adcf0a5f9 18491e063b6a88cdf4e0c8d41c968d57c6e3fbcd6bc618d139a687303ee1 2a6b31bbf23a04f19590540468bb12bc46c3e69f4bab7d195a1fe7db4098 09f5a6b0178a77a4792f69c23489f5034379b4a7668cc1c9369a36f8951b e8c85e23d2e47dedf3718c0a2adf816acbfbda1d46ae86293448abc732db 99c17a6e747dfe204cb1161c9430ada3787bdb924556234f9e2cfae7571f 9542fc06c7b7cc06f630d43c04a454c2dbd1b23549311b03d8bace01fead 8e0f4967f514ad83472957cb2fd7661bd18215af416609669e878c72e1b8 f692c44911958cb98bcac7c3087956e5369e6f41f1603ed496f4766fd351 7e88680d37104f5455d00b7769aa1eb0497d65b9c53952b4ceca60add156 d91f86c60c6e683de2d67fd900e00aff558004a66e12a9c1b94b2eac6162 c89610943e65de52fc63a8ff04c6e0b80cbfe53e15f94647c5ea40ecc42a 6bdbbe981cc27fed8df21369c37012087ce77408b77866ecb381f0a1dd65 1772728b8e07728bc82ad72225c94c86b2451d891c1e1bf843067d38ec94 23a269daaa3d71eba07fb7f5982bd73ccf01c615ce12b396f656d86e0e4c 62bff0305566cbc839b1843046cae4b57993f86cb5d5ee8a5381c33f136e 01b779492e3d0c86787943046324887eb4e927307678f2c8c8af15d5af78 7584254e99baf1e3345d89eeca11846cccd62bf08b6c3937f7a3d816ca6e d30c71999a392d34f04e502e01934f2df047410e72b50a53f11079103502 080e75e0314bddaa9640887fd0b2d248b73e8ea80bd8cf69627f0d345a73 791f257bb59b3b0a76243bb06bd0b1fca3448ef08f012fe7d6960d592923 b13a6962b0ebeff6ee814b6cb369cad2399a3b3e39ad7f0dd9c32fc7eaab 819eecc9b3fd971231a833d00bcf78ce224933c40f1fd31ab11d89932ed5 6046d87bebeb0d04dfaba88f20070745a4fa25cdc7f482f6a29e32d5cfcd 50fce23a1281cc914d9d2fa2d62114e00293e2e74e25e99ce2db0696de78 b67bcb47ae793721e6958c6da47368536a5c9f9fbc134ddd4d08bf5c0b2d 3bb4f863eb2c0e88e8699645a41ade9ce5bfc877d7c3c7bcab236fb508e5 c8fb6a1c33179670e294a7a068199581965c0ffd8b1121f4632088bc9693 14d1319246e8c9e4564bc6bbb723698edd949d12560b33f770fbecbea8c2 3beddd57e08c9165420caf1b354852b07b6af70f0352ffbcc71c9172d62d 85c67bcd90cbd733491ecf747cca756250fe5093a9b8457f0fab6fb3f365 cd1640e30073d6f3596f896e55d1c0639573284be2be1ca00db036d4d055 274e620ec875c5d16f2689b20865bae0f14b1453cffefcac59fe0f76be88 d16d5faf229149767916eee5d37e4b2b060a3a3735fcbd078705fce3e795 443568c6b74b1ed8f40c7126610bea528083349c2bb60ad9c15edcd2588c 09c71e5399c0df7ee8e51c4bf67891ee652533564d7e5af2d8910a9879dc a382ee62378e2a3c7edf7437b5f639b633ffd5afd3455a7b1da9c4c7fe0c 03ca927bc933d8821e2f9b7962b8e775717629e24bc980be517eabee67ce 87203d0423e856f10e4a5b7016952f6928a1d3080aac0e25630b19abd7b4 bbbe3ec959d60343ff4df715455ea45b5fe5a6e3fcc77ea118037919b2a2 b1deda705afd532431be9ad75309ecf826af7d63eda6c1434b06bc5e9acb 43ee209e7b6bc20167028ca785d393ba779ce7a174a8988c2f7623ccf2ce 9ac3c8982c865120740bd7494ccae328bb37aa4873ffd99c46d20059c1c5 bcb9aca5e0fa9e1200d12545df876c580e1ecd188295a790e039729ef939 2117044e157051ce87ef3fe59bfff2557c7138d4c630680f93f31dc51b87 cd7fd8d2142e16b89b3abffda36ef051b5643c4f533eeb1f8ac18df70072 9300d3fa5abef49b53a887fadb0dcd5b3e0b22d988c2d607dd2c9f5106f8 3a521e755684abf21960a0f9033066d573df043adf95f7c8e9f822cb1fbd 5eed34d0550f44fabf736a5e6338ab99cd0ced9c8a27090c85b498199c3e b567f2e92567fe87b20899a3b6843d71d43b28b1c20de059c102c0580254 642f24efd11ec8ac2819ddabf1ad4b1cd9afe92cc0e46e194865b980b28c d543df06ac23efc9c64cbee9d921c29c696f47bd8e700b6d7c1d052e75f7 597c5d513c76ee9fde2951cd86703ff6824d2f42d4837893d2bf82349260 038d21e9e0fa96ebeec822f6e91ec01f214aa9d1b83f0b732cee3974019f feee359a25bd36b0b8e8250dbe1935bc0ce2c33bbcc6d1e7023630c885ae fa7a770fd3b1992ecd9aad06a13dc58f18fe545671e54c71b8f5e66d076d 1901ac6bf8e874ca84054815a145a7bceff0787367b58c668e22028216f6 27267f83f279656f6b4fdd61fb071241cc883b0060fb9b8d74313be9c271 fa13ea9640adc53564f2d2a85e4d1799b2e5d04b67f13a30914bca5597a7 2d1456eb9f228f56ea95d1abdf5b4332df7892b23c571be72ce474a56854 88e3b3eb489b6de3f5e3fd5435e3cc6bce8071126261d2b9255417a050cf 5a286bdac485a678009cb3f7b4be9a245270c08f92f339b57fa9cc899b8a df5f73361198781480c3b4d6a2d8c65a60749a47cff15e761a0352c5ab72 d1df98ef57cae899dfa9d8cc7fdf02c4fa66fb90a68b8569c277d99376ba 317c9e6e59d7971b3fe53daefb91fd05e32fdd517b0b22a636524b4bc23d 7464bbfa592b4385d006a495c0f74684fab0d2aa4046b8721cf503e16e6c 6a65b54d929212a796134ac6ebe6283b722286b8cd869c99a5b7f9b3506e ad333ebf2e6b9c97f15f0cb8046f0980b0796857621626ebc802d5f3198e d91ec321522d6fa84fc3bc752f6a6f47fc2c051ad193ad4e406ca0150a9a 77de9371f832d3aca7a84ca8c3f7d97dc5e9485c4f2a77ef071919cc90be 7fe13618a4a9bd73870a968cb8ba24688708f485c15872888220e73aa662 368f410ef76b34655663c54aaefee827b7c553abc82543fa8e8dde1323c6 040fb8f24fc213a188f1949a4701b73c0464ad9657a7535440307897d816 b3e4b6daca7684f92a4b74262d772969dee711e4ed9ee115fb7f91bd9d1a 3d40325f135b2e037350a36b43cf5a4cadea68aca368f99278fa5ecdff0d 10ed1517489c3e59568cf5676015d06d296e7a26013d1282b0be1aed1e1b 0b72a9bdf8e8d7bcc14633875c07cf5cca202965c0ab8dcf250c33990073 26ca40b0e3b45a9f82e601b0f69d362cc9352defafb017f76710f829dee9 f4badfcf550c83868b5100ac893517a84e0dd8ca2c0dbf356e0a7a533080 ed1b39de69d1a31f0d2fc4d80cf09e75a82401b9e205953571c2988cc68a e61e0c986e7631b822ff448098f015a925fa9589d4da4f0b47413218a6c4 542d45ae8f328318eb676944d9cd0611263ce4f1bec8470d1b8646de66d3 51646200b5a3e8c7a76940544cffcd6fdc9824275ba4095ef08f5b43cf24 db7d8b1a0b196e255bd6098dbc3f9859d49a159c692284b52eded6320230 6487c99740dee252eeb2ce6a53479eaf7fcd6057346b6a83ad3578e65218 ee3bfa52f9fd7052dbb3b3f841887cab19395f64779f64d3f9b4a3fe3947 b6a501b68bc288c6ef892f34f8e20a94605b6c42df84d61edcd000dbab26 f4a1e7bb2da0a926ba762b2112bc10921b387e100d9db20905e27d47f0db 3c7cc67f29e4efeb6f179f144b83ae9493f724ab589e94bffbdcda86fe2b b33e6158bf1547321015d46e1667a22fcc7c56d3c60ca255105cec8b03e8 8bfa66950424e879d6db2c4ffd9d6df35ab3ecc8d5da69916784e274bd3f c32077d6636ed73403105506fe86c7393d6da5c0f43a8847efd46d2999c2 a662b2caee14ad13e48f1487f534b666bd3882d5ad91ded50023840c3137 5ee1bfb540190f11c953c3c86c0f66139e57ec50aad8fe9b0aa154250f73 c0e12b85b42b52f46b7dc85ec0610ccdd08c2f3f7a535fd609897e472be4 a4228e451693921ed1f6fd9bfdab638da15123f3552dc8be0530c8a76e85 f59e13d95b5ae41d3171f8c3aa8dad0a02c3749e2090c6a795d53605340c 4e9b596818aab10ca126e84f9023c81bf23cc73f61ddc66199e562780ade bd2e903547098a5915fc7268198af301c501d59b90f5bc507da3b2fae272 8746cbc4ecdadf62aeb3ff1952d7d9f1042ac5448a77f360b34da1e782f3 f10194b3d43436b4117694575f7611d1e3427f7f7814d94af7f5c1fe268a fd82c2e7e9e3f6e0b8b5fd827db4e7b47e131793c6e29b33c9b0857435e4 d57f515ebc299023a438e174150403c894aef50c25ac5aaf7f872055faf3 c1ed0144a6c1028e252c3af250a181bec8730283a087845eb774d9d64fb8 e73b3770b41e7505e4a502ff355e3f7582f329702508549d5e0751124455 8145d9c457df485615592593827f8e16e0c392019e9bb9afa29d2ec37e28 f55f1d812d3f552dd43e9a707fb23652e944967b3da009453d8418c0d709 021b3d6036133611532664e92eb7cc78a0aaea7ec83ed8353551b6d7ed45 71e466e55c00da0929645b998c12f2969d76a27d56ee94d981feec5b957a 0ca637a04a3f0ae1bef57d8a83d1a1593fe04da296482291409185f0e2ae 09fe4c2439e2f4579f54c784c5a53d3897b6af8b095b9a98054bf89febaf 16c481f356753c8bb80195bd24445a802a0517ae0944eec6307996f8381b 2d974d7965e3f3e92296be91de6c548630e726236c658d9861cab98b2572 79432fa474854f9216ec7b6d27a1321a7b670ade7265c10b6aa509bfd3ad fa44cc3a1d33dc82dc4c1b139d95ddd7a2316bfa26c608b40a36ba9bf92f 441ebbc83a5d0b4627c568f65d5c05372841627a8d8e3059d8737519935c 2215be69d4c5f60d4dff230a09e72431c1f0ac9885920574775a1224c3c5 59b0f340085302d07ad4016200443b3bb065cb076e898381faf87af0ab61 1a55a41b92ed6d9510951751c0ed0bcfbceea792ff6b87979489791dc83b 88e74770c07df34e782bbd14377b0399025b011c7db92ca2db7d08099a68 e395e9f282f8d7169e4138dce2824e053ee76f6de8b58296ba38b0d9d273 e3a4616f60f291dbf4346848e7dc0af3b63a76d83f06abcf2175550a55b6 cb4a3168f0d33fae389e0484ee677bdde16c106f39bffb37f90d8912ab66 74a631a3e12efb2e0391bce42a1db09812dbd0fb0bb01abb134ebd0b6eca 134a7ea7e0ee66f809c46e5fadb70085d7f0c8f7d78fa864f241ea501bdc dfb8fb1d2496d96ac23337156cb63f9921bf84b06a7f9de424edb09070d0 9efcfcd32a7061c990bfa088174ec45a0f4a385803c664c22eab041b71cc 959d9f3cf8fcb27e6be9d7e13618482c30de5425382fb964a3bd82e7426a 8ca0ac81a8c09b6c0b416f33c54a45c4f57bbf1026a12c5baa1a5540e7db 5e954ee101c36a703623a7290ce302753ec158b65f810f7c46c55c7f9f12 7aa3945fe2a320a6aa49323125c85e174a828c559783107edd7e3967bb1f 5c6163b9a15b8c9d2be84419fd9c0f36018bde462b7bee204af15eaee3e4 f5fe39a269742ba5398bc6dcdbacfd346699a28b8d708e8b09ef00c4ffe6 fc8be121ce97ae6d92b042895344492ad9a66932913563025c0beb65ca34 3fbcdd121e126c49692d52ab4bcb715f52db80680c0f55a2201b22c2f263 d38a89cc8981c56bcdb245805347a797d0d71e02a11b8238fbc242456250 01ec6890cfb1a0939937aab82ff635de52e47d62cbb38d4c89523556125d 761efbee56916f2ed351a8c8bedeb375b400a5499ef7cc7db0d9d7f60647 c3416ce1d505293ec1289cc0181479b28a71acccd35d1c497f628443fd33 291a48f7afa1d6a675ae2baac9fbc4a189fc04a4420b91e3d51ed1ba42c2 aca67cddab41638c82236f66a8f2cef2c66a33d54253b5609989168e1cb5 e92e9a46256a87104f0fa8390dbbfb8148d7f900b9634a3e67b0f761bff5 f4160b2db21528d0a4d55874eea9f015d952cb8ff88f3afe834fc1ea1de2 73b9c0048e45e3e2aa57e4c092618b50b3c1f51521d03e9ba74389ab4613 b0337d2c74785f28eee574f18178c167e6a3b5a5f6613fbe58b584a35322 2458b6e54ac8aa08f31ab0761e1567265fff40cb3e750963f8179d495c22 6284125367d1ac5d188f5ca6a9fe0f25125f30353df54e96e1f6c511c938 e100be0c1b4ae68d4e3333794f0bc95d9ae9bb517e0d183cfe88e0483bca 95780fb6437cd3c2bc3af965bc6bc58d845d3046ce5d12ec9285c1fdde31 4660a960af7e4a7f07f90f950f06c77be9f26fa91f14fac8dd904eae790e d216e7cc22ff475f8f462e1a46bcda71a9d65d07dedc038d00f493b3886f 674983dcfdd7d760fbde7baacd78ac12f18def55886938f88b99ad4fc8a4 20cbd6003615d4e31ff2942b35f72c1a1fb13c2b22625273f715e5d89a4d fe43e2047562f77e9c8e5c2929bdc7674ee9beaa8c7ce8021d28492d5c54 768c002a366a862bba99390be487e4781513b80a7bcd5d47dc23541c9a55 b9455c53e9325d0d77fb0390cd7e12ce2e4e34581a4ab524a6a91fd3bdb9 e07953447116c7e4f429a99ff6c4c11b1ced99e51127c30904bdf3ed12d7 261c31aa4833ac725f5597b3c1170a4892c3ccc765f02129442d491b1227 0413a46c92c9b83d41eadb08c78037a1c8630599695f00bd7c8b29841540 3aec630237432f7e6f753851cb3588e229ac8a0ee375d815ac0c02250061 09bdf8e0b496dedd2aa9cfaa16286a4662e256778b125cb4db05d252aa66 dada5d161ef6a5971e9ed85c913d1befa7d862aab7e16bc95e03956460e1 f55aa7594800600d5f0d1433ee8f0f0be4cec403cfedca52734645826eb6 961af0c4e1dffa69f1930e19681539960eb58bc386fe31f266f5e10b13be 4d4f46a29ba95403e705ca8dbcdcc03c273509d9a8bded6e6118daf7fbc3 63c7e784f8306f8eeb7749cc6d855ed29f99c7ea8b43378c12738fb813fb 825cdead8a664e1fadf11f7ab84fa7e4257bd1ef7fcbc31e2da8a8582f43 be6ae0fca66760484c5122cb38176951449919341a9eb60093edceea347f f83a16278c37a9ff38202b27a4f75c066fe443a241b630149c585750e2d8 15f627a1254276dbeae8182270f2699ac1e78c6a09767e296a646e5eded4 843d2eb8a68673ac5b81e06510db64872547a92a4bc851e768f43da053a6 bb3be89cbef166e8a3419eede1b97df88a698c0f5f864d81b5c4f7ad97eb f78b4ee82ccd71a34c398dd3f74609c555b7653ce27e78be0de7caa11de7 8fcac0e0293101a2a8c5545941291c56d4957fcd65e36ccc57c8c9dccc07 407a11f5c9cb214ff508a5f617ff24f0b617004d6787eaca97296108b8b0 0276f3b7e28af1db998c36ef517c38d96dbcaf33deb899a344a6c047cdd2 662a02b94f39ac528a21ffaafe364770bcfb995f62eb0c6d076f12241f72 e4b284f085a3c6fe9263f879af8c049979f51ebf49314dd0331e935f94f2 a58a107906c2265e3bd6d644ea75c928ee81268e7db0d2b61775cbdcfce7 43ef1ae9784c4a9b2d4eb0d5bc2651d79f108306722670399d2a90e45364 67c00de86ff4a4f4a51176ed721ea3a1c72cee354c54f62db4982a566307 cfd320d6245bc3108a054f44b3f4f61fde2c84ab416d1816454430b6468c 57d86c155218c6f05fae1fe22a7da461e960c210ec6e44bd7fea797c1cc6 b63f5f93e75bf6ce42dd559eb1e97a8cd01daad4e9af2a544896f6e597ed 16d6847e48539d0fe0c1df99298630ec2b465dd037ca7617ead304993972 4bb3d428e9137dda6709dde2e72e16c80cc960cb85f1727bf30845fa51fc a8d52b6099a65a0cdd444daa35534782ae347cfa7d849ad3a93749db9041 03e597f6dd56e032025f59f7b724d1c947358099ff3b336e6d688b72bd11 5b86d6d0c54dd457b7bce443524cb0718a82d6661fbb05673b86a3ef66d1 981788039a1e26597f2f6c51d055b1de1d32145d39b244c91eb3efd23c3d 4b785b96296acb8ce21882b4814ca4d25ed88a3b6729890cca8843c1e2f7 46289b4e3bf5196e268c5c08e52670e875aeed4e9cef6f45a70d6f944aa9 518c2ec860d163131b66e61be344aafa0fcd4b5af24830da2e9811c4024c b807af29ce56a577666bb8a6ae62dd780f3ed028352dee9b6aef748349f0 71f151b9b33a5c707d690cacacdc1fbc8eaab920d11c4ebf406827329303 32a7542c002ed0e4ef2d3cc5a611a48585fc0097426f9710d6dea70f1ffc a65b3d39c875369a91c045ae73d2de28b548f6bd8d0d76e874655e7ab6ef 5bf9a4e08e12a1ad867ff1b70cb0f2ac3d198d5f70c3a251058291d7f537 e66af56c87c11916390b7705821107c658d2a403cf1c6cac79137505d904 a6e31f34ef23045f923ac40aa9335058ad760dcddf43aa9b516652fb81fd e901d29cc3d2ea99c42fb8cbb10a5cfc0403c5db7256c7d3ad11934d3fcd cbde7b87e11966fd3361210cc511459cd82b61ca45e208a92edc040cd58b 2828fad652ab3846c0415fbbc503c9251d7fa661fb8e5fd167fd3e9df8bb 17a52d2301c21f974b16340ac7e431272b48895f837687cb41ee7595a826 315338d997fba43a9f8a0a9067229537c85caaabc2667000e6961f5ca11d 60d3cb970d0e059e7446f1b42166292d96abae83a185ddeeabbff0d9da54 ced5cb12e782a26b7128f0da66ebbcba7f45b6d4522a3baafa39d764b7c8 3efda777dd173720d41e0c494949372f9be61de175bae4ad0bf8d788b3d5 032bc46e95821290cb6c665122220ccd6cff2544b3ad1e11ddee3c0c6531 81abe20f6a66a4e898eb48636a8d6087fb79477aaa5419b785dad54f49ca a8c3427f2973a49a5b064767afc3b028fa53ca96401d912a71514abedb68 e6a41b2dc619041ae1b798c1d6d064478ba17c0d040f73f1d158c72fef16 0d30b80a9ee8054ba8860f69f2241a6926737a040e06fe294544a393fba3 8e9d850adaaec2ae183b12fb776c82cb3460db4ceeffacfaba629c7a0edc 662d8fc48b59db18e8c5908d491359a9c1dabe1418b46978924cd0028f1e 19399904737f41ad8de10d4214d05d6a4db485cbfcf4df0921e4e629ab83 4a695c317b791baaf902ec59231b856e3e646868ce13fbd5cc41b6fdf3e4 d918a02efaa20aab7d526a04edcb2eb388a2ccbceedb9d0b0df1343e1831 7f46a6054c2bbb14201a92afbc452c760f16e12cf94c8a901f50f1263e01 9308c5aad246ca64570b122032948bbcfe1152937c2c32b764f78bc24817 4a72a706fce7487ee6c605d48eafc229c9206077a3f0fe0868ad5fedab9a 9b07a7d7d973fdaab891509a8c8c3cb9862bbfe04cd0c3505df3ea8a4b51 981705b38ff503abc17fd88230bf242fd737314b9d7b613989438d9e0f71 d5cbec77f1d93a517d9fe08e0aa138d3aa55c232f493ccc1f13ec45f2e07 5bb3a95f0d4a32d5dd2176a06bcbccfa8d0ff2e2200ad6f2cb91d325ee48 40ae4a27c8709eecede5682c0fd5d94d570790e304b9b4fbff08852d9895 f7faa0464f625e7d51f3fb5424ee25e89da33936de5f313d13f3a5c565e3 3ede87b22cad211eb58b70f671f5a8c473a15898ef3d35c0d496c62b01dd a1963999d313b475dbe8aa888a4d66cfe1af9c86707d86267ab18fbfede6 8848bbb9dd5af6a5817b5594c6a74dae1cb83ebed616f7bde4a43c6a3811 a7f0b6ffcc08894d118f53828d5c55060eb0acfd818cf991796a9439f733 9482c925946a5e5d7b55ec7c9f0f31de88caf20686ff27415eb83022c7b7 299f23cebf34a766a4bf842de6c113c39db711a6291ee66abc42e4021dfc 43d91aec3aec56ffa48fe9d555d9c435ee363533fe2195111b9483eaeace 96281b83962fa3f7e0c57a2c3cf955ddd8774a263ee61b2d43ad97b0cc58 d4657bc27aef767215cfe5c9f7a87df9d439cecf6124baf26e619e7d7a0a ffb678df6eb3d663bc9f77aacd75fabad0b41622c3d5ac9a78a432595715 5f36c9dbe2d1dfa81bf0e11e0512978bc8e74d30b73fc9fb783539a1c132 1b893b4ff9787084185280967b2d2df72690339994563b8abd371ffbb832 3c4105d304ba0a184568dd1f32d88aa56724286535c33182fb59830f88e2 d878822b1c0202b3d34fa70a1525e5f06bb08844abe54e98ca304fafdc6d c9522871eb5e6c838476cf5c15a43c694d7ac26b04f8c0deaf7f0cb0e44b 0448e958e31374de9fe5397530ed700e78e09edeaba6d006b5e82566c399 afdd754ee2638ecc0a2f59a1557a084502ffefdcb7e9b32ac98eb2750038 bae5487dc255d76461273fa3708b8a1af0397a2c985f45a26af331286e27 dbc1e5624c7eb27d87a94a8bbc5e2a67f78e9b202c2298ee390f8cc3581d 407f555d2699e827058940d1c1c69ae67209d354da032287f55668fb6034 f5b96919fe361fe6870ef24c914a6a1e98c9b1bdc745c71ce5d6111e67cd d5b809b8f789151baf3a208e949c8c7f69bbbd5bdda2958e444d960746bf 955ffbbc82e88724e54a0bbb4e86085e079d60472b7d9e2e38b58206d7eb 32bf5459005ba2839a007cc41d41c019713f17b1e209da9a2cccac58a9b0 e39bbdba1c0e4aa0ea12349b64271e965fd0b5f5d49955034e635645e76d cef521cacf68df4ca06557d0900699c52ca3286f682215811fea8c8e7569 bde853033e165bf1670f1b181988da996262bb0326ef9591bccdb4d48076 86451d5842d7a79d5e5f5104528c89178e286a4115b9ecdd36cc3b1a08f3 1c54a2943027de0114ee35d096379c1697ff60336155741cb4669b3ca41c 6ead258f7d29ea3b4c932511f697eeda22b90c000ed5df8170f0e189b110 13e3852953c2fa2fb21907c5e19b8343fe43529f7219fecfa8b4a7bb3e01 fc74eb2dc148940e332d1f53f4f7226c78b158cadf82d756b21e96718db7 7ba7aca31fd5279d19b1cf40690cf3f7a3624611bab4a7b0ee77b4e30a10 9bbc1549d0a6f9b6f7363f73226ad19b9295824c1523a8ca0efd878cdf81 e8df64156d7f5f068730eb304abee1344a9f8d366d0540e913d8f79e9da8 044de90066a639796fe62569c78ad5e52da7853b5cd251737fced1e17e75 73b5341ae6927ef38bb57a84370ccaa506bf9656ea00c7d65afc6a7c6253 42f369bd932745fd4ec25a5afb57c9bc0c8c82de8e9e7390b16064efffbd 151d9e169f42bbf5ec9df52cf88289ea9d829a29a561b03ccb14bc6a0cc6 277cd53524e94c0aa173d4b72d3ed2fd7d7dc7a25b7cb9b768310b885a99 480337ce2c11fe903d7fc5b59376c93d6c169d25b9e8a2cec8b5d971f77f 0029b61d36d9c46a5fea7d49ffe0320c3b83f5a7dda48ee4a5e15721f778 12c5f618784670c92d7236cd1d19248fc8c90e6c0bc876a1d9e3b53857fd 3ee7790f486e7ec4dd3da944967d62f7e8d706a9f6ebff86b38a5300df6f 5444148978453351bf8d230215d35257bb54a702efebb4ba90f53cd13469 09329e92e064710259ff8a33f1a9cca5ae5bfdea62876539c0aa79b2dbd9 5f0b80ac51842edfac8ba6c79aa9f0914113ca29565384571b885aed9ff1 e2df3bdd667514a78ee26b59f96261b6268b7afb245de6ee930943c3d52c 238ebb6def8f6777dc9840d0c220ae81755c742c3cf42f6cf3c33a2c6a4f abca01ea12c37b2cd899ce780e434592f23c7fe96f878aa5f196d9a70bb3 d544247a5f295042842181d78f1dd58af09d99d25f4647bfef59e133d425 7aa689bdcf248532556e6a4cfdf558bfc1af8d0991889ad61d8ba10da576 d1366be4f6b0203899f9a02fab34e921e9a7b09c2d06f8c6600b9ffcb187 d95c1facf73d1ecdb28bd4f5143bacae5e193dc0d196e16ab2e4d3168a76 24de988e1b25e56406f12b6846c66d7ee0771e71be78e2aba637364df774 f91bd43e6608359b8540bdf22e28c34bae81ae5bfe50d754553cb6858a8c 2fb7dfe840421b702b99f22b221455d28ac55f2b8b01e5c6ed897d42fe45 a36d396f2b263fe51663f898fd747630dea134d758954d52a44e36c743dc d5831f732a23d4aaf49acf6bcbb3884a21063cf0a007e2516bfa71683e34 b361d4456f5353e72c1db7c693c9d0357ae8179a644f2f373d5c763f5e6c 8c8b487288fb8377112784fc50b31e39dd5d69d14aa893b55534374cecf6 19a98b47eef81c8cd20bd3b1838654f308fcaf94504fd5fd8e93f07a4760 c182651145778990122e2afa7b5623061ec3f4d7d9f061f2b7a7a09a3ccd c33cb1602093369acff1eb1c6dfd73dfd67a4aa978ba1ba496bc17efdfe7 a8f533486c3b69df01bc5a20230235454f3c41b0584d28f6e8a019db4cc7 8d5ddc5d9d8a867b7dbf3e39f7ac68ca55a40d9a05e2e385835c888288c2 4cd9fc51ad2250493122e0302655c463cd7e1188b5081387c4674bf16edd 2c1f1e49b26899db5e1a4cb1bf6afe14dd24400877f8c8657ba4d3227c76 7c1971bd33ef70472c2542b60148fc4ae31035240bf578e3ba4ce8a479fe b4ab2d06ca63f8b80cb0b592b2e6977db02bd2d9f81335f13f803f5c5cae 420236e8c5c11dc4d67c210cf2694b47e7d71b47c29c280061b9ca2e4fd8 a303ba12aef815503b67955f62bfcd7b2a2ea4e31f799987bdad5d028b29 eb1d91bf894a8cc7f4751d15d11f80c40c0eaa38af5a9cf69d8942a21352 e3657c3657d92b40985edc1ebfa807c5285a74c47dfdff79c41aaa22826e c0161e3a4e6249664f7b7f52161d0ed4630ca4cfdd6d68fe2b4b7a4d64d7 051b2c12cd0e4dae0f66932d7881d601fb62f3eeac552e654c2de5bdaf65 178efac1d91ddadf43980b1a23d5c3b5d38a39115548b7124b8bc5fc8f45 e15f32f506ef0d7dcf45c93d2925829133a732a858cd6f26a3546a613bc1 024a8d31276e529322d8075bfc9e970415940f96ef9be114aa3c97fcc08a 6e67971a6854f4cfdf8f6b43a8d9fce53cdeaa81ac6f97a3545f9188596d 78b6a33476dfb838fd6c4fa785747203133d4518aee00c184ae0fdf5db85 0326ad9fdcdb244bb4f659b66e3319334f59ea2088e4957477a5defca2d4 a5fa3e37fbfed1384500784e08ffa2f5aa417795a1d2fe54822e10cb2845 15b6f394e7681fd911510bd68efa22957930608625775a64a48d0c2492be b3ebfe2f85bb6ebe4a5e409fc7f14a98f9239306c5eb3e6d04d741bf3dfc 478bd03ccffff848e0ed18e47becb6c55c39a4662283f3c4e2dfb76caef1 6c4fab8944c1ff6243e22715af0b4de2fd6a442ea56a5c88a6b93c36ebe5 22b5c46014bc03e86167481d599bc3feee0564a090e43571b0dbe0961148 2d69a250626dcb909668f145f9b626f9a7907f4a1778e8ac066af5b9ee02 5172917726ccf4164b1e0c7e7c94e3b7df8516c78b1c72f6fd57ca0aed0e 419f2c5dd1ff24f47438c0e0473edf9b5fcf277c84d500a4ff055566ee7e cbf5707262fdcd3c7a28f1d04a4333374b6108c540c64a0cc773cc90d588 3b7adbbe0668a38ea57cd2292ec92602cf4a0a70ca7bfddb955d71c02aa1 2effb4c365f7af85f2e379b2a5e80bcf653cfde715c7db2fb98f3cd3af72 a94de7ab989f2d38441a893934d396c2a418998a0f515aa26914447e3a9c 025e8169717dcc63fc878b3e825faf7da165662751e0811304ecc1a7c73f f806380dac5d61611388f37d7a92dda1c535a3365a82227f999e3f3dde8b bd72a5232b3332e0cb275312cd28f4c840c95de6366e02817028782ce6ee 7c56a004d6de4a2786060fcb6b6d05afddc743c210f6f0458603382c1be8 3e61e9a03835c2f6bba1a4760564635be899f75bd23bf6f636371bd2238b 72331220156fdaf0a5d932d24829ea054b6b7910a738c03c231d1dbc9caf 0165d4091a31350da275976924f83cb4187e618917b56fd9b881bb25a8d7 f8741b407a89ab26719db257d9e6b60c3c25878c5896094dffc58891fc7c a3eaea6ae4876ce36b3d3282c4d1dab373534c261104d235ca94c08a9daa 039540650fbb97ba61d5d907244be0b6ae1ae2c315fc7a13fd194960922e 5d54c8528e8ae6651e9b36d7266ac9058ae97ee0af5b27b4c045aec4d2be d7c42cab914e1068cc8538861aecee6243b3d38f60ae09cd655da05a2bcb 1a15f914a4b819d1e173c4abf8d25f3f29b45c4bcdcdcbff3e24add7e76a ea86675fd8e8774948a1625dbd5ee5fec0d512de9f2ca7e91b97afdf4a4b f242499b6d8f04766b0b8e7522cf8848a4bcbe382c39cbb3bf393ef10347 f18a2e6dfaa6842e31cb9eeee419c762debfcaf49cd7bf5874f992a78703 0817e9da9981b0d90ecdc538ebb1812b88c96b6e93b350b327ea5d737887 7aac9d7129c150c571ecdd4808f02479bbfc87f1df80df86ed6b573339b6 9bcdec24fb9df93c871a6aab8fa236b3d39abaa1404321d9032971499238 99dfb447021b9510420441b9fd8ae89e2667441d7670b4061439cfd8767d 30d2d298ea15c1ab2dd7b25fa514bab9f714176c8ae5a204bb167cdb335b 132a35f6bd14b70ffd7031cebc7e180924f24fc5417199cf211ee8e6a55e 094afb5637334e8d42168da0dbcda3b25336705988c929efe68a56ffdb15 6eac310cce0d067dc6b564634a71d6cbd6f9ca9f868fd2ae88778d2ac52a e78ddbb7fa9c939dba897d3dcde0acf6e04d59653df22bcb70f9fbfcfec1 ee703e923b07e0d41370c4e4cf70ff63f8c79c5c6438f86725a50e49e3ee e18687ea324e651dabad022e8a783c4c10cf84f0ab482e5c977d4880bc99 adff1c8a4c5e9e643ff55128c306cb16eb9d23c7bffd19d55ef59a6f3608 dead9db7dc3931c48771b9ac55368e5f8a857e6d5c118de26d1a1f383a8a 5bb9a2a4b4c0958c0437fc96f264ad36d1a0acc37500c0ad72ea86330e77 c8518a74de75eedc0f3834f03860e2c26169b8c02752dcc5824b02876525 5026506b2dffec0a1578cdc55f15d471c6481c08a757ea55686352d2a7b6 9c3eef57c630f12e9b2aff398671240dc216a29c5ec17d44e05f1a8dde90 76de92456e969c8055b85a3c04041365ec35d79f2c05abd075f14eb26eee 478deff3d12fcf9937dd3901d509b695f8c1fa590d977d78db84b2849562 c460659842a7b90f8b21c2cc27d642586872c49b534d299b3fb7e14d70a8 68138371550f9e021a74d2a6e0f67d90d53ec408502c40d8dc51eaabbe86 fbf5572a2a7f121bea99be0b0045d2c516d10c9beb813e16f440825a77d4 dede2c8b49c4ac5b71c11ebd8f8fc4cd73a62e47f7eb212ff0572281b427 96332f70728d9205ce38570c96bd89b3f2a3edf498ca83a37acb4027b561 de28ba37b9199d04a56e14716ceb4a4633007637b216b9f6ba2a4eca8a2d e0cd63ff0944dc63059befef0dfb53a48ef62f54f15bc0355356787923ed 729a782d962b4d78235de8dcb31892638f51000f8981b86bfbd853b28929 f896a0530b72f075cc0bfac799631f2e51f474ac2f98e6e2fab89c2b3890 007913bb9841969b44ed76d4e888d9b3d9841dfac5d41459dbe7233745bb 4e79fc22fd7e466601153efe3cd7700aa86acad07b0692ceaa6b00b20d76 8c5e6052894c5915607e9cbc49f8fe4f6f3c33045fb4f0ec20a3c948af28 e80fb67f379ccc1bd019b339532191cdb803ca9676977ed9ca01bb039553 48175f8caa95a0714327d59b82444df22ac4ee8f5049c91473f226d4f27c e402bbea6f406cf21872b15b19af6c0cdb798f806994ec1aa9056637b139 12effa08dc015bb67f3ca7a4c82c5e34d39d88cdd5287c3044ba95f2f75f 6b6db9f1d60a41fa9034d91bd9cbecfc7ce7d76f4048206f5fab0901f7cd d639ed068cc82be17c35f6dbb8d85995a63ff69e52bc0a01261662153ec3 40fd4027eaad5b1b811fad9e16663918e46e983b02a3ad97ee543c4754f9 e9b6238295e6477f0e8133fa12360b5fe5adb0389778f4300c11a26fe4c9 bac6e234ad26f855bca28b49a3bd95c0758587e98fb123c1c80f82573fb4 583e578bf6599e79a9090f35be2c9fde410ebff05ea76120c7d52b3c4769 0264e1dd276b6ab08abf52b30b91735b3c84659115bfef8b88c12a7dd1bb 0898fc1d5782edd9f371379a8c9796cf3616a93193a06152dd3c8da6effd 03386e580b8011d2de3db70458d957ecd0a2db427058fc80522028c7d203 904913b0e63d26d60fc42a2c1e9c53b41bb206b324121347c6fc55e99390 86cf26b3de1933c0586abc166bf9f312754704645d4d29dfef978d8ab341 1eb295c500446d3e2a62d6738b1b4a9f20ee6b3a7c1c0641b5502d52a28d 95dd07da8fc8eb96a234565fb0b9d82cbb263450f929c9155d3d29ae2a75 ebe893d1eb74b6f0628f5bca4c90a7dd943db0e99b178a0d83524800b361 0d651475905983e84f5905f49b0ef12d880cee222e913b5ba51bc5532afa 722f8ef9254c49f7f62f744d580bfbdee17d40ff9a04ac2bf64016d4673a 4538a66e52238b4f4c1d37ac94f1f65c7beda2468a10b0dfa321b18c84e3 78cdd2555c453d62c92c4293ba0aed6733aafcadfb488dfbe545de91e412 c8a1ad04d959c75262e92a37c4d1bb48dcdca4c8f6d9fb07a9180b6f9c56 efa9ad9ab9fe48ed61d59c5a4b0fc284351d439e7e503e9235a30863408f a5a99aaa693cb8aebba6eb8476009234be914ce235bc206d093200d35937 43eae9db40f639eab16fd3a7d049005fbf938696948d82bc25674c69d1d7 edd0b6d51438183c30769ca3104eb378b82bcb5e605d1e065a11e17892e0 a32eb07fa974d3c6f70c0b657384ae839f74c622656efbd3878a7aff1a01 a2933e47f366953bd28773878c6c999f39abb27048e53970a5c88a137c75 e49c91a53316c5f9044464e40c1eeb3eba35762a490a3ffe8fc886d299e9 ecfcfe553dbf334913b30e03e5bfbd3de06207bf47cdaaea4cfc8147bbfa 154d6295bd46af68ad298b5c02fb0569b6ca521361427c55d456ff6d8083 417f3bb3ee883a957dd0e453a889d389bdf574516be147499cb02d9d760b 62dde4eeeb70a7fdc12338abd01d709ccd256ffa5f62a7f4aa6d3c7f235d ae276553da64993147b5b86f62c473d0d3ed14883ed0de74f1c623f3e624 9d6af1571dc177d27e2c1f0bff7ed9dcce8fcbd37bea8501aea6c6d7b259 420bdfb804e3bfa4e339708d19fca748d8ed84050439ba7f5a088da4802f dc46b95a99959e95f18407abe239701a6fba7d6e2094641c509da66fe556 747a21b0d73e3e7e157ba4018295eee683d0fbdbfd52437ef581b00ef2dd 582661a4a99b02f6685cb183ac801f038e3237eb22f9508c54b34e06a1aa fdb4fc6addac5110d2569d4921ef8b43c6ce363e642951badf00ad01b56d 262cb0796e6bc3500fb760ace1e7c9fe44d6816c84063b7aff0ea04d918d 048dc193fc07bad3bb8e7a178f8720b68a80027e9ff2fe4bf8f601de48b4 c863ae6a0f5cc9fca4614fb487a0d7e42cc17ec429e1094c06718a4c01c5 32cd08503eed35bef2a83c86e85a8e74cb9364a01d7aa51af9a7ad59e93b 78e3d119e400ed46c608c71e33facd29e424123626b535a7ec87cf2c12d1 96e378986732c89481d88f14fcf9507dcd50834110c071b68860090e128c b525eac3b519c2191dcc7d39d587e56fb33ac6bb2312eb217d08bdf9c9eb 34ce910a07477031d4edc8226e71421f6ae90bfc43c7398928dc2fdf62a5 48324c99e740b5815cbac9157f2f5b51a46a1cf6ecb6a03753e7fd49cb4a 04e5e8ab19c4ac2fb50618bd9f1417faf34225523a6af9f9b23ef982831c 5f1946460795e0b5970b383bf8addeb045c54e9c593f5e1f9daaef7dc58b da2819209f05aeac4ff234e3bf47ec5f496c75322417a96de3b70c509693 2dd0026384c3d15260446292ba7a0cc570a29a6b31b7a37596db015ec084 6bfd0a664cda0329e8a452241cbc7443b4cfcbec48b94a1fb2bad1073268 afd3231bb21ac37602dbf5653780215e4108e2d4f7164b12e74824397373 c405184888673573b1f2263dbbcdc07ceadb2d2202a18ad03652f0355fab f0df08c30278496290306f93be7e42f663b51e4f0f7e49d3292370c92b45 bbb7660748cdad641b1c2d24bdc33ddd9272c8bc6c4c80fdb1d6476aa6a1 7d0e35b43ef7d3fbc7828f0209d6f83b04af1df350ce10a3af84855bb90a 2fdec60f796d5a20eee1b323edfde3d69950ce90894184246dce29499c3e 87effd5630aabe1442e2399f0393f21beb96708b6cf0b6b207e47273bbe3 03a35024cf49899328c87191bfbfffef9500611bebeedb27933b1f53d6bc 805ed7c3271fe94dcc7ffa9f2f53810cd3d08949d5ab0b144a8fac533ba3 ee72bce2be5cd88034c6303c7d323fef2432edc947cad4af6b1c38be9bd1 48caca12323f66eb57c3096c72f8268e746cffd4ef80df5ecbcf522d85aa 41166fddedfe8d843cb25b9975908b5de7c4dab8fff7b98b8c24ec1e8477 1270ea877b2a5edce15539685991971922f50404b14bbf10e66264fd8207 cf050c7c0311d387c62b78aaac2b969d315f4a7963a79f8e724f5efa0190 25e7790e6a5c902b7da857438e84a9bff679409dedf5a4a0f670ae4536f0 5023a9e13c71978ca70490706cac13d790ed4481ebbd8952f759a038d821 bd0027e057837754bacbb838eecdf781299a2c349e34578b032250842cb3 7f3726a67bbc8a8c229262ecc0cdf375ef7469bd85327b8735550f942cc5 5ce679a0af078126540bd2d4f9581707e67eafe4a1ebcde24a2ad06535ce 001fb7d2e5f59c2e6b8e3bb16eb2c863dbba5e781c80e5c80fd9d2e7ad5d 11e809b842f13450f4075c59648f4f59e1b5b8d133bd28ec16d32b6230cf 626e4d8c76f1e46974703abb1934d3720a9b16ad752b34c0155c2412e3b0 b4e917cf5111c0a986c361bde767c6262d8ab6520c7f540c75c2c92b134f 1dfdd0807d3bfff5674e376ce4513ca149bbd53d0ec109d2a8b7ece2f6cd 76e9b07a249bfe81cb1af012de457337786a7ea8853745e001e3a07aa41f b4cf2d0dc29a779ee9ded63df1251dee748a69d71596e1feb5082d14044e 3b74aedbc2ef7a288c671e7a7b7c43e0d8f3acc76505875855debceb7ded 992273ca741cbb7073c9fe6182865cad971a7196610134c314826f2f12cc 4f2835f269cec7b8a046dbc7568b2cbc56cec08095fc771a9b093a4dbd3b 6e7e71b1ae183bb5428bdf018193ea62a99ad8adf581bb60295874cbea14 de08f9a9d86c5efc49aa30acbac07f637b2c1a022978383d063e12f17fa4 a20f18140ff565088be1714bc19701a15166de32429ab505903ba52e1ef0 72a304d1448755ce00dc7082df7d990635574c9a5b66daad0a45605903d7 3179e0ed9e2630f43861e22354ea16418cecdfdca05201e2f75ab6f7b3ea e336c4ebf7e3851cc097e2105beaed2111444de983c6b82f11b32fdd61ea b45331f7ebc1f93cef31f223fce6a349d8969651ab627a481314fba2a3aa 950327257f8f50e69e1a20943816ef41225ae1b76811c5af88976c4b4e02 74b43a58f63a27ea8958a3f5d875448cb57abbeb4859668a115108976861 01542a0830ac31f076c5ed6626ecd9eed04ad3e762e9318c7bab07ad3204 831f57b4f10deeed0895e24668aadcbeba9257f1ec419111e7257fca098d 3ca89a1ded16094d10231bbcdcafac1166c08a7007749748e8c4f500b9b8 7b84e8117042575a5b0d50652355df6cc61cd2c785b1c6811db2e9b9b7b4 7266b4a1084be1f3f7d188fbd9494cec5116fa627c8069950113f7090936 f10de3d71de1b70afc56b61ee245ef7278860b64113233a8a7817a0ca23e 5f08370cd48548e4757478b057a0ae59e9ce81a4ed7ff3ac3d2117354cb0 a98623705deafad89ce0c5b5196776cb5d437920bb5c72a8a718ae629b25 e253c75501555420621480afa2b91b756e967c7f24e3005462cd1496fb58 f34a42a9d59a10d6d68bb3c42566161059dfbbcba569a089d9c1dbaebde6 51b2275d59df0933dc21d0a902f21c5f5037299c6e8fb9541691ed13c0e3 6a5af58d7b8bb360e8bdd2a77b24138b88a5aa2938066ff6b098326c2b43 853800eaa4a304102281325ecdfbb2bb1400f09edee97ae812728cc153f7 eabc4a7cf7619a74b495fc82b5a89a9e0246f98322c2266bf838bd1defb5 16c7a371d91bf573de96f05001ec48fdcb9e9045ab1fc910f6b9344adb49 c38eb75023016e2398846602e2fe7a07a90ca86376fc125d8bed1956b897 781def6eb4298204e4b551eec3ce13b1fee5711f10c0c8232ccd533f8231 7027a87c30b91bc14d91e14ad3ac92177830435c27fa8b8f8dbc75c04cab 0181455eab3d1e101b14974a6f4fb99c87ed435f380f2087438b4b371d1e 6113bd6519afbfd9244f0384dae185025aea6457401f54545e3494120105 9ce756cf7fab4fa583f986a8b4d559e834ef331a6833971c89f96c58cd5f b3be135cb06f658fe2627509c8cdfa91edeb439eb386e3bf9bc4dc4e7290 a2ffea0ec25c0b9c021285abcc821befa442c87cedb0a6c2342c933dd461 16ca786dfa3ee43a7f3aeaca49e4f3a1d404e59eb35611cfc68ebfb5321e e4d871b206ac8692930c892dd7cdc7b31baea9a439fffbc5f9d3cba3e71f 5638dc6dcb8c64f763e254c327f77352297bd706f3a9b4ecf045b1f132ef 78c2967e393100be57aea4b6a5a8cd51b68bc114ad91e1e43512b8079834 464e4a9231ce839825cecd400f71dea1b4da2010d89f3fa8506f26888f25 564f6f0b5864768abe3d3e857bc265fb6b99e9546495e4be3f7b3bd616ed a6fca19f05b84df96a2b7174cd315029082ec03d74e9b16fde55e6c51c86 b0e6c0a1875275fbc8f24e08eff26ba23f0a963f7a40c359df33a2731f13 fe2c905f6f60acb43d4d03cc63725c85a406108089c33d82e1aa107ccf7f 0517beba564376c21cc2589dda7994cd35739722509c630c4f8895bf3687 bb8abae73b5e1c42915994c614e9876b7a1dc571c06ef000d7ec59deb528 19ae24516aaf054bb91545310116f9c46af65343853f896668dcee475899 d08f4bc405efbdc9d455d2b48cd23d1dd4e40b8948fbf834132b83bf7b95 0e2f83a0915cc277d4951b1d9bf8c9d7c2900ed222ca89e7aab7e64d28b0 d90adf9c470ac90afa395a63964604653936a618dbbee33caa4474ed522a cee561047dc163c784d5b8a26e04256b16f96c63eeba3b63dd8cb056834d f7f846fa32e32f0ffc14f074f03891816de860f201028060c3043b391fe9 858cf29622d55418d67f5e6e6c718f1fc2e62daf1dd4cf79eb95a16d9c3f eccdedf261f9f41905f8b8c39b9bffb2c0e8d65ee4f9cbae52b55fb3bbe1 07c08c3abd668e91601c849af2e034b99de6891224a561b7449aec3d0be4 75991f52211b9d1668311aaa7ac9185e78f90fd31a324b6c820f7f8e189e 952cd15e57d475430e1beaf7537cf6649e80e35df16fc03a71ea162a19b7 d29617bd5af341e7ec81ddc338606fe0507649bf761eca6f72dcd2b21797 32baeb51d65779019e678cc846f184baae95550fc430d6c4e315c1a66193 2e5a8c4d3d81acb445e2b0b807771e2aad8465847fbfdefd7209d10dbfa7 faf2c3041a678c70a1c807a6f82eb448688c8e9a6c968f7f9f4cbfa88505 997572ce6aa228cac0a80f49964957017e9090bee36c566c06e79bebedc2 de9a7902750e1d25f2b4a51e10221b4ef82d8f1fbfaddce9f9682f3843a5 81eb10b55cea4a8ea1e2f7c84b6394e04ea4b6bc9d9ad344c41477724a19 6f73d92b9c4358f73a3f882f4452045c22555127bf9caaf52777c200d679 86227cb17f94a118ba663428ab3fdda95c359a353b4aae31f94b04d84a9c 0c699407caafb272ae58ef328e9065b57c33bc9bd75b35e4f7d2a69affb2 137a0947573d52972b014a28f14700f0fc2af0afb71fa3c038a4fb5fc2ee 2fc6512596b42d3b72a612b86263862bd3b2dd4333758611077474fac0a7 22e1d9199d66510a1a86f807aa0de71c13920d5bd7328874bf1a0e2b80c6 d07638f261ac24dcf7485301c5d5cf0a8b62d6468817d57b9eb835a3f996 6ebf73223cb5909a1ae2a85bc90f012ee26b484a40c8a998ada321a0fa95 05d9a09c8f61d708e80c7b5f47599d12e020fe79d63bcbb6227e4158acfd 41870941fd774f6525b78a6781fb50519ad9240ec7f31c1b85aad48745ea 2e58ef88b890bf9c5cc5910148aed529f2694f1cec8b0e2c30952a4dd922 1d53ba846cbbaa2d67d64ec25db97fef8973d51207930fe5584cde28a273 468ed7713cf2e8865dec285e20f49ad3e6ca4e43908a9116df1bae41bfdb 724b3bf2cbfd255e0eb69560b329b7eea14bbcdfd0398c663ab9c13cfc78 98c674bfa207018cd1c85281c4bc995b16eec777f51b0d1929100553532c 4c3e8e71acc6daf2193471704d3fb92de494e89f81bbf7bb700d0fe46d9a 21f9cc6bf251ae31f40334c66bd40f801d02ed63b52c3ec6a1303d659ede 330cd53de8502899ebc6dda655de3d583104e01e123001bca6fb3ba5ffd4 f1e506cf7ed59fe3f991808b2272b1197210e5ea213b3bf7d6a2177cca3b 0483447bdb44ad2c80e04cf5e368525f8d6b9ba6b114a4145c2c8a693113 21c8d5ce682f2e13ee4720e0568efd8488faf57760a93722dfda8489ef49 63f2e65978adfab8b9c9c8d9146180b92b3c84c725e1f50ea135004b6479 7ca6c6a87c95952e8f5d68958b644276d106e3706af153ca270f159f6f8a d76f0b9f4be493574ff549ad6ab909d42e5718424001d8aa17567dfec66a 3e0cdaf98c89e56a4692f0d585b13e8c8e1dd4a5801b1eee8b3a333b63d4 4e65a2c50a1b46615afc550390c1668ea06ab0f6f9a175e408b1568bb470 f73a9babc7f82795ad940615701ef5e2046887414770ffbe9c86becbef31 da6f294faed8e4f9ca084a61915d2f7194ad578fd5b9e01f4c23027708ad d4326fd70b48d0cbf9b42df2860784859dd9cbc707020c3917d1920ce164 a671d5e09d268545dfb9d2555a1c7b820ac802007c54b403e1a6f9553e6c d52c64816e788e6115ebe9520d57aa5d0278c1e6940fb80959941af78bdd 96877279cab45c9ef7e47d90d24b5b3e0869b769d3a0fb03dcda79ee3a52 349f3fe89204afe517b97455ea1b056f87cd846202593cb7768dd89321af 3dbdc0c188da25b9699cde6e0b1928cb4060f09b4f6a6c2b68700bc14eb9 fe2890fecb5e389e7606186d4417f5f5a6babdf43c1352f4feb43a99698e ca73c7d7eb93ff5d38ebfe6d102cfd0d986af39184b4e007bf65131b6a2d abd1593020e2fdba559e939daf7f6cbace2176489d45ab860fa4a05930cd 77189c67d4b72df03fe8cf482419972621de5f2f0143ea14f5dc08463b30 2be1f4bd73cd1f6c5b17c74d7740c802cf197ab3f412b697c2bc8f41743e b2be55e238dcdc6a0253a72e63479dbf563e6a161935f77f0e5bc5372dd1 f92ae1763e05e019b47967809d42709324eade06cecd85daabc456d9e903 e0083d3a74d5cd2df30bf1db1477a6a71a55a52359f4940f2c339bdb6edb aade3e614d4c7c36fa2b26accbf520579df89a7239ec627869aec628e7f4 ac09ea132f7e2d030408dc91f2596c954a9c026fadcc416f1e061b484372 21b50d8a4b735c91d6e8d2937e4454b0e8d1f553b84a35c43e1101f497f5 e429d6e0852f011213e7068d53e4dc696f6f7ff9637d3ac5ed28b0f8b55b aababfe8e9aa7fa60172450bd17b615b1b89048fcfee829552077abc1d30 615c9b5725701cb39e6675404c8230ba27395ac8b5444f318600dde103d3 039cdef4650e68a9f1280ca84aa8cf87c652aeb45cceafd1a21793385a17 4d4a5a5830700593cdd94d61374ff4eb563eeaee80b761230ed61d06be11 fa574de0ae6c3452583aa53768238a25f570eff0af5f5ebfdeea98c85afd a53319182611e3e6285659ec99d27a718ac5a1cd7cd80f2c97bfe9bbedf6 912a41a171ec583a0eaa4ac571b495ac78b275bed49eb32a0202a07f1ebc b0a89fd2d1cb6ec43631e8e26869aa6abd775f31e1cae5158f904a0c14a4 ef72d51e20503ff7814c717a0f9b28ae19897a448d8905725da4e40f17f6 d7978538095add5e820e80de9f261ace43d77d4bf97510f774860e45037c 793c28915b01cfbf7c6388b2e9225b0e2721cf5fbb52ba2da6bfbc11d515 3ed1423fabc05624b54a1a60235ee26e908f63c52826315f1ad84fc79de2 3ed793cc756578475900e7a9ba8a812e06d2b9721556483fce01ecdb7f83 190b4a6f2eb8728f5bf941a5934c960548e4a8c0d17f6708386607a0502a 1ceb0cf8ee2ba70d0e0b350019baf415a66ee50ea8a8ceef78ad242421d7 397c06caf762f6b4bb54bb3b8484f398000f0571f3c9111e96164af8420a 7aaad2b6b5056ec35d0bd02b46a7e007e24e1cdd1631d343856da9a4b66e f36561844b16e6beb6f08b0dc8de04b04364335d6657ff916495c3f9aa5d 87a2e455428a2d489f70c2aae03b64390a6e083094e925f75f7f2ea29a44 c76ebb50d62d91fd78c3035cf4bbe13d3d7205daa28ebbb258456e2838c6 41ab51e1652594c92f592ff8d31d90c6f179e067747e9d499a5e0fccf5c1 6753bfb70a3201fdee641c9f45ccffad879e477963c8d89162195474ef98 4f1ed3d69369905a3d55ca6703889213fd8cfd7b029a3be8adaabf620111 675f6f65df5f5b05c635ebffd9d6c573b0d6217448c881a4d25262cefdf4 9083e775589a406ed03f8b0038dc7c47e1b484ddff035994f4a6200923c8 5edc8236d20e46b0d3e617a8b026cf7070ced14b3340e6dc34fef020a9be 702e17f4bcbc738770e76f47ffd849614e24207dfa5e6f8d2aaab20451d4 412546e40e8cbf56da8d121f364e03ee310ce1cb7f6fa51c6bcede9fc198 b66d39d57b23eccd3441460593f44ec22cb4335bf19e09ddd89184dc0f09 f682dca18763ea72db6c8e32faaa8f002d49f9023d27b508395ab751be5b 02b5db309dc9a51b40e77552bee48e379fe478bf337e039defcd992afc2f 712a5b0f646ef0902b593d8e9f03bd9eb512ee344e115f84671f21e5b5d0 3b0ac0548481a9a07292f79bf74c41772e16611d15cf15ec079814eca31d f380ee3f56e9bdb39e0028b15793670aa6d1ebee19603071ee3ca517fda6 f8c5763c9c97d11ef62cd19542412b55d55058027494143f217df42ff2de 1c529e533d0ddd46ebfa886ddcb9072d299c13266d7c07a2ce9f5b76addb 44ee6513244d7d4d55be1aad98821431280e334889718b60b3e58929a1b7 197d4be03753e22a5bea21669a4ee78ab070a41f2eb01a30f200619fcdb7 5cff898152f0c44b2fa25508cb346661f4fe7846928d52014ae28981d803 ea0eb8525e6a2318cd2ed96f7386a22ac36025027c5d9d50186b5a2830de 062b07ef56ba35883ae1a0c76be54a0986eba08fc4640b5d18bd247f2cad 7d9f950b698d11eb11aae9f847f9253e91ad4cb56a1b8dc50d19b81362d1 e1b04661e58fc86b016503bcffb63b3deef03c5dfdfdb7cf2c732d77a0d5 5ff77d2f6a7ae2a896bc1184c9de0be31924e087e0828628427e0e61f564 1475c066cc66db890c417df5879f3c6db72d36132e1d87a88cca57c99aa8 f5f38e5b6911048e5fc827d4170c35f3298ee937f79c7e0f51727ac94602 191d21bb621246161a5c2cf5260b7e42932b779fcbbb32a391599cf96b46 2826ddb8c2acb70c4bcc6d8bdb4bfac2691a48bb0d6b7699321352ac3104 a0bdf7da836a84116f8a52d924fa8db025c37f39dc8af563441c51e317a1 c2f5242ae9bb32eca30bdd7e304e95d1527b7526992a1279acb46fba73fa bf5f038b6081deabb5d2966cee770030d726315080c371aec87cb96ab3d9 c0858e4fbca3feefc066dc6ca8387326a9eab6e03d1a56e5c5a2ba7254fa a91986f2e51a767e8a4b8009ebc6c8cbb6c9024eae983e115bf5d52b9bca 03bb482da239372f4af2dc92acf7272a35cf622cf6251218df39d9b3d044 4d36c8b7ef7db3f7eb57df365ced86f4a92d48782c219400b13a0a96ab32 e09e124b8aa085bc508c44e299b7d5689dbd7ce0981c2127d6853bc099e4 37ca0592af681ce6ff71a2dd24807997288afa1a407602342d18f0695f44 2241c897500432fd73529eea55948ca77e86c3f6d4e875aed4dcc5377d05 5a08cec70057e4133240c63ba28c1ca90623beb512e89f4f3fca56239ad0 c57a7fa9cc6d4ebc7effb427496fc36d05c395cdeafb5a21dd430c98fd80 943ec41e7b41a641a28fc257924692a592c1aea49712dfa7baa46f8c5562 6a1f30fd01105d2f9f460bdffa8342ccad277ba5d11d815b45adad5be5f7 3bd73eb5e2e5fccc20883bb5a1b5d5d569c9935b0be71e7fb82fb2d1b4c2 a8dce24236f65d2b8fbff5066fa300f667a4d2b6f150a9b1c2c6e50d6b6f 642faf0fdb850c6d7efd955f8582384f1a937a9a32dd35747403ba93de7c f7ede437edb83e84e9dbaffc0e45f901511dfc3e651434bd58f0fc52c28f 6cac352eb7ace4ed61f49df8cebfbe0c0964e484d2ca8ca5f1fbc839b907 f8c2b5a420cca06582868827e9115301faa2bb434e5bc9cc1978217ff5a9 9a3038acf13a9d8ff87ea545e49da1e9ddd0e953f39ce7fea2b0672b4433 1d85a03a3015399e4f2d03eb72da4693f733a34bfa872978060e65dc4e42 894f341473eeed60431ce8fe1f2cfc3e5746c1ead96e228ccd12030bba67 4bd3efc3db7bc76f56b758a391d44bd6e93a4b65c1b109da98811b08ff4a 1c98190b24feb0fda2107ff837bb3b29c31afb2ddebc3593ed6d0ff0e88b 85322230aca6f9cb82d641a67e602c3a0b40a695ac1b7265538a53b04dd2 2b5439546e8c4ef96070b64469860b82ba4fb73b424f6812cb580e177150 6a891c678df4851784eb30caa4d3dfe140e518622f8737b86f4d9cffd870 7132e2b15be6b987dd30a3be8433e7dffde4d62afc8e6ddfcfd68d07b2fd e94e4253b75501d2c8e9f556420e14c88993322a24c31f6e37d45ba1a2e0 34b3f749d3705e43cef545d47af86948448dd0b886cc3a98a1c1b8399bee a86ba1f3a69fd5a4ef2cedb670f5b9249e176897e406149ae0c6063da49a cafb1dbff711b977dc7f5d4a67366e93c7b7d2cfe461e8faa4d169109c08 3e6cdd1564e5940d3bcf6421ab684f833c6e53bf76bc7b0b1bf85b0e6d35 76cc4e86f06a86a241f22e12e5199ce07dfa7460e9f27366ef0f670984ba 93612d1e68501e5eb5f97a588f71179aa2325cae91456d2a6096c1dda493 3527dcaa9d23c893408e6b3abd7048b17cb58484cc2c381d3a4decdbd963 839c343e8ab2165bcf6ec6d3a93de2bd06291b6c04f8658785a2f71a4ccf 286abb902766a45e9725f0de564d71cf9d514a0d88a2facb119c7f6077d9 5716e5ac935439b47fa0208e9e5fd9666179f45a21efc417b82e110d6c2c b5d724c3fc1032dd5b24644ca4918d4cb4df0b3d8ecddcb2e13baa967d76 d4abcc2439205e04c93b11240cae025c456de5da2534a524afd87e4e60d6 2eb1ab7d1d54e23e629dd88754c056e78f057ef66c497d993af61f9b6654 4a3ca699dfb2edee722219199d4962cb72d34e6f7b5fc4bc45efd1240bf4 a87a2b88355caa3fbcfbdf6159bc1c72db4489bca279507e8dbe67b168db 9e6b3ee1e024e42e02cb076ab71ee609f88a109bf00ff75fc91a53d49151 f1f84fd15f9903f1d3a3c66618c4c00721875f84a9b255466673df7bfefd 193ab00d239497d5aefa6f78705934f1aaad9b6a51513bae7349cc4f5215 4c43e03616bcdcdaaa9dbd168dced676bc680ffc6a0ccd9c2f6efe807cf6 ab5d82d2ba75dca1c2d7e08d25bffd648cd35b1e038274aad7cfc271ffef eba50d76d6d22927b4d7931fbbc3cf4aec101e07434cd8baa28d7a344f2b 4b2755a6f746a66368ccda78a0c40af1c1aef1813213bc1bbd17151ba773 2dfb8b590378bec84266a3daa34871669db997b178f799c05d310da0d97d 3ed2f4b31e33e4f134b179818b6faae80ddc1599d04dc8fd1892a95ebb12 8e719cfb885e13fdbfab96bed732637e75a4237b030990acf70964bc3f16 b095690c8b54d16270b90045637e0e50947b5b6c0ec4383cf47af58a7771 22117b1d93912e1d9390d364e7653f920f295fbd79c635a112481583bb78 1844e3eff4c8667c1f8aabbd6d74f6378611faa1b09175ba98effc02f9ce 27d66c7d180ce4e8a76da7cdb89901260d72af79f852947f89db2993dd1d 11ced6202f70b9a6caec7a8213c84eee04363bd2d60bc9bbe93689fafea0 ede575d489a031519818ae508c599a7b143b1b5fe2ae164a82637b77cbe4 36d7cd5d1840f1bec3e4d6fabeb3deeabb570cde270070b1417e2c723f85 3e00a1d1d12a2ec6ca23aa78e136b17c07e7b69a29160d61ba545783a386 4b1da08942fe40cd220ac3808afc6f69f11c8bc8e2761a74d8738cd41be9 44fc505b25c3a784e15dbcec050999c8e1f55749c832d64dfe1af119e5dd 4a05325ecc662bcf7f6a70df6f2b6131ba3d95f0d3563f7f43a678eb9c44 f7f5aa50a8061a6c16d04e09b8ac05827809beec451af1e2c2530f492a2c af5cf38001f2a61686c24c6a1113e9098b2c49f992d32ac4a8f06974ef9f 974b241121915ece38334c4182780f9e32d4205f7484c033d597c0910d47 bc3764006d4b5fc28a4615bd27b46e5bb9bb8483b5461933dc9e08693e09 c267baeb17500d763edefb5036f820081c1ad0c731123206de774fa464b9 df19e2be494b3b30e29a0b8aad263602357ed11a666272bbb114a1e49043 1d838be19a268ea96a8d646edc15598038598524796b89a857b0259353d0 c2560f2b39b6de8383cbb6ca4d0ffb235a2b761ba3f794d067f16fd0e651 71182614c8c82883bd9203318f38e1279ac713e68ee393efae4c0bef1d4f 509d19f5404592f0689053d407f1706a3f61eef0ce1d6ebcff4901d87715 63b0e4fb078597f9c59024b0c67aef020157c09451effb5fba75a9c2780d 87a865745d0ce8d1f535dd07fe0a17d574bb1457b5d1ee9dc5dc41ec418a a318320e5abc070b2b675d1c463f77d727531c787cebb466072d0fdaf224 a1903f18df46e98bb4cc5288f11f886f570d770b346be00598f99209ebc5 f2cc5ed4af88a96d6c6324c46e9649b2fc37b56b0a072badb2c7f8af4be1 ca5978d9db9a45c99d416901cf8c30902d3d4fd413695f18043445888e91 a76bd572cc4c3ed8eabff296fe8a8ed3320527ee0c9882edf49c6eb839a1 aafacb82acdb87d4a140970a6a603cdfe8bee72d8a75510e43d169001adb 292cc6b62d069352c4cff9066e12d8226c14362a30a6288e38515937fc54 1d1d5ecab8a3291098d33cfaf89339c43844f84ee3c57f1715354fd2ab8f efa10d3e04f431b66747e91aee2c935f67d2556beb4b16418b3ca818c8b8 5f83b592ca9915d341141dc52a66764db0bb74104088d93159c8cf315583 34e0bfd4c01a122e5ab06f35b751f7fea64f3f07e10643814f38357033b3 4d82e71cf99e9481bd44f05c9b3ab0ddd0c9028d5b251ef3bc167d6dc137 75871cad29da1fd91e460150f51506b4fe130454f2e7a3e4c9a4a2d7e6c4 3291f7d9418d8772f5755660610fa4909b545d594d0bf908c8109279399c eb2933d1ecbbddb185b84172610f5b0be712da7e324f9338ba7c56644449 0f832932fdb33fd09e397be06a0d0ec06e946ff06773a338ede4e3be9fc8 acf98bc981e1af0c412fc0bd7358932436bddc43b07c061909d929682e7d e9872afb6d9b57e96def7ff9ddbe4a64ef21d14189f7005a64d213607abe 48c67022980cb3681741d633dcc15d5fd3484caceaf5066bafdd863e3eae 64b6826ed7d74874abacaf28ce9622b1b8d4342a2d833608775f97d0a559 ce4233008c412fb0117e72e45307b099c64724141506b2a9c565ed541d47 8f49ae5d98cc9a9b751103efcbb9f09799fa874fd3c9beab0e597ce6eb42 5f93f4b83560db87f75182a755cca3ddddb8707665a8be010a40ec611704 6c91e5337fb7ca377ec96f063ba5e1f97bfe1c1214717103606cd3738536 26fd460620130db020b05f4ea1d3644b2a8da11cdd2c6c2a065117278098 630bc70fdce0651bc51685841d824fa42df0eab5427c408198db0927c911 66b46c9d89a760eedb9308a5150c7675bc05ecccbc0051ea8da1fde8132c c06412f1d6dce02bc76ffceeb8870564078620f9fa7fda867811a3304f00 a4169d96e5cfec2ebfa90d81dde07949659d313ff7f8402bdb1eea4ce016 63e3bec00400aa33f6b816696a13c8dbc338aa192fcc3e06c45b76ea41ef 156b3645bfc3ee5f1f2b15ef8fef7622007196f9d8279097919a225431e6 683bb3cabb71dff8d8a579d174b2063f48d63b7fe16a9c83dff1ffaebfd3 3e9ca293a8c3e6f9501e73900b0f3f5c6986eb2e7a74307b6d86b8480627 c39c2d01215c4f95baed042305d720dde7116b93190e87d5f5050aa0dbd0 e8d6988a982e7d2a1b70b3b7f5f8b806f49d3626dd1e5cb70338035df553 abdb4ce6be4b5f977db8722899ce46c3d0aa8331438f1c22e1697983b82a 3a6b128f2ae513509fc66d8a56f4f74955716d00081e4f1dcfda34408ffc 05ca4681379725188378343f875e734bf5ddce99186c9532999800cd4b42 63105ef314b8ce102a3ec7b5ec0838e6618cc016d8dab5c45976f491cfc1 f542b6020c907d64f822bb626aa03f04344804da444de14de255853277dd 1678afaaf82ab3851aafd2c8ffb6b7a25eb5a1165936ac02a53fca5b6a24 c5b0c9884d01b54895cdc6e64c4f3061d2ea76a7b4f7b0164faf03accd3f be9bce7a12d2a37af3f44c2e864fbe8422d461ab553c101f9e21a50bbdcb 6ddf394e2f80f94a2c721ffdba037688f016c9bec8dc1bbb69ca91b04823 caa2fd07aa0b1f1071213251d24753fc7a8e152628e23f5bbfcbaecb0f61 cac8dcc6a8ffca0311483d2798450c4af21f5798763f5b4ec54e99cc25cc f0019e95c7b89967eff0e002f576583bf8ffa66850006e9feb0f46183c41 186476ffc10e193c6912ff8517ac215ccbbf210762c4d3318a83a08947b7 f3807217fa8d155a3eab3bf2a8cd65cfe9764e8d9998b1d972cacf112738 d7804c4d2f545529031f81306f5fbbe974063935754c8d8a55ccce35fef8 0dbb6319a40c2484da95c777d9ab30de56f071ec3298e3163358c5f2d7d0 b8968ca4df727b8c7c7e571236b7fc308d6c9aed824a7ea3527fccf2626e ead5810d45df801ab75cd958cb42a00ff9734ae6a9d870a4392d6249962f 81bb145d623f5f380406025d4e3a491509439ca5c95579386162aa02d457 4080aaafda2003a2cc680165749fd5dceaa91bf47bd838f16a21e116a396 e9e6f758d41df50d3f1610f7d8a65257ae00f2cede6cab0ada9b16d9addc 30cb7a068b358e247ab5c1810922a70e23d60fcb5d3c67089dd4024c5b9c bbaeab1ce8847671732026ec1a6043e38ae228cfc27b0b5b27b2304ee1ad b7bc8289edba34935bca94f680fa5eec2dd45f10cf13732b8698d84aa2bb 5f5db833d672cd7506da8fa396b0845d8994b9be69a515b9a099f3149247 8f824413a40dd76c862830f89db2f21531141d5ead597fa5d816bb015cc8 ee87ba594bcf0c717544f32eb695e911f585f593af6852cd27ae6b25e063 29e7576a9855d0d7cf76e81dc8b6a42a3196d178112ec5b62994af67ffb9 db4526c76f049b43a251f82426a002d760ea17104cc5702cf5c0dd20454f b833d247d38352c951e412d4d5688c1991e4e570ddc3f514218dd1d5ea64 36a094f14a96983e13b5e5997cb2d115abdd35c8d8d64ec1ba0c0b1da86f c40bb1a456c03d79be63a870e9a882c235950bebab733b5a50adb07c35bd 8c7f8807f603fd0734b496e1a783e518a9069bc22ce8f48f29b905a18f11 0fda8ee43acf22bedf99b2ebb1e607d1ab920dc290e30d041c468a0cf27d 948351d50c7205755264dc6add5279ca172abf27ba1b93a623f2e4796409 592ce84c1ae4102e4b9221c6a8c8466319e6bfe089759d68dd58f74c19b3 df9e140aa31ac26b7544a8497365507b35f85586b6025581b80f6647fff7 1339acdd01c2fe36c6b7e615ca23304a828fb79d891545ab8cf5d15129b9 75aa66132b89bd18e89a9106b7a95de04a3bb4f0802571886c5c38d05ad0 9a3be3bb2960128bf22b70a8102a2c2063834c969cf050a5af3c050a3347 358e00fdb0391dc3e0befdb1e52178243a0dde5dc83fc7a854eba1982ce7 ff65e750b9c4dd86ddb7ff4ae7b72702d3cbc7a0b369102d247cae19677d 998f7b550f901ada79a82319f24e1806f44dd825326d7f5df6a9c0bb9546 eb28e1d6dbdb2cc18ba3d463abd838b208419c168a2de68f252825faf425 fe397f852fbfb4d379696e73b84b9a876458f526a623a5a0238a210cd5bb 715c33d3a8b48352902c2d83d18952c55fa749885132ab6b7e6db794b159 88b9d511438124d8dde3678a74654f9253d0b8b5703bd0d35b3f7ea294fd d9b44601a8e73ccb3fdbd980c2391d4c7928b41b46e9ad163886acc2b68c 5c4c2a06911a7fb36ecc544b7d886c75dacb52308ee0efea5e3f16a11028 a53929f7b495389601bdca158609b9d8be1a5d68e5ce3827189a0f4a7e18 2db0eb81fa0dcd6c587098f264a3d0e2049f84c8a4e8ff503a68e8102b43 6a4bc956eb9081143cf2cb903aba73070f8b3c4721c361fd398f7d17b363 dfffdfce66c02f2a7b110a9626a8fd9b7f053b286a7d7ac4d57ac019b77f 9051ff0972190fdc0968f8d527afc6d8e70d9c638c33bfea751e62d1d449 0027c64e60cbe9c5aeb395bc6d692796dda167bd5bbbd233ed01ce57a8df 6faebf95c6c7539339f31397c1582d47fa00a40e236b7bca3a3bdaa06e53 350f664c12e10f4b174195986e94c98699bafbd3105aff22a82f8d54e1a4 88e44842bc58dedbbace508e3a69dd35dba1f0f0d69e34651bb078232519 dbeed3b29d2dcee4b449be5f39a41d2e0c84ab52609f8bb0b3b85d0cbcfe 85a9ddd9bce5f1636b4dd7e7c77cdf6a025fcc206b9104ead365d8b52f42 77d64ad3ec49aca1bb60b87b9f39d40678e3b2c8ad69d1b5d3fa6d0991bf f3faadc1225617411fb4ba6b79b3eff8f3e0802d0092567f1c3d43118ed3 0d3d90807474808a9bb5f07f31371f3a4cae9ede2f758875145f1f4be72e 8c7a8f1a733f91c761039025275d15f76daa677fb447795ca639a5c9f9e4 bcf3c2c06bbe0202187ccc5f2cffbbc208641a52da611d40b08908500375 829b8ceb8c93c7398389264b3821de6d37acca04fcbcd02499847b4297fd cdb15ca26fbf868d5e335a3e0f3980ceb288149424968bc10ab2466a15ce dbdf550eea623c162a3a7963d657ced119101602898b23d7cb99618b5b3d 59868f5ac31ce289ef1df56ba4c5c398068d5a928a4aa53325d95bd1c774 f0d1d503628ba1546f464303e0f454cc6aca98d032acf05872da95a9188d 0f224b875c05157c2fc993d65521a770e6962407a22c0f2a14b80064bbc7 4f496c61b44255c40c51bdf60dbfa7900f77296d59abf61f964fefb6aff3 f5dccdd7a812fb5ec30c6dc8063bd828f6adead242dc0a6e72b100a694ac 24089d150b8729de5a322ad77d84e7f4a62570a178f0a9ec0dd32a7b9091 78d9a544430cff30e2e570dbbb649d9e19554b39546713047ee0861b8a0d 960f690d2e2e160f24f152f6f0a93f6b13b1eb2477a416fbf3c15296ddb1 3a3d09f771d8618a85dec2362f88d117f1bb174e829f96f9be965b175321 a3bb0746376b95260b82cf34134d29ba6425d9b86e764791d699784151bf 26d4dc5b01cc0f88261df88e3cabb371d334e1a2f5f60952ec7038403f20 45f70925e9d8b49ecc330bd90f563d3894b15ce629e686e3bae594e5c251 2f7982eab95fd43cd595d8ec5fdf962f5e5277e416a91c279178bd98d082 ced5655015c9f425c048aec135f5bf41260dea74fc1c16984c3db8deaa0a 65c1426b7a5e91ac5f67e222905efcdd297c1caa1dfc17fa1a3de462d320 0a1491d41b26f799475daed3d6e3b1fe923d3cac505823a1e77ce6b07c0c 2efec207347a8e44d3c5d196376c7b7edce7c9bed0519da191a63fab427a b930c1156f51c8d5ac5bd9d062e0e04089355df1619450c40d0050becf10 37bdc9b62d7d4c90b76219991d215a37b31091cfd832d6a95669dd02b904 0ac2b60419dcf064aa70a3c91a10e5e4087093246fb95645828a758d835f 51dcc7ab133b360dbb003ceeaaa1102dfc07931f0ee238273d9dc4c9c8b8 ff089232bf823ffdd7a33d0d7e142070f240d078fdf590dafd88b89629b0 275af422eb54bc1285eae58cad06bc2b12d5a0c2bfe51c4d1082aa23eaaf 334271c0523e3193d6aa4b6a30bcca62edb662d30d93f5f553a211612cc2 ea7da1d19112cb981727edf44136ef358eda02444649008a8e9db0985ace 34a56bccd493378138af3f1632cd885259f01f97a38b185443e3b4408aaa 06c09529403545dc768be1f6e4b4e85ec2f094ab06d4ed78620489de9014 ed3d4a76af19a75c3d65c73cf8b3aeda993e97289bba416758d561d6dc12 23f3a5a740c2a64fe4aa02a8af2efff0a3fd8c0dacc5b6a9f0eae8833359 bf6bef10d03bd931f05bea5cc117e21aa4e3a486845357a256af1ac28296 7169745bce4592b4501cf410e4045a8ac47bf72f802ce93e562948b00848 73f33f872340b4930954a97ae25e9c74677117ebbacc18e5cf9da28961e6 442c545f7ee10d0689cad67b5e7e9abcbad934672e013a622bcde541a2ba ea62f957c199fc3eeb1bb8091ed8ac159f5afb61d35893afbaa5883c5a97 b0dab2b2c4ba2ff7a30935882011248f8d9e6d23b4a3d91a71df66c0398c 65be4cc71cba58bd19cbc9d5f7bdb30dfe9fa814c9d8b505b2bc3098a220 4c5d35f353e66576e032fc0d23d2a2d49ed27d4ea0e4e0c17e6cfce3cc97 470e9292faeda13b6647da7c64c7a717620980de1323c6040fb8f22e2537 240422e2248bef0dcce6fc223b8720fc9dfe3c47809b31fddf8079d638f8 690f441eea511b9cf818fbe872ff3e2a0a2950f9acdbb88d48b9d7648091 5b0dd985074c0429e9f4ec356c6d1f418096ead18cb7669dce76e8b21a6b 0cf19dbaf1e79e2c70a1888ffcae76174518c355c3f733b6d051d9371b79 6908c09ba1cb9fe3c7e16e4529912126b5253eff6acecda3c37fccc761f9 d781f0c75eb7075c121c68540706958e26166e19e1c0b29ee08d2c2382f9 9ac70ee4ee4a6296a4ffec552f3db6471aa42d3b38857223fe511d0aa35a 84b1c1205a304b2d0bfc95fffbd603e8e6f42e60017a2808babe00c270ce ba6f93b83bb9c41c7787992734171fc2a4f0b46f06c6f029c82ccc985b7c 3c84ea655478ff79e8ab8fe6cce591ecb39c353a 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Courier-BoldOblique.afm0100664000212600000240000007631507477306250017375 0ustar mikeuserStartFontMetrics 3.0 Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development Comment Creation Date: 12/22/1999 Comment See the file COPYING (GNU General Public License) for license conditions. FontName Courier-BoldOblique FullName Courier Bold Oblique FamilyName Courier Weight Bold ItalicAngle -12.0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.05 Notice (URW)++,Copyright 1999 by (URW)++ Design & Development EncodingScheme AdobeStandardEncoding FontBBox -61 -278 840 871 CapHeight 583 XHeight 437 Descender -205 Ascender 624 StartCharMetrics 316 C 32 ; WX 600 ; N space ; B 386 0 386 0 ; C 33 ; WX 600 ; N exclam ; B 234 -15 501 638 ; C 34 ; WX 600 ; N quotedbl ; B 243 312 592 602 ; C 35 ; WX 600 ; N numbersign ; B 101 -92 623 675 ; C 36 ; WX 600 ; N dollar ; B 100 -123 610 684 ; C 37 ; WX 600 ; N percent ; B 131 -15 599 617 ; C 38 ; WX 600 ; N ampersand ; B 102 -14 557 550 ; C 39 ; WX 600 ; N quoteright ; B 222 331 483 623 ; C 40 ; WX 600 ; N parenleft ; B 304 -153 613 632 ; C 41 ; WX 600 ; N parenright ; B 94 -153 403 632 ; C 42 ; WX 600 ; N asterisk ; B 178 208 614 622 ; C 43 ; WX 600 ; N plus ; B 101 0 619 560 ; C 44 ; WX 600 ; N comma ; B 118 -158 379 134 ; C 45 ; WX 600 ; N hyphen ; B 101 229 619 329 ; C 46 ; WX 600 ; N period ; B 234 -15 387 117 ; C 47 ; WX 600 ; N slash ; B 69 -113 656 695 ; C 48 ; WX 600 ; N zero ; B 130 -15 602 638 ; C 49 ; WX 600 ; N one ; B 93 0 529 638 ; C 50 ; WX 600 ; N two ; B 54 0 602 638 ; C 51 ; WX 600 ; N three ; B 80 -15 609 638 ; C 52 ; WX 600 ; N four ; B 104 0 579 622 ; C 53 ; WX 600 ; N five ; B 83 -15 610 622 ; C 54 ; WX 600 ; N six ; B 154 -15 663 638 ; C 55 ; WX 600 ; N seven ; B 184 -1 640 622 ; C 56 ; WX 600 ; N eight ; B 114 -15 608 638 ; C 57 ; WX 600 ; N nine ; B 115 -15 624 638 ; C 58 ; WX 600 ; N colon ; B 234 -15 455 437 ; C 59 ; WX 600 ; N semicolon ; B 118 -158 431 437 ; C 60 ; WX 600 ; N less ; B 102 54 642 501 ; C 61 ; WX 600 ; N equal ; B 81 138 638 422 ; C 62 ; WX 600 ; N greater ; B 76 53 616 500 ; C 63 ; WX 600 ; N question ; B 197 -15 608 598 ; C 64 ; WX 600 ; N at ; B 98 -152 582 620 ; C 65 ; WX 600 ; N A ; B -11 0 633 583 ; C 66 ; WX 600 ; N B ; B 22 0 620 583 ; C 67 ; WX 600 ; N C ; B 80 -14 663 597 ; C 68 ; WX 600 ; N D ; B 23 0 622 583 ; C 69 ; WX 600 ; N E ; B 23 0 652 583 ; C 70 ; WX 600 ; N F ; B 23 0 674 583 ; C 71 ; WX 600 ; N G ; B 79 -14 667 597 ; C 72 ; WX 600 ; N H ; B 32 0 675 583 ; C 73 ; WX 600 ; N I ; B 93 0 632 583 ; C 74 ; WX 600 ; N J ; B 64 -14 727 583 ; C 75 ; WX 600 ; N K ; B 22 0 687 583 ; C 76 ; WX 600 ; N L ; B 42 0 616 583 ; C 77 ; WX 600 ; N M ; B -10 0 728 583 ; C 78 ; WX 600 ; N N ; B 21 0 706 583 ; C 79 ; WX 600 ; N O ; B 75 -14 649 597 ; C 80 ; WX 600 ; N P ; B 23 0 617 583 ; C 81 ; WX 600 ; N Q ; B 75 -145 649 597 ; C 82 ; WX 600 ; N R ; B 23 0 631 583 ; C 83 ; WX 600 ; N S ; B 72 -14 634 597 ; C 84 ; WX 600 ; N T ; B 121 0 682 583 ; C 85 ; WX 600 ; N U ; B 110 -14 705 583 ; C 86 ; WX 600 ; N V ; B 91 0 735 583 ; C 87 ; WX 600 ; N W ; B 98 0 725 583 ; C 88 ; WX 600 ; N X ; B 19 0 692 583 ; C 89 ; WX 600 ; N Y ; B 128 0 694 583 ; C 90 ; WX 600 ; N Z ; B 73 0 628 583 ; C 91 ; WX 600 ; N bracketleft ; B 219 -148 598 627 ; C 92 ; WX 600 ; N backslash ; B 219 -113 504 695 ; C 93 ; WX 600 ; N bracketright ; B 104 -148 483 627 ; C 94 ; WX 600 ; N asciicircum ; B 161 325 598 652 ; C 95 ; WX 600 ; N underscore ; B -61 -125 564 -75 ; C 96 ; WX 600 ; N quoteleft ; B 377 348 534 602 ; C 97 ; WX 600 ; N a ; B 65 -16 583 450 ; C 98 ; WX 600 ; N b ; B 2 -14 623 624 ; C 99 ; WX 600 ; N c ; B 93 -16 626 450 ; C 100 ; WX 600 ; N d ; B 74 -14 664 624 ; C 101 ; WX 600 ; N e ; B 74 -16 600 450 ; C 102 ; WX 600 ; N f ; B 84 0 691 623 ; C 103 ; WX 600 ; N g ; B 73 -205 675 451 ; C 104 ; WX 600 ; N h ; B 33 0 593 624 ; C 105 ; WX 600 ; N i ; B 72 0 550 623 ; C 106 ; WX 600 ; N j ; B 83 -205 581 623 ; C 107 ; WX 600 ; N k ; B 42 0 606 624 ; C 108 ; WX 600 ; N l ; B 72 0 550 624 ; C 109 ; WX 600 ; N m ; B -9 0 635 450 ; C 110 ; WX 600 ; N n ; B 33 0 583 450 ; C 111 ; WX 600 ; N o ; B 84 -16 609 450 ; C 112 ; WX 600 ; N p ; B -42 -205 623 450 ; C 113 ; WX 600 ; N q ; B 75 -205 696 450 ; C 114 ; WX 600 ; N r ; B 64 0 650 449 ; C 115 ; WX 600 ; N s ; B 83 -16 592 450 ; C 116 ; WX 600 ; N t ; B 94 -16 547 591 ; C 117 ; WX 600 ; N u ; B 94 -13 603 437 ; C 118 ; WX 600 ; N v ; B 81 0 683 437 ; C 119 ; WX 600 ; N w ; B 82 0 684 437 ; C 120 ; WX 600 ; N x ; B 30 0 641 437 ; C 121 ; WX 600 ; N y ; B -13 -205 662 437 ; C 122 ; WX 600 ; N z ; B 85 0 599 437 ; C 123 ; WX 600 ; N braceleft ; B 217 -153 556 623 ; C 124 ; WX 600 ; N bar ; B 227 -153 472 622 ; C 125 ; WX 600 ; N braceright ; B 144 -153 483 623 ; C 126 ; WX 600 ; N asciitilde ; B 114 179 606 385 ; C 161 ; WX 600 ; N exclamdown ; B 186 -227 453 426 ; C 162 ; WX 600 ; N cent ; B 144 -44 593 661 ; C 163 ; WX 600 ; N sterling ; B 64 0 571 598 ; C 164 ; WX 600 ; N fraction ; B 52 102 676 500 ; C 165 ; WX 600 ; N yen ; B 133 0 693 580 ; C 166 ; WX 600 ; N florin ; B 43 -123 672 638 ; C 167 ; WX 600 ; N section ; B 45 -170 643 583 ; C 168 ; WX 600 ; N currency ; B 96 64 626 519 ; C 169 ; WX 600 ; N quotesingle ; B 343 312 492 602 ; C 170 ; WX 600 ; N quotedblleft ; B 226 348 583 602 ; C 171 ; WX 600 ; N guillemotleft ; B 80 20 654 415 ; C 172 ; WX 600 ; N guilsinglleft ; B 80 20 425 415 ; C 173 ; WX 600 ; N guilsinglright ; B 273 20 617 415 ; C 174 ; WX 600 ; N fi ; B -4 0 633 624 ; C 175 ; WX 600 ; N fl ; B -8 0 645 623 ; C 177 ; WX 600 ; N endash ; B 101 229 619 329 ; C 178 ; WX 600 ; N dagger ; B 175 -92 589 622 ; C 179 ; WX 600 ; N daggerdbl ; B 123 -92 589 622 ; C 180 ; WX 600 ; N periodcentered ; B 283 214 436 346 ; C 182 ; WX 600 ; N paragraph ; B 108 -174 672 583 ; C 183 ; WX 600 ; N bullet ; B 211 154 517 453 ; C 184 ; WX 600 ; N quotesinglbase ; B 118 -158 379 134 ; C 185 ; WX 600 ; N quotedblbase ; B 66 -120 519 134 ; C 186 ; WX 600 ; N quotedblright ; B 166 348 619 602 ; C 187 ; WX 600 ; N guillemotright ; B 43 20 617 415 ; C 188 ; WX 600 ; N ellipsis ; B 34 -15 587 117 ; C 189 ; WX 600 ; N perthousand ; B 104 0 627 618 ; C 191 ; WX 600 ; N questiondown ; B 70 -227 481 386 ; C 193 ; WX 600 ; N grave ; B 264 496 464 696 ; C 194 ; WX 600 ; N acute ; B 362 496 616 696 ; C 195 ; WX 600 ; N circumflex ; B 237 497 590 696 ; C 196 ; WX 600 ; N tilde ; B 233 523 619 656 ; C 197 ; WX 600 ; N macron ; B 249 546 600 626 ; C 198 ; WX 600 ; N breve ; B 261 503 614 687 ; C 199 ; WX 600 ; N dotaccent ; B 365 534 488 654 ; C 200 ; WX 600 ; N dieresis ; B 261 534 592 654 ; C 202 ; WX 600 ; N ring ; B 303 486 554 727 ; C 203 ; WX 600 ; N cedilla ; B 143 -229 381 0 ; C 205 ; WX 600 ; N hungarumlaut ; B 237 496 616 694 ; C 206 ; WX 600 ; N ogonek ; B 222 -208 433 0 ; C 207 ; WX 600 ; N caron ; B 264 497 617 696 ; C 208 ; WX 600 ; N emdash ; B 30 229 690 329 ; C 225 ; WX 600 ; N AE ; B -10 0 717 583 ; C 227 ; WX 600 ; N ordfeminine ; B 170 182 559 595 ; C 232 ; WX 600 ; N Lslash ; B 43 0 616 583 ; C 233 ; WX 600 ; N Oslash ; B 4 -70 717 638 ; C 234 ; WX 600 ; N OE ; B 34 0 717 583 ; C 235 ; WX 600 ; N ordmasculine ; B 168 182 566 595 ; C 241 ; WX 600 ; N ae ; B 14 -16 665 450 ; C 245 ; WX 600 ; N dotlessi ; B 72 0 550 437 ; C 248 ; WX 600 ; N lslash ; B 72 0 557 624 ; C 249 ; WX 600 ; N oslash ; B 17 -70 669 494 ; C 250 ; WX 600 ; N oe ; B 28 -16 666 450 ; C 251 ; WX 600 ; N germandbls ; B 22 -16 569 623 ; C -1 ; WX 600 ; N Udieresis ; B 110 -14 705 800 ; C -1 ; WX 600 ; N Uacute ; B 110 -14 705 839 ; C -1 ; WX 600 ; N Scedilla ; B 72 -229 634 597 ; C -1 ; WX 600 ; N Tcaron ; B 121 0 682 839 ; C -1 ; WX 600 ; N Scaron ; B 72 -14 657 839 ; C -1 ; WX 600 ; N Rcaron ; B 23 0 631 839 ; C -1 ; WX 600 ; N Racute ; B 23 0 631 839 ; C -1 ; WX 600 ; N Sacute ; B 72 -14 634 839 ; C -1 ; WX 600 ; N Otilde ; B 75 -14 656 799 ; C -1 ; WX 600 ; N ucircumflex ; B 94 -13 603 696 ; C -1 ; WX 600 ; N Ohungarumlaut ; B 75 -14 680 837 ; C -1 ; WX 600 ; N Uhungarumlaut ; B 110 -14 705 837 ; C -1 ; WX 600 ; N Yacute ; B 128 0 694 839 ; C -1 ; WX 600 ; N Eth ; B 23 0 622 583 ; C -1 ; WX 600 ; N Dcroat ; B 23 0 622 583 ; C -1 ; WX 600 ; N Zacute ; B 73 0 628 839 ; C -1 ; WX 600 ; N Uring ; B 110 -14 705 871 ; C -1 ; WX 600 ; N gbreve ; B 73 -205 675 687 ; C -1 ; WX 600 ; N eogonek ; B 74 -208 600 450 ; C -1 ; WX 600 ; N edotaccent ; B 74 -16 600 654 ; C -1 ; WX 600 ; N ecaron ; B 74 -16 617 696 ; C -1 ; WX 600 ; N Ugrave ; B 110 -14 705 839 ; C -1 ; WX 600 ; N Thorn ; B 23 0 588 583 ; C -1 ; WX 600 ; N eacute ; B 74 -16 600 696 ; C -1 ; WX 600 ; N edieresis ; B 74 -16 600 654 ; C -1 ; WX 740 ; N dcaron ; B 74 -14 840 639 ; C -1 ; WX 600 ; N ccedilla ; B 92 -229 626 450 ; C -1 ; WX 600 ; N ccaron ; B 93 -16 627 696 ; C -1 ; WX 600 ; N cacute ; B 93 -16 626 696 ; C -1 ; WX 600 ; N aogonek ; B 65 -208 583 450 ; C -1 ; WX 600 ; N aring ; B 65 -16 583 727 ; C -1 ; WX 600 ; N atilde ; B 65 -16 612 656 ; C -1 ; WX 600 ; N abreve ; B 65 -16 614 687 ; C -1 ; WX 600 ; N egrave ; B 74 -16 600 696 ; C -1 ; WX 600 ; N agrave ; B 65 -16 583 696 ; C -1 ; WX 600 ; N aacute ; B 66 -16 584 696 ; C -1 ; WX 600 ; N adieresis ; B 65 -16 583 654 ; C -1 ; WX 600 ; N Uogonek ; B 110 -208 705 583 ; C -1 ; WX 600 ; N ugrave ; B 94 -13 603 696 ; C -1 ; WX 600 ; N uacute ; B 94 -13 603 696 ; C -1 ; WX 600 ; N udieresis ; B 94 -13 603 654 ; C -1 ; WX 600 ; N tcaron ; B 94 -16 700 639 ; C -1 ; WX 600 ; N scommaaccent ; B 83 -278 592 450 ; C -1 ; WX 600 ; N Zcaron ; B 73 0 644 839 ; C -1 ; WX 600 ; N ecircumflex ; B 74 -16 600 696 ; C -1 ; WX 600 ; N Ucircumflex ; B 110 -14 705 839 ; C -1 ; WX 600 ; N acircumflex ; B 65 -16 583 696 ; C -1 ; WX 600 ; N Zdotaccent ; B 73 0 628 793 ; C -1 ; WX 600 ; N scaron ; B 83 -16 627 696 ; C -1 ; WX 600 ; N Amacron ; B -11 0 633 776 ; C -1 ; WX 600 ; N sacute ; B 83 -16 616 696 ; C -1 ; WX 600 ; N Tcommaaccent ; B 121 -278 682 583 ; C -1 ; WX 600 ; N Ydieresis ; B 128 0 694 800 ; C -1 ; WX 600 ; N thorn ; B -42 -205 623 624 ; C -1 ; WX 600 ; N Emacron ; B 23 0 652 776 ; C -1 ; WX 600 ; N Ograve ; B 75 -14 649 839 ; C -1 ; WX 600 ; N Oacute ; B 75 -14 649 839 ; C -1 ; WX 600 ; N Odieresis ; B 75 -14 649 800 ; C -1 ; WX 600 ; N Ntilde ; B 21 0 706 799 ; C -1 ; WX 600 ; N Ncaron ; B 21 0 706 839 ; C -1 ; WX 600 ; N Nacute ; B 21 0 706 839 ; C -1 ; WX 600 ; N Lcaron ; B 42 0 680 598 ; C -1 ; WX 600 ; N Lacute ; B 42 0 616 839 ; C -1 ; WX 600 ; N Idotaccent ; B 93 0 632 793 ; C -1 ; WX 600 ; N racute ; B 64 0 650 696 ; C -1 ; WX 600 ; N Icircumflex ; B 93 0 632 839 ; C -1 ; WX 600 ; N ohungarumlaut ; B 84 -16 616 694 ; C -1 ; WX 600 ; N otilde ; B 84 -16 626 656 ; C -1 ; WX 600 ; N Euro ; B 54 -14 639 597 ; C -1 ; WX 600 ; N ocircumflex ; B 84 -16 609 696 ; C -1 ; WX 600 ; N onesuperior ; B 224 247 494 638 ; C -1 ; WX 600 ; N twosuperior ; B 202 247 538 637 ; C -1 ; WX 600 ; N threesuperior ; B 218 238 543 637 ; C -1 ; WX 600 ; N Igrave ; B 93 0 632 839 ; C -1 ; WX 600 ; N Iacute ; B 93 0 632 839 ; C -1 ; WX 600 ; N Imacron ; B 93 0 632 776 ; C -1 ; WX 600 ; N Iogonek ; B 93 -208 632 583 ; C -1 ; WX 600 ; N Idieresis ; B 93 0 632 800 ; C -1 ; WX 600 ; N Gbreve ; B 79 -14 667 831 ; C -1 ; WX 600 ; N Umacron ; B 110 -14 705 776 ; C -1 ; WX 600 ; N Kcommaaccent ; B 22 -278 687 583 ; C -1 ; WX 600 ; N ograve ; B 84 -16 609 696 ; C -1 ; WX 600 ; N Scommaaccent ; B 72 -278 634 597 ; C -1 ; WX 600 ; N Eogonek ; B 23 -208 652 583 ; C -1 ; WX 600 ; N oacute ; B 84 -16 609 696 ; C -1 ; WX 600 ; N Edotaccent ; B 23 0 652 793 ; C -1 ; WX 600 ; N iogonek ; B 72 -208 550 623 ; C -1 ; WX 600 ; N gcommaaccent ; B 73 -205 675 722 ; C -1 ; WX 600 ; N odieresis ; B 84 -16 609 654 ; C -1 ; WX 600 ; N ntilde ; B 33 0 613 656 ; C -1 ; WX 600 ; N ncaron ; B 33 0 617 696 ; C -1 ; WX 600 ; N Ecaron ; B 23 0 652 839 ; C -1 ; WX 600 ; N Ecircumflex ; B 23 0 652 839 ; C -1 ; WX 600 ; N scedilla ; B 83 -229 592 450 ; C -1 ; WX 600 ; N rcaron ; B 64 0 650 696 ; C -1 ; WX 600 ; N Egrave ; B 23 0 652 839 ; C -1 ; WX 600 ; N Eacute ; B 23 0 652 839 ; C -1 ; WX 600 ; N Gcommaaccent ; B 79 -278 667 597 ; C -1 ; WX 600 ; N Rcommaaccent ; B 23 -278 631 583 ; C -1 ; WX 600 ; N Edieresis ; B 23 0 652 800 ; C -1 ; WX 600 ; N nacute ; B 33 0 616 696 ; C -1 ; WX 600 ; N uogonek ; B 94 -208 603 437 ; C -1 ; WX 600 ; N umacron ; B 94 -13 603 626 ; C -1 ; WX 600 ; N Dcaron ; B 23 0 622 839 ; C -1 ; WX 600 ; N lcaron ; B 72 0 700 639 ; C -1 ; WX 600 ; N Ccaron ; B 80 -14 663 839 ; C -1 ; WX 600 ; N Cacute ; B 80 -14 663 839 ; C -1 ; WX 600 ; N Ccedilla ; B 80 -229 663 597 ; C -1 ; WX 600 ; N degree ; B 210 243 568 596 ; C -1 ; WX 600 ; N Aogonek ; B -11 -208 633 583 ; C -1 ; WX 600 ; N minus ; B 101 230 619 330 ; C -1 ; WX 600 ; N multiply ; B 126 80 592 480 ; C -1 ; WX 600 ; N divide ; B 101 28 619 532 ; C -1 ; WX 600 ; N Aring ; B -11 0 633 871 ; C -1 ; WX 600 ; N trademark ; B 60 220 732 583 ; C -1 ; WX 600 ; N rcommaaccent ; B 64 -278 650 449 ; C -1 ; WX 600 ; N lacute ; B 72 0 600 839 ; C -1 ; WX 600 ; N omacron ; B 84 -16 609 626 ; C -1 ; WX 600 ; N Atilde ; B -11 0 633 799 ; C -1 ; WX 600 ; N icircumflex ; B 72 0 573 696 ; C -1 ; WX 600 ; N igrave ; B 72 0 550 696 ; C -1 ; WX 600 ; N ncommaaccent ; B 33 -278 583 450 ; C -1 ; WX 600 ; N lcommaaccent ; B 72 -278 550 624 ; C -1 ; WX 600 ; N plusminus ; B 52 0 640 624 ; C -1 ; WX 600 ; N onehalf ; B 25 0 685 638 ; C -1 ; WX 600 ; N onequarter ; B 25 0 673 638 ; C -1 ; WX 600 ; N threequarters ; B 18 0 673 637 ; C -1 ; WX 600 ; N iacute ; B 71 0 574 696 ; C -1 ; WX 600 ; N Abreve ; B -11 0 633 831 ; C -1 ; WX 600 ; N kcommaaccent ; B 42 -278 606 624 ; C -1 ; WX 600 ; N Omacron ; B 75 -14 649 776 ; C -1 ; WX 600 ; N imacron ; B 72 0 600 626 ; C -1 ; WX 600 ; N emacron ; B 74 -16 600 626 ; C -1 ; WX 600 ; N amacron ; B 65 -16 600 626 ; C -1 ; WX 600 ; N tcommaaccent ; B 94 -278 547 591 ; C -1 ; WX 600 ; N ydieresis ; B -13 -205 662 654 ; C -1 ; WX 600 ; N zdotaccent ; B 85 0 599 654 ; C -1 ; WX 600 ; N zcaron ; B 85 0 619 696 ; C -1 ; WX 600 ; N zacute ; B 85 0 616 696 ; C -1 ; WX 600 ; N yacute ; B -13 -205 662 696 ; C -1 ; WX 600 ; N uhungarumlaut ; B 94 -13 616 694 ; C -1 ; WX 600 ; N eth ; B 83 -16 617 646 ; C -1 ; WX 600 ; N uring ; B 94 -13 603 727 ; C -1 ; WX 600 ; N Ocircumflex ; B 75 -14 649 839 ; C -1 ; WX 600 ; N commaaccent ; B 147 -278 342 -59 ; C -1 ; WX 600 ; N copyright ; B 48 -15 675 598 ; C -1 ; WX 600 ; N registered ; B 48 -15 675 598 ; C -1 ; WX 600 ; N Acircumflex ; B -11 0 633 839 ; C -1 ; WX 600 ; N idieresis ; B 72 0 575 656 ; C -1 ; WX 600 ; N lozenge ; B 133 -19 590 593 ; C -1 ; WX 600 ; N Delta ; B 15 0 585 583 ; C -1 ; WX 600 ; N notequal ; B 81 22 638 525 ; C -1 ; WX 600 ; N radical ; B 74 -60 782 697 ; C -1 ; WX 600 ; N Agrave ; B -11 0 633 839 ; C -1 ; WX 600 ; N Aacute ; B -11 0 633 839 ; C -1 ; WX 600 ; N lessequal ; B 50 0 666 591 ; C -1 ; WX 600 ; N greaterequal ; B 52 0 660 591 ; C -1 ; WX 600 ; N logicalnot ; B 125 115 560 445 ; C -1 ; WX 600 ; N summation ; B 32 -97 668 671 ; C -1 ; WX 600 ; N partialdiff ; B 138 -16 579 590 ; C -1 ; WX 600 ; N Ncommaaccent ; B 21 -278 706 583 ; C -1 ; WX 600 ; N dcroat ; B 74 -14 712 624 ; C -1 ; WX 600 ; N brokenbar ; B 227 -153 472 622 ; C -1 ; WX 600 ; N Lcommaaccent ; B 42 -278 616 583 ; C -1 ; WX 600 ; N Adieresis ; B -11 0 633 800 ; C -1 ; WX 600 ; N mu ; B 72 -153 603 440 ; C -1 ; WX 600 ; N .notdef ; B 386 0 386 0 ; EndCharMetrics StartKernData StartKernPairs 998 KPX A C -24 KPX A Ccedilla -30 KPX A G -20 KPX A O -26 KPX A Odieresis -26 KPX A Q -25 KPX A T -35 KPX A U -33 KPX A Uacute -33 KPX A Ucircumflex -33 KPX A Udieresis -33 KPX A Ugrave -33 KPX A V -63 KPX A W -21 KPX A Y -34 KPX A a 8 KPX A b 39 KPX A c -12 KPX A ccedilla -15 KPX A comma -52 KPX A d -4 KPX A e -5 KPX A g -5 KPX A guillemotleft -44 KPX A guilsinglleft -44 KPX A hyphen -23 KPX A o -11 KPX A period -67 KPX A q -10 KPX A quotedblright -89 KPX A quoteright -116 KPX A t -25 KPX A u -18 KPX A v -41 KPX A w -15 KPX A y -41 KPX Aacute C -24 KPX Aacute G -20 KPX Aacute O -26 KPX Aacute Q -25 KPX Aacute T -35 KPX Aacute U -33 KPX Aacute V -63 KPX Aacute W -21 KPX Aacute Y -34 KPX Aacute a 8 KPX Aacute b 39 KPX Aacute c -12 KPX Aacute comma -52 KPX Aacute d -4 KPX Aacute e -5 KPX Aacute g -5 KPX Aacute guillemotleft -44 KPX Aacute guilsinglleft -44 KPX Aacute hyphen -23 KPX Aacute o -11 KPX Aacute period -67 KPX Aacute q -10 KPX Aacute quoteright -116 KPX Aacute t -25 KPX Aacute u -18 KPX Aacute v -41 KPX Aacute w -15 KPX Aacute y -41 KPX Acircumflex C -24 KPX Acircumflex G -20 KPX Acircumflex O -26 KPX Acircumflex Q -25 KPX Acircumflex T -35 KPX Acircumflex U -33 KPX Acircumflex V -63 KPX Acircumflex W -21 KPX Acircumflex Y -34 KPX Acircumflex comma -52 KPX Acircumflex period -67 KPX Adieresis C -24 KPX Adieresis G -20 KPX Adieresis O -26 KPX Adieresis Q -25 KPX Adieresis T -35 KPX Adieresis U -33 KPX Adieresis V -63 KPX Adieresis W -21 KPX Adieresis Y -34 KPX Adieresis a 8 KPX Adieresis b 39 KPX Adieresis c -12 KPX Adieresis comma -52 KPX Adieresis d -4 KPX Adieresis g -5 KPX Adieresis guillemotleft -44 KPX Adieresis guilsinglleft -44 KPX Adieresis hyphen -23 KPX Adieresis o -11 KPX Adieresis period -67 KPX Adieresis q -10 KPX Adieresis quotedblright -89 KPX Adieresis quoteright -116 KPX Adieresis t -25 KPX Adieresis u -18 KPX Adieresis v -41 KPX Adieresis w -15 KPX Adieresis y -41 KPX Agrave C -24 KPX Agrave G -20 KPX Agrave O -26 KPX Agrave Q -25 KPX Agrave T -35 KPX Agrave U -33 KPX Agrave V -63 KPX Agrave W -21 KPX Agrave Y -34 KPX Agrave comma -52 KPX Agrave period -67 KPX Aring C -24 KPX Aring G -20 KPX Aring O -26 KPX Aring Q -25 KPX Aring T -35 KPX Aring U -33 KPX Aring V -63 KPX Aring W -21 KPX Aring Y -34 KPX Aring a 8 KPX Aring b 39 KPX Aring c -12 KPX Aring comma -52 KPX Aring d -4 KPX Aring e -5 KPX Aring g -5 KPX Aring guillemotleft -44 KPX Aring guilsinglleft -44 KPX Aring hyphen -23 KPX Aring o -11 KPX Aring period -67 KPX Aring q -10 KPX Aring quotedblright -89 KPX Aring quoteright -116 KPX Aring t -25 KPX Aring u -18 KPX Aring v -41 KPX Aring w -15 KPX Aring y -41 KPX Atilde C -24 KPX Atilde G -20 KPX Atilde O -26 KPX Atilde Q -25 KPX Atilde T -35 KPX Atilde U -33 KPX Atilde V -63 KPX Atilde W -21 KPX Atilde Y -34 KPX Atilde comma -52 KPX Atilde period -67 KPX B A -2 KPX B AE -3 KPX B Aacute -2 KPX B Acircumflex -2 KPX B Adieresis -2 KPX B Aring -2 KPX B Atilde -2 KPX B O -14 KPX B OE 7 KPX B Oacute -14 KPX B Ocircumflex -14 KPX B Odieresis -14 KPX B Ograve -14 KPX B Oslash -12 KPX B V -29 KPX B W -10 KPX B Y -50 KPX C A 2 KPX C AE 2 KPX C Aacute 2 KPX C Adieresis 2 KPX C Aring 2 KPX C H -18 KPX C K -13 KPX C O -19 KPX C Oacute -19 KPX C Odieresis -19 KPX Ccedilla A -5 KPX D A -32 KPX D Aacute -32 KPX D Acircumflex -32 KPX D Adieresis -32 KPX D Agrave -32 KPX D Aring -32 KPX D Atilde -32 KPX D J -38 KPX D T -36 KPX D V -40 KPX D W -16 KPX D X -40 KPX D Y -61 KPX F A -47 KPX F Aacute -47 KPX F Acircumflex -47 KPX F Adieresis -47 KPX F Agrave -47 KPX F Aring -47 KPX F Atilde -47 KPX F J -83 KPX F O -32 KPX F Odieresis -32 KPX F a -44 KPX F aacute -45 KPX F adieresis -44 KPX F ae -22 KPX F aring -44 KPX F comma -172 KPX F e -51 KPX F eacute -51 KPX F hyphen -61 KPX F i -50 KPX F j -58 KPX F o -55 KPX F oacute -55 KPX F odieresis -55 KPX F oe -20 KPX F oslash -55 KPX F period -191 KPX F r -37 KPX F u -6 KPX G A 0 KPX G AE 0 KPX G Aacute 0 KPX G Acircumflex 0 KPX G Adieresis 0 KPX G Agrave 0 KPX G Aring 0 KPX G Atilde 0 KPX G T -30 KPX G V 1 KPX G W 5 KPX G Y -20 KPX J A -15 KPX J AE -24 KPX J Adieresis -15 KPX J Aring -15 KPX K C -32 KPX K G -30 KPX K O -31 KPX K OE -9 KPX K Oacute -31 KPX K Odieresis -31 KPX K S -17 KPX K T -20 KPX K a -1 KPX K adieresis -1 KPX K ae 23 KPX K aring -1 KPX K e -14 KPX K hyphen -50 KPX K o -20 KPX K oacute -20 KPX K odieresis -20 KPX K u -30 KPX K udieresis -30 KPX K y -56 KPX L A 9 KPX L AE 9 KPX L Aacute 9 KPX L Adieresis 9 KPX L Aring 9 KPX L C -19 KPX L Ccedilla -19 KPX L G -19 KPX L O -16 KPX L Oacute -16 KPX L Ocircumflex -16 KPX L Odieresis -16 KPX L Ograve -16 KPX L Otilde -16 KPX L S -32 KPX L T -60 KPX L U -31 KPX L Udieresis -31 KPX L V -61 KPX L W -23 KPX L Y -59 KPX L hyphen 5 KPX L quotedblright -82 KPX L quoteright -107 KPX L u -13 KPX L udieresis -14 KPX L y -36 KPX N A -10 KPX N AE -11 KPX N Aacute -10 KPX N Adieresis -10 KPX N Aring -10 KPX N C -13 KPX N Ccedilla -10 KPX N G -12 KPX N O -10 KPX N Oacute -10 KPX N Odieresis -10 KPX N a -14 KPX N aacute -15 KPX N adieresis -14 KPX N ae 14 KPX N aring -14 KPX N comma -79 KPX N e -7 KPX N eacute -7 KPX N o -12 KPX N oacute -12 KPX N odieresis -12 KPX N oslash -6 KPX N period -98 KPX N u -12 KPX N udieresis -12 KPX O A -21 KPX O AE -20 KPX O Aacute -21 KPX O Adieresis -21 KPX O Aring -21 KPX O T -23 KPX O V -32 KPX O W -4 KPX O X -28 KPX O Y -51 KPX Oacute A -21 KPX Oacute T -23 KPX Oacute V -32 KPX Oacute W -4 KPX Oacute Y -51 KPX Ocircumflex T -23 KPX Ocircumflex V -32 KPX Ocircumflex Y -51 KPX Odieresis A -21 KPX Odieresis T -23 KPX Odieresis V -32 KPX Odieresis W -4 KPX Odieresis X -28 KPX Odieresis Y -51 KPX Ograve T -23 KPX Ograve V -32 KPX Ograve Y -51 KPX Oslash A -13 KPX Otilde T -23 KPX Otilde V -32 KPX Otilde Y -51 KPX P A -65 KPX P AE -63 KPX P Aacute -65 KPX P Adieresis -65 KPX P Aring -65 KPX P J -80 KPX P a -54 KPX P aacute -54 KPX P adieresis -54 KPX P ae -31 KPX P aring -54 KPX P comma -164 KPX P e -43 KPX P eacute -43 KPX P hyphen -39 KPX P o -47 KPX P oacute -47 KPX P odieresis -47 KPX P oe -18 KPX P oslash -46 KPX P period -183 KPX R C -19 KPX R Ccedilla -18 KPX R G -18 KPX R O -18 KPX R OE 3 KPX R Oacute -18 KPX R Odieresis -18 KPX R T -36 KPX R U -20 KPX R Udieresis -21 KPX R V -34 KPX R W -10 KPX R Y -35 KPX R a 7 KPX R aacute 6 KPX R adieresis 7 KPX R ae 32 KPX R aring 7 KPX R e -4 KPX R eacute -4 KPX R hyphen -30 KPX R o -9 KPX R oacute -9 KPX R odieresis -9 KPX R oe 24 KPX R u -9 KPX R uacute -9 KPX R udieresis -9 KPX R y -22 KPX S A -16 KPX S AE -16 KPX S Aacute -16 KPX S Adieresis -16 KPX S Aring -16 KPX S T -47 KPX S V -16 KPX S W -15 KPX S Y -37 KPX S t -20 KPX T A -35 KPX T AE -35 KPX T Aacute -35 KPX T Acircumflex -35 KPX T Adieresis -35 KPX T Agrave -35 KPX T Aring -35 KPX T Atilde -35 KPX T C -27 KPX T G -27 KPX T J -72 KPX T O -22 KPX T OE 0 KPX T Oacute -22 KPX T Ocircumflex -22 KPX T Odieresis -22 KPX T Ograve -22 KPX T Oslash -23 KPX T Otilde -22 KPX T S -49 KPX T V 4 KPX T W -2 KPX T Y -17 KPX T a -39 KPX T ae -17 KPX T c -42 KPX T colon -119 KPX T comma -136 KPX T e -31 KPX T g -28 KPX T guillemotleft -81 KPX T guilsinglleft -81 KPX T hyphen -96 KPX T i -46 KPX T j -53 KPX T o -36 KPX T oslash -36 KPX T period -154 KPX T r -33 KPX T s -43 KPX T semicolon -106 KPX T u -1 KPX T v 6 KPX T w 5 KPX T y -4 KPX U A -23 KPX U AE -22 KPX U Aacute -23 KPX U Acircumflex -23 KPX U Adieresis -23 KPX U Aring -23 KPX U Atilde -23 KPX U comma -98 KPX U m 14 KPX U n -10 KPX U p -3 KPX U period -118 KPX U r -36 KPX Uacute A -23 KPX Uacute comma -98 KPX Uacute m 14 KPX Uacute n -10 KPX Uacute p -3 KPX Uacute period -118 KPX Uacute r -36 KPX Ucircumflex A -23 KPX Udieresis A -23 KPX Udieresis b 20 KPX Udieresis comma -98 KPX Udieresis m 14 KPX Udieresis n -10 KPX Udieresis p -3 KPX Udieresis period -118 KPX Udieresis r -36 KPX Ugrave A -23 KPX V A -12 KPX V AE -21 KPX V Aacute -12 KPX V Acircumflex -12 KPX V Adieresis -12 KPX V Agrave -12 KPX V Aring -12 KPX V Atilde -12 KPX V C -34 KPX V G -34 KPX V O -32 KPX V Oacute -32 KPX V Ocircumflex -32 KPX V Odieresis -32 KPX V Ograve -32 KPX V Oslash -32 KPX V Otilde -32 KPX V S -35 KPX V T 3 KPX V a -59 KPX V ae -30 KPX V colon -139 KPX V comma -150 KPX V e -51 KPX V g -50 KPX V guillemotleft -83 KPX V guilsinglleft -83 KPX V hyphen -45 KPX V i -64 KPX V o -56 KPX V oslash -51 KPX V period -169 KPX V r -51 KPX V semicolon -127 KPX V u -21 KPX V y -22 KPX W A -15 KPX W AE -14 KPX W Aacute -15 KPX W Acircumflex -15 KPX W Adieresis -15 KPX W Agrave -15 KPX W Aring -15 KPX W Atilde -15 KPX W C -9 KPX W G -8 KPX W O -7 KPX W Oacute -7 KPX W Ocircumflex -7 KPX W Odieresis -7 KPX W Ograve -7 KPX W Oslash -3 KPX W Otilde -7 KPX W S -21 KPX W T -1 KPX W a -14 KPX W ae 15 KPX W colon -103 KPX W comma -86 KPX W e -6 KPX W g -5 KPX W guillemotleft -38 KPX W guilsinglleft -38 KPX W hyphen -3 KPX W i -40 KPX W o -11 KPX W oslash -6 KPX W period -105 KPX W r -28 KPX W semicolon -86 KPX W u -3 KPX W y -6 KPX X C -33 KPX X O -31 KPX X Odieresis -31 KPX X Q -30 KPX X a -7 KPX X e -20 KPX X hyphen -55 KPX X o -26 KPX X u -36 KPX X y -49 KPX Y A -32 KPX Y AE -35 KPX Y Aacute -32 KPX Y Acircumflex -32 KPX Y Adieresis -32 KPX Y Agrave -32 KPX Y Aring -32 KPX Y Atilde -32 KPX Y C -54 KPX Y G -54 KPX Y O -52 KPX Y Oacute -52 KPX Y Ocircumflex -52 KPX Y Odieresis -52 KPX Y Ograve -52 KPX Y Oslash -50 KPX Y Otilde -52 KPX Y S -55 KPX Y T -17 KPX Y a -61 KPX Y ae -36 KPX Y colon -157 KPX Y comma -123 KPX Y e -63 KPX Y g -62 KPX Y guillemotleft -99 KPX Y guilsinglleft -99 KPX Y hyphen -87 KPX Y i -63 KPX Y o -68 KPX Y oslash -56 KPX Y p -34 KPX Y period -141 KPX Y semicolon -139 KPX Y u -48 KPX Y v -38 KPX Z v -47 KPX Z y -55 KPX a j -85 KPX a quoteright -79 KPX a v -25 KPX a w -13 KPX a y -36 KPX aacute v -25 KPX aacute w -13 KPX aacute y -36 KPX adieresis v -25 KPX adieresis w -13 KPX adieresis y -36 KPX ae v 24 KPX ae w 31 KPX ae y 13 KPX agrave v -25 KPX agrave w -13 KPX agrave y -36 KPX aring v -25 KPX aring w -13 KPX aring y -36 KPX b v -4 KPX b w 3 KPX b y -15 KPX c h 8 KPX c k 3 KPX comma one -133 KPX comma quotedblright -142 KPX comma quoteright -170 KPX e quoteright -64 KPX e t -16 KPX e v -14 KPX e w -4 KPX e x 3 KPX e y -25 KPX eacute v -14 KPX eacute w -4 KPX eacute y -25 KPX ecircumflex v -14 KPX ecircumflex w -4 KPX ecircumflex y -25 KPX eight four -63 KPX eight one -80 KPX eight seven -75 KPX f a -38 KPX f aacute -38 KPX f adieresis -38 KPX f ae -13 KPX f aring -38 KPX f e -46 KPX f eacute -46 KPX f f -46 KPX f i -40 KPX f j -63 KPX f l -30 KPX f o -51 KPX f oacute -51 KPX f odieresis -48 KPX f oe -17 KPX f oslash -34 KPX f quoteright -78 KPX f s -46 KPX f t -10 KPX five four -58 KPX five one -80 KPX five seven -80 KPX four four -68 KPX four one -72 KPX four seven -100 KPX g a -7 KPX g adieresis -7 KPX g ae 21 KPX g aring -7 KPX g e -1 KPX g eacute -1 KPX g l -38 KPX g oacute -6 KPX g odieresis -6 KPX g r -5 KPX guillemotright A -42 KPX guillemotright AE -39 KPX guillemotright Aacute -42 KPX guillemotright Adieresis -42 KPX guillemotright Aring -42 KPX guillemotright T -81 KPX guillemotright V -80 KPX guillemotright W -35 KPX guillemotright Y -96 KPX guilsinglright A -42 KPX guilsinglright AE -39 KPX guilsinglright Aacute -42 KPX guilsinglright Adieresis -42 KPX guilsinglright Aring -42 KPX guilsinglright T -81 KPX guilsinglright V -80 KPX guilsinglright W -35 KPX guilsinglright Y -96 KPX h quoteright -71 KPX h y -29 KPX hyphen A -21 KPX hyphen AE -17 KPX hyphen Aacute -21 KPX hyphen Adieresis -21 KPX hyphen Aring -21 KPX hyphen T -93 KPX hyphen V -41 KPX hyphen W -1 KPX hyphen Y -84 KPX i T -64 KPX i j -145 KPX k a -5 KPX k aacute -5 KPX k adieresis -5 KPX k ae 20 KPX k aring -5 KPX k comma -67 KPX k e -17 KPX k eacute -17 KPX k g -16 KPX k hyphen -53 KPX k o -22 KPX k oacute -22 KPX k odieresis -22 KPX k period -80 KPX k s -13 KPX k u -7 KPX k udieresis -7 KPX l v -77 KPX l y -78 KPX m p 31 KPX m v 13 KPX m w 22 KPX m y 2 KPX n T -47 KPX n p 2 KPX n quoteright -69 KPX n v -17 KPX n w -6 KPX n y -28 KPX nine four -59 KPX nine one -76 KPX nine seven -68 KPX o T -39 KPX o quoteright -61 KPX o t -16 KPX o v -10 KPX o w -3 KPX o x -10 KPX o y -21 KPX oacute v -10 KPX oacute w -3 KPX oacute y -21 KPX ocircumflex t -16 KPX odieresis t -16 KPX odieresis v -10 KPX odieresis w -3 KPX odieresis x -10 KPX odieresis y -21 KPX ograve v -10 KPX ograve w -3 KPX ograve y -21 KPX one comma -104 KPX one eight -83 KPX one five -63 KPX one four -95 KPX one nine -80 KPX one one -68 KPX one period -119 KPX one seven -146 KPX one six -107 KPX one three -62 KPX one two -53 KPX one zero -95 KPX p t -7 KPX p y -12 KPX period one -118 KPX period quotedblright -137 KPX period quoteright -165 KPX q c 0 KPX q u 37 KPX quotedblbase A -10 KPX quotedblbase AE -11 KPX quotedblbase T -92 KPX quotedblbase V -108 KPX quotedblbase W -46 KPX quotedblbase Y -80 KPX quotedblleft A -66 KPX quotedblleft AE -64 KPX quotedblleft Aacute -66 KPX quotedblleft Adieresis -66 KPX quotedblleft Aring -66 KPX quotedblleft T -28 KPX quotedblleft V -20 KPX quotedblleft W -15 KPX quotedblleft Y -50 KPX quotedblright A -81 KPX quotedblright AE -79 KPX quotedblright Aacute -81 KPX quotedblright Adieresis -81 KPX quotedblright Aring -81 KPX quotedblright T -45 KPX quotedblright V -35 KPX quotedblright W -30 KPX quotedblright Y -57 KPX quoteleft A -90 KPX quoteleft AE -88 KPX quoteleft Aacute -90 KPX quoteleft Adieresis -90 KPX quoteleft Aring -90 KPX quoteleft T -52 KPX quoteleft V -45 KPX quoteleft W -40 KPX quoteleft Y -74 KPX quoteright A -160 KPX quoteright AE -158 KPX quoteright Aacute -160 KPX quoteright Adieresis -160 KPX quoteright Aring -160 KPX quoteright comma -234 KPX quoteright d -146 KPX quoteright o -148 KPX quoteright period -251 KPX quoteright r -155 KPX quoteright s -154 KPX quoteright t -121 KPX quoteright v -114 KPX quoteright w -109 KPX quoteright y -120 KPX r a -22 KPX r aacute -22 KPX r acircumflex -22 KPX r adieresis -22 KPX r ae 0 KPX r agrave -22 KPX r aring -22 KPX r c -23 KPX r ccedilla -18 KPX r colon -100 KPX r comma -112 KPX r d -13 KPX r e -11 KPX r eacute -11 KPX r ecircumflex -11 KPX r egrave -11 KPX r f -20 KPX r g -9 KPX r h -23 KPX r hyphen -48 KPX r i -30 KPX r j -38 KPX r k -33 KPX r l -50 KPX r m 31 KPX r n 5 KPX r o -16 KPX r oacute -16 KPX r ocircumflex -16 KPX r odieresis -16 KPX r oe 15 KPX r ograve -16 KPX r oslash -16 KPX r p 25 KPX r period -126 KPX r q -8 KPX r quoteright -45 KPX r r -17 KPX r s -25 KPX r semicolon -88 KPX r t 15 KPX r u 15 KPX r v 22 KPX r w 21 KPX r x 2 KPX r y 10 KPX r z -24 KPX s quoteright -62 KPX s t -14 KPX seven colon -162 KPX seven comma -160 KPX seven eight -79 KPX seven five -87 KPX seven four -105 KPX seven one -72 KPX seven period -179 KPX seven seven -69 KPX seven six -98 KPX seven three -78 KPX seven two -70 KPX six four -54 KPX six one -60 KPX six seven -55 KPX t S -40 KPX t a -21 KPX t aacute -21 KPX t adieresis -21 KPX t ae 4 KPX t aring -21 KPX t colon -121 KPX t e -30 KPX t eacute -30 KPX t h -8 KPX t o -36 KPX t oacute -36 KPX t odieresis -36 KPX t quoteright -102 KPX t semicolon -107 KPX three four -58 KPX three one -79 KPX three seven -74 KPX two four -75 KPX two one -73 KPX two seven -78 KPX u quoteright -58 KPX v a -7 KPX v aacute -7 KPX v acircumflex -7 KPX v adieresis -7 KPX v ae 15 KPX v agrave -7 KPX v aring -7 KPX v atilde -7 KPX v c -17 KPX v colon -86 KPX v comma -139 KPX v e -6 KPX v eacute -6 KPX v ecircumflex -6 KPX v egrave -6 KPX v g -2 KPX v hyphen -28 KPX v l -79 KPX v o -11 KPX v oacute -11 KPX v odieresis -11 KPX v ograve -11 KPX v oslash -10 KPX v period -159 KPX v s -15 KPX v semicolon -74 KPX w a -6 KPX w aacute -7 KPX w acircumflex -6 KPX w adieresis -6 KPX w ae 22 KPX w agrave -6 KPX w aring -6 KPX w atilde -6 KPX w c -8 KPX w colon -86 KPX w comma -93 KPX w e 0 KPX w eacute 0 KPX w ecircumflex 0 KPX w egrave 0 KPX w g 2 KPX w hyphen -1 KPX w l -51 KPX w o -4 KPX w oacute -4 KPX w odieresis -4 KPX w ograve -4 KPX w oslash 0 KPX w period -112 KPX w s -13 KPX w semicolon -74 KPX x a -1 KPX x c -16 KPX x e -7 KPX x eacute -7 KPX x o -12 KPX x q -9 KPX y a -17 KPX y aacute -18 KPX y acircumflex -17 KPX y adieresis -17 KPX y ae 4 KPX y agrave -17 KPX y aring -17 KPX y atilde -17 KPX y c -25 KPX y colon -96 KPX y comma -137 KPX y e -14 KPX y eacute -14 KPX y ecircumflex -14 KPX y egrave -14 KPX y g -11 KPX y hyphen -23 KPX y l -79 KPX y o -20 KPX y oacute -20 KPX y odieresis -20 KPX y ograve -20 KPX y oslash -19 KPX y period -158 KPX y s -24 KPX y semicolon -84 KPX zero four -65 KPX zero one -81 KPX zero seven -79 EndKernPairs EndKernData EndFontMetrics htmldoc-1.8.27/fonts/Serif-Oblique.pfa0100664000212600000240000060544710330505373016230 0ustar mikeuser%!PS-AdobeFont-1.0: Serif-Oblique 1.15 %%DocumentSuppliedResources: font Serif-Oblique %%Title: Serif-Oblique %Version: 1.15 %%CreationDate: Thu Oct 27 10:50:22 2005 %%Creator: mike %Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. %Copyright: DejaVu changes are in public domain % Generated by FontForge 20051018 (http://fontforge.sf.net/) %%EndComments FontDirectory/Serif-Oblique known{/Serif-Oblique findfont dup/UniqueID known{dup /UniqueID get 4041882 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /Serif-Oblique def /FontBBox {-526 -1034 2577 2153 }readonly def /UniqueID 4041882 def /PaintType 0 def /FontInfo 11 dict dup begin /version (1.15) readonly def /Notice (Copyright \050c\051 2003 by Bitstream, Inc. All Rights Reserved.\012DejaVu changes are in public domain\012) readonly def % Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. % DejaVu changes are in public domain /FullName (Serif Oblique) readonly def /FamilyName (Serif) readonly def /Weight (Book) readonly def /FSType 0 def /ItalicAngle -11 def /isFixedPitch false def /UnderlinePosition -213 def /UnderlineThickness 133 def /ascent 1556 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 160/nonbreakingspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/sfthyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def currentdict end currentfile eexec 3A14DAED27B1B7A0A018287F37A51C0057A19138D244F18633C3281F49E71B2976C8C9DB C45B80616A9D551AAF9C94FA83D8AE5EBD51D04338FC3158120FF7AEFC1248BB24B85A16 04521C01E400F220E6D821F07E3788D6F2AD1608FD5786608EE4474A8343666392941AFD D66CA3010ACFD3B0660304725191FCBD49D3B0F9BF769103D1BB111FF1D18E3ADEFDF8DC F1701C460539397AF0387333CB477132441A97B1DB3209E7993A52D4FB9F03D15A966511 BFD3BA68127B3EAB9E05F4B8522B422C7A42CC26456F4485BE6D49CEB152ABEF74C76ACC DC49E28C50D8DE8C5C246B3BCCA463077B4886CF95BA9FBF67CFBEF7A0A5D408C8BA9451 BC5D5EE665DD882420994B36A178F9136BA9B392396378523FF50AD19EE151DB23FE0F5B 5791C326680A43792F01BC1E2C5291A880F347CCE90C16387A9E90D77E6F401E42DD63F9 5F9A1E2BF36D8FB5C252AF6893D02FC4F0111690232B208B3BE36D00C22A173FE73E489C BD2287CC254E8DBB3B382762F3DA084706138D5AC395C09362C764E00D5E69EC24ADB8F0 BAF490691A611065F69473A0B7C4DEE18346296C3A7D1EFFAF33E4580A91050D1D4D76F8 03A825474EF0BED7C5172CD2A6BD2F7E60D089F7229BEC034A0510904F3260F187324572 2C4ED5482BAD233AD9022D825DD0DB1CBE48F3193AE0594818A7C24A606DD17D92D890DD 136036A47876E739810018DA77777D6005287F2686B184D383BFD82BEDD013E0EC4884B4 AACFC9D4A7F87C53BA7595DD116324E147C7E68D50E44795F8C6A43E2957289C8E354CD7 1E10FABF2662439FC0FA92B839E32592A7940E9366122B7B8655ADECB576FA56B083E54D 8A32863E9BDECB90EC284327E9D016A8F4B36443CF20D24B4834A6824C9C5AE74D6EFC99 0D469FA4CC817D7E1F89369EBAF8A7C69CBF770459FE041BFA8AA87EC1D79BC257B00872 76DD859614CFDEAEE5BEDE7243035C87695F6EC20E8EF5FDEEFBA0FB3C2F46B6BB940087 330C9C272DCDE6ADD663DACFAB490ADD6AF28D532341C639AF02693C47A81C3E45AA60D4 E070EA9059D2A4609A944E91ADBD1EFF555C749E60E894435239CD4725D918D762B2A085 2348DA855F08B2B7D7775E39A5B6FF7B1A4FC9B455A59E666DBD3C5BBDABB98A5D48C8AD 693412118A990EC954A219D603E1F13740BB874B4E42D689B038E51218A7BAB37D893AA8 562645E518E865737629F0FC8BAA7713A796607C5A961D7160C18641426FAD6560ECF5A4 5A2B5A00C82A1F4FD619577D04C80C25E187F6F9532D8123F22ABA67C6D66833EF9D4737 4D02DEC8C94DABA28742172F1CAFD237CCE87A7B2A7B19531FCBFC89D7E46FA143FBFF18 76377425422D27BAF0831C71275CC42C8CB0BA12DE5B73540718AF25768EAC4371D9576D 329FE7CBEFC91B656EC91F9643DE060961D35749BB2B68A3C00C2F494D35B987AB16DA55 23B756C9107389C63B4949A8F0A4B26C890B4181FDDA51B821078A2FF2F3A8102D1DB1EB F3E70046527C73D17F1A350180E23CE342F0F508B66816FBBF2EF7910F9067D5CC1B8D9E 646F414B3ACA251192A91D5EE10C178FD1D4A7A0E86CBCBB9372EA0811710BDE2F288D05 711CBE0E3BDC8092C08D7FF770959B2F00EDAFE39B17F7763487F929E09685F8E85544B9 E327B25A03B4FFC676BC838B87E148A5C1776B2452D37001AF26C0C02FAA69A1A870E0EB F9A7AA6D424BF7533AA481926FA4FFFD8900C05342119086A2B6C5B1AA65ADF16DA0B8B0 4F759E05ED8806A7878EEDE899A33A846BF36E1D806A468AD648E0C0627AAD4C0B9FA849 1949148B2A20797A34BA518E37BB4255D8EE303E507F9B1B6E80EE1D34975611D4DDAEF0 0DBFA00B4B8628D9749BABA3EBC088009D45661C71BB48EF1ACFCC8B1FA03315AB610D21 2FADB6A08678693342BAF790CBF3C3923321C9D354EDFB7D8323968A4D4D408E41C2D85C CEAAFE3BC363A8FE76EAD09C6B691B2E14BA386541EF2A800179B4A68A33D07320D43FD7 5E3BDBDDEDC725099BCB6F225BCD9283BB78556DCB61BE7F38A176C6E6DA3104D6D86AA4 13B38BE2AC3A25FEEDFF08C8D0908650E4286DA0D263C5CDAEB6F0ECAD0019F488096C2C B42CC970D946ED44C8B2EA667EE5C6AC98026BE0E721C38888A4692FB09459D01C03DD70 E1A5EEF1F8D4617823861DE29B146EB76448B23541670A0C2D7A042182293B730B9880BA 6E07B544F3ADD237D948E9BBD619827FF720CF3093CCB57D57CA39D12B7613F84C998266 EF98BFC99DBF850AB7B6C3316932453C9B491CAFBA9050D7470D660961E139CCF800A980 397C451E497A19AB61D0873F81141A868070BEAA1600C0BCFB1045C350B8BA1238862C2F DDFB9C33C51D0F116AE19F25BA4FCBC169EE6D09B6E15CFEE513B02E420EE02D3EBB435C F6A8E2E290B09C1E46A6A9D78367C8DE9B0DFB9A215385EB3FF28687C0FAB708AC35BC86 41FEFC5BC425FFEEA7779C27326CD8E240A7A09D53DBDD0705F6115E387000F43C9FC7BF 9DDEF62D9A6BE8B75FC3AB74B468602017D34DDB1DEC5783DA42EE81191ED3877A52FF59 4F70F93225CE53948E614A5DE93974298042B76CE55095E65E527291914B250F582F6762 1A65BAC8EE63B223BD9471D0CA4DC7AA32B3D6474363CA278DCCB8E6CCA4AED33588F683 77B7A7A66A8BC00637C88E0D1FA9B0EF8CB6184479C257DDC648C53221C35408662C416A 484EEE6E03218657754B1EA5754A9C5BEF80DE049531E51E94D01A33E3F1FE6287DC45BE 3945C1425314F367DD8A0C9E066A5A79F8546B054E69C9B5509788C41048FFB929A20478 08CD72FD39B48B373A06B5C1E2F598932CB67904D09E308E865DE2287C59E81A89269AA8 E3CD42DF1B9A6C4EE720633A89FED9A223D6BDF0BB7011FBEA53A598D346F0A5E5088730 6FC0B775BFF51C9B9709F6559DCE818DB0387CB1FDF1BCD362021729ABA54FA841D01CBE 4EB0AFA6865484512EA20F313D8114302D27E45AE2219CBAD63021761435B33AF7F9A48A A57596E522AE4D72819A9AEC24A434CA5AF1422EF54B23DD8A0978AEE6624287290A5909 73E89072A89C413DF1995D6A04FA2CAF83BAD873235D0262C2AF1B3988849DBA20DB2D2B 6E074CD3A1C290D16C48C3ED27EA3794F2804BE6F9F54A666818EACD70DC1F17EFA6D427 01D257B0A3D7BE3C94C4EA18E33488E2C6D68BE494FE3AC2D5CC090DF0737B739091FBDB C803D4AAF3967A61763FBFA06BC8B43F7A07DBE22D49851F50FD79A272D1D8FEBD3FA1C4 70831DF90D13A1CD248524835391D94B59AAC7A29BCB8E7E7C4E1E1C72157393BDE9073F CB261D4B8274D6BCD85EC36CDBD427296740F0DD9B42A45B9A0DBC2F828B1719154B7B3C F589DAC95230D5BEC74D1AE555FD7E2E56C02975FE8C3D4DE06E28698BF064CC7684701F 5383222EFDC45F1F61E256444623D974E39276E554372A41D955B9721C5AF67F17420DD0 CF9801EAB9743C390FD8E3399613E9AC069EF9DD9577A716BEC1CAC0993D591C44693765 A9ABCA9E170002C89C6B07A0C0CB05F0D583ABA6A051581DCCD62BE1CCE0C18078D28296 358F384B0B19482F0D176608A53D4DAC33656B6C9D4BA8FFB87507AA317E7173ACB98941 AF355E2492DD4A1E21BD4F200447F8C61249FBE90037A1AE84E6DAE234F7DE51BE2CDC42 115FA2B2C352A05BF56F78EFF3D26AD7E537000CD9C3EE7FEA9E43C8203C9B1C3EBBB8B0 BB6AA46F187428B48E05407A2CCA1854999DEB59A4EAE082877415A839E824ECB7E0A5E1 058C63C55241E2055DAC14F2C3C4645962D049CE6EEE29E911653B87951649B1C200420E 564752E7E801530BEC8A5F709C77B04C6E6D78DAAE9EFC7EB38CD92F01803DDB2368431C 34DFF5F980DC0064F44AE3E8D9D1AA6D4F265157174693E4EF5EA030E9E956C8FE085053 AC08311902A4080924721810F5081BC1D5CCFDE38BEC985551C19E4EE43A15561D268279 26B59E1C2E1C6072719BA2D90CA55B8127E0592D9E0CCA5015CBA1C6DB4E3468FA486D3D 3B2D8F8E0B9E32929320D07646B8F77A2863D91EE8C83D610FC57CC4149F7E9E48EBBE3D 039353715F12A25819A17721B1CE39C24B9C85AE2B61F6EA60CF3FCD502C8322940A3D66 964B032D503047EC9256728879083732F09A82EF52148CED087F9F5D24660648B1BFE4A7 E169326F50E6CFCACA33D4566C13AC6B2B51D6C2D66C7B80C87E0637D7846EDEC00F963B 5B08DE5DF884480A3E19DD134D42064AE068118F33BA119F1955EE297273C75729B2243B C3100C93C543BC62CF66751A7E988C58FE0CC1CD91B41DDA318827F2E84A63A2F1BB8001 9FF6E4B3FA819B718D84CAA423643D22F26284CD814526F0574FAEE75A59BD65C91D3384 5B3418B8C5B46DE7EFC66DAFFB9ED72DD8062C5D92C47A7671F40AA3ED14E74D205CAC5B CA2C7305ADF891E50BE816E58CDA64F7091EAC70DF24D0942C73D88B11118B829EE8F52A 6E331C7191FD52D86C62F8F55426725B82E309017094C0B4AD61C978036089DB5A3BCCEA D202AABA7148356581C1E0366E5678B697302B4FE84FE09D73ED2748BAC9F96C25092791 2B5EFCE94FF40C5E0482D4D58F4435DC0F94411F8002009EBA16443FE2F8C6309DE06269 01EB1DA1A559396BC20FE557F0B5D5D039A77BA465940EA06D247D952A37947489DD1E55 ED7508D0ECAA193EC658935DA1C9A7DF298B8C25F69BEFD26A090F5A01DB0A16AE40063A 26F98E4188839F4C963B51A5F09835E856D260C0537F0AE87A4A311BA0634EE7C3D73E15 C5D61346282C90E715C33109ABFF158EEBAA3AC9F1C3A388C523E980AF81DC9B854E2B65 BE0CC92B32A2BCC3AD50F733F3736F1D1C9B5344A3E0B453AE556B21E3C15EA5C36EF4BB 8EBAC45B08457D637D68E7E4C2D8F6064967462431BA013794BEB297555A2CDB134CF37A EDD74928DF5F627FCC6A27AB2B80C347ED8DC866FAF4CCC70AABDA4107910BC6E2DE0E76 D830B973DC3027F3D3F30E84894A51FCD748448EAD4C39AFBEC33EF191A153A80372A2EB DE511C7B26BD7B2E1906B1A082967BDEA86C3F2DC5F86ABB3F22DC1DBEF4443133A6E3F3 2A71FDE50864F60D75A68B2A20B67F0FD292DEC25B82CE60B9AD6307FBC9C6562B28C805 41F6FD6A1E175EB1A0A30387A1F269B4E2A89E801988FAE8AC31B6C56E29AEF4772BA258 DFBB597903CE404C701B86732274ADA2645E126CE941ACEB16504339FD21FA1BFC659901 8BD98A0CA387C6038EB74029846C19C5026231039F473634DC94790D94134205F3475241 8821C43AC33167B83971E3268925E472C0C140F14D9CB64E9EBF4F32251A3F4C5229CBBC 8A2BEB68628389D946B7530C712CEDFD5161DFDBBDE8AD32D17E68A14851B9FD104BBC74 AEB0503280C30FE8AE29B75F8487FF319C9709E2816BFD8BA720D98CA496473B537BAC60 C53A372D200942078055F2B0EDFB61D589444BA4429FE65C5EE7ECB86C27074E726B29E8 B5B558CBA7832670E64882C88512C1729006684DB8279AEDC5920F7451AF689A54B5E5DC 28AE67125E78DB68FD78A405EECF465D348042B1155E25C252A020EAD6DF61AE5AD8B1FD 1B6E0290AF2952440BC8046A11EFD4D55360B3E53DDB2FDCF47759C00ACBC9857EDC1AB4 4A22A16BAB656E3C0814500677F52C74F502A800D4338A3D9785BDDF5A185CCC81DE1C2D 4250837E88022BF0B2980CACAB6DDE8725D5F60129B2AC743FD25AFE71061B783EF60EF0 A96F14793F7C7F32F2CF5D2E209CE056FA99FA341B32EAF83AA95B35867FB36948778E27 7542483E90721793F14D582995B4D6CC3C0131F1C83D0301C8DACCA20F58EE56CF8BEE9A 197793E8E26E815E8B0FEC2DDDF3FAFD4666CA78940FDD37A55C9AA8ABE41FB6B511002A 21F82E919151E2AC50294C91E426F1222D54ED16264D2A05B59C47B316998400464B34E9 5E7223A73CAEB3D99C951DDACA0CA349593FF8037C63CB832358AA897EFE277F0E7150DF EE3A6CB59380B64A7C9ADE2C944C7A6A9ABAA408D2D2EFC6374928E0B855DFD05E00AA70 9B114A5368DF2F82691070F93E8DF77B2F3BCE064A0E572C6AC62D57704D8D52A16B6A97 BA73851225993D11D9B0D79E3CCB49511C9634B449A26861C436625DA5C92F19A12F02D5 1D9759F95FC87371F912D3A7BBDD86484FA504A1E3543C911B2415A04657A2A7679A3EF6 4A87B8647A88D85D67B9FBA354DD72D32CE42673277D0FF98F47694D6B196BB621774C67 BBBA980B29CB54CB1E391DA330C21AA0CC0BD6C0D0A99C8FCC6C0AADFE10EF149E3DB808 12C74C825A76F574077E8D22E2452E8D86C86A84B66651A1943D227189ECEEE76123FA1D BD275E33FD5121D3770B4F1D90A7638EC522B27B1E08375B6AF1CF7F4884CCD047540617 966AE3466DF9E37D1D8B03AF068C1348D702CCC94937C26F6519432834DE1AB58C593A40 9D27CCB8C5C180FC4F09C77E90A5D7AB2B3AD15B7D7AC07E6E4D4DE70CA609B3E51158BA 5D160CD8CCB30F1C4039923FE5A9855751931826A17BE5990C40E5E71B0E4BBC4E78DB81 12508E900EA3EE9AB5D27C0E93EBEB111813A3F38C34401AB61720744C57F68BE59B9DB8 8A3F360B917CA402626DCBF4170AD8B7DB9E958742127BC1913B87474915DB0E4A0A6DD6 DB43C220526E4C4BA2D01BDB2C88A04E958675A14F00B1C10F7FE5E7CA9D8136B9328D77 3BC9023C12CD4BA254AB8B19D10F9E37064615AB2F8C6C3088405DF8E37D687993587B84 3A3D683168D90D57459B9D50CCC120238086DD9E1352BA6D0CAC717E2033483F797F825C 962F00293149121265F6D6D55387C03EED16B452407559D0923B0690A4CDC5F14AB89E59 1DF991254CA8C5BB1A2A842CCCA64FFC11FBDECAEEA7199A9F40C08DB25F670A4C4739CC 085F4CAB538113D468293DB7D51E3F4DD03F631DD22C5F90EF1942CBDC316AAAE9690739 578C0A7A845DDDB4E85C6F030115DA9172BDEC2563369B1B69E6B9DB3E90513F64CAA46F B4C3A6DD0962A4B4C6EBBC843D39E02F6E71B3A2B4B859C40187D7541D16189D4A2CEA2E 9BD60EC04AF01E23B23B151FB31D32ED20341CD799537221295E5127C4AD1C93C90B5DED F5AE841BD62524369DBFBF6D9EF0F0E32272CCDF2789B659FE59440E1D04C8FC76500A55 90D10A34BCACD3A608ACA65663A221FAE8985AF8BE3D4DECC6117C92E333A2817EC3C87F 1C9C48DC40B016FC9CEA11B7809D8E52B62BC341084E1B183FF90CE8A795D92CAE0FCAE5 835FD6059941BF7E6A0A8AFB6CD776AADC1052AF9DC74B6FC5431C841A136E50F23A13BF 788DD2FFBF8295B3162C2641F75819F606CB413BFCA10317DC6896342DE91542B43D8C70 990C4446DBDB9B4722ED331F0E388294318DA3C4389C8670E182D4CCAEB0A37C25D764B3 B68A2EE8F8BF7595FEE6C6109E6D709951694A91E60CB8372D5D4D258715C2B428A75342 F89E4878EA528F7D51A34A00A9C9C6E079DEAA4B3E6FEAEE69FCB7F5E1778E11889A0340 F28E1056F7D7B8765744FD317D96A226387B722D1DE4F6C420BAF351D076C2319D90D4FA 69BBD1FFF227F99B6B44DD5A41B94D28CD15D41BED41FDA90A62FC2905CEC058E5CA95CD C97885CE5014A81F7D446F49D9A7744E2854DFC8073C917DC6094DCD5CC008763BE1267F 05EA7004C03E22363ADB3C7CF1AA913CAFF27B82B94EE3A123C0D5626EAACC1A33E907D6 8911A05AEF1746D03BC93FED60C90214BC4F4DC29CEB8E51A0437D81014D7DD6A99BBE9C 44180F904314FA74927E0096063133898C9279CF9E6EC8F5F683D8D9B2917ECDA1E5824B F342DD554F17AD8534FED6170775B56896E5BB41A8E9433DB5EA0709A9DE20F2DB976D5D 3D70B5EEBEAC623D0A2F5F6B77D68CE960B8D969B2680DC15F09C9D4E2B2353259F381BA 49329FCF4C7887BDE64B5601555D4EC45E6A4C20417032B06900FFFE467466DE7B93DB98 39391D713F3A00A368720438DFF88C5EC53F4A456962403F050AE7019A195BF7E68ADE4A FAE577405B0DC7D7DAFEF7B4BE0F2C4937784A2AE185DA50B84771485E26998FBA2FBA8F 21803B5BFFDD8E8AE9A68008D4E3EFBD3B78926BD103A08E99CE76AEEECF99A74AAF8175 0197A5020E457BCCD68C3B48A3488AAF17BC53021DF715E09581B3BB1BF95F01E123F007 C442FC15A16CE2DAD3B446E42DE968C769754A48D9C84EB4B05BFD80CDF441BB5CDF9DF4 1E8F2957A123B09BC290456A6D372F7EFEF3D8F5CA0948FC9E5DF2E0072176C9D8D7D54F 247C20BBB90B79A821F29A739FEFF6B977FD3047882121454667FB0DFDFDD605E3CFDB88 5A5F298BA58D06F6F1B3DA01717A38CF9C88CB71E4218214AE649E3CC9EB0D894B12957E F672F7C4DDFACF6E79E836121041D758A5933944496EB6AD5773897B0D40B8AA6EE3203B DAC4A4104892BC8E2EB726AD726157A419324EC28F66AAB2903D44D3E79DB1C1C7770E8A C2E1A984F673E489D556FC6AA71C991AACBC29CE49D2F345B73AE73C59BFBB0A738210E9 0A5633E359094E22FD2EF33F963C7696455C31627BB989E57DE5428FCD4C9A323769828C 5E45ABA303CAC3FAB63F9D106830F34096621BFDA0D6808616B3094F23D9412FABCC16E2 EDDB1BD9A4EB34EE3FD13A19A5E9DC3B41C9C50AC5915C4E1CD1A0301029756E82266DB8 300A2A240AFE319573DB3B416E68F3DF1A8A594E1362FAB73D1D4526380A6F456E378E7C BCD888036B815F0999F10D794F5CFE7903F8A6887E1C63445EC5D739DA2B40EC3107EBAE A93C97FCC0EB4BEF6A8CD34608B74A7EA4ED79919B646B2DC9179A11413AC2F3DBA88965 2FCB11BA498FB209B5939C6B46C4E51754C25A8892238C969585DCEB6E67BFD43285807E 4B977974B8C8E4355DAC3D67CDDCDB3639F83567F5C6FD5F676DD05F584CCE1CBE802755 17680EFD0BCD4E4FCC34FD09A1E6772118600347F3C919B385B2802F30284AF66E8D9E78 7580DC4F1AC3AFF9604F500A510B8368F9415800E2CC539CC523389B601E52510914CA4E 725F39D9AE60286EDFC0E380F09A893535263E55905AC0C0FC03E5100FAB8152FBD2FAE3 B8FEFE26E36FFBFCD87641059B18E730171D0145650E40DE983CAF4351425504A5B703F0 EF9A788AEE403CF0257CE934C791C6D43A6666C3ED9D7A1CF473180B93800E0FE0984BD6 6DE437203C8BF9E638EA9A6AA98A44C3D456345DB6B1CF082373391468E1D295EF132CCE CD18B733A1C7B5D7ED593446435B9480670CB40C2F547A146EA020F07485FE4DB5B47A24 F0F00BCAFAFD23925D97CA1630C3AE7AD81706958EB5A7CB3C8BC002F8F04498342A81D5 28C7244F8EEE639F4F4291E60A7E75075F188A9FF4DACA0F5E6D7C977735371F473ABAC6 4EA0E8BC048D0C08743FAB28E1FF07C913CE0EFA7FA8708F51553B94414CC3664836BF13 1233449C38742DBDEC9BCA3763F99C29C798D5E16958A97D1D4D5254FDAE0CCC88653E14 135AD423FF686B98A25EEB00827139CA5E3BB7DF26AA5A3354D1AFF4F86CC0FA376FF6A5 F2F609613C9D7962A85B739733FE3CE09133031040FDF6A755903B84ED901EB9321FFE3C 25CFC3E853E2FEACD70A611617EA9DD86E0BB27F794CB0F19A13B94A73F9D3AED498CC04 2600CD12CE5F31B002FC2F0FAAC6F52AD8C5CA1128C449D4262C1D6C7AA8AB01056BD182 A0A853BDB380CFB6C93E99E245D779A527A9557D104172697B0B22A9EC8E72549E4C1508 3CD429518FB4643E2AA1E3A0E5CF0D97AD07E5F48DDCD1A40C61397E2A8D0EBAC42E7453 B2B508104F4960E33A1C0A54466E7A416D81930D5CF9FF8458D8212200823DC358776E8E 129E3D84281BA026D2E3528D29368CFC666F313A4481110C7FECF24ABD025C2BD0CFDE29 168662E6081226BAF67E8FBAA923E4AA78439D4798B31C7C67DF8B7CDC348C76A39D3AF2 A6B51D3358CDA4EFB34248C847F23B23DBB0DDF40425704A8B700125A9FD66BDCEB660E3 D6D2F864383979118F6F0F9B9770ABF579FC9114C7A13C77BFF0D608B754DF0441A20045 EFE3C6028389D80D1F1E577B02267021BBCF1BC8078E83011B94BE84791169C31A1E94CD E4404778CB75BACF797C651609B6C8716ED9D1506BA380AD1DE7960468D042A5D3844C58 4444C569F4D3A3686B8995962F735510DA34DB63BBED2255704CE4AFE26892D9DBCC35FA 8247379C476F2C3D847872768F805CC9DA504A32D59E1F06E55738AA151D46B9A7BC4D4A FB3513A119598E5DBCFF1DE926261937BE86840D726CEB53AF77024EC1643F250273011D 36C576D022CC238F489B851C44EAFF49757E51204181EB3AFD4B7D48BA0A12EF241FA7E9 686356151B1005288457479EB4EBAE4B07B26DE53EE63CD5BAC3F7CAEBE2E0E33E773062 467549AAF0FF626A3D3B715FCCA8ACE79D56739C4ACA3C0980C29EC6A194EA152B4852EB 25C98058B68C3F7F42F3FF44D1D84DC1D1A28D3BF0F7C8CC9F31CD6029436E69282F9645 F31445C2D88ADB4B5ED1E5193B7EE73F6A5E58B08897A8B0190114DEE3C5DB243894E63D 42D85940A98AB8576DB127F722FDC6AFE092CA10898C7E00299807609D0267D4FE2DC6E2 A06B189781B7CEB445EA8862A70F79361B6CE6DA8722184CF4BA927C57EC0AABA807393E C8F0DC2288C232B58CA359E89750A1EE6243682DED0A7F51F473E57642D42AC64B2DE8BA 9654A3EA905A62354FF0B7F789BBBD47451567FC8D0C1422E65B19CE72D06D621FAC493C D40726B6523B5FBE55C04808DBBD3CEA9D7B01F32707FA6CDE7B7AA7EABB3DD3558B0155 40DD8C1D3DBFCBCD0F9B244A1DBB4C6F2354E8D8BD0852E929C0A805593A93A1AB1F6452 8E9303906019158AA8DC62990B0DEB97B14C107848B24B4384F6B5466956202827CB6171 15A6B6B6579A34FFD7DF8EE667DBDB8B6ADD8F981CC6C8AFC4B1580C06A9B669B7437E43 C6E8AF4D311C653E0F0A5022B3FF6BEDDF2479ABFCB4F8FB445E39479C698FA800F12E67 F9780DC7FFFB81CCA0025E65563841992729A4E2A66056BB18F8C1EB47FA379DF92E8FF1 3DFE6F68386C3ECFDBB65930C6A43A0624948D853FE97EC69550A5996AAB5A4C93507BE4 6BBE4E984B3A890B680625144E6D86E529FFD6558B1113DE9984970AD500F5B2958CB09A 92E5E1BEE057017FD53A518B3704FC0C75C059C315D7CDA7317AA894812593C9B8F05FD6 ABC7ADFA4851F4870E00DFF5516C8109B2F531E37057F65F2494616EB8A07837114B98BF 0ECB34832B5626A472A947B002B778E72CCA68AB836781D52F5E87873A785A0E51DC850A F358F62FB6A189F9D22027F4191D7947DD3A94619358290BED9CE0C633094782D54B58A0 7DE9460199A235727287CEA63D1F153A6345933CCF06E9B246BC00AAF8FD8134EF128AFA 4FF13342C94E218545078237F27434CA98FFC4637461362272248FC786F7654AFE203A51 C96716A978BEB6131101EB88E85CA5AB262C96D74B0519EDA333D8394D3C4E91FA354D81 BA708AAA1204C5334116B78BB4D7B8EDD23555F8F68A123FF1818C7E44B0B64C63015E0F AFEB9F5C4EE0F9022AFA45D2E3048D991F491FAF8B8E0DD54B86E7FC3B10239FC8BE780E E8DABF3A994A0C28E37582B3BFFBD3B5F17B1DB5A15822F03F2A0876AAAB9306E26B6C91 334E1B76F2E7208C0D5D60932EE8A740F14BE8F6CDFFFAD23EE370E213DABBBDF2088DE0 FC21D7709E100E1A5D6E674339753E18014C177D5DB5743529BEFF00090C1F02F13B793D E6C64FBBFBCD5E8D73D0DFA822301501083C7FAD96E1B3B2AF09D0EC726C7DA21EF01BB4 36B28AA03F89D253D993C6FE0B855664E2DA3631AB809AE0F143342CD2AAC414F35F8D15 4CA4F74D75A13B98433C1B9AB09BBC1F6E03877A50A78A36A6467C87823288F3A5CBA53A 4892DF35DC39FB17F6A960726AF2EF874D51936F33CFC92685EBD61640CA31F7442DAAE3 0F2384E669556D9C792B5D1ED12B5844B227296BBA34A4CD7944CD4EF285588668472544 E35EC65C65DDF89F42B9AD1FAF2BBD9F6DC6E186A641A0005EFD657062B91A80905C2004 80F771185E698FB03E4E52D940ACC190DEB19EA789D4609065C772B8F4ED4551FC576B73 D60B205EF5B97D35D18CBB3674E14B4E3EC069FAABF24B5CA6064FA5F9CC0A96964174E8 1BE14B1318F917C60E07E53494BE2E51CB63C00A9DDDDF0429B5B4C18C12CA43ECDE5789 7ADDFD1139CDD295F039EF1A4B803269D9753E87C022099E031D3ED87FF04AE73349BE9D 84A35C84F99A0FAAA1A80ED930027B45D287D039622910F250D9866C85F500628BE99DDA 98CDF88FED21D3396542C75F2EE1DED7E9032C1AEF97935F335934164C6F6E2F15E97C87 47F75B4FDD478A9FBE4EB903C41383F5F3DE2DC36D50EB43545E1096B1247C545D6FB558 E1293BF7B5E164B2DC2ACF448B38E95A553F4FF3EE573EAC1A85D6F98F1AD425A51C14A8 D861368B8F081FF9C28D387E31A317971F464F862756381E56DA26E518400A2E175F1C57 036B28DD8A091C09AA8543856DC7EDAC27CE2B3FB1DECD8702769B683CD357D0FC6B120D EE106FFDD0C899C222B67FF20279ECFDE314BC8E0B6EE530BFBCAB083263C5332ED10AC4 CF5257219F2329A47514753939E1D070B56B4AF547BB8ECD7AF525AAFCBBDB055BF6FEC8 AD0ABA2D09557AA46F9DDAA41E5D996C6E76315B23FFBAAF2247BE7B9D68F14997FF9857 9E09AA9C9C1C55F2BA77AC9E2467CCFA151C9F38AE9A61C6A3EF88C4658C70437F24D2C5 90B1CD55D8AD4B664546FAFE6C913BD4249FCE7BA3D4F0F90875EE28A412A1FA7B61FF00 F7FEE2D0A021CC10076B1F809CA65B51DBE45E2A9AADF7DAD3F365001148221A0E40FA8C 5879E2EE143C477DB6D0C10D7C37D8E696FEA1F974911468AF49D1E4441A0AD14406369E C9FC0D82E3C7A77676454A011443EC590213E9822D6AFB693889B978ED3E978856A1B72F 4F4BE3C65CD6D6CC0EDB1F61F1DD08DB0CB8F3E8D47E503576EA706AE4BD40D9C472236B 12555A43414ACEF8EBB42EC4F3BF25F4C3B0EED296D9D7F855E0F1F2359CE50B845606D8 5CD0B48835AF0D965A0FDAE94BBFE4D3B33344F8418759C8B4628F313DE61001264B96A3 443D858030B3833577077A0A11033AD650D94AF4FA6A6FB2EB8184E542990F2B5FFBF27F A0FF843FAFBE041E8AE387849227F95C66680CBDF397BCE20CFC263FEFF6B7E76FA5EF4E D2D31B691165569ECC2E2F788D59F060B5ADC1DB791EEB735A1A3445155A01C94E827E57 F5A57584C67A0DEF86BA92635F600BE98423DBEB56E446678B2E7A2F78DE222F6C42FC3D 764C20BA741F57FFFD1E22AD0ECC435104AD4E631D6C1BE95734ABF49BF1D27BEFFAE002 759A2C52CD3C30ECE1A6E995FF9115465485526095BEA84D9459E8CFB39DF0C693B89F2B C4F1790B81F84D718183039E068B8792280BFDC73E01ED7002F9A799EA890898664BC643 A1E0EC1669772CCEF246F341C7E867989AA411CAA22901E8817B1A85CD60772059740A47 B6888C7A69C7EB8925F63767694BB1C7DCCA5C9F6BC48A4FBC5B8DFA0131BC89B38DAAFA BEC9181D5777EEA8E43593A6634876976E72F4E8EC3767E030C632FCCDFA9A6E6EB90E59 30FEEA09D86377F64E2A6A539E69A37E11D3D44F850623AC5175B5E2BE05787A512C2EA3 75B34CC9ACD8F21679CDEFBAEB8984065E2C8C6115C30F165197946A19E5C7B7BFAD5EA4 D048B7EA06C714486EEAC547D0D3AB4EA7498DC0692349C99F8EC7C99827A482A45B8851 202DF48160A03E60E07F87D533A925BD92389FC37747FCAEE024FF8B57B4F911E729A6FC CFEAC67623349ADEC97C5861A3F00955F3B5F6CFAEE30E005E777806099A902AE17F751A 90099A4DAB23C36E606244A7C238DCFC27DA79DDE80E03FA2D360B80D62CCF0B4083CE5F 03BA275E33EFF90B1B4195F3AE008AC2A15591D6A8F682E6BB66BB48A25816C63EE594C7 88F329C30B8656EE82FE691BC7780DF72E247288701E754C7062075972B3C90AC70B7627 2C1D12A5963EBCAFAC2F46D9A5479B9C018B0F10882811E892690CA42382F3E81B9090CF 23CD3480724F95D4D5188F49CE59565BAEC1A18E0457BC44DB9867B2A1A1F7BF13E2B80F 8E590FE766920714D2228A34BB44F03A4406C01FC8AD2A3D218F8F82B8A3BC026CF5AAA5 079F57570449498552A5962BF0A22BE04B8F5E92C999F47C71ED322699F6B95A2713CB08 C86F7E73C998C68FB3334814C8A2EC870C2CC9CC7CBDA3EA5FF13C2CECADD7BC6063A946 78999BA70A7AA8065DCFF15CE3BBD6B3B90E59CDC15FB50D8452F4E7053BBF2474A93690 0F76C70173C58B9382EB960FFB6B386EC6C20952368A62CF8FA6826AD35F781A168CA6C1 5F037583A43DD17BA25AB894750A1AB420C706C6C5183E89A7B5B3712070EB8CFB88F01F DB13DC3CE7CAA799A8FA809CF94AFA23820B8580983D72826A631C7304D0A83A30B03BC1 DB36E7D52BE536C25F231145B69A02D1859C5B5F5940EF2F7167F40155928E5DB7C2119F A9A26A1602DB21A73395BCA83E022AFE618C6F0A949B3FF93BDDBC8204A3E5D33E97B1D4 0CBBA2FACE5E3D3C6E267745C19C158481B431F3B299E921635702DFB1571CE0A4BBA2C6 9BAD438DE07E5AF9C97645B0AD013F9BCDC849346720BD0AE17F6CA728EA56E6A42C77C9 966103A84B0E7FFD03252C2839C5644A084709CEED48EA826ADBC9C4130671C78787DEC4 57D3F028B6F1AD563FC33C704E37C707F169A8E0F5C48CC895D657243297C027CE51D6C6 C26F4B1DABBD0AA2393B61C539ACD6743EF4BB4A4FDC0E08DB4F8C3C36914A871C68445F CF856DBF900704EB6A5B3ED61C826C1CD7DE34DD1F1AA63077AF20C68016EE58456E7E0D 6187F86F502FDDCAF93FAD3BCFA2B6177550E0B85BD8AE1BB021DD42BD3CE2319DE1AC1C 12FB349451547DEFEB8915CDBA41EF653309ED617B96E7819E37600F3434D84383B48B7F ABD9CAC3A5A5F644235DD9C4712683980A9DF2A26695261AB0DEB0F41517A256B92B6409 1D3187C8F49C248826F2DC843343EBE78D650557E7BD6A0F67D685801DD09D01C8BF7E6E 9FFA69F0052E7ECC1F043840B8BB2E6D3B82A89AEDAF5143DEA1E19BC77DE16DEFBBE0FD E1AF093CC57F6DC3791E2FE62B0384F5FAAF8572A2137AD933F9F599C1CF02D117D50328 4BCDC3393A774D07CDF0C04C4D17D08F8E63CD37B3ED9960F3EB97468BB0EAA157544712 751209C10548F43E783387512FDA1CEF66217D4B28C7406091430295ABB47C9406523EFD BCDD7E40F62BBAB7FDB81DBBBAB90A0163C3D204EAB262190B225E517CE6246CE2FBB04C 34D502D4854D6A7BF6E525B3F8B3E30495B9DD5A281634C97F34BFBC195DD75CD5A82D20 DEF4411A75FFE98307D33A6281A8FE4AE0310820A175FC2DD15C4D9B3F0A31C29958444D 7D43C1E729041CF01112306DDD852B5B05174F0C2DB6B8537DB31CD863E24C524722BE95 AE3C9BEE001F620D6002D3000ECC7CD3AD92C1E90A0D35DD1CCDB1309EE0EE13067851D8 6B78BF91B0C9B2427C932D5B7DD5918C4949F3104CF0FD50306DBD1D860A51CA31B351CD 5761138B3AE5AC13C2E13CCF0A2A94A6520207F8F6EDE0410F5BB002756A5824F94CD151 CD192AB4C860B1F24A3589AB5B8F2D89BF6779B5A76D44AEAFE2F18C38EFC22917615275 385DD6653438424B6DBB1295665EA4FB54FFA7D67048089836F3203E8B174DFDCFFF1330 5D1559624F9F09AA2F3D6804C9D89077E05DA2B69A6C287F52705E1378DB462693B4BE39 D45170E4020E18A6257B9A5890EBE7B2DF3E2BB6FC17C3BABAF674CA78878D98A63ACF05 7376EB5F5E030B496C4D5A4D7520FB95D2A54E15DA0EB9F55FF3ADC0E268345DFB1D117F E9C33F5B88AC1314387B9CB39E4F0E07439F90EEC46CC34F735F07DC6FB5B453FAC6A37A 1E5D81CB28D7EB87A6531EDC3811C88DC0648012FBF2DB48FF4B196B92AD72B2DEDD4D53 F77C77DD732211118AFAFCC69515B9F6B0465D83B95DA1DC5DFD278932FFB7E3129729FA 6F527B8485A3CE3B7DE83F76E39959B3BB994080732D6E7D1073998126D16B2998C561FD 15B6273D019CCDE176D8DFFAEB342B4076D18CAB3FD9D90AB6DC7339E70918ED8448BDE0 DDA8DEE1FD8649C91A1D9EF4CB0F26A8743E4B8783B5F211A99C683420765603FAF24199 554085A0D2C4129AE9A9BFEA1D98EDBC9355CBF5E1A4762A2BE6517AC5780E0F9E06741C 346A0A6BFD92388CE00A3BBF1D5B90BC8436C0912347116F5CBEE1CF72DB0EF3CDE23BE6 EF80F965D48694412A2C06A6674C3FD9D57E36199C8AC2A00CAAF3FD49951DD02A62CDC8 F62D021BAE6516D0D36CC9718B958668BC20264B6DB6D26FA062412CEDDD4ECE78FF998C 24B1D541611587D154D6E6BB46D0603145C58D9180D0C3253AD0F02F4500F1A842C242FA D6D003A59EECB6DF78FC2446F1837C20E1B6C6015E0240A70FF1C7C50B02374F9181A98F 0A6A92BA2268AFC3C2E79B54AC1581F29B7489B40EEC6666C2D68DA70B4F64A18C2AF090 605006E8E9120D2D2773E609AC7483E32C732376CB471375EB15D347E5E8657AC6C13FD5 B95D2C7C6B86F7AF02F371B04226CF35B799FC9ABEC9C697F3FC5F7747B183EAA1905045 46AD054989B468018A535EB0E79A76376C4C1D31881CF4FC74E1DBDDAE71D78FC23FE848 54C8C6F6ED06BE53408D6BEB766A2F7348A9B445A340AB0614782112436F09CC32C71A01 D82A578904E31990163E29D6D66A958AB2E1A16CF3552195B7E37C7C85542B7CE64573ED 8B70F1F256FAD89718A95A14570117A8BAA3FBC1C4235A802D49B87F5C9C17E7FDF86581 EBB1899D595B2DDA62366D0704A9068A4ACC5426F42E9C2D674BA8A293B0E0D5E2A7E562 74B5A6412EF74F734EAC266FBBD212D509D1B4D2127801443EEF6758AF816CE87B086FEB 3BC32B509DF4E1EC1C77EA8EE288ABE4B2029D5F9B7CE139C5E3C71D343AB4B9E787E43F C0F82A0A74AE084FBC0A29C70A7E97283FB90E19A900E11AD517C84E2D39BF199896FB38 AB44156B2718395AD54E9162501B6C3AB5FD621C6BDC9CA3051DBD92E0AA423728F451A2 685CA292590CD2678782A622035D84EF54DB26FBBAEF29FA21C948A606C0692DC5F1B198 0C4C4918DC95D8F23ADF68D4088A165FB920327A9BB4BBCA3DDB2E013B79F482E3816A27 52417C63DC5CBF741C80C77AC606CEB843F1E7676EEE4A98F456EAA4FE8447AC2E027615 A2A7FCCC9FD6ABCE36C197AEFA45018A5DBC69A00A7F7831BF836B49EF44BCB126CD048F 5B65CD39AF71DB770272A0129E011AA6AA392D0D118E65A10C5E814029C7BD6BAA21D9EC 7F059D644FB1DCC83BE6FECE4BDC97EB7C15EA5149B8F704624A02CC3793A309F531B3E3 1ACD7A914D7791E7B1307EA81BDB5B672B09AA252C1A0F8C1ADE447ACEE48126871B60BB 5AEF261B9B91961EDDF5F4425433EA05D0A1545129869E618A16F6BC64A3E30DD40490CB C3753B410D251D4A4B1CF3475CD8205718FAF1882709C77DBDFA9023AE448ADE85A320D1 3D83003201D177D669D8AE83EE0566DADCB4B581978A299279029CDFF3E1D5D71FD39FFC AAA3F43F24D74C70567256F5CB5D10B45680526C21CCD2EC1974C5E426D3AA97334AB417 3D4BEFB68D5AC6C8E22C3E969C99AAC06C67534FA95CE4B80A929FE95B2ADA980FA693AB 59D4BB2087C72123C8E89F7DAE614F71198F589974AFC678C7E40419104A4BB7E612D001 1863271F4F99B55E5AD5E6066A22D037D591339C1CA31A961904FA850BCCEC60CCA56E48 4518BB137FDE9070F795AF1CAF7EA06D9D179FB089E38979E72F2EBB6AF8CF019613ACFC C26E2F378AE397E7D360212665FC74801845C035BA0131D07BFE7212C06C5D36BE85EB3B FE0E401948A2B0A8C653D4D24A6652DBD2D85B421F4AB3F5E6579AAA8456D0D681828062 4AE9C2DE670F3501CAA1F60033E58CE4200E495541C6C1B816F4D1BE1DCACFB7877D5385 F0B0A1DE89BFAB2E44E860A8ED3EC935F7E98BA72297D0D22EEE6B9B311D648AAEBDF294 EB66A2C057BB51289E05527B2F178BEC01B8BDC543CC7FEC2A1163C8E51D85823197300A 55699CC4E7772086BFBCE6EA26AC061E76B96E872BDB5125DC9CA705B61E4214E9AACBA4 ACCD52C4D26E3F92712D29A2A9297F4C228F069D161F570C4827B0C272FCE0FC58AD4B5F 89405541C776A59671F84892AEEFF1119FE5075713837E854444B0D72615297874BE54C7 A45CC1A05AD69B15DB6539F68AB0F1E182C240CAABC424E3E543B792DDDEF118FC828186 A7E62F6331890C010E7BA836F95571AFD823831823D2DAD0E10942DA9EA5E572F97FF032 844ED2427A6B66C3A96CC26BB975CF0047C14EFABDD8A29A49C6B23E3C118DF93EA04B7D D38DF132444F1BC33934275C0C0751018A97074E13CE5D4E21C8A1B80D8BB48BA2FC9EB7 8D5FE8C1996DF2D7BC644239395B530D16F85F4F21C882306D5CBCA1F619C0223A748B2D 7573047D6435C377EB15D906BB0B015499CBDE8E225A736BFCAF57F892B2AB43E499E9EE CDB7C2D66CC4FDB1B98E145E445D318E8170C4F3A1F754210923AB5ADA5177C2ED20AF11 CE60D0CA72DE1AB124B5091BB2FB74C469BF03B5E654C5A6E8113FBB466322850C0E566E 62AFA154386F0EB55BE4999C53A292D7827F6D885829AF8167C2AD80C1981838AE73B3DB 821457333A1774D59BB0877A6DBF5B92E208FB93F80BE2E0305C856B959061E79533DB71 32CF2458492ADD460EA0B50A0AADDF5B47DF0C4AD78349083480DE9D907052F0B5439C7E A77FB1474CE21E48EC4ACD0E6DDA1829AED4E549E8DB3992E7A9E620FF1D6A7E432425B8 D84469A1F3AE970BA5676AAD3B9E585C755FA1E066A15371AB2C8359C2FE52A653D6D0F2 2C306A8C02EB58374FF5DDE39A3F53D2B6D9909DB16D19ECCD408DFF5DB6A05FABAECAFB 2128B6B40C98A2E6E482009E70CDEEACD0EACE30365CE1F206414CBA767026B7C39FC72A E53009700F3868FC0637C6776CA439224CDA20B8510824021979D5E51CA4AE90B479E623 6741B490CA9F1AB64C5AB7819751A621F7C820708D255AD8C094CCAC7C57D0FF1B1CA4C4 C386607E85CC55EAF02E39F305EA5CEBAA52BCF79932E4E86737253E5FA03C34855D8715 DEBC25B8F3FC65DE1A8BE2A437769D1D1606202F1E092492EFB1A9F6568CA47B686B8615 51FB8A8C7EF062CD71B9D78E300325CE01421C1B78073C3710B1835E97EB458ABF28730F A2ACA44FD212C50FFB65D0840AAC8395A24528BAA3598F3D4A57D68F1A17288FC5A0984E 25C242BD481C39B9B0922F0E932A18D21D9D50A0D6CB7F05D01F85051C23537CAC806A8F 6932DBFB5561B1D9C9BB12AB4EEA133CCE5DCCC647523D66AE4D5450C1811ABFF540DAA2 DD0D7B5C6E57C658A4AF57568AE459FA87029CA039C21B39DC12FD8B2118B42EA1068989 7AD49EED4007E6B7A86BFBD331BE4B28EAD77F3C6E091B24290DBBCC01256C11867647A4 6A67C1505A5E2F8E6BCE70DC24B0C4DA2AEBE8E1F9CDE9029714D1F812CD0BE3833A2E40 0474CDD0BE6161C425929327261EE576457AA5B4A5B78D7B11DB02C0120DD94F4367E458 44E2E3895CFDE696995BD7231444D90DE7B4BA7CA2E2959AE0AF7F157D281CBAF7E7BF58 F5A18EA7FBAA75928CFA14EC4422AB0719B84F50EA8AEA21B06EA4AC6374D6E94BE7B3E6 6A556F24AC7876786DBCFB0E7B39139BFF537C49D68961DD2E9196CDE1263730175BBF7D F2A29C35820A201A14086964B434D8E3B3679C833DC02E2054B5F65BB28BC9D11C94E915 E0A256EE6F67D18147902172B95F06CB524B2F5D94C7F4C9AD41EE6EE95FC49902E22C28 A9F30082E22C6B8E0B9C2161963DED62BDB8181501BBAEF08D02626A318473AF1F6AA917 87ED6E924FB5E372263C4F33C4EB71D9F373325BE9E89193C7406FDE93549D31740EDFEE 9429C8A960EC62EB8723C7B6E4CD855FAAE35CBE3BEB67F733269DC37D461E177A3057B8 D043CECB91823B73C1030738DE5768641C3D6359DE604DD4869397953F090B8D38F7E8A1 1F08ADA6483ADEDAEB8C459A789325F06A5FE06CD0CA91127405D908128D0B7561AE29EA FD2743D85F292F188C77D6271A217274BA64F39636F71F8DCD5EA27E2FCA89763A9DBC42 8729C60C79657725ABEBB2040D985519277F0CAF55DC58C34A52578FA8C1404648607678 C6D81F00B1C0ECB0DB030CC83DED1AA7F5FCE70FA8EE68844F6CDE5150F80E0391971D83 1B47A7646C744C59FDA0BD360CBF07D32FC3BF86D09633E14DC4A7DBAE4626536680364E 0A733A79B01AD95C3B1562AEFC1029678C30DCFD4A619A8885F43EAB41D1CE7516318F3B 6474D0790B2FFBAC57CCBB3067C93D1B017A2E4290B4D8C6E198324FFA5DAAABC217EAAD C308FE5A7A6057C37310802D3D97030724384B0888CB8859A7E4C0D00989374809A2E435 AD42A9D182B02BCA88801D4828CC4967A69C69FD0BED48656C699B9B67140C74E18E9F87 8E2689B5E8715349C8BBBDD4B9B5BF2646C014315FB720390AB44AA000184BE052CAA245 23985D387BD2BE4F865A59FEE78D02D97A10190DE355ED18DB4868AABE9153EE9CFF7047 1358EA70C682273DCCA618E38BECFFC6C68A2100AD35193B975DBF4286BF6BB976837311 886C714D7649C3BA3E11E67A5545B1DF348C6E9A2E4C46CFE4D9C20A4255073AC20B8427 A465C926902FF6401E63895CC622101ADA4BD49063546A65F94EA7D16E49851E6ED1184E A2FF0667D146B0FCD1ABF5EEB545B5E29EBB72AF68E86AE7DB392BB6285C0B591C52FA4E 2656202F898CF32BDEAB4F793CE1CA936F4701DABF306ED09D5707C259CB05699CE2A55C ECCC2F02FFD90876DA09ACB576F70549C2732A90632EE9BE0019A20CFEB4E71D2022AD26 DC82A2717824C86D80526D5BDA4B7F5A0698D8EF3135BF87C4DA64D3937FAB190042FFA2 F9D110A60459A38C08239D45D3D6F7D02B54596C720C018A1A914A58BC04C2188A070E3C C8720635639D94E580D750062145A1E841957424135E67DFB50A6CE03848FD282E89E7A2 77514F95CD487A4BEF4FCA83FC0E4D44703853DA6FF03CBA6CB30EA692646C2B0ED88595 78A552123687CD126CE2EE8A56347004F9F83ECFA122734FFEDE6B4C4B7E8CCDF92CA462 97F57FCBE79E9761A4B9E794729CF77C5E21DFBA8109CAE0AC9EC91E2156602BB86B37F9 4293FFB785512C25769CC70266B2A0B82F92155A71DAA898D3EE4D30B441D7ABAFE5E410 6B623F470BA6D6CBA12A4057F2E10C3F85A2742AEEED63D1341A722385C8C9E896EDEFBD 3CBCE8F0DDDE428CF56DF854756F23DD720817E79E5F2EE990208AF81881DB9C49722931 CB0B2762EDC20ADCFDA863FDC0065610C729DFB73D9A82CF114214351A7F6CBAE87B883F 96E248EC09CC2EAA25F8B6A40101DB8FB97A2A5B1B076D46E27078EA24CAAE7D32ABBBC0 67C9767B2EDA62E44345EA50EC81242CBAADC5A9651BB30F2F7C14265AB6F486FDB3CC02 7D2BF84DE4C149E52AA172CCDF3FB4680D3E942F11987027763608E10B8802A88D9339CE 1DBE075444269E016F1D50A27436197F67459E635C378ACA77B45D555C02C1968DB27C78 38A8C241351E36DBF3434177DC8375CEEC739DFDEA9E02007A58741A18B97AF5D99AE737 2CE247EC07BAA0D44D72A729730308F30BA467C2086DEA74CC0C730A961954B66A0A6908 A74647630EEC21585859CE6F165EA83C8ED00DE1A3F540AD6B7BBF98ECC80201948E8933 BA78DF961089653A305D1BD3802A6BEA9AB6CC7F17DCF19170875E11554581F085EFC15D BEBA933847D2EE166D8439397DDF2224EB240940D5FDB44CFF41632E52FCEEAEFE981F31 1EB83BD960A13398D9BFDCEC625687CDC8F538044741107B3E98637AC90F7522FAB9161D 6EB299C635E1684D072D11FDF58FFE85AD164952E2BE0D2C18C16E55589D4577958C7D8E C7CFDBC0126A687A51F177ABBB169F48E39BBD170E7BF87CBAF785299226AEE830C081A7 48699AE0E2AEE6833374322A1C96620B3D2B16FA2627AB7FCB4CCBC26FC042E8915ABFC1 320CF52B02CF6AEBBE7537686033530837224AA58E6AF8FD71BB04B41BA37F95C925D4A5 3CA54EDB761A90E27008FB25BF7D754C4F8D6F3C1003342E7FA93239EECB25943DBE2188 DFC79E0347A7FEF3F778F306FD22E0D6AA26FF83CB0E9FF1050AC6818B5C7FFBC39640ED A4E4B4127E943A9CFABF24AE6F8621FCB524140684A0ECD723206648C9842E9FC7FBF096 2EED18FE5A0D75F5EA180AA719E4AC781647DA630C72F05559A3C786CF2E4ECBA0DDB9E8 E63FB22FED8A5B78F91C2CA237F9DD1725FED47D7AB33CE18A5574A9749146C77E2BA87B B0EC8375EEE54AB69DF3783F6308C398D9031071FFF9901E059442F0D432A2F0AF12B6B9 01AD1BC3F7311AF345F7A33B125482C3C341503FE609280151AAEFD8C02A4B8FE1D59CDE 06B1485549A3E4DDF44E20A18994A85F30B524DC5A7182A6E440E92840290F0DA82781FA 2E8D71D9883D72A546542CD51BBF01837853BCC03362040BD9FE1350014683512075C80D F60CA4D77D40918E245981EE4BF6F19B30EDC6115D93C8E512CD77AA9E2A9E109F11744A 33BB47FEB78EB1522A52EE7789BA75E75EC7D118B7CD4ABCC9490026F2541B9149B312C6 C6475682B86B047ADEB41E871B9C531EFCDA312F5EB984AB0549B08C7D9898519F64A8DE 19BC6A7104D6FE80AF985B583C9024B78ED45513133EB87AF31979ED83B6F0E836D5503F DECBD6DCA18AD48F0BF128FB77DA40F14612EB9A3E734E691B271B5703BC57921FAC43E7 14B997C45636B822C8B8B8A23736BF783E62768C79802073F38FD0E9EC8F24C4FD862DC9 2866379ACAD0C5E2C688A734067221620463CADB99677DB358C7BB49EBA6ED798C6007C2 9B242382CD572A932EFF37F7C445A9099524F09DAADBFCB26EAD421B00FC2B20DB4EEE1E 03AE8378C7436C124A307E9A6D689B1F4287AE36ABB8225DDD7F3905847308CC7A63B180 C81FD7CF113E6B6A9168117C86555D913D8B4580C7A6A439A0C285769ADBC27695D74076 D059CA13D99FA96E7F37BF00D58CFCC1A7C364AB296786515F855EDF08A06F388A19B0D2 962985015CAAB05CADBCB4803CC515D96EB273A39E57FD24EA6A87968F639D2822B325F1 C6687DB0730953D590AB0E9D2522497F7AC10CF06CCC0B62945F528C04A1713689DCA53F 44B68A4D6860C9B851E44DC0B6A5C539E293119942A58032A4C4BB18E5E29D9EE9CD96C1 6E1A3A5F7E9235806B2FB4CEDC8E7983EA553E83B9CD70C9F025CB3D8951DD1611FBDFA0 BED164CA8EED703B261945AC1894153D952EE8904268C5F870C64A99BC13F6555A1F1BDC 06EF19BD7FA1B003418A8615DCD96407B9318D2D41ACD76678437B26FB8C9E8C00C91C67 256A0A88E98BCE0F554F380FB110A9C23FC6BAD1C68D6A5E1F0035F01F30BB1FFD83D364 19C4958E075EC6921781E42FB91B32CD2CEA96915433022FFADBC8CD52A274FF0D83554E 139CD91AFEA56AE04DA252AF1965EDFA87593C9EF6946F1A375014919128CAE8C6F907D4 F73C1525A4BBD9BF14BB3E443E30191A6BDCB7FE61A58ACEB664DE451F1756CB082ED099 2DE4D75843AC81F82FE837CD7C96924785B005F76A7BF528B650E3130E5D8699DF1B31FA 99861D898A0D4FA89D0D3F5AD2AC4EB99E6373BF22CD9E1C5B8730786849B33CC90CBC23 1BC6B802FF477051F4C2CD3BC472BFCEF7F6C64A872D5755B9EF143C439973E009A3951F 66C3152BD4E34FF142DB5813139121F9DE184AF8426210BBB002E825D1415A84348E7A52 9DE0BBA331666CF7F5E3CFE795788B4E4EC4C2B5E411EB50496A76499F9649183ADC3173 9E3B5BED038A00B7574AFBD6DECF6EFD90579F12800D03B5E60052C90C9BF1B9260D4F6B FA3B3D2936B661B0F3EBD2A3016164F3848F3249BB1A3CF6CFF2FD54B7C35A00D1B40A2D E7D3D0B622D28786C1C12E6FBD899024F3C0F507D06632CA5D70A92004EAA4E5EE40B456 DAD9480BE7F98C9F98DCDE19517531231F517E41E3E1A82259E8172BDF4A40E041EFA389 2A1595C8C4361768A3EA16A205E76A23942D44F2D48171471CA6C78B268E03ABB0CCF63F 0448CF689D82675F51684B784B6E5DABD8CDE44809560A608CDEEED52F1F91196B4C6865 67535D875C2A7DEEDC1F6F34BED840F9D70D668585071828D98CE73C8230A1DE86BAC257 918304BE654093FB3D11A14564B772EC304243A14B62AD0FA124BDC54CC99598E99141C7 5CFFB40420539A1F54532441D0F7CF484C60687F9FB63DEBE663248DA1DFC79E17702CB1 5263E640F8120ABC2240DB6674F8059E404BC7E213B781D29DBB54BAF42793FBB979391B EF237C27DFE0F310EEF66DEF49FA1CEBD31F0B4EC2248D2B091956B89747D126C2BC9631 55C0CB8EADA9B30ED732143B306D0D0B77CBE43D8569E03A72F3E1891128B9B2F2559204 0D02502CBE5B49BF46252B2BF7079170D185804A8E4746B602E744D690E6BC9D59317E7C F8737DE345EDD97943CB68FFBDA91AB6AFA895CC1B83768FEA1264F577F2A6C2FB511246 91F8FF171F499454E2DF9373A78258F1B2560AD568674FCA3896790C6D6749BA4E29C042 53A4B6B951527BA7C41D760CEB39BE465FFDC3E4F9E54055F987B3620128DA3462AF2926 EB64B9602EA14A1230B39EE7A11ADDC8AC04EB28350256FC7BA30D21B14A3B2ABCAE386C 420F532A3D570A8ED8110F842D0043D918CC92C64E357E2AE5FA84CF9533E7DB96CA59FA 342A2F08CD3755BFD0EF82329A94B19627E79D8F07DEFADBB59210D2418BEB0AABF83D5E 9AB45A79B526CB47DB403833FEF390C4700DC0A6C6845081F00C4EB9B25F29DD8AD479D9 03B60A385CB70C89F8BEA90EC4C971EABB514FA32ABF67D056FE1BD534BE4A27B3D50E89 14A4C26B28BBDD0B1DEF5A805BA3E2A4C3FC6577881A4A0393B0B6BADD6F5BDDAAEE6D12 E964916D436FF9766DD1B7E15384FD9EE74BCD4A0EA99F56AFC03035987D952438904873 4C929C43675B9F6196D82093AFAAEC77FD3EC4474FA718931E1D801594888B28CBB2C0D2 619E9046FC8F6C74D4CEDF1CE58419D8A159788D19AFC8C5214BBD8766493B6F8D59DDE3 2C327C47F20089085D231161768A73EC289A41C8AE439B8491592172F8AB35F36748D7C1 30DE3AEAC128BA79CD7838D8CE74CDD0BE61659711ED3F313848B8F65289D5FF78224277 638A46E2D8F93B50B235DAE2791A35D9194F8996B1F64E846B3FA91A0108B45274D8E6C4 AA23D56D1BA7B3A6440B4F13801C6C9EAB927683E0A63B713B5C8AC09BBC3BA6FA799FDA 6EC89F61D5189812C51F05B358976E4E1368E7E1C36E3AE0744CD76B69E240207B689456 A11979B53919EC5403AE66905957BF55E16C98AE2A8CBDC266245B65F10F5D955BE04D8A 842900DA3C03A0DAE682B4BC9691584C96218CDEC1E87CF27F48655ABA2402581F032295 E6D54981FF13EA13E906A7C9CEF7D293D6015E3AD84B13CC83AFF26341FC89652A3A8348 0319D4CD0EDE0B0BD8873B8048B4F19906C40EB5C255198860A296DC3C17B397C727B525 CD190FC87B57B7BD3BABF7CAFFE8D1B47470A67811B24618872602D6EE939637719928AC F8FED0CA1392593B5C4539A51447B88D35F9648EE0533A5D675120A62BDB360A6143F26B 2D2C7E1D972135831663828EFBEEE5471870B12E46C71AA707ED9FD772D86C99E7AC66EA BEDA442E0C81F5DCE383F086D9FAE032502862F219E710CDA41E51C191854B6AD8F6CA3B A74DA32477BB2B74AB72D0C7D6436515742A3CCFCB4702EBAE2278372D32F4328AC2824B DDE371335733D84BC6C066D953ADFCDE82DBBE511BAAB858DBCE4CB09937C59F72D06F41 44A2BBE97E80D58A551EC17FAF1C09D5FFC61B7E378AAB6CFAAA33092757389910D24DB7 42CCCAA8D06C205CD73C011288C6B12E41F455B4F483411336CB736F89BC9C0BDAC04710 76C88349D11D7DA0B96C074926F99E17F4366EC02AED185E17CF4E393B95E572DD9C5F56 C558A8AC9D36BA54989A90A92BFBC3DA89B0ADA9F2DA770CBBA17E89D8282D4D86F36597 FFA2B5F57B7ABFDE90784515C9F640A94E187A0BAF16394707237117135544D00A53B2BA C2BB4FE39EA51C62359A6092838C881282810678CFBEB8761B57899F0902B585FED05E18 7C925D02996B48A0A2ACC0C666A580DDF5A9C4AB482B3E0635A420AA3C3D671D598A8087 C6065463EEE5C80D24E28AD7996E75BBEDC0D213CF861AA1B40937C6C59C31B8B79BB19F EC789F2A7C95D1031E6403A7FD04AF587B22335D5F8917E832DF4DE474EB28F1C477EA20 06245610DB0B8159D93BC85B638DA018871C90A617F4D2A439137BA6403AAAE1885C56AA F36B658C8CD58F6957A1DC358E401E057F362669CE4EBBE64A5D7C6C4DE452256A68B93E 6D7B23B13E2266E643441259ECF980B832317FA6F4EF9A05FD578DF05CB1B8E97E0D4F0F 4F2155FAD51979ECF6781B2E51B719CE33DBB88C2E0080139044697E3DF7CE52DF680C04 10BC424D99B6803325CE323EA05A0D93D918DE755DC7A1F6EA64CB51DFE4CB5A4B2700AF B1A9D8B6B839AAB7DBF324E300BD0DEE1B55B6638C9756735EB1C63C48F4A5EE17A03E2C 47045E65B32B7C5A6853F9499024E7E6F69E890E76686697792CC68C015FFF0CAB3CF3A0 1249B8261559FF87B9F96109C414E8AA9B40A73522C1B1E5E4A870A7CEE478679444CB7C 62D59CFE648DC252AF5D05EDFE13426BD5846CC2BBB10EC56754E2B74A1C3F2EAAF7D73F AD351D039C6C48640210083B77DC02AA8E2C22A66762243C707CB8D711BA88F8FB484783 45EC0306FBBB5DAB1DBA863CFA5866AAC6C0FE828D48820E643B9B5E069058058C6D4E73 6526D2C0C2175698CFD37EC47DB3BD5784E72A63C61D987E44743B822877F662E5EED8C0 C79C5B7F2D33564D9E271636D29A8E084DB26318D34976F592CC9774E977A9E3C3635BA3 5B4E7F119DB5DB0B7113658625B4AB274C01D394C468E66F516F437CB28CE97C94F98AF5 1629E452DE02BFE76ECE9503F63F3A820E62E4BB6154C40290E90367D637B849DE7D4C1F 6B15CA6E544C4A7125A32DFEA953F3004352BF473B776CE78BC3C2D63A8AD33DA0CDB953 3B1A87CDD0511C5B89D56D4D3445173817AD9FEEFDDC2CD79526E2D94191C6CED78A5078 1502E12F800255406F2C00B4570320CFC9396A43D46EF607DFB9E5B95B86EC5412F0D311 B31566EDEF02601D3D8CB3C0D3AB4BDE66C5EDCED0A9DF3D430720534A928E3447B40972 6B8ABAD6ACF08D55B06A92D52D665853467199AABE26ACBC265A258575C506F042B3809D 1D6DFFD5368D96BD2C490B3AF1D5903A18DC4AF15C9F50ED69846C9C08472462374A3CA2 01133705A94588D5DEBDF85DF9D129D733D13038ABF1B95B4F5F4C0FC33B3E068FBE2B3B D0B05D3A62B6E28D568B9F7839168FD613926F595B3B11B496F7FDADF6BE266BD137C808 F4D7D92BF37C85D7B7037A105FC31D55BD4739D8A8F25743E3B6F893BD0CCA1E5FCCEEC1 9899F5972166844E84846A4A6A8B55496177809464C75F707D8C35C0B760928406F7B353 C8273834EDC209409CE49B9883CCDD7D2A62C7E5E34B937C99E91BD5D53C8F2094BF4D87 B8FA8148F8FB196C6672723EC7E02620A49D5D8EF2C8ACB12E4CAD6D85DF1521604BDCBC 740C4CE6C57BE58242F8509F9270CB3DECC3D6F72454123DBB0AA65091138DFB8B57C250 AA150523A64CDA4AEDC435D57F671A612DDF24E19EBCB0850B011D6D36645083FCB2E0F3 295DA0563BAC88A6584B38C3375DF57907A1301073BEB36927F2F86FB8D62BB0AF4A1BF4 15F655CB8C89893477E60BB2088958F468617833B4CF10A6CA7EC536C4BC165A7B20C523 2097E7CC9A37DD2764F533D680D3B385D127CE901F5022738FF886CF06A2563071034D73 164ECBAF282E55CBF7092EDDDF1368D2F24FA8AD5DCCDF596769310304DF7C2C7C8493EA 62900C64CBCF3B1109A7335F3CA548B257AD4513C15E766BFC1F4260CD77D3CEBD5C5363 B664DD3323980CB4D8C18D22B0CEA5FC1EF2FAAE0D0FD61F5BB23A7C9CA639ECC5E43EEE C3A35C2395433ACA77BFA61B8BADAB4A9C78B0BF229EC542FBC8280609E3512C9204D266 4DA8F663EB2D17F824D222EB3D0A5F86ADCDBA5F00C382D80E28EAF4CC5037C79C87933F 72EC6086079BFEFD237CCFB752D8B9F786448B484447327F8365D86088FB1D603AA8B74F 136BA0683ABF6AD6E2985A4AC7E68EFD9113126D9DB8EC969285AD41A430B3687A124B19 1B24AA4F3A0349B19A8C28BA18711F25E48B2D4D3C717F248F3F6161A692A98D2FC7E235 8870906E0E44A441C39D2AE509953D729F9FE5F89296A871457585991EF696F74F67D290 6133EB10011EE2A6FFA37212FC5D2ABB32C7657E005B788EA0A5406AEDA71AF4DCC0E5BB B760AE6DE08178F8FF9EB7D798FE20BCAABF596C0C1EEC6B503BF76E8F05CCF4497C9AC1 97025F8C030694AB71272E307316FA71558DE2711B0A57E2E5F33572ACD05CAAB45DF4E1 347837B8E7ECB5389062E19A0164002DE5149C240A87A9DF6FBD8DB2E981897C1986DC13 953ED8DB5AFA0421404906C523154C1CFFA64D705644E76C5DE14DEDEF772896DFDDF6DB 794E8E665922613BBABB682F71B3DF5446B3B841B693BDB24D43F1E36520AF4A6FE6C659 330898EF310BF3DC6D30E315553C20D3B18CC7EA9A1210D973D920834F7218CDDC8756FD E4305BD20C3D47B76ED43A50FBB0225C8D2B3C282A364E4AF6A1F1733313934CB86463AE F08E3FE63D75C60CD13D8413D28E8D49B36F712D0EA62797B66CB25BE725A5058250C234 6C2BC7305756C2F114A92DAD643B11D34C5983384BBF133DD95459DC77908A3C91DD86F7 8DB9B60FD89EDC889C912830C6A1E47E701DE461388AD1DEC924C7F7A39E912092B97338 7D2451FAFEEAE6C1C00511CF37EDE8A696B15732EBE00E652410AE5ADEB2F68DB43EE829 6644102723DD6A5F3DE4E3677CD13C503AADFB5D24356EE3071C690761C2B687DFF0CCB1 9F531E3D02C1C196E3793AD9728E80BEA0F307932510AD6006F03B018DDD64717F322A9A 58DD31CF5CF18E6DCE5462FFB32D8BBEAD69B31843804F3D42BB6EE2A9208461F2020D70 21BCDF3E688041DD2734D8570188D2766E7412B99B383713A33BFB48DCB5DCD5586DB822 D0EC05E137B8D147697E5DF5E215AB3DE6DF3DEA50A51ED3369FA56E6150CC7A41DF74EC 10F01A5CE2B2E5A99E35D217C99C8F89C315B5E6FFD94B0C7558B3CD9F89A90253397CE0 5605EEBED78A1D8B60E32B1F1CCF07D66471EE00B272B38BAE2BCE0CBFF18A3207D777E3 1AA1BE65FF8738B762FEC4E106F4E886C871245372C4C46812F90E8B352DDC6060E1FFF2 162F27EBDCB77ECBC5BCC56A65B77839302483F47F55955AFB4757FFA352B4A981370C35 27E5661DB4A90BACBAE7E2E1EFAD235B8B06551A0C0CF5C1FCB429F1089E4B002185EADF A539DB7AA7D9F52CC98AD5292FC79ED40EF4FC129E996978516017956878425CE54891F5 17BA95E0192ACEF1436E3C90FD121C04E8DBAD343194159B84F0CC67903B5C0A70FEB7BB 529B4C9D9B92E0244B08355B8C56BC24C95DC2AC14A449C5F2F598FB9403630C76AC34BB 0C0B477963C821FD967D6B6F09D591AD3BC6FC0F5B8E38081D3F9C792AF0FF28CCF435E2 9C85AA5A5AA8D67A927B1C26A1F0F95EDF44EEE8A71E0C8A6BC9B846390E56F2E41DF2D1 8F61D51E11D901E98D37B2C2852EE9563D54A9A1AC0B5BD17F38335D462A8606CA529056 6BD45A392D614CABC934BC93F9B868EBC90AD092AB50CA2AD8E6868F9DEE1F4FA94A72E6 5B720E176479B4459D4CAD2F0D2A5616F7E764074D762918C99A3293C68BD4626DAA5987 0F966CB01F36D1D3B50DC8BDEEDCA32A9D808C2A00CDDB69A0022A1E2C0F095009C7B963 413AC5B5A4A737867F5E4ACBC73A247FEAC8618509CC21B03AC7CD37D6973AF3C6DB4E67 9B551D8536EB81CB14CFAC7A72F0E334890FA8F08FFF97DD758CA5DFFBE5D0D271D3F2F9 6AC21148FF11218885E77272230AAC2839B814E23C4CF6067D69CE0CA066D69DFC39B11D 720AB94A6C9064CC22F386FA81A22DE99FBFA6FB0835C6943AD1CF527411F3384805C98A 6C614605E0BDC6DC5351A51A8366EB9071C4073524B0844D89C0D05F8E9B9C1773431C0E 47B9A61074CB33B473A04CEDF1881FFC8669963B9EA17F542C4FF6B92A83B526B039FEE5 145ED47B68A84DF5FFB0B6E0F739C75F2680DBD42037512088BD985191C10B6F1B18C498 7B741CA3F2AF879633B837287622396B73922D39A111247D7E76C660538BB199C61E642A 97D5CF3BE1A382FFB281EBBD89C5E6148E9D9084139B4396AF0CE8C8F02349543EFC840D 8AC490D99051BA9BB63E57AC472677AAE8B0006C7EE3D5DA9683A623835D31D5E31F6071 1750A389502BDAF34F4779EE9B2BA4D2726A980AFEC438CC33CB08BF7258F83493A65ADE 1FFCF9E2E12BC8550AD55A174259180335332525A9179E64D91773587A29C41AFAED376C ACF4F303649C226F9115C3D6B4688E7CFEF181AB98F5C705E12D3D641C6CC96C1E5E543A 75AFE27107B4BD77912D8FB1B86FAB7E1F3B0D510D72564D76D4B911506B58C7C7DD1AF3 1BB17883B69B3635FF08386D1C5FEC6C957964382D12728A767B2B284E002D14F8608B5D 6329886F574BEFA18FE995339327316DD747021D3E89D318488E5346564BB46A3985A230 17747EEBA5FAD0AEE32AFCAA138FDB4E8E553B93CF21AC8C4FCA9C2CC136C2EE0227B794 0D3908847EB0F5E1F0F821CE3D540697E50397972B46BBE0D9CAE268F64353485FE89E5C 5A3BD28732CB648AF3375D590D0BC61CAF03321B4A9917CE8566A0F59E18F7CD5DFF1A1A FB272DF2BCC71EAED10B9020444CBDA7ED6FE7E93433D8D6796978112D453CA38B2DB118 05FDD16C2B119F9546BA23B4507B1FF248A7A2CB91AA26C73FA7FD31F12BCF0DE90184B1 37FE732359757C8CE15C826B98E920B70A45367AE6CB038604855210D920CBDA29A9BD22 44F8C456C85275688F03F37C59F74590870E6C31FF83FEA5F0C56B08A048CB9966F082BB 76B3BEF8B3F1E9C8361A86A4DCAF88277C185F9CFD0772B70264FCE23C513E47772625F3 EC1D4D8ECF8CB9685D25E1675EED979F0C0CCA1109E604A098B3180B1DF174910E0CEFFD 72DD27501F9172E4B4F1A2ED2812A3460477A2364FB34DFCB8DF4FDF7C8612F9E2DDAD7A AD73936A1035B010B7F216A38BFC05099B8356E64E88D85AEEF7307B239EEC76CD3422C0 A7000C4D78D950CA1CAF25300335DC20495F9D8F35B85F383441320367B822B6F6CBCFCC 074875C3D98EF2D0461D254E20A68A7752BB9248DDA100277D46C63F5D741C89C162C96B 43812838011D41F161D84952870BE2974FC685DFAA1172A0033DBB4572AB07270A8CCAB4 AD34BAF86187237CE7A2C170DBF7BBE49CA42B7D5E8369BDA2EA0AF2AD757E770E0C9527 71C0B09E2C5A7D755601F281C213C56EB5C85438FFEB6F9A4309F1DBC661033665777D72 5739107AE22C1B42E4227473E6E987D10B4D113F7B62EE9C55537E2E521E7D47CD875062 D3D89A2224E5BA2C89023E9AA3B4F411AB6048E484D949D24431E227857723AA2312A737 9CCB6C6971A2D2A5D97309B4C108244DD4FD5298ECDB8D16AF1F03CD8F2A18FF177DA121 5286CF4B95E7F57CE9C4408E3EF26807710674A53750A99628AEDF13CF8ABDA32896C769 9BCBF9BA36DB800774D6B6ADF0E045880126A89D8C5C70527963087C80D39927E5F61F62 E1CF1BC20EB64288E5D9C1321F4C2BC3B6E557C8DF65743544B0A846A8F8A82F3F80E9B8 9FB751B6DF59DA04A696DBEFCD3ED821D23B87C88EA950F154F405B8FA4426350BC32844 C5BE7AE0F665536C0796AF6F2A89993E4A7ECAE64EBBA96C94D89C5276F8E6404C85395C 09D53AA450FCBB90636DFA8709D3D33885548E4DFEAB3A561B19B06395F9F3F05CE45890 3B2210E78435982EC3BB7EC30D0D7AC384CCD3893A9D26CA51D3CD31FB3FC5B86B50AAB6 202C72E6D9FB3DBE81E41F35FC55C6AC6FA6447EC94CD134B74859A296014E4A8125F7D8 CE1B80641FDE1C02420C710B943BDDDD197A164C9A11934D60902CE3614EA104A07D77C0 047FF507A1C6475EA2D0DC0834586552FEEB3BFAE1C92599A1F83125E3A445C58CF26D4A 9DE4B90CA6B3DCC27EA5A1A0D64D25BAA589FBFB67A74A81815DF4B9718FD97F7C45002C A06C02D8FC17BAFBECCCFF39357F17ED808C1C9659E7E3F6F068D93672E8A3D67E2BDE50 426E6A34BF7A94C47C62A915723962D9E9C73895236E2BB1AE4C4390F4A36CA098FAC907 6A6B0CE8191A71B6798E727F3EC8626C173EC380EAC65AF52E89DF75FD22207FC8D1376B 410C750DA125DC6D775E92FDE729E1F731706CE8DA5235C095D29DBA6939A2B8A5885886 968A140D8E331C62AB6281DB34CBD39613F27146DC5D0100BA78ED3E63789777BEAFD52B 648A0677AA2DC61518805C90317977E6C3109CB8EB59859678D74E9D012D1A6A958C40E1 BE7643E0E41BF6593B1D1F3CB881860E7EDCB5D78A838EB74E5D9BA36EEE9E49E92989C3 03BE3BB615083292558E7B7203A63AE55B850910D930BB684A409254378B413874D0A7E8 5715672C06DBD193CE20B4E2963484CE27CC76DA61E3E444A977472EDA0F3801F70DEB10 0A3852F068AABA122F7386B66AC8B4D3175D0B6A1B4E7CDD9BE24B7A41EDD98BC903643B 47CA8A289A85F2F0A4CE13358845A42A8BBE5C10DBF5391A62E34DBD30AA7DE1E2C512E3 EC80B3AB8CD5A5BEF4A3FE11A039A782AE29EA67158AD2B0FB4383A0E854BCD94B8AB75F 8FB7588D7A77AB580B5B93C81F31D2C69DF6DB69F497C860DAFA9AFC3BC9F67E62A84BDD F795531EBF4B43ED27DBB6C014E18E55B5C2548AE9653C813D235C9F2D2A9B98B0954F5C AC9B8FB75E9DFC441DAE2E5038B8E2D6C2A3149B25DC79457A3D7EE729D91C65A25C0D73 75E664F41EAEE5643EA872F5557B5A66AACC52885647716198CB5F94009B50F391FEE8D1 5E185BC92653EDFCC3B09B51B3B8F878080674B34C0DABAF38D6C7E2E3948BDB6F6B0585 86476D2076133033497C6DA1153D88D77E590EB0828FAA63F7A9A28F3656518AE6E22B30 2960CBFC748E30ECDF13C2C6B3CAC0ABBCB4B9438D42C1A54D40F24C3221D501F1E1609E 839777CE84784CB2F0CC9FC324F84F2B1D4E6DE207680AFF35C7C6B5B45E3141BFCFEEB4 2743008AFC2735C37E0D15B06EAC6D7682BD9D38452A6D805B975E68DA47AB1C8A109DD6 12743E3E6CCF424FC36C4D1EC7F03D5588BA6F6F7E0467E0817721A4A7FEEA08CF221A94 0B02667B1EEE1EB4C263DA3CE83152DBB1D441F99614A9BE9BFBE842BA41DB4D5E9CFFCD A93D46B35800835310ABA4D821B5EBDC2C63C444AA0999AE03F4DCC5BB25601C91075841 FD96B88699D4B3FD52A9B4B1327979B2888A251B89D4DE0DDC3B1E8570BE666F406F45F9 4DE480D2F54A7760116F84FF133130BA4C58A533221C32EFD5BE7028792D86BD3DAFE162 125562A86B3FC044518BE7B196FE15239F67211B177978038B404166DD6FDB563CB23358 7CBA3C59D8DF16B6E50C81FF1C7D2D39B0982A70B8214A04E8D0871D85EDFE083594700F D06E49242B89CD08A0AB8937239952350F76C62850BF9110B358A0398E34D24858D35F44 B5D7970D30CE7FF8549BAA6EB39731F9361D7B0C694BA2E927CD66B3B80D64ADE20A29B2 73C7BC2DA37255594E057C5F6D3E287F74A41C9A2617E0455A1E76E2E50F9B18C84C05D8 87398A5DC22E1B04E0B416F89847C089EB9D34F4D677729E21C338B35721C116B73C8ADA 58C0EED1AA06F034D6B5522956CE1399836FC0137A9CF5B63409892A10B328546C067BB1 A330C9393C2F837CB5256897596A5762C95B3599B5BA352846AE3FF5F37780EB1F14BED3 9AEAA0E29A5FCA51B1B425D6E0C8F44C607FACB47DC4E3E6A02A822F1317EF8165EB85DB CECE90520E4286439AA46B2428E0A852BA7DB843E860A46BF7389446494878BDDD9D2C9D 4912281351C174F360ECE72D794E3A74886E462F420B02F0BC442E2506E1A1FB14B718CE 6A4AF051E9195CBA7F85FC1C135DA08D7410257272ADF59C93C347AAF41FC1AAB9484589 E0D4F24D8F840FBE107415175F0B073DB360A6B6F02CC9A9746B53458A46C7304B27098C 7C6216D5896ACAE81C9AE914FC6EB68F99FEADAD3369C27A53B78328863EFE21B35D6CDF F29B02D91160739BA432695801BA3A4B04124638A8FB9F21EA59773593C92235A89B93C5 D29370DAE9884FC8134D43D47B9C7A7AD52E453B68AA782032069BB683112E8516427D50 BB144ED9D7C0BDF53BB0900BAEB2BAA94E01316B8EFEF0EE9C50A5297466369BB3C6C1A5 8627DD9907DBDA9A75EE32F104EED6A6D1D4A52EE94452B1798776104FFB7A5AE5A40E4E A452E0246E75C187B275F46C87E4B6EEA2570278FCF32A26D3C79D07D2B59CA886009A9C 02B434AC85A9073E6B38317CDAE4901B1A0346A048D5BBAA578EA328F8845E4BF2361CBB FD02851198A0C97092F77A8B610DA27D7854CFAD8737EAACB383A7A7A2693BBF73148E88 46E5FB1F829B79F6DA1FDC0B1335BABB096051FE50BDB15F9116CDFA716D7CA6F6B423A8 75BE3AC733E9D55EA76C0FF610CD42ACD3793A07425D6FA03A6DD51814846F0909971ED0 EE42906132E43E513D084B59ABDE232416A76C16C0C646BD4757FCE9F19C18B4CB6E2DC2 378C45FD2A97BDE8A26BBB8B7D3C2AD3EBEFCE98C7E14C40AA99CC6D612873FF89DD63F2 5F4F77539DB05C7AB88EB833865552812CE9F310EE8EC7D15DEAAAE09F762E7B52FD5889 B94DA49F9C402907107F01BF68AED5C2E315BA4179546144F54184F79AADC09374BEB067 5CE3ED97824034B72FE5126EBBAC77AA7EE2C2BBAC7799AFC7CF143723570C9D4C70C148 75F6559D1E09B5D13CF1206D3EEC264496226C0180CBC6A2CD748F429AD2FD11B81B949B 125CEF3B67850A917ABD89076B809940B6A13061DE2D0CA6879DABE08944E79FFC6BBB20 F08E4D9CC02CB96D8C91ED2B245BDA9FCB9215B0A2338EC3FB109DF9CFD81306F2256419 13114C3C843D9815EBA8DA6F447BF99F8BBF75BF74809BA68CC24E6333171DEDB5B1F9B4 6150D6997D6EE30323088D5636D6CF2D167FD28CF679137665219D40764BED439C27CFA5 561E89FB785F289E3A7DB6FA709CFA6CC6140F368C0A0A88B68D863EB3F0FAF6F149BC44 2F5F8DC85EAF0EB227ADCB822BE885E5100C4A8037DAC4F30F3B42BA05F40220D4E55C35 DE5DA41F8F11D4BC775A83CB036175E9E24929B07130D3C1CCEEDBCFE44F341BDCE961FD 2900971785408907F9FEC60ED9313578F5BAD56795675D6FE9290E8DC5D506594E876E37 CF247B9F1D4ED0D7A460F2C213745BCF955D7B5FA7904302C9693D271E86E6AA6B002AD8 DD74C2FF3A9E238D17BF219BDD76F9503E98597017E4F30FC59386A9911194BE6C1CDA71 9E7A1FCD4EC5A8E8D92794A56BCA8654D2AB9F206ACA2812366F6A086B01A47F932ECEA2 C09C19FBBDE84C41325F7A90E3ABDF98237785730C74C00D80A80F104EB9A908E4067D7C 2FD8DBDDCB28895570212583AE0BCA8726146A046F4519AF840C23904CB8938C24C10DA3 118FC5D3D6A0AF83EE7F5CDCB0801E0C68206C47B11C70EA7A1E2238FD7F0595E1F88D8B 9363C00012B2A108D8868C5E59D261E695A6C8FF47C66B17E3AEC5B7BB325DD5467B1EF2 1F6252153ED62783283711B278765EB788E55811C9BFAFA9C620DFD1ED7AD57546E166F4 EAEADF77E41D114C417DEFC2B9835DE25F6E61C7E6874BBC58A22BD777341216E10DAC84 490A6D11F3E1F2E8DA01025856ECA86FFE08214B8DBA49D72008AC7DC4F0F97F0D41B072 E846D9E07E3BA8B90E802082FB269545BC0F11FC567960970DB504E663EBCE63F241A465 108B978185F84F03533E87E08D8B88D94EFD519AD69AE7E8436E423800E1B42596D68C7E 8A19876B2C7D4417BC952CA96A96EF0D7A2370669816B924792DE98D2FC112BC7E9B810F C9B8526FFB250D92FE19EB7FD71E1571246516E820F196904A82BB56D3ED46D1B5C0F988 273ADCBBFEAAA882BABEB37B5CF26F352D7178C4721571F195E2BC494DEC2911C57D93F0 BF047B93BF60F4C52FE02F141829387C76E7E571541B792D25384D489DB1FEB664AEFB73 4E3E866A450E355CEF671EB1A7EAC0AFE6F390BFF18A0DF73A96FDE10408ECB84BE1B8AB 94C0681EDCF72F9FE66197C723BBF976BFAFECAC5FBF77474553A9C2F296F0846B9A2471 525BEC0C6848CE0E4FB121F5546231C25A105A0DB1E81F115587F2E034568BB4D6454981 C3B738FBEAEA7A0632565C03482D8D38EBFB8B558370249AEDCB032383154B43A948274D 3BE1FE081AE9DDEE46BEAB5CF5B638B94077D3E1AF36219E8BBE495F46F892945CC388A9 78C5747A7C4110DED36B17459553846FB51132A8F8814723E5017F5442E32CB62D07B9EC 1B3B1A46A819C74CEE3542B9875F58A579753B98662FC70B5C10F3D00DFD4B2DA9C2CF17 774CBF2E54638AA55FBE232F2A595117CDF35E58D6AD3AB197475BE081560FC8026FE2DC AC1F6CF036AB4CE4C933DE5252874D7525A562C4D00E3AFB91D6B0215369A1E7179139B8 D36527A877D6D128955CC343C317116779DABD140D7FC1E7296BCD5BDC48E81A71D71B8A 98EB48574807847EE86B33F8EB335A6DA530E12BD72908764179A4938097C8923833DCB2 31AFD763BA376A7C5AD3D4BF022D946164D4500CA5C005EFAD1A781FD2886334578A0FDA 4E649370E39E9DF8F1A57CC253289054D1128ACB474FA03C9B9A9B15F0B767B871FC0234 0F80E7303BEAD3C8FD07433D45A8BD2335C4DA1E8CEB3E44B7766D37E13970C577AE1903 E676D6D968A8F43FFE56E7418936F3D658714E55FE553D225ADD5CD608B9E74C475BD711 F75135EA833387E054C8BAABAA8EC725A6266148712CC9A9C8E9D6ED2FB5AF2134F6F37D 979995BBDFAC8D740B917667FB63575240FD30FF0D8076D2036CACB040750470ACC725DD 079C00324F00767B74D609C1CAEF27D7FACF30D1790A4480DC41A0AEE2FE663C15465372 DBC3040FF9D6C72DF4C324CDFCC6149BC619F7E840C46AC6C95397D5EDBE41D12B5FE5EC 41C9B0F7828A8239444B79C1E2537348CA8BCD3C9A83810D588DD949CD217C65F517E1F0 71A914BA116E8636AF08EA3A3D67467B3C207E63B83F5C8DC032169E1D175120371A3C2A 380E5EBD55163801A42C49490AB8EAE169DEA5DAB502C2C7BABE76C74087F94B0C4CA3E4 FE175168351C89D5C61DF820E0E400D647DB3143AA4529E0EE5028C8EB7E53951B1E9259 F4D8CF7A7E88A53A81E5B948A683FE5F358D79FE61D894723672E36D4FB9EA9CEB3B5BD6 25AF2D3EFAE25D33851DBF78D54A05938A52EE2FB467E91F96CA6D433E69B03F66411BAB 8465C2D76DBAB12C34F2E214CCEC54D1B72213B60BABBF9BAF989326B4D6F5110AD02F2A ECF024C827D8EF201D47C7922FE8D793C6D1391C159973A80E7B73226FC0E92C2D7D1E74 A22A98E829ED46EE4E7395D6D05A3ECF227C66F88CB17A89DFBB6D0786770BDB533D17E2 DD0AFADE67C550DD0A44172ADF3F2CA293727DD3B9F87250AC30CB56A2727071DC7A0468 F4FD33AAA67887E929BE6417D84BA43D893FB7B98A9A2374FE99C4CE8C4B451A3F236C67 681A7C84AB8C0D8E26A1E7CEF5B1DDB186F9A3F200C26B74BB240347FE0318CD7215E1E1 F3B88866F843885CB4F3D90FF9CFACF7EDB03846025B89DF99A3FAEC113A03787B0C8B56 60110C1F90321E3704539EEE582D905DBCDB0C18470D1F08ED9BCB91FD663068DE1C9A3E C71EE968239AF443FD1F8016755B634E62A1E42097D5B4B1559F84D2917C8F9C8580B862 D23E6419373223C52C5C039D09DA47C864C120741AA5EA20B9C85A212CBACED0094C9366 F93DBC3E1319D737C7F121FB1DEF9C95DE40FF1DFFED2EDE1472B1071EB93F3DF3A68243 A44C91E92649AC9FA606A7B80ADE7D40499269EF9BB3C38FEDE96C000D7CD9E020CD1CDF 76A4ADD8790084796580A570E632BB1732C5A9961F648ADF1521604B2AC0CCF1B5E18CBF A88DEBBA2E668DDA13F44296F17B1649F9B219970EADDE77FDFC41EAD13376E27767FDB2 9AE6ABE29BF400D7FC6B2F2B9C35040DD60F400E950EFE5F189321B7C91EAFE35BF901BF 4B0215FCA75AF729A5A5944F2F419A329FC43605B1EFAFDDC0908B907E3B6B6CDCB025A7 CA2BE4448D60C9BD032333A7E40EB52623F5B55338A8E3894B4852C13BCF7541B9C26408 FBFBB33BCF3AC55D1D5ECEA02C2B150DF7A681BC43D693995A836C465FB75A6345FFBD64 7CE0C3406981BE3EFD989178FA37FBE5739927DDE47FA24DCD0C176B85728BA7E08A4A22 A1C60D760699481C7E28EA99DBB6870DC01E459B363A8CE1F3EA0C904F888C9FFD85173E 41D9CA8001D643DC4CD8C6B41A6189D741DDEAF2680B4C16E954D99F2D97E8C87BB526C0 3343C4A7BA600C65025FC1036A0B2E19F2DC5306CF83221BF4F2D9878AD73F9D2624F3F7 29801F25C88920501BEBDCF9FC24E88018C858A640535F4B367F23F1CB0C79C4FD349D01 6ECFB101DD388C3DAAA5C534B08FE6C7BD31EA3402E78B59279DB623A5FEF60094967D49 D234C8A142673304BCE453FEEE1A29E4C417EEC2AD1171372C26EFF2CA3AE11992C4C33E 84C368BF7B74D2E0E7C66E2CF2D6F6A83F7AC0E8928107677B572EB9C1B858ACE8BE62C5 AA8955FBC66783B552843A3E81493FECE43A3139A7CC443833B993BE725E885D47618BAD C5A7991F68A99CA6F6D848F21D1A12A38FC835EA229C7C13B08A23631DF149AEC316E000 47980B54AE64A7F78EB83FD3145A7FBFE9BC7B40CF13680309ECF3AAEF20AD5F99A441C4 A1A9BE5105B340F1F71CFB25D75733DAE4000A5398EED783A10FB7CE7AA50FE02326FAD8 E7B64DF5D8660DBC3E60A61A3BA0154BEFD31EC9F310E8747F73B14DF5ECE23CBBCAB66F FE8FF1000A444AC1B5731A61F4B452F8146C046397B6C10F700E660592898B623742918A 15517A154E2580F39F6317F8DA7F52498A10B63E8AA4E741919B77C3FF62862B722B525B 5AF8B5D0A7D70CA211D890AA25473D31850D379E7D88A947530986345FD22F4716F531D4 5CCE18D0FB6E471579E6448C9EE83AF8F876D227CBDEB8D34A443F149E812B4F06F4569A F64D1F6AC8F9747B1006F4ABE76BDCDAD9882FD377D9DB4CCC02511D1BB671D50CCC8ACB B043F83F4B4F9AF2B1ED8FB6F9B8A57B004DA6F83A92F106F0DEE16D51ABD765F5D81517 F59C203EFFA2A882C5FDE59C8C06EFA7BAF929297393F955268E86AB56D8E68A1B7154A3 3B8276F0B026DD47DDDB9688A9C839F8948B63C64BC137FF79A1D05EF5FD8596E981713F 2FFFF4B8648ACEF7CB08605F9F555DB8A178EDB3EA720DFC45595F352D1A79F2890B7E11 798644B754E6EC32883B66FC43C97D8B405C447575C21F11C386BE88CCB2B1AEF7E50A6E 0C32C24BF2DC8ACDD6A93390ECA394DDD4BB7977CAB618B5A9309B0C95824FFF5322341E F7148DE466BCDA163557181FA430B36B227720710FE280810CA365AC973B1D0A98D53FEC 0EB71CA43CF6D3FBCBF6921A94635BE8631D5B25874EF39A8FC92A19950CAACAD2E1D3E0 BA3DF7E88FF3BF4CFD5976D899C2D08CB7FCD011FFC796F3C72CCB80AA735E0D2B07B6BF 3C8900543EA32AD96291ADEA34EFB38DFDB7214D48D941B443A73BE6403B8297C9E48994 6DE7DD473D32906B306CDEAE5B6FCEC54B62B738F1DBEDF0C85163F97C0C0D41884BA662 98816A5CCE16AD6C2068FE3940EB854A4F363DDB99223410A09777D5E43283959C1FC2BC 8455010F9ABCC46CACE55A0D96B7ACD17D8500E60EB1C67E1970213B994E3ED2ACCF3180 DC45D2C13D37EB7A04B3B9EE4C40BADFB07A6EA60D94DE4DDBA5A43A261D2B4871D4D9F2 5F77A9F7DF5F018F706006DE5DAA36716330A9B7B662BEB154A7EECCB4B893D7B8F03038 E007071801C7A0E3B20DDFC8A4E22BA7361C4BA1EFF60A4E523FB8829C205CC417DD0F75 AA294AD973DC1FC84BE4EFE32C9B791CD83F6225B84FC339ACB706E9C6756B21C75FFF25 DBAAC25C0F30C4545F09264BB6F8CF94794EFF9C7B793E5B8F031A5A1DA25C4342F81B50 B4A7AF83BCA94DB34F0A0D706372DA8F5912347004C25286A2D9FFAF423A64D00CD0DABD 0EDB39D6C4105AC9BF4E1041BE4B6153D05D7C0BFFC207EFF4DE191CE183135B81680ABE 063C2DE684CC490F78A599A17B64A598D18A642D3E3C9DB304C0C4BD63EC491F035EEE58 A8F74F81E6BCBD272E28D3B7A17D6E296B8F9A8EF87DF3F24032B700C197699EC9E0E0F7 2892C5C50688A43B5141B22D7E511CDFF2A19B7EBFDBA7A3D4E057392B88C808BE7C49F1 CA92695416D278ED38FB5568371853D3106881C31C7954806F7287CB4AB30B7506BF3716 A76A3C19D817C0881388DA478FEBC56BEED6F2F2FA5A9D72174A7BE526EA5E33BAB9F5C0 0C651C9394076A5F4BD3F33A7E9508FDF0C5952284B63F725C9D66C493E5DB1E14424A40 4CD76C5D8E754C21750DB2ADFAAE336C54AC2919D5EDB1377AC99EC95DC616B00F8E4456 4E4AE908ABE658CA3CE48A40634DDA70442E99BA0D73C2287B18A6723AB63947C34D9993 E8DC9353D1573F9BCCF32722A849456C1513AB6B2B207548E31D295677A97449D00CCD3F C1FB7B3C3A1F854166D044CDF238814163B6CB8C989CC9CA9660675E1472F490ECCC4C9E A95A7DC8A1C5801616158BEB2F39160DC04B59A666007EEA5949AFCFD1AA9B7F0DB3FAD7 96453835F7914EFB0F13B68054F04457D0EFC64AE96A406D6494578D59C4BBD0241E39A5 E1724A0D58B8A206949B6E4D4584E8BE0144881768F96CB0A83D508CB42088726B2F474F 14FC37BD367509A623B5E4A068CD433000F92049F779E4FB9EBD0D823D35EEC6B1F0330E 141BCD4E20836329F2021F628D9E46D14FBB5ABE285F4694AE4A916F83A6C666327DD3C3 4EF82AD35224C7A5A5066DCD9E294F398E251F09423934AD697392CB217A1E8DB570295A 4B853A70C146D1292B686DDF9E08801F70CDA71CCE9124C912BC8C63E726AB7DD20082F1 C9A9401E062F3DFD7C031CA3843C5C124D2A246FD813D0C09F667B418E3DBBE6504AE9C4 1D86511C08AC4D587C675273E38BE78EA41F2668EC7E97E21709DA9DCBCAF97E07468F76 E7959F639A26CEFA69ABCEFDA116FEBDE92FFDDB5688DF58ADCE4692F0B219CC2D82BDEC FFD0597780D33D628F3F00E7ED592B8686BED4CF7CA54CE2FA193238AEBB13CC2C495D32 C2681BDD9B63575440D635213C30DA4B153C615CAB29F5C93F0A4F4AF22A504E568DA45E 7414C6A5447C16AC22C8038D05C82A70B34593ED39F28D0D36E87EBBD88C3FAC74C23006 C79EE204B00C3D893B7C0C11BB1C3FC7C6DE10598C09EDF08FD6EBBAEBD232960783C4B1 8B9552C409DD8C586D1FF41C43B919FBE9306AA799CD048992883BF4B08FDAF601AE9AD8 A625FB22BAE99D5EA332EBA9F65A5726E546AC4D26B81275644043F7EAD913FF8ACF15D7 EFA94A9CBBDFE4BD3DC31E80866E4A50A495438CB8597E0B54AB9D99AB4E18F558C2267E AB2B62922098AF9E0B43B4DFAB34B5A953F7B72E5CE451988D031DE515EB91AD95187A02 B218607FDD56B79314B062A73A38F487B20A3932176A4DA003A7615DC50FEE40973DF3CD 74CE6CA9DAE490350E3D6794B51C5F6C904FFFBD817906CE81859948A7B5397F0F3BCED5 533DA233AF345A8D078B73431A8849207E147CF3DBDDEB0615BCE248AC6F8B9094B75C98 FA97BB22BD4E8B1A083E4ED8FAB6636B80ACDF819BF5A407FB8D0A9B4F1DD2F638AC3A78 032AFCD7D5E2B7A79F36F1BF303DEE49EF56C6F949C38C03BEE40AE874D35150B662CFDB A27C85606EEA6B990E70A6019297234F65A1C76756020E813465955C6271D6F89263E086 C17ECAA5675919BF638FDD23C3D92A98A00EF3BB4B07D14EC2D828C0EE4FBC52FEE96753 222C53158EA3A27C62E5F3272B0405549D80C0CAE6BB7E0ABE8F8E476642068B2A656BDA 62E112A6D3F454D34A06487D8111F4A055614A0B0DF3F331DF1BBCEBA855002BEE8A8F90 41AB08567625E5D8C53B4FA536EBA85E93104D510E390CA528AD02DC85F7C0040EC6CB41 91496C182207A958176A816C3CA624FEDDDB9A00A77059FF0D78FEA049FA28FC3C242068 F7E0ED89D5C3032527DF459AD8B358AC04D0DB984471A94C443668431C87326B5894B4E4 258C5287938B152DDB52EB0952F9DE62DCC07159422E5729D2DF925B4A2E0F6BCC88224B 9F44FD5F6FAE8E0FD0FAF692F95E25F8275398274ADD35C534553CFB6074917B04CD341B F97D682B5CC8D67A53D213B433338F491A5DB7161196E342BAE3030596B9AC5D1D06E7EE E25D99A51DF4224439BC82C61C3060C06BA5FA2E16EDC2130EDDF131AD04F3145E2F5C7A F8E6BFBD74866EFD738F8E839EE3B8B1C36B0532D7D33D08372C26BE5F5C3551DE2CAB61 286FBB120E834F5B287CBAC26E5D1835FF409E480775D04AF4BEA56FEC69DB52FCD2B253 338E95DD1DB8ADD72349A5C4F9EFCA8C088DF94B96B2F1E29E500FC1747765E172A22811 5CCEDFD043EABE598433ADA5104F32299E031FE46600CFE7F41B3466CA866FA4FD34B9F3 D2DFCDC10A50B947219E71B13BEA49E00E40AFA034781B59BDF73CD7C675258325660D49 20605EA65E7AA162BFF0C9EAE3289A5F3FF3C14FA069B17C56F242EDE11E785260083238 89116061CE76095BB3AA8858AAEEC53503219FF30024327DA1C258BE0B9AC072686BC671 BD9556645C796DD15899B021DACA39BA33F7AA87B5407B1D20D59E3F2C5C5983F6884A7B 84BD34FF238FD83582067D0744E9071F4096737BA9BD6FB29812063BFD9599C219A7F21F 6A8EDA657C5F684F6A886DF25C5B27B6CD0BC5BFB8FD180C2CD3397E869408B73AC3F8AD AEF5945969047E6BBEEA1278E2FCE11BA021B4F960112E453CD7C490AA139C13846E0E75 C56079236F333C3B3A530E1C2D897D83AB43308CA4CC172F8D179E441BE9E5101B3F31D0 4988270E57C9F15A485A3ED497CC5049EC66B323687C5E28B521B39469427910FD11476B E123B3A94B205ABEAA87FB60DC71EA05DEE697B799F2BB9196032ABD5FB183EE43CECEAD E63B98DF39116BF6F66032A749C07075F2C2B1CFD0DA806AEF2BD20212DDF6C658891D84 BD0DD5F4ECA3F376DC182B48D51B170255333965894B83229B04C17B7EBA50DFB59842B4 D0A87528AABB928B09CE3358D97EF053222BCF348CD2DB4B1D9DF70D5AFCB8151F2319FF 54AB1983F29459205632C5E49ED8BD56732A6E25B347AE274B13BA76DC4B7F39973859FC 321036AC976D3E26C69D925C8704DE50C9CBA56D98DECA7817E947909EA68C6038D20E49 1CD385DB481B1B5CC9B01EA07FFB98ED1AF5BE88E4E8EC969842755EDC24B9CD69601AC7 91DCFCF6CEAF8AF69A67A01B42C43C0EBC4B2F4C8923AC2BEBD11D98BDAE3595D613FD59 2FCF14E6897FF7005E1B13F4214DC47D366D544A3A5D46CF551F96C6EE8A29FBE5695B23 9B9E7080F29B62780D29B98CFD7EE09A72A0AF680C93EB105135F26D66682F5B45FF4A84 6A72F5283EBBE4FCC683FF5AA3DF95C32E45C21EC290EACF4FC3993C751A68953AC350EA D335DC591A15B2592767DB4C80E3508693448219784B1B379217BA77B220AE0241CCD98F 1F461D43794E2C13B27F0CCF4462A1C42F43BCCDA9C9F96D0214E824206042CBFB3E9748 5B7AC75965C62B24ED27AAC51F4828C1127C76FF17E40FAB1F3490C41C80AFDB446E534C 63A5274451C28E75B6C222841806251FC219E1AA37419941D3F1602194DC749AA9598743 22D8CCFBD7E4FF93087CAECB97F2727390CF74D4E3999EF84E025229C829CEEE44AD8347 A266A4A2A5B36819EAA27A9223081A826830814E559687B60177E7C95CAF0E2F9D0D376E 2C34652444CA9E7647BACF101147753C6216C4EA02F6635F244DAF76D7A2313B4CBEB52B 90F78076D3EACF84B2132F8E6D38110130E90C16FAC27816D1B4AF8FFA3B8A57B924DB83 60F6B55815E3ACD31B92DA360D2CEF12D49EFB939D38530793315BAC49FB81E7EBF115A3 477B47C1F5AF985F7193A454123137103820B24266462835AA5B1BEA239AA009B448D1F8 6C6FB6A0437424E0455B7FFF357FA357D543B46E431FD423E50E1BFE316E89B06A6EAD66 B9C469138883F88469372AA82EB4F777ADBAEF2E6C10EAF043E9ACD35AF49DEE84D1F2A6 3E957B60E2A22D5A5FEF2DFBE1C3BF405A68B8512E59E3D2E9DC3B8805DD8C30D7309D81 9B509741F50556F898A49C48089ABF0BD450B501B94DE15E9C404B362E86B229C755DABA 03A5AA763602CE31882E6B64D11820659EA5FD9DD1F7435EEE4C723E7C4E065784F803D9 8FAE078CA8F821B0BF1F67C613652E53CA644F5B5BC331656A30F04A0F2F59BF11391017 004B97D38ED28C200707456D348284FCC7780B81735299C2704EB29EE2C39A072A91CF40 11BA0A7E596AD7829B603FD20FD44EF8BE4B5D3E9B050911857BDA0A03098A6726EB6C88 E8A281A638EFC234536EF6B3C9E1F192608E402EC7DE3BAC6E8D333DA51B5DD86D18C7AD A95C8B030F15A4C64E24876BC46E54B872858DD773FF5A98A797455F74AA00F6E0781F08 4FB7DC606222B2868A864EBCBE6312DA8A8FD07F4478A4C6D9001BA3D77CBB5D1BAF3B50 A03646A33F45DF9B32FC46AD40216AFEA4F3CD8001A59F5C5DE4BA3E5DA850FDAF7B8562 D9D93DF0ED0A8FE0351E193B23D39683FE1FD681C189989D72EB417381260CBCD3F35645 FEF41752DD948A714230317F6B7AF8A7D847400343C96171D46113594454D7300BDDFC34 7DAD32329DC9EDCFA5C76B88E3FEE5A04A6FE55FE8CA81E8AE50917E995C8C16283B2B87 486F2234E407015C20B6A171A640D0AF02D43918A2DC5819DF14F3527310DDCDE82092D3 4C4348B9B25B3E5BC5BD2998630135459700E80612E7D4643DC6754FC87B23135247F4E3 B9F26349D67BA8F246CB3160340C352027C845A7E3314BADD01EA112F53B3085627FCFB1 909D8094521823A5CFB6A9143AD14ADCFE0D47ADC56200CFACE73C987E13F92AE5EC3DC7 24F31ABE0E61EEBA4A91C8D431585177956A8A04480D522601C3546EE6C4AE11A001EF34 EFB64B0F04CD1EA8AD0C09A381729618B30BF70138EBF03FDECB6321C57FDF4477C8E1FB 2C6B470764F1C0B505691B65032F7B70EE75CFC3C20EBAC46C84EF1A13DF905EABB0A71B F3B02BB4BCA669C022E053928E228A00EFDD1DD33429BC3625528E58410B063022AE4CAF A627D6A09275B3E1436DF2D6950704A5BF86BCCAD5FE8880A19E44B64B323FE73560BE21 616C64CF007AC2EACE28B78651D4716974FB1BE3D1EEB2CF90CCCAA8688C2D4491AC2284 45EEEA8AE0EE44E39FD4B060C9C1BB52D1EF6756FE35C780D6FBA93BBC74CCC8298E312D 3D54C694C81476477D1A70D8A389CCD6BA81E92950102D9A573986A2812E7C9331B11411 521D8A58298364966DEAD9A081F77F4DCC720C2947142EAEEACC86E8B435ECB6E07AC3D5 69825806A274F23CCB2410CE6CEE5094D38063CBD20CF54643555A2D7EE0316618D9C97F B48B03CA1564F0AC546461D2B9B4D1B183E84C71248D11876996E625FE0C56F1D85DE110 FA325B9D08BB5E44E601D69E904ABD0D529544EF9B8C73656AD71B349D897B0A05372E51 74EA5AEBC67B4EADF24AFEBBE8C42752059683B0F716959B7760CA3CE49FD98BA9320811 B1FB913DBC4DE9E8637FCB5B208580E4A2361CE597CF5E89095E175EC1A196A7A4EBC7F3 4318728A2AF4F77EC2F2E03BA6640604AE7362388435E6D13AC5035627893109CEE9CCCF 48B60B7B7A036169ADFC960E5D445D2056A9B8B4A640950185CB19A4B18458FBD7B0CD8A B100F7AC3D45256BDFE540B2C8A9940934DB05EBE845E1313E2CEDB7143FBDE3DC00A354 AD745604DCCB1D6748423D94200A13EDCF8FE2A5A7F2119B099B8A9802DF03A06C613460 2C39DEC7B8D06A7A4A6D03D9E9A619430DA778F506DFA59EB476850CD0FBD3F3547DBF6C 6F144EE62C9685EFB631EED573695E845FA7F928EA25A54A6812DF23CF58FE1F406E42FF C80476B799B19EC1EF03A367B02CBE4E33463CE5C84BD2AD52B127B3C7258B3E17B9CFAB ECDCE75AF3D712A4F38DF0693A44793128C4EAE914392B11F6947DB4E54AF284DCD76748 1079DEC30F11639A6E8C43114EB4E029E71BF93F9788569C7F0F7C8AB7EA07BB508FA7E4 2550BF9048FE9F04917B2192E8D6DC3136A672CF8E9C808F82ECD9A07EBB96F788DC18A4 D40F04DA6A5D9EE0F69C5DC10A24A6D4F246A7DC6E1339E8848019D214EAC710AE0772AF 739AD5191D85847E8AFB91120EEDDD47FB02319FC095061D505D69DAA48BA9B32DF4FA61 9BFAEF9ACB6DA0F0113DA306F3D4D690E073CBD236D119261C57E807C0453E0B315CE896 AD2E515E4F94F787E94273F94376C779BB3AAB587768AB0EAA4995324EDB0BC600B91EF8 307CB65881544D2813FDA64792AEA90D443BC7ECA25F40466D5E9A158C4458C19DC87806 CE7039E2EE3D032D5A7344D08224B1C386F8890E9A46E5BD9FB1F6DA795FDA0181162C9A 3688F5FF4CBE8104CD9BC741255A06696ED01106758D4DBB67350992DBB66C80CBA2AAD2 1218BF3DB0C29BE5288C9ED1C9946C395A8B461784AB244FF7D03307B1D19BF7D3B47EAF 84BE4B74460183783306012CF33D3197B1DBCC1CBC76CF0376C788C86BA67DD9427F11A4 4FF41C38159C6B409E5D8626CF3DD88908DC5BF368435761E87487DBF1EF9A2B688383E7 1858A6FCF69BC845FFA402F3517A045B6F1481512CFFEE4706CF1E366DC0C48C13A7E160 AA78937686228AAC23AAA88187D31BB84A9EA4DEE91362C5D5913811DC64AF1BC13AC25A C1DF2C34F637B749492E6C1A91C43CCD06B3C699E8BF2C915663677F4BA515A121A671F6 B3E0DA3AD3C78BE1E17E52C0D74FD0BEE090ACF1E304D8823407520B3C57E9118137CBF8 3B734B6EE6257FC150C69671691458FF6C0040A71CC54DA2A89A86F820265570EEAAD51E F623BD38A4194C0A030688017BABD230CF840B62C4F4709D6A186D789E06332A33DBCE70 BCEEC874E5D89FB0B38F789035CF6DA051E9DB10C9B919B5096146C47A23C8C3AB59C41D 0BC7684BB84FA2A55DB7889F3FA64CBD440DC004C2BB0E4281AA9BAB5BD9E5411B365F36 83DDB336D75E73C2CD9ABEF92C85FD564F88A8C04C44287F6905AD9C0A18830B374FE638 D11EE04C29E33F54FA6ED3D725DB5246C74846BBFC5730E47881B5B4A9827F075A9C3758 D482DB0A7A5ADA34DC255F5B66334947EF1879890B12C712119D59CDCA7D131B502DE1F7 9B3E86FCB202E2C5989D0D70E762712E062B25DF1278AA644E398D6B63E4AD5E259FFF9B A80969604D6CDB7754158813EEBBA7FAAC64AEF37537A1EDC2B9609865E6A83DF66EFF69 83F574F3B4EB96F3754E973277CC25449E13264741AB27883B4B8C9FB2F1B1FEB8107E27 7D7B6AA6FF233AF6379F6EA76BD6D01BC66402E146C9F958E1E55279D8F4B2D9032BD8DC B5B7058F5F2AF25DDFFE7431AB79606223F6225B3EA2DD072542605B0FAEBFEEAF5C1032 F053C260DB9E293A4492F188249BDDA034BC14A12D2C4453F647B572126BF6D9434A170F 5A6999861824713065889DF5102657359548D6D3367720718A144DCFC4637D49D92A01B5 314501D508A39B140AE6140646675AE168DCCC228E5CD4C91A6D27307CEF753340478A96 67ACD7B143505CCD8DB0421E0E13D2CD36A226B7C4D10B63F2D386F733733FCEBF273559 30EC7928FAA673C366A902A564332BD5C78FD6DE9A51C5FCB3389DAA6BE4E3460F803BAA 0390FCEE3BEF3E54D69C5050B208C3450064E94DF1D1FF77E3571112ED3DCB1C96C40C11 B5A43BFAA0C91B60A3ABB98A5D5CF910436F4015CD4D5DB7C14D9DA70396F0E8FC9ED85A F3C745B28C17528F0B3D5CA699A5F8F5B5970AF9BA5E6836CA399ECC4C99DC61282B47C2 850147E103C12813EA3608C23C295602263C691CB143C8D3514B52D3FECD5A54901C292A DB77A327815227101E570206F65521DB40FE60277A86F7E64AA3A09F895F021507ED9295 90896360C51A4F747005DD5007FC66351E3C133CA7EAC83CF8B6976AB30289B3DC7092CF B3061FDA8280977904482BDC1EE602888AE4E5A265AD03605F2D810F0FC4DF3EB6FD448B EDEAC8DD7F75A1DF64DD00BC36C55C2B6C06C328304CEF7950DB41DF02C16CD07BCBC95D 96203CE7F30BD1699879C1D8E9C4A1A3F484CFEF83678870FB601F43762C7BC18866B520 12820F5DF7CEE202D7FB4F605F87ED94BB8A52CD54A64834AD56F6BC972822AD612B7C38 8A305BC7CCB53CF72A7B68C9BDA0A4252B438A83B0A48417888A05F6F6EC0F039E53CE3B D3F52B83369624D9BDCBF694E06A9AB142C50BE9E4A7CFD12948C22E194E0E1BBDECCC36 8295D3A4312742416AE49199B8A6A4FA63616E6C8ACF2C0422F1CB873EA010444851B213 56A1E57BAE7DCFCB41BD79350D971CA7DF3F28F307BF798949CFF0327B9AF9B049CB77DC FF738F7F684B48A385E1A11551B0BAAD140EA16F2E6777292176C7F924B9807D813AAA48 99921D48A5232968DAA419A8B4B6EC8A2A1184CC345B454125487ADF701B32151386B051 4DAED4AD7916FED02F35DC3C5AB8ECA5BD85849005A00A4CC099DCDAEB793D4B5D8739E0 25C1A0DA3BE58188E0C92DF4B471412602EC4049F4D25AB5B6996FA02E924B36511CEF64 EF29C6C570EAC051966847583A3B1E1FEB19C2354AE992FC32155B747074469C3593E3FA 0246E5B313E223E958AD3D3436675D0AEE98C471A776A062E2BD3DD57955B6A71AFD8B26 E3B569BABF25A309530D1B6383DEEDE6D401938E5D146DF2B79E848908DFCEF3CDBCB5D7 8C4F3FAC613016E5B71CB8E1FE2B22A7DB7D13CFDBD836C2A5A124278F787B8032AC8DD7 93011FDD3D4FEDE928CF95A530EAFC2C3D1CBAA31DC7118299FC77192D4926CD929A04B8 5E09BD326AF0E83D28FD8FB71B8288FDB095C7F4F1BE489EF1E52BF87A89AE18FA3D1F9B 3606431AC05644BFECFDA2F9CC7F8C32841A657054D48C775F06E28345993B6E7B734A9C 8CE628B68AB239579B48EE7E014523A98C3669918CD5BC7ADAF0A6B9C0E3D62E2539A90A E7B7882D3C252CA5FEDD54CECEDAB68A80ACE157FE8AA1A9B1591846FB80EA10AAE70A77 39CCC27236D597CA84B9A3DBB8EF795AA5B4EE35DF83ECA3EAF79D29AA61279609B99D31 5D126A85AB84452E7FD17FBD0C4C9B4B824CE4B32F3A8017376E3BF50ED265951D87F0E2 E977AAC98131BE86913E1337090D127EF36E916959C8EDA89A9D5C62A2506A2C089820AD A586A89DCD6D0384FDE2020722880B516BD20D795DBCE004686BA490269564257FFADF15 082555CC69805B7BA74136E37F2D3E4CA9040D5A10BA676A5F022BACD2BDCCD305F1CA5D FFA5AFB3E06B2FFEE9C247CA5DE9AF2B052C771891FA3A33EDAEFBF20FB3276C2E9B598F 71C7B9B12A7DC379BA2F6AE5684D76FAD39A8FE41298E9718B3171B2136481734FF9820C 7A8107E78386F71F3F2B5E98CC99C1D79647B2D247D21978A4C6D90031ECAF69C5ACF2D8 EEC97610E23B999C3E01CE3ADD730EBBF12D8E68D887FBCD5A3B04EF133C0E3DB6D5E098 1BB89F852416B037D3095BBA1D59706F4643832A35E2E4125898F08B00127FFA4AD7708E 5F1873634DE315FEE2EB91B1C900A68AA3B5620C9A65AF46E67FDE9F4C1C9FAADC844CC7 48DA145792BF44FE859F0FEB53916B78F0F06758FD972C298727570617BE68B343041FD6 9DDFDAB1027DF3923583188A62815D8BEC78D6289E615F749AEC57B9E55599BC495F899A E04B641E86E6D05C03FC1B339351E06F975EDE539BF2DEDCFA0C9081770B73ADD1D9A6EB 7921F626485DA5CD954C1E35818F01A2365218629493BFFA1A263BD75D63564EA5B08F19 7D219B00715218EE74531DF221FEC4D5D7053E7937D0890DB36973F74760CB1C6ED3FA26 03FC54381B8BD11555B84774A3B0879D0CC84BE77B822F596CB6C3A83F6A18E5024C750B 1ABE8E7C1375FFEC28885653236EBE41F7E4C93C7D4169A58332646268281F56CA338907 9AB48E6C94526216075627B01DA39F61F521CC49EF4BD0A82A12D8B2247F612F6DF71780 A3D4C8A868E9DE6ADCF31BEBC48569B4089B565965935C56146743CD427070BC6ED2C269 F65ACBBBE0DFCD025DD4858633296005C0704B19B590F88A4B6C5C12A3497F5BC70BE394 7EE295C159E8164A8522E009A38950C4C1AEE628FCCC7D64E08B59C1D626AEB530FDFD0A 5FB461041140B8AC0013030F570DD37115F0824EC445AB208D9A6B9E62458F551BDF8DE6 E4ADBE914D331336B2A1EA5B7FC20ECA4D4896F091B5FA35ECA690B4FBBC6540BF80683D 0A8A20BDA7728BCC140F5352C896DA277A9FEC6192E9E8F4719003C8D0EC0A25F6AF33D8 3DD346A2C019979DB9D353D783841658866FC6D8B3F065B1A92BA8DB37CFBD2DA97EAFE5 FC516DE0D2C62314F759483047628D429DC45BF373B73BC05C7EF7BBF923DA7608D9E02A 0519DF6C91CD9411F80F6ABF19CBDDE617E95A8E1ACEDFD7835F295C5E862DC3AB807C1A CA80910E75E18FE6C669903C82D0209B744E1202045D00FAA296FFA0733567F581DEDC65 08B9541F2CF3765CBD733734AE29545D4C8B2E6E72CA29A0AC44828B9BA17069629AF56A 48F82DB5B682A214131AAE64475C139533B352F48CCDC150922EBC3162EDE3071CD89E1B 60C19D55BC4230C5CE67B9EFEF0A89943CEEC5D2400ED47E014F408823B3B3FB8CBFD246 E4B47BA604C2E296A6F8DC804A2E8DC8849EEEA31F24B26815D6EA014875E0F7872FF90D 11125D93E9572C465891EB143E461C4B7745AFD3E49489864274A5AE197CC3A6A22E1078 AED57924B6DBE7441667B2DE00F2B04FE19E04551379A87D2B94D83BC8C0CEF675493B4E E07ACE7EF097E4590C30D69A48328E9B2B94046E90909B9BA95BFF343EF282F9051E4D60 E88A8FC3311D384410724623D5D3ACB875D9B95C684546EB8A978CBBFADA513DABCBA3AF 360AE18FD3E9888CE6998D9D48BE91210979DEB57C6D0DCF023F76484D60CD1E1C70C786 CC0D1B33247788E2111F47A690F1D74CF32E3C1C74E469DF1908381325AB2851404FD110 56AE451E1C30D82B2A92E448CE46AE04A77795C2835C8404F512DACB2B53BD8098B07323 A2A7A0CBA7EF8C8ED26ACCD47CBC9249E7D29EBA124129F24E951C11F950731E9B6D0C53 19C89798746972E1E8AFB16686F85CC997C9D9BFD233515705EC8A87E0831800C143F9DA A78F9317ACA815B7396EDF5EFA1A88A30C5F103518E537B55464B05A76E928D623AA7ACF 02079143F45C146290F9CDCFE362E4BA89F9FF24DCE423B8ADCE5115962C689DCB7D1127 1764A7D1A88FFC02298F1AC98343F5E6C01402403EF4F1544FB38E1600CC4B3A55B02F86 6762154ADC8A065EACE0CD9E0F684E717952639C545814BC26E85FEF55DC39A2DC2F1F42 A1F5A8634ABC888783313332838EB381E340F12C999610E22A59342F01B945976D1D6CD2 7207A5180828AAE2C4A661146A98AA0D59847818F56FD4865436FFCCA6BA13F4741640BC 4C9BE51C41C016D97D43919BCB15D6C746DFA4A8964D6E8A7C266F1527FCB9A6BA8E2136 6D9C5DC36573F283592057A7FCD71B5A640743655EC63B0170D1347186ED35EFC824C324 21A17236835CD152E676EAE5453845F702A60E906FE54C9925479F02C45403E6DCC87E26 BA80054C1C6922F53A55D50869D7E960B97C151D7D1510A4987501E0219B98438C892140 F749995A27F5CDFACC049A9F47C6F2C546D59D556DC72F0F607CB9139BB1D3A8FFB8B7D5 006E8A84DC6B33A09FB0A52FB659D5B64FA90BC15F4774B2AF394532FF1DC7A8943645C0 BE182F836A5B47E5F6062CCE745152F20B2638DF6FB425DA064A1FB959D343B6CF0840E9 721CE609DF06AD40AB360E55EA95CE6D292F0F648C9705AA74CD15932F7FC19C4F7AB1C8 FB9AA802B2A85C822162576828784FDB85CFB1AF9A225B098A515CD9073BE346659B0B19 BD5A8AC46D354A2C4FA454474D0683E0E06A96F559969CA88BCA5B0BF4F071F225D6DF49 4878BDDDB867B60554AFFD0E179688E1154235B8A91B1116D91C2A87A74859BE38A5DFAC A6588D817241A7754824F863B3C4A2F4D948994EBF41C2DF29A57CB378918E39F895577F 8A675A0D7E888C0D6EEE3BB35FB601102C15FA7B9A12C244440269AD7898AD7ADAD0E756 4D46609116CB60C8257A396E9C4A0CF27C9C672FA00EEE3881B6C02672CFDF6855756588 81DBB44BBB4E3D69448BDB821F981F05C29920DC5719275C98F0341387EE2FDA62B8321E 4C62E2FA4D2310A906BC0D097BF552E2D1193553D4ECCD2632B1A57317AD601030F624C5 9F8B1230AD928E44EB781332CB5DAAABC217FAC37D9043EC1CB4C17AD30E8AEA8F4E8B84 792E6B1575C31777F83E5A9BCD0C11A03C4A25D95D14824ED67074CA322EE532BEAEC2B1 B359271FB61E61A2DD813EE2F9863BAC2AF02F3651D4A1A700197FE8D03AEDF8BBE99164 176EC874976595D7CE300257631E8F7DEEC4DF97E3168D56E88814E5F60475DE74E9C7A1 FA05CF11DABA8CB4DF2CEA3572E88E1195B9558D70B5E7A37299058D950B83B1D72937AC 300F47D313274E5B22BA7CC2B1D41649F625C236F9A4E31E16514C05057C95601FE163CD 10E80C2A2E9848F6B2AF9590F73614F3C31079AE191942B18B5CA8486F01A2F6C29A4261 60F36C28C83AEC2F4F63E0D59819A9169EB89FB24C1DF8BF3851D34E709F1D0E69461DAB A20D3A4C579AA008FC5BC42A51F7B21EE19A8AB5675546417D6256E37429E440F8F2B203 E33BDB5B90AF5A08F114557743BF966D98B7CCC04BC2289BC14A96C8040ABC56B290FAC4 4CA97C30883977F7119B1708709C10FFE9D2A94C5B957E62996B57412BC6C4DFBDC3EE0C 85B70FB0820E40724908AB95CC37BB2A9CE5ABBF4318C63C678038368748E91B27361ECC DB72D529D61A0B5A46339DADF8E6939F06711E4043831BD1E625F02E0BB0AC7B89E0840D 31F93B44E50B91DEE7922733E84F1D63D0C2C5EC38778211DC5AFE23BEF8D5841F2C32EC A28E110E2EAF74D2B6F297479303245E06F5F788967FBFD157603A1508391D2A9169C13E 6D40BA7DE13F7C2058632CE4D0744DE94E189AFC627C336E7AD86B1D7D0ECB8056D6211F FB1015310CFD5A1A2DA698DF8D895969C04B3DC6A2041823535C7469C3535D65CC7C3BBC 0233187ED98EA9F15F95FFBB38D888B0864EFF0A2DF74294FB32FFF8A26B635C81C3B8B6 909B897A0156B0A56C64A86BBBF3E6946F741F49B75558F9428B6B7466FA12430A5C73F9 F134AB2D654D22666DADD603F9E77C21CD3273C58D11A3891FE4F51872B4557002D324F4 88E5C7CA36AA33924C18DC897AE63BF184BE824CBEE8917F784FF7A0B2276CB6A29C64D0 ACDE3892E5250AAA7764D8653958BE7C3A813AD7BF99CE91B2D6A1D192553AE46F6135F1 6BE6048B80A6273AD6738ADDC59D297C9D57E0943E7BD8B2350C5D170A85AB00BE10C7B1 F8E96F0137F14F233DA1D7C4A0F9C2FC5D217C52BD09D6AABD0B3C9B9D3B7CDA335C3A56 73943A570326C52C07A996A7C72D0711D665C59CB524C7CA55E47DF74AD1D7B458DD8F57 6263552580419D951EC4AB2F989D622344F935305F7E4EB3FCFA4E24864C3795A07A5C5F DAE43A77BF75621AD50DDC950C838B6144E2FC5445722CCFBA82B9D4444F3059DA6FFC00 C948190D2CABA133E77C291D07A8324FEBFF749FA200B5140A5420B31253C837ECFFFF4B FD9A3317F649CE884E24C5D8B989737D59F9F0FA4C5A061E8B3686E43F714A0E9D8A7108 22D71C149B14C17EE8AAF3C6A4976E17CC1FB0342D23CF197A464D145BE6A838AF86B94C C425227CCA62BCC82F24B762B19A39507FBEEC505BC6ED83C149C28B2D06756D64840208 E5A679D06D42A37C0AB89EC8DFFC16B0DAD532C42BC566B09F516B77A4F393D87E9D09C4 F8DF591FC1EBD4A8F0B737CCEFB06007A24DBA59382B0FEFA1EA4D8C16C94696A5A4F3F3 9017122346064AC696E689911B090D87361A368B641DDE5251166C67B74396CF534E7A36 0BAEA5D98FFE6AD704A70A79E3B7BD253D61A98C37DCEBB89EEF0B492CDE9672A67558B6 1D2213874D80BE80F099367E36D5174096D5C22B730C77B64343E0F04CF92B0FD34BA786 D540A7D9EAAFFEEC7AD1B33127FB0C6092940EB16CE09F7D85B98DC157EC1F93F72307A2 12ADC1EB565CE2891CD15BE117DC91B7AB5B9EADEAE11D4688518B95D65EB8D8D059669F BD1FE42F6886D6B2BA6213A16946C1A3EAFC4CFAD8B38996B694CAC4D1B3A9DE729D0E06 428CF318A03BD2FFD128935F1CB90B6F98BF20449A3D9DC119EEFCCABA1A839E98A2872E EB738F999D54293919A707CC75F5D99CE891911C72B9744BCADEADCD0F07CA0822177CC7 50CF064876E43DB4D9B42D789173530B161E94FD8228A96D8021488B61065AC8C70BAC4F 742CF1D5CC0E7B464EA009DFC9DC86C699F78F97DEBED4389157B779A5AA26C531794E6D 4FE317DB8A32C99B92A375BD62A3EA2792CB1DE8635280B2EEFF9BAC134C1397BF08C948 F406356CA0AA84D56C0911BFF3C4309D89FD8810CAE057491D06C0A5DC3C5EBCAD0C9AC4 A80CE939B38078E7F06796FE0FBD52C62B2506169B1EFD58207139225AB21821E0AECC72 E7272B2795CE46FFF376CAA74DF761B7B27BD3EED40EA7E930C01724A8711FDD9F578272 DE05BFEF04852EAF5E4C1DAEFCA525D202E25738CF42B43E87AECD5E17777F8CEBA27AEE 9CC6358DC09355370A90BE1C06E9BCF7780A24D4AF8EE94C8D5EC4232241CFCC1543DDDA FC2061EB6E4FB08C209903A497AE213414F30886FB5258A985A87D6283C7C6CDF555ED2A 2181F67A34293F2AD2409BFA2E46DE15160A09504392682A4EC100470E8848685493BAC9 2EA3EA6F16C28993E67BB0B8F84C9AD3B5BFF65EDB2FD80EB333A2ACD0117401286678CA 762DFEF51C1C0B6E429C3E4C72243A2F9A775C53DC0B878988D3AAD1632373BD37F164EE AB6ED477E7D91FCFC8347E0443325DFFBECF7FC796AD291A30DCB703DA32FD70FA0C8F84 2047728905D85A9956AE52EBDB37A4272DF7C9F5DB474268A0F70A908AF8EFC8DACF6ED1 74EC56FF96E6F44C8EB579F96A3B9C4D7FA5D581613AD2E697BF6E14BE85CAF3E0D564C0 70BA82966D39EB51289A655BA1FB9D55C03BE4FA95F94F478097C776A82E558EF224639F AF8533EB4DC4E127AAB036FEDC6811F557B9BB8535025805AC4B8579CD060899110AB80E FF2C3AC052243FED41FAED0DBA9296562AF8FF6442B3418FA43FA678099F8249E8A737E1 889A43F8242EA9018F91D060E6ABDBAC8E33AAE00BF66B9A6675CC2CEE4681A872EEB8D4 CC59B68AABD8DFC0F395818827F30613D4A09A0B32348E39BCD448D9C88CBE99150EF30E E26B6B8D0413B4B2CB2B2E79FDD51E37DAE1377F898B7BF01D033AC2402DE57B46A2BD82 384086D0BB9B813FEF80B12C056DAF5E2C93D30358855AED5BDEAE69B8B87822D08BE09D DEDE176F1C32CF37231D69078F5A2BF6D1BBA0BEDADACA691A5B3F860CA4C2666DFDC141 C7E0462EAA7A942FFA5FFF8EAAC63EB399AC8288B4380DD44AECA7CCCEE174B8FEC444AC A3CF5E68612F2C888A7D319D8A8899081545DF856BD8FAC763D094679589113C56B4262A 32D81DFEF6C77A6E431969BA130245071ABDCEB5A378CA85CA848170F7A72801A66249FE A75130E0810E2EAD70B2D2C6EC727527DCBAB1105E94EA00C6E43CEC40100307FBCFE29D BAE7198CB8955BE7BEA436D2B1C1D2DD793E5461FDF609E3CF88775E503D985A9C5891BF 786FB0FA94A4558DB5F6707D3E63A1C3B7B4454ABCC0D2848927215B20E89BD1F94F4063 872676DF0147757A50779D6B953D1037B734CD50403039383507417125041165B44C1941 59C2D3B9D637AE34B6DDB948B3BB0F491AB22D95D683B384478ECC40D3CB97E342A10E63 F97D53CB0C5972EE24AA4FC9A4A74C4F5EED6C666E7033E094B2D420AC52C9358A28F5E4 0D1BAAEC6E6AD960CC28B1714D49D6CFF3832D911032AA9F9FCCE6E811F7677CB6013EF7 06792BC0D9DD646D9368FF80E382A004B467EBB1A9B2C6EEE8C9E99C5F31AEFFA92BBB6C 2A55156D6BBC1A46B66F8267A6331B74F8533A9FD1F939E6148CC8FD0030BDEFA955EFE6 816E6943E507E546F6551E45763C48E5CBCB043B96FC5FE4168C4772CC749F5FAA1008CE 8F9B2D8B9FFE2D9DA789213F4BB8B8E6710BC08D98FC5A7A9AD71917A876D3842055DCBC F94466B786027E6A67A7A1B41CBA7717A20F374920A81F247EA6DED98A79C1E3D4FDB695 145552003785FD852193C08DC6F06F10F491C21E0BCC85B3FEAAD29FBA18985C6DB68E13 65EFD9F36903BDB920D1E8B83DB715B289BE97DC44223F5C7C897600EEE49B65541608AB B091D02C96FFB88658EF2D265EB0850EB1043DCEE77BCD060E53FBD5181E86F0DC598575 BBA8E0680A05655E4D2B2724F59B0362A3CC37CBB5F2FC399D4D3E17A8DDF729EEF80DB3 74C71F1C2B50A388CC0C1FDB802F9A3C4A99721D25426D23FC672860525E42574270CAAD 471CE593C5A344AD5332FCF1E95C9B7017F8057A1B5DDB360BB9C8A17546979674DB85FD F83A175EE508369840A3A2DEC760FE30D5B3E4D554FBE6D58BED9585E9F8391D2AB2A1E7 657DDAD5E3CEC84E7AE0E159011F11F7CDDE784096C72537C6C8B8C1B88156CF340C563B 0A0C3FE1088D0E4F5B75620893FFC3722594EF8122CA1E84D28DC4377D9886271BABCCC5 BA1EBC7E65E2A1C89122250C870BBB41C2DAA531C8E50587C68C8CBA4C37191E2E8FB7AF 2470C3EE520846C0972FCAAC1F18063DA1806ECCEAFE6E030E17C4C81981371FD7D095FB 1560313FF5E4623F041F1A6B3D9093D5F5415D542C65FCD9ADE86B95784F55CCD3B0FA75 B355B0CE8F83D07B33C6C3FBF4B99A2F4F98CF7436016C2EA21BD312B8DDA32FE2A014B1 FD39888F48B3B6069B3EA80A22C8B567D81AFE555DF4363FEC2C48C9A1A28F049C1AA012 2937811B37C504AB05E95DDB239EDD3F8428C771BAF63E4133AE1E8D47BB08F9C131588A F7A3EEB996D54998E459131D9524BA9785007AD21BEA9320F0A093AD83781943D9EA7D17 C212C4FC3B7FF0F469471720223E4057A343125289D81DB46CDD4D4E59340C6EDD06043D B2973A3339DEAFC890DFA41C4A4E5D3292E581DF17931A6B6907E40ACF5D6A03360D7028 F12BEA6F040A12AFB8D2DF364CEAD1D6E2A982BF1ADE7B63A947E072DED6367652AD136C 7691EAA4CAA5B3DD0D908B0E3C13F2CC931325FC9665E057ACF9CE81C8BE74E7A0F0CECE 18C0772EA012D4ACBC466ADEF189B423A45131234B9833334DFB103D6C86739A2722358D CB3C880E97C7F75694788E606AF363984B86569FB0547A1BAB010318B5E62D0EDB092564 237A1EB539D8F58B531F526E3A7AFFC5628A050E9ECAC3C0C3FFAFFA7DFCCC0C1605ED71 161347B1338F5F8E26852A32C28748D7DCB5B29EC00C2D4A2A0B0BBEE5BE383AB1DBD416 0AAE5BDE5FAF0FEAEDC18DB5C46717176641913199FD6576AC00472BD32DAEA08A68C2FF 632961C1212C7F2F6ACA4D6E6730B203A881B689FC312A380E5E0A8FD4490595309CC716 B0EB154D8440F3B2888392904D50340AD071A2929DB0D9C289E6A126C5405FD32BFA8D43 6ED14DFDBE3095FC5A829D6A21AEA7FB86EBC20CC16A3EA88246E7EF067DF5692028E4D8 019F5FE864F8811123442C525DC6F0ADBFCE7680F9F73059C9D8868A1CE47F00B1BBCECF 85E04680E72FFF3B640662FC52237DC0B17026A27FF53E4DB6FF9FD17D8C43D42D0F293E 1443D4E95EEFAA059C8457E678A0C5CE05987AAD80148AD18777A74D869BAAEBCB51829A 4CFFC87E05737DE4B5B7B981A360D66AB7A0FD96DB76907A1866C962246B32B6041230B6 1888CE8A15474C0D262D6A61647A0642A3EE303E6B3869D68899D2FF6F48258E5A5FD962 D780B8A65217B30FF0B6C59F9CFB1D9CE3AA1F92DC733FD52FD4F378C11B22734233D3CE 84AE9030BD25003C1C71008990D06B30A92BE3B9E11EA9DABB6F6794F955509E187F822D 67EF7DEF14E9D33C0E77872BCA46C14DF4F21FA3F8B7874C42555B5BABB766CAF94B0A66 CF9829B771B445BF83BE0AC599EBF94A38A74ABCDC73AC55A63AEAA378F0DD3FDE251BC1 0144DBFF24EFE5C7E4F309F3837E622F441329E2F1F58386C570BCFAD8A7AF01452ED2B1 5ED1660B14B361FC53F92046E0576B065732300374999B62926539171EA9AD06661736D3 878499ED29E21BE21260569D2B6DBA3F77D3F59E35FB32367DE822BA5CED3538A7A8A9A1 C4106B618B55E747BEBB2244AF6EA47CB31AAD182781694A755DD677931AA004DF8909AB C0CEE741992D6F2DA6766AC3362E4B26F5896405289D487736138FF7F04D12E101B92F41 C9FDC26AC4342167A4E4233D7B94032CD2D2E83A1DF278C44C9491D63BE746ACFA500ECA CC329F4F4D6836AC5CA5FB264AB114126FC6816191B8919D64EDDA7DE1B2E9390F5D0542 88285CE78FB7B770DFEF50F98EB2727B9B6A95BDCC9D04237577FE1D449B47D1015533A8 1B0BF336A48EB45A2CFB7E0268E28527BA83DD890168CC201C9A5A43DC28211425D20935 986272F4400ED6FD2E22BD8A0DDE3AA531BD38E1145ACB425A1764C8A4DC4486B3BE4787 CD1CCEF7BC6F49DCE5B2CBF4FF5028CBA4DFDB5160C252964DEFABBEE51D8B86337FD872 604F522B8889A9CA09922084C84DF05C30E4A642A5EE353C7141F3D1060739498896CC8E 529FFE84CE9C759DDB2A3F841A577155878C8C95F231C293C0EB1DEB188D14CFF9E58FA4 F3397E5907FD786800CCBF0C3B34714A906490AE47CA381ADB449FFE74818702D0F22CB4 0A700133BBE50AD6C7E6346F2F5B917F7E0E2B6282E6AAC8E92B8C2EBD2EC2AB44D3E5AB 06232830ECE975ED8B7BE1B3D48753C67D79F685410B13881B5AAC53F2EB3EDB0EE59E0A 31157E3630D83F2BE94BBB5B5325D64B8BA68AD39CBA518CCDB9AD2121C616A8920E67E0 B8AFD9CB890080F6DCC19C8E69CF00FF71540244A352FB80FD2C3CCEE7E3C8F162D3391F 06CFDB973249FAF4AB2A7031270446D53544DF1C73BE338B375023557C7C638CC4036B61 26E48AC55ED55BF9A6282F9F1DF1BCF0F431874839EC9B74EFFB4A78BFA84027657911CE A98FA69589E72422D52822E03F3D7CE27D5708FCF1CCE39755B9231297593D2189859DA6 2F8B907BE6D7A64AA63B3A329F6E96ADDC84CC6F61F1E03B3461BF22C3A06887C0A5BEAA BC46B35FDBE3A962F23D986F11AE98753B89FA166ACA3F3829FAF5E7395332BC32F44E5E 78AC051BEF76809EEFB2B34F5758ECF40A2368F6215E7E7156D2E59531D60D520C8FF5C7 2D2CF1483F66B819A65574BCF6B6F5D7196F2285FDEBF0ED1C59835EE6A5FD825A8A27DA 3D10A807C30656692CB2B56C91E984EC8903BC1781738A3E1C3591E2D826F72FE9C9B8B7 BE2FE5884FCE00A5A1DE7D407BADC06F7C08FA8F1FE0EB8345327A925CA23047DCA4F320 089ABA43C59DA44E265E2B6D784BEB8352717E73319494C2DD0171BE4444D6BC124C2638 DFDBA77A5C3A73C52232429FF3C567E8B98B072E2CB878B72E6135B41B36DA9129057E7A 4A47BF8C8DB133E5E557C0F46FF4A3D53460BA8608DE767CBA1BB56E18C93687F4EAD051 E83A9EE74560B03D89E17473BED75A73557332FBBA1B7FCB1E8873B90FEAD4ADB4B19ACF CFC6DD260BBFE8E6539E6DFECDA10F86B9C5821453A5D680FA5C1930CDB43274D280BEC7 FC518281CE72A352C573F814F38E7A13A1B8BAF4F16930C318906F7AFD0B8EF37247C6E5 50E76D883B3B882C087CD12EA0D2D362331370D11BAFD535E4314B581C62732182DDC447 571BC18F8B6964D9C4E34B5F2DB4841365EAD6BB0D3CAD3499EAB14E6D4859223F716609 5039A0ED0741C75FDBB3577C17B84ECCB252E703990DC44F56F56A71BE8ED58A22F0CADD 5A1CEB68C5BF83CCE76D488A16E274061A52C90F0D9089242AE972E1F3804C882E5ACE9E E6F8BFA10B5B382E70C8D8F31E2888C3712579FA0CC821F3327974762A48B358437D6B5C 499A1F8ED451FA0733FE0BB74BBC5BC27F8DD420CD8278FB9E9B865047A0903A1F5D9E0A 32851712B6D6A8CB315C794A38C1317B034D4817E1222265881774E11FD7F0693992D375 D1AD5D2DDFF28EA52C1E3D0273D2A73EDB0F46222C2ED5D002FD2189DCE66D741E057520 2A06D137F981C653953DC66D9A422911807DB4686F5491FB73CD6D7EFAA0BABF0C8F2148 EB1A0C8E7309E23E09E9DF326F25919BC4F76BF379112B64CEBFA44AE2E5012BB973A733 9D9AEC8FBA0BE3BF64D6EE2BAA8BA8D56913EC365B0825698CC27B81ED32B2A8839ED9F9 16F2348F68747BE09F8EA2529D733ECE0A6607653D095A015A67F5C50AEBD2EFC581B9EB E04A798F2E860054FDFEB66654A4DF59681BDABD824D8002C08A9A16189333324EA0D140 79AD525A5BC97A3DFBF684A4EC124040D914FE2167A28ACD9640D5253A51B69B568A42B9 1DE088854A72A6A680F194A7C6D3360EF5536D54A2AC0ED16F766CB69F177F523685D7DF A8341FB68C8CBCC93BC8B59D7983107E47D40BEC8D0364298552AF32BC4D67D2E88BEF6E 5AFCB4B9EFF6E5ADACBCC26E15D2A14AF185B0CB05570C17CD8635EA350E8FA67A6AB82D 3660B3D5FE3806DC9394943B990785107091680FEAFA29A937E23EA6DF55BEBFA4072F2F A45E49429E60D29B55667F1C0DC67ADEA6973C01B0A72B34BC42E56E6BA669A094E05AC4 EC282CDBBA1B7CA6B47FA5BD227C0EFA530DC947C194AB2784BF330CE6E32A1F7870BB71 04BCFC821A45176DF23D35D8400EB9C71F2E3AC2ABFF0EE5D8E65A26786394BA7C7D7196 28F49B227002800BA75A95913679CEA1DB223D361F980B50B346E53D5BC0927CC93B3FF1 7D3A0995D279EEF8277B9E948AA87A80742D486D45EF87E6DACB39F50D0590B92B5AA4CD C7506CA42307F155FD087EC285634A6DCBB447E02176867277CAF6A5D044630201789268 98BF46CA6B959C6818AE0FD6525AD41E643C1499E648C68814627E24376E34907EF9B8F0 3A11815A4004B47FF08D59BA939D42583F5FF582556E75EA007CB834DD82350F49F6216F 14F52ACC23353A499931B3BF3C96097F86C537408196A9F60F25FB7B3F35F027741DA89D 91CC906FBDA8EE2A24FBDC6C6E8B19A9BB91F679C9A8A0E17CA3E06046F236767C4ABF48 C0B9CB0ED0CF50709BE27D4772AE1470E734D408BD0FB922E0291357E45F93883A20D6FC 0A0651189C19AFCEB1539B24BB25BDFAE6F70A6510BEAB80258B70341E5DF2851551BFB6 2B6897E462266B20535AEBA8193AD3A857BE13E39D56001487BBE41D32570D9AD9AC16B8 8D4B764CCA2668E077FB333575FA14E2D681B2F26A4087B6C7049521E21885ADB2AE5B5D 714F10B289590A7C6D711F178D7E4AF341446BE90188EFF46B4FF89D5FB988177B8F00BF 23F9D505CB342A3599D995C6F4AED5B0461DB6A13DD15D2D491593A1FBE6C64EC502C7D1 47F18FE0F138E9D344FBF5C4CC52934282ADF8EC30E0AD95A792BBDB8E573794A2869910 5F886CF15488F0A0924BDEEB9C95BA6632C63441B600F6D42EE40319EA7DED737962C676 1E29D3F73F181EE777DC9F7F5C6968C29E6988E077C75EF010439E7037265B0BD027A02A E426FC7920980789F13F400BCD0DF92A01004F465C5FA7FFF91117A420D28A546C05D763 DD2BC015C881437005749A0C01E97370777759E1B34CACEDD3ACEF6EA5B68C52C3F814B2 D13A68C75574DB8717A735DB1DEDA16D158FB162443D78F36E8765294CC79DC5D7EB4D02 4EF90B216A0E8E4824D5A15B6EF1DE089E911AB2E1323678DBDC675F480E291D1079170D B16AA946840841C8EB5F3CCB12BBCE26836D317CF72D83E1739C5CE41E67D3B00A23D229 E1711C2A82B082432CAFDAFD43C49860652E81939427874AE5F55D9D434611A51B83166E FD47E8B3C2EE0EC850A5D07E5BA79FCBC272E5F5204D712CD94768596414B7D01A36644D 5A3697048FF801BB3891B85E385766B761CE80C1AED605A94EF2AFEA2BB7B31C8F9541F7 E3F8BBED1BB1934E9FD5B6F99A98FDD2CFD9DDE28BA683E2F0CAC9AC0933FE4F9DCCBC8A 91A09F6D5C6A4242D77A078F728AB7909A8BCBEA5F58BA3E46074800EB8FEE004063778E 423425FA8D3573EEFB291033341710F034A8720D71F4E6ABE05F618978D929710A64A480 5E20F94378E58B7C742A0FBF20B797E02133A8C333AF2B4D4B13E6AF6C0FFAC8DE76B2DA 7423E02E4D280F8F6194734DFF52A86A59CD2268AB2294989DAF0871A0B934D85B7DFFDE 6D163DD0E58322342CB362C90BB98E87C275856EEF25E1F4059B768EADE92B2F1BD88715 A2F014B39AA37A62C1C35F8128C13DABD83ADC88620B6DC348FA316A7D46203265939CA0 414C27A357FA748428FEE5300C66BE887E91C0F5A1EE3FF81C35B39D725D8A4D84655416 C1C562A209935DC0765BCE81093528DBB97A6BD787CF9FC351DF777954B5BD729A54E3CF 7F08B2217A91FB9588E3A39C525D2A9D08510E6EBEDE8C69EDB05EBD3A17EBC052AA1FDD FEEFEB6EC68C9FF05D690F7E75E079729C68C8A25C7E6D5E5114750099DA7DCAD0D40543 3D4B101F83779F2B823BE6A7C7E3FEDAC30EE4C0872DD8837D0C7E35DF06F973C9664A8F D0939FA9E0E9C1504897E0FA08BEAA9B1CAE87F3F8844CBE6C921976F4B2F9FAE558A09C CFED16E6C108BD54D3FC56B59ACB36F1DC3E8B10B3647367D2EA559C1BE21DA51CA12152 1646B24EB9A7F286C710CA95E75B27FBECC9295D0A90AFDB081B0A7BE851BC8772B0125B E977FCAAB41D0F14C881A45C37BC4735D278CE9CD92466247359BDA1D42048626B7110E1 D947CB25FEB6F67A6FC3693F8687D5382F41B3DC346E43495A1235E09CD30873416C3883 1C6B10C1194031CA3016A8AEFA6EEB8732E098CA1FFBA18D3AC6C353F0FDEDCB81342AF4 299075CBBD224898C9BCA75DAA1A3C73033A9C3AC282B1849463261FB5E3DD4E420CDAE9 CD53A9804B86F7C867B5DBA99C02878F59875BBAEC39DF8719E6F38CF614493D83E1A6EC 96E6D23E56339C03B01C1115A0D7384AF3B44C29870BBF267FBAFA5615EE010868718E93 1413FC24C51E7D23C0458A267CBCD9A5129876D619E51A2F712EAED7AE43B26E4A5BB1DA 2BD07454FD6190CE0099BC79296797344DEEF8244A7EED8040FDFED57A9D5312C36CFC08 CFCB732A7F24147FF526A96424328941D6A209EBD668145F2E68C5419D1F26339C59027C F65B06126CD5DB448C422E973D41F8FF86A847F319F26886C2ACDB7E92C515E4A561B372 D457E1F89F0FA33438385A70632D23F5BB1E8E23EA6B26739FDA54AF7031E236E7D00006 DBDA30E399141D61681A61A6F4EDAAB94B76492FF0FABFA07C99B77E0B06F058D156DA84 035B9364B54B3FCF75EB2597EA8ACA6483A389EC163FA21460BFFF2B67357B2EDDFD7B3A 0FDA22D62C63A0F76CA970DBE9A30FCD5F55C98587C84D6764F3831AF8BA829350171D6B 93C77B1A6FE7CECAE40FDD81593D58BB81CAA70494A5CD42CB4A22B38FFC7244D6701BC8 0B1DABA24503F9152A6E95C3D7549FC76F23F10E0B3A58DD3EA8DDB5886A8F1F1BC4A2EB 6493F997DD867F1F2AFC9EB223EDE51C13409EAD51C0CC2B8469C8B49AE38C27405B0AA3 395C099523D729B1B63732EC51E861A89D067AC9BE4552FFE28A28DC96F64E3E964C6DF3 080D0D556457841D06B1A36D9B56AAEA64CDC8D5752B3ABDE213F5AB6F509A9D37DC729E 01C72EF1AD1325A524D5D2DDFDF07C72E754420909EFABA6E94BE5385D13A179A0A64F37 02308C56EC4981C70D10BFA4E9F2FB1AE7E02033F82BD7927AA8CA1D74B1EB0EB0CB3D56 E1657437762A9C9526C5D43FF837A0D52C2195126490DF0866193BA723A0E4DC213860A2 99442A9B6305934357E649B45552FEFAA322CC52AF1DCAC673FDBEA3774B04A423004204 6C5799D252DC0A2E44B854A20C9F10615BC4BE5C0C993A1DA5FCD3ABF8444D38162EE507 E1370B9FDD42DA622C13F0FC94AFBAAE82210C341BF3F8678220E8586ABEBF913311E5BE 57277EC549E06259569FA300CC53C18271D1E8ACC31ED5AC0FD9FE2BD460ADB5FB71F61D 009D50156F971CF4528B6457C2F0B7C63A15ACBF60283040582D0F891876873B6AE669B8 DE8EE1D1AC84C095CE0E39107AFB07D41562F54ED6C31B8F256FD309EFF9CA943B33E798 CFDA302C2C9227E6D3863E898D47F5B86FB92A363412C740E3715BEBD276154B27D15C0E D45B33233547F32312F9A75B7AD784959AB6692EFCAADF4E1390136B0C02EF44CC27BE6F 082ABA65663F1A20B2F7479E1E28F77C9A0270D72C710AF85656671708B8607B847D7B1B C1615D2B7493384D81114DABA3B1BE5E0B890C676E8AA59BED3893E6A8EB2DEA2963E6BB DC557024F4D3ECA2326457A912BB9FEAECE9AFD7CF0EBC72F97C1DA47ADFA7657BE3508F 345DC5A8802026566919FD7DAE58C88C585DE4F14844CEE659274C27BCFCF3ED317CD42E 3A1E04F084132DFDF6CB48D5FDC354FA639A16D7555F77251D51320E153F9ED0242EC4D3 59DCD7F9BEB52F8144DD597B5C44EDECD88A98FAC0484B31407998A4D7F713F1B62A33AA 956E35AE8587F9AD097001428FD2A377EE2F5964D8C816A93F0E6BF4AE6ED3D94A8998AF 92EC472EA51B10222B22272367A905D11C430EBAFAAFB4212541FAA8D07CCD7D6BA41D1F 958519E5996356C1BFAB41C90E38F30819FC96C70FAE35A26C12FD1D5B94809C975FF98B 127DA6B0A3EF195C997473FF46E73F47B768FF65375CF2D276AD113D1D2D07B291D3A585 4F8B05D2218374D31B40E9135145B2119F8F4649652357BD503C606F2F88A994F76F42F0 D810D4614DC1D78D6AA1D261612C0BA1786FF8D89DE09AFAA2079B91CB105FE7BEDD12F8 D99E7A08286A8D7E25EB52513FF7C9F0FFA01595D3480985713FACE75FD5C57E07F76325 0208CC4E0AFB76C33DDDDA8EF671934DE2DA988BD1C3A7F641635A396C1733C20D9D08F5 8F699814E9B9D75D3B131E0CE5D64D95AB45173A81C8BB0D8A991557F9BCD2A720D0CD18 543BE0C399A18C91B879043A2D980A623AD30A1FF6EE1DB007234D652AA28D57178C98C1 21440B122206A5EFBF0DB82848C2E4E2E6EF1B9B5119FD76DDACA525B59B92914F0DAD4A 0F01E016E45F2AD0847A7AF68428EAF4FFEC24328844DB42064CC9B1B4900DD80D7EFB51 A95596C7B2BD74061E83AECAC59DE59625B95E577BD1F21CE2C40907348322278F4DF6B4 9AC91ED089019FC3B8EB0B15104DFC5200AC12131F5C2E467012B139BB132CFECE0AEFD2 9341AFCF6BCB8832C5B90454BCE2F74C64ADF8C9E145353C873A205F767E558956A4F8F9 0182970295F6BEA0671638F04044DC102378EB0912590DB0B5233723027369D32541156F 7B0BE7E0D86420CE7C4C828C7CDBD7734731AB1FF582B9E6FDFC0F053F0114459688B235 50EF7187A3D4EADDFF3EE84AA0251F86AC59FB18DFAF35C4EF8334F6C27D421F89FF8E4D 9AC93045386FAEBB1A57A58AFAD9B5549F5FEAE84FBD2DB5F7DCEF02E76DF94A4FA8C4EE ACA78EA355CE8CD95AF763DFEDF2AA46D59A70E5A9EB5D462D4289B8F710A7E1CFB19D83 353799099CC9886EE1480273AFC0C53A2C8A8B8D476D4AFB0CD2E80EAB101BF1D943FA7A 51CA6E701B39B5AD4C3CDC1BFED1B3DB0923457C874A2BFB7365C05AF3BCA18B0E6C1E83 97E0D7894FA60891D4A201D14817D2ACC826794FD057F0E209A42E1EFDC2DE2FB37720F1 F1BDB18BFF2886CD5D756FD9225C592E243A02FA785E05F8780547002754CD6FCD5C910D A2EE4A72DC037B2EAB5C0EF7EDF7655F770A6D8BCAF2F74BD47C2D1BBFBBF2016CD824C5 D489E7C0ECCCF4C5E54708CB3A472D4EB57896FA71CB0165485E4DC3E857C2364A5B496E ADD27DA2AC639670F56C4EB8EA4B0057D03A1725AA291461790FBAFEE0F18A45C9AB56AD 04FF9FDDEFB0340EEF3867D21ECAF2219410B72228EE5E18D75E497F583913B5365C76E4 4FBFF286DDA8FBA60C67BADD7891AFD3D8C9951BC027EEE57D1C99BB2DCCF66D11623CB5 94662687352F4079E0C13E1C8AAAF379AF4ADBFBFA0780A932B1299757A0267E6F9443B0 424C42BDD313DED94B4BE7BBED07C54C4052C18DC9A1E558175C48ED15585CC67CA58AC8 F860B6DD347A22587BFF502EA55B5284F0DFBF0E93DAF0DB6CDC0A55E55FB0E0D217B576 847DEB083D73D417DB943B273DA3F881E27C35AEF73372E3A79DAAE838C72F1A92D6EA7B 09693571FDB1FD9425707C7A9F6CF9AE90713D04F4A4DA98FF421AC9DB4BD0524ABAF606 6B76BF2020199B908729FC9BF45C6FB0C114B9AD5BCFF21B14BECB3E9695D9FE5AA6F9B9 7E3258698AB23672B872A0A8AA293CBA74768DA603033F404A0D964B699E7F2C72670F17 7DBCDA99ADC5C8E41DAD72B7B347206D7F2B2FCADC107CB081308B3F87389016A8568C03 6B01EED2922AAF94974DCF109DAC57A52C1E061198BE51BF9876793A9F5D89F161558122 34AEAD127EBF4D7D1F03FD1F9F9EFDD73D99B1BB1680A71A67745AD5BE8841EC095EE7F2 4FCBE38A0D1A35D2A3DB2406876AF44E4DA46D0703B44F05E47D0B7239422D8D2D353388 46336A7F634CA6572F7C00B879FAFD2029783731EE3F1CF423D00FDF7EEA203A9D84E99B E1753F06F6E9CDDE6ED713DF454813EB51F5C67CC3E4EE29FF2D471856A494AEA315AE7E 79896C83E392E3DB3EEED0641F2BEDED5FC7073D48E0B8D5B208D0219D37EE2A11AA2BCD E2018BB1F664D07D1CACC35A1D35A58BF32EAA99F7E105B283BA8082FA52E33DAE15149E F47FB25492E18A9718B5387371E5B06FC9D2610A4065E651CD8498E31D3B870393B75026 2A2A1DC10E475530EE3007A8768EDAF17E162EB8E1C793BE76E0BEC9C1C7A2ACE4C55FD2 526461237870674ADFF914EF5609ECEABA5146205D5186A8AC95496614A0370FB3576CF2 3C0049667050B9536F57D888F1F6FA97A5747BFC063FE520529EB445805D189910CECAD3 FAF0691F388E41B6B5A89A69A7AAC90B2CD6C7B44641F9027254E1CC3783F0DF8C7191F6 5026C32C75C8BEBD0F9EE59E7529187BFFF5DD562E8A0EE38C63391E56543B18F3B44F7D C7B226A46973576EAA33C534DDC010D7E53FFDF2BFE16E5FA4895E1366356FAF4E2AA224 5FAD30C845BACCA1B9B6F44F7EC7AAF2CFE5F94FED0D9E1FC21C4AA15F2F35A219E88FAC 08FD981F1895311E227416020F3B406B1BE1AEBEDAA5551B1BBDD1E0370E28B79D6CC9C3 9710A58308A0ED350D49F9F5D8D5C399A12109830C0C656B18BBF95176A1943FDA6DF79F 886842F962EA8B2DAA76A1819603DF713D183704ABC7211BCB1501925C090C172FFE1D8A 47AC772012D5FF89E6425F139F491D9B15C9FE21275797EAF782787DB7804CAFCDA4DE0C ABFD6FA734A687E9F7E5548C97F26514BF86D443E2218C44CB9525EC17937F8F50C70D30 93E99B54A37658D9A2724147B502AD6357F0DBAE0A8670EFF6FA2448C844B484963E4539 5271865242C6E5C76EBF763C342BFB139CFC1258BFCF649EF6ED1F816C04C83F5A4D0E27 1BA9E7C2B3FFDAD1661A5088EDE95E95FF8095D75BE7120E7BE2266268CDE969652BD3EE 66EEF9A3E49B27D0A11494133BBB2F46C02B12AF19C4F196B674FEC40947BCC7B9F715BD 8D92F1174410BE325E2413A2573D48FE715057E000923B70462D2C10156CBCDCC180519C 9E7A91BF95E24F18D758C526DD7DE6A7F587E0BF4E9E17766C6C7CE0850E12A92DA9E5E6 499B531D84C840DE0EB726EEA6430EA7D3D0E346296BFA7B4A7C2FB41BB08174CF84647F 5F678ECBE71D59A05490AA9D33B29FDA2CDB56C8FEA73F3C0B606291F459FAC83AC006F6 26DE40D22480CA946347396FC0FC155D84B906373C48919AFB5F1C6E53E65CDFAEE1CD94 4288F56321AD9E8EBB0445ABB19BA14F66B32C8B83CFF9C6B4D350D9461FA1DD8BADA449 64EAECC7DEABE831F722ED3CEC0512B8C2EF7D5010644BA62254A813F31C857021BA8883 A85B096E6A30689EE9CB4BC341C2A0BD4EAC6C12EB9EC3FA2C99BA78E882383D0151506D 4B443CDE241A02CC637CB40DD0662EAD3D552CDE6E3151097B89DC1F32507A24CE9FDB4D 5DE790C0FF84D6C17685AA1D344D9DEAFA88EE7BCC6D65D795B6252FECCE9CA127E3A112 7F83CFE99C6401A25AC12D2EC00CDD3424EFAAA0B6D08E0B0C5DBC0C0F32412E6B5729D7 9DC37B400D00B586CA055FE8F51E36BB776AE085DE25CCAF6E0A8FFB53E3CD60B0981C6C BBC42D9D4FE385B670301675C94E981D4226C9768D58101438509BA3BF617610FDA48D35 18C8B40983C26DE3FFBA3405FACB2EAD32765679D191E7CB8BF24BF207B36AFC7EE18378 F146BF6B968BAFC38CC322F7364B3BB34AC62D06278F0239A2F5D5DEACECDE234A5D698D 0D6379D7A1D3A70BD4907A73C4ECB31F8C799F5771A641E57941BD2AA31E94F08AA3CA5E DF83DF715B8EEB3CC8C4434845D7D2DC43D7655B3B2F56B3B11337A0E458EBA270B56624 259188038968DB43D9137D8E515F048DA4D7FF51DCE0B8745BCAE44486984B79E3265950 AB3184DF6F66D5EDF2450658B375C139B39DAD754E61314860CE51E338195AD9853CF8BA 865201E993CF8B1F5DDD190E5C3EADC68E1963588B415BB52488F6B1EA8229D855860BB4 883D9CDC625B5BEA52A64E1057D992C428A41138A3FCB94DDB16B5295EA7E0E1DFC225E8 78AC9892F975E4F76666358586230E510934464BD13BC0054EC9BC32F36A03FABD5EE83C 0BA1F1B3FBD1503E9E90C87F72E95EF2979461C5CEE07887C29526C0F3765D42482D0693 99F143C3BB08CFC0886435DB9D91E8BC7EF192D5CD475ADD575C121FA95FB31A00BF42DC BE332F2D0244546130535B0C79B77554C7BCF75D7463FD9FBC3B4B7E9133F5CDA7498CA7 988A2D6C20CFE61839B114B1A5C66DC231F958B8F66A8928BBCFC332A633D3542CB26E91 DB7FC415A1290FC265EEF4BE7B12E7271D31884345416082A2598C9425DEA55FDA0CA540 0AA8515249B0DF395F5A5922E1CAD847F185E5CDFBAADD942F313DE43F0D0AECBEDEC4AC 98D1BDBDCE750E29D004B3C76DB186FA2762225DEA4378E70FCC7A9328BD0139E0B120C0 8580224D227BCDA1FF2077E21130AB200E03022BE4F2543302D33CBA0C0AB515F3D330B3 53A054B7EBA99207D4DD981692B64D7DB704C5BE31CAA9308E6A889FB10F8D635F6A8453 DBCC35930408A63BF3430F92B51F3E347F5567F96368306F3B7BCC00B8B2B708342D2EF2 C756B51A8F984C6A6F7B2929E3CB7E07D28A23EAC904FE857980F134A7C3B6B5C30CB139 A939EE394D7493B1F8F9294CD02F8D3D040C3F6266BE9A518A65ED9746E17EFF8ACF96D2 DDDFEEAE12CFF1B7B59FC47428A0D087580C7069FC3ECF938C8AE5D685242CD6D35D8044 B81707A5EBA311BE9ABE64B6AA5BE9A40188E14023A7F3693CD2EC0A5A72BC6E6932A1FE 12AC4544907E63E83DAC84A8970C04B8CFFB059CFB08F3F0D80991C791F7668B7F3F6A05 4464AED6EA20D977655B87C4359BE19AA7F1E73DA0D8A88ADA4AA34CF30260391C207038 686ADE284234358A0F6B0AC1FF50888ED35B50C32D129C783C7F24116C96895F7C6B8350 00B69307B3DB00A8D2F15DFE02BD752C79CC63C6B2126C275E479C3122321BB05915F71E 98FF30744C0197A284152EF4C851F4CE89C2E2DFB732741E91795CFDF9A3C8FE14B76501 4B4E190D0E994158851ADCC4DC2A37045E42CF73041313024AC50FA09EECAD009DFB0C8C 3D94E714549BC2E886255C98C6A259C4E6270D1C60D4685006CB41A1AE4CDE8BF5B7F30D C834091D11536C8E48E317E311FF5F812FBF9289CFF8278A5D5FBA82FA37C0D1831E36CC 0A34A335AB8E34B3F968A081BE7EA60F38A7DE7CE7FEC9B4EA76FA692F7B9BC62925F95F D844F30F6A33B08F660744A6B468CB93E9124522478B1E621EFC9912F7E6FFD4AE18B32E DA7F552D2035FFC82F2B91D81E041DA2DCDC3BA016B69E0B6637C81D6A85509BE83F4609 C339A613ED8E850B0F2C8CEC25BE54E43A0A424CA84A3F270627804BB89F76EF296AD43C 2DB368E63D46020FB4888004EF19EFA7F1D076B0111BDF16958E4D00043F9044C5C420B9 3BC5502B60EE3396C144C6B2357447CAE6A008445810731BE596375FD3A81B1E372917B6 E6CB07BB29C0334A91D75EF303A51DF8628D27F76304B1979E39D53B5B86D5D07AB063B8 57F72B7DAF56826CE523CF128F3810C7946C8CA25E4B44EDCEC20801446C232CA30AC67D 34200639C3E1478C330F4801C6C6031AA15F44038F773DA09EF6BE061F5D92C3E282D5E0 649BCB4DB5A8BC69CDB88F460652959CB7B04919093C130750982D48E5A60F259925EEEE 6D562BF0F3842CE9D72CB9A95FBFD577C9524D7CF7C422E518F3CD2B73715A2072D8A4FB 103726F59B1B6AF54D3833FDAE060FEBFE5E272A86588C93B85E25CCBF6915CE4F4AA4A2 87C886D87C86373B50F5D56F84F9419A2906381490123F2D73513614F8D96FC748A7E72C A112679EA6861E3F26E3C8423CE11CF550BCADAF10986CF19CEFD9D119596E470C34003B 9721203B611AB4992A1A18782D7FAAE130BC67A41AA0D13986DB964BCE7A5698EEFB7D7D 8F8F4218DE08DB13F81B4C92011550605DFB5F824D73DD5F5F76502200E26CFF7B2C326E 97708D37337F44E374F1F0707598D3A37B6E84D434847ACC5A07B4AE80CED015CA25CA61 5226EDD9073712E56F91689F2891AAD7DAE21C1FE1688C19E01A185BAABC05B0E4284932 CB645F0497B7FA8779D55AF2E995959AF55587DC9739644938E34882B0E07FA85FBFA5E9 E8142F3559777AC581F72BA86767C6A4355B04341F29699892AB59DAA968FCCDD78FCF1E C4189DCD1929452BF3226E4B99288C13190AEBEBD918BD06A747BDF21A93D6C0B45BD6E3 B5374C7A60CA3535423163681286C118D83C1959370460591657289BABC359C31D4D40BD C6BB4DFD7873FB84287193271B1C4C4187FB072F50FD971A207146CB37E55D27D39DEE4E 87BC463D034CE5F5699ADD24D4BC0AB5C67A35F81EFBDB1792F58FFCD91C20343BD672C5 1FBA07CCE34560F0FCCA5E28AE35F20CFFA820892D5B3A1BBF0FB6692DC910EB56500CC4 515C1B431C9E59995FD4371C15D5147412BF1FA384D875F0E6D05C933472078CE36708C0 04CA7EBA5355B3BC0565548ED857A044CDBCC48436FF6BA595229B8E260CFC6E8A131866 D4A11B5882FB33FDA672CAA80F4488F1B60FE82DC343448D6F6AB5F2E403EF626258AAC8 830E52D5D3232F16EA8754867EC30AE7B09977F1F1E16583B88C141F4E8898AF694679EB E28E0E011ED63461E27B4B5C6A1D00AD978AE2D17EDDE0569871F9F77BDA0E253D356085 447D7C0FF73E475052F97AE6D29D2BA3DA6890D475C8C4F748F6D8195D9D07050D9223BD 02C6BFDA445CCD7B1670EF927F67EB5183392E336E14D41DB499E961596DA16429438D59 B7151A6B4ABC9D2188B5D843BCDB0B6FCB36396B9FDBC2F2F3F6A1057401ACEB93EB0F56 B3C5D80BB7603E07F10BC81B7398B4DA667A1C466DE220E23E4BC32B8E559B41056984F4 943655C26C1E46676430A7E36FB60AB5A803C8A4312B1910E9416225B1CB501ADBB5AC46 6AD0D760C5DCA1FB6B37D8AFBF5005659D0EEC0F15521C3E492C7B2F3E93EC48D8342569 71762CB581D5E92F8AA40EE7B008FBA4FFFA8BEEEFB2ADDB756F85755AEBE92298E00F8C 1AEDD15D313161A0252F6510453941DB72098DB22868E8BE33A7DA218095B396E90849F6 69F7685D20C1E2E5761D6A8A5C664309C39445F998460715A09D0CDE14F7F6B03F65B365 75076C3DB9259E87917E7F10016D81F0882ECE21E209FB498BC3B71E38A5FBD176802E35 3A8B229EECBBA0EA55B181B02EC9639F8D32B24E93538DE96B4E6FC75EA87425CBEE733D 5720DFD348415F39689DE1AF848391289FECF98F89D1AB9DBA2246B1F1504392586D1941 3ED3632A2168014B638B02191849430CA833394DACD367304ABBE18CA96D07CBCDCE9770 8C91038AB5E73916B282C4ACDF79F08148FA5DE256F90B11CB574592E0EB301F0D74F38A E8EA20CC350CDB18FEA8C1616E25EA30B159C0AEF56F5A5BB11EA04CB99B383906B2804D C32F5D2F47C5BC5CF971A337813F437FBADDA186B42DB404C5A0AA3D7A7B737B55F85770 676E90CAE83EA6FDA7352693E0A91EC2E731303E83097AD20A13824A72653D9A625F1ED7 ADF9F84C67EF7E61AD5EB575F5577E1A871389C1CCACFD1A9D69AEDEB88C5B4BACB1B1D6 783FA8C600F73093C02C02CC018C75A7274C711029450CBC2ECDB020167149A13F4E6F03 9003DAA02529DB3B89642A40F4C014F2E6BE121ACC11E7E6A071661E6EA9A2BB81B52BCE 5287B732D0A4D49A9D402C613440225D2F289653D58A01C26484D4470C0F0CE7FA3EC8AD 9833E68603021D3A2564329C9209C093C9E62E0906AC42C5A1AE8BDA6883F95263240F78 231E66C6C83FF5D6054B6A431EEFAD30D5F207B5164D6B5B192E142245F952EF4B490560 6DFBCC8EBB8FD361F3452E184D3B8086CA470054D6B031B02745C10124CF0D096E633392 B8DA2A95A6383791B7F5E5FFFE3AA4A0B471E4D3EA695BF5EEDF8FF5A8A5CC096D0BFD7B 03875D5F73150525AEAE3FA332A71CED7784D8E3B0D9B6E50FADEC72D045E04C95944D84 F818251F4ADF4813D40AE608C248541331B8626DE004C0ADB82205E8CDC5AF1E6DE851E0 35D2ED4448C81E1D143B3DC9244923148B19F8A2445666A67978BC6D342CB2D4FC962C68 AB4F7E878B1B75F6FC6AA3E50126848043B65FD482AD24B31D1151B73252F739292FF82D A07FF93A939E77BDD9F6D17D7D8C4EDB1E58CEA634B3F1DAFE320E179A28DF5A3B34BDD0 E9FFF46E31701BE1E24E935F77233A48E18F8B43928C84F9D48CE33230A33B90E477C443 1D7F6990BBFEB9A512E15F063FC3035E59F95D3EDC48B7A83BA59C073745404AB89AD34A 456F19C469D4F0391A978D7D8D67A7A0F2588FE5EA868E165C7375767EDA3CE3AE5A2275 184DDC779ABB8C32EE3E4006C95F231D5CF92E5946BB749293B39DFB33B853BCEA6B0CA9 3EC350E9D1D1DF018D9646406F88B855390A09C367FD98E513A0311509AAF09FCA570CD1 16B75E61E266767DAEBE8F2A533B5E21DCFBBB890C0C1C1669F99F11B3BD775EDB377C46 1CE88466D62EA7C0AF2F007F627D6FE679C31510E1D20D08B89CEAB3E309C4C2DA36908C 839D83DA6824DCF32502FB73BA003D1A6E01912F87E7C1AB8FDB15F69E7216E96F2BC7C3 E2BFF0F4D9CB1DED750E588510DF0D1FA9C055355E8007CF4CAED9D3881EE8F27A72DA06 06DCA0864C5048FA9E194741E95C675B37ED3CE7A949DDFABB77C8EC10C2B1D0A53E144F 0D03512B69F1C616FF5440462E4D0DF91580CC7650D608A897F7D436082A92E380B51824 CB1CA78AAC3B6843FD9C744CAE7D4A8CC77D16F778A564047866EFE24163C9CAAD0A8282 6DDD9392CBD2E7183FEA59C04B08F0F783F99CE5AD6624C87D03BEB606A6BE44D54557B3 7E3ABF299BA6297EF01B2A397201EBA116F4541C7C200E69EC54FA4AC12F3B96FD04C099 E39E4E0F9D337D527BCEAB80DDF20373BFA22241AD9DCABF72660EBA30891EA6C35D1BA9 3A1B74825954A184AA9B3251CAE55FC5F5DFCA7F71DD579B78ABCB57934825247FEAEE7C DC5D9AAE2C19062CEE7875B3625E83A53CC84466A24B06B7BB8E493D93470BDE8A1367A1 A090A604B55D6B55D7A7E7A11C0E95AC887DCDE3F67008CFEDCBF285042D73F6C2B7B92E A4D3DCFF6D2E67E46A3D250AF107A3DBAAF8A0678EE44838C2945B2028DA23EBD7B8E15B 57BED405CB52CFBF5BABD051C261B60CAB29555BDB3E40EAE42DA9E157600DD76BC3B35A 0EABAA414CAEE999943CAF425333EC6039FB8E72EAA27DAE18C8767CF57BF292A898A0BB D1CCC3C6F2AB91BDB509A14AC269CFFEA638A78BB471449FEB96FDAE039F1676DC229B91 D35C08982694D70255D3E0E7484FABCCA62A7E2909CB4F056E99FD1A90B93DCB681A44FD D7321BE0F3E76448562812034AF803A36D842959B4FFE4B8E736B9C3D9C48F3792D6CCF1 125947FBCC3A1C181C6B35E0D58C07D17B2C2305694F7E03B858B4A100A293DF62D4A2AB 4997D5817F0254E38B9908095709F96CC18021DC520CE4F0F5D98E8A25B99F70C864C777 9240F8B2F75C060EBE567FC667B4A59B2BC8B36284162AEAA975073CA3D4078A160BE16E 3EBC8FFFB808B6DADF4018B58B0FFA3408682E784005DAD1360D4F9C90897FC0A51A66A0 E195AFED4DC596360ACC73CFC746B374B38B836A38BEAFCDE7A7455DCCDA4E9CD6E7CE74 0C63A51615B9D89324EAC8F87E79BD4B879F74564C8A96D5E6F664009649FE1C7D11F588 51ADBEEC1D192B5AA6701C024D0E48A9390EDE97AD0E2C428EFACA7007FD41BCAB943826 D2321D449597092F00C4F5C9D8C8FFB92952442C7CC693DD1A90894FB4478A8E7F402220 6534D9458F5048FF63FBBA3D986D0BD5AC7F02D07548AED4ACFCD99F65303B4A02E28B18 0CB1EC7B581E39CF01F7E28F0E8F63CE8239FB053D8EEDD67E9097B66FAF807D890E3BA9 399FDA6C42A77A836815DBCE3D6C369D732FD8A6F1A839F62D8C4C55A0611771F8617094 E1E6EBB5961461F80B27F8CF4A49234B211EE3698CACC87C8C0DA2DCF3152A4C2A3FC724 2FFD484FD9AD67375CBE067AB7556D8A7EA6BD519C1A68D6E902D0D499517FF654F27428 EE7FB90D53636D7E8F67AC9D2F435A8031B402402AD5C0BA52740F6C63647B0B2A93B701 0A1EDCF0C50FC575E121E061740511E2D6F1AD370AA4FDB05A89C8913F29EFAD12F25357 CEF6FD386070EEE8604971C3C55357FE873E7813A7E12002AB3C28F809D933B91CF490C8 BBC5C5FE6E7FE44B74FCBB77F8FF0912940459A128927761F5A6E903C5237481C4425557 BB46AFE2DC26FF4CA60F0CF76D344C04ED1B335263F2F02E093CC9048DD558812A572240 A6643705B23FA9F7F3D4A37DD719B824D148C7E87FDA7D3FB7BE79237740BEFCA3BD946E 8769BA1C47AE6377DC67C13F89120D64072077D598EFE602582BFBF5282B90EA6754F717 09E69ABB78B5229577A893B522501D497FAB9EEF534BDE7550AE6EDF2FF269EEA2ABDA9F 6FF58C6342FE86E07E29C353C1AC2F35BF266F99CBF639FCD56478885C869E0C15B0BC84 87245DF0903DD4F7C4C57FE29FFA85BF911734C4782704180B62A806336D67F5B081D745 C647047B35B0B9CA9CF95382F266AF290568B84DBA1A4926D834979861D1D1CF34C531B2 4E69B0886754DDB2D9F40F53F33648B9BD49E4AA692B935F68EF8CF6A3F749481686FA32 40F263FFCEB8343DD65272D5F70BAF774AD7DA929CC0525498FF674E4F08223D49317C7E 9A7A3BF148BD2697A21FE39EB0A2658E3052561DCBC6681C1E1CCA76D84DF10FB54E031C E15957347F9C1836E8FDF83128DCCFD031EC6FA14A0393B8EC4C7C4DB51980F55F03CFBE 19FDF1CC88A5ADE9A9E017B79F1D53FD3370B682FCD86A110BCF74BA556965AC9E5A1B22 A95D8411ED592B3514D97B0FA91299E547F4B49915180AA29FF9D1DCFA6A9CF4F6EA9F3B 18740F686E6A16F560B3E3235D62208268D4B7A715CEEF278B1EA365970A2C6771D96AB6 85D01CD849CE642D2336E6D69940D9575F29DB1EC38520914495CBF982B2BFA6BB90D18B C7895AE1BC21E286FBA7AD04E871848D2EFC4B876DBFEA549B29CBAB214BB8F876CF3156 7A280562D1A0E33941285563D5DBDE5684B7957F026785CED36AD0F794B81BE028EC77BE 6D4503092F4C33A38BCE3FE69B17BAE6883460806500CCE07A6A970F757C42D79801F27F D7215F5754686AD2C5D78CB849B5E1293E05B14E1470CF729A5A92E31AB720A84F5DF32A 2FFCD97A7AD963F113CD386430791C845DE55F41575688F4AEB7FA2B611F6CF4B3852912 ACBF578F5EDB9D782F52904A5B13BE3AD6110AD2FC99D06758A4D8072C77546F7D391342 CE9A7A0AD2771B5254D9BD8D151AB2688CD584BCECB3E0A72BD72D26A2148B3EAB39502B A0A1C769BE5CCC484457BC48F45BB6F24B6FBA4F429F93213B6A2057A98DCA2F5A1F4AD2 A68A7D8A5F5D192CBDDB47D4E81C8A804D3F2A240140D3B847B0CEE1B274DB6294951262 E49DAE1008535AF4206B85EFB821A52D2858D079CEF0CE39531348D3989F613F4FD171AE BB721A876C03878F95ECCEC6EBA9A8645FEBCADACEDB3C9EE3A681A5F4287EA0DB1003A2 C08356B40DDC224BA89E3CCD6E2B059E184EE32708C635D4B1DA649321871F401D6320D3 33BCF7EC793D75D7CA93CB388A926DCF7B289D09E1F1E5C465C4C13F5B78CDFA5B1A4E22 2DFE7F32C5E994B415F43263C3F385DCE5B1B2AC4D031F5DE3F2D7998C990E54F2A68ADB CCD9DEB99CF172A717D0695E1B8DE4400E0FA3F0431A1A7116C2F59D81F2F93DAB350354 B9C2A15EFF90F58D7704881F26F266535895B9FC1753F6E05105AF459FD96FC12ACBE954 F2B7304A2E0005B88A8B9363EBA3E2D73E97F403BAFE99E3ACE82AE54112909459DFEF56 0B115ABF77BDBEE4D26642AF02D4EE8110B8238CFC5A3E595DECC6D608CBBF59BBFEBE05 1746DD0886E16F89F92C3733C1AD7D8811910D886A5ADD770726FFD0E6198D0A526DF2BA 69A9844AF10F1C173458D2428EC5AFE16990A453DE2EC3C3277D175A7AD839F8B9B57923 D512E04409234C27C9134B6E3F62C6B92D558333A43AB5EAD6B0F9BEEC1D56ABC8E77F2D 2EB6DC345F2453780E2A6EA2878D54AD1F39C20110C9E96AA7D7A7EBC91B67A986C2384D 68F7D7A184F15A16D4AB96B4E85AB7438E957BED620A3C7E4D4CB30D9DEA91393FE07EC2 1A2270E6E30057A4510EDC5C6399D622F70DC525F1337AEA8AACFCB1880FB13DCCC85992 0203F0C911B1A763EAC5F329D58B4B39FED77C56C438A40C5FCF2CCF014AC678F0472439 63788DB77E0455E6A81A7E08C3B24198A49A526287EA135009E687E6D6A63B332D9F4BD7 E9190A67DBE9EBF85104DFC753FF64BE92E9582E6BB07830B856042454CA3EF671C78077 805F6132C21AF01811E7A5D64B30436B98262624D74B856B80EE9C8C1D3E21E1E717EB1B E472620F029FE366F5F797DEC9D1C82F9FDAB3A76BBE07CA634D9A2FC034A0E570886B0C 7FF255EF747D07B8506CBE2F281763D91DD7EAB054B9CBB61C940E597AF871F3869F38ED 9CD0FCB9B5F5BD675B3D66B6ECB725B84E4829D2A99E1E8EC6235BD571C9E2B006C11E17 2BC118EFC68ECEFF70652C3D00D607E5F38CF8A21D07884CF8C5B968879B6617AE1EBE71 AD720FABE31AF7CC762558213140653EBE80EFDEB0D5C79CD1B761DF7290BE6783A73060 A4886E6D03E98B6216464BA4788BC5528DBC7A80F88571079F7DE8DB357802027CE0DF80 068233FC1AC6C926500F594AC62F8891BBA3D7415C7C6D306279E56A26B518521B0E39B5 648F22316682045E9BAE37EB22F3CC40CD36149E8BACA12106D7EB249A3C94FD94630427 47A66DDDEEDF12F448C5560D3CCA470E4F15C46FD8926798E412D3D18A9BBD2DC19333E5 9E09F06EB1AD60D25C439005FDCE7AD65CB164AE9E4231533A9D5945822A47C99AF8674E 7CCFA050BC66C2388C4193832BC99C4AED98AC8BD5022BA416CB5A0FE7B5FE047F7A1C91 28AF759BAA1DF1B837CAE8C3BDD43B469DC23C88605C4BCBBABE2521CF3DE4CB665D2AE7 7275475931310AAD833B0A0B875B779B6DA8078A0EF5E8FF0A1EC6A9C4BFF380E235DC5A FA70E2C10A990AF5F8B21A257B47E82634FA03D31A0FD44D5289C14DCA9D6D8BFB2034F1 1AC37D4CACFAC83E338769A137D9666D94791DBA68FA5C1F4F052AAF7CF5B8D0BE55CA5E B460F8AF2F425F14545A34814A3CA9F1F8A76ADE9B9B4970F558ACFB072F6207C5151873 B1A1600B36C13285A9276B3B0E4F62748DD6F51CAA50860D8D2DE9FF8E253834EAEACD6F 41F4D1D8B6F75D4873DFCBB1938E52AB2D74D0D140AE96EC1185C6CBA74F3A416F1200F9 794E7CFC8115EFA8A06BF733843D1521D932C6E878BE3216F8F643A044C946A48BAA9AD0 2910598C69E43AEA86F2B809AAF1E3A23C892F639F9512285F294D4719E4861D58FF7AA8 9D6C8DD38F13C3BD7B1ED24E9B864C35AAD8E7CA23F4D09CC323F95391163C7E9D5E59AD 0F004BD547D1AC0A989205FBD1E6B2B7841DE050FCEFFEB5651043AC3AC28BC7A80816D9 596141F758B50B472751162DA7C5B4B152EDBD19CB155656A947CC524B04191E3909856D 593AD23DFC51C48DA724FF7710B53350581D626E0C2DA293151C877F7ACA28BFBD697978 15006E974EC2BE37F32CD2B2B78557EF841027A9D6D2005F73456E2375209AA1A428852B 46FD1C990F7A169E47C5E37978402FB20E6B69A166A754B328F47C88DCA65859B1340A3A B99E092A64A265A53E68C12A27043A0F58790A78C63F59194AA4158DDB9EB039E4595042 FED2A4E06DB5C686B95E163F73C28AFA5AC30EC2D73C263D66CC055D46EFC22446409708 29E697B06E1538AE9D7A6A32EADB09A02E1EC7B84D0285E6BC98BB74C79176BACC90F662 7526410B52FBBE187C38C37C09A83EBD8C20D1C816562B40478F32DD4A53A6422903EE67 C663BA8CD7E48F21DBCE940935A9DF4CC20DBFBA04F7A1F64092F4DCA99C52139F06725E 45744F020A77BF209DE0B9D53E183438C0D0041FF1464B77402C5BC91846BB71AFE85786 7AE14904BA56A19F712FD9833BA21C39BCC81CDD15C77A68CA0C8E62E6081B4F08B3EC05 D970E43E24DFADBA8C214D2A579A7BBBD9D19A49AFC777DADD869F1A976BB61DEB1B34DA E71F4D10E742BFB5FB753B4AAFA831CBD43A012EA2370867A50A1B3A5871EC14920CA716 11A483C491131065D5D8C6D14D9C4C8E136393E2CE972265C75B533FE33F5BC43FEC7C18 21F41FFEAB06582517286518629507B79B48972D05BB8A56C58DFAB8B28635A0C3846FC9 3F9A82C47A281823F2FB0D841D7EB972B728698286D9696F165D3C11F9CE04AB11B47076 6D49CDB1E9816A3B2D4723CD7AAB6FE3220F682F4891627C5808958EA935235B9CADC049 44A1008ACF5ABF5AA9A84CE05C6FDE7DB30D6B848B011F68B0435E4DAF9BD8E9E884D806 56F7D5042DE14BC3C8092B010A2B4A2C9E61D6AEB37E5E5DED0EF57DCDA86EA5557D6A29 F5B7531DBA9790752453BB00391F156AE32BEB6DF5D4B52182769180FAD790079DD28C95 A2686E08872C33B2070DFE16C027BD3286B3D20D6D9418C80E32CB7CCA9797D3043B40B5 96F890D1F95169DB9AD890FD04C365531E98507BF20EAD4D3878CD82D5129A302B20F63F 571726CFD774823A0B67857160563BF1121B587F613624480FE57B866F2FD1417CB20BEF 25D0FECD382CF9979215984745FF1CCE767A132D0038E450E176E0E3095717D2B68E56BF AF4E4841E76AA853371F4451AC25B9DD60E4A093F949B68DC44E7D6DE1837441528FA3CE C7474740ED6877256F424306977DAD356CF1F6596A2BF827FC4C7C326727180E05908395 9E812BFC24F7ADD5230956F57375857D2CA613A4F70A67A2F3B553301E57DF75A9974B3B C1113DA5907645B241EC08B5244C8F3211DAAF99582EF8054B1CB4F3E913C24C4808B5F7 B0F3C869F47C2F963922FA9912F272E8A095B069122A592B1C1B024C16075AD98FA64E88 452CB46DAA649C6AC7C4ECAB1C74A56D706B5AF6B7B02663BCD3FD323F11ED9BAFA92928 389B37988767B38643BC2576C939CE9F623318B902E88EA04C289EA512282872829D83DB 1F59EA7CB7418AA6BCFBC2E40D51E0AA01269D8D53BFCCF0729E8CD17DEB3C0ACDBAA192 C66696D5203EB156DD135A39FBDD5D4FBBB7CEBBC017554A315B17A98CD28224DC51D3A2 10807299FB963CDD0B93C074341F101B8CEFC2AF4D8D90EFE25B9F87C8FAC5A880B6D758 CA3BC97415427662AD3D5AB57A663D1DCC76EE44FF4CA6240EA34CC1040330800B012F2E 6D3CAC36C4B9A4B2EEA62F56D893F905D4E51959D34AA115901B20570BBD804DE5846BD0 AB35A856DF72BAD50F350300AAE11B19E5EE192A68A0B5CC3377EF3688F3A0697DCE6F46 6908F08B6D8DB74B8C7A25D335B887B7FE53B979856CEAE8421B842C3631CCB5FFE6250F 7BB4DA9FD5792C8DBFD2DE872407ED55A4393D6B1BDFDE1E21ABF308248F26B5D55F1830 27D4C9E57ECDAB4B4494BA157D25E45F2DE2211BA1195E7A5FF44904665319E6F78A8746 A0FC187F18AC7A9C5840E153CDAC1EE5EA0E992149EED52E638C824EAFBAD9B0A9950952 58E8A7B32C43EF92DADE2D1AB0ABBF3EF97505F003FDE85D5B37654343332E10627F2387 636F85F029867999933CC110043D947BA300D0A6120482A5379AF81D8B2C5957A07DA457 F85F30CFB983B42F619ED0D1834F0E312464DF10FC80CC98175B101EE6DC7E0F45D33E20 0DED7FC83206994DCB871091DD5DB23A50F379DE6235A47BC64C94D1C8EBB24A55973E9D FFEE372A492452E58C97384AE61FE0A2767786374D6D2A47B9BCDEA176D0B6067E6A71A0 A13199F84854511A6092C02DAB2AA30387C22B2DEFCE6ED1B7096B1B93B5CA4C2186E84B 8EA3ABDB665B429897ABAB6C55FEFF8E7D9A7A6D63DD545E42FC31DA2EDEDFF482401051 D744F44CB4C3709C45F98CC83B105233A08A0FC84F16EB26E37026B50D2AF0AA118E9591 B726597848685E927E0AAA61F990C01E5EDD9158A6A9444D3977EFBBE3C3DA308066C45F F4D5E81EEEC84C818F6978B08B725E99D17FA96FCA5F0E2D13E9FFFAD8D443D2928F6F3E 07A2DB18DAD72BA55BDBCE0724E57EF90E86EAC7471B5ED6E685B93496A028DF747B539B 38C024D36C111A1997B8AE986F26478608406ABDDA309A30F2B0999A8AA4E5462EE0B98B 813F388276CB6BFC41421F6248DE7DEA425BF975265C58B38D26B0C95B33C2680F5E52C6 803B1B3475616E9FDCE76DF744CB21898A48D447767EC230244C7DE40DDDF254F44221DE B688C21341094AE4D9E6D6DD6D250A9CC7104BE87E0DE22F9E43F528E19E4A0A3CD0A522 A3041145BBB1AE8E44993E44C22690AFE2019CAFB2BE363970304AE0BA8707DE9A296642 64DD4917EC3ED5ED0881F8B5C9ED231FDF46A3EDB719F5193B4DB428D1F6DB7E6D8DE813 1BAFB79269FA832F86DAE7BE6ACE69555D7FECA1249438D90A8737DD7A573ADBE17C240F 3EDA02A0530786389DEE9E9C880DEAA79B66764EEA0987739B9BC1A8E777238DD692C3BB 3672907E76AC5B582271D6FA1C68AE433FFE8B22EB0418FE435B861E715E5A0D47DD0807 8D240EC25A4FCFE1197645E6A84413A44AF195623D0214C4A566ACBD5AF344CEF68149C7 D01E96A763812A8FCB9A9EE2878D90E808D292DACB7E4457F2CBCC025EFADBF94A67C0B7 91052D8E5482E573452F97CFBABFCBD0F6644CA555110DC521BEDF2940B339E14223772B F788895ABBE4F022C9C146700AB9BFFBCF7EEBDB2737078942AA125945B058F84E3AF529 3E8745934F35A93E167BA8783FF535A239982787F8EDAD4D3D74916A61AF0ABD53B477BC 225BDC4FDAF056F5486A1F5AEE28D6F05163F3714695CB38C42F18B7121985ABFF9EE6B0 49C44DAE278C4FD82207FC49FF11050B38C61F7E8D261B29746D825F5019690E427F49B9 57F6FF7785AD78B1E436C54749BC473F928154C61FBD6719E2332315037259B48F82AF8E F683DD0C2974FE0B3B6EB26B81F7BAAEB5C781430B9B714F7D7B183AF7D9FB21BE359365 52CF30AC6B18B3F569E4109F5AD648E27C6EE78BBA7638112C75ADBAC656165733E8F626 5CB90AC2AB346D16188E74C142B3CF29A7840B1E77EE7C4E67F66416FCE09ABC092CC272 BA082BCCD7FA8820AF8C169A99F9BE2F958D8D5B681FC5BCDB57388A2A944ACB94998A18 7AE92A34AC5C4D50F2F5827A56E13F4081C1D62EBA156CA85973DEB9395EB5143B9830A7 4BD931F2B0FB273FEDB2A5B29E1BEF58C779E06F427E9158ECBF94F6A081CFB804809515 E38008D7054AFC47D984280C39FB45C21BBF3A596ADEE45CC66C28905E8B1DA7A60B62FB CA56411DD3B4F2A9275E72263B26FE1855D51DFAF956D804F01CA7CAEE4F34A51AF63510 0E3D7C6DB6810FDA8B06D9D24C11055640EC34C8321ACFC83E46B63AEE55D7280C257D3E 7F374F28EFCB463E77DC4E484C53860B5695828084E308E136C0DE32DA1462359C4A4958 AA80989F8C2E7316E4BA7C3102639361F2E5A89E1084C059C58F3E2E488AF5FB2F8BAA50 99541A9444316E2A9F33224F57A903E5CADA2764739E1D9CDFEDE33180755ABDB71682D6 FB7E8028C25006292F7F0E05EC367AD7743E17B15B1215D70EC6D3F0C9B7995B129C8D3D EB35413AF7FD59E518C7219ABC88E0FCF3F240B73DA2F448E56DC43B2D1ED24C46DF50DF 43DBAF6649F73750E42F5F391FBF62DD0C7AE97DD2F2A7D4C9EE236359BD89C22D7E18C1 A8CE07B4B9FAAA284694366FE0A566E634EDC12AD6D000A3A78F799269E02FEFEFACDC1E 6C7D312331266F071A715A06A0B409D3810B84C1E7CCA960DF8DC6F53702087DE123DDA4 79C8B48967E36331D4B6B238307D45C9654997D7F87D62845C7B60D2ECC483814F303A3B 0CD58AF443538E135680E3AF8A56AFB20A8B2F15105DC414AC0FA0248A47140587064135 AA15A58DF186CF8B885624507F4CF2E3786F2B1DA5C51302D54998B74752EECE3054B8F6 BCF7322F0CA3130EBC193449C241BF84A51EB6EC894729A4DD722D6E0E2A6B8C067E3F80 70BA07968BB7DA739F259E14B0849BF3C24EA49426A0744B6B182CE02CA416E2FE2620C2 48D41FEBD402C630C88F35C73F9B7BBEEE31D27AF807729F0A82F8C195A30F3AFE7951E8 284B1B952E643F6A646CCFA313CFFCDC4B7030610B9C1590A70E057E4C012C2A0D452D0D 252F34A51840132F60A2D2AD92E05E4C1417275C9E4E1B10CFB29AF28765F652C671F5CB CE8AC67E6C2B619EE0177FA8A9B921AD1963925384E9097FEF860BB8B1B5A9EBCDE23E39 292DD6945FA1C77BBC825792D37B3B7802BD4AA7C595A22E5EBB411B087291B8E288EB7A 7542D0D3DDFC3370F956767F5F1C0BECB77FAD8FDFE5464C4D1247D1AC733A02AA08480D B7E8EC61F635DF107BF43986D35765272E46DF22F648E045F99C9BFA3C8B3F835468D0A4 E57D36B0D78564FDF53DAEBD907A1D7CF20511C4126DE5AA6F9EEB144F6D7125C668766C F3B8C2352A4F818D0550E80B9B8BC4ACD0E9CE7330A5527E1B5A4BD45A3690544AE6E072 BBB05B8E2F31CDC7E6E06269EDC800566D09BEF468F6A6344295D7A6191E95B833B2F0B3 E8CDBCCCEAAECEEBA0B3D06FC29065DE17896D8D6F3C11219F0BD458443C9D464CBAEB9C 3F86CEBD678C64D039A79FAEE3B4BE6E7D4E609B8D6635864A68C1F168E45F4B784E3CD2 4968B504DFED34FE64FBA661AA95CB812C87172123DF8ED7FFFA1CFD8B3C1D72D4EF74C2 883C6B889511878363788BF7308F26B38B34375D5BEDBBB2BE40FD0383E2D747D0927261 D921936192E432E9319BD4EB1E3295AAFA0A7AB803C21B6260577F3B37569698CF573E24 D43FFF29A8696105F67D5F0B107E9DEF235E736A973D2008E490B5BBCA8224C0D8359ADB F9F3F79848344594E1EDA91073F21944DDA443B91D788F14C4E3EF561AD82E1168223A59 3B7A3C52FF389F1276543BE9EA844719448E8751BD25D2025C819CDF8C46818A053FFD8C CFBF3A75A4C01AAB804EBCC5B4BA46136285932CFC20F50AC51A194FCEE70B5307DEEB92 C0D7C4BD3ED179F2883AA93A20710DC0B5D5D83CFF2752A63BD5DAF157E6C87B9F8DF1F0 9A5892455A441C962A97A6D28F98B0A4663B785326CF3AC5BD9A34EB68E9D3F4677426B4 E06E448CEB5F7E232498E72F101DCA885E76E3AF2A33059825324710223C15A0A1C2286B D39F9CEAABF16694513266E014C0E786DCA680378DCD10855A5348F022898B8CE73DCEB1 0BB5A8711004CBE4835DF023167E490D151B136E288F809CEBBB4D5DB943E3CE05D3288F 76671E8849AF27FF748717F638DEDA932EF068A1FA4BD893E28A9B1A99C9AF17A29F40B9 2214E0E00E976F9D42BAAB2B0EBDE44B9BA3F0E20E9B3243D5721CE2E932EDB7C5CB80DE 7B88C8D8C213224232A3CA13C7BC98B04477D6EC5D2A944C78DCE935D7084E669CD3E021 56EBD6C94D6268CB18F733E13010C46BE53B535688885EC76FE81C7B85E8DE8461F24635 E43F2D59F0BA056C36721643813BAA17CD2D511F557D29E660BE246F6DCFC5157584F683 5DB0B37F84744D55E1FD64AC10970EF8956E0B41B84617F8BC0FF4F591903C96441AD737 4DE59095B0A1B2CD6763CF9A024109DDAE4221FCD51A01378816FEA4CB5605CF1DA3548A 6C4A3D50A9838580B20E6F89CF3BE802085D09A28F95BF354ADF025393FE9DE2E01F28C9 B9CA66322F2BF42A338BDFDB60E9CC8E76960E159C9448552C466516464D541B2C8BB8D1 1A6D7869F67A4AA264DE5050FBA8867648DA6EAECE0AFCA0E67886EEF6A70C2195F6EABC 08CB59F1B4195C9D7EF61B243FDBB025AA7BE1399F510FFACB55BC7F19A1CCA726E415DD 30EE76F8110391131C1ED191ECF9ABB054E3505B00029F739D5D29580A08BAC68C347905 65BC74B1FF3529CB2ACB37B7A8DA47E4230F38FDE189A8265E3866C02B183AF079DFA985 E03B43A37F473E8FB6D19D1CC414B5D3C7D1F8DA546FFA43E7B1EB4503C355CD63CF7D81 FC6A4E0FB31AB9047C2DA09675699DD4AE74424103A41A344715317BB22CB2A1AA78CE73 439F3E0DF391F1B66E191E0D5680BF2F1A8B980A00B0C6C2C40008A5A0FE66D55FA8F179 D24B44A57A93BC2A1BC960364188694BFBDF5E5FAF13AC724E76B6380AD41EE0B9667FA2 0F298BF5FC479A7EA82000E4065D57931C50094D1D106D1BC24269EAC2CCF2FCD9DC3D31 0B2D298B8DD187304674F85448192B5B79DCC65C2B77803E669B58F5BE0F5052068A5BBC 00818526D5802EAF6677BA8D8DC94F26A77A543BB490F000D7EC4FCFC9CF5F073DB1674C 05E50151C1469B6F9823F726366C4ACF49465EFE270D32098F8F47F2D6BC82D0323E7FDE C9E9F2B0BF9D0B53288881D9452843DADE59B8D3D6C749F31DB29BD51BD331E17A2BB7CD C89046D99CD828DBA2F0F8F13CDDC9A7D61B0B138F985045C1B8200EE91A2D3676FC7DAE D838801223107812A510E534F2560F4AF87707AF591B768050BD54EBC3AABFC9D6E66782 9F57652A184CD5D3BCE1175E4F4C269E2F0ACC24680C4571257DC1DA4E0FCF7583B177C0 27A322DAFD1C29482A98511AC412BD40FC7317DFDE6E5E9DDFE75FF2A2E5A791829039AD 109D13AAD760D9338431ECF96C190680C54656A9AE860078B62FBBA91069B8479ABB95BE 5323AD36D4AD442A34BFB5BEB1C1BF8B27AF61BD67F13E3893E5A512847FDF0D86AA353E 8EE42C7ADA4396A3898FABC8BBCAA8E880D492E3B282B11B3DCBE4ADC692FEBF4BBCECD0 57C8BF681E9D087AA321027CB1636B1B792190C258C60FA2AFE7A9175B325C21D6ACC2A5 F343DA46644A50500B6570B4C3192767B8330BFE018FFD37B56A2662421BD37C22EB4791 A154A2A5955B1AE393798588EA511323B49970E5BC9669CA4251EFC2AA73FD2A9E5D40CA 68BDDF2835F446F764D865E78C69989F137DE5B8F178EC6850A461210114B296E58F2793 D692E45691F1B44C7F492470DAACE7EE4DC389A2F4D77E771846EC0FF7D4EBE226497324 A40C1825278C41B8A70535B7B5D048B98887BD4A64C06482DDF0490A34CFE63197B4280B 19B326459FC0B15F81C1EF1959851564EF33AF70B87A661209EAC4B91494A973E81D1398 1265939430F8DF5754AE99F8A42A746C8F985FE376BF55FCB4795E79753B9EB242F116CB 4138134C5983D415BA64ED53FFC4059F84F7AD13DE0A126862A0226BB6A538DF9BDB662A BF44AFD619B983548F0A3572D8CF28B7427708588A663ABDBFEC51DDEDA7931DC4218C22 33917A03F8F105B128F71C4F0499F2C953B4F8F3703B2E0AC9B757B135DCA53C9580AA8D 0B7A070F17314FF28B31E35C3932150F0DA7E2B25C58A7EC547E593E272AE5DD9456D876 DFE32BDD9D3CCE280677599C10D1DAC56D065F2ED02E80B5A42DAD0E31212B100C69B851 41DD75620A09EB8C12CE0452C83AF30AFF1CF7313936AEABA120A7C4B2A0412B157BAC45 07F53C3381C67DA9A58417115CC05215BB766AD0597D134392F9F93F73943C7F94D5C1D0 85E5E2265AAC3DBCABE8B66FD3702890843A176D83FC199C9AE58424F24B1459A3760E1B 830619DB6552F1257361E65E2A4FC753585849F1B90FCC0A4B15FA0D2C358C01976829DC 7711522BFCBF9C8C1FC1317C8DDD39C674195854F5500A66CCD58239467C7B637D59E548 E6A9423BAC4AAFB9E5CC7371CCC51CE7E26A3872FB8FF204D9913E8408CA9A50B9A1D7B8 44DCC042666FE7020F253EA88D63C0EE9568A5E8A7F53B2EF534DD1B7A627C3F6D1B1BC8 B100FA06233737F503DE9BF7ED82B75A604DE8ADE1E4AD89E29491DD3ADCD6EA2433695D 25648470A418FF044306F36A7205E726E16B12E0F8769F170C4FE1B6B008602C7C58BE99 AB9913B474D5EAACFC0C6FE7FA722F68AD6F41F8D950B318B5078F15946826D5D67D24A1 56269DCBF21E1951821EDEE187E64459462D5C7C3825112538F5667A00C75DA8CEC00F29 71922697B8C0F2CB4774A5DC5CCE892C3265CC01A7A739D80DD97BF487FBF69953767801 2A3D933F7B2FAEFE96885660B14F8979000334E7A2CD951BD3663CBDCC1A963F9098F1BA 783AF97759CCF5C890CCBB91757DC84932A0E491BF37CEA879FB23617F66843DB5D7FF72 8691668092540C85D0459CF0B45E8C8C18B7017AEB5B5C308E65FAD720234DEAEB40EF57 CDAE7D8C386F972B7024B24E6605BF54BAD9A3335AC64AA2F2B7A3EC8AB5AEB55B305F92 E36AEE02A69D3C91F14E6F618D04BAE13C6746959C0634D3332A8B89E7BCE1A8190D0D4C 6C66C4A23FC25D2EB3CBE6F9D8112454EA88C367BB7066C8816DC3304615C412EFA89445 131EF458C310A4E1CEE3B1DF05FDE7A41D0A64A53E5129B49332B97E319E92355737BC50 D143C37441A028979100E7A77D3DE41D987CEDC7BBB4A0ADC4CFB4D39FB42A5F8132B603 7EAFB786B88D69018F8E44DD42EB5F02CC4C8281CDA1DB4E6D49054E4C6D6D436DED7444 1DD6F0962AA7CC38D9103CE507F72DF0E736D3D68CA3D4E3019EACB7C5541102118DDC7B B5FFF92A555ABF12884B26BCB3878DC229EF17CE40D0A59A51674B4092E97A200E782695 45A0BAD7A89DF4926B7323E2D5737D9E9AA6D11E44F1BFA5EA7F6C9FBDBA15F0787C5C35 10BBAB66005A775ECC35E0224B1464E2CE19151EBD6B046BAFB4DD652A0BEA29D97F6072 88338BC2D0A00206CD1F65B00EA81B163F2FCDDA10E21B829BC1E7C77B4140145A6128A6 B31F1DD7A547596DC1B3323CF5628A677412146C404EE5E079E82F8A8960B88E8B5E0C30 8ECDC6F103CF62F3A98928B90E60D59FA1DFCF0C61D379F7C5FA70A5E63DB7590B45C2CC 1EAE399E1C0B3B3F5E4ECDCD2EC4B1BD4933340E394002A34B0EB9472E62515E84549BBB 8AC710D4B54121B0C249E12FFEBDA29BC13601F6D131589D4CEAF34AE423078BB1DF55DB 006DE18D438D928576001223949B0148FC1578F1A8498580678D124DD59F8DA4D3636A9A 88A61D460D3A5FC1D122137954051D270F2F9A93F33491AEC467644D5E31396C45B33FE3 B85D6DDC531B578802ABA53A313A5C899439DCBD66FB937FCEAC93288A4079B62AAB7AB8 00543E3EB8E7DD85CF5F6FE70C740C3C8B77331A00BAEE32CA51E390BD3BDE331FFB8E9E AD76D3FE92195241A5A17C5DA8AF4C9053802ACC6F77284B63A8A65104F0F3ED20FDD205 12E47F655BA4D804324B7125FC6452B7438D60C54D7868012533B7164A0A18888FEF5F9C 44937986FDE49C45651DBA6651ED1F863E1CA2D577D692CC50D142E0CC5B5626C2F65865 44562F9237C8368751F858115B26EF75C16C1A2FD22137788AB2B15854DADEED0393D29C 92C9E73E0B0F0949377FC8DF4DF5C72B6CF64BEE187E442B391BE895507AE09BC16BE3CA C0E470FFBEBA185524A830C228F2496B416A1B256FDF9EE0486F253332256159A6A56383 CF9125C6F37C70B682BB7671AEB5769370FC82B6B769DFC5A8DBC5A2F57E1AACBFD43FD8 EE9E06B1B83D4F79100F372BAA323B2420B208CF62F5B44A440B5BACEA9031E41FE2C37C 11180C046DCDC314D4B24C9C3E70D385189671A6859350D1F014DEA5596EF633A58C7F60 AC68422F8B9CFCE0E1CEF52D4D55B40DB4D2082201B9C1577DD25E7FA2DBCFB12B5267EF 0AC15F21ECB26EA3CA20C5709FEB1F099C1B07072EAC1A7E107123EFC4FA0B416D5C0E9A D2FE6D5809372771D2C92770464B49ED41DFB683F375E79E1FC819556B7C9AAEE96FF61F 7887D32E2B54E9576C01B9634A3EC1F04038D188BDD0CF3D8AEE6FEA669C9FA7E21BE306 8323CAB9C8605A745C223C2D35F6583B7A290A4F621988A79936E59C56BEA4B9B038E8CF 9D019F83556154693B4A31F8E308238E2CF6DFA8C6DACDA8B13258A326B874DE5A661711 419E089063D6E51651E17FF1F090B8AFD3BD4BB7AC0C061156F9A835DB39F8940931ECAE A293087C8A0C11E6D9A880DD0290C9AAF5A7F067AB0EFF90E432B3A0C7575D421A114A85 A9C623FD90B6F44267164892BD350D7B8E0FC5099BA3A12A4B4355579E61E402A621E9C2 E34B8EBA80156AAE8D65EBCA8364DC9702215417045F38A1C9A53C352AAAAE9E7252E48E 41402B31A0F4CEC0BC950C7A30AC7DEA9D26605940A513949EA7E6644B88E564082D6C50 1E6AFB9DDDC49AA94F7BBE23B640E132BBFF1B736D7B217CAD4FD168D2EA3E3D891417E4 17773B66C370427C28DC252E1A221824C01BF49129E30736D18D00D52ACC0920704B401E 1CF4399418C80C4C3D8E444CE959D42A59BB90680DCAEEF7BA12EE7B4B1242ED3798222E 2881BFCDBEB89B035E233E1D5E278580FBC4DF9CE9C38285E02E3B1401B781EB18399261 363AEE238C92875246FF215387636765998953A9B9E60768C2C8CC07941C3B7689B5D7D1 ED80033E6B094FFD9682FF5EB9AC7C5C792EFF51ACBFA688FF40CCAF38EB7CA671A9C94E BB1719953511CCD89465C4A31A92F0375B08A293D5D1DFD36CC43A47ABFEA8A43CB5D8B9 44F06569BCC09BED23D81BE9EB71DCD7EAA1E3DDC4FBA76564C9DBB08038099A9D722149 BF8D26BB70891C4F0109C15A26FE9EBCDFFB2A4F5DEB62DD3E0442FF67D555A441A15126 F4FCEF0DCA531457D0366A6A7C3FE35ECDC461959289F6A320CBCADDED8D28A966CA3FA4 A531B0E453F8825C51B7348B3998921B5C6DFD2242EC93C62898AAA5599360B0CA3D8568 B5F5C317D1802D13CD3007EE9AC7E0C6D09CED69B651D129A04EB3A46B9809B2650DF9BF B1CC21DDD4DE5880A2E36E98D7D49F475FFFAC20D4482A94A9276598ACC7879799752807 D0D837416D7C83CAC2D9ADA474A580395471D35252AC08E564DA89E4723D5B5D9C64690F E75A69B2E71402D33D04F6ACE3001E6CE0F7C3DA537343BFFAD92620EB01598A9102665E 74FACFFE80F18B323BB420206AAF1E0D4F358E7E30B3464B056B71ECA5E4AC611AC73ED4 1C05EE84B026F1887EA7F2C0A5434A64506889000D3261114D86410DCF933C955795B8DC C54226BBB93837A6C1579467CEA765076F67800DE13628A1F4E460B89607D727DB27338B 6E649B0CC895C81AA9A5D53B4A8A57308049F5172F0B9218C94394CE64FA0678210954FA BDD2FC69A35DA829573D87ADB38B60B30B562F4608EC6D6D741454B90E08BA88BE5C6A38 085E1044CEF3CC4A2D408B8BCDBE914F6812CAAF46A12406A9826A4D4EF35493FBEADC3A 845DBEEFC923E93C79475EC71D3E80190A3A0BA8911B42DD954AF98DE6F5ECEB6861D002 EC270D7476F23E1CD5C5B6D8B01E94E603CF350ADF0C5EDC194BD98A47C5CBE70EC630AD 56386CE5E4EFE17CAAE5AA4EF7C6AE9F7552DE4B99C21D254A88CACAB9700216115F84AB 78C07B875F669CDE1FA4E5A7F0249F40A88BA33BF4622540EABE747EC214D187CBA0543C E7DA6BB199C08DD5DB550E7F3EDF31E47A16D27F58EBE4AD1915D7D08340F13FE7828719 9DEFE16C034EF9D4EAFBA32287E9B3AA079F21F58E88CA05D842B166DC360856277E961D 6C17C0E0320230C7440C023A82B4C05C8DB2C5C9A03994306070A4EF93E98E787D4E8378 BF454DB18BAB1E46452F5A3C9BA7F044B688F1E2B0FF766DB1297BC77EB14645E73F2E3C DEF7B8A83FC4290E0EED68DC370DF829BC29FEDE32CE780965476548B9A21CFE9EF441E8 D72AF957705FEFA376C181FAF9835252308C2AEBE2B324F13CEDBDF830E87F1C7CDE391D A045D353142CB5446866D86BD4F4E0B9CD04A7D10F4285C329482BD5E19D6EE25D89D696 FB8E04A2D1877B566BFFE417057FB81110BEA8635622C75CC5FCE78E69802633D4800DFA B3CD5A1C2AB8E37D2AA382EDE7321DE6F3CBF25BC0EC66FA76E8760AB4502781F429B074 82909D3410F7CABF1CEAD2E07C3BFFE06F479596504412F57A001E728ACCC7F71D40C71A B066A7E061A903E7D10DC191B6BE1A65AC1C2F3CD7BAA3F250120F27FD77BC8A4A7DDF96 64485C2624AD67529F2F4B931C20D0E9FA63988EA69698BD739AF1FD858A2A52AA07108D 4991D69491CA7E01937ABD1B56DDE2683F3AE6E717D0AB6E02B6FC32F28E21112E3D4927 5B6A7058ABD60763210C0D1EDEC4ED4584364CB113923767344EE001E7C36D1CF4C54214 858CFA0A12DB68663E25987B7103B1D23EEE5E3E442E82F5F07A919DDBB3F07C53929FA6 53EE92CBE56A5414E6489AAAF05CC3769690F5C5E338EFFC215E48D0B33A6242050C8975 19F1E15562FCE463DA4E062CBEC7509385B446B0B18DCC6BDCF2425BE5F640FF86240692 714746D4BDE47D1B101B30C9022E17C0FFE07265800755BCA16472997D5EA1D24BC9D336 4D2E8193FD0B036298E221A40C943006B539B43FA734B9AADDCED6207615A163A117358B 6146EA6A26B721A16CD1EB2CFB30C05520E1A0919D1AF61C955C8E8FB3C7B78A4A2B501F 204C5BE25BFA2D6453D85A300B9FEA45E7A53153E10E1E3E5ECF138A339BBD0D16CE7CD8 F7C2F9C57064FC196A0E1A06C8A1DB2D6D1DA8CFA249155ECCD77B186678C0052F69D9DD 45DFC7A13C6885C0019060E223A56A056864E2883875EDA65833590F3CED66BFD830C6F4 4C69FFA76D39065147901F5274EA82CB6B698F78FE1E64E650A67F0D31E1DF4B612AC295 A4EC468E58CC34A05F5213D883A95306A072AA5259C80DF32F683CD0EA9D36EF49E65612 E52912C8A7928A1C0518E4BAA1663D35CFFE412C1F7290A78E57F22CAEFC23BBFAE93827 E3AD63228510DF391BE0E674FE205C9B66D4A94924B63D0E66A8825C5D7591F52B046815 254F07E90993BA5B5D970776B8E831E162BF62DBD7D3B85B7D9B9E3704387E76475D7223 D62176E87CA56592EC8CAE765DA4E3080A954280F94FD44DE61BE6FF0BBFE4F7C8F05A01 B991BB1C69CEF1EE22843B4EDE6E063FD79E31C53A1EAA6F42677BDB37E8660B338026B0 25C2332131C9DE25B14E378D7F9A3EBCE730644784D730164BC9F21527CDE4322497BFAB A696843DB63949F2556BD7E49E9B19B5001010D62D3570CB31CD2F48A62838B6B7A5347F 88A4D61E8A1A8ACCB60B52C45DE4C70C4D61E48C3B349D632EA787934CC36197617A1714 1D5C1F1EEC6C622CEC4CA73707E888E53A0F8A95738552BD83AE5FC66A17EBFACE5C3D4D 437B2CFF5092AE525F665D6B6E973C2B883DD7069DB64E8D277D9A46292B1A5E19821B21 64A9C68788CEDBC5C2BEAE45F930D19676A07B3EDB5ACA50FDA654E949A6ED46B1E5ABBC 9A8CF4F3D18F5FBB3C89C57ACFE956E422679E44C82C44CCD4C800EA00EABF63A8B9773E FD3FEF0C272C0E20F4BE1AA6CDB4E8DC14D7BD54D3FB25258A784F54509972D026D0E9B9 187415AF190A610682CF52E40C7FE401E79D71F442BB16B985BB2D6D61EEE51E148F2E45 A0B3673FB60CE5B2BD38A98A32EFF4B4BDF5064D6BB11A2473D503F622E65FC96F42D2A1 A7CB1CCB3BB161C4FC8BFD73A3A55B4416ECF8A21289F81F3F2D3EDAA5E741363760C2BE 32EBD1888692ACCCFD17CA32E5BC942B11DAA52D05351745F6FBEC66358B43922738F84C 990648074EE3C7E20A7255FBA4C37A3246858947774C1E5E6980D67F814FC5456B66B4A5 BEE98702CE496DC6BE0BC9E466A229E845924A30BCE8A89BEDBE3BE950895542D576AE0B 660E00F84881DA2D661C3D934B7511CD62442C541D35B37D56B062C4631B426D4C92BFB0 3D03F7C3DBAE8C70F80A401BA6CD1CFE49704439814717F39026B4F971C39E09987A672C 9ECFE5399487A74B7B8D049C05034617B0ED984D8C56BE22253C59C8F6F350F2004076B5 52274D7D3CA8F10334620BEE92254E58D630FC5EBFB14771DC76ADF3F7BD4F6EB1AA1F30 E9BC935DC85DB9B366A914F1C0B451FC7A3AE86B9893687B84763FB08E86AB2575AB5FB4 615618D4846C7BFEDFAEE6EECC84AAA90019829C84BE45EAD3F8750A8915447607A4483B C8E546D9743D5F292B2DAD16F874D61CEB02E628DFDF4A6D73AFB8AF5215754DCE0257A1 D1A608E0EB0EB391945B1B4A66D9D8D8A326A75C0F4900721C9C2B03F57DED5F8EC10648 9C9AB790D5E24058072B4AFC2AA25986B34B2E4A4F50B509D6AFBBA961C1FD94648C5B15 8606BE3BE3FD5580F21279B59C2E30BF1166ED79C6FA372C348EBD5A89D3A595C7B0FC3D A22D2A90BC21698B63038FFD6B3B5A3F9C6A02F04A577E3F7B4F8820F7F4AAAD49B62FCC E6429C7DA8F4641BF215F098644894AEE27F63EDC38783F7ADAFC14FF690721893EC16A1 57F0A263DFB9E6FDFC0F2431A56AFA9B5E0B63968373EF936B3F4D7ED74F3730E8884738 6439B4ACF94C8A2A4B818F00D21AA7840B02DC5EF5843E7099ED5494342E4AE808DBE447 2F56BB3989F0A5222A462C8CF2C8852862C7A791A8DBDD6FAF4884FC49D005ADA2700C68 1DE2FAD0E6141DE2ECA659541460F6BEA0F0E8E130BAFAD943406B2EFEFDA7CAC114E25F BF8C75DEDEE78C2ECDFA431B5E2479DFB0B31894454F2CA890B2EC35F8259E1FA25CD0E6 C45A4A03C9348BABF567958124283F24F72479D84079E0662367996C388591A790C670D1 02BF473F86B0BF54F72737F1CE4F7195E91E5FB268D2FD4248D95C82786C6DF12DEE8309 C8001677F05D6B7D54A4096EBD14B2BDFAD0FF077D8F8316009349DE3ADF8CACD67CE8D1 275592BD8D8F56420F9B0BD10742CE96AFB1912F51CBDC2B798D5D87EC51199D07549B53 EFC8B33CE5D26569B3383E4B279FB182AE9B867AE62AEA5D6DF722D906A75A58BA546B36 04EBF976FA16C54BC2B9641E384ED27E84A1FAB468E65D5FE98DFEE237C66F5784004071 6019653B3F40A54E2E17A28C17E82EF0F2333959DD1982A64452AD5E8DEE45F8A49A0895 D81046B48BFA968FD84768C715E49E9977A69FF7759B41111CAE2D266C825BA849EF68F2 1DD026D2CC56C5179BE7FEA32088E50133C3987154901D08A278D5C8C2C165142856A895 E49688A92A890DFEE16722097BA6ADB24A22E5EDA9078BF5047C054B431E98F464492261 7FA5DDC5CC838A192CF2DEDF3196B59CA5CE78C157D80048A8B588B079887C6B85198852 3F1DCA2253A487D7EDB480C366CFD2C0B84B7F2C95337CD903DB0DD4E70A4BC9DEA35758 8499C72EDCEB62B761EE7D8A845F0D9A53DB89E2A439A264961B2EDFB70C0C356DF067BB 7E3BDEEFB83B28D4FEA6F0F0825F2D88AE43DBB19FFDEF300B90F35498EA5DE4C8FA86A4 C759DF48787BE4264D0E125910C2E29EC1EF96D054F64E57E05BE101EC7C9D15519A4C90 969E72FE42B1E05558B6C5441BCF65F33B264C7B637852EF186706846392545E0D6643C0 DE669FD64B5D0FFA2448240ACD1416F63A48C5ECB17D1B886A1891F66077B6467074B63B B6CABD00D7FC312AA3FF7082C113C1943B793E1C0C2340455BBBDEAE4240CDC4A30E18AB C53B91E09E94CA55E8FAA3267F33521439065B6B916055CF09BE1BBB5AA9D41423DC19AC ACC148BCEEAF80D221DE34A7C04C8149BA8C8929DA1DF9061C3E33E484A01709CD14033D 918C49A029D06DC06E67BB280B01B33FB3088C8915DFF0F5070C67DA274164235FD9F957 D66371A591A73966F685622CAEEBFF95F34E60BB873E65CF82C74DB5311EEC3823F07C78 68600CF1DB67EDE3185D32F2B255BB6C8C48ABA7F0C2589DF0136CFE97AE106B2CA83472 61F2312930788ED57DE33AA9141013644C0F1807FB06BEA091D29EC1CBA849331CD6DA38 98820434874D97809FEFCE39BE34459F490A276297E4492A5E9BBBB0B2942F700E441D6E 6C3D401BB66F20A3E1A0A6DD039EF3370918BEE59E8A1B791EE2ABE8861E7A5F88431DBD 1C899C5F2D1B3C8DA8CAE051B611971B584190E2FA181E9714AA1D36456E0BA5E7CAB41F EB211B41E3FCB461A8902F832F0884B92AB8F8BB64F100A3E5558B815D9D9C11C9F6AA42 9DB13F0CBF542E535E058F9BF7472E7F5F524383F2E9CF776CC7115D1CD12FC211E841A9 F09F3B81EE7548341092CB7740F3544899B85C4FC6ECE17AE527B85282ECAACD736F612E D00FA9E4485019D96DB88260C77D6232523A1DC50E5532EB4B3CB9E2FB0A3DD076BDEBA9 955D2405C12E57A5055BA1311B62163C30566ACEBA925CDF42F5D03D9A9E684D2AAE13E5 5EF97F854E2060853ACA2286E0B96C6E97C5114A4CBAFAC60158B03E15E86C7E5D3F5597 23E124F10D5A468993E3FFD7B1E1F4F53CD380DAAF624B4C4DC211397EC4289FD9989A0A 6DAB50FD342EB2E2C1672BED777DFD4AC52455BC5DCA7B0A68F8B267D27D6B6D818F0E30 D2C733F435DF5E30775ABDEE967B6C31625788D42F076D969A1B9C85EDA3F739BE5F42BA 3D023DC44CC5EF9F5B2F70B0BD6971B090BDDBBBC4947D9FB72CF2591B968653F49364D4 6BBDB6175DCB735175AF613D27A4F23CE5DBF9AF0E6C2D882446E4AF9A1F8E981CEE2F86 B1B8B57D6D57668BFE3AB89091D62DFEB56CBB0917240D64A1A519015F0B0000260B212A 052AB64AB991C9B7CD3B978FAD9ACDCBB3C39FB91A3B62F30051D25AFA69E5FF7697F9F8 CC2ECC5AF51DF8407EDA190F7D6EE62BC8E7055A1D828BC945BC18635E26EFA798125907 E7D99386FF3D100F687181A8AA35F9F278B7D8F8E1434A6112B7D89F61AF04B4F43F7D1D 07444546DA831724DAD80F2D1889ECCECD1171E290EBA56EA71B366D55C6E9907A94D084 923FEEC3056D0B61CF4EC01F54C45B22CDA1B2818371A1B15964F463AF492C267EDD71DC 1547A6B4FC1DF7EA624445D5C35F7E7CE8E10AC6A9C57AA3A43246F0F27F4DF4DCCD6612 80AF90BE943CD606ADADEEC5EBF1C1F214347FCDC8581363855899C86CC533E7EDB33CB6 5F2C533FF738451B2BFF351ED2B0011ABEBB14B21DEF787C89FC5AB800C6AEB0A7D23430 594925DF35C689B3571DF2D0923C1201B2243537BC3AEAC697F211BC16DF978B887FE566 FCB745921FA88FAA24E98C63C3CE3D795EE8472748DC84FB641399B0C4D0A385DB056FE3 6D05A1781E04FF0FE8EB5D2CBC256917FCEC55B6E93B13A0F3BEDDACF395EF73798236DA 8BC10D731F99D88EA9970AF8C341B07725466BDDDFD29C6C196AF9BE9E67A7647234FDCE FD84E94447A72725685F27C1BBF72684BA4CF9C8121F4228F6B3F53DC28E821C114E72ED 7547EDA2CB5FDAF9E9FE1FD5D8294E192A07804784EB82FC1DD2CF4636AAE508F7A20DAB 22DC5C456EE7DB8B4148F9A6E6F63BAA12054DC25DC8C3DA7F32213E3C5FB5BC7DB36AD4 89B37D6DEA4DB7B6D5BE7691B1E859EB7AF67EE2201B81AC696F16DDDC152B567AB8784D 9051EDEE86ECE4868A5854A0325F7455A2A41D72A9B5E47B1AAC516C30F7B0F180B24B12 678297C7D11679CD8955DC42147C94F1194D566B9486F4619C951E8B1D8BC5CD1CF4B575 39BDD9EC9AF579739355DE1C5254B42AEBC0B5879B74356ECA151AB5C06746FCA917C39A 76FAEFD12167C7F1E9A74696A95227CBA4313FB89552766D803EE88E881AB8246AA225F7 90CFF838B09D141447A2887FC8DAF02B48C8B815A2D17B8A9CB65A0C15A7299149FA3EC8 F3E85B080C56F199C24837F87F521A9FE4F7111B28C6DFAC196912ED716EE9DC5CEC7606 9D6CA05531D2EBCB2D1BBBCCF7E1375A8306D2D381DEE012985F529B28C79015A613C859 2805D2E87F280F96EACA18F18209794E3E4819E009993682F8186E10ED2547439EC09A60 D9413EBDAE9A3296C83755402AE38AF622B47D22FB08AD2098E1AD33F37E4150AAE28A9A 0351F77BD40958C2E2E7F5D14B9919664AAC95830A8CBA737AE844881D28CA0C352DCB24 4DE35A1CF3535F2F5A97D07E948A91C58F6FE24E370673590B6C5A04B2BA216C674160B7 F930A7BD5782AD30C9CA5369D26595267FEED62BC7256EB110A4BD3C55BBB45A141F9911 5F72B3341EDFF1E2889E52DB0C9CF5F409B6C1931CC220B236CEDAD0EF806D77B306F5B9 61B1E6DB6C20D1CD7060470D9E975B852DDB68A230CE93CDF13C23B8EE47CBA1D8FFD74F 00A6FAA9A2F7459185436F80A0A2A5A288771CDF9641859BB74C83940ED2E5716A75602E 13041CA81EDFD738DCEF8B174922755DE04E1778614D37B5F5F59CE26716A6E915733598 8B704574A00C925D0EB650E30BC42E335E91900A4E4A5D4E4FBC30F4B49ACDE409EBB815 F7DDBC7B84D70CA2CD94E09080C209EF4E260C5D79C52432DE51F9FBF309200D1D8057DD E69C05E420B033E8A19C6D302C434EE0BE85799363FE27835CEEE502E862584DBBF81EEB 92B078646DF309D3D23D7566F8697ADC8E9EA5338D9E6CD7CF946C09C9B0226561773076 BECF47EE9B8C129155C3C45E0115A1E164D9D7CD47FBE341F6BC00EE1FD4D6AA49AF2F1A 94C7D0B5E5AE22BC9E8B8712C1B175CA3C20167FA15A6D14C2CC4783344E8CEB0C44C2D1 E2D03F49BC7236B00D464AB768EC7074C90D64C9D4438959A5886F57119764D8BE8E120E FC7F82D200737866B98A54B40AF08C0C58CD477A3FA030A9DB1CA530C1A6B0D9A7D614F9 5BEEEA52731A9DD004E3CB8F0DACABB319FFDAAC23ABFE283BB8A989F68AEFA0F71F2DEA 56BD0E75F711DA68E5097656B1429AFFBEB130804051D7EE1A73FC675CBA9AE813D7E58D 775A3D27CE8C411F1EF2AC95A747C00AAFAB1D7A377143204F974F4B14E3DFBDA52FFA02 692A93B680178DDB9815AF50C4364288AAC1F173547E244DECD8BD0800C25F41F486CF60 C3DB6291684B4DEC9993D82C7D329FCAB3B6F8B022A110B01C0D3175553B4768910C8349 3A02AE58DCDB619029FA6E0BE8C4D77E57122B189F6DFAEC27783C5A392D0F3FDD29CE1C 108A3934078F45E29E50CF9BCC2B3AFEF6E2EE837F8340A113B2CA7D294E5E6FE0E4BCA7 DFD50DD19B0DD59FA76984EED12FC49CE2444F13943AF106652DC39801B43B34DA2392EA 54474411DD5C890244E80BF14CAC16D9196BC45B91836CB62AD7CA4253B65DD2C7324F4B 72F6884B66BF310983D18833B32CF1B05C5A37F1BE2B79486B1AFFBFBCC79DB590085D9F 40852D20B64A63165731979E005554B551AA7E76BE4EA202A26AC585328B865CC004F727 9047510E26C21B3AF47AD5A90DF7EC659A9D821A0CB4BA9878E616DAB6DEBDF7EDFB80BF 7E57132A32AB5E40895B4B3B9F0C4D2A7AD521C7AA47EC5A2636596D8D24FD9AB3F8009C C9AF2718292E4A826EDA731237C1C1D5A1FF8836AD61304C3E4356734DF8BF90BDE86FE8 A55811099CB668114F76B3446868387A15D72E2782ADD2FBBF92A95ABD066CAC79F6C995 EC01EFE2B81D040ED472B29FDB076BDAAD7F66542C49AED601F37FD8F2C9058620D10E7E 8B1F3B00C484EB448041496C69A27ED711F12796C91D4B6DEEE152C308607DCB019C57C5 322F25AF784C5C4031C3D5C3AF8D6EF660FCB488D2A8F8625A5968D4B8F49CE17E726186 A421BBA3181F8375E6E37214406F39CFD71166082A80BC4B5E0DFBB014CA2725729415D5 51232D6F7F8699ABAA51C4DE801FF7800BCA6F0AD6B0DCCA1D3BB91AF7EE27E21F6FA861 17E9F79032B2F0C1A8C5F54CC279BC113E7FBA18BCB15996695BC2014A2BE0C17BB8A1CC D97B45D467D589CFE14F8BE2681F139C7E9443DE933C3813AD6C66701D12BB256E79F895 E2FDDD2BAC07473E675FEF909C9037857E4B370DF5F608222559B2D2DE9A4EE5FF3765EE 8047C1F7F173EA07252A237CE677195C127C6008BF757A6719AC92A91715AF887449F268 9E094ED1FE139D4BF8508F9EE2D678B73EB417F536EA7E6C00B1664705DD553827067096 145F76AE8601DD07A57B950AAF685A26E631FCE79B6F3EC88E560FD36B11FA947DEB06A3 881232E570AF1AAD2D311C9BF76A4F1CACF750540F71753194A545C5DA95223A3E580F9C 79E0D9490B60B1EE8420CFE06AD37BAA4F8A432A5CAA5E9FBFB8E42BC2B8550C53AE5BAF 7B1D4C2C45B98DE66198EE9C816CC1AFCBB7932D7D9C7603809C5919EFB95D657B19D87F 7279F5DB12D33FFFBC9C1F3EE7C4EE919B4C92147E6AE4381CFE23A5864032B444087A10 4E37C5FEA6984DFA4099478ED754FEACCBFC6C0DA5907808D35462B8FF5777C57B3788EB 2354A49EEBE17501CCB8E3F7AE0D60625CD1A26CA47A979702C8066EA9048F47EDDE08AB 484291B0F466A1533AC4D644B9DEE29F4BD9A8452A8CCBE86738223D525A1A653F6CA166 972A8F4BC765F678F91F4F609DC1394B00F3E690D7EAE6FB11017E46F2BAD8D02D4FD6C0 093E9C2BB2248B30247256C379EE896731B4175FC1875C0E156AF068551190D3A081D6A5 A85A0AE4976941A47A734474C8639347E06C617221A745E98BAB306854BEAFB84C19A4A7 303E75FCF95967FE022E68998135C7D507D3DB971344DB26C6F17EC9E12BAE463986A94A 759ADD637781EBCCF869823A5E9DC02452D94F4746E1FCA4EE86E39FE27D8917E706550F 0F03EA8838783CB16FC23CBD74FBFCC26D7D9FD02857C1ED07AC5E8B46FE5A178A3FA601 F87CB96E51B7AC923B90DD8B4849FAFF842F7FAB0F8A628EF2FE08E01807C64F228E6E85 B4D876392D6301FF3E3F25630F1104ADD3A6911A83389C0A710D692314B27290FD18C4AF A663FB0CC31D4EF604F320BC59C1025A32D6080CE41D21DB9071DCDB1C809CDC6C3B29D2 AC673AF531D3ADE24BF95FD8B12B186FCCB7743BE203BBC4F4FAB97415FEE05C9C6643A5 445C27FB6BE230A7BA61EE4F59684A100F44A3C34A58D182D2FB1D86AC4473A97C54C684 37173719E31CA7E7192DAAA4BAFDDFED4763BEF509E661DE80F44FF731CE30A348F05473 EFFBF658D4D29BD3C45380184F7ED76A71E01B732221DEF41C976E0B6836BA554A5651B2 FA5ABD36632FD60C2EB00DCFADFBCEA4A75A4649CA11671367FC55CA3DE0B5B2098E5897 1043CC938EDC3964368A4059507E3100780CA98F9C69DD06508B3EE104253F25D51C5697 8629F9ED988725FDDFF61891CAED173360F38E2D3AA1065017B30D5AD8F0BBB81EB4B04B 8C5950A541E38B92205CEA6812F0F687939A6D5A3815A6D94463EECC9B737515998A400E 0AE8BF402588D9CE9AB76EED40848021C511C7182A6FB92FCD076B3051E5F832E317F9A3 5BE5585DB8D0EF95C34C056575C669553240EAE285498154CD0C0B66ED710370C04E4FA7 A49B0E65B5E79DF3CD296CF147D1DC4C5A99BC247F06AA0DB95C45EE681BF5D7E72B4F13 11F74FF9E8F505227EAE0E71790C4C6603099135BB7294962E0E0626B97997B6026018F6 2BC8F44F502B28C9968A97F0083E067D7CD767AA378764A31E5D7834734EE3E5B11D617A CB5731FE367EC442AE3BB5F3BD40B61F3A0058EB3B16FD4CA59598DD46AE51B505B09F42 E6B3C198A71D6848E5E549575987D656DFE0CAA5C182D5C10D147089763B43F9DA4B4BF1 AEE9A8036E325CA3367F8C13E3AA29C43117D0B5511EB834F1FAAB0C62954E92C6A143B4 D44D0607D42AA8612BE7722D0A38BF5E983F6D2D0ABD11CD25260B681A28368C57988B52 F6201D4987C2F5979CF8205E36FF0FACFC80582B9FFD10663CE5C55940947589FE259C22 C59143E6569D21AE13F10F17FEE2CDF6DEE0CA8C1726A69C4B645CFE6BA13F93E66958CD 699760804619BE05DE6F9558DA6A14B8DD968F19A110CA5CCFE8764799280022F8F8A626 AA232DF8B232524C436D7F20A772A11429398D6C39E9C79A749CF643BB0125B977C15AF9 1A1C7CB5019760C7DB27DA59E5013D97996FF2837A395AB5C7827E7FC737938F3A23FDFF 25041DB6F0FD82D1B68FC510883865566DA082BAA4AC9E94B331062B96B3C2DDAAD10637 C92E981FD6684786EDCEC3EB70023C8597C82B4CBD2FD1E03283FE3442333CD1DDA07618 1F9D5E4B3C7ED2B6D1123F1D00F70C6A4358280DFFBBFC85BF5B60837F49ED820D63048B 22880CB3D02775893C5B517E246D41C174756F0F4E8A4F65F17FBDE526A6775A7400A6E7 6A82240590DBC7B69E5C433247EE21D8207DCFF6C06F9D0B25BB0DBA9CF7604C5A93E19B 4C7FFCE8D60F07DF39D5B2D321096A5F326F6CBBF07024419C74D3DE82EA8D3C65E987DD DB70C624FA31A1B864E71103E04D14EAE4105EF65A2AE7828F59E44FE41A7F6BD8653DA8 F2AFD7FC026E03B009A8DB946FB345E85F7EEBC4CE7F9E518613660D93E05FB62512D339 0FB935021ED5027A7E1E233F8F279A8E76CFEA041E194BF4D569FF1EA2DB079DCF0860CF 9904629761F7B93197D515440EB0BC0B4BF6FDCE27748C7633B84F0D42EB75D7DE039E3E 53959C8B0019A2D74C6A3DC02F9F30F3585A4BC25379E55D4D6165EFFA5528DB81F6A4E4 6C621E0A57DFE5D7D20AAEFE094352F707ADAFE8D87E683F2337F797486E1C7DB1BE9319 0D18E39F1D5805ECBEDB3212159E5F170D1F6AEDF67EF5134612570178CCA2724AAF4033 5393F0394A7C85B10EB55F5050672C490F7701A2DFC55D38C6631219C9249E1F9A8AC3FB CBC1066B155C6929A92B9660C4D1E90A552E0A17C417C3BDAC857D9C145E8B2797429C03 8C997AB6490BCC41D022DD656777F77EE81E11C93D45BB1958BD003EB84F3E48AC68CB32 415B2D0CBA896B179BE72A5B1F59F276ED7A243FF9ADF5DF0024166E1A684BB9E9A408BC 1E10B17EF542EECC0E7C23F92E8BCC9B262939D4D402829A9FD8A851F2FB81424F102F2A 380164EF7C20CE21DF96D9E103619EF9D7D8E0099CDBC81075A0888A9F88A00CB823F0C3 A4955240D1121D3E2150540772795D8409B2CE18BC13DAE1CC6C6C9B3A07F450156344E3 5DA0D6CE8FD8D66F2DF34863F4A35B740AD4CEEC1C2F4E3E9F7851445FD1495D381AF21B B5671F0AF07DD8D0E442BB00F77F06E10FC24CE96625B9D7E7748E4FF5E037E83BD8B206 3DAFAC6BEB2DD40B5A8FEEB9EAA838DDAF9BC3F8FF9CC66D7C3FEE4DCA72B17B0428371E 0E0A1842B6B070D62E8D17F61BC2B54B5557AB831C6FC37A7502798A5178D8B65D1C83C4 1C6ADD42ADEBB438CBC7B6BC2DBF7EC6BB56D0BFF6665A1856E0D8BBBDB4312E3B7108B9 1656916EE3BFAFA4D758C57B0EF8CD81863DB4EE3E0496297F2CE54BCBA2BD82DACAF602 6280B355BCDBD93896DF98F8BFB7587194C231C195783C3BA58FFB6D13F8F3D9635D545F 44BC6C6A5F204B6B55FC99CB0634FE1C0BF61F9DF78C9CE121CF924A6917862EC4C3E9D2 DDBE5AF0BC2DE993139FDAD1D21ACD5EE49AD1E849FC25D659214A144BB116B9077F39B7 1A32FE44771CFC4AC48B33840D43A42F2806B97AA9640AA1497AEF690CF237CC5C31AA2E 1333C83D3C6FEED3CBB55B09D1D3CCBC8E86DD198864368FDFDBF156E14753D31EE80412 89BC22575658E2022C615120EBEC78189198F023DE04B7D670C60F7D15FDA8B651FC316B F74024D66C8F91F80491B9BB615D3A43A763481B5E02C2CA60DE1BA8B566FF297EC5A5DC 1A82ACD042DB044A8BF802F97B3E73FADA019A98F60850892018C9C9DA652D2BF314D4AD F0CDDC8352F7450E901873F0E35732E85D8F2A67101ABBF94C903C4AB6C658553B6AFD91 9D835908F0CD9D989AA30C635ACC923D9BA6123C1B34FC891E7CEF3BC6F9D660DE555E58 76A694664EE9974D53A4BD5DCFECFB654B107A48EC1E1E93EAC8A4D69354F7302DEF8D71 204713D7C4D2334200B851083E964E13537A6A74BC4AA53AEA545D0CCDAD6579A0883329 B0FD6925112E81519FEDFE1745A6AFD9949027C957D59F84CE1F51BF4DCEDFD805B0B667 929D199A19A8DF6E7244B4DA104143B852398419A86EC877B0D1D31F8B6EF60C711B9960 BDF6BA343A5FE18FA5B68961FA791C200CCF0541A5FBD698BE09F2BF0A5C7E8B833DA137 1067C3079060513B27AA71B3A91FFE1F3EF37BC320957A7AE50EA2BF6446210EFB06F50E B224197DAA7D28B2D2E77CC9F878B18A89B4E78C21EC955C9F158E49F857ED83357475BF 2BFBF94CA082C5876C00C5844723BFF3B78B24677938809F6EEAA996CB3548F725916ED2 2785706A467BC667083278E461B752D3DFC15C2B82BA347511954A41E7E6A8D0F9354994 D2BEC2290F991A59E3C5DB456862A0B0ABE1603C9348B804A8E6526D0272FDDCF7FE7133 56A22275D5280C0B6D0119CB09EC5F0E8C4E9AE6319D77C2DA17493775196BFAB63BCA8B 2509F39CD342831AE6BEC79D6B03F227C51C2456DDE326B669DC01205760F25222333099 C79F0319F7AD40593BD4C45BD6562BB4C7FCBF8D3D215C1F22CC19DCA1A5F3B85665200E 7D9F12B3C5D4446AC19AE636E0DEEB7F19C46E7565F0B39AA1D8DF12049E939A73D005F0 E5D6F83CB7AC4273058D7B2ECD8C78789EFE77107DEFBC0A686AAD6F16CF72DC81DCCF0E B550E6D33EDD750F8717FB644D15C7F6E37B834BDAE70F11374563E6FFCF8E87BFF4F419 BFC9E1B89C1DF41B5CBB93546010498BC30B34CAA6AAF93E62E538EF819F05DF962069F6 62DBE9714374D5BF5B28802F8FA0FD3458257EB6483D9CFD56426D03632A543FA5C8FFA1 52AF1AB9C82E6173B8517CDF2FDD9DD8534FC7399AEFA16C6EB46B4D1CC743A5183FCC00 A8835E0F0274DF4364F1A3F5899CA2B669F0C6A3593F9F763D859392DB14D5E4F566CB0F 00BD8362EA404A9A8999CB543CE38747E3A64CC8CA0C6A68E4ABA12A649636C0E76C4D7E 623D77E65AC2A85C2F2DFDD27C7DBD326C41F6956ED43BA1835A2A6A191F047F09FFD9D4 8970D9852A841AFE38F26C2CE036C2EC120A71C3FEC5329F3D42FFDDE2990F59CDF42DAD 07866E2122D49EAD3F863218AD72E73F8AD87E5BBEF3AFCB78FBEC2A34D96C75A7A8FB9D F67C412864723473125597AD4C4E2E5928FE6E915F179F0C341B77D5A78F9B6BDD7CAE13 DD73F45A7F1B635CB491F2B8848F67F25D70C01E0E5970A74CACDCF9DA14496A42D79DF3 7521E6250DE575466A41537FCB8FBCE48B61D8F0A4AF80B6356A4FE085BF4F5C71A04EDE 168503578E9274FECE44E569521D541E07CA4A1F357EB85BEBC13ADF5D5A0DF077593456 9ACECF109ACFCE2EEF59EA88536A27CF98A58970EC2C967F73B392B47AD73A44DFBA64F2 AF6C083CD92A80FE8126F13AAE39B6CBA0FA85A60A6B785E6A76220789721B40219B9058 A9557B98BA74CC5978107B7813FBDB503BAA1AA49A42106F636727315AE15358B8F540A8 2BA3D0436D12CD7D7C714DC0344CA3F69B4DDD6EEC98DA07105ECAE43307553A9D3332A1 F699B8B9AF3FEB0A4D619F50027F9CF60C6E6B030A5ED8C8CB5401C3FFDD5C15A37C9456 051598662317DE93A0794D6873C12845FE1284D530430F17B71D320864434EAD3D58C596 78390E1BF4F73A6725FEE9CF29C56DDAA7734A39508FC6E6F6C789ABDB9C6F84123770C2 EF7FA4F34CECD92D6C781CA9D803D8FF11C94240BA1F827F8A66691D9938F150707A281F D74E750929A3C264FA7193405CA1B5D15DC113E247D3CCB183C1026629C4EB993E086341 165D24E0DB7E8D2617A4BD5824828A862B44142C3D56842C7C289356773C7F0313FA4FCD E5DEC438BED818C157847472CBBF9DDE6DB181D9365BD1CAD4B79719711BBBD78C19D8C1 F7F7E3CD6B812CD828E4D19D16DCDC675CCEF3F92E5A5E99358E341C0A5C21E4573DB0B8 14A326C0DA86A5B97AAB956CC3EDF3C9CA5CF511E48014176A2A6F69F2A83EDABDB7A1E8 46F222D874E39B69FC959766130436441DE6E1B0142298853A06F074039999FF0984FD06 B9C878FE95214EEE2EABB23ACD630392FE58005A291E4FE4C73BAD6DE22FC1B5E347DC7A 12B44CFAF893AB6EF29D3659B51004B74D82E0FD4118D78C8B26CE2FC906A48A892BBEDB 26E9C7B05A93D81C6F4475599D72DEB20E59B963A6877F537F15C2C17517263E6933D55D 92C9E8E8DB24D2A5B9FEBAD7500449DC10AE785DFEA6155CB97F538F9B9AE45F26FC34B3 AC03A6BC4FBC77D455035FA51879E1749B24EA9384E9991ACBEC3AF8E947254D69AD5132 B3F8EC539C665CD40855DFBC75504C482FD96CD06B6A1C10052089AE4F9226A01F0AFD33 749894D0B11B31CE90FE833E04E0122D9C3353617E5D70A963AE7B63BDD4CE72A25CC2EB 1D53B7D395C923B762AC8CC41FA916338E426D0D67C1AA05FD45C0524DAEE4E84021E5A2 EAC75C47B7C0B0B02C79F648791C568B39A737C25D46836C3F2FE4A703E919030C276D44 6277B46C71C35CAC61D705862F6729D521296B50E94F04198283C3B78171A8E25B6AB182 B7C12B018405C6B48C38818202B1A3071E0173CEAE97D4339DA6F93A91165AEFC64E86EB 4FA89A2CCE8826653520E78308157389ACAAE56C34B50B28613033F58716213AB8D134AB 73A3DA4CEFB3D86B663717CAA0950CDF6C4D1F5A39BE6A9666EF07433015F1228AD9AE63 4831567DA71DC306939F9716BC1F58366C1E9B8C3A2626988824E9B4C9F91CB2AF8170B9 912DD6785AF7E71403A073D6BFAE38DA75B5E84E5618FE222B03657FF36DA78BB8422D3E 07AD2CCC95EECF78C1F69AC31663E7576564B2B294CFD520E3DF68F3D61AC8276BF7DE38 5FB2DD8F0050819FA416DD676D0160989040D7590F6D79D2753DEA90DC8AECABCE6D0B98 21914AD2CFB67D17C436B688B2C44081D6128F2D42A4D3E3CEB0F902B5586F94248C8C62 76878203481E009F4EE22C9A222A9101F6C938A9CF6E497292103DB2B567BE9B5E6AF7E0 FDF84B48E2D55C9167133274994F7B3DADC84DA9B3776D8C48956F359F8EC4F56A602D4D D0F5D0E1968B84301EC97CC8E8C4194AD2D4F16D3DF98D90DE13D80DFF2D9B8C83FA37C0 324D0F0B57A9B087B12BC0A27A080F22A037FFF49BAC17135861D7C76E7A34D1C35BA334 B8DF2F77B69DF729554188E303135B3BA7019CCAB16E59F08E78E3B1BE4F95B5C4B4B480 3CC59FFE533A3B08E75484452C04793954B8196D761DCD9A42FB3922FDE9949EE06A1FA2 BE849F9457C4FBF2F0CC3EC386691D1DAE349720885D8164BB51DA96EC40FF92A79CF9FB 663D94AF3B8556C245CF1B8F4693C6F367D5BDDCCFE3C87BB557B756A84B56C10F13B657 FFE6345278E2F0B72053179A21EAE83D1361FED18489E1110F29263E81F0C936693E9D15 CF3A55A4E5E25FD7AA1BE42994D7F58725CFA5CE72C7E3179C72115590A031994540459E F0C5043FA872A1216113910B1ABF192210ED10FB2E2D6EA28BAD70C97044CAD6C663CA34 1CC5112955B1E8A49784CD3A6CB6D2B986634313EC8B1A42CE6DB56978A8CA2584D454B0 19152DCC737844109617BAA01303BC08D2AE5C3A193BDFB86B86C96D31EF110FC2A94E55 145E73E5C369DCD92A4795E58EB01F46395A5E1C7C4686FEF7CD4C19FA7764E7EA929069 CB52E76472469E8EFD6145410EB73D4167913B689E8FBF4F3A4597ADB14C58E7DF7FAFDF 378478D06F45CFC4E735BC554D6CD49971B499C9A797287DE4A78A91081EA711477B6038 DA21B9932C9B6419DE404C6EEBD92A8FD33BFA0CE68A446E81ABD1397B01068E6517B9BE FB6C5CB6279BC785C6726DFCC4A9391DF39FD10E41657773A269118ED79E7C4A1620FE8A 7BED1CF2A9961CD6AFA82CBA754368594F6066D4877F1734F904D729CA299F9CF025A896 5DF5548E9DEA0EF1D4CF5ACBB5F91FC61C8B320B95859334BF312F11CCE4919067C640C2 25515E3B3F9D34954781FB87A2DEBB113E6BD747E6F512CB78A1A5927FA960D19F51BF41 648169868F539AA467E94845C06DC91393FF34EBCCA1A949025BA3073CBFE49A7632EDB2 205715AE2D277259D0EFAB837A91B91186C7B4FE073ABC20E750A4E4789E166C12A76606 584D9C67B8D6912B1F9FF9562B26A29A410F33B2B9860938E901E094DDDD1C893AF82A7B B0CB3EA4681B471B24D35E52AD6C4D674CB1B2D4200364140800F897A0594F5CDADB5CDE 1986CEDDC647585676028F5B56735ACC69A17C29A3EB8B61D0AFCA914C2781526DCA0665 0FC32BDB40C01537226DC02E01C362843EEAE3CC00474979D3971F0ED2E7F8F2469BF613 3388CA58FAD1993DAA247AFFAD2FCAB5668AAC0C2FD827FE5BE78BC736BD20C689BD161B 399084C9A83352CEF67FF0C192D5F131B8E9C61EC5BB78CE6879638546CD16B1C1094E99 6682874A09832367866C01FBC6959F245E8D78AA083899ADB5DD8A95D9BB12B9BDCB4B65 4317C97C258E3BB762F37AC23B0F9C7254D79760B0F84E7C470B0C21C27634D6C00E354C 44732612DD054E9A00925C46C87E9A0FFAA2EDBE1D57A04FEDEF0774998348C4A1786AEF 5BAF7607E463B6FFC228F0B1B2490A66DC5B686CE0572D7D95C5AA1B30EE74667AD505B6 9B188769868C621B3706AD07C73B624B779568EF7C589424604FD8946A92954D53E56777 98D25E276A6B859115A9F56D893346748F5471957F8B97EC1C7B033E013AC2E50C901E4F D0211A476F0191B68483B546FCE0C9212B60BD961CF9E0E3B3ECBA22DE0210B9C8616DE3 1A4FD1FF818A3262A8A8A8535A8954E1D521F3DFF25BB3C95CD22131471DE3715F8C4251 90C73646CB571ABFC11315DA17B7BC38F2272FD47289BA8E451445B67800FDF2E8D9D644 8675217EAF539183939718C9376E32343DDD1A458EAF477F177D98815B2ED058E922AA82 5D57E0D4716E57F9698A7066BF169962F343AD79ABC0D63F1AF241E5A0ACDB6C712470B4 3D8D0A8432C140F154527C2BDE40E114E1BEE075355976BDB17D2032455C295B5B89E852 44CDA5489CC877D95BA5442C8990DB168BAF9DD802B559DEC6634FE6D425F8B53779A321 698EC48FD46109C7988CDF953C6CFE1C980BDE47E0839D8C3E318F20665F9AB653EF1D44 7B6879492F2D83558030961E29F60703342B139AFE1C242E749EA41A32EC23E89A0BBAE0 CD3D06CEB4CE948067F2176D0054B308E6281673C9B990B9FF6C3D041AD1CDC2D02A8713 EC979EC7822C8943B46DC75EDB4BB0F1372BACC242B43CAFA042C1B9E5A36043F99600E4 FC29D5A237C605A08BC4C7ED1EC4ED0F83862C028B8107ECBFEA611193D14E7097EEB219 36318F15E02051E8A158E9EFC4E57549797E64E8FDF7E65E0565C1BC6A09961562126DF9 742AD913A84F0F4DEDD1AA85347327FC1B79E6CCE08BD6590A60E50F22E7C4DD60958F0F 7D5FCB94A3328C49630F3CFE6CCF73602733D6364A6EDFEAC39FF2A280949FBDDA1E5083 7565BE3A413160A3C12792640C863418C22D776F8B55E05F52DE9ECD4454B0243406FAB4 9927A772E65993B862CCD44710E996D1A096580E0DEBAEB35D9A3FC79CDEAA3C1A3DD498 F907456E395A6E06C7C5B54BA44BCCE3397D61F727A4FA8DDA172AABAA8BE54CE90C747B 8EC6E2E31A6B1A8EC2D78AC911E12C8A28C9492EFD7822EAFDF2ADFDC9A20594A47E2AD3 0DBA088373871D01F8D2F54078E06C8D4117C6C3C6002848EA04699A4E83D34ECCA2F325 C1B15E4FE06F2614802F841EEE1949FD4280AF390D2F85ED955A16560AD1266967B1903B 01FA03C1F748F831CA3E7CA86444D9B2ACEEF383CE8A5693569B9A67B3DF67BCAB47B8C1 57B00C81D376455E0F6BC74E026E5604C0874361BA52D63A519E15AF79F2D93BB780C89E AE9FBB2A48993B57EF79989921CD57CA353BC474BD841D3E289727EF34583B7F6486F870 A346832DF3C4B0795EBDB8A37E085512A197BE83BEACBFBB2C4BE3EABAFC6132F9C2450A 1E33DB97A0C6669499915C0841FF67E7F5589BF91F6BF409506EFB1E461039E941ED93AB BF4FD231CE2E92116157A47D3F232448A2816C66AA797776D51D6B0EFCE2096AC49AF5F5 7DCED3F0272673B1F89838C9C62F6FDD4E4D452376EFF8251111701278B1196C28DA2CF2 8026C35F2F1D04AE15324F1D9DBD41AE3A8020F0C700372F6111777806B0D824E569789D 809428385A2B68CD7BB0FB98549446C2BB9765B478DC36964F945D1406BACBE17829466A AD6B37E784D09D4C00E1F287A5E98528087E5137B0021672772B79E0DBBFE63A75DEEFFB A1F2491F59C99ACB64DE458B3489812C94C78D5D158B75432E1D946BC01A74BBD1E09461 B9AF3B10571E60A712F8C702961423B2826AD98DC897778E7002AB9E2ED97A8CDC08099B 3B09D87E3241EB3BA2CAE59BF1A71EDE4C9E8889B041EECF9BF82A5260569B5AA5673A79 995E5F52B98B0090D42544080489DE6467BB87C2825938DCE44D7FCCF8A174AA26E27B07 C1AE03EE35208F110883F95AA0A6B26A6EE070E92D72CB4843A6BB45AFAF28445577CD1C 7DA02878A153CB5388C0CCDE9B3D3ACC86D901753EE0896A93E0148F1EEA7F4F2D9E6F47 FB98320600DA365E341D92BD40C6E84B1294261B7FA1E4D3B19CF57F354C047D137BB1A4 FFE61F684402D6EF2C1AF60E955E445564ADB9483CF626FA320B0AA8D3EB6F24A6C5D019 81BD89B7666C4387EA89093D7E11AE67B1AE2634F235A8ECBE6D7EC873E2D626D3175BEA 7108016D83AE7549337AFED3C4BC219360AD5AA1DD3EA5EA9C4029FCE39D9178D9A509D5 532AD0E490DCDA9FACD1B5A44A93F360CF1CE5EE95538CD6B2E3EC9B3337F6009E5C9C6E B1F26F974DAD52482503CA4BB03B9C6300494510C4E04DE3F9A0D049451D0E8D133F8F1C E02D58E2A0B75D770472FA5483D127E23A078EA73C3F7764D6A63F2AD230E2202F8BCB79 64025C163F903F0CC36D28C1E4D67E37DD90EE220B048DDC7C5FC2C829041438C2CB8AF6 DBDB58E24626C897A9A5E6D121666C218EB7D8B4C0A848F6E3E0FDD90758D545C3074072 1CD266724857E0D7D0C86923D1218BE4D2DBA663E45C3D7C7FB96287ED09E516711E36F3 EBA398577C01B89BE1AFFA068EA080380CDAE6D341E3D3530732CD285A655BB757FB76F0 D7B994A9B41B53545627C50484FAB1A8101D5C3EB1BB6D77D9926FBF261DC3618E9FF2B1 6355D30E293F452790A6A9012B663EBFADEF5B5BA1C1C9E459FADC114EDC122F54628587 1C46A10554A96464FDB36A95E1D79F11F41580B32FAAD772830FFDCB858F156D65654917 045AB1022C6AD9A0BA1520E0292174EC2A229806A673A1F47DEA6B186E28A2921EEEBBA2 2737FA64268B5D5B27AB4B1379598F8A1E4F0E5A0284F488EB9ADE4E61EF13B2346548D1 2ADE6A7D89C8A13D10F774A09B844E331036F23D1613A23A8BD1C22375F160A64D7E99C7 B9E9969112EF43B60A6F997858986A2A5FB47AE759D659118D831DF7FBDC166E2C879B02 89500D77CC68CE56067D6D65B6BFB82BA656171C0AF6EB6950F8964390DBBFE46283DDD0 31F26C32A33590EA007BF1A577EBD9A32553C7B998116F773C4F405F629F54C062C1E4B7 3750FF76EE20E0AA7ADD0DCAFAD1F0ADBBFEBC6C5C35E22907979439762A70A9050B6D5D 7C26F1665207721A551F99A15A8BD2A432460716B9AEE449C068423C7A0260B2151C5E24 57DB47C42FD9F2D8BA0D61E507CE597BA9FDB204F43E6EDEA72BAC4D0D72846263993192 0F1EE1A385B4EA56A4E9A550B281647D20B82969856E075D8E8F1ADCAD38CD36DCD35FD0 6A534B0FCD8B55EF72C06CDCF3C26A33890B8DB84AB9BEECD8CC2B118786C74604E9EC2A 228F4A055A89E5FD08622FF29ADE95875A1CC4FFE3591C4170B805AA15B3698E63FDBD1E 20DF65816802F348D71E1B6530AA7B01F0CD2EABD78DB20766FF6BBF61E318C0A12FD2BC EFB0CDECEC930B8E9511926190258C1F824B7F46A5A0617E5C72BAA5FB343EF0CDF9F893 39CAD5750442162E72CB8DB4D9AE88486E011A461FB399F0BB7AF815EA8DD7E3FC76F459 8926D7EF396AC0DE1A7FB6C4B7B06A3BF668A638B98100C87550621D79F8DAA707B0EC3A F081358A32E725FA6D2E4B859205002032A3C7AF2C5419697C4EF52B5C58365B9B49C838 3E41E51400137C02E5A5EDBCF568AE97577593FECD25BEC5614B704EE8CEC68B09858541 2B99B779E12A1A9DEF1735EF5E870505C6DE1E27B11297B07BE288CEC124F56BCC1D4F7E C1DA6FB9C5FF2D18EC7528A8D410285D32AC02E17B89B2A49AEA2D3793FD59052822138D EF1E5D28834C066B38A0F4BC02C53F2D4C47DB40D66108E33CA679AE53F3B0835C78DB94 4B3E45C372FD0F93F3C2D23DF86AD3EBBC7A1F4DBF031E4470BDCF0D1A2B7556B2ADC8E6 52871154C3C0305FDC204302CC9F4AF1334BF0F01115028A6AFC32A30F280797A2368949 1F3561DD1353CC89EA28075B171E9C730A23DA86B17D695BBECCF77A7CAE9388294306E7 14238420B91C302961879119D8199686F81666CBDDC2B94B52F8110F3A3EC951BBDED198 A70A80015BC9275C3B1A23B097B7E72263D57E67D1C1D1940CD5FDB926F770FB955DC94B E3407C9EE5C9F77C983C1A6A334B24521089747E9F22F9FADB235FD2F9F80DE201DAABA5 9CC16D5CE960845EBCF536257FC20C5BAB30E3BD7EF1CB116049BD395E60B27757A5B957 5E6A9944E2A29F6B18A4AE9A98979C79C96067613C868D8EEB743156E7AF931684E500A1 A1700E4FEE68071E3CC20FFA8B4AEDC2B049097032FBB571518078CFB0FC03E2B09A4701 C5138E1FA16C0B8883DCDAF3A076508999E510705488558654A278F5C4BC3D786598D0F8 7D538342B8F213BA6E39C5057A2AF5A0676B1858B7C91082EDB82EE3E328BF5E45151848 4AE23B49AF033D2E409C7F5DE9D818C779FCAFA14B4265CD258176A4EA16E780648A60F8 81F34D6099E34A50B9FB62DE045999B88693832C63E17368FA793C9F5F118E046D3E9E8A 2F2A3B0D32F28B7B383A5F3B42495440FA92D8199B446C25E640F9A6060BA660E7EA9AF7 D6864F5F991441524FC8DECD2FCCDC220166A2C1646BA775C8C83CAAE7D8DAED914D7990 DEB7B5AACFCB025C7F5C8DF2FB296AD599103D7D450A44F1C382EC0CB4B7D9E0D6432FC0 DFF29DD2BE2FA31E62C52A7D5C61C6853E081A1F886F2BC288C7CFC5B16F2CC60EA99B76 27DE9EF6AF6306A7CA0BD24DB84F0920967405F58B91FA7D4575EF9300C0837D0201AEEA C2BF1EB693B29775CDF0DEBD9E48915E4E97C7353B08A5FC6827E6DC0EFF2BA15A388018 CA7CC383A58666EA7338CAD7EA09FA6B518366DDE76D6D029FC1AE0238BAC75715601F51 3AC141C614EF316CE88F39179145DA7EEB73A8A3A085BC3E9A5F80C95E2B608A2E758043 DE57398220AE44DE2348CA1A71CE0862FC6CA1BD623026AEA3D9983A944BC08392AE3859 08AD70E5E6CA4585E74EA2F294FDACD6ACC69D729780FC32DD8D6A6FCCD15293B8D8E343 6D41207C6D53119B53C93E43CDB2069FA0ADADA5B1019784441A24DF28A1249AFF951B81 7B6AF97D30E28B27B01FF29442468E10EC2E7D1AEE9C648CF533179BD199354C759F5492 35F778E1DFDB4D73B92CCFDF83F5B6FB68C509F322FFA6506F7F7B19E91547349F5F0987 4C5D44E0F435745EACDD388CA1AE9165C6BD6232E78DA48C5B39BFDA6B93E48FB8A14ACD A22E4071EE1F9CD224F92B826A19C1B179108E852E97C78A25D563C27D96D11434EAEF6F 87978C634C1C84C94013CA01D2652F0AD2FD94A0142086DB192102655772444D7D7F1FEE 058FFCD8F742BDD7E54E06929825FA6BDC982A55A9EB308148909C497A44A688EB31876D BD0389BC5799AF68DCC826A173248625EEEF56EB0FDE2F48B4DB54865FFBF90B55803FFA 7CB251B9883C1085CA3B87CC84F0A327E6A98F9D1188893D83B5921BEF30289FA0D43EAF 7F7CACD1F152E1C05B47BE5D103B1E716F1A32A2F7050FDD5225DACF09F2FF690DCC7E55 D43021411274A171A3A0844AA9C69363BD8D6901A9FCEA82C2A0A3DCF0A18B5707AB50EB FD3554AC37BE9803479FBD181C9F2948C44BB5F4AE55645D722F93576DE4BEFE69A8C36F F253E7BC550C624C68A903EB38B74AEC7E13C963E47C108D97454E098DC4C4E70430B0CA 9786A8BC700EA8BDAB33ADDA6C9A1EE4DD433B2EFD23582E64C0740040C65563B25C0373 BBD17D515B2C9A65B71D37278E23D350D08AD4B1FF2450A25E4E16E74C70E940E96B8BB9 0094527A8AAC22E78D681669D42C8633185FDEE35874F014049A5C3CFDCEB5D7AD08E68D 00D952D608B796D37200C568BBD39C410CFAA2C962C4D13F35BA7ECD0B10DD4105916637 0E3336E84B4D33EDDFB05BE1855C6F090A2C872ABEA7E77DC35FC690E98A154F34104C2E 59972302B667517BE05FB03CCD771FD27AF9059895D31D6C474E1C4A3BBDE4A209FEFB6A 04DC7665A7650374DD5FBCE207A1D6E9B3F5DDA644B1C5C1D04CCA95FDB6048F5D209748 90FD3C3BCEAFD604E68F9FB955D2E006C016A71E6CCB9AA03FB21D7212A4D0A8BFDB1F30 222DC05D1E3655553F07DC9A07D9C280391E3B211F724EAC758AF2EDD3C1A19951255F76 2E1B2ED9AF2D34B75D3D56A65B1996EC4221488F70E5847F1B98707C76070CFBE03589E9 18ABC97720DACE5A31A3094CE4205F2653824CBF8C306A2AD1C73B84E9A8EE7A8C9DAE17 DC15501552764752287874089FAB8462BBB19C5269AF47392661B1124C77ABD283ABF9CC 08C2E22FCD9BFB8F8C1B7DB1C4A8749DFFD6FB3A0DDB0FC40383C7335D6E219F0D08C497 4995060FC705E50D02C6B0431DCBDD327A7BD758E963C69BACA84C503D293F49F87FAC07 423765C2A1542BD999B8AF554C96AC3D0F0BB6F909C40DC5963146494CF9BAB775284163 868A8DBF4B0D49A60C87B68AEEF8C810FC0E4F98661C662139F11C1C6258F5394AD83C72 995341214C64109BB6EC96A86EE7D63052EB231510F64CE3E32B143FF561B4A7C1F3C543 5ACCC457E3342C8D8D774DD2043BCF8DCA069949890DF399349148E7B93A2C307C68EFA0 EBC45546BA219AC61E23371EEB169E299F3B5271563A5FEB80051E75764FAF5A8B81E564 B12648CC5FB19DAC3B090656E6A0F72EF851050A66651E1AA4910977F2F448E1E0B62F9D 3502C84038824E3B3B6D145D828A7C54EB1382CE4F325D2EF6EEFB751D6DD36DF74E1496 88E115721DC459ADE38DE53EA47647266101BC83D53A185707ABD16606996C8A82DFC0E1 B1E82EC4D78755F5365E90E53D571EF8413F97105EF2BF8B5B7903F12261783A1A809DF3 F7C97126000926C646B0D034F229FD05FACA36B6C7A4566FF72FD4205F1C095261E85262 3BA7975653FC99C31E10D6FA2DA88EC190D5F5F4CAC045764882106792066A51259A6290 2B9B9F9B2A2763191FE7BBCBCFD078BE4A110DFC07E8E105462974FB387AF96E839AFEFC DBF713F1C70F1882D6C4655CF73029610D41A768E2814DCBCF2C3C7DD148FD53E2A6DCD2 6AC4FF3C6E7DD3FFF6142944A2BD04F231CDB05D468CF31A24D7689AA7B963262165A2DB 210A05C3AE78524359FF76286D8E7FBCC1A528B391E019B4A840170F23D9949A84714F48 E05BB0C5B88A0F401DFF088E6D036C5A6F2F1EB675BD6E4293F06F7AF1BE16853F444647 278FD9CFA4AA081C7DA05B10081F027E3ABB8D36967F25EBBBEB7998230A58DA1DA5FBAC 5DCF40F62ED766E51DB43061845236B482997DAE0D005CADE36CC2C055647B55B5F10823 5AEE00C92408BCBE80AB7CB4AD00A9A312FB201B64843FC394B1FFD873E9C0BD11EE401E 5522D978F268C1B108A27A364349A20A16CAEE59BFBB8125A950B5BB298F208501D84367 75BB561E10C0559C6355B8D06919B4CA010EBF9FD81240D6C9DF35AF065572B85CB1C16D 64D13EECC06F2AF126770286D277283355CA6BF201ADF9AAFA3713E87C6B5BD0381A6307 FC3EED39C1285C1B5BF2DA9C934F835BF7F1D62A03775252A4706FFCEA7866AC83850D3D FB94F70D464E4640FDA53077374B97DC274F889D0D5E6D40DE6969A64544ECD69D6E8B30 5D0AE358FF7D931EFA8D884EBB74D7003350AD953A5F295363A614BD7BE0D4C4E20C9C06 05D571491596140A25CE42AEA5FA1AE974944660882F49FD922066A127C8BFAEC80DDA97 89B56CE8BA712E362EFF1CFB76336CDBA2FC1DF7E8BE20365D7505EEBAFB700D1752FA49 C3B1A2277D6B2FACBD2C5B3D6F994851AF45E4FC5FC38F3166DEA3F54019B05B5A58B4B8 2AA6EFAB8EF5EAF197A9DBAC23DEFA29D156D1D9350013EAEB854C5E079EA2EC85A1B9D4 A5EEA2AC58A034D549862DC6C3AC7EEB1D3A888141BDB9FF6D0EFD4CB12190CF6180320B 73FD7FEBE890403580B66386933AEEE6CA6CC48832CAC489165D77B2C620748AF37D3E22 4C34FCB8327F676186ECA5208ED4823FB8555CE361D65DE5C14894BDD2CFB6ABC4A92F8D EFA69AAD5FBB5146C377FEE702394931309449CF4F840464BEEA073971641C0F372FAEF1 CE51C1DC0906C86AA906860AF984E96F0DA571CC5436C8671B7F8EAF84CC03627D955359 E1AC776242A335815B55E24F086E5BC3214C9C1B188360AF0E36344CBE9A799D4995D404 EEE3592BE4A1451592A7A95159CCC3FEE07AC763CD6B643289E81590F7831FEEF4D9A38E DDAF229893163179D5315B38BBA0194586014D6E9EEF2E49F2C9A10BAE569CFB1821E080 07072BA502D0C4CA7374999E0B0C538091E829ED71190CC4D41B35F4C05319C945CE24D2 6A7742DF423BD917D43AA7FE281B2EAA89085A039F54DE8AA9432B45730B91AFEA843039 F7D5F2B2B94FB9E6FEF55883EA40B68696FA6E964CD37B31C86CE3D4F35536B125B0E1F1 1FAEDC70AC8A085AC8D46994059DB709160D1D2AAC96851CCD193C2935716CB7875BB746 E4FD2F92C68DBFD5094F491C83B08F01B44B6D6A1B5C8F5956EC08C068047B9DC6867173 B7765011929538510C38C9B5B072C50FB1475AC98150DBD1D86303E9CF23EEC22F1BAB47 5A621314312F7ED15DA976C5D5358EFE6B136510DF6CF70D4D1C44DD962300A1E3AA15BF 909C15F9DD4190300EDA626C7A7611219097A1F2E6EC1575D0710BA8DFE2FBF11C00BA54 DBEB314F1F85E660F41A27C1688CB59D0753A5C97E5E733467BBC8E63E0127B685F27555 3EB339838ED3E6B42C5B0159FDCD9165B157B892ACDAF89C7A3807A0A3737F8D43CAD6C1 B62166990567677884BDC944C1792B790FA0EA51CD83BB5A90AA8846F2DE63808AE993EC D8D5422A13D6E86B5C64C7CF9CE5EE2356E2B812BE3A3316F2BA34F18E67BFBF2FCF7786 89BC1A3230009D74C66D086EF2F139762C885320F6C4A426D7C85C3253CAACE002E38A72 A1D639022EB61E93044603A1325F52E6238854C91A93BDF1DE1DA1C88FACD700AA455342 669826E55918F24730A2ED005B8FFF820075B98204138FACC538C998218C372E38C5BCE6 46236E04894C6300B7FC06A68203444E17AA2FDF4D2B26F32D9140C887B514C64E852B16 7D5ABB03A632FBD5B16B35A7C0EDDFEE69B7D858CF1FE5362628F9A776548BFD3875ACE4 506ADD15DA07BC84568CF81F59B9331D1E447DF23F76DED5548E6F69EBBDBDCC57D1332E DEB2363C31E2A52B3E5BB77F8899433B45E0137EBDDC19B54B82BC154AB3396C40BBF8AE 749368F4075DECA8C57DEF1EC7C1CFD6E2B2082DCF9C30C9522DB7BB2028171E19E169F4 C3D09A6BBBF4AB484F0F96D1AB863BE7679D6565661943F3410C48C6084220E153B4D9E2 7FDD24E174374359DCC2ED028B535720E1BB0469169F45C0F3A087F4AA86EDC1A2400EE7 7FF4F34857E5834251AFB10BE5A23B4CE44A767B71635AA5FA52E1F997C69718E08AB112 3E0D92D6FF634201C2E6DEC3B2920AA6A9668A4A4CED1F58063F03603934598452A34D73 6F2149E6514B2EEC578A8FC0CAB797481EA32BA7F08D27EDE0AA3B40D83EC45C56D9211F C4F0697FB019E7F764C7489497B9BACF2E44E8BB81EDBE270C3BC5AFFBD846F175279155 64A6D7B3EC3C3B62832ABC92111BFCD4F0EBCA0BB404C5207499E4E33589594C0B4C149E 281DD494F12BF43B84BC6113D424845CF1FE0308F3C9834C12E27C19AA1D76D3EE5423C0 27EAF76CE626BEA828CC9A24471EC160108EA4E972BB934BA7BC32E2FEA6C2D1054408FC D36C168D41A57E0CA6392FCC6287F199F0BA5A854ED5C411C05333E39FD4B532A01F3C5C 92E5CDB5E596423135CFBA29800D1615546F09BE2A3F6E24D890FD497DEE6A9F692C26B6 1CD59F880E8B74424A736DD9136527027464E7033840C8CC88A7472E4A3BEECFD26CA9F7 C13206AD4ADBF5A5DF3CFC806BCEB1FDCB111D689142AE6FD32AB4097D06BC6FD0B03EAC 90114C182B2470D7473AAA4BCEED13E6BD2304E7B84C2FBE077876E2D649ED4959AE4059 E4F83BED396B56A96EEE6B34BC312BF47DA3EE22C181392833B76272C7B6FEAFE17F1365 19715DFCA46F6C88CDA64E9CC9D5A0783F032231DA9046F29A6E8E080E858222A798E2E2 3091FFA09575599EED5814662DB5152CB1A6CB4FE1DB9541B927A0881EBCE984EACD870C D600B8A4ABEEF0971B650EA7B082D2D7ADFC5DA7F23F1CC6620935B3B29F292BEBA87E50 D4EBEDA228B3C36F67AD415AB0FF23A09BC795384463D476CAA9D91416561DA8900C57E6 61F3F24C3FD948A43763A9CFE7FAF873FE47B1A239F67E7340CAFC2ACC6F6B493A6025FD 305F058C627E3A88F04330D4AB37C0D697E6E900F69F14C52259437B219252CE51BF78F7 4BF0D0551D8FB7D32A596A4AC4DE067DD82F96EECD037023E4CFD3D3B4BE3AFDED046AFE E8F1055E4E8BE5CA98BA6BC0B437C4D0A8FC2906286586665009ED8CD58A4F1791869F99 9A80862ED9378D6115E3D4EBF9D5BB28DC7B4AA18CC774C31792671589F74FCB7F6BFB9C AECEC499352AFCE0BD681E2B79A7C9D0DCCC49386843AC49FF5353E5E03E038A98BDAFC9 B273AC6E3F7441FE37962709F1F3C1CBBCE0520A9CA0761DC7D457ACCB1EDCAF1E72FEBB C0CF61B3CA10AC53E905CFD7CE05A89808E9152C8DB858F9ED1BC4F8529E7B8F3B39E770 CCEAB17E40893D52FEE32D24F30F752ABAC9BD8482B988B3E27BAB791BA41906089E446E 82A0745CB48C02E314D1AE779A25F5AC76731D9EB633CCDAE2F9FEF8A47EF03FFA24AEC3 DEFC0B85E6515267E6C3C6DB7FF3EDC9F6F7CAEAEC89157010B830CEED646CCA9A9DC92A 4A69A49A89CFBDE464A4D298D4742233B22067312093D4162CDD7DC25A78723AE252F705 0D0504D16414DF880408C38E634878BEEC926398489DF80186D65695E6BF333E111055F4 8958077E23392E343EEA43BEF5E87EA86D65C8237F2E97AD1FF180C04781000A2E64B760 E948CBBDD32CE3FDF443AC4F9BF4AC2B49660C7ADD4B0D7EF1329B15B787C592E81B6695 B145FD102555B42FCEAD35DF364ADB86F0B6EBAED1D64C35B8BBCC8A33AFAF67D077746F 19D303ECCF4BA86C818FA2138CE14E49001F50ACF6844ACB1036656D02F39C938CB48029 0FF976294AF09355B51AB274FD21F1245C2EB19B1C94C6AF545EEF99FF7DC97129A7BB74 8F78700218A7A0AD68B0CF94D32138AF45CFDD85C0951C75AACF42906ABEBF2962B82F4A 12A3B40B5AD852F5D49AB0690DB00DC8918F10AE3238F8B49C137C87B795BFC76BE344F8 50F577815121D28EB875C71BE698DEEBD9B8E566A266C823A444909A79D94E1A1513D0A6 7E998EDA0E2C824CEC8E9B2F2C372521BBC5042DEA4B0C510B701D0F6D8C46E3C8C3F001 B16C6EB2596F574A5BE0DB140FF6F21405A89C17F4929FAFC9F9B34070001735D57175E3 0D2611507665938C3E9BE7C56DECA98456A2A2B6C857E48FBA6A61A993F0966C5981CC0C A8DB5FECAFA1B7434C1A2FE2B6462FAA5EA7C22648E94153CA26ABF6CAC7E977E3C47C11 136D3FAD44D8757733F214AD0EF6FE5907F3842855DD5601DDB9627EE7AEDA1117176E9E B523E97413C17D170818601EA7FC4713CB91E4157AB46F73FA835E069D1FACC3535D6F27 67207171A70588F0C2981C25E3493329D41B92BFF0A29C52BE65F1A3F6F1802F3BC057F8 CA404028E9398B8974BFDCF60BBB8AF01254FC304A1AA303D7AFCF890EF7088D55F9A574 C69086E4D26CDBD7E8522482178EB63528AD5B7AD249E0EC00C87E19CFB35605ADEF53FE 288B7F041CBD0169911C4986222A33F83E09C04CB2982FD2EC4E4E32B02A3C7490E11FCF 8D8240886E3E414F8B6C2CFF396CEA79BDF821D2E5CCC76D402B8B28D0F55C1C7A1EC0EF 26A44D5B0513874DF15371651E23137F2494CA348F63B02FA7A37BA86C766E9BC61E481C 153320D99499E2AF4BB4E2CAC0C655C362317FC104A9C4A57DEF32801710DFBEF9930943 0A5EBCFA9ED547DEB574EA38ABA543CD93802DBFB5357A1939BA8BD1D88274C9180FC708 14458315B4FCA7DA48F42AE37E0739AD47384C9FDEB3D647D051B92155CFE6E9086F000F 585DF1C142F50AD19ED5F48C7FF60E5AFD40850CFFA4C93CF8FF85C35A08BD4DD4BBC1A5 2F48D367777F7179FF88C74A249C4032A66A7241D69CED67689819D9AB13B52FD3438064 275353123ACFA29336264C02B193F1E2805141E8A54B431AB3BDC2083980FDD55EB1B649 1167F9E21750C790258FB73CBF9D11EC7460A65E52F6AB761397BCC3267D411D424212EA 5A3B6CE2DFE0166AA38AD611622761CEDC156BC08D3DF76A8FAB75DC7C15806E740C97B0 6D67BE17649CDA7CAAF52410CCB387A8E236CD7867FA58006F7BBB62C310BAB41DB629B5 BB541AB8978DAFF231343506ED03A60E7194E2A904355AFBB8A28C715538354B2300A195 D8AB91926BFD1802CAAFE73512AE101174C0535F8AA544C638B16205E26850235633F720 4D5611DF322D9165C2397CBB93180438D1F11B52945F22D41D29C27243157A14CABCE8BC 1780C14971543780240E036329773897C13DAF087B355D7FE28064188952EE224F8664E6 924C67DFFFF7A1771BBD53A62977FA4ABD7FF5419167B41C99ACBFB50854A99DDEEB074C 0B189F5E0B58A8D9FE362F28814D7DD2CF4096BB737E761E290D9EE65605A802B99C9300 1F3D042D0AB9EE2A4D0D89FF72DF92702CBD05FEA4D96BB3FD6ADBCC2DBD339F1EE67ED1 F1D38179B5533414A6241B1958003AFE4944F834A561BAAC584E0BA45491D430FA9A852B 3E6C9609010411671FFEDB399DA50F35FED308F87FC4AAB6C8E7268A0E96C9B5A2633DCA 087FE8BE1E756037F612AA80A02B2281DE9511EE60D2820F6395F04DFE2DF13E71BC88FF AF3739C12F8784927173F83AB667AACD05DD2E19B287BC68BD4E23B0DC5E2E55DA99BA96 2B215D8080D7D9A892CA79339DFB0190597D4286BB82E3F9806D07990F17DD322FD824A6 8AF1C5F71BE5518BD53D29539FB7F370C348C56B5736042E872C9852CB765B70CB504422 12BC7F635C8D07C7B14007FAD39C5E8086C5C9DAA8CDA321BBDD9A17BB03DDD75033EEA1 54C55816570839616414D092C6EDB2C81391761F1224F2196BA0EBD9DA36DB1E13250BA3 B8B4CF8BF7FDF7C14589E6D4C8B2A44D06B009367515A6B359EDD9BBF8F73CD1FE9A7EA3 38762FF2BECF44BBBADCF369CB16667A989D69D6DF89E4940FC2738492A289CEF4A5C85F CFD52E5B220667738A52940DD11854DD7F030C3ECB6F9E372ED6B34D0D43F0CE232DB931 33485626BF185ACE918C7A2C6D6E6A904E1988429549AD9F6172E9765AA2EE3737EE22D0 FCAEEBB6A1EDA9A38C9246D84F3B5A3C16982114206FEB1EB54B1D001C557C32849A3E95 3B836E836A1E45B4987A83332BC7B075146EEC075BB6B18DC1FEF3C06CCCA9EF79851D07 5504D790E06560C130A755306BA83D7F917D89F3093DEA31F77C60F739B017CD211D04D9 671ED013302551EA10CC7C8796DEABED70DBC3DAEF302DEC8DB0E6F4E0A2337DF464281B AB9923CEEF41E4310AB615ECBEB7B095E8A25CDBA975514678C9EDF38A826ED0563F1285 6A1A960769BF4BB54A7B7F21EDC35FCC69C373164335CC362EEF2F9EFDDD4DD1BACC0973 45FAD4B582DC70ACBC2940DD218D2EDC196777F0A636E1526770A54342EA075538F8FE1D F35519D84EDCEA6134E947CC22FA8F6655D93EA5BB30A3EB75D8A4D441D26F730281F751 59BBAE62DB7DE48C27E9DCA62F2E7EA8093F17612CEF8377FA47E1D2FDC42317A3D3B24C 2EA38A5E013B8519E7F3555EBDF6409294AB8FABE3F836FDADC92713399B5EDD40C4DFEB 024DCCB076F0838AABB8FE6D180D82D424ECF7368CAE5D0377B14C14429EB618BF5BA1D4 C694B5BBCA7F08CFD74350FED20FB3A9B488B48A574ED0D5FCF354837BD5EEE74A88897A 8D140C6ECE059505E45B2BF6B4C0899369C4826CF4F989AAB31DECF8924CE3C3F0E7F841 9CC1A7E9DDB5B79D4A562392871843EF65B494D9B7882688D41214C565A2B52B953254FA 9BFEA383E445452648BADDF59DCB946CF2756C38A252DFAE8E349962044ED4C802B3A5CF 719A5DB5D7B90EF10356E54CA673A0FBF86CEDC0B2CD6A3C9B2EA1FB96A3394171BBE5ED 345A2D7705A6F5D2E5AD6461EC3A9E660F929F1194F00BA8252FC95DCAD2404CF344BD43 D767B14FCAB8336B30248707D6252417A97C710BE3487EDEBE8C6E002028EA17ECF12306 F511643FB9BEDECE02DFE6FE4A5CA6F552F3513D13E2BB6404F88EBD7A12494D39FDB4DA 263A6B53085E06274B88AA0FCA91E6666F90ECF446E96A01428BC4C1692BB608AFB31298 AF5B2E43DF21E25809408AE99A155A3EFA1E3D58AA1F12C2E264CD967AA932C315221C1C 36898EB2B5E22351BF4894B1B5AE72B18C2711198854187C002D166874FF6ACC887F2831 41663142D9849C56A036139D6424BFCE85A0997A9522ADA6B96967411476C49CCB908106 589143D37A07A5A0338FBCE0D4EA308C3D7E60710DEF408661212C9E0A1962A4BF15112D A3A059D5CADB0961CE8AE11D02E63822818555EA0922E6E6594C40AA9B0461AA3A6BEC7A CCBD125F5EE4D243C6E2A7F57781F4A4E56CC8243092A042D50FD5A7633F006E46D8C053 941908174573CF107D76206213C7308E7D85DE44A7E3ADF2E680698250E14017F2EFA208 9F5034DE6A0242F21145750F980E48792AB3387C5C75B0FF349EFDE48F13AC737866BB2B 6ECD37DD8548427556D432DBC599DC86DE2F8838A53A66586A05A414FB166E6EB348787F 42B8634B19C451E7EF8B83B2CCD6BBF7F2152AA5D97C4363FE0AA4C610BE79AC7A8D5EE5 D1E466B086CF4978A7962FCC579720FFD3D144C134442F61FE4E374990CCFF275CB81EA7 ACBAFC25E946F1243592D14AF8E821C44B4AE7850147756AE0915E6D22312F1E092F8C49 4FD30CC49C2C5780BB2584EBAD193F675EC32C828F717D619C47EC4E0DB3357930DFA1D7 412DB3141866FD3627B65CC88BDC646C61BF330846D8FCAF04279BEACE0A276D3A26263A 5180FC123F9805BC0B3ABFDEB04079189D0D31894BAF7EAE7046513B557CAD32DFD8AF72 AD8158D14895C4928554743A3024D8FE4FFF7465D6A132AE3FCE88A08B0D93565DD0B558 95A6B3E5C974E75FAD3D23A2A56E21C96FD7F142653DD24BB295D9DB3020903A407B0DB6 3455A9411D1E22FB7A3CAC8B87C1773A053EEB9E5C0C05F7DDFBBC787424C324E4B89BDC BFDBB73647E8F3EAFFD8BA47BDC346D10171AEF0921481CE55695970437B8B91B4FDD35F BBA48393BE51235E429D7F900A7FE23A1C5B7281A47647A606235C299325DEAF62F516E2 C986AFAEF074A9F4FC6F5A6EEB307917F4E38CC2AF22865D490C9F2836AC513D8B75E194 2E35FA0B6402AFDBCEF09B0A9E96660796A73946292D10CFBAB2F96DD17046C948466C31 7AB664AD33D6DD06F791DB514CB8EB2993690B61E8C5940601B85D239D5B4A8121456222 D55282C62BC2C27070DD49F5D0C8D8EDD7839D73EC10E2768E2182BD5B43FD8B8A82A4AC 13D5A8802E5C82AF61797E86CAFFB69A7207BABA860B7925A991D4E38B495A148D200CCB 601FA5FE4B4CD7D2AFB9A77C61C896E61307940494FC82C635C87217E53ADA2D286D2A84 6F557C24A2FA3D6316F82BAECC6DC95EB92E1B9DAA21A8A4177F9FB60315FB7D078E88BF 820B8070BC3955FA386FD73B2BF4B80FEC914825ABDBDA49232612880A017D6BFE3AA9F9 F6FCCA41D086D99E7D9D599E3F1BF13A0E24601C2DCF3E07C7821F9FF618A51E5E8E1935 AAB71F6D024267C975906ADFA0D64C9EDD735072C5231B599ABCC771ECDB04B2600B8CF2 84FAF24DA40CB41D1E6A5B00ABD8CED680D01A589F5CB7350F819429B692FD28A2E18475 38888462796B08B1B97D9C96ABA021CC258B8E1B38296EAF78F0E08B9A0FD9751B980CC2 E59595F0862790E2515A771959B1189A338869E0CAA32C5E6C4CFC65E852030E40DCDDAB 7A230627660A4135B7CA2FABEDCB24A9C979FCE4670E8A520E7748C02FD5DFCA9291F049 FF939954336DE399B133C16D7590235662B179740CC104FD688F66A09FC95B7E0FB735E0 94C6FD935ED11D72EB65DCD7449369FFB6C77A93AE924D478946FDACDE3B0D89C11C7AA0 D863C363DACAB283BCBD4DB6B2AAF513E51D43D41F161AC6651D1884FE5D1F22561DB234 E72614B3CCA094777A721F794222930D4B536AF7D5CA80FD962E40CED8968B56E3B6DA18 FB429FBAC700F58F0F80B6415C7481030D2DF1985798D0D3B86ACACFADCE967B3AAA63AD BB15BD4391816CA86C1226A28A31F5C2BA67DF358BD3D37A3CF650CA317E56BCF930919A A2318EA67EEF6F895B8EE60D83B2FB4F83813A4DE8BF792C23D4002466F4B5566FA4CEAD A5D9D5299D3790C306126D4DB557327A04E9004B02E765151EC56C3BE05BB44FFE78FCAA 4307739578653C6897033D276344AE9DF71AF29E4AD17C20C0EEC3E4D7BCB824398B2FAB C7735ABD6209A2BF7E1CF76EDB60C9C7B7BE19A571B0174A753EA11AC00AD6D34BF5E707 F56EFCEC0B3DFA2225095BCD4DF29F566C7A9C05AFF2879B0B1FA63EB05DD73D4B29A90B 008DD1E0F96E674D9A1B8AB81266D7A7B718B66B9CCC730351CFE7200760695883C794D6 8AE6F2C6C9AF6E1583202ED27720EC433E83F7B15275C47BFEC9D55E7F4D3B278DE03A90 DB1D79FA195B724057E75BD0D1C78EB7CCEAD387067457C7FEB7C1498672C279D27E2F34 836C0B7FC6695C9455B9F693219E318E4C8E6CCF4BD0522198509548218B3F6D3853351A 149A3E1FCBB50597B4B0C9D0556EAE4DF06BD76658E65B53D23F7911DF45FF0F0F9AB290 4A764429E90CD3B93E2610B97400F83ABF96CC970A5DDBC377F7DACC1BAC064FDB0E1119 5AA3F44EA77894AC1952481399D94B2FF6FE8CBA207804468F3E7A314833D448196019DA FAD1B34E1BAE55499B22F90EE0A72503ADC0FF5215081ACEF4B5694131A084BAF3C602A1 41B99091AE6599F61636BCCAF9749335A8781F89B469F498A144D02F56045600AB8CFCB7 A5014BBD9ED8AB9E9961620CBAE3DF369AC31915AFDF69935386981ECFD1A06DA9DFC450 D905057659B2761558D7F5D671C1A19325BBA0A6AC9A6DAD2921F7B48DB8D542CA6F6337 1D53A331FE56A16DD88167D39E169DC58B75AD9917F3CEE5B8F3BF77C53D59AD8AB2C3C6 4E8C37224F4BD80EE7246C06DA7D0527450B4371718281C2A140670DCC9B54177B3E62EE 6C761A5BFA8E14B04785AD71982DD6E96DC928445A33228A65CF194C2BFD2A4094D6E0D8 F27A32DF37EA9E2D10A5D7D3DB8C587310F0216B7BA36DD8000BAA1F4CA501030046E22E 125E552CCB2AE32556430C213D1C3ECAC3DE385480015B6E6AE4C2B7B790A42072FDE3DE 1E4A8B9C0E732750DA65B1AC951B2D4B0CA97B55D4561CB2862BC355FE47BBD80DB3E5E6 15B0394A1AB14828711D22E8822A53B7F5F23BA1045938B6C6713465E17F2BD232BF1478 7C0DFD1DF5F341AD8438E1419A8D6803CFF5A567E44E19FD32286CECDB4157466412FCAA 728ABF36B7A4BB2EADDBCC6C731290C0653CE2AAB232DC4F3908C092FA855950F2E95A02 45C117EC29AA77045B5B259A0BA1DFFABC320A3A9AA05977F09FBBD7C07E1E125CF82D3C 91F1153121B9E18A9E8E2914B99D19FD9B459E33F781C3A076207F4F4227298736ADB27E 6F95AD1CA5776598FA6172A1117EEF827822495D659598E65D4731793687D7B0B76D413C EBEDFE9D12DF412A7CBB424DCF5EA5DEE46F72C99F27C64A086CEEE0F81E0D51E4DA89E6 CF9E0CF7C2C8FF5163FD3FF977C008C759EAA247DD43EA02E390144BBDFB1D05C43109F4 DF5E040A31474DC8F6A45758B3B43EBA713A1314A1F3979B3DBAFC514978521B4CD0A6C9 98E7F8962495D5B032D7BAD3A9D1FACE4752856A88C68FE86D18CD06B0E9F88BA59FA4CE 79961D318FCE22A084DFBA46CE22A99BDD725F8E35742F9984602E27B647E4249B2FC959 471670EA64C38BD1A6334DE401E38E75D9D110727F33E4136C6E0C5BD68BAFA7A95F61BE 74DC0FE8D14C585CDD0C0C0B7BC2B3A6462BC5B142730F6E8E35871E08C073F1AD8B36EC E687B71219B862E1EA850B0B670C0E6E60A79E760E5B67E38550407905597A13A276AE5A E3787338AD2C9B5FBAE9EF0C1B378CF836572825517011EF1E1825C479ADB0A6CF37B2F2 2120054E566119903ADF02B7D843B02A3739C29FA79CF394D29CF061FA2DDA1AC11F95F2 77A647148D9EE4D57E7260E1AD1625C66A0F433F0CBF6EC1ECB7A418A178349517F364E9 3AA16AE911993EE84013CE376E0292CCA8DF16D139F3FDCF2D53F7E505EA86CDE6F41C74 2B21D01387CB9FB678B43883FDA1F5CA33EC9A32D0B2D247A7850FCFB11A7D8E078617C6 F582CCA8F0FF7CD9FDD8FAF61BAFEC25C4FC9508B7668A7CD47F3EA499EE9D08278EDCF5 558545203D61F0587EDA6A2F5590197231C65717740E605ED0EBAB53C0A2A9C696D354F3 4EDE962DBA26026D3107C46DF380CA05C04A9B37E49A97EE1AC9768E51FE1386E8C3C1C3 7741440D7A6E31FA13CE2507FEE4EE0E278101B7BD4C38128456F9CCC854520C87826642 2D303EE35DE6C6DD07B8706749FFAEE58CBB90B81445D3455FA7BFF02F1AF045EB4395C8 F0B2E240AAB2216FEA136FB13F92DC2E10C4864BD9C085EE25AFD01538ACCBFED4D278A8 89C43415F8DF563D561EF4841BBB45280B975FCAA11E9A34F7960C8B93F3B1A7BABE92C7 58C247D1E3692AE6DBFC71E873B482FFBE5F84D137BA9A898AF6CF9DC5C5B9C413EC9133 50BB9560DAE181C8E89727813401C3940CDA9A6DD2CA0D52D8A8FD6BB44B251CC025C426 069232F5467B1430CDC4FC9F5FC3582F033D2728678DC51ADD1A576B36DD40155AD785AF A19CFDC899C0E21EC0C1FFC2D7A988A314F9B3A676267C76C50CE2AA3BE6BB9585463874 C8D813208CA38E7577B7366BA4E959908C0D6CE4FC9825B3EA37CDC95245943F644A9F51 62B110C7707966437FE95DDC9DEEC87A19E2DAE07FCED1B8878CF04926EF7762799B7210 3C5460EF29747231784DF880AF2230AB3738D6601667559E3FD977E334A320DB33303702 8143AEA49E5D6E1435821DB0F50B019FAA72A6BC995B85B5E4D6596F139AAC8EBB0745A6 550152A446F08A55EA7F55CBEA90338DABEBE54109B9278DFC6112AF4A0C3F14AE6A09EE 600F9FF19CF31D34BB026EFE15C4FB841CD9FA64BB4D3ED7C240802D2298F8EBFC3205B1 1A364FC75E31D524D889D0988B2363CFF4395C891966C3683C8889F1F3A3F8664BFC3B39 EFC318F4182C5F7C32A396CF52F27A1305357B5F2D1AA583E7DF26134BAABDBA10B56050 63B34CC6906696351A9D1E402362E1E73D636671EBB92F6923CB5A6AAE7913579D4259DC 1FD64DCF2FE40F1A9559E351959B4B982FC8FAD4FE9FADB8C0EC4DA5A27C00515DFCDD23 741AAA79C102F8154E1EC1B163D1AF81F6D8BB538D57D926CC7E593F0D7980CB3E94DA69 32061CAC256B5E0BA3A5AB9A08B45AF6E04EAFD38CF00E51459E2F324DDE0BB0B3C0C1B5 A64FF7E675988B929A2FA3CF0F0B572F4B37B3B72A6C2E77ECE905030BBE93C62CF73D87 C6E1C17CE579A9DFBA2B11D6D172C9BDCC0125ED6A0BB33DAE3E60F000E8D969DD55FAE0 FEB90E75E7ED0A04FEE5E58F41178FD3CFD55AF1C8466A69D34E3BDB37D95CD19842AAFD A42E9ECC6FDFA8DD71532E8B1C0C7362BAB770C5EEAA81CF2B69A5BB5204B689D64BC77D 20612EBD2EDFCD125E8558E678D649EDF35DCD7D8BD05D17D34E3F92122CA3B827752B46 38FEEFA0C1AAF32BA0A2BB4AFB5E970D2FA4665A8DE96BF17797C1549CD2CF053FE195C8 774FC48799D45185A1958589EF9E9C38AA54D1FA86742EC2845DBB36DB226D5D3FF74F74 FACA19D43002EFD1D27AA30C931BD9F93EF008D2AE80394C1C8646B0E122B36C22568783 2D3269162FA1E45B78AA8D8BB062451E0ABC5A92B46BAF91C72FE8F505F96018DD3CA971 FE039F3CA121EEFE9A396E9E52B96C411CBA0E6F5939588C0AF69ECE10DCB51A3A6DCC0A F19B69C86B0A71BCE4F9C84081E605F274080086A244C48A32E2D51F69C4D16B1E608334 09A5B4B581E3506B452AFFADD305839717674AF60338726141D25D810762108A402F07FC 3BE4F9E38C46FE67657C8794D76C84AC16E6E5CB073C5F6B28CFBF10431572B234CC469C D5E486E9686F0539D222DC38AF9D61672F38F73EFFD4C8504A49F0208A6B792865A209AE 03DF4419EC17730AC811C4A1EA63F4D3768E6D1E2419D4D7B55C60898388F60F4B0D775A 29DC43EE986502AF31B65751996D19D818C8D664816DAC77F5009C1A50D00D40E8E27E84 B4D5947C2946B52A02659C90B61294973621D2F082F6D30F993BD51C09078C1A5EE6516C 19FAEACDBA3532DD4C15EB6A9AB59249B41F5EB0AB06460F8AB5482A5549EB12168DC19B 79CB081DE1D153D35C736EBA02477F72509617DEF1817E805AECB118CC74776F2AAC8519 0EF77B4706880A154B1E24AF3AB54D4CFC85F8ED24B163FF0FB363770EB9FAA187DBF924 485C630F24DFAB92C4AB1B62D0C5C6F5D60D160C263F7240769C2C44E66816756822F266 C139A2F4AD9225FB78B10AE39D509DD2FE991CA82801FC8D65153EDE51F8EBACF77E1346 3C6999CC61599E6DE84680ABC81FE62D1E207FA58060643FB0577071938A21A3B6555A9C EB85EA5466B5E221D75633813CFC217D684535E9B5843070F955F6B03440FCFF8904FCC1 21482F42B34A994C9CABF685A6D781BEDA965F79F9D21F2C252178AABD24924D1BB234AB 98C90CC5A026BB08D77897D64D8B9B112437466D9A4AC07C8BA84C16719D737125094E09 8DAD46BBF0C9ADCAE7222AB0429339EA69066BBFE61BC56B099386686551F1DFEB71B18A A93AB1D17E5A91DA1720C0DCEC8DF4FFD019F5C237D34FCA07CEAE456FA8945E98141A9D E9D2F773E9D74D25E5586C1953ED8D00B1505F74CC63168DE549A2434FC23445C5D4DF6B 2FDDBCC8D3ABE2627E03E4E36DE6764431B57E659248A18D33C836BD477FF311C419AA1B AF1E363A04789633B6A9E8292FF350CE53BCE215F5D3B3089B96CE9937D7F80C944384FE C5EB919CE2920ADE62A7A47FD5A18BD7A52F8A9AEFA76E5E62D64FDA37E960678923B1D7 35D50335F2F17C217E4095C55457370CA7F87F3AAD75C2624E957298D6EEBB06DB13E8F7 7827D1543E68A58ACD6A5FFFFC5A882EA9C425F603AF80392D5E4C321F24302D44155E31 EF228192E03B4D19C34AE832E5972C57A0AD90A4B8300F0F5DC44560B29F7CC8F6887546 41DCB10514A278B097BBE11898576D6F8616AAEC53241A9045B0F4D6E7F7467B0C711BE1 94FF7C9FC07419C06E124581F490BAF4CEE6BFF61BEB2A721C9CC2EA40D40457349E6635 BA016735F2830EE0B3E1520D0E491961372A3B203DC4E4377EA3A173B89655A0B2204013 F33104B003F88D59859DEAC6D5D04A5CE974C7FA5C0B5F351DFB8275B8C6E0E74206EFFF 7083ED6310109A7C05CE4846D67CE0242B3215408F465611EC45142DC3473D4C51F564C4 5A722DE5206762742E0DC19D26FA87107EA9D6F8CD951EE5955BBEE06182D1716B311E9F 91C93EAF1E7BEA0580B2009CE3AB48432943EB88D7651A3BD9177CF023E2AC376769F99E CACA373F332841D47B584ADC7A26121DF96C93A9CDCE6DD4F78BA20530445C92EBA51CDA AE6DCED224A112961F12F12D721C9333EB7C1AAE14D590AAAC053C9852E6E337D1484D26 76F06EAF96F9F1F8C55B9A46E6F1F68A4E052A274E02DFE0040E429B2BEAAFA7120C1EBB 15B074271C6D91ABC91899B9DF380D75D1C5540BC14BA26B255BE648459AB770F4253390 F54EFA4A670E97AC91BC3FD147A3CCA7B1E7DEB4BC11BB2A0EE2721931AD20CF24386FDE A9EBDB34A82158C3CDBAD22333DDAE6A079E1B1050310FDBC7BD6D14D26FA6270773D94E E2AF1AE613F40F1F635C9AA433E659658EADBFA579F9F524E5EC46D3D96642DADD787F27 8F612F1C138EF9ED4A7290AB8256607F8B3AC1EEE8FA304F7D62F0C5B2FD9DC022DCCE60 F177EF22D3D573904817934145626ECDAB714FCA3280AF37783A2101FDEF1708663E3A9C 89BB03D9F68E78009BC37AF86B4E3CBFF08D8CFEAA80990D7E7A7740303FE30EF9A46B78 65A95EA8610121FC5BA0238F5566D64C19E66D98BAB7BE5735BC7F9843BF821CEEAE52D1 7E3EB06834652E1406387266B02A5092D9A9F73214830FF94AE9DD4AD5E8708416C3C5B6 DF82FFA4521379A6C34BD3D1431E22ED4E291EE8246150F9F60D38499404822FDFE31036 1AD51DE9C920578C3B91D35863854750C109E88FB977F1F1E85462E412CA2A398D7FAA80 724138F852215010BF6E924B8A2240D57BBC72086326A436C4090BB002E46C050FF2E126 3CDCBFFAD8B475C18B32D8AC3C49ACC62CDBB6B9DE630E18C123F6C20066DAF1D50D16A3 850ABDCD78C5721F47ACD0159068B50C98FAE375276E269BF950E1A642F5ACC29FC32518 071DAFB554C549D7A7477EB8596266A8D0886D312AD5DB66BDED73F029E057ABC97F3216 AEEAA7E3F5CBE9E88E670E28D6C872DEDA9E7BBC949D96159762E36B3588C4959589220F 0794934415D5976BD638736648982D75AEC0D0C39A3E868105AF2F0AB190464EABFE47E6 C19F4AD7EC592A3F6706E15D4449EBC3C1EEEA0AF2702C309D35DE2ACE26D45C12EB1983 54EE2626E3CCCD34B8BF1D0E755AB479ACE982039EB0B508DDB3B05E47181D302DE6688C 5B1A45EF5E7FB176C9EF2E60B34A885305835751A49C1C42E4E277411964FA9D48C28C59 16C323E821A30253310658C9F3A03D6742FFD5B3ABDB2F041F3C669089C198CC982335A6 7B5C08BD3C133CF4A98D8150D0B51176ECF1ED9DEEB32EA630C06F917DAEC9418E1101B7 E164DF05D84E6F7B5FD9AA396A35C8709E0425FAE3898983A1CA77A5E3A3DFE417D21586 D8F13B0A449166DCD58742ABD3073BBC6315C860AD2DFF54F0DADE4B05348EE68742AB20 37974230A5F36AC5B52655917753FD323BB7CD1C64F81FBEA46C39BD4F44B2C7E4356363 D342B1A2B3D71F271B3CD965961ED60A7AE057C2DBF6F668D257975060C0ECBB62CE961B 3F25522E218C41732DC6B9A85BA71621646175FF798083F6E55494E2FAA3974DE4F58A4F 4330F9EACB78A743456926ADBE2B38EF27EB50BAFE8C851C90307FB261CC01158DEB122A D05D5A0018440F03D11A3BBC52BF45B373AE27BEEC4D712232B05ED8648872B404DCD7AB 2CD3210CACE0B5C7EAAA068F001F54A64CD0E46BCE16F757B6451303829B0BB3336108D4 D6C1EA7B89E6CBC0C7F2FEF9ED24222A9B25A54407724D6B76699754053775F8B12421AD C13A34F0022CAB2C6264773FA245B16AD591B5EC7AB6C03D0BD09430E7F74EA0CB779042 29C4D4CA8975B7912A711078793E96F2423C989350A8E0FA02A6BD0B3397CB5AD7B97A8A E1910804CA3AB1F36315F79962883849C0C3157780936719FFA45D9D8650D3E1AE81BF17 F449B32FB6CBF921E2484E19C9C54A841DD23B6A6B1D2BBFE0693F37414B0A6FFD2FF3AA BF8EF1A5FF7CABD79F9C4F850601EFECA8FDC4CB8122C307DDD979BFE62E2B661358D3FC 435372AEEB8747997F605E0CA624C30511A76D44774CDEFFA8685DC37BB7153635B7607B E25173965DAE2913421FF92D3B53ADDD293CE912945FE3E5432E868F65D99955107732DF DE6309156A0E9BFF8D36449740E21D39A9E556C83AD9E170543D368B561746F5FF8A3371 8E56EB8DD063479CEDF62D34D5E5A9A6464D519653715E21EE082D287824C585FBA57E45 EC0093B321E14C084F02377A40515425D3C259FA607C3009924C0C99CD5F1B5526A4F0CD C44C940B5AD05C27B521D980E9F39A90E8A2D5ACBE5730CB41DC9223318C5527B6B7439C 2FD72C21D6F88BDD2DB4FFBD771C6AD285D997DCE0AABC990C88F5C25095F044D78CDD5A 2B3403F9437FDF5A86D47EF206058E26B5AF74D9290054C03FA1F3D1B1B8D4E76B2BFF27 936BB2C385B7C39EFA72D2D07DC3CA60E9934539E3C633BC464D688EFB053BB301C77A0F 4ADE3A3EAB47D4BF2F909A8200EA21AAEC8A020DD5317FBF78723CA2C0C97458323C11FA 151FF82F183A953442CAD106F0ACFE8CB2B71511424C828D7F42750B449C790EDE5956F0 4ED7ED97710CB80FD60C50255C5F603E10214705BFE52A0BEFE34FF64DEC816899C3ECCE B0148CACEB839A4F2F8A7908AA185CF9DEABBEC1C2D1E7928F35348D8D8B1A510D23A413 CC04F06A494F5CF63B230BA11157FBD63B020C8E82AFDB2F87911FDA1FE164264DB40D97 7AE459B58D621EAD39F7B457758953ABDAB7DFD9C6CE996C94EFA0CC9AB1EF320C25F059 E091784B4FB224EC63BCF42F4C1C9BC09688E2CB64C57CBF82AC71D8581B503C731FB3DA 7D46D4F7869E78BA54BE9B652C232A7818CB3228C1C7FEECBF8B7C477783A878882EB02A FED1D43C4C0D6CAED29B10F2B64E4DDDE17CE9D1438528F9DC068363E5CAAD32826C618A 125B14F0A5EF5C69D437619E841D52D15D009A8CF485043A632F1D5AEBAF47E68647ED83 EF2A75419C9F6B17F0C2750C522D3DEE1936047A9428D6D48FD70BFF7AC51A56F64A0C9F A3358B5E224E94C9F3E979237753B2B4AFACC236AFCB23539DDD4950FE9A7EC04B60FD6A 30170D06EE2091DE1DF17740581692ED2BFFAD4461C87CE245C2541B48577EEE61A19048 8CA6848B5AA6EF5EDDE132736B2E1E37FAC52AE58B21013392901F8BB310261B65928381 FDB728EEC3CE2658A3DCE927C105F5E3912F0E7B7E79C1C7B3D64BD448C6481BCA3B3B9D 67A080E99827DB14CEA6061903D770555A2EFFC2BFCF9E079E65DF19A78F4CBA4C6187DE 9CCE2BE237A8A7A087532628F933E5AB97FBB8DCD08F0D87949C4B6340EEA1218C6D46C4 8497252ACA5F5DE9AFBE62925CD3BCF91029DAF89FF2DA7F2CA829D01FCE323D7304859D EB8173C268B2C718F692305BFDBE7B08B28AFC33789C580E6D6034C78F19DF08A86BBAB4 BC414ECEEE2FB58B4BE4843969CFB36093A2DBA917B47FF7D2B483B1B5D072F17C5054CF 9EFBF69E7C78D38EBA324B74E92488B1918AB9A5138A78445F587D71478A389D0FCD3E81 34D9EAAFFB32778621005D56E49350853F94E633B2D2A925876A3F12A985750E07B3DCE8 5C14C889BBC3226324192A3821BBB8FC88D2FDE8CE8060B83F7AD29D8A7E917C481F0212 04E669A8CC5E3F02AFE0F34B217E059F9C0269713F0C8580B760BF408F76F5269AA73D11 B4EEF17322058027C6E7B42828947E09076E1FBDC0108E8AF0F2992CFA5A56F914006A5E B64797E3A6A3942240DB5BBEA07784157AF327CB0502CCA5E709315AD90C872DA5279DF4 CA98160A25C43287237F423FADFF28236E68BA64A4743CEAF7179AED63D986A238D0A104 511FC3BF649453C6DBACE180453ED48518E19F1D245BAE9ADC21C3184E52F52C8D1AD932 1F10F8CE5F6B5923D49D54322E815400879C4548D96F8C48E1786EE5256E04FAFBE13E59 E4725F964056D4467F46CE6529BB854BD8D8BBF2AB1CB0709E268D9210FAC0A47230319E 2C675EB5A76E2C438BAA77D1114CC45FB292D71B268C8E2BBFE5F10085CBAE6B47FBA712 87F38915974D7CF0565F8D8984382D0AB008FE129DAC737CEC289D4FB017F0973D71A9E3 83DD0850EACEF5F5893225EF9811966D03A0E79B8A5EED62456060537B15F70CF379F760 46971D2AC28C19E85FBAFA968C410A11938764EBF2473276369AF93B3B0D191BB1D3222A 6841FC7F7BF4E2AC1C0DB7B5CB39365B37EA1C308CDD4AC2EDBE025683DD4232CB2E0F2F FFBFA77D837429E9FD92BFF4BB532EBF32082F3EB25C24C70E003A7B48427FC692A6FB46 C6DAB1530E2151F3D000F33BBEC8591935FA318C83D4BB8101AF6F21ED9CEA79CF78ABE4 15A5083F9A74614F92E34587BAE3C9CCE05BC3C47918142C7C1D269EE0D1445C8A568AC2 DDA77DC908C745BB7020493A85618769FF2E1A3FAAA909A1F400DF01028C47A7B3C5D0F2 B2A2371EB9185F13938F8932E30DB861B2784F0EF8AE5DA46386ECC6AEE265F31E98789F 7DA3A29EAB653AB62A05884E0AC42E6D437EDBC4B7F2344DC28520CB80AE7274C6A1D4D8 1BD2DCBC02C91BB721D36FCCD3A6B51AB7383E80ECCC7E72933292522AD8CF62AA14CA21 458B30DF58A10D1678A35CE2D8F68A706BA3787D5EC754C8A5ED6D09A8EB8B5E606A70E0 8467FC9B332448CAE8FE6D2E2E4F4C0FB0C471F6F60AA6BC0994D63CA148A3CFA5241D74 C27C54C65E4323777C1E42640FBD359B5AD4B836081130B7FE78F67FDB4487B7BB90D18C C42A365DCEBCE0E2726747F39DE439C65D21368E0BAF0610255D8FD5B9E098406C6A6667 8F1AB967DB5FA4A13EA44910A805CBDBA0BE2E09722571788236C1BBCEDBEFB7B2E35CEF 0F76AA6B560EA77AB901A30A7709EDFA98297101D876AE28B5A049AB7BB0FC4055309469 ABC4CC7F1E7C484746B721691BE7A40E328642CAA809D804E8B224F4FFBE3D289F0F0750 4D01217BC737AEA17AFDCAF5B7FF9CFA887E3F1E8FD0690810E5B0549DC51DAC3394A568 3D205C1FE2A174CDB4F5253942F06C442390E7F78D1011DAA5244E924639782A3DADC42C 888B127F9A511038D8BB44803A0A6B5A7FAD96270F0389DA82059287AF78F7A44ADA86A5 C0AD9B2B18B4A258FCE49504F14731ABF09374A4583B7D85CBA3F176004FBD524DD13E28 8281C0DF02D18A8CB42FED 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if htmldoc-1.8.27/fonts/Courier.pfa0100664000212600000240000026115607477306250015200 0ustar mikeuser%!PS-AdobeFont-1.0: Courier 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Courier) readonly def /FamilyName (Courier) readonly def /Weight (Regular) readonly def /ItalicAngle 0.0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Courier def /PaintType 0 def /WMode 0 def /FontBBox {-12 -237 650 811} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020945 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6a2261c63c769d2f4b60fa2c438ad7d199d8e45f7e7c9a605c8ca14e21 fcd81c9a515fb8db6f99604534d06ea9d87fe0faa852899c9d0595c7a97e 6c55f79fac45cd38e87b10d210ce7501e88c8fcd3444354365fb893a12f5 96ae2c1e70d5819ee0d087d10bf8da96f3dabd5405d28c4228c6c31ba405 2464859640933feefd8071c0c84cdd829a9b1d0ba01f25a4d50ee2ea2b45 160ca6333b2d2800306ed2befdfe155e9d9f9342eb8d5b0adbf2460ccc98 643fb1287ccd28aba7b5cab92ec39ee2e918990372b16f8487eba30eae88 708b6cf33b6c015d8096c7cfe2f139f52052e3925c0d50fd64ce68236d59 cb83ef56bfc584150ec38065059f3308ad6f9a99f83ef4e6cb13855c8175 e31417d190d036b387d3952344a950f4d8c7781b307a094df1ecaee4d2c2 fd747bc6f7f9c6bd0e90c19294f96c8c5cfe88fb34c477574a1b1630b8cc 591529e59b20794da32e61decda8abbd1ae956cf74012aa01d42ee01e861 b0aa6897c864788ae59def43c493246fdb1aca554c12594bc7b33657a9ec c9e3d1472ef826073f632be540c35ff6fb40566773f3bb2204d3a579a08c cbc844c14b18c350f003b9da23a570c362d6003893ca32f86f59b829c78e e3188b6e3f7fa81d7f622825c639638dfb78b7af1f500f5b450fa54dbfa5 cba277c794ece93275a3de0b452fdc8ddc2993baa42f28a636008cdcb03e bf71bdcaf35019778993443f88412ad2ad0d7155a3944606463266322dbc 0244b07da1e9c27a27b59664e8566d7a54cc03e995aad008b0a17e2c3ef6 1f720ce7f7788599c4e44c709cd5c31b11107f16ad70b17b9afe2e8cd922 a7428dac171427ffaf51067307fab0adb530e701fd22da22c4cd3064067b d4f6089c4b2c87937dd426e4e9d2f60e608288bac9056554d04947e69200 61e379cf5e81bfd32fd37efac1f61cebee551b0851516471a7472c60df89 daa9eb1dc5a67e4797453e69b9e22baf4e3cca4192d603295b018c4ab69d 18de52dfdf15e96b557f290a4b8c5b1e7a6caca81f2351b97adfc36995ab a43803a6e5ac04a3c93495f6d38106b8b144449c07d1358210f9176e1565 72363cfbde576bfdf99fa329dd1346e83f79e06cf68250ca57a68931bc7f 342ad295d0cba17aa95bb8eeb53ea6e8e660b814e9f857cecb14f44a4328 8b69a9e7908d55bf19e844359879d28caef1c38a36420185d20dfb32c2e0 02202800e8ef3d67c5d50e919657ca958b538d537d503444865331d79bfc 40312068d72364503bd0cc84b5f30a74d8b5b6a26af2db764564fb65a6ba 8f9051ae2b4ea458d46a4569f30c6e77dc097356770362e6cf3f16610747 78ebb44ff7d1e3b64ff75e77e11fe525bb121c6546cfd13300ca1f02d571 b82a5825e6226d14fdcf27f06d87452a8b6c5dca658535cee2a795e58137 d48e566b69d53a0c3b766e84c51eaa221c46999cc8065adb2f129d5b630f ab1814c0c33b5aea0efbb6e994d80941b53079af96d90a0b924f9b0e319b ed9836b8f9053f868363d3ca554cbb181863301f8cb940872ed5fa7bd18c e39218b5ad8ac57d0f752d941076b1c64d99be0db86d7a6d96510d772eb2 4c587f11779bd21cfe5bde1f29c1ef9022b2b8bcd7f91153c84590672247 7829c40111d810480f3cf62de8dba7fd86cd236e656618caf6fc46827fbc 4898ea7672f8c9971afe43e0e01ec8b77d4af48cbf1210e98c1db15c16d1 49bff58ab0270cf015b107a3a50f5dc8f37ffb92eec8cb6778ddb7ce4aab c464c4aff654223006a550eb52485a23d2b4aa7198d3cd54418102f1e9a4 fbde37b841e56f5c2c53966db9b66b000e4588282e3fb80c2c519339f000 2d2f83c979edc5827a3b3c8ef8810a0f9dacb6b9998e9af6551f56313dc4 011904cb979aa2d32b11a811bc248141e4b9734d9fb7982a5671002d8279 cab93abe057474628defc95d43890db1ed34cfa8a20bdc3d874e7679a396 158e522ed0ab969a4e3ec7e4474e192590504d54deb7b260b7935c4e5654 8a7d121ac1f741f8cdf259ea1b5813175a77a1d2d30ba26f65eb765a04c0 9ed51f69f41551adf399e6aa2fc09788137bea4913f17b8eb838c38fb272 1fdcb55fd65697ff0b850e7d3d1ce266bf90f7ec06a9a0876bdfe767d3a9 18b092fc78c775f945cf1f96e859c03dbf630d9a940939654c3549d8f792 1cb94ee23d5a0535de9df31ea0f937f860b4f220a99addfc343d7cf7bfa0 b803c12c26403f0dcffc8ea786d0d8a8d9c367419ca8ae41190ce93a8086 583a1e6c9d70b612c84d87d2eeaa71ec2dc12f4cde6a821303d5f6a9bbdb 7eedcd289e80fa3b75f47f481b50719dcf4a142069393593b9af9cceeaec 56a35b8787193d7c88113e9e1e221d151e093b019ef89f6118bec4735103 cc8003cc5ad1b6727b3226cd44c497da7052dd681695dbec3397f9598c91 77701c73bf0594ce93f23d50ec5bee2fb9da1fc966df148b27b28ee3c895 26dd6625e2887f9fa0767c127c609ee315626bc14d274fbea56528dc06a2 7b2d476d46e9e7916590b156a5df04a6cb15e36245d77021767b6e5bdfcc 679670263fd891446c3371b11bb6e1df60f960aab4149d7753e6a5c33810 c42c8bff4e935003388506f8278bd7cb672f132e065ae684dca0b9064d01 dd620e7ffdfe04f14277efe8e60159ba0fca3fe2f28b902d4ac275d19f0a c6971ebe827c4a232d87650d2688345bca78f879077114f0463c5f058107 b669566f8171e4e284d278405580f04bffc9902784216e0c9a17aa9b2935 e66e18a783f723be044389b7e9d62aa36818ff2ea406c3c1a9d2f3436f3e e7db8be86afa8daa6a4b1b84611350d8d27605509612b515e16aa843164d 5d0805e36a2b9ef74c5f6a0b9d59a04b5569712327f4b1b30e9587cd1033 37639967cbdc655aa46e80d2cfd24beb50815b5338e522b3a7afe8362ab4 f05d8bc52bba9c5089ada8c89529b0275af422eb540d31a938b874086075 6325b966b36817115213faaf92de63f6bae1e0064bfbc5588098b61eb83c 71f1c2082436d37daf1acbe186fedc4be7c1233b6f18bec5f99002d21cb7 864e4811f7ab3c03003e1e4490ad1ac793bd28fcd5ef0e6cc30ef39a08c5 2f71939b0cef620dc69e31e39d6db969049031b0c92ef2db653d97f37014 1456a52985076b268652fa2648c792780bad637c4d7581fb2d62011d57e2 93719487cf2d1f013cfaa532e1c2d39178d51272a6af041440bca174b5cc 902bd7390c7d3695056cb4bd7791f9fb6d88e7a70def2c97869f5dbc5bd8 23c517c7b7c39d624df627dc9653ea5347bfda80b723f05f6dbb4c9ea501 d862ace05b9dbdf21b7056fbcd8c6d4b85873dcee6166c8b5adc0316ca12 d9639f361b15a42f00e1d62edbca1111972fa0f45758becb31db38316f3c dfe1b41748c93ed58b67e9b57abbed5924a6d53e99fbc9a994a6489a8bdf 13eb685548b4dc6d62da7426c22227d4d43b6ffc7b5ea91c896730253e89 41afee588359c2becf6ffc415b9eb6d31ccb0f6c7f85853e6449fa6d627a 97a3ce8303f148393adcccdfa2fe085c6908be5c3c05af00a6f02840206c 3253a559ac5c049bddfd11ad9b118403b84da10ae3c470cb9a9a2d1d7b73 2f59f5fe146deda60ae750f551aac934621b4470e1bc324c436303e25f81 d0dc3188be0d6fec5414c20e4cb18952e12cb6423df7124627acde145500 d77a97a8bfd9cb50d1faa008e2ce2b2505a4749f1ebbb092c34702371405 5a9b63353af9e7fee05bb54c9843698101f79888a91531773830c2c967b5 88d3acd2192883d5ce3962d51084fc653eae2c5fb2da41dacefb5c76812d 2edb5b109677289cd1998d457fb1023a19ac67295bbc1a9a20a426b06a36 8df3c5dd083cb1180d287f5500f2c635ede157eefceec5503447382d15c7 48c1e35f68753992e5c90f900de54d18f8e1b355d1076adfb1f3590135fa d1a36f028e44f48abb149b80ca9a54614d467f8d71cb310bbc7ac7100261 092db8c5bfd39e0ac6bc2c9d6cbc3a8c05ff8a74cb21608ec4a4cfe4cbaa 2d056dba14206106044decf59f957ef8a9cade4c9b19d8d30dd4fde6a954 8e50db51aca73330142153fc36b69c1c8d5b26d0c689b7040e81ac2c864f d7c097c99be5953843e172c97ab5684f35fb03a725a89dbf371f08ddf40a 1531fc1b676db0e1543aec6e97d3d2e4aa3d5831d8b3c952abbfa1123528 14fb6fab61a0d680e6640f6aec8426200cf61286f7422cb2f78c61ebaa36 d47ec16d7faf8b4af31d090cdfa255d9d7c61d46cfb22a7d6e1758e71ed5 67e00cbd8e8f468ddfb477f091a2f915627f22ff47b876544bc1f03b6bbb 98385f009c20bb1aa2a7a78674692b8eac2e3c8069b79e679338da57f729 76810f845beb6b9add32b95d78e5e60f16dd16689c05fd82d36a3115be8e d494a74dd211d58a2cdf983fcb9cdc29bf7f0e29988fa23560edf514bc1d 183f3b2a22c09fb179b47e05adef48df02f31c29875d1915037b19407764 a4292fe44e741651a8e3beb5f0d972b6327090f664417c84f84ffbf0afff 8b1d85c822d90730ab4140c42a51aa8b1dbe43984ea8566040eb8b341cce 23fd3f69dd235a080ba5c69aecb9bc732bc2d7d40617dda6b79fb6ee40c3 556c7df9b23dad89e94054b1345db8402ae679fc4655a4a776c0150463f8 db2bfc0608ea1f124e221ddae6026b5e5d007a7e4a0d6b3b0cf3a2669e67 c5e4f01551966a7bc48f2f4b6a87e740d8095e63f77c7a027f26b52f2299 de5b8a2f6209bcf3d31cb0235f998f781e5cc81e31dc424e008d46ec0920 2951e5684804a0592ea47d6c788a20487bea2ec8f2e6c1d7f378b62db43c a43c4b366f8b4319631cfe9854f0e10321cfa3b01c873584863bbefc23c7 2c05e695b56e8a52e89aa2dab543834d34dcac5fed08dc51825c5257ae59 850d101d84f4caa1d29fc932f9e0effbf7a9a7f3685f61f0490cd3cc8988 2db52a757a6af4c4e67b407bd2316b1c0ffe7dc54e43c87b874f57e49033 34e2140b011484863cdcaca331175f2cf3d72e0042855983aaf8853d3015 e870ff0807014c31d55060df3fe1fce1573244812744ab51322444632f9a fda6706e320ffe82b8cbe242a19df00ce73ee48e25ff49d5871bd3e60652 298fe3e8d400609e232e0ddc794c0579acef89e841b2edca50d51151f65e 8c1cc3b01ef1870558f0bf5743718c3e068617e81bfe120c6ca16e0924bf c2541177d53671caa3ab641c41557dcdae1a346147b5e999c4541b08b4af cbc187afd653d5b5f8386df6ad8fe69e21bd0567df494f736c6a184fa4de 48dc9f347787ca96e2e00a296c2da05c2ad9bc423e9ca428d7f1fa12dc93 53a302fb8c529af8688cbb543b45b2717ebf8f6c497935f4f3bffd285e04 02ab7544b3ca4643ae5a8b5250ed987a95fc1f275b9707acd0641bd0ee2a e9758494f8d8a51dce408a38ac20eaf0852d72d84d0c6be973326793aeb9 55eac6fe0a2813a355dcd22f6f2ce56588d1c055cddfa98878bceb6a018d b22922d2b600a20f81842e665df41013ca0947c4237c2bd60a75e2fd1a3f b8c8fa19485730b87461ad466acb02df8ca240914fb090b3d2b41eb6b8ff 05e1a59d9fd668af70ba5bb72778953ba55fc5f9f626043450e1d09bc83d 8605098abef884639a37809a32565cbefb3ff39ee53d6c18c58c272bb928 e4410e361e59a50f242d69747a032617c52debbf62364ab5a96efaf642d9 d82ba679b1d70fac10a4eb62fa5cfc308e86368aaad7e75948f43598cd1c 544a0d4091374d7e88d4522cbe902391641327e888e7748fa889dce67ade 61699e7d77763681caee9b1ca8837b2f7ef9c18cbcc538c465c8e2dd3461 6953ccb6030a222c728b834911c1a179e2c770289407ab28b303e724d97f 747d6134b425216a64c6e0b60f633e2b85300047e4c90339ce030a0fae31 e830c8aba5ab3386a3b69267351a7bfdd66356ae5e57fb2994452993e90d e7c4e260abab93c37831856a650d56e44172feca01d6c7c380f250b82473 960d2a2a5fb6b4da668f46e624acf7fa0fd4490f485d640a3adfc9f8652e 7a38ce5799f770c3606db4b8b947f93967f779e3a3c0572f13a5a187d31d 7bd12a5c7be23cb6ed6192086241b76c5ba6983db9c93e4b208d707d3760 f03cd6272ef3a4ce89b8e52e6ac5871a3d03eb975759ab4be239e5ec7842 cbb333e692cc607c722e185d3c39164dd320c6945629c70ff66a5237c0a9 520a1fad6eb9816069351ab0f135d90cc0982b147d2294ae4a38a527ee40 be9cde2512aaebb590e134388bb171d0956a7c4566d65a9a041be6c4f883 6b3ec3d2ed1b48b566a783292b15b6127920d247d494f070bb20beff6064 0b11b276ddeee49706e8b2b21bb40b7f00aafc594c492c25dca774e0b80d 82e927448de2e74a9d0dc7ac9260096eaf187b6cd6aeaa6d1dc4205b4411 122751a5b22688404ea7c5861730371ffac10f5afd4727a0e402ab5ea757 606b75eb86a05e8f774d6e430a1a3fe2a37ebb06700474239fb1cfa05ee4 4b91b82244c575b52e7faf934b04eeb0d933feb57ebe326d75821c8b23ea a85b583aed4320b7f04b9f2dc591091216fde52e064baaa9c2c9d9714b95 a4558c21f3cebe624b5403b31508f178581af6863083ed762f1e2e34a45c fdd71660d626ff8648f5d6c5e580d4765a67fb6159ec8077a9f0a88038c8 d3d7c77ff0926e2123be874f7bcaf129d55a5b5960f824bd1728abcfcc51 d23936de9a25c408d786e44c3a2bafa4423177ad060d21d38e15e23eb6ff c0b4120e814695d423eefc2744a1fc81b4df89d76f0a6803d8b14e75538c aad03a72517b86514f6952f6fd619d9e910d980f00964db325318c045bdf 79647f453d4a5cf4e61dd5359782827229310405fbcf6107c3ad9ddef9a9 a339d5d5a6eb2e7838a0a43221bd62cbdf732db0a638a52016fb35ba7761 aec846a023d3bf2d1bb183543e81eb7cac1e5970cdc6f068c5ea118c7aae 528d1396e6dc939112da4460c890ead5c01bdc438f5bb734218ba6270add 0dc1778fd8ab16831d6a302b814a1a44b07edc65956c9e6cf4875df521f3 ce5b422f71081b6d69bd270f739095c9e81c0377934a8bc6390c420c4e4c dd9cf7e32544c68d884e15aca3bcc07fc8c132d8fb9d752c15d75c52c288 57e2ea461a6fcad90c56843513f74461f18d7164bc597a28ae4ba7c86ee1 703535a9b9ed5012262771fc12f102e800e0e1af7bb46681bd2b14b614ce a91b7b2aaa35235de76c0e113c92688f8ec81277d58c3406778e1ec1cc15 f1cd9a137c8ffdaab99ace3bfc782916f1a877170589a92dc921e6740a22 b84dc6bacdabcc76e64c79e3a588d80f8f4d376e1b426f15751cf7391102 102f0afafd8b22dfdeb548aeb5f30b1673023d22054a13391a0ec08de6e7 b685a0d031aabf20b7c62187c0284892d5eaadf121ba28263eb863d5e36e a9c06a77ccfc0e17f593961591f84d82af823efe41044c8d606fef83ccc7 b0e961e7994df8a3cc36b209d953e250adab8d22d7f2b4e2c9ca39efa2d9 3e56195c1560e30a5190cc5b17faefcf250df79f6b624a4b917e11c33222 2fccfec4f6a47bd9e75da9854fc3f7ae554e91edde144d7aef38a0e3edb5 e5a5626374db94f022c8cf549093041de00d7269b7ce544e748439ba2870 718c08e58fb4a77d93ebc04b7957d272ae1601d41bf85a2badaa0df73b0d 3841d4839c85677fb2e15f1d6ce592669ff4bbc9c69dba334dc37706f2f6 be83d5863e8cd6a30c08640aac4c233684e66b4fe6b62d4a8be9d531e47b ef5640d9b5c27d990092be1597f6995c8a77be9c18aae6c1cf130775ddac 41d34438fc7ad8e042cb56cbf2944932eba7d053e9376ff398367450e35a 1945fe23e05c921096a15454721ffd0f429a3e06dc3ed36f1c170be79c66 996ef8337aff85b90c5d3a4a94455ae9fa32e2117a63e59001f052d5f622 3125bfafa40901e98960adf7bb886729dca82fc3b8cc52b37ff2517299e1 d769057f8154fb95582f02cb0becc873a9c71796adbd3e91324faa94f2c4 1cf57c30b5897d031c02d256c909e080e70bfd1f32e69ef67031138c2ddc d1a8e4b65e485c23c3e450abdd9815512d6f34a84b9db715db2c7a93bfb4 24316e1aa44397749cb01088428f149a3b4324737ed9957fd388248462ac 1b2610d72bf5c073eca567e7385cc959e37cac7e05470160ffa5a9f63b8e 9b082937e911586ea165374938f492edf28ce6020953a5b5ccec7737f9d9 cc8538c4339567aaed3794aba3b9f4eae65466e8e326f6c399b36355935f bdcb9972f10b13494dc25097fcec5a6398f275c8c151558e74c5175f7baf 4155e36b733f75cf9d5c5979b0764f14d8306e06ba24bf791141e404c69f 3f8fccd91b9c58c2c671aae7d4f9e5d6414e46ed633a5f78aa5bf04e6522 46a066ead9e582b181cc196ea2d3cfaa383b5d0e4cac9336e119c08cc6ac 55cbfbae147c623b400453bbf447e96de036fc025624384359eed7c7d5f7 858dc0521377cf647a157fc3f188de5eef094dba125510fde34c570d7be7 6ab5df0a28bf45ddaadbea7eeedb936332dfe93081e0afd3fdd46bed08d6 914b2efcfdc41662a33b90b03d76d34f48d30fc6bbbb600e90e6ac7243fd f026762a44b4d6e4ecbef48c9d7b696af29eee063e557d8fcf0f09e0136f 45d17e608da36e59f2aecf8493f8d62536119b5f7e1554dfe3f6e8d7c9a2 c6f557d18b4af92c9f6e050975c3b5c54f9b5f4e39d600b6fa2cd6de203a 174028cbb2a201af126d1013c229bb82cfd013ed199d01e51ee2780fe896 e01c63c655087a3e61a7f1029fa5e97ea1872f1b45f22282ddc317e17926 7368cb52da9444f6055a3c653659cad2a1d8712bc2b1b32c1dc6906d957f b88524ee066156ed6bdeb8d832f9338f9912e29a250a8c4674e667c1c278 b677aec9972be83cba3fb779893fcb8f81a323ac91474ba2a2334a07bb56 28e905c518e634f6761a3289056f83d5dd7b3890987eee1c18fb2d379cc1 905f1aeb3b3d2ad578f0d6c845d2d40c4bcee3f71c90e68e5417bb8cddd8 78d83ba80ad8485f4067e5c3cabf28ab56cbb219c0aab8ffc6c7e192bec8 cbca1459ae4450afcc81b9548f40ce2622e5a7c281f74dcc02dad57efd92 d072318ddf05bf42f1ea8163071e23949b0179cf7de64677ca99b23cb926 b3e294194ec13397ea1dc9a5e1cdcd828156cd71f81b64167d4fb01e6002 713bd8ac6f82b20cd3699c6ca4704dc5c65a2d66eb155b7af1c9bb464694 16fb49c1c7e17a30a5f045271d7df3fff2f42c6b470701c381e3456a500c 6bb3d0e47b4d91c5f34b49bb6272f1f8698b307d89eda3a1565dad1c0864 627560cf922dcf5b34c67860352390b282f95394aa2cde0e97ce3ed39546 a6af1c52bfcf81a29be82c47c99e8050e4889e4575b75f39e662f2db7420 673797e2ed3d67cda7ae2c15d0a0a794d57d168ebe13214e89e0209ab2c0 eb7784e9491aefa3c02d0df3ae5365a0fc4ae023cab528162c7a1b173664 9dfaddaca8da5fa18b7d6489e4229e9e24d38a620464a744a5c60f6f9d33 4b908706b738aed186698a8b278341fa4d65a0a88680ba484694921512f7 de93337fc1c02bbe6e64af2dad07603279d873291d1f4d39c1dd6d89c90f 65240f4808f6f1115ca55b88e242565e59f3bbf1f10ec7b88872e9ae61d4 4cae185463edfaf7df63de4d2207d307afb61501892965170d2945846fcf 5973a1d458607f50c15e06e5bec715e0c156259aaa6c735593e5564f65f4 43b78cc7512ec35a56f126df9d30974a40872e4265e1ae5fd483cfcbbba2 6dee426cdc4721f19c3fda86ed7ad4fa1120f63669befe7002b128ceafd8 c63e8ac09943b6cbdfb3d2476a026c00a8ff81b1f651b97f310c82aba5f3 88cc1db5afcff5996d5252a6a42fa4d972e41ee56088f78cb966f9051171 c472c774879aecfff08bfd9cea40d7c298922ace64f28c14e0b81f4dcade 81d71de3983d87d905192ef13cee71b2d3ff1a88aec671ec318917df98a3 c9054e372d22a3cec82fcc217f47319a40900312f6e32b536b9e7a7fa083 7ec65ccdb5fb0d41437117596cb39d9382262de6e65379d3a9709b2cfbab f5fc5d5b352425f06f88cd31012a2a4147b112f0c1c0accc808cd625e022 8eef66661f70af96d3dcfecd402700e4f6522ac9a856da466d55c84f65be 2810a1565163872d62eb81333a698ed7b68352cacca2d7ad38ab55c19e4f 5582f75818302f5fdadf1dced09d94872f2d48fb636c8e38c7563c72c771 a08c6b1f041f3532bdb39006c89a33c09be1e3e603622d891f98010bf1de 5355f557a1e09448d486adef565705277b31b8bf2b86761e32631e3435b6 88b79d566f1747ba456ddb43cd239fb47ff7b425eaa4c657c8eec26ee01a ed07cf916e77d53634c137aeea009c6b515b6342c54be2c7b95955b1a9da 277a0abcda2346e88018c726f481f71d6011aa42f8852f2e5749518fe3b3 ab668213fe1a05c10a1c53953d75312631d6bbba01d418199dfeff8cf548 6109b099fe8e2f606165fe30f532c03567785d5362aa873c9d3eeceb20f1 945d55f49b0ccac8496759fcc7292e46938943c262d78f3212d3f9d0f7b1 03157f423d71b1ed54b2a603f4c269029918f238ec6828ffcec66009db9c 9e59534eabb183f31d7ad4c57b1bdf0bd2ce5a421882bc10cc1bce6a970e 2b586bb221567cca483989dd0b8dec424c1d1ff042dcb7834423cf244eda 28d2d969b17440caeaf024a6119db010ce366821afa424d1b8299609c041 48275ae6e5257a7acb3c766c747ce99cba2d703cf19b7cf301b634d8b613 ddc4afe4633a4d77bff8e00cfb5e289ebbcac90a24307e7941ec1685cbae 400cadd876fcef7f6557eee167d2035a05120293527700dc510b038a496b e1d5cbaef24ed39f74211a93aadf22214ed606a80582485afe358e3a46d0 671148998a3b3be209467009b43400870359d4189a8ceb4d5866ab52d16d 9ceb1eab71c07e6caa34b70e3096bf7604c22c40d5fbfeea616da3babd59 dcdb97d883fc8742b8267a16a99b7953225f7144568d566e64542c92e538 ac140c851e5d295528eb7cbb49909b1caf6409c9bcceb325468fa0b5f7cb 2987382616b477ccfe4f4ac79e4a6f7165363543f04de5b6f6e1c2e910cd c3cdd6c4c92737198f892337dcb6647bd226c820ac99c65d8e7772bbb74f e65dcaa8a22c33bc168bf48e40a82700a3a7668c5a9a71e397acdfee7d55 6c5c19467b7aa69c260b727407ac837bdb7d67dec055c1f45d8bac61048c 45bc9fb3cefe7549eaa2992d2edc126ff7a05eae58613332a2bc1465b2bc 0429162b907d65f793d236eddd8d35405866d71b25f62dc4a7e06d4dee82 840accaabc0774f8a63e9c0f7fc980b3583e7a8b01c46590e3bc04eba565 c2ea94f057d964a78a90ea9f52abfd70f84e44e434bd10a42e98c7940657 24341f907e35d3cb257161e01c7084e3a0166d15ced65da7ba87dbb2ea33 d39bd99afb93d3548358d08330e807f8552cecf63c84f805205491ba3a1a 622e70c232fadf3bf2dcfd6f0539158d3306506f150b0518371912a25eb9 6163d73e9eeed42edc84d688bc7f7708d9dca348fab4df62e5809bd09484 2d0a31dbb7c4b41f94d946810c5ec10b69aabc2c91a59500b2e5d37f4755 ddfb7ae4abf757f4c5bcf77c7f95e6a616646456fe8f18407080bcabbfa5 7704287ad26222df91ab2613951e2d679472f8adf06ea2a20205ec199722 99a78bac52114334470c5f5890c2f846b4c6042d73945127f2e3910eca1c 4cd7a16efe4b4be38a15aaa710682c3836a8ca83fd384970139d8b46fb0a ebb002dd224199672ffa02250fbcfa4e649e335428fc71f50f45e498419e db0e970f46894a48f65580881c9c4250fcef65c9b28699408e18b26fe6db 7f1cbdb767564e73cb5954c6d639ce33220c894f36e70f71c9f9aa3fe2ae 0aa0e3f2e304ec5abc661675cde2e70519e4220ae26fbacbd01d5169eb84 4750753e6ced53e3678fdcd08ab93e10067e9c64f38b40b76d99b6cd92bd f4155a1ea5cc824998b59aad06e09e5f15ebb2288d66ea71b296616734fe f2796f07ff0d8b047074a1111d68b99c2b70fc56e74a51b062f4998acc85 b1943c9477e436e5cd7ab18dbc898d21bb93475a623bdda71d7b895ba2d4 c10f4b90bf335126f4fd57d73afa50170f6b3c364922e551d40e35da75fa 891762fa23401d39260f2e92c7807c746f13bb35cef9dbf2e76e66a72fef f095da482a4de8a420917065736cf4de904fb52e649a32255e2030a7b31b 686353492f31c064a3c4b0448c4bfd44b8e15384fd809b8761ee26a7dfa1 758d57ce4f0bc376eb2b3833534b15a83436ba553955acb5a7a66796ac5b 92db5388bc53efa27508b08e82821e5cf669bce52bb860780f749b4f38ac df5ff12726bf3ec2743f01014cde96fe6b4c40a034e9eafca2a35ccc776c 2669e6ad138070a40f48ed79136d7ff57e993e09b81c543fbadd350ff5b5 f7a46f060f88e30fe2d8233832d18b6c323ee017ebc1df5c838321cdc8a8 4cabcab20b60a1a3aa028f36ea6e87c850af8af7cd50aa6359038bfa8818 821d02cee8f51dab8c05f7ae9797814d97f3db8ccdde45b21dbb15cee292 faa534a5f317b357f4091f3da357325b8b9f5edb45865415973c143e5e5b aa483fbf2d06cdd4246675ec58b84c6ae65ca743117ff00f229243772561 31a7f2ba26a9115afd96c18216cfdf41b7220ed0cb3fcc26c36380007b38 2a02aeae428887dc8be5fdd630ac57ee3dc156c7b8b29e687f24442e35ce 10ba4087295a641f7139c831f7ccda6cceb5dafe537cc1a97c5a337d3c48 a6ae947f58a30dc08cc7b58dbbb4737ad52783c573fc1e9408f55495a80e 7fda61f0b9c4f090158f1a416249ebba936c27befdef19d1bfb839eb7057 6a010706d8b95657b2189c2ae04c11ef9e57fe09880273761fb4302c388b d608fa0c7f00f033c9c00f4e3d5ce2d903e0da52e69c7745ee9fa75e2ad9 3dc6cb5ccfcd3782a699b807afc36ad1f62b05856d5dfd6f88831b90eb3d cd523582a49732e3fd7253126d39e8afb8458b5f7ad7f94a8dac13365f43 3c857af4a42c0a08c4db9887c4957259ed22d13cfdf5995da957ea5a0f62 0b0214fbfe08ab6d552dbf048d62cef6eff12f153511eca7833e0e3e95f8 5e6ac0f95438ac4c126e1f1ecf336ed31cca7eb216d279877123fd9fcd8f b5e52b587cffc4428456ddca816819a8a4a211d8f1629e5d42ba4c5c356e 580c8a22c61d987552faa97893816da73d423686e4ebd44375c257f03131 8865a20f22115e72bf1eb9f93aaa169c140a33a06c35bd4526a38be79cf4 0ad1efa10411e8f3300a8a8b97ab140ee6734e1bee6c8ee443d698d34159 97649c6f10f20acd80236422e215e146d744a262da3fc88dc0d86ff66512 f49d3f957d3c5cffeb424823509f33f155057a4c6f37b52f4667767ba94f 6b8b62856b553f307e5d230c44cbfdc9a97a45b139ffb2f2565eb0e22026 972fad0fb7b9576fb6f368b61979943a398773600e7ee1dfefbf26d45d40 bda66ebb96a56ee9cae0b2420c5dd83e24dba9ff885bb844bf3d2bf93b07 325dff60c0cb5fdcca0ac8fb5a2e119d5af26e53ab8e3b428481c2871dda 26ef0b621cd8572b3c664bc7aac01a1d05b98f791a7080d294be81099bda 7982432f3dff4775c44d23f4f1b2e0162b61a8b2cb5ee8564bf98e2ed403 2219085fe6194c19dac98a421826caed7f1ab1477ab32750601021728389 4235d7dbfc1153d5ecc48aa7293f19592b4d7e95fe55151889bcd1d7fa7d c2370d2dfe11d7e4ea34b5c7a8e73bd3a348fd389ef45b6167fb90ba44c2 3e912f9a4f2fc0427ed070592f7110183bfdb2c400393ba7569058227926 351f07fed4f33633ba03a72aa2dc6b598e49b96021dd868dad0f352e5722 fb714f667c15c68d49c03d822d82677edfe86fe9668e537da284068c9b0a ed83074c92a5b939296d505b837e6a9ddab1aeab7455a08a114c2222b339 284674b74bf4ca9ee0c020bf2a148b439c71c6be51a94cb64fbe4a7eb295 5a455047cf5cb348b062ed4f6471cbc3e9add9be9b96879ac7bc71bce02f d02f17c6063985a5e8983d205aa1489da13c408990aba1c54f2f501aa172 f530480d789c848118c0a74ef98d5f607a067baff6030d887ac6a6497f9a 0b38f9705f328aad4bfbb634f739386177b07f22d5771282444e5ee17335 b4d0ec86117c697e79a5f4f65fdc08e4904daedab20067eae2448fd43018 49e456d085f392dd13167adf75ccfdb723e2904a9c0c976d6b84ddef9d92 b0e15fb246c3ecc2d0bf314cfb957757b3a3e8e5801f520644e4601d291d a0f7507c06f3b9bb36fc1c70eaa444e14e56c0cff06c7f853df36da9d8b6 af2544b853dfff535a7e5c6fc145250cdda229956019659d0d253a19a7b5 1a4e538bdc01f74d77049949c2c97c7ec6392c2e61ccc0992b66daf1ab08 551063e53180d2a67de496716ccbaa45462d9f91b66a22545962ddab1205 11ff08627131b95e5deeb8b4dd9643e7b2af65c0fdce11f5f1e8dd468da1 8d41c8c4f00ea73836f4f70ec50fc3ec6d358c0658a4261c6d15a582a2c7 c994e7882e661855b352014576858a265ffbc425160669ce159d07edac04 d060b44e5800a7aae8e339c29b929aa81d2f515c46229d2080d5917ab20a b6b34fdca8e4af64ed660a3173786fb1a1d005d575c2a5187d3f7cfdc94c cc44a38c5cd523e9da726d8efa6da7b6131dff3435fee838b2c7d6b97934 295f06202d307ff78d906699cb9c5bbb10d1d4dea5fda5bfb094e7046070 83b646d37f5da1fc7ad21b813f44d8c1afeab66655aaa19703bea2e77df3 bf350e17c74b3447a452235919452b5175570a006c7680ac05e8950a62e1 1d7e3aca35a397d1e19630d094a86807593c97f4c484e4e06bcff708b6dc a972e3a0009e1cac0ea4141530f5c1b8aef5e1b933f37fddbc4be22b74fe 346d1a3f5fec0818f8e61765568a2ac04713e828f98c449d9a1cce52d10d 61dd8bfd084c8d099a75d89dea64d5a7cc68bd5b0593d97953dada976383 f5015915618aec56d71d1dcd55b89736395c609b315a3f1e1255432fdbd3 7f38cc43c354fb4b7c44f1a7318b0b7e99c3c08c33b953727b6a63280517 83a0a33e3cd9e498346a3ca6a77b517096edd52ae443b87643a646c3a7bb 97f742888d33f9b3127e61942f4103c1dbdcd8eac8f9e259773066736ca6 53ce57e8822651261d847c131321bb9d6626a1ac50d047c0ba47b411df2a 995545bd68ec0287cc9b31d5ddca8755ebeb10accb3903ab0fd5788e9842 20443b8459e7c078da4289f1350905881ad6dfdec47302b0acb0d4af8cae d02b4b70df3cf8fec118f0fc2d3dde3e494cd160e676e300bc464bd4400d b50ee43b314e0517037bf971acd7cd327cb2134893b8a0410e68ddc518f5 dec966c7884cf5fdfe74723177f20dedc039d879056caab4bf045062d390 4f615c5cfe109ac7a35599c94024b41019b9afd404a80acaa4837929f5c9 317680a13d157a03b59a5588df79d2e113f5f51021d6f6f90e8bbba2c252 fd10651be80bafd59c53a3367ba3c28db6eb9dabf1ea99f47b503f627e15 dcf3fd645fc52c5d5d0f2f07db4c25c0d1e1c00146e1c4d973e613ccdbd3 f9450cc0f5343d79f05e9492e86a1bb889adf40503bd7f3e754343685918 4a5b20bd8a172f350d846b7570803990adaa48d4b9155a2b4c4bfbef1e1a 065c08e03928559735bdd442ff1e83e1fa20a5da57d8bdb2ff5427c034cf 0128af111e6e73099e046e0c240e80a73d7be72b87834e45898d475521ca 3306707631f5c6136199f354632d1a085f12a1c7c473868b62e534d15f54 84323e63d0574196a19ef175214eb35a90873efcfb92d6cf68761d45e37e aa61e1a1979a82009507ca193e44b36a806486665cedbcf387053aceab97 9bd35d30978fc7659abbe844f4ecab3303318ece80777a5fa5a9dd91b3d0 6804c4b4e9b4efcf07eb89866d0dd8ca390cfd1598651417114d78776b1a 1d36b4ba17746d6be7fc123d473ef1efed1c3bc1d555f914536869fd5b0c 35f9c83f65b0e6bf7a627b9202d787d72c600ddb6bcce613d88492e13ca0 aaab196e8a49928c62cea4ffe2d0208eda334acf47f20bd793124d2c5546 c03f4a364369a76a0425262f9d9118af54e37d32e33ab25dd533a49df5fb f1baf4ceac2d9d378cdcd13b00fda432d9042f623da41afb80699b5538a2 5403b0b3eabec9e8efcf42fef3ea9f91766902cd206b0787c187d5370b60 ad6dcd002de2de8dcdc0b4719a797c5e26baa67665016da0d967fa1346f9 588aeda174ca001b31213617fe19ea218ec2359779d979e2663166489c06 993230b0d07973a117c4e3f4a4c93cf8428248dd5389414d679c69644142 67c7fea17e35b0cee456667a9b1875c81b2302bddea2818d6019fc1622a8 2051f60584abc904cd918676305dc03ffbcc64fddac8d8aa9ce2ea00d6c9 7bc63c8a617dedfc0e40775649438e9f61afd1795e3b20560b01be5e0983 f136cf48ab206954e41dee0d9ddd953dfd01caeb569151d6bc0dfef29d70 fae3e198e7edd8922c0e0bcb8bccf1c016142c1a8b337afa7a05a9d7534b 184bf3bf827f371e9bd19a71244eca1ba73d484cd2fad54db2f0eefbd54b 536ebcb5094e6bc2f5b2aae41f05b4b311115876ed42c34f8e643b53372e 3f6350db8a38445822ea9a33e27fb0cc42cedcd1fe2fdf723fc47c996ee3 56c402112f24d0af899b2d00bea1cfd427998bd22b2a09046d6737814448 acfb10d387547d7009fb384af0562c85694c071584236d0f1f3d3fcd0cfb 38b77c81889061e668ba7ab37aa60f58a3967de26f939b79cbf10a9dcc42 852561d8d6754f1b660d216aab1e133fbaa321c56e2584be5c9bae20ccf0 0e8dbe6d9c2fcebebad945c3c04101d2387351f132628786f6d9d4cab834 19288d31f9bc600d966412e6aa457ce6cad26a4c0671097b98c2384c81dd 8b9a3222d4f4bbda7017895c3edc26662779aee740d9d7e24185fb821970 b0a3a94041a69e4805ec88ee1ee521981536f2844fb8f5ef645f67d42ce5 148e2dde43ad5aef200edb3a2c7866c98458a92666e5f9e070178bcc39f6 5a893102a10564af4e8caaa5075d2f8cd7fab0401c03af299ea3515cc930 66744eb5af7cf0ed06675bf049a6e3c211a89e16de5bf0445a7cca6ee8eb 0347454950485d884606651e5887fe8b24323e2aa16de22fc1fc8c4f06a8 2a1fde5758976024068197e1f4506e4d3d8a16d40461a4586338b374a592 dc60334402f76388ad6a457dc3f54e6169cf7ae3959676e966a456096210 55ec3af80e182633300a4418e34a66ddfa6b569e5a13c9115b5fd3ec1ceb e50fba247f60803aa83976f00117536342dc3d9890c49b2ac701d370e43a 955118967827760f7091469c5406f08f18d7e3548148cf0e312b1dc71df6 7a5e7a1656cf2f47f3aff3dd50ffc2fcdab7177285b29c17ca43019f62ac 6fba52d1493ed7c427526470acc8389bae8277594958908f517b2863b832 92eb5ab3f57fffb08393ca610fb1fe905d88a0a16ac395e2a2a6dd033d6a 0d68992f830b2e1b95fe357bf672716e88ffb92ffc3d62945d1ead22bc68 c51ee0e10a43011db94c44685a5c4576f6ef44cbfb45f2a4bf110a01657d b51fd499767e78058199b31dfd60813f1a344f86289f9378231d5b151c92 385e3650b4feb1dc91018eab8474cbf69fdc1496a4d078d2c351c8196451 247a9dcf8117e5b637371d8e22e248c64d999015c3fd2311e9950b8ee092 2fbdd3d7bff766bfe9e7ce0be12f318ff2a7b5a9c6d00a54401609304ed2 c55f5c1eac3d4b38355bbd85d66d61636fa6e30c2e82829376bec979a6fe ee040e452359768ecf90cc539a546f17ae906c76f14f86ff697797322b05 1eb311a759fe260c1eee5dacf383816aaf1294cffa7bf87a4d9bc595ee8f 2c2f86feee11ad959d86f22fdaf4cec098942a57e57813a0fa99239e994f ff353c1e781d666b8928cfc648fcf0869fc68468bdbda7d280dfab8b0b3a 4ca35b074b686de8d372c61fb32305169a1a9912f6541da16cd6316a6ea4 51524757be5cf6e820011be3859fb8b8578c100ff029680e05f0e0bf11d3 3fe19460c85ea5e4c0ef28e29407c8ae6be01cfa0d5022bf9fb01416fff7 22a784dfc8fce330ec95737a854471d334fdc58fab42867a7b62836a8b56 466e9a6c1247d46ebaffb905cd4321970f59fb8d6ff65fddd34bf913ad32 2e68455c5ff2d23c1a5eae687f259bc982b6a384d35440f7c693cf50b9ec ac0b5578caee87588b562eb6b7f42034c9f2e545ec866316552354eb3728 c7d26527ed75174eaf635e048b08dc5d23e88981070ad5641a652f234495 6e9cf4c16e652a99f4a644d1787d6d36537489da4d74e61b2fc4dfdf1d1d 9d58f9c26c5eb63200526afd168ac57d5611ade4d4a382fc28bb60f9e7d6 26a6c67afbccd1183c5e3cf2ef210d0bf5cfa7bb10fa3887bdd4cd96eeea a8f9219aa2f10abc0a960c3b57c0ec0313ae10ccff1f522124cfc8d2d49b fbb0c193eaffc5b48fb3ff30b21cb76f0a4c0f1377c9223145bb0468a5d7 1b9bc25873ea12e1c60334571c67385c00d0b570d3ffc6c7ff0de62c183c 76aeeb12dffee1459e0fc818c621b8d12fa1357e2b55d48935d70bf140b4 cffe8813defd479350b20dc2eb1d3cbb1a2d3dc6ee975d58c89d61fc50e6 a0197da9a586b72255023de47dabefb11e8aa02414c2ff6258a281219b9d ddfe41ba7d7977d0d6f18224fe22f7d4e9355fdb35bf7ed3418f4f68d093 ac48f7d8fe4194feb6c80b9dc1f74e023c604dea27089f98c3973ff9f4ad 7bf7bae601db89b08d5d8139b95edcf6c885ffa8b3e4b0477e7040225733 826bacfd1ec4a0dd72dc41734856ab9fb700df83ca2ce812913bd142d84c 5c83c0b2583768198af9e885f2ba74877a414233207234aa5f18840557ca 11682aabde89935338877c6d404bde4153c9827eb16d66c1d73a8143c8a2 d3604ff72ce579faa3c5224bac48ea83ba8484299472007de96466b5b29a cc7c03b05dcaa38a48bff9f214de43146ae4e04fa705421917f99bc54533 f0ebc01849e396216b9f0794e6f6c6b61b52ef1b1950c0fb609895c3c55f f574163fc8b6b09e66abaed1810e698ff37cc1f926b2cda3b48c7d77790e bd2d514b6f385d397f713ec3ad3954ea9c8461586031d369e8b99e53408a 79d64c34eb5a56de8a67de91837960e98a66fc04dfa0ebde21db003234bb 78665b039d0a469a0221bd541af7149a2a659c300132c14581ef766fffbe cba8b58a5eb3f95446def49af863a8113d17b2e7e6ecdeafc3834d4df900 e3475596e86fbb4e2974c090db4ad61a737d611d92b4535ac291c56ad8b1 c031d2f9b505bb77517b737d70ab3723db52ae2accd5dd2f617423ed3cc3 9ca882ef41757bf7151806a9b8b0f312808863e3673fb54de939b35cdeca 7fbc4dc3bdf5a5f47d35e345916c39366c8b4f439ce1c6f1835c320bd1e6 7375b03b5de18c93256f251761a4c8cec01019c068e34447bcc503b9571f e8000627a6b3dad5854cbc0a2d69e5a8f46bc78f6a7b1422334ec7a98abe fe9b83e01dcf3c6c9273b346f3240ea225ae4a4083cc7b0ea141a0773fde 940768358eb4b13d82aa304a1386d450c1c0c6a7d5a8fd2bd313f78f8524 8b5196241e31e5595f3bc01f37700a2dd3d4a0ee2dd01a36569cd507130e 8f5b1e96cb560bb7da15560ccadf3b2c9804a11d9e8055c9ec70e48c1d21 3eb756a1376f2edcb7189d78cd3d6ca5865537eec31c17d801605efd860b 0b629472690588d0257502c6f7a75b9a1c1b397781329832cf3ec43c09f1 559cd562c48fa9500295cd3b0a790dd3fcd4684a7c7ac49ac9bfff36b39a 9fb148bc28d37907433943cbbf0cbdab46d3ea86dc8f81c859c52d15302b 94a9b51c199b7104deec9d769c2634cecf8b700ce9c04152cc59c9326bda cbec4312deed92dd087a1c4840868d9f97cac046581f762f75e8d24d6445 370a3f1e0ae74a6478d9dac37e7fa5bebec0a1e081af89c1bbf7f51e3e2e 22c8c405e8671ba85f1bf0df79a465dac7ec07f731e00632e017d190a99d 83e27e5c2e63d7dabba23b2e88334c63721ac5a4cbc5d45f4c177259f34c 2eade01fa008af65ebc601d8dd16436d86aa94c99f3cc0a2f87134e73bf2 2f108b825a8963b49c6c685474afe4a542c8641dc0375d7efe9ac1168d97 00459be52d0da399023e141969f25c0dac4668534b6647ec85454be945e8 26b26de6e3c4584b97a38e2b40a0d23481bca78084fe80e00a71a790bf31 df468a435ecc88e60a57860bbca3d65930186e9917cbd209c230e8f8255a 7abc7d3f043ae4d7ad63d9980bedf062b7d5c298c40225b6d03f29a0339e 0fca02138e526f06b9ef47f5e7a8068a846cfde2bfdebd24f5a73a66c079 18662aec80b43246284fa4e2ee0d9aab172b1e59a6cc46b801149d8c0df6 dec9a55d8e1b0efd9d302ff618075944cccb6831d336b11617107b0530d0 9885e5ca11a5f1fcc8d69d603da16bea51116d42cab1aa1e4d7b9b4d7999 3f2bfe53eac904feb70b2d330a89780eac10d12cc0c35b8399f218ac2976 e57a26bad20ce2fa2ae2363d3fd2a8a971747556f2959da74a8963c20b50 4711ae1cb0d0c02457ff2e9bf696b159af031dd5155f21c0f5549b0471a3 c5dc8918b675cebcb23e29322b959abc05283a702e878de8ef25ea760f3c 5c7b7b49d398283de2ed837fd59f7c22d62c58fe4448b1049fdebfc8787e 67d7dafe9774979bb3802254da59bcc0219f98c219f84d995ca768b8b5d9 d4a32525dfece003675ee4bd5d8dffc11025af2b468f9207b5b2b42349b9 8232bac0759758c1f4a283405815bd7145c93fa08f3ed2826655053a3c25 59073d8acd199dea2c5ba5f616a2e48548b4370ec73493ba07e197165dca 774438b0766867819c1154d1959fe6e01e6312e0ab91fc2e2bd240fc8652 a2d456a1de7f34ef372a53794d4c4e050bf3ca5b7bd2f1b8de93b4c80024 85cb219ad2d029739fd3c81cc6e78edf387235761a57143eede5cc887f28 2fecd261f6a25d0a7e154ecdf5dc38e426811be86aaa458577e5e0c5f0f7 5aafa9c41e5d1dc9d91ecd79b514f8cdf7a5f1a189470d35fdf4f9b87888 79ccbd91b427822ed658389e981e0ee5f7fb87692a3e3e931df8a1d1573e 3b0166204240b7080089a09ef7487c9aee2d665f5a82f94c877fb5b0dc53 1cebf1e71c6592cea2401e4b5122e5091df03d203df979b9a6efba12e2f6 b422fdf15d49ac0914d372d21e871de65cbecd105fd4a3e4714b9cca5c68 03fa39dbb015ea8a88be7913502e562e5b170b87bfc8572dc9df49ad6369 4311ef1334444bdf0b4ca3245271c1f7a4d7faf1703e3aa0e1ea8d5c6e82 1b28707ee0c9b4f22f23796fe87356c58ae2cadc191f4c58e1fb58da03b4 5a25ac95dbae13a293474217bdb214742b9d9d6af35f70fed2891942eace 3e625e55ffb820543fbb250a062d3d395bc0f219ecfe0d76686ac148bc41 476a887bc494ddbd396be200fd3e03cfa12ec9af6b934a283c42aa05589a a6b4a8d16946bb51f50419cabeceaec5aef9085c9989289e9b46bafb6fb2 782d84de2b068f91a9744aab237ceb1ba513e57e4c307108e993c972a3e0 a898d5a8d27833155031fdb98863c3be7fef3004cbaa5cb60a1f2e3eb4d7 290ff5fafa088b1ceccb6cf51a58daad998f08396cdfd68f5abc9c1ccb8f 6514107773c69c26873e889d1f79d10e866910e4684186fcd71c965adf62 39ba3418b313a27ad632300969b6f284519366ed85e7cd968d64823f8c59 b5911a72d0a20eb72b603a61e36f52f256ffcdf706b4560b4dfa5d918fbc 530d83a4b3c01bdd3cb4572e24242d141bf9e77536693a0407d002e09cda 5b195bf1ccf430ae9824c07928a050d0b460f2704be8f9e647a4884c4567 0a81eacf7cc038643eb0ff18a376ff6f32b6fe4f197273327fbbdec6443a 299cad4b26f7778a99f65a11bde047153e764039edb251936aa43dee50dd fdf8856519056aafc4c5ae6f2051af0579a9acd41d00775d7dbe70022cc2 63dca5e0a25b9c7c4f5c418587666b2fe24816b1e0ec92f9074f1403bb83 afc3f1d52ca79c387bdef864366e34c90be52f7aa09935373a07e4e02622 4e76f9ec3cb9e7ede50defda48248d61f3cec880a3b8843306375d9711e5 8645f3625bdb8e87052da67f9794ef4af8db0bcfe00677c3a26907dc651b c838c40ec39e2b5a5dc0dbd345944a6c32226089d63c52490fa10b215ae7 03cfb663eb8a47793b84ce7364da1c4e7fce32dfef09490121222774915b a59c78c2275f829d15cf4d8686b095c38c731b83d48738c25f40b8add487 c350a2ebe846c3916ae384cb1050f9f5dfe09fcbd9129c6270fd86d55a45 9618fdfa4f907e6b4746196bb717865ab378414029017551161a52e9d24b e4f7eed553a927933d4abc8f25df607779a717909cb4d810de8f57625819 00e224e4b91598149ba471cf8068abe8744356b261600bfcc57fb8be4503 6cf6571d9b2a95304933bd4f17215f8ef53f8e081af61fa7f9583c34eb56 55cb0ecb82246959f09091f36989ebdd646bedca614b9a61ab7696b3ff18 1058a150fa6ec1be2ebc7f64357a3ff2a2b0491d2f4e0b970de5b7788b46 7ca678039b5ef55c88a384578d427fd2cb16c87b0bf0a3d37ce8ed43e0f0 49af2436344d5f47c948c632c94a2875092825616c64c5d262fe5b24916f fee982a69a6ccf888bd01d62ea591eec51f4b7ddfaffbeea93fe08d736c2 0129e345d06b10246a5f57151c198d407730713f32299638efbdc01367e2 3eb59aad42a83ab41b432db462652e29813740f4680a5d4bd47b18328fae 6bdf4200cfa4ce3773809b45e8887c9b2e4236989f6c48d64f5986f563d9 a7538a8716082f81936aebd0461e6f4bd470436d8b7656f0fdf89108e6dd 02abdef907731d458d690bc608ea9ced09eb1e6e64c0790c7a2378201ce9 97ffe0317679ee1d4ee9f91157449323e53b4ada8096cd628b5861bf7945 43a98f2fa2ab54ff0f25a13dad43daf9394329b95aa53ca32749fecb0b2b c035dd1ebd53ff9fb5ad8bce06cd89e5568091c1cc314cfb1d9821d7f9ac 7c55f55e0a16e39a87d43148201b928f3c42b110fc056189def183745f3b 637441de8bd4c3c7ef12f4258e306b2877adaec63441010750db4e6269a4 c78a0ac01bb3603c386651fe814031cb5d8c1f149eeaff652a53e57bbd4c 8c0ce36a84a319a53bc1e5fd3f1ed1ee72f4c1a9bf264b594062fcafb22c c1fde3f2e3d3c17dd3f7fe0e15ebd812d550227c06d01127385374a11438 abd50048e17255fcd2bb85122a6fb9b7da9d5e9de8a747fae0da45a1fcef e92b9e70a5b2cac668d4d07527a5c1403267d823048be671f725cfc7474b 44fc5aaa348420b2d7c23c6ca066666fd6f2208e329878d90cef1c2e77ed 22d3bebb9d547810b189f08920a27e7107f208591a84d463ce2576c70c3d fe6643e4ea93f4e1daeb41d46f0e2f56fc10c69ad5034fc9859d31cf27a3 a1ee256c93111f81c11acf1fc0ce20b90bac9aa327a5c85a7985b951519f d4b03c40be637162af41b2fda68f0d1e9b7602fe2659d3d75955c579ac51 df6a552eb9581ac3f712f083f19b52a6c4f560f36c59ceeb0c996aaf1728 a2aa45dcad79bd7b23ab388d5b0b64a2b95154b6259b730b0f4a72c8c7f7 cc93c7d64d9d8810d1f63ff8abd4db89824e2d264fdee916c41e299211db 1a53256e1db5cdd04862f034d9404b73183a99d3d13d642a663f129b6d16 7095beb4eaefd03df2ff2f0b6b594c1ee90fdb203da89facee23f1ba3901 fecc75fe1811bd701259343011262b6a0a9707aaa6316bc3c17f787bb80a c8da5aac942d90f80c5a3bb59e47ec767244aa95c63e50bf809998957936 d3bf6abc24b0a397258f9eb4dc8f65692cb023d9091fb180c69498cd0c08 bbebadc84a7e0016e8f8bea325d924eb0df82e75d2cc2ccbf039b1193436 3d4332c5fbc5ec556be85ee4e707cc2753ccc43d2ed50558e51a104221c9 323cdcb0199b7b83454de3fdc810d0f362c0299f5dd981b31d8e3dda284f ef9dc8f9c8de138d3065437a7fe8c30572ad06d62e8527ad37ae39aab0b2 25f76a25f6c6505241ed73ba494cf923e919f688ddebf193e188f8c4c154 f21631080763b4d091e8ad1d2fd6649e0cd9360e8d1a67a5b5fafc67547c a31c95a5ea8d4eb5d68b9f6d6532db9b545847359558542a2ae58c09f3bd 2918efbe1699e9c8f2c2a11ea4d224c726d2acd4a8d8abaedc6588cf2ae5 66528b94f55b823a2a1f7be19000f3e7579d094e047075df18c8c8687602 95533b26eb3ed90635b129c17aca679c3e88b06998ce5a7a2544b700229f 5a6a504bd3e45b276471959c8a3f81917a53428739b5ef9e3d463b3ba731 8448e2a3e79520d2d245a2a72f31ff7070b6e4624e3a5e216bd103640c8d f387e49d732529c611f8b971073f17ebd2f6eb18f9b74a67e1997926df17 8d4c9eded435b9682f1a279c81bb9f60dafe125845a2ff3b02979e5481c7 8a45c479befb9fef3ce2ba9bc46c77b50b03e48da6d17b76f06f3ad11837 1adc69e178c52b5fb4b261c9311874ed07dd6d5b3226a005fdd7a6d53848 09e7063f036cdea41619122635e835d2d74cbb6aa9b38caa4d819c26e951 15fe0dbab4198fc5838f2c91b7a87b07d734c6d4f4f83444c1e90aa9bfc9 08a2bac4b3def9157afca5248f2da31ca87bd363ac25e9e77f741d4b2c6e 02f04987a6f49d30e9038cefc41ba172dd675aed8b392164411144e5b738 f3210b0e66b17a13cb9631c33d44484e792a7c082dd0a5382f34c5637653 261b1eb6d2035b08b4d91fa9ab770caf40a103629511f7b43f2743d7e583 433decfb19c21fd4fd0afcc22a4119e77c87bfe6fe50068b22479015be5a 9f06beab4d37412e062a45e0cbcd7bb39fee747e96306f79fc4f2e8942df 5d9da0e55aaccda547da19d30b8404fa121298b44c9cce198c708c69a8d6 bf17591c5c50d3fc5be6961f7aba8f366dae957a1c3730da4a5b4f035a92 74675ee3bbf0ca8ce9d8349f50cabb1c3ea4948abe6f9f143592f1ea9540 4e6909a909168e3279a957ae1924245c356331a75e7008bee92beaa304ba 40b7c3f48f74d9018b3247df50ebd7ce541da48eccb1b0be51a455c3c13c 279d4d8676078c3ebe4308748d52c9b041d3e7244c745b1f2f742d010a9e 60695f3ec4fdc1050ac082b905d6a57e8f407a3b472f731011a5798965b7 b1a307e252fe02c8f79ceeddeb6e165f1a94d7fff18ddbdf79477f14e9e9 3981abd200fe7771b29d1d2d120ee79d28b9543818527039ac74085eaff2 41b56d08220c958b5d9c87c0c04a14d52afd475b542d391bc54ff33def8d 9484aff6873beed32dda4b371112b523b6ce22b40d1b416b64c9370f1cdf 2c548f4ccbe9e12e21c36cc3ea52da232dcfb65f66b22b5e2ec04852510d 5e264ee939bb67aec4764b87062aeb7f680b40bcee04ad45c7519eb3b619 9c9e0e332661463647f2fb7edf303efef84891cebcf0fac5f723a9d0476c 3f8c092604c87fc69c7a90f4d64ae45a478ee8ba2df50fb93f55a3546123 f0b0e2c1c40c98eaae9f0f26b8f80ffe6e6b94b7e27d2884d58b8a119662 2df6be608c5569d7864bb756df2edd184b90812b44ed4a32d001c31383a4 0aeee9743651f795084615c48e402dbc01c818d477eac0347795cb2792e9 c11e8fd4a02e194eed1c919d4598fec003b6d9a8a0bc7d456047a1c05794 53fc1d7cb2d158d466939a23d7a7b8abed7e2777ec7487973e73f2266d9c 250ce30729e3c5223ad93b9ae8443b35711e446a3dc660123ed45ce1942a 1a2ad0610467e081ce2c8b92a6c82f0b17b5d2429e99f1a6268072c6b5aa aa6eb6283a872c54d3694cd825eb2926e57dbbc7c1663075e687a144e4d6 1c225781d80fcae1497b442342b4a3f1cd6bdb50e31791cc3928c30835fe f845b6be5e2d7e3f2f5f085aa3faeb45cad0d76bcbb1ed859a9cebb9f745 7036f0bc3f195cb1a98c9c8648f6583cdbb23894bc719d68c2dbd8003b10 d08c8caa40bce784d7bfb4eec9ea5359ac056e57b8b0f2ebcb1f4ce40c87 fc7861180133e0cb6ce2fc4fe690756d327a2b5ae063e3021c0c0bd420d0 56f0b941e6b36088a55ba11d0c35fd0132d5f48e5d9673572347171b4328 d4807b972831c0d74cffa5638c145b89c989e6ec942148207d6db8225758 5958034d9f9d4221c7c9f7013790dbd130f277e0bc88bb179dd09e270623 79ed06f25eea8b7fb33c35861a0034776e3813d2e9e5c10e227cc569ab36 cb2d9df2e7b7b44758f9dc4ffad7a24ac7e9f47aa850c221048c3cb35a37 ce8ea75632ae65fe3212175146fecd6334ae3d3c5f492f067f795e1e8ff3 86ba198cb74f0bb4dc0000da383bc4cc3f070de17721431988d69c8b1a5a fdccc83c22e16a87e01c6d3e79dc7afa3db0371b0866efb8b6f88900472a fef1c4a878243c52d4e02e82658979731c841c489a6b97e271c4c93800ec 7d91f93eb9b9c659a554e1fce42a5ec65ac39190ef4b66deaf6fc0569a00 0a9e1495f42f706fbea4d32eb7ef11a6489102596a65cf899c2f322f5679 c6d123469192a9bf1a7f1f2c81c554adb97bd19adb746a4f81a4d5559e60 ab94c483dbabf6ce2f28cdb412d50ff3fcfa3b3daaacc6a83cfed910ccb3 b8d2c19590aff4d753034a6ce7f4156896a13808e0dfeac547e69d3c8866 91728e4a35acd575b40d721e8fcc5385a2eb28d708101dc50811529528f5 cb0c009ba7e3c88468e37768fb0d83895ab54db2dd5426562af9d8af304b f6eda54e9c92643df926f5c3578269750120302a37cb140a18ba56ba0110 8d4acace8feae640a6c6958ef156b588adb0ea5f3b0f37bba12b7bcb221c 811415387b024b7076fa4403a3ad6ebb5d9c26efebdb7ade7c60b444ab9f 90ea493b658b7767ae2be649bdbb3fe85f460f1ed137c61bd95f7cd3d8b0 15ce45138538930ab62aa0e54b4ce1a5ec5fec0a2b28b345b67089a4e4ae 14d2e1f5a9c8848da688ca298f93860649ec3aafef3e820d86988c8e3e5a 4d4bb937791827994aa3e81d0bb3ee115ec36d5fb9a392d09e79af514d11 c7b3a03c9f9c13355ce79e119a19177ffdca34704d38118a8976d1ee5aa0 2d14feb1414419f5e85244adc5c0a765a522eef36170064bb19fee3b5f7b 441e4db967dae0bac2c48fc6a836e0ef5a69f073bee1699f55e9c757ebd6 fd8b514e2b49d6333815b7dbd1e0694695fca3d21320a0c4b852d9706dad d8369a95fdd917328be93dd33818954dbd2c212d2ca81560ed5bc284eb04 7a5f389e24e43f4fa8c97fecf46589fa7341076555cf55b1c21b28e0c1cb b00ab8b6f67472f27bc0d11148f407824b0159b5188d4bb7386fbdbf1c0f af34721b7bcb5c0fcb7c4010dcb6a1284e9d78839e3c2111a05d29ab7997 073b590a81c6168020f1d48951bc7d8476d5ba593f4f23cac1f9bb0e091e 84b4e99e5c584d1370dd12dee8df16af8bc6b7b23e2feabdb7f32779af8e 2b5094a6e9b7a7225f24c43a8e5d2b977e1e19e633c26771e23017ed233d bb02c64f8cf03992c6484528d0c8464b46f24f9e8380f385d5d01b8893c6 7fc103498983cf939432aa380ca576d09030cd52fd99bdc3be16c7204cdc 3365bf76294a83a1fc14a236f5fe5321904e779b13232a76f8fe521f4255 62678436359c2461bea5ab27209541f557ae2aa60009c9ca0a9fc7898c14 306ce35a50017badefdecbbf94ee2905220706dc806409ef87db1d73eab0 698ad2db72cdcdb293e7fb13c94d9fc87e74502e6927a212f0d7d2f2d194 64f7a66ac07872e18cb1dde8f11835dcbc5c4ef039333fffc0fc1456daad e7dae3ec2ee0d3415b0cabb69fc5006f4d14a4ee1a5ca99ad4d5e629c0dd 1e0f097b5b93de2dd001a8c418234c9c45e8c13d1ae04e9466dab8cf1ecb 88a4e059c111a6468d2dabb90da79c7c79e94db28f6968b1a632f8c57d9e 565ff91c6916026ffac0661856b9fb8de9c81661816221b1fc159cfef175 1e7e403f5f2ce32529dd540792fc17a12a3dcd7c50d38eeaadbd10adbf5d 8a82442aa900ce6150eb7a4639dd9fb6e385b2fd093493dccd9014b23eb1 72e21aa89643a6cad1093343d85d81261972de0acb16a4c6b5f0be4c978b fa12d3caf0134f9ea49f6e9687c8f99a456745ea252f0ba9968c7f9586e3 dd841aa92dc7705bdd682dae41518a09df0e209f321d7fa3417202f4ba76 a984da3addbc58136885362f02f0a24ebc439b3dbbdacffd8498ebd29f88 f016b1feabc10785438eac860b554525f3266097a675299aa0967bd3b7a0 eeee3fc578d1be99d3533bd91571aed904bfc9da1a1451fdc5406e1cd614 e0c7fbc733563cd6ce6cc31e9237ca153f1f0411114361d731636bcf9855 5abf12848ad109371a42b63675a4130b81e97c2a2ee2bb5d8fae26401560 01af0f55d9d5df8ff23c8aefe14f120000f14149a36e5c94cd9081dec277 c2c34870d05011f99d48b0875a5ff542f067f7e9880109f586bcf2b50522 a1f23ece44349e539e70f84e207dc9bec7cdf856a046f1a03226aa41f541 719ad1af88ff211e57dd0c1275dd0b7b47440da089b98c6ee92a7d94700b 83cebe19eaedd8a615f6587587ba8bba3ce3aa5e8eafb1fb0f486be3609b 169efb178a4292f4c0378afe5d24eed1caab514ddc66c696d8e37f294a65 79131ddf5488e9436609acd750c3db0a940c84fe022b22adc2676f62e91e 8f891225f891fba537679b24547bbbf35f04915d20b11739f620d18b5b21 6921d222f15044368569aa302980b9225bb839f494588481b94b0c724352 b2df600a22b062561d86cb8f81514fbdaa4f8a043a0265f992fab71fc912 4a45b8475e1ef3df6b6de35cf329777d45f08325e8505ec0d979f542807a e77e57e453525f23bc59a50740371efa98678aee6c425374aeb745b99ddb 5d8d908fdb551fbc0db15832107bbecc4e11a1a8dec69358a574a2ed46cc 31d564549eff23102d92bfdcbb2bb985f78f36033e34f59c0ebafa3bdd71 338736464cefdba9139833995eda4207bfd4a9867d32e867fbeb7de60d13 2803ef9347cb17bd91315484ef6570892297dd8b7d966103339535e28a00 cb1eeca4a9775f60a9f5fc9bd8b06d78fe8e6318c31da2e847e3f9ca587c b01ae2ba0a2ebde308314413f4f230a758184ed60d4f71f6cec22a93a01b 6c54e0449a3860fca8954a347b7588329a80974ecbecda1070fbc0556663 75229f13dd995e99265df870bc8b8cc6347fadbc1a6af64599271a475b91 23493d46bec41289beeb67eb97a8ded7a9c9730d37c65164cfbdc22e5ca5 89d2e7954c7136ef4e084c43a6c7f361a3e96989239bddb9a593cc2a80ba 16de9ee90e95cd39393c212ab22eecb677fd36d34deb46c4ad0d21bf7e6d 7cbd0c8083842fcd87b18fea7cecf939987e99ba34c214e44dd84c176c9c c5a4cea76d380cb316bb4ef9de73d73b4afd4adb54451591def86621d138 d5a0a29441502bf6c2ade671cec3cb5cab903a657eb2d70c943f976c110e 46c5d9d29bc00a875f2738e5d22496a43e096e009c5d3cb724b4cabb3283 8dbe527f83b18cb457e57b092c302ee557fd4f00db9c56e66c9fdf4ec9ff aab85f60d02ba79694faba476a199a0331c30a78a92e10417ba236e23364 8174c826331dc1bab87c5f95027846130c6a2b4027930ebf9a97ba1b039d 386fc51c302648e25980212f6a582cde2778c677a01fbfb3c5d1b8a374ad af6adbf7dc94075f25ed66d440b3922c5f255fb23fd8f6e21ea65b1d93bb 225684b50f11310e242b087575973345b229ba62c1e2c35bdaec04d10148 f5b2f3bcf7399bdfdf1f3f79119714aea697245bc647316ea157484ecb95 1be367234fd02e8b1f091aac3d29bf282dff4011bc0cba8e55234d943db3 017cc7a766720bbc29b2d097a956c0f1067177f012d42adcb473cde8d1ba 35b4030757fa1d8211989df3bd22ce5d501c21ef8708fb3449df47d88650 9ff7b59b76c0dbae443f336fee2d615d7eed1c284f14335bc8a26bf4621e 10de9611fb2f1dbd52e4b7565d8c65b54ea36d508bcf0c578a49a2665227 cde1f9768efe847f9d94f1bbb7db83701c2321985c7283d47b2e40b27a26 8428aaefe75f6b2f8764a8494e5827573758cb9ca46fa93208836bccc8b5 564a69f5ad882052af1c1417c3fa7f580569528682c77080f3688b65e7fc 24d2a3aeb61574b4a3215927281544ddd7a6ee0a3e9388f8f631ce725172 4df70726e5912ddccc8c652dd6c9608f8462303d867f589de0f2f71711b3 5142ee6ef93b64d6326c4dd7dc83278e057100ee772082e6ba368ed91a55 53ecfe2293a481e42f83bc8f9148c70eace91f7b7d9cb8a72415bdb3af66 f68ea733a17abe9db0053bf148629132969589f38d30eabfa96a01fac726 50b5a6ff3935670198a1ea33810a9b11e330eb8b451f24f93544263436f6 69ab5a90a53b16cceeac36b1445574efa7e802de73522be725e68704822c b7d3912717333367895bbfbe06966a5cc653aab5e9b3596702086bf00100 85b900711932a95acf15ca4dc45a754ea334e9eb84d6fc8e3fc4f897456b ed64bb93b593549ff0d5352275d8e417172a6664c5e0eced1019494a7ed4 9ab0b965bec1a82e5873766bb38d7d856049cce2fca65aaf61e961b60634 e2a69ef059754c9d8163d87f928c222772d070d83fec6fa5ac734af65e40 bfde521f7d9cb1650fdf64754bff21ea3ff0af7611a93d525ec9b28c51af ecb04e7fc8323dd6c9b0d8539a34fc3cd8ceb7958e8ebbfed4313c77ed46 9c199552a9ff70ba5423b03b6148d4eaae17b71c5b39dc436ac53d6ba8a7 ad81aa8b02335a8b2b11e9f4fa913159a725b8ab60f52f1a2ea50eaf4d56 656e615bf382cc68a690bf83dff24fe986570adc0290ed1a37c1c2ad469c e789e0ea0bb5ce01020100e729721af3b5badd33a2daa6c33eb8f9064f52 92f715f820b4bbfdd56f76d42e7a1a068c1cbdce4640082f6e7d582d1939 990ce6ee8d270015a2c461798b37dcb5798ee9f7512168b76d26c28be4a4 9a1bf96c89d235f21a1db6a96e5da474d0b19b808d13d7a11bf39ea86474 99c410ed9894a1adf33d41b6fc2e614d8087f4c84e437b136f3cb32db839 3c49177a0675a0c9e7eecef448a97afdbe840fa01fc7e5f2e8fecedc1884 84c312e8635cd79195475ddbfdd4d38d5a0246de2c7f21608f8d2c0da137 1d302e941572e5792a3cf4e51a33228b93a814d03fd4fc223c314cf3714b b3a34bd4f7ed6348577feed9deb082c4049e57b5d3cdb7f26629e9f3ba36 893e09e3c7463d02a22d7056be76b87763260e46e48bb832b7ee13f8dc05 37ec8e81e9bdfead8c27ebdf1ad706933efd11131e12814f236ebb01be85 b7f1b2d627413b324918d247604f56ec128909873fec3857028bef76a349 4364c2a7002d104d486236c30b48e2b75d851c34ea50ba7ffeb4e1919089 8ae21768c157c0cac628a2181a32796fbc1a7271d2473cd88e5395ddbdb1 fc3aa8df0f3d588637f19a8b833afdeb5f655a8838eecd684e2315b72c75 ceefbcef94344ace8d6adbe355008ec72fe7ceeab01363a895f4e73f8676 39be0a0be67333848816b05b419221be8f9066c362c23fe85b7f392930bf e4c12b9526ff2fdec38f23a159ed61a0718e7115c24597d849fa76369153 54a40c965d4d72ec94da61a03766ab39aab684e134fd1407a5b1b19bfeba 52aa0da5d99cbe5c82dbaa663711e6deba180e1d4a39c320516a4350d296 bc19bf1be054859a0889c7e9727a021f3176fe620fb0c837e4141fece531 a950c03d319e3255703220b7185bd20fe5dba673f8129ab211efcf36ee39 4c7e00eb0876624bc840fa86e58b2f584754cb6bfdfd76810e300741ebe4 544e5ac17413adeb21c62f66ca4f075c32381796ba709782de34a675b717 a2c7f6d88104cb924fde5df775b4f0b68e0e2e5c2f788bbdeaf06d8e1fc2 105ccbbd5827c0b03fd6cd64f0d073f3192d5f94839644e5ec6c5185badc f04112a65f49a8c83174a9ae958e76a2f5af469e8b76c833782c5ffb8bd7 b1bbbb3ea0cb7c9786c3be2ade5e7afa8c8f20892659a59bc421e28845a1 08e34ee17864042ef587a6d67decdfb3f510eb40d2229585347a0035670f cc76c2837a4e4d68304fe113c539b35c1f0234b5079b8e32934546982978 c5e4df955a454ea263c3ca5d7101f31a318d82a3f9fcb5a8afd7a6520966 3b0fc9da400b26f285ef46d0e1eaf8acb1f1cb805e3986d04bc585073fc6 4895e4dae1ccb749bb439cb32ea91176d5c39c3650d10afb9c9884d5fb90 183424cee67ef2175d01d2478d67511ec9f54f88763c152697b06d948bed 49240096eee3d06ab4575e8e8b2cb8263b5bcf4fa1608720f52b67530983 3071879df52c3ec2871d20f398b5cac8f8a4d41d0f1d47584dd90dcdaea4 a1cf160c4b3bf1aab890b5ceb6cb3488672aa68fbd938281dbc1d8bcfe92 fbf514da5358443cb6e0147254e91b38ce6787b2bb0dedd2d38f5938737a 977b5ea42892520c58f8fbb53c994b57382379e9490f0d6970b980e1bdf8 cf9f4c3c5e0a18f66e86ee93ffe7fe546de50f41364bcb3721b637072571 fa1779f1d672fad260c16d7f13cbdf3e4376e7ff56d2a710ac5ac35fcbdb ce2c9c17e523bbe6218617b13c1fa6679b308979ae7c61da6e68369324c6 cbc7ddec364e5a86707266c0b459ee7b2c03fe584e529bffdce98c90a2f3 d9305aa74d3ed8430dbf3a49fe2ecfd9c4bc9fefd22618fe9c8a973ad072 ab6f713e4df02dcda7ac5359b2d652013e131b76b3ed6c75fd53ba58d862 846264627f6b9e70d8800f6d9b32242b747a67bb2b45675840d34f852aa8 062fa6b01e31ed24dae02f6cf788a17f7b9368175195db0072259cce0ffb 2c1035c1d26e1777cca3d56a827c3242069e76d6dd69b653768614b9acff 16567fea61508d51454bc02f6c60f755aef6afae3536bbfa1823f8e1a53c 41124de983e51cec92aef4f99785d554488a51c20885346d1f761da79017 940a0c557d93f1db6b3d00ffd61d08e96ff3afce5fedf545cc9f47a2b1bb 26713431d6d1e47fd6bd6e3c668b0368241f0ebb5fa9c991df79890e52e8 3a3675ee699b61baf869de91f67278f510061c6fe41de2d883f48cd0e068 e2a652b244128d82e5cd52f35f210ddae3054691ed55a7d99088aae8fb04 f525c2084ac09f5edf80a4efafe981f74c0de9d194320709b3464f3ff2c0 f6aaea6d973d9c323f53de3d741f698fbf01036716bbd62957cb32cd81d3 a2674560ffbc5bdc5c6e4f547e589ad0b1cfe14f5e17fed1c4a8abe4e67c cf8a49f32c4c6044f1431e1cc382e7758722a6d0df9ed23e51f8ad14d11d 7b6428e27443715eba4e9c05d6f238378f9498aef0e7ee4fe6856622cc8e 6ed141ee5f109e343cb6695c4be1e0f66601c27975983bf557c04acfc192 27a1ad7e6c44c00529fc7edd7f886d24b7e029b9c395260088bbfb969721 99a7b32796d27257de83a7402291c14fecdf7998c5c96b1edade0280f856 8a8f5007852eed303969180b3329917973c2d32c080c9765b6bab0673bc7 ecfdbbfbea980c26384339b7f1052591d91667d4fee413afc23de2d4b9da 742f4269c6c939f5fc32a38040730a018155ad733f231e4d5b9d01c03a58 eae7b5f590ccfaf25edc8552cfc8d95c60ebae1837d7a97ca137e9d4a4bd 2cd34aefd68d64b3f4f62326ac429921d7fb3c235184fe0899690a0b775f 1a566ec29d5830d323726526f7e7f5afdd71b77e07613ddc4fc63edf4905 1aeb59e6337ac0a4b6dd872e776c9cd0ccb861305322d816732124f5978a 86c186bf0a0f88e733ce38e4d7c1ba5378c5629b1efc97806059990ed42c 5cd183bad7e94070e4058569da2e51831ffe0d080301aeab4350ba290318 aec582c78d05dd92e5afb4424ea808629bc972e68f4ff2489c245593f075 55ca6a2b25964794cf31cbd3ae5c229ab9b8c29806c01d116ebd0ff0f159 ed2d3d7dfc73eab4910bff5b0b0b587cd9ea6e6fc45d63c09766224d8346 1f0588140b258b1729f70bae7962189b1554483392988cf230af4077193e 53330519394dd99ba1356d4730ab221dc6a66019bfae564893ddad7b177d add16add21d396cfa6c3dc818052e2f71149fd594a16de0c2ffdd366c99b 486c55a6e991e4d22ccb15843f0c3363676af2f5b2d1b7ef66ccf2f12dc5 0d63776bffb058d70a9c76dce96c754872d72c82a0c33f90d49c935402cd d26b6d743b1f43bed5d8b539424849c1495dae73044e885a7d0f307f1816 df6244a6f2d97bfd4e200e93f69b08af39ea21e6e347a47ceebf803f73b9 78adbfcf056789bb8e6e2563de87dd9a8c877157b934102dcedac54d487a 1bb2694f0034093c48f10a17d32e2bdd0c723caf59addd1be373af8c9beb 4415aa5af36310c31f24354a53c0b962573148bef91d994fe3f3d8450dd4 d686725799f53c373a0a3e3c060c2e1a3e8005049f26d716e1f381b9f831 25e4683264a07e2d8938f605978e2513dd2050b3d8a1012797cba8961632 bed260916338a812ae751c7b657e086a0c7ddcd3bfddff3e48b847519257 36d1310c4910fc114387f3ed7fe163f91895ebf55fcb425cef5729d99bd8 f2c072e36c310523e75cd8e5de49c031c42634109d56e91a46c8c8e89fd9 2012a00c33d0dec52597b5c6933291a7bdc5ceda95dcda5600f9ae1c8250 54e7ee1067458ccb66610704c58e4a4fc0cb5fc933d0322a716b2cd430a3 ad48dab3d4cbe9d23f2d092368cfc4e1f5495c133a92942ec62118d45c17 723646e69407b4a89dcdfd2ab3ffc099a21d9d29741d68270629aa3a414f e58658dc9170c247b6e23f35c4bc5ff83009f462f2eef4dbac5fd158a658 57f9b6dc1f5192dfb169dcb65621cab2f1b07bd22f4155a8e9e2b6388d43 0fde5ec1c834d22ea035c52e1e34482eadc36b4cae902aae89a7284e62b3 c84b608d6bd05f75bc31310b2dd3b2c08a00e0737f104f03a41989d5f6b9 a2c38b22f1d1803ee5d7a4d8de44e4abd496a1de0c0e12c4bc96d0122846 3f0ea9ce9509fee987139f3dd3f9d0df4313f555be85433718f6d05f197c 41a9d9c7a8b0d274019682d49f58dd5f66b12a6520d9f226d1df1f1b65cd fa261f980ca25a92645b86b64606293f8bfde364c47d2af2c709bbe77a70 a5712f2cc26f3d66f5be2c307a48e6f887f681d30121e32bbd87271b5dc4 615d28c309f15ad263fb37424e56dda6e17b998b45be6c7fc6c28e3394a8 764c9eb2df5c06626593b5c665d550d4600172791cd208ae9f37bc082b0b 242b0a504b751b18f4d7495172b697ee217834a8a4fb7cc16d6f9e8bb400 be8aeb0850960283dce725249fcc4de97d9886745ab6066c3e2f64dd8ab7 9aa11667f11188d7965dc11eb760b772e282dbf13249f31986ac6898febf e23e3e8b8d2c33e00ea6fc493850ecb2e6d831d1efca3c2ec8ee2e394599 091ed58bede97d7a43b6f739eb0f845eac1df6b1ebfe876009cc5d804b15 ed4b56761b3ce1af59c07b49dc798a44532297ad73d5101ed47f36a3678f 818297cc27f6aaa2aaccc9aa9b6f5459911d8c56cf499e390ae607f37904 50b2b9c9be0f006eda0c715b5ca0481734cfb0597478e7602b0d2c1e4f78 f03c68c17c70e4b42d7d2d3c95cf40f73488b3718e2cb05a549944d86944 d78724e266c3319af89ae430e777e95f0d792b1c654306e421f3d63a26b2 1e74b6e8b21b2e2b9dc596d013cda16d08e65e8f24a84b12b2badc653e6e 1110de2e709c1c1bed13707b70a421b384f20ca7a9a9d20324dd383f28b2 d3c7a9c53f5d4c6b7c378d26df11cf55238be1b24fa70dcc178dad3d3567 0fe4919085eb1cd905971d76a368fdfcf9d2f0a23739851a3a6d2e02d65d 54dee69ed5d81315d3ea5e356f94ef256dd267fd1e1a9edc9cd63e743f29 9bcc4a4506233b8dd7652ca067f741603f93250c087d368f9e9cc4cc1a6d ed567487c05baa992b0056a77f630a72008e394615a9db24fe56a956650e c9de90a6c2259189440247970541ca198748928215c0e132a81aa13208d8 63c1fe817f70ca573b54577d10b73100af8ea088208a44fb92aca314ae58 79706180788c17bb1d0b81b6b95a1c4e0f9ea66f9b39bfe12444a6446691 a7bdb03e0f03d9f07a10a7598f2166f108529f34cd90e601ffed3479abcf cbde8f051c348e48c61d95b00c59ea1287423f05666c3d36288844067e83 e14f6b5210842c742b89f13acd126b9fc50abe2ca7d7ed513d43b6ac7f41 eeda416bfffcc5c844ab2d23d4dc09b2d510504ce98d02e72020d9e669dd aa344c63a1b75632f912a1c0da3885da4af7e243e4a4c6493d6595bb6d56 b0359106957259e59e336baaf35bd1cec5cde735272ebccae8d4904aebd2 b32610c6fea2b69941d6542ecb44d71092a3cf067708a3d087ae99ff2967 1ab7dd8758759b971a08ae1bad78270d2fbee37aa2dcb119d72f6c7b0c85 09018a70d0b0be2c6830ef8e0b24b1ce1141ef873a4d7dcc501f808bfd94 e4dc0f2915aa023076bcc8006490a43685ea25aafc187302ebde7fe1965a 04a5a398985d29f08e085127b56b057334d88eb638a4dde64afd204974c3 939536b1b66a54b4db81151853915718f70813f096cc1b0ea25e363b4926 4c2ad17158a4489f91453fbedbde15d7b74d7f98e81df23251785d58295b a297f295aa6248a912cdd4f1111e6b628eecbb5139709e76ea4ab743cec8 26621d08e6bc64691cc90b3c3c1778931a28d3d5b1e20e96c643316613fc 487c9b604c43463fa4533bca1236286e6f5a6eeb2f1d9c34bdde4595495a 365f88055d9268541cf1654acf478d384a5496a8772ea1402751a093582a 6625a0a44816b5fdbe166835d598644296249b92cc90aa3fd6445c9a19bf 27f59cb0616c7306070f33c7df4e1de64ac8c5bb2ffac1ef2b1b30e5a027 5e6004cf64bbe2c6710edcfc3aa4add60106334708862ffa6652825bc848 42736e47ae6917180365c75b27505eed3c6108e9898a780e20c3f606a860 229ac46d0471aca0187d6d539a1b8820f620f72b41ad1d3bf3834bf48ca2 afea8bf535af74c4562deadcb63d2f5c7585722b77c989342d190ff926c8 a5263b4f25286f99cf6fc62ee6e2ad61c82b29d82468ac10fd27764278e5 558ce8b41ba111cb2f040914451a480c93084237cac8f66bb7c6689f340b 8abf0150e06d5b1177278a4c08742fe22f42c28680f190900344adfa486d 59718c25d37275bce4df981aac35d2c7e85c72a0188b8953cfa516fd545a ee0bf4b8ba301cfde2144241fbdf3d204e3d2823301572e23f204c97305a 82401660e12926ee7ba6ea1a81ff5c007933afc73266fac4c134ed818a48 e7da01c71a46335c845f9da5e960b25339d551582b375814148d94cfb781 fc56093827b78578a73d4ff67b6b87f40cfa5e3f4325d9108cdb64bd0642 7b88c84105187316fa2990b4e3e8edb6c78abf164f4a9717d523794b2fe7 72a04dabbe688cca977090979b5f47ceb90a1dbc167d305eab231c9f4260 c4ad10889cb785169902fc0bed78da15b8417453bb65856ea0bea5245ba0 573f623d215f6c0cf801851c305b355d26b52b0b343645fe25c78a352684 1eda480919a1bbe5f56fc10abeaa3e1fcca7c43ee560f067f1aa2afd642f 769d1ace8e2aaaf38850f0d757cd808c921d716e96fbc07da7860dfa70ce ae2888c0ed3cbf9586443532b68daed9a926655c157a416c383a53d8f283 2a4e67468112a09adc837ed8ec95f70852921f50d4417239fc42ee3624ca 97f682745cc5e76cc7c67bd99f2180f8c0b7fb49539c8cc474c25c0dde49 1671ff329e51bcfa779346d4686835a3ad6633fcb5e0f67e0ca9ced8f215 bef4d240453eb2edd6adb22278aa5b985fa140c9834d38753df2014f8c0e e6dad19e8fc54c03c1f6cb0f858986691d99592562cad95fa0a5b2abe4a8 b54b457d42e8c33a2d1951c0419a72fb94fda78ecd92bd2a1416459e9dec a9469f35e4c47db531726dee8f203d7042edb32f025df3d582547bb1d45f 7a5b70d317df4ebb16e36b0d798e0932fd2a85b04fd67143e4b287a50416 2c1f5a037ccd780088c5476385af8168e12d97d44b0630621759173c8f1e 3006b5b1c6d7138b7eefc3cc5f54e24b2c3ca7b41aacfd25e554880aaf40 6ea4c3c6e21d3b550b040fb1952598a7e8e6488fe38288b2aeb6c4718338 598a2bfe4d2b9d14c65732da304c16ff3e1f8f03046ef095b65fd609da87 ec24a69278bfe65c905cd0329f6a486b8525b7eea4f7ae56c2633cd83543 269e8acd6d71f500d82fdfbde7f7f7b1aee67328549232e26ca55085b6e8 4d9e2e7f74068f93a90c4654f2f396e57c5f76f7e61cbbe523dbfba6e766 38bba3064da025a79e3a294fe7f1cc28a3b4c57dd6fdc48e541a85534b25 e1bc11b4f78019457239eaefd4be9007d205f1d985f389db22400b279c10 948551a6b4a17fbda0ffc9428b18b43dc76efb15fc2182216f1b60b4e344 a03ad6c00f141ef99f89f24c819c3e32877a927d84c2d006940f39ca8b71 e5951673ea9bfd1749923219de38929ecaa9ce43b06cfa7da1bbedfda56c 61ff6c24f40e59b13870d5fdeb82d981154fae5d6d5152de69339359461a 41a9713b6bbe47e868c933cd74c75db71d13bae4dec85e02faa14ead6c0a 253b16c79514657b15e68ccff9ee6aa385cff9e2c53d9ae40f85c793e4e8 ff50b2b7420f4fe69807bc5f37c3e300e6b3c3549d1d3246a2e70f091054 1135bdf805e0a698e236b6496702d061241687b7b8d1a0e517df0476da09 d89667a7ab375fd2672dcbab8124e511502ddbd08ba04d941df1cebdccf7 ed48405cbcc33774a68c5212fc6f132641ff413c984f8b43bdfd7b1a2a34 35f15af07ef4970d3e4a0bb947c181e9ca27cc14a35bd1bd096875b45873 8ca244f88c28728b74e25cb8c4fc1095a56ca75e4569ad3082ef194add11 350db3b74b96761d4538596ff7243b1e1b724716a144106e080d42036444 fd472998460ce9abbd05b42af9389ac452bdbba3a13a96890025789f16b9 d92251fd3b3beb2c61eddb370a20456e3bfe5f4039e2557c451c524f8087 015baf3ff05f51869fb97512968bdb2b49589c1c7af1e085250a47657465 f480b7023e24c76731ac0eab6704123d77977d3a2c4c56b691346ebe589c 619c04515d34f81fc6a17527d5d8319013c5d4ff27cc3925e24c99231ac7 fb9eaf0bba482d3b75807ac85d03cd09de5d9ae0b07b7a813f0449786500 0ae8a7e00080300f0ab8c399057eddba273dd2e1b2a0dcefad3b332e6d4a c1ffad846167dfd70e0346daf84af292d4f424256ed5ac4e104f80697050 d50844a708eac9e7f7784fd01646f3bd0c595ca51ee6bd607d254e78addc 5e15c3b6ac4940ec865a5c23105b6be09ea09f2c05d6d76960a843b81ee4 33977faac3cbda85cdd2f4db7c28293a77825635992af8f3b38b4480d9a1 39b1662345a8abe1634a77496c3f57597d2985e9e54717ab2e99ca357894 41bcddede9a9e2106b401d9684adbefe40d607f075c179e9cc03e59e6543 0db70b441d43df03f2aa6ff06f224b6e455b01c64fb89eec9103e48453a9 749b4d602808c7e408a8903091d85e06aaf635d0d529c3cdd1b8479ac0f4 208c284bb678a547f2bd77bb17c86d4560434f7ad1937760a6aa55b614cf a9ff8c9c96561ae6c8f2121c4e20237428bc51df2099b6c49e3efa18e6d4 39e6e6981e746ebb1dc461259d8ea0f8099c47cca27b2d982b72c9a07cf2 1b3c05d6e26e6e286e348b8944078e24809f9c5f3d014b4cba02533f5621 bfba1f0edb776c634746703c9f73ba89b1960a496420c68f54e5b901a6d7 33d7acc79f275fffb253f389aa480084468bb34da1e797e43b7f6e8caf5e 8c93069a3a2730e57ec39b677bb73e3f07c2055599f7062e53b37a5f0099 907d2ed87ff7a82c95fbaeb888033bdfd67ba3a6031a4cdc56cb1e4cf5b0 6b46e16d988beccefacb9e1c037023d7bf5ccf5d65aa66a17ab361be7981 f132a578f3abfb97960a6034f052d9d5afdc0679782ec90f240f943a5f9a 3d969ed7399254ff67d89df668f7c56fcea1ffdcf20481474ac8495d3af4 b6d7ee093e369c057f0b70858220693b398acf8e8143558132e4391405e3 0a73937c53402e459f4aa3539cf7a99a3f51c0307d045df8b77757e92ea2 f51bf0bb4f77d3904dd355665870c2b59f1ed7f84fc71fdd7f0b6c5d3182 db77827ca6a2060d2b8c83c4ea4a432ef43a4d0a952cc6cbbe52a9f0cd66 1a538973de41ffe9c5cf55f2506b9efee51fbae5e63bdcf5528499a47c03 1163c88d3022606784de2f46a9c9235aee3d4f71d4959b0cfdc5b7e78c8c 0a8f9dc99440c2263dbacb343c5c648577f5610b50eab1cf7fd02419ef39 41c7ca0b0e64ebad4b2cb05a0793dbc38f1946d44767bd287f5e9779c611 ca0daaa1e7393dbe0683c8d3455cdfebc0e64b54b737e298dda605227c0c 4bba87aa3ec7fa6ebaec39e6ef2537d5974391d31739d9fc42983d81aee4 4711c823f35f8e2321ac74943871739d2dbe9748fe68592263e7713f27e0 d49b9b5cb7a4e55de54e6b800d15856450ffd3ae5f287b12ae4f438b20ae 9e27e6caa00f3eaeadbe08432684fdf9931e925544a680182602a3c1997d e5d0630bd5a010535e66e1c123013d23966b3545c7431c39b97295bfa409 9d14461004c42c85095eeacb9b47c593bc6db863533a8619bae09095de8e ca432d4ddd49aa600d277e75dc3f5c6631e2a05382cb007825fadb77438d cfa78e252d79b6a196d5164c2feb85d75eca25ff80b1d97fe10e87960ca0 fc47c41d3a213bf141b48bc3aaa93fa86245064668394665bfd52d12c3be 4ce39efd8111754398a944c3fd1afa98ec337baaaf899d35e804cf416ad7 fe45fff13fc6354007501043f98fe8428de8013901ba6a28711a2ca85a27 0bb135b72f1d5026e8217581860729e94f2f1878a0e96c59e9f62714fb5f 8f25003dfc7347e990078a9a331cb3a6a535bc61866f02513deb982c4a13 adbfbac3ff70a7335f40d5489e48e5ededef16191973d932479c62183b0e 25ee8c4f76d4f1ae45daea4a12aedd9ef81d248e8d19f8c8a5becdd1ea1e 98783eb7a38149170851b1942c96c53de06def80913bfc04e539ec67c110 498d15b78268853e5c72f485f8a27b768569e54241f6115875e2973292cf 48ff91d45ebed627ae9f0766d22201b20afdd40e5b17cf337f2999e0bd15 b86e46eb3c18fc12b7dcadcf9dd50c6c7e3f37e615a892db3f57e250a072 a49f7277dd6a2c8042698233d35a699b17eca5dbda6d250ed4a16fcc893b f0dc2e33fb1ebd7dedea3c1c39603c8b7e1a5a833a8fcdd5570bd088749b b232615366687962c7e56ed089cd7b092505cafa5a80f503c4cf337f07ad f0d106937e25670839d491f7bff7a523db609d126328c16113ecbcbf9c40 04904427a108618ae5d4ed809f8ccaf72251104c94ec5bee21f91b179d31 dba79ceee5ec7ff698eb84ab1d2d1a624f58b3622a78844ce51498b2cef3 8eafe259d22c7ba61104651a862008bc1ddda58cc45f663eb26428daa85e 7785363a69d2790996ef5d9621d53042f42f794962fea46e46f37b8ad1fb 76fc8d5cf2146843f8cc625139c75fb42dda71a752bac48f294e4c0c8289 fc46da5efd9c91bda6d027518b7e81e8b21f755a9615627d5812aca674d1 527a1185eed4e3c628196e7d0759b1cae6b9b7e901e9599a65230f1ee469 cd33b9bd9c104c44e3c1ab966c9678bd0ad78111a4e0f2d07a01a038cede 7036d0534d684a1562a17ad64a00f279200c0371b1cba61747671d2a21d3 f9646ca290f6b82418a96fa177c6278277504b7fba936325f5fa124ab018 a15dc18d2c5e8f93cdeea52beedb78a57828d81a3e6c38b9faf3dc4eb727 3ece3ea4482a1c6242a335862c2c3717f9c9ed95f77b140c4e1569b2192f c7dcf702d0bc9a50428ec406f8bd0caf886b4d979320d3e429816d88f7c7 146d960ac12e70f2cb7a9f4e3e366665ab3f1b4b6440f55eea26dc9ee009 6bb7763731740a537766490c8c174723bf0eb40c53701aad12b21d436adc e22203c1053a9dc4e9f17ae617888c4b4e6f3a720e4e6366ba628221a387 d8ab15e04ad69387c310d3528bd2faa5b22bff3fa494f5fbfac4f771c9c7 402b95580c5ac4bb3af692a70cb2c851fa5cf1173eec3ec29b5a05a0b728 bbbb51d3b7ad8b0af17a1563e82fafd93f8b71181fb7afe352874f4ec6d3 34ab6747519ab8e847b7bced33eb5458a828e074e74ba621bdcd03fea604 7f7b6abda01fc7514ba1aff0d4d0c0cb8f4e42d5a87e395d9acdd02ccc22 0c157153422018725846009a3acd8c8cddb66bc6836b4026fd9f526aa275 d06c813179e5924f26a25094e7bda8bd26afc4ceb41d8964d4fc4af1dfb0 595bc5d6714c32f15dc7194e9a3a73013c45d8fa55cc0550a12d9aae8e9f f199fa28efc2426d8d1defb93a65717af3ea8e2d5b4aa8ef0ef38e9600f7 d4e7d9f1d67a2e63ece4789fa74b159bfe2f91c19b0378ba52e93df12830 d99553b6618645e26126842ab70262d96e35e5e750eca0ce3458b3e51bee 2f21191136dfdbca39bdc07939e521e4f492f392debd029c1ea237bd89af 76bc89f618d530160ab16269fa6b693cf14bdc4ec7c630025703c5337f61 458fa09104eb15c7cb20aa4c9bdb7cef3a09f25bc7f3149951a7cd753729 93b80cd2112f7674cefd6afa764aa3486730d2c1897a264d82a91709fec4 a21e30d812f558451804ee6f3dee2c4c437846bcbda07c5b6cba1d94af02 9163b7383cac6e088ab1dc14ed3743ee77e26ea7ad3119a76c0b5f925c4d e305cd7bb3a09a4539475b9bd79be28fc462d8718ce05f9d94caf3387ba5 5e6e447bf81a9eddd3a34e17be66bc52b0c0bb6f86f6f008829173816d20 5182ed2eced319864a796ab65d4e3950288bada94fa32b6f453afdfc6c39 a4fcfe60353a64627e2057d4b379d3240012b3bb0ed0c7876cb83c1ba5ef b6e2a03f340c2b576731f848f762a7e1ccaf267ee06d621bc33fc245d0e1 547adc12cc0eb58b26babdb8eae9cbfbab93836fff22bda1831dd01b7346 ad377aa298d84628bf1c07433284b0a90fc89f5aeb2651ba2cea405d4f52 ddc0e74b871d43f71eb4ace0d2b401f9348eac3a2ef0ad295036bf6cf6f8 70d58e00b619d50ea7dd77bc28def91d805cd527dcbcfdc16c042bf9b874 e3b1567eba4c1e70744b9e7e5bd1fda6a5ff6e101613fbe58dc46cfac1a6 5adaf65e49757e9304e2ac9a91e0588600c709a61d4231730073a36d473f 518a145e141d0a5a494441b9ea99ac23f60f54f8127b477e1ce698bb4129 b4b1dfeedf10d9e665c247a62f112f5ca30b0ae5dbf3e495ff06eb28eb43 8ce8aaad84d5f50fb56a3af002c23bcf66abc2707ac233fc0f2723db99d2 cfe7d3b3667732a531f5dc315ce74edb9050bf75d29e6430f57cb6778b2a cbd57dfcef896e6766c8fc5c9f9fbd701cd62cacf33ee0fc95e78dadd205 b5f42cc63024624baa0ab4dd447832b4e1dba77bdfadd223989f8e958c8d 759aaa37930664c6efec708116248a2a7af3d656ddeafd009b7f53338546 08e67e5e588a857167adf9225cf6c641f5e19c3e08678a281199eddac831 b57223b1beeadfdcbc8f6f25d32fca2336c808162e8f381656e847fb6cb1 3969572425aa05ac830c33de6e030f86a3a85d2a66a77f103c7042c97205 526dc882ea9a00eb8bd5519847eb424c15f808a91652a6cc89b66a573112 6debade123c63d88a2e550facdeb3886ff98646000c64b3a91078012ca30 904b71737cef6becabd43dd702880538f5a70085e6cc6015d2163681067c 3d513a8c66032c34a0fe17a58ad4bc97ca69bf41f11d5e910fdfe9729652 d3ea21f8dd8cc19160a8fc77573b1e9cef4e790a79d8ad6723b6804e9616 466c935303e063dee29caa6c3baebf278b818c2ec2f13ed645ab452397bf 00db8b26e115026e256746cd0c78a959364fde6deddcd0f441a61a1eba32 c7bc172bb09512148d1ebac9e791b7d51b71cad2dc9b83b2f99b3726607d 9cbe58b499a13753ce87fcdce21c0ad0528ed0efb9b2c927f57c78c62624 8aa2b835a0791244c5896686a66173ec9f802c4c633a42b086334d2a4878 0e53d00809247be64e529f96ad2f8b3922a6097d414dde1ec76f9552f9b8 d58b8e34f359ad792b2be50c26db05035e7497162e7c49c38d3cd9b98d62 0aa67492be5afca3a81a7080185c7f0b5105223f1fa77805502a2e8c5fee a27699858d84a95842c5f2fb68686d59fe24091fcdde139b6463bc6c7b1e 0e90d20a83651af00c85797bb9f53ecec1675c7ee636d0d9e77dbd8f8967 0f855ee4d4800ff3f6950eff09bbf8a0daf6b8242840cfa5ba73beb95115 f4a78bcc02d85ecce0c0f2ef6f328ad1dd6cc0495a3315b414a4d61da50d a46d7acceff6ee56451805d26b0359af193531f95f6589cead6fa041af15 3067f88a0a2fecd135c56682db2b45a71d1fa737c064ee9a4f404bb72a70 b3af0330359393247ec781512482579865240a23cd8479f21c2c44a119eb c4e81b308dd8aa86e60c3dd8ada50e0dfe8308eb1a7f201ede8dcfda405a efb47e0e6ca7ddb376dcb21d37f7acc4d3e9f26b03a8de0e8940ca3a9e75 963a389df8038d2c486072f61c0ceaf500753c7a6352b1cd0338d9212b42 a4d3da23d5bdf44c27c94b88a415a3242ffe2e1b332477a21d2b9ce075ee 479c6e657a4d8874a8c53964229310e01ed4f3c686fef5258edf3b464dd6 ffd7f1caf473bbe722d60fb14ab4918e93878a8ae4773930b8cee110f476 7f42a52d9304c55be12846c911a10ab9b2e036bf9dfd597f5348d4223331 5fa80d0f563c388bc2532103f05e90dbf1923f229f980a2f4585c7a37351 1372d07dcbaca583099ea972c03e5aa67e6638826db134564db993ceeb6e 7a6659c7c5c05c310267d5f8a24eec2d5cc3e3f3c808e6d6068d1a57646b 37fabd98ecb7baf99e7d9ac4414a491a73ca34c52f394352f6b5a15f0fc4 d88622dac694699c246484adac3b1d366afede2a2cd2042c90516a666a19 a91c80248b11224beddf1a320e230739e755d098b6a67315535f4c187cfa 67ed817a035056353fc859bf286317996fffb478a2248b908ff12abde705 402224a3ee5f463dd3d243875c84e02db968eca1cc52c75171ea50d6a88c a91327a7aa5795019f36c0a19c093a1c9d3723c7568f9d41f2e4ffb712fd 47f897703d7a620b586b81936c84aaed61d84332b3bebc4f95b796b93ef7 a1f565c494f8a65edb21e2ee18dc025522ef8e599887ca2836069cddd889 88e5862977b7472584303198cce97ef9f9e1446d1f1f5ed1cfc666a8a0c3 a03e1792efb60a9b406549e0dedf6accdbd98742568b4735a747d8e5de21 e630125ae0c691d054e42199c15b1f80cafa6e7bb2005f374a9a5f9900ab b7409ccd50c3afccab1214e6a856f7c7eba89bc3291801e1343da9dad2c6 ed075c8eca1423b43e587aec67e6145272814b3f191b3c285639f9e2d6e1 48a02dc2cbc0e054d6295cd05dbac1950400a9189316f0265b86a732d302 c5bee8ed233768f237c62600cbaaff3a110d5efb6cc7ca3b92d965ca7c5e 8d3e64ecf239fe2507fc797fdbe54c1112b28d4da44c60ab09d994c5ba78 d663a2591934cc052bc70cd1dca3325c66c9cb982e2039f5db70c848d3dc ef655b1c2cd0cec8865fe8e1c0a267be4f707ece6f5a3dfca3cc1edf92c7 60439f51aa69a4c1801e96ca4d6ea4ad980258f3d15c893913abce091019 84c61b91d603053e49a97cb82fba707dae8af1d579fd69c8481cb7b712cb cddb4d287be995e32c02b399602a08b9dd849039b5673f1930bec7bf366e b082d2ca5db2385c8cc45be3fc0e31820191a814eba7c4f23b1938e6c4d8 00732787cd2cb97f762dfc85d4b798809b5f2254d826ca42b32695428d12 0298b44cf38494e56240b75df1e41e46e53c44dc505452256dfec819408d 605ff14d6c1f3f152f2fea96ea0ab3b472d8704e06be9f8c3e8395caadd0 6d6da033e81ade5dc3b83daff743c6e9e48716003d358df63cd7fd3e2f72 7d1f2d0c29962f76d5c95ed44b6f08d052025a665785f264a3d5f5593677 b630e628b5ea81fb37cffd7a30b7fad226b6fdc82b0878af4c0ec4f4243a 807b9839ea62bcbdf7c2e9b30a623876e632e084ebf4a21eda04fc88a1c0 7021d0c72ec3e969d449feb08e5826ec20e55b21ea71ea59f6e3b0710b0d dab3261b4a2029ecab68c19add5174e55d5e984a4e5f38f592a302fee6ec e732dde841a28672c620cc5d687455a5c06fa9fe688394a04f96312ed025 b7aa6fbce2925f3ae559cc1886beecdb70822e2e5ca3f732a87404b1536a ac469989e9610cfa440ace43875a70ca51f36cb6f629d9424c1e35a88f92 d5da3cd8cbae6e8425a36968e21f4f30349749e0205bff8d552837d6fc39 532525370bbac833f75f1854c93fc533a4aa53adf7008173a70d94a4ebf5 38ea9e62bcda7c20e0a073bee2efac34d2ef1d03babd5147659e50b55704 5b2eb89db303749b04d3f54b43fed612fcc68206e001a7afe90230d9c12f 74a32c7edb5d0241dc3a5d51481fd7c8fae08fee263fbced7c7d911b3a30 3c835af5fadfd218f61a9d6de80485abca88200047b094441f7767b97a24 e8c612590fa2407bab1e8b56c71914eef2355dd97cfafcc192bc06fce063 d3d9d1a629aadc75e3bf207234c208e7e30663edd691043065c9cbc473d9 7c6d4dd3dff59d6a9abcdd4412c3128f603160aad8f81c6e7a4dcaf35f3a 99b4ea10a34375b477c2bf846521a7eabd4d28078e9340452a198f3f5acc 3db7e3908939ff6e3709c6a3fd9889439a4ae3e10b618cc92e14b68429a3 ad2c80940a1079452ec266f254657be7d79a2a24084af73f6df71fbcd32b f6913a3fab25f977787f7bb0c3a3e8bab38d7a2db0b4826950643dd1e03b d7dd1fb149a33862a89226b7cb454daf613128c2075470e42e70a9444a8e 6eca526345ab48e6f5160ba23b5bddfda6049ec44ed1461c7e0dd514b16e 2fb285f72039de3c7982efd40d7f6c8e8f4cf35ac71b467bfc578002e8d2 239a2fd2c4bccdd8af3d7db1f4ae7f2d2e0811df9d0155ba6ede50b5f052 f14f6ab884fff244d8806c07ebcb49ed22d85df696995991a954aa97a1ec d86acd76e061b7541e87997fef0657a826bd88ef3a4a5920462c6595e7a1 56f453291ca044ced810860c3b0149bce73beca713040664ad0591304106 129600af71317b0d2907839ceac99515d357e980b1937b6e1200aacada20 5421001f1b2f91753e80d2263c56aa164a74701a8d5fd28e46480b0dd963 a683a1f355d7fb4463c7347c94ea5e2ca40b60b56297cb22d972c5bb10e5 6715a955605256c1541d9f3bc5768a6f355cd3b863f0fa1a781edb49368f 51b29481cbb41d4aeb07af9dbe8f52c5d0ff75f7fb6431d37d6aed84d78c 778871cb0f715b4f07580f23b586c969c81b471ff6a6c7276f7e141e02a8 584d4b9ab00e7bd643d2c3faaa299b1f1e25048461952ea42d4882768a70 de46b213a287f8d31ac46d5436f22a796c05d1fe50a9bc2a928066627a0d 87dd57a3ad91db446404b41557d1457873482005ea20916bbe46c613f456 c849d46ba79d20627b446b2f49e3fa309ae14f8c420cfd94922cbc0fb9d3 5a0f7dbef577f1849a1a80e0011da8ac082a8c6f61658e65ad177abdf23e e17c8cf0d26b9fa3a6e94837eb9e930336889767a8d7ea3ce980a8ea9552 8b004957be6067cd9bd8e02a0f23cc1762cca656d33412ff45e917fd4a03 eb6e8c1f43fdb0a8965a33b4fd26bc24a20b304ca817e88495ba9b361a3e 933717ffb0271f7f70c5d3cba1e86d0f51bf3aba194daf32c35c796627d0 0c7b2271ace2463e37e97b3c826cf3db60028f240f9452cbe08f7ebcc5fd b1bcbb3c327a9f450b9e5671916101d6e3e5e458ca31f04d12f592f83bad a2c3683d3886aa3b403963ab5dbe220fec00037a745839f67a3635dfd3bf f08f367482962ded88ecf6322852d643a54d5d303eb04bfddee9bba1ebcc ba7c653b3a613a8e719adebe3ce1bd7e754e5f4977e863e3c2d388a65227 b451d4f3a4f94e06513cba4ac1f2f511613ff035611684ccc461599000e5 46e4d972ca6960e095a526e4735a23421a4c9b597ece08afa2753592bd16 ded93255a1e33deece3c5eb77b94670e8137f2a4a4b98ac193258e7dea5d b8408a806188f2d1ddc440ccf0e9a6e2f0c78fdbd7b68dd4939d2458c196 5bf8bed4564b32462fff3ec892c03b11d3ea813fab4cfbe8d3016329c5b7 e3dfed0f08284d44aa0b7a2f6bc96ea4503e8ef52a64c22bed6b452581ae 8ff8917d53976471941a9116a2d878fb2541b561767abd4e31ccd8a590ca 03494c62affd64ea0a1bc779173dad84999c7a8d844eb1259de7bb5b25cd 023537a474a524ebe4660b22568949e624d8fea0ad37f4ce1ec75955eefa 49c6bf1803be87e9c9865ff3f6b8525b8c15fe8835ca153d27e6c0ff0ca5 1029a7a9185d25f0f14d86fc797dcc1f99ee97e2054b9c2a2e06fdbeb8de f6cdd368bf23a858d9f8c1defdceaf1b4a8de5eafc604ceccf0d285be00a a912eab66eff4d37ad2efe34853bbfd87ce09b18749b489943eecae7887b 006fb827d10191dad18466cd1f86505879310a8b171f902ea0c26a388e13 b53c700272cee2bfb47acb58247c13449c6bb9d01232c32517358f1a3de0 64d43c18f8827d53789ccf3ce2ebe78949a6abfa1a6b8414ce360a5e22af b7d1dce6f5a06182c3b984b4f9bb1a905a9d5a1483750a1de0a857cd5c06 945eb7d4a2a6bf1237f32a154fdc06d51a703d44fe052fd3c53e9e8f417b 35d1c851f9203a8997521529f21ad8498f96930aa77ebaf82ee02a57bc77 c792d9f220294b45f48ea8fd94e01cd25645d36d168923562f3fdc93cb79 dd4760da0c103c2675722d7a1b79fcb4245ed12fa0db52492c9cce58b333 cfee822812f7dca68e802c451b5cfaebac608b950386b6c58239d1c62d62 4dd5d15782fc552222cca06ddf387b373e32c3c2864c63c768350c372837 60f3515a5b0afd66c48ab522eb3e808c061f5cd6bd96cd18c9839d30508e 7d4edb88e8f11e31e10919b16b7971f06d7877a058d8a4944c84fc6caedf 3341b48b6e0d3c7b85d710e0c35f5b5053cf4b4798b3778cc28b2dc7ae0d f3a49f9f3bcd8e95d746c35c3f47d68b8aa35d97aa08e711b5fbe70d1a62 3c82541ebdc51a827d0a69e6c049087ad26f256eb7577f58ccffbccba5a9 5d093dc29464c9a38de95bc6b1853963b2deb0b57ad1248d6f1625e115ee b9510b5772aae4e3c866657db0b3bf0e0ac345e116f8d4976b770876ffe3 748c36165522991f46a36f193dd1a1c94713673c7e4c81582391b636c72d e94ce6254374f99b623e5686c13d8a8322e83e11bb0b0a896c6a8c2c4f75 6c5385cd7017f26d23f7c3ee97372c868c8c915581723bb6b76b4c3ce899 8e4fa6ca40b633dfdaa59ba902a4952da90ec4fc3cf0f2676acfa7f76f78 236fa2de10fd3545357215246bb7e527f277c28b353cc6d79dcef21bcc8f 77603cdd58a2ccddbe3a9802f941ced8e035313875319548c41992a2be93 9a17cc109426e33825ae59bcd17cb19f50d972ffcbe7d9b4b0bb095303d9 dc9d406696c2508d6ce99e11cf00f6461147e97449ed5f486d480a86d3a7 acecb7e9a945984724efc21c5079b1fd03ed803c2deafce3327d2d782771 5fd65d9506216c88b0fa26935e95c64114a51919d419038b1a7e9c1e829f bfb53275093752df19891a97f3cbf7719c1fd6cb17019a6d2d25360eca80 4c4b35172662cc4769d2b785c6c87e5a4ecce31704e59f71263b7c3caec8 acb4c7426ec25f11a0042323ee6c3eeb04284dbae2c770bc419dce79bd45 60aea41571c3b595f52560191dc7a8fbf63d413a77a0905e517441b16c2b 501ea2f9e99cc38d052679f288fdf1894542e3a66989a0090185eb2e7513 4bfa3d9147c3db8a621d9d35e37786853779e157b47f71626d6b3e633005 9159c17596c1b87fe2b4ff47ed9d78fa4c2160077276c8b58cef5dc030b4 a5d83cf257096c047fe64de307c598b815058e72d5f57df5c369e664e137 de29349e2f9dcd8c9f4eba6e765b6327d7a20dfcb20711273fd8091cba60 5c4c494248076f7e03df65a6a50164980bbbb708741e5bf6056e6f996dc0 7fff408c5b8eab8dcec315e92873228c805d4440a6470e3ee3983758dd21 1c9cecdbfaa4c9300cba00608a4b2404a3c7af017a3b7e67f39f0b51acf9 50d3e75cc7bc2b8d3480202fa958e8ee0b2405015232ee0d264c7ca02c18 ca45cb3c2de322d3eb7f00f9455db6c5b1f4e59c3e95520ec36d7d903cbb 625d70b54bf6f8255e412604bbb29fee026cc660577f91db1db4a613eeef b20cf7ae3cd89d565ac838416b01b5de4ffa5550d17fb51fbbebe21cf1d5 6038863ee931b90dec2e211ed42ba92ec244d4ce2c4ec5ca87a026992772 dc2af754fc982b94f36ea7b7bf75e0ece90cbb2a6aa1a012e8898bd679c2 3cb3827c35d5d02f0569c7aa82615d4aa67518ecf668d3b57d6ef1a80134 24ac2268ba0d9a74d58879edcf6382a89d397864940303eaec45a38304ba 8b1cb198967ae23eb81054be74b16909a405e8a7799cee3c270fe2a6dc50 bd7370b6b2c8fdb9a87d88d5d40348d3984e39c693b6f4486d994778607a 80a3122872dd65e40492107c71c3cf708a9717e9eefafbddc239c53aa964 5b711038e59c8b861b37411ab2039bedf9cfd00f08d9c5d76154427ff5dd 39878cecc5d7bfb3f1f035087185c0981f3c2139be84872ffad3408531c4 ea9387b89f5e3ec779e8850d50992dfdcf9132bc551e985943b07618ac10 d1150451f0844c0dc41d6e17eb508dc8689ec726400d5a7f6feb3cc7bce0 5f09228b7cb2c5393664d8dd9a4b96b1020ef25d70aa2d91cae93afb5f2b f0aa18ca5c599fa1a708ef35bf8f7ffec9afc1f242870d028b2b1459063b 493943ef1283829783e1010242e5cf4da39d93d506f3892936e7d6cf1124 70a521d397438733d053944cff12d6ffae8246f20618684f263715aa98e1 5d72a526383e05c23214b78338e5b476f0981d90056e6e5d0db66b1df229 8e597b2abe1d817e18beb056e65edb4234342d9600470b1420c9210419d8 34e431b82f58608c87ac361a02d0f1fe4b470a3d71e0d21bb87e1023d428 e23d596cb9e1a2184403a16e36e644bccf9bbde27290485057e62827283e 7380af786bf395b3961ba5ea469c315763fa59e0f176ef81985f38b882de 56a74d128e256d1b89939728e55a92aba21a6b7844fac1ba7bbdd8b34a18 194a2984b000380fe9f672e83efdbf276fe797a325815b0f25cc95c97a9d acf56d583486305d7c9e51a7e337d14e3b900333eb38fd93a99587da2341 b10c059c71ce080fe7533c0f059fa40e560af9c4a41a4be6fb45846ff8f7 8165e10b4ad40f264bcf5596a1e8ef8cb6ea4b1a3a5c69059ab156384367 9ecb2511a90e8898f54295649cb73d277760d8d04abacc7bcc6e777a0530 e2067ccbc08673f9c8c178f9d672ac8a15e5367f0c5651b53e75e0cfa57c 931746ae1a679c246d7c9417f1cd89dddbd1173c2f880b7b3847cbccebf9 9f7122e832d7c9bafe2b54cbaa1ed48158de3f36238b76b0e67644a28aea 996ddc006f6ac0242e4b667639e7523cbc90a0561193c1af34481c2ef402 ee43a82e1ebf4e3d601bb36b2d95cd93550d61cee7a94e72f6d30c32c8f9 1a61e964b1f66acfc3987f95d4028f116e9a9a8474aa29c1c1a984be0e39 3bdc41dcef6a6f1018db60d52024899d8eb5d55d324d73f39bfa47377b9e 15b3b06a7585589fcf52a54684173e5183367e7b0952dc4bc2767c4c6247 b1d6103e52bc7b7ea6298f454c5d97ac575f19c10acdff4e10c7d3755cfa b4200cac545269ff1d8db0d607c7ad47f40ddf257ab4e7d0750577003c13 e4941960c3dd7b0774ddac18e8abaf8f53e03cbef6d57b44f24cf821014c 064278fd51b3427593d17694b4abce81f49cbb984c5878cdf0c38d1ed7fd 99b0b9a3bd8d8ff6219588b3b8fa59d0cdd1d9b2f65122ab45e48f175746 7b9204926140e3c350c5a927a2e700173053ec35d3f1da2d7258714c97fa a857f0898917bd94625c6d1e2d77138efcaaaf517b17fe187a2212c24a88 1a2c6a647def6376ed80ae4175c5ee80921f001995b44e49f0d33dd9075a cf33bb03671c0bcc34ad5784ad1cdfed3a6d9ba103b3ddc1cc2de74dbb57 6a0277715275218cd19ca8899209125266d8bf1286f881dcc2c383749d1e 768d670f4099f7de959edfe852583183c91116012881a56a24aaf020ea45 cd5f39660debce30ac1c7b8cfc60387b1b0c3e361be612fdfa9f01b7e4b4 a18839a2c7e0e393ebc5ad9a8a4ebc316a740c1c295d9ef5f4dffa0667f9 582c0bb837b142c4cfc6b1798e9476d0631111033b8ba75a10fdc800e2ab 1e0e829632f869cfe4737be9e2800759ee0831dc7d1195eaf80555771981 dd6dc6606812d92cb8ef86447f5f6c6f626d0e265c67e52a6319189ee349 d48e49dfe6a9e98f76c414a1e3217ae0a215a17e54aa498f4ecdc50242ac c7e2322f63bb2ff2189d057e7354e32a3ed1803116176b9b9d0129930f91 9e2fec280b2c8924e49e7bb75768a2ee1da8adbed4e3589906df1b923aef 84c1bd327438b731012e69bb0d43a1842cb88bb54ea4516477f704cfeb28 6e3ea483445ad4d74586fcf32e96d366901084365f693a53c5fb532fbfe7 bc0cadc404c4985042d68dbb90a6dcda3531ee324d558a214f935cd9fcc9 a0cebe9b5fb0323f4b3820529599ef48ee068b5ace85004fea2984f0a86f 5ac9d56163bbfe1142b774148f1eb0a4dc89c3349052533a7de66729db24 41b82f8f7360111dacf69293c9b281a0534f3e9e9224a75c49a832f28b2e 497262475507b6ddfa9f01ca0a6696e3f5ac7ea68595eba0c2eb8a47813f f936d84ac1b23eca7aa2862b793ccbb0df9fdd4931bef354cec12fbf4785 59fec29f81adf4452e83963e56541d31f3691c93a50f0bba5e9552c4f2a2 3a6e53060729854a3dd71cc4308b91957db19e66aaa18fa67055a950f1c2 cff78a03bc1a588cf624696068068719afb1001c4581ee072113882d9052 b21e355d401ed8cd24d067b99e616bda5a0a5a9336fc499632b79ff2fd0d efb096ef46b75e2d4e0f48daea239719fec4d9a29818f5875fc5041a9edb d26caf0ace14cc80ba49bba59e918eb3d8f1e541aa16026585a2f72df7d8 3541816de46981fb3efd0c30e458cfad04c79421ab7c4925e23aea07f9f0 18431c790002596d26bd9663b51b699df53e4882cbc34ede88eb55045b88 9b6062e35fd1e018bce785157b85ec3b9ca6c85d4b16238275385b8285db 012d8fb7c9f5b946a41d7a0fb878ff72c39683144d8a007cff631b43748f 2d5fc690300f9bc0c837006b92ecebe0605e8c3a4a400e18ae8997d1b45f ee10068e247c647cf82c6dfbe5e881d511ffa687b7aeb78546bfd07d5f7e c242dcef4930d8aaad8c6152b6642aac325963fd147f236bb850a9966573 9d06cdbd7ca79a527dcf461e33f22bc9c5db00da2bd3dddd8c99d99793bc 98282aa8872ff96c394285d82d9419eb78b6ae37a5f519397700f75d624a 09bd255b576e955a323e784e8fc31131f003b0e3024a4f58fef2a6c04379 6201fc425482e1155e229d1b2d43ef7b0d22322b22ef5c9a1be026a1c3d3 75edaff99597e1e5477952a4e8d2acf5d014bc00dc2a272fa62b6983e27d 228881e2ef2b8b95a681cbe90c5fde16331c85222fe2a16f0a3c3000a63e 2e21666c0c119f8af89a543d37977069a5acf1556324f05204ce8cad50ff 4fb630d9cbbfc324deda584aa56a99d3a76ff55bdc2c2ea3a021361ccd4a 83c7a5e2768d210fa6de889fd48a39d679c94ec3c99a8d33ff11377da7f6 f1b71a2a05b302ecde954f26773f39ac881542f0d0969c3995c3519a8ef7 0b4220d86bf01beecc6462855e7b686e1aff1ca91fb8fd8b4a69e10ee0c2 ad94add44449506f9b6ef43641f2026eff6e605c670560c2b74706fb949a a7e8cc6a2d0d6207e457e7fd87ec1b9092dc68b9143947cc8ed14afddcbf 8fdda228a76847f96802e561f67ceefde45ae587673983fc04c96744dbaa 83f2dc838d633943c75dcb9e6410474eb27b348f26e505f0ab90878940e8 46c5e9f3c5fe8c3558c3236b1b88c405716949b8506841cabe1717474bb7 c30db91cdee33b0f844811762faec535bdcf84c1c747cef9b1fa61d2afb5 a81335bc42c06a94d7d59b7ede55bcf6f9867aee107555cdd084b7684c2c 87087475a39a9da6347be281ce5635a4d07865ba98ce26c1465b1ab0343f 49ff37b4d0ca9f3bb693d78dc3b21925cb996a038dcc172527fe57c07460 ef39c07d4396e7fa970d9f22abd21a9c794b64ad96762c7428f59a8757c3 6d6c4ffb23216195a04c2a2c2e7b10ef7193931544d782fee4b91e01119c 5553bbc6252270a8d8c56dd62d448f5ad8dc69ccb45e1f17f0aa1e445129 dd00f000005b23d38de93a3be55a4c041947f36b4e4536e307d0180553f9 2e46b743881cb5d5386c48c7d5f84c2bcd06b9c501f78c7ee61fa2351679 1fcf4db278af688a2e6010a56692ad92008497487edfe4bd5fa083fa5441 38b20d6940020887e35d46e093b71f7a04a67460dc8116b4d4839625d7ca 6959d6831cd93f81ac4ea2709036dd738364fde71113bf22ebf13dfe1642 e564701e6f0ffe7511edf03fe448c2b28c64fb7d54b94ca576e481fa56b2 b18af10c71f699b6bfd47459cde1869d0fd306bf489a6f42e5b2f05ccf55 bb6b9526973d19cb134ca7f13f1db3716f8cc21773a832568c16250b5cdb 16df24bf81d49f5b37018bd310262ea7078107868ab0216cec83cefcab1e 9f2c665a31585ca04dc01879caa79aaa5ab201b516f7052b01b16bee5606 098393b0e5d9f9e5e3f4eb20f63c958e796df41cf28839f5c62a04316487 45d7837b519f3aa36bc6c08ef040ccf53d9b6d8c0c7d1a84d707ec57a3c6 ac9a62ab37251a01a5ed40fdec6f5be6e34c6a91d058319439778a2ee5d0 363e2e1f33463c33327d05ffc0cbf08d5bc457c7230448972fb9b4d0d782 ba7dbf10d3ffef8bf5236ec16d4dd6d0d870d9d5eb5c64c9a46a4f583d4f 831fee74b0e5b33a09abfd4444929bd8f638cd72eab99cf2e9551df42768 3964a592e49d186f285258c5d5f62196a98532421d73e3495f82695feec6 e1952c562d546b28618ffaeebeff03a57f4d855021f85b0c7bc37fcc6da9 aeca099b646b99d4189609d3ff2d56422f8c37e97640293ec7c90e338088 7836f4938fbf495cac14fba5648d89282d8d49d91af73ed36581139d8bd4 2551e263e830ea3c6eb381d85c42d74c50db0ccaec03f535ade92128a016 0e811c34748309af7604919b66cd43eb5ca975302dcb6076feb6bdd6ff55 976fe990fb0ce9abb11b195403fb26e3d6c6a0de1c5be79e171a61e21f79 ee8dbe7a832519813ef6b33ea098c2c32adea219ab2aac8b093f40000995 539d1276d5f2ef84ccd099b71fe4269bdbdb6a8d59c86f7d2e3fbccf8773 d0fae97640bc1ad43cb4b992bfadfb09dbd0caaeb8cd9da264187c4f9730 0e9a6c9deed5525479e605c65ae336cbbdf4e5d7f79ad098f977285e0655 79b748feaa97f2a753e1f962fcab68d72baa8ee4ff6691c23e31bc0f3e98 1a96fb440404856ae1ab32a7205b17d411d8f21c8c93b704d07ec594422a bc368cda2b1610ce6a973f4474e12b78b532666797f5755d269772c9f540 0b3bfc6c58395d38527e2cccf29b56123f7dcef3bde5dc1dfc5b0293bb12 5085b1d2d929bc3ee84f4fad571a4991c3dee03f2db3a3097e52b1a7d5c7 3ccb6148eac62e8e36de9a71c57638c6e4d5d9ded18174e8c390e50b4a5b 913c074eeaebe390b214b3a68f02862b9a296db4b409769649e51d738cbb dfb7702e15c73c2afc6bc37ce15171f4e822cf20efe55d9f061aa43e6489 89628ff79e65932390cbb15d8e621333b18b11c3bdf96f841d7434e01ad5 01fea964a75b248a35cd9df9a37e48a1e5a09c624b93ce44f0042fa00d7f 9ee89b9f7ab785e9c718cf6e7228f743271c2c9bba17e5208b920e44e765 d99d86650eb454b0faaa112753aa1bd3a24239e9c5fc47eeb1547ac9d237 31b8dc48b9707830daec60c8d3790bba1120f7764efac542cffbcd5c05f9 510b27b2534b704ecd36c8b041fd49a96881302fff5b0163a2dd09c751d6 d6afea9170a4f4c4ab8d46e62f763fe1bda51dd1ce4a27e772f3a2869155 f762ff26b7aa6fcfa4f1292e56f03aab6322bf867e7710c34d43b5d85b45 aa68014ad7879eed051b1933e491496e3e26d9aa8b80a07bf2b94f1077e8 4a9726f08199887d66de7a307bf33c30dd9cf3da188088c03b2bad09a217 6b110db2c868b53da9a66c85737ba66c93c58a259860e294ad0191e3a72c 73f40b0bd98699aa08daf03587b78f391f3a4313c58d9f29b53c70785637 bd0c58310109c54091ab0a34cbb0c478613a7ac0fb8f0a8b4645ac966395 d8ba775262cd291136affddf01c1d83dd4eb3b59ccad18057fe7d92a8cd4 a58f22508d9fd7cf356571f701bbb23e749bddcbf8a317fda0aefd952bb1 8545610ffad3ac143d351b8db3f66293375e0e50235f0d0466932181d377 edd32a5f0ffa4e22b5a0cb4f343d9a7e4a342e9d09dff6c697630cd39718 02c277a5590b8ca94bde6b38446c794d072bbccb724d5bc208eef1b018d7 39373bb910d668882caa779c2d686081de6a2606417b54d7c20e0e7f7226 48d893e4edbae8f00d6a6da3712f91ae860c756d1127d133ab828e9d8002 3b50b162c5a1c5cdf70ccb3fdd7ea060ed20838be1e50c4094c9e79e1a01 87cdf780caf45a725964f004253e034c5be46bbf89d94631f1a33baa35b8 4fa2a9d08481c6674126cd96ed05dce48bda069d902d6836d5dfba701dc0 f98a863e64f0e312145d8dc0b77f25b43aec729a1243b45b08ca228dd610 1caa2ac5adcc8eff84a4ca3f254176c2cc711ee6c273835d0fd3528eca2a 976b88e51fe347fdb60f32370b66d338931d6581630ed586f349c638960c 31ae4204e89521a96e1219e696b913deb2aab7a3b022d06f34fdfcb810a0 4e60a4febe284c2f063e0ae9edf87704921ccfa193bdc912b747e1357006 6223a49f1f6e2af0d4d65da04ca876ff7a462ffc9c0ba2cc545c3bd36dbe 762f32b2d6be5867c59f479195c92440dc165098b74ea5c3ad93cdf2d410 b04c16bc7801e7956f4e5107450787aa592493171c3628e6b8f49d4f8429 eb98dc52ef025f001387bc1a7093f7a99f10b5d2d7dd8bbb393bf6e56f08 f4f7fa1a343f220d5a1eae7168c74d41be1dc1a83bd65b72b982f4f7b34f 24f97f9ec9a91011064031facff2a14921a32024385f4e061cd07d152e74 1bf97156d951a342488fa7f5ef934ccad13e2753a0ab7a1f565c2f7f6b34 9df03bbc25bbd972a9adf809bb5c5048a8ccef9297b2ed3324d18867f293 cc66e88b3a39d107b610dfe79a3b4e83a96d3d52a17fe8a62c9fdd271130 148366942c9ce57558d023da5f7501319ebfa33de9e6d1e76d7c20db8a09 b657839da99f3d8143f1ee6253a3295c9651fa4366547893c2dc7abcbf4b b7609de5d001e0a36d9ffbe01f7d0903b3208ae8547e2e5f14ec1af4c253 5ca8f4ea37e3f3ce172c7a1e8308995b1cc23e6e81190246bcab6e755bf8 68d449bb02a2aa87c44c9cc0f571adc72547ceecbe104bb274b8ac16dcb7 5d5f458d356466b921acdeeae384e2eb1df6ef393b41b9747f0a4faeb4af 1928d9ad6fb7e06fdc621e4c6fc98cfb43f88584bd55d9b97cc9549093ed e586912161931162b1b1d52d0443260daba02af2b4432100d5506546013d a703573fa8013685cc798ce501960093ded713ffccf89ca2b9106390198c 29a00864108cdcc1984a8bab53919028c01b26ecc7925e38cbe6cca8978e e21c2b06e7b3e48fba978e2a7d186e563c088f84aa23178b60e4729ee87d 67b1091f3b6973676c1cbfe6530eb773c62e2c2497014ab0e8b71a1f4e86 a378aa26591511bee3cf3d64c94848582e1354e1605b6457823f2c5e640a d3802946bb2e7e8e594e8c04b430c2385dd40746ce8534f50842e74d7115 f3db0c72d1c9c607c6573b094aeb73b7a79876cffc3e2f8c9feaaa07d3bf ce05b61f7749a8793be90ccceca2d7077f25e899d3331fe161a7e86c8424 95d584c6e4a0880b2951d8a13b88c4672080a0b1be36bf47c3ace7288cfe 41a8c1baa6f0814a947fbd6b3aa72b6c73a8c578ca51ccc96f2352316c46 7bb960e981f2b6485bfb44b577e71efda16e7405954bc7c9f0759f5a9f1e bcd2fa9cc9648d5831a68887f41b15081a204c24b4b992a231def9e698d4 c3a25b6f5474f5be6a601f2d337a58a0d21ff37fd91eb86d1d738893a03a 69f0cd743f611cdffe69db2c6ed0e4611d56f803bb0dc06e7fe85a303839 612707647b1be9faf8d684122ca9e5cb8bde2936d3f4ff254d31529d7538 bbd4d35539489f9e7316f24214b996bcdcf1818e749a71cf0e8845aa1e2a 58aa62a48e02ba4564625d20aa220ee719608521d7d7a7fca0bd8904a401 9819d371f3f59d46c1354e5fc1a6e5f79b20cf4aca2bf0f2de73da193a6f 9acbfe0b4731c4bcebe6d96fe822965de965232282a3a130361f188b3aab da95a8a2790d9240be008b6a6de4bbfcada05b6786b9bb8e0dfa0c30043a 3b07ed46277e07b9808422c8ed16758b9c396f4ea929d769785b2c9568e5 70a83b989b25ce200f1727d41e2b702e7f88f1784f4c83fa60a74eb26b2d a95126e508ed519a61cc151db6804f61826c5f86d8fa89d06e526fed97a0 db88edb432ff32c1acc9b622eedf601081af7b963c9cfc1d13e4a9c74fea 0a1c8e3d8653cd92a944d4ca6b0d306619afd503506d77732d6514f604be 4610c2560931bde0b40939bc1d126b0e97f72ae1b4a9252123b54f7a27e0 cfa4425b4546526fd741ca77952b10d13e0ac2e32006a903808ff0cd013f 936238c74cc75fd915244c56a8412f37f0134840347699508d6f3d7f3203 a25b7c70100719582cd588590ee34b3ab13e255b613a6d00386a0104cc5e d2c646f09a88888d3751651d5646c5227a3c80e8da1b0a331121dd2429f1 f4775d30564dff47d01bbe2c6c72ce4d1fd9a2077c04d2b0274b8916f6a9 d1a4a6964a534f47cf241d5a8e34b23f85be9acffc2fea961f277539f215 f8728d6788f67beaf45502839bcf23d8763c3949352f00c579a9a4fc408e c625e310dae61512dfe6844e82d36a2f81709e1f05b38ae9c222ed62c961 ee63593ced7aaf73ce2ed3667740c77b309b93eefe1b4ba65d48575a66be 86743dc9e5d3c2ff418d11f7f211b86e827ee1dfc3613e7498030f070505 24536d1f8a94ddb6698be7b963c55cb3f74b676cd815a7b3df4b1a0ea2be 1b0b9a11ffbfd5b1fa49668aee14629316af436a0821c20beef7b3480847 934a99f6d85b68f4ddf8859a754e009428af89a90d1852c220a607ff0806 e8080726edc94d691d214b4521c147c4273aebddbb4a697ef16448cd9b2f c95293305858decfd406b89b9f3fdae2ac579e80cf321ebae5701fb2f7ca d8ed04b4a63115886d45d6120f69aef1a21d80ad3c2d35d2899f1902242b 96cd349e0aaada40f7a11282b6b52bdd97708e58dc5e2d22d1153e5fa3f3 b300bcdfaf98dec2f4e3c82a1c85f985735f39874f557579f422664e07cb e19da680efb0fc82c323ec5c4644c51709ac8d674608a8043c91e6c7988d 430f10ba6ce1fc7fc0604fcd8f723895250aec36cc35b3fa14fe2a0d2409 5dcc30b2093f2298f5f0a97676a0be66c3dc9adacfe2fc0f721a20e945af c1096a619075d5e9a264c796ec6c90ef1aeea8dc089b44ffc13d27cb2370 070a52d4416c53f364393e46edd7ede00799960ce6e0d57e4909e88add64 bdd2b0ebe2d73fa6acf8b40280daa0637e705c65aabd523b8815f22f23e9 ff81e7829c7e4bc980c9143aebe1a04dc0d253396bbb7268bd5aeea356b6 10d5dcee03135e00ae34388251f31714a1c40e182652c48cda2211a22cb6 f02490e69a44cecb169754c53b16028d352e0119f5d5fae0bd7ea1cda647 12a6147374b64244e21e9ec9f0d1381ad22d5b6212b26c3f9aa5f6045f25 dd9f5eb4489ea39b1945331ac70510c5752557de21d0a6cfc1eb10a98fa8 67b76da6e4249469f591fd154d39e89364a43db007aa0d7a911cfae6ce2b 557997fbc44f55a27f622bd7b8b10ec9f5d10f2649a646fd964ae1b111b3 5b46a252c4dee44e7426eb5739f24e8a390694597db3a1fe7800c97e5955 8322f0e49a0cce2ad94b1e2d1026afa771723e3f523916f55ed866c9fb4a 2f759651c613a2cff362028cdf9d38f05d4c7c6024c533e930b64b099fb1 af04b01f5fb9ca6867e6eff55a772c5391831059987e10cbf987e3f378e0 1329f73d54dc0484177d3c3c06f67397955ff1ca4ef8ad1606b70455255d 631a7d6eb92bfdba14a0ff28b2ace7e81ad666ea9b3a0f5a6ba3b5dfe350 44fa4b3d8ed956009c60e98cc132f2e84967f4a98a67b336d5ee7caf7dd1 f74d1fa08619941361fa7312cf225d89cef97e864c8369eafab94d97f056 5505d825972b754f6729596eea91210b75dd8f645382ace36de60819a02b 3b48dd00f5485f9264f9fa926d732e2c267b0be8ca98526f124f97efdb86 132c5ef16b103908172fc51f286ffe45ff253512e0033f037ff182ba536a 9eb2df2d1db257d9c86c46e1b002fb32ac70ca9462e6eb48994752cebce3 9f08abd4f4b0889283e55500702185a841e328 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/fonts/Courier-BoldOblique.pfa0100664000212600000240000031011407477306250017364 0ustar mikeuser%!PS-AdobeFont-1.0: Courier-BoldOblique 1.05 %%CreationDate: Wed Dec 22 1999 % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development % (URW)++,Copyright 1999 by (URW)++ Design & Development % See the file COPYING (GNU General Public License) for license conditions. % As a special exception, permission is granted to include this font % program in a Postscript or PDF file that consists of a document that % contains text to be displayed or printed using this font, regardless % of the conditions or license applying to the document itself. 12 dict begin /FontInfo 10 dict dup begin /version (1.05) readonly def /Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file COPYING (GNU General Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def /Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def /FullName (Courier Bold Oblique) readonly def /FamilyName (Courier) readonly def /Weight (Bold) readonly def /ItalicAngle -12.0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Courier-BoldOblique def /PaintType 0 def /WMode 0 def /FontBBox {-61 -278 840 871} readonly def /FontType 1 def /FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def /Encoding StandardEncoding def /UniqueID 5020948 def currentdict end currentfile eexec e98d09d760a3c22cf119f9dc699a22c35b5b35ed6aa23593c76d54cabb5e 942bf7d6dd84f1664b89699c74b472de9f8e6df925f6c4f204e9f1c639b4 dba988ed2ac419ff2b2bde605b8ee3264edd66412d4f21c64ac522bdfc7c 5502f9c3f3e5592b3b2093d33c9bfaedd2d49e89aabaa832e23f062e91a2 5032519d1868816e44b4e0747795003d7930299d6e1e2a5bfe0d595dc97e 140989ce81d8d7f852ff9cdc7a1b1b598c69131dee005b415805a16d8a12 3e6a2f9dbf9f3f34a085f42fe63acd931cd846b57d30dbe2d6b4b42ba7b3 841204cf185aaeea797b0d16df1d60060bebe83fbdd4931af1827b449bef 2eab8879ebefe5590120effb8f783be00e602fa76e53ee4e20e9a55189be e40ecb842d3838dcc54fbf7423229ad68b98e033813b1a3e460f4a9baea1 8760d05d85984b0b3e161f130d92ab90a1f47416b3f21d7797d284422bbf 3f185bff2b2de126046d090be44f9a5d8e6c800defd3a53944fff17566aa b69c8f5e58cd7e26c105bb2ca8ac07b6ff104375a98e23e4ef5f370311ee aa1954169cdec1a823b51f1da93e50a6c032630f0ed2f0109824f7aeb6b3 850ec9d1c2a9bee7dbd8c787f78a9402f96c7fd756f9c63151ca0f742b8a 1ee50d127ea8605c1c1fe194833218e91e06261cbf154e7ce4cecbb941d7 659f6da4bd998df9fd184e6f6cb0583c8ba18a7d26c9e8cda7f79784f053 243684693700a482a8f2182c9142114f25533cbf9ba2b43d833aa0fc1d7a 95ee86cdb19921b4e27b487e2e353c8b942bfdcd06974b8115fa20291f25 71fa63555110b9fd8ee1bc9467ebdcd4145b372ccad7e9f93460449f2433 1a6030294c172bc918b1266271e8c39e52850d83d2a78d8fd2636d3eb927 7275f14498245fdf262d54ab22c919876d3ab407f07fec8e23d28acb2d3d 413757ed4fbaf2d03dbaaee70345f62672a238589a03b28b03a3a1ab6b3b 970d28d2f747facb07bef7e8cbc0a847898f00e6a27320cf51db2e143935 f16e2c6da9d1eb5481f6e75852c3bc7cbdbbdeb5b27a299e1a4003b08965 6a96de26fb54d3fde40b8dd64d01e330da29486b752890a2e0802fc871ca 86cb8eb4037a72fe7350e8a87bdcaeaf182333a6bb929b7d202bd5e4d1ac 9ed69d15f816e39d45089dbd9ed2340302f639496d60181c00c3c8401715 85c34d9791fcf040f1285874367e125be582088c01dcf773775039237da5 33e679fe7dfb9b7221b04f2d69add19ecfda0b94bf53dc389fd0666e7fc2 92383995518fb78173248d9ee7f0fe79ca89ad014a1916da267aee3ce701 055bc88c4cc0053d8d7e09ca072a04f15b1871a3c1113b29df7fa0c1a608 8ddb6b2f97e03d829f6de8fb1c51d4e3448730fc94af5d62b69e2afb843a e2a8b12d5046e7bfe9fbfc2404bc6232e352b25a128e8a501d6fecf02571 9e1e1ad7890b40ffffb006dcd42a65402df37d8b2b91ccff1bed30b8e192 b5f2f53d263ade0798f2fc94d19693734b16ab45ae0d000dee662b209db9 3c541fda6d822a4e2349f3fd199a654bb931cc36f56bb2f5ec563398d385 459f964fd343d9b253db726e9d16fb240a84f39bddb76aa7edbaecc0124c 253cdce59227216a0c74cef8e44ea7fc0dda7433a3b0fa92a0f6a00c43de f2f079668ed3e9929056dc1185dd78c663097fe8153aba6410dce819eb69 d06da03fae4798505301235d725ab2601d935d80daef960061a6c420a696 a2a1096619f8f0894c659a61c4076664e0ff1e8542acef3376b8e2b48975 f8f546b1ca4ce7bc9e31fab84df061fb7452459c6c7b68616c8c3c53d4d7 5830e418fa8cf6e0f25ecf30a3c9048d6635ad9e9f4ff04ab84c2ca1b4da a9278de5fd299872b1e57dd7de2478a2b21b2eb96896ba53690a7be8a0c1 2a8e020dec6f3fc741998fce007033f9959c1328b2785c1a8b26351bc740 40b30fa99c4c8c7bd3c52aaf8c7ddbfb0dad72d8953e25ad54afc3b53f15 25a4bbb12ea7ecd712b1a4029742985a2d57223762d6d83688457515d90c a3ffe21d9099979e4ebc79bfac708da0adc420c676ad5971288aaf2b8dac 4a74715cfc76b1e6d52501e0f776b65065458e63e16dc2c6d6ce18adc8ba 94130d2a90780a127c9b3d878e9426ce14967f8e65e4bfd9f47582ef2c37 c361c1008db7fe245a6dd6c5bf8a84ccca05cd96cd1aeae072c09856b336 563e66415b727d58d62e9dcb7382c21bc7e4503c30346ce2bcf4baa2c87b 70f1a713ea26fd7793b114e3b77104d5f1c5ee8c282bc01e591c068973f8 53c5788119d0cf53ae213c1770abdb1cf3fbf80a3e77f7db59f9302ea55b bb16e9f775d04f3242cad88e2a1cece807db59daec7cf7e89cccf7360ec6 11deccfd50431d67fbe30e80843ab28cc0e3e9e1374c24c15567453e8e92 8e7305fe9eeab4e3c8b1bd92140bb0d4d40f80bce763c25bb90f35a6e907 759e574c7e9d342a2c78b1b78b68cd9301075e6aa6583a4e18528bf066bc 84375210a973dd1a60a693b45eff6c51ff890946ad331ac05ef80bba6084 24a582968548d1c5640cb8285786fde01cf8fb15c5b821c5577f7abe9683 c164ba9a691906709ac46d664b833aa7fe5a3fadb67ad3bd82ae43087ce7 0212b469cea0e28bfccec30496f803d3ec1fca366ca925ba3f20be9c34d8 2d0d7215199e829f4d0d7b4e9630879da68ca05161e431b36510804d97ab c1891cb76ca24bfb7a897835e67f2c2ad7d0971dbbd6814eb6542f7e4fa3 06fc97a058406098c53564efbf4689dc448fb69080a08a54c3602b55a681 09d3ad3fb83eeda6ddeda6ddea4ea424553ec22fbddef65254488f91ad4e d38ef195c418428eea7fe850c62dbac2f9e3c9cfc86542153d0d5caf94c7 89160cee1fc009d0ce68951a7ae1b666e4abbe82a1c6a3e95859352e8400 e1f33c55626a04c3818aa8a917c3f5755e2eebcb9f3151e2a02339bde457 4d1a65af690685ad8dc4a64029ea5bc1ea733546d0b0f8871cbb56aac6d1 f2637c420a5cece2e4229d4473af7ab23a7f6a33514ebba57453ae38d6e9 3bd8183507acdb9547a6fc5cc68cc72575bdbf27db2a2ad634657dbb1e1c 4eefd59b0127998b7b12269a61ab02990a59e7c8ac9ab84d07c9de30bb68 4b29637429604a9f02d9d8923ee27f4e0680bab37e3eb4220de2e271738a 05c3333f07d04441a4c77e5cb0fedd062f3d0c93d0267644f56b21b1efda d3b65e8cc0d2cc526459cf239119f0da1bfdd81f7a2fc15de8658ceac01f a7f87e6028a8f25ce711f2706842981edea8c667f98b2e1a446398ee1aaf 311aa911ed16df089193bb58614df7bf5963112fc14c00dd188fcd6ffda5 12dc8fd71c300adc8661af41cffb7f70ba702dfadd1a701c1e74abd07e80 f9314c3ea606aca7574f4d1dddeb4b3508c78cbb376677db4830435894a6 01c8b3c79fdb04aa048d7e0e5ae3a5db490459b142668f8481262e3d49ea ebaa8637ce0211735cfd5bf298bc2274a35577b95bd69dc5af099f64f3c1 1d64d6457d9dadf22d52f14a50d7d0d87b2db6b1e19224f72030888e2441 0f04c89aad7ef45574eef2036e3e9e798d02102f63c6b8bb018a915e5af6 2ab7bc7db9b4da2809bdbe25e57516e8d188e19868bd2ae02af609eeda35 8829689f61d8115dcae38bcd8ef8615d562a83cffe5e97e2f017e0b78957 56986913e1bf885786e5543c46671f6325f04d7a78c53af15910e9c0fd27 af28dfcd149d285f44c14b6f1633da9ddfe683d7139c9f5baf89a154d46c 6e4d672452a43cd6a55bd1f27c4a3ff0d14a86193ffad59c5b31ad8807da 065a8190de638c984b971d580a7cc9561b4ff039a2705f6bea4b53403629 0246bf9fd12d766dbce0ddb5ad42fd48b82f4841144e5b06e3d889c0c7cb bdb2cc2b353c392c7d740446b36a8126503c93150922d97e926ce96a20e3 e698ea1972e36eda0f9aa7693c53cc2994a16db61e5e4316b0f882afbb43 b8ae94f7f28eb7eabee5f9f3364ffc1aa9342d1777427796db0bf7d7bad7 1ee2f4e209dbb15254391987fa678905f233a241e77f26a42a1e2f66186e 1d048a94be60cfbf61d5c5bb361dd4d1c92833cad203c6dfbfc2453c885b bf4683a234fa558bbef71c2fe0f0e8ccd545cc3175a31bc100dd087e7321 932c2779c3b008afdc61117d6a1661ca320cb34770f4d1b490722ce19fe3 698da34ce35b1345951ad982aec69a78279dc4522edcbb01f9cc4b8cc52f 9267b527fe427885d67cb62f2fc7709de4ad29c7e6e1aa6dce99a30ca2fc fc6c523c90cce6062e25a581fadb1b892cbf35eb20abc4068a73be3488ae a12b50635b70cb66d9ab795c487a9d76c2b01ccf27c4df1007ad3b68e3c1 367def56f2380db21da81a46d9189fecef680f15d22b30ba3596e4fab3a9 188f0f11bac53df5b71f454996c9613b3edd464d9c9e9844cd357afb858b fc28575ba3e350e88bba2a045be02edc0a24bc3ff21f98e318d84cf23ba7 2931aa278ee21a479375e0d50193d8f8aadfe254619cfd825a559f9639f1 98ceb491bad5520f1199332ea0cfaa2bcb8faa7d00f97fdc6ba2e11f15d3 00a9676a12f0e451f92d2ed547e2df0d5b8bbd40bb5aa2df66ffbe68537e 823da67c29361d9c89c1fd191d9bab91309eff5e0c5758d9ea0b9b1997cc 101f7db3788bd9ff8e01e1cf1ba032ec90dd5952858726df33cfb6a00b25 497cd5144edaf481490f26c802a0a3d2e9e8114f23b3f0ff23fee24d1aad bc36492e0edfabec0d4fa57c034c47d2e8acb5e9ff5ec486da2ac3ed51a3 b36933d502044bcec7caeebd3857d383ddc28f976322aa26315e3fd7779a 5031ab41ef0efbb295afe066e7c1e8083671e51628ec799a549bde48a502 f879f1361af8c177b122fe8eac38668d8882a46e7d20587bd561b34486da d36c2915c24fc446d2bbc41e256af4ea7edd28914a0191ee4116961f339b b85bdd38c1417669b345d46f6b6ea2e3209812ac61d080731d0dc89623c9 a28566a726a6665a05c70c7bd2e1e757c0a03bf89be801063e40d6b64927 9cf4fcce655cc6cb2a2d95c846d6048853d654286d5c2c2d8eea94fefb67 62fc17cd93ee1fbac2dffef877c74bdace7163b654982d864b688139dbf4 7c7ad4f38cdab42bca53eea14d4262da8328b75cc8a342570c7303c053b4 c507ec2e3ccd2ca8def551ebccc4f6fb925ba2ac8f7cafbed0b0bfae20a2 7eeccedaf790eb9052fcb6a254a3ed51374c9255cb4448f99e418770987a 192802766417dbf6929fed937bb340568e826277e8dc38f4dced644e23b8 f298b7505b11b37bff8864a718821d517dc7af2d9baa66195e7beb2a6cf3 0a20cb7a7281c13b1e95396706eb3d588f93d2172dc5d01658cc2a46228f 2f6457ae884e11815930e90de7ef66ec7e56d539a41b7390b4c13b29cd54 b43e04ef1076d442abd41bad91f6bd2b5236669e5f0b83375a363db705ac d528803e445b2032f410a6aa9bfcc1c704d9b9364dc7ed9fb34c3cbc291c 1a6948cbe72bd0b860f43bd43ffcab6c190a94559830786a58ebeb4b8867 73a24cef543b06b9def306e868dfb69f80dd18b077606efaa288f3a5fcc5 ad3dd1d1a38e22e8abee50a7a6c5cb4407cb9dc339fc04ffdad6e48185bb e2e396fe1c39860f942bc50aa4ccdb02e5f961f8441dae54353169cf2086 74a99eaef76c99c4ac8a6c0c74508c7e47702ec17f90e40247493ac906f2 88deab608ff6a5e6efa260e04852e7dbc79cadc19ae8bf33bde20f7bdd11 c600e8369e0da03b877cb4a08f719102d3c3f2f58ab4b0a3afc2a91090bf 6aa5ea74ac07cf30503cf515a1bed7d594bfecbf6fa5cc4361279f607cbc 7ace2224ae4fdb898397c500631e6f2bfc537f457f863e9d8ea51534adac d7a1ea08f44d8ae882eda411b07f25abed54fc52843fefe2fe03c7bc2cfc c95eada5276315bd138397102f056529ec7f3e12add6a290cc96dac9a467 8788c06355c623059485221c5f0321533cfd004b4fd79c4792086d64588c 2abdc034771fd02c7c42c5e14c7622cfb21934ce02113ebfe71c9e3614e7 2f1cdebd4e604e67094e5694129704a229d205f116b43c1c76cbed409e1d 210ef1a405f70f61c30b24afc073a3a5b822eb217db46188767fe33ad18e 9b0e59456db4d33adc0f189ba48649e84d6c099bbec78c24f48704c6a934 ddb1a96e5866f389f03b3635758a9dff6f639bc64561a5ab17aa3f1b4bdf b0c0059d33e04946e9a5da4de3fd55107f9da9a971ddb14da8f37572e852 b554db6a88806f4661b0ae234234e15b99a6c416ab21d368df2d1ca65e9a 3fb736da74068843220d91631b57d7b00fcf5f246ca92bb8389d951b9baf 507087226da9b5306277be1f528f03dc61168113ee5647a72cdd686c74d7 2e13a077c406eb58894c571ec9d58c73a4482c30022ae383dabb4415de7e 758ad9f69244eabfe52e8be1e1429c1ae59b31fc24a540a31b9114abb675 8c43096e6fa3e714f7c2a423a671dd42d56a5303228f6823d5ba62e1adec 028b00c438969c2ed5c1c25b9e8f2b5a69f89c9bfe8bbf50c4fc6bef8c8b b7d6f3b4858dc52c5a8a90e5b17dfbabfa38eaf53f5171ac6e29af9a64c1 3d676edb7fe8555661bf426b71fb80f984a37708965e7198133d64ba3eb4 65988e71f5910ec10b0e3db681e7ecbac9bd9991e6bed1c3c75a8a0d9806 76dd592bda679a37cfee4d4df2fa84e01c98500771cdefd3e5d7c8fe5435 e39056c032e5f4994c8ef1f5799ca70a3b3312679b2daeb33afb89252468 67f710a7ed78aff3298bdfd5bbf5f430c9c159c56d05c65ef4404f4c5255 1ebd7ce648ad2a44b6bef6d18ebfeb550296c20bdae04628743d7ffaffcb 8d473eb871b6fb4ed94c8cbbb03dd69b1f5bb4050ab4f0920e88ac9ead11 4bc532dab69814f5c002004a959ca630bdb063be03bc0d35732aa580237a 055ebae9a00ca10db283f6e19399d9fb9bd66c86253bd0d3dc730b5fc898 bfa550885c4e3cbd6b72f43b9e2a0b1d362d630167d52695f07752052a37 b6552aa290d1e73023bb66a4ae1506a3c9a0dce0a58cea5623686322a8fe 6e88f218020125257284f152ccee92313428eb653355437459e15ad374e6 86aca66e737fdfb7c287bea41420019b69b6a30d0a0c65b6d4b0608aaf9a b456e564a8ca2dbeed7ee6ba9c4ab1066ca03c4e8acc36b58dd6d7ccccd3 cd58e6d0bd984c5b3fede36297d9787a7bf16a899f05b2eecd9896946ca2 a3d857d8a83257866aed94fb753b65a89b976561cb05540ff9738ce0c2d1 84224882b315c1ca09860d6f04d116b7e7605eb04496fe7df29c9c4f98fa fd33b21b302228670549bd5d89433c05906f48a1d4c31497285ea9a759d2 7bb39afdcfdc9cfbbf7d2c5de03ce66f5217738826e365ea2e28a53d2635 a33caeb8ae66297824d8fd7cf7cf7c51d000dc0982f064c8c397b385e83d 2cf5b41e84f1261b101b77d85c908712dd1adc5f6682c94370b360d245d7 655e10642367ac53a52c23a1d840a0072e0f960de20391d1363a86f22c82 559eeb01e95e7ca605528ea81a47d7a9c43a2cb63d8350829ef0c260a2f2 0f5a75965eeabc20b39b8fe45438406736152d6a118f2aff6abc2e97a7aa dbccea9970261680af87fcc02a68b9d95d6b04a7d3e83600d77acce0fb16 23841695ff1dd207d1fa8d89411690ae22f99e8021e075d1ff1f90f7809e b1dd8873e8fda2c8451df3f6c5d12cb930472b04c55ebaf709d727b64cd2 49bee11f10f509856a1f63351fa4850bbe42c8f06c15605fd3473aab9931 7b8b2a2552443b0e331d9f0e9d91a9ee1f6f67a0d65d9f2ac166c4f38050 92b7f7e569855a58a71606aaecc7283757a69cf37cd61894eae10209a69c d3d10c3f37287851e0b6fc5784c0618c7e155d2d622b23f00abfd601e436 1ec59a0575f6f85a7d90f83815fc3482954b8cf71966c47f95305ee3553c ac77ce96e7c33f2696c49389ff0abfc865d7edaf368dd7871ba72a097446 fe8db83789cc43b31a74e997fd7edf298c10d61cc0976e7b41a7a41d83ba 890a68e6cee7d79493369ef2d8812a1ced1880a8fd4765097539a7cf1ed1 e1ca04bf92b714b6c71f406733e7452c826c5ac226dc16a18a9de3ddf126 bc419642f9e1fd36d162ce7832c85b5558863d262855fd6267a154211c96 73670fcb8bb9354820650f25ac9fb6e636833211e9d41c794c2a6c21d59c 53f7bf5f264f0ceb82632679bd0a0d598f69fb3e983597014e2986b0d9f6 88908a43eeac604bcf9a0b3ca60aba155f4a03565ac9f9fcc5611fbf0597 084431d37d97a9152e517ef0f6ac30c7af14ca490b4c76c3a8c8403611f2 4a2714bbf952a4ef7767518bf0b69737b65b7b6aea2d68acb1f82c5e966b e6ab8bb38ab1823775bb35d60b1ec01e1a956e75ad8ff63e90d7c3a09798 cb1ac0e1235742753c4f0ffaed9d9912d6b9ba310172a100c2e8daded966 84ca97ad4b0285760e541bd121493403ac952c9f148a4be07a857fbcfa93 ec60b19d89d9f437a22fb9eb16595efae7bfe2fbe62d3273bab8ed6c8518 8864e5e2293818bab1864d85aaed9e32cbfcaa68dac5b52db3bd943c70ac a81c1720ac0428fea9aea324213166215542b68948f41273af3e7985087e 727e13934fb13782e7191cc062832406a8bc38c576b5d96c3ff125fb925d 71f217d7e60775c0c636601937b7b5d7bb35b6ae08f1745a1f7b42dd3f3d c1599a2b89760af234d0ca557df5f3be13d9e7cedd2c3e9827f29f4667e4 a55e8bac85bacf33716f7354ea6b96776c26bf74f8c6dc18814103cf416c 82b2226785db86e66edde45da8e5aa738934d084ed3f8bab45c5a46940ed d326106ee1aa6c8b240a98f1ec8284bcac022fefbe973885a2c5fe025a44 8ef2ec64c57ac06998aaf24f702b70ead862f4327467dc5558b521b5a475 fae859534d2deff36b8ff289c9c055076dbe472f83389d74306aa635a7d3 738f09005fa73bd903a93fa98f5ada485a644a115bed74a7fc0c90febce2 2ac7ce0ad8e64143301a671e980ac335a90fa735172d9843f65e4c0f267f 49697564f842ce349ddaac386b317222a0136521c6ecae276b63beb2c192 7d04886178ec3ed9783ddf414ee134d8b14e923ffe1e5a4f1e267e7553e3 b021ee27e536bd4963c69455318e5c1deda0bb4faf814cd4998a6a4a7034 ef0da8c64f30ef18c6ab164e6223233e6183419f53a81d9221a9643c528d a4843c88531a41b02e710927b30c748ed2eec921bf1caeae0d4856f3585a 232ef7b6df214461bc60013d432cab8b6f17148d0efbf763d695d94ca94c 426c5ab28c18b869579cac5a728c8dc94ad33710040a95a9ea70e953de9f 45c0a320ada611ccd65ab7ef6423e70bbdc1ae898c9cb50278b5ac3b3f79 03f6f5aa9a634b5bd103287cf2b25a4e52e70e7e762f00bf3e68dd39588a 7e9a38fc072a96812c8c517eead56f3610584686ce912505d5fa81cc1de9 5c7b9c96c1c73ea76970b2c343ca86530e7d1bec56f0bc4307c6a4aad326 ad3296971877a629480afa1a9b602a6820f21c6520bc9cdefc01a7c48db7 9caff6cfcc2b9f0bca69d41125476f2d372e1c8b6b499dab943e1130a764 6dd17f6ebae2be1fad75784b5006f2d713ae30a4cbabcd50d0da9afa4cf3 380358e575b769c6228b3874430db68aa0411e11621871d357e25bc39947 e2573cc68bfc532ccf26068391dc516928f8e732d208e5482ad3c73e255d 1ae8a93700962a56c0f83abe63089f2c9c6c42162729d74dfe84bf720206 d42d82d2022df238182cd33dc4bc0013c030a92921c4f943cc8f1342f35a c1ddd2a6ff37b92ce6c953a9788ee8c4ca60328c76fc37df3b5cbfb7bee8 d1a0f5934e353b329ec69b9100c41f52a03e80bf3fae5190af63177bccee ab2b445dff1b0cfa372020c89ffe21108166e6cb3383592ba4043c32386e 17ab84d59a463230a1e3bdb428f3a0624cb02eda2fdbcf6b106b72d9a33f 0bf20ef7e46544894c0f958d9d21a5beaa95dc9ca8b3afd30398861d41e8 d1f0523ecff60dc3995adf84a464da4611c6f4567f174f93c689ab72cd38 c921577a0a137281055c5b8bbddb702dcae5533508124f62c6b6ae947ef8 88df84400b91f15d2d22af9f36860e8efd8d31cd1d507c2a93481b522e32 f8063f81f68ece985c35ecb0d87ccda2bfda49a7451bf83f4ffb45db63b6 715d4e11614e0b5add3f90137968abb33945a53679c4a375c64a27e772f3 a28691c5064b133519aa12970938c3bc47260d8d3b1e06bf6a393015e369 6db909ea8a80ef0437592e881060be810af96fc113da386ba760f5df40fa 219e14a11ba6a5bc7d6c54abf59e71f3e8eb5eb02f088194ac3a02de6b89 bfd576826b14e22534251f63f89f4ca05ab6c728748adffd02e6b21d2197 e87e0acf1c081b65539083cee95a47e26dd8f848c24225756d9b2502e5fc f4820176f519e1feb87549f96a0038b797806874d67631b341dccf5a8414 e86578839d7ec32968c57e2b70387b4f1ba21197ac8df1cac6175ef0a6f4 6865c8acbbeb12abfb83d34f4b525eacc12d2733c29df3cc4a28a7e03092 2609e0398565ffa55b0118a904a4cb0fed5af585c938a809e1573f63d829 1bcfaac2bb1dec564a94d390223697323ba9d58ac74d28e37032af6f24f6 076ce4e919b7b85679e228c7432230a85d3505d6f659be33b4697e4c0b6b 6ee20a512adc3a1d0276c069e46b8b68e81e4893fcf91c64b84e631e92a5 2ba97daeccf4c352a778225965f29aca689f74c1575a50c3fe6e90be0e1d b16a6e473d679e5ad5f422bfb0a4baf02981b0a140a35021d2a93c450516 a8211e62f1345423ac48c167e7cd60932499251bb8db8190c0bf8290f09c 1954fef141cbd5703e9176d347363ea768b701a40dc768d5535e1860612b 84198effd00aa7bc09f3067a716b24dde04d30b73fc9fb783515c62d0391 c82cf8b3bf0b79962db0bbb699295f324f69095f1a43083d3f7436a5f496 50bafb86d2d6adee2c9753dfbec512bdc51ef2549ecf376ec05f6b3aa309 d9c79be20c359ddce0f1bf4f1277de8564a22024e28822e734770c717f70 c72bc399faf5d8b6805c3a7c6bade9f16d37d5e7eda4d7576a45a9ada1e9 996a994022b777be0a1c6d9cb58b0987319dee76e0d3709794c05d15ad4a ef240b02cdba3dd5ad38ae5bcb9c0df2342b7277a0e241aa5dc4b7c0b5d6 c66ae3c81cc758d9071c779f714f328befff3ebe0c7e7e6c4eeb16c27585 a8b22d6791b34d4e2eb9c80ad925469b03706d9996020e298e930190eb9a 30f56a62389fb49b00d1f91a6af2fa86d85fab4f9b89dbd076a0364053e7 1a913c88756e305450c4a820c87323e40a615b7158d89312f8472673ce23 728aaed24d04baee21591aee77258e573f765c432d1cd4221a7ce52339b7 ba59a1ac2bacf152fbec0158e7876d4120137695a8beadb58a100763a5ed 959b9ca89f481d9d9e226f7b609a599b30a6a4694bc166eefff954e187d5 3987868e4d9f1112388eb12b9e5017e3566801fb27a0101227849d150a64 fbb6104ec6d1e7c354a1baf425c583fc47dbdb958b8f5eb653b5a045fef9 9279a4a76d0948121f4d37c0343109311513e8235f717948337d777c080d 13301777ab8987b3d64d0eaf70fe28e957a1e92a7ffe9382a570237b3d3b d37910da2e51bcf04b566cadca226ae0b8c62105738f26bf57ed4f6ef0f4 fe164145db590286d16b2ca36b3f77a0b4d243478c59cb34494b09209ea1 4d4fe024f373877af88793eda29357fd908195a1952507b726138e377b57 26d28447562df58e02663b86cbfdf2740d34a0cfb1c514523ea1b7b20601 9713ce97943ff86e79ed7f3dbb59a6fd96680264e693f06b03e950e4a2c3 ed234db50ca2a65594c8905c674a9bef1fdfae8a068850af662cd00429af 4f41a8a95dbcbba1bd7e2b5421a1fa237cf31bc52f736aeddb1814f5a229 a1e81a0316c6f70d177243adc4813f8429ad874d9efa0b9279975dc15bc1 41dd3fa2c5696c6a642fde4eea6e54764da50910e51e74506d5f007d1b19 46ac61f4b5467ae9449192d3f3736740704d28df25a018a681c24dca1862 cf1989f1179c80edf7ea97eb48b72513a2f5f9410ad33b1e67af4a9b84b7 03c64c9148a456405a6bde4bef9e20d33b91b921632515d9b7d07fbfe402 d16179e91101af1ebe99df71582fbcc1aaeba137cf37777db59369eb36eb 8b88fd6c0d71b89f34fd1df00dcf0f1d584c12cd998b8d3179f95ae3c1da 483543bd1977d88310b76690d556546b30c573641d1b6310d3f3c9e8c398 ca6d1b048c629d143584f6b51177a8cae324705be0751b1d769c4f7a80ff e810f076d007e01a4d8d2bb80e06a1dd0bc6a79a2db1ff51276880352b0c a2aa2a7399918bd9115091072892149e51d7083a471c0835a5f5957f2247 4b49ebc6ec7d6ae0ef5cde3634b878544099c58c3125496cdeb98874335b f1c756b8f6cc7b0aa49d93c048451a6e48377aeef2ef2edd3ffd1d5efe84 e23aaa143884d60f06f36b3d5fa950c3737105cd80bf383caf1e1c460ee9 30e4240123b34b83307acb0a02a382fd279316c90fa69c1fdc171f4c7f30 f645d4fb8879399030521af4ee5c225e6cefd3f1210550193785e2177ae5 cd7c130e254df39b4de53a7b4b4bea3e747de45707032333b21e13621cd6 ab912fc701e722d7fac26e92c9d779b6d6bb4912e3c8497fda5048d4c856 1ca5e83475457986a8aa25869e8329c5afc2be7850ef12c4555310fbf424 ec5568ffe92ed1ea2396055181565d4b11f98c72189abe6f204918004691 db14118193c5e291e07d35c45ceafa1b3c3155c4c2c9a91a7baa9b110a97 a0946827e252dc68d6a1959288ffb63eb6721fdca03e1e72c0d37ca7dc7f 3deabe15f4e804cbb7f5650a143bdff5e86de36f9f826c4fc05d5667ea4a df5d08a31cd4f0d2fc95f5eccd874a40c0847b02cf4f9c4b047c27e5c702 0a23e2f4504a3c2fb6c310265eca0fe289ea8c9f62804b0040167589f05e f21139b321c662b5ccc314a92dacc92664a65cc9f804a751e4eabe11a9ad cc08a3808397b68b6510fe49ed4861755386979c858a43c5105383a948b1 6ef0eb9d79ab162f1c56e08f14e3614cc683ab383d655f5fcdb616f45fda 9b3ea1b7a4514af796bcdd859421124582605417da88f96bd9bd0a44f6a1 0352f31be38861eec03d5ef4349c62678171bcbb25c789cfa650ea76716a d99f9ef4a361467d0f4bdd305b1656c8e226bc61993e98fe31dc936c9002 f69caf89e0aad3a215685a82275357fce725877b527eec56a74e4aa352a0 7fcec7b66d025ad720c760ec5dcd46cb180c7aec171a3200c2bf697fd3bc f78447054dc8c38cd443964b27280554a6b3a878ea93b995ba0acb74a4e9 6118b25dae2f67abe2ee5e580b0c0b2eeb8a0d730978e97205277823411f 1c04beca7c2ba588631ab10270708ba72eb0c9d76472e90f5c733997031d 5288c06c2449edea82b0cf653cf1dc5afd64c10bbded31a2c3a2c7a00bf7 b688c77888d6e6175d8c20994382eaaec14df3783d4b3bc97f1cc3ee6113 d50bbbc2fb1b82dafc127c466d5909db3a7c2c5b31a17dd588f15b8b5211 df314fb334c4f5412fb23808bb1a7bb3f85762a0881765b0d5b8cc8a6ca8 228f29e7e73b496b73160ee8f91b5dc4a50c0a093d28c01850336c56a12e 95c0b53b39c875f86a646f149241aa070fed7d6ad42eff3fec7e039c36a3 7aa3e5bec4c497b1f51d07057bf4e9bd067209850f23a614b05ee5993d5b 61234f9456fe76748acad8016dc2fe48eb5b4dc7f2f6987304764c48a74a 50621cabc3d8528dd08aad4d4b55aab3a04efa8e69c3f59ef92e3a81c8be 23be1436758c1ac357426c3558ebf67ac9677551da53638a95f165320e2c 31de3d9dad7aafc99ae3d4140bd690ba987da161e8951c67a9a74948c350 4d1b07d5c7694c4c817414d05793081170d387beed9fcb5a7d09a6c5068a ef0f3b74e35560d21593ecfc51b9123da0da1143ca1be60448096a663987 4f355b2825a4c86135d375e88313478861f1b9aaf83f39e2e18a9da3eef7 944c984de54adf4224d61ffbb85fdc067ccb6c37f81687a5086704356650 d487678fa2384f48e9e40359cc6efa0f579f8a181dbb8aa01fffceae9e1a 9766e602aafafc42459c5cc59709cfd3c7c7b7235b9d9f26a50b21c113db 401fa1e99468e5bf429ddf946fef6a6f26aa0f75d77262119e30eb5529b9 5c8ca528af78de86a40ed5dbae0f1c36625a60422be9e6f77d5672565ebc 80e3997b15ddd5903d85f35cbf76b38884080605faa1c17d3fdcdc5f657b c4ab3867e917c98ce6c3500a7659d322c981e3b2e0602b4662d2106e1f26 0d64a894aa1ed38e681a1d0164307af81fa19c1c8ed262075df3e978a1e2 5fd5a8955f09eb5c8ec79ce0230966ec2b90198ac6961edf4a0b9d7c5926 d1b5556256fd15ebde50a4756aa163b70918e697ad9b08793adee1a5bf9d 2ed8069fb5650bb6a215b15c80a2764ebbd65587e368fa510f3f250b3002 f9256fa6c21b14443505b203c7e1f0e0b6482de317bd56b44630b1a6c836 a2e398ec36db92a9a3186d55202a7ee88f981f14368c4447a172619c4f9c 9e747ad286d01fd223b55103c1e0672c9708042f63ba74bdd0d5799503b6 429b70c9a4925481f634087dbd5dc869da8d57fc7601552edb51b9918709 bbec37658392a287f5074a8c01ccfb49cc7d833a4501ccefb4e9a982ed89 0d1807cb287b9ddb8e7e2f43f2fdfdd1b4174b45ac4b20cafc24e25f871b 60bc4192b2e6431dd24bfa8a3fada89410d0bb68b865f3e43b897ba4f98f 2fb3da2c322822bc80a55effa49890f1920cb824a16d67d19a33d8cda986 c8045cc839e20ef94077d191f62dd4a8af82c2f4e95a64e1af8d882dad32 03ff0f863528db72ef20a1bdf8d998aa85011b3174c0efa0ca6378d488de 30960140f9df850b36bd310d1a184cf47b70d76654a39d2c5d50ca56bbc9 a16675482ab01d1425fffa264cfb849b7bb6a60dd4ddfc4395eda9f7dbac 1f9bd167fcb3e2a5c75e581482862b6572c5ab185f1304fbc90109216561 c53a766baeef42811a6b27cfe73425a873c6f23313ce98a155a67af59451 b85af8af514f1ebb9c8b55fbbf174faac6a1151540e59d11185ae7304683 8380e384b234a76fed74da8fe2dfb16fe8800561eaa8bef5201a23c3c162 f115207e1f708c252f0c80ebc0102fa1859d1d14d6376f6ca393e1b75e59 e96786e443ccfa7cffa5d5a532ea301d1a3b11dca3e9524889bb4731fa73 e3c7106de30a0b103b22a03ff91031f8b305849a122c181496f86b39efc0 a3c3f03601fb3bea641e049a6b6a5b94c3d2fc4325be8b60d57076e6c6b3 c919d0e9ac9a352e62c5a18bc174f4400917567e5ab85da35a4a00b99db2 d0a04395b532a58983b7e1d9ca6ec1b358e0d52ffb82e0a2b61b381865c9 13aa54ac09bc7b90dc93068183459b1e9ca74be62718eb1a33c0385b0db5 11df9cde03003ee8a0af0a5de005d9c8d10a96c054a1d47568cc3a1869be 48305e5a5eb27d67a4e9931f28981fc482c0519e331babc2b016d44eb1d5 68918235ed02349884de2eda440fe7b98bc02dead0eaf76f5fa85d2a6c38 4b6974c8b1ecdede290e81397532da1c514fe30a3449ca33faa20d24a47d 3dddc44e03070eb944b441495ef2ae383bd2b9b656bb0015d7d80e813e33 886fbadb1ce08fcbecef193456ec9e2e9ce0fb7b8eb71534d6ec565b0950 cb0b9d921b4a6980f6390d4faa16cf466a02ae2a55146541a20c5a9996c5 ff61450887b5da72aace428340d9886becbd7d8b0721269883201ffa28d1 a1ba32af7798aebc064ccf0a22fc9f2d450b9f0d26fe023099a95791c731 79baaf846e9f1002a930c50862d5e49f27d469f67d948580877e8583c4cd 0fd48ed98501e3f6d094aa00145091cf3373b7ad6c5050b90762a98d2184 3d1df31293e5b8a5f25391213bd3f8ef78f1ed91a52c50089c3440e7855f 315c3ce3c5d02da21a1710555cbeada8d406e0f644bfc2649c6b059ae09e a3ce3fdf553eb6298e6968f06c1f3e78a3dadbf80e7dfeb2bd7b87620083 95b624e0ccbc0fab6ec0279b951c0791b6056ea7e06dd3a7eac13c9390ab d98ea4272c99de1a65345b6400549ed0c8adf4ebbb46f05262e2f5c4fae6 2a279d5be639785d7f26a8158a77607612cf5cf9b6cb3539cd255d9b9427 af0665ad63c1e8df8cc93cff8db23ac53d16f61f6dc271488b0088e5274d 1f3f3ec8f8f28c85238345542ba4d538ff2a4b08af29640c5fa7cc8cd89a 47a083db93096ea8d4b9923a0c069a20e00020dc296f583710279eb6f404 162da338313fb4db5055f0b5f6dd4b0ecd6e6ae4be65f4cb8ec6b1f70ade 49702456a001312fec560bd2bb0687d61add0ef2e278a13452736f77814e 277b153af6fd4fd99e9adc65269a9ef9cddea98953892444e1f49d3a6a33 75ed9acbd9a9f11070359e8e8d97527fc874059b5ea3b0a82fd7d9265de7 153eff41b28e397767e9d0932261f839dda7b359b03d4ddf2821a8398fe7 221640e035e49e371b5594b61adacfa5dee8389dbda04ee349072ae506c5 19ef43cd8c1bc90fc87777d9bf6fef2650880e0ecc17c4d48d1c7e31db5f 450581eeee7af65f665ce472da87bc90d322c0fd878f812ebd66c9eaa033 d5d9622f8f754936102fd51489aba37b725365bcc3dcf1023000061bab41 8737901cc01500e0dcb2b3bc196e89d164622daba26d31efc6b62951b1d2 6e15fd1b1448d7dc675031b90ca135e42570b0a948e34e1ed7e0e306636d 4760fb5535207502fe96cac6b9b0a52db7f04c4140eaa826b0f6849688c4 a353ad76d780d0ba8aaaaad6d47a3fd77647c9159af91e9b74cbfd38ee17 88cf37dd6c9cb721a9763064935ace2a941b65d5b11ca2ec06cd700e40dd a97d5373c5d4d3a96bda1703c208cfa235909ec79dfcffea284e743b7f04 88e7cb68fcc3e6c4f7a49f945d859889442748607acf89e8d2b21e76deff 12df3c6f84868c110ae964b5cb3dde29c671286588442e61075815345252 ed1174d840c7c7f89255bf99a466d64c780fd13144ab2074400b404c64e2 20bf46849bd76801fb0ea28e460e89af2101d8cf911dba146ab8e9063a26 0d77ad509df4f6756eab156a31022dbd4763b23e177cb5b712f0385f328f 65d238ab8a0edcf6d6b8eda3b222da5422c026db7102375f78323e84fa86 6f1e2e51c513721d666c17a489a2e00ac5add0ae6ce4d44fdefd65df435c 49457ec14191351c05443f349e41b6b6eb4675c06f82bb5584522bf8f316 85481922ac7a1bd51b86243a97dc5c270f07c72b9c5a807a6aa7c36f3f13 f44c46491f216cb10f3b5d1bc0e84d2cc95bdda64619d8e9e0f2b9d1b3a5 e8a9aa18d4eb4187239e1010566b561ef613fa582a4b66149c1b1eeded7d bad6c2dcec39315f735ad2c30dfb76a9e42b73912d018d3f19f2c77eb7f9 3ce2433309d7d802949d9ed4fa7ff6cde73577c91bb2b065ea389c0e2104 57987f9814679b3da6c4da8510cdd4462e249aa37048320cdd48bacb6fc8 296f12aa3160297ad9e36c01ac7807b6990ee7d646d8ad8d655763a2d685 ae56af110099ec774ac86df2bc8c23d404da3e04277a14d291c60400163d 564272b105c61725bfec1b1ee7f5dcfd7a10b14e0184978e123e3f26590b 3288771243fc11a4252b0af02db678eb84621648e25bfc32e94206c98b7a 4adf3af635d5b590c606b472996e7ffd26b7f0554b975142473333a061eb f79867341bd06a5b05761c595087f20349eeea6845c87785e79117c3a95d 471eae9d5347970ecc47331cf6a9043c2883f498787b90e6949c8ef311e3 c97d58e6dd5deb00c88c47e391283a9a50bd006fe5a10a3ad04120437393 e80a5cca595bce1b7ae05e0685dc003fac9a8e5d860e2c2325a568f4222a f2fb7f51463fc3051aa643b3c306ebd9864e08d34de7a9b49bb69dcf69db 0ad504078638033b143cf2b730d598790c4af2676694ec0ffaef3d3c580f 477c3c5dc7478609d043bafc6ed8d06b450bd4eb09141d757962cfae60c5 ad7222fb12c34dee17a0b8cbb97044b401cd632a1797ff022f7bf5d2d9e9 1e96722ff3d0b51f78f8a2b834f6304c966107416edc93a91e9d914304c2 98138fbee34f8bcfde736c7f5703daeea23532fe7fb770e8c22e087fcf80 ed2ecda99c1547a41b7672591fdd5e26dacb333b524dc0de8ded5ce60389 76ca254bfd62b1c066059053edf8c3a4fccc29386254de895994dd7069fd 1a9c2c7fa492043abe9e158110fe80a9330ce05063cd7023aa5605beeaee eb033229e3cd2c2c3a67d91449cd67578f50c63f1c5329e4217473aeb977 3971dc69408b48ddc5980329a197531aabf6a92e68c54e2e19290c1de361 fbe91a6c386d4a1279c82f128c70baba069733957087ea021a8f9c69f0ae 79e88276f15a7b2cbe6744d41ca32141091cc9c5e1b857205605d99f411b 4e3da6a647fe14bc94c068911995d3f15be218174c69ca1834f49176743b ceb20a385dd2ec01bf6da68c5659e636eba5545196490079a63c49fac2da 3c1fffc6d21f2d9f38ef7f560701bb71c1c0909a5577161ac0b9e6ab21f2 2777b7a721b34d5a6f6f1e8994aa89c8cf9ab96e81fbf780bdfb4cb4b6f8 9c05624f89b86bd8db430ae67f09e20bed731d124a4bb210c46fd61b24d2 28772e247c2eba3cb6b8acc0814d59b5d04138f601fce20230ba26a8fe1d 351bea6a77f49ff461620e3b78b4af7825436b2d28b29b2cad0ef79c0794 654ce86ff755ecf4dfc235480ad6496686d7c54020caf417f57ed100ec0b 30716ba13b3f9a7084322ece5e140163a228ae8e86ca4f699d94abddb39a 4cf3ea50ccb58c0bf82fd81fa36466a813c56e16847048a8612242fbf4d6 6cf9533dfd8ff7d1cd58cbb40b6a2361049e0e5842457629e3893c3d2270 f7802c6d36a16327474b2c81fc0ceb4ecce7be67bd8c707999c25573239b da35c2cda50bdd2a99141b84c9337360ca82e048bf0a460277a2810e9be9 f19f121d6c32844948b93a98b4b16893d978861a7e35579dada4dbc12b4a 8f9256f3d6c26eb9d7e6ecc1de7c8948cbe619d5ec751d1b0b3f17af2f11 6331406de106362ab12953130048abf09f8f3970cc170b31223a6c7d7fa4 bb2bcf5a6eee4ce50b9dc1c65188f60d2790a561dc552e60f03c536b439f 1d6b7c90fd5d406b79c512df6868c175413000d38fe1542c873b52139aa7 c28102bfd0e48771d46eb5f38c174ef7140b2b82af2bdffd879b281210d5 bb9ecffc4cb8aa09891208a3ec0f3d150514c806be501488e649234e0c27 fc13f2198553068987deb79b8da835ced758e4957bcee7c623ccba1a4af9 6916f467bc15b013d49497de3b80b5e70ff1e459a868089d02ad433a57e2 fc9e474764efabfe35d0e6929b0b2fab129cd92dd5b1a2db3a5f45b657db b6f7f929b2fa42c483f80a4c3fb8da8a017d2151aef8811c66028a8fcab5 3cec7d285ab284be4d97ca882b93d9beace601f6c80c9efeb043d295e95a 3335266d3f49c6c0c90deb2c0676d525129ccd6191e3364964fa26a487e9 136aa70c96f9668fc8e420e9270f94f8fcc812c30fa4007f9abab5572a6a 9d0269edda9ee4c05339f38c4a513458c60bf8c4f399e0e85150ec4ffbac 3026f3fad2be387f0bbfcdbc9d289d2caf3499f7470f7557ad5912579352 4bc777b64033fee4f8ff8689e818f86722b447f5378b37f05d53f77ea10e 26c00282a5088eea8840dc80294a7e806d5025b8ae5a4d0bcb305452ad99 4083f1fdfe2cc8a3bcce756688b37fb857f3c195955f31f49c113d1a14f6 d75cb2aff8169007358b0fa8299515ff1f03bef4c6dd6f3ff70d527f8964 ceb2ba3644fed417e0ce550a1512759e1d76163dc74c53e7f41fce443961 892afd6f34fbc58e8347dda64fcc52c9a1ae0a817fd5d1d14658125f579d 32ce165d8531cc34fe44edcd73d85ba8cad4d71cf5ce80510f8e4323d91d 96fbfb0daefe8af4d57559a9e303551d38a65500f2e02d4c7f65f4a91aa6 81241d10de140a703a641e0f6233e98fd9ff71699e62cbbc839de8a31a17 260e657a84e6829d00b54ab85977c8053be31049111e569ba6fb8e29282f a5bfa5ccae62aa7ce0b0ee23fe7f429e566f3aacdb4d13945c9616a2e4c9 02c64d42bab63f25afbb4623475a0846e314c7a7f47cf531bd3f753cd7d4 14d51199d34da94286647ab5b616569cf61c68e87568a844eea05f9d22fc 1c51150857aee8868c88b38ac004f1d86d1b6536041772091b3548b82669 6af82096753e9d6e0445940eac5a902b304b5de5c0b9de23eb298f3774b1 775394a26c8963bd7e07204b8175b7f2c5073227a16dca74e4bb24ca63c8 6fa65e6d5121a7290d58a11e0c7b98ca7eb65fd636b20ef56156be14038a 42d51c873d52a656b1a57d8bdbde43053dd096dff8ec222bde65776c2c46 a0d64d927d8ffab4ea1e9ef177a711a81f7fc666d30a681996f194e4d5c5 33c403a93271068b01996f0e250e01c2ee63fd1d0a9163bf8b670f970a6d d416b2aebbc96deb02d27e0a83de3c87781edac6aaa5a0d1fd7877222897 94d3056bc74f5c899f64988a25dc67c3f14da8871d69fc5d8cf6b0e7bc70 e398694276c69b77a48019989b93755340e000ccc4fa98cfcaaaf1593055 13a56f8987758c979b5fbc8794cade876d81e4ecf0495f329a3ec2927e95 9aec2d26c1ad32a3d111d01d0c932624b904da42123d44421c84bc71307a d13d0041308fab8d0ee6f9de746400aa041a7c6a99a72300a9b911fd73f0 cf2e0d41921232f243eca86727776890bdf9d138752bb927b6485c1b45b9 416d1078a7034ba2b9fb1c7f9cb55734f87d4e1f081d7c4a66b524b2427a baba5e91c1318923699ae3820657e89ac8c75322f04017439c7ec53e1891 28882e761b0363938b7faa0e6440e1b697db26de4fc2b2f3e1752d000758 978292da03c7fdddf12b5f11606798a4016b756270c1ea095fca04ef36b1 a72aa27da04d2dc9f30843137834a4b3397eb87f107631bbab8e724f0014 2091b558357a0753bdd88598877b4a506078292186a852f36e38e606b12e ad12002f0273108c594d86d04279282427edd49fc3325d7cde76e9e50e17 c3ead48da0b5b3409df1e7b711de6ac9cd1a48b907e0e6fab8df98782fdf 48dc44433148424304699242cecf9bb4d699114a950d53c7d8166018b08a b5246d836a0633045a6c0fdf7340ab739e04ab8928ff7ce64875682bc514 2618c221ce7b6c38633c5afec9e0ff4ca14743d21be4ef5630ba42389f99 3ace05eab6b06cd8413a4894a3ac685af3b9e8c134970390af3b8d3ad582 eb2c948b529d1fe2dc23c8919fdd29a295d5088662b9d50c247a7b0450ef 0c6b4c8564393dceb5a1b670d2b77876a5927969fae71403c719f4200820 12741fe56d8bf8ffbb2ff70a7b1b7e95478b8500eb356f25ec9d85578e23 cc4ad1fd61cc16b18d556c0e6021cc7c6317aad2523d1f14eeef767ba598 2b683bf24fe0cf493cc39c7117379f41028a7cf9a95a970fe5e447b6f815 da7f0aa455ea915116e94281bbd7300ae58873444d3019acb2c734e114ee fec3b05f84fc994070dfcb82999bf421b51f7430bbcbf0275c157ff4ebdf d35103fd111a0281e8d52b73bd42360b532f46f830c3a78d44db18d238f3 21189d7fbe4be34a67787594d440e012e39a439f48267cb383d7a8bfabf9 08d6fe86abf91c967c1a2c45943dd7fe6cade43d95bc722c896495ff9f0b 5e85dfd604187857d6cc0eca1aa46ac549fe0e4d99a93d7ce0f712db3ca7 8a157c1e3065190401e13dd84b504a20b9b1814024528099dc401b6b568e ffa0eaf97cce9bd173ac9be0d1c0a56ee21ea0f94e0ec204461ff5930f6b 01e2af0fb5fb368db5ae44bb9861515088aeabd158e1f4e8617f5b688c08 513a96299dc88f74f56714844b19ea7416afe963c3a0919f8942124980f4 9cd1adac4d1d49f9ffcea28ff611090163b5e07129b900304292df6134ae eb52bd7b44d0ddf0c06d55d65886a78d3a1e0fa480ea21119d21989605d9 749ec25026a04026c91c3882d2ebf341603dd84fb0c138a1271dd6c27cea 2d329de5d810f761212c71bd92da4c9f15592658c9d81211b90763ea857b 53ab18b7b18f2026ece8841a248c5cc92dc6b6df59e3fdfd04aea5cad5f3 60f718609d5ac00683bed6d743942cf10371ccde82ca656ec31b6bc726b2 156c2d5606304fa59ef82e2bd2f212c6e86a9eadc31830f5de8e76679eac a9f21b48ff6f41f54cc057ad2c02b030ca376105dc8324bee6d380f82672 531eae8e4a2dd9c80a01716ace85092dbec6563e7f055b77265b75d416e1 559133c4b9119bf69c405732b61bc669ba6b6fbbeac9298cee1fcef26b41 89499086d2db96c8afb534ebcff7494177252aece0b1b9689b7f28493923 a6016dcfa0ee015025f8bfc4ea2a29293a7c5b8342f444db215a9e765270 9a67b19fa0bda6a289a394397d543a444ce477e54341435f4e63f9d158d8 12b434f9f5ec1e9f8e1d5342a28c9be494b49501c6f9ef349cf2c0d24a62 44a3652b9079a1289ba7031d4d97de225df6ec42a8dcf13ed3a37571d600 99d5df67769bee27a1b218198a3665932efeb7fe217b4314d3a4d7991bef 6aa5ff8b8019a5f30a609f27998045a20708b9660ae827d5acca04e94c00 49e0ec57aae4c0e65cccbba8528867a186368971657d5796c1cb1c0a3d2c 53d8e215e00dad145328238997a71baaae73c21afc81c5b719eb10dd8b9e e8f3ecb779a39405741bfc078bcc995a4fc26eb9d9698f06a0f83f0c0054 2c85b7b4827b7220b071c88194d0331a35319b638a66edd7be30e86aa1bf f1d29b0ebcafb968c68f6ac51766b70480f15b4be0301ac69fc8459c39bf dd40155c141faf8fb1123b6dc23a74f7cb863524b971eaea1574c67c0fd7 bfbcbed4b99473e07d8d41481129fd55b57791886b626f0b1c5dcd3e0500 861a272095b1eac096bec7f2dd53b1e4891ddef5410a63ce5bf7485dfe80 fb961594a833c81ca8a581e65777180e5670307c9b79ca97ff38bcbf0629 95bdadbe5ddb4d0a90a5de1f3547d8cfa9ec142485aba94d597d1387b937 395f136e3e934b73649dc4bd587c785048373b4936e737724aaf6c407fc5 7b8a1be3f723fa4f4a68511df9f7b71c6b7065c13c15fd11ff74697647db 29dcddb07658274959e8b511a9b35e446541d39cffe121329ab2d94c2709 e08c1389ff7afad2756350bf2ccb35f34228c4eec4eee5656941e2e867ad 1d285475939c6950929b33cbfb30c50cd4b32bdf6bb25690f32ecabe1a71 932ddd6f19a3b629173d1a3a24308396244c8507e472f63955cba693fa6e 18b1c61e80d5fe79a0266831458a37e4390d44276494dc03cef7de44933f 1db94bb1958d8c77cb65b756af4b87b1ad13c6439e4f9803bdb264d65fce 9416890b7d054eb3d44c224d52db95d803d1cf2b557c003c453d48e3ee23 b20d343ef22981faff7e9d7a43b78b2182aed25b5825b03794948946d30b 30cac8274380ad33065d14ed4a030ae00533c0e0728590efee415cacce63 e814a0fd54bf98b25cddd41212617f0d39884c8625cb1905ae42da701b03 6f60680711ee85e5f47dc056045890156b146969422e20f8a2a66cc4a6f6 fabd063a168f3bef11d6a369f1418b84143d71d30c6d965f18ab4fc08987 482f83138cdd6fb4226a4908fc091f229c6265171f0cb523286080779320 b30d4bd678603ecc9161ad8cb5a501833287ba067c97036080c9c93bcc12 d69013702302c705dac256d764fe6f1d1d57b0c58e806eb45fa42dac9f67 a79df2b4e9e3ef2e779d00a77f7923d8660a70253a3f58edbe1d4bd6b9e8 606e9ee90cca725db85221628749c02dddc1b29b64ee0d7e2c4649d972f5 047f9b376e498b7ac28ac6d90d1e34483c24f1746361b61276f10d6fc383 5b47e2fef143bf9500b9b8324639a7ae78b2df882457c4d399e5fe605a96 c9f6db5de2cb22c7119aec39be3dc6c208ed1fe6fae4e11dd8905570eca9 7c438acd5eb741fd8b355564e369714965a62e86f91df8106e4445d4d959 a7b90c2dccdf3df61c9f040cffc7bde8c4df505054242bb01e98b057c64b f660334a7a01dfb2f143606c072fd1b46a054c9e6256767c4d8a93f061ad cafd450c487bd8e60d6b0255f588c804dfef128b4d8dcc6bdcfc54da55e1 e3db0dcdd83c1a9473ddf625b04ef8cabfe7ff79d7adec16cfb8365ab874 f0da37b9c793291bcd7b2b9f3541b18510cb7ade212076226ab000bdebc4 ee22bcdd9cfe6c14af1ae4b53ba27eba3c85616a80865e7afd5fcb87f5a6 21678a5583d69a74c51a61e64c4aa8792456cc9d28a4aeeca9fe4764f982 e526724a70773824f9dcbb913d87ab5c451fd858154f3cec4d683fb1a1f3 d72274f43db4b0a9fb32e1e3edc5b2ab4d19010fec11e349cc961ef016ab bd3681d6b8f3749d2f6e19abba2e2d8bc2a64e926e5a54d1bd86b59a5409 d58947bb01759777e8924507aeee61bbe36ebabc7bced4269352bde9da07 c9b0551452f2027af01c13218e9afec7c684f8a86b11d4e303e1e984758d 7487bfd59653ee8699a97c570ae0914fc2a9457e251a9afba94d4157279c 2626025bc79b1893543d1a35c866ff5bc3c021241e0d1684cb16b3885af9 d2f0a20ab75bc56aed522d4e32286aaefcc802402d6cc60b2129ba3e06a7 5c7226bdd46bedb2b55962b586378f168ba9fa4a09e6a910a35f57fe7080 e53290537a830708504050d779d6d6a746e8f2f0aedacc3b2eb034175790 59ceede73b3b0c611f57ca4d102eadeae2b4f9611270969a4543b3473169 ce8b22d2fe62b241f661e07671d8c2d95d5444b905615ba5b4c2cc794889 2a2c6a0d77271cb6f28407eabad0202e25d8400f006ee3f241f5be1f48ec 004775469717653b7a236f876b2edd88d433d4b8ed2f47f73d964a9bab03 8c3e414000c750ecbe3fbd3902f8d24fd6ca52d447227053e3549ccdc49f ea46ec7e3578ec7247f77dfa265a007a1b889d36e505f7bf8fab3b68e76d 9bc00e54dabd29b1b3d907748ca134f067230a6f8a079c8daa81b2bd21a7 ab19995a447f6eee35e6d8c503cccf679b6c8fcfac07c3a8eec2ca9d512f 5af7ac7da28c391fa171153a39ca6e470ca72c813b842efcdab632f3a35d 278e48786adf30c671a500df993b4c27d78fe6677c27a589ba7b52d01c0f 89ae3ca69441d0cf32513d62e653908c00fe25a24a0c4dceb1ff98b0a4b7 a2f5092cad028fc216b71e3bd49914c655811b468869853838c9cb0cae5a 9569cc9789db7d5291f2093f6f02c2aafebafe8f6b6027ae043f7e9a06e5 e0c74ae9c1792f8877670ff1ddbdc4d332b86f628158f6f0d976d56a1273 7b219e5615790169d20aa7caa676a8f17b6925b136bd18ed234c2b96e993 34c0dc04026b579c5aa40788130aa804340e62df9c85ec996e35c4a9f9f4 9b81d5c87c224611a2d9d5182ef85d01eb2a7f9a2f9f96d45d538afcefae ac72e2361bba5c4ac161ae12f1652d1fd84256af1a2596e4cb227d5be574 8150f1371daa0e04a7855ff191e6c2e4521f5650806f5445465614af801e 4face7a7a14989551b6a00495935ed1ff4172abf5e78f5a0c31ea6b77fb9 30d58d808f47305a6a0c987cd6b2d93b017ecbfa57070151f108554cfbbc 069b9d51cd372f6dbb0b7ef78e650446b0e716f09abb1ff0cc1f81466429 74afc5ed85e5e87bc9b022c1a14d72fb593b9eb7e4f099850eb8abbfec11 8a69ad3e178e8b28bc2b0af9ba3a8ba6c415fb55d1fca117b837e4c2659e 8639789cc35859e14e320fdbc399db88fba095ad29b0fba78fec3da253e5 48726d96ac280d98b7f45dfaa31bc53d2fdcbbad1063ad462c44eab2aa7c c832ec1f5cad70e2409dfb3a487dddfd3b36504c1c85ad04d1b4103ebb92 a3f801c8afb7685755b266742e72aafa3f877c47c572bc969a18a7fb804b 16430a5ead8b2f7fdf9f26ac922884906cc1eb171586dcb792b274b2134c 04f7599d8717b0ee057a3989a721ebca30aa85d31ab943797023065c5f64 46a8911d7da276e6ecb4569a9ebe5d6f18b1296716da7b47db14c32e3983 3d361eccc811521394cc38b47d269b6bb04f0bd8bffb63cd0b255c96c98a 0a0c460565c9a088900051fbc66234013245c12fa47e5c6559c5c1902a3a 3c1935ce9a78e40fcd17863dc693ee726fb7884c7b7de5a6761c69424bf9 2243779ff6a9e566ae5372ad5a4a4d0e8ceda90ea12d22579b015f6c6e9d 5445fb555b45bf280c03f5049d3db36821711c8a7dd5e7a2c1cde2b37c80 4f50feddaeaa2b8a029bf47b4e917d593418a2e7213840e79fd2d16100d8 2b76956922fb93ef5cb7a16afe18ccca6bc89c2b6403b3a1ce8abc2768d8 9230053cb2c13e39322ca4e4682ce1f3eb9ca5dd6428b9ba1c0c573b9bac afdf8aa129cdff321adfd514b2596a7ee73671d8cfdffa6014df71a14bcf 7c246fcac11954c469a5085bcb5865455e7844f8a4113aea74982d1ec5e0 6bc88b0656aa6dce6ff19491d0331b9e12d348622f1189743e974c190304 28d9224321063c40455d1420617ee056572e2072ab254af4339bc975f95e 66b093fbe3ce5d6bd5c601a7ec41bea52349f90f585fc52e57db9fed41c6 106e15724c8d25e9a92a976047e14c0283981cd53220560c4c477985e5ff 09dd5786a3d6b20337ea06e40ddd150aeda6e7416f439bb818e267a970a5 4fbd46088ea02c1e8b689df81ed517a237230df2369acf7ee9ce06c3e24e 83a5620ce47047c725fb6f57a126d55781406c670ba0dde4cedbb7b28c3d a928b6b828efda00f21bdc87638a6bb59b129f50aa79ffef05cddbe7f36b 599788d9b81380573783dbdeddd08b57aa600a8cf8a294fdda952d6d1d60 980feaddb0905117f5502198186e8a57019de97ed3369c29d217fa2cae7d 94a82acddc8a32bcfebfdb167d552ea840b9e8b2689b03724907be1a8f97 ba4ed0e0fd9825795fdc5464a45d3677fc7b146f6f5c66d87a0757df35d1 5ead8cad4ccfe98659b6c5811de82cf5644e00434bcb8bdcdac7cfc517cd c42e8b758494b6939becc2d6426602f17607feb9a71836b10a59805ec430 fb6efc49175010cb9ab1953e906cf66fcde4d252a683cfbac8f41e0d221e 35fda9067decaa71da1d439380339245090df4e21d81845b233f64ad60dd 6d4046b1a257db23e682d0665c552fd3ac6e9565a73f8f913d84d86273c5 7f2514b289bf51528798ef4c390cb227a567c1b016e71f02bf7bf0ae8949 9de53d074c4ae495582317a59cf5947fc469054648b881753b22f63ab936 c862ece5abfafc01e0abdb4cf163267911229c36dd1df042acf932f1c587 3b0591c26f576cadcc6a53ad637eb11c8c2ee6cc84e1204025a928907a59 1a0e086e354cf1f583054953aaebcf4ef89c4eb2c3f01f409efef375cfd8 ed932d6ec34ac9ab6b0d95842263259f21df66de5d5ae771885d8574349b 895974407de469058c94cc5d5ecf949954f0801e5be8dedbacba7e893f9a 14e211e25eb9a8d426ddd692669f78054417baf8dc282aabd7efb148de94 15b56346e55a8fc3e5296d739e83769731c48a95318d95eb493d0054b9d5 887c35cf2e4c380e50e1be6690c5f6e9e7018cda116d0d8a983d43ee2464 565bf8c1fb5661b75838d1c1823eaecbd2ed2721fcc353516e94f5ca4013 9b8c69f69abf489fd3e0d7066c5a722cf5ca763073041bae3fe9ffac261f 75457ba5d0f546eec5741a770058b2e8b76958abe5a27cded4a8d190ad7c 5c53b51e32c105f4773daf259e6d1b25e95d8cb00180523b5180753a18e7 faac7c47fe9c4aa719ea216efadaec522d1df90632e54f8cca66963a5db7 8452df426945798b0f9151a929571525995e15ee2638c74bda75e8140161 1aa448e93614d4841a0b5be40198a44c058ddf14089881673f63268201c1 99de50eb482a0e2687f02ed99de1af7b2c40ef8ae43e84f79923bed8dca6 132d7602bb1ea23b10469628c6c263acbafb2f1b9ae53d0fc9ecdc64f3b9 d513615e1bae542dd407c668d38bcf1f290c822304aa49251ed252f03650 ee62280ed4e16902ca2eddb24d71e4b16617f447c6bc907db187a01e9be9 1a4724816136be46ee38a4cf3c64a85ad44e1f2baeaa3b56ffe3f71d41a4 24c7d9b3f5d17d6e2cf35951bcc0ffe285af2de6f41eca1654b4cf0f8699 d059919740222a57333140acf73fdaaf99678221244b5245ee90d14e1727 1c2e22c0afcf1d1b036d2e69b02fce335bc64ac55417b6f53bedfdde7900 d8861700c282ec1bc90822fd93925d75f0edc3e5a0d4df89a5bc4b31e292 0ba4009bf1a263b0f752247825d79f9f7f8d62ffb38b4ef51d08c76d10a3 13803a82a4bbb76881f41a48d3723c47516048d7a57b0c129462c1e02ac4 a3230c53557111e7451597cb5c005a2aede03d9d632e0c9f09983d67ec24 2c70fd67c384f01cd52e27b685d4bb9526440c1ac397172e2e2f57cd13af cc0d777e15170d431187d7bfd6bae72ea57cb378f900f83da6b0ed75d322 22fa8bc634de08716904b8d1a114e9417505228076b7e1d3a33fb06af851 da3449b9b9d7ae4f9d78839e3c2111a05d1dce9f24314d86db842f0906b3 94fea407f6454c30dd97c6c0bb81a57a4996f557cec7573e91cff5f46a3c 1995c1d3fe171607787ee048f64a17eae6af9023e9576fb4ca2ceed45d91 956510b84e077bc62dda487776a2a26965d16f31d1ea5b0fc15701388916 802b8453501007d6cee79532bc26c3daa5a2e05d8a17f44fa7fd4c02665e d14b939e8b853b303822bc1b3ec52dbb8c88850207eaede917663bb751e0 57b6904968ca5b8685c584c11b9c98eda0c7cfa531a3409fc0c7664c954b 2d7b7ceddf9bb4bcdf14a341a810ff4982d9a43adb40314d5659fdc2c790 511cc08557e35011ef1c00050e9382c570d7161980c0e353fb1785cf9cb6 a2a4e6b5822065ac84912a3130a1a8627f986a954701f8a47e8a9da12d27 4ee95e51dcbe6dce622ebff358e63d419ded06afffd7147661567b685b32 e1c17f293d79175ed1df33d10082e30f51cd8bc85c7e817dbaba0ea60341 d3e0ab20bec2873fd3d15bbae37b4ba1fd32d00c1323be6aa6cd8526ccb2 fa6018e0221b8442e1e186f42f49e748666b1a67dd612369c19afecb598f 1f461d45d4acf5b6fbd01240c46fe35bf9f96019fb2822ae4da1ac3c768f 4f0e6f671c4808e6c19e15f16672d98e44564e4aee08a08bdbe5ffb51503 d2fbe78c1b077686387bbcb1ebcc145052de95451c5f77e6581c52b13d17 8dea432dbdf0c97e9fb089c5e44e26fea6ab9a4ea072d59ceb63338d5274 1c43f684dcbc44d107bd5030cf4390e02322b1fdedf5911722e59c7e8e93 4ed3846560f4b0c4032a98003b7ad1c86d7f8e1f2143aae7669a8378b38f 991943e49afdc73ca53c0fe9024eac2a37a1b76bde80ef26303a5ed29efe 6d664dc5e51788476cf8d0a838b0c49cc4ba6c879b49ff38422a37854e73 601f7f19945ff1c46d5e685764f653d795d5c93814fedb0c3e88e6d9a5a4 234c9284318477bb52b00612953a9a8ebb22bb74ec37b9e34b2671cf85eb 561bb29fc84ea3d8b84a92cdc6310bcf9e5643f4b4ec558fd6ab4faee1aa 1556387116c82cfd9f7b5e366aafbd365b1e291352f5a77cd13f4f32038f c865be940292a3114d3170201a2e1af005e1d176ec573f33e0343f665679 6e1f02167acd81378cbc03f18699b535ff635b80bcc4b449380da83060fb 7f7703d94e19941acfec2ae9dd11abf85da49d99f38da1e76d572991aa89 0a8b6cb7f9174f1445c5926a466666fa8e2abaae5d7a16df2e91dc03f07e 2e4b901731d69b7f843aa41fd2a7dc029c43510ef3f7d6b82072bbbc4def 972b4cc2fee6769910e251672af8febe017ba76db5c21b5769b6cab61314 5652fa6e577c20e34426c2c902c53984f23a6b56f43020001c390a6fd655 0267378fe8094baa648b722688ffaadfb08cf330d096983f6e43408533b5 ea3a520f89443e0b8819b7c11867050189b659115a9a19e8f5bb28f27d6d ee19fe63fcbea06f3f1ded2e81fc4f493dbe06e26742ab961dba195ddfe8 6e49390d7094008ac5214d31c4feaa246abf1a285365ed3e65042ad9284a b85486433408b9ad90f2457a3b62b6fd99073f0b3a116be3bb6a568ec27b abab5a5a37d1a15f97e9e075e1ffa1a9be38bff64e366b5653d0f2901a38 dcfa9b7a95a9a661bef4dfee91e68dd6a747c712963415309f9512a75fcc b68e2b53b4ffe5aa14c49a4346dae193efe95253463790d3075902142022 71c469ae3c6bd625f93c62783bbabf4231c1c9551a64fe3d13ca1dc32f78 f506e42d22af63b0e2fce3f5c9677a63479f4b3dbf93bb83136a5a2731e7 38e5d3c9b4a218549203af2a1fd06f8c1c03deb6de61d18f2884079464ca ac1e8bc7ff15aa770ee581d7b5e33b2e9313077f2fd3bf9f76e6e359123a 62549e51d55540bb2ee0f496d25d84d8cdd6eb58bc23d09310c72047257e f9f8a60481dd7d307f7654568519f6011f2d96e56d1f3ae856bdba5f0a13 c5e45f58df9f9fb757f12405c78a71dcc5fc5e258285ab105ce64d1964db b93811c52edaf26f2b2bcb98be05966f245bffb7847cc2c67ab196e5afbf 2c8f12e725366a72b8e0bcac99317489123cc1fc4d693dfb84990efc45a8 89fa7aa93026d43db1f4fa85c35261d08e4dc63a06db06bd509adbe77f43 d6a83330583667db9789ab88b5373ad587cc48e38d522183f4d8b7663d1c 5d147a53aa70bcd4f4ee824df2824eb837691ebc7f46e876ca6ee19ee1c3 38023b3554721f1aa857f1a4bbe4ff2142e1764f273972e184f08ed35658 e07f6e189debe065264c8e9446e904d82aee35d8e2c0f1061ec6fdd5cc18 c569df3cd3c053f618ad59b6721e464064c9d4712f2129458fa813f84081 94724fbc297b2f2e1e1bbcc7b6286bd93bc112b7e2a322b5886e676ff362 88218e94b483212dc4301a3dd2d55c14853c21227ec300c49f3450f08a2f 61151d77527044e59369e6160bddf601497466bc37468e307e1bc2fc4687 25f29df7d9be742e6a4f4f4626a30647a44e5271ae1e781347a7e29bb052 5bc5ff0bc7ee0ecb33354c1a0e9fdafa255a4e46dc00fd5f6f1725aec2b5 5a88fe79eb9eb272c4fb7c4f537fe9ccdeba60ecebbd820865dbd15a08c6 482fa4247ba6c1e21b9c71f05bcd3796e94a3fbd9e2e67c4df10a1df9aab c8e14eacec97d44f113f4281f70f6d8b662ab85340c1ee716b78c0522360 4af01b5f46c7f9a3d0f7e59c19bd8c32d8d35d127f45c2824f57b2f205b8 e46f947bf69322c02fca611eae1563e3ed4cf524203f45e135699d26e303 3eb5dc1d3ba6666188e5e129a843f97b84a3d8ccfc84c15777b8d7dbd5e3 f75f087e068857173f795b644a6a4ff0e127460d150cf0225322ddc0de2f 2011373e64991546394dd27ed68b8182fd7e9885cc6b0507157a8a7f05ec 99b7443180fca4a174b7aab110d9eae5606ebfb56ff53582bda01228d95b 38a4d87bd8aee6df9e95d64bbbac35841a478694531e014327020c126d04 06c0466d56b63409e77a9dafaed155452171651988f0f6ef1c357d9b0bde c9b4a3eb25671498cb6bf5d572030baf3eb637cbeda764f750431c226aa9 90ab7bf1d1593d0243c1d4da652b6450af330130c3bc49008ec4094a12a1 d83b5f45114121aef163209e39213326d35f380824b80e8041d2e98b6c7e 631067a43a05f5eaf6018eda387d8ef342a37b08ba5fc5c861d8bf70480c 6edf82f9c973ba0a8c1ba3a7639615452b07390069b078832343082096e4 da3b0885960e8ec671513abc733afb947381242f4c207e134191c7707ffc e833cab39b31e4b67097123daa326ab006ddc77d2685f7bb9b1235eaeaf8 0433bcd7424bcad8c6b26171f74638ac2b07fcdb3f8aafdc5f50b803c01b aef58089b007b8aa3022728c057b1a71343dacc41c5eac4fc4438a8254f5 aa932e415b496ec9cb16ba608fde83419d2a1ddf556fe8d603606ceb24a5 81288c450a62ecf77755fbfa986fa0b0de13347b2f90a8cdb7e235dc597a ea9ee287650b4869ab58c97ea5597beafe42535a8c6a345b97af14b69ce6 369125518cb6f7a8968291c6a6b16160193d5a218702b7523ad35710efcf 4c5c8e9a2a30d995dceb13eae7173a23b4aaaef58574a266305ea7ac5aae 801c2c17045a0e25195db4a85fe78cf842fa7e39a203842d2f7481603059 43c36d4510f3fd829dd1e481d6dd88a15145a9dde88a2dbf272ba516da28 e41408d65e9a3e502f610a2321e9714ad06c425e96d13d50eb8d4ff154c1 7a854efecb9cc72927a542b87c80c485621debb530443e9aeca23fe2ff9f eba32a4d8c96bfe797913b086becc4ea17dd74c28b4f7fca43f431bfb688 f1fcdae565aa6b7d1401392092307bf35fb5bb3837e885f765f1c4ef3148 776857f1c184626a9ca19892b1c702b72cf9b4a698a88f3baafba2577874 822f4b647b3ef96da58e45890fc9a0566163f4ca43e1c5e2a862a761da31 f897c50ee5d0ef12406dab7247513cacc1bebf84020dd0ca2302f3458210 95042120812080eafb7f2e94c67c881bef05da597e4b5fc797441a290a3b 5aebcca1b9f237f2b92335c8dc10b08e29aed74229abbaf575ab5aedb944 11c5d1f83715139e61aa9a56276d48633dcdeb7f5a9fff32c9957168ee9c b16a99a46be0d6c027c1fa51b0ccf485b79ff065a3a574ab421153de39e4 19d66d124378c3831944967bc1719cdf900c147e5feae77d6a0d5f65cd57 c860da06d87cb87d55b97304fd77a66e2865f470a41d8660541f3187cdac e346515478fbe50582b9ceb26e9409bc294a43b41d8d2eea2e33a9dce83d 1faec4b0af9dab677237b0d442e07ee79c25dcebb8faa958ed898ef991d1 6634bd80db743c07f0708102141c9c3249e09999483aad5fd7e06abfa59c ded8f5ae6af64ec5f6e6c25e101b76580bc4a776dd5e909ce92c5cc23241 fb72bacf5ec93550b6ba3013554ca9088cced45a8cc60029f3a7ecc53be5 eafb169059ab4b73500668600dc145c92a63c93c47a00c4a6bb050630d3f 09bbf0a56fb590ea0f3264010097f2c755a7f47587c46c0e8f48def4ba1c 0d1792d73abaff05f2efa723ced107231f1ea2dd28c5ebfb2a2c1dc8829f 557adf120cec34a9eb62e36d03175564999fcbf6d74d2396dcc632998884 69ec81b3ca10bf1c51e819396959e76d1e7a7b71c546e9169d885af04a80 1e05222aefc8ccb775cbf6991569a1a5226271271599189a83f21cbab3ed bf359eafcc058eade8388d360532c962078867b4a024fc2453e29fea95fc 859a0cec970180796f5b481f8375d7184418e26fc03ebd4d1bc9a902bcd9 52a0db1296355a2fe09a65f7fc344a52e20b5191305fff4ccc97325e2fff 56334af2a34f2474fde3674032387c08fceec52f19c4f73246dd303af997 1ca8c27b6fde3cd2b6d3267ec82dd369beaa19c08beb2e02113cc7e93e39 88cbd6657b210d6fe796f0325ecc3105f46d06364385e609475b967e52db 4e4348e39d519ceac21357600893199a01d7359c8e454c102ec69744b07b 87fe539f0471a474a66ba6025b12688b4da26561ac6d074a2d3c8559a00e 9b8e26cd64afbaf673b83a89c87eddf46226ae4173af0964b5dc3d917eb2 45629537828d8eb0b2a6adc511d268db029b1c42cd36e61ba324894ae433 6f3febd08bae3234e3751c1f216b22c5234c814cdcd5a5f09f5c7a0ab02e 6ad3d02ee4025f63f9139ee70ab5f5d2985ce11b38e0143add025ee46f0c 2a1db3ddcaa1f85c068903458541ce7ea038aa238cc6f40085659dda05c9 f3e59ef16e4b140777cec06ba3890634f766b44f450b98c3323381e79b4a bceef7852bc584cfa32115c193d207940a8f0dd10081068188fb47877bc5 7209e4818917d5d619b7a71620f9f5694f8159f114b6bb9fb357b9c50637 97ce14b0dc6a763e80baf1e2478599beef699e9f2b7c03b867a59e615ad4 3ddd1eabc5ca3cd49cfb895d38ee79a292554cd41d16066b06b0c962e64e aeec8c3869537215c567fee6f356cd461024bf044af06007ca6c07271780 51eae2b5eb297ade5673aeae031a8dc7bfa4238b4948b2bdb8a7ad2c8999 825b4dbb7e5ef34b3365dcc71c6c44cb7a6cc01b65a8171f0bdc4a4a76b0 579aba33c438cf7f10b09e546ba21ef3fb29cb387bc8e9c7f6239801bfb5 7052eed5c7ad75ed51690ee5914d367ccea4269d955c27f1f0f64d1e4f16 9bdb8621918617433cf82d7080cfe820e4f28dc5cb2f9cb6e789928407dd afc4270d7d5e34e4c0cbd3e1822b4986916fac9fb6d5df23bfef93db2d7a 2e8916c4239a13f19cf63892f045d065bcf5c8403d335ac0fe41d4286f00 c3d89adc24e17420f797ee45749c72718bea13c243a91eb76c2159dd85bb b6a7a9233a03d5dbed7cf7a7d204cb61a40cb657886d18a29470509bc67d 5afc33894746efbd5c68e491788f1783b9a176ab9b4835803b9b519098d4 ca52deb18c099bba120185f86254aa8c5e42eb9a6c344924f5bcd62ae45d 3c490e2de6e57d3bd2407faf5549fb7bdab9252d2e9caa0ff0b7561046b5 ea7174db13068e596dc52d6b9fef5249839cbd4320f118654a90eb1c9df0 0e07d9526c5c7a1ed71fb258b47ac6d2638db0757812a271f5e20b6dcecf c0b09ce8d92e63719281f666906c8785873935fe88852564ebdf1cc8235c c3f5950cb7478cd3c41eee53fe028d963a48eb599426fbb6bbde891e8d4b 9de69a4fb790a4f97887497bb36432e49f83862d6c75567381d2dd409438 6c01d0cbb429187bc0bb3e32523dadaddbc00c390875fbf5893a05d0685a 02a4bcfb0b7b86d5b5231b0418717379417d027f30d3717a2301cadedf99 c73738abf2e90d1632e60239e75ac1421b5dfd09da8f0f6cfe3c9144974e 1ef3923d52e2fb968abe3b3de27865f2d929cf844f9cd60de0e17b10de17 713350a859ceea437629fa3121fcc1860c404beaac5e66a9e915b305fcfa 6d4f04c30a7cb5f935c6678d3cd3feafa1cb6ea8603d3474d92d670400ba 0940a09033a3dc382340473c57461561b8477d175699e6582f7b80a527ba 3f664b3795404b69867e449e6accbe2a76006b3f94ac73127538944340c8 370747d89df000db870a15e455b8208d3467a726dbc6d723fdeab51af860 adea1f8d7460c464873800cb36ef56fe58e0ac3c65083ff6150739d15526 a9c26c47c38890a0736dca6516cf1ea4846d4cc05b4c2a06d0568d8bc40d 95d3dbb3e05797f697ff00121c8e76377717d4fafaa7c22d42ad04262546 ea908c3f2dec39d0dd73ae3ff7cf1eb0dff7d1f8911d5e1a1e82b5c743d9 2138caec847731416d6c47683f9a02295057a3bd338fca0b115daa7c4631 e4f60c1aaab81a796a579ff1ac9dfa8a63e1c46f20fec5c2c1f682c9985a 23b1f5c3e8db57e4ddb241f29dcf7dbeb4205f9282d042b9bb11d770bd85 bc13b4dc753d6353c3d5c4b678d5050b768e060668b7e6f860b38d611575 8805dac2319d6244baf0f52f76a3054929e3410b477f7652639a516fe7f3 5499fbe072ffea5f14cbc63226e82b1f9721fbf042887fdddc63d72be1b6 ce103589a17ff220b0928ba0398b2b3005ecc42837b019cd3db3fe583bf1 4209f4d6cb18b44a97fa259ab5d5d50a6b51056255f39df783e160bdbd52 1f62dc07868df941db96e4de54dd85e689eb7fd041097102290386ea422e 4e3ae3377d05348c8afb7f0f7bcc256916c49537ffc3dd9af81a4ab070d3 ee23e07881182a9e455cf5fe9c73ee5f64e18887cd987959967bcae04045 e11809812a7c8e76cee5a4b24d9d22d647eeafc86a0e178d76bdf7c0f29e b5eecdaf8734ab4acae5d94471d281bbb350d87a77342abc9f04d335e562 2c73d348560a95112e778fa0bdcfa887a4100b2c71ea6f42abb43b701b68 1e2513bdaf1b21ab8baed2288bd2fcf86fa76a235c907002c5b07eba85f1 60892ab89dd92f184a9090568a3b4878b86c96ecc0d4fe1d6c696b6123ca 55f5945eeb19420cee8e6b900d1c31d2145b01aa152bbe93ed98231dc9fb 59bc09f17b678ae6eb13c5830c6dd9858c4fbfd8ecb043269c87829755d4 30ec0e47e38e374de01977c1c86c97281e1f953681ccd9df78b958a442dd eeed85815839dd05f4ae5dc5960d7f1e3bb89240c64a696910de05bc8bd3 437670bfe89cedfb9f22b6234cbe21f9414d3a4fba3e64d5a480518efb63 59bc32a53912e08cc1c848ddb9e8fc23e1d287a8882fd833b8849f0021fc cea764bcecc059d22b71300318e52e6531810153b5d3f12b8202ecd58fa2 0da6276164e443eacc3421f57ddfb57d45dbedbf0808293df296881e2621 9f270a468ea69591d5ee5fae92a913e2905f011bcd0dc7b794cc8b1c8d16 6ef115e4a0f3678e9e53c936c9825e30e3ed62e689c67f6c31bf282a714f 41d988a0f35a0a01b8c7d0a3deba0d947d0a7ca5a321e379837b2b0175fc 6cd46d2dd2b0c6642ddd1496792c4b1dfae6011af1651499027a7cd1e5ab 4f52ebaac9c600bef926f955c9d8da1a5eaf4698a71fc0fc709530365f02 5a558747e11a40c121a130a01303f668532386d0c9a576937c198547b4dd 4f33c252cbfe9d906fc940c56eeaa242c08a5ec3b44f7d8f42b3d94fb53b 5a4a8c9cb11f6bb46b153f00b6d58ca6a0314cb16e4b65d5b71c739c0d42 59bd30a21345abb5d78573a8fb0709945e5f536d30689663b31e64309843 28e76309ec9d0b816dff6696d34a564f694b2e8b0ad62d54fc97d2d09ca9 457975bd86493f306be8ae6256f58ffd06b1d9066a4b3ad2646e4943fda6 f13163cabcff581f8b92d5f33edf512bc80abc2c843552d7c7dc2364bdee fadfee5f842c1009817f1153bf092b3191eeaba2099136265052ca1992f7 93a85b1fe1c1acd6d6b5ab7b169c05bc65bba8a8d47d01f5c4b0147a97ca 156cee70d33abb5e58aa24669b240540fd1de6671ef067a3fcc2da39337f fd87e67d34fd042424a4b35a1f893de8976976fa6a28f378665f0c51237f 5b83294b9e898523be5bd0920f1457c480dc88b97f25105a04aec0d09c6a ad915de6b2d5b8f001ef68d322bf421c98205483b22f7b62797e1236debe 0196be1a423b34da6cc41a1508dde499b5ba7be07bde225a657888033e08 134bf424c539ea2666b3c13202b5065dde064d644c13a51a6e0983d04273 23084c00bcab73201f74ccdae02e951de42dd44039891601fab4457b4b00 5551607910d221380656b1ecdb91f49a963e9f90f4a84668f2da5ee97aec 5daafed5d1b76ec9f2b663d3ff10b350fba44bc4208388cf3084a26d2a72 00a0f9e59330b873e582614ed9625f33b15c32e54f0f26c8c4b272612ced 73b705f081438218b9ebe6a934a443b8667726fdc4ac2a1d3e250c257c6f b7f525b577852262be1c11e65c99b065fa49df1658e2246c6579c2c3d440 86786f5df550f75c97dcd42299d3ff4fe369dafc86c6ffb8b4bb0ed255f0 899042b4a5a20e34480706fb57c6aa3c66633fc98f1726ee1ed94ebe80c9 b80b083bebe029669ab2a9aab869f8bbab90f2e6b3e8118091fc8ec6e4a7 42e03b9697feac3bd484f8e54d535f2bbf369a35b903366fc07d51797d63 431f966540ce46e0fa1f4fa96fd80d41cfaab0564869925d4c6661883998 6ec2d39a3f31d27b59b3f89ff50ad87cf6d246e961813d6cda8eacb063a5 7071d27b6894f0b6261bdd3dba107819e8b0069b95ac6df2825827fe2a6c 008894d586edda33d4e4bb73a197fc0e04da8d91e5e58a4a8e79be380e4f 88f66faffbfb92d4187777c3ac11641c0ee6bbc12f9e25d2e02d73c8be72 13edb765d4df3a6926ea2365c3077b5eec405f8c8522955900656be71840 6bf141e7880d3272fa6853247fc1bc7850b88cf77167b147c90a2b33dca0 217ef653dbadbe88d3ccaba4f125d7abce5e1e255cb65510ed58ef42abe3 96846e6a35afd0296943d1c3be501f4d4969a088cc28b9e34734430fdc9a 3a2d5d9246e6b74345112a0168e1b4475a22efe028137d3a8531b1f7b290 544ca21c9369cfc0ccf0f223ad60480dcd7de406d3a435d47d31032a05df 9925720f5d75a8b0fdb3ddc452181b9365941f774f8cb12f064b3c2a0104 677b77bd9ed44f3362220e6c14f71fd42860f931703db69b9eb225f56be5 1dded349993c82c9ac54c58f516cec603395433d7c1f91ac0477c9d291ce c2d7408a67846ac08e5fa57f50e7dddffafb856335620e3111ee5f8e7833 3e070845aab51c52a4aabe1a4fccd28478709b6fb7827aa068ba2081409a 396dabd3b0b7fef9adebbf21be845c7ea7eaa6a08a444a133cb40e5eca88 bf5ceff2df181e75499514cb883772e46a6a88fedf8f42a8df053f379e89 da985d1baf955d9c2180c61fe8d389d2f783c6ec4742b97ecf86dbd8df35 a1b8b32bc3babd586f130fc78d0a458a9236dd38cfef1b5fd99d36c64c67 b226214cd24e236d2185a83dc7c17de1fa7b5ef4a829739aa99e2c4df22f 7a9725c98ff1ef497ad9df4e23a07f6c0e13217ce2bbcea3abee7719d140 37b7aeff5a8cd2a14f96270c2575010ddff8544fe3fdb7b2919438fa2e82 c61020ce4f53b6bc089f350e33dcf757ce8ae30fc87e2f521983ee484aae 9b1780e303c281760cb7011ae14542977434e7d4ebf847e89b9d7fe480a4 4e560371ecd82280f5ab4730e067ef1dd2458e67e5d5a688cb59376e46db ea7f6d01a4f79a1bbd8f74166479ce63d79ea021ae3f978734d32b4af080 3c193d584b40127a3517ff31a18a13be94b639b600b015975dbf25fa6337 0777e1d4aaef381da47d2fe453b23dfbec0c427a274651972cd32d6aec68 8f022334b0cc1b1e20fe5ace2ff5b8428a80323074545bbb66e9a06aa07a 635fc77f98c1b3a36fdfb6ebb598c122d8170ea4664a5313496c705ad1ff 7f8cee9e4cd242ac1d6e5feaf05665605fa6f4f66919c7f17bc4cedb736c 46e8e814b129c358040ea8b2bcd87c537d7a72ea5ccd322f7133360aee10 8cb788aef19077cbfede0424d7490a9b9c095aa5208b2eb17be00b2932d1 5be57b0fc0332b9c0718fddee1ec98fd592d9ff45206a8c5fe3893d921e3 65786061ab3e3f3eecab58eea5daff02758fb7acbd8fbedb5e7ed25a19cd 2e8030b8b60670f919b0ef0d0f77d426fc228944465a8cc147e5fe684007 c5961f2350ab38e031b37788add075c99a4d8517394b5f007d93bf7d4f6e 26d0ca16818e1bd015c951ceea444af836f3e54e5a717d154262e2e94c13 ac246670c6e6a2ccf5574abb752a70f54c36dc938a1cd193ad898bdbbffb 0686077a0d76b96ee02aa45ed3e3f1d7d8726515d5dcc296ed1eaa36b436 b9404df2ee1edfcb0762e3c9c3b3a9713b485f276e6adc283fb31a8f0c8e 30b12c9fb01bc2848f2b87e76a934ad5583fccb0be2077bf6805e7bfa2b3 226375c2c1c57e58f83c85cc394068a7798612dc47fc420f10a6131f0bb5 29c8c7f1ce725a9c2d63108116b3f486066bf441be65580d0f7357b39203 414ad2e1edc5de3f8bc89e35d40bbf4343dd7f794f71c23bb1f544dc3df7 1b271ea1a04936481c06dba58e0c14a3b4c765311e6f9a525dda70fcd36a 500e9592a2d09a724f58b1bdcb9f6bee2202c5c34bd4dab4fda371b263c6 380baa85887025b1b3f82ee02cb9df0a358f469131cc6a7c7d1090184998 5cc05234cd313da57093c2b05339ea4a33efcbae7c6fea6e83b675e628aa e9ee04d93aa05002dbdfac3ec439134741d3b5832ec59b2ed54cdc010ab3 f2f775cffa46a7f1ad148b85122ced80c71bda3609d646de4fcfa6eea599 9a2d7253a2a2935b8190ea39fd8b8b23337b3ba3d2b7b28c974bdcbae3ce 23742143bf744e6d3bfa0c6b0de3a329ae49972cdc2a5a54cfedd4c37622 3ae6fb11566d346be71c4d942e47cc0587bb1dfdf5d4dbd2c0db44b1404a a3652d2c49cb00779dfcb3b9723a6cd46048b1c5d6fd1c6264d9c1ce8e55 b7f5314c2ad4764d690d6c6f67c80c87e3ba1831876e4602c2eccdfa3fc1 f5e38630316cf4b1a78c8c19012a7c42f955736074758a50949f7fe56ff2 0c75007f00ef89167908246b636a499d1067be560dd538982c0b432dce25 150d9cf51b3e2b376e428bec1355d42d3418fdd8cdcf153213fba77c0211 aeaf3bb5bf9d8aecaa2be9fc22bf59ab04b9b8727570033a31c796f81825 91a972ebf01b0f58b27cda24dc4d3ebe9614b5396f3fab6760b7a47abb28 c639dc7675e27f8984bb07ad370be631eee6c6bff903f27646a5b12b2c9f 8fc2446ed6d29afbe34d52a0b5aa0cd25c15e65416031bb91f2cf9a842dc b6dc7756423dfd187d624ee3fcb3eca3bd9e64ccd5293a4ed62ab25ef0d3 f4653d94dd4a12913ecf5819b1992d22810cf648949d26bf4b752e1d8f70 ab4240cdc4a30790a98fa8a7b80e8ebabe343fdaeba41a10d0554c250182 d04beacdccdcfb6f779b88926fed7116eebc9f9e0e6910d3b3a480785a21 17314bf06bd22256baaab66a2ce4bb0a4d585b2d52f8ac37445d78fba186 0fe594bbda1207c72cf7a37d14a5ea9b9503279771af9c74bd7375e55172 adf6d8abcc525f1bb199f8255961d075020c0ac6abf4be0ae65e2123faf1 c9beb33832e08df28b0e25e9dc6dc8b86965998c259c3e1dd05996c030bd 203680588ddd680de3fc7dcd6bdd329ec679597e4408d248d610778bc286 8e9aa3ffb1b40b8d3891cd03e726b1ea1d7e6e59157df0bdd85a67b35c5c e671ac595d95fb5a9906d73e24e5e04c6ed089747163585c7a89596a37ef aaca6a7eefc794fc65800be79f5e0824afb0c43030b3bdb342a9b4f05463 66d93f2b36998dedb85a8ce186a78bb32fb484cabe8674dafa05dabda180 fbc38eaa84d4e37b4d17e7717a29233a296e95ef26b04bcde0c0196f96bd deae6febc60e9ef06fa12faa16dae0178d04527c596c35ab31125cf17b23 aeb68f840da1465205e482faa17388f63d18c8f656ba94a1a8e8c74ba8b0 bbc8ba454d3b42e85bbcbf8d22fb008be86e9dd22c95d13cf0a471c207b2 25a4226265d68c8aaa1746e4eeea667f5f6aea68fdcc91de8abd883386d2 a1a8de7b79535db2aff83c13af40e46fae1f9229e9a07b504b3ad1a3cfd9 24c0b7b0f80c59d9cfcd0019b10bf8000401155bb62145d56118b3de28fa 5a980a9c5aa1dfdb7c9921d72145fd64fa623cf7f821229e2f5642a66ef5 21f3d73e111761eee04638ebd933f3b1afcf9a14cdf8e39a956c1bad533c c9bdb0c15dfeaae14032839079ab552ad647685826ac145195576c184fcd ae44fc524d74d34b5b43bb9885b8e3f0ed130a708760e92650f868682140 4479a88ab16cc0fa2ed5bb2cd3bcc0b3bbc37644ec846b5fa08d533a4b3a 730dd4b6e94171526b29b7f89d0501accd6ff70a20451877fd5c0f0ad691 51be0d127502db63841b29e96cb3cdf00ba2e4d43c494be2d97319a0009d a3112ca70713ac18562f8e1f08c787edd1346c0f43c1045d3fb5c67ca494 8f1a4b3b120d3f8cf0aa18a7e642c5e3bf38e960f207859a922e4df90c39 a0d213aa61b31e7d389f6c6ed525a1b5088913134fb8670291e624622c1e 3365e85925f58b68cc55038a1ddfe30b6e1c7f91138911622179bd2294aa ee3b46bb141271e11e059abe673e1d7c76577ee1ea7e991c88a191ca1a98 7a2ced3be8c70bc5f9b263b756721e1e3e2a850c4682a16a7b4610780a2b ded9da273cb7443cb59a6d7a0159c254012c4b6231fff238ce4e11eff921 41366e8c25cfa8c8af0c80a809adb56233ed205de8b00c233a1d666c0820 4244c0f0d225e38c85344f9247e1ac59d465b74109ba18fd044912315a3a b58c807c22a3e2f07ddd4c78c51f4e68f1a85a1ab47d180ae37394316ee5 13e32f8b3a9416bf9648d5556791e5d4fde3d1f9f1e4a0135c649de3e730 8933dbbab840f5e7aca82f962619688d9d92fc10f01ab5e461689b163de8 530869a733eded113c1b4bd50663f34e2f12ed35797cc6457f90456fd5d2 4f66cbc0d73a5c01a21892518fff09a31c5d0a69283a671fd0ed0aa9bd8f 5b9000e0de5d46e7510352c45a663b418d5f5ff9ef32088417e05c668628 6dd141316ebef48bbbb11a7fd97bfeaae428263ec2c852f248935c174969 b043671376a3e9fef9d477cc78533d6c6eed5249454e5d70ce3b2884ddd4 0f9e7079ac840a59bad2770a04a74625e3fc5f609e903feba616554da424 3bb389351b55923a7132b0465fe4bdf29347b091e3dd790e49f9ab22efc4 174582994879f2d6cb5c0fcb7c075d4ad35ca15c50cd05b5125028fb01b1 0a946e47907ee7dfee9816a4baacf58c6c267586592927bb42f798215c07 cbb8705900d00a6cb771e0b50394307f5afc0e696bae7ceb275825cf4bd2 72cdc83e4c92c1a74ba4e49f36b665f22558e50bf2508d47d00a3db176d0 74a97ac384bf912f15a11d79a1d834765f4ba678c00acd9ba9f2fed3ba0a 824a76b91594fc57517667a28ab6ecb370a9c99e79a6c1e26ac0512fa455 11a188dea762acdb3b4c1d00238545cd8f66845444b9389b3386cd1a4a99 28c199bc903895b40f7a4770117ba88994d3b0bda82918ac4c657a45626b cfb3c22da3855d3774f75051b3d743afefd9d759140c9509d7cab68497a0 9f2ac7856ffa0befd13e74bcc5e3dd8ed7f0b5f31ad45068284be0898f44 65dc13bf17e4ad69e2b8e490ec2670e184ab81b1e96663cedf9533257cbe cb29ebf27089f6478f17d12ab93e521f8a31c3f631d18dd3506a00019e86 6112a6239fe5bbdaf15e88c1fec877a8bd8d1d02038f28159a7b18fc04d9 15053b84a9d1a8568c44ac1b25ace3dbe913410bc340f13200e05892bd23 efd7888ba0f8a19f71b025cba05f1c52d84e7af93cff7aeee6692c08aec4 4a3ae446e27048b4dff167a4d1270493a28c84e72f8c915bd95cb67d5e07 ac855ef06750225071764e1f85a46a62b0778fa0d16edf3bb714c5a0e259 aec71c6d9bf808356bce7219ace6bc8750658903d58ba77d787c4130e12e fedd4eadc9dcf60758ca4f6d1804d36e3e8dcce451522535be0a136231b2 8b60ca7285d9573cf125991a07e1b9b747b0c27f816dfdd391c44610b58e 575b415e722e4b2983d05b1952e878a4ac1666c9ed613de46fcf148b14de c380b11f8061f3de38b92015878a504cda1238679db31911fe82a0b8d48b 8c1b7258afdd18261966ae42b93079e9fba683a957188f096a9e219b7fed e7bfd55f4ce5ae3c57f5ad7314278a17858eb68766b2383c69de620cf450 40936e9d2e1317ed4a711ca32da934d1e00d2c54792bd7720d5a5439758e 2e9307c94255f8e33be837f43768c85c2ff0774dfe18a1f3cb4d8544e4aa 8fc72aecb801df075f22773dbc8c7aec5635bc4750d0a2392307dad6bbf5 84d065774dfc0725d4c56fba356eda94ea9538639f01bdf8e5963fc665c0 159a3117e345acb1eb6a4a3699c54cf096bf369782c8ebf62de423c8235b 4db3ff59cf130c6f9c856912022441946d703baff74848cf0bbb16edf93d 0351de8d9a7240d3429ae4f1268be3ae553983c415cfc43226fb5c813f17 2f440922e73cffbe4201add64f01c37ffc36e9b746b85466566649fc71bb 2db6f88a1241e9b072980d136bd8baf9be30fcf86e5a66e64daf98f03379 8d8f0c19db4aa3de7300996b11292c7bb67b88eb3dbd9a9c5c2b9f37e13d 7c1c8d66e6df212ab2ac7dde58ba5897bf3a6e4a607ef1ac00b062bcad0a 20da8dd0557726496bb7c55137f373531c620ff7822d0d2cda8ec4aa2b5c 70a01d39be75a40e7e7dd4868905a358461fd451d650a6c48367dcb60d5f 884425b4c4eab84749646810c829924dee4a8fdb49e084d013037e2f9fa7 eefcd4ab8c7315791f6e77c3ac749ace6216ae55576c2b7f6138c7d10940 c805be36c488efa5442769118afbba36fe78acb2b702eccc44a5de3f20eb 0a6c3a3ee947e8fee213f034adb2195b84cdfa089063eaef5e489583c42e 9475cc5dfaed3b90aac4f809cf9fe52a68a52f57c329b7d5b191bb4d7503 88398011eaf81116cf82102af320c92a8f4523f808d208cefe1cd7c4c1e3 6af03028dc7bcf6129e82ebe328c62e8b851775bb4dbb99314bc4b0c4b4a 0668d6e891f4b5cafee3cca709b50efbdc63a6e4f0b645c24129567e4aa9 76fedf285abec1b21a94e1abe140f54f1605a05c3d432a316fe92f742e99 0d16396288a812a9951114d8cb688ee94b7c4977e398e24f0da3674610de 6b834adf3ba0d324a395857f1f6b613251da72e557e0b501566b40a6ba2f c33e327de7ee6ec6306370fe89d1068b6e21d3fd16c643e75e8daef9e21d 4c4d1ad5ebc20b59a4ec8d4871aaf61afbe61249b9a7c98cb11713f757bd 7cc495e990c8f4c02f167643226fc7bc519b6ad13c108d0fcf6011526211 287149179cb3a365beabd956988b7427a6c99e3138cfca940bd9a100cc42 29a4e39394f13170e020f0201d3e12fd8733db20d6429397162fa80cf651 8df73293fcf713c0718f4cee898e4458d20fcabd7df1d515160dea8ee657 ba23b9cfa04b77e9735ea8a28630f4b59c6c0c880454d83163276d15a44c 54954e0db01ab948e5d43dc3d9c35188b5985f90d3836e98391cb158e077 dfa96ac6327cff10098b0bd0251c3f8d6b52a30df2057ee7e7ef476df08d a94f6d7205db461c59a53746295d972453d35259ae58e9c84aba5ce78edc 9dc3a3bbbf9a8476fed3dc7fb0caeea41e4f9133df0f6fdfca03fc0a0929 b8c9aae471306e8f5d6a4acffaf9cad054ba131f95480d9c39ac587d772a 42a5eb6804e1949034bb2797d26dafd17869bfcb6ef7ebc86534cfc47285 0a387e630adf1f44ef3030414a043d1a470b4243df8f4f2167ad1d41fc46 4ff6a2dde946a45c40b22dfbd0d695e4a4e23c33df35a63131d52cea49c3 8b6c2af7ff8661188fad07c1b9b60a8abd8c58654a6c7f1569095744b6b5 eaadebb9bb84f3ea89691699132d550b035f290d98d0912d733b4953b84c 8c0ce36a84a319d73ed69ada4710e2a10e0ad59217c7168ed9dbb99e52db af904e5ab280122b7d9294970ad8f0c502540b15db3a7c92be004cd2ac7f b671a76002cad472e75ee188cfbd6a5296b2b5bafea24be23df32c373699 f39640cedd846f0d3c179cb02e1cdbee87fc0a64840510d3533f7b73c95c 6cd25cf46d53dc8f75166e2a8e54bbd82af532c519c3e53dd5c6544e9737 300121fe0c63d4373cc944fdba943736a104c657c0bfe84c06985241e11c beacac70c1378ab30ba5d3a5c93f04b0626f5a0e055efc1ed8720900e6d4 a4914c7d0630e9ed0e6bf98a72eb9381a3d93e7200742fb65bae28852212 72beecbe7b24775f44bdc9a3708e84bb691732af1f39f7243d600cf7ee9b 25c5a2a52b0f1abe0e6a984590c7e430ccfc8524fa7f1e20c92ee10d7763 d096b5b792d4086c8dd2bafea15ad19ab754c08a2f8119cd0733c33d47ea 1d84794fc47a2f83439ac4a65eae7525de8745b2971bee811686073e55b1 8708945e0445d695dedaab56f5aa1fa29b46575f995bf604fc45ae5dc043 11952cccde3c99e2fa68704fc47308add2fc3f83cb63b2b873c213eb2e0f 23548de52b3908cd31473213c9eb64550ee1908ab3c2f134014df33c3453 6c17d812906af49c7550904e59902edb5153d3e86e649e372940e9223d32 95ccde0807c959565b5426ca1ba959dd3a64b6357a0789de5473ba1175d6 7a53d9db968d9682febd4c2a01cf28e6bd7e5a1411f488f9bc571de02100 3d988de831a3d6f1e51faecc90029b527befd59da843e58ba9f4d0ac47d7 9e91c56cc48c5ad0075911df2c7f74c3826fa7dcab6f66f4923a19e4389d c4e8f0a2004824482a4a4cb96fa431d251a51f035258b90d8ce3651914b3 c9d955b77f36b2ce03f8cbdd0793f1f2eb7116f24035f333f3d1a6097a1a eb710546a09c9babee2881eb44a09cd2d19251ca8044b78cf31c6d8ace83 c55800bf5c3b1041a654be76ae2720b22900315e0ad2e933be9945e47e6c a6b7477a94cc9582274e5c894aecd1b544856b68c72c574e506002519545 32bd9ec00aae146bb1048dfc0a06ffe8a2f2c0a2807a6954b455be078c28 9b5af21cdf2dee0368b6b88590edf81357c3cc4ee316523c1c0f6edce339 3a5acadafc56dc6565ef554b8ccbdef6954385165b8647af8c7cf267845d d42e2a8df493f56f534500c7d82149ca21c6a2944ec91c1730c63d4329e5 0fbe42508116deb021753abb64ab752c45e00ad697d99c0ddff09eafaa8d b9189f5ae7fd4cfc58f9098d0f67ecc489714a7d7684e85b02c0a5b8d598 ef32a79137e11a12c8c14cfcc0bda0effa2f2c2398b0cdd5eafc0966b1cc 6cb0aa51f225fd25c49949fe9f78b189fe698e4fd37f755b1e9ad12d807e 16cbfd671e37494ddc407630db77f07156023b5b47f0a4799b9649028c56 0216750a6a7c89c7c3cc0a2fad201113acb18eb0ba31bce9b0631abc96a5 84f4d4f78c0d7082f743e899b1c012ecec31e499963ebbbdfb97d92c99e5 63c8e95d8d3702e4ed816989191ecc46d155c285bdbdfc7b283c29b0e5c8 00345dd40bccc07abdff173e1596170734a3d91d892509e08a948fc127e2 c5de525778b2fd0fc0841626f81e25c0de7473fa627427ef0e6a20e39124 8cd9cf3100209bb173d56daf8c452a388f30d8d9615276e47620acc19431 67404aaeb2fe696c36489e21878187df01b45a888f34045e61114a4946e2 9c16a2036d7789b8e46c2437754fb1027cbd105a8a5cb1b6efe2b660dcc9 7b43c72b08c633f968bb54996ee8452b8ad93b2e73a8ed46e1e173e6f7c4 51bbccdd56e83ca7aee834d0fa12a459d472c15a53a15dd753f93c25731e 9d653820fb3eea99577aaa86761cb9bcb4b0400aa7f8ff4339c4f0be3880 5e2f1a4685319aad1a882532b7df962483d6ec9a47b8ae11084513f49816 caaf4decaa70460031e7ff9fbbc13fba3c12b63aec3285b7467fbc399ce6 5820a7bd0238f314fd15b1f9b0d28a5ef043e5b27aa4b3e7434fc40a923c 5b23debee9613a09c48ebb05b8106c9b5fceff7aa93871fb90016bd72ae8 c59bcd5f5e8e912faf1894906ffcbcc0fe34a67f2b0905c56740858105d4 8ea5f5e2ede29c596acb85a60c5a6c058504812fa90fb05211cb6de6d95d 0098c0cbcd8fd37951de11a16750db13323eb4b961a4dbf93bae3232471d 654a4e3b7a0a9fc87686fc22c89b06f3ed5d7fae5d0615b334a7fe5b95cb 03c748b2f02dcbdd253c944243115882318e4b74da5c4c5ac663bdce9580 3f6741cf50432b1c5564107dd05ee0b6b7ad112080fc65c480253d38b2a5 cb086bc8fa2e362e3593d4f070cb16ee0cfde3c50c39d5689d2cf5cd5657 804641d8525edc36eb9fab819ff549270f16a74f6ebbd8a97922aeb99982 dff05d3223222d04fc9a9c385db246f41449532a1be9041a646bcd72f4d3 a2e6820a83292c7d47484110cc62f14e5c08cd42af83f7bc2d64a0956e0e bd7015ba7aa3bcec0fcd5885308af509aed402f1396c7a25e47eb25920cf e88f95b7ff66d6d50a9eefc2d66f3d1392cc12cba26378f05a53a4c47d44 b8006c6aa31931bd8f442c13a0c21e48c5868a1c275a3e84ad5f27a2c9ff e16ed8ea7d2b3725e2fc31b07dfbe9bf04a07dc8228619785077d99137b4 f7cde57aa7490cc258c2b2d1c4c920f33fd155a6fd1bc79c26548be69d8e 2f50e52f43760fd522fc605ab356a0e1b88bd2a6dad4fd981e59063dc76b ea561592660425ce3950a1a8ae22a82304bc1ea0542a943528773a55b4db a01a24ab34fb45021d9799bf29656b2d708982c70f68b5942594d9e7d9c4 b8fc7d16f31fa7da05209f4b32c75b2ef4d1cb485bf83339b4dd4a3b06b5 61780dabdb959024204d1b10c21af5b53ccf11576a5bed494153051ec6fc 896be696600dee78061f661fa00d32020cbeeedab18e432dc785fac8b07f 47d0c5ac0d6553f5628eb560902806d4132bba6e0c22003060ea45d43740 26d0009e231be79e948299076c3a020d3ccf8a96e6f5b781027d75490b10 ea64067692cc1742295ff01e173bd3d92fedb3a5256e81341b608919e4fb 9035390372d560849bf0134db57d43e245f9726a8d3bf16edc36c9945772 9cc21eb0d636b393890d51c696b6234c04d4a709bdd848174c26de3a1029 0ae7e3e0e00ad67f2c47c097465d4f9fb72ae2cd781781d876cc4fad8f4d d32487481c1258b272b9457621680d67a0dfde705b92de4c9027a2159cf3 95d1518c1fb970fa566c3eaccbe5bebbc67eea26b01c8c3e763ca3402054 4eb3efb615e184287d005bf513d83f5059b451184950bc33725cd383921f 1101263af8f68ae528f0b8fd58b23ff4e33377ff4cd42b7bb862c4f24cf3 5b78c1a06a5991092be70afbe763d988584ca8e27a45f202ea76c5bbad75 eba84a8e687701d2ffa6ebdb8b892fe0b7d2f6bb22a9e63d01db96f48afa 536cdb363d3294c6b912bc8393afe6cd0933c2fb69c3bb9b0247a69c9ce9 2ccbb86a319cbafe871d86eb1beff057df1740d5d78943b71eedfb5d10be a9c9b5f5b256428f8483bdfb74446f01e19704bb63ff46b89ac1ad1ea9e6 b8167740d92824b70d10e62bf91e5f195d3c5b34c89ebb76dd0c3ae81583 e62b30fa89bc91505ddde2ba491c88b2cb4fe1ffe969fa639c731cdf8bc4 f4026c95877683dffa4ca845cf3ec817262482bb4027bb7e5b90c2c56153 529f62fc54d2b56c951cda1dae3bd3c9b168bc93cb7508c95bc0b9681f91 661d8d201f655701572e90de07ce20b27f5f91c66216e66a89a39c0d7080 5dcda7789d3e4bb292e193464737d7254bc70b93a5c9b4c49bfeef3df5fa 2d333eef22d067df635e6264d151137948e44cbffce8b7a2f85ecf808e3f 4f8f1eae3cc3df13da3e92911910e92b5ff641155180be4c77f5ec0ccf0a d2e7395faba6b848b3883d2d07573fbd446b5f9718ea09d1918bab4487b8 195b5436c81767635525ba753ca7423a9783ffea585e9932fcbbf6efaaed d1f9f1e4a0135c64e8cec283876678cd568f75a116ac9c757528625176a3 a8bc8b63b7b9e8cd06a9b60d00c5c21f6a1dab66c7802110737b3e1ce8ab a5d14061b604c18d7fcf6dca718c594259bd74547250c0d47b30e3297dbb 05c50f4128b83f58fa96321e6c1fe34d5296e11bfb4cc550cd80a1214d82 1c04be92b7aeee3ef4e4b70e627635617d5496dc3281fb474718e5497303 199bdcbc3318423e0c2227795ff34923772c7f53e6cd0811da7d2c231018 47541e5d6a2439b2313f7ecf5f12d731d0de9db8bd45b08e1ab129eec0d4 eab8ec632d0e5176ad67ea81c681b9203a4988d22db6b6059f3fd8870889 664e1f888265ed3b316219dfbe24a7d4254cc2f4981ae42bd78c73326019 c504eda3a4d3fd181a70dd5085883c11637c78b82b5fc78e27878b53208c 5593a52114d83c37026041f801d950a69bf9cbc9b75b12813eadd695e65c 1583254b25d17403fa4d59f518c572f8ac90a386c9b63cb662f50d092cdf 374e5c14bd92e50ff46e4fef2d8a9e3da367e7d3f3ba17400d5445463992 74fbc801c11e85e8d10450ac0bea7a468f1ba990b4d959292e40bbc11d25 30e42e65356719a85c76efcc6ea9a36029411ca1225b11448115c16d510c 0456ecca598ecdc3eded05152b669d0e7ff3e80372f23e098c6d02eb9e5a fb256359405bfc81cc9a927550e4994c9dee0815afffaf2d0a5fd3ece4f9 057bc6fe048761f74d81057eef2b4fbed38f8cf6df765975d3cc5131093f 757c390e1e324c159a70472d784e49e6ccb75af3f303f9ca91e2eca0664a 4b4ddd83256e22753f1fbf2b5b1e73779390c8c582e1113acfdb212c1a9a a7537ddb197c3c36c642657a5c7242b6d25976bd15e1ac607db186bc2ffb 480b1c95b1f71faf1903c864e036ddb42a681f2318dc212b1be3a8fd781d ba69daf6390ebe299a5d57d596e24b737c529e48d7d8ae8f29d897eddd5c fd970a7502efe9dff7a8def548d07dfcad7cf7171f14464ed185ca1ca7f8 12647d82f37267f9340b4b8138471099bc9947ffe8836a5fca145d246298 fa6a16a220c4957dc09e1f7db803a488bd9e23e9b06a948f46327a0174f3 8564f5aab476c38781bd01240031dcbad5f3ea380bd1da2a57d5833a2804 f3385741d1062fbec7f2dcb99029f671e73d200cde3c6c22e56be77ad640 e00e418ba9c5b55f32033e77132d1a3f105050d4ece20e315042ec670355 52a327e5d2134355b65872fc7043d796e4552c360adeecd58ffce6ebc142 6d3604163e8736d658b52d0eb31f61e7da24ce6083494e103b0138084258 1f745984d95cdb80a5b318651f0d969e88b6a192d8fb6833c8edc1721346 512e30dd5638d4bfa4cc6d6ae59546d32261fb0da92490c81f486af1222f b5b8a8beff009a7533be98aee67c751502e811e6d80ace82316e10872ec0 38f3ba8db28844e6226bf76fb4dd1d533e32dd98afad08686ed7ac5f22d2 3ac3efc4ca3c8807963329d4c5e5445e483b31feb1b665e81efa14e50016 cf6ad2c9902bbb09c1169cc0987c8965e17ffda6ef44209c580e87e21435 9ff2f1658f602c21469e861fa93a6922fb81173edc3087d967c29861b5ac 4b8bf09a80a39a719bbbef195833a535b795155d31d2c514ef77b63fafea 0d3e65fd3d036d347f9b131644172d1d05b14b58e0a3d05e1eb3c63cb59c 9921465766ab68033fd268c305a484cf5ec0fc57ab818734b6facc6c5377 6a27e1eaabdf22bc862fefae9a5ad864afcb2e1025b92e42b8f7fc360fdc 84384a5b85e5d3dcb8bb5a8c0a71aef443fabe70f61f25485dce3b5d1309 5f83463dfed9d1e6f076ea41f6458415d65fa5f1fc7e10e71bc5538050b4 1fe27d3fc52a0111ff111cbea421a963cb8913b53cc9e2e9f5f6a1202b0b 1ffebe8afd7c8e3805c631028e15a3bce7227c6e2f554fb6d82db30455d5 74ec84fdbd4e589ec093e7a9f2687a30a0709da926aa83660e19ac331029 3b93b6b7614d7c8b941435268bf88d7daa8f413cfaa4bcdade3b06e0a4af b63e66cdbfce3fff5da6668c7c4b8c09f36470315f9fbd6c41917b4beffe 85c2fe8789c26cf07eae1eb5f51213ec4188a4298d6a7eca9dbdb35334ee 727a393e779392106de99423bfa78eaedaff42e719ef1e430015dc4aed0f 66db1bc722d1ce5022ed01ec6160b9c6a1e059006a634cf1c81738aa735b 1b8adf3b53f0381c921d3e1db16797d935a90d7100dad04932134098cfbe f607d493b1c2858f4bbfd59fd711861e7fc8d3c39275137209e878b54927 eb538fbc1b7570d94ec72a417c7c93b97e64ffa489feaa8e448f60bd7198 eb87700c55af20c26b30b74117948d3a2c8e63f551dfa1597e1151fd036b 450ed365dceb627a8276ae186b63cdfdc9bfeecfab49e24cfcc88e336f28 7209ad7c19ed66735525382582d34a1c427fcac42eea2e2bb2bca3b889f2 f94c17889af17b8527fa8c98db89a62ffbd0e7d74af803672ef0ac1a4f8a b730dfaa7e39279dbea0b7eb15943309dacf9ae8d7ea5530bf423e8b09ba f591b7fcb0bf32be49fce97cf65278b3a078e693ab4009e8991edd66df5f 6517d1cb896c23c958260268b7a10343744c83361a7d4c0f58d2a3b147f8 6aa96105b68a2a68fb84750acd807efc2b43e75aaf3f69110f4007f0dad9 be64c51774a90e76f59f7ba21c4e213b9e036e8fd95b7149ede827c895a7 c935d004aeaa657d8e89808b943517aae13b98b7fa25bb2c050b2bf3d2aa 94d03660870ebc3313df28b019dc87a834aff78dd233d329b6307abde48f 7b33136591af9fdc1526a3b290c074701a93fd4e2d23e80c25452a46844f 6751b18e383c69be5182a1ca0b1829d491b2ff2763ff8bd8c219a9b40550 f83e3c7e657b622df0b55c12fd92c6966db54cc7ce9872d381d9f3337161 eb3ef659164d2db7b3c0ae5c1b8fbb5c6f325873c3469c42ea7849ddb54a b86da499e3870699a349ba1f2a882bbdec2a2defebd80a91e20f580c355f 99d2c1c17657b2210507a615026b58eb1159468bbac06bacd1840b3e9e4a 2fedbd3db9b3da6aa5935857c2f35a8a07f89934f03f1ac4179bdf2deaca cd37dd60596890d56ac5de35d346f05ccbeb01af776f6c6b78c7ffea773d 9fb02638a27a1572e88506627bdf29461b4ea9757d3dc4b4881c23afdae1 b3e6ea7890e5791a05ac9be14bfe5031a5e7759fe0a77a2c433c5f4abd2d 6dd24c455a61ba4bbdbfb879954c301c87cb83a65571abb4ed0d12b38247 a122e6ed2529a3e9f303cc50334ff66633913474ef5b3944f431727817c3 3f99961c8fae4a9fad6f7fcea2ca3dcd7ff630e1dd1a2b1b2e7702d45b90 022e3b986f8ac02ae7337d881aae3b5ed5ff6589982c0376f7e0184e2677 6f4910f5764a9e87c0a011c4826884b733a7c94081502fd642f9d01ef2f0 d13b8c3202b0c65017dc52c6bb896a2d5d6a6eb7186595395c1761fba3ba 78533adde3cc35cbc61f5e3049235872217f858600c7d9dc5446689e2fdc 4bc18bae0dc69a6b9538899a72eb972da71bcf204be2a1bd4f3b41ff4e88 0a474e78b3cd9787255ed129ff5fdb1971bde1a628f3d0031c9c07729465 3a805069b0737c56f13cad9a7712c5a89c08364ea2a7ec47459f01eb1e79 b1ebaedf65b74d2f04112943e925c77353b85bf4284d44f9e035f98eb381 04de862cdb67588bdc7a01ed46e3b4021a365c143eb8f2a289ea8cb86c26 0e2b68079858cd80d7d01062c777cc5509102ca78f35a14b371228d9f3be 79c260bb444bf12f229e6d734f455f4777d344c4adf4e3bea74b3fabbef4 ff6f50810c9ba2cc4ceb642045c50475e0519dca6f80dbaa84bb3d52993b 7c64eda507d3fa96233782b7460616fc479bcc66f1fa45da506e6841734c 04197afdf22e4948fbe46321f240aa99c9567b623edef4001964022942a1 04a3ed4ded4b0752ce877d4132970adadf6a3707e5e999eb9083731ed70a 4c4d3ca516e1f2a2cc21e7a3335bea3f2998598776ca3cab0c495a595f08 b14d6d047088271a42de0cd894fa2ef40321e655fa94934d56dea79fb009 e18011e64f0d712b853c13061d9bf18d2449102dd6b76d026cb41bf188a4 48d758c8d61111ecc664a1577c90baeef21970e1f796ec34ba758968c061 f4d3a0f4c6f2967f33e6ad2c296293beeeeb78244c37be4924f888806dd8 a2623e7afeae2b3f3b7fb25c2ca5f9dba9f6847f21a5d2350e09ea9fcf3a 7b3471c70f0bba2f4ce96afe288670d8876188aee1c0b9477f645b3d4d9e f81fab33af3f6cd10bbe7949a51efcb189f8d7bdfd18cb0ff37f5295f617 bd21422c088ebe9ae34859728bf8e2260f0556ff6cf266be35330bf2183a 46b0f2e02be6735260fd8e32994bc9ebb66da8172178c0a5d2a46ebf81d5 33dc0e8d85f9da009d9cebe0e5123c5943e805ba8ca03feab7eb753933aa dd88df02b74e0c3eb9b3c2b4cd0178998350c87afa4f8bf9b1d4c88f1446 f3bd28b7f7e6a123536504746ecde5360c6eac798c6b8effb282a930806e 559e5c6147f75b3a9bfb6f80dd672076f99d8ebb064801196dc13c837fe2 506d523fdbe6871cf3cd286f553c6432bba9a1e6915cc4857a5e499c3157 e8532ebb1b3f605ae39e52e47e8d2d72aded3475a22d612111212bae39e5 e53c53294115cb01446379d9c65efc4e9751d2510df8a8f5d05999d321ae cdf6a8f0c6bef3adf0a5f07ecc76a07c5a3e3743b2c29656f8622bf507fd 994d1a2cbf0b6252a1676802e41aac858fc8c05f3b0f9bd7f5659daf2635 bc654f2d4ec5840476df5bbe92c94f6dfe01b053817bd11e98293c1d82d4 2618ff76b7d7477cf44a55a05e6267c780288497538773c45e7c005465be 3706cfeda1a768e34b16529130151c81c21cb79b5ca2613118dc99801056 fb20ddfb772af8f6c058d291bb60d1bf0e24f1090cfe102dbcfcdf3ebe9c 2be95830bc74254fb33c5ee961173d7f192c77e9f3cf560a6acfae216537 8f8ec20794bc2fe89be5fd2cc4cb7bc64b180e316d6c7a8aec02cd3ba489 ea1bc7290d443f2017db5c9f56d3c01f60aac361dfbb21391d4631e1ce7d caaf8b7147424d2e280401552eb8d28ea29a2e3ae8d497899b0a9ab07572 8943e310b6f119f7f4745fbf157679fcafeca4b489b2c989169572d9eea4 ea4a268ad55c09e5f935e581fb3c3bdf7a19cbca4e31c2f11c7f94041c17 20f4afaeb34297d0d443ea15f45047d428e170be83e949a747f2b0eb1114 adfe5816e4c6dce2e15fa5c04cbfc35eefb2ff31e7e8249a68dc182bea5c 38d94cc14d4fba937bf7dd6d0d7e97e886dab9cabc1065152f0eea63490d 8ff3fceded7c66b94b432164faceecd537e8dd7d764f9c723300f677cbf9 62f512e0c2bd926aedceced203219b44c6a33eb81f68a80874692f0ba475 e151735c02f37c7f827b7c18a50f403c60b26ba07598a2340079ec79870f dcf1d0a10f95b4917ae9ba414fbba00dd561fff7e3669a840d5637a670b9 c7603f950be19410da99280f836d316578627ed4060e8aad11975142bc93 1efbb553216411d2a3ee089e0435d256cf6c27134f97426be3fd8a6ae9a0 b7b6b7d660e4bdbe8baf5ea8d81f4249f03fa53a4ad8c49fa79a5c346f6d 73384af34d6ba5733650794b840bbc12c2d1e693e6a2de9ff5b317468381 44bdac7ecb57847f26c1807beea229a7ef033292df577c4fa8df7125c95f beb9d3c9a67a95ea90f975a93ccff6684a4076367d6df13f403673c13098 ef55e1c5957349548ce21775c7428dd33904ffc4aae249cb65c05c2ac6fe 643fb75a2f4aa279392013513a6a908ed6bc2bb5c56a38a69a5a5a0aa07e 84ae5895a20adda2ca292145d12ed42648092f9d7e79ee6cec978e1a3548 5ef3222e3e9dd4f9c24d0fa75189308ad03819b4252840afd44e87e4f457 fc7b8ef67cad28c1242bebe3760b5a90e3752ed20fa3b447e577d6b2c490 eb76f5b357c0a6181208a8f99549a2809b7c4ffe37e229e3e01d5e7bd67c 6f82114fa9436a79bf0d3d6fb88f272792670b0f6b22d14c5f2193d9ed7f 12f6f1c7f336f597d2f10b5941635350ee6b462353c2f211d01810491556 dae168530350e99421b509105a6e550bcf9e2843605b95a89c93ab24b9d9 b7ed3a9965b6fca21ab95c560b02e763202f7c55461419984edb144d0ebb ef6436aaa3c68959b0869b58e5bcbc54436c238ac93aaf882e5bc014e03f 5eaeb671ac3cc090ebcbfb2aac69186cf36746f535736a2c8bd703aabb7a b8c9df63d73191b98ee4279473dca298c41a6f67983ef91b2e56ef59b933 59d405b42f5a30ac8117cf7be52f01022137441efa08549bcadb2efb90ad 4ccd93a6022a8424a86ed4a48c213326737bd968e627f6f8a8e806676bfc d6a6517e623b84204a5d8dfa46eae6abe89870ff3bb19c6452ffa3a5abd0 e0cd418ffd2ff221827bd313d753a63434ea1bf9822aa9d7f2e839e9a0de bbeaadd3a4ea4746dcb2814b98a52fa00db4c1c71bd7687049b5faeaf564 9507c2303513f1b3a6f4f7de783bccf85aea628b1afd8f473076e95195d1 e8af64a05d05a661e2b2f77779144905a2c5601df0eef0c8812b8d9a5165 489396ac9de54d715250a3acceff5659b1f51ad7a7239d9a8bc7631a35df 244e9cf1a3d080de8fdf09052dafb200b907e8da5bb2404efab14e5d3500 7710f369d3dce9654d0332bb19a5bc9bcf10c2ae8a12d97831bfd0c06881 bef8cac8a9bdeb42a264593254ad8d72fa97f189901a857830cf52cf137f cb6d46b9b934b98e52a251b029422ddaeee26aaa89a57e3bc0c40e95bcdc 9d9aa36a34805520a647a1dd5de148d7d50dc9ead70d923c9c78db90f8ba 02d68c3cec9f5fd771c33140b93b82ec063c8da7d96444beb4fd1f9438c0 0b1c747d8833dd0a1e12fe2036bf38b4aea8f8708bd3e3e289425abbe7a6 ce0a9b3a4eb6d6cf021a03a40b32a6fb27f714ab28b1a8d0a7be38e3585c fbdf46ac0906b0656599998331baeb24e94effc3d56b37a6f33695c847b4 5eae4abe907128987e7bc61c9c2cbc35b8edb6c4d00004d36dd05fe001fe 25a044bb325117ffcd3ae307684029c29ed0ceda734d1b9685da4cda79c5 53eefb7e26d3e31caa1b815e31d0718b190be691abff96c3c89ad3ab8669 a6912149e59eeb566ec95113895f17d5ae021e1ee285d0c49e054153944e 63e019fbbb0863dace341b53cd5b976f7b61ed082f6423dcb631494d2e6d 4685bcea79f5dcd4db9e4e323c4badc4fab74487d059351b7f301e8c0cea 9163871789ef9c71d2366f65ee95a84efc738faecfd1f72bff12abfa9f51 afa6e0b40d6c70005e60aaf92a68ec136c4169f429c705d51aa86c841fa6 8a4c44e92bceb6605732d355dc995d5a9ee4c078c0bbf80de0351af8ba35 0d24c5191cd1094a7399cb946132469c3034c6b125c8edd52f8fd240a5a1 4e945431a1b8505b9436e2e07f19e2be43b6a7eb616dbaf95a7335778a47 9b2e659e623bc0b6db8f4abb16f269cf3550de6ba58f2be5c3e9cda1387f 0afb3a1f52330675440c89e329b3253a143c4bf1fe2485b5e402b2c11ece 38ae8987c19facbd48b9209e3781fb2cc48b0fbb3e5b38c73910d8c945b0 59c36e26211956e67659bc13ac100ae8bfbc297a8c4c8985fb5fb4227237 52856e39d5713557e4eb3f14c5e15f822d2204ef14a91c6ab8136c6ccbf9 04beab720daaac5775a4ad27362986eb78d995b7eb70913519f0b0d29591 624f159285880ca18b183240410cbd0e9a293f2220c6ffc289668ca820cc 6e3f8c6e24c437280e067379bebb7dcd7bfee73a804de04866c102488a72 1dc5c19f64c17b1ba6f543fd024a2bddf2b43d27185b7355ece2fa7b9f36 7d5d56cf40e8c861039b7026b465d40ac264bdf4d43bb59e451a152f0219 80df72ac89ca53fff8dd2a7849877bd8ff0ed654254ce9037925d3c0747d 23dedef33f9510a6730c9537503a4612c76b36698e4bb1297a3ff72caa98 7bfd0fb801544fa5b04753780faeea75a567ea18098f2ae84f226220df46 42a70b6f0557772d7ba1f13bef7ce9d9c1f3254f373ba0fcfc44c0063fcf f3c2d7b48b1cdded8f78a1ec7c06695ce889670b6921f98d986547fb75ff 3fafbe090a2d33c41a1f5fecdd2c21e5ef808d7cd4a7195b7715766521c0 0815f524e75d1b554816fada08b6c246d1b66cdec4bf1909d40d48d5a25b 0b1615523fbac1eec49f404dd72247b2c07cefb405faaa273973e8714b13 ae5e763d62d077f15fbb15030d7b4062275335987bc5ed9bce2473baacc9 fe39ea65d5a7ff0e3767123c69238eaf663975233dd6e9845ccbf2df9399 285c8dea6175f2215257f0022403092ba7dbccfbd2c2da8778f3833952b5 9d2019d11b63c7fb0d1344ff0c5b8e8a55636399f3611b062e803e39af3b 4a6a369569b9d8757fd054cc0d6b62ee29cd6cf2fcbc6a8d57a2f9c6a504 bab41004df5292dafaec65a2861b432dc41a368136117b746553777f1fa0 f7b2e3faf253a0bf40d392b4e046cf697abf4d8b3268e4f2648439ade9d2 e45524f3c0e052076bf35400cbdd16e70f88239dea74cd27633275ccede4 9c6b7c237fb7bd201b3dfa9b7794555961414d80fd5c32032a3310b6b32d 46a6e744934f9d680c5ffd81f331991d1c997eb3e4ce241916174da8bfb5 06b0ff918c6117576a6fcdf4bd9dd90c9b5273331c5bf07e5897e9f02aa3 296cc05cf47e48b55886b8826f2822140cc84f54b8b9d6477d9893ee74fe 73e39297bf414e0179bdb25166e8836d49b2add6274aff33c82361197968 fdfacca49b85772de9a148e017a8ffc62a38a30be5850513071727f3ba34 dd644ce08bf3fd2a550809730a5c3591d60c3b0e3ed24eaf57817d4c84a4 66c5f03794e6aeb3e1846ab2e93a5dcc3ef835664ae013464937451180ab b91d54cc81967cf85ee6b9d75c14a77f737fa6b414ed667fcaba82ded665 3b8d6649cfe57b4672c44e0f0bfe5ad630c48ccf549b7cd2deae9c5527d0 4783ec5319bb9ef7d750d87ba3c6b9b819545ca242d41f76fcd3df2f8842 fa5714aff9e5139bd2908a003d5c0e6263a2bbe4105c510087db0ecd7c4b 57cc3af64dbaaac5de21bcab8a58003225efe67be7f9a6709eee25d359fc 1aebc969130f3050c0ebb6d8b74859ad54865f400863d769e91db9edeb43 8525a7c7caa68b0d198475a449f5f87b5ebb495ebbd0dce87bbf35408679 302b4dc66d893f4b4158e1b53054ab9b197c6ecb07792ba9c8c5b9c900af c5a05cc9c31b5078427a1c7d74449b9eb8617b3f0098eff3c586744dbd27 5a117d0aa14a042c51b7506130de59694db9e45d48f39a31411b656512a3 2d3cd96686806a73ca7f46dcf9a4872c0334c89ffc2948a2bd98bb2f003a 85834c049877a4729f3cf001b1385814a17baf20a0ef75708ddf0f4b656d 4122e30d794da048d83b201a252c92c8c92809cc3027150ad65ecc94cb14 69c5db56965a42b367ca27015b161acb2318686bc3451e03a299f67de0ad bde7f33807213565cfaab7a5ad04a442fd3cb710a6d4b78a62c318815ff2 d9e14b9357e8bbd13faabe9d9ea43c0c39bf4976ff03d1573b1571e3013c fed9bfaa0c42017ecf25d7c12d70410e7a0d79e37d5d505d11da9696e2b1 13019e10355aff4967c56ea86d4362a89b42cc01f3abf0dea5f029ef0c2f d3f33bfd58e31a652040ac6179585f9bb03e0bf8f1e94da93240f5637fa6 21687bb4b7edc3a2f5f89fd1434412333aa9b97bd0c1d362285ab643f426 f75dd854f116a0d8bbdcdb80ce513cc45650945b546f72ca69dd9d2707eb 7b5bdd9501febac3c4476852a1d21d6cec9a25e4d1671dcdbbb67b6fb02a 78daabb55f140eec157eb91075e1f5cfbc2aa8d8d3fe990f47429bc573b6 52d0da673909f36bf15852a7ffd991d927e99a6c956f33408a8f5edc6d7b 200ef63dceb2cfb8da9475d34528238f4d5a7aacb905e6a769662a31ddad 4e75795f11f3332bee039bea7eb9a9295a93e8f05a0978d88173c2f48a7a 403daaf47c0444ac49e3544a2aa319176d51911b49da0c034f3e9c3384f9 063d449eadde60491ed22c3bb5c0bac31fc564bb75cf75597c977bd9abf9 05993bdec686728b1c3bce5d0f6302b3e034e556e43fbe1851b2d137cf73 8a277fc4ce3f289c1b6aca82f97401eac80ea9a7682cdc9a588ab100c844 8b60ac0b360f1af03ab5525536c34351dc7d1169193e71fa12892ee79a9e 41552f5deee05e9b714587288852de794d16c571a4d61c2a41dfb1c5e0c0 e6e2e9dc4ec7927fb76b52ec0bd581f6982969c8dd2400377428fc757010 ad039cc3c917421a7e20d261034b9f86c69723e9823a2648d648879e13ba aa98bc59e45180ecd907804c0132b14f5a90705869a8c3b06b1a60303836 4029f3801ef74c8f798f712beb2aeb55a917e4e15907e16070a0f9b52928 92a05082b8cc5a51aacb34e227fa8b389c08245bda3f03570f04c1a06462 4c8929938e966bcd981c11f70509bc65be7d3d1825a918a73c9c3479cd93 24cc604e0b38bdd77beb802d4fe0c6c75dc1494f6816dd520f295c1a23d0 0c8ec16e45d9d3aa9e5b6c138b7669be34f62b7250fb016034fc3d459fac 491bb407501f99ff6915f17ba0587f17d19f05e4011a8260c6d9ea10cfe8 4db4cdac6f5cb8f8a8c19d71a8b51c803fecaa5e78d0900e717e6db0f16d b5e3fd766b221033d64c4695127399ca9e5559374bbe717c772746ff02be 0d9cda0216a202489aa5872d200e9c96a70c6f3709264c4047847a606353 fc3eab0995cbe4dc9209cd53d2f869e8fb49952d2507c28d978a444848cf 7d40200e56a1dd0eca3dd2cd861ab8029e8fed1e2ea8a4b457514a0c118c 6c64b3ffdeafd9fa3fbf92dc132dc4acb1dd082ed5ef10e1c85bd4601a3e f2a6b5083ded55f5d9d2c575d0eba89700b4806dbcc6e5d2a2ad26c72cb5 502eaf92ce02eb0769b552f7b372edc1d14ebc12545545d55e1be0cace86 0ea950c891f47a066e334fda3afa5fcce5cb58a121c70a646e8fcf3b6b3d 2bddbd3bb137ab4b1b3056343439432df4aa089b70b47511cfec8ff6bc3e 97b320f8bee6fb49981dd5b411207ee7f4bcaa5d17e9ae30fb79ca887c04 20c8024cb1445137e243d42fcbfea96f6259ddd05d335b390ed2580dc82d 0abaee5e669d537e766e7ec16c512a8b47aae6380d8994c87d00dfed9f5d 85232a84e3d3cb3ea5b307c16cbb2f962effa16cae18a2b6f8b1ef0420e0 4b1e8658f368b7d94d949aea27aca6ad429007363ce870cde7573dcab8e9 813ddb3181634525744118220890a4c17249ce7ae314a9adcde389949f14 64976b4a819e87b7588aaaf4ee1a501c03a1c7e928c3b4401ebeb2eb5ec5 b65d06d61c11831a50e59124ee7fda18fc49cafa2ae407af526d1a94a305 96e5aa91e7991ef4c05cb0ff348e86942c706cfcd879b527c8e5f00ccd36 20f2e1118317172c0ef4cda072faf995d0d8db0b835cc9df1921fa42bcd2 613d38b149a9ffc4514e727b453c7c8dedecf45e1e6c15b7f2d5e841b28e 73e6298ed645aa91337a07021879c9c3c80618372242f0c6d4206e57fcb6 0e426dacc9ebe8319ccdc3a6ab7d074b85fbfaa94b2135790ae82fb3a489 3b44f2414e3f9f3da85a8308417f197b92810c2d6c80b2fb8d725a69a5df 6e197cd82a77dfac7d82ed903a49e81d27e6256a726858a6f47eeffcac83 aed170e22059c41aae419c1397430677b1e38d4d10ea1d73d59b836dc1a0 32f5ff3c5fcb37b151ca33de6fedb9b6732470965ec19547e1cf2a717a1d 858a0c6ff05a74fcc9b512e4f504e9de2bda922a254ed810b0ca0a352c3e 6db3e08ec0afd82391697f3818bd50a9cc03aa1ad62a9ddbe42f5ab7f4bc c14e5ef46a23750f8b09959c0b4afdd79f7bfd8f9ba0dde92ae631ac520c 676454657047ed18a0723244e9aacf6394c7d1dfe20c52efded832b1aae4 dd0215271fc46ef5b90de2514fb118396a7a6069bb49b95bb240616d4115 9be72b5fb37d4f2037c39a4163180379e5e91adc987003b0a1cd676ccb8c f6e44f523c3b74d543d55eb3cc465463440720be08ee3f85a60b9398673d 7e4900c4583979887c6e22d3f27c0db0359a7305b5465274d09f7bcb3b7b 04893b2c9cb576e8e570b49efc409ce5054548ffb1b19dd3098029958360 b0d936b7b107ce046648ba437befa9bef67b8cbddecb82cd9c4b1bcdc7fc 6af26075f3cb2924dfacf5f1c4160d1f96f2d7592b57edb1cad20ef93953 71d6aac1791e98bf4bc84bfd81b92a5c2b40dbfee3d50ee9269df632a68c 9f6ef75d69939e764a1b4f527e4993097a1bf28c6e5690ab9e32c73b29d0 275e10f9559ba7f96bf7c701694ce13133e6fba2276c125b83f43a84cf3e 8aba4a86b180f66842267e70f5c794303689962ae067290e2cf87e3fdd77 4ed173f91fa1fbb0f6eba3ef1a34e826604961d2cb47b40b260d79b9b2fd 1de584ea79329dc8ec75e84dbcd90b888c59e8f7e5e90f4e2cf7ad8cc5d6 ac6a42bb0aba27236ee4d68e994a1fa5e5ec15a55c15b0306297a637d669 6e1933d8c0e9c4e81a4625f427aa47b7e8553b580a45c1685e60267e563e 9a3785a9c16e32dfa66a55ffccc8ebce3956c1e9778b64258e09695fae08 6b493e3d2fcc4cf6904e2ab22b4ba631c50527a56801737bfcd881bf0499 1b7677662f0bc6709b981e6dd9dfa90cd3672ea00e00bf2649163c3d20c6 baeaf3fa2cf56cdc5ecc24628936bdc5a30910cee7afb97edd4f1a38fab7 fa3a5cad31bbb821ea103b67f99d0b74d7c157a351144b9d755b36e250fd a96d686bf4d69d7b6fd6bf5808f715fc393de15b86a6e4b1e878ad83115e 90eda05354fc1cbc1734a024607c081fc229ad35770030d77dd164c8e255 3e9745ed40d9bce5427536793af013665a394cf966f2535713ed2c4a3ff8 16f50c2bc9c9dcbfe53223d06a009268da596bf894ce9580ef23f4eee7db 887770709f7ea8909ef744ba0ea85267e62573dba51c25f77528870ad317 f1ed63b2802fc54d81d149a2121762dcca760e5ea5e7ac32a1d48191d63c bf1e049b78dfa7bb2b2237a9d52f714859f5ea6c92d44c17b64efd507e2c 9820575ca9ba46026fbcc25efbca849abc4a9c385520e5d7d64a787dfd23 229bfaca0785aa219f310d6f0210e4aafd5f75033ed560f123964476972b db2a8087df61d0ff47fef572009a81809c7021d62dba53f6b6a26b976d53 94eff109b3af588cf8deb44bb00763526423d8077836d5e3bce10378ce95 cf14d8732ccab691ddd13f9a00d285f2d63fa8e7b16136b1a8edfb44a462 254de6d3a5ec710b9184c2bf8b23eb1aadc2d40bcb53822dd29f4e5cb045 3e863c11aa73e1bbfc28e336bdb59ce3e88065ea9d8b79991461bc3a0d5c 97febab06079f7a1defb82bca12f28329c063ab726ab7c6a2dacdac6e1da 46e58285015695a4b206d9e0a4df7093033a9e42dd097c6ac0ad87fdf42b 8d453936731448ddd3870a490cd48fce942bae6a88cc0f8525788e222239 a38476946060a8feb6959613b28a01090293a9f5895f7b509985e3643ee4 7752ebad364d54437ef2ce6c3fe86a4d2be12812577b126df132cc7d602d c5ec6ceed3041af208b69b7e98ccad48b2e6d99ab607bbb33a19ea0ad941 6b31e145d3939e04e9b4afbcc2504c82d879dee54455c0f5d01c028d4648 bd3d3b9cd2036537764102007df035a9ed9660123faeda255a7385adab5f 13e3fdc490503d9b631c537f1c4447a4fd4fe3f1cbb242705431a9858a0c 60fa8a836c307497698053cd8c62f21aad03ab06aca920bcad87f68afc45 39f39d9d6759b7c04e15ede59bbcc04f528a277a927152ec89409192f2e5 26f79921a4e76fece2373f3375c3c0a36ae1d6f3bd1b70586ab9461f65df c1c5654b5b5aec5f92d6387a11bb28b81d2366fe463a5ea0f8198a1fd8df e0889a281e1016d72188023de9c0244764e480b801f83381360bff7a3509 5609a6e61174b0274c2b7293509f9c4e4eec290e2c538c02adb877c8b21f 62c070f58cea8bb436d3b34706de6a6fe8dae931caafba634aca1948da44 c2cef4d8be6b194d3c41d0c584c82f6f48c67ddeac49b17a692ec941895a c203310de514f325c7e70d6e1048ffd7f31682da946fcbaa2f5a50535f0a ff3dc0eedf67fdf9898e759b929b447593edc1fb8c5b77062e19bfbf2fb6 c4b8b7d695e24cf6470608ab635002afc38d755592a0c723730a042ac5dc 4b74436dbf5eb8dac79ea9e6b7f21ed831f33b6b8c3141c98134e2a69af8 fc7572bc08aa0ebe9deb04ee9aa794d2afb9bc0e97c60f93a7a72d15556d 36ca0b58c60fc42b6adca84658447da164fb558ae1c856f4c3aa6fd30c26 7ee9a8668426a3d742e6b8e130c523e1d8340ccd3d3f741be49ce3935b24 aa20443b6049d0b136a36c1f13176048d69d4150af8cefd458fa78a2859a 8a2f7c58bdbb92191a7dfc1a3cedc12ff91b26b6828d38784a5f829973e9 d103739a1d8cb4366edc151e396c415fa51c740e0d81c18eca84798f80b3 5344f2c5c7dbda319d6d50821f236d1d678930cfa18259a97496df61ae7e ab1c06abe785cd887259a7f08e79915ff96cd781d91435f5b5e4da140c2c 6c0136dca6c57c7df01f9e87fbb0edf55f80dce3a544b7992800d8966f07 e1297af93114a9efa7eb21baf2583055770eff67b5d21f64c5c2a11b4147 9e314762bd6409dc5a73a8b32664b55691a01bde6f95d5f1c1065c81b129 45e5b63d7e845b3ac1f16f760345f886eaf7b091c4c56cf0d0c2a9360f7c 4e546630b93a2aaad80b4ca35d46350095286ef840123cec13dc12e0648b 69d17a43aefe796a02dfe7de3eb520b5e247af46f31ee8507deb1774ab72 81a32bd0fd6e6439fee6e94a49a8567e68d3156cb34212ea86b6e97f2866 4dadacf5173e64c7d39237d0744b315fab7b6b85a6a2955a8f45ebffbd87 9bda5f7cb3285c7241500278ed4574e464adb3d3f07f5a63560873aba6e7 f9f3f5afc580d06fe0254bcea4da8af4dfad93b9225d636b0cad7a4466d3 0e6c378b5d2e15e54a0d2686f971b8a3a04bd412ea4d59784bf73b7b8215 7e398056a48fd391677420dd5c85c3aed14709871fa319b5677889022e1b 3b9e27172dee5df9aa604c98307c576e292bbd17836bef068be34136538e a77ad4a000894fd8251e9950fcc41b70c2be9368150056bcd41badb91d89 4da2f98d599bf224120fc5a57028c8dd55148c788a24f8feb19da237fca4 93a9a0e313e37bae205a00829c9f7d0b790369f6cf5b1c54f4efe3917851 e9f67a29dd264d2ba0b1bdb05de9c6894b30cf8d5b2d37a960b24b14ac52 e93421da5d3f2e4484d870f333ce9544a9f578edee46de93125bd65e0584 3d475c64b2fc036c699eecd9a1b54b5ca8c37c02365dfe7afe918204f6e4 09d24ef92e8af22d1325f84bd31716add00d5323d34da177b1dd377b77a5 0a08d86f13000039ba4e1501edab6ddb0073ba7843e22f49f93c80bb7d7e 09a12c0e9c2af050fa39a83ecf87e60672257a62af6f3686aa17b0f246fc f1a109cc2f7a2a74ecd62849c741d45d92beb3864b6377f648585a7292f2 98cc3c44b5755dd907e1c3a12f6c152926d30455c3c74e1501eda8e5c295 7c64c587108f18db3ecc698a96f4c839edc7495f50b3244c59ed2a313509 e26132ec29067092c12578715104dff4cc0e30ec1da6c13961b9f8b68a88 65fcab289d5cba904d8891aa7fec7bd57cb4183cef55ad7cbda701d2cf0a 3878c52a77e1e22cfcb4bf8ff5e3e0833f4dde59f2e8a6dc5eb9b625f05a 6575445cf98267e442061d2ad99b52cc789d1d8f6988433c5c0d1d4b4f51 0f8c73f6bba8e929362ebf38d26c9be8aecaec33f268e2725d3f51cd327c 48d2abc52e265be63a2a2fc87454ae42003eb5a28d6ca5da2d7e8abbb9e8 439b683e8e631f2e6da1f4b85c04d8bbb1730f2caa091f1b1eef31e08fa4 df9a9b9eb8c6421cd5bcc0f6ded67fd19617213a80d18024ab79f408f7cf e3684483819c85a061c53b4fe853e382a3a7778fa471a196f24e124b1436 29926a24620037e5f73ee2930195e2ecf4ecd53461b5b73c686578d48124 c8878e0ae2cd2cb654cf98ea3d238dcb37ae7bc18bd0d21b323c959fe82a 99842575f35bb6f286f5b3578413938ef1cdedf1469878f28d0f9ed53100 c991598f7aeada761e896998a42b10fd186dd494e9ca575e984138469d98 d4fab45dbd1ee3c2f61b877b9da3660aacd8774dba08bc31ae8e73cfbd3c fff34ac4047df0776d0db02306024adf7c9efe019128f2488d22883a4eff f3b5af9fc7552f70a78955d4854a32b3281ddda5dcf15f915b90bd584c40 e7bfe27697ff9c6a9870d329a63a45d35b7d5c87060ca3960accae323beb e22f909f71d9ce8f4e59f87698954cc5468b9fa31eec9a1723665de649d4 9d1f4d8e6b96c4bf83e02806d4d9bde12c1a598f801e2169afaef48cb6b8 d5040f2be6901dc81c691776b45321a8959939a90b6099446e8cd50576fe da3c0809294c8cb309ea895075d2eef2a0f2b019e3f2e5941b5863004868 d81b733cfffdff18b54df5ecb4d3230d0d82f091283ec5aa46c060541366 3f46eced8a3e98334b9c2ab430f435f792176874df89f2f1675c5d350fa2 1724a0d2f19a6b24f86f858d0af6934d8fb84016cfff258ba15935a2612d 4fa06dc5579534c7193324b282a8f5a67a8c77eee35ecf2fc7005a3d8d5d 6ed4a4e19d385848a8b95aa6454573815d0182f4c93a3face72d7c2c33ce e19499d1232adfb742e6212a6c93666bc1dac3a4275c1228ab98b9779850 ea291edda7bbf14b5e2c68aa26f1b877920aff9ca30788348798b4423b39 4fad935b35e3d5e71277ec32b142a386a96fece14fb96d3b31fb36b36440 a71c2d83c5da38c9fedf38148f7cd58748bb2612be4b4895b02e8eb09a5b 0e7548cde6c939ce8880eb89b19b3e26f354cb21ad2a31f8db6b49683fc7 fd7850a81f4b801bb9f108688435a2b8ff617607c570defce9c4586abd5d a7cd2a81c93c9e53c3ecc79d637be3d0d9f8b0b08214af29b7c525c6415b 89e0759c5c6389bf00d01e884d9ff86b1bd35ba5d679e80f93d259e88588 c5ef5e81d89a29b4814ef4a54cb37750182f50662db8fbc27a03ffb3d0bc eba5cca63c454b12960451ce170828efeb66bc5397c2f0603472cf10a18f 321a4a55eec51dd5a63a4de376ac65f858cbe20ad56395c7b1123cdaa942 c558cf95faf70c57cbcc724aa11cb7f141e0db8cfb173d518f0da1bee461 42a05de5108677f5b14dacb79782b2010bf7c5806dbdd67811cc136c0c0a f869d8dd9df0ece29b581c55c60339948e044da340cc704dd18f8884a6d3 c851e6113d77742d6dc05365ddc5806b9beba531037aaeae23aff0b19737 443e8105d57c2c246b09222b25926d5368e62728acb1b98ff51eb1fe6a13 8e660361caf8f3074de12b7137db4819bca2b39409636c8ff8368c07cc46 5451818e7e726f02c9dc803e1e53fa04de26cc59b24b5d86cd16a1ab7ea7 303af8cbb2ad7ce30256052cd4c3b086446db5bd8677a6c8fdc13bfc7824 23e9694c7a60501ade93a3c867a594c04cc0fb1626fde284b566ea1e4f6f 7b79f4f22fe9c586d25d8b40c0a4147b7a2be24a83afa65f2adff816d656 19052d81c9cc87be737233aa0916b9cc41736ea4630f4d10c0867aae059f 22ecbc3868edd11f4cc97dc44581c52ef5a5879da40e356281bc0e1e72c0 5e0f039a679f0c13955e6f577fb6e78c94810ebc9c75d9519a7868d474b3 2d8a2c62d7e82630059325a9cd33d2ca35d0369bd45cd6f17d83c2c30172 1bd3c9c34c68b0e709dfe50b428a4f051786ab64f707dd4e4d8a075e0657 22d5b68e5e9095c5184cd7c01246cfc418f75914f0a01b088ffffadf85c8 499cb1408f7396b0d94b0b5dfe84e9a619c55e87240a81af16ee893984fe 331f15f597cd3c9415533f9b53563e478d8c6a159e428a806d33f4616ffd 8103ad221a19845547097bd9f1b234c1fedcdcfa0d8ffec356130515c5c5 11fe5c5ba8d25ff61e6368741cc466592cd920696e964cfc0bde1c5e0b1f bada15b871d8ee1ad94bc4a42cba6af0526a061d1535d8f3fb4cfcf249ad f9672e73a4af5ae352b191015de331dbff2a889839c40ea4d315813604f4 4f6f51144d0014fb69fbc5d4d64d9486b7285d7533a746503920212f1ee2 8b61b9b44f79e15dcc51fbfedcb91b9eab18bf942525df15e67644bd4d05 29fe44333175ed909c06d6ec35280ff1354bdcfb509295ff3123e2a53108 79760e6e7af5b0d6fd44c14f82ca4ca89fc41771745e1290ac86909dcd89 4a360b9c549939522c7e54ab92d1cf0b5bdc4cf8e9c8b9fd49b5f246b6bb 51fbb881eb6a1184b2383acfa9c8907dd73c8be9a200e555f674c73de70d 9c171eb3a2133fc8058c1a44adf8b143acb43b394d142eed9fbea7b0cc3b e960e0384ef1dcf4094a22e0b3b4b73b88ec0e5183b2996fd906b9bf3d12 a818c817b16afb99bf7c0de191eef8aeed90fa137fd2ab84dc9d27e49793 5ec1be47d5b2555e98d1580687ff82cbf0b9b76fe073620ce33a2450095c e859a89e68a94d96fd9c8ae07bb9d0608a67c17dc15ca273c013c816150e ed83d03f502e7dbf208b7748117ad59b24187c60e4a44fac5c9d53ca11a2 f5426d2e50372727c576042647485f3f06a779c11a398eb91440c74d8566 54871042a976cd54f8f3e771ac35226a8bddb87884a1d73a888019e11845 495d6f354e24af23a9cdafeeba7d517cafd89c7a3796eefc2076467e5b2e f4a244d269fad741b24b4ddea4d52374ae5655457fa30f4b8b1b22110a68 bb9011f55edff5478382cfc3ff17c3e52a376be295d3547920127c96247c 9c2d069ea9f10a41d206e45b228901d8ec47f261544c4bd1974692ec5195 839a638de49102290fd09f831a1b5b6398ee8c2337b18ba47e29d3a228cc 3cf1447df2de3160b2f2ea11ebd3430d44d176c13a5a876c6bf13765fb2f 4aa9e7e0ad311a3a832e7d4ec3d04a154c04c50bdd7e08c329c0c682c566 69fd704da7b4c4a56a50f50f60adc6a30f31542706f8092fdf406035167b dafef98111e39d3d8be13f057e44562c1b033115c8c4adcaba90b7f7265b 7267952c5164e68a4434b7684178a1ae46e7bf10e344ab99799461abae9e 3d4e424de0bd99a66cd3b0facf3c6948c00860f64dc81f71aee12245787a 82e040f0fd0b5dd075475574f7a60d157cef30d0400ccdb5da27604a975c 2db600d55acbd7c16e329d5c7c8d073d46723e29ef8248918331076ec458 a85f98cbb0fc0a78630e99db7ab0f178c629bb726c511825cb722514ca36 7dcdd067a731c8ed72324e5cf715a12602f6a49f921f0632175f615e1d93 bb225684b50f39b26d65a0110e9ea45fab51763fb785e505942b4b0e0d8d e21356d58c5d87ef69457dd47944b34e4b29293cd535f7c25a762bf24233 2f12955daa0b04af9b0f1ae4bbcb2d4abf16374038566d419e71d8b9d91a af8b2838c3f69d7802d91001837eea69be47f595f864ee03fe2270e05556 680c719a0f33e24953f7bbe30d03c31f88125a888a9fc47406578c79dd69 9a9e73aec17997374ec94e9f0147007806407df213edf9fae457f396e403 9291c23e0a54e6d07c28652374a367404c3a8c50a74eaa4ceeaea98a05ec 220003a80f3565ad05100a397c89dede629ba9af67cdf1608b08ba01f653 44bd44b5d8a655e1fbd2521b0fac160bfb4628296c6f712d98efefd28cbe 2631dc4d53bd915483586c9619c7a665ea243877b4d34c550d473a36f9c1 ddaba89a7c727a2625f76cc3d8734efe913f04bf6a9aba435ab32ce26f21 2499cb4c4e97da602b4b51c35b237f933ef51e091beacb8e0ac275b14339 e13299374378ffb3a0f25691dd7f2beea5edb9bd152adc86d01fa3e9acee f2eec45bd016e255dc58df2a9c5cd64a07b4bc410b37a137210dcf214c30 27d1876726567d9c50926ff4550391079a02c7b4087c1108c509d88f56df ce7ac59788ea14a42fc69419882a869c6254618843790f987143a6ba0060 829739cbe213e30194f21d012dced304470847ed0c2b8f597f0fd570eb04 41c3a15384309dd83f2eefd3d27609dd090c0557391a04bbf9110afdd00d d584bebbcb4250174d7503d8610beca0ae95aaba34a30abb7ecef68e1076 6adac81a2814051b4f484478c66b39348436687670185f1717f84da062d4 8fe0772c986713eec9fb5af2df8dda8dbd76aacb89821761f76f70bc34c9 37766f16f00e5898ea1531e8b4b4ff65ea0189a8eab73a03089e205e791a 65534ac99113f975ea5223b4388841e3 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark htmldoc-1.8.27/doc/0040775000212600000240000000000010464177323012501 5ustar mikeuserhtmldoc-1.8.27/doc/htmldoc-fig21.png0100664000212600000240000005415410322727434015552 0ustar mikeuser‰PNG  IHDR5 pHYs  šœtIMEÔ &ÉÔ?} IDATxÚíwœÜÄÙÇuíÞÞ{·)Álã†ÆÆ½Pbª % !$´ jhIèB{IÐ nÆÜ àÆcãr>Ÿoµ+éýcvevW«íí÷ýÜÇÖjG£gF³Ï£yž)Üêå @åñ‹ko‰¨w¿¡¨ ¨(îºë."Ù‡5+¡F ÒàQP±ˆöCÎùG&yqq‡8â¨ÙÇÅ~ÿ°YN‡¯Ø2SGzÛ ÷›ZÙ5Ï2~IœwO|SëD¼šáb‹ë~ÓæB:îsw[•Å¿{L¾ñªÈYÔø7Müœm Aî7m~÷ÄÛy÷¤7m&¤ÛMãU‘#³øW»ß4þÝÈAq¾L”4’µûs9œ,n#s´´D5“ðWä¦1wO¤BwO$‚óWà©&Ö6‰µCâÊNð+(ZŽ—?o"åØóRu F?¤™ÒEj:ØÔÔõj_p &”s? ââ…_ÿêú믾ºÓ‘]]ÚÞvõÍ×M›æ«iùŸÏÿzJ§óLÓä8N×õíËïëõƒoPƒËùƒk½'3fÌœ9sRJùÞLã.ìªd6@8ž'"Sà©S'¹S7"j5ù‚¿Þùá)OŸ÷è?ö}ñJLJ^ý®ë ÛÞ¹æËÓ{bñ8Öæµ7§§—>“«Ül€ Š&3­käAÇKµUDdÊA¥ó1D´nñíïÓöÎ5OT ¹¹ã¸ =VD5¾mñýDÔeèob¿Ú<ÿ":âÄßf~—/fÝFD½Æßc?¹öƒ[ÙAïI÷yÌgù»¿&¢§ÿqÙÛ7ÑÀï?ˆßL…óèµ'ѵ}„ª¨dúô–è«\LçŠë õNDÛ¯²Nê[¶›GKDÛ÷†êg ß{oËÁõ¤(Š•ààú?Q Ç/ØÇ_~é*"yÁŸíç?|áJ":ù‡­ûçψhÌž²¾šý·Ëí)Ç_ò¬u<㹟ؿštÙÿ±ƒéO_b?ÊÏþîãÝ?ÿˆN¿êŸ±eyëñ ¬ã3¯yÉñí>Ï:>çWÿv|ûÊÏ9ïÆ×'_zà,ûÇ oy³¨~ÞOÞ0–ˆ~ùÐh:#ãa·±g<Ù“tˆ¨çÈ|ŸË þå©tA5ä0µxÂÔž5‹î^JDû÷ïw\Û°îIË ¤M›~¿âˆv­xh×òÛeÉ ä‚^ãï9"ê:ìVÖ èvâoÙïëyÍ|8G¼ý˹w³ãﺃløðN+A÷1w±ƒu³oOÔˆºƒné=é>{?`õ{‡¥:þ”ˆ´+þ{c®À[¿òØHƒ¹/þ|Ô…þèÅ+½_2î’gf=ÙÌÿûé„KŸMû¾§ýüŸ.fÀ…³¯{™h˸À…î=Ã:þáoß"¢üîûößñîßî:_r׉èÿî8Õžà'¿{ïÙßNaÇ—Ýñ«>}Ë$+Á÷@D½y]ùû™¹iüÏÿ0“ˆþ|ã8»°÷¿~´õÕ5|Ųb<˜ðî;Š3GL‘ì‰ÈX°qû¦éDÔñØ“'|ˆ¦ Ý£W“ÇžüÔ3Ï^ûÔJû…WEAOF ÀDTsìÕµÇ^MDûÖzŠì^ñЮY¾ o—=HDíþºýÀ_Ñ7Kþ@D;–üžˆ:žpS§Á7ÑöO°ç°u3·$ºÅ‘'ÝväI·ÑWsï>zäíG¼ƒˆ6~tmüðN":fôÇŒ¾‹ˆÖϹÃ2=Çþ®ç¸ß%Êó¸‰Í"«§ÿ†ˆúNy ï”ˆhåÿn"¢ÿ½‰ˆúö‡þ§ý!ǽðµk¾zÍÂW¯NšÒr}ôâωhÔE)’ö:õ—/²À›_×Äxíáóì¾ WuÝËö˜°Å¹7¼Ê^±YH °€TßÍc=692"NÁ¨~Ó7;8´g̰á·ßð›Ö#Î8wl·aŸRÝqÔÄ7¬œùU.Ô*£8ýÐAC‹›I¤Ðë—õŸ?a÷±°°;»WDâ¢mûßÀµp÷Ëܹ4f1ᎃnÚ±ä÷VX¸Óà›í/a]†Þ²uÑ}[Þ×uح݆ߺyÁ½›çßãqlè÷N¾sã‡wn¨»“}ì>æ.ޏcï^7ûö/fß–Âó˜|ÿêé¿YÕ<,ÜïÔ߯øïM+Þu†…#S¦fÂÝœ\ÁÆþøéˆöÿÛeì`ü%Ï2Û<á'ÏÍxî'؆‡Nºìÿˆ¸É—??ýéK¦?}±uÞ16Ô ¿ó§ž~Õ ö¯¦þòÅ·ž¸ðÍèðÐ3¯y)ö=À><ôܘá¡οùõ—8Ë><ôÂ[Þ¼ð–7_¼ï +,üÃß¾EÙð%]~ïûOß:Éî úÙ3i~þ‡Y¾qÜŸ~ ÿÂøåÃsž¸~ ÜAÀ£ÍðB¬®÷bi¸ÕËöî7”Í4ckÆ…6=ÓgP¿ßî;é–«ö|²ñÈV­úŒŸRÕ¢¥¯¶vÓg«ÍuËöƒ{$Î0ù0}óáë\ûFûÂTœkÆ5›P”kÆÙm֌ÚqX3® ÖŒ;p­÷¼uuusæÌI)½µVDW±5ãØ™¸sÄøm›·‡BÁÙ={Üð“&œsîG_.ª¯ûì &¬oêۻ㞯פ°Þ¤‘(i*z£Êº_{î ä™Ãó„1p€2"Ñò ÙJŸÉUn¾ =ÚÿÝnɯª†vpË–Gï¿kðq½Æ÷i»i ¿¶sý¼ºµwجohw\QVKâaXóŠßJ+V HƘ1crš>“«’Ø"ŽãyÎ49wï Mo¿ûÞŒÅ-µý‡8“oѾ]HÓˆ—xŸß0È0L®ëÑ«o±=‰93Þ›|êÔ‚ YX1ФJE¼ÜÉS¨’y(Káb§J³}ļ¬ôùÚ5­Û¶4tôªe úž‡Ù}W-ÿ䤓ÇѪK[·i'+J>ŒUË>3aJÁ…,¬ER ¥"^îä)TI‹¼”¥ð–ØaëÅÙGÌc<@ |ô~Ãú<üÛwÀð½ïO µ`°8F‘YX1ŠüI›x¹“§P%-‰Ÿj™ Ÿv47Íx@ º&_öm5¨wˆ¨©)¶gÐP_BVŒ"©„R/wòª¤EÞÊRøX±Ó·E>? $¦/‰… ©Hä)TIKz¦Q‰ Ÿ¶Ø¥4? $¦/‰… ©Hä)TIKz¦Q‰ Ÿ¶Ø¥4? $¦/‰… ©Hä)TIKz¦Q‰ Ÿïx@A(‰åŒŠDÈŠ†T$òª¤%½òX‰ _Èx€}gVH”¡»x‡Œ¶\º¸.éí%YJ×&Ò!žG Ó&‘u΋=9ú䉨¿ŠMûmªO*×)%ñbŸQÚ)%™½?¬”žTz­Ñ½¡z¬"—Æï4m¬§•Ç‘=“õÆœ¡ö¦²‰ÄÖlîê:m!ó)a"1,MQ÷ἸúÝqÒqÆýcOª Éû3*¸<‰GÒ'•Ikto¨^ª(Ñ}óü;M/çœê™üÿäS³:¬‰]ì£õ.ï~>îåì_Go ‘xqÃÒÅu‰ÞØGfÏÙ¿VbËÈ'²Ûq¯Í¼½Ûåq¼M¸·ª4Ĉ«DFŸ<ÂEïØ¿MïI¥Z®¸ ìÅzâÙ­/·vÜ=×òx!+9;žQîîëåWàþ&áh ±¿V/¯bê÷Æ´µ'RD¹kEYŽØÕº—ãXÓƒsç§‹mÙÞ»l.¿Š4„toбÍÅË«tÞ|šqû)Ý=éÛKÁ½çâÅ=Žý©g]ž\<ˆ,âý¾Õº÷—n÷÷Œ¸¾¬,VZÒÆvcÎ]+Êòü€DÊ=+ƒ\ÛÍJ7- !½Ü×þjP uUlwOT‡)Ål(-oo殀4ª‹õÀ\´î„—*JtßDo¸Ùý¥xó‹«L3©´¬è¤™d«űÖS!Ý<)©ø¤‰+y~@RE“çx@&ò¸~í¡DÆ íÖ˜¡šóRÃq=<Ð3¹hE)Ø ëΩ.?žDnŸ´‡>?ÀýE/ÿâ¥-Ë;¾#MÜ_鵯ü4€XçL~òö8AžÃ3ÅÙªùfA’þ° .@Ž„ÌÅЈ¼ÕU\Õ“ÒÝóÿöWl ) yâV{ñ”4Ñ}‹äM¿ ôL"±=þ%´Š,'ýKO>kPPÚ ,ñÜ{II«K+LÚ@½´àLjÉ婊†v³]×X¯¢±  õþ¤raÿ’>¦ ŸQ É“•œÓxF™ß7n¥y?™‹Jó¢grgä<¶" }A¹s„Åê8i7qdžº;]ü›WšcŒ•8®ÇÍãµ™Ôa¢[x9¦¬:cµ|ÜÁ I=ÞŸT¢Ç·\^ N¹ñœz¼uìÖ’]y’>©LšAæÓ¸Ý×åwš¨†SýU&}”l´kÚzÆ¥íÅêŠT[TîâÍöñûýI/ذîóêšÚ”ÖŽÎ|"qÃú¯6~1lÄh"úlÍŠêêÚ¬¯éšù iC}ýW×31GBz”0×bóÝKN¼ÜÉS¨’ypÿ5e(|¡æ¥ÚÅöHcc#ÅÝC˼•™4)¬TBâa½ 4ŠýŠWÈ4üERWhHE"öˆûjåþkÂþÙ'[+ÊåtÜn¶:qÙ2m©°@ ‰‡ýòIÒßTÚÂÄ”¹Ø˜PžBbÿ€û yPlÄÊSHÄJH<ÄÐ< (v³qAmÛ´NzÁŠå˺÷ìíä5ÖߨP¿àãYªÏG3â¤ÑIÓìÚýŔԣôéâù@­?PS(Àx¯½ú†ÓÿûÖ˜ SRè@Ø?¸{”>[³¢Sçn²¢lÛ²1ÿëÕûxMkÂú8aÎŒ÷¼OH- ƒZ0ˆZ€bÆ{x åùÅ9ë5Ô×S*ÓJiÿ^ð®ÌKi~/xWæ¥4?€'Íž»x€"ñ¨\¼+ófûˆ…ú˪€\ÃVµÄ¿%±ëd1ã]™7[+¢¦¦Ú%ÓU+–íŽ(º¥ŒûTáúúw­Ä(x? °K£ÊÄ*‚]ßîtù¶m»ö¹ä°+¾J®+€ Áü€Š0Ý{öqI°dñÇßëÞ2—èûo…×úRtób#<Åÿ€µÂ¸Ñª<§~ßþŽ»µëÐÅ%Í”ïÿཷ_¶ÔDAz¿Ï4dŽ•<“z¶‹]´*†I•j]ÅÇË™TŸi>Å0RŒóRj‘%ÑK-l:tèºuóÆÒziÈì2[2mÛ³ ˜F]92ÉÅóÍ[B? CJ àh£‰Þõ¬ó‰4¯õÑj÷Ô|7ö¸¹ÅfèHo æ±-&zóŠ›Ry’Þî›o¶\wqhh¨O¯£–T´®©Ê›³—fãåÆm6^š™Ç§7½—Z²Ò¤TWI5¾—ßZª¢¦Ú„<þäÑÈ %pWë)õUí?xG&î¿RÇqv_£âÞ+‘<ùoý^ê?Ñ#ÈÿûšGµëý¦ÔÌR헤݆ݽ7}¹~MŽžu†¾2?aïÕˆ~@†”ázA)½C¥ªI³å^Hô+*’Öìðçf.U‘{Õ‹Í/”jvv°qÝj"2MÓ0 ö/Çqù¯´ôŠæ}æ @†`½ OJ°ÒäÉî«ÞÔ¼¿x×kIkÕ4MÓ4‰È0 fØù%‹æ8Âv?d"ÿ^v_#RÊÙ=1ZW†`~@a^.ýêÊïe'wQÇ2nu^ª+n‚/ׯa]]·Ü¸ûÐ!^– ÃÐu]×p8Ìq<ÇÏóÌBê}?‘Û'=1Ю2ë|èµ”z÷åÚ™ËOé6®[½á‹UÒ—›zQõÚëZ0¨i¡P(¤i¡PH ‡u]×YçÀ£%ÈÅ;žrñà]™,aÐ)+½Ú¼½kd LD×nßó»Žil¨ÿbíÊ¢j—©Ê×Q˜yÚéSØJì¨+æúçO½özç;ïiÿÜß·ýñÕšÖÔÔÄó¼ ‚ |\÷ÞàáãÍ›Á‚Ç¥:^(+u›¨º\ª1î0èñL(Æx€‹'Ññ:i¥ÆúR'SŠ2¥:Û(¥±¡‰Ô–—‚PêcCCšÒ‚î <>/õŸ¨Rò¥!³‹ 9} ‰š™Ç¶šèØûë‚£®˜÷ŸïÔA1 "·l9âNùÞ‘ ~}­Úºµ ’(J’Ä^ÁäyžçùØÇúLU{,~Òj,¬±/'¼+s¬šó·þµæú}û;tîê’àÓ…sëÛ¯¨j¦e.’ºb6 ¸öó^LdšO†ADœi®›0véùç(ÕÕ²,É’$I’( ‚ ð¼ <ëQ¶†•ËĒѺ¡pú—5-j¿Ù¶eë–M‰¡2-E™ ¥%íue ÒöÕ0M"2Éäˆ8Ó49î˜YuÝ,úô‚iÛFPTE–dY–DI”DÑ4Ö!(”H[éÃZdö.ؘòèʬiQ{\‹Sš¥(s>±7«®ØxP]׃‡"ýwf ¢:]n<4♿í{wú—]êÙ=VdYÒeIEQEQà8NÓ4­nAÞŠ“ÞrO0â]™7¤È²ËªÕKÃŬwùk„ã_ŽãN6–ˆFMø¾^å×™0M“ã"Ã09®zûŽiw?Ðâ‚KmÙ2åôi‡wz0vÒÄpX?aØXÃ0 cFž÷sŒ"Ã>byÀ»2G<€€ÅB¡ðñÿ¬jÓ×Äsd˜&Ç9:ì£! Ÿ½úœ3äšjY–Y.æ È.ˆPÎ<²[Õæ-V@˜3MƒçY`€‹Žât£÷û³ŽùxÁâ‹~°cݰO-ª ȈPn°w÷½z´«›Ëúö;ælƒA•ƒ#Ÿú¿ú×ßž~ÙÅ¡ãz…TE‘eG€Y‚< @ÀzA”›`ïú‡ºt""沺fôk»wˆÔìÚ}îýíèÕcîe‡:vPB²¬È’¨†$‚}&,A9õ‚(OKìÔñðÇè[?oÍ|AQ{`‰NŸ}1í†[WO·öì3BÕU²,Ëá°,Ëö u Ôs€ý„(C@Äí¯­!ž'ðÇÌæŠÛn[ÃèûÞŒ^³?Zü£l9Bõ©º®K²,I¢(˜D‘ Ì@y€x@ùÓ¢e[TBåÀÖ Òu]‘TS8Ãp¨ø¸ªßÞWˆüÆ5mÄ3o|ý9×_ËßG’|²b EQ´‚,ì¾½»ì7}¹ ÀΑGwO®Ù({°þ‹Õ¨‡Š²D¤ëzHÓŽ“%)¢¨ÏÇî²'æ‰L"“c_‘=ÿ»=§ÞzûWÇö˜uÁ¹BÛ6 3’$Š¢ Eo m»ö–èÑ«/€%‹>î;à÷4ˆ”¿èÝwª¢¢`ýM é]ºÈëÖ1…ï0 >ÚàLÓ$.n“ãŽúlÝOo»÷ó+~ºû¼i>ŸOUUY–eY²-²¬.[2¯m»ö;¶méÔ¹[ÛñôíLžzÞô·^q7ˆ”¹8â¨î²¬¢6*Ï'hÇë[·žÈ©ÓíZÞ)dÿÊÑiàLsõ´s7Mž\mÇñT”ˆLš´ü´Sªª‚$I²,J²$É’¬ÈŠ*J’$IÅcvïÞÙ¦M{<ýTA< $ÒïyX$®*PP6€×uŽöutDÅǼûSÌ!«ÀþÝÛºõK—ý”:wñù|>¿ßï¯R}Uþª*Ÿ¿JQý²¢È²Ìv%+`< ±¡þ°.STYASOÄozîÐËîçã^žêŠÐI·½tÜÈ],ØT^¹S§ˆ“ÇöâŸhŒÝôѸq‹ÆS}>Ÿ,«ªâóù|>¿Ï§*Šb›/ÆÕüEQ¼Û€¤¿—n½Ç­jóÖ×ÏÄœÏÕËqÜç•gœhg±¸’À€$–  ¶O$sï°}äãÅ„›½\WUÍ3Z‘$Q”EöE:>¿ßïóùdY–$‰½þÕ¢êZÃúô¶zùBö¯K²D¹Å=Ÿ(+ûùüÎh8°?¹fÇü€<øj\vH΢´8ú¢,wà€5ò‡¢ËEØ×‡pXÿÁƒ£êê>=õTI’dYVUUUUŸÏçóùdY‰N(º~@æôé?,®BOtÞ»½It#Gž™Ü(ýþâ´1^ †½Ÿ<æþáx^oß^ª¯79ŽâM>|‰ÍH˜wâÌY«‡ Ž®EQ’$™­(™vØ”“ °+k»ŽNt>+7²tÜ(ofñ€Òë” ¼wB}úHë×s¦iò¼e⺀È%69î¼gžùϽ÷²Ó|!zPÂÀR¯.î ö•÷ó±æ!C žÏ~┳ ÷ëGo¼áPý‰ €ý|í®]Þ~{ÃE†®ëºa¦i˜ÑÍ)Q½™hí¤&Ÿ6ñ€$n™¤ƒò#ÞýAª€ý«u$SýdÄódSôßvîÔnÛö8×FýBÞ}wýÉ£4¿_ÓB¡P(뺮ë:ÛE€JpÝP¦d¹z n0 â B< ‰[&Ö ï8i7©Ž u¿£ËM=š(KÐЭ[ ¦©­õÝ cÛ¶¯\~Y°M›ó|¨Í¶m±]ë`òüàñÇTUmjRä袡%Nï­X*7`W¯qÏÇý{2Q>î9¸\ë=àn8Ž3Z·ætÝ¢ý}ÃXvÆŸLœÈñ¼ŸçßûÕ¯~xýõ/<ÀÌ@Í·ßö|啯/¾X’XLXbQfJË8^®YWfåÒù}ú[¹t¾u†ã8NÿìJU !@y›_Ë–‘€iìÜyæÍ7jÕ2 ë<Ï ‚ ´l±ìÊŸ øË_SÆì«õyó­u#GêÕ‹ ²VL%_Ý IDAT.]S÷ö؆a+–Ìë;`8ûvÕ²Ö±ÃMŸ¹pdbéýDñ€Dã…²e3 l;ÇIªj*  n¿âŠ/Î=WÕ‚B(d𦠢( ‚¸÷¬³̘Y½aÙÙûœiNüýf<ñ¸ÈV’ØöÂE7<”-_á’`ÝÚ¥–hñws&'ˆa®\ºÀÒ¼lc"î‹5K,óf]è8v?éø*i&^2÷’‰£N’¦A< ¹³€Òµ¼ h'ž¸ù¶ßjmÚƒA)sÇ–þE‘ˆ>{ìÑ¡§nÆ9ʪwîìñÒK›.¾Ø ¡GH–UÉÃD\ÖP7o=îı;n¿å»S§˜ÄGÂÄq¼À5ÿZÒs d9¹¢Æüʹ+Àó|Ã+/û›‚|Ó!"’$É0 žç™ˆÂ~ÿæßÞÚíž{MÓ´¶ ¶:Ì ôyãÍ/FŽlìÕ+º•dv^,AH jÉÔ“AצVµö“ÌZvzë¶3g~ÅO¿›4QõùE–eE–%ËoÆÙ|C¥a´`Ò4ˆPÎ6ÀÒøÖBrö×m{Á0ŒÆ /8ôÊ+ê_°f§µy„¬é^ÿÜ´y»ÏOxà÷‰aóEP²H@à‹ø¯6%¿ñuDl}¶iq¾¬úæ›ão¿mõ}÷Ù„äbG:Ñ–M4­É£ Ðu£±êðd»óÇÞ °ìe$:}öŹ7ܺlôˆ¥§N”ªª"%—š “-­iˆx„ž{Îî²&ŽY¯Ìo¿íþÒK__|±,GüäLš¦y`þüêéÓ“ßuÑÃL…'LÒá“O?Y¼˜† a=ë•ÛavïÞÙ¦M{/6 2N©U[â92L{ Àl®¸M®YTœ•7ŒA³ç?oÑÜóÎúzØŽx“#xžY¡„V˜@<Ì#U‚ö­ç#+K¿þƆ“O{lS“Ìð0Ýñò+<õ®‹»®‚<ö‘Gg<ýÏ ÑéZ‘ðƒ}ޱ¢¨^–É´l€Ñ¢…)œv¨xjà¢#…œÝ Q ýÇË ïLçòK´^=x^àÓäˆã™tB©Ì&C<àêbc„"cç›N™fÿý>õ”ªú4MS…ç…Ðêåm¶nMøâ=Ûüü«nRUíÞZ³öЀþr6eËÞP%%0rìiZu@ …)f/eÎZÑ(ZF»Gˆ¥ei{÷ÿûG¶ß§ÿŠUϽöOÑ$â8^DIvÒÄOÎæ8nÐÐ1±bÏn€ˆ\=BlŒñí­˜´œ¨L/Á âm]V^Ý4™êˆÌæ•À¢#·õuR ¨I¢(†EC4(ÁÊØÅ†weÎ;\H.øP6!I’š.8ÿPœiÏ[ºoåèÑ/ÞwŸyôÑÑeD#NðàÞ}nY?B4-ú· zr'©šöìÕ4-ÔB¡ëy˜¦‘ à>#Š„»£ŽãÛˆ#ÖÑÑM“çyãxž×c†HímÕò‰__w‘ÁV¡0 Ã4̘ՖŠïÊñ*Ñ#$˲®‘1B¦ID‡Zµzûºkƒ]º^Q¿ß¯ª>EQdYáàî]^o3<5ܳ'Ô¡}8b6À0LJ«püÀW,™‡/½ÿnó7·Ç Ûr§›¦Ð|ñTÎ4yž7 ƒöf±`ô(Ÿß×ìZÂü@¹x„LÓ”e©ªk—oÃíwl=ûì?þ‘+¦É,„Ïç÷û}~¿_QQC S¶Þ¶F74X6Ý—ËÈÙÂííØžˆì)“-îÍG»|t,¬åâLsw‹Ú¿ž}f¸C;U%I""I£ŽãíÖ4v'ú¬lŸ$÷†qè‚ Võë§uìX{¨) ±dYbëùø|>I’ÙØ}O¹Ûµ¢·~@tzWÄPZ½¦Žû AD5D{‰L]gšÚ lÁáèàPÛÇ1“0}ØÙÇ*ЬJ[ÕŽØÀ$Y–$¶Þu³ib–Æ·‡‚‹Ì$ñ±Q˜¦ir}û655I’díI)E• ›,ËqœR[ã)wûRÿ[½ ¤ªŽÝÇ8›yð^®U˘¦ëMܸSt]xÎ4¿ø;÷Ïižù.¢™COAEY–EñùT"RUUUY’Ùkö:´¿þ›ð®Ìy‡ Éå?ÊÉ#ÄÌ€¢(ªªVUUUWW×D©®®öû«TUef@„@‡ž²¶Fˆ¾êU¾¦&ÃâØõ/Ç‘ Šºß/‚©öñ†ADºiÑ×»ƒÈ0Œ¶D“}Ê ¼(Š’()Š,ËòÛo¼|ÚÔil·A¹réü¸QfŠç{WæˆP¹!ë8ê2#jT¬EC™Šô·ní)ß.у-^%᫪œ› ›÷u;i‰"ûð|°Mkÿ¦ƒH0Mb+‘i Í·Ü1 C'¢hLxÂÂÅKúõ¥ª*AØ.7’(ÕÍüïÈÑ“Ù%Ì$’ÊÑH-p¤É‘C ñ€'µÙ/óË;NZŠ•„ƳÎr›"ÀH1 üÙ <[‹'º^ë¥Xf@V9™:[·v©õ:oÏó‡zt÷oúZˆÆ{›M pBæ#2MžçM¢Ë_}ý¹ë¯fë†*Ь(²ªªË>ùX’DAÙ:Ž›Æ•$î·±_%:vÇËÄiĞ̀õöíØ“ÒZ&“ùèyžßyÙeG¹ÛûTao¾ F²öv?lŒÃÂȲ*yžpÙ‘†›úôæfÌŒ¬ a6›쬄æç[íÙ{ÒœVž9•ãEŽyQDY”dI–c·Ó)²œ\¿c½ €W3@Dl´h¬yˆ¬¢ÃqÇùôwî,nÛ–-GP}Ë–Á#Ž DöŽ,ÖÌóœÙ˜é;Y’Å1MS× âx㨣ˆ8â9kUTKÑïèоã7;ãTEt‘Œá³æ|6âD³ºÆ4YOAà‘DQ’ŠdÁ8ÙƒŸó)wâ~ÅÌs×|õøcÝÏ>'[Ž —/¼@’eY–¬EªY‡@7tËH²*yÖK¦iòºÎ ü#ˆÄ{yžcËÄ™æÞÖ­ÿñã6µnuÉ“igÛÇê Xgÿå©7ï¿W7 ¶n[0N°íªVØçå¥c„x ›F‚Ù€ªaÃŽ[5{vütVÔÃÌ€ÇÛÔ½G•,«Ø„dQSçŒèQIVd)…~€!á°.´kÏéºÙÿ’ãLãÓÓN]8n¬Èó5<ÿî5¿¼ôæ[(fÀ¨ejwíî÷Ö;/¼ Òõ°aD&Ïs‚À…yð!Èr/½ ï|ú©.cÆÊ[â¹{ºyÍs_ëÖoÿä'Uªêó©>ŸÏZ”‚ÅtÛfî!-¨¥Òˆ„…«|Ö9 :þ÷Ú«¶l¡êÇs/ª…—\<ìù¿9—•Žöˆ¨ß»ÿ]=t0u?†x2É0LC7Š"[û Ð „´`Ò4ˆ²ßEQõù7½õæQ“'KßîJ/«†ÚšÞð+Ÿ¿ÊçSý~¿Ïç÷ùTUU%é°†e);vîºvÕ’Ž»zÏ<²¹¼:Z’xM[sΟL£…Âáƒõ¦iò/ ‚!k‡öï>³Kë-[c7°ŽO}øÑ¿ßt]uMMuu ªÊï󩪢ˆ¢$ŠBamÀ' æ>2‰fG<E`ÙIÒ}mÚ|1}úQ\Xõùç©fµ³K——¯¹Z­®ñùÔ@ ªªü~¿_UU¶,ã-»cç®;¶mÙºy“÷®ÛL¦ã‘]Þ™2fU•¶áópX7tƒ8ŠìÉóDô—ÓÆýö/·ë}#:i–´Ü³÷˜½cÿ‡sk¿ÜÄŬ&MÑ•$~ôÂ+/Þr#Ç‹‚(K’¢(¾è2J©y„Lk'ËxfÀÊÇeŒ–ÅžÝß’-°x W!¶¨r䕹sç7Ýøå•Wjk×t]´¨ÕŠ•-¾þZnhVU}×¥Ëöž=×w\°[7Q–k%Q–e¶<[˜šõTÕ§(‘N@¬V T×VR[Pˆ(¶u8Òuƒ­Äæ>3GÓ’š¦­úãý'}>Ù¶–¤æã…Z~·gèŒÙkÏ9‹8$QR$EUEEk*µ³dÙ;öŠålþ%ÎÕ×T¨Ù²iƒ»@<+íãá=Š›ÞÙ÷øÍÁ&MÓÂáp8fºXå8?ϳÉÀ²,˲Â"ÀlmêèÊÌR¢1—²,l¨OÕÓbõŒHŸ…ˆmœÌqz˜gk††…ôšÀê«®è󧧸˜­Ä¬ –Oÿ`Éñ}ÂGµà¡ª*¿Å$º+kKÑG{N†í ™ ˆ.ÏÁñlDÉ´gŸñ–—/_9vÌ(IçÎ?iâxŽãEQ°ø1MS;ØxìåWU}¾.¥‚ôý׿;Ï_4ãŽ[Õš€ËŠ¢È¦$‘ȶ±$ÏCHä¯C`Ù+kw¸c`ÜñØ `šÝ;VzŽãx^`û©-¾û¶ñ]ÙaØ4­Y‚i<Ï™f‹={½÷¾4õô¦¦&QY؃uc¬…WMÓ ×8~ÚEò®ÝiTi«M_ŸvÝo=pw¸e Ÿa˜†aFöR»»ƒx ®!f+QSó½ (Ûó¡<öìv‚ufÌœÍqÜì9u†aŒ9Boߎy„ìËY£ƒØ…ÃgÎy¥ªªï”‰¢(†B!-¤±1<3gÍa…ÒC¡kþòlBÐ…è\Û«¯ÆÙh¡jß¾Ó~{×î»ËÐ Ó0lu(Z±¤¥F<oK@¶ ]ÒäËù×e4q¸÷?˜9qÂ86§,âúï{5_}MÅŽe†á7³ê^;y¤Äl@P±îÃY'ŒçyÎ4é¨ëoR¶m/ÍCD×7?s.Ñ¢‰¶6;]³û»1ÿ¹îÚ_î¬Dâ&\l”;¾fG<P@c]ŸÈÛc?›Ì YöýîŽñ]Ê™drdšÄ³x&Ô¶¡aÐÿÞ_yÆé¡P8¨i¢(êºa:Z¶¢ÅÇóã‹øïæû¬Yt%šgÉÕ#W¯5W­9Ø·7Û½ @áJªñS2Z¦i oš¢i–Gˆ™3“ˆ¾)Ú-àˆ†Íœ½rðÀP8 j²$éºþÁŒÙ<Ç]ùÐcñïqÍ<Ýcç!¢®Q3pn§ÐÙñ…»nåy>2ŽJx^ày.ÖÕ‹weÞ¬[ë.hg€rí»pÇÆ­J’ôí©“··kËö°B “ãX·`Ú3χC‘é†aŒ5bTûöµûö'´–øU4 pb©jöíã7~ÕÔÔÔ jA- ëzØ>ÁØïʼ™ EÁå PÆ6Àîú¿œm)}ËØ×ú²Gw6V7töß1¯&X8ïÜèû>ýÊv~krÁNúpnS0 µ …ºn:3î–À»2G<PÄF`7vY[kŸ5f×þ{UõŸ?¾Ð8êHnÝzbC¡È4 ½ÝŒÙ sg~ž-1¶Á"Áî›}V¬šÞ ÊŠ¦…B¡–uÉ “’uT´~g{8nLغvâ„q,ÜÊÌ€ ˆÖ!»X4ä„G»vе‹O:<ÛùäQ'}8}Æhãë§.DÙ @â>¶¿>ä󱕸t]7tÃ,Æ0?PÔÈÉ^iO;uŠÇo­ã؃Èû¾i†)ŠáÓNÜÔ\vÿïNþÁ˜8X[ûÂ%?<رý0>²8ÒèQ'ùÙÆ2²<¼oŸŠÔ…h¾ÍA4Í5ñÁƒÔ|+7¶‘ûDÌ€”aÓÝ"ËÉI†Þ±Ãç×þ¢×£O®Ÿ4þ㳦òa=`š‚ÀK’¤ª*[[–%AôÆF¯÷¸ŽèaÛÇiIúÁF=‚a¦a—|Šæʤ e°f\°©Î¢d¢,ˆòþ³Ïü¨oßCíÚ¶ á°išÏÉ’¬ªŠ¢(ŠªÈ’ÄóÂAÙÃâ¦Ãˆ¶MÞB4-:N41FÈÅ&)JÌîcœe®¹ƒ”’¬J²’ÿû²•OEI—$Y)Š ‡ÂºÁö%æEQ`; °ÝoLÓ¬éÔ)a^]ˆþm{ý_@t}ò× ¡E­(J¢(‰’$J²(Ë’?â€r ¤5侇ߺ #yŽÁ䈈#NxAà8bƒB Ã0„€?¡°‡¯'z$Ek$˺Öu6¿+¤‡B!#dï²Ä×ìˆÊ€††zY.ŒÚ¾!¥®D‘5±yž7tNkl¶Vv(þvÂØ8Sþm3ÃSxýg,;®W(¬…´`Hk 656É‚ÀÓ¡ƒõ-Zµr¿ñ@™ iM õõ¹udAl"3º1=±—oŽíùNdºÖû'Ž™â°×Ù\@”`"Ø´x³¢¼Õ»WÓ¡F‘'‘'ž3ȇµ¦VmZ'•ñ@¹Ø€´¶ξ%°Ä‰˜èBÙ†aaë}ì¡¶m|ö®ó{b°§:ÐØµ‹OQTUU}>ŸÏ¯ú}ŠªzÙñ@™€@um1KÙ=8¬k!mñ­7ž|í‘/†Ù¼@‰Øâöå³§R¨®òû«««kjªkjªUUªO=X¿¯¶eË$šñ@¨®­ Ô³„Öö™Z($±çÄa­æ/$"ZháL‡Ï»ìÕ3àó1P[S[]¨ªò+ªÚºuÛm[¾ª®q«Äå€,Ëê‹\HfÂa]Ó‚Ën»yø%Wø¿Ù™I†ßµ¨ýÇ™§ûMƒ#“LÝ4t=¬…BÁ`™†.Ù^=ˆʆ¢7VW@×u]óW÷Èc®ºÞ·goz¹íT=ü£óEID^yQä8Þ$S×õp8L¦™ÍùØ?P¼hÁ`ñ É^ÉyžÍåµï?ùðž#H#«­íÚ>ðÓ‹ÅšjUUü>ŸÏç󩪪¨Š,‹¢(ŠÛO8鎒Ø?PÈŠ"çw½ Lº†aˆbXeAæ?ú‡#^y­ïK¯zÏäý“GÎ1¬JQTEñù|UUlYRŸßïg‹Ó‰¢È&%464¸g…x üñ²•|ܫܓ%MW kfq8¬‡õð‰Ã†n>×Ö\úå¦ã>˜åžÃü!ƒÞu’øeY‘eEUü>Ÿßçóû}>ŸOVdQy^`À˶òˆÊ¢¬àPÖ©ªïlÁnj†išºn„Ãa-¤ÑØS&vèÐÒœûÙ;ÿû~HëôÅú6Ûw¨‡ù|;Û·ÛtÔË¿wôÁŽI ˆ¢$I²,ÉŠâSUUU|>ŸYšTEQ_MMµ¡†i‘ßç«­©áÞïóÕTDQEqÒÄñÖ( A(º—¤wyŠ»‰|J <¦‰a «óIDAT혦Évœ—$IxY–|>Ÿn說,]ºœm L&ùü¾êêÏó“&ŽŸûñ|žçxžŸ0~,Ï i¼þ§¡Ì”-IãÃ^Èé™íû‘'‚¢È†aȲ‹—Äõ ¹ÇòéJB<<)zûÇÌ» ÍçØPÄe‚œ®^:íÔ))»\ž4±—d²,{ÌÁ̓Ÿñ¨\° L:R¹¬—Ï‚`ÿ("Î<óÌ|Þñ@™¼;K2öHÄå@HkB%¤Q'ˆʆ†zYÆ»i3öìþÖ}CyB<P6hZSC=v>LR@ˆÊÇ`KáÔA<P& P]‹z°ãÅ„x T×VjPvª5[6mp7ˆÊY–6 2ˆÊ€´@<P œˆÊYQärY/(«$é!¨íô’Žàcsvœ)Â=&”E?ÀC' VÝçzÇ®ØÛ›@<☦¬ãš ë«T_ðOºß.öØú7‹½ Ä•B¬ ¶«ÔØM}Ýw öž8‹9$2iã]™7ÛS^—?45@9™Lt}z·³Û'ûM³~wïÊñ@ùt2׿¹Ž%äÄ ³Q„ƒ|Òñ¨\Tè{}/ñèòr_û½²â³JòvxPLø×]ózLì° WR£K³Žweέ^¾°w¿¡kV,"¢ššj—¤«V,­®®õ²… È-Z¶]ÿÅê!ÃÇø± .(SêCš¶lɼ¶íÚ˲*ãÝ´9š¦¹l!ÐP_ÿÕÆuc&LqÉ¡¾þ½öæôºº:Ä ÜÀzA€r@–e kÆ¥Ö €ÊóÊœ¦…´ ê”kó¶Ž%Y•dì2˜P¶ìÛ»«{Ï>Ë–Ì0hj”+, LD!­ µc#“× â0”¼ ¢††zY†¢.ƒ‚ÒP戔¶@U€òÃ2 Mkj¨Ç®Â‡ñ2@ñ€Š0ŽŸ •¬õ@zÊñ(7€Êñ¨\€Êñ¨\€Êñ¨\€Êñ¨\(Z´l‹Jeɾ½»ì7}¹ubçÈ£»'×숔½XÿÅjÔ(W¬uP6}¹¾G¯¾¨;K}ÜwÀ îi(лï T(KdYeK‡îض¥Sçnm;tFØ™<õ¼éo½ân(spÄQÝel°Ê—ƒF°eqÛwìºmóFTHª Pö/JŠÇ(_¬­Ä¶lÚ a™ÔA< l6ØåovïÞÙ¦ ÖHOÄÊœª@ l(Wï£(ª¬ ©§L™Ç½tq]ùÝ à|ŸU”4lÀÀ!£g*íWŒx Tצ7üaõò…ö}úsœ)]ìO®Ù+6`·ÿvËo_º¸ÎþjŸ(}¢Ko$ºK&wGÏ€ÜÁŒAŸþÃ,;ÁŽí–Ãn0â[—ØíJl>…ì?Uf<À¡=­‰Ôn¢ôIó·,A¢»drwò`âö¼tY…TóÉ)˜û+|׺t¼èîLîHIÑÛ?Ú5rRíÌ: qÿMYœÅG< }‘%x'wñË•D‰}Aó fâº}¼t,%g`즥¨ú˜P`Ä»2çíÂaÝå¯l4uïârwø…(ª7}ëß ðâó)¸_È»2/Õx@Ü9 Žˆ«õVîÊ÷˜2öÌx¹‹—»£?@æ¸Ä„cu}Òd‰.±;‚å“t¤i.ð®Ì¹ÕËöî7tÍŠEDÔ¶Mk—¤Ÿ~²°ºº6PSS]*Ù ïÎÖ 2|Œ?Pƒß9(KêCš¶lɼpHëØ¹kM½9 õ«–}šhíè†úú¯6®›|êT—víþŽˆ^{sz]]]EÄJZéPÉȲ*a™tg$WԘЌìú|Jë¾“± ŒÝ´UŸó ÓGNÞ•9oÿ È²Ë_êÜ\d˜UžH6™á ¨Þô­w|G0À‹Ï§à~!ïʼxã±cCÕÌ5uv3t Mé˜06€¬âŽÕõI“%ºÄîJ”OÒ‘¦¹À»2çV/_Ø»ßÐ5+‘ßïwIúÙšÕÕµš4¯ m[&*ž­:dø”' õ!M[¶d^8¤uìÜ5€¦Þœ††úUË>M´vtC}ýW×3Ñ­†‰èµ7§×ÕÕ!PìJ€JF–U ˤ;ë$ù;>ö("²î ’ôŒåcë$iìPtf•@H²Š­2bë$iìPæ„4-¤Q \›·Mß)²„~@óúñà Âü€²eßÞ]Ý{öY¶dÞ€A#P \±öiA ý§Lþþ‡xÌ¥mˆ¨cç®kW-騹+êÄÎ' æ>Ò= â•bP ü`€Ñ±s×Û¶lݼ Õb‘Ôâbì?Ê•Ž»¢+*ˆ@å‚xT.ˆ@å‚xT.ˆ@å’«x@‡N]üZÔ/'Àþ¯6®ËU<À¨­ªªF-@1““xÀ±½û­X2u hùdÁÜ S¦æ*зßÀU+–bÎ'SN?+¥ô)Ï8að°CE@€ù@D˜•l0?*×`½ ¨\€xT® @<*× •k€Êµˆ@åÚ/ñ€åKgIúZü2—„e_¢ò{ ¨ Ô†—"$·IãŸ.žß£Wßâ,ùÜ9Œ™0¥Èe. !˾Då÷P¨¤EH·zùÂÞý†®Y±ˆˆÚ¶iíf>YغM»£ºW´…ŸþÖ+“OZä2—„e_¢ò{ ¨ Ô†KìÚý½öæôºººÔâí;vݶyc1>¶E(sIYö%*¿§€Ú@mxWæ©Å¶lÚ iMÅ\òØ"¡Ì%!dÙ—¨üžjµá]™Ç·Iã»wïlÓ¦}1—<¶E(sIYö%*¿§€Ú@mxWæñm@ÒùŠ¢ÊŠRÌ%-BÊ\B–}‰Êï) 6PÞ•y|Ô…¤(Š—Š8dôÒÅuîg’^’±Eð"sçYÈCFÛ?æN¶ 9­êÌKë.HÔÎE1Ó¹°'5Eo“‰Ü89j´IS¦]ÏÙIÅ‹s,E(@< §6<Ã"Ä}çʺÀyÛ§!o¡¹Ì«=öE!®ÂÛåJ¯˜™Èœkí®íØüsá ÊJ›td·Ñ& 9d¥ýj'•¸O6×Í»Üö(‰"”ß> i”ÈEåg`Iª2çY`—ž4Úd®[Hk£P£¤¼·jšË_Þœ™4÷Ìe¶÷È\d³¿Ü¥:€/%!ãÊ)*¬_(wMÅ!vÒªö^ÌÉœ¹À.ƒmr÷Ó« /3“F˜Å†Ò­³U)©…ìþн+ó|ï'ì¨&—`Zzý ¬Á!@†#ù22¶mÅ‚æø* ÉÓ;”žo=Q¡\ê?½•ë§ÝŽûJû‡ãÞ8S-¬Çô.n ͤž³UIõ›K+Ê[ón¶vtMMµKÒU+–vìÜ5¨É©‘èqÜÀuk—¦qaCCýªeŸ:ÎÎÌ…2í+ÚAfÔj#»EpP_€â®Ô…$˪”û©néÝB–µ¸EÈÌ…²€,‰j/™Q¨ ‹ˆÔæȲ,É9_8)½[Ȳ·ù‘¹°B°€%Qíe 3jµ‘a<Ù€¤.$IV¥ØùÍ–LÞ…c‹™ +dÚ5V´%‚̨ ÔFÖ‹àÉ$R*ÉŠ,©1 ÉZÜ"•Ì%!dÙ—¨üžjµ‘´žl@RRH jÅj CZ0nŠJæ’²ìKT~OµÚHZ„D¤0.ˆ¢ññâ,ù' æN9ý¬"—¹$„,û•ßS@m 6’ÁŽ}\P3à÷û“Þà³5+¶nÞT„%Ÿ0ejñË\B–}‰Êï) 6P^Š`ÑØØß$í(uÒŸ œÈÕþJÌdÕlEa µj6€ÂÛÄ rmâP¹6ñ¨\€xT® @<*×x‰|¶v5j Š“c듾 HX¿î³î=û – 8Y´àãAƒ‡§iÜã_nØÐ±s·vº – 8™òý¼÷öËC‡Ÿ”Ž HèСëÖÍQËPÌäj?áÍ_oд&Ô/3¹ÚOø»Ý;[·iúÍ' ý麸gN6:6½õ•ãªØk%ˆ›¡K÷qïâ^ÀT³Jš&ó[s{ð’À¥©äA$PrµŸ°"«²¢ ~óIl…³3+—-`0Ü:¶ÿ2'0Üž[¢ç{•ýLì½ÜÄ•-‘H±ß&ÍÊ‹xÞ¢¨ð"^ÜÂ&­ºì6QPprµŸ°¬*²Œç_Sá^Î$=™è9:ξfi¯Þ?_³”ˆ¬ï ìß:`ç{õèÒ¢_y)¦ý£û-’JÛ«÷@ûWŽ<­ô©&ð˜³=™#K&é5†DY%=ÏNʲ[™‰ž;È¹ŠªkaJÂ|¹~ÍÑÝ{¹~ ûÈŽîÞ;Uªåˆ+IÜK¬ó™Ø€ØÌ­4öâ{/¬£Æ¬óö½zdÇGwïm]â=—œçcËâ’Iª6 QV^γ²|<¾š€\ÓÐPO¹‹€üÃ~f3ZImIAs—*i/9»ŸÏCmx¹…õŒâ¾sàÇ[@r…Õ8)™ëgY¢?H—Wݤ鋼ÈÙ²ëÞó‰Mé¨[¼‚”¹ŠPü£øm^VÄ‹õÉx¹cÜÊI$Oª·(éwŽ2#WñYFL8ߤp8ècýõy‹t9☭_oH©€‰¾J”2ö…ut÷Þqep—6ÑÝíçã§” Õò²“±EvÏÜ:¹õë .׺×j¢[Ä–Z¢à#WñYVdYE-ç÷‰ªiŸùvÇÖv»|»cklÊDÏÑqÞ~ylnIĦ÷RÀD_ÅM{  ÉÜ¥Mtwûù¸Ç)%°ß4Ñ㦱›ôÉÚOº´ŠD÷Jt ÇyëZ¢ #H¹‹Ȳ"Á_”_b+<Õ3qÙ¯×ÎÞï¾=ÏNÚ?¶lÝÎ{Ç·^ زu;v•KVV–À.sÜ;&j´.·pù*iݺ'ð˜³=YlÇ·-[·‹{÷D5À.q¯çD·p¹µ=ÛØ‡òÙÈÙüY•ÐËË# ögx&îqì%îçSJã%“4„›&s]¾ûUJuëå8O6¥‚¤t»¸×:TDJídËs«x€$˰W-QØúRîâ!M iAÔ2ÀA º–½õCE–¦QŽâGsÌÚUK:tîŠZ8`+C`mù‚ó鹣ƌ÷ž>µxÀ±Ç÷ÙÚµ[·lBE@2aÒ))¥Oy?á£9æècŽAE@â=Ç`½ ¨(°^ÀÖ €J¶©:’” @<*× •k€Êµˆ@åÚÄ rm@cc#j*Uݸ뮻PPp£GF-@eòÿ;@€ÀüÁÔIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig22.png0100664000212600000240000005256110322727434015553 0ustar mikeuser‰PNG  IHDRñ—,ýþm pHYs.#.#x¥?vtIMEÔ –1bœ IDATxÚíy˜Õyî®ê}f43’F3£ F»ÄH( vÄbÀŠCXÌbl;×¾¾68˜³:cvl°ÁÇ1ÆÁ±ˆÅN,£ÄvX…$$¡}Ii´KHêY»§§ëþq¦K5µõéê½úý=óÌS]}ꜪÓÝo}õÖ©ï×.'®ÀKDÓÏ8•ÎC=äeK›Ö­@w@¥#¢ À5xµ/κþù¡%Ò ú×ÂPA0)<´ %†í Ó4-¦ÕhŠ”Ã> +,ðö¤ùžYíƒéÎX´l¾¦;cÚ†UO¦Êa,?MÛžÄ×_o×}½Ï·!Nx/ éÊTÓOnyòäæéVßøÃ7>QV‡÷á»ßþðoãcT ^«7º·ÿ˜-D&ßæ¸öcë'¢†Yw²—GÖý€ˆÛï:¼öûº’£ç|óàêïQÓ™wk×ï_ù5ŸuϾ÷%¢–³ï5¶²gÙ#Ú—ãÏûÖî¥Ñøó¿å`Ÿ·ÿï?²…É—>ŒïÀ%š^PF¶ßE^ó}"5çˆNÝ>°ú»MsïÖ :'ãÎ}€†*ÆŸ÷-õ®z¶‚>é’o $lûßomûó· ë7hzÏöŸQxÒmÝÛܵíǑɷ³õ±­O ŸØô£üîÓUßmš{÷Ußu\ƒiœ¾ëí‡ÔåÓ.ZÈv¼ù ºrÒüoOºF  :âôØÖ§ˆ(:õëÑÉ-Câ~bóˆ¨núDt|ÓM7<ºþqÎ&FŸ9äÀ0Aó÷ð‡ê½÷¶0þ<Ëe×;ß&¢‰>(í|û¡o-<ý¢…;Þ\HDm?4lD)ѶÿýÁ{¸[ÓÓ0ëN6Fþèºd,ÜtæÝV—ˆšæÞ}jH?ZïŪŒ6TWéxóA"j›?ôóÓ!è—hzOÇOØ‚z›´kÛS‘)·mŸT?=ï°8]}ëô‹‡Bu"êxãÁIóa¼\§‡'ÝÆÂÞîm?vññŸ~ñCB:Tg°{¤În±@™jº‘è”Ûc[ŸŠmv›´vÚߨü#+'=ït®x”-´Î»/»ý‚ÜõηµÞ‹ê§3Úæ?Ä„Þ  r6®]>ýŒ³Y®]äðB’#äðÂ×_oªØ^/ÿv r€{€¦44@á6îåý—oE4(Ë 4= G âˆÅºL4=™D×€Kât¯×ƒ—hº,Ièp‰¦Ç ô¸DÓá§€{4~:¸GÓá§€{4~:¸GÓá§€{4Ý5~ú–ÍñÑ‚â3uÚ Î’«ÞÝUéÌ=ë\Î’û÷uæÒИæ‡šî?}íÚÚ&ÏÀŸËÞ½ð¢K2[ú¦ÌDwU:oüñõ+\±Ø‡î Gjrih÷®“§Lu¢é.ðÓwíØÑÔ|E«æã–$©§;V„†L4Ý~úžv$ýøªR‘ñw´w7¾¢UôqwçCÐùõÙ…~ú±£‡êFá«òÎÜy¯ZþfÆbGGjÀWÔ-dü¸ñ¸$ËÚ5o¾µT]¾ø¢óòÕ‰¦»c|º,ùu=@îÌš}“õõk–Ù—Ìø;’e|EÝCÆ[’eIò«/ÿçþÄå—Z½´&Æ©ÏôÓ'Nš¥}¹kûzu½º\$¿,IC?˜)ÓçlÝôö]Ó5D”Çb¦ê`eÔÂÆ­œ¡­Ç¾ÎŒM;Þ¥¼TÈ_¸8Íi?ÄY³Ï±/œñw$˲QÓçœu±±äï¿Y ŸÉœ³.f•« ÕÌ+/‰¦÷dbÛt­[×í³UÓŽw)/ò.tsjj%Þô3eÎiƯw8R£ ÜT6®]^4Ó¶eº3ÕÆÍ·~Ùtýé“gíØ¶Þ´‹º»Nò|Üê¶VÚÍdÝt½}. Ÿn¬M]#KÒ¨–6¶|¨³C- ®T×jiS —µk¬DÓTšMu0ŲUa+Ѿ«®ÏØÏ®Z5ª=+°ÿjj_fÜ“¼Whß jÎTÐ3~Ö…¸/5£}žNŽg´ÏÓÔ5ÆÂê»ì-¶ ¾TWZm«]_ÌO1ý?žÿ™•¬g+t0j½QåKï§ëjÛ³k“ºfTK›³«ËºÐ^]¯­G·¬­Óè”Âô\bu&0nÈ)ëÆÊÛê.ìOy¯ÐªÚ‚6g#èö²ž÷ï¤N¾jÎYظ¡*îöÛÚWâbXž•Ðñ›0¦Rž{C…òÓwm_?vâtuÙø®¶-uY·Éä «g×öõÌ…×.WÐhz4dËÛ;6öe8â¯0« …n­©’U´^FãÓUg\ë§›¶k¿Þøß­Êe¿>[מÓ1¨¬Î)ÎQhÏ"üŸTütmH® Õóè‡XÕS Þ‹³P½hZTb?Ý8îE[¿®!ÎõÆÿÀ±NUm°Ÿ/Y·éÀBûé |‚t7‹Ê ç§‹:¿&_ÆÚÔ5º·2®WmtݲU»<*fªkù-–ßkÿŒ&@5PªN0~²öŸuÆŸF½‘üéVmÇö)ŸP=«M úq;h¨P~úž]›T]]cÕ{©ÛDæk7Q—M¯Üê||AÉ£å¢"’—ú³ªÐX³³aˆy9×fÕtÞ¿ÐÙÙö «+À#÷êXF«m«ÍOçÒÜYEèY5$l\»|úgoZ·‚ˆê+ýÃØ²yóèæÖpn™-+”–q§w~´#¿% ÑzùÔœ÷=éîŽmX»Ò>…úª•Ë›ªõ+Z)Œ0eχ[3ëîŽmX³Ê>…ú¾ýû$É/Iý~ñë¹à*Î}ÐN$=lŸBýÈÑcDôòo—¸0ß‹$ÉUû\ÿ¢‹ ×íeò>Йi?ã<¿#Iòûðèfs`ßnžH’²¾·÷ûů;Þ«Òç{)¡¦ûÜ;*ƆãÇ×Õ<~ìpKfÕzᎫ‚¾{Ä—PÛ'!‡— ¤Fâþ¸ýDtÍ5×äÒ\õæO—$Õþ`XŠü–Ù^Odüù$u†.ÃÇ÷qç‹êÍŸîCJöÝ‹óüŽ|’,ùð­x¤ßÇŸ(³zó§$‰8¾p $ß=žßÑ@"ž@œî†;Î÷q÷çÜP?U­Ÿ>vü„ÍVnnÅŸUËß9÷‚ùö¿£©ÓÏØ¼au¾¢•ÏÊeï\~ÕÕöwmíˆ'>fwSóñÑÃ-cÇW¯Ÿ>ñôÓwíØÑ¹w7¾s È\8ÿ2žb3Ϙ³aÝ{ð­l®úÔµ<Å=Òs>+éø‰§ñv¡ŸNDS§M›:m¾s l™ûóæþÅ<ôC•Ð<¦™Æ4§-úéPµ¸p|:@Ó‰Üâ§4ÈÕIÉ ê4~:¸GÓá§€{4~:¸GÓá§€{4~:¸GÓyýt ‚¢ÿQ÷öö¢W*ˆ`0è\Óyüôä ulÛˆŽ R˜:m†º‹umߺ}RYÌ=ë\‡šžÑOïéKtlÛ8}æ™èeJÅÚÕK‰(Áᔲ‰x¶lÞØÞ>‡ˆŽ=¶}놳ðû­$|’ÕûKÏ;ÿb'šnï§³}Ü„6 S)PR‰Ä¤)33[½âÝúÆÆÙgž·fõÒæ–qÛ·n?± S¡V³çž·ôÝ79£õlütÁC†Ù>÷íÝ¥+ÕÜ:Ÿ…CÄ1ÍcGgÎówåÕ7.ùÝ‹Ã#w?f«8ØäùÏŸÎ*”$YýNìÞ¹eäè]±}{w?m*> Ǩ¦Ö}{v:ØP’$L…Z¡šžÿùH“} " …£LÓ;¶¬5 :ݲ{ç–¶©íø$(‡ì Gj23Î$ רL…ZW?’ˆŽ;œË¾eUI]ýHµ$Ûm«]®òϺ§§‹GŸUDí‹x"aó§-i%説wlY«ý“åœ,¼X,vûí·ã— €3ÚsšaÃ^ˆU…åÁX‰ÕæLÐmä‚î@Ÿ³öÓUGÙÙyöïfË–-[®¼òJ|¨ØúŒöy×.Ï‹škW²eòêbj{ñU…[[LÝŠ§@…óÓµ9´¯8³lٲ뮻*özV²n›« ËL5W]©ýŸ1x×¶¨-¯[ÖÅï€GŸÍ5ÇO/ o¿ýÎwÜ‘ß:E9u"øÆwX.ü²nÔÙÂ9Y™ìˆÙMáôÓ+ ßËúõëoºéÆüÖ)>ùdï¾àñ¹ü¢( iðÕ•+è¢umHΩÎÙj.¬•¼À©ÏÎýô¢±uëÖ)S¦ä9Bß¶=:¦¹çßïýô§E¯×ãñx½^ÇÃÄßP8pÏybv­õ¡µ_LKšnEÖ6KÆXÞØ:>h.}6Õôlýôâð /¾úê+y¬0•JÑ”ÉÞT*ôwwÈßÿþ‘'Ÿœ3G’$I’ ì š±q`ì_æÅ6)´ÿSé¸ÄOß»wï…^ß ]Q”dk«œJ‘wogÓ5×vÿÅÜßÿ~ýøñ²,«Ê+”--ãN…"‹õôtmÛŒŒ].¡òüt6†=ï×.¯_¿þœsÎÉ{['G7…˜Ä ¥R¡÷WžqÁ…Gnºéؽ÷Dêdy(fW}v|Ÿ@Y1ˆ'8~áìùCà\â§/Y²ä‘GÉ{µ©Ñ£†™¢(‚аhQí민çî“×_ …eYòù|ª²ã+ÊEImÞ°º©¹5cÉ•ËÞin‹s•ç§³]·üÔSOäš M«{j(Zg=ÐÝÝrßýý?ÿyÇ£Õœõ~¿_–e˜ì  eýÀ¾½{vÛƒ » WOÏ#ÌKñÊR*zzHQ˜¦ Š¢(Š ($ŠþÝͼñÆ®³Îê|ì±èé§Ádåx%ïo5ýP=¸g|zA”]›Çø¶mWD‘…ê”v`˜Ê D‘÷ߟrÅG?só‰;ï Ž¨÷ûe­e%$‘HŒi;ª©õнVeF5µ¾ýç?Ô76¢»\r/´Ÿ^¹¢Æy`Òdïö&è‚¢Š’E&ëBúSap°ñßž¯{í·î¿ÿä5€ÉÊâ ,Nš2³qtó¾=;­²36·NL ÄgΞ»aÍ*þšåeÌ%›#ò2òÃé§ËËèõzlþ´%Û¦¶ÇãýYý•›¬̞͜¶FÑ´ºÌòxc±Ö»ïsÉ¥‡ßx#‹õööÆãñÁÁAm‚*—\t9ãVÈ˘8õ¹êütUÓ“§FD”J1g¡ú±.j´®.ȳn½µkîÜÎÇ‹œ6Ñï÷ÃdnUsÓ4ŠFÕ³ ´‘—1/ÀOÏà½(ãÇ2‘Ò–º˜J ó^ÒúΖ)•мÿþÔO|âðç>wâwëFÀdî‹Íuy‰ñ]­”›*5ò2æ§>‹:¿ÆæÏe²ÞÛР0N‡ê:F ÒÕ~èÝdräsÏMœwNêWÏŸ8~¼§§·¿¿`` •JÁŠ„AëÔ3ÛÙ¨ÈdHÕÂZa-ænæT'œúìÐOw¦ËÑ(y½Zù6Uv¶^÷S×ßßrßý-\“¸CÙ zAÀ©æÀÎT)ŽŸÞ±e­nMùÏD:4DÝïWa`@õX´–˰ò:†‘J‘tèЬÏ~6vÁùûÿéŸ"ãÆ©Ï(aT ¨8e'‹)Èb ŠîL`ã#/c^(†Ÿn:+iÇ–µ1Á´(ŠÉæf)Ó ·QÍUFû_WQôwk.¼èÀÝßìýÊWØ:ŸÏMªìüoåWp‘—Ñž‚O·šfšM0]æ²>4D}útiËÝ[:ÕV¥\ûÖ°2©” ([?ó™CW\ÙÐÕåIƒ[¦  ÁÍÂQØñéV‚®•uí˳ÈÃK/½tíµ×ɲáÂ…låÂ… eÙøð©S÷áÇYÝV×^{ÝâÅ‹µÆb±Ûo¿ÝTÖ“mmZëœÉ´NÐÕÿªšëÊœhhxîá‡×þå‚D"Ç“É$n–‚jŽôaˆ‚û飚m Û¿kÅÂ… }ô1¶üè£=úèc7nhkk»êª«}ô±•+W.X°€½»råJ"ºêª«˜ îs·²õ‹/^¼xñ«¯¾¢–ܲeË•W^iªéƒ“& Öê«Êµ»VÖß½ü²ÕW^ G<("< N?]Ôù56ÆÚÇùdz+o¼ñæ£>vï½÷9r8ïæ™§‰èÉ'Ÿ$¢©S§Ñ’%KÔÂl™­g‚¾wïžx¼ãÆ Dô쳿PK.[¶lÖ¬Y¦ÞKWk ©’ªRn|æHg¹Šr¼¾þ©¸ëƒO~2ŽD£‘šššH$ ÕÄëø ò§>—Qþô·Þz“ˆ¾úÕ¯F£Q"ºþúëc±Øu×]GDÑhôÞ{ïyôÑǾùÍo¶¶¶îÝ»÷g?û×{g•\°`ÁâÅ‹?üðÑ#G¶µµéò¼ýö;wÜq‡iœ.7·0V4¹Õíó¥o]rÉŠË. CÑH¤¦&ZSS[[[FÃáˆßïǸ@Þ)¬Ÿ^˜ë2räÐ=–h4zÇw´¶%þ¿öÚkYЭþgkˆè¦›n$¢ /¼H–ý²ì×úéëׯgïšjº y)¢h~ÿÓðõ†BË.™£Ñèˆu õõõÑh4 H’AäN}u~Í_i‡ù'/¼ð¢ú_uTn¸á†W_}åË_þRZýOÝ&ݺuë”)SÌ]|²¬D"D¤æ "1=K†ñÖ(#ØÓsÑ[oɲ?ÕÔÔŽQWWW/lö |ÿ@¥ c®>Vª]å§>çä§ç&Êêà–X,öÃþpïÞS顟yæéÅ‹¿ôÒK‹/fn»Ê‚ žzꩽ{÷¼ýö[LÖÙú^xÑh¦ŸRvQ5ŠegTcsmJ¯S%ÓÃYsþø§À±c²,ƒ`0ˆG@å :2#V œú\Fù^Øè”§Ÿ~:‹ÑË/¿|÷Ý÷|ï{ßS Ì;—ÒwDÙ²˜Ë²¿££cäÈ‘&LP×ïÝ»÷ /°t6D}Æt§3½˜l¢¹Yzõ“O¦ÒiA@/P¡‚N†'BAyRyù^,X°`Á‚G}¬±q¤,ûÿßÿû*}ýë_×Ú/l„â‚ ´Ñ7~>cÆLYö·¶Ž%¢_ýêy"Z¿~ý9çœcÓ¢ ³Î0J¹ÉâÃCu"Š>|ú¯Óß?4&}ppß9PYdÌŒˆ.*+*ÒOõÕW˜ѽ÷Þçk °žºÛžóç_¼dÉUîõ«ço¸á"Z²d ìh£éƒ,®OÏp¤ôƒMMæ[¥å~Ú+¯ônÛÚÝÝÝ×ׇì]À­rÊN}.»üé7ÜpSä¬Þ?ÿâùó/Ö­|ê©§ì]„žqcëXô-Ф{þ«¿ùüÀÈ‘·þèÉÆýûu¡ºv¼ãù ZþË_²ù1ØGì?¾€ü‚üé™Aih4¶‰ (ï^~ù/¾ùâØqÑšÚ%wÝ¥õdŒVLøàÁ–_<{òd¬§§'#T6/£.G#(9œúìÕù5v5ºNÕAð×Ö=GšJÅFzáK_hl¬ñûƒÁ@(’$iÃí·Í|êǺG´—N^ôò_z©ß?[}‚7K ,Ø/åçMMçù^*]¶††¨ûýŠ, ñø¶[>³â²Ë¤ÁTÈç ‡Ã‘H„izßÍ7w/ùïpG‡U‚uAQÎpáò_þR–eŸÏP ›?½mj»îü •uÑ㉟sΖoÜq<ªíîRÅï÷«šîõz“ÉdÇÓ?™}ù'Œ xÕ…ðÁƒ-Ï>{ìöÛÙ(uöØ4G ž?݈¢xò7¿Çbƒ'OJ’$ŠB …B,H÷x<ÉdRœ8qÏ÷ýÎ#4Üu!Í]Ó)‹-¹   PpÞÔ¬v?]EŸÏ AH&“GNãõzAðz½Š¢œ¼å–ž—…¶o·ŠÖ‰  pÊOo>{¡»:J!E!eP¡)D $’ ’ÀF D )ƒJj 61½SÙND)"‘” l죨 åŠ 8¸âúÛ©™%xä‘ÁK‚H$äaÓç |­-úçsÐ UH¡ò§÷îxÚ]ÿ…Þ?%ÁÓ·ëYAôöíz–OïÎ!zw|î„/òI!"1ýŸý1•O‘@¤Ü×µ£¡ó%•èÛõ¬¢¤Ò58Ø+¥wÇÓ¤¤ÒÿŸÑ,§ßuágÿ\ÿAu™ïEظvùô3ÎÞ´nƒA[«ÂÓ±mã5w¼¥®xÿå[­Êžuýó•°[ÆÂ ))EIÒ`|éÅ3'Teg¤4[}è ž1ê2Å<~Aô©!?×>ˆ©ÁÓG¯éÝ{aßþY‰cuƒñãy½T÷¶¿éÕ@ËN¹>%xA ˆZU§›ÐÖ8ºyßž’d>+dsëÄÄ@|ßžÖ¬ºê¯nZ³zis˸í[7œuî%¡P$cùÍ  ä®Ölš;̸ÒtóŒ+í÷ß´dÆý¤á¹q¬–9wÀ˜ƒÕ Û°§§k _³jiûœ³m*ìíí%¢—»$k?½wÇÓÁÓ¿ª®œ~Ægt#·Ç6üÑoþþÄJª_I 2HŠ¢ñÜ›)„ ³$éÅyÂÈYCöOB3ݘ}C…~b«PùÓù=DzÞÓñÇïæ²•ZÆ´p×öŸ ’èý·ÈäuRí)±&èª “"Zòñ !WR R’D)JßG5ÖìSÞÝûÊÃÇVdu8_³tÿï}ƒ=Jj@Q’¤¤ ëU§BÍ3 :?†v– Ó•üL!\b’ãœ!Ú+N 5©1RÐŽÖc!éŒvÕ™—mp‘Q|Cm_+M .è‘(E‚(¢’b²î%%I‚HÊ>&˜Š¯Ûó˜dƒý™8¾eßÎlúdŸ7¤ˆ>Rc¤ (§þ¬Öð zFÉÖEÓ=?aº2Ú•Ú’ºüQ?»3yb˯rÕûO1ÆÃTZ=¥HPA$EQîëÚñŸ}rÙïîêxû!SFPWì]Ä%èW%‰˜Å²ðÔê1ƒ}+.¡d/ &”Ô ¢uÄéNd1Ûû{ò.ò%ë¦GÄìyŒ¬ó gþô¬Ç§óÄéŽÉ6מÔeãÊPÛ×LKòŸH4%¿ÊÆÀlZù†©gÎLœ$(•R†N‚ Š¢¤EaÞŒÏR<ÁVþp¹ß"…4Y•—.™8ËÜê,¢EDêG¶vØ›“=‹Ž¾s}ãE‚@Š" $äiPùü Ô8]}ø(³+K¤ú¶žEI ŠÅé÷pŒC§'ˆ>EDDŸ%ºÆÒxQ¹§ûÃ/J $úÅK‚GcÀÄéÀ 6ß‹N»Mÿ¬hK?¼ëÙÏŶ2 (ƒyj&«¸Û±#Š"{ ©fÂíSHêÃGDtPôM¯›sW¤–ðKI¥R¥nêÞ‘¡ö¯ÝNDD÷½FÔž^€yUR IDAT¿Ör‹Ïô”¥’¤ ò=è*2NG'T-¥ŸÎ§+[¤:‘èé#oóøŸo¼pµ¿‘OzxuŒ`+?­T‡Á gÔ »)ƒÁo®|¡ÿ“ŸôoÛ®‚š¦ñƒóÏ?oKJ}‚à•e™vtHfšK䯈~HDDÏ}—H&šš9N'¢@²¯W”E"E!AáËI§ƒÊ \ýtEÙ틈ŠBDã“ÝoøÃ[þ‘76œßí‹àH$Cm_µ#UauR«}iTažÂ¦5Û6' 6Ͻ[I Ô LßKÛ)¥ ûEéòè´][%A”H”?ùùgÑOä=û®ÆÁ^»þ9“è?ˆ¢¥D_&Rˆ¦¥?¥A¢M¶?øÁ¾^%¢()ÕݧCÖ«–âå{a«ñÏŠmž`Ú¦ "º¨ÿðáÎW¾ô=)©yÒ½bvÊsÜ;”æ'¡±§7œ»Kª#Q<Á<~Aô“è‘HSÖ’Æýž(H´›è¢8iŒ—-D¶!¾¬ uŒÄé9c|ð=ïLZ=[_´,ÅLW{…âå{ÉÖO?è ?«()¾ÜÕ±³óÕc[…T<šªBd]†òÀD'O}Å?Ô¶ÓqO@ðØ2y$Ad·.­ÏuQ¢ß&ê"úÑ‘ôúv.ã%}Ť =M Ywiœ^8×­áž Y[/޲Q^Ó:9óêØS$?ÝÁÓ- ѧ=Ÿ¨ÉÇkR‰g-¿+¶ùæ†swÈ#IôæÑd/l¨ÎòÀÒ^¹QPÄPð ‚—D/ ^©¹ ¢ÄE³›×¢ED3‰ˆh!Q’hJú­³Ò ‡‰¦í$°øÈoú,¨ I<>BœÎ'OöY¼mrš[=ùi%‚œiÍϵ’! €ú2ct{Q6æ½±©Vûì¨MŸÛ2g×ñ곩¦gë§ŸuýóYÉaPðt‰¾Pj ­éCO]ŠD)¢É±µ–¼áõÅúsHQÕd/oeˆDAô*$Š8$©‚8ôаWzѧk "ˆ8=£ó`•]„?¹UÆô&ùÊÈhŒÓí-‘¼x8ÙFÓüuf<ê(ãùHwþl³T—"E$¢¡9%HMAžžNñ*©;b[:ö¾úW>'¤ú{wþ )ƒ½;ž)ßÙ8wþ”±w׿ ‚·o×Ï5óšjK>£â¿?‡ï¦Ÿç×ý=‘.ð‘@tµåùïDРļN$öí~ž!‡ÙPñ¿Šæ#Í*7a.¢Ÿ»¡Ìy,¹·ešèÑêx‹–k·Pó‘žuÎü`8êx·R©T"‘PžøaÍ·¿­¥†Fs+,Á• ‘ (êš¡ƒiiÙöØc5çždYöz½GY^òòBͼhºoìð,]zÚ'pU÷6ÑDDôÏDß´+øÌß}Ý7cfSÓè1cÆŒ92˲,ŠH§îBþô‡EÔ¨höuòL©‘ñ|`3Ë(qÏêL¾Mï%X9øÆƒÊv:Sþë›!OµÐó‘æÁ¥„äi§1…SEœ :û¯ª¹º wvκõÖ®¹s;{,rÚD¿ß/ISvAÊJÙ3îŒ Áöö1c|û÷g¾ˆš^^eWðdmmbüø°,ɲ,I;áAû@.ž ‰Á)£¹ä_Ìx)P IãB¡{)#…òÓµtl±|V½mj»•¢ ‚ ŒwJÓ¡º˜JicsU߇"÷T*òþûS?ñ‰ÃŸû܉oܬá÷Ë>ŸÏëõ²€]¨ûXQ}>_Çã?˜vÓÍJO" siúon¾I’ý@@½Ž)Ï‹r4Cò¥y¯0o‡“BåO×1rt‹qåáƒ[ÖÚÈzoCÃ6Ÿ›FÇ•á¤Õ÷SÊžLŽ|_ÜÿÀý'®¿> ˲¤UöJÑôèyçÅ.º0úÖÛv¥ÏTOôDZ–ê˜2%>iRm ‡ƒÁ ß×_:”[…EhSŸ‡]¡'“ƒ6Ùj½U/‚’׫•oUеÊÎÖ3q4шýý-÷ÝßrÁ…‡ßx#‹õööÆãñÁÁA¥ìŸµEÑãñH’´ÿ™gú››íŠþ:}§t„åÓWÇGŒøíß|>F"áp8 …˜+AÀepêsÖó‘æ(ëÌ$ñúýJ  z,êEQ(•REÑ80:Ñ'"f×H‡Íúìgë>ÿùw쨫ÑßߟL&S©§¬Ë²ßtÙ1V•×3MD£Û½ohpÜbW4úÜ G¢ÑHMMM4:¤éì6~¸‰BÍGjo¿>ØID3Úç »dˆ÷cÕds³‹©ÂÍÆÀh•HI¥„t®ý¯«(úλ5^t{ú¶/ù|¾l͸‡E°_dYŽŽ½öµW§~ñ‹ÑŽÙÖs`̘ÿÚWƒ5µ55ѺººÚÚÚH$"˲Ïçƒñ€û(’Ÿ®ê¸Õ£áÎBõéÓ¥-[toéT[;Àq˜íž¾­*¤R‚¢|KQ~LôÔ¸ñDôñÇÇ<O 4êµ,ûãñ~cxÎV²bº2Z­×®TËÛDåj…ƆüþÅb'‡n•lýÂ&?÷Ÿ¿qÅ\~Y8ŠF##FŒ1bDmmm0”eA:®¤Pó‘òÄé<±j²­Mš)"í±h^ÒP΀SwGOqÔ„óвôᇧŸ~šrógV¯^U__ŸJ¥B¡pŸZF«¿VË:Q6–Ñ­´±_tÛO쥢(LÙØßÕÕ5iÒäů¼|ú/~1iñì»nåùç½uÅR´¦&ŒDÂ,B¯«« ‡Ãìî(d…îÁ}¶Pˆ‡'AŽ*ß OœÎ£éƒ“& Öη"bzк6`W!¥(l/ß½ü²ÕW^ G<©cÕ»»»rñX2–ÑûÎêgÊÛÛÛ“H$ØrÓ„ ûþþ®©‹ÿðÂÃOX½zô–-õþÞÞþ`ðpSÓÞÓOÛ8eJ¼µÕ+ûke9 „ÃáH$Z[[F™ ÃuÎ]—~D[‚^>c|º•»b¯õLy»Z[êˆHU#…´ƒ^4f:¥ï‘2Y÷B‡¢\B´ïþø³ë?ÍnQ0dC>Øã6y¹íYhDQ”$‰©p}}½,Ë)¢úsÏ=Ø~Æîþþx<>0L&“ìV‚ßëø¼’$`0‡Âáp8fcÒ!èÀq„žmâPJé§óÄérsË©’VsõiRÕ]Ô0Š’"EQP”·.¹dÅe—~3ŠD"_üâÿô§?ÕÖÖQ8Q‡fûý«¤ä¨÷K‰(û|=ª¯¯¯¿¿?O $TM÷z½>Ÿ$Ë’ß?ôx‘ßeI}p‚²ÂêiLm†)ôRùP?SëA"ᡨœÅßšûŸ‚f¬ºªR"3+B¡e—̃Ñh´®®–ˆ¢Ñ(ƒ«j½üa²NDì„DD#FŒH$ê {A<Ïçóù|’$ùÒTÖc´ å” åë§3òɲ‰]]”J©YaYzm>&ØÓ¿ÿ?ýi8ª©©%¢ººº@ @D’$cÕBéy¯“í³š¤% ž"•J±ùžQ=Ñ£j@õP¾~ú‰âà¨Q¾XLE!•"¢!Ÿ%=ñ’;õN)Ó÷‰Æ~å+¬ê;wøý~Y–‰( ‘:ÔdèjÅú~&i†f¾ê±®Óf\cV ©ê,IR*ýàU*Ý3ì-UÄUðEyD‘G;›bö2¡ÜýtAfL÷utP:åË0ËÅ0"F{³tãÈ‘oþô™ÑMMªwÑ×׫ÍD¨UOuY'©ŽËåÞ~[«JlvÀãñ¨c‚ŒÉ{!å – ¤¼Ü(k? ÓÀ¬3èµßªk,M‡êêúèáçÿú7Go»-'“ÉÁÁA6œ±€gHŽ`¼† À¥Ï¦š^´ñéLª’&‰¢N¤® ÷Á¦¦Ñ˜l•öa¦½òÊ’Ë/ëظìB'R×ù-tàŠä§[é<ÞKϸ±uL…E‘Ò™¼Ž××ÿêo>?0rä­?z²Q3k„ª« ç/|hù/ÉæÇ`š^ÐÇâ¡ã€R ?½mj»c¥Aih•´m"(Ê»—_¾â²Ke *ËKîºëswÞIfö:“õðÁƒ-¿xöØm·—ùlv‡°²h~ºcM÷×Ö»±™JÅFzáK_hl¬ñûƒÁË»áöÛf>õcÁwWæ8yÑËÿ}é¥~ÿlõ RŒ¸’âùéÎ]Ÿß¯È²o»å3+.»LL…|Þp8‰ åï»ùæî%ÿîèÐÍi§ ØÏpáò_þ’=_JBñƧ;–uÑ㉟sΖoÜq<ªíîRÅï÷«šîõz“ÉdÇÓ?™}ù'Œ xÕ…ðÁƒ-Ï>{ìv80äŠqgž·r©¹ãßùëÌXÒÁQnD?§Ÿ>lž£x"aó—÷]Eñäo~ž<9ŒQߨØ8räÈÆÆÆúúúh4‰D"‘HÝĉ{¸_Usmœ®Ž™²hQזͱX¬¯¯/‘HTÄ vTŠš3rÔ)«ÍË|^P«ü™p2–䯊SŸsòÓ­f%"« ¦‡Åé¢èóù‚Á  ÉdÒãñÈiXp¯×«(ÊÉ[néyiQhûv«hˆàÀG5Ï%*çL¼nULmZ+vêKcª÷Œmé*d%9[×5§Ý–ó0UÙt²}EòÓMÇ2>ØÙ±e­½¬3Ù•$‰ˆ˜v3‰÷z½LЙè+Š’ Gvýô™™—\J3Q~ÇÀàNPͱ¹ê8°t3ld üuÒ¬mZ[ƸKü—LUu;Ãߺ±CìS×›‘ééľëJì§³ ¦yd×LÓêØQ½^o ௙0aÏý÷}䟴Rë ™)/-Z’Û¦àȵª+}ÉÅÉW†^cœnoY8vQœµžã¹Ó´ç3v]ñò½8–u‰³`œ½dÓ¹ íL¼_M0N|ö³=‹^íØ188è1è©Fû¸?ñd<Þ³n]Íÿè}ûÏÆâ‰©ÚÚiÓâçž{lþüÀÌ>¿¿¡¡1;ỉ˜Uò€âg £²çÅÚ6 ¯p»]&—;öÎ}DozUdÚu¥œtFû¼a»b­_C™Á¨tì%sÕeY¥Q#âC•¤ÝgL*•êýøãð?ýSø'O‡‡¿%~ü±üî»ò»ïF¿÷=":ñ…/ø‰zzzØ¥»ÐæÀ1»1/£*1<>»Vl67]iŒUsO©µ¿¢é¬uþùZ³º€0v]úlªéùÊ÷¢]ã,y€.–?åÀ¢ÃÿüÏõ?ÁÖtuÅ<Kó«&Ôeg#íËŒç6ÊGÙí—„Ïü+Éâ¶d.±yZÏû…BÆ K“?ÝY>/{ÉæÀÜrËš‡¿3[QØMDDˈ:‰Î=GN¹áF(‹©fð+ @”{þôlÃv"êëëõù|D¿å–Þ_ vtPúAXaø“£Š üYQö?Á¦µÐŽQ%pÓͧY5ù¢;5/™²ï%:—høøÑñãÇYµÉdÒçóAÓ… Üç#5•o£M¡»¥É¼”P8²ó_~:ó’KE$AP”TzÅýù±Ûn'¢x<®ÎàLD'ß}wÔ믛ïÄ{D瘭o%zh¬~õ§ˆþçwÄ‹.b­ N*À­P?ÝæÀQKKËîÝ2F ÌÅáùE"öõõõ±10lŠ»Æ/þ­e„® úD‹ˆZˆ^"jMËú<¢åúÎ{ì»ËfÍbšÎZÁ—w*ÏO癎EÁ±ØÉh´†ˆVÍ6G’"ŠêÇ‘(Ф(ç?¸ðÏúÓ„ Õ¾õ¦xÑÅæ{ði ³ÁŠDO=®‰Ö š:z´gÍ"jii%¢®®¾| üÑð0]¶×t€¶Í³—¦ãI<«Y¸<ŽùÊIiúèÿxv;§¤ýtž!"ýý}©TêĉãÝÝ=Ç:¶“&ŒGØ`OÚ^ß;sfooÏêÕ«"‘ˆ×ë•ÿÏ—Ìë—ŽÇ)-è”–u•½æ›ÎüݾþúFÝÐÐL&{{{LèÔJŒ„¥F›´D—ÀD}išN‹†?¡£ÁmõT¤UÛÈ7OjÜl è:Á¦¯xRûͪÎ\NH•ç§gåÀhŸBûG„ôèFuèKw$ò—¿ì›:µQS©T*•L&¥—^²¬z‘™pÏÓúróí&¾÷Þ]]=‘H8fs^ÃX•«õy ûDW6òÇÅÆÈ7«$ˆöÕ:ȶhuŽÌ.ôÓµ²®} ‰Ñ úªsÏ}û¯¯…#~¿¬¦!¢Þ£Gk­*]Ntƒaå74c`þÞn—ºé««‹ÇãÉd’eƒ¦ƒ r`ø5º Y\ì SÕ-s&A̶gecå6Oáæ¥ëŠä§çøè.²~*ÌÏþeÆüK˜ w×Ôüûß~q`ìØˆ?‰„ëêê¢Ñh(b²Þs˜ïÌ9èÎánÌ &CÔµô97ŽÍÈÁ:PAQ9Ü8ËTå`²Š”3žøëÌêÒ$+“=/S ?½mj{©¬a­?~ÏŒýÎw¶_yÅÛ}WB²‡£ÑšÚÚššššp8"˲Ç㉟<ÉUûšû¥ÌuY–a‹®®6Ë&Z¸ÈJMUØ&Ÿ¸©ÏŸ1ÇóPá&¨³ë2Ÿ4¿ÌÉÏÞ²bú´X]]co/ùýþp8Âæ¿ ƒÌ~É¢j&âê¸F‹ÁéZR©T2™dA:TŠëbšïÐæ¥é²±NSóA±f Âï§“&]b.—Ä“’ å–T’_ŸÍ5½“ŽÇ G¢4gŽÔÕÇ™¦‡B¡`0è÷ûY„.Šb*•’£Q®z™uÞBôžfpú§mí¿_ICIK”¿ëB™2ò'kÌv:Ó\Æ/æ>O…ãÃÌK'; xãÓK«élÆ»@@’$)™L ‚àóù$IÒNŽÁÊGŽÊ¢öN¢¿'z‰«¬Èy¶ä Œå\g¡)Þøôrp`$IEQ’$v’Mˆ¡æOWKêG˜T1O3¸åqË‹VƒÓžpX0€_# _ÃOïØb™yÜ~&ÒBÈ:óa˜—­;tX4íñô\sMèµ×†mߪ¹#ºh¸¦C³¼Ür6Ížíñz=i æ€¼S$?Ýt,ãáƒ'˜.„¬«7'MU•5¿ôNÓiº­iþ’æ6éãv­¿}á>¯W’$Õê¬òK‰ýôŒLHÙ3¶·ŒãÛ¿ÿÔÚeÃ5}ÑrÃXÆ',ë,K²,K’¤M ù‚ÓO¦>^¯ÇæÏAocÎd¸ÊÐ$óʣ⳪ÿ`ØÃÃðVƒ 2§kùÍÍ7I²?3fêL|‡SˆcT:œú\ùHg´ÏvÉåsI5UÓ£ç÷_DŸÒ¾÷÷DDßÐ<8ÊÔ|Q†”S¦Ä'Mª Âáp0$"SM l)\A_J™ïE»&Ûälf {Y7ÎYªÝJ»¹nÞg¶pèÐÁ«‰z››ýûöªô ¢'Ò³ÖQ†LCßõ#~û7Ÿ‚‘H8Ž„B!¦éÁ`HÛ:kW»ow€b zò‚üRšüé9æó2êȦŒé²*—º•ñx?{&ˆiî¶E/Mù««å£Gõ>Ì"®]ÝGôâ G¢ÑHMMM4:¤é‘H´¿¿Åé¬QULJ`º«9B/PA_\2i†—Yvr›˜—Ù/ÝÝ]áp$:zôÚ×^õ^pá™Ù·{`̘ û÷?1¢¾¦&ZWWW[[‰DØÜ§ª ;ØmŠI¡ó‚üâ’ùHóõHDÁ`°~ôè6¢­_øÂäçžã¯á¢ïîßODµµ5#FŒ1bDmm-Ë*Cco¨,¹eB…åO·ôŒ³Ù9“u"òûýl<ûɯüß?üå‚m×]ÿL®<ÿ¼·®¸bL´æ_ƒA–È·¶¶¶®®ŽM…Áæ¿€‚Ø7©î¾¨jF"T'")}Òkhhðù| ˆ&¾úJbÓæußúÖW&O®ïìô÷ööƒïõôÈW^±qÊ”¯ýðGOÞts­,ƒp8‰Dkkk¢Ñ¨vn#|í@E“ß<‚ ¿T˜Ÿ®ÓnNÆ™]ÃN,? ±yJ‰¨©¹¹»¦ö¢öï<Ç’ÉdòK_úÒ¿^w½ßëMÙ‚ÁP8:ûìy}´;°La¿\f¹@ÊË ×ÎGêlüŸn+Yö³û¥D˜ÃÞØØ‡‰¨©©)O $’É$55öz½þóŸ/½ôRµÂýû÷˲Ä C<ÃuwDN©ìùHíµÏø.Ïã² ýý}Š¢ˆ¢xòä‰@ °gÏG‰DB´èƒV«“oìØÑÁ’º0ÔNjԚu;fº>ã2tðÓÝe>u×¶ÍkF5µvÇbè"×Py~zIPÓ7²™ð$IR@©0fûbk¬Aæq¨»}CeÒ3yß½ÒçOT¨@s¾«¦Ó¾´"—{UMeS “Mñò§*]Í™ ©ËºHÓ4·y@IWØ*»VXíuЪ¤q¯tm™‘úˆ¬U…ÆÏxb¡Û7dÚQ¦ o|: ÒÕ\«ÝªI¢uKti_­nsí¶¬ÓY;LÒ•<~ì°éYå6nnìη¯“§ucýÅðÓm¦¦+òL¤g}næâ<8›JÉ~?­òó×oï2ñï¤NÖ³=vÓ•EŸn:–ñðÁÎâO0 ÈEÙmd«@™¼ŒlîWö¡nÆ­ z˜9{ñò½˜Â&˜†¬PAÊ®SÃŒJ§ËÝh•ÖQ­Ðhjó(©.ì5­ÜÞ÷0="û•df¾gµŸZŸÇ´NžÖùõÙ\Óóë§;u]ºÝÜ¿›&n´ÉÕÎß"¦šÕ ïY•伃êÌÍpÜPV;`êçä+$w¶ŸÙêsAæ#Ñ>ϱ4çW(!»då]»r¦»éˆJ™ïE»†?yäkškW—J7ãÄͺJØK5#.ÛPû' €GTBJ“?=Ç|^<3ÕieÚT»ug%Ú3±r­ôCÖŧ"ó§›J*gyíÊŒ²Î£ËV‰Î øT^þtè&Xá’üéFÈ_e)ô朹 ­âܼ7TæÉOçô¿²Ž_#Yãºÿ¦yMKêÂI© ùó2šÊqŽ ™¦Š´²ìM@Z{ŒGÄã§ó4T ?½mj;”—ã6IÕœ÷¼Œ¹7Ä™‘'éc^Ž”§¡çOG0)¸‡âOPhŠ7>@¡)†ŸÞ±e­UaÌD y¤H~ºéXÆÃ;1Á4ä‘ûé&˜ «<*º'­Þ5‹m3äÜfà¶iy›}vß{œpúéâ0÷zlþ„ð6æŒåõ…ìg6²ZŸ{a펕ÉÎ#êS6ºÿV/í·Õ­×Ô§™´ëµ+9OBü…] §>d>Òíó†]2p?—d:×h9€|2 ª´ž?v¶©‡ÿA|Î|‡Ú8=c Fž–´OÈøIDAT¤’6—/ë´YÎêAVþN.e¾íþä:Ý´×P]º]öR͔˪Ҿ´ªSW’ÌfVÒU^¸ T ¿F—$mºQ‘3¦`̘TÒêRÀf¥1}‚qÙ~—¬êäé„ÒäO/N>/c8¯J§±ŒN¯­dÝô¼bUyáv€’Dåðh}î;œúl®éeè§g,£¾´[bºlº•Í>ð4šû΀¥ô¹ÃO@ðÓÀMÉOçôP>ä1Ç!gU6OÞ›>@OÜY\ŒËdýˆ¬±Ýk ,A*ÐóSÅðÓÛ¦¶Ã  ÉWæ–\5tžì(¦9ixZuA÷R{øÆÁìº'­²=ê‚æÃÁ|¤€¬£lÎ|‡Ú•ÆÇ;MC]Óvmží,a¶€Œ'*cÿ˜ž¥L;Óª‡)S²FÌG à/mTË“ïÐ*Úå””3WbFaÍ{hlZ›Õ)ÇÞlÑu¦ö"ÃØó“5o|: rÎõœºÉ§nÿ³5µMm™l¯ol:Š?7€}»ÅŸ¨Zõwl˜dô^r‰ßs?ؼdZÏïžÃO·™š3‘Pæ® eʶhŸ\¬1fëœp&A$C¶E«75©­Ò:šžf²ߌy.)“už1Yc‘ütÓ±Œ‡vb‚i*%îæ1Äó•\PÕš>ÉØPV;ŸãÊû3;Pb?M0 Y؈ »çŒ¶¹np`ΔÞOÏVÖ“Qäeð»ƒÜЦ鷬êɪ~$z :/†r¿(å|¤3Úç9f£†æ¥[:dPn”2ß‹v³äöª³T;}³Õ´ÎÚÝ,Ï:égklÒäê¦KÕ•×5Á3·*p‰uIò§!Ÿ—nÎÒ\¶5ž´' žÍåµ§­ôCÖ9I_%æOÏÖýÐMaÁS>—Ë6½;t/?ëä/ ¨f´¹GÊmJÑvÉqC¦ÇL‡Øç—äOÏq6»‚†íTº óä ,‰ªfÔYgBœÇ†tãë­REæ‘Ê›TqØ£Ìi×›æ$Ž Ž”)­#e“{]·¹UfÄŒW$<—,ÒIyq®'*ØOÏÝ=.f¯T?=Û±%VëÕeã‚}=º•V››®Ï¸ Ýåƒw~Ú§‘±Ïh˜1öçß©Ëçîq¥úé0I(¦¬ë4×>3¢Ö àÏà˜1ã ¿Ÿ®u„²uZÈ©qÏß“6é!ó }nõÓ9=@.±³ÕÊŒb—K’“Ü'±Ë¥¡\œÎÉžr’¾âøéÎý/‚?pÍi¦ (¸Î#ÅðÓÛ¦¶C^8ÌG îó‘€{(Þøt…¦xãÓšbøé[ÖZÆL¤TEN.S$?Ýt,ãი`€Jôb&Ž)±ŸžíÓ€REèå™?èàôÓÅaïõØü9ámÌó‹ Ù¯þö*ÆQâFãVyI ‰©9@IȘ\]TVpêsAæ#Ñ>oØ%ßsIV{–H2ªVîA¹¨P ó½h×"y€6§®VsÕœ·Æ¦[7$³™•Ø›„ººšuåyö €lIpüZ%>Aiò§!Ÿ—6d6]Ö ´nÁèuXU¨¾Tu™sŒåí÷ ‚>iÊÌŒÅV¯x·¾±‘¿Ú"$Ž©¼üé.òä.ÏKCœûí~àAÇ4mÝœ±ä•W߸äw/:³\ ååFååO/?w,Aù3ª©uߞ自Â%ùÓ‹Ÿ*q4(ØŽÔd,ÖÝu}å\2)+tÌ´l\»ýã2*u>Òl£x¢Ïï®à6&(g6®]n*ëtWRy~:ç­KgÃu[YÉ:ç>ðh½ÍØG 'ët·R‘~:§‹ñ €1]¶¯Êj¥Õæ¦ëìÎd‚îb\â§8e=wAgcÒMG1r¦iÔ¦ËïhHŒ”×üwÐÉUá§ò¡3¹1æe4ꩺl*²Ú\1ùUáR º³£0ne“üÒ¦“ùõÙ\Óøé…xôPLÍ2*¦n¥©Ö؇œ<¨º¹1º×Ö̳­i x2d„7Ö`lÑØ´ÍØìX¶=o/èT?½mj;¼`ŠO˸ÓC¡HÆb==]Û6oÈÖi± ´ZcÔߌA«±r+ù¶Rgm›=Ô^yèþÛ”Ô°JQiµÒÆT± Û3vr¶úŒùH¨<ñGÔ6ˆgt3ŒJÄ©Jög›¨ÖԮɗ!Ã_•iIN›Åt(Î3\¶Ì«Ï¦šÎã§$ö_@AQ”Ôæ «›š[3–\¹ìæÖ±ö'ƒC÷25a D”8õgË£F·:¸W»^]©+oU§º -olHÛ¢±fcCVM›Ö©ýï`—´‡¬Ý\{˜¦ÇnÚ{œ¬=1súéÂÆµË§Ÿqö¦u+ˆ¨±¡>Ã¥\_¢cÛÆÙgž‡ß¥âýe&"A;÷ì¶/ÉÝ'ùÛÛçÑ‘£Ç¶oÝ0{®åïwÂéÓØÂ‡;6›.«kxj`/Õãæ6+ÕF­Z7ÝÖ¸^·­M VÇn<(›Ö­úÄtù;yͪ¥ç±}+GŽ#¢—»d˜¦G£™ºä AÖ¨Ö¬^:uÚ õe,Öe/ë ì>ÁUKçžunÆb±XÓôlüô4m“g¬Y½} @ùÓ6iªöw 'M™¹f~¿Cûœ³9•™‘…Ÿ®E{æTÑh„'îJãÓT’¦;Ë÷ 5=+×@Yk:¿Ÿ Ü5~:¸GÓá§€{4~:¸GÓ³òÓ­ôž<”…¦óûé,ñ‹Õ»,¹€Rj:§ŸÎR¾LŸy¦é»’ä×¥˜;qº®Ìž]›rßõ±§ç¥p§¦sùé‚§cÛÆqÚ$Éo|sdSËá³Ï©a >Ifš®­ÍX³ºfìÄé‡:;Øò¨–6uYûÒjsöŸg+ûj:ÿøôP8ŽÔ¨“‘Êò÷÷vÇŒµkV×ìٵɦd<‘سkÓ¨–6] ÍŠ©…m¶båµË†¨ MçôÓO¼²?ï× ºUmºÛ¤Z+\ר®¤i1ãJû­ŒÿÀýšÎï§keÝTÐuµÙXغFMKª!¶Î W·µªŸ0þ÷k:¿ŸÎDÜFЉÛÂÖ½•±¤iµV[i71nnÖt~£y ‘HÄ»»N†#5Ý]'Õ™­Ù[ÆÚlj6Záê²6*W=qÓjM·Ònbº9¸YÓ³š”M3}ø@gow—®œnꀛþš·vm_¯uÆ#ÐM_ÚoŹà„k—O?ãìMëVQ4áÜŒ=JÊdÝ(蘭ŠI,ÖED/ÿv‰Ã|/r:Z7¾…d/P*œçO÷zÈ4‡a e¡é°›À=šŽ±ÛàMÇØmp¦Ã ÷h:ütp¦ÃO÷h:ütp¦ÃO/(«ÞÏÙ†sÏ:7÷JJÞD™÷#­ž®åð¥ÍNÓá§޵¬˜4e¦³mßøãëÌÿDŽ•”¼‰2!ïGZ=]Jþ¥åÁa¾Ö}Pß0rBÛ4Ç5,ùÝ‹ #GåXIÉ›(ò~¤ÕÓu „_Úù—_eS ×|/ [F5µîÛ³³*)ynúDª³ë@IàÔgøéEâнê4ÜÙÒÝu2÷JJÞD™÷#­ž®¥ýÒrê3üt¨8õãÓ‹D˸ÓC!‡·+zzº¶mÞc%%o¢LÈû‘VO×Ò~i9õ~z‘HÄN»W0—JJÞDù|ù=Òêé:PÚ/-üô2bæs6¬[ÝÔÜêló•ËÞ¹êS×Q.•”¼‰2!ïGZ=]Jû¥…Ÿ^^L~Æ–Më:÷ìv°íåW]Í>š\*)yeBÞ´zº”üKËƧœ4YÁy—ãÓK@O_¢cÛFô +²šä~zñ"ôŽm§Ï<]àG’ükV/5ü9³¦ÃO/‚§cÛÆqÚ$ÉÎdÅì3Ï[³ziÛ¤©Yk:Ƨ.H'"I’}p·Y2Hðë3üô¢hz_"­é2zà@Ó1>½ì…£Ðt@VôvDzÒçÊðÓ'Nše\¹kûzö–n¡œ›Z²ìÇûù‹q–7nkµaV楒ûD–OÝ´Ð3Ý0—}Óm›qÇ4ij•ý§_ÐOïrßeù^öìÚ”q}ÙîΕÕó{ÓJvŽ"[Ì«ªÏ·ùéVû6ª¥íPg‡®Ì¨–6µ€ú.+©¾¥®ç)ï`ÃašÞ—°Wõ×n%Ij(Í gÜдSq1¶¨-Ã^jÛµß û£³£íkÓ]RäSçeßtfÜ1ÓOÓ¾!]ÿÛ_…pžrrÿdAYi ¦—³Ÿn³oê[laìÄéÚà}TK›úÒt™§<ÓnuÙ~Ã=»6ñô¤QxäÌø çÜ„'z5î’Ñ“áÜ SÍxÒÊ\çEb ±oÎü®Œ éúßñUH?YP†h©éå<>}ìÄéÚ—Zë\Ýmã‚îå®íëµo±eÝJ«òÚåŒ éÉä§óül´e²rØókàd»º¸¯Ð>’®­ŒUsß²ª'/gŽB² ˜T‹Ÿ®ÝmuAwOÕXÀøR{Î0-oºlÕþÃpt®Ìã½;²p{Ý…ñÄÚ…h(_BÏi@AàªjñÓµo© :;Ûª­ÿ®uÃZ-[5¤×ô¾¢šZ¦ãX*N»Ç½ÿü7H îÕFõúé6…uëµþ»ö-Óz2(£¾J[ó†WúD!öîv5ã6?Ýfßìmní¸u+û[]`^Ši=¦ËV éÉä§Ûßc,N _œˆµ$ÊeS¡³}+P×e;`2WU¸ÍO·Ù7ý½g×&­9n3€ÝXž-súéV éÆÃ…ŸžÕDÇ¡¢vƒãR;"«¦í—µuæ8~N;p(ã‘yßwš±ÿmöÖÙÂÁ' ÊP‡Ú91êÑq…€eN?ëœùÁp½à§·;6H¬Y½Ô>‹ú‘£ÇÈ8'ò½@y‚ùHË IŒ9á6?½²? œ+¹üéå¤é} "H$qô€Ÿ´å‚üéåt‚õPÛäkV/}æyè @V°ùHá§—u€Ao›4•_œá§—@ÖÑN¦N›‘+ }?½ÐÈDöƒL à§€K5~:¸GÓá§€{4~:¸GÓá§€{4~:¸GÓá§€{4~:¸GÓá§€{4~:åÀÚVTÛ!·Ï9“{çütÊUï¿7iÊÌj;êwÞøŸù—_…ÎÉ¥sL4~:%ô•ËÇ4mÝ\m~åÕ7.ùÝ‹W.¸ã¬sÌ5~:%gTSë¾=;«óØ3J:';M‡Ÿ@ÉÙ»{G"Ñ_ÇžQ‚Ð9Ùi:ütJÎÑ£‡FUç±g” tNvš?€’#Ë~I–+úæ]pÅòwþ[»æ¿^{QûòS×Üh~ì™$Èãü‹ùH¨LM—ó"[sκXûòƒ÷ßÔ¾¥}i³ÒY»ý}½›7¼¯[ÝM·²…i3Ï2¾Ë)A¹w޶[òr¼œæÞüt*’p¤F’ü9V2£}ÞÆµËmÖèš0–ϱ]ã!h×ßíî:É#A9vŽî0óuÔ<ä²Ûœc¢éðÓp¦Rµqír+ Ë» ;¦ dÜ=]ŸÌhŸ§}K»•ú–î”`³R·>wà§Š!ĦõüÇó?sPIñ%H§Ý¦‡cºœqeÞ¯à§J#è;¶­¿ùÖ/;¨§„dÓ»¨8üt@f!Î]Öó–\‚´ÎI©jȱsà§PÕzî²¾qíòÓ'ÏÚ±m}î{UZ ²òÖóï§sà§PäWzvl[¯•õÓ'ÏrVOñ%ÈÊ /Cà§P½zq,cÆò9ʺ³°½ d/\çÀOÀµ²Î˜BÖPh Òu‹öxu3ʺéG›ús~:‰$ËR>,ˆí›?Èê-›òüìùp+3^²=öthF ʽs8»E]Ö•7-Sè¾åìM‡Ÿ@é5]òûr~Ž´„Ø·»©y|¶‡ I  ªôÎqú•àêM‡Ÿ@ü€%ŸTÙiªŽ9í!°è;£¹ sœ}%~:ŠOòûªïŠ™Eß%“¦ÃO  ~À²ä«ºPt@JðH:';M‡Ÿ@éÀ‰x¢ú~‰‰8¡s²Ótøé”–™gÌÙ°nuSskµøÊeï\õ©kí%“µ¦ÃO äL~Æ–Më:÷쮪£¾üª«yô“¦ÃO L¢õ™gÌA? s?\ªéðÓÀ=š?Ü£éðÓÀ=š?Ü£éðÓÀ=š?Ü£éðÓÀ=š?Ü£éGŽC@å"¢ ÀUqúC=„Ž \|ñÅèpÿÎRÇ¿ö‹IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig23.png0100664000212600000240000006364410322727434015560 0ustar mikeuser‰PNG  IHDR§¡)X pHYs  šœtIMEÔ *%:5&y IDATxÚìwœÕõÀÏô×·±° , Ò¤WiF@A@TìØk4öÝ“X’¨IL¢&Ö•DPù"°ô^–¦ôÞ\Ø]Þ¾mï½™ûûcv‡ÙyóæÍëeÎ÷³ŸýÌ›¹3sî;çÌ=çjËÆ•€ ‚Xûz‚€>†cY ‚XŠ^xXùÇÖŠUX"‚ VƒÆ"@±,¬úÇÙW~ϵ( ¨ÓPÐjƒ¢Bèo¶ºÒés[6TÕ¿©&½j‡ñM•˵¾¤~N´wSe‡^ÉP¡Ù5¾ik!5÷¹»ªÈôïr]½"ÒfUÿ¦áŸ“¦„¹€ñM[ß=üÃÖÞ=âM[ itS½"Ò\Lÿlã›êß=Œ s0\ÒæK?—ÓÉt+™¦¦…+™°oA„›†Ü=œ ÑÜ=œÚ· ÌS ¯mÂk‡ð…æ-ÈXúó?êÛ€æ|T}êvyÄ?€ÈBc]ccÙö¦4˜‚ ¹ÜhvÑÌc¿|ä‘hߥÌÕ±ø™žxøê«íž‚ÿþø· ÛO#„P%Šâ‘/÷ºæ– ‚ H(×Ë3Ÿxܸq .Œ*ý¯ÌŒá.òY‘lËP4 „¡¡}{¾}'(œtÝßž_tá?¦ýéÚퟕ¾þÅɲ!Ï|ýàž‹ßx6‚ H(&ûÚ̘97¶ôñœed–%²1(òðCúsyN |“СìXýì·ÝŠŸßú–óì'JÏo‚72¨Ä¯þ-tþdè¡Ë_€Î£žŽÿ.Ûç?½Æ¿¤Þ¹í»§ä>_6yß<ƒ.~uÃWÀàK^ÃwÆâüé¡1ðЋ±(¬Lß#ÂJÆp.]_+D8¼z³²Sðo˜ùæu_¾qíe6ÿýã5pÅ#ŸQ3þ0mÆëW_¥2Ÿ¿zUèepíÿÓvDÉî{mAôAÒ®Ö6h(gõ8¢ïÀòéf €¾ %š!Œ”•µPßT†/îç .ØvôÑQ“`Ù²e¡§ûvüÙÝó´ðþø¦²ßûA¨Ùúôy¨zËŸ °ßÃU›ÿEý 'åO^U¶K†<.o]û{egûaOhN9¸òe(ñ”Üè4êiùÅÛ¿¬•猟=»gÉ‹òö™ç>'oìZô¼’ û¸ä ž ×hqýªÏÄ—Õí€-sNKÕÿÂfi+f?¶)0ë—&›1°ä“{νþ¯‹?¹Ûü)çßúÎüÝñý?>á¶wc¾ïE÷|d` ¸âáÿ@m©k øø7—*Û7>= >üõ%ê·<÷Íû/\$oßúÂløçsSÔ nÿõœwŸž,oßñ›f¿ê?~5QIð‹ß~{bÜýûïßž>þžW¾€¿>~¾Ú¨Ûo>2V9ôà¡âCbŒÆI¤PâfÌ€Ž 8´|gí‘@á QSÏ6 S·W_½sÿëÇèðk/âîyŸâ %¿ÏƒÍ!¾Q@Umù#õ{$QÚ©ãð'­úíÁ•/gHS {™ÿ¯;`ümï&Ön|õçGP(_þéZ¸üáÿ¨c W=ú…ü‰-‡Òk$ÚoóPM’ „„ˆ£°6‡£ñØñÎ UãFŒ|öÑ'‹\/½ê¼NùA»à.=÷‚Ovmú~o¹Èä ®3(±¡Nòë^¤¹Ðë~ïo©}ArXؘÍqÑâRm=úӆ׎¯o Ë1áÒ!Ó®û½n?ì õGXÇá¿:´êåƒ+_.ñT§‘OXñ›Ë_2Ù7ôÌ1Ïï^ôü®òçåŸÝǽ@Õã¼w,xvû‚g¢x“~»eî“›[‡…Lù}ÅìéßhÃÂÍC¦¦gÀÝÂ!oœwó?šµÿûwÈão}W¶ÍnoÞ{·§ê:ñŽP“îü×ÜÜ:÷·(û5}C•€ð×¹ñâ{?Všzÿ'³Þº~fK÷ÐËü4ô;@Ý=ôªî¡®}âŸþîru÷Ðë5óú_ÍüäåK•°ðOÏ‚Dø’îüÍ·ÿxj¢Út×ïæiÒÜóÊü¿>~þ_k ß§ Üÿ‡…o=2ÝAˆI›a†P]oÆÒP[6®ì3`¸<ÒLž3.°ï¾Cÿ©æœ_Ý[µfw—¾ã';ó ìyyû~زjùÔUù8J"tŽ-úÕîÆ–¶0dæœq­Ædäœqj€sÆáœq8g\Ìwí°<ó#xËËË.\Uze®ˆΒ猓÷莣84-xýÝÞ#Ï™påU‹÷¬ò–ÿPçgê¼ýú”Víßéâ‚b£Xö”ÛÓ˜ñFUn ì7ÝH1§Ç cÇqÉ!ÂMϨôñœeä ƒS'Op›Mò×<ø§ß¾0¬w¯ñ}‹÷m¥·uð.+ßVw¢¶©¶¦ÉëkÛ»/ËÛ²âa(ã2A—¼Ù«E$ãÆKjúxΊ`(Ц)B(`êOT5I_}3gÞêÿ©ŠÐùíÚü~ 9Úî$$‚ADCè ™yÀwýˆ5Ôø|PÛ|ôÈIh'oû€Ÿ„A$KieVϸ KArfAÂØÇ%‚ ’Ûx½µú6 ±tA,Ú`YKAÄ¢6@ày,A‹Ú€&¿KAÄ¢6ã‚ Öµ@±® Àx‚ ˆumÆA¬k0€ b]`>°võòTJ9ôìQš=×eZQ8$½¥®¬R)Fzïžuâ%Ožtå4Ã+@N *vì6Àd<`ÙÒò½ú¥2“ çÍ™4eªòsõê=zöÍ´'±tÑüó'LNc)é–UŠÅHïݳN¼äÉ“®œfxÈIá5bGK«uÄÌÌ´¹b}Q›¶¼ ¤8Ÿ›7¬7a2ü¸mkQqÛ!ÃÇnÞ°¢ß ‘ò¿YÈkÎs~KISVi#½wÏ:ñ’'Oºršá '…WÄ6‰<_¼ŽX+àp8"žüÃÖ ·;/õ™Ü»{ÇÏÆ]»vüèöäeÔyîÄ‹¿€½»·=6¥¤)«´ˆ‘Þ»gxÉ“']9Íð “Â+b›¤¾¾t×’4py<©Ì¡ÏëÕˆ7ò܉Ê×wáà«Õ ™âR WV©#½wÏ:ñ’'Oºršá '…;*²i|€Z¼Ì1 veH¦WŒ,ªH¹-OºršÕ#²Tø˜ÅΦñjñÔj7CÚU†é#‹*RnË“®œfõH£,>f±³i|€Z¼ŒmdH¦WŒ,ªH¹-OºršÕ#²Tø˜ÅΦù‚Ôâel; CÊ0½bdQEÊmyÒ•Ó¬žy,K…Og<`ðÙcׯ.O`fÂ]Ð8ÐoÐÈpzÙÌ÷{<ßþfâƒÏ«Ù“ØB3(+5å‹–…î;ft¸êC¡ Bš©Hê¢0S ¯`æŸQÌ)*™Í?¬¨žTlµÑ¸¢š,"ƒ  ¹BRßå)$äqÄ,¿úî ¯ÌqjoÈ™x@¨6OeCÁd<@óì“W ÄP4Eù¢eºú]³S³Çø§™BÐä:©…má$[%Å O¸ÇñIÅS+ª™" wßÐÇÔ Û•Í×ÞäOý+ ˆÓ&‡b'5¦/Ü~ÝÓåÿšò ÐU÷êÑ[ºCn7ÈÿÕ¾4×7n ÜJH (Ù㈡ ÍŽúÓ ©ÎÁôº&SSñë­ŽßCqÉ-0퟼a¦ˆÂÝ7Ünbßóm]eO¡%DÑE¼H¢j‘Ž °àøBHb‡±3ÑàAF¥â#&¶òø€ˆŠ&Åñ€xä1üªC;áŒA̵1N5g¦„u=<™¦g2‡xjQ6Àjã64P-öS’$ (Š¢¨˜Ûehðò„sûÄüZ||€ñ‡^êÅ‹Yƒo|MÝ_±ÕÆÔT€PçLjòê8AŠÃ3™Y«éVe"þ¥±Ôhz‚ÆÖè 0p줼/¿nhh¿ß/Š"!$ÚÆ&m)%£kDÊ–®ê‰êî©ÿúK{MŽ_ÝbÏœœ†»o†|égWõˆJl“am€Àóÿb“/â³7S9Ô¨Õ®º?ODg‘’’²$éŒß¾:pÚMÆרØä÷ûƒÁ ®›(œáQï§” ÊÁ |tÅ †ÚŬÖ5ʧhh‚p}CÃÝ=4ª‘ û±.ÅùŒ²Hž„\9†gÿ}u ÍüÎdšnL.4´›ÞZdò/¬/(yŽ0]g–f§¦ëKhÛÐ j•·åý½D €íØñ•'ûõ=óÜ µ°ve¹(Š4MoZ¿\s®FõoÞ°"Îù‚•ƒ™mH¨s0TËëvè©0v‡>b¾Ìd’ã95yëЗVé’Xy">©xªAüøÂÝ7Têj-ñuˆø8 RoWóµ7´pŒ»uFUÛSP«eb\? ª)UãÿÖóy½šõ\î¸æt%„H’Ô°õ‡á·Ü @QD’(Š¢ÙsáÄí·ßâ*ÈçxŽã8–a¨Â]M6H¾Z¯fý€ÄNomCCCS“?Œ$ˆ3,3}šîQÍx@†ç4K]êY-|ÌñK¯À¹\ hÒò¥ÏÕÕúÓ_¼3f.ø>¡o› ð<Ç0 ÓÒ&Ðm$¼ cð?dÈ£Äõ2D\?ÀØ)”µ7áb§"¨öQÇȪœáXÑé`@"EŠ¢QîÃG&ýòÉÊ~}6<|Ÿ­¬LxŽã†¡iZc ’·~@ÌE‡ëd‘x¸~@*‰øNÅ,|ZAñ‹méñM7¶-vîݯhÅ(iŠ7oçý{¦LÜ{Óõöü|žçYŽÕ pý€Œº{Ö‰‡ë`õH£Ø–^?€¢¨ú.ûRòè0B(B$š–ÍÀi« ŠÝfÍî4¿|Ë·WŸ?Öæ°óϲ¬,EQ¸~@FÝ=ëÄÃõ°z¤QìVý‚ŠÛEY¿fààaûöìèҵǑCûÚwìrüèÁzŸwÅÒù6»AÒÄèsÆFLSyâ$´ô Š.°võò½ú¥7‡Gp¸Èq\uÕ †aäŽCi/A¬ÌÜÙ³ÆM˜EBýÃØ£ôÃÖŠö:ùýéÍa›¶mÜÿu!Á`"mT‘yƒ–¤Ð$ Iò¬YÓwò”Múñúi6[x–e†éqVߦ¦†h§BIý ]8oŽùáÑÅüMMþ¦¦Ü()Bˆ(J>–š‰¨c¤µ'Ôió XJ{ΚÝuî÷knºæØ˜slv;Çq,¶ÿ(‚ HÊ0ˆz|@fŽú‹ÍH’ÄÒaJ jT¼¼Ý¢ú)Ò¢Ò©Ö#ÅX¿Ô;Ôÿïë…Üýû2<ÏsF# A’ŠÏë…h† dÓú‰EÖÑ4/ˆ‚À‚Ðâó¡B\CÊÏV!UÇɪ)O½xtPÿ ÷ÿB(-µ <ÇñJ¯!¬”‚¤óÊ<›Æ$š¦Û»|ujEªý•fú«VE•nØTzÛ½›o½áø•—ϲ ÚARyežMã’Ô¨=³«kÏ>Í~–WT¿ú¦Ñ@²ê ~5<¯¾žfhšf†–íÖHARIã¹gê;ul úê×P… Hˬê4'òóÞ»öJ¦¬,/øbP$DJÈB•‚ Ñ‚ñ€(¬@Cç2Å„¢é,¤4Ô¹#†•ápØÝŒÜ )Š’ ‚¤Œ˜mPT•´=çºY ¶ê@ežç­©SÅÅ»Íétº\N‡Ãa³Ù8žcY†¦i¬‹‚¤ŒDa˜¶Å­FÈ~Ý>Bj_ÐìaCæj³Ù\‡Ëåt»]n·Ëét:ç±{(‚ éãQØâpÈSA½µaPŸè³Ùæ=Ä!.§Óíqçyܲ°ÙçY–E€ HºÀx€Y@QÃqA‡­¯§¤Ó³FËÓEœb\SÖnX6~ŒÝaw»\ÇírÚl‚<2 5 ò§ãG‹Û¶KÏ'5QMø~"H²Áx@4–€¦š Y_ZÅkÆ‚AKA1„¢&¬ZS1t ߦÍ&Øm‚ ¤ÚtïÙ× ÁºÕKÏìÞ3õÀå2I^u²£$’l0 ]Œ×`‰Š¢j»uu8’$Ϫ uÊYD(ê¶Og|ò«GÉ_½dálš¦ õØ`Ý5ã_oÈ[sª´C§¶% ÒL¾äš9_ýG1’(kaǹ(¶ÃéáyÁåÊ3HãråØ¿K1å‹–iŒ3ZÙ._´Lý36rÉ.¬ÕeÚ¢(_÷3aÁ"êgÔû «ª‡Í™·ýš+ (Šœ$iú)7S½†RRRvè@tó§† ‚ñ¼àóŠê‚V«lÔÝ–Žèj[y}vݯÝç\°é¥g !-I"MQ"! !dÀ Õ§=!ÔƒÅ1¿üêïÀ¸ñ—Àêåß›÷é.oÒZ;vÐØëâóyã)±Ø–³÷ûãu÷3Z1š ¹Ñ ì ×tPï”F*Í«üŒí«¼k÷>°gçÖdØÑ„7bâtéh”r¨ÍP¶ÕÅàDÍEPƒ ÙÆ¢,¯‚À,²šfxAâyº©iõä æ’ùùy‡Ãá°sûÀï:u,:pH`TÍ¢j\þö{ÿ}ñižkž%¤G(!ìÙ¹5±¾ Ìo%$õÛ\i `#ÉRÌ+óVX‚AÑà/‡Ë‹fèš};l½tŠÛíÊËˀ‚¢¢‚‚üü¼<Xü䣚òR€‚“Uýf~íóÕ544úQL鼡{vnM @$«1¯Ìs0 î¤ölè~ØÊŠ¢·üöùÃç_ìt:9–£h nºõîï¿ý’çx9NìèØ~í7ùÇû ŒPM7-‡‡Ï[¸eøÐÔx„Ê:é0ìTïónß¶)!÷2v¹ò8ÃFhÀï¯:Yi †OoÝSð±2VÈf œgC}TÞ¦iŠeX¸æúÛà›Yÿ€òù_=ÿb9ÙÊ¥ß565¿pbÍw ò÷'’G(ÃDB FÈhû†üþ€aGÌ@ž½p²EÄïoŒ6ƳoFq«ûqBH87ô:JßÐp'¸ƒP› ÙˆyeNmÙ¸²Ï€á[+V€Çã6Hº¹b½Û—3kÊ«‘$IÅ@ ƒ„š¢ÇœÑÊ¥ó”5 !@ ¾¾¡öÀ¡Kî¼Z¯,­g•X5á¼×\YP˜ïv»l‚-žI¤o’²¡˜“ÚSÞ’eç®]¹¤w¿).Iy¨°A‚,š+m’ø¼Þ½»wŒ›0Ù ×[ 3fÎ-//Çù‚š«<Õ3+±²z—SjOÃ0‚ Û—¬ûùMCÞý0Ürc!Ãç-Ø2|H<!Yã“$I¾ ‘×¥‘/èò¸:pøà¾pWN½€ú:/€ÇWvxN„ )ÇDmd-OÓDù©þx—]:,ËÚl¶cS&UÏ[˜à„L*§X‚˜û5+ý@ ¸}W‡•«=ë+œ»÷°ÞÚ Ç]ÛµKÍ€~† ¡ºuež¦i‡ÓÙ«O?ŠÊ¬~¨õuÞlWôêqÅ’àø€Í€¢IC=àE±,Cç°Û—<õ¸ìUï PM,Zp²ªßÌov^seT£Æ$Iò{½g¼÷aÉgÿÓâNy 7l*ܰ©ëûŸÀ¾©S~¼aš­ Ÿc9–eäF .[–(Pû#ÙŽHb[Aö­½ãæ¡ï| ¨~Å(ÃÇ¢òB$Qj÷ѧeo¿kF˜.³fw™5{Û ÓöO»Ân³qÇq,´¬ˆ€ A,ŽH–PBºã‡CûÑ4-IÒ ^{¡-·üÓ”T—ðÉ7ƒ‡0¬Íf÷8žçR6q)‚$šêV3JíÛ³ˤÕ_×îÓàø€T˜V¡ïì?¨˜%™Ò ¸âí÷¾|éY›MxžeYŠ¢‚Û¶ Ç~ŠlšÉ]U}´|Aeï^ùù—ËiyÜ>,$ë(nÛN1=zõÃQ³nÕÒ~ƒ†§Áñ)2¡£Æ4=D•6ÁÎîg645ú›ü@€çyªÛçÿ5ººüˆ÷ìB¤)Û6œ7¾]Û¶….§“çy†Á¶’eð¼múeÅmÛ=|°}‡NÅ%°LÔLš:mî¬ÏŒÍ®'œ"†!yÛëpü助äŒÎ@‰²ŸžH’Åß-{i`0,`L?–žk×­jòû"‘€¦Y–äYða!ÙÅ !£7¬[íJËØ-8_PêÌ@+зó R€Åú}=ö‡ÓéxyÞ†¦ ©æ”¡.oéúyÀuû–¼°(²HMÕ56mDB(šfX–åXœCÉ:”™ÏîÛqBrDG³c< •f@ñ-}fúÅwÜ/€S.×[—N©/iç‡Óáq»ÝN§Ýn“•²¿ªÚè¢êF pÀ7¼ pW„f¿æ”(B€¢†e9^@€d¯ 8qâx›6í°@¢ã)µ x„JKÖÝqËwÞ_7jø7ãÎ¥(ÊÍs»Ýår¹Ý.—Ëét8xާi&àó]tÀ( +À5“Zöÿ`3À›F§Šõ €E3,Ëñ,‡!$˨÷ž{\l¼ `™DKŽÇ Ö38%æEÒסT³hþ7Ç/œ8£k—j»°± xžw:N—ÃápØí¶±ç_¼zù÷‘o¹@î·à€×i9tW IR0E‡ ¹ð=+1Ø€Ðw3æ×?KÉåx€ùµ‚S€r_yØ×Ðç-œ÷œÕêêý€lìv›Íf³ <Çñ@Ó4!„u:£¸Ík*±g°Í¦ŒASV¡Á°0’¥¸ÜyÀ¬'áÈÓ3¬Y1_öÅ+}r4Š˜f¨n0yÑ[TÛÿ6J¸uÐ F^WŒap0bqE¯þ©Öȵ³ÜPÐýš23³ãR„ntZž1† g`*^Òµ.€ €º?ô€‡[¶Œ0wÐâsƱ,ÏóÇÉ6ÍbM’P\IÞ”vp|@šÛEiÜM¡I¶Ô·qhV˜ð€ÏÖ0ã®Õx%Àeá}H§òóý]º¸^y–€ I50jÓ’QmŒ¤¿}`@¦i –üòþ‰O<×êØP€¶÷…œ³à¦sýûÚkxÁf·Ûív» ,Ë⼡H®¢î÷Œ•<”œ]OXÝŸ'¢ÂÕûúŽ|Èd‚¨ìž  €Øÿè­Žm˜p@ìø7À…çF0;{õjêÑÃn·»\.‡Ãa³ÙÐ ¹JáÇŸÄ$IJøhu@ 0ãóI»_(—×5j éô©N©îß©Û7Ôä¹Ñ ©{©u«ÏqkŸzlì]¹j™0ý#€¢.“ê™·Üì±;Ün—Ëåv:|Ë Õ¨/Ükðûö3qßãŸ4¦†¡åNê6AL8T×GLîµ#(Üu"ö4Mæ•9µeãÊ>†o­XÅmŠ ’®]³ÒíÎse÷ó4Ž)S×cBˆßï¯ohð;~ÁƒÓ5§b»T­ÇóΣ¿ ‹ Š‹‹Û¶m[TTät:AÀv’Ôû¼¿úeÁ€¿´C™ËÕJ爢”÷ɧ%¯þ‰"RcIÉÏ<ÙÐ÷,¹Ë04ÍÐtŽw…ðù¼›7¬ 7w´ÏëÝ»{Ǥ)S ®Pyâ$̘9·¼¼ãéA®£,Ë qåÈK/¼÷äå9n·Kn¸\.9ŒÉ 8ÞÆ©T!„EªCi«÷ˆBQ¾þ¦Ý‚…{º¿î’‹(§“¢i†æäÒ9ö:p&&PÂñYÓŽãäm†¦Y–ÝtãµË§N¡÷î;kÛöÎ{÷•¯t46ÖÛ„#mÚì.ë°ù¬³ö3¤K·³ÜÃîp:;//Ïív;ì6–¡Hb0 ¡ @²–€ÊÁñϵnТ«°MóoI‚–u[ !l]]÷_¿\ÿÑ'[_xÞ3d04C³Ð S– `„ã²Ï PES4Ã0<ÏÙì¶û‡Ý7úý¿?ƒ¢„E± Ó3¯àDåѲŽ»Óét:œvAàšˆÁ ¤`H¶£¬'ð7ù[«3Q%ŠˆN']_¯Ø€æ•û$‰P”ãÀÁa7ßZ3xÐÎçžqžÑEžç†e˜ ü‘gÃx@ö™ÙCÓ4Çq‚ 8ö¦¦¦¦& ‚¢(ÊS@3 ÃqlÙàaÇìÒy„Ín³Ûl<Ïs<ÏÐ4Æ‘œ1PÚ¡lÛæu¥ÊÔG%IòûýmÚ:÷ùÔë¶Ê!¹A@ä¯ß0䊫wMž°ãúklùAàY–U&PÉê×dÍŠ%ÃFþÌ8 Æ²Ò ȾK–e8ŽµÙ„` ‚A1 Š’ÔlhšeY–¥ >ûàþ,ËÈ8ò 34H ™ÒeGËr/J’Ô2 R"@( hš¦išah1ØÐ±¬“Ò¼Eíä*¥ÊÔMy¥ Qz3÷¥&ú§n'¥”ù:ÂŒâ‹öËZ7¥ÁéêC‰ú~7PÐÙþP"~«Å_óe o(f@vþ4²¾:BQtÈœêÎJ÷P9Á„Uk:ðg³ 0aòå™ó’& f[•¥IýWs´ÚGùêL»ÿ=ôË:žom“§DLχbðå¤n.'ü£€ªíÖÕyà Eˆ@«|>ràW›¾ÅYD(j>!såµù–,œ-‚<+{Ψ2¹hüHX ñ¨ÎpŽx“šÝŒý0“,WãÒ ürR;H£eÏέ_P‹G|ÝÏ„‹‘Ò” éà¯$Ü `ØœyÛ¯¹‚¢ÈI[ÝÍ+óVÙnòû þPï$Ö IúlÖÄŸ Iv{wÏέ +öÆŽäO{ºõ88Ô¦H¿õÐbFÌ/î;MÁ`P’rahX Ê<ÍñÝmTý÷MêÖ üâŽS$—+34õ¿¿êde¿»®“—ƒ˜mòïöm›’ývD#¿öÔ[6V—´“»)KHR„TæyÞ¼dJcaÁÃÿþ¼}å ¦€$Ég]þ·÷îh¨oà8V^L&gVäΦx€:pÚ´Ô„•Ô)Õot£O&ÏAȘ¿å͈dºohcœ ’÷ynR+E›…ÐȪr#Í!M\74x Ùiàä —LéîÖ&o‘i%à÷ ûìL»Œ_íøÅ (*Xà¡D‘´¸q(BæŽ6ø0^à]÷ÉM×=öú› ¶„ˆ%BhyNPBEœ¬zÀç«ãxŽeYšÎ~Aæ•9µeãÊ>†o­XÅaZO2k׬t»ó\:X2yœ­A‚ÌŸh!Y@gN´xkN•¨ïÕÑ+—ôî7 íb¬Y±¸WŸ~ µµçL¼ h $r²°ðíË/n(,xÞfìv;˱g-_5ö?ÿÕœ«Y`àŸO=êîÕ3??ÏåtðýJ’Äð‚Äó´ß¿zòóG It³¬Ãnw8‡ãØ£“/8¹|UÑCá ¹üí÷þûâÓ<DZ,“3!\?À*f Ûµdd!'Í@ïüY!ÍÐ5ú.¹þê*»Ý]WOžw8ìN§Ãn³1 #Šââ'½ìî‡B'”V6 NVõ›ùõÎk®Ê%µÆ`O$èÊm(ŠÞòÛç9_ÓWDZES‚ Øí6»ÝÆs$¬ñI RódvD^—F}Ádûšp¾ A,ad-OÓDù©Ö­²U`YÖf³›2©zÞÂü‡46@m bö5+ý@ ¸}W‡•«=ë+œ»÷°ÞÚ Ç]ÛµKÍ€~† ¡ºuež¦›—,ÖØªÄ‚ñA,d 4)EQ,ËÂ9T!Eé7§iñÅæ’$ÉïõžñÞ‡%ŸýOsˆ;å-ܰ©pæ®ïû¦Nùñ†i¶‚|ŽåX–‘1ɘªã‚ ­Ú ²GHé#¤n ¨ãÃQy„!’(µûèÓ²·ß5#L—Y³»Ìš½í†iû§]a·Ù8Žã8’à2¯Ì[ÙŸ`P4øÃÊ„ H–šÅ#tü‰Õ[@]}þò·ß«õzëëꛌ¦“#„Ϻõ.“@¡÷ÇŸ à±êÊõõõMMþ`0HTK"'óʼ• `YÆàk‚ ÙkX–áùf´øÔÝ„hI’÷çWU÷ýòŸ¯®¡¡Ñˆ¢Ž „H¾ºWÝèܾ3y ÷îŸxÏ#§Ž÷ù|MM@ ±—šWæ­l€ÀóXÉ^ w"ÁÞ¾dí7ƒjUµ=ÓŸ· iïÞººúÆÆ¦`P«  !Á@ ïMwòªyIµ´x`ÀI À°àC€~ÍÇ55L¦ººÆç«“ l ˜WæÈnò Šu÷×TWbi`i`iy„¾_ ê#¤é)${„þ÷ký>B„îÓŸµ>æN÷¼ àVítôèð×Óû<•'G½úÆŠéSÍFŠ–×4Ž?³8>À*/ùÎí[Â-nÛKKK#Ô#ÔÜGèéé—Üy¿âRoÈÛ²GHÓGH6 › –­ «Sÿ pcËÏE3Nœ 0`@E«ä]¶l[´¾¢vè š¡š¦i!!ñá,ÃÄâñÌm|nœÂ¤eòjù%ïÓoˆîQž·mX·,ôUy>÷Ô‡x„‰¶4tðQÖ;ÔlD+^èÅS\Î±Õ MÞÃeÁ è¢ªcÆ·ˆª´Í'6è#¤ (Í‚Ð>B4MK’4腗öþÑb$€ÛÞW} 3@ƒö¤ËþõñgÝÏä8–ãX†a䮢qšL`~í°¬&] óÝyÞ.Í !£C_æ{zKÃ@Ý$¤@ÒXαը²`ü9e>ïáR&µ¬´¡ïì?¨˜µ/H¶W¼ýÞ—/=k³ ϳ,KQTpÛváØOúW¿ àÖ–í'Z™ý:'yjj¤í;ëlýxžçXŽa˜ø×0ÈèñºuB½~–&üSþjÐ,¶ºv˜™scFs#]aB¿n4R…J«NÃGÏ k1jÖ{Š*§¡ƒºF÷ËÑ8wáŠ(Ü¢yuUiD¬ŸÆu&ƒîtÍsÆ5*e¥‘ØW;†ë„+ãñu€K¾UFy5JB(Š ¡iº9JLÈ'N>r׃à»ÿû/ÏóT·Ïÿ«/A[€?´lÿðÇ(Šntùâ¥ÝÏ´;ì6›Mn Äù,r0ZÌ7Õc¨…ÆnŸp4)¡±·!Ê÷\ˆó=7Y¤f^?3¹‹xÙ¨î›ðÒˆXgbÏøôpJ?CJ#±­¢8™ôšO™ÐB&„ >niùœ`û’;y‡¢hŠ¢‘W”A‡%éÛ¯'gt~« ¿¨¨ð‚ ¯XZþ’Åß-пýÊ*‹o£Èiߊ-ßÕ×748v»Mà%IŠ3*`‰ù‚RÖ¸N†s !wqº<áÞózŸ7N!uå ýDÕýî3¸ròžZÂK#]u)tÞL+D<¢ŠN™)ã ¬Þ#«WÙ#ôÀ+:8D(Ši™÷mñ€~ã6nzºc{—ÀË1áæïëšSaJàçŠ# à€ÇnèØðÀFÂ7V×4ºÝþ€?(ŠœDhšÄcp¾ ¬1cº-ÖÔxä̼{&•Q´1¾lü0eE›v‹*ƒé* ƒ,˜¬«ëXZ¢&j©ä>B°ô™éßqóç?Àû7L«/iG6núõo^UŸKÓ´¿ªZÿº©z‚þð-@o•–=às€«Ì@ º&PZEQ$Dˆë‹ç ʾÖLŠÃ³fšØÆnYÀæ3±Ÿáaj“ßò‰òo¤«4â¿oTÙL™aSK%[iɺ;nòÎûëF ?{ÙÊçºtvó¼ó·7Ün—Ëåt:<ÏÓ4ðùô/=AµÝ@¸ ` Àc×¶ìÜȈõõÁ`0 Jb ãø$‘oKæ_Ö⥊O$¶œ*svÊ}„ftíRíq“e+ òyž€ÂÂ|‡Ãa·Ûxî´;HŸAªí:€1ò¿TÙ€~F ’EI‘÷`aóÊ< óéúõÂUDã¯ÔøÑf„IÞWLœWøýS˜?<Åžð¢ÖMƒS%Q¥‘ O0ܹñÔùô–FwžçœN‡ã¬ž¿¸ç(**,**Çãr:l‚㸳G§(Šu:õ¯x†jûÏ-@ö é«Û  ,=ÓBÌ4¯ÌÓ­+¯‚Æó yrJÿ™P´ÉsÍ ‘ú™…“ÌÅcëZS]Ù½gß ë– vÍôÐàsj ›&_¡Ž ˆÏ"âec+ØKü¦ˆç›,U3ÛI*‚R1á¨êXÄ”kKü…OQÔºU ‡ 'ïÿvöŒ‰S®,*,`Y¶|þ×cÏ¿X9}ݪ…’$ñ…úWÏWmÏPm©¶Ú€pÖ%&Ì+sjËÆ•} ßZ± <·AÒÍëÝî<—Çc©l&·”åÑ@º¯zl*/«‹%¥‘Å›K¥‘‚ZG‘$IÅ`P89D,‚2aƒ¦ƒ&ÍPGÏ;·tÁbíU~(iÙV;Û¦©¶ß+ÃÚ^=hyj:šfh:þYãp=a )¾¿Òá\jÖ,D§‹)ÇJ#©Åñ.ëV-„ðÓõÐ4ýÃeëØ€uSZ¶‡,€³U“ÇÍXV†9ƒ0 Ãq˲4CÇ?g\îÈ®b¹lîK4w¡è^=ê‹Û84+| ²¼Ò²~€¬ŠwÜ&Ä[åvÕuhŸÇsòÒ’ ÃPT¼+ ãøACQMS,Ë.ùåýŸx®Õ±-£ÀàL€¿«-¸®u¡ÖüuÒxŽçA°Ùžã•EŒãÇ ‚$ÃÐ,Ë2û2°tÝÆÓÇÀuå·ô~Xð>À7a[°åŒÎµ;yÁa·Ûl6^àåé£ã´@I–à9níS½ë!÷OªEÙD€·ÞŽâj'ò<ÿºøB—Mp8ΖÁhñO 8_‚ H’`†ãX‡Óñý«¿¾àÁéÎp³ÈE¢Æé|õú«í»Óét¹œN—Ãn·µÄâ c<A$)í`YVày{QÑWüÝøç~S|àP´×9XÜæi—Û\.—Ëåq»=·ÃáP–©‰ß`<A$Yf€¦iŽãívI*,œ÷Ò³]gÌñÕlóWøzÔðÅÇÚív—ÓáñxòòÄšf€ Ä&Ž`0~  ‚yQ0Š¢h†æXŽeYžç8ŽcYyZˆæÏÿ¨âÀSdÍŽñ€\·<—‡ծ´ìðÝòö¾=Í«chbSVÄò–@’$yjQEQ’$Q^LîJDÓ ÃÐ ÃÈ#éõí½ÌØŒä8WÏ )»Ýñ£]î ,jŽZk‡zotw&• L¼ô²+Ë-ºô²+®Lê½–/þV³§Îçuº<š?ùÖIå‹M˜pÁ¨Q#q|@ÚºûÕžœ¼ùñ“úNA êŠ‚$•Dõ¾çl< »ºå ;ws:›{ÕTŸ‡ªw(ëÚÜ,¨«Ý¾ Â’A˜Wæ­V¯Eƒ¿Ô†k¼1‰2ºN“§èžÃ³‹€¿ÉhþÛ°v™<}²Ç¼AÔ`^™gt<@c4ÁÞ˜‡™q߇»~ ñ€hE5cêþ&ªwCGŽ]»¢¼´C™üSž©ÊïoTfX³bÉ¥ÓnñÐ H*>ÈÌ$3¯Ì©-Wö0|kÅ*(nSdtíš•nwžËãÉêÌo’ŸÆRýan` ÌI2“?É(1ì'Šä$9Y±­8>À Z™EóÉŸ¨Ï÷?!¹kWÚ±Îç5kƒ H›"S ^eKÅnWÚÑd@r8`­5©@=6 ·C©GÝAèó 4vîÜ%o HñÓ±ƒš=~¿?´_õ9çŽÍŠììܹ«wŸ>“¥Ç$06›p}.6`¦)Ø@¨¢¡/ì„äJßÐlìík˜õñ€ ‰‹šWÐÈEÄéò(Ýÿë}§äYò ›SÕ‰Ÿr2ã8_η¶•­I¬ôä §÷£Ú HŠQ»Md¿¿Ë§xÕææaÎF²> V¾18ú5'†ªrƒkjË?à,â¶¨ê šéS®f'ïÓƒ$)(l[]õÏ7kCŤ ®:ñSY—nÙUɉ^?€Ú²qeŸ÷V¬ÇmtsÅz·;Ïåñ`ÝJ,Ñú‘R $«ñù¼>¯þ€lœ4"Ííóz÷îÞ1nÂdƒ+x½µ0cæÜòòrœ/(ûðû]“•É0êê%¯X„3H#YËåq¹rçËÕÌâ€ñ€,j@L3p‘4Õ+y7B$þ74¸~@vOW"¿¿Ñdmˆ¿Ù‘š!’(p¾ Aë‚ó!‰'fÏ•r:¡@õÛ•? ª7ãHâ«ljÖ?@‹ð¹ÂbSæ@¢û mzËõ,àƒ ˆÉÖ¶æÝ1o-0€$·nq4ã ,@1ø6Ò¼51ŒA™c<‰ºõŠÚAõ6i^¨ÐI ¦ ÆWVŒ H* ƒnƒÛ<@’b dÍÍNƒ=‚¨ Í` 2åŒ ™ò…n§™=‚oSÄýºm³šã‚ –ã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Öã‚ Ö%Yñ€’ö®<,_AÌÄå:µw÷ŽdÅ®<§Ó¥Œ ’É$%pVŸë–—v(ÃòEÉLÖ¬X2aòÔdÅú ¼¹bý¡û° A2É_Uú¨Ç 6bè°XЂ 9Ž@A8>AÄÊ6Ç ‚X×à|A‚ Öµ@±® Àx‚ ˆumÆA¬k0€ b]€ñAëÚ3ñ€ëWefNžù2g…9Ÿ£Ü{ XXf²ÙDŒ¬]½¼G¯~™™ó% ¿7ar†ËœBæ|Žrï)`i`iDÌB8¨-Wö0|kÅ*(nSddÖ¬,jÓöŒî½36ósg}6iÊÔ —9+„ÌùåÞSÀÒÀÒ0È‚†Ê'`ÆÌ¹åååÑÅÚ•–>°;“3š… ”9+„ÌùåÞSÀÒÀÒ0¯Ì¢‹Ü·ËïoÌ䜇f!eÎ !s>G¹÷°4°4Ì+s}1pâÄñ6mÚerÎC³2g…9Ÿ£Ü{ XX敹¾ ˆ8>@l¼ drÎC³2g…9Ÿ£Ü{ XX敹¾ ˆèBÁLA >{ìúÕåÆ{"ž¡Y0#s §XÈÁgUÿLžl).ö4f*+žBRëaüO0Ó*gzÕHhi¨…IÙ£4©Ìõm@D’ËÇó63× MñD“W‡¯ö”nLÊ<øì±[6®L < ²ïÀÙB÷¤‹˜‹=™Ê–§ _?Ùw‰óÅÉ´Ê™^5¢É»æg2TŠù,˜²©™/¨ïÀÓKQ†Ö¥Þ‡K!?±fÁàe X2Üv¢„Ô½¦ZZƒÓ-ê8K8±Ån¾’èã•™S p轨jc+ˆ•3†J1}¸2”÷§Iqi„Ó*á3_ ÌBªç 2¶“1kÕäeÁŒÀÉsÕÅ ¤Æ6D,ÕÌÉQ8‘Œ%ŒùÅ/sŠNÒ³KF4S2 ¬´òÏPÛs9'°4Œõ[¸¼›)De!Yó©mWü¥– /XTMp)Cÿ'[È„”X›ê1äÈ -¢+žñž™S,°’Þ j%ð9¦~®°x*m²}MiŸ9-þ &+sÔ&!ó‘d,pS¶NCR‹:þ…º Â5“‘ÍdN¯ÀMQÚëd87N’*mÄ”1—sZVR1ãKFÒHª 3 ºß\ 8eë4¤,4±‡~(è*\Ý&WlÙŒGæd ¬vm‡^?¾ “¥AQ¶)ŠŠh#“×H rHHýO×J*ºO6ÙÕ;×ÖÈŠ,äÞ: 1äÈ@¥¦cI´2§X`ƒ–tºJ£ðãO_>•jIIÓ´lBA ¸I­! |CÓÕKÊ|hõ&¿ßà/eΊxª{ü2«[d²©?î¢íÀ•ºò„FŠÒëJ^Uш±¨Íg3I2Ç/°Ag›ä=Lj¥Aá÷í0f¢ç˯ššü~¿Ú%ýT7"Ë„û…L^3ª[ÇV7B_Õ¨ÔBbßbóÊ<Õë kŠÉ ˜[;(!YÐgO¾ø… ­[º]Ð4‡b<æ¾C±ùÖÃeÊ üc«QÉ~ ©Øøíˆ³ßWÄÒ „4té’tÆË¯–üë£mO>V×»ÏskW–÷42\åŒ6³&Ó¸Ò74žrŽYD«ß jQʪw«¹£=·AÒÍëK;”¹\ž¤‰½ïض>†}>ïæ k5g§Fæô s‰elŽPæL+ Bˆ$I¶‹º<ü˜òÑ_Õ¿ïÚ'õtl/ðÇq,ËÐ4MQTê]CX7"fAƒ×[ ºsGGt!ñ¼KþP·ØnÁó~Ý,¤Fæô ™Æ fE±ç€Ìé- ÙxÛ· Ð4HRá¦-¯½ùÀ%í»ç®ÂŠfh†aX–j!WK#K³ŽèÆð<ÏñIŸ8)¶[ð<¯›…ÔÈœ^!Ó˜Á¬(ö9½¥AE J;´ò!B(ªlöœ’òŻ￧vÊ…'CÑÀq Ã4· r²4²4 ¦l@DÇÛ¸$÷i9~ì`<ß¡YHÌé2æËء̙V„ZEÍÇ$ Eɇ¸:_¯—_÷ɧ›ž}Ú5xÐÍ0ÝLvY‚¨á²`ÊDìRÊñÏe¨1 ð~Ý,d”ÌY!dÎç(÷žB JCEp‚ètÒõõŠ  äà€DE9yû§† ÙóâóÐõ h†giŠa&‹\C9P7ÂeÁ” ˆèB ø›ü™j þ&Ý,d”ÌY!dÎç(÷žB JCÅ€”–;wMDÔ!¹A@ä­[7ðÒË\qÙñ{~á(,ã8Å5”ù– êF¸,„#Š~AÐÏÌœ¯Y±dòÅ—g¸ÌY!dÎç(÷žB JC’¤@ Ðå™—Ú-Y¦6MËf€jé0$oû]ÎM·ß|â¼sív;Çq,˲l4r n„Ë‚u¿ V6ÀápD¼Á[+Ø—9Ÿ0yjæËœBæ|Žrï)¤ 4!Á ØgáÒ1ÿ·€P@µô•h ZFœJª¡§Uùž§Nj:£3ϳ,ËÒLKs S-AÔ ƒ,(Ô××ëÛ€ˆíA¬‰$IÁ`þn~—ƒ–€°üí/ø+{Ô‡hºªßž|ÌѹÌf“G°90’ «‰}|‚ Ö„d˜À) dõ®hyZ’Ô¾ Ù œ¶’T¸qÓ¨ën9|õå•¿¸ÊÏgh†f(†a•FoIÖú‚ä˜ E±ÆíîLÑ@$u €´VâšØ€l (Qìøé¥3¿ÞùÀ½?]4Éa·óϱlöŽ$ÈM–Y³É  Im·†¡$I£âuU¿º­ÐÜbhlêõû×ßû`åSÓmCÚm6žçY–¡[XÎi¶éš5AÌGEÁál@‹ÏGíR'Öz„Til'NŒ}ø±gÝ1ý—¤c{Š&+”å  Àx‚ 6€´/e¶ïT+úPíª@±nBQmV¯msŵû¸Ûwó <,Ãȱb,çtÚŒ I’ü@}÷n¶ Öéj-¯î)¤¨!/»dß9£ ª«EQ Šv^àl ¤×`<A ŠRCçNò¼¡ê¯~U¨@öÉJ_ISUPðñ-7p]:ç74ÚÁ&7à H§ Àx‚ ám@‚gvU @(šÎBJƒ@˜ÿ³ÑËÇžët9ËóÏq˰˲͓ aQ§Í`<A°ú ÃÔt)£( ­¶šŽ@jK  œ,ÈÿçµW‹%íò·Û•ŸçÉËËËóxÜ.—ÝnSÆŽaQ§Í˜‰ü°m –‚XÓˆ¢¨ªêMˆÒ=(!ê)"Ô~ €Ð„ÌØoî þ¼tTŸôû‚Æ€¿¡Îç­®®x @¢8«wߨm@ÄxÀÎ?tïÙKA¬i$Iª¯­š–ª?üé˜p³ (ðÙl«&Œï`w¸Ý®¼¡ªêñÍ|¿#R¹áš…ƒU±[ûY¼­] -¦Pp°ðÁ‡¶®üWײ|!T•hEŸð g¬üV¸5à¤Ð€>Ø[[?ó£öÊ?åqmýÌR5 TåÈÙ’œ§éŸE² lÒ/¿ø‹Í¸cAzúŸ3f6ÉãÚú™Á)ÅSrFzöµ(¤T ÈWTÎt!DìóþðÒ6mÞAˆçy²—ÿ€¸y¹Îy„±§o¼áoïú1d ô ²ãhã³[.[ yB(„h8#téëë±ó ãìGÊ)Z#jÉçҰ­Ñ ˜’ §ÃÝ(P Û *@å=!¶®¸™Çb?üç»Ö­¹×4MJé_ ñH°ßØðÅÃòøÜm/¼wÑì>.·–$¸µä g¬üÈçÛã”$ ÁP ã…î$¿|¯º#ÚOðK>Qº^|9Ù–÷¶Èe7­éÜgLqo.¼ú¼Í[î™6ͦªªªB¦I)ÝpϧW~Ü’oƒEˆ«×n¿o%cŒjTU‰\#†2p¢+‚L|Á˜øšwBš—qÉEÖ˜óæäkO¾*TUímjúÃ_-;fbó–H¤’3¾ù™§¾±è[;w¼tñœy;w¼´«µuÞw®Wr-–ígÿâé–e‹“áâp(p"+cèoFçȘ Ïž¯7À´ÓëZ[ö—tù²òYfW‘Ñ'ÖÖÏÌن­ÍW{zzÎã’ J½^™˜}É… [[ö8·ð] ÌtÝøß÷‡{{¡·âÕq]× Ó€X,Ñh”s}ßß­hX³>cÒ¼Äçþzûþ9—8–å™>(ª¦á7B'¬Ç+cœ1ïòøþ¢ú¨SÚµNž2­íPk¶e¾ß1#=ýôìÒF4ȶ/æóeå´Ì®¢@ 3Ì ·6_íéé9K2H¯4_9mÒsGüeÓ <ùêʨ‚sSQˆ¢ /ºâñ)Œq®sÛ•Wh”÷\{mïÖmáýæ Àü{W¿òÀúPÈ5=¡(„”ÏÞc80vþÆ8Åù¢ñ%û†—š’óXþ¯NçØÑ¶ìt™˜þg$6¹xƒŒÜb.0›,Ï*PT`# ÒÛœ³Æ|m* dxo YrºY¶MFn$69gíùî€<¥ð}ÎWEzúß?súY±ª*J)!ZGÛ¡ªÉS:;Žø¾¯Qª(ê»kWŸ¿à*%-‚4 ÿ^Ènk›þä“Gn¼1JB¨DÓèè¿AìŠáëÒÊd0fë˜Nq.héëíþŒ)9³O)œ^’M1…Œ¢ñ9m>{ƒ äæÌ*éÞs<¿lIRŒMoO—Ÿ¢£ýˆªÛžq]A4ª êê[n¿íŒ»WæÛnLbֳϵ\6oÐ ›!ÏP•hš¦•ÔeËß÷}!„ n ÁžÁGGå0s0VþÊj‚ ²Û=>Zö橾Uvõ‰FAQ»–.ívshÿ~1|;Ét%˜s׿¼öØc!Ë2=Ÿ+ªJ´"g„d§Ÿtœþ·ÞªøÍoÈï^%{ö¨]]~e¥ÛØèÌž}tî\㋳¨®BˆªªäÔÿ•2ÆÎà&nÂÁÿ‚d`…+äpAvò…\U€söþýëνü %­Ó?>?“š²žúè#í·Ü¬ª ß7 Jéˆ3B¾ïtvV¬\em|Èž¥vvò;ùÎöªUйtÉá[WX“&1Æ!rIÚ©º*ÍM$`ŒüµuuÍO9 wA2Á$ÒcË !<ÏK$ý¼uËò/=øpÐõƒ€À?Üøô3?ÿÒÌîÆ†He¥eYœ³C!„—ôª~úxõÚŠi[ôñ'¢?ñÁõKöç[†n0F)¥2dé©7 ØõÚ«—ÌW¼}iþ€†ÆÆ}ÍÍ­Ÿ|ŒO<‚ #’’·ï´êêøäøá6€ãàÈ­Ç|¹¢xþ½«×-_Za‡­©ëœhšškÒFá;Ε+×Ƕ–Ô˜úŸ>a½ðŸÿ~Ó2#l1F©v|Æé“¯Î_P’}Éû ×ÖÕÕÖÕáà H1àû¾ëºýïÕÖǯ]"£I€šZ%@„ðUU¢ª§oѾ?¹~qU,jÛv°Ë|FÉžž/\±P;Ò6ŠöL9täoÖ>üß>`Mžl…Bœ3Rrj­O.ÞC0^‚ '\ªQ}êÔ=+nšµ~£t¤-Ì}yëö}þ™6«QQ pÎÓg„„n­½ú›£‰Ñyì‚›¾÷ÊÆun$iY!ë”ÒrÞË ã!2¶Èq ûš…=[·ÛZ‚~?ãK!¡(W®¹ÿÅ5«LÃ0tÎSTQL´éIDAT%xO÷}¿úÖ¿§ŸäšR>ˆlG 0V[{Ó]w¿sç©F¨¦1¦É†P0^‚ c2ð)¥š¦*Êžûîž}Íué#€ôè…¢„;Žžõ‹gݰ,é†%D.BôýþõÐ+;r×1u$€·R;áÖì~k×»g_ ë:Ð4M+×õÉ%ûAF!žï+Dåñêæ[oi\÷`ð⟾õ¼œóü¯ß}2«Q€ð|_ç\UUÏ÷OÿÞ?ä­àü"±kØ_¾îÁíõÇ]›žï3V¦[Ù ?AñÀ÷… ¥ìè_|½{ë¶Š>dàÿ¥"5&˜ßÚW¯b”MS@Ñ4mèíw觇ò–þ@$Wz `@ @ÀÚa9áÎcCoïé:¿‰hš¢¨Pž3Bè@d|†ÇWé ðßüñs®]Y!ä‚1Ág;N"é¹Â÷å×›_øÙS…Jwœ\ÝÛÔ¸ßhÎÌÿÓ—ÿk÷¬×Mø¾„¨„”]ˆþAÆM¥T#š:½öýï¯8kõúàõ?p÷ZÖ㋯#gÕŘFT¢iÕ4¢*öÖm%×· @.–ZðÛù3víþý“t“Â÷‰ªRJËÐ+€þAÆß÷}áBŽ^}eÏsÏÛ†í5ö?ç7½xùe¦² QU€ð<ÏqnWwÉ5-ø>ÜðX^«î¶v#Ò 2 ”áÎÆè@d\‡B(ªJ¸®¿ñowνn©€žpø¡o.ª™br2C–e™¦ÉWTUøÐw¤½´jþ@F¦xà¶B†ƒíƒñøÐ ã˜ M£ŠªŠòÕ€|Fkð<Ï÷}%}󦾼ñÑÝ_¸í²¹ (:£¦aZVÈ4 Ιª*^2éèmï(¡‚j€ÍàÀuÉB¶NWw_oŸÉu¦(L²² ‚Œ5rûxMÓ ·_µà¹éµÇìpthç!Ó´¬PÈ4 Ã[ —V:ø%@ ,82‚¹'ü¤çù¾'|!„(ßC€;KAÆß÷=Ïs]7‘H8ÎAÏó@Ó4š‚¤bý !¼O?_d¹+.€5/l¾ïãVu(iÛ¶eY†a”¡?@¹ôÒKñqDdü‘å$2‚œ"ÿfÄq^~íµ‘KüK€_À‡ç1·}ÎôéÂ08çŒ1)åö]RžÃA&‚xž—L&“ɤïûrìñôÅžç  X¶=BqÓv„`>À‹Eµá¡ ªãñiÓ¦ÅãñH$¢ëz¹-PñADäóyUB¥T×uÃ0 ÃàœËÄ2^ÆUB-*Tx*%Ï+ÍMMDÓHŠòŒ„€ Èç,òÝ_²@N µ-_^¨ J… ·[û«sæhšÆ“î‡rØq5A‰¨…û_EQ¬óÎs§NÍÝð©ãgsÄ„ÈIO$âžy&ç<Ý€ãA §ªªRJ¬[—Ûâž´¯Ü×[ì“ßþ6×uÃ0LÓ䜗§C5A“F*.¾¸7û;Æs‚ tì,ªÌý ‰³Ï6 C.HÖu5Ad¢öSªJ᜷=òÈPMͰ¼t7Á–`ËúB‹F·|÷»¦i†Ãáp8 …ä8 <}Âøm(‚ ¹’Àqœ¾¾¾Ž––é ðŽŽÑÕkÛ?ùÁôX,Nš4©ºº:‹Y–Å9Çq‚ È„|WMMéºnO™²wëÖžúúQ”s¸¦æáÛo×c±ŠŠŠH$‰DÂá°®ë9?HÅq‚ ÈÂ÷}×uzzzŽvt„7l¨ß´©øÓw|ík»/¿< Ù¶F«ªª¢Ñ¨mÛ¦iJ (S}E @ä¤@Î%‰ÁÁÁžžžcÇŽµ‡YuIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig41.png0100664000212600000240000002105310322727434015544 0ustar mikeuser‰PNG  IHDRœKôúËø pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF!¡IDATxÚb¼ráÃ(£`Œ‚Q0 †8È)¨  ¥­o>£`Œ‚Q0 FÁÐ@ €X œ«OކÈ(£`Œ‚Q0¤@1Á(£`Œ‚Q0<@öÉ.@  DÇ鱓tÂNÕq¢`7Õ!ˆ ‡ Ûýu´?˺½tœ¶Q–.«nÃ\+‹æ8Üvª^ç6¼ÂCYÔx·–øª¡ <´Jf±Ý@TçüZùÀêÈøpm¢€v 6¨:e\n!ÀX¯‹èÙo.BërQƒbQƒ Wç=p]âF¥@d¼8Û'%Mʈ´ªýx+„ñÌ·ª" ã!Ru®hS«hª¡ïnR²­S²Uç÷ªseûû ãÎz¸ ªc“Úèü(£`ŒRzùDNÀ ž:òœ:Òa$wÖi{ê‚§'¡3ë2æUpo{ꌣ©iŒ‚Q0 FÁ€x7>¾áw\5÷Áƒ¸F÷×!Ýô×z(4 2§ÎÀ0Z‰‚Q0 FÁ(t5:|N˜z €XȰ†ø£iFÁ(£`Œ‚áÚ{†ZlNC[‡¶n jYÏ­šýõöÔ/·»ÚxÕsxÕs?ßœüùt­h¡5úâúÅÀÎ:1}t ã²g» ;ÔÉràsakåä­k‰÷Á݃ d¡œªCãíõ£ åFÁ(£`„7ˆ˜•71M€Âø Éõ:ÆÙÿÀª=å,~~Í<¸4d­„ Z+V'¤SSË ¬[× Z+›5(F;_̰n¹¸Q|ê@Ò¸ëõ@ mVÉÀ€>îÝÕ†4õ gUƒv—‚‚u-ÜS µr06dé;\§²}ÚuªŽ®£`Œ‚Q0”IýrZtâñ€ÂR©^Ð2 FÁ(£` \'³RK=%ºà €XFã‰@Øeg팂Q0 FÁ0ŽŽŽ4UO‰.d@£•ú(£`Œ‚Q@`Þ‡68m ¦Ñ¨£`Œ‚Q0 † ”žú©5q£!2 FÁ(¨à?^î(ƒJ¥Náüü(£`Œ‚Q0 è êë둯` ô9õŒ†Ñ(£`Œ‚Q0øÁ” h"„e¡Üh½> FÁ(£`д©=§ S €pVêð³`ѸXEÀ› d»‡êþ¥ÜIdV—cJ‘*N’ÕÈÁEÓ¤B#Ã1µ­ VxâŠG¸,š VõøÝߊQ0 FÁ€m}sb”566b <å 0Ïò^;¼X?h…×@•Yt7´JîqÌÆ rœ/N¤—‡Y¾"µ GyxâŠG\U5~õ¸,BN£`Œ‚Á çÈIÄBR—eЖàxz0ô,ßyë‡rñ!ZïÚp¦ÄÌQ0 FÁ(ÀDÚá3Ä óbbíµo‰c†pÅÔ™Çå/üî$Ò¬\’üKêàðÖè’NȘS}´o= FÁ( þ"­ q¬e\ OU ‘Â¥žu FÁ(£` @V¿ã:ðœ—N àÜ©«Ôr‘gw3u¦7ILÓ¹ö‘vwÀ€§çQ0 FÁ(€€"|L,®âù¸i¬§¯i2Ié ðáNª›‰?»›¼3½‰dúœ ?¢îéyŒ‚Q0$®›ZˆÄB^Ž« $²¸ØÞ åV“TW 抦GÓŒ»F7—‚Q0 ¨°Þ¦J ²Ë)LYRûë˜æàÛǵ ­JÉYâ¸ÎŸÁº?È‘[ò¶YSÞÛ„g„»Èöžt> FÁ(!`Ê„ [4ˆÊá?RÉSAâß³ŽÿÌp\5:ÖkRÏ–ÇUÙãŸÉÆt æ¡%˜€È&펦wPè/RÓù(£`Xm}sbК ;°j –a4ÔšÖ¥]‡ Ï 6p—#/\@«È‰9wÏ„'ïî²ãy ˆÈ3‰vä|H,;£`ÐPrŸ:@±,‰¯-È+"iW°æüà”—øCèLxªÄã`8+žxÛ‡zú£` B@LÄ”¸D()˨ÒA!æ˜qR !µ§i½K‰]ƒíLxZ‡ç@Ý@Ÿ¡òÑ«TGÁ(Ä€"pL,÷©“º¯W†K%Á­ÞXÍ!xÌ;ñ>Åå_ ÏÆ'Û^ ʼni¦Œ„»H²‚øô‰ÿ¬øQ0 FÁð” @Cãìwü ‡[ɸðcŒú§óQ0 FÁh¥N°R !pL,ære8—Âw´Îâh‘: a:£`Œâ@ Õït˜å­ÈGÁ Mç£`Œ‚Q@< Ñ ]FÁ(£`Œ‚ah´R£`Œ‚Q0 †  ÑJ}Œ‚Q0 FÁ(& €F+õQ0 FÁ(£`˜€­ÔGÁ(£`Œ‚ah´R£`Œ‚Q0 †  ÑJ}Œ‚Q0 FÁ(& €F+õQ0 FÁ(£`˜€­ÔGÁ(£`Œ‚ah´R£`Œ‚Q0 †  ÑJ}Œ‚Q0 FÁ(& €XFƒ`Œ‚Q0 FÁ($ ±±‘턳R'éên‚&0ŒÞWAD@‘tE:íÂs°ÝVGöMöƒÖG£`Œ‚Q€äTPh@1á/‘o'²òƬuˆ1dðÔ¬ôDV6$E AÑ߿Բ‘ŒºyH¤ÀQ0 FÁ(Ø¿ÿ” Ä“˜&©Ýä[̉/¯y©:\‹{òjtx»a„3UÜ3Z¯‚Q0 ?¸zñ¤¶¾9ñ$¦ DxN`y T©æIÅ4«8r#“Õ©xÌÁ#Ž9®Kêp7IöRRÇ 9¿½hþ"տĸ’°F ò€ ÖtBj<âiƒâWOFB£`Œz’jt ‰i@‘¼úÝÈîáF&ox¢Y ~s0Å‘kd¯‘ádÚ‹f>ñ}M¬Ã$Äû —8~Çàw?Ö†®ŠkHbÆ#1C¤½£ýõQ0 FÁé©Õ¶´Q·¸¤|ijò£ÄGDºëÜž‹¦öR1ܨ˜N°Îá‡Ñs£`Œ‚áÝS ÂÃïį=TÛTqæ˜?I½Fê´ž1Z8ªŠ ¸Q+£5ú(£`˜õÔ1ëu€b¢nŸO?’Ä=HÔêÌ‘d²z8{Ùâò/©â$Å5ætÁp£V?n1Z£‚Q0 FBO €˜ˆ)¯1§]ñޏjaîp#C×t5‘Ž'©gIª9ÝIEõDºW—8Ö6 ~'á`ÇnX{ðÄ´±ðo¡Äjïh> FÁ(–=uLˆáÊ…ÿÿÿ’@ÔÐÐ0ZðJF5FÁ(£` Õ1ñ$f @£g¿2#"£`Œ‚Q0 hÚS Ñ³ßG¥õú(£`ŒªÊçÔh´§> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ0é©Ðh¥> FÁ(£` “ž:@Vê£`Œ‚Q0 FÁ ª×‰$1µËhŽ‚Q0 FÁ(ƒ`íc‚ÆÆF¬â4Z©‚Q0 FÁ(ƒ®³N Ñá÷Q0 FÁ(£`˜€­ÔGÁ(£`Œ‚ah´R£`Œ‚Q0 †  Ñ9õQ0 FÁ(£`Ð LÁ+Nà×@£=õQ0 FÁ(£`ÐÌú›`4Z©‚Q0 FÁ(ƒ½^'¦F€­ÔGÁ(£`Œ‚A]¯Y£@Vê£`Œ‚Q0 FÁÐè¯4Z©‚Q0 FÁ(ÃÐh¥> FÁ(£` @£•ú(£`Œ‚Q0L@îS£`Œ‚Q0  ÀuS ‘ €F+õQ0 FÁ(£`P€œ‚ M ôJ}Ê„ŽÑ`£`Œ‚Q0 †" ”J½¾¾~4DFÁ(£`Œ‚! ¥R§ä×Q0 FÁ(£` , ÑÕï£`Œ‚Q0 FÁ0ê©S¸ÖnŒ‚Q0 FÁ(ƒ£ƒƒÃh(Œ‚Q0 FÁ(ó_‘‚üŒv IEND®B`‚htmldoc-1.8.27/doc/arrow.xcf.gz0100664000212600000240000000305307455332323014751 0ustar mikeuser‹Ê948gimp_temp.483320.xcfíWOl”EŸïÛín»»íî–¥ÒK¡¡…¶€%kH< ‘ÆhôJ³RÄBkZL$©Y¯€Wô¢# ¦Œ‘ÕÄ ‘x«F9iб"1E»û½ßoÞ|Ë–ˆ‰ÿúm¦ó¾yïÍûͼß÷fzøÈ±:^*ŽvŒ9zHñóŠkx²Üù:>ÜÎ<¡ÇÄ´A[µÍïgÚ‘ü­Õ–ô) (7O´0¡)}[[–hÍb:˜ö˜Ì»Æ[dç¬Èäm½aÒ“™µ†}»€ÇÌkÔzEëiçJ7òw¡_åÁp£,bû*8j½ýÎEø±“ü" ô(ÐìÁ›±‰ü0¨[5ýÚΟQeÅmÙBãv øê ëªÑë<ÔÄÀHñ ~®)œ!â"t£ó¿«kQÝy¼zJ‡ëùõyŠPEßÉ^˜Â³u)6ä “:PŸyëR‹=üöãAÐú,gÃá.òÎTZ*ðŠªjnއcð8±_Ä×u ÂEÕ÷Z²ªWQ8%Iðí…W ‹`³8½iw–—ädS"ÖžkAµàC² µÓ*Øw EÁ´™¨Ú)E«ÎsZë ×> Ì–PÔ7ÇõƒËÅ0Fm®ð‰ÌðDC·¸’tbN‰ãv¨ÈK¥ü¼­+ÕÜ5GXL× ¨q– À:àÓµoÆJ3¨6Ó¶¾ÐY_6¦È»L­7EÁ=»td‡'äš3%5g8œÉR±¼ª+¬Ê«J¸dúek³…H€ñ`¹Åh?ŠQê“°†—ÔN•À‘Ó§R(WÛU3Þ¶©T3{ìqÄ]º2wöÌØ¢ìù€#ª‡;u‡]­Øqœ…© WôÂÕ SyÕdèÒ>Ž•4t~ãSo®£5º5ÄáZ Íç9^ÚÐl£œ¶Ýl•ˆSÒ]±u›ÝÏ=×챓’Û¥|àŒ‡oT(s.íËÎ?ëú]¿”ö~)ùr Èá0(5}—œ$»åxÙ#ÇÎ;Œöâ€*%˵-Ø(EFÖ˜R=«9qÀâÊ=\Ó‚dLºýÒµY\6¿ý€~Ç‘áЀ#Ú #â.GÖÝŽÏ{é‡ä»Ø‹ø–&쯻ž0Ó.Ž!Ž/Ž=ŽKŽY5®•’ µáéÇ$Êô’nìNJ]‚]º]òC.8j„L ™2)dVÈ´yõ|~v­þhï˜ûFŠc‡''^ö^WTõÏ_Q“'ï‚á±·¸Í/O~Ìí2·YnßÚ+jF™¿Óî±é'=TÄ…½ãñ‘©1U1Ü’’Zzko©“3¹îI=S7;›¤&˜ ¯/š:Íÿ_°köeÖ­´«Y¾9-ßœ–oNË7§ÿúæôoÞhþ¯w‡ÿÛÉý‡YkÖ¨htmldoc-1.8.27/doc/htmldoc-cd.sh0100775000212600000240000000062710142770604015052 0ustar mikeuser#!/bin/sh # # Script to make a PDF file for printing the HTMLDOC CD booklet. # # Requires our internal "makebook" program which adds things like crop # marks, and Ghostscript which converts the whole shebang to PDF... # ../htmldoc/htmldoc --datadir .. --verbose --batch htmldoc-cd.book -f htmldoc-cd.ps makebook -c -i 4.75x7in -o letter htmldoc-cd.ps htmldoc-cd2.ps ps2pdf13 htmldoc-cd2.ps htmldoc-cd.pdf htmldoc-1.8.27/doc/a-license.html0100664000212600000240000000477310322727434015234 0ustar mikeuser

Appendix A - License Agreement

Introduction

HTMLDOC is distributed in both source code and binary (executable) forms. The source code is provided under the terms of the GNU General Public License ("GPL") with a license exception for the OpenSSL toolkit. A copy of the source code license can be found in the file COPYING.txt in the source code distribution.

The binaries are provided under a typical commercial software end-user license agreement which is more restrictive than the GNU GPL.

Source Code and the GNU GPL

For those not familiar with the GNU GPL, the license basically allows you to:

  • Use the HTMLDOC software and source code at no charge.
  • Distribute verbatim copies of the software in source form or as binaries you create.
  • Sell verbatim copies of the software for a media fee, or sell support for the software.
  • Distribute or sell your own modified version of HTMLDOC so long as the source code is made available under the GPL.

What this license does not allow you to do is make changes or add features to HTMLDOC and then sell a binary distribution without source code. You must provide source for any changes or additions to the software, and all code must be provided under the GPL.

Trademarks

Easy Software Products has trademarked the HTMLDOC name. You may use the name in any direct port or binary distribution of HTMLDOC. Please contact Easy Software Products for written permission to use the name in derivative products. Our intention is to protect the value of this trademark and ensure that any derivative product meets the same high-quality standards as the original.

Binary Distribution Rights

Easy Software Products also sells rights to the HTMLDOC source code under a binary distribution license for vendors that are unable to release source code for their additions and modifications to HTMLDOC under the GNU GPL. For information please contact us at the address shown above.

Binaries and Support

Easy Software Products sells commercial HTMLDOC binaries and support. You can find out more at the HTMLDOC commercial home page:

    http://www.easysw.com/htmldoc/

End-User License Agreement

htmldoc-1.8.27/doc/help.html0100664000212600000240000004702410322727434014320 0ustar mikeuser HTMLDOC On-Line Help

HTMLDOC On-Line Help


Contents

Loading and Saving Books

HTMLDOC stores the HTML files, settings, and options you have chosen in .BOOK files. The buttons on the bottom of the HTMLDOC window allow you manage these files and generate formatted documents.
Button Description
Help Displays this on-line help.
New Creates a new .BOOK file.
Open... Opens an existing .BOOK file.
Save Saves the current .BOOK file to disk.
Save As... Saves the current .BOOK file to disk using the name you specify.
Generate Generates the current .BOOK file into a HTML, PDF, or PostScript file.
Close Exits HTMLDOC.

Contents | Loading and Saving Books

The Input Tab

The input tab lists all of the HTML source files that are used to generate the document. You can also specify the type of document (book or web page) and the title and logo images.

Setting the Document Type

Normally HTMLDOC generates indexed documents from your structured HTML files. To convert a single unstructured document (or "web page") click on the Continuous or Web Page radio buttons. The Web Page type inserts page breaks between each file or URL, while the Continuous type does not.

Structured HTML files use heading elements (H1, H2, etc.) to delineate chapters and headings within a document.

Adding HTML Input Files

Click on the Add File(s)... button to add one or more HTML files to your .BOOK file.

Adding URLs

Click on the Add URL(s)... button to add one or more URLs to your .BOOK file.

Deleting HTML Input Files

Highlight the file(s) in the input file list and then click on the Delete button to remove one or more HTML files from your document . The files are removed from your document but are not deleted from disk.

Editing HTML Input Files

Hightlight the file(s) in the input file list and then click on the Edit... button to edit one or more HTML files in your document. By default this starts the nedit editor under UNIX and the Notepad editor under Windows.

The editor can be changed in the Options Tab.

Moving HTML Input Files

Highlight the file(s) in the input file list and then click on the Move Up or Move Down buttons to change the order of the input files.

Selecting a Logo Image

The logo image can be shown in the header or footer of pages in the PostScript and PDF output files. Click on the Browse button to select a logo image file using the file chooser.

Selecting a Title File or Image

The title file or image is used for the title page. Click on the Browse button to select a title file using the file chooser.

Contents | Loading and Saving Books

The Output Tab

The output tab specifies where your document will be generated, the output format, and some of the output options.

Selecting File or Directory Generation

HTMLDOC can generate a single HTML, PDF, or PostScript file, or a series of files to a directory when generating HTML or PostScript output.

Click on the File radio button to select single file output. Click on the Directory radio button to generate multiple files to a directory.

Selecting an Output File or Directory

The output file is the HTML, PostScript, or PDF file you wish to generate from your HTML files. Click on the Browse button to select an output file using the file chooser.

Selecting the Output Format

Click on the corresponding Output Type radio button to select an output format. You can select the PostScript language level in the PS Tab and the PDF version in the PDF Tab.

Selecting Grayscale Output

When generating PostScript or PDF files you can choose to convert all images to grayscale. This is necessary for many Level 1 printers that do not support color images and can reduce the size of output files considerably.

Click in the Grayscale check box to enable or disable grayscale output.

Title Page

The title page is the first page in your generated file. Click in the Title Page check box to turn the title page on or off.

JPEG Big Images

JPEG compression is a great way to reduce the size of large photographic or continuous-tone images. It is supported when generating PDF, PostScript Level 2, and PostScript Level 3 output. HTMLDOC uses JPEG compression when the output image cannot be reduced to 256 colors or less.

Click in the JPEG Big Images check box to enable or disable JPEG compression.

JPEG Quality

Drag the JPEG Quality slider to change the JPEG quality setting. The JPEG quality setting determines the relative quality of the compressed image. Since JPEG is a lossy compression algorithm, higher compression generally yields lower quality. Typically a quality of 75 or higher provides excellent image quality with a high amount of compression.

Compression

PDF 1.2, PDF 1.3, PDF 1.4, and Level 3 PostScript files can be compressed using Flate (a.k.a. ZIP) compression to substantially reduce the size of files. Drag the Compression slider to set the amount of compression to use.

Unlike JPEG, the Flate algorithm is lossless and will not cause any loss of visual quality at any level of compression.


Contents | Loading and Saving Books

The Page Tab

The page tab defines the page header, footer, size, and margins for PostScript and PDF output.

Page Size

The page size option is only available for PostScript and PDF output. HTMLDOC supports the following standard page size names:

  • A3 - 11.69x16.54in (297x420mm)
  • A4 - 8.27x11.69in (210x297mm)
  • Legal - 8.5x14in (216x356mm)
  • Letter - 8.5x11in (216x279mm)
  • Tabloid - 11x17in (279x432mm)
  • Universal - 8.27x11in (210x279mm)

Click on the Page Size arrow button to select a standard page size. You can specify a custom page size by double-clicking on the page size text and entering the page width and length separated by the letter "x". Append the letters "in" for inches, "mm" for millimeters, or "cm" for centimeters.

Note: This option does not set the page size on the printer. It only generates pages using the specified size. See the PS Tab to enable printer commands for PostScript printers.

2-Sided

Click in the 2-Sided check box to select double-sided (duplexed) output.

Note: This option does not select duplexing on the printer. It only generates pages with the left/right margins swapped on even numbered pages and forces all chapters (and the table-of-contents) to start on an odd-numbered page. See the PS Tab to enable printer commands for PostScript printers.

Landscape

Click in the Landscape check box to select landscape output.

Page Margins

The left, right, top, and bottom margins can be changed by clicking in the appropriate text field and entering a new margin. Append the letters "in" for inches, "mm" for millimeters, or "cm" for centimeters.

Header and Footer

Select the desired text from each of the option buttons to customize the header and footer for the document/body pages. The left option buttons set the text that is left-justified, the middle buttons set the text that is centered, and the right buttons set the text that is right-justified.

The left and right header and footer are swapped automatically when generating duplexed output.

Number Up

The Number Up chooser selects the number of document pages that will appear on each output page. Click on the chooser to select a different number of pages.


Contents | Loading and Saving Books

The Table-Of-Contents Tab

The table-of-contents tab defines the number of levels in the table-of-contents and the page header and footer that are used when generating PostScript and PDF files.

Customizing the Table of Contents

To change the number of header levels listed in the table of contents, or to turn off table-of-contents generation entirely, click on Table of Contents chooser and select the number of levels desired.

Numbering Table of Contents Headings

To number the headings in your document, click on the Numbered Headings toggle button.

Customizing the Header and Footer

To customize the header and footer for the table-of-contents pages, select the desired text from each of the option buttons. The leftmost option buttons set the text that is left-justified, while the middle buttons set the text that is centered and the right buttons set the text that is right-justified.

Title

Enter the desired title for the table-of-contents in the Title field.

Contents | Loading and Saving Books

The Colors Tab

The colors tab specifies the colors and background image that should be used for the document.

Body Color

The Body Color field specifies the default background color. It can be a standard HTML color name or a hexadecimal RGB color of the form #RRGGBB. Click on the Lookup... button to pick the color graphically.

Body Image

The Body Image field specifies the default background image. Click on the Browse... button to pick the background image using the file chooser.

Text Color

The Text Color field specifies the default text color. It can be a standard HTML color name or a hexadecimal RGB color of the form #RRGGBB. Click on the Lookup... button to pick the color graphically.

Link Color

The Link Color field specifies the default link color. It can be a standard HTML color name or a hexadecimal RGB color of the form #RRGGBB. Click on the Lookup... button to pick the color graphically.

Link Style

The Link Style chooser specifies the default link decoration.

Contents | Loading and Saving Books

The Fonts Tab

The fonts tab contains all of the document font options. The default options roughly correspond to those used by most browsers.

Base Font Size

Click on the left arrow buttons to decrease the font size and the right arrow buttons to increase the font size.

The font size value is in points (there are 72 points per inch).

Line Spacing

Click on the left arrow buttons to decrease the line spacing and the right arrow buttons to increase the line spacing.

Body Typeface

The body typeface is the font used for paragraphs and most other text in a document. Click on the Body Typeface option button to change the body typeface.

Heading Typeface

The heading typeface is the font used for headings. Click on the Heading Typeface option button to change the typeface used for headings.

Header/Footer Size

Click on the left arrow buttons to decrease the heading and footer font size and the right arrow buttons to increase the font size. The font size value is in points (there are 72 points per inch).

Header/Footer Font

The header/footer font is the font used for headers at the top of the page and footers at the bottom of the page. Click on the Header/Footer Font option button to change the header/footer font.

Character Set

Click on the Character Set option button to change the encoding of text in the document.

Options

The Embed Fonts check box controls whether or not fonts are embedded in PostScript and PDF output.


Contents | Loading and Saving Books

The PS Tab

The PS tab contains settings specific to PostScript output.

Language Level

Select the appropriate language level by clicking on the corresponding radio button. Level 1 output is the most portable, however most PostScript printers manufactured in the last 6 years support Level 2. Level 3 output supports Flate compression, however very few printers support Level 3 PostScript at this time.

Send Printer Commands

Click in the Send Printer Commands check box to enable to disable printer commands in the PostScript output files. Printer commands are not supported for PostScript Level 1 output.

Include Xerox Job Comments

The Include Xerox Job Comments check box controls whether or not the output files contain Xerox job comments. Click in the check box to enable or disable the job comments.

Job comments are available with all levels of PostScript output.


Contents | Loading and Saving Books

The PDF Tab

The PDF tab contains settings specific to PDF output.

PDF Version

The PDF Version radio buttons control what version of PDF is generated. PDF 1.3 is the most commonly supported version. Click on the corresponding radio button to set the version.

Page Mode

The Page Mode option button controls the initial viewing mode for the document. Click on the option button to set the page mode.

The Document page mode displays only the document pages. The Outline page mode displays the table-of-contents outline as well as the document pages. The Full-Screen page mode displays the document pages on the whole screen; this mode is used primarily for presentations.

Page Layout

The Page Layout option button controls the initial layout of document pages on the screen. Click on the option button to set the page layout.

The Single page layout displays a single page at a time. The One Column page layout displays a single column of pages at a time. The Two Column Left and Two Column Right page layouts display two columns of pages at a time; the first page is displayed in the left or right column as selected.

First Page

The First Page option button controls the initial page that is displayed. Click on the option button to choose the first page.

Page Effect

The Page Effect option button controls the page effect that is displayed in Full-Screen mode. Click on the option button to select a page effect.

Page Duration

The Page Duration slider controls the number of seconds that each page will be visible in Full-Screen mode. Drag the slider to adjust the number of seconds.

Effect Duration

The Effect Duration slider controls the number of seconds that the page effect will last when changing pages. Drag the slider to adjust the number of seconds.

Options

The Include Links check box controls whether or not hyperlinks are included in PDF output.


Contents | Loading and Saving Books

The Security Tab

The security tab allows you to enable PDF document encryption and security features.

Encryption

The Encryption buttons control whether or not encryption is performed on the PDF file. Encrypted documents can be password protected and also provide user permissions.

Permissions

The Permissions buttons control what operations are allowed by the PDF viewer.

Owner Password

The Owner Password field contains the document owner password, a string that is used by Adobe Acrobat to control who can change document permissions, etc.

If this field is left blank, a random 32-character password is generated so that no one can change the document using the Adobe tools.

User Password

The User Password field contains the document user password, a string that is used by Adobe Acrobat to restrict viewing permissions on the file.

If this field is left blank, any user may view the document without entering a password.


Contents | Loading and Saving Books

The Options Tab

The options tab contains the current HTML editor and allows you to save the current settings as defaults.

HTML Editor

Type in the program name in the HTML Editor field or click on the Browse... button to change the HTML editor that is used. The "%s" is required and is replaced by the file to edit.

NOTE: To use Netscape Communicator as your HTML editor you need to add the "-edit" option before the "%s".

Browser Width

Drag the Browser Width slider to specify the width of the browser in pixels that is used to scale images and other pixel measurements to the printable page width. You can adjust this value to more closely match the formatting on the screen.

The default browser width is 680 pixels which corresponds roughly to a 96 DPI display. The browser width is only used when generating PostScript or PDF files.

Search Path

Enter a list of directories in the Search Path field to specify a search path for files that are loaded by HTMLDOC. This is usually used to get images that use absolute server paths to load.

Directories are separated by the semicolon (;) so that drive letters and URLs can be specified.

HTTP Proxy URL

Enter the URL for the HTTP proxy in the HTTP proxy URL field to specify a proxy host for all HTTP requests.

Tooltips

Check the Tooltips button to enable tooltips on GUI controls.

Modern Look

Check the Modern Look button to enable GUI controls with a modern appearance.

Strict HTML

Check the Strict HTML button to enable strict HTML conformance checking in HTMLDOC.

Save Options and Defaults

Click on the Save Options and Defaults button to save the current HTML editor, page, table-of-contents, color, font, PDF, and PostScript options. Default options are used for new documents and when generating documents from the command-line. htmldoc-1.8.27/doc/htmldoc-fig21.xcf.gz0100664000212600000240000010162510142763627016165 0ustar mikeuser‹Ü| |TEÖoUuwÒéξwBÈž„$H!¬Š  è¨ Û°ï›À™ù>×Ät@GÑ(F F ‘$#†@[X²wß®wν·÷%aÞøßK¬®[UçªêTÕ9ÿºœ5{þ¢˜UÓfƬÈÌÌ"„0JÝB¤x&|!]¿~>KJJY?o½õVEEÅ„ Ξ=ûÑGmݺ› ~ ¡AÔö‚ ~‚!)!…C •ŸQ.²xÈýgÁ`ÒgÏŸ:kFú¬%³§ËC êä¥ËVÏ›3{Á²K–Θ¶löÂKS4É3gM[8oá’˜d1K_2ë÷Sc232Å'YòC @ïše/èø€ÐUKM6{Á¬˜,“f¨\í¬R®K_¾`ö2ü´?ÌÀQ¯Z8sæÒËb¬ÑŽUR-”X~è÷„DL$dÀLÂboYê͡võºdÉ•K±ÞC67Ç%±2½—üŒ?«g­Õ³·Õ³Õ³Ÿ¬ËôãiÕfZj¥¥™-²"´1ذí" ±mW¼i7¤Ï tÒEHí…~•°”12! 4Òc0UЧm„M »Ö7R"¤þî€4 ÒLH+`·Áþ >»l{6¼$À†…t¤©CÚi¤W!½ 1ßB: ú ï D:t:H C:t C:t C:t C:toC:С:С:Ð:"@GD Z¡Èÿ¿› åßÿk]ŠN"ð"2ˆ0n,"ùDÉó‰ŠçãA®À¬È!“dì41«¬²Da—@)µÊŠ,öo› 9'‰¡È!#>#ç¶³X¤ýÿvLUÀ4:çé…3ý y¬Àc1É%}A/ø‚OžŒž‚BÈ#´ Zô Þù´àƒ°S/P-AÐr'Hˆ")ˆÆ‡PHÝ&=ô*€`JåRög1Ó/G `”ñR1áP ’„<ôTµô*Ô +Adïbi¡”•*ÓôbÎÅL-UÒMòI¼dåz°() ×ÍY,‘ñ Ì׳þDYÑ`[6Ñrá`!É$>XÛ‡øa–N¸±ô&bc ÆÚdÊ“I¶$‘ ¬I(¥,¥!¸À¾˜e@ɬÎkÒ@«¨ù hV¢f®‘à ®/$ä {ãÈ KÔ/ðBpEFY2 7†÷•Z³º¬ BÑA®‚®Š Þ‰2þ¸ã´8õ@IÚ¥Åû›q @! ¥ÁLœ²¿„òDYÑ~f” ç’¼faVò ”Òa³,ÌPBÇ1ó’*"y´6 ì>‚ùî'†Å{öÀnÑçr^‡{mqç{H?bÈݳN£q"<'¹ø´xÝc< 'J# ܰ üeoØ‚þòC ôtÀf*ûžhï>ïƒ LOCÛ³ZØz °G;õÂåÉ Ø(²¤Xi8GaÏP¡]¬Ó‹uzPÒꌎÓ3ÁÐ±Ñ ßC0b;Åš)`ñ)vƒª˜^‰œm)¤” eàHx¾pØqØ EðW!ö?vŸTfتGeF,ø hózJ*áT<èUI}Éš© €X*aâd[°udÚGê‚J'Ò„™iÂEll˜´À¥Iwˆ“/‚J t+‰€1ÊZšO)Pµ4d•ŒXUòpŒGM’ïM˜¾S8•@Ë͵§p¸T GDÂÁ´Øo*1?ÆãŽ™ÆG)èñà€°’èÙQc‚8á–žÖÃŠê§ f«&B»Àp(’M%Dg¸\T¢³0NƒFyЮǹ*DéÒ¬ÊYS|Y¸\¼&G…ç-F£€Ùˆò#BÀ‹°Õ…àèI]‹öƒ<N¡ÀVr.¬dpdZÅa Òª¡n 4Gá” G5Ð|3\^4Ü¢E@“ßz8®B½/4¶O“E %ÂITgàì gT0=+¤m†já˜îÃS¼ÏJ©¸dEDEŒƒð‚&aš8ÑV0qxú³ØvÛ`¨T4 îÐ ;G<Ø7å¥Â±¼¤Äúw¡>ˆtN¤á u}páuíkÎ1<@!>õC¯à‰O}ñIôÙø¤‘œžÅ‰=7zp¨M59pFg£?LŠ!¢œô‚åBÉi©‰‘‰àjqTáD‡ OKÄÅẉ¸Bq ¼U ¹èzú‘f)êJ¨/†^¥h1pBÙä†Í®(‹´‹‘XNˆè‘úÈAÙÎ/¥Ã"±Ünçz“bÌ;•Jô)’œ­£J–C:ìp[Æ¢`½ç¹.°^HñßÑ‹5ßk-Ý‚ƒ;ƒÊZÿÏèÄ\96Ï_Ú¥ Ü*\q¥ˆ‚q2ÜREnSÜrI(<ˆFÀB¬³,b[œðâ¤@oñ5ÍÑ4Ñh“Í18Õ¡ÓÍÁ;Ë*²i7A,Òoáü0†ÊÜoœap„ý˜ ÑÐ…OE©߃ÔQNn]Œ6ß"ñv1)òñ–-#ù8»p¢Á:!’uÂåÓ æI î <чˆöa©hŸA’EÒ¥,DʘhÑ7ÄI®#Îâ_âÌ^(Þ쪬Z¢•ëK¶ò‘©Vî4ÝÊñfÙúh´œtÀť𒠡’ °O2—Erèc*q‘ÝùZÊÜO,è$ïãƒÞ$c!²­ƒðÌ}ÐE˜ý’´–27JB%J3'L–îZ˜(ÝŒÖÔ0Q¼xÞ&AüÖ‹4.ÛD¯Mg¨¿ùðäI§&_<.Ež£ÌN€-î. ž¶Ü$m:ZI .Ñ h6dˆ>ÞÏxËÍpÕ`²#43“f=3¹+Žã+©ï%ŽlÇWôX:ñº"xÉÄÇÝ\Ñ¿cfLVÈ]di[(»y+"äîpcÍ>φÁê§éN8Qà*ä‚%‘¸ 9£F‰¤îLì(Q¼CyþÊ)ËŽe;¡,Gò“eOx²HN–±É²§3Ùö$&Ë‘¹dÙS–l[®’cãýú[Ü^žìïòEG'îlå÷V:Ëì¶ÓÍ®<ÕìÞ“Í.ß ($˜CD¬3 ¾—D ®‰â½PG$êèùyбV=˜zýO+E)òÞ%ÞÕ&"ÁÛÎN¨‹B§±‡Ã%½ Òbðpú-'Ö¡§›ˆ;¥%Æ(©&KŠYJ)‚Á˜¸gϤ™¥ˆ—K:£ê0&æBguRÝÔ+Ê÷'B.^…º\\Ê-X»k£ÄÚùâ³[Œ¯J°¨ÀK²1ÂzᘋTïË—Îïm£L–UJ· L©V+Ù*%Z¸sØ‹7‡ÂX9> g).†Lp.½¤ >(ƒ*,(Ã¥ Á§|Jǧt|„OƒlŸ,­„¬%Ƭٺ7Ëbå ;æ×¢zÿµÿ¿C1俚¼å_é{rX~«¿Ò4ùy¤,ùù3HKdaïK.J¿ïS§/\iýeDÑþËÚò1.¾Œ²|!ØÚ#u„ ¸ ÒÛ¶ÈBâß!$凗ô`Í%ÊJ¦4({“*Tž^—§ +2ITxùúy«=°.ƒ\c*/¿Ð¨^±½z„x«U JÒÈeªðô IÍîß/3%&\®O%TéУwþãï3¤_JÏ0§Ô$“ªÔÇõ3eÆìß=´oR_/±‹Dr©´aIç=ñôSk<2~pf|d¨2Ô3•wxê°GV¿ôú›¯nY;oʘüôXèÑ›ãH…æÞ#§=ùúÞ|üÁ/<>kÒÈ©=Cý4Øq/r–*µa©#gl|ïóÃß~}àƒ×6/Ÿvï0«þ{’Ÿal¡)çoÚõÏNþXñͧ»þôÔâG­‡M~‚™' ™úÌ®øåÜÙSÇígÛºySî„ÑèäùG‘ªPÅünÃ{‡Nž¿|¹á—~õáŸ_xü“îÀAùKƒŠ §A. WÞƒkß.9ÙÐtóúÕ†Ÿ«¿ýB[NR`_/T‚ÌÓ¯gÿûW½þ剆ë--Íׯœ?süð§»þXÐ'N*APGN1ߨì K_9PyáFk{{ë­¦KçNÃ(ßݶn$GjQ2œœd*Ÿˆ>ãþñ?Ô_oíèìho½yí"ŽtïÏ­˜:>?5*ÀKà #'Ѹi£çnÝW^×ÔÚ¡×wv´µÜ¸z¡¶ªô³ÛÖLŸ›îã©@Ñ¢ GÎ|~ïwg¯(ðªÎËí­Í×/;ùÝç;_ZñððŒj¥,ë’4ô÷›ö©½ÚÒìö²¨øÒ/ÕßüýÕ¢ic²c½dIÉžOîüúÌåæ½R¥³£õÖ•s'¾ù蕵¿ÕS¼n6è?O5Þjï(yãÒÏÇŠÿòÂ’É…½#üÔâôoÈ}ãËoÊ‚í-×êOüëoÛW?6ºolˆÖƒI‚&‹V]¸Ñ†‚W;Ûn]ª=úÉŽ¢ã$„ûâltäº=aêÐuÛ†“ÿÚýü‚{&Gø‹æÔÁl¬ÌÙÒÞA;® õ¯Ÿ¯úòí ¿•¨Q‰ÛC4f*³ìç+7[Zi+k»ÞÒro=: ¦‚6„ó+Ùqãû‡k®5Ѧ+×oÜj¾ÕtáÇþå™é£2¢Ä)G’3²׿[Ruöüùúsõ —›n45žùöí‹î Ý‚XdÃÉ«w|ZVõã‰Êã•'¾påÚåºãÅom˜:2=Rî¶,sÏâmýuÉŠ¿.?]éò…šo?Ú¾lÒÀÄPoq5ÌÃ'²Ï˜YOïxïïýùõ·öøödý¥Æºê’›gë‹‹ÌÄÃÇ?eÈCË6mÛ¾åéµk6¼øö?ÊNŸ¿ÔP[þÙëëž&u {æÛÜÔ…+–ÍŸþ»‡§-ÙôÖòÚ†Æó§K?|yéDS×á ©ðô‹ì=hܤ)“ï¾cÈÑ,xî/+¹ØXWeݹa”2#^†N ŽI0¸p`NzJjÖÐÉK·ýíð©úF»ahH:Q•§Z ¨“T©ö ‰NHIIˆ‰ ×õê3ü‘'^ûÇ÷?9ŒÉƒPÚªPz¨µ>~"’©Ô>¡áá!¾>¾!1ÙwÎÚøÞWŽcT‘[”)=5¾a‘=cã¡|R,{ûxkÔžžÞ¡ñy÷-Þú·Ã'ű~úúZóXèâ=¼|ƒ#cS2ûçÀ(ô0x•õ(W) ¥§oDï¡¿[#ø”4âiÄ{ñŠŒÏÈ>îþ)@Ô¢TÁô8'ß3 †û.÷â/Uÿb.˜,“ž?zÒ´+×=IÈq˜ª6Då7v£T2÷ OÈ1iÖÊ/ïxg' $•°|¦‘ýéBcý©Ò½¦‘)Uj?]RîØÇ–o~u×þâC‡!rVQyDÏØHëé垘w×̵Üõé×åÕ§‚€[í8œkÖ;ÒßÛ74¾ÿøY^ûèPÅ麆ËWQÚa0‡ÿ¶uѽ¹ñaA¡1Yc¦¯ß±¿ôǺKM·ZZI9aŠ´–Ï/†³=2#&":mèÿ²ïÛÓ®5·› ¡äGëœk@Í/.˜0 969÷ž…/ýõ›S®ƒ{4ÈÖ˜‡ñê'ß®«;ýí¾?-Ÿ<8#5{äÔ oYUßÔÚi€‹v¸ªp3Ÿyç‹ò“§«¾ùpûò†dg¼gáÖ¾ûùJK‡îÀ:R+õ~ï¢-»Š=üÙ»Ïο· oΰ‡Ö¼Q\}áf»^0*Œ:ˆŽÐ±.uÈC+¶íÜÿéßß}iå#£dö5í™]ßœ¹ÒÒ)•Æ ³^Ñ™w<ºòùWvüióòÇÆæe¤õ;û…½ßýÒÔ¦G¡HR‡g,6gôï¬^³b΃£¤Æ'匛¿mÿ±úí£ EY„Å猸wÊC“Æf%ôˆŒÍ¿`û'?œ¿Ùa-F.è»°ØŒÜÁƒó³“{†…DgŽC¡ (¤0RÞˆͨ¸Ä¤øè°oÿÈŒ1s·bW&=Q ö¸Ö?(44ÈßÛËSíž:rÖóâ 8ähRçE­Ñj½ÔpbTšÄ!=m™¸ ÉRïü’, ¡ ÊpA¶Ô„©;ƒ´›˜zÒn"ã}H‘÷zsŠ1ÅŠ+à™Bìûq¾ 7Û |c!žPrâ†È?ß½ÌØ›4¡oNúèz«à߃…: ¦ß‘>4˜èCor…yx‡§ ±e P 4 :k´ ‹I#W‘Ä™˜PMÝE`BP‹ØÔÝ3×™ÙT: OiÏÈ2`p¶¬nÖIÔ°—…ö#eG2³ì)k¶ýík!ÒþA°U(mz Ï…C:_¤.´1´ œ†¡ÃÖixCôws/ó_ -WÑ?-0ù' äò–dq„_Y¡/ÄE×7&.×—T¸¹>Yœû~ɹûx012º¾I9 "b0uy§ºvõòE‡håG~ps¹²ŠŠwCTôÅí@*]ß­œ„Þ@äó®nU»wat_eÝ‘þ»¼JÉüaÌÀô^2ŠîêúäÀOBÍ÷¥³÷%;ö£“oGçmnG ñÖ„*ž\°¹ ø›©Y"lt«›†šªÛ==Þá߆ݴºá(ÐYPšAZ,ºÀY¶XÐp*ZÍ÷ÒŸ´™ñÙ$FvYÿ*TÁ'‰ïã_Û‰œÿ ×stâ_]*ÕøW—L‰Ÿ”‘ôÚEʃ¤HsÝœÚM¯ÀW›_€¯¶¼#çi¹ç‚㶺f§‘fëësoÒìxog"Aö'·ì.èò]a&È>ä¦ãuü’ù:nC‘5ä¦ý¼ÙÚÙ‘d/rÃáÖ]oãÂì6Ššëêªí°a¸+Üß³™²Š”wu×väÊ*ò}Wn'GVIŽvuïvÆ—älWpê”23ò]Wwq§þŽ‘³]]Ë©þªâÌÈ/]ÜÑNÝ8%çÜÞ×=gJêÝ]ݽ„ã´™¸»Ä{+3qs׫ìÙ2qs±×«í©2qwǧ\eÔ—ù1@Y f!,”†±ð›U(£Ñ†‡xQÆ­ðeIØg ׿ÈÕŸp#7Ôin1—$Œß‹<<æjÜÔ^½ ¶½üÖÁËŽmK¼kµøLÞ\ÉYÁ¥þíñI“†>?,9£ðÃcx#×R-åmâ|ýü¸¯r…ÖF¤­Ü™5aà w0Ú×—h4¨ FóÇî]i ûYÿo}Uú—;CCB’É€ Ñ€2^Á Á²ù.˜Í§ÊŠ˜4búÖï==>3ºg//\;7[¥QBy†~îïîµlà ¼¼Àî¡Àßëúæ-x{Ã伌¤˜þ¡ÝD©}"RÒbRââsR’bs‚»@髺>»ÒIÇC^—_'jókÅÜTnÌo´)w»Ý».~¿ªŽí•¤´Æý§âNw6²FãÞ*&õ©©;ýù÷¤²ë_ZÙ¹³®î“#å´\êESkü¼4¶´”–ýä;$õª©>/­Œ«ì(EùC&ùFM£¹¾±ÑRïJô›ëQ}Wò²~Vi$•áø¡pÑ“„“>Ye'©ÄIý£Rs— p§p1&'ÚÊô 519wèÑÒkT7  ÐÒ$•†Tk¨àFü0ðŠŠø x–@YK¦),•öfi,f°>4“e±lÚ÷fJÅF‡„è|{Çkº¿,‰oã=¾Ï}Î#s8¯èuIB…oç±ÿÅ'ÎàoiæÛãY÷`QÛy¿ÍÇùCëùœùßò]ÂÚ$Xô‹È¯á†ÅóŸâi<ð‡!‘'Q+¤1£’}1Ïó¢ ó¡øóë/,ã†;hK:çœ÷ÉÌÌ¢ÖèèçøÚ9{øÄÿá_V~Ó¤ñÀ œ„±.D*çiœ›áP h.£uÛùöðu5¼Iox- ÐO@‘Äyr2ç)œ›ðâÈ9Í¢üB6ç}%|ìÿ>5fòÆ}ýäðÉï¾ÝàxOH@‘„ .uÏyVçüèu÷>¸qϤ¡ãïüjçì)¡€7òš@¹@aúž¼ÊØ7ãÑ7¾½â‡úMw¦D‡¦ÆÇ#¶&/cBç½{Ã\iT=æþï~¹üÍ´”^q1É’É| Þ’bÁãì&ã5Jhå€^;f®*>Z³oÕ#÷N‡³w¿Wdœ‡.8yêÑ=O¬øÃö'ß=!¢»8æáŸ8â¾µ»×>u_avü]1ÝÆ©ý3‡eÊpW^Nú¸è.qúŠîféðã¹G€Óù§ÅÜT®Ï¯·)w»Ý»6~¯ª–í–¤´õƽÕqÕÆ7ëY½qw“úÔÔžþø[r¬ë_z¬óÍÚÚÿUFˤ^4§Š=ÔNzóôé‹Y±Ô+¸Ö‹;Öqå‹Mòõšzs}}½¥Þ•<è7×£ú®äeý옑 Ç…‹žì$œôÉŽu’c8iTÇ9y©DÂŘdœh+Óƒ^ÔÄäÜ¡Gó¨måìs×séÎé »s:ÃÛìÏa~v†¡Ç€H¸_-$®…â‰cX¢ÒR8™ ê r1 K£“¡Zµ]ZÓ× Ô¼¹[%ÌZ¯ZÃînÅÝÞ¬ðÏåiõiÎZ†¬M]kü°¸tÀêÕõ(´4I¥!G€HáG ŽñÃÀ™<‡ÍeóØ|Ŷ-b‹KØR¶Œ-g+nÁö9=uÁÁÞÏѺ¼, yˆÊzŸûïFòðä¥KùK’|Øv=¶”ϙͯy6óŸæ(ºDnçi«ói›ø¼¨Mü„@›è¹©Â˜ø¬žs :‡r6×ÀçÍ›Oe]¬äv½Änå>ó9¿g3ß±|8/„w{„ç%l‘ñ[ùìUç÷¿Ë?ÂW €‚0€HAXÈù"Îs¾d çK—bõò†œËð?òGØË?̯ ;f\às!Ìã|þ|ÎpnR1r)t¿ ÂrÎWHøä9Oßóè“»ÿüñ‘“ßÿÓC€7ð9s‘!ÌC†`—úç|Ù2Î-øìYS¦>µsò€¾…—‹×„¾ðs9û_@xòJWXŸôY¯—Œß}í¦–$†Íœ3 tn‡Œe0ûò…Ø·+a¡«ïšwéÒ­ïÌ:jðc²4;Îð2^ 5Ë/˜ §Ê‰iÞºÒ“ _Ì|è±Gõ™Ã\nŒF áÔ{VåëKW,(šòð¤)‘]#˜‡oÂ÷?±ù¹'&ŽÎM{ ®k„B퓜;¬ïˆ÷ +èÿ@¬„þˆû“(Y<®ÕùÕ¢ðñüãbn*×äר”»Ýî]ÿŽªší¤´5ÆwÊãÊ/×°ãŽ#LêSS}zO )íú—–v¾\]ýîZ"õ¢9nÜs ö@;9pàåãÇßÝÇöI½jª…=JãJ; ü>“|¦Æ\_Sc©w%úÍõ¨¾+yY?+5’ÒpüP¸èÉNÂIŸ¬´“”â¤!¾” ròRâ¿‹1É8ÑV¦½¨‰É¹CæQÛÊÙç®çÒ œÓvçt†·ÙŸÃüì CK!þ»_-$®…¢â)–¨´N&èƒ:ƒ\ÌÂÒèd¨–Æ_m—VŸ‹;'T¿¼C%Ìj¯jÃŽ=çnÄÝν|ÄC<—ÇÕÇ8k²6uµñÝ}}¤V£®@¡¥I*ù^XUÈ‹Èú*¦c4’E±,šõ¤1¬‹eqx_a曃›Mgpù-IwFpE£hˆvšu‚Ðjà6ª£œ¡çÑ΀-x…«8^Féí‚i\„¹1%ÕÒ±±„ï:Êyç=¢£ñÿA™Å*¸!nðÀÄn)ï”.Á0ôtcԡ㱕±¼gOÎ{õâ<–ó¸8Î8OLäÜjØp…–_à¸é(ÊOu®äÍŽà»Ý7…yS~ØŒ¿íÁK „ ´Üy³åÐæÖ b¡U6Þ-+|o( éh:ÓžrºZî6¡³=õÛ>p ë k!5Zçé{UuÚ½éUÆ·¥ï4Uåo‹où5å‡ôoã+Mí¡ôòŽCo‹o1sñI|/šk['¾û´Ôù”+‰¶ÜHÊðCaF±rQHUðáe+!"™TÔ“òrR®’sV.rˆ—xF_2¦:fîÞTÊi9âlëºìÕ5Z 6XyNÿVîW%ͦû8ËT=nh™¨§y¨ô¡Óô`m/j¿xPTÃÊ*Ë!n–£5-‰ÂªŠÙöÖ?‚ÌC5EK±ÛJS^¸vryá!Nå…bª`9´ëÏÐ\–GóÙ@6ˆ°Á¬aCé06œ #ÙtÍÆÐ;ÙXã¸úÛ…töã¼ÿP”òòóR`ç0·AG@0céXˆh{.çyŽÐëå|ç#ïà|Ô¨Ñô6À-R¿"غcoΡœ ÍSrã ˆS†‚Áƒ1J 1Åè%ö ÑKìëÇï„ú›9œ#Àë@Hƒ(¯Ìya!çC8j;pÎGæ| çcÇr.*€4&a…¾à ÑË=¶ÎmÏc蛹{·4(øy³åD›s>p çƒqnmº[ÖK†±k δé]¬V—;ÒéÞúì´T ®€XvR½už¾[U«Ý^a|UzA­©È(ë|U|å¬)Ë(Ö¿Šï×´ÅéeŝНÔrñI|I—k['¾ˆ³Ôù”AT+3’²üP˜Q¬ ¢šT^¶"’IE=)+#e*9ge)èÏè6QÆTÇÌÝ»€J9-Cœm]—½š FKÁ+ÏéßÂÊýª¤Ùtg™ªÇí-õ4¯•> €™¬íEíŠjXYe„°2£¦%QXU1ÛÞzàGyè±æ¢(b)vc[iÊ wC,++,†hVVxDŒjGŒ+VÒ•l[ÍW¬aO°µl¢ˆ­gØ“Š§ØÓì¶‘mRlfÏÒç~¢p­Yµš‚4ø6yú$¸×§èÓŒŸÙHM n ¢b [Oqþ4çÏ<ÃùÆ›h·qì)¨y„ ŽˆöU«9œó5t Ĩµ£Öá?Ì3¬ß°c”ØÄ(±?Œ ›•üæ ÎWr¾ŠóÕf÷å?¬]Çyü·žó œ?ù$çVƒå|Ó&Î7sþ쳜‹ À›¯6X+¨s¯b”[xm—ýo¦›AìåbÝÖ ¯Q4*XÃùOp.­¬g³Xø6ŒgÞBŽëäv¿Ùï ßà–‡cZ]xRuž¾CU­Ý‘~Äø‚ônTs$£¤óñm§¦$cŸþ|µ£Ý—^Ò±ïñmN.>‰ï‡rmëÄw@–:Ÿ=%FR€ 3Š•@葪àÃËVBD2©¨'%%¤D%ç¬D %zà}ʘ꘹{P)§%ˆ³­ë²WÔh)Ø`å9ý[X¹_•4›îã,Sõ¸= e¢žæ ÒDÓƒµ½¨ýâAQ +«,8S‚bÔ´$ «*fÛ[ü2=Ö\E,Ånl+MIáØÉ%…û 䨾ùËdY4›õe9¬VÆ€•±|¤‹ X-dÀÊØ0 ¬Œ+ûíH29Ï¢· ™â_јäÅË€1p§ÈÅ hÄ  óCd:N‡ÓJ¼z9Áµå"‰Z±ePA7C›‡r> oÈäéHèâŽLÔ`ÈÊÎîKª€pY€îUR`@t \kðà-fô €vÀMÂ=Zhì*§•GpÙ¢n"]ëp˜C«E›ÿö®=ºª*½ß½Ï9÷Þ$R;Ú4¸–‚àÎr-– Õµ:ꨠ*>ÁǪ)Eg­)švÌ´Œ_¦ŠbD ßåšÎŒñ¶½MmèC¦Lq*¾`Æ’œÝïÛïsÎ>7÷Ò0BWœçþ~ß~fŸs~ûû¾Kª©Cy ‰fÜÿ's±ÃÇćó‘R-Óã?°Žœ¿ 7ù7¥+Ø9½kŠ&ÿ¦ LUäß´ÒTIþMïR5ùw†ÅeÛ½’ß”¼ö©:=(…í%wî¨Ø´—ÎC"i”óO^Æ×Ê-”‚ Ã(¹'‰/¾‹äÕÆ˜1àNrP©z~Æ+£>+h´h¹J«¤ä$»XÅM=ÜMLdóÆšÙdÈ«G•µºì'ëljµü)€>¦ÂQ1ÍÉÝ…gŸCΡç’ïÒóÈùôº,¢Ò‹ÈÅt1YB—ÒKÈ¥ô2²Œ^N¯ WÒ«ÈÕôš#rðlÆÎ9—T‰9‡1 CØÐÂE‹»È/flÉR²tß%Œ]ÊØe—-[†_)W\yåU89°¿Ø‹.bìâÅ‹qýh)e¿TXvùŒ]y%cW]}5cל}ÂÏýîwÏ#n8<–²(¤áá飡K÷ «ØiPÌãü äý~4ï%K[Z]ö=q<4\%%(«àWQÑÖ‹µ½ ãáÁS¾ã×à:bÿR¾íäí¦t;¦wNѼݴþ©Š·›Vœ*y»é=SªæíΰȞl›WôÛ‚¢×6U§Ű­èãÎû‘¶"2qÈrêfJ­<ÐÒAñ â1Œòr’³â»HNXmŒÔ2^à$ åªG¤2곂‹æ‘«´@JA‚l‹UÜÔÃÝÄD6o¬™Mvì°zTY«Ë~²Î¦VËŸèc*ÓÜ´ÛÝm¤Í[Cï¡íô^ï>z?}€þ˜>è­¥чé#Þ£ô1ÚA÷Ö®ÿ:%‡×ßÍXÛZ™hcZÞzï;x?cÀfäAÆÖ’µä!Âfì‘G}—:ÂÇá0´. A yÞÇüàƒð|!kÇàð‘³Çc¬£ƒ±Ç×­c 𨀤*€Ù-ìö8yŒ°ß¤à³Œpˆúê!ÆÆŠððí÷’hæŸrk{¨ŽÂäxʮ§âw¥¶]ZÛÛèða|¼”éµqD_ïh×÷ÍwòmS:‚mÓ;¦h¾mZßTÅ·M+L•|Ûôî)UómgX$M¶Õ+ø­AÁkªÓƒBØZðqçᎊÝHk4änF9ås™Vhé pñFù4É5ñ]$§¬6FF/pƒrHÕ#ˆ€GFõYÁ\EóÈUZ %‡ A’Å*nêánb"›7ÖÌ&»@vX=ª¬Õe?YgS«åOô1ŽŠiétÙY¸–Nÿ”~‡œMámˆê·!ºˆÀÛ…·!º„ÀÛ…·¡£U:ÄõgâÃßaìl|ï#çÂ̈ðœh."€a]t1¹8\ŒÂ þY|á²b˜Õ—ç2ïÿì¼óÎ?Ÿ± 2Øá ™ÀÂĶx Yâ@ëœg)€/ˆ¡”C™5 p©ï«bã‹û~|qe¼g)c—È—Æð_Ûy_ÀØÂ…‹Ø¢êTüÆVÈÂp<‘Ã15ìàB*`Œ7 ‹·ßW–ÕuðˆàèsqQé<<²µ ²Û°å ñ²³È3ú§´›"ó»‚s`ó5I¦måJ¾"Ë”É\¯/9³æÞaA~¦ÈXÐsªÙú,UŽk™­ÏÊëóKž°¹;Þ¡ØÓìM í¥˜ýœ/h%O˜¥‰“¡L)#L»|GYŒI- rþŠSYÃxÔfZ.fR–ÄZÜ\ÖQ™²($}G3–eå}!Û^Š™°ùºDiÈdÕL‹“rõ#QâÎTÒçÌ\¤ÂôÚU:HÆeÐuÍwYá-'+èµä:z=½pr½™ÜB¿Gÿ] È*z+½ðÅ`\ W/'ÿ_ £«—㤠r=¼ªs ¼–ßt3‡^`+É_Œ°U«n%·†·¡¨­flùŠ×"4¼ž ,ù38ÞH½y¯r†Z¹ý ÂÛ¾/Lâ TÞ%ÀQ5Z£=6úƒ¿Ä(,q°UpáÀ6¸’™¼?C4 ccd>‚E lå¡jÀñ  +C¡Ñ´ÂÉÊaS€=1ªç ù)º +ÞðM\ÏX/ûÎcÃ?àÐ#s4þ¾ )æw~g°cl¾&ò´)^ÑW„ž²Èëñ%¯×Ü3,Ãf=c­5[Ÿ¥Êq-³õYy}~Ñ&}Ç;{šaª"ƒ"¡­3Ïóõå «7q2”)f„å˜ï(‹±X£ÅAαqºmÚ€-BÆ,Ö’X‹?Ì:*S…$§ïhƲ ¬¼/dÛŠ1 9_—( ™¬šiqR®~$J.šJúœ=ŒôC˜^»Jɸ ºÎù¶‘¬§?¡GŸðž¤èSôio#}†vÒg½Mô9ú<}vy›é‹ô¥‘îõëBŽÑÑîõ8K‚äÁ'{riøÚi¸ Ò#ì¹çž'χ/€”RΘT‘ˆ OÁlþ4lÉ3°ï„çÀ³›È&8…¬àâ….Ò•Àªì  ¼g7mb(Ù Ï¿_BÖ,‚TŠɳƒ›Ø&& +q¿ÝÌØæ{‰±òÙŽt2ö,h`›UÈw‚xò…þ„£70öcO?ÍØFÆža¬Ñ4Úb_YpÕG°ßBPqhk>ƒß ¦©y'ak ¾ÈAGÍ ¬B4ìN!ýŽ`ÛØ|M/jþ‚¯hFeß×íK¶±¹{XÐF†c3æ~Æök¶>K•ãZfë³òúü‚' w(ö4ïU#DEBk!fìç BÎ6tâd(SÈ;4ßQcÿF ƒœùã$à0µ9\„Ќٿ%±«™uT¦, ©WßÑŒeAYy_ȶböv¾.Q2Y5Óâ¤\ýH”ò4•ô9§é‡0½v•’qtóS8P±ÆKå/]NWk)Ÿ¤ðROo¤ú}’âçЪeË.'Gž'7ßrË÷H%˜aþ5q#©–’ÕÁUŒ]޲+`޾ O® —çÊ×2v»?`†Õ÷ ‰£w­B†ËC3†«ãV øýÄØµhfx=c7Sb†0ˆ¥à3§ø@Âܯ³á¸ ’–;Yaã÷˜ï·ñVð©K~ü ¸ÕzÉâ!cï÷ W ÌwÒ¢3»‚“»fjR´~ I‘¡õ¥&É‚NîYµåà±¥læ´‰™òn÷J¤Ý´eÄüŒ 7aç ~y²Qî’J¸åµ8ˤ¼dï4WiùÐÆ8Ë6PNÈïÛ¬MoJ <¢ªuÁh„ÕÃ*פʺ\¦N“*6µÈJãÀqÐ’1\NÑ‘Ò(’˜†6Ùä Ê3Ëš‡– õnƒÁÕ·“Û‰tõ¡?¤w¢—ùÊ2h›Xn'÷Òû_M&ÒµG7dð^Æî»ïþû • H¼Ä¯¹‡T LÍôÝŽÏšxèü5šÞé±?âîMwÝ…s&Z ™Åö8ôãÕŒÝ~cèaôWŒýPz¡sÈﻋ±»…‘”w_;cqüç.¼Ïö`æk¡qcw§äM~ôQ ÎØ=޼ÿ¯øÏø;± mµœ£ðGÐðû: nóÀ™ÁŽÉ35«XßߤØÄúb“¤'÷̬Ú<ðØ"Ëäá4CäKyÉ<(5½Æ‘²QŸ5hú¡QŸ5¤ÉqJ¢QŸ¹äò%ÚîG܉ wÙŒm æg¤¦3✉Ŗ d5(áN¥å£Éuî,"Òv2÷øtƲó•Ç«oUîÑvG»dYN.YlBœ§Õ9()êjSôl4²]>^1ÙU¶Ð(ÇÎÊUØùã?˜\œáî„»CÇé:a5@ž O¾²É׋;).÷âbï ¤k1˜@Œ'ÂÍIå:ƒ3`«éÌi^ªQŸåû󊡚¡Nòż¤ªN”Çšã^Ù¨Ï4_ѨÏÒä8‡Ñ¨Ï\rù"mó#ëDÔºlƶ¾ò3Ò3ÓBÎWËG²” Y§ÌÀòÑä:wi;™û:ƒÓùÊÖ·*‚ôh›#$]2ƒ,—¬@6!ÎÓê ”uµ)z6ª.¯˜ì*[‰Œ0h”cgå*ìüñL.’Œþœ¾Gû¼÷¡åÿþ£÷Oð¢ðÏ´ßûúýW:@·yÿFÿþýÏ ¹ ¹£AÎÍPå:‚m3`«éÈi–ªQŸåûòНš¡Nò…¼$®N”ÇšnãÙ¨Ï4{ѨÏÒä8£Ñ¨Ï\rùmõ#‘âD´¸lƶSò3Ò³ÒºÍ5ËG²” § ¦òÑä:wi;™ûq:ƒÂùÊÕ·*‚‘ëh«#\2ƒ,Ë–¬@6!ÎÓê ”uµ)z6".¯˜ì*[‰Œìg”cgå*ìüñL©”™^Á£z¸É#T:p“uT¿_lX#–§'€ @õ€pC e†Žªµ]s4IV3Ь¸±šR³äÄj{çTmˆsªä_ŒQÚ?5Fm±<‹yñ2‚'âBû86“Áz4r —S¦²>RÖHÚ(K;NzœpUŒUåöL¿E´ãëؤGh å¦Q‰ßl¨çò@6“. 7~¨9Ù'¸ —Œ þ5 C‹ù%?sоÅK~ZT¢òÌV8vjÜF\]›Éfò"}‰v“—é+äUú}¼Aß$oÑ-´‡¼Mß![áiþ..z’ŸÒŸÑŸO@& à qS\èÊYÛ9G“Z5ý͊˪)6K«¶gNÕ–6§J¾ÄX]¡ScÔØÊ³˜/#xn´c3ܡϗp¹-*ó"en¤­®´k¡§Á GIÅ0Un°dñQD»†ŽMúL©Pnû”øÑ„êp.Íh3YaÜ’pã©™“}‚ÛpÑꟳ04–_„ÇŠ¾ÅK~ZT¢òÌV8vjœ”÷!ÝNAÿËÛAIÿ›þŠîô>¢»èÇô×ÞÿÐOènú©÷ýœ|1!7!w4ȹ (tI¬í˜£)§š¾fÅ4Õš%ÃTÛ=§j«˜S%›a,¤Ð©1jåY<†—¬ ·ÖÙDZ™ îÐwK¸Üï”)2 ÒRÚEÎÓà„ßâ*7.²Ø"¢]ÇÀ&}ÿ‚T(·SJü”@u8—¯a´™¬ iI¸ñ8ÌÉ>Ám¸`õ<’É/À„¬oñ’Ÿ•h†<³Ž=4Ÿ…-gðÝHˆ O‘§ÈÓ§o$)dc= °IldÁÆp8‡“²:^€‡á”“ý-.©a”Èä2¤zI2@2l$1$ÁÀ $r åòÐÄU`¼èª*ä}ÐïFýåë@ÐæÂ•o/«¼?*èß–cZFàþ ÊÀ1>PþxÙ8¶´†rdÏwÌÛAÌÕîy»IUi]M] üz  Ù—z.RšU ŸØ9‰ßïÕ>±c.5•F{U‚¸Ø=iwJŠS«I‰4z´EFöš¦%[ć¾t…SÑÞ•{œˆ$¥òÂ6±àa"?0©rj)9‰‰8­‘ÕEŠøô~™6EÕ¨J Ï[1ú#˜îʘ6P]§Z•Zqõ©Ì® ‡»'Ù=lî$eª]Í]u\~ FãÎ!>FãŽ<—î £qg^Üoæäw› ž’iùv?ÎßýgöóÝHË{ïõ‘>òþéE’rAŠzþ.ùü],ö÷›Ôõ×õãß7àïdàd‹K ç‹þ~œ/ª—$ý0¶a#)ˆ!èúd ‘c(—‡Þ«ãõÃüZ…¼úýè¿|H?ÌÃN\ùö¸Êû£‚þµæoáówTæï"Ìß© /äÈÄ Îû˜«]óv‘ªÒ:›:øuÒõ\¤8«>Š_pÞ3«'|ôÃI\¸ØTíQ âbפ]))NL­þú?A£aæA¦¦iÉÁñE-ÊTptåh&‚©<¤°ýŸ <"?¥¨rj‰ÆWŠÇŠ7!›TQÇF„"œ»_E&†¶P5ªÃóÁVŒþÜ£»2¦ TשV¥Vzj£²kÃÅáîIv›;I™êÆGgsg—ïo†Ñ¸£FˆÏ…ÑøažK÷̅шs9Þoæäw™ žówÎß}göñÝhË_’/éžÓ÷ç9Ù«'ï½{á0‡¾>²¾º>üÛ†ümƒœhqáTÑׇSEÕ‚ð·ñ`#nÀô}2Æ!”‹C·Uñú`^­\ÜíþaÓ^¶ü¤æ^'¬lK XÅý0v¯Z6ˆÀ168`¾Þ óuÊÈÂs9·ÍÛ†çÌû€˜«í󶓪Ò:š:øu_r õ\¤0«®Ù6‰ßïžÕ®ù`.4F»U‚¸Ø>i{JŠS«©4æIiš–lŸÛÒ;LÅ%Wc"rÊC ÛŸ÷ 6$òëƒ*—¡–‚“ˆ“ Y]Ô±¡ˆ¤îW‘‰á4TªÄð|°£¿è®ŒiÕuªU©žZ—ìÚpq¸{’ÝÃæNR¦ºñÑÑÜQÇåûša4n«âsa4~çÒÝsa4nË‹ûÍ<ƒüvsÁS2-œ1YÀÿ±ƒð± ³øè«½¥9%~ïäÖ¼®§¦+®¡dþ(‚mÐËüÇÅ$íØÑÖò¿­¼¡ÜJ6u鋊ú–J»<åä*ÕW®ˆiúŒ£IrY~8)eÀc9›%øÃÜq¸ œ#­¾âà%rtsOqN‘_¡sï‘©iãŠk(ÂÄÁ6è…Þãb’v|]kØVÞPn-“ºôEE}K¥]žrr•ê+WÄ4}Æ5 ¹0;œ‰”2àñnÍ"ìaî¸ ÜΑÖßð¾3º¡»0§À¯à½Æº‚WžÔ´qÅ5`b‰`ô‚åq1I;Þ©µi+o(·&G]ú¢¢¾¥Ò.O9¹Jõ•+bš>c€ž\`ÎDJðø£f1ñ0wÜn—LÃÏ¢;è2|ÅJÙÌ\á© »o”h»b\ËŠ†}Ìé•îË.e0Mm)‹[ùSö‹Œ,s`÷¢PÞú$P)I¬mr\©ã*†±lƒÒ&¿ReZq符†âŠWFÀdUr¢ÅÊ™ì¸hÖM~†>ûV‰Kñ;<Úò›j¨BÕ[wC¹òY/:S¬Â©Õ8ÍȈ—êÍËäMïdžA$zfÖõCî¶18 Šp0žÝÄa‚Š:£ºC–O,òÊ¡7v èFÇÛƒ%Ñ׉¶þC¼q¦ÞÝáßT‚¿k|à Šðw-\[a÷âm؉kÑÀz9ÍÈsç_)ƒijKYôÈÇ€˜²_ddÙcº òÖ¹JIbm›ÏrH¹.Œe$¾°¹”*ÓŠ{¨8g55WB’È0²0"«’½(VTd—ÀE³nò3ôÙ·ŠD˜êÂß5¾©€*T½u7”+bõ¢3ÅêŒZ¥Ñ¹ÑŒŒ)ø¿í½ml\G¶ v?ûƒ¤$K#Òëñز=C:0%6IÏä Å™m¿ü ù÷‹ ÿ’]$?ìË[àý 2±AA9„A¸‚8²IH° CCX4$dÜhíÑM$Õ‚¨~¡H€áh¨ñ°IöMÎ9õ]÷ÞnJ–¤yu«ëVsêܪs«NÕ=§JÌà½V­o‰±?a&é”äºQxèEþ hT\›ã¡ßöždAýÏ ûøÇE¯w ÈJÇyåN…µu¬®„ ¿–¼×x¯QÁ Kð^3ÿE—þ,íq5ÜÜK-+×nÉÓÃ`ž¸R–Çs"æ|Ï ÒÌú’—•sšB,r⸺é`7L¹YYdÆ0fºÇI¦±û¬x‰)QqÍ<ŽKèüQ²¬ÙÚ;o¸)È*ÿ¥ŒýÇ%—Y|Â{?ÿL€`j¿–ño'ûYc²u|±ž/K󾜘žÀ{­ZßcKºLÒ©Éu£ðÐUøШ¸6ÇCçÜ=!È‚úŸ>ö™ˆ‹^ӺkëX]ÿ~-x¯™.îÖ«ùÙŸW£Y˜ûG¿­NT;¥¹'ù'uAç9„cû mínþ.¥ Åö aÅÏ 4\=˜ÓaØ—ßQ–Yq¸dÅ&:¶C»P«|g_o²m®Óì ºÅT'|Ƨåv£kw6z@µ¶ö$÷¤³ÆžÏ×ëëp5*ÝÍݾ¬~ ±/³_~êý¢z´y°5gGgµælk´u ºÛœ½»6ºF‘æÆèEZOFŸPd£=Úæ¥eå=Þõ‰; l ¢ëEûÀ+w ’¿öóJt &­ÑW•‰Jç›ï6ó›uA?8„ãà m¥‘oPšPߦ$üH9@Ãiïw: [äöeÝ2‡KV cûE ÞÞdÛ\ÿ;Øt‹©øŒOËí:¾ë= Z[ÙÌmvVØóùz}®Dß4rèóÊÇû<û9¼•£‹+ÑâµÑkÀÚâµ£Tv¯5VFW(²¸>ºN‘›£›YgrÊü›Ä=Þõ‰; l ¢ëEûÀ+w ”¿øóRtë{¦4Qê|ýíãücˆº0–Â1ãGÖ©ù Ó0H{xC| ç§Q.ö|«Ã°õXßQ6q¸ä3:¶®®áèM¶Íu¥ƒ½A·ØŒÏø´Ü®må¶:k= Zk=Î=î´Øóùz}.E_ãÍÙÒÇ;›= ï@éhã`)j\½¬5...(í6.Vq@ÀHŒ,=}L‘µ­Ñ-^ZVÞã]Ÿ¸ÓÀ’!ºÞY´¼‚¦ÕÒô!_¬z¸lqJ*EÊ,ü \aé³Uínµ¬¹-Vm,`¾Ü™d¨¿?6Ážý€î$ókÛW$!ÕH7¢OcÇU(´#_?;[.@¢]þ¸š4R-6‹³ÅVq­¸Q|òiöèÝji#¼/æ¼.[šÃ¼2=(ç×}ö`¨«µ¶ÅœÝæ‹]Iæ»ûS`¬\_èN2¿öÇí$1Øë¦µi츢 Åxï뇻Êå'´Ö=øG*ÅÅâµâƒâJq½¸É[5mÌòÅŒÇeS9p)£²ƒrvÕgwïÚ¡‰jIc[ÌØ,`¾Ô‘dæ·?6Áî€î$ókYLB×n‚—ÆŽ+ªPŒ`¾~Ò¡\|@«¾ñ¡l¤Tl/—èm} ­Ê{áñêè3ö÷·øîÿ5ôÎÔUÄ;è1L§Ny÷·ú×ó㟶Š)ãÎÜo¾$öJy¢?×ôš0×nîb*¼ø=@¥¸M(½竟²WWX‡¼'¾Šx˜œ‰Û~F&¸¢ ìÈw7~«ñ,ü£|Ï!úï ÙK8-ìªÿ.ÞÈŸº'zïñÊèã€ö÷·Øgü5ôêÔÅÄ;ö1L§Î|÷+}Ù\òæ81yÚùî«„ÕåÄÞ,Oô¿[ô¡Öw1^ü RÜE(½竟²WXG¾'¾Šx˜œ‰Û5B&¸¢ v׿ÒxÞ¾Œ‹çýþ„ìÝ œvñod†„^¼ôZRÖþþûš¿†Ñ`‚º¦ø€0†é4ìÎè+“æB)ŸÊˆiÄη3 k’‰½`žèÛðPë]@L…¿¨·¥÷Bà|õóBöŠCãöÄ—@“3b.ë2ÁáÀ±»6£ñ,¬¹}Ï!Æ‹ 9*8-þ.ÞÈ )£ô4vGò´Ÿºbû|Gì°E½$ÚK “wyYù…ZaéjŸÞu-_ß¿^ï ùà$ÑbŸmE?m/"ÊþØOÄ·»yŸÍHìåJŽÅBÑå³lv MÛ·0Ô‡QP6ÉÄÀ.(Ž–~Æ¥/j%ÃJ“C“þq›7¡ÕYmlM0…ÊHa pÂç!IIC˜S)Ù½ÛÓþˆÊeE_ªóy²¼ 4òc«:ðÎÕ¾"ëS}ïj½×æ#¦D‹}ƒ‡½Æ' ?ß{|6½²W9ÿ Å8DXÌFÖ5¦ ¾…¡¾a‹‚²I_Ëí‚âhéâù0¡V2¬49^êßiyZmÕLÑS˜¡¾·ONø<$)i\å+c?äDT®úùrn’'N1àƒCV~7TÇu¹ÚQ}þ¥ïµ«%|—h±ibD³—àäÈå'âÛ¢ÏæŠöbÇâ?¡ ‹Y[ºÆÈ·0ÔçXQP6éï]P-ý8/ul}B­dXir×?9ò&´Ú «â¢ ¦0C}:žœðyHRú`ÿ½êlƒ· ~½zQ…Át•[ŠýFKrP&ý½NïS÷F5Ó ª_ÎΠp¹>YÏ´¶×f«×Ë«“«¹µÝÙë÷«“ÕìÆÎÚìõ[7'ofŸ`ìò­É[™ööD¯—'Ë.´&[[¶H왪¤} Q¼üú6Up .QÊD³ ó½E~ƒ#’ ~ÃUQŽn…Át…[sýFK‚6’I¯Óƒw¯’Y *_È^ƒÑîBm²–y°½r­råö£ÉG¹•ÝkW–*“•ìúÎʵ+7oLÞÈnb쫪uˆ^¹=y›GoT°€œs²JCeAnãöNÍ©ekn¡A€A¾–±üÔüºü—À2˜W‹ó0Ï¥ý7x$L‚îc¹"ðj;NM`5x÷ž >¡x gÏ >£ëžcÕEOÛûAt ß½îµX™Ÿœç•_[š\âÑùåÉe]IàÑåõÉõXjå H¼{­\9;q–'W.L^àQ’+΢¶DxEÑâÑ4ÙÚgˉ=ÓÕ£$Š—_Û¦ ŽÁ%J™hTϾWÃãop¨UÁ/`.Êaû¯0˜.q‹«ßhIÐF2éïuzðî•2 ôñ¹ìEÆÏaG³´ÝºX:?ûpòa®µ{ñü|i²”]Ûi]<õÒä¥ìcŒ»:y5³µ½Ñ󳓳¡x gÏ >£ëžcÕEOÛûAtß½îµXÂчEËø²hõÞä=IàÑ{k“k±ÔÒyÌV£¥ó''NòäÒ¹Ésah³¤£ZøÌ[*›ŠÜ¡ìTqƒ¼Žš·ÈêEÛyIEÚlÉGå›jÞ"X^èTÍÚ¼?|¿S7¡Zí΂Ù.«Ã«û&ÔÆðF§eÒJ€Â–™abÀIÍ Ïèr"Ć“ÐĆhb#¤S‰ ‡ÑĆÓÑĆÃhbÃé8üSã;69©GÿÄj¬ä,¾mß8m+Å6ŠÒöƒJß)JܼÆùA8†/äµ¼Úp-š©d5ÔG# %£ãTD 'rc䆃2ÅS8Û#· ÜólØ$IµŸÕ:·-0ÐqKAèT…7\WåIA´ð-˜·T6¹CÙÐñ˜äuÔ¼EV/ÚÎK*ÒfK>ªx,ßœóä-rщùáùNŬͥá¥NÍ„Z^îÌ›íòhøQgÉ„Z^ï,›´ °eÎ21à¤ÎŸÕåDˆ '¡‰ ÐÄFH§£‰ §£‰ ‡ÑĆÓqøWíwlrrñ«±’³ø~sã´CÛóHÛÚ(}Ó#qóçáœ>—×òÊÃåè³RVC}8òR2:þHI¤p"—F.Y0WG®ŠNgvdÖ€Áí»†MBTþY¹3kšŒ»âAÏ òˆ(¼áú<†f'ƒ¾ó–ʦ"w(:“¼Žš·ÈêEÛyIEÚlÉG图¼EŽôNɬMì‹Ê&Ô½á{ªÙ.‡væM¨µáµÎ=“V¶ÌI&œÔÉᓺœ±á$4±ášØéTbÃa4±át4±á0šØp:7 xÇ&'gP?±+9ë¥Þ:í5Þk¼‚x¯Ê†E¯ñ^ãý%â½"ûú¼Æ{÷—ˆG&'o8U¸*pÑýKâ¶ü:òªF^—ßבW5òr¸Ë¾Ž¼¢>¦µùµ§ûŒe'–ba·+ëïe3øì(Žn™˜jh§ß×ÝÔ0ŽO36Ìhœv’1lƒÃ }PÕ€_œ¹¡4¬–¥¹aU•Q] Ô]Œþ¼* ¥ bµªªhÉy&Sß:S¯ÓÿnÝúÆá9vˆ0Tël»3Pƒ‚@õ`dëÞ™6#rÆ;`R&‰P¨cQ £E> ÃÓy Ïx©$ À®…¿È==U´Uç]»ŽX+J¡Ñ£ ZÛªè})JzjU5¾[¦ÏWf²Ð$9&þŒ9)#ù´Ü€U–uÁ#â l@V™Zð¶¯s¹ à9àì"@<Èqžñ“©‡z3»LôŸ З{æ8„zÒ*%JTÞs•Ó€1Åô5nðØß˘õÙQÝd6Õ6N¿¯» l!Ÿf›Ñ8í$cØ–°úØ­¿8;XiÅZ¹-í`+ªŒÊ<¥îbôç)mc+…TAãÓ™ÚÖéZþ‡pëÖv0Žý†j=mwj0B ,€lÍ;ÝfDN{§LÊ$Ê`u,Šaôâ Èdx:oái/•¤صð¹§ò Š¶jœ¢k×kE)4zt^k[]’¢¤§VTã»aùü|e& Aòc’‘áϘ“2’OË XeùP<"®Àd•©5oû— žÎ.ÀƒŒgái?™z¨7³ËDÿÙ}™±gŽC¨'­òP¢Då=Où±,kSl²ã–¸ý½¬¬ŸÅÑm¹SM³ãôûºgÇòiæÙÓN2†m¢!C øÅhKóêÒ¬4Ð.©2J¤níbôç%)¶K%…TBÛ÷S™òÖ©r™þ‡pë–w0ϱC„¡ZOaÛ‚Œ¨ [öNµ‘SÞ©“2I„2@‹b½8(òžÎ[xÊK%iv-üE@îé<¨¢­2§èÚuÄZQ ­jm«¢óR”ôÔ’j|·$LòŸ¯Ìd¡!HrL22üsRFòi¹«,ê‚GÄØ€¬2µ&àm_ærAÁsÀÙE€xâ,<å'Sõfv™è? /3öÌqõ¤UJ”¨¼ç(?¸„ÄMœ¹Åtªõ33-µÛdzçD¼£$$±n%æÉE›LŸ­Ù„Žk.BõÇL¶u£wŽ­½óÒt£way®™³sZºÑ{”0PWFïH½ †á²í+qË0’¿?rRŒ©‹áŠ1Rµ`´Q‡ +•N NA}˜Š¾U7èa[ZÚ7M\âm³¨Ý4÷ ÂZÞ$¨™ïY”ÅŒx4ñ jfîòÅ/ó‰QFêfÕéIšØ,˜%èIšûÄ}“V”ÖæÂeaø–.BFDK*xÁ’‘Ô–ŒKD\jl‰ f åêWbµ§7UF6«ù¾$ôLÊòH.E`bÐÉTÛŽ Y_2’XÞ,2™¿|_{}ƒbZµ¤‹›ž”.nz’Ö—Ýï)º¶D9'‚¸‰9·XOµ>g?®—Ø&ë;'jä*%!‰µ¡(±0O.Ì$`úl]&t\s¡©?f2¯;plÝ逗¦;ËÍ€ÓÒ „ƒ€r:à@Âé@¸ ß¶}UnN K#Kb<ðHM¤W˜‘Š£¥ˆ:TX©t`pšéÃtó­šAÛÒš´¾iâšo›Eíž 9·gÖÐò&A­È|Ï¢,fÄ£‰Q³o—/p™OŒ2R3«NOÒÄfÞ,AOÒÜW–LZ PZ› —‘᛺P-©à7JFR[2.q©±%‚š)”+\‰ÕžÞTÙ ¬æû’Ð3)K ¹‰A$Sms8&d}ÉüIby³Èdþò |íõ! ŠiÕ’.nzRº¸éIZ_¶ÔStm‰‚Ž?nâÏ=R­ÿYÇk"¶ËÀΉ2ùiGIHbý'J,Ì“‹/ ˜>[{ ×\Lê¹,èN[wúà¥éNÂóBsçà´t§(á ¡œ>8pú.<ó¶¯ÐUÃId~dRŒ)‹áŠ4R²`´Q‡ +•N N%}˜R¾U6èa[ZÓ7M\âm³¨Ý4¯ö ÂZÞ$¨™ïY”ÅŒx4ñ j†íòE,ó‰QFÊfÕéIšØTÍô$Í}hÞ¤•¥µ¹pÙ¾ª …Ñ’ ^p£d$µ%ã—["¨™B¹Š•XíéM•‘ Âj¾/ =“²Ì‘K˜ô@2Õ6‡cBÖ—ÌŸ$–7‹Læ/ŸÀ×^ ˜V-éâ¦'¥‹›ž¤õeó=E×–¨×\¯ñ^ã½4x¯Š§Ëk¼×x‰x¯ˆ§Ëk¼×x‰x¯=¸^íÈÚ“Ñ'tÚéÚèÚAúýhí‚úÑì§Þÿ–p"êKâ¤ó:Ò;²²9ºI§x®Œ®¤ßVááž]ƒ¶M8éóåp yÙC¤õxô1N ïäAúý¨u­üè"´müKê§ûKíâ“OkEx¹Å1”º ©+E qr¤nCj«Åfñ/•ìbqPzÚ IëÿCuôqϼKñȇ‚< ȉ $á‡äöññ™|öãÕ;gêÒK%X|‡®&ø&sø‰}׿¾Q7؈òïàÆòS€*C¬&Æ]s zó©Ê^œœ·wQy.?aOg'Çå$cöåÂÓÅ™$¤‚ö‚·$"ÿCá{ŠQÒC¤ S†å)Ä鉻¶ËÄ)»¶ L‰kÑlÕ«~\Ï̆ FØY¥añ‚ÍûJ/!iy~¨†þ îé7c)Ùï“5;УAº‚$üÀÙ>->ŠR‚Ï~¼ZçtMzH$‹ï£Â¬ßßdÎ&±ï­ÜŽ?êq@þ}6ÐX~ Pe@°£€õÀdذ7`fûTo>UÙ«ãÿ‘“ò6ð.ª#Ïâ'ìéì东dlÀ¢ÜGº Ø"“„ÔCpÂ^ð–Dä(|O1JzˆtaÊP£<…8mº+»Lœ²+;ÐÀ”¸]«x•k™k!ˆêIéçz¼`ÓòƒÒÃ`HZ=*£­¼{êÍXŠG¶ãdIMÆÛh ­` ?¼µO‰u”೯Ü9U–Öù Àâ»0)7Á7™£Cì; ·!ºÁF7 4–ŸT}ØÞQÀz`2l|g&ãTo>UÙ«ã{“ò6ð.ª#Ïâ'ìéì东dlÀ¢\º Ø"“„ÔCpÂ^ð–Dä(|O1JzˆtaÊP£<…8=v[»Lœ²­h`JlEK^éãræbb„S´ôÃNpÚ6rK7’N·«ö³ÝìêS-¤µ”t›y_z€ÿئ˜˜gám3ýÖ=s8fÄ®CpÝôPMÙ=”ÆF"Ì^èX u¥hz´{&…¡Ló;Ös óç…èÌÂPÌ:–.LœîGgîŬ¡{˜è§[VÇÝ2RLôS ª qKuȈ WW}¢³{ágIvæ?Mp3s"ªô˜#„6_R“+¯fZÖ#)”?òIÚm––ïRDwxõ/†¾æ 6gpÍ ©ª}Ÿ ù»ÁjîG] ûÓ…4Ád¿‡aª«ˆÛW÷°çÄÈMÝ*:Ý^Ìv3¤O5‰ÖRÒä}éÖýc›bbž…·Í&îéÃ1«u‚+ý‡ÒÈh³ˆCil$Âì…ŽÅPW:6AqO§0’-~Çznaï<0žŠ=ÇÒ…MóÀRtzi(fþÜÃ&?Ý”:b“ŸbAmˆ[ªF\¸ºÚäÝ ?K2,ÿi‚σÜmÁ˜lR¥Ç<´‰¨šµ2x5…µI¡ü‘Ï~OkÓß|—"ºÃ«'x1ô57µã‚kIEPíûd¹ß Vó7êbÉŸ.¤ 6ú=,ùS}C„ܾº§ó@OU7ƒN·œ²Ý,çSm µ”t«x_újÿئ˜˜gám³™{êpÌL]‡à³©Cid´éÙ¡46aöBÇb¨+@›ù¹§R Éø¾c=·0p¨F§ªC1+çXº0b†àŽ–½s#ütÛé¸ãEŠ~ŠÉ´!n©.qáêj„OtvO€ ü,É’ü§ Nr cO•suÐføj9€Á«µë‘Êù²Â)m]!ߥˆîðê ^ }Íî_m£àšARTû>™êwƒÕŒº˜î§ i‚Q~ÓýTg!·¯îqHÏßýà#<ÎÏ5ô$N¡Ô?-ßy©¬Ï_R¼ÃÕŒ5‡‡¥C B5f à71)êWerºo²“Ö;NÕñœð7ŽïKúì׫¶ªÆCw dJ»ø8ÛÕ8?& 7?Q#Oà qáÚÏþ6ó³á-´ÆZ*¯µ1¶ÁðòÍèºDë[Ž®Ï›aXÇWYâñåça^þžâçz§Ðê‹ô7/“µýKŠw¸ýMeˆ‡„jÌÀobR†U¯Êätßd§Ëwœ ö7DÀwÜ8¾/é³_¯Òv*Ý’)íâ/ô7•8?& 7?Q#Oà qáÚÏþ6ó³áÍ/-«¼åõ±u†—_ˆ®H´¾ftåì±³ ëx‹%o>súðð>×Г8…PÿX´ ¿y‰¼ ^V¼Ã%èoJ;N©„5Õ˜5€ßĤ «^•ÉéR¦_ê8%ìoˆ€ï¸q|_Òg¿^©í”4º%SÚÅ_èoJq~L:Ao~£Fž†ⵟý%lægëÞ»§òî­­1¼ü\t^¢õ5¢ó'dXÇYâñ™F»ï¡øk >ýϯ*=8Sý3iŽŽƒ¢oäF¨PR ´L×Q©Aõ˜*.¦~Z€¾Ž®~ [Sæ)-°§ÁõH«¥È6cÈ{ lÄ`¿,ô;„†+ÔchÓ¢>Tó9X=A•‹ü<Í"3>CÙRRAŒ®óû®T Çˆ¡Êûti X¡m8Ví¦KŠÍn˜Œ˜ØÚÁp“åÃÆôXu{{Hb«VqMqë*SüRÊÃT…zŒJq¹¸^¬ÏBÏÑ„u±_cðè`~I颙ҟI{sÔÒ|#7B¥Ž¡éÃ25(ýSÅÅT@ Ð×ÑÕ/ak 5¡ö4¸i–Ùf yO̓g,Þ†H@·+._‚°H‡šÃ5Vœu‘«5Ú >Ä`¿,ô;„†KÔch›>TÔ9X=A•‹ü<Í"3>CÙRRAŒ®óû®” Çˆ¡Êûti X¡m8Ví¦KŠÍn˜Œ˜ØÚÁp“åÃÆôXu{{Hb«VqMqë*SüRÊÃT‰zŒRñ^q­X*ž,.Ò±ÿîÚèEš£i=}ÒÅÏÜs<¶Ê/î¹¾štç;ý]™ˆÙçâòîþM‚Ëû_þSŸ0ÔIro¬Œ®Pdq}t"6G7»¸œglqUÜs%#é¸ !Ñ"û\¼ßÝ¿Ið~ÿËê†@~äUpŒ4PÀ1²ôxôqïsàŒ­i‰{>2$ÝÁw!d"ZdŸ‹#¼û7qGøO}"ÖqÃÝFñɧ¾æsï~Â}î“òÌþ ¸B³IÂ7ßý„ûæ'å™bF%<åÃï~Â}ø“ò^sÿ2qŸ[Û½~¿:YÍnì¬Í^¿usòfö Æ.ß.õׯK—úë7«ª¡ó“ª<Ðö;ó‚×íÄïéTCÏ8„ìjóciÅñ#ü¼XàÔ]½€lƒ?²’èφ4N«%è?iÐx°ìžƒ½ÓíjœŽÂƒøÓùu㵓|%«{;õ–¼ÝéÔ[òvg‰èíîV#:õv6€ÈÌÄ lºÏûky-"3v¿•[Ù½ve©2YÉ®ï¬\»róÆäì&Æ.ÜžïW®HÏ÷+7** yæév,(?®Ù‰ßÓ¡†žq ?ûÓ†g'—ŠÓ+ø‘¢Á©¹z!;ƒd%ÑŸ ihJÐÒ ñìÑ={§ÛÔ8\ƒñ§ók Úa¯’Õ½ŒJNét0*9¥³DtJw+Œz-€ÈÙ‰³8T¥»¦¿‘×"rÖÖXr­Ý‹ççK“%èoZÏ_½4y)ûcç® õó祃úùK¥%Š’<ó;9‚—íÄïéLCÏ8€ióÃ-ÅáüÔIà”]½€«Àƒ?²’èφ4μ$è?iÐx<垃½ÓíjœÍÀƒøÓùe í/‡æt·eÁ»å¶lˆ'ÒU”ÄFÝDIm7ÐK”ˆÚ³ˆ’r½ß‹(éÅìQ”DO-Jš¿|QJ]”ÒN%N*Q”ž—×|«€¬‹3F ȡ‰fšy&Í…™~väè4.O“cü‡•È<…îÆÈÈ<ªEÎ<ÏîöÈm }‘glïÒØé{(sïZ'íAK¥ðiúsAK|ÇÂáôÞO.æýdèô³uí“‚7b<ê'j^â5J?)“×ÏäPúIÂÅ5¥ÈI‰“Ÿ—Knºã­àÝr¼5D€é*Jb+†n¢¤æ{‰Q{QRÎã{%½˜=Š’(à©EIóøî"JéB¢‹RºÀi¢ÄI%ŠÒóòû^. ëâXÌr¨p¢³ y&Í…³ý”Øš&Àæ4¹vXŠÌƒÓ.\ŠÌÓÕ®Ž\Ì#ØfGf-ô¦ýÌöŒçù®u84±TDŸöt:4Ów,NïýäbÞO†N?þN×x)x#Æ£~¸æç\6¡ôÃí8yýØ:¥n'œ4ãPÚávœ”8Üîy9•¦»Ž Þ-×QC8‘®¢$6è&JÊå»—(µg%åþ¼QÒ‹Ù£(‰žZ”4Ÿå.¢”.$º(¥ œ&JœT¢(=/Ïå{d]œäX@Ntr.Ϥ¹p²Ÿ§ °1âœ|¼)mgÂ=å÷5 —YJ~9º\/Ôw…#cyulU92Þ7 oŽÝTy—oÝîõBYåܬöI#ìohDÊõ>ùm$‡ÁA*œõ<ôq}ûÀ"ý‹J|:ø3ýÊo$y“`Æá‹-Ʀ Êd‰>À¿cÙì±ì0–Ä_Xµ”LjÕYb½Áê» ‘³°oA¹¥Öï¿{?rîﻯg¡õn+rZûZªIîm.W‰‚ÊI‘®¬èZ&]YŸY Óòû– ³Ò}v¶9֔̕枌=‘Ì•ÖîŽÝUyw~?ö{ùP¥Ù;cwDž[*Ì)¬ßXs‚>aÍ™¥‰;Â3óî _Âk¢GŒÌ3ª°´&x¦¼öX[á©<¨Þ’`lµo5*}yìKÓCøø‚ôà³=úö”ß·P¸ÀR Z/Ô µ]áMxûÑØ#åM¸dz!Þ»¡ò.`À½Ý+…Û*çF¥OÚQç0xC#r»Ö'?lä08H…¢žçÖð ÷m¶ð­±( ÄºÿŸéW~àÈ›3×з8Ó¥”É}=—^ÿ¢O`e‡q°$þÀ’¨¥{¨\úæMWÀKc—TÞ¹«cW…+ {úf™s©Ô'M¡s¼¡™-÷ɯ9 Rᄨç¹e<¿{›­Úƒpk, (±hÿgú•_'ò&ÁŒÃUÝ-Æ”Re²DŸ>à¥×?äØcÙa,‰¿°$j)«³Äz!‚¥ê»¨Ví«*ͲìdãTï½{/rîí»§šdÞhséÆITHŠtêRNÏ,…iù}ÂEéHzßÁÜ×ß>{,™ûº…š‡Ì+ýnìwò¡¾¾¨ù­º_¾UX¿3°¾ô ë[³4qGxf^uilIá5pÜ—yKz~Ýi±Ç0êµ@Å ÔdadþF4³à“6{ £Þ¼ æ¾s›è¸WÆn›Tn0ßBÒlßfô<\m%‚·ñć[ì`¢·@™„‰™ºÝo˜í.Œ œ{…"TD‚ÀþÌbþ$ôÜšm:“×Ë<¯àQ÷Ý2 cAe·¹9PhAÇøï ãœÔtWèëFõô%²®+ž ‹Œãª7¯Ì¥8àã²7±W[:Jq` n~ù(Å—´©œ¥GG)ôh]Ù'ù(Å9ÑãpH¯E¹¼R9Š1¿éÍ¡¾¸9ø]„‹ÿzçrsÇÎ…s b|ÖQ£;Š1¿á?Œ>[ôI­;†Qo”2Ì@ÕîF½†)úlÎ'õîF½9ÿ*‡9wõØU3KtÜóc³&•KÌ_ŽT½·=×ñˆà,sápûLôæ(“01S·"ñ #R”Óc¡P„ΤS8ÀŸYÌŸ„âW¶ Aòz’çï<*ƒ[tì!¨ì67n -èÿ]¡cœ“Þê Ö¨ž¾DÖu-Ñ7a‘q\O%â%è•1ø¸ Jì•ñÍ(¸,IpÕ{G)p¸XJåÌ?)G)ÎሇCz¥è$ÊåùÒQŒù ïdÈÑ“¡%Éü÷"„‹Õââ·Å*¼ aÆ_Ü¢œ³Åd­¨ù«Ë.*CÓõÝUЀ¦Ww—Aí™®î6A×™¾ w—oMß‚¼ëåé2Üݬæªs óËõ¬KGëW®g0ªu5Ÿ–Ù:?L% º–¢Ûg2¨ û—6ã€r2R`©ôBjuOPËÆ£» |tc.W :Z}¤igruá .?~¸¼ÔïÄuÇïCúBë .8~Øš÷Y3µ6¦7 ï\Ô¦«* Çgº« ù;‘sÇ¿³ëܹㄎ‹wἃßÐ ïL#]¸N—‹7¡LöX,7rîúZÀp¹xbÜÝqîÞÅ_˜¨;Ч«`×i:M·ÙÆøbjÐÜ¡›ýÍŒìÌ¢¹IÉüØ ™Ç ÷µ`Óiµœð?ÄÄ µC7A+¿9k¾¸,ØqÖÖœµP&{,–߈œ ß \ì:Ð8шq¸8]Uº…_]pQ“›®í¶@}›~´Ûmº²»ŠÚô ¸»€orëÊ•ÛÓ·áîF%WWóoײR­AÞíZã¡Z%óiѬCñÃT‚¢«Xº©ô!ƒš€°àBP.'F ,•^¨CµöÕ4ÝÍ©s¹¼Â¼X}¤ØKgreþ ."|8¼Ô–â*â‡K>¿|—?\šK¬™–×§× ï\Tz¦+j;ÇÏv×uòÚòKÈF»P®žÀ+\†Wø»ÈùÎ×x+árñ&”É‹Á\ÚQF —‹7!AcÇi4ð7¿90Z©`×YtÝÅ6þÀÿSƒÅºÙ¿¯ð^À,š›”LÁ ó"ç¯›ÎƒÎ àˆ‰Áƒº äW"gÅ7—;ÎÊŠ³ÊdÅò둳î›Ë‚]g}_áu|…×áî¦Îý꜋j( ±‹ {N?Üm€Â9]Ú-súÜ»:}òÎÏNÏÂÝ¥R®¯0æÏ–³R‹-CÞl9ÃB®yù´Ö¡øa*ÁÑõCÝjùAM@Ø¿ p.(#–J/Ô¡÷Õ0ݵ¯s9x'|^¬>RL—3H¹T=ȶÞ^Êòun€zw?¼4çY3Ý[›^(¼sQc›.y¨ª?Ù]QËkÞ…Ž±KEX‚Wš7ÿmä|ëk¼•p¹xÊdÅÔXl2ꛕÕØÛ¾ëÀ«í6ÚøÓ°Þøý x…÷fÑܤd ~,t8ØúZ°é,-9KÀÿƒ¥º –bc6. vÔ¨MÉ‹u·wq܆Wx _á5x…{(Ó¹æäeP,øòâ./ºËU±º8¹ºýÅêjU,-NV·¿X^¾)Ö'onÑlÞ‹Š“·0·ÌV?.k˜¸œ8?­²|¾ª•“êè{õ6¤6åYÎXïrµOôžÓ°¼ ›Ñ<$}öÃ?ºðꪶòæ9y®ïZßú9UÎÛújí’kç}ŸûmX-[îObÓðyŒAk|ЮXlUZ¸ÍnžôuÏéâÈ{?ãV® N,´!¾,W'î·!¾*W'Zmˆ/ËÕÀ‰Õ6Ä›r%pb£Ý¢|¾ 8±º ñU¾8+€î2­ÿÏø=ÖÿÂ;¾Ó‡j|"xeØPÑ)È‚þž•w¦¿czÛ¹ËUtRÚwñ6ƒq)ð"汬ðî–s·©Tê ¤á»\…›[Bµ&°l*²€¢“c`"HÌJO¶¸JïwƒŒ|Ýy,ã„­]Ðä™&NAƒŒ¼ ´`ªXSÒ}Çg::ªç’íºèš[˜¼à/ˆ× \pu›Gb½uòÑöL«U‹­“•í™fó†Xi¼±=³°pS,³B7¹·ÙëÇ·5L\`…~¡Âòù:_Nê¸ïÕÚº — sÆ  «}Ň~ay)6£y@ú쇗àVK[‹„~+Ñ–9§Êy@_­ær•¿Ïâs¿­f«…ÜýIl>1hOÚËÏJµ·ÙÍÓ$úAyïgÜʵ҉ù6Ä›rtb© ñ–\#XnC¼)×G'µ!¾ ×F'ÖÛË”Ï×E'mC¼Å×D'pMÔmÒŠèøY¿ÇŠhj}ÍB¯ »z?Y˜då] M 0]Œõ› Á¸ÇióXVØØr‹JOÏ`àa@Ó—ëåáâ–Ð× ,»Ù @ÑÉ10¤f%Œ'p=”þ, <-ýƒ]˜0õž‚yiëÁ:T±¦ùC¿ÀÔù!%Ûu:77yΟKиí6:Å ôäÃíÏKbùy²´ýY£qI¬=O^ÚþlnîªXxž¼Š¹³lÕùãY —œ¡_(±|¾ò™“Šó{å6¤ÎÉEÔœ¦Ró5f>Ó„~ay)6£y8ú쇺àÅEmuú®™[œ*çm}µ¾Íç}ŸûmÝ]-mïObÓðYŒAk|ЮXWó›Ý<Í, _Ä‘÷~Æ­\=ž¨¶!Þ+ÇÐO@|Q®OÜkC¼!WŒ'¶!>'W‹'ÖÚ÷(Ÿ¯O<܆ø"_%žÀUb·AkÄã'ýkÄa „–m.ýíH7b2AAfYyh3 Lo;UµùmÈv¼Íhû"« §)+ÄíqJùW]ÍE\®ìS÷¡eP‘ÝA:`VÂxp‰O`&‘Å ƒ§Å _XÚ…9S"(È™ŠEh¤­kPÅÚtú6›À‰¤d{.ÌÍã—}œFLÕ=š=L­z4m˜ªz4_˜ºéÑDaê–3„ãe¦¸8ÿ³öH›UëÔï09[÷–;Ö¶=/È íßs¢úª»*áÓæ-ޤpÞCªwÊ!4•}¯Î˜íOœ)dŒMJ¢:'¾/}¯C‹ADg=u¾  Ź’0iðÙSH*¨Ðɵ~kîJXüÀù¯.L-x4u˜ºïÑ”aªåÑT5tkcjÃ[e÷>Î ¦ªN~Ùcußw~ÁÖ÷i‰~jŽtw÷®ïxw·Au‡ÿ®õ)§M·,‹Àág*õ? Î-.3 ¹Ûì–ëéREÏ1\¦ã»ºÂoÜxò—–Ý!èï…¸‹7£ôý@Æ2{+44Q¡Ù`¾àóÅÿ+ñå­ü·Ù—6apÙÔ-õëþÆ')ñ{º¡ÿžƒ“ Oû°ƒ q盄xÐíúi X8~ÁÇ9ÇTÍ£©ÆÔ#æS&S7<šU@gÓ‰ã·=šGàç÷˜²Gª¯Z)‡)ÔÙš×ìXKèö$"'¦ ðÎÖ %|ÚD"£Å‘6éé)ó‰Ðœx5Ælâ´"cìXÕ8ñ}鳋| :‘µ½ö¨)“ eO(Î ”„†ÏžBRYpùœ-a¢JXüÁù¯ÌOÍ{4ϘZòh~1µìѼ‚5ôòúÔº×b÷>N ¦*Î~Ùãût"\‘Á©ÀÔw4AüÛ çÃWú”Ó¦[–EàЉ0ýûPA—…ÜmvË•z©Ïç.›¸úìÀ¸ñä/-üCÐß qo ‘“ƒ@Æ2{+44QÝÅL.|þÁã¿.Î)ܤ›PÎ;‚mö-‚Í.\6Ï`Œ/Æ')ñ{º¡ÿЉÀÄÓ>CìàlDÜð9ŠÇf,žt»~œ掟óq‚2Uöh^2õУ ÉTÉ£™ÈÔ%¦ SW=˜{ŸõhÒ(ÞcÍéÉj­þ¦}gË^£c-âÛ3Žœ˜WÀ;[ÆŠði³ŽŒGR8£"¥>eòšÓ¯Ì˜íOœƒdŒíK¢2'¾/}*’/C'Rf2¢5e&¢ÌQŹ’0ñÙSH*s.Ÿà%ÌJB ‹ŸA8ÿ%T)iR MF¦îy4 a }omjÍ[d÷>Î6¦JN4~Ùã t"ì}¦˜ú6`çX€øáìÈ-êSNÛagЏŽ'ÎÉÈ2eý°o—mP_„·| •ÿÃe³WŸJ7žü«ý½wñ&pÔLB-†döVhh¢BSÀLÄç_2<þëâÄMº å$%Xj³¯!L1q™ŠÒK“ñä/%~/ÌZ؉À„Å‹0¸Z Ï÷×<èöü<2x9×|ïò ´¿>RR¦×GV‡”Õõ‘ê2¸>rsHÙZ¹5$̬ß+) ë~˜÷ì¯jv¾Ê×ïÛ\8T€¤À¶­sLÏç&Iƒ6>Ïf“ƒ!Û¶Ø£ LÈ&1Cñ²5ƒ¢!»àx.ÇÕ=µÂ­­Vr/ý0 Ä3ÖkfÍG5ƒæ#÷5Sæ#­A͈ùÈê f¾|dcP3\†]ž³s?A­Qß]WZëh¦;žõë6]§ÓäF?ÉôíÀF£)‰Ç¦A3ãxÍÐñ›¾˜h`ûtª®´0ʘó1‡A.\i9éë ¡þöòw?U´Zí5‡ÞÃÀüN©&®ãŠwÑÃågm`­ílÐ4"؈xÀ¾^ÀÈ@“ öëÉoÙ“Èy²ïI¡9í}ícO\ç@ÊôbðBná½ ƒÒ”üHmHY‘y4¤ ÈT†”íø‘CÊlÞna1þÞí!e,Þsý•AÍdYùñ}`[>‡Ê»”éö!uŽéÜÜ@iÐÆçÙLQ²Í¤=šL„lB1/[3/² Žçr\Ý+Q+ÜÚ$§ñÒÓ‚@²4¨YeYÔì±<Ô,±¬j6Ø'­¯T™áõ»=¦ SWà…fÆüŒ@Á ‡¾ãs‚@í|š6ø x¡éã?Ùô5\i»£òxÖ¯»/ô"7HÆ E¦SýƒEx¡á…^ôÅ\@Û§Su¥½QÆœ{ˆùráJ;"¡ÝSÀ•}17 i~cx0ð ½âÞ˜ÖFj/4K…ú[Ùu m`¥í¬“J¬G<`ŸàE&EŸýzò£Dv½°9›û6Å ½ /tŠª?x.7÷Þ¹Ai¤<¤ â<R¶ðGJCÊ þÈ¥!eäê0~ovHÙ½÷Ã|`iP³¾V>zØFÜ¡òÜ#Åö°mžcú/7W´ñy6Sš‡l‹o{n87/[36² Žçr\ÝãP+ÜÚ´#§ñÒ*z ž±\=¬›Ãxª™™Ãë­˜¹7¨™–y8¨•YÔÌÉ!O’) 2òw{¨í;2^hŒ*rýŸ‚A }Ëõó@ìDAv€à)Èìúª®´äÑÌz<ë :¢HÆ ÕzTu©áA^èFHýŠÓÁ÷éT]i}”1çB·G.\iU$4m ¸â-ôtRÉñãÀÒÀR»å¨1ÝOPÆá…f©PrXwÖÔ°¨ïð"Ó¨Î~=9èg× #çñ¾Ç…­ÈÙÚ·uì1¼Ð]Ôî¨Ý™Ë©v‡õq¥v‡«ãJí«ãJíoŽ+µ;¼5.ÔîLù-lØÃJ÷«o¡òù#Mù ëÂÖ½­íÑîÓ5 ©µÙDóO®»‹åö>MQÎZ¶öÙdhY‚î ¨ ¡Ó¯1œÕo®Ukd$ð¬\¼h «žðÐ?}Ä–““ˆ}‚Ù©³/²òd%4¥>\(hJ}x¿ )õa« )õájASê¦ÔCžTêÃj)õA¥þi  3f.¤ÎÖÆ•Î>W:cXW:cxc\éŒ šBgÌÜ~ ª+Å1¬¼…šÓ4Í)¬ ³í¶¶ó·O×€¦“e-Ù=¹€+Ömû4-/k™g“¡e ºa{ V©A5†³ºÖÈUBìž•u»MaÕ¦ïúzŒa©YGl-§Æ– eåÉJ.hi8_Ð4Òp© i¤árAÓHÃGM# × šF yR# +¦‘=4Ò§q,€Â“9W OXW Oøp\)MEÉZÐÙdhY‚n£¨åNFᬮòp}F#{ ge¨íÅ@SXõ„·¾cXª…[Þ)³µLYy²’ š:=™¦NljêTx¯ ©Sá¦N…kM‚<©N…¥S§‚êT/‡¼_5åÖ¯æF°lÅ´¼Ë…ËýlófØó „v¾S-ëlÓÙ›4¬³}joѨÎÒË4¨sø€”7ÙßWˆuõÕÛe¶Å8úÈ]£i@CŸO¾™­,Žfrãȉƒ–¹0˜rÿàð@³ÕM'±óV<Ùûb|`‚éý1jµ½™)xÔ+¥×s êÚkÀª(ÎæËø}6”³òØfÂ~?þ{™~güÀ3ÎçÆçáfgNd°Ž‘£ÕÏ]‘ƒ›6«×ÈyRxÒY8íB»³aæpœ»…»Ñ—¼æ¾,|Ù¯ïÌü«¹õ©¹*4ßtzÞ…Â…~¶y1©=yJ|Djß©•´¶éê RzØ>­7Içaé·Iåáð» zÏû ±¦>.»ÌÞÇf¹k2©B1ðéû2³_ű^îà91-Á2áEuBhö³é¤#vƉzO_ŒOL0½?F-°v%3 z¥ôz.A=P;"XÅÙœgš_bŠ+m¦Ës15‡á;ë²µO/è8L*p›Ýg²Ä¼k…kl×ÞÅÂbôßÊws|3úŠ3ÒoD_q>pdé82|Å9ÿnü»Dx ÙùNd°Ž‘Ãqt"g¥°ÒYüJ«Ÿ"g³°ÙY8ø®®›9§QhDŸóšû¼ðy¿¾3ñ¯æäÖŸæF ÐùL§ç+œëg›÷’R˜§Ä‡¤òJI'd›Ž^"•íSz•4B–>K !‡èÄcÐ ßWˆeõ ×e6¸¨¹È]ƒIj“OŸq™M)jBrÛȉéP–Y-*[rÿØð@³iM'±sE<Ð ûb|`‚éý1jµ™˜)xÔ+¥×s êÚ·Áª(Îf•é |ž©¬<¶™,ÏyÈ”@†cì,ËrÔ>µ 2©ÀmfŸMÈó..²]kQªgøV¶ÇG3bw_Ðèf8¿ÿLG‰œáœ;þm"<Ðì|+2Ø ÇHÈá8رUE²­~–DÎãÂãNKàl¶:kfŽj‡è,¯9ìå^ìμǛøýu=ÂàŸŸ(~ò|öþ<¾Ðß_×" ˆìsÙ]ðø\~]Ž0@²ŸúŸÄ–ñŠÍOõ"äÚK*ÅÈ©QNÌòrÊÅ×_rŠÏ8 äy(ç|ÔžQEåy(Ú¥Ô·¡4cð ÂOèïÿs`®ÿ~ï°'àú×<þ \,êû¿òôþÿä¿ü×ÿíóïþöïÿí¿ÁÛ \\@ÊÉñ8ÒÌó8þëÓâýZ|@‹ïÓâ8-ñ/«åæqOæz?ý÷›>¤}ãx~×ÿ×—F¾÷³[pUáZ€ëÿëpEŽ7Ü×\ÀõÁõs¸>ë?ƒë?‡ëßÀõßÁõ?Àõ?Ãu®×ÿ×U¸þ\¸æáZ†ëÿ…ë‰ã@Ñ#pý3¸~×8\¿‚ë?…ë_Âõ_Àõ_Ãõïàúáú_àúßáú?Ạ<ËH ®;pÝ…«×àÚ…gËÁu®÷àk®׿€ë_Áõ_ÁõoáúïáúŸ°°w‘W‘þ^—òOºèb^ä5@{é¼þ°ËÐB°'htmldoc-1.8.27/doc/htmldoc-fig31.xcf.gz0100664000212600000240000011051610142763627016165 0ustar mikeuser‹ìZ xŶ®îÙ³/$™,$“!;$dB– [ÈA®e ó„„°/B@×H}|(J4^‘ q‰‚A„‘5 È2„ȲMzzúÓÝ3™ø¼èãêõ2p2Õ§NUýuªêœ¿ú›ôŒ9s5KÒfiEGë!4E•K„”IˆH}}=ü=pà!«à³mÛ¶Ë—/Ÿ8qbìØ±yyy»víÂj‚\±%6uQÎ#>Ý@¤¢ÞS,£|Á·K:€‰Ì˜3-}fdú¼Œ"J6ÁÒÙ35™ fΛ?3mAFVæüp»°YéiY³³æiÂø¯ÈyéÓ§i¢£¢ùÏ :±M§ß¡©®«áílºdþÜii™é¥gP.½“RÔE.ÌÌXàÓžž‰¨—dÍš5æmëÛU‚¦sSÒñ¡þAˆv !c¾%ôKNzëò¡_ƒæÍËZ<õrÑÝ.‰ëUb?v6e{›²ƒMÙѦì,öeù(lê,K-±6· D¨§ach§‚ÌYÒ¹^² äCÏA¾)¹ÒMa\©D ’ Sy¦0d!ÈZ€ýHH6Èj ?`ÃXÎ`ëü*ìÄ·a'Þi$Ä‹qтĀ 2dÈ2—A WÈ— ?€”âÝ@ˆàöúxƒ„ƒ$‚¤€Àá˜O€À<a0-è´0mˆdÈãè…—ßW’Ä¿h+ÝDX.‡ô'4gÎ!}‰”ëKdXL æý_Š#æN¥>XRræý$KvXÒGüêMœÑ"’¸pìþ$Ò“¸¡6‚tï0´†R Á’oDÌIœV.ˆxc}Âk‚‰§h½Ÿs{ØÏ¹¢.{pÁR–\¹^–¡Ü…ên\Ǩ8 ‘&‘P´—rL!ûAâÑPBìñ‹ÇF¡¥¡Ù Xn? 3¶è#Øé¬µºû¢§:¯Î\;XæŒÓ$°<í³öBI$æ‘,Ͳ…>°N-½Y–aYîuXª&|àX¦jë¥`¥,ŘØS}`ͨ:«áÃ~ÙÆmû‰dŠ¡XSëKö°ì†¥X†Ã Šmgت XXÓ\þ¹oÌMe‰¬tÃì¨bøÿPÁ@ç„ ìÌ+ai†fMÆu*X–vOÞZÆš±–ІIð5£lµ@A š‘âð—a” ÂR5ØÃÏÇŒVr–Ý­ÆmT ®0cíüÔ`0„36“ù¨2¡Žæña×f|0qÏJ ž]Ȱ Vþa°[[Ï<t&Á)f¡ û,Â3EñÑ hfø93Ø6’;¨qRèm0‡}*ghËxâLÙëðKUÃ;¼eä½–ž4µ ð°lúï=–KÐï`VŠ·f‰‹£ W–iáq‹=öðz1¦- ¦Š­ÐQ(aÕ4¸…p‰š7VÀ„£žÎÁé0§Óù°Lø¡jÆ&RÂÐÇÁÖ¡ÝÃî “¢î|ì9&µ.Iì8–FtTl§#íjñQÂBÈ2ƒ÷"Ìía  ­¡ŠÅéð>³ôÏ{¾±E JÜÕB£Fµ¸\¸©±U[š¨à§+ŒSÌ ›«sÞíØ„Mãûã'Èà”:#lŽbrYg/Ä@8×Î6 t|,r£LD@¨ &j.õ|ÈÓ¢ž$ÇùQbÊ.(€Ïè9Îç½=ÛÀqÐ#`ä&YìòÂ*¶ªpy¬ Ýêú§âØ×\ax–^Ì9rìbÌY»ã€…=nX§r@Ö;ábÉ.ö‚ 7ün´RÓÀ°Ôe(²—)„óKIľô‘DT!=ˆœ¿6r*5¡èÝ9©©°CøåŽÅ**ⱊO½‰¸e’`yؤý$Ç)Ŧ p:Τxp×K¡ßö4Vð5kè ý gž 2^ˆX‘ˆAT0 ÁB!oHü¸@ÜO¾¸óþ_JèSk3‚å`k­‡=Ž~G ±‡0kÀˆ°‘Hk`ÑÙ„›»ÀøMú‚N™Sñ|¥¢sõXÊ.  ÌEÀeú&—ãŠ0Žq\.|Óh ‡@LÇK©‚]†—ÛíÄÚlŒB};¬ e“‡L~­À›±8ÃXœëv,m˜iô~ñÀ’–"±‰¥þXêß¹ÔQÛÑBìEcí9Ðf´Ž(¥µÆ® k< ¶‰r!6Ñ/Ì&*FØDËH›(ªë`ÑÝ¿´õ}PØ»èï- (”6.}Àà0¸ûÄàt÷/Åà–9ÜvøïŸº$’ùXÂúñy*Yb.D5Öà‡Ñ¡€“sf2°leLnjªCZ*î&'H7~‚F'ä'©­`¤äZÐBvÓ“v?æ?= ft Ø/oOX=&I֠ǥÌEm.jýxm‘ž/óͲ¡>¡B~Õc*qx”b0›ªsŽ,C]°öÿ2~ø}aÇüÓo´þ(oÖ~«ØOþc\ª:¿™“uøàŠõ/}9%ûݶcÀŸžÎöA¥Š‹E’‹#*Ð(8ž§Ê¹¢áÉ«þnÌõy= ¡ÿQ$þ`7VKšlø'›öI±q6ÔÓÌ@dl±ÒN VÊ™`¥›æõöïÆ6aÛI7ü ¶é%ôµHæ|áh%9Ux•›€½Ñ"·4oq§"ë5ã+~ØÇ~©TªT|‘ce¼Bwâ#´´ ¬GúߣíƒÔ`à&n+ÉdãðúT:ÕJYaý&Ê {)öRçƒÝ‡Fnåƒð gFfeа«ðhJlh¤7aø“F[I&¯N[ ¨7Á ±RSØ_RÜ_– [ÏšÎ%É¿«8ˆÿ„Ÿ"ñG«@ÒÄr2ˆNü9Ãd(ÑØá¡yYs#ÿòô´Y‹m»s~»°dÔ]~»àÚñÛ…½ºà„úÐnÌV@öv®ïq‚È8Bz™’NHŸ  K$$ÚÅò5!Kòk ï€ìù¤ä"H-ˆ™AN þ Ð÷Ðs • ­„ Üü@B ¹ø¶ß €Ûe”ž˜(Z"¥¥& MÁYn¤$2…ÊÎN¥¡"šÔBåèêîîæì ”£.ŠÔÒ2•³§_ 6°»—«ƒR&¡H/REIŽžšˆ˜ø¸èpZÔG”TåÚ½gßa£IIŽ ðr±SH¡›0RIIíºõˆK™83cæ“cõ íîá¤â‡!´ÌÞ+t@êìg×<¿óÄð„0?7{´T“ZæèÓ{TÖŸýT^ßbl7¶µ4Ö^G¤;·¾¼hÚè¾~®*Àô"%èÜ^#žÉÛ]l¨k12L»±µ¹¡¦ââé#Ÿïذ|Æh}ˆÚQ!AÓÞ‡Cg½²óØåZ0:Ò^ÕÖÒTójɱ/w¬_ôä¨î®J©h«ò4ý…‚ï/Ö4 Vñß¼ræðßÞÊIK‰Ñ¸©DKÁŸÏí8t¡ªÉÈH™êvcË­ê«gïÚ´bú]€hXouè·¥7nµµCŸhÙpóÒ…¼:oBROg%?ýÑ£[¿>{½Q4lk®-?ûÝ'—NÑGëa/§C‹GOW4´¢aM{ë­›ïÝœ3sTB°Ú gãMê»ø¦C·6T–|÷á+™ãú…ù¸ðîô†Ùظ³¹ÍH«Ñûõ×NýîêéãýÝìdüöàÎüáRucs ÕB·Ö7×ݶœ)ƒa*ès_8¿‚×}Tt¾²¶Žª«®o¸Õt«®âÜ·¬1<ÊŸ²/¹ zqÕö§/_»V~µ¼²ª®¡îÆ…£ŸæÍ}4AÛ †³ó‚',ݼï‡ÓçΞ:yªäREum•ádá¶ÕÓ†FúŠÃžúÇ>š½áãÂC‡|õEá¡â²ò›UçîÚ¸`|¿O9?‹ó´ÜÑ·wJúšÍíüøýw¶l+øâhIù͆3v¼˜1ª.2Í8þáÉ“¼°acîšËW¿öîg?”]»Yy±øó-+§ é% {æë®5-kÑ‚93žz2mÞ Û¾(¾XyãZÙ‘O_ŸŸjZ –…³oÏþ£ÆOœ0fXròˆÇ3_þ`ÿ©+×oNÛîHhŠ¢Íxs(… ÔMÓ+a`R¿ØÈðÝ  ó7|RTZ~£ ;ÒŠAT¦P*¡U %U:yø‡‡k|ÕÞ½‡L~öíÏþñóm˜ä„¢Z$R¹ÒÞÑÙÕoIË”Žnžjµ‡›“£“‡&æáôuïs;F¹EÑR…“›—o€/î%ü³ƒ£ƒR!W8x%þ%;ï“¢ë¾-+¬X%âå*§n¾Úðèø¾àerJ^,“J$R…“OÏAO-— ˆƒÄGqp÷ ŠJ2걉“!3R”„–P'iò:€»á^¿rzÿV¸àNðˆ§&²ïˆñi™‹W>Éó$LÕÞC@y¸ J) öÎêàØ‡Æ§/^÷úæ÷v7r –Ï‚ìøÏ7ÊKì´ “Ê”ÎÞ¡ú‘S¾øVþžÂƒEÄœ¦DDk»"²W¨œÔ!‰ÌZñFþ¾CÅgÊ~†¤~æv8›WLÜÓ×ÅÁÉ3(~túê·wÈËÝS£K™±jóž#ç 7ën5·rÖEXËë—OÂÙ¥ññï5èÉe›v-«¨mj…0A<É9[ W+±ç×2Ç&„iÃôf­ÿëáÒŠz&–ÛóVoí=Vf0”ÝýæÂ £"b†N[ýî×§ËëZÚMp+Uó© !ÌZûÞWÅ%e§ºqáãÉ1ÑýÍÊÛuìRu³Ñ÷]orQ}ÜÜÜüÂï}¾ý¥9ãô‰ŒÝÅÕò8EµåHüõð@ã½!Ç~'Gc3»f0©¹–5µ7×`ºËìHwÖÔømj¼["µI¼{„ÄëÈ'Þ»%êªÚšªëwHì¶<` ð'Ü™4Ô~˜übI'~aa")ý"­LäN”åvbÓÔ™ûPîÍ®.6äˆV¶)äHœ( l È•co¼§¬*ûóÝPå÷p=m¯§üEñn§­–Û©pÃüg/§M6‡ú¹‡»é-Ûó·KËÕôÇ{½š¥x3=u/7SþžySþžùì\ xU–¾÷¼¼,•ÈÂ’,@€$Ö$aGDdGq‹ˆ ˆ²È"*ˆè ØÓíà Ú:dfB ߢ/ý/Fú%MÆN>cwˆMD\hä½:snÝ÷ê½zkåkf>}Þªº·ÎÏ]ëœÿTó¼Tcަi©`ަY©F3Í’RA3ÍrRá[˜¤¤$jŽ‘rbšf)8SÍ0R ®ž‘ZˆI†e¤µW8F!DÂ1ÒÞaé(qͰ|4- µ¨}B“Q‹šÒʃšÌÊs5'€•çN"¬¼f¶ýŒ¼f¶ýl¼°~&^³å¾^³Û>^Ømß](M¹·y'³òÏa˜ÏÃe¸ñ15Âó¸ë’ÀFQîš´ì¬P3ì["Œ®ÔS 4^ß•Yt^ŸÈ¾M4ûÎ ŒÄ¾ûz¬Œg_-õ³“±ìâ³þÜ^aKýɽ¾ü(€¡Ža> D÷Qìü÷݆(ù}³tK"5&ïËï#Yd~o%ÂìÏï­,ÊŸßËB~oeQð£øV"óþßÊ"P|—¬ÅwUmñgù²%>,_öÄ×ϳ’÷Àϳz†èCï! 6 ÐÏ 1cç/ôô¢ŒkBwõ¢ƒ-¡‹ÿêïì)žµéåí)—q€åþM–ÑáëÄÀàðu¦¥;| ´Í4‡†ýøž…`G?¼îÝ?…q~ ãüÆù)Œs³½]íìÿà‹ýñ’ò·dÆ)àÄN.LY‡è°ƒB cš _“.&Âà«.?•Åéü·®ü—L¬¤¾Ÿš¤¾ÚsÇëuÍ… ÂKsÑ`ŠëjëÖÍrf®¶ý“[²Ÿ…çµB*<¥%&×–Î’Iû<—2áˆ,™Ïp4–õe Mb…DhK†¼9$…eìl(ú*î‡b¯äJ„â®äˆ¸|§‹þÌ• Ðhë×>´U°>#eÕx ®Š ¯©jQ_o’*˜¢7?•ÌÑCM5æèa¥ÄÿêµA(çá¢âÓkϾíÙÙú“¡Ðý\C*°-ì7l‹u…žÆhÁ>É5»°v-Œçaœñì¢üzÄ@;Ö&Ö>¯•‰ÊÀ¶OÍZeÜÏd‘ár2je‘gø3R+;'ƒñ8Eû³ŒÞâ¦Ö&¿±üØò-A@Ö¬M¾Zü:X»ª̱8s¶9œQˆ+gªÃãüÒ»2§£^ô#¯L%ÊçC^e¡yeÄ[ÅëéK>Ü•éŒô’Oe*¨Vâ¯þå.y+ë×^4\õQ+n$°Zw.ø1XæpªQêy˼ÇëCïñ =Îþ“äEiÃÍðò}P@r V–Îp-!—¤\ɸ®Õgý{^kˆMl›})·¥‘ÿư6ù>ÉøÞC›=Rlv Çi‘(IˆÅwÉì0¥Ÿ»¾B^Hi†ëz0¥~>PM|;÷¾Õ÷ß¿jÍC­Õî¹Ä;ò÷ßx¿¡vÿèêΞ۳÷i.ÝŸ½‡ÁÎó”¾gð"ïÏùc%*c›+ÛKe¥dì½O;EmkÄØ¥»)­ Õ»†ñ(d¼{gƳr¸–ñáÃû+Ægô¡4€ñùÿFé}Æïofü);ãë_c|ËŒïýÆßyƒÒ;ŒΦTÀøý?5“q;¿ñÏÆ¿>E©Žq5›RÁ ËF …”®0H<Æ Ïr¹Sz‚Aá<KÌü/K, 8Ã`õLëÛžî’Ož!l•hk~ê‚É+öìç¹™CÓú¤ÇPB­6*ª[Bò¸w¹çÎikÇÜRX˜hEN\ÊðÂUom[X˜7 ï¨n&QÑñ©súÌÌ1p@ƈä0¨öºð;Yî{±å›‹š5@SQ“vvç[‹Z yÓ÷ãš³~mm†2)Ûªþú™PK[¡U-«©Sin8ñ;VþÇkÛJ››UÚ¹]jQšÔ¶ ÛUf³•65«€ ©Uivœ°±ÚŒÚk6¨pZ•Vç [mzíVk+mmõÜ !^¡$,Ä¥jUVÛCxp}\²Ñ µm¬VtŸÜ‘Z§ëLò2ìûÚ` ãi¸h×ê×ÙO§Þt£œï9d‡BCƒwÓ”ÊÀýì J¿^ú ¯%¯2ìÄÀbZ,µDjENLQànÆ‹j‚÷%NÜO Ò`oð \¼gN|ÞÊLü>/-³ÊÝÓì(;Ñz9ó²³µ´.RÛÖMÑMNÚªy.}ÑÍ걊!r¶F·:I£ç–̯!¤kÆÖ¨âàÀšš¬¤,èÇûÃÈæa 9Ëó` ù0Œÿ¶FHe%¦uíšÒip–Fü‚O~ûŒyã¿nÈ©,KÔy‰ê±3æÿçßoN¿Œû²À¬×>¹ó4ÞµKýσ&›èlËEÌˇp”Ø+›öŠðDÆmÄÅݳð3ꀘ̓£]šû¾„[¶Å Û𥭀öŽÂÓvá3%‡pþ?àµ'¨¿<+ýˆœ-<‘ÁdP¯åh`aFó)¹¡)ûpÑìC¸¹/µ;þ1Ç­Ýš‘âX78QÀ‡ AÌG6 q¸¬!ãçÛ§/|áÈ¿ûèÓO>Þ5ܺùÎÅ/Z0aæm–>¼¤[à*CÕÐ)oÙ?½ëºß·ì¸m`Z÷ÄAYYˆýú!zWðq¨ zt[P?}Þ'ºðß÷ LÏì›­W0@ø"Ùˆƒ!º+ð b«DGŒNßÿÀÓ'O5yzé³oczÁ¹p‘)ÉÙËOÚ´î¡}‹Þ1;Õ,"»ôŸ<÷™ƒÏlŸ[<,kV_Ó¸èÎý‡NÌŸV0zVáˆÜÛÓÂâÚkÌlmù(OáMHCQƒvvç[ŠZ yÓ÷㚲ʬMpPJŶ¨eõ™õêhQÖ€Ô©45ý˜U‡ÿñê¶MM‡[Å«¤¥A=Z‘Qq•UThh8|NJ­J“ãh«Î¨¾V!'Ý€¥Åy´¢:½ú «®8ÐÒâ¹B:¼ BIXˆK T«¬º‡8ðàú¸.d ¢ªÛXµè>™ºj§ëLò2C^Iu°†q‰4\´kuëì§SoºQÎ÷²C¡¡Á»iJeà~vP¥_/}†‡W“Wvâ `1-–jòJªENLQànÆ‹j‚÷%NÜO Ò`oð \¼gŽ6žc&~ZåÆnŠirL›aÃ’‡ñ«¨ËøY‰% ç>ÌYïÛ+{íÀ3%¼„¬¼„?AùÕ| Y3 vEÂúìŽÇôÝø`ŸR#Q|%IÁ¹ÔeìÁÅÏŸÀ9;qÿ““Ðn˜µ~ú?qÞÛø+ô `ò•äe¬®Æc"èA@¾šJ×’Ôa¯áÒEe¸á#üÚáØ¿¦?Bv}%⣮B\õâã#>¸qÍĵˆO>‰¸NV]òÜœeÏü磕Ÿ~rúgwu¼‚a.Y¾½táèáÅ5Nnì®W°•m7[E|îƒo”Ï<øÕŸw,Z=¶÷JJyÑ,¾{·ùõ³Vž?ÿÝï›0mܽ:~¥p3|*X-Ü m[%Ú:"ëïWn¶}zîýîºwÙ²øº¦\ˆ¨Ô¤ÁÖ¾±fݪ-Kî^°¤gxDvêwÛ¼M;wmškA΢ÌðKt|vÁÄá“ÇŒ;qì¨E!í•¡÷¤Ü½bãÖÕk§‹Nkgw¾±¨Ñ7}?®>ë—ÖzØ/¥bÕ_Ú3íêÞFhT÷W‚Ô©Ô7*g¶ð?nkÛ[_ÿöñr^.µ(§ÕCÇ3Ž_eÇï=}úí#pDjUꇎ3[†íÚq8â4*ÎCÇmé¶+Ìv|oc£çNPéð‚%a!.-`S™­‡8ðàú¸.d ¢lmÌ&ºOÖÉætI^fÈ‘°k—HÃE»V¸Î~:õ¦å|Ï!;¼›¦TîgUúõÒgx¸‰°g‹i±ØÈ‘°‰œ˜¢ÀÝŒÕ&ïKœ¸Ÿ¤ÁÞà¸xϪ?ËLüê÷î·Ê]SïØèì7™ß8ÏԶõéèÓNÚªy.}ÑõêÛG†ÈýÙÝè$ž[2·¥ ÃâºbܶÖA ¤òžÐ zCôá}!2 Sð&Ð#â¹@Œèf“vôBìͽ<“£šÕÿ ŒCpa>˜JsÄŸ/‚)¼£È¿æä &MD<ÛS{öìEÖÒ,è蛞.þÆAÛ³ˆ÷ç¾Ø+:–jOIå¤ù¬ÐÜ1 ±OÄtÄŒ ÄLDAãõÔAh „n ‚¦VPËUG¹–=p`ý¡kÛ~4×þ £‡h~ô¾÷`ùM¶ZoŒ4íäæâ&J­ÞçÜ2kslYnú–|áÔåÙÛÞÒÞY(ö¼Šö·D 6¶"×~­â--êZ ®´Xn±L ÖzÊâí,Ö®2{‚8XtØ­Ì"‹èc”Ð ³íÌngv«ë v'³“uuеxœ wèêƒ@å™ÛÎXV«ªz2¬«O×…uéµÊÞ˜ÇyºÙ1 §£Qú py ë¾ð/î;y”¦™°“iµ 1îž‹Wµõ‡$½ézVñdM,+Å^\F+Ù^\AVÉ^\£Y§ÁGÂ(Í  Á¸……qPÌÇÃ>&Ád>¦òip+Lç·Á õöü憴F,((ä^¨¶bÄñã'ðü~*â´i·"NvkvzE‡òéD‹g8q=ga”:Z°´BµHän±àåqqÂĉ“x@( cÄÈ‘£ø¨?jz ÇŒA¼qì8D'¸¯N%³Fhk(5‚š¬N¢‹Ë“§L ¦94£n„kߺ ñY¨î[]Çó7mB|qóDú+â6‰÷µ/Ž”SkÕíâÂ„Þ øP¦ÞâÙõˆ6 †nuàÑjq½`N/}~þæ‹ðG¥íX_|šR£÷9w¿µ>vn¥º[†J•ʼò¶ÝZðS)Ï;Ò¾[sbä–_;²[ ߈+-(T`,Ó¢>ž²ør21å*+O‹Ž‚r21²ˆ1F 2ÛÎÊËY¹Õu†r'+&†®Å3LȸË@W*ϼ\àŒeaµº¡ª'cÀºút]X—^«ìyœ§«‘z:¥Ï—²&î ïñ⾓GÙhšÙˆr²'åBŒ»§ÄâUFm½Å!Ioz†žÕD|̇|!,â‹a ÜÅï†{øRX÷òåðwü>Xñÿ ‚á³8^½qöœ9wЇÕ<>Ÿ8ÍÂE‹Ä³lÉ]œpô¼géÒe|™z¯V]!žc3ÕYôûÊ Æ¹sçÍG\Àpl[„¸xñNšÿ—½k®£:ï{ÎîÞ‡dÉâ0c"3C@r­k¦…aÆcÇÿ™W“tB „‡!t i'1$€šÖé 2æ]0òccÄKñŠ%¹QÚpsÛÞªîuëÚ‰Z\·E‚i1–®,íéwÞgwÏ^íÕX‰ÝÑØwïÙ=ßï;Ï{v÷w¾ïSpQ*9ò¥¹ñÆ›n"äfzú¨:ªu Ï‚¬E‰Q DÆ¤Ž›4|ðIBÒ¡š‚o~ïªOòÉF òªÄÍä*Ñ“6Dë JÇôJU¼ *ù"!L!´;¥†àStðìà ƒC÷D¦¾H»Ýâ7Ñq8agéoòq+_· Ï9·oâëŸ#ùº…ås_wîà‚†ùºK ’îReXôÊp—Rù>eiÙ¯pÙ´ÍJðc$[¤áºö.F¢{#ݬ‹óÅ€µÒ“&U÷)EMJþ›—rV,´Óm÷÷ w~¯Çºá‡ñ#øQü˜û8þ+ü~ÒÝ€ŸÂ½x£»ijóÉ"I@­ƒuðBÖ£õÁƒtuzèaô0¬U>öex‹Ò“ðôœnÄ›`5ë Ö…úõƒ„<ô!?LÈ#Hbx:Y¥a%[uÙe—£Ë'ÉW\‰®„÷Xv¦YE€.'ƒÈôåÔ8„î_К1ôiŸ¥ÿWÓÄ×Ðêk9v¹þz¸t*H̲èÃ9ú"ï|šÏÈ|x¾ÿ!W_M}ÂÿÝ5‘FzŒ Cܺ´“ä¸Lº¾.mÆ[ðÓx«û Þ†·ãgÝø9܇Ÿw_À/â—ð˸ß݉_Á¯NlÞ¼,¢„0ÑI²uë3ø¸m%Š0°ä·<ý4¡â踯ÔU?.äé h+âÁ³tÕÞEõÑë/@â%šx9è§;á¶÷ yõUºÉ¿¥FÂEÁ=ïÙ„ÀÿçúyþyB^ äÅ yé%B^&¤'!;é=Â?ܼe y:ªà`=ù4¼¥“Í u3±ïLS8†ÊK4Ú‚ž6Û>Iáp«`†dj;ï1¸ÏÙýô>Çj^$¿ó 5¢Á@oèõú{ºàã)æPYï=É J#¾O‰… ÎiúLÛôi¯%*•(Ç´,Q©úú¼¢Ë­Ï´(ÖÜXž‹Œó Á¤i37sm.7”㉚St8ŸæYê¢ÜpqœwŒß› ßÊæ-ÄUFŒÜâXƒ°ÌXSEYUÏÒuAqËšu"k”„Œ7M÷8ª×>Ý5‘FzŒ® Cܺ´“ä¸LºÞ ô&߸Åbã¯ÆðDÙc$ ‡ïÀê1 }}r Ûj?qdzÀQ  [ý_º¥„4\F°î6¬aÐ`½`Ù¿‘›Q(XôSbÞ“Bnàö³2û!uõNøI6€`Mu…•Ãìè÷ÌïïP fkµS2—­•NAYÎêhضïÔJÆ9EI/Ýõn­w9Ç2Õ`=õv]_©¬ç,c–‘ZSÌ 1Û:lŒqyAµ)bÑð[Œ¬/-¯£ò $›±Ápˆ‚£MÎ'Êúª^ºM-)¤u+2ôà%B…CŒà²’;TV(ÒÌB“;êpÖŸ ­v“¾{îE÷"æ1¾ƒ™?þ.úKÌ<&pb¼èAüb¼è1üøÉA$øó¿@©QdF¨FËÂdâ^Bº»éc5DïIß!¤!êö¡ÎEÔIh¶qªG܆+y¢ÏÀYƒØmï:úü‘ù}ŠÔkî”d^k¹S°xó;¶½;µ we¤%Ýd{Ü2êq9í2àÂå ‡º›ö”Ë=œxË2žgŠùa"fû† Î-./Ø'ŵŽ£Î-‚õ¥ç­Åå4cÒs$›±Ápˆ•¢MÎ'Êúª^ºM-)¤u+2ôà%B…V‹à²’NSVy(ÒÌB“;êXÖŸ ­V“;4྆_Çoà7Ý·ð÷ð.ü}üwÿÿÿ^Ž~‚‡ðOÝ¿Æó»–CoÂ2:$z dRÊ¦Õ «Ük„¼þ:]÷SW½¯oòJ!Ž^÷Ò ø:!o¼AÈñ—W uÓÕæä˜6ÓÉÙ=K;zý=ó{;KÕZê”ìTk±SÐRó:¶o;µ ²2„’N¥kÝ"Zër)d$…‹ÁZꜹ¶X\Ë™¤,#.¦˜×"böeØ ‘âò‚NQä‘áf!‘"X_ú©Z43&ßDAp@²  ‡hÚä|¢¬¯ê¥ÛÔ’BZ·"C^"Yx¢.+ù!eù†"-É,4¹£®cýÉКhÖÆ7©ÿ9f‚è|/64ðZô]Ì4ðý¨grÝš5w¢9À`0#@°.ÞÉöûÁ'ߟUO»Jåª9Iö,’‰\%'XŸóÄw~H»¶«T›zõoW©¶$9F´«”M.WÁë½P@7Ô-ã˜FSžÃøˆˆ–«Œ»$Ý‘ d(ÑMZoåÂÙÍö"BÒf6àÛc·yÒÔ3BÌáõ–ˆmñ2,|Z¼™˜8Ëk¶tP\ÔÖ7ºê™p$·\´ab¨L%"ŸVN+›rðÿd²ñMˆy æ€6âM|ƒm˜²Ý@´?‡úðóøô"~ ½Œúçsˆ9ÄñDØù£lŸ?²>ù¾¬âÚU*7œ“lÒ"™È•s‚V:O|絟a»Jµ)n¡]¥Ú’äßЮR6¹\÷x¡m%È(P´x(Ø:Ò„+•©!™ÁOµJȱbš)q¶BOu‹X •äx7Ñnh2ºtMã!—dBØ$b;¸ì j(¯¯³¯wR𣕉”—ƒ ô÷éÁŃÁ†}-L¸ÜYž”üä`ËÁ„+¦I½ýŸ­Ð°òðxL •äx7£`2J¸t ãñdBØ|ƒ¡¿%(K©u‡CEƒ¦ëèF²ªÓ#×Ük M[È5ˆaåÐ^ ÿ½C{ctÈ¡“½ŠxìØˆÛd¶†‰ÃÕóÍÖWâ2;B_3“.ÀlÉsñ¥0÷å˜ôàR˜t-§× ¬€ÜA}Âr`ý.Ñõ»´¼ÄSÝ¿y½‡_ü>²¦Ñûjñ~ÿ}ø‡¯RIe¤Ô\¢¿mø‚ß6ˆ@b¬Û"D—ŠR‰. ÂoÛqáƒì€”üÒ˜y ‚™8 [zˆ[‚u5½¸Ú½YÓ^·þ¨k¯V·§8,õ8L?ªÆ‚ "ð™°^¿ëuÂÌ¢i1÷,ÛCÓ»—íFúlÿ²ý¨¡¼ÞÎÞ6v^ê¤H+)..ëö´°ë‹‚u»[˜p±³85 3øÉþ–ý 9VL“¢ÎVhXgxô¡…Jr¼›¿n ï0¦[zŒñh7² !l¾ÞÇØÐŸå“¥Ôº‹Vz J.dTU§G<°¸×@!šÓ-jÃÊ¡½þÓöÆè>C'{ѱ¥Èl ‡«ç›#¬¯Äe›½…Þf&_*ÀlÜ“çâKa6îÎ1é¥0÷äøõ+ ·_Ÿ°§›1&+Ù?r¬ /˰ŠO½1T骰3x&7Îàq=1ï¸âÚ*¾ó‘¶MmóŸ‘4ƒ,Ûÿ¦ò¶z;ÙØ¦/,ê*ÍúÔ“K«¯^“ôiG“ø¶ü„ª¥Ï‚ë-øY¸9ÜÎ’7 oqð9µs°ÜUfgT‹>ƒçÈļãŠk+ö©Þ3"’f(ZcØTÞVo/Ûô…E=C¥YŸzriõÕ«b’>íߘpBµôYhX½ ;Ë7‡›ÃYòJð®Ï;SÛŠ]EvÏ5Æ<ò$æW\[–¶MmXž‘4c„™¦ò¶z{rئ/,ê*ÍúÔ“K«¯^“ôiôøã„ª¥ÏbvêÍÄY¸9Ü.žG_‹îÃ_ Ø~%ã,åžÚp8½2¦ìŠé^V8äbVí¼0_v!Cóä'as+Òœ£¼ Ãؾ)”3^ dNkš×Cª˜†A¤X?†ô¸É¯P™TÝ™â¬ÍTPºãG¡ 0Ñ”,E¾s&†N ªË/U©K*ˆ[Šßç²°’gÉ +Õj\ ÄÎg+L¾ 'wãTiØÑ&å šëäôèG¦A(reÆöÇxì}£q4( `¬¸šÀÑ0©ª æËÇ6yÅÔ›¾T§ÓÛc>Ö±¾>^X®÷y_©Àïš>áúeø]s×V8œ^S†t#/«yæü+dhžü$lzä"@šs”dØcÚ7 rƹ̉cM›ÏzHe.ˆëÇ·¹*“ª;Sœµ™ JwBâÈ ´1"š’å£ÈwTÄÀIAuù¥*uIqS]ø]Ó¯³ä•j5®bG¬•&ß‘»4ª4ìˆøòý~×zô#Ó K0cû‹!ö¾Ñ8êE>+®&pÔo;@Ô²ááXjYÅÝ2O!Cóä'ÏE€4ç(/È0ë³ÓÊ9ãXæÄ±¦é`=¤ VDŠõcH›î •IÕ)ÎÚL¥œy„(tÑ”,Eν‹!“‚êòKUê’"âŸð»¦_gÉ +Õj\ ÄÞI+LÎãK>_•†FN¾žÀïZ~d„BÒelIÁÞ7G]…gcÅÕŽ:禨‚šg,Û&SoúPN_ëŽùXÇúú4za¹:Àïš?‹£j%¿ë*Á.x÷^¬\T™*î>’?IÏ<§Ò{ûipmto~/»&lÛ¤”øc£ìÁnS†ï¸Ž¶ÌšÇäðTÖ”µ?Ü4Z"%]>^¹NKLت¾&žoOIW›qþ(EÛkå45?\ËÕ¦O#êÅÑ#¹#S£¼®Ù§W‚âÞÜÞ`{å÷!µ=»ý>|qå÷FN©#»ì:¸øàüÊäÈ®½£‹GYbä0:œ«¶f' #AuÔEÕaW×P]™¬ŽVk k¢ÙPÞ±ê(dΫ´¸Æ„š¤ÐTu~ÛhÔs>³MÕùQ¸Ô\›pj5§FWÓšë5Ÿ†û†œW1¨/Mq\'‹RͰ`¥”NVìFze:½­©êÚZWÝ$ýFÎÿ±÷n¿mY¾ð¾“Ô5vÛò¤ŽÓ™–ÄÙLwÒ²§Á™óø½ÌÃüß_08@ ~r`À8O‚цgÛȈ!£ÀøaáëDÀ%’,Áº·œ„ųVÝ«vm’rìn'mت]—µVÕ®Z»öZµ«~l7-âŽËVx'û]Ërúœ÷xúäA"n4¨©ë hPÓªAÃÕFµÈ[ÒïšjÍPÓuú“@†4>¢.C6¹œÝZ¨t+±˜˹éß–ãéÅìbüïåsåöWßîæv!ê‚}xí _@Þú\nŽäq'ྕˆýú°á²Ç·* ýÈá;rwÓ¡óaÖQi토Âá.‚Æ‘Àøæ¦(Ì b«ø&óõÖš5;ñžwÙ¥åÛ8nw¡Özq}7»Û^§÷é«ýw¤5—‹ÿXþbÌüæÀò©ÅCåxqúä44mqúÙÉgÃåýÅé¹õ“ë$²¸íng«l“ij]w7®n„nõÄ.ÉÙF¥ÁœýêF•Îô œZÖªn@¡6"Q'jW7P›7䨰ç6Òæ@=ÜH›i×õ%e&çƒ%ƒÆ÷H.Ø7z¥›Ü¡žÚ:ÔQœœ“âŽËVx'û]Ë¢s MŸ_“ÅsÅö—_?Ï=‡¨ ¶ôa´yu\š›¤ñÞátØ/¸.ö~­ÒÐï1¾#÷ :of•Ön4+îHa Xmn¶Ã˜ ¶Šo2¿éPo­iPï9q—]Z¾ÕÈ6Ú[]¨µ^¬?Ï>o×é}újÿ)Æ_âšíµâ'»–¹s`ñÔÜ¡bNÔ.ÕQ›ë0ÒbUt®Yý=§Ñp86`lਲ਼‡ ¹-Â"˜SÛ—”II¼tR” ß#uº`ßè•nr‡zjëPGqûx…9°aw\ö°Â{<ÙïZÎ<}ò ·ÔÐõ4¨aÕ a‹ê £ZdÈ-éwMµf¨s`²ñÈÆGÔeÈ&—³[ •îbå1ÖAýájš?ìóUo—~œN±<tH¬°÷™®¢ØJ§~ÖÚã«ö1ûÜe;¨5”Bk9ÏôH[ööšûël ÜVQ¥5Çå]Ƚaìû ñ Ïe 'Ýâ±Ja¹0S¨¶ ;…ÿŒ/¸°I^§ŒéÉcMjEͶ0ΈFR’Œ`àR»‚ ‰ùÜŠAü£é_*T±nìðà§CxºÂ·Xc:Õç>éÑKz÷¾Ó¡Ìe]îƒÍÝN¬LAš:®ÖÿJã½fƒ$šÇÈUïš4)R;v‰ÔŒø¤å­Þ¸avIó4}¾öîÒO$ÂÝ”‡V‰uþ>Ó S~Ú]~\Ûãß böÑÍvŒh(…ÖrÚæ5¶ìí57ÙÙ¸“©ñIkŽË»û™¾ú{ìâ3žN:œcåÂbaºð¬°^Ø.ì¾]ÞÎ.oÐì’æÃùü €K?ÔGN²8$¾6ô™îòÃÛòßÿ‚a³O¶c/C)´–Ó!¯´eo¯¹ÓÎÆÀÝ7õHJZs\ޅ܃óÕ_Ëãð”ËpÒ•+æ · KÄzyþÏh˜† bC0¦'5¨#5Ú©j¢ER’Œ`àR ‚ ùÜû@ü£é_*T±î¤ðà§CxºÂ·xQ:Ì.˜Ì±d wï;Ê\Öå>øÊØíÄ;¤©Ãájý¯4ÞÃXƒ±§‘«Þ5iR¤2vì©.:øñIË[½qSïèEšwt–ùCûÿ¡nÔÒ÷±/†ƒÌ}h=þË-«CÀ=Ž}`I¥ä×áÞˆÖt§Ð’Žä ŒO‘!n½¥ýÿPÚÉA(|§mç.Ò¹¤#äiŽÐ癄WÄ‹4ô,39÷ÿ]Ý‘£obŸ;™…Öúöß-{q¬67êö%•’_‡{#6ZÓ:8@K:’'ÐôD†¸Y4H÷·ÿ]i'?…î‹8m;·BÏ%mMO³5Ù¦½ãϲ·úþ¤ºõBß ÂÖjÙK°õõ¤eÓ…õµÆß›ûÀ’Jɯý­éN %Éè["CÜ,¾ó÷·&•vòƒ©¾ˆÓ¶óý¹äëÜÓ^ç0€tõþ‡Ø#á‹Õ–9›É×7Ø“Ÿ»aåoÕ»Ê6_uEIý­,už`³±`Klå“•¹AALK¾•ßœë|ºúen…`\ìò™pÑS”®¶ªãr“1¯(cÛÎlV”dKÿ-{_Zz%¢µ‰ZÝHˆÐƒŒ2Eó!˜À¹!zx>wÿD&èÏêît8õÙV{zªÔ>Ûiß/m›Ÿ½hß_|Ö„4æ“«_“ÿSE|/šéÖ<ˆµ Vs0¶1ÇwtNz­ï;x]Ášíéû¤w:¾?éObÒlMO•VJ^ eÖ6+PÓ›ƒ§G|]÷ÅjBŽ@äþ;›v3bÏ©ünWÙL«®˜¨?á£NÒìU(Ø1ù›Âü´-Þ ¾•ß|ÑøtuÇüˆÎ¸Ø%ä¯ÂE ºÚª…opÈ­¼¼¢ mN犒lé¿áí BK¯D´6ñzT·«²!4Æ £¼ùL`Üv¹úUúô@Ñ•h¦[%OĪôé}zNz]ݶñº„54ÛSwI îT|÷š #ÐfkêÖìÒ¬7‹2«e¨éMŠÁÓ#¾ËúÂ[ΑSvÜ?e,ØÙ)PÙU¶¬ª+ꯡ¨oHf‡¶ÄvGþš6?ŠŠ²oå7ßò>]½0?¿2.v ù;ŸpÑóp®æ•û‡Ü0Ë+ÊØ¶æš%ÙÒpÙ„–^‰hmÂ6Q7…²!4Æ £'|&°@nî(’§‡˜&Ÿ-¹7ÂëŸÕÛ7®—‚¼ƒnάkŸ=oßœ‡|Ö€4æ“«_‡ðSE˜šé–à™i´ V§§±1|z4Nz}ºláukh´oÜ$5¸7â›—üK†4Z7®ÏÌÏx3(³´VķУÖ[Þçqôå¼å?wþ7ºÎçÞÿW‰–ƒÊ'S™xÕOÕòµpÊnÍTàµžß kÍÓ[3ðjÏW¢Í½}ô0ÿ0ªèÔ£ü# (aü~)_âñ‡•”Ÿ†G ÏNM@‰J·éÔœZŒ„ZˆA€AŽz4>Ø m¸ºìJ(#,«¡ó`’{XìTP ²9C%àWk!ÔBÇ£|½‘R>W‹œTJl 8Í:§ñF9 ¡æ ¥ÏÒ~#7œv¯ø³“Ó9vYJgN“0ø@_YÈ/E€xm%¿”+Dêùº_ûag³‚­X‘©úN~'¥¬r4ȯ}ÏR•û“ç&eae*?%SSµO…’VÁ ÂS¨‰2…Ê(S¨Ž2õ°2h*$±„©õ ,ª« X•’‹Ÿ¤´ª&§‡§ìB™P¹P&O’§¯-åOne¦ÁT¸UÍWÃ[îTkº fA~#¬6'§Ö§Á4È—£½Iˆ>|•IôÜ>PÌbüîl~–Ç”P~V.<á6%šE°D§êT3`dTC  rŽÑ ñÁæhÃÕeWBaYŸ>“ÜÃb—`:²H¨0ÀÓ'ú(¼j )¨€  Oåëœjô¹jä¤RbcÀ@j®rÚo”ÓÙéÁj.Qú,í7rÃi÷Š¿.pmÊ Ç.KéÌkÁ5| /Ïçç‰"@¼º”_ fKDæWó«~õ‡í2¶b tD¦V·óÛ)eå» A~õ{–*ß½vîš,,ßÊß’©[ÕO…Y­‚%"„§Pe •Q¦PeêAyÐTHbISë:YTW°*%?IiUMNOØqŒäB‘<}4Jž¾b4?¹ž¹ ¦Æu|ƒ]wo´nÁ¬È¯…¥æ7ê·Á´È£µ½/ zïNþNT$Ñë÷ò÷€bã7gò3<~§8€ò³Âð ŠâØ$”hSÊ€‘R 10È`=ƒÆ›¥ W—] e„e%|úLr‹]‚ÎÇ"¡ÂOŸ`è£<ðJ-¤ ‚<}”¯7rBªÑçJ‘“J‰«ù”ÓÆx£œÎN†XsžÒgi¿‘N»W„’¿tà Ç.KéÌKÁ%| /Â[†(ÄKð$3y¢ •§ù§~釭µ"¶btD¦žnå·RÊŠ7AƒüÒ÷,U¼yéÜ%YX¼ž¿.S×KŸ !3ZóDO¡&Ê*£L¡:ÊÔ⠩ħÖ;t²¨®4`UJ>,~’Òªšœ­Ï³%šâ>+ðÎéÀÏ<ñ–çGñLN唲Úh-¾QÉ(¬›c›©ücžÃ„<{hÐ<{Äs˜œÒXI£AóQ]dÕ~Sk— 20˜ð<ç˜,#B÷.j01küÍ»²˜TÙ"ÅXïšx•5gˆU«6ËlUšÍ·ÊoË×]…œ!.¾¸0ºÐ®è½¹2ºÒ®éTõÑz{A—ÍÑÍöŠNµ3ºÓ®ë²,T82“T ˜¨ÉÑIUO¸Ú0ŠÚ0Em¸vJµa4ŠÚ09ŠÚ0Em˜‡}wý•)NØÒïƒe/bðñg ¼1,Vp‰Ó‹yâ-Ïâ¹5z+§”UG«ñd9£°nŒm@N¤ò•yò`ìAƒ:År˜œÙ±Y±·GuAUýMµ=k­ˆÐö03È2"žpÕø'ýQƒß yW“*[¤&]¼Êš3ĪU›e¶*Íf‰[å·åë^RÎ_œo—õÞ\]jWuªÕÑÕö¼>.£í%j{t»½ªË²PáÈ\£jÀD]½¦ê W&BQF ¨ ×N©6ŒFQ&GQF£¨ “ã°ý¿2Å 7â=c°ìE ÷ü,Aê¥Ø» Än:ø.O¼åùQ<×G¯ç”²Òh)þ¢˜QX×ÆÖ 'RùÇŠ<‡ ¹3vÇ ¹7vç093c3 ÂHê‚ «ô›R{Æ 3ÑÙafeD(<áªßCœ™£¿Aó®,&U¶H1L<ºx•5gˆU«6ËlUšÍ·ÊoË×Äœ!ŽØí¢Þ›8•tª§£OÛ}\ÖF×Úó:ÕÖèVû©.ËB…#s‰ªuiô’ª'\m˜Em¢6\;¥Ú0Em˜Em¢6LŽÃö¹üÊ'<¨÷ŒÁ²½ÑÞoùÞòý òýT€sßò½åû9òýDðeßò½åû9ò‘'ï8ø+ÃI'0“†èy0<2Ö øèG¡&Ù™j¸TƒÐQ}z›)"Õ€8‡—µ™ñ¨é:Ã\ªwèAD{'Y •îb@1ŠäÄàÖ~l’ÆYp´ÈÉÔ û›¡c­ï§8œé(crLÓF¦_§p¬˜clø\'¶HlzÖ°®ë¢x$Õëôäöèô&*bx?ý  åØ`Ë3< Зl÷ GT²?ºì,m„r$ “1ÁvBUúQLvæŸè›`“pWÚ›D Ó&X è•ò %;ÉZ¨t—œ`S7°ö3Ÿ`“ ]b‚M4cìÏa8Ó!ÌÌ Ö§O°V@3e‚MJ¬µ§»è…:Á¦ŒÔAnAo¢"FN°?ýG˜O°Éñflrˆäk^s‚µÂ5ÑÕÝ ›~Þ“ù§†¨5Õ§·™bi ˆ³ÞY /Œ0JD­wèaw{'Y •îb0_ŠäÄàÖ~lÆYÀÈ9üÔ û0ÁÚêû)g:>šÓ´‘é×)+Z>˜½,žµ¬ëºèÂxžÜþÝ‚ÞDEÌï§Ÿ(™°<ÃÃÐ}Évr<<û£;Àð" i @޶C윃£Ò©x8½°`ê¨À9ÄÆÁ¹çüÐämp{€"/!!úˆ ʉ‚¿yÔp<„ÆCÀ+c°BmJè;%¤´W€ù’Jо®XB!5|µ‘Ò‘s;ƒ+Å3(>»g¯òà:Ië]ÕŒ´{eëª{MÆ¡DYq;M]>FŠß‹Z' ?÷þß&w$¶Ô3¯EÞ#V>En’;`%{ÆòtF›2ˆ‡Ò¥îU—‡ÊdgúÝDõŽÊÜ êÍz¥ëvïœ÷¥˜‚l2|,ìƒÖ 2ÙÙÙr*ù;V|LäâÙwÄ̱+æ->›èqÿ‡ íNú'Gÿ–4SSMœÄ´ývÞ;ï¿÷ßÎûoçýŸû¼Ï!ò8þq»Ž¤"Ôõ"À‚r§BÙ­ýJ˜÷EÜÀýˆ4$D~9Qðw"z¤ŽÇ üЗ |_Cýµ p¿ï¸ŸÒ^\O*MÀØÃôe û…tF)%¾3Ü¡@ñ‹ÆîÙ«<¸€NÒz@5#íDGÙz€jÆ^ƒq(QVÜNS—‘â÷¢Ö‰™÷| K¢=1óZdà=2éS,E!¹g²g,IgüGS€ò@Äâ‡Ò*“½Iõ»ê”¹AÕ›õJ×:íÞ9ïK 0Ùd°9mÐzÁ =";[N%ÇŠ‰œ@<ûŽ˜9v'ŸMtÔÖÿCv'ý“£ÿƒÃ;Z{LM5a?_ßsùŸqáOËáSõ]ö£Ÿgÿ·¨îwì=–¨òwÍ7¶UØ‘Àà3‰ú©ò´}ªŽÿN@«Du¿ccŸ¨òwdÿúkó1‚~מ¾?L+ðx™é×÷÷×û›ȶöÔÝ©`JÁtËL½¶¿¿:šÕß|lqÆÚ7nÞn(@d™¯ë'w àQ ¸– "©¿\ÖK2íaŽŽÛÔ—Ž´e«¤¯3Ø–%—†·é ¶ó˜ [‡䈹%Sˆº%S¯vKɪ”$ìVE«¼²%MÿmEáPá¸*…¿‚ÈgW£Zãj­Fþ‡tk-÷j ^ ÃUð«‹Tä00i25ïj“Šºê] 0+Jaã"ê S©±M´2ÙÎðª×I°FÛ­¯¸×ûó ß5&×5;N ·ªyFjAW-µ¢j%)Cœ¸GTòµpº…às·’R`9¢s+¡¶ÑØÉk=cT c4VôP‡ð*Q›,U Ìô>ÊÉ MÊ¥´ó|èáA'º“ W ¦2$øÑ,ûX@D„4+¼ê[e‡ê»ôÁx:_ä÷ÚÚ:Hé5Ô+Þk-¦3flA«ˆ¡Æ˜y8°h¯9X7`¸—dÚá¬/SÎVI_gX9K. Y.Òlç1áå"Ž!É]N¦_N¦^Àœ Wž•se­òò<”4Yü·e…Cž+—þ2bü]‰ª+Õ*ùBÒ­¶HÜ«6x50 WpÀ¯ ¨2RAÃÀ¤ÉT½+M*êŠw%À¬(E\„Œ‹¨/L¥Æ6ÑÊd;Ã+^'Ám·V¼>â^ïσ~kT™\×ì81ܪæ©y]´Ô’ª•¤ R ÈWéÂ,–ÝrþaH!‰ÎeHl(h µÆæI^›è££±² /ƒ:„WˆÚd©e¦öQNVhR.¥0 çCǰÿ :Ñ|P¸Z0•!ÁfÙÇò "¤Yáß*;T‡Ü¥ÆËÐù"¿×Ö†ÐAJ¯¡^ñ^k11córXE 5ÆÌõ€Ø¥&Ú`ïú»A ¾$ÓæèX|}é艶Jú:(ÚXriŠ‘Þ`; ¤qIŽ8Š2…HŠ2õz UàÃ⌄R,j•+PÒdñßb±XTø‹ˆfy9*5.—JäI·Ô"q¯ÔàÕÀ0\Æ¿ŒðãHA“&Sò.7©¨ËÞå³¢q0.¢¾0•ÛD+“í /{k´ÝZñúˆ{½?ú­Qbr]³ãÄp«šg¤*º*h©yU+IbÞ£/…7Z(Zt‹ù{! %:—!±ôlH µÆˆ·s£MôŒQŽÑXQÐAÂËDm²T27öQNVhR.¥0 çCǰÿ :Ñ|P¸Z0•!ÁfÙÇò "¤Yáeß*;T‡Ü¥ÆËÐù"¿×Ö†ÐAJ¯¡^ñ^k11c9¬"†cæáÀâÚYD'd`‡©À…—…L´ÃÖEºÛ˜øJYl­ÌKSNŸ.N…Ž«¯bõ'ÐU¼JÆ­âU²ÚT¼J© Q2Y*^¥…ŠcKJ¼JFÄñ*9úèhÉ„9}¤á[®Œ­@ŽvÃc5žÃQTÇ*’ÃûPr¥Ê±Ð ‡ìƒ§ünM“‡ci¸ÛÇt^â¸^ÕþE²Tài‚¶œ.P©2×µ*£1üÖøÈu—­ÜéwŒ:RÓ»NÍRÔfA¯AÍROWtY*eÌ9Úèè#U)¸Žð‘”ô¼5RGRG2©I­15‚ S(Vé¬Ýž>T‘Úó}6ö(eñ&›¢0 ê»Ô&££JÖgoŸ–Ó«´·/giW¯7¡ILë–tuS³ÒÕMÍR沕®ªkj”s1H¢C2°ÉTàH:ñã:‰6ÙºHˆb_ºŠ­•yb­ÈÂéÓÕ¢Ðqõe¥þÚ¥ŠʸU¼PV›ŠÊA;$P&KÅ µPqlO‰ʈ8^(G5afjø¢KcK£ÝðX•çpÛ±²A£äð>”\©r,4è²ú຾[ÕäáXþï1W§8®Wµ‘øîž&XaËé•*s]«2Ão߈tä]¶”¦ß1êHUï:5KQ›y½5KAž]ÒeY¨”1çh¯£U¥à:ÂGRÒóÖHIɤF$µÆÔ2L¡X6³v{úPEb@hÏ÷ÙØ£”Õ”lŠÂ$¨ìR›ŒŽ*YŸ½}BXN¯ÒÞ¾œ¥]½Þ„&1­[ÒÕMÍJW75K™Ë–ºª®©Q0ñ'Ñ9Øg*p'øqáÄDûl]¤+6±‰¯%ÅÖÊ<±xcáôéòMè¸ú:OmTÅkeÜ*^+«MÅkå © +“¥âµZ¨8¶ªÄkeD¯•£ïŽÎ˜0¿÷4|×ù±yÈÑnx¬Äs8ŠðXÑ QrxJ®T9ô!}ð%ß-iòp, ‡ô˜Î«S׫ڿHœiO¬°åtJ•¹®Uá·ÆoDzÖ.[ÛÒïu¤¤wš¥¨ME¯AÍRçuY*eÌ9Úîè=U)¸Žð‘”ô¼5RGRG2©I­15‚ S(Ö±¬Ýž>T‘Úó}6ö(ey#›¢0 ê»Ô&££JÖgoŸ–Ó«´·/giW¯7¡ILë–tuS³ÒÕMÍRæ²ù®ªkjÔ[ðå·|oùÞ¾Ÿ Hí[¾·|?G¾ŸHí[¾·|?G¾žÀ—%´]gW—"=Ø\û”ÓèÁ`ûš‘“&dØVCOÃ?5ü×ÁfàXá_)>ƒ½¹?ýµ¤¥[§ƒïþå~­d üfÃ;”¨¬Œ±Ûµ·úÒÑœY¹͹Ÿí€èÜßdK»2'~ë…ûB zÑÿƒðžóâEe¸Ò"(£‚¶ú1ð0€s¶¶*ï‚·Wâå™g>÷þWåÔò!Lœœ!eõ“u T­:E¥c * –„0µMQVQrŠJ ¶ÕÐJïO A•MQIU>EY1fûSðSåÕ_÷¯Š‘kÕ #7ûsÞ¡HbeŒÝ®½Õ—އ¬LQ6fuŠJ/mŠJÕšäÀ¯ïº»RÐnÿ.áî¾³»[.·È]g‚Öû×!ð0×÷õõò;„àãõÃåxqúãi˜¢Ê§aâä4){vò™ì•ãWvFu)nŠE´OÁvèHÚ×€)*EȰ­†žpnj¤ƒ ˜¢l¤ƒíÄŽ ÜŸ‚@ÚÒÒ–Ó`ÿò(³V 2Pf³?‡áJõUÆØíÚ[}éˆÂ¬ÜŽ(ÜÏ.:  ÷7FPàäÀן»Ï¥ çýÏ!ð0Ÿï;ÏŸ‡‹m ‚2*¨Þ‡t˜S¯ß!×ã¹Û߆)ªxjî&NÞ&eK'—È™í ™×üNòêqte'ÖT`·ëÎJss¯Óµ';¥ÑË[Ñ ïES«Ÿäúv̵ÏýA!YðéÉ_ÐzÔ_¹wD»¸3¼Þ1õ~ºÀѽ ´–›ëHoö[wÍ÷0aB$þO1CP±ª!‘?(òÞfrl¾ç)޹iD71T*žr·&°&þù–žP4Yã¶v\¡ãŠ{<0³ÖC¶1s_´À%tÀcŒEÐ 9/„ÓÈÏBënµÀctЛAƒäl1ŸÒc¡šäÿ´Uób¥°\˜)ÔßÎ…oç·sáÛ¹ð¯3î¶À÷tÀ5EÐ 9»Â;åg¡u×[àš:è¶Š ArÖ™óê1ŠPMHòZ/€'{±\X,Lžù ”B¯ñõ×3èÊN\ØÀ~Ù•ææ^!§kO z]OwlE/E„Î ­þ˜þJŒ“æB!YtŽéÉ_ÐzhÉyD».ð›ÇÔûéWù&ÐZn®#½ÙoÝAvßÄ ¡ú?Å@ AÅr¨†Dþ Ècx¼É±ùžvrL^û º‰¡Rñ2•»5wñÏ·ô„®‡’ÛÚq]„Ž+îñÀÌZÙÆÌ}Þ'×8Aƒä<n0< ­[oì ,‚É©3/Ùc¡šäÿT/€Ë|±X˜+Ü.?Y…X0ž3˜üƒγ‚NW4~Ï¿ ì¿jvë_¿mø2:¿Kß(ÿª½GTˆâW4:ƒÉ?ˆà<+ètEå8ÿœŽð¿&Æõõ"_öúçN‡SÊ9U jp½_Ú 6ñºR *$Mò÷áêøâx–j5˜Ç$X‰¯®Œ$à‹º`j¥C!%qÔR0µR4uKEPK*WGL-"gÿ"(ÂolÀPoÁ,ïšÿC:=\¦øFÒ™¢ôÒ³2nI²ü™9eW¯,סŠÎôò^|ÆKb½»z`«‚ô¾O·:Ñ*x¸Ò•Ô‚±Õ‰+Ûë-W°qUÿÆÕ¹/YòZx¦F§Ì‰ú†6QoŽmÆ*0¢sqì¡ c”Ž|Ån:!_¥b)9é¨V¾€tþ¥)ÑZfðíQ¯Á½r$3¥R0sÿpšÅ}8œÖ +M/rŒu”(®‰{%¥A!Ïj÷ÍŠæã+ó# ”¢D>!XН,$ðŠº€h¥c%ÓR@´R 4uK…LK*WG-"gÿ"(ÂolHPo)ëš—I:=U¦x Òe¥ôÒ5nI²ü™¹¾Wß7סŠÎôò^|·K¢­»z`«‚ô¾O ¶:Ñ* ·Ò•ÔªÕz+Ìë-W°qUÿÆÕ¹/YòZxnÞ2'êIm¢ÞÛˆU$D˜é喝EéPWÒ¦ÔU*h‘’“cå På_š­eßõÍÜËG¸R*sª§‰Qœ´ÃiͰÒô"ÇhPG9⺗S´¬¶qß‘h _®Œ$`‰ùuÞ—ñ `uAÍJ;J"¥¥ f¥`iê–Š‘–T®Ž¨YDÎþEP„ߨ ŸþÞ‚J&PÎ5_žtz›LñóåÂ¥—«Æ-I–?³†ËÊ C®Céå¼ù P—Ä;wõÀVé}Ÿ`ku¢U;`m¥+©E« ÖV*z×[®`ãªþ«s_²äµð\½nNÔ_hõÚØZ¬B¾z¼°+±Sq55‹IèBõ—’å;o\ÔÊw¤9ÐsN¥‚=ݘшaVD»W2¹¤Ð¯´Šã9m"ÀwÜ$¿/äÓ«Wi:¥ ‰ì’öñ8{•d{t9A÷öZ¤5¤®yïoà0¿ßBýL]–ÕwÎìP¾Ür|_°õ­Æ÷'OOR®ó›4óüê«Àƒú¸;eW#P³˜„.T)Y0ß¼IðXo(ß‘2Ì7å–S.cB7f4âc˜Ñî•…L.)ôËm§Œó à;n’ßòéÕ+7²Ò†ÎDvIûx…ù¦œl.'èÞž@둃´†´Â5ïý æ—ã›_=³*ËV·ÏlS¾ÜB|W°õ-Çw¯¾F¹Î×iæùåWõq1vŠ®F f1 ]¨þR²`¾yƒàÀÞT¾#E˜oŠ-§XÄ„nÌhÄÇ0+¢Ý+ ™\RèÛNç"ÀwÜ$¿/äÓ«Wl:E¥ ‰ì’öñ óM1Ù]Nн=Ö#i i…kÞû8Ì/ÇWyzæ©,{ºuf‹òåÇ7[ß\|óÒéK”ëü"ÍþÅ©êC'‘å0P3d½Øž|¸StƧ, ©¤¡Û,ÝQa‚Jèx V‘N×–€VÚd”cônº¦˜Í íŒÖÑzàµë‡ÉéÑîözÐXpËQquuë¨ü^èÃê‚÷ÿW õÂN¡R˜,lVaÆ@Kî|œ_––lTþØ~Žƒ6ž¯•Æh’€Û‰Ð`‘”ÿsù5 B_e—W­˜ã$ ²ƒðzÄ.%‘=Ú ïÜ,xÉêM »Ùq~AB#m2nb°’Mç¥Ê  cðC¢ÒEl–ÉŒ¡¸E}hæ3²j†¬Ûó‚wŠÎø”¥!µ‚4t›¥;*LP†#Á*ÒéÚÐJ›Œ2pŒÞM׳¹¡Ñ:ÚA¼vý09=ÚÝ^º n9*®®nÕcƒß }˜(“£\X-lÊ…k0s,ÃŒ¶Ø0øl0¿(mѨø±Þ­4_+Ѩ#·ô Á"7(þ7æò?j„¾Ê.¯„[1¨IdáõˆeI"{´AÞ¸Yð’Õ›v³ã,ü‚„FÚd8ÜÄ`%›ÎK•AÆà# †D¥ŠØ0-’CqlúÐPgd9 Ô Y/¶çîñ)KCjiè6KwT˜ 3F‚U¤Óµ% •6eཛ®)fsC;£u´ƒxíúarz´»½t#ÜrT\]Ý:ªÇ¿ú0Q$3F±ð´°U(. s‰ûÉÖÉ-YÞ9¹C"õ'_tÀ(ö®òó4³Wm)ßéï Hg4Äö —¼Í¥ ¾'·à¾î¿XÀ}þw}Q3' úêÜúÉuYÜ>¹M"ÏvOîvÀy…–ÑÅUžfF†-7ÜAÎhˆírvšKQO®2Rݱ¤þüïú¢fË *8FæPÁ1²ôüäóX™Ð2º¦ÅÓìÍ`KÁ w¤3b{†í¬Cs)¸äÉú!dÒý—$ÈäßÀ]_LLÜÚ)¼øÜ/6!t."¬‚û VÁV¦Ï…uPš]B± ˆ<àþ#C°•éjFjx ‹x8ßýGv8ßVö¶õoRë³[û3÷Wð”ÙNkkæþ£‡ù‡™›z”5÷v zOøÐèÃÊp%tÞ«°d©6LOsCðËš™ù½S«95Ç!Ø!äØ7 ö1ËuLú=ÌfD© xQÀf¤d$ø3­‰ü3)‰èÉgÔß)Ôxæ½gâ w¹]He_È yw~ ìlAáɦVò ,Šx,ºPÏ×Yte3¿½pqpë;ùÌVk¦B3ñL»[‰ïÃG3D&ÏM¢Â¦Ÿl«"oUdÒœ·²ëûÓw—ð¬úvk}úîÃù™]ŒÝõ€¶!zw6?Ë¢ÊÃePŠ2KÎV‡é l~Y53¿'¿Bï8XÇU~žü({¨G/>{ÄsØ™U<Ñq#q¶û†y6·]Ò‰À”ò÷e6‘¶wQhï%Y\a¸)…òŽMg<;ãØBÉO.ç¨6Oö“ÌÍ „põ9ÿQ™ŸŸdG.Œ=ÐNTR•›ÔΗΎÍ4xyÒ<]ÚžÕ‰À|“ÙD ±0 ßK²¸ÂXT å‰bP0ƒ‡Éûµ½š_Û©Ó*ð4ë“ï$Úˆ®ÊzáiÛªN…grçuñ£í%j{t»½ªË²P•GËñ5íÄùµÑk¹Wy$7ýà-o»qðVS&¤£*q(†Nª$ÌwS%"íeTIïE•ÔjzT%^ÁUI9ñÝA•Ò•DU¥t…ST‰‰²ªÒ«:÷½:ŽMg<ÛãØBÉ_[ÈQm¿ÖO2ëáòr´û£"?È Þ»£ Œ/Þ»ÇsعÁ™±ƒOÓ~ažlÏèD`2‚‚Él" †X¢ï%Y\a *…òL,(˜ÁÃäýÚ^ͯíÔixšÅK‚wmă¦E½ƒPçJ:ž*­èâ×F×Úó:ÕÖèVû©.ËBU-Æ—´3Ó—F/å^å¡Òô££¼íÆÑQM˜ŽªÄÁ:©’<òÝM•ˆ´—Q%yü¹UR«éQ•xV%åÌrUJWU•ÒNQ%&ʪJ¯êäòÓql:ãÙÇJžøÒãÕæñKý$sñ!œ»r8ùü²8³ö XYx!vä±ÔÚÊû+±³2¸"g¡þ>þúÆ`]ÉŠ6æâð*‘ Ë@SÄQVld18D*'Œj‚'{ôÃ~ÑèWšÈ©øºÿä*>pät‘Ã,ô#£¶4¥Ò›D¾žÀC¯~QÈYšG‹Ã$™­}2›´”ÛHô™µ_ˆÀòüûó±3?8/φV—Þ_Š¥Á%98ó«ï¯ÆÎê rÖ|Isq‚”He )â<)(YÝûoX½¯õÇÓÔéžÌÑ™Çêz+ï{<~æäæâë¥ñÒ>?Ò7³vfMé›×Þ9sG–]¿wæ? èÞ„¹Y”Ü)ö‰­ÐY ÞQ„Ì”úÄW‰,‡Hå„Q-C´b~uÀÏýJ9_´ÿ\Å׉œ.0r˜©Û`dÔ(¥Tz“ȧxèÕÏ9Kóhq˜$³µÏBf“–r‰>³ö X¬¼fÕ`EÐ,‰y@ NåéûOcçéàS9$óÚ˜‹cœD‚,M‡:Aä¡Î—Ö´ò¾¹ñÛâ ém|xã¾üúù™ç¢q_ÖÑòeÅÿ<óŸâ¦¾¼­œ[u¿ÿZrý§Æõ5—O¸¾Ökã)§—U–Î,I¾9|%µ ¿¬ó6“²­Æ™†ä“eн_ò†-ö-Æ_✪œ•-,VÉ69võ¦²Ë§§Âe0 o¬†h¯ŸÂ˜¿êoÆ76}b´ŸÆ¨· &7 á~£Þªÿ0¾±ìãý4F½eÿ£™ztú¥)9îý3%]ÊCz“òÇ©<×ĉÀþè‹Ãö8a¦·L 'ª;•|m£1ý‘”É£7!Y¸E¬Jà<Ð>½šï¸Y_37åÔ:D›¿—ôhê74êÄMº›lUhP'Úß‘:Ñr╸Ü=Ѻ§ÏÚtÕðuZl8~› Â+ §Høñãi^må‰C#p‰ŸÐ-ÔO‘8Ðá‡RÏÊæ)ydõß'.Á)gtD£Cy•xõò~åÆüUo2‹îÁÉÉÐÐdvë‹Â“Ÿ ßž|î:Ë|Ûh¡IJþ èÈVÏe~õneNß À¢š\Ñ€=…1Ù߈'ë>±bOcÔ«ƒ ŠhÉžÆ(èüƒxrÁ'ÖìiŒz ð\Pš[ø\šY"ǽ{fV—ò€ž-$–íq*ÏÃÕV"pvÄa;v0Ó[ …„ Õ}7¾¶m‡ØÂHÊäÑ›,ÜDT%phŸ^ÍwÜέš[grj¢ÍßKz´}uâ&HÝM¶(4¨íïHh91Ó]n¯kÝÓgmºjû:-6W½‰ðòü)~\ö&Í«."qh.ºùÕS$t¸¤MêYÚ8Eâ ¬+ûÄF>E⌎Èct(¯_C½¼[>…1Ù»–E{ùäµÐÐdv.,v s…G…RáÛÂ<‹|û3<XòG { ×EøcWïzöñéëác01¾˜ Ñ¢;…1Î_‹¿Xô‰Yw£Þ"eX€¦ÝiŒzsþø‹Ç>1ïNcÔ{ìßc4×ï¾Gifˆ÷æ™]Êz^Ž˜zÇ©<×ñˆÀüá ‡í?ÁLï1)$œX¨î"ñµM(Ä8DR&Þ„dá6“*ó@ûôj¾ã†_ÉÜ’Sëmþ^Ò£1ØÐ¨7Aên²Í-¡AhGêDˉÝêrVëž>kÓU+Ñ×i±á¸žJ„aVÆ8ðã‚*i^ ŸŒi.KºÊÓS$t¸XJê™_;Eâ ¬XúÄhš‡¶T—á*âGK?¿z—?Z™Kt˜V·/l¦\4z.”=´vÎ_ëlëä”å—¾íB±zp áocç[_ à©„?¡Èöh |iÞ22bøs1b̵œ¹9¼æcÞV2ØwEw±‰øbn°Ø"‰¡Ex„{!3dî’lüÚ`1÷,vžùJ°ë<{æ<#ü13xÖ"‰àYn=vÖ}=pi@0<Ùå¶cgÛ×—ûÎö6>ÂÛøoÃ#ÜÉ}ü×]4Cá»¶ç…µý908/÷ƒ•y᤮߻pÊnÎ\˜Ôb¶0–Ï”2Š9Y‚²™RDB¬yùd ¬MâGH ‰jª»–kÒ8…y¥„“„bq0–d©òB•j±'ª9íÖñgÔ:5. Ï„Ïú€öGÊÖå%+‡(ô´¥$ç90ïábàGOAæ<¦§[¶€ S.ZlŠšjç/u6Ôr à]èh(aaÞÜ×±óµ¯ðTŸ‹‰Pd{4&—˜XÄd*TÁÊ‚JâißwàÑvçšx™3žø¡9x„{!3dî’lüZ˜ppþô•`×YZr–HÿCÌ –Z$,%ÞÙ¸4hÉ·6Éöh¬Ã{{ßÛðoá#¼pc:»œŸÂ-/žÃåEwµ½ÉWó›{767+|i1_Ù»±ºú¯+æîÝX^~Äó°´DW?))œ¸œ8_¡ålU++ÌÑðg‹——ÅYV[ïr•OôžÓ´¬A)'$}zaÝxsSYyóœ³woýL*kÛúrí’Yç}F;‡L‹X.[Ùš©yLP+íÔ¨]¾Ø*­p³¹9b¯{N› Ƕ÷ÓÖŠ•Ás Mˆ¯ŠUÁs+MˆoŠÁsõ&ÄWÅjà9üÑèåe±xPËÙ*à¹Í=ˆo²Às¸è®’õ¿³“~—õ¿ðßéC3>ü‹h‚›è$È€ýž©@±ß1¿é ž±"Œ{ô%Íc- çÎÜ¢´Ó# < ˆÛà2»<\lp{e¡#;H9YJƃtÂŒ ñá3fçƒÑŸÁ ÂÀSb0/<Û÷€š÷$Èb‰d¨åmÛÐÅŠåó5üÑæ‡œLÇeèìãüuÿ1_‚>‡KÐî\{¯@ç×ö¾X\,òåç|q¹;|í9gï‹Çïñ…çü=,¡«ÎŸÌ(œ¸ä óB‘–³•Ϭ0œ?ÀŸ÷}üX,¢f“š­13Oæ¤eµÚH9áèÓ ûtÄ‹‹Êê,Ì Ì27v 0©¬m@èËõmæGôí2mw¹´=dk¦vf1A­´S£vù‚¼ôÌææˆgóŽmï§­«Çç*MˆÏ‰•c˜' ¾(VÏ=mB|N¬ŸÃW~üX¬ŸÃ^Ær¶R|nmâ‹l•ø®»sdøì%¿ËqX¥¥àB0/¤@’àÎ 2àidD*P< Ìo: ~RÄÛHÁE–€Ó¤(DxÜ9iüË)„ø".3öÉô¡eæ #;H9YJƃtÂŒ ñásÀ“È`aà)1˜–öÁç F ²ºajy[Át±âNÀ¼@½ t$ 'Óua>X>?å£1Qóˆ÷0±é·a¢âaâ¡G…‰GxçKq pqþºcØ#Ö¬\§þµ‘35oµm,`›~A–[ÿž×6ÝMAŸæDJE¡ßCLï!Ô}¯FÛoõ" ¤$®1áƒéC®#µé©þ‚ÜÈ–k,§Á§w!¤ A'Öú ß!´ø €µ¿²0±à×abÅ#.ÃDÝ#®èúÎÄŽ·IÓ>ú•ÝßwYÝ÷ßÑõ}²D?ñ˜Øîîßñžìéÿ]5ê“’&IÒ"BÏ85©ÿ mnþ§G¡t&™.Lô,å¥6¾«üZÂW²ìA7Æ}LŽ´÷‹z«4ÔYaØÀ_ðÙâ€Ç®ÚŠArùÀ£+ÿMú%€: .uèR¿¶î¯% ;=búÊ•ò_Qƒ:Sõ–ÛÆºéDd¹«Ïl:PЧ9‘GQ88ÄNOñ'BÝ3𪴱ýV·"ÒKâ*>˜î]äª0‰TÉØ+·šâ\Èýl¹Æbñ0|zBÊ‚Ë|6‹£ ZüÁÚ_žŸ˜÷ˆŸ1±äÿbbÕ#~èÕí‰m¯NÓ>:å}‡ßwù¾“3dИø6 /MP¿¹=°óá¿«F}RÒ$IZDÈa¡ö÷¡Îÿô(”îÑ$3ê…=Ÿ¥¼Ô!pUï@KxâJþ!èïÆ¸ ˜D„sˆXÔ[¥¡Îê.¶Á¹ðÙw]]ô)\["~Gð¬I¿EPïÂ¥~ýØ }yО¸’ÌïI‚ü‡I|Où ÑBo„'˜âQÅã„nÇÁãó×}tP&JñK&Ö<âL=â‰LÜñˆ 2qÏßãüŒGœü@ñÝÑì;Y®ÕÿŠZß™’7×6ñM#Ëý xfKØÑœ>Í눔8ŠBŠõ)ÎG¨»^‰6¶ßêƒD|I\bÂÓ]‘\ &‘Õy«)žˆÜŽÈ–k,wħw!¤zÅßwù“ýÆA>SL|Ðß±õÃì ?9¢D}RÒtèoЏŽÇ'#Cõÿ¹…ÿéÑ92a’yÂøÏR^ê=¸ª+¡%û’ᱫ‹ˆkK„ÂI –šôk5L\j¢t³d_yÖïCs»p(Oþˆ¹û8Kí|¶%é¨ÉÏŠ©s0bî-öˆR'f$Y·²¡hĬ8YÊxÕ“‹JåÔJViK?¸"¿ÇÚÂe[󉅣ʆæ+G•­Ì'êG•MÌ'6*Û—OìU6.C™Ø²|¢r”îV~¿‹{ s|9Ç0rø›@| ÁQ ?f~H t`|òç9­'ø ‚ì5ê{âŠÝ:ÊÖϸºË®Ó^f›~ìäÛÉF\ºÁräxË¡ã/ûÜÿPÈU©®Øaéþ÷a°®Ø9«ë ¡úô²g?UÔêÍ-‡<‡þR:®ãògÑÃågk`«éì7"؉Y@¿^À›8ôê‰o™ñ±óbðÅx3všƒÍÓ/\g8Ž8z+»ðÁ­£b+ù‰êˆÜE~bcDn ?Q‘{ÇO<‘ÛÆáéæ;Æ?˜‘›ÅûÁ*U¶,Ës|š;ŸCyºÓGÌÔYjs³ JGM~VL õs›´Gœ‰:#ɺ•íE#fÅÉRÆ«žJT*7ðH²J[úÁ-ø=Vç(;´OÌUöfŸX:ªìÊ>±zTÙ}b㨲ûÄöQe6”‰Ý×'ÊGéÆë÷»¸ 5Wছ-ñG18ü-ó åmç·ÁŸƒš|ü'{úæ\±wGÙÈãWwèE¶hÀÎAýM6âxÔôá^„zÑç¾€B6¨JuÅ~£H÷=¸?­pÅ>"nÝ“€ûÜ7 n~cx6ð¬¹î»=ÐwIhš ý·¾ï@ÞÀzÓÙ&&}°³€~v€™úôꉙíñÝØÙÜåô.<Ð)¦þÑëÙÇ\?*vÅŸ(È ñ'ÖFä^øÅ¹ þĹþĽ¾ùýƒ™¹ï½ü¡âQe÷µ<£÷¡¹‰;”'÷ˆa{ÄÜž¥ö/Û®tÔägÅÔh1w|{İgçF’u+›FÌŠ“¥ŒW=q¨Tn€vd•¶ôƒ‰ð{,UŽ(›Íá}ªl3‡Ç[Ù`~âéQekù‰µ£Ê¦ò[G•íäP&6’Ÿ(¥{Èßïb¶ô'càÆÈáb ÖÿIpƒÃ_3û<ýEAú‚-üIAº©¯âŠ<ʶϸâbA›Ov²Zo²SÝ£fx0ô\Hæ7aƒªR]±û(ÒýnÛc+\±«ˆ[Ú$`†7·Ó‰IŽ––šuG¾Ó}‹14Í…þ¯ugK¾Öù½dòV§WO¼ô3[ãÏcçùàóñFì4§ŸÃÝÁì³;šfwX;+Íîpó¬4»ÃÊYiv‡ÏJ³;|t–›ÝQé]Ø#Òö+ï¢ñù Åø k|¯{SÁh÷É߀bÖf¬Ûÿ=±îΗÛûC9cìµÏØ©E êi€@~\~¥ÁÕðfVµ"vØÒfy$ÀK¦4ÕãçÔO‰ ç$¦Ÿ`Z5úå@tžèäqŨÆ£>\WŒú°>®õáæ¸bÔ‡;ãŠQe¨+ãÔ¨ºõ9€86ctk\ØŒaõ¬´óÒf Ëg¥Í>8+mFPMn3F³ïâBõi8†åwÑrú…b9…U¾m»© ûäo@±É2ÖìžXÀåë¶}Š•—1¶gìÔ¢uc{ W©A•gT«‘™„ŠØaK›åîv/AšÒTo}W×Ð –uL×ò[Uº-:Otò¸b‘†óãŠE.+i¸:®X¤áƸb‘†ÛãŠE eÂ" ËãÔ" ºX¤98Ot}\”Ë3åf“ÉE 2òf)O›£Û)Û—$Z™Ž’4×x.g÷»<•óñXLX,y"ç6)ea¶$:ŘÅyTÌpƒ¬Ð¶ Xµ¸­Úz^¤Œ·Â-=/‰´Â–ž—<ßþzxþœy#lú#fÔ°þ - ,Nÿ´¬…DÛónÿXË–ÚŠÙ6Oԓ说EÚ´TKÏJÏͪٲ«Ì|p-–>M ¡âëëm»¨.–Y¼ØÐžASùÀÐQj5¬‡EW¯ÒÃ:­× çáú_ åÿÀxÏP.Ï”›Mz$-Ȩ’¥h³\@$ ¦¦¦­­£«ð™2eÊæÍ›>¼sçÎõë×ó>ú/†FÒÐ8@È„õŒà0úõ6Ñ%à‘‰gô<(c/+Ÿ9oŽ}Þâ²Ùº BÈ€%KºNZÙÂ¥s/™Sº´¬bá’aæÎ+­¸¿bqÚþ°/ž7kfÚÐÜ¡üs•FžÞˆ¡³®24ïrÂ+4tù’E3KËÎKËóqò¡«!uœ}Ù²¥P¾tþÒzyÅܹKæ,M }%JÃe=ácYã›üïèÁû§üj¿xqŃK8^ï7ënWij¦ ToÓ', ÐŽh÷ hGé¼|K@ŸoÊ *.¿LUô‹ÏÜ>€€‚à~ÃfÀNÆLsËž¼ xðî0‚êŸBµ½€#€³€DU`4`à6À,ÀbÀ£€§[eŒYÁÓúàuÀûð´‚§õ@fÌ›mÐÑ–€Ž¶SÐ˽lÐË6èexØÀÃ6ð°GßgK…M©»Õ€Oõ€Væ$ ¾L_ ˜ ä…ÊèË "žÉj%+f¢ªT²Ñ̨Žf&jŽdJµÊ[L©T-ÔN­U©fèF­<Ö‹CXQØY´*W—°A,–°9,žˆ­–M­N’É”5‰º#ƒÕYu¤çÜ3 ÐÇs¿$Ÿ,`£˜2Yeù½d(Ö5D–%YVŸŽ€nÎzQe©ù.‘´ÈFY¼ò‘áP²]h•¨’üN(ëú•%Ado÷êph.¿"É‚,©Ô!ÈInžf€%ÞEüÝÅó¦÷Ä(¦µO’u”Äÿ¡Có& ÔèU6È¢$Ê^÷ªPXïIäÔ&Y¡^:Úï2ÀRH·O¢%#‰o€”L& —ˆ•ÄíQˆÊ,Ë»¬Þú† Dÿ»ŸÀ’ÕLf£yìÇøÌe±D}V«ÕX}¦«Õ ¤™Ž¦VµbÔÁ¾ˆÓºãÕžè HCLPD•°þDoT¥ƪáÁ#¡…ÓƒÇ@”F ¡0MY­FªPhÄp.Ïß›÷õâ͌ۮé$—¨d¢N"2¹ZEŒ€0T{T; ÑH½•ªÊ­ISŸ#ìDÌ 4kˆ\ZŒ%°F“Kª‘QùKÑÕÅ1†Ë-æÚŒ!ý*jÀÄ)µX= … ‡¯Ä'Ep9&RÙ„./áDÒ ½xÕ•ôËË$Ù"°¤$&ÏÄ´+7çÕÖ‘¢‘WRD{s9#ˆN‰/‰F`〖ôu@ 䈳$úäé‹C¾`€?Â%¾NUm¹ùB«„c½G€…>²œMKn‹,ëƒ ´TAvœwWèëÒ´ÁUÀJ“ýôѨ7X2Hùx–Pëï£þL¶ªÐAê"o˾L@Êôgî¼ÍÄÔ*¥X§ÜYʆþÜ‹xÒˆ.®•žµA«>]”i”«TGps59µ²–‚‡p·W2SŠ1%r)gÊ-‚zX!B¡!Rà:Óìc<–J>-‡îVµÎHè­´J<¥²&\>3„ÖŽÈ׎¦ ÄúIÐÖU'òó%‹A€T¬­ 1‡VP±¶fìÚ#A{ˆ|‘Ìb®P1×w ÙÂ×i"“+µUI¾­TõË8* ¿Ç3Yœž£J°Ï¡7‹YÕlþÜi£·~<›&Ó¸Œä‘éc£3ÕE4Ÿìl¿>ü:æøõ¶ûmÉ °°ÒPÎ*Í«™²G5«²Ž@Åv´•Ïh{ÍFæ5y•Ñ–îTÕYØ¢¥µªšŽ§÷CµŽvlƒSÝj ;´’\·¥„`Ê=Ä£å3OÖ¨1÷·¨ÖP.ÿœZ6jIÔ2QËáã¡ì¥ÖÔ*#u"B$îÉ’ªµàÝyûÏÌœýª¢ªŠ“¤½éÔ5ã÷§½RýËÿ.`*ÛµtˆétšòW¼×,7¿·"ßD¶Ç¬E®–ׯÀ#²ø ÚK•)`ÃÂQòÁ0xOŽl„ûäÆHZæ“pª|ÒDypyzŸe ¹_n´IÉ×[ùL+¢6w Úî=Šƒö  ×™ùxë¢zd÷h” é€ r,³Xœì >ù_µbý×—™×*Mbƒõü¡¶ü›µeæ·U(ÄþÝEç× qßÏZ5Œqi¼Ó«Àl?‰õá_éê­Æ~7ÀW¼‚DPT¯ `lOùjPùÊWnÛ €ò•#”¯a÷•¯ú›V¾ò—ÑW{AF‘&¸HS¨XÓR¯ký­©$`(4¿'…&BƒvÕË«M íj”Æ‚jN3“w©ðÇ•'¯í\Y{JBƒÖqeõ©äóP¿¢üT¶?èòúSyðןJ‚¶zêOÅÎcÞW*ÅÚàõ'­‘ŒÖÆŽÖøiB‹4Št­‹4«Š¹ÍÅÜcÈY|!oø»ËҾܕ ¥¬DdƒD-;%i%ª¾cê•j%¯c¾ò#ÛÇFgª‹ iºàø¯XŠ+`ëjÖÿÀ—çg[ìØ„½ÂýÊ?…T ·À]®šE3ªö{C1Ö-lRUù>š®T ÞRʽËX!s'¶£Z4¢¥¬%Ü|´:ªª¤,;"uïŸJÔÓÐ#_ø3ò¹2•\úKÌŒt~FÞ+4âa¡åqÒ¡\„ú’Z3)jy§P+Ÿp‰Ôª#œL­ÂÝH­-„k¢–™p/Rká~‡V×hÆFxUõ÷a¦Ó}rîÃmªz2‘¬~MÚc¥ ×Pv KnzýfT¸&‡–_¹ÂE‚ì)ãy)ÙŸñê’Âå&Í#UŸ|vóµÇV­ìµ HÐvíQô°‘Ð}¸ÎÌÇ[¥ öé¡ü3-bèÛ*-þÑ{µï¦—¾ '›šÅá;~C9œºBÕ|„¨,ŒEA³:’Y¼Ø*$ŒQ òó'™¯~’¡áÔs­ƒŒ¬®$–?\x~[u(ŸaAeh~O *ʾú³À_z Ò_Ù©Èl„¿äT$¼tûªMÄ¿[/+C«˜ÂÈx…N8T¨%úñB [¤YbŠœJ¢ýeI2Þ@á¯X¬Hnx„ù‹™$dº0ÿ}[bOR$ñå$Þ ‰Ï&ñð :™r%/­‹˜V߯ï^)„UTÀ—Ìô 9"`´2ÅW`‡l’IÌí¯²{.†¯½#„Ö|­0 NE>3P¥[ÝsØ»ö)/í»°…ü+¾ç2xÍ­†¨påç 8¾,$ºo-ÕŸv™ è h*åÿ‹µäG+«´T’ãø–£_'0³v`U±¹Ð×XšÁñxó]p³ãèȯ_ð[f?"E'.úu@oòq,ë¹Ðÿu€Žè¹ÐþKþžú7[išáW%ݯe†ß€¯ãÚû6 »IâI–BØP¦ô¦+CTßB­ Ô²D›¢=ýÕÖÌÇø®ê‡©¡ðûèyª>ESUàR÷ÐaÓԨžO¢†éU½N']G$SQ͇QO?œBþ“PÕßP×#8–pþ9’ªþíêoR51†N/ytF©¨ù!סÂmäQ£õ áfð}Æ ¬;è;òa1‚À+}g4Uåq¬S§ö›ù}4ð—›ùuuœÆ'àÜÜ›J~LyðÁ¹7=çÞtPˆ <;÷&Åb{ŽÏü=ÕO›êç“ê—“æW$ݯjz€9~ƒ¿¡ô®È‚ÙúŸöÛvDÿåJ Loäë¿ÅYX¢G\¿¸b‘ýGógήx0ð7•ßÀnnدñƒ›¾=?¸Éúâ2=ÑŸ ù“Ÿ<ØÜŸý>c¹cCßì€Gö¼4ƆÅþ8 hglx.cEï06fàEÀ€jÀ'€zÆÆ‚ïØnìYг$ Ð000 0g•ü}J¶16a`:NØx ð.àco‚Î+®øq û/æDƒA¨–Œ–°ð0‹QÄ,u†hkJr|/‹Aàå³9ª¯}äÈÜô„30CY›’0è†ϸ}ÂÔ¸0“ˆÝèK1ÔV0}ùªG*¦• J‰5Rµˆ¡É£f¯ÙöÚ¦U nm$†ƒØE1Ä6jÞóïýñ£ßn¬š=)?Cã;],I#ænüèdýçíøÅò×I{[I“`Ž>ëùÏ´\<ýiõ¶§þbzs1Ùìœ`Š2ã™}gÛí_œ:ôö¯ m”.-‹5£M[³§Ááru¶ž?±ÿw+!³Ÿ&³;cŒÌžòØ[§Ú\w·óRãçû^‡ä†rÃ,­Ó†ˆŒWþæØ—.Iò¸»ͧ?ݳmÍb¿ü4Ö%†õ¿ôןµt£öm ´¨ Ò¢/;%†$—o=|±Ë#y½àešH™ªÙ“¹2•‚"Ù’4rÞ¦ƒˆJð Ò%(ÕñeãQ¸ã¡×ç¦DYDNFÎØð‡¦NN†‚ÛÓ ÍZN©Þödù-ÃûDšÖ›9à—Ü»ŸÙ×ètK’å°èiw‘rv=³è&{b¨¼Æèœ;ž‚{ˆÆ+ÁË™O~üê£wô'šNøè–Ÿí>Ùæ&q&Äqáø‡[VNf ã$=^â$mP¼½é؇¯<6k\V ׺nš°t;¹I'évœÿìÝ~2c\ÿ„PƒÀIॅ/n‰è5Jíî΋Ÿ¿ý?Kn™jXÖà!”ý^ƒäp;ÎüÿænɃs¸«;¼£‘8]mu{ž.-J4Ó|uêñB~± ³½áƒggN 7ÒtŸA¸hþðxÜ.—Û#Inçùƒ/-»1+ÚÄãÁçŒnW§£­­£ „Ý—N¼³î¾BxKDLú+wmv´}qæÔ©³-NÄVGÓ'¯ýôÖÁñ!¤A˜W765|ºïÝ÷÷Ÿ¸èt{\m û~¹ðº~Q“Êêኢ/~ôç#{wlXóß/Õœhét»»Z޽µæÞ‘\P_V/X f®ßõÞ®Uóg”®Ü¼¯¾­›‹Ú®‹êËê`¬ýöÏ>÷óòÛÆäßñÓWë"cd¿ñ÷.\0}‚½¯-½pÆo~ÞÜéöJëÃê aÖÁ%Çˈ‹Î¿`Ç>q>Ëú°S‚©—5#+-)Òb4XârþãámWÈ‹b’ Š£`Tè@uJ4‡GE÷ ÁZ a¶‚»5éA¶†#æEƒ9$<2*:*»ºK4˜L”¼d cd:צ5ØøP¬ÑŸœž38‡ EÀsAô+æòt(fA®3†FÛ2‡Oœ2mú´)8¯\T©³åØnŸJ&¤As/kv᤻ËW¬Z³~Í*¢Öuù ®µÛíê8_»ý'š.FÖ*Z¢S‡M*]±þWo¼]óaÍÛØø}š<çp¹¡É^Ÿ&"ª%¶_Ñôå¿x½¦öhÝÙÆ³u¨<>»–˜h‰É7ó±—kŽœþ¢Õáìt:@~ìZÚ¦¨ô±¥Oìøc]sG7_Ô8^Ƴ¿¨àÑžRxÏêŸ4bº½8'R,)²û©{F$‡™Bâí·U¾V{Îáö¢Ðœ`ÁZÚ¶|rÿ˜ÐÈ´ 7}|†H³’ÄNû…w¸Ü]—Ž¿õÔ]Ã’"s§­Þ}âK—WA°¨VvÖ/ØÙíl>þÎúûFôŽë;¶|ó¦N 4F¢ñ <ÕÒÖ\¿û£wä%'ö¿¹j×ñV·¬“jcçHÚÍ¿ò‡¿ÔÝ·}õìñ™ I¹Ó×ÕœqJ 0«Éì<$åßµj{ÍÞ7_¨¼w|ÿÄ(kþ¬ û/tËŠ¨XˆbÒÆÎúÙóÏ?^q[a¿øðpkáük›]²"(!joÖ„)ÌwgÙüé×!s‡˜Bm£l9ÜâÖúS !4>3LÑÐŒ„p“(†X}ÝŠJÝø>Ü'%o!”÷æoösïƒ=Û` ã{¶@9/a¸®u§òÍ](’îbìÜ4/×<‡òyÖMº;D›C¹9e 9±ËËD÷5æ8îûVù,àvN?ô "Ss‡‡˜"ìÝéÉñ‘¡´iŽ`]‹‡fÚ¢)g°ÎåwO*̶ö2Syá|cËú¥“†§F[誮ãXm vÜéÅýb˜Ã˜£õâé#5/?6s\f,òX»§»£¹îÀŽ'JÇfÐÒ@ù!{Ÿì\}Oa EÿTÙ^·ã\íkU?²Ç[¨ 1(„9óñ¦Š i½ F.3*N¯ëË»WOË7BQaX§·«éÀæò±)a"P‚ Œìn=¾«ê¦¬H#ÿ©"Ñ8ÏÔ¬›n…x;"hº/ìß0kx‚™0FU Q͵›çL²`ZoY0ÚBµIu*„ØêC * Æÿ[ª3梼ÂE.ÜÓzü·>¹ÊAFÀ.QqŠo­þ±në?uïõÈÕkÅÎX0 Äœ†ˆ´ñÚ"§¢¯Ú;DKOŽÀºÌ†žì"QvÌÚŸ2Æ–>¹ã@=ò“GÏOƒÙ%,¨Ìq³x–»ØÚÑÙÕÙ—fÊcõÈ”õ°·Õ€l;<0Û Ê×kׯ]…Pj‘òŠ'ÞŠ|+}{ëÛ2úcËè ÚxFn]•jÁ9Ùr"á_Ù¹訪4}ï} IªH $$ ke'a•%,aëf•VQíiÛc»…ÅEvP@DF¡µÛNO£2Cczz"Ì™`lëÄ3V,µ*¦[ÉO‡°Q’@Hªêýóß÷^U½÷Rë™ñƒå}¯î½ÿwÿ»ý÷ÿ¿zt©·%î]gÏ5ÍÞåüë/?<ýüCåÊç6Ðd–B'Ù$#yÙg$]J”CtÙÂò Cã—›&§·i¬Òg«’ñÑ>˜ÉÝç åÂü\¨ê²3þ] ¸[M*&N-§@3×Qбä›~Œ¢”üÝ¡M®øåE¤#( ÿˆMä“‹·ÈÄ-2q‹LüðÈ„K` ÃðèD§êT7Æ!LBñ­†Pd¥ñßCPŠo´”bþtìrRqUG*¶®áòiÅßõ´âôdp0bñu?bñ™ ™KcÔâ›Ëˆ€\¸œ}=Èv£ÑnÑ…Ü%L†ÁÜÉáŒXqhXƒŠ)!)F4ˆ"ÒšP,#RC°ŒXä*AYFÆ2 Èd‚± ƒÄc² ^„eÃa$!XFèXF,/ѰŒ,ѱ ij úÇT,ÔEޱb‘>r”6N¡¿àÑûO¥²Ln¶ñÄ)…CÒ«„H±ä¦‡¶Ä/i@nø(K4¹®",Q¤[MWÒ¥!+Œtj© %n SÁ"ñš†©`×ÄN5SÁè ãH_„Ïó*’Bx¼ß©â(ØD·Š¢^àc(ž/A]j~¢FLñ":UìDRÒ¥"'R^EMúw›ŠÍjVBDQ/Q,ãTiCeŠ“«”ÙwúQ1¹ÒŸnàÉW¬9AeÂ'(²=åÀ“¸DsžsÒç9²-í@Ÿ0ÆçZ$â®eœÞIMÔººñ á^ÝjÎ ð]ú²o—^Wñ…(ikç+[û¦‡+ĨÌÀc<÷om¡‘ÿëdHºõ¤ã9ù‘Chhþ?KCnQ¡ÿThTXÜgTXT'#¯)ÌaòÓ•‚`ÄDdxHµ¡!¼:é &9ÞöÏ0ð|¼RðÊ€$ÏÝK¨lº žEÀyèðÏ Ð5\öËx…_&@Ф8¥àqŠŸÈŸû‰ø1|ÑDú½r¤¡Š/Âï•#|þÙó/R@Ï¿Hq<i‹‡îÒË[­ó—·0Fç7¾>üí­ùÇÂô]í!$Äzƒ'7Ü÷^ÕD?R@‚UGÀ•ˆ¥€Ïµ–f{ùZ‘çG¡ª‚n~zUœUÐ>lI'7ÕÜUÿT Ý·žbœîù@†o/8å½ e@¤KGm¥í¤&E™¤­?iQ3ƒ,õžöÐWÈ&ú{ÈÑØ“Li¼t"xµñЋŸí* G±Ýb–>Vw¬Â#b¬&áõ˜j”×¶øŸ¿ú©ò}<‘ÿ—çÏ"½ ¼Ef\öк‡^»þ±'6¨_6 ç¯;Ñ_6óüçïe³¾ê%÷꺉õK66ú ¦W0½¡­¿}!ã0·š9¼ŒãË ùwl„´¬!äëc˜þ@HÏi þL¨q ¡‰¯šô8¦BÓ~Kh^¦jB'9]°‹Ðåy„>ˆrkî tÓm„îþ¡‡®bºAèo~MèïS ýÃfBß|šÐªXL¯ú§ }ûo˜:}.¦M˜þˆéKB-I˜æcÚJè'q˜ ý¯nB/½¶œP÷q 8Æ¡'lT%a˜/ø#a…g+€i¦*L.Š—bz çaŸ…YM3ÁÝM3šD~qAS“!ÉÀŒl ‹§ lÌé–Ä’ÙP–BSÙ°Î&.c0šœG † ÂWdáø`xæaˆ= "¸Ú BPÌe3è0 Ëü¤Ý‡í†w ,Ð -ïU~7<–y > ê‘AÉA€ž”e°tˆ¾0Pjt „ñTŒ1y(ÕªKÚy£@Òð‹‹À†PN£IÁ™”  >…N^'>}Ž"X'Ç:ˆÂ·ƒ†Hhþo?iê¥aŠî!?û(9߸\¿î<Šáê@€ø€AžhM ’ 0LÆ\ò`VÖŒ—޼öî_­ö— ï£Qú'‡v\Ö¯ÇçO+Èýüœ‚ÒòÓö—ç'"^#5Rè‘:0h €¦@hcÚèM'ÆÝ±ûÐOæ®LOH #Tó °æêµ4dñLš÷Ú_,ÿ²hè¡)‚Ü‚<‚4½ ^W²2}½Ó=.íÞy¿x±òŸŸ¹}lzFV_» [¥CFŤ$&Ï|sÕ?Ü5ôéS§ 3pø„©k_ß½|ji~椔0Q±ñi…£3 sL ó³'&‡@9›BÛ®léÜÈÛÊÚ$@kY«t÷ä;Ê:4ù°ë¶™NE·±·d)c‡xª)§I|½ƒuˆo}N?—… mî³õ6“­ëõ¶¶s‘š0´Šgër뜯·¶ž³0‹O´Î–cë¬ã²âpH :äâÞº×;:ÎYÔL›öŠóÆCˆ+­3›HlÃøE G-áW#³õ›ØÐÉ1›[¹£¸œa˜ñß#GlÔ÷Å)µÄ”»^¡·ÏZ1ý=ðHBáŒ/ u~Ç™º~£ÓÍ µ!Ý ¾R$_ÁÆ0Þå9¾(~‡Ï›L 0¥ÒoG}ÀïdwºqîË"mqmhc…MîsÝ´[6ÆØVn_¥6¹™Ø6´«1u²EÆJýóUɹY èþ aFƒÈ/.hh0%™X.Ícù¬€²"ZÌF³ZÊÆÐ±lO't6p)Óô¡C‡'› !įÈâÉ/AÆ´7!þ+|dB .˨aG!ûž÷àž‡áµ…ÝpÔă< ·h„ûwAÅšàÓ°–~˜3·ÂÊT|a¢& rÝyOUH±„»½ÆÌçaçî30{7<¿‹ ± \¹:èõ€ÒR€1cÇŽ£jtúAØ^Q÷¼ï8Îá0© Cçs§Uˆ¡@Àh/‹ zøQXqGìhoœ®ßŽF´ry$PPPàÁK=:ŽÂÅñd|ö¯÷.\¾¯ú_ϾÿÙ‡ìŽG¼ rsy$Ï#\V0n€¿`Ç]+÷UÝ;ûöE9ñø})ˆ!—æRpñP~ 4'”>ðOo/ØøIûþE…é©CŠL&ŽíÃÁ+ØPyq1v P ÃRîm^x÷‡»òŸfådÈ-ÈÓ'ÀõBž^ôL^‡ŒŽšœUùÈæÚZª7ÿì®;–ðÑß+ nÀðä‚?ªÚ¶ñ±£+—ÿ䎴pqlÀà¼y˶ŸÜ¾wYùxÓÒ̰q±ƒòÆÎ7Êä¥S'–,I‰s6„c̲ñs»çžœCΗ—îž|{Y»&výÀVÓÉèVvJ–2¶‹'rÄWÛY»xª™6ËBxž~Ïj²v½ÚÚzæb'R†óâéÚÜZç«çÏŸ©cu>ÑZk޵³–ËÖ»]jØÐ.÷Ö¾ÚÞ~¦ÎNíÁıi¯8o<„¸Ò:³ŠÄ:Œ_„zÔ~52k±Z‰•;«[¹£¸œÁˆ @±Rß§ÔSîz…Þ>kÅô÷À# … 0¾0Ôù_dêúN7+ÔŠAð•Ò ùBVŒ¬<ÇÅïðây“IÆ Túí¨øì΢“7δ\"—$©¸V´±Â÷™K]´K6ÆØóܾJ­r3±­hWcje‹Œ•úç«’s³ê1"¨‡úõ"¿¸ ¾¾"¹‚­b«Ùa-{‚ý’=)¬cëÙöÛØYÏë+3†''|ºÂPðŠ,ˆQÀÈqoÂà“< ØSPþ²,ŸzÒ[ âq¸Ó _T¡#ŽÂè-ðÐ~X=r?|Ð#2^ä>á!x4£Ð l• V¯^C}2 tZ²_„•Ïžƒ;@åSsÁ†(ôÓzúÙu˜´HÓ‹ðøæƒ»ÃŸ9éG$zúUäž~-zú'~ ð$Àºuë×óâ§.mPà¿‚Ÿ­8O¿ߺ\•#Ü ÜÕ¯X³`-€§tvëQýtõOl”ñÏÜùÀž“¿?SÿÙ‡/ßxT¬â®~5wõ*¸¬`Ã~ü£÷=¸÷ÄòÉÊ®ÔnME|7âWHú×Òµ1à„/yôwæÛO^½¸źy©TT ”®êU° Go{‚ëÔ@jÊ=ÍKW_¾ÜõñÊñ³çÏü¹ÒŸv>ZÄ÷*x Kžºè¸è‰¦\½ÃòÙ¥·¹ÿç<_ÁnŒ“–Tü¨ãwë7®ÝyßOï½oDh»èîmn»gÁ”Ñ+rB#„Øø‚)s&Ì›6cÙœ“VdA8ëƒ[¢l³Ü\›Ëš%áÆ²FéîÉ·”µhòa×l6UF7³7d)c‹XYŸS/ja-✉IB†f÷ñ³ÉÜu¨¹¹ÊL,DjÂÐ(¯Î­vjl¬ªa5>Ñjs޹³šËÖ‹EjØÐ"÷Vji©ª±PK0qlÚ+Î!®´ÎÌ"1ã!€µ„_ÌÜGÌfbæ¾ÂìVî(.gБè‘‚#fêûâ”ZbÊ]¯ÐÛg­˜þx$¡pƆ:¿ã‹L]¿Ñéf…šÑ‘_) ’/„`FGnæ9¾(~‡Ï›L 0¥ÒoG}ÀïdwUÞ¨j¾@.HRqÍhc…õîª ×è5Ùc¹}•šåfb›Ñ®ÆTË+õÏW%çv&PÞT;É®&6œ¥Ñl$ÅÒYÍdY,›åpÁ¼Ü€!7 % ¹Á÷Iº/ `Ĉ‘t$…ÎL¡yX† ô‘^ ùápêùF¤û^çÉ1§‡4R0ÍGj ba‘O±8ýðµá`$À¨ôttDb&zW–-€Ë„œ½¤–BŸLK±ë%b)–¿=€cª`!# +  'ÒC^€ªÛHjZÎûÍñHmGRøâÎË ¸KùÌ}å9>çê²±V™¼.¾óî>už=åwµ‚mB{êûmhÐmå­˜:Ô÷’·¢ÛŒ§J>OðŸÛO5šÁ‡:úN´µ­·lÅ–›x&hm=[g¬+qôZxE¯pô‡åDG‡”óSÃ!ºæˆ"F‡H‰üBU-0[4¡6Ê‹~‰óJ ^<“×uv1Úá$|PÌáÆ3ââÇCžC@=u]ê%ã^u!Ÿ8Ϧ°Z!w¤ß½õ³–†™ èeÏcjWßKNE·O–4‹ÇøÙ' ;‰àCí}ÇZ[O¿g5X‹ën’ººcçÏŸ®5Ö–Ø{ëxE-¯°÷{ݱöv)秆Ct5ÌŽþÖ.{"¿PU ÌŠ®ÅJy±À/q^)Á‹gò¯¦NbÅ.FÛÄŽwfwcÑßòŽãÎ!ž²vo?`å;µs ¶,¤ZTôe|…êEŠVkæ“âŽP­o¼ÑácuÃV-•/èZ=_ÔóFû¯¤„çKeGçjç¢Ô³>‚ªˆéu¦Ê‹®Þ=RQ’j ©e"Ú{vr)’O˱“ 'KºÜ—Ž5$4”[ËkÑÏZËë%[/nÜD7±Íl {ZØÊ¶±íl‡°“íb»Ùa/{†=Ëö±ýÂö=øýE*¸y Ei¸¡§ÞÎËôó?âü Z=Ñê‡ý)&ñ홤¡0ë´Ó¾ÉŒ*ðA>—~WA°3­!Á*4}Ígh.®¾J£GMI}ët&s°Ï׫·¹cë•á¯a³JÊPZC¨}{&5ø˜xgä%ÚïÈw¬ñó7a¦r§tÇwOëž"-§»ê¦æ‡äl]~ª°‘ÞÚ7­o ÙŒ ¦k¶klê…ü{‚›mƒ|¢ÃÊÛñ¼Õ1UÅÇóNGÞ¦ƒEp…Ž<™+“Éì¨0·µb¶RWÒñü ÒÙñmy•m®´|¤€U…¬=€ÈpÄ|HÕBØ1«„úIÛQ'Ë-F‘BÜMA–×Pp¿æ*f²z‹ªÙO..¬–TV©¼C%S¥äOEôqeöŠºüüîù!¾Ó9ëlv6,dçÀ¹ì<8±Åð]¸€]KØRX±‹áv)\—³+àJv\=n!#gq~öBV!ælÎ5 ãC‹/æü»ôí…%œ/]Æ–¼ˆó‹9¿ä’K/¥õÓåW\q%cìo]ìp~á’%ô6pð_zX~Ùåœ_qçW^uçWŸu6ÁžsÎ¹Ì Ç§Â2Ä“‚(<>}t)â~¡e; Jiœw>Ã´ß ¦½t)çËÊP ò¾¿WNJ*øUPA°öŠêÞ„x|ð”n¸£Õ¹Æí_Ê|#×9¥+¾kZ×i¸ÛÕ_×?57¼N°—u¹©ÂDwKï´Þ)d²(¨ Ù®­£òï Òh¶Ar‰v+g·ÇsVûTÏ9í9›À=Úsd-K›£ÂÚGJ¥<®¤ã¹¤³ã›’*ÓPixH)« £z‘á0 ‰ùª „ÀR õ ’,6ãM–[Œ "…¸›‚,¯¡à~9ÌUÌdõU³Ÿ\\6X-©¬Ryÿ†J¦JÉŸŠèãÊìu¹ù]óÄà]í¬ÝZwCÜcÝ ÷ÁýðcxÀZ ÂCð°µNxÔZ?ºá«”Þpçík <ÑvΕ(Îzï¹óûñ Sx€óµl-{ñÁ‡8øáuëèuL§ó(ž†Ö‡²ûq>þã MÅÖ:âé}Ìy„óÎNÎ]¿žsÄ“©Gÿµx8äÃÙ#Œÿ&Ÿà€Àaê³9 èÜMit܉$t¬åüÁ2t2?"ð *®ÌÌGâ÷DÖ]TÝëhç!z¼”hµ#Ô‰¾ÚÞîlÈÎ32S:ã;¦uN‘&¢ÙºìÔÌðÁíÕe¦ cÐ=Óz¦qœ Jf»Vu^È¿'(•Ù9È$Ú¬ŒÝÏXmSU|<ã´el:Xt÷PhË]&ÙŽ »BË”ò¸’ŽgFPÎŽo´¨Œ¥‰g ¥¬*döèD†Ã€$æCª.%Ô'H²Ø`4Yn1€ˆân ²¼†‚ûå0W1“Õ[TÍ~rqÙ`µ¤²Jåý*™*%*¢+³WÔeæwÎ7Óeg’ýü9|‡85‚Å gC€³!XÊp68:V¥zgÏP|ø;œŸEó>¶GD8çÓ@»h1CT_pÁ…ìBg K$øg cLŠSRŸ.äçÿüÜsÏ;óóqŽXúî˜ÀâÀ¶d)[j@«”?×à ¢àj@å˜gÇ \lÀ^¶iâ~ˆ&îE ï_ÆùEròÏyþk=íó9_´h1_\™Šßè*P[ä,¦o;©a¯«R碶Xqý}¦iðš½^w‹‚ça²T6ÕF^r&7½ïhJ›)2»;¾»¶"Éš¼PÞöȲfè³%gÖÒ7ì’>SÔ¤B–¢KšT(RNhiR¡Òú켫&~æƒbK±7iWdÐèȃR/¢m—V²ÜMÜÀPŒá‰:² y‚IWÿ à¯‚îóŽ<€!ÏX›K SE¢m¨Æ’ „¼ïÊvhy••âå( .š_ã¬TùX¸ó i f.ÐNtéÊí$G¤ÓuÏ30y°œ­€kصp\Ï„ç»nb7Ã-ð—䙯VÁ­p¯©é%µ³z9ûº@FW/§Aì:œª NËo¼‰!È"ç¼•ì¯ |Õª[Ù­Îm$*C«9_¾bÅ5u®ã.–ýžo`n:àù¨­\IîiÇGámßs2ŠxiûxÊ1Nª1Ó mñÑïÿ5mWS Ö2îú®ä~ÚûM& džÀù‰(먯ü¢ð t jˆs§<ô'ž ò.$8[9ìg`‘ ¯å°ú]O ÈCrøF¡À懵ʗmgñáï èøì_$ÂdÑîŠïjÆŸ­ˆ¼&/”³=B¯YzmÉëµô»Ïf5©¥(&Š”ZšT¨´>;‡MâN0(¶ÔvE݈ö(õ"Úv©/Ëõ³wC1ò'zË6äE&]ýƒ‚c z˜;ò†žÞÌ6c“‹çºYwë%çƒ)ƒøÈ{zóf€²-øü{þbÍH/£” {zp3ßÌÝÌJÜo·p¾åyÎ_à¼t²….ΟF |óÕ€ò]¨Ÿ|c¡?èœ?Áù“Or¾‰ó§8ï"4kì3 îµ7¢ëš;OÑÔ¯jÑHT[ƒÏ Ð1Ó +uz"ÈE»3¾£¶¢›¼PÆöhÆfè±%ÛØÒ3ìÒF>ÇÖ¤B–"ššT(RNhiR¡Òúì >ȈÙ:Á ØR¼WÚt#Ú2 Ô‹hÛ%ä,×ÏÜ ÅÈWšH7Û!˜tõ æ/èaíÈòÕXÍ„¡0%QD½Ú†j, JÈû®l›–WY)^Ž¢á¢ù5ÎJ•)O¿¶à4íàD—®ÜNrD:]ç¼Ô}Ç ò/,‡ìóIÀI=Üj> ´Zu饗±c€Ï“›n¾ùVfX¬&n`Â"’YÅùeô »Çè+)pµ³—*‡W\Ãùµü:ZÀ {ëVŒÞ³Šl.ãœÌ®ä\X1Ðú‰ókÈÌð:ίg~Ž¢-Z4ûŒ pD©_«Ãé5TøÃ¨ÔÙ ¿ß_¿i™ÐâoÐ…kµÎþ8é{_.ÀY50ÏH‹6tÇwOênP¤hí@£G†Öæ% :©¯¡bËÁãó‰Øï)3Ï}»ÃʳË¥-ægู†q¶ËïYjT&,÷@ã,Ãò’½ mõæ,‹°qo“Õ å R– ,ð˜W„„ VŠœŽ”«|ùeª)CÚ/EBF@˜–,Â%=:RE2¿¢ýd’X䆒桥;C­Ù`põíìv&à‡pù±¿á.íîëvvÜËÄÛdö¬=¶!ƒ÷p~ï½÷Ýw?+ÅÚq¿ænV1029Ôw;=kZñ¡ó·dRx‡ÅÿH8^Ýy'™dm@f‡;Š¡¬æüöpN¾OÃù¥ï¹=¡üÁ;9¿Ë5’Àüìà¼ÿ± oóý”øßkhÄ‹±{#Òf?z¿Îù݆´Wü>þʨ‹ÖjÎùqÔý¾ ˆÙ<°¡+¾kRWƒbkû=6±6×(iÄI½ ›ŸÃ§Ž²#óœ˜Û­k·\Þ/`c®›kýf»™¥vÚdÂ<4Ò/,/é¯Ðv’aÒ¯÷6ò šç± çÊÌŽyEH˜` Å¨ÈéHٸʗ_¦š2¤ýR$¤`„x½"\Òãó¤å#ó+ÚO&‰En(iZº3Ô­Yõ"¼[áeëx^ƒ×a›Õ oÀ›°eoAü£õSøÙx”ƒ ŽÞcH²7P¦LY£Vî¼H‰—ð!ñ2^q^¥GÂk¯s¾oë¥Ñî Îß|“V&ä=œ¿ø"ç/q¾u+ç/¿Â9þõ5Î_GÙÏ·qÞÛû†€ngÛÎpþÖ[}L¢?6¡m^ dÙ6LG–Ì.îH–½V„ýìMηoçüˆÂ÷à¯ÒÛ8ìhõeç| é™êU(5ò§“¼@*Ÿ’ÌÓÉòœîó)ëUh²¢êUhr”œ $êUÈ$—ÊC‡­ÓU1úYùDL·³cÒ3`Wf)›5rI T´×`Þ7JK£«ÍI¤õháñ°Çó!ÒãÕÖ B‚ÝORaáy¦•ÚÏa"$.⪠5ÕŸõ„,“^›zÁdSéJ¨­O•,³ñ|g2q^L¸C0áÁ…õ®Õ{ gâͦx_Üôº—^ö>Ǻ'ˆ Ä‘D˜9©dW|×IøKw%/U¯B©þ”ÇPäR¹”¤ªN–çt¯ï^Y¯B“_Q¯B“£ä‡Q¯B&¹TÚmߊÑÏÊ%bºõ•“ž™K.KY‰yM*(P ¢-úr¾X*]mN" ­G ?Ѐœ‘~°¶VúÊ ´ëÖo’; 'È1­Ô~!qWm¨ °¨©nü¬'d™ôÚÔ &›JWBm¨xj¬d™ä;“‰$ƒŸÃÛµÞÁšÿ'øgë_p¢ð¯Ðoý¼ ÿ°ÃúøOø/øï ¹ ¹cAÎÌP%;ã;NÂ_º3©XªzJeS_u’HeR’¸:YžÓ=¾{d½ MVìE½ MŽ’ŒF½ ™äRh³u¶+F?+“ˆévJvLzVlž,eOå16© @BŠ6 ËøS©`tµ9‰€´-ü8¶b>Dú±ÚZAè{(ЦۉI&-œ@"ôRû9L„ÄE\µ¡‚¢¦ºñ³žeÒkS/˜l*] µU â©±’e6þ‘ïL‘”™zƒê 9p³‡A:p³õ æW…kÜ×Ó€ À r€³1‚2#GÕªîfE’¥Z“ñH¨°}Š»hV†3ùh«IÛÆ- ÷=5“²Mè7œóÕ'§}ËÎácEÝ9Ÿ”hÁ4eö´‘€²Þƒð øküþ~»­÷a|¿¶þ>„½ð‘µ>fŸLÈMÈ rfŠ\«:›å”ζxLS:Ó"¦ªžæŠ­b¦K6÷"c¤ú a”¥ñVÌe]„µÎA÷˨1:ïš0¹ßy¦@¡±*9KCÿS¾q‘Æ1åâ86ìû„ ;¥X¦ÈÕ°2œÉ×0XMÚ&ia¸ïq˜”mB¿áŒ/¨>ì“LvduKä|VP¢ÓL”ÙwÒzhwZæˆC¡uãÆ'ØìÉÓ7±ˆ ¶©–; x /,Ø´ O‡ñ40àÇ:| ¥Ði¸•d0p¨Õ$5LR±dŒU.ÉXÌ‹@ ¹ˆøÀáF y¬â 0Ö6Uò6ê·¢þÒe`qÔf•®/W~{”Ѿ­ÇµŽ. ãÉ๸£üþ¶iþ¢:]Èž¹{În ïš³‹ùW{çìeÅu7vO×Ä¾Ô ‘üŒ¼óØîq¿oFŸóØ®!œoÌöyîÅÞš½1FL•"%NTèÑV¹³W’luúÒÎÛíÝssw’òÒÂ:±âa4JT*C­y#1QLk$TVÇF8îþôv‰ølŠW¢ 1"ªE&¬–JƯ¯é¼Zm_}ÐvÓK#Äñî)z ûwÂ2•õî–îj!?Ђ½qwÚŸ‰½qWJH÷ÍÄÞ¸;åÞo ¤öú"&Ö:¿ŸÆïþ¹ýâPh}ûí,˲wNϱˆ –Sãw.'Æï\®¿ßuxu?ý}ã ÿ¾Q‡ZMR4^ô÷ÓxQ¹$ëǾ?rýñþÃ1ŒòØz`¬~_+·Q¿}õ—.ëÇq؈+]_.®üö(£}µñeÄøÁñ;‡ãwdG£ Ù3iÆÓ{sÞcþÕž9{XEq]]“Åu#ѵB$7#笣¿/ ÷ÎèuÖ½W#„s¹Ñ^/½ØS³'"ƈ©R«ÿGw“©:%9Øê®¨¥S™·9ºçhænjä¥!…õ|ˆðиP© µ÷W*Þ+Þß²ÉËêØÇÝÎÝ® Ÿ¶ðJT!F¤CµÈ„9OéÂøuà5W« mCÚfTzi„8Þ=EoaÿNX¦²þÑÕÒU-äû[°7îJ»â3±7¾—Ò½3±7ÒXN÷[D©=þ…ˆÁñ;KãwvnVF[?ù”} ûO?ÀŒav@ ÞàiOÙ¬Štx¶:KÛx¿mÁÀáVƒ Ù,  âßvÌÂ3†\@6ž=Ã8!ŽÍV>ÄÊâ¸Z¾¸Úí£¦½dþYÇ^#¬dM¹°²ÛaìVÕlÁsQçÀñúŽ×=‹Â²ƒÂïÎy—ùW;çìdÅu6vN×ÙFâ@j…HfFÆY³£FÜï™Ñã¬y·Fg3£=^„{±³fgDŒS¥¨Çw'¥:%9Øê.·¥w˜·/¹ç1æîÜã¥!…õå}ˆ ш P© µfŒô@1¹PYá¸;©Û$âs^‰*Ĉt¨™°Ä)]¿¼¦ój´àAÛqI/Ç»§è-ìß ËTÖ?:[:«…|¶{㎴+>{ã»)!Ý3{㎔{¿E$Úé_ˆ˜X«`Lˆ|dË8ŠníË7çÅÎɵ+œ®GÆMྸF\?ê± ò¿Ÿ.}u4)ý–T4†TEºôLH)•ÏqX‡_ ®F8/ÝÒ›kΉ+Òâ_áÔ,2n÷µÀ5âZAm/N5øté° Ié·¤¢1¤*Ò¥gBJ©|ŽÃ:üRpYœãSytcO¦9#®ðé«]áƒ92n÷µÀ5âLQmïÔ4øtii®Ié·¤¢1¤*Ò¥gBJ©|ŽÃ:ü2p4þüYÞv?i"6Œç±*efšV÷S®Û³ðxzbã!VÈÇ”…£wïÿÙ»¾ß&Žoï]ïzmÊ—$…¥@jó€©T¨®”òMŸùOúÎ WTBH>ºý=‹|œGg³=tûóí€NOwRŒ`˼°˜‹††—à;ÑÍáËÆ–Ê"6¾é«Åi^¨Ï³Ýî¯Á£ù¡*_q|ÊV°98Û¢ôÈV?ªç¤Djþ’óHºý]‹„´Çq»lÝþ|óY†ÓÓĵ#غ!¬¢¡á&ø¾'Fsø:¤¥²ˆmVúòcšjdzÄlîúkðh>‰Ê9#Ÿ%lŽ Ž—¨]²±Œê9)‘„š?†äHÄ0*~¦x֋Ȇ¿÷Ïøûûvfe d °—•O¹þ(ó“™e°y e€ Ö~ÿž…çfo2ô{‰{1Â\F•QÒ÷ú˜P‚4–“ “"!øQ_@,r‡"-òÂÛ«à}”îhî¤w‚f‡ª§dUÔ·ÓÛA=Fè5Ý}”~~ç¡ÜwÎw—Ísþéeô¾\Ìý`¹XË×üörñQ=_Ç™åf¾‰3µíü6Î4wò;Ñ -ßáçÄxËg¤-NçjtÈÔQåqûP³†ðñTýChö©âeó€Ÿù@èðÄGcÒËÌŸõÂyd¹†ÿòÎxÁ~ÝÊl¡¬^PÙôD^_È,`2{]ÝÇÜW2À–ï¯ÿbÁ{Ùã•~Žl/F˜KhhÈ(ésXL(AKh¨Q$D:é ˆEîP¤EÞÂz¼O€ÒÝ “UOɪXßJoë1ª@ïŽÿYH/„ßzc(÷­ó-“Þé%ôr¸4ŸŸô‚¥ù§ù§^{i~a=¿Ž3K|gžnå·p¦ÉÐò~N^Kßòi‹Ó¹2ë¨ò¸}¨YCøxjýChö©y4&½Ì¯hB„%oÄCcÒÍÌžuÃYPÖ”{Æ þýó³Ì3”5Ð[›Ö?AäÌOSd†ÇOÚ}l˜`ýåç)k”ÍùôËB{1Â\@CCFI_¶aB ÒX@C"!C_@,r‡"-òjЫà}”J¿ ꪞ’UQ{–~ÔbT^hþ Ë×Ý1”»î\GcÒ=½€ÞXfó³ƒn°0[ÍWÜö¬&d`„LõYþÎÔ_å_E3´|‡Ÿ“w¥·|Æ>ÐÞ±25TyÜ>Ô¬!|јØÂcc õ ô0VFÂqô0ûIL%cnà/Ô2µ$Õ^u@ò¢VÑËU’ÇÀ>LÈ¡¿°‡P-w ‡ÓFÿ¯B Ì«hþÆ–‚|I‘Jî!‘¸ ~ÄD’Hl¯X¦Ìe‘Ü=Yì«yÝo ö[Á>ÜßaÍ•ˆ¿Ž¶#®õHëµt-¬º$r:$‘>A·&Õ¯ UJ/œC÷²ù_îÄÂÄìDÏ ÏPÏ¿BiâëÚzd ‹~þ„þàóÀÐänLâ9mÌ7&Å 6Æ')L;sšôÛˆÛ?×-%ŸçÉ8*ã²ñ²ËÜõµªåh^1®áÛiÌ3®‰›gŒß˜v6æ4éµ·w®[K>Ï“qTªV—ÛækUË Ðð6®âNs 2¤’äŒu¦9MºmÄížë–Ç’Ïód•ªÕ¥O‰ïßeçË.=ªõ‡|„îÒÐ£Š¹uÈCè.åU^„ñÚ¤–-lÎ)¢3W)TRµV½èß+m6ÓõvñÞŠ_ðæëzñÞƒû…ûÎ6俤vZM”½W*”hö¾?€Œþ£>=-U*a¢’„äHE'¾H€·\R3a&m  ß2™’à 1 7jÃɤ$üOGbѯ1¢ŸKh£bFêÑlõ/·TèB$ÑÖ'Æ«„WÕ\xL³•• Í>®j4»‚º6µm@çÖš…¦SúëaæŒ{¨ËSE4Ü›:3uÙÌ(ƒò”©%Ë›qæÑý,<¤Ù½d•õèéÃò@9L”“)ëÄ pÑI@Š ÐhÒ4 ¾d 2$3ÀAb@j%0œüAJÂÿt$ýÓ)ú¹„6Êf¤ÁVÿr{@….Dmñœ ¹JxU½ÅÂ"Í–«…*Í.®Vi¶Šº6µe@ç®6 gý5êoL\çaF¿‹º<5&ë»×Ï Ã/£ÌM§ðÜ”Z°Ü±igͶÓ0mT[µY÷vq­°–®µgo/º ÆÚìíîî8Ï 7ýCá‡Ô«Veo Eš½ã ³ù¨KO‹¥R˜(%!9RÒ‰/à#€  Ñ¤ $4h4| ÈdHf€ƒÄ€ÔJ`8ùƒ”„ÿéH,ú5¦Sôs m”ÌH=:‚­þåö€ ]ˆ$Ú:â¸r•ðªº0Ol ÆÉúO Ohvumê™û¤^¨;µ×¨¿1±ÎÂóö6êòÔ,z”Þ¾ræ 4Ê#ê~D}†9‰{¦ä…ÙÙ?“üÍóFÝÇ4*/_L6Ý©SyÃÉ`¤Ž‹¹ÅÀSTÍUƒ²ŠZÍ­‹ªøÜFPUQ\#XUeÅ ¼œ^'=KE]Ï]ϼ›AÖš°›q“üÃ:{ޱ“¿yÞˆg:7‘®•r¥ð\Gb]]C””Ì?ê2 rgôކùaôF¡rŠ£ÅžrPéAQ¡R42–†îBþš{4Êbð×_é"+œ„i“ÁH!¼‰«*¦…’Šz’{øªøµÜZ°¨¢ê¹zðD•ƒrsnx…ô,u%w%ónY_<]AàÍð°µCò@ûHÚÏ.QWµÃq;âeï5 @5ûR‰=%Ä×a7hD¥=ÉšŽhÛÑß+Á·Îw9EXŠ€aÕ3ÂRxÄ…—°7[*F‰ýÞ-¿³(†Ò_T²º×K“57PB¹´jµÑÂÕ@åõòózQy½µïï`éŸï¤ŸL¤”ë'ˆg@d¤e¹kèVæÈ’]^šþ4j¹á¾}¾ƒÌ©ÇR «ž=–Âs n,¼ß© $üZngQ ¥ ¾¨þdu¯—&k8n „rhÕj£…« Êëåçõ¢òzkßßÁÒ?ßIM¯Êõij%2Ò²Ü5 t+sdÉÞ[M5+ËŽÇZ1³ƒ¨bd<@{,·ûd ƒÄ6J%>ã>¹9ŠV÷ˆvpPÚçìkLÔ3\Ž;8BSß`ØH¨®ÐØÝ7ΑÙTÝ…Q†+ÙMwFÖøLêÆ½kFÙ7ywÌV‰€qîÌ àÎNÐj`‘ ê}°Pãó ÃØëz›tb§`кumK<]cB?gžFQæøV M½kõÑ—œ|ÈáºE¦_Ú’@ ud²kÐè¬îÿ.à‚Zìöq§w0 :œ}苎ª$Ë4I§‘?Ú¼#ÃhÛ Ùl[bŒ1 Üó4ÀF¼R;°ÛX¤æ»bk^R…ß2§v+˜=F² .@Há“sRú*›ÚY¼Û?õ‰}†¦xîwãÑju¯wÇ­}ξŒD½¯Á­¼ƒ³;õÿæA‚„êîŽ]ºãœÕMÕ¥\†¸’Øt‡sϤ®ú»f”ýÏwÇ,a• É7÷ÎÌîìè®Æ ª^ï ]€ÀÀã¼bñaØ‹ëz›tb§xѺ…oK<]ÃF?gŽ{QæøG M½kÃð.9ùCdt ,M¿z%€êÈd׸ÒY=ìÁop¸€ j±ÛW„¦ÞÁ$èpöÑ-:ª’,Ó$FþhÿñŽ £m7d·Ìm‰1>Œ„rÏÓ *ñJíÀncEšïŠQ¬»I~˜ڭ`öTÉ&¸!…OÎIé ijg ðnÿÔ$6"šâ¹o}އ¸Õ#88Ø-²&ànŸ ö: C@êãÏ#  5¤vÛ H`ªa„qŠ+ÙM* ñ™4îå»c–°‰˜/*õà àÎÁ ÔàÃ"!@5²ÁÂBA0ð8¯€XvãºÞ&Ø)È´¾Ê`K<]cM?g~°QæøÏQ M½kµñ.9ùàt‹FM¿£%€êÈd×`ÔY=´Åop¸€ j±ÛWijÞÁ$èpö/:ª’,Ó$FþhÿñŽ £m7d/çm‰1>TˆrÏÓ@9ñJíÀncEšïŠQ¬ýI~˜ڭ`öTÉ&¸!…OÎIé›kjg ðnÿ/Ö`#à²4sNó'©Ë°MÝÚ.âMp3&Ù‚HFuŽ“D^GöŽ3ÈÁÔ±)âŒ×¥I|A¼´ý?çê,CòŒ6©ªdÿænû£Î/}gùsˆ âÏâp(©ZP/Òfã°(ið-2ù¢À~xKqš€§KG/˜}&»XMØK©8Ûš :x k˜/Ií´›‚—†D0—}QŒÉb êAY¡*œ-ˆÈ;*è ZwyAKc¨oƒG–¢"CBÓaïÁÁXà°ðrIH‚ Lê °pŒ¬}¡Þ±‹#Gò.‹þéÊVæòsƒ~P™{|ò±37à·+sþʉ•p®’ªà³J-[ î•6M³blbÒãÍìfpoVãæ†€Pkf›_Ê› jŸßâÝæ&•ÖÜÊʥ߼t÷æÈM™ÎZ倬›—²—&ƒ4_2.܉»¸CÄ^:Ë©LE•+Wߨ˜½Ö4šÆJ{®ÙŒ°¬ ­síÊæ&_éÀmXÙ<±Þó^WN®„÷¦ì©!|rj¿ ÿCvëg¯Þ5êoSWY‚‹xùÓœnkla £ú¼GI"¯# {Üä`êØqðíÒ$¾ A¼?ç¹/Crô7©ªdwýnû£û/=gés7ãÌŸÅQvROƒõyúgm' q&7Ž÷‹x>8Ó<]ByÁì$0]…U½—Déq¶84-6ðRÎ0‰‰ƒ¦™†€à%#h_c²8Šz@EV¨ g òÔA^ØÑÖ·ÀPQ‘!¡éJ‚°÷à?pXxÙ $&õØ8FÖ€PïØó#÷ðTç.yay&?3èå™Å“‹ÎÌ€×.ÏxÕÕp¦œ*ã³òjv5¸ûpÃØ0ËÆ&-nd7‚»UX•šÂj#Û@ø¨ÜL°Zööy- Î5F0Ù(·fªÕJ¿qqîÆÈ ™ÎZ倬³&ƒ4_2.ŽÌÄ]Ü!b/eT¦¬Ê•«o”M¾Ú0Fµ=ÓhDXªH+ÆL»¼±Á-~Ü†êÆ‰ð®wôZ=Y ï^·¯á“SUüRø¨‚yлWiˆ›úÞ·‚&àÂo\e¦qF êE%‰¤xöÜ7ÈÁT€)% D“õ‚DÏpÿ<\L, ‘Rä “êE @Ña¿‚âÿ\gásSäÌžÅÑ™RÕ 6K¿Œ£4¥ÁQÓäVà~ Çnrꀧk/˜A6š0÷’èNÎ3M ¯Y “XJ©Wíº€àµ[j_c² ztHV¨ g°¼•€.™tgW04†Ú3poUTdHhj2 ƒhŽ å‡…íãD… ˜Ô`àYì@½cÏŽ@~ÜÅs™{º4䆥éüô ”¦ý“¾3=à¶KÓîâ‰Åpº”*á³Ò“ì“àvqÍX3KÆ&ùkÙµàö",¿LáI=[GøÖÚtð¤äîs[@ü¾>‚ÉF©5½¸8Méß|õý7#ßÈtÖ*d}óUö+…É Æ—Œ¯F¾‹»¸CÄ~u<–5R™’*W®¾Q25ú“ºQ7ÛÓõz„eiŘn—ÖÖ¸i‹Û°¸vb-¼í½¢gDxûŠ}eŸœZ+?ƒÂF5}krا´ˆ=ºŸ\‰Zl$ʤÁ\ pÔŠI£¬Åâsñ°VB„š²ähU&.@¶ñ¨¨íL#XRaåµùujÀFê¬à¤êD,LV^÷ ¶'?¬KÐ[RQ‚1)lJ¬·cİæÁh.›ÿ+LLlÄ|(Ù™`ÃâdlZòoËIñ[/„6•lN‹˜bÑòõØ¥’ñ™"ÆbÈ\K4·þf妰a‰ëNeÌù·vC`‡¢_eî€J©Û+âBô³:rƒÓñÅÏâ-Ÿ›É{…9&LÉsÄŠ„˜ •/çþù8¨ÜZùbÅØ oÁçcýðÖæøf»RºÕoJ‡›ã7ápiüîŒß‘Îò ðU†“Í8þÔæ›áÔʯ ÷ðAa.™žumØ£´ˆi´Ÿ\‰~ˤ±Š $׊Iû Å"Ÿñ€aBñ²ä8`&.@6ŽôEÍ8Ì s(¯Í¯S[*Rg'U'bì°ÊðºïP°}íÉн%%ׄyƒõvŒØ8Ã<ֺ넵ƒß§?”L0§qH²{,ù群øù ‚·JæE¬‚èo«ztVÉJ»%dŒ"3¸RØÆÁõ®2füó§!‡hCÑoév@¥Ô_¼ã"ã³:rÛÇñÄ/•-[l{…­3&¬šsÄ  *å/gþ¹”§ª_Tpju| ƒ©ñvùáTc¼!nŒß€ÃÅñÿgïê~Û¨Úü|xÆIJ“@+Ò4o¹\€ˆV¥´);ûOðGô‚»ÞôâU*ª\Eªv…T•ˆ‹7•Â6*T®ŠðÖZdYh°!c×’ë‹6P•Eo)qìaÏs¾æœ3ÇŽÙZD¤Ä3óœßsÎsÎÌØÏ<ó|œ‡M~9/1äYˆ†ƒû Øô+—^nü½”ÅÃTsGªÊê EJµôiBVÔZHvfÑ \mR¸Doí²´r<3í%ð 1ÝZ¤ÐRD§S£4ÿšÉÆHS.‡7R…^R "¨z7‹»K±ÎêX¤sÛhliÎæ*Õ´ñºuû8φn«Hñƪݔ }ƒNˆ“‚ ž_±ØÑ+È?+hâ ¢ Æßg© f•Ü%*tÈ<Í׉“L÷w±ºå,´"&#¾r2Å,³:-z:åÊou癌\ O£·CÝ"xÔî‰ì“D·†´3^ùß®þ«ß/¿œ Ì{á»Íå&ººÞ½·|¯W.¼»³¼#lÞ[~6ç–ÏÁfsyS8bȳp ÷Øô‹—î½^ þŽÕÈIÐhñ”{òkŽiµQ|eaâw»<Ë+Ëð zdßײؑ:&å7•ÌugÀ›‚HêØ,"$ ²ë41aK†µJQ ø˜é“¾’ŽUzç³£›Ú¾Œë£É’)î¿(!Õj©¸ÖúÞ5‡ŸÐ_í;XçÆ}Ç8Î_nP3þ#{ÄM•9@Š>•Ä=޵Hµ™$e/¡óëä^šÑÛ†aÌ'P#Uo¥jM£&tƒ¤‰Ñ_ã˜WœŠ‡À£)¨µ˜4³§Ï ÒR'ù G+} ÞàܧiÅô‘6ìmyu¯åu¼+ÆÅGÞÞïCïŠi<”Ö$(T‡xBKÙà?­6ŠÆ{[ùwyú^–ºÔØ~EËbGÚ ”¸V:0לï"©c³ˆü}Àp¬™,s¯½Fç¢ ð1Sg+Jž]éíÇ>ŒVljû2®EŒ&KUºÿ¢„T©¦âZk{x×~@}¶ï` Tp¥¯ ›ž›ù)‰™Á‘=â¸È\âD/;â0ÅZ¤ŠL’®™Ðyúq¿½Èî>ŒYã¨c¤ÚµT£ÉbÔ„n41k<ÒRኛéx4µ“föôQEZê$_áh¥OAÜûtßôH÷ò^à5¼¶wÝâ½÷½óˆrÝô1¥1 êÞ!ž.V¶~O«¢=ÛÄVï]ž£™åguº_Բؑ–*e+–ÌUg€eœ ’:6‹É å{À±j²<Íö*50‹:yLÀÇLË.*É•¥Wû0Z±©í˸1š,ðþ‹ReŸŠk­îá]søIåÞ¾ƒõcÁ¹f¼ˆnzn§$f/>Föˆ+s’ý®ˆ k‘ê0IšpBçûÅ=¹"õ0f£˜Ž‘êþRe&‹QºAÒÄN¬ñQJ „+އCàÑÔºKšÙÓ)i©“|…£•> opîÓE|Ó£Gïªç£Û¾éÝÃi›ßóÎy›Þ9tÓï` Vñ™1ô°/ÔerΖ0RLÝ„6±8Ó_hùQ%9’`×FâÆ†AB¢Ý¤$»®r (‘ä jf:kbÀ´,A¿œR›IÁõ¸éX.Í^óñ’L÷ô>HÓ@-ßÅëŸô!¨K´³õd‘Ò‹?$c±Œu9,Á±ÌH¬ÅŽs7ÚF8,¨cÐe¥R 8>‘H ¦ª¿¾G—¹ HA[&–â½8XY(7²[‘Ý;Zó¤ÆŒœAqfÎÃb9)t+UЭĔ¸ÃJM)[ô[pE”T›I‚9\Lj ‰Î’ŒµÝJ¨ÙÔÌ4ÁÄ€+è.‚Ö|8^RJÁõ¸=X®(5óñJR÷ô>.Ó묊‹×?YàÑøËÖ“9Dª$þ,À2Öå°Ç2˯;ÎaÜá° ŽA—•J)àøD"å’*Ôú]TDä. t ˜˜÷â`e¡ÜÈ lEÆìhÍ“Ûpnu”Ù3‹U°Ð­TD·S+¥°Øo--‹) ¤’RÌášÓ@ÜØ0HH~‰S’eV¡[ 5;ƒš™~•p@ÐEÇ+a)¸·þÊ…° pa>^ëžÞÅÂaÚ’Utñú'‹¤ |Ùz²÷Ó‘‚†?$«¯Œu9,Á±ÌÚ«ÅŽs·¾F8,¨cÐe¥R 8>‘He£jª¾G—¹ HA³&&ß½8XY(72ýZ‘;Zó¤ÆœQÉseåΠžkž#{̶GLq ÿ s§™Ds(yŸÍ_’›X—úA‰ñÖYC#7qÉЙà lRq{({‹/ûÄ9­˜iÔ’¥À§ ÓžΦ—qB] ÎX*.N(žŠ¸¨q»)œ\“;oáÔ¾w¡Žcsê—#h…®¬ ZX#D÷Þ0ES^¤Ü±Ÿúue>õ ¥bh¢êÅ Ú¤á>c¹q„ªŠ­4?>Y¥„¨CVÅ^çȳtÃT¢ø„yÙÒØfÑ8H^}ó÷é&ÖÖ~P¢"u¶ÁÈÏÖ’MjRˆ Ö:È^øË®qN+f(´diði'†³éeœPWFã3Š‹Ч".jÜŠ§רÅ~G¸9q†ïE¨ãظøåˆzçAIœ?ˆ§ÑðG`â8 —Üöôç¤ðÔ²µŒÐƪþP¾z¶Þom‘â0Ñz©nI•g MkKª)ƒËÌlI•geõ: ìÑ£îG8•ö÷ÁÂÝ>¼ `/,\0?ì]Pzý0+Ð"¤ÈO{UÆbˆR “T¤±Š;Ù&_ ¶:'€"–Ije’:¨fóÇó [¯²8Çi¸ä¶§?'…§š­f„6V°‡òÙ ßÈ“º.Ñx©楢1PG¦‘—ÊÁà 1y©hÌÃìÃ^[=\xØÝzÈ©´¿÷ÞïnåÏ+Øó çÍ|ï¼Òk>+Ð"¤ÈO{UÆbˆR “T¤±b9Ùû&_ ¶:'€"V8jd’:(DóÇó [¯¸8Çi¸ä¶§?'…§œ-g„6Vk‡òùY¿\%%Y("x)¯Jõ^ LpUªä‚‹»\•ê½ìdwzM¶³°Ó½¶Ã©´¿÷Þë^Û<§`Ï-œ37{ç”^7³-BŠü´We,&(Õ0IE«s“½gòµ`«s(bq"ô ˆ(©jÈüYŠQ<»|YòÆ>±ÞëPdéû~ðC–À2™ö8"š÷-¨€åÒó¢ó\F×Ä tXëÔøY]ö¾Qj˜üYŠ!<»|YâEXëŠu²Ô<Ž%°L¦=Žˆæ}K#*`¹4ļè!— Ñ5ñÖu~V—ý€o”–düÏ._–x6$V»bþ,õ‹ßb ,“i#¢yßÒˆ X.M0/:iÈ%0tM¼@µJ]ƒŸÕe?àVÿû_qþÓw×m?±žFÿÓ‘«)´Jò+—ïMò½opø¡#Ư‘l ]f]ãÇe(Ûþ(„á(1—¸éŽÇzv¤5¦^Òô6‰-“,2÷³–c ôøCH7c‹EóIÑ{1.e)-l(È™¢„ ~Zìõ 1$p°},,“¹¾büƒsññ;etN+îš]I¬¥Ñÿtäóˆãh’<„Æå{“|/Á~èˆáI$Ö¿KB~lòñã2”m¢ŠpKüEÇc=;RÓ)hò›„I ŽˆúYË1Pzü!¤›±Å‚µ¤à¬—²”Ž%“ãŸLQÂ?-öZD‘'Ø>–É\CçG9¹¿Tð»JtN‹î*ÄB§Ñÿtä|‡Ã$’b±ZÛÁqlÅüw¶æøiœ ³<[¶a“*CBÌr}¶¾WöýZ=]‡¬—åZýx½WFtvÜšmíÕ¡•naB]%´:ÉŽµn¡ÿL§Û‚–NºC[ÜN¸Þ1;½õlÐ~ªó„@:Ÿ¡ÆýP7òŸÝpoÐ0íä@ð.§òø{=ͤ²×ûq™woá/üÌÀþ~âƒç¼ˆ&*ÎK7FÇ¢%øuä>ûµK’E>Ö2ñy@« MʹÚ!L›©‡eÄ »É:IŽT+Ï”Ø$Ë+Fýœ¥?‡§Iª¡ çFG'ÅŸË×ÅèòSˆq%ñßþä|9nîCS’d‘5L|Ð*CÓ„r®€vÓf‚°„8a7,FÕÒLÉM²„n¤œ¥šÅi’¨ÇŸÑÑIQóx]ŒÃ>…ÑíQ™‚4u/_E·w‘!Î.Ôµæ(ñ‹I­iI^SŸ[—ö%ˆì+‰ÿñÑ@Æ;ðë€ ³,£Ÿˆ7…£©×„%ÒöU3.6ÐÛ»îmz7½M$iÛJíë<ÍX®BÒ‘A.…×Ô§±¥} ";’´â¡oœwàFÅõ–ÑÝú¦p„¿,ÞÄ©4oƒ¿:“}*mÓ»æmxÛÞ’´éŇöuž¹)W$É ü5õci_‚ÈŽ$eW€]íä& 8 vq´N°vq´I&gZšùzª|©sµd-¼SŸ®Ï!Õ¯Ö2[VÍn…wZKè°^3kVÙFí­©Ö\'ôkvÍ,‡-Dït–€`ÕöÊõz™P¦:s7Ú©sy…–ŸÊÏÝRh·¦niqlŒc‰‰a“£¾ßBš´‰&‚6ý!ÕÑ< 0~äú[ qÁD[Ó­ùzèßqï¼[ñù U:‰~Á«Éjx;˜æÐ¯}µa6¬ªÝo7–ÐaP5«VÉFí©Æ\;¬TíªY ˆÞn/Áªî•‚ D(Sí¹ë íúÔõ¹M…¶9µ9wS¡Ýœº©Å±1ªlŒ%&†MŽú•RžL4´é7)@ó@‚ÂtúÈõ·₉6¦óAX¹íÞ~+vUÍû©ÒÙ H··ýi}Á—3@EnKèÐ/›e«`£ö`*˜k†Å²]6 a€Èávs VB „2Õœ»¦Ð®M]›ÛPhSsÛíùm-ˆ Pf,1lrÔ/èÇ=dЦ’&¤„¹ô}êoâ‚Y¢ó‘ðÛîö[Âmsb+3šWè$Nôârd’?¤gx›peq“9˜¶uåºJ¬³œÅÔâ cï±Ô{ÔL ž¥LÆŒ*5¨T!13˜ë#ÞªOÝQüwã1.žÈgFsƒÄ)RC\"‚LrkF†·±¾&Kú¾’YÑ÷¬ðyÀ'¹² ¥žÅ aMX‘„`…¤þ¨)‹ð›ú3w`ÊU:QJ ­àW’¼[Á°¤zÀöƒ’ä(+’(ªm÷ŒFûj/´»Ÿ¶ òúÂõî§77•.76Í›½M{3+Ðh¯)ò³ñ屘'³(Õ0I5¸F¶aòµ ý ëÅV0 ””ÐW)[ŠŸNíIC—ÁÚ81 ÉWµšdx›peñ×AðÚÆYS®«ÄËöLM@:öËHí6ºáY²ilbʨRÃUHì>æÚˆ·êS÷ŒÿÝxÐ÷ÕÕÌh~¿“8÷lˆë>DIn^Êð6ÖפbzBßW2+ú¾‚JˆØfqöhÀçç"/sÐð,n?+2°µÓ4e~SghæÿL¹ ' i¡Õ?&Ñ× (ŠËoß/HžÁ"‰¢šÙf/`4ÚWs¡Ù-4ymáZ·°½¡t¹±°an÷6ìvV Ñ^RägãËc1×mQªa’jpè›ÈäkAûÖ‹­`()¡¯B¶?Ú“†.ƒÕqb£“¯0jÆÊð6áÊâ¯:ᕤ³ª\W‰U–@›Úätì=–ðÒtóôÝØæ—Q¥óJH qæêˆ·êSøÝx\Þøøþ|õÎb'jë$|ézøgËÜ ?ºüêeÂu¦CˆgîþY<\øøž>¿¹ØŒÚš;‹;„/ýUøΖù:üÇ¥W/®3ß♯AÃ\9tÑ÷:Þ#Ï÷®x¼6:®xmï¡Wñ.#ú]t\ôšÞŽWô.yßz<”ç ›ËÏ_Ч“ëôë<ÙJêþE<á¤TÃþ•Ü•1’Kf¡ÒÙAò”ž¿O;×î<·IêõE<áe¤ÃþåÜå1L„2œhswù WÉÏ_§™kö}žJ$eø"žðRfaÿRîÒ&~»Œ_/°“¢gIfÅQ­:#µgîæ¶%Ý·j¹ZY”ÊD¥–l‰º½x;jÛº³x‡Y¢Ìså¨å6qÐÁ¹”qøËa¡“r-S š )ø˜ÄƒcF±Í¬Ù†U뵚Q3LcL‘¡öp£U{‚·5˜PCZîÐ50ÕªýLah—£d‘zМ@ø='‹Gš8L'Ÿ¦ëmÀ4bk¦]Ü¡_Ÿ«‡F}¢Ùk­¹Vh´&ZÑÉ©wæ:¡Ñ™èD§¤%snEÄ=DmèJá6E°pp›âÿù*Ôžiç ÜŽY¸»x— WüꟋÿäÂw¾Yü&jûâóÅÏù¤Š…/¿`mf1÷UÄõ¹Äõës}%ÆŽ0ŸÜö 3½b¾»ðXÊÛ¤%,î0™qÛ£ÝÅ݈/jCË[d‚=È<‹›¯nʦÚ3unHR K#µgê¹<¡ eÍWsÕ3j•î/ÞŒZ ÙöÉâ'Q[¾¨1Ìü(WŠZ>!^.8‰3ê9,tRªfª¡Qµá#“xpÌ(¶™UtqW»FµjTáâDd¨=ÜhUŸàmÕ&Ô–;D7=P­êφv9J©Íè¦ç=Ç{vâ0|˜®·Óˆ­™v]p‡•`.`"ˆL”ÕÆ\#4èäí¹vh´'£ãI»šŸ6’mß]Ý徿%ƒý”‘fŒî]dÀ˜Ñ“Æa$ÿio1Ûl²DhѼE†EFA3ÑeaôÒBÈAFÈ6FÀ–Š˜ÉÃ`[ïœSŸÝ¶!÷ŽÀÕ§ªNUnwuÿίN»Cß¹&2©SgЦ5á2´æ¿}Ž«‡[Ò¯šJýµ¶XÓÆ½ýpµx¥{{VY¬˜ºïBj§Þþ,ªÎ}›ý`Zm…Z}PýS«áÑTŽÚ…ë*'‹'¦]ílñÌÔØ‡ð홲™ê.pÒëv¦ï[eXk¢5xûãÂa¶øiYqYQnëóê'ÊÙ5Q’¬ Ö‚lÐS¼Úæéâ©áÕÂ|Üú⺩[ÛXÜP|œû\›uͺ¡_¦G•þÃêd3˜Nàa’Àä N í:7€“;¸q‚À ðä¶LTZ·TÉ‚ÿ£mà`#¨H†;„I¥,¸–j j­°I=¬†I¯{î͘«²o„Ú¨ÞÆìÆÐ1y\¨Ãbé„UÓ%Ã’ú: ¿œÒÑ7GçhúÈ|%¡ï\s©Ôƒ©ƒ3E3«pfõß> ÇÕOT²?k6÷gœ ʸ×ï?.~ÔÆ½n!òÐuÅß×;õúg‹BýëöÐNÐØ]g_Bùë‘}kûïÔ²œ¼W¹'¡Ã31ÒtÛðºhxµ_—ªó$Cûãþ¾0oÿxžd0iNÒ«¶æI½vÿXŒsÜž'ú#Ô#—`žd©GýI=ì¯4XÅóò·ÒùGÎd¹ýÒ…Rá÷B±ð¾P‚YP)Ôénð±pM5Ï £QQãûW.‚¡•ý^ÐJ»×سRê5물ƒÜ«­•-¨û-X ÷®”(ùÎÖÓãºò^údê‚ýÊÜðjÑl}’gi„ŠRn,Òîa¨7¥Ý ÅÆ°¢& FmlÜÖj–V3´ë.€»ŒKìûpúÖñ*”İçRõÒ«`ËþñäCyµõ ÇÇ-èóX|M­Ë•KМ‹¸a¥Ä0<]½.$wή·ÛsvwñŘ㻷˜ƒ-wø®ï€áÀ©k×ñáãb†ëb&¤äáÀ9ô¬”áãb†câÞ:‡‡¸GÝkºIzNÃi¸.nàŸc©ß¸¥ÌL#æøŸ£éóŠŠ)ù;º~#‰ܳ’+§ÕrZ”À?ÇB¿uK¿•ì œŽN\‘Ü:ŽƒïF–ÅLHÉËsé…W$=çò¾œÁ%¾‡ýÒwî„tÕï_ºˆäVöz-€o+ç½`¶•^€ÚÊȽęÜúå—í•mȽÙIìÀÆzz¾\'{P·½C™–Ì#Ò¬Oò,R±!ÖEÁ= õ¦4¢[¡XVÔtâÀ¨íÛZ­ÏÒj„vÝät—q‰=˜Âòˆã1Œ²(‰aÏ;Dx|¶ìÕ ‹ø¸åÍH>nBŸuñ55/V.@ s.‚ž•†hçéó»±NÒ¢_¸¸ÛqÍžÀ` 8<+Y 3\3!/íÀ]Æ$  3¿rëT*¸MÖÜ­LÒsjNÍ­uqÿKýÚ-efj0…?G-ÒçSòwtýZòdàœxVr圜8'”À?ÇBÿä–2þIòlàœyáÄÉ­svæà;™e1Ròbà\xáÄIϹ¸À)|Sø¦ð]x´üýš‹0n±5Àž+§½ Εb¯ (serk+P÷ÓæÊ&äÖ‹‰"La¬§D(æIu›ALœšóòˆë“tφÄÉ­¹kS1Ò÷íÞ·a wp w` ߦåW,$½˜CzÑmöÛŠ]\nß¼h·KŠZ\.ݼh6ß)^qùÝÍ‹FcK‘ŠË[XFñÛÀj‰t¢ïü³$ê%«•Ðptn¿ ¥ M%B|—k-Ñ3guå(Z7&ð)±†žØÈEwPn·-æ9I‰w#ký²WiÛ(z†»”è|"bçLÚrf”™ž=ä¶egHÛUd«AáQs“„×™ÓW£í“ÂZÍ æª]›šÌwAnkF0×ê‚ÜÔl`®Ý¹¡™ÀÜe·Eõ’̵o@nK0‡  Û$þoiÕ»‡ÿ㻞30>~b"£ :%qÀïqó-üŽå]çPBtí=ÌÆPfÀ+‰‰*~xí6 ¤ŽaÂ0!„ïJÍ× Z“Z¼ò.ÓOB¨©d¼b\ë0­Ø’æw“˜žîRŠ9¼Õ$/8% Lb:ËCe—þ%b ¤{Ž'0:Âs(‰ßIº&ªË/½ª"\sH¸ºþ¹â[—ÏoV[­E¶.ïܬ6oÓºüæfµZ}§hV¸L@í¶àX¿Ý¶Z"Á ×…Q/y¾„Ƹs{](­jÊ0b]k® ¨+GѺ1z‰GõÄF®Ëƒr«eq‘p] : {•¶M¢gØ\ ù'"vÎDa¶!rgF™éÙCi[v†´]E?h57IN\Tçhû¤°Vs¥¹ƒ.È Í“æê][š#Í5» 74?š;ï‚\ÕÜhî¢Û¤zÉ‹æÎo@nIN4‡œ¨Û Fté¹w#ÊæÐ:hüÄDFá~JâàÄuηœ,W÷z_x„b(3q“VU¼ríTj§Ç0a˜ÛàJ\Îk× ¯“Z¼ò.ÓOB¨©d¼b\ë0­x"q>€þ8&1L˜%Áuá¤î€÷”$0‰é,•]øpˆ-ä×üóCIüN:Q^^óÊŠ‚Î!íVú§Š^>½yV«ý¼\¼yV©¬+îyyýæY¹¼¡ˆçå ¬Ý¬ó·›VK¤œáºPõ’ùLhà<t¡´¬IÔ„©%Ç,=M¸. ®EëÆ’&fÙ¹tʵšÅÎÂuA"óHÄ€ìUÚ6Šžá·¥1±s&ŠÝ µ=3ÊLÏrHÛ²3¤í*BÞø Qs“äYÀuAu޶O k5{œ+uA®hæ® ×4kœ;ê‚\ÑŒqî´ rY³Å¹N÷ˆê%Sœ;½¹&Yâ²Än…8⥼{8b^„“Ž8ø‰‰Œr&(‰ƒ§×9ßò4°¼+îÝîýŠýö:®†’˜¨â¥k§T1àß\BÈq%اˇ¥¯À¼KÁô“j*¯×:L+Ö¥óžD“&Ì’àºPïÏ!@%‰0°à¡²ŽßCl¹p]Þ:P¿—˜÷O_yèFä÷yù6#·!_bä/äß1rò[ <„§#×Éù91ÌÍžúk‘ãû¬ÙØQ¿ ¡Ð?sûm·­õÇù1KÆ®Ðï!è=ÆEàa°Ïö…±“#=…˜­ÉΧÇ; É}øÆ@°Më/˜€ßXj2ÂiðÄ^è^Ði®?â;p­‹KÒþR5_eä:ä¹ ù#WA|Ñ­Ëü%k‹¼‡>A¾ä£;ðÝ=ì¾çü—à÷‰¢Ï— »»‡žÃoºÃ¿k‹Õt)+ªH渀Ô æVŸ°µ7"+qº†è ÑV`|×ü¡ Ó[¢Ý!™¼¯a3¾c𾯥Øç ÊÃMákÁ“ä“Ûc0L0ÁüwÅJ€p\á:ª?Äû‡2Lo©ðeèŸ9èd0kà •‘nNSŠîK~õéK}Žü#W#ÎÈÇÈï0r.òoyp1wâé6#?—æD2#èk˜ò¯ Žï±F?B¡Gˆ„r`Îîáâ*ýqŽDÌ’±+ür§ñ'xØ3`{ÂØÉ‘nEÌÖƒdçÓ㽋ä\Döè»·vuŒsaâ)|cy¨ÉÃ{¡{©ºÒgáhp­‹‹Òþƒü#?#_gä_䛌ü ñE7/ò¬%ò:ù}‡ïîY_€‹ˆ2è ä?øâ¦ §_åp>ü»¶èQM—²¢ŠÔá""ð÷ÐÕ',BíÈJP¯ñ|B´k{¡ Ó["þ!™¼¯a3pÑί¥Øç ÊÃMÝZœ O®#0¹uѧpGe¸ö;ü“®X‹Þ…+ü ±ØZye˜ÞRá'ÊÐ?\DÀaÖ2Ä-z#*#}&<¦Ý;'üòÓ5”|ÀÈ/ÉŸ2rHòEFžH~‘ ’ß`à{<ÝdätàÅœˆhf„“ Wÿµ@ßñ€Uú?êq$”_s6À­ôÇy1KƮУ"P?Æùàa7‚ÂØÉ‘>HÌÖƒdçÓã]‘d‘@œ#fWÇx"&Å7–‡šŒpG<±º—²+¼^ ׺¸ "í/"¤$§.&äŒä9!â‹>êä;¬&òzù¢ŽÆw÷¬pÀED¾Oý†ü{_üò3œ~¥_ñ„W #zTÓuÄËŸ°Jþ u\€õ?ðÚ¢>a±B×"ÌJ@ƒÿ„h+¼×v%B¦·ŠÕ˜¼¯a3¾c< C†Ä>oPn _x"ž\É`rë¢âŽÊpí¤øõ®X ÀÄå>$Ãô– ?©°†^DÀaaC ®U"ë½SŠî½Ë#©W‰ÆÜ«”Ž¿Îì§Mèu¦6Q×™RÚ\gÞ¥M¬uf+­Â¬ç‚´‰°ž¿g¦”²â|ͳ~ÿˆ† só øÙhôqBà|’”ж—ÕÂ9HGc‹90\81éá±­€¢ttàáZÙÖ~rÑÜ”˜ÐniË$¸"¾ÚÇýê¬Öœ©¦¬€æÌqÊ eδRVs¦²Â—3—)+pêtÈr¦”ÑÊßÜãžøèœø»1ç?Qx¸ëëÕJR˜<,K?Ä× :0}˜s{ˆKk4qèêh+t‡E¶nÃuú ô35º­D›‘K„»á7bkpÇkxÊÿ°Ô¦í^]a û;ʇA+\94°ynÏ^97q©¢5Õêvš‡~xÒ8®ãª¹Ènp:S®sIn„9‰X½€;9bËôÚFü2ûçÀùsúÏlwàt§» ºÎcÜ‹ÔËDuîeJ‡’göÒ&Šm÷êêè£XØPØ­puT‘BÚ”Hà­p:Ar\¨OÕ»-ÇÜÓ½`&´(…ã§oëNÇÜÖ}³^™îêbËôM?ÞÉ~8§?f¯ÎõôõÂG˜ÐwÀî,ÀîØ«¬†Ý|ÉÀnÞ^2°›—– ìæï– ìæ[K vÇ‚GøÅÎìÍK|~iO¾¯bÝñ1>±¨ –ÈY ‘òƒ¬…Hy=k!RÞÌZˆ”Ÿg-DÊ/²"…:HùNV RÿDú¯<˜À[ËjÀÃ%xøé’<¼¸d__2€‡o,)ÀÛ|„7ÍYƒzxñÞö¿´nû uU±ÄZ­Èâ2+Hju°I–i›5³¢ÜÚ1°¡r®;þNØÐ@Ú~;lhsþ\TÅ¿‚öyÓof¶‡Ï i òF{dXœñi[ ‰vîøXËŽÙ 6mŸ]³ÜJZ´OÛ´Ãi¹i3]vÕiÇW"ñͤ'>¾Ã½mgÍÙ2[—˜ö”¸ò:ÓÕ eÖ#²Ÿß3é¥Ð‹Ìy¤þ2Smïñžsà=£qÇ¥øæò¬÷¥Ü,Ž¤Ú‹ˆAï/ËúUÊõê[¥YBj /Ñ ‰"»¹ç¬Ÿí횃Äw¼g¸+ÎD3ôH—7/¥J–hict¥ßyYï^¬ˆ(»sœ0ÝZNˆŽî='-Ó §tä¦ÌTÙÕÆoFÒŸI!P\|÷¶1gÊl]`RXâÊu&…ªTÊœPDG¿fJ(:¥ß1#”úY&„ÚÞãýÖÀ G㎠ñ=Ü!YƒKÌEIµѦ߯•5¥Ä„ÔC^Ör'9TjY-‘-‰"»¹ç¬ií횃Äw¬p¸+ÎD3ôH—7/%&–hict¥ßyYï^¬Û(»kšð@ÝVMh î»&,P,ëB¥OBYV,±N- Ì ’™l’eÚfÌŒ¨ÖÒ¬®©”í–¿Öìno`t5ã‚!ª§YÓÈçýùÌöðÌ[ƒ¼ÑíC¶_¬…’l«æŒÏoÖ²e¶‚?lŸÛæv°™´ÄŸCxZGŽ®r{«Ì;Ö ð:±ÒáùÉJõîhŽ­xX éÀnàX3ÀëÄBHr{²Píú3^¥s27¹\5ý'•Ê ,KléZù ËBåžÇÿ¸Ç TÍs:Tám@Šª6šÚt`OÿêÚF³™U=ÃýU~þ“ÃïêxÌåä1 Ór8$Å< }¥õå{çíÞ?ñÞ[ôö>Àà*w¿–ÉgIËôvÊe§¼ß)?à”¨/ûØçØÖr>²æI…Y@݉\þÐ+ÀëÀ› {þ©OÏ/o€YàgàWà°ÜþÎåÍ>à!à1àIàYà%àUàpxø8œ¦€à[àG`¸ üÜþÊå}ÄéFƒÀsÀËÀkÀÀqçâ|||4€€ËÀ"° ¬7]œsxxxxxFwÎÙCTøyï§ü¯JéÒžâq~êÅëªsñ:î\¼ž¦Âç7/k1htmldoc-1.8.27/doc/htmldoc-cd.book0100664000212600000240000000135610142770604015367 0ustar mikeuser#HTMLDOC 1.8.24rc3 Commercial -t pdf13 -f htmldoc-cd.pdf --webpage --no-title --linkcolor #000000 --linkstyle plain --size 4.75x7in --left 0.5in --right 0.250in --top 0.250in --bottom 0.250in --header ... --footer .1. --nup 1 --tocheader .t. --tocfooter ..i --duplex --portrait --grayscale --no-pscommands --no-xrxcomments --compression=9 --jpeg=0 --fontsize 8.5 --fontspacing 1.1 --headingfont Helvetica --bodyfont Times --headfootsize 8.0 --headfootfont Helvetica-Oblique --charset iso-8859-1 --links --embedfonts --pagemode document --pagelayout single --firstpage p1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 700 --no-strict htmldoc-cd.html htmldoc-1.8.27/doc/htmldoc.man0100664000212600000240000003075410332476364014637 0ustar mikeuser.\" .\" "$Id: htmldoc.man 1461 2005-11-03 21:11:16Z mike $" .\" .\" Manual page for HTMLDOC, a HTML document processing program. .\" .\" Copyright 1997-2005 by Easy Software Products. .\" .\" HTMLDOC is distributed under the terms of the GNU General Public License .\" which is described in the file "COPYING.txt". .\" .TH htmldoc 1 "HTMLDOC 1.8.25" "3 November 2005" "Easy Software Products" .SH NAME htmldoc \- convert html source files into html, postscript, or pdf. .sp .SH SYNOPSIS htmldoc [options] filename1.html [ ... filenameN.html ] .LP htmldoc [options] - .LP htmldoc [filename.book] .sp .SH DESCRIPTION \fIHTMLDOC\fR converts HTML source files into indexed HTML, PostScript, or Portable Document Format (PDF) files that can be viewed online or printed. With no options a HTML document is produced on stdout. .LP The second form of \fIHTMLDOC\fR reads HTML source from stdin, which allows you to use \fIHTMLDOC\fR as a filter. .LP The third form of \fIHTMLDOC\fR launches a graphical interface that allows you to change options and generate documents interactively. .SH COMMON MISTAKES There are two types of HTML files - structured documents using headings (H1, H2, etc.) which \fIHTMLDOC\fR calls "books", and unstructured documents that do not use headings which \fIHTMLDOC\fR calls "web pages". .LP A very common mistake is to try converting a web page using: .TP 5 htmldoc -f filename.pdf filename.html .LP which will likely produce a PDF file with no pages. To convert web page files you \fBmust\fR use the \fI--webpage\fR or \fI--continuous\fR options at the command-line or choose \fIWeb Page\fR or \fIContinuous\fR in the input tab of the GUI. .SH OPTIONS The following command-line options are supported by \fIHTMLDOC\fR: .TP 5 --batch \fIfilename.book\fR .br Generates the specified book file without opening the GUI. .TP 5 --bodycolor \fIcolor\fR .br Specifies the background color for all pages. .TP 5 --bodyfont \fI{courier,helvetica,monospace,sans,serif,times}\fR .TP 5 --textfont \fI{courier,helvetica,monospace,sans,serif,times}\fR .br Specifies the default typeface for all normal text. .TP 5 --bodyimage \fIfilename\fR .br Specifies the background image that is tiled on all pages. .TP 5 --book .br Specifies that the HTML sources are structured (headings, chapters, etc.) .TP 5 --bottom \fImargin\fR .br Specifies the bottom margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millimeters (##mm). .TP 5 --charset \fI{8859-1...8859-15}\fR .br Specifies the ISO character set to use for the output. .TP 5 --color .br Specifies that PostScript or PDF output should be in color. .TP 5 --continuous .br Specifies that the HTML sources are unstructured (plain web pages.) No page breaks are inserted between each file or URL in the output. .TP 5 --datadir \fIdirectory\fR .br Specifies the location of the \fIHTMLDOC\fR data files, usually \fI/usr/share/htmldoc\fR or \fIC:\\Program Files\\HTMLDOC\fR. .TP 5 --duplex .br Specifies that the output should be formatted for double-sided printing. .TP 5 --effectduration \fI{ 0.1..10.0 }\fR .br Specifies the duration in seconds of PDF page transition effects. .TP 5 --embedfonts .br Specifies that fonts should be embedded in PDF and PostScript output. .TP 5 --encryption .br Enables encryption of PDF files. .TP 5 --fontsize \fIsize\fR .br Specifies the default font size for body text. .TP 5 --fontspacing \fIspacing\fR .br Specifies the default line spacing for body text. The line spacing is a multiplier for the font size, so a value of 1.2 will provide an additional 20% of space between the lines. .TP 5 --footer \fIfff\fR .br Sets the page footer to use on body pages. See the \fIHEADERS/FOOTERS FORMATS\fR section below. .TP 5 --format \fIformat\fR .TP 5 -t \fIformat\fR .br Specifies the output format: html, htmlsep (separate HTML files for each heading in the table-of-contents), ps or ps2 (PostScript Level 2), ps1 (PostScript Level 1), ps3 (PostScript Level 3), pdf11 (PDF 1.1/Acrobat 2.0), pdf12 (PDF 1.2/Acrobat 3.0), pdf or pdf13 (PDF 1.3/Acrobat 4.0), or pdf14 (PDF 1.4/Acrobat 5.0). .TP 5 --gray .br Specifies that PostScript or PDF output should be grayscale. .TP 5 --header \fIfff\fR .br Sets the page header to use on body pages. See the \fIHEADERS/FOOTERS FORMATS\fR section below. .TP 5 --headfootfont \fIfont\fR .br Sets the font to use on headers and footers. .TP 5 --headfootsize \fIsize\fR .br Sets the size of the font to use on headers and footers. .TP 5 --headingfont \fItypeface\fR .br Sets the typeface to use for headings. .TP 5 --help .br Displays a summary of command-line options. .TP 5 --helpdir \fIdirectory\fR .br Specifies the location of the \fIHTMLDOC\fR on-line help files, usually \fI/usr/share/doc/htmldoc\fR or \fIC:\\Program Files\\HTMLDOC\\DOC\fR. .TP 5 --jpeg\fI[=quality]\fR .br Sets the JPEG compression level to use for large images. A value of 0 disables JPEG compression. .TP 5 --left \fImargin\fR .br Specifies the left margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millimeters (##mm). .TP 5 --linkcolor \fIcolor\fR .br Sets the color of links. .TP 5 --links .br Enables generation of links in PDF files (default). .TP 5 --linkstyle \fI{plain,underline}\fR .br Sets the style of links. .TP 5 --logoimage \fIfilename\fR .br Specifies an image to be used as a logo in the header or footer in a PostScript or PDF document, and in the navigation bar of a HTML document. Note that you need to use the \fI--header\fR and/or \fI--footer\fR options with the \fIl\fR parameter or use the corresponding HTML page comments to display the logo image in the header or footer. .TP 5 --no-compression .br Disables compression of PostScript or PDF files. .TP 5 --no-duplex .br Disables double-sided printing. .TP 5 --no-embedfonts .br Specifies that fonts should not be embedded in PDF and PostScript output. .TP 5 --no-encryption .br Disables document encryption. .TP 5 --no-jpeg .br Disables JPEG compression of large images. .TP 5 --no-links .br Disables generation of links in a PDF document. .TP 5 --no-numbered .br Disables automatic heading numbering. .TP 5 --no-pscommands .br Disables generation of PostScript setpagedevice commands. .TP 5 --no-strict .br Disables strict HTML input checking. .TP 5 --no-title .br Disables generation of a title page. .TP 5 --no-toc .br Disables generation of a table of contents. .TP 5 --numbered .br Numbers all headings in a document. .TP 5 --nup \fIpages\fR .br Sets the number of pages that are placed on each output page. Valid values are 1, 2, 4, 6, 9, and 16. .TP 5 --outdir \fIdirectory\fR .TP 5 -d \fIdirectory\fR .br Specifies that output should be sent to a directory in multiple files. (Not compatible with PDF output) .TP 5 --outfile \fIfilename\fR .TP 5 -f \fIfilename\fR .br Specifies that output should be sent to a single file. .TP 5 --owner-password \fIpassword\fR .br Sets the owner password for encrypted PDF files. .TP 5 --pageduration \fI{1.0..60.0}\fR .br Sets the view duration of a page in a PDF document. .TP 5 --pageeffect \fIeffect\fR .br Specifies the page transition effect for all pages; this attribute is ignored by all Adobe PDF viewers... .TP 5 --pagelayout \fI{single,one,twoleft,tworight}\fR .br Specifies the initial layout of pages for a PDF file. .TP 5 --pagemode \fI{document,outlines,fullscreen}\fR .br Specifies the initial viewing mode for a PDF file. .TP 5 --path \fI\"dir1;dir2;dir3;...;dirN\"\fR .br Specifies a search path for files in a document. .TP 5 --permissions \fIpermission[,permission,...]\fR .br Specifies document permissions for encrypted PDF files. The following permissions are understood: all, none, annotate, no-annotate, copy, no-copy, modify, no-modify, print, and no-print. Separate multiple permissions with commas. .TP 5 --pscommands .br Specifies that PostScript setpagedevice commands should be included in the output. .TP 5 --quiet .br Suppresses all messages, even error messages. .TP 5 --referer \fIurl\fR .br Specifies the URL that is passed in the Referer: field of HTTP requests. .TP 5 --right \fImargin\fR .br Specifies the right margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millimeters (##mm). .TP 5 --size \fIpagesize\fR .br Specifies the page size using a standard name or in points (no suffix or ##x##pt), inches (##x##in), centimeters (##x##cm), or millimeters (##x##mm). The standard sizes that are currently recognized are "letter" (8.5x11in), "legal" (8.5x14in), "a4" (210x297mm), and "universal" (8.27x11in). .TP 5 --strict .br Enables strict HTML input checking. .TP 5 --textcolor \fIcolor\fR .br Specifies the default color of all text. .TP 5 --title .br Enables the generation of a title page. .TP 5 --titlefile \fIfilename\fR .TP 5 --titleimage \fIfilename\fR .br Specifies the file to use for the title page. If the file is an image then the title page is automatically generated using the document meta data and title image. .TP 5 --tocfooter \fIfff\fR .br Sets the page footer to use on table-of-contents pages. See the \fIHEADERS/FOOTERS FORMATS\fR section below. .TP 5 --tocheader \fIfff\fR .br Sets the page header to use on table-of-contents pages. See the \fIHEADERS/FOOTERS FORMATS\fR section below. .TP 5 --toclevels \fIlevels\fR .br Sets the number of levels in the table-of-contents. .TP 5 --toctitle \fIstring\fR .br Sets the title for the table-of-contents. .TP 5 --top \fImargin\fR .br Specifies the top margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millimeters (##mm). .TP 5 --user-password \fIpassword\fR .br Specifies the user password for encryption of PDF files. .TP 5 --verbose .TP 5 -v .br Provides verbose messages. .TP 5 --version .br Displays the current version number. .TP 5 --webpage .br Specifies that the HTML sources are unstructured (plain web pages.) A page break is inserted between each file or URL in the output. .SH HEADER/FOOTER FORMATS The header and footer of each page can contain up to three preformatted values. These values are specified using a single character for the left, middle, and right of the page, resulting in the \fIfff\fR notation shown previously. .LP Each character can be one of the following: .TP 5 \. .br blank .TP 5 / .br n/N arabic page numbers (1/3, 2/3, 3/3) .TP 5 : .br c/C arabic chapter page numbers (1/2, 2/2, 1/4, 2/4, ...) .TP 5 1 .br arabic numbers (1, 2, 3, ...) .TP 5 a .br lowercase letters .TP 5 A .br uppercase letters .TP 5 c .br current chapter heading .TP 5 C .br current chapter page number (arabic) .TP 5 d .br current date .TP 5 D .br current date and time .TP 5 h .br current heading .TP 5 i .br lowercase roman numerals .TP 5 I .br uppercase roman numerals .TP 5 l .br logo image .TP 5 t .br title text .TP 5 T .br current time .SH ENVIRONMENT VARIABLES HTMLDOC looks for several environment variables which can override the default directories, display additional debugging information, and disable CGI mode: .TP 5 HTMLDOC_DATA .br This environment variable specifies the location of HTMLDOC's data and fonts directories, normally /usr/share/htmldoc or C:\\Program Files\\Easy Software Products\\HTMLDOC. .TP 5 HTMLDOC_DEBUG .br This environment variable enables debugging information that is sent to stderr. The value is a list of any of the following keywords separated by spaces: "all", "links", "memory", "remotebytes", "table", "tempfiles", and/or "timing". .TP 5 HTMLDOC_HELP .br This environment variable specifies the location of HTMLDOC's documentation directory, normally /usr/share/doc/htmldoc or C:\\Program Files\\Easy Software Products\\HTMLDOC\\doc. .TP 5 HTMLDOC_NOCGI .br This environment variable, when set (the value doesn't matter), disables CGI mode. It is most useful for using HTMLDOC on a web server from a scripting language or invocation from a program. .SH SEE ALSO HTMLDOC Software Users Manual .LP http://www.easysw.com/htmldoc/ .SH AUTHOR Michael Sweet, Easy Software Products .SH TRADEMARKS PostScript is a trademark that may be registered in some countries and Adobe is a registered trademark of Adobe Systems Incorporated. .SH COPYRIGHTS Portable Document Format Copyright 1993-1999 by Adobe Systems Incorporated. .LP HTMLDOC and DOC are the trademark property of Easy Software Products. HTMLDOC is copyright 1997-2005 by Easy Software Products. .LP This program is based in part on the work of the Independent JPEG Group. .SH NO WARRANTY This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .\" .\" End of "$Id: htmldoc.man 1461 2005-11-03 21:11:16Z mike $". .\" htmldoc-1.8.27/doc/htmldoc-fig7a.png0100664000212600000240000004112010322727434015624 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFAÆIDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀräÀ:cÇÔ`síÜ3P>Y•xÇ_¼pvð;[ßÀ˜íDÎ|ÀÑ#Ô4tééÉý»·{xû †#Öƒ<¦›óhçžòéȪD:þÔ©ãjê:ƒßÙGîuvõ$[;@¡Ü#FÌyA—/žccg§³?/Ÿ?ãöç@9`9r`1Ècj°9vî(Ÿ‰¬JÐñ7®]36w¸|þ¸®¡å %¡Î¾pÚÆÞ™xoBÎ ‚Ü#@(uAÍׯ^äåå§ÜÜ¿{ËÖÑm0„9°Îä15ØœG;÷ ”O‡DV%èø;·nðò vÇ[Ú¹?´ìì›ÖÄküöí¼ 2çxøøèéÕ/Ÿ>¡9ÎBŽXg ò˜lΣ{ʧC"«ïx`! okÊ^ Èm_>b `w@ ¥ýCbû qäÀ:c4! ÷ ”O‡ôN#dÇæ ‡ƒÈs€Jû†Äö…AâÈuÆhB$î(ŸéFÈŽG.dm?€Â0 ¡´?`Hl_$ŽXgŒ&¤AâžòéÞi„ìø!Ô ;Ìh(4$Ž3$ŽXgŒ&¤Aâžòé>y ÙñC¨@v˜æŒÌÎ:@Eá2¿ó€º¹Ä8‰—“êH4çéB²ñÎ@s Á`DV€Ë ÄÇ­£‰ºC£LË=Eq°·Æ%‹,EIjÄŸP‰ "< €Œ|JyIBvt`VÀZW)LLkº• Uæh˜Ì`Æ1Õ ÊIOârrVÇZ¾ãw$~.15 ÑD| ¸{ÐJv`¹30¥(OøÓ1A„Ë^:çSòLÆ3€Y‚“Z¦S·WA•ù€´[Ñ !ûÿ¿îa cÍ2±{î(]®ºI8y:ã?/ÇMöÝG+fðì2‚)«¬£ß ¯¡;Ë.žNEJ7`¼†qGÕ`êu^¶“PgƒSq-Þã©<#–3–ÇýVvÁYIÈJØwkEŠe÷ö¸çZ­(Ýâ±xE+…]œRH¢ F¤¿Í*Ú\/Dåù´üLMR‚£î #¦EåHü 3{Ó”¦Û€,å@0cãq’ã+³b£º{öèœ È¶—ÈbøNþvÖ±,<Ž'µ™9ìƒVîÓÃÀÊÆ*H•ù€¢òþ\1D•î­”#‰±¹±9Âj°ÙNR£îh5IɆŒ‰.\%>|>kéO»ˆ &ˆpÙ‹µ«MõœB|Ëk¥BÉþª õ4kmAv\Ðèþú9æ!©ˆ'¨x$ï XÐÐy>€÷à™ø…³ñTd§F bbBëÏ`˃g]Ö"ªÌÐèþú9OæÁ5ìCv>áûð7ôèï<²Ýƒ§¦sÙ©‘> sp†>òÈó§gÕÂPüDd§j€bB©X˜ ¢ ‚wI‹¥t +¬5I¶Ó¿õ7ØîÁZâŸâ²w´ô‰w<ÚJÐÁÐæˆGȆJÀÎÆFQ±¤ 5qàrÖ±r\+‹hêH ŠTg“á ‚Áˆ©Ï& "cŠõÁh¢0ކ{¨b2qD¹½XxAjr!‹<ƒk°ˆvuV“‘‰)½±ãx·r@æÿ_íf G) nƈ¨„¶|âLHTl é‹î 1ÈðMÒÑtäá¤Ö+1§Ê€)±›w>S^šLã¤÷þ^ÿbG&ô6ž›¨QíôǸÀxŠgÜ;áì« Ó±"µ+àt`–uS <ÄlDæý$Ky[ï˧Oh‡’Sý@ÚÁïH"]H‡°´¶9çÑÎ=åÓAžðç&dÇCîàá%ÁñôŸ@†Øøåó'Jî Ñó‚¯#)©–FÏ BÎ=/hÐFÇH8/ €F.$cüa„ÕhB$î½?kÓ ni÷=æ¨5éGÓUçƒÓ‘d»jôþ€!ä¼Ñûè æ)²÷п Ê|@½?`9oôþ€A#áþ€žŽBδÑ1æe]¨ˆ0A G`£`Œ‚a xxøUÕµ¹xøÄ%e_><˜Éo_>?²—ƒ“ârk‚¾{ýæ-l]@‘6pæÔ15 ÝÑô1 FÁ(ÞàÙ“GÀ €›‡ïËç@î`&!^2ïØºÑÑÕ“xŸ óׯ^”’–ûõëÇhú£` o "&öôñÝ¡âZ m=xɬkh²÷vÈ.b@‘6ðëçO M£`Œ‚Q0˜ñÓDòþ€Á¹ëoŒ‚Q0 Fx·3)Ûh(Ý0 FÁ(£€@|a@CiÀ(£`Œbñ…9@ ¥ý£`Œ‚Q0 ˆ*Ù‰.Ìh(4 FÁ(£€@|a@£ó£`Œ‚Q0Üñ…9@Î U (:£`X‚ï_#sÜ»=&È@AI• â s€ªÀí›WFÃa W *&¯FÏ&@gOÑ54!P²]˜Ðè|ÀP­´uGƒb KÀÆÆqþìQ`5ðüéc)i9Q éÑ0Aþá;6®Ä_ _˜Ðè|À¬äUùd44FÁp†ÆÖÀjÈ—”}úèîh€ ˆ/Ìht>`ˆ6”ØYG;m£`ø‚ß°"ìñƒ;£g”‘ˆ/Ìht>`èÖì£á0 †}ðæÍKñÑ!_˜Ðè|ÀÜ<|£uÀ(®àÛ—OˆB‰ƒ}4©“ ˆ/ÌhÈÌ™9 ] A¾xàRX¯EÖKð~Q<æ4–óé—,Ø9~þü1<¬@¶È¥^${‰q¦9£`0–eììdÔ˜yvðdCúâ s€óðØÅZàb­<ȶ‚FêGåµ&c ÀÃËOÞò‡+N su ,ÐD†.@¾: ¾0 Ñù*tP0Ë}HÅ‘‚˜]´ª ®Œø®¼% ­ùQˆ¬dDk2cª!ÕL4q<%/V÷`m¹ã²…òª‚êfŽ‚¡ •„×6rÍ\a`eõ ×+˜æ ¾0 á?€Vª"¸T©M&Æj\zál’úhC"xŠWÌñ\ƒ'Ä›‰©˜˜"L÷´…ÂÁ(<#¶ÀÚ? ¦»€«V ÕÚö‰.Ìh(í VÁM«1KjJª²ÇŽhQœa5“‹;´—ÀÝ·”È @Ö8Ú-Þ=®¡!‚¥3¤£€•Ä?â4xñ…9@ ¥ù²‡õáíq²gh‡åø>å5ÙE>”„g,hÀñ…9@ÎŒ\@É0 ©%5ñvQ^FcY ´¨`«–AÕ' ¾0 Ñý£€ä €êfRÅðÑÂ}Œ2 s€bBi‚ýú… é¡d ˆH0€ÓT)ޱ² *&FœÚd1c>>.D|a@£ç5ß‹K ò<0®9aø¢O4¸*$Êë*´¹YÌÑvø²¬j°Žž£ d#7̱څ6Pƒ¼X««ˆï`N3ŒÎŒ@€gN³¬'¨ —ä \æ\iJ @|a@Œ@Ghë›_½xÈáããÅ£ôòÅs¼¼ü<||£ÉkäÜP3KG.šDÄèˆÊ(pðí˧߿~?{ôÏï_’Ò²<<£e øòåÓåógpýåÓ§ûwo9ºzâ1áÓ§Ï@r͆ Ñù€Q0 FÁàll¬£Ç¤£‡ á‘yâ s€½?`Œ‚Q0˜Ë;¶Ñã1Ä â s€¨Igt h &À ꌎO ‡ A5Äæ4º?`H‚ß¿~ýþõs4FÁpMÞHå;ëh?5|ˆ "¾0 Ñù€!>¼­ª®sþìQCcëÑÐÃÀï¶u~–Kèu$áöñ…9@ÎŒV£` Æ È”–½vù, dpúøaSK[üjˆ/Ìht>`hW£A1 †€T¬€½'Œ ¬H*Ìht>`WÈYeŒ‚á €ÕÀhW€T@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£óC°Ñæ•_¿~ÐÇ¢Q0 FUr(V@|a@£óCµ¸uã2 WPR¥E£`Œ s(.@|a@£óCµÐÑ3¦…á¬lçÏ…$2 Elll4²h؃+—Îâ’ ÒQ@•Š_˜Ðè|À¬€)€vêšX™š†.Ð" {4ÌÉÄ%{üð>;g¯ÑP”äPüÕñ…9@Î Õš€vê"ŸF2zl/àâÙcRÒr¢ÒîëO! ¸ˆ‡øŽ+=GÃjP˜Cqâ s€øùb®rX€y¹#.\×@ÂÅ‘Prg$øPu6:¤°Ñc{Éâ’²OÝ…°Ü» a Íæ†í( ]@|a@ƒb>€` ;«¬Ž¤›³¹xø1Ôƒ0Þ¿}E¼øúõ3Je3zl/YàåóÇ<¼ü6dT È“ýðî5ñåóÇѰä´Š _˜J…ÀÂŒ THÂû 6šÖ.¦4“1Å1­ƒ—ìX/‹ÇÚÌÇ´¿ù¸”‘ €…;°X‡ HAOŒ‘àÀÁƒ£yl™V¢SÇö†Æ( ” ‰/Ìh°Ïà¹üEk€“arí‚¿¾ R`²é“G6ø?ž£``ñ…9@ ÿýXÇyóœó fVNÞ½vBGƒ‚`C\?`4qóð¡ –U6ކÕ( ³¡««›••%u÷Ðp8/ë fÛ r0sØ‡È òÖùW !B p°·ÍdøÚP<;‡GÁ( n6$¾0 A1€gN³&¨ —ä RÍ!¯ZÂj„ÇÒA¾=bdäU¸¹¡«ƒ>¼ÙÜ/-«í|ý|óÚè„ð( ! ¾0 ŸÀSÞ¿¶ÏR"¬Zˆ$É=¸œu—ÞÑ ``oý¬3÷v~ýþ — ¢Q@S@|a@£óC¾ˆ¡ºÉÈ\x±5 ˆ&–gŽ€_ƒ9ÛëׯðÓ#N?ž0¶£€òŠ _˜ÐèýC ‹`‹Ø´¤ÝÊBÈ‘„‹¾}ù<æd-]ãk—Ï>yô«¬›wðhÀŽ s(~5Äæ4zÀh5€3yÎ8ûÂ0z‚4ÙÕ†Ã( @Ra@£÷ íj€ê&£%/ÚY4 FÁ( <‡â,Ù‰.Ìht>`WD¦†¡bÑ(£€Z€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €Fç†* „Q0 Føðþ51ʈ/Ìht>`¨V·o^ ‡Q0 F '¨†øÂ €Fç†j =ºÿhŒ‚‘ØØ8Ο=J° ¾0 Ñù€!YÈ+ª“ÂhhŒ‚Q0¡±5Áj€øÂ €Fç†h[€u´Â£`D‚ßDÔÄæ4:0tëöÑp£`´À ˆ/Ìht>`Hn¾Ñ:`Œ‚¾}ùDTÉNta@Ci>€ÈëÆ¨e—D’toåè}a£`Œâ s€2ó˜%æ`(C¡“FÁ(£€øÂ €†É|®û±ŠCJjä{}1ïFÓNFÉŽi5Dí>aL+F+’Q0 F…€øÂ €†ð|®BÎÅ%N!›Œ^ „ ©x:i´£`Pˆ/ÌhÈÌÀ[îÄ—’$ÝV)NIYL¹ GÁ(£€l@|a@Ciþñž5Ú` íª%ú[= FÁ(¸ñ…9@ ™ù2fJprut^wŒ‚Q0€€øÂ €†áyAXË_"[â´(»G;£`Œ:â s€2óÈsÂp¬RXÅ1µc5™Z«ÑÖ†Žö!FÁ(TÄæÄxå m}ó«O9\\\x”^¿z‘——Ÿ‡o4|@Î 5³täâˆQ0 FøöåÓï_¿ðœúåÓ§ûwoÙ:ºá3äÛ7 ¹fÃŽÐèyA£`Œ‚Q0Üñ…9@Þ0 FÁ(à _˜Ðèý£`Œ‚Q0Üñ…9@Þ0$Áï_¿~ÿú9£`ŒÀ¼OŒ2â s€bàÃûתê:çÏ54¶ Q0 F  î}Â4:0Z Œ‚Q0 †U@Ra@£óC» ŠQ0 F ¦ ©0 Ñù€!\ ™FÁ(# _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|ÀP‚¢£0 FÁHÞ¿&ªd'º0 Ñù€¡Zܾye4FÁ(€ºûht>`¨VںƣA1 FÁHllÄl#¾0 Ñù€!YÈ+ª“ÂhhŒ‚Q0¡±5Áj€øÂ €Fç†h[€utànŒ‚ ˆ96ŽøÂ €Fç†nÀ>£`ŒÖXñ…9@Î IÀÍÃ7ZŒ‚Q0Á·/ŸˆQF|a@4™À¼.‚õbw2¤°ÞºN¤2êò<Ë0zwü(£€f€øÂ €è=€§Ä_8â*gÉSF7€iûhÑ? FÁ( 5 ¾0 ‘2)y! sÌF:\¹tFVLÏ|´’£`Pˆ/ÌhÍ —­˜Å= ©$묃9ôï:Œ‚Q0 FI€øÂ €hµ?`@JOª—­ÈµÂh }Œ‚Q0Tñ…9@Ñj>s…º• ®²˜Heø }*6ÆdšzŒ‚Q0Âñ…9@ ™ù"‹Nª—°ð®y€Ñ>Ä(£€þ€øÂ €F÷ 7Û±ÎS±.M£`ŒZâ s€bBæüùó V<…;f-BPå(£`Ð_˜Ð=/­8Ælû#7Û 6á‘MÃßÒÇœdí.Œ‚Q0 ¨ˆ/̈&ówxá/+IRLE3qíY#Ûjü‚xº £)xŒ‚Q@ ¾0 Ñù€Q0 FÁ(n€øÂ €Fï ¨»TtŒ‚Q0 èˆ/Ìhôþ`´ô£` 9@|a@£÷ Iðûׯ߿~ކÃ(#0øÂ €Fç†øðþµªºÎù³G ­GCcŒ‚¨{Ÿ0@ÎŒV£`Œ‚aUT˜Ðè|ÀЮFƒbŒ‚ˆ©H*Ìht>`WD¦†Q0 FÁHÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|ÀЂ¢XÅ?¼=8£`ŒX@|a@£óC»¸}ó .ÙÑ“$FÁ(±€øÂ €Fç†v ­kŒU–í|AÌûëȽ!~ë=œÆ£` , ¾0 !9€Vœ!=˜%Ö‹x –ƒRüA*yEU`Y¥ )óúùCckäj€Ö®­FÁ(<€øÂ €†Þ|žR~  ¨â£¶’@ñߤÔèȵ ZŠË›)ø}Ëhu-\#VÓF+ŒQ0 h ˆ/ÌhˆÍ`-‘ ªˆµDÃUüá*4I*‰÷ ¸`Gáæå‡0€âÄ×h6âê9¡qñ;ÖNÒèÀÑ(tÄæ4LæhZ `^¸Š?<…&ñÅ"ñ~áæáú¿~þ€V ìÐq! Èï/ŸstŒV£`Ð_˜Ðèþ:U0´+E?°ÐG®m0ŽŽ‚Q@@|a@C{žÑê¡R»P¥XüšGÇ‚FÁ( ) ¾0 ¡½?ë(üÐõÅâ茂Q0 è ˆ/ÌhtÀ¿ýúýëçïϹyù¿~þ¬¥¶Fp²dŒ‚Q@;@|a@Cl>ëd,²æ*üåAiZx‘mò‡÷¯UÕuΟ=jhl ä~{þ„áËg45h{Äf×—8š0¥°ŽqÎŒ‚Q@7@|a@Co>­`"²¢…˜Å1…&A“‰¬Ъâ+¬†ã²¿b4¿“mË(£€º€øÂ €†ä|yklðè"Ã@\Å1VãWO|A ¯0¥F £`$â s€ÚX Œ÷£`Œ4@|a@£ûF½{i£`ŒZâ s€½?`´D£` 7@|a@£÷Œ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@Î m (ŠUüÃû×£3 FÁˆÄæ4:0´+€Û7¯à’=GhŒ‚ ˆ/Ìht>`hWÚºÆXeÙØ8ÐŽÆu$5©wÐâ6j™9zMÍ(¤æÄ„Ìùóç/4¬ƒ­WT–õ˜HZ^¨ÆÐØúõ«—hE$f¡9˜£` ?@|a@£óC°±±³bôø„Å€$PœŒë$q]€ƒëN¬ê!qø;È\ÒÏà#è$`H‚ï_«ªëœ?{ÔÐØÈýöü ×ÏhjÐöˆӂƺàme'V6ÅãB˜µ Ð@bœ„ËêÑ®À(É€øÂ €¯\8¡­o~õâI ‡ÒËÏñòòóðñ†ï bj€Â `Œ‚Q0<À—OŸîß½åèê‰GͧO &ãš ;8@£óá7€)5ZŒ‚Q0’ñ…9@Î ùj`´¸£` â s€£`Œ‚áˆ/ÌhtÀ(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£óCŠbÿðþõhàŒ‚Q0bñ…9@Î í àöÍ+¸dGÏ£`Äâ s€Ú€¶®1VY66Ìã£ÑÎ臟­çœ}üGðã’Ň‹`½….…ß´ÑûFÁ( _˜Ðè|À®äUe=.5†ÆÖÈÕžr z™‹¿âÁêÈÑ裀T@|a@£óC°±±³â޲ßÄu!…,„„ß½…ÆE+Ž‘[ôp•£Ñ1 FÁàÄæ4:0Ôëv²ë\ׯl¡CØ´¸¬³ÖA»6rŒ‚Q@ ¾0 Ñù€! ¸yøpÕß¾|ÂZ¼"—þøëJ0ŒŽáŒ‚Q0 €øÂ €FçFÀ5ªCS»H­Ç£F‡˜FÁ( _˜Ðè|ÀÈ­ F›ê£` W@|a@£ó#Œ6«GÁ(9€øÂ €Fç†0øýë×ï_?qI Ýêdt hŒ ñ…9@Î IðáýkUuóg[ãRƒ¶G s ÚZ ¼Ó¸¦”é¼6süj´ª£KÉNta@ŒW.œÐÖ7¿zñ$#*"ŒGé™Ó'xyùyøøFÃwÈN1¬Õæ&áQ0 FÁH_>}º÷–‡·?5¯ß¼’k6ì8pà@Î ‡Þ¦Ôh0 FÁHÄæ4:0ä«Ñâ~Œ‚Q€ˆ/Ìht>`Œ‚Q0 † ¾0 Ñý£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@Äù€÷n&‘ Jª#*ŽFšGÁàIWÄæ4âæ€™MMCw4 8{òˆ®¡Éȉ£‘æßQ0xÒñ…9@¬ù€çOKIˉJH&£þá;6®ÄŸ|‡S4ÿŽ‚Á“®ˆ/ÌhÄ͈KÊ>}tw4ÆÑ¨GÁ0Äæ4âæ?¸óë×Ñ$2G£þÃ_˜Ј›xóæ¥ˆˆøh£QÿŽ‚a ˆ/ÌhÄí`gç`cgM"£q4êßQ0Œñ…9@¸ùvvvbò›‘™Ã¹Sð‹p™ƒÇF S=\ ¿ix`5ü ¨8ÄÄñ8lÒ$Áˆ . Ã:äÀ´ÕaÄd<¡D†O æMê$*¢ s€qó<¼ülløÕèX\¹pB"‹ÔH$Àe¦8Dî L'ARš P²i¸¬ÃÔ…,‚i~X݆¾|þH•8Â*KÐvúªø—`DPmÜ ƒ0"HJ9Äø—Â( ˜7)OWÄæ4z^É93ÝÀñ”×ðz®~°eäjkǯk­Iç¨A|’¢ ¿z‚† † wžBœ ã‰Œw´AKÕX#‚’0Çï_ ÄŸp…0Z.&¾@sVC¨’®ˆ/Ìhô¼ òK¬Y9H‹‚3É"ç:×"C1šª'/®éÎ$¹‡ZŽÇ \©š*aNE)ïaõ/y‹Çª¤+â s€=/g¬c¦lZgø)¸‡7 27æº W —Ãð—Pƒ¤¦'/Ìñ·®ˆÆAÞô¡ŠÄæ4zÀà-°ˆO²ðl?°£1Ce’’w`;X:i72ðÔvè "­£ÐUDúx@|a@£óX"9:GKÕÕ' 8ä2à}<é¹ÁÚ&ü)™`÷…òáZ$ª¸Šº]7â s€ Zc|ŒÖ—tÕ‘àƒÓ¿ƒÓUĿĄÌagcÃFf C]С"¡| ­µ‹éfü mþ$/Fˆ‰²AÕ>@s Áô€Õñ㦾&ÉdRAÒˆ1«’èŸÞHÄæ4:@r9‹Ö]@Ë6XÅÑÔÐym(fòÂR`À6ßH’zV¸|DF4Q%®é–êˆOcÍÁåx’â³nÀd‡9ËM"Õãñ/1^Àe 1¶ÃmçˆhŸ¶¾ùÕ‹'...}º÷–­£¾}û$×lØqàÀ€qóll¬TÚî; Hü_#*ކ¥G³ÏHWÄæ4âö°±±±²žÏ5`?¢âhXúw4û ‰tE|a@#n>€ÔæÝ 7¨›Ã&ކŸ_¾x<šŒ‡Dº"¾0 ·?ØŠacmÈ øMÜØÈ°‰£‘æßQ0xÒñ…9@¸ù€ß¿~þí \à¨8iþƒ']_˜ÐÈš”–½vù,MFN?lji;râh¤ùw žtE|a@#n>˜Ùž?}üäуєD@0á³8iþƒ']_˜ÐH €H˜ÐÔÖ¿xöØè*æQ0 FÁ(´àôñîžþÄÏióºúF—/žÝÐ8 FÁ(ƒxú‘¤ €HÞ`bjD£= FÁ(ÃÐèþ€Q0 FÁ(¹ €F÷Œ‚Q0 FÁÈ4º?`Œ‚Q0 F. Ñó‚FÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ˆäù€ çNNŸ™~7 G{ ¿X ÑÐ Æ X@‘6pæÔ15 ÝÁéóÃûw9ºzr7 G{ ¿X ÑÐ è\ €¯\8¡­o~õ"¨ŠÆWœ>!,"¦¨ª5h=¿cãJoÿAîæ!áÈaï£á £¡1x¼€^¿y $×lØqàÀ€"m>@\Rö飻ƒÙó˜^„nŽö>~±0£¡A|aDÚ|Àãw~ýú1˜}Žé…Aèæ!áÈaï£á £¡1Äæp@¤Í¼yóRDD|0ûÓ ƒÐÍC‘ÃÞGÃ/FCc44ˆ/Ìá €HÛÀÎÎÁÆÎ>˜}Žé…Aèæ!áÈaï£á £¡1Äæp@¤Í°³³FfçNÀ/BP yÓ Ä¸™ ÓÙ‘@÷ siç6:ûzjHÄMÓ!å18ØçÀ#˜¡ìºE%‘…9ió<¼üllĘ‹©Œ F"Mƾ|þˆÕ DºCW.œ ¢{¨èH 4·aŠ  ;ØÐSC% æÓÚ 3Î`Kœ[Œ ùK‹"…x/à4çÃÎÆL+ðtKÿë<™ ÓÁÈ*q±©åH¬f"»Oˆa j C˜ºÁN|"ÁSÖàOQôq3Œi‹ZòBƒ`â$#T+ !"øÕÐ94p•*¸F|€PÑ Dïó‚ðדd—ª´ó1¦ÝPŽD«†êàñ.'áw!ÙD¹›éì`Å-Ò$1!CÅD ábÖ=d‡3Cù†Ëïĵ¼@´:/¹î¢<Ôh1 FRW—JL’ÖŽ¤JˆQ½«N†ðôE°:§ƒ›éì`¸zšVjZF·®#Cã—/Ÿ.Ÿ?ƒvp6}Ü<°Ž$;Ä­FÝ<£¡A]/ OŸ>3ÀÎŽ 񾯯8Xi¿Õ<+ØØ~aõ}Ü<°Ž@‰`n ÑРР¸@‘¶?€•æ'‘gØÏ˜^ ›Ö‘èÁ!ìÃÀÍ£¡1z ÒæXA•!m×¼|ñ˜’¶0¦èàæu$Ù!6h}4êæÑÐ ª{ ÒökB6ÖAZþ÷€0½0¨Ü<$9ì}4üba44FCƒ p€"m>à÷¯Ÿ¿ketV/ *7 G{ ¿X ÑÐ è\ €HXÄ›œ>?}ü°§oÐ wópä°÷Ñð‹…ÑÐ ‚^@Èë‚¥àââ"hÁõ«Ÿ/hŒ‚Q0 FÁà4÷Œ‚Q0 FÁ($ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`ä€"y>àúµ+£¡6 FÁ(ƒhjé¤ €H›¸}뺪ºÎh(‚Q0 FÁà'16µ$^=@‘0pïÎIi91 ™ÑP£`Œ‚Á <ý"¶oZaniC¤z€"m>@BBöÉ£»£¡< FÁ(ƒ?¹ @¤ÍñžE 1¸82XºAØ@A¸âc2š8¦_ðBj€Ë(bÄ!„˜CdÓdÐ|ùò‰”ù€=/h°H6Ri¬KÄaø]EP1&ã§Chc<ް¶9F3ïâ s€=/h…äU ðl9D3$ž¦.AõƒÜËԪ׉7S%ZØŽ6A† ¾0 Ñó‚FÁ0é- ¡F(Uœ‡9&CŒX—{HµbH·9† ¾0 񾯯Fç„é È›@ Ç¯§Û|€Œ¼Ê“‡wHò .)\*1­@+°€\¬nÀïZ\¶#‹ce“¤€TÿB1½Œßp¸ P½øC—˜~-%¼Ä ~> €H›×£¡Lßå [äÕó'b’2@S%®xDGÖŽiA˜ê‰ñ .)¬*1­ÀãB4eø]‹Ëvdq¬l’ [ŠËF¬je Æ,² žTË.\V ‰ÃÙ£¥Ä€–?H™ Òæ€uëèx}f€“*‚• ɽÈàýÛW˜âAd® °ñ Ðd‰ñ P;D£àj ÝŒÕF\‰x¤†-~DšŒ¬ S š,Õv\!Ñ‚?œqYÇjdc1#kг@ü|@‘¸?€ƒu´—GGðåóG E°²1µà'I 1†áx¬j(w0Y¬R$…-1l:Ä,I!É:¬zÑŠ’ÒÃ( ÖÈñóDÚ|°Â­FÁ(xK‰Ñ"b`Ãÿ')óDÚ|Àï_¿~ÿú9Ê£`Œ4ÀÃËiõ ~ƒKâ爄ù%•k—ÏJHËŽ†ò(£ @N†=[~ÀÁ™‡í]ˆW@¤Íhji]¿víÉã£= FÁ(ƒ¸º{‘¤ €H¾Oآр£`Œ‚AˆŸ €€=/hŒ‚Q0 F. Ñó‚FÁ(£`ä€=/hŒ‚Q0 F. ’çFÁ(£` @£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@¡Ôß¾} ‘Q0 FÁ(9 €˜Fƒ`Œ‚Q0 F, P? ±±q4 FÁ(£`€btpp …Q0 FÁ(™ À®S‡õµjIEND®B`‚htmldoc-1.8.27/doc/1-install.html0100664000212600000240000000753310330505373015170 0ustar mikeuser

Chapter 1 - Installing HTMLDOC

This chapter describes the steps needed to install the commercial version of HTMLDOC on your system. If you are installing HTMLDOC from source code, please see Appendix D, Compiling HTMLDOC from Source.

Requirements

HTMLDOC requires approximately 4MB of disk space and one of the following environments:

  • Microsoft Windows® 2000 or higher
  • MacOS® X 10.2 or higher
  • Linux® 2.4 or higher
  • Solaris® 7 or higher

HTMLDOC may run on other platforms, however we do not provide packages for platforms other than those listed.

Installing HTMLDOC

The following instructions describe how to install the HTMLDOC software on your system.

Installing HTMLDOC on Microsoft Windows

HTMLDOC is provided as a Microsoft installer file under Windows. Insert the CD or double-click on the htmldoc icon in the Explorer window to install HTMLDOC under Windows using the Microsoft software installation wizard (Figure 1-1).

The software installation wizard
Figure 1-1: The Microsoft software installation wizard

Installing HTMLDOC on MacOS X

Double-click on the Install icon in the Finder window to start the software installation wizard (Figure 1-2) and follow the installer prompts.

The software installation wizard
Figure 1-2: The software installation wizard

Installing HTMLDOC on Linux

Double-click on the htmldoc-linux-intel.rpm icon or run the following command to install HTMLDOC on Linux:

    rpm -i htmldoc-linux-intel.rpm ENTER

Installing HTMLDOC on Solaris

Run the following command to install HTMLDOC on Solaris SPARC:

    pkgadd -d htmldoc-solaris-sparc.pkg ENTER

Run the following command to install HTMLDOC on Solaris Intel:

    pkgadd -d htmldoc-solaris-intel.pkg ENTER

Licensing HTMLDOC

Before you can use HTMLDOC, you must license it. When you first run HTMLDOC, the license dialog (Figure 1-3) will appear.


Figure 1-3 - The HTMLDOC License Dialog

Click on the Update License button to show the license manager window (Figure 1-4).


Figure 1-4 - The HTMLDOC License Dialog

Enter the license key that was emailed to you or came on the inside of the HTMLDOC CD-ROM case and click on the OK button. Click on the Close button to start using the software.

Uninstalling HTMLDOC

The following instructions describe how to remove the HTMLDOC software from your system.

Uninstalling HTMLDOC on Microsoft Windows

Open the Control Panel window and double-click on the Add/Remove Software icon. When the available software list is displayed, select HTMLDOC and click on the Remove button.

Uninstalling HTMLDOC on MacOS X

Double-click on the Uninstall icon in the Finder and follow the prompts.

Uninstalling HTMLDOC on Linux

Run the following command to remove HTMLDOC from your Linux system:

    % rpm -e htmldoc ENTER

Uninstalling HTMLDOC on Solaris

Run the following command to remove HTMLDOC from Solaris:

    % pkgrm htmldoc ENTER
htmldoc-1.8.27/doc/8-cmdref.html0100664000212600000240000010711310332476364014775 0ustar mikeuser

Chapter 8 - Command-Line Reference

This chapter describes all of the command-line options supported by HTMLDOC.

Basic Usage

The basic command-line usage for HTMLDOC is:

    % htmldoc options filename1.html ... filenameN.html ENTER
    % htmldoc options filename.book ENTER
    

The first form converts the named HTML files to the specified output format immediately. The second form loads the specified .book file and displays the HTMLDOC window, allowing a user to make changes and/or generate the document interactively.

If no output file or directory is specified, then all output is sent to the standard output file.

On return, HTMLDOC returns and exit code of 0 if it was successful and non-zero if there were errors.

Options

The following command-line options are recognized by HTMLDOC.

-d directory

The -d option specifies an output directory for the document files.

This option is not compatible with the PDF output format.

-f filename

The -f option specifies an output file for the document.

-t format

The -t option specifies the output format for the document and can be one of the following:

FormatDescription
htmlGenerate one or more indexed HTML files.
htmlsepGenerate separate HTML files for each heading in the table-of-contents.
pdfGenerate a PDF file (default version - 1.3).
pdf11Generate a PDF 1.1 file for Acrobat Reader 2.0.
pdf12Generate a PDF 1.2 file for Acrobat Reader 3.0.
pdf13Generate a PDF 1.3 file for Acrobat Reader 4.0.
pdf14Generate a PDF 1.4 file for Acrobat Reader 5.0.
psGenerate one or more PostScript files (default level - 2).
ps1Generate one or more Level 1 PostScript files.
ps2Generate one or more Level 2 PostScript files.
ps3Generate one or more Level 3 PostScript files.

-v

The -v option specifies that progress information should be sent/displayed to the standard error file.

--batch filename.book

The --batch option specifies a book file that you would like to generate without the GUI popping up. This option can be combined with other options to generate the same book in different formats and sizes:

    % htmldoc --batch filename.book -f filename.ps ENTER
    % htmldoc --batch filename.book -f filename.pdf ENTER
    

--bodycolor color

The --bodycolor option specifies the background color for all pages in the document. The color can be specified by a standard HTML color name or as a 6-digit hexadecimal number of the form #RRGGBB.

--bodyfont typeface

The --bodyfont option specifies the default text font used for text in the document body. The typeface parameter can be one of the following:

typefaceActual Font
ArialHelvetica
CourierCourier
HelveticaHelvetica
MonospaceDejaVu Sans Mono
SansDevaVu Sans
SerifDejaVu Serif
TimesTimes

--bodyimage filename

The --bodyimage option specifies the background image for all pages in the document. The supported formats are BMP, GIF, JPEG, and PNG.

--book

The --book option specifies that the input files comprise a book with chapters and headings.

--bottom margin

The --bottom option specifies the bottom margin. The default units are points (1 point = 1/72nd inch); the suffixes "in", "cm", and "mm" specify inches, centimeters, and millimeters, respectively.

This option is only available when generating PostScript or PDF files.

--browserwidth pixels

The --browserwidth option specifies the browser width in pixels. The browser width is used to scale images and pixel measurements when generating PostScript and PDF files. It does not affect the font size of text.

The default browser width is 680 pixels which corresponds roughly to a 96 DPI display. Please note that your images and table sizes are equal to or smaller than the browser width, or your output will overlap or truncate in places.

--charset charset

The --charset option specifies the 8-bit character set encoding to use for the entire document. HTMLDOC comes with the following character set files:

charsetCharacter Set
cp-874Windows code page 874
cp-1250Windows code page 1250
cp-1251Windows code page 1251
cp-1252Windows code page 1252
cp-1253Windows code page 1253
cp-1254Windows code page 1254
cp-1255Windows code page 1255
cp-1256Windows code page 1256
cp-1257Windows code page 1257
cp-1258Windows code page 1258
iso-8859-1ISO-8859-1
iso-8859-2ISO-8859-2
iso-8859-3ISO-8859-3
iso-8859-4ISO-8859-4
iso-8859-5ISO-8859-5
iso-8859-6ISO-8859-6
iso-8859-7ISO-8859-7
iso-8859-8ISO-8859-8
iso-8859-9ISO-8859-9
iso-8859-14ISO-8859-14
iso-8859-15ISO-8859-15
koi8-rKOI8-R

--color

The --color option specifies that color output is desired.

This option is only available when generating PostScript or PDF files.

--compression[=level]

The --compression option specifies that Flate compression should be performed on the output file(s). The optional level parameter is a number from 1 (fastest and least amount of compression) to 9 (slowest and most amount of compression).

This option is only available when generating PDF or Level 3 PostScript files.

--continuous

The --continuous option specifies that the input files comprise a web page (or site) and that no title page or table-of-contents should be generated. Unlike the --webpage option described later in this chapter, page breaks are not inserted between each input file.

This option is only available when generating PostScript or PDF files.

--cookies 'name=\"value with space\"; name=value'

The --cookies option specifies one or more HTTP cookies that should be sent when converting remote URLs. Each cookie must be separated from the others by a semicolon and a space, and values containing whitespace or the semicolon must be placed inside double-quotes. When specifying multiple cookies, the entire cookie string must be surrounded by single quotes in order for the string to be processed correctly.

--datadir directory

The --datadir option specifies the location of data files used by HTMLDOC.

--duplex

The --duplex option specifies that the output should be formatted for two sided printing.

This option is only available when generating PostScript or PDF files. Use the --pscommands option to generate PostScript duplex mode commands.

--effectduration seconds

The --effectduration option specifies the duration of a page transition effect in seconds.

This option is only available when generating PDF files.

--embedfonts

The --embedfonts option specifies that fonts should be embedded in PostScript and PDF output. This is especially useful when generating documents in character sets other than ISO-8859-1.

--encryption

The --encryption option enables encryption and security features for PDF output.

This option is only available when generating PDF files.

--firstpage page

The --firstpage option specifies the first page that will be displayed in a PDF file. The page parameter can be one of the following:

pageDescription
p1The first page of the document.
tocThe first page of the table-of-contents.
c1The first page of chapter 1.

This option is only available when generating PDF files.

--fontsize size

The --fontsize option specifies the base font size for the entire document in points (1 point = 1/72nd inch).

--fontspacing spacing

The --fontspacing option specifies the line spacing for the entire document as a multiplier of the base font size. A spacing value of 1 makes each line of text the same height as the font.

--footer lcr

The --footer option specifies the contents of the page footer. The lcr parameter is a three-character string representing the left, center, and right footer fields. Each character can be one of the following:

lcrDescription
.A period indicates that the field should be blank.
:A colon indicates that the field should contain the current and total number of pages in the chapter (n/N).
/A slash indicates that the field should contain the current and total number of pages (n/N).
1The number 1 indicates that the field should contain the current page number in decimal format (1, 2, 3, ...)
aA lowercase "a" indicates that the field should contain the current page number using lowercase letters.
AAn uppercase "A" indicates that the field should contain the current page number using UPPERCASE letters.
cA lowercase "c" indicates that the field should contain the current chapter title.
CAn uppercase "C" indicates that the field should contain the current chapter page number.
dA lowercase "d" indicates that the field should contain the current date.
DAn uppercase "D" indicates that the field should contain the current date and time.
hAn "h" indicates that the field should contain the current heading.
iA lowercase "i" indicates that the field should contain the current page number in lowercase roman numerals (i, ii, iii, ...)
IAn uppercase "I" indicates that the field should contain the current page number in uppercase roman numerals (I, II, III, ...)
lA lowercase "l" indicates that the field should contain the logo image.
tA lowercase "t" indicates that the field should contain the document title.
TAn uppercase "T" indicates that the field should contain the current time.

Setting the footer to "..." disables the footer entirely.

--format format

The --format option specifies the output format for the document and can be one of the following:

FormatDescription
htmlGenerate one or more indexed HTML files.
htmlsepGenerate separate HTML files for each heading in the table-of-contents.
pdfGenerate a PDF file (default version - 1.3).
pdf11Generate a PDF 1.1 file for Acrobat Reader 2.0.
pdf12Generate a PDF 1.2 file for Acrobat Reader 3.0.
pdf13Generate a PDF 1.3 file for Acrobat Reader 4.0.
pdf14Generate a PDF 1.4 file for Acrobat Reader 5.0.
psGenerate one or more PostScript files (default level - 2).
ps1Generate one or more Level 1 PostScript files.
ps2Generate one or more Level 2 PostScript files.
ps3Generate one or more Level 3 PostScript files.

--gray

The --gray option specifies that grayscale output is desired.

This option is only available when generating PostScript or PDF files.

--header lcr

The --header option specifies the contents of the page header. The lcr parameter is a three-character string representing the left, center, and right header fields. See the --footer option for the list of formatting characters.

Setting the header to "..." disables the header entirely.

--headfootfont font

The --headfootfont option specifies the font that is used for the header and footer text. The font parameter can be one of the following:

  • Courier
  • Courier-Bold
  • Courier-Oblique
  • Courier-BoldOblique
  • Helvetica
  • Helvetica-Bold
  • Helvetica-Oblique
  • Helvetica-BoldOblique
  • Monospace
  • Monospace-Bold
  • Monospace-Oblique
  • Monospace-BoldOblique
  • Sans
  • Sans-Bold
  • Sans-Oblique
  • Sans-BoldOblique
  • Serif
  • Serif-Roman
  • Serif-Bold
  • Serif-Italic
  • Serif-BoldItalic
  • Times
  • Times-Roman
  • Times-Bold
  • Times-Italic
  • Times-BoldItalic

This option is only available when generating PostScript or PDF files.

--headfootsize size

The --headfootsize option sets the size of the header and footer text in points (1 point = 1/72nd inch).

This option is only available when generating PostScript or PDF files.

--headingfont typeface

The --headingfont options sets the typeface that is used for headings in the document. The typeface parameter can be one of the following:

typefaceActual Font
ArialHelvetica
CourierCourier
HelveticaHelvetica
MonospaceDejaVu Sans Mono
SansDevaVu Sans
SerifDejaVu Serif
TimesTimes

--help

The --help option displays all of the available options to the standard output file.

--helpdir directory

The --helpdir option specifies the location of the on-line help files.

--jpeg[=quality]

The --jpeg option enables JPEG compression of continuous-tone images. The optional quality parameter specifies the output quality from 0 (worst) to 100 (best).

This option is only available when generating PDF or Level 2 and Level 3 PostScript files.

--landscape

The --landscape option specifies that the output should be in landscape orientation (long edge on top).

This option is only available when generating PostScript or PDF files.

--left margin

The --left option specifies the left margin. The default units are points (1 point = 1/72nd inch); the suffixes "in", "cm", and "mm" specify inches, centimeters, and millimeters, respectively.

This option is only available when generating PostScript or PDF files.

--linkcolor color

The --linkcolor option specifies the color of links in HTML and PDF output. The color can be specified by name or as a 6-digit hexadecimal number of the form #RRGGBB.

--links

The --links option specifies that PDF output should contain hyperlinks.

--linkstyle style

The --linkstyle option specifies the style of links in HTML and PDF output. The style can be "plain" for no decoration or "underline" to underline links.

--logoimage filename

The --logoimage option specifies the logo image for the HTML navigation bar and page headers and footers for PostScript and PDF files. The supported formats are BMP, GIF, JPEG, and PNG.

Note:

You need to use the --header and/or --footer options with the l parameter or use the corresponding HTML page comments to display the logo image in the header or footer.

The following example uses the --header option:

    htmldoc --logoimage image.png --header lt. -f file.pdf file.html

--no-compression

The --no-compression option specifies that Flate compression should not be performed on the output files.

--no-duplex

The --no-duplex option specifies that the output should be formatted for one sided printing.

This option is only available when generating PostScript or PDF files. Use the --pscommands option to generate PostScript duplex mode commands.

--no-embedfonts

The --no-embedfonts option specifies that fonts should not be embedded in PostScript and PDF output.

--no-encryption

The --no-encryption option specifies that no encryption/security features should be enabled in PDF output.

This option is only available when generating PDF files.

--no-jpeg

The --no-jpeg option specifies that JPEG compression should not be performed on large images.

--no-links

The --no-links option specifies that PDF output should not contain hyperlinks.

--no-localfiles

The --no-localfiles option disables access to local files on the system. This option should be used when providing remote document conversion services.

--no-numbered

The --no-numbered option specifies that headings should not be numbered.

--no-pscommands

The --no-pscommands option specifies that PostScript device commands should not be written to the output files.

--no-strict

The --no-strict option turns off strict HTML conformance checking.

--no-title

The --no-title option specifies that the title page should not be generated.

--no-toc

The --no-toc option specifies that the table-of-contents pages should not be generated.

--no-xrxcomments

The --no-xrxcomments option specifies that Xerox PostScript job comments should not be written to the output files.

This option is only available when generating PostScript files.

--numbered

The --numbered option specifies that headings should be numbered.

--nup pages

The --nup option sets the number of pages that are placed on each output page. Valid values for the pages parameter are 1, 2, 4, 6, 9, and 16.

--outdir directory

The --outdir option specifies an output directory for the document files.

This option is not compatible with the PDF output format.

--outfile filename

The --outfile option specifies an output file for the document.

--owner-password password

The --owner-password option specifies the owner password for a PDF file. If not specified or the empty string (""), a random password is generated.

This option is only available when generating PDF files.

--pageduration seconds

The --pageduration option specifies the number of seconds that each page will be displayed in the document.

This option is only available when generating PDF files.

--pageeffect effect

The --pageeffect option specifies the page effect to use in PDF files. The effect parameter can be one of the following:

effectDescription
noneNo effect is generated.
biBox Inward
boBox Outward
dDissolve
gdGlitter Down
gdrGlitter Down and Right
grGlitter Right
hbHorizontal Blinds
hsiHorizontal Sweet Inward
hsoHorizontal Sweep Outward
vbVertical Blinds
vsiVertical Sweep Inward
vsoVertical Sweep Outward
wdWipe Down
wlWipe Left
wrWipe Right
wuWipe Up

This option is only available when generating PDF files.

--pagelayout layout

The --pagelayout option specifies the initial page layout in the PDF viewer. The layout parameter can be one of the following:

layoutDescription
singleA single page is displayed.
oneA single column is displayed.
twoleftTwo columns are displayed with the first page on the left.
tworightTwo columns are displayed with the first page on the right.

This option is only available when generating PDF files.

--pagemode mode

The --pagemode option specifies the initial viewing mode in the PDF viewer. The mode parameter can be one of the following:

modeDescription
documentThe document pages are displayed in a normal window.
outlineThe document outline and pages are displayed.
fullscreenThe document pages are displayed on the entire screen in "slideshow" mode.

This option is only available when generating PDF files.

--path dir1;dir2;dir3;...;dirN

The --path option specifies a search path for files that are loaded by HTMLDOC. It is usually used to get images that use absolute server paths to load.

Directories are separated by the semicolon (;) so that drive letters and URLs can be specified. Quotes around the directory parameter are optional. They are usually used when the directory string contains spaces.

    --path "dir1;dir2;dir3;...;dirN"
    

--permissions permission[,permission,...]

The --permissions option specifies the document permissions. The available permission parameters are listed below:

PermissionDescription
allAll permissions
annotateUser can annotate document
copyUser can copy text and images from document
modifyUser can modify document
printUser can print document
no-annotateUser cannot annotate document
no-copyUser cannot copy text and images from document
no-modifyUser cannot modify document
no-printUser cannot print document
noneNo permissions

The --encryption option must be used in conjunction with the --permissions parameter.

    --permissions no-print --encryption
    

Multiple options can be specified by separating them with commas:

    --permissions no-print,no-copy --encryption
    

This option is only available when generating PDF files.

--portrait

The --portrait option specifies that the output should be in portrait orientation (short edge on top).

This option is only available when generating PostScript or PDF files.

--pscommands

The --pscommands option specifies that PostScript device commands should be written to the output files.

This option is only available when generating Level 2 and Level 3 PostScript files.

--quiet

The --quiet option prevents error messages from being sent to stderr.

--referer url

The --referer option sets the URL that is passed in the Referer: field of HTTP requests.

--right margin

The --right option specifies the right margin. The default units are points (1 point = 1/72nd inch); the suffixes "in", "cm", and "mm" specify inches, centimeters, and millimeters, respectively.

This option is only available when generating PostScript or PDF files.

--size size

The --size option specifies the page size. The size parameter can be one of the following standard sizes:

sizeDescription
Letter8.5x11in (216x279mm)
A48.27x11.69in (210x297mm)
Universal8.27x11in (210x279mm)

Custom sizes are specified by the page width and length separated by the letter "x" to select a custom page size. Append the letters "in" for inches, "mm" for millimeters, or "cm" for centimeters.

This option is only available when generating PostScript or PDF files. Use the --pscommands option to generate PostScript page size commands.

--strict

The --strict option turns on strict HTML conformance checking. When enabled, HTML elements that are improperly nested and dangling close elements will produce error messages.

--textcolor color

The --textcolor option specifies the default text color for all pages in the document. The color can be specified by a standard HTML color name or as a 6-digit hexadecimal number of the form #RRGGBB.

--textfont typeface

The --textfont options sets the typeface that is used for text in the document. The typeface parameter can be one of the following:

typefaceActual Font
ArialHelvetica
CourierCourier
HelveticaHelvetica
MonospaceDejaVu Sans Mono
SansDevaVu Sans
SerifDejaVu Serif
TimesTimes

--title

The --title option specifies that a title page should be generated.

--titlefile filename

The --titlefile option specifies a HTML file to use for the title page.

--titleimage filename

The --titleimage option specifies the title image for the title page. The supported formats are BMP, GIF, JPEG, and PNG.

--tocfooter lcr

The --tocfooter option specifies the contents of the table-of-contents footer. The lcr parameter is a three-character string representing the left, center, and right footer fields. See the --footer option for the list of formatting characters.

Setting the TOC footer to "..." disables the TOC footer entirely.

--tocheader lcr

The --tocheader option specifies the contents of the table-of-contents header. The lcr parameter is a three-character string representing the left, center, and right header fields. See the --footer option for the list of formatting characters.

Setting the TOC header to "..." disables the TOC header entirely.

--toclevels levels

The --toclevels options specifies the number of heading levels to include in the table-of-contents pages. The levels parameter is a number from 1 to 6.

--toctitle string

The --toctitle options specifies the string to display at the top of the table-of-contents; the default string is "Table of Contents".

--top margin

The --top option specifies the top margin. The default units are points (1 point = 1/72nd inch); the suffixes "in", "cm", and "mm" specify inches, centimeters, and millimeters, respectively.

This option is only available when generating PostScript or PDF files.

--user-password password

The --user-password option specifies the user password for a PDF file. If not specified or the empty string (""), no password will be required to view the document.

This option is only available when generating PDF files.

--verbose

The --verbose option specifies that progress information should be sent/displayed to the standard error file.

--version

The --version option displays the HTMLDOC version number.

--webpage

The --webpage option specifies that the input files comprise a web page (or site) and that no title page or table-of-contents should be generated. HTMLDOC will insert a page break between each input file.

This option is only available when generating PostScript or PDF files.

--xrxcomments

The --xrxcomments option specifies that Xerox PostScript job comments should be written to the output files.

This option is only available when generating PostScript files.

Environment Variables

HTMLDOC looks for several environment variables which can override the default directories, display additional debugging information, and disable CGI mode.

HTMLDOC_DATA

This environment variable specifies the location of HTMLDOC's data and fonts directories, normally /usr/share/htmldoc or C:\Program Files\Easy Software Products\HTMLDOC.

HTMLDOC_DEBUG

This environment variable enables debugging information that is sent to stderr. The value is a list of keywords separated by spaces:

keywordInformation Shown
linksShows all of the links in a document
memoryShows memory usage statistics
remotebytesShows the number of bytes that were transferred via HTTP
tablePuts a box around each table, row, and cell
tempfilesShows the temporary files that were created, and preserves them for debugging
timingShows the load and render times
allAll of the above

HTMLDOC_HELP

This environment variable specifies the location of HTMLDOC's documentation directory, normally /usr/share/doc/htmldoc or C:\Program Files\Easy Software Products\HTMLDOC\doc.

HTMLDOC_NOCGI

This environment variable, when set (the value doesn't matter), disables CGI mode. It is most useful for using HTMLDOC on a web server from a scripting language or invocation from a program.

Messages

HTMLDOC sends error and status messages to stderr unless the --quiet option is provided on the command-line. Applications can capture these messages to relay errors or statistics to the user.

BYTES: Message

The BYTES: message specifies the number of bytes that were written to an output file. If the output is directed at a directory then multiple BYTES: messages will be sent.

DEBUG: Messages

The DEBUG: messages contain debugging information based on the value of the HTMLDOC_DEBUG environment variable. Normally, no DEBUG: messages are sent by HTMLDOC.

ERRnnn: Messages

The ERRnnn: messages specify an error condition. Error numbers 1 to 14 map to the following errors:

  1. No files were found or loadable.
  2. No pages were generated.
  3. The document contains too many files or chapters.
  4. HTMLDOC ran out of memory.
  5. The specified file could not be found.
  6. The comment contains a bad HTMLDOC formatting command.
  7. The image file is not in a known format.
  8. HTMLDOC was unable to remove a temporary file.
  9. HTMLDOC had an unspecified internal error.
  10. HTMLDOC encountered a networking error when retrieving a file via a URL.
  11. HTMLDOC was unable to read a file.
  12. HTMLDOC was unable to write a file.
  13. A HTML error was found in a source file.
  14. A table, image, or text fragment was too large to fit in the space provided.
  15. A hyperlink in the source files was unresolved.
  16. A header/footer string in the document contains a bad $ command.

Error numbers 100 to 505 correspond directly to a HTTP status code.

INFO: Messages

The INFO: messages contain general information that is logged when HTMLDOC is running in CGI mode or when you use the --verbose option.

PAGES: Message

The PAGES: message specifies the number of pages that were written to an output file. If the output is directed at a directory then multiple PAGES: messages will be sent. No PAGES: messages are sent when generating HTML output.

REMOTEBYTES: Message

The REMOTEBYTES: message specifies the number of bytes that were transferred using HTTP. This message is only displayed if the HTMLDOC_DEBUG environment variable has the keyword remotebytes or all.

TIMING: Message

The TIMING: message specifies the load, render, and total time in seconds for the current command. This message is only displayed if the HTMLDOC_DEBUG environment variable has the keyword timing or all.

htmldoc-1.8.27/doc/htmldoc-fig7b.png0100664000212600000240000010332310322727434015631 0ustar mikeuser‰PNG  IHDRñÌJ´Y pHYs.#.#x¥?vtIMEÔ9beò IDATxÚì}yœUµÿ¹µWwOÏLÖIf&™dBVC$$ < ŠJ B@å÷|êSD|Êx" ²*àöÐ [æ ({ d%û>“e&“m–Þ«ê÷Çí®ÔÔÖÕët÷œoæÓ©¾}ëÞÛÕ·¾uê[çžC4M@T¸OÖ}€G@ *„Ó`âÔ³ð@ D¹ã®»îâèZëQ`ð DÅ€3¾™~ù3É-HjÃüž$ëbS9¹a~GˆeÃøÆ¶CĶC•RC¯ÊÄë‘´™ÓlãгýlcÛ‡Ó‘Lm”ÂM×#‰Ó§wÅMï©âV´Óµ@ §#¢D9ýÄæGNlzØTxlã/n|¨¤¾ÞîwïÞýÎÝø3#ˆ~ÎéƒîmѪñßɺõ#ë€ASn¤o¯û žöƒöµ˜jÖþÃCý †q³±üÀªû ~ú-û?¼κÕÚ˾÷ߎ:çö=ïý7Œ:÷ö,ƼíŸwÐñü7ÎQ!œ^P ™ö оæzúœ|8|ð£û‡y³‘Ð=bäÌÛ ÙuÎíúSõL }Üùw [ÿyûÖ7nGZG •Àé=Û€À¸ïto{¬këcU㯧å[±V>þÉÃùÓÁÕ÷;óæƒ«ïϺ[;}×ÛwéÛ§œ·ˆnìxóN½pÜÜ»ÇB èvzç–G 8á»àÄæ$¹ßô0ÔNü>ûä—¶;v¬Ðcug$JèÃ?u‹wS}ïû?¡£Î±‘\v½s7Œ™}'Øùö];ßZ4ö¼E;Þ\MsîêåQ °õŸ·j/¢²9=k šr#õ‘ïX÷‹´•‡qóÁî€agÞ|ҥߌڋS£©®cû›w@ÓÜäGTOGBG Âé=Û§úcÒ®­V5__´1ézzÞAít}ÖØ9IS¶ÿëÎqsQxA j§Æ}‡š½Ý[«àï?vÎ]$eªSÐg¤Ù=bE ˆåt+‚Í×wny´ss¯Ç¤5§~ïø¦‡”ô¼£õƒ{éFãŒef¡Ïºc×;wµ]O§hš{%rÔ^Dù‚l\»râÔ³h¬]Œá…AŽ0†NoœÞP¶1¼^|e9Æ@ ˆÊr:@ §#9@ …C/¿—_ü a€æ°(N«ðˆ DÙ¡³³Ë†Ó  @TˆÎq,¨N@T§Gc1<"Q!œŽz:@T§£žŽ@ •Ã騧#Dåp:êéQ9œŽz:@T§WŒž¾yÓFüiÅÇ„S'y¬¹úÃ÷ñp•;Μ>ÓcÍû[séhx}C–œ^zúÚµ7Ÿ„Q||°âÝÙ矶Ú{ï¾9®y2®rÇ¿^ûûEó>Ÿ¶ÚîÝ»UÕ¹t´g×ÎñͲáô ÐÓwíØ1¬~ĺœpˆâãâK¯üû«‹Ï:û\—:Ö}<¼~Äàºz<\压>ÿ¥å^2÷3»Ôéè8¨ªö‚¹tä·nÙfÜãÛ]ÛÖëåúv! H¢ $O˜æ‰§oùäcã§¶%Çj¶;š@ëè•­{ec;îm¦í:ë!å¥Aï•‹ÓñGœrÚÙî•ÓžG¢(Z9ýôés¬5?þðÍ&§OŸC×7ú3^ZüŒË§·ßóØ¦ fýsaeð ?sGZïc=}ʉûv}âTRPá>PU­s:·Ç4Mܵýúj¾䯚±NòzfiÇZnÝ+ã‹hj$cš&™ÈÚ»iÌN]g=¤¼4è½r¡»Ó§‘âmSªœ¦Þªj£á¦cãÚ•Ec1c_¶ƒéo¸ê+ß°-;~ÊŽ­ëmQw× /?·¾¯wSZ·-Ï‚Ÿ ¨§[[ÓKDAÚÐD·ÛZ·ëôB½|hC“^Áºm,q"M[j¶åÁ‘Ösÿ¹Ï?·_üâsé®ÿÆO)ï'ŒË‰¤ªªzê¢i5ÿusà‘G=ø`xÒDBÃh DZ„a“¼^`f§(ò[‘éýDÚ󈤼›t**ÍãAU‡Þvgí¯žÚwÿ==&Щa,Ëèf;2{Žà½ýÜùBÿŸÎÀr‚ªªªªÂè1 ªÀµ´6\± gú§6ÝóÓÀ°:E¥´Îj(±ìI3 O§ <É£^Î#^^,ÈT9Šhû÷½æÚÎ3N_·èÿСª¢ a«1@†eX£…S1;Ä…˜·Ÿ;?VfÿŸÅâ±hÑ8]Q”®Aƒ|ÔV"„hšÿÃUŸºà‚ƒóçï¾îÛ¾šjAEAçy–åX–aS‚  ²Ya'¹·ÅñX4–oûIUUEQ Psr*ªU«?š5ïÒ–/\ºíë_“kªE!99Žç8–MY8³ý¹£Þ~îHÎE ßêé#F޴᣺úÆâ/ô†·[‰4hš–T05M#¤néÒÿø¿µ_¹fïùçI’$$iã8žMžMh%UV¯|g欹îçÑ„‰S7møhX^§¨>{âá±ôÑ(!št*Ö¿ú×Á¯¿±zႳÏ%QàAà9>Éëh°gU+ÞùÌÅŸwÿ¹kj?~”>MÍG;ÚFŒê¿zú˜±cwíØÑÚ²§œŠ¢Æ£‘éôDRUj"€À÷„¦?ñdûó/üï¥ÅF4‚Àqϱ,—du]ÕD+©20{î§½T›<õô ë>nÝ·'ÏSQU‘Øy)»]ŸŠš óôÚ^zåÍ 7 çžçX.u×È0 a’>Z8½ãâÏ]æ¥Ú Aƒ;:wwfŸ•tÔ˜S¼W®4ÿô"ƒj/±hlħf1¡=‘€ IMë˜2iÝßë“6;ÏóϱDZÄh&áé„À©ˆÈ•ìŸ^äIUÕX"«"ïÜ¥1 ¨ª@ yÛK v0hýƹÿñí]óþmçÕW‰ÕAQDQäyžOÚí ò݇8¹¡ýÓ‹"%%2z´´k5Žˆ¦MS†¤L¤ä=‘¢Œýó²o¼¹îkמ3Köù§ÿx.u:¡²‰À©ˆÈ§W†ž^܉¨£iZxò©µ¯¿A#8©c¤œaô·Bwϧ~¼gñ oÿ:eÊ$UR5ÐhmÂp (7ñtBàTDdÏ锼@Ð4MQT–í”S¨*0 u}!S?—ô [ûÅ?^Ô1iâÚ¯' 4$Ë0À²É,‹Ê&§""'NG==›IU•D† MEïÝbTµ× oê¤JÖQµAë7^ðµoï¸ô’]W_)VU%ýØÁ¨l¢•„À©ˆÈ’ÓQOÏâDRUMQÔÎ@•FÐT0œŸ¾@‰ç©Ï#ktyD p*"¼r:êéYH*!¬\ÔX–P2Ãyb{þ ( 6=ó±_‡Ÿ{þ­ÿú¾:e’€F`@ã€%O&<朊¯œŽzz'’¦iŠ¢€š,1‰¸¾xÏxŸkÜÅ|Ûk¨#9zÑ-w´Ÿyú'7}—>Œç8à€! Dz,Ëa8=NEDfœŽzz k=âJ"V7Tîê2ž-ÖSH·•Œ¯¦›â!«?rÕµ›¿þÿi¾œHH‰D\ž××pã1GàTDxât¯z:A‰Æx"ªE%¡qãämæ$8¦SE?Œ™,)¢ik¾øùsæB1Âp„p„QTŽcˆª1 žHˆâMÅÕŸ»dóŒé#Çüþ¨$I¢$Ò81zä/D¡áóù²çt/zzBí[7â6Þ󪪚H$Ô*y!ÐûÖx© Ì¡i }›Zæ§×騩~òòÏkÃêä};}²Ïç“$QD>¥BãQ ©¨0½ëV=öùK”ºÁòž>Ÿ$I’$‰ôi2XNÅbáÌé3³äô´zzO8¶}ëÆ‰“ÏÀ£l<‘EM$âüþ²øe§l¾!ŒÁA`¨ši8ëÞ>îª /àóûý¾ª@•?àøý~¿O’$žç9Žg4ްö£÷ fQJS®/JÇÀZpÎ+íe*þë¼Y+ÏŸ3À'û|¾@Àï÷ûü~¿Ïç“RQÐN/xAZýá{çœ;'Nw×Ó©…>rtS‰$‡,%NWX–ë5 µ~O?Œ¶’ñ&רcPû‡/Y>L–$ŸÏïóùdÙç÷|>Ÿ$É4;Ã$¯ã1GÄb±qÍ“ìt%ª²¿±NE:Ýܧâ‘Úšß\ù%uX$‰’ì“}>Iöɾ€,û$I¢‘aX¼e,.N;óœ÷Þ}Ó£µž‰žNX°dûÜß²ËT«¾qLãtVU Ejh¤Ü­¥N!ã>#³ƒÁå€hÚ¿æœ÷þœó$Y–ejÔ4 ø}>Ÿ(Š¢(r‡¦ÉÉC˜áõ#×ÕÛrº¢(!ÂB@SÍSÑâßbšŠoÌ:÷íÙ犢(˲Ï'è­¢éIÛ‚çytg,2hòüÇO§ ‚¨çaÚ³sóºSµý-»F2¡_qºªª„Iˆ&­rê–жa}0eÜ=ä÷½?wŽ(J¢$û|þ@U ªª*¨ ¨µ.Ó¨ëzîœß:¬qÿ¾Ö©¨iZ"¡Dá&BÀI×%§©Øãó½}Þ,Q$I¢’K ª*ðû“7ŽÏó|Êé§bñ9=ÿùHáøAÊéÛ7¯µ: ©kسssÓ„iý‡Ó5McØ„¦VUEººtwH­É>¹TÏâ]àë Í}çÝÕóæI’,û|@•?¬ VI’Eút”ã0#0ˆ¶ƒ-ªj۩Ȳ FñùØP4 ß<ñÐVš¼ÔDåÆ×´Æ»‘ÙõMÛ&ûá…ŸíµQ\þúð˼ýö;%{¬õ̼ÊèQÉ›\U†1šEíõÃí÷MK§ýõ¯ZKK,‹Åâñx<‘H(Š¢(Š–Îi„;¡SL=ãBH¤¾€!$%©k©{½CÆ úß8ï Z[ã±8$q%‘UÍi*ÖB™Ú‹=Ž6»-<òs–zz1±~ýú+¯üRéqBH÷ˆI¡<•Ë‘hÚ‰ÁƒŸúñ–üàõõVSݸqÑχBÑh$‰D£QJ몪"¡#<:Ågw|XnUIηö`ÕCßûÎÿ~ïúÃÇç-Kˆ’ZkJÃK~4@$Fc (Šªjš¦ 44 B÷Èæ\O/¶lÙÒÜÜ\ú„NQ$Š¢¥îOAU×|á «.¼0Œaþ~ÓM_¾ñF°Ó4)­ÛÛÇ/Y²÷Úkéƒ)žç©ªN ,ôF˜°qíJS‰îÎØuè Qe’ÓSSß9Î’SÇÔ×ûdß_¾û¿åGÆ©È0 Ý™P4-xøðޝþ?˜=çüï½³qýšÆ‘Éu'íuf§òˆþjLœdwê7µƒ:{ülËé™êéÅÁâÅK^~ù¥²°ÓåÚÚ¤…®i=õõ¯ßrKx@m@QèP¶¶fÍ·þó´_ýÚ´îC_“^ùó¶Y³ÂÍÍÔó…㸔c:C­u¤u„‡©BURwÝÆýú‹—p#GË­{¿Ï`kjVýÇ¿ê7¿3/Ab¢i”î`˜q?ý‰oܸp$ÌñÜ–Mè:RzÙ8ÚÑf;s¡`'…á…Ÿí9Ý‹z‘ÑÒÒ2{ö¬²0Ò !¼$i¢H¢ÑßüæÖ+®bQ6×4:‡±,wì²ù]¯½^µc‡qݶɷìÂûöÚ£pµÔyš_½_F4Œë÷WÙ~”Œ¸‹i’H¢±·æÌìþÞMê'kè6º¢c¹ŽK/íü×›Á»\¦â¼‡~¹ìŸñÇs<ÏñL*ÕNÅ>LJš%?ú°G£ãöúõëÏ>ûì21Žò±™3÷Ý~[lР@(ò‰D‚Âq,ÇqÇÀæ‡yÖg?§Ùy:Òª¶¶qÏ=·çÚk©—:Çq¨À LˆÇ¢1‡3\UUUUj"4}úúoロ>ðË’ä÷û|>¹: T9–€u÷ß7ëòà<ƒí‡'¼ðÒΫÒĤDzɩ8‹ü\êzúòåËïI:n—©Î0L÷’žH”‰„€çyUU†¡„NýÀ>ß¾Û~<â'÷hšFM$Sä ¢i“–¾²uÖ¬Ps3]v”/ÆöY+ž–eMS7møhX}£Ó¯L%õ–»nYùÞÛCê†Ê²,ËRÀï÷û䪪ªªª`j*Ê»nþá˜ûÀP5ëTœö—¿nžyvϸqŸ4Lp*öÊOO§ºiûÑG-—#N9eYžç$–e‰5g¨öB£išª*á… C/¼èÛºÕÉZ€|)0F'w«#šÞšñQ´~pKë¾=N¿¸ªªŠ¢6ŽO$|>Ÿ,‰þ€_–¥@À¨ 0©©Ø}Åå¡¥¯ø¶mUsšŠùR`p*æˆ ÑÓˈЩeò¬ tCU©G1†É¥j̾ß<Ý=òs®þéÛ7¯5•ôŸL¤9žKº©®(JháUágŸ•·mÓ³˜7RæõÇ5øÀpÔA…yn IDATÎòÀÕ×0»÷¤ïø€©àÐjþÐèД;nßøÓŸIŒn6ø¼´R§bû¡ý‰Dbäè±p¦MP…Mù2Bꙿªi Ã\òàC{àçËþòçOM?·cH]}ÛÁVMƒÐg>ͽöz67­mX`ˆ2hkû3ÀÜó?󯾆SÑ ?Ûsz¦¢¹mVÒí›×"­{9‘ µÄ4©Àüö·Í³féÉ4ôÕúÃÒ@{{ÓsÏí½öZAèB$êÈ iZ×ûïW-_ž¾×+R„ÞbCèu«V¯úðC˜>ÞI¤œ%ôn¬ø©È0lËÞ]‘H´»¥…¹ð"¢iÔ+)BC6jU‡;š_|i×Õ _û¿¿ƒU@@–eQUUíùàƒ¡.„þ €íÊž˜ÙkZ~à¥;nïîîÆ©˜?g¯§;¥™¦ ¦ñTÉ^Iæ¦ yDÓ&½¼4¾{7Mš‹Å‰D<ÇãþñÍ4ÍHÝêR¬t«{þC¿ìîêêé Q7˜x<>0ýc*2t*úê‡|`ì§â´Wÿ’Ø»7D"ÑX,OMEî²+Ü&¡Nè/44¼` uË®>þxOWw¨'…#‘h?ŸŠ…ÕÓÝHëÆ?gÑ žþùË.›/ŠÒ¢E‹¶oßN -Z$ŠR{ûÉE ííí´Ži¯Ë.›¿lÙ2cƒ×_}é+0'}`4Mw#3j/ôí§ï½7ÇbqÊ鉄ÒóñÇlk«£a®h+zÛG+ÜFåï舲)…ÑH$Çô 鯲†aèTLúÀ¨* ìe;/~àÁH8‹Çãñ˜’H$Jhíº‘.}\ ‡£‘h4Åõ©ØMõòóOë­7àÛßþv0€Ë/¿üþûïûáÁ`ðÖ[oyê©§[ZZ ¥¥å©§ž¾õÖ[hMj’ïÞ½ššš¢Ñˆ1×ÝÛo¿ÓØØXú·½½˜qãè*]Ç\?gÎÿþô§Ú˜1©0ÉGFÑcÇÝš^ ðBêÏ›ð¢#rôX,£îŒ˜íºß*0á¦&úÜ^ŸŠkgûû;oWGãy6®"vü„[ÓÔŸILgjDŽÅc±h,O¤–e¨¨§—:U]† Iæ¨ ƒßÿþ÷u:¾ì²Ë¨Ñ­¿Ò¸òÊ/ÀìÙ牢$Š’QO_¿~=ý´ôí#Jë‚ PM€ð€Kþûîµ_ýj *à÷û|>Ÿ$É¢( ‚À²l¤ã°×nfx½ÛMGÆS¾‰Dê¹>&­|S*0t*n{â1}åD¨¶öO·ÿxõ«€Ïï£a{EAäyeÙÈ‘#÷×`Ðatœ™±£ÇâñD<9•~;=òsÙÄ{¡úÉâÅKôW]QY°`ÁË/¿ôo|=Åþ'“nÙ²¥¹¹¹|n{YŽã¨sèî»Àþùóÿõ‡ßK'ƒUÁ`&“¤Ì.Š"Çqñî¯}4z^’FAw·.Ü›"£"* µ‡· :hÈ0–eFŒn?á´O_¸ïÇ?"„ìûü¥Ëý„ÐÜ\UUUUUªŸÏ'ûdQXŽKôôdÖñ-†9y“óTì¡SQUÔ~==òs ÅOÿÆ7¾þÔSO···SS½³³ów¿ûÝüùóuSýW¿zâ[ßúöóÏ?¿lÙ2ª¶ë˜7oÞ¼yón¿ýöÝ»wÏž}Þe—ͧa#/^bÔaÊEQU5¼pᆩScÆU‡#ñxœ^^–eI’dYæy:ìz=t´xÚƒ® Ô ]µ‡$Xa„~ìH;}º ú¼Ú½s[O(´zò¤h]]u$’HME^àeI%Q–¤äT$Œ×^©y~…Ф™Št.ªªªjªÖ_§bÁýÓóêòÄOtvvÀ‹/¾xóÍ·üìg?Ó+œyæ™z"J·uÃ\¥íÛ·2dôèÑ'¹«¥eöìYewÛËqœ ’,'OÁ`Uuu°¦¦º¦¦ºººššH’$‰¢Àó¼XÌLx4Îé'!I¶Ù‘À!™$¢L ÝHåÆÙH7èT L<Õï÷«Á`°ººººº: €ßŸñT¼à}¡ß˜†Ð€ˆ83àçÊGJmmê¨~÷»ß5Ê/óæÍ[¶lÙ¼yóŒ®,×_ý²eË&Mš¬—üñÏÀúõëÏ>ûì2úÍŒ´NßR…†N媦ѫ9êΨ«ËLxYáu0L0ˆ¬WÙ0f±0m×B£q±,'Š@aXVxEQ€aˆu*ú‡Iož?op€yàFOOw˜*œŠéùÙÞNïs=ýå—_¢t ·Þz uN7V Ÿßðû>Ÿ&€E‘æê¬­ŽàR©‰yžã8cÊ3ü*Xr±Ýö8¥©“ãÇñzñ¿¡wdÝí:vXx¢¦&:b„Ÿãxžã“S‘í·SÑ£žž}¼<·‹f°Û~DÏ%*ì~äá¦ù—§·Ó½y¦/¾z!/‚ÀëA}M¹­8­S‘†eÙ­?»Ò5_1szZ8˜Zp'ðÏ ¼À Ç'ï a0~º'N÷®§7M˜FÀ}{¦QN÷Ï8»çüóýÿü§ã ó‚WNßyê„HÓ8¿ HIЫÈ鈴S‘°,+OŸÞyÞìà[o'?hX™î)Žƒ¸½y|dìXŸ ˆ’$J¢$НOEÔÓ½q:êéåh:±,ËqlÛSO6Ì=_h±[P´Àk›Ç|õk_óK’,K²,ëA¨®ŽÚ ÂËTlyä—c/ùœHÅÀÖ ¦_/hÀ€¥_ù²OS¶…,Š‚ ðýy*zÔÓ1i%˜êÇI²oÏŸ_‰œuSÝÕÁ?þà&Ùç—eÉçóɲO–%I’x^ þjÈæ÷©H¡SqË’çbƒeÝTW0ø»ï]/ù|²$щ(K’(&§b¿5, ?½þ¬E8}K h€¦i h ^:ÿMá§ÅŽeÚÊÇ\`6?%þÐk@8ÂðÀð„#ÃáakT=Dà…Ÿ—ÜJ:ãr9žWäÖ-}©ùß¿^µm[¦M>üO×}K dIòûýþ€ßç÷É>Y’D}‰Sÿ¤õBÅOíx_Ké•„vþ€„wýÛ¹oÉ9Ã.º%ùr ÀÙµgôt¼K.Öö0|tÿŸðá½ÿ „ ïúÞ óRx-å[F§W„@MÍ–g~¿ëëÿ‘Q#o]üoÏÞð}9ôû|'ŒF “$ú¸¾?û2zŒŸN6®]9qêYŸ¬û|>ŸëÆnߺñ‹ßK/øðů8Õ~ù3hOÛZ×j­kjBRzî>±ñúîî»="×ßîa ,!0,!<0<ž0\ÒB' -ô’²ÓGŽn\W¿ßNA°Ï Yß8&îß·sÚÕ_zåšÞ«o¹mˆé3Ï÷û«Òv¡‡‚Él¦â¾Åãñh4‰„{B¡‡Ú6|þ‹i_>šuî[ÿv¡ ^ÿÝïÓ’¿¾úŠ?à÷ûýÓÏši¬IýåMjèh…îã·­iÛ¦µ²þÖiÛãŒÑÓŒ™vìééŠÇ¢kV¿7íô³\ …Bðâ+Ë3öOíxÂ7öÛzáÄ©3¬5?Y·òÿ‚´^tK‰!a J?¬=ã–êɧĎ^9t^ôÈ”Dg­š8Êp¸À›|íËâ€\•JLЏ¹$3<ö$¡#›— Lg_‘‰;+0üI)`ø°3ßü';çüW~~ÿ¨U«ÛŸáœ@@ìé9¢iáqãö7ÝØÜüÍ_<øøUWVsÜ|ã??û'Q’|²üoÏ[½j¥,IкowÈчÛ :œéFB4«^èòlkÚîh|«s®)ü™^Akâwpß±Pþé§ÔÄ©3>|q%ÒzÑèRtN4 „0D%ÌvièýâÀû444@ hU @€¡f8!,.i­' =ež£Œ^2(¡ÛÚ†9*0À!À0 ˰*@Õ§Où¯›_YúÒ_c±D"qÕÕ_þŸÝ¢iš@ˆ PS]MC×UWWK²$‰ø}>Q[÷í¦ †aŽv´âjäs=~Zˆ!VO÷Lë_Ébè=ÛÏúÓ\öÒëØVvj!£ñd7xÏ´N†ÎðœS$ŒD‘°"a$`E`%`EÂH„ #FF<ùP”AB/];=¿lN 1-ÑšúŸK¡!iÃq¼(в,û~˜{þg ¶¦¦¦¶¶¶¶jkkèÔÖÖÖÔÖ@MMM0¬ª €,Ë¢(rϲŒÞ¸“„Rd˜¾xv—‡Œ¨ß£žž±ºÕR0dºxxÒ4]™‘©q‘–õüM×á¹íf­S#ˆ „!K-tMÓT=±$@71)Ñœ¢—d›ˆ µÓÂ…w 4­)j þ•´ÓY¶nùd|óÄêêêx"®$P[S«ïUSSM3VƒU4*ˆ¢HwwZÈj+Vx¿óÈèÅ¨ð€³ _8*Þ‹UѳF¥7–dô€ºgûãþ¦ëÒÚé”ÖM•\o*¤o髱$‹‹„{ËÆ!9­à´N_4† Ñ4ˆ 'Ùœþ6ZЬ©%Îø y^ÊvzÞå[9GéÀ~ŽaBðÉòîÛEU”M PSS­iIŠƒ”ú}> ÔÝÝÑÅú¤Ñ‹žžiMÛŽŠŒâééV;=kdÊ}:¿[¹ÞX¨³­u/ëÛŒº3µl†‘ú‹{{‘2Ø5Jßš, @ÍÈÿ$ùöbs4Ïû…îbtçë‘)Ð;xèph9æàþ}j »wn}Ê8Zs÷ÎmÔIqËžúÆQ´°£ý ¾^Ô0Òh›ldc5w ¶­i”•Œö¸ÉB·F¯4=­ÍîèÙöîŸí9ÝK</vzÑ–(m+dM¯^v4ÖéS™ˆœdmMK’<¥sÒ‹ÔOÒ7²y¿´Ó½‹-YìG;Ú4 ààþ}F¹†V>ÜvÀšþÂ:/r»ß‹õ­S}—f½÷˜û1/T¼w;½¸Þ£èQÈÇ•¥’ú…´ä[MëÅÚ'<¤ò~m§v¤ÐM©D´öÕV)éC==ÈNøv’YœT”þBîáó DµÓ ÄìŠÍë^aOÖ}¢§gÅõš õR¾(ºº@ôk;‰;/(žº¦ÙÿycsÓ>4UN–É8Œ#ù·Óñ ô[ôºw;ý;Ç×=œ'\’Ù“û¢(ŠÁÙ.c¸;8êÎ*ÖÊYõFítD!PâzºÖ;Ö¾ûwß4ëUc{»³“êæïP÷;[/i:Mêîp⥲mËi»sê×K#D¦v:Òz¿…G=½—ö" ‚ËŸ“¥@ˆýŸ;6 €'¿½¡åù3Âm &@M€–Ð4EÓ ))YFí-¸#h§Ö…ïy_0é´¶¾+3û¶#—/ë}H^øúHO×@ÓöðUŒ¦À¨x÷[—-;ôþx'¨qPã RfWN2»QŸA ú±^87•xt ÏýÁ ‡¬;ra^Û6=ÆÕqG‘ôô¬Ÿ`oå’±ÚUà¼HÛáýKŸŒ½µvjŒˆ„¨@X0! ÕÙSë´ÓóÌæîQ¼M )ÁÞ6-Ez©ãRÍäÖÈž¦¡z`nŸnlÊ¥YãÚQ—cbíËú<:¯ülËé™êéÓ/&ëIÖÆøzk@š äÝ;¿Ú÷ƒš©Kü£€áXVÓR¥4ÆIdG ú‰žGZ·]ƒn J'œbˆ;Y©Öm'#תùØÒ®St/æsÚ‹“q¥¾u_Ûoa;xpޱÎÁjìɺoã§§¿`x£ú£¦hºZÿöèêtm½ªöSÛ¥A„p@TV†€„1xÄ ³#ÐNÏUypŠ.â=±CÚð&YçˆpoÇÚiF™†²è4_¢1ÂŒ÷6K9鯠k÷ïº^M… T¨b΀¦Œw®mÿç«û– ŠïyÔxx×o5-Úù$hJhǯ@ÓB;žÐ0;%¾b>Òù%;ÎÍ”ôs”=~—Üû²^\ŽRÑbí*éô³çúÁ\FF3Æb±À9çò[·j„€ªÀª€–Rèi˜oç÷ÏŸð›ßjk%I’$‰çš>œeYX™æUÁÅiˆ~‚×ÿöBAó‘ZÍ=Q§—”i¯¶ÂE¦A³£oÛg N ¾õKešÎÔûý EÁ󑿉ñã¹mÛ’ÑT•hšÊ0DÓ4Bô¼ DQ/®ûÛßvÞpÉ‹/Šûý¢(Š¢Èó<Ïó”Ù5MCZG ò«Éx1<Ò¨÷”i;²^EòkûUïL¿{¡Ýx ¥§±}óZ§ÊM¦¹Yü„Bâ§&¿úªFh°À“:Ý&©àm€ëì×]á§ŸþøöÛä3Ï”eY’$Q9ŽfDᘬ٭D¹#ïŠvÞÌEÛñˆBÅO7aH]ƒµ°ýPëöÍkh]Ϧœ2†j,MJ«ªº‘®r’ÖSòç\÷cÓ¦m¹í6ߨ‘TŠI$Aàu)F§udv¢‚oJ­Á"ô{=#M$—¿L¹ÞÅŠ§œ®uò½ª&¤ª”è)ë´ž´âUµöãg\qÅ€~ÑyøpgggOOw(ŠD¢±X,' UUõÍQðÈÏŒI¯qùË„w¢ujGw 1I¦†¡J‹jˆš¯éôOgv¢(Ï>{úE‹/¾tüøñîîîáÇG"‘h4Ji]QÊìn72¢d»5œɨñ¼Œ@T<òsNzºU~i?Ô “¦ÍèuËØóW0,jœ¢(šÆ0ÌIÃ\U©~bò„ÑÁF£ã~ò“èSO}t÷]ÐÝÝ-I’¢¨‚ R‘RÉËÓßÔ8Œ@ JEÒÓuw*±ܩΊ¢&Ë$×µ—“î.½mì^FºnÅ+ !Dlo?û›ÿù*À9N= °sçMÓ>ù" SZE)XÍsZHiÝTÇÈõÆB½¾‹¡­7híÈø/* •Ô‹î=yÃ0JC³iSÒî6<5²¹®ÀÐWEÓØ”éMËËÎS”BöÝxCw8|Ê)c8 Š‚ ,ËJ’¬3¦‘‹xÙ¶Ž©ÐE91ík½Û4R?Ò:¢O`Z¸O7 ±x‘# ïÅ‹îIwƉù§ë01»Nèt›1°A_êé^Œtúª45‹wJ/BWU ~ŽLj•)u’¡ÔÿÁ%—¬ÿÜçöë[`XG:rä¨öö6Axž÷û8+œVc#LáQ*ôžž×BºF4ÖRîÖ5 FÓÍvB4BXª·ôÖ 8¥£ãÖK.‘(ƒ ‚pê©[[[é²RœDŽt(”‡ž. /—äóOSÈ£3 !Ц±o_pÁŸ¾`ÿ-· ‚ I"ȲO–%Qé¡kJ a¤£ 9(>J]OOÒt £i¢( “ZvÄärÓ#S†aÚUuîë¯k¯¿þøã‹¢ Ë2œþù°{÷®ƒÔÕ £•Ãá,ûÜÙÙãƒM“/£±‘´-xïèCèyŒÙ|Ðf/”´ž®Ûéœ ¨éê"šÆ²,UϹ”7ºf`dö!„¼óé VÏ›GÅI’Þyç`°*‚Èóü‰Çi`/BˆÎ¤&Jµõ?ñRÇJ÷îû:5âeD_I.H奆’ÖÓuuÂ0ÊС|g§þ8 ^.½vI¹3Ò 3_cãô³Ø1AšQxª§ë¡Õó£ýÇDߢÔõtÝTOšÄoßžŒÎ˜¢u«ä¢3;¤Bz}éé§_ºçZœ µË(è®IoA~G EF‘ôt'#Ý;§'¦N…¥KMTîDèÆòêÇO{õÕ×\M½ÒUUÕ´dÜ®BeDG }ˆbèéM¦eÍt']ÔGÝaŒN/íõÇì?`³oJ‡9í¯Ý~Þì˜Ï‹ÅõˆŒŠ¢0ô¹+f>B •‚>ŽŸîÙ»GŒH å©üsDÓN üÔ´ä?訯·es}㢟?…¢Ñµë1Ð.@”ú>~ºB'„¨ÅpÁPÕ5_øÂ’»î"#|þÀßoº‰k‹›Òz°½}ü’%áp8 ‡Ãáh4‹Å‘ÙD…Á#?÷âtQ\þ d§ËµµúZÿÐðá¯>öضWªUU`°Êߨ°æ[ÿ ½WAoߘI¯ü9ºsg8 ‡Ãáp8ÅãqEQ´p6 ^P;pˆS<—ri¹á¼·™¶fߺp<ò3cÒk\þ a¤BxIÒD‘hÚo~óÃÿùé”1@  VWW×ÔÔÔÔÔ»l~ר±º8cdv}ûÂûÖÓÝÝÓ ‡Ã‘HD×Ö‘ÐïLäⓞ£»ºÓî%žÔ©B~/›òÈÏ9ù§»duJ0mev†ec3gî»ý¶Ø AP(å‰!„ãXŽãhº¢Íÿò¬Ï~N³ót¤Ummãž{nϵ×R/uŽã¨_#}Fê1Ûlî‘â½”ûîNÕô®d§¿µ†zOÛ—©AZÓcï¦îŒûzüšÖ¦\²{›EòO·õel?Ôº}óÚ´´Nít†aº—,öE¢L$ <ÏÓ¸ç”ÐY–€„Ï·ï¶øÉ=4¨ª) Ñ´IK_Ù:kV¨¹™.;â8ŽMy«çâckéãQÁ¶¹ ‹À¦ i 5»6Ö±Éû-eUÓ`¼÷n= ­å¶ßÈörâ~èŠïÅ4Á´Zg†eYžç$–e‰µ¬Y–å8ŽFÓ4UU †^xÑ·u«“µÞÿ³×}„ãx –e³[Pjtr·*òzkÆW¢ìàÄ/¹è!ùŠÐkµÓÝ%‹¬U”ìzÏñÚi{äÓºâÅ{ÉšÖõÕE,Ë ‚@ihhÔ?mk;IJ,eLªÆìûÍÓͳfkšFXTU³DøªjkkznñÞk¿êE±]î¯9ƒV¨©©íìyåz÷]ú?{ì˜üþûòûï|è!à¡Ñc>~ÿ=ÿÀ<Ï4øàÁ‡ ÜÕÕɲ¬ªªFuÅ9%£YÝWêJßöîŽRŸn¥uºA­]«U˲,u‰9 pè/Z”TiR"ŒÀ¦ž—N^º´ êáyb±˜­H¢ú‰ãÇØz×Ý7xí 0óœ–ë®ëø÷ÿ¡Pˆ&WŠÇãôò‘HØ‹ô„@ 25W+¸ww”A>R[f×P·ju›Ò:D^^¼XÞ²E¹5BƒŒFÈš¶¡»›çˆD"º Ü)¡i;ä;o·n]F£m|üñš×^ã:;;i¢¥h4jlÐ%@äe?ÝÓí†!jy(ÔC­`Q’÷>ýtó¬Y ª*Ë0DU€QU•aˆ¦ˆ<·xïµ_€p8¬'Ê0rº,ûŽíoíZ7 «±UmÛ¶`ǃñÁƒh/ú“TêbœŽ@ ò…òÈGj¢o«La,QU•rº ðþƆ‹ _´H7ÏCÈFZòÒ¥ÛgÏ¢òõ¡œ®¦”÷£G:‚gžYã2¦€³®€­/ôú¼ æk_{ï÷¿€žžãPõ\N‘·Œôtïâ åâ!C†sßý  §|`8ÐãÀ®¾†Ù½Ç±¿_ÜhxK™½`&€áûšrÇíÐÝÝ­ë-Ô¡ít‘/”Ÿžž6?œN‘'‚Ájp„a4U†!š¢Ð5¦ Kˆho_7ÿ²)Ÿþ´ÞÈÁƒ(§Oà—/wÍûgÛ•7¼0¢WYݪՓÎ>{&lÚô ÄãqÔ^¥ £ƒ‡í¶û§¶Ú.k/mýI²X«™¯µQÖ6]\ï3Š~c»tÈ»?»›RRŽzzZêò¨ªê‰Ç£Ñh$9ð‡ÿ¾hQÒ>gÖ&)‰÷å¥/?òpÕ„ 4Öc"‘ 0k µÕÑB× ýF€žhLÑú €•½öX1hÐkO=¬® …BÛ¶mÇT¾…zt7ýÛ¡' ¢Ïa Zb `¢¿µ §½Wè˜<¸VE:ÅN±’» }§%ô,*˜‚˱òÒ‘~ÜœÚÌå‚T~zzF õQ%¤ûÀhé:C—×?}ï½o=ù¤$ɱXLE†aã×juÞBZxÐ`­÷ætGGü“MáÓ¦ )и’ à } Ê‹ëóB@î®\:õn[-ߌ‚ º7›E´E§kd¾PzºQÑiý¤ 0 QU#›ÓÖ)SõT¥‰D‚ã¸ÁO>åØÁŒ”=)B‡­ëh±Ùïô¿ýmMóxQ%IŒÅb0ZÊ<×–öƒ/_=7~\ã µÈHI$|/¿ìÖÁ vÄ=Ã@è+mv:eÅŠáÿŒHR4Åb’”ÌŸ‡Â:¢ô­r/t“]¤ª,Æ“‘¥œöªà½ÍŒnM2ÙórpŠ¡§7M˜ÖWÒ°óì³ò¶mZÊT€õs欸â I–Sa“ËŽ¢ÇŽ»5½`¥ðƒÌMŽ»FŽ‹ùýÑhLO´„9Qýö #~´ea—xâ¶r¼÷ ˆ9^‡ !­¤'뾟^LFEQ÷þö·Í³f¦@xÀ€Woø~´¡1À2¢(ú|>I’EQeÙžŽÃ^»™pco5fÙE½×ÍÑÑ£ñº¡‰Dœrºªž Õ‹¦:¢UÛx‡.om·­mÚŠ&‹5­+ˆw= ás¹ÕÏ1)½ûÀ@nA%½ó³=§ç=éhqMÓè*¤CwßUwÇ­óç¯ûêW¤DBÔ4Êø²ìóùdŸÏ'Š"Çqñî¯}Ühx^JU—®7GÝݺpo Ò‹@” êé"zÖ˜i:Ó\üsÏS‘õ×ÌËAÎÅóOï[Z×UUà n˜:56lXu8B#j1 #¼,Ë’$ɲÌó §îµJâº_£sº4x¤NèzTvd"/ÌXÊmÅóO/†ã¸¤Ä1yr$áy^ÏÇó¼(Š4Ö.Çq„±:èµ*7¼opN¿ÂY~‘$ÛìH€3Dn(†ž¾}óZ§Êi3‘æW¡´NߦvE§{Ž£|ÎÑlGººÌúh¸ àùô™`g(Ф§Ûú2¶jõ’`:´®Ë)Gê4Wµ”QUUßÀö Í08·záÕþ-[2mª­¡añ÷¾+UeY @|>Ÿ$IÔÝÆÉNG ˆŒe‰²ËGjz.JY¾–;%Yº4 µµ»Ÿ_ò§)Sïˤ‘w?ûÙ5^è“$Y–ü~UUåt9Ú—eY´Óå…üÆDäe¦§›¸Û£“\C`ôp¢(išv?À¼üßÈ'ŸñÒK™3ç½K.¹þ‡?üÃå—K’(˲Ïçü”ÓEQ¢„N—­"§#Êù#ˆÈ/*6ivþ¦½DQÒ# ˆbò[¬¯o»ù‡£_zéï<ÜøÁÖ­¯Ù»—ïêŠGŒÿå?ÿy;€úæ›ð曋?'Š¢$I²ì›3gÎ'Ÿl”e™¶F9ÝÄæFÈåÔû¬Ÿzq€1mÓH¼==Ý4Ú×Áƒ¢Ñ(˲­ù8‰´Mž²/‰Åb‰D"‘HÐHèw]ue*(]§*Ò'¢[¶l–$IÅ#G:t#¢÷˜Ñð÷ÞÑÝu¶|ë¦5C‡5vwvâ!ª”Ÿž^dèQbô·”¯il^IŠÆbr,§œ®ijjªÎé¼ b <Ÿ\;ª:ª.ˆAÓÔ½»·ïÙµÕ½ZÇáCû[öÕ7ŽÀ#Vèþéù¢uc¸ªW’¤x¼¾Ÿ^¾».¬ÓuIVõ\ÿÔ$¨‚öø©ÌøÖ yä¸Ü›*h(›]lŠ?½"™R!×Ýë •Á攆ôm“¥ikƒ»,P2Uv Ån$Vwtªi•©/Ûo¤/‘ujÐ:ø´w!.º{G¶ʶ£âù§W<¹#ÏæFîÖE£Zb¢H÷fM»÷ÍBбÍÚaÛ‘©æ±#í¶ßÈ)¶°uwë1ñøÅÝÛôÒ»µýbèé.©éŠ–`@ä"¸àîh.ÊCv©”ÜÇéØ{ûî*“÷Ašh=Óïn[X$ÿt[_ÆöC­EK0@ òÂì.´U H^V6÷;wS7í^ýš9~÷âÅ{±M0´Ž@”³›Ø0-Ó™b7:…uÔ´ŠÚ^˜ÔdöÚ6î®{Ø~#÷B°ß3§Qç±mÓKïÞùÙžÓó«§gAë¦p»¹;¿Ûnt‰Õî½GL5‡èüžQMOP³S3²î(£Øê9ù2ɳg¦ü\|¤“¦ÍÈššóK”H»DFÚTVÌôJúF}ïÅXâ=x€wË×6Ö®)”nÚÄͦFè[=".ÝÑø/´Ðñõ!ú&~zŽñ¼¼dª3Ò´-w›¯ÖÆÔ´Ž@ вŒŸnK©ë ÓÒº^v tŽ@ ÅGùÅOGÞD 'THüt/j @T<Ê/©­Ø‚<Ž@” J<2¢÷oQ´¯6h%ÝpYbZÞùH=>Štr?ÇS((œVá—Ý·(‘‹‡1S8š²Ôӽб­g¡©Ð¶/× £‹ Qñ†¶-ƒØ†6tâš´‘Á9´¡—¥¤.l.¥ é¨ÒËQ5æ~gS–zºG2urwq/4^lë89ºxi(GCÛô Ρ ­5Á[dDpmèQ÷p2`sì(m¨H—°Ž^ŒqS _ÖýÖ§üôô"h5"GfI«]x m˜E\F§û‰¼wÔW{²òÖÓ³0ðÑCÈ/³zw± ìܼwTâ(’žî}éhÏF"#cÜôjGж¦ÉœÌ"´¡÷¸Œ¶tœcG¶¡"${ÛN×ë7ò¢§{é¨zzÓ„iȤD…ã.A³k9ïqsïÈcdD/AóòM½tÔÇñÓ‘G`>R¨Ï?@ …FñüÓQhCOß¾y­SeÌDŠ@ yD‘ôt[_ÆöC­˜`@ òˆ>ÖÓ³H0@ Ч8*¦ŒNŸÚúb»¸œ»8nÛÖwså%Øóz:Ó‹à9Öå/ ÞEœq¼¿%úçR!£òÜ+V"ƒA r„¾ÊÆôêôÖ}_S¹éÚ ¯f2– =^„¼W®Hxäç‚ä#4mF¯[Ïë’ls–0ž ¢_q½wÛÙ¥ï ñ=Æ;4ÚéiC0z *érû’¶M—팲z?È}ïÅXâ=x€‰7Ý9Ôn—¾Õ#åÒ¦ŒoÚ4Õ»ÌJ¦Æ 7¢¯ïÝ'aÓ­Œœ6cÚ ’N·.…Öð Öm÷!9µéå ôMüôâÄó²šó:uZë˜øÚ‰Öm¯+Nn0DŸXå^˜:S6,ò]E¾®9¶ì1èB—ÆrÍGêÅŒõB…ÞMþ‰5¿ƒA *æÀ;-–N¸ÄLÍç¬ïZ²ø¾e?½ôt|b‰è?ª‹m @—·¶ÛÖ6Á¢Ë»GpÌZO7õåXÑú½Ü Ú}œFÑ\×[Ò ì@zç÷²ŒŸîž\´8v4¢_©..£SÍŒšçšÑ{_¹•ôئ•ßsÙ=j*»|¤È°ᨔ”©ž^RÀǘ¢DP~zzîùç\Ü ó;/\Ÿû`Â#?Ûsz êéiëèo|Kl·m÷rƒ—Ns @8R_eèéÔÓ¢’P$=ÝûÒQ:ÈcŒCM¹¬¼·]@ž£¸X·Áy‰¬µÓ±¶.A*Ðú©bèéM¦¡Œ@”#ò¹%—% ¶„î%:ŠmL`èFß0½5~}«3»i¥U¦ßº ñp0)ÈØÊöïÐXh]ÞikêÚöë²¶³£¤½PYíUÊö`:aH¬ó‘"¯äe´j½Ä;t²v½/%õ+1-±æÝ4¶mÍé’ã.¶˜¦ñ&ÃzäÓk,ž:(_Æc¹GÞôn§nü™ŠÚ¶²L¦÷7.Ê{l÷~‹çŸŽ@ ú-ûg-˜¤Õ^r±ßsÿ²y‰´žß‘COwIM‡™HˆW] ]´E÷à‚àˆ1SåÄcD°D[t¼­HíÖÑö2“)ù¦s é¤ó´Á‹¤§Ûú2¶jÅÓD¹ØÝ^ñ|4Yµ¶Î'i;Êhð9æx<ó8€>ÖÓi‚i¤uáB‚•3Úå¾! q¦ïõôLiÝšŒ"/ÎïYÄV´ ¿åÔNFíc G¢Þ å~7ЗùH'M›‘5[94/‡5 BGÚE ¥†¾Œ÷b,É.x€;±s–Ó7;¥u6n˜²<›¨Ÿ–¸„É5¥K5Õ7uá%·*@x"ë>‰Ÿ^„x^¦œ¥¹ìk½/^v·Ö7^BŒÔ´Ž@ r¢¾rŒŸž©úaJaá¥~.Ë4¼;ò8È0~º§‹ND†1öH©¹ mHYwdqÌÖÅ>/¨øé9f³+¨ÙŽ@”;¡{‰AØ'¬š–g³#âRÄQ¾@ Š +ÍËmc ‚‡Ž.¬#d{Ý´»SdÄ´w$^nYÒvd¢òâÜO”±žž»x’…¨‚1ýÊ­\é¬ÜºíÁÑ©Mw’õ2#²vïÈ)\¢mG. Y *2#~.?=Ýä#˜vÛK;.7^¸ÞÅ÷( ½³\Rygdp”èÑN÷Þä#ÐcálörÕÓ3õ-q*×·­îí˜ v·-O»¼(dÁãY›ŸîadÜ#¦µý½ ‹Ð‰¥óô¸\õtIˆbÒº‰sÝ## ïÓFô®§¡L•ÈV¸÷~$]ÂCæú*UO÷¨™ ˆ\lg§Â´d—K“Ü“ØåÒQ.ʉÇdO9Q_qôôì–þAŸA s™)BG2®óˆbèéM¦!½"¼œ˜@ *˜@ *ÅóOG D¡Q<ÿt@ÅÐÓ·o^ëT3‘"e"Dd"éé¶¾Œí‡Z1Á4Q.„^Ìà‚ˆ¬ÑÇzz¦ ¦D_Yè¥?a‚G=éEðëò—… ï"ÎØß\ˆ’þWØ»˜¬7Z÷ÊK`HLÍè¤ .ˆ‡¨¤à‘Ÿ ’tÒ´½n¼­KrJìY À 3ˆ~K÷ˆRa¡>Œ÷b,)DðcL]#çê1o­l÷²îv™•h‰K@]S˦ú^Ɔ@dŠ˜‡³UðÆˆ²@ßÄO/B"…£u$ôJEYêéÐZÍ‹Œí¶{SN…N»Û–g1";ZGB¯`TˆžŽ@ <Òzî„N}Òm½=†i4†Ë¯7dxÊÿ³8ÈýBOG y±Ð)ÝXã2ZùTß¶%Yc¬˜ü²p_zvߺ—KðK—ƒìŸí9= =½KÿD19Ëʘ¦B[®q79½X úîVëÞØ²—}mCÀƒ%"¼µkÖ®]à2°L¼;¡Cqôô¦ ÓP F І‘cýþª´Õzzº¶nÚ©Òâdh[¹ÆÊ¿iVkãNôíÄÎÆ .#4Þy˜^]jš*8…¨t*tUœÌö´9S~Æ|¤Dù!‹ÆbÌļ´ƒ@ •ÉéžôtÂnߺqäè&A¬ÖÐ~°õ´3ÎYóÑ{Mã&èå»¶­7ѱ©$ ìÚ¶ ÿ¿½/«¨ö>Uu—^§g&Û„Ì$f#{!bòØ„!aAP¢ <‘§¼OA@>ž¢T>êT¨‘Ev!Â’BBˆ ³‘d¶î¾KÕû£º+5·—éÙgºÏÏ0Þ¾·nÕ½Õu}î¯Nƒ@äôRôtÉ¢–e›9B oZ–ë8Úrk–{¤­- yitëF½Ú°ÇÕYjñ³ m#D9sz)zºÌJjY¶iÙúþXüT'ã½ØYk=÷{A ˆ¾Bçã§ òÚã(X#D¿àt”›¢|8}·¢|8}·¢|8¥p(NG=@ ʇÓQOG ˆòátÔÓ¢|8õôů­è܉³Ž<ªë•ôyýÝ~§•Óuˆþ0h;Æé¨§÷V¯zõЉÓ:wî Ï>yÌñ'w±’>o¢Ÿ Ûï´rºÑ烶t2Þ ¢Cx{ͪAƒ‡Ž?¹Ó5<õÈŸÖÅJú¼‰~‚n¿ÓÊé:DÚãOšW¤@Wã½ :ŠaÃ>Úö~¨¤Ï›(§o¤2»Ñ'(‘ŸQOï%ìüx»JÃÝQ47èz%}ÞD?A·ßiåt¢om‰üŒz:@ ”ÈÏèŸÞK¨5.íätEKKÓÆõow±’>o¢Ÿ Ûï´rºÑ·ƒ¶D~F=½—à:i§³Ý«Rv¥’>o¢ÿ|Ý{§•Óuˆ¾´¨§÷#L;læÛkÞ>¢¡s§¿þÊòy§/€®TÒçMôtûVN×!úvТžÞ¿0iÊaÞYóá¶­8÷¤ygȯ¦+•ôyýÝ~§•Óuˆ>´¥ýÓ{ø£‰@ :„g9Ñ?½Ð’t6m\‡ý€@ :„%yF=½÷,ôM×M™vv(–zëÍ—ó&nŸÓQOï)¶iãºQ£Ç[V;@t‡qô[o¾<þÐIætôOï9#,Ë6QÝB „ë8¥ó3êé½ÂéI'Ëé6öè§£z¿C4V…œŽ@ :„ÖæÆñóÀÐÓÇ:=wç–÷ÖÊCþÒyQ˶Cétªôb%–Ï=·Ð‰ª°[*ébŸØöÁI‹@±¼'våÚç¶{ah¨”³Šû=úÍ"zïu¿Ìâ½lÛòN»ûûíõ÷Âoeå¬~¼ú˜w»”ò’»Õvñ·myRPÖ IDAT§”žÌe„Rè,÷ /ñ”R¬×ÜKÊÕdJ¼Œ¼ÚîV»Æu·PLO\[çô®v ô§ßBºñ›EôC,ÈéýÙ?}ä˜)úG]:W—»ø¸å½µú!¹ØY¨¼¾ÝnCA´§§—òØèe:¤°w¯€ÓÑËØ}=­#Új·ªÞ¼¶ÕÓ-¿=ýÍ"z•¢§ë—­6sª¹r?ê¿yËçÝ.ÔPðËèÔoe7ÎÝAµ·ü¬°Rlížh¨»ˆ¾D ®Q)zº~HmäìB•èú»®†çVXh»PCANOöª¨•×eÀqw§…ã}ý¥O ¹W*WO/R8°_×ßõCyëi·@?ꫬ4? ÍðþÑ×êv%£Üôô"×V\æÖýÖ ÉßjCj)yëÉ»]¨¡ ÚÓÓ‹Ï1öŽ!ß;kŸ0W‘ ;wm=ÔuuGš«(”›ž^äÚò÷¶-ïèâxöÜòr»D=½PC( §wÈ%QAœóÀžB¦¢îäÐiRw„(ÝJÕï.ï¶^gýçtÇ¡vï´—¯­Ó–ÛÿE®¶s¿øfýÛzNŒ!ƒaÇõdäô#ç‰Uu¥Ñ@4ÈØÛD9¡µ¹Ñuœ·Þ|¹xõÝ{öBnN Œ÷ÒŸ!„`·ßÞrñÅ,âœ+óœRJQ‘Ùˆ²æ#íO ]µ2†ùÆ÷#ê[n½5½h¡ D!yœ1Æ£” !Öˆ²D¹ééûËèŽßJ!„?q¢ÁyôßÿÝþéO÷Üþ‹Ô´iYN7 ƒ†aÍB 2¢ €ñÓû§'pÇuÒ«sÎ9§‡ÔÙœ€±}{Ý™g5Ïšµî¦£uuÌ0,Ó´,Ë4MfŒRi¶ëR;ˆp³’ ÆOïO?° ÆO˜úÖ›/~ÄÑætßç­‰D\Úì„Σ¯¿>{î¼ígÎßté¥áê„mY–e[–) vEë¨Æ 2)êéý¦u5êrp'€Ôë{|ØßþþîW2÷äP$l»–eÙ¦eJj§Œ¡ÈŽ@ hBè¤ÒÉõô> õÎqºïûN2u¨äw!¤µ.ÍÍÓn]²÷Þ{¾`¡?f´m[¦™átf0F¥Çdvb`aÒä©Sô¨§÷4l€âN¦…À9÷}ßI;<£­­ ×"É]ìƒvïùÊmK÷LŸºæ[WÚ #B¡%%vË4˜aŒè;2;QŽ@=}`@Α:žçÔ ¿¿EP œ ’%tj ÀàµëŽ¿ôë[NûþçÛ‰*Û¶lÛ6MÓ4 Æ Æ(eŒ ƒ@”?§£žÞÏ9ÝóýÔèÑ¡-[¥N„ BpJ3žêYÙøþ¸Gùüß×|åâÝÇŽD,Ë”ÿ3,³£W QöœŽzz?ætÂB$§M®yîyi§CVR—Ði¬æ–OÿüŽ–?.{é›ßð§Oå!.@ÈÒ„T† „"³#åÊ騧÷[!|Ÿ3BÄØ±8J…ÒT—l.Q´®6¢;wÍûÞ {¦NYý­+HC= „0J1J(£”2†";QžœŽzz¿ætÎ}σáò‹ ùÂyí%Ëï™2\ ^»îį|}óüÏo¹à<;·mKBÙÑ`G ÊÓQOïϜιð}Þ‹ BApÐx\´%bß³ßÿ—ÇF?ùìêK/ÞuâqáHÄÎкœ>eŒ±l(0¤u¢,8õôþÍ霮®Œ‘lüôƒÆx>*×my –NÏúÿw%ÿðÀ‹ßþ&Ÿ>U€„¥€2FTˆGìsbÀs:êéý™Ó…¾ïƒQÏ‚î.mé;¨ÀheÂ{?9å?¿¿kÖÌw®¾’2Ü4 0€j0Ƙ¡‡m‡,Ûз0û˜¹+—?­ïyì/Ò?ž~Ö¹ùï½= *ƒÎéüÀÀ|¤å‡Lf ßs55éÞ/µEºð¢ ûÒË«fL õ";Å*p!¸à>÷‰O¸Hèý€Óín¡­™G§\õÚßõCúÇ";;×n*Ùºþí×ûÏ>ï"¹1yÚ‘¹GK¤ ®wŽÞ-Ýr¿%6Úõ¶PO/ON—.ê-‡Ž mùW©Ž I. Íš B¾ô?¼çÛWù²"!8BçR©Bp$ô>G,ž°¬P+™:cöºÕ+‹ì 4‘[¾‹íæÞ‚¾'÷hsÓR(¨‹¸ÍîºëRЕË.±sòp:êéýžÓ3.êé)“àég3™Z, 9 Mk?Ùwôó/¼½à B€€ôI'ŒQÃ`Tæ-ENøÈKUëV¯,DaÝNèFRPîåúdêŒÙú!ý,u(ð“Pdg`×zzâ`õ1£P"£3êú¿ê†Õýkgî¹J‡™ýÜ ï=GÄc@@®3bc†i²¬šŽ]]á?]¯ç¿ÿU'*é} pwÞÛÉ»ÝîÎn@=½L9=ã¢>äɼ”ª4Óûjkî¹à¼dmíâ_þ÷PÖ•©®6æßñËo¼–JÆlµ–ï3Æ0Ò z×ëÙ¼qíù}µõô!é‡v»¨wÔÓ˓ӥ‹zºªŠø¾`L±öŠ“OüÇ1GJmJ¸ôâÿóÿn|òº¤õê={§?úøú…g1Jeö:©­›†A3 Òz¥z×i½­Ñ>§ ]9髺Ø9¨§8N甑Ú.äœ7¯{ô_k©NÄ}ŸJ%¥¦úå ¿pô½÷– éQ_>ýÌóëgéŒíz®ë¹6·@B@ófDZ¯ ½ë´¾nõÊq¦oÞ¸¶ëWÕ·TH[ï.{¿w:õôιÏ9Â-‹:ÎÖ‹/Xwú©aÇ1Ðùº]_ÆvËw‘Ö;g¶ë$QèÑêä²»nì–"Ž@6ðKìó.vN©œŽzú‘_ç⟷ßj¤#•²,‹Ê§„2ƒŒQÆÀ^·þŠË'ß¾4 º€6k:ë©g×Î:¢yìhJ)Hÿœ Ó4áV`ò>xø Ñû´^ºaÞ´Þ ( Bxæÿ¤¿® >v½[ôû 8,¶Këy‹Ôßu ž^¶œ.„‰C !ŒQË2}ßB)£Ô0 B‰‚ûüÀ‚3šŸ|:¶y )`­À‚»~ýÐMßOÛ–mÛ¾ç ‹„c3Õu«J:É>„ú_D^X¶mu‡ñÞúU:T¤|éØöÁ»Rxéè-ÈÕ¡’‚„ñ»¿ç܅̶8™¡åûœÌ0 Bi'R‰Ý¢¶åó–éé¾Õ;§cœŽzú€‘_¸0 ÷L×ó¸Ï9ç }Xer {¾g[Ö»K~0{ žà‚ ©úkœNe°Çìú‰Ìžó[¦5°ÃTíÙýqGoAÚõiÇ‘cÉó©烿wCüŽ_~ðƒëš&JI;ç‚ @ •3ù´¢Î©Îé0§£ž>°h]銈2‡³²y†å)c{N?µîѿƷlmÓ×éÌ~æ¿\võ”JM‡JÕ’s¡"5æ½ù^ìû¾›v¼wßöWbo¬ ¿·ÙhjtãU-cÇ8|úö#g‘qc©eI]ˆRjŒRÆeŒÉ—h¤u¦2+ïYÚõžçKs U7LŽU{ÇŽ‰_¹|ߌé+¿}U2™r\ßõ|B)ŒIìL·Ê»s:Ì騧,Z‡¶žºT-„‚*§Äu?¹yÎYçÄ3§dÕ˜ê={ÿë-°mËs]ß¶2/4“§TZôù«ä¾ýÃïüuíïïŽÂªW½U½ê­Q¿ùl_pÆ{}!\Sm˜¦†aB *cåÿ@vü¶-³âÂɺ–#)ˆsÂ9?0¼®>3\)^½zí¼/\¼æ³³ÿõŸ²ÃQ2.c”dB1J²qÿËo ©Îé0§£ž>@™]çô6ú –iš†aŒùÁw®ýãÛ•+#]Í—ÎzêÙGÏñÂaÏ÷¸ï¥Ä`L¦'Uœ«jö=7ñëߎùéÏJ¹Î†‡ixè‘Í_¾hÇç Û&ŒR`Œj0¦›ZøºNÚ©¼'ÑuÒ`™¦ŒT‘>äý¨4>¦­xmâ…—l¼lñÞ¹'‡ÂaÛ¶,˶,Ó0 Ã0cDÓbʯsJäg²nõÊ)‡}æ5¯@UUŸ¨2Óg8ç®ë¥ÓéÖÖääK¾Ûü¾Z…p€€ÆAµ¾éû‰êD<Ç¢‘HÄÙ–i²¬ŸMFrÂiiõ…/‡ÖoèèUí3ú·ü \U²C¶mÙ¶­çWBZ€·×¬>¢¡ÒîúõW–Ï;}Jü’ji™<똀[¬šÚ?¼î™ÅÓ ãm™]Ò:3 #³J²Rd9uNñ2MðàÃOµáôH$‚TXf´Î¹ð}ÏuÝtÚiýhÇg~A6”ß:§T~|ýä×/<«*Çc±h4 [–%ãÀl¶<ï@ãØù Í]»;wU­5ÕO-¹Å®­‰„#¡m‡lÛ²t; ¿¸ ï¬ùpÛÖŠºå“æ!7dâ×q&þÛI´5)³¾èѤ!‚ØÔpÈŸæà×V[¦iL.¸S!£§—³«Î)öXµ¶JNG=½ÌÁ9gFVX¯?dÓÕWŽ¿õzâé@‚¤#Ÿ~nÜ#1£]×v=×ö³q`!„7»è‚N:Döí?éškŸXò#B€P뤘Át—˜ ÿÖ¦6sÚa3+uÄi`8uÃÂïoÑ“yiy»€¿}Çwïþã–Sç¾Áùv¢*óÚgš2 #c”2FÊUd/ÔÓ+Bñ¥ªÎŒ–E ZùkdóBxлQDgÞñ«Ç~øÏódJ£ò¡BˆaWþ‡¹ýÃ.^U|×î£úó7¾÷Ó0=Ó–E a”b w„ŒhD€¸ãÆ…¶l•„x›<¸"Ú÷Ç=òø¨ç_\Ù¥Ÿœxœ7T®ÒÂaŒUˆ¿c~NGÿôòU`¸ïû¾à„Ñ5?¹yÎY纣AHÕž½ÿüð»‹2úáù¾eY”’ÔoÕÿíÅR~`Qv{;ÀÈ6ëW¯]þÆ*ç°éžçùÜ÷}ß y–e1à¨ÀT6§s!\×mž<¡êég”®ûk‚H›Í͇ýôg-÷ÞÿÒ7¿aNŸj‡B¶ô ÓæˆFìeÎìèŸ^)ω@€PÂŒ!C7^uÅ„Ûn—s¥º£ÌöYO>³îÈY­cÇ0fPÆÎ¥dÂ5×–Úä"Ð _Ü‹Ó~uÏ?¼@®–"²q“ J¥˜µÂMžl¨—c(ô¤.J9Ôù=ºs×¼ïÞ°kʤׯ¸Ü1¶-˶-Ó4M3«Ä0B¨ZÆ\œŽzzù>'T‘ áœÑüرÍïçz¬+›ý¬;õØnâÜœ Âß°Ñúø_%µ7à¶{^ɧÀìÛGßßâL™ìº®ïyœg(™™Q+šÓ}N„¥ÞìIrÞF{Éò{ÆbèºõŸÿú77Ïÿü– Îãñ¸à¾Ü‹š†”RQöV¨§W–ùc†œ?ÚxÛ8ýlJÐÖ¶O™La”2F¥eõ÷/+©¥ú,¡oh(ÆépÔ /­œp(÷}!Â(5˜a¢ªŽv:cû‡ „Áçºn›Â¿”}ü_óä³ï\¾xïÉ'f†1¥Œ *ƒÅ0¦¢ ”9§£ž^ö ‚ .@Ð!ƒ¤Lî³ÑýÏ%˜Ñ1!\ÏK;ŽaœóÄãO–ÔÌ €€e¯,)¦½À„7V=×ÜLc†A%”>Ç̨¨½ø`Û‚±Œ˜™pF½EgùÀl?M§§ßv{ò÷÷½øíošÓ§†Âáì¥Ì%R¦´Žzze=-Bý¢tÏi§ÿËc±-€ö„¼>çȿ͛k‡BaÆ(¥òIá\$÷í+©¶|K#ôWБܷ߲CÉdʶlËt(eÔ4Rœ^±£Ô÷¹`Œ‡l溠­¥ÈKßAF+ÞûÉ)ÿùýÍœñÖ—‡r=O.S2¹at)IÀÀàtÔÓ+Ä¢”Ȉ¼oßú_sÎ:_¾Õ¶T'þ¸ø’ÖáuqJ-Ë ‡ÃÑh$…Ã!Ë2[v4¶_ûUÙyÑ£>ÔæH‹º>òÆF>l¨Lõ d)ý£÷KžP\˜îð:£y³dé­ëÄX‘”ëž[·jõ¼K¾¶añ%»Ï=Û0 ! P®ë!PO¯H† Ë÷ ÆŒQ#·þçÕŸúÑ­[O›÷Ú9g‡}?$eÔ2­p8‡#‘p(2 #™nO—[”5ÌÏø ^;T\‡O¥(db§Jß3Ë4MËdÈéi …B‘H$ Ù¶mYú½ ©Î9ïØñsÄÅñTùQm* …Ãß™5«©ªÊ|{ƒ•…]™HÙ^n¿ˆÇw  gv=C»2”‚þB¼¸|yZJh霂ä>ñÐC™a†¡ž4 Јc2ä8O®\™×0ÏÍØ¥‹0?«©¹³¶V™&j\IHs¡\c{!  'tiªË )ËÈ/7ä~ÇqŒK. =ø`°–E9KFó¢!¿÷Ë»³f½´xq"‘¨­­­­­­©©‰Çã‘HD™êø5UæÈ”ó=­MM5Çä(-în.Ñ+NOF"w\{­ …ÃáX,Ç«ªªâñx,‹F£ápXšêåj§£ž^¹PÑ¥³‰LÛäÀSVŒä}JéžË.«ÏåtéßòJ[Ê®×æH¥y^Àqù±Çª$5µQდbXÅHS“’H†ÐϘ=ÒÒòÙ¿ýmÕé§›¦iYV( …Báp8Ë`¼Jx)ÿu¤ˆÊ¤u`Œå¦ÁSSUÑ™3ýúzöa[z¾ à¶œz•å¾àœ‚­7ÖÔ¸£GÛ†af!“PczR–™ê”òº:£±Q¢&Kk‹ Ù#™óì³ëçÌaUURÓ“bºcŠÐËrŒá»-"cQ 1jÖtÛw”T£rN/êñòÀ…šÖA”½…èİô¦MË0x[‘Dä!ºÙ¾péR¡ÍùëÓþ´¬£ !§#Jzºä#?ê¨ÖOlÿ%¼Ž °eÊgÂõj …¬l;ät„âtÆŒ\*Ï;Gª›êؽû°‡¸u|Ó•ûhÉÔ½†aì½ûnwäÈvŒôeÙ8}ÿ A]¼X©œRè´´¬¤¨½à¨“ù˜1*ÏšêŠÐw‘ÿÜ,eöè£|Û6ÇqÇq]×ó<Éﺯr:¢¢MuÃ0‘ÈöÇw‡-XôC€s²ÿòi/͉Ä}×\‰FÃáp$‰D"ápXÙéh¤#ôQ×2jTFuQSúB2ä¿¿ÿý¯¹fo}}^S]mœ|Ë-ÉÖÖT*•J¥Òé´ëºÒf/cS9Qª©.9Ý4ÍÈàÁï?÷\ë¤I¨jg}ýo¯¿>T[‰Db±˜t/“«s¤Øí8ê!|Ð ð¼ƒ{9_³`ÁŸo¾™ÅžùÎwtM&—ßã;wŽÿÃ’Édkkk2™L§ÓŽãHƒ½\™9Ñ;1fš¦mÛñÚÚí=ôÑWt¨’óç?ôÝïF««£Ñh< é2,ÌPLGF]¸¦FÚéDˆäˆOÜu׿ó΋ÅãÒë<Úаæ߀œ»ºoÌä‡JoÞ,9=™LJ¦Œ\s„(ju’ã8ét:™L¶´´ìÛ±£~éÒúeíDXs +N;ÍN$lÛ–2z4Uvºî8ŒœŽÈZäÜ÷}'Ž JÒé_ÿú¦sÏ•ú‰BÎî†BþÕ¯Æ6m‚l6ê\4 öÂÒ¥Õ55ÕÕÕUUUjåQYŽ7ätDÇ3ù¤¹®+i]2{Kccjݺú•+kV¯NlÝj57§£ÑO>ž8qÔ)ΨQ†eI7aÉéRF—VÀHǵ£}°¹®kœqÆG×_ï ÒÚÚšN§=Ï#„Y€·k×̹sE¾Å¥jcýÙgoûò—«««‰„\«,å¾ò{5DNGtÌTWֺ뺎ãÈÙ§d2™ÊBꕞçI½R ñ2Ö£mÛrFTþ•S£ú£…F:B/ô{{Q:¡çr:b`¼+f—ä®þÊC*\Œ¢uõW©‹lŽ(þR(™]yªÐ¡Ò—óöÉd’ÝsÏÐë®Ëå4Ý ¦s ŒÄ4:§Ó|èMfGNGtƒÁÞÿ:¢ ÆX¡øþjÒ¾¥¹yÈç?o¿û®4òœ®+05µµ‰D¢DF7_ÜTªeÍšªgž1–/gëÖÑýûyuµ3iRjΜÝÇkM™bXVßš/Èéˆn{êôÇÚfØP¶U_½"ôƒ¶Êµ.UËýj*µqëÖ±³gg΢Th~ëÊZ(0Ñh´Ðò]flÙ»7zóÍV{aìö^tÑÇW\4¨¯dFvà 7à AtÉ.ÈB±¶|6ô´2x¨· ::ÀòŽ45Š–‰DZjjb/¼Ù+ ÙùR¹1týúõ³gC"¡Q=v¿þkÁ9÷\—üä'±ÓNc¯¿ÞîÕFÖ¬úë_'…Ø7yrà…rfPÑNG «ªÐÉýƒè¡7E©À¤R)©À„6lPQ×Ù¨‹+0Šv%¡§šš"'žHßz«£WÕÊHa½“c9@ ‚´.ƒmÉpçÉd²¥¥eߎõK—Ö/k'¿ÑšNXqÚiv"aÛ¶âte§ë«œzH{ANG ˆ dèDe­Ë´s----©uëêW®¬Y½:±u«ÕÜœŽF?ihøxâÄ S¦8£F–%W«JN—2ºdsEèjÍQO\9r:@ä1Õ•µîº®ã8©T*•J%“ÉT2Ên¡„x¹NÕ¶mÅW¹0*Bï ÕEcx!D޵›Ó«>ª‰Si€;ŽSœÓ%­«@¾uF=DèÈéÑ­ÂÅÈÕC*Ìq!OQe̶Pa^z(nW›ËFí@ Š@Š0ÒFBR¹ž'ZÚé:õ«¿ŠÍ{hR9@ :LëJaÏ…bÑ@0™@T™^ tätè0³ë/÷+NM®É›þ9@ ú³+~× ]§õ@¸ÇÞÄÿ š’EÌ©•IEND®B`‚htmldoc-1.8.27/doc/c-relnotes.html0100664000212600000240000015334710463704112015443 0ustar mikeuser

Appendix C - Release Notes

This appendix provides the release notes for each version of HTMLDOC.

Changes in HTMLDOC v1.8.27

    Bug Fixes

  • Fixed a crash bug that appeared when more than 10 blank pages were present in a document (PR #6223)
  • Color changes were not reflected in PRE text (STR #129)
  • Remote URLs did not always work on older operating systems (PR #6179)
  • Image filenames using % escapes were not decoded properly.
  • Rows using BGCOLOR that spanned across multiple pages did not render properly (PR #6149)
  • Rows no longer start on a new page due to a cell with both HEIGHT and ROWSPAN specified (PR #6086)
  • CMYK JPEG images caused HTMLDOC to crash (PR #6106)
  • Table cell width calculations didn't always account for the proper minimum width (STR #121)
  • Images were not copied when generating indexed HTML output to a directory (STR #117)
  • Changing the bottom margin resulted in text that was formatted below the bottom margin.
  • The Monospace-Oblique font was not embedded properly in PDF files.

Changes in HTMLDOC v1.8.26

    Bug Fixes

  • Outline and keyword strings in PDF files are now stored as Unicode (STR #113)
  • The Flate compression code could get in an infinite loop if it ran out of memory (STR #101)
  • Book files saved from the GUI did not handle filenames with spaces (STR #105)
  • Fixed and re-enabled the ASCII85Device filter support in PostScript Level 2/3 output (STR #116)
  • Character entities in the first word of a file were not rendered properly (STR #111)
  • Fixed-size table columns were incorrectly resized when a table width was also specified and there was extra space to distribute (PR #6062)
  • Text could "walk" up or down when in-line images were used (PR #6034)
  • Row backgrounds incorrectly replaced cell backgrounds when the first cell in a row used ROWSPAN (PR #6033, PR #6036)
  • HTMLDOC did not correctly parse FONT FACE attributes (PR #6006)
  • Images in Level 2/3 PostScript output did not work on some printers (PR #6000)
  • The GUI did not use the first page header (PR #5978)

Changes in HTMLDOC v1.8.25

    New Features

  • Added "--overflow" and "--no-overflow" command-line options to show or hide the content-too-large errors; the default is "--no-overflow".
  • Added "--header1" command-line option and "HEADER1" page comments to set the page header for the first page of each chapter.
  • Added "timing" and "remotebytes" debug data generation.
  • Added DejaVu font collection to better support Cyrillic and Greek text; the new fonts are available under the generic names "monospace", "sans", and "serif".
  • Added "--referer" command-line option and corresponding CGI-mode support to pass Referer: information in HTTP requests (STR #91)
  • Changes

  • On Windows, HTMLDOC now logs CGI mode errors to a file called "htmldoc.log" in the Windows temporary directory.
  • HTMLDOC no longer uses Base-85 encoding for image data when producing Level 2 and 3 PostScript output. It appears that many printers and PostScript interpreters cannot properly decode this data when the original image data is not a multiple of 8 bits.
  • HTMLDOC now renders STRONG elements in boldface instead of bold-italic to match the W3C recommendations.
  • HTMLDOC now automatically inserts a TR element before a TD or TH element as needed to improve web site compatibility; this also triggers a HTML error in --strict mode.
  • Bug Fixes

  • "$HFIMAGEn" didn't work in a header/footer string.
  • HTMLDOC could crash when rendering a table.
  • Book files were not used in CGI mode (STR #69)
  • Cookies were not sent in HTTP requests (STR #71)
  • Table cells were not aligned properly when the ROWSPAN attribute was set to 1 (STR #73)
  • HTMLDOC crashed when rendering unresolved hyperlinks in aligned images (STR #62)
  • Documented the HTMLDOC_NOCGI environment variable (STR #63)
  • HTMLDOC sometimes crashed when rendering tables with background colors (STR #65)
  • HTMLDOC would crash when writing encrypted strings longer than 1024 bytes (STR #66)
  • HTMLDOC didn't set the data directory when running in CGI mode on Windows.
  • HTMLDOC could crash when loading the Symbol.afm file (STR #93)
  • HTMLDOC did not always honor HEIGHT attributes in table rows.
  • Tables with a mix of colspan and rowspan sometimes caused cells to be moved vertically outside the cell.

Changes in HTMLDOC v1.8.24

    New Features

  • HTMLDOC now provides limited cookie support via the "--cookies" command-line option and via the cookies passed by a browser in CGI mode.
  • HTMLDOC now features a CGI mode which provides PDF conversion functionality for web servers.
  • HTMLDOC now generates a document outline for each input file or URL in webpage mode; the outline shows the title for the file and links to the first page containing that file.
  • HTMLDOC now offers an "htmlsep" output type which generates HTML output with a separate file for each heading in the table of contents.
  • HTMLDOC now includes LINK elements in generated HTML so that intelligent browsers like Mozilla can show next/prev/contents/top buttons.
  • HTMLDOC now supports the BORDERCOLOR attribute for tables, a MSIE extension.
  • The "strict HTML" mode now reports unresolved local links.
  • Added support for HP LaserJet 5000 and Xerox DocuPrint 2000/100 printer commands.
  • Added multiple header/footer image support.
  • Links to external URLs are now resolved so that the output file can be moved without affecting them.
  • Changes

  • The command-line now allows --fontsize values from 4 to 26 to match the GUI.
  • Now use a 0.001 point tolerance when checking for content that overflows the page/cell.
  • HTMLDOC no longer enables interpolation of 2-color images.
  • The default vertical alignment of images is "BOTTOM" to match the HTML specification.
  • Paragraph spacing is only applied to the first table after a paragraph.
  • The tabloid media size was 10 points too short in length.
  • The table formatter now subtracts the outside border and padding widths for percentage-based widths. This helps to eliminate "truncation or overlapping" errors.
  • Dropped support for FLTK 1.0.x when building the GUI.
  • The default vertical alignment is now "bottom" inside paragraphs to correctly align different sized text and images to the baseline.
  • Indexed images are now written as PDF image objects when encryption is enabled; this works around a serious bug in Acrobat 6 which tries to decrypt the colormap of in-line images twice, causing some very strange colors!
  • Table captions can now be bottom aligned.
  • Blocks now break at the bottom of a page if the current line height + standard line height goes below the bottom of the page; this prevents images with captions from getting erroneously moved to the top of the next page.
  • Character entities are now supported in HTML attributes and unknown or invalid character entities are left as plain text.
  • Changed handling of NOWRAP for some tables.
  • The --permissions option now supports multiple permission keywords in a single invocation.
  • Dropped support for MacOS 9 and earlier.
  • HTMLDOC now breaks between images that are too large to fit on a single line, to match the behavior of Mozilla/Netscape (STR #7).
  • HTMLDOC now handles XHTML input more cleanly.
  • HTMLDOC no longer specifies an interpolation preference for images in PostScript or PDF output (STR #8)
  • The DT element no longer applies an italic style (PR #5178)
  • HTMLDOC now ignores content inside a STYLE element (PR #5183)
  • Bug Fixes

  • Switching between landscape and portrait orientations would cause margin creepage.
  • Images did not default to align=bottom, and the align=bottom line spacing calculation was incorrect.
  • Whitespace before a link was underlined.
  • Fixed a table column sizing bug.
  • HTMLDOC didn't read back the HTTP response properly in all situations.
  • Fixed some more PNG transparency cases.
  • The PageBoundingBox comments in PostScript output did not account for the back page when duplexing was enabled.
  • HTMLDOC generated an incorrect image mask for some images.
  • The first page of each chapter did not use the custom page number if it was placed inside the heading.
  • HTMLDOC did not reset the rendering cache before each page when producing N-up output; this caused font errors in some cases that prevented the document from printing or displaying properly.
  • Eliminated a common cause of "table too wide" formatting errors,
  • Fixed a bug when applying a table background color to a cell without a border that cross a page boundary.
  • Fixed some calls to strcpy with overlapping arguments.
  • The names object was never set when the name objects were written.
  • Character entities were not decoded/encoded inside HTML comments.
  • The current heading was not always correctly substituted when used in the page header or footer.
  • When converting web pages from the GUI, the table-of-contents page number preferences were incorrectly used.
  • PDF page effects/transitions were not put in the right part of the page dictionary, causing them not to be used by the PDF reader application.
  • The _HD_OMIT_TOC attribute was not being honored for HTML output.
  • HTMLDOC now handles "open" messages from the MacOS X Finder (STR #3)
  • The GUI did not load or save the "strict HTML" setting (STR #6)
  • The HTML version of the title page did not set the ALT attribute for the title image (STR #10)
  • The HTML version of the table of contents did not correctly nest the lists in the parent items (STR #10)
  • Borders around left and right-aligned images were not drawn properly (PR #5112)
  • Grayscale PDF output was not truly grayscale (STR #32)
  • Fixed a table-of-contents bug introduced in 1.8.24rc1 which caused the PDF document outline and actual TOC pages were not rendered properly (STR #37)
  • Links were not rendered due to a bug that was introduced in 1.8.24rc2 (STR #41)

Changes in HTMLDOC v1.8.23

    New Features

  • HTMLDOC now supports a full alpha channel in PNG files.
  • HTMLDOC now reports an error when a table, image, or section of text overflows into an adjacent table cell or off the right edge of the page.

    Changes

  • The NEW SHEET page comment now breaks on N-up boundaries when N is greater than 1.

    Bug Fixes

  • HTMLDOC tried to format tables with no rows or columns. While the HTML in technically not in error, it is not exactly something you'd expect someone to do.
  • HTMLDOC didn't report an error when it could not find the specified title page file.
  • HTMLDOC could crash if it was unable to create its output files.
  • HTMLDOC could crash when writing HTML output containing unknown HTML elements.
  • HTMLDOC could crash when writing HTML output if the output document had no title.
  • The htmlGetText() function used a fixed-size (10k) buffer which allowed for a buffer overflow. The new code (from HTMLDOC 1.9) allocates its buffer instead.
  • The header/footer text was not centered properly if the header/footer font size was different than the default body font size.
  • The GUI interface incorrectly localized URLs when doing a "save as" operation.
  • The PNG background color was not correct for PNG files using <= 8 bits per pixel.

Changes in HTMLDOC v1.8.22

    New Features

  • Now support many Windows code pages in addition to ISO charsets.

    Bug Fixes

  • HTMLDOC could crash when checking if a URL is already cached.
  • HTMLDOC didn't adjust the top margin when changing the page header if the comment didn't appear at the top of a page.
  • HTMLDOC didn't initialize the right number of TOC headings.
  • When using a logo image in the header, the header was placed too low on the page.

Changes in HTMLDOC v1.8.21

    New Features

  • HTMLDOC now supports heading levels 1 to 15.
  • HTMLDOC now allows the author to omit headings from the TOC using the _HD_OMIT_TOC attribute.
  • HTMLDOC now supports remote book files when running from the command-line.
  • HTMLDOC now supports hexadecimal character constants (&#xFF)

    Changes

  • HTMLDOC now calculates the resolution of the body image using the printable width instead of the page width.
  • HTMLDOC should now compile out-of-the-box using the Cygwin tools.
  • HTMLDOC no longer inserts whitespace between text inside DIV elements.
  • HTMLDOC now supports quoted usernames and passwords in URLs.
  • HTMLDOC now defaults unknown colors to white for background colors and black for foreground colors. This should make documents that use non-standard color names still appear readable.

    Bug Fixes

  • "make install" didn't work in the fonts directory.
  • "&euro;" didn't work, while "&#128;" did: the character name table was not sorted properly...
  • Links didn't always point to the right page in PDF output.
  • XRX comment output could crash HTMLDOC.
  • Fixed-width columns in tables could be resized by HTMLDOC.
  • When writing PostScript commands, some printers reset their duplexing state when a new setpagedevice command is received; we now cache the current duplex state and change it only as needed.
  • The MEDIA SIZE comment didn't adjust the printable size for the current landscape setting.
  • HTMLDOC placed the header one line too high.
  • When continuing a chapter onto the next page, H3 and higher headings would be indented the wrong amount.

Changes in HTMLDOC v1.8.20

    New Features

  • New --nup and NUMBER-UP options for PostScript and PDF output.
  • HTMLDOC now logs HTML errors.
  • HTMLDOC now supports the A3, B, Legal, and Tabloid size names.
  • HTMLDOC now supports embedding of the base Type1 fonts in PostScript and PDF output.

    Changes

  • The HTML parser now allows BODY to auto-close HEAD and visa-versa.

    Bug Fixes

  • HTMLDOC wouldn't compile using GCC under HP-UX due to a badly "fixed" system header file (vmtypes.h).
  • Generating a book without a table-of-contents would produce a bad PDF file.
  • The Xerox XRX comments used the wrong units for the media size, points instead of millimeters.
  • IMG elements with links that use the ALIGN attribute didn't get the links.
  • Header and footer comments would interfere with the top and bottom margin settings.
  • Fixed a bug in the htmlReadFile() function which caused user-provided title pages not to be displayed in PS or PDF output.
  • The table-of-contents would inherit the last media settings in the document, but use the initial settings when formatting.

Changes in HTMLDOC v1.8.19

    New Features

  • Now support the "subject" meta variable.
  • Changes

  • Updated the HTML parser to use HTML 4.0 rules for embedding elements inside a LI.
  • Now check for a TYPE attribute on EMBED elements, so that embedded Flash files do not get treated as HTML.
  • Now put the COPYRIGHT meta data in the Author field in a PDF file along with the AUTHOR meta data (if any).
  • No longer embed the prolog.ps command header when PostScript commands are not being embedded in the output.
  • HTMLDOC now properly ignores the HTML 4.0 COL element.
  • Bug Fixes

  • Squeezed tables were not centered or right-aligned properly.
  • Cells didn't align properly if they were the first things on the page, or if there were several intervening empty cells.
  • The preferred cell width handling didn't account for the minimum cell width, which could cause some tables to become too large.
  • Remote URLs didn't always resolve properly (like the images from the Google web page...)
  • The font width loading code didn't force the non-breaking space to have the same width as a regular space.
  • PRE text didn't adjust the line height for the tallest fragment in the line.
  • HTMLDOC tried to seek backwards when reading HTML from the standard input.
  • The media margin comments did not work properly when the current media orientation was landscape.

Changes in HTMLDOC v1.8.18

    New Features

  • Added support for remote HTML title pages.
  • Changes

  • Now accept all JPEG files, even if they don't start with an APPn marker.
  • Now only start a new page for a chapter/filter if we aren't already at the top of a page.
  • Bug Fixes

  • ROWSPAN handling in tables has been updated to match the MSIE behavior, where the current rowspan is reduced by the minimum rowspan in the table; that is, if you use "ROWSPAN=17" for all cells in a row, HTMLDOC now treats this as if you did not use ROWSPAN at all. It is unclear if this is what the W3C intends.
  • The "--webpage" option didn't force toc levels to 0, which caused a bad page object reference to be inserted in the PDF output file.
  • Background colors in nested tables didn't always get drawn in the right order, resulting in the wrong colors showing through.
  • The HEADER page comment didn't set the correct top position in landscape orientation.

Changes in HTMLDOC v1.8.17

    New Features

  • Improved table-of-contents generation, with chapter headings at the top of new TOC pages and page numbers based on the header/footer string.
  • Added new "--no-localfiles" option to disable access to local files for added security in web services.
  • Long lines in book files can not be broken up using a trailing backslash.
  • Added a modern "skin" to the GUI interface.
  • Changes

  • Made some changes in how COLSPAN and ROWSPAN are handled to better match how Netscape and MSIE format things.
  • HTMLDOC now handles .book files with CR, LF, or CR LF line endings.
  • Changed the TOC numbering to use 32-bit integers instead of 8-bit integers...
  • Now handle local links with quoted (%HH) characters.
  • The command-line interface no longer sets PDF output mode when using --continuous or --webpage.
  • HTMLDOC now opens HTML output files in binary mode to prevent extra CR's under Windows, and strips incoming CR's from PRE text.
  • Now support inserting the current chapter and heading in the table-of-contents headers and footers.
  • Bug Fixes

  • The table cell border and background were offset by the cellpadding when they should only be offset by the cellspacing.
  • The buffer used for periods that lead up to the page number in the table-of-contents was not large enough for a legal-size document in landscape format.
  • If a book only contained chapter headings, the PDF bookmarks would be missing the last chapter heading.
  • Table cells that ended with a break would render incorrectly.
  • Fixed the table pre-format sizing code to properly account for borders, padding, etc.
  • Fixed the table squeezing code to honor minimum widths and properly resize the remaining space.
  • The MEDIA SIZE page comment did not reset the printable width and length of the page.
  • Tables that used COLSPAN did not honor WIDTH values in non-spanned cells.

Changes in HTMLDOC v1.8.16

    Changes

  • Now break before and after DIV groups to match most browsers (the HTML spec is ambivalent about it...)
  • Bug Fixes

  • HR elements didn't render properly.
  • Background images didn't render properly and could lock up HTMLDOC.
  • The "HALF PAGE" comment would lock up HTMLDOC - HTMLDOC would keep adding pages until it ran out of memory.
  • SUP and SUB used a fixed (reduced) size instead of using a smaller size from the current one.
  • Empty cells could cause unnecessary vertical alignment on the same row.

Changes in HTMLDOC v1.8.15

    New Features

  • Now support media source, type, and color attributes in PS output.
  • Now support per-page size, margins, headers, footers, orientation, and duplexing.
  • Now support plain text for headers and footers, with $ variables to include page numbers and so forth.
  • New device control prolog file for printer-specific option commands.
  • Now support a new continuous web page mode that doesn't automatically insert a page break with each HTML file or URL (--continuous).
  • Now draw border around inline images as needed.
  • Now support MacOS X (only command-line at present).
  • Now support the "page-break-before", "text-align", "vertical-align" style attributes, but only for style information in an element's STYLE attribute.
  • Changes

  • Now load images into memory only as needed, and unload them when no longer needed. This provides a dramatic reduction in memory usage with files that contain a lot of in-line images.
  • Now use the long names for the Flate and DCT filters in all non-inline PDF streams. This avoids a stupid bug in Acrobat Reader when printing to PostScript printers.
  • HTMLDOC now strips any trailing GET query information when saving the start of files (target) in a document.
  • Unqualified URLs (no leading scheme name, e.g. http:) now default to the HTTP port (80) instead of the IPP port (631).
  • Optimized the image writing code to do more efficient color searching. This provides a significant speed improvement when including images.
  • Now hide all text inside SCRIPT, SELECT, and TEXTAREA elements.
  • OS/2 port changes from Alexander Mai.
  • Bug Fixes

  • If a document started with a heading greater than H1, HTMLDOC would crash.
  • Full justification would incorrectly be applied to text ending with a break.
  • Images using ALIGN="MIDDLE" were not centered properly on the baseline.
  • Table cells that used both ROWSPAN and COLSPAN did not format properly (the colspan was lost after the first row.)
  • Tables that used cells that exclusively used COLSPAN did not format properly.
  • When writing HTML output, image references would incorrectly be mapped using the current path.
  • Images with a width or height of 0 should not be written to PS or PDF output.
  • The CreationDate comment in PostScript output contained a bad timezone offset (+-0500, for example, instead of -0500).
  • The PHP portal example now verifies that the URL passed to it contains no illegal characters.

Changes in HTMLDOC v1.8.14

    New Features

  • Added support for 128-bit encryption.
  • Added support for GET form request data in the PHP and Java "portal" examples.
  • Changes

  • Most output generation limits have been removed; HTMLDOC now dynamically allocates memory as needed for pages, images, headings, and links. This has the happy side-effect of reducing the initial memory footprint significantly.
  • Now call setlocale() when it is available to localize the date and time in the output.
  • The table parsing code now checks to see that a ROWSPAN attribute fits in the table; e.g., a ROWSPAN of 10 for a table that has only 6 rows remaining needs to be reduced to 6...
  • Bug Fixes

  • Tables with a lot of COLSPANs could cause a divide- by-zero error or bad pages (NAN instead of a number.)
  • Table cells with a single render element would not be vertically aligned.
  • The --quiet option would enable progress messages on the command-line.
  • Table cell widths could be computed incorrectly, causing unnecessary wrapping.

Changes in HTMLDOC v1.8.13

    New Features

  • Added support for secure (https) URLs via the OpenSSL library.
  • Added support for Acrobat 5.0 (PDF 1.4).
  • Added support for transparency in PostScript and PDF 1.1 and 1.2 output.
  • Added a --no-jpeg option (same as --jpeg=0)
  • Added support for the CSS2 page-break-before and page-break-after properties.
  • Added a PHP example.
  • Changes

  • External file references to non-PDF files now use the "Launch" action so they can be opened/executed/saved as allowed by the OS and PDF viewer.
  • Changed the indexed/JPEG'd transition point to 256 colors when using Flate compression. This makes PDF files much smaller in general.
  • Changed the in-line image size limit to 64k.
  • Now allow "<" followed by whitespace, "=", or "<". This violates the HTML specification, but we're sick of people complaining about it.
  • Preferences are now stored in a user-specific file under Windows, just like UNIX. This provides user-specific preferences and allows preferences to be kept when upgrading to new versions of HTMLDOC.
  • The book loading code now allows for blank lines, even though these are not a part of the format. (added to support some scripted apps that include extra newlines...)
  • Changed the leading space handling of blocks to more closely match the standard browser behavior.
  • Bug Fixes

  • The table formatting code adding the border width to the cell width, while Netscape and MSIE don't. This caused some interesting formatting glitches...
  • The table formatting code didn't account for the preferred width of colspan'd cells.
  • The table formatting code tried to enforce the minimum cell width when squeezing a table to fit on the page; this caused the table to still exceed the width of the page.
  • The PDF catalog object could contain a reference to a /Names object of "0 0 R", which is invalid. This would happen when the "--no-links" option was used.
  • Several HTML elements were incorrectly written with closing tags.
  • When piping PDF output, the temporary file that is created needed to be open for reading and writing, but HTMLDOC only opened the file for writing.
  • Image links did not work.
  • The JPEG image loading code did not correctly handle grayscale JPEG images.
  • JPEG images were not encrypted when writing a document with encryption enabled.
  • The user password was not properly encrypted.
  • The colormap of indexed images were not encrypted when writing a document with encryption enabled.
  • The temporary file creation and cleanup functions did not use the same template under Windows, causing multiple conversions to fail when temporary files were used.
  • Paragraphs could end up with one extra text fragment, causing the line to be too long.
  • The command-line program would clear the error count after reading all the files/URLs on the command-line, but before generating the document. If there were problems reading the files/URLs, HTMLDOC would return a 0 exit status instead of 1.
  • Image objects that were both JPEG and Flate compressed would not display (filters specified in the wrong order.)
  • Images with more than 256 colors would cause a segfault on some systems.
  • Background images would generate the error message "XObject 'Innn' is unknown".

Changes in HTMLDOC v1.8.12

    New Features

  • Added new "--batch" option to convert HTMLDOC book files from the command-line.
  • Added support for the "-display" option on systems that use X11.
  • Now use image objects in PDF output for images when the image width * height * depth > 32k.
  • Now use JPEG compression when the number of colors would be > 32 colors or 16 gray shades.
  • True transparency support for GIF files in PDF 1.3 output!
  • The GUI now automatically changes the extension of the output filename as needed.
  • The GUI now collects all error messages and shows them once after the document is generated.
  • Added support for HSPACE and VSPACE attributes for images with ALIGN="LEFT" or ALIGN="RIGHT".
  • Added new Java interface to HTMLDOC.
  • Changes

  • Consolidated temporary file management into new file_temp() function. The new function also makes use of the Windows "short lived" open option which may improve performance with small temporary files.
  • Updated book file format and added an appendix describing the format.
  • Now default to PDF 1.3 (Acrobat 4.0) output format.
  • Now output length of PDF streams with the stream object; this offers a modest reduction in file size.
  • The HTTP file cache now keeps track of previous URLs that were downloaded.
  • The HTTP code now supports redirections (status codes 301 to 303) to alternate URLs.
  • Limit the height check for table rows to 1/8th of the page length; this seems to provide fairly consistent wrapping of tables without leaving huge expanses of blank space at the bottom of pages.
  • The HTML output now also includes a font-family style for PRE text; otherwise the body font would override the PRE font with some browsers.
  • The snprintf/vsnprintf emulation functions were not included in the HTMLDOC makefile.
  • RGB hex colors are now recognized with or without the leading #. This breaks HTML standards compliance but should reduce the number of problem reports from buggy HTML.
  • The stylesheet generated with the HTML output no longer contains absolute font sizes, just the typefaces and a relative size for SUB/SUP.
  • The title image is no longer scaled to 100% in the HTML output.
  • Bug Fixes

  • The web page output was not divided into chapters for each input file.
  • The "make install" target did a clean.
  • The configure script would remove the image libraries if you did not have FLTK installed.
  • The fix_filename() function didn't handle relative URLs for images (e.g. SRC="../images/filename.gif")
  • Comments in the source document were being closed by a tag in the HTML output.
  • The alignment attribute in TR elements was not inherited by the TD and TH elements.
  • The HTML parser added whitespace before the title of a document (missing check for TITLE element.)
  • The table formatter did not reset the column width when a width was not specified explicitly. This caused the columns to be formatted with equal widths...
  • Paragraphs that didn't use the P element would use the alignment attribute of the first fragment instead of the parent.

Changes in HTMLDOC v1.8.11

    New Features

  • Added koi8-r character set.
  • Added new "TrueType" font option for PDF output. This (hopefully) should improve support for non-latin languages.
  • Added support for "justify" alignment; this is currently implemented by adding additional space between characters (no automatic hyphenation...)
  • Changes

  • The "make install" target does a "make all" to ensure that the software is built before installing it. This should help users that don't read the documentation build the software.
  • Incorporated several OS/2 compile fixes from Alexander Mai.
  • Tables that exceed the printable width of the page are now squeezed to fit.
  • Bug Fixes

  • The temporary file created for PDF output to stdout was not unique.
  • The temporary file created for PDF output to stdout did not use the GetTempPath() function under Windows.
  • The temporary file cleanup code did not use the GetTempPath() function under Windows.
  • The prefs_load() function did not check the HTMLDOC_DATA environment variable until after loading the preferences file. This could cause any saved settings to generate error messages about missing files (these were reloaded when the document data was read, however.)
  • The first border for a table cell that spanned multiple pages did not account for the cellpadding or border width.
  • Leading whitespace was not eliminated in all cases.

Changes in HTMLDOC v1.8.10

    New Features

  • New "--quiet" option to suppress all messages sent to stderr.
  • New chapter n/N page number format (:)
  • New "--links" and "--no-links" options for PDF output.
  • Added "€" character name support.
  • Changes

  • Documentation updates.
  • If a heading already contains a link, the name assigned for the heading is stored in the existing link to avoid nested links.
  • The table parsing code now also traverses THEAD and TFOOT sections and handles multiple TBODY, THEAD, and TFOOT sections. The THEAD and TFOOT rows are treated as ordinary rows.
  • Image alignment should now match W3C recommendations.
  • Newlines inside quoted values (e.g. SRC="filename\r\n") are now ignored.
  • The STYLE data generated in HTML output now includes the TYPE="text/css" attribute.
  • Bug Fixes

  • The path support was still broken.
  • Embedded files and images did not use path or HTTP support.
  • Table cell borders could be drawn on the wrong page if not all cells in a row span more than one page.
  • Large images could end up covering the footer at the bottom of the page (wasn't accounting for the line spacing.)
  • Fixed some memory leaks that would affect Windows 95/98/Me users.

Changes in HTMLDOC v1.8.9

    New Features

  • Added a "--no-numbered" option to turn heading numbers off.
  • Added support for "keywords" META data.
  • Added support for BMP images.
  • Added support for ROWSPAN attribute in tables.
  • Added support for HTTP file references.
  • Added new sample CGI program that can produce a PDF file for any page on a server.
  • Added new n/N, date, and time formats for the header and footer.
  • Changes

  • Configuration script changes.
  • Now ignore file count in book files; instead, we now look at the first character of the third and subsequent lines - a dash (-) indicates the start of the options. (use a backslash to quote filenames starting with a dash)
  • Multiple-line paragraphs that have only 1 line on the bottom of the current page are now started on the following page.
  • DSC comments in PostScript output were not 100% conformant with the DSC spec.
  • Long table-of-contents entries are now wrapped (original patch supplied by Richard Pennington)
  • New color icon under UNIX when Xpm library available.
  • Bug Fixes

  • Didn't allow &#nnn; character escapes inside preformatted text.
  • Empty TBODY groups would cause parse_table() to crash.
  • Comments were incorrectly terminated by ">" instead of "-->".
  • The command-line and GUI interfaces looked for "outlines" instead of "outline" for the page mode.
  • The HTML output code didn't output closing tags for empty elements.
  • The GUI interface started with the compression slider enabled, even for HTML output.
  • The beginnings of some lines could start with whitespace.
  • Wasn't aligning images and text on lines based on the line height.
  • The compression slider was enabled in the GUI even though HTML output was selected.
  • The Perl example code was incorrect.
  • Fixed the check for whether or not pages were generated.
  • htmlSetCharSet() wasn't reloading the character set data if the data directory changed.
  • The GUI did not reset the default background color.
  • The 'C' page number style (chapter page numbers) started at 3 instead of 1.
  • The chapter links were off by 1 or 2 pages when no title page was included.

Changes in HTMLDOC v1.8.8

    New Features

  • Added support for PDF security/encryption!
  • Now support TABLE height attribute.
  • Now generate an error message if no pages are generated (with a suggestion to use the webpage option.)
  • New "paths" option to specify additional directories to search for files. This is useful when the source files use absolute server paths.
  • Changes

  • Added missing casts in htmllib.cxx that were causing a compile warning with some compilers.
  • No longer draw borders around empty cells in tables...
  • Now disable the TOC tab when using webpage mode.
  • Now scale title image to 100% in HTML output.
  • Now handle comments with missing whitespace after the "<!--".
  • Bug Fixes

  • Nested tables didn't take into account the table border width, spacing, or padding values.
  • HTMLDOC crashed under Solaris when reading HTML files from the standard input.
  • <ELEM>text</ELEM> <MELE>text</MELE> was rendered without an intervening space.

Changes in HTMLDOC v1.8.7

    New Features

  • The configure script now uses the local PNG, ZLIB, and/or JPEG libraries when they are new enough.
  • The configure script now uses the -fno-rtti, -fno-exceptions, and -fpermissive options as needed with GCC (smaller, faster executables, works around X header bugs in Solaris.)
  • Added a --toctitle option to set the table-of-contents title from the command-line (was only available in the GUI in previous releases...)
  • New "<!-- NEED amount -->" comment to force a page feed if there is not sufficient room on the page for the following text.
  • Page comments are now supported in tables.
  • Table rows are now allocated dynamically, MAX_ROWS at a time.
  • Changes

  • Increased default MAX_PAGES to 10000 (was 5000.)
  • File links in book files now point to the top of the next page.
  • <TABLE ALIGN=xyz> now aligns the table (previously it just set the default alignment of cells.)
  • Transparent GIFs now use the body color instead of white for the transparent color.
  • Updated to LIBPNG 1.0.6 in source distribution.
  • Updated the default cellpadding to be 1 pixel to match Netscape output.
  • Updated line and block spacing to match Netscape.
  • DL/DT/DD output now matches browsers (was indented from browser output.)
  • Now only output link (A) style if it is set to "none". Otherwise Netscape would underline all targets as well as links.
  • Increased the MAX_COLUMNS constant to 200, and dropped MAX_ROWS to 200. Note that the new table code now allocates rows in increments of MAX_ROWS rows, so the actual maximum number of rows depends on available memory.
  • Bug Fixes

  • Now ignore illegal HTML in tables.
  • The VALIGN code didn't handle empty cells properly.
  • Wasn't offsetting the start of each row by the cell padding.
  • The JPEG image loading code didn't work for some JPEG images, particularly those from digital cameras (JPEG but not JFIF format.)
  • The strikethrough line was not being drawn in the correct position.
  • Wasn't setting the height of BR elements, so <BR><BR> didn't insert a blank line.
  • The table of contents would show the wrong page numbers if no title page was generated.
  • Cell widths did not subtract any border, padding, or spacing from the "preferred" width, causing formatting differences between web browsers and HTMLDOC.
  • The PNG loading code did not handle interlacing or transparency.
  • The HTML parsing code did not prevent elements in embedded files from completing elements in the parent file.
  • The table CELLSPACING amount was being applied twice in the table sizing calculations.

Changes in HTMLDOC v1.8.6

    New Features

  • New linkcolor and linkstyle options.
  • Changes

  • Minor source changes for OS/2 compilation.
  • SUP and SUB now raise/lower text more to be consistent with browser look-n-feel.
  • Non-breaking space by itself was being output. Now check for that and ignore strings that consist entirely of whitespace.
  • New progress bar.
  • Bug Fixes

  • Didn't add whitespace after a table caption.
  • Nested tables caused formatting problems (flatten_tree() didn't insert breaks for new rows)
  • A cell whose minimum width exceeded the available width for the table would cause the table to go off the page.
  • Cells that spanned more than two pages were drawn with boxes around them rather than just the sides.
  • The stylesheet info in the HTML output specified the H1 size for all headings.
  • The title page was incorrectly formatted when an image was specified - the text start position was computed using the pixel height of the title image and not the formatted height.
  • 1 color images didn't come out right; the "fix" to work around an Acrobat Reader bug was being done too soon, so the color lookups were wrong.
  • HTML file links now work properly.
  • Now limit all HTML input to the maximum size of input buffers to avoid potential buffer overflow problems in CGIs.
  • If a row had a predefined height, HTMLDOC wasn't making sure that the row would fit on the current page.
  • THEAD, TFOOT, and TBODY caused problems when formatting tables. Note: THEAD and TFOOT are *still* not supported, however the code now properly ignores them and parses the rows in the TBODY group.
  • The VALIGN code introduced in the 1.8.5 release didn't check for NULL pointers in all cases.

Changes in HTMLDOC v1.8.5

    New Features

  • New "--titlefile" option to include an HTML file for the title page(s).
  • New 'C' header/footer option to show current page number within chapter or HTML file.
  • Allow adding of .book files to import all HTML files in the book.
  • New "HALF PAGE" page comment to feed 1/2 page.
  • Added VALIGN and HEIGHT support in tables.
  • Changes

  • Now optimize link objects in PDF files (provides a 40k reduction in file size for the HTMLDOC manual alone)
  • Table rows that cross page boundaries are now rendered more like Netscape and MSIE.
  • Now support HTMLDOC_DATA and HTMLDOC_HELP environment variables under UNIX (for alternate install directory)
  • Now show error messages when HTMLDOC can't open the AFM, character set, or PostScript glyph files.
  • The logo image is now scaled to its "natural" size (as it would appear in a web browser)
  • Now recognize VALIGN="MIDDLE" or VALIGN="CENTER".
  • Bug Fixes

  • Generation of PDF files to the standard output (i.e. to the web server + browser) didn't work on some versions of UNIX. HTMLDOC now writes the PDF output to a temporary file and then copies it to the standard output as needed.
  • PDF links were missing the first 5 characters in the filename; the code was trying to skip over the "file:" prefix, but that prefix was already skipped elsewhere.
  • Nested descriptive lists (DL) did not get rendered properly.
  • Tables had extra whitespace before and after them.
  • Multiple aligned images confused parse_paragraph(); the images would overlap instead of stack on the sides.

Changes in HTMLDOC v1.8.4

    Changes

  • More configure script changes for FLTK DSOs.
  • FileIcon.cxx was still using NULL for outline (an integer), which caused some ANSI C++ compilers to complain.
  • Bug Fixes

  • The Fonts and Colors tab groups did not extend to the full width of the tab area, which prevented the Browse button from working when clicked on the right side.
  • The help dialog window did not scroll all the way to the bottom of the text.
  • The chapter ("c") header/footer string did not work.
  • The heading ("h") header/footer string did not always match the first heading on a page.
  • The header and footer fonts were not used when computing the widths of the header and footer strings.
  • The Windows distribution did not create the right shortcut for the Users Manual in the Start menu.
  • The command-line code did not accept "--grayscale", only "--gray"
  • Multi-file HTML output did not use the right link for the table-of-contents file if no title page was being generated.
  • Extra whitespace before and after tables has been eliminated.

Changes in HTMLDOC v1.8.3

    New Features

  • New "--browserwidth" option to control scaling of images and tables that use fixed pixel widths.
  • Changes

  • The configure script now looks for the OpenGL library (required if you use a shared FLTK library with OpenGL support.)
  • Increased the max number of chapters to 1000.
  • Bug Fixes

  • Page break comments didn't force a paragraph break.
  • --no-toc prevented chapters from being output in PS and PDF files.
  • Filenames didn't always get updated properly when doing a "save as"...
  • Fixed some more leading/trailing whitespace problems.
  • Wasn't freeing page headings after the document was generated.
  • Wasn't range checking the current chapter number; now limits the number of chapters to MAX_CHAPTERS and issues an error message whenever the limit is exceeded.

Changes in HTMLDOC v1.8.2

    New Features

  • New "setup" program for UNIX software installation.
  • Changes

  • Documentation updated for new UNIX "setup" program and "..." usage for headers and footers.
  • Changed margins to floating point (instead of integer) to improve table column accuracy.
  • Bug Fixes

  • HTMLDOC could crash under Microsoft Windows with some types of HTML files. This was caused by a stack overflow, usually when processing nested tables.
  • Multiple HTML files weren't being converted properly in web page mode - only the last file would be generated for PostScript output, and no file for PDF output.
  • Wasn't preserving the whitespace between "one" and "two" in the HTML code "one<I> two</I> three".
  • Paragraph spacing was inconsistent.
  • <TABLE WIDTH="xx"> wasn't formatted properly.
  • The command-line code wasn't opening HTML files in binary mode. This caused problems under Microsoft Windows.

Changes in HTMLDOC v1.8.1

    Changes

  • The configure script didn't update the ARFLAGS variable for *BSD operating systems (no "s" option to build the symbol table...)
  • Changed the installation commands to only create the installation directory if it does not exist. This prevents installation errors on some platforms the second time around.
  • Now use the Microsoft definitions for characters 128 through 159 that are otherwise unused by the ISO-8859-x character sets.
  • Now set optimization settings when we know the compiler.
  • Now always quote attribute values in HTML output to make HTML lint programs happy.
  • Bug Fixes

  • Wasn't using TOC title string in PDF document outline.
  • Preformatted text in tables didn't force the column width.
  • Cells using COLSPAN > 1 didn't contribute to the width of columns.
  • The table code didn't enforce the per-column minimums under certain circumstances, causing "scrambled" columns.
  • The configure script and makefiles didn't work when FLTK was not available. They now only build the "gui" library when it is available.
  • The Windows distribution was installing files under PROGRAMDIR instead of TARGETDIR. This prevented users from customizing the installation directory.
  • The configure script overrode the LDFLAGS environment variable, preventing FLTK from being located in a non- default directory.

Changes in HTMLDOC v1.8

    New Features

  • Now support PDF 1.1 (Acrobat 2.x) and PDF 1.3 (Acrobat 4.0).
  • Now support PDF page modes, layouts, and effects, and the first page that is displayed in Acrobat Reader.
  • Now support PostScript Level 3 output with Flate image compression.
  • Now support PostScript commands for page size and duplexing.
  • Now add filenames as needed to HTML links.
  • Added optimizations to output code to further reduce PDF and PostScript file size.
  • Now support alternate 8-bit character sets. Currently we supply data files for the ISO-8859-N character sets.
  • Added chapter headings to the available header/footer formats.
  • The GUI file chooser is significantly improved and supports selection of multiple HTML files.
  • The GUI now provides on-line help.
  • Many other GUI improvements.
  • Added support for DIR and MENU block elements.
  • The header and footer text can now be made boldface, italic, etc.
  • Font settings are now exported to HTML files in a style sheet.
  • Now support page breaks using HTML comments.
  • The image dimensions are now exported to HTML files.
  • Added landscape printing option.
  • Added CAPTION support for tables.
  • Filename links now work for HTML files included in a document.
  • Now support BGCOLOR in tables.
  • Changes

  • Lots of documentation changes.
  • Much better table formatting.
  • Changed HTML output to use less invasive navigation bars at the top and bottom of each file. This also means that the "--barcolor" option is no longer supported!
  • Updated to use existing filenames in HTML (directory) output.
  • Now recognize any local PDF file as a local file link (i.e. you just need "HREF=filename.pdf" and not "HREF=file:filename.pdf")
  • <TT>, <CODE>, and <SAMP> no longer reduce the font size.
  • Now put whitespace after image data in PDF files. This change was needed to work around a bug in Acrobat Reader 4.0.
  • Now generate a complete encoding vector for fonts in PDF files. This change was needed to work around a bug in all versions of Acrobat Exchange that did not recognize the WinANSI encoding defined in the PDF specifications.
  • Now filter out the BREAK attribute from HR elements.
  • Now only load images once.
  • Bug Fixes

  • Wasn't escaping &,<, or > in HTML output
  • Wasn't preserving &nbsp;
  • Links in multi-file HTML output were off-by-one.
  • BLOCKQUOTE needed to be like CENTER and DIV.
  • Needed to use existing link name if present for headings to avoid nested link name bug in Netscape and MSIE.
  • Extremely long link names could cause TOC generation to fail and HTMLDOC to crash.
  • PDF output was not compatible with Ghostscript/Ghostview because Ghostscript does not support inherited page resources or the "Fl" abbreviation for the "FlateDecode" compression filter.
  • PostScript DSC comments didn't have unique page numbers. This caused Ghostview (among others) to get confused.
  • Some functions didn't handle empty text fragments.
  • Images couldn't be scaled both horizontally and vertically.
  • <LI> didn't support the VALUE attribute (but <OL> did...)
  • Fixed whitespace problems before and after some markups that was caused by intervening links.
  • The indexed image output code could generate an image with only 1 color index used, which upset Acrobat Reader.
  • Fixed a bug in table-of-contents handling - HTMLDOC would crash on some systems if you converted a web page on the command-line.
  • Wasn't setting the font size and spacing soon enough when generating files on the command-line.
  • Didn't hide EMBED elements when generating indexed HTML files.
  • Didn't always set the current drawing position before drawing a box or line.
  • Base85 encoding of image data was broken for PostScript output.
  • JPEG compression was broken for PostScript output.
  • Didn't set binary mode for the standard output under Windows and OS/2 needed.
htmldoc-1.8.27/doc/b-book.html0100664000212600000240000000523410322727434014536 0ustar mikeuser

Appendix B - Book File Format

This appendix describes the HTMLDOC .book file format.

Introduction

The HTMLDOC .book file format is a simple text format that provides the command-line options and files that are part of the document. These files can be used from the GUI interface or from the command-line using the --batch option:

    htmldoc filename.book
    htmldoc --batch filename.book
    

The first form will load the book and display the GUI interface, if configured. Windows users should use ghtmldoc.exe executable to show the GUI and htmldoc.exe for the batch mode:

    ghtmldoc.exe filename.book
    htmldoc.exe --batch filename.book
    

The Header

Each .book file starts with a line reading:

    #HTMLDOC 1.8.17
    

The version number (1.8.17) is optional.

The Options

Following the header is a line containing the options for the book. You can use any valid command-line option on this line:

    -f htmldoc.pdf --titleimage htmldoc.png --duplex --compression=9 --jpeg=90
    

Long option lines can be broken using a trailing backslash (\) on the end of each continuation line:

    -f htmldoc.pdf --titleimage htmldoc.png --duplex \
    --compression=9 --jpeg=90
    

The Files

Following the options are a list of files or URLs to include in the document:

    intro.html
    1-install.html
    2-starting.html
    3-books.html
    4-cmdline.html
    5-cgi.html
    6-htmlref.html
    7-guiref.html
    8-cmdref.html
    a-license.html
    b-book.html
    c-relnotes.html
    

Putting It All Together

The following is the complete book file needed to generate this documentation:

    #HTMLDOC 1.8.13
    -f htmldoc.pdf --titleimage htmldoc.png --duplex --compression=9 --jpeg=90
    intro.html
    1-install.html
    2-starting.html
    3-books.html
    4-cmdline.html
    5-cgi.html
    6-htmlref.html
    7-guiref.html
    8-cmdref.html
    a-license.html
    b-book.html
    c-relnotes.html
    

Older Book Files

Prior to HTMLDOC version 1.8.12, the book file format was slightly different:

    #HTMLDOC version
    file count
    file(s)
    options
    

While HTMLDOC still supports reading this format, we do not recommend using it for new books. In particular, when generating a document using the --batch option, some options may not be applied correctly since the files are loaded prior to setting the output options in the old format.

htmldoc-1.8.27/doc/Makefile0100664000212600000240000000463010330505373014131 0ustar mikeuser# # "$Id: Makefile 1439 2005-10-28 20:32:59Z mike $" # # Makefile for HTMLDOC documentation files. # # Copyright 1997-2001 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # # # Include common definitions... # include ../Makedefs # # Documentation files... # SOURCES = intro.html 1-install.html 2-starting.html \ 3-books.html 4-cmdline.html 5-cgi.html \ 6-htmlref.html 7-guiref.html 8-cmdref.html \ a-license.html b-book.html c-relnotes.html \ d-compile.html DOCUMENTS = htmldoc.html htmldoc.pdf htmldoc.ps DOCFILES = help.html htmldoc.pdf HTMLDOC = ../htmldoc/htmldoc$(EXEEXT) --datadir .. --strict --verbose # # Make everything... # all: $(DOCUMENTS) # # Install everything... # install: $(DOCUMENTS) if [ ! -d $(datadir)/doc/htmldoc ]; then\ $(MKDIR) $(datadir)/doc/htmldoc;\ fi $(CP) $(DOCFILES) $(datadir)/doc/htmldoc $(CHMOD) ugo+r $(datadir)/doc/htmldoc/* if [ ! -d $(mandir)/man1 ]; then\ $(MKDIR) $(mandir)/man1;\ fi $(CP) htmldoc.man $(mandir)/man1/htmldoc.1 $(CHMOD) ugo+r $(mandir)/man1/htmldoc.1 # # Clean out document files... # clean: $(RM) $(DOCUMENTS) # # htmldoc program (dummy rule) # ../htmldoc/htmldoc$(EXEEXT): echo Rebuilding documentation... # # htmldoc.html # htmldoc.html: $(SOURCES) ../htmldoc/htmldoc$(EXEEXT) echo Formatting htmldoc.html... $(HTMLDOC) --batch htmldoc.book -f htmldoc.html # # htmldoc.pdf # htmldoc.pdf: $(SOURCES) ../htmldoc/htmldoc$(EXEEXT) echo Formatting htmldoc.pdf... $(HTMLDOC) --batch htmldoc.book -f htmldoc.pdf # # htmldoc.ps # htmldoc.ps: $(SOURCES) ../htmldoc/htmldoc$(EXEEXT) echo Formatting htmldoc.ps... $(HTMLDOC) --batch htmldoc.book -f htmldoc.ps # # htmldoc.1 # htmldoc.1: htmldoc.man echo Formatting htmldoc.1... groff -T ascii -man htmldoc.man >htmldoc.1 # # End of "$Id: Makefile 1439 2005-10-28 20:32:59Z mike $". # htmldoc-1.8.27/doc/htmldoc-cd.html0100664000212600000240000001111410322727434015375 0ustar mikeuser

Installing HTMLDOC


Requirements

HTMLDOC requires approximately 4MB of disk space and one of the following environments:

  • Microsoft Windows® 2000 or higher
  • MacOS® X 10.2 or higher
  • Linux 2.4 or higher
  • Solaris® 7 or higher

HTMLDOC may run on other environments, but we only provide packages for those listed above.

Installing HTMLDOC on Microsoft Windows

Insert the HTMLDOC CD into your CD drive and wait for the setup window to appear. If it does not appear, double-click on the My Computer icon and then double-click on the CD icon. The setup wizard will guide you through the rest of the installation.

Installing HTMLDOC on MacOS X

Insert the HTMLDOC CD into your CD drive and wait for the CD icon to appear on the desktop. Double-click on the CD icon and then double-click on the Install icon. The setup wizard will guide you through the rest of the installation.

Installing HTMLDOC on Linux

Double-click on the CD icon and then double-click on the htmldoc-linux-intel.rpm icon or run the following command to install HTMLDOC on Linux:

    rpm -i /mnt/cdrom/htmldoc-linux-intel.rpm ENTER

Installing HTMLDOC on Solaris

Run the following command to install HTMLDOC on Solaris SPARC:

    pkgadd -d /cdrom/htmldoc/htmldoc-solaris-sparc.pkg ENTER

Run the following command to install HTMLDOC on Solaris Intel:

    pkgadd -d /cdrom/htmldoc/htmldoc-solaris-intel.pkg ENTER

Licensing HTMLDOC


The first time you run HTMLDOC, a license dialog box will appear. Click on the Update License button that is found above the Software License Agreement.

The ESP License Manager window appears and asks for your license key. If have a label that says "License Key", enter the 16-digit license key that is on the label. Otherwise, open the specified URL in your web browser to get your license. After entering the license key, click the OK button and then the Close button to start using HTMLDOC.

Running HTMLDOC


Running HTMLDOC on Microsoft Windows

Click on the Start Menu button and choose HTMLDOC from the HTMLDOC menu under the All Programs menu.

Running HTMLDOC on MacOS X

Click:

    Applications Folder->HTMLDOC

Running HTMLDOC on Linux

Click:

    Applications Menu->Office->HTMLDOC

Running HTMLDOC on Solaris

Click:

    Applications Windows->ESP->HTMLDOC

Uninstalling HTMLDOC


Uninstalling HTMLDOC on Microsoft Windows

Open the Control Panel window and double-click on the Add/Remove Software icon. A list will be loaded. Scroll down, select HTMLDOC, and click the Remove button.

Uninstalling HTMLDOC on MacOS X

Re-insert the HTMLDOC CD into your CD drive and wait for the CD icon to appear on the desktop. Double-click on the CD icon and then double-click on the Uninstall icon.

Uninstalling HTMLDOC on Linux

Run the following command to remove HTMLDOC from Linux:

    % rpm -e htmldoc ENTER

Uninstalling HTMLDOC on Solaris

Run the following command to remove HTMLDOC from Solaris:

    % pkgrm htmldoc ENTER

HTMLDOC Resources


Free Resources and Help

The HTMLDOC open source web site, a free on-line community for HTMLDOC users, can be found on-line at the following URL:

    http://www.htmldoc.org/

Commercial Support

You can ask for help on-line at the following URL:

    http://www.easysw.com/support.php

You may also call us during our normal business hours at +1.301.373.9600.

Support for HTMLDOC Basic is limited to installation and licensing questions only.

End-User License Agreement


htmldoc-1.8.27/doc/4-cmdline.html0100664000212600000240000001423710322727434015144 0ustar mikeuser

Chapter 4 - HTMLDOC from the Command-Line

This chapter describes how to use HTMLDOC from the command-line to convert web pages and generate books.

Getting to the Command-Line on Windows

Do the following steps to access the command-line on Windows:

  1. Click on Start at the bottom left corner of your screen
  2. Click on All Programs
  3. Click on Accessories
  4. Click on Command Prompt

After you have clicked command prompt, your screen should look something like Figure 4-1.

Command prompt window
Figure 4-1: Command prompt window

To see what's in this directory, type the following command:

    dir ENTER

You now have a list of available files and directories that you can use. To access a different directory simply type cd and the name of the new directory. For example, type the following if you want to access a directory called Steve:

    cd Steve ENTER

The Basics of Command-Line Access

To convert a single web page type:

    htmldoc --webpage -f output.pdf filename.html ENTER

What Are All These Commands?

htmldoc is the name of the software.

--webpage is the document type that specifies unstructured files with page breaks between each file.

-f output.pdf is the file name that you will save all the documents into and also the type of file it is. In this example it is a PDF file.

filename.html is the name of the file that you want to be converted and the type of file it is. In this example it is a HTML file.

Try the following exercise: You want to convert the file myhtml.html into a PDF file. The new file will be called mypdf.pdf. How would you do this? (Don't worry, it's answered for you on the next line. But try first.)

To accomplish this type:

    htmldoc --webpage -f mypdf.pdf myhtml.html ENTER

Converting Multiple HTML Files

To convert more than one web page with page breaks between each HTML file, type:

    htmldoc --webpage -f output.pdf file1.html file2.html ENTER

All we are doing is adding another file. In this example we are converting two files: file1.html and file2.html.

Try this example: Convert one.html and two.html into a PDF file named 12pdf.pdf. Again, the answer is on the next line.

Your line command should look like this:

    htmldoc --webpage -f 12pdf.pdf one.html two.html ENTER

We've been using HTML files, but you can also use URLs. For example:

    htmldoc --webpage -f output.pdf http://slashdot.org/ ENTER

Generating Books

Type one of the following commands to generate a book from one or more HTML files:

    htmldoc --book -f output.html file1.html file2.html ENTER
    htmldoc --book -f output.pdf file1.html file2.html ENTER
    htmldoc --book -f output.ps file1.html file2.html ENTER

What are all these commands?

htmldoc is the name of the sofware.

--book is a type of document that specifies that the input files are structured with headings.

-f output.html is where you want the converted files to go to. In this case, we requested the file be a HTML file. We could have made it a PDF (-f output.pdf) or Postscript (-f ouput.ps), too.

file1.html and file2.html are the files you want to convert.

HTMLDOC will build a table of contents for the book using the heading elements (H1, H2, etc.) in your HTML files. It will also add a title page using the document TITLE text (you're going to learn about title files shortly) and other META information you supply in your HTML files. See Chapter 6 - HTML Reference for more information on the META variables that are supported.

Note:

When using book mode, HTMLDOC starts rendering with the first H1 element. Any text, images, tables, and other viewable elements that precede the first H1 element are silently ignored. Because of this, make sure you have an H1 element in your HTML file, otherwise HTMLDOC will not convert anything!

Setting the Title File

The --titlefile option sets the HTML file or image to use on the title page:

    htmldoc --titlefile filename.bmp ... ENTER
    htmldoc --titlefile filename.gif ... ENTER
    htmldoc --titlefile filename.jpg ... ENTER
    htmldoc --titlefile filename.png ... ENTER
    htmldoc --titlefile filename.html ... ENTER

HTMLDOC supports BMP, GIF, JPEG, and PNG images, as well as generic HTML text you supply for the title page(s).

Putting It All Together

    htmldoc --book -f 12book.pdf 1book.html 2book.html --titlefile bookcover.jpg ENTER

Take a look at the entire command line. Dissect the information. Can you see what the new filename is? What are the names of the files being converted? Do you see the titlepage file? What kind of file is your titlefile?

Figure it out? The new file is 12book.pdf. The files converted were 1book.html and 2book.html. A title page was created using the JPEG image file bookcover.jpg.

Chapter 8 - Command Line Reference digs deeper into what you can do with the the command line prompt.

htmldoc-1.8.27/doc/3-books.html0100664000212600000240000000700210322727434014635 0ustar mikeuser

Chapter 3 - Generating Books

This chapter describes how to create a book using HTML files.

Overview

While HTMLDOC can convert web pages into PostScript and PDF files, its real strength is generating indexed HTML, PostScript, or PDF books.

HTMLDOC uses HTML heading elements to delineate chapters and headings in a book. The H1 element is used for chapters:

    <HTML>
    <HEAD>
	<TITLE>The Little Computer that Could</TITLE>
    </HEAD>
    <BODY>
    <H1>Chapter 1 - The Little Computer is Born</H1>
    ...
    <H1>Chapter 2 - Little Computer's First Task</H1>
    ...
    </BODY>
    </HTML>

Sub-headings are marked using the H2 through H6 elements.

Note:

When using book mode, HTMLDOC starts rendering with the first H1 element. Any text, images, tables, and other viewable elements that precede the first H1 element are silently ignored. Because of this, make sure you have an H1 element in your HTML file, otherwise HTMLDOC will not convert anything.

Choosing HTML Files

Start by clicking on the Book radio button (1) to specify you'll be converting one or more HTML files into a book.

Your next step is to choose one or more files for conversion by clicking on the Add Files... button (2). When the file chooser dialog appears, pick the file(s) you wish to convert and then click on the OK button. As discussed in Chapter 2, if you don't see the file that you want, double click on the folder with ../ after it.

Also, having all files and images in one folder will make file retrieval much easier.


Figure 3-1: The Input Tab

Selecting a Title File

HTMLDOC can automatically create a title page for you. Fill in the Title File/Image field or click the Browse... button (3) to locate the file you want to use. If you don't see the file you want, double click on the folder with ../ after it.


Figure 3-2: The Output Tab

Setting the Output Format

The output format is set in the Output tab (4). Click on the Output tab and then click on the HTML, PS, or PDF radio buttons to set the output format.

Setting the Output File

Now that you've chosen an output format, type the name of the output file into the Output Path field or click on the Browse... button (5) to select the output file using the file chooser.

Generating the Document

Once you have chosen the output file you can generate it by clicking on the Generate button (6) at the bottom of the HTMLDOC window.

Saving Your Book

HTMLDOC can save the list of HTML files, the title file, and all other options to a special .BOOK file so you can regenerate your book when you make changes to your HTML files.

Click on the Save button (7) to save the current book to a file.

htmldoc-1.8.27/doc/htmldoc-fig11.png0100664000212600000240000022115310322727434015544 0ustar mikeuser‰PNG  IHDR÷—!ãŽ* pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF!áIDATxÚb¼ráÃ(£`Œ‚ár *ˆHi뛆Å(£` 3ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁð˜)—a† 1G&aB¦b>…6ÄNˆÄàª%Ïi }UÓ¼|)$rÜšs°¤ÓÏK”9µìªŠ©§JÜ“dEŒfÄì;èç*€ÄD¾#`‡£m .Ú:L£±Û$Ú9# Z´qˆ©‹šUñl UMRïSÞC{ÛŸCÓORí’E‡9÷ÎR5Ë’è½£yà£f«UxÝþG½Æa-b@,•Ö$ÉTVVbŠ···WUUq©dV•£`Œ‚Q0h@±£ˆ‘±1íLýYcû,CÚY†™Æ£A7 FÁ(é Ò”ŸxÅŽŽŽû÷ï'I}Z×2lè‚€b!RçYX±,âg=;Óx´˜£`Œb'5×lØAžzJtA@±äcp?¯£`Œ‚Q@ ÀZC@H€uí œ¥<|8¾½½­ˆ7>‹Þÿz{*äQËp?ßœ $ù4r?ݘ„¦R@»àýÕ @† N²øÛK}@RD¿øÍÅ^ CÔ .õò|7²J ã28ûÙéd)sèüÁãmÈâòV5£©jŒ‚Q0$€¶¾9ž–»ŽDÞç„)‚ˆWóæÍ„„WGGˆÈYÆFxþ,Æ™õÄ8—O#‘‘áãuPY/ •‚ML¿¿2AH§ZÄ_î#h”¸QP닳]@$iR.â;¤”idüé©ö''ÛeÌ«ž€‹xY‹jô…£`Œ‚Q0h@}=–R²Â–æÀbˆ Å:Á"ˆW¹ˆ?pÀMÙÁƒ)÷ä»+ýBº…o/÷¯Ø–òÏÏtB úQ0 FÁ(º€¼Jð‚Îů €ÐKù–yO@C4 .„—òÇŽÃÒqÐÑAùrk ‘®Ô)¶åA=¸ˆÖ-"¦9? FÁ(£^ÐSÄ@1a U‚œûñãÇnÂnn€híÚµpq>>>4F •”---/_ ùôYg}$}døÄÅÅcbb΂ÛÐã닳]@rtP~Œ‚Q0hÛ×p@‹ÑjÐ&c±€ÂRÊŸEZ¿mÛ¶40#==}Ãõë×ׯ_O‡òýõ…C̰Âxy® Â0.ƒ¬š‘2-vºy1%x%%£Œh™Íã­pñÑ•”£`Œ‚Á.§Á 0Ks‚u @hË?{ö Â~üø1xÒyt¸U³'{10ðªç"Åðkæ!/gÔ.À¦Ö+‚œ$¢_Œvd˜8° G=­ ¤L+0Ϩ-£¬ÂrZÙ(£`Ð Ôr ð Û‘ïD ”_½zµµµ5ßÿÿ3gm›™fìÅ`lìs©ŒI? FÁ(øv±âWO’FRmA„¯”¯ª¶ˆ8ÀÃsÒ®OŸuÖxÖ¬Ñx£`ŒðÑ`4UO‰.8 ,¥¼‰‰ „|wppˆwHfAÆìGO£`Œ @;ýqpÚ@XJy´BÈ]}Â4¨£`Œ‚¡QÊŸZ7£` Yðƒ1 F`ÓÚv#©h•ív÷Üvf’Ɇ¬ÄewÙGàø~?ã#xFˆψž@€„4›l’If’¾Ø.Ç=ð€Õ±·]uêÔ©’Fê»üç_|ù¤Õãl´ ¦üÏÖ§5vñ³)·dÃZnpV6jm¶þQH³ñëçïüæâƒ—Õò½?{¦ÉÒûš™s£ÔøÉ¬nrbbmÅä‰Vó™3æán÷á‹ó³õúþ~G*üöëgŸ~²˜7ó¦ž6•³\Y*cÈ2Îfb6–¬ÅÆø‚2|96˜MyYö™Õ”Oo”ÿ¯Žáÿ—‡c¼ÅâK†‡Dm¢Žè.ê.õ»Ðeo¿ùîÛÅÉêôtýÓ÷?\ýüKÜí÷wICA)) ÆjJ Ànåjë=©b’>qÈÖ7‚,\¡Z¸Ë@Ÿ€ÝZç­s^Ù3®âgüo¬·<½¿‰[Õ´127qAÒp®ñ“ìââõ¡ëCJóådóüdq6o†=  ê&em‰ŠŠÓ*û9þUWkù‰dÌŽ|u”‚°0<\ƒn©€H E¦¨E4œ ‰öVU†0´ÝÐwQ’ÚŒ$‘m¨ŽQºÈYx™Íf“Ú‡ÃãÙòYh{dÍ{7[ B DBM=- .ŒÇ¹§’?DšVT‡ ïh6E4ôW¢«Ýn±Z:kö·Qƒ…2s¢ ÔËÐånÐ.ç´ôGEŒx@‡)nE¡$%YH„À¡ ²LÖF‰ASŽ!§„'Õ•O)„8ÄØ%Ä—‰]ÌÉO]Ò$¹W$[Z‘N†G‘Ö¤¨°2`NF¸"Ó¸ª%Ç¥ (c¨dèFéJ EáªØo`ýñ°ßÝÜÝ^Þ8ÀÜÇD\S¯7gËÕªi¦íCw}ùîúíe»oQwÈ'K†/àŽ9 ´mQVµ'çêÉÌUÍ®k“D3›®Ö‹S?[Ög/cï R^+M´íks}}µÙl¼÷™üíÍýéÉÄ{µÝ>[ÎÁhÉÅa¶Ûíùù9pb}8°¿ìÐý~¹ilÂΫ^Bb8 „o^½†çåâaPƇçA8ŒÌçs,º®ƒÙÕjN¦Ó)nÁ®´m{4c¬ë fìWUõØö°¦#“+¦T2RÎE¨Q´² }à†”T’c¶‰„/d\Ñû2ºAD…¤qg†±béJh¥‘B=%•ŠÎ8v˜¨N#§]ÿð¶Ýý>¶î|À*—K¸/Rzl‘ Újq3Þ+Ùw¥ÚFk€ …`Ê(¯Jß+J­ûñ믎­ìoø8׸a ŒÚŽ Ë‚Ð…ÒV­Ôgèû?ÏЋT±\Š€Íâ8±Ý3ÎÒ‹Tu‰¢Å¹Ù3ßwf~Dû›òó ‡¿Ð6/^ýñzâßá$&ËBR9_›Ëbâ³@jávýYJƒ^½wÝÞ©Ÿ†”§®Æ òi=æ„vN(oR¥Âª¦ê7O* ÷ÈÏ€uWu€Ž”·ØÑäBs¡ê¯ ‹Å£/ƒ•І˜yuB!‚&ÛîˬÿÙå?¿Ì{²&ûRÝ"©ò1mbî³ÚÄØa;…ïW×O~ûáøãÍÍúòòrÿ±W›Íyr«’%1' bNR…*@¡ ê]š“‘‹©D˜á{˪²’lÚÌR¨±F¡¾á@XÏžŸ£ÎVoöÝ*…¶u‡g¦^N7·uÎg¯OW§ÍDõÆÝn®1mËV 볌Í,â–'0œ9êjFS„¿ÚJŒcÎ>ê{Ðáä‚çÎC?š0:›û§Õ¢ÛSËeZžvT‚¸ïÔ±SûõÔÔ¶So#ÂáwËvþå êáÃ:W“¨PËD0hœ|G(òˆê¬iÉp(r|vð=7JÙךv@ÝLR>Y5œùR Ì1ÓW%•¥ê¦ÆÇ*¤¦×zÕVëiÆgÿà·# ›ð™6©Ähc¯L¡Î"ïžYSÆÀÂuÆ4Ö&NM?îïÅ<k9³S¨8úÁ‹¥Š[“²YYhÁžDn—mÊð%ÿiŠLmµü‹&œÌï&–Xº$ˆMáQ*JÄu¥¢X8Ø÷=xõ º ! ‘ «EKbmŠ•Þ).Љñ夊S¦¾o[²ß¾  Iº¬¸#Fï}Û0J%ð´h¦]ìÕ]ë\“¢ŒÖTT¸Íf#¹–ù°oš†ËýÉÉÉÝÝÝÕÕÕõõõÑÑÑùùù·/_ÝÂv°^cv@Á¬­ð«¶NÈ[%¹gœ–‹v€!qÃÛwëõF¶]ÍÓ9êTF/ÁI)x_[;}ø„á™ùYŽ’fîÉùŒt”Û>P È¿#I¦’§Æ«ñƒ0¯šCËYQ,iÔ7‡ GU ^ú6Q†8£QÓÙZ¶Ñ6*Kè2HÿbJ=wÕ¨#KG±ŸS¬æ:´k[ ¬ÿÛËÿ€±sÙq†Â°ãØÍ­—a`QA‘ذbž€wñ‰‡`ƒØtÚ&ÍÍæû ¢ªJÓ\|ìsþÿ;RGó¤ò‹­ý´¿ÿÜüéGð:¨—àM2ý?k ‚¨ D»Êûë0ÿøþ-³ç~~ûþÕyFÔ†ÐM®1›zCˆ$ÿº€ií®*yjÊU^ü¦nïíàæ¡7Î6U¹Bå _PK$4•pIô‚\.A<#ÁW탧i'7Éy2ûEXæåÿ¯¦ (A]E´˜ugbCb›Í§ñzûÏ_¿¼»»#ÀO>öíÙ­ 4*}PlFüîLVì=éZ0@ê.%?£òç´ZʆäšÙãºÈäÐÓDÊĈΠÄ6á+5¨¯^‘Ë«7¯÷í½õa»Ûìê|;ò8S(©½-ª ™nšq‡¥/x!ð¾¼’Ês3ŽH¹’S>š¨‰v‘]È;€ö20éâ4 ›c'S¸r»¶®ö•ñ/kc‡ç7+SSXÓ$ÐF{wÄu¥u 0n* ~êÏÍ …qÓ4¶Ç”G¿Sé+ð*RÌ̈q”š%Ë*ô¡ËlÍÀ/ãxë©Ø,™½LâÃÁY×u¥º‘>0ï¤øša˜bæîÆ·ÆíÓ™s] ÉKèÕ„ðÁ÷ã &(ï:\{m@—û-¢¦$ŠÉk3‡÷“$ͦ0ä¨'aB»Ôñš_•sæ3Ä®äÌQ{¦’œ– ‹ŒV)iY…¢àr›”Ï<©—,+œÈl^2ŸTA¶ÂåÒwW6_ ÃdOÅ–æ[CšÅ!Q¥’f•ôN‚ô=€ÜùipjëHf+”M'ð¦^“¹·Õ h­Tާ&-ž†î*¶%S~D{6‰ŽsŒ ¸>Œ¤PU;\#rPïw»±ÓFî÷{\@rU¡zš˜.ñ7ÏÖ¬Äñx$ºålçVÒîÕ[$<'‘¤ãS¤¥X ž*¤Øø˜IÜe¤Z¡Z'ó›FPÌÑA°ìÀ΋ÁŠ–ÙM%À‚ØÅ½$ʹ¨,0?Î&È B˜VBº‘ê\ ¯Ë,ÃY0-3û©±Å:sÅ<êžt¹|C&‘-9“%¬†"øÝ¤¡.ØþÏ?RD¿}ü)ãfÒE a۽ؽ̒–€¸ä'ðÿÃÀ‰p@€ ¢3Ó‹Ûnªžg‚ˆ¢h4=ÓvÛÏU_=)±|Ò—#ÂÿÄ{Ôp¡æ‹V²s#̓]NÎKnj×Óx{sÕÙ§í£§ÛºXd~¬–Úe9V¨µ,¿i,JcöºBþrvv&´.“Rv¶†}íP=ì%˜ƒ”Óá¨à:¦iBô”8(ÅPDßÈJ¥Ö‘ˆÐú%­›ŽÿÑæ\ŽÏ ǃ›fe S“Yzh½^ÆP?¾ywUTHòêååõÕÛÜ•³²0ÑôÈd0” 6(b%ÛƒúcÞŸyRAI‘çž äžy´`vCR׉’O¥œÏ`³/ž$b¢nÊÈT%tÆ P eK×nª» ~eV•Ná¨zC7G׿ðK’Ї)hs¼„Ú!À^ÀRPÅ“çÉ>+²kkycä~S \ã\6ŒÌ”Wi§Hé¬rŽ—²c©[{¨á„Œ‡,¬àîôc͜ǻԞTŠŠ0Do ùÅ"ÃÓ›T”•úp½þ°&ªknÓë÷?ªº¹x\Ž^}½é/ΫµfÏ R–J+1+½ã ì8ns¾ó5_Ç8ŒP½ºsÔçÑïÄfüqbŸðwŽÐŽ™‰ªvž #î”9ŒÂw•båaÞ¦dɇ '°È>‚ („T’<¶ø«tP¥²ù~FÀ‰,/M*&ŽJ¹+7QÐÏÇi×uQÐ/Ù„\ŒTÒ‡ÙQ‰îõŒš–1ËIö]±G©jHÔº^Ááa0˜IÓno¾}Ùž¬07P ž¹°¸„áŠižñÜÛõ ß¶Mœ}¿»ÃêaÁñÇÂÂ-;0ä'?=8Ù¤8B:f¿ËãDÒ Ýg”¥ Ë΀óa¸ý>áÎÏžœãõ¾»ëºàºÙbVuƒ4€«¸ ÞGVÀWÀ3®´p…Õf%ºnÕnöÒö! ge/ ^꼪f„«^]5¤-’¢Æ£ilÃ>i¾„ïm™8w*syƒ• |Ž¡2VP½Î£¸$eN˜"tcË”d_’|©e0R2ø’Aµ@skkÑý=æÄ§›Ÿ=ÑôÙ<÷¬ ÆÎmÉ*š-¨1èmïl®Sâãæi˜ÑÙÙùFgÃÔó5sjYš%l,CÃTR ´j‡Þv‡‚0¸I˜}C³œa|0¡ ¢Áˆöî‘ÙŒ2¢oCÚØ¢¯#:úxñ`ï‰ íûwGÓ«Ë·oŸìت4^¦˜”´vîèhŸ$ŽãŽ¢äè“ÖITÇFoã\{Fô)uãÊË2(Â"KË$˳ ŠX‚ý±º™Ô?® )Ç•w|D¥óókJ¡?"bDEyÔåRß¾ŠR5'ê•”´–2ñ…chEfœ+‘ˆ[êŠkËyÓñ„Õ³tªnuKä ù€ NxT"MQ´]æ"îr,íE…7A-:ÇP›©yÍçi·»%ˆ‰;vQ+»«Ý^´Â:GÍËtvww·ÛíâlH0¾Á  o– ÞÕÆgnØGÎu:RZ©$3-\k4Ÿ___Ÿžžôz½ÏÁì?.¿®~b‡B‹!å ò>»MX]ÎÔ 4)XƒÖËw\:Of•}†b6ä ÞCGœxòØŒbmpX ,ûÇ«¯Q5ºN6àñ°ò†sŽÙ”†ÝC¯pLé®^ìvFÉH^«eÉó^Ï¿jé<Ä6Þ´É$¿fÉõ¯àˆ•$ª uˆ°Þ¥à„úÖQõ¿Nû-#gÖÛ4Eáñ6¶³ºiœ X*¨!(ªP%Ä_èŸå!!a¢ªº¦©º¤I;^Æœ{')…'ü”È–ÌrïwΉbÿ}nnè׿ü¯®¦¯ »ƒŒ›Jm2Sk©(«ä'£ŒaŽMÒ0óÙÑþÀ÷:ž\YYq›5 ½EÝe‹5-\‘Bª—fŽ÷>·½š41l®´›L÷÷÷vwww6›ýúüçíímü\«ÕÂhý~ÌÒsu¯× Ãp8 œ>Ùêà%Æ¢î* Ì‡ïbVîµzãìÍtóöd朥9æ ×löùt°ÓÜ3̤\©ÁæQ,©y„ø]©h¡éSµQ0(©ª5±dC®1ì®ûµ5Ï…”6g;¬T¤øÐó/ˆÿïoºþ€¬kÙmÛˆ¢äÃ7©w$¸Ž];M »§›uÓ¢ Š¢]ç úí²«iP¸‹ ŒDA‰"9‘ËzY¤$Š©ž;”›Õ‚ ƒνsî¹çÀP•Š\D™„½IC¶?å¿ÿhDbñt4<#¹Â’þËå‰og$ý´ÂÛS«f®3úÝv·õj½T¬U*’˜™h\L Eç$œi7d zNn6›ùþí˜,YS tR ËÅÜÚ="ûƒ¥‚hÐTR•º]²0"0¦iPãMÕp…é«÷ÈØ¹hÒÿÍø”¸£s— ¢®a^Ž|Ô|]–ƒ(Ò$ÙRy·ßk¼x¾Q.•-ëñ›æ¼ß[³´n:Éž£{Tœd²[ &žM†9véBç:úœ˜ÙãoËþа•¤3q]Yk@ÙÅ –”8PnnHŒ´x{-ÁeCYÚ÷¸ì¨²E_%Õù2²8ç9ØC4â†ÅRe:UuÆMs\ÏšDS®ƒÃ¦yO›Î—¨Ìód¡Q«•º&Mô|âz6"º–Ž¥Î‚Ðâ|Dˆ’ßÔ¥ƒÛ‹™Tu¥gCé¯ÎXî‡g¯Ñ¸üK®°¡ÐC'Ñ"|ì|æh¼Rô¤_;þñû;Åk¬ÓKþxô§k±·Íž’„¿ÜßS‰ç¬žurVµÓzýów‡ é{•[®IÌZB“Í%9ïïlþt,4ƒsÕ¤ˆÀLG›ŸToï²ýÝ›ö§£ÞÁ—å÷ë?|]ÛþHÒèR¬-}Nê³.-MÐMz ¶LØÕ b5³¡|!U´W&ÜÃ$¬"?@G,T.Äø—€œ.È¢)Ghô˜œûyâblŸ¢Æ²b¹0Mæ±=_Ì£Å,ŒC`=ˆùx½w÷nT­Á|¿T* îdŽÊ9v·sV«­µÞ4+ÕZ8 ¸«¸¶…Ö¡Ýn¬o4^× ë×b:ÎYû= Ò2¼Îy×0me5ÖB3Âq1&EÈdF%¶P…ÉŸ–.5UWRÄ=7R¯û–Â/sÔk´}¼L¯I>h*bŒ  ’I8zä 3Ýe]êÕçȸ–ݨa(jljí¼&ɤOÍL»AºD°ìøL]– ˆJécIÆ ç^÷1‚,*k&M3v|î9çžé3ÊcpÆšs©gY–3Ö«`ÃÔ¶>$» Þ('”g ýàìxÜDžwýt ¥]»¼¾(gû£²œÏ—ÆÄ”¿e ÓCAéÂ1ìPŒâX¼‰md)f@ü ¸¼|ƒËƒQ³‚îzr‡ ôå:±€îº½¥–ºpÐw~ëÿ Óv¾7R¥ÿü””_SØ)lG›'¹%K´‹Ì͘#ùئAÛŒ”~süºýs“òh2íñ¬ÇIž¨ª^v¬´ù2ê1„¬ÛPBɶ%»€\%¶ å†:ᑯÝ>ÈGÉ7…âçq_ÉÐrÓ„L3 ›HÄÁ`ŒÊ >Hi^`„ Ý‘ò¦Ú«CYxÕ+eSŠžt.ÎK‘v‰¶¢Y‰€ƒ1Ìü*¤Ô[¹N²R:,ƒã®2½E™=ç8]ƒÂÛ¢”ô`ú}œØÒo­:‡«[³a܊ݺ}ˆî4ëŽÔ*1VÚÝ´]9[ÒƒXhæ ÷”'1´½IUQµ«‹QS×Íb)9(²f—Þõ¾DáMNˆÑw¨%Lw= ÃæŽðD ;꘾ŠT¸ð,tEWuQ7;ãªÌÁ¯²< 4eiØO¬¡Ö«†RÒÆ†`ßdÂ6Ä ~<¼û/Ëìûþž§ø»€Ñˆ´Õ¨À»ßÙlvùãÂw ñÇE¹Z­¼ÆõÛ7Äǵ„S|`|rr‚©;== íììà´Åb«ŸŸO&œÿùììÃû?/Çe¹$I–EáEžásáW0iwó^¿þ}uõë¸ÿòÕñ¨„ÄB+M†©ˆM„ê¥0)=‡á9dáË­âçŠ*ê<…Ô}ò£ ¨B)AÔ¡ÛPç‘NûîÎùä“o…ç—~)ÿ§í>qÄùa³Ÿúà6> ÛêzÛ6‚àñîHJ¤()V¤Úrܸ7©Ú§þÿ‡¤!)Š8èÇC\GþH(‰¼;23{–$„ DQwËÙÙÙÙ”Cˆ!¤_äR;‹ÙŒ Ú<” Çw ¯cÃgçU¹3íGà×÷yA0 ôiÓN÷f¾ëë›´sYæÓ1¹Lzà:æ¥Lìäóƒ¸àK¢±©m…•´ÌUV€1ÄŽ5ÁI•oê3,@Ð@§zd‹r8´;ÿ•ÜD­ÌDe† ³þæ9(²h-Ã7A” ±¹&` ¼ûœ/Sö ë:ØÆ=}<ûýåË?^½žųç'ë«Ô£»$ßq!îêÊ[éuйЋ` xZC­;ÒݺÝzÐ×´•Ì*„Ÿ[jRd´XªÌÒ¦˜ö°A £‘ðŒ%M鳤ÂjÊVˆp´É}i{â&R´ï’ÉH•A¥CµnPª¶ö6Û:Þ®}°ÎäÒ×£™=£îƒ<–f)‰>ˆj«ÓÑÁâ‡më/¯.‡û'Ëêìuu¡²ƒêt®Ô¥²Ãâ×5j ào³U¿-÷Æ­:žT?–J`L=4=*˜H—³ÙTbki“9n÷Vaè,¤X`–™*°ˆ¢#އ{oEîŸÕé“YêÕ³ýñÉb\ÉI¥nhõS‡i6Òž+% ¶ìÓhÝÐòÃÓžáûé¿.¢ün°ˆ}ÊéM’Cê–ÊT…øë´§iÅø s±Wй…^JÄï,Éð–e­~]¤wÁK~@€;ïØÌK¤…ˆå¡«§¾eµgu´‡³3)(/bOÒÔëXÓSÌwmä{ÄSò#4xâ]ÏæV¿«÷»@2Ö„(߉ˑ֛¼Ï÷†Uy‹-)r䈜]Bãqr.(±(+i"uóGÚBU¾Ý¬ŽÀë.øˆ³¼T×"–‡ƒïþ÷ï?×W«ù|²¿º¸8;;ÇÁî7ødðõçOëú3¾j6ë?ß¾•¨Sv8¶ ‰¼¦ê[e­ö®#ÝM„¬>Ü\¯Ê‚l¼@} ­1=©ªÿ?|xqú3Xì»ó¿–‡‡X¿Ïß–GOXç 9w@žAYU q= JìÜ>šŒ~:>ªoWìǹ€|V2¤N\[çÛrP’~ ¸GgG¸0Ä%>¨Ý´)I„MŒw=ESæR öâ²l”壭³Atuì%²t´­íéwGÜÁØC½sd}w|€m«iJ#ˆ‚3»;Ì~ È‚«4’2V%Wÿ•Už=™›G !ö“t¿Á`L,j…vvûõ{Ý}@y\A|yÔ[@üÙÙÙél†‡±5¯QþÀëu¸·å«_êÍqNp{wRLÀQÚrêj]·¡!nMB è— Š/5€3X#ø¸¯J"€îEu ìÃõ¡:ß´ÕÐä(NxfžgGIÐt‡Òów”bùÏVÈ5gûÞ¤J…£6çÀ]°2¸®CE ˆ•(÷å㇡ t½=Ÿ£Á`—źnÀ·ZÇÖg'«êÈúMÔRÕÙ'wíUì½)V.* ²íùÜ„ø@{­³ßÏRUÚ½PHk¥k£7 -` ü=ŒÑúI  !åþ#YIà#P~Ûªõ–ÍL/!#¾#‹ …AÕªjšŒó6æY2;,g@4)&§G,^!.óÑðó;³Vækùœ[ÍT©Ò©ñ$vµ*b•')a¹úùþüxñ­Ë÷j–Än­Jœà5±Qê’rúVý ñ.ÓA8šLш¦¶}Ú.ˮڬš£#´íy–€8F6¦É÷'€E•åqùô<ŸŽÁåOFi¸«W?â¦w©nì€}Àt²¡îßz+¬]´ã ðCE søÿ¤ÄKÐVÀ߈«¨c$)”nL½—|2¢Éš³a#ÁT¶³5mZ;Æ¥$JÃ'X JYn÷Nœ‹ö–^ª¼°Ô-×åXb;÷ ýåQ÷­z—µ÷쉣Rt,,ÞááÃPÊ£¼dú½ÓBPDF6ž~Ð×ëkÂÒ8#F¬uX;aiêˆo‹S²ÇfÀ©$:¼8e„Í鶬LDÝrµZ2F°],eYúð¾‚tƒ‰_\\sÀëïîîA777øËÃÃÃíí-À7µ1¶åf ~yy9ŸÏѬ@æü°Þï0MS >0®}¿ÿ¢(¼‹ÿúúúññ1φèðZìùêêîÜß߃æWe³\.‰Ŷ‘üð˜£Ñª¶iIŸÒ)¾]?ƒÖlªŠN›‚še‰¥ÛrסæQm£)JÉ @-GË:ÐÿF/­•‡(…!C+¨½<i‹p}åv5Úˆ;“­;®1%Ö>åþh­ú Ð{aV¿Šµ¾€äî~ ÀÆ•ì¶ CA‘ÚimÞ²4‹ch‘\ƒ^ZôÒ¢×ZôÿE'ŽkØò&‘ê<’µƒ6—$”@–Èy3ïÍð€ò+ _6tЉâ QpèôïQž þ}Ý’øá!“CŸ¤™ÃãV‚?]Wõjñ{]fEÑ!„‘Ú¬›EœLN¢!œ ÖHƒÇ*È-y´É¯aŠö&j¿G¬t„#ó—ÕÎÓZÛý»?Mbë%Ê[ñßWk ÕNL©ë$Ñò©h×fÝP÷CU…×£áôç/áó,o7 ,T¹ ­«ä&ÈOGŒ‡kHÕ{‰vECAš¨){™N ðýa Æ)dìòtЄaô|òX)™-ÀrˆgNH±l <Ý(¥3tWJij¦'ÉâèãŠ@?òUà—j'É#FÆÊá ‹™JâГ~¸M%w€Oš„xô®jF}Ws à>^Çi’‘h&Ï¢š ÌÉ•ÖbN.”!\!¼ X¼,›°]»•Æ.HݰœWëz‡™ Ñ œB´ÊÙüyÉE¦{Þ£;œô±Ú§³§4‰óNʥܨÉÓ¬èöÛ¨Ë1›®°8‡ƒ"ñœ«óShºçñ´2¨& ˆÊQ? ðze!£¬Õš’ÙN<{íT˜ÆÔ‚—‡ÄX ìY¯öó=¹Q:,E³m8EÞôå˜Ay%MKì^GÞs=U2½r’ޏ†Î ƒcÃlAùAäqhVšä¸©9{bj¶íŠÜ‡$MMÓÆ0zÓ+Ô¿7ªß2ýZý8å6oŒ¤a–y8Fí‘åÄt­ô¤Ú©]_2êÞ+`–^?êP̼ˋ³V,ð1!‚4â?{ž¤»õ¯OoµXN'óùüÍñ‰Yü(£ÑDbps}}5˜a'/>}øøðð0/ÎΡ¡U-qe;/<yQ|Ò?êµ;¨²Èúø·ø¹Åå²üñíûv»]-˯Ÿ¿ÁŽ{ýáå ÝîÞßßYöþö¥e¾XÜÝÝÑÉŽÓíYZ÷ƒ ºy÷¶ÛíEš &é•A3>çEêw{“Ç)` ˜„Uj¬¢¸çÕr-¤õ-@Åðø}I…T¢•n§9¨é£$·Z†ï䲯ÆrPÑâ(Yû¡T¾—Ù §îè66dí%q1Îÿ~ëäñ(ÿG>®e·mR”(‰zÖN“vmOrôÿÿEÿ@[çÀEZÙ–õ`g–’ã¢EƒÀ‡‘(r8»;³o(éð}0AX7Þ“†;7ó§o¹¼fïšqV£ÈIãô€žåÙ¡óRdê[C ÞÿV×غ¦×àÂô¥aB²å?ÃqÒ€ï8! ¾kŸfIœ¢_ìûŒÛ…+ýõ­ø\IHéì\B÷@©eÝ­S·ô®úƒ¿wyù|:ç3¿ õ9nP‡&éñ²té—›%>ᇫ,SOp± Yr®àê 6e¨ýg ,ø¸)ëù5lÓU t/48~×Ö2Î0=Ãj–H2ê Ãp,&«u&º tZp‚*Ù¹—®®Äð3qNÎø‰¢1é°*Aðî÷&ªémq5ÓЇ;Ö ã¸M#£púnìh´»å_ᆤ©Z­º”ÿ³ÃÃÙ’eõq™}U-PRÏf§2˜l®®(WÄÁÝí-N9¶ LØÒÊ$,Þnoþ€ª|ø‹íáááëÏO&´4¡i¿ûxÛ0"‰Ž!~kOº‘Z&ÁYâøØ!ò<¿¿¿Çc~>b˹¼\‘÷/ŠíöòÛ÷ßèðkZIb@¼Q]¸z¥PY´A½Kð‡§ó鸻Ù☤’ƒÇ ¤k‰Æ *ªjtK"–O¼¨bq"qbJ%kÃi©4µ%öÏ/¢î-5\nè:÷Ð!Q â23 ™³Z<Ï .¹'J£,ž?SPI<•"ÿºR%³gfQÓ[¶Ó¿¡mëïÏO[B¹ÑûîiÜ4kOCO›/ ]ÁÌ‹ ܹIÛ&æ4QxÜi½RkK8½à¤SRQt:EÀŒE‹žµ8¬ ôí L(_ˆž´¿ˆñG/[z³aÐU‰`êÖÂÐÚ… ävƒYl„Ž­¸‚”ÝSЍb°@z£U-ý [ø«MV•퟿áÛÇkvÔ—Æ`È®ŒvÈHʯâXV'¸©(,¼?Üê§ÁišFXüð’àŽAÖ†ÎKÑÞ:È»vÝ6ä´Pn dÊ2"‹=c§~¶mÙu[ÉëBJæËIˆjøY¸h,xu*Q±Dµ¤å*âÌwóÉ“x…ƒd”X‰/Až§µ!Ó^±çÀ5Ñ;Á½ê]ÐbaÓéçÁy…m€ 0OSAÙÂàª0tæX 2'RÁGK $ÏÖÖ€P˳gKT²Ýã•‹+Kƒ"¹Ïx»CjÉÙ–3ú•˜ó0-0˜G¯4K(ó€ ‡R1÷ýëqqêKÖu:6Ä>Šã^éL‹û˜Ÿ—mµQÕN5JŠ×ï¯ou]Þoêy_~<=ßßßKSÁ°åÇï7 þªšúE³@Êô<ój,´ô~z}ww;[œWׄî'm«ýá½Þ¶ôÛnoow7_O§£ðMÐI[Ý~ÆÑojP±èG˜%M SBÏŽ=úfÓÖïGµ³5%¸!ýàá_Ác¾âr åÐ w¥¡£›á`(ax|à.KÇ¿«šë¼¨•²}E)9¹”Ryøoš<"Y†ÃŠê4|e2ǧpqm=MDAx»»ÝKwKK#Ã¡ÐÆPCB ïÿËðx'†ú¢Ñ4”‚S5Z„’TÚÛíÞÎqfÎi¼ô­Ù¤—³³3ß7ßÌ÷'ËÛØcb(ð‡ciÔ'R“@˜Kp@²ÁOZ„+ÉcS:ØÔ)ú7ÿ@jt1DJZºbªÊÄ~Î?þuõÓ1  o¦¦ÞÞÞ(ZœÏçcz† ±!£+¯“±hÔ ã±§)¸>×D•Ú€?Ÿ·,AYÚqhÂï?£ÍL3e2?aØ„ÄT‘ÓÉF̼bFEÃìªë¾?z·P…­ŒóÑ`xES ‘k™QŒ ƒÈ°Ü#pNg–ÈJÃyZr! pá^G«J-LvßHeg”áI#$@4òÓ .š*Ò(ȸ‰ç΂‰^Kî 0ôG’o˜.*.)½Žu+H” áºiÙŽ9Œ¹$bL?kdà÷Ãÿñ˜ïfÍá·²öÝØG[ËðÆpc*êŒF]•Ê⌲gg ÙG»ó9ê«ÈO…)š.\¸ØâTÿæ}Yݘ4°M‡w†ÉÎx…(ª–ãF´Þ— ÷¦Ð0ÈM%›b¤G– _¨ÙF”(–C×(QM8.Ÿl°Ž±à¡üµ9A!$Ú4l²¡*n$*ÏlTNbêÄ¥„j€˜•Â¥ØÇ ‘ ™ÃZK\^ªtŒœ&Åäæ` £N!L’Ù¯rêàs©`|ý!X(W–;Nûó§´ŽkhÏž>߯¿<ýÑ}´X\X(z£dgçEiyñ¢{¹µUƒ“ßÝÝ휜t:ß ¶··ý0˜Ê½k/›uúýa½^Ÿ›»T T*9îÔŒÃÃ#õübqÁ÷ÇÝóK¸šËMCë_{½Ü(9ÓÓ…0ŒG:´Ù6êЀe¢(–ó쨰bÄRéç:×ì4jDØ¿E[(•$ÍvfÜÂüÈï'£`a¨b<5N8dcDI)ê HK ☠䰆¸œ¶žSâù¯ßðq=?MDAxßþhÁ"­h¥b½PЋ?H„Rh´Ô±Þù›h LÅpQ8¨¨ ®¥¡­%Ûm»ë̼·K Ä6Ýͦíngç}óÍ7_ûì«ÅñPâÚY¢®EM$lX´¬…t NyõfÕ¡+ug.,rÁgfþ)|¹´ì´¬S±ÎWæÙl—–s¥ã",3°æ÷’<†äýŠÅ.x$nîA©cÞ—K”-ã;¥®H°Œ;h2nÏÀê¦m;~0ÂFÄ“XÉPm_ò§FË3\jƒ.ùI4›R=Ê©QCKxÂ=¼ŠË6kÉÖ‹9º]¹Î=O=ÆÝåܹn57cí„9› ‚Ä-79®$Ã.‰#éÔô8¼÷a ’ ú(1SbždbæVੜ™ ügncð¹<1‚_»‘·)Yà9 û¯ß®8qhÙ+*äÉÃÅ–Lè•JÅŸ¯aš·c£Ð ?ýþ«…ý±±X0ìë @Â-•Š€èþCù²¶ö>‘˜tV©œÀ »ñéiøH¶0v\Ô!€Ãƒ!ÞãŽÇãúÑï¯ß¿íïí¢GHÓô¨ÚääÃõõõL&“N?Éf³ÉÔ£þà`µZöz»«ëpŽa Äfl°OÓԽݽ÷!qC…î XÜZ*^t6îê"nsÁ7á!C›ÛòÀ¶‰mw¬uènªC¬)Ó\†ÝÔHƒƒfs¢Ák¡­©âõxýŠÖ¸Å’êÈe¨H#Lu¼ KÜdx6ëŠÚ™uNâøOÊ®¦·i Ç­ó=Yé6VZ E½ &$àÈ;‚¿:G$.¸Â.¦ Ð LiÚ|¬é‡y?œÔë8°*Š"×ql×~ýøíó>ÙTf¨Kt«ûD!®R,öTÂùõ«—h¼Þ¼»±œ¯AÕ‡%‘%C£è”Q”%èÿñáJ]{–Þ[“m(鬮XÞ› êëÕÙꕱu»z@ÛüV 6ÈÔß]Ïö]/Ï2ŽŒ™I—#nÜfMÌkS¢Ži×¥Û¬ߺ$÷qs/4vñácÒB_Üò¿xÁùý§Ä p×9ªfë’ƃZN¨d"dîìBæwHÇ œýb‚–f+Ëšv%ÈFó—¥ÁÅòêì`+jìä91­MÀÝ©³],t"¤p¶Q¥ÖPBÕÞ¡ö¬óùL58Rà–¦£ëÃZ ì©‹zé©¡\Ú¨“JòéIŽ™‚}éZÝU(í(N©ù[Ê‘ÖyâìPéï"çïôüY_€JËfNÂðùÛWA ü%{_·)¹(ëßÀÒÑ,v ®JV±ï‘Wmµ[kH£6我´¡tÂé`QŠ­Ê³é*°ÎÅÌ@|?èv»é8YTó½ýnmgÙ . Ü?¿G`Ða²ØN»wï`0LÒ$M“ÑÏe6ã³³S°Ñý~P|™ßó wE÷zi2†å_èÏž<=ùrÇñ^w7›L!3\@Ýn‡[Å ™ãn;Vû»ô°¨R5Eš ä`Àà½÷lm²l–e9æ½güÞÏìp-å;AßÿÂ×ohÅùüÉœ£hÍC y-÷ÿ'¡sdQD”`LÔtø'ƒ ë }Å­•AæJ‹H<1rRÖ%ÍÙ” ŒÞ¬Àp,¬Àø\2K¿ùA÷d Þƒ@»2ô5gc¿¤€ªƒþûBü%–誂ð uÿ:XfÕ„UÀõ@§Êö!ù‡·/û CqsJf¶;´½Ñ™7âžÇîf¦²B0ï㥛Þj3¬½níNÍŽG,3âÝMã9rŸ×éw©Ö•µ*)Ô£0GC]ç(zËÃ:‡ºÎP7r?M£Ýîy¹Ó"þG¼ºÞ¥>ÔC”Q;m™¹Õ*¯Wdµª [±lg§¤µi¬L!VS´g®+êœ:— ßÞ0ÇÜÚ õe-*™I™–µ J TæÑƒ ÃÀ%ޝe«Þ¨ï†HqÅß¿E'‡Ÿ ÕÛLíÑßT2="ïzig„µý„%ª~ü[zþsGú!ˆ¶Í6I1mAò’yS¯óù¼*Êåry}}帯D–O‚`<ã°‰„ÒÞ/ dÑÓŸS}ß1 Šº(4{Ë¢xwsóñö–Ûöãb¢“|Zê«étè8Л§aÆ;ìý~9™üzz*²\¤™"„Àk°Gh¥¸ž³7áÈâÚR–}†žãÆQDZë8 0$*Y—@1B„kj8yÞî#Û°˜–& ºaà Ï]×ã I¨5Nä ´÷:i5Š—þ–?Ðu­?MAüz×;¯ôA-õƒÔB±¶˜Öø Æ„&ò !5ዚÈÿ¢þC˜@%hˆ‚ZhËSãµ ÄRzGÛ»sf÷z·-Ø—íîön»Ù›ùÍìÌo›±<‹F©Ä¯£yŽÅóDÿñi™ê3…—M­µÊTîÓÏøÄÔI)¿UVRw$loW tƒî˺ý”–FwA±ŠM¾3K|ðô`+.Tyjžƒªqªm“í>¼Øãw‘èÓšv»ó’Õôâí¼é¸m”éFm7„åñ—¦]<:,¦R©P°}q%·¹¾100‹ÅÜ.ys}5»œ‡Ã€ý ;»¹ìr6³ÔÕÕíéimõf2Kkkk úûûaçÛÎ{þôY2™L¥FÒ?åóyXÌ}}}ÐtçÆÍ™éiWB¡ÎfN!(ŒÂN¥¾S(ögoÿ¸Zk6“ÙþþíáãG~Ÿ·°¿PýÍÜt~26öëg~)Þ¿¼‰F1è󨼾ºR*+ñëqÔ BBíAç°]„+L–L)ÐHüg`ÐÒkIxd ˆ)DC8dz :3¡ŽîÕë‚}D)É®&Á8$¿^”[Ü’ìqŠ.UuÂM¹­ôÿcD6–5ãX€þO®¶§i( ¯íÚµ[7¶á•¡n8f0À" ‡ L1ý ñ¨Í„„`Ä ~0‘`Ä—Äðb¶Ñëºnõž{»Ò-—eé¶.ÛÚÛç>çœ{žÇ^'Ho¨"V)a•/˜àDy˜äï¤GÍ ûÔÌsb øWjOÀ}r"îu@OÈ;ú®ëC0j7·w›¥ ‡Â1Ž1ž@æ˜ëwäJ©LlÑf()Î,~Ea¤·ãîµä³ùyŠ(‰Zrzö¥F•ï§Ç 817OÕNS³î÷nMÞ›ž}aÿôh ÀýÕ ’Ò#ÃãÃ7æÞ¼¶ý›d‘³r±P£wܤq8Ì$b;Èš»²˜ò¯hÍ|«;H­eaâŽ{ëØŸÕVÀˆ7qï&èoÊ“l°çŠ¡õf(¾áb¸¦dŠÚ±0ް FM’‘æXs›غn5ôKÖ4Ýš«136«¥Jœ¥nתz’±l‡Þ=Üš„»p|VŽ5´8îŸÑ|SYÎÑésÃÀXÊ—0‡0®<cÖqP¨‰ö6‹°œ:d§NÑô.È£?ˆ§U\âÑ-3"®_@l4fšÖPÓÖöï2Ö®F´IŒ PÖmË_>“åÅxüT.Å{ªc€éﺈ¿ò®ÚŠNõ'®ö&ß/-ZÏà‡·X‰ >us`Ø"ì0>4d½ð‰é…­Šz­ëzÈæ2Šªç2ªªˆ:‹ù!M³…š¤Âñ!£—e9çr O?AgÑ5EQ ·…#ápŒ[Ëe´Ñ fjšÇeÍH$¼¾¾&ÇÏÉ]ñË}>»D4ÇØSƒÉGºEêë·í‰ñ4/û{{>¿¿TPÚ"‘ŽØX`#8ƒ’[–Z~göÑGˆÄ‚(òîèy%œ ¾oìô%z’ƒ|*Åò9›‹œ жîöv¨d3™IêŽwJM§Xò¾µ%‹F|>Q ª*°ö3¡VlL§ƒ²B Vý .QQU_ƒ—ˆÔ»œN7qÚuìØKäl´I«Ð|OrwP}Á&›X\˜¦ 8SrT@ÃDhúÌ*ÃéZ±¬[Ì$þÇâÍ&u¯ÿ€²«ûiŠâëÇzÛmØÊ6>ÛàE‰1>ú£‰>ù4áA1J‚PL” ‚²•u[G×ÑÛzνm3¦`lnNzs·¦M{÷œsÏùñ"OHu‚þ¬®o X¯,p6ݺkº1ÖD}"ê=y rõÅz½^o4Z¶Kcp!ž—XªÛhŒ™'ë†Ê”CÝ3zÐMû}°Ï{ÞŽ–²Ç=ƒVd3†šíüw¿Ö„®¡%/çðäk‰çQñ/wö@çêu»koßA÷Ùò²m $¡ýõj¸ûÚ‡õO=ˆ´xñ‘"ÿ äʽÅËý<ïßXº3¿|÷ÊâíÊ­RäO—¡É˜tÁ-ÉØ>ÃèKêÃR‰Ü)ApþåþA¹ïG.ìøQdAha¥!ÙXBç å&ŒÑ£3¤HEU'„o‚‡ÈuB°R—áÅûÎymÂ~ÉýËHa—póŠpÏå5•U†d†4Hñ½o@Iî1ýõŒ¢¢¨È#Þž*ËZ¸4JŠ‚§’Dª >×ÖáØ©Yµfó¸a}0ñC*‘նÏhÇó;u¨ïPä—ÛÓËÈ¥ÝóÊG–g©<…Öáço‡0õiœ˜Ž^@1Œ `>ñÛŸÞcHŒ(línA ¢T-ÿ\Exll¿‰ÝîK7ÄonòÚÇÏ_oÆ–4ã•ÝÜá)D‰¯~ôUç #­)Šèéº.f´H¢¦ó¤–Ñ5,AŠù¼G{í–51^5R³#z³ažÚ­jyz¶R.MŽÏUKf­~°ÿUsÕ§v;ÐÙê<ÁãbËj¤42Sš¢^ïç¡5uB…£Ãïåéü‰Y+æU¸ŽžNÇ YÛ×Ôä¨>Æà¬J’ŽÝí:ŒR/aÿ2rÙj~,›N¢µ- ÝÉb!£ÖŒž[)Oò†ëœšH^¦Ù\e&K\(I9“R±)ÆvûXqZ’FG† wS>ÄN4*œX&*3"æ^aízV'0¤”Mð ã(Œ‚ݱò{­’$+DÕU—d-䔌>QÿË]3°Ió[ή¦·i ˆúÛ›µã8$B q@µU8À‰ŸÏ™ªJï(BˆC×NüíefÖ^Té¡9E'ñÆñìì{3ïYOÁ“ Ø-:jQY¿tÑ>±ün´=Ô9eYE¬ÛžçÏ›îŒÉ˜Q=oú[NÒ ês•¦žØ>ð9’‡”/ÁÚWh lÇ“=ƒUýÛ¥nFUYvÔ‰N]q)Ú‹(èsžÏ;X}ÿqov‘£ ‚ëxß¾¼é–uR({ÂY* 2Y°x¿Fßþ+w¯«UwدGqÈ}C'Ö¬à1"'ºšKšH™ƒ]0)þ#^"ýÎT `Ù#Æ¿ëQÐêz>—ñHUi“Œý¬ËüðcßN!žÓo,}6ØÖs|“zTFƒ=1«ÎÜqÍñ·ÀÚ©æË|¯«tQëœfÉqÈ™ÄäÚ«yûb¥ËÚyš¾!‹×U¾f~½ºÆuåþgß·BÂhè8'«…ZqÆ*HèJ’aòWŸŒHp˜öÓ#Ÿ‰®a’ÆqŒ¦(l±9rÙtʹaü»–¹Ù®óüTeà¡6dÙ÷¥æL†¾ïYþðÁær³^¯–Ë(:À`SaÙ4ÕáÃ`…÷f^m·[δý>✣Î>a "ûE’”?¼½»ûýþâ!æfUš'úy½6Y“²aš¦è}ŸÞí>]^IPÃö¶žgÄq¾X,`ƒARqí«pí8HÃA0Æÿþݿ͹‹ª”uíRQpšž°c¿, p#„S”ä!5ªê†1÷˜fÒs¹RÙ[ŠrrH~Cž]±Þ iÐb¹M+›ôd‰"¬˜ÙöÒ0¹ÐSNï–”Ä1ŸŸãAr&ÃÅû/eWó5Å3“Ùd¿£ÅUüÂK…¼õ`/Bõ þ¥"(ˆxñ(Ńzn¥ Òv“Ýî&3“ø>&³ÓÝz0§$„Ý™Læ÷Þ¼yï÷SÁ3,YÀQ.‹g.hW¤¡E0úöãçO^=ÝwÎéûOÐ9¸|ýòßyó]£7ãò›ö'Ük… Ïóižc]E6NSeÚ4‰8&!=óõÉ9>"A´Ù«Õ´`Æä¶ãI7Õs‡"Û·²MÛÆÁ¯ðX£†ð„ÿï56iM‡#(xæŠê Sÿ•wôü`í‚XÆ¥¸<ï# ¹ˆý•±ë‘d /JžˆÐA¨¯’¼8g0dqˆW±gì¢M!½ùd8DÕ˜ørÎFøó–-¦««‘Ý/) 'ÌJ„ã¥`Zj*}Z7ŽóÔí9ÛÃ9ïòèÿ£jvXÿm¾²Üp¹öX‡Z¢«¦Uuum“´jÁn¥ âè U`á;h÷±e’‚+ÆCåðŸŽÃ?ÓÝÙÛ×ù±/G'um?¸¿=Ùâ;_ޤfâ¿–ª&$RñÛÝAˆ?üùsxÐ2»L´÷hïŠ Ï¨­`0®­¢ ÷nm~”¥W÷%Û̪ºäå}/ꥥé÷»Óei-â|…²\VJ%RleÃy1#lu1Ÿ G#@PhÅùÙ)V..Êå‚Ô=L8‰è¢og8è3Keåx›DÅœ:4Ë«kÈ+ C`¤,À TLõ½;·a1 ~vQ˜…&;Ö6Up޵R}ò ‰U)ÒDŠ(ñj‹Âfã±¥–XcBd‚3Zƒ o­îÂÚ®ON+d’±NS‘°³µÉßçxc5"³ L©^ä¾ù‡ëâꚊâô×<·8 I¹$•,µL#/q°„¥–k›ß“þ:îïi=g‹¼8É2PaÃ-)¼¶¡LGdéµWïÂ$LuºS „›Âs MItOv2Ï(‡ì¶ñÍ'Ú½»\N0Yñ×¾{M£V˜R˜ƒÏèÑ·6—£d‰3¬ˆ8ë$ÞôØÌûôœc •I«èkhKê9—'謄Ì&3ªîÁ‹) ®2Úàà$µÎúp{3¼5üè@R2Ö´ŽHë©øSÒÍ”*§€²HÁë%IB09Ö:žÛÑì#ž¼_6:ý½>¬Åç§'½^-Æv¶»Ýîp8„6íÁ`°µ¹Æñ—¯–Á\~eTʨO %Vµ:h™Ùß““Cšq¤Î=²«@ ª#A%ÆÚЄÁ_f/‹üŸdå‹0´‘É ¼Aé°…eU”'p.üäçµ, \5ª4ÀÔ¨?°vm-Q83IlVÑ_½Àöì“à“Ö—e_}QÄ ¢à³ÛÕÕJ±°+®hÛL“ñ\椙VPpÚii;É\¾sæœïÓïÞ#ä©ËŸd¤\¶qoí; ¿s@HFßÝçšÍÛ…U.¿Tº”*‹ºã~ÚONgan&ñÆX“XÓÌåî6"̃ƒâÄZÅWyÕ8†#Ø€ç¦ç³©ú,ÿ¦oıOÈú1cêGÈ}²GV¯7ÖÖ¡|üó¾oVŠ*ý ½ô׃‰¬3¯²”EÂVÃ’µK‹ [¹±ý<˜‘ûƒˆJ>/eøôõ†(To‹Ÿ}DOË)å´!—:îMÂÏ~Ít´†èM‚ËÁê•$D>Ìà,(øL­¤ØÒË­”"÷EÞ‚R=.bFȲ/`¦xMüÃРÕD-%ªÈQ'®‚MÑ.CnQ‹˜@]î-f‰êÊ,AzšÂÖâæuÀ’óãšé¦q‹âìéÅyóqu‹¢Óî®9l·‘f^Q “ +ŒÃÜÿ­Ù„Ëý‹sƒ„ŒC@‚F”!J„¡Q‚£ -ÓJèpé3uÁü·^bšª%cË€ŠÂait¬{ƒ>˜\¹éCƒ^¬U÷¾“6¦ “ŸÃßñ%Mn¯¯în~7¢ðùß#”‡¿`¡?iwW\ ƒQQÿûÎÃ"›gÄí&i¯žÖ4ykI »Î5ï]±\'ïnXÒz ­VÊ1&]IFï»HR;óšzOÀTt,BØ”mC"¾BM¦Y:›d³:lXÜYB]Šz¨´‡J'ð(ŸëÔ«¬]ÍKQïù»FH‡ðÒ¡²²KdPôÑ¡(Šú[‹.v*$ˆ„Ì:´t òBY­âÚ›™÷eZyhÙ·²«î̼ùÍü~¢×^tõÔ)ü“R‘AÊ+KyÆ`557m ‚i)ŠyOl<:<ø³”þ0»¿Àããð4pÖékµ¥‰õÏ–{ç +…:Â*gŠ ôõèDܬ}À³1æÅˆ¼b|taÛë'¢èzKºë ÷²µLÝñ”³:>-üSáflv7aå¬x>ØÙw+×yd_ÊܳŒ¸]*/ám½5‚bñmÿô´:[’ä´—0±?’Â8úIO¼¥lYV¼1'‹lþ=ç¡.’ïR#—B·wse”ÙÃ;\ÀŒßÕ0FЂô 4š³ûW#Íz²fØžMÁÑàªOÚm›v‡FèûŽî8ç’qT­esAO8,&Iæ“-`"è¦Ù1-WL1Wê…[+ÜÆÈ‰ä”2ž„à ¿¿¸ž©êÆü¼\¿¬T€óؤQ’¹NT é K¥rfÚJÏ,ЮnÝ^Z¦={ë+½Åò6qÏY·Íi$èç„¥ÙxÓº(QÅbZ‰©ìÄb>¿¶ºšÉdäþR©T­VËåríù™­étêߌ¸aáî÷®PjOW7€° £"m×õ!ë{„p>»YÉp{mÆ(£DnDÔ0T“WƒñܸS,/ðoCZéì‡üÔˆï§O¬†ä Lð_ÊCzSnüKÆ®ïµi( ç¦m~4]7„ù´|™  E‹aÌáì|ÝŸé6œE˜"…)ø¢(è6pøàKÊd©iÜM®çÜsïmÒ8Y %PnsoÎ=?¾ó}õjWÔ”•š-&’—ýÖ¤£Û&}‹Q`E/,Ò=Ë9­6ØÛ¶¶Ÿ‚•7þûº¥ÀÐÔÒ PÀ£÷}ßsgb.Zu6ç©—-æj1ÿCoð´WÖô®ª_|—î<9s ¶0ëkÄ$·,•®>Ãïq~¹e/\r¾ ’Ü|xÝØXW ãí]lJ*ÛQsþ¤ÿ|£·ÇfÿB;AwÐ[=P†þ‚&Þ \ ‹ /Ä¢R!7ºwv9›Ë*[‡Ô9!òFù ýé{ö³Iõãª[ºzËì.³‰lòQ „`ó0˜,¼Ï#á ÞR Óúø‹{^­ã²k…ÿòõûuzõ#Ù‹•&ZÞ¸[¼Y-/ž==Œ÷_ŸžL&­u³ÝšÏçÓé”ïÿx<F&G•K·Ó¹g–þ~`Gòû’‚¾Ü‚ÜYä¿|’БV Ðz,PTA±•†Ò›s“ë/IhßÊï_g9ùGÒ—š9G†Öm†p‡†! CÃnÀ@R»9¦jt¬Ù,[]_]ž]^¼ÏÒoúM±^´¬{s,—R+~è“C~IÁ"ùØ2üðîøôÍ[÷~ ÀÙµå& A¯ÞZJ„Zµç@½Dï >($ ±»³k›T©-üÄA$q¼»ãÙ™âb“ç+ #•bpÎèù²ç+Ô)\È9§Æ0(?ñ ¬íýåß ÿ2ÏNø,Ë’¿µM{°¤/±Á:+B&—"A5%,²ðÐÑpHÊ bÕ@Q•%£©w·~]ë›è»&[óºI‹ùD±.·wa‘ÿ ò©¢üëxúÉœ¦»°{°}‹—^ÊO·sª¸gkM’=àIÙBɲ®¾(|y𠇉 ›Ô’‰pèç…šú<¸ogëºÙG£I+nË%t%÷{¤ ÎMu}ç§z>›ÝîÀažoón\¦Áû®ä3¯J1MoätÆ6­oÚ†‡§° N›_ ¬Ñð¾³ã觪>ªÂ õYsùÓ`ªº;Qж‘î¹Þ¢/öLhë |æåúµ®.oÏ/“Á€ÚfS®ß·ÛÉtÄÇf3Úl–‹Å¯|ÖÓãJ´” >¤E_ <Ï`O¿Mæ)ן·NPoµtC’M.ô\ÉßmRÏE$ˆŠ£2KÔ¼G%™µ‹IHïMb‹é$$h ˆGGøø˜ÔÞˆH¨zËPŠ1|¨06öÊ’´yl8&O8Î-8È@,»kûÝ3ˆ·8#ßðuu=jQ”™kãfß¶?¢MúÿLÓݢȪ0Cï9w@Ü´}11F„ëû}ÏIÿcF&<2rÐ×îvm.w;œ¸té]ŠXÏc±:ô×[×-Y’‡c/'×G¸ÊÏ7Ƕux`Îçƒ1ÚìE{zêª*òõ~¿—Ss½cÜsˆÓb¼è8¥®®hîÀ#ትW@éö¨tfN§Þüð¼ÏIÄ(E Fð›8?4ðBu&i‰ï£ì/?ï­9ÊT„ )UPüK}F­L'Ê8 Sì¯XæzJÃ$vû€* ª°q,í§Ü´î“ÅÇ-¹¹ÞGÔâDëu*œÈ³ã:;²G3&©DI±|ë ñŽziUUI/¢¶Þv}¬’ ôåÒ{Q7êv “2´É©¾5Mûöí«„3âú?Zù-»¶mëÓ9[¬Å¶B…±òš×Í­Å:/ð Ý4íð^_Œ[·’ëìv+Þ4nbÏx ¦vû4^„ﳤ 6@FøÅA =C°-6Ñ“KâŽg ¿{—d÷>œÛËûáì\FÍÊÒ[ DO1ýUuTÖ¡<ð²´IôLâ1þ†v-Èk:Q™€¤ÀJìe2›‘ Â!íÓ)Iâµ;’¸K@eb®¦nŠŠüÿR ç–CE˜Ô¸å* 'Ì_TUe/ýÝ¿ì_†r³¹7  ÿñóûáp̶«_¿OòÝ¢Xo‹²(Óv87õr‘K6æ'è§W.*ÿ­ìù¯R{Þv6 ú´¦È¦Ú{6:»O +&F}mÄ|UâOe Š ¸–lãŸLº/€¡-ˋş¥‹&{h`A‚ ÊLÍRN€À•‹—¦A=<.“„TLd…Æ8³o‘ÓÊ-Ö„Ä…[±Ûƒ©ÌÑŽS〡fAcõÍé¹ÿÀÖµí6 Ñ]¯½¾äæ4\š‚*$$@ˆÿÿ@m) ¤Ðô;¶÷bæÌÚix­’¸ÚÝ™9>sÎS–GAN'AEÁ0 „*ô 2IPà?Ø‘[ÐQÒÜ\^|üü%Êgu›-Ví«nKa`ö蛹V2QÄlU^c¹}$ž”~!Ên[Úû€çô#‡·™ØÂÃ$OÒº©~\]ÎÊù»wçÐ釳]§uJÝ»i 3CAqUì…Ç#÷.ì1<ŠÎ$Íëºá÷Ü¢ªmczÞû£ Ãc·|˜0q|%²8ä·dd¥§j¯m8lheÚŠ®œTÓ­ÓÁɞ͚†Êb†Àݬbb„E†þSÁKëÛájÇG>†C‘e[:åÁ/7›ßgë70ȔԛÍÓ®kËI:ÎÄ•³*S \þ|½Œ,:zGQ•@Eƒ9×Éíõ µÔS–å¢ÈòͯÍ|2°k]ÓÖ,­Eëdx@bOØ1öt^cÊ’ßTâ7QS@9–AÀÍÖµƒ=(¾‘N-Ô8.VËéÉëCû·ë['R ƒ×€ÝÛ?DƒYÏö±|¹ =®Ì?غþÞ´a êØNb ¬…Ž©´Û÷ÿ"û›ö÷Ö©Í´ Q)Î/Û{wN •&!H€íäÞ½;ûîéÿîØ¾6½£úuÊËVª*?¾/Ö·Y±ÒæÅõ|p»_…J›¶¶uEš±f±=Vû²Z­+* rrÑÁÿu0kVK‰(Ï!ðÏç!ôôÌ£]Y–Å»åz½j¼£Îб «J<Ù©®x–Š •4ÇÚnJR[J‘4@µh<¨^wà\¼Îû›bl“ÂJ—É¥¬·Ùv$ÄI PVØ9Ù:x;Àn_œ0NÌÝ“èOìiEG£ñU +ï4uŠII{ £ëÙNæBJOF#wˆ([N=jqsÐÙZ¼—>nyQW#ŽäÚÎR0 bªç!Íà‘ÚÎq-K×ÒF¿À9³€¡zÐNøvçåñ¥/R©* ª¾nZ\—S×ËÔPRYå?Ÿ¶wŸ6m'V<**K¼Î0Ünu5ÔMÝ„Á,s•Áý“çî¢98Z[©cÄÝ(;̺u¾ÁÝK{äêÔ‹ºIæK"ò€?¡r™%‰pùO¸R]±_Ç©òï.èõs-ªªý³Ý³p2Ë öÚ)Ó{LÅQ„¨ÀÓ“tFu©¶ñâ’òððËVà‘ÙA¼à†ïD܉q­Øbb…Ö?7晑Âìx:%™X®Ó,®ÔǶϽ0Ë«Û{Ó÷f¿Oe)MöîÊà>ïöóìŠ ”EŒ{!g†ê CJkï+`9t¢S,Âvo8omﱿ•Ú‚ál67ïî¿}ý‚ïîÀ|Øl²Ùb°vW\ܦäÙ„rbƒä´(çzNÕ»˜yˆœ‰µAø@‰ÇÓ'd'‘*Z»Q ï6‚úÔÑqg , “R ‰:ŠFy–!#¹8ˆ)RmÆ cíÑ!ÚÆ ¡¶th§æIA6iväÂ܉èü¬X“„Mïü»eGŒöÉYœÎŸócSŠ'ñ)ÇdóÑ;º@>é$§Î‰¬Æ¿+Þ¶@:·½òÎ7µÔ¬³ac–gÊãǘZF%t®;d-5Õ)&­ žjÌßÄ’ úÐÑtˆ­Ò)°¬,£¹™?s8Þ\ÑR›Y>+©©¼ tÞ·¼rÌúÄÜ“<Øy2¯øñŸd]ÛnÚ@]¯×^Û@Ðõ’D}ˆÔö ¢þÿsß+U­TšXlìõ^Ý™]C“6O%!¶wgΙ™=‡=W,¥+”2u#РËÏý„k>å½ëÞîVwËËnyÅ-µð?ż–êNQcEÕäB/^§Úº}}@írQÀoLÿD]øãC©ý¿(_Pª•D ´4VV5üÜÍ—¿”)°ìÐl þšÔۓ­ ¨-¶)©¡ÒÑ,+š*T¥€¼„´Xd™éк*îCÕ_C>Xç`ÑÙš¦Ú’Î`™H™¾jŶªe½§VôºbÄ0t»6ŽÂÎñ­RçÛ ØÓw‰´‰DÇDA¾¡ž#p¢ÀA%×…‹†™èÇ hCÀÍ8Áê—ßu €Iâ¾­QÇ7F±lÉrX™²E'Š Ó’°¡‹ÉÒuºnÅh<‹;Hýku ûs¾|sZa³–¡è-uá¹ßÞ©ß÷÷W—ãÉt½UßÖŸ¯?=<¬]¤ §&dÄ‹$§E(ý!Å3D˜>w^RØÁkd A£ºsã°„KAÖüúÓÊéhµÞÇÓyjÐLªíé¦1gð›cL÷]G6­&én³_\ÍaÀ[•Ž!¾t•d3¸8[LRH'Àe}q¼#¦ƒX§¼Hõs)þ agX™¼ñe!‰GH(µM†\¯íû½Õ‘¤ÇËÙ¢²1;L\‚{å˜i•d¢¬¥ùáæs:š‘L½¥"b_ùá“Ý䉌‘©4èà’@æ€dT†¤,]†äeíœ2{I>~x'áEõ„r£Ùû‹‹§mYV•Z=–Zž¿:c1äò­0L® 1´† LàUüyã'¶µŸžôJDÇÊRåÁÃÏùP ¡2xR¢<@Yô1b‚ï QŠ Þ฿ǾšÍð4ÏQî‰-³XŽ…ek*ÕbàÆH+àV8—Û.é‡ 2‹ÇcÚ” %Œèä¢<Ô£¿3°“GÜúèt(«?±¯Ðf>>å`«¿Àø!†GC})# &Êúz þ‡1Â@ Ž3{ˆ‹Ñþ#´`qL,ÔOèpÈÝŸ»ˆ‚ß‚r¼iAŸ<ö‘_{±ЇäpŠÁz)` ç«q%ÎlÂhV˜¤3~n‚ä9ŸLÇô¶Eã]lT@ééÐÀOû+œ0¨Ü=›–¯?°u%;NA´Û»ÇÉ„Y@„AHþÿ8qàÆqe$!‹ÇY¼¥ÝUÝ —ÈÙ$»í®zUõªž÷SÅrlëºÎó.¬( Kॽ Ô¤'`7l§œŠÉ`Ø`¥YÇÉèÉì󜊖7Ø\ºÈËx˜6§n6›eQ@Ю!…mŠTH,1d|jzû;‡Ç`0|“¦äRzAKq¬Ê]YÅÃìõÛ7ðÆ8l›ÀG}=ì!vqHSå€÷ÖL‘< •ùø ;ǺlQ=+NÁm†ŒãÏ0iJ­`ƒ´9p)`ÛJ+Ÿ=qÙœDÇÅbS¬›ú°"¼+Ü¥8î4zÔäÊ©Ý*žÒÇૠاÁžC€‘ˆðâ+˜9"2€'Ƨ,ð ª'ž{SY²„"ðmyÜ£èŒ2í‡qæ&Ü Ñ‰V¾ø†hmÈ-|½ÞäeÝ\^ߤÃQ'­ãá(¶E½½Ï£(ZnK”ÊâÂjðåp:L|dóü!WY5ð|O.¦w«Ýv]\?{º‘ßq ÈÓs=Ì5rrhÐÌ’09±Ì,” Î±U‡#»˜’{¶Ú7ßv ˆ²äfñ3ߎ4Ó¤uCVe7l„ßáíª"ËC_>ßóã»?®®n¾_ÝÞÞ.æKå]猎;t*Ô1å_‡´<ì µüÿã Ë9Ùµ˜ÅÈ´bTP-Tèv„·R઴g¡&ó’Íî+2ëŠÝ6I¢ªÞO&“$Œu<~ÿñSš¦ÓéVypíAÐ#O$@8>œ@ ÑJR›:’ ¾~þ²]ož½zù4˜-©j;Á¶ä/ö».÷mSåËŸóp|ÃI¸(ª»õ= d¿í’0ÂûŽÁ¾GH¾¥Ø¥ *1µ‰°ß ³ 9JXƒèÏL|“ÒÇ9=Ä@mø™¯PÆNaˆÀ¹Òåâ!q±`F±¦'MOrMw5ÉFì/°”{”hçƒò)Uw,›õnwh ;ΰ>LÏØÀª5P}©¬Ï„ëÿ¼ÒÇŸ÷å¢^°öܹ¢)ý‹8ðgp–î{ÏÈcm45¬CG›É”Û;k¹˜¹ž@ÇŠ4àúSì)Íqåh"èà,/ìP,#t» ÓôbÀp¢æ¹qà·‘‹rM™–-¹@À;€OÒBÔç"J‹8ÉXVö'³ÛÛ±?»™/Òå©i*êNÉ'ë䏨ð¤ KHiÀáb´#&Ç{oÐìd¶Î‚C‰·¡Ð“£´MÊ;³ aÙh¦¢Xè1¶IÇXá0Àx{jXðÿzËq·cÆR(ÐÐQSjP ?¨ëMœçêNgÐöD© -†³†ãQgsYkLßéP­ûÉlyx´q5\Ÿ¼’ðåáÉ¯ËžÙØít<¸H OWÑÞ›Ò¬s Vµ ‡rÖþD>÷£Z§z V¶I @´ÓËš¼¡Ñ›e4óÙÛwG¨5•Δ ¾#õB—) ú²@ôYÅÆK‹¹PÏpF„Joî(“0Ç´$Õr‹â¶Nw±”œï3OÑaÖ• ÊG× ƒÚ­uŠÕ"Š"x}O¨l?᫊;f»}W° ã^‹ÓJæie¶,¹Fýârôh6‡<9yw“dÑÞáe<éF{iÁÝ`œǬ÷×û?ÃÁÁu’<÷§—ÉéÙp8<ýõ·_â´øè¾Ð5wÊš¤Û†#Â*X7ó5ÌÎc<’(X\Šj8e —PÂsÇËþÊÏß<‚1ÊçÅ]0{ÍÍÖê¿Ûä¨jvàþ$—ä|œ<ÍVeC³Z5ㄱŽd$ΊíCoV’÷磣ï^ ØÞtP±+Å„ µ¾ï‘O]r7ma´ú‰‘ç{Úý>¥ûÌ× Czá*<ªx^®2N‡L`´‚ÞWߟ¾|vQÚÝwj‡Ä©8~íEùßü¾s>êï½Fb ]k©ÔŽ $• p®^·Kz[q~¶«]î˜Z /ô‡7ãY^ÍfÓ§û»^ok4Çéî³Ñí"KV°„~Øa0ŸÝl¸½®€ ­y†ùTé!×JšBß gVF´4k“f=õx«SL¯@MJ<@wí+§£&Ѐ& Š7ˆâÈS®¼5°FÀk Цw›ãŸ¸+¤M·Fœ¼NB‡ùŠj¡›¼àÉ¢\V º@”„6‹‚zÚ.,6ÐÞtçs/©¥yl°¹tkAj;yZ¦ÔCNàV³yØhÏsPSh›ølþÎúÚXEmXAzã©·'£ˆ}ÏÑÎG½lãÑ1Ë‚ú¤äo qöÛf]h½~Ò¤í=õZâ´™"t#ª£}ÞÄñÂo2x(˜,Û[;“ñ¹*kbÏÑšc÷ÚÑé{—CÕæTð¦¹Nûø_º®­Çi# ÏŞعoºA°V¥/HíËV+~F_ÛH¼W­ªJ•ڷ»N°3¾ÍŒgÌ93NH‘9Æg¾óû å£X„ß&vDC‡WZkïe;´²œÂ¤B‹ƒÙ÷²h¬.Õ¿ÿVYvqé€ün6›ÅýGw¹”û­¡£m¶ÕÆ}wù$ S5Üxg°ˆðÉì§J‡CÇ“k¶/kÎÑ{†v4p_¾y÷âůéxr}ý†¡±&mâbkc!Ê‚0n Ú5fS#(E*–ÑÒùAèÉtbñt¾.¦ó¾\ƒv€ò¤µ}Õ9©l¡º¦5R“¼îv²qmmKIu)€ ù ÷'¤ÉzG w¾Y®p»­‚ã†ÕL=‘.±j¡Ê)ë×Q<¦`y¸ÚRIY¡¶¤‘S   ‡,= 1óRîÈs°Eö‹O&²lbž€¬a ᘢ/ØŒ8½Ýæô:¬c|y¾Þ¦#Á’ÄUìÞÅæ|57FɶnšÐ<í¹R5s «¦:ƒN@yxƒo”÷@f»"SÖ…*'¤‹`JÊãH9afÉt€ò@˜¼¯¦!Êón;ClLiÜ”G3ÚhÔ%x*b†ñÐL¹~¯U­•¶ hÀOÀR„ït> üò½OhîYHòã_nìôÕ­ü@‡QÍtHjù¤Žûe†ŸûCx5xND›'ýž&=ŸB»C sh™1Xƒ!vꎾPª@|­Ùqúl5Žß$Á%Î<¦ýPøˆË@WõOÏ@=z òåM<¤{øüŽ˜Q#qÓåluOLVU+95ÅF> ;=¬ø“þâ4LŠpú¸ºv-½MAxwm¯×vÒô‘Ò‡Ú‚ZŠ ¿©àބď h¡U ¤MÛëµw™™uÚHQ•ZUœ­wg¾™ùæ›,…W7 e3PHäÔI3Ó]ÑoFŽ6ZšÚ†ûôÑÉ^²2œ@„¬ÒµÍã“'§§2J󟎆ÃaÒ_š•E3+lk wˆåaÇbQ|ô˜ _xŒ!„7´|ˆ–‚ˆd Ð+áý$ø$¾ ð®ù k•‚adÁšòS#ˆ¥sð ֕VÔ`_yXàÒ‘ÒÂkCrƒŽj0¼³ò˜œ£-P³ÊžE¸obV2w¹‘˜eæ6EÔwpÒĆ‘iƒÇäÅóùjÜ ®œÂRkmjxuÓÀSjl[BXÔxB)ãY68zÔˆº)ŒŽ¤‹`¬»È§—Ó"!p}à̪J³Sð6p—ù4Tªjͤ*~çí¼9íîßß»ºµñúí›Ã{àäjÚÀ'ðOJÖ f?4XyˆM#PxÛ{Ut£ KvžÕ ¦¢åí8gý>N-`Ã@L&±€8ÁÞ$ÄXqѤœ­!ÈËÒ;ÁöÞîx<~úl_)@n4>?Œö`ü{ÿáë÷[y>-ÊI–©­íõûWW ñòù.š£š†–®‹Y++¥r¸;g•dKX¶E2¥O†¹c+z‹@ZÒ c¥!KÎTÆ‚1ûüåçÙ¯eSÒ•1@­¢¶ª‡ ® aÈ?c Ä.=ÆöÄíƒ'¨ñ„`z|N/YÛZïUž+‰© FŒÎÈ_èº"µ1dUÂ>ÊzIQäàÎÿpßÇH¸N Z æ;i‘ä ‹¤Ô]EiÂò¨jÞg¨²>jü(Åb9?N´àþ}Czˆ­ëš†±xˆ]™®Ë ÕÅ‚Zê9DgÁ}fHs;,í3ê¾ñÅ“'B´q>¼ºbz\ÿœ«:߸ ÉøCI53/ïb¯$ÿ©²_ÿB€{žÐç]ï’ðËâ­ÿ«{–/Tz}2»#´{ÕT» …Û­c>ew~GZ¨íJ6¸ˆJ©yK³¦}— rê|š•bè‚}@_ÐúèœH•‘Å„®ã,î¯ð¤× À¸¥˜÷©¹ÿõW:w£kòL]MÜDõgÛÓv÷Ø3³$›åcIv9¬"„¸P?säÄ~RĈDË! $X†ìî|y¦Ýn»Ý6Uí͆Ëf$Õv¿zU]ïÕ”Ç4?M uÓpΕR¥{“ 0åa¤ë ÍL°°«5ƒ†ÐZ‰š¿ÿø-bãûŸ<8;;%lïà=ØŽç¾äÙL×åó¿~ùðó¡¬eYŒ9+Ö ØªÒØGì¼ý››é)€lÞøbw@Ü Á‚Å ¤§§§w>øô3´[UMiÔà$o 1ÊÇlg·u2Há§F«BÄßÞ®§iZŒpqËA(îÅ×9@Ë'ìoì€ÈC(•-pLx‹`Ö°c˪8¾1„[×#ð„:­l-Ò½.ØyVÿ‚,yj<‹Zâ¿qú]=ªxÔ„Z¼EüE[]IrUyb£|Îá.U¯•~­y€  û ‚$IËRžÀ_/—Rµ|ð<4u±¦q²‹Â 6d×Bìonšé”¯×µ¬ËŽÊk`[SxÓZ*i5Æð2u© ×i‚æñl‚¦7®‡~U…D>DÂ~ÈŒ%ÖÖxÇ8—g}`Ÿ•i§]oUžÅË¥¢qìyׇÙ@¿›R=T"o/ý×¾6C}ß8ÒQ¤sälWƒÎrïÁ=Îà† «¶sˆ->8?&r³MS¦¥ª!·#ø}m´ªZ›Œ…À[q€‚gšÞÖßPaËV”’ÆØr¹©´±Ém±üGm/²ÈW¦±’ª…ÉcÂ[ 4a°zØ_€Uñ ÿߦÿ ëÚzÛ(¢ðÞggwöj'v²qCKEêr •@€}žàßæÄ/@ªúŽ(TT-‰I|ÙËÌÞf9gÖ!$Ëò“×Þ9çûΜï;wQþüüüêê Çx¯jøKžçm‹ÂÔþ&ï”ô†e+›ÀÁ4mìÕZ¯þ|ùÛ/azÄ9ñûKX‡ÉdV¬W€.óNûùÙóO?þä§~”†]ñ&J&—oþ˜N’v•ÒƒýG¹;üOò0R(xŠ„ºËw»>úžä%‡u";1–¥ä¾ÿ »!Câ \Ðz 졃µã‚xÛ@Èuk£øhø StHuj©×ÈÂô›¯)é:¡:õ4›À£uKÞðV1TÅ¢†;yr£6ì4‹vLEÜ4Ò¦nOó˜ÆK¿®©l Fﮬ^èR˜z `ž¸);Óh,ܯ°{ Ý¢i¤;kD:½rƒA­¿D,<dzm vµ=cèàù.,d§Ç^~O5:BÓ·²(L€}Gf—2rïAæ1rÿá‚2ûåƒä0xÿÉãëõÆcáɽS—y¥Ø¤“ Lb¸–èGg‹ã6ì2Ìõö¦íj!*Híp£é>ƒ›“DÖ£åb±˜aÉÑ’DûàÃåÑ s¶LÒ¯¿yÅÚfÓ³À<{”ÚΗYæßøìó÷v»f6GLóÕÓ/Ò”kß}ÿ­„Bé Ûv~C}2Øc‚ö={êm‘~z–Ö:ZC†]ÃßÜTÕ^ºÇáèÈa-f®&Á†ÚÙ4øèÉrzà)*áCYggo§iZ ä QÌ#匤µ'„ ‡ ñøqWåjûB•€]’ y4.µN.æSTèÕ%µãì°²8 ª"'ÄÊæaè›»[ À'ªC±@£JƺoÏ«n_ûþ 3XàUH~P´x¯ÃÔ{S5Ú5”hœD$÷Ò Ñ\[§Û(·P-¼Øˆ-ÇaUÒýý‘º2X–@¼êœÃEÅ6›ZØÐÉ;QÙdbŒu³l¸¬(y‘#„BÅ(öJ¶àÕu˃R‡ˆJÕ&L'š/±qsÀùˆFS¢ÊœW—œïÖaqR!:—†RV ]]àEᛋ¢¯ ”&ÃÆ©s!™ˆ­¾â' ÁŽS?å8ïG¿Ó<ìK|Jç«èÝØ—ÑÕ¹ëXÆA*`*1 `>L¦uÛ6C·÷ièTØ…UEìù$t!MæëF(éè°ËêzÇ¡7hW«MQT”z!u:p("RQíòb @Ög±G]H(>qÖ[V-ü„³ùÉåë_áÆÝϲnwY•X‘kjÞ¹· `é¯_½:Ê2X—«¿òU¥)ì}ˆÀÿ>}ý[²®d¹‘"ˆö^Õ‹Z­ÑHØŒŒl,†31œ ‚_õ•`"à 8sš3[ÂZZ꽺x¯Z˜tÐER‡º«2óee¾—ÿxùïøñöövõ¸q9o¥3æâæûÍ8M‡r‚\5­£G}XrymFT;DˆkêÝòíÇûôå8ÎBœœ\ÔEþÛòn M€.»¿øò«_y-„ "£ä(Qt¼äÿ5ÿ.ˆ $1(ÊŸ_ÿôÍw¯¾~õí Å šŽ‘p2pP,ï(«âóú®»Íw­êð8€%¸k¤4?~!1Ý,M¶ÖÏåá4°¥Õ_>xù0É<÷í~¨°aÆñô€´ŽuÇtÝh_9R O{…áÂZ'Ï‚—óéžE«Ä^‰å[÷.V!zÄÜõ^•®ÚôÆÖz{·TÀ“NëÓ‚Çq…™þ‚E¶°GB#gù¡ªË n:y>JÆø 6GàËH©8ù‚È ¿áàžwéçd™ É{XEÐ_/^ ,nΜ@]ßœÃMO?ø¨(k™Ä¾°ÒéE¯Ïeh{b \QÒ€<0mļÆ!žÚ.lxxe“ÿé¨1ÒDp#ðœÌ­& Lwpï»Îb1rÉ0 ´c'»ž"Z4µ‹Õ‹#ëò⛹°ÊÒ e°Ýµ]]%@R»µXÄÔC²ÍtR¤šÍW°­Ç?-3bȲŸT& /—4ãZùJŽù¯eÛsè…À¶]yH…¸š¤óÐò*<Í6HäôúöX] ëˆ?Æ6ÖÓS1ŸôF*’nÑ3®@÷pgT˜á±` 8Ö"‹]YP´µæy¤HF«»ºÿ€='»ÍùÃÓ9p¥¦˜|ãN4UU;ˆ8üglY”g6úýÿ¶•AxÇ4ˆ 7e‘Y¸ŽDâ¢à³‡K9dš¾t3vTóÀ é*á´ž9Q†ïõ8#Ûtë[G Œ#+…LËÍvùPOf÷¼‰„ôÏD’ŽŒ` yé–Â]này;f:MFÍžGwN¯Öë%ö õ‘04ì„ ¨?Ç"+îË“açÎ9¼¤ËÔm‘·Õ¯Õ{,y„ôP†x·<¡zaÖUækb ºÞ–5ðûˆÁˆYœµœ‡‘aï!Í&H«-£Å¡ŸÄ7Ç׃Áúб50¬M:Æ3<"…2lª¶®ÊCÞÖ©DÐË3ãòÅÃýH2Í^ W&cI<@²´ÙF¾ku‘”©RáÛ5'rÕzé±KN·›ñCË šJl/! [›»+IR™$ïÞýîVûŃƪÕwûmuy~vwÿX>{>˲¬¬šr¿Ç]—Åþisü%]×¶ã¶ D-J%Y/ÔÅ&h³h ¤ ,ÏX ú«M>!èC?¡yH›¶í®­;)R”{†²wó’GÛ€lÉs9s8sæ)Êßßߣ(œošÆO`ùt!_?]/6Ør°‰G@5 è4q?ˆ¹SêãöãÃö6Ͳ_?¿½ý¶mޏA®Žùî·ßùù§—?¼úðþ=Pæ:-¤ìüEKÍ[dö>[â=­*{ÜÇãÎ’¸é‡‡Ýþí¯oîîî²â i\Ê> œÖ‡[ °pñ”W P–º=Ôƒ’×7ÏqK(Z¼ÈI»ŸºMQŒÌË ÐHÄÓ®mÍ, DÕ¢°ŒE¶ D¢Z¶¦2*g–ˆ·¨Ó¸ÆY¶È”û3Ÿ­p¦”„7¯¾ýcöÚáŸFý¡¶Vg줞~¬MQMëȺ¶ÞhQKÀŽ-'ÁEd#£ÉIé"ÙLžáÑò`AÍ $ªOð‹R:¬Bz‡0T³³ñiŠ·iRÖ3› c…{ä…—m+Ë26Ú‰GÒ|&Q.œ=µêyDíENˆþ=qvÊi͹XÞI€Zñ0Uh·*ÃUhWF†Ú)!Åjj8™e).‰I’RÍÙæ ¹ö¥/ÂÒ8»¥}žp_+ç,ÊsÏm1á))8(Ÿy#7š~ÈÒxèk>Ïm[{Ež¤‘,¾ÕpUc¸>¢¾±ç¥T«sÇ×%±Gƒ/©0ž¥M¼‹J.‘êDBr˜‘“wóÝ´”OLN@Ì;>"¥ÐPy†S™èŽM/­êðÉyi gî(Ž®5§@«Úê»ož=+Q-Ú,â¸ñh&A7àÜ긓õ>á¼ÚíHÇP÷$Sìy(‰öû=sµéYÏÝæPø£Å¸çU±‰„䔂Xæ¦/]ä\VA4¶DhŸª‡-®¦©îZIxá·ÆQ/õ³…¡•C˜Åõa‡ÄÁ“œNØ¢æø´ßy¡£—^œó*(gF„<ÝpÀ–½ŠH­lÚ¶©dÛ(Ù9™ºB9‰Sq1óHÖ[?΄+òÖꟉ$FX·“ÁûAˆW´ÀÕ|¦tõ¿d]M“ÓF•4ú°eY6[ ^À! ‚@‘ì1•¤Š;E¥RÉ-‡\ò/SÉ!x—ì.»YïÚ‘m}Ìh4J¿– !¹º\²,Íô¼×ýúõû(¿u)þö»ïio?|øóülÑIY…ýˆØ»á·BÁwŽ•ì¸ÁÌ·ëP˜ÜH•/Nöh½n߸“ÌgôßF£ÑáëL*Ù?·¹¿;yúû³/¾üêèð­.S¥¡\„—¬Ã}{µ°Lõ¡ú\êæž(Ñóÿí—Gï}}ÿÁ7pé@ù±²Z³O$^(ÄgºJ:­£÷ÃÞ,“É2Q¡“ìt±Ê4tE}‚ý^à 4ñAXIXÃFU‹ûÚ̺¬ täºÝ¨O€‚?͜պq¯nI^ÝŽ 384Z“}SùvìqнVFõÂË­ð,°“ËM–©[ÕRysÙë@Û1¶Oày‰p :á($é’ëR¬¾„¼ æô«J¦ù;KeC¯æh‚QŽt‰G™ºÓ%¦b膨‰[´jð4>äYºý.ËÙ5…{Çw—«Ùp¸‘§©ãED}1ÛE&ZÊZ€ÞèÈ’3×£G€ŒÎË;Ea­Û­�xSå°XUemG¶€bš¼ª¤=L|{¹T’˜®WÛ® |úšªPèÅßö±M«…Ъͫ¸>Ïÿ_ôƒ-¸Ÿ.`ù¼iE#ÁÖ–iêt’Xš͸ç£ã_cè9ŠL´ 0³Ã#® ØÀÒXï=!!7gýk (;ôxT\b#èîö Æ×UîÙN!WZ¦ß+hà ¦×TåD41u¼/Ki ý/ûæ‡* ˆÊ)›ésÓQ+†6œÄaw«¶þ5ÐÔIyÆò.›)Ñ xÈVhn¤{0p=J…G£<ˆäµƒ^Ó ­&5Ë3²œf±‚WÂi/—RTú§¸¸±åºñ¹ ã'¼’Eêú" (Vä§Óc·LoÞ¾E'$I¦oßÄq|÷Öuyõ£F¯Ì³X1ðì“û±1ˆŠ‡m„A°;y1—é'W¯2¥°¾L3Ûñý0zöâ¥V©°u®è¬Q§ÇoFCÂïýÁ@r Eº½W¦ ô‹ŒÇãÍÑyzt‘'O§gãN«]b=ÊѬM#×åSóï|èØ}¬nla:*U¶ÊÓùí×CÀ¥BFS…žµºî†ÑþÑIQ‰y¦÷'²X]¼r=ô…QDÔ¥Ew.çә̶†ý/qò}ú¾Eºœìî½>LÊŠi·kL†G× I\t®­²¿Ï66£ÏïÞÙÞÞ]8t°ÿø×G/ŸOþ:99žžR€â^ÜZêé?v5=MDQôu¾§Š¨äKAÅ(Äh¥;?ˆ —þ;¢1qe”`bB41QQã°ÑE,`¡Ð¯é¼y3Þs_A W$дôÍ{÷{ï¹çüŽò{{òÒ…a¥îlll¬î½Ñ#QÇj>yÊ Q`»€š tš(ùsÀÀ¤-jTËßèh ž­ìŠry«Q?DYU8£8<òi}}âÌxinöùò’Ûåwèµ\ŒBý_žRi2—õ›QD9ÇÒ“§WgK=…>Ïs(qãâ:(8Ÿ¬©„FÑAØê¥dÊÉJ#jgœJmos»’;ч”Tܨm´´P¨%„…d¿7ô³4Xb‡¢¡U¡_ÙnTz³æù¹ËScEZ>v,c'7æÎRÚ²ürýÑ㕾ÁsÂí¦£l¹V«¶_«n;©œ;µpïÆõùéÒ•iú¸z#¤ÍéÍ—nߤ{tqqñþƒ‡_¿o™t(ãH¡JmÿéøK®®d·‰ ˆº{V{¼Ä„Ù J äHp#‘+Ÿ“#ˆ_áÆpЏb8Dâ@ D€pB¼Ìxº§§©Wq"|¶e»§ººªú-§Yžû£`uuekk«ßïïïï—åÅÕÒ–ùð¥Ôðáó†ÜÖ£¦AûÜ‹BªÀ0¨ÃuåeT`1h5ô!L¡¢¸‘檦Y“Tã#*`ãna†ùª@-ÈÓKpe$fI9™ê´(ƒ…±F„Ô Ž0ÔC(%eŒ¤ïS÷ÂÂW¢–«I+Iø¦”êÖ’š ”ÞP)U TNÇ`¨ûHÖàr¤`7:‰W{rõh¦Š„'€\p§1ÛN™µLz#VÁ:[Ê©e?ëLSðÓ6ÅdN0΋²¢À8ƒv紥氀IÀh¤{)£0ÌtŽjÚu:¡­‘¦©¦åa^¡š¢Pry.$t~jÎ\„åÜ ÀùDeXa§Œ©Ï°côœ:œ°²©ÀaÂþÃR¢QÜ9ÁRŠÌ¡ói_@ç´¸à÷JéÚ´€­GF‘3=¥ªòÄÞ0¢Ûš«kçx}µÂÚ—OŒRŒ¸¦Ä›J••%Õ q§.]TãA+.tۢȽZ=ËŒ#̶ü Ú‡  (üTIÛ…Þ@ukÈ%J„˜·9ÕžŒ‹úƒË¤¤I}P>üKŸ˜›íPÔjĸß?¿~þØjw(¡,Îϵ˜@7“ñ ‰c…%£;nŸÀà+ý^[iܰúLÍIàêÙ29¾±qmýá'nÒ÷æpm™4¢0Žp{J¥ûÒÒÂÎÎÎæææÓgÏ{½·vûÒ¥ùÔµŠÕëŸ|]ÛnUË™«=¶ã¤jTJ*¤E¥ji]Š¡U”/(ÿÇ ý„Ä[ËkzAª„¢R×Ð$¶ã$¶çz<—ÃÚ{ì@_ÈC"+’=g|fíµ÷Ù{­Q~c½y<¦Ê×·ß< ú''#¶ Y€.ÇÔ¬ìY‹få\nj%ÿÑ—zX¤Ñé°ðú^·Ûnµ.W?ÙþkÐF–%aÐY›†ç¼ÙÝÝ}òÓí¦Wä©¡.a™Ñ3)Ó?¯øÀg*ÆÍm2I¢Ùüןy´ó}lÛt•| „çiQ’v%Aˆeg²ˆâ4LRäz†°Ü ,´ãÑI›êv R§ç“4<@訫’SŠÎãµ Žª)r¤ZNc³\^娕ìP-éJç|”1#]ËÔðèä yé†Ý¸ìšÝ­Tº±¿…ÞA|éRùÈ›MÍ5•Ю°ÏbI_ø§’u1ãý±,$o˜®È™Õæ—9E-ÇAåd•/( ô —ÕÔp»MŠ:,Q‚}»°ôAô¡ú/,¬DEÁ‚¥ÆˆDhS„¦ÅRÓRl(¤ÉɹÏmÏž™=ǵöäÉ÷\ΜÙk­ï[kíï3¾¼úyûä©^w¿Öì s‡Ìfg[Ëo¿yxið~¼ÒR¶˜¥yÍqk–µÜ“ª»QVfu†²¢EV89< ÷êé3ðÌÌ=±¸´Üï÷ö}¿‘zÔÝ?{f^“ùáË}‡*ýð¢¨û ˆç<—íöÉÁpl™–~lmpìVZé·gj_åiŽÇð»+®ŒE\XFišý ©µZÈg(Ünôƒf«•åE'èMÁeÀÅ8H<¯ Ôþ~½U‡gŠ3ò8Êr ʓРpˆ¢Œ3xÉøˆà£8ìñ°GJˆ™Ç\¢Ò+ä Ç 6fr ]‰×/P´<¢5ˆÆ{" ^©7-Ãvë~h%ݢɔ¢.z¡yzL˜à.á.åÌÊl·®Ñ,à­PD¹fޤHP߯Ê,˜ë„tB< Iœªû`6cB¤^ÃMKaúv¦´8µbÎýF—ŸJ¢T¯à– ] §”2ÜN¢Sˆ×/ñ¢D·TÕ±ÕÙi„¡€9ŽFå,ŒÃÄ&8aa0”¾!æwXIŽ×¼µjk*ErY˜ÊðX·ð~ö¹tÕÙ 0Æpà*‘Q¨½/KŠš±c‡PÕX ÿ»%s,€¥UŽÊ¼Å0p[ÐÄ)²nAñW )•]&qÔ%¥Qi¢–z%‡w»P®F5ãq T(­hìcÀ! DæxFú…ÃŒ$ mˆzä1ªËŒIbS®¦BÊ:³áד0„O 3á1*¢ ª$ŽýQ¾&ų*ã È(G£M”Ù6gd…•ƒ ÂþQ½ú•ËqÌ\@9ùÔðd(p®å8 ¸ 5GQ`2lø¥9ãÅL -·MœV 8I ¤ªŸ´¬·ß¹v'˜DiÂ}§0þW jU¤“ ï>»|eéµsy”ÙÌX_ßðZ|lÆJRðt8ˆŽºï_x«Yó x ùþÖ/3 ‘AŸ÷û%e{/^ð ¤SýÜü‚ gµFÞ¸³7pðbÇ"ë GÔ²<ß]~gÙ@QÂôö­Û––à-mÞ»ïCÌf¥IX<^º¸bSý;6Zs+áÿöûÆxÆçOŸZ\\„W¨ìæÚ¯ÔõkÍ™Öl'æ)Î[ðMÅ(Ç ÀŽ'Eʧ€„P1…‘äÊê¾:È1£xb»úÊÑÁ~1ìÏZô½ó¯ãª¾Å~\[gåÁ8%zJìÍíç/»oœ=ß²ñlå¹öpw+-ŸØeòÅǵÄ÷ß^þÍwß®=~ºÓMúeíé$º¿ûìÁÃǼ»ì¼™y¢ÓÙ¼»Î¦‰ž \ùäb§ã¹8uÖ¾ºvýë7îÞÛ|òäŸGþz°µõ÷ööêê*` KZñÃO7Q#Ôr¤Ò úôò¥Ýg{{{ÿ @×µì¶mDÑác)ɲ,9v¢ZvR è¦@7É.KA‚nò']u×é®hàE¡Ý¤m€ I5–¨èÁ× É!Ù{‡²êíZlQsï=çܹçþåúñêòò¸Øa7OŸ>‰âøù‹+FE©r…úfˆ° äÙ¼.ÚMZ(η-lî£÷‘L7®èFËëÍa8<¾ï¸H†~ÿp|:ÓMÚÎÛw\<ø´Ìåûwo•–ŸÜ®úÛ&‰çuÈ~‡Òή’Üìç.ºtËüv½~ýû+øÂ“/>Ÿm#î÷!s„QZ»˜s]ÈGÆÿ 8©è8ŽÊ…n`'FcÄî´(²RÀpxš®oƒÚÑÆ¹ÌHüu ObŠáu<‹£a7J´E¯†ìFý$K }¿‚Àb.Žw¹˜÷'c©S‘/ìŸ9mîY¥þxÜ•|<ë'dÓøçN2-wTÑ©\¿`>U•¸âʺBZV\äØ,ð> ”n`ä*K€lCÀC‡B‚¢ÔCy¥+_x¹T%Ú¢@ Ö8YVá^/(U­€²|™£îÊ©Ë]ÛEO”á(2ziŽ‘j_vµ¶u¢¶vWúZ7L‘ºÞ 6mó c[; )7Nÿ’ÝŠzÛiâTû_µ¾-©ãj¢ÝÖµý<ôÍÞÅÿ¦øO„kß’lþe^øOïÙVÁ«$»ffcïÿ^æz€øZ(ŒÈ§dÐó…á‹íýB$ Øø„—€)8¥Ì,ˆW"›kèžç­–ÉJå2M\ßWiFÐŒ÷Âwš’YÑU»W RZ ­Ú8”íW9ÃÓqm£¶;Èl3#k<l#&Bª20.,V¡ŒgS²Ž€üo×´¶ëûš;(¯Vs8GØ_×*‘âYe¶*I£DÙÈ8ÎÕ8CAš~rÆÒé±E(¯gï™LN.Î\VPåæ %}Ï :8•E:îûãÑÁäÞr6Ý,~ýíüü¼7èÂ#Wr¾^³Ñèd:µËÆ£4Y-WóäîÙ´±wšÉr–Àmjˆ97ÝDÔ«Ò\ü¥Žýç‡Åv»žT›UYJ@I}NGÃ#s=ŽÖi8ÔÀ•²\O†ª€*h)£øL2«2%p` ™1Ü0ÏC_μìù”ˆaV¤UžÃÉíÝãq´J{‡>ðØeœ¯zÿ3A{óp^‡³8[,ã#:9:U‘æuÅøÙWÏ€x¹Éwß¿kWÔ#ÔK¹ çQôòÕÇ//†'wFìh –×sn9>÷<ÖÃ,ýõ7ß>ÿáj®9CO™—¯ß¼…ï«[Ç!¼ågüO6[(û6°ð[ºü_ÐumÍmQXÖJ«»¬Dv'ƒM(IIK:t Ã+ “xc¦/ü»3…Ÿô¡“ÉC)Z&IsÁ®oµ-Y².»2ç¬Ün~¶=+éì·ß9:çûþBù{÷¾ÜÙ¹¹ùöfš1@óÛïnïííw:]Y“X†’Ö Õ ¬(2íŠý`é¹0­…Ó=ò¢iia[1¹WýæIÙÐW”Sû‹yrù•›tE¾ã?]áÿÏ$ô6s}8´5†GSUÊIY'Ä>ËŠP1†ì„ŠÚ=ÄSF¤)Å÷¸Ú  f’¡k¥w„4ápS¨jÄQÇ&¥J‡˜¼T–®ëaý=cejÛ¢)O"œ„DG0Õ„±&éx`§Â°yž£ø$â³(b…Bóe…/†/Å*!¥ÀŒ¾HTÅPm])Tø ¡Ë’Šð¶t“ÒˆÖ„¥)}®Ð vÓ<!ßEãۺѨÖ_œœi)wUcÖ$“Ð÷–ÞºvíûÇqÚº^÷ý8)L"IŒãx”§ö²—d3¤d4®âUSXÒ,‘Úβ_‹ÓôF«ÕtáfŒ¯‹&G(ú–X–eû>P‡U¿†“KIÜc¬Õje¨EÈ/žŸ2@¯êN¦1v¤üÖîuƒJÿD&Ã1€q•Ðl6)ªèÉŒ]\¶ãürÖ×ZŸß½ ¡5Œö÷÷ûÝöîöÎí­Ád2 &yÎ>šž‡ú ‰†…ɜܑ”ÝŽƒöššþÙÇŸ¸våöÆSÇ_Uœš][³5Ÿ8òáùILóUÁò’§NTIÞl677Ö —€$>zúëOGÏœ÷v••5Urà R [.¢^ÿç§Ov[1æíxÕç'gŠipçCg qéàÉÑ7vúøf‚ˆq[ÇõÒ8áý¯¿ª×ë£IôÛ³ßQ¡K×aÇÚ®;‹Â×Qþ§t]ÛjW™3·37YÙ–T¹qR’¾$Ó‡Ò>õ­Pèý©%ú;%NB¡¿`Th )M±“˜F²#É#G–4·3gfº÷ÙN¡}„$¡3{ïµok]zù½½þ?üx×°¨c`O`ggçàà`w÷a•F ø;Ó¢`à³ÙÌpÌ ýkùm•{ űpÖ<ÎN‡‡“áÕúÆ^”Ô¤à—–ë©¶5üýâåáÍ÷ßknvŽ^z–aŠ5%Il·Vàå¿ ù‚~ZÂ)LÀ ðcúýþígŸm^»~¥¥J‘v¿”RL}EÃ(«ÒIF”0ˬó«`ÌM窜¦ìJæw°í‰ížWZìX®Å—øØHHán¡¦2«‘uj¥àŒÁŽ4Úh¸IL–óBF­µU¤>2¶èµÝ³o¬Ûœoè/® Þ¬ïïK yÖ³§-7dÚ¨$ÃÂlJj“0M=3TK“e’ _,£ŒÓ–Ýበ¿tj†–+`[päJ1ÈPà¶œR»€Ä±b ¾Æ£Ž ÇÓ„b׉µLcYÍP¦L(ɪºJ*Õ…b%$SmŸ¡DQaa[4-qG¯&aD BY® 9L\õƒwq¢›\1¾Rì&Øz=ïŠíä¼Ôd1Á´âú®H±+Ùu ‚Ç”qV„ª¡Šªê‚å¿…Î¯Ê p\\ÿ÷NéòsÞÉD]‘;hç‚‘ «OX»Y)ƒ?•%±…|Cq\IK¢³…ß)ˆKçh%‰ŽQ ûð»LƒÀ¯×„”>½®íAO´D14  (\ç‡È\”ø¹˜_.eÁô^à„§˜qãÇäP9çØ´Õ*åRe¨ ã">ÏX´ÿâkl€ÛLÞ̦¶ml4ý*€‡I\¯××TS™ÎÇã1ËrÍP©mA2±áûk®å¹öG·vþxúê¯?Ÿ!ÔcQ>% Ä^¯Þi_ ãhe€~©ð‚!b$‚ÈHz98ʉ¦‡:E `ÍñÖÆp„ ©V+P|t9g†ôɧOãÔ¥Æñ4Ý{üd­ý®ÛÙN©­p³dL3e÷ÈK#ý‰‹Ê¶ÎX–ê:²lR¼W\vf)y(*!ˆ”´;œý†3ó}Ê{Jýå×ß·ïïþøÓw`ßö<ªW­ž}?Žã8.•JŽmƒ5bÑäFKW¤—+¢Ë¬~—F1Ñ?ôÁÆÔÏ76¶òfÖÜÍíM˜ÅùÝT´Êfó¼ÿfkk«uðdryѤ`‘0ð¾€ó¥[0Þù÷™B1#Ïy0Àn°1Œä`lúýáË—ü¼÷x¸ YH2C Ôe…ßÅ#^f`sæ¹ÙIDz˜:±<œ¢"„äÉ=dH9k1gÙ^ô ›…û^Õ5ØPCD0LÍHYäÒèêÆÑ•¼¢Õj÷° ÈB5•ª8?¬.ÈõP%ù¢uïQa¿œoxWôÚñ»qb—’½¦#¯Ï¤âPÏU=7ËðTm–Ó¯a†R)n4_)b |eÊbð.E…PoÏ#ÁÎKú$ð£H˜H­`ÅEj{Þx<¹s]Ý"åJÅ0Ȳ¸Š¥ëñúñ¢îÒÊÚ_'ŸüÝûðÞÝ•õÍñðÆ¡,õv9{Hz­÷|T¢|ÇEÇ82;?ÿôËþ§}N6@'…øÜjÄ/ûcŒŒ'1У0ϱ‚"ǪH†Qu™£Bˆ0ÿ?š³M8Öé›2/À"çK)e’ÎsH¢ †òUEV-R¸ôE&[5ƒðf2㘃¬okó-ŽêžKFغ-Ðfò‰nˆËKH­‡^þgêŽ(žÙ`0ò—ÓT"‚?qF—ÝnwmÙˆ#îû£o±ï›"A:óÑëõàOYïì¾+±'9àV& ƒ!P´Z Ãà}²ÿ‹þÙ­ÕNCÃY† ¢(œñFóí­}/Þÿ懣‡‡_rG–ÕËÐsüá+Ãósû£}Eæ´–å.GŽfÙ®3ŽÆ4UÆ×}³ªÖj–€*bîyï™P·66`$6§÷øäW½^§¼˜PuM”J¦^’x3À£Õå¶À/Ô&Ïûg*íîÝ„iÇxj–e‡AÊýsA“˜%¬“,€5ɲ±fa° I”Ü3ÝJ½_cæ¿Ðum¿mÓQØ·Øñ-Ž›†n´IzÏ( Q:!¤ žö@ÿxÛÿ5Mð€à !UiC m];„Ö†4iÓ$µãÄNâ»Îùy•¼EŠ­È>—ïœß9ß÷O”‡ÂQ–•ÇŸÜ»ww·V»Š› w}çÝÏ>½=vÓ°ð`.™¹¾/+¢ïûYç„C°™æ9Ñ|Ác(ñiä²8p099ú~7/æá@­tvzr䌼ϕ›íÎJ­ºVß <×2zyAL#îÃó<ê\vä†Ó«Rt±¨¬‡3N c>?ëîýøÓí;_J‡ÐæR´&œ¤a‘nD’Hf*iq³t¶†—°¤]…0Y{7Cê| Ñ-ÊtnÔÁ$"Y8iÍ‹¸Ò ¨µÌÕß®Ë9}jÏòŒvÚºãÊÒB±jóÑpzÑŸ*¬Å¤&•(‹þ¼=”fãkî¼Õ©IòÂHû=ÊZ¼nP¥ J‘r¢Ç9^`XÉSçf´J‰=]™Ï§"ÝO;‡¨Â—IJÑìë1R1Ž]¢hcìðí ËwZmŠF#Ç‹CˆHƒá¨\^ C‡ìd89Sмà …ÓV‡eù k¸TY'’ªÈ @ &ˆ M„i^ð¼€es,™0ær™6"À«®'ßñ¹b[S/îmÒLÊ Ø!òÇà+ 0@ÂedàÇ\°„錹4‰iKR ¼hÎŒŠ,Ùsõÿv:ý/[ù¿Hj™KŽ^_ù@òP¦›’Cò\°³—úe®"Y1Ì2¸´‰[8Ñ áÖ ¨þ¹AN# }úª$T×U¥Ýjo®­›ÆÐ²Ì­úµeÜiD¡ª5î@„-kúx8Ò·ßé÷áò¢¦Â­ ĺY“óáÔžB¥M×òréD¢˜#kõL&;@¬ (Pq74ŽIzŽkzŽeOÛ-z±¿¤•yuòÐLR“˜&Îl2Ói\šKãí7?¾ñþÎÖ[Õ×®j‚€$|¸ ÆÛûà`ÿ‡‡??kýÕ{ƒÉÀ™ƒA³Ùzïƒíшc™mû8Ì–¨"Û3Í'OiE/Ö/E¬)¢.†¸T*VçùÒìô“nÀ[ìwO_=Û¹¾iH ½²,«X,6Çp n}Ó”À3¶=®¬oJ’’r¿@ý<¤——«Š,|ÿÍ×U¿ýn¯Vž_«TªWæP¿/H "sçÖÍÏoÝ|ô´Ýº°ööK¯/¬®®ãÕê"óð¼M3h6þ,ÖÖÀ.ºÝŽ;ŽÁPRÃE]/é\BÐÄqã9$ªõÚR{'‚ô.º…ÚØxÉ!íøâ®`âO~¹¶œ-ˆµÏ:–el¬næ9*;Ç‚„!Ë’˜—Á/ý(FN”‡GePT”QÐÇÙŠ Bõ=€óHNùJÓûo»ÖÞ´Í(lÛÛØ†p¿8¬›vɽɚN#]MÚ—ýÏMûûÒ¨U3šJÓ¦m•–u-(”€1à+6;Çt[´‹´oHÈØâ=ï9ç9~ŸçùkçÌgfA-6›Í¯¾üº\.§Ó˜ ÑÉ2|||~þk«u"ð² D¡*}>u# ¯\´ü€ íADuÃäÃQJæÚÕœB½ìt úÝN»µ–LÕGÃ_~«–?ÚÕˆw»ÝdR1ô¥—Ó´wqüm. †Â ³"LÇÇ™ÓÙéãÇ÷>ÿÂ¥ÃýÉ„ˆJS¸¶’”"D3‚ìË´¨={±‘/}zttÿ¨¬&x×pý©mù‹ž×_>øîIg®'ÞVûÖTÌ$Œ‹V)–ZO(¬Úäè~~–)ÓùÜx¢Ü{R©¬§×²ÐK4üi]vvö~ûþÎrž)ÁÕ‘xxÐÝÜñ ËÎæ w?Ó¹ïüi{csgル^gkk+L†ã^T«“©.ŠïB086r3™ÔÞîfµÑzùü¹a™Þ¹3ѧ¢ <Ýl6[«UK¥ŒìæS«ÝngÕ·&Ð#1ûy3¡..”ÍÖ¶éY„¥'¥ZXÑj&#?%ð{.¸ÅaY“j¹>`æ>Ǽ{ùâ×_|ãGîუVÝÄ< ºÖ7xbh£×3–u|²»ÞÙáÒ˰Ï⹡öL9¹Zó®Þ[]ޱÅXÂ.­Fb.´Ú¡…äíéT.à›~¶Å)Ø †­ÙhÕ7=/2ýØ•P vBA¨þ¬ §¶OQ1Ü%8åYÎ|VKtþR´ì…˜R•üž¡}këµZÕДB2 žŽŒ¾4;;«f2`Ü“¯½róîO)$q óæ™7þ¼wçÔéWÓ8Óè¶"Ÿ‘ƀг¶´ôúÉSMãa•“Ò¢–žYë­MI@à¡6ŒÎÔÔ´Õ³áÄ´ÜÐЮsN›6ñÉé›TU¢v`š1ÆŒ (Q"M³fÏ#f2”®;Å¢QÛó©"µ´l  dÔ )˜…K+*XÃsyÒXkY~iOjyn…À&Me€i,‹ú§¼(/FPcL„ïÂ×áµð#PMV˜ŠxA¤+Ž/æR£C›ÞØ®*Oňò%jƒ¢žTÍ¢¼òPçX>-K'ŽiÙ¬Q5._º±oi~a³ÛÇ=õÔÀs#¥á•å§óçâ(ؾM;zRÏ2± AøtMbC¥R)äòŒF’àÅÅÅ££õzÝ2Iƒ?Rüè»m5ˆËµš5‘gôzâ)\HcAlù=ÀûR±6$­—Iƒ €´I ,‹J§\c3ZHˆ…Që:}?ã8••´æšqpá“î>8çׯ]»ýë­F·Ífq_EÛÃ*ȨläyqüØxGivìèáüR3¹bîÒî=ÃV®í‘ccdäƒÕ•°òt}ýÀ¡ÃÓ7¾ºòáU‘ë­6M%T:7kòì†^ÀAX´ 7>>þàÎo?ßœ›óÙ´GñºÑÐ4M’$ÛñúD„¿pq£ª—†wòñGM½:¸s—¢¤í€úkîQB:ÕVÞú»>33Ó4tp‹ ݇€É>^OxØÏu9–6t\äãGó^·½ÊÒ÷ÿ¸++øÊp>¡0% aàÝÿý6¸£Ýƒ5‘´óí~yé‰Ð˜Ð ̹^·Á$·6Ï^},•ÂÔ½{³<ƒJ1ŒXyYéÙž(0œ@[íÖ2f»•Q³.@¼ò‚@{ï¼u T2‹-¸ùË-‚Ò"‹4üíŒ4’ qGë8Î6M­,®Cò499yvrbçà`ݨ}ûýw+++Í)î%?º)æ?Üó¯t]ÛnãT=ñåÄq|çææRUCÚ¤íRÛéŒÊÐjŠ˜7$ÞŠ€é|‚ïA€„Ä ŠÛ#ú“IÚ¦Óm'iÚÜ;‰í8WövàÞ¬(–|9^{í}öZûßuùh³Y‡g”Y>Ÿ?88ØßÒjŒ1¿Ÿ_[[ÛÜÜüóù Àõ€GP^𶌨¹ãfÃÅÇ.p³j •ÞJ4†v›·åSk”¿3ŸÌ.fNOޱ ·¾¾© éD"5^:b’€ÚoŽû¯(ÿKÉ`:Vpô´X˜_}s‰·mg  Æ‘›uÈxeYçGglÅ£³ C^6c(âÇa–Øß1;&^Cª$Щ¥O€Ü] U‡ïù}ž/Ü_ßZ_»U5Vïo‰RÊŸÉh6àHûƦme¢.‘E*Ñ¢ú†¦ ÆÁ1U¨ÎO7&‚6ÝרUóÙêÐG§< ÁQˆšÈ«L Ô|g®Ê“lÂé5×3h‡Á[Ä5Y¨Cý85ÁsÅ6ŒV»‘L¤áòMÓ} -@ˆ‚Ødq¿(a¿ÐÐAsì©çí®ê1=þ¢x4ŒÒ‰Tfi©Z­ö:–å2w—›·õJµ \2Æ®iƒRoЇç“)À"ãQ4„¯lí™­Sò7ÆØ0Þí‹ù¢ÀK»;&îÐ4ÛW•ò¿¾³³|Óè`Iôº2ŒÇE-„¢Y@[Jß!Ì•ÑV‹ØªÑlà/,HÎÏ&K‹2¼HÃ@àМœÄ¢üÀ%sºÐhâß"aZ<¶3¹Û!ª ‰¼·Ê9òû³?"‘ØÓ§ïm$íJ4ˆ.ˆõŒ$íî»âVûˆ‘iŸ#(ɗĹ8QG)¹žJ­)¯ ºÄDy:ŽuÚܼ,IVÇnÖ‘º¶èÿêüeHa§¥“•¥,c×—g(ƒÅí8}Ç®–Ëc{ï­o”ŽŠ…BAŸ‹ÍLŒ›Í&|bç·WJœxO ;ò ô¨,K“ñ€J">}àéÀ!j FF·#Ä8‘d -Iä]$}8&RQŽëö}"öIªÈÑÉÄ8}ÑPD °Ù‰#óöÅç+o­—Ï¿:E½ŸBF>å§i=Å»µDpO•:.œ”$……£qȪýÔÿÑÞÞåËR@äe«|Žë\\\ô‡#³kdf˜•äåÕøŽ{vX‡¢1ݳy#—WWpß§Ó)M L<_¶ª¤S©žÙq¬î\,úhûaíº §«ósÜöö6`ÝåÉI.—ZV2¹»š}ïý]U“á«7õtRoÛS*p©„î©ÎÔDLø%_õõE§UÓ’z2äG¶kÙŒò»kŠçæ0t ¯àN&c ŽOÃBù~=Æ“HŠ TO‹v·¥‡•¥…L,æ½íâïüYd!Áö€J{)&,Ý÷6¾üö;=•¢nœT.ÿ ë°XBûŸ>ùðƒÇ¦Ñí;ÖWß|]¯×5ì _¢¸½-þ¡ ÀÖµõ¶Q„ÑÙ›÷ê¬ã\|‹/©âØIYD€¥4‰ŠÔõ¡?Äïá5O€à©PÚŠÒ‘4i®c;^ßïÞõ®gwùf AHì£-­´»3gΙù¾sþEyI™ÂµvÏ Íf}ggçý\.™ŠÈ~ž°ºš:|r°œò÷»m†¥ D‚ãÕR“{"*± ÿoëf¯,{­®cvê`ºmêkÙt84W¡P$%œ)W5 EÑ…8 ¼çFNL®IGú À;î ÐSÿçoà DLj¶/^¿NçN¢9…¸jH>b¡äx‘ÝŽ—RàyäxLÐíB”¯3‘ú”wöjSy哞ÝIÖôŒˆ&:°J»¬ƒX×”+>•c»†Þ:8|óöòlýƒw^=ÝUhc#ʌռ®óc÷/c¦Ùk5KyÜI!U4¦Gûe SØ Ø‚L§%`#¥Ö3‹Úh .űš„žƒn“ORçÔåR³Š¬òÀg:µ^wA”]uP5 Gï™}š!ñV#c`Ù€ ¬;Æ íðœ(+<¼—‘e€™lpÝ4×È2`P¿·›X,béz¿Ýæ&•ˆ·^D\•®TQÎ.g8†Æ&wS³<íÚ^)7F2MÁ”š‚’ OܪÀˆ ,£§ÃÝÞþ,Ÿ/éP‡éW«Œ{JD‰q1ISA‡ûåp( Âöé“*ãYßÝœ)—,oå" O·œY8’=◤ߞ—‡ݶݹ¹Ð{ïNÖ·êƒÙÀB§Apÿ‡ï^–®óáphã“`åFš†8•”—{>Lš{‘7ÈAC`ÕÚ¨|]$QA •-Xh–DÎqǾ´×y¯nóö­XXËd›šTîòâ ж`樋܌ê—5ÊíÛ¯W榃™ôÒ‹g? >ž%¶Äàpâ#d#œJ%‚A…õ1¢ÈÙxl–AòI_6+²®Ha2$"„M¬ãž2 óКnÑØpñÀ; \ÕHÒ’Ê8^œgyÙqy¿„Æ:5¶Ê×?þòD§>Gæger²mÐÎ=|üèäêíO/~Ý=;¾lÕ íz£Y‹ºB2ž2ˆ}ÕÒQ¡R§–Ëû$™Ta0l"‘Êd³¤­ÒÇ÷ óèô´TïÝÝÚŒ€Ù21y\Éd½˜$ú`µpÑ0Ob‡m‰§¦§Ôáô4}СĶŒ¯ ÅÐ|DôˆCµ¸³µ cþÝÝÛey)} kb^,k’_©º’]  »•ë ÛhЯi¸•Ùmr NêÃnŸúz½JsÜç÷dc!ÙÚŠÊTZN`C‘ùß_Â4èt:|]Ÿ/™LNœ¡5kÚØ+Ç6]í i›‹Íª­ç 1zs™o“ eÕ'²ù‚æþs¦¸¾ž;<»¬­êÅ¡%š±ûíäòêý­gÒ]ôçÞÁi©Ò±œ`,5t躢"ÙzZ…k%ûÇþy";Ú¯¾™R„¯¿úòö9¢üß|ÿm!s{™\ é}ý þK²®¬7j3Š~Þ=¶ÇcÏ’L2KLéR"Z¡JÝx(RÕöµAjUU•úªöÿB_*ªª«Ä¢°ŠH ¦©HPXf2›ÇÏx÷ؽŸA©£y˜W?Ÿ{®ï=ç¼2} ÎgmÛ£Üm{{ûܹsß~÷ N¼´,Q`.àO··$Y€‘ŸØÜ½@Zü\àuk¬Ö{®rÄ¢½d… ; ÀG«ßmBc¿qomqéxµR~ t&ŠáVu¡wêè“c¹R¥Úi<á“#ÿÒîU"ÿÿ¤‘—p/&¡VN¯ópã~ª\2ê0ðq&NLÇ|N‚ ±71âÄ£xô<Ö o{ÄØÍË÷±CW’¬&/‰±îXíO–n›“Å‚'Xã ®¬\übyyii¦×}vtºüÞ»³?ë·m£ˆPãS:+lކXZG¦÷‡„Ť2\9F:É8b™©Î“œ1ì1„Q7u—%‡9Ö(†±ˆ—•¹´F‰ ŸÎJœ) ä2²/„tKì©’³XMî»xhŒ“»¢ ×mJJ.%ñöÀZÿk‰‰”(‡±oèmªG Môº"ƪ …õ Y5­ÈâÓú³0ðˆQÐïé‹GçïmnjÕëД ìAv,ç~$[ ¸ ô;À·)1MÇDàŒŽ]"°É8- <Ó@ñ«\(: ‡'ûý#ùlaýÎÝÆnîšVÑu}åâ’¡áÁ3ûÖö¿;û¦¹µ¹ùÕןC‹Ö7ÐXݺ¹vPKåßùCV Ëq|ri!×ë£ËV­æÈ÷ £?¸F³ìÓÇ»W¯ß8y`Ùy5¢wÒ§*㇦k6ºtá*”=ž€í^¹|å­·O”&Ü ð© pø+bq* "lŸØ•dÔ´ÐnãâJF¥=‘ïZMû®­wÚi1ÍT< ÷ Ýw=ßu(@sCç ¶°êÚkEž1zmÇ6çjð;EÆ8”ʼnаm¬U¢Û‡Zµ¸»»ÇŽ ¥FðöÄUEK;®Eb©éÇ®GǬÄóðÿQºÍŸÍp8iÄq!°x +ˆã qF`²®G®§HrŠÏ¸Í=¹8quýοý¤Êâ—Ÿ-ŸXZ“Å–5ÄTuJ[žšþÎ_úõûó?¶z6G0 ó‹…÷­í.¢8µ0žÊÈ,žm:Ð5Ð,/«Yo2$³×mš«•f)(n‚$æ”ÌíÕkÓ|±O…½†IËwÖ0å:r¦Ä mîÿó÷ƒ™S¸vȈôÀ´lÛe±Õ2úy5s`Z³Â*z³cÀå—*š—$:`¿!lLÍX8X|Þð‡žõòØâ<ŸV »®½³µqüø›¼(ôö g`jPE'KsZžˆ@&“vì~ŒúŽwçÆu€¦1u çDKé‚ ¶{%MÃ{1rû6E3SUZ$ŠÓÙƒ•CKs“triw›÷·e*ïû=£  rëÁÖ¯×8–‚ïÇžÞÓk·Ö0?}úÉiu‚MPÕ[æÖãFÏC‘˜S«ZýáÎÝ­GÅcÓn€”´xæÌ™™kk7oþydöÀ|möÔÉ÷µò8O¡nW_]]={ö,4î¢$»¾›ÍÚ]]Q”W=)ÿ€«kéiãŠÂ3ã™;ãñø=6~@ÀÆÐÒR¡(Q‚PX4RÕ®ªþ€ö§TQ×]d]µê"Ý¢ÚM¤‰(ïgˆ l3c3ž§{î¸(Rw–å‘¥¹÷œóÇ÷^¾©j]B „8ÁXZZšû|öþýiÀD–™J¥æçç+RumýMW+‘Æú` ^ûe¹ 2ðˆ\éê5»»U»Üu\/éØŽ~A¿°³ñ7¤WýÙ¡ Þ[Sêp¢(ÊåËòµœ* p]L½u³¤œìtY7ˆþ(þfÁ¸˜6f­°¾£ÝÍP.78ý@ÖTÀ´.· Ó|ðl¦íV‘ <®`èfÇÝÔõò.3 !p”–^ìéQwÛ:Âʬp¾Ëéö“–ªÚíf³~¹»³¹¿÷váÑL~ûkÿq:ÛÉ›j³ã¹ÛÞh›‡?h*“9!ÈPˆ(oØãŠ®rt‰gÚ6)8,®p·R”ÓXà~›mOÔ[Õ‚*O²”N2ÍÒ`äˆF>ŠQ°æ®­–ð^S$‚bSEnÂÛ†€ð‹ |áX©+b; §r¸¿ÕRk‰´¨iŠÚ¬úVR„eÝ»óééþáÑÖÖôÔ½d8¬ÛF+OÒ¶©9cxÊÜÐU’ÁʱhG75ÅÓ] ·ˆa!ÁoTk¾Þ8¼–W/÷X}Á¸§/ž.½+ÏÎÎö÷õ^•¥ÞTßÜü#]ÃÞ_~þu ›!læü½œËFh’8=¶ërK 6WWŸOŒOfs™ƒ½ý•Ëw¾^Y^«Jòäø]Ñkëë=ÑH¬'¾ú׫©‰©¸˜‚|÷—¾}½1óð30æ†ÒD é›oçqZÐþ[@ð…C„»k­ãA”ÁàÍzXëYs‘2Èûúð@þxø¬XëÒ'™Áá¯^šfpY¸FFØ-µq 2ALð ðèB´—g]‚…•ŒÇ&ÆÇÀMË×EÛÒ[M¥Õ¨õ%Sb$j· €ÿ†©mÿ³!IÒØØXÈ/Ïòùüi_Z„‹¾ Ì übqƒ¯Ä#-£cP`]NGÅ %Ê#ð¼ÀzDU#[6CÅ#x²lÖ“¿C±x•Ž7µ² H¤®ÎóBw>8;÷ôÙOÌ3ë«'_LŒŽŽߦJ1ê†Ó ó‚À°'y8ûQºÇpaiá¢äƒûÐéä‹WXü4QdzÜ”$ž‰íÍ­®t¨\¹†CÙ^„µë©“|Aðû½<Ä(>õ¿?:¨w¸¿—ùþ»@W•vU©õgM]C¬W57äŠ%ò)/—ì»ÕmÚWë:˜d½ÑòrÞ\.Ç!ÜpçXfáñl0’Z‰8†fC‡ù¦MlîC*™N&‡ÄŽ[Í«µ‰b¾+žŽááèD6ç±éHpŸ]`6¤ $ДB[¢œÌ²!ÇP3"™h µ74¼„C’&:€úùæÊ\F‚ÇEÉgd)E!‡É±MËR â¡æE‹(““Eãº×jU0ó+œIr¤ïH¤ô±Ó®Õ°Oº1.år„mCdy>¡ <“†PréEPæCß5 ¬|¸Öj|èYX¤%‡Ö ¶¤…oèöóDŽß4áuYJï}>°G¬ÍHAÓ¹©ü3Û$^¾|%ËÙÁ`¸!’ÑÛýƒ|v{v–øé‡7"’àŸœœà?—àóÂâœïTÓiqóé2Ëâ;úR©$I‰­­­ÙÙr½ÖÃö˜>6¥ƒ_mÓah¶£ªº®ï½ú ªÍ$OÇ#XŸ¦ÁZ<,öÂ0VLÂb–~@»ÀÊÖP‹´ähÐW~9+• âÈNîtB, OØíšµ-Þö8¬‡"B{<îjêüÌÔØ¼i5êz¿x:%0"öñ!àˆùŽ)òvZZD¥Òwò¶¼ èÀ¶á¬­?¸ï¸F"í”E>IyãÀz›îE¾ƒG °0Fjd‚G6a™öá (’ X*!@´ld„==¬Ùá#a­Ó¹ft KÍ8žÝ „V75./~ýcÿ·×{eEùòñãíçÛI‚=úûãÅÅd€•åÕÉÐÒ•îÕ-(ög•êééiI)Ü[œ++™)Yž\MÜxv[Uå\¶0]œ{Žïª]˲ ]v:…Ia-µÝéuÍnu¯í‡ýn÷íþka2*ƒÒR½UÓÉ"/&ýA&&ñ\ƒ7ŽíQVài-2@=mÿàT‘©ù»ÛWP&äóã¿ô«f»óóóoŸ­-MMÔ˜%–¸b#¶©žõþìôèÉ d—=Ñl•Êš>ÈÍ­ ´Î¿ì=ùluaiÚsÍ 6ŒÅSÑv[ƒ$óýw/vvv€ƒ$l> ¤²ËZU™ž5û¿Ùòغ²Þ6Ê(:ãÙgì/±];ÍBiÚ¤l‰•HH¨BÐ(Ê3ÿxIÔRP Y§ŽÓ&qS'©·xg߸בX$Þüby¤¹>ß¹÷»çœP>•Îô»ܶdyèFmÛakkk}}}uu•b®&¢ôÊÊÊïOŸ=/l;tæ2Ü /KÇIå×—Á:—VW—ÆT€¡(ïs¬‘ÚïrœØjÔ^¿:žÌe;ã0ƦL¤¡êõzn2_«žàêÊ5ÿ{õ ÿþP'²‚ãÁKwš“£CnjÊ%Ãh£è‡F$¡÷¼Ï9^„‡¶†t86Ò&#¨ù¤Çùöè®9Æú3ÝЋpa DŒ[öi–‚zˆÅe% ´ããòÎÎoß{_òC§?º:»ã¤÷Yµ§ŠP’QG&TJ£X žÏfS^À£ý;‘¦ ¦C[jt½é%#60Ê׎‘ÕŽF;ËrU'pD—¢´hãCÙ“&—m·[ºF¸±´xÍq0¯õ[“ëÿ,=?‚¢Ù™”,…ÄÕÉD©Ô“¼ÝjšÆHQR‹¼Ç2O˜QèaÍ2Ò£Ü!Câq>‚{±TBi)^Xž~/ûBŒ!mÇ1#Ï£BP˜a(àÝ@Þ¡nÔA¯Õj‹Eè‰áÜÀ¨žTjû«/ﺶô_Qb™djì—Av;ëׯÓ]³óÓÊ+ÜŒFÜ7õ á¨Eδt2 Û%‰6J„&‘%%•޼ġ9…óá °B(0.`›L“QÛÃ$[—m8€L7&H,ÇZšJWâxR‰›Þ¨ov5ÓðY €¡›çå*k™š™Å¼„¢«&ôé?þ´5TySëY~æJî¢;éF›ìNMæ(†î´µ]›B©‹–<‚&ynî¦È¢tâ“Û·­a¿\.gÒŠ 'Õ×k,}ø©ª{šI¼¿pZn%*½®jš&ˆü“'ONÏßÀdsùÍí’í: Ë4/:RL)í÷Tí­³ÚÔ.t:ÚH?:ªìî¾ }‡gˆ‹fSh†„0‚A1žÁFV‹…µß;(—=zœP’Û›;h Š^ï›ïîC+©¤iyQ^ñH’‹¥§µt~¶ô²iÆ•ÎIÅÓzélBõŒd.;ÐŒ7WÙµ_~¹ðÑÇ-u$eòS×ÛÕs_Pp,BIËw>¯–~}¶],Ò ‘KŠâlþª=2TÝ*Ÿžô-E‰‹âÅ8|EŽK—£²œ(áì Dィuë¡gNO¤õ~—ôý­Í§íFíçõÀ°’q°NLI¦2Ùê"5M¼2e:ö¿Qþ/躲ž6®0:ûŒg<¶gìa«%4¡QI¶$O¨/íK*UÍcUêÏHú?ÚþƒVQ„Ñ%ЖM ’€Á&€·±=öì[¿k*õ©/~²ìÝïžïœO÷žóŸóðóEÇw5¨¿‘LeÒéÞdŠ…"+ÕÐAC†®…–ƒù$ôÔºÞÓ'ù4¥7êƒrêvoÂna ‡.ŒfÓÖÅhÔ1­Ð÷s»;ÙAŽ C©µÒp¦O¹Ñký=É”"›ùDo«¦¡‹‚@uÂxªÕÊ5èÄW+X €‚r"A @KöQŸ6Y†r:þËÐ<Ï`¢´=ªˆãI>H°N„tY2`8ù%0 £0Oˆ.xñ†ƒn %b2a†N£-@7°=Üô$NÀ½À´LÞ.æP(< j&žL€ì`­)\3Û@*KUµÑÒᜊO÷ …åµTOßð蘢tëºþéüüøØ»P YVWWrû{畊‹‘ïݺ-ˆ1ÔuÐ(5XŽyôøQ\ŠƒŽ»Ÿýð›o‡›îëK÷u¯¯¯eF²ºeomo7´Ö—_=°\ïì¢Ì Ñ…g¿œžÝœÉŽ•T›ÍÝjC[]ßä¨^¾R­äÑd•ãV×7}ŽÑtËrÊõ&¨†Ërå§ŸŸp¼Ûci寧gßI{¯uÎYký‡åiÄê+í盫õf:ÍÌ Ôô¨îîÞßýpîË/v÷žÁ´_øô+W~½»± #ç¸I’£%;ŸcŒ‹#Š#sZáÈ;ó" [@ÿ°ÙÁÀrÜa¯Cç“3§×žuº9O€h–;Ûzs°væâ“͇0= U*_l¯dGp>ÿ7ÂþåÝÊ£›âaL'”bçÊ"nÜc=صíã'ǔ圜¥B1&rœáýùcËó¼½Á‹% ?|zöìI˂־ÿk[!h>™Ï5!¹G~íâ…^·wûÖëŸ}~j­ºµú‹v»îyY¨ÂôôGªÂ7qýîÞý?_½ú¡[³+õ*=ôóK_\¨E÷ ÃT;»{'V[+ZÉÈ~Â1>ëôÃ0r43£q! ¯}üs0Çožšøúå5 ÉciLx)­-Û³`Ì 90¨(“ =áKe3N€gÜ`²Jf ܶ®:æQ±¥i I*óþa€-~FÒY2Ÿð~hä‰%¥MY´JÀ XÂ+’¡ò:Ày’©‚ E™ç$7ägþœB{³ECŸ%R ¸HŽóp(Ö§… ·ˆåÙ8˜fR Ÿf¡Ñóˆ=NXgh¶ˆÚëǼªªT.‰rvßh4oßù鿯}¹H\=qò /š€3dÑŸcô”Ûj=¸·AŒªé®”j“JD­”+uEéï类3tM·iÕ[è*q0eC?S,×[›„Ûf­I k©uܪÖ@qnVÜápØXyåáÖβ׾qãÆûï¾§˜e*ÈRµqþ­æ×7ï~òêe¨dô€²ƒH~¼za=a,“Jµf[·«ºU©ÖZÙ¶–܆w<„–®ª¶m f¬¦“»:ÛO&Ý.°®³­å€Ýšž\Ò+4³›Ëtз<ZÕÝ%hY¥áÂA‚„¡G ï,9˜‘Rkª•Z @ÙŠJuôŸ3y ¶ÉQÐ6!Œ@¸4]$µÂ×!Ó c¥­Ö›,·™* ÛMiM×C:ÓÌ ”&½-JöÒâW·‰âJîÿ§¯ÿÀÕ™õ¶QEqüξ/ÞbÇMLIš4E-I(BE|P+¾}ã'ÊHl AT*ZUT¤Q“€qÆv<¶Ç㙹3s9çš” ÉO^¤ñ]ÏúÿýwÊÁàåJ¥Þn‘é¸iŒ…ÉãaðãÁW¶¯]ÞÚ€1²]Çë¯îžþEÔaïà2bè#å½érÞ¼j…-b¹6 Fu0žÀ~M"X²éÉÑÑ¥õMÛ¶‡á˜§è-Í0'QÂéÇì ásïƒÇèÿ×Ü(ðN{‚Õ‡˜•-P$;›Ñó îv5Ù(˜V Z^È,'Ú㼈Equ‹ ~¯´à-qÅzIå$°}ìF’4™Í#l|„uk*¦fŠ–'Õ<χƒ ™…>T½£/¾þ~s}uk¥ž”™Æ“R®C.a–(2W´ Aç ìBQfš…‰Ö6¢|I舵ÚÒœ˜„ýM‰”‰‘†$‡…cÁ½@˜j`N× )á0¤¹Tƨ7LR¬÷žäœTrµ®Bàz“Üê!è…ðŽz„K DÝ T¼ó·ÐhAh.&‰X,˜ÞX§‡Ñ,™—OIÜE£BeÙ$²Ñ²R3tJšÁ/$ËÑPê¢LÞ¿õÖ7ßí==ünÏ­uÖ—MKú}×VÏz'†U¯Ù+mÿó{ŸæpŒ‚“²pt»¯´š5ÓPNN[Ë HGýþéña¯{Üh4Žÿztÿç_‡ãÉ/ÓRt]¬éy’ÁtÀ‡UK¸´ºª»•zç‚üäÙ³{_~5wnT©Wà3×öj†©õCørm© žI£¹N'~µ>àÍaé^½(éæö?ýöر½Ý×¶m§êÑo®Ä%i-wnì¾¾pßrÌÝ›àS:ž[8­v‡õþEŽM”B°C&ã;~(Šâ0 ‰i âyžÓîll™þÒ8šæ(ò*5áï¤I|v?ŽZGW œŒ>Åx†JæE`zlËŒŒ/W¿ž3OñøB(2x‰†¸¢šà¦añ|JlŸÈFº€èq¡ ‚À“œkЉ˜{ÄÚïòÅ÷?um»mAT¤xÙå’/’HQ”Dɲjç©H·pûf ŸÐ·¾õƒúý†~G¼uQu'0œ‹T8±^D²s–6‚¢† „Lq—3³3Ë3ç|Ù±ùå×ßÂ8²=ïòí•ïyÕ-ówz]é`ŸØ’Uýð}‰‡´ØÛË>ï^œþ‘£§<0d§è”QÔþ²³‡&uP,uË/±ad”ûÜåþ`Àëë]YZ–A pvûQ¥‚×bEv×*Øÿ'üKÜW>ËGÁ¹w$Ô§Dï}#e‹Œ]IÎYUYµû\6Ts;µ’®§hèÝ$UZy«Ž­ë&Â=ŽQT×b&³8 MÆŒ Æ8Å3†£‚JkC#weFwóþòâü/·gíïÍúÜn‰vá:”RŽÕe9À>;¡hCÝ )Wít8tKÈ‹vUN_£Ëº—H…Å(Q´¼:Ÿ†…½¥ZÞèÔšZPMÁ(9îèÝPH­#YÙ¡±\àÁ´MÉ@& È+u‹º¥Úlþ£š'Àê©÷T-¨ ìË îÚ´úK›*©¹vMB×éW©rÍÄJº)4;œ32Ô2Ïè q<>:zòäñ×i:ó|Ǽ×ÁÐã¬ëömE)Òù„üYX< G‹EEa8,R¶Ý|ºz÷æÙ³ßµ£È¥y>=}ñêâüòêÍÓ§×ëe2_½~yvöçíÍu8 ­góÉfóîùóßkð*®+âd¨w¹H‰ÓcºÞÉò›`ÐCÿøø;ò ªÿ*)/ùð[xU-ã*TP^žÿ½Ù|Ønðw{óI•f@VQȉnSoP9Ûª~4â8>£S­jo/Ëp<$e+.[á‹eÛ§wŸÏȳIêI)7^ï´ªM—*ZþJ­*ͺ°šÐjK¯©61Lô©PìÏi•×´\WsUÉAV[“µQ4ÍK³¨DY»eCöä(š¥m’b¦¢sRÆÜÔ©Î3 û l›H¸“EE$½Š —©vÈèíÉx²¿Z­öV‚óžc‡Ã‘ï¹A̧ÓI<š§ãh˜}Pµt$ ¶p•¶h´û«å âq˜$‰|>Ÿ3Swl{6ã¾Û|ŸLjønωÇão¾Y¤©#,[ˆ${®kqìFxýÞÞr¹Z.’ÉdGËÅ‚ÎyxpG!]}ŸÞi¡ÿ}tø•Ûô=Ç9­ÑÓdjšT‚–à¦â(ìêøx-€S”E>£qNéÊíi’ì¯Ft½4ÀÑp0›M›ªƒV«åòëož¡‘C’´Ûmۣª¿x2ï‡a 2ëv»°E?ëw: @ëçÃÑýÃ^/^,æ ðgWWP@A fæå=”ÊÈ€&æA€ä&BŠ¢€«Â¥6› ‚Áñ¤·%¦At. õ úBu¨L—áìB˜DÊ¢D{áJÞ0ã­¨ תn²l“6ÐDº€d€kÿ¡^åy½Ó*Ãd¢@#&¦ Ó ©„¥^Û6>¾LZŽæ®QY.•mN‹Fœµ ž¡8P[ š1Y;ÖTRU ¸¤¤kD‰ICÎùäEu©{QûÖ­Ûçgã8Ž]ÛQ5‰¢ðùóGóëÒ±SV›Ç¨ðaÝA§Â‚äÛ:MÓ–×:==D*ó’Y,ômëò¢xq|°] S@Uw£S×¶³V¾Ož>Øn÷mŒ…õåøÖl U¯p÷^’®3¿²à¶¦êóã}ŒÝ¶ê·0Ó£“»Ý¨¹ÂvÉz u¯!¾ŸXï¦yØñ^üðåjµ›Î6ÏÏÐ"£çŽ-°[Rªæu…µ§Ï–צ3) má%Žæú>ACDB’8Nz~YAJÀy±$îr|悞Ny"§ðñHŒ½o=TÔð*°ø³a§*ŠRÃiæI›Ç!(8ŒÏ7 b“ŸëÂÃ!-h¨þÑìýÿ_ ÀÖµ%·mAì ,@‰´('J¤²ì[û>AޑБ’mÅzP bßîÐñ£ü#Q*’¹=ݳ;Ý߸üÛwíÇÄÍÅÕåÃçÏ4Þ|€­®rºâ\>o¸ñ¤!ÇÞr‘Ä» ©¤"(ÈWiD £l­`ññ0î¬6— ^7÷ëóÓZÇñ°a¤¿?ùA±Ì ã<Ñ?ïÿ~¸ûÔæââ¥Ö \©ï›PÆn]vãÓùKɇ—=/%î½t¶¹¾¾ aÄcMIëÇqÛYˆnˆÆ»Ö(‚6‘Ø;7ò à2~—ø#ÈŠr.G›4!ï`iŠtƒ‚2”ô9gîš—¼ÏþÈâ¹ (ùyg3U¦ÔÌ¢‹†yI ߄һ zˆÏÀoü#®XÏÁWðR|›Ã¢ÒëN­z½ô04t„éh¹Ô ø/€+´6™.u6s²cÈê$U/ÇY-+MíH á.U2Š£J2 â5æhZ>‚ráÇ`ñ~"—‹°¿üãõëë7 È xFŠ@Ÿ&¦/ˆÍ-s˜­%OÂ÷—|zb˜<COòZËY»rzÒ¢h`qw]ãn¹dèn™ Àª =ŒÏ{Ûãn3i½²Ï»qèð*²TT%_ç ZcèÈNMÒÉMˆž ¼m¦}€Ð†Pž\ŠÎƒ>2ÞØÔÏOûÃt€nÀ»íwn±°¦ÖŽsÝz¹ê‚‹ ‰À\-|¶¨ëçgæöv³>jÈ «Æ.DgµTOT#†5êî~; 6qrºxæ…±ÝÖÐù_7Ó¢–ËQK/oÎw”Ðl~ÕªYG¿…YV¹½YËQnYš9:rù‡O7::°övbøêðõ3—ZýÏå¿ Æ+Nhë›_½xr͆ £`Œ‚Q0 † ð–ê ĈM}}ýh¸Œ‚Q0 FÁðÀ¶;„@,˜B£`Œ‚Q0 †  ¦Ñ £`Œ‚a h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á ˆ&¥¼Ž2‚ ’dån º9d˜†©…r'Ñ'É0>^$F•Ä@•T‹Kd6Ä/…¦ -£` @Ѥ”¿rá!3È0a@Ê2²]B#í^¸ÓÍÒÁP(PYĸŸÎ©šòl× DÈ®²áâÈR¸Ä‡+* Ñ›Q0 F@+¯‰/îI-ÔèÜĸ@jÌ„‰ÿ´«iåì`0:A €)£?Ã$É*>¸î.üÞ•ËÌ[“)ðS7 ÌcßA–«´Š•ŸYá–zWf€@*2·|ÌÁ •@Ú²úÇÆïVðd‰[@,“°Ã<\S±Ð9Ž!Õ;„ç"K©΀ëÂcV‹(oh K’JbüŽÇñÄ4 p…IÁŽ–Ž1MÀo)»HršA—`B|d‘mÁKIª&{èn#œ¤söÇûTÉ3>žÔ…'ÚH£†Z €èZÊcz›Èü†™@I5ŠÈ¤Œ™†î Õ½@ŒÄÇ ÙQ‰_/uƒ—FqD­TÕÀ¡Õð§[QHk‹s°Ë‹c¬¥0Á–Ú "!£–x¼‰«B%²:Á_S%xéY‘‘ª©kÝ(®Ù €Ëì+ñmm²&‚ˆoZR%P²&b;1å’Ô2œ˜¨Ä3ËB|2 ¨fÀ‰Ržªé<ÞB‡äDõ\@Ű¥Ê°=@f¬#„ýÿ×Þ ¡X[ÇYdµ }¹ËGZ‹šWR;æÒ0äúîÅ#"¹r)þÌ&É•q>) ­ŽCŒ’0(q“E‡Ý·`YJÊ_—;¬>±{&ÒbæK>—\%ˆ[™iTˆ >?x™pÐx3 Ät¶¾ùÕ‹'Gû\tnéÐÍ´¡îª;`t°bæ©‘™HÖlØqàÀ€bMLTé¸Q+Aào¢i¯‚Q0´rÁ°4Ú–£`Œ‚á my€Ýû: FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(ÃÐh)? FÁ(íJy 8‚‹ÀI¬êñ…Ç<‰4ž€þ6Ž‚Q0 F8 š”òÀ²ìÊ…p„\´¹UVÔE»"n2U¼? FÁ(Ä€¢ÇˆÍhÑ6 FÁ(ˆÞãòÈ£%Èã9xÔðJ™µÝuŒ“i ñÎÃ*…kl M &‰uìˆ7Œ‚Q0 F‘ €XÄVÈ~6µÌ$©WQ€Ç(L)¬Š1hVc* Ã;£`Œ‚Q@Ë€»€¼² ­xÅÚ€7ùiTDâ1–Èê„È~Ï(£` ˆeð8kÁMP=©Eç£í÷Q0 Få €è1.¿Mж‡* XøÀ7æ"ºù‹ŠfŽ6êGÁ(d€¢I[žàêIdh²$µèÑÌÁ¿`‘ Ép‡,EÐ^â­ÆÊ`À6[0 FÁ(D€bÚúæW/ž ‹Q0 FÁ(N`͆ ÑFÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€-åGÁ(£`8€¢~)¯c`A¤,šJ áQ†‹Õ L±º S%¦ü†Œ‚!JxRË`%bÜC77TXQbu9<²<@ ®¶ü• 'àOAOddqˆÕ^d.e£¥'1‘8 ^Z’øP<þÂåfj¹nÎ@%!šºd@1Ñ")à* !Å.2›ž)xxDØ(£`Pcî8ƒ0 ]¸ÿ™¢ÈŽóa‚n¥Æ¼PÔX]¿ß!.œñG]ýèm¢Ì#Œø[p†nÄ‘`ºç CŒPŸˆU ¼½êé¬d‰ËàÆ»}ñ~•›˨lËuMÉË€ªü›däŠPÌ|!Ê­c¢°;ç¿I’|¼¶Ä—Á Bÿÿ¯»uÐ| k³k³ ÑŽË_î‚;?'þûO°eñŽçÂO%WU:”’æ —È«+œ¡ÜoAR׿c4xd8à4˜™Š:ž‡Vpáè ¹b„&!°Å‚š 'L² Ò”v+2n­#€hRÊ#WÝh$ñƒ*hê)iÎc6š(ä[4€#øôé"Ï.bB‰ZÎÀÓ©Š£ÙãÏnx*9ª¸ÖÑDCÈXX¦€êÉ›¦ €lüƯ‹ný$  ¹ROvC‰$sF QCIlÒ¢Š¢Ü1ä‚kŒ!XûÊC¢!D«56ÈA€µoKäê—AØøEj¤›uƒ¡QOõP¢V€P7" n&8zCEÓèé†D3nH8¢…vÉ› €†Æì+yÍy\l S?®YG4ë°Š“àÐôbNÙi,.5øÝI­î®P"ÃaX½L¶b" WÛ`üiñÁ‹«¼&#jˆ·Ž¼Ú…¤išO‰1Èsìò èÌéÜÁܨ F ã´õͯ^<É0 Gï{` ¤uz\ꆑ¦ •îÿ(B`͆ –Ñ€4ZÚ4tƒ‚º3ÆDŽüŒñ£€F €FÛò£`Œ‚Q0œÛò4zZÙ(£` g@4)åitÈ­O5¡ÊR ä)xÚùŽ’$~ÕÃ$CüI^£çÇÑ!+Ñ?§ÓÙ×Ã>ÓpM‘;ÊIÆÆº9˜ê›e¨ë<›ò[,ÝÂF1EööÃ-O†}* Ñ›Q0 FÁ(Î og°0ÂÐÿÿkoÆ@y”Dõ6ã ]‰Kz€¯·ü6d øü§­6ùõÓj]ã9BÌØªþõ£tÁ‘I}„ÒÖ,*)Ð ­3ãp ‘å1&†*ò§L5ª˜2GÎøT)˜ÍÐ~7¨Ò„B…G‡ûôÖòkïéZðrï8€ @{ÿS»«é'TÝ5 ÷{’r¢tAÉJ'3´íªDŽ•¹}G­ƒ!7ê2¢ü;h@–ò“ŽGÁ`‹Á•ƒgo4[ E@£{_GÁ(£`8€¢S)ÿœ êN4Së =ڭ줃-d{mà€8u0„=“Ä€Ø2#…§ÑÑzuÜàŒ;€¢S)OÆ9u÷Igþ‡” ûÎ2yŒ]tκô‚/ÈaªNu-@ŽØŒ‚Q0 FÁpx»¶€Avÿ[ûg }j²íW¬·D-_í¾ŽU¥ÿPžÑ¦{îjÎö¼G±ï9Ç÷e¦ßveråÅ7¨ó¾·Ž¶TQÄ_+›YS¸FüËÆ@QƒE™{(ðrf@¤M'ð  ä©Ò@§H5d^bi(Übâš"‚ŠUP®0·Iü‡g ÀÌä‚0eáýÏì¤ý€&îÍH`å¼õhÅO8žÂu<õ%î%ŠVSP¤ìí×' ˆò 3e)1Hɤ fH•¼<Ûp:ø^h@c<Q?oŒ,·l(²šÉ>±S0$äxžñÇ«ÿ-€h¾’s ÕÏš Ï( ÏMÃ_da,G/Q~ÄåÑA­ÊÿiP¤ú‘vƒª´H6xÚà4e&¦ÕOaþÂŤž,Fõ3 )4 v\ÇÈáQ4º^gïŒ*é‰xcI=ziqEÅÃ&I= Š®¢…]qÄ;’vA‡õ|"­£º«hšÀÛñsDóÙWüǶЊª$¨k­OàBŽªD å+ñŸ…K„Z g0 À[µtXë‚< FãzøÈie4º^~h€Ñ\4 FÁ( Ðh)?ZÎŽ×(ëá h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á h´”£`Œ‚á ˆÎZ³aÇhpŒ‚Q0 FÁð!@!JùúúúÑp£`Œ‚á®^< a ¦Ð(£`Œ‚aht\~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 ÑR~Œ‚Q0 †3 –Ñ ´õÍGÁÑÑqÊ„ŽÑð!#|t ,Fî\8AP @–ò£`ÀÀ?Tƒàù€£áƒ_ÁÿÿÿGxxàÀbTÐh)? FÁ(m( ·*Ðè¸ü(£` g@£¥ü(£`ÈÈ0ýÈ!IÄxå m}óÑc‡GÁhªvº8€göu4|ð„°°ûÿÿ?$ˆ€lb&!‡_à~C”Ðh[~Œ‚Q0´Áˆ*âÉhËÐèìë(¶y€º™ˆ6Ѧéà·Ä‘dºèé4Š4“C Ã4ZÊ‚aUĶ<9òeŸ¤Ù@õƒ|øˆ¦±L^*¢[ÅC  Ñ›Q0Ú‘þXFCYû­ù ÁˆÚ!EFª ÑR~Œˆ6>! È"˜j°Š °fÃøH„ÌEV†,BP%šÉã:Ž5 `MTX^¥ÐèˆÍ(AÍxoÜ Æ%2t½ßØØgÇk Ã8Hë>˜ƒ<>dKm IŒJ¸2Æ…è?¨B-qÙN#'‘a,@–ò£`D´å‰Ï*ȹwxxy\yøÂ@n}#☓®˜¥?šE] tʧuVëcMð&?­CF•@£¥ü(þEãòhIòÀ:È3PU@–ò£`¸ô‘¹p6¦F<º†V9Ž_>§Ê€4°ƒ¦—Jd45ô±¡]Ô“rp%¤Á³^ €FKùQ0LÖû_2¶¹ÔF.…±–ÈX`ªÄ”¢ÿâzµšqu6Q‘a;@–ò£`8·âG8ÀlkTA<£~p¦(2ª4€}£`8ø®Wd4,»q#„$£î Ñ“‡GÁÀ€ÑT7zò0%áƒ|òðˆ "O Ñ›Q0 FÁ.ìF  ÑR~ŒfÑÑð’ÀÑÑq4ˆ4ZÊ‚Ñ,:>C8p`4ˆ4ZÊ‚¸Æ[GÁhøF—ThtÍ(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@£¥ü(£` g@ à×9Ž‚Q0 FÁ(f €FCaŒ‚Q0 †+0­ ©¢WïIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig12.png0100664000212600000240000037407210322727434015556 0ustar mikeuser‰PNG  IHDRDo$CegAMAÙBÖO¡ pHYs  šœ$tEXtSoftwareQuickTime 6.5.1 (Mac OS X)K#øÊtIMEÔb±h IDATxœì\y@TÕþ?3sïÜÙ7…YME WÜ2%DË%-둚š–æR¹½Ô}æV<ó™•š¹e¦ˆ"(®O %QQDAðŒlÃÌ0sgæÞù}ï\˜…"5{Ù|þ¸œ9÷{¾çs–¹Ÿó=çƒÁ Ñhêëë===•J%rÁ\pÁ…¿jjjÊÊÊD"‘»»;çæÍ›‹%00ðÏfå‚ .¸à‚ ¿8Žs.]ºlµZÍf3EQÍšÚl6ÇÀáp×VâÁ=8û¹¿².¸à‚ .ü¥àüðÇ0 d ®W®\Á<==á6MÓ g¢9Ô‚-c³#)))===++«¤¤ÄÇÇ'222&&&66–cÇoÖ HIJÊLO¿š•¥))qóñ ŠŒìóLë<°NJKK5MuuµÑh …*• âJooo—ª¹à‚ .ü Á*ǃ+Yƒ\5™Â•••%&&æç掋 S¨TÚêê¼ÜÜû÷w ›>}:¸àr¹-UÊËʾKLÔææö‹ó “¨T†êê¢ÜÜ£û÷ËÃÂFOŸîñ«€¨D‘ƒÁËËK&“ñù| ZWWwûöm±XÚæ’´¿`½“ØP‘³Š·õðpáÓèÓúêj3_ª’MÓ;l暪:Lª’-> \øÛÂÝ™’"@dÆa•í^kö Ú¼yó*srÆÄÇ?Õ³§ÊË‹ÇåR4]}ûöÅŒŒ]ûöµ [¹r%Dyͪ(xø÷¼yTnnß‘ñþ}{Š=½Àò e·‹Nfœø~6­elȘ““£×ëýýý•J%A,g’$kjjŠŠŠ$Ixx8ÿ]zö˜‰Ÿc-Œç÷ィ¥¹öÚi ©èôl|ocYö¶ ›Ò®è"":G ŠÊwXÒÂ$íâz„ùñïrf­>±sóÖ¤ó<ﮑÑñ£©ñæk…)Aè0òœýã’SKz¹ý¡í¼dEήﲂâÆt÷·Æþ÷ PÍÿ¶+'Ÿ){¯gÓtkh•|¿å˜ßsã"=î_üL¥g·,úÊHó±òbÊwdì+q^ö«¹’ºç‚hò(¿½_õ{nl·v¢û®ˆŒfCJ÷c„²×óg*=ý¨Gýiß ?׎]ÁrZ’4˜#,áIp(dîÞµ«89ypD„¨¤Ä€ãÖ‹Ùhd!IȉvsK=tèË  FfßšºfµðøîÝúC‡z‰ K,•x½ñ"x;«„œ.¡ngJ êלdŸèÅÅÅ¥¥¥ÞÞÞÀP§ÓA|æ¸9 dpÄÙÏÏïWÂ;þÔ¦/øîõ¨QC}i+Eªý8á| ÆøL%ú½óÏg¹7¼¸CWø_Uƒe†{\ÝùC.BŠW·Þ\ëäÊ´ÿ ÏW¶£çg-í&/_úÒrß^QÑŠ+¾œ¼åzþXÑÆÂHbÜ«™'5„˜Ë6ê.'½2cñ¢ ˜ŽRëï)G•_½ø[TõÈ y#S]]]Ót+ê –MM(ºÿ® +¯L>yYÇ›ot'ô™Í3§Zhé\:±#ȶõ誡Sm;Æö3/ŸöÚˆ'<)~x}®'ÛÀì×jµͧ 5Xyƒ°Œ Î0È¢(ŠÕ3‡HC?>ÜE.W[Š®Ö\kË! §h¤ÉRV©àà.Ø 2Då.-a=>ÖQÞFZÌÕ^µq¬ "® Ñ6³•«µÉŸ{íðáˆæ<°rxëÖ-™LM&» ê8ÉÎp…»`Ó¶mÛfåÐ…?„¡®ó?JœêȺsáóT„6œÙïcñòLšb‚èË>˵«“ôOØ|Œühð/žLùÉÛÑ“ïþìÍø4ñuš¢M$Ù0šõµ•:’ÊÝd6‡®­®@áÃ<‹É†q©ò¯{ô_1{ßíy=h«•¦9³›Ù,f Ã1®½m5Ó\>ÆÌ1Úl¨®©¶qc {–V‹Å†ñqT¯ÑÝÕ*ûŠËVW©1P|wµ’wOËÍSF™™ÆÙ¬PŸÏ3ëªkŒ¨»Š¹g÷‹hce¥ŠÅb!ÎÐ¸ã  ‹B—]dZ´Õ5V\ÞFFØK™-Vs-ŒgäH›ì”îeÞÄ!†…ì¿QDˆö²Ívjž­3<;OAèЙüI¡0e?¦B^æ…¢±íu3ùkôö¾N$¦rTd£)‹•rÞÔábx MCÍõ3­­¬$¹2w Bq+Ó£äýNHs4!ûf##fì€ÝëcuTÄÔ›Û^­–éÊÅ*nµ¦ÌÅ!8¨ª¼½D]› † (ÎZâðÀ»–ë9\-‘–‹…&GNä X0©)dHjù”€~R]x°È.‡ W£P(@xYzÀnA„ k¨&ä€M냳ÜUx¸ªùà[Îç¾8À3 æ³,rdIÝ½àššòãsoôsÚ‚u,alA Dtè+({º„ûþhOÆÉÂ)ÝCä¿<Q}ñöeÓflÌ`­ænNŸßùòºÁÃÞ?/A?†z. YtdgÑ ¸·:Þk5šûù‡ÿzý½­9å±¾ª>ó\‡XüýÔƒ3»A¼q`ª÷GfL‘,Ôã³<Ö_ϯÏíŽ ¤Ý:ÂÿËð÷‡\^²î´¤¦¦‹7¿=jÎŽ*T«]~òóéí…Mú‡3ó‡CÓù¿×wwô®Éuc&¯gî ]ž·mZ;.Ò^úîÅÞ“Yê9?'*km‚ƒê{)7ævç'-ÿòg'YŸãW§­µ+A¨Éè½øi͘¿hpÏÄFæ_eîæMÎ ¹1ê‰ACÓoLë¬h¶ë5°¢3ií—¾aØ:¡}ÌTÅÆ¤lãÌŠ;E'󙬓ç 9ãBm׳·¡)Þ„5kÔÙŠê~^ï?ðŸÎå¥\ŸE@Ó&&žjhÚ'©ë˜¦i·ÄµgúùÊ’õl?›n}1+vîÎ[`ãÛ3 þôãM&F«ñ§£îFåƒ?`œÎÿThÀn3¢æúD}òcì‘Hä¼i4AK¤»Z-W»‹• J%”H9ðÝ‚5³Ô`$p!¬îtH®Ñ€=w~ ƒõW_£òT+•V‘´-OâΊm\xÂj]BÕá¢ÆÆCî‚f<X%‘cÅŒÕ^VÌP£Ô¤±/ƒ@YXý²¦ ´H†ò.K>RJ›M”(øùø(YøÈ-L\¿/}vÊgóµ±[Rà"¹T*ÕÞHßün:¹ÒN®‚&­{wEÜGÑþi«ömœÛÙþ<³Y6dÆÆÐ=9eqÁâ »—vŸ£îTùƼC‡8qÏîréØën„TÁÛºxwǤ&ÏìÊÇ+µ¯¿—’SõbhPé™S™à#%Û´ ÆÍPðíN4#;R*ªˆYvú½=Ýɳ#Üúl>^2!" èIÕ(ã’§Ö¥~*• ,æü«©WnŠÏ®ˆNX˜qûWC%9ik3М›Ö·¯WpÔÐÞ>³·.ÞÕHU¨” Œ¾½ffÏÛשwÇ?/ýçüª™ýÝ ¯xˆ®™þqJs•–^ÐÈüË¥/u‰êû¶SÛ…J™õÐâ •¨Ù®{+RqÛgK§[çÆu6mH¹Í+½™½2iBvìÔ õ›Æ×ÿœŒºò–Jõ’ÆŠd’3JK—Ðó}¢7£Qýe2“_ï7³çÿÐдMY«ÞŒqC´Ì]ýÏ’°Æ~N]>|îÎNòìeNß´ðÙŒLB$i:1\p¡y8Þ·wÈVÙ„öŽW!Q__çΕB!ÓµZ©RŠå*\"5¡(šéêpLO&º\©Ph4¹\Z⌘W<ìÿX„ðVH¤´H©(”HªB„”æá\›…cÑc8ÃfŠæy6ãe¥ÓéØû~‡óË–P»;jev–èêêjˆÙwZm—þQg´!Svú÷tm©#=G÷ ² 4|õ¹ýWŽžµú™ÐÕ¯¬O[9¾ Õ‘bôÓœ¡^ *+HP®±ßÌí}×ш²×œKiO,üǤ9ñ]Ä~¹éuoüNæAM—¥ßÆxóu:KÀЉ³ˆU{Ó.¼ÐE,ÄFˆ >²™tVLŽ8|ÁÅåÖ·ýÄšaîǶm÷8 äèÞs¥ a—öA zQZ«[ß>nÖÚâ›õxXJ3ì4êtUH2e{â„n°VÒjof× OjsγÖ ”UT¢Õú8³ÕéŒp5éë´Z®¾^P\JáªHB⺡ÏK+*µÞOˆÐÑ={OæÆ¡í9Q%õZ=5¨¢ë‹‹ël’ ”,§dr7YÑŠ(£ž%Ö˜®E¨YæMêuf„Œ «ª–º®%¶Î­·ïªFŸœ¼pƒ<¾¿]¿õÂá[¹!ûúÔÒmŽ™oƒŠ©ˆù E„“‡OٌԟŸ]݉ÜšoZÓ~.É:RÒuù–h7ŽÁLt7qÀì/ >]p¡5Àq¼áÌŒÝI0™LÈnƒ6@ô̦Vã<®¢m…B)”É9r‚Ð…q¸Ì^ŸÂ2µ,™ÅÆXÙ•†õ •©1œä+<9 ¹M"çˆ<>b;dÀãá5ÿ§W¨¥÷x`5 Â;ö×o,OpëxkÒŽQÖ’ýé\KbvWpêlö}‘©¥&OM¾| ûÀƒi§‰l¨È^ÆîÂWS&$æÍÙqn¸/ÏÞLÓ&-û¦±i¾L—àwõóÕSyˆ°Æ×À$Û¥an¶¿òø‹®‰áÜ‚¿æ® ØæÜ{fÖpLk?bD‚Uv«šÕ :@€ŒE¹˜H*”+¹r™M$âðù 2.WÄœSS¤¶Ö–|;œÅ 4òuÊ@“á'šäÊ\Ð3¡„C`6+Åá#Ä!¢õ°èTvo–P‚LàWH³‡jlh 9P…ÙÌ<ÃØ»¬8·ºkZ5Yÿt{¸<öW”93£mÈùÌ̾w¥‰6D$\ט†ùá\ ò ŽéóÔoQu¿vajÇå?dn;8JNñ…‡(µU…Ä&áq0u>ãÍ~~ÅÅYÞ]tC#6%Zúÿ$¨3þ²úíÍ<€fë?¿dMÒÓ'¯ VØvŒòÞŠöRŒ?šÃmhß¿K0:¾©`}\Kó‰Û÷çqû´ÄxÈŠx,K #¯{ðCtZ~ºb^ùå¯f÷Ÿ2(H£Yè  €¿ÆkG^^ºmMjîøÎß¾ý–Þ¾Ädz•Ãc›óK:kïâ5¢O¤2ÌGzmaN*ù¬CX6073?¸cÌU~l×5M½ë3†­ÅÖÐT3ŽOþM³OïIÝÖ0ýê¶'Ø —q†E¡¥3g#ɤåræõKcEö‚%iÇ.J~aMúüþ¬ãµÔ‰Ë¾Y“vq|¸šmfoZ“~æ¨ Ú- Ä i>$֔̃ãût?hå3©•Lÿì'\ëq7QÇïÊ Áþâ £(Š=3û¥=pkÛ¶­ºOŸ³…WCj«h__ŽLŽÄ"Dðó>F™­¨®æ,M¸÷î –r¹ü®33ÐÈ'BzÎÏÓ©JÌ÷åˆH$@ÂÌ6.F‘T½åÚá|9?¸È~fI’„ÏÍÍ ²Zåh«sƒA¥R±»”®3³G J@@˜mµáˆ6QÌlƒ¥JuNF¥::¢½küéì0j§VI$”õÁ%IóžŒE)ÇË»ôtãU—¦^D½>Š’Hü"‡¡• ¶å½¸¶‡Q|âË•hqŸPp""0Ä@Â~ºÂqï€r¾>¥{§o;ø$?½õÅÁþÿšï+•rGL¨ùIšöïn^R\_š—…žˆQ¨ä¶ŠcGN£!ÕB©ôÿÙûส3ÍÓOµÔµÞÖ˲,$†@²©lÖT&;3eÈne+l;›ì„l&SIÕ„L1µ™šjfw6!Éî² ¬I2„ ó° Ëù¥·¥–Zý”ZÝêîýîý»Ýî¾jµå‡à|uë¯ÿž×=çžÇwþsÎí¶‹ ²—ߦÜ7}zƒxüŸå³rµ/ Z×­m‘ó›­Ñ>ÂrÕxr™qh™ÑËVƒ‘¸ªÚíñØì;äÝ|uǺëo»åæ¿øõY=ñYÍda‘xݾ:3´÷—/q·Çç¡weÓ“ÖÞpN”óÚ:_fì·ÿOÏ9‰æÞ¤'¡²Ï?½ÙìÕÉ­±^¶í¼C<ñ¶¸üS׬E¾Ý7í¼Y¼õÚ†?¾ksWï„nŽ>ôŸøÂ¼ôô\oŸÅäÆVUÎèEóú¹hÞZ¯×cxÏë¯ý„xæ™çïÚr¥sàGܱWˆÏ©=3…Ò0XfdóÐ§Š¹=³”~˜w¤ÈE[ö©­í»zÛOÞ?ø‡^·Ç]mw×€£„¾¨;süì¸rÛ¶ÚZ„ŒÅbHÁpš‘R8˜Þö?~õÏ_ø£*OÃÕö¬;›ÅTÒ:'¢±È‘ŸüŸ¡¾ô-[‹¥ tóVÒ ƒ‰D¢§§‡¾˜–qâÄ P]CC¢#ÿêS³ ‹pdZ¼ÿí»›¿wðýø?ZþÅ]ßå·þÛ¿½­m. ‡ÄÀT(žRüäþWŸéåÛËþàçŸê …¦oúꞯž¸óöî¿#çÏ~ã¿ß·ÑÒ’}SœÚ–»¿,~úÝžêï~ëW½_º¦îŠÝ!^zù3×µ"€»çš´¥/¬1®…ÞzÏ#âçß¿ªñûB\¹ësWN=¹ëz~ýä¿é4doëCÏ|oäcËs·®{í÷'ÄÆÿ2úÊCr~£Ñ(d(…,áÈØ|fb¡aÍwÑ¿vëŸÈ…ÿü_ü_ gõÁ5—ZDÜÞù ;¿¸«YܳhÑ4ÜþŸ~xÍÎ/ßÞó·Ð?õÐýUâéÉb™QP0gf!I&“ôyí™» :tèðáÃu§mmð^ÕÝÙÑèš½wzèàdtªû²Í›7oÙ²eõêÕ¥¾3›OÁþîÖë­WÝP×Ñáм·?tðÍÌÔìU&)]Ϧ¦¦Âá0™zuuu0Ñ@`pœœœDð%aÕ©ïÌ.82Ó‘H2“_{ѦIU~58völ Ÿ «×¯mñäB†Ã)‡»¶¦Ô Rv& Åg«jÛÖ¯o“¶MRgÏœ™šÉx›;;rë©éH,e¯­­á={z($Z»»üUV173ó’ !æ¢SQKµÏãʃ g[ººëª¦Oôy;×´xíE³>5É6¬jið{솖•™ ‡gœÞÚj»%ˆEf­¹Ìd“‘дÃS[í°ˆì\,4qv,\Õ´º³¡š£.Èj"xâôxUSWgcuðÔÑ©êÖžV¯”™ï­XÎ tÎáéN_­Ëf)õêJæÖˆÞ[ÖåõUëû’x¥‘„Ë篦¡G¤iu‘ÌXµõªÉ¬Óí«q.Z´|ÅONô²5-—u5D§¦lš§š’*Ágé–‡zÚ„Âàïr¹,‘H„N3Îÿ®LžHàuæÌ™cÇŽÁ dýØl6OSSL¥7vuu~"&§ÐßßôèÑ“'O.5‘ÿ™í I8L¤‹4éÂÃPC: 3ÐÛ’>2—ÆÚ÷2â¢ïí-;T]âPt‰ãÃU?óß™åoç×é#ií ¸®ô™î5:ü~[[Ûèè(ìp âÀ¥µµµ³³’x¨Ôo3r ííí¤@§QÜnm‘=×N=ÛàB?.Iß–)ú…ì]—ÚGÓ—Z.úH·ì¸èuô!« eÏÇ®‚–1±œHIþ°Ìð‘™ÐéÆB_hÑwòæ_hLkß”iW1tPÞn·ƒE<:@$¸5ÿÕ|:ô_q üËUd‰ ûýeþŒ‚‚‚‚ÂÊ…LcìH–™FIEl£t™¸¤üÿ3#ª,N„6ó¸Td)SPPPøp£Ô¯2´a¦áÎàTôÛ[“TÊGe¿·VˆÂ À¥F,Œ~Ñ(*Ã%ðÑôrâ£SAâCQGª‚.A|è?šU&tÓˆöÅì?üá/Vþ––‘‘‘‹…s‚]þõ^…•ˆù?UQPPPPPX¡°/×Ñ …‹»ú“r…•µg¦    °â¡öÌV<Ôž™‚‚‚‚ЇÚ3SPPPPXñP{f +eí™j8/{f›6åVh-‚gvyÑ@uÆP^© ðò*<ƒâ¾ôÒÑÂ.‡Àwß½‘oÑÊ}tµÄgðݵk=÷tÂgžiÞ³ÇÿÜs}†¤ä5:«Ù K‚9[Y«LQ*/ÒPõ曹¯ªï½7H ¹0mPxLÖè&q˜‹\Ïl*|Æ´ŽcîFŽˆB}{ûö(|!…Nx…I!úk¯þþ÷8Ãäò•¯œ%ÑÊÏ›lEA§ÛòóS*9Ãp1do©o|XcvìØôÈ#¤ä0æy.Ìd¡Ë=÷䪫X¸ZE:¹ëyRÝ¡"¹Ëf¢\üü ©E.Cu³‘Ç/¾œò-ZAeæ¿(Lâš7ÂR[{aaeTÖy à&Á=‹re^XCV¹¢¹ äYøDs¶²Îš¢T¢ò|ÓF¹¨5“Ä(wCxÚ0ÔåÝʃ ãáå—Ï<þø@Q_’ÀóÏ7Ò¡e:y}’\ fÊ’ò¶hnMò³((®!{KÍ!|åN`ò»k×:®—sÏ3l/¯W3üiøãaQäÏ  äÞ½½§n¼1úÄ-_ûZW©4wïÖ NGTαR8nauËxä‘Õ>_º° (3ÿËW,½µ›VTÚy‹ÁØã¾YAE³h( ‚‚ s¶ªü;3>…¦OÓÆnÐ~qdçÛÛ÷¤ IDATÎfapá‡OCñæ„aíH^÷cp`jî¼1#ôi))%Yʱ…'÷Šžå[RÞ Q~~E©£†KÍáãööèÌ7ÇE`LœiéiYòL+º0H³oØOÏ<ÓL¹"Ëa(po¯«ð„¤œ Š\¥Þ'åSèFÃÝwoD+ÅJû‹¥PNþÏGÜsiíEQAç- ÌH&sÞR+š+”;{9¥Pø¨Áœ­¬6S˜ÄäÅ^"À\Œ¥ì®Ž2^,`¼xì±Ì”Ÿ}¶‹.=U ^i|úé\u³ýÄ.æùçëï»o=8Lÿyõé"ù|òÉÓ¼8†ñ–+2Y*ü¹äÿR+û²tÞ={jiú‚BÉ+—Za>40g«Ê›Q:µ`ÚˆY‹âÙ‡$wQÞ1_<4ä@š_ûZÏÛÛ“ô\:hÀGhÕ«,)o…XöüœcùÌØW¾röþûÈÒà ±¢—%Ï´ÒˆŒÑQI^­Â0G."ß0hÃ(óÔƒ8çJYhK¸"ëóÏ7Pn‘IÞ:2 ‚ü/K\qZW×yñ±Ç†e¯ ËäÎ^vQ>B0g« ÷ÌDÁ'žá i~gyï½¹?}≡Ïì0æâÚµk]aú¼6E§0UDãe ~ùòI~ÄR±¤¼1Ð¥iw¡âüp Ë›CÞ0ÃMÁxèá…£sy‡r¶åê¦Õ*’†œ00³ÑfŽÊ*¥LPR¸††œ†+£°‚ÊÏ!Ìã–j ËÞÚ+è¼È Œ¥VËQ¥ ¨  Ü­¬iS˜¤kXÇ/Y—CîÞÀLèg åáõ[ß*LŸ7_~ÙÀùCêÃìKIÁ€/‹F»Ê`Iy£BßË¡^½Ôü¦°¼9Ä‹âGÀá+x‡E³½sg„ШÄÙ—Yí¾ûÖ³Ñ&ô!oYмT0©#?|üž{rôPXÒ òÏ0»hcXöÖ^Aç5€O'¢RxZ@.¼(Cg_Þ•p… ÌÙªò=3Ã'yBg˜ÜqH(Ï=ׇ¶ÎË#´ª.o˱^|ñ(ÏÑu1ä¥yJ C%¹{÷xuÉ+?o?øA¿*–šŸÂ–7‡†üP–¯”ÃWð‹f[Þ/‘W« ¾àWæ ðnŠÉ4|IE^*žzêÊ+¯‚>éÅJZAþËŒ»hc8­]¾-§ó–Ê*Áè%@ª6…¢0g+Ëä¤ÙJÅ<úsN…‹…x<Þßß¿sçN“0êÿÌVÔÿ™)((((¬xœ—ßfTPPPPP¸8/ÿg¦     p!q^þÏLAAAAAáBBí™)((((¬x¨=3…µg¦    °â¡öÌV<Ôž™‚‚‚‚ЇÚ3SPPPPXñP{f +jÏLAAAAaÅCí™)((((¬x¨=3…µg¦    °â¡öÌV<Ôž™‚‚‚‚ЇÚ3SXœ>KÊÙñÉUÍ KR–¥²Gä"ιVÙ…ú%޵í«.v.Ш>²eW¨æle™œœ4ñ>pà€Çãq»Ýe>Œ†<Gä RÔ·‹àpùº&)²åü£Ë ¤!ï½ð–pá»1R!äÌ ˜ñu›5säj¶"ßÂ&·Æ¤ô¶4/K ³N N‰TÛ†Îñ÷›¯rŒƒË©ê &ÊÚ™cˆbÐÃ-‡1¤@cd9­R+&÷,ÜrÇ‘Šo¢œ?ð|âÂM—6)ò-‡awóNgV*5Æëý!T‡™¯—…Õ”ëAõíóUYÔ‹ÀRU\0NŠ R³"ŸÃ¢.”í›¶n.?½x<Þßß¿sçN“0–‘‘ïÇ—IfÚ¸\¯U~¬Æ&Ã8ep,‘«¿ £;Át4€‡ƒ^ê¶b»Ááu¥¢ ƒ„{¡bÐKÓúx:ïahŽ+r}•®>Ð $…x¥¨ä†”B¡.»Èî`8b2ò•o‹¦¹x1/ͪÑååMÒ0'6H @6̃ÜJ„Á¾Ì.†A ‹”Bál©pà#»ÉøV4ü‡eR‘Ù­·ÞjÆ288hâ}ôèÑrÈŒf(ò”Ñk oÊÔFŸjk®+ 3¯—YåJB¥·¢üTt°3‰²n+E¹­(K V>ü5þÐtH–ìÅ&Bù—Œj’S@•\–óè²oaHv!…d¨ù6ÿøï ÷Š«6‰÷HRøcõÛ6ˆÑc¢Õ ?hè‚ï“ýP6T¹ŽÍ&Xö×8º¦S¤W\Fä”é’\SQz4¹È9¤BR¶{C½›ü› %Õ”¡—ñû)|i¢ N— ¹îœgƒoá Ì<5W•â3¯¢†©ÁKv,>>^)e,=媔}ϱWÙÉ·- ×±4 ÉÁJE7„/•[ü ‹R‘ÙŽ;Ìòvî–™Á&C¿‚ôŸÍÈaNÌN¯«ª‘¥ìnÐC«¬"s«°þÞ 1l‘—¦4ßG›ÿéÐoå”|µAMo. †¹…\Øld/H$¢p¬ŸÈº®&ÁwæGY/-é!².ð‚„îMkME­®Bö2í½é.@Ö† *±zé‘g§—Ù; ß“žÍx«h¬PàB·BoÄäbÒ<ÒÐܹÒéYÔ% CÊÁÖZ¿huü"“úÝÿ»î.½ðP„'ï C×tÝýoŸ|‡’âèó¼%Øümžçà€Á¬@Ò Sþ¢„ ÃN&6æ3p˜-µŸ7HèÜÁÚ™"Û$Äm35[ª§A¶ ³ᢰ׵ÍMÈ’½FE'$RþÍT.“TLÌñûúO¢uöf®†£§¾š|ãão{ÚDlD\îœ;’´³„W))l²¾K·ˆ tNÌ 6ÚYÁЉ”u4†Õ¡7ü7Zìogç´¹Ú}ö£QûEˈ&qJd× K¨3nðbÞz¿Ñ儱CŒTÄ.Ç«ÆY{“e·;’ ìŒfݱ|Œ[æ@rDuxVî¡ÃµÎ¶xr¤dÿB¶_ÿÞg›¿ÈÏE¯þßÞw›N¤Û¿41ü#¼!1¿cw2p„^¯A’/¿vH®5€\ +š$yäB $Õ5b˜¼g}߃rgâ•=®Û…Îm20É1ÈÅ„r /ém—ƒ>{hýœßD"L¡` ¡Y‘œ&{‘Â’Ç%Ù‘½x’—Ø[©8A0IÒh‰¾‰>‚žR”„ˆ{ é–tHTÖ Ñ’ÌOþM_ dùjöìÇ,« Œ–Œš "‡Zçøãնǡǂ3W5 QþI ½Ðñ™¹qv!öÌd³ ã YQD!È´’ŠÁãÔ|t[CMzrz]kìĨ.kÚE5C‡ûjÏõvføûþíÿ.rä0B‚ºP뤈|Ó¥A‡ )ôDí­µÆ¥Èœ6¢1…úÜJžË—’˜c —o…>M&…`¸%È”¶ÎÑû ¡ëòH#¢4H2ÂØ&cöB~ä[$±”I 2dVœÒN¸Ž;O¤F(ó(½¼ºÉ¾W\µ“¤á ]v© Yû–¹ 1&ÒÈ ·íaø^1õß>¨ûìkÉý@¸}µTß9Ýï´u%5G2b 3:õÉÖ:â3H<œ‰µ[=$q R9=”…>Úmò’ h†å’Š ,t¼l¶…Ḭ ùŽÅŠçÒã8o uô;Dc—Ï31Î.ÄžÙëÓ"2íòÌ0Ñ ú Y6Uæõ\¡OóÝÍ×Aê/å:â3°7Û Èpßdíú†¹ZÛú™Q\²k½öpz`"¾ºÑ &C 5ÛµVµ6}-$PäÈ«W\÷衃/QRHm“wòE À%Y¹ÕRß`wCWaߥZ ¤%xS¶þuOö“䋌͓Q`™AF{æ yK÷ø¡ÓPR››‡… O$º2ðV¿5Ó•±BÒí¶lqª(D ˜ÝÆ©¤ÐÉdFÁ2–îËÕƒ.2ãÞ²Ù@Ã/ÕÛ™Ò¦&ý¥iÛ˜ÏæK¹%~•oc›ÈŒÜQ#TeT_¤@Ê•nðùZ–ÛÀüÓõ¸P®lñÃÚ¸æƒxèʇüï? ÉaJQN9^ò³d—B_qU©[ÙV(*“ú|Q³¬ˆ±Èœ:i‘;SøÉgÿ8n1.µ¶ý)»°dö¢ÑRLî€)C‹"2Ð+µ«“;‚½À=†ªaB:Q½8öIè D P3~ßtó³šïà›Â©mgäH z²øÁœddÒé+² †Ë1_(hp÷y¿…ܺ,_•óL@Y@Édǯïê)g¥±ËÌöo|Ã^£££N¥â§2™Ø„6¯towÅÏ쟩óÏŒM ­ØÃÓ©è»cñD*>Bóî€åJ¸à¾Ñ‘ãv—LÝb‰MhMªÊû.”äÌHÀZ㘠Î@±[íßHpÖg±ˆº*ëlÖÒÿFUÓš¡é¤kz¤Ú»:㲆ÎÚÇÁUH¼µi*–vƒ´6lÜY/Ž;¦.ël=2¦çšæ³Þ)$[ãvU55·†ºµ©¾±nlÜ:i›ÃE…b%œ•e“³ ’éŠnÙ%.„·V瘃˜lm›ÏL¯ò­±O†CkBɶnë!6Å©ñ9G I\Ìd ¨Újm¤]Y«½$)YVX¯«ó$IV²%™”++’°‚#5îßM#ãÚôŠ(åuO¼Ü4íÿµÍY…¦™N&³Y‹öÜÙ$ÝÊ—œ&n¡P*Ù,5k9t›þ6(¤ ¥Ô…ö€1TS’_¶8^òX¾rþ $§6×Fí*Ư¤DߌÅ^“¥“R2“ m¶iÙÓwÚ«Žuyï Îź[}çí¾¨ $±à$•Й ä‘ö'|¾Ù­É¦“cÖU¾™#:¹ø³\a‹V ·Í6OÚ5ªƒÅD&ìQ¤ÃÒmÉàjY’ÓÂê×_/$ø ‰X,œK­€Ë‘ÈÜ ñHLkÆj\ŸÌØâ-w´L'®ê¸ûðäoïZµóXüµ ǰZ¸ñ€;˜Í½ðªkDÓAWNoîJF5ƒÄëžHfR¹îŒWMÕÍ•EÕÄ•Ž:åJg±p‘ŽQ2“Jeâx¯ÕÉNˆM胛gâ®±ý›&k£Ñ½P-Û´Fíféó‚ lDJ¡W®éæ I.²ž Ö¬ŠVó›$I‚Ÿšl/·¶6d\3³Ak ¤½¥ ·¢³R°×\ ³µ±mâìÆ ë› ®”kW"~¼ÊÚ 9›9Kk´™ÓÙ™†;[˜«ó¦n¡%"òÅP‰‘ #^ » 2i95‘š°„>'ª1õš8ãHükôê ;,§ûEŒ«æT2(׺¡Íá8‚Ô*%íKh@P2™,X*“˜¡kÖö6d_D?Ï’žÃ…Ûœ.–ž¡Kóœ±UÕÀ‘¥–8"Zm9%^xâ\öuäj6ùª»êëÓ±—)Ï4 ƒOØÆÜ[ê-ÁúôÉX¶ÞëÖª¦³µ¹Ô O¥Rápø²Ë.3a+ë¬)J%ÍàÏ’èøÍšà{´ó°—ÈO±E~IäW'ª¶‡š¶ g³¸¢ãW„ë\Þæ†RÛ`ŠA‡Éó Áà;çÉ-K¢ÖGNFÈh[sÒÄ”gzß?Á‹V#‘xŸóÓdØÁ>{÷° áax!˜pDúœ¦Ð­:6ÈÈ…ÃÊ! ý, —É c£ 4–jpÂ[çhsŒƒb x`ÀˆÃZš“à3ŽÎëŠà0°mkÈð*j~ºH™šŠ±ÔK‡æ`“ Z<¤ŒN†“IÊ¿VqƒîÈ‘ÃxQ`2±Ðê*¼E'¡E‘_m½ e+­èDžÆ ô‚y\Îz‹<Ÿš¦5FÆpýk½]Ú@¼Ï•½¼!ƒ‹8 Ò{rþHAc]Ét»Õù~£LF«‹°oÞZø ·7ºHžÊþ/ËÌ[ƒ6\Ç«ÆÚÛÃr0²Ì`BÁ‹– â À"ÉÁx‘@‹‡äN^v_°ö2ÙgXfÖÕ' gbt!{gzÿöÙO}ññ›°Ï@c0ÔÈ> ¬³Y-·Qtt"\è\à3ºDÞ“-c2Ѩ^0­Ö®iã¹-Ùì–«±hJè“ú\=ò‚%.¹¿1‚«·! >ÅÀ攼ið"Ç¢›g²NdÃËêø)pá’ ¯cÙ“Õŧ08.ÜéVö¢£dd~Aâ¢Ñ†\à3\(5ql,’ÚRÐdnq ³íœ/{-­´ ßñ4*•Í6¹dÀÌùÎ8/ÉÀ*af- p’‰;KR [Žæ.=:ýö¼—ÞÞP¨"¢ Ãy@s˜³•íá‡ΖÆÄÄ„¹e6Nˆ™h¯5ìŠeƒé”Åã­‹÷Ÿq]¥Õ“µÙ’Ç…`á†Õ0¤ˆÉ0Ç­?ðNÂÝV;¥{¶ÚîͶ×:ÞÉÄ›ajÚV7ºÇ³YHkr$ãØæõ¯©ñN¹›wÔÙÇ}»Ã}v{ÀÕPc·6W¯^o_ëʶ ÿo³{³£ÖÙï€âB€-Í7×eÛ,ÓiÍëªÚ›p9jé¨ Ö@§²µÌÀO,×w5ÃÓ$ÉÅ`“ Ý #¨slX;Ò—þU2Ë`Á,ó;GAiÍ3½0Ūü¼®µ^$k R6ÅJ¡ºÚ ; 4…øŒå|{ªq ½çü.Ùwê,e·(~4ööø¾_ÍŽ½`Z'òËJ²Ep­Úì4 ×&€¡ 6#³Ùsç/øÊóz(6g•œm ¬˜l Éhm3=3d·Ü˜H¼ ™­Ý2Óé¬v€Ò ÁaMát´z`kvm¸=ÝT“3DZ=Éñ¦ ˜ |ê Û4J€AVuuÏø¡Ó¸…‰v*–€„5ûŽ¡&G4›¤krF ¿7¦-%uwXê|–ˆ?;4h½Ý¥Y`d-±YvÕQÛ,,60 ,j‡ìÓ¸ €ºö8f"Ö¬®ÕéDÏ‘;t2׈ Ù€ãWd‹ž"tËŒ†C~²áœÑfküÉÔÑï€Ïfƒã .°Ï ãõÓõV\-ÙOݨ?6 ›lܵ Ä)òóH2‚a¨AÂÒæË¨MªP½–ag“ηÆá j¥J×&ûà]½®µÌѤsüLVsÉf«ü= ³§‚žÿ°.þA fÖ`ŸÀ–[óMw¡íU@&ƒl/0^õs[I!‰ ¼…0"oɘÝÚé ÛeÚ>»±Æ— '‡a9g;pÁƒ„)F·ñÚ}d“ 9}Á›c‰ã°±ÈÒBtHô/¯s÷êäOÃñû4_öš™ód?™J¿*#ÎN?ÃeN¼‰IôtF²†åI!õÖ”ûƒ{Ùô•mRpåkd^ê4C•l`±£È›VB·Ã _r!(¢ÃëC“)Ñ-Y Ua­×6YÎÚªkÖ‰KM{™–YGG‡ [Ù}ôQkirȬ)ëŠÆ 3Þ0KEß%Ó&:«‰Qm]‘.ô.-òèqOz¬Öä{7’i‡ §ÛêÝCÓIpmŒÁ„™Ñuhö†ÖŒ6j±[õuà»Öß=él³G‡ÀauÂ2Y}Ô/Èl¿%ÑêŒÄÍ„V×wÔV{q%jS0GÀdV]›â²À1‘¿%® WÁa$áûR2~Sµ—3&3L±¦ÌñÞ:gÃÜ:0ÿHËãNƒÃ\Î6HÜj¥Ð×…ncºˆÉ¥˜Œ¨‹hŒe0%êÝó’ÖaŠEV137šMîŸÕÐͱÀ•7ÔÿêÄû/sAß—•r͈h,×稫Ð`EkÇðµÍoaªNŒ(ô†[Hcb2¡sØ|¿ÕÙáèqm‡Ák=`²MýI_K•su׬/÷rê;§Qw câ3¸“ŸlÕx‹W![WµÀ,;àšË4»ÿe¶T|yÇŒˆù`ñ@ŽX¯ïLÓJ è'Z7“°k/Ä@fð…ÜÁdDNp©²ÅÒ0YW0ã@o€`[æÜp‡‚‹8o¯s¼õš#Þ&²òÛÀ£å•Fžˆ4A±t…"æ&8˜X-3ñ{g)ë;$[NÞR<Íë#“×Ö¬9 JŸaÖHŽÔûˆÌˆá ój!Ѫož¢ôE*§ÏO#)(Jså§/óyå*½…h 9\Ñ™p¦1Ð6]Õ4ãÂVû¸¬Ãcl&ˉ¥B–±—Ði‰Ù‹XŒŒ3æ3’ṟ­Ë^ß7šiiat6µàjhÏL[‰´HÒ–tXZ´®ˆÛÙ@›5q5öþ÷ŸÜ7)õ† ežÅç¬ð© Z¤["0C,¸P6p;ø,dsÓ ¸…#±$¹ÎÑÁdà0Z0ÎfI‰gb–ß@á¡ÌíHš¾´hX]<’´kƒ¤ïÇÚMäAªÈœbùj©óVÚ©éiTdmlwî´a2¡)Ò*Ü0,²—!€(½ÌX¥OŽˆüÙº¸u¡ttΥ̟\ ˜³Õ¹î™ø7„È%1ÉÜQD`¸Ð—¨ÖQ‘íK¸ÎEuŒÆÑáxL&tö²‡ÓGƵ>I»eÄv´éµÚs=)š‰–¾VûÞ(}­fp€ÏÒ×À4FGÝ0êØ 5nÓ׉ó 'Î( }ô‡Á#]>Í(ŸrdЙ-•cVÚ!ƒliÖfU$ 1Þ£#‹$åÂD~W,ëñ ‰Äd´7&ï–xŸlt2 &Cç½®‘ IDATæe_¼®SI;òøÅ½e;\Îb?òätqK¥ÆÊ}¯ðL#»Óº"¨KÛ$³|•¹.†zÀ,ãM2ðYípn¤>2i%I|&ò§?è€"Æ÷k3Ÿá:}› ]þT+ÐÙEúð«½=üÊDâ­AíA`Ú»âCöÄ@ÄUDKBßû‰+ps¢øœÉ‘¤³‹”šáà>¼à"o›ÉiUÝñg¤•AiZÑŽ~GèljҠhÙÖùìXà¡ó'‚~'ôí4¡Ï,‰fø¬# `5PW¥¡Ê€g'óy“ƒ9]ÎÆvRØ Ñ §ñïÂk΀ÏÖ¹‹üöJ©‹¾/f’Xj­õ‹LZDlì r"’WÑíödÚùH"0¡sHvé -™Æ„~4Q›oMîÀ¨ÅMW†%xIô f;`“õ]„§‰¾v`Ï蔦-Q„µ¹„>Ï£wn8'L ÷9Ýül©Íl†º„DlEO*– mólb¸øàg8L(Ã4Ñ¡¯–s¶²¦M±xò¿UØcéó6râ |,Žd“AÒJ#ø ŠÅ¾à· »þ#x ±$øŒ8 ’wÐÐFß“‘q¦mÆÚ}¦ s6­'GŽRšpÑÎâë6™XhØ‹?¹ Ày†“ÙKÖÁa™&m˜ ³0Èèð}«ÅhÑovÐ'_ 0{zÐîŠA“‘/IÞüVf‚ÁØd¿<>Ä¡W‹6¸ç…Èð(Ošä½}!÷‡Â —î£ü•oiÔ3 |²ÅF FºlýëÚëzûÿÓv&±qé¯×{7{c7Q\Dj™¶ä‘dy“mØÛ9ÄH‚È1`ä`¹Ì!|â ‡ ˜Ar™Ã‚& bÀƒŒÇˆ1ãäD†ä±,Ë‘,Z µ“÷¥7²»_wþUÿ~‹¯›´4ò õÖî·Týê«ú×W:/Õ'/Ó Cœ<†…–ÙÚì–31=2 ÏkœPýa?jñµøÞ¸€Šu§°…Æ™8ÔÉ@,Ä€–2ôâ€eŒ'žÖŸ=èÒ’`Lµº°l>Ò` Xå 1["ê 6À( é¯,×oÄ*ÐËÁgÀXåÝŸÊ^v¡•ƒ?žìý>wg¨J3#¬Y¶¸@NìojXZoÖëÞ×Üÿ’ÔJÛ× V%ßÊχNWô¸oŠAhŸ7_iŸù‚Í0eL(Ä€ÓL?ˆ'eij° à,î…™…dWí‚ØE†)¯ö,búÖA`:ÎRùPŽTB/å}ÞŒù¬8^1ã[c+MÐÕ;C5ý^ ÒÚ½šÒ=8¾leK?äù·¬´Ž€áQØlkÌ^}àÐÉ2ó]MÆ[hð•agZ‚;†¯¾¼ççT6L6 Æ‡lƒW…7$upÒ‹Yˆ–™Ï7&SÐ_ ×&ô ð Ó_Œ±ÞV¯.Þ˜øË¹3ïaµôÙûb¥Áƒe¦qƒ ÃŒT3áéË+rÐ…´0Lš+ö“Ñ›É}£ãÓœ”e™-™Ž Œ#Þl5#·h›l9’‰7I2,¬/·>Ä”*ž]câG¶¥fDzÉþRÍi~ä*åZ;Ã|F˜ØdÈök…¿íÓ®+“g·Žè?œî>z«Ú<¢¼ñd T|È{¥B;Œöý}pv3’€Ä"´o'Á³?ì롉†-HK a !ƒ«C-jFrHÿúz/WqÒr¤mÈq;QãOl5¤;bÃÕÀ*bõ楿ؼýÑÇ´MfŒ³¥ÓßÍþô­þÉÀ3÷gßì½æÚíT62Í[± ‘ôjMȘȒ88öt@ 5e ÙÐÂ)4àd‹½w3í}¬ƒ#›Ôß;´%»gLÜ?Òl†)X\EÚNÐJc Ò´§˜Æ¸†­1žN»Æ™œÅ^1 ›¨ig˜:&ü ¡¾Õ*”º59(>$ŸäS'Û”iŠ”XyÚEÆG{c<·Uõ7­îúE˜ðÖ>Â¯ÕØè™hì ØÎ8c°Ón“ýÊVZgJÑa•!¸…]-ÃôAÂδz¨qf×§î%»ÅR¥6«_Ï’[SÅâJèúFåÐj~$^<ÏÞæâð ¤×»v#· Mc´š‹­×©idã1rñUãe\Í\©çFçn¹êL %†æšM$PIìÏEâáÂÝS‰ ³œ_ìnî^F(]§é¨ „_MiYã¾±—ÜB¤Ð¬6þgðÐïã~g?~!4òƒÑjxnÿäòžRîöÊÜë‹å#Ý»~¬¸<ìžÁR4˘µ¢¹Ì¨±ž‹Ç*XÕï«<k6¹Q+ƒzh`KýÚÆÒͤ»€ÜŠ,‰]…";ö©QF’`ÞqKANiZtõêÂ1r©¹“þíLãìÁzÿ꬛‰í/]<©¾AÀ´«BDÊu;Ë1ŒíU€7b¹<7ZM¼}8õ$v!ÆöJÁa?‡½Ú8›©"ÆöRY×¢î–6{U(ë½’•úÆüîtâ0¦ã„+NÅoÖ¯ôT^ª:×EîÁªïŒÃëßÞ(¿>˜o–f.Æ{MV+œO¢ª\©?8¿àT ocù:Ž_¨-èWã,ú©p¹þ!©Æ±eöcá? µZ[Œª"µüGµ®‹T¥ê—"Ê,ׯF ¦röF‘~(K¢0lwо`ÂÔû=¹ Ün³?[ªÆóÙ¯gœ™–æï`¸í¬fœ˜¼’!¿B5#`¶Ô8ŒW¥É´ªÿ.è¥LFŠ];É4³ÓF<„ׯãò4À†„M2aØ‚ŸrNÚqËëxå™y|^•¥›ØØÝÓÕè;’Áhk„c{Á³ÀLn(SY Épµéµ°M¯xÃln)OÁtµˆfƲ»œÉÕ…½»Ó ™~b,pa¥º»×9ŸÌز{ýˆ Ãñ”0ÌV-úG=3±@©xP1­,†)ƒ1ª±h’9I`LÅÃ'——Î\¿G’}0³œuõoÕ¦ÏǯþÛÒåÓ,t¨2BI$¹¢Uñ³“lSÌûåaÄ¡ü™vÕ¢ŒZ,Ÿ½°ˆþ¾>yycúž×­y=£ÉàÅ•ùÁg÷Œi‘Ð|6†½·èŒçx§çnD“µÐÝ’S͹¯ tãÖP¦Ãüz6è\Þ“jôu=¿XÅ£B/,S#ÅôjD0.|YŒß,×§Ä…B ñtvur6p:·¼VŒ!þ|º†!^¬ŠéêÚJm&ëiHƒ+âÛËZ`ýT¸ä‹ï+Xëå㟠&ö<ìùõÁ’ÓÞ€:Q6¶Ã –ÙÊšÉØ£˜¥HõÞþ•ÞðÀ®þôÝ·TæO£+óÍÌo®ä߉–{ö@2XfÍÉ]Ô€Ø<£LH“ê€Uû Úð Ns Ìêƒq€ˆå”žìt$¥6ÖÕlR‹Ä¦äÕ“†SÁ__ß›îB­4=¼ñál>ˆ/†<û÷Ìë¿Sz{½ÿ8@Ò3Œp¨”ǰÉéïåRÏq•iJ)Ã<âJxVÉVî=‚4®ß×ûlQ´R±wÁ0ÌþE0¬Þ=ÙZ\¸ÔŒÞ ¿|ݽž®Œ€^ˆERŒEò3XU†a°ÉD¾†Ñ Ca¥âw‘•`RwÞW.fša¡é©²nþ™oîÉ€´åøñM%ÚjÑaÝO›$£Ü×—Ñdܺ2õÈu3Bƒ•T€­ìxcàl¥>ò2Ém„kk”úw}e€Iׄ-˜©Ö°8øóÏUsõ|@{´ziþNÍŒÓg&°íkœÐ'x7¶hŠÛ¹ >±« v¡áHZèÔ}(ÏfçY8Ò6íaõë¶ûk'W¯.–>{_œ7*6C¹ÇÈ0QÒd‹/Ø}cÔz´÷ù»Ç”™Sé½­¼§sEJ<¤9QÊS*w»;KÙïeÇvs¢ÝC¦Úu¦cöK—÷Bÿ„{ª.î}m⋹3ï­MÍl¶HXâÃ-riWħ¿µÙÚÅ–Ó6¯ùÛî fždlŸ D?U¡}3ÇÂ&x¤{mV4ãaí²9Ý}-¯ß;HÆSðF†žª<ý¼~¡ Y¬;…[£ç*+"nÉòc§25•A¬¬Þ/†™!ýÇnÜmFv—¤!QµnƆ¶.>5ìo6p€Ý®h/Ê“„6ìãb‹ÙÒ( Vý(²ÈöÆÄ“¸þŒ¬Š«­Ú—ƒ»¦Ðcbî¸-kõHfk@”×¼/ÍŒT…0P–Fe'Ù)í”>òÍbo}8€ÓmUBç.4ó!±±ÿRãÈäÂw°åZéÖþ®=‡–ÿIyí„í±²e ýMs•ú¤ÏLV}͆Ü+¢Dö–±L»›ò:Ã8®Y—?‹ÏÁ2Ó½¶ùOåNáse¹„´­HôÉ¥o1îZV•×[&Nû”é7¤â_BÓ¦[ãù¦šÏ'ÿ¢³Å¯-f‚o¡Ü÷<`ó¥H^–NM{Ëæc)é´u½µ˜’ræLntoýÃδ ÝWÇØW™bG2ÓÈÿD•'÷à«ò4 Ç…dÊÒƒÜ^(1Í.7sŒþ&2J«EæÉPAä8Ág^£ýZ^­h}‡"Æ´ÓÅáGD½MžI‡™/Ø}cZëa4ŠÀÀ%o»m$Y- .j/‹­0ÐÊûJßáQõiEmbÌöJ¥ÔîaåÒ‰bG_‹2ÌYk:¬XmÅ•OÐ(Tk2É~²Ü’½ÀpÙãQÜî'“ E·nm~|–¿µ« „ ’”×3ª3¡—5Zž_±“Ü´êct·¸:èf”iAŠ5ŸYw°ºª”~³Ã%¾ÁKEõŠ14ûžØÿÁ…}=Ù¹HP!axfÇ(Ü©Âgü»Í8ò]"¦Ãû…äÕ¼:POª’nçMjªÍõ¡>Ð2tºÜ¡ª˜óÏGÖ9ÜÜ_õôösN]$!Tá·DÊhôcø†:K•#Ö…pÖ@Ëó¤ÖzÀSîã}g _<Voøfš²yÆ´òºÍ;ÉÔY9Xü1êì¹»3¤Ç_l¬~(NŠ’êìÝëLJÂgÕxrabS4´é DôD(ÝŒÞÕè!µýáì¾ø©›}BeÕ¢:RT»uçÙûý@n± 1Ì,â‡[žÿíéÙ7‘檙yãÏy¼œ(§Ëªjá7 -‰ÇìÆT®IÍ‘ÊéÑè(gŠÎ«ÍXÆù ³¬{È2¦ÒNzI>‘½è”g¢‰¡V-þœÇ]#+õKjÓ•6 º‘À÷/9Gì.4Çh@Äb3¹f‹*DÜ ·;De°û/)ßßÜçËѾ<ÎÍ.ÙNBbßÒîÍ4 ׊êÀ}ÓsgZ=Ô|fÚ˰ S?Sfê6ÄŸ/Ñ2,‰pp² 2xÊCšn`4R~ÂLäûXÍÈS‹o»Ä×0ÎÚ½/­µøÁs€HWYû´ íÁÖÙÛÕ6¾ðýTiŒ%›q kv.âóy¯<}%‹;üÁ0ÈXbÚ=ÚÏÒ#£=‰£n`\ªœ\_ \-]ŽT»p^«û¨]ÉØO¦¶vqm’L*k>­‡×Ãlÿ®ï >›ŒÊU˜€#¿ùþlÒ©¿ÒíŠÆw0b0L¹ 29ƒÉäݱ“o<ßàx2ãC‡^‰þ^™ 0òm¤æâéxx­RC ®ôj³)ýXÛ=Ö·óV;ˆ mOÁªM¯(sĨ«Ñh‡–ퟻ­?#^ó·û!ßRÉÿï\ˆŠM„rð‡ý“/ÌîûߥÓßA#yÆ8t§Aà ¯† Úgº'Û¼8ñD̸º0Qd–LõéâÉó`Qƪ­RX]À½>«>,Ùõl ßykñ°ÏôQ#Z֞ё¼N‚(ßêäô÷`Ÿa£}.§»ëøô|~~[E#J¤6ÕlJBL.Ødú°­Í•t{㵓Â0‰™Òƒx€‚@Úgô®Î-2_ÄD5´I5gb·a "ížòíV[áegáöì,/kiæÅíp§6­=¯H¡OêÇû³tœŸ^óó™Édf€HF›‘“W1ÏØÐŒ)«zhÉ]Êd0»úÃÏ"ãE³}¢ö¬Ÿ|RkñÝcÒÀ˜³Ô‘Æ&8{K»ÿ{{/ 2ÎÛÂÄp·’©[غ(=d2W‹ˆï;?_+ØÐ°u<²³MfFd_žÕ¥C0&˜ù(JŸ½¿4ñ_jkCP›LL1åÕݼ´dßÚÿ›Ï˾xXɸ…$[ÙwŽU`±ÉïUg&Ó2Tïõ ÔqíÁù\”7Ù£Òè2Ãé£=7æVÇú2ˆ•âo÷´9bšúƱ!xàÌ/öìb2ù‹Li¶]ð9×ß9ˆ›|¶.’y¯k`ÛÚ§°àrG9‘êJqÿ¯/h¦¼‘¤1°MÌÕæ÷7Š„ 6@ˆ|R&3bÕV Æ`8X«òÚägD2;ò5Êk)Cý5$¨$Qd?ãî}t1žO5.vÿÉo<ÞkÓ‹”â‰ílóµCÚ[:?½”€IŒÐÒ¦˜W‡V¦ü±©Ö1´*š`gÊVQ•8º…¯(ÖH/oKî’„ s²ö¤>çôí^R}~°D)ùÚW|½0S[yÆbäÕÔÊÓFâ9ÎH¯ù5Ÿ™XfÓsËœÑ1½EMª__ƒ¡ÚjœÉElÓÍ6´•÷vy Ҝυã?ÄÝ0]^é”3_‹bûá™íÈc;˜)óFoQfoaü S·´Úa4È`imç8¸}UÑ 3åø­Dؽ¶(“kï'ª‰g2=¹8ÿ®]kno ê0FÄjvèH2eâ´' aBÜ- Æ`œ¥ö¼JƒL{öšíàóñAñ½ò*µ|ä`4†ÛÀ$Vf ™=K™ò&*óß!ÓààêÔTæ[=1q,‰_G°G›Ù­‹ÛŽžVzÑÄz¤‘d©›_FC¬Œ^_ޤQ©˜ÍŒÒÞˆº#ªŒR¹”ÜŠ××3Þzzb™!ÑÕ÷äÈÊi™ÍƘ\<ã^ÿ§eµNÃ@Ikw\î•£ßV錄œê=¤ýhä±úŸê÷|TSfº™±ò&!ç³Þä–;d;aʸhÐÚzçŸíÕÞ„Ø1ØcV%ß.ÀÌ iØ2ÑCkòÏJk=yÏbkÿ'[Z#½ê…Øj­§îU"·›¬‡¡½XØ$ܯij'…gœ8†ÁŒîß2Ûy>³‡òͨç1jÆBi=çN.¬5Ï”VðìŠwn'êZÆ/ž×½ÍFµHVQÇh_„Ša5sEkX“ÇØDÙ“GâÆ‹W<œv¦‰ðzé bÐ+•åÒˆ jŒ5T`q¥t!gœ.RÏx;ù"%øÊr(Ü®ZÀrÁTv—ÓW¸éîJ‡§//»O •>©v-Ïdz‘NÚbO-.Ûçm‘`ës]-Á¶dQmU-Ê*å‹b–­-»ªR/*w¶X¾<¿ ’®–Üé(‡d•Î}îL¢—XÑâË[ò3ÉDïdJÛMÏgÄ"©Â¦S."Ö£ãó#¡¥›È]‘ˆSF늾‰›ét1º0øYOp¨îœ‰5Sýó5§7¡Í2Ç(ïGG‚‘g»Æýª‘bÁ‰‹ný\2*ßM4ÎD…`ì—ª\éÚRçxÊu±¸K„ìeÄMhý½›DŒÃbÓN$)Í–l9¾/Àf*9 Iر}â.à"»ÆëÙ˜›É> ô©`”%Ü ŠûGqäèÓL–q}ã:r_Q0À2 ìMÅ¿ éO+º2’Ýýe<4òƒÜøJþ„û¥ÜíÔò‹‰%ÝàLM#ÅÙâÔRöÖ“ÕÂEe´ŽÊèèª=qLaîPj×puD•9‘ÓÝ¥2ý:ê—˜RzN]C2€-ÔúFÇIQ¯/OK8çÍ3ŒÅ+û¾ßõ±½} :±»m–K5mFÿ_æèþ#ÑdèÐõ¹–îuÿ‘iì¥@‘ { @×FãG‰ …_F¬çªŒ¤w´:ѸFÑÉÏÌÇB“—‰¶ïD_]6÷ú4Nºc• -Ê7R{­¹7ýÖ‘î|fDÄû7ήÆZ³a€RÈ \n±¬ÃOÐ…£öDœ‹ã¬J÷Ò›Œ4?ª«úg¶šŸNŠ‘+‘ûš‘s2ϯ#ƒ],Ø ó‡ë_£@_m¾¦ÇD¢‡Ó¦‰"ãÜ¿šqgߌ5Îl¹PÌZRÆÊ4`v°Òs½ªj×ÖVë3(ã¢Õ[QÀ‘["Ágš5»âð‰¤»@—Ä8¥V8é”W ›¬Y©c¾Í™k¡Ð¼v¥ŸÕ 3Ž¡"?gá ÀÚ1hUõñ”Ï#>úánÕ—÷6®€aùd3¸;´z¡gðp©̧橼'ÆÈ3}*&ÝYRvO†ut̉Çv–Ýw B2íA8Ñ’‰7ÿõêÔÁj0; /VïÝÔªÎPñ“»ÓWA2»ÙGH¶é;¸Ý&C¹ã™e2„ˆq‹až3bâ#AݶÎKÿÏÜ—ÀHvœçUßçLÏ=;3;×Î.÷&÷ä’ⵤDS'CYŽ,>Ž+ GHbÀN`À `D0GI¶`@J¬(’cQQ&—ÔRËÝåä³ÃÙ™{vfº{zú¾;_Õ×ýÏ›žc—äÊNá¡ð¿zÕ¯_÷{¯¾úþúF°åÊAú{®ìguøƒìgéINVÈôcJ§HÖÚS¾Ï¯,6ïJ÷U¨OûðÙ}PLßÉÞÆxýÓùåñd69Øuel>Öîš<ãôÃîÇveÊýMð¹:€+ T!U \¡Ö™ˆ:… 2ë:ba2hö§`­yi¡\lÒa=Šš$?cÀbÁ6‰nÌ™8÷ö\æÝþÂp¼8v}H|xOòŽ[º©éDÆëïI§íæ›:\•c[_M~¢iülEMŒ,}©-ðs2â™=^‰—»é$C|@ZÞ2ƒ2-¹ûh Ÿé;árOæ2Žöª°Ú÷@{ئ¡Ë>Ǩüø ñxVÌæø¨¬º¹½ùåF¤m Ÿ8zlçÉß_YØóF>¼Ç]r¬è‡ðþ•KƒÎ›S÷õÜÿ8À)ÿ‹´ý!›²¸‚Àˆdñ…Ü’ªz:‡à TÓ‰-u'|S˜9i «Thaß–9‰éfÌD zŒ¥¬vökpË`I>×"¦Ë:A,Õ³SN¥£æwi¬$³9Ï»=«Á½dî^·‹ à n©²>jò©ûƒá%o!Ý9ÉP¹£uŠùžnf(âc*ƒCÕý4›y`¶EYÎØ€YÌåínkùÿÈÏL'³øÔÏ Ìë³uºBijo–Ÿ;’ýë—^ɤËdå8û…?_i{P¸—”ónWšÎ±Ð‡è¥]›wQ8^owì@ ýÄŠQÐlLí°§1E¢ñã®5à½tOç*–Ø;çê Њsk@19ço]pÈ6Ê„ÆPЊp鲦¿‘™I”öTs¸Ü1ký(zþDM²ª WÛ䘣. þÃ]o IDAT=)Ú_Û$UxÊÓ?ëÉw½÷ÐÏìå35c²Òrs)[Φf3îh™"§öùwýņ9+Œ)£²çØÇeLÜ Ðg_ò²Žå˜­>%ì©çS&H0S$’]ÉÐY`@ÎÜ=3Ò²Åö²gÙ ƒ€÷yCí"FI+-³¦"c½[ÍGT 2ØXÓ6›Êr·’éþÎm ‹nºB+“º¥Ý•g2«:q‹$dônæF<“CªÍî¥õãÓ¶`|¹4_É'3¹…dZ¯N†B‹‹˜˜^ûS20aT’ˆAŸ‹œÌ<²«_@£Q3–S >v¢| ë~õö™ÐŒ"ÁÈÚù}y\ëŠcÏ9mÉО¹vÕÞÒÖµ§¹R²ooÔÁåváZSºbÏDΤl:t‹¡ÑØèß}|{+ ‹†Z‹BW]†®hôAxFÜ’¡Ñ‹2ÚAÈrÖ¬:^Es Æì —b=åLÕ¤'ñOè¢MÇfVGyZUs¬®ËvVlͶ@2ØhӮөŘœlŒ‹gÀ³L"¼ØÚ œ?K;¾Öïûݰ뢯÷Í@´N&Æú3Ò2žK§ar¬Ú »É9¼#¼M½b(;³â>QHÍÝÎíôq”©d$K8ÓXksÍ7T?oÖt$NwâZ3230³w†kfOض1!·$yË.Í78r‘þÏ{óšøS»ÈÐ8€.ÜfÅÑ(šõäÂÌk¨>^ò:cØpGWÒ…f“0ÖÚÔ]ö-hfF£ã"Þ^ÀXW0/9®ÖÓ2¢—Ð2@t%½>¨ÇhY1ì=„«×b'»¦€^$dÔc"yôìtaOÃÄåý/ž™óºÛŠ`"hËŽÀjæL §Ô.Zlk$CO2šà+ü?™cá<4XÌæG––›¦ÍÊ›|Í?ó½´ñ¸°jÇ Uep«ž–I˜&Ü«å"Hí"•ŠÖ+ÄX†×F'^—PU( C}xŸs©’X|Éhë±l,m&3Ù!Ÿ“9QÉ’¹HÆòN[ðÌŠd b@,°1È13g'÷¢°#QJyÄ-…ðÝHòÃ%Û_%3;Ί1ÊÂÏDø®üI¡ã™ íSŽà‡¥Ã”ó½p1ú¹xâOH‰ÌŸ9ÊÌEv^šùjƒûóijʼnâhxò{í½ÿ$2õßý]OäÒßÓÚLof_c£§¡Ô¯a(\E'¾âkßþ»¦ÇnaäEUZÂG sY‹ú•Ï鹚 ° i ËíéGŸ\æb× WhÄHÅ3ÉÐB&;þ}}»˜…±'ýBÌ·-°òÂä‚wÀ9 úÁ®íR/e…´õÚÈUÝ£oš¨¦_aw ؆?¿ï&È™p5kš4©E!Iº¦_ÿ{MÎôP³f<Ô¦ñX¯™µÿÇ_3³23Y3{91Z—uxÖVºQlÐ;&''çõ$dàæ4ýû>Oöå,@ŒÁA€d¨ÁÉff“ MZÁN˜q¥úC9¼Òàgh!Eƒœ1¬ÀÆðÂŒ9oDµ›W5À¸YŠ*™òí åw”"©Èž±ëѶsWϵ¨K‹¡cžlS*åz-û‡Ô|óá‹ã3çÇÞÊ·ìÝÛå‰y²¨©Z|kÄ7q•U}ãÌBé;pnfìòl²¥±=ÀøŠw¯]´cÜEq›[Ç]L§‰d»úÛ€dK§3sq°!‘<~ç'+ÓÓ’ Ïj¾¨É–ªŽ,„1j±WÓ÷­\µ^Áh X%!‘¸yZ Ã1‚KeL°ÉÎ×ûݳyZ|€™t¹uv–Ksžl¨Ðò·$í¨ ­nskSõKAÈZ£qâ+c‰™èÊÙžéøÅ ÿœJ'ÞžJ… ôúI¶øüå›ç&±½»´Òç´··aîŸhò½zndÐïg·Û3áWlv´ðë¿·ÃíEÀ•Ƽ+ž+-eÕXZ ¨åÒxÅ!ä hÓ§s°E\+à?nUZ ¬³!?Ûϸ›Hx‰dxÁk©yO²Æ³¡ÍfŒqÅPú+mƒËý4QÆóÌ·íl"½XbWh»Á¬”Y3#°qI xBÛQÒÚE@ÚS2p-´x´‡ž(tL—C¶âlïõ3Ÿþ—Ï …vþÄÙ g2·ç7ˆŸdw8âAwï“Í{?–š›n|ö`ùïžu-Ϧ—»Aå1òû¯²5ÙQmûò˜JÙÆÛž‰_É'ç–{ìþ\5ÈVkèw3™×A X…é¾gÀs¸Ò½äŒÜÂ3™ ÓÓ8Dw723<®2àÈ4š DâÅÅ{›†%#Cð4\N†[(+ ºÈâ:íªí¹–VçS@&eP uW[÷¤£ºÚÇv€mLcÍ]BùœÔ\”"°ºf‘DÍõ"ð HÏ5lÖÕ7Ë #Ì56ü¡nTHVs‹¿¯•³-r{êqÆ03œ<qͬ¥4v—Ìì¾f¦ 3»™l)gÓ`fø; ñ•õAº€göÈž?í¤9ÿ. X×2CÏ©c„`7üØ¥1¤šM,V*!¿ä,Ó:îDlb¦´£½á€ r[e'^æÈ¥Óh<Øž{ç …ÅW§f—Â÷ÅGO£7ó´wÉ®þìvqh¹Ø7ÐçnEçGç³KsËsØ–ã÷ƒ•é›7WÇR tY™\Ø@¯¢a¢²0Vý©0ì#e?ãõ=íô?ôýÏ|x”ÚSvÉ>¹¯ïðîƒíØümÁÅÅÄ¥k“':ohŸ™{Þ_¦å°p[ªd]ES`CMÕ_ÎnŸ·9°EíŠ5LŽÌÀ™ˆ‹( bÿ×(:µÕø GîX±ñ¾…7]I¶%€ê®Ø[Ö™¨£eT3‚äÌuH¤+‰î¨cü#ü3 ªx8-ÿR <˜ðÛ¶‡2‰p—¿u±U[$¹*Ço©–)›;¦-,}i`û÷g …3À€™2–÷@/Ö„+Ô%ç8qÎå;К-iÆ-TåìB°9ÏÓ;->“,%æAòp6 _|vþ䡽ƒý=.‡šœ¹ukd\4r1JÚ=þ€{6i»àrìÌå¾³Xú½3åÝååÈ#CfÕAŒ° ¡§“+?Pi~Ö¬"7^&U’ý³¾©àò/{l·2KÃÝ]{’·Gâƒ>gt# ª|èS`f*Ò5ªd8Ù™…ªãÑT8•‹¼‰¸Î“¬.ý¦µ¬I2[s”®KÍÏâ´Õ˜pp=]ârËgõªa¶hâ7vz¨`´æêUkÓ¢:L¼«c_v9_'„LÊ9‡ã‹nϯ´ù±Ýߤ° x O¶é+º\iÔÅ`G(µÂ¦j.É…ýíŒúñHÁùÓùezháT6t¬îXç"½«X_×Fz”BÏh@‘5 ÚïgºQoÙtŽ:b±$`£ªÅ©ó~Œ)“AW+~u:âZ2$çLFˆjì›î=xþù.HÁ.óÂHdb¯F¥Œm}bñêJñø¸C/Å¡jß ¨¶³K?±Ûo*cƒ'nOD2ñ‘Ç.C@þÖOÿú˜Š—]-OýÓÖ]CV·ÅêÈàö≠'Óå|ãÏð½‘蟲ÃcG‹c#ª– h¶E[äÎ_Ò 3õ `üÃâ‰?¬m‘"kÀ0J?ÿ. Mœ !óZì—Ÿ—]ÈtˆTLm6°1* E@-aëüÃ֌҇k¨¹)æ¨2oÆÊ㎠²k};xu*ô¦U–3cÃ.j:€Ò”%Y¶º1“E¼ÐUŽi˜6<¤ oÛ:—Óû+zÀ1j^NŒžˆ Ëá±àþJäü?iÊÖhõò™1ü‡2±)¼V¹«Ä€¸Y´J⣎ò5°‚é%Í]>F}Zf=›ŽJg² ôœÕ‚6f"ÖÅQ²Z¿˜™Š¾ö5Ìq®Ÿ,E  5N`À‰O$$ëRÓÉ£ùîôëïLwvâÑÝjÁ!‰#¼°èÆr¨c c+†æ…ûŒ«1ÖôV’hĈÃ!û.1LØc”a³ #ˆDæ#+tô.´ºK7õÿ+ Í:nMžÂûYŸZsÍ__ ¬3ÃÖ¢¨U1ŒÑE9}6›5y4cÏ::ër• Œ1 jõÖ«Zte1æ£"!ã(ŒÿD|¢±¹"³`(ÿÏ.› ò·G¾>Ÿ~¹äúNÙÆL›ÚJÐØ;uåG×§þÖ–‰Ü¸ÍO},ZÅŸQ§bL^¦¢‡#ZË¢­¬žví…ºÚÚA€gýgëú°t1º‡„°bØâ7ÜÔå)Úgç¦ß^ £Ö9E§‚³³!æfÕãâ„ÿ!þI"j< Ä3U‹ ¢Lê…¡ŸuŽ=<³ÛN*ã:íŽ?¶Ýõ€»€4Æ©Âø8S8F„[VÕD¼a;´¿„²ê³½O´í ®æ‘_Iò!ªýàÛ_ùItådw營=.y¶ø¤é§®€_<+ ^hÝõ$Ó€1H.}íúŸn;¤ »éæŒ]ŒŽuè™A¹bCúU´¥ `㵡¥ëð³² -Ä-`*eP÷¬Ke ¥±ãQdy`Oœ‡ Óµª ÞQ:*»ÊL©¥f™ýq6ÖÊ b8Н’ç Tq7òi@]àɯ†è…šÖ¬irHm<ú¹õxHÎ6êAc(yq}ï¦lVvÏ–eëS[™ ê¼…8ñL™˜U%@ Jˆ¼i¼|Dxè¥ÈÀ[fÔ» %êÃ|lSÆú/¼3©ÂJO ðöÙ}äóÝ÷gOnf(ŒgEgG¸¥Ì<ˆ‡]#ªtä‹Éïnÿ f²Q]Ú—‹ù  dêÈ ¥£óª—ù3ñÁÆš ‚è…ïjv6}1Ö|ô´Œœ 2“m<4ˆáln¸ÄÀ©øE‘ÑW7<Éz`Ãh"yf«Vh½ª=7J­ja>xwpãøzØ¢ŒÕ%'žá"‰g£ÎÿRÁ³ÓÃEkHLÇÎê%œì!Ÿ¾-î~/k ý³×o€`±¶J™µ4ep XõüW'þAû¶½»·ƒE1¦¾|ØŽþQ(ˆ£à:ëIX] ÉÓþ&›µÆ}d7‰ñ+k‘€ÖžbŸûçÉW¾$êütÅ÷`oIgíKâ‡à'gþÏ~;€HV2OðŒÿ§2|xƬ³˜]Ïlx5€g‰ýÀ³rå`L.2(Zyåµêµ­¼†÷Nvë P€Ø6è^D Tc@<À6lØE·+—oš[q×y>…œY*K;ÒÇñˆñsÀ3ÆóTfz„5àP`ç%æt®†6±€)ðiDm 0Ĉõ0 ¨Q'ƒ’* ëÚ,ðqK­%[RƸ ¤¡,tJÕøF e& l´îZkvæ™^s ;|• £‘‘äë˜n‚ä•Q9cÁ«ºø+´Œ¼M¿û,Žþ†…§e÷î™ÙÖheÏmY¶>5™ÙÜâòú«Ùú÷Ï¢o—®µM_B³ðÁ”­šp¡FóW)ZâЯ¹‰S«$Lièªj;Vc+ó¸3iµLsî¬ü€9Üþퟸ…£/}…„ s(xD@°./= ÃÿžõÕøð‘™½5¢¯-@²[Ô.^¸ Óïîì—Ø²QIóÔâšOmê‚&…„LhC/vÙÜofÒãszÜ׉°Ó\?žl c³öÔ¥—8?Ø,"°¹%úÏÜx’! ÆÍÔÊ웂ö¦(^EͰU Ì0ÔL%̸æäd(øK±½ùb鯮;°©Z1 ÐgO§1X+ûOWÿ5üj‰µXW:ê@‘ÎD”$lt]E°4à5„¾tû‹§¯€ÀÕ%…©?ÅI"ò÷åÄšÛi¯¶Ez4[]±÷UÀ¢þ‹oÎßn+òÚrŒçD @ëÓ¹ÎO×Ћ‰¤Yø¸0 €g=öॗ¢L¢}âQ}OÉÎco\bN€¿µœ&9Ö‡}߀¸õU@øZÈÆð Æ€g bQ[…êïª Ö"Ô›´3(«„yl{Õ>ö¢Ö‡Ÿ°[“SËàÀç-<œäUñMgÂq=Ù5#/‰´UËik ^US¯QF‚é2é—õ⥛u·î¨+h‰l….k­j?ë’<–ÐAò¤sB¼¡P·+É­ª@¨lØÈð€d8¹,ßôVÖP´Ö7ª¿´–¹Fмª¤_z6-œ7°û/ˆœ)sߟnØ%»wÏ̶F«{àgÖðYý̆<­£ÙH~yaÃH)å2åŠÝß\dNj(¤µæKÞêhô¢ã”ã±ûA°Ús -žf‡s±´}Go»èÆÆáp„™â#íÞmÊ>>ew/T(¤ô@ßÎ~g¸RlèsÙ}Ž=­½Ùåš»Ÿ{ÀUqtgUÌå 5ïirÏßÎûzZºmwGÚ]~G)æIÿJOf"e«dÊ€(ôl 6=Е™ö¸£åD_£?’Jèljl4w7Ï$’h|80xô¨ÃçPo–ó{\Ýú yŠ5´¿ÓÞÛ¿Ù"ö ¢Üîj²M0¼hÌl!™þÉJüøöV°–«/Eðn„f=jlìÇzÝÛb²QuVE‹ñ«~C˜›q„æ‹«FŒŒ_ezZ}«­†Œñ¡Œ#ŠtÖA¿GwõM '+ü›A­ƒÍ4e¢öì…ˉæ.÷f°âjt¶.ÛéþRÏá€#SsЭ¢©Té켯=´âÒ8Hkéi¡ÙO²ÅM—祖Š+äsýÇP§WµFgK¥Ž€]¹]sur__‡Õ±,jWç&³¯ë‡×£‘´½£ñÄ@çTV=ÙÖˆoy´}Ó”u,e÷–4^2ͦuÆì­!4º=Tlx8ÜQò,îøyíEg¼µÌ:õ<´¯Ø`CÀÞÙ¶Ä›®äÛstf´ª¾Ú©¤¾ªA¿óTºÑæ†0‘.¦c;lãIíx‡íæUÕ×n/Œ9þJoPÑ´•\©”-*xãnN}îÏú|ÏàlKm'hßè] TÔ„2Ñ­œÓeÂV"½o úv4?²Ë³'}«’›Ä!Ô"HmóºÓx:ÞMùõseü¯¡ØÝ –Óao!äóÎú#9<½”ãcYµ§5>g…lNgøŒ½”$çsæ§¾®ÉYáõ¢ýž½¢:#15h–Ï%ô”5€!- ¹Kë FÂÀ#U3—Øð¦xè&ÚBÚªša!-ì•«L[WÃR-pJv½¦ÁžŸÃ!@NÈÝqwcwÀ½Ï?îÑžŽm¨!§›šú}NݲíÝTrSÜ;´÷ú»Ø5ùux囕 '„Œ:aðŒ_„khœÅõ\ò@è.<® C"$ŒÛx¸Š[ƒ›(3u´VP3ReÔ¡+*w”>jÚ /›»‡g4hœ°g< ï5ÈÖ~f÷,j>êáéò¥¥¬ŽÅn,î&N%ÆÖÖýû…œ±\ 3 æ˜ ìÍn;9¼x ¬‹5{2²j؇º>F\•9) f¬ŽZ*0*eì5ä(cÞ¯OÝÂ(‹UE¢¥PïÂÄ ÀÖÝ»LsÕ°mÁÏ$"þŠ¿9”^Ö´ ï¡ÉíröÌiü´ƒ‡óçn_¿èÔÙ¿fs‹/Hn— Æ‚ »ÛzP«:Ò¼6›ÑAñ­^eÖèÝʼfŸãËS¥/‘ý/õˬÑ`ço,wíiÞw¤È5Ü‘oœ.ÿΣv.ÁI>yßö½;3év|a ‹„ź<¶´}7’üÕÖ «ø¢¾«üWÿbÏTzHôàA[ÏϤl}tò~1LLíyTŒÖ¨W[ŸÍjåñ†;rkF?¿ÞÑÆÕ2‰•üd›7µgýHW3È+™È«~ìMy¸³fÆ53Œ€"k{£«ÀcžýÞ r唵˜)C³NCí{oå; `¨F-"X׎ReE†È!^€ „„Û×qÍ"x;à»ÀÀ6‹©ÞÅè$Þ›§˜ÏAæIz+€Õ%R©‹@G“ -k-1ÍYdøz™µã$Ob‹2‘¥0é”õñ(õÃØecÝí£ºXª-2O(2ªñÕ©udF@š‡èUF3¢Jr€ÍþÉY£,ÙQk­Ï=£±èã¼V¹}¸ÝË@Ãhìîhþ€Qó?К™€¼§53kA·È5mvÅ¥2Æi¤2/Ã@ÈÜñÇö?XSj—Žà}¶Æ Ç®žÖ2J‹â¥TÓô ŒQ(VR$X0` [qY#=ëê/5æÀ0Ù½›ß{Ç‚sòb㙂äv!’á72KÙ™YÛäk·†ÿxC$«× {gµÕ2ë!kDs)ëÓýÅgç%qxÆtž\ÿ!¼Ú&V‘ 0¬µ§ü·¯MBF1’áŽìm­îâ~ÑH†ñHÆu2ª1îÉØòDÎõrÉEuß'neÿÍrx +jª¢ÚÖXõ^‘LèªÛ”euè¥,¨& 'W^W‹“å‘|냽% ™2šFæ¦ÑþÑåäw_¦öUVþ\‘üÇÜzhŽØ¹NŒAO;-!;.`ø“‰][¶I ~»Î•Wˈdl$¤¡¶mëP®4Û¦]9!ƒ½)ƒdT-BÀ!±xÔf–ÌÔÌÖ„ïÎîÆV÷gZ×e¥Ã€d˜¼Õhý¡'aæ ”•uÖ²¬%Ð%ƇʢodÙp ¬NCX‡aÖå.±à`lP½o]Т Q·°‹ÿŸ<¸GD2®qV×ãÍý¢e¯,|âöIg6RæQžPNŽ× &HÆ>=ggΧ¨ö¤IÓlhè¨, i\¯´ü\Ô÷VÓÈ!èåÄ(L5ÿŽå¸fF÷±ff-À3휿ôþ_¦=[ó&ô˜9ä™sæI-Ñæ‹$dC9˜€Œ‘ìk ƒ“ac62Ô»œ TãÅ›¿ôC̘6ädœÕVs:Ä¢’镪~-oúf«ä-Ó)nžÊ®$¹)ҲƯ«ø??°üÍâØÈ·–? H[yë63ÚU«Z"éʧ}Éø¯^p«V¤jà7r PŠÊ”WÃÙ?]I‚~AÀæîNÕÙ"ZQjCú{[¬tM0l}£õ¨ªá"aÏÚnÅ6ü.[ 3€ºãà ¶OîëÓ †V_I>íò¨sˆ”‰~moæwúó%Ò2¼PØÀ–ˆdT6’~¡ñŽL´<ˆÂQ´¨†Éúwcû¿ü IDAT!TnWs¾TŠÇÁÉzÃEÊ‚‹ú¼#NìJf™5ÅØéÀ1Éjj'“gYYÔÖ$y,«Ñ ¾‘rjñ¼½6#g\ôBu6#悪†a´!ĆΨXØÐHGm—XC,.Ìc÷á¶Ã¨¥Ø.ÈÄÎ2‘6’·YëQ Lû§ ªqšˆKÅ·ˆIð ¿e¸ð÷{]¾Þ_¿N´žŸÉBšvµÔ€4=ȬKEý¾ ÆŸj2 pÓ;ו_àš£æ×­™1Ðð{⤥t"¯Cc%ALŸ‰\…ûq=þYÖí9l`'=…·Ña8Ü£…ÒeŸ÷DzhX‡ü0)`ÚJ.l€1»Ï¤Q m* ³—çKÛUv É=Ëw%Æ fÌ{Æ –ì-³þ®Zc)ÎŒ-ŒGU\ñŽÐ][rãD4«%cT’<íÝâ›O§G¯Fnž9ãûÍÏ\›_z[?¾àd@2æZ]« \íàöâïeÈjÎ0t¬Ojxj©^Ø_–ʬ F ^…ùryêŠxL«Ò’Ž…ï,síêô²{{K -tìpÉZ8;ûöŽ'»#³v v!·£Ë Vô€ò㦌Œ9tÞTã"=;U¸áJÞ¸Pxt¯ÓÝÓ4<2×¹­9´”œÈ\-Õ€ |À,ó4 ú'|^†Œgg`XÔ4Díõ-ï©H@-޲ÃúàÂÖ–Íjk ý- úå÷uø;U ësëG¿Ã‘)µ»=§*‡Û+xÎ+™2xü½ý>gžÊ¶=Äõ3e ­µç£™DØfÀVjœ¤ßt%7¹œ·ڣѷP¯Ì/¡¥¥s;ý¨W\ûÓ+Ñüd6ݹsýÇ33C&f&šN‡ó•RØÝ ð|X¸³â[ \Œ8#ø¢Ä\r5…×§cOj†„È%’!G‚áÈ[¼Ùb6—ÅÜ UM£½ƒa¥_ ¾í!·ó<]˜u·Ð\>ÕÆJ¦À> %5#"J\D|ŠÆ%1€Ó¹”éœp¿ÝXpo¸»Q0JösÙÔ»?{wèr÷ ñDo÷•ìÅæJ·,w¹Súa·4gB ˜FÜ‘e¥zkPŽ¡î.³Ý(HR)äÙ–4N˵446«j­ ÖÜø#zð-Þ„=ÓÖ…«Åø9TÞáoYtç¶'2¯lw}ØS™˜õMœ-µÌµeN¢^¿¦‹oº®¶Ûc…Tꆶ²¹|¸ÝávÏ{²õšÙò3“fF§é÷]´¾qtŒjFeL­B‰WhvÅ‚%˜hù™,›é]ÃÏ08ê­{&;g—νõæù3sÃÚ¬œŒ„ uï¢ÆB°à‰y/ªEÑìAî­¬N¹6&ù3UŠmím5Ä¿£#hu˜Ó¶`õ2¢™ñ¹8~Hü©‡îÇè6$‹Œ¾ºA^M Æ"qMÞXzuÔì>ÄÏChÙúR—ͯj¾hL¨Ë‡>E»2¯íÄxÚ9´›h¨?«~ Œ²ò®böZ&§¥jÑÛÜ SÆHvùÏþÒ¡þt!<Ø$FŒ:Õ‰À£Ù!4Ö"¼SÖ)äõR´6„:1údRçIë0ê6zÎÕ€gD5ü =6AXó³›)¹xvo—Í ±¨8M¿§ò _3S÷‚™±¤¦Fí—Ÿ¿=~„1«”qêäj` 5^Bì®z’•ŽàVu5ròÅ™ ÕÙøÉÎKLJ4ì]W(cÊØ¬mMðLƬ+d`ÕŸ ZÛ7+²­QmÕ«Œ´Ìèý¸¬Ç ÌÑ eWv®oêÇ Gk(—Õÿ4Ÿ]]'³,¤‰´,•Y—3ë–ÜÄEš“kq)«þüšÑGºão€dfÿåo’“MíÑ–h¡o™þá7–¯þý #Z]ïw¢u 1-ïªÓi¾ˆñè…šF¨7t/“²>mHÅØÈ-¤–“Ô펶ˆue3v7gØð„ŒÈe¥eÀû‘\vo\‰`*ðøý½¬-p(d\  Dµ¶Þ‹¾Õ²qW¦;_¬3iZ[ Õ¬2«r{~8ï´.kA¼á¨õ$B¶¬S®êìÊ̽ÄèCú+ƒg˜ær±62ú*COx¸â‚ÀÕ2lÀ5NíÞñå+ djÕ ºÎ:Ÿ¶C&ÒÇyÃÒ³›~ÂÔ¢jéÙ§Â .,¨g†ª&ø*­:;ŒÉ¢¿)Sƒ.CË6°ÂCyjãZ³ÚÙ‹¼¡Fq35#¿‚äHZ6­4‰9•ëahï~\äÙ3zöĸ‹Õ‘uÅMµ…N¦ˆaVWÃBIr/KeD/Ž"ÿ?æ®<6®ã>Ï^\r¹w¹äjIQ¼DR‡uYåÚ²lË\»J[ähZ4ŠÖ@4µSEР@€´E𢠴$þ‘6MÜqâX¶uPD‰¢hW)Š¢xˆ‡–\.¹÷Þí7ó{;œ=DR–€v0ÌΛ÷öíÛyóÍ÷›ß\—,ôz<÷O`fé¹a¶oÏåѽÆvñënó±¼>ðÖÚôª“ÔñÁÉÄû–ýc¡Ù°Ê‹ ž!WëÒQ‹©;”뻫,¾úÕŒšORÉ^Õ¶§:J»>Õ¯7©‡.›xp²9î–~šV¤(ç uÖC¬7Õ•C¦Î„§HÒÈÊÉ')¡(ZF‡TDöÙý(j¨˜ò›DÉìϳž¬‡8·ÇÕ°¿+Ýw…ÙÕ‡¯ä)Ú*9N›¸v†Pñ ¥üÑy®¸!„xs*-j CÔåqŽê€ÃQƒf7-G Êù¸Ûm^Û/våÉ àbI@~”ªr¹ãÀò M€4’ÈIª/ɪë9 Á4íX\ñèå—æíIh‚p'#yÍîÛYX9]GR¯¿4~αø]ªU )c|q2Ò‹%2mLÒCVµK¯F àÝ$b¡ÒåiöMP*e…ÊÒ«Ñ·Ð, ¿Z*úªá½«eºIa»MxÖWÙÚr,΃Ø=f›dfÝi9’î¾tÄR*†<ÙôQxÄn÷ÊëÔf\­Œëß+M`f„g‚™±¡EƫÔû ‰ðlñ¹nÐñ…g6×Ãçd g\Ÿ˜4f–y:íàñÌyrW .Ð÷x<‡'ó ÄÁ€{›ËOu¾IÆúU}EÀ˜wQðR{2FÊŠ¢²bCVBÈTˆZwÒ¤ -‰ób„d³9ÕU®‹ßwúƒwõ‘pTµÎie¡¤²´|‹êDx¥g^}‘^•É©+bLä³J¶ 7/Ýj÷í!­E¹UF¥w ‘@2&Þ(îÓkÚj ½™` cÍœ÷SØRÇï-ïånzª}9c«ÍAo¬'œZSƨÂPaÎÄM¸NæŒäÌW¢ÁŒ °ÂòD´ à§^:îšþú²K([pc*#TÁ _‡|Y|ׄ>+½¨÷ól¼Q5Mãû…¾ ä C]?oeö¸i!¹ÙÔp7¥IÅñ»ŒðL[¼7±%¶SðpÓ~Wæ´Œ{å™a¶Ë>ˆÂ?Gß"­ÍX¥TrÆa¯IÏòC¯”·m­Hä%Ò²‘Ûœ±ó][U/!ì!.Ödc;Ø-Œo¤¹4<ã^BØ%yÍ"‘#{MàIË·×Ò`{´t0d ¹—îF\ëæ{«£•qͱU’ÊÌH;äñ#K8õØvÀ3çÅ7G a–17oI£Ý24ÏúF3m4"³Ü¤£Ó>]Ã\~á9‰¯:ù蜫hom’‘ Ù¬«Ó¸ó0ËhIË\k©Ý—ågëLR©DøÅ®„sÉ{3¡{†þªßz-.ŒSšùs2‘€±†oX’&½ôy¯í“¹¹¿Ã1 öäl"•ø‹L¤iV"éÚ }T›ì6”äO»hÄhóŒ Rª‡4&F# N>\Ýjø=êOk,Qö:X7šÙÁ¢ 7IÎïŸQÒÄnÖc =rf-œ Mpébˆ¥ -+@£À*œ2±€{M°ÞkŒ¸2—O‡3+ônU” pKØŸh‚_aœ7\¹öe+B/™°@fåQ*ÝE#®&”|²{?@%_}Ls$èŽë¸I5ã*!$i$Tcy­âj5£O3ç rSGü¬"gÿ#UÉöÖŸ®Ú#;n±?Õ¾ÎSVG+ãšc«$•™}æ‹<,ϦNÿı;š¬»á¸M×Ûw¯² K; @2épÚãÎ27–'âý…mYóìñ-…î.ÝÙá—ŒƒŸ¹ë½5L“+6±ÌýECé+"™TVä«r늙´'+›½h®\'ªÑ¹è2¯‹¯9ÅÏñIåÒká–íÏg2—O×ü˨"~)[+bC ÉÈ"$ï¹J³0s7–µ•^Ϧ.w°Íý0×ÖÏ‘ôüSçž§ß•?’qiÑ“¶Ç8-ãIÃRŠ*œ¨) %I6ÎÍ·±O†Ù¾Òo‘‰n¯ÔuËó³ÚÆlPè¿­š¼Ñ1½â„v§Sg¸Ê±‹©Ê ¼ÞÎëÀ°RïûO$½lë8|ªH3+TÌÌ->ýÔæ5ÏZ­ËÎLç,µ3{" ©`ÀfHX6sŒ·B<Æi>võ³¦øÛ¼KÜЄ›bè/8šÚÎÄ-Ï×¹Œu±‘˜• ‘âÕ-Vûykõ¦ù˜e‹m|ÑÔZ6¯qTi‘ ‹’ÔZŒ‡"ܘL‘!•Ú•Ú­þ±(á‚42)~4§eÂ×\„e~ug*ö×=áyB+øn|,D2BšÏaM'’T+ùOÖeç(8Ó×wÇ.Ú݃¹g檞Fæ·íÙý¹èÏîZwÊŒ¢>Ml´ŠÐeÙÊ„=FV2ô†“ÁŸÏ™À´›µ¢öªöœ^ê}Œ'SSé™”™\2,“·G$¦6cÝš®9‘°þÞüB¶ù˜U÷Œ™í2g›ª²õ•:[Ï«=t%H™ôúT.++ë<ñ &ºaʸüäútf§Žíµ™NTŸKÆ·†t/Ûì¹d²³ÎA‘ÌnT¦ûG|ã[7Gg[ê­xž†Xx†’‰çŒìŠè%žav›v-ï®yF¹ìØ…ŠN×R›ŽøýdÖaÞ4mÏ%&‚΃djƽUÙùA¨æ4DçkµS©{±)2,CIÝPrã³DÚ[mœ ,K6ñC><³© c½ìOÆ—– Æs~pjžB…í£føXa&w 8‹>-+ªL2òòFû€¡3é[¨hp2°Ê™k@Æ)²Ä,O¦``]ÑÑ ÜÁ‡¢Q0’eò‹H–yªW©™Yòý}*ÆhNmbs±:nóg­Yˆ—ÌËhDé2Øð±ÓÞDuþsWçýô¤¨à£”7¢ÑißG-(ñu¥7€Û£;§ m§CNaRMÁÜ-öÙŸ%ìÜZ®-Ú„EÀ-óÓœ¢íɵ ¸ (ÍV£?;®â¾f ¥;ve¢ÊXOãáó§hC\6á‰/ž}ê:›ily*ý_Ú™=qmÆÒ´8x#z}lL0 N$;8uÕãí᪱s=,{¸‹Í6ly lX,¹ËOó±vÿáí_B‰z̲£É™)»7ÆJÔQ®éhñ³í­ü®Å¹Âb„dyZ¾˜¹ Zö‚»2|æJhzV³ÈÉØIR¡£('S}|¨)«¬¬ÂˆTbT%Ešú¢ð!dÍò´ŒŒÉPJ3²Sž/“w|Æ4Z&¯Œ÷+Sù‘ê$Zd" 13:J•VEïHvÎËÆ¿bOraÒÔQ~سµ€GIY­_ o-ñ?N)ªÈnê5}ûnôóïh‘ö¿;„¼þA¢zùÓ¶m´íl«ÚYÃ^÷Z¾P™ýCoõ÷L©ï.[¾ÓÚü…pü¨—ïP¾ŸŒ"Ÿž]¤Ê`$„,£Äu¥û¸2TºoظŸ$hìˆÍ’uÅ6£²(å•>x"‹1p5"m,OΘ`r(›ü顤YådLafS©}Ȩ ÊŽÆdÀ2‹ÎB%±Ð;Ë‘ËAÌȸCRF§ML¤…Hj‡TJS00­{^TLóø…C7Þ—òÕ+ ÕU…C©=/5éÕD£ú{oð‘Ž^…ÆÞk.ÿ8.)&"4f<'Ôsµ8>DÚ ÕöU÷Õ;/ëõ*OË 2dÈW ‰ó>¤:NŠû,;†X ™êzÿ±]ÇJ@îF\ÿíÌTßþO$=¸øo¦L± ä¶õGh‡ Œ›Á€›ŒÉ¸}´çDÆ´·1w™|£ôÔ'ÁÉÈVö[È¿bÙ}þG’M­³³ô&ÌȰL ™~ÞJž«öwõ~ði"¾Ø÷bŠù3o*ægÂ9M´X>JöY=Ú‹ Îò¶Éð€±j§öSö»E§÷ý§º[fŸÖ½RØÂh·,¯ÎÀh“ „rÜO›C¤¹§êïÝ1û¾T»^Wa”ŸNN¦þ¢w u JÊ_¿tó¿öÃûRÀ6d:D'¾Ù÷粄Ã!@Ž"0½‚R¨S ˜ÓD…}Òl֓ȱH¶HL-—YÀÈ\`ò[õÀ¶¯µxÿ¼ºã•Šj`îáÒPÀö¡5ù¡¥ûŠH&ñ •…ö¸H•†LBÁŠIí$‚±–w/@»h¤a¯êî°»¸ÑË}÷ öÓà‘üŒ¤Ýí!íDmk6'VK2Iô*²ßgB7´ê1`RÖ\ #0GG-߃ÈkJ†ª½ªIÒ¡èP7iáÀD)R8$ED*»×ÑN#¼¾îÝ™¹÷hðcBãñ–lëÓ&Œ|’12 Ž˜¿²”4Êï-‚4µ.ï„•ý"3JÍFJäõJ†@#T£CÆHŒQxH%Ù=fB5M©l¤‘ÄÇTЗËñó¹&mÏl½iu´âbÆUQÏÏϯ•p4îÊŒúC¹ÞèÒHdTDòIù>AJ.Ýsº£]‡š¬#ÑH 8Yo,^Ý«c>æj¬«Zf±pÆþBÎÐÐbí7׸³V®ø6yc×g¥ÙQ•ž©F`‰ÙläÁV"òM%„až©H`¸T«w¦Ë¢$WX(+SqвÐb†¶ÊFƒþsg.}õ%WÒvögã©hÞÌ(“¦p-$ÑB·Œ$$ÿ@xìenHµ/…òéDU#?HJ#%r_mxcš-/U~Öð•7¶yGC©¿ûÄ÷ÍþûÍV÷ÙYÿËÕ–ÝžJ Ó?\½t.ø‹È̆ý¯wñðÓsjò×ü÷"qt«H˜¶×óç@×Ä×ýøäÔ¿/ùp¹ïRx¼®â7ë,ß £}z2õö…ß¶šÌ'O¥CÓ¦„?iß]¿ËüP&°Š~•0$r$ SÇ<äSMÊÆÃ6òꢪvo—qôp}g‡ÕõŒnÜ´¥Y²Êæ¼ÍMcaÿTÔŒŒ kÞ¿»jl2rÅv/švÔ¦#AÓv§!\Ù $‡]Õu:10PAœ'¹"S Mnª™ù3Å®¿ä@"y#¨p’!`¤75î€-^ HTQ©Æ!bbá¥yÀ’Æœ™aIÏ7%칎ä{9C'y“rT4’\øM.¦(,I™`0™³ô…C8Ej·“°ÎbÈ4Ô>R˜UÐJ¿Ê±5MÐ$3“éyÝbfO0^]mâ£[}£×‰¡”v î}Äɰ2¤úd©p„ŒâôOû¾wæ?Âô‘bÒ¢-8Oü5J\áäyþ‘w¸vq}¼DE*û¸I|;!ÿ÷Õót(¦õ—ÆÏ!CùÞWbÌôj+TÀ>½ψœÀºã:iRMüŒ„\ü(ˆJÚD ¡.9Á :+KãÎ?R"­4äÂ#`fh3[¿þàêhõÄǫ̈rÕùõý«ì±©hiÂïŸ:ýü[/l«™ëd»¸t‘íâvy4^àñÈÞ´g̲ƒœT}<ÇU‘Ò‹3€1Â3°±œXưüV™„.ÃæïÝù¨÷¡X^V–(uËž¢NF€O»>…;!g eÙºˆ~$:3ж~-ꋆÏ\)°hžK¶ÄÔW½üc/Ü™XEÀ(wË4k!û÷{]-Cþ¯‚ÞZ|c%Áo–waÕí±ƒ–a² a#HF¢E”\Ü®é1JÏU¤q.ã–‘±0+t‡Ø™ðº€F€(TPâ9,8s„òë—nœP6'3-THlÈüþì2Îüüýþ À¶p{"Ó¬µŽ5ê¹Ò;kxî¡?Æÿ8€/þABfBðH‚JrùgÏ5•>´½Ã\ŽKxX¦óðEt…5“„4¤­ì@ZE™VųK SR¹Á'/n]lv[ͶmYGWºïOë^$`ÛœýK$rÿ1骑£ÕÐ-hì·ËFêCõ{†%Ú9‹º+Ú6SíÏ´T$lj·Z{ÉJK IôM’Æ\óó;ö¼Â„ÀðèñcªÌp“õØÐÚ|¤¬)Øþö}ݰ&~U¶Ô6r Fô'`ÀTŽ:®?;ó]` `ã™»ਪ4}º;ït:IçÑ$á‘ &TaQ@EFtF×Òu¶v¦ÖYÇÒªut­©©­©qvËqG-k,ÝqÅ)«Æ)gQ”Ç€OPD òH$@š$yÒéd¿s¾î¿OnwbfjOݺ9÷Üs}sÎùÎ÷ÿÿùÿй©|÷ʳ7ó{jc À(6Ô­½}1‡Y5Ê×Þ¼fÅêø?â¡2²zúÆÝtåî{xáÀÈS8\:g ~×ú7°)™›ã%²+á%â¿àbLÍÜ!”L-Ìß7Œ U†D,†‰að3š€¢0¾¤ÚèÏèïJ<ã)oÄÔ%\—„Ëp=˜ø1'žÄ¯88ù§3cfA·÷[S¨‹Í̘zOݽUûŒêÉ€gþ6 YÙÈŽHê• N&ñ\0K% žIkñÏR1Z6¦T”cåL\ç!ãË8,m¬S2¹Fë¥Ù¤~㧠ĥÛ6<™×º.i™xb¥ªLJˆ:Mi‚vÊñý9jÄÆÛ£yarDàÄHTãÞ›ŸB žÃ蹊 0FZ¶3ØÍÌ(eì@GeÆž´Œù´þè8û^³^QœÈd-hú‘Ôÿ! †ý_"úß¶`IXn‚<¸T¯Ý>›H©%xõé`W¬ÀD:ô¼Ñk³²VC¿7Ð r@iYR³ûÆ4çTÏg·ãß ä–È™vk‰½d‰W%&°a®–”Ÿ¥æd4¹Ó‹[4ùËiÝ]z‹RË{n¹bþ̾ëszÀ·®)í¹ÿPD5ð0Ð5dT­‘Ó-öB492D§ÍÌY>eŒñç’Y{Ǽ‰Ús¯ÄÊЯ?“6¢(²ýëûÆo“†–X?·½ rÃ}fåQáÙ¨;¨ÈÓzÙYã{ÙÅóQÑ®¤b µ’>ÆÌTL¹¥cKìÐ/j²ž0:ñ°³ð'ÊÔE~£Oøž—wcOµìyƒNøx‰,VóÄ㉊}$3‹¹"ê ÉŠö©cÚm™‹¡±>¿`Ìáû˜t x`“¼ŠiÔ¸¯éy·³²NßÔ DÆ.afê|Vvý-|3JÂûiµ^žÿ¢33¦Žƒuϼ¼ÿÚ)•eÚ»‡0ªXÀh‰f†NÆxÓbF—wW(²ûp&¶îáTB ¸×¯?<‰íè»xQζ%t*©DÈN†¸°ŒÉ¦eضoë@/ÍZ¸nœ–ÅÞËBéDÁÊŠÛ댽) Î03½°Ú1ŽùVP–Ñ‡Ò Æ”YUfs2‘1vÎùíAÈôBicÇHÓ xcêk¡e@2àÙÿÐ NDáê(3 Ö °í>l‘cK{°¼ …ÃyÝz:rmiàÒ<n¢E‚Ù®£m÷•—{€^6Ð# ÑEŤ…À6܇ÿ‚™Ó¢?O¥$—cãì8ÉöuFïF[AG5p>þgµÓ©ö$ácìFb·(‡€ÚæjŽ;$urèVü ›2ý"|6JθG—žá/ð ¨&wž‘ž5è¬è˜¸Bz_Pÿ~‚œ,©¦àQbL3VÇJ–F† <ŒæKqÓÜÊå¹Ê{BýbßÁ †`Úˆ¡íiM ³E$ˆ´kôÿ¥M c]‘j”±ÂE!Ð #¾¶ÅO™ ¢Æ õÁápOT8Óz œ 7ç”—Ã…†:ÃÌl{EWèjafİHÚêVÏx7ü`ßI[š†^ý§@(Q_‹ƒoàã³jssfË\.þFà(#8pÈ6±aLì>o8Ã&½Ͱ41zЦ Œ1Ú§J˜^L09Á¶œ83­.¦Î,5¿ÌÑáAò¢§öÀÄ]ÊèÉÐ]é8 EÛEe¦¥ØƒMï×óG0¡à—ú·.ѳé£{Ø’qÉ?ÌΟ^êÛ\_ÃPõê~MÿçUEu›2^ØÃV| ì"¼“= Ô¦eÊ(Ìöïو̂EK69åÞû¦,)%-“dû v$›–ÅŠFE‡ÑkQóFE6°gÊ¢Õ`BO'£H§»Padf\%mËÁÉHË€dØ—A'|äÝS;^Ñ&-㾡YW¦œpã¹Þ÷ß bS†è€Ÿ9|ÕI^ï ?{¼åš›+Ë\T4ÒT€j²Qˆ' …:𢅇åéa Ýª´l”×w‡ñP  P~&`i¿o`à››Fîßx€Z:\øq(>®ûuãKû:_?Æ›kæ—í µ5ü©³¨öø´g¨î¦(IMT†%–ÛFŒ69gòD<“½}J(Zg_'Åìèdf@²ÓC¦ÙøË¤>ðŒºgì;'éð¬²ç [á4/3€«9²¸è ìgÏ÷?ѳ‹ÑÚp!Ðeéœ)Ó®m>¡»<‚—hÄ5´/Éż'~ò?ÑáèéQ`w#]ãÇ!ž‰+eiÑè"DÞS€MÄ·š#¶‰éãùÒÛÒÛÁÏiúXÿbéÌ.ŽoF¦pGÛ>_JûÑz›R|㛕pÏc~òðUKï¬Ík î8Þ³X‹M³†tñÏêWÒ@ÈveV•ü.ê*q¥ÍÉSû.ñØ'ZaÖÑ¢ÖnFCiÁ¬Ê,öàåçyg¤fVâšÏÖg8F¥ñ=}ÈpCŒZ[fu²¶Lïøƒí; «½˜Ñ¿þá®H§ÓVÕé/˜…âò#Ù×v8cLL¶€Ñ6¤fŒðŸÊSùqô_%5é ™×ßo¼õšidf_Õ…›üÛª*¾ýЪn~éÏè*§¾WÙ®»§‹ìhwO®ÔÒÂO¶÷“ÝmmÌÍ‚/…MM¹%º Éx@}!å+¨V„[ ©2¢ôëÖk0‡hë1|¼mòUÑÏ °â*¢º|{+ü˺À"ÿPyzàþÆ·=u %‹/WÍŸ„'²þÈ®¥Bú7®û¶¦•‹ê‚ôgþ©B ç?>ÿÕŠ½øòíÕãöîÄ9[” —CmæP¡ÙÉÆ3)thÎòŒ+mefuÀ3ò³(ž) i;ÌšÏt€Á5+½žåÖËlûiõÞKgœÎb¡2ŠzŒ;˜°Þ‰ŒÆ3 Í@;œ=VÔW¯âA^˜ìgI=±ÉÞ‘’Æ’6¯-žŸm0Ú^fjæÒz^‚¯Ð’^…jíÅ7UÊh¬ÑRw6RVÖÂ,Ô¼Ý)òi`¶Ë˜[º¸vðé°Z…›ohÞë–Ë=+ªÄE¸ðV­ÂS4ëPFq­ô‚nooä鑇ª Ÿ#Œ¡œH&F*Ì€d\+ýE±ié«®ÃdV™Î–vSÁÈâË{^<èÁ!2«gMÆ©Õ5S©â¢ªLÄŒ¢'++ëâçå?eg˜Ð_"©À$ü (ôýB8œ2¢Bñ•…:¿ZR Òöò¶@î±;òî+×Sc@tIu öÜQñxU®Bf»^»}öÿ>82ÊÐ2¾rO Žïó@M îÇÓ¶>4 …dx¬ðÒÅ/Ý« qíœé™++s_6ùk%ÏŽµecÕOZ.–±Êš01Ÿ È™xÖ~¦Œp^«ÍüeàdÜPBÐB’a|¡ÔQ’ ·`µ¶FÝfFN·LhÒæ-UÜ”µàlÌßo‘°q<«%åg R)=Ÿ2ÒË)6´Ý>quàD ‘BTåMé$£/r*¢!ÔŠ‰á’*\µ¥éOÛ6< R%Š.´ðÄ¥`rù¨¯3tü`ßÉijv‰v䘆w·X|W^S‹ÆŒ”'¾ ¾x0+"ui*&9$O1” 0LìÁ‰ùÿº@]ufçóo§3ì¯õ{û×Q›1õž8úËgž=Ùáó-"°Š{â3TF#ŒÚèc}4…ÉS2£aQߟ‰§Nö£/P&Pd ÔÄÜàZ¹Üai"´ì¯ ÖY4¯öò pˆÞSZ>îÚ^Y’]°›Å+½±š5X0ÙvR(ÃdjÜ{wúËU÷=³;þx6Õóa¬·£fã2@2p2lCõ‡·ìkj/:ô»i¦õ{žEyèdVuA4“ŽËU0,Á')]$¤ÙÚ²Yƒ|Cà>  …ú0°.”hÿF—† êÞpÉ57ÖÍÉêPÁBæþé-Õ(ǦŒtxöèS±_Yæ’EÓ¬¿¢(n‘¯FcÉñÁTƤ(¸²6 ÷A×’lݽ"‰‘DIc¢P1ºÆ—`Û‰0&Ñei "ɦeü r¦÷FsF1#“ø W1„ÓÂFoˆë[ÁØi$j€1Ð8el•1Ó¤aãrÕäæŒ™mŠ1…Ù¨ˆ£9Y"ÎaÖEoŒõlÛtÔ(½Ð[†uA8Vzš®üîê[W•‘‡­½y ¯²ˆùï‰:?üþ¯Ï»W°'–ÆJQkŽðgï¿´n,ÂŽ{Úfz‚o8¼8:î°sã(õXíóPʱ§Q êψm gÊ,¦fx³ ¡+bÍÈFuQâ™]4š83¢3û«23eŒAþë·¯búÉN«3¡# ¦ \Iàf´v€òûôH:j.&³¾2è׫;O‚éÛ…ú1ÐM/õ}°¿…|ÄXÌ,ùûÄb˜\KTáø¯çU©íç@V0Ùœ4]ûãEã%4åH.64)®?°z>!0îþ#æò#1–´Ãîß~sûÆÐ篶¡Ñð àô?7®Z¾ìxaw…Ž[¶»xFÐRÆËpî¼+®òHŸyaûðú—0¡cNüÌCínÿ”>@š_ô{O [µÝúÃ& Í|ªW¡B¥ÏØt³þªÉ…`T`u@&!À ÐX¥ ´€f!ƒúØH6ðp£µ½ü|) ‹|3hDkú‚*5 ꆎ‰vIÛŒ^c©Ö”%{TÉ@Nh™CyHr†®!älŠ@ÄÉ™±lT¤h´x”¤«°gSÛ¤¿Ïĉ kΰžQÁÆdC›qË!0H\72Ê1±I½g‚¹‘ö>23A,½nèj©;kû­‚%÷q`’ „£\ããÐ×&缘”B%>")RÒVUh·²ˆöDqîÑ %¯¬¡´4¶caËmÌŒ…@2ÚôË^‡Ñ1g©ä;_ºbë>lkFu>ñÌÆIž‡~Ø=všˆ‚j~×Þ ‰Š»7ehðlÏ®Ÿ` þ8œë^´|U®g°{ÀÝãŸD$£kÚß÷§h¿Øù©©ÞÔòÂTºùÈKöçdÌžœ;{š»²4×—«Ëgø3fTæ×æyþ®ªhf •~@&èûƒ•ÙYú‡õ†®„{2ƒrdèV¯ªŒOá¶Æž††÷Ò{Z–­ù¹«©§~Ó‹áAq½Š¯gÇ$7¬£üG†xJ>52ØÄEˆ¸m•÷Ĭʓ–ŽMÅ´eâòÃ5|‡iÙ^_î£îìý#óëÓfMyåô~ßp‡FV·¿àÖ`óéúÒåápuyÞ—]…åÞtoJQÉ0Ý(œùj°kRFa¥kþ§?ò§]©Ý‘—qºzYææÃêÎ˼;NŸ)^yéÔëºE{wy¦MÀ°lel£]ºÛÜ]èª-*™”¡¡åÒbítùëʼ×úõ;礹RÝnñŒ=ó̰„®„±i¤KìÊ<+§5ñе‹ò骃ՒºIL¶ïÉÓ÷‡íþC@Ëö"…<ÄÞÑmÏ öCi 2< 1#ÒwBÊ‡Ï ŸÏzÒýÏ2}ªÿ,˜YÑHFNvf8ï­€±‚œrWVúµêo…".oNGZ16Ý &§—¤tdf(39Û'ódfyC=ÝYîܾal‡Î¥y†mÏ ”f žCÛ‹úұi áÑ,æDû¦ï³GÓÅ…™ùþÔ´ÎÖ¬ÒËò*Nñ ÕÑ0^c°ûÊÊ©ÀƒÓÇÕ–w9wvYk×€êœå‹ª£ ½ºi»Á†³(Ç>ìïõ{´ ¢µ-ôᇽn_ëhu ‚¢J>ØwrçöM ÇêÜÅ,QFfˆ rÀá:Q2-˧´÷vaÃSP}hÇ[SK£*"© wëþè'»® u½Òï)f¡PÏÂ#ú½œEû²7ƒwø"XŠSgú‹€X'úÑ ‹T°UMÂá ¯Ÿ~L˜Á}è%¤´+?äNî?Ë7B$C¾ÿ¬vU,{l(ïk)r×…»»Îk„ŽKfþ}£¿¦ÜåÌ8/ ã Õé̘lPE ^Ðí1B’à#;½óÚ†½;wé™iLO†c%GJê‰qœjŽûKs¬÷·õŲQäðÊh΢ÌLÅ…dfLBΨ“'!Ó– Þ9™þÒsÀAã€d3¢©€–a£ŒQÚ•JíLÖ–0—Ь1a-½Øã>y­»÷ïÙØ|æ­ƒu)͇´g zô ³ Êͺ‡ÞaÆ2íÞúS}I]xÇ&Ê WmÝ´õ±'7zqÓAœuŸxA„ ®¡/ÛwJÉú7‡ÇáOç¶¼ü‹Èçá5x‡¶“ok!»>àêXel?|ûžq|땟áló–Çiï9·aOëº8'&íåd«†. EÛÐ'ˆ^mfF™£)b£ˆï°3Ø:4nL¼¡3¹dæÐ(u*ÃÞPYŒ™¿ÉðnÖ¼‚™ñè¼<€ŒVÏŒbF[܉¶‹·¤X\;X×*颤smM¿|æÙ²Ú9Ó3èRLÇOI«cš8Ö)+jаqŒèç*Ðkú¿aŸÿù¾ÎÑÞñíµeöBiœÄàU¬?âF ^B²‹b÷áY\Q¯l-þýÁáëkÒö²¯øg¾ÊŸ^ÙöU]¬š *ýÙ–}­<Ô–Á»iZ›4éU;±9cGj»òOé{k¯WµëqVǘ.ÐFŵá¶N€VíåŹÕUÚ„q¼è D!äL|œe²…„6>Ù â¨cc›]GY §F»ÏWç‰UvJº>,q%™C[fK“.5ß¾Ñ6ndƱŒZ"¯€™iy#»¬6Ò¬Q¯¤Æ¬ôtæ¦Ò£g¤ga Ñ"GuiTÀè méwßÐþiÛà¥8{lR‰í>_{Ñx ïŽFeƒ™ÝêØ†Ù2¥U;æjv¬N•°Â©+?£:u¨&°tæÐw0p÷=îkº«$3c•z®Ù»P›ÿÅ—"Ø‚»ô‚…ko^ƒÌs¿}Z©5•Ûjï*™›ŒÙV¿¥*0M‡ñ,x§hþ÷«šÕ-3Ås®úLë-KVEoè)È*MY^4wʽŸ­óàŠÕ?åù>mõe/,Yý(îC¾cÍ»ó,z fËô;¬yvýóKçܳxÞ½¸ÿÕ“·jqItí¬ý{kÜ{—­Ò¶‘?½,ZǹR´æŒ™4¢â5UMhwsÙt¯ À“àgІ!*Þ4þzD´(¾ÂU™Îà“âÛU7÷*†g®{ÓI¾øýk“54éHÓÓ&œs|´º  @ÐúZ1³¸>g&Ý]˪&‡MùEOëþøâ¨˜çû ^•ðÆQQLÉ„É#ä”ýbt+ŒÔ|ü=쫊žØåñtÒëE$\¡mÓá hÑXÒV`CIñ𱉭ž–€‡Þ5^<×/ï\òHýˆbΤ½ðëçÚn^öýþB)ëýôÒ‰ìæmæÛîåøzëZøÇbÆJO5´4MOT='­V7–×±Ÿ×Þ~Ë­÷¸îx66ì(Zæ [Õ/sn%H0‚Ve ›XÍÄK‡, ;dýü?ÂX¢j…Sö?°ö4à%«h‡Ï«.]笶Íë ¢_³íLov µš“d<&“ß(­,úÕk91Æ(•…aÔ cÄ3H]ŸÚòÎ?™ää™–^VïTFÎFI¢ÏÚ›³™²ç9‡Q =ºFZä¶Îö{-†ô’Š}båÚí@¬Í«4bm¹{ÛÞÝ»ð™û¾ðeÜŠÁbêþ}´ø)‹ ž<âM_úë×ÚÒ76nUŸzöùo­¸éë´+âYÿÌ1²å¾¯?Å>Œ Ç?±ó?¿£>÷½m½£ÃÅëžÙ½c¯=@­üÂgÕS¿úYjÕ²_C}®§ÊÑOŸOw19ÑùÄ:(“‘omYô^<±Ô]·#èù0¿ÏWÀ1L3°õ¿úüwìú¢Ú>€S€C¿SÿÙÏ–Ô¬õ—½q»¢Q±ä»/kVÔ¨õEu' ¥SjYxÌ4¶Õ}¡€€Æ­)4Ï”E¿ˆaÊfl±ŠUôÒ“–á‘HFrƹ¤+zžó¹„70»¯U~¼]««ö­ï»¯²æÌØêªyk2Ú‰'B¡P0œwëïß:A%vjä©Áò[#9ÞvŒ—Âc—ó4ÚØe'gÒQPùÜGi·lþé?¼¡YÿÚxf:bX9#t°-V/ft꿾î-ZôÝ_uö%yñ@IçulÑuVû‘ÞïXÑBÿ‹ƒÙ×bú©´©+‚ñ&˜™çbÙàX¼?f_ßûw‘å¡b;ñLŒ·…cžÌNZ±¾=~·„½Úˆ4s¬ê‰c¿ØÊHàŸ/ÊffLauðÜ'*:–<ºÄóø©ÑG–GžWcâP±?ýÒVG ´²m;lZ¶<Á‡í«÷““±m 4Äõ*óåK¿äþ`Ó8aá BðpÕqÑ™[’ý’Ø56óhÊJjÌó^~“ 5æu:VÍG€ù¹ ,TüP¸ÚŒå<íÊNS9ÑNè‰,Éçµ Ô♲²».Vc?𔤽Q·ñ˜¤†ªQ‘#TÆ‹/~µÇB/*ìátA(éšH“´Pܑ̢ÐU‹U³žù¶¢¤ŠHÆN’ñÂw4’3fÙƒÚóèŸÂ1† EÉŸ¼ð**æ<–9Ø”Ê6 b${Ì})Ñt÷Ì™¡Ç>ó¥o“.;ÛUyYú@ÅpÍÜkßÓðše«4ð0]Ë–§­§û>’3e™‰m³¤i”‚g‚jl&Q£B<Jì?õ›+}˜óétOt5óä-ïq“™á®»uí —Ú+“É lÞ¼y#ë✕K·ÑÑÑËqÍw5týa$WÎM÷e#góã¥|ÞãèZ‘¯²²;—ËVðlCØãõå'âžÆE¥éy, °¥/Œ¹Êë×ꜛ¹|”«Ù²Æ•°»Ðá³lÁY•-6¶†./dBî¨_=sü½ú\so·PôÊ…ôR›ÿȉóã‰ì¢«½£é“©üŠî¦Ã¦Þ:ž¸¶·¥5×zäìE¿ÏOÏ~ñÈ'žI =FO;Ɇ+ùJ0ŸLL?XJ çSª«¤ã U*ŠW=^©ÐA_üïñVjÇV‘³ƒ1¬T¬k ³°!=¡õÿÅW}µ™¬3ÔRš™TcY»(¥®Û~C`|ªrk¤õÝtå¦m•÷£k¦¿Ÿv¯Oö_Lu¶Ýßñ²ºîbf¦;T¯íée}*`ät[_·'[ÂÒ¼Ø5V*fÂp²æByªNoºX,|¬ì9>•&NLffZ‚~(ÝÁê¬ ô !ï¾ÑÜùébÌí—Z_ßÜžšYço¾ºÁ‹åæ€Eƒ v_R Cb/sqÜ!™ú9·Ï"ÁfÃŘ•B)ÍNîUÛƒ%ã*Ëa)«=‰†A¤ñÓ)ý˜öáSËiº·4„{CþUÁ†Þte}´ ¾ðÎ ™z|XödÆ÷³Ïdõòò´ç¹Lé½dþÍtK]©.žSMª:) ‹5t´øëu ÏìX®P%ƒ Å\9_L—½tÓo›®Žo«øó…xÖŸÖ?XíýŸöÌtkãU-SG'|í dôÎw…«z:­Q-~£4³5PÏZ*ú ™pçè¦Ù;Sštç­_¼ÄgôI KæI÷}ÝSW'Q%I½°Šý¡¬»Ûë-t‡B¼BÑ?žR°!“ñ°i´‰«‘PóPáÂMkVCg%ÂÏÔäUØ«Ù7<™ïDgl¢Gd(XÂÂaè¡$ýâàb]Tzê›#Ðq((m®£D2¬¾›éP[\ᜂ ‡¸ŒÁA¢‹©ðšy„£Ck–/Ó/‘a5˜r-¤A‚U<•¶ö‹_½JÛè>ÀÛXf «ïdüÀû¡w;{ÃF”öUæo–.ûø×uL_Èj èãî0Œ¾û°þá|C¸BÇý©®Rá½?dGOóA¤.»iï|·?_á¾j¦!×ÖäÂ=F«Àåç\­>P=3ÚéÂÀÉSý`t:v/Sø™þcOä€R´\ãGá²ûG?~ò•jÈ³ÉÆ ÕYtNQÈÖîžÀªf}ǃŸ)Ë2ÆDVl =•ôi_vÙŠÖm½M›Wv”Æ àdÜzv(‰ï»»LÎÑæuýPVZa,'ÓÉÒ»kñršŒ 3›¥id«í‘þy;)óç& â»ím®Åµ~Êz}-«vYSÙ egF¿Øù7æûñ|²çÞx;Ec¦|9ˆYÃLѦ´1‚–± ŒÊâ¬dF]9 ™ 䟵†¸üI®‹³k\j¿„…›Y& Y‘ÔQ3Óö›ž)épWá0ôK9¬œŽ„Œƒ¹ÕÁA±Z{yÂ2ññ7å[ïˆø¹Ü_ <ÔÄ vϺ²X¾‘ÃòàÌ —¿ -}y(þôpfG®éH%ºË½ôl@?ïÛWÏ~/–O#U¼˜‚¢Ñõ’¯ÌÚkqfº•EÈhfÔø9’™ÑGÍŒ˜Vû¯õl”Túµ¥Â]šöÍ[?VÙd®â]Q«Ú'lLJA‘0©š¶iýÃdQ¨H§Ø™mXiî%µ8¨c Ç›¥ãÐP8^›ÓëX+UHtâaÒqc#B)×Àƒ8ÎŽÎû·wqi$«_)ËÆ¨ËDÙÓt߇ĪH^R­¦ˆH)cúâ“¢· eÚLCšbžPeËyÈh¦ïÏ¥³úë™Õ–€‘Äþ™ ý¸í€gô»ÅͧñŒxV²¥‰“G4Ú}í¹|›i‡ÌNsŽÆF±Ò`”…^P—'#ƒ®P_>À’cʶa‘§¼,`ûÉé³Ïï>ýö¤sÂÌ4þÐ,ÉF?FÖCI»öJ~Es6Ñá‹o6Ó/tð›õã7ró÷ï˜-S¶S~*±Bzc,¼ ôj+ý˜ù…›ßþ±$¯'3EðŒ=ø˜R]ZÂÈÊçGåD&„ÔÂɇǪ̃5‡ PàÓDS³æ5‰#Qªv/60å8r@—ìN«5„:`ÌQÎ GpÔàæ ±ÂÞá°l/bÁ°½Ã»éºÛ?ú7Ô\8ù°šÀ W2…TÉ^ƒ 'œSséšÌ“I§y!sŽ,”‚m¢´(9’«r‰½›—’¢_vdÃÛ– ¥Ò}×/¶AnéhÁ²Ý\š/AJqÑײüdä¥S!H@×N×[’ÎÊ‘wØlx¹ŒAÆ H­jètÓWvÌ™øè7¼A<3í—ÒÙÌ`λŠÇ3M$÷àS¿}Z;ûÙOèoÿndz»büñî?6üêóßÕZö$Fš£EæVè2•…M<Ê&X27fŸ’]u´0FÈœl5™/IpQ¨-®M&ôò,tÓ7aŒù¡Ëô˜bÞµšd¿\ ©Æ/ÚôoOqâ×õ¸íwYýor}uÞ¡÷iyÁõÖÈǨýäfÔ9Ül¶h¢àªqé]À°êcôÚÛ%Ôx†'o&ÿ(ð¬ÿWûÿõ7gIÎÆF3Ó`éâ`¼ Ó×ÁV ×Ù¡äôÇëÏ–ÆüX¸3ž|e›t4¥»º¶ÿÎþüø„îokmô2OQ-4c42³º±ü…´žŠæ$^øÊ$G(t-¶]*y#û¥V5›„Ü++ _–é—¿dòõ“å5L.¬¬Z‚x¿&'#žz ·2k J ЉdÊÂ~NÂãcJMÎ¥Óz>†"^ìQÀ˜ÄÈlf缺ƒÛ t9h“²™“²#Ûdb Ø8ÌŒB×L#áŠŠì¨æÚŠä¼ŽØgî8o§H²4z”p‘ï‡^©¸]hõ-[žõõñ-í©E£ìËõåïø’?—o§dÑ2,/\|ó´ÿôž¬:%z0*G6}»ö4}@HËc¢(ëý‰xV[#ÆAÚ„ŸÉÌ­ÉØppj#Ky.líúÔ{¿G·¬ø±§Ž½µ <”Ø©¬‡ûCû—-íÅ0<ÓÅ0¨ E8Q6‘3™vEaWŒvFÅ&Ál#@ŠÁ»±Ì1d„Êð.Qv¥FeÛ3ÙLf&&fF3£3H±7*ÏH˘\0 Ä"93ãÏ(Å3ûÏê­&T¸R‡><Ž$ÇÐ廿/ŒVhÎÌ43J²Q³áŽŸú 0ŒÁM9b[5OgË¿1¸dYí¾°ýâŸyáØ´ÉÙ®ª/t÷ºƒz挰nZÒôÀŠ–Ûýa(›Vö¬ïËê ÷–Ë"V!ïÚ¨g…V5+вk:Ãèyðžk°Ê˜3Ó̈Å,øBï:åC¹0ZM^UË´«&zÍ›ıUÕ¤ÿi Þ=fþ*G@+ a¨VýÛ!+LŒÀ •Uð0¶nT¿”õv~]Ù>N¬.mz3JÚÖjI§z?]Å›Ñ*<6ÛlÌ$F&*ÈŒ”šl©nç0Ê…9-pæe@‘90A&" ErI2ŸÇ#¬LVØ#sfÔ K²¯\teØõx.“ó™´ÌÁÒhà3¯²Þ¥XãÛÓ|'Kf³½£«q–¿vµ/ÁÀd*ö¸ÝMºx˜wЙ…’HЂòv|V*É8ºYÀ“x6o™!mœ9ãtšHƘ³S…ßyZõûq{ÛsÏÛ—ãÒxúráÓ¸™7­ø±¿Ò@õË#ëÆú÷ýòÈ̹Sß9üS"“é|h2!™¯:å˜xãHÙ‹³b2^ÙHcâ¢X…ÿ S6\aŒŒWÆÌ™\ϦlZ&:M¯ÒI/Gz3 ž)›œ©¹É«¤j¼éÜÈirs myÝÖ?ÃÅI‡íw² ËÌš¿0Zy¾ùÍoz/݆‡‡ðfžÈÕ5z7uúëBu¦3|×.òs$“‹+#•\2­ð½ù|L.ÌÅÒª)ÕM&¦O¦“‰ ±âÙ£ªTôÔ7ÐS‘h$®ŒâÐèHX%Ù‡ÙcúÉŽ’’˜<˜®Œ_}zÒë÷aaXHº2Bq­ºvæ 3HAË‚•7=Hßø ‘ö»^V×ÑÈoø¯Ñº%¼ã™Ì”ר/Wÿñ–™åÉÈ;^\t±·ân.”éÍØ4’†l úʼnÒt÷BJôDS…L½‡c”í[h*µ‰âgÈa\Ň_¢C1W !¯\@õÂ)_ÈG'Æî`ƒ¸/Ò5‘ý{rÅ}‡N¿¬¼qøÜùÆàoþ2˜ÎrÇŒ«,ÞŒ8"û²Ÿºœ«Dq}:«“c”ˆ™ ý¤eÔ ™tHeq2o ^˜Z¹Ag¦Ž[1R½'˜=Ñø±ÅÿÇÛµGu÷³Z­ž«·VB’@È c0/[¶:qR»ÝN<·IÓNfœÎ´i;IÛIûOâ¤q&“L¶i¦Ä¥npý˜€‰yƒ l0Ô`!$ô«Çêµ!iwû;÷·ûéèîBd[î™3g¾=÷ÜsÏÞ½{~÷÷ïûÎÕ¬ü´ó7/Ï#£e3P˜í,ò¥ŒGo#ÁÙ…ÏÙ1äÌ–À*´`DÆÓ%Ï[≀˜ÙÊö±*+! y2»9Õס¬eàÜôê¢Ô­‘ÕÞÓ÷è²/tD¦k—-K©¨ ´aoT-ß’ž_ 0nùþâ•õw®ÝvOÑã+|˜öǥጫÔféš 9">Ò"‘¨†2?­Ÿ•øÈ³Ð’•82K¢Œ®p(pRfW(1~~äµ ÐBÚC@Ÿ´„+J´*GWâ!@cKš5ÊýhѬ11ÙúHƒFZ9RF HT‹äÏK!}"³+tÓU¤=MiÙ(ÆlÏÐÃ#ƒ‡"ÓÓS#ÞÄ_6ib ô´ÜüNå/ËN­÷LªP_Žfÿ­—/_~´Z€ýÌV¶i™ÌìXôÆ>ïû¶f#—ßë?¿$«p8òêŠ@Ô8Ï‚“QÙXØðù7n¼¶ûùŸœè93i“™’†g¤ªPòXVWz’6–d³þ -fÆB`fà+¾î,½ §µZf3ýH²£´-Žp|K3•ÌdÎÓ‰8nÇ(äL™Ù•©TY6#9Ÿ9Œ´ŒÍ Þ¨cdY›ò”ŠëMZ&û"ò#m@@ ÈÌhÍ(6L‰Š>SƒÇt)ס¬­lÒ5•ÀÛ¹€PÝ‚~% ¶¶™+a¦]¢ð­½—».]ÏiKw}0ˆ2„~Ù‡zöc/vÂz›âÔFÅÄâÃæ¦f®Ÿ‰Ëšé¾¦ær2IÀ0 `f-©ZɃr¨Ó¿©d%2ø™®ÌÐ1Ì®Oé)|«~²ž‚D´ºU¢ç¢¹Wç퓬‡™ Lj؆õ sÚW:ž&:ß ä¦¦±=²Óá»ī̑†g²-Z'Vžu_zÿÄýùGñÄz/ý\º>©2­iv(DŠ¥í£ŠkMN&úF@›E¥­gQ$ŠE%YOÛH±±ö 6e£IÅ”a ¢Œ}aD!)IÏøw¦‰£,"ˆ©—-ö•ÅϼgoÎu˜ˆ>†šñöhõ‰üÌF&üþ@h°PM4ºGëCÅщÈdÈæy0=æ‹ç—VæECÓ)Y®V÷–Gd&¨mè®Ì©¡Þ©`_á¿çYË<ÓµKÍÙk¾¿2³+¨„T±T†/šx¡q³3G¢‘Æâ °4Ò/VJ’²1©Œ%‹–u;Üyø'Sú£SŽ`Úµé¾ÓçGº.i?¼øŽ-æ˜MfFš5´â{¾0ÛøÙì®1xÅŒ[€™áÃ{dož’=_õƒÌ¬×¿Êã¸Ñ,&-+õ½Z6æ´¬3ÀÌi‹Ýé£Ù×G¢AËꇇU ^ÜlÌ %È™Ž)<^<”,ÊxýA23¡eäd`t½ê#ÄH(Ô^jîø cèêàsMV–095—¥iÜJs±\âFÏ?½6è‡ 56/1”;϶–di¦¸û]y‹côˆcР÷£ÀR Žš Œ–4ÖÜW—5º¨ÐuGNvi2…’‰ØWf8 —+ :ò³j'Â6jÈÃЀ_D˜o¥p9Tj6æˆ xãŒJíΠÿf§¥,ž‘™1œÍLÎΧEùYàg-ƒ#ž´ôÂàI YýÌY20³ú ZÖ°h*86N<[f9€™±-cIŠVÎI™dY943žã^`fägŒ/NÆRY°Ž¥̲Ë!ÐuŒ ¤_$gL&3ãYdfx°s+Êêjž¸£¾*½ï`¤ð7¥…"7 ó6–Ž{Ô¶â†r’¤ŠÅKKÏhiÊÉx£áî/“<Ö‘*÷*K„¨‘]! ?c›2ÕÍvó#1IȹOØÏ“ÞÐýÙÌì„‚l¶YœÛÄ7Žä ]e•.¢G$2Ì6t¼kMÏh–Æ7Êô9s»£,é|<ƒ8 ÐMȹÈY{ŠŠ¶½+SÖoLœ :RBCžt3âÉs;r=:Öð'ô3ûDû™QÍØ70BÛJ€Yz0£}Ê—fHª‚ªuÑê—¤-Έ4geEÃeScíN—Ëu€¥FÕ¨»bÉä`òí>^ˆö„ DÙh†çHªr4¥R©ÙM8Œi³:F–š“Y`$›é󫼇öÊÓ¿ÒÛI£¬~ñvÙÔ†Lâ:-»” ÂÉ!i,îÕ`fæfâ‘Ú˜›r#8ƒ²Çue`~™,MéMÉY4€rEjŸ~j!^l‹3õƒ [U¶udâwiŸ¯ÿÀ`è‹9ë<Î}-Ñ­À³N-ð,vkÇú幕3Ì•ž›Y³áð ×Ìè.]XQˆIœl “2QMÍõMá•–žvŒ_$69þš²ŠhTPðÚ;í'¯tÖ/½â=wê²÷j?>>÷Ï=­'öž¹^‰râhisë!߀çV—üÃÎá@·õš"D/]¸îÿÙtåÜ‹©³Çߪ[^½¤(_ž›ÀCäItôÞ;à ÿ½$ýÑEi_,HÝšæÜžú§%.™®—ƒã‹a"zø—ƒç.}0yðmß/ÏÕ8Fs<è_ùW»o¼9éʼnÌÌ`$3”¢“ŒÕx€«7¯{[öÞtºûOOŽLkÈ¿³Æƒz›²IÀÌ5R¯8–³•etMjÎomÚДu:Ì›8Ü×q(êD Ùÿžhî\ŸQÓÚ9;6±N´Ùzˆá¢XR±ÙñÉ0<±92…¯ç¨¿ð,zÝÝ Fbþp?=©ýìØ=‰N:…QA¶‰½¾i!‚½Uþ½—»]QµæK‹péÌß-G‰,jFÜs–ÊZ9Ó›t[?H3#)CÍfZVZvrkfYqµ›JEjkÒR»#€. ^E—2Úz$j©Zd +±1¦MS ØhMã¬òÚQ9Åt® ωjª¸Á!•‡¢î3M*l*>Q ŠæPŒéňÑl)×µ5´ÙqÕ IDAT³.jFÓÖ_ÚÈxÔ4ô—1›×÷"™t’è]ÇD$kñvÆl²â[T3ÓÐQg‰&Ždiâ‚fú¢]vo¡è#­™ÖŒóOÿ~f¦iþmR «5¶Ñ‰•6®ÛTT·E"áêųžÎÈêÏ™ËB ’^ùΟkû{kñŒIÐËfLßqÓ…<q¡‚÷Cýf„s+ µå¹l†ú‹í!FqT†í"`˜ ifJt›áEÃ*ª¹À&‡’ë'6³Õà–Š¦ñXôþù|z4ó‹5#Ì©gA˪FO–--Þf¦âËfŽEe€´Ú”§€jÊ žâz ïeùGg(•’‘‰Ó%è8žÉÚðæØ^Z%0ˆi¡'+U˜©ŸÎY™ïØT8#ùÉ"7#j3œÒ¶HÖ³cæWÿyäÚ|%˜™·óðÒ-À3ÀðŒÀF#\Ø®.ga@cä3¬0ÛP‡Já?¤ïO¶¸VÜÍ‹ng„«DÞFYêˆÈtÌ©Üæ¡¥ EÅÁl ˜aò0³ÒìÓÄ’Ä·j–hëoK¶ð%¶KÛšØ%«xØóZÅÿžÀ6([ ïaí}Ôäa‚g²Ã§lІÉ¯#ôž9“6grõ¨p?³ð33]0>:çÞæ[]Ûý¼£óØ)¯wd{ÁwoÓ÷ÂòÑwd¨7odrÁ=©íxfÇÅQüç…‡Iì|-[¸¥βUeÔàA^•{$ô"NléÑš¨¯­(]»Ö¹9#7éµFFüh™4$#åÉèl§Ø\Ç= Õ\³JÚ›Šã÷þfTF½§U*ËçFoV¾;Î"3Kaf›2¿óÞ›w•x´˜™Ž–Í ú,§´¡î}ø5gȘ%w¾óêàÉО‘A,^<äE ž}ûïÿM…7¼ákØj1™BFÁ0Ó™L<ìzq癿ˆ²ÌÅ R"K°!IôpUqà—’È\ð¾ÕÕ læFÕb÷X«îèCjÞjFÎNxÃÞ0®çÃÄÌ>ÅØŒL² ÆGfv{ÖÙ~nA—¿ùøÅîògöݳ^GÉ-ºqâ…Ée›vñ ãÙùâ7ãŠ?ÃYQÈÍÔÀøé±^¾iˆŸøË¢†¶õÊ6€œmÛÂ÷­gìn‡›påýˆ:'ä­Ü¢aì6‰š‘±@Ë0)½Pj#Fk½!0àºâ÷÷é'Ȫ·ÌÌï 5_Õ„‰®õ»_í\,ùÅû'î§= fVTúÝß_“þÐßݸQ«#Pîà·Î¶CîÞsóËÉŽ#ú:Žr7m@p ,ó)uƒ˜jÃ_IÇT‹L ãm¹Ø5ìçt_•7ý¦¹6†þGv§!{ OVO…½9.Óf¨f/ýÓ“‘=mš¬4E-9ÀEQ3Ú4Šñ­ËÄ»YÒæÜùòYö&c®3x·qÁ¹¸®þ·?¿ èzæø‡¨ÌiKÖrµ ·«øú( ë͸ŽâO]‘âvžÌèýµoìõûp ÅUlÑ­˜ò»5èÖUW8¾>}Ѧåë‘7•LÆLë|”Ä3Ó:ŸlLYªEà€fS3Êþ/ʶñâQLBÎÀÉDsHZ&äLpË\N뙞£„ä3ŒïbjÀ¨c¼SKÌMº?jJD>^Zú4G2ÿQñ‹Ènõ-ÊD/LP|W-ã‡Äê“Se½ˆúQ‡ ±ÞôMŠÖ’2žä.W§qµhþÊÆ}Þ÷?3û×ÌÌpV0cþFf¦,½ß¥óû«Üëgõªÿ™UUEu[”5írþ ¿³«ìîí ëy¦c\½±ƒ+gf@n £,à-ã^½|2be¶CfÃð4à]†§_l™jF”Ô.r7)23ÍóâfI™Ùm¾cò ‹·®1åM}• Ô1²äšÙÝž ¾ên¨ñ4­¬æô€7p2dÁà™ëƒo¡xÆ’U£§¨Å»¼sj/ð _áÍŽ”ÓÍÇóoD®w½ëþ÷<ôÀ°ì±cßÜþ4ƒs½ÿxE8Õ¶©!<\\Y!àÇ£+ª¤5ÂuH>À-ÌÝ™…f±ñÅâ|´çÎdèý×rÇ¿ÞöÃ:ÛŠ—™Þ¶¥e?óù \ËQóDMaeP/›§EE©,¼Ð6övïMEl f ɨ¬gHh¾ÉÌl7*ñ¾Ù¶èec" >W¼IÊ¿td%ß-¨i4CæçV”‰Â‡o¸ŒSž]RÊU̦5³/Ú—#«Š_@åê•ú‘ž¡Äük‰nÅlxÃ3wä@Þé¦%[ø¯x`U%fäM¥QüfÜëjËsßÞó¢9fb†é"MÀ !CEÅ‘@È 'ëUCš ð`$ͳ›ƒãê`]T3"»†§ZøùhµÈ)‰Æ¼Ÿ²¤ÌŒMÅí•¡Ù3™™2T‹& Ä€ññ3Îi[¾oz ¡Œ0 X}ì©GPþÙ3 sµý·W#Ϥ½y ÞÆñ¨ìOZ»,¿-¦–ï­Òg‘™á Ç m`ÉÒ¤gŸvçl¤ÚÑÊÞTðæAÛZ±i'ëgfÄ0Ú€Èj×ÏDÙ(ÌL”$|>È™"©¹äLŹ! [œ¯“jñ쉚1Ñ^ƒÉ†:‰ 39ŽC]jA¹ÆŒx³î'ÐE´Eµ: ± ‡ì°dE]qÓy‘å.1¥Ž²&%¶œ(dd«Ã²¢<“¢)ƒ±Ña¬'ž©¹fh˜‘’ndJ<[áÎ…@–f6žµ«èä²Í)¨^šÍ¨ù¦zï6éS\3ûØÌLY³öõW^À]ÀÌØâí| ±,¯îÿ˜û踪+Û«*¥Y%K–-²$Ï66xŒl°!12ÈJè$tH‡üŸä'ŸÎ°²Hèü@>iÒ ™H!„ta4ƒclä°áA¶dË’KóPš¥ª¿ïÛõŽN½’…è8«¹ë­»nÝwßPïÝwöÝçœ{nì˜8'Ø~øM|i%«Ç[ZôÝ&0¿<ðsZ˹ҴaÄa‡™“•fZ(²køØÅ£—Oϵý,ΙšÃ€6ë§³|ݪi²:š$FýÀë‘Nï4N€ˆßššŒÑá=Éc3óøå{âOJ¿†íÛ-UÌQ‰üû©ö3ãØ‚9åuŒA^ WA"Жû ŽAÞ8 Gœ£N\³oj¾#P±…Ëo*.Ù iHx ·õ™AbZâÕÞOe~øeQSœhèº\»i£v² êÌŒ‘Ì …µýSŸÉ±NŒÈ±]S€3CKÚá$˜Å¹–¡šÑF ¦òÒ•3¬x%bÄHÈ}.Mî ¨¨wIdHáp_ë-ÂMŠS†l¸ÿë‹ìEù¿h3šÒÑ#8w2¯ÒúöÙ;o¯åùæ¥KrƉ`"> ÆÂèÌ<Õo‹ÒJ?— hÄ!xb¼ /1íꋳ7¬ÕóWÄ}þ` ït&ÐÇW®ÛxEÆòÊ^ºæcý>Œcâ o\¬’ðŒ g(®¤F(s°1°1¶'SN‹³ÌBaRâ ÂH4؈U„4p;™&•ÄNÁ?öIÈSŽŸ EÆE‹RÄ c¿î8’¤F¨ƒ©´Ø_4Žbäqûu;'áÏQrŽÂ^)H%Îl¡Koë0‚¥ƒ[6ç.Þ†£.’ŧHËô¿‹-C›Œ¹»D÷I%ðÆ$¨fÜå,i‡FâMàFÑ2ùœ1ⓞÍ2I± H1#H ÀÎ`ÞM¿£Í,‘™A\N™±Mïžÿ{,õÊ=5¯o;и¼|™…w'‰²qLûðß’^úóSßÙs–x¦#èK›ÄFäû@y.›¡ ‡Ÿ<ÄÃÌ:ùØX&ž¡k¢?¡Ç`“™LVÅ<ØŸH°Æœy6fà|9$ŒFN¦ &ž“ímîç 5TXCRPÙ îE}¤­&ZéQäd…¢IOð8'‰ ÌLvWwð>œu Gsèî÷l€€Ÿ0Ø`UF@Ƕ÷ è,q]:ã23OÀâq’]oolN)D? @ \—„ŒT>u´¾úHý϶8þÚ úbH a=·L[°äÄs’I{äkNi\Ç*­B$šƒõ¼7}9Âê™Hø’Ât>¢ŸmZð§ÊÐKñ“W¡Y°}Ý%ó-)ã9eJÖHk/Æp@6ùó6–“q/Íf€1íЈ\ÔŒ’7F>Ëôl$!£ e2³U#V‰ £ó84¢†•,úÅy#Ô Rlf6†ˆ»ª™¥qÄtœwŸ«”“å(rÄ~:DÇ6ST‰œLÄ19ìm;j\|"iƒ%çÀÚ©q­4ˆ0²¶>âï–g,Œñ3—–ÅâjÈç°ä´¹D`L´ŽGFõ½êyXší)ø~…Ÿ…jü®Å1¤sꈬð5~áFdzÇôwŸg¦Õè©dfLUÛrÏØWuøMÛ_1Nd½ÕwM¯¤gcŇ¿9Á¿:‘„sîyøûž…:ÇIzmÙ¤^t•L d]}C¹½í1sGFìØÈ b)5}œyfçgL{Ú½–Dc=IS´+¦­êh€‰Á ¨FN&SÍŒ`ó}ûì:ôŽ€°ui¤k>ñ¬µí6ˆ¤®î[i&33ÎâÏ"–:Ÿ ïn9ý wAb’€±6ô°ó‚‘{ª¬gã¾4È«¹ðöGN>uøÐ"Ñ›‘jFN™ S>_½õZ/°Çù×x¤¨¸L—Ç”e06ˆQæ1jÁP³±òà«»{àð¶G6oÙ±/ë¾ÇûûÛ»åy¸v¯ 4šC¹ªÍºÞß•|¨#ŠûGü$' ÓwE³Ÿh2±O è‡7ÿæ[wÇàçœ$ã¢Ì˜ÏXŠ?ñ¿x‡)­ƒ,€â5íªÚŽ zíìÆÑ+ê©f¡Æõ`c¤h‡Fä5£ØÌŒk?3.ž×I„etžþ‰xFÖåYºÜK@‹‰{QO›<ËΣÕ;;ócÏñŒÌL'í©#„1P4 cš¥œ¡€Ñªµ½M#‘9±ÿ&›“VwBVÊ<³ þ«#{¾>=kE×ðK[ž}nçîmBάñÌñlDùüzê{tO¤±â‰V,ž#,c#'‹1³¶¸à.df.VtºŸŸg™n¯ƒ²1™NžšžY:#¸`ÁÚ¥svçɳ@f†CV…Úg^à¥àÕÏ0 îi mß{¤õXMÎÔKÔN6õöB@ ï®{ͶªCïĶýÍjàçP¿²ƒîžÜÑä…G¢—Ú‘»o[ne°~ËC»¶íY´tvuLë±Ö©üt ô‰&ºv^rç1ûë–ä1¯nõeפc´7#n„Û:Ã7 †þ©iàÆä6äWžìÿIóYq*ÓZÊò8-Z¼3JWô]5ºqLøI×v6AA Œe2ª%ù(ƒçõ]TÒi…ä„ñis…Òñ‘+£K/ëÎï® 6ÙSíK ‘™¡|ËàQ€™q”‚gèC"ô(㜳ӅÉ-Õá Yzšb õTÆÊ“ŽÕ\0³m¿^ƒ±"-<#9Ãè f{Œ\, ýIB R§Ñ)_Le p%ò̃>{’€dâzÅ/]ð¸àK³=w‰~oÌÃe—ËHZÆu]Ñw‹üáÖ°ç†%ê€Ár~ϵäT&ÞÝÃsiÑé&ïj,|DžØùœE‡Á$“µÁÉbØ8´Œf3êAË$  M,gäd\“Ó£rÔ^ûRª¡Òc gÆÁ3 (ØeJ5 ¾Üuƒ9¯®hK\>õ³¼æ×»ÎX:ˆoaíÌK¦ÌóÛÕ-Dp;2=0Ѱ(üãjÜŸ£'qoNF U,cúTžÂø?=õ‰•FLr®ö2†²ç.ÇŽqË8£Îú3ütòÄ)D¢ xÆ.˜jÀÇK`“¤{Ë2/ÀvïaÖs_‚@Gš1¡AJ^$hú¼i>032¢÷-]p®Czzzêêê.¾x<Šól33ޝDQš`j=tHæ0ÆÏ_»\¦QÙØ~øMÀÛô5Ÿ|Wç?5Vm{ðÙûŒ‰s¬OLž½€®ú(„ZLj¾Åè!qWií”)™hÁ¸[ìO$[çš7æqb´Uƒýøzý—ïïºñ{i—ÿ+ò•«*7Ù«‹[Šì©@ÎÄföýÔÙÏœÞeâòÐ6zQÕi‚Ÿ&­ÅÅ1«,‡ÌÀ°Š’0„—ÉFR¯:>Ð $ 5®9³£³á=þ¼ (³?ê1˜ÏèâZ0ÆÊhAT“U(5¨¬hÆVVšÄ‚~8!bÊ’zY!Sï•öÚÙ‡h\ÑÇ “c5äxî (¢oX糊ÒOŠë¿ReÈi;Ÿ\:qöŸ /ÊHfâu¡LÈ2ÓgpqNûÖ}#^¥¸2Jã(Åíp"X%•Æ9"ž76UŒ Ô9³0†íp{ÌJ1GË ú´³}oÒ¼Hç+É<“²…–QÍÈ$f]03„bHfŒ‡Bœ4’‰™J“-­~”o9Ï4éäi&Çê“x㮬ŠRÔŒÒØ!vúö<åQ$Ó*Gúƒd kñ,Ñ5F{‚hõ¬F2ÖÑÆ?S‚’F5ÚÕŒ£  Ùl"ÆNzÚÌ$¡SÒ›Q˜Ùþ|ã^géÖ^<—µó’Ëæý€»¨ll«~Pw~•tÓ—igàÊÄGn4Š~¡ï8pƒ5øy¤¾%Ãèl&vihEÏàÐo}tª™KÌß1Œ4˜Rž“ú–ΜVnaLðL'ú4Ò@ËHÎ$йqÕ;Œ¡I„AtfÑrìMJŽõ01‡èD÷E¤87ÕÑICùÇ‘ã9ÆÄWx&j:‘Ô’s×uÁ,l(f›&.LžÕ¿r4ƒÐA¾*#@ ÎîBù^—ê¯nõõW¬§CcÜß|§™ÑüYÝgoŽ&×Î[ÓºÚ>jÍϤ-g,ÏÄö.^dŒn™B~Æ‘2Èð ´L£Zá´+ìŸm\ÁgÉYBšclã…­±µÈ‰ji«œeÒ/—äIŒOFù&b†¶]%’'“ظ˜$ºM) ‡Ó‡xh™QˆÂÕ b"4z¨žVfšxÓÜQûwÈx9$'R´1Wædò¬ÏI9Åœ?HËŒãÇÈf6&ˆë÷!pE C7 n 3.¤1ÓEgµÆ@ËæÅÓ, ™&jIœJôŠÂ½P‰à.î%ª5™Ú›\w }`RŒ¢¹¬{',È.“Ÿ¸K,âÄEê!YèÒàçairB¹zâ½k˜ô «q±vôXÍÌ\ƒ_ÌSßM¢f´äÌ”Æ6ž)(QÔ7jZF‘%T¹Ì„1.¤1 ±3[òÏ9ÝH'È15ÿ=›)%;ÝŒ²0G’¹é Þ%ÒÙWÁÉü÷üøì_¿É9ÔH™¥38íìdÝÖóëÙX¿å!Ρ6*ø½$Ò¯Ò̘ê=¼ÝõSŠY°ã”ŠàU³KÙ>RÛ¢uÓÚÚ`fœ®p¬®…îâO¬ýÞÑS)wðÆû:"§F½Wê|‘íégð"•»w>·V:éÂþ@ÛÎâÑÁ#§¬îmî—¨ù´[3C^­¤¯r1•yð¬åô3zË3Åòm£s£ý˦DrQ3 U¥‡ãåëð‰sÅÄÓO6‘ø"²‹ÜuX<–0­¦KDâe"4zn@Ö­¤”Ð O‹YËs’1‰ `›¦hFA¸üîѸØ&-Ç [¥“'æ$åD’3 #ŒKlT3î½Á…`¶Èof IDATL<-–h¬6fÔ¤i¤Ærkg’™QͨïÍh„3. ó$ (U޾ÜuÄ303ð3™7Z)Eðå!ˆtQ6cýy\ FÈ™^ŸÌ80fê÷Å\<ØólWhëÃÛ¥ ‘¯ùÀ¾“ gùboKYºÄsa!Úl†®°¥±=»&íÔtËlì¼iEÎôÚ.R3æÓ ý>®OƒœieãüÖ\ä(WdÚ¨k`fØØ’^ÑK'¥3ä«q ï023Æ83ªa£© x&¢Ðá¬2ÍÉÄGx&®Þ eÚŒÌo†xF¬W2kRK…µZ˜P(£ñ@;5»Ù¸¾$¬×xàÑ(¥3ôð3ai¼%¡tEî|¯&¡Q ²Ô™œ\›ÄŠâã`yN®”ö:h–f‡Ú¿Q ç¢eÏØoeŠЋï‹n ÌCÈ*ûiúTGgvÏHÈ8¬ÑÎdÒtb(Ì£þ\cOtfÚg4;z!'ç¢àMãu"Go€˜9Þ H›1{JõèU•=®ŒÆ‰r+íEªÓ˜kÌ‘N÷‹UeãŽÔV*WζN gägƒÓó0ÖÇJÄa’3Ï„™‡®‘ŸQirÆrÆ…¯ )ZÈ'x†‘¾3Z΄œá¡ÉÃÁ3Ô®ŒšÖxx•Öà™x÷ú1é—ìJôZÔž‚ d‡Úv¥•Šš  QÓ ¢ÏÖäÆr”“%Ä&N4ñE KKëöÒÒ$Ø…–É!Z&&8kÇðïÃñ˃™~×ÚlF&Ó¥%[ cC¡&kà“6›yL°BË"Ñ­,¬)¾HN –FlCYÏ3C¾(mu\1[–vÐHL烉¤sÒ#uZáX#œNÒÆÃÉŒËöL¼Æ’Q´£‰ˆe\ÐâO;wY-úÌ)µÄ@¢<óØY™4­—‰F®?ñ…:u¨ØÿþØŒÆÁ3&O^·|oQ\óu(&31®té<Ö r6ÒjßÄÚ™—@膻‘s5ê®êW–m¼õ<*Oþù gÆe`6ŒSQ 1 ؆77Gß0¼l FÀÉðù"‰yÆÅ0 -J¶4¶ã†¨àªZ†q­âÉÙ8OiRúÍóž_nEF¦ÁŸ= ~6#“À³/·<8¹(øüàó¬é® QëØ9³xÆ»ˆ–33³Fþa;Z'9£ÙÌs'tb„³YŒ™ù¶™ 9;´zN½ê´Ž ÃÉUBË´ÅK‚üš ¤&dâ˜ÈÕJnÛƒ[¢`LôcôH%23:1Šck¹]³‚Á®Že”Xã™ZùE’žO¦Ykè¦AU¤qœ`¯h¤± uŒÈIËL¼Ÿˆqñ¬pê?#Ÿ×÷Eä¢äÄ."4’‰Èp®_{%0QµhÎS’Ø: ,yP?E«™ØÀÓRß§PI­çÔ‡€ÏäØÄ? y%ºD1H3Àá ’ FyÅNE$Óƒïq–÷Ó^û}D5æÓzéÐøŽ¢œ‡Cjv† ¦¿£ÍŒ´Œ)9Ê¢E Rç-•ÄÕ'ˆØ¤_H\“À´hÝIrÖXµÍ†Û?ÓθԙqB³ƒœ!Ç‹G_!3ƒ(AŸÀ»Ç[GѰ~J1rHEKʰ¡Ly!]A<¡‘¿Uh­Ì7–ØÞ/̬3?]|‹õS Nûé˜P6Éås†nÌOÿêÕ#7¤Î˺¶5ô‰=?ÿØBÑfo¼å¥–bP%3Cž[;r„…ŽÑ:-.ÎKÉ/ä„3ú4V”„i Èö ¤6%23j¢ÈÏŒãÖ(»43£èÔ>–Ë:äŒ9½)¯µÄ×e½È²ÛxBÑCŠUIcƒÜR¢f’I*¹‘¦\ÚæAY£ÜO xú2¼yü!宴߇KÉ1u‰:MÄ`f؃F²`ÍËÈûî4.¤Zðê5tÑžn®¢`rF7 QE"ü>|H®.bKذ7ZÎü yuÆ=D5ãÆ„$ŒÒ$ØƸÑä…É#¤˜Û4RÇxaŒÉ£³ñ$ÙòèHúÓö?ÿîÇ6ï>!5Gê[>õ¥¯ OÔmzx˜03æOÔÔ³R‹m ÄDÁHfݾTÒ„FkæÂÏ(ÓD²y’¬;a”ÊQ¬ãth|G³Ù3¡ýdfï›iY^ÀJêáöà٧ׯ€¬Ôj=s~'DΜigg¢Ñp[_rxONò¥Ú³yÓΧËf¬?ÊÆºWjþã°u¯'#ŒñÝ3ÇpFb8ºÔÐÜ‹Æ2¡‹ý€e‘£/ž´Ì8+1޹øþ{ô'ÁâÛTîàÑ‚×RæÞì›ÙTØxI Àiõ|âXî•{žxþ6{‡õÑ¿fïë˜ìÏF¦¬M±…*hŠ'-TjoÁ&¡ƒ(ª ¹"¯0Ö˜éZ5TÙ×H› -2{š#}afÆéåàgÄ303<"í#Ð¥qKÛGýH®£c$j|“x%’6¿\™&aÂ#jj{»­:±5¹lÍGr­"Ün15¹Íö·Ì¤ÉÌô’ŒÉÁ¢@ò€IkÏJÉ‹b ú/\ã߆’ŒŒ;~|_èäöYó—¥¹/$¾”™€%ÝUwÇ×?ýÊK/lß¶¥lñêììl¶ްñ@ÔÏyi91•(TjJŠ>j sbÊ=´Hñ 4õ G\¥£âP»4˜]Q˜Q\ùÖÞ·×\“æ¸\Á䤩ÁØÕѸµ«›\…·Ä»âýàŠÙôo¿´vþ|[JÕ@žÊð¿^ÛXÛÝ33;«'Í_sølgš¯4%Ú@¦±Œ‚¿«·`jAns˜´,o(Ò““Á.„΃ÁÈ7ã :A²±ƒMIîëé:üœH³ÄÄaº?=£>ugÞi_¤*§•yÒÐÐPgggiié8hå¿é¦›|çNÍÍÍã€YuM]Vf ·'L<˜åçgUU¼ÞØxòðQ‚ÙÑ+1…[O•Nþ2lyù²é3BgN÷µÕÏR3³ î{;N-^õ¥Pã뀽ÿÚù½—kFï_T<ØN)@ÈâíBÚâec/Ä‘Œ0†w ¬â;&÷ Òñ޽g¼qïõ]ÕõËKƒÀ³áþ¼‘h§ßF׿-MëhnéI 7šh4#¿ 5'ÿËŸkïùAúÈòÔ½Ee¿Ìè^™[LÀWPH0ëLŠfçlœ4¿Ùß <+Ú•‘טÝ1·Ö÷W4›‘ñ¥æÚ·3s€g@2à^¶j_Ç@QéÉ7O—Íšqi¥ÿ/ÇN™‚AP4BÚ©¦öÒüÌ´ÀX»¯Ÿ³Y90?}¶Ž¿09{«¦¾îhmKxú¤Ò+‹JúÛÒ9Cg˲r¬ãD$Å%ñŒ*ˆYSrZG,Ã(LNFŒ$þŸ÷Þ¶õ…gÐ`ÙìÜ·N·ßuןªžûcÕÉ®KV,FûoÝòëݧ^xè×oÖ÷  ~y÷Cº€ªgß“K×]†òæÝ'~{׃;ž¼§rźYy)OÔ…6ßÿ$ nó›Õ^Û¿lÅb`Ø÷>Rµ÷ЫÇ–dw¾´oç¾áꮆ¡úÐû–.€#†9 H†Ó̲#Ϩ_µxfwcû[5Í'FúÑ+Î&û Ü Ðð1†#QŽ/gt¨DŽ×Ù‘f¤¥°#E1NêëJé«y¹¿©þ\m€r‘þ¾Ërçú;ýÁ`ÉÂìLgI¹w³²²²qÐêoÍ(ësGÓhœå+¯½hq°²|â~ c¦Á–3 MOƒ™qu˜²ëGÝÿRÓ‡:ÚNÖm-Yzõ»:çø—Ûóð÷i5£(wiÒ ”b. Sg´è"o:pR×£˜8 KòÅZæIC½½ƒáîþŠõ\—’Wà_ÞœöÓæþä†í$„ÜeK“Ëçèö‘SI`fŒõ·aã:`UöêâÕo\páÁž5[2'ikxbH¼]ƒU­|M‘òMÈO.M´²Ô~eÙ$9§šßѶ}ï‘íoV×½RÓRŽM n®înZØßÞ}´ž–³ý­¥ø¬¼$iø ^·^p>kËܹÓ. Ó¾=N Nãð‰†Øg Ñ@<¹Ö.B4Ó×Q¶&7V½väû“Žs(Ê:­`ô˜©´cˆÇ«PœMÂ$n¯£¾ÝÌcQÓ÷‰ÚH£ìjr'E*‰6ò‰û¢XÑä/ë˜ÂÚj«_Áö£»Ù¼åé?¾ŒÍ¸–Nñc÷Tãz0ÒfÆ Ýñ±ëòŒ4Úf~&ŽÇ• ‡<ã:ÇV¤P^¹l9=ìqZq¸Ç!‹Òl¼…‚)s‹kb2=:qJ5=ÕÒ3Ò6T‘2E;”sÚNW”„ñ/Ö,šÆ¾Ššµ³WP­‡\Â…û‡Þ@?œ´œ~¦ø‚£r˳Ï}å³7\þ™o¿øÔ±Û^»!ÿößü9Ù¹{öþûÏsÕíçYµùk>¸?q9šÁð|nÁGPÓUý C.üËMŸ»ñ ÿÑ´ói­ùÄSåmlZ1ë®»¾Z´êJÞÒÕ奷ÝòEòñ•ëV|zÈÖ>R»jùêO}øÆÿ&¶¼Ó™ÿöÙÙ_œ3k8Ër;.ÈnmÿŽ{ˆq€÷T¿æµðéù+‚ë§XÑÁÎ7•†Ö2¦ÚcÕÞ’ ëºËèÜ`ÆMâ$ø^±™QD"oMΟ‚­½=\’™4õÅ_qQ℃w‹gmû>öäîDgýÆ' ³Ü)\OòÔŽ‡€pçq)jñê#õZ}l\'æ'p,ã¸&ÚõŽ]è%rÑ¢2ã@jØ Î8Kma-Ãûή=Ô=3æè•YTÌúÓ®¾8²äCø› 7äNJ¿¹3Õ.“Sœ¶Ò<È–Ã5GRÙ‘l/r4Íù{¢À3ßGÐkñ¢–œ²½ƒI'º1x­~ãsé—ð@ ;R²ítÈÔe×6WøiW£~WaC®˜¶ríÒ9¸“µ fô4…0Ю´Î ²‚}ñsÅìRȈ .˜×zìåæ]Çöò?öË'ö ࢨy¡;Ë €–AVŠ3ˆ :ì¸éëÐÃÆ1ȸAÏhz,©ÛM-Üvûý4)!×á©{Œb2 `´ƒ‰¶œiFÑ_Ž•fÚ¬¥QM.‘¸v¶QȪ#˜x°ªÉ ½í'Íge{øåê—[úå±àç}¿;zçíµßºã86Ô£Œ.ú«ûš!•ÞxöÚ0ä!““!o¨±ã ˆKŒœ¾º»¸dë®×÷ly¦ñ÷ï¯~ñ‰=½;íbÜ»¶íÁ瀚ÄÕ89Eìù¾XÈD^‚àTšòºLyFÂáý»"4ª=´×žöõ=l@WäœCfOE —/i}uÆ=‘èVü”øUl !ëÊ¡™3µdÊÌõþfP‡ÓE×ſ۹§ŠÈÉŽ Œ í˜ÁU/+œ@24eN[õ㧺 íÑ8Ÿ÷oþêó÷ÿH¯#ŠKàTsJ q`gûÞÝÂiq|k¦Z!` ûgûâ¹~Á­ÐÛ#_»ã÷xòø¸´ŒžÃÆ5Ëá#ÒE• ƒ×WZøÙ^û2þу?‡÷eœ¥Û‹‹#Ç’í:2€7¶Çålë2?+gÑ’²YS¬ƒ ¾t íbÔ(ÓgÇÄ09“à `Ò˜“ŽÆIï‰ØŒ˜xZFfñ <»òšk³g\ÆÐ&“é]E·â!¹íýx»¡ïõ#«V\ÌÇdLRÓÁ¥ìÝ|—¢Æ !XÆËƒÐ¶¹ Ù®Þ{à$9–q\Qèl#tÑ×Ã8cüD3´†¡y˜ð¬3ûÒôÜ,2Èk~ÝîÚMÃm}•ÃyŸøü幃7¢þƒ¡ÿw0ÿŸ„œÕﶈ^Roû×5Æ_¼hñÌ81>¯žÞQÕØêÚuô( äìtÍè:×Îù!XÄñLÒª‘Y(_)/8ÇM‚{|©™j¢•Ýu/`/†Ÿ¬Áûê<Ö $ÃÛ€üB%Á6zìgŽ~ Böþ­[°qÚ¿€Ø¸(èúh4ã“&__Tˆ7®Û©½0 Ù¹ÝþÈÉÖ·Ï.rS:FF“Šÿ$D-‘Æé•£5K“ùpšØyYSBˆ)Ïü°DWF‰$âñaaÅ4»bþ/þûÿ\¿È¸þ÷x\Ý/VU·úr»-êÌ+²†¥Ò}À*Ô`è ¦Â3à £?ïªÚ.NŒøš>¾: £ûuSz¦&%FƒŽ€@¼Ò ȉ&[åÞ;@Ì{ƺrOüCÂ’Ž‹/‰!뇖<Pˆ•5Ū7\½œhÄIc(O:>BŸûÈôKéôag€ /’ÑeQh™QA@Œ'l•“¬>£3œÞÃ?hݵÔú^/¸nyù2q¬]½é€L²$úhôp§àkÎÂÿ½á'÷^·Ê.К¾æ“×懷þøîOþÛ¯Ù’3Û„Ìár»þ€'á´¨Y´tÓŽ36ì8†k–}Yn¸ÂÇhüö> V–[æäò¤ä=±Àå²ÚßîT¹§ž=rÕìRÜ ¬y ÞÝ7?-®‹J(@orç! —£3¶à%±YÆ·Í1ŸL,ã.Á3Ž´£&j,ˆ£#sÍÏ åèÐøŽÔ…ÞŒ½Wb32©~žäŒ?!^ç—fo¼"îšþ·èAÎ ÜOÖm=ª›S<#·Ò HãZ=M/Ìõ#¶àø®ZeÙÛ©ðn¼¬eoµ®ãÅôã[yžG«¢Qr‰H`„/r?ÙŠ~Hók —ù‡®è쾡$À 5F-ó³­j·B¸#ÇvßãýäÖÚáÐÄûzfRK¥‡3I½xTzfªéfLdZøÚA˜<¡­<ž–úêZS ü¾¤0ý·Ei_ë-BŽÿ‹Êíégþ57 ôÔ8âã£×_ñŵ>Œ„þϵyWüã5¸†8÷l·<† `C®C6T5eãuà=rÞÅ’#`Ø9 ZvÑÁœyVéTÃnØ·Z‚Ž…Ÿ8ÕŒ xæ¿|?6 –G+#ž¡×NýgžLŽ6NïnánCå¯J%—73jeNÖcØÇ! µ`™@,RO½p×ââ<ð•O]1KkA§2‹–¯ÝO}™™Ë0žtÍ8°æƒ~õ£ï~ë†ÏÞñãûô2·ýÅöïÝô´Ùp• û‰kg¾¶åGho-Oçcä!‚¿oã·ïúÎWq6<ä¿<ðsYCŠQ0ÿšÿbkCèé?Ýú£ßýå–ïüü—Ø~t÷÷>‚ mðޤö¡Œj8ky¥Û¡8ÿŒÌ ïðŠ´ãDOœºãc“Ù2LT6z›5#!5€Û˜Þ‘ºPÈTdµ¯ØŒþï~÷»ÉçNã{3†{ìŽ4T?7«|¡/#»¿0##5;5©$¯b둾ÎÓíM$§úÓØÞ­K§dDGZZý©—]TÍÖÖôBV¢7G}©ýµ‘pÅúáóäÖ8ÔÙÖUyfYЮ(<ÃWÙ —•œBôž¦ŽÌâ|äøÙ—™ƒÂ‘ÙHN°!?PÓ†œÖé÷´õ ÇF¿ä8- i]o™‘ ¯±ºiYúàÉ´pãPO¶¹3“Í]^ßw*½+õêÕÁŽœHåñí§‹—Tôü}»]ã-ÒÞ:’‘½(9R”™ÎÊoÊ+÷Y)†>£´´©À—ÚÓkÞn˜ÙѶ×o–tûFrÓÓCošzMWS0'å­HQYF_ÚÛጜœ³©ëƒs¯:z²hòÔ–«­3ûÿä½ ”\Çu%¹ï{feUeíP(,…  ( )R”4Ô´dq’ð— IDATKòtËÒØíÓcÉÝ>n¯ÝídÙ=^dI¦Û‡–HI¤)Q¢H‚;Aì v€U¨µee­¹ï{ßø/3ð‘À »ûÌÄù'*~üȨ¿ÆûÞ‹÷ÎDg›¦KêÂ:«r>Uhê[ŒpÙT.Îê»ÚíKc Ɍ׬'–65õc£«=Ÿ ôµD¯ÍΕ ¹¸ÿxϺ/ÌLŸ_í3†BçV­ÊÇfÕ¾Àõ#=ܾnÝýc×W{&..«óß>1=3ÝêhìëîÈ)ŠjƒÎž/‘•°U*(fðF97<ˆTl>–Ä£.ž÷/}[ÑÑØúéÏÔu÷´ö®ïÎ.ç^=•ÞЭ!’¼Y히¤ø’>n¹¹¤Á^“É(lE¬<˜d:LúŽx‘i5r›Ã ™“¬Q¨úçPǔԘc’¢tåüä̼v•;Óæ²£3õ,L[Ù\²žJ%:e _¹¨À»4\èÞjÁ9\ØÃ]®ya×çtâ×µú–ß|ì“qo±»¯¯W•æR þik$ç÷³ÄÔI§mû†üákš…‹'ÕÆ&ð³ÞŽÞHÑ”ôj´‘B6gò¸ìZ§Éƒ èåô¶;â2¡DVä’Ãì¨ _Ê©¤Üv¹X²)æ†f6« E.‡œRñ™x«áË× Oú¦ýàæÈtiM›+œ¹ŒýÊÃÄÔ˜j‹·õ飦2›,ꦩOê9:‰•3¦F67RÌåŒ {õ.cKW+…ådÅ¨ÇØí¶;·íóèJ|Ù¨ÏA¦Œ±ÙØñèô»·é¤§ÙX.¥K<_(pDÁOîÛóñl™ßyà Ú´4º>ôñ{=zèþ­¨Á¡{ö$ºÃ FʪMý.Ôìàá]}ìâ_ ´ß¾}W;“ÚïÝDí©°¹Ù¼ýàãèmÿ¶õý›+;ìõ6Þž0¿Ú¼®×ç² Üæpðÿ¾kãþû·Þ³±ýc;°~-¼§ŸL"ïi¯ÇîÚ6÷ÖUVaT „v•vW9­ ôAeΕt]n@ZÊkY«3Ì«•½V °muIÕ¤Á­Iº¡< (aÊe[J$­úiQ™­¦°¶Üda$èr—Ýxf¢Y;ùê ¹H©Üm®'gqüZ3öôôÜ­î‚ÎL¤×Þ:Î$p˜Os@Î0IN>œw+¤¤ sœØµw^ÁÑQCjFíÕ¸‹ä,òzŒôa @@) ™%2i’ïó`Ü4 Ôe´$‰"©Ð¨Ì$%Út‘ÈYhÆÈufUmi¼…ÿï·^<ûz(º®¿Ýë-ͱæuëúÀ´.üðUï¿3{|o+‘3’49C¡Á¤Àr&äïßÖäÙ´c!¬OµÓlö+QÉèûü‘ù|Ñs %é‹b¦ŒYóŒ[ ŠöÓg@ÑŽ_Þ3“§«Ë—¯Q<_J<Œzíå`S—ÎHgÞ©.߇i/ʘ„.ϼ‚6£†R€¨r/aÂAžAh-¦œÖÞ>ò®DëÏäÎAÄÝ.›ÍôFÑKU“H9´÷ã^ ñ®ÕõøœPf’hÒ!=ûÎ5ü£?ûú$ ç¥Áé/~{ • M8JòIêG,»Ï#öâë—~ïürVe`ȱ‹ mä²JìbûúsÈYðHˆfhOÿN@09ùâ9ùá‰ài2‰mDʾtÃå^6±ž ï½<ÔOÁ¦r6®F ‰ž(Xâs‡ß|í/ÇÐz22Ü|P®D(ñlÙÚ:}š?²åEz·õ4ѺCZ F:3¹€5´Œv¹õ|×M‚‡L¾‹6¡Àw|}ǯÆ2‰¡óÆN+ñ°”ê;¸–•ÏšUÉ®ˆIºœ6>°j¼®›ÖÇRrÛ°ùÿä·>¿ï~y€øóJ y˼ÄQA¿äÊ­&S¥ühe±WÕ¢mDƒ•î9x{Ùz5”ýÉÊj0ñ«&ÙRxê¿Æ›IÍ‚3ùj3JDÑ„®®[&€ •Ô¤6Cùt:EŽ…’•Ëívá:D./´LD—³19'£7óΉÔìdfÿŒëÌò¥1³x2ÃÒk#þŽF§¹S邊“³5íýo/("cWù:*£µ˜ŠK}"g˜*†2Js‡Ç¨î F3DÎ ùbfÑŸQ a MLPÁëSfi®©qµjýj/ð­ë‰ ±±ˆG£ZJŠº€US׃àX¨Ô!ÇÑ’Ë‹UJQ€'ŒéÂjgsÊ`Ë—f®±r¶’a³i[<ªTFÀÌ ™¬³ùÔî}Џ9™T=°£LË·T2LsuÖBÛÖrQé‰Óûøhrq.…“ö ºRBzå›®9KÜš+5 Åë™y¹°TÐW¼3íkcñöNëig:SP5YlY“4EméÜSÚr`c,ajrí0Fâó:o§ùt2²©µ.X(É0j¨õZ"© ø–·˜öŽƒóÁúlø:¨ÛÄÀp[G>”І™+—.ìn6 Îû±éébG·ff4ÕÙ£˜âéÃ-.ßøÕ‘m‹kš×ülqzv½¯µdT‹àrZ|&惘ôõ¥¸¢Œd_N¤¨f՘΋¾ryq>=¾nûZ²ãÃԲɢ…/à.±YMV×Þ´-ýÞäbü­S(ÓS›^ž¹0¡Ó±ÅMD°ˆç¥“Ó'f‚þ#gr~œa.¯éØÐ¾õÂÙñó&Å{oÆææQéèrWž>;ŠnÑÒ_ìP £ú+GØÝ±Ó³záÕc NãßÉÏÉ-ò'S…ÞˆæœFû YGù5]HbÅìÏœBõz2´Þd$Cü¹Óe.в®eÜ„t¤%¼ZÒlÑûCWFUÞØðTÖ ö6ÛT]›:ÈsÕÌâø1 î?ÀyñÄ–­ xLfwk:4ÙÔê›~¿¢—J˜Ö%çZ -Z[ÖQ´ Z†òˆ;Tó‰_ã\€~±*-£„2mÖýÎEÝ ÀÉ<…Í“u/´¤5ÑÆð$ZrëMŸ6au®*• ŽîònžIÖF…µ'fÁÌô©FîâÎjÑøîiñ(-4&vB‡ÉÂb±€f>ýL®g«¹¨"D!Z&Úpv%Q.bfhpe&üWß!9ÓÚ±U4“çh† eúaM™º9Ä©Í~÷¹Gþf×îOPø!õ,~+¿¨Û%²÷N_Ì • e´ìŒòl¡–FHƸRC» ebõtãR ü ìÍ_ȋMñÑR%&[z‹ovf¾.võeZšuËSåRºê:³_ˆ™ÝyÙÝÑ™QÂÔþü»?”×`Žù…­m®îNÃ.…¹­—ã_+6öVW.G‚œq×PwÏ[£ÿÍ BFbF2#¤(õ¨Çü‘Ëmñ‰Š1CT ÀêQàešxª.°â&ÌbÈJ·ˆ‡E8z³ÈÍ›U޺ܠ?¦EŽð#뿌m‡×jõêÊ›jC-³*?£I}÷ÚmàgÙÇ8[í/{ÁÏÆ’S gØü³Ü¾±}J盾!¸ó( KŸ|¨Ôy(Ú·Ý·1†çøÙMF̘Ö{í»7õÒ$ää>syÜüøÔÂl §=wñÅ®†&ÿ}BÁ­ö%öù˜Y[è²O¡ ,&­BSÙüþ¡>LÆOŸ­È‡EP%ÊÅ4Ld™Äø‘£Ì ¡4gÆ©<‘RcÌ.‹cÁ±“\í‡y"БèÑW¾èùãÍü†7¶íûúèzêÿlÅv-¨Äƒ '",‰ç¡ÜŸ8t¿åÀÎ÷½;1šGe¯«Ôü轨œyñ(jðï€dk÷l{ü—úâczüpñÎ,þ5`õÝŸs‹Ó7«õ'_åÿ·òÂH¦"51\EÃE=½¸üÍ8ûÛ¹Ô„ŸË¥¿í¨ÀIâÝ»aW©º@¤íÁuè]BÎÍ@¤Pyø"pV;¶î$¯Á´8œ†h1åc:86gÆsT¨Ï¢Œ‡Hü š"¿³j`ð*ZDO•( ïõL´¥&}"ÞÏ$o#Lr·xÍð$€UJÅ>ò¡E©]»ˆ—ßêå=ȳ*3¦Œ˜`ᳺaýºiè”xñ6—òTóürêìtßÚÓ£ 5ŪäìéïýGðWÒº­D2Vex5dK­I¨¼XJjóÙÇü¥Ïÿß5¿º¡º“-!¸]·Âk Øñ‘÷ØÍT e`Ù7’gdd0BnYÕÓ^'rÝǪAÙ ‹Gyj32¹±ä øw]göQã™ÉS>¼<{ÑúöÏ^XÓdÁ 3—äŸâ}{¶‘‚´&ªò/šhMÉÕ‹‡‹¡¼iãAQOÞ‡ñ•:{û(ýËS>²L¥€dÀ0àÖagÕ@ªDÁXä¾vÐŒrZ“Ø0²ð|ÆÈ©.ðS²šE=árFÉ Ò ™;S¦ˆ0¸ÆS‡¿Ák}GÅ.kÍÎ{»¾°óÁLåË_³©@d(ÍÎò5Ot«)ž½_}x¶\çžíHª×++œüW{†¦ðÚÑJ5‘‚À³qsŸ<Ö«†O¬8‘ w*F·ß»uÏC÷‘˜gÀ£5À9<‹²z-†'[·ë™7Þ]<ýò¤s·Ñ’$]d1ª¾öƒ—#ƒêhżS8odÒ÷€C|$d"‹\ˆyA‚ b œ¢ýs‡ßÄöÂÓ¯Eè ÜÕŸ¨à‹}dMËo?ÑNÂï?7A8 L¹zi@pÃáá(òŽF+~èRu¹€s¨Ü¾Ûøèý¨,}zÿ·õ8º®¿]~»ðÁ J¿ñ½ÿî?Œ|ñÛ•k\¹2Œ$‡dB§ <#s¯zêÉBÒ ‡UÅMô:ñö(7®V'Îîto¤ƒäÔ(‚ÑíǧÊdÑ СëªóîVsij%¹xNiÛ Ã³ÃÆ$¹.jÈ6|´ÝX0+Ć´«Yýû´É/ü§.¤%ø¤DxNF3ámX?L3<² †‘ÁˆÜï>Á'ÉɘIÕÞ˜ûz öƒŸ½ö£?û¿¿wøD‡j€¹X?›þƒÿßølgŸýÏhƒØT¶a×– £+¹ ‰_÷¨[}>'PÄ.Å£'¸â¹„F8ôz(Jçpþ|ñ{ÿùWòô_?{z†#PIƒå’YôÏX¥CqæÔ3rú§ìfx£ò“§޾{û#zÀ™È×±a—àJää®O¬c9X ›)òtEõ(àµÂÉW‚ÖHɹƚŸË«ëîh1û­ïŒV\ÌxcÇ;{ $fa< ¤ç';:{\Ü@À¢Ux šîvÛƒéèä¥í IQV”Je¥2bóÞç`Š`4CÞ­Xq©”Í¥—–r½[”Áiáÿé£$œg¦n“®£YµÄ︦¼@ صŸ=›³sÚAH¦‹pÆva¼ÍcâÃ.èØ6å<™xpq"åå†tò*ò|àRIËIdXu¡£ÜÍÍv$›ýÚuh²˜ËáÇòÅÍžµíMÉkî¡ÁÛš<5ÔU˜Ì¶N.±úöVë˜%V…VÛ˜ÜR°:Š¥b‘·d’®%”gت‘=H$¬4&ã)“5º¼ìÙÍÏ9n(ZÒÍó¦éÖ›žHº^á2®É©Ó†R#¨S›å ,ÁQ$¬Ì °mRÛi_#o Èg§ùî=v®VtZrk··[µYŒ•ºD8½z‹ÅÓ…é­Fñ¹qm¼Ù”KfL¨·Ö¿¾Óð±Ç^~3Vjjn!I#:A^Èä°û¬éSü^) 79<µ±Ü‹Åöp¦dT]XïkU:\Ü¡3ÕµúFëò‹ï|iß¶WO\R+»û7¹Hüxnrîçï*CÇâ‘I~címº-/5˜ój[“Z1›»ÞÓÔÈÁIg°¿xíý÷Þµ¾»µnx|~qzvÖãÞÞæÍ›Õ÷µ5Ô™”Z³…c'†Ž¾tdèʨrbh±îûûô—'ÒøŸÞºþïŽÆþ®åte’{`»µì1ÊÝP±ª{*TÎ*•ŸÒÞ,T ¨ØoZoƒAûí´äé*^™Ç¼z*ÝRŸ³éÔeåáwïëë=yeøÚìÔÉ…6¦œQµoË^¿vúxXÑð© p gê¸Ù25ö©s»P0,‡RÑ\›%__ïÁ#s¨’£ç'ËÅåx`ÄÞ¡UèÛPCÒÅŠ˜Q0’3&Ó„ ¹biù(6ò¦F5ÖýÎpò8ò¹¿ ZæßS¶=Tš¹f°¸IÀˆ—§31°lþ?zësÃs?7Z·¤âç6˳Wd5¡AA>ù#£J ÞmÎÆÊ{öt·è‡Ž?7râÈôbØ™šÊè ýo_œx~pÙ…<£mï°stYå´’üÐjÓ<öðÃæl²}ÿê¯|ñ€ ‹§NÿÍ·þüÜÀ+#o¼ÛãvΨWžüý‘+—ÝÅûþü}{7_™ ç»_S½ûÖ±³/ïÚý ü䥷Ÿzö¹KÓžzõïž~ìÿìÿÁß]˜ž¸øÊ™“ï=yé­yüä©'ÿÛ»§ž|ñ²»om“íùŸÿ nr0[X:¾ÊìqøZ~þÒ_¹üý+—ß:t/_( ûÁÿûŒ|bêò[½›v¡}[ž¸<0ìÜh'¦®jŽÄéc:Ÿ‰d‡ŠÉµõÜ!ÈÛµŠRâÄÜ*Y«ÃUâ^EÂñìÌbl \c5¾6=§Ë{ÌÆ ’«D:kÏ—H¼r¯ÕTÓ8r©cT£Ba@Q"a£:âs²G*“IòxR<—Eï fÔX¬:WÖ˜YåÉ€™}@ MMMw@«ê›Qføê”¹3K~ýf>ILä™^]ž Í#ÇÇÜk[wrq¡l5;ìmYK8éU›4ÚH:Ï…,ª,+—ï–w+]zÙÕXІœ«¦'$‘`ø'F÷½0‘Zú´ËøƒÆ¢Šc˜) Ì–½êYä±Ê ˜/—4[øT¥ÜèÂx¯ÌpˆêiW›mÒ•'K ÝÅ%\BbaQßë=°¶2Ë6ªÔNʵgÕ@~w;älÆ^ìV™|NWoMë‹Æíê !cøÑú@Üö¦úºY;#e±9¬ú+ÉìO5yÀ© ß(©¶ÉÖ}Ž{ °ík÷â.¥˜Í¦ÖÄãálGsÐâÔmnèȵ×;7îBw)0Tp#?µhÙޒă O—s.W!1jh@ŽGÔûØÜˆ»× þÊ “«*yÀ጑I¨V²)ä´Œ` [Ûš¯G–ÞD%ŒrB2ä“u/دŸqù†Cø§€±°¶ÛT:‚·b6µ —I˜ñžƒV¼E3I~š4s¬ê’‘À •yS.z}ïO8,ºm=[uÞÍoáW~ó¶t¯åÙÙïƒ»Š»|$5Ê{×K„.ŠzL_>Ÿ1îíér£rÞ?;0§ýË?øÝŒkýàå·?yàÞµ|ò­ã'ÿð»ßûÄþõhðÍï½ø¹Ï|ùû̧Éޑë/¬ëê¿:bÕ—þè«ÿéžG?³Ê\zögOýêCûÞ<üÜßý×ÿöô?|ë‘O~ªcÍf^oš?™œÝ¾e¶ÙåÙ'|øW>û«õM>ô ÄÚÒ±÷ôdöàvnöæ÷¿ûo>óËO|¬ÿäÕ:¿%½ÕmøÙás¿ÿŸ?xOÿ ¯ü!(áYeŒR”_˜Ùåsg²E]ØÜî+¾úö¿Ú·col6l/ƒ±¾©GÖµzæ©¡ùnŸc8s«ÕZÉ‚‘IôËbÔOƓ뼮”×bΕš4šø\•(P¨a #'ccáY_^&WX߈'5“…ô™¯¯]?´5㿜ÎL¤ÁKg–®`x%ÑPªXx°sÙÒú±„ôv)éŸB$ÍßÚ¹´,<‰&hÍpŽ/Ó¾K)9=½¼#ÿ ÌÿžÁ4ñ­Ð©ßÄ¡k‹•õ.(Ì_ß„ñ‹–ȬӡCúpÅ$33ÞTÒgð‚êB‹™ÛýSîlNÌ[£¾âl™Gº*¨·^<;èư‰SZ³óÞú:Ùsæ&p2z²Þs8‘pÛ±íèï£õÔËu>àêíW¾{z!fåîd4ÁÜÊXÉ$oŒÔ+kdÙÑ0Òaà#ÝI[è2¹oèTŒÊ›QPoѱljaníò$Y3«·’ÔkÙJΓÀv÷l£“f•uÙBøþ­É¹ e/Åd ‘#Ò36R^²ª¨ð©ÿ>rõÒÄK#~lØmlÛ§lsãÑ\ *I@rB Ù¾FïD+ç7x^¸uàaQË}x¾$xñÕ¾ø¯{øöW¼Ç‚d yÛÂ7LHÖë*¡å—vö¡€®v¤(°ªT§·îÜÖ-2ûús5w›¼v±ªÔõz(ú9e…o8tÂŒóûs7ý 7gížmÝ­nºK›îEyûÎݸ:ät3WÎbÃi WÂ;ë⸇"–‘ 9h»v±ÅmÚ~ïV¥m¯ˆÈÊd!¤EÄ2&óVE H–ú/ØHÌ89øÛL¢e"'$£<Ùþë˳ߡ=nî#ŸXøï81gãjÂI‚Ѳj\á ľtNX]ÒÊ\F19%±³<Ú§CSjù¹ža2å ¡M—.ßÇ”G+~74›I.×þäÚ»ä˜CåÔT^iåQ²ém2ñõeõÚ|ã*¾dHrT ÎôãoþîÂ埗+ÁŠÉro8 ´¡ó¹rN ›3ãBPo‡ŠÂûdI†Áôùé>{êèÀ³ÅPþ蕾!='7kÎfzcn±‹Sª !Mj3ªÄë:Œ’q#Y9Џ0b͵<Éל‘+,Vµi<¤5ý“`j¬?`¤é Š͇ùÜMk¶¿8ü­W^'Ee&™$¬ÛxˆBÃ|h<ã–ýfK>ºz‘?iñ6#™Zºs˳<æÙÝ3)ž|¶øú†…ž¿D­ò|sxé·£ŒÑ0Œ,P1~ Ÿ 4 Ê-SÕÑbS~>Òœì(n¾®: ózKÈÉ„šI¶ À³Æº‡ ƒÏ>U¼iU/&îßÛ_7Žá“t¤b!§VwNÀ3ïW'<Ãîš íà·Ó1]僌An©?#<ÃÛFZ4Œhðíq})h'¡ùl11¤Ýˆy¶ ùë“V‚4À›pÓÀª!Ðhc’§àÐë½P¨6V!ËÕé;|âÐý°™b{ÿØ{¸™{?î-M.ãÑàYȵÖgާž<5ð§–ð¤0çñTY5t€*84ÿÿzvìäu|Þ"F6Y·P‰ÏøÏ¾>I_/úùü'úPáxS§*ºÅ ó‡o<õÔðOåõ¬ê›Jî.„œ›\‰0p2E¢²á3Ê+n;ÉÝ->ÒÓTó”ÅM«„B•4U8mÜp*ã)*ÆhAPA3äx‚4°’Ñu+_ D+—åFcÒPC:fZÐâßCHLN=ðþ`K8éµ)•à¨RQ™úÑŠˆ4M&ûŒÇšàÿ=—ˆ3| .ŠÀÜŽŒò)Øtl6æOrc¼u„4ªÜKÀù"PÁMÆ!L¶üÕy]²˜N žnløgÒó¯}gç¡_æ-J÷â¡Þ(ïHÓBiœÞÂP0öɇþõŽm÷âI…†Û¸VÄ¿žÌVƒŠ)´hF?ß±ƒ}÷:Ž.½wÏ™lÙ5¥ÐÍæ8sÌx,\§£ ®}Tû0)ÌoÀ$ /†‡° ”«æå–V4ߢ2L(ÌðɶžÑgR˜Fn‹/ÿÄä lî0ÔçS)iº<û#MÿóêÌÌ&c"™®*Œ¾H6[ʤæS¦TMNܳ¡Ýhå¶•¶ÓªQ5ÇÏI/q Óíèç?™J’„!OÕymFm1>WÈæHs–YšÃQSƒ…ÑóÊTLÅ=NMz~“>71[ø†­D¸eÑ *=®ò?ÆJœ-á|°ØPoªÛEâDäAm£:îßÞÜT2¶|C¤5Óø“Š~ƒzX›FÞlf)gºGÙ3o--a¥²8rùºí¾CMVú_¥’¶¬Ñ¡M'¦\fW‘/š™˜²SYò48š/WP'òj°¡Lú3]³9çOvô·_?Âz:’Öw0§(–‹Š¸-'¿üyc(g I#r.]´)…°‘bM9TIr²î*TæÎä»¶®)À}êÛµWÓÁfSNî¬Ý™â’(¥¾›p±Ï$·ªt‘|í—Œ*—݈añl$ííHô¤Ïð º2Í"Ú¬÷µæÚë#ë:Üå®í»…L.ób¿x IDATi5èØb2²¯ác™·Þ±ÆÕpúÜÛ‹Ó³xˆ]÷÷飚ÅFguí<` Ûâ3Íão½zâÒÀØu´\¿QGKA©rèÊ(¯m-Qå¹Ó¯¼<Ö_ä:¨ßÞ¡xk B¦noÛÒo=öþc<œÅ!ð<²c&÷öäç¾ÆÛý¬Ry¦X|£¤ÂöT!ýâ•ùH½È’~‚¼àãÂi½*Ý"Â0Ü4 W}Q\MA^@}ìÊ}fË$I/f¯º n—??©íì°ùCLEC¹á¨c;v…’ŒÉB½P2¶ÍÆL¡rÊ©$ébå‘I0F’F&©ÐŒÅ¯pÁÆøž…ÎcÎ ƒ9\1æ,é•ü I$01R˜-xaðž¤íõ&R¶ -ÖecЊÓ[ík:3¢ä,¿˜Ë¥;÷;Ü&– n~p-—nñÚ†®_ûÑó?P–X³¾½½»ã¡ÛÖoÜæ³Uf½ÀŒt‰oK©Òoÿê&†g†^{çµW¶|Ü“9wu9¶}˶ì‚YÄo?ã/o~ð±’´¼z]Wÿ;oGÿk÷ÿúgw6 f0˜(g&º:úÑ-`æÈØDÓÚíÃc?ü܇_:³ôoíš­{îÙ?zdGÏ…«-]ݳÆÑÐ?tøOŸ}á' sx9.„ ógp’(×µm=ùÎ÷þÚàã÷ôHªâ©é3½›vé¥×¯Ž<¶£—Î_¤ÃfÖoÚö@_ÝÚ&Ûzgû‰ÙeŸæhÞwæÝðÆNŸËâÑ•ÌjÝ.«³ì‘u­:Êm5^[Ö¨yä >PùÑ劤<Ã.,åµÔ«¸Œ‘ThBaF9“|È96 z[H¤SøŒ'©@ 2xövÌŒtf÷éZ³ÆŒÇ¦¸[:3ÅÌÌÌí~444d6›M¦[Ä´E:yq€9},4K$qtjä̺lä&ýS®¾¾žü–X@}åêðoýô’ÿÍq;–\æõÓ(¸HXýž_ÕE‹O½A„/¹¸€zP4P·ÝyMBo¥þã¢)!(·…3D 1C©jq›cÈQ#rR³Ï˜@ËÀÀ^˜ÝcÞ„v1¥Â¸#jÈÊ|ýØòÖóõ¿ý‡Ç[nZ#ItíTHýz(:Û’ 1ãÇTyLÄQâÄB‹Æ$ÅòÓ—J?傸©…AW4²þË£ê8"Nƒ‡ÏX]¿’ç´åÎ=‡‚màLM€sŠÛIjÌjÁÏ€j"Ê¢(€¨! _ÕxgB0&É]/¬He§]y™Ü󰪉0v…ço:D®zD%~K=•U]•™#¨Xc§uïC‡ÄÕHQ$V‰’Ö ðö•/VP%ɢܑëƒkŸ}ç¥øµ3YTÊï¤Ü²‘~BëîEp¹‡…¯BLu“bØËÙÁÄêJrÂôåË¢)ì¸Ø®k8Árª! ¹p¨mšøˆ½ Ä™(eSxÄIÊÓJ0NÑ2]ûv·íoìUqßcë‘ ZVæ”äå;$ÑÌYýøäýÔT®l@bÌ[þªæLî|tåÉÔ\Î-S'[)›<7’}¦HÂdx†[Š]2òF¡¨åVµl”Û7âs#I gާæúµÛ Å<8§Ý‰ñm£G¯q¸»Ì!_憎gcßí.*™LNMMíÚµëþ‘â™åK%³²fÆ @ð$¢a0³ÓÉâR&ŽÆ·¯j1·uŸO/,–::êÍŠÕWÆŽ2ÙR©|g'wNä Ü¥mÝ#YK8vý}•–Ïvµ&38™Bcæß-3ôã‘Þ2}*€ ¬?kPërNäúL9Å%<ïœVíñªgo ™dô¿[„Œ ùP1 RéÑê”>(x¤“G…„!ÑÓìmF•"—ž3…Ȇ [œ:Ùð!ѯfCiZml)X“Š13½ºLÔx˜`f• ‘ø™×ëu6/]?³Ö4,^òu–ìMW’H¥9K ?Ã.øæøÙº¦tQG–òˆ¥‰è˜à?A°(®#¦áÆcV<ý‘P4 j3î]4ì ¢&ðŒÜ/Un¤T¦ Ÿ`!Ø*·¢í“UCP 3Hˆ´a—*‰Çh}vP4ZÝ©tò!ÀÆsüâ5aˆ”ø§ŸêÑþò½ÞúµZâRLZ%Š_Ú· •¢Uîßã³5©QFç Y=›üW".%ôÆÓ¹9S®PŒN›®NžÓåÓ=´/…1%"fF·9}ª 7ÜŸÔ ÒLϬËiòD5} ÙL2Xe’´ 1£xˆ(sqîÌl9·9Vj4;或¡îßËùc’+’ÊÙПÃ]­†/Ïiÿ„,âú ˜™Bцfëâ§úÆÀ©W‚²£@ÆA”€a-’÷±hšì‰–alÁ÷^ï]f}ý;Míõ˜4ÍåDVc Ëâ.ø¶ˆ„‰2Ñ”åկܥ_alЮü·¢re™~nW—¨^üŠ ¢(×ü#ù¿ vËËaŒÕÐ5&†P “¯¿¾Ñ@ ìÉÔ| µ¨4ç*e¢kØEøÙ=’¡ô‹?ŽjNÌŒ± ÛcÒg8;ÏùOÝΠ•7íhS˜…5#äìf<3F­œ>’x’Òu¯¢ž/™²;Á“~÷ïŸU$×±£ÏâÐÇv¨<ò5m5Zñ‡SžU >—9ùÓ¯FG+°_ñ¦/‘6±‚ᮤàè8Ñ2 ™¢ð>æ† dø®‹N`f¢=Ù}Pê` ¢eLŠéεñRΪ:‘Š¡J¼8&¹€ÂÜÓTç}ûù—þè¯ÿºFyF4ëóÖ!»>Èd“(²÷«£`Ùé?;¸ðÃÓ ±…%N€&ø5Ê3VÕŸ1 HyFÚ¡V)ÏÏ‘ÞEØ 0™ M$ ©Þ†#Âô€I¼»ÄÌ™`UÚJu[¡QcÕ5jò•j5n±äË9E¬/Ú0©¯úö7y„/íæ´Ü‰8Í@©F¡šA•‹­2­šU¥ò€r7Ê+{íåç¹’„Q¢ÅÝx…ˆ¡Ê{ôvQ"$#NL·Ô™$F.ŒéQ’•Á•…H"Àh#—fLRVÕw\ÀZFÌŒ §‚“QNŽZsE·ï+ä¶ŠI:3gãêC¥èJîE‰ž»xúd”/§e5íñ±+m{q¥ä)jtÈW1‹äÔÔü”)ô±Ü’É›Õôp;zw‡²¼·•g"ߎ™­L¤½“3ÎÛuNI¬¶·Å– SNžˆWúÊb´ü¼š‹w eT"GY¹©Æ¨©7æ¦EwH¯Ìœù_NgÆMóÓü´†Šye±t2 %в"½´´zC¿›%^¹šÜ·ºu­×ä¶«^>v4 3i€þp䌼£¥&‘‰pGPJ¥$‘Ló9u³8ïÊ‚3&Ac!’h¾T,êj1—3¦F"gØÀÉnq2¢eÜ"_âdÎ&z ZTÀ½–rY¢b”“žƒ_Q“ ¨÷©ŠÓ¥‡J]H» ©™éщ…†{vwZÀºÄYÛ +¥’Ê’­Us6†AÎj˜™H ülѵ3e“˵O?Vö^˻텼±œ^NÔë3Iæ0m,ÀÏ£cag(š< 5Q4.lÔv¶….+Ì–HÑ„¹¿¼¢hOWùøØZÔ>"XQ0 ÁÒ*]·äLе ³`wÑhÚ#"pâÿE‹Ø€ b¤sZH¤L†HÑ’n]»ÁÞ`B 1!AéÛ£C¤¸¢õ4d ,Âò2I@–Êr—¬´+*©±(‡IÐE5‚{É ™< %"ã‚©ÇðRad§éʸ{A%·ÈÃ]Å=„lY}ŒT¬œ3be"–Åø4¸W>XÔoѧàE¢ µpZæ¶J6þ:'“/Ž&µ)Éîop(—{—g¿“I˜])ÛƒÅÝo˜`#Ê&}žÃ_!›Œ«.–ìºDx&ýÚljU2ö<¨mr_VÊX™tÒlŽ;Ò-KúºÖÕí¶H^¬,.³œ–QNƒ;‘!Á䬈ÉH•À††$Žª¯jˆzy›š]y·¢ùQy·”ä»5ˆë’ÓM9W“'p N­OÆswY®šBÎQÍhžÕåcK…›Ì¡‰™‰œP …E‰Ø)ØX•œ­LeSN1—ŸdogObÆ»®3ûHñÌn$'WW’i,Åx%zõ÷¯n\»3Á¿xæ©ñXÌ`íÖÏí2µµxþ‹&tžôWæãÜQ‘3«‹S·æm¤æ¿0IXZ*Vc_NFFùdŽ_±¿—¼3„fŒÄɘDËXuâLƒŽ˜S“§]1¹f’]Öîžm›ÊÖí*õ5ÏÿÉ¿{m¶Ìn•v: SåI=FŒ­†ÆÕ$j‰§Ð°z9Ê¢´ÃkýûAÕ™ãü©%’ÄÏä,m¶%¡Ýò“EÒtÉ=ƒPÈ`P4²u$ë8¶‚¢P\ã1åŸÑ.“¬×oBÍ#,ñ(Œ %ʸWd¸,’œ¨±ªŽÝ†® Ƥcënuï}èR «ê·È ýJXËû!UœˆöD,Š4Dûä_¬ê4A´—Ljmj4mòk¤»QsùDň¿ í#XÙ.âVë‡ñ°Í™ÁrÞ ˜ðhüù-ñŵÈWQ‡9mMšsÈpT Z&÷÷QÃÆ„¶,¥úΙSǹo-Ɉ÷̹³@µÈé¿9;jÿCþšÿüX65–p¾©ÝOc^rœhN90Œ,AˈÉM?Ä%·¸M^o©KÓ(‚X mcµ|å–Š®š·lVÓ›H·äj5IÔß’iÉXÓàv±æÜäý¬äjòDëÀ\É­ mÀ0Ô €yÀŒ‚Ïnþ—ir F0F*I²ld+låIx3aUãRvGëü»Ïì#éÌÄ¢i3Ks×t2† »Ê`œž[.åó 5 G‰àôêµk›š=:9ÝéíXßh…‡Î\º :E >àeÜúÚ²i0'îÅX£ÑÙ;Yq)ŸÉ¢Ïm-yˤ2˜ók£]âd6äø®¢©¼Í¨­hËÊ DËÒÉ«‚™1ÉééÉPªb¤¢MèŠ:‹7ÓÎÔKk»b~äÔé£õÛöÚnRž ™¨aUÒ¶’™“‰”;ܺŒÖUn3”‡–º “ÁÁ×£=¬A™.G݉ÒI£n‹Î^c·åÀÏâžÖôÄ ¸‘3d d´ë°)I‘ÆÍM¢h¤¤¡~ˆ¢"Q3,‡fÜ»Z¬Ë¤9#[G49*=A.Æ3c#ëG&àEßj6÷:rAÔ˜dÜHä,œ6ʹÝjVå7¬JÚˆ~ѹ‰VÕÀQ}ÖŠxžØ­i&÷cB,P-*×ôv;•˜8Ûá¥0^£ ârf†7J®$t 4±fÜöÓ#9[âD ¸¯¨%j¶ØhU°€U:Ó"ÊèŸryÒÞÁÜ‚‘ÉlñAŶ‹Üþd“6gm‘F*:åTuåëfTÙVä]e^&yýÀ›€S™Õ¾¶á¹Ÿ·˜éq3IUH›RÍž-Î…M—ª«³­©Å^¯°(TV§‘h™Ð?Qª!^”VÒ9ýªac5‡ä=ˆ$/¯äpòB Ï»]ƒÛõpKåÜJ —[ò3"gœ³jµ1µIŸÏ€“Éc6`BK9 -F“º(ðx:™2r²AyNâ' eLZQ`µT§\U|ÕB¥øÿt90|Ëž/šÎ¤?f[}wufw'žY`1lq×i"ááĦòù½b.™/%9¨°báÊ’sg»ˆœYßÞ\ÐÔ¿4™P'¨ÊâüÆ ``ôÂ3òtrVHÍ(ÊŠ»eÍHI¡18Ì]LZÙFFL‚4äÓª=ú܉âÍcù†óªÈ|Ì‚ªÂR.K2F˜ä0Æ$)ó².…!rQ[¦Êú¢zÆHæCð­l06;·ÏXºX•–Qº%˜Éw©\PiMWÚ«žÍƒ¾õ÷v• ÿ8UÞÜ¢¸<·¸d±ÏjäÀ3g΢K6fÔaƒ>ªé³§e=÷!Y wÄ QÇvûÒØ w!RŽÆÅøL\² !ß«|Œî‡'/f¯ƒÖÙLVH ØXτҙ:N†\]nE® xCAl4i³qÏÉÕÈJ™dMÂIQ¨<Ðjùv V¶\)3¼C"ÊN§‡‚("Ç+„;0ç:¼Q`Bþ¤.{~a®k ¶­]œucvŤµ"@ åì@ s…¾mC扈EAX˜C 2ý@N'#0²*†ŒyÆŠþᯥý;—“žä<€Éä|Àm  U+îÍY Á]:£S­Q6éŒv-±¥ížW“:Sê<„‡HmÈ4ŸU½gÕÈÍ÷<г£ÇÚÌM?œ†º| `Ö -ÕÀ cµ°ÁVÈW¶Y)ý»eŸ·Lw8t»ÞþÉŸ×d ÖÈQÖBZuô&r®¦OÆ8cSkl@2"g3a‡1p2äTpcÆCô†Y\fà•žQ†‡‚PÍ•qMÇ"ÃÉ^¯fxç¦ùv'¹³òàíJ|m\âõã™}$ÙµñŠ‡ãª»ÛÒè3ãåîÙ”;½ì¨à2r©@Ý&¯.9q¤£½}G[‹6ìøq ל}(噼=‡L•TÏè(dã 2•¼‹äŒG®éß#`L$вld„ =Ôܳ†Ë5Ï‘¬¸)Þ™m0ç’­1[1èt·º1q x»Q ©À0—•û€¡Ü­V×…íTîv˜ÔYÖâòÅlàõFgí>gcccþL¾K5zõ-Ä’DÎECÎgzÝhül\ݾC¯Ÿ ¥œ“×1™*d-ÅSb»¦dŒ÷ <µn±G0iÇɲ‘ÄPiB@C'ð 9…sŒuXÄÏ0Cg’‘€‘V]ιz2:w«, ÝRÎ&Fئ§2 sʶA,PCN`Fª5Â6aÖ/Ö«U/»B݈±ÉIA«Ò •y cI¸ÝºeAª~¡$×ù·ðžˆÀ ¯Ð5Ó¡1õäò3³©UÆÛìá‹çf;\Æ -}Úm:YÖó2r“ãre¶Ü®]ļ·ÅØÄ ¼™LRñÔ¸ÅV"Á S%J'…Í­sÎÌg–‹ÜˆqQ¿X’7˜sòð.”ŒÅ¯DÝ€d}™oäÒYEÐé6jXɧ³ñ)ÈÆzþcw‡â ±·µ½7©n±z0ûž±äÖ”lK >ÁïÕ‚Ì‚¼.]ÊTÖB’1Ɉ‘Œì™´¹®µ_€³]ác.Æâ³úF+AîŸ5Ýîß}¸Ó¸¥Ží–†JÒ¢ xËÄN“VäŠ\ü 9° 96 ‘3lQ££NâüLŸ…‹‚œQßjÆQ (a˜€7^)•aTÀQEJ{!lN¿“YôßÌTzƒ³ÿ%|3R<3Zd_^\Ó]—ŽÆ"Š5ÙH*“^Z¢èÒ¹ðÂbn£§éáÀõ#…ÈÜþûØ­¶Ãçéåa ž`Z"q{T\ï®/—ÜL¿\Ƽ‹bF$‹*kRÔ s|JÑTHv5»`†œ;–ÜVé‚ÍrZFv46ÉË1—RsWi°uʨ±iù™€ , íñóÉXƒÁ¦žGÇß:7¨_·kÃm#,¤Š03¹PñÆUT1¬ÕJf×4[J7•ªÁX¼=¤ÌœÓ€ ‹|ni]D}|ýÕ®§ý $u^IØH BêȪ $SG‹ªl+†f Ü ¯ÍíÆ >Y8=Ò€‘ç’úuA¥d…K#µ:dÕx>÷úœ1*™¤ AòmB2IOva„‚r¦h‰ù‡XÄ}KÙæí¤Te'Ð"¾uA÷  +_ž™ù°Zw¼Ø5c M¬îYÖŽW®³ô)µåü=^îrÜ=Ü7ä5Ö7HÜ¢³ƒ‚øT–XHKàd‰[HfbþDj9715‹ïàÌȈq囦)o±_?ÓXTáY·*B®ìu·!ãT„œÞv’(ÒjBOY?˜õÀ•Q”±¡`†™Çbä=<7K ³ÌH¨[2ý  Ò•ÿ47Bù eëêvÛZÔk¬ðð 0 ""·Kÿ’Hv‡÷QNã–ìð–K¨Ð%\zÒýáä –à»È]\Ø(9ì&<[ZÌÛ eÀÏ&.rÌ(IÆ*Æ­Š^ÃæÊ9Ê™„sLâgØ?ªa‹Odf†^ãy·3P€UÝ`R3»+¾ï‚Î   fVž-{6‚œ][ %´¹¬3¬«Ì"Í«¼®d £WÖo>¸³Û<™vœæÜèR?:ö(4­É¬sí)T”wÌTs¦½¯†œÑBi}nÂfÔrZ†¤œ‹·õéÂj3{±Â0ÂbZ1V*®´ÄB a$àð¬Å£$~–sKѳÇÞVõí½ž EÚ-ñŒ*ª±ª}cÚÙj±º‘š‹JULkaØÅ¤>aZשž…™«³œzoÄoôh+n&$y#éÒ„ì‘¤Ž€45b)~`˜à§Ê?vt?÷æäçph*x‚6@˜P Gnv…¦¼‘ ÎÜëegwEÒ(•)'k !¢¤œl&åKaŒJ$/Ï"_“ö£r2³FÿˆE¢f­±k´fýÓ€«ÉºFÎí5—®à-rNG\?a¶_ËÙëŒ.ƒÅÍSؼÑXï¬ãQȃ3_á ÙˆŠ5éu¨È§SäÏFHè2OÏÄr„^³ÁXd2˜'`L2¤Òš- @j½ÈQƒdäã¹~a Ì290w݉—ßžæºÕmÉú9#ç[ ³¥KgT6Uöx`]@/Â3-C=ž ŒG<_aÄH´ŒÜ䃖õ47ôX›ãÆôƒD…µÚ; Ùÿ'SvIxF¡(1l³`fDÈ(E«ìJxF´Œ õü¹Ò8žI#Y( ˆäLi” é"í¢L…l*˜¿š‹%¸›¹ ‰Éš1ªr¹ÖþÏ×™ 1clúظ¹O ƒœÍ'Ìþó¹®>Œ¼ùX”UqXÙÕˆYÕ䕟§X¤³mM1>uv`Üàá– J+.s¹R©|·Ló)¦¾myå´jO[Óg Ÿ’][ÜâÑ×Ì@ËøÚ2 ÉÖ˜­çX¡­Î,ŸÝ£žÔcàae.º!NÖkµ (J”ËQÍ•q-8²ž¥r¢Þ¡ÖÛÁÏ¢33N»ž §V+ hG5uzÅXÁäó8@Ñ0A7oÏ{f¢ùt9F·h=ó¶‚GQ H3)J(áÆëïÛÛ¹g¾|Ìf6o¨ož ,—ò<&5G…®e1>9„KÚ2Åò¦^}ŽÄYä”Öê’/%’=ÒŒAn›G†hr ™}¾TWÏÍÍ[Ì»¹Å¹mC¿a‚/ö4Z·´Ôç@_íë£& \©|'@y2ý§ç&—ŸAüÀÏÁ{Àí- wÈñ/Fâ‚@äêr+ž"ܯ‹g2fþàpgô‰2¾½Ãe¹ºèu®˜%ôš™t{M/†]©`_ 6 ¹`’R 9ÀHF5é­‹T s|Šó¢ZJÉ@šó÷úR/o^¶Ff“ƒ`Öe; É֨ׄôëUÔa˜H$W$#ѱ@2¹éiË€²éÎýDËìõ p2Õ#©ÚÿR͘@/V ÈN¹ÕèvE#KÔøóÚº|l&¬z!Ç]%Š<š3n â4Èår0 K-„Œ힊„¢£i²Î¯1b{Í_åÉÜ-™:›­õGðÁS}‹/š–&€£óNïº/Ü»ýå€ÊL$%„ç*ÿ›?²þF¾œc¯¼íÝðا}vW÷þ¤ÿ)Âín²Á{Ðê%G½§ùîGìne粄éjÅ_¾nÕôÖÃ<Ú2ÎfNÙÿ>¤5 N-‹¨€¬ºÆP¸¡_˜Šr)’‘“Zl2_še«¼­ª| `Þv}ŸßùþcÃï|óñ~+»M"ÊuËC¨§£Âñ mºüEM©nÃ&/&Ú矿°Y±P°3SNC|B¡ö4óß‚™yªú8eK9جXZTy»r¦â Éêk0ÕmM.rs[<îL4QVóø×ëÌñŵïOcŠmíÝ+9,ÞËØ"-àE¾*³ îUvjyÃBãš}¾âpãu¤¾¢¹žàYÕáCHnÜ*Y÷ñE»ÎÆÕnøßW/ϲdû¯3)  äf 9wn+>þ!?Q>¯TXN1 cC¼ÌÝÌßlÛGiñ=Yýµg’Ã\Š•,Ü81ÉfB¹²jòÞôjÖÈœ¹"k\|U¡/-Wø¥n8_¾C¢û@˶Pà¢æ„^ÈÇ—®3n^/̤uŸ7œÜ\Q|Å IDAT 6Æ$“ ñ›4ç Í|‘‰œ“‰ÿN+£dx‚ùð[†e;“¼žV]×07&µ¢å`d•q]dxÉd>ÌÄÅâ¸2«˜ž‘Ç,V *ÍÝäK?ÇKe­Xä7{9>¶Jå‚–‘ë^y Ó’V*ÛÄGñ‹&t%ÂCßr±ö-$ý;ùÑx€(§Ã,Ê\~(â°ËÚP=úWHfâ-f@ôM³fG‘337±ú¬L‘¯€H‰KCŒ$Šb9„´Ü…ÂD¿@Åp†uŽ‚ì5öµ;‡çÖ_¬ëïw€{]>ß2>œúEä¨EÀnQ‘)Ætú:‰©Úèg’œ/…[ð7û,Žnþ@H¸ð¡],Ì5°3Þí¦Nn¬1àó–ê ݲ!y²:AÃ'¾­=;ߟɤͦ)€÷oŠ·¦·#+ÆwD²¨uªÞ 6ZR¬Í/,ò-+Éâ… žA4å\»÷›ÝÿÞ[6çÜ^o¨ç€ ò~óaX]¡!IÄ0i F:‘±Wc°¶'Ë‹³'j¾õµ‡Þ}ýÕÊ¢,yfEÆeLu”ó—žØqç†%±1Óº©T ôkgµýwúëÐXê¢<®ÆðIF³ð9óùI—HJE^cÒà™?-ÃfQ³Æ¤ñ{€ëÓuãöQ2h$&ˆ—*#&ÐŒŽÊ)0¢ö’ֱ߮ŠZç_©S3ÒÂOò¤änUà_hÌ,ÖÄjs GNùr‹Í‘DÝÍõ‡w¨Óçú==߸÷:L+\-g†¡­7®Ziú¨=è!£ÛÙÀ3 —*-]µŽO8]0‹ÈT®T¾÷U±ñg©†bǨŤQq‹ä”'‹3°±b¿Þ ŸŠ÷âÃKFÄÀ^£- Ýémžº³—Ò;.Ô @jC¯ó þô Cr½p$¦¯JÒx]ø.á@|‹F/Ä/5€™zN_,’Æ¢K/JHÆklüô¥ÆMEÝ¿·ÏÂVMBf}€… >QÒÇ?:Þ÷-å[¥²Õôú@26ßÇúO‘9¾lÿvD ™Ø½ …·Ì[0/'«°@Ï5]†dHÞØÑ2³^yÏgî`®¡>ƒ©"/:«÷—ÙQ˜¿D@ˆÀ$QcÈeÜ‹$Þ³ÿ賦Œ]Š|2›‚.½€^G2Ì2ï\¿òX¯º(?+K—F‘t¨ ±À¶8÷Êk¿»å·NHÿfço{3ŠÌJ®9¾jHŒÒ|ã¹'¿õ`iª›¶®=ÓØTf¦%G|1SAÒb‹Äm@F‡Ó$M5‹èKx~6N{šKÖŒf¸C`Âàa c* >EšF®´µ9Ü=øPÌXŸL%Y3Æ®òÿÌL€ wò ‡f9è•V®7uiMô{ƒºì""g¤¦Kˆ$d[¿>ê­q·µ†óTŸ]¾´¥7VÿõYÚ*ÎÅ.mõg8™s$adá,L< 6 #B$k¶/·êY$ 0†ƒôHn¹ HöWÿhÈ9ÊÓÜcàg4NæìpïìWŒ³a³&[Úò E>2D ~ öoŽVC§Çº†FÆž½Ç?¼iÁ|àY£í¤çìáS… · î;^¯M·”ÏËE¥E@Ä0Ó¾N¬ HœI9à(šF%&Ìõ1ð¬'âZ ¡Uº†ó3BÃ<ˆ(Ž*GGSË{B’C,)%‰ÉG_z/±BÞnвÀhp Wêlô9 XU‰yƒOiÌë•/ûMa÷CŠœŒ&¨uŒ¨ü/"=dwC{Gëà`ÍÅvMžöÄ®±Îp¤cxD9êÒú „ϤAši@N²G€<5&EÀ8æçp2A†¢i]ô¸z-tÒ["‚ÍAWšÁ<<Û$#Îp¶d$'DÃÌÃm"&ˆeHpMà^ªáRý‡õêËÍg›m½Í5 º8n9ü¨I Õ'ˆ ß2¯OFÔp¢®‡~Ž ßD¹D$›{á€d¸H‹–!µ·'çœP‡¾ÕÑ|2ÁÉNë¬P¶Úøÿ¿dDÖ—-S•ôò ÉĤ1ø4qà ~È:‘TóÂ|‘Jƒá´„±  )‡± h~o ™¯°jÒˆQ¢e[ÓïÿüÖ¡wßI_¶Á<±”йÓgæf¨çæYϹدø÷^ùËG¬þПæ®Ù¬S„ãhüô„ „>€§o?÷›â칋̮Ÿþê—¥•·"Ï+ãÊgŸ®»¾1{ÑR П_|Öoš|üìé³ÊQÛïþò^býñ¹Ÿ¨M9Fe ìãÕÚ|hW~Ù2:íïh}á¥'/·-Ï1i/Ÿ=¼{ï;;žOH5ëRÓ€mÈ Xg5õõ[o‚™(!ìÏ/þpmÕÿ4V3¯Û˜“‡[Žï~k×Ñ­j¦N5Öµ$ïzéçú]5çËýƒ‡ i ÞÓ¿qæÃ¾³od+IŠ\é³ $6Ÿ¯ |öÉp´v&õ *•á1Dâ)|z™7ˆHlœ–%¨¸i¾p’#²|o‹3-•àŠû¨wõÃ/¨à·†Ð+"·(Ü ðmðÏ/Ÿ;M&ë±?'™`f êèê¾ÿóÌm—<†°oì¬"¨u7/-/ë .è~;9·Ègï9£iÑ®tÝ蛜;00¦\½²r¾rè½ã§ÃîÙšæLf Ô ûgѦYiæf&gž!ãVø’'’ f$C$˜À,àõUd§Ƙd Ò20”˜“º4H[uàD'ÑzùðÇš›ë¯´ÃOiAÈžŒÜ• ƒ55¹…yÝ=Ý·””v6;U#V“uË}E•b%<;y¶>IŸYRåg×°©.Ö$Î^ŸI ÞÏMòNð3¯Æ<(*{¥*øYf*¯XÀ!€ÍÂ"ãÚÐå¦ÚÈ!í•0„#—Œ½5!d娵Pá¼¢HRAzª*’­|oªÈ²äì4ü$‘cTî˜;æ¦yisUvZÓÝÕ†Ô¦òŠ’2áð68 ?膸¿ÜÒ„éîvzC‰„pIž@ð@4ŽŽyGxÀ;BÔ‡„XÑKÒ®Fˆ¡EGYr*O ÝK>é6IÛ‰S€èZ"¸ÒK<ý˜ÒO2‚ˆ Cø„aHÄuªZ¶žž–º¼Ž3M­·:z´iȼ¶î£Ú€ÖE†xˆ{Ô3ú ðѾP™¨^qôêvŽ‘:QT#ÅSVÂNöŸ»[QäþÒÜv£f(/’¶¥»&9ËÿsåpŽl“V@ ’)ºÂ@2&©¥_ó"m]îŽ"UçÍKÍѤ„ˆ–µtäeZÇ këÞøÙM룫wÌ´&€ (¢Ô«;õï[Wä,ûÊ\kPôÄïO¼þÎŽßÿù½×ÿ²ç³·ßÊ?¬¤¬£{ìÙ½aû£«nXhÒ/Uï]T¾ôkß}ñS¥Æ®”U/¾¿óÊ{Þy£¢ ç‘§~›e­®¯)IOþ…W#cƒóç/|þÕ?­]8/ ú¾W?jX™cLÔªZí¾§vì\»`38öîÛÅÅ9]C|þ’rÑ=;~ÿôÖµK#ÃO¼ð>Ñäͯ?ôæ¶ÏÝ|5#ì 6Ÿ©®X»fÞò…KhÙа_(+[úâîÌÅ9—uªÞÞäµIW>Ì_»:?Å=¤ºI'Û{Î'¯0i€Ê¡Ô›.8‘ ³®#ÜÐ1:_{Å6Ä+pDíÍÔ°c6G™)ü¬³-B1pÜß{Õ|J²cÓ8¹ü¢äS½Šuø½ùä g‹Ýk¯s©ŒƒLKWá»íE=mÅHåIjF±·fÔfež™"ôñ`œâ„ߘÕ6K;_×\ì^7Än*±7Ö²™t¿Î&VM¶õfYÖ§ä¾;xþükCwY™Ð‚÷×]áð¾`ÿĘö¬»–oÁÏ^áEó†¯mK)¸jÐ2DæI‹F“A6 ‹ÿŸnÙ±›Vƒ=êu2µÌ?ÊÊ’>_u3ín.–§­)ÀÏeÕ•kæà`Nom[ÝpóàDҥè:>F%UÛ/^~©…e=¹9—]íÔrÅ «5’…ÈT_\ÍJѲìb…Þ’yá4³g·¨¼|«-¦³ZÝcü¤[®gMîã¶Ò´à»ßÊd§ûX›ØƒŠEwÎ=á‘„IÒ„`cØ5=ˆ+Ú¥­ëç8ëÛ¤%²ÚŽh n}^–óév&ÑÜHûľޣÙã@E_äâ¾>M{ EŠ3dK»ÕÀõ$F-)šX“1Rë•:Ù¤´sÚJ ¥ð™´Ò O/˜dmQà9ï_æ9ߦYµÂ°3Çør†_Íø;¾Ôz%ì®=Éj»ËiAéóñ7EdÜVHÉ·<ŸÙ?aÁS‘,)擤l)s2½!‡æ¶Q[t$Ò'Z„0\bÒª±Cñ±ŽÖ¼Gk¯°S¸oÄw)°<ªsDñ©0%ï¡Ë enÍ•=Iô¬âÚÆÂcI§ŒýÌáó-»ô©‘%qÙJV!QŸVô'ÛEñWP—…MX¦ ÖιIn›M¼5ÑB‚Ö…`-5´"ëT·þÆ¿x9kiåF½žCÄ¢ Ÿ[VVkKø²5rÌ–0¹'V¬µEòXc+賂$´®ßú£õŒ}bÛ÷îßr۸ÁæZ¼¸¤çBc¤¯·/ÈS®«XŽ®ÏèÎ]\ y%çÿ†ÁŠdHÂa1”ýhÏÁ›%ÙØÚÑV³ÿÈhw‡kÌlÃ#–V>¶Pº;‹[gè¯úcå'÷ßöä›{~c¸ýáÏôeXK{öý´ò‘g³XWOö{Ûª68JYýá%÷˜ºû‚VÀ ž;§öWÁƒ§:;ÊÆÃ‡Ÿñ¸°U§Rö´T;3ä%×(Ž …| ,jñ€í‘ "-btxÌèÇ]LÚ†;„ŽH؆¦ÁÂüMMUÚ ûù§3IvIì@´…m-†åfs_p´³5vƒBƒ”ŽþEgdÐÉL·LûãÜÌh¥Ë¯ß¬•,Ú°ùÎŽ•Ú#̃žË[H-YçnL+Jé0\Q½=?Mµfõv¶öí}^ñÈcsóªzuïâ…¯»qN´OŽj³º®•ìì_J>ÍU"#l7_dÓl%ÇÉ™„dØdú!^,-Cj΄5#˜Y~¨ü¤üm…;´ªâ†âì Úš!mlÈÍôó¡…ÉåHyÿeÃm”-ìfÄwhS{2I ì{ù'Œ}[àÙ ÖŒqNŒœ ?.Ai¶68”¹Ië`mhÞÖ‡½whE(w gšùòÄÖ~ë­?ÝÕò8ðÌ7 !ÑÌ |ƒU$FñPz.â— ŠÚü®-R$ ­]Î#­ÁŠÂÊ H+†ô°IÌó8½Ñ<¯v (bUÅŒÃ$ôs$%“ÒŽÔO¤¯¹‰ |@>ï@>“D-­À;ù,IàJY+|<â¤$ŽáCÎ{¤"¡Ý\!X¨lÑÚˆ–Øl!ē܇¥š=Z±É„Ðu{±nO=5‡Q{?¢uDwJòûؘ!CR3rK]v°™ñ͸‹‡›íË&žDÇ”%0ݹÉq²¦tw)3œ.KÉÈ[ɤ[øÁábc % `ã™øŠÅv¬¼ÀxG!íüI‡f_qX~•íe¬ã†¯Eéfs¸}å #Æ'žÞñôC[Ñiþàµb ÒvýÔ\Ð÷:ðêÎýGüžg%Daã®—(>ÖnЫ^È æÌ¨\¼BDŠ¡)t€ªëí•9ÖkÜRû@rÑ'I? ® ˆÅ¤Í|ΞTê3¶o\÷‡·vF|MÎlñ”ißI{f•—m°¥æû¯6ý׺NÝ [ƒBáÃ#Š€OnÎŽþÜéÆD<šäp`È¡³î±3*Lu—­0‘Ç7±ªRÖRíj*6Þ[¹Ð_ÝÐ›å¼Øe˜Ç˜;î¡Q{E“¿ß®š£9¥Šb W–²º{øPd©Ü¿»0ñ0ïºuí¡È íüý9\-N8ØdZÌ\úû«¦ý{™Â\¨g¢öfv3£•âãlZv-GÌ …°5¥H4§úúæ;·°/TÌyúÄ{Áå·Cl J`6IΖޮJ=ôtóºÆ¦ÊEåuh³au~ŸÊ]î}VŒþã]hcãQÂØÚ3FùB•òW°®­h~¶Û áš:L’‰-éª*‹Ì áµìfþhkŽað™DÎø ¹Œe§äÓÒj÷¬þôËýF¿õÑNÏñŠ‚åkç­Øwâ • ‹g“f&gìÚÌL8ä°ha1Z¾Wí-¶«Zú;:T~ßЈ_®cVÞÀÉK£å‰‰¢c?6‚ÈvÕQc%YÉŒL€ ÙʺEÙHÇþÓíçìµ)’¦ü©Ý}„V1thÏ·e.¸Ùs¨Íˆ„§p8Ð(³p¡I«òÓ†j¬§ŽŒI‚žc$q>EYRZ#›Ü+œ^M€_, ŽØËX#A—0‡¯¬¬ØV¾H©M‚TâŸX t™?ûØ7¨õÃø}•xkÚ—œòG&Èá†OÜ›ïmiO.>äéÓ/úó9 ZSãŸùÂÔoÑãbý¸4ÓF wêÈ«¿{·™©’€j÷oß¶ò†2tÛsô eȱ×ã-¨$”ø©ƒ¬Ôs($}¿rÇä<•óæí×Ñ|rw/XCœ‚͇zúû––÷ÞØE3+ ¹Àn/IFü÷|v«¸Eãø__9øÆnÝ\Í Ð²€…¯îHK~p›‹`ãÉã‰xz³_±·a $†r(滌’µ9[dÖý|çŽÂDõ–û¾xë]Û6mXKEŠ­ŠX Õ{33Ëßܰý‡ÏèõÉÿ'RôÇß½Øü0iUIÀᶇfÙÚòdõüSÍ™,++D€2yæáô‰ðÚòu}ƒ„¡†ésÏš†¸ðý½½`u 9ž}æ)Ú’M1¬?øa XžË ½½ìîÍsÂoUÉÂúÁì¢^Úµ%ï—~õ8!L, LãH¤o)ãÀO;MÿM73ZýCóÌÄ$3&±Åæ¡èªþªŽ†÷3nFÃNhElmó;lôÀdÒ„ p¨Ù´vƒ':#m–×4zøžÜ8fw£NÐGôR¹vñÊyÒ.Ò¬2*cVØ Ф.Œäá+M”²Ô| UI©Åó’Ú{†)Ì&¶TªEr\—"Ü­Ö•ÞÊϵ¼™çËï1þ¸µé-s¸²Øœ6znùü·ûëßÁ_ ¡êóÑ?y‚}ûîU9%o«€±Ø5ˆgv‚–Åñ3ÂB“Ÿ|ŽwZòZ†.?CŸ•§°FûwÒf¡„jpk6>žnмk*ëP¨ ¸”ÀÐÜ Á,ú+r]ÇÑîö)J`µ\mš’*|Q0œ¦«Ñr¼ÙÇ #—,Ñi+-I-ªá¥¬x³w]m–&pGDG@¬tU&Hžû0݈îÚöª•+ù¦?¢£€@ÛpàÙ ÎDŒP@&›ÖªgÎD³-u<‡E:µœT^Âí™ t©êlsbóê™6‰¿n0£ ˜Ð: ûÐM/¢–óñ§±nâTqîÀÒ7œÞRÙÙU¡«V¼Üçß—À* ÔÀ±@Èþ÷‚ϬZ21¯Nüry}m)°{°VÇ*zØ©gÛ¼Ø6¯~Xô´Ä:pPý¡Zö‹ $Z–‘‘£¶2Hüï?ö3p‹;fU.nEfD}ó‘ÇvVÛ]²jnôÐÏ“nžG‰)@²›?û¯“ÿ¥‡õÒdµ_|ë®3Õû]¦n­ä½%Ëü²íxÁ$tbPc¼¨y&Þn›t ®fŸÜ„dâ'i:^ 0ã½eó‘Ú:dˆ_W$#Hƒ¿´¬ˆr¬î7(UÆ–ýµ(ª\ö®exÙ kér^±N>#ïjrsëš{†íÙ£¸âú¦’¤ž á±|SÁ©+yÌà•”ŠQ5c»ØËr¤IcÅÊN©ÁS™¬Zg·DÖƒo³¢TËó¦§P«$ò—«ëê½pzשs€=6¡WxF§þµEÃŒëýKÌ3#Ó|&€0Éš±Ø›Ñîw¢‘´Ë‹>»¡¤æ|¹³oW¢qN`¨',M|!3ˆŒ¯sïê÷Êl†ü m¸ùrÓÅY´¤Oˆ$¨Ru:á@`³Å7H¶¤eD Gò 0](‚Tlu²¶Ž+²Ó[¥ùÑdˆO¾Ó=¶ÚlÐk£ mºFë‹äÎIç†Òí¼` Hf²êÚ7?´«žÅ˜j±È†)´â5S( ã‹rKõsÌÙ¸6AžèÓåZ*’ çúÓ ‰áËÀŒ¶ú££òÓœŠœd>!6‹ù›/(L?¦]=„â S”ªÑµV1Î^Ÿ²×´FF’2S½É “}&mì)Oº­[s0MÍþrÚòQÖßÃáa¬Ç?ÂÜ鹩òžqo™6Óßgtä:;ݪ•‘1—¢9 Mß`¦JHÐh‡T&.åzZ¥Éà@XDR7––fÇ1]…¼`™,«0Õ‚c™ž©2t7g(áÏÑ23î9ÎÅÖEÂOŠDJòKB¾s:C‘RÅ—™§€JË÷IQùLš˜õÌ<$ÖwšS'jíÍH–”½NYÚ¿ cþò²DSx~¶Å:¤:]”8ßbDþ9Žà¶û¿bNŽŸFûþGÇ^ýˆKgGHöéåU«—ÿ}?èÇs_~ú5¾“äþë»ßŠ}Ч€™NœI=ß–8–4àó““AÈlƒƒÃåF뜲.­Ÿì0»F{?[y¯E—{{œ;qö|[__ßÅ 8!}$iEî¼# ö®ß¿¶«³×¡ÎZ·ª`\;·T¯,Ö¤„Èú.ÁÏ ÓÍzåŠùzøÜÜC­ÆtS4L6H†4+йˆ:i,ÎàùT­X1w~‰Nýoq;N‘ƒÏçãITøÌºT£¿¨|mž>åº+ß(/.Ì_¼¦Ê;Ä—Ú™³°BŸ¦(+žöÈ’µdOOö÷˜ä9EUéZ/svræàÉKKýäæ÷Üù‰Âœ\Qá3?.;Ó„JVËÃZ:µ²€6§PîMKf‰ºŒŸ¥[É_2Áçk ¦×-õM¶–©ëçC¤·®NùwßQ>ïc=iø;.^~¸†O ñ ô’õ‡˜mFËY‘5£[žnµÍÊ<3™|F7s¡c™Ù%!ÕÁ'ýp2ä÷ ¶:ÓØ”n ƒ¥¹[ù8mÌnœH“"iq5ä däl¹Ö(ôu»©ƒ³çð úé`c‚Š1iÆ¢ä¬T“JFäÓÞl‚~ÁçûÝ®ú8nMhSs°1ÚI{ëѼ}š±Ï¤-ÏÅ-¼¯jà¶8Š÷®·bŽõQã9ðní3Ïwþíí:¯Ã¡çX‘›®Io—|Šël¶4a B>àNAMí IDAT¬V7(Ú@¡<3ÿ´yº>r&zMá% ŠÚv¹ BŸI¶¸z®ßÕ6ÐŒné>¯ >ñ3i¤– ºF]~¾$:°ƒµðÉÄ€b˜¤,"Ÿ˹5²aø›²Ë€¿Qëc®Ê¿ÀXBÇ"³®D„?mµœ<Îù_~H‡»¶H%‹%2iÜL‘5ç^©Ó,ÑÕf[9Ì5™8>æFò¯3à[ÚJ»×¦ÌœüÅ uK©žWõÉ‹d ´/¹5æòkõÖ…s¹hFúFø¸!Ïg:wèè)Ð2!9¤º­˜õ’éÚ~¾¾qf‡ßt.aSAZ•Ňgq)ž1Iå˜rûÏ‚9²¤•²X 9²°À¯‚·T V Щ»JQ”!†0üúúf`d"N Þ(Y¬’I8GÒ“IªyBµXl‹E;;D"9ˆGåMH  ¢"‰bë?ExF t¡Ì] °®is¨î²rÀåÌ~s€k:^-Â×*F¬C'¡çžs…#™„²éy‰WÛ¾ö®™3Á}ð)Ï ø2Ó ìáÙ&¥i ³÷¥{·5=ùôηih*v<aý}|èËiƒŒÝ´aí—n]ó<¯ÿè7°qÅSèÊb|Í)ÎÌ$$CI.x1töÃðÚr zÝO„Û¾yåôäÔø€Ë)~u4œÙu›­dã3º™³&f†r 4X„÷´r3¿~ÍÅnˆ×S™ãš@5¾iln“Èzaáþq‡üAþhÌlv1èëìâ ôjò Ã'fF³ÇD²’á ‚1á®Ún\Z$FL¹§8â^ eˆ”ë6 ]tÂñqo Õȧ”Ü—ø™À3)48`à†yïÖ>öÊWöÚx+…@™-ŠFù ]-Ò±{ŠÌ —ða3{WGø{â50qMÿ•ï Š&†”( ˜.ÚkÉEC<èÈ]ÉÀT#ãkJçm͘ä3 íØ.ºˆ«Å%ut/ÈHÕµÞ›mQE€IƒvÖ¯·kiôŽ"Ížk1’“Õµ£ö~4 øÿ¤³Ó—DxYYáǼ ´ìTÆ0ú¬qœŒIû¼üMZ†^Ô‘Úº„Ì,T#­ÜOF›ÄNâ$8üÁÖ6вRƒCÄ3£0HÆÎ/e^„Ì‹·”ÑÓXdŠ£eißûÚ×þû·¿d „;øa ŽØ’vT ñ9¨ –¬œùMÿ^÷ã_ý–÷œQrF†§8Éë]Û®Å:êÎ ~&œt5Ø\Õ ½[À‹š{pÀCÊYy(0ûS ¶L½$:IßÍŒV³3ÏŒ\ªC·Q«ÛÏZÉ?kKÇܼªÁÖCL2Å#3¢MøkAfåé×Ô–^·‹Ú"»fsrÉÔƒ~ÎÒ&¶ÂESjüù,µeÜGúF$»m·y¤kèêiB­1äžq@bŽO40¶Æ*zų'jš\Mèÿ^êÕ<÷½û€d;¾ñÁï’¡o<øµ4ÏP3ôѾi¾xqÉöª/½Ú„ Gå묒ÃÉðSìëý÷?¿Q@»%rvݨkïÀ$<Ë  Jõÿes‹†F>ð,6ÎÍžìwÈÂya™°uäÓÑ6ò‰hWšþ3óÒé>oI(10Ž[dRH1íòF:ÕXâ‹$ŒæÈ“F•Éo·¸<õ.$à@‚ÞçÀ¤>§ÀXBèB6“mRwo÷)\jíhC(X á(H›~•H|{ZÎ>Ýœ¦a=ü¡ˆA檴uö<-=Ü郾㴌„+¥?–I=¿÷?:Fñ×2Yœ Ⱦ`j¼poœç tý¾Ò*gHIfÒ"Â¥y+]™2Ë'Ã"ZVµ"6= 0•= ÝKRGÐGÌzÇqîõ÷öÒD#;î;¢JúÞž|sO €Mîß‘‘³e ö…ïÿðGLêÒLõ|[9i‘¸Æš1m†L‚¥ŸïܾÂÊÊ À“ mH¢(tïwÿ×wäþ#áþ;nƒg’:7*ô‡ÏŠƒˆ_yÃô½|,Z¦/E@#DÎŒ(†u)7®Fúv:G…ÜV¾Hp2Щ™u*mdå!9”væ¾ïƒnøÜ¹¯RKj’¹‹Í÷²ï4Èûßmb‹]ÑûŸ_Ÿ­‡Bb<ðÔoß¾'.^X3~|÷OŸg&Üp† xðˆÚ«Œ<ýÌÊeð©Eûµy•ê^±^PM)13Ξ—/\º¢[÷Ú,šÑ#[b~4;osNè8ÂJ6Ž‘0,öj¾%50®B$ŒO/sŽ•¥ØZ›Þʺñ> Y1ëÍßPÜÞ3Ü;è¼}óí=Á4¹ÂÍ?ÒªŠî^ÅÙ9É´(“¦—Bdܹåêó¯#òL#Ÿðñä£YoîyáÔ©y¾æ•w|qóÖÕ–bـƫöá“åüHÍwÎÙRÛVǧ]f/?ùåð缩 -+% EϦý›Å½BuYʾÌÔûMiIzm\Šv™MâŒIÆÂ“†Ž hV+7ÜÏd§JF†Ž„gbðŒ´Ó|8ÍÒH§Åçu2lëµTD š Þ¦¹iÔ˜Sºžf öD´ÚØ$òù‰q¾3>ô¦åLd1ôQá ŒêšÃ.#¤Õ2œÒœ6ܼnj!¥dÂG§ßxòW4k˜²œ&ýÌë×­F&S?Ðã=xðÈGÔ_ŒU„P8ÍÿU·êuÉÿ5»Æ(P9Nþ¢]—äÈ€dr݆€%•ûÊ;hÖ3çæÕǽEÁ”mm¬iî +õŒ÷ ü šhx_¥yêÓÉeÞøUgó;_Þ¾ D0ú0²÷⼃Øsð;­xúb÷ä^'n®x&Ñ©0ПÖtшžxzD°1ž kÂô±(o¸ø¿o¿ LõϤš_×mdŒža-šs]ÇÐ~óDßž®“7­_ŒïÁáhÂÙ—û]Ÿ^Q~-@BdùºÏqAê´íê²åËî©Ün‹=ݨ¦©c›6¬½¨N¾ó–­y_³4ë߈J}ƺŠåë·Þq-äKR zà? 3>ÛzÂéì‡u‰j`ùß|hœžo}ó-›§}(²ÂrööùI<ƒX3f.äs-½ýT÷OŸgFcfÒ—‹êD[r4{Њ¥…¢ã q+}Ðéøà ³yŸ+~ÝE¹¶Ã¿8»SÍÀ{šÖV˜E!²’áŒfæJ)%*v»r~sªC9±j‹¢¢RÚþø-E…îÀÜ¿›±­Y sùÔ''³6LbùüîpeF‡·˹íïÈÞwj.vdbFÞ+s4¥|²»~8©ÑÓ’ñž¬A^!ë×TuzjÂnöÇ—o¹û‰{ŠÌ tWÙëO‹j±W™‘ÖÛð!>ςǃiÌé®Y8×ö\îŽXešÞì3øqI£hDÑŒ—B}íË¢&!=uqÓ“)ŒHŸ›Ë/iчÞGÛ‰H€Göý¥²³]“-PÀ›ÈÒÖE§£M¹«ºŒ{:‹YœÒmå\ãÔê‚CŸšb :6±üi%E¬!ù4ß9Jª$5m&'/n‰6x’i^D)Üì×/Û\?5ÈeIË7 fàx–{ï¢ÆzzYz^ CO‚÷±ž¬º7övá´•ÓÕÆ›{lßûL|iíà–,o;Ýÿ¹+®ªJÓ'/ IxÙ^ö„ @i–Z‘ETÔi[[ºm¦,ÑÑ™r,¥Û¶µÜZÆv)kÐqéÑ.uliDv1!!„!$!Û# Iy/yóýç¿÷ä¼{Ï.ÿ —sï»ûòçû·ÓhÛsëƒÿåˆ.`Ø®X‰õÁÉ>k6²ë@dDÉ¢›nÅxÀ B¢fqªxgãÖœ+‰î¢%Àœjs¨î†ò¿±Á¼Â;†ËOn.‡ÇV¡Pðµµ; ЈÈäØGÄx³}s¨ˆi¿šñÑØ±BÞê&fö­*€üàyfœ4]èõÕÉ`Ž€\¶p¾ÈAÒèÔómÔß4œXfÎÇ4âaw77}°kkRꌘÄÚ0wféåS­,œ-L5¬Â+S[1å|2Ñ (ÂPÄFI?ï9ôm¯ÍIÌ.Šž») Ä{îé-똖An+¹hÄ ÃhTÃwåõ‰bqûP6ÌŒ¼ýþ…Íøª9 Óš@#›(“d`RfæÀ¬ÜÌb^N²ÈlïÙSMz|Ï{ˆžÿ`áÌ‚_'ú•µphc‚À”è%Š«•zü ‹>Ñv¸ýO -÷TB­ž E‹,<{Ô•¼‹¬p,aá…²³L%*û¢ÎwµÆÅÄVúËIK¶Pu´ˆ¨=1h¡k¸z¥ ¨B^+×åW§xžB5…m¬:Çå90'4õªˆ¦^©„=qâ8Ç=èQ'*;›‰šÂ3´}¨/Zè¸UIëà …îMG̪¤®e@2cÚ÷Ï-½ÊùܾyãáýŽ»ÕEÑ2!cäôŸž[±â‰—WÚ7ACÝy¾•h¬ËÇ6»Ñ¥Ëʆf(¦ -ÙhÇa ‚žµï|ñ2¢-„HцõrœBžç P«{ßyséCo©|p‹àpê½Ó™™$rˆ¬Þ²²CÀŠ3­“Ò©°'€/à r xˆ«Æyv‚4¿÷ÖªP;ò¡/Yp¹ªå1ù’BG(bn„up šÀèùc©ÖÚ´1#Š=­Ûdþ5öÀgÍÊûSB höØÉ¢ü(×Ý CHö7!sØCáßkoý…Ÿbñ™?†@Ú°jäíè N7¾ýÚªGî»Ã²-TG ²pïJgfXdh´r Q·ñÝiúù iŽÀù¡ï£ìh÷·õ”Œ¢Î)™‰ çmß×˯ †òg=qzø~ÄŒ( #’ñn+d‰E‹pĘYÕù^nðòõD×ä`!ÞsÇݧêε֗ ÃE@¸ ¦ÍúcŠØt&‡]…-9G= ¥bRSÿ”“]»Û¿|eU½«yÙKK¨ÌGé"õá'Ô“±tQÆFÝæ·ÓŸ4<ÚdXG}½8Q;r¨¦¬ŽÂô¢)“£„;"þuÔp¤é"9Ó _QÅ b†InLsJ²[+)R!oª8 ¥Ó„ 6B!H™¬jw§RîÛetÞÉÊÜl‹Õ19Þ!Éló¦­Ðd©pÍ#ré•sѽ›0ÁA‰]VÅ Þƒ½î¢î?¡‘€Ê+è¢gÔüKL{2ÞMj–H&?@Çø|ÅåG-?qÍ=RX¢Qq²äÓÅ×i[tÉs'uÚ+ÎphŒåZfOv¦§ä³Èʆj[–!*Õ 3»qÙrL_øÝ] aÏÜ{[ª ˜Eoï–[–°9‘·eôâ` !ŸÚü¼&]¶àOE^Ê”´Üâ½UôÕðVØ›:4¾¬?Üÿþެ§% /ºéfû ãbщ§‚ÂÔóg–LOˆ’a'+þíé‰`Û‹hÃÀÜY®]ÀÌÐïè39v *çF›ñ´žÜÅ‹ÈÑÓŸyý„ŒšF‘7aBò2 q¢È£ â’BGH 8àû¹+úCwÑ}ÿáxVd]ܳw`äí cx(9RÕW‰©ÔWöí«Jž×>àKnþ°PÄÍʦLïTG_/1³´ö\áºð ?¸ÏLp=’®^-áJ­CÃz}I£S½•=)±±m zx¡nTLŒšÛ(Vç“ù{Êñ¾ŒËÚjËSóÇu¦•§JoYb+W¾·Dä³;âòÍäã:A³¶nø«<«b¨:0 ?¤w‰²QÁ~ªe,dÅá¨k8g¹vU›ý§B±çÇâ3Ãý•yf†ÏÌ Ù=5{Gº§ï{%Ö ÄRw³Ý'«ò×B+…±|¾qœÖŠÃÍ_®-¿ê4¨²ÙyÃ=†©AË4¡Œ\òCNU¦3eI˸è¢%¥L C—š:.gÑÞàR=Ÿ^ÑH'ykUSmiÆÙ"!¦ã§[Ö>Ð;sù¸¢ RºB››£è!!Â*¢G…`á‚H߉ó8³Ôô¼¦úSI`fì6cK£Â3¡•s4"øžñм´,{öd}50*iaÍëªâ nN(Ÿ_àt£+ÿCá¹ä"÷>Gh.1»è•2„Ìa¸tzQcÁ˜êòÝ¢¦þ´úÁŸ›ÕÛ.S5ÐX۪͇8D¶¨k1ÛŽºÞè…0’Å'[ô8ÍW÷%P¡LPИtÓí+€`q‰Îó‹N@2‡Ã²¡ÿ[&$`«Êʬá©ÂülJAc̡ܽª5díûáRÈb¢ôbæ½ÔøœÆÀU-SÀÏÀØ*¼i nØd-x[`.{Ѷï¯Ôµ:+|ÍÈ Ê(C£UòÌÈà+Jð ÈgÖš%ò²ÖÕíRë༡úGΟÆß ´Lws,Ûô]ÆœoûRª •%ó%¼øÁÃÐ`B†)c˜=Qšâï½F–´*de$–õ©„ká i6QäŒ'ŒpŒX˜õÈxÃ,x¦Væå¼sˆ˜_J—ˆHj£ÓS5Ì+›EÚe;Z>ßùÅ㮚)Ï.ZºÄed¡] «L?=DG2aŒˆFm§7w(Úùô” M¶Záš\=’cCZQÇÇ"?{ÔÅú:Fiüà˜½ÙG `¥šåêkhLŸo‰-^³òuµƒSDªCH=äížéyî‰wÍ”P±6¸]\7Äb`t䥵Þ1Ù™-½Ï-iã%Žâè·c½l·ùPÙŽa%<ºãY{–Ë¢Ù7}ºÞ1i—FAù&Nsï÷ÜÑ!4e£²¤ÉÐË®²ÊTÈ"Ó2ÎÆãD‘ìéÓãgFÇÔÕPž<[3Á€O5e)¶£šÚ­0 §K‡rêàöŸtã'.„ ¥Ùqk«0¤9¢&!´yi¹’mH¦J€~Zê(1êÈj…âp;›ðRq±S¶.VÖŠF0Æ35UxÞÖNÃÍløœ¯iëbܧô0uUh˜£/辘òƒç™¯ †Ï ÌŒ*¿ +‚„ügk7®†gt©Ø¯‚D”a¤»¹)utÜð‘£ÃHθ¿ŒFxw‹'ÁÆ„¬ÈöHŒAíTáɸÞG’˜Îs¾<“–éqh{ÝnOÊ ’ÑÔD2% ·„‚7£áóñáÔYÑ9‰Ç‘––{ggå¡âó´ %Ý?¹øJOR©ÇÉß õ«ãš:.R cw ã|æöØz¦b ÒX€j{]4Õ­Ž‚“¬óÄÞ‘Ë[ÄãñH½W0üFчTФè:{Åì)œ”£2Ê•¨ŠJ†(™ñ}J…aÛÚ­5l¢ uÚ‚‡€’∇÷;Â87†»3ÕxoŽ~;P( “Êw™É%ÙXEV¦BÖ†ÐW€Ê;ÐÒ똴€KÛ~¨–i™²1âB½8eõí¬|A¤Ò©ÌRŽ3©Ð0„´+N0Ý™ü,YgÜ9íÁ@5¿i"˜¨ Õ3x• Ê·»)QaxìœÓ¿eâvg{‰N Y~­m˜Þrmˆê0; 8 €¢§L˜«n‘²Ç\ä[Ĺb˜^¾ðWÇÒg £s|鉌^¤âLTã_}2Õ•MŽ€½bï^¹þ˜kc“*{QÚþGšgvh”T’™±òŒ¬P’—¥'Ç Ó6âöÄy+{81HO‚äL}½]ÞsáÍ631{ßᜳ«æ“ªQWÏŒHE‹°eO–d$<³ÙA˜ÝîŽEË„é*ã633}üYe?ÔqK‡4‹ðO'âS¸˜'wøÎÄÏ\ÑîH_Cÿ¨©;[#[ë_ÝR/zg.ßuu@÷¢… ÍB,N5¥ýZø§´gìsE3¤Ï93ø™ÍêÈB¤Í ¤ùºb󨸉ó66ƒ×’G[æa—Ñmšmãa©éôYöŠO|OÁýQѺ(Üe*c,ìlC·Ì1ç½µZz —³B5…d?¹Ž?Žuì†KÕÖŠ™ñܘ‚ŸYN`ÍÊûEˆ¤…7l¶Ó²+憨Ôå5¢´iDð_úØc-ËŠvW`Û`þ¼yó/ß¶k—…¨A}µhDÍi*[9¿z·¹¤ í¡«ËÌT ÂZ¾´Põ6·î1ÞáB·W9uá0HBMOPî¶N%©¿kƒÒ!D¯íëó"?ò¥Ò£/N¬+&ÇdÉzTƒsþXòÌXô‘¦™YkýÉ®ÝçÏ9¹å ‡›`µj IDAT¶ÍÈmüo£¡uÃ|ÈÑZeXv+d!ŸÒbúäLV¦ÀE¯á*cf6è-‹‹=ƒÞ2²4vQfFN/ã©ò¥ñ+«ðÌÑÒh7B !©¬Ž6™'Ξeô @Ñ:KŤª˜±Þ†Ã;¿x¼T,~bĽíŽQ!ßJ,(¨>{ìy¼ð‹ÎÜfP®aM{#‚ýgZù+aƒ4.……MÀÒhÿŽC£é¦9nèá…Áxð~.YpùÂy³¿±è\ÅÎmzÆ"³JpÊÊHUéþ6cúšüö:Æb'qÕ~r˜™fFŠfŒ‰e6Ö‘0·(ýÙ–ÂÈô£CYi¾njU.…|íóæ)>èY¦°ŽI èìòµ¨Æ¥ÜfÛײÎ2Ù?¥¾fhÑ™ÙÉ$| ë† ïÆýQDíÀ¶L§Œí‘Ë0ÆÖKÞúfÕ Qè«ÄBòXCaY¨ÜÈ™;g-3búšçâKügÈÆ¨ßÆ3Ç6§ä%,ކM|LÊ#“çáöKâEË^Ù˜"D79¶äô ¦šÅ‘IcÌ}*<Ó½³áÏì{ùÌXØg6åDË—‘­øÖ‰Z;l4¹Ö?¿„«éS”‡æ6Óëîðá ÐfYx³ÍŽ÷e”ÚN2iZ4l`4½ežs' ££%”Ñè鮦dr™ig:žñ¬Å´èÈÒž5å<ùðÈê()šhªi“v¶ àYwã]ï»÷¹’,Q!ßV”óÌ’XÍ‚j\Ý“ñIdÄ‘aM€® ÿ™ oz¹%Š¥Õ^9ùé㤠 \íÇæY/JéP1„×dN1¿èB0L ¦t<ûÕä0À äõý›Dð ‰9Yk=c³Yè­K52‹;Ü«†gä“Q±`?.\¶…Ês ƳY™Åò×±·®3Ýz·õ§Æî‹c z–{vMmOÜæuØFbIPS—À Érœ])Žä¬QäÅ%´g g•mhí©·ÞŒcU—ïfÃÅöh¹v˜‰– ®‰¬W^VTIùóôõÓ ÆØw¬‹-~¡R³ c¦'WûФ"˜PÒARÕÝ¡ã‰ölõ-’õ›­‹>Â3åI‘ ff•‰­—4Ô²½‘Qkð “´¨†ò™}«hÆ¡Ñ*<ã™v\tÂXê”ø ”*èÛâmô=*[½ÄÌÜ êÊ¿¿( où|Às¨Ÿ‚|ÑF/ã1_„WZ-T… o™„`*j¥Èþ؆ Ú`SbfTçbîvÄpÁ…¸Ö~Qf~¤'º4ãlZî '•}u¼²êÔ³géÿεöífQ h8Ÿ«ûcÎg±Tþ™¶=êE÷u™Õ— T›µà¡1ÿô[èèÈ+fìOç6Þ³pÆÒ®ý`Õ ¯}òŸÜwÇ"”Ë£+Vrž¯¸Â Eö‘áX¨ê›*½f"±>ö:§‹ÉDˆŽ6—|Å xÉýk#g.N¾2÷wÑcƒ|i£‹o°ï=Q’P<5º…“j-•vñ†¼¸f³aÇ9.Œ¢î![û‹å;ª“ņ‹jtû†Ù¢Žjn%Ä‚u]àû$ã•àÔ1®"m†›Àåêy̦eC§°ü¤ì¢Œ+@!a\qd]@DÑçhÌæ8DÊ +‚9«Å¤©¬áñLTû-ÔÕ±ñ³=cN•Èîž"ãKES³Ì5’Æ>x^ôÂ߸Î4¬y¬¡3Ò·³œê™Ï  Gü±ÏL˜ã™9ž€]†F«ð×f¤¬'t²k÷°ÔݧÞSKìN‡·ï|V!JËuíÂë6³ þiŒ½©ñ³ rf ;̘a–lŒr¹ždæ5Ã@ØgÆmüä1£)!BB„°-~µÁ„¶‰¯2ʱ@PTHQû檜’ÖúW…¸suó“ÝEOpTH(@ºÑ]h~F±Ž2‰ôt¤±á‘¡Kx¤ÿ4GÀdŽÆŽ<”z0°Z<™N¹cî÷ÒÉó¡¾ÕÀ° ›·ÃÚªk,Qòüòàm·_>¶ziÕÿp›-EŽ –»—Ýæ˜dÆ–yŸ:–v\ÀaX¬áCÛ Êêe0dZ.`¬)a®§ô9P1ÃÐö6Bö޲;'$åñ…®¢‹ºçZV±s÷M©’“Mö´ù”i‘`Ll¨A KšÇ¹Çéc–ªö¶m< •RöØÉß8* ‹"jPî8êû)È>®§Ì¸^ V åëÚ·õÑÅ•LŽÏRvQÝÏg$¯CÄ£¦–WE¤Û=>×ìÇè´Ì2U› {I3ãô=¬Ên)B ¨¢nÿÏÜ•@GU¥é[U$d©,’ I˜¥ Bè@£,âÚêˆ-¢ =ˆ3*ÊQZ”ãzì¶Ûepigt˜ÆñŽ2(ÂÍ.DÖ°’Â’ Y*IÙ¨d¾{ÿW·^Þ{U'ôé{8Å«ª—û–ºï~÷û—ï§pü¶¸ÈóµY,´1ÞZÆ$3Ã+­¹°&Nm)ÙÚÀSÐÀäx.Z×%cñÅ1“ÇßKž5©ÍXÜÀ(ÏÌ¥\ÎK¥ ,Q'–Æ%H­Ëèï‰ÆÏ„ÈbjeQh™·XW´ÞaÆŒlŒrú&&×foªªq>ÁóœFMï&ªal§eò¥Ð)o¡€²1ú‹þTS à8W¤×ôï ”.Ê qá?Ë/â¬8Ÿdq é0ÓG{âÛÐfw¹×:jÈã1~0cc2À‹Ë; g€îªô2WPeI["÷JÃ?p¯‹qfŒo^4Ù€¹‹,Ñ \”ν-üÒ$Æ–i¦zù”ý½ä™éùÌ yÕÕº}­é©4 }"1O½?åWöx@c7œ3×`¬óóúÉÔx¦´mq —/D@Ô3IÎ0­ËO¼„L¾ÊH}¦ò‡S“0MÔ>ÓQ7zê"Cƒøh6…Ƴ PÒ¾äÎcv¶·ò$¦Ÿµ˜˜3Sj #¹}êêg»Óüyш¥ÒÎ_ ²w*×É$Q#šÌE“H†íã±Ñÿ(¦Œî´$ «ØZ²¡ú˜RBL—/ìãgžÖð~ /ùÛõ›”­n,• ­L+WGB‘ ¢OØ‹jä0kÉ0†ÎëHg™éÜ®è%d@2`˜Ä3´°ö§š-Ÿ˜­ï“x–+òP,ë¾€=&5Oq¦ÑI¿èh·qÏnª‰ƒ…aÒUð=ï"‹ÎÐa††é•XŽt˜idïõäLô0€¹t}DH_ ïôͽž'NªÒY}ÃÔ0xdUÞ–ª˜$Â3º†£°.N%•PFMÐí@ˆØYw 'S+¿Ë¼ršEŠË÷wbÜÌh×Þf”'%KHËÂ1v޾7ž=æ=V-ÖÞóÒêÒ„0¬£=(+µåÐÙÐA`êÐ&D;¹ÔY},3o+êÈefqrK‘}¢ƒ,2³¦(®]©fìñ<³žñ™1U_L †øAÕÐJÊršÐx©õî“Óƒþ->Sx Œ=ë63Ÿù«ÜÖ˜»p2oëRWZå6»ÜÁ·Õ1µßîãµÌÉÅ¥‘{EcŒÉèG `ôyqkûOùÇ϶¨‰šÄ³HsÁYZL(Î<ÞÎ…ÿ¢Eß>6ví\pôÜòÒê7OûÖ«î7‰dê·²ÒÆÆ\|1‚oMÂ?ÁhºFÆsÑL>×,é‚ÿ°ý^ùë¯X½îÑÉ6cÖœGžY6Æ‹<„…MŽÈ oÉÙ&ÿч4V³ö3ìp×ábñ—!rg‰R6T˜2$ŒQ?À¨‘Ê"‘3Âh@2æ%d„aj$C’mb–,Ã÷YÎb|(ö²ž™{z92ÇhÀxù7kɘŸÔ7uà Ïug¯¡B~IÛÔ,4kýª•ë>_ˆW5'™û ;Á¹Qý3Žg9 :‘Ñ(Ô¹Ä0õ}m.»eMøµáú 7–‡M&. ŸLv(¿,Œys¥‰–a›Üc _@2;]Õ]³ÃUÆÏ§ºÚÌ—¹íuÍú‡BúÌØD3þ|fXY‹¡BÅ9õ;«seø*Ø^¨Í6Ã\\¼¦‡uî½í&u«oœŒ3•ê‡×ÌȤQÆt”àg’¾I‡™ºzË­‚VßLíZ£Üj™ŽFxFe³ùt÷±taS5†æGæµ:–3 ¥Cú(c{k"ö:wÄ&=õ&KI±ó@G¦’³ O¸i´¯d#;ނŸä6û–vîNS¬‹½˜É—míìß0»Íå>ï­€l؈‡aväLuCd†oq”õr°;¸3‚-À%¥É¿¥É:@É‚"2Hª=^¼©Ü´†QˆLhP1ZÌy”ýIÕÞ§pïá´ æO,ÿߎ¸ú¦–œLCÈÈÆTX›î™Û§åÇaIP0/ Ñ÷zÃùxÐz©Yc%Ã-+5å/×:f¶½Š‰i »õÉøeš‰«ø+ &·ÝÍîÄÁC+O²/V¯»ë¡‡å°/bÃim%›ÆQäS¾ˆIJ·nÆtTWXhÊ~œ¦&üú âïźÊÍã/ËBY « *€»‹Ç† ¡\‚´×Câ¸â]îȬÿs€khéµ]Wj™þŽÀxáFÊ]®wrÑÅ0å ÌgôÑÍ ° ød~V8¨"Éô}Æ€4u€¾ºáWP33 –¥’‘í@Ÿ† *¶äM_&Ž?ÃI4fÆŸÍ­ÌW¶À]ËzfJ° µàcf&Špr!W¯¥Ñßn=©¡n=kr¬¾8QmcÔ7nYîú-‘³ËN¥:ŒšŸ©aŒt×lQçá¿ …~àÕÂØ¬„pGÄt€¹xH²™Œ ë %ùâlŒˆ iÉàòçØ JFøGŒÌþJ®È(\-Œy›\¨z/Ô\˜Ú´¨p‰Ž¹–º>¼ß€ðþ†ÙNA•%µé>#ŠÉ6ÀÓ>èH cÛØõ\ ¦SÛÆ•Kä%?ý˜7H± b6ðr\PQà Éǰ¤hÂN9B,GŒ‹©Xˆ¨1­ MåèDÖÒ"ý_^èDð]…eøeï˜2-’Ɇ3yeñkz‹«º ·«áÅ 4¼Ì#y[˜× wúj3ñB}#‹=vÙR—þÁ`ÃÌ@N2n]¬?ˆ;†=gæÚõýPâšÉ(ý¨¢ OÀ°F«ÐfTG3n¹R:=~¸F„Gf‘=£,f½–™žUMü[¶ ùël„gûZšs¼N2 ` 8;Z/³:^Û,µ3{3v;ËÛªäNHe-m%õíæ’ÖŽ8(ßÐ’lãp?˜u†+”kE^«|Ã9½fßú¯?ÿ=|·ìcuý¬1¡Ÿ¼È L/_ºlãysS̈́ė~ÿ<÷ù§*ŽEYW¾:ZßI÷ñ8ì¬,K'³êg´½ä‹óíÇÞk‰2áÃÙÓÖ¤}ö—ùøjO"{üα[–_Ô\sÀšÈv³Cã+#޶6¼Ügp_`LB¸±îp€X˰¶7î‘sµúf{LPç–Vn1®ñ!¶ˆûÏd:úùÕbgÏr2ÿ“<ü¢j„Ï0z}Øä+¶ÍÖÍS‚§lölŽj—æ—Œœê†×˜±g^®» ð^mŽ}ÍsjzòŒÿûo¾ûLðIæSºmȨ¥<"ØI óê÷·¦O¤Érü-¿Ôß:Ü¥ÕáaÁÜFŸ¨™Y’™lÔî_Y›*OvD÷3œà(Á°Ñ¯ Q¡Åm\º¶X¾5´¡mÿ)Ÿb;{ mª(»xdíw½"0¯kï­øªxƒ-~yN8:,š.Ÿ^IöžÞª! ŸÔVW½¾ì#Š«\8ó~&å-ÄýäŠï£G-|{òuƒAÔõÆlŽ‘ sXôL½Ý@«ïϘë6® ·Çóy|b mñ²oéxÍÁCwnZòŠ«0 üÁ=<|â4Î O+‘?nÝ›—f4N(È.ïê­”ênýú¯yêúŠùG -˜ ædGRèÊièÖŸÖ"M×TA ¶1ZŸ.«4âm§û&¤ (š#Zqá[>‰™óŠX®ëê [—›œdx{i™"CÜõÌÌßÑ ÛMÔf¤¦ŽfÄbvCù~C­ U¨¦Gƪ=[¢SUجgO5»O±> hn£’,eaA9¡aÀ3%.¿ò2 -aXòî‚r¼¥œŒŒ¡}o®‚üؤa¥'ꪫùƒgñ¬7êŸ#“B¢xžH£BËìxþ’g®¸ÿüšÿ³µ:~LÆüލ¼r'Y±Ã¦É€j6Ûo¸,ˆ‡Ì½ñç?clÆÈsfòJìÆîƒö™/,]ðáçäÃAw­[üîsOÄ&9>üà¬ÂÚÅZïÙÇŸø±Ø~bÿ{%Œ¢qo— ù[DŠ=j²¥MS/æFm†;k”‹é•P›-<úñ9(^Üí’´;»s8·6õvàŠ”ì#£Æp¡M9Ã'eàìeÿ©S[Ìe[̘̋O`Ø¿,võ²2 À/'vì¢Â ŒmXäªû#¶]{ýE!úâG’IC«Á‹à Š{Ÿ1Å‹o"»æ.17§[ÂÚŸ¢U½ ýH¨ˆÈnoom¸2´®ŒìfþŠe®&/Ís‚þñ•ffÄúIýÖtòK{<¦]&$\âOÜ’Ž¹Ë‚‡L ®=@Æ´Ú+\~ „¨F‚¿´ÁºÚ$™Wã3ïXþöUëð\HuÝ7Ì  Xæ·uÕQ4D žË΋$ŠÆ¸i×»éW#~?jÄqN.ëà+@2Àó‚^0<íkVw9b½3€DáÜY¿ñÊæýyFÄ…`ö]YËþ½'0hkjïýÃã籨úxcÕ|~"œþ¹±¿a?¤µè¶OLdÇÏÒL¥€pÃkÄ…ñ Iœ³C ñˆ®Ù­ÔF߀0~æÎZ ï°“j-©ÃýHägTš¾‰ÚŒ†åyp–Ý”ôÕå3Y §@njSG0â5§kp#×ÑW…P>|iÑjKôí¼|ŒÅã²Ä$ˆÌŒûâížH³… uF57\Z‹ØðØäá¤~ÉV¬·Ï•­:WÆjMk-óØð* #†£FõJž›"Žeõe§éñÌå,òBä„ÀRñÁ~ÙáÜqR%š»‰Ìµç±( ¾»WyñÞ=o‹Ï*N»óœ-BŠë…»lš:2êmæG&¬õ1Mm ¬OTjEÉÒõe¼Øî˜1ÝA5’ìªí;:‹GÀ¦l§çH¶9žy[ðwð<¹<œžóHd2ëb‰Ê©VÞÃÔŸû‹B<^í&ZF0Ö»OÎ%[È¥¥>KÌØ%MíOåªß»àåIfœum%µ/öKiÁnAìUB²”~¦¸Îö¤öv¾ÆêÍÍ«§ž—uªKL… × "4²ÂL”.ó½ ñ+H~2Œ¢ Á!´Ì÷g­å)nå\ò§Æ+|ú“{[ssù'Üãj¯(ŽLµvÔùƬ¤ÎÝX”à”¸ÙÊÓ $›zûø¸ÔÝÇ0%ÏÌ)4…½‰n"ܯñG<9À)³ö›0šá©Éð}U xq ¸XLƒ½ú¼!N?húæõÉL}ù“Tzà þÊßÍœµèß3^ÚY[Uì±šØ Æ²ÀäâØÁªZ·¯²fÎç±ÇfúëaézžCÂ눲ct™n6œ•ñW2ýà2AOAÎXù—¨UÆ8†m¨¾{i;áK¤ÓmxD¬¶K:'¥¯«±úÊXjòÌ„™1­›•¦obž™,Ωn8Ëë¨ ŠÐP%½K©pÝ~vþ¼žê™4 Ýf2¬‘™ü<=(±8Ò51i/ýÎÿ*Š—îíˆ-2ó׋‰žäÆvRºb^q}l`t)lé7ædç‚ÝÏÿ2'©K¶µ|ù¿u%ùaÃ0â,É<ÓÏ3’ãn® Äô«ÐK]S†‰ržoþ~VÁÅ‘O¡‡1¹£ÁYÒ0ŒÔ¸Ù¿Ã>«Þÿzìžv÷6<ÀãmƒK®}upkcLÿ{÷Ö°±ì¯½F{®Ø<êá'ÂBëNÓ+`ÀBòÊðPÌÆF—í.¯,YüÍŽhLj¡Žn¦Í óã­Íí/(éøÁÆÎ°[’mölž2p È™§t#æ£Kè2l dD˰ý/1ÆÑu……\AQDú]è?>b?XöÐ+þÌ/X{ïŠ:¾æº²ý¶TñCüp`oMìibf„d™å|ºÏ KhÊ bÏ- Sà æ,2a•íhPaéW+)Ë›Œ«þ*mbrψYjáÙŽåÒ îÏZ{¤–ï œ[ÕÀÔÊ“"ìÂÓ*½V މ)¸ïŸOÝríP Á„;sò„1c‡.ú§Â0Ð#Ò¹/)ξRèo fêc|W€:¡¥×XFl¶W4Tƒ3á4:“ÍT$,cÀègÖ~gx½8® “”ˆ•AgÕ½BÄ w ØŒáÐÅu-úöOÙÞ¦†Å©ÜÉÉ“h ßþÀß°ÇŠ¡òäi)UŒ•4¯ØÂŽ}3ü°®¶¸l¯¿0oéW¶­›7Šø Tñ°:1_XZ*ÂgÜ5Õßßnܳ,yP໱èÒ|+ã93ëv$ÃMÌ3“Å9»£Â›§5X(Z)0F¨Ö]n– Í£dôdÿª@Mö´Þ¸ìjë ÄHð³øÁ¡§ €Yb‚Ül¢LG›™kÿhE㜵/…ÛGÏ™æˆL‡×7ÿ»¨©æËáÇ<7“gSÆMzpç¿þŽWþ}öéÌ…U¨3Õ˜7GÀv[j¨ë‘ß~óÁó¼ŠGîèùó>7ó7~ðNþ©Oïšùzv çõ¥Ó¦¾ûìì„÷>qÏ[qŽ6Ƕ¨cíWJzvùÑò~øqÙÇiwR†£_„Ú…&㯋OL‡gêOô2üü?@¿GtCem¯Ö¾±©U5Î#yÎæKSSÝ!jÔ9‡´aƒ ÝmŸ¬æHÌ‘Œ f¦‰ £(Ú«ÞËìô¡5ù4¨ˆœž™ï7^ž'SØ/»¥8Ôö‘ñ}:ŠkFáí ó§à^}S§E>©?óÝNWS goAƒ_M2[y¸ Ö{TÆ5>Š4+ ùUQZjä2¬ñbà¨&J—©OÛ0iœO|Ö ú>…ý$`Ï_<'º—§ŽÃX§KÜÜ{‡`òUVÌJâ—ï‰#kRôøôó²%âô'Ä”³ò&–öµ]iÅçX^˜úôö—é ôê´ò sñ“³çtgÊ4"d3&ÜæûL€ó‚R$2  qMàñ«y5Ëå¿«ÿ+²±Ï|ôÐ Œ=QHrT†H&Ëydö›C³¸²òÐqn}—é4»Åz—‰£§”ç—–]ô‡ LX8qD0×MÛvq*Ù;Œÿ(Y·NH`¯Ø‘Ï ¡õ5³‹¢ŒeE“š™u_5?0Z™*++|]XXhµZÃÃãÄÎ:«Ï(°§¸¼#Ò½¡úXÌïŸÁè†ÉåΊg«g!§kϬGñòÑ•[õ†ñá¼Qó0%{Ú¬Mšö†ìË¢0Ì[êLfR3ÿ!²f’:ÛZ~%w“)ØÒ¦)Z­ÑÚg¬KTˆô´‘飹—-±¼A±Y“󯤺 ¨\}q¢Å³îœÇž\;À iª&‘Ò 149ê7ÔMyúÝ$ª$©«)ò§TÌtEf^ ³F÷‰¦¹+—(a çoaÌžÞõ¾~Ï=o¬,^«$ªñŒ¡š$geçN诋åÅ*£ÅvXZ™€´ŠüPz¥OÆe6n˜aÁ=ýۣšKAËîH°…Øøô€q(µ]È„X[­<§†®”7^ù'c¢q.>&cÉ̹~n¿?Ι¯àO^}^¿6Ç¥}»~¼°ÛŠØðhažê~ò²aS¿g‰ÁºÙƒÄ0¦ ¸'‡à¤EØ6(¤^¸/|þ·JªþŒŒ*ÉMÇ•e^­·7ªÄ¸Q^ŠädÉ6žÇDFÚùÆ,KõZº!Ý¿×m@²åK—ɪžødÛºê XÀË– IDAT»(€DÇLŽÈ¸ëç#g!ÎðFø½ê¦¦¦²²²ÜÜ@éŒÿ/Ÿ5 3 EÿÇÛÕµu]é+ÄŸè IÈ`0Æ`°1'výÂf³ù™iÚ:mÒxÓìÌfÛdœd'ÙÙìL³Ù¤õ¦iœÉtS;ÝÉ:›Ídâ¦ë8vü“˜„`~m Ë ÛD!BX2ÂHH{î=O—‡$0qìÞÑܹzººzïé¾óÝsî9ßáNù ¹¬nS¾ ™Ýlî|Ùø 1 &¼? d.z3Œ¢üœq$ú¼ÁЕ@Ì73¢ZF·Ð¤AÌCDLW؈Àˆê(PEs¤‰•³º1=1çÓâl#Iæ•xÃ݉$FÑ6SBò‚[õá`³ÛPLœ€gV×—M®Ž~}hE¡‰ì ih{ŒONŸ¢šwˆ‡½E´:æÁ¯¤FŒZ$ƒÑ¬É%š‘0 }ýäÞ¹Ò¥(jèM€šÙgÏÖnK¼azæþ‰G2<x†ÊÙ Nø£{\ñ=•©ü@2“gã¤È\§´ Oåj]{8òhf÷+°âÀix†Ï“"HFØ$ÌL£‰ËÅ\·¼,€¹†¡Æ­SL¿¹PymÏž ž“½ž„Û`€Ü’û±Í¡„=—^Ä÷Ðy¾3“) ÍÎ;{°³ð¦£):V6 VÃ]F²¨wî ÷–D$ƒßeÙ´ì׉—xs}ôwq×”—|—œâ_Lˆd„ŘŽËä^£ºcø|ÏÛŸ4=þWK%ÐY¤ ’…ƒ¬Hù,I-›õ#,¥Ù<Í,ê͈šÙBAå1åî™ñ83îÍHË¢ûRsdw õdÆÀ›˜Ò wh¼¹#ÏzOãýÜÀx[Œ±12³Ù¨Ô50uZ¼Z†Æ53¨±bÐÇ3€%a Ÿ®BcXLbOÔ¨PòDßÂôZ³õ‡k çøcòÈ8ú+q`5ÇHß¬š…³¥ÙGsü…$SF¬„¬…×%[{²=,ÍÚÔv…4¹Þ­+y®02[èh0YB1¤‰‹íöG[’1«#âQHd2+MA–ç×èq½Ô‹>`‹x¸AçÑ=3ÔÌÆ7$f·Ë_Ä;Ìáj/ÈÇQQkid>]H¼fÖßÓÊÖ_BòY8î[E Ðx¨žO|%ÖÉö‘u»ñ 6þCBÞê jltKJdŠàð2WMûéOt·Ñn€jäÕF+¡–6k?{#p9âh01ÅDRǰìǰ„Äó†þŒ‹VæÒˆ× /YCÅD65´{™¢Ïåóy„¡ˆ‰ì(•SHËÑ'ðÔ$-TP9Û­8®{äáøOá䝸þÀ,C•Ž4 Y߸4¯fŽÿ,Xš#;G½7\E_Þ¿ì ¥$Ôfɶ˜V¦^Å–a¸ÜSñ\ÙGJ Ån£O"À˜y"äŸIŽOÒ-.pߨ§q4KÔ×&À'ü_¯9BÅèx¿Íx϶›¢jðòhþí?õÅk{ kB ¹Ê†Ñ£LšËW—3^CìÝoK3UYÖÖÍ£Ùå4Äæ-@–ÿm 7ŠŠ‘ VZv‡S<ŸééÅúFF˜3'Üío•O\Ž|Ý$¤ÕfH?ÒWƒêˆ’8ãzŸ•'©©zHñÌã¸1…küäÃ0OPÙÔ®$ãAi4?'KÌû¶·däåcœÙÒé¬naœ",ú†•t¯/º¿³¸Ç u‰Ûã¤Vè©|«Ü@Pí»y,ßtÐ9E±ŠG˜‰;$àñP>_ú©F!¢̃+Á%ú[#“,9PÌx rŽ+ëÊ ðd"’µ[Ó’\µåõpäìéÖß¾×Q¡ù8§z×]E½Z“e‚yQšU•Lp$ç¬Ä<Å áO0ho aáæî>¶¶n;'釧Ñ\dÒ”Ôà/Âã§5•7v;á4þÊõéÇz3õÇ«.Zﶆ¥ÍtKXa$i³Þª‹Ù[“VhœSðEò2(jrE-†¼8ÆU$žì Kƒ¨ŸÅhiÅ…+iö¦t"c&D;1EŠZ톲âèæ¹xL˜Õ;l;êBVÆ¥¸ñ¦ÑÆ–eþv¯ªsn•mY­ ƒB†Ú`ï†íôs—pdÚÉT—ù¸µ‰â„UXJ¨F»#8áë#Âéñ ­øòÎÁC$ c¸mf¬Or‹ù—1m4œÜpè¼P¾ã( s ø“e»8¡ S$j‚ßE ãûaØGknÈNe3Õä—_',úxÙg»ŸaA–'¿lÅ)mQ{á´I ½Ä‚»t§ÚÚoI†d°Ð]ÐÞ}îÅ×~·wÿÁ5…i¿zãÍ÷~÷&æ²´7 è良àëð.qÇc »b;’*™¢#Ä`ÌL( AˆÚ„XÊÖEݵûyÀ¿øõ‡ð6H­4¤ò6Šg/½üïw6l¡|Òj¸·~ý^…Æ9Ü÷ B­ä®{Ü}m©Y ßh™’ô´ØÛBæb%nÿgëðôf£~ˆêyiˆ"1ZZBÈÅÿ®Ÿñ! ssh›S„T¦\Ÿf$;°vÛÁ^ ºa檠oz\G›Û·'Ò'4Íã£K°1bI˜Ã ć"¢úF)GUÌ7ÃH4ö™0KlÖ,pžå&A5A²¾¹,$Qµ qw¡Œ\ŒQbîá/£îg‰ÊÛï~Àó¹`-W(*½=¾'Ó;¯Y¤Ý¿=—ôo?Ñä&.ÅnJ DaÃâ¶-œž¦¸è"PšM޾ÏÕ"mí𤶕——‚((}Ž>qµ<ôôîÝðö±çÚpIˆR[W=Ó×=¦Ò>ùØ#ï¼µçñw÷/v‰ æ°:þÙ‘“§¾VYÖÑdoj®9 `ÕT›àl?:¼/ï‰'1»),(¿:D)<(wϪúmð Â8Èœ‚®•1Ó Ñœç;A£½°[ݬL‡…%Ýœƒ*¦äåv 3;àNó›F§ º à(äaÚÀ9Çí!dRÍÒæÀukdKIÊIôõ°.«z=ºþ#‘ãŠ1ãiMº˜ï þ¸ÃS] úŠokf¼åṵ̀ f`‹Vˆël›1õHœ,*>æ,ùñ»†‘ø‹ˆ 762?Oü:hfÅá£% Qú:òt ž"-áº&‡»Ð˜ÙqfDKµóÑ®fÎ]ç\#©X.? (eo€UÉlSû[¸Q肊QdÄùÆ3ÏTï"þ†GƒU<À¨WÁ“/‰n­ÁC+ì¨1‰@%¥J øó'žì~ÿñ÷÷=·û7°`|qï^6˜—+ þŸ|éÏïïy }ýAÁ)‘ô<ÏôtW–Î>ððK®ó³}û~~‡IÛèqÂóYVý,¡y°t’‹¾ågšíÚäŽ#§2W "zŽ]´& N"±I¶b°m‰ô ³8Q"Ç(¤4?ªÆàz›·§• ;@:õ¡þ#£ã_¿øÁ1åÄvŸ =õ¡XƳz5“–œu1¬vÚQ‡[g‚ÚØÈËY7puðÍÏœU†{T[6ñ{¨ý’㓪TcÁf².9¯ˆ"‡±žû(™žðýâ´Ojû4){k‰‡…E]ɱÄdÒŠWË@î<}éíì‘0Ì ˜0“¼~‘3(ÐCÁõy²öYÚÒÞv{{~ŠVGd¡ƒ1 @•½¾à{GOœüßîdtVÄ`¨‘’ʬªzç­}#¡**R³Õ#¡T€Ã_øã³;ï{ñ•×öÓŸ|ý#Ëu}+,Þûìá¯Î >^¿ÜtÇOqÝ`®5ÚëÊVDÆõ°žF>h‡äŽ€1J6Æ+ˆ†3 oTßLòÞýÿ3ŸçWÛ$ÉmhØeÞIåû˜«­7\ùGOÀiúퟞøñ‡Ž¯ÑgN ]õƒ5Up™ÖéáäÿóÀ?Ûù}ñµ ÖnÛQßri wõdQãºxŸ „ÿbÖ.üYðhÏ`™8Ûë¹ y1.«+ ¨µ–F>xí#›ô¢pÌãw~±—T Ø“QR[d ¤W‡˜c‹S½’ªbÑ­A±µ\p3È(€½Y?E ÐçÆÄ½Ïßb¡ Qá`¥Pú0!ÿM(7MØ+•ZÂÆ`Ú‚BFalŒ­ Y e%QÙ+ /CÍìÛšÿùÌàl`¶Á¢`“;D”¹DIÔŠD…~LN6ž;Š_!ÝŽa*špµ˜Ðåù$¢\8D“‰yŠçC”¸¡¾:4(vÖ_RA’­ùÙdlc}Dî‹D i¢ä/ð‘lØJ(bPÂz4ùeÄ4–Àº˜½•z‘Ð$@É+=ìê•VãÖš…ë57Ðù§¢ºÌþð²ÇK$'½µÅ–l·k4Ÿówàó¶ø Ê;Ä6܃™Š‰Ó$Ñ@7˜÷|M<Ž$B_´gÔ À`^faí¿ž¦èE&_€X‹ú‘Æ®C°ÎݰãÝÃ]£É4uøTxòTGߦêâ)kÑ݃Y~Do(Ü=­clÑÊm¾ÁÄ7H·xÎFqòFƒ78¤æ?&*^´Ôq§ „4( ¢mo¦&ÇZ²ð¬v%µkYš‰rƒÞ×ì‚ÞbÃÍbMš]€gИ¹0é]ó„éÊóÓŠ£ßŒý}RÖé E}FR§¯@x,9’-Ï“Ì 1âãU!§¶–Þdí%/aÊ}árX79éæ-ÂÖ ¿^ÔÌðü¹ß:gBÁ(G ŠÁ䟴1oŽ€a¹¤3D¨Níd{¬C£°Be É2tÕIšt“íDO[»þžÝÔYqUrgqkJ¡D_Œ´…óÄ#vÒjÐÇÅ=¼•hª®ë‘"„ø½:C7 ¢Q0 ¤áƒQ“ D¿ ï‰lªã+f0@X‚ìŠ9Tîá 7¡Èøl^ù…-wÖàÁÓê‚]Ô¡Ñ“ßé"éY™²Šh×^QäÕÐHƒˆYJì!hÀE!É!¨ç®…íxai¢Ï&(ýfU¬¤¬­øþ¼yx¾p*ê ˜RUY»N74¢.kìjÝ®$r:,O‰ºæAMhl6Ÿ´¾ ,¾o€@„™1sÉÐIÒx¦÷WNÆfBì–üœfñ£´ÓƒÿKŸ>ãeÁÔÔHhòÒ´œ]€ŽHü!ØŸSªEŒdisÞpÕÆ²·ÂäÄ2@2Læ‰ibhêÙªreë12Šر\ ‹ÿûâr ÷Ì M¹bªœiÃgƦ‘ÖMi÷•6`ä·“§Ç|ý00×6à:ålÅÇû@ mè9o({ ¶Å5B#ÒBb~Jü#G<2ý¢‹ê¹B„:û¿ÈkÂÒ_ñ g³1uäc›gbå 2>cÕäo†;fÌ´“»ÃƒÙ?Mt3ôïÏ!å¶’­Š'‰fèð`ö‡<Ù”"aSwSõúÏ]tîêeU¹‘¦nÚ÷{&(Ã}°·‘µæ†áÑ/f­i•:[Â4²Dä¶Ö`–gæÉBµF/Ã]ä*äßåÌÏœˆB—z½½îAÿSÈ@ˆƒŠ¼ÚMkè“j0 y÷7ö¬€õa²ôРœ!†Aj¦Çøgå›K*ýä,{ИÔÞß:ùX½ ,B7êW¢¦œAèWX=ùK}„m¬c>‚1“ÒÒ-kë·üdV)I‚^…ë„LëgÛ­ÐöW¥N†dz] W:[Òâ814­ËºGÒ3…ײÌtx ý KNX..9¦³ý$+#t™¤eeÎÀ[8ÖWéS.Á’-e¼wY‘¾RU¢;{Úß÷û!ÅvKædxÚ—§ô8†F»ìÍiéƒ.¤”¦)¡µø-¼Väk¬ÇNÙ./Ï‘æÈ‚«ªn³·}òESó[*MæÜ¬´H¾:ãýæNã5Ç][7Bøºdbp¥E°6dL;ÒtŸ~øvuù²Ôdùú* ñØ'.uvv4ר6­Q¬Pådjï…Á V¬JÉÞ–g¸=5D5†©É™Œð7’‰wæò”$ Ü1­täÑè í’õ|`bŒ¯Í”éé|…’ä tÒÒ„Ú>:¯Ž|Ð ð-8I>KÇ\#SWý1¯ æ–)îmþ¹Ã?‚ÎÔ‰ãª?dQûuò€9]üJ Hï+œÃz|ƒ&¦ƒ?E©÷¤e)s¤Ùe¡’*¸Å°~j:?EfŠDðeHU¥K*Rr }³úkD1ÎL“é‚W²˜T‚Û.Ÿ¥Ø–*K嵸àÙB 6œ†ÜÉVÏ…àe×ÐøUXF\VW,ŸšL^^4)+/p§¬ÓxîÐWuþ{ç\ÅqæñA\.’â$ã`Â,±×`Œ6v å7®[›ª-˼â’\•}—áÅU† y&ˆ—}XÅð°[µÜâª-¼\¤°æ$°ØÆ pˆ‘ˆˆ°wÿ:êjÍt÷ô9gΑFúÿJuªÕÓÓýõ7Ýß×=Ý33ëöê±Ï,x0sê'™-3÷;0D»6éÁ_?ìø¦]ýeñŒÉ½OýÃüÑ]Óª7M(ê«»ÿÕÙþÅ‚Oãâ–ºG•uþï¾°d!ÜÌèqþÃï–VàêÿËkÿ4m샻cŸúæÆñ'k–—üí/W{ƒ%óç|Ùöûi3+1ÃxiåÊ™¥ã&•<ü^ù˜ ûæšø 2îJþEnÈ¿zÎãÿÓzó‹oÿïGÏ­¢µH¤Š‘1Úü᫸óMï¦U+ IuEÅåó ÃüÊTLž²ð©éS§Ì8×ÖúTÅŒIF/š÷$:デãsíæÍÇŸ~nNÅäîIÕ3Kƒü÷¸‡‘³Œ3¿ð׎[%£Û Þ”òQ“l|¢òKÜÓqóè‡'е+«¦Cugo݆+3öÎÄÈÿî7Ïöܾ  Ð§~P ¥A?ú.ÄÊy=ã*W”ÝøÓÇ7°è§(Ýÿ¢Ö·O˜5ñîç’¦Ædlïíï=ì„ÎQVÉ··`yDÚiãï˯üM½óMۦìGHÖ—Ó¦™ecº~ÿméÔà«Çï”—a°^QúçïŽûþ½¯ª:ÿ:¹´ëÊô’0Âe¥÷ÅÂcL o¸VS̪Y†·>r4½½]]]óæÍsx«¼ÞNŸ´GY¾ÒdÞïbûFŽ 7 ²´°1A² gd+¿êß|2Wýô?ÿãRŒ1¨Áˆ~K™Å¹Jdò@@ýª·¨pßó›÷ÿ"9ê1‡ÞÊ ¦$R$Q äW"UXôAàë1¶x=FCÄ“úÊ;aåƒU™7Rö½{ûÑk2›N^]AEêU² «ÐJ€ rÿÐño`ßyXq¦S=CæùQ¶Wܘ$SÎÌñúÀï £®_wÙ¸«W¯º™z£UÐÿ¤¤úPgß›&Ý‘_ÌÍ««J$ì(NÈ›:mGC9GãƒGo,}„ž2è_ÞsdÍ-”8ôïô ïÀþ*率p"ˆí°uõ¯¸CåöBaÛo0°¡Yº@[âP'Ñ»‡z㜙ü—dzN }–¡æ}/Ǻ‡1 4¯rHzLTø¨% ¥Ô=œ£Ô"æ^ƒx5…ŒrþV¹TVX£¦'Z)›Ý¹ÉÖ7PXøm¹(6\þŠ£'¿Ü[1®ä^Ç%)e_»Zá—5ÝÁráÚß[ ô1²É ã#_ ‹*Sèçý¶X÷!µGý™J¯Ô’ÿfú´zÎ!/u0ŽÄIIbscz¤²*F7z¶¡1´úE'•—7Ê›*å·}Ô \}„qeűõ­ƒfÂrèúô¿Ãl y÷céìH³¼yõò€o8÷ïûPÓ2g¶b…ë™î|gfÁ@¨Ïâõ{5qêב ýô诞Ƒاw8ú¯°lù"¹ÞAf«´ºür™%P¥­pëzoO%L(>Ô ÜÿqCQ£äÆî§æ^¾¸Ñÿ•úÐgä9!õ>kõðP/F Mªô©Uh.¥ì‘Lªt™ÿ*rrº]3Фésñ¨Ýqx¯@iR‘Ñ$<ü™ ÈïGSþ^ÖçÕ£ r†îùÔ¾¸Gçb`Ñúì×íNõè‚»#Á¹ËxfÑ“º>cõ @+’>9ŠÐÏ•â‚ÌëåHdÍœ[ÏÁ=_ É©êˆU8è§õ *¯Ê|úéšÀ2ZŠFúTAïƒýa ä*‹C’%^"Õ°F½ ”#m²oÕ°?õH½§»=Yà93ëìtíP?wî\¬3 "þLG}¶GD×­U(Ò˜Òvºû¨#+X(Þ–Rý‹F£¼— UÔU”Óuß ¼üê’KJÕ&$^at–Ñ£zL  ŸõüCJð±J>6E%Vö.*¶.˜ª¦ZÁV/A„l Ë ž·ÕÛ˜z6jÔäI¿ÁèöaA䯠C ê*¨ÄÊŠéÈ6ðT¦uA£nÌÀ“Qëßng-£ßéqпÍÇD¼­•Fs0°Sôu–ˆ3 ÙÊP@€ti5¸¡9‡ÊDó9zMÐï·ô"ôSôRB:Ñ3qkÒÖ¯çΞ { ìસª²É8ª—nëÂÑêGÅÓÅVïÚWGÕM”µcŠpïH¬' úÙ+¯¼âH“ÀÌLápiÃeUC×/„ž@7â¡ã“•14zX‰)Ÿ4!1Ä»;²²å)-^ÍÆúªÐ­‹»vºVC^-И±šFÛÍ9ˆøfã¹VMy*(„´¢Ü úÚÆ€=Y¿Võ}äú ̦sÛÅUdÕTL`1÷¡Òý_#bôX±Ex–èn!Êå}ƒgÑÆRà¨ÔQ屿fžš¿ÞýV ‚ŒçÓÿµeîˆtHî¯Rˆ¡vW(÷¦H³åIDAT %]`7ÅX33"Š‹v Ϊ]*¢§‡òÑK •nŒtKåèÒŽ&žm¥‚¾Í+}ö½Ú-^l†Ùú’œÉVyâ¾dƱ¼OV9·lŠr_cgÌꬂ2`ÀW°Býu¡¹)[O— tK!ïåïRG‘ÖÌ!„ÂQ¤ï™B!…¦Hïf$„B G1ÞÍH!„”¾›‘B)üž!„R¸fF!$õ¸½UÉ7NŠ&%qÓÖÖ6è9¤]€´05«LrÀí­JF;ñ/f± uÈvJõK.Ÿ<óŒÖטInÒnÞ¼9l9BcFÞ{ï=”%:úTa˜Q¸k=ÌU&9àöV‰­™]ºtIèÀ*ìyJRE.E®u*صk×öíÛ7lØ0Ø‚BRÛ[•|í$)!öîÝ«¦k­K¤·Êø]†ðш¼q£ï#°8„4’1êÕ&’OhR¸iÓ&9Šô[·nUù;vL%ÖÖÖJLCCCHÂĈEŸ?¡ œ*4ª ½‚ŽÅªO—WDß¹s§1+ÛÅBz¥y]lø3U®:Ñ­IÿKæVÏP×Cww·QÚ rÔVýX½@iu¶kÂ&¶±!%®‡¨þmjqÛ¼mº’ª©:ª4ÆÞJ†%noU¤5³3gÎ>|“ŒÓaÝBGeüŽ£;vìØ²eKèèòåËqzy·–d%¿ˆ×“]êçäÉ“³gÏÞ³gÄ#ÃeË–É¡ººº7ß|SÒØØˆÈ}ûö!¼ÿþÊÊJü 9­‚§YqðàÁ¦¦¦Z¢ÚÉœTÁ]#¡Ë]€êD‡ÕÕÕ°ѬŒ )ËÊÊ$(DNÔ Õñšô¼dni+3Hæªv«W¯†œFi=1V?Vo¶¨ŽÔÔv­ubR!ô ëß¡G¡±ÍÛ¡Ì––D¾ûî»ÈþÒfOÈp¥HkfnàZиpßqZ³fÍ©S§B‘hÐW®\ 2MaüJVÀ˜ úò‘â2|ýõ×%¬¶mÛ‚Lo2ævSþUŽ01|p«Å¨ wò,ª“atpyuñ0ye­677;NŒÕ¤ç%‹•výúõº)Dz¹ÄYIkC¯~¬$¶H¼íZë8Äv7¤õ ë߈ªˆ­ÐhÊe¢tDâD„á mõ%÷·*ùŽ“¤„p´~ C­ÚÚZãØPÈ£5«á¼qJÔÖÖ¦wQ‰‘óÖ­[C·>t©ÚÛÛÑO$¼páÂ<ÅðĨ·6[ò,JX¬qïÞ=Oñp¢Ñ>šô¼dniaéndúçre³’6„­únIl Œ¶áÛݿԃ­ ¨Zl…Æ6o‡2õÒUo%#··Ï™a¨UUUÕÕÕ…öÝÝÝ-c.úÚ7z‰½“¾aìWo¿ývèt¹½£‰?JY»vmnBf%F>¸µ$W##±ûSbÅ‹%V“þŒ•&YíÞ½ûСC¡™Anت+ÉànüI\!Œj1êÓ~FÔ&)âO:ÞÍ(£¶òòòÍ›7GÛ÷óÏ?¦_SÓ÷ARü8p@Â!öïßøÐT ÃÀ“'OÊ8NƉFfÏž®%ÉlO½xŠ‘?nmxÖ(JKK‘a¬{ŽŠíeU[“žô‘výúõð…Hvüøq¥IiåF«+‰-âc%Qd«dBè!DT-ÆB)u<!¸½U‘ÖÌܨkrÇ) Z?úƒ¬©à·¹¹9ºRW„ñ¾±oÈÀ.*º»D‘£ìû@>õõõ9‹‘?6mÈT&ð®Q•ƒ ¥<(aŒ ÔŽÐXñ0ÜVw°Ùh%€[“žô‘6qõêÕ¸ ²û VZY¡œ¶rÕ•Ä–ñ’~õªÆ+å©d#‰ë!„Q-ÆBc›·Ïe%#“!±fæfß¾}²EXv:Eˆ¥“L¼¢+U èúÝv‰ß½{·dŽnZKÓ‘•d${ñÅm÷a|ÄÈ£6 ¹-ð®Q=È E´×ÒÒÝ´fO?Èx¢.€[“žô‘¬[·îÊ•+ú5µI+[ãdŸº­ÜØê%±%!”ìA×#WÊGÉ’ÕƒZŒ…Æ6oÏËjcq±^@ŠÛ[ñKÓd˜ƒ!?Œrì^ÁaÏ èÊ'‰àõ¥é!²fFHÀ|¸ƒAÒ•O„ß3##—Å‹WWWg{«jø1(z òI²¸½¿gF†3Üä- Ѝ|’,üž!„Ô“ŽçÌ!„\3#„’z¸fF!$õpÍŒBHêáš!„ÔÃ53B!©‡kf„BR×Ì!„¤®™BI=\3#„’z¸fF!$õpÍŒBHêáš!„ÔÃ53B!©‡kf„BR×Ì!„¤··*ùÆIѤ,mmmC<Ã!K²59zš }ýHB=Û¡¯Åí­JF;ñ/f±‰U)·œ7oÞœÑï½÷J_±bERæ#@Nu*çØ"ôÜ ×HB­ 7žZ*¨´Ié_ÎÕk„ÆMQ Ye›¿žmR7[†H;L)no•ØšÙ¥K—$€«¥ÂÃ]»vmß¾}Æ )`¨]š¡&OÑ–ß»wïš5kÊÊÊ[2õ Õ¡X=[ljjB2TJ°i#T¨£.!Œ)mÂQ£œP÷Ç#}eeeÔŽØ”l«Wn-305B›´Žd0g¨>…âsVWTÿh¨¢.=½O¡%õ+lذ>IÌqc†¨—\ xtöìÙ•0ZŠ4†Lrݺu¨¸1M´âþýȧíeˆU ±ÐXK2Â)Òš™´o Ù$Œ@ss³#ñš5kN:%aôs¹Ÿ†«Ž@tddK€€Äë¹Å¢'ÎJf4Ö+W® ÐÒÒ‚0~% #% í믿.aP™ãf×§¾!BêÙÚ€íÆ›–6Õ9ê’sÊÀY·œQpº¤‡T…MɱÒfÕ2ïFèHfódA¢ê2¦÷©  Ä” aÌå®_¿~ÿþý8 {ml®ÆR¢ÂC{ÑkíIžÊ4Ê«@c¡±–d„S¤53ííí±iÞ}÷]Œ…ÑÐ Ô5Ɖî[ ¶÷îÝóÏV´è‡õõõAf<…ÎÜÐÐdÆSzÄ¿h”0O2æRè8¶¾!BºÝ˜#Q!luÉ'ežuÑ䀉¶‡’ÒæÖ2ïFhK1Ш`ëGT—1}¶MQ¾pàÀèd–!Æ µµµ8ŠLÅ-\¸P/"‡Ü'ú(Ó(ƒíŠFúX’‘L:ž3ƒ¥¨ªªêêêÂt»»»[Fc×Éó_H·íZ3šæ7pºôa ©ž€q2G‹Ä e­]»Ö–Õ ï ˆÕ†]üS£’mÒæÜ2óM¨©© †ãúAÙR‘så~é‘#G<3DíŒK›i'ÆZ’Îà¿›qöìÙ>Éd€S^^¾yóf1¥¥¥¸®Ž iK€ø¬$Œí)³âù矇±«©©A¿œJXصkžb’Œ+ Jlw}Cd+¤'QmèxÖ%«”A¢uÁœFª`4‘6%;¤Í¡eÞЖLnu¹îܹs÷îÝ¡£ºôºTY5Eœ…Àþýû}2D2Ì>eÍ,ZÍXôkmÔdlà òV¦Q†XÚ u[’ŽÛ[cÍ -[­"`lsjÿ˜~‡cRµ ŠF/›tl d!:ÈܘÖ7Éǧh™õ Ñš?.·¶ñÛÜܬ߿Æé2ÂB»w숭oO!³Â¨@«©g]Ü)£"ÁºÔ××Kæ0 ¡£6%ۤͭeöF˜U2=“!Ÿ§ºŒ!TnVM1D]]]h;†1CˆH‚çFuÇ+¡ _kýƦ¬Q!GÃSá<•i”!V¶BÝ–d„ãöV%ßq’ˆ]âbË&TX ã;DÊFUÙ<=±¥¥%z¢-ú–lŠÕ#×®]ûâ‹/f[´Mf=Cip2@“­w- 9¥t-ÇíïØú:ÒÛ„Ì£6ôšzÖÅ‘Òx!r¨‹mMY!s…µŠömJ¶I›[Ë ,0‡d"˜£Ù^z[G°åïÓC`‚ÚhÌõRSTS–‹<%T)åZC êªÉÎCÙònkxz8Ï~d”!+Û¥ê¶$ÁÈ~ìÚí­FݼyÓq2F£“&Mš8qbÑÄ%Ä“†††¨¯Z<¬ŸÙ'ddÒÓÓsíÚµ•+W:Òð{f$­ðM„Œ(ø=32<Éaß)!$½¸½¿gF†¼ÇHÈp%Ï™B!ÿ93B!$O¸fF!$õpÍŒBHêáš!„ÔÃ53B!©‡kf„BR×Ì!„¤®™BI=\3#„’z¸fF!$õpÍŒBHêÉwÍlúôé&LHT$B!Ä—‰'^»v-ß53x²ñãÇ'*!„’noó¥é ó±é3f$*!„âËùóç_yåwšQ±;w.ÖçB!…àÕW_M?3#„B†8|ÎŒBHêásf„BRŸ3#„’zønFB!©‡kf„BR×Ì!„¤®™BI=\3#„’z¸fF!$õp͌ĸuëÖ`‹0ÈÌš5Ë3åùóç *ÉÐç‡?ü¡gJêÊGW^ïf$„ÄòùçŸOœ8q°¥dîÞ½;oÞ¼ØdÍÍÍO<ñDäÊ\¸p!öå¹u•ÁGW|7#! ÐÑÑ1nÜ8~ù´··Ï™3Ç‘ µµuÊ”)î4#„÷ßåÊ•ŽÔ•"VW\3#$ÆŽ{ÿþýÁ–bHkU¦M›Æa´@]ùãÖ×ÌI†žžžÁa¨kU0{{ðàAq„âøëjÕªU'Nœi¿þºâš! ‹ÓÛÛ‹ÉÙ` 2øÀ©»—ÍÎ;ëûì‡~X¡†ÑúºuÅ53B†4ï¼óÎ/~ñ‹hüÑ£Gõ+**0*//Ï6äó“Ÿü$wùLÄZXçœg±‹/Þ¾}û† ô˜K—.åÕOúÓØsÎÜ]å)Fww÷Î;?ŽpiiéŽ;Ö¬Y“O†žä¬ÀèY\3#¤bªOæ8ª;¡>úèìÙ³?þñ—!b­Ê¤I“òQׯ~õ«W_}U÷Ü9çæs"ÌñÕ«WsËß,²úëjÁ‚9‹ÑÕÕõóŸÿ|ãÆ»ví‚ÞNŸ> gvÿþýM›6å–aVävuôúúèŠïf$dˆO¶dÉ’ .ø$ž?þgŸ}&aX®?þX–ÃÇŒSSS#Ï2÷öö¶¶¶~ùå—ˆ|î¹ç¢Ó8œxýúõE‹å)y¡­J}}ý¾}ûŒGwïÞýë_ÿØnÌExíµ×¶lÙò / |äÈ=tèle±˜øuù87þºÊG¨kùòåÊuAÐ ü™Ä\¾|yÏž=gΜA¸¬¬ìí·ß®­­ 2µF‡0«Ã¿Kz´“·Þz sz$nllT &ªù|ˆÖ×­+®™2OæŸ33µíS´¹sçÂ]!üé§Ÿ^¼xQœÂÈöÖ­[Ñi\Rž,ðXʘTߪªªÐ¡¦¦&D¢:°¶0¯ðy0¬ðgï¿ÿ¾Xax² c+³rQògþºÊG€ßüæ7Rkü"Ẻ:8û·÷Æoˆ3S'B¥P,T'ÎL\ãÞ½{12À¹¿ûÝï‹æs“VˆÖ×­«Qh¾ù”G 2o¾Hê6£ÜZTž 33Ÿ53€XÔ¸ÚªŒWô>¤MГA•••ްPS¦LÉùm)bãNŸ> “*öW·z¨ ²Ñ`éÒ¥bj‘8È8ì7nÀ ëYÅ•?7ÉCôôô|òÉ'+V¬p¤ÉSWŠÜÜ6¿ýíoU£RñJ«:6Í'2ðÑ×ÌZÀu¹—Êúšf]˜œ)»ÓÑÑÑÙÙÙÝÝ ó­Ò<|øÐ˜ÒÀeanÁª`bÿ—&7ðUQ÷0ó€µÅÑ–––|ÊM|r毫ÂÝê§3´fÐã­Bî:†°i>g¢õåš!)CüYV·çÎûñÇKs,8¶ùóçWTTL˜0áƒ>pŸ ·—pâÄ X®D•+ŽUQ7Cñ6‹_^^n´Âþ—gÍ se´Šgjjj’Û†ìÙ³§¾¾Íi|Þ™¸„>¹qÍŒô‘­?ëííUa ®_~ùeqKú¶ÆŒc<Ž0Èl!Á‰YyPű*0»˜›ÊýCEYYYÔj™ÛŒ7n„3{ë­·ÔmƬ(Ь¨8kfP&^úÞE80èDb LXeCÏ”lŒ4j>g²]3ãsf„ Qüï7“}úé§j¥ N«££cÖ¬YrÿP%ƒ¡¹uëâñ ¿Z?ÃQÌçpâÔ©Só”¼hVeË–-ëÖ­Ócà±`¦eëŒõÑ£G:#‹H™Ã-]ºT·¹à Ç>ŸW¸û{þºÊG(Jæ[ðj¨¬ìæhll”£Ð\]mmíåË—·mÛ›”|äȤÇ/ò‘µ1£æs80Õ—Ï™’VŒ[?ú™3gÖÔÔHX6ô_¼xQöå# ñ˜={Vâe¯cœ'·jÕª<Å.šU]†™†=U10¦;vìÅ›åË—‹½FŒÚ)ŽiìµØÙŸýìgbâ~¢pnL(Κ…*C¢+Œ{~ùË_ªåFÑÉo¼!ûòpç×ÕÕIzåšÏ‡l×ÌønFB ½½=Ÿ·Z 0GŒý¤Ù¹sçf̘Áo¿õôô´µµÅ¾›‘º ütÅ53BHÂø¼oŽ_žåð×Õc=öÅ_C²¡^_]qÍŒd›a°¥ÄZê*È(!ÈFWj½säüf¥+~išèèè˜8q" tooïíÛ·c¿4=þ|~•ûþýû§OŸŽýÒ4uøéŠÏ™’ œm(b­ e{N`ä ­…ºòÁGW\3#$ô'½F,¢„X«Â™ÔU6øèŠïf$$|=cz‰}1£põêÕ3fAž¡Ìùóç_z饨dÔUà§+®™’ò᥋{µL§µµu„ÿ·FQW>ºâsf„BR×Ì!„¤>gF!$õðÝŒ„BRŸ3#„’z¸fF!$õpÍŒBHêáš!„ÔÃ53B!©‡kf„BRÏÿÕ½:p"éõ©IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig31.png0100664000212600000240000007062710322727434015556 0ustar mikeuser‰PNG  IHDR5 pHYs  šœtIMEÔ 1²·V IDATxÚìwœåýÇ¿Ïô-·{”ã8ŽTªpb¤‚¨hT¢c4É/ö5 &ÆcbL³$jŒ±»¢€ ôÞ”^ŽÞ¹¾eæùýñìs³»³³ínË÷ýº×½fgŸ™yö™™çó|¿ß§ª5KA)–‚ HAñ裀À>lX»KA¤Ðà°A Áøá¼«_Må\„9µA€@³ B"¿‰¾ÙìL§Ž oNý¢¦ô†ÖÕO×ü”щùê±/ªïˆV2$òçZ_´y&M׈¸º¡È¢_=â¼ÑŠÈüS£_4ö}2=1N`}ÑæW}³ÍW{Ñf™´ºh´"2,úÑÖ~õù€(_ÆJ:µõ}9•,êCfzÒb•LÌ· ÎE#®« 1]=VÌoAŒ»»¶‰];Ä.ìoAÖr–ô]t ýŽco¹=j£ŸB@ ©¾©©â‡ï &‚ H>Û!÷Çßï=÷ÜqG§nîÎ%¿ºãwO™âð´yï»ç.ít ¥”¢ªê¾5¿í}í,AAH®;×k?ñÈ‘#çΛPú[ÿAWaGÅÓ'”ç S'©Sh;nês|}é ×<óê‰Mo•=ýÎÑŠA¿úøÎí—ÿùi¼Ù‚ ‘Øìkóî3“KŸÊQVÀ ebÐÎ# :Kôº€J>¹¼;l^6ý‹î%lø‹ë¼_”öÁŸCGÕoù¸{Þ–J‘Y÷Ghßÿ^ãÎC«ÿ¥gߟèÙª—üº y(¹Ìl7zŒ|eþùðx¸å73±(ŒÒoÀàX_eb8WT_ TØ»l½¾S­ÞG»õ€}Ç5_ñg|^]¿dY¶>{ÍwOŸ; Hù¿xú{‚}\ÿù/ òÒ'×}ö€)å€ËžZóñý0ðŠ?÷¯üð^8çÊ?®xÿ8÷ª?é_-{ï.cÊÁ“ÿ¬o/~ûvãWC¯ý+ÛXðÆÏŒû‡ÿ¦lÌ{õÇ0òÆç#Ëœ—oÑ·ÇÜü/Ó·_¼øC}{Ü­¯˜¾ýô7Nø©¹‹ÁÇ»Þøqâíÿͪ{÷Ê#—ÀM~ŠÕ’»âaÔ‰È=¶4€r¼ªôzdªÄõ»uй·O£òŠ& ÃÙçLìåYúØ*8yò$–»MκôI`JÐÿ²ßë}`õG÷é2°êÃ{ãžêü«ÿ Kß½sÉ;wžü,,~û¸àš¿YôÖm ß¼mèuc0lêßÙÕŒ À~ë*L.¾éŸ@`öK?šõ¯›2Àà’[^&f¾pÓ̦ÿñ)øì¹Džðã¿ÝWÜö@–öœ˜öÈ'Æ>OÒZD­µ-ìý¨~÷0˜nG¢k€ªq<àµb8\ @ÚóRI9Œ:»d@‡¡û/ .4[·9Ôü,êuªYZóí³àísç‰6&nÓï®cU¡Fn»Ê{L§:¼&J¤áàªßëÛeç„ZÖû–ÿNßY~þ/M‡ì^ü8ÛèzÁÃlcçÂ_ëßž6l:ÛØþÍ)ŸO÷‹1dóWӠר_gè–¯þè¾³¯øƒ8e\ýç%ïÞ¹ä;†Ly6é뎸á9 °à’[^‚E± >xvª¾}Õ]oÀÿž¹Ö˜àê{Þz÷é)l{ò}ïÀÛOM6&¸ö÷Þ|rÛ¾îÿc¯?q•žàú‡>€×~3nxøÃÿüúŠõ¼úØå§`Æ'F;à¥ô¯nþõçX+!¹"LìûŽ¢Œã 9жÔ7ìÛÊúô7æ öˆž½{^4ê¢ç_üç]ϯ3ëîy Ônú‹¾ÓÓç¯ÁTÜ÷Î6}ï€ãUÏ´íwwÛÊ»àèú?6€µO@É€û: ¸Ï O@ÇA?ï8èç°Å“°où“ÐéÜ_”Ÿ÷‹òó~ùsº yˆ…v-ú ìZøèv᯺]ø+Ø1ÿ1Ø>ÿQ8cøŒ3.z¶~ÝL6Ï=G=–À˜ù˪™¿¬úüqS¼ü©ðÑ}pöÄl‰±¾éE˜ýòf¿ô£¨¾ ÆÌn2ú‚>{î—þäßö¯òá³SàÊ;^¿òÎ7àýg®Ó¿št÷›“îy Þýã5WßûöÕ÷¾ ïüáTíÍýï^óówàÍ'']ûÀ{×>ð¼ñ»ïé0õÁ÷¿ÿàðÚãWêGýç7ÙÆ«¿¾~0ýãÌøxÚŒOLûᣟþð±Ï~øØgð¯_ÇÊÉ9Âfð Šàp³…kó¸ÿd-x<l­>ößrVw²ùؼÃK;¶-Þ²µVÔdß~] »K½ù] [æÎˆ*ßÍ~Xßî3æq³ÕÆâ„Ø’+þ°:Ë ®/(ìbð23>~ZBi^ÿíU‘;oxøC;ž(£€ 9„nèN¡„5ÀÕÓy|¿ºµj£P\ܹòôK»Ÿñákïï;¼SrÛ¨î»îûs·ÝÍ_ûÙÉ}³&fA÷¾ø7`¸™¯øCÎy¢YH`Ü­/Çr}ú'üß«­˜Ã©¾ßlœ°m^ž1˜ðÒôK±ZArKôx€ˆ¢{m©Ýh;ð‚‰ÃÏíߥûSO?Ýõ¬ï_ôÐXW»¦ùÿù÷_ÿð»;:-¬_~Âw‚Ð ~!«JaÏÒ' bðƒi9[‘n™;cóWÓòµKÞ½O~6½ÂñÕ+·Àèi/FýöËÝ cô’1&¬3þǯ°6S‚ ?}0¼Š ѹ™èåi ›BÄ h€ât68صñØÈÁC¦ß÷Ëvî®WNÕ¥8è‹Ê†ýïÖu³wÌSy¯ì>¨õš?êIžÞ·×|÷=&lÿÇ”ô¿÷ðÚ§¯iÖi²ôìû®zêÀÊPX˜Å„;ûÀ¾åOêaá¸1á®CÞµð7;„¢»§ ›NN6cûüG·…ÃÂÝ/zÄXyõùØæ¹Ó75=s1a –¿7Û8oÒ3lc黡’<ùÏÌ 2åÙÅoß±è­Sqø¡×þ¹ðº¿-xãgó_ÿ?}¿©o¨žûêGþàãW£ozqÎË·Ì~ùGìcÔxóé`ýC.ÿÙ>þÛ ýõT÷Љ·ÿwâ¯øìT=,ÌbÂi°~ùþëO\eô±°°‘õÑ«¿¾âßá°°1$pÓ£Ÿ¾­é£O>Ÿµ¬ÿd#¡\qi‡€ßœÈ9œššFñf#‚˜ˆœ¡3;¯E¤Ó *À NÔÔ@mèÛ}G ”mø@‡7A$Gi¦ËÞ½KAòcAbh€ÇS„%‚ ’ßÔÔÔF×€`PÅÒA)P;@x,AÕY’°DA T|~?–‚ HjÆA W0€ R¸€ñAÂÕŒ ‚®`<A¤p5À~<`íš•-™Ëþ™ö¬X¶(ÛŠòœó.ȆL¶n6²¤r%{™ËOkýÒ,ò2ó‘ÙN^lÆ–-[ܳW¿–ü‘ ¾ž3zÌxýãÂózö®Ì¶;1wÖçã&LlõL¶n6²¤r%{™ËOkýÒ,ò2ó¦l'J³uÄìÌôÝÆ íJ: :ÄúÕ‹+iÿìºë×,¿ð¢Ñ°~íªví;H²œ…7cýê#ÇŒoõL¶n6²¤r%{™ËOkýÒ,ò2óz¶mÂæ Š²Ž˜Íx€ßç[üÍuµ5-ð¿ràÅß|aÊžßçóû|Ùy3²$“­›,¿SÙ–½Ìå§µ~iN¼ªy–ù¤£¹IƆ ¿Do¡gXß@]m){n'ÛîA]MVd²u³‘%…+ÙË\~Zë—fù—™Ìvò`|@ËÝA91|!K2ÙºÙÈò;•mÙË\~Zë—æôH£Í|ÒÙNr|€±jn; Ñìµ"Y’ÉÖÍF–ß©lË^æòÓZ¿4§Gåhæ“Îv’ãZÅȉá Y’ÉÖÍF–ß©lË^æòÓZ¿4§Gåhæ[:Ð*v@NLg”%™lÝldùʶìe.?­õKszæ±Í|kÆÒ®ÆÚœ}ÞãÇUËæÅ½ÐÙç°“,¡cceÒ”=›9LûÙ0å$n1Äú öïT¦oSz 'õÇ#¡üÌûz¡iψ‹†ÆúÖøU*O£õƒj³ˆ,€$ÞÓ¤ÑïBZnGZê™´?ÌIÔÞV»ñ€È’Í\Y[c‘É–Ìa¬lX?‹q‹ÑúcwªUn“ý{Ôêù1Õìó¾^Èöè‘_¥þ4Z?vŠ(Öu[ø=MîÌ­gZþ•OLRŒè»Li¬÷G=œý7 ‹•½¨·aÕ²y±Zì#Ósö_O¬‹|¬º2ê±É•¡¦±1?¦Ö„õS•D6-ÆÈ\ŽzÜ3Äý]QoŠžÕôŽK›®žéüØ!-gŽu—Ó~];ouKÂô$D¾­všb)Ö3ÖCܧ=VE”¹§(Íñ€XnœXÛQÕ¥ÙðàŒÅ"Ÿlû&›Å[‘D&­èÈÇÅNSºÅ|š©BÜÛ糉{u;òUO{~âZ -ü$}]›ÕºýF·u;#ª/+…÷aHúaÎÜS”æñ‰îOHl2Ýo7-fZ™´s]cÓ £ÎÁÖuM¦ýÞ%³¤¼½©»’(® ÕãQkÿÌÝ;E뺱Z¸é}Sì·ü¢V¦©ZZê¸'I×SEp|@F½rÖ/OBU|ÜÄ…<> nEÓÂñ€TòcøÕ·-Ä é§1ÅjÎN Gõðdù+œ£Ou€ãRÇ"“/O,·OÒïa°nèµ|ö’ÎEß”&²QÒOcË<‘Ι– Èã-žÉΧšk&÷O¯š[æg›âÙßu7‰Lf¢kD‹•UTÅJèê-ßú˶)‰üD­ñ³ç—ƺn–´ôsëñH(Û6ÿbj€,Iqÿ’³âjF¬ÆýÆ Ä²’âV¬OaÜÔÎ+“)Vˆ‰f;‰lÄ-ÆÈƒ$lÞ©Lè_ÜÛ”â=Ê¡ü¤åÌIÜ£Ô¯µÐìïÌD¡Ù©g2'r6Ÿ"›1}A™‹DíjÚi¬îõ¾¡6ã‘·ÇÔ£ÙÔÉÒT²,qT›Íc“(øٳ³ iuZ£ÍK't§bݦ¨'·yõLxNm^:ò¥Õ{†¤7?Ƙ°…×(¹Ç õa\ÃSb§kê ÒºššÛ696C™´™ÃLg#›¯žsÙË\~Zë—fù`ý6¥˜ùÖ—j̶M ê28_PZ¼rÙ K8_Peç ÂÇ£³ë¤™4f2 ÿC&²Ñº…PÙÃõZذ~›pý€ôÛ©F‹H——ÞL&+\? ‡²‡ë´$qß©¤3ß*Ž Ô³ãÒ ®¸~@Öä×(œÌãúٮȚü`< p2Ÿt¶›õ *iß.îk׬îÑ«¯Óí)-«8¸¿ºeþ7ÔÕ,^0Gq8A‰ÍÐ GÄMsøÈQˆÚ/(®GiŲEn·×éö¸ÜžºÚ“Ð2ÿ={Wâ F±`æ§Ž3>ÂøÁÚ£ô통ʻH²¼·z[Ëÿ°Þ}Ïòû›ð#‚XP9𜹳>·?\ ±x€ßçóû|XÊ‚ ÙŒýð@Âã²sÔ‚ u55Èp$Ç ‚ Y‹ýÊ<Éñ‚ HÖb¿2Or|‚ ’µd0€ ‚d9@)\0€ R¸`<A¤pÁx‚ Há‚ñ€‚àð¡ƒß–t(Å<ãýE ŒDÑ£W?‹+—-8£G/Ì3Þ_¤Éºx€qMDF뮹c3ÏQ3ù[ZþçÔœ8YVÞ¥CÇÎiÆ_qí罩Wi¼É-tœDž#sžJ9³ÝZËg¨¬"Ž=‰ÞÓ\|‹ –lŒ$ôDf3YRtìX±g÷¶ÜºIäÙ”Étå9ûŸ½$ÊÊTJ™¸¿yóç=90=£±ÚzúþX5¯þQî¡ùjìQÏyBSzö1îòÓvZ^QÏ7?q/wà@µÛm5_]]Mr†ZÜ&m$šçÈ3ÛylìÜШÇÌæ]‹š>¡ê2¡²Š[ãÛyגΪýWØf6Ôɱx€uµž­j|áM'±~KMÛémFE½V¬ü$wÑÓ{ô€í[6d¨ücÝ‚–o Ú¬víßЄ³Dí’ls@%Thi…3mÞ!ITæ93>ÀÎ#bL“Ð#•.÷B¬·(ÓÏ7¶a!&nê¹ÊÚW·åï~8 RÉžÍ×3j, É8>ÀV%XhùI¯3Ûnö[- F¯£nPF ¤òÔY7#:3êAFÁñ­Ó‹õÖe:?Û·lHÅ”´  $ôÔeIqe¨½Ëí“£VQ®c¿2猂AÕâ‹5›Ù¾eöÍU”RÍ¥”Rš¹z¤U¬{l?f§…uzVa¿2oµx@ŠA§´Xµ-öÔ&жIE—3œ†~#´9ÐX_»i㺠i@r˜òIC]ͦë"íªÖ­k}Ì,‚Ÿ™+«¨Å•h¡´”m¬â²(F”´“ñ O¢©9i ¥FúRM;í¿Ÿ±®7ωcõh´ø!Ix ~ÀïÓ@üÛßëp#'ˬù ªª©ªÊq!ÄâØ)ÿXåGȘçX ìßµŒÞÐX™Íg5Ö¶ý)‰²Jñ-H%taóçÇ-F$]دÌIÕš%}ûŸ¿aíRðxŠ,’®_»ª¨È‹kÊ'ÚêÏP§æÄÉŽåºÐñ×O¿ÿQõ/ï?4þJ(]³bIŸ~•ÇóŸÖÇ´Úosgz¡”mßXô—ã@ÓÚWmœrë›ÇŒZuÝÕrQ‘$%QEQxžç™ƒH?¼½CHa¾H¦Áñ…‚ÞíÇß®±¡”Ò}μ.‹—®˜:eïð¡²"K¢$I¢ ¢ PÊ3ƒ€ Ê‚ä¸~@Á)ït„>hÐp.54}ñ•ŸÌüò–i^=‚AY’DUAx xžo-ׂ ™ã…!„™œ ¨.'ߨ¤k¡T7¼NyìwûúôZpë4ÇŽJP%ITMyž§8Ž´bAô‚ñ€‚SÂqM%%®»€# …ÜBLôd¾Ýtõý;zDÕÕWJž"I’dUÅ ‚ä(Dê»uqí®fv¡”Pªq“UëûÅœî /»þÚýC  $ÿÀx@áÙj{÷ì0o¾n-£ €\ß0ìù—jþ÷ÑÌ[¦ÎìPdY’LA‚lS† Hr`< ÿ)nSªß)Õ4-Þ}ªQ`ž}Ju#€¢Ë€¾á9|dÊOê{æòÛÆuî$²$K¬ )/Ì7D `™#-Éã‡wnß‚eb¤Ûé=â×ìÈ{ز©Ê¨ªªÉjÓé4´GoõsšÖÌD)%!P ”v¨Ú0þ§·­ºhèŠKÇŠ.gHDAà>äâ8Žt !-HI‡R]zö®Ä1²ré‚ÊçX§Áx@þ @ßÊAÍ5@=Ù¾Œ 3ÆhóŠ;¼ÿÔW„RNÓΙ;Àâåërë‘1£§¬È’$I¢(¡ˆ±îÂòG’`ÍÊ…à·QÃH’‡,éPºou§ò.%˱Œ›xÍÌß²–Œä¹t=­‡$)& pµiO4$á†?4èª@šO+-ø|Ÿy¶ñµ×þòt@<Ç <Ç £§¢”Ö––~~ÿ}Êg¸5MUUUUõÕ‰Àápú|ÉÛæ²¬D=<Öþ„N‚äý ®Z³$Þ½–ík@ÜwǬ·¹Tm‹Ùú)‚ñó}µ³õ~§åÇZY,jN’Ò©s7¸àŽj˜RTOcê,d: KÅÒK/]wùå.· A1€dBìÈ€»È«w°£(qOëlQ÷Ç:•q¿Í쥓©½fÇñ-૱X!9¹µÉ¾=;UU­]»Ž»r%4M¯µ)!š¦qnÝ`ÿ·k÷Æ-?ºí‰ßýkÒ$I’®ºê{_ýõùçf'9rä0Çq.—›5ÃÀçkbíqý£þUÈÝTדŠuZSb$oÀ¾5–k™®kÒŒñG¿MåBÉÜhE±#F;#-ÀìÀqŽ u 5úy"û}Aߌ½ôâъÊ";¸è¢‹6nÜàr¹dYnß¾¤®®¶¡¡Þétëb£[Æä¢±ãöaÛz½™Æ$0(y&™–ã™c Od~R÷kéMj1Àx@î%):öïÝ¥ªjc]©H€ð<Ò\DLØxlƒËµhäYA‡Ãáp8 ªj½Ãá$IÅX¡$*e;‡Ó`½Ÿß–úQ?ÜÂľ²¿?2·)Öà-i`< à(+ïÊ6Žx8 € „pš¦âÀ‘œõõÃçÍ[1a«ëEQ…‰$É¢( ‚Ø+I–¬[8·q¦%;Æâ¸eâvh™ ¤«S!äÀ¾Ýlˆ€kÜaÛvJ¯izà =ŒŽ =Á³çTw>ºDQ”$‘mˆl.QžŒ #Ùm[´dŒ!!Áh_Æâ¸e"½ð¦FH´o¨õ-.šŠS¨c§.lãU€ï€ÁˆåÃ1JÈ5/¾øÞã³ÝlÇñ8g’.:wíîrÅMV__»iãúëß´¸øsšÂ«×¨û£~ŒÜë<Ög°8Öþy’›ûv³¤/ü“{ò)J)Ïqž4T࣠€Q¼‡üè#`£€ÒИq,‚$JÀïóÛhœü¾D€ÈÆuÔ¨€M§ºL“ȘpK‚ñ€‚C·&|ÄŒUÕØXpLøPy§{÷E«û…~òIg¿ßï÷  ²1bÌ`’Íûê4kzúqšØéÒë´H@©¶qýʲòЏ)—/ž_^Ñ%Ù«4k²hš¶~õb£;>îv*Ž ¨}CcÅbõJ—f`< à8¸¿šÕ×µë«ÈÄï±ûÏ¥¥[æ>ô ¯}ûëþðtû½{#M}£ª´ôˆEQ–-[êóùX@€çù††úÈš=ª D·LÃûM ¢î»:‘£2°oõžÝ;­“™@’eɲ^Ú¼q•.”ê*@7®[F ßU­Ð×FÕ4m[ï4}÷$vNnç$¦2‰›ãñEyFiY¨…娆÷ó„,»tüO?{®¢‹“ã>¿÷Þî¹¢…˜ xêõÖ[»¦MÅÐj2,*ÀÞ"설‚Ï×TRÚ1¡C$Im Ä¥”z^~õÈ”«yYÒ4MŸ.…=±áøVž„µ$)~Eã ÑÐ4MÕ´ÆšÐÚ9Ÿ IDAT¨ÈšVשӧwÝÑЦ˜~úYQ‘›çy¾MñêŸþdà?ž3 3Ž&ë÷Á‡›‡ kìÝ›­)&§ ÍHŠ2€$ŽßïïTÞ¥´¬âàþj‹¦Ì7s>kWRb¨ï$ÓôˆQ€R*íÚÝóÜ =:ýØå—Axü»„' µcN-’ã¿ñ€Â¢CÇÎÆõ À €Ç÷î¥÷?Àvz½^Ax^8þ½Iµ³fmÝÊ3*¾=öÉßÏú˳‚À,‘çqñ$%ázö®,éX¾w÷¶X³‡–Wœîø*ž³~õ }§()b¼*/´ŒRï^ i¥Ïhóv?ùx}Ÿ>„Ž£ °ÉÏ5eˆA r´0íF( zôÀüãlvÏ@ ÀOºzÛ¯¾¶}û+|>0$„/íõퟟ9ÿ²ËiX b颃{¾ñÆÎiÓØ aAÐ#„´R}'Kb;€=ùе{†¥½{»_?­fÐÙk™î*-ÕT*I„#<å€pîñLH®Ú¾ ŒfS‹°6NÝ[o:›|\S#ˆ¢¨iÇqLØh¯ Ó¹ûᇺüæqJ©¾±n0è÷þ›† kèÝ› K—G(j7ST$f}g£G©¦iªªoß¶øTƒF+Z±rØ„+ª¯¼bó-7;н²$K’$I§–È6† rë ´Ó}ã…+Çñ\ÀŽGˆœ½™¦¦†uëŠgÏQ,7näNœP½^Ÿ> çŸhø0ñÌ3IâyžçžçXÄ‚¡‹ÞâBfçö-={WZ§Ñ{C:vwì4ux£†G¨Ûö]?ûã?6ýí”I’§H–$I–ô™9Žçy.û•`åÒ•ω#œ((L}C™Ü_½cKU÷Þý¡¹«RÊó<«¦eűëÅ{j˜‡[÷Æ—G÷‰¢>\ ¦GHoþ«ªZô¨÷É'‹þñ\Ûæ¹åw,ZäX´¨ÝŸþ‡¯¿~ÏÿýÔÕ®~~ý*‘ê…û÷Vw*ïRÒ±<®¨ªøÕ>½a×nÛµ„RãLóbUíóÙÝç/ÜøÓŸ»x”ìpÊL $Qï7‘åýGÇM¼fæ‡oYËÆ Ý#ÄþwèØyÛ¦u=ú ˆ|”yžg]†\÷=òH§G¡Í—3Ƈ+ßËða ½zé!ÝicôéΟ` þéO¥>f'·%¯½VòÚkÕ?ûÙ‘Þ¤8²,˲Ìô€ÉÎZZÈ”–Uìݽ-®PJ@°Ky‘¦G@;ÕµÁô<3ÄÚºþ¿ÿCÍ˯̼ewfoI‘eI™ ð‚ 4“\|ö0€„ZÐ¥e[¿[ۣϓB„»‰ªª6L½®ñÍ7ß}G^ Mƒðró”1¿{ÒèêÚµØdhšÖTWç{‰°vmB¹­øÛߊgÍZ÷üsŽõÝwß*ŠRZÚñèÑ#ì[]ì¬O\“2‡¨Þ¹Õïs³B-U¯û ШqÅ$J˜Q ”[dU×Ïá#“Ÿxzϧ}yýdÒ¡„uÃÖ€18•s­Œ´;èÐ=1#®±Ö3É€îMŽPU €à4YÓîC‡Œ¡mÛ¶ö~0§ kŽùOœ(>ç\nÿþ$~BÑæÍƒ®žì¨©©a“Wû|§HŒ &GŽlß¾ÔŽðªì|ê-Ð[ýœÆ|A§öÓpㆉDÅÖí7=öÔÚQÃ×^q)!!<TL¸pÏ!Ž#GrJ0Pp°z?ÖSÀ@·¢x„4M¥”ã8.Ü[T—Œ¡îÚµ“㸶mÛÕÕÕºÝE@‚§uKNÊÑ£ë¶=Æ4 ©©Ñ˜[=V¡ÏPm\w^Ÿzš5ó#UÉ™ö¬¬Ä&SAÕµo§y4 v‰êÒŸpNÓΞ×oþâES'WÌzRs”'„ã rk† Œ `ËYdö½þºcóæÐâ3Í{‹ê¡Ùý‹(JÐÔÔÄó¸ÝEµµ5”ReÊ5ÜÌ™ñ/|7À˜åË3\ÓUõÛß@}}=!„ nÐ_?£'‡mëõ~¤·Ç¸&º€rSd› ªÎ6Å>U• kçAóY™µÊ\‹`êM©à÷_ôòkõ|úÙÿýÈfoŽã/8é«/?$LJ½Cç ¥/™“WL#@;À–˜=Bÿú—îÒT•o¾=%Ä}èP7ÞØ5mÓ¶ý±cGUU­]´¨ÈŽ ø#Äœ;:._±|Ù2¦|óV˜Íæ¼õ"Há.òJñ¦HcÀóêà ÇŠŠhm-ÑL6Ÿ×è)2z„Œi\ÇO~ü©½ýÏZþÓA¨Ë4O8çEV±Š¢ÌÅÈÅ^Œ+ÀH6fvKŽºÚ“ñµã…lØ×†˜!ƒÕ¬›Ò¡™¥ÿ÷þÖ‹.b Ë2°À@Ù­?¶eÜÞ¶\+iÔŸž€úú†pw=Aï ¤/g† úc¬û ›:vpÖÖ+zÒ|\:gدRʨ|„¿¨|íºòŸÜq;@“ÏG!aæh®” ÆÐHàý‰ÚGˆ3  :ž‹Ÿx‚øý¿ßÏ›@Õšö{öÄløß“›ïÇ*W®#Gz466HaX—=¼Ñˆµ][ßý ç–m&+8Ž'­Ò€ã€g}šxƒ•@(]qù¥ýø³‘>¿(BPÐͼ’­Œ `WböŽ#lêýU!(ÝsVØ€-] š¦–<ÿBÌ TDÔþÇÄx ±±Q–eE‘ý~¿(Já•îq$ ιpÅ’y¯¼Fxžª* ûyŒ‘-Bkû³'Y÷Îà,:Þ¶Íø¾¢œ~ü™ªiª¦iT£š@s¥40€v@b ¨HPÇéÓÁàbÛõÏÿn¿]èÕ“~ñ…^«Á óÿ‹yöΆ&çp48ž/®x­±±IQ|>ŸßïW” ®(HÔ¦ !¤©k—ÈYOŒN.\õƒÁÛI Ñ(eµæœaCîp:œÆóC”A‘+ѧe9ø´€ñ´Ó†HÐÚéÓRJæ¬1bñäÉŠÃÁ–²cSû€ïø «Sÿ àOáí§Ã°ØÖj:vÜïrù|þ~ý*·oßf´¢<ô†.@H¡Q9p :ÿ¢Ó¶hœ¡­`ŒiÑpÕÏš8”àH±÷¹IW;vPÄЄéžLˆ'„#¤Ùu½Æ7†‚³Œ L3ŠÉ€$Iªª9.„aÃØÚÜmÛ~t÷]¾Înž“eÙétÎ;W–eI’vìØ^³e‹ÝËèF€= ð;èX –-[ 5?~Œu1õŠÕ(ê6êD^²nÕ¢`Põ>L.›Ä\ÿºÏ'²Ð)_¥ÓšnºQ–%EÙ„%Š¢[ÐXô™£^ºjÍ’l“Œ °6è!J©$‰®ŠÎ{´ãô{&MZûƒ•`P¦”)„Ãát:N§S–eAuõ k€½—%XW YàÁ4é4‚}2ëW/Uú.ëN€ªªÆPãäWÍÇ œzM(}àžA’DY–EQ”O>|ûÒ˯^øõ—lñŒç\¸nÕ¢¨®Èl“Œ ¤5 {„4Mkœ:u}ÿþþ²2ocS ` H’èp8Eq8¢(±¾û¶ÎnôÚ³Bk…‡@Ÿ–o7ã^T§“oh`ÓÆ…7š¦1‘qåTŽcSœ@B¦Sà9ADA”eI’$E‘Yž?oæÐ‹Æê¦†E,Ê$±¢¦4r(a<€”.$Y–âUg›7®‚Ð Ò*!Ä_Òα£8އ²Ø³Â¥`Œ „Û/`ÀS5µÄëUYQfé:E–×­Z,æ53ØE£æ$Ö·‘_ÅÚŽ[&qÓ`< €èÑg@ÜúÂô¬3¾¾2%‹Ç†×¦­ºÁæŽvwìhëÔzÑwìf†óxðþºHŠhoÀ­¦i¼¦'4õîåܹ‹&‘>¥F¤>“%äæ·Þ{åç÷ð‚$J²$9$YQkî×ÌÈ‚2‰_¿c<IÕ#¤o‡]C4dkó¼>³.{ñœíÚÙ:¯n«TÛÍ çrÅZd€‚ÑI”d;)YÀçëW 3gP@iļF0îo{ìØÐ9óª&]E8žð<Ï‹œ ò¢$J’¾ÄX–”IüšãHê!}±_æ—7íÔès<ßð½ïY `$þvÐÙϳø»¢¾ªÞ£ÂA”Ñ^½Ä¦%ÑN? Ø¢Æqp ¬cÇý¢<óáçÏš½é¡ZQe ŽãyŽçA4.3Ùêe7 Æ4È€Þú6N·†]˜žã¸ƒ·Ür𵇠Ûó}3|¸¾¶ŸiÚ8¤4@–D[v¥TåTžjºu à8ÂBG”žhßî¿7Mkj×îÆgÿZ²o_¤) o\ù׿üÔ“ªªiAJ5 Àñœ ð¢hõ2 Øða<I ë-)ì•a8–— {÷¦ËTÓ¦¯k7w(òZgذ´*A¡ðûü¶ín**"ªJÃKJ—]:nѨ‘„ã$Ž{ÿÿ~|ëÃ3 Zx€=ӞÇû¼óîæ©×@(MÓ‚,*% ‘€ß7 Æ ˆ-ß®‰õ•q É ‚¨_1`îšÏþ¹Ç¤«ÓåzóûSEI’$Q ­ïg^Ë)ÊÊ+6®_YV^aS˜;ÈW_²4ídiÉ›7ÝPëñhMu„ãxŽS%~öä+/~çÓ1Ý€Ÿ}¾¸w÷“ݺ¹].§Ëé”åТóÙÐ Y¾xþ¹C†Å©Ù1PPDízèÀž-ß®I]âŠÓ×à!õ£F¹¾ú*z:½«´‘ÛÎìÓÔ£§K’”²$IúôѨ…&û÷VïÙ½Ó¾) ªCç^xÞ̳+ƒ5ÇÔã‡Ùä¡l}°}¥mû”´+?|T_aš/0@(üÂKN¹Üép8ŠZq^x>V‹+€ñD׆ŒÊ€n%ð0¤%xžçŽç@m×~ÍO~4๚¼@`ˆ_øõ‚ªóÏ—ã^$Å¡„š#)y„¢tOèTÇŽrÇ:ƒñ€‚v±y#LCÕmVj±æµã˜2Gûö›fÎÿB—÷Þ³>Õê#^z©äõÂ'ŸxBzížñöÔjÍ–8&úàËÐ}NÒJ€ñ´ZVo²‡•-»Û·okll<øÀÏ·ÿô§þ¾¹ãÎÛûõ+ÞµK¬­õ»ÝG;wÞ׫ׯ3ÏüáO¼xà ^Q`Ãß½^/kéoØPKÀÚ\¦‹Æ’;õx¬5lÃïóÙ™"ÍäTÑŸŽ£ÆÆ¶þ­ª¥ Qmÿ¥c»}1Û»s7m®F%˜úòþýÀÝÌ!)Çs<ÏÂYø[t)RUMõû´-ÛÊ—®(^½Î½m‡P[(rמÖõheßgÐNëÆI"ÏÆÃóœÉóŸïÌ3û¶iÓÆï@›6m)ÕôÉŸÛ´iËî`v€,Ëàp8ôqa÷(’Ç|9kNäαcFGÖþ_ΚÃö9kÎÅ£GR*ÌùjîCWÝö“~}N¯úÙ†^h^2{î[.Wåø±‚ ,Y²lìØÑG¾šûõ¸KƘÔ%Ô7)ìðê;ÿý;ù?ããÏÎøø³õS§lûÞDY–%Q”$IÓA(…ä Œ ’6˜,ûÞÝ©éñxOœ8 ÙÔÓ¬ mÛ6šaÕof°ö~QQë_$Ë2ëÊm³§’·v€=#ÀTã[Wš„±cFSJyžãx^ÅCÆÕ|ö…gû=pjÁa¶ÀÀ‚Eÿ~¡(çœs¶ßçç9^Ó4UÕáÔd*Lüõ }ný™ë»Í ýÒÊ×ß._´tÖŒ‡[ %Y–%*Š $!@; =@¢iŒs̱ùUxžoÓ¦-¸ÝEªdb`\Øëõò<Ïókþ³†¿(ŠºœÄÊÞt$!+Á¨³f5æâQ³çÌåùfþ‚@0¨=ö«‹¯ÿ¡îÿá£8MÓ8ŽPZ|ìø Ï¿X7ñòU«×Œ5‚çyUÕT5È&TgW¡”’ÆÆÛþö‚tøHYm»s×ewÿüÃß=lSìÐ4ªi4Ô}($ö5ãh$© Æn”F@¬.•z7›¦¦FEq°55'=¯Ã¡°æ¿Ëå2:jO;ít8vì(H’ļIQ‡˜.j̤MÝŒžèU¿ÉeĬ/gÍ=jd àojò1“-,FïÐÙs× :Ûï455ñ< ƒÁ Çq³ç̽dìÅ”R¿Ï_9ùûVÐ`²aú¬wÌÓèºNœ¸ìáGßûí£šªQƒ¹LˆÀfo´)@; IìW‘‘){!>_“î­¯¯c'OžC°Ž}d5~}}«÷›šº¯Td”ÂbÜmÔ‰Ümì[x‡Xi¶òýܳc„A¦žB”)ÿ|yÅeã›AƒÁ Êq*›«ŽRèþó‡ä½ûbæòi€{šï™ P pA³ÕU=GŽŽ|öïóîºMÏd¸óè©>£ñs@; í>¢$0º†˜˜f¢†ækX?ߨ‰EÔx€ç“5A8ŽA–åe¬¥”=ŒS€m;>aÕšCçž#Šb ôûýÇišöå¬9î».Xóbo7_EC§`‘yB­nUéú õ•}.Ô[”ÂÙa<í€,¸ä€uš¸–G¢s!ˆ‡“™”jji‡p¡Sc†©az¸rý†öîõŸ~Z0‚ ¨ª6zÔˆÏþ#æeî6ÀÃ3¨? P–Éf§Ð¤ÿ÷µGâ8.´ˆ’Àz‹’ÈVTT0€F@ö¾o-ãªB$d ä2ô2ŽÐm‚)/¾üöŒƒª%IÕ4MÝø|à •èpox{±Õ’Jž'¸m;šz÷áõl…0P@ôè3kF‰KÔaÕ#ôد.¾þ‡1…œnlïÙCÕ4ªQUSƒªªiZ÷wbω29ÜÞƒ@³@T.üzþW§u•$I–%) ‰¢ h*¥œ> ÍŒ RÐõ;‹ãÀ‘1aã±iô½?nÌU3géÍ=8\ëv=8ø¼ÓGtq<„£\Ç]Ðá±'¬òÇü<ÕÚ› ‚~k×Ïlòù$Ùï5(©¢Æk4<ÓÒbÆx‚ ù¯I{Ù„ñ6¿Õ·#7Xm.Šš <Ï“ûïªÝ¼¥hûN£,?ÿÜYãÇž¦(‡ÃáP†ª(Š,Ë´®>޼±³3ÀÓˆahõõÔSZ´•çxžÍ„j ÆA Üsã9NEYÕVýö±‹®½‘ @½×ûÚM7Ô—•º8^b«œ†ç³â9®áøñÄ.Ö`‘ÁA4%vU~²&ؾ=ˆ Uª±™§ã…1€ Hž¢ÔrcÂÙl†Á`ãE®K×Í÷ÞÕóég¶Ž¿dñ¤ïIjPÊq¼$ŠŠCq„W¹¡ÑLàwüÑðqŠU`€6ù€p„ð„8AäQeBã·ñ1P@lùvM¬¯2½ <‚ä¥5Àó¼ ˆ’D_yù7göiìPâñù‚ ¥”pD%E‘eY–YEŽã g¯ÃÛ`€? WL ÷) i‹?‡°e`< ÀˆÚ7ôÐ=]PAZQRDInÉ+²u^QDQE©²Ÿäó+~Ÿ¾&¥ ’,ÉÌ$ˆ«m»øç5 þcó>B1àœÎÐ$Õ‚À "/Š‚(ÐX>-:‰b< iÊ’Óü­Ðï™y„¨¦<ljO@Rùðjã*`š¦ªªJ5 Xë[Ó(ÑÔ F5U ú@Ó¨^>/ºÿ÷ü)œøyðûš|MRS“(I<ÏÕ‚µ5ǽÅÅÖ#Å0Pˆu½¾Íæè7`p³››øBÁXQ"é«Uµ];¶ìܾÉ:Ù‘ÃöVï.¯h6{Žßßd†’–ojšJ)°™„p„@x7B)Õ( ‚{†íüÍÂ('zÛ Cì6ÿË{vohlà88à‰Z0èoTd¹¸mÛ¸Çb< àˆœ/ȸ'C“IXLmTŠzfë«g½Ö‘7~LH ‘LÈ!ÜžÝ;­“™_R82¡è›-Ï”JAÓTž¾½êò(p·ÁÑ‚Á”h£`æÙdY–ERdYQdE‘eÅfQ`<í€$IΗb¬»£švÌ‹¨‰í¸}ض^ïÇR”¨9AZX"«ø8ΟÏ]ämÕ<›—&6ͨiZ0ô :»©CåÐ!³Ä%†÷ùO?Íåp¸ÝEEEE¯§Èív8²,Õœ8æ).ŽS³c<퀴7ð“V‹$|Pq¯bçêÉ-‡‰dî"¯ËíÉbU£,b Éþ5Mü“ÛN}7ØàŠEì9ã^¾êJ—Ëír¹Š<×ãñxÜn·Ã¡H’ä-n»w÷ö"¯•4b<  í€Ôµ!n3<í>%S}®„!IR}]MÖf…Ž5M ÁÞÝŸnÉÒå¡ï–°ù§“aã§/ïèЂ”ªT jj ðù|U ú9a<í€4×Ñ™kPëŽû¨ÍvtÝ8uY,&S@Sƒ+·Ö IDAT¼oØ­·»Jå„G½žOœààˆÀsÏñ!@!4E) Y¬³DeŽñ´¬šä-Ðg'”Ö 'DxMJ^v(_?óäÈŸÝã8v<¹St»þøƒ©²C‘YaÓ)’$K¢(ò<¹ÈvÌšãhdšÌUÙ(ˆŽ$ËR ΔlL™ ¨‚ rœðÕ ½àþ‡ÚìØ™èyö–vøÇ ×).—¬È.§Ëårº\.·Ûåt8EEIx¶ªp}mmœ—ãh$§ ö×kŒêµu¸Óê¦@¬x€m0vBò;KÉG=Ê:YÜ&fÍþŠ)ªij0è÷^}åu{öV¾ñŽý“|qѰEC+²¬È²Ãáp¹œ.§ÓéMP*¡¡É6팠ªsÆNšÔ{ò˜v5Ã"±£ân£Nä†Ï0UÖ‰Vßi2æâQ”RUU ?à÷5ùv76n5â¬wþwæ—s¬_tÞ /†_(ºÝNI’%IVd§Ãát8œN‡ÃádIŽãÃãÒliÆÐH¿6 Höà ÓeÀh(DÕ†ÈlûoÜcmg°álF¹S;K;¼Ô·Ï€k'Ó­ÛŠ¾˜5¨¦¶ý¾ýJCc$îòz7t(YбCéð¢àQ7lÜ(¢$ŠÃ‡u8JhjÒ‰¬Èñ´¤Ð1Ù‘&BÔ‘*b}£ Ïs¬^%@Ç)²\äõøûõýêäÉ£gUÁ+WUÙ—ÍJw!ëÖW :{ ÏóëÖ­>ìBE–%YZ¾|åèÑ#ÙÔ¤‰z­Ì1ÏF‚ -¦7`TT‰Ë²$‚,IN—S ªŠ¢ »ð ”R Ø$¤Çñ?nìžçyžûjî×—Œ½8‰æ•9ÆAÒŒ^q³(1ÇQAYÖD*Ë’Óé4NDÊq¬Ó?›‘ZßH^ªÌ›Í;áóû-þð¾"’åXÄl[Ì/d¨ÜCµ» ð<Ï‹¢(I¢ rx*hE‘,\$Š’$‰ó¾ž/séÇ&]ö+sŒ ’Û•¾ñ£QXŸ¨_ÅM ÷ {;JÀ¿l®·q—Œ1žù|ØkF¹dìÅ) Æ ˆ-ß®‰õ®$ŒäRl·ÆeÆ[5qgÜI_ÅôÕå—] áŽCl;R-¢îÄoÃ+ƒñ€Â"jßÐCöà‚ò’U¤âÞI€„´eÉu#@Ìú9ã²û•y³˜p0¨Züa±æ® $Ù”3ûîéçÜHËiSù9™þí’QìWæÈŸº^ßfóFô0¸Y» Áqd­R â`7Ä„()¢$c9$ Æ ŽÈù‚Œ{LB_ÛËŽH˜ÖüÒgoŽ5ÿ³EuoZVÞú Öša:–}4æ-nV‘l àÇ;’L™`<í€ä±9MÔ啸±þ5mر3bÖΊ‘ÇF®SfU$K¨««‘$¬—šqìÈ!·ÇǤÆù‚Ðh1ìÌÚõ(kH¥.¶¿6ÿ³¿¿©®¦ËA'®Ž(p; mÈþ†0Fk NraIálãh$Y½Ær­dO“Ûì…&î"/–ƒ;¾ Œ ¼© Xí"­…»Èër{°Œ¸Üžê[­eãh¤¡‰mÓ/”œû(]CPŸòI’êë00@; ÚU-’èOi:* 0e§P¤ð läu(Iñ´ÒSÑ'ô­BQ·-6¬Ï5M¬c“ËÒº`@8IãhdÔ@–A’e ç ŠBóç *D; ê– R°ÄZïÅþ:0©_1sײç B#AòÂH͈\V¬µ*åãD>Ðy ©·Ü™ZD• ý+SâDÕH?C¢‡' ÆAB«Eꮩ"6U÷k'š8î’8ø êlnv–LîÌHž!%[/]6a|BÛ‡ÇMl'™$I6Ï`߆Ÿã…X×ëÛlŠˆ~']•§·bÅjAZ\? àˆœȸÇþdö[ÖQçŽ6M w¡vÓIØG}†gv ñ#ŠJb¾Ì×’?×@; yì¬i¬Ö£ÖõvÖˆ<‰Q9"On” ”$·¸êª«Zòr@; +2Á…Y¢&°³DŒzÜÎÊH#JŠ(áú‰·ä0PÈv@*Ú€õ,’Uüø@&S&@; ­m Þ!Éuu5’„mÓf;rÈzAyÀxÚIkCTçÖûH+â÷7ÕÕàªÂ§ˆ+€ñ´ÒÕü·SûÇêþ7Ià’ÂI¼¼@; 9m°Ë…=5M;£žÇŽ®»!(î"/–ƒ;¾ Œ <6+ßXݬw#jšXìœÉ?ÜE^—Ûƒå`ÄåöTïÜj-@; ýÚßüÄnûHº‘$©¾ƒ ƒñ´Z“ÿõI:€äd@# µdo’F0 œä›ˆñ€Â¡GŸXó"ùŠ$Ë’„}Ì"‰ca<AìkÔÛhœ&:St¬•^Ò¸|ä™M{²pIŒ ’uгweÜd+—.hWRb„øF@duŸé»"/—m2€ñA²B¸Nå]J:–ÇM9nâ53?|+s-wVYG• ý«Dø¦…'­/¹­ÿO£UñA²‹Ò²Š½»·e¨UµbÚH»J°ýÄi¡m‹Ãã&N1ÍìÅ=¿áÖ8>í€Të÷¸Íd;U§}“"ÅŠ8½™A\Ç´¢6dC<#´ùGç®Ý]®¢¸Éêëk7m\o4Dœ3.q0€v@:ÛÔ-¿*¶Óó€ßç·QÃü>,«4´¢0ﯓßôªÄµì¿Z¦”¿Ï8tSÿ62Yäþ¸ÛqÏf³‚Hof´C©¶qýʲòЏ)—/ž_^ÑEÿ(JŠ(áú‰·¢0¯œ8~¸G¯~«W.8hhBv@C]­ÍK˜RÆ:0V2ãþ¸ÛQ2}ìPÖùÐþ=-™$C2°oõžÝ;­“1X½raI‡RøÑ"ŒlñÄ/û•9©Z³¤oÿó7¬] •·nýÚUEEÞ¸ëÙ#-@q›’-›ªL2€ ù. \CÆÄ±#‡,êẚšÛ6cÕ¹¨¦¦Þý`æ¼yó0ÛÖ’üþ¦º\Uøvâ(0½*Rȵ’\eŽñA|Ç ‚.8>A¤pÁx‚ Há‚ñAÂã‚ … ÆA Œ ‚.@)\0ÿ·)ÁB@ò’Ç?îܾËÄH·Ó{įÙ1÷°eS–’¯èó ìܾ¥gïJ,#+—.¨xŽuŒä¿ô­„Eä%’¤°©C÷ï­îTÞ¥¤c9–‰‘q¯™ùá[Ö2€ñ€<€®§õÀ u‘oĪeóòïZ‚˜Û³²œ„œ}ÞÓžB{‹1€ H>à.ò&×ý¡jÍãÇ~›öä.uµ'ã×ì0ê¿Qùõý«–Í36íc¥e°ôúF¬«¤ru´<$s01è7`°®lÛ¨FÁˆº­bÔ•Èó´¦ýT˜ñSí©ŒUíÆJ÷üºĺJ*WG@¨ös!–*$zžŒ‚ãbblÂ'q¬…Ñ`§îNåê‚$TÑ?k丵33¢þL™?ã­i‹d(1‚ öÉ\<@w%Al_P«ƒãZM¢º}ì‚äœÀ¥%«lÐÊ€ ҊدÌ9ã‡`PµøË›šº¯bquô !HVµôõ6¾)`ÇçÓê~!û•y®Æ¢Ž1E\õV¹©+gÔmHÙ3cç*v®Žö‚¤ŽEL8²®›,Ö!FGP¬óÄíiš ìWæ¤jÍ’¾ýÏß°v)”´og‘tÅò%EE^·Ç“¦@+V²)^ÍzÞ‘N·ßs$/i¨« øý«W. üeån|Ô›SWW³~õŠXsG×ÕÔìØ¶yÜ„‰g8|ä(¼ûÁÌyóæD< §+})d$Iqšts™Ä¯¨q|@3ÒëóÉ­«#HŽ×wNY&qÓàø€(qÁ^ArQRp©ŒÈ2‰_³ãø€ü&à÷ü>,$_oC}'K"ÚÍËdž/Çä-'ŽîÑ«ßê• Š¥ä+úz¿ÏmS³FÆoÿa<eAr[ ¬¼bãú•eåX&F–/žîaÖi0P(2€EäLeåû÷VïÙ½‹E'®Æ DŒ¯ ‚ä+eåh $ ÆA Œ ‚.@)\0€ R¸`< ÿ)nS‚…€ä%'Ž6~ܹ} –‰‘n§÷ˆ›ãù/[6Ua9 ùŠÞçmçö-={WbY¹tA¬IC“¨Ì1«зr’—H’¢îTÞ¥¤c9–‰‘q¯™ùá[Ö2€ñ€<€®§õpB]$8h(YZV±w÷6,DÁx@Þ7”dœLÉcôiãªwnõû›°@ã… 8™"’ÿpäÈÁöíq<|Â`< Ïq¹=¨H¾ÒPW£o˲"Éø¨'LVÇ"—ƒ‡ð*+ú²‹ÆõZ‹1Ñ“[ŸŠ-†+À Hk!ËrYÚ[œÕñ‹Ê=-÷)ÖI°*GœÃ]äM®ûCÕš%Æý 6íÉ]êjOÆM“«ñ½é­+¹©âNeaÞ¨-úX'ŒLlÌ›q‰`ÓQ±Î¦ï4™8v¤AtÁĠ߀ÁºN°m£r#ê¶~ˆQW"ÏÓŠäv< –Æ´3õº2ѽIÏÅ˯÷ê(Ò2Õ>°c.ÄR…DÏ“Q z|€É˜Æ*ÕxªÈÓڹр@$£½ñ£±FŽ[;3C!êÿÈ”Ùùóóv|€ 4¡J?ê S±0ªâQ$Cd. »’ ¶/¨ÕÉÛñi÷“¤÷„±Ü>-ösiI1JKVÙ8> ul¬ÓÉìWæœñƒ,IYXçfâ„i©ÊcåÍ"ÏèB¬jéëm|S0ÀŽÏ§ÕýBö+óìDö 5TS¯©Ó{BS‡Ñ„¶û†"HZ1ÕÂëV-Ò4µ®7~´)¦ôç‰ÛÓ4دÌIÕš%}ûŸ¿aíRp:I¿Ý°¶¨ÈëöxðñJQÛR©âÙ¼¡ç étã@ò“†ºš€ß¿zåÂ`À_V^áNêQ§!B›@aÿ˜DêA®PWW³~õŠXsG×ÕÔìØ¶yØÈ±V%ÜÐï~0sÞ¼yÈöJA IRÄÄÇ SJ=/¿zdÊÕ¼,iš”²ýÇB8ŽcÛ9ª’¿ëdiwa!H!i€”èôˆ¬ý/íÚÝóÜ =:ýØå—!”RBˆ„'áxŽãaŠ@rN$5®u2€…€ I JJ¢KePJ5MS{÷M+}xF›¼°ûÉÇëûô!„p€p„žçt³ ·”ÀŽa„ëä9¿?à÷a9 ùúxê;Y³4MÓ4 ºv#”€´wo÷ë§Õ :{í#Ó]¥¥šJ%‰p„§Žã9žã¸SA.(AÀ†/Çä-'ŽîÑ«ßê• Š¥ä+úz¿ϟ  išªjÇÛ·-ff!„jE+V›pEõ•Wl¾åfG±W–dI’$IQxžç¡‚,W;í?Œ  Hn ”•Wl\¿²¬¼Âþ±, iZ} ±; B)°€@ùGŸ”Ìž³bꔭÇʊ,‰’$‰‚Ò\1–/žîaÖi0P(2€EäLeåû÷VïÙ½Ó¾€ªiÁ&ÿEa»€Yì{©¡a苯|ïƒWÆlìÜI”DQà^ày.d p„ k@v*A\Œˆ _ÉWÊÊ+24MSU5à¨.'ߨ¤k¡Â=„:?ùÀëïïëÓkÁ­ÓøŽ™I ‚(Š<Ï\C§üB¹Øã‚.„ÂqM%%®»€# …Æ0ГuúvÓÕ÷?üíèUW_)yŠ$I’UUõÏóœñœ9T@¤Ð©ïÖŵ»šÙ„RB©Æq¡‘áQcDÕú~1§û‚ÅË®¿vÿÐÁA‡b Pz*H[2€ñA Û PÛ»g‡yóu;Àheäú†aÏ¿Tó¿fÞ2-pfï€"Ë’¤J¢ /oFJ€ñA WX[¿±s'-äÿa¦ ­Ë€¾á9|dòOïïÝsþ-Óeå€$É’(¨šÆ‚”ÙìY®@¤Ð•ÀשìÔG}Ê Mkæ ë.¾Ý4徇ª.½qÒ•"—$IR0(IRd ›e Sñ€Ž:;Ý^|¼ÉZBsE¨êI*Ǧc´yÅmÔƒSJ i•ŸÏê3wþúŸÜzdÌh‡Ó)˲$K’xjL™îʶŸïvŸÜ±ms¦âN·×å*‡ A,×€`P%( B`0"«~£­ªýþÏ<Ûôß×?ü?p (BxžÆ1eYX‰ôéÛíÊE uÔEiy  ”ªªê÷ûË%Q`µ¡¦Asñ“G(´WÓ@9|däwï9«ßâ[§I¥94É“,Œ/_<Ìø‰™ŠTö?{ýÚUöÇì!‚´Š ¨š¦ÕžnWI]½^Ñk¦åsÃ5¾À…¿LC t^W5ù¶û>5tùàA¡y†x.û4`üåßK(}ÂãÎ9wð9çƇ A¬EÓ4UÓþ€¼h ùè½eOæã€êë@¸g¡@(]?ù*zíäaž"·Ëíp(Š¢H’Èó‚>¢8GÁñ‚ä¡h”†®]<„ª[ý&C4Xï3jLs¢]»wz³Øµ«Ëï›|¼ Ž!ÕQãHiŽ@$w Ò»VªÑXÉšw2Ð¥bÞˆáËFp¸\œªj ªšTUUSU-ÔQ5¶4M~hŽ@$?4@Õ­íÜXQSÛ"úéFû´MñK×MÑÊ:*Ь(²¢(²,9²¢È’,Š’ ‰›k4w—§œ/A¼µx^«( D ™ºŸ‡Fë#dô}5|è‚áʲìøÿö®=HªêÌçqϽý˜@À ( E1¢ˆšÒ˜Ý5Y7›¤¬dM©›Xe¬uÙM%Ùd#UÙÝlåi²–®BR1«QcH Ady)‰€ó3$B B=ýQ~NØ3U´;™øý¢&BLûA(Q¡!¥Í¹îÉÐù ºôRJÎ…D˜§’¤»G­Pߪí"ÜûCxñèý_1(UnÀbf²LÓdÌpΠ¯Eé|€††F}úµD {ƇG=óœöÁ54и˛Nžšÿìó»o^•Édúúú fJYÓ‚}@œ|À«Û_ªMIæ¶.¬}ž‡“u/QýYAkÃ)¥’s>.Û;Q‚Dõ$ QþyÿÈ9£Ï?uÚ¯Z´~Ãîóz/œjìÀþ} Ëbf~Ÿç´áadÐÂ> `>`ÛË/~xÆœÚ4ù¦ Ï_µüÚçyX0Y÷ÕŸ´6B|€°mž‘àŸ C<œlýÃ[nî9§é‹?}d»ïú_œ‹[~øð/V?°wÏY-§S©d2iš¦:s¸6óa Úój{Ë% ÷î| Æå¶¶Û|áôY5kõç~ýÄǯ[Uã< &ë^¢ú³‚ÖF àœw=6gÉ’'HôòŠ¿xõUcŒ±ÙÕõùWzÀ½gœ*ü}Ûe{nºaúŒ–ÆÆÆ††t"‘Pn f÷ŽöÔƒ÷Nœ€_<ùÜÆ‹ËŒŸ8娛jÙð~jçaÁdÝKTVÐÚðøµƒt¦»;?áGˆ÷Ç{üŽÛÏ66о.„1Á˜3²þ–—­{òƒƒÆ\£¿*¼º}Û‘eË9ØÐN¥’)u¤ 3(¥5{Âp¥Î>zx6ÛWˆ÷‹Pƒ< &ë^¢ú³‚Ö†ß p.ì\N0gsÛ¯¿æ…+Úr9›Û)%–X$÷Ì»äâÍíÍo—! )Wýç÷¿ÿÅ¿ïíV+…–eªÄ€s„@í4–(˜8qâ±cÇײÕý"Ô ÏÂɺ—¨þ¬ µá’ Aˆqjö¬oÿT÷èÆ†L&—µ¹à!˜B€ç¾|ç§ï{0pñ°ºÓyúÊ?n~ùãË…B"@#JˆA(%5¹P Rç ›¦ÅL³–­î¡yLÖ½Dõg­Àpå|Ï7þÙÊf!“1³m.¥@B(!˜`à /ßqû‚‡ü¬!Ï&B€$\±iËŽÖ¹v"Á…Rƈ¨%Ä!ŒP‰s„¤ Xf\¾G©Ôy¦iÆé­ –nyctIÁ[Jƒ_„8<—Àp•™l]°Ôý±r¼UYíC(Ô°°BEûaù¬µÎéQ—òBBmB)e†msnsP¿J0Šæ½®=½ñO£A®1Ù³¹ô§yüç÷Ýms!$H„1¡”Ðs„ÜÚp3ãæMûÎèïqŽP¥ùƒJåÒ £³âÔë'+xcÌšÃÐuöý@bòܺ`éžWÛ‘ŸAdröÜEÞü%C…’Õ>„B +¨ú+ÝJ™?œZ뜞…RJJcܶmÎ…0Â#Œ‰a9·³¶ýË?-»ý³àZGæršNu.ü݆]«Vr.„zÈ'æ\Úæ–Ý£ Æ,å–ÿ¤>ÉþúûG~¤Þ*¿RT¬)Ì ±|@uö š=÷ƒ£(ý}Åé÷aƒó âÇægØMv=XLÖéæ6Bcª.Sëöø$b¬‰îQÕá¹ ûÛÄ¡¶4mìœ%t‚ôa:T%a4;¶nB"Ô3w #*®bBóöÏ}¦õG?;n IÙ¶~ÃÎÖK{¦^@)%ùpR·.Þ½cK„*„êïÜù—;4í/¬"ï–\ù1UøÒæ?¨7„pë‚T´{W{¿ O§ ìC%Œª•!Õ Õ•À¤Ç7ÔjíHÆR4‡%¨|ž«Ìp…lW‰>G3ƒØiÕG¿ïQ×êaûâÖůn{ÁÙçÙ3§“sR2!]³lÒÓÏŽç€߆ Ê|ò'?{ôþ¯ùÝD)Ác‚ŽP…óìϹ˜¿à#[~òßçny¹qûŽÔƒäòe¼±ñìÔ zu×úïý»œ:•0cá’«7m|Ž`²øŠåÛÚ7bLÁ¡JtïJíäöÀ%w ŠFÁŠz£ôÿ­4“ƒ¢±AU/A¢ˆw‘@öÂ~áUã¹Ê ;ô]kíXý½ÂÊé´EÝë ôþþQÿ¹„)Ri2¶î3·}é[ßsú*PãD‡šÊî8‰IDATNžš÷ìow­Zi¨]#Q»9c½;nã ·³óüýŒÀgït³Ïœ9çÕ]_€»þ¬\ñä£÷t÷PJ “ÉRJ¥ì?º@ˆ8¡¡JåJ6°Û%”ã ¢G :ÃU;§¡¢ª._"¸ ,&P 1Kàyh.芆¼O†…q*Ôi RzÜã¦g •R‚¥¤Ô pÎè?ßý­ùÜN–r(¡*g0%SB)!ïß¼ªë©gÒû WÈsúü­?~ØÎ¥Ä=áGJ™íî™ùù/~«HeÎylí¤_2Öýò1Ë4™Zšlœ BpA7P»ù€JcXˆPç4” QÄøU‰%Åò\e†#Þ¤uŸt…«Ác¬Ž56¤ÿ¼æÛóV~¤„¤k/9,„ÀI9úT§'"œÛ!ÄI´Í[Ò9n,{ïD \søÈ!€?¾wÂnB槤Un ÂÄ7(ö„"þU-XQNw/Ÿg÷»vob'ðÅd ?þœØÐÆ…*×UOØÓi"’i¥½HŠÊœÉW>“þ_š?Zå×X œ—'"´iÃsó^ét^¾Ø|áŨ&'ÜÐÖÿqÀ:/I㉓c?ÿ¥àé'ŸÈf²ùY£ýÇÙ¾ Ä7耽£"HwïÜ>qÒ”tº±¢NâóZÿòÚönìê:³{Ç6ÏÆÙÕáyh™,Yc5+‘æYkc¨pöìû»¶oýÈU˳¹\&“éé8ÖvÓ§Àµ>À}±º~yùG÷~bUcCƒÚU4aYŒ1„pnÇ«­çÿxñ]€{|…Gnð9¬ÿ¹ç.|ñìt:N§’ɤešŒ1µ>Ù3ß)Рœ9s÷Ž.BbÌ2*°zÖƒÒš`,(BuxZ&‡PÀa¡ö:àYk£:0Í,B(a%ò'ÇŸÞ¡¯Þ}á·×8þî£ç•'Xøüú}‹ñTš €Q@a4çÕQ-­¸%¨| ÀZ€ó¼Å7=üȺo}=grB˜`B 8à ̠a(n}cÌ`ßFª´&c"T‡ç¡erj¯žµ6ª©œê€AåÖÌ2*<àãGËyö‹Pž‡–É’5V³ižµ6†P!®¶•!D)}ö®/ÜþÕ0BBúCCoÎn‘*(ƒ Â2ùÑÿjæ×Åšþ뀵Q7µýacûŒjÏ# aŒ ¡†¡|€ã ËœRj0“5úhcÙ@jŠçaÁdÝKTVÐÚ\mBŠ Á#2öœý_¹wÚw¾ €Ü‹Å »±ñ‰/|OŸÞh& Ê(1(aáQOý&´ whMMG@ÙE[·mÎÙÜο `D¦”ê€{Ç„4–(BÊe3ÙZ}4Èe3"ÔÏÂɺ—¨þ¬ µ1èÚÈEiägÿŸ¸~Ź¿úurÿ~À ¡ˆ·_¾äO«Vš–•Ä” „ä\äºNtFµ± pZÿÝ®èPºN¼g˜Ì0 Æ jÀ Ap‘ßµ4Ú ±|@tiÎ%­»w¾2qÒ”Ú4ÞÖ-›®]y³G„ZãyX0Y÷ÕŸ´6*¡ çTúK.¿ã•­_»÷Ú;î! «±ñáÛ?y¶yéë–" "+y†çz³½g»LÖ÷æÑù1Û[Ôýw’ëî %?uø`ËÞîÓ=g;Ò©dÒ4¥Te†# × !Íl¹äõ½;;Þ<\ƒÆ[~íª@þkŠçaÁdÝKTVÐÚ¨6Ô‰a ¡eöÜÝ»¶?sݲ¿Y¿ynË/¶ÚÙ8zX­)cÌ`ÌP{9‚Å‘cqÛ»g`hèžðè;ðÊv§’Éd2‘J&L“1f¨í«÷€0ƒ†¡ˆõ# ÎId¹œÍf{{zûÞx£·¹¹¯¯Ï¶m)%ÆØ0 Ë2MÓ´LÓ`ÁäÄŽWE¯ pðfÿ㿃[–‰9øÆçîhœ=kTccSÓèQ£Òi+a1à „øwE@éë4444FšB0ÃPÿÌ9³­L&›IØÜŒ1¥ÔdŒ™ŒLÅå{ÏiŠ[ûyýK…ÀÝQ>€$“”•VÿLƒ1f¨vK;u²RçhhhhÔÔR!¸ìô%áÆ”bPŒ±RHFÓè"jïX0¹Âh[-O$r¶ËÙÙ\Ný#¹¬9h> jûÚkhhh £Wç$Œ ¥!,¨„Áêü¬¦Œ !hCHP}òÀ­±%ÒY¦R)„\p.¸Ím„¥„¢bA¡> jûÚkhhh ;7 ÎàœJ)…Ð.±:ŸH) è\ñ±¦gž÷ÖÒæZ†|_ò»æ´†A)aŒ5 ƒ„Rjæ•åt>@CCC#Ì @>= û÷ñjÇi¤Þ ¤”\‚ñ±OÿM€pã׫À-1Þ6,n3MÓ²,Ë4-Ó²L3aZ–ɨaÁò: ¡¡¡Ç8%!ày\;—ƒ‹¦g&Œ7¿3àf÷®.kû‡{w€è¡€CNjì:wB $¨· \Šœmãdà¶q¥ûÐÐÐÐ(Ö/¸=„:ïKJ¹ãÁûÝùå„í[\#¾gßÐÈÕa?]µ‚ Ř`L óÍq[H,Çè|€†††F9o RJBˆó:—,jÚ<ðÁþV€µ¾É?GÖD­ûóôi½Ó.Lšf2a%“‰d2‘°LÓbŒ1ÆŒü2ƒât>@CCC£L7À¹ „`Œ?ôo‰›n³Þzûƒ¯;÷oá~GgÓè_þõm©d*•J64¤ÒéT*•J%–ešþ½£Ëòqò¯¿¶G›YCCC#âU@‘³íl6÷Úý÷ÞøÀ¿¦N¿?€¨=4îïÁédrõ×£“ïYÝg’‰ÄÙ3ÉÓ©d2‘°c†A©ÿ%`æ¬Ù¥û€‚ù€7þòúô‹fk3khhh„AmîlÛv6›íëË´?úóùwÝ3êÀÁbëyk„ÿÝg&¦S–e¥R©T*•N§Òéd2iYê,Iê?Kò¥-/Ì»¬­D8¸ÿÄIç5O˜¬m¬¡¡¡ý*À9Ïåìl6Ó3¦ùÐÚ'FÿðÇüàñ+Ù´bÅ+Ë—5[fÂJ$SɆtƒ:L8•J%“IÆLà˃¯½á¶gÿïñ…m——â æ&L˜Òñæmc h7 „‚çr¹l6×—é;¾òš­‹æÍ~|ÝÌßþ.úÞ^¶~é4fÙžâ8Aœ‘ávO¦÷l3(¥„P ¬¤Rç ¿yd6Û§ ¬¡¡¡ !T^@ضÍå2™¬4ÉÖ[oüÓõÃÏÜ»oòþƒÍÇ'zûz-ëíæqÏŸüÊ…toÆ”RJpX $û[TùŒ–Öˆåù*Ž˜îÑMävFK«û+O}±1kv“yh"*)­3„UU°\2fú•f÷‘ê@ιàœÛvÎþà¿ms.¸2F1FL ¡”RƒTÁ DC‚8+Â*•H7ŒÒ>`Xø€ƒoì:½åà{ÕGu=uzK±> XÏÈIà-Ny9>À_¹Cã?¾°9åî3ZZÕõÔé-Î-ñ âÔì)÷ËQI±> ¬ª8åJ@UOÌG“ë „ÐÿÐÏm›«¿\p)òŽ"ÿxÁ„R‚ûÿ‚ !€cì ÔÕu*—Ш>ÔÏlB9­‚¾dH‹æª Aœš£Ë« 8M86 |æÐ?^j¿”R=Ì !BJ&lDŠq~3j•öÅ®èüõÀ•Êh íˆS”Kp~–Ãôñ¨[¾ÆE,¿¿?¥G·ú¤ n@í-ªž÷ !ΊbpmDªFy÷êßbGÿbs½_F¼- £‡ÐAaÏ“‰Ób rÂø)¶‰aýÌQeOý©‚°}ÿÝ> „†*•`Lç„«Òòž½?^_µ|Àäó§uÙ_”€a_…Qú›ð XS§·òÍmXëîòÀ뢊•WúEŽ®Ü)ì8²?âÞh­†5á—Q1á>‡ÀïÊ1*•`ÌdÌÒ–«®°J.y÷íŽæ‰“ß}»ÃOfGO¹ûvm üôq û*ÒßD‡²hnÃZw—^Eàn4¬Å@÷·-ë.Œèam…5á)w®õ(1¤#F*—`Ì4t¼¨ºð+¼Ø’Àkõëu£óä»þrUèþØ4¦9>çÛ86iVwETåÐ(7Ï-†uÚˆ&"¾*¨Ûh‚˜5»Éü4žo›Æ4¶¦uK´žÃšˆhÚ]­ßXÕŒTl}³ ý–WEt}¿Ì’Àkÿ-ÑåEÑÄ©¤æiÊg8âÛÀ¯ŠÒmœë*X¶(AŠj.ð^ÏQTЬÈA¥òcÚhhhDŽzˆZýg rù€\6›Ëf´–544`ê´i¯í~e¤)Z˨!ôÞòCŽmí›®¸jY|úâò3gÍzýµ×:ŽÖŠÖÐÐШA,¿fEQôEŸ'@ç4444F®Ðù ‘ët>@CCCcäúÐÐÐй>@ç4444F®èééÑÑÐÐÐ9ÀZ#ú=`õêÕZ#héÒ¥Z #ÿKŽ›£a£hIEND®B`‚htmldoc-1.8.27/doc/htmldoc.book0100664000212600000240000000170610330505373015000 0ustar mikeuser#HTMLDOC 1.8.25b6 -t pdf13 -f htmldoc.pdf --book --toclevels 3 --no-numbered --toctitle "Table of Contents" --title --linkstyle underline --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer h.1 --nup 1 --tocheader .t. --tocfooter ..i --duplex --portrait --color --no-pscommands --no-xrxcomments --compression=9 --jpeg=75 --fontsize 11.0 --fontspacing 1.1 --headingfont Helvetica --bodyfont Times --headfootsize 11.0 --headfootfont Helvetica-Oblique --charset iso-8859-1 --links --no-embedfonts --pagemode document --pagelayout tworight --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 680 --strict --no-overflow intro.html 1-install.html 2-starting.html 3-books.html 4-cmdline.html 5-cgi.html 6-htmlref.html 7-guiref.html 8-cmdref.html a-license.html b-book.html c-relnotes.html d-compile.html htmldoc-1.8.27/doc/htmldoc-fig13.png0100664000212600000240000004713310322727434015552 0ustar mikeuser‰PNG  IHDRæùÛq Ö pHYs  šœtIMEÔ #« IDATxÚí{|]Wuç·T'²&b|E3 uÒXJkBìt¢Àqœ¨5.ÐÈ·(qJëiZE…&mAõІºâ•PªØtZh]˜8ˆ|(Ž<´([1àë´vdãiRŠ“àkP‡dþØññöy¬³öã¼®~ßOâÏÕyì½ök}ÖÙçwêšrOï;ß½H±âšëPgî¾ûn!Ä"ùÇ‘ÇC@ÎYäýZy˧^úU'êDݹþ¿ë^:¦.ð#⬺:!„÷àGhZê¦ O00 â¬sÿh@œÅ3 \xµœ?™oiv 9Øg1 Ðh¢Ï:o ú3úsñûó5 ÇdÚõ¸j@Q€Ë¸lpÙÀŒ¯üý;¾ü÷ï@=Phùþ~öø!DÓ«zåŸ?<¶]ñ²Wßñƒ£÷ùŽ,-ÿýê%„h^ñNuû÷ÿõ/…?ùsðÌ¿|Dqé5wz»þß¡{Ô#_yíz¿g¿ñ!u×O½îÝòÇø€ºý²Uý>3žÚ·M±tõÖ`Ù¦'Þçýþ™ŸÿSßÞ?¿åUkßçÛ{ôŸ·¾ú Û|Ÿøâ¹_}ÓûsÕ–_ýL¯âÆ_ÛÁ<~üS¿#„xýoý·eìþ· !~qóÇ10(†ËŽâ?¿ú!ê~ptP±äª>噪8y䣞×þþῌMê廄¨û^åÃß=øaéµ¥¿nyÍËDO|ýƒßùÚ~êuïþÎ×> „ø¯+ß#”'ìøëý•Ëô£ïB\Ñù^!êžœ¸û[_¹[õÚÒ_/{ýÝBˆãüé7ÇÞ«zíc_úŸÁŸøâŸ!–¿i øX9'Üð¶í–6­½íãÊÊ@a]6ÍÉ#m¾ú}~Š]þÃï¾äµÿÈ8ß˯ÿÂküìš»ÅùÕEê¯ ï}·÷û¿­û â_öü±z@Ç›?|è_ºŸ(o¸Gqðów©¼æW>òõ‡þ@þ~Ý[_ªÃ#çï]®»å¯„“»_±jãàþú®¿uP±ïß¡úku–=ñ·{»~~Ó_3ˢβÿyø·½íoìB|q¨ÇÛòKoß)„Øû·›ÕÓ»~ç~ùãáÿõ[ÞÆõ¿÷)!Ä>öÞ–·ôþ=f„Dz羹}î›ÛçŽm=¿tn~}òðG…/¿ú]9)XûïB<9ñ¾''î ŒHŽ?ò§j`䨗þç•¿øç:þú=BˆŸëúÀÏu}@ñ/ŸwÖ׬ÿÐ5oþâÐþ°ã-.¿åÃBˆŠâ¬¯ýå{_óË÷ !¾ñмöW>òÚ·~DñµÏ½Kñµ‘w !VÞüÑ•7Tñ؃¿ï5¹»OþØÿÀBˆÕ¿zßê_Ý~ÃÛü-Õùë;:ýc¿þ1!ÄWvi‡°¿4üv!Ķ|â [>ñÆ-ŸBüÓPâM¿½óM¿½Sñ>¾Å;ø¦ÿq¿tÖ£s›ç¯×¿ã“ëßñ©õï8ï¯ß|ûß½åö¿BüãöÿŽ€ËYöK±ì:ÁñÚÍ+ÞyòH¾üul`Dõ×Ë^ÿ>9Ýþ昞¿NšŸ}gp㪃œà‡:ËvÈ?±…yäž¿–ŽûSÞ–/ìø Œ7ri^ñÎ ^;+J8».4*ú2Mä»N?ºüè§oBÈ)öÄ?üžC“ä[}a+Ⱥßý¤Ùó׿)#r–x?…Ë6໕‹—¸¿3_ýs!Dûáñèo}ùÏ„?û ¦>~ôxÕÚ?—X鸳õ×…fÝï~²®î¥‰6 H.ûéÇï•?þKÇK«ý¾Wyi©Ÿ·È¯å54ûÍ~ãƒÞYr‘Ÿ\4òί¥ó-òóž=þß}Û–ÞpÁ:¿öß;ýèûž<·Î/4–-#çüõûè‚,Ó_<ñÅ?Q×ù]}Óû¯¾éý‡÷¾ç_G_z)?Úóºî¿üÚÈ»ÔÀˆ|©rý­÷íàï ¤ξñ×v<úéÛ™óëG>ù;òÇÚÛþÖÛø‹›?þ¥á·ÿóΗž@¾±gè=Cÿ4Ô£F~éíá ^ðìñŸuâÍ¿÷w_øØo¨‘ x €u‡M®¸æº#?Y(Èè@ ýý9·²P>´w||o?@a€Ë¸lpÙ°`9¿bäÀƒ¿‰ê`¡òbàÈ·Ë>óã‹PC~â¬ße?ÿüó¨È¥Ë̲-Z„z€\˜e_|ñŨÈ#?¸ìçž{Õ9$$0‚X6Æe#– y±l( ˆe@Q@,Šì²9±ì‰‰ Ô8¤³³“q”~,ûK_úRGGêòùÏþ–[n‰9H7–}àÀ¥K—ÎÏÏ£~À!«V­zðÁ7lØ@cË>sæÌ™3gP¿àÚƲ—,Y‚š‡œ:uŠá±.rCŒ¶_—ÝÕu“ü1:º7j»÷; ß1ÃÃ_niy)\>;Û¸yó/¨G™s÷hjz®\~fãÆ'—-ûaðøÝ»Û'&ZŽ_"„(—Ÿîìœíêúv„©—Žþ´ÙÙùÝØZ½lpðjÂ`I¥òòáá+½Ä7o>V.?êàãÇ_¶{÷­ôÁ›7wÎÎ^›µqÑj€ØîÄ?˜ß39yí½ÀÈù‰=O’ŽÑ•ÊO†þ¶anî≉־¾FG/S·ÏÎ6nܸvçΗ¥¢R¹tpðêÍ›;gg}GnÞÜ98xµwäñãKʃƒËãŠóò;_Åqëýý+ÕÄûûWú¬Uýu_ß Ò_{W*/÷¶sç2é¯iŒ‹p ÓçKcdb¢Å›äNL´¸M|pðêrùoÇ×ÏÍ]æÅ.yÏ{^;<|~ú{ÞóÚP÷7:zy¹üLè„tnnÑàà ϱÒ<ð@û9 ¿*„èë»An ïïÞ}…ü10p ©é¬}q¤`ŸT#TÁ,ÜaÃø… V ô{øáóM|ë­Ój«ÑéƒôI<–íœŽŽ§_R©¼¼\þ¾¼Ó—[,“]¶ì‡ýý‡úûW !þíß–ø¢.ž¿BÈeu¾ïMöûûI—ÚÔôüÀÀ×î¸ãúÎÎÙu뾕oSÓs÷Ý·_ ÇGÑÙyB¹ãÇ_¦ŒÉ§Bøº:——?ZZžU¸fnîâ¾¾Ã2†NßÓ0‹Ö×w½×³³—ìÜyåÄDËàà~_‚êËèèå³³ÿÉ»ÏÍ],'þ>¬uÊÆk½ƒçæ.½|b¢e÷î±@•…­­/ÝNmÞüóÞY2Ž40p 4ú_©¼\ö5‹¹¹‹úûO¢ÃÓ†1 ë«@!„ô¼;w.Sï´ææ.Þ¹óÊ'=¿ÌL¤Fz±ì®®›ÔÿŒ-.—Ÿñœ©üWn±ÇjØZuÓŠ÷ü®ïï‡:È›šžžØ²å¸f äøôððW¢öúèï\:è¾¾d Ã7]ЍÜzë´çt&&ZËå§£¢^è¡XEÛ½»]Ö[gç‰Ñѽ'dMîÞݸöÌŽŽî8à¥ßÕõÔèèÞþþÊ9ŸòÓÆ§ .—.fãÆoŽîݲåØ9·Þè2…CêYr£]+}L\¯FRR°X:Ùçä¿Äª‰œ30ðõ¦&g¶Ë–ý ©é9oz¾lÙbO™˜x¥–--Ïzz` £©é9é­\áy-[¾éý+„xøaÿR¹Km5¹Å»c5üS¼#9éöîñƒ©åLÖ¿rÖ7…]]ÿ^.?U?Ãã£{ËåïŽ^60¬6m¿°çNÿ¶¯º¼î40pMSÓÙÑѽò?ÝôAš±lŽÎ׺ìrùéJåÒãÇ_6;{I¹ütê‘¶Á[80p`nî¢òààÕssù"F´y3²¾¾#¾ójÁ,šwk"çÝÊ*ÌK >»Åø/;ßœúüCµÓw–L¶©éy5²–KcÔ#Y·Ð†ñ U]·Þ:½sç•ò.AÞxmÞ|Ì{XÂO¤3–]¯FRH³WýÏÎe?#„¾ÒaTD† ÎMfOù~øÖÒyz oÂë[H78¸¼¿ÿµjôÙo!`¹ü}ové="fñÒÛöõö¦¨ò~pðj_„**`•BÑŠÅÄÄ+7oþ…ÙÙK:;OxÁ„‚²qãôààWeKúâ¾¾&&^ Ϙ[˜8_zÙO q¥¼Ôwt¸™eÏÎ6Êk€šfg笷.»¯œ˜x¥ç=;;gÏù»—ö t—Uœ8Ѩ.4#tªKÌGG/“&uu=ʼnYGÁ,š\ "k²¥eÞ[´®>óLÏ ­iwÖÜÜ¢¦¦ççæ t¨óÍ /„eù#¡ç|ÃÌ ¸$ÿ°¿ÿq!÷nãWÈ9“ô[ÑIu …*uæœìÓå1ÝÆÓ<Ð>7wñÜÜŃƒWûW¨ÑáÎÎïʵ†ssËgƒ*^`WÓW^°ÞË[Ë8:zYKË|÷¾ƒçæÉëJ¹ü´ï%ñj¨Ì¢uvÎÊ ùίêïÜ»ª«e’`ݺoË;ýÝ»Û7nœöVw”ËO±Žrù™ÑÑK¤ñ}}O<ð@{¥riì…vv¶Ñ8ªÛ39†™6ÔŒáá/{7¬Þ<À>}àœ¢jŒÈpvì-[Ž©¿ûîÛµliyöýïÿú…‚ýê*7eT<åäe“͛ɣ^9î¸ãpTE¼JåRÕ;˜M—8EÛ²åø¡C—?¾db¢µ««Õ»¢¡ö„îô¥´ÀÎWJw#Î-«'Îêë{B.=½Ü[/uJW×Sò¹4Ó‹õËÛ ·Å¡ 3+lpye9—ì·\¥œ“^,ÛµË~F8 d75=×ÕõÔààW}.¦¥e~xx¢¯ï°àîë;<<<Ÿƒƒûûû+Þ…¤\~º¿¿âêÕƒrùûjØqÙ²Sƒƒ_ºÉHà¥Ðø¢ î߸ñ[2ÒÒòì–-Ç‚‹²S`ppW×S^@¦³óÄ}÷íu¦ÃÃ_Që6jQ¶t£rµ¥ì3÷Ý·ß»L&QÚ0³Â*Až¯oÙrÌëÛMMÏmÜø-uQ¼eúÀ9L\wøÐäŠk®;òøcÏž©#’;xð`ss3ÄWÀ-§NšššZ·nqÌ% />øÐÞñññ|Ų`a½l( ÅÓ€ Sc$_ë²`aRÈuÙ°0A, bÙPˀ€X6IJ 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0õÛ6t)d’»“í…Æ+TNJgfç,ã’Öd»{˜¸vbÙ]]]£££Q望W¥«íJµÄŠeôè訷1Ê›ËrÖãïýé›y)¨‡ùŽTÏÕ²Ù—Zp:Fçn–m?µ¼•.Ô ~ÊÁ¦Ô*uè‘¡ù ‚X6kxssæ.ù[½BØ\ob/3œãc‰µSפ\•ÎØ’ЦäçBÏ 4X—mâÖ™>7¹¹'åØcìÍK¨€Ù–Î,e·U¡ÎôPÁºl7ñ–¢äÎ e·n“+]TÊfÖÂc°.;¥Ya~r½—Ïmð4?¥‹ ñó#UcË.À¢€^Ëרºì`ˆ˜1¥p#ï<\›»ÖRâ Ý_ÞJ§u–ýÁˆœ€(ܺlŸ×Výµ/^É6D‚ô( Ì‘0Ï,w­DÌfŽ’IéŒ Œ’{ H8'ʳîÌXvÝáC“+®¹îÈãùñEÄ hnn^²d jrêÔ©©©© 6.ûìƒí‡ÆdÖe@aÀºl( X— …ë² 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±l Í±cÇP ®¸òÊ+Q €bÙ@Û_wtt \ñÈ#¬Zµ õ˜ – 4˜™™YºtéÒ¥KQ®¸í¶Ûî¿ÿ~xmÀ±l G[[ÛÑ£GQd3–]ïmzžZó;vlvvvvv¶«« ÿÿ«‚Nø0=pÝáC“+®¹îÈãùñEDrhnn^²d j¶V#gΜiiiAUØð¶·½í3ŸùŒ÷çÔÔ# –S§NMMMmذœeŸ}ð¡½ãããˆeƒs}¢¡¡¡¡AñÖ·¾õsŸû*ÄÔ0±l ÇâÅ‹/^,„U·wuuÅn¡‰=ÞU‚ºé8's@qÁºl G©TjllB¬Y³f||\Ý%·Ó[hbw’ ÏìôQ 8yò$:àƒuÙÀß¡‘Î}Íš5ÁC7ªÛ½]r‹üWÝbà…Õ‹ m•º]·„yÁ«L°.¢åw|^Òó¹A×LYþ)Ýe0'kUÔ1D)bÉÃ4f,»^¤ B1Ë6;8sÆÉT«ô¥ý˜ÁôÀˆe«Y¶YúY9>­”c£%–W;TËi̲-C) ›rhä„H±l` bÙ w³ìš÷hð×ÀIJ¿£ÆDØó7³X3Fa$16€“µ¯fËÆ – œÍ…£¢ºQ»|c e‘Ÿo{Ô¼5è}Ï9i«ï‘£n"/¾øb]]æÚÀf,#@!fffÚÚÚš››µÎZµjÕää$jÏ«_|QQWW799yòäÉÉÉIhŒ€X 1Lhll”#år¹R©0Ï’§Ìµ%ˆe=/^ÜØØØØØxôèÑr¹ÜØØû¯ôïœ#¿>¯¸6ЂéÏFž=SG$wðàAFj;0²jÕªR©„ª0¦½½]Fήº:¨Df`dݺuÄ1—4¼èŒ`]6#RɸÀkX— ô˜ŸŸG`^dô²mmm“““mmm¨ xm ÐËÚ^{fffffUኺº:T``âµ1Ñ6æƒü ç©½ç˜\&ˆeÙÌZzm„DIJÈÀ_KÝÕÕ…ÚZ – @ª¨³éÑÑQL´ˆe@a@,€ŒÁŠÀ±l²Á bÙPˀ€X6IJ 0 – …Ë>ÿUšE$œ,».„ŠÈâm±¨óöÞZqߣÀðaz`g±ì®®.ߪ¦à–ØSò@®L’U”ÏŠ8$_±luÂ¥Š0¨Û½ßž{R]•÷;˜”êÚ|éxa_¦Áb ˆ:>6ƒúT:¿8uhYvµ}qÕ –ìcÙ¡ž×ûÓ7ŒC=rìÄ<4ú0cß­ºE¾º‰_Tø•À)‚Ïï”Ý×¾ð×ФË–C”ŦÓñÍݼÁOŒüD'ñØct-TKU«¾4-+Á'lTÐhE$íX¶oZèHæ\’{ö¥•2'ÂN<ÊIåà‰" ‘e,;QÉ`",μO7åÐèAl"¡±~ã¬]UfÓ$DÚ±ìtž/-¨§XÁ8èÖÔ*¬Ëvèª|aÜP7ÍwaöÎÎ8Â`à -rhDÛ¾$ ¤Ë:5ÀYÓ¦®RàäB?”ãç5± C3Sv›ˆÛJ0ÎÝàD,ò€ 3–]wøÐäŠk®;òøcg~|qüš››—,Y‚šÍð†šS§NMMMmذ Œœ}ð¡½ãããõj$…Õš+J Æ`z`èe˸ ‡d£—ÝÒÒ‚ªOJ¥‚J }fggå'Ÿ|RqöìYÎY]t‘âŠ+® ŽÉ`]vKKË¡C‡Ð¨€Æ›˜ž={¶££ƒsÊ#<òŠW¼‚>&íuÙÒ__ýõhQ@­ÒÐÐ0>>ÞÒÒR__¿téÒ¥K—rκí¶Ûî¿ÿ~z–ê·¥¿~õ«_ÝÐЀFÔ0kÖ¬B´µµ=zÔU²IJ/^¼xñb´( †9}ú´ü133ÓÜÜÌ9åäÉ“±ÇdËnll„Ë,—í– ô²—,Y— ¨aªÕ*}€6Ñ%ÕX6€5kÖ{ílÖeÀBöׯsí|}ûˆ¿6óÚÙû¦¿6ðÚˆe@˜=oôX6IJ A®ºê*æ'N:«¿„X6$ÈüüöIJ )^xá…ÉÉɶ¶6ÎÁããã—_~9} b٬מ™™™™™‰=2Ö_ IJ iΜ9ÓÚÚê$)IJ AΞ=»téÒ¶¶¶cÇŽÍÎÎ644,^¼¸T* !š››/^ÜÐÐÐØØ8??ÿÐCÅ~â±lHŠúúúŽŽŽ¥K—=zt~~¾¥¥Eºl)h*µÜÒÐаjÕªÉÉIúˆe@aÈ2–ÝØØµ‹³Ø%*Á¨s£öÒg¹-¬®mùDZ[*•Nœ8Q«£R©lݺuÏž=ð W – ô‘?ªÕêØØØÚµkk²˜«W¯F[ƒÂŒe×{›‘X0ÆBk†•ú³Ÿý¬¢§§G144„!@š0=ðy—}1‰óðÆÆÆéééM›6Éß½½½êcccË—/oll\¾|y¥Rq’ioookkkccckkë½÷Þ•ÝØØ˜ÏΑ‘y¢ÁM¦ f´zõjiÃÖ­[ù6ueP®¨Yv©TÚ¾}{©TòfÜÁ¤Ö¯_?==­–+ª–ˆÜéªy³¶©1ŸÍp ?0=p–ë²W¯^í}•ghhèäÉ“»víBT*9V…ÓÓÓNîdׯ_ïêjµ*ÝåwÞÌnýúõûöí+—ËÞ¹›6m’?˜ŸæŒBͨZ­Þ{ï½ÍÍÍL¢êʦ\Á¨ÈÍ7ß,ÿéîîZ>66æýVñÕ‘{¬aj^«W¯ö®Ùccc½½½2 m\cäf,»^¤O¥}¨¬]»öĉóóóÛ¶mJ,õž{î‘wè2ª oÕ-‘~Mf'ǼÌÅû±oß¾ùùù}ûö©»$ÝÝÝÒË1¯–KfäÅbmˆª+›r©HK¤–.ã$¡-ê÷}µDäk˜ZE•JEþ)Kç]ŸÌjÌ R-Ì0È3L\wøÐäŠk®;òøcg~|‘Ü𛛣d«ZZZ:tÓM7Éeä±+Fä'NœÇ‹ WVøöV«Uù~‘ÍŠ‘åË—OOO···www_{íµÞüQÑÚÚêû§·dB¦ðÄO´··W&¦mÄ‘±6DÕ•Y¹|ÈV÷Êd=Sé ­%"÷ØÂFå«î5®±b­áy£Z­ž>}z||üôéÓW]u•\—=;;ë­Â®Ë>}úôÑ£G'''W­Zšæ©S§¦¦¦6lØ@βÏ>øÐÞñññ×eÇŽ oDÑ{}‡ù®̱·gÏžM›6U*í-•J;vì.øÉdßÂ_;ìô–¨º²)—‡œPW«U_Ý ©·8Q-ZKDî|ÈìŒk €|Â\—]¯FRÒ4Ý›ÊqƳç,|‡É?½qÛÞÞ¾oß¾'NìÚµ«§§§Z­Þ~ûí>ןùÊœ”+j}ˆo;¿E8¹;©ð¾ ÔLœ`,Û¹"Ø[Pá[Y¥2´ºnÝ:ï9Õôôôºu뼤ĹÀúÁƒ»»»åÓ9ÏïÈ9©\T066&W $Q."#cìËU­V+•J©TòUl©TªT*25™”×Þ“Æ” ËL€"ÂôÀ ®ËŽ}üÅ]wÝ%§xò”Ø5ÂÛ¶m“þE®Ÿó––J%ùèÉóÝëׯ÷ƶw˯f'!l߾ݾ°t¹dFö6Ø—KFEäZõ!¤¯ENž<©Õˆ¾ÜT¸q"^Xœsá 5r½.›¦\.ïÙ³G†;äïØàÀÔÔTOON-•J===ûöíó¶ìÙ³gÛ¶mòO¹×ájvrarB/þù2ºóÎ;弨Æûr©kE‚.[îU“êîî–+4´ «æî¤ÂÙ±c‡/ò@`zàDVŒ€CÞ4zïìT IDATx Ÿ‡††z{{ÛÛÛŸxâ TXPähÅ4F@ÝÝÝ###¾wšœ¬—p<0ô²»víêíí“ï‹Ëeà^T`ô²K žøàÛP — …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±lH©&ßÜÜ|æÌ©ç7??êÔ©ØË€¤xá…¦¦¦Ž9"ÿüÑ~¤îýÎw¾£þùÔSO]~ùåt‚ˆe@²^»¾¾~ff&öÈX-Ë€¼6Çs@, bÙPˀ€X6IJ 0 – …!³Xvcc£úçüü¼ºQþzdp¯úgð”ùùùØBwéæKuŒÏÂ`=DíÒª%âÄ`vZöD%UÆ`õ†Oמg'¿9èf¥72+³1ªöÒéôaô˜â”‘¨í`“Ñ­eÈ,–íkBù;´]ƒGÆ^ |Ó)„Zb/ǨÃF?¾sÕ?ÕßüRæìŠ`A{ˆJˆª:߉Á,‚ÕB7«A£m£7F5 Ñt"Qµ—hßÐ­ÆØNNŒƒ¼èú‚Ë®W#))Xt=±„³Ñm¾QÓ·(ni{Ô îâã+=Ìè§Zh;™Í‘táÔU¬¿N§oÄN±Í*3ôÂCÜUXf´0azàz5’B´¹üé•M ®ÎJâr•´%Î'8¡3¾œØjIr5œèü‘Y±Iw!ÝùÐ…é“Z—Í]Ñ]!xI÷ENc‡blˆ6…›8­!—ùPßQóµ4o~£¢¥üfÍóŒÏaßàfÐFfã ‘]2^—­u'."BœÌ»³¨轺ù:ŒùhÝxæºÂÓñhZÍšœÁöŽÉmß ³ 1i]§1 `벉‡{Ì!á*ÎÝn&³9ç‘Ü$nÏCŸ§éÚŸB »Ð­oИÇ×ö JæºìÌbÙ7°_@ÏlRNÔýi@¬ñˆÚ¥k0òÈYɹ—·±ÓU³ºê¨éGN’0)ªà®‚昉ûÈ,–ºbÁÛlQÕÛ±à1ß^â6“ðbÌ|é\è²s’¥öҹ؅î✵ %¶*¢N¤»m'¿Þ´š•_ ±•îíQ«³ê‡P~2D –,×e;ÜH/'âÄõ˜ÇkåkœcT²|ôà/;#LµS«Ônëͦö,;ª}"nû†YßN´àfƒhÁ( Ѐ½l( ÐË€Â},;v=¿OÔF=Æ^ž-*»¨Í„è,ÍZ›»qYB+DðÔàøªu"zÍ ³†9JxÆŠL]ÉÐvL¨q£¾„…ep-‰Ã/&³?’´mQŠ%BYyBtZéÓWÕô+¾é“ÓXv”˜+y6Âlj„ètÅcÝørne‰*`ìÛ+Zªu±Z9/ÅÇXqÄPK’k\ºÞt¥(9Rš1H¢–èú$Ƹ ×Ò*±]‚3FB×íäÄk3cÙõj$…ÀÌ5G½èAÌÑb?½1e!:-³Ý¦¦[–(寅ѫŒÄ”JK¥“Y|¾â#SuOD¿óMO-×¹f¡ñ­0aǨ1Ω‡‡E\SÈôÀõj$… !+íåiŒß¡JHˆÎ­…L½|㲤9¿pRÃN£¦Z™7nš¤SÊŠéýc¿a0…ʉT,Ó'».›¾é C`ÆÎ:}!:¢ÏéVa¹Y%d5Jß„Ú+>2=_LÃaãõc E)x1òãÓÍ4,9sDq>ˆ“},Ûàk/éȳ9×u‹ŠŠºÍÈy%$äÓš°8Q|4 ‰¤Ó‹\IQÆFÏr817Ó°¤G“É'Y®ËNHÍË­<[BBt6Æ>*šo§<8™Ÿ[³ÿ0J¢Ý,ýÆu®Y˜+’n—šyž¹.;ÕX¶“ïkðƒ¹)ѹ½çàÛÀ ’Xªâ%4Øè49™Ú+>òo±Ô†½Ú†CÍBz-)ÉäåŽyŠ«YEcccÑ¥3‹eÓ²aL 0¦<[èÆ4…è¢ôÉtµß˜Uj\ ÌB1uEôS Ž.§ùÅç(>rj>xŠ®ä¡eãZjÒ6D%å­ÿ#Š©Ûb_’µMè|×&ªKD)}òg >Ê,–+f¦s¦›B:BtZRyZ» ÌÖªF·– Sí=ãWˆÆ%$yè¶qm¤+;†YÈÑI}&´ÎÕ8ñ Ã,Л>åçíGhŒjÁk:}>Ðˀ½l( ™Å²cåǘê_œs[oóFYìÆX¼P‘¨š Ú¬ŽÌž`è´1%™ŠwÆB…Ÿ+@ŽlaNÚšnbΉB_Û’Ö¨á(ÿqªd¶.Û[Eä[?|¯_„=¶UP7zÊd¾sÕ|ùFjm¤W #ÞI ÚIÔLlÁé:uŽtñë3ªì>à úqlsÌ+DùšÐº ÖgNÚšnâ¨?£ò⠨†–Q-;± P×…éëÕH ›øjjÄT%ÖÉ M±7ËÛˆÐâ$·I÷DcIŨuÇ6œ)v¢*€º†eØÖ®>­ûn ]±„òŸ½Nç‡é³‰eóebÕ“Ó‡i€s -83–bãn,ßt^vÅêÔÚº6B ðÚZd¼.Û¡qa×ÕisÕ‡bS3Óz•ŸùþžYñ-öµ©Ûä¼vìAšmíü]|Áжy ãuÙ„¸“~£%ý•~XÍ ˜Ìo׺»·÷ÈüÓùr™´TúwºßýÒí$ ˆÔκl›Htrbo…xÀÂ/~¨Ø-±ñSf¦fUçéç[saLêµ`®Ë®W#)™{í¤'O½ˆ‡<©YèÄYúG­²[–Â^ÐÌ’”Û:¡7¾%’¦¤jüµLœÔºl-™±à.]Ñ5ýÉNZ#-8 Å8ÚªX­;;éO›sÄÛY8ægO……@c°–˜¦ZªÒíB¿eØÖœ›21Ö̧ìÄbpKf±l-½7b"µ×X$Ì^ÏFóÏÞNWÒ†NjÌX 1t¦–œ  –mùiëD[3 ? 4F@NÁ-3A 1r ü5A — …zÙP²Œe‹ˆÞ.Ž2­F«¬FZ¢„梎ÑKãkF%UÛÌ ¶t"Ѧ±ý„ÐÕ fí{߯ú¤Z"æÛ§Á$üеÈÔ ººŒü.Q2‹e‡ö’¨%¢z•ï4u©YðD±ˆXb .u"ìá(¥ß Ú58ƒÆ¥ˆª¢€Q [ct›Æö¢ö¢ê¹Vû$§ˆUÒÌŠÕme¢ã•ÚbG ³Kf,»^¤˜õ60} ·TA³‘î#|Ò s‰Š¥i½æûâ’t"§Mcû‰“WKj£OÆÎ–è >§bdò¯åf£¦–ÞÚgzàDô²ÍêÑÕ[éNâ9IÖIhÈ媀|cBçV£(}2¨‘ÍT'ΰǦlÿ6lÍxm¦N$–­«´§ŽàDôèo…p"­Ì[ѢܑÅV!EdPÀ„ªÅ8Ùšì“™W¬€m¢bŸE$ãuÙZiüx¨åäˆþº•±$fmà°òY]5Ö'3lj\ ô¹8‡ë²Íbvô# ­Ë/g­H®æDo2_1gÚ“ÜD{!÷É„ºGr­Ln­X]"92ûö#g¥<±e{džDmæWÓ’K³‘sKáÆ“ßOtY }2ª{$W±ˆýõ¦è.;ËXv0<«ôF ûiåË„#ž˜§£0ç\,M·†ùrnNd꘧ôæ©fú$ÿ†Ï¦{˜µ²ÍÑ5œþY82‹eó•ö„©$SëNK˜cƒC…¹$ÄÒ´ôüì?8k€°Ptòu…"öɤ kÓÊ6DwÔ$T{°àX8Ÿ7„bí°@½6Š Šô² 0@/ Cf±l¦f!{û¥¾Ð{C·"cuï R:r€D¾´ªýíÇ(›ëò+AW/T Ði‹’Ä¢;apoì[yœJ3ÏúÚŠü Õ‘ÜjRò»®£¨ÉQ–±lŽf[”²¡aF«¾E]?8ƒœÿsÔhäÈ5ÀT•Ó}¼æ\¿P«ø²mQªxœ¦}«Ð7òuEc+ÍRGe›ÃV6ÖVL¨¿ÙxmçÆ,@¶œ®ËŽ•Ï§ocuo¢íÿtƒ/w¤ÓË“Ó/äWñˆÒ‰brâS¡W÷4õçè¼’–ßrU]Æb¹Qý°V%кl¾®Xп„ÎImC&#'ýBWQNÜ#o㓞õ§ ­˜è]Z!F}í½LÄ\—]¯FRÒô> õ?KÝT­Þ¬U ·ªrfö»­ƒ¼èd …#ËJ°©êàZ]ñ<mÅ„Jg¯I™òd¥f\6Ó'Ë6qñÐàPD«Çßð&>PËI-4ÁààaªÁ1¥û8 &ª_(Øšpt^±Ú´N[l˜U5ÑšÄöÔ´c-4ëH‰jR&¤X“síŒcÙÀ´n« ´â˜ºkº·öôç_µf7±I™ÅÖú…Z•`Ó” sNªÚm¹ÕV´ß«Ûpöš”«}´ús-‘ìoÙ Ý`‘Œ¿ð^6èe@aÈ,–+ÐElÔR;FßdzÔ- =‹£Ü¦›#}˜ Ãð :²vL!À䤉f%ÚÅ­Ä ‘]Ô‰Zmj0 PŸºúóI–±lŽ@WÔF¾Ú™™¦—¥n™°VncæÔ3ãT©®t2m#Þut+å;WHTbîœ9mj< PŸüúÌ'ÌXv½I!Ðõ×±×:æú!¦Ú_‹N«ïò¥ìbEÔlÞUáT©½±šY̹LÒRŽYI kï1'€ü¾úL´–²‚éëÕH [ãœ\ݾgyK‘fŽ‹loUBâD©µ Q c3Bå­sÕî¨Ï|Ʋ98íuÙt[oôÒ¯›ÇJT[Êþ9<^ü£dæcëС³¶—räTfBƒÆÚ{ék¡> GN×e;Wt#4ÿDíê4&Ô(XŠœÖ±lÖ¬$Ó¢¢>k†\¯ËNáòÈyèäËàË^y ä¼)u›ÕU)܆Œóy;úÌÌuÙÙIJµBTQ7A)Dè8Ïô´”ÛDbJifÐó²ô]Ý¥&1h£½—•0/ê³dË&º‚íMÈ¿Ñb~LÍ?¦DS'Ì•rc¬Â™0ÕØ‹ ±w!Ì™ÖÚK9f"1eÖ‰D-ÅvÔ§n}…ŒcÙnåßtÕÎÌÄí,? œ*¥HФÚlhš5ŠY³Ú÷1~ üÞh¦GhŸ곈@c 4F 0@/ ô² 0d˶ú2 •C3ÒÕ£¿hG‡Wc&hf3q S‡O5ɹb¬. ýr±å¡×€.+EÉ¨Ô Ô7éâÐ¥¦ •ÐÐ˙Ų-…¾æççµR0ãh€%'V'âV§ÛLçÈÔá£[6ÔŽbh¦L±ÀXÇÄ™IÔ˜.CEɨÔlÔ7£º‡‰½üÀŒe׫‘çöÙ_è Ö$k€9«ãä4iݲÔD‰QÇ<ËØòÚÓ¥s«(ɬ³^ø‡qÌHzèeÓ׫‘·Æ9yMœ3Èm4À’{#–N6MÝ23Ù‡D_¨K§ Õž.[EIã—¼6™œ{Íó;îLœÔºl3¡¯ÐÙGl ¡BeN4ÀÌTît_áuk³MC0ó5¶ÇX5Ð•åœø©±³.Š.nvÆê›–fY8zy ãuÙB_ö)„†]ÄìÝH-I³$tË´ª1….n¦èÖrèÒÙ›BY ®dÆC/äz]vlþayÓˉ͜ɉ fb¹«¼ò¦KçVQ24&î<–~/ÊóíÌuÙÉÆ² „¾tSà$b¶Ê'éΤ$±émö ¡Ûû9˳´Ä“{jSKYéÒ¹U”ä?;åâ &U©yð|ε3‹e› }ïhø)„.Ét¥©FÏ鄾¸qgo3!çFWcTšnEƒõ+Z!º–‹ZÔ¥s¨(•šõM~/"ŒOnèå‡,×eó¯·IH…¹Ò3P¹ÓRLÚf³åPɉ ZÊêÖáBÐ¥s¥(™P1«Â ãpèåhŒ@a€Æèe@a€^6†ÌbÙfz{ô ²LÕ7"ýàvâ·—,½LMWOMÇ­Hž®\T[Ī ¯œ Ê—ZÔª^΃zŽú^¢™ê¤V×}Mœó&šnF¹ÊXÁ/N·4™Å²õö¢º…®ê[pìq´î8+jkãEù,]‘<-¸Ø¶ˆ•ÔxÓÒÃã·oÒb„¡oHÚ¨N2‹+^HdjQÔñZÕ›ò ÷µ 3–]¯FRl<¸Ö 4*¾ê›×Gmò%¤ì ŠÌLÙ¡HÓžä^äI,³Q14¨gõx‡>ÈR°0¹Œ˜Ç}záÞ¹/L\¯FR,ƒ$ºÍlÜ-lôÕœ Q›ÞœÎ`HYQÏí‹—Æ=J«0g„_N¦Nj]¶®Þ¡bÁ<ºwDZºk"î»Úx±÷’éÜc×m¬V"ý>GjѲG%]ÏZª“6i&‘©Ö)Dõ"’¯ËÖÒÛÓ ‰ðsLbþh¬çd&_\Ôx³—Zdö(ËzŽuFZª“6EK"S'1I̾"ë²Ó¿kÍ88?……òjìw>EòÒlâ„>)R{õœJò!±$bÙ^Ó:¼ vÒcì%’ÐÆ3óû®îÞ‘øžã™™Dë%¥ù%Ë.Áìºf—úͱw QÇÛ+ÁÂë’Y,;Jý+Jo¿3(‹Í…°?VÊŽ£ú–ŽH^¬°™ÛºÕxÓ’Z$l {”e=›õ%¦¬®Ž ³þƒgéŽB9°LBLÃùd¹.›³Ñ@ÙNè ¼1w“ncm¼Ø×…É3¨KE=7ƒùÇ»’‘K§Ô{t“('G̵µ€ÆH¾ ÿhŒd ú+@ÿ| — …zÙP2‹ekÉÝ™©£ÇÓBqL©<Á–.‹*G¿P} ÍÈ@þ-J™OW2йt³†í¤Kz°½jcl‚γpXÀ¨>¬%*YÃê›)å·ùrw–êhBS(.ÊHZú.ª˜‚” q²jQÆD rcù· ^]葺Zz|é>ƒ¶·“®äX¥:]ÕFeAf Ù‡iYǨîºÔ7ÃŒe׫‘çöÙ_Ó ¾.j  *]ÆÉ:v ¬®2‘ÃUS–’ºï‚Ô°;ï%›®úJwTgHBÇʸ€®$6ùÕ" «¾™L\¯FRÜgïz˜ŠnÄ[y™“¡16Y[J÷¥\EÌ,åœ2t‰P«ì S}Óm,›ã“Z—­%w§%T¦«Hß(™E{ÜŽ·„äßœgm)Ýgf}ÍǦÀy– ¥Úu––0d:4ðbô…ª†Õ7“&ãuÙZrwZBeZNš$Ÿ/q9W.4Ë‘/Ý—Û&\€™j#ÿq_:íhpÙ#f?±eµ¨¾™¹^—D ›ÿ.é²Â…GÜÖ@:’{ U²CYÁÂõ"‡Eȹúfj0×e'˶—»‹MÁL(.…Fâ˪1¯+I¸3cÉ@Ké¾Ôì MÁí7’œ|[K÷‹_n èdV»ÀÕ7íÉ,–m w§«ŽæKAK(Ž/áFH—1O1$z_þMØ©gUJH÷Ô°¥±-N(ØtB~… C:/ M£D%[tõÍl]v–ë²ùS$ûåGKýB·ØàÐ'§ëž›h3 kq8];mDû„Ñ‚3N- C:/ “Fq؇uw%¡¾™-ЀÂ( Ðˀ½l( ™Å²m”ü‚Û鯑ƦÆ<¤ôˆ“" =%X'N”ê¢*YðD éï@ ±@ˢѕÆÔ~FÊs|Ä(ÛŒµâ´*A«W$ÚÕ¥ŸÝ¿öi°˜$¶ó@fë²½Å4¾‡ú¶«Ç«»|Gýš±1h±QýÓŒ*‘ll-…à+1\}%UM¥ÛÂ×wcKwslшJ‹2‰ÓUèšdM·ìÄñºG¥L Ÿ¤;°º<Ρ{ò¬ú ¢µÞ§Õ]¯’!L\¯FRœÛçD»‹>‹#9:ý ÕåÌô‰Þ™R]Tñ™ÝÚ²tE ­gŽI‰*ÏÙ—W«QèJ0N<¡œ(øÞ˜®®W#)ns«ÝÅqÆ/©'Ý_S5L(êªË&J>…bÌ*!µŠnê‹lÞoï_âÈÐ郃{ƒéÍf‘ŽNj]¶–¼/1æií.ƒù]VWõ$”êtE ‚†œ“ásâÅø„Ìä+Ä…'tHª_& ÝzdðSD‚¡=<˜]T©‡_‰Ì‰ËÎx]v”D‹Û:ÒÒ–3öª¹iZ¢†®Ò·/Zõ¬«<[4¦¸Šq¯3ÎvRÂQBîÒºÇÕŠœØÈÉ CꙓëuÙN´»èÔ,5üºóM_Ú©ÐEˤËÙ”·(eIÁ’кb>ËMÓxç+aŒa®ËÎ&–Íœ iiw1ƒ$ºªÁ¥ÈŒ{*'Sƒ\ÄS®ð¤¿R”Ç{)t`çòxiÊæçú—Y,;Jî‹)Àf“‹™†_0MŽ$žÐWƒ³Wª‹-~”¨!ý ؉ZÞ®[4NsÓµj¯<§[4ÝòúŒ*lT.Q™rº±óì 4‹@¸9ª¤¾]¡*Qß馫.ø¸2jmLh½…>-–^¶ûX¶– —Ö.ƒ/ kÙÇkk)Õ‰0±:âĨQJè2r4CÖŽ£“ô„ðÝE9{Z¾Œ£#Uó6–ÓEà O†Æb«:4ž©+"˜„Â¥“–M,cÙœÅR{±ê\„_#©+f/TfËi¬çg#‡æ0bÐ:ÂTÓά½tÛÔ^ˆÎ^QIú9?ˬž“P¸Ì$ªc4F@,¡@cäøkB^6èe@aÈ,–ûŽI”|WÔí3ÿ¥•àFB-t;_êÌLçL«6h“ò&ãÚbŸD½çIW/_9ÓÓ´ÔãOÏ„PŒ‹í0±O·ËqÔõ|{SA4îl±5Æ×PÌYƲƒëíDàÕ#õOß.ZÃ3*Á¨¡‹ÃèôCmˆz×ÉñQµA¤L¼Vú–G”h§O* Ô™ÆV²Ö=jð Ç1€Óĺej¾¨Ëpè÷gcÛH·Æè‚™r”¢¼$Ñ£DÄë‘Q×à¨ÁÛá™M 54r3–]¯FRtýu쬄Ÿ‚ÃfüWKBVÇÎõŒ7«XþP©Ëø…Îè™&ÙÀobæý«æcÚÀ¹ðèšD,÷ŽÊ.Dfg£S¶QÌLœ ^¶Ã¸JBgqî¸Ó7íIô(JHÆ/¡ëÛ,9eÏCoO´þÓéxü,ÚKê¾X6ǧ½.Ûy磇qè%šÐ`#f Y]iŒM2ËÚRÆ“ÑLZŠ}±Eˆ ¦kY«U«6sÌ ÆõoïR“&Óš¹ghj ät]vì'ˆ¡”yF âIDATt;¢s1¹(Ix3ljÃÞ$·3eütï|CC%LÅ>ãVNNÿOWÊ*ô‘‰«ú/.Z¾fj ¨ë²Í¼RN.°9¿Î§&ãg#˧›—Ûg)ߘµÄ¬´fÁé‡GÌúsÑ'ÚÙû1¡ø ÿ,â aìRªØŽ•NÿÐ]ŒAØœ¾ŒŸñø´üŽÖ²±öºÃµÿz@l Që¦bkÉ­¢Í½fÊÕž>DzƒO¨9jmİ! v)Bø£!'¢ƒàA 9ò`fµA›”7?ºJ‰^¡gÑŠ}ZEà«ëñ…ñ¢"ËQú‘ºÆÓ}ÀXZOèèù¹Aä««ªmü Sf2C2ŽeÛhé™%hv˜–6‹ Íjášñ‰ºë·\­Ñ´,;¿‰ Äóˆ—¶œl´Ñ24ëÆ6µ¡»Ë@®ÏÞŸä?fŒo@ß ¸#$ü5pô² 0@/ CƱlŽÜ±ÌŽxPîmÉJBS:]!º „a‚T/ã€á@ÞÈ2–ͽ£Õ¶,õä’Рݥ«ók¡tŠ– od©—´ì¡î2)ËÙeìÒ%~‘9âdÌ6«RL±È'µËŽr댈ìŒÝ¥±‘®J‡¥iä–ü®Ë6þ<„C=3K =]±1-ÉuM+z3¿Çxù'¿ë²ÝÊìe%¡§%6æ\t-Vï-inYXë² q¿Ï7’ÿå'­X¢"ä–ÌbÙô§çèûz¦³9Æ>;ÎÃFK¢VøÙ4ABµpE–±l]µ6¦Ò˜–žYhŽÂ…„^è.?Ž } a<­„Ç @ÞÈ8–íDfÏà\ݳ\Iè }ý0Ù³4õÞi( Ѐ½l( Ðˀ€X6IJ 0 – …±l( ˆe@a@, bÙPˀ€X6IJ 0 – …±l( ˆe@a@, bÙ,gÏžåvÑEÅÃŒe×{›ž'á—¡‘„>€HaõêÕ÷Þ{o0—ééioãôô´/)!ÄØØØúõëåÆÖÖÖM›6©§„ÒÚÚ*-ÚÐÐPèö(ãW¯^=22Bç822¢ÙÛÛ[­VƒÇ¬^½ÚKsll, Û8ͤàÖBƒöâdÕÓ|p²6ÎŽ®ÏåË—û:sÐTÙ½—/_Îï«ÌAÄ©¢Þ¢:Ñ¥™NÀ²·hÐÌ_wðøÞ÷¾›Ó׫‘‚̯f•JeëÖ­j‡óÚ,ô·Úo¼íÕjU9 ŒŒŒÈ¾%°uëÖ ?¥-ß´iSoooÔ½½½›6mRºêª«T#·nݺiÓ¦J¥â¥¹~ýú­[·&m'ê¶3Sœ¬f磻»[ÚàygÕS{zG2û*s9‡Ó¥™ÊaoqK}}ýR6·Ýv[¬×fzàz5’BÀ/ɼBÔ߯àÞà===BˆàUWÝÜ+‡Ó¶mÛd"'NœX»vmµZ%†Ùg?ûY!„ÌNþöQ­V7mÚį„íÛ·KÛ¼¡îEÒlÏÈ}ûö•Ëe5—J¥"‡ÙöíÛÕ4ï½÷^_šmc¶£[ µÚ‹Ÿ)ÝÓ˜Y[fG×çÍ7߬ö75Aï·Ü»víZ~_å ¢Ø‘h0»ŠíÒ̬ôçôhkk;ʆËæxàz5’Bù,[ßõ³»»Û×¹Õ9ˆw¼·±T*íÚµK΄^ºK¥ÒöíÛK¥RèaÝÝÝcccÁ}===Û¶mBÜsÏ=Á½rã¶mÛî¼óN¹¥\.ïÚµkíÚµ;vìð#‡œš¦oø¹µ+ µÚ‹Ÿ)‡Ø¬Ýfç£\.—J¥J¥"'•B´··{¿e÷.•JªËŽí«œAäN—æß|¸ê-I033ÓÈãôéÓœX6Ç»e'AµZ•7ïårYÝ.»¯l!ù¯Ú¡½æ\¾|yoo¯løR©D\fe"rÊ#ÿ 6ÿ®]»J¥RìdÖçCã6ÞÊó’ööö={öx… =&4M·¶iM¬œX¨Õ^üLù¡ "k·Ù‘]W&¥æ%»7§¯rQ1ÌØ.ÍÄaoÉ?yeÇ>P··¶¶z·Zê1êí¤üWnQ›\ö’¡¡¡õë×G=ÙóÝiÊ®@ÜoîÚµ‹‚ð(•JrÌDÍäôÐwŒü38crh›îÕÞB­öâgÊyô›µÛ삨Y: 9K•³ì`÷æôUÎ rþtŽÓ¥ùYÛ÷–ä?z¬‰†ŸHf±ì„¸óÎ;e¬Ê7`ÚÛÛeÿkoov”}ûöíÚµKölù¤µµ5tZ$_x÷žår¹½½Ý{Âã›uwwŒŒ„†§³%϶q,ä·—s2ÌÚs¾cccÒåIg$CÀÕjUšáõ~_D9'·½Ee||\k{!cÙÌÇòÎHvåÐëvww·¼ã«V«¾@¶zÌ®]»æçç÷ìÙ#ûkè 9I©V«¾„Qm~B¤Pû9“\bÂ"Ã ÙÆÇ­…ÌöâgÊôDdDvÁˆ¶÷ôìÚk¯õþ½çž{ªÕªŒwkõUÎ rþtŽ߯ÌÚ²·$÷ø‘öÎZþºvbÙ²=ĹåhQ@yÇœ>ÈU«^ïY»víž={Dʨ‡HQÛwìØ1==ÍYãå›"EÙ¯Fׯ_ïM+ä1¾µYò”¨à Ûtã°öjµ—A¦±Y»ÍŽˆÈ´7Ëö2UÛH«¯Æ"çóâØ.­‹}oIy®­ë¯E-­Ë^»v­Œ¾ŒŒoyÔ~ô;r ¬[·ÎkWÙêÁ©_µZ­T*ííí¾«±ú?8Ö®]»ÊuddäöÛoBÜu×]Á½rãÖ­[½..ÇÕØØ˜×AƒÇ É©Dhš®lããÊB~{™eë.‰¬ÝfGÄF$ê,[â=Ð3è«ô r §KÔŒeoIÓkøk¾®;|hrÅ5×yü±â"¹G}´¹¹yÉ’%¡{[ZZ:tÓM7ùn»d˜ßwBÄþå‘¡gÉ5ó¥Réĉ¾c6mÚ422âM%Ô]Õjõª«® vbïJžôööÞy羇3½½½CCCÛ·oïéé ¦¦¯¤§§G.± "³Þ]îÛ·Ïë|¡Ç¨Öº²h2z£ ùíeœ) ŠÍÚUvÄaË—/—“Do¯<ØëùÆ}5j#‘3lCÇll—6p½E«€LªÕêéÓ§ÇÇÇOŸ>ÝÒÒÒÜÜÌ9ëäÉ“‡ZµjUèÞS§NMMMÝrË-D u?~öÁ‡öŽf]¶Œg…>;–Í:¤K¥ÒÔÔTOOw-‘wOÁƒeó­LçžÚG݇–J%ß° PîÚµ+Ê_ !¶oßî=û–iöôôLMM©“ß12M:k'¶ñqb!¿½Œ3%Œ‰ÍÚavtTA´Èn ®1ë«ô r §K4eoÉ9L|~–ýì™:"¹ƒÆÎ²×¬Ycù òŒœÔËYöë_ÿú(—œGúÓŸ¦gÙëÖ­#R¸¤áE9Ëv£—=;;ÛÑÑ1>>®µ ÇøøxKKËÌÌÌüü|CCçN&m½lxmÀñ×Bˆ^xarr²­­yÖå—_N“^¶çµÑ®€šDúkÉ /¼033333{V¬¿Y}ûqvvV-Ô$W\q…üÁœhÇ‚o?@aÀ· 0àÛP²‰e0±l( îcÙmmmx¹ÜR­V§¦¦ÜDzK¥óíLZ8Že_{íµ<òˆ«ˆ$ãããÝÝÝîcÙ+W®ïíŸvõgÉ–-›u$Y²~Ö–mY’õc©!@i§ ›6&!uäœúO¶‰ùÍs MIAdÈ4¤¡„Np&´K'™ºiÒˆHÚz&—”¦ ˜Ò‰QMœÖ¥üb[oßÞ~çÜûÞ¾•Ö<Á Žî{÷÷Üsï=ç;ç]kËÖí»šoÝܼyë¶MDd½ :Lú§Ž3,üš ªxïýDLø™Š‚ææšg®×€¤ é¬-è¶{ëö [6uoÙ½u#ér«¢sÏÞ›·mjÞºcï¦Ý{6îݺsÇž®Tçæ-£;·íÜÝÜ)I÷î-ÝмbÙ ù)óÐcºÐô£ešöL¯8ó›Þ´g׆ѭ;¶4÷ø=#óær™&¯ûÆ[÷‚ùÑ61×7íܼyϦ½ÍáÖ3³tNiS*þX_ ºüSD÷ÝOö— ¡|!X®‰KwïÞ¹oçǸ/IHôIóÌ?©Ðseè¹*ô\z®5}ù?‰P™¿Ô‘b±=Ðoƒn—λ@DÔõÏD™û@_ýè» §A/€Àë’F¢ž  Q/dØ÷3Ð)¢~Ȧeýè<®^Ê‚¾ˆq-Ñ:ð¶îƒ ­ ›AŸ¡lÝŸA¼^äÌšFÕKÉS­![¦¨¦?PaBÉS?•à§^~ªP… ZÉO)~ê¡jN–S-×è¦YÊ›¡%T¯JÆØ•ÂîNoˆ`©m®÷|? QájÏö¼Ç`´Ÿ/÷<×óÔçª0àë ü¢<÷Äu6šð¢žåæ½õbäW­—].Æ®÷ØBppêiyõ\˵¼üÉÏT‚ï«®gy®âË›r½¿{ù]ò~JËcþ¹! ü¾z•g²\ùßò îcNí“­-Ê‹3†3ÎDÕ±_Œ`—A¢¨±”êD°šÍ¹m¥½ ¥›wÑyÛL¹U]RJÉ?}Ç6(r34‡“N®=G“$]Ô00`½©>¡êTa„º¸Å,~ÊðSZê÷;[ÑHxb\°T×.&#Hº±²¥„ÎkC‰SLx3”’ÈÂïe\'ªÜ¢ ¤òj332…3åa# k¨& `Ñ­VS„|K­¡ü„R·¥Ö’7¢°×Ñ…S(Æs^Ax«IúÕ‹áN‡P9«Ñé9Ö¡i»]z'”ñl×ö–ÒÔ\Ù 11XnÁÃz¸'ý=Æ¥º¦g½$'Qvh‹Q‚{ ;»À=LÉN嬇•ç7[¶™©éÝèz /‚ÝíJ­kð–×›Ù“vùeÒÄÆ¸§]Ù¤\m6²\äåBúq—k\=®%™¯[/ÉÁPzGËÎæCð#d&Ñã2rö<Ó$"âøäNs¼Ð5~!ǽZ3Œþ£žÎ,,u#î”wd±õò ܱרPë¼Û`Žå¾úhš¼:}.Q/äÕkÑ%BÞÈð–ÿÞô¦OÍ{QÀSKÀñ¢`2m˜a{0óö@(¼24»A÷„–À±³ä$^$wL©4VÖÍ*5‰¥õÇYùäXUgy®cü4ÆOY~ÌZÙBU°;sJâÝ9©T©ÍU†¸:ä§ñ’z(çÜ4—k¦C5™žr(w"ω^ÊŸþt›ÊæÕë"¬¾X“…­ ˃Ø}QÑÛÁŸ>Äy…SÕlïHªñyås6H¨†œaÊó+vüÏ"|<6Z8óí< j°if¥³ŸM4ŸËvÖ•"œÖËJ´¥ç¶kVP¸ŠNÊaç¶>[íàÄWt\§ô3T…ƒÖZP'í8'œ‘:uôz¬ïÖÇOx'¿µ/†ób{¬b\·–¼º{±I½{ë°¯DExF#b¬*è…}ªZyûllןk½b´(:N‘—:Œ}áN¡øµFQ£@øå`z5ǰ}¼c5(<5j EÍ·c7{±ç±Í¼çcàÁµŸò´®çn±õò^<êTT´C1*¬áM»EÞ¨Ñæ¬'Ûq°<ë(ʼ£Ï ¼Z" F8èDz7~Ÿß©áç³Q.:ÀE ©©QOséM.ç³jó!âÉk‘8¯ œßÀçµÑT×ݜ٭åˆj fö"f'ÖÎð‰5ïMAݦ «¦`°æ€Ÿ–€é–ÐìBh $µ8$Ïöä;CK” ­fwhÝ{J÷‡æ³ÀÜ(p4Dáô2A1,&Ë™+–¢ŠaDk–E¬-¨VZ 5N£V7ót«:äQ€U'º©–QŠ5‘å4H—m¬¸ªÖmŒÞÌ´‘¨²Vpô2aúÔÀ(¥•3•Yƒk†¹VgÂ5kWŶH7i#×áÊl€Óî3]Ôhd‰ç6ž×„Ö¤zÐHPI[¨¨J„ÑYD·›¥k"„Ô꣕ÔùaÌVbÀRª¢áL‡bÈ*ÕÝX±*¼•4ŽSjµcV­æê6bÉjðVÒFlYš43Öl–jDo¾5«Å›ß¬hÏjÕü ™ á(>¼œ½†PÖï·@·†Q“>üN/ÒF×TJk‹kûo>‹–ÎXHaîÞãÛZ^ƒ¼9ã½Y£šBv6ï(DsÈÌÖâMÛXÞ ,Ìn³&,æn³n¼ò,3OkÇ•,¬Àó¸Ò`™–ìr-îÛ ½>=zÑŒÇÒ«×Þø4f÷8‰'(ŸÏÁdxÙI0 Ö-¢a;ñ–Ï¥Ó0ÚÒ é'z:ð†Œû” 2Æ|‹ î‘xNâ§çÄOω '‡ o,Ín‹2ÉZòrc×)“%X—ŽA#û÷Œ%%\| F0ç*̉qh?¦ÈØ´g|P–ø•eÀˆV$Ó§“²”€Á"øtëdMIÒ]RÅ–¥“æ¦3¿o3”ØçÃçËçÓçÛŸG^cáÛf„&9vØUqx»Câ“ý%ñš4P¯Ï1ÅØG“ ü¨¥ ­g˜à¥­ÑBGôɧ”;AÄÐ¥3?!ñ½N hʃ„4±ù:%øˆõíkŒ´:Þ‰¸¦ÏQ¡ñ&U&Œp+ô«Aµ¦°ˆejI¼Æ%Ì3 ÁÙ çD%4¤ñàð[QFÀ/Ùòî‰gÞTò^½k\)q ±£ LŠz]3!’Í™eÀ‘,;Kq‘Ô‰‰ºÞ]xHcù(CS’ìò`¨à¢hÊë~¦Á ¨·$ ¤Ò*EloÀô7@§4âqhoDæÇmY^¼[õ¨Ã%A[7´ÕAÛ§LÐG`D±:÷¸k8¦ÚˆƒYŒ©ÎÕö©S×2^S-ßоU•È%Ÿê’ÐjqÕz2Nc8²*^Vbzxóòý»ÿ»øj ˸&ôÊÒ®½[ª¬è9pá´VQšODÕ„æÑõY"Ñ ¦‘VL×4™ž©Ë2Tk, V¹sζŠÓ—0Y²zÉ7Y¸Ê_¶hx=NYNgs¹1q”DZ±€Áå=ća’퇞ݱôà¤öÄWJ<{Œ£c:PÝ£=ìHÙ†w3˜ËC*î8G͇‚ª«(?˜›ÔÏŒò4àƒ?Äbáº^z²4ž% ñÁœ•C×v0ÈŠ Ôfn-Ž:d5V´ ~gÖÒ2†?ÒJžOÜLÒ›”ìq¨Ž|:›,\GQ×kÙO…0åˆhàø„‰üo—È¿„€/ÙLãű<‚/å}$ô ýlé@>!¸Ó?!|ïöC "D°|Ÿy€¬òÑÿF²ËÅþç’]6ê?‡¬à»é´ˆÿl²Ü“eÃýõ4uÆ`|è˜ê¯ÞO^ˆôŸk¤¿þìwSÞ.M¿“1­¼á­¬jõö¿H„šŸ¯É9ñ®óue¶ê ’$™ÀË y[õ:9«—¶$ ÀE«à—¢‹–ЯÆE3…E-®–]4öËâ웈o&ñ|-ŠÂˆøfâv²ŒJd—¼$À¡<çay2ä,{[€Ý8ëb}Õ¤ ÆNHó‚¾u²Æ¯ÜI`.3XŒ ú7ÓÑì<̲ˆƒ4ô(â ÙçucA³ˆËŽº™-˜pjTIµd)4«§ðu…:ó*B3A`î*¼%]dm97Ë4Ž }Æ4ÓXPüx9O‰œÌèÜ‚2~›ÐçÏŽð¹Oéx9÷²'ÚK~Êœ«Õ€ ¾Ã`$ÁDù4á`"ZÀ,éV1¤Ë1D “95™–ûý4%WA4¦ê£ÓY¥²dîjôÒ)´'ʨï½/öñ`,KîzäH¢ºYÙR†\Aù1u(gçºY¹!©8É éPpyD‡C5ðsRèsUQû˺ð)í]ÿ)­ŒQ¢.(®7Q\íEØ’ÒŸ‚xÆ~iÏùÈOêï;"ö¾Àd® åc£èØW”®oòBfª'0^ÝAËF®30|Ec¸¦qq`(Ƴ%dPÓªå-šâ·úôvMv9•µ|ó/‘•+~¤`·-+û<Üþ\ŒÕv/™Y®Xa: õNðµÓl_Ò°3â÷³¨ù žzõ¥…üxvœ‹ÒâÄk#`¬KIl`Æý•ÚðĖ3 pÆT–(Ó_Ðzx4?. æLOCn4òå ¾R1HùÁì ÖîœýiTÿ ØÝUòѤ%t!6ï@¢‹B·a-œîâUX[µ…îÁFõö2Ø2‚E-˨^â"ªŒêO^RÆq„‹2¦?IñdLŒ*‚ÉCIò[#cüÅhfbüøìîŠL{HÃIL„e|®/ôL»²°²üU¬S™‹ yøÎX°÷Üšc˜Rëî)𪖹§`cAËÝSà¥-s‘‚²ñ^îrÁþL93ÒÂ`F˜E6AIŒ…×=`‘màGWdá»uÒ [F< ·@Ÿ$šë!=«a=éa#“ÕFj«µT׈Ôe?X—•ÕÄb8GÄpššƒý*æs$ð½‘Ó%שÓ7múskAÀ9$]~7¦S3f6l¦ÞÌõIì&'’üî+¾¡0­$jÔ (-§dÒ§¥Œ}ŽÕ@juH˰,j`²F¤Ëá7‘yŸNÈBl½4 :éÖÉš’¤»¤ 70ÍMg~ßf(3°Ï‡Ï—ÏgÍYƒc¼¨ÓŒEü\üâšãÓàæ]àæ/nê°”Åw^ƒ›ÀQuQè­ÄùâkøÂo‚o»ºB- è$_| t%ßt tJ5… t%ß èJÕ2ÐÕ†E]¥ZJ t•ÆxE]¥ZCšßÍÁÊ$¼Ì•×ÍÐÊ¢ŒÌíW§r-ã¦,«äIÅ—VåëÐjù”ó/-á”Bè±Ó ²FÓúž5_—(* :Mæ›Hâ2¦cpÎh.4Çu'5p`·ZC¸à,\\¼ çëî”!š_önJ¬üÜJÎp7EWönZ®<°emXØ&¡Ë[V‰e­”¶¬&ËÛJ¨È™À–ç `+ʳز¾ [QŸ>°…Ù­“Øú_ Ъ³O_±®WêYõêI÷™8‰}£Þ¥¯”v蛋ù«‚ƒ“*æ¹U3XD<|•öÞ«9§YÛíf`þgìîŸCÒâwc:5Cðhf`§bų]Œ*&q¸ó™ÀÏî¼)]øñz¹¡xíKHš,%öÖ¯×.8ÄvÚ *fŠÁVß[ 2 kã[¥h­|M€mÏå hŽgÇàNæÜ§“"Hà@MƒNºu²¦$é.©Â Lsә߷Ê ìóá@w¼“ԧч|«4TÔøeØ Çz2T_Ý~s¶W™ã?hݯAkÂßf{šÍj¶nÄ|¶ù$9ö¯ ùKà/‰¿Dþ’ù‹Èmðs ôSó§Cní1σ†Ì_ ùkÐCæ/™TýÊ߯;÷ÉŸ1õý¿|â¼ù¤´ì ùd^ñ/Ÿ\Ñ7_”_q-Ñ}»AŸýAiùûÚ@hó¨óþ?=N´<~äs ‡‰¶4m]Dô±ï€ž#Úþ!Ð6¢]‡ ª«@ëAÝBÿ{å@~zôŸ )¢½è{ï¢}|-èЇAÛA·ƒàÞ|5Ñh{ÚÞ¶wÕÝ}=hs¸û^x¿ûkD÷\Zö¯—”¸)? ˜5HyËŽDíh>b[€[¯Y‘X"™J%1ÎXA/##Y]7{v}mUEœó–ÑÛ±díÜtË¢–…óêª*b êà„ITÏmά\Õ¿¢«¹Ñägè?¬h²ná’á˯ùµ+/éïjš7+•ˆÚìÇ·¢©9­ýW®ß´uÓ‡~ýÒÞŽ… 5I¢~jÇ*çu¬Ín»íSwÞºãúk.^ÑvÑìjér1³cU™Ë®¿ù³þÉÇoß¶þÊáîE1ÁÅ­4i¡xɺÑ;üÚ7¿ñè—î¹eËÖ dšæÖ¦â«E³“RÎ}pãŽo*=|èðñÓ5M-ÖC;_Y}Ëôü¹Ú“؃©¥×ܽî¯;wíúâ“wîÚ_ekh¬9ùõ¶õ÷Í™”•ήâ$ N)œ¹hÍÆ¿lýëŸÿôò+o}üõq[C½õÈ›ŸøÍ¬±ô&6púçL½á¾Ç×­zÍò‡WÿáÕ¿©:×P[½ÿ£—WÌ¿tŒT1Žq¼ÞÁéãfݲôûßvÓ îyü•÷W×ÖŸ«Úûî³÷þ‡§j Z"bSò~6kÎõs¯úùÔ©3~µäÉ7>?|¦®ÞZé_y4 œ;aæ!icÆO¹xRi~Nnñ´¹÷®{gÏ [½¢‘ÐGý'.EÇ£)&153''3-Å2tTá¥ó~÷Ò‡ÿúNÕ”p¬ ×` 7™Y)fŠNH²Xb¢cÓJ~±è±?¦nVt Ä“Œëæqö9*:*Ò•”1ñº»×¾³ç8kߎ——{Ûg‡`3$%=GnlX¸~(Ìh0#b†åM»éa¹•'¤VfJ­ZCÔà”Œ‚‰—â‚,bŽôå#‹±‰¯Ó&Ö©üü o,aŠIJË/Ÿ1g$ÂQ¼4s¢Ô²ÝŠ– ÚÆZ2K/›³hÙcÇðîxZóíw5õ¶{·zZc 3Å=ኛïâÅ-ÌÉ­xTÙ sÄ KÖÄ+.nËŽ]ô¦«›°qù¼KòRâ¢b’2ÆÍ^´ú¥m_VTÉÃ#°{ÞY{×µ2’'¥ϼmÕÆí{YpÈUyª—îSÝ÷‡vâT^6,uÌ´Úðþ×U5-]l°ûU~¶–žñK®Ÿž=ᚥϼ½ûDM›ÝIí¼U¿øÁ¾*«µêë÷Ÿ¿ܒ鷬~õÓJ[«£×Åæ¬TñÂG_ûdÿñªÊÝ﮿ÿWSKŠ&]³tí¶}§›ìNW?.8ßIÕ^{×Ó[v~õíž^ÿïÅ×N[zÉ oÚy¤¦™­›ZÑJ‡æN½áu›·ïxïõg–Í»||ѸË<ºe÷©&{o¿Û # šV™ZôóùËžÚ°ñù'î¿ùЉcÊ®øÍï·î;ÓÚÝGRÁJçJz錛–<øð¿ýõŒñ¹£Kg-^·ý€­½ÇåÜ#qIFpœQzÙµ×ß0gÖÅÅ™#RÒKf/YÿÁÁsNj’géüIN/˜0eJyIöÈäÁ‰©E³¨Ed1 —}:Æ_”5:#59>:*.¥`æki-²Á:fÍqƒ“’ÇE Š0E[r§/zŠ5ÕE›Š§ ãßi62á ‹LÌšzóÏ#$ØUþ‚b#õ|•‡E˜ &gÄùQ ­Ñ±ñ ƒâc£Í¦p£A ÈÈ•22=CÈèJ™’œ#|h.W>yÊäòqE9é)C(Æ`€iÖ/¯Ÿ7Þõ¿œuéÄ„QÌ:–,[ñÈšGV,[²`ÎŒòü´$\T0#žÝøÚæ77¿¶ñÙÇ–-šsYi¦%s0£~ûÎ/÷ìÝóåÎí[^¤÷hÂ衱t!ʆºýGª¾«þîäÑý»vlynÅÂ+'Ê«óhpYk›…ææÆZëÉŠ/·½´zÑ•ã.J4‡1øUÛÚiwt;숬ÇöþmãªÛf§²¥: \ÝlAkÆ­«¥놇nœšcA¯A%”>W¿¡¿ÙÕçt´ÕžØýö3K¯.K‹71Øfêouõ:ZÙÒ6ZN2ÖE™5¦:íM§÷m[»xvñðê|,º[ûûz:jìÜôÐ܉é ô H¿Ýmý½ö¦S»·¬¹yjÖH£'ÑÕÝzæÛ­O-šž›lf‰· †¹Û]ÎvÛíko‰ £éÄmîö~gGÍÁÖ/þEÁÐ(lEî0ÑÀI—íéy*üÏCÏo¤÷(*¦­és(š¨ÃÏ^Àáÿ¯ŠÃ™' Ãe#} ŽÕ†¿™MèÍl‚€nj m£ fwÀlÉH¯;ð53QëN`DÝé¨ñ~©¡t§?”fJ Ýé¡Ñ‚ƒž;Ð3=‹ 7·âff£†Ì]~MTp¹M—Ñæû PY6уÉgô2³ÐÅÆÔB3 ]8Ì,ta0ÎJ«.ô¥ºH—èZHǵ^¾¢çðÀÔFL¥Þš¡ÑV%E—تPH‡m´CoÚ!q5ï(GJA túã>tÑ]~%èW?¥`÷5(‡“Ñ/^èEŸTæAXô/[e E?Ê€‰nÑIÀ&B/@ô:ô j´£V#€[ FE]ì$èc¢A9ôJ¢ÀDpʤôxH=Öæ!íøÑÃÉñ£‡tãG­ÆÞŒ=Ìx<8eî‹Í•¹í蕸ëDècT¤&éÈØ%6Jâ(Ø(™ai™î`ó<fxŒƒ Mª¥*cá€&åÒ‚›1pV“|iãÐhدIÄ4j4œÕ$eÚÈ5lšMÒFA&_ëà Ý(¨Õdn<l†ZMÇCÈf¨Óbsf5tFk-ZgVcj3Ôk¼0.ÖF{ ¶gäbp´×à~.6G{ *häbv¼Z-fhäƒy,¡EÍj”o†•1ø ðËáPþµý‚Ú~Am¿ ¶¨í׸i,Nè’{· ïLXj@²»Ã‹ùXÉ¥÷Nˆß ¿w@Bl…‡ÛìO"DÈÄçPÈ2<…‰ˆ#…,ÅS” p8T9žbDD¶•!Jò"l>š,O‘!Z Mš§ˆÐÉÍð,¶¸Èƒ)gÖCŸj;zpͧQ÷[êdŠg/ö)èH"ér˜=mþ*¯øN‰%ÎÍ´²«*¬¥Â=KeÉ™êÓü)×4šâS‹gx÷ kÒ‹½ÈsQ'ûÄÅ;媅+Ø>%›Fÿ=$›û#%lâ]%m®Œ•h‰g{¦Ì“gœßFÑxßVÓDüè¢;U?Ã+M_€$kOâåHeÐ@…J@ÁwŠ¡]Ái±¨h "53ɇ5ùȇf¿M< ‘|’ \øWሖ]N¥žlr·ô»zíÍt/ñ‰Ï^¡ú3¡ZOÚVjâÛ%fÍ4q=1½ÖZרÜÒÜXÇá•âýUØ1’x¯­øÓM‚-on¡]ý_›þÛ 3'åòn+híCðw-Z¨ ÌÌÜàpEÇÅÛããüöBúÃ)ƒ‹‚d‡œ°Òl×UÄ'C¿@`eìç©n:•›xS™woͳÛÁ»åCÔSÞÇßüA"4+Ý€æ H‚f…{Ð#lO3ÀohyOÓçO4…‚\?£5œ†ÑÅà¼8T+V Î8£ºŸ§â¹TäA´QúZJÔø/Éã1 =\·´Ò«†eõˆèÇfP%É3:Oé2¹$\BÙ¦w›nl‡² Œƒ¨mCÚî'ýF†‚mú‡â ºlpEþl3ØèF‰œþf°Ñl38ŒšèoÝnA®þ~0Ý¡¿#ÌÎ3\Òš57…îTýMa£;̓#¸ÎÇàN×r5ÄÇñ+¤?²w•¡ÿÒ§‰ã1h2Ç9 +nV;šªžôtõUÍp†sóYЧ/5 Z¬„µ% ˆ<Ö¶q "²„iÖ™èöp²!ä_iZ0³øÊ\.®Í#GaË0ŽŽ– aµ,ÂÕ¢˜”¨Ð¾²§peáèXÙ`à¨U²­B“¢çåORú’t Êu.Œ¼-Û×9ŸùwŽVWò—%mhÕÈ]qr›w}ÉÓ€y-êå#ß‹ý–‹|.ÈTCÑŽÀe ] B]¯Ç/Eü˼½éãÿÁEzºßñH}ææÿcݱNCwD[§!;JY\Ñ‘fiŽ,‹/5JY\‰QÊâ*‹,‹/'ÊY<‘bp¾fp_¢WIûtýØ}?ƒ¾i›Î)«¦ Û+އO-ƒ.Áoe ²‰M!aA›R¬,üQ‡\Ôó¥Pì™z¾ôIsøJ'æð„MW£KÊRè˜.,Æ2”²e¯Ó9*%ÍÈሒý½=,]©Aö÷vc:GsdUçp4Æ>z™,G-*ºí˜¡’{™ŒHIW8”3ÔR!õÌ4sdcš±´ÏM|IX½ãš:°ÆÞ¿5`½(€HhÐu9ì ø*DáW…~"`oˆâ¯Z‰ ‡½!êÀjÁ.ö„¨ s_ìQ!æÉF8¢bÌ— °+D ™ y p"DÎÏg1¨ Mà‹IN…" ðbHHb/ú€„"ðÂH‚'Á\aàÄ%ƒK<òf .Cð¢‚ê¼X…ð`J/`!<¨tÁ%úz'ra®ÀqA]½ ®þ€ê*ñ0.üÿ7sF?nFŠöÕ ›‘ãu‚f¤x`½€ÙB'T†E ëÅÈ0½Ø)æX'$†…ë %Ú}á/’…‚,Ú}A/,_ÉÞPÌæPG‡7ÀÒ9 Òá kaÙJ"éð³`6‡OÚ}1,´¼ŠVvù…®05»ìö„¬Ð'ß)If§¬ ÊÖ R‘ó5£Sp@Ût¢RX¶v0 ÍÖ‰AaÙÚ‘',[;ÜÝÙ9íК«BÂr5ÃDp’×hF‚ЧÉĵEê£eþÚÊÁ„uÿ #&¬ûE?°_¨”z"Ë©y€@žFÙmÓ—J¡ù¤pÊ2Qôxô¡Bèö CàðñÞ|°ûÞ1`÷cºøÍââ7?n‹ßüH-~óc³øÍÆŽ‡¿æƒÃG\ó¡ÛËX  ÇCU ¡ÇÃQñ£‡œâxY)^Žâ)}$/Ç1Ž.R˜]Z”3:ƒrÍhè™dFBÇ@Øå h­4ÁóIln]Å@‰dì8ƒ ƒu4·çÑPœY$ìŸFþX¯2°ûæ4 Þñø¼ã™Ï,G6c"Q¥K2aš£YLó¢Ì‰ý¿3tuLûB ÃD/£‰=¡ÓȤ/êeÑE¬õ¾ö)&ðýù±ag΋ pvÀüW›>ñ=¤"¾ Ox«/èÝJ%Ñ]†{DÉp!·=ªà¶ŒÕUðSFhU‚‘Ù# 2 A‰l¥’ÈÂÀX¬0`k‹ ‘ÅF€ÅÆ €ÅƆÎbãBf±q¡²Ø„ÐXìPXlb(,6)8‹ª¿×c±©:,v—ÅÒQÁ)|)µè¿M•~Æãk¬ü©v|½ ?áÊ|Ý‚{n¿}ɽÿ¹ô>ÿa‰!<Kàƒ°@.Ã{VœïAXÏNV4óŸ½ È¦*|Õà«#0ýL€7þ°ãy€½yÇþP›ÐU´O„ØÃ \„ ?ïNÆ< BþVJ L„+êA˜‹½yçdVT°z: ò} ¦VÞ|„ßaß- œ|„S¯àk§] t®ÂUân q\T¤è·@Š+€”¼¤ì- Óž2ãï@®[äúx ·~äÎl ÷®ò»B kðû“É@Öäù¿ùã%øÂò/̲á /Þdã=ôJ§VNû+ÅÊÉ•núæ++#I$1“(MbH,‰3Ä“2˜ !‰$‰$,d(FRÈð¾ÊŸš­+Fc…X!NI°¢ª€+Aq.¢{ˆh]É¢h!çPQ&Š)Bˆe»‡$&ŠbRR²ˆÉ"º ‘‚è4‹bTT´h…X#¿,Ý‘[¸™ÅhZ»(ÆÅ‰b¼ïNÃD»·8=ºáÚŽ-hô‚—ïw ';E$VÓ®]ܯŠ®ë–‹‹fÁ,ü§èçu``á>VØ þGêg+Í]:m­åVV°º¼š=ßëËë¾ÿèù–j#j7T'ˆÉV7X Ö>°Z¿H¥’ëÝPo¨ï…úz@O †zô›4M~ëÁT_ép+nù Äê<4]°ö`š\-#­–T÷Au5=ÚÙQú䯤XÓ¢¾ÓÙÙQú俍ïc-#Þ£]j)ûê9W¦{Bì lšÁÛ4ÏÑM[æy#r-VìA©ì `>°·^ø_¾­S+p¨+&W¸é›K¬¨@¢N2IM²IÉ%yd É'¤‘bRBÆ’RRFÆ‘ñ}?Mk![´GwŸ7FRÄIÿ©€º:óü‚Q,¤O/Å’±ÂXg©(–‰â8!¤òv©|a‘( Ÿ²ŒE·¯,ŽÕdŠbÖèÑÔååùe ¢{¬È-ÜÄ ‹bv¶(æˆbn®(Ò„‹B¡K*Û/–Ð%ƒÓrÍÒÊê;Å’Qëw ';E.mÁ‹»°¸¢óÎÊåÅÌÌ,Q<¯S´žB·ÿäâ}¬8®?Ù‘ûÃZKóšNiêhѪò*vô|·•Û¾ÿèù–*ô~Un¨J– \g²\*Ùæ›ÁÖ 6ØèúaÃõƒ¦Éo=˜ê+^ë‡×麤¹ÝL“«ÅõƒVKªú ªŠíì(ý rcRp™t—Ö¼¶>Ö2â=Ú¥–²ßÿaïÚÛ¸®üÜseY’ ɰŒHH›d³ù#ΣÿÄäa‹´Ûî³û~vߤûÊ;$!’`’u_NÝÒWJ)MS …d …ÚjM S-;¨ZI때¼킽ëøcCÀØž;{·fd1^Bò%ú‚ÏÜ3çwî9÷êêÌ9w®cV®1²;ÄÉ@׸ãš}ä™MÀòÑy[Ï|~¸4ÊEþX—©øüP µCD¦ U½îæ÷À½ü>~?<ÀäÁ þ0å+ùcð8bâIõm†Á}˜ÂßÏ@:sõ{îeôé‡ ã¡+ ãa*$5Œ•°rü1ÃÀ?3ªžqTÙÃø¨xDÃÀ8»d’?]aŒ+Yuÿã×”—þüul3¶Jæ¼Àµ“¾j¦oc–’a\uµa\c2dçpÏ>µÙ™ø¹k)ùŸYéM—)v5»c%‚óÐk¦(Eg>³=}"ø,Ü{ç,© Ítfâ¥x†Ý×`ii_ðè+¶%=‘>Õ~*PÔ#íÄ:Ð~ 0¬'úµ ”Xbi𤨀P¸I˜¨jHTTâÔ«½M!hÀœš×hÊ”Ic‘,¦í$ÔJºÍ×EdÀÌדsUG'æ¤Þ SgË8·EÖØü¹Ûî0ž£æÜmZc 8s_«¬²3K´Ï@¹½Lë¨8Ò>B+§<Ö>Fü­3”m?kóèU—]°$›nÙäY¦)ù\H±¥p+Ü·ÃЇep'|>¿†À/Â/Á/ïÀ¯Â¯±¾s°ìv  ³@Ë¿‰yæ6øÝ0ƒY âNÚòÑ™Xj·Þz«2rÖ¸óNÃøà‡XM¥“¦’m C"ë”±V,»“݉?Eéáë–žattF§aÄ—±e¤æçãÿzÌÑC¢“L.›"ý”^÷*¡­NËÉÉeç­qfŽÍoê«g„ÏÊÇwλðXüÊãyü)»¯ÁâÒ] e±«Ð^ÀoóÞÃo´¿Èë{g۳īýíý²¾w—Ú®ŠlïÒÃ$í7sJn|HT5$ Ê|™âÑÞÃfv…)EæÄ”¶OoÊÄIc,6ï0Sʬ|ÚEd€H°à˜œ«zžç礎O‹Šqn‹¬±ùs ¶Ý2/ÏQsî6­±œ¹¯Õ VÙ™%ZŽ'{´ý(­£Âñöã´rŽŽ¶œÖÊGéiañ y±—>iön¸eƒg™ªòi¡Â“°Š?ÅŸ†gøjÞkø³ü9ø{ÞÍ?ŸäŸâŸ†Ï@ÏÅÇ`œœ%ž¤§ÀS†ÿž~ú&¡l £à©' cóô:¾ÆXó¬a<ûø¡Î©$XÍ X3é£ }³à†ñÌ3†±Ú0ººÎfògÜVÁXOÚv¢kÍ´0ƒÆ)—‘ÕäC 0k<ëBtÍéœ6f~N—Þ™ëff ®ùl??OËÍ–"²Õ80© ( ÄDäöÃB*ì‹t8×ya'[Í•y 4:¯ö‚æm])*L!ñYzg(9¨z«XÙ׿s½¥¶ù3.y—rÈ僨êÓ"g-zóJðÜ Ž‘°ãY“3°Y*ÌÒÂô9˜YѾcN·K¨ú¤Žüœ˜¢»UÍ—ÒMD¢åE#Bi"‰ e¬‰HË®‡³rMÔÜ_‡ß€ß„߂߆ß߅߃߇?€?„?‚ÁßÀŸÂŸÁŸÃ_À_²åì®:¶Ž}¯`kïcÄwaîñf ý˜8–Y^‹óò«ÑÊe*ÉÊ‚}!•ÂНÎÛCÙj6YüÂ0¾šÛvYË º|éHâ³ôFOrPõί²®r›*Hj›?ã’w)‡\>ˆª>-rÖÒÁøŠ.Ï­à ;ž59›¥Â,-LŸƒ™í;æt˱„\b{išu·êÑÖ£HšˆD.:.”ãMD¢Çc£Bm"Ò2Šëá¬\57DÏóìyþYÞ ŸãŸçká ü‹üKðeþþ|•¯ã_ƒõüëú†:ªŽz»QbƒÚYs; ¾éɸßOÄÊ:¿…ˆl5j“Ц)Z1MFÂ…TSf)ê9ÁQ¶š+'0ê9g‚æmëPŒV(>K‡$UÇ*u9¸êVæ:€Amóg\ò.åËQÕ§EÎZ:tÄ#Ź#adz&g`³T˜¥…és0³¢}Çœn9–KlÏ!M³îVlDÒD$:¸È•aÆœ ³e×ø\¾U¹øðG˜|9À­—ðQzsϘËpZ‡¾K¡³©ÓeA.I3‘&‡ 4x+ò&‡½Ô§—rÀF-q°fõmòû°n‘ÀlªRÍûÕ¯1çÖ7ýž³z¨ÖÄEÒ¸Ÿ.*â饼GÁ™…š%¿Î>  wƒ Ÿ‚OÃgX<Ÿ…Þ:¶Ž}¯`kˆíšWlÝ+ˆÍåHYlIES‹ß›éû¹}ÿ‰è‰ÅY±9ÊëÛ“Ñäâ~K²ïÕè«óU¡¨aõðÛ¾} FÚy‡1®–¶½u?3ßÔ`\µûx5Hb\M2ó0$ôÖ­T %”Ô%)fžÀ F2Ù·%kLaÔKM()³:ǸX­$©q%e‚Z -ã*‰RН~HZ0«_0“øÂr£‚ 0®z|±QPÀ…±ÒUw՘¸š"Ü|ª±CGõ¬éP2ÍÅŽëŒÆFõ£¦\)Zн¡7eƒø)b\5õJ£ÑÑ*YVlÈGòb;~À± óŠbûÚ–µ5lÛζóïò°“ï‚ÝüUþ}ØÃûø^xïã?€òé‰:ªŽz»Q"ás ¶u^¶u=.ùu…HA¬W£êâ“bF)}cß±è±ÅšX—¥õ¹D4±x%Ùùrôåù ¡$ ÔÃïèÆõ;£;çÄhwPBØÆÖ>yˆ ¤a´³ûx9H`´KX‡ª0Pdõƒ–-5@Ñó•™ç0ÔLömÉUŒEê„¢š¥7F«jí PÇÕµ@Z&F;©Š¯~HZ0K[0“øÂr£‚¢ßèñÅF!@Æ2:TÝU£ŠÑN%Ü|* Cƒºf:” œ¯¬gM´J±oD4 hG¢Gb'õ²)Ëá§×GL½#t†Ô+ÓÄÚt$-6â[;/+6>×òœï|×6:—Ûèð<øÌåUÏÜ:²Ž|w }^ôoÃûÃq-¾Þ]f•ºNk¡âïúÌ•« ˜%-UµÈ0,R9–…KHJuæ¨Dœ¤†Yž‚›Yl1Puõ ¯ô5 }Pb¦9ާ£0‘ÖY¡9òŒ.1ËqÌ^N sf!–ÁtjÓ©áø˜œÈš¥+|>ká ðEø|¾/ÀWa| ÖÃ×i7^dß„—à[°‘mªcëØ÷ Öçû¼"žŒ¿ŠaiÿeÉI%™T’×%[¨rº>5Eµ%YRIHA +<Ž5Õ’R‘6A ª¯&©aÖvàf[ T]=È+}A”Ð\Ì4çÑñt&Ò:+Ô"§ºœÑ%æ`9ŽÙÂË)aÎ,ÄRñ\|Ãωø¨œÈšu$àŸx?ß?æ?áà WùO!Éÿ™‚áÆž~VÇÔ1o5ÆçUíz¼,žˆ¿ßï»,1©$JâºD ׫STaeUJ°ðáXj,!)Õ.¢²c’fÉnf±Å@ÕÕƒ¼Ò„AÍÅLsOGa"­³B-rŠ®]b'T±ðrJ˜3 1³‘\üN∜HßrH<ûsí-Z¿/÷é<¾;˜ë/Ô±uì{+^ðyeÙ¹M”脼4Üé”NmZx•ׂZ[F¬¢wkãDÔŒd¼l€ØFbo –{Y 6DìÄ2;¹*“§FÍÜ”™ZUië«Æ3læo΋qÚôÕ†:†D¦ÜQùáŽa14Ö1&ʲ¥u`"Jäúô3¸›6³Íðmøl­ð2¼æy›íð]Ø;á{°‹í†Wáû°úô½ut]G›h±×ç nçQ¤¿±îD§SÒ´%Ã+Ä™d0Ù–+è…Ñ"ûS’mð²b‰½Xîeر7Ë\ìäŠTê •ûS7¥¦VTÚúŠ3©6s7çÄ™\$'’ƒƒ"Uê(‰Ü‰Žbp´cT”d+Ùµƒ(–;k½6úYš¥ù¿ò dyŽÿ ðçy(ðA~Š|ˆÿå%ýXUG½Ý(qÌçµQçz‘¥ÿ ÿóÇ:R£-^.N'‚‰6U,§÷§‰ô©’mð²b‰½Xîeر7Ë\ìärU=M)Ÿz“:µ¼ÒÖ—ŸV#ØÔnÖÄi-¢‰D®#'Ô#G„v¬ã˜ÈtŒˆ#²•èÀœ^d UiýÍ™› ÑEÙƒI^`žþ x¬Ø›YR‡\xˆ\z¥¶µ‹mEVá†Û†ÙùÉšJ Õ&SÆ„wAFô‡©w½DçÈ´ÌÐÂ!ÑOçþèÐò™…ˆ¢#+ªU« è(š¦j\ã½ÍxYÅ4LÇ{) 樓ÚÝ'ÓäÝ‘°·o¡QžÞ‹9~°—g7Û·(9EþËUV¬í–$;µ²Oú¤† îÆ ®p÷bh¾£¼aÊ}»²H¾¨»îd¸8{Ðá¢8"÷ Ëõ¾ &éÔÝǤ‚hòXoù7ß“/^¹ß›î+¸ó&y¥µÿ> t_Oèw‡|á&­eÖ}󄬸+䉫[DɹdÑ]$n“Û¾4ê|CVÈ73¦ÖaÅ×Lú„Pâ<Ñó“,‚IÀ¶†Û[áTï.Sng… …M··³ £Ü§3¶¯ÉEJt¶Qî;uÉòÿzñXGû'„x-ÃÊÕ/ZŠbQË«ÒZ¿`© >܃!kNKc›±¼•Å›auUAýú€d"§,:˜Ö°ÈƒÓZ«7°Ã»mHÎ"h§¸†4ÐsRQ¬¨&ÐD‡“À†Zæ€&©tD^Y«ËPÆû·SÏ.móë…·½VZãhùF{í×Ò¯”{ÑÛ^{ú[é7N“{Ýí–ÑJ׊-ã×7ôWk¦š^íÍÅ7œQ®án¯µ\·ÖÌÀ0n9¿ƒÃµf®‰¿M !€C#HPºÖ,4Õ¤J €<ée£@‚ô”<é$ʤ#Œ† äh Òñ9§—}n(¶4*ß‚Uká«/ø©Ý”¯zÔ§…(T+†1`Ëä>QHò(ŸÐ…!!Ku]Ò[_†ôk ‰CI ªÄ!Ý¢„㞉.éõÒ"S] Ò©§ DÃ}è'×)ÑãFúlBÅKEø¯í5R<Ú?!ùÅ\íbQDŠ´èÕ0Õ.U‰îÁPqNKc›)zƒboF±’Ô¯É`T„`¤áûu±Pì ŠÈâÝ mH΃Qñ—ÃzN*J1¦ q¤>´Ñ(I§#òÊ» e¼?Â;õó%þÇ®K÷9N~»ÿôþNi‡çŸöïoâÁˆáç~î=½ÿÔ6ìtµh;¯ék¯ÚH5¼ê닯9›Ü¶ûô¾í8ÕF† ŽÞ…Ñ*LÏÍùÐéÛ7œ´ã³ï M•m4{ôÀ‡a‡…‡ýcÛ‡ù² ·èd´t8ý{> ä…èxo#‘xfõòN;ýíøÀ]ÞøWÏyðÈG‰Ê pnØ lÎé%Ÿ†,͉û¬–í”$·ÞÓ òµNú”†ŽB Žpçbx²#aÊy{o‘ÜúÅqn‘]àâì’[B’ê–ãÝÂàó‹óˆ<@´ä‘Öê{nÙÎ×ä†cÈ7ˆ­·ý> tlp'½íl“[NÂ:f7äžsl8ºÅ@”œ¡ÇY$ŽžÇá _u¾&÷È×1®Õá_°èFž -O0 <¿ÀZ`àt­§L9{ík:½{0 :ÂsÆw3¹BIn6Ê“`»)_*û°û¤|´B²1ʹêÅr †”iÙ«’4¡Õ eUžÁ‡{UR-Ïéºøcð噲7(gñf”»!9€d‘Se6qj‹L—{ƒ2R¾”¡ ¶ˆ`ÌÀƒ8½ .ÇåÆÀjZ† 2–ü$Ùr—Ù¾«…ޱ‚W{áàvú1d3àsHzð8qÙõVÐ1+Ä#ÄeÈÅ:{p2Æt —17z §HèÿŒÈ†@†“Á'n¿rü¼Sq]8 |éçc)Ü"@Þ.’º»=Èõ?q½ïAHw“úOÝw߃+.fï·é»`­õôýw›üëòâX—ÂNo¼3-c€?]šC¢õá LÙ˜ ýëH’(T¶ì¤í°#¥’ µ^¼ŸQµÈ¨4ü´07ŸŒu ®€ÉtíŽM˜ƒCŽ$4•8É´©†AoZò1·Ö~]`%9ÿ#½·¸~Ô„;ú¼ÓÀ¼HSØIã­€·ÓC`f¼.ž‚÷J´>$Í”¹Ð°ž$BeËrs‡u)•lhYàÅûU‹ŒJÃóû€¡¸ùd¬cpL¦kwl”èr$¡©ÄIŽ ÕØH5Äz³ÈRñ6Yzºpa‡í¾¯Á{! ƒó<€¸)ôeÇ»‡Þ‹I¦Í—!éì:¿°Œså˘<‚”òØ?#²!!þÄé?¸ÞûÀq þ ²¯Gr˜E€€÷þÉq ÅýÄáÞ{“ÙOæ½÷ÌZÁ{…òúQCwôx/Fž¼ˆ<)ì¤ñVÀÛé!0³ Þ {཭‘˜²1úÖ3$#P¨lYœwX‡‘RɆ–‘^¼ŸQµÈ¨4W/0hå|…—¹y6÷¬ÿ²Â*%yK//¼ô*¢Í2  Ûƒ,•’ ïÔæj]=¿Ê+¦lÍmõwVYÑoiçÂŽ·**­ìžß+Ùâ-5Ï7¡# ­¹Vohr ¥† 2-ì„î„NÂøgdÌ÷ä§ÝTÀéíRK&{9Ž!>þK½%?+²bL"¾»áÃDRÂäj!ƘIfÉé„íïnr½˜ê\µÀ Ëç—y¡Í¹ÍþÖ2«/ò…-oYy~þ9X¥oiïütÄž³{Ï&·­ôÂ0A¦…ÐÐIÿ^ˆ©¸ü†— 8½]²ežãâ+¯dÑ[òV+†À$â»Ë>L$U L®hŒIîivn˜°=Ôj:ïUca6RjB¡žM*1./áÕ‰E>#—¬I—Ì]æ…º¹úEM™—´MëBõ=Äp¯n×Ý9-E·nlÚ5I!*¤_·ñ˜a5 ®G\Ãe¿Sg’çÕL|”ŒkŽR‚sJóúM©¿V»PdÓ…Žàwê.’èw“¨¡õ;ìh~pLÚÒDpLr %8&îd±è˜´„£ãpÿEG=C}tqp·×y©ê[8˜MÃ"%ë%–$æ~EM`£|têès”Êku+0Ã*ví8ã;›ºg$9Ûñ«vM|ïbë5•¼yÍ€M ‰Ñ[*ÛˆvÏjâ8¸µ Û¶BX#½‚ò½rˆWXØC¦Ò×ðg Œ †–û1‡–_ÌÆ¯:c`á[¬óÓ·"õhnÓÿµ~<î¯õ»·é_Ýà”·32·ËKÀY9–ƒd #KØR,'pYêfBžÑ‡Ç”Håë-‚G!¾ƒÑ£A¯+p(é¢ìó‹å|Ðà¤~GL‰,"ÜL¦¸÷¾äª÷aAUØ1XHƒhyp&°ÀD ³AA¡< pßU9²äŒŠAÀøÞ®JÑ×À¤·ÿqýSlÚõOšg4ciÀ6™çx ïŒâ-®ðJ¬ãOH™XJë-aÄ€ãû+徜`¦$ráë.ºzæ¨Äwua’ÄUN"Íù8 ¢Œ’yèWÌLtŸî¶y&°t°œà”ͤã¯8šôëù;Šò÷ø2ãó¡ Œ¼¥qÿÍÖÇ|«Hù6ŽÁ™&¥}Ç–Ÿ×b…«°Æ„Œ¢_AŠÊªT=l!d#E  d<¦ÄѱÞ"ˆpq¸ê`GôhÐë Øïøñ\öùÅr|Ðà¤~GL‰£^ /¸™Lqï}É#T練c°Ñòà&L`G\<… åQ€ûŽÊ‘‹©Œ?áíª}Ía!Ãñ?¦ÿsÞÍX°Mæ9žÂ;£x‹+¼…’ëøR&–ÒzK1`ÀgëÓæ’Ì”Dîr_wÐÕ3G%v¸« “$®ryhÎÇae”ÌC¿bf¢{øt2KÛÉYþHÙL:þŠ£IßH"G1CþÑáþ_f|>$¾…CoiÜ?B³õ1ß*’G¾cp`¦Ii_ıåç5Ä„àÇ©Ût}"ß—þ†qè/<yÚ¼QGmoç~”Ì®@ø7øƒÌ’讀ë9ùü§Lf"1ùo¸ÜáÛ­Øç…'µ…ÉHfWà-3øƒt·$º+Î]mz0©uþw{çÇ•&溲ﺚ´=Òš”‡ö XQ2Ù¢gÌ™`óEæ!Xä!yØI‹ H‚L°ÁìB „`ÀyÐC!»QŒ$¡ƒ6@À0Vè0 Á$‘T&;›‡#ˆ"›lvMþ˹VUw“%ËcŠªË¹üç^çüçTŸ¯8¤ã(äÒ¯)‡ïRy,ͯzr=òu¯ïcy, Í¯zr=òu¯ïty,(ί)zr=òu_âMÎ+Ø‚x~©`Á …†È K×il2“œŒ,‘#2q® F7› !œ‚'Ñ ‹))†K t#Ñ [Á,²­ÂÏm¼Û·Ùæ7Câ‚'Œð€yÜÆ ñ)]ç\kj—Ú§¤5'fºú¼CZN\'¥¹ºŽnK9»¦mùÈS MzM6ÓöA«"§–š…V18–äç[[Ú¨¸”ŽÈ4ºÁ ñïFD#ý•ÚÀ.Úªk3dÈÓ^ ¼ÔwâYò<7]>àúðäÓppÉXÌ‘Jh]‚VÂSBJîÓ Ýx«¼e~Ò{3X tÑS1ŒA ;’±Ÿ0n0Ç“$ ,±q2q #ñX7›}#¥‚˜Ó "))Æç V(† [áz²­ÂÏm¼iw«ç7B"'ºñzÜÆ ÑòÔB“^“Í´}Ъȩ¥f¡•FÌœŽ%ùùVÁ–6*Â2¥#2. ÂôÅ»ÑH¥p*¢­º6<í¥ qÝxG ž!o¡™Óå®O> —ŒÅ©„Ö%Æ÷È!<•!¤ä>­Ð]8´jÀkQæ'½½©tnª…Ì×ÕÝy<õñÇH$¶Ö£¥šV‹µrÀë.î¦+i¿¾#¾»òD~ä‡9kÌðå界@žõ³Ïz*Bb:íµ‘ŠT4bY5ÀF‰µX×Óé¬\5iÐ4›?itZ.ùnöBlø=–Áœ*!JP¼õsE:~«r=.^@{J‘ÉOYù±b:M«x$·a9lj‚p¢˜h¹,L)z ¹H|ê)MF—˜]Z§âPgõÕ'Z]øžÎ@q½M¤âŸÐ·‘¨Øxy1”µÆ”U'_Uq—JQF—×L(-\sÅÒë’]FV„µñåsݲ(?Ôãoò:w(-b땾 Œ`²ÊÆ­õj–h9v ¹UyÖ"ÕÕ¨nø=›ð,ª•×ÕÝy<õñ7$$!Ø£9(é÷bª£¦0<t7\ V†g‘]žÈo³P g©†ü*ŽñÝžØ'Zöùû<CHèõ^©HE#ÖwüÖXrMö3ÎÊé[ƒô}þÍi¹ö´Ñ ±ág4àYT%D Ê‚·~. HgÃoUBð,rðLþ)E&¿@äÇŠé4-'܆尡a͉b¢y{˜R õr‘øBOšŒ.1»´NÅùÙêc=4ÍùžÎ@q½MPèŸÐ'm¨Øx#”5Ùͪ“¯ª¸K¥(£K‚k&”®¹tâ‹’.#+ÂÚøàŠ¹€R”ßWñ7xÁ-”±…_ŠF°FYeãÖzZ-Ú_ŽCnUž5[>£<‹ð,ª©Ýëêî<žúÖ þ/aÌ)ähKéR¬‰ºë®dXûŽøÎÁùQ 䬡óÈÏ™\‰}[cŸ?¬R0„„‚ᵑŠT4b¢àGZÄìÔ51Ût:+õÈ)ü ‘Ór¼Þ ±á÷àYT%D Ê‚·~. HgÃoUBð,rð”â)E&?ãÇŠé4ÍkHnÃrX×\ìD1Ñ"L)z ¹H|Z%MF—˜]Z§â¨rõ•Ò·¾‡§3P\oû'ô-*6žp…Òc ´î¬:ùªŠ»TŠ2º$¸fBiášs8_ÌÔºŒ¬kãKæL®(?Œá¯óÌ?”±œ/Å#X£¬²qk­ß‹ö—cÇ[•g©ígT£‚g‘ôÔ¾6 ä€Õ|YYPgp+(ÍÀ37o²XjŒ§}Éx5òkµ ›Œ[hô>'g2¥7ÕË˸#¬N‰W¯fìç´•Œ•«ÂËÃå~©ää‡ a]uÙXÕaÑ+Ý1ß/±+¿(ÔG­ù¹V|y%雌oªõ GgwÔŒ»B÷^`½Ž¬.|µÁöD­Ó¥‰ØM{ Ü~²å¥µ’£0ü;$³û>ÂIßFM¯¸¶éÛÎr3i7¨dÚ÷mɧŧC:¢°ÍA.LlÇutnû·—•Nã\+LºèÚPà ªTS¡èÖ@×>Þ¡A|mlt7ÑÎZÒѳ›Ù·~*¾Oã'G»6õ‘7ô©¨ts¸k=ܵi)±á®m;N6¿Ô¦r4‡tc>8éædûC^«nNŽymƘLûn.9µø6ˆ¬Ÿ–¨é|½ËiË'>­Æmáè8íßF::Œu­Áè%F›µA…Ti¦bÐ ~¦-ª:Kþ2ÑÐÝDãjÉCÏvl[ß"ú©á> ˆ^Rܹò&l>Ž.¼µ†îD­“¥Ú‡À –Ÿls© äþ©,ƾmpÒ¡A‘„í:´³ÜBÚŒ"™öZr¤IÿÚ‡¨ü%K2zpöeª‰žõ¸ôÁÈ#o·v­øÉÖoC9½áçTðšnû¶m|M³uƒÖ„ÛW96óm‡²}ÕÌLlëKã×ÈY[ÏFaµfK—‹hˆ3ˆÿXü)ˆSWÍ)e_Rv!íÊØ–&ÖÍ}'½ÖÜDõ˜ØY#“éë]…-NFãµä[”X‡ BÇš!VÜ*£¯G¾c ìqVÓPA¸âÖ ‰âB²µPCyÃÎÙéÎà‰Œ¨cSñlÁCµ“†ÈK[}°’â'íIg{ÒÙžt¶'í‹èl,äƒ#zS >"`8b2÷VÝŠ?âï1Cg«‚×î·mãk´q¿jQÇÛ·_53Ó.ýÒø5rÖÖ³QX­éÒå"³{北Qé¬ þÄ©«æ”²/)»vel3ÏÕTz­¹‰ê1éØF&ÓYû»&±_œì¦§å[”X‡ BÇZ9¬¸UF_|ÇØã ¬¦¡‚0¨ê­=Ä…dk¡†ò† ²ÓÁEQïÔT<[ðPí¤!ò’ ë¬„¤8}n¯%‰{{ææt#ø“Ýc¯%\{3óÃÜ r‘Òú¶‡ñùçaÄê†yaŽæ…zÉÅÕQ…<ÍÔ!í|Ëž6[F“5Ä_`ÉÙˆN—b3&oñ£$á(cønĦi事&:±)l 'žšJ¿ž@èÓ?ÅÛ߇[µ¢äÚ˾Ãk4ž^Å9c'Èœø˜Ë(;ª$|ʸôÈ%ÏiÁÅ Ýɱ,2ñ)¨!áSÎ]B€¹bÄüWcÒ Ý ñ¶ ;A™—‚ïXÓ<¹Š’£8×§­µ(‘3úKVÐ)5]KxÎRÉ~õwlÒ *‹;Ž$ìæD}Jt'â“݉,4ßÎ:5,žÉFm¹vaj(”•JñMÃÆã›:Û^šÒ¦0]MYyA<ßi²Ð¨ÔÆžˆH¯#k/‚Î8± ZR²mù1góãZž(kÏx®| —Z@€îdºPŽ>@-‰ÈIÝ µåHkÓ"WS]}BþxxCÊÖ–= ²Œ&ˆ¿f‘Sp'aíKMPÂnGã‡2†ïFLën$gD]¤·Æf$Ôõ<53z=ÿ€è­Š·¿·jÀµg¾ÃSnOOÊÏØ 2õXsV¼£J§ŒKÿœñyN ´oȰïX™øŒÂð)ç.ñ¹\¡Õ2ÂÖ˜C@wB0,èNP&Ç¥à;–Ö.'Å9 s}ÚZZ9£¿dRÚwÂs–JÖð«¿ ’.PPYÜ-ŠÓå®sStס;÷˜<èNd¡ùvÖ© `ðÄ$0j˵ S›¬TŠï›6Ïßmpn{iJ›bh5eåñ|§ÉBw¢R{""½,dL¥:-pb´¤dÛòcÎæ‡ŠU½½*wh¥ÂÒ³j e§*p\¥kÇSôüi§HÄ5æd Îr®EþåG6Þzs+Î,|é¹¾ìTpØtð«'Jxï¦úÞ ·úÜ ncøä½žÄP¿óôKãWââÙ j‘QfN,¥¶‹ôèÄý6+Dö_0Ÿ[ ç¯söéS9/”®ü<ªˆÍ}Õ’¥ÉKåIÏ*ô» Ï Ô3f¥zÊ­gA)[õ–RLÞB+Ö|.«&ãvªÇU³¶xŠž?q©ÄÆì>ÁºÎµÈ¿\1ÈÆÜcYÔ<6Y‹`dNtpt´õON,+/Õû\=í妒á7}ÆÔÀK _z‹/øT„„L6]#üºÞ»©¾kÄ­>÷‚Û>y¯'AÚ¯Å<ýÒxó-.žMÑUhéÄúZj»HÿXRüÑo³Œf?±ñeó¹µ€Ôñz@jŸ>‰ôbùÐl¬ ƒ÷Ùº†·T*í÷ζ L{i‡&_¹#²€_k›€×!#ßl$0n£/¶¦Õ6ý–tVÍ ìReܬ7˜·Æ´Æ ºÏŽŒ~Î8ඨó‚¨_( x}k`‹CÈÕš`XgÇü š.³©R¬ Œ³ýÐ ûªYæÊPå`L¥_ø)Ö¢Êxfü»Âk£¬vU›ëã+ÞJèô¬ì:+$\€tÿoñ“·ñŠ[‰œŠ§žŠL,䤲Ðk}vW"gÅ_ÙvVVœÏPál·h-%VÝò·BÇÃlxpC™r+ÛN¥âTt¦h}dWgª‹Ã§»}‡âØUùÁ”aø> pº8tG™qk»*+»Xÿ[”4²D æIÖD±ãjôx…RÞÅUá;çcW¤½H­'Ä@ß•]ÂÊÇûÞnZ’Bðæ¬Ksli -µÆ–ôÀì±¥e²ŒÁåðôÝ×Ú¦€—o:„WŒ/­ø»ÖøÒ‰EÛ¥Š¹5|×î•ÓCŒ#kŸÔü¼¼m9ãä?¿`þî£'O8ˆ\µ ÆG옯 é2› ÑâØå1v‚n†ª–yahá`î¥Jf±_ø)V!àÌØw…ׯúU×WÍGcÔóö`¯EÂyLûÜ£ðQÃyôhlÁ]ˆœO= 2Áàaq# ß{€¸‰¸Óvðì9Ân,(Ôj‹í«'þgž<«"²êW÷œjÕqØäU÷*ZîàEDÕ€r”ãŒYƒ"ãä°!2±‹‚r Ù ŒÀ@ƒùðà†rå.l; ΂ÎÕ4*¢.Ž€îöŠdWe“&𠙣.ÎÝQnÜê®ÊË.6‚'‚û(JÄ`žd]°mdÀ÷%½‹+FÎÈ®H|‘ÚPˆ¡¾)껄õŽõ¼é´ävšxÉtŽå)‰½éˆÁ%ŽJ¶]XÚG[ø-yË~ûZ»ø_‡l|“!¸ˆ¦)¶æßú¦”Tã`»Tñ¶†ßjhKKtùEòo«s¹ÅæÜýê@•Ý sÑýêe6Ìf¢¹û—ï³ËÐûZ´Ì3C3‡s/.B ™ûßÞŠáR×R³zΛƒ!en×™#¹<&z [(t÷÷gܙșññÔ3#“Ú¼?·ÐO~@Ú‹œ9nÛ™›sæº7w‡·n87ׇLJW†kpTâWwÅç5}XiÖÔ¢­ŽÐi Ö¤•›§¼\DWV¢Š€2_GÝÿ®TÐW¸R×^0´°VÇÐðïŠÇŠóêŠ[ñŸWwàt5–Гžâ¤§8é)žoOñzŠGÃcðÈUáXˆ_ñuÕJ§J³ª¦å4½¥Ó@µIsï§<áýB´€=ÅBÝYà¿+ è+´º&¬Ö14ü»"±â¼ZqazëóôNWc MAvbV¶§!¶çMŸ¬If<†1buuçpJCšá†Þt’Xù[©hÓ=É ô!Ú§äUú1ú¤¤QÆòš†«ŒÒòíª¬:Ñ©‰tNAûª~.òªpŽT¢Õì’kêÞ¬?†ž¢:|xnxŽ™øÕóy6¦OsÍE5Ý¢‰ `>Šó§<‘£¿+sÑ ö3ug†ÿ®Ì ¯p®®½`hábCÿ+"+Ϋs.Ì\|žwÁéj,¡´Ó9ø±*Luÿ²£ZÕþzäX;tÑí¯ëቧî_v¬îöW*åìžµÄ0„gË}öGǓ㥣ºcîèû»±ÑÙYbÅ–k5º.O1;¶,íg˜ù`×êæ&‡W«m m5Æ>›šZZ'íúG®‹ã¥¡º£î=(ƒÑ{ÓÓÄ…}°¶F×¥IæÄ>öÓNÌ|°ëÊÆ‡·¶ödèIcô“ÉÉGCˆ7ûèƒ#·¦ã%ŸºwÝ;ï×wï”ËÄ€_]¥ëü3aÇ¥}Ù‰™v}¸¾Îá­®>zܸûÑÄDu¨JlÙêÏô<(pž'6+½e²÷x³Ã[1a(ðòØ7·šðB/¹"JÝ{Âñ´¦žÆƒíó/Ä„I¤@l‡J—)¢áØfÿX¸ŽÉ[_îç@\£˜Ôþ*É7YÓôÃ-+Ñš–,¨76s£nªõlýîX‚Λ¯í*ún~J߃ï²fö:®iìr<ÓÍâV]ÓÆ…æ`Zx³‘3kØdÂl’‚Who†“»bøš3}2T—±&‚º´ ÙÚ P¯ÞM÷Š-t„Ae6h-[«/[±DfK ( Ÿh:›SÙ)A-^®…µþ¾¦æŠk€ 0´†Ræ¦SÉ"Ùx¼V‰Ì2TÅ2þöqJ1 &wyßY^ÆB.óÏsñ×BMðzy9?V¢ÙÑË£Gëÿ¬Ì›eÞ2yo{ücû·b ¸Pìñ—Ǿ¹ÕÁÆyÉßâG©{8žÖ¤ÉÔ- Íø…÷-¹ï?¶C¢ËÑ€Fl³„,,½ä­/7Ý ©QLj•䉬iD€á–•8CËNÔ¹{nªõt}d4ADͯí*âi~R߃ïš“긦žyÓMã3oÚ¸ÓÐL o:r¦ › > R0ã íÍXrW_s¦O™2{D 1i!ƒ¡ê+#)°T±… ƒ0¨ŽÌc\ˮ՗¬X"³%Ž$D4Éì¤ Å.á5gÍ×`-rÀ²N27µÛY¤ÉŽU« ‘Y‚ªXÂg~ Ÿy0¹KûÎÒ>óK‘ó(‡oû½J¼^^Ê… Ñô½Ë÷ަï(@”'6k¼e2¶öøÇÞoŸ[¡Øˆ/}ó§ö¤ËKþóó‘ƒ?ÀwëMðzy>?œ‰Êw.ß9º~Oš_žÎÈW¶ÓJ=βdiQ¬é+;Æþh¡¼kh™â”eI›‹Œ¯ øB×+†ã¥…ý-„¬–¡ôN·.±MH‘dðgUn)"Áñögœæ&iúâÚÊ·]ÕqµZ¨*(l>~šVMq° ­+J5Rjáª;©Ðæsó‘3ïYk.>¸/æ(Ió½è7O¥p§÷N‘2=w™Ì‹— ÓÌåo‚›Éª8èFõ¯Ë}°Òå¸ÂÏ oÈfƒ¼‰;é"¸‘ü"´/Eæe+¯ÑýP;N¿.÷Áh/¬Uò8È{1“. ‚ûA)B{0Sd^¶òøÝ´“ìE»Î@{~yã{ä½VIÁí^‡¡MV)2/[y|}ÂKÅï­t¾[‰FgÃÙk+ÍÏʵÔšŸ-O…SdBÛŠ¸‚r ÝaöûîJôx{¯}6Œ\_ +ï!f#—X*Aõ]"§ë×$!åSO‚­kŒ† vyùï&Ø¥í+ƒÚWÎ}ÇÃfàé~ÏÁ•we¤i9‰Ð® ÅBÙÃ+n„‘¿b >/¥‹£óv·]JLEïm§ɇj£;ýXÞpÉP²½Ýä Þõ#¸%ö }ö1ã?< 'ÅM¼4†BÍMà‹¿D:×…¶¹“s­-)9Üqâ¾&MfqWoï-DŸÜn_¯„‹ïáöþ`ì]Â8_]chCðèš„3\càBðä£)°#ì`pA©\µc•6y@™U›N5Ýï9ÈgPF‚6µqUE{x5ëìWlÁ‡ªÆ.ŽŽ[¦f) q…Á5Ág0\º„èŽj@·ÁL°·¯ì³‡Œ!æ¶ HFƒØÓ"ón UCNä 4i^ÚÃXh›=™3WÒ'ZfqWDŠ{r4­@+¯˜±F†¿"ªrñýª¨UU÷×6Ub’O¨ AËyXþ#hî‹cþØQ^ÃðRù{s]wÞ‰î”Ãòµ¹æGã0뺶Øüh~"œ 3Úψ+˜ñ5?¹ƒ¿wç¢ÀÛ{3ÑG·‚[Ãsïá¶ãàþ{¸±¨7hûõ ï‘ê´càw”Û"mN€òZl:‹Ø¤é~ÏÁýâÊH›ÈIžv´¨á{xÅ­ÒâWlÁ‡Ú<ž¡Ø¼ú¶S§´Ìà¾ê†¸‚6 ƒØ/n¸tqª½úˆrï³»¸í]ûì!kćù£rϸ؉!sn ‹"²mÙ\hn~×›à#éb»ÌÉ|¹r/|Ë îŠ8q#‰Þ¦îÎAóž3# /EÛ™¿¿(ªWÖúµ™¸ú¨B»À†íå=Ú÷îW‡æ‚ûG}õÃ}yaÔ_¹Ç©ÑÂlãn¥2:{A\K³ÅÚþ]ÐZ.ò¥T+NÁÍòÔE¾”¦@¢ .(A××cæÒla³Q½ ªÍq-mje®]×R­0ÕYYùlꂸB¸#>j>ßáKqR:OãúðæðÖïáÞ’¼Øx wн†çÔQÓ6£·vî»@cÛ =ÇÇݤ»j¿èSá“w2nàU⿵GÖeéøžH×ÉÙ ŸZDJÚÞˆ©·9fã%·¥´±[T©:ÉÊÈé-<Œt=žñvÒtò ¦áqEy)4³8SCQugn>ï½á:z'Ï‘Â=¿rŽS÷ Ó‘……{Óĵ4]\ÛÕç"_JkÅI¸Yš¼È—Ò$H<” ëë1siº°ÑXí肸–6 k%^» ®¥µÂdãv¥òÉäq…poû¨<}‡/ÅÛðX 5ühxcøÉÉCròö!‘›Õެ%îøsá8u§Pn|83s§|A\Kåâêþ‡ 7]äKiµ87óùRš‰qpA º¾3—Ê…õÆÃAµº ®¥õÂjc¤W/ˆkiµ0Ѹ57÷ÑÄq…poù¨y}‡/EPÀ†ï/ÑXòø÷2ŠvžÂÝ£b/ê9µ‡Ø´Íè­¿;r±£7ÿŠí§ðànãºÚOüTøä®x•‡øoí¡vY:¾g{ƒìS+€HIÛuõ6Øl|#í¶”6v»æ~Ú6²2rGz #Èx;i:ùFӃ𸢼”@ŽYœ©¡¨º37'ÇwÃC¢÷c>“Ê5êV4:{}vô,\šFýjjhªz8°ú44»G×Íë›{¤=Õ®×öHišº>µGºÒÈuÒ‘*ÒïªnëUîÜ}&id•}tº£? ~H càŽÁ'®F–»Ÿ®x?…=ŠÑW)„ÑAQ„¦ d}½“Ý©e‚ýúíJDÚF—%q(©ÎñtνîÁ5fÅ.æ¼ Ý­G}Õ%º7}}zt–µ¡µê*“C“ ÔQÀU‘¡é=ºn\ߨ#MdíúÚ) “×'÷Hï¸}ôÅ mã¤Áý†5¸gV†@ ˆî”¯—÷hü_Zmà¸?14ÑÀñxX*ïÑuýúúê«×W÷h0Ÿ¸>±Gcø­ë4vÏ}`ŒÜ¿«ÆœWydö™’Uö=0bfŒÎœ1~#D‚{uŸx Y;ºâƒ Æ@£ÐÆèBš‚’Qb -öˆ\” öè·+i _–Ä¡¤:ÇÓ9÷zøÕx»˜ój$WXU´>¾aµ†Õ·F»ÅêEÿl/[ô×zx½¢ª[ ¬|íŸíëý›Ýb=¢¿Ö-Ö!À?/@|×Z€ø>*gU'CÝÚiõüå'Êu¾cLø‰=š=“òwW%0U-&9>Ç•˜Aþx•Õ I»½R\€¬[@t¾¢3ñ%©))™0Ä;ŒFØyòâ=9mO ­Rs­þNOæR²†ÎÜ=Þp~ÝvÀ¬”FßAí­8{µ†¯ôе«+øR¯8uµÒüìË/Š_ yôËâ—Wkîg¥2š¾®e”Z×ZÌÜÁ;ØnÉߺ×-ú§{xÕ¡­‡—ú'»ÕXÎ×þén±¬Ð¿Ñ-–ú׺Å2øçõƒïZë'mü7¾·ãJ÷ÞA…±8}µŠ¯õŠkÐ:¡u'¯.4?ùâóâçh¾‡m½ê~Rz€¦Ï…딪ˆk5fîàÎ}z7(oÝékýå^4è_íáÕ‚þ‰n¥>ðµ¿Ü-Vú×»Åj@ÿj·Xÿ<ýÿ®5ýÿŽ@gÕØMÚÂi5¬å Ú¸1‡åLŒa4âeôd߯3LL@ÄZÌÃ}Ž+1É7üñëS<4$í¡[ öq²l¡Óˆ1Ú—­¤g ì0Y`çÉ‹+æÊJ|ÕÂ*5×R#ôzCJÖЙµhãmÕŠÁ™ÒwPG-–¯.â+½âêÕ9|¥Wœ¸:ÓüèÓ‹£ùΧÅO¯.º•ÆÑô±pG©9q]Œ™;¸k}extxÎSÈYP,ànØR4~lö!ôTÓÌàb'ë4ê¥g{I£[²Ù ½5íó›àÍZ@M¥ŽÞp/´Ÿ]‹þbøËAÜâí—ƒ_xåìTàøS‘3à©{ªéÔ§Àü‹)w*ªÃ)ƒÔO®ºëžÝwfëxÿ ´­ÏfÑ6œm8³³Î¬Ç^ÐÐÒË~8Ôú/ !†—:y™ІËYãßy´(N{è$>öÅô„½‚Öîl¾žOÉØ+³:¦º 4”á{ÃÓÃkÓPªÓ JÀݰ¥Zœ´êÒªÛMáE >üÅàƒÈyà?~î=ÈNB«žŒœÉOÝ“MggÌ?Ÿt'£8ekâãÉUwÝÓûÎôÞÿmw¦³hN7œéigÚc/hhéÇe?êÎÏ!!†—:y™ІËYãßy´(N{è$>öÅô„½‚Öît~'Ÿ’±W¦;˜ê‚ÐI†ï —‡W‡' TËÐ;Ãݰ¥LüØ it¢IõÅNÖiÜQÏö’Æe³zkÞê7Á›µŽŸÊ}…VÝ~@ÔÐðÇߎGθ?üÔÏN@«žˆœ‰OÝMg{Ì?p'¢m8e¸[‡“«îºËûNyïжÛå,Ú†å†S.;e½ ¡¥—ýp¨Û?…„^êä¥,< —²Æ¿óhQ2œöÐI|í‹é {­Ýr~;Ÿ’±WÊmLuáZÈ ¢íé–*WFaœ¸»’ÇyñÀ¬_‹îÖ²49¨Á¸xw%K3ä)ÿ‹èn%KÓä/ü/…Ëè—_BòPÆýìJYI|1u~Êwº§¼Ùf™ÅʳçpÈ¡A©mÉ_yö,cÖh\òðÃ(älÞ85ì-Ã!¨±OŽs±ÐŠÊÁð Ar“Ëaµ"Ëñ§„c¦'HxH§síòɵ£>ØÈK5Ùf\ð܃¾q¤’ÇÙßÀ´¿T³4Xƒ±` æ“þçÑÈB–&ƒŸCµ²Ë=¬Ö$ã~rå’ø|òü$Ôä¤7Ý|Àb¦Ïa7KqÚ’¿ÓgžE}1Ôätºx¨I¶oœö–áT/ûöXhEå`x‰ 9ˆÉå°Z‘åøSÂ1Ó$<$ƒÓ¹vùäÚQl´šlÛzwJ3Wî@ðá\ç8e5úp1KUèÿ>œËÒlg`Âÿ8úp&KSžýO…ËO>õÇIÆýèʸ’øxâüÔä„Wn޳Øxùv-Ôùô -ù/Ÿe$õ?P“å&tkP“lÞ85ì-Ã!¨>Nög±ÐŠÊÁð Ar“Ëaµ"Ëñ§„c¦'HxH§síòɵ£Æv e‹÷hßh̳}ÐgVrä¥v©FÞO]šâ¾ýp/  rSßf³*]j}µæ²”™ê›ŠFVrä0Ò7R ï•ÞJ‘lÆûÆ ä­ÚKdeë—ðÓŸ:dpà·ú¶À BÞíå/–²“0 ©T·—^n«—¾*ä@¢J¤K$O2ã½ãÅcÜù- ¢Z€ˆZ€¬ÁKSª5|q‰ÇL¼ÿòҗʾ|©¬ýpz^ Ád F‡sª¹à–U,ph”öä³~SÌå@rNŒNˆo1ç̆èφ<3Z$ûí’ÖzzÄ$áÜHÙƒ}¯ï^ÌÓ}0>-äÈËÚ¥5`ð~òÒ$;ì‡{\m»îû6š+Òe­o­¹$e&û&£Ûø4Âýí¾Ûò¾Ø»X$›±¾±yûª—¾/Éþ]ÂÏêÁC~Ò÷ "dlqÊI˜„TªÛK/÷¤—>÷(äõ!¶Q”H/–HždÆzNJǸ5[À‚j">j²/MªÖðù%ÖOðŸ iÿàÒí¿€óÜóZ&{0ŸSÍŸ˜Q ‘öä³~SÌJå }Nhˆoçç̆èO‡<ØŸ3Z$ûí’ÖzzÄ$OMÊ&é;}w d.÷.0“#/«—Vi0Çû‰K<ƳÝ´An‹ï[o>”.«}«Íy)3Ñ7ݚˑí¾[3 ÷ûîÈÓR/}@}U/á·Út¸àÀá>î{ n½—?1ÇNÂ$¤RÝ^z¹Ç½ôM;!WíCì¡(‘^,‘<ÉÜï½_<ÆóXÿ3ªþE|Tÿ²þ.M¨¶ðñ%ÖñþÓKŸ*ûñKãÚgÑçµL%Aç9§ >3 ¡Â'íÉgý¦˜óJõèœÐ¹(ßTœÎ™ÍÐ/‡¬V3Ú#ûí’ÖzzÄ$ñrÓšpýál„§nÿèkßݽ ×NGx¢d¾¤{s›pýa9Â&óF8ñëÄbê•–E@â`¿¢©7ú>ÐWhzw’šŽ©11µP\ÀŸFÌ.—ѼP-VÑ}Yü£ºYܼZcó;¸‹º85ˆ¿á)Œ´Ëùbzr¾8/¦§—ŠKhž_)® û’x ¾²QܸZeó;¸‹µ89ˆ¿ (Ün—kóµàþf›eŒ ÌS‹Ñ}^¼„|¸^\¿ºÈæwpÿ`qbß_nu*©ìlÀË^¿šÙ¯Ó›™wÜzqap9ª/–!m5µÐצL²Ó/¼¼ ¾¿CëáïÌ»;ÅùÁ¥hg©°þ×ÔRS›ÜgËOý^†ÜߦUÈw¦Üm¨Ÿùh{¾0?üpxÕXìh›Os5î<Ìk‚YÏÙ›Õo¬pr²à.4§xmja`Á[nÎòÂÛìòÀ²Wm.°ÛBu êáô™‚[® Ô<1³ÆÆ4°é‰©µpùuÛÕÀ”7R–u¹m)š«MçA— ¦!¥Óú-*„óî|s’Wˆ&çæ½¥æ4/,M/ ,y+Íyv›_XñpÊBÁ-­ ¬yb6ƒr`ÃÓá†ó™<¶ÏIïv [èå¶ud®¦œ‡<(CJËze‡á)wª9Á+ XóÍ2/œ”1Ý›Sì6õpࡇj"7¿:°ê ÷Àº'THá†:dÛùÀ„w«„-ýrǀ˻æ|VLBúD¥°OÔ9­wô‰*× &G[J9Òßì> Þ|çG¸ÀiÎ2ÄÔ`¾O4 â©õ‰V†•>Ñ(ô4öhÜã¤M_á“È‹¥ý • J’a¨úD»AÃÃ>Ñlôä♦Ϩ9—¯ð ór#øÃ_;øNÎqþ»ÃÿþŽŸ‰ûàø¾uÃñ?„}á¯ÿÁßÿGøóúGÿä ± Ž *+î]8râÿåû‚q_4îKÆýi–ü—1Ü^÷žrõþì/bÉ„ú³¿r¼ÿð¿àxGÍr÷þìÿìÿ¼ÇSÇû÷.%8^‡ã-8áø!Ž¿ÇÀñáøpü+8nÃñïà¸Çgpü8þ'ÿŽÿ Çc8šŽw7G7—à€ã:Ž¿ Ç߃ãÂñGpüK8þ #püÿ Ž¿„ã¿Á1ÇWplÀ± y á8 ÇoÁñ×àø>?†ã'pü]8~Ç?ƒãOàø×pü[8îÂñá‡ã¯°$è#pÇ}ÀlC'ោÿ,áûÎñÞßR‡èöþŸÑíýs£Û»Ž½ÅÿEŨõ¢htmldoc-1.8.27/doc/htmldoc-fig32.png0100664000212600000240000006661210322727434015556 0ustar mikeuser‰PNG  IHDR§¡)X pHYs  šœtIMEÔ .‡ãG IDATxÚìwœTÕõÀϽ÷•™ÙÙBÙ¥Q:HWŠ ¨¨@D‚%1bì½FMTlÉÏŸ?czb£&–Ø0¢‰ a‘ÞYš "È"Eúî»3óÞýýqgÞ¾}3óæMoçûá³¼yóæ½sË;çÞsn!×-A¤ø¸ýî‡$è?ètÌ A¢â‰'žI|ØT³sA¤Ø ˜‚ E‹dþpÚe¯$s/B€4 Ð ðo"¶¸SóoC¦›F~¨åzÓ û‡·kyËÈ)±>=úC‘r†„'×þ¡-…´<#ìé¦,‹üô°ûFÊ"kR#?4z9Yê@”Ø?´åÓ£¶õé1ÚBH»‡FÊ"ËÍ"ÿÚþ¡‘ŸEˆðe´Kƒ·¶/—æË"V2KM‹–3Qß‚ {z4byz4¬oA”R®m¢k‡è™å-ÈYNU¾ˆl‚é8ôF©·L;áãà×$h<ÖØØåNwÓ4˜‚ …ܺ‡(ûÉ}÷Þ{ç»wñv®|ô·î™6Í]ÖêÝ/þ<©ãåœsBˆ¦i»×ýOŸ+öb"‚„såˆrç?~þüùq]ãÿÍJà)âW±l€Ä¥À…Ž•Ž] õWýùñ“þzùo^9òå[ž{ç`—aþû®¯/üísXØ‚ á8k3sÖìÄ®OæWv6€IÆ M™2ìT¹¼¸Ò¤v:¶¬˜1ç”ÊÇ7ý¾ä´‡:œÓ¿ þêØÖ?€·×íÉdÙõ¿€¶ƒî3Ÿüní/ ÝПÄ{·Úeÿ]G=œ˜0_U?=Ç?U€¿=2nøùlÌ $­ <2ÚWé˜ÎÑ$i~ ¾]±Á8©ÕîæÝûÀîÃþºyìäkmUUíï^÷Åï ¬ïEdùçü \ð´ø¸áã‡`à¤gÖô åÊÁß{vÝ¿C¦üÒ|~õû÷Àð‹µê½{`Ä%¿6¾ZñîÝæ+GNý­q¼ôí;Ì_¹ââ`Ñ·™ÏŸõƒç-bT¿rŒÿÑ_ÂÓòéË7Ç®{Ñòíœ~l_pãß-ß~øü&ßbbðï?þÐüñ¢;^Ï©²ûûã߀kŸøÕ’¿ÆÃl'ÂÏ8²œ2MèýøU pã°wLž 1—® jèð‹z—-r =zóÝ!§Nz„%ô½ÿ3Æ8ÀÚî7ÌÀš÷ï‹y«Ó/û-,Ÿyײwî9õw°ôí;`ô忲ä­Û¿yû˜+ÿ( À™WýI<ÍüРxõæhOàÜkÿæ¾tý'/^g6œÃË„Àì¿^;û¯Ó'ÞÔl>úó5á7ü÷¯€)·¿£#'¦?þó˜'ɵ¶MÿÀøÕ€Á# )~îÄD¶šN`z쯇ã'€´eJe'8{håàª1{F_‹/¶ü¶aK°ùYÚ»¹YZ÷ùï ¼ï]G6ÿÖ|q«wÚlä¶x¯åVû×Eˆ4ì[óÆq‡áÁ–õî•ÿkœìtúO-?Ù¹ôâ ÛèGÄÁŽÅOßžtæ qðõgÍ>ŸSÆ>n¹É–y3 ÷ÙO¥©È×~pÿÐ)¿tbš;—ývÙÌ»–½sç¨i¿Kø¹ã®þ³°áü^‚0‹bcl˜õ»«ŒãKî~þõ›+Ì\vï[3Ÿ›&ާÞÿ¼ýìTóW<øî›Ï\*ޝ|è_âàŸO_b\ðÇgÀk?¿®~äýWŸšò£G?€Wž¼°Ù<ös?à¥Ç&_]÷ÔǨ•|1 8÷E˜#Æü ¸%з;¾{‡4èз×N€‰CÇõêÓkìÙcÿòÂßîþËzËo½½n!ú/oœ,ë{g¹ÉTÑÿ®Výï€ÃÓzÀ=­Þ7üª…¨y*ß_5ø~“xÚ{ ý°`Ϫg`÷Êg ãˆ‡:öP§Ó~žœ®£!o–ü¾Yüsè~Æ£ÝÏx¶/|¾^øœ|Öc'}¾ZÐÂl™?zýd%1û§gÿtãÇżrÈ…Ï{ÜC/Ê•û9×¾s_¾~îK×Gô fÿõZ³/è£?_3éæ8Êû¿» .¾óŸßõ¼÷›+¯.½çÍKï} fþêòËî{û²ûÞ€w~Ù¬ý/ÿÉÌ˘ o>sé¾{ŃïÀÿû}Ã\õ³÷~ð³YðÚ/.6~õêÏ/¯<5®™ñïkû÷ôÇþcìÇO|øã'?úñ“À‹NDå‚ä]Âað B?Àí–æJ›k~þ ßÑz(+›õÕFéß¾N=…l9T½yûÖ[¿ª—uµi¯ç7Çw¶+/ì Ý:ÿ±ˆà‹¹Ç}'üÂÚkñB™)¿\›c ¦/(äàeÑ!øø/Óã2éæŸÿsIøÉ«y߉'ÊÜ@<ÂèN¡¸m@I/Ïá=ÚW7Kö˜tÊÉï¿öÞîý;o •æ½ûþßvßÛ}ÉšŽîÞçž piqftŸs扛É1dÊ/óÎ-BÜør4GЇÏÿhò­¯dQ«~ö^‹yÂŽyù±É :/͘„jÉ/`Äœ˜6`×’­õ»ý­‡Œ¾è¬ƒºžòìsÏu;õc>¯¤MãÂWÿñ‡_þoÕöŽ‹­<Ò´p\ x|RNå®åO@—‘?KÉÝzŽbëüǶ̛—/(,›yŒœú»ÔŽy¿ΙþBÄoÿûâupÞõ/™cÂoú»ha K0ù–Wë)œ›ŽQž– °%D‡ py<{÷u;qhüÈQ3îÿio·‹§žÝµ"àVK;œuÞë_­Ÿ»½Zcåª÷$¢8¦û"ÞDPÖ玺/~oÄ„'¦rÐ}ûkžÛ¿®Å ÉvC²oͳ{WÃÂ"&Üqă»W>c„…cÆ„»yä›Å?ß±(Ý=éÌ Ç™}½ð‰m¡°ð)c7+¯^ãŸÜ2Æ–y3Ò¶aå{÷ˆƒÓ.ý8X>3˜“#§þVôBFMûÝÒ·ï\òVs~ÌBθò‹Þ¸má?o5Î[Ɔáù¯Ü4þš¿š¿:çÚ>}ù†¹/_/>FŒ_aìrám¯þûWð‡æá¡ÝñúEwþóýß]e„…EL8=€Ÿ¾÷ϧ/1û‚DXØÌýà•§¦ü#6‡®}â×›Œ=$wl†Âu½KC6®[ÖÐéb¦™X3οã…ÃíûîÈ?»íÐÊmÝ[·pîÄ’ŠVîòòŸo\¾äÚÝÇ5ÈDç4{ü‹´»:x/\3׌Ã5ãpÍ8\3ޏrD¹ó¼ÕÕÕóçÏëzc­ˆ~%ÖŒg"ΣßîÜí÷7Í{îoýF1ᲩŸ}½¼®úóc>v¬®q`ÿ‡¾Ùê•Z£$éhiY#ZmAHj7­×'ó+;_ð=x@ö¸\ºïXmíož~bD¿>ç¨Ü±‰nîT·¸zó±õMõGšêªú –4‚ ˆ…ñãǧõúd~ÃB)áœ;~àP“ÞøÁ>þdE+ßфӊvU~Ÿ¨LÝ]]çXØ‚ ÂWèÌͧD°J›@8¢Ã‘€¨~»û ´Ç{¿P.ÀÂFÉSZØ€3„9‚ …rŒ Ql@YY)æ‚ HaSWWÙæ‚ H‘ö$‰aŽ ‚© PsA¤Hm@“χ9‚ R¤6ã‚ Åk0€ R¼6ã‚ Åk0€ R¼6ã‚ ÅkœÇV­X’I)‡Ÿ6Úr¦fÝê\ËÊAƒ‡e7—¢åU&ÅÈîÓóN¼ôÉ“­”æx(HáÃÅNÜ8Œ,^TÝ«ÏÀL&rþ'_0ù"ããŠK{õk%±hÁ§çL˜˜Å\Š˜W#»OÏ;ñÒ'O¶Ršã  …·ˆ/-ös²^Іš5mÚV)ªšátnX»jü„‰ðÅæMm*«†>nÃÚ¥‡ŒÊ‘¿A!×­=ïÄKŸ<ÙJiŽW€‚ÞÛ!b½ ±X àñxbþøóM5¥¥å™Oäöm[Î|µå‹Ò²òœ*€Qg¿ô³9°}Û—#ÇŒËb.Yò*+bd÷éy'^úäÉVJs¼¤ð†Ø9~ü8DÜKÒy<À[V–É6ÔÕYÄuÖùFë;ŒðRh¨· ™á\Š–W™#»OÏ;ñÒ'O¶Ršã  …;.òi~€Y¼Ü1`våHfWŒ<ªH…-O¶Rš×3òTø„ÅΧùfñÌj7Gú9•‡Ù#*RaË“­”æõL£<>a±ói~€Y¼œíäHfWŒ<ªH…-O¶Rš×3òTø„ÅΧõ‚Ìâål? Gò0»bäQE*ly²•Ò¼^y,O…Ïf<`èiãÖ¬¨Nab¢ÝÐ>0pȨhzÙIû=™¶¿“xÀÐÓÆYΤ6ÓlòÊ^ ‹$– Â…4_- öÉÉÒZÁΜ4½Ñä©^°ØrfÜØ1Ѿ5•@J ií+ªÃ,²©1+X:4IJŠ#aùÍOOyeNR{CÁĵy&; ã–²O_m°þ.†Ÿ´œ±ÿè$Þ!c)“†9y,š½zÁbqÆ8ÿ*±”š ¾8É¢hÏYÁRKbwv^{?ó¯||6 IG˜ÈÃNZÔM´ó.þZò+Z< ¢º7ÏÞŠh0D¿Aü5Oø²Üßùo“ÉÃhMcs¦YZöµ*1"ÖfósÃ/°Hóé1ï3]/0×CÔÔfŽ“G[žžnyœ’;G+å”?×É[`ß’°Ô„p•â¤)æ¼öF|Aì+CÌÚM[¦¯¥8­×ã¼7dSáR°èn÷NÌß&°¯ÐáÕÅIS:c>͘%åü1ÓesA\•-…eñ8üUO¹<1{ ® ?סZwÞè¶ogDôe¥0ÓbV†„+sújQŠçD+¡”ô€Ò=? %±òÐI昛iuf×5™™Š—Zouò®€²kÜØ1F< ¢öO_A8É¢hÏÖÂMí›â¼OQ™&“i)Qt1o’ªZÁàü€ä‡½3Ѧ ãRñ1/.æù1M†ãÉÈcø5ŽmŒAµ1I5ç$‡#zxrMÏäÉÔ¢8lÎH¾`“‡6/O4·OÂïa‘ϰoèe^¼„å±iã[® D”pmÌLwÎd& oŽd8<“›µš¶0‹ù/‹Y`À24wú äR:†Fd¬°"Z¬¸žžùÖ_ÖkròòDÔø¹“ÒhÏÍ‘–~~U¸Ävø/ª P%æ¿jŠx+‡Y³Ú5ç‰é,²11íJ´ Ìç“É%›|°ÉŸˆ_% FăeÈ å›™Ÿîü)7KIfNžÊ“’;'PFÉ?7b¦9?™ŽL‹ù‚¤ÕÈ9¬EÿEõ¥ÏÑ™e9iúÞ7´‰„›hߊcÎ9çÜPßë×, ¿,Úo-ªÃÚ¥I®-œCJƒáµ<⋘w{wp´;ļ¹Ã§§ÃsêðÑá/­12$µò˜cÂ6^£ÄªAòÓ¸l¦§D»y´ŽWuÄ,ˆ5ÚÕyíµAÂmC\µ=µZàþq-©š|[¯¡®Î²€·4Á5] íoB!ƒ†–€ï=…Aj¨¯³ìÚ…gf£9¯Ò!F.?=ïÄKŸ<ÙJiŽWû·)Iá³2áÑ"¶CÌûW<€sÞæõ7'NhšЂNÑu‡ˆë¶IÆ’ñå¦O3Ç=ªÈñ”æ©K=¯…O8PDûå®îØ9düÄܳ÷üsçœB(€€¦QB(¥¢+à¼C¦ýð?äHQâþ9"î`ïÊÇÚ›r±3HUÿ(%óNœÔtý¤§Ÿíðò«›~ö“£=OB(%ŸÍÿØ×äcŒ1‰–@W? µy˜pÖáþy$îIb¾S ŸGPòbÑüÑhìØžp8¨{ö½ã¾ƒû/¼ëvµ²Ä˜$˲,ɺÄ£Œ1J)¥ÁŽ‚­%Àýrêéy'î€Õ#‹b×þœóCmÛJA×ÛlØtÉu7uþ¹ë~p¹«´LQä€"˲,IgŒRÆXsÈ$š%Àýrêéy'î€Õ#‹b·TÙ¶MÌ,^Tݤz½å={÷÷xËÚuè²oO­Ã¿{wïlß±ë®Û{u=饺®Ƹ¦Q€0vPÓvßïà_þjñâ£ÇŒÝP³fà ¡Û¶~~rϾ»v~ݹk=ß~Ó¡S7›§o¨[ºèS—Û ‚ YbÌãb^³ÿÀA Š/°jÅ’^}f7…»wíôxËJ¼e õGÀá_ÎyÝÑÃ@à«; {J)p„pѶoÃX›ç~]×½ÛêMŸ/_¶„ùâó͔ɻj¿‘eùÀþ}”Ò£GBêëŽBŸ"Èzþ RÌÌþðýñ&ÆÑ0°÷(}¾©¦c§®>_cvSضªêÛÚm üP×uMÓü>¥ÇÍN4‚®'„pÎ9#„<;kϺé–Ý}{/ºq:kßÞ¥*²¢È’$Ë2cŒ1F)¡”BhVå}úŸšõüA¤˜8døüO>v>] ¾x€¯©É×Ô”§Y£s®kz à?Þ¦uéÎ]Bû‹¯„0®ìøù——ÞÿȆ±g¬›2I.-QEQY’˜´ƨ!HhN‚ HZqˆ{~@nÎúsØÐuÝïœèqRé®ÝD×…ö'œë”g „¬ÕõÁóô]¾růØ3f$PJ˜$ɲ$K²$… AãGA2@C]Ä3] ŸöH¡®ëûôªª^”€ÎÀÜ0›P?ó//ÕýëƒÙ7L÷÷ëãw©ª¢hŠ,I’Ä$Ib$Ι‚ À¹2ϧùÉÑÖ?ѹ#€ôÿP0@ü5Ì€qP¶ÿÀÔ§ŸÛӧצû;´WýŠ¢*²¤éºpêx&‚ Hp®Ìói~@ª,ASÇÍMΟðÙHtüüËi÷?¼ñüs6_z±_ EQ$IÄšg @$»¤1ï€-/ÄÌ1ÞRq›íA³%ÐõÒgÞg+~tÅ®3ǸÜ.MÓdE‘eIb $@3€ HvÁx€r‰‡3*bÂfQõ›û Á,óùƼðc3?øèÖëýýú¸\š¦*Ьs.I’hÉ.°é UMU%Œ…CM. ·ô™¯)9|xê/žÝuꀥ7N×ÚUq]7ïF`êv ‚dçÊ<Žýò_ûª™6¶«²(zëŦ@q´k8!×oœzûý]Þÿ°±©Éç÷Z  é¡‚ HV(ÌýRe ! 'Ÿäݶ=\§›ûÆH!óW–Ná|Åäó7ž1ÚëóI’$Ibæʰ."’y0`oàx×.",lhshé2T?˜þàMà ØHbì…䦨ž’2EQ½Þr›k¼Þòß|e˜ê‹-Œ;Æ8®^°Øü11RrÉ/Š}~@¸.3Έ)¤²-@(w¡—ÂÇ™}AŸ6lîȪ¢¸dYUUUݪKUUe‰IÍ ÊYÔ}’ê5œöí»ìÚßú©ÑH¡`Š¢64ë'mVÙ¨»$1Š:QÛŠýÙW/Ÿ#Ϙ°à“÷A´E9×tpÎu1[8ä22 „»§ÁíúÞòU÷)I’¬ÈªªÞq÷ƒÿ|å¯Wþðz8oÒ¥°lÑ'Î׸e¼Ck±wo­½×¥¡¡.™Kl;{Ÿ/Ywÿ¸±c 3`9ãL´®ƒù¤øó‡æûÛ›%É 0&I[:~ŒÆ>!R¨½Ï€sÐujþkºN)õžhœÐH™$I²$+ŠªKýøßoO¼pÚ¢ê$IbŒ:Œ X4¯ñ1±Vyžýàë­›ÒaGSÞ‰IÒ¥cQÊá6Ã86[›Zn‚Éw0™`mjÓZj¨J¨4:1‚¡†|pxh(00ƒóÿ9r„{;2‰‰YÁ²$‹± tVÖ@ؘ›IîoK<áëíÍ‚ä¸^PlcÐpr’ojAç:€9·,³4d t€›ÿõÁŸn¿ÉðöæÅZì-“ƒÄ¥ô#Æsl­#ˆ 8? ¦ €†Þ=ÛÍ[`VýÐr݈æ‹9×Lv¢Íá#c,Z5é<]×€ë\7–â<+àë­›Rë Êý^BZÛæFW;Hž‚ñ»€ø{¢S¾ 1ð_`œÀ·•m;~·?ÂoCºþ¬Ï¯:Èïr@ Ð4 t]Û‘A6f§Pû#’ïu<@ Š66Ô°‡ÛµJ…ú£B)ÀÁVÏÊñVÓžýí S£žšÆŠƒ¾òFåÁCÂÞʲÁ½*yÆ&@uéz²Çv\Ðñ†º/7¯OɳœÇ„½ÞrÙ¶ê÷ùÜosAMïˆ?Á&@ÓƘ°¥¥ÞO¸kÚ? _PÚ8huèði³ç®2I–%IbcŒ2B¨¸¤98\VQÞ¯bP®åíñcuù®èÍóŠ$Áù1 B?æI©É§65€$I\× ¥Âüçý7@S]«o˜>ì…¿Jß²ˆá|ôüÏÖ|¢{WIì.Ï‚KQšÔó Æ 2j$ßÁù±jZ’$œ2¦4ã$“%”s®ëúÞIç™;¿bû7Ñz*ÐûÜ4ÛÀbÌOÑ  œ£ ñ”2YBc—9ˆI¿„2Fhš„,yôÁI?¾¢ì,­1gîº ÷[ñf‚ŸL=BÑf‘´‚„ƒñ€Øf£B«2 mZëŠ%‚(%ÀÛUÕÜ|Ý ?¿m»1Âù˜yŸ­’ˆGÈÐ÷zp²æ¿:×Í6€’àæÆ_J)ZA"hvŒ8±À#„PÚ¬jÍ*UÓ€sй¾gÒyÝçÌ-ß±“·´fK åKQ=Bæ?œsß±§ÞzwËÖ¸¤ôÖ»—­œýè•»H²KQUUŒf,+» Hj9r¸ÅŠR;¾ÞŠyb¦{ž±5;ÆRh„ç]–L¡ÿǘ%@u]§”p^qøˆGÈî£Õ5 ÿÁ•ªÍ7;/ùÉ£/Þ{›T^êr©ª¢(ª"Ër(H@Ñ ùNeU;Ãôê33ÄÌêå‹n ÆRi"z„ÌÍö@ü$šGHŒæáœûš|C¯½91 ð><ý÷™ý›_yËJKJ<ät$% IDAT·Çår)Š¢(2š$ßQ×ÚÕ‹+«Úíù¶¶c§®•í;až˜¹à¢Ëg¿ÿ–½Àx@ZzÍ¡?)ß±ÓÐû–‘BÂ#ôÊC÷¡ ! DD‚ûüì ×î=±<àÞÐñR€_·ø²ô»ý£ž}nÕ#Ër@–5…¡ŒRI’dç{#Hn2dؘµ«@»]¾Ý¹ 3$^0Ðìzì§á!q Ž+1{îº)“dY–€2*õk5[/Yû©Þ0­tÉÚu+jÖ7*+Šªiœs D¸ŸDoËÉSŒ•Ïkw|sAr$‚fÇx@ÊÍ€Í!³GÈ茞·`ݰÁM'u—eY‘å€$Q ”ŒxêG4ˆb5ÎûãŸf?ÿGUuùýZ@ç ¦9K²±Á=–’×6àÀ}mÛ¶Ã ‰Œ¤±7qŒyÆ€Ñ'¸ò¥Wßx䀪úýYÑ4Jù—_«û¾sdFÔšÌÀ;‘/ô<È¿Üê2ØÐ4Mç@€P&5‚CòŽã Ík«ªKQUÌ“x)ðx€Ía6?Ix“tñÛpÐÉ_ïCØt*üP &×ж^§hš¦éš¦ëZ@ÓûöÖ{b?µ¿ø•èÛŠ÷ÑGkûôVUÕåR}>Ÿ,+åå õw6VUWSS£óó©o°˜¤ª.ÈÌs‘ühϪj6À¢" ž½ð ƒBŽÄÜ+8­]³GèÀú[¯ôü‹ÔðéºÐ¹õ%%/\q©Ö½k c\ûsMûaÌgL éýÑ¡ˆêœ¼téÒ77º\MMM>ŸÏå €®ëyç ʘÕAòoi¹¢¸øáÆu-^›ƒGZÎä/ õGcköBDT÷æMä-ˆ¢Q þ-…hùFü­Ù#Æ!n¬ì °tøÐÙÆ=õ?Ï·z÷íPB.ž|Ù1ûä‰80LØ02t~iŒl¹éG×øôÓOý~׮ݠ¬¬OÅj´¯ÅA´¶v´oó–¯bÞ-ÚÃOŠ3Ø@Ò04ì„86[³ÁˆxlüÄlWÂï“ÍÆ¢‰puoß°üÖìmŒ€oÞ»í†úªÊ§füâ¹ÿ{Êår¹ÝnÇ}é´kf8óŸÏÿn¹ÇÎ,€wBÞÿ.NmÀÿ͘Ѷ_ßsÎ9gÅŠå[¶|Ù«WïÇɲ,¬’Ѿ6kØðFw¸O&bóÜ|7óõ1JÑ~hì ™4ûNº ѬB¼÷I+Ε9µ¸lþ˜UHÆ#\ŸG–e¥]Õú[n€ÍçŒë=Nò–”üî×ÿëñx<·Ûír¹T`ŒéÇOØÝ÷W]j¦…œBàȆ†@ š¦éº-÷Ÿ1+V‡J6^]íú˜÷A¥¤OÑ›ÿ™5rLílt̆ˆj=gýKΕ9ÎHÜ ÀYgOݾ™;ÿ•—ž8!T–¥«§ßlÎ[»ûo‡âÀ£Cg;‚„ƪ_×uÃDÜAŠ„ôÅ «`ã Ê:8? C6`ùâOÍç÷ùš|>ŸÏç÷‹=) ¥S¯˜þáûo)Š,ÉÒøs§È’$—–D¾ÝÔP«ÿ>€]¡“†#h—\.ó6dX@’c6-9Õ'Àx@†Ì¥”1P@!DÌÍ’uM€É]þßÞ5ŠWª­ÛDí@­É€é@Šß‰:EhY–‚ (ó<‹˜ÇóD ê†_éä+‡–€1ÊSdÙ¥*n·Ëãq{}ËËËZµjÕªU«ŠŠ ¯·ÔívÉrpÕ lå3ŽõDãxCßç[»zqÀïëЩ‹×[–üëii·åõ2* u֮жvtC]Ýöm[.˜|‘Íö83gÍ®®®Æx@²•É4K ,ÀØÞ‹ôîy¢ªÒýi›¤e‘†~Þcjþ¿c÷ôºV­šºu÷J’,Ë’\¤”R‚Š!…¢¸d%Áž¢¹ef^:Åx5òôQ”ØŠ÷ÈŽ%ˆX¥Lf€2F—uÒ;³¿ý/ç7ùø¬1‹F¦0è~Ò)ßíÛÙPçv»]n—Ëåv¹TU–%Æ$±žÚ$O@СS—=ßÖîÚ¹ÃùÏ…Ú×uÝWW?*t†„6w:åÓêN‹–ügÜèµúÈŠ,‰¾€Ä£ŒR#>ËoPLÈqÀ“t®*œs¾}ê%ÆŸ5d欟VÛÿ|Ñð!³Ï%y½EV•€Ö±c'Çív»ÝA ‹Å)°€:u‰«+ š¦5?!vbK»¾º›|ÓfÏ?Róùo˜N{÷óù…=Xð K¼äï«„ñ€Ü÷5ç<­j»ñÚ®œv Ù¶½÷ÆÍ¶|U¹{¯ëĉn×ÞvUÛ»u]{r÷cíÛSY*‘$Y’ÅHP—Ku¹\n·KUUÃ`AŒ™:T’´;Ñb1]B„1‚ò½û¦=ù¿»ûö^tãt_ûö®€"+Š,iº.3Æ8ù¨1¿'¿2ã¹ÞR „0J%Iò è÷EÏSÖû|~¿_Ó4MÓt‹*XJ cŒ1&˲"˪KUÅ¥*Š¢(jpdÙ›‰ ø¢J++Kv|”€šÃÚî[Ðñó//ûÉ#ŸŸ3nãe+e¥Š¢¨šf X^Þ¼ã¹n 3@¡„2‰I’ä“eEQü~ÀÀuàÄ5ŒIŒI²$̀轆´s8 m‚ëÞµdg­èÎ ç:¥ÁI›ÆÊ.šÞΧ§,Zºâ‡Wì32àv)²"V}—%‰sFM£ìòåýÂx@~˜Ib„¥Áy’,+ š¦é𮓠¡âšf˜šœï¾KIK?€@}Ÿ^UÕ ~€¹`6 ;~æ_^ªû׳o˜îï×ÇïRUEÑZ (Í›–Æò¢‚ÎyhN/¥”Ê’Ð$]Óƒn á â@H°cìš2*1Ñ6Áæ?‚D~¿D[ÿDçŽzÐÿ#º<ôµaŒƒ²ý¦>ýÜž>½Þ0Ýß¡½ê¾Ö`€1.ú¹$Àx@þutè:gŒéº˜äÈu®›" [kþk¬v‚A"¾_M;44zÕºÞ²†‘èøù—Óîxãùçl¾ôbi‰¢(J  (Jx g_=Œä_‡@¬üÏ9 _ìZ®whžÆ‚ÚA¢7°ÈÑò21AÌà-ß³=h¶º>ðãOúÌûlÅ®Øuæ—Û¥iš¬(²,IŒ0c¯ŽÜ|1¯–À¼µeg`ó"ÕâïþïöÙÜÓ<Ñ&g)€$9R()C.ñpF‰®[T|DÕoî+õ£Ï7æ…›ùÁG·^ïï×ÇåÒ4UQdsI ïÎY3€ñ€üm¹4n޶µñ†ôì=Àæn«W,:¹gï×5ùž„‚4¹P()ƒ Š¢©ªä>³ ¨ÅÅ-=BækJžú‹gw:`éÓµvU"Pgéˆçšȳx€ÍÞ6?Ix è¸öÎÌBÓ‘bÖ§º#G;têZÕ¾³Í5§\ññoïIxª36 ·É+û b’@«*(¯„R….§ùщ•WJÄXµlB7Ö7 jöûp €™Gq.¶Ð(ç:à”Z,'¤óúSo¿Í/¯½h2ãrÔ˜QœkäS<Àæ5È<Ùzn´oße×Îm©Mµs=••$äTUÉXUÌñB klL‘óòJ‰+–Ì%„¬lRú”®ë`Òò„NãœBMÍK§p¾bòùÏíõù$I H’$1#t—ký€¼‰D¬b?÷ˆÕH|ÕÝØçÝ|Òæå‰øÛÄ:+–GD”$¢Hï191åÙ»·Ö~ŸÕ††ºWs©MBÌŠYáꤼ¢ÝÊ|> UŽÔ«”ˆ!\5ŸCpÝÐf÷Ž0!­-ü?†È3jî jÕêÕk®¢]:y8×4]×t®ëbðvn–cÇÂ¥ù£½u®dml•Íã,}y‹%‹x±E¤\Óñ,Z57ËÑ È¾ nÄ ±o§<»r¹PÒÑÏîѳ?|½uS¼?$„|`€ptf,dž:`t掹hìn·Û†áœP u˦-éð¶–kÌ#vq²˜K¹¯#œ(¾xs2â•ö­„”——‚Î÷BIyyE3â ^3@ÙòK ÕOÅ:¾œs+N‹ ‡CÑãååüþ…ªJU–d±åŒ$‰õCëGäè¸ œe[’›º8a²ÙÍ•]3Þ²N¦­íð'1/K¦@  PlZN6å•n1V/ŸÏ9 ‚Z¿y(áÜðûs±ÉkèW €‡®ùø´asGŽPÅ%˪¢¨ªêV]ªª*²,Ë“ŒÍúp~’¨[©€Û€™1Ññ),'—j\:…-'›ÁN1ùzë&'¾ ‹†§þPjœ"¡ö>3¹ò-k@ƒÛ5gÄ0…1I’dEVUÕår¹\ªË¥ª.UVd‰I”²œ]Hι2§’Í?Ô;©5HûO Ë+GÊëë­›! 9ümB&üÖ9Éá[í÷ùü¾&û ²eÌæO¼I°©*6o݈·¼¢=Úá#ò½P~µ3#†PÐïíØùЂSÀˆyThØàN£OÀ ¹ù_üéö›Ä}(¥báÆÐ¢9½e“seN6®[ÖÐé›j–@eÛ66—®Z¹¬´´Ü[V†–\ îÈÑö¶›¬®Z¶°ßÀAEžtæäi½J‰b¿ßï¯|óÝ“Ÿÿ˜†~ZÖ0c|+ìÁggY5é¼ÒRo©×ëõzÝ·KUdYË·ç  h¨«Û¾mË“/²¹fÿƒ0sÖìêêj\/(_)«(ßûmí®ÚÑ.ÈqPIÀz•Ëb4ï"Щ_y|[Ù¶Óþ~2g}¶xÝÐA~—ËÚÜIÓu¦kb)ä꺡¸@±¼®ý*a‚,”T‰A9Ü®ÄI³Š?تâùïO9ÞªâŽWÞèðÝ~‹ö7ï6óÃWÞøûw+Š¢(>Y–$‰IŒé:§4w ѹ2o‘Ib6ÿr6µØÙG°n Ñ ñW”MÒò ÆŸùû[®×Ú·s¹Ý¯]}¥¸˜‡µè…h}èðés>mjjjllllòù}~¿_lø­ëåΕ9Î@¤°Í(eÞ ~ç¼®]å›×^]_VæÑ5±?+--;õâsß™eY2Ú¼jÐèê…ë†nìÞU–åÐnbÍ{ùAîy„pÿAPûÝ9LQuE¡>ߦË.^9a<ñ<ç\lÍÍÛyθƒËVµ©ÝmƒÂùU/¿úï‘BPF£„ÐÜô‘`<A$h (£G\uýôã­ÊÝM’ÏÐ4B€1&1Æ$Ÿ>p×´;~B"M­>möܵS&!F!TÜ'׺¸^‚ ˆ±7ýü™'¥&ŸÚÔ’$q]'” @Mu­¾aú°þ-½@`ŠžÿÙÚ¡ƒOtï*¦‰¥Ê#1¢¤EÁõ‚A‚5-INÓšq’IŒÊ9×u}ï¤óŽÌ_±ý›h½H•GHè}›ÍÃÍO°@i PÊd!Œi\æ@(¡„2FÅp!MÓ€%>8éÇ·BË™bæ A«C‡GÌ™»îÂÄ=BÆP"ÞLð“©@c- ‘„¸,ÆA • ŒQ¡U™Î„¶ ­õ@Å‚”àíªjn¾nП_JßÒ!gÆÌûlÝD$#L¼¹q5c¿CËA¼â%¼vvë†%íÑ’`“uqÕ1ûGÄ•Û)É^¡L…ç]–L!Ó:ÒÁ½ˆu]§”p^qøˆGÈî£Õ5 ÿÁ•ªÍ7;/¾ÿáwŸz4Ъ­ë:ç µµ0Ñl@®Çœï–ÂdËt;©§¢¸¢]3dؘpÅ—;Ùž±Ü¨ìÐyÿž]–ܰQ7)É,æs¹oì›SÎÓíÊlÕI1 3Ü#$´¿e_ñ“h!1š‡sîkò ½öæÈ`jtQj–KŽ½è‰§ßzâa1šÈ$­dÄÂoÓñ€ˆu¼–åñQ´,›m…ïåä· cyPDaÂ[7©Â¥5_Ÿ@#HQT9zI[6ZŠ+¥Ñvl·yælŸØ–ms£¢MÈŠâ|÷+'u&ƒíç–MÇìkTÆr#µ¯v÷‰–-öóu‹v~õòùÃGž½bÉ\áò§¿­ sÎLÚ?8Ä“sJé•/½úÊC÷¡ ! DD‚ûüì ×î=‘ ÀÛѳàÞfåžû§¿~zû͆­"”–&bo ãá5ÀyW=ÉmWÃí†%´÷6Äùž«m€“æžM–:yýœ¤.æmãz®}n””–‹YQãÕz qZ2Z^åZn¤¶W”¤1pr½¥)c_÷Ÿ"Ö¿`b¹SÒ¼‘Y¸ (Šùë0¦Ã9’§”xË¢Ù€ã uI Qžð&jÄvŸÍÓWj%Þ²’Òr_ScP ªAOˆ¯©ÑŸPnd«.¥dóá´æFªqE§œd‹}Ž+ó…·]–eË!N5M`„ç£ç-X7lpÓIÝeYVd9 I”(%#žz&ê“ ðN¤o#œúÚ[ÿxôAÆ(“ÄZwÁ}í#z„p~@Þ˜±ˆ=ÖÌx䜼•Q¼ ±¿m2PQ]¾¦F³ÊKkÖ%¦ÝâJ`¶rÃ& ëjÌ:–•¨‰“ü4ôéYgO«†Ž Ju]ŽË®ί|éÕ7y  ª~@V4Rþå×ê¾ïb€iN%/?r”}½½±w/Y’e)¸ƒÞÀùù×›ÉpxÖIÛÞ-kØyBbvð“̇´çÍÉTù7²•Éׯ¸’™±¦© •ºlÑ'€¿©É·oÏ^rí-!Ê ÎÓua¶õ:EÓ4M×4]ךÆXßwß*ÇHÛN@tÎZ¸ô“îÝdYVTE dMÓ4]Ÿ-!çÊœZ\H6ÿP_i²Ii5uf5—&ËÉO,7rGAçTæ« I’$˲Үªæ–ëŒoÍ‹K×—”7r¡£ý6™:ŸÝÜH¦Ž¥ûeI,óÅÀIb’, ùÓߎvï*bÂÆØÐßÿÂæsÆ-¸pb@Ó8ç”RY–].Õår¹Ý.UU%Iªßôù%÷ý,òv†´-À¯vŒ¸×¬•íÄ›qõ%}z••••——••z=Ëå’e‰R*æ 4ÔÕmß¶eü„‰67©««€™³fWWWãzAyŒÑâ ÿª„ÉëÜH¹v+Œº‘¥om&‡Ö$¦syï¤ µ½O9^Ù¦´Ñ8pB¨,KªªªŠ¢ºTY’(£á ”6sŸÉ$æˆÈ𽎤åœëœëA8‡æmhSæ¸@Þ+¾ ¿ÒÑ\jÅ™©"ISåFZ³%Þ§6€1&sà.NNé>Ÿ$IbOJB©$1E~ IbŒ"—–D}^ı@ËœJËUÕ´ÿX åovþü€üš VH`†`Æ^¶Ø?E,ü@)e P!”1I–uMJ cÌX(‚RÂ9W[·‰O‚‘¦Î½ ()qr?œ€ ’2Œ¡¢@0J5YâbP&F™±Lh«å‘½áð±~§:µàv‘æ-ÐZLKl~ÆAÙ$¦ë„R*q.æ‡ö%®*6&”î=gœuŠ@“®iòÿ¼m#ôkÛþJßÞb‘ ¤yçyË•@I‹0t=cÍç-)%_|ŠÕÔšŽßـΣB'ï°Zœ™‡ fŒ1Üc˜„ì@ÍŽë!‚¤É `9Ú_ Dïž'ª*Ýß™vî\°4¤ñ»„Íx'F'àpiiCÇžà<¯`øP“g(!eÞbS“Ïgók‚ ˆáù¡ÍbéB£K¸Ûúãi‘<þµÓb/÷çIçI’$Kbj9¸s¥„Јû8Tæ@I1”J=uÀ¾ÃÚ­\ÝüÅ.€Ñ-—‹‹•ž IDAT¨u40tSîuݺ¸eIQEQU‘e™1±•@gÆ ›]$É"",̘F)Ûøä£¥×ÞäÙ»¯ÅËâ˜+Ê_¿ì’Çãñ¸TÅ¥ªŠ\;Z F ÷a< ð À–/6`> HnÚaÍç÷¿~ß­Wþü—Þ£õ‰Ýí°Çýèä äÈÁÆ 'Ž»<wÛ¶­~@ÄAA€óŠÁ 8uf‚ä&b•¡@@óù|MMK^yñ´{¬øz{¼÷ÙѦÕÓ“'Hn·ªÈ.—Ú·ßÀŠV­wnÿ²uï¾"*\Dû #fнGO}A’Û]IÖ™¤0I¡LZóç?txíŸ}_yÝùMæŒ=sɘ‘]TÕ¥ªn·»¤Äóõ–ÍgŒ›0tÄè­_¬?¥gos8ÚÆ ߨì& H.˜]×%Yg’Ì$Y’”ý×Nÿjò¤>¯¼ÞóÃì»òŒÑÕÎmâšGQTE©êÐÑãñ”””ôêÛoÅÂOÇž;Qb¡å£ØŒ¼ Pd,,ÉmÄÚž’Øi^‘%EVTµöž;¿¼þÇ/¾8iõšÊM›[×îRkôxt츾uùöáÃV”RY’¯;xH–%E–+*J)÷½IóSYU †H^ x•9Æò·\‘±€ ¹Þ½YRٯȪKq¹T·Ç]ÒX^¾wÐàMM~ŸOl£ëú›Ö–•W´ò”0&1ƪ*«öíÙ¥(r·î§ø)ªð5Š b6=€x•y®Ç2°rlú$O·ÀÕ Œ;ß4ÉMŒu§@3˘$ɲ¤¨ŠOõ¹}>Ÿß¯@@çzi©·¬´´Ä[*– ÛóíŽá§QeË5}úž*ËR#hÍûUÚÚ€‰„ïë›Gf ­¢~òß9[¾ØpÚè³g½7ß4ÉñބºÎu] ¡ÄbW`®·®ð–••z½e”QÆØÑÞ²ÒRI’\ªªªª$±€ß'zÝ ¯2ÏÝx@¸Æ·lc±‹ .0ö9‰¶[¯ýyq2ZÄfoaˆ²-pLQ!Îý„+–Ìà AòÈ„¼CAQÐ0÷ƒ.†––z½^¯X‚Âív¹ÝnIb²,˲Ì3 3`CÁÆ¢)J‹Â5+qã8švŽyl¹gÄÙhp'¢šãí@ >ß.É£AÈ èæι[å·ÛãñPJ¡Š"«ª"¶±íz{ÿObʼç˜uhD}MÉÆ«|ãºy:üE§>ûÈ¡ýkW-Æ· AòÑ€iCH>zÔHUUTUJ‰,I²,Chµjçp~@J0;pÌZ;Ü{ñdZ™pÞù_rYõ‚_rÀeXX’¿}ããÒ…ÿ³`ò‰ã %Þ²¸´¼ÊçÄÝHèÉIÀ›Ÿ<8(Aòó–ÆIc1jñ±wßSŲ`½ú Œ÷þȯ¡A‚ NŒqÜ¥{Ï’’RññÈáC†Y»jq§.=Ä™cÇê¿Üìh±HçʼÅ2€fó/óÍp‹7&U ¢“ÇáO"þ6"‚„ã÷5ùüÁkW-^»jq¯>3~_“Ãû8Wæ9°˜K°7áécNÜ÷ÑîŸ@< ^Q˜:¿¯É‡Ž;),†·jiu‡NÁýeº÷è >_ã·;·‰3+—.m/¶ÙÝͲPÄ;1Ú˜´”˜œhËy‡¬X2ßÀ<³cF;ì`^å q ÒÃx@¦æwþ´˜“Ìô’ñ%\‘lñL‹™bœ`-ÈM‹biò§0N`iì'Öö7sÚè³Ú¿vÕb|µò…3œõ°LóˆÓFŸídDP¼Ê<Ïâ6ÑZ‡ ÔÞc“r;” >ø1.(^cpñ%—\V½`8À÷0_XòÙË™c u%^ë&€üô Ì«|¡zÁ‚ Î=zTQÏHal6åú:ZlÀIW µƒ…Â}’ý”ïcCqPPþ×k˜÷ñ€٠ܹ‚ÆÕ‘\£s·SJJ‚£ƒŽ> èÔ¥G°[p¬þËÍ.Xp½ mm'*Ûr±1’'šÞë<‚d¿¯ÉRÂïß«Ï@Ÿ¿Éø³¨€Éûx€Yù&àè·ü0\•ÛÜÓr±øh‹`1mD5ßÐɘ¢h¯wʇù£¡2übø¨q«–VwèÔE|ë‹ù|Æê+—.¼øòéX¾ùhÚ\æ\™“ë–õtú¦šåPVf7¯dCÍšÒÒroYCj‰×$–Mߨ>óÚÑáQD$ؼaõ®;"~uÞäK1òûECêê¶oÛ2~ÂD›;ÔÕÕÀÌY³«««q½ üÃçkìÕgàÚU‹ÓaÌÕËçk„À¤ó—~‡õˆû‘H@™ãþYî@Bƒ 3r‘,Õ+}B$ù74¸@~ÌP"Ÿ¯ÑamH¾Û‘™!’*p½ Aâ× BROž+ãç8…AÌoS\þ€¸Þ Œ ©¯²™ÙÿAŠ„t¬–€2Çx_$|¶DÚ®ÇfAö¶-ïŽskñ$½Øh›£Ù`"ˆMÛÈòÖ$0{4eŽñ$îÞ+jsIÕÛdy¡Â)€„‚p@R\Y1€ ™4 ;ÜÎÁx’3a{6XNÚœAÄLø’h6K?Áx’+-”h'œA|›bžØ'pªÙ1€ R´`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâã‚ Å ÆAŠŒ ‚/@)^0€ R¼`<A¤xÁx‚ Hñ‚ñAâ%]ñ€ö;{¼å˜¿‚ ¹‰×{tû¶-éŠx¼å%%¥˜Ë‚ ¹LZâ}ûªY½¤C§.˜¿‚ ¹ÉÊ¥ 'L¼(]ñ€ƒ†n¨Y³kçÌhAdâ…ßëú¸ç 1røˆ‘˜Ñ‚ Î@A8?A¤˜mÎ@)^€ë!‚¯ Àx‚ HñÚŒ ‚¯ Àx‚ HñÚŒ ‚¯ Àx‚ HñÚ'ñ€uk–çfJ==÷eÎ ! >E…W ˜˜N’ÛÄŒ¬Z±¤WŸ¹™ò…óÿ;~ÂÄ—9/„,ø^)`n`nÄLB4ÈÆuËú:}SÍr¨lÛÆÎ¬\Ö¦mÕI=ûålâg¿ÿÖ“/Êq™óBÈ‚OQá•ææ†M,ì?pfΚ]]]_< ]‡.ßîܖˉOBÊœB|Š ¯0707œ+sƒøâµ;¾òùs9åáIÈA™óBÈ‚OQá•ææ†seÙÄŒ8°¯mÛv¹œòð$ä Ìy!dÁ§¨ðJssù2lbÎPU—¢ª¹œòð$ä Ìy!dÁ§¨ðJssù2lbºTUu’CO·fEµý™˜?IŒð$8‘93,äÐÓÆ™?¦O¶ g{•¥Öz˜| æZåÌ® Ï ³0+J‡Ê<² ˆéBò––+ŠËÉ}Ã/‹ùC‡wŽFCýшIp(óÐÓÆm\·,…ò¤PȃGZd ?“-Îö,&*_JAÜ?ÝOIòÅɵʙ]5bI»åc:TŠó$8²™Y/hÀàæ­(ÃëŠQï£]#=‰&Áæe Ø|e´ãT ñžfimr,bV'™Ã©Ívç•ÄFר׍ÌȜߕBU›XnĬœ T˜×GËCqÆþš çF4­M0ç’Â$dz½ {;™°VM_œœ>W]BZlCÌ\ÍEÉ^„ (y™3,pšÊ.uÒIΤ°ÒŠá¶'á|NanØë·hiw’!©JBºÖ 2Û®äs-^°¸ºÑ® ÿ›n!S’c)ïª'"›¾HDñìßð ÈœaëmªV Ë1ók…%SiÓíkÊúÊiÉ'0]ñ€„Ó`6 ɘ‡˜¤c „” œ±}ÒšÕɧ(Ü]­ œŽd& svŽiв^'£¹qÒTic^™p>ge''αt$! ñ€´Úð$“±Í•r3¶OCÆBsÉg{xC!¢ÂØåJ,™ÉÈœnÍ®íðû§Ã”’:iHm¥rHIýÏÖN*K6ÝÕ»ÐöÈ‹$Þ> ¤ÈFef`I¼2gX`›ž4ÖÉt׿F¶FI9O5hòùlþeÌY‘LuO^fsÌF6sã.Þ|q QžðHQvýBé«*±cfµód¦Iæä¶l“¾rL,7œTÎd*a +v\NUnÄ¥Rû;Wæ™ÞOØ’M6Á´ÄúA)I‚E€$Gò%/dxÝŠ8ÍòU’'æA)ä/)̬”&Ö 'I°PWW׎ŽéBR—œþ©n‰=BQ|“™³+d˜LŠ8çe/¿r`ÚeLUt]ÎÅyJ)!„R*ŽS®;ò¢ªä]ÌViæÅš IˆF|óE‘•´/œ”Ø#E‰˜„ÌÈœ]!³˜À„S$ZŒÊ7;{ýÝ3]ø= „sNÑ0B e”RB„!)TyQUò«Nf±4óâ Í…$8²1]H²â’Ó<~`ßÞÚdÚÂáIÈ€ÌÙ2áËnŠ8纮k}zƒ®·{ä±VÏÿuç3¿8Ö·/!„R¡„cÔhH¦JwäEUɯ:™ÅÒÌý74G’àÈÄR*+ª"ç¨1ô+¾ˆIÈ)™óBÈ̤H×u]ס[wÂ9(ß~{Ê§× ZóøŒ’vít+ ¡„q „RF¥´¹ ™œî(¼RÈznd±4ñ u˜G6 ¦ Éïkòåª1ôûš"&!§dÎ !3“"]×5M?ܶu…hHB¸^ºjõ™“§Ô^{ÕUÓ¾=kŒêRYQY’ƒš#ù&dá•BvëdvKßP‡I0cÔÂx<ž˜ø|SÍ®;r0å&^”û2ç…H‘8¨éz ÑwÇÃO[¿%„þÖ¿`ü‰ÎeE–%&1‰1l?RBCZ#^ÝQx¥Ý:™ÝÒÄ7Ôy Ž?ÙÄì HªÐu]Ó4ŸÏ×sôÙôø Ðõ€p¾`ÿÕwߦtêèR]Š"ËŠ¬È2c’$1s2÷Çžcibiæ‰Ï@Tj ]§„:´W¿ÚÆ)…ÐäRCe*7l:ï¦;w|oâŽk~å壌Q(!Œ1J!y0öKK3I×þSkèºîóùOôè®lÛ.Táœp®Sj´ƒzDÓzÌúwç¹ó6ÜpíñcÝw0¼(‡üÊŒ™†ž£âÀÒD²YY5)Z­Á9×4½¡oߊÿ~j´ÍmF³â¥áذ_ÿ¡áŸo/¸óÖû«ªKUEQ$I’å\ 0bibiæ™ ÈÖªÙHÂ9Õt]æzà¤îB‹¥œsÑx4œÈ†â0¼û¾›üèûû÷[u×mzçŽ:×U®á¡Ei8º•±4‘mÆ j ®iºD©Þ£!À9€ÑN¤ºÞÂ{Ò ât^¹aÓ7ÝñõÅßûæG? ¥¥ÄrŒ1ÜÊ9¾,–&–fÎÙŒ ™Ôb0I]IIW¡4Lš‚·|ÕÍÄÐDÓN~÷ýnÎYã÷Ÿ;Þíq«ªªZÜÊ¡e 0ñ4‘Ø6ãHfµ×4¸Ýœ1FÒÜ<Œ¤,ÀÔº°¦¦¡¿ûÓñ×ßœï¸Ü.%¨;$1ÕXœóK‰a0€dRkpÎ)Íãæ.õûyÈK`v˜bõ!˜®ñ<4ùáÇ÷ Rs×mб=¥„2"#„1 G˜`i"ÎlÆL"¼ˆ¿c{¶¥x³j×6çÈr '¤Ýêµçýèú-7_èÊ©ÀAø”I2F˜`žci"v6ÀI<àóÍ1×T55M¤]e·/·Z¿%@LjA œëbs’i¾F AYpÎØÕÝ:•¬¯q»]¡,I’±d1æ9–fÁӷ߀Äm@ÌxÀÖ-Ÿ÷ì=sIUË‘sîóùåAƒaÑ2óÌR€*ƒ‹q‚Äð!ÕDó5‡Û´yû¦ëänÝ:–x¼^¯·¤Äíq$ec}JK³°Y¾tѰ£´öñ€¯¿úªC§®Uí;c.#©k9j~¿!œ‹§"\Örx‰y°¹¡b–žþºïM*)ñ–xKÊJKÿ¿½+“£¸î¯ªúšž™ÝÕê@ìÚì‚Ðn­ HÆa­ŒdœÃ÷%v$"¢p8ØXb%>‚µœa°"£DZ‹ÃBèD -„Økfú¨Ê5ÓÛ;×Έ½çý¾ý¤îêꪚþu¿÷êUÕ«P(‡‚Á` PUUUUé@ÀgŽlyüõœ«~¿êéiõ瞈èv<`Ô¨ªæûð)#zJjpÎÇj´B)ú¤FÊÔ¿ìð;‘”–.Ÿÿ-wÔH½å îZ®u­¨oGÍ6ÃÐuÝ[tŠÞd³xÐ[û øh¯eÅðù"zJjHã1®R¾ …þõ¥~Ù ïô‹—'OxmÊ$]׌x”RaʼnˆBR.¸m[јªúRâ3G6‹½µŸðÑ#Ÿ «‰Ï·Ï0yú¬·šÖgL™<}Vz~ïRÊ]é÷f˱ÀyrgÈX‹_jL©ÿúÆ kyiP ÉHô¾Î;-IJ}SG´úÚ©S~äq/ËòGÿÝ4f `†®)ªª(ÊŒófoÞ¸.›ë ÿÖÌ÷!Ÿ 9^•l’ÔŽëfc“tíddS×T]×€4CÁ`:›Ì·õ"zk?a]34]ÇçÛ—Hà2eëŸ7ÉÓñê½cÿ—™’8~B½¿´l<¦ßåOI¯+w†ŒmKi’®ëˆcšJG‡?ΰ 0้çà 8¡X¬ü‘ÇÿyÉ€ š¡Pèº~ôÂsÿm†¡«ª¦¨Ê”i3@7ŒŒfcA­ȧy™M¿±¬¬Qêæºù°™®B±ØeïlYþ¹†aÌ@P"ô³©0†ƒò•ì½´Ÿ°f蚆: ou@ÚÏ'¥ÛÄl<¦¤ïÚþÎØº‰»¶¿ÞAþüWS ÓÇÖMÔ4j¦|ДzKLyrÞˆÿ.¿X„Ü.ÄÏZ[!Ñu#€iÍ@@×uUUÏ™T¿ã½·Æ5Y×l ÈÑÚ±uý—Ršíå/4Cž%û³¥äÉQȉ½ ÙŠê6]&jš.–X"@¨=|ÛßJ²,ÎÆæì¦Ížp¶ÇfÀ4ýl¢¨ ôÖx@(A0(tÀþ=Û«këöïÙ.Oåqum]¡: PÍ‘±%oñÒuÝ ”EÏ8Ãüà#Á9P<›Ó Sv$Ä ¥÷»g~yÓbEQUU“½ Ã0t]?뜩{vm•NƒülÊóÒý§cë&ÊãêÚ:ï–ü3äSrJºÿX¶9G!…ê€lEå“. ,GÓt¹‹€dÓØÿ!Ȧ ÄϦ®›ªªâPpžhkkBÆhŠ )Ç>Ü~Aumÿoèý@B7|_· „âÊÐcBÈÅtãÊŸñú:!w9.ä½×`¿d̨áºÍOÉ¹Ó *ö«ÿÌnóH ÃcóÎß¿Ji—r(€llº®ÛlUä/Ì1^Ð@Gʧ˜¿ðº)Ý€T¯ª TÆ›WF9ò¤Ï>ó«ñQÿ‡ÿÙ6mÊßÜ}ﳿµÇqñÎß¾õm©<¦^ïãrÒs¦Øø=ÒToçའ³“MOH63ÜÛ•M«ºÚ¶mɦ몮Ë)¥‰Afì äãáé¥ñ¢—º_Ž>IšBÈ.ê±ò²ÿøÎUÑòòë–?9âЧ)òÂ?ãpÖÝ÷>úðñ¸Çg_|Ù›MÜHyÑ#*9Ý'“O ‚lí)´ŠêÚº=»¶Ž;kÒÛ+#|×Ï&ÂÏæÈO?ËÁfÃò§~wÇu]Çãj2x´d@žè­ñMÃ1á¾Æ‰¤8èÓýõ}6PyjMóG{sÿ@Ɣ؈‘Äuc²[\ܹùFJi˜ÐçnøÁõ·/ÍèO B¸BÔòå+kv»Aös§L?/E–elCîÖ¦\Íø3”!G{rp‘þTsî%6´7ǽ¹‰ËVEúo¤il6]òWÿ7ë|Íîø×ll BJ”d“»\š”* ŒË[bôÖúMÓ5ÍÀ§Ü·Œ'œrøPóˆ“*jNϙǔtÿíé¥u›!=Æ]ÎCÃå¤rà¼môèÕ?úá]7/Y)£”2ÆØ°ŠëžH 2,×H—Ѥ5¯íþÚלšš×Ö¼‡BÁ0tM;eLͧH7!»mmÊ£Èøè2”Á_i¶3æñ_í–YbŽ·"[]ÙªHI÷ŽÓÙì(+¸®ÇfÓ5;ý—+ÒÙô¦zl:®p¹ „2ÆT©°CóƒŠCï­Ð4]EQß"ýš’ñX~½~?z8=]&úOˆÈ?CÊÕÌ/•®»®KJJ„®‘¸u›ç.,`YϬ|zÞü«¼l«_z±eÑâ’}ûRẠ 7.—¢Dˆ©·ÞöÖ¯VX–å8®Ë¹ ”€¢ªÇ­Íq©Ûg›;Cž%û³¥çI¹Z6lDÆÚ³½!òYl¶öd«"GÕòôð§Û–%Ù<ðýkO{ò©çkkTÛBPÆ…)L9>÷Š–7Þl¦D—óŽ¿ùàC«ïû]ƒf IDATi ›”)Þ$Q9úùm[šêΞ¶ýÝ?ÀðŠa9²îܱcÜY“ÌPŸ2¢!'Ú¶ºjÁ·Üb ¯èèˆÆ­¸ë8„¦( SEçóÏg\~…ÿÞô=Ê·^>gÿÂ…‘ÒH¤¤$ ›f@7 ¹! Ž>@(ùâøQd³ÑÑÖúÇu«ÏŸyAŽ<Ÿ9 ϼ°fýúõ…¨š¦âx¢G!cQ¦´¯\Y‹ÇbQEÕlÛæœ'|ÀŠÂ'9xÛO¹ën!„´S¶)'BŒqÕž™3-s¬e;Žë „2Åë œ˜àÈ8¿eP–Žlö«ç ½7`[–mÅñ-Gô¬±Æ¸ëàŒMU(!@)eŒJ°‚QÒÚ0¯cec`÷nÏiáˆgÿÛ½kXF@Á]Gp×u:]ÉI ïßÁá ÿ¿EÞ€Ö–/ÛB6û¶eA!ã]|A%%ÝøyöïÝ;êä*[ˆw%Ôç¶íp.Ý¿@)!”2*}Áq]Û²¢Ÿº`Á÷ÀzÞ3½›f_¸íÊËKÂáŒ;oº®)ŠB)ËgGr!<)!|è´¥ÄðÅ®é²Ùߘ}ñ¥å/x?áêššêš[ˆÞð ŸÍž=æ30mÛ±,«cꌶm»Cû?!ü•ȼòüŸÖþñÙ;o”FÂáp84MS7t-gØ92!¸ëÚqËÚ¹kä†Á7ß6Þߣ´´8á’öÚê– çœ6…ÖþSUÆS£É¥Œ®D6ûùd𙦉ÂÑ¿öcŠÖ) „\×±m;·:>þäÜyßIÜèûD=bóÅí˜7·$‡Òjš¦fò!xŠs7zü‹ÊÇžöë§s·ö£¹sv/\`”–ªr S.ferÇs†®!ds £££#³/ã!ˆìð[‚þ›)4aùUŽÞsãkþ ',< â(N}õõõS­ê1¶­ÛŽ­»A0¥³»ï•Ì…pm»ìɧßÿP>í<õùU§>¿êýï]}`Á<]×5¡IG2¥„A£éÙ ÀxAˆAæapÕ„3¸½áÊöU¯÷ì%$á2H߯üŠG–¯ºg©ã8Üå‚ À(ScÉÝH’Naµ·WÍ_¨oßQP“NÿÏ_üßM÷Ý‘J¥TUJ¨Ê˜gŸâ@1²9ht@¡Ž$¢ï‡Ü¨Äœ0ºõ§wÖÏ]¼Óc åœSJ„(9rôÌg_ØÙpeBâîrn;šªvÎ,äB8_¶Œ¹t®røóhRdßþó¯½áµ¦—•™fÀ0 C×5]SEÚ¸ñ!²9htn€øàœ %L>b÷¢8ãþ‡¤¼ðÏ/ôü “׬}oʤ¶ê1”R铿\p.…B„×Ìýö‰‰ ‰Àñã,¾å¥û~b[a;踎븮®iªªRÊ(åØ@6‡ÀñÄ`0©‚1?¾¼òòöU/÷} ¶a¡ äÊGŸxî®;,K·mÛu¡s r2NùÇ›µƒ§V3 Ÿ•0‰ÿß9oÙƒ›–Ü(}܊„ªccœõ?›éä6$ù=ÐÐÔåzQ±‰ãˆÁêCP•ÄÔ]Ü7é›ß!€Ñu2‰<.9zìì—^ÙsÕ< ÀU˜B)éxóÐú72Ô±  >ÐØyVõî{MÛ¶[ÎÖTs (% cŒ)”¢G¨_ÙôP °2ÙÅËnì’V„®;îîz¿mÜ™”2J)¡ Š¢P*Pô›é à ÀýÍ žåŸæ*6»è¹pD‚Ãq\Û¶¹àú—_tõµ6§Ð³"÷^ÓíP5•R"„°5mì¯~›¹è&€ù™Ò=‘q`@¦Ýq¦½¾n]åh!¤íÈǶm]ýjq.‘ͯĦÄ"Ÿ8%™Ø°2y|°HÙD%b°B~2¥ª*ÚÈÛþþz¿ÁèmJÕ >ðƒï¯Ÿó J™'n8wG¬]W@} Iy‘]À_¾ûž‹Çã–eÙ¶m»Žër³Ñ¯l.N¤h÷ùÉ¿¦"eS€¥K—â+ˆ¼ö£Ü…Æq[1UTœ|ä Éù$/óT]rø˜z¼U×u]×5MÓ4Åã³zZHlÞФD"†aÈg‰UPŒá°p¿±¹(y°  `Qr¼g@c±³IfÍš…ob¸¤ø0c±5o¿-Ó«êw«ªšu"ÇñX”Òp4úê–-yUPésÌÏ>TÄôÓNk EñË îO6W&x›*Ó†…sr:äÙ$·ÔA <Ë1G£Q¶bÅð[oýdÞ¼÷®¹Æv!cLÓ4Ó4MÓ ƒ@@UÕO7o>{Μ¼*8”‹îï>ûÃ7Ý4|Ò¤òòòòòò²²²p8lš¦¦iØè76s 9ÿAñ±©à;‡ô† !Ò*TU•sÞqõÕ;Ï9Ç=º4µåVæ”jš&ûò@ °xeR4æ¥ÀAг”ʈ¾fsz×ÓeM•¾Qâ*€†¬]!Ï&êÄP ·«•ß'?>‹©ªê8޼¤ªªç>V…b”–v_´îàâ¼ÛcèK‚¡¾f³*‹ÛgS†EÈ&êÄÒ~TEžJ뺞@QUUºtå~¶áQ£º/÷ç>Мoch$‚Œ 6|Bßoì7!›¨C·àK©Á9÷NýÓ98çfEE7%.꺤(oÐ`tEŠ‘‹è6!Í꟞ýR1±‰#Tˆ!h<ªªªiš‘D Ðu=e^e,6o^7:@¢°kòd¹1Š ®ë6Ó ÿ ¹xÙD€‚‚CÚ‰Š¢ÈÉãR^H¿÷%SJ\}w6Ìœ)ëò¦-â¬Ðþg3E©Kà ð45›è B 5Á!cé&ã%œ8Ñ­¬dÍÍ=Õ h)+³ÇŒÑ“ÞjÏa]þdsSÒä¯ؘ4ù| àþ¢fûˆ¡lBúMEOp€oâGÉp¿ó€Æê]¹p¡ªuÂï¯@Ðolú¬ï:×kS®é^EÂ&êD‘Š)5Â3ft\xaêå<<ÅéØ_Wgq†ßs-g.¢èg6›æg ·,WØâa× #ŠB×uljÅb­--£Î;O=pà«øÅ°aÿuÛm¡p8 E"‘ÒÒÒH$RRRbš¦aRv èg6²tŠ›Mì ŠÚxT%`šW¯¶GŒ8á¢Ú"‘ß,Ybƒ@@Æ0«X¥åˆ€Âf£ïÙD€(r‘áŸzhVTì{ýõŽ3Ï<¢>«¬\qÇFy¹iš¡P( ƒAi0¦Œ"âcG6âÓC_¢hÒ‡`Ûv<ïèèhkm ýâ'?ôPþ…lœ3çÝK.‘“ÖƒÁ`8‡ÃRv˜¦)§±K¿êdu1à‡ fY–ŒRÙÞÞ~ü“O*}´²±›ù@ï^pÁÆË.Ó#]×=©áYŽþuLè B6Q 2¤g?F£Q);Ú[ZbÛ¶U65•mÙùðC­­- «ª:4vìκ:ëÔSM“ëW¥Ôð‡2öD†·ªŸ3²‰:¸>OpX–‹Åb±X4%aY–ã8ŽãÈÐÁžëY®\ÕuÝ‹cìM"ôDzÍ\'Œ(jx‘нSohQš„–eå–Rpx¡ŒSV¡@6Q ƒCp¤¨‘ëƒlÛ¶mÛq¹‹ˆ¼ÅË£v…XƒC ›è B Ÿ'AÚ†nRXx"#±¥IWáâýëÉ F6Q ƒUpx>åtxKJøš”86¨MÔÄP~!"Ó3:2n0‚@6Q ƒ[vxÄ/2ü‚#%€%ÙD€@ Mñ‘ùûAÑl¢@ Ä ®`D ˆâÅÿÜbèÑAef}IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig14.png0100664000212600000240000002530310322727434015546 0ustar mikeuser‰PNG  IHDR×"$¹< pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF*9IDATxÚb¼ráÃ(£`Œ‚9Ĥ´õÍGÃbŒ‚Q0 è $@±@8W/ž ‘Q0 FÁ( ? 8Ë,d„ÁÈ"0`Á†è lŒX Æf ¶Ã9a!g ì ä rl'ä ,^Åá ,Jq8ƒ•8†& 5ˆC- ÂP&…¶£:ÝŸ¸¸®ŸBÛñæLg¨’(ãʳØÝIœƒ f^Û‰s™¶ÞLŸý&„@L£Ñ(£`  ÑRxŒ‚Q0 Ðh)< FÁ( h´£`Œ‚Ä‚Æÿz{*2—W=H~º1Y_3ÿõ‰È"‚:ÈÜ·—û€¤ˆ^\äõ…^ )fPBO¿Ý; Z¢lW,x爫êØ8÷£`Œ‚Áˆ«(ZlŽïóMP̧‘‹2¯ ÚùŒ Œï¯Nxe‚N!kD ŠS…ôw5*Û7ÀŠà†Ñ(£` *@,ô±¹-üê|7\\¨ H¾8Û‘2-’ÏNw k—1¯„0Ÿhƒ ÊYÕɇÇZà" 6µØ ⃠À‚øÎAô"øÖþ:8[ݹHÞØSƒ¬@Óµ¸¶« .¨ãÑa\Þ^¬XÏ»H^ÜZ1ðùôü&¯üzÎm,6òïMs£`Œd@ØÇ…¿ÜšDŸoN‹|º1ùÓI¯O¢Ð¾Wç{€¤¸a©¸Á‹`IãrIHùÛ W,mV D@Æ““íð"XÖ¢Z΄àE°¼u‚5¨ü}p¤Í:%ØpÄ]p¬â€R«96©9}s/¢×piÑt™|}w5DDË­MÛ„€ì+;@Nº.‚u=;t½¤Ö÷é2ðyêÂæR¸Ô¹M%£©mŒ‚Q€ ˆðˆ¯z.dP€1¿f>„ýá*ttXP§¾Âš<ðül'‘*ŸµO!¥0<<Ú‚G½²]ýÝC Q`û47"·…ñä¶0ApqK¦ °-<@C2£`Œ‚A ˆ¨ ð 0¨D6‡‘Å!ãÂ`JÝl £í<Á²Uð‰GÇ[!#¶0æv”‚<.Œ&q\C·öÕ,‚! á«; ÇÀ¶0>׌‚Q0 F !¶R XËZTFÛ(£`Ø€ÂÞþr :"Œ6ÁZ¦–GdÓ÷Í¥>CT¿.(fXòê|ÏKØ„Q™„qÙ‹³]È#R¦8Æ"¦æ,«Ífy«š‡ÇZG$mˆdPul6‡ñ·‚!@Ë­ ØFkëxv\Ù^6A§ïÝuqkòˆ„¡o÷h"£`àÄxå m}ó«OŽžæÃ@îi>—·Êb=ïÎÑÓ|FOóa=Ígô4¢OóY³aLje´"" 7„õ¼:GÇ€GÁ(d€-…ɺžhuö(£` hô‰Q0 FÁ(H@£¥ð(£` $ Ĉĩ5q£Á1 FÁ0ÿq°GÁÀ€B”Â?ÿ²ŽÇ(£`а3ÿ†0Q ÿùóg4\FÁ(£€^¥0”@ˆR˜…et½Ä(£`Ð @Û„(yÙØØFCeŒ‚Q0 èþBKa€B”¿~ý –Q0 FÁ( €HÐè¸ð(£` d) @£ã£`Œ‚Q0 :"@£ã£`Œ‚Q06. @£ã£`Œ‚Q0>"@£ã£`Œ‚Q0¥0@‘6.|øðáѰ£`ŒüÀÖÖ–UÐ €"a\xïÞ½£á; FÁ(øÁ¦M›BBB(‚ ±ã§N’——ÿþýûhøŽ‚Q0 F~`aa±fÍ???ø¸åøHÂG* ²põÀ6&¤€ ½»}ûޤ¤›°rP«+áê X¸z`Ó" Ô)‚mmŸe$¤¤Æ4 Øž*ßðf;ÄÀªªó°¢YÍF"]8 FÁ(¸‘…*@‘9. )s!%¼Ì54| '!tðF%¬ø†5™oƒKºûhâhIý-pYüØ­ªº„ÏBd!$lÛ&ƒfD y("¬3àm^"]ñÝè0÷(£€ ²P ò× «ª~‚ô뇴Iá¥ðáÃ’@ø0¼ÿþâ7„±…7N±ZWY÷$ÛÚÎÀeácßá$².¤ ãA’\ÈË;zþÜ(£€ r\ €È?_Ø„”M«W+!·!$hNLVJ~6Á i¶…GÁ(‘ãÂDþùÂðe6)Ï/x›ÈOÐñ£©„¬ ` zË\ý—/,ÀÖ+lk3HL¼ e†Ë¾xÁ ´HÂu‘j]hhønt¿Æ(£€@ä9Dþ¸0Z{Þfφ!K@G$¼¼ž@É®óç…€ ªª2ÁQäAÍœ7O H®Z¥l} b4[ ²Ù2AB¸hã£`Œ‚Q€ ˆ,Tˆüqaä%Àh¥0½}»¦ÊÐÐû‡KÛÈóæ©DØpÎË»ŠÕм¼ku»@ÓàÂ'%ݾpAhÚáÃ’žž’AUÕÈK†I¤ºpŒ‚Q0 p"Ç…ˆ yÀ4m‚ ­Æ¥rҤ㞞àƒ¶¶Ï'O>ŸXÃóç‚,Aƒ”°È‹…!¦…†Þ…˜$“’nb.&êÂQ0 FÁ(À ˆ,TˆñÊ…ÚúæW/žüú“qçÎ=ÙrŒ‚Q0 ‚?^¿~ÝËË nöÿk6ì8pà@‘v¾ð(£`Œ"‘ç Ðèù£`Œ‚Q@@ä¸0@‘¿^xŒ‚Q0 F@äza€"½ð(£`Œ<€ÈõÂ4:.< FÁ(4DŽ Ðè¸ð(£`Ð9. @£ã£`Œ‚Q@@ä¸0@Ž ‚Q0 FM‘ãÂ4:.< FÁ(4DŽ Ðè¸ð(£`Ð9. @£ã£`Œ‚Q@@ä¸0@Ž ‚Q0 FM‘ãÂ4:.< FÁ(4DŽ âdK6¼€+===‰‘ůŒn€ºÎpOQè¬ÚÐSÈVãríœç ƒ'­Ž‚! ˆ,TˆjãÂÀôº}ûv‰_%AC ¸§†e¨ˆ—‰Iã`ˆ FNåð¶rºGn€ «„”òxÔ4„WajÄÌ–øE°º³ºB6«S‘ÍAvš4qòÌÇÕÒ$Æ\^ÃïT<¶cZյć9ñ‰³ LÐ^Z1JdÈbøC O NLˆµX'2‘àò5ÁÑ6’íh£{„"Ç…ˆ:ãÂðô„ÜÆ¡zï’Fc3š§ˆÏ<¸”‘êÎÁ¦žr£hçB%x@nÞ"'ûÑ‘¢Q€ ˆ,Th0®&©'8LAjLá„ þ¾6åþ¥uxE@0ÌɈ…óèt߈DŽ Æ…±¥Q’ÖÉn(!ÛK|¿͵x²1©ÓD†­›K#¡9F0ÌIJzTxŠÚѦñˆDŽ uÆ…©Ûœ¤sÖ%²l£€øÕ( D ¥ãÂXÓ£Ãd¯ ¥i7 ô\·K-çѡ֤©TI$DŽ{¬¹‰·kttbØ" U€Èqa¬£uh%81ÝjŸ"Ǫ‘øá’† qÙˆfA6µÌÇZRà"ƒ‚¼Š™ ‹¨›Hˆq‘>ÅcãhkzX"Ç…ˆñÊ…ÚúæW/žüú“†sçÎ òóóvÁU#þ&3AgJTJÜF•ÇZÄàŸÃ¤|Ùþqa\þ"Æj2œG/§&0®²˜>b"Ç…ˆñÊ…ÚúæW/žüú“†sçÎ òóóö•FGFÁ(ÀNœ8,ÝÈ+=ÑšÀtp-°,†Ä d µãÊÑ?~¼~ýº——íÜìÿ×lØqàÀ€bBÂÀF“×(£€>­`úÁp‹à£T7ŸÈB €~\x„´‚G£` ª"˜1‘…*@1!a࣠…2 ‡Q0 p)‚1 bê" U€B”Âð‚ÑT2 FÁ( ]Cx Š`4«©Û&²P ÑqáQ0 FÁ ‹$íq*ÄDª4ãÂð³SGÂVZ´^èàåa¹4•nÇXSÅ‘£G`•±ZKY¨½ï±“T£³s#ŒFô‹@+ˆ!kרµ‚˜ÈõÂDs$ˆ<ç³ LðäV‚GÜ< —<§’¡˜`ø`=4×I‰$êKIŒäbla úT_2’ .ÓèéY‚ñ>\À¦]Cx°µÍ!+ˆ)Dž#@T8G‚øsNqñˆ¿ëDÞ1»Ot%x$+Ïo%õ¬ O‰¥Üåd&©Ž';Ù ¸g‰‘átö°oÓ¢9Lä9Dåqa 7‰"7àéƒÂcv êÀ³zÑö›R+KàÚ/K;¡‹ZAJÏRîÚÁöhC˜ê#²P *Œ “}+yƒª!^/…GN@•³iF¬g©x¹'åùkð=lÂTo9. @Ô&ïV²»ØTo°à2Ÿì£‡IÍcô9#×x%ñ%­"˜ºž¥âYÏÃéìá׆;òÑa"Ç…h¬¦u²!«FÔ" ª{vˆ†ò؃Ðyƒ°!L]‡Y¨Æ…©ÁÈ•0ž ™Š}L‚ÇøÒí|^:ôjñë%Ø¢Ê1̓$ ʳÃéìQ@$ ²P Z yÎ)ÁóRˆ>š–Ô] •Kª¿(™ÚÂì3Rý\f’ô’˜$­K†½Ä$ú{–vYƒ†q6-:4=XêN¥dh˜Èqa€=_xt¸`ŒœéÔ”IÌùÂÀ¢Šûå°–é”/2ƒ=ŒÇ(j/ @£÷΂Q0 P±F›è£Êõð•”"×  òÆhÊÖÃèž×Q0XÓá`N™¸N‚,o ÃåžBõ/´ zŸ#1 †P*£ép\Ëݨ¸ ™@ä¸0@Qg½ð(£`Œ4@äza€£`Œš"Ç…h€ï#u¹"©ëyñEð!Ê-–§ýB÷Œ®{ƒY¨Ð¦ÛʰÑaßQ0 F, r\ €¨¾0Á3Ðt@0ÖsfÉ8z•T{qµ¹ð<È€±…ŸÈÓcñ/Ø$þðe<ƒf2Ù.Ó.¢Iµ ÿÄdæË@ûRF… ¾¾ëÝ`˜šc z\ €¨¾0®ö&f:ÆuÜ0‘êÈ=z•T{‰÷I…µ§°QOäáËä Ý"šT»ðoy'û0_âŽWä³gÏR¸dxË–->>>˜1¤¦p™å‹…ˆ Aq¾ðîïã?™$×âß;KÐ|2‡øÃy0äiw¸óhQ8€mXª˜)jëQ5öÎQÅ‘Dª4<Ç…GÔ\ 4<›Ãð†0å#ÎDŽ õÏM¯Ce4€B»†SGÝ1ç CüD´AX ¹Ð‚Zç îíµ>ïpZ1 Cs­í9ÌÂĪD…ó…iÑO9`…=:š¨FÀµùm`D-£ˆ<_ €¨³^x4“PXâ {‡ÓŠ´Q0šÃƒjt˜º a¢Ç…1"ñ/M1£`ŒÚµ=|\~ÑÍ$²P *Œ ‚Q0 FÙÍa†A³jŠ»ŸI*Th€Ï£`ŒÄhÃ`,‚¤B €˜‡0ð€Ñ´2 FÁ(–ã´‹ ©P ÑqáQ0 FÁ — sAŒ\Sý` " U€£`ŒÐ‚˜¦E0ñ…*@Ž ‚Q0 cALÓ²n>íŠ`â U€¡÷΂Q0 gA ¹>ƒ¼¹™FëˆÑ‚iwB1‘ë…hxž/< FÁ(Ò-bøUF“Ze1¼}MÓ&0‘…*¼ Ñó…GÁ(C QLaYŒVþÒ¡f ú|a€¢Â9£`Œ‚Q@ÓF1%eñ€”¿Dª°s$ht\xŒ‚Q0ôÊbÀU"£ÍìÑ¿ü%¦P…HÐè¸ð(£`ˆ•Å€V"£´]t.‰)Tá¥0@Ž ‚Q0 †RY h%2Aõˆ ÑqáQ0 FÁÐ.‘- r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xŒ‚Q0àÌ™3ƒÖm&&&T1‡Èqa€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ€FFF2týÿÿHøŽÈqa€£` *å)y€Èqa€£`Œš"Ç…qûç/¼`ø§§Aq\jˆ7™<Fž€…é ÛѨDª4:.< †*ؾ}Çh '€uŒøÿÿÿxÆŽ)”¥µˆ ‘>. o°@²4Zk ÎÊ­€ˆ#«G“ÂA3™T)ÌÒÙÁhŽÁ/÷5š™p<*‰wA'!‡-Ö@ÆïH²íÂ,øÃÍXõb5¿ú‘ p‹ø‹KJdi ˆ =.ŒYŽà)4q•;ž‹p9’q¬¥'~ÿ’¶D†'r D¤¥dÛE0XðBL@‘Êà 9. @#w\˜Œ”¼Üoø 7‚ }R¥¨èZxE‚ÖüÇÔ‹¦’$WïÊ›‡¤ÚEÓ„Aªø(f€ÈB €FÇ…iÛ¸¦ó¸ 1RÄw‡OÇ™¼À$i~Œà0Å(¤"Ç…ht½ðpnÔc9eÀ6âŒ<ðµY:;Îd7i‘=;Únd"Ç…ht½ðˆh˜‚Q0صNÌÌ€Èqa€ÑãÂÔíáâŽ@nc¢µ7É“"Õ‘ä-aƪ’ WQØ©'©:!f8ÙŽ$ÛpêÈ(*€ÈB €FÇ…qfÌ){bVªÑ¿©‹6·†Vˆdc-^ñ«$ÕUXDÅÎ>Uì"ÕÌú’xO®T!€Èqa€b¼rá„¶¾ùÕ‹'þeÅ£áÔ©S‚‚‚üüü£üQ?ŽJmxò‰'GBÔŸ={vûöíX¥>~üxýúu???¼¥ðï5v8p €FÇ…GÁ(Ô/žFèqa€¡ç S~@ÄhÈŒ² ×€û0 \ÍÈ<_ €Fè¸ðh¿{Œ‚Q@k@ä¸0@®£`Œš"× Ðè¸ð(£`Ð9. @£÷΂Q0 FM‘ãÂ4º^xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €FÇ…GÁ(£€&€Èqa€£`Œš"Ç…ht\xàt°åÅ‹£®Q®!€Èqa€ø2ð… [q?ꪡˆ ÑqáQ€/[ZZÒÁ.vvö“G]5Ô]5¢‘ãÂ4:.< pf` `ñ¨«†º«F r\ €FÇ…GNÀÁÁ¡¨¨d<þœÖvýøñƒxW}B`ÔU´pÕÈDŽ Ðè¸ð(À 899á™yðäa «aÉ2êªÑR9. @£ã£'àçç§O)üáÃ’\EŸ’eÔU4rÕÈDŽ ÐÈöôô’Û·o'R|°9øË—/‰‰‰@ÆäÉ“GãFÁ(„€Èqa€Fƒ°üÅ ªªªF‹àQ0 3 r\ €FÇ… 49>)ïTUUÑ:ïqä H3¹-ŒÙê –Œ@h ­­-A¤iÈàùóçÀجº'))‰‡‡¿!˜ma ÕCe\Om1êªQ@ r\ €˜‡0ð€ÑÅ £p/‘A‹ÅÏŸ?Ï›7RRcZ[XBBh 4„ “€.ú@6°! $!5Ê(£€€ÈB €F× ãÀ2 ØÆ6!%%%%¤›vüI-ÔBÁÒ~7xI2 Ò’’À²ØðšÑ…Ç ¤È²‡DÈÎ6ݨ«FI€ÈõÂ4ÒÏ‘@îÍa&h`É[È% \¹ûláÂgÛð4c‘§Ýàãd›Ô5þ|ˆJ<†ÀÊ2*¶–c4‚Q@;@äza€bBÂÀFf Ë,`Ñ^@^©†¼Î ( ”"Xh2€—¯ÁËqˆ ”˜fÀ5æÒ74C‡§GHŒ‚Q@7@d¡ @#w½0®f š¸-`mD£µ£±jGæ G\cÁ¸LÃï`´Â!ñ dŒ¶‚GÁ( 5 r½0@Ž 0$VGŒ‚Q0l‘ãÂ4z¾ððÀ2dŒb´£€ž€Èqa€]/<üÁèàÃ(ˆ\/ @£çHŒœàÇïß¿g ýѱ$™ÿ èãýQWÑÂU#9. @£ã£ xñâ…Áèc#1—区j¨»j¤"Ç…hô‰Q@ ª <ꪡ,Tht\x |6&)ºj¨»jä"Ç…ht\xÈÆƒ0ƒºj¨»j„"Ç…ht\xŒ‚Q0 hˆ Ñõ£`Œ‚Q@@äza€£`Œš"Ç…ht\xŒ‚Q0 hˆ ÑqáQ0 FÁ(  r\ €HVPP ÙQ0 FÁ(À>|øpýúu"Ç…ˆ„qa`ÌÏÏ?¾£`Œ‚Q@ r\ €ˆ633Û¿?°9<²£`Œ‚Q€8p ,,Œ*èˆ@‘0.lccsäÈ‘Œñ(£`à111„ÁÆ…ˆ´õÂf`0Ä£`Œ‚Q€SœÂG$ht½ð(£` €—Â4º^xŒ‚Q0 @G$ht½ð(£` € Ðè9£`Œ‚Q0>"@£ã£`Œ‚Q0¥0@Ž ‚Q0 FÁ€èˆ@Ž ‚Q0 FÁ@ظ0@Ž ‚Q0 FÁøˆ@Ž ‚Q0 FÁ@–Â4:.< FÁƒÃ‡EgÛÚÚoÒ>p #4:.< FÁ@‚½{÷ E—oÚ´)$$d{æ ÑqáQ0  œ:uJ †¢ã,Xàçç7\=HëÀHÐè¸ð( nܸ1tÝO°Üê¤]àÀKa€£` ÁÍ›7¿ÿ>tÝO°Üê¤eà@G$ht\xŒ‚/^¼ºî'Xn uÒ0p`ãÂ4:.< FÁ@v0ºî'Xn uÒ.pà#4:.< FÁ@0 ÜOOOdîöíÛ‘¥¹xÉË Ê=ˆì5ª¸™HK)·‹Èqa€£` €€'''…†8888pš˜êÉïß¿'¦Ü ÐƒhN¥ŠË‰”8›¸ÀŽHÐè¸ð(C`-˜€"¸ ,êd4-70Šæ/ Y Y\ ­Ç#ˆ&NóÀ Ðè¸ð(#½È¦пÜ@+m±z +›  ÕÇÈqa€£`´& `¹Ç/½IŸa "Ç…ht\xŒ‚TS½ ðryDl\ €FÇ…GÁ(HÀÉÉ9DY€l-#Xn ]Ò:pà#4:.< FÁ·…)ßÁ< àçÏŸ Ä#1D=HëÀ—Â4:.< FÁ@‚¡{äÄÙË‘y¦q‘ ÑqáQ0 ¸ëJ•qáêt,7†®i8°qa€£` Á÷ï߇hSrƒÁrcèzÖ‘ ÑqáQ0  8qBAAa(:þÀAAAøË!íAZ¼ ÑqáQ0 ˜™™:uêÁƒCÎåaaaÃÛƒ´èˆ@Ž ‚Q0ÀÀ F=8âl\ €FÇ…GÁ(£`|D €FÇ…GÁ(£` Ka€£`Œ‚Ð €£`Œ‚°qa€£`Œ‚ð €£`Œ‚,…ht\xŒ‚Q0 @G$ht\xŒ‚Q0 ÀÆ…ht\xŒ‚Q0 ÀG$ˆIè÷h¸Œ‚Q0 F@JáÆÆÆÑ€£`Œ‚ÄHêÝ¥£`Œ‚Q0 ¨ 7Ä=>òQIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig51.png0100664000212600000240000003063410322727434015552 0ustar mikeuser‰PNG  IHDR€Ä&Ž “ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF1IDATxÚb¼ráÃ(£`Œ‚Q0 èr *ˆHi뛆Å(£`Œ‚Q@ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ(tÄ4£`Œ‚Q0 Fý@± sÌBQh##ˆ³`T*cÂÄÙŒ(аšÂˆf #ºHŠ Æ¦• Ld7¡ë$Ê…Ø #èBla„\¤»ůèÅ0ì!ˈ/‘Yx\ˆn"º«Hp!^—v!¾TJÐ…¨Ãíĺ[zÍG£ùh4‘âB”5(Û 8 €X°ª(‹™$¸T²À\1¸T×’W£Í–Q0 FÁ(£€B@,XkßúzH22Nkÿ?C#C ˆÉµ$k4ìFÁ(£` BiÊO¼bGGÇýû÷“¤>­k¶@t!€ÂÞvâu.°þÿÈn“àÚþchäRí ‚Q0 FÁ(Œ€È•Åk6ì O=%ºà €°TÀÀªRãBúÁ@6Š,Bªbиô°‘~|¢ ³¬M»£`Œ‚Q0Ž.)Zœ™@X*`.•¬ÆÆi`dt@©}ÁCÑp šow¦A承ޞ çQËÁjÙ§ë“€$¿f-îå¹n )aT†&þüL'œ-eZ§ö•µ¨FZ @}pk_Twj†poî­’.-ä™vyŠ_ô½»ÈvØ™õE@Ò4¨4û‚Q0 FÙ57r%)‚ ˆ‡x°¢Eïû‚¥ëá\È>b8àV͆ÔÁ¸jß’&å:Wí;P@ݹ™ì{—·ƒü¢çk[0RÔr0 ìc¤iÓcŒ‚Q0 †ÀZeâéÃuÕD;1µ/ 9ÌÚáàÁƒ¨Ur.½_nNAæòiäÂÙÁý`­| ùáÚD¸¸ N|wÔÒ-|{¹_X·èí¥>dsDõ‹!Œ×zà‚b†¥pö‹s Ž „q.‡==ÕÌ•1¯Bê·Ê‚ÇŸo… Ê[ÕÉGAÝV›ÚûGšmêînB6DÉ®þî!hsDÅ&w +jŽõ7÷ÕBj_äðõÝ5pZn Û¯íªB‰~vb’ÎÅ-ø‚†Îo.’†~=ç6•ù÷œÛ @cÿ^ yvC¤öEîŸ^W7Áy4ÓŽ‚Q0 FknHŒ§"G„ý ðD/V?ChÌ«£q^õ\ 2>Ý@”ÑüšyüHµ¯€v 6¨ê}e\Í»Ë(á"zE"àª÷õÅ^xí+fP"fª]^”0*ÃSû´Y¥´y%ñäd\4 «}嬪!UïÃcˆ!âGšQê]Û:%[P-{ïP£²]½2¸ê½s&*ª@䪘oí¯Ct|šµ/²97ö€,Òtm"pÕ‹˜„Övo"P\î¨ÄôÅ¥må­}·‚Ä`˜Ëa7ƒ@j_`èºÛûiRëzu@¦má=`ö€QOð¡ö€‘O± ›‚>¶2w´£`Œäy_äù`< €ðÍ;Ø; öþ‚Y@®}‰…ƒ û÷BzÀÆ}d×ÐÀ:XC:Á£`Œ‚Q0ø{¥p@‹ Eh«®ÐÖdᄳv‚¿1L×´ °C°ð A÷!}¹5×Bh>ͼO×'Áaчk‘‡ !ë°Qƒ’×z‡ ÅJèå¹nÌEXðmHÏNw³ZβúÑñÖGÇ ë°@3Á¤WS*ÀNðmÔQh5§¦[ûêà‹°àâ.-7öÔ\ß ú/Â"`%òø3èywû¼úÞ]·–!Aúv“älÓ þÓë O­ƒÆ‚yð`ß÷äš|´uX£+°FÁ(#§Â&`V´ÄTóÄT¤­o9Îó2†owĺ¼è›€!ý`È>`¨q£‡Ècqáè!ò£‡È^Æ0šFóý.cˆ4å'þŒ*`]¶ÿ~’Ôâ$Cä2ˆ@±à×9oòÛi °¾0Ø;8D‹£`Œ‚Q0 Àuú#µÔS¢ ˆ…EÈ}\ €×¾hÝßQ0 FÁ(£`À££#MÕS¢  ñJ»–¼jhpÀS1‚Q0 FÁ(0 IªGkÜQ0 FÁ(£€* €P*àSkâFCdŒ‚Q0LÁìQ0 JLá|ò(£`Œ‚Q0 púúzä…ÓÄ‚)=F£`Œ‚Q0 FuÚ‚@@Xæ€‰ÜØ4’Áš ;Ð2#6¨ÛM£`Œ‚‘ˆe4F% $Àc4FÁ(£€ @L¸$´õÍhtV˜ *t!Ð4 ²Iú¸Ö†Ó?IÐÓ;Ã2ÑŽ‚Q0@áëާ Fx@½9Í”T’Hó‰<š•º¬£YJªáÄø¿hqXü(£`°€‚ˆÞ2—ø±eòj_’êàÿÿ la¤ê…”ÀªÉFÆÆFbo÷$É \#‚êÖ‚Q0 ! ¦Ñ ðÚ²B?‚JëÚ©–mÄ\FHu«}a  ›HÈ»#…];ЭÛU£`Œ‚Áh´<U.QÅ4x ©Þà•fÙÕ.x ¬ Á;’W.0W+B`u³Ò9¦æÆ9¤Úzé ¤' ©ƒi€îG齟š$FÁ(€bíÐŒ‚Q0 FÁ(ô„RN·Œ‚Q0 FÁ(ôÄ4£`Œ‚Q0 Fý@aY„EëƒâFûÙ#ŒÎ‚Q0 F2¨¯¯G®ˆ³ö¥u9ØNáôh‡B‚Q0 FÁS&t ‰ ý«ÆÆÆF`)Œé”Q0BÀþýûGaP8::Ât58]5ƒ0«W€Ý< EB£€l@á-Ÿ#ÊU£18¨@.£`Œ‚Q0 á0Ú£çÖŽ‚Q0 FÁ(”€"ÜÖ¸JΣ`Œ‚‘°Þt> Fµ@±—(51„DN£ðêSdŒ’ ;ª§xr#*E ÚH§ijÇd„Æ`þD (ü¾rÙ €X(ŒW̦0ÊGÁhY9 FÁhj§: ÃFÌB~´X . Êãs”ftÜfP%›¡ ¥ s!l4q¬EÚP Öa̶ã(®) ­ÓÆIjÇ#B¼ðŒY’ÔÇÚã"ÆUTDü㯸º‚ƒmt €¨° Ó'£¥Ø( n9g£Õ¯hâø›ÌXÕ`Ë#$EaFú@ÞáIíxDHòI‘WP}¹‚‡›ƒl ¿ ‰þ4@±Ð( „Q0Ô{B£­ÆQ€?aŒ:³F$f.–Š6â©MHµh°UIÄB•ø@)¬m–Q0 M™£€`7t4%rW‘_˜SQˆ‰ŒÅâ@Û¡„)2 F‘͸ÑÏ(Míƒ9%“´Zbæ¯AU1ÐèQ”£`0–JñC)x†aÐÌ'ÕäQ0Ô;µxRšÝ‚¦v¬æà÷ò*Õ?íA1WxáÊÈø³9Vw@£ð(¼-S\ËIð0ˆ4 ÿB•Q0BRÁ”@»„A’K0—Ÿò f<ù« Áu^T 7‚îêÙ €FÏ‚£`Œ‚Q0 Ðhx €_~BÐÐÐ@]GÁhºö®¢Vv£nîÞ9$ÀM €F+àQ@oàèè8£`„¤«ÑÔ>Vx*`€­€G½Áèå£`Œ‚0o; ©€G‹àžìFÁ(£`ÐTÀÀnøh‰< FÁ(£`„€bí©Œ‚A±Š×××Î(£`ø€ƒ¥öuppÀ?pà##ãÿÿÿGƒhŒ‚Q0Ì@¡TÀ£{9FÕ°ÿJpdXûbvs<¬}GpŒ‚Q0\@±`v8FeP L™ÐA¼b`O—Ȥ8Ú'#Œ&þát:0:!'g644888¹-M @ÿÁ ¥©Žþã@õ_oO%‡ùŸ–9u!'04‡–)@²¡´·¿¡Xƒéx:„¨A#GÁ(ÀS"ae¸«VqL.f ¨r 6€YÛ#¥­o$\³a°Ôsq:P] omkâ–šºpÜ204â¹KìÛi¢žWGÛ4C£Œ¦­i`º‚§.xÃÜ„‚õ€ÁÕ-)`ê„t‚Õ3jGy´0 ˆï,¶Ž#š{0‡Ëñp6&c´<Èry) ˆ Gâ`hm†vH€µ/4Baµ/CÝFÆVL]ܪ٣A<´¤ñhˆk³±µ™ñØácŒŒV()³®¥¥‰ÁÉÑ .°oÿ>ää ,͹T²à*¬5P–Š5VÓèéL3É3¹'Jžvò<5xzÀ¸ú™ @^&M|‰Ij·^"–ËéŒu cðw+‰Ÿm—¢ €pín±²µBïû61ÔÉýû€u0°êÅZš{ÀÀš€•I½ºt=«OJ,<=`È`¬Ý_  .)2º;£¹}0`[µOƒ­ö"Þ=£õîÄ„·üB 8æèéCHèâ,ÜÕ°j#4A4È28‰K/.Ó°Öm”;Ó ¬‰µ/fUÇ¥BZiŽÙ#XÇÐ:DˆÎ¥º3°V·¸ÔÀ«Rbªd‚•ôÀÖ¾õ`À€±»BàúúúÑ£` 30Z²FÇà„R_½xr4DFÁ(à Œ–l£Ñ18@A‚Q0 FÁ(Ônll ˆQ0 FÁ(£€ž €FCaŒ‚Q0 FÁ( 30‰ACWÙ‹IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig52.png0100664000212600000240000005616310322727434015560 0ustar mikeuser‰PNG  IHDR€Ä&Ž “ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF[éIDATxÚb¼ráÃ(£`Œ‚Q0 èr *ˆHi뛆Å(£`Œ‚Q@ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ(tÄ4£`Œ‚Q0 Fý@± sÌBQh##ˆ³`T*cÂÄÙŒ(аšÂˆf #ºHŠ Æ¦• Ld7¡ë$Ê…Ø #èBla„\¤»ůèÅ0ì!ˈ/‘Yx\ˆn"º«Hp!^—v!¾TJÐ…¨Ãíĺ[zÍG£ùh4‘âB”5(Û 8 €X°ª(‹™$¸T²À\1¸T×’W£Í–Q0 FÁ(£€B@,XkßúzH22Nkÿ?C#C ˆÉµ$k4ìFÁ(£` BiÊO¼bGGÇýû÷“¤>­k¶@t!€ÂÞvâu.°þÿÈn“àÚþchäRí ‚Q0 FÁ(Œ€È•Åk6ì O=%ºà €°TÀÀªRãBúÁ@6Š,Bªbиô°‘~|¢ ³¬M»£`Œ‚Q0Ž.)Zœ™@X*`.•¬ÆÆi`dt@©}ÁCÑp šow¦A承ޞ çQËÁjÙ§ë“€$¿f-îå¹n )aT†&þüL'œ-eZ§ö•µ¨FZ @}pk_Twj†poî­’.-ä™vyŠ_ô½»ÈvØ™õE@Ò4¨4û‚Q0 FÙ57r%)‚ ˆ‡x°¢Eïû‚¥ëá\È>b8àV͆ÔÁ¸jß’&å:Wí;P@ݹ™ì{—·ƒü¢çk[0RÔr0 ìc¤iÓcŒ‚Q0 †ÀZeâéÃuÕD;1µ/ 9ÌÚáàÁƒ¨Ur.½_nNAæòiäÂÙÁý`­| ùáÚD¸¸ N|wÔÒ-|{¹_X·èí¥>dsDõ‹!Œ×zà‚b†¥pö‹s Ž „q.‡==ÕÌ•1¯Bê·Ê‚ÇŸo… Ê[ÕÉGAÝV›ÚûGšmêînB6DÉ®þî!hsDÅ&w +jŽõ7÷ÕBj_äðõÝ5pZn Û¯íªB‰~vb’ÎÅ-ø‚†Îo.’†~=ç6•ù÷œÛ @cÿ^ yvC¤öEîŸ^W7Áy4ÓŽ‚Q0 FknHŒ§"G„ý ðD/V?ChÌ«£q^õ\ 2>Ý@”ÑüšyüHµ¯€v 6¨ê}e\Í»Ë(á"zE"àª÷õÅ^xí+fP"fª]^”0*ÃSû´Y¥´y%ñäd\4 «}嬪!UïÃcˆ!âGšQê]Û:%[P-{ïP£²]½2¸ê½s&*ª@䪘oí¯Ct|šµ/²97ö€,Òtm"pÕ‹˜„Övo"P\î¨ÄôÅ¥må­}·‚Ä`˜Ëa7ƒ@j_`èºÛûiRëzu@¦má=`ö€QOð¡ö€‘O± ›‚>¶2w´£`Œäy_äù`< €ðÍ;Ø; öþ‚Y@®}‰…ƒ û÷BzÀÆ}d×ÐÀ:XC:Á£`Œ‚Q0ø{¥p@‹ Eh«®ÐÖdᄳv‚¿1L×´ °C°ð A÷!}¹5×Bh>ͼO×'Áaчk‘‡ !ë°Qƒ’×z‡ ÅJèå¹nÌEXðmHÏNw³ZβúÑñÖGÇ ë°@3Á¤WS*ÀNðmÔQh5§¦[ûêà‹°àâ.-7öÔ\ß ú/Â"`%òø3èywû¼úÞ]·–!Aúv“älÓ þÓë O­ƒÆ‚yð`ß÷äš|´uX£+°FÁ(#§Â&`V´ÄTóÄT¤­o9Îó2†owĺ¼è›€!ý`È>`¨q£‡Ècqáè!ò£‡È^Æ0šFóý.cˆ4å'þŒ*`]¶ÿ~’Ôâ$Cä2ˆ@±à×9oòÛi °¾0Ø;8D‹£`Œ‚Q0 Àuú#µÔS¢ ˆ…EÈ}\ €×¾hÝßQ0 FÁ(£`À££#MÕS¢  ñJ»–¼jhpÀS1‚Q0 FÁ(0 IªGkÜQ0 FÁ(£€* €P*àSkâFCdŒ‚Q0LÁìQ0 JLá|ò(£`Œ‚Q0 púúzä…ÓÄ‚)=F£`Œ‚Q0 FuÚ‚@@Xæ€‰ÜØ4’Áš ;Ð2#6¨Û£‰sŒ‚‘ˆe4F% $Àc4FÁ(£€ @L¸$´õÍhtV˜ *t!Ð4 ²Iú¸p„DÄ€$ÎÑX£€l@øzÀ££XD‚P@ïCN3%•¤¿SñŸòJðìV"‰¥îQïh–’j81áŒÇ_´8¶~Œ‚Q4:= (-èÉ«})¬ƒ±Þp¢c°ÌÀ7*þÿ?öý'ŒŒŒÄ\†K;²9Ô$‰½g”$+pìöQݺQ0 FÐh< à=xs$äîg`=BlÉ; µïŒÓÈÁUr%¬ê€Þ&êÆÆ†šo€Õ¾ˆb!-*EHÛµACåÙ}`u>ºb`Œd@£ðTuT,=©R¨Az“Hw‹0âéeâé«%°À‚ä• d×ÁÚ×ÁÁ­  Õ4ÆFÆÿõÿ‘;¯DF¸f€yR×S7Àk_H§ÒZJ«;¸îGé½SŽ€ìäJ­Ar´+ÓFÇØGÁ€€b¢n‘'Ÿ K‘wá"©¦]Ô-G()Ô¨Pö‚a«ûÉèÑ’¤’®à^û"_ŽI ÖÁ°øOp„^×Bª[Î¥JBÊGˆÚXO`ì!¤6`¤G]×9 FÓ€ØJÏVçàiá‚JÕÿ49…#|üÜü,‚D2àécVHÀZÁëlÛÿaÝ\¬u0©õ1°Þ…T½ð:˜½Œ´©‘ÛÀx`d†…Îh< FÕ† áwÈ#xðÚ˜²bLÔ­8ñØ…‹AëÚk?’ Õø‹-ŠÇ¢‘k_Ð`,lü“pLë0¬Îc„Ô¸™ZÌ:¾‹ÈÚ2ò íþÖ“Ü0‚n zMŒì÷5, À4êƒg|é·.}t>xŒ  ÎcÖgh\´ªÂÆ!µ¿ ш¦«]Ó÷ÅÚ ¦FO‡²B Qû }lu0þðØL*ÚX.Ú”-yë° µ/lµr} K<äxŸŒÚ>à aÀ t”$0´¾u}}=¤²‡Ô¾@6ÕSï€tIGëàQ0 h-ÂÂÚïÄZ[]@ÁêbPý ©q(ÚŠh’zÀ˜Ó¨˜ƒÃd¸ÍXH½ûŸâ!}Ä ,¤ÕXDtÇ« ‘a¿š+@[\ÝØÈH»Úu›vÇPØžÀïÍÑÃFÁHÄB­lŒ\à ÎúlªãaÕí¦õ(ÛƒgÞ—¢0Ö©YªœÅAIíK^½‹ `CÐèÊë`´0Ð"ø²g¥a`Dè胧‡.bŸ<­}GÁ(  ªõ€ÑÆ{¶¢Å߀È"+£C'¹&Ϣ̅Kðšâ ¥–…ECIÔ±hÒzÀX—+“7 ïøR«&uí’¥õ˜nC«ƒ©Õ¢]9 5lUòk [Å€U>´Î§Åèôhí; F ‡ !µœ ç‹4t¨•¶+ ­ƒ)ë©Ð¬DCôtu{ÀXë`2zÀpÿSi%9ÚhòúÁ´«Ñ"—F›V‘ó}†ŽFkßQ0 à €X¨•±r ŠãY¥EI¶Çj¦Ô²ŽºåÝ•hÿÉ…&8 ©ƒ[Xã’Qõb=iy˜ò&Zi5ñÇ“‘y]^`÷w°Î1:B; F­@ᬀi~òì0£5„î¦]¥28«+Rçh¥; F=@ᬀG©! •€º“vuÄdRIzºp„Dýçh¬‚Q@6 Ñ!èQ@> õ…¸£`Œ‚Q0Œ@¡WÀ£ªD‚Ñ€b½Öf4qŽ‚Q0 (Ä2Ú¡£`Œ‚Q0 è¥ä£`Œ‚Q0 èˆi4FÁ(£`Œú€Â² óÄê‚Ñ~öˆ£sÆ£`Œ‚‘ êëë‘k@€bÁ¬}i]AÔÐQ0ڡУ`Œ‚Q0BÀ” h"ÄBÿª±±±X c:eŒ°ÿþÑ@ 5ptt çQ0 h Hª.s *0htð(ì w àCý£á< FM‘3¶¸vÐh< FÁ(£` @w €WÀhüž; FÁ(£`Pˆð6$` ©táŒQ0 FÁHXïù£`P ÙÙž9 BV€&2 Fþ…–~FÄváŒ?oŽþ(tÄBvN†ô†á 8Sd4”GÁ($`4oŽ‚Q@ëf.ñ9 €X(ÌÆX›Ì£èQ@FŠÂL¸ð„oí!+F«N0Sæ( ²¼À¬›±†ùhX‚Q@Ln"¾ *¬‚Æ´i4¯Žu×ÐÆ]F]hÈ£=æQ0 ÈkËŸ_ˆ…ºÖcö`F3í( »LüPÊè  …ýÝQ0 Fµj_â«?€¢´†³4¦È(¶çV£)Ôþ.< FÁ( n@,d˜ŽfÓèô( n'˜ZÕö(£` f@£'a‚!_ºP11¸‚Q0 hh´ƒ¢ ÈFæâaŒ"à ÖP áQ0 ¨h´£`Œ‚Q0 ȸnY Ðh< À¯ë£á< FÁ”ßn@£ð( 7ptt „Ñp£`¨’nµÇz0@VÀ£€Þ`ô¢øQ0 FÁ0W/ž¤ð>`€˜ x´iÉt4FÁ(£å ¨€Cµ*ã ÉјÃ– XûV×BêZP‚nij©©«—v Í 5Í öÿÚÑT> ¨ð×¾@’áÙ%ìhYLüá6³£`x€bÁÑÀdhiUÀÀtÎÈX&Aµ/Ôýg¬kýÿ´+< (Xë]FÆp½ ' ÷‡àå2¤†F#1 nˆ „‹¬}$ôn‘= oÐÀƒ .ˆ'ܰ†$¦zäÖ²áÈjíÅê¼Ñ˜Ã– <ò ªq!ý`´¤Û„M­ °qé¡8"œEGÁ`ëƒjßÿ Œ°ØihVÁ„Ì #»˜¥<®^2f5€)2©žE %¬*²Ä„*5h"£1; †= &¬9¤µ™áØácHíKHÇ·Xû:9:Áê„<ÝCþ8u›ó$9à?ÐÈäy P+†bZû6«]¤µÐ ÈépùšÔȺ¡G9 #¬ÈN¥”ÇÅhÌŽ‚a×>à+[+ô¾oC Ü¿XõîÛ¿O&ضçÀ:€ {)wíÐméc™ñÖ¼õ Œà­G Œô‰¯ÑA‘ÁÒ¨£1; ? &¼AÀ1XÇBBg‘رCæ¢ÉBp—^\¦ÑȘ¶à1É$õð; ­OÐRºõ`(샄€5/bü™Nåæˆ- ÉN ´KBԋѪw f@Ø{À5@ØãÔÁSp+rÇXû"H‘ðOÒ -Áª—à€)EÐøŠÖåÅ?¯‰ÕaÄô¤1 l³bà37À›Ïá$Rí‹­Œ¹î3ôðÔhZˆÑ;Ìú¯xüK0…`jGI<áŒ'.PXÆì(Q €pEù¿ö?°ë ZùÜįƒ!_ ÖÄÀÚ— p‚uÌ`è QÝx‹bªA[ J’;O\__#ëÑk߆øZh¬ŽÇº-ÄðæˆÊð¸1a ’’e †6ñ†Æì( €˜p־͌ǎc¨…–Ûh ˆ‚&¦8€Z¨§€/ã¢õ|å¶ _»4H† ÿcðAlŒ˜µïèm£`Œ‚áße V6Vˆ½¿ ­Ž/œOä4IµíÔ]€Õ§¤Ž'£«ÚÕ¡öööÀºÖÁi÷/¨öE;Ÿ’êC£€ò°¢¿ÞјCÎEX ³® µoø,D½ ¯}q•õ ¸i‘{`p6‘u ¦z¬ý9üÀo ‘Ùm)¦3H2y}š¿(q¦!d˜9 u0Z·˜’ÚwŒ‚Q0 - |=`Ð@4c+¼ûËy>vø$qíD"iÚÏSPÄ‚R ¿¥$Í<é5"æ5‰÷&ñ¾´ÝýÑ.Î(£`„€b!Ô©ªF*¡]^K[«ãàjxŒ*TºÈÇMâ? iŒ‚Q0 †  &b¡-‚×¾5u5£åã( °öm€,´%³zX½ÛD ƒ{ºzŒ‚Q0 (ÄB¼ÒêÚêÑÂQ@õÚ—\k߃ÂÒU=¤†WÉ£`Œ‚Q0ü@‘P766ŽÖ¸£€vµ/d¯´‘×@óæÝèøö`“Á tvU¬MÏC p}=ÉÝðQGÔ1j ?ÐÅ Ú·TƒÅÀÇt@ øUH ÷ÓÁÙ ØÉb à(àa\œa (ü!€õT5´ˆÀª—.‚¶Ó4Žp]ªˆÕIÄÛBÅz”êÉo´zœ €Hë“TqÕ#_bÀ¢v45Œ‚ÿà´ÄØÐÚ÷ëpZ3;ÄÀÊ·¾éì ,°oŒ|!®+l©é¼á[ûRÅkäU4Š,²CÏ·•ˆ&Æ4Ìú—8Öã¦ñœD+f‰Üʈ–xðŒ¯àqÁô ®ú«u=5šž‡ ‚õ(%õ1ZâÀ_ûâo‡Ž‚áZûÂÒ¤¦9pý B pÈ*ñ”ãK\e=îK/FlšÄZmÐ4H½n„ÐÅ*xbëÜÁ»(ö›ñ¤2‚Ž GÓóPD¸Œµ¢ÅS1c&[°ââ2ühÊ)#A@Ç¢!âHµ/ñÆhÉBv]KÅ ›ÔN0®*O—‘˜æ>1^¦°ÑßF\5I­Ì+ÎF“ëpÄDsˆ®ªÑÆÁФ^mKP æ5º£` ýúzŒp¥Û>ÿ¥öO“ÜbÀvOó(Ìíü—…àW@Éý%d¼ã²‘*Ÿ BŸk`F=@Ѽn€!’šá¸4ÚH#~‘Ñô:˜dׯ¶Y ز,DíKjo˜òy¸ÖpXëü'·?=ŒÕ|ROSÁ¼*›ÔUQ;¦T©}‰ @âG h:>1 ' &"“Öþ%d ™Ä(IAE)@«d0À5ˆMÒhI ÌÑ!îAàU/r ^lU¾ ZCj_´mHXIb®šÀ¼HcdÖÁxÈú’Šã È ⹋…øûK°ªÄ ‚á€ÿnR/>Ájž;ZFÓóðÄBdâÀ*™F&‰ik_H}LÉn`<ëZGÁP¬ŒÁ-5DOÈnh@¯}ˆ¸®—Áû*Ðx.¥u0ñ­^bœ’;Wð‹ãšF%& ™ Á ›ô»aHºL—u¤Þ=32ÓóÄB C!;€`]<€KŠnÍÿÑ”7ë`ðò+Èv#FÆF`í lŸ98½‹pŒ‚Q0\@ÑjÚÁ @«[©Pû3ö2:>3¨ûaàñÄÀ”„×¾ £µï é"”ÛV#8FÁˆD¸LÂŽ#˜zH-‹«†L“”ÚH½û—šÑîï ¬ƒÑç!FO)£`Œ @*`R§i!`AtaÎ=IÈÚ×ÑZp`£×m‚Q0 F *ÏCV8ߥw—k´@„•nc#ò65´cF£lŒ‚Q0\@Qyø?`4ÐGríÛ¾‘v 0¸Þm"Ò·Ž‚Q0 FÁÄD;HE†÷~°‚Ñ8fµ/Ò•À°f\=AêàQ0 FÁ(® €Xè`IÉïë–®µ/dy<44 ®ù‚aŸêèãAª\Q0•£`Ø€\=`‡G‚Êd`ÞCÃ4ÀŸ!µ/hõ0ÚÿƒV0Ô#Ÿ‘ãípoü‡œ]EQ]%ñ¦FÖ(9 €èQÙ†µLÁ.¬ e€gÇz2NäÇ´b  —Q€þ××C¶!A¶§A×î12446€ "ð²H£Óÿ±’ÈM7\"£€Ø¨ à¢Ñ]ô£` Z@´‚&é"aä. ¤ÈŨA=#"jJ"ï‚%©ÎÆzBZÁ_¿ ô¹luPö´ WÃ.ÕÁ õ UÑ  gDÛSÃF¢îlÇwxnDq‡ëÖXʯ ÇTõ²?4Ⱦ‹~4*GÁ0DÃ9`’.&‚mvºÕaX!òîk2.xƵ/Àê``i€]¡…¸”àmHh—baÁ#¸n/ÇÓ;¶чDíKÞ8Ä\AOd6$2«ŸeFfTŽ‚áˆ‰>Ùže‘g\$ñEæ ²KpÉâ¹-˜“ˆh®Âåþa0ZSÐZ"ÞÐ@ê„Ä\XIybMTC7ȸ‚žni3R×%Ã,*GÁPÄ4HJ`Ò···?xð€½½V\P4ÚØÇZ"ã*ñ—ì¸r/™Ï!ÕX§0‡e¹ð¿¾ó2`p¥ êü¢Õ¾”Oÿ3Pé~h´yeªÜ»>´*lúL«£,-®¦áQ9  ÚVÀh Váâh ƒw|6I´¶9áòfË×õbXƒ¿,žhÂe/ÁpÊQ0 @1Ñ'Ï]Ã8 qiЬ0¬q :œO5„9Ø‹<ÏŠ«±<À‹k^–ÓBÈóǘ­rä}¸Ü? ë`‡ й^ø•Àhµï(£` '@4‚&ûh`},|Á}_hµ¬}"¸ª""oó&8Ÿ„KA•XÅñåá!Ò„a€q ½‰ÇP^ûyUûŽØn…kša€öhGÁ`D« ˜Ä‹„¡…0ü4``¶wá3Á‹GÁ«ƒAI=éŒÌ(£`D€¢Çe À®0þú­• ¬†Õí¤õ± 3H¬ÔGÁИãÿ£a2 FÁ(® €ÝmH àGÈò+Dy´öÆ•nc#òoüç‚Q0 FÁ°4Hï†ÔÁ…Ð@×î#`ýíδKÚ·v'd8Z![Æë!$£`Œ‚QÄxå m}ó«O9k6ìVxû÷ïpgJÓ˜±ƒÇjøí&X¥ˆwçá2>^ÀÚdÄê$’ü‹+¦ˆô;žCõG×&ˆi°•˜U6ìŠvh']é;«(´1gd.š,š2´ªŽ¼±nL«‰1Í…¸´ù9`Xí ð‹AÎŽv¤+ Þ†„ç†ÇQ€Ö"!æÄc¬W)ãº(«±hçÂb½®Ͻœ¸ÜOð^B4)<÷“b:«8èãb"”<ÿb:ß±zSU®Œö €X‹Ѻ¿Ð·ÔûE? ÞÆß³„³‘+-â;͸ªy¬$A«Ñ¬Cn1àê c5pÈ÷€Ð cÑжVžJk·ut<™¦££¤)Ö>{ðXkú¡5AŒ0Ï·ÇÕ&Æ"Ê[o42|Ä€b¡gRƒÇäl,8‰R¯6`/¥°œD ™&o–¦I†ÓÀ4pÌ366@Ýá ‹Fïò"A“”ö0;p£`@ºÝÔ*µ±¶ºpc‰F/ô~T 4‹èsëHÄBϤxî÷sG#54@V@7ÀªßäÅ8xzÀ D/È¢EMLõña¬ Á†tʃ¬mF¾ ­+Œ|5!fo˜˜ÂƒëôçH®‡®Ë‡è-Dzm ëØ~ïS+–GÆ¡: Aw°Ã`ßèÿ‚:7€_50`vŒð¯O¦i]…<æŒgÑ2Õ­Æ5^=ä€ì¬o”C¿=Ýzð9h¥ÑX®ÆUÄy{#þ‹ ‡÷,2þ™r´_b®òDnÁà7–*‹i5®{H1í¥ü~OªÜJ’Z‡+"Hu-1U8þ'þ‚×Q€ hðÌCWG‹Zø®Ðÿà³á«bÐ bx³ZÂ3·Š&‹KMœø «Õ¸ƒk]²½ø ÒFëõ‚W¼£×¾¸ÆÙˆ¼\’¤;"‡kLŒ¯É¾ÊÏP*&ן˜—r£’l_ 1ð8 ;©ë\˲ˆ‰2‚˜0!Òê•§(4Hï–¹È÷ÃÛSh[› sÀ¸ªFüÛ{°ÖÊX¹Ä˜Oª]Ä8ù C½/¿‚Ìõ¯FÞr6 3Ýp2 F €†Ò}ÀÈ¢õ€G ê=`È"¬xÜ7@Ixí Í¢ôï“Q‰ªzwŸÝA;¯¶œÐà½M ÚXÈ=à‘sà 9 =eŒž= FÁ( €ÝYÐ~Ï €µ3ì~»3íõvíH§9`äqŽÑ3™GÁ(#=®#$ئºÆQ0Hþë¡I°±iów®Ó”FÁ(£`0—ox®ëˆCÐdW¢DjD[í5Zg¥ äRÂ襄ŒŒ àz¡à­hÿGëàQ0 FÁp4ï&I#PƒƒC}}œ$ÛºQ00µ/Ò•ÀqÈ.pH5< FÁ(ÃÐÐîCj_{{‡ƒÀI†˜uðh·xð×¾ð5ð`Q:-ËíaÓ:H½ö—"]H‰£`ÐРXMd¯«!àÅYÿÁ+´$ÚŠ- ™xr5œMð%JÊ…Q€  ˜~ô 8 AwÃ( PÌëÒpÜ ‡yvüh4Ñ­’¦uhÀ{$GÁ°4{À¤_$̈ÜÆ$±Ü¼Cz11šÕ© {a§N‚ãˆtÞèxp¤‹)ÁçaAUÈÅ.Ú=¦£Dó(4!Lö~åQ0  A=L$À_ûIR×ð=0XIÌM2ÈÜÑ-4¤5ôJ`ØeÀàîo}#t¬àü\hjuž0#häì}Bó&Ö\ \Y¦@;g—J‚1‚éB\™Žl+FÁ( 3 A=L$ÀZï‚×ÓBúUpõ€±c¢5«‰¹wvô&ZJj_€_D¾z\ž»qE%¡‹Wq«;Œ#‘Š·âÌÏr"xµ-‘1B0‡ŽðHƒÐ íã:b2‰µ ª}ÿ7€U£ˆ²ƒX‹Às©.MUDŒF´–…ˆ#Õ¾Ä× hQ‰| þÎЈ+6:å1BPïh¤‚Á h0ž„…Vt"—h cíCkßFð½ÂHŽƒƒ­} ¯F³:á°ª¯wÀ8Ü6^ûRqkºÛ $FˆÉt£‘> ' a8 ¶Üïm×Ð ô® G39q±À¬ƒ ÃÑk_R{ãc”®•nâêfºÑHƒ Ð í“0Ö<ƒža²ß IW‹£é¼›òûºG€W½Èu0ø:Âz{{{xŒv%01‹ãð_°ŠKÙHˆ;üÉ›ŠÎh]RüS<ÄÇVsFÜôQ0˜@ º}À¤ö˜ÁŠÀ·%ÁI¤Úok®Ãu£5I·XR+cP…‹ÔÓ²Ðk_bb—ÁëÐGHÜy<ž”çªy‚áIŒJbbÙ^<>ôQ0È@ ºUФ*ÆÑ²®G¯}Å9ŽµÐ£`PÔÁÀþn¤l¿ØÁáàè•À£`Œ‚á hÈŸyq!øDCFÌÚ÷¶éF ;£€ü·´m¢( ¯}èVûŽF+­ÃT“ép#ýh¤‚4nCBàČȥ;Pd´/58ëàzƒ£`Œ‚Q0¼@ ù0&`ddDÞqéÖ¾CàÚÿ= FÁ(ÃÐ0é£^êÎ0z ÿPªtGãnŒ‚Q0"@ ‡0äb»†Hñ]+»a÷ºÿíK æÚw4îFÁ(#РÞLŒÆAr©ûh=Aví;àq7 FÁ(hhßLá¥îÄ_.‹¬žŒAÑÑ¡Tbj_’⎦!?b㋞'æâ“Ñ(Ãп¸äKÝ‘kVú\.;šÕ©w¸n¶-OIª{ˆI™˜·KVi£`PРž&8®û¿¾²•rrad.‘T‚ƒkq”KݱކDj“ÿå¦hw c^_:º¾w@ân`&c‚7Œ^z? F­@ ù³ iq©;1'B£•eÈzáiÌ5Do?a•õãŽàeìXï“Çló ˦®N*ÁC›±¶q‰ÈȶãgŒFñ( €õ}ÀhýHŒû€1/u‡\fº ‰|')—ºÖ”Rû’wðA¾­mî×­ÀxDF©9OPÓ4G£x '@ƒú>`´,Í€ypºF /uÇ“íÑš£I‡R@›¸íÖW¹ΠFnfFñ(~ €†ö}Àô¼Ô}ôNï!w£ÑDÿ>1ƒz4ŠGÁ°4¨ç€ f0 /u§âå²£)‰T@vÜy]üh¤àJ±T+Z51±<Å£`¨€Ú÷#_ê~vþ3äRwp9-»1¯•Ŭàit¹,®‹KGïÆÁ m÷6\×¼˘Bó,Ö¤Žu~`PÃEÐvÒ“ÈxZT£Q< † ¡}0ZNä¥î£`VÆ$Åž¦ 1ÎßÀ®ý`b†š6Oñ›Cy Ù>âQ0t@ «Ûà—ºƒ›·ÐkeGkß¡QÆÝ(£`„€ÚgAªKÝGiý°Š»Ñ®‚ˆÖöQ0 è h0Γ¤óRwÈÔ°‡®4šyŒÁõ£3 FÁ( €Fï£`Œ‚Q0 Ðï3ÀïÕi€Þ«ÃÈØ®w!ÊÖ\W9  MóÓôÔÒQ0 FÁ(T €†|ϲj~Íû࣠xíëàà`oïpðàIv[mŒ‚Q0 † Ñû€!µ5áû€‰¼Äm]ûI†˜ `´J£` K@£÷uðhŸ•#ÿÁÑ‚ Ñ¢ |åõ4B‡n°éÈ¡Ńß;Èç«Ð?Á…!ÛÌÁœhô>`ŠR‘—ã:±’˜+Þ†}™Žœ$…Ɇ¤kvFN-Käm››Q5ŽÌ@QÑ;xn¤QûspW'ÏöM4z0¶zãg¬Ç>㺠ó2`¬Ÿa^¬†õ‚áá ÇŸ±’šO|HŽ0GNcÄœE5°ö¡9•’8"Éãƒß;ƒ' †€ºŽ Ñû€‰-z0E(o7aí3Œ$€µÞedl¶– $tTƒÄæ01}¬w¶x·Å ž0Ä_×¢)žñÌ Nˆ1"~”ÿZVÅåq’±põ>‰w0.ÆÆšþ‰‰ü€Ùá&Þkm!ÉU¤^MÉÈ"=K€½˜ M'*¶ˆá]íÛí"ûß>Œ Ê’—~ÈèÞÞÓNLNäø rõ@üˆ1Ô aš@p M ô÷ž¢‰øXÃã#\9‹¤ÑA¬­"Rýަ ­!BR¤`:«vÚ€½x°”k#m,kZû6ÛNHitF´žzÿ½=£€ì¡KÌK9I a´Ê˜ÔÆ%þáÁ!7€D]ï¿4‰ÈÍ ”û‹ø'ÊÓµº°´Ú$Ðè}ÀDÝŒ)BÒeÀXoF6Í–; n¯û½ à4Ó0ÚÆ 1ÞHâúØB0ö©;K¡iôœ Ñû€ °ñ4ˆ¼ ˜ôë„GlÔÛ­^‡…CÃbêàÑÃΈ/YpÝl?¤C­ŽY— ­BÐ;T/1Ï„ ñ}z¬;H©›°±nL¥nB Ñû€GÁ€pK«ÔR:'‘j_r{Àh7ÃãÉ]#°Ýƒ¹–‡¼º óì‚Uu‹x<‡ç Õ^X‡9GH7ÐÍ;乊 -ø}„5g3}F|ÚÀ“–(ñ>.Oa:žŠqJ  áp4¢†Ý)ûÿ¿=üV;‡ƒ[ûŽöÌpµ´päÉzôÚ´º¤@&8g‰kÿ@Ȱ©ƒÉà!fÀ­¼Ã¯žø"\qDêñ>Bc1¸ESïd‘±@-õ¸l§ÜXbl¡<$‰÷U@Þ< ²&@à“D1kß°¹F @äPºF©`.b£€@£÷‚A€­%ðL#r« (oE‘=T8¶t®AÎÃ,êGxJ~Þ Ñû€GÁ «ƒGãkŒ‚Q0@ ê}ÀDj„܉91 ~ù #c#ìJàÑFÁ(£` :@£÷‚hm¬Ñ›GÁ(#Ðè}ÀØ—nb][U=š‚R£9®Ñ®&{¹À(£` 9@#ú>`<3‘µ&ÖÝÙ£³ÎäÕ¾àƒ8`Fôh•< FÁ(– €õ*h‚5d 4cC#ìàIpUÌZÿ ´±õ>``ßëaXÈ>ã?ËóT\æŒ&,b8:þƒãA¢ÅøÎ«Ñ ¥ P“g#¦®ÑD2 †" Ñû€±÷kG7ŒÒ­OÛã$1K^‘}GªÜ¤É@ÖåHX¯¥'M$£`ð€¤« q ö¢Ý ®iQ´§ é Sï>`Ìë£G³1UÖzt)!ÃÈ1Ñ¡D›AÀuÖ1ÖvÈÉ yŠa¸–ÔϬ'{W+–ð,jÈãa`PÔ#|q­ M$£`p€½˜Ø\Dð.Obޤ{ÀÐ+A‡›QDÙA’ê<—Šc½pëmÞ#P½vbî½gÀ{ýûh"ƒЈ¾O†'òT[‚ýŽVÆ$õ€¡µo#CCR£ tÁ†ž0'µ$x7ø¬k©Xa$rH”ÑÚ£‰dÐÐè}ÀXDˆ¼!„ÔK6FÁ0h̹Üïe'˜FZ„-Áˆ#æ6ÃQ0䚣‰d 6@£÷‚AÔõvë‘®nøOÞ•À$u¶ˆìÌ j «—ñ‡ñÓÃv‚‰±nðl”l”€gA#ê`Ø}Ààl½‘p´ö´ @—ÁIp‡TØQ©ö…O 0 N`-߇÷…zçGˆ¬WЖ%Rî$"ÝŒ¼` s&y¾–ÔxM$£€þ €†öYÐÿëë¡71@Ëk(9zðàõàsʰʠ׾ ˆ&æ®l‚÷‰úp­ƒ Š ‚l’®¦'É okM$£`Ѐ½x ¢šààÁƒ Ë€þ£Õ¾°­³£`Œ‚! hô>àQ0ˆ€½½=x*Ÿ)6Aµïè0ÆÀ6Œ†Šä2 FÁ@€½x º:ø?*­}GÁ(ÃРÞLá}À@©ƒéFkúQ0 FÁ(D€½˜­—Œõ4;´qìÑam*¦ ª´ÕFÁ(£`È€Ñ÷ãÚw8Z¿Ò­öE»˜ìõz£`Œ‚Q0ä@ôû€)XÏdÇu|Ý(À_û‚â8€ÙÒ­’GÁ(ÃР^M\ˆ¸ØÁ¡Ú%®íB‚t!÷3@¨$ªÆ‘fÀ6¿‹v,Ö‚£i<Üún!H´FøÒÉÑ0£` C@£÷㬃qݾ‚ÖÙ½qÂxÝN×Ã(£` u@ƒt4®‹»ÑîƼ+ZËBÄ©w0Ázz´‹FÀ¼Žãzô ´Q0 FÁð4z0•úq£=3²þÚ<+Œ%œ‘ÐF 0Ç$0>Æ£f4FFÁ(t4¢ïF>P$æ¼u<'¶×N£0ÚØüjt\÷´cÞŽy×úèýê£`Œ‚4z06V\WÁ“}Eühyà@Õ‡"郱`Œú€½x òð’j_<«Öñ7§FïW£`ÐÐè}ÀÔ£…8{À4µ}tÇö(£`@Þ<  €X  ¹‚xHÒš>h_ü"hÇŽŽÖÁ£`Œz€½x ¨JÞèæ\;žÙwÌAiRow£`ŒZ€½x  O¼ŒvpGÁ(ƒÐè}À£`øWó£[ŒFÁ(ƒÐè}Àäô¥è kŒ‚Q0 FÁð4ÒïÆzkÂè¨õ(£`ŒZ€Ñ÷‚hÑ:zóà(£`ä€ÔsÀoÿ××CVACŽ»‚,{ÝÜØ.ÊQî†N“äü‡c=gÓý£G ãJÀh«¯o€“´;6|Œ‚Q0  }0ü0aL’Ç 41"X £ƒÛ8j_Œc7`ÖÁ£ÝâQ0 FÁ°4H÷£u(á•Ä(8 ¬fÑî×Á@u {ɾ˜È.ø( €'þƒg$ÚLøÖçÑVË(£`€½˜°3F7±Ð0‚§p’0R]å(£`PÐH¿yÌ™=Z:Ó}!ñM¨Ñ@£` N@#ú>`‚¶c^ëKPYrý=z=0V@ùe ¸ÖÁa’hm)\Ñ„KvŒ‚Q0 ¨ hDߌYÍã?%kõIüåÁ£€¬0áN0æ7bÚ:D®§m6‚Q0 hhô>àQ0¨{À¤^ˆ„« „¶ÄдÂhßwŒ‚Q@k@£÷SFûF´ïÓ@jb<ËëF×ß‚Q0 h hhŸ 9…ÑEj€’£÷›0›Jä &v…GÁ(44 ïfÀƒ€G8@“õð$Ô‘Äׯ˜wdÁE ½ÞÑK GÁ(´4î=Ox(‚zðIÝÔêÝââ¿Â¿âQ0 FÁ( : !?`Ha½ömV» 0«AGT:ŒÖ©ƒ Ðz…­ñ7 FÁ(Ô4´ïÆÚ[ : Zû6¶Ut´ûKçj|§$N’슓Mª!£A‚Q0 h hhß ëHaœ ´1þLQ ¿ß—`y=zã/å'ª_Æ0£`Œ‚A hhßÌ€ýàQ0`Û:L’d”ÆS%#/¼­¹GÁ(hPŸMŒÆÑã ‡(À½€Ž@êÂuÜkÔGW`‚Q0 èhô>àQ0`€ŒJntáú(£`Ø€Ñ÷ã¿­×´âètãЪ³G«ÛQ0 FÁà4ÒïÆs[Ñh©= FÁ(£€v €õ*h"ç©xœ!|G)2 ÈÊïkBã2 ÞæDÌI–£`Œ‚Q0 F Ñû€±ÔÁÄŸ‘„ëD\·9ü³Ñ©úQ0 FÁÈ4H{Àð^#Z÷b2É€ç>`Д`ÔQv—EÈ5%©U&fلѾ/þ„áààP_ß'i}qÖ(£` @#ý>`Ê{¨7ºŒžé§ö]Á> FÁ(± €õ>`"–à !÷3’s0Ù×€3Úe;£(YÁN£È£`Œº€½˜WÁÇœál\ÛœF/ &X‚§p’äU®XÙ£`Œ‚Q0¨@èû€ñHã¹ÓÏE¿£wS2zAõËF£`Œ‚Q0h@èû€GÁ€‚—1<×Btâ.iÀ<ÿñ,£`Œ‚Q@-@#ú>àQ0zÀdv|‰<¢žl/½æyŒ‚Q@@ƒz˜’û€Au0¤Ó êAÞ €Fïp¯`'àÚ †«Æ£ërèQ0 FÁ( : ‘~ðè¸å2³R$rµ3ñº07&‚Q0 F-@èû€GKØ‘Pg“ªk4UŒ‚Q0 èhDߌvã/ÆåK¸nÆs0ÃèÀ£`Œ‚Q0 ˆ4¨÷ ¨²—¾’maþSFOr£`Œ‚Q@ áy0µö’Ó—ÅÚMXħ d0 £`Œ‚‘hö€á=H´®$Ú}ÀÔêãªY‰éË"÷Ü™­†‰©}êëàäh< FÁ(9 €†á}ÀT¿Q‡¤ ^+VÀÄÔ¾£[ÈFÁ(#РÞLÞ}À䦄Õv´J¿ò=< £‹i‰Š8ò·‚Q0 FÁP4,ï&ö4%´ñ00Û¸*ÚѪ‚Ôò¶9AIå=Zñ‚Q0 h h¸ÞL³êb´ƒKU@ëéƒÑh£` Z@Ãð>`\€*~ÝbD]@ù:¬ëÏ‘WÑãÒ…¹Ÿ9£`Œ‚Q@u@Ãð>àQ0¼zÀä·“ˆlKá©bG[£`ŒÚ€ž÷‚‘ÓF;…’± ª˜3 FÁ(D€½x òðÑP£` K@C¾àQ0`€’-dëQBK  .h'ÒœQ0 FÁ( Ј¾˜T@¼!£)bZWT\`Œk76žXÀ*5º«{Œ‚Q@7@#ú>` KùQ@ÿðĬ³‰1dt+Ñ(£`€Ñ÷cµëöPLÍ…¸nÆ%; È®³ÉØÞM»}á£`Œ‚Q@6 Ñû€qÖÈÕ'›Já¥<æÁ£`Œ‚Q0 F@ÞLT•ŒÆÅÜ0Š¿;Ú£`Œ‚Q€h®‚Fî;b'!u0nC"©¹€yIž*|àjœ.V£`Œ@ƒz˜H@ë0Ö •¼uΣ`´„1º‡{Œ‚Q0b@ÞŒ³Ž$¾~ÅsO0æÄðhšC®}G÷p‚Q0 †t9F‰v€Ñ÷Së#sq±ðÞàÑí¡輂}@L£` K@aí 4zð(H@ùn<ç¢àäÀ`Â'å{ZF·¬àŽë*îáF«Vñ„9ÚÑ(Ä–‚KËhÌŽ‚Q0Ú&¯ @£÷“V²¦9*¦ *ö>q‹‚+ʈ?8Q£éaŒ‚Ñ0%u0@ÞŒÓF²÷´ŒnY!¾Ö$u7# 2ZÉÐ5 FÁ(4íÐè}ÀÄÖøËw´ªbtË ÝêlÚéí쎂Q0 ¨ØÆ4 €FïF/g1ïú£`Œ‚Q0 ¨Þ AÚ†wSÐú+h÷Ó§< FÁ(£`P½ @ƒñ6$R=`’;Á£Ý_ú€ÑCTFÁ(#¶ @ƒz˜Z÷SâxbŽk€«]ÝCjí;zˆÊ(£`Äö€hô>`Â?Á=- „6±Œö§qÕ¾Câ•Q0 FÁ( E €Fï&¹ÏMž®Q€mè‚¶‡¨Œ‚Q0 FÁàécÖÁ4zðìiÈ홃â!)lWájŸáo·N%Œ‚Q0 èРÑû€GÁ@Z_Æ0Ú<£` ’0¦ 4zð(H@ù: /#hÂ(£`Ш @£÷‚AÞ&§LLÇymæÂ£]çQ0 Fu{À˜u0@Þ< †v˜*‡—nþ£`п @£÷SŒ–݃­< FÁ(ƒ¿ @£÷“P¹ŽV´ôï³›òþ+æô(£`к @£÷“FKgª·Ì¨~ˆ Ò 4þƒSàjàõ.œMŒ £`Œ‚Ñ0…u0@ ê³ ‰ì‘Pqk³¤Æ£­ªF^I;Zš£5³¨¸Ì˜’Ã˰žb6Y£`ŒZ÷€hô>`¢ w"OÈB»óžàQ€°$¢ÂˆˆlW‘¡kŒ‚Q0 ¨ØÆ4 €FïF¯FïZu6ít‚Q0 FM{À4zð(£`Œ‚Q0=`€½{'x´“4àC#£ªŒ‚Q0 †w €õ>`jÝLÞbZäú˜ÇÀU2 ÝB8:ÝHtÚ<„AËÚiÝn£`Œzö€1ë`€½˜pÅOpe,X—CT©zÿ£²ÓÌh< FÁ(Æ=`€½˜ä>7Iº07&Ì f5ìà•khh ºQ0 FÁ°ìÐè}À´]R;ºì–¸0h"Ÿ±±‚€lH˜8p€ŒöñC£Ã£`Œ‚ìÐè}À£`à{ÀDš¨o²"HS£`Œ‚Q0ä{À˜&Ðè}À£`à{ÀÀ÷€ƒ¨n¨Ïè7€û¾£ÝÓQ0 FÁpîÐè}À£`à{ÀÀ8´··V¹ Œ À øCc}=h)–êÇéžxÎÅ#‚Ç|\ºFçõGÁ( Ô˜ Ñû€GÁÀ÷€@sÀ¡3¾ (☵#ÖiuÌs@&àñˆ`i:O”CFÁ(£=`‚=`€½x |ØßF#ƒ=¨û …n„õŒR¹ª'keÚÁ,£õî(£€*=`€½˜pqL•û€GO×Â6À•n=xü¹iøuk_‚Û²1Õà¹k´&£`´LI €Fï&¥§6ZƒÒ¦ l/+\h}¬}!í*ª÷€Én8‚Q0 ¨Þ A=Ld‘GÅÛm„³‘¯fÂ¥ íž;ü挴ðƒŒd@¦Y6€Áˆ«"Ä Idqä*².½øÍ'ÃQ0 FÁh˜˜0@ÞLTÇ—˜ƒ ‰\Ý3šj1©ºÅdã j´a \K¥ÃM뢘jð2 FÁ(í“· €émHh]IxI1 NÝ&¶ Ÿä£pÊ–Zæ {>p 8À3ø<º hŒ‚Q0`¢êQ‚Ž!8.Jü½Â#ào™nÝ£` ï0@ÞL¸â'x0.)\æŒlµ,#Òª+о²ÑË€GÁ(û @£÷“ÜçÝBm€r0Œ}¾Ún4€FÁ(ò @£÷Sá>àÑ®-eË6$`C§¡¡a´¹3 FÁ(®=`€·!‚aÐ>xð€Ãh{ Èúÿß2 ¬‰Ñ†6w(\û6:U? FÁ( O €Fïß>xð ÒJ¹ ¼?˜®U ÚÝG£±2 FÁ( u €Fïßv8Ðêê8º T7«cÈÅVôkŒVº£`Œúö€hô>àQ0ð=`ðYÐÀ:˜¡T7üÑñWWí(f¬‡3cÐË´ƒ¾GÏy£`Ч @£÷‚ï«ÜƒÀÈ;îï6À/¯Â~!Úíxî‹Äs$ž[G»Â£`Œúô€hô>`B••îÆoÂÈ>3ë°!Œ2{Ð}À õà+ˆ¿Žp´Ã: FÁ(Š=`€½˜”Š‚çSަZÌèsp8®tëA0ˆÑî 39<ª£`Œ‚¡Ø Ñû€qÚHü}À Ó˜“‹h$®‰Ì‘ÙMp€ŒECj_ÈÀÕÌh_yŒ‚Q0xzÀ4z0Q,‚A#ŸÈÆeÀ6ÂŒyðÞýÂŽD{H1l‘ÈØ·f0'z±Š£é-GFÁ(tècš@ƒ´ŒÜ}D."!F!“ÔíÃkDR'eñ—ã£c¤øC©ºÅdã Iä3º‘›/¸Ä1µcê©Q0 FÝzÀ4z05*˜kGKpRøÀ 8€´äê‘˯(êwºÀjŒ‚Q0 ¨ØƬƒh0Þ†Dz!N°Lr'˜ŒByxðcc#Ù‘èõ £`Œ‚Q0{À4zð(øðÁƒ!›µ@ÜÐõÀ ÅíX.cÀ¼ g­Nô^²‘}Æ(£€N=`Ì: €FïßÖ¾@µ/è*¤¤Ë0êêÑóªFÁ(Ã¥ @£÷‚ïctƒC#øB$Ð…õõ„{Àh§Yaåâ’Â4³^Ç<- Yy~z´M0 FÁh˜Ô: €Fï&Ô;#â>`ü†Žp c`—÷ °õ™ñm€ßIà:B´€Åzã&¹Ò%~‡7®¡o*Þ= FÁ(i=`€½˜”žÚh K›0°¿ëàl3Ùƒº¿ QèFXÏø ñÍ#üµ µö|V´£`Œjõ€hô>`œ6’q0AFÖÀspp€Vº ñçFð°Áëá÷9Âqè‰yA$ñƒh7&ÌCCGÁ(´èÐè}ÀDu|‰9ÙùTgŒÎÑnžÀMCkÜÈ ,ÈÌÔ‡3ÁÊu4*GÁ( ÔØ @£÷£—­äÝŒiÈh1M|lƒ[QöV æð‰I$Èsº¸î·À=®N-¦.4+°ŠŒ‚Q0 F{ÀDö€hö€‘;”ÈEÚ}ÀôéZ÷€‘ª[L6–Þ'rÚ@f@[x…)‹u#šJ4q´ÔˆUÁh,Ž‚Q0Ú&µ @£÷S¿ÿJüa£ààAø2«HK®\~5 FÁ(C½ @ƒz0µî&ãFB´ú¿cÕ  —í0ŒÎb€†††!íþÑ£`´LI @£÷.X îÅ¥†#ŒË(£`$÷€hô>`’«„Ñû€©Ø2£ÅÀÉ(£` ‰0@ ù9`J*?òôŽV·´iœ1"­º¬B륣`Œ‚Q0°=`€û€GÁØ×?“Íè½£`Œ‚aÓÆ4 €õIX£`d,ÛFÏœ£` ×0@ –ðÁƒGëé‘Ü>xðcc#Ù½µÐë•’[Vä£`Œ‚ÁÖ ÁÒ¶··‡ 9Ž”#° l~!ík²Áûƒi>×N|bM–£`Œª÷€hPô€á§1UÒt‰IÇè2w(ø‚XãppUÀ « ÇA<ŠrŒ‚Q0 †t €hµ š¤k}Ý_ ú††xí ÑNäê-"ïE'ïh*ÜÁhÇwŒ‚Ñ0®0@Ѫ¦ä$ÌÞ0žÚwŒVN£`Œ‚Q0 =`âÉœ‚Š):ÐL –Aë7üÇ‚að‘ŒÞb9 FÁ(ü`JÊ:€bäÞ­z‡7@ªeQÖ?“Üë…CÃűöSáÅXï`@ÇsÉ ©Ñ£›GÁ(d×ÁDÖ¾@@£ð(ø0°Îup°ohïú‘ðžñ(£` Ñ~0A@£ð(ø0x©3¸Ò =7‚ç€è?< FÁ(ô4º z |ØÞžáÀ`'Zã‚·÷€©¿ zt‘ó(£`€­€GÁÀ÷€Áu°=¸^D9|/!eu;îË ^Ý8 FÁ(44Z‚ïëa öAÌ +—8q—9"Ÿ¼1Ú?£` (<. €F+àQ0ààAx{©º=@Ÿ#8puŽGÁ(£€ È)¨ Ð€­€G½üò‚Š(¹l?€¯W¤£`_šO™ÐAêï£$uIRã‹ÂH PlþI jhh–wÿGÁ( @N]ð$ª~Œ‚! àe/<ËŒ’ô'É(šHEhµ-@ö€GÁ÷ƒi¤~Œ‚¡˜)Fû Þ¦gQ@£û€GÁ(£`P€Ñúo¨Œ?S Ðh<  ÀzÈ(£=àQ’>$ý %€­€GÁhí; FÁhx”­k¶@t!€ÂÞvâu.°þÿÈn“àÚþchäRí ‚Q0 FÁ(Œ€È•Åk6ì O=%ºà €°TÀÀªRãBúÁ@6Š,Bªbиô°‘~|¢ ³¬M»£`Œ‚Q0Ž.)Zœ™@X*`.•¬ÆÆi`dt@©}ÁCÑp šow¦A承ޞ çQËÁjÙ§ë“€$¿f-îå¹n )aT†&þüL'œ-eZ§ö•µ¨FZ @}pk_Twj†poî­’.-ä™vyŠ_ô½»ÈvØ™õE@Ò4¨4û‚Q0 FÙ57r%)‚ ˆ‡x°¢Eïû‚¥ëá\È>b8àV͆ÔÁ¸jß’&å:Wí;P@ݹ™ì{—·ƒü¢çk[0RÔr0 ìc¤iÓcŒ‚Q0 †ÀZeâéÃuÕD;1µ/ 9ÌÚáàÁƒ¨Ur.½_nNAæòiäÂÙÁý`­| ùáÚD¸¸ N|wÔÒ-|{¹_X·èí¥>dsDõ‹!Œ×zà‚b†¥pö‹s Ž „q.‡==ÕÌ•1¯Bê·Ê‚ÇŸo… Ê[ÕÉGAÝV›ÚûGšmêînB6DÉ®þî!hsDÅ&w +jŽõ7÷ÕBj_äðõÝ5pZn Û¯íªB‰~vb’ÎÅ-ø‚†Îo.’†~=ç6•ù÷œÛ @cÿ^ yvC¤öEîŸ^W7Áy4ÓŽ‚Q0 FknHŒ§"G„ý ðD/V?ChÌ«£q^õ\ 2>Ý@”ÑüšyüHµ¯€v 6¨ê}e\Í»Ë(á"zE"àª÷õÅ^xí+fP"fª]^”0*ÃSû´Y¥´y%ñäd\4 «}嬪!UïÃcˆ!âGšQê]Û:%[P-{ïP£²]½2¸ê½s&*ª@䪘oí¯Ct|šµ/²97ö€,Òtm"pÕ‹˜„Övo"P\î¨ÄôÅ¥må­}·‚Ä`˜Ëa7ƒ@j_`èºÛûiRëzu@¦má=`ö€QOð¡ö€‘O± ›‚>¶2w´£`Œäy_äù`< €ðÍ;Ø; öþ‚Y@®}‰…ƒ û÷BzÀÆ}d×ÐÀ:XC:Á£`Œ‚Q0ø{¥p@‹ Eh«®ÐÖdᄳv‚¿1L×´ °C°ð A÷!}¹5×Bh>ͼO×'Áaчk‘‡ !ë°Qƒ’×z‡ ÅJèå¹nÌEXðmHÏNw³ZβúÑñÖGÇ ë°@3Á¤WS*ÀNðmÔQh5§¦[ûêà‹°àâ.-7öÔ\ß ú/Â"`%òø3èywû¼úÞ]·–!Aúv“älÓ þÓë O­ƒÆ‚yð`ß÷äš|´uX£+°FÁ(#§Â&`V´ÄTóÄT¤­o9Îó2†owĺ¼è›€!ý`È>`¨q£‡Ècqáè!ò£‡È^Æ0šFóý.cˆ4å'þŒ*`]¶ÿ~’Ôâ$Cä2ˆ@±à×9oòÛi °¾0Ø;8D‹£`Œ‚Q0 Àuú#µÔS¢ ˆ…EÈ}\ €×¾hÝßQ0 FÁ(£`À££#MÕS¢  ñJ»–¼jhpÀS1‚Q0 FÁ(0 IªGkÜQ0 FÁ(£€* €P*àSkâFCdŒ‚Q0LÁìQ0 JLá|ò(£`Œ‚Q0 púúzä…ÓÄ‚)=F£`Œ‚Q0 FuÚ‚@@Xæ€‰ÜØ4’Áš ;Ð2#6¨Û£‰sŒ‚‘ˆe4F% $Àc4FÁ(£€ @L¸$´õÍhtV˜ *t!Ð4 ²Iú¸p„DÄ€$ÎÑX£€l@øzÀ££XD‚P@ïCN3%•¤¿SñŸòJðìV"‰¥îQïh–’j81áŒÇ_´8¶~Œ‚Q4:= (-èÉ«})¬ƒ±Þp¢c°ÌÀ7*þÿ?öý'ŒŒŒÄ\†K;²9Ô$‰½g”$+pìöQݺQ0 FÐh< à=xs$äîg`=BlÉ; µïŒÓÈÁUr%¬ê€Þ&êÆÆ†šo€Õ¾ˆb!-*EHÛµACåÙ}`u>ºb`Œd@£ðTuT,=©R¨Az“Hw‹0âéeâé«%°À‚ä• d×ÁÚ×ÁÁ­  Õ4ÆFÆÿõÿ‘;¯DF¸f€yR×S7Àk_H§ÒZJ«;¸îGé½SŽ€ìäJ­Ar´+ÓFÇØGÁ€€b¢n‘'Ÿ K‘wá"©¦]Ô-G()Ô¨Pö‚a«ûÉèÑ’¤’®à^û"_ŽI ÖÁ°øOp„^×Bª[Î¥JBÊGˆÚXO`ì!¤6`¤G]×9 FÓ€ØJÏVçàiá‚JÕÿ49…#|üÜü,‚D2àécVHÀZÁëlÛÿaÝ\¬u0©õ1°Þ…T½ð:˜½Œ´©‘ÛÀx`d†…Îh< FÕ† áwÈ#xðÚ˜²bLÔ­8ñØ…‹AëÚk?’ Õø‹-ŠÇ¢‘k_Ð`,lü“pLë0¬Îc„Ô¸™ZÌ:¾‹ÈÚ2ò íþÖ“Ü0‚n zMŒì÷5, À4êƒg|é·.}t>xŒ  ÎcÖgh\´ªÂÆ!µ¿ ш¦«]Ó÷ÅÚ ¦FO‡²B Qû }lu0þðØL*ÚX.Ú”-yë° µ/lµr} K<äxŸŒÚ>à aÀ t”$0´¾u}}=¤²‡Ô¾@6ÕSï€tIGëàQ0 h-ÂÂÚïÄZ[]@ÁêbPý ©q(ÚŠh’zÀ˜Ó¨˜ƒÃd¸ÍXH½ûŸâ!}Ä ,¤ÕXDtÇ« ‘a¿š+@[\ÝØÈH»Úu›vÇPØžÀïÍÑÃFÁHÄB­lŒ\à ÎúlªãaÕí¦õ(ÛƒgÞ—¢0Ö©YªœÅAIíK^½‹ `CÐèÊë`´0Ð"ø²g¥a`Dè胧‡.bŸ<­}GÁ(  ªõ€ÑÆ{¶¢Å߀È"+£C'¹&Ϣ̅Kðšâ ¥–…ECIÔ±hÒzÀX—+“7 ïøR«&uí’¥õ˜nC«ƒ©Õ¢]9 5lUòk [Å€U>´Î§Åèôhí; F ‡ !µœ ç‹4t¨•¶+ ­ƒ)ë©Ð¬DCôtu{ÀXë`2zÀpÿSi%9ÚhòúÁ´«Ñ"—F›V‘ó}†ŽFkßQ0 à €X¨•±r ŠãY¥EI¶Çj¦Ô²ŽºåÝ•hÿÉ…&8 ©ƒ[Xã’Qõb=iy˜ò&Zi5ñÇ“‘y]^`÷w°Î1:B; F­@ᬀi~òì0£5„î¦]¥28«+Rçh¥; F=@ÆÊà¥áš ;êëëG‡‰hr *¦LèN>¢ü0£ª‰‡1ÍÅ£` þ¼ d8p €H‚&é ýQ0¼;Ê´¾wŒ‚Q0 †1 ’ê‰ÑuŒ”·€F½3 F[{£`Œ  ’:4£Uïh—qŒ‚Q0 FU@±ŒÖ¯ô£!< FÁ(£ˆi4FÁ(£`Œú€Â² Ï2+úwà†ÍE£€atÎxŒ‚Q0²Ú€bÁ¬}iTË¢9Z­ŽL€v(ô(£`Œ€¹  €XèSûŽVº£öïß?´ŽŽŽ£á< FMIÕeNA¦ @ äQ”ÈÃË6r/­¶F»L®Î­ã‡k¤øPÿh8‚Q@S@äÁ¸v]+`´j^ƒ"×ÄhU26&ƒatÎxŒ‚Q0 FÁéNá O¯”T€õF^²«Ld]T¿dwŒ‚Q0 FÁ( ) Â0f/s‚Ñ^ï(T£ãI£`ÐÓ`ÈáT쿎v…‡hAq£‘HÓpF íÑ4 FÁ@€˜9`ÔÁg‚Ë©+i\ãØ£]áQ0 ‚ÑÕ£`СWI¤b€b¡ÎÇ*‚¹‹HñÑzwØT ˜ sé;Z“ ¹:M 6‹ÑstÁ(äå&âë`€b ²Q0„ºkXÀ.ƒ§E ö˜GÁ( ¯-K|~ –ÁYŒ‚ÑN0)ó‘£3—öwGÁ(Ôª}‰¯ƒh´< o‚&¾’mº‘ׯ%)GÁ(Ô-‚ˆ‰¦¦‚Q@F'˜ºíÐQ0 FÁ(œ €F{À£`ÈWÆ£Ëà©Ș ÜFÁ(44Z‚AQ d3`[k‘ü( Îx±†êh‚Q@u@£ð(£`Œ‚Q@ÀuË‘ €F+àQ0~]Ï( çQ0 †( üvs€¢w<:W7 Ga4œGÁ(ê`Ê„âc½ €è}åè¾þQ0zQü(£`€«ORx0@ѯF«q‘/FÄÚQ¦â•ˆ ˆŒ­á—LGóê(£`´|C4(æ€ÑºÅX;Êãë71"ÕÁ£€¶­~ÌÅ¢˜jÐÖ‚’ÔM †ä@c#òq“¸r‚Q0 FÁ0ÄDdmð”ƒÀªR%#÷§áh4F‡\íÛYhJfõ°z·ˆ÷tõ(£`Pˆ‰x¥ÕµÕt®h‘;Êh½^¬uíhWx(Ö¾ à Xû"ø\D:xŒ‚Q0 †+ â•666†xPbæ0Zu‹§rÅeñGÁ ¯}!{ ]ÞšOŽo†0œ±@gWQźÑô<@‘P×××q¿:¾-~ü àl‚挂¡ ˜Rû6€ªb°xcCø˜H”…/„F»ŸÎfÀvHGãâ k@ᬧª¡EV¸t´¦q„ëRE¬N"Þ*Ö£TO~£ÕóàDÂ4øàÀQ0 ¨þ××èJpí *'@µo=HQRe‘¯#ÄJ"ß=G•‚f×¾Ô:ã…ŒPB;fÀCÏ5‹•È Ø›ž‡: *`p±8 F‹ÂF`í ©ƒá‡M6Ô70BÂ(8©¡))jñ\GÌÅzûÅ`»¾‚Ý ¬ã ¤–ïX«.‚¦á‰ÌKGpEI1Kð¼L4WáI ¸Dpù—¿°ZGÐS£éy€b!©×Káð(˜µ/€kYpÜØª‹A¨®Y%ÁrœøaUdõ¸.½Àsü0¢@=rœ÷yzÝ®ØA>ÐWÌb› x²2<6b5ŠŒ #èßÑô<Ô@žFîøR2< F h@€öt!âHµ/ñÆhÉBv]KÅ ›  ‘UÖZi$õêð\;FRI|õIÆe* Ø®8M®Ã ÓhŒ‚)ôëë0®X€E£×¾d A£Â–\C¢€ÿ²ü (™Û&¯Ñ†ÇFª\|‚fò\õhj €F+àQ00²®ÊÛ5Gh“¾@6©½aÊKäáZÃa­ðTxh瓼O¼™`\Ýq\½j ;¦T©}‰ @âG h:>1 ' &"“×è¼ý( .€W½Èu0°®ýÿ¿|'´†Ô¾hÛ°’Ä\5v_ň­ƒñ‘õ%ÇW#ãA\w–0r V•˜aB00ÍAë­’tñ VëðÜÑ2šž‡ "„<¼fÃŽÑà#Œ®\#¦2U¸H=]ðÆ$ôÚ—ˆÚq‰¼¯çRúaPßÇ"&À Þ Bd–à\"¯$Á³ $^R‚'%àqI—©à²ŽÈÛ#<=i@,dëÝ•D$]¹FT ^~îÛ326k_`sp88zá(£`¸€"¿­WFEý°úzèM ~”„×¾ à»Gj0t‘ÊÆí¥ È£`D€"\#oMÔ­ƒ$ú@ÊèÀÊ(£`d€"P£3özGMuÏ £`Œ‚Á ˆe4FÁWºÈ‡r ;0Z‚Q0 †+ Ñ}À£`€kßð„ષVï6B.&ûhâQ0 FÁ(ü €F+àQ0Àµ/Ò•À°Np=AêàQ0 FÁ(® €F‡ GÁ`©}€Oä€vy×ð° §©rEÁhTŽ‚ah´<  4ÀŸ!µ/èJ``ÁøŸĨG >Ã{Æ Øn[üˆ È( ²Š¢ºJâM¬Q0r@ѵŒ|xVH€Kä¾&âUŽ‚¡ {a§N‚«bFPí[__ßÀ€(…ÁçaA÷ã:x0t­†OÔ P¸Ñè.úQ0 - úUÀJT[ßYÈ%rkñ*‡\'ƒ>—­Ê@€^ » T7Ô74@*㈂ Ð3¢í©ìðj9 0Ű]‹&NÌ=ă0á¡5\0[3X—÷±ªÇzÙš XíŪ’xî‰ÊQ0 @ѵŒY‰BNù€ônáýc8¹—Œ¬rÔ¾¤^ð2Œk_€ÕÁÀ˜׿ (W¼ ¹@.ÙÑ‚—ø;Ûñßô΀íFô¡˜ðˆì s=qW2yÿ.æ=¸ø¯¦iQ9 † úUÀÀº~¨¼…ô¬˜áýc 2ä:(d «޵J«k¸tèX4D¼¡Ô+ñÔ ˜*ª ]W« *@Ý+èiÚ\ úÕôÃ,*GÁPD×0f‹\¡kYx'¹Ò…+6U/ÖΞþÁ°, gAë\Œ:¸³ËK•!h´ ¥J…ÙlÞ€n~D X4îhTŽ‚áˆÞ« •(¤Ež †wvëÁMýp-È Oñ1¼WðBÖ6#_ŒÞFª}Ií Ó§Fÿj‰¦¾„]aúÌÔ ¨CÐ Ú<Ì–Y ¡ÞÆ€xÕ ¹ ©§[®ƒ¡õ.Ú•Àð*È·¸ãZ„&BÒ¹ZX‡(0‡.†Ö4ž¡Ìž%1Úq­xÂàX'æ±.bÇΣQ9 † º®‚†³!ãÏðYa y† «‘4짦 U-ROÈnh`@«}ˆ»O1JùíC}õ1î'ï zR®‹Çã6¬›‘Ⱦˆ~Gå( €èº yØÒÙ… "/ÂB®¤1µƒ^2®!/äþþÎÊ0¬ƒÁ˯ s½ð+Ž^ < FÁ(® €è:µîDDS€Ÿ;tžæ<þþÄpEX ðÕÐ P^ûyUûŽØÎ%(½£Q9 †. Ñ³ GÁ@ÖÁ@²M´~4`FÁ(#Ðh< @[Y3Ú}£` c@£ð(èJ·±ùPüç‚Q0 FÁ°4z]Á·;Ó€• µÈáQû6ÀîD‚l@׻ˀIÚm2 FÁ(C ÐhLW êy•K%‹*ä×ÛS‡GíË€t%0¬\D:xŒ‚Q0 †+ Ñ!è¡ ¸U³ÿÿÏNµ/äâ#h—·at˜¾Ñ1ÈFûÑŽ„$ÒyƒÊCÅ T·qtæˆx@£=à¡ †A¸6ø ©}@U1°Ä] ÌP|†÷Œ`Çsbå2"üê±ð‰Gj Hk€Z÷gŒ/Œ&Ý!ˆ®=` 8ûÊ…@.äªدráä0îCö 164ÂN~WÅŒ Ú·¾¾¾Q”€ÏÃ"°'˜øF÷ȹîbx€a/£IkàD¿ x´ºÅUû¢U´øëÝáÔ†_ » T7Ô74@*㈂ ¨·!ÁÆ<W­Œµ~E3gät.‘k䫱^Úˆ¬ SÖ+‰0ϩ˸nÂzñ~«áçÇa•"Þxœ‡Ëúxk“«“Hò/®˜"Òïx®¥=^›  ž†ô‰!3¼ŒÆ…‹ ËêH‹ÌF®ž‡ü0¬ö…øE„ àú·åJ`‚·!´“;É®}É'ÀÚšÁlÁ Ï`žï†vU3žVwâ·¿g±Ö^¸œU ôñ1 ðð vbüŽÕ"Ì40:ªD  úUÀ1g´ Î@îÃÙXe‡4À[†ˆ`íû¹ÈZЪç! РcÑq¤ÚWuKLÑ3 ˆ¬h©¨S=ç&±v³†Vt“ä´v ž¦1Q±õ6:ßL@tí¿ •Zµ2Áþ1fu; æ€á¢õƒÑj_ä!h’Š9¬²Q0PÝnÊKm¬­.\ãØC¢ÑƒÇ }‡_Í"êÆéH4º iˆUÒxªä¡ k›‘/Fë #_MˆÙ&¦pÁß`Ç:ý9’kÇ¡ëò!z` ‘^@›^Á:öƒßûÔŠåуq¨htҸƫ‡p¯®BfÀzºõööö°¥ÑX®ÆUÄÀÁi3Le’eØoCBö&þâO`"‚Ü‚Áo,UÓjLw"¯B¶S/å¶ÓÚ ­Ã¤º–˜*Œ#2 0@Ñu4œ Ÿâ…/ÂÂ:CŒ)2 ªO´Šm2¾ ë<ñ0X\ƒ*\Ô^oC–Ú×8‘¶ã)‰FH˜È[èñ+ÃÚx†R1¹XoádÀv)'1*Éö󺓺^Àº²ÿ¥Ä8 —Kˆ "­QyŠ@t]„…_SÁð›'Æì¶âA«1• é9`ô:¼ü 2× ¿ØÁáà@] < H£KÐGÁ( ÐèôîLí®ø Ž8¿JÂk_ o´öþ1•脽üa0PA¯¶œÐà]„5ºLš`gz¨÷€!up=šhýhÜŽ‚Q0 F Ñ0]Á·;Ó^oצ 9œæ€á€Œ&˜Q0 FÁ04º ‰¾}>è_UÈaRé66"Êëô¢Q0 FÁ(f €F{À£`€kߨHÿÿ×ÃêÝFÈeÀ£ûGÁ(ÃÐh< ¸öe@ºÖ ®"H< FÁ(ÃÐèô(,µ/äâ#h—·NË2GG¹i¤^ûˆK /´ôQ0H@ö€GÁ€Øà3¤ömUÅÀþ/èJ`†zÄà3¼gÌ€´J Í€º€‹ãìÉÑ¡lªT¥TWI‰KFãt u@yÖ(ɲ‰±¡vê$¸*fÕ¾õõõ ˆ²|tO0òY¸h÷˜Žöiheƒ&„ÉÞ¯< FÁ D×0äÈIäS'GÁÈîQA¯“ Ðnq}#t¬àü\hjuž0÷8œ½O˜Ãð* S6ð€kìYc%.•cÓ…˜ ÐŠQ0 è h€‡ 51aö’‘ÑÔ sGÁP¯}!V704‚úÁ éJ`Ìj_ªY…V¸Dê¥ ÐèYУ`€ëàz4ÑúÑ€£`Œ@£ð(Dóœ„Ñ0£` W@£ð(èJ·±ùP´Ó3FëàQ0 FÁp4:< ¸öm€Ý‰ôÿ=¬Þm„\‘Úåm Î0yƒØ#v蛞Çz,Ý"ktvc @äWÀk6ì >b@H€Çh ` PÌ©}@U1X¼t'0¼ˆÊ"Ÿ„…yéÂhyJjÝg㿌 šÑ*mŒJ@‘_CvjŽ‚àêÅ“djÃ@ö 164ÂNWÅŒÀ1°ò­o`@Tàó°FOä s—ž§@‚Q02@‘_#×+£€ØZg´Ç†R@¯†]‚î×; 2XÁRnCÂlâ ‰`öÿ°ö¤‡eS Wª#xõÖN3® F[:G| #ÛŽŸ1Å£`x€b¼rá„¶¾9¤6]³a°¼Û¿?žJ®xŒ‚Q@OSP'oR¥ÆSW¡ #B†z‚ òL&Þµ£`Ô %²B„Ô­S&t Õ¶4º‹¶Ü£0 (4\N^õC‡b˜•%}죀> €F+`z´’Fa ?0P½ÆÑÞê(6 €È¬€ÍB†ApjMÜhp*&$Ê«.\S¼”Ôj´ÂEv*œ= FÁ€€í‚Q0²º­ø·!Ák;ˆ2\•²9ÈÕ$ÆJ(4Y´Í—^cÚË@IJ,"m£€Î €F+àQ0 F\LP„ÇÍö xo³Ç¥«Áj ˆtk ÚICwãõ€; €F¢£`¤×¾¯=@V†çB{´Î~õÈ\´.‘îÇ4šÕø»nø„Ç©¸L ©w0ƒíàn4kø Ëã5‚¶Ÿ–HíßsZ8IÚih´Ö§C· 'xÅ=fƒÙŸF3 ³„ÅSŸáw©Í‚NÂ*ŽÇú{O3‹ÈXÃ&¸ê$¬×c,¤¦%\m;̺œøHÁt<åcÚ$€­€GÁ(éO—WÁJ†Éd¬…ÁoÖ Žóp(u½C|%MÐ^ ˜ k=JIÚ )$Ir<=mÐh< FÁ( §à&»[F­ë”*‘c¤ƒ?´éãúØB0ö©k5µÚtDfL­ÂG ®Q0HŠøay³=æä(ÙÅ!áªWøm(¿™’ñD.åËæi=. @£=àQ0 F\Œ§'²®Âœ<#XUP·ˆÇ:{‡æ)ÌbY;ÖÉK Ý@7ïç*‚¶à÷ÖårĬ;#>màIK”x—§0OÅ8%Ðh< FÁˆ«ƒ‰éH‘q§=Öu³µãš`Æe>ñêÉöSñ¸vÞ!É("cZêqÙN¹±ÄØByHï#ª€à XÇÀâÊ…’rss©·fÃŽÑ¢B<†ŠSéÙu£`€¢w ¬)$þÊ¢yÍJd  ¾¾~4µ2ÀÕ‹'¼‹LkƒÐ/CeôbDáç}€ŒCКlðwjIªƒé_ŒŽ‚Q0 FÁ(Ì €èZë(2*Wx·®SÍ úw ‡\£aŒ‚Q0 FÁ@€2‹°ë]\ÓÆ”Tð£uð(£`Œz€b*Vl„Ù'ÆZó¡ÉÒ¿¡0 FÁ(£`àD¿0¤F„׋$õ‘#/ãBf#w‹1eGkßQ0 FÁ(ƒ ]{ÀÀú ŽhQáAêàªGkßQ0ÔýC"ÏF¬Ç&Fß(r €†Æ0ZÍÊ€{Õ@ÕÁ£µï(е,ž}ø¯=ÇC~Abl§©÷iqlá(d€¢_ŒYS¢‘Ĩ'†;ZŽ‚Ñ¥p¤V?¤òNWÆ;/}Àh-;  ¦Ñ ̵æÒ3šÚ‚Ë" @¹ûq-¾¨¥vìöÅìÎ’W#ˆG ~ »YÍ4Yø}õÈ$.3±š¬«{FÁ( ÐèYУ}8šŒvF‡"Àíù@µˆ¹÷žïõïxÔàrÇoÔ(䀭€‡X­Œ\¥!o‰F[(Žõ4"OÞÆc.c1ëZd5x܃_#Ù!Ã0@'± ݺ–Š6AAbª[4]”÷5Iõ#Á äGëàQ@9 Ñ xäÕd˜§‹säñêÑ,ÂZ©c…Ì&é˜R5b: M11&¦¨Ñ&µl¤Ï%ö£`$€­€uŒ«G‹©WW—zü‚ø;ÊÄ̼’]í‘§qt2˜ìN*žþ‘מ£©'F óHu*íþÀMT£€@£ð¬’i¤žZÆ’} …G‘•ž~‘ƒÆðEI”W‡m$òŠudsȸyëþ[ÙGo]Ô4º zH¬><ÝVR;ˆðÎ4%ýN²+Eü£ÐÔõéȬƒá€`E‚ë*rd0Åq RÅ:¬^ÀåG\Æâº4Ó ‚Ž£€l@ä÷€Go˜'(¹Jsæ¬0ÁjŒHõhvaÖsp£ÙxŒÅª€läùttÖ(£`€"¿½až  ä`2'a ñôb Á\„Å@Ä)(¸ª‘‡ïÓQ@|yˆÚˆÙ»£`0€"¿½a~Œ‚Q0 FÁ( Ðèð(£`Œ‚Q0 €F+àQ0 FÁ(£`@VÀ£`Œ‚Q0 FÁ€­€GÁ(£`Œ‚4Z‚Q0 FÁ(h´£`Œ‚Q0 Ð`¬€É»wô¤‘ FcŒ‚Q0ä@Ñï,h¬wÏaU6zŠI!Fݪ ×ùŽ”8€ZqJÆÑø@ðÖ&úøkŒ‚Q02@Ñõ2†Ñâè_i‘/CÔ|²0šGÁ(hàoCÂuŠ/Ök_±ªdÀqQü0î#߃‹õB¬‚ÿÎ]¬u?šQ¸ŒÅÚÆ‚‹àq~X]…ç¾E4K1=Žf~‡Ÿ) íQ0 FÁˆ4À0þ«Ôñ»X‹¶áÔÃÆ¼`W½ˆçb"Õ£Y„µRǶ˜Q†§Ö![#‘‰WÍŠõi¬ŽÁÚ3Æø ­}GÁ(x@ѵÆÚ¹!þJ;L•û€ÃÓ£ÅTƒ«+Œ'<ñ⯠‰YñDvÔ Hœâ±”ø´JLÀŽ‚Q0 FÐ̳ꇘâŒìËÛ‡A•<°AcÉŽ\!"ð”CÝJšH×âoÙŒ‚Q0 F© €`®›Þ‰/Ôè³îxHêHâëWø 4¦È0 ÃÌQ0 FÁ( ÐWÀ˜ãÌ´®†q-ŠÆèfÀ6p= ¨êëë©Õ¹Äœñ%ÈÆZ³âQ< FÁ(T40sÀ 8.~gÀ};:Öž+®»Ó1µyéú( '£`Œd@ô«€±VŸ˜lüÊrq) Òv<ìQ0DëìQ0 FÁ(œ €F/c£`Œ‚Q0 Ð઀G{œ£`Œ‚Q0 F Ñ³ GÁ@´Û¢êëëGÃdŒ‚Q0B@VÀ£` k_ä¿FCfŒ‚Q0@VÀ£`°Ô¾àc7`Þ (M°J†«d@ºxtçÒ(£€> €F+àQ00 ¾¾žŠUZ] ç⪃ñ(ÀºzŒ‚Q0 ¨h´È4Ƭ‰\íL¼.ÌI£`Œ‚Q@ @äWÀk6ì >b@H€Çh `Mª®ÑzwŒ‚Q@@äWÀ£Gä ®^<9£`Œ‚Q0 Ð@‘_Ö+£`Œ‚Q0 FÙ €Fç€GÁ@´ËG‡UFÁ(#Ðh< ²öE»(2Z‚Q0 F Ñ x –Ú|ìÆ´>ñh·xŒ‚Q0\@VÀ£`À€½½=ÃD‚QêéÑS®FÁ(ÃÐèQ”£``ãÁƒñ䘈´ë—’Ã4Fâ£`ÐÐh< Ðú2†Ñ®ó(£`Ѐt°ŽÅh¬Œ@ùe Xû»Œ`€§ˈˆ1gŒ‚Q0 ¨ˆ~0ZÍ:ZÑŽÚõ€ÿƒ1jðß¾@Œ9£`Œ‚Q@ Ñ!èQ0´{Àð”µZÔ2gŒ‚Q0 ˆ4ð« á]á+N`í#‹‚‘×>0J£`Œ‚a ˆ®0æ°3P^¿"³‘ë]4ñQ0¢zÀÄ\ é¼RÞm¥–9£`Œ‚Q@  ºVÀXû¸£“Á#€ÏÜÖ¯Àµ,.’Ìz”Ðh‚×iÎ(£`hà‡ G{·#Ô××Sq1Z çâ©;±Já2gŒ‚Q0 ¨h-Âí 4ðŸh€ÜmEÄXDž®Q0 FÁ( ) î»¿Xa1àXœ5 Fëlºé£`Œš€¢_ŒV¹DŠ0ºÆgŒ‚Q0 FÐè>àQ0 FÁ(£`@ ÒÛ†ë°óh÷  ]>8zóà(£`䀽ޮ`t­öE»(2Z‚Q0 F Ñ x´àQ0€òt^FЄQ0 FÁ( Q €FLN'˜˜Ž/òÚ:Ì…G»Î£`Œêö€1ë`€½x í0U/Ýü= FÁ(  €Fï¦-»[xŒ‚Q0  €Fï&¡r­héß&f7åýWÌ!èQ0 FÁ( u €Fï&Œ–ÎTo™Qý¤Aiü§ÀÕÀë]8›FÁ(£=` ë`€ÔgAÙ#¡â0&Öþ.fIG;ZU¼’v´4GkfQq™1%‡—a=Ål4²FÁ(´îÐè}ÀDîDž…v 0æ=Á£3`I:D…Ù®"C×(£`P±Œi@ÞŒ^%ŒÞ<´êlÚé£`Œšö€hô>àQ0 FÁ(£`zÀ4z0öNðh'iÀ‡FFT£` ï0@ ê}ÀÔº˜¼Å´Èõ11Ž«d@º…ptº‘è´ (xƒ–µÓºÝ6 FÁ(ôìcÖÁ4z0ኟàÊX< °.‡¨RõþGe¦™Ñ:xŒ‚Q0Œ{À4z0É}n’tanL˜ ÌjØÁ*×ÐÐ0t£`Œ‚aÙ Ñû€i»¤vtÙ-q=`ÐD>cc#Ù0;pàí!â‡F‡%FÁ(Ø Ñû€GÁÀ÷€<ˆ4QßdE¦„GÁ(£`È÷€1M Ñû€GÁÀ÷€5îPÜPžÑo÷}G»§£`Œ‚áÜ Ñû€GÁÀ÷€qhoo¬r€ðÿ†ÆúzÐR,,Õ5ŽÓ=ñœŠGù¸tÎë‚Q0 ¨1 @£÷‚ï3€æ€Bg|PÄ1kG¬Óê˜ç€2 MÀãÁÒ tž(1†Œ‚Q0 F{À{À4zð(ø0°¿ ŒF{P÷4 Ýë¤rUOÖÊ,´ƒYFëÝQ0 FUzÀ4z0áâ˜*÷ž®…'l€+Ýzðøs#ÒðêÖ¾·ecªÁs#ÖhM< FÁh˜’0@ÞLJOm´¥MØ^V¸Ðú XûBÚUTï“Ý<p£`P½ @ƒz˜È"Š·!!Ûg#_Í„KÚ=wøÍháÉ€L³1lƒWEˆ’ÈâÈ=Td\zñ›O†!£`Œ‚Ñ01=`€½˜¨Ž/1A¹ºg4Õb Ru‹ÉÆÔhø–J!‡9š Ö3D1Õà7dŒ‚Q0Ú&o0@ ÒÛк’ð’bœ$ºLl'>ÉGá”-µÌö|à@p>€gðytÐ(£`xô€h®‚†¯|A+dÑî†ÔÁ4½ iÐ44/£õî(£`(ö€1ë`€ÔsÀD÷¢¨6Ì@½û€G»¿Äy‡x‚Q0 FÁ0èÐè}ÀDÕ£Cp\”ø{…GÀß2ݺ= FÁ(Þ=`€½˜pÅOð>`\R¸ÌØjYF¤UW }e£—‚Q0 †w €Fï&¹Ï=ºÿ„Úå&`û |µÝh‚Q0 †e €Fï¦Â}À£][Ê–mHÀ†NCCÃhsgŒ‚Q0\{À4nCà|ðà‡Ðöõÿ¿=d X£ ?lîP¸ömtª~Œ‚Q@Ÿ0@Þ< ¾|ðàA¤•r @6x0]«@´»FceŒ‚Q@ë0@Þ< ¾ìp ÔÕ=pt¨nVÇ‹­è× ­tGÁ(ôíÐè}À£`à{À à³ u0C#¨nø>¢ã?®®*ÚQÌXgÆ< —9h}žó< FÁ( O €FïßV¹‘wÜßm€_^…ý:B´Û!ñ܉çI<· Žv…GÁ(ôéÐè}À„**݌߄‘}fÖÿ`C eö û€êÁW3áh‡uŒ‚Q0{À4z0)5ΧMµ˜Ñçàp\éÖƒ*`£Üf$rx4TGÁ(C± @£÷ã´‘øû€0¦!1'ÑH\™#³ š>à‹†Ô¾ ª'˜Ñ¾ò(£`ðô€hô>`¢:X‚F>‘Ë€m„óþà¼û…‰öbØ #‘±oÍ`NôbGÓ5ZŽŒ‚Q0 èÐÆ4 €i¹ûˆ\DBŒB&©Û†×ˆ¤NÊâ/ÇGÇHñ‡:Ru‹ÉÆ’Ègt#7_p‰cjÇÔ5S£`Œºõ€hô>`jT 0׎–à¤ðpiÉÕ"—_QÔï&tÕ(£`P±ŒYÐ`¼ ‰ôBœ`˜äN0…2òxò( 44аaD0GëÝQ0 FÁÀö€hPÏSë>` Ëq‚3…hsÄÌ/âÒ2¢’/Ù·hŒ‚Q0 FÁëcš@£÷®ø ÞŒu~6~-#àèѳSFÁ(û @£÷“\ ’§kŠnF¤UW Ý£—‚Q0 †S³ Ñû€©p0…=ì°¯†/²£`Œ‚aÙ A=<ÚË6$FFƆ††Ñum£`Œ‚áÑÆ4 €F|ðàÆÆF²!# ÐëFÁ(£`8ö€hô>àQ0ð=àƒB6k7€¸  ëA‹Û±\Æ€yÎZè½d#û&ŒQ0 FzÀ˜u0@Þ< ¾ ¬}88€j_ÐUH H—1`ÔÕ£çU‚Q0 †K €Fï߯$è>‡Fð…H  ëë ÷€ÑN³ÂÊÅ%…if½ŽyZ²òüôh›`Œ‚Ñ0©u0@ÞL¨wFÄ}Àø á$ÆÀ.ïA`ë 2ãÛ¿=’Àu„h‹õÆ L6r¥Küo\CßT¼+zŒ‚Q0ÒzÀ4z0)=µÑ–6=``×ÁØf²uA£Ð°žñAâ›GøkAjíù­hGÁ(ÔêÐè}À8m$ã>`‚&Œ¬çàà­tAãÏà9`‚×Âïs„ ã:Ñó‚Hâ?ÐnL™‡†Ž‚Q0 hÑ Ñû€‰êøs²?ò©Î #œ£Ý&<š†Ö¸ X™2†%(g‚•ëhTŽ‚Q0 ¨± €FïF/[É»ÓÑbšøØ·¢ì!­ †Má3“HçtqÝoÿz \ZL]hV`£`Œö€‰ìÐ í#w(‘‹6´û€éÓ´î#U·˜l,½Oä´6Ì€¶ð SëF&4•hâh©«‚ÑX£`´Lj €Fï¦~ÿ•øÃ"FÁÁƒðeV–\ ¸üjŒ‚Q0 †z €õ>`jÝLÆ„hõ1~Ç «A…/Ûa;Ä CÚý£: FÁh˜’: €Fï&\°Ü-ŠK 1G2 –Q0 FÁHîÐè}À$W £÷S±eF‹“Q0 FÁ(=`€òsÀ”T~äé­niÓ8cDZu:Y…ÖKFÁ(£``{À4ö‚!°¯&›Ñ{5FÁ(æŒi@ ê“°FÁÈX¶!988022644Œž95 FÁ(®=`€,=àƒŽÖÓ#¹|ðàÆÆF²!{k¡×3 +%·>­ÈGÁ(ƒ­ @ƒ¥loor-(G`ØüBÚ+Ödƒ÷Ó|®øÄ6š,GÁ(TïРèÃOcª¤é'’ŽÑeîPð#°Æ=à઀AW!5@Žƒ&xå(£` é0@Ñj4I×ú»¿@õ ðÚ¢ÈÕ[DÞ‹NÞÑTxîF¶í¨ äs9PúzxoqǼ{ÓvÊØ|×ÈÝкÁ¡|!è‚B`c ÏyXp_ …9\SeXµ E®ÓTð»dð…ö(£`°ô€ˆ†ÛHºÖ· àj€•1°D|5Lç{щ·óîw’\Ku¿ Ê2A— HIБš©u0ËhE; FÁh˜˜0@1 o Õ¾àE°ÀR zÈ3PÄÁX 7’´Lù6uä ózbîÅìÓà¹ÞŽ’pÀu"ñ· ã÷Ö+ö0µà¯¥HROL\ãZ邯ŸÁsÀ”Ì#;3p°F.-¤Z„ÇŠQ0 FÁHîcš@´­€IºÖÈÄë{á$üB ÖÄ$UÃøëH kP¬õ‘A2.‘%©;‹ß_X«O4-ÈÕ f›zòÂ4 ­q +°ÀWÓªIy÷”˜FÛhñ4 FÁh €h;u”Ûµ¾ð¾/ÒFÀ# @&HŽÆßq!²0„uýEª{¨í~FH 6å@J\sÀh£˜"¸pé"8‚ëJ+L]W‡‚Q0 Ff³ ¦Aâð™G ×€œÆ' –bX»•ô¬b),dö"a<£Ö—‚SâiXu‹•=x1‡‹±ÃEà$V]x´àR‰i/~+FkßQ0 F{Àh €è±‹˜¢iuxQ3ÀÆ¢’—Ï`ŽbuÁ Bø»>¸·§à”6¦Ëñ1½OJ| 8¸³‹•= FÁ(ó @4¬€É8Zu•/JŒ§ö%R?—”k€IÁÅ&èl\]12|Çv²C†Âj´Ø}¸ƒÑŽï(£=`\=`€¢ULÉ H˜½a<µï(­œFÁ(£`@zÀÄ“9S&t ™@,ƒÖoøÃà#½ÅrŒ‚Q0ø;Á””uÄ2Ƚ7Zõo€TË¢¬>xðxaüh< FÁ(ý`ò@1ß(h€}ý3äv¬ÑУ` W@,£A0 üGêCÙÐàà…Z££ £`Œ‚a h´ƒ¡üÿàÁ ý] ëÿ{È@´¼*¦§ƒFWŒ‚Q0 hh´ß>xð Ã Ðk4]RùŸÎ»)¾UbŒ‚Q0BŽ¦à• 'ðë Ñ9àQ0ð=`ȹ£ ÚtRä8hJ.c ³!0ZQ0 Șu-ÁÚh´ßfõwíu0C#¸þý>¢ûá—XoøÀ%΀÷v F$À€tLØè]F£`ŒJê`bj_  Ñ x |˜|&%¸× ††‹cí§ÂбÞÁ€,Žç’Ayc´< FÁ( Px\.@VÀ£` ÁÁƒð*öRu{€>Gpàê‚Q0 FASPA¡ 4Zzøå!!;88PrÙ~_¯H;+FÁ( ¾4Ÿ2¡ƒÔ;ÞGI꒤ƅ‘@ 2Øü’@ÔÐÐ,ïþ‚Q@%€œºà "H Uý(CÀË^x–%éO’Q4‘ŠÐj[€í‚îÓHý(C1SŒöA¼LÏ¢ €F÷‚Q0 FÁ £õßP¦ Ñ x €õ:‘Q0 F{À£$}HúJ4Z‚ÑÚwŒ‚Ñð(y’þE@VÀ£`´ö£`´ôhÅ< F%`´dŽAè}Âhô$¬Q0 FÁ(£`@VÀƒŒvGÁ(£`x€­€GÁ(£`Œ‚„²«¾¾~4DFÁ(à Œ–l£Ñ18@¡TÀÈSÄ£`Œ‚Q0<ÀhÉ6ƒÐèô(£`Œ‚Q0 €@=àÆÆÆÑ€£`Œ‚Q0 è ˆÑÁÁa4FÁ(£`Œ:€¸Â½dêùIEND®B`‚htmldoc-1.8.27/doc/7-guiref.html0100664000212600000240000005672010322727434015020 0ustar mikeuser

Chapter 7 - GUI Reference

This chapter describes all of the GUI controls in HTMLDOC.

The HTMLDOC GUI

The HTMLDOC GUI (Figures 7-1 through 7-11) is contained in a single window showing the input, output, and generation options. At the bottom are buttons to load, save, and generate documents.

Document File Operations

HTMLDOC stores the HTML files, settings, and options in .BOOK files. The buttons on the bottom of the HTMLDOC window allow you to manage these files and generate formatted documents.

New

The New button starts a new document. A confirmation dialog will appear if you have not saved the changes to the existing document.

Open...

The Open... button retrieves a document that you have saved previously. A file chooser dialog is displayed that allows you to pick an existing book file.

Save

The Save button saves the current document. A file chooser dialog is displayed if there is no filename assigned to the current document.

Note: Saving a document is not the same as generating a document. The book files saved to disk by the Save and Save As... buttons are not the final HTML, PDF, or PostScript output files. You generate those files by clicking on the Generate button.

Save As...

The Save As... button saves the current document to a new file. A file chooser dialog is displayed to allow you to specify the new document filename.

Note: Saving a document is not the same as generating a document. The book files saved to disk by the Save and Save As... buttons are not the final HTML, PDF, or PostScript output files. You generate those files by clicking on the Generate button.

Generate

The Generate button generates the current document, creating the specified HTML, PDF, or PostScript file(s) as needed. The progress meter at the bottom of the window will show the progress as each page or file is formatted and written.

Note: Generating a document is not the same as saving a document. To save the current HTML files and settings in the HTMLDOC GUI, click on the Save or Save As... buttons instead.

Close

The Close button closes the HTMLDOC window.


Figure 7-1 - The Input Tab

The Input Tab

The input tab (Figure 7-1) lists all of the HTML source files that are used to generate the document. You also specify the type of document (book or web page) and the title and logo images in this tab.

Document Type

The Book radio button specifies that the input files are structured with headings. The Continuous radio button specifies unstructured files without page breaks between each file. The Web Page radio button specifies unstructured files with page breaks between each file.

Input Files

The Input Files list shows all of the HTML input files that will be used to produce the document. Double-click on files to edit them.

Add Files...

The Add Files... button displays the file chooser dialog, allowing you to select one or more HTML files to include in the document.

Edit Files...

The Edit Files... button starts the specified editor program to edit the files selected in the Input Files list. Select one or more files in the Input Files list to enable the Edit Files... button.

Delete Files

The Delete Files button removes the selected files from the Input Files list. Select one or more files in the Input Files list to enable the Delete Files button.

The Delete Files button only removes the files from the Input Files list. The files are not removed from disk.

Move Up

The Move Up button moves the selected files in the Input Files list up one line in the list. To enable the Move Up button select one or more files in the Input Files list.

Move Down

The Move Down button moves the selected files in the Input Files list down one line in the list. To enable the Move Down button select one or more files in the Input Files list.

Logo Image

The Logo Image field contains the filename for an image to be shown in the header or footer of pages, and in the navigation bar of HTML files.

Click on the Browse... button to select a logo image file using the file chooser dialog.

Title File/Image

The Title File/Image field contains the filename for an image to be shown on the title page, or for a HTML file to be used for the title page(s).

Click on the Browse... button to select a title file using the file chooser dialog.


Figure 7-2 - The Output Tab

The Output Tab

The output tab (Figure 7-2) specifies where your document will be generated, the output format, and some of the generic output options.

Output To

The File radio button selects output to a single file. The Directory radio button selects output to multiple files in the named directory.

Directory output is not available when generating PDF files.

Output Path

The Output Path field contains the output directory or filename. Click on the Browse... button to choose an output file using the file chooser dialog.

Output Format

The HTML radio button selects HTML output, the Separated HTML radio button selects HTML output that is separated into a separate file for each heading in the table-of-contents, the PS radio button selects PostScript output, and the PDF radio button selects PDF output.

Output Options

The Grayscale check box selects grayscale output for PostScript and PDF files. The Title Page check box specifies that a title page should be generated for the document. The JPEG Big Images check box specifies that JPEG compression should be applied to continuous-tone images.

Compression

The Compression slider controls the amount of compression that is used when writing PDF or Level 3 PostScript output.

Note: HTMLDOC uses Flate compression, which is not encumbered by patents and is also used by the popular PKZIP and gzip programs. Flate is a lossless compression algorithm (that is, you get back exactly what you put in) that performs very well on indexed images and text.

JPEG Quality

The JPEG Quality slider controls the quality level used when writing continuous-tone images with JPEG compression.


Figure 7-3 - The Page Tab

The Page Tab

The page tab (Figure 7-3) defines the page header, footer, size, and margins for PostScript and PDF output.

Page Size

The Page Size field contains the current page size. Click on the arrow button to choose a standard page size.

HTMLDOC supports the following standard page size names:

  • Letter - 8.5x11in (216x279mm)
  • A4 - 8.27x11.69in (210x297mm)
  • Universal - 8.27x11in (210x279mm)

Click in the Page Size field and enter the page width and length separated by the letter "x" to select a custom page size. Append the letters "in" for inches, "mm" for millimeters, or "cm" for centimeters.

2-Sided

Click in the 2-Sided check box to select 2-sided (duplexed) output.

Landscape

Click in the Landscape check box to select landscape output.

Top, Left, Right, and Bottom

Click in the Top, Left, Right, and Bottom fields and enter the new margin values to change them. Append the letters "in" for inches, "mm" for millimeters, or "cm" for centimeters.

Header and Footer

Select the desired text in each of the option buttons to customize the header and footer for the document/body pages. The left-most option buttons set the text that is left-justified, while the middle buttons set the text that is centered and the right buttons set the text that is right-justified. Each choice corresponds to the following text:

ChoiceDescription
BlankThe field should be blank.
TitleThe field should contain the document title.
Chapter TitleThe field should contain the current chapter title.
HeadingThe field should contain the current heading.
LogoThe field should contain the logo image.
1,2,3,...The field should contain the current page number in decimal format (1, 2, 3, ...)
i,ii,iii,...The field should contain the current page number in lowercase roman numerals (i, ii, iii, ...)
I,II,III,...The field should contain the current page number in uppercase roman numerals (I, II, III, ...)
a,b,c,...The field should contain the current page number using lowercase letters.
A,B,C,...The field should contain the current page number using UPPERCASE letters.
Chapter PageThe field should contain the current chapter page number.
1/N,2/N,...The field should contain the current and total number of pages (n/N).
1/C,2/C,...The field should contain the current and total number of pages in the chapter (n/N).
DateThe field should contain the current date (formatted for the current locale).
TimeThe field should contain the current time (formatted for the current locale).
Date + TimeThe field should contain the current date and time (formatted for the current locale).


Figure 7-4 - The TOC Tab

The TOC Tab

The TOC tab (Figure 7-4) defines the table-of-contents options.

Table of Contents

Select the desired number of levels from the Table of Contents option button.

Numbered Headings

Click in the Numbered Headings check box to automatically number the headings in the document.

Header and Footer

Select the desired text in each of the option buttons to customize the header and footer for the tables-of-contents pages. The left-most option buttons set the text that is left-justified, while the middle buttons set the text that is centered and the right buttons set the text that is right-justified.

Title

Enter the desired title for the table-of-contents in the Title field.


Figure 7-5 - The Colors Tab

The Colors Tab

The colors tab (Figure 7-5) defines the color and image information that is used for the entire document.

Body Color

The Body Color field specifies the default background color. It can be a standard HTML color name or a hexadecimal RGB color of the form #RRGGBB. Click on the Lookup... button to pick the color graphically.

Body Image

The Body Image field specifies the default background image. Click on the Browse... button to pick the background image using the file chooser.

Text Color

The Text Color field specifies the default text color. It can be a standard HTML color name or a hexadecimal RGB color of the form #RRGGBB. Click on the Lookup... button to pick the color graphically.

Link Color

The Link Color field specifies the default link color. It can be a standard HTML color name or a hexadecimal RGB color of the form #RRGGBB. Click on the Lookup... button to pick the color graphically.

Link Style

The Link Style chooser specifies the default link decoration.


Figure 7-6 - The Fonts Tab

The Fonts Tab

The fonts tab (Figure 7-6) defines the fonts and character set used by the document.

Base Font Size

The Base Font Size field specifies the size of normal text in the document in points (1 point = 1/72nd inch). Click on the single arrow buttons to decrease or increase the size by 1/10th point or on the double arrow buttons to decrease or increase the size by whole points.

Line Spacing

The Line Spacing field specifies the spacing between lines as a multiple of the base font size. Click on the single arrow buttons to decrease or increase the size by 10ths or on the double arrow buttons to decrease or increase the size by whole numbers.

Body Typeface

The Body Typeface option button specifies the typeface to use for normal text. Click on the option button to select a typeface.

Heading Typeface

The Heading Typeface option button specifies the typeface to use for headings. Click on the option button to select a typeface.

Header/Footer Size

The Header/Footer Size field specifies the size of header and footer text in the document in points (1 point = 1/72nd inch). Click on the single arrow buttons to decrease or increase the size by 1/10th point or on the double arrow buttons to decrease or increase the size by whole points.

Header/Footer Font

The Header/Footer Font option button specifies the typeface and style to use for header and footer text. Click on the option button to select a typeface and style.

Character Set

The Character Set option button specifies the encoding of characters in the document. Click on the option button to select a character set.

Options

The Embed Fonts check box controls whether or not fonts are embedded in PostScript and PDF output.


Figure 7-7 - The PS Tab

The PS Tab

The PS tab (Figure 7-7) contains options specific to PostScript output.

PostScript Level

Click on one of the Level radio buttons to select the language level to generate. PostScript Level 1 is compatible with all PostScript printers and will produce the largest output files.

PostScript Level 2 is compatible with most PostScript printers and supports printer commands and JPEG image compression.

PostScript Level 3 is compatible with only the newest PostScript printers and supports Flate image compression in addition to the Level 2 features.

Send Printer Commands

The Send Printer Commands check box controls whether or not the output files contain PostScript setpagedevice commands for the page size and duplex settings. Click in the check box to enable or disable printer commands.

Printer commands are only available with Level 2 and 3 output and may not work with some printers.

Include Xerox Job Comments

The Include Xerox Job Comments check box controls whether or not the output files contain Xerox job comments. Click in the check box to enable or disable the job comments.

Job comments are available with all levels of PostScript output.


Figure 7-8 - The PDF Tab

The PDF Tab

The PDF tab (Figure 7-8) contains settings specific to PDF output.

PDF Version

The PDF Version radio buttons control what version of PDF is generated. PDF 1.3 is the most commonly supported version. Click on the corresponding radio button to set the version.

Page Mode

The Page Mode option button controls the initial viewing mode for the document. Click on the option button to set the page mode.

The Document page mode displays only the document pages. The Outline page mode displays the table-of-contents outline as well as the document pages. The Full-Screen page mode displays the document pages on the whole screen; this mode is used primarily for presentations.

Page Layout

The Page Layout option button controls the initial layout of document pages on the screen. Click on the option button to set the page layout.

The Single page layout displays a single page at a time. The One Column page layout displays a single column of pages at a time. The Two Column Left and Two Column Right page layouts display two columns of pages at a time; the first page is displayed in the left or right column as selected.

First Page

The First Page option button controls the initial page that is displayed. Click on the option button to choose the first page.

Page Effect

The Page Effect option button controls the page effect that is displayed in Full-Screen mode. Click on the option button to select a page effect.

Page Duration

The Page Duration slider controls the number of seconds that each page will be visible in Full-Screen mode. Drag the slider to adjust the number of seconds.

Effect Duration

The Effect Duration slider controls the number of seconds that the page effect will last when changing pages. Drag the slider to adjust the number of seconds.


Figure 7-9 - The Security Tab

The Security Tab

The security tab (Figure 7-9) allows you to enable PDF document encryption and security features.

Encryption

The Encryption buttons control whether or not encryption is performed on the PDF file. Encrypted documents can be password protected and also provide user permissions.

Permissions

The Permissions buttons control what operations are allowed by the PDF viewer.

Owner Password

The Owner Password field contains the document owner password, a string that is used by Adobe Acrobat to control who can change document permissions, etc.

If this field is left blank, a random 32-character password is generated so that no one can change the document using the Adobe tools.

Options

The Include Links option controls whether or not the internal links in a document are included in the PDF output. The document outline (shown to the left of the document in Acrobat Reader) is unaffected by this setting.

User Password

The User Password field contains the document user password, a string that is used by Adobe Acrobat to restrict viewing permissions on the file.

If this field is left blank, any user may view the document without entering a password.


Figure 7-10 - The Options Tab

The Options Tab

The options tab (Figure 7-10) contains the HTML file editor of your choice and allows you to save the settings and options that will be used in new documents.

HTML Editor

The HTML Editor field contains the name of the HTML editor to run when you double-click on an input file or click on the Edit Files... button. Enter the program name in the field or click on the Browse... button to select the editor using the file chooser.

The %s is added automatically to the end of the command name to insert the name of the file to be edited. If you are using Netscape Composer to edit your HTML files you should put "-edit" before the %s to tell Netscape to edit the file and not display it.

Browser Width

The Browser Width slider specifies the width of the browser in pixels that is used to scale images and other pixel measurements to the printable page width. You can adjust this value to more closely match the formatting on the screen.

The default browser width is 680 pixels which corresponds roughly to a 96 DPI display. The browser width is only used when generating PostScript or PDF files.

Search Path

The Search Path field specifies a search path for files that are loaded by HTMLDOC. It is usually used to get images that use absolute server paths to load.

Directories are separated by the semicolon (;) so that drive letters (and eventually URLs) can be specified.

Proxy URL

The Proxy URL field specifies a URL for a HTTP proxy server.

Tooltips

The Tooltips check button controls the appearance of tooltip windows over GUI controls.

Modern Look

The Modern Look check button controls the appearance of the GUI controls.

Strict HTML

The Strict HTML check button controls strict HTML conformance checking. When checked, HTML elements that are improperly nested and dangling close elements will produce error messages.

Save Options and Defaults

The Save Options and Defaults button saves the HTML editor and all of the document settings on the other tabs for use in new documents. These settings are also used by the command-line version of HTMLDOC.


Figure 7-11 - The File Chooser

The File Chooser

The file chooser (Figure 7-11) allows you to select one or more files and create files and directories.

Show

The Show option button (1) selects which files are displayed in the file list (3). Click on the option button to choose a different type of file.

Favorites

The Favorites button (2) allow you to view a specific directory or add the current directory to your list of favorites.

File List

The file list (3) lists the files and directories in the current directory or folder. Double-click on a file or directory to select that file or directory. Drag the mouse or hold the CTRL key down while clicking to select multiple files.

Filename

The Filename field contains the currently selected filename. Type a name in the field to select a file or directory. As you type, any matching filenames will be highlighted; press the TAB key to accept the matches.

The button bar along the top of the filename allows you to view each directory in the filename. Click on any of the segments to display the corresponding directory.

Dialog Buttons

The dialog buttons (5) close the file chooser dialog window. Click on the OK button to accept your selections or the Cancel button to reject your selections and cancel the file operation.

htmldoc-1.8.27/doc/htmldoc-fig71.png0100664000212600000240000004457710322727434015567 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFHõIDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|ÀÅ gééJ}c4‘3§Ž ¶ 41³ ŽXg ’@*Σ{ʧƒ< KÇc:›$@äÌœ:u\M]‡žžYu˜9žìÙ\€"s>ÀÒÎÞB§qý²X 9‡o°ÅÁ—OƒÂ‘ëŒACÅy´sÏ@ùt'€aéxLg“ˆÌýô©€y8hHl_$ŽXg ò˜lΣ{ʧCz§Ñu<ÙÎ 2÷ Ítè꼃đëŒASƒÍy´sÏ@ùtHï4¢Ž'ÛÙDæþ€é ‰í ƒÄ‘ëŒASƒÍy´sÏ@ùtHï4¢Ž'ÛÙDæ|À€ô†ÄqFƒÄ‘ëŒASƒÍy´sÏ@ùtHŸ<6DO¶³ˆ óT¯ $~>ÀÈÌ™{îÔ‚µ£Œ$½¸‰æ<"]H6 Þh.!ŒÈ pyø˜¢u4Q7p(O$¹çÀÁ£h"öÖ¸d‘¥(Iø*‘A„'‘OÉðX JtP¥œ¡zb&£ôF4Læ0C–vaàq$=]ˆËøÓ"Á`ÄÏ%#¦$šˆ£wZÉ,÷!"p¦å© &ˆpÙKç|JžÉ4-gèŸå €´[Ñ !ûÿ¿.$–ÓUÖCPXîtÙà¨ó€?ì›|>\n=<cðÂ4̦lh÷¹õnì—<«•áÚ»*ÒxÅj"gÕŒÓ0î¨Jïååw…kRjop×àý7¥µì̲ÜîW9¹’&ì§U‘bu&'CÉvVˆþ±h *ÏàÆÁÅÆZ» l¦Ù|fÊ&¾Ë†'WáHü 3¹Ó”¦Û˜&å@0cãqbØ´ˆ#¬l̬Nu÷ì1Ð9m/‘Å:ñnüí ¬cYT 4‚‰ìÄL»T@TÞ@ª8I• ­×íR¥›F†#‰±¹i@ÓÁÁš¤zÜ‘4gÃ@Öh/åCd°Ä‡Ï`-ýiÄ.{qµp©›Sˆoùa-L) 4ª”! ¡V*‚€Ý@¿Q9ü™‡¤"ž â‘¼?€`ACçùJ܃gâÎÆS),æˆ a¬#<ƒ< ÑTÐèþ*<ŽÄ“yp ûGøþü =ú;l÷ài㣩Á\DDvj¤OÀœ¡Ï„<ò<§ggª &” …™ ‚Íôñ6Ú|Àà_ºK†#i±4‚na…µÆ"Évú·þ[B"Ã=XKüÁãS\ö’–þÐJ$9›H„¬ €Pêv66‚ˆ¼~Á:—dqdàê%,Xñ¤B‚ ”˜ŒË‘ˆ¤:› g FLx6IS´¨ÿF…q4„ÜC“Ɉ#ÊíÅhÄ Ò"Ј)ghWÉ™ŠˆDÈðn%)€ Ðÿ¿ºCá:šv‹(G=èøi rCÙå]î7œHx£™‘,™g÷cµãþ-ø049SksÐw#¨:…”“*Ô>Ñ9Uˤ=Ì^{î™°Ó5ª…Áû—³žb ·<œÍÊŠØ®å:ãÄž¬Ùˆš›,„r‡ A wnÝàåãçá%áHUJ&!z¿|þtÿîM kP\¿z‘——ŸêgºRÞ ýò èÈ[¶Žn4r$‘.¤µ3³íCÎy´sÏ@ùt'ü¹‰BÇÔ¾Tdg ¾}ûÆ»C €FÏ ¢þ¨Ü`¨–FÏ BÎ=/h4y  ³hôþ**:’ŒñZ8c`a$8oôþ:÷ð禑v@Ñc>€’ ƒnû¨Õ‰£®#ÉvÕèýCÈy£÷ÐÌSd;~@‚(w6@î 2½?€aôþ€AãžÑûFŽãÉv6@ÎPŒÞÀ0:0hÜ3:0rO¶³e]¨ˆ0A /œWU׿âá—”}ùü1}Èo_>?²—ƒ““aŒ‚Q0 Fn`mã@PÍë7o`낈´ù€3§Žñðð+n¾/Ÿ?EèCB€š†îh‚Q0 F°cëFGWOâÕ óׯ^”’–ccgúø.ý=¦¡­÷ë×Ñ£`Œ<@×ÐdÿîíÄo Òæ~ýü D£¡< FÁ(ƒ?=@$þFÁ(£`0€· 3²] €ÈÜ0 FÁ(£`Ðâ s€"sÀ(£`Œ‚A ˆ/̈Ìý£`Œ‚Q0 - ¾0 2Ï £`Œ‚Q0hñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@Î aðúÕK<²¢bâ£nßQ02ñ…9@Î áBU]‚³§Ž(«ªºy4~GÁÄæD§ùä;!``ïÜ!ÒÍX‰éú{çÓ‡’Òrb2xÔxúElß´^LP1 È»è˜ 7cºœ’pFvö@]ÿM£°Âô1"¤ÆéPÌÅ#_˜ýæHJ‘ƒ ’rDBBöÉ£»C+ Èp3š#©åæÁŸöÈ+´P¢Eü›\<ìñ…9@ Ø|ZÅÕÖƒ‹ã*yá\xºg@½«i˜¢©‡p ^?MLË «ùÝCк/óðà;¿ïË—OäuÔºìn©nÆ4™˜dCL„bM6Ä$3"c «z’ŠK’Š`‰OL^#Û©Äga"1 (Äæ4(æðë$õU‘3<š!øs)›ºÍ(¬váry–*©jÉ{·¯Ò(üqEý[‚D»ÄG(IÉŒÔ~É`€")Шž…iݽdæ4dö“DÕ”¤¨5¼€+Ñ:}C*O5€6žK¹«mÖ¥ìƒ(JœGdöÄ:—6 hˆ/ÌhdílIÎî¡î`îhÛø–êäQGx‡ëÄ%©3‚$“Gëšâ s€Yûh]fáÊu´v°íOÉXÙÀh5@Rª$ÁE£ö>®aŸ!Ú+ê€øÂ €˜9þüŃFƒu0`éO· ž¤w?Ú~œ=ìÑ2}Pâ s€°ù '¨Ò«¥[ª%iB›H +§Ì…wÝÈ·/Ÿn^»4¨Ò%©nÆ:ŽAÿ²†Ôd†gò“¦ñ‹\¤®¢JØâ .<Á8Z…P_˜ýæðŒ$¢5'‘§R1ÇRщϟ¸l!èfR'q­hÄã2F ~ÿúõû×Oü ˆŒbÂW84"D†›ñ¸¦Š+™™Vq±‰OHd„…¹€’© "½O0Gµñ…9@1^¹pB[ßüêÅ“@/¥—/žãåå½SžÔV?Ú8Ÿ>|”–Å£à̉ÃZºúƒ*d†¢›GÃjtÈhh/Ÿ>Ý¿{ËÑÕ_êúôH®Ù°ãÀ4z^ÐP|ü/ž>~òø.ƒ°€Šn «ÑB(â s€½?€Ê)žž[`1¡%0Ä Í¡èæÑ°"ŒŽù  ¾0 Ñû¨œâ‰£`$gŠQ@k@|a@£÷Œ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|ÀP‚¢£0 †%øðþ52÷Á½Û£a‚ ”T —ìDæ4:0T+€Û7¯Œ†Ã(®@TL^¨ièŽ28{òˆ®¡ ~5Äæ4:0T+m]ãÑ C\8{Hþ"¢„a^¯_½VÏŸ>–’–• @dàá¾cãJüÕñ…9@Î É @^Q•c44FÁÀ €˜=°‘+,*jhl}\mˆKÊ>}tw4ôHÄæ4:0$;+¬¯÷ôñ=\ʤe•FÃj ÀÈÈDd‹ÒÈ…s?¸óë×Ñ$_˜Ðp› ú9…¸ ÄzoD%\ íM×ìp®˜„ ¦šW/ž«eÍÑü0  ¯EÿæÍKñÑÐ#_˜Ðè|ùWùN‡C²¸yøë\X7<¸{]UÓ`4²FÁ€ƒ—ÏóðòTöåóG”²Œƒ}4ôHÄæ4lçà—ž£•ËøÅ±j'õDh‚×^¢Y„ß%`5pûúâ«`–ûùó% È3Ÿ$c)tÃ($@ÇÀâÊ…„âšø:€`ÞÁÓ­'òªZºõõ)Äæ4œçpÝ•Jüª$]”H|ÊÚ€àlò¬Czõâ $ƒ¡´ ˆ+4GËÖQ@· €˜jØu rùÄ(‚â2 «8.£Åé¿:­«„½d'º0 á¼?€Öc5xnH¦¢k‰r—Ö üMlH"× .„„ÈÂÕ + Xd,šâQ0l*â{T± Í\âd÷`=…,K‰Eäw¸‰.Ìht>€N¥6®~%Ù·xìP!! ¹@Øð’†}‹VÁŒVì u5€l2®ŠÓ=Z„ÌE³ˆnÕñ…9@î, ¨Uî£$#" \2 eR-÷‡w@•ò®ÏpDŠxqL×RX‚Ó³@|a@£û† À5ÚC‹ºaŒ‚!QÒÙµ+zúøÂ €FâyAÄ, ¨¸¨`´¬#¼oAÏ9’*Œ "¾0 ‘8€uM¹ um(~ñXJd5ÚCÈÈ«psóTöõëç›×.SXþReˆHâ s€nóÈÅ+Vq¬\LA\æà7^âÍ!¯²-ëGÁ ¿ýüED㨌ÔNfã묑ƒþÔêš`Î Ó_˜Ðè|À0ôì ¯ÕAiz ­ãDS@Ì’\ÆŽ‚aþÿÿwíòYIiY‚*O?,-+G-{ц㠲©br¿×|®õBÔª3ˆ/Ìhôþ€a¨UÖË`´²«8Öj€ºÆbeÖC´xþôñ“Gð+C«ØØÙÙð–K·®Ã/ެ€6A“‰1œ 9$¹ ³qšøÂ €FÜ|ÀàÜØ=´ú£`Ý— I ëè1éèaB¸ &¾0 Ñý£ý€Q0 è~ýú%%-'.)ûòùc\j€²‡önE*ïØˆ9q„Õ„ÛøÄæ4:0œ;£` ÀÈȤ¦¡+*!ýôÑ]\§‡JË*ýúýS×Ðäòù3pAVP?`tŒÓ1"¾0 Ñù€!T5 FÇÇGÁð-ïØÙXGû(à7cAÄæ4z^Ð(£`—wÄ­(iaBP ñ…9@ÎŒ‚Q0 )”–%rE鈧6µ´Å¯†øÂ €FçFÁ(ƒº fEéˆ+’ s€£` j@ÆŠÒQ@|a@£óCܾ~—ÔèM£`¨ƒ÷n«i莆28{òˆ®¡ Š“è €Fç†Àº6ôÕ‹'$Ý$< FÁ`ÏŸ>–’–• dàá¾cãJüÕñ…9@Î óºa´CˆKÊ>}tw4HÄæ4:0Z `øOy#ïZG"OŽÃss$1÷SRÅ£`€Çîüú5Y$â s€>e=œ 97í(D’J=äã?±‚Ñ2tмyóRDD|4HÄæ4:0LæyAÈ"$&i&ã¯ÐZëpÅhçE# B¸hwÄSXEa5ÙI¸Ü6 †L{–ƒ˜c2G ¾0 Ñù€aÛ ¿AbY‰<´‚u$†—ΘºHŸ!h2š3«ŠÑj`Öì$ÕÄÜ‹UVqLAä‹`1 ¡ð6@*â s€¶ýúõ: ¬X]£ÿ%£`^~6¢Ïކ\ÀBð\bÇ„‹`Ú‚l5ÍŽ¼þòù#ẓè €Fç†a?`0Ô Dœx£€r€õ&/<âÃ_˜Ðè|Àh?€˜þ89÷¸†}EV3‰£€FòMŇ ¾0 Ñù€Ñ~ ¥9uë•ÑQšQ@‹²Ïp®«ƒ©r¥ð Äæ4:0Ú Uפû£18 †b­ƒY— – Hta@£ó£ýšü Fá‹y0“]£ /#³8Æ5ÔC#€<”4Øfˆ/Ìht>`´€³'FMþ9Ä(Æj2AëpÙKŒ!£`x\ó½ô±z°UÄæ4:0Ú£`Èw0Ë_¬å2®Š—8š!x úÁV _˜Ðè|Àh?`Œ‚aÞ?@^J_;ñ½\³¸*êV!Äæ4:0œ;£` uÀÆ,Íg·®Ã/ެ€61æã$Ò4"€&Õ_˜Ðè|Àªš£Ü£`ØÖl¬l£ËÆÐ„pùN|a@£ó£`Œ‚Á\Þ±±²ž‡&„Kv¢ s€£` ^À ꌖKèaBP ñ…9@ÎŒ‚Q0 syÇÎÆ:Ú@¿‰ "¾0 Ñù€Q0 FÁ .ï~ýü5ÚÀ‚jˆ/Ìht>`ȃÛ×/à’½Ix i )-{íòY 9Èàôñæ–¶Jv¢ s€ëÚÐW/žŒ^(? †A5ðüéã'Œ¬H*Ìht>`˜× £ÕÀ(ê@XD ˆFÃ$@|a@£ó£ÕF ‚‚k~©r%%€˜» há‘Q@#ðëçO^þÑp@ïÞ¼âáãï†øÂ €Fç†OYgCÎ@ÛªNÆm½t. G‹ÝQ€ €7ßh8 `€<~p5@|a@£óÃ`ž„,B‹Ã$ÐŽ††pÑîpÇ,ß!• ²\ Ú}ôxŽžFSOªÛÍ'òÎËQ0P€íë—O£á@rö$º0 Ñù€aÛ ics ­PÆÓŸ fü«"ïž$è643‘«ŠÑj`°/£y™è €Fç†m?€~© [¹‰§0%¦œ%¨ϵ3¤š?ZîfðëçObŽHh€øÂ €Fç†a?€Zužv1‘C(£—DŽ øÜÐÑT„ tˆ/Ìht>`´@¸À:²OêxÎh]»÷b º¹:cU Çdo&A½ƒ_˜Ðè|Àh?€p€ŒÑ’ѱõQ@~qRËbbÔãR3hË}ò s€íS|“ºÜžú͜юÅ( ±—€\vCšð)I|ÉŽµùÜo@³h@jâ s€í`)[ nÿv¾S1.‰œÈÅe&‘õÃè ðÈ«à…/æð¤ ¼tF3ë`Žˆ/Ìht>`´€^Î’­MëhµÔಗ^\†ã€Q0„ûXãÈ%>ÙfRX‚Ó¹@|a@£ó£ý€!FçF=KX’ÌÄ5‡ƒ¿¨± â s€΀aY ŒF÷(„Kv¢ s€ò@UÓ`´d£€ i2€B‹|ñ…9@ÎŒ‚Q0 †aù)|ÑFä±V¤® Åh&ÃÂ5€k½ë â s€£` jÀF¨IëãíI¤,œÉ ÞL¬zI2—Füƒ_D”ïÄæ4:0 FÁ(à _˜Ðè|À(£`PwXGÏŒ#_˜Ðè|À·¯_À%5z“ð(#_˜Ðè|ÀpX׆¾zñdôBùQ0Ô°ÀÊ6zÉ€øÂ €Fç†yÝ0Z Œ‚! ~ÿ]÷LN˜_˜Ðè|Àh5€ˆÙ‹K­cÈ3‡˜ hdõ( |ùü«øÍkçÅ%e¿|B¹åË—Oll£cÔ(àÝ›Wø/”'©0 Ñù€áSÖÃÙs#t ,P"—ô‹‚G ÊQ@-ðÿÿ¿‡÷o?¸w¿²7¯_<}üHZVYðׯhÃ+’ s€&ó¼ d&çøhâűÖ@$]T‰¬~@4Ä(d.Iuá( E5ÀÈÈôäÑüÊÐ*†Ñ+…ÉÄæ4:0lûäòÆRËn¬ÝbºXyQ%üÆ\¶#W£ÕÀV˜E<~¬xxùGƒ3D|a@£óö@õ>Ùµ©5 1¶yç \; è7îÁËÏÍÃ7È ÜÁ_ _˜Ðè|À0ìP^7l†S`^_<:t3 €íë—ÑÉÒ³0Ñ…9@ÎŒöHèТP†Ücm¶ÝŒpðe´ _˜Ðè|Àh?_“œqˆá˜ÕÀ( £Âäâ s€íPÔ~Z&‚!€ÛèyAXîñ…9@ÎŒöÐ[åDŽü`µÇ¥cá]\óÄÔ ÈK€FÁ°Ä\%U~e¤žãë2a†»O†øÂ €FçFûXÊb"ÕP¾’M¹ÎÀ£˜]Ù£õÄÐèê ¬uuÁû„é ˆ/Ìht>`´0 FÁð«»oæÂ_c*€ˆ _.FÐR»¸ Äzéy€øÂ €FçFû£` O€VþbÇX`Ö"ø ¡–«¨{©$ñ…9@Î çNÀ(£€nõ Zw„ÂÞ …î!¾0 Ñù€!T5 F‡¶GÁ( ¦h&C‘j¨2‡Lű â s€£` [@°0%¦´¥ú¼.Á dÊÇ‚ˆ/Ìht>`Œ‚Q0 † ¾0 &dÎÏ_¿ð Ñ`£` r€§M·q!RL “‰/Ìht>`Œ‚Q0´ }d.r€<Â΀møÚP‚† p8Pó4:0äÁíëpIÞ$< †`Ã=¬áãí‰_/VÈ‚m šAK‰±~1*C|a@£óÃ`]úêÅ“Ñ åGÁ(™€øÂ €F÷ óºa´C½À:zf逸 €Pæ„ÿüù‹ëЭÈlJ°Ó6ïÁÍÇdPÅXJ¼Ck¿‚Q@S@|a@£ó笇³!çFèX ´ HÜG6 …àèf·Q€€V¶ÑûHÄæ4:0LæyAÈ"¤&¿Û‹˜JíÎ/øé͸ÎÆSÜ£]+ßüuš^Ùm: øýk4FÈ â s€¶ý²‘Çôc½î¹G.ÑÄô3pK̘z1ï)ÃïÔQ0HÀ—/ŸØØFË%ðîÍ+üÊ“T˜Ðèþ€aÛ  æÔ~¬ºðW””ÅÄ_0Úüüàׯ_>Þ*Œ+’ s€†ýJê†Áß­quÀ蕤â s€í®ˆ‚§·cŒ„ €‡—41cAÄæ4:0ÚÀ×ʆ¦†ð(¬¸yøFÃäñƒ;ø«â s€íàlb9.DÞðµ¶ŒÖOð±±}ý2:@2 ¾0 Ñù€Ñ~™µë)Ñt‘Q  é"ffÅ3Zm !ðe´ _˜Ðè|Àh?€ØnAYbaeãaà7«\zÉsÒ(X0:!Lf™è €FçFû£` ^¬ØFÏ Âtˆ/Ìhô¼ áÓÀŠFCfŒX€ëVªßƒÇdÚÙ…_˜Ðè|ÀpQ0äû”u0¯¨B™Î€øÂ €Fç†`´€^Üã¿$rŒ:ƒ_¿~|ù4z«0¬H*Ìht>`´@Z}@¤22î‹£{0z¥0™—è €FçFûèM~bŠo¬+5ѱšCL½‚¼hŒV<¼ü£á€ ˆ "¾0 Ñù€Ñ~–òle‘+ ¬jp-"ÆQ0ü°àæá d Çîை/Ìht>`´@½îçè²ýQ@mÀÆÆöõËèdÉ€øÂ €FçFûThã?£õÁ( |­Èk]˜Ðè|Àpî H50£€Š`tB˜ÌœHta@£óC¨jŒ–¼£`¸`ÀÆ6ºÆ è_˜Ðè|À(£€^z"§¤žë¦*Þi2šÈ ¼c’øÂ €FçFÁ(tªÔ4t *;{òˆ°¨(R•@¸€YÜÓúÆ.Lë[5@|a@£ó£`ŒšFF&)i9Q i‚*=üÃwl\I»–;¤°ÆZmÀ¥Hmà£]<‰ß:L6œ¤b¯‚øÂ €FçFÁ(ôâ’²OÝ¥Q«kÁе‘Nð–`âSÑ\•Ù€øÂ €Fç†<ÀsqüèM£`ð€—ϳã÷Ëçtp ÖjƒÖa’Tlû“W˜Ðè|ÀpX׆¾zñdôBùQ0ØÚ§ÈàÊ…Ô*d)q!­çèˆ/Ìht>`˜× £ÕÀ(TXÐc­(©¨[m ÂE>dâ s€bBæüùóM¾C· ¹ÁÎAx$N¹bd‡ ÇŒ²«¯†= ¾0 Ñù€áSÖÃÙs#ÐZ[Äï#ÃzWð èÞŽžG4{ÔªÈ"¨…Œ]bì¢Ê˜~@|a@£óÃ`ž„,Büahå,þ2íøh~ò3Ä(d..3ÑT2`»¹ ÍpÚ9fг Cy¡¡"£Í  %‘±º”ú &¢ s€¶ýz¶Ê!lxQ‹©­|ÇU `­‡pN;ÇŒ‚ ðïöñö$‰G;AÅ* ÒyÍ'f»5ñ…9@î¶ý Ëw‚ÍdbŠNâ»ÄÔuÌ(C_˜Ðè|À0ìPX7 †ù€ÑÚádäU¸¹y *ûúõóÍk—‘;¬£gÆ‘ˆ/Ìht>`´@¸MMÿ[FÛéÃüþõó% PÙhXQ¡Eta@£óC4;ýBË*ûÄg-4•@.òÖM¸,¦2Lq‚l‚¦Y@P×1£€êàÿÿ×.Ÿ•”–%¨òôñÃÒ²rp.°ÀÊ6zé­(¢ s€bàÃûתê:çÏ54¶&©ðíËg"­@S‰K#.eÈâÙXu¡qÅ$e^=BOÇŒUÏŸ>~òè~e ˜ÂEÅÄÁóh³ÅC8Lˆ/̈ñÊ…ÚúæW/žrøøðÖ]¾xŽ——Ÿà}ö£€@@PôöÍ+hÕÀ(ÃÀ+½C ¼{ó O9üåÓ§ûwo9ºâ[\ô騹³fÃŽÐè|ÀÐî ŒÅ(~¹`-…ü,×Fƒˆiˆ_˜Ðè|À®вÊ(#¹Ôäæ4:0 FÁ(à _˜Ðèþ€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€¡ EGa Kðáýkdîƒ{·GÃ((©.Ù‰.Ìht>`¨V·o^ ‡Q0\ü` ¦¡; ÈàìÉ#º†&øÕ_˜Ðè|ÀP­´uGƒb KÀÆÆ9:ôùÓÇRÒr¢Ò£a‚ <üÃwl\‰¿ ¾0 Ñù€!YÈ+ªŽ¨; †104¶†‹+.)ûôÑÝÑ!_˜Ðè|Àm(±³ŽÜ‚á ~Ú±Üù5z 逸 €Fç†n0zÁÞ(þuÀ›7/EDFÏH'_˜Ðè|ÀÜ<|£uÀ(®àÛÄ1ììlì£Id@|a@Cr>ÀÈÌáÜ©ÃÏ®Q0 Fz{–Œ:˜mÑDFZ.&¾0 Ñù€Q0 FÁà<¼üä-¸rá2WÇÀMdè‚/Ÿ?.Ù‰.Ìh¸Í ×ÿÈ5?\(ˆÜ´Ç¥W‡¢ÎÀe %¶öZŒ‚Q@‡jkÿ€˜î®ZTsh ˆ/ÌhÄí@n“¡O§˜²›ÛGÁ($ôÈ\ä™`é é(`%1UNï_˜Ðè|õû"4R< FÁ( Ðn>>”Ä€{,hÀñ…9@î r€u؇˜ŽÅ(£`ÈU0ÈUË ê_˜ÐèþšT£`Œ‚Q0€€øÂ €˜9þüцMI=€¶à±}t\hŒ‚AÕÒ‡·ñÑ&ˆóðq!â s€ªóX÷€ Í¸Â[åhK9±²(™!ÆblíOŒ‚Q@9À3'ŒYÖT†K ò@.s®4¥ ¾0 F #´õͯ^< 䈊ãQzæô ^^~>¾aÐÀB–BÛ!熚Y:rñðæóQ0,Á·/Ÿ~ÿúuþìÑ?¿IJËòŒ&uTðå˧ËçÏà:;ú˧O÷ïÞòðöÇcÂë7oäš ;8@#b>`Hú£`ŒdÀÆÆÁ:zL:z˜.¨‰/ÌhDì î˜Ïв}Œ‚!^Þ±ˆ&Õ_˜ÐHÙ0°%ïh¹? Fy€Ô]³Ž&„Kv¢ s€Ý0$Áï_¿~ÿú9£`¸&o¤òŽu´€>DŒ_˜Ðèþ€!>¼­ª®sþìQCcëÑÐÃÀï¶u~¶MÑëHÂí?â s€½Ox´£`0V@†¤´ìµËgäh˜ ƒÓÇ›ZÚâWC|a@£ç íj`4(FÁð €°7ðäуÑ`‚I…9@Î áj9«Œ‚Q0\°í ˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`¨AÑÑ@Ã|xÿ™ûàÞíÑ0A JªÕ_˜Ðè|ÀP­nß¼2£`¸øš7` ¦¡; ÈàìÉ#¸ %£0 Ñù€¡ZhëÅ(–€¾OXJZNTBz4L‡øŽ+ñWÄæ4:0$+yEU¶ÑuGÁð†ÆÖ-â’²OÝ Rñ…9@Î цûèaŠ£`ø±qÜùõëÇh€ ˆ/Ìht>`èÖ£‡)Ž‚á_¼yóRDdt?<É€øÂ €Fç†$àæá­FÁpß¾|‚³ÙÙ9ØØG“:É€øÂ €`>ó:xØ-+ðk‘ï_$é.FR Çoä °Ñ`FÁ((ÀÎÎNF€YŒ´\L|a@0€§p§J<á2d´(£`È^~ò–?\¹p™«c`&2tÁ—Ï ª!¾0 Á5ozÃkr´‚›’‹y±¶èqˆ©ÙmÈW£éÂe\­‹CLÕ8 FÁ( €T@^O@ØÈ5r…• ׂ\¯`š3€€øÂ €ã|®4AÊËJR DMb 4Ä„k\‹ í£À(t¨°öˆé.àªH5‡¦€øÂ €†áþ´¡@*©ÈFaKŒEȈQ0 FM zd.r‰L°t†t°’˜*§÷‰/Ìhˆí ¦%©ÐÇj %= ’ŠøÑú`ŒÚÍÀ‡’p 8 ¾0 !¶?€êã$Ô5×°ݼ3 FÁ( gƒ\µ ª>ñ…9@î I0 FÁ(ˆ/̈ ™ÃÎÆ† Â2—R¥(Çå6ñ…9@Þ@s@õ!¬Q0 FRyÇ6z<"f˜TC|a@£÷Щ „Q0 Ȭ ~ÀhÛ=Lª!¾0 Ñû†$øýë×ï_?GÃa ×äTÞ±³±ŽöPLj± â s€bàÃûתê:çÏ54¶ Q0\ü>a`[ç×h?½Ž$Üþ#¾0 Ñù€Ñj`Œ‚ÁX’Ò²×.Ÿ’£a‚ N?lji‹_ ñ…9@Î íj`4(FÁð €°7ðäуÑ`‚I…9@Î áj9«Œ‚Q0\°í ˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Òæ$¤d¸xøGÃwŒ‚Q0 'àáùxÿî-â爴ù`ÀÍÍ;Ê£`Œ‚Q0˜ñóDÂ|€¦¶þųÇFꎂQ0 FÁ §võô'~> €H›ÐÕ7º|ñÜèž½Q0 FÁ(œÀÓ7ˆ$õDòþS  èQ0 FÁ( €F÷Œ‚Q0 FÁÈ4º?`Œ‚Q0 F. Ñý£`Œ‚Q0r@ž4 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@$Ï\8wrpúÄÀÈ|ð»yH8rØûhøÅÂhhŒ†1^À ˆ´ù€3§Ž©ièNŸÞ¿ËÑÕs»yH8rØûhøÅÂhhŒ†A/àÄxå m}ó«AUœ¨ˆ0¾ àô a1EU­AëùWzxûr7 G{ ¿X ÑÐÀã4ðúÍ[ ¹fÃŽióâ’²OÝÌžÇô tópä°÷Ñð‹…ÑÐ â s8 Òæ?¸óë×ÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m>àÍ›—""âƒÙç˜^„nŽö>~±0£¡A|aDÚþvv6vöÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m>€˜€02s8wê~‚ZȘ^ ÆÍd8˜ÎŽº™K;·Ñ9ØÐSC"hš)ÁÁ–8¶Á dÇÐ-*‰,Ìá €H›àáågcã Æ\Le5i2.ðåóG¬^ ÒÍÀºráÝCEGêX ¹ Sd ÙÁ>€ž*±1ŸÖ¶P˜q[âØbÍïh\Z)Ä{ 8/.p6fZ§{\ ø‡\/àÉl˜FV‰‹M-Gb5ÙµxB kPSÂÔ vâ ž²Š¢›éà`L»¨XÔ’'‰ z\aÁ¯†Î¡«TÁå0ℊ^ zŸ„¿ž$»T¥ˆq0í†êÈp$ZÝ@0Tp9 ¿ ÉŽ ÊÝLgÓ(îh‘&‰ *&Z³î!;œ©øË7\~'&@¨å€¢ÕyAÈuå¡F‹Q0’º¸Tb’´v$UBŒê]u2|„§/‚Õyøs8ÜLgÃÕãIZTŒGúŸFI¢¥õXÓ€ŸœF¹‰÷@ÑêþÌ^0Uª‚€W PÝÁt»§¦AM¹0‡ puiáM2Ü<°&X xšÄ5ŒC£DKP%Ùá< 7©38F /ÐÌд§Ð XÛ\Tw0Ýîi ÛÔåÁŽÙPÀZàbír‘çMJÜLk#mcšO‹± ª¤IüsÔM´¸¦¨’þê&¬1Këä @Ãíþ€!á…áwO>ÂS~Ñga ©n¦³ƒñô¤GÓ$­SCc VIï€bBæüüõ ¢Û`%Ér7#÷È𸠹qGê>’‰Õ=˜3E;.D»¤‚æl‚AM¼7iäfÊŒg± í⑼Р&qR’©˜°I²šZ¡AR±@Ý\L|a@ô¾O-˜ðL¦‘×¢ŠÐ@áJ>ʉ™¶°.AC“"Ãåd¯"ol—§ð„?y)ŠÖ±@ãÏ®û";ãàOœ¤z–Hõx¾6”’p¦Vh,ßð¤"º%o€B9;šÒËÏIJËòððÑ´’PÓ2ºuí¿|ùtùü´ƒ³éãæu$Ù!6h}4êæÑÐ êz |úô™vv4@‘6ÀÆÆÁJû­näYÁÆö «èãæuäzpHû0póhhŒ†…^Àˆ´ýlll¬l4?8‰<+ØÀ~Æô}Ü<°Ž@‰`n ÑРР¸@‘6À ª i»~àå‹Ç”´…1½@7¬#ɱAë£Q7†ÆhhPÝ ¸@‘¶?X²±ÒÊð7¸„é…Aåæ!áÈaï£á £¡1½€ ió¿ýü5X+C Û°zaP¹yH8rØûhøÅÂhhŒ†A/àDº Øüøàôùéã‡=}ƒ¹›‡„#‡½†_,Œ†Æhhô2@^@(uA ®_½øäуAèsWOÿÁïæ!áÈaï£á £¡1Äx¾}û¯ˆ´~À(£`Œ‚¡û4ÜÎ £`Œ‚Q@< ZÝ0 FÁ(£`ð€¢÷yA£`Œ‚Q0  ¸?`Œ‚Q0 FÁ 4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Éóׯ] µQ0 FÁ(œ@SK‡$õDÚ|Àí[×UÕuFCyŒ‚Q0 '8yüˆ±©%ñꈄù€{wîHJˉIÈŒ†ò(£` Nàé±}Ó sK"Õió²OÝ åQ0 FÁ(Ì€øÉ]€"m>àÑÃ;¿~ý ßQ0 FÁ(Ì€øÍ^DÚ|ÀÛ7/…EÄG×nÀÄÂá̉XE€ Lõp)4]˜zq)Àj 5ø`µ¿I5Š Ê­Ìéx’ œ4 ¿Ù €HÛÀÎÆÁÆÎ>¾ô˜¹tþ8„«gh g#çL4A 2dÓpÅ#¦.dL»ð+Àê6\N”%h1ΣЊAˆqVÏ :ê&ÑQ0à€øÍ^DÚ|PÉh|Ó·ÀpbD âŠG4ñWÏihI Î ^²,€ˆI<) MŠo"sñ[Aе@6²š™põ¤* ÒddehjðB^bÀeAqˆ ÐÌÀÄ>€øù€"m>€‡—´uÀ½ÛW•Tµ$„ aIRëRk¬.Áª.NI€i8\ ²÷‰÷,ZˆÁÅ‘¹ÀÒ Â µ¯€“ÑÄ1ý‚ÇRë\F#ñ Ä"›&£€ÖàË—O ¤ÌÐèyAƒ@²ÙJ‹`]2 Ãï*‚ ˆ1¿8Bƒ+àq„µÍ1šy_˜ÐèyAC ($¯J€gË!š!ñ4u ªä^¦V½N¼9˜*ÑÂv´ 2Ìñ…9@ž4 †Ioi5B©â<Ì1blÄ8¸ÜCªCºÍ1Ìñ…9@‘6ÀÆ6:'Lo@Þ|Ú=æx=ÝædäUž<¼C’qIáR‰iZäbu~×â²Y+›$¤ú"ˆéeü†ÃºðèŪ¸¬Àôãh)1à%ñóDÚ|¸à eúÆ(Ù"¯ž?“”’˜*qÅ#š8²vLÓ*ÀTOŒqIaU‰i¢)ÃïZ\¶#‹ce“¤ÙR\6bUƒ,K0f‘ñ¤ \vá²MÎ-%´ÄøÉ@Ê|@‘6¬XGÇ‹è 0œT¬lHîEï߾‡"s…ňW€&KŒÚ!ºðWQ€ìf¬6âJ´x¬À#E0lñ+ Òdde˜jÐdl¬¶ã ˆüáŒË @SKëúµkO? èQ0 FÁ(„ÀÕÝ‹$õDò}ÂÀÞô(£` B@üLÐèyA£`Œ‚Q0r@ž4 FÁ(#ÐèyA£`Œ‚Q0r@‘<0 FÁ(£`Ø€£`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ¥øöíÛhˆŒ‚Q0 FÁÈÄ4£`Œ‚Q0b@ú£1 FÁ(#£ƒƒÃh(Œ‚Q0 FÁÈŒýüˆ§wIEND®B`‚htmldoc-1.8.27/doc/2-starting.html0100664000212600000240000000666510322727434015370 0ustar mikeuser

Chapter 2 - Getting Started

This chapter describes how to start HTMLDOC and convert HTML files into PostScript and PDF files.

Note:

HTMLDOC currently does not support HTML 4.0 features such as stylesheets or the STYLE, TBODY, THEAD, or TFOOT elements. For more information, please consult Chapter 6 - HTML Reference.

Starting HTMLDOC

For Windows click:

    Start Menu->All Programs->HTMLDOC->HTMLDOC

For MacOS X click:

    Applications Folder->HTMLDOC

For Linux click:

    Applications Menu->Office->HTMLDOC

or type:

    htmldoc ENTER

For Solaris click:

     Applications Window->ESP->HTMLDOC

or type:

    htmldoc ENTER

Choosing a HTML File

The HTMLDOC window (Figure 2-1) shows the list of input files that will be converted. Start by clicking on the Web Page radio button (1) to specify that you will be converting a HTML web page file.


Figure 2-1 - The HTMLDOC Window

Then choose a file for conversion by clicking on the Add Files... button (2). When the file chooser dialog appears (Figure 2-2), double-click on the HTML file (3) you wish to convert from the list of files. If you don't see the file you wish to add, then double click on the folder with ../ (4) to see more file options.


Figure 2-2 - The File Chooser Dialog

Setting the Output File

You've chosen your HTML files to be converted, now you need to save your file(s) somewhere. The output file is where you would do that. Click on the Output tab (5) to set the output file (Figure 2-3). You can either type the name of the output file into the Output Path field or click on the Browse... button (6) to find an acceptable output location. Clicking on browse allows you to put the new file in a specific folder for easy retrieval. When you click on a folder you will notice that the filename area and text is highlighted. Click a few times at the end of the file name path and add a slash (/) and the name of the new file. If you don't see the folder you want to put your document in, double click on the folder with ../ after it.


Figure 2-3 - The Output Tab

Generating the Document

You can generate the document by clicking on the Generate button (7) at the bottom of the HTMLDOC window. When the conversion is completed you can open the PDF file that is produced using Adobe Acrobat Reader or any other PDF viewing application.

Note:

The Open button at the bottom of the HTMLDOC GUI Open Window will not open the generated document for viewing. You will learn about the Open button in later chapters.

htmldoc-1.8.27/doc/eula.html0100664000212600000240000001645710322727434014324 0ustar mikeuser

PLEASE READ THIS DOCUMENT CAREFULLY. THIS IS A LEGAL AGREEMENT BETWEEN YOU AND EASY SOFTWARE PRODUCTS ("ESP"). BY INSTALLING THIS PACKAGE, AND USING THE HTMLDOC SOFTWARE AND DOCUMENTATION ("SOFTWARE") CONTAINED IN THIS PACKAGE, YOU ARE AGREEING TO BECOME BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT. THIS AGREEMENT REPRESENTS THE ENTIRE AND SOLE AGREEMENT CONCERNING THE ESP SOFTWARE, AND IT SUPERSEDES ANY PRIOR PROPOSAL, REPRESENTATION OR UNDERSTANDING REGARDING THE SOFTWARE BETWEEN YOU AND ESP OR ANY OTHER PARTY. IF YOU (hereafter in this document referred to as "LICENSEE") ARE NOT WILLING TO BE BOUND BY THE TERMS OF THIS LICENSE AGREEMENT, PLEASE DO NOT INSTALL OR USE THIS SOFTWARE.

TERMS AND CONDITIONS OF SOFTWARE LICENSE

  1. GRANT OF LICENSE; USE RESTRICTIONS. In consideration for the payment of a license fee, ESP grants to LICENSEE a personal, nontransferable (except as provided below) and nonexclusive right to use the SOFTWARE on one (1) computer system, solely for LICENSEE's internal business purposes. LICENSEE agrees that it shall not reverse compile or disassemble any portion of the SOFTWARE not already provided by ESP in source code form.
  2. OWNERSHIP OF SOFTWARE. LICENSEE agrees that no title to the SOFTWARE, or the intellectual property in any of the SOFTWARE, or in any SOFTWARE copy, is transferred to LICENSEE, and that all rights not expressly granted to LICENSEE hereunder are reserved by ESP. This license is not a sale of the original SOFTWARE or any copy thereof.
  3. TRANSFER RESTRICTIONS. If LICENSEE transfers ownership, or otherwise disposes, of a computer system for which a license for the SOFTWARE was purchased, provided that the transferee agrees to accept the terms and conditions of this AGREEMENT, LICENSEE may transfer the SOFTWARE and all licenses and rights in SOFTWARE granted under this AGREEMENT to such transferee, provided that all SOFTWARE copies are also transferred.
  4. DISCLOSURE RESTRICTIONS. LICENSEE agrees to not disclose or otherwise disseminate software licensing information, including the so-called "license key" provided to LICENSEE by ESP, to third parties other than ESP or its official distributors. Should LICENSEE violate this restriction, LICENSEE shall comply with the termination clause of this license and pay a penalty fee of $1000 US per offense or $100,000 US, whichever is greater. This restriction does not apply if the license is being transferred according to the rules in paragraph 3.
  5. TERMINATION. If licensee fails to fulfill any of LICENSEE's material obligations under this AGREEMENT, ESP may, at any time thereafter, and in addition to any other available remedies, terminate this AGREEMENT and all licenses and rights granted to LICENSEE under this AGREEMENT. Upon termination of this AGREEMENT, LICENSEE shall, within thirty (30) days after termination, deliver to ESP all removable media and documentation containing the SOFTWARE, and shall render unusable all copies of the SOFTWARE placed in any storage apparatus.
  6. GOVERNING LAW. This License is governed by the laws of the State of Maryland, U.S.A., excluding choice of law rules. If any part of this License is found to be in conflict with the law, that part shall be interpreted in its broadest meaning consistent with the law, and no other parts of the License shall be affected.
  7. U.S. GOVERNMENT USERS. This SOFTWARE is provided with RESTRICTED RIGHTS. If you are a unit or agency of the United States Government or are acquiring the Software for any such unit or agency, the following applies:
    If the unit or agency is the Department of Defense ("DOD"), the SOFTWARE and its documentation are classified as "commercial computer software" and "commercial computer software documentation" respectively and, pursuant to DFAR Section 227.7202, the Government is acquiring the SOFTWARE and its documentation in accordance with the terms of this License. If the unit or agency is other than DOD, the SOFTWARE and its documentation are classified as "commercial computer software" and "commercial computer software documentation" respectively and, pursuant to FAR Section 12.212, the Government is acquiring the SOFTWARE and its documentation in accordance with the terms of this License.

LIMITED WARRANTY AND DISCLAIMER OF WARRANTY; LIMITATION OF LIABILITY

ESP warrants that it has the authority and right to license the SOFTWARE, and that the SOFTWARE will conform to the material printed specifications therefore which are in effect on the date of original delivery of such SOFTWARE. ESP's warranty and obligation shall extend for a period of ninety (90) days after the date of the original delivery of SOFTWARE to LICENSEE by ESP, and is solely for the benefit of LICENSEE, who has no authority to assign or pass through this warranty to any other person or entity.

Except as provided in this Section, the SOFTWARE is provided to LICENSEE on an "AS IS" basis, and ESP makes no other warranty of any kind, express or implied, with regard to the SOFTWARE licensed hereunder. ESP warrants that the SOFTWARE properly processes date and time information between the years 1970 and 2038. ESP does not warrant or represent that the SOFTWARE will operate uninterrupted or error free or that all defects in the SOFTWARE are correctable or will be corrected. This warranty shall not apply if SOFTWARE is used other than in accordance with ESP's written instructions, or if any of LICENSEE's hardware equipment or other software malfunctions. ESP's entire liability and LICENSEE's exclusive remedy for any defects in the SOFTWARE shall be to obtain ESP's SOFTWARE updates via the Internet or pay a media update fee for each copy of the SOFTWARE.

THE FORGOING WARRANTIES ARE IN LIEU OF, AND ESP DISCLAIMS, ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow the exclusion of implied warranties, so the exclusion above may not apply to LICENSEE. This warranty gives LICENSEE specific legal rights, and LICENSEE may have other rights which vary from state to state.

IN NO EVENT SHALL ESP OR ESP'S LICENSORS BE LIABLE TO LICENSEE FOR ANY SPECIAL, CONSEQUENTIAL, INCIDENTAL OR INDIRECT DAMAGES OF ANY KIND (INCLUDING WITHOUT LIMITATION LOSS OF PROFITS OR DATA AND PERSONAL INJURY), WHETHER OR NOT ESP HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ARISING OUT OF THIS AGREEMENT. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY LIMITED REMEDY. In no event will ESP be liable for any claim against LICENSEE by a third party, and LICENSEE hereby agrees to indemnify and hold ESP harmless for any claims for cost, damage, expense or liability arising out of or in connection with the installation, use and performance of the SOFTWARE licensed hereunder, whether alone or in combination with any other product or service. Some states do not allow the limitation or exclusion of liability for incidental or consequential damages, so the limitation above may not apply to LICENSEE.

htmldoc-1.8.27/doc/htmldoc-fig54.png0100664000212600000240000003111610322727434015551 0ustar mikeuser‰PNG  IHDRâv=| ¡ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF1ÄIDATxÚb¼ráÃ(£`Œ‚A r *ˆHi뛆Å(£` 6ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ Äg™…,‚0AD12 1ÀÎ`DÃ0 C?#š\Võëœf¡Ûˆ©…7`1—P´ælÞ&à¬…ß X ¿ÐM¡[‚³FÓêhZäi‘dIzl7 €b­©FÁ(£`0€b ‚Q0 FÁ( )ˆ4å'^±££cZ×d€-¦GÁ(£€æ€Èù¿5v` ÐÀ z¼<× D£17DÁ¶ñ@4£`Ðzkúëí©@’G-H~¾9Hòªç~º1ÈàÓÌCSüáêD )¨]@¹;žŸéDæJ›U@ON¶Ió*òŒ½{´œEÙ¾ŠAve{2WÏ«“l£N¯+’fA Ü“kA!i2‘ £/Í’vÑÓäÁ%™@Ò!v<°(ÔŠ›¹aá?k4Ñ‚Q0€@ÇÀTŒ mXÁADÔ ŸF.ˆ¢`Ê’H eZ´æÙ鎧§:¤Í*Át%X†qñ• ÷èzv@ÅHU‡™O ] ;ÆÏbÍ"£` xrá°\"H¹L°Œ€"ª˜†·¦?^Ÿdðkå¸6Q@+"ûþ*¨1(¤Søîr?!¬[$ß^ê’"úÅ@òõÅ^¸Qb†%DÖà’ºXRÃ[ÓO´²–ÕŽ·ÊYVÙµÀµ(X×B÷7Á•ìê¡mꃠִЍe}{=\šHñͽ ½ÎÍ7öÔh¸´\ß]äjº¶Ék»@­xm÷6ü¾´X»0è{w]ÜRfà̹°¹.kä×aœÝX 4 샳O­5¢Í‚' ·¦O¬Fô],Ã@ále.²¥6‘SIJðÖô¾iÈâ.Is€äîy)p·”y@rçì$ éž:ǬD´ù@öö™ £ylŒ*–Ôp.~õ„>6Í­š $¿ÜšDL=¯¡ôʵ uð{ˆê‹”ýê|%Þ{|¼Âx.£å­jä­A¥êƒ£Í 2ú¨ØU´­S";Dq¬lß ÷¸s$¨êبæRyk_\ͽµýÅ­e¤Œ6ôí6Ðç6Ak&cÿ^ã€^“P}f}\£YÐ`lÔ‰Õ *Ð"t’e¨^<¾  ÖS€È8²<Y‹mô4 yhi&²àÅdA§„YÎ ³g# º&ÍqMž D@ö®9Ipñ³!Œ³@e´gúÏô…£ÙlŒÊKj"Ëh  rVz[Ó$uŸ‘[Ó`kÙjä5…Øš† 8hº‚Ô×wWCĵÜÚˆ‡¶¦‘‡AÎ#5¨1[Ó´‡–d"—ѸÀÞù© ¦tâˆ{‘[ÓÈØšf+£€ÚÞ”†~àDóyoÀe4¤)ýúBu ¶¦Q7 "lM#ïS‚”ÑÀÖ4еg6ÑÔjû˜é@â.¦÷.•ÑÀ5$èö€ËhHSz÷ÜäÑ,4 FÊhøØ4Á’ €°,ÈãQƒö¦yÕsÄÏNƒ&è Sˆ Ó¦ôŠ{È24à€:â±i´AQ0 FýËh䀢¨5- ÿáêDø¢.hñíå>d5"úÅÀ5‘íèg§¡‹ÛÀ òð5å¬jkA™E´©U´©»¤ >‹¨dW¯lW÷P#| ˆî¨‡Ï"ª95‘ºTCÇ£ýÊŽÊËHkò0äøv_Ø\Š<èaäßkìß lPŸÝ€2îaÔz]!| .n:ñÄê|ø,¢eØdª<@=ÀSˆ@lPãoG{¤-Ø1+atqŒ fÙà @1Uhë›_½xrôè%¸Èb-·ÖÑãlF^=zi4­R|ôR¤)?ñ»8Ù,®Çv ÑÍâ£`Œ‚Q@s€u8‘ €F‹i,26=ºÂaŒ‚Q@àèèH‰v€-¦GÁ(£€¶íÄ;R@ž7= FÁ(ƒ¢5}jMÜhpŒ‚Q0,À Æ( €@kAþÿÿ[Ò0J{òÿ(£`(`±ÜÐÐààà@ÈÅôh)6"ÈÑÔ? FÁÐ*¦h´5=Úš£` êb €F[Ó£­éQ0 FÁ .¦h´5=Úš£` êb €F[Ó£­éQ0 FÁ .¦h´5=Úš£` êb €F[Ó£­i ¤¤Y©ùîÝ;¸à™3gà+8l¸øÝ»w!‚@]D¦<ÄÊÞQ@³ÆÁxAŽèŠ”ÑÄ@d1 @£­éÑÖ4 (//‡äœ™3gb  ªÁÍ™ƒ¡¨rqqÁ¬V1ë] ²Œ”ÑÄ@d1 @£­éÑÖ4 ؽ{7$焆†Âá9 ÈÆ, €ºFBΤŠãÑ ¡Q€¬Zµ blZZ¦,P" T6€7ZLYLÐhkz´5M ó wŠÑÆCÈÈf£Å4}Ši Ä¿BŽP ‚¸ÑbšÈb ;f—0 Âàë{85!BmÜö®oý™ -;º4½4mßË`drFîÆÃ™Q®“kTm¢ßÌ劽ÞrÍ©¤¯9IýÌì¹–ef©ÎSý³¶×$úá¬ä—Z-Ua7Õ<öÄý9\8‡í™É"x?ˆµé6ý ´bz´mM£gcxé/L!%¼ãŒ\ª¢åIbàXÕ#—,XÍDžc  Í§t*1Å4A·_Lc‚»wï’íZ<‰˜³Ä4*¦1+xüÕÃ(ÀUL`×ìr€`|ut( É—Åü4^Í£”TDé*ÊtI½þü5=ýßðÞÙ›eN;j‚¾NÃ3vw2yñÒðD[(‹Ÿ³ö¥ÜK€6c…Z…êÕ¤+Üô¢6…ëàí2ß‹¶êƒ¤bÍÙðå@xÆ4Ð:^£ƒdÓDa1=Úš¶­ixÞÆ\KoIa©@.ß1ˬ9­¹Göö’D:yG|[¿!Äp“êZ¬…,Ö*„˜ÒÓïhû’Ã×Ùh1M^1 @”Óç¼Æšp' CkzŒ‚Q0HŠi€¢b1=¬ZÓCªFc;£`ŒØb €°žé1BËk*¶¦ 4äÀ@ÆhkzŒ‚Q@I1 @¸Nȉ%5µZÓ2€ ëÑÖô(£€œb €ž7‚Êkjµ¦‘M6¨!\궬G[Ó£`Œœb €ˆ9oz¤”ÔÔjMC edxaM­–õhkzŒ‚‘SLIçMóòšìÖ4|”ÒdF*¦Q[Ö£­éQ0 FN1 @¤ÞÞ2œKjòÊ>Ì‘hX“»zª´¬G[Ó£`Œœb €È¾½e–×䵦!Å.¤\’ÈMf‚ºÐZÖÀ`´5= FÁ(@.¦ˆ’»‡[IMRÙo/C \\íkp±KTË=Úš£`´˜†ÓD•»‡IyMdk¹†7Ÿ±*#µeÝÄè¢ik—¥˜Ç œÍ¾˜µ‰¿“›º€>aŽõ,=ä³¥Ï @»îg RÅðKðb €¨u³øp(©‰)ûg IROL™D-¬éÚšÆ?Þ‚|AßH(¦ñœ1DÌétC´0‚WKÈç« ×UȧnÁM„ŽÓT/¦ˆê7‹áòš˜¢ RìÂG“ÑZÖxta¶‘ñ¬ Á:„MÿÖ4\ù˜J´‹?†}D>ÐÒ„D>„ÿU„C×ïh—«aò\˜7.ã~Æ€ÓD­Öôp(©‰)û0G¢‘ Óÿx×x`]‚Z ãkY#«¡OkWGó»áš‘/CÇu[Õpò;š½h7E0à½-~´˜¦n1 @ToMáò3Ê1›É¸F¢ÉhYCŠ]"£Ñì¥sk­Ì‚_æ‚uã%ÖV?ÚiŸ@Ð.A;¹2 ÒL\§›¢ä›h[‚XeÅzÁ+‘#EÄûh5ÚqÒ˜±ÃÍÄ;D²2Lg ´62æY0Á¼ªœ`ª@s?ø˜Àݬ‚0ôÿÿºƒ ²M!¢<yxŽ”vBM¿Jjf_\±g©¦ÊšçFÖB‰ûœõ5Ͳ‰éìK{éÏÄMËþ™Ò+ îÂó:ô¾8¢ßë ÓÛ»g†ðÎ[`z Ùi€ãDg¢ãÛŠ»sYí`º¾þ ±_bz 𶦇Xy™ëàk¢IšdÃÚ²F^ÎAÌ6¦2Ìf>[Óÿ µÅŠvA°x‚—}ð¬Hðª-4‹Hºy îøLü6txƒ«±L|Î'ÛïpHsîH‚u!A÷)¼¨Å¼ó×ú ä Ù…˜•ž@ÃŒâ½5`! ­+6üŠi€¢ukz(•Ô˜er£ä%aµæâ<&À-ÂjÚ¶¦‰/¦±Žhó1<ŸÃË‚×âjI‘tí*ÝkN¼JbüNa “ÈÍx</CÑfá-k¸8ò=.“1‡GÈð>Úd&Á‹†G1 @tkMò3­ ­ë ~šÂÅ!˜ö¢ OHkšøAâ{ä—dÁÈ=tÌ–U=Hõ;¤`…[D0p¨Äjðà‚;ÒGžYÅ C¬&ã_"ÉûúhˆÓDÏÖô`/©±–}ÿ±­\&£eMª ˜-ed— Hkž9á3TC®˜FnibÝÁAù"©~Ç58;ŠiL·áòrøÙ± Ïû#³˜ iMÒòš˜„NÆÒb†°1×x`6¨‘• Hk­IEjÿOiH·AÌ©'üpâä‘íwx¨b%ÓnЃÈB mrX¡-ËÁ:ŒkÑ%ÞÇSèãb €ª5=Kj¬eòˆ0yíb‚$ÒáMè#ÔÈkE°5ÜäAT%&G¡M£!‹ÀËšN!âo!l&ãßÞïì“íw4ѵP} ‘Œ¶'²÷‘×ËÇŒ0ÇÙÑLÆ\ ‚U1‘ÞÇAN0õ˜ oM¢òkêÁ:LLÝ–5ÖíˆA´Ä7™>­i‚K¸ˆ»Àµv kOsA𠤮BÃãAbv{¹Yœl¿£5Kñ¯<£pAÅ4òqä&3rCm+&I òz«;1÷Ú ïb €Ckz°”ÔXË>ÌV--ZÖ˜ë¬aÅ4Š:¯›ÆUh’±póè"Ìþ/ÚnäÆr—z\{:ðÌŒaúˆ˜ÒŠ˜²‰$¿ã*ª°ú«Ed‘…ÜvÌ¥)ð†6ÚPIÅ4Aïãr'°úÄU¿b €Ukz€Ëk\EÕB'oPÞ²Æl³£m;DS@ÓÖô°ðž5Áõ£` †b €˜ËŠÁ„(”[Š(ÝìííIZÅÁÈØ@N}}=q-kL{p¨i Ø§#Ìš5 Ò<ĺlŒ‚Áhж¦ e«5çjµ¬‰lMã¶¦‰ð)Dú 5 Fy­i€lcÓYRã*ûÐÎÓ Å*i¬#ÑÈ"HÅ4ÍǦ‡1Àµ†lŒ‚Á\LÐhMÓ©¼Æ•Ÿ‰\ìAIËëºäqzž7Šéº{eŒ2Ši€*­iz”Ôxʾÿ$Þ½B°efæêl45h'ó¶¦GÁ(9Å4@ ¹Ö4 Ëk\­i ‡§1¦i˜"£­éQ0 F‹iH1 @L¯ŽN«Ap®ôÀ&B IÌJäÖ4PÁÁƒGWzŒ‚Q0@¡µ¦†`›šjµ žÖ4µ†§q™öÛm‡xŒ¶¦GÁ(9­i€bÂÑÆ-k<áÀ€6áG! 1 4ä„£}T@ãjƒ¶¦GÁ() €°¶¦FfËOkšô½ˆøf뙋ÿ@ÑÖô(#ª5 @LD·(G`Ë¥t;xð ½½=°0%þ†C<$Ä4Hé ¿…‹ÐhøhkzŒ‚‘ˆ`kzµ¬ñ·¦.ÍB*¬)žFÄè1Úš£`Dµ¦ˆ‰¤²e„µ¬ÑË8‡ŒŒŒ†p}}=Å-kü6âi;¶¦GÁ(A €HjMó–5ÁÖ4u[Ö¤¶¦qémM‚Q0¼[ÓDv1=DËk’ŠiÂfb+¬‰%Ñ¢³$…‹à:ñ¦Œ"{GÁ(ƒ¼˜ Ê‹éáÓ²&©5MyË® ÓF¸ dùÖ=Š£­éQ0 FH1 @T)¦‡IËš’²­°&I=®Ö4†‚ÑÖô(#±˜ êÓC´eÍ@ðLòZÖ$-ö@k,C´ÕÀ mM‚Q02‹i€ÂuBÞH,¯)lM“ѲF¶ùêÿ÷"¢R=Úš£`äÓ„焼WRS¥5MRË3b %òB燌¶¦GÁ(9Å4@sÞôH)¯©Øš&²e6÷ˆÑ¸&²FmM‚Q0œ‹i€"ò¼éQRS½5M°e /šá‚pâ×\¶¦GÁ(ÞÅ4@y³8õvôQ}“!uë|»)!‘w0¢¶¬Ñ¦A·’U’xùè.ÄQ0 †- 2no<-k*›LÓÖ4®–5ê9;G[Ó£` ïÖ4@Ùš„-kZ˜LÃÖ4®–5¹6޶¦GÁ() €¶¶¾ùÕ‹'u v ‚k®¨h/ÉÆ"7¢ÁÃôÀ5°°nll$©AêÔF’|ýÿýhº£`ð`±¼fÃ`@d´¦°eM’ud´¬éÔšÆlYÊhòZÓ¤VN£`Œ‚¡ˆÂÖ4=[Ö4o³Hkš<€»5MØ¿£­éQ0 †Vk €(lMÓ­eÍ@3“±Û2Èç®Â£`ЋiÚ5«©FHù5ZL‚Q0|@Ñ¢˜¦nËšEÃh1= FÁ(* €hTL‰ax—_£Åô(í‹iÚ5Щ߲fÆ¡@¢ ÒKêQ0 FÁPD‡bšÖ¥µÆX†"Ò¿£Åô(Ã=‹iZ´¬¨ºho(–×£Åô(Ëiê– 4›½Å4Ãh1= FÁ04PÅ4ååi·Ã0ŒÓ£`Œ‚Áh‹iJJ:® ~ã£`Œ‚¡h0Ó¤–§tcü-kRƒkŒ‚Q0”@‘qÞ4­I" t™OkÛ>ÄFñ£`h7 @ÄÜ…8Jz–kC±¼&Áµ£©Œ‚¡ULÐ lMžÒmx–Ô£©Œ‚¡ULÐ`nMþ’ºa´5= FÁ( u1 @#¼5=œZÖ£­éQ0 †g1 @£­éáÔ²&Êm£©Œ‚¡ULZÓ £-ëAéf¢ZÓhkà‚˜ÊÈHy”ÔDêe€Ýnƒ©…Fk²A§XcpdÓDÝÖôPYÁ6\[ÖD¹Š¼ü3r In–Åô(³Èˆ&êzvØ”ìðb €¨ØšŠ+ŽGbI=ZLÓ£ÅôÐ*¦­˜¦y{´¼p×RRLcAÄÔŽÆ`@½oͬfb*&Ò b|Õj<–â²×Ví}Jžb\ºÈð>V.ß¡‹ÌÀhÓÕ`Mxd‡¦Ûˆ‰ \‰œnÅ4@1alK$£l"P±Ô£3¢ !§âŒŒŒÔƒ|í:VA‚O7" 7ÿ?á‹zÉñ²ùh^À%ŽË@b«bLŸ"K¯˜—ï}2fa'ê±Z‡'ºqyœŒ %5‚ÈKäTÄDqÉ2˜Ë,ê C¡¤¦!Àš¾ái«,$}ãJÜY8È+v‰×ˆéN²­¦zxbºÛÈ“"ÒûxB­|$#¾( m’|G»”OO@L”µ))³F`ËzÈ—Ô¸1ÙÅ+Á6}Ü?€¶ãq þ`ÁålR“žÞ§JDžø¢ & ʪ€‘Ö²n%5¼)9b/ˆ‘Ù˜e4…Õ.+Èö ‘öcÁÑ ]B†b"£¨’Ú4ê©`Ò!)ñP%Ò)å m ‚Õ²nÅ4Ùɹë 7ë0+M%ÍÇl–âñò8,šJå½+Ìp è6’`†²1¾#)‚¹¥*-ÀHhYx1Ý@|fÃÅÅ?ÿŽG ŽÕ ¸×càïäâ·‚_0`ÌgâY A°Ž&‚« ÀjÞ™U’œ‡áAsp±‰L 8Œh< ˆ %â#—øØ$&4h ˆ‰ap‘вÅô(ÀÓ 9£¢£‘8@Ñ®˜n Xû0nYÓƒàiEŽ–Ñà r‡V$Šé*­‹®-ëÑbzŒ‚Q@, ZÓ CsÅ1=Kê¡QLS2“NªÉ”«£`¸€b¢vS«f+ŽFÔô)¦ñ”Œôï*ÂWæÕQ0b@1Qu¤¢a¸ìåÒÅ41Þ(£`È€bÂQp‘Ÿ踗at܃¦Å4æ~e4q¬+[±*CVOÒ6hâ£`x€b"TpЮÐö-ër?ŠiÌmÜ”·Dä¡Bø 'æÈ¡Q0 †% &"J FÁP¿Y €‹é†ÁZRÓßö¡Ufþhê£`hÓ4°­iú·:G[Ó£­éQ0 †X1 @Þš¦Ûv´5= FÁ(JÅ4@¶¦G[Ó£`Œ‚A]LÐhM7 ÓÖ4ÃhkzŒ‚Q@°˜ ÑÖôPoM7Œ¶¦GÁ(ÞÅ4@ØÖtÃhkzŒ‚Q0$Ši€<­i†ÑÖôhkzŒ‚Q€YLÐhkz´5= FÁ(ÔÅ4@ •ÖtÃhkz´5= FÁÈ,¦h´5=²V㶦GÁ(rÅ4@¶¦GÖÞ–ÑÖô(C®˜ AÕšfmM¶¦GÁ(hÅ4@¶¦G[Ó£`Œ‚A]LÐjM7ŒÚ2Úš£`Ó4ÚšmM‚Q0 u1 @£­é‘µo´5= FÁ+¦h°µ¦†Q=Hý2šúGÁ(ZÅ4@¶¦G[Ó£`Œ‚A]LÐÐjM7Œ¶¦G[Ó£`Œ´b €F[Ó£­éQ0 FÁ .¦h´5=Úš£` êb €akša´5=Úš£`À‹i€mM¬½-£­éQ0 †\1 @C®5Ý0º·e´5= FÁˆ*¦h´5=Úš£` êb €F[Ó£­éQ0 FÁ .¦hp¶¦F[Ó£­éQ0 F‹iH1 @£­é‘µo´5= FÁ+¦h(¶¦F[Ó”˜?šúGÁ(ZÅ4@ÀÖtÃhkzŒ‚Q0„Ši€mM¶¦GÁ(ƒº˜ AÛš¦]I7Úš£` ¥b €†nkºa´5=Úš£`$Ó4¤[Óä•z#¡5Í0Úš£`ØÓ4Ô[ÓÔ-©F[Ó£`Œ‚ÁVL4 2D* ¾üÂc}Ok+¨°£`Œ‚4˜‹i² ”Ñbz´˜£`ø€–Å4þ–õh1= FÁ(J €†k1ÇS£Åô(£`(€öÅ4fËzxÓ4ö£` :@#¡˜F+¯¼˜n-¦GÁ(Ä€äÅ4Ë”ÑbzŒ‚Q0è@Ó£Åô(£`P€-¦G‹éQ0 FÁ 4ZLÓ£`Œ‚A h´˜-¦GÁ(ƒÐà/¦éY¬4Œ€EÓ£Åô(C Ðh1Mç¦ôh1= FÁ( Ðh1=ZL‚Q0 5 Ñbz´˜£` j@£Åôh1= FÁ(Ô €†D1MŸ’e´˜£` F@£ÅôP,¦)4Œ‚Q0”@Ót.¦F‹éQ0 FI €F‹éÑbzŒ‚Q0¨@Ó£Åô(£`P€*Å4 —ÑbzŒ‚Q0@Óì˜n-¦GÁ(f €F‹iZø}´˜£`P Ðh1MϦôh1= FÁ( Ðh1=ZL‚Q0 5 !TLÓ´|¡§#G‹éQ0 F €F‹iúÓ £Åô(£€x@£Åô€Ó 0•2¨2 FÁ(J €F‹é*¦É¶z´˜£`d€-¦¼˜&µe=ZL‚Q0²@ ­bšvEÌ qáh1= FÁ(@4ZLªbš˜–õh1= FÁÈ4ZL¶bš “F‹éQ0 F ÑbzÐÓ¸ZÖ£Åô(# Ðh1M]¿ÓÁy”ûbŒ‚Q0”@ ¹bš¥LÃY‹Â0ZL‚Q0@Óô,¦i]DŽÓ£` C@£Å4‹ibÅ£Åô(£h´˜¦1=à£` %@£ÅôÓToYÓ£` C@C±˜¦zA3€Å4u}4ZL‚Q0 @Ót+¦‰ÑÛ@Œ‚Q0 † ÑbzðÓ”ûn´˜£`€-¦a1MvËz´˜£`€-¦g1MžOG‹éQ0 †! !ZLS·¬ÌÅ4ñ-ë†ÑbzŒ‚a h´˜üÅtÅËHF‹éQ0 †0 †+NüÿÿH¢6܆IŲ•߉ÕûŒ‚Q0°Xnhhppp ´bz–ÑÔ-IéYR“IަþQ0 †V1 @˜ÅôhI=œËèÑÖô(C®˜ ¬Åô*¯Yy=Úš£`P¹˜ &zÍ­5 úey”ûaˆæ(£`(€b"¢pa‘Å4~*aÀˆ ‘xô4œxõƒ /Œ‚Á ˆ…–­ËaÓ*YÅ4¤Äö¹Ë 8YŠÂ¢lsÐ\HPœFE3Ü.úØ8 F, &K«Ûy'Æïç5 Ãd£YeŒ‚ÄD–®†<Ì:âŠiü}|̱’F?ð·àlÁe81nã—°…æ0üƒEÄÝ(È €˜((­Fêl.¿”b³ãinc–¡¤6Ãñˆµ™Gœ QXà×…)HŒ(÷é(á €˜¨Qf5ŒÔE #½˜Æ?6‚¿ŒÆS<¡50ÑŠ]ú8žøZ•£MéQ@  &*•V C¶Äi ’߇Ê0ýê6‚ž¦( ïì7r|: (ÄDí2kh•8 t\Û7T‹i"[|xšÀd—òh´ O«ÿùha4 p€b¢v™Eÿ–5µJOZ–×C©˜†ˆðâƒà,VedŒ/ã7 É˜Ã#xŒÂª€HTmàæÆêÚQ0 @1ѬÌrÅ4M[ÖC¬5¶iYu$2c¾h‚X¹DÚ‹ËåD)`U@¼0†_%Vc‰ñÔ(á €˜hYfѧeM‹Ò“ê-놑½ŠqŒ‚Q@> b®ä-kš:l´˜£` 0 ’noœ-kZ—ž T«-¦GÁ(¤€"õ’­ÁÙ²¦c†G=ZL‚Q0Ä@‘}â jYÓ­%¯–-¦GÁ(䀢äÊÚÁÓ²¦¿F‹éQ0 F@QåfñoYH=A|-5ZL‚Q0 ÈÄD¥Òd`[ÖÛœ-¦GÁ(4ÄDíÒd ZÖ>êÒ0DÊèÑbzŒ‚!íÊZ†AsŸ,}ìbäèM £` ­+k¹˜fd%uíb™ähê£`hÓDÓÖ4=[Ö£­éÑÖô(ó˜ Z·¦éÙ²-£G[Ó£` Ãb €èÖš¦OËz´¤mM‚Q0ÜŠi€¢gkšÖ-ëÑ2z´5= FÁ0,¦h@ZÓ´kY–Ô£­éQ0 †[1 @Õš¦EËz´ŒmM‚Q0 ‹i€ðÖ4u[Ö£%õhkzŒ‚áVLÐ`hMS·e=ZF¶¦GÁ(VÅ4@ ªÖ4ýËëÑÖô(£`°Ó4ØZÓô,©G[Ó£`Œ‚!PLРmMÓº¼fmM‚Q0 †D1 @ƒ¹5=ZR¶¦GÁ(-¦hH´¦iQ^¶¦GÁ(C£˜ ¡Òš-©G[Ó£`ŒÐb €†\kš>gƒŒ¶¦GÁ(ƒ¥˜ ¡Øš-©G[Ó£`Œ b €†tkzô4ÑÖô(ÿ˜ F K[ßüêÅ“k6ì`£`Œ‚Q08@H€°X>pà@±À…êëëGÃeŒ‚Q0  ¶ž! €bÁ£`Œ‚Q0x@1Á(£` f@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@,£A0 †.ÐÖ7ƾstt|6j/1‹]4dôÀÕl¨aÖa°ßþ €F‹éQ0 °7®ñåôäµC[±86:¤ÉÑ2š @£'ä‚! FÔ yÃÒw£'ä£ €F=FÁ(Yz4F2 ÑbzŒaƒ8::ŽÆï4ZL‚Ñ"lPƒa¹øhEÐh1= †0 8´7 Fãw€]é1 FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒh³8-nA£`Œ‚Q@@Œ£¡0 FÁ(ƒ¸E¬Àxž:xIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig72.png0100664000212600000240000004165210322727434015557 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFC IDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3+4‘‹Î¶ Ô70ØPÂVôtÆÀÚ>äœG;÷ ”Oy–ŽÇt6I €È™8z䀚†.==¹÷vo8÷Ô©ãjê:ƒ-&ŽÜëìê9€¡„5¬è쌵}È9vî(Ÿò0,ælR@¡Ü#FÌyA—/žccg§³?/Ÿ?ã.ao\»*,*flîpùüq]CËABByá´½ó†ZX ˆ3Öö!ç<Ú¹g |:ÈÀ°t<ÜÙDÈyA{Ä¥àââ"¨ùúÕ‹¼¼üô÷äý»·lÝ€Œ;·nðòñª°´s?~h'Ø‘7-¬0”ÐÂj@œ1°¶9çÑÎ=åÓAž†¥ãáÎ&|ûö ^™ó<||ôôá—OŸÐœ,vá­ïAP ƒ\òå3º#éJ¸ÂŠžÎXÛ‡œóhçžòé OÃÒñ˜Î& ÐPÚ€ì¼ÁSòpÐ ÃuÆJHÃÛ=åÓ!½Óhˆ:žlgÐPÚ€ì<äbwôU¬3†PBÞî(ŸéFCÔñd; €†Òþdç Ú~À ÃuÆJHÃÛ=åÓ!½Óhˆ:žlgÐP:/Ùyƒ¶0HÂp`1„ÒðvÏ@ùtHŸ<6DO¶³ˆ óFfçN ¢gpˆ>X+à*—‰i¿SÒö'f>è)4êž°Âï 4— )Àt$²\^ÀŸˆ1¦ ŒìÀ¡Q¦À垢‰8Ø[ã’E–"çp×âO¨Dž@0Ñ¢$¡Jtí~dÛ©ž˜),½ €†É|fiNÏŽ‘óhqO»Ô€ÇøÓ"¦ š~.1@¤ tKHô¬˜ÉpZÉ,÷!"p¦y>EŽüi€˜ Âe/ÁF]@žÉħ^2ÜOÿ,O Ý r€`Øÿí°D–j·†qpÖ©š‰˜|:ö9 áFµÓáQ_ê=€†ûü{‹qoˆ:øûþØUjœIƒl¢VÕ…TÍ÷ì^µè­…v^´CVÎvu–Ðûã”Ëj•Çq]Pg „3¤8©˜¯^ºAj1´jWÑòŸŠ–¢ò|®^ñ½!< Žºóhe7žá‚z)œÀŸ 1“ 1MiºiŒ)âM è/< HJlTŒ#¬l̬Nu÷ì1Ð9m/‘Å:ñnüí ¬cYT 4‚‰ìÄL»T@TÞ€+†¨Ò¢õþªÌ †ÄrÓ€¦ƒƒ;4IŸ„GÝÑjʇÈ.`‰ŸÀZúÓ."ˆ "\öâjáR7§ß§ÁZ˜RhT)èB­T4º?€Ê•þÁD<IROPñHÞ@° ¡ó|%îÁ3ñ gã© ÈNsÄ„0ÖžÁVÎ @I*Âht‘óx2®a²óá߀¿¡Gç‘íÅeï ié­äA’³‰DÈ¥`gc#ˆ¨XRš8€\ì"¯ç!8X„§ò X¯àR€,NI(á <áƒUŠ g`r@[2ˆ¦ÏN¬¶oÕ«% gˆº‡*&“G”Û‹5Ј¤E Ì 4­äˆLED"dD§ù¬ƒYh‚hK_0û†xæ0«\²h*áë;1•¯—Âó‚p…1lªb¦r¬K,vÞñã2 áDÚN‹‘S"­ÆÌ´ð•!Ôuòœ0žQ#ò’åÛ¸ðlOÁe8®&µè  „V»Ÿzñg̺¤ÔN‡T Dæý$©Jy[ï˧Oh÷ððRùLWÊ÷ ùü íþê€Ê}ˆÑûFç{FçFŽãÉv6@¡¬ &¨áè‘ëU~Uum.>qIÙ—ÏòÛ—OÇìåàäd£`Œ‚Ö6Õ¼~ó–¶. €H›8sꘚ†îÀúðÙ“GÀ €›‡ïËç@îà!!`ÀÃgŒ‚Q0’ÁŽ­]=‰W@$Ì\¿zQJZîׯëC1±§ïÎÐ×ÐÖðð£`Œd kh²÷vâ· ió¿~þ¢ÑP£`Œ‚Á ˆŸ ’÷ Î]£`Œ‚Q0 ÀÛ†HÙ.@Céþ€Q0 FÁ(Äâ s€JûFÁ(£`ˆ/Ìh(í£`Œ‚Q@TÉNta@Cé¼ Q0 FÁ(Äâ s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€Âàõ«—xdEÅĦÂÊŽ¯‹ú{tŸù(4Äæ4:0„+Uu< Ξ:¢¬ªNÿ €‡ßNòwo_31ÆÞ(´Äæ4lçoad îŠJîïÅ¥ÍÄ;?øôᣤ´œ˜„ 5ž~Û7­€Wx\w<…—bsqó±±ë~’¤­€F.²GËîQ0 ÈÄæ4 ç°–¶ûÙ±¶v!\H3~ß4² ž¢«^ò:+¤Ö/^<Æ?êòåË'JBŒ¼ëìý¢t¸Xîë4¤ÓÁÕu@„p jD6µ4 FÁÄæ4:€¥’À,ñ—˘zÉ(yá\òZåJªÚ@òÞí«´¨Gª…« F+”1ë 8¹FÁ£ÍÑd u@|a@£ûH9„R@xª2æH µ%N¶züÕÆ(C_˜Ðèþ€ÑZ¨ c°ÑÖú(xñ…9@îØö§îXÐàï%дmï ŒvFÁÄæ4:0|ªÑ@£`Z˜Ð0œÀ:CKÒú}üZˆÑK +§Ì…w]з/Ÿn^»D»ˆŸæáágÅÛ ýýë×»·¯ñ( £éUËh~Œd@|a@Ãs>yY'\«,šJäõX׆©— G’º6X˜þÆ»ó7#{¸ÜFüúõƒTh#ûÄÜÈë80¦s1ͯ Å¥—£µÈ(¢€øÂ €¯\8¡­o~õâI ‡ÒËÏñòò;åÃjHüàÓ‡Ò²xœ9qXKWŸÎ®‚lÆ£`1ZŒ‚¡¾|útÿî-GWO|¥Ç§Ï@r͆ Ñù€¡ øø_<}üäñ\ è_Á·¯Ÿ€Nûòçö´ÑÂFÁ(  ¾0 ÑýC»ÐÐl®VC½ GÞW< FÁPÄæ4º?;Zû§FuÁhé? †: ¾0 Ñý£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0T€ èh Œ‚a >¼G9QêÁ½Û£a‚ ”T —ìDæ4:0T+€Û7¯Œ†Ã(®@TL^¨ièŽ28{òˆ®¡ ~5Äæ4:0T+m]ãѠð±qœ?{X <úXJZNTBz4L‡øŽ+ñWÄæ4:0$+yEU`> Q0\¡±5°2Ä%eŸ>º; ¤â s€¢ %vÖÑ»Q0|üäóÇî<|`)Ù‰.Ìht>`èÖì£á0 †}ðæÍKñÑ!_˜Ðè|ÀÜ<|£uÀ(®àÛÄÙãììlì£Id@|a@Cr>Ïax´}(ñ÷P´Ù(ʯ©fŸ?/N;C¨å ”|ŽöýG¦ä³Ñ9&ƒµyŽlšÕÄ8—E˜Î£€¦ÕÖþ1Ý\µ©æÐ_˜ÐÝ@ë"ͧÜÄšÈjˆ,d‘Ûï”8ƒ u¤Z4 Fñ=®¡!‚¥3¤£€•Ä?â4xñ…9@î tl O™Ž915 FÁ(  Ý||(‰÷XЀâ s€Ý@«ö>Ú8ÏhX‚Q0ü*äªePõ ˆ/Ìht­ú£ „FÁ(ˆ/̈ ™óçÏ_ Fµž9a̲ž 2\Z‚p™Cp¥)-ñ…9@1¡­o~õâI GTDÒ3§OðòòóðñÔ €œjféÈÅ3Ø#bt­ç( |ûòé÷¯_çÏýóû—¤´,ßh˜ ƒ/_>]>×ÙÑ_>}º÷–‡·?^¿y $×lØqàÀ€£` ^ÀÆÆÁ:zL:z˜.¨‰/Ìhôþ€Q0 FÁ`.ïØFGÄ ‚jˆ/Ìh$î]±C0:4 (¬ ~Àèšuô0!\²]˜Ðèþ€! ~ÿúõû×ÏÑpÃ5y#•wìl¬£ýÔð!b,ˆøÂ €Fç†øðþµªºÎù³G ­GCc W¿OØÖù5Ú6E¯# ·ÿˆ/Ìht>`´£`0V@†¤´ìµËgäh˜ ƒÓÇ›ZÚâWC|a@£ç íj`4(FÁð €°7ðäуÑ`‚I…9@Î áj9«Œ‚Q0\°í ˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€Âàõ«—xd‡Äîaà…Ñt5š6! ¾0 Ñù€!œQUÕuð(8{ꈲªú¨FÁPŒ”Ñ´A! ¾0 A1€çnHš¤û‡ésÐ4©Þùôᣤ´œ˜„ 5ž~Û7­€çL+à"x<Ž'¬ð+ …ÈK*ƒ!¾pi‘‚éNd«É‹/ê:ƒ$lº¢" ¾0 ŸÀ“ è†PÜKHÈ>yt—º¾&¾œ/ ª¤B·¤8È#3×੊ˆ/*:¿Ã0½P„øÂ €x>kš€\ÂŽ5A¸ä¿œYOæÁª—¼Î šX]‚ÕIXÍÁê‚îyñâ1þ{V¿|ù4È“)u½@0‚Ff„_¸ŒBB¥Ì IW4uñ¹lèâ s€’ó˜QˆÌÅ»äE?ñÖ¡õåÑj2¬ŠÑœ4Ø’&šóÐJÕÁÙXÆAø#‚ÈÈÅ ø[ÁT®Á)´èg+©jÉ{·¯2Œâñ…9@ “ýÔ*7ɾDSƒ¿9°åûà/#ˆ)øH I¬*ñ·¨_x è¡)T/\„A‹j`L2Q_˜Ðèþ€(£*Û“=‚Œ<Ì5°9³eMI[›H-•Q¡Ã Rð”¡xâkðå#|> €F÷ @†¡ÝÁH«­q ÄS1"ˆQ6¼G–©R†âYìDÛþÄŒðX@Äæ4º?`À*€Q0€¡G¤Q£ñ5Hâkt&€T@|a@<€µ'KÒú}"SÛ lqSè$Y9e.¼ '¾}ùtóÚ%𯅀v^ ~õF„ðXG£ä7´"eð8c$TíÄæ4ðó˜Óehã‰È#‰È*‘Þ`}"R/Ž$;ã$"èï_¿~ÿú‰_Á@UfD†©^À“TðD©iƒÔøÂe5‘V õH!;kÓ3yËY_%;Ñ…9@1^¹pB[ßüêÅ“@ލˆ0¥gNŸàååçáã` àÓ‡x/Y=sâ°–®þ÷Âè`ÎMWà yøòéÓý»·<¼ýñ¨yýæ-\³aÇht>`¨>þO?yü—‚ÁŸC†FÓÕhÚœ€øÂ €FïÚÙUK@Ô £`XFÊhÚ _˜ÐpØ0ÚÙ£icŒò s€Ý0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ž4 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£óCŠbÿðþõhhŒ†ÆhhŒX@|a@£óC;“ß¾y—¬¨˜øhhŒ†ÆhhŒL@|a@6@ƉޔœŒ_/…ŽŠ!™\[׫,Çù³G1³ú =HÂ0$54°žæ¿ïAªóÈ>»`ÓšßqyOБ”Æð[ARhž …¥d'º0 ™ þî°!ᘪäUù—CckÌ‚oð;ÝBCTRæõó'h¡§¸¡J€ `8“¤zsŠx¿ãR9Z¦Sˆ/Ìhæ°¦ äû³Ð@¸VÚe[˜÷C£— Ç Y„Õ1˜­4WaºY= 66vVÜ1vÑI>Åuc;žN¤ïˆ¸ž¼+Û°††€°Ší1i†’ —v´KÇð§(º…u³6æà üG0»QøX T€øÂ €†Ì|f ¾«Nᵫ˜á2Hâm 1Ÿ³YÓÜäÄd?b|GÐX’ìÅܼüPœÔRŒ(&£”ÄVƒ-4¨Û+¢°2 F=ZSÚ#5ð|˜@|a@CxÝ‚žƒT±…›‡WðíË' ‰Õ=˜­$¬í><&Ó.Ö€¡,æ~ýü-Ù¡#!@‘ßd…Æ@¥%ª\>LÓРքI³SÄ þL‹À´ýâ s€Ý0ð›ILDŽ0™Hõ~c))…°˜C.òhtä•n$yp BˆL«Ó؀̚Pø˜m‰Äæ4º?`°4 éÜ©$¦‹XÍÁÄ{„`ŸÂp i@|s’Zã”§F’¼I·¦Uð_˜2çÏŸ¿xÐhy=¢7Mó r1G£ `0{Ÿ¼Ð<ôp üÄæ„R°°0ãA´!=ø[©”wúˆq í2 …&ÿþõë÷¯Ÿ8Ð/J‚êAUƒ*Cãëç@6ă!qé¥$ÍlhP’ÆhY¨øC¢Ö$¾0 ™ÀL+h£ h#hÑ_?ƒ9*G¤^âÃ@h.—37LÞÚÐï_«ªëœ?{ÔÐØ—Ìà}ŠÇmhþÂ"%/ 1CãÛó' _> âK J¢˜ÈP%†M£Ð ctÏœ0IiŒ J‚©e@˜Íã• '´õͯ^< äðññâQzùâ9^^~>¾Õ­ÌýGÈn ¬ÕyEÞ– A¼Ã)4èœê†úÑ—OŸîß½åèê‰GͧO fÁš ;8@£ç aoñaJÀa†thP½Üic´Ð'_˜ÐèýC¾à£s–Æ5¤62CƒZ€Â!¦a4 –²…΀øÂ €†êþ€¡µAl8Ñ Øá,Ã/ð‰/ÌhtÀ(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4z^Ð(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0Tž[$GÁ(ÃüúEÔaˆÄæ4:0T+€[7.†Ã(#((©TC|a@£óCµÐÑ3 ŠQ0 †¸ré,.)`®geã8æ(Áj€øÂ €Fç†dL¬£cA£` ;,ßÕ4tqÉ?¼ÏÎÙËÐÄš`5@|a@£óCµ&Às›ü(£`(‚‹gIIˉJHC¸¯_<…0à"þá;6®V„Kv¢ s€¢uëhd‚Q0쀸¤ìÓGw!ì÷nCDΓW˜Ðè|À\<ül¬£ý€Q0 †xùü1/?„­¦¡ Yú!&!ûáÝk ã øb8bñ…9@ öù€¡{¦+%?p𠃽ýh¶£`X``hºèÔ±}x& °â s€Ôó˜÷ú¡j€¦Nݽk'0}˜Y9mX¿f4«Œ‚Q0<€˜0/µŒ"¾0 Á;€Yâ£]c‹µ‹Q¿ç×m½øÅ!‚¸º xîfÀq-0A§2xŸ0[£ÙfŒ‚áSX[QË(â s€bó¸ J´¹‡³q•ÎÙhfbµO NŒS‘Ù¤v ½ÅQ0 FÁÐÿ©eñ…9@ ÃýÈe(ÖòW!KjáK’áT± ˜Y9}x÷úü™££YgŒ‚al¨× ¾0 Ñý8òr©9zƒU¦ÀÕÍ= 0äÀÁƒ@’!d4²FÁ(àØ¡h"_¿|âæá#Ã(â s€Ý@r#ëH£ù”ƒÑEA£` c_Jê¢ ’ s€bóCkiÐ(£`däU¸¹¡«ƒ>¼9BZV Ú-øúùæ5¢‹$¾0 &dΟ?ñ ú7ÃÑFc¨U`ä!R V½d8 FÁ(˜à÷¯Ÿ¿~C°ô‡Êiñ…9@ êù´jm²—ìícÄ ßã2ŸŒùRJLUJ(£w£` /`bépæøIiYr*ܯ_?à§Gœ>~ØÍ;˜£ˆ/̈ñÊ…ÚúæW/žrDE„ñ(=sú//?ßåa0š9:ttIè(Ã\»|öÉ£X¥ þCC¿|útÿî-o`˜T”§?\U¬ZÐîÛ£`‘s1sµrñ…9@ÎŒôôG|6D°'1 FÁ( 0c’ˈ/Ìht>`¸uˆi;wáÖÖÊ€š= FÁ0O£$—_˜Ј;/hŒ‚Q0 †1 õ¼ €£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €F÷Œ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|ÀPll´0öׯô±hŒ‚Q@•Š_˜Ðè|ÀP­nݸL#ѯ% ©E£`Œ s(Î’è €Fç†j £gL ÃYÙ8à—Õ-bcc£‘E£€àÊ¥³¸¤F£uˆäŠ_˜Ðè|À¬€)€•fC4†&ÖÀD¦¦¡;zsýHÄ%{üð>;g¯ÑPŠ’CñWÄæ4:0TkV6vþû×O¤FûhhEpñì1)i9Q i÷õ‹§\ÄÃ?|ÇÆ•Ξ£a5ärň/Ìht>`ˆÖl¬4¸C­F‡‡*—”}úè.„ýàÞmmFq4~‡k@|a@£óCpñð³±bo¡ ‹!sß¿}…&Á¾~ýŒRÙ°Žö†*xùü1/?„ Ù2Ä$d?¼{ d|ùüq4~‡"@Ë¡¸ñ…9@ ùÌS‹á×m;h²˜ ðŸ½G’bâOŸÃ–áE<°ÜG.îñýøÁƒìíG³ßÐð©SÇöá™$ƒ” ‰/ÌhˆÍ •ž˜Weá/ˆñˆ§˜l—Ó@:’Ôš`Ãú5ÀâÃÌÊ ÈÍ„Cˆ ó¿£a5T€€èîݻΟ9š–‘KP1ñ…9@ ÿù¬%8æ=mD*Æs»Ú@XM†_Ĉ§J£J•ƒ«€&N$6Gs૬­ˆìŒ†ÕP$-Ò#¾0 ‘;@݆9‘7¢U'ôé1P2 Dv þÆéHÄæ4|öà™-œ5 Z“ŸŠóh}òÚþÈÀÌÊéû×ÀNèhÖ*À†¸~Àhœ!̆Ĭ"µ0 !6€g¶–Èÿˆ Õë¡Á€|]©•A@`Cȃ!ŒÑ|8TÀ±C;ÑD¾~ùÄ̓~ `YeãhX ̆®®nVV–ÔÝ@Cl>€Šs³T/¯qÍ Ó îb!Ì‚žÂ~À袠¡àkCG ]@R6$¾0 A:0H.('¾€½Q} 6 #¯ÂÍ ]ôáýÈÒ²JÐnÁ×Ï7¯N[@|a@Ãÿ¼ ¬…81s¶p.žrŸ$ñQ0 è ~ÿúù V@Æý€_¿ÂeGƒhâ s€¤óÈ…/ýh1‹r~8 >|ûJ._<ÇËËÏÃÇ7 Ô¤Ž#AŽ¥Ýª>ä³£1gGÁ×.Ÿ}òèV)7ïàÑð¢ÿ¡¡_>}º÷–£«'>}8±fÃŽÐèyAC[sÀN=0Т@N^ óž0Œž =t–®1†ÃÈ©È(Ìhôþ€î0µØ ^ PÝIhÉ‹v‚Q0 (Ï¡¸ñ…9@Þ0€’¥DÀÒ™ÈÔ@y·ƒ>‚Q0 ¨ˆ/Ìhôþ€Q0 FÁ(n€øÂ €FçF±€ì‘+¸öÑ-£` ç&’ÆHÊAÄæ4:0 H+ÁG‹òQ0 ¨hqV…9@ÎŒÒ ˜»í°]׃çŸQ0 F‘½m´¼C|mA|a@£ó£€œ,®ËÑð3FpŒ@£ó£€Ì .AbDFÁ(ÍMűö ˆ-Ù‰.Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/̈´ù ).þÑð£`Œ‚Á xx>Þ¿{‹øù€"m>Xpsóކò(£` f@ü|@‘0 ©­ñì1IiÙÑð£`Œ‚Á N?ìêéOü|@‘6 «otùâ¹'Œô(£` BàéD’z€"y€‰©ô(£` @£ûFÁ(£`ä€Ý0 FÁ(#Ðèþ€Q0 FÁ(¹ €FÏ £`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. ’ç.œ;98}b`d>øÝ<$9ì}4üba44FCƒ/`DÚ|À™SÇÔ4t§Ïïßåèê9ÈÝ<$9ì}4üba44FCƒ p€b¼rá„¶¾ùÕ‹ *NTD_pú„°ˆ˜¢ªÖ õüŽ+=¼ý¹›‡„#‡½†_,Œ†Æhhàñxýæ-\³aLj´ùqIÙ§îfÏczaºyH8rØûhøÅÂhhŒ†ñ…9ióÜùõëÇ`ö9¦¡›‡„#‡½†_,Œ†Æhh_˜Ã@‘6ðæÍKñÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m;;;û`ö9¦¡›‡„#‡½†_,Œ†Æhh_˜Ã@‘6ÀÎÎNL@™9œ;u¿A-äL/ãf2LgG̥݃Ûèìè©! 4M‡”Çà`Kœ[Œ`†²cè•Dæp@¤Íððò³±qc.¦2‚‰4øòù#V/éf` ]¹p‚Šî¡¢#u ,Ð܆)2P€ì`@O •X€˜Ok[(Ì8ƒ-ql1‚æw4.-Šâ½€ М 83­ÀÓ=.üC®ðd6L#«ÄŦ–#±š‰ìZÂÓÁê<ü9œn¦³ƒáêñ$-*Æ#ýÏ £$ÑÒz¬iÀON£ÜƒÄ{ €huf/˜*ÕA@‹+¨î`ºÝÓ@Ó ¦ÜG˜Ã¸ºÀ´ð&nX¬ŠuóhhŒ†u½€>}úÌ;; €H›`cã`¥ýV7ò¬`cû…Õ ôqóÀ:r=8$‚}¸y44FCƒB/àDÚþ666V6šœDžl`?cz>nXG ‡D°7†ÆhhPè\ €H›`U†´]?ðòÅcJÚ˜^ ƒ›Ö‘d‡Ø õѨ›GCc44¨î\ €HÛ¬ ÙXieøÜÂô rópä°÷Ñð‹…ÑÐ ‚^Àˆ´ù€ß¿~þ¬•!ÐmX½0¨Ü<$9ì}4üba44FCƒ p€"a]l~|púüôñÞ¾AƒÜÍC‘ÃÞGÃ/FCc44z ¯  ”:€‹‹‹ ׯ^|òèÁ ô¹«§ÿàwópä°÷Ñð‹…ÑÐ b¼ß¾}ƒ×DZ?`Œ‚Q0 FÁPÈý€nç‚Q0 FÁ( ­î£`Œ‚Q0ø@Ñû¼ Q0 FÁ(ƒÐÜ0 FÁ(£`€£`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ˆäù€ë×®Œ†Ú(£` N ©¥C’z€"m>àö­ëªê:£¡< FÁ(ƒœ<~ÄØÔ’xõDÂ|À½;w$¥åÄ$dFCyŒ‚Q0 'ðô‹Ø¾i…¹¥ ‘ꈴù Ù'ò(£` f@üä.@‘6ðèá_¿~Œ†ï(£` f@üf/€"m>àí›—Â"â£áK7`bápæÄ¬"@¦z¸š.L½¸`5ü °Ú‚߃¤EP åV æô@Œ€¨d4¾é[`81"qÅ#šø«ç4´€$ g¯Y @Ä$ž…&EŒ7‘¹ø­ èZ Y ÍL¸zRi2²245x !/1à2Š 8Dhf`âŠ÷Q@@ü|@‘6ÀÃË?Z ‰:àÞí«JªÚ@Â…°$©u©5V—`Õ§¤À4®ÙûÄ{-ÄàâÈ\`éaáZˆW@ŒÉhâ˜~Ác©u.£ˆ‡xb‘M“Q@kðåË'Ræhô¼ Á ÙlH¥E°.‡áwAĘŒ_œ¡AŒð8ÂÚæͼˆ/Ìhô¼ !P’W%À³åÍxšºÕr/S«^'ÞL•ha;Úf€øÂ €FÏ ä·4„¡Tqæ˜ 16b \î!ÕŠ!Ýæf€øÂ €H›`c¦7 o>m€s¼žnó2ò*OÞ!Ƀ¸¤p©Ä´­Àr±º¿kqÙŽ,Ž•M’Rý Äô2~Ãá‚@]xôâU\V`úq´”ðƒøù€"m>\pŒ†2}c”ƒl‘WÏŸˆIÊIL•¸âMY;¦i`ª'ƃ¸¤°ªÄ´ Ñ”áw-.ۑű²IR€l).±ªA–%³È‚xR.»pY&g–Zbüd e> €H›Ö¬£ãEô˜NªV6$÷"ƒ÷o_aŠC‘¹‚ÂbÄ+@“%ƃ@í]xŒ‚«(@v3Vq%Z+!-;Ê£`Œ49bôlùgN¶st!^=@‘6 ©¥uýÚµ'Œô(£` BàêîE’z€"ù>a`oˆFzŒ‚Q0 ! ~&hô¼ Q0 FÁ(¹ €FÏ £`Œ‚‘ hô¼ Q0 FÁ(¹ €Hž£`Œ‚Q0l@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ„R|ûöm4DFÁ(£`ä€b ‚Q0 FÁ(± €@ý€ÆÆÆÑ€£`Œ‚ˆÑÁÁa4FÁ(£`d€óldÆÆPïƒIEND®B`‚htmldoc-1.8.27/doc/htmldoc.10100664000212600000240000003517307620261711014216 0ustar mikeuserhtmldoc(1) Easy Software Products htmldoc(1) NNAAMMEE htmldoc - convert html source files into html, postscript, or pdf. SSYYNNOOPPSSIISS htmldoc [options] filename1.html [ ... filenameN.html ] htmldoc [options] - htmldoc [filename.book] DDEESSCCRRIIPPTTIIOONN _H_T_M_L_D_O_C converts HTML source files into indexed HTML, PostScript, or Portable Document Format (PDF) files that can be viewed online or printed. With no options a PDF document is produced on stdout. The second form of _H_T_M_L_D_O_C reads HTML source from stdin, which allows you to use _H_T_M_L_D_O_C as a filter. The third form of _H_T_M_L_D_O_C launches a graphical interface that allows you to change options and generate documents interactively. CCOOMMMMOONN MMIISSTTAAKKEESS There are two types of HTML files - structured documents using headings (H1, H2, etc.) which _H_T_M_L_D_O_C calls "books", and unstructured documents that do not use headings which _H_T_M_L_D_O_C calls "web pages". A very common mistake is to try converting a web page using: htmldoc -f filename.pdf filename.html which will likely produce a PDF file with no pages. To convert web page files you mmuusstt use the _-_-_w_e_b_p_a_g_e or _-_-_c_o_n_t_i_n_u_o_u_s options at the command-line or choose _W_e_b _P_a_g_e or _C_o_n_t_i_n_u_o_u_s in the input tab of the GUI. OOPPTTIIOONNSS The following command-line options are supported by _H_T_M_L_- _D_O_C: --batch _f_i_l_e_n_a_m_e_._b_o_o_k Generates the specified book file without opening the GUI. --bodycolor _c_o_l_o_r Specifies the background color for all pages. --bodyfont _{_c_o_u_r_i_e_r_,_t_i_m_e_s_,_h_e_l_v_e_t_i_c_a_} --textfont _{_c_o_u_r_i_e_r_,_t_i_m_e_s_,_h_e_l_v_e_t_i_c_a_} Specifies the default typeface for all normal text. --bodyimage _f_i_l_e_n_a_m_e Specifies the background image that is tiled on all pages. --book Specifies that the HTML sources are structured (head- ings, chapters, etc.) --bottom _m_a_r_g_i_n Specifies the bottom margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millime- ters (##mm). --charset _{_8_8_5_9_-_1_._._._8_8_5_9_-_1_5_} Specifies the ISO character set to use for the out- put. --color Specifies that PostScript or PDF output should be in color. --continuous Specifies that the HTML sources are unstructured (plain web pages.) No page breaks are inserted between each file or URL in the output. --datadir _d_i_r_e_c_t_o_r_y Specifies the location of the _H_T_M_L_D_O_C data files, usually _/_u_s_r_/_s_h_a_r_e_/_h_t_m_l_d_o_c or _C_:_\_P_r_o_g_r_a_m _F_i_l_e_s_\_H_T_M_L_- _D_O_C. --duplex Specifies that the output should be formatted for double-sided printing. --effectduration _{ _0_._1_._._1_0_._0 _} Specifies the duration in seconds of PDF page transi- tion effects. --embedfonts Specifies that fonts should be embedded in PDF and PostScript output. --encryption Enables encryption of PDF files. --fontsize _s_i_z_e Specifies the default font size for body text. --fontspacing _s_p_a_c_i_n_g Specifies the default line spacing for body text. The line spacing is a multiplier for the font size, so a value of 1.2 will provide an additional 20% of space between the lines. --footer _f_f_f Sets the page footer to use on body pages. See the _H_E_A_D_E_R_S_/_F_O_O_T_E_R_S _F_O_R_M_A_T_S section below. --format _f_o_r_m_a_t -t _f_o_r_m_a_t Specifies the output format: html, htmlsep (separate HTML files for each heading in the table-of-con- tents), ps or ps2 (PostScript Level 2), ps1 (PostScript Level 1), ps3 (PostScript Level 3), pdf11 (PDF 1.1/Acrobat 2.0), pdf12 (PDF 1.2/Acrobat 3.0), pdf or pdf13 (PDF 1.3/Acrobat 4.0), or pdf14 (PDF 1.4/Acrobat 5.0). --gray Specifies that PostScript or PDF output should be grayscale. --header _f_f_f Sets the page header to use on body pages. See the _H_E_A_D_E_R_S_/_F_O_O_T_E_R_S _F_O_R_M_A_T_S section below. --headfootfont _f_o_n_t Sets the font to use on headers and footers. --headfootsize _s_i_z_e Sets the size of the font to use on headers and foot- ers. --headingfont _t_y_p_e_f_a_c_e Sets the typeface to use for headings. --help Displays a summary of command-line options. --helpdir _d_i_r_e_c_t_o_r_y Specifies the location of the _H_T_M_L_D_O_C on-line help files, usually _/_u_s_r_/_s_h_a_r_e_/_d_o_c_/_h_t_m_l_d_o_c or _C_:_\_P_r_o_g_r_a_m _F_i_l_e_s_\_H_T_M_L_D_O_C_\_D_O_C. --jpeg_[_=_q_u_a_l_i_t_y_] Sets the JPEG compression level to use for large images. A value of 0 disables JPEG compression. --left _m_a_r_g_i_n Specifies the left margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millime- ters (##mm). --linkcolor _c_o_l_o_r Sets the color of links. --links Enables generation of links in PDF files (default). --linkstyle _{_p_l_a_i_n_,_u_n_d_e_r_l_i_n_e_} Sets the style of links. --logoimage _f_i_l_e_n_a_m_e Specifies an image to be used as a logo in the header or footer in a PostScript or PDF document, and in the navigation bar of a HTML document. Note that you need to use the _-_-_h_e_a_d_e_r and/or _-_-_f_o_o_t_e_r options with the _l parameter or use the cor- responding HTML page comments to display the logo image in the header or footer. --no-compression Disables compression of PostScript or PDF files. --no-duplex Disables double-sided printing. --no-embedfonts Specifies that fonts should not be embedded in PDF and PostScript output. --no-encryption Disables document encryption. --no-jpeg Disables JPEG compression of large images. --no-links Disables generation of links in a PDF document. --no-numbered Disables automatic heading numbering. --no-pscommands Disables generation of PostScript setpagedevice com- mands. --no-strict Disables strict HTML input checking. --no-title Disables generation of a title page. --no-toc Disables generation of a table of contents. --numbered Numbers all headings in a document. --nup _p_a_g_e_s Sets the number of pages that are placed on each out- put page. Valid values are 1, 2, 4, 6, 9, and 16. --outdir _d_i_r_e_c_t_o_r_y -d _d_i_r_e_c_t_o_r_y Specifies that output should be sent to a directory in multiple files. (Not compatible with PDF output) --outfile _f_i_l_e_n_a_m_e -f _f_i_l_e_n_a_m_e Specifies that output should be sent to a single file. --owner-password _p_a_s_s_w_o_r_d Sets the owner password for encrypted PDF files. --pageduration _{_1_._0_._._6_0_._0_} Sets the view duration of a page in a PDF document. --pageeffect _e_f_f_e_c_t Specifies the page transition effect for all pages; this attribute is ignored by all Adobe PDF viewers... --pagelayout _{_s_i_n_g_l_e_,_o_n_e_,_t_w_o_l_e_f_t_,_t_w_o_r_i_g_h_t_} Specifies the initial layout of pages for a PDF file. --pagemode _{_d_o_c_u_m_e_n_t_,_o_u_t_l_i_n_e_s_,_f_u_l_l_s_c_r_e_e_n_} Specifies the initial viewing mode for a PDF file. --path Specifies a search path for files in a document. --permissions _p_e_r_m_i_s_s_i_o_n Specifies document permissions for encrypted PDF files. Multiple _-_-_p_e_r_m_i_s_s_i_o_n_s options are required to grant or deny specific permissions. The following values are understood: all, none, annotate, no-anno- tate, copy, no-copy, modify, no-modify, print, and no-print. --pscommands Specifies that PostScript setpagedevice commands should be included in the output. --quiet Suppresses all messages, even error messages. --right _m_a_r_g_i_n Specifies the right margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millime- ters (##mm). --size _p_a_g_e_s_i_z_e Specifies the page size using a standard name or in points (no suffix or ##x##pt), inches (##x##in), cen- timeters (##x##cm), or millimeters (##x##mm). The standard sizes that are currently recognized are "letter" (8.5x11in), "legal" (8.5x14in), "a4" (210x297mm), and "universal" (8.27x11in). --strict Enables strict HTML input checking. --textcolor _c_o_l_o_r Specifies the default color of all text. --title Enables the generation of a title page. --titlefile _f_i_l_e_n_a_m_e --titleimage _f_i_l_e_n_a_m_e Specifies the file to use for the title page. If the file is an image then the title page is automatically generated using the document meta data and title image. --tocfooter _f_f_f Sets the page footer to use on table-of-contents pages. See the _H_E_A_D_E_R_S_/_F_O_O_T_E_R_S _F_O_R_M_A_T_S section below. --tocheader _f_f_f Sets the page header to use on table-of-contents pages. See the _H_E_A_D_E_R_S_/_F_O_O_T_E_R_S _F_O_R_M_A_T_S section below. --toclevels _l_e_v_e_l_s Sets the number of levels in the table-of-contents. --toctitle _s_t_r_i_n_g Sets the title for the table-of-contents. --top _m_a_r_g_i_n Specifies the top margin in points (no suffix or ##pt), inches (##in), centimeters (##cm), or millime- ters (##mm). --user-password _p_a_s_s_w_o_r_d Specifies the user password for encryption of PDF files. --verbose -v Provides verbose messages. --version Displays the current version number. --webpage Specifies that the HTML sources are unstructured (plain web pages.) A page break is inserted between each file or URL in the output. HHEEAADDEERR//FFOOOOTTEERR FFOORRMMAATTSS The header and footer of each page can contain up to three preformatted values. These values are specified using a single character for the left, middle, and right of the page, resulting in the _f_f_f notation shown previously. Each character can be one of the following: blank / n/N arabic page numbers (1/3, 2/3, 3/3) : c/C arabic chapter page numbers (1/2, 2/2, 1/4, 2/4, ...) 1 arabic numbers (1, 2, 3, ...) a lowercase letters A uppercase letters c current chapter heading C current chapter page number (arabic) d current date D current date and time h current heading i lowercase roman numerals I uppercase roman numerals l logo image t title text T current time SSEEEE AALLSSOO HTMLDOC Software Users Manual http://www.easysw.com/htmldoc AAUUTTHHOORR Michael Sweet (mike@easysw.com), Easy Software Products TTRRAADDEEMMAARRKKSS PostScript is a trademark that may be registered in some countries and Adobe is a registered trademark of Adobe Systems Incorporated. CCOOPPYYRRIIGGHHTTSS Portable Document Format Copyright 1993-1999 by Adobe Sys- tems Incorporated. HTMLDOC is copyright 1997-2003 by Easy Software Products. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is based in part on the work of the Indepen- dent JPEG Group. NNOO WWAARRRRAANNTTYY This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 5 February 2003 HTMLDOC 1.8.24 htmldoc(1) htmldoc-1.8.27/doc/htmldoc-fig55.png0100664000212600000240000002355310322727434015560 0ustar mikeuser‰PNG  IHDRâv=| ¡ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF&áIDATxÚb¼ráÃ(£`Œ‚A r *ˆHi뛆Å(£` 6ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ Äg™…,‚0AD12 1ÀÎ`DÃ0 C?#š\Võëœf¡Ûˆ©…7`1—P´ælÞ&à¬…ß X ¿ÐM¡[‚³FÓêhZäi‘dIzl7 €b­©FÁ(£`0€b ‚Q0 FÁ( )ˆ4å'^±££cZ×d€-¦GÁ(£€æ€Èù¿5v` ÐÀ z¼<× D£17DÁ¶ñ@4£`Ðzkúëí©@’G-H~¾9Hòªç~º1ÈàÓÌCSüáêD )¨]@¹;žŸéDæJ›U@ON¶Ió*òŒ½{´œEÙ¾ŠAve{2WÏ«“l£N¯+’fA Ü“kA!i2‘ £/Í’vÑÓäÁ%™@Ò!v<°(ÔŠ›¹aá?k4Ñ‚Q0€@ÇÀTŒ mXÁADÔ ŸF.ˆ¢`Ê’H eZ´æÙ鎧§:¤Í*Át%X†qñ• ÷èzv@ÅHU‡™O ] ;ÆÏbÍ"£` xrá°\"H¹L°Œ€"ª˜†·¦?^Ÿdðkå¸6Q@+"ûþ*¨1(¤Søîr?!¬[$ß^ê’"úÅ@òõÅ^¸Qb†%DÖà’ºXRÃ[ÓO´²–ÕŽ·ÊYVÙµÀµ(X×B÷7Á•ìê¡mꃠִЍe}{=\šHñͽ ½ÎÍ7öÔh¸´\ß]äjº¶Ék»@­xm÷6ü¾´X»0è{w]ÜRfà̹°¹.kä×aœÝX 4 샳O­5¢Í‚' ·¦O¬Fô],Ã@ále.²¥6‘SIJðÖô¾iÈâ.Is€äîy)p·”y@rçì$ éž:ǬD´ù@öö™ £ylŒ*–Ôp.~õ„>6Í­š $¿ÜšDL=¯¡ôʵ uð{ˆê‹”ýê|%Þ{|¼Âx.£å­jä­A¥êƒ£Í 2ú¨ØU´­S";Dq¬lß ÷¸s$¨êبæRyk_\ͽµýÅ­e¤Œ6ôí6Ðç6Ak&cÿ^ã€^“P}f}\£YÐ`lÔ‰Õ *Ð"t’e¨^<¾  ÖS€È8²<Y‹mô4 yhi&²àÅdA§„YÎ ³g# º&ÍqMž D@ö®9Ipñ³!Œ³@e´gúÏô…£ÙlŒÊKj"Ëh  rVz[Ó$uŸ‘[Ó`kÙjä5…Øš† 8hº‚Ô×wWCĵÜÚˆ‡¶¦‘‡AÎ#5¨1[Ó´‡–d"—ѸÀÞù© ¦tâˆ{‘[ÓÈØšf+£€ÚÞ”†~àDóyoÀe4¤)ýúBu ¶¦Q7 "lM#ïS‚”ÑÀÖ4еg6ÑÔjû˜é@â.¦÷.•ÑÀ5$èö€ËhHSz÷ÜäÑ,4 FÊhøØ4Á’ €°,ÈãQƒö¦yÕsÄÏNƒ&è Sˆ Ó¦ôŠ{È24à€:â±i´AQ0 FýËh䀢¨5- ÿáêDø¢.hñíå>d5"úÅÀ5‘íèg§¡‹ÛÀ òð5å¬jkA™E´©U´©»¤ >‹¨dW¯lW÷P#| ˆî¨‡Ï"ª95‘ºTCÇ£ýÊŽÊËHkò0äøv_Ø\Š<èaäßkìß lPŸÝ€2îaÔz]!| .n:ñÄê|ø,¢eØdª<@=ÀSˆ@lPãoG{¤-Ø1+atqŒ fÙà @1Uhë›_½xrôè%¸Èb-·ÖÑãlF^=zi4­R|ôR¤)?ñ»8Ù,®Çv ÑÍâ£`Œ‚Q@s€u8‘ €F‹i,26=ºÂaŒ‚Q@àèèH‰v€-¦GÁ(£€¶íÄ;R@ž7= FÁ(ƒ¢5}jMÜhpŒ‚Q0,À Æ( €Åôèŵ£`Œ‚Q0x|q@zŒ‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 F.àVÍfdd<$VGh;ùÿÿÿ!ä(£`Œ(,¹T²‰ì6`±ÜÐÐààà@£Åô(£`ä‚AUFI¬Å4@!Ž^]7 FÁ(i€‘‘X>~»3m08èÈ¥á,–!G/ÐèØô(£`äH=HZÓ¸j €"¡5 Þ†Œæ ‰`JQR¹a…6²ŽÕ ƒ§r¦C(‚Q0 ¼5ÝÐÐP__,<ñêOyk €¨Óš†Æ£ùŸ‘ª§ÌÁmA6«Õ$E#½ŽÂ£Ð©£`Œ‚ÁÓš†—ÑÀ.d™v­i€"ml¹=H°mH^ãOk.HëÆ;…¦¡5ùGÑ£` ¿Ö4òåX"Òþ¥¤e«5 @LÔò*ì6 F´ö)²8f– P×j¬&ã².d.&ƒì–;~çfžQ0 gkÒ'–ËÈ&¹ÜªÙ¶¬qÕDÚ‚<ÌÎ;› 46¦Éøe)±šFºÈ <ǪlŒ‚Q@ÓuÓÄ[ÂKK¬w‹l<²ë ¬ òˆ´Ö4|¸ƒZyš¶ñ˜<àÃʇ‡íèö(ƒ¶5 l5ëXIø¨4¤eI¦áQL¶«è;Ôòæ`ë„ •Z1 »}˜cÓXÏîÀ ˆ³†ìsÁZqþ'nÝ4@âÎ`†ˆÿÿ™vB”úŒË@7‘XœÅÔ㯄íù ÕäÅLJº?SŠt¾–ÕÆEÕ”’‚îmMsQJWîf žd¢m"TmêÍK½™='ɦ'7C$Ãa—P'{ç׉0KÚPÍmb$ Iø‹š¾õoÉÜòre=*h:5} @Ìã‚@ŒÿZWrÝLPŽ¡&†?=,̾pkÝ‘^³#bƒŽ;¾Oy%ú éY cç¼zÚÄq>–¨«£ó¦­­†!?Í’YÁtJéyó®¶d@ Wš¸Ð™Ýn3=–œc×%듦ªCšÞhØŽMÿ'÷ŠX¬M~bêùÿ8nƒÄÔ…«WAüø …<&ü§ÒÕeø=þÛ¡‰Tx%>p¨ÕvÃošìÿAps1rª&è ‚#"¥ðXDR.£CkHBfH¹{­e¼b2«5¬Wk €†mkš`‹ø81­EJZ^$µ¦ ZDRkš ­i‚Í"ÊÛõ”h'&v(oÏ™,¤5M0ˆ sò¤ˆôËÀŽM“4€Ô6.Þq•È’1±Ò=>2ŠWÒ¼ ú,èèîÙ6W£–©ïœkP{CÍCøæûþF4ísE62=–¹gzàiñ"Co4†Ízí‘nX[ÓðSIÉnŒþÇvƒ"Zkíöq\­i€¹gzàiñ"Co4UŒŒ[Óf!‹º#µM Ô Yò¼ÿmÕd1 1­i€=ziŒ‚Q0ræ™pRÇÀùTRbNð€“²Ù Îô ÑbzŒ‚Q0ÚšÆÙ.ÖܪÙd´¬Ñl¡dl €FÏ›£`ŒŽMð_΂kXm 5\û¢o ÑÖô(£`´5MÔˆ3I-k\­i¸vâ[Ó4Úš£`Œ¶¦I[ÖpXÇüOk €F[Ó£`Œ‚ÑÖ4Éë£ ¶¬á@[ß¾8õE´Ö¸ZÓ4Úš£`Œ¶¦)X[ÖðÇ!k¥‰Yþ‹«5 @£­éQ0 FÁhkšœÝ†ø[Ö–2øž-³EÃó€j𘃫5 @£­éQ0 FÁhkšj¹eMü²ü­i€mM‚Q0 F[Óµ¦qµ¬á£DêÅÕš F`­­o4HŽÆÙ(£`DFFF|£ ·¬å*ñç²]òõöT8X,¯Ù°ãÀ4Úš£`Œ¶¦©ÖšÆlY¯Wm@£­éQ0 FÁhkzÚ`p ®Ö4@¶¦GÁ(£­iš´¦I%qÕ4ºÒcŒ‚Q0ºÒc°XWzÐè Ç(£` Fô ÑAQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €Xà,ÈÉ £`Œ‚Q0 À÷š@±`£`Œ‚Q0H@!ŠiÈå£`Œ‚Q0  Ñ±éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €F‹éQ0 FÁ(Ô €èZLëX #êšL¹vê:iP=š›ãñx¿OqÉ’>”&A—TL¡ÙK#?9@t-¦¯\8DÈŒA•í©â¤ÁV^ ªâu°…01þ£f`½ƒfû€ç…AR,ËÆ@zŒ‚Q@“2¹¼@c•Á($ 3fÁÿÿº›DÓn[Õ±TÖÑ‚|ÿLW×o‹S3'¡YèÅ£^É4”WNGuQ•¯ B=FŒWKã-Î Õe. ©¶ã+˜ç5£0n5X–9¯H² ».d®¢ ÚpÝ~~^MfË„‹ÿ³›!‚Ô'# ¥UÓ5Ó‰Xßa݇w">¤UU°âåöÃÉ s ƒÀä\!æ(MÕo­¤ VxE¸—ôßñ›Wè¤A>ojÇüxîK6s?¯»R5ylÄ2$\ILí‡5ñ‘g fJ…D*Õã3õ`uÒ¦¿¨ÞÊÀe þÚŽø(ÆS¸ {Z1ˆU;.Ãáâ˜$©¸L b"Û:”wä¥U’Ê„Á hhÓä¥\ºð´ð´ éSýâwíR?-ò~!ÛûXKp4¯Ñ.É6œ> :ª$ªo{R%­ÑY€ø±iHè™Êɤ¼6)D’˱6‘ûƒôì‚¡búkÐ6:ˆq'ò(Ükx|J-Wa5œøX&²mHR:¡Q$R’ZHÊìDò€” t˜1ƒ@†þÿ_wÜ^Kì‘Õæ²tËoZf‚Ußò1á^­XIrÄmäv¬†¡,’™uM ¯¨e'äù‰ÕAXäEÜ9™yð`Ž‹Ë¾ ,”õeçè±êrΙÌ–UÔ/×§˜°¼Ät®¶¾ùÕ‹'¶•4D‡öGWË(M´k6ì8pà@± xœ Ñ£¡ër:ŒHŒË(Í2T4ÀÅ4ž¹ûAFSÛh€Œ‚ÑB@£»GÁ(£`P€ÑÅôP™í¥¢;‡Ö7ñK;†nR=ök4¢‹éAÞ £â¬4ÝŽ^£Ñ'imËÐ=êhÐÐè Ç(£` j@ô.¦ñŸ„‚Ì%éHòŒÅsžs± žAƒË"46ñG,‘ª…òóhˆ9(ŠF‡Lá2„Ô³“p­5°I…¤43°G‚Áˆ…Îe4®#„pÞBÌ™)d‹Ë<›k‰<ƒ†àqÁu$µ²O/¢b‘AõNÁEÓîmN¤ÄðѲxÀ@Ñû.DŠOÀzbÎM*£7l@Ó x:‰£`44†nàŒFܰ4º qŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 )¦Ñn‚pGoÀ£`ŒL@ƒ¨5=zŠù(£``€€br9ÛhÛyŒ‚Q0 ˆ4ˆZÓð‚re=r9ŽÌ-ßGÁ(# ½‹iø=ÇxÔ;íá Ðn¹£`Œ(@ƒñÊZ´âR@CJêÑ£`Œ4@PLãµ€7·‘UÂKêÑ£`Œ4@t-¦1‹Zb _äAÑ’zŒ‚Q0Ò@ ºAÌ1k´QéÑÂzŒ‚Q0¢@1‹ †  z/È;pàÀh š‚):Fa '@°nzÿþý£á> hFÛÑ£`˜€›£`Œ‚A h´˜£`Œ‚A hÀŠiFFFʵaÈ(£` -@ƒ¨5=Z掂Q0 F& ÑAQ0 FÁ(Ô €ø„¥çh= FÁ(Ò €FǦGÁ(£`P€þÅôè’Q0 FÁ4ˆ.ÙBSƯ —|Œ{t qŒ‚Q0<@ X1\z¢Í¢qñˆc5m´t£` '@£cÓ£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ñ{AÞ” £w ‚Q0 Fñ €èZL××׆ø(£`ˆ®Åôh;zŒ‚Q0 H4:6= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒ œµfÃŽÑà£`Œ‚AB< €BÓõõõ£á2 FÁ(ƒ\½x L¡Q0 FÁ(ƒÐèØô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@,£A0 †.ÐÖ7ƾsttãêPª èA¬îAs<~s†b¤czœ`ÌÒhð„  ÑAQ0ZFŸÀßrDV€6‚¬{Hø—ƒ1Ñ|=Ô›Õp¿ 10gã €F‹éQ0ZF›“ñ·‘yµxÅÕXÆïþaPRcÆ#‘)a@\ @£Åô(¹€Ôâ†øòz0—ÔD–MdWoC«z&©ä(_ÐèØô(-©-¨•ùia,=[—ò ¿ã‡tM^¤ øÄ@¶¦GÁhI½ñ‹96µ5Šu{ж©ÑŒËñ¸¼0äÊh´(ƒ8ž˜J3pí@Ó£``Ÿ(#O%ÖùÆAå;<.D®êº‘Kd˜×44ZL‚Q@T×xˆöôq5‡úRh´˜£`8a£Åñ04:…8 FÁ(ƒÐh1= FÁ(ƒÐè Ç(ƒŒÞu2Â@Ó£`´ÔÀÑÑq4~G8 ÑbzŒaƒ ûËÅG«(‚ €F‹éQ0„Á” £0¿ÃÐèâ(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@ Íâ£1 FÁ(ƒ£ƒƒÃh(Œ‚Q0 FÁ ²ëN23'ÚæIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig73.png0100664000212600000240000004116010322727434015552 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFAæIDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uy޼xá,ý¡o`<€a5Ècj°9vî(Ÿ‰¬:Ìél’@‘3pôÈ5 ]zzrÿîíÞþè2yêÔq5uú;ãÈÁ½Î®žVƒ<¦›óhçžòéȪÃÌñhÎ&Ê=bÄœtùâ9a16vv:ûóòù3Žà¢m @’#o\»*,*flîpùüq]CKº‘Pg\8mcïà×ÏŸ@DÂ7P Õ‘ÇíüòùÝH`5$CX ò˜lΣ{ʧC"«3Ç“=› @dÎððñÑÓ{_>}Bs@ž#-íÜámsº´@vëƒ «ASƒÍy´sÏ@ùtHdÕaæxLg“h(íÛIÏ ‡ƒ6¬FÒ qÏ@ùtHï4¢Ž'ÛÙ4”ö ‰í ÈŽD.”éÖ a5š‰{ʧCz§Ñu<ÙΠ¡´?`Hl_@väö6¬FÒ qÏ@ùtHï4¢Ž'ÛÙ4”Î Ç!;rûV£ i¸g |:¤O¢Ž'ÛÙD…ù#3‡s§PÑ3¸ Äï< .d.1N¢ÄåÄ8¹PÖxŠlª÷p…Z(a†Á`DV€+ôˆ)ZGIÎ#84ÊÄ»‡¤˜ÂcòƒGÑDì­ Ja•ES@0 ™€©—ŠhÄ|8ƒ’è J9CõÄLaé 4Læ0C–vaM¼#Ñúh…>Õ{ ÄÌàO‹ƒ?—Œ˜hÂã¼O3øÝ."<“ÑÊDäR‘¥6.{1Ëb’JgRy&Ó´œ¡]#»ô@»­ ‚ÀÿÿëAŽë̲ÜÃ`Íé¡îêˆ~îX:|ž$º‰Æåçv§|EðdÌ•üad ç*Aª:&í÷nÓHok•"©DX‡ºqRëó44EïÆsr}ñ<™ô–©kqQ"Hñb… p½oöÛW'Ñ$ôÈ3ûfH»="¢¾.ˆÊó¸z=Ä÷†p+T§Ã´ˆêŽ$²¥¦ ÎÅUèãR? ó”Çþê–È>I‰ŒÀ!Éj̬Nu÷Ð""¨ˆ·—ÈbøN¦ä: ëX`b ;1Ó.•÷à*7©Ò¢õº]ª;’È~1Ê ýâë’‘¶?€¤„‡ÇydŒöR>@Fpáj*Ò!"ˆÐÇe/¼UNÞ@ 1Zð«AëÓ`­T( 4ª”! ¡V*‚€Ý@CGb6Øñý‹x‚ŠG÷Y>Òy>€÷à©“0‡Hš {n–’ùl“Ïx¦£G˪¤"ü €F÷ÐБh¥<žö>®a’º£ûŽ/ ”óÈvñ¬‹šð˜LÓ9Ä„0æà M„ÙÀ5²4hË¥j€bB©X˜ ¢ ‚w©Ž$²iO­Bhóô +¬EI¶c5aD%$2ÜCd  ”OqÙ;HZúàœÁål"²F€B©ØÙØ"*–¤¦i\@î%!Hpa ­IFÉŽ«ÚÀSÀ¥ÕYƒSžMDÆ-Ö†Œ&JRòÐrUL&cù&åöb­-ˆ¤E SÎЮACd*"!k :Í`ÌBDö$Öe—ø‡qñœcÕIdy¾—T6rMCù|þ`ÄT€«ø&>¦pEVÉ´#§DZ™iá+ChꪎS¾ —½ÈsÂh†£IaÇ%HL5_0Ê@hµ+Ùå ž´‡YVš¢h7@(wÈpqqÔpýêE^^~’ŽT¥¼­÷åÓ§ûwoÙ:º‘çú;òέ¼|ü<¼Ôt$Á¢àËg 3nZX;Ð.¬6¦†“óhçžòé Oø;7:~ ö¥";›HðíÛ7Ø24z^ Iá@?©ÚGÏ ¢Î=/h4y  ³hôþ:’™^\c>ÄÔ£÷ !çÞ@çÞ®‘v@Ñc>€Zý#š®Û¥…#)_ðCv?`ôþ€!ä¼Ñûè Noíø¢ÜÙ4º?€†Ž½?`4! ¬{Fï9Ž'ÛÙ4:@CGŽÞ0šÖ=£ó#Çñd; €PÖ‰ŠÔpôȆQ@ððð«ªksñð‰Kʾ|þ˜žä·/ŸŽÙËÁÉ9 £`Œ@`mã@PÍë7o`낈´ù€3§Ž©i莆2AðìÉ#`ÀÍÃ÷åóG —ž$ŒFÓ(#ìØºÑÑÕ“xõDÂ|Àõ«¥¤å~ýú1ʈ˜ØÓÇwÊv m½Ñh£`d]C“ý»·¿] €H›øõó'†ò(£` f@üô@‘¼?`pîú£`Œ‚QÀÞ6Ì@Êv€J÷Œ‚Q0 FÁ( _˜ÐPÚ0 FÁ(£€@|a@CiÀ(£`Œ¢Jv¢ s€Jç‚Q0 FÁ( _˜Ðè|À(£` 7@|a@£óCŠŽVðáýkdîƒ{·)1MAIu4HGÁÄæ4:0T+€Û7¯Œ†. *&¯(Ü2}öä]C“Ñ C _˜Ðè|ÀP­´uGƒ+`cã8ö(°xþô±”´œ¨„4%¦yø‡ïظr´C _˜Ðè|À¬äU%Ýhhà†ÆÖÀjÈ—”}úèîh€Œ‚‘ˆ/Ìht>`ˆ6uÙYG;m¸ÁoXxüàÎèÑI£`â s€ºuûh8¬Þ¼y)""> £`¤â s€’€›‡o´À¾}ù„HÒìlì4(\k´ÐV( ]0ì=8üñ…9@ Ïù#34Z_õ‰f#Ü: 8í¬p?þÀ/BP ÍÓ"ÝmDµ^¬]±ÊÚÖ)×.Ÿ"¯|ijF ¾BiHWÃÛƒÃ_˜а@+yiZcØk¦±¤ŒŸ#kpœ‡—yò<2. «2u½;7/afG¾™Wùˆk|…®æžäAj«‚ÔN¤zR=H£ŒFÓü;,ñ…9@Äù\™.DNsDfZÕ» ØÖhqóòC@q´"’ìØÇÔHj«—z2°Þz†u”‰xíéÀ^£,ôÁ @‘ßH+”H-ñIJH”´Zˆñ ®:àÑÄã ‚ÄåZ¬á‚”Ø8 ñ…9@ Ûùü³m$5ˆHJ1˜ýxZ˜á]´N‘ÍybƈFNWRô }ä €Ô¦1UZƒ¶mA-‡‘Z;R½µ7Tñ…9@ôù€AkæCh€Š´j€¼ ÿ04žVÅÐjç’=…§v$~è•ê­½Áž‰.̈ ¥q÷ë4,ëR›d§]bÒ+ymy²Ka¬ „ˆØ!ØÆä#B® D.ôÉèÙp4ü¤ÕNá-3â s€qç¡õ%Ib3à‚$fúÍ\&“”vñ Í““nP+<óÀ˜–¢ þ‰ju~ÿúõû×Ïߟ?róòýüX KÑ­'JRQHRñ .):Œá™ñ&Ï¿ÄDÁP¯Bˆ/ÌhxÎà<´&A]d,E'ÉdRSÖ’M×êL½Ä˜FŒ²A²^ˆØ'ÆÒ)ŽOÉÉÑ_ÆsÔć÷¯UÕuΟ=jhl ä~{þ„áËg45˜[¨ˆXƒH°UAF«"=ˆà߇µÅCŒíD¶ÏˆD üê‡Á¸ñ…9@1^¹pB[ßüêÅ“@ލˆ0¥gNŸàååçáã–ýƒ¡²2 ²mÇÌÒ‘‹gxFåàÛ—OÀö)°lúóû—¼¢*7eõõË'ü×È@bk)9<6O 3û1¢/Ÿ>Ý¿{ËÃÛš×oÞÉ5v8p €Fï`–­€Qmų±Qx¸Á¾¼±Œ)5a`Mù‹²T=Z׎‚¡ˆ/Ìht>`´ž!)-{íòY I‰i§6µ´ ÕQ0´ñ…9@Î íj`4(0òÈ5°öž`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ‚¢ƒÜ…Þ¿¦Q0P€øÂ €FçFÁ¬nß¼2øÝ9ºpk  ¾0 Ñù€Q0$+m]ãAîN66Žáqnè(Š€øÂ €FçFÁЫäUÙØ†Àåõ†ÆÖ£ÕÀ(@|a@£ó£`è66vÖ¡V®Ž‚Äæ4:0 †hÀ>øÝ9ZŒ‚Äæ4:0 †àæáüuÀ·/ŸFcj  ¾0 Ñù€Q@C€õÚX*àŽ|s=®‹‹Ñn·‡+ê(8° ‚Q@@|a@£ó£€†^ÜÓâW´òOñ)ŽKïh0 † ¾0 Ñù€Q0(z hµ\ŠÂšƒÔv=\=„ï+ŒÖ £`hâ s€V —ïÈ\\l²«<"ëÑ1¢Q0´ñ…9@ÎŒ‚A¨;jDäx~£` -@|a@£ó£`X÷ˆGËñQ0"ñ…9@ÎŒ‚Q0 FÁ°ký]˜Ðè|À(Ö­¡ÑqüQ0"ñ…9@ÎŒ‚Ah±t´># _˜Ðè|À(€¼”u˜Èµ¡Èk7pÌý¢©!Fï(áLta@£ó£€N%>‘‚¥ÐŠr‚âÄoCD“­$FÁÐÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`pZÌ‚Q0Òñ…9@ÎŒ‚¡~ÿúõû×ÏÁïÈјˆ/Ìht>` %ðáýkUuóg[~׎^$9  _˜Ðè|À(­F+€Q0Üñ…9@ÎŒ‚!\ fGŽV£`ñ…9@ÎŒ‚¡Z Œ²£`àÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 ¨ E¹ ?¼=ì½0 Fñ…9@ÎŒjV·o^üîij hxaŒ’ s€Ô¬´u¹;ÙØ8píÞ^£€Ô €FçFÕ*yEU`ñ4ø]khlY†/Œ‚Q@Fa@£ó£€ŠíSv֡ЕÄsšÛ0ðÂ($æ4:0 ¨[°ý:`h{aŒ’ s€TÜ<|ƒ¿ýöåÓðöÂ($æ4:0B‘™©·µ@îy‡\øNŒ^øÅî¸d õ:xLqüFÑ$ qã<ÚmõÈ®¥¿ ±ƒàÑD0Êp) #Œ‚Áˆ/Ìht>`ФÎ@+ñWp..qúWX%§aˆ 0#k£åøHÄæ4:0 ðµ(!eDYÞ'ÀS†â¯È+”ÑL¦sÝ@|/g°y¹ ‡Ç#f—Y -ÞGk‘¡ˆ/Ìht>`àkïC¸h…Á>MË5ä—þcD¸ú:äÕô÷ÖÊ«f¼‚!ˆ/Ìht>` 10€…>—T”/@Šx´>ß(&Ù„è €FçF–¦âh ¡ªOÄë#_˜Ðè|À(`-8†YÄàŒâ s€£€0°S+ƒÑj`¤§O¢ s€øÀhQ2DëbªÑA¿a ˆ/Ìht>`D—ó„ä­D^,uQ .qzçÜÎÀåbô†j9~Ñâ:m -@|a@£ó#àÉÒX¥‰,0‹?dâw]¡US« (>¨¼€?ÖFfUAR\‚Áˆ/Ìht>`Œ‚‘Õù-ÖG ¾0 Ñù€Q0 FVÿotOÀHÄæ4:0 FÁˆ«FaØâ s€T¿ýúýëçàwäðöÂ($æ4:0 ¨>¼­ª®sþìQCcëÁïZ¬·0/Œ‚Q@Fa@£ó£`dUxJÏaà…Q0 H-Ìht>`P¿ÌŽÄ_z/Œ‚Q@Ra@£ó£€ÊÕÀP/¡†FÁ( ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0$€ è wá‡÷¯G£i  ¾0 Ñù€Q0$+€Û7¯ ~wŽ®/ˆ/Ìht>` É @[×x»“ct3×((@|a@£ó£`èUòŠªÀvð»ÖÐØz´ˆ/Ìht>` =ÀÆÆÎ:Òêèán£` ñ…9@ÎŒ‚!Z°Ö£`àÄæ4:0 †àæáüuÀ·/ŸFcj  ¾0 Ñù€Q@`½}ž ¸ÚÝ_HÌííh7¿Ã•aÕ ¿2~Œ‚! ˆ/Ìht>`Ð ñÁp--Zy§øÆÇ¥w´Ã_˜Ðè|À( f/R1@DÅ!ldY´ªR©À•ÁÕPXÓÚ®‡«‡0à}…Ѻa -@|a@£ó£€Ò ¹˜†p!…8Ö± ¬êÑØhåÕž‘õÇèÑ(Z€øÂ €FçFÉ}ÚÜKŽl&Í'r¼¿ÆQ0 † ¾0 Ñù€Q@rÍ08æFËñQ0 pöb‰.Ìht>`Œ‚Q0 † ¾0 Ñù€Q0¬[C£ãø£`Dâ s€£õÁ(à _˜Ðè|À( àšF^ÇÉ€:m€¹¾d«z’{»Hk7pÌý¢©!Fï(áÅCta@£ó£€0À_Rc•ųȇ$õø­&fSñÇÑdG+‰Q0´ñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`èß¿~ýþõsð;r4¦FÁ@â s€C |xÿZU]çüÙ£†ÆÖƒßµ£IނĿ4:0 F«Ñ ` 7@|a@£ó£`WƒÙ‘£À(@@|a@£ó£`¨V£…ì(¸ñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@Î IðúÕËÑ@ à™L ØÑ€Z‹ _˜Ðè|À¬TÕuFÃlpöÔeUõÑ€ Ø¡°øJv¢ s€bàÓ‡’Òrb2£AA6ðô‹Ø¾iZ¦ ØÑ€Z‹_˜Ðè|ÀвOÝ ‡Ñ€ ØQ€ _˜Ðè|ÀÐÞùõkôJ“Ñ€ ØQ€_˜Ðè|ÀÐoß¼Ý"‹˜X8œ9q`4`GvØ,¾’è €Fç†`gã`cg ¬@ÏÐ’©.?>°£;¼o˜[˜Ðè|™9 ]]‹)B-“)lÀøEä( m#47®žƒKÁÙ$²5,@ `Ö"Õ ¶ððA¨!hƒ!`GS,y‹_˜Ðè|ÀÐ<¼üÈ9 îݾŠÌURÕ†‹ ©$!ß² ±†Ðט -d àË—OÄ,\/rxb8²–!h°£)–Z‹_˜Ðè|±my8¹QOP³o©ÒQ€HAÔí7`&8´Ò .…5ýa-v¢©Ë‘à Bbj¸Ê»¡^NÑ-IŒ¦XJñ…9@Î<˜ç#Ž\èãRƦQ€œ°¹¸ØÃ ;ÑÚýˆ`ˆ þl;šb)w?ñ…9@Î`o¤ˆ)¬á |Ê">Ia& µ:×Äd-øÀëhUáñÑ€¸xtM6`GS,%€øÂ €˜9 \¸ÑhM€§üíRD=þÄ:ø;×£ÃDC4`GS,…€øÂ €Pꀟ¿~áA£ùO{W'€ZƒH£ÃddªAR õð€M±dâ s€ Ðæu‘ð ¯%‰Í@Üøy™kÚB^NGR¦*ýkLoÒ³„B¶-„‡A_„ê;šbib‰/̈ñÊ…ÚúæW/žrøøxñ(½|ñ//?ßh­0€àÓ‡Ò²<<£±€ÈÈ«]¾póˆãÑ€ Ø!°8útÿî-GWO|ÅȧÏ@r͆ ÑýC€ô8FÃxõü ¡ü9°£;  ¾0 ÑýC²`­­) ÀÑ€ Øa°xñ…9@Î ÅÁÁÊ6z #E8°£;  ¾0 ÑýC›T£9вü9°£; _ÉNta@£óCüþõë÷¯Ÿ£á@IŽìhÀƒ€Åˆ/Ìht>`ˆ>þk—ÏJHËŽÙà̉ÃZºú£;°C:`ñâ s€’ÕÀ‹§Ÿ<~0ä\Ùi4`Gvh,@|a@£óCµÐÐ ‡Ñ€ ØQ€½d'º0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€! ^¿z9dQ1ñÑ€ Øá°¸ñ…9@Î É @U]g4ÈgOÁzãhÀŽìÐ X<€øÂ €Fç†øôᣤ´œ˜„ÌhP <ý"¶oZyÄñhÀŽì Xü€øÂ €Fç†}òèîh8ŒìhÀŽœ%;Ñ…9@Î =ðèá_¿~Œ†ÃhÀŽì(Àˆ/Ìht>`è·o^ ‹ˆ†.`bápæÄÑ€ Øa°xñ…9@Î Åžƒ}ô$^ì@ÏÐ’©.?>°£;¼ ¾0 Ñù,ùæw8 õžw¸QäiÄØ8Ø‘ïÒÐ6ºqõ²LòÜjHkt'rÖ"Õ͘‹¦n Ù2TB’¦Kdh [ŠK1j†qÀâ+Ù‰.Ìht>; zÁMEÀÃË–£03•®ì€˜sïöÕÁeJªÚ˜ «Ë¿|ùDdÀ¢iZ!;„Ù†Úm*´X¸±¸B9¨1¹Ä«Þ‹·ïEla@£óõ« Lqˆ„DAÓ é+À•Q·ë€œÎÐ2 ~q¬¹ ÂÀ¥.Hÿ܈™èV.` I<Egç ΀E Ÿhb‰/Ìht>€¢±8«8ZŽK/›ºž¢¿81i”$ôÏNt(gñ4Eq±‡A@¹û j$Æä¡Õê§sŠ%¾0 ÑùÂ}: Qh>©Å.‘ «±Ää^:W4-âñ[„Çjü®Ck pU tp*ñ…9@ÎФP&²j¡Q’B.¹ðÇæ'NÐ#Ôj®â*¸I É¡2rM»€¥bpáïlØ€%¾0 Ñù€áPµ‘˜vô†ê~Äã:Ì’ð¡ð!ÑÀ€r%û  Xâ s€bBæüùó-Á‡ ~ù —wèYäÔ¡2#:PKLðé¶ ­–øÂ €Pêf`HV/ž>~òøÁhPpe§Ñ€ Ø¡°xñ…9@Î Õj@K@4Fv4`GV@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£óC¼~õr¸DTL|4:FÁ(l€øÂ €Fç†d ª®3HsöÔ"3£`Ð _˜Ðè|ÀŸ>|””–“$îñô‹Ø¾iÅh50 FÁ Äæ4:0ô€„„ì“GwGÃaŒ‚Q€ _˜Ðè|ÀÐÞùõëÇh8Œ‚Q0 pâ s€zàí›—Â"tš‰5±p8sâÀh˜‚Q0´ñ…9@Î =ÀÎÆÁÆN“xõ -!ÕÀ¥óÇGƒ}Œ‚!UJ[˜ПÀ¼ò;Ù©x«;-œÇÆÁŽõ^! m£WÏQ+`¦!WT4yŒ‚Q@k@|a@Ãa>€ŠEö<¼ü˜u€’ª6YwÎaÓЪ„{·¯bªüòåÓh~£`°â s€bB©X˜ñ Aë[`¬°Ö X¹Df`š€U.ˆ,Žf ñUV[H2^dc- ©Uà£` 6@|a@#t>Þu€¸p6¼?•ÖáÀ¥ž¼ œM†9t¨hQÙŒ‚Q0 hˆ/Ìh˜ì€tˆ/=‘UbÕEjALÞ`Ô Â-âGÁ(€øÂ €F÷ÜrÞ$8à3ZIŒ‚Q0øñ…9@ Ÿý¤vȶex'`§­FÁ(€øÂ €F÷Œb«Ñ `Œ‚¡ˆ/Ìe]ÐÏ_¿ð ¡ÒÀ*Eê1ê‰Qƒæ$ÌYåA[ ŒV£` ]@|a@Ãm>¹ÌÅÅ&ì†9.„Õ(>^|”–åá¡S,ÈÈ«]¾pzôìèQ0  øòéÓý»·]=ñ#Ÿ>É5v8p €Fç†`cF}ìzõü !Çü‘Q0  ¾0 Ñû†dÀ:hjkjN1 FÁ( " ¾0 ÑýÈôvXMÉK·É(£€x@|a@£÷ =ì ž:€ut,hŒ‚Áˆ/Ìht>`èß¿~ýþõsð8f4FFÁ(l€øÂ €Fç†àà¿vù¬„´ì qÏ™‡µtõGãeŒ‚Aˆ/Ìht>`HV/ž>~òøÁ`pÌh0 FÁ Äæ4:0T«-ÑÂwŒ‚Q€£d'º0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Òæ$¤d¸xøGÃwŒ‚Q0 'àáùxÿî-â爴ù`ÀÍÍ;Ê£`Œ‚Q0˜ñóDÂ|€¦¶þųÇ$¥eGÃwŒ‚Q0 '8}ü°«§?ñóDÚ|€®¾Ñå‹çž`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €Hž¸pîäàô‰‘ùàwópä°÷Ñð‹…ÑÐ b¼€iógNSÓМ>?¼—£«ç wópä°÷Ñð‹…ÑÐ ‚^ÀˆñÊ…ÚúæW/‚ª8Qa|ÀéÂ"bŠªZƒÖó;6®ôðöänŽö>~±0£¡Ç hàõ›·@r͆ ÒæÄ%eŸ>º;˜=é…Aèæ!áÈaï£á £¡1Äæp@¤Í<~pçׯƒÙç˜^„nŽö>~±0£¡A|aDÚ|À›7/EDijÏ1½0Ý<$9ì}4üba44FCƒøÂˆ´ýììlììƒÙç˜^„nŽö>~±0£¡A|aDÚ|;;;1adæpîÔü"µ0½@Œ›Ép0 t2—vn£s° §†D,Ð4Rƒƒ-ql1‚ÈŽ¡[TY˜Ã@‘6ÀÃËÏÆÆAŒ¹˜Êj$Òd\àËçX½@¤›1tå *º‡ŠŽÔ1°@s¦È@²ƒ}=5Tbb>­m¡0ã ¶Ä9°ÅšßѸ´(Rˆ÷.@p^0\àlÌ´O÷¸ð¹^À“Ù0Œ¬›ZŽÄj&²kñ„Ö ¦0„©ìÄ'/=Iv©J;/ã`Ú Õ‘áH´º`¨ár~’A”»™Î¦QÜÑ"M2TL´.fÝCv8S14ð—o¸üNL€PË D«ó‚ë.ÊC£`$up©Ä$iíHª„Õ»êdøO_«óðçp:¸™Î†«Ç“´¨ô?+Œ’DK뱦?9rÕý˜½`ªT-®@ ºƒévOMƒšraàêÓ›d¸y`L°*ð4‰k‡F‰– J²Ãy@nR!fpŒ^ ˜ iN¡°¶¹¨î`ºÝÓ@·©9ʃ³¡€µÀÅÚå"Ï›”¸™ÖFÚÆ4ŸcATI“øç¨›hqM9P%ýÔM*Xc–ÖÉ €†ÛýC Ãïž2|„§ü¢ÏÂRÝLgãéI¦IZ§*†Æ@­’"Þ Ä„ÌùùëD·Á J’;ånFî‘áqrãŽÔ|$9«{0gŠv\ˆvIÍÙƒšxoÒÈÍ”;ÏbÚÅ#y¡ALâ¤$R1a“d5µBƒ¤bº¹˜øÂ €è}Ÿ0Z0á™L#¯D/ 9€Â•|”;3ma]‚†&E†ËÉ^;DÞØ:.Oá òR­c>ÆŸ;(\÷EvÆÁŸ8Iõ,‘êñ8|m(%áL­Ð X¾áIEtKÞ„rv4/¥—/ž“”–åáá£i%¡¦etëÚ924~ùòéòù3hgÓÇÍëH²ClÐúhÔÍ£¡1Ôõøôé3ììh€"m>€ƒ•ö[Ýȳ‚íV/ÐÇÍëÈôàöaàæÑÐ ½€ iûØØØXÙh~pyV°ýŒéú¸y`9€Á> Ü<£¡A¡p€"m>€TÒvýÀË)i cznXG’bƒÖG£n ÑРºp€"m°&dc¤•áopÓ ƒÊÍC‘ÃÞGÃ/FCc44z Òæ~ÿúùk°V†@·aõ rópä°÷Ñð‹…ÑÐ ‚^Àˆ„uA °ùñÁéóÓÇ{ú r7 G{ ¿X ÑÐ èd€¼. €Pê...‚\¿zñÉ£ƒÐ箞þƒßÍC‘ÃÞGÃ/FCc44ˆñ|ûö ^iý€Q0 FÁ(C ÷h¸4 FÁ(£€x@´º?`Œ‚Q0 FÁàDïó‚FÁ(£` @pÀ(£`Œ‚Aht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. ’ç®_»2j£`Œ‚Q08¦–Iꈴù€Û·®«ªëŒ†ò(£` NpòøcSKâÕ ó÷îÜ‘”–“ åQ0 FÁ(œÀÓ/bû¦æ–6Dª Òæ$$dŸ<º;Ê£`Œ‚Q0˜ñ“»DÚ|À£‡w~ýú1¾£`Œ‚Q0˜ñ›½ˆ´ù€·o^ ‹ˆ†/Ý€‰…Ù°Š˜êáRhº0õâR€Õ@€mtN˜Þ€¼ù´zÌñzºÍÈÈ«X°ŽŽÑ`8©"XÙÜ‹ Þ¿}…)Dæ ‹¯M–µCtá1 ®¢ÙÍXmÄ•hñXGŠ`ØâW@¤ÉÈÊ0Õ ÉÙXmÇ-øÃ—x¬F63²F=ûÄωûØ8XG{yt_>¤P+S ~q’ÔcŽÇª†rã‘Å*ERØæC̒䒬ê­ˆ )=Œj?@¤Í+üÑ:`Œ‚Q€·”-"6ü22@¤Íüþõë÷¯Ÿ£¡< FÁ(@<¼üVÿh1°à7¸ô'~> €H˜PRQ¹vù¬„´ìh(‚Q0 ÐädˆÑ³åœ9qØÎÑ…xõDÚ|€¦–Öõkמ<~0У`Œ‚Q0«»Iêˆäû„½  èQ0 FÁ(„€ø™ Ñó‚FÁ(£`ä€=/hŒ‚Q0 F. Ñó‚FÁ(£`ä€"y>`Œ‚Q0 FÁ°4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#JðíÛ·Ñ£`Œ‚‘ˆi4FÁ(£`Ä€õGbŒ‚Q0 F  F‡ÑP£`Œ‚‘  :èk0zK,êIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig56.png0100664000212600000240000002330010322727434015547 0ustar mikeuser‰PNG  IHDRâv=| ¡ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF&6IDATxÚb¼ráÃ(£`Œ‚A r *ˆHi뛆Å(£` 6ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ Äg™…,‚0AD12 1ÀÎ`DÃ0 C?#š\Võëœf¡Ûˆ©…7`1—P´ælÞ&à¬…ß X ¿ÐM¡[‚³FÓêhZäi‘dIzl7 €b­©FÁ(£`0€b ‚Q0 FÁ( )ˆ4å'^±££cZ×d€-¦GÁ(£€æ€Èù¿5v` ÐÀ z¼<× D£17DÁ¶ñ@4£`Ðzkúëí©@’G-H~¾9Hòªç~º1ÈàÓÌCSüáêD )¨]@¹;žŸéDæJ›U@ON¶Ió*òŒ½{´œEÙ¾ŠAve{2WÏ«“l£N¯+’fA Ü“kA!i2‘ £/Í’vÑÓäÁ%™@Ò!v<°(ÔŠ›¹aá?k4Ñ‚Q0€@ÇÀTŒ mXÁADÔ ŸF.ˆ¢`Ê’H eZ´æÙ鎧§:¤Í*Át%X†qñ• ÷èzv@ÅHU‡™O ] ;ÆÏbÍ"£` xrá°\"H¹L°Œ€"ª˜†·¦?^Ÿdðkå¸6Q@+"ûþ*¨1(¤Søîr?!¬[$ß^ê’"úÅ@òõÅ^¸Qb†%DÖà’ºXRÃ[ÓO´²–ÕŽ·ÊYVÙµÀµ(X×B÷7Á•ìê¡mꃠִЍe}{=\šHñͽ ½ÎÍ7öÔh¸´\ß]äjº¶Ék»@­xm÷6ü¾´X»0è{w]ÜRfà̹°¹.kä×aœÝX 4 샳O­5¢Í‚' ·¦O¬Fô],Ã@ále.²¥6‘SIJðÖô¾iÈâ.Is€äîy)p·”y@rçì$ éž:ǬD´ù@öö™ £ylŒ*–Ôp.~õ„>6Í­š $¿ÜšDL=¯¡ôʵ uð{ˆê‹”ýê|%Þ{|¼Âx.£å­jä­A¥êƒ£Í 2ú¨ØU´­S";Dq¬lß ÷¸s$¨êبæRyk_\ͽµýÅ­e¤Œ6ôí6Ðç6Ak&cÿ^ã€^“P}f}\£YÐ`lÔ‰Õ *Ð"t’e¨^<¾  ÖS€È8²<Y‹mô4 yhi&²àÅdA§„YÎ ³g# º&ÍqMž D@ö®9Ipñ³!Œ³@e´gúÏô…£ÙlŒÊKj"Ëh  rVz[Ó$uŸ‘[Ó`kÙjä5…Øš† 8hº‚Ô×wWCĵÜÚˆ‡¶¦‘‡AÎ#5¨1[Ó´‡–d"—ѸÀÞù© ¦tâˆ{‘[ÓÈØšf+£€ÚÞ”†~àDóyoÀe4¤)ýúBu ¶¦Q7 "lM#ïS‚”ÑÀÖ4еg6ÑÔjû˜é@â.¦÷.•ÑÀ5$èö€ËhHSz÷ÜäÑ,4 FÊhøØ4Á’ €°,ÈãQƒö¦yÕsÄÏNƒ&è Sˆ Ó¦ôŠ{È24à€:â±i´AQ0 FýËh䀢¨5- ÿáêDø¢.hñíå>d5"úÅÀ5‘íèg§¡‹ÛÀ òð5å¬jkA™E´©U´©»¤ >‹¨dW¯lW÷P#| ˆî¨‡Ï"ª95‘ºTCÇ£ýÊŽÊËHkò0äøv_Ø\Š<èaäßkìß lPŸÝ€2îaÔz]!| .n:ñÄê|ø,¢eØdª<@=ÀSˆ@lPãoG{¤-Ø1+atqŒ fÙà @1Uhë›_½xrôè%¸Èb-·ÖÑãlF^=zi4­R|ôR¤)?ñ»8Ù,®Çv ÑÍâ£`Œ‚Q@s€u8‘ €F‹i,26=ºÂaŒ‚Q@àèèH‰v€-¦GÁ(£€¶íÄ;R@ž7= FÁ(ƒ¢5}jMÜhpŒ‚Q0,À Æ( €Åôèŵ£`Œ‚Q0x|q@zŒ‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 F.àVÍfdd<$VGh;ùÿÿÿ!ä(£`Œ(,¹T²‰ì6`±ÜÐÐààà@£Åô(£`ä‚AUFI¬Å4@!Ž^]7 FÁ(i€‘‘X>~»3m08èÈ¥á,–!G/ÐèØô(£`äH=HZÓ¸j €"¡5 Þ†ŒæPWY ÀU£‘ iä™@Ý—cÈöà(£``[Ó õõõÀÂÿ¡þ”·¦ˆiðl\¹\Ca$úÌ:dÓÐ $ÞFÒÈï «cà‚d‡ãèQ~£`н5 /£ \È82íZÓDÚØ4rÓ›¼Ö4å ÈVLEpéB§b z´1> FÁ€´¦‘/Ç‚Ùö/%-k\­i€b¢‘Ïá«8Ù­Eä«È0 «FFT€u°‚<]$yùÄ,AwbÚ5šEGÁ( µ5 éþËed€\nÕìÆÆF [Ö¸j €"mAf?H6.˜†£É4«iø­Àj2š-Dú.<î!)ˆð+ \×(£ë¦‰,Óáëäà ¬Öxd ÖXäi­iÌab8­œ%£½FêP2u›„Ç °ZGÓÑ<¤pD{Œ‚Q@^kØjÖ1°’ðQiHËyÌ­e ·†ÉkMÉÛ[ˆ)dñ7o 6åÈnSÒš&Õ:’Z©”´¦É ØÑÖô(TiMCÊÆ0À,á%'ò0fË¢Jü­i€"g"þ…Š¥µ=È(‘©[üáq0==ÐÆjFÁ(øÛΘÅ#V•h…5æšd6ò‘»ˆúÅ4ÖQf\MoâǦ±²‰4 k9EÆ ;©º:†˜ò”HAbÜ9ÚŽ£€¤Ö4rã—`s¹°†(†”³xZÙh²¸ZÓ4z¦ÇˆK”£Åô(¸Zǹm‹ÜF+‹ñ·¬ x銫•ýãì'¬Å4@Ó#«€-£GÁ(ÀÓšF.ÑZÓÄ4‡‘`Îÿa*þ±¶k1 @£Åô(£`´5ÒF. Ž\Ã[ÖðÉFL•È‹=0M Øš ÑbzŒ‚Q0ÚšFi&£¬xÖf -ç fá²Úê\­i€=!oŒ‚Q0ºn: ­¼îZòJÇÀ¢±±È®¯¯Ç5¾ QÉÈÈT $ÍBÉ«Oµ`¶¬*Ê ÛÊ‘í"¸n €F[Ó£`Œ‚ÑÖ4Îñb’ZÖÄ,©þºzy³"®Ö4@¶¦GÁ(£­é,\-\’ZÖÈ$rË—ù!Ä´¦ˆ~Å4þÝð#è`©ÊFM“ž¨§z‘z.©²Ô2®fô,ZH )!$°`–žÈ"X4£Öe1bhj0É5vId•p{ÑØðÚÐðlMÿ'úþ­œmµ«0¨(£g,Ð3‰âqP Þù-©éÜšÖÖ7ÇÕF&µe TiPcmM-–ã[ÓD×±iÔíp˜lº¬ê¥§u$YÁ0h53`ÛHI“©n)ÙÑ‹M¡ƒ‰TÏ0ºÚŽcÓXÏîÀ ˆ³†ìsÁÚ"ùOܺi€Œ­i\‡,cÊâêbUŒ«y…ß:üPL·1qF61Š1õâ1„x½d»vÌÐÀï.¡$ˆ°Š` .L‡á·‹Ö1N0(ˆRó( [kš÷æCòZÖÈ­i´¦:‘­i€¢kk>ÊwCfã£$©y‹ÕºÿxÏ_%cÞ†$ñ˜üŸögF#õÀº„¤òÛ Tà&>ƉI®Ä7 ¦F\Œÿ£‹Ó·5 $!³ˆ ¤Ü½‚Ö²F^1 €ÆÕšFV‰«5 @ô^7§E°yBü8#þ‘D"[C$ ª’Ôö'Û³d4߈ p²ƒê­iêÚEaŒ“”\‰Â&¦³5Ú”ðÖ4ñÃÓDF£³‡«Ñ€«5 @LÒ\‚§?’ ø§Åq ’=QNªu´Xxq<1¡„«1H^PÔZ £ŒêŽ$> :˜x¯ Â^ÎHkMcŽ“DbêÅ: /» ¶¦hv!’:ˆœd1Õ Ká‹Ä3xÇ:4]hRøÝF’Gˆ\Ë $5î0Hr ž`'èC\ä×ÛSmaLàöBla b"@Óƒàiâ ZÆÚ(­i³EÈݑڦ†”¿õ`€,޼겘„˜Ö4@Ó£`Œ‚ÑÖ4–±Žò©¤$µ¬!e1ZÛ™ì3=h´˜£`Œ¶¦q¶‹…5·j6-k4[(› Ñó¦GÁ(£+=ˆø/gÁ:h )]Ñq]´ˆk¥@¶¦GÁ(£­i¢FœIjYãjMõßš ÑÖô(£`´5M2 ز†+Àz<潈xZÓ4Úš£`Œ¶¦I^M°e ÚúæÈj 7(¢­°ÆÕš ÑÖô(£`´5MÀÚ²†ß8ÙyˆþÖ4@¶¦GÁ(£­irvâoYCZÊ à{¶ÌBAϪÁc®Ö4@¶¦GÁ(£­iªä–5ñËBð·¦h´5= FÁ(mMSÔšÆÕ²†~©Wk €¶¶¾9ÐP 9g£`Œ‚ñ6Pܲ–«ÄŸÊ tÉ×ÛSá\`±¼fÃŽÐhkzŒ‚Q0Úš¦Zk³eM¼z\µ@¶¦GÁ(£­éiƒÁ1¸ZÓ4Úš£`Œ¶¦iÒš&•ÄU[ÐèJQ0 FÁèJÁBb]é@£ƒ£`Œ‚Q0|Ð €F=FÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€b³ 'ƒŒ‚Q0 FÁ(pßkÄ‚UtŒ‚Q0 FÁ „(¦!7–‚Q0 FÁ(T €FǦGÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€¢k1­c`Œ¨n8íœ=°æ@4Ò΃°ô ½Q0 †. z·¦¯\8GTÉW[:SK ‘AGÏj@b9¤zŸž¥ó I±£`¸€ô£`Œ‚A hà‹ix¹•g£`-AÓˆÉŪS «.“ :•Bbõ;šv’¼€+$ÑÌ'ÛÙx™xáw0-´ vj9X‚Q€Ë€Êh}X  „ g q1¥°v‡ÑÌÁª.bDp™Cª]]ˆ&EŒx‚‹È$2`ñ‡V÷ãr“ † š±´vRMªGÁ( ½‹i¬ ”ZãÔ˜æPkÐZùŠBÒßÁTq6Çõ˜e1¤ø#ÉbÜO-gÊ£€B@,ƒÜ}&qâµãi½ZTþ§CX‘dZ›w`ƒn´PT4d¦),ÿh u›ÕÄ›)ãH-æOàC ‡ø‚ºnöIn @66§ÝÜÅ:–MdK ¿v4)Ì|NL§’çB‚å¦^\"Ä„$ÖbœK11Î#2<‰©fhì:› bšV£`8€b&m}ó«OŽ(oæÑУ`ðƒ5v8p €XFb„Ð £Ã©£` n@#´˜-˜FÃaŒ‚¡htâ(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@t=z ×aÓ£iŽ‚Q0 F.@ônMCŽNG;ôŒ2zôjŒQ0 FÁ4`ƒdߊ4 FÁ(# Р›†”×ùà"È\\"X¥àld‘Ñø(£`ˆ€\×@F?Ðn•F»5ÎÆ¥˜èëþFÁ(£`ð€¤··àiùŽ–¶£`Œ‚hÓ£eñ(£`@@ ØØ4‘‹ð0›ÕÄ1CFKFWû‚Q0 †4 z·¦á…,ž¢y|¬«ÚÚ>üCÒ£åõ(£`(€b–\ÚúæW/ž–Þ-šGÁ(C¬Ù°ãÀD¿Ö4®Á £ëFËèQ0 FÁPD¿bšÎ%æh= FÁ( €F^£`Œ‚A h´˜£`Œ‚A ˆ~ƒk6ì îQ0 †+¨¯¯G[‰ ­o>Œýëèè8eB}ì º.È;pàÀhj£`ø\Öp]BFçF'@Ñ{ÝôþýûGÓô(à ×âx€›£`Œ‚A h´˜£`Œ‚A hÀŽ^bdd„³ÿÿÿ&…,‚¬S1=Ý ±â<4GâÑŽæ¬\¬~Ä´Y=¦žðÄ*…GË(£`ð€˜bá… HRLu€f-lÇUø’çNdsðT ª£`  /ÞÆ €ÅA¦£1õZ‹x’ZìŽFÁ( `ô 4¬ €ÑyÓð’…˜RRf¡`-Ñ ¦áRŒÌEVFRW«íÄûeŒ‚Q0 ð€DSˆxÊ2F$W†Üy‡Hùˆ,‚i8šb¸\f£n5®"«í¸¿È~!²]<:(1 FòHž[Oñ0ðߤ:´@ ÒÛ[СT,¡ˆ: r@×#²ãqù… ÇŒ‚Q0¼ e´Ñ¼·žâ2Y ñ- –•Èê%µ§î@Çè°É(9€Œò³,F¾3­ô¢ €E1µrÅòB=Ì4=ýB†]£5Á(fÅ=ZÁ=¤½@36 )¶Ð†›ÉkÞ"…z'À(Š`'Ý5vƒÿÿÿCü,ãðO¸ •šè ¸ïN!ïø%8…Q@£­éQ0 °—&pDFƒ—€ì2ÍIÛ¤¥MCvT`\£€-¦GÁ(ÀY @Ð éªSâ òôÒÂãtLHã}°E%© €F‹éQ0 †Æ˜é`ñ < ÖCtÔ €F‹éQ0ZF“0æ‹Ù}ÆÕ¡T]l\ I4Çãaà7gÈÕˆX=N0fi4xBÐèºéQ0ZFŸÀ_  +€³!‘µãbÚ– 1ÆDóõmÏbz8´Ž_< €F‹éQ0ZF›“ñ7i‡)4kñŠ«±Œß"JJêA²^3‰L âZ€-¦GÁȤ7ė׃³59dAÿ¢v”Ñ䕼åx€›£%µµ2?-ŒÅÓ¤ºáðux좰رij­x¡³/h´5= FKjì_̱i¬­Q¬CØ´hSSÅ(4ãr<./Pî#:7HÑ¢ b;1•(fà .Ú€-¦GÁ(À>QFžJ¬óTïªSâ;<.D®ꥳ/¨[1&$Å5M@Ó£`Õ5ðAU²Ç‘C«vðãP4ZL‚Q04ŠòÚ¡ƒÍ/Ããd:€B£`ÈTÃà„¼Ñ2š @£'ä‚! FÔ yÃÒw£'ä£ €F=FÁ(Yz4F2 ÑbzŒaƒ8::ŽÆï4ZL‚Ñ"lPƒa¹øhEÐh1= †0 8´7 Fãw€]é1 FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒh³xccãh@Œ‚Q0 FÁàÄèàà0 £`Œ‚Q0h@€b¼kÜ|vy¦IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig74.png0100664000212600000240000003626210322727434015562 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF<(IDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀr$¦3.^8K7Ûõ ŒsL ¶„D;÷ ”O‡DVfŽÇt6I €È™8z䀚†.==¹÷voÿtÀr$š3N:®¦®C7ÛÜëìê9hcj°%$Ú¹g |:$²ê0s<š³I„r1ç]¾xNXDŒÎþ¼|þŒ#¸p( !GÂqãÚUaQ1cs‡ËçëZÒÙ~á´½ó ©Á–hçžòéȪÃÌñpg çAî ræ~ýü Dô÷'Üyå€!äHdg?´óËçOô!‡DL 6çÑÎ=åÓ!‘U‡™ãÉžÍ 2çxøøèé½/Ÿ>¡9ÎBŽÄt†¥;¤…NSé@ªASƒ-!ÑÎ=åÓ!‘U‡™ã1M ¡´?`Hl_$ŽDv*4[FÒ qÏ@ùtHï4¢Ž'ÛÙ4”ö ‰í ƒÄ‘È΀ÔÓ¡0š•{ʧCz§Ñu<ÙΠ¡´?`Hl_$ŽDvýû£ i¸g |:¤w QÇ“íl€Jç ‰ãŒ‰#‘Aÿ~ÀhB$î(Ÿé“dž¨ãÉv6@Qa>ÀÈÌáÜ©Tô .ñ;¨ ™KŒ“(q9©ŽDs‘.$àš–Ôø›ðh 0+dȲÄÏ ­£‰`àà#²£‰$7“—fˆIð¸L>pð(šˆƒ½5A)¬²h &40õR킘gPT)g¨ž˜),½ €†É|fÈÒ.¬Év$=]ˆk>ÎÀÚ9ÀDÁÃ%r>Í×MÄÇÑ M3D&x<&£•‰È¥$)"Km\öb–Å$•ΤòL¦i9CŸ,O@»µ¥ ƒ°ûßz…€d[ûpƒ g­É| }9€;,OºÔ—½—Ÿãîü•™'a€*ùÃÈ…º\ºn^ëñv*¥ôÁ<@f>ü~Gà ó€ˆÔƒbˆs‰‘¤M¤G‡=•ë‰æIw#õÙºÜ"Èæƒ›'Àõ>äÍl}ˆÊó¸z=Ä÷†Ð‚‰vãt˜ ”#q9Wr!¦)M·ù¬ý’uKd‚¤ÄFÅ8ÂÊÆÌêTw‘ ÌÁ?@d±N|§S r†u,‹ŠF01˜i—ŠˆÊûp•›TéÑzÝî@9’{‘›¤:c$ì )ááq£½”—fð· iÄ èã²Þ*'o †-øÕ õi°V*”UÊ‚†P+A@î Ÿ#ñ—/$ñäýËG:ÏPâÅeï iéƒr—³‰DÈ¥`gc#ˆÈsÁ$KLšÆå¬cå¸ V<ÑÔ‘©ÎFv‘ýÈ"<#<˜ °®:%)¦hQÿŒ& ãh¹‡*&“±|“r{±ÖÄ Ò"Ј)gh× !2‰5àÝZVA˜ÿÿÕÝ$|ÎjÝB!-Ìh[Ÿø€Ì2F#}ñáÆ­‘S$;IpsFcÀAœð]>ƒ†^(’o×…,\8È)ÚZU†Pó‘§ñý7®,îÎ ›É+´gFäPÁ¨tj×ã>SÔžïÓŠâñK¡Ü!ÃÅÅEPÃõ«yyùI:R•ò¶Þ—OŸîß½eëèFž†‡#‰t!²3îܺÁËÇÏÃK¿óo¿|Ú~ÓÂÚv15ÈÒ qÏ@ùt°…0I ?PûR‘M$øöíì€¼Ž¤¤_I·ùä~ÀP‰©a00È}:D‡Ô‡´ãÉž Ñû¯#ÉÀêŒÑûyB½?€Î=¼\#íþ€¢Ç|µúG4]·;8I¶«F宅4¨Ü3z& 8½A¶ãd ˆrgÐèþ€áéÈÑû†PB½?`4y  ³hôþ€áéÈÑû†PB½?`4y  ³e]¨ˆ0A G`Cððð«ªksñð‰Kʾ|þ˜Ö$ÐÆo_>?²—ƒ“s4ðGÁ(`mã@PÍë7o`낈´ù€3§Ž©i莆òPÏž<VÜ<|_>d-ܤ- £‰dŒ‚;¶nttõ$^=@‘0pýêE)i¹_¿~Œ†òP"bbOߥ³¥Úz£‰dŒ‚º†&ûwo'~»@‘6ðëçO  åQ0 FÁ(Ì€øé€"yÀàÜõ7 FÁ(£€¼m˜”í4”î£`Œ‚Q@ ¾0 ¡´?`Œ‚Q0 F1€øÂ €†Òþ€Q0 FÁ(D•ìDæ4”Î £`Œ‚Q@ ¾0 Ñù€Q0 FÁ(n€øÂ €Fç†$xýêåh à¢bâ£0 F2 ¾0 Ñù€!Y¨ªëŒ†pöÔeUõÑp#_˜Ðè|ÀŸ>|””–“ <ÀÓ/bû¦£ÕÀ(±€øÂ €Fç†}òèîh8Œ‚Q0 pâ s€zàÑÃ;£òŒ‚Q0 ðâ s€zàí›—Â"#zÎÓÄÂá̉" (ŠUüÃû×£il u@|a@£óC°³q°±³Xïë/¯V—(¸Xܾy—ìè²¢Q0ôK b s€¢t>ùÒs8À¯&P V¸ÄÉs.+ˆt$A+ÈÖN¹7Ù8€ñ‹RhhÁÙ7®žÃÔT€Uœ<@]ÓHµ¹2 Ï @[×{ð²qœ?{¹ÀŒ2Ê#‘Z© [há4sèã»Q€_˜¥óð˜$±ŽÇhRC7™òðò#×JªÚ÷n_ÅÅE*Ú¨Ùu ®iD ×0«¬žýòåþ @^QXÖãRchlM°Ä £` ñ…9@Ñv>O».EvƒS Dk?3¹È‚Xm„(@s*¦-TÑK·Ú¹$… ˜Õ\S1.Ó°ÊÒ´À_ç¬ÃXqw–c´¡ÐR Á†rìc&ü¹€`r“êæ,²ó,IÖa <±æÄÑŠ„@|a@4œÀÓîÆÅ&¾ÁŽU ®ŒJj'¿S1“,UôÂÙ¤&}’J@"; D*F!¯,¦° ÛjpÀN|@áÀrÁ?öÉË5Xµc§%/ÏRbAo"kÄ_2Œâñ…9@ÑpžøBQK‰SIÒKa˜PÒj¡¼4§i?€ê†sóð᪾áG"»…+rIq2Ôã)—©n5.ëê%[ã(Àˆ/̈æûÈhŒ­k Ù®Å3J@v)I°Çߦ&I1¤ò C@ÐÍ´‰„ɉ’<‚kH ¿±tÈ•TÌ#_˜ÍçÈë™­è§J_n=_¬Å%¼+€V…,[é3„\Ù `@jW€¦É‰FÎ fIM+ƒÑ± ªâ s€bB怖âF”Tìý>¨Iíú¡ pôé0˜sÊhq<´ñ…9@¡Ô?ýƒ¨XÚ’TøR¥¤Æs¤Q²¦¿×¨U`vV6t®~0ÝFvðûׯ߿~â@¿HJHdÇ&1ê)¢øƒh450´Äæ4zÀÐÀNÀh@(ˆ~ŽÂ(É€øÂ €F熀¬k üA4£`$â s€b€O€ÿÚå³Ò²£Aœ9qXKW4FÁˆÄæ4:0$«O?yü`4(pÑ `Œp@|a@£óCµÐ-æFÁ(8Jv¢ s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€’àõ«—£@6ÀsDÄhÀŽìÐ X\€øÂ €Fç†d ª®3dƒ³§Ž`=Rt4`Gvh,@|a@£óC |úðQRZNLBf4(Èž~Û7­@ËT£;°C+`ñâ s€z@BBöÉ£»£á0°£; p–ìDæ4:0ôÀ£‡w~ýú1£;°£ ¾0 Ñù€¡Þ¾y),2zð=N`bápæÄÑ€ Øa°xñ…9@Î Åžƒ}ôìhì@ÏÐ’©.?>°£;¼ ¾0 Ñù(À¼ÜŽZ×ÝQýÚ<6vä{²4´Ðܸz.g“ÈÖ8°9(€Y‹T/ XxØÂÃ9 †h  †€M±ä,¾’è €Fç†àáåG»+ñÞí«È\%Um¸¹·Í° µkj€¾ÆÌ`h!_¾|"&`áz‘Ã3À‘µ° Ç»}¨°£)–Z‹·ïEla@£óĶåáläF=Aq̾¦zHG"aÐâš=ä‡VºÁ¥°¦?¬…ààÏN4u9r¸AHÌB Wy7ÔË)º%‰ÑK ¾0 Ñù’sà\bÄ‘ }\êÑØ4ª2{d'Z»R ±Á€ƒ-`GS,åî'¾0 Ñùìtb1…5¼O¹QÄ')Ì„'IáOmC¢üÒ í‘°£)–ÖV_˜Ðè|΂­ O•šƒÔj†¼$…+ào} ÑìDŒ¿èï Rƒz¤ìhŠ¥uŠ%¾0 ÑùŠšü¸†}hÔÞ§V皘¬x­*<>÷®ÉÀìhŠ¥_˜2çÏŸ¿xÐhM€§üíRD=þÄ:ø;×£ÃDC4`GS,…€øÂ €Pêf`èß¿~ýþõs4( ÀÑ€ Øa°xñ…9@Î 1À'ÀíòY iÙÑ  œ9qXKW4`GvH,’è €Fç†d5ðâéã'ŒyWv ØÑ€Z‹_˜Ðè|ÀP­´ôGÃa4`Gv`Äæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0$ÁëW/Gl *&>°£;< ¾0 Ñù€!Y¨ªëŒ†Ùàì©#X` ØÑ€Z‹¯d'º0 Ñù€!>}ø()-'&!3dO¿ˆí›V`q<°£;„? ¾0 Ñù€¡$$dŸ<º;£;°£ ¾0 Ñù€¡=¼óë×Ñp ØÑ€¸ñ…9@Î =ðöÍKañÑpÀL,Μ80°£;ì_ÉNta@£óC°³q°±žÄ‹èZB2Õ¥óÇGv4`‡wÀâ sb s€Ào~‡Rïy‡EžF<€ƒù^! m#47®žƒKÁÙ$²5,@ `Ö"Õ £K·€Å4.H¤ì Iê,@|a@£óØÕ n*^~´»åîݾŠÌURÕ†‹°‘{wÛP»ôèkÌ †2ðå˧рÀ€Åª.H¤,Ve#-`ñâ s€ ¨—€\U`ŠCD $²š^H_®Œ]´OgB .…+_!—}C%;ÑÍå£K†™˜zá‚DÊþ ØK|a@£óíÀ¹XÅÑ t\zÑØ4ª2{”StpÿhÀŽ– ƒ3`‰/Ìht>€pcŸCCš–¤0ž$…?µ ‰|NÓ"~4`GÁP Xâ s€ I¡LdÕB£$…«|Áßúº =‚þ"Û£;ZI Ñ€%¾0 Ñù€áPµZîSfÁG´‡Dsè00°£`°,ñ…9@1!s@ ¸p£Ñ˜ÒíRD=þÄ:ø;×ô¬Fv ž€%¾0 ”:àç¯_xÐh´QÐh\ˆò~è°ÉTt.§Fv ž€%¾0 ÑùÒ|'œ‹_œim(5hu©CFÄL]"¯S$©´*˜Þ¤z±>°T¯ð‡‘áCÌr¬ÁÔ´ Xâ s€b¼rá„¶¾ùÕ‹'>>^É5v8p €F÷ =Ðã \àÕó'„ðçhÀž€ÅæDÆÈŽ8² ¾0 ÑýC²`­­) ÀÑ€$ûþí+<â—%UÙð X<€øÂ €Fç†b‚à`e=…‘¢ ØÑ€‹_˜Ðèþ€¡€MªÑEYþ ØÑ€‹¯d'º0 Ñù€¡~ÿúõû×ÏÑp $Gv4`‡AÀâÄæ4:0ÄŸÿµËg%¤eGƒ‚lpæÄa-]ýÑ€ Ø!°øñ…9@Î ÉjàÅÓÇO? ò®ì4°£;´ ¾0 Ñù€¡Z h è†ÃhÀŽì(À^²]˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|ÀP‚¢£0 FÁHÞ¿&Fñ…9@Î Õ àöÍ+£á0 FÁ¢bâÕ_˜Ðè|ÀP­´uGƒbŒ‚‘ØØ8Ο=J° ¾0 Ñù€!YÈ+ªŽžr< FÁȆÆÖ«â s€¢mÑSŽGÁ(¡€˜ãƒˆ/Ìht>`èÖ£1Ž‚Q0Z`Äæ4:0$7ßh0 FÁß¾|"Fñ…9@ÎP ¯‰‡È¥ððÛᑯ‰'ãÊxœÝ=v,S?þÀ¯«\âä9 —D:’ dk§–7GÁ(䀸 €Fç(x wj•õ8»{°âlmxœ&5Z‚Q@ÛÌHta@£ó´í"«HGB¢Õ È}ªwð´»áRd7Ø1Õ@D°ö0K| Y«hNÅ´…*zG+¤Q0Ìñ…9@ÎУ£€µXG„s©Uàjwãbß`Ǫ­X'»ƒß©˜•UôŽöKFÁ0Äæ4:0L[¸K´!TØQâT’ôŽV£`˜â s€H€u>™Šë¤1t  Ûµ˜ƒE£` @|a@£ó h:iŒkÀ}˜5Š©ÒW Ãm$€è €Fç†i+`Ðj£Åî(´ÄæÄ„R!°0ãA£ÁJS@»q!´NI}ªŒ !ºÐ´ ¿×FÁ(œ€øÂ €FçèZÄ#þÀ—¹p•”¡ v£- Ä3Ž©˜`™NLiŽG ¦Á×wRKïhd ·‘¢ s€ À,¸á"hE?- dMà*©1ÙÖ¢ŸÔ2HAbd‰1 Í ´Ó; FÁ0Äæ4:0 FÁ(à _˜Ðèþ€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€’à÷¯_¿ý ‡Q0 F`Þ'Fñ…9@Î 1ðáýkUuóg[†Æ(#P÷>a€­FÁ(ê ©0 Ñù€¡] ŒÅ(# ST˜Ðè|À®ˆL £`Œ‚‘ˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €H›’áâá ßQ0 FÁ(œ€‡çãý»·ˆŸ Òæ€77ïh(‚Q0 FÁ`ÄÏ óšÚúÏ“”– ßQ0 FÁ(œàôñîžþÄÏióºúF—/ž{òèÁh@‚Q0 FÁ ž¾A$© ’÷˜˜ZÑh@‚Q0 FÁ04º?`Œ‚Q0 F. Ñý£`Œ‚Q0r@î£`Œ‚‘ hô¼ Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`ä€"y>๓ƒÓ'FæƒßÍC‘ÃÞGÃ/FCc44ˆñV@¤Íœ9uLMCwpúüðþ]Ž®žƒÜÍC‘ÃÞGÃ/FCc44z Æ+Nhë›_½ªâDE„ñU§O‹ˆ)ªj ZÏïØ¸ÒÃÛ»yH8rØûhøÅÂhhŒ†/ ×oÞÉ5v8p €H›—”}úèî`ö<¦¡›‡„#‡½†_,Œ†Æhh_˜Ã@‘6ðøÁ_¿~ fŸczaºyH8rØûhøÅÂhhŒ†ñ…9ióoÞ¼Ì>Çô tópä°÷Ñð‹…ÑÐ â s8 Òö°³s°±³fŸczaºyH8rØûhøÅÂhhŒ†ñ…9ióìììÄ„‘™Ã¹Sð‹ÔBÀô1n&ÃÁtv$Ð=È\Ú¹ÎÁ>€ž±@ÓtHy ¶Ä9°Åfh ;†nQIdaDÚ|/?1æb*#¨‘H“q/Ÿ?bõ‘nÆÐ• '¨è*:RÇÀÍm˜"ÈöôÔP‰ˆù´¶…ÂŒ3ØçÀ#h~GãÒ¢H!Þ ¸@ ÀyAÀp³1Ó <ÝãR@À?äzOfÃt0²J\lj9«™È®ÅbXƒšÂ¦n°ŸHð”5øS}ÜLcÚEÅ¢–¼Ð ˜8ÉH„Õã Cˆ~5t \¥ .‡ Tô@Ñû¼ üõ$Ù¥*í¼@Œƒi7TG†#Ñê‚¡:x|„ËIø]HvQîf:;˜FqG‹4ILÈP1ÑB¸˜uÙáLÅÐÀ_¾áò;1B-/­Î B®»(5ZŒ‚‘ÔÀ¥“¤µ#©bT望á#<}¬ÎßÃéàf:;®OÒ¢b<Òÿ¬0J-­Çšüä4Ê=H¼ˆV÷`ö‚©R=´¸ê¦Û= 4 jÊ}„9\€« L o’áæu0ÁªhÀÓ$®a%Z‚*Éç¹I…˜Á1Zx €`>€¦u8…^ÀÚæ¢ºƒévOݦæ(v̆Ök—‹ KHu3Œ§'=š&iB¨µJŠx/2çç¯_xÝ+(Iî”»¹G†ÇmÈ;Rð‘äH¬îÁœ)Øq!Ú%4g jâ½I#7Sî`<‹mhä…1‰“’DHÅ„M’ÕÔ ’Šêæbâ s€¢÷}ÂhÁ„g2¼~U¼€æ WòQîHÌ´…u š.'{íycë¸<…'üÉKQ´Žú8î pÝÙâ$Õ³DªÇà𵡔„3µBƒ`ù†'Ñ-yÊÙÑ||¼x”^¾xNRZ–‡‡¦•„š–Ñ­kçÈÐøå˧ËçÏ œM7¬#ɱAë£Q7†ÆhhP× hàÓ§Ï °³£ˆ´ù66VÚou#Ï 6¶_X½@7¬#ЃC"؇›GCc44(ô.@¤í`ccce£ùÁIäYÁö3¦èãæuäzpHû0póhhŒ†…^Àˆ´ùVPeHÛõ/_<¦¤-Œé:¸y`Ivˆ Zºy44FCƒê^Àˆ´ýÀšuV†¿Á= L/ *7 G{ ¿X ÑÐ è\ €H›øýëç¯ÁZÝ†Õ ƒÊÍC‘ÃÞGÃ/FCc44z Ö1ÀæÇ§ÏO?ìé4ÈÝ<$9ì}4üba44FCƒ òº €B©¸¸¸ZpýêÅ' BŸ»zú~7 G{ ¿X ÑÐ Æ pðíÛ7x@¤õFÁ(£` u€Ü áv^Ð(£`Œâ@Ñêþ€Q0 FÁ(ƒ½Ï £`Œ‚Q0x@ Àý£`Œ‚Q0   Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €Hž¸~íÊh¨‚Q0 FÁàšZ:$© Òænߺ®ª®3Ê£`Œ‚Q08ÁÉãGŒM-‰W@$ÌÜ»sGRZNLBf4”GÁ(£`pO¿ˆí›V˜[Ú© €H›}òèîh(‚Q0 FÁ`ÄOîióÞùõëÇhøŽ‚Q0 FÁ`Äoö ÒæÞ¾y),">¾t&gNÀ*d`ª‡K¡éÂÔ‹KVñ¨Á¯«-ø=HªQÕPnÅ`NÄ(À“Tèà¤Q0 €øÍ^DÚþv66vöÑð¥'À pˆÈ¥óÇ!\=CK89g¢ •!›†+1u!‹`Ú…_V·ár¦,A£ˆq…V *@Œó°z–`ÐQ7‰Ž‚Äoö ÒæØ8€JF㛾uF€#BPW<¢‰ß¸zNCÛHÙpñ eÑDHâIQhRÄx™‹ß ‚®²‘¥ÐÌ„«'U‘&#+CSƒÇò.£ŠCæ`&®xôÄÏió<¼ü£uÀ¨îݾª¤ª $!\H’ZZs`u V-pqJêLÃáj½O¼gÑB .ŽÌ–n6P®…xĘŒ&Žé<†Zà2Šqˆ!æÙ4´_¾|b e> €FÏ ì’ÍF €TZë’q~WT@ŒÉøÅéÄX#¬mŽÑÌ;€€øÂ €FÏ E!yU<[Ñ ‰§©KPý ÷2µêuâÍÁT‰¶£Maˆ/Ìhô¼ Q0LzKC¨JçaŽÉc#ÖÀÁåR­ÒmŽaˆ/̈´ù6¶Ñ9azòæÐè1Çëé6 #¯òäá’<ˆK —JL+Ð , «ð»—íÈâXÙ$) Õ¿AL/ã7.Ô…G/þPÅe¦GK‰/1ˆŸ ÒæÀuÇh(Ó7F9Èyõü‰˜¤ ÄT‰+ÑÄ‘µcšFP¦zb<ˆK «JL+ð¸M~×â²Y+›$ȖⲫdY‚1‹,ˆ'Uಠ—hâpöh)1 %ÆOR戴ù`À::^D_€ऊ`eCr/2xÿö¦8D™+(,F¼4Yb<ÔÑ…Ç(¸ˆd7cµW¢Åc)‚a‹_‘&#+ÃTƒ& dcµW@´àg\Và±ÙXÌÈôì?@$î`ã`íåÑ|ùü‘B¬lL-øÅIRCŒ!d8«ÊŒG«IaK ›1K’GH²«^´"‚¤ô0 ¨5r@ü|@‘6¬ðGë€Q0 FÞRb´ˆØðÿÉ@Ê|@‘6ðûׯ߿~ކò(£ ððòCZý£EÄÀ‚ßàÒŸøù€"a>@IEåÚå³Ò²£¡< FÁ(@“!FÏ–ppæÄa;GâÕióšZZׯ]{òøÁh@‚Q0 FÁ ®î^$© ’ïö€h4 GÁ(£`âg €FÏ £`Œ‚‘ hô¼ Q0 FÁ(¹ €FÏ £`Œ‚‘ ˆäù€Q0 FÁ(ÃÐè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@(uÀ·oßFCdŒ‚Q0 F ¦Ñ £`Œ‚ Ôhll ˆQ0 FÁ( €FCaŒ‚Q0 F&0WQ ɧ°û]IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig57.png0100664000212600000240000002465010322727434015561 0ustar mikeuser‰PNG  IHDRâv=| ¡ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF)IDATxÚb¼ráÃ(£`Œ‚A r *ˆHi뛆Å(£` 6ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ Äg™…,‚0AD12 1ÀÎ`DÃ0 C?#š\Võëœf¡Ûˆ©…7`1—P´ælÞ&à¬…ß X ¿ÐM¡[‚³FÓêhZäi‘dIzl7 €b­©FÁ(£`0€b ‚Q0 FÁ( )ˆ4å'^±££cZ×d€-¦GÁ(£€æ€Èù¿5v` ÐÀ z¼<× D£17DÁ¶ñ@4£`Ðzkúëí©@’G-H~¾9Hòªç~º1ÈàÓÌCSüáêD )¨]@¹;žŸéDæJ›U@ON¶Ió*òŒ½{´œEÙ¾ŠAve{2WÏ«“l£N¯+’fA Ü“kA!i2‘ £/Í’vÑÓäÁ%™@Ò!v<°(ÔŠ›¹aá?k4Ñ‚Q0€@ÇÀTŒ mXÁADÔ ŸF.ˆ¢`Ê’H eZ´æÙ鎧§:¤Í*Át%X†qñ• ÷èzv@ÅHU‡™O ] ;ÆÏbÍ"£` xrá°\"H¹L°Œ€"ª˜†·¦?^Ÿdðkå¸6Q@+"ûþ*¨1(¤Søîr?!¬[$ß^ê’"úÅ@òõÅ^¸Qb†%DÖà’ºXRÃ[ÓO´²–ÕŽ·ÊYVÙµÀµ(X×B÷7Á•ìê¡mꃠִЍe}{=\šHñͽ ½ÎÍ7öÔh¸´\ß]äjº¶Ék»@­xm÷6ü¾´X»0è{w]ÜRfà̹°¹.kä×aœÝX 4 샳O­5¢Í‚' ·¦O¬Fô],Ã@ále.²¥6‘SIJðÖô¾iÈâ.Is€äîy)p·”y@rçì$ éž:ǬD´ù@öö™ £ylŒ*–Ôp.~õ„>6Í­š $¿ÜšDL=¯¡ôʵ uð{ˆê‹”ýê|%Þ{|¼Âx.£å­jä­A¥êƒ£Í 2ú¨ØU´­S";Dq¬lß ÷¸s$¨êبæRyk_\ͽµýÅ­e¤Œ6ôí6Ðç6Ak&cÿ^ã€^“P}f}\£YÐ`lÔ‰Õ *Ð"t’e¨^<¾  ÖS€È8²<Y‹mô4 yhi&²àÅdA§„YÎ ³g# º&ÍqMž D@ö®9Ipñ³!Œ³@e´gúÏô…£ÙlŒÊKj"Ëh  rVz[Ó$uŸ‘[Ó`kÙjä5…Øš† 8hº‚Ô×wWCĵÜÚˆ‡¶¦‘‡AÎ#5¨1[Ó´‡–d"—ѸÀÞù© ¦tâˆ{‘[ÓÈØšf+£€ÚÞ”†~àDóyoÀe4¤)ýúBu ¶¦Q7 "lM#ïS‚”ÑÀÖ4еg6ÑÔjû˜é@â.¦÷.•ÑÀ5$èö€ËhHSz÷ÜäÑ,4 FÊhøØ4Á’ €°,ÈãQƒö¦yÕsÄÏNƒ&è Sˆ Ó¦ôŠ{È24à€:â±i´AQ0 FýËh䀢¨5- ÿáêDø¢.hñíå>d5"úÅÀ5‘íèg§¡‹ÛÀ òð5å¬jkA™E´©U´©»¤ >‹¨dW¯lW÷P#| ˆî¨‡Ï"ª95‘ºTCÇ£ýÊŽÊËHkò0äøv_Ø\Š<èaäßkìß lPŸÝ€2îaÔz]!| .n:ñÄê|ø,¢eØdª<@=ÀSˆ@lPãoG{¤-Ø1+atqŒ fÙà @1Uhë›_½xrôè%¸Èb-·ÖÑãlF^=zi4­R|ôR¤)?ñ»8Ù,®Çv ÑÍâ£`Œ‚Q@s€u8‘ €F‹i,26=ºÂaŒ‚Q@àèèH‰v€-¦GÁ(£€¶íÄ;R@ž7= FÁ(ƒ¢5}jMÜhpŒ‚Q0,À Æ( €Åôèŵ£`Œ‚Q0x|q@zŒ‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 F.àVÍfdd<$VGh;ùÿÿÿ!ä(£`Œ(,¹T²‰ì6`±ÜÐÐààà@£Åô(£`ä‚AUFI¬Å4@!Ž^]7 FÁ(i€‘‘X>~»3m08èÈ¥á,–!G/ÐèØô(£`äH=HZÓ¸j €"§5 ç† ë Tˆ&B¹cHòÔ€‡À(£`À[Ó õõõÀÂÿ¡þ”·¦h·¦‘')>ÎnÕ‚Q0 †_k^F¸qdÚµ¦ˆäÖ4r8PEZcv´m; FÁ( skùr,H‘ iÿRÒ²ÆÕš &*ú(Ä#Bž3¹ŒØ²2"ƒU1VÊ}4 FÁ(<­iHOX.#›är«f766RزÆU[i ò0»üxØdâa`:×(µl$Õy˜= â}4 FÁ(ØuÓÄvÂKK¬w‹l<²ë ¬ òˆúcÓXKR4A´F%||® SÏØ4š [¬ä9—9xŒ£` ¹Ö4°Õ¬c`$á£Ò–5ò˜5ZË(o “ך rZÓø›±X›ÞøqIáRL’8©­ibCF ÷GÁ(ƒ°5 )À³ „—œÈà ˜-kˆ<*ñ·¦ˆ„bOÉ5 ƒDŽÉ Ô AGÁ(ƒ|"fñˆU%Za¹&™<$Bä.D€¢N1ÙÁ'[ñMrâ¬ñ”­xƒßãUŽæQ0 †Dk¹ñK°9Œ\XCCÊY<­l4Y\­i€=ÓcŒ‚Q0ÚšF´v‘[Ä’³})ŽÙ²2à¥+®VöŒ³Ÿ°Ó4ZL‚Q0 F[Óèk9 ëBƒÎ¸ZÖÈâh…5®Ö:žÖ4@Ó£`Œ‚ÑÖ4J[¹<$8r oYÃ'1U"/öÀ4`k €F‹éQ0 FÁhk¥™ŒV°âY›¶œƒ˜…ÈRh«Gpµ¦hô„¼Q0 FÁèºé,´òºkÉ+‹ÆÆF »¾¾×ø2D%###P%4 Y$¯^< Ô‚Ù²ª*ƒl+G¶‹àºi€mM‚Q0 F[Ó8Ç‹IjY³¤ú?êêäÍŠ¸ZÓ4Úš£`Œ¶¦³pµpIjY#“È-k\æ‡xÓš úÓø7pÃF!‰ƒŸR74F|"/0µq-Lç,3\ƒ”ÑòB V`é‰,!E3Za]#†¦“\³aDV · ¯-0@1„œ6Á"Žõø?2Žþ ¼$ÞXâƒH—ÿgÎÐ9!Q¥®‚÷ćYIµ5­­oŽ«Lj˨ҠÆÚšZ,Ç ¶¦ˆ®cÓ ¨ûú0Ù DìÐcÝÅGqàr‡QÅ©KRš¤]DàQL¶Ã(ôÑ0Ë€˜cÓXÏîÀ ˆ³†ìsÁZ³þ'nÝ4@r®†ÿÿh¥mqÜTè™±CÆ›ôJJQËÙÍ º&+Gºª]§HD¤]½Öôe¯Í¸-­íQò$^Úéœp¼ët°C]Bè·©ÊÝ‚ì§9çrn?Ù•U6½øoxjy>³Þ4:6=РkMãiÅÀ+"‚V`N’V.—4 —áømÄc8Š«ýH‰^üчÇ"<†PâZ‚ÆâWLLÜ süADdj'Þp’'‘Ž–}YlgzüÇ{Ž©-käÖ4ZSÈÖ4@ѵ5 Ø‚ u!³ñŒµ3wGÍl‡_cÕw<9}y,dÛøãȧÁpÓr´â ª8ÓË´›ãúã_¬aŽ+aÓm¦Ž¤¼@FüûÖ4„Ì"2r÷ ZËyÅ4dWkY%®Ö4@Ñ{Ý4f›¤†‘jð· 6Èk¸lýQÞª%Õ©ToM¹6{‰A¦bkšøp ©sFFàÔš¦$ˆ‚aÙš&~xšÈÁh´cöpUœ¸ZÓDï±iH[¹ñHëú™˜…ÈãqÈ­!d.-¦Ñ©b#%1£†˜Á´e ¢«—é3œŠÇ¤†LIÈ`M Ãré®Û[ÐFI"1õb†—Ý[Ó4»‰iÐa¶ÆTƒÌ%I—]ÿ±HMdk¸üBpXŸÔÁ¸œGLË«ˆ\áC¤k Æ&âOQDŽíÓ'Ãïq¬fâgLd¤sâ“ÖlM“7<«1ŽÌÆ3N§5 €½3Æ„Aàÿ_­êââbti´hb“>èô€ûy™y¯Ò&¤]–ÕMVGFÏ›…‘%€ Ì€RPÌ¥¬îQ’ê;xŒrFJEí˜ VÍe{Lu¼g¦áῦ§+÷Š\tzl4ºY| æþÞ¥; FXbÀÜ…ß‹X__OÌ>C\ä×ÛSmaLàöBla b"@Óõ†“§FËèQ0®Ö´YÈ"äƒîHmSCÊßz0@G^õYLBLk €F‹éQ0 FÁȸZÓ@RÇÀùTR’ZÖ²­íLö™4ZL‚Q0 F.ÀÕš†“Àš[5›Œ–5š- ŒMÐèyÓ£`Œ‚‘ ðÞ,޵´$rò‚ 4A\-âZé@£­éQ0 FÁhkš¨g’ZÖ¸ZÓpíÄ·¦h´5= FÁ(mM“ ¶¬á °‡y/"žÖ4@¶¦GÁ(£­i’×GlYö¾9D²È Šh+¬qµ¦h´5= FÁ(mMS°¶¬á7ŽCv³­ Wk €F[Ó£`Œ‚ÑÖ49» ñ·¬!-eð=[f!‹ ‡çÕà1Wk €F[Ó£`Œ‚ÑÖ4ÕrËšøe!ø[Ó4Úš£`Œ¶¦)jMãjYÃG?ˆÔ‹«5 @ŒÀ[[ßh(³Q0 FÁˆŒŒŒøF(nYËUâϺäëí©p.°X^³aÇh´5= FÁ(mMS­5Ù²&^=®Ú €F[Ó£`Œ‚ÑÖô´Áà\­i€mM‚Q0 F[Ó4iM“Jâª-ht¥Ç(£`t¥Ç`!±®ô ÑAQ0 FÁ(Œ>è@£ƒ£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@±ÀY“AFÁ(£` ¨¯¯‡\w‹ ˆYz4ŒFÁ(£`°€BÓ˜Eø(£`Œ‚4:6= FÁ(ƒÐh1= FÁ(ƒÐÓ:˜\4AÊ%[=yî¡Üý£`Œ‚Q€ÐoM“W>u!_÷K9 ®i£`Œ‚QDïbR>޶=GÁ(£€H@ƒ®5 ,Á!­±ŒÉÀÚ FÖ‹iV]xÔï4«¨5¼3 FÁ(Q €Xèß”† `v@$~\S ¼ÍŽÇ4d•¸Ôáün£` hhŒM9T‚µÜÇÓR¦…{FKáQ0 Fu@±ÐÙ>:wùG ÍQ0 FÁPD¿bÿžr–àP y¶“]îSÅ=£`Œ‚Q@$ –Aåä‘â¦q••ʆ_ îÁcu+ŒQ0 FÁ„¸dk4,èߟ£`Œ<rÉ@±Œ­‹fä–õh€Œ‚Q0 H4ZLӌͣ`Œ @½4 FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒ ÝlZ³aA5õõõW/ž•Q0 FÁ(€€b¡§eÀ#;eBÇh|Œ‚Q0 F :Û·ÿ~\R¸ÚÑ:ÈÜ+Ng5вõŽ‚Q0 FÁ@€b®D.^GKÛQ0 FÁˆ4:…8 FÁ(ƒËv=|<Þ¾Æ#2 FÁ(CÐÐ(¦‘‹Zäò“&‚¦f4¾GÁ(CÐЛÆ,yGËâQ0 FÁ04´=ÐæGÛΣ`Œ‚áh˜L!ŽÊ£`Œ‚á h·¦!CÏÈÍjdL5£`Œ‚Q0@ѵ˜ž2¡ƒŒ½àh#È\ÌÔĈŒ‚Q0 FÁD¿bº¾¾ž ]¸Ú£…ï(£`„€¢_1MÞ™J£Åñ(£`„€Ý…8 FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒý6‹¯Ù°ƒ šúúzòö”‚Q0 FÁpD×ò8€GvÊ„ŽÑø£`Œ4@ô>ozÿþý¸¤pµ£1¦© ‘¯€¡›^J,%hÁk|!âTtÃ(£€Š €†ö]ˆ´¶‹¤’tpsX/öŤh7üŽ‚Q0   Ñ)Äaà÷©“T‚Q0 3 !\L#F6œÄZN¡‰C¸p8ÙL-XÂoÐ ÁïrLÇ&ßQ0 F ¡1è\$9ò€ÖGÇ:€ë6/4¸¬ èüxt¡)&èGd5˜7F’¤£`Œ‚4ÜÆ¦qIÁK.Ê/KÄc‘ °ÚŽG1Ö{x‰4k}3Z4‚Q0„@ ±i*Þ2NÐ(*Ú/‘Ñîê%rxdŒ‚Q0Ô@ ‡bš˜R ¢kéFj¡†Ç(ü p¬äùÍ|äÒ¾lƒ<óGÁ(ƒ ËÐu:¼$"¦éЬ˜÷ˆ-ÖmÀÍ(âíÂê`‚ƒ˜¾#è\ÚG:FÁ(Š €YW[ßœ[´×lØà_ }\BüP­µ Â~ÉhQ> FÁàÀbóÀD¿Öt}}ý ¡QI4Ô·‡Œ–Ñ£` N@ô+¦°™LFéC^5¤‹¹Ñ2zŒ‚Á htâ(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@£Åô(£` j@ƒº˜Ï%GI:“£` 6@t=! šúúúArBÞ(£` 8€œ@t=ohÙ):0[Ó+NªQ@·ÞÛhzƒ½¯Ø¿?.)Ìv4$ÏÐçR<€ì>©r4(Úý¶XóîZÌ£Ö9¥˜wþÒ34ˆ´3µàDœÑ2z N@ƒâöFFÆÿÿÿãiÝÐ({Sp žS˜±ÞGŽ É/y€xq]ÜNŸ:k¥‚õîv  ¶¾ùhI= ! ŸB–Ѹ¤Fó ñ¥ðè‡ÄW'¸*ŒÑô6 ' (¦‘Ëe~AŽp"‘ŠV J\…ÇÌѱéQ08@ Ø Á2šÛØ4î¹{´aG<"h ´Ï(6ò0 .Óˆl›c–A˜Ã8ýHùžRŒàbm‚Á޵]LFP“hÀšp•Ô£­éQ08@Ñu³xH€~5h. c…ƒgÝô€xväxtÝô(„²Y €èך®¯¯'U 0Ï`møÐ³àAÒQ0Z‚QD¿bšŒ;°5=2ÏÈÉÀX‡5FŽÇGWzŒ‚Á hPd Ì3£çjŽ’t#GËèQ08@ÑolzŒ‚Q0 FI26 @£··Œ‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ 4ZL‚Q0 FÁ D¿Íâk6ì ¨¦¾¾~t£Í(£` €¢ëA¦À#;eBÇh|Œ‚Q0 F zŸ7½ÿ~\RXÛÑø.ÃsWÞ(£` @ÃjlÿMw£`Œ‚Q0@ öbí® 4öhÛyŒ‚Q0ì@ ‡Ö4°¼†ßðB™—£`Œ‚¡ˆexxóÒ<Œ[®G›Þ£`Œ‚¡h´¦á㢙MdC{´5= FÁ(º €X†·÷F[У`Œ‚¡hhŒM#ßKÞ²£ êQ0 FÁ4 [Óðry•Èh³zŒ‚Q0D@ѵ˜ž2¡ƒì½àÈå,Ö CüŒQ0 FÁ(¢ €èWL××ד¡‹à`ÅhA< FÁ(Þ €èWL“׎-…GÁ(#ÐèA¦£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ó£`Œ‚Q0¨@Ño³øš ;ª©¯¯'ûl¦Q0 FÁ(– €èzBÞðÈN™Ð1£`Œ‚Q€ˆÞçMïß¿—®v4ò!y£'1‚Q0 F ¡q-Àèͳ£`Œ‚ ht qŒ‚Q0 5 ¡ZL#ߎv}8~òÊè½ã£`Œ‚Áhh z`½ÒÂFÁ?$—…0ˆ×8 FÁ(hØŽMc–ÅÈWÙ¢•þ£`Œ‚Q0h@±Œ(ßbÜ£)`Œ‚Q0È@ Ã)Dä²™ i;CD0›Þ£IaŒ‚Q08@ á±iäB™˜Ö1\%r >Ú¬£` r@t-¦§Lè c/8Ö2s.‘Y4•£¥ó(£`ð€¢_1]__O»VöhÉ; FÁ(® €èWLÓâL¥ÑByŒ‚Q0ì@îB£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A ˆÞçM£i‡õÀ~\*á—ÅT@Pý4òÕ¥–Ã/GÁ( ]‹iÌbínCªdHJîŸÅU. ‰ò‚$GÒÔG£ë(T4··ŒfæQ0 FÁ( hp]²…ÜÄCA+ЉýÀÕ"F6×` ®ö8ÚµŠx*¬ p9kí…utˆ $9ͧ˜WŽá73ôp1ðx MO°Œ‚Q0b@ Ò)Dx>ÇÌ·äõÖñH|3­pÇeVxt¡ÝtŽ&…Õ‚¦é_¬·Žt0I&¸ X º|Œ‚Q@CàÊZüWbUõÆßÈES9Gi $•­»ø­À£ëÔî(£€H@,CÑÑ' 1»Ût(4CFuÿR}µ®q­Q0 F.@9è«Í‹_å9n Š "ýHS+(wVÇjÐÆmp•Ñ£`Œ2@ѵ˜†ˆ‡U2àB%²ˆß@‚&£ ›â7 «"€«|$Æ;ä9’˜È¢°¨ÅŒq<5Vt¨íFÁ(´ €¹B[ßœ×~*ŽŒ‚Q0 F X³aÇht³ø(£` j@,£A08Áh;zŒ‚Q4Úš£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A h´˜£`Œ‚A ˆÎZ³aÇhpŒ‚Q0 FÁ !@!ŠéúúúÑp£`Œ‚A®^< a ¦Ð(£`Œ‚ÁhtlzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 ÑbzŒ‚Q0 5 –Ñ Chë›cß9::8p`xÇà• 'FrüN™ÐAŒJ€-¦GÁÐÃõÈ0øÁÂÿÿÿɕа_b@Ó£`ŒVEƒº4:6= FÁ(ƒÐh1= FÁ(ƒÐh1= FÁ(ƒÐh1= F c`G¤j„~ä.œQ9xâ €F§GÁ(ÀàkÅ€¹ÿº±!QT‘á…áçñ!ê#€mM‚Q0â˜#6 †h­@£Åô(-zHhaavŸqu¨U‰ô V÷ 9¿9C1Ò1=N0fi4xBÐè Ç(-£Oào9"+@ AÖŽ‹=$üŽËÁ˜‚h¾êÍj¸_И3€ñ @£Åô(-£‰ÍÉøÛȃ¼ŒÆZ¼âj,ãwÿ0(©1ã‘È”0 ® ÑbzŒ\@jqC|y=˜Kj"Ë&²«·¡U=“Tò”¯htlzŒ–ÔÔÊü´0–ž­KHù…ßñCºŒ&/R|â €F[Ó£`´¤ÆÞøÅ›ÆÚÅ:„=hÛÔhÆåx\^re4Z”AOL%Š8ƒ‹v €F‹éQ0 °O”‘§ë|ã ò"WHõÝÈ%2LHŠkš€-¦GÁ( ªkH`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀräÀ:Óö‹Îž8Ò70T ‰v‘5PÉ`HdÕaæxLg“ˆœù€£G¨ièÒÓ“ûwo÷ðö@ !G¬3Ðl?u긚ºÎà‰£#÷:»zž„D»È¨d0$²ê0s<š³I„r1ç]¾xNXDŒÎþ¼|þŒ#8÷”†#ÖpÛo\»*,*flîpùüq]CË'¡Î»pÚÆÞyð$$ÚEÖ@%ƒ!‘U‡™ãáÎ&@Î ‚Ü#@(uAÍׯ^äåå§¿'ïß½eëè6€BŽXgÀm¿së/ß`‰)K;÷ã‡v‚wÓÂÚað$$ÚEÖ@%ƒ!‘U‡™ãáÎ&|ûö ^™ó<||ôôá—OŸÐœGg !G¬30m¾ð6ø€6”@nøòyp%$ÚEÖ@%ƒ!‘U‡™ã1M ¡´?`Hl_$ŽXg Û>* @l ‰vî(ŸéFCÔñd; €†Òþ€!±}a8r`l;rá;àý€Á™hçžòéÞi4DO¶³h(íÛ‰#ÖȶÂ~À`KH´sÏ@ùtHï4¢Ž'ÛÙ4”Î Ç G¬3m„ý€Á–hçžòé>ylˆ:žlgæŒÌÎ:@EÏà2¿ó€º¹Ä8‰—“êH4çéB²ñÎ@s Á`DV€Ë øç€µI½ªÔ"ÄÌ e òÒ 1 —ÉEq°·&(…UMÁ¬Šf¦^* ]óá J¢ƒ*å ÕKK Ko  a2€²´ k²IOârþ´H0ñs±ÚŽV‚ãçÒ§@| Ú4Cd‚Çc2Z™ˆ\Jâ‘"²ÔÆe/fYLRéL* Ïdš–3ôÏò@Ú­h`þÿ_/9O­f{—:ÓKMþ0wàœ$ºÉæårÉ_™yrL”L©èµ‘­ëêZÏÎN1~aÆ©£UR{Íøt«m$Á0 aÆ÷H†M WƒyW<#’“ž2õ^ß"ÈæÃ7+ðõ¾áa¶½F!Ù!ô“gê`h³8#¢wQô *ÏàêõßÂU¬P}œÓ¢r$.gàJ.Ä4Æé6¦I0¶ô±ÓX5âQ@Má|‘IÂÆÌêøÓU"‹Y†„b…h{‰,Ö‰ï4`ªA®Ã°ŽeQ1Ð&òRMS@Qy®r“*= Z¯Û(Gc/rÓ`0„ñ¶Ó¨‡`ƒ'pÈí¥|(€¼4ƒ¿UH»d@Ì€>.{á­ròjˆÑ‚_ ZŸk¥BI Q¥ !hµRÐèþú9ùBROPñHÞB®p>€`yM^šÁì#’4@öÜ,%ó Ø&ŸñLG–3TIEø@î Ÿ#ñ”/¸†}È.ªFøþÌæÿÀîÀß‹'/Í ©Ášlð˜LÓ9Ä„0æà M„ÙÀ5²4h˲S~@L( 3A4€A0à ‘#i±@ˆna…µèA¶y+ ¨€êƒEƒ-!‘—fs–Áeï iéƒr—³‰DÈ¥`gc#ˆ¨XRš¦q9ëX9®‚E4u$…Eª³ÉpÁ`ÄT€g“ÜväÂy”†v#EX+dA ãˆê‰ŸvÉd,ߤÜ^¬µñ‚´4bÊ’Fti‘ŠˆDÈðn-+€ ÌÿÿêAÄ|ÍÊna’a¢´é'>À³@­/ú#ø1rÊê¾$éœÒZž‚ƒ±IÓòPÈ-RA«UùÒ3ädÐÔì@rÓ—º ƒû1.ÏîÎ Ãá°eÊ=!SVèdÝ®ÇyF|Ô^çŠjDõñC‘yIGªR>ÖñåÓ'´s½©~¦ëàw$‘.¤CXi;äþÞAqú.¤*úòùÚý~v4"k ’ÁÀ&? ;7:~ ö¥";›H€|@ž4xII’=/³s0hÒèyA£åÌ: €F.$cüa„Õèýƒ$aÞ€µÀ€w€k¤Ý@ô˜ Vÿˆ¦ëv§#ÉvÕèýxú£÷ ]QNoíø¢ÜÙ4º?`x:rôþ<ý€ÑûF³êðs<ÙΠÑù€áéÈÑù<ý€Ñù€Ñ¬:üO¶³e]¨ˆ0A G`£€ÀÃ类ÍÅÃ'.)ûòùãÁ@~ûòéø‘½œœ£±3 †+°¶q ¨æõ›· °uADÚ|À™SÇÔ4tGCyž=y¬¸yø¾|þäFÓð(Æ`ÇÖŽ®žÄ« æ®_½(%-÷ë×ÑPÄ1±§ï6Wihë¦áQ0Œ®¡ÉþÝÛ‰ß.@¤ÍüúùˆFCyŒ‚Q0 3 ~z €HÞ08wý‚Q0 FÁ(`of e»@ ¥ûFÁ(£`ˆ/Ìh(í£`Œ‚Q@ ¾0 ¡´?`Œ‚Q0 FQ%;Ñ…9@ ¥ó‚FÁ(£`ˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€¡ EG+øðþ52÷Á½ÛÃÞË Jª£ñ> È+Ìht>`¨V·o^ \@TL^Œ„]ÁgOÑ54÷Q@Fa@£óCµÐÖ5 ¬€ãüÙ£ÀjàùÓÇRÒr¢ÒÃÞËþá;6®­F…9@Î É @^QXÒ†.`hl ¬€ qIÙ§îŽÈ(i€øÂ €Fç†hS—u´Ó†ü†e€Ç4 F ¾0 Ñù€¡[°†Á:àÍ›—""â£2 F ¾0 Ñù€! ¸yøFë\àÛ—Oˆ$ÍÎÁÆ>P£`Äâ s€òóÈ·®C©·zM I ©÷¼“jþ( fN`gÇSP+jF£x 6@|a@Ãa>-ûÑ4C¢>šù9àáåÇ?yN­©õ¢G¾!gŒ’ s€æó¸Úìpq¸ fiNŒ‹,H°‹€UĈš£` €Žœ}å ‚âhzRMY¿!£`Pˆ/Ìh8Ïàj³ã*µ)ì…ì"àQ€Ì­C€§øÆ¥ 5Ĩ£€T@|a@ÃaZ9NRŠ«NçÆøh¹?,+\`´Ð´Äæ4:0 F]+€Q0 èˆ/̈ ¥B`aƃ†}¨Áû£µÈ( ¯@ž-£`ñ…9@î ŒV£€6¼ƒ9< FÁ€â s€éç‘4'Œ¹hg´Dö0; £Á2 hˆ/Ìh8Ìàš†íàÇTƒ¿XÇe&~)"ŒÖ+^:CÚòh£:ðò—8švH¶M#Öµ¡¸Ö Ö£€T@|a@ŒÀ´¥­o~õâI ‡ÒËÏñòòóðñ ûžÁ`.‚!熚Y:rñð&t¬àÛ—O¿ý:öèŸß¿$¥eyY@©iݺvŽºf~ùòéòù3£gGPbøôéþÝ[Ž®žxÔ|úôH®Ù°ãÀ4:0 †3`cã`|‡lSÝIll£§¾ò s€½?¥À0ºT¸Õlƒðp=ª;‰m´õ6 Pñ…9@Þ€£¥ÿð¬ ~Àà*_¾x<ø;£`¨â s€½?`H‚ß¿~ýþõs4pr‹›uøŸý{t,h •ìDæ4:0ÄÀ‡÷¯UÕuΟ=jhl=¸ü>a`Mùk¤êÑÁ(@Äæ4:0Z Ï È”–½vù,ö^>}ü°©¥íhÔ2 s€ÚÕÀhP`HÀ ØxòèÁðöòh0 Ðñ…9@Î áj¹°¸° ]Q0 È+Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`¨AÑÑ@Ã|xÿ™ûàÞíÑ0A JªÕ_˜Ðè|ÀP­nß¼2£`¸øš7` ¦¡; ÈàìÉ#ψ%¾0 Ñù€¡ZhëÅ(–€¾Ó[JZNTBz4L‡øŽ+ñWÄæ4:0$+yEU¶ÑcÂFÁð†ÆÖ-â’²OÝ Rñ…9@Î ц;ëhd‚á àÿ=~pçׯ£B* ¾0 Ñù€¡[°†Ã(öuÀ›7/EDF÷Ó ˆ/Ìht>`Hn¾Ñ:` WðíË'D{–ƒ}4©“ ˆ/ÌhHΠ]"Ï@úõ/Ä_¼­ª®sþìQCcëÑÐÃÀï¶u~öÐëHÂí?â s€½Ox´£`0V@†¤´ìµËgäh˜ ƒÓÇ›ZÚ(Ù‰.Ìhô>á¡] ŒÅ(~R@°öž`HVòŠªl£êâ†ÆÖ tâ’²OÝ Q0Òñ…9@Î Ѧ.ûèaŠxüбÇîüúõc4@FÁHÄæ4:0të€Ñà ×oÞ¼ÝM= F ¾0 Ñù€! ¸yøFë\àÛ—Oˆ$ÍÎÁÆ>P£`Äâ s€nóhwÍC©W¸à¿ý‘ÔKÁFï’ÈœÀÎŽ§ VÔŒFñ(l€øÂ €†Û|<+Ò([¢;šù9àáåÇ?yN­©õ¢ÿòùãh\ò s€Yó˜MxÌ2™V¾c–ø»‚‘+ü]¬ &Àm­WÐ1°€³¯\8APM/P B¢ "Ëâ7dŒJñ…9@ ù¬Mxä2“AIÏÓ< Ù£À`¨ð߸”áÄ£†õ£` ˆ/ÌhtÀ £åþ°¬]>fôìèQJ Ÿ>Ý¿{ËÑÕšOŸ>É5v8p €FçFÁpll¬ƒïmª;‰mtU÷(` ¯0 Ñý£`x×lƒðp=ª;‰m´õ6 Pñ…9@Þ0 †3`õWùøòÅãÁß±C_˜ÐèýCüþõë÷¯Ÿ£á€+p[Ül¬ÃÿìèߣcA£­d'º0 Ñù€!>¼­ª®sþìQCcëÑÐÀà÷ kÊ_# U6F ¾0 Ñù€Ñj`xV@†¤´ìµËgä°÷òéã‡M-mG£~Q˜Ðè|ÀЮFƒ@*VÀÞÀ“G†·—G+€Q€ˆ/Ìht>`WÈ…Ý(À€ÕÀHè Œ‚Q@^a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£óCŠŽVðáýkdîƒ{·‡½—”TGã}W˜Ðè|ÀP­nß¼2¸|ŰPÓÐöþ={òÈè¡¡£€¼Â €Fç†j ­k<X|Ÿ°”´œ¨„ô°÷²‡øŽ+G«Q@Fa@£óC²WTe=& 704¶†l —”}úèîh€Œ‚‘ˆ/Ìht>`ˆ6uÙYG# 7€÷øÁ_¿~ŒÈ(i€øÂ €Fç†nÀ>ë€7o^ŠˆŒî¦#_˜Ðè|ÀÜ<|£u.ðíË'Dkˆƒ}4 FÁˆÄæ4 çpÝÉNð®v"/s'æ^x2Œ4鳳㩨5£Q<  ¾0 4@‹Ü>šù9àáåÇ?yN­©õ¢ÿòùãh\ò s€Aóðò€7çqâ˜å;¦Ä¸ Á.VÈîA3p Ð1°€³¯\8APM/P B¢ "Ëâ7dŒJñ…9@Ðù´‚³Ì%¾ ÆeÁ*—F+€ÁPà)¾q)Ã#ˆG 1êGÁ( _˜ÐÝ@•‰º¹g ÑÊ-ôG­ñ…9@îø `Œ¨ `Œ:â s€Ý€¥­FyÀh50  ¾0 &dΟ?ñ ‘p¢yƘ˜jc4ÁHÑ<Ù; FÁâ s€B©XX˜ñ Ñ`ŬF{ £€È^î(TÄæ4<ç0Ûæ¤–Ô¸F„Ъdx¤ˆT0Z¯ xé iË£5çáÃ;¸ÄÑ´CF„Ѐ¢iĺ6×z¡Ñ!¦Q@* ¾0 F`ÚÒÖ7¿zñ$ÃÇÇ‹Géå‹çxyùyøøFÃwäÜP3KG.žÑˆÀ¾}ùôûׯógþùýKRZ–g”š–Ñ­kç¨kæ—/Ÿ.Ÿ?3zvô(%†OŸîß½åèê‰GͧOŸäš ;8@£ç‚á ØØ8Xß!ÛTwÛèi£€¼Â €Fïû`„‡ëQÝIl£«ºGZÉNta@£ûFÁp¬ ~ÀàJÕ/_<ü‹Q0Ôñ…9@î’à÷¯_¿ý \ƒÜâfcþgGÿ ¨€øÂ €Fç†øðþµªºÎù³G ­GC€ß' ¬)€Þíhƒ` â s€­†gdHJË^»|H{/Ÿ>~ØÔÒv4êG…9@Î íj`4(0¤€`ì `ˆO>JJˉIÈŒàé±}ÓŠÑj`ŒX@|a@£óCHHÈ>ytw4FÁ(¸ñ…9@Î =ðèá_¿~Œ†Ã(£ ¾0 Ñù€¡Þ¾y),2¢ç¹ÀÅZøY"CÔ@jxCRgÎ¥n¹ˆD+²1ËV´ò«^²-¢¤¼ÆUŒV£``Äæ4Ò÷7vOLï¹>` ï`2 X8"·ß)4g}1 FÁ( ¯0 Ñý$WhE?ÁÊ¿ƒÍ×ÄÔô7 !£•Ä(äæ4º?_@LãÏÈÜ<ý‰Áæqª¦T1ge´£½d'º0 &dhÉ!n4¢By|H´ß‡=ÀUÐV£``â s€B©~þú…+­{Ti#“:AЧ}=ØÆ…0ý5ZŒ‚Q€_˜Ð0ŸÀ,XI~Á:’ƒÙ?@[áÀm¥V“1M cö׺L"ÕceS¥„¥©£À(¸ñ…9@1^¹pB[ßüêÅ“@/¥—/žãååçáã _Rë!*ŽûúðQBZ–‡gDÇ‚Œ¼Ê“‡wð(øòåÓå §GÏŽ#|ùôéþÝ[Ž®žøŠ‘OŸäš ;8@£ç =ÐãÉ!ðêùBAôs4Œ‚‘ ˆ/ÌhôþÚöh°øX°ŽÖÖ„‚h4FÁHÄæ4º?€†€FK?ÖÑ2ŽPÂ(É€øÂ €F÷ =ìŒÖ„‚ht,hŒh@|a@£óCüþõë÷¯Ñ2Ž@Â(É€øÂ €Fç†àà¿vù¬„´ìhPàgNÖÒÕ ‡Q0bñ…9@Î ÉjàÅÓÇO? \`´#_˜Ðè|ÀP­´F‹¹Q0 FŽ’è €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €H›’áâá ßQ0 FÁ(œ€‡çãý»·ˆŸ Òæ€77ïh(‚Q0 FÁ`ÄÏ óšÚúÏ“”– ßQ0 FÁ(œàôñîžþÄÏióºúF—/ž{òèÁh@‚Q0 FÁ ž¾A$© ’÷˜˜ZÑh@‚Q0 FÁ04º?`Œ‚Q0 F. Ñý£`Œ‚Q0r@î£`Œ‚‘ hô¼ Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`ä€"y>๓ƒÓ'FæƒßÍC‘ÃÞGÃ/FCc44ˆñV@¤Íœ9uLMCwpúüðþ]Ž®žƒÜÍC‘ÃÞGÃ/FCc44z Æ+Nhë›_½ªâDE„ñU§O‹ˆ)ªj ZÏïØ¸ÒÃÛ»yH8rØûhøÅÂhhŒ†/ ×oÞÉ5v8p €H›—”}úèî`ö<¦¡›‡„#‡½†_,Œ†Æhh_˜Ã@‘6ðøÁ_¿~ fŸczaºyH8rØûhøÅÂhhŒ†ñ…9ióoÞ¼Ì>Çô tópä°÷Ñð‹…ÑÐ â s8 Òö°³s°±³fŸczaºyH8rØûhøÅÂhhŒ†ñ…9ióìììÄ„‘™Ã¹Sð‹ÔBÀô1n&ÃÁtv$Ð=È\Ú¹ÎÁ>€ž±@ÓtHy ¶Ä9°Åfh ;†nQIdaDÚ|/?1æb*#¨‘H“q/Ÿ?bõ‘nÆÐ• '¨è*:RÇÀÍm˜"ÈöôÔP‰ˆù´¶…ÂŒ3ØçÀ#h~GãÒ¢H!Þ ¸@ ÀyAÀp³1Ó <ÝãR@À?äzOfÃt0²J\lj9«™È®ÅbXƒšÂ¦n°ŸHð”5øS}ÜLcÚEÅ¢–¼Ð ˜8ÉH„Õã Cˆ~5t \¥ .‡ Tô@Ñû¼ üõ$Ù¥*í¼@Œƒi7TG†#Ñê‚¡:x|„ËIø]HvQîf:;˜FqG‹4ILÈP1ÑB¸˜uÙáLÅÐÀ_¾áò;1B-/­Î B®»(5ZŒ‚‘ÔÀ¥“¤µ#©bT望á#<}¬ÎßÃéàf:;®OÒ¢b<Òÿ¬0J-­Çšüä4Ê=H¼ˆV÷`ö‚©R=´¸ê¦Û= 4 jÊ}„9\€« L o’áæu0ÁªhÀÓ$®a%Z‚*Éç¹I…˜Á1Zx €`>€¦u8…^ÀÚæ¢ºƒévOݦæ(v̆Ök—‹ KHu3Œ§'=š&iB¨µJŠx/2çç¯_xÝ+(Iî”»¹G†ÇmÈ;Rð‘äH¬îÁœ)Øq!Ú%4g jâ½I#7Sî`<‹mhä…1‰“’DHÅ„M’ÕÔ ’Šêæbâ s€¢÷}ÂhÁ„g2¼~U¼€æ WòQîHÌ´…u š.'{íycë¸<…'üÉKQ´Žú8î pÝÙâ$Õ³DªÇà𵡔„3µBƒ`ù†'Ñ-yÊÙÑ||¼x”^¾xNRZ–‡‡¦•„š–Ñ­kçÈÐøå˧ËçÏ œM7¬#ɱAë£Q7†ÆhhP× hàÓ§Ï °³£ˆ´ù66VÚou#Ï 6¶_X½@7¬#ЃC"؇›GCc44(ô.@¤í`ccce£ùÁIäYÁö3¦èãæuäzpHû0póhhŒ†…^Àˆ´ùVPeHÛõ/_<¦¤-Œé:¸y`Ivˆ Zºy44FCƒê^Àˆ´ýÀšuV†¿Á= L/ *7 G{ ¿X ÑÐ è\ €H›øýëç¯ÁZÝ†Õ ƒÊÍC‘ÃÞGÃ/FCc44z Ö1ÀæÇ§ÏO?ìé4ÈÝ<$9ì}4üba44FCƒ òº €B©¸¸¸ZpýêÅ' BŸ»zú~7 G{ ¿X ÑÐ Æ pðíÛ7x@¤õFÁ(£` u€Ü áv^Ð(£`Œâ@Ñêþ€Q0 FÁ(ƒ½Ï £`Œ‚Q0x@ Àý£`Œ‚Q0   Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €Hž¸~íÊh¨‚Q0 FÁàšZ:$© Òænߺ®ª®3Ê£`Œ‚Q08ÁÉãGŒM-‰W@$ÌÜ»sGRZNLBf4”GÁ(£`pO¿ˆí›V˜[Ú© €H›}òèîh(‚Q0 FÁ`ÄOîióÞùõëÇhøŽ‚Q0 FÁ`Äoö ÒæÞ¾y),">¾t&gNÀ*d`ª‡K¡éÂÔ‹KVñ¨Á¯«-ø=HªQÕPnÅ`NÄ(À“Tèà¤Q0 €øÍ^DÚþv66vöÑð¥'À pˆÈ¥óÇ!\=CK89g¢ •!›†+1u!‹`Ú…_V·ár¦,A£ˆq…V *@Œó°z–`ÐQ7‰Ž‚Äoö ÒæØ8€JF㛾uF€#BPW<¢‰ß¸zNCÛHÙpñ eÑDHâIQhRÄx™‹ß ‚®²‘¥ÐÌ„«'U‘&#+CSƒÇò.£ŠCæ`&®xôÄÏió<¼ü£uÀ¨îݾª¤ª $!\H’ZZs`u V-pqJêLÃáj½O¼gÑB .ŽÌ–n6P®…xĘŒ&Žé<†Zà2Šqˆ!æÙ4´_¾|b e> €FÏ ì’ÍF €TZë’q~WT@ŒÉøÅéÄX#¬mŽÑÌ;€€øÂ €FÏ E!yU<[Ñ ‰§©KPý ÷2µêuâÍÁT‰¶£Maˆ/Ìhô¼ Q0LzKC¨JçaŽÉc#ÖÀÁåR­ÒmŽaˆ/̈´ù6¶Ñ9azòæÐè1Çëé6 #¯òäá’<ˆK —JL+Ð , «ð»—íÈâXÙ$) Õ¿AL/ã7.Ô…G/þPÅe¦GK‰/1ˆŸ ÒæÀuÇh(Ó7F9Èyõü‰˜¤ ÄT‰+ÑÄ‘µcšFP¦zb<ˆK «JL+ð¸M~×â²Y+›$ȖⲫdY‚1‹,ˆ'Uಠ—hâpöh)1 %ÆOR戴ù`À::^D_€ऊ`eCr/2xÿö¦8D™+(,F¼4Yb<ÔÑ…Ç(¸ˆd7cµW¢Åc)‚a‹_‘&#+ÃTƒ& dcµW@´àg\Và±ÙXÌÈôì?@$î`ã`íåÑ|ùü‘B¬lL-øÅIRCŒ!d8«ÊŒG«IaK ›1K’GH²«^´"‚¤ô0 ¨5r@ü|@‘6¬ðGë€Q0 FÞRb´ˆØðÿÉ@Ê|@‘6ðûׯ߿~ކò(£ ððòCZý£EÄÀ‚ßàÒŸøù€"a>@IEåÚå³Ò²£¡< FÁ(@“!FÏ–ppæÄa;GâÕióšZZׯ]{òøÁh@‚Q0 FÁ ®î^$© ’ïö€h4 GÁ(£`âg €FÏ £`Œ‚‘ hô¼ Q0 FÁ(¹ €FÏ £`Œ‚‘ ˆäù€Q0 FÁ(ÃÐè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@(uÀ·oßFCdŒ‚Q0 F ¦Ñ £`Œ‚ Ôhll ˆQ0 FÁ( €FCaŒ‚Q0 F&0íé}¿éXØ–IEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig58.png0100664000212600000240000003117610322727434015563 0ustar mikeuser‰PNG  IHDRâv=| ¡ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF1ôIDATxÚb¼ráÃ(£`Œ‚A r *ˆHi뛆Å(£` 6ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁ Äg™…,‚0AD12 1ÀÎ`DÃ0 C?#š\Võëœf¡Ûˆ©…7`1—P´ælÞ&à¬…ß X ¿ÐM¡[‚³FÓêhZäi‘dIzl7 €b­©FÁ(£`0€b ‚Q0 FÁ( )ˆ4å'^±££cZ×d€-¦GÁ(£€æ€Èù¿5v` ÐÀ z¼<× D£17DÁ¶ñ@4£`Ðzkúëí©@’G-H~¾9Hòªç~º1ÈàÓÌCSüáêD )¨]@¹;žŸéDæJ›U@ON¶Ió*òŒ½{´œEÙ¾ŠAve{2WÏ«“l£N¯+’fA Ü“kA!i2‘ £/Í’vÑÓäÁ%™@Ò!v<°(ÔŠ›¹aá?k4Ñ‚Q0€@ÇÀTŒ mXÁADÔ ŸF.ˆ¢`Ê’H eZ´æÙ鎧§:¤Í*Át%X†qñ• ÷èzv@ÅHU‡™O ] ;ÆÏbÍ"£` xrá°\"H¹L°Œ€"ª˜†·¦?^Ÿdðkå¸6Q@+"ûþ*¨1(¤Søîr?!¬[$ß^ê’"úÅ@òõÅ^¸Qb†%DÖà’ºXRÃ[ÓO´²–ÕŽ·ÊYVÙµÀµ(X×B÷7Á•ìê¡mꃠִЍe}{=\šHñͽ ½ÎÍ7öÔh¸´\ß]äjº¶Ék»@­xm÷6ü¾´X»0è{w]ÜRfà̹°¹.kä×aœÝX 4 샳O­5¢Í‚' ·¦O¬Fô],Ã@ále.²¥6‘SIJðÖô¾iÈâ.Is€äîy)p·”y@rçì$ éž:ǬD´ù@öö™ £ylŒ*–Ôp.~õ„>6Í­š $¿ÜšDL=¯¡ôʵ uð{ˆê‹”ýê|%Þ{|¼Âx.£å­jä­A¥êƒ£Í 2ú¨ØU´­S";Dq¬lß ÷¸s$¨êبæRyk_\ͽµýÅ­e¤Œ6ôí6Ðç6Ak&cÿ^ã€^“P}f}\£YÐ`lÔ‰Õ *Ð"t’e¨^<¾  ÖS€È8²<Y‹mô4 yhi&²àÅdA§„YÎ ³g# º&ÍqMž D@ö®9Ipñ³!Œ³@e´gúÏô…£ÙlŒÊKj"Ëh  rVz[Ó$uŸ‘[Ó`kÙjä5…Øš† 8hº‚Ô×wWCĵÜÚˆ‡¶¦‘‡AÎ#5¨1[Ó´‡–d"—ѸÀÞù© ¦tâˆ{‘[ÓÈØšf+£€ÚÞ”†~àDóyoÀe4¤)ýúBu ¶¦Q7 "lM#ïS‚”ÑÀÖ4еg6ÑÔjû˜é@â.¦÷.•ÑÀ5$èö€ËhHSz÷ÜäÑ,4 FÊhøØ4Á’ €°,ÈãQƒö¦yÕsÄÏNƒ&è Sˆ Ó¦ôŠ{È24à€:â±i´AQ0 FýËh䀢¨5- ÿáêDø¢.hñíå>d5"úÅÀ5‘íèg§¡‹ÛÀ òð5å¬jkA™E´©U´©»¤ >‹¨dW¯lW÷P#| ˆî¨‡Ï"ª95‘ºTCÇ£ýÊŽÊËHkò0äøv_Ø\Š<èaäßkìß lPŸÝ€2îaÔz]!| .n:ñÄê|ø,¢eØdª<@=ÀSˆ@lPãoG{¤-Ø1+atqŒ fÙà @1Uhë›_½xrôè%¸Èb-·ÖÑãlF^=zi4­R|ôR¤)?ñ»8Ù,®Çv ÑÍâ£`Œ‚Q@s€u8‘ €F‹i,26=ºÂaŒ‚Q@àèèH‰v€-¦GÁ(£€¶íÄ;R@ž7= FÁ(ƒ¢5}jMÜhpŒ‚Q0,À Æ( €@kAþÿÿ[Ò0J{òÿ(£`(`±ÜÐÐààà@ÈÅôh)6"ÈÑÔ? FÁÐ*¦h´5=Úš£` êb €F[Ó£­éQ0 FÁ .¦h´5=Úš£` êb €F[Ó£­éQ0 FÁ .¦h´5=Úš£` êb €F[Ó£­iY¦©¤¤„U(Qp÷î]Ú¥NÄêßQ@w°{÷nRÃMýhôQ½˜ ÑÖôhkttt@òXyy9šP"TCÓÔ9šÏÓƒ­˜ ÑÖôhk¸¸¸@²Ù™3gà‚@6D(KëÔ9šÏø£Å4­‹i€mM¶¦ÑÁ»wï ÙLPP.dC²£Åôh1=ZLÓ³˜ ÑÖôhk ˜9s&òÐ|¸(ަ244ùì —`ž'˜‘Mƒ³­x´ØÀ‡•#»W󗀿xL+0ÿéY p—` U‚ ˆq9þxÁ%Ë€ ˆô..ñ1 ðÓ„VL–b£­iô¼­Æî@+%1§),¦1|êrÕªUX@JjÌ©N ÍyX¿»––†©(H’g±ZŠ<ÜOPA—ãw'YêÓDFÄ( XL`ÏŒRAz(/ØÑc$ÒÀ_ûÛ^Ë*¦ÏòzÓ´Ž>:~ß‹”)sLÇzgDÄ3„ÉDÆøŸƒB¼²)ªx€ÖذþVa¨W¿¾Y¾K°6!³¾ŽrS§ãbˆižKw»L_„§˜-ÑFúºixÃÚï†7”à]WÌ2…ÂbkAÞ)³•·^`x,k0ÝÄx3І*.x\Žß$ù‚Âbztäš*Å4@á/¦GËë‘Ûš&˜©ÈÈÀdÓX¼ÄAëª#·Úf‚® ¬—Ã0GZk/²„Z#Bp]øÝI’/(/¦ñGÄ( ¦˜ "‹éÑÒm$¶¦s1kl®ÞÆT´qòŠiˆ±ðq 2ƦéSLãw'I¾ ¼˜FîcaFÄ( ¦˜ â‹éá_^åTК&iÐ9[R¥˜†·£ñŒƒ£­—@ž…oâ »¼€O…aó¥Ý ©.Çt'‘¾ ÞSKv´9O:,½fÅ4@‘QLŽ ¶bz`ZÓÄL!ÂËHÎDkSRL#[æ\½{ä9+´‰8d<+ç-1 8b£­éQ0 Fr1 @”Ü…8ÜJj’Ê>x{Ràâj_ƒ‹]¢ZÖhìÑÖô(£Å4¤˜ ªÜ…8LÊk"[ÓÈ¥0¼ùŒU©-ë0 F׈mMÜh>x¬¦…S‘OgÅ¥ù°Ð ®Œ¦aYLµn%51eòl!Iê‰i##“¨…õhkz´˜†ü÷½¢Ý;ZLb €¨~³ø.¯‰iMCŠ]øh2ZË.Ì62ž5!X‡°G[Óäåj¤žE£¢ óšGd@ÆMƒ´pçh1MÝb €¨Õš%51eæH4raúï¬kBPKa|-kd5£­é[LÿG:0mS|”roïh1=lŠi€¢zkz—×˜é ³™Œk$šŒ–5¤Ø%r0Í^Z·¦Ñήd â°M´#Láâðså!'XM†‹ ®‰ÕãJJJð»Yq…šK€.Çu™1Zp©Á_ô`ªA’,ªÀO1E;~ ®Ã£‰YA„;¡ž9síØkü§¡ŽJŠi€¢Ekz¨–Ô˜e²d3ÖÖ4-kÌu#…5––8|5­[ÓXó0Á“é‘絈\ÎH¤Ìb¿KàZ°–°øµàWCF1 +bCäD"ž+©[L㺈Wõ0 (,¦ˆ¦­é!V^c¦KøšhbJ1ü-käåÄ ac*ÃlæÓ¨5MÒ=O¸®×Bv9PüJiL¬·}­†÷îq]¨Švã²\E1Zàj !€Ö· uÐ>R 7~ž'1ŽÁ?‘¿ È@ž<Äï$bÔàñò5]@.<*áƒ-£Å4u‹i€¢ukz(•Ô˜er£ä%aµ¼™LŒ p‹°šF‡Ö4ת⹬OG˜`¿á —±p—ÀÛ§ð–&¼($C |XùJÊǦ1WÈãü‰ð±&øÈ òä!E0‘ƒ5.?2‹i€¢[kz”טÉm]ñÐ.Á´mxš¦­iRó$‘•Œbú?Ñ—Xã \ ‹*2CÌD"®ÉCÚÓÀŠî"p]L=[Óƒ½¤ÆZöýǶr™Œ–5©&`¶”‘]BÓÖôh1=$Šiä‰DÌÉCšӸƦG‹iÓ4 ­éAZ^“šÈhYã2sfƒYM[ÓƒgÐ>ÞŠk>:g -˜c4*¦‰q 1‰˜“‡”ÓÈFá›ÆœŠ-¦iQLÐ@µ¦cIµìC&¯]LD:¼ }„y­ÝZÓÔB$£˜ …tä hSpÈ"¸* b´À7‰ …Õ‹ibƒ¼Ö’š2͈ÖpFÓ©§‘}1ZLÓ¢˜ oM¢òkÚÅ:LLÝ–5ÖíˆA´7™¦­iê.È#£˜&ÉX\ Úà3iÈ ˆÔ‚<×GüXšEDŽœt ïm`Nx_L£9>m‹ÇïhkêG=h]LÐ`hM–’kه٪¥E˵|o@*¦QÔÐmÝ4fKìí-ÓEnþc-°Ë2"µ@J+\(1…&IÜCÌÖÖ71¥'fø -@DŽh¸.\%õh1M‹b €Ukz€Ëk\ÍÉÿ„NÞ ¼eÙfGÛvˆ¦€Ö­é£y{Œ¬Å4@1!—ƒ Q(·QºÙÛÛ“´Šƒ‘±€œúúzâZÖ˜ö2àPÓ@±OGÁ(C РmM@ËWkÏ9ÔjYÙšÆÝmM‚Q0l[Ó4ØÆ¦²¤ÆUö¡§A‹UÒXG¢‘EŠi:MÓ£` ’b €†DkšNå5®Ö4‘‹=(iYc]×< NçòF‹éQ0 O1 @C¥5M’OÙ÷ŸÄ»W¶¬ÑLÃ\¦íd¾aÙš£``-¦hȵ¦iX^ãjMS8< 0MíéQ0 FÖb €˜(^1œVƒà\éM„’˜•$ È­i ‚ƒŽ®ô£`€BkM7 Á65Õj<­ij Oã2í?¶Ûñ(mM‚Q0rZÓÄ„£9[ÖxÂmÂBbhÈ Gû©€ÆÕmM‚Q0R@amM7ŒÌ–5žÖ4é{ñÌÖ12ÿ ô:o  Ý¼7¢Öf`îç&þêë‘{ÈGP!Ÿžˆv{Ã@¥Šá—á­i€b"ºE9[Ö(¥ÛÁƒííí…)ñ7â!!¦AJgø-\„Fø5]QQÁÈÈxïÞ½ÕŽúèëÎÎN4ñ°°0eeåáêkø9«W¯† âbïÙ³M×( . ‚­éÔ²&Ø¢D¾U–ÂqjÌû‰?Ѓ Ÿf‰v?Ȱo(Áö„7!‘Ï*ÂcáÐõ;ÜÈG_!ò`˜3ã~Æ€´¦ˆ¤bzˆ–×dÓØÍÄVX“Lâ(¦¡²h«¤±ž=äTÒl';¹Ã;˜§å ׯŸÐ*'\—Z '¿£Ù‹y¸+žëÞG‹iêÓD^1=<[ÖÄŒÏR±eMjk—^:´¦ÑÊ,ø½Ôh*ñø­; 4íž´Ã3‘+"ÍÄuä)@¾T¹%ˆõª¬÷À9 O¼ßV£šŠy-:ÜL¬±CdP +Ãt@k#c^¬ ÌÍ ¦ 4÷ãñ>I;Œ‹i€"»˜†-k2Ê>JZÖØò9JIŠÖ𯽇N­iÌ&$‘Å4®ƒ›±^ã„9iI¼™X/@–…0àWgaÞ\ޝ…%¯˜&èw\÷ BŠ*bŠi2‚oCh÷+ÂËDxñ © à7Ý`V«ÄÓø½OFÀËb wײƒþÿ«+D\UÐ¡Žƒh[å, ïaúf½Å¦ï™5{ÅiÄóîÅ÷lº¤d•±šŽ”Jgq+.e½l -•/:Óp–†,°bFd9¿óc§tžN.káA*)¡V¯˜­Y ÓŠ¥Æâ7IZœ‚|øÝÄbÁØQì?˜®ˆ*Åô0iYSRö¡Ö$©ÇÕšÆP0À­iâ‹i¬#Úðl Ïçð2‚à%¹¸ZR$Ý™ûŸô›UÉ(¦Iõ;…L^P 4ãñ¼ E›Q„·¬áâÈcô¸LÆ!Ãûh“™È“–ø˜ êÓC´eÍ@ðLòZÖ$-ö@k,C´ÕÀ ðÖ4ñƒć$yÅ%ÙE0r³eG•ARý)Xá j1…òÕ½Èqä™UÌ0Äj2žñ%’¼O¡†h1 @¸Nȉå5…­i2ZÖ¸VzüǸí”êiMÃ3'|†jÈÓÈ-M¬;8(ŸB$Õï¸gC1é6\^C";äydÓ„焼WRS¥5MRË3b %òBç‡ Hk­IEjÿOiH·AÌ©'üpâä‘íwx¨b%ÓnЃÈB mrX¡-ËÁ:ŒkÑ%ÞÇSèãb €ˆ9oz¤”×TlMÙ²F›{Ķ>˜…æ­iä&ò *19 m Y^ŽÐt  ‘`3ÿöxgŸl¿£ެ…êSˆd´=‘½¼^>d„9ÎŽf2æR¬Š‰ô>æh r‚®Å4@yÞôˆ(©©Þš&ز†ÍpA¸‘Úÿéx¦Áö ‘ Xü=eÌyh&º q­ÃÃ:¨JžuýŽÖ,Å¿òŒÂydÓȇ™ 7™‘Úh[1IZGÐûX݉¹×†Œ‘´!TL©·· ¶òšš&Ó¨5§eQL“W£Ðª5«Ð$cáæÑE˜ý_´Ý È/ä,.õ¸ötà™Ãô1¥1eI~ÇUTaõ;V‹È "K1¸í˜KSà m´¡*’Ši‚ÞÇåN`õ‰« ~Å4@‘q{Ëà)©©l2M[Ó¸ZÖ¨CÄ𶦇=€÷¬ ®ß£`0Ó„|B©…,Ù€*%>-LÆe•I‡ŒŒŒCòȵ‘ôˆk=ofÍšib]6 FÁ`Ä,°µõͯ^<©c°c\sEE{I6¹ ,FéÀ5°°nll$©AêÔF’|ýÿýHNñ«W¯ ƒ ªÀG?FÁ(„X,¯Ù°XD­élY“d-k:µ¦1[Ö°"š¼Ö4©•Ón•02BÊh†ÑÑGÁÐDakšž-kš·Ù¤5MÀÝš&ìߑܚ†GëªU«F‹éQ0TZÓÄBñøËS<í_Ê+’\NëYDüÞ¹ÅôÖQ0B@Q8èAŸf5ÝʯaF=FÁ(> €hQL7 5`)oÿÒ¢c-¦GÁ(CŠé!Q" ïòk´˜£`˜€¢u1M»F1õ[ÖŒ Ð8HDzI= FÁ(J €èPLÓºt ÖËBDúw´˜£`8€¢g1M‹–uUí Åòz´˜£`˜€¢s1MÝ’¢f³—ã˜f-¦GÁ( €ª˜¦¼6¬- £7‹‚Q0Ôo äbºa°–Ôô·}hÕ¤™?šúGÁ(ZÅ4@ lkšþ­ÎÑÖôhkzŒ‚!VLЀ·¦éß¶mM‚Q0 †R1 @£­éÑÖô(£`PÓ4$ZÓ Ã´5Í0Úš£`,¦h´5=Ô[Ó £­éQ0 †w1 @#¶5Ý0Úš£` ‰b €Okša´5=Úš£``Ó4ÚšmM‚Q0 u1 @C¥5Ý0ÚšmM‚Q02‹i€mM¬Õx£­éQ0 †\1 @£­é‘µ·e´5= FÁ+¦hPµ¦F[Ó£­éQ0 FZ1 @£­éÑÖô(£`PÓ4„ZÓ £¶Œ¶¦GÁ(Å4@¶¦G[Ó£`Œ‚A]LÐhkzd­ÆmM‚Q0äŠi€l­i†aTFR¿Œ¦þQ0 †V1 @£­éÑÖô(£`PÓ4´ZÓ £­éÑÖô(#­˜ ÑÖôhkzŒ‚Q0¨‹i€mM¶¦GÁ(ƒº˜ AØšfmM¶¦GÁ(ðb €F[Ó#koËhkzŒ‚!WLÐkM7ŒîmmM‚Q0¢Ši€mM¶¦GÁ(ƒº˜ ÑÖôhkzŒ‚Q0¨‹i€œ­i†ÑÖôhkzŒ‚ÑbRLÐhkzd­ÆmM‚Q0äŠi€Š­é†ÑÖ4%æ¦þQ0 †V1 @#°5Ý0Úš£` ¡b €F[Ó£­éQ0 FÁ .¦hж¦iWÒ¶¦GÁ(C©˜ ¡ÛšnmM¶¦GÁ( Å4@ éÖ4y¥ÞHhM3Œ¶¦GÁ(6Å4@ õÖ4uKj†ÑÖô(£`°ÓÄÄ€ ƒ ‘ ˆ/¿ð˜@ÇÓÚ êì(£` @ æbšìe´˜-¦GÁ(> €†e1¿e=ZL‚Q0 † áZLãñÔh1= FÁ(J €†}1Ù²Å4†}FÁ(ƒÐH(¦ÑÊë/¦F‹éQ0 Fñ €y1Mç2e´˜£` :@£Åôh1= FÁ(Ô €F‹éÑbzŒ‚Q0¨@Ó£Åô(£`P€-¦G‹éQ0 FÁ 4ø‹iz+ #`Ñôh1= FÁ4ZLÓ¹)=ZL‚Q0 H4ZLÓ£`Œ‚A h´˜-¦GÁ(ƒÐh1=ZL‚Q0 5 !QLÓ§d-¦GÁ(ƒÐh1=‹i Í£` %@£Å4‹é†ÑbzŒ‚Q@ Ñbz´˜£` j@£Åôh1= FÁ(Ô €†J1M‡Âe´˜£` F@£Åô0+¦F‹éQ0 † Ñbš~-¦GÁ(T4ZLÓ³)=ZL‚Q0 H4ZLÓ£`Œ‚A hÓ4-_èéÈÑbzŒ‚Q@ ÑbšþÅ4Ãh1= FÁ( Ðh1= Å4Lå€ ªŒ‚Q0 † Ñbz Ši²­-¦GÁ(Y €F‹é/¦ImYÓ£`Œ,@C«˜¦]3H\8ZL‚Q0 Ð@Óƒª˜&¦e=ZL‚Q0²@Óƒ­˜&è¤ÑbzŒ‚‘h´˜´Å4®–õh1= FÁÈ4ZLS×ïtpå¾£` %@C®˜¦E)Ó0DÖ¢0ŒÓ£`Œ@@£Å4=‹iZ‘£Åô(ÃÐh1Mçbš˜Fñh1= FÁ(@€-¦é_L¸GFÁ(C Ðh1=€Å4Õ[Ö£Åô(ÃÐP,¦©^Ð `1M]Ó£` C@£Å4ÝŠibô6ÐÅ#£`Œ‚¡h´˜<Å4å¾-¦GÁ(† €F‹éAXL“ݲ-¦GÁ(† €F‹éÁYL“çÓÑbzŒ‚ahˆÓÔ-ks1M|˺a´˜£`X€-¦1Ý@ñ2’ÑbzŒ‚! ˆáÊ…ÿÿÿ’¨ ·!AR±l¥ƒ{híwbõþ£` ,–­˜e4uKRz–Ôd’£©Œ‚¡ULf1=ZRç2z´5= FÁ+¦k1=„Êë†AV^¶¦GÁ(T.¦ˆ‰^sk ƒ~Yå~g"9 FÁ(J €˜ˆ(\Fd1M†ß‡J…G0¢dAd½ÄN¡™­(0h6 † Z¶.‡M«pdÓÂØçB.nà\d)Jš!øÍ¤ÄF4ïкh†ÛEGÁHÄDbi5b;ïÄø}ø´¦ÑŠÈÑgŒ‚ÄD–®†<Ì:âŠiüÝy̱òzýh£¸Æ[`HÁßÎÅï`< p9 —cÈð‘Î#¥ÃH Ãå÷‘RLcöñ!Ím´r ÇŸ`a„i&š±hRX±Êbu0á×…)ˆË×ø]HŒóFÁÈÄD2«a¤.ZéÅ4þ±‚ÃÍx†S–thzi1,CÌhñö¯r´)= Ð@1Q©´b²%N•ü>T†‰èW·Ñ¨¬ö-M䕳£%Ô(€b¢v™5´Jœ:®íªÅ4‘;4e4*L‘—ꤦO«vÈ-4ôÄDí2‹þ-kj•ž ´,¯‡R1 /á%Á!¬ÊhQ˜¢ 1“§¿°* ¨‹ /ãæÆêÚQ0b@1ѬÌrÅ4M[ÖC¬5¶iYuÐ2ûø‰·‘Hë:˜˜1⽉éfü*±KŒ§FÁÈÄDË2‹>-kZ”žToY7ŒìUŒ£`Œò@s-À oYÓÔa£Åô(£`€@‘t{ËàlYÓºôd ê\åh1= FÁ( ©—l Ζ5}3<ÊèÑbzŒ‚!ˆì»UËšn(yµÔh1= FÁ( %WÖž–5ý0ZL‚Q0 èˆ*7‹xËz@ê âk©ÑbzŒ‚Q@> &*•&Û²Øæüh1= FÁ( ! &j—&Õ²ðQ—†!RFÓ£` 1@hWÖ2 šûdécÃ$Go£`h]Y @ÈÅ4à +©hlÃÈ$GSÿ(C«˜ š¶¦éÙ²mM¶¦GÁ(žÅ4@Ѻ5MÏ–õh=Úš£`ÓD·Ö4}ZÖ£%õhkzŒ‚áVL=[Ó´nY–Ñ£­éQ0 †a1 @Òš¦]Ëz´¤mM‚Q0ÜŠi€¨Ö4-ZÖ£eôhkzŒ‚aXLЀ·¦©Û²-©G[Ó£` ·b €Ckšº-ëÑ2z´5= FÁ°*¦hPµ¦é_^¶¦GÁ(ƒ½˜ ÁÖš¦gI=Úš£` b €mkšÖå5ÃhkzŒ‚Q0$Ši€Ì­éÑ’z´5= FÁh1í@C¢5M‹òz´5= FÁ(Å4@ •ÖôhI=Úš£`„Ó4äZÓô9d´5= FÁ(,Å4@ ÅÖôhI=Úš£`Ó4¤[Ó£§yŒ¶¦GÁ(þÅ4@1YÚúæW/ž\³aÃ(£`Œ‚ÁB<€Åòˆ.T__?.£`Œ‚Q0H°õ a ¦Ð(£`Œ‚Áˆi4FÁ(£`0€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€-¦GÁ(£`P€b ‚Q0t¶¾ù0ö££ã†w ÂNº¡ñ;eB1*h´˜C ×#Ãà ÿÿÿ$WBÃ>~‰4ZL‚Q0Z êBjÐèØô(£` j@£Åô(CèX r qÉÖhXŒ‚!†qÒ…Ü®ÿÿÿ‡øXÆáŸp*5 ÐpßœBÞñKp ¢ €FǦGÁ(Àž=àì’4’¤žx@aÖ’š†«ÜÇ*N­J‚þ5 ÙQ9€qh´˜£;€ßÚØØHRn¤Qò‚M;.ÓhZ’Ò¹O)Iá ûHÊAÒŸ Ñ±éQ0 p.<æ@H& x‡ÁˆÇ€øR’Br‘=„@Ó£`´ŒÞA|î*† <"ø‹~jZPË@8 7™f)¦È€û‚T©wÑb  ³¸âšÖ €F=FÁhíµë ì CÈÝdxé>#ñÈj<Æ`;^D¢ˆ@‘ÀĪlˆö 0c e¸bW\ÓÐh1= FËhì…)òØ4Z{ Þ›²áÚ!FE y˜ê£–T›Æ/Ÿc„ËR¥„$ëU0ãÝð1.¬1‹©‹>® ÑbzŒ\i"ì 3ÀÆ7ÑÚS¸Ô3H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀräÀ:cǦó.^8;€îÑ70¦Qp TD ‰¬:Ìél’@‘3pôÈ5 ]zzrÿîíÞþè€!äÈuÆ )4ç:u\M]gÝsäà^gWOZ×@EÄȪÃÌñhÎ&Ê=bÄœtùâ9a16vv:ûóòù3ŽàÜ2PBŽXg ò˜‚;ïÆµ«Â¢bÆæ—Ï×5´äž §mìi\C"«3ÇÃM$€œ¹G €È™øõó'Ñߟpç ”†#Öƒ<¦wüÐÎ/Ÿ? IëਈYu˜9žìÙ\€"s>€‡žÞûòéšóèì€!äÈuÆ )LçYÚ¹CÚãt~¤ Ep TD ‰¬:Ìél’@ ¥ýCbû qäÀ:c%¤©Ðì¥]p TD éFCÔñd; €†Òþ€!±}a8r`1„|\~@ú´®Šˆ!½Óhˆ:žlgÐPÚ0$¶/ G¬3†PB ýÚ×@EÄÞi4DO¶³h(4$Ž3$ŽXg ¡„4ú´ ®Šˆ!}òØu<ÙÎ *Ì™9œ;u€ŠžÁe ~çu!s‰q%.'Õ‘hÎ#Ò…dâæ‚Áˆ¬—ˆ)ZGAç!WÀrƒ¼"ž`?€¼4CL‚ÇeòƒGÑDì­ Ja•ES@0 ™€©—ŠhÄ|8ƒ’¼C•r†ê‰™ÂÒh˜Ì`†,íšlGÒÓ…¸œ?- Fü\2bj@¢ Ï|ÝúDÎàŠ"<“ÑÊDäR‘¥6.{1Ëb’JgRy&Ó´œ¡–'PoE+ƒ ðÿÿzƒƒã°³©k{ ­KëR¢“ïpïÉ@7™Üš£ þÊàÙ0`({`ìD_ƒ|tÝ>×ÓåTR錮WTƒHu×e4(„ZtNôµJ ?|©]´*QýÜLÚeêÙ¼Z"ØâC‹•  ù>ô ÝuìzÉ3aïYž)næ Œõ%€¨<€«×C|oW±Bõq:L‹Ê‘¸œ+¹Ó”¦Û˜&倿º%²ARb#c>M2“¼ —bªÏÐ!ËP¬m/‘Å:ñL5ÈuÖ±,*fÚÃUVš˜IJÕ$€¢òþ\å&Uz@´^·;PŽ$Æ^ä¦Á`«Áf;I Ïþ´)bª’†°öÈK3ø[…´‹bôqÙ o•“7PCŒüjÐú4X+J*eACȘ.Åhtý‰6‰¤"ž â‘¼?€`ùHçùÌÁ"¢çð¤Ì>"IódÏÍR2À€mòÏtôh9C^ª& Ðèþú9OõŽk؇ì–Â߀¿×Lÿý˜E?‘óDöq%<&ÓtA1 sp†¦NÂì àY´å ñ©š$@L( 3A4€A0à ‘#i±6†na…µè!Év’:@T¬ëAéí%/Í æ,ƒËÞAÒÒå .g‰5JÀÎÆFQ±¤ 5MãrÖ±r\+‹hêH ŠTg“á ‚Áˆ©Ï& "cŠõÁhBvú·P˜fh—á7©-tÊíÅZ[/H‹@#¦œ¡]ƒ†ÈTM$BÖ€w+HaþÿÕÝ"lΙU§0ÐÈa4×§~$³œÑI_ö‡0—QsæT ôz“âá”æv•äÇ(†.e*Jt.Fïô™µ¡iéŸ2¡ˆêcæ: ú߸¢¸kOØ9wKЕk` F-S»×‚½½Vˆ`>Cui „r‡ A ׯ^äåå'éHUÊÛz_>}º÷–­£yŽ$Ò…t«Ak;Iλsë/?ï@:ïËg {nZX;P=¸*"yÀß¹¡Ðñµ/ÙÙD‚oß¾1Àî Ñù€ÁëHJú•Vƒ<¦†Á|À ˆ!:¤>¤Oö|@Þ0xIjoqð„ÕèýÄ .Ñ!¸FïÀ?(4tË*: €è1@­þM×íNG’íªÑûˆtÞèý#-œÞ Ûñ2D¹³htÀðtäèýD:oôþ€›U‡™ãÉv6@Þ0<9z‘ν?`ÄfÕaæx² @(ë‚DE„ j8zäÃ(Cððð«ªksñð‰Kʾ|þ˜þ$Ð ß¾|:~d/'çhtŒjk‚j^¿yË[@¤Íœ9uLMCw4”GÁ0Ïž<VÜ<|_>d-Ó¤7 £yjPìØºÑÑÕ“xõDÂ|Àõ«¥¤å~ýú1Ê£`1±§ï¸34´õFóÔ( "Ð54Ù¿{;ñÛˆ´ù€_?Ñh(‚Q0 FÁ`ÄOÉû箿Q0 FÁ( àmà ¤l ¡tÀ(£`Œbñ…9@ ¥ý£`Œ‚Q0 ˆÄæ4”öŒ‚Q0 FÁ( ªd'º0 ¡t^Ð(£`Œbñ…9@ÎŒ‚Q0 FÁpÄæ4:0 èÜ»M†.%U*š‚¢C"¸>¼=Co @|a@£ó£€Ny»aÏž<¢khB Àí›W†J ‰Š‰ªÐC_˜Ðè|À( 9xþô±”´œ¨„4z=üÃwl\)"&N¡ À‚ Rhë‰@ccã8ö(°$¡7šŒ‡ ¾0 Ñù€Q@ .)ûôÑÝ4RÈ+ªËÖ¡h†ÆÖÀj`0„Þ(r€øÂ €FçF=Àãw(<‡rÀkvÖ¡ÓÙý ËÆƒ$ôFÁÄæ4:0 èÞ¼y)""Ž)nçâwhÏ&ü"øM ¨£`ruV¿ã_¬¡G|˜‚¡ ˆ/Ìht>`а³s°±£¾¶î rIS¿ ÄhDÜ<|C¥øöåA¿Ëî‡w’þ˜‰7j Gta@£óÄäëÝ!€vׇbÚE¶u@£piD³®  êv\4\îu;Á"ž Jê°Ÿ?/—Ed®Ÿ?hz¤š¬5Ñb™v¡7 èˆ/Ìht>€€–ghQVÒ¡‚Áåx¸-¬æáåG›ŒÕ1°€=`q8.ðëV0MÀe@»°…¼ €$q¬ÕþÚ‚ÔÐC޵+NàÒˆ?ôÐôb5ŠòЈ/Ìht>€ú-wä2.ŽU¼«vH Žf„ !‰·Í(4»ðØN¼K| ÂS”c÷¸Äé€!€§(£FÁÀâ s€ ~›ÎEÇ*HFé‰G;&R”i>š2‚>"»ë€Yj“]ŽÓºÀ3†CÉØÎà©05ŽVÃ_˜Ðè|™ p䂘Ôö>.»¨ef§ÈZ‡å×hÒØúc4† ¾0 Ñùþù¬ƒ'Ç‚¨UgPâ"+âOŸg´ð¢Qû}´+0 ñ…9@ÎP­‹€Y¤2à1§CùNFe€µpÇìPèx`áB­²›ŠF @ÅR{´€øÂ €˜9ìllxÐh°S !7¿ÂkŒ†ÿ( µ0 ”:àç¯_xÐh°’Z¶SΞ²˜Œº<Çc:dC£åÕp4H‡ ¾0 ÑùòÛÎÈc;ÈCê¸Ø˜‚ ¤­¡ëÚPÌÕŸ˜³ ãZ¸l'µ'4ŒG„àûÐVŽÒnÑè(Ð(ÀÄæ4:@BáK¤,.6ñ7ñvá$fî—þåžäùˆØEéÞºvNMË$‡sá"p¸LÀe¦ÕThU½BY„Zå>~¿ã׈Ç4½XÝ<¥æamOÝ•‘SFÇ·^±š€G#¦ Ã,ô ¾&¨« ˜qÅ6Ú.š€øÂ €FçF=+¨Š¥4yùâ1~xã— xŒ"¦¥á½Q0äñ…9@ÎŒšIiÙk—ÏI2ôž>~ØÔÒÈ Ü„¡U @*€Áz£`hâ s€tª€íÙ'ª^Qnr50øC R ªÐC_˜Ðè|À( _5@^S”Š&@ªäâu4ôFÁ°Äæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 èÜ»M†.%U*š‚¢C"¸>¼=Co @|a@£ó£€N€š†.Ïž<¢khB Àí›W†J Á×/ ’ÐC_˜Ðè|À( 9xþô±”´œ¨„4z=üÃwl\)"&N¡ À‚ Rhë‰@ccã€ï ¡7šŒ‡ ¾0 Ñù€Q@ .)û”Ð!—45RÈ+ª² CÐ ­!ÛÙ<ôFÁÄæ4:0 è?¸óë×5ܸfg:‰~lÜ ½Q0„ñ…9@ÎŒz€7o^Šˆ`ÙkçâwhÏ&ü"øM ¨£2cÁë¬~'Æ¿XCø0C_˜Ðè|À( K«„óVB [wÔÛ 1Eð›@ŒFdÀÍÃ7Tê€o_>ô;°ì>qx'á©‘x£FÁÄæ4:@e€ëvuRo]Çc>2—*fRÝ‘ØÊ v\4\î5u;Á"ž>—ßÂo§P uCT€µ&Z\^<œñ…9@ÎÐ P«@3‡º¥6* àáåG›ŒÕ1°€=`q8._>Äe.£ÐÜjUTQCaè!'€+NàÒˆ?ôÐôb5Šº¡7 è×ó&º0 Ñùz÷ x›¹ØEnã“Z“a,¦b’ Q€¬žx×"—ø*EdOŒê`à©ʨQ0°€øÂ €Fç²>À,vImàãÒBÐX¬ŠIr$Ù5f©Mv9NÏ ”¯ˆÞ¡âÊnL£ÕÀðÄæ4:0€ì!\ms<Æ’Z‘¯Ù1C¥!? FÄâ s€\ýâËk<•y&¹g´ð¢Qû}´+0 ñ…9@Î Õþ|p†˜ ë΀`áB­²›ŠF @ÅR{´€øÂ €˜9þüŃFƒuHtðTþð£á? H-Ì¥`aaƃFƒuð÷ä) ¯s@v—³Ð!»-¿¨€£A:<ñ…9@ÎУø&rb–àJÌiXdeXgŒÑq±‰ô.Hím ³!êîÀŠp´6€øÂ €Fç¨ p…È…2žBœlóñ×DZG¶# ºœ˜&Qå­kçÔ´Œ@R`q8.׈Ë\FaZMÝ(Æ,à÷;~xL@Ó‹Õ¨ÑÍÃC_˜Ðèþ€Q@Z‡¼Ù66V;]áâ÷ï\STÑBküEÐL£P­ò-bB‡Fœ¡ íz#_˜Ðèþ€Q@Z/‡¼­aÀF(æamOÝ•‘SFÇ·^±š€G#¦ C¹Àî÷'„®Àz˜qÅ6:><4ñ…9@Î ŸÒy0[Ä j‡bI]/_<Æ/oœâ2QÄ´”‡Àêw\þ%zÃ|˜…ÞÈÄæ4:0 èSб³±’3²ü6A¹ àùÿú9$Bì7Rf$¡7 † ¾0 Ñù€Q@Ÿíç/²z™ð"›B>¼­ª®sþìQCcë¡hðû„<ôFÁÄæ4:0 h$¥e¯]> $ÉÐ{úøaSK[ ƒr†V5©Oè‚¡ˆ/Ìht>`Щ¶gŸ€„’— Ydq2JIR—‘'ˆË‘dˆ ØØØÑöˆÁ“‡wŠ  ¢)ÀÏ<è0yüÎà ŸQ0 ÈÄæ4:0 èÀuÇHWÏŸ ¢Ÿ£édP _˜Ðèþ€”œÕCçs~¨X°Ž¶0Ñh Œjâ s€@I NÞPÌ (à8XGË8BA4£€Z€øÂ €FçF=°0Z ¢Ñ± Q@5@|a@£ó£€à÷¯_¿–q‚h4Fµñ…9@ÎŒš>þk—ÏJHËŽpæÄa-]ýÑpTÄæ4:0 èT ¼xúøÉã£A ŒV£€Š€øÂ €FçFýª-ÑbnŒzâ s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€t¯_½ <@TL|4Fµñ…9@ÎŒ:Uªê:£á€œ=uDYU}4FUñ…9@ÎŒšƒO>JJˉIÈŒàé±}ÓŠÑj`P_˜Ðè|À( }òèîh8Œ‚Q@@|a@£ó£€àÑÃ;¿~ý ‡Q0 èˆ/Ìht>`м}óRXdDÏyšX8œ9q`4%Œúâ s€ôi•p°±Ü³£õ -!ÕÀ¥óÇGÃ(  ¾0 ‘5€yõ9Ù»ã2™*¢]^Ô½(†Î÷‘±q Ü'¬¡mtãê9d˜"h€ ‚ºÈ3r´¹27Œ‚‘ˆ/Ìht>€Ê€*¥*ÜjUQëBZ^~´»1¯N$x™"y·-ÂuÝ»}•þéAIU³JÀê’/_>fŸQ@½ž7±…9@Î`o}#‘ÅÑ‘;¸ÔÀI*Žqõcˆ± .AîêAZ×UÈå&Zq ”Â%‚© "!"ÈzኑMÃc/µ*\¾£€º€øÂ €Fç°¯¸Æv°ŠcºÁTC¼F Ýßñh‘ÄÔ­ÐÊebŠK¬ºÐÊ}¬Š‘«2ì%£­Fñ…9@¸ý¤»Ä”nÈmp’ôâÒˆ_=Öâ›ìR˜HÒa„€Ùœ§°$…k§z‰€pk—F£7d;y€*Mx’}ø(!-ËÃ3¢SŽŒ¼Ê“‡wð(øòåÓå §GÏŽ‚/Ÿ>Ý¿{ËÑÕ_–üôH®Ù°ãÀ4:04 ý¡ØØ€íŽ‘ﯞ?!D?GsÇ(  ¾0 Ñûè ˆŸÁ_…0Ðñœ*Ö¬£'‘ ¢Ñ@ÔÄæ4:00Õuõþ*Ø `-ãÑh Œjâ s€Ý0 耀Ñ:€PŽªâ s€ô¿ýúýk´Œ#D£0 ¨ˆ/Ìht>`Ðð ð_»|VBZv4(ð€3'kéê†Ã(  ¾0 Ñù€Q@§jàÅÓÇO? \`´TÄæ4:0 èW h Œs£`Ð_˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À( xpï6º”T©hЉàúðþõ ½Q0Tñ…9@ÎŒ:Ujºdh<{òˆ®¡ UL€T·o^*&*&>¨Bo !@|a@£ó£€æàùÓÇRÒr¢Òdèõðß±q¥ˆ˜8…& 2H ­k<$ãüÙ£Àj`„Þh2Z€øÂ €FçF=€¸¤ìÓGwÐH ¯¨:„Žf34¶Vƒ!ôFÁÄæ4:0 è?¸óë×5a¨a ?Ah„Þ(B€øÂ €FçF=À›7/EDÄ1Åí\üíÙ„_¿ 5bÔCæøRx€ÕïÄøkèæ£`èâ s€ôììlìè…¯…­;¨\FÇÁo1‘7ßP©¾}ùDÐïÀ²ûÄád„?¦FâC#Ç]˜аÀ¼²‘Z—8Rr0ÖäÉsåÞAs -.ˆG*ƒØqÐpq¸{pÔì‹x‚ (©Ã~þüA¼8\‘¹~þ iè‘j°ÖD‹eÚ…Þ( ? ¾0 ÑùzƒArçž:’.äáåG›ŒÕ1°€=`q8—õF­/Ÿ?â2—Qhn%IâX«üµ©¡‡kW.œÀ¥è¡éÅjå¡7 _˜ÐÀu£/AqÌrW;ùâ_"[ÖÄ» "‚f1.¡¤ËBÐ"âùħPÑ(”tÖGÄëÅê_ÌN…^.Ô*»©hÔ0T,µG+€aˆ/̈ ™ÃÎÆ† ûP£õ Ç`óìð+¼FÁhøR s€B©~þú…¨ÒWIê Ò€Ô+Ô*ß :ž<‹0 ²‹¡Ñò‹ê8¤Ã_˜ÐHÜ€6¯ /æÐ¦IIbS>HBŒ«°­…/"É%˜“ÛX§OÐŒÅe©UÝ0‚ï@[9J»uD££@£_˜аÀ,’ˆ™˜Å¥†61 ð”ĸŠ$“)±ŽÇ`6v`¥zëÚ95-#XÎ…‹À5â2—Q˜VS¡UEô Qdj•ûøýŽ_#Ðôb5jtóðÄæ4z^Ð( `cã`űÓ.~ÿÎ5E-d°Æ_MÀ4 Õê_#!ôphÄzÀÐ!¡72ñ…9@Þ0 èSбaÖöäÑ]9edqLxë« x4bš0ÌBâk‚±š€©—Ql£í¡ ˆ/Ìhô¼ Q@À j‡b)M^¾xŒ_Þ8Åe£ˆi)ÝÐÃå_‚¡G0̇YèL@|a@£÷Œú”bìl¬äŒ,ÿ†EPnøDþß¿~‰ûÔŽ$¡7 † ¾0 Ñù€Q@Ÿíç/²R¼È¦Ð„ï_«ªëœ?{ÔÐØz¨ü>á½Q0äñ…9@ÎŒšIiÙk—ÏI2ôž>~ØÔÒÈ Ü„¡U @*€Áz£`hâ s€tª€íÙ'ª^Qnr50øC R ªÐC_˜Ðè|À( _5@^S”Š&@ªäâu4ôFÁ°Äæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 è^¿z9£`ÀÁP\@ ¾0 Ñù€Q@§ @U]g4FÁ€ƒ³§Ž(«ª{o_˜Ðè|À( 9øôᣤ´œ˜„ÌhPŒ‚ž~Û7­öÕñ…9@ÎŒz Y‚‡\Ž‚Q0 ¨ˆ/Ìht>`Ѓ‚øÂ €†Û|æåæ¤^wN¼ÉÄëB»½Ès…Þ(—°qû¦èu€†¶Ñ«çð‹`bÔàÑB†v\f"s‰ô\œZÎXcXŒðà%¾0 Ñù:ªÔCC×%<¼ülØ/zd'(BŒ.<@IUûÞí«p.2›l€f&V\Ž„ˆSÅ£9ü1«¬üå˧‘Ñó&¶0Àžµ¬‚°ÿÿëƒΜÔѺ5–Ž"8kÀU0‡B‹ko¡|.ù6+å¾* ÁEGÉËý„V&UrÑØ0Ê¿zãà([=„ lJ³BêÔ*9xQûVFJ8ñ")@ñRCV?˜/4‚æÐÊ)8—qä—zòjHrZiK—`e£¹„ê} <… .•Xµ`VXKU‚%/©Å Vó *£b°ŒV#<ˆˆ/ÌhîÀ:äMáØ®1}âBÓNë꺄F®¥bó*YŠ…©õ1ºFK|ZÇÚpÄæ4 çðŒÛà)ÇIª9ˆQŒÖ¬¦Q1Jj…Ç0˜f&0Ç‚ˆlÜamÝcÕBL[ž¤–ø`nóŽöF+ 2 s€Yó¸Š?\Ã>ƒ¿<.ÆriNaV'~Ža´Í;Ø’ žj`t>€  ÑýT[<: È.pé3ÐAÞø>©µAIU0:Dv50’ÃøÂ €˜P*fˆ4 õ ãBC«³OÒD1†°7xV4Y7à™!{ d¤U£y…9@ ýhóºÈkZ>’Ħ|4†W1`[3 _œCk—¬uÈ[J|³Ž˜ÌŒG Ö©WÌ…›h‚$UĘßRÙ£eÁðá¡A|a@ŒW.œÐÖ7¿zñ$ÃÇÇ‹Géå‹çxyùyøøFSÛ( |úðQBZ–‡g4åà2ò*OÞ :„ä—/Ÿ._8=ŒÏŽþòéÓý»·]=ñeÉOŸäš ;8@£ó£€€ Ø.á ¼A4>T¯ž?!Î?GB8_˜Ðèý£€NuëèI$xÁhøÐ-)Žo_˜ÐèyA£€N\V¶ÑsCq÷ß? „Ñþñ…9@Þ0 èÔÈ­FÁàHŠ#b,ˆøÂ €FçF=Àï_¿~ÿú9£`0$Å‘àMâ s€4|ü×.Ÿ•– ŠQ0àà̉ÃZºúÃÞ›Äæ4:0 èT ¼xúøÉã£A1 Œ„ €¤Â €FçFýª-ýÑp£€€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÀëW/Gl *&>£€x@|a@£ó£€N€ªºÎh8 Ξ:2ŒºTÄæ4:0 h>}ø()-'&!3dO¿ˆí›VŒV£€H@|a@£ó£€@BBöÉ£»£á0 F}ñ…9@ÎŒz€Gïüúõc4FÁ(  ¾0 Ñù€Q@ðöÍKa‘ÑYMœÀÄÂá̉£á0 ¨ˆ/Ìht>`а³q°±žèZBªKç†Æ( RŽ#¶0 Ñù*<—¿Sñ¦u‚n Ð.d_0q§€ÊE'‹Y+`í"`¶¸!!RA<= dA— FLóÉîè ÙHj…\ÎÂËA´‚˜ºÁÂx0 njUÔrç(Äæ4:@}€«[gãé:àbãÒa£•ÂDšO¤/°š†f#Ù=´Ê€˜†<µŠ]2̤bÑŒ¿"­F…€øÂ €FçèWàÄ”"¦`%µðÅ¥Þ? ¤@§Zê¡5ÉáÚq‰cv5°Ž NÏŽ‚Q@ ¾0 Ñù€hs°*£\r×-ŠB¬cA¤ö!ˆéFà2Í ô©Ú2ZIŒJñ…9@Î X@L K¤2Êû˜zqMEЮELÌd,ÊGüZÇø+›Ñ `Pˆ/Ìht>€¶å;y HRF78 ¼X$i¥0®j`´”â s€bBæüüõ  V¬Mf´æ9©…)…#BÄh§îHuM£Ûø;žúÙ tžŒÅ´k´TÄæ4:@åj€È‰\ä1w\¥*.e¸æoá+5)tš.<¦‘½6k[˜˜I]<íh‚Úñ´»Éž“ no`´ÔÄæÄxå m}ó«O9||¼x”^¾xŽ——Ÿ‡o4|GIàÓ‡Ò²<<£)'‘Wyòð_¾|º|áôèÙÑ£€ øòéÓý»·]=ñeÉOŸäš ;8@£ó£€€ ˜¸8FÃxõü ¡ü9J£€x@|a@£ûFêÖÑe8£€x@|a@£ó£€>Eëh)FYŽÂ( _˜Ðèþ€Q@ìŒÖ”àèXÐ( _˜Ðè|À( øýë×ï_£¥E8£€x@|a@£ó£€æ€O€ÿÚå³Ò²£AA68sâ°–®þh8Œ"ñ…9@ÎŒ:U/ž>~òøÁhPF+€Q@ ¾0 Ñù€Q@¿j@K`´ £€€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€ô‚¢XÅ?¼=8£`P_˜Ðè|À( wpûæ\²¢bâ£A4 F倸 €Fç†*Àu<~-pedßOy ­kŒU–ãüÙ£ÈÕš‰÷)åĪ÷P×y£`(Ù‰.Ìht>`¨Vh%©eÊ@UòŠªx®Ä24¶F«[A9Zp‚!ˆ/Ìht>`8T² .aÀ­pA8‰¬­y‹ÖQ@3M=½ ü S ²óp¹«Sqù—bòzføƒ-.(·zŒ4@|a@£óÿž€°ÑÊ}\5 ®ñ"´ Mø’ \°S^ 9 ¹0%ÞýxüEaŌߘuðÀŽÑ‚áˆ/Ìht>`xª”# !Ãn>\uÀ·/Ÿð7®Ñ,E¶«KÈä–;~÷cÅ £Ã_˜Ðè|À( ¿|¤CE +ÈhæÓÔ=tÒQ0ñ…9@ÎŒòËÁ!:p1Ý<:4 ¨ ˆ/Ìht>`Œ‚Q0 † ¾0 &” … ÖÁÓfÄÍÀœ“¤‘íšüûׯ߿~â@¿èïT¬jhz´ÒQ0 °´î‰.Ìht>`˜Thø—u¢Í¦âZ+IÐj’F0>¼­ª®sþìQCck\jÐ60à&)”g’±úM1©å2©Áˆ£ó£€ê€øÂ €¯\8¡­o~õâI ‡ÒËÏñòòóðñ†ï ƒyL²S k5€YŒ‚Q0 H_>}º÷–£«'5Ÿ>}’k6ì8pà@ÎŒºxoSj´£€Z€øÂ €F÷Œ‚¨F‹ûQ0 h ˆ/Ìht>`‚Ñ1åQ0 F8 ¾0 Ñý£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜ióR2\<ü£á; FÁ(ƒðð|¼÷ñóDÚ|°àææ åQ0 FÁ(Ì€øù€"a>@S[ÿâÙc’Ò²£á; FÁ(ƒœ>~ØÕÓŸøù€"m>@WßèòÅsO= èQ0 FÁ(„ÀÓ7ˆ$õDòþS  èQ0 FÁ( €F÷Œ‚Q0 FÁÈ4º?`Œ‚Q0 F. Ñý£`Œ‚Q0r@ž4 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@$Ï\8wrpúÄÀÈ|ð»yH8rØûhøÅÂhhŒ†1^À ˆ´ù€3§Ž©ièNŸÞ¿ËÑÕs»yH8rØûhøÅÂhhŒ†A/àÄxå m}ó«AUœ¨ˆ0¾ àô a1EU­AëùWzxûr7 G{ ¿X ÑÐÀã4ðúÍ[ ¹fÃŽióâ’²OÝÌžÇô tópä°÷Ñð‹…ÑÐ â s8 Òæ?¸óë×ÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m>àÍ›—""âƒÙç˜^„nŽö>~±0£¡A|aDÚþvv6vöÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m>€˜€02s8wê~‚ZȘ^ ÆÍd8˜ÎŽº™K;·Ñ9ØÐSC"hš)ÁÁ–8¶Á dÇÐ-*‰,Ìá €H›àáågcã Æ\Le5i2.ðåóG¬^ ÒÍÀºráÝCEGêX ¹ Sd ÙÁ>€ž*±1ŸÖ¶P˜q[âØbÍïh\Z)Ä{ 8/.p6fZ§{\ ø‡\/àÉl˜FV‰‹M-Gb5ÙµxB kPSÂÔ vâ ž²Š¢›éà`L»¨XÔ’'‰ z\aÁ¯†Î¡«TÁå0ℊ^ zŸ„¿ž$»T¥ˆq0í†êÈp$ZÝ@0Tp9 ¿ ÉŽ ÊÝLgÓ(îh‘&‰ *&Z³î!;œ©øË7\~'&@¨å€¢ÕyAÈuå¡F‹Q0’º¸Tb’´v$UBŒê]u2|„§/‚Õyøs8ÜLgÃÕãIZTŒGúŸFI¢¥õXÓ€ŸœF¹‰÷@ÑêþÌ^0Uª‚€W PÝÁt»§¦AM¹0‡ puiáM2Ü<°&X xšÄ5ŒC£DKP%Ùá< 7©38F /ÐÌд§Ð XÛ\Tw0Ýîi ÛÔåÁŽÙPÀZàbír‘çMJÜLk#mcšO‹± ª¤IüsÔM´¸¦¨’þê&¬1Këä @Ãíþ€!á…áwO>ÂS~Ñga ©n¦³ƒñô¤GÓ$­SCc VIï€bBæüüõ ¢Û`%Ér7#÷È𸠹qGê>’‰Õ=˜3E;.D»¤‚æl‚AM¼7iäfÊŒg± í⑼Р&qR’©˜°I²šZ¡AR±@Ý\L|a@ô¾O-˜ðL¦‘×¢ŠÐ@áJ>ʉ™¶°.AC“"Ãåd¯"ol—§ð„?y)ŠÖ±@ãÏ®û";ãàOœ¤z–Hõx¾6”’p¦Vh,ßð¤"º%o€B9;šÒËÏIJËòððÑ´’PÓ2ºuí¿|ùtùü´ƒ³éãæu$Ù!6h}4êæÑÐ êz |úô™vv4@‘6ÀÆÆÁJû­näYÁÆö «èãæuäzpHû0póhhŒ†…^Àˆ´ýlll¬l4?8‰<+ØÀ~Æô}Ü<°Ž@‰`n ÑРР¸@‘6À ª i»~àå‹Ç”´…1½@7¬#ɱAë£Q7†ÆhhPÝ ¸@‘¶?X²±ÒÊð7¸„é…Aåæ!áÈaï£á £¡1½€ ió¿ýü5X+C Û°zaP¹yH8rØûhøÅÂhhŒ†A/àDº Øüøàôùéã‡=}ƒ¹›‡„#‡½†_,Œ†Æhhô2@^@(uA ®_½øäуAèsWOÿÁïæ!áÈaï£á £¡1Äx¾}û¯ˆ´~À(£`Œ‚¡û4ÜÎ £`Œ‚Q@< ZÝ0 FÁ(£`ð€¢÷yA£`Œ‚Q0  ¸?`Œ‚Q0 FÁ 4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Éóׯ] µQ0 FÁ(œ@SK‡$õDÚ|Àí[×UÕuFCyŒ‚Q0 '8yüˆ±©%ñꈄù€{wîHJˉIÈŒ†ò(£` Nàé±}Ó sK"Õió²OÝ åQ0 FÁ(Ì€øÉ]€"m>àÑÃ;¿~ý ßQ0 FÁ(Ì€øÍ^DÚ|ÀÛ7/…EÄG×nÀÄÂá̉XE€ Lõp)4]˜zq)Àj 5ø`µ¿I5Š Ê­Ìéx’ œ4 ¿Ù €HÛÀÎÆÁÆÎ>¾ô˜¹tþ8„«gh g#çL4A 2dÓpÅ#¦.dL»ð+Àê6\N”%h1ΣЊAˆqVÏ :ê&ÑQ0à€øÍ^DÚ|PÉh|Ó·ÀpbD âŠG4ñWÏihI Î ^²,€ˆI<) MŠo"sñ[Aе@6²š™põ¤* ÒddehjðB^bÀeAqˆ ÐÌÀÄ>€øù€"m>€‡—´uÀ½ÛW•Tµ$„ aIRëRk¬.Áª.NI€i8\ ²÷‰÷,ZˆÁÅ‘¹ÀÒ Â µ¯€“ÑÄ1ý‚ÇRë\F#ñ Ä"›&£€ÖàË—O ¤ÌÐèyAƒ@²ÙJ‹`]2 Ãï*‚ ˆ1¿8Bƒ+àq„µÍ1šy_˜ÐèyAC ($¯J€gË!š!ñ4u ªä^¦V½N¼9˜*ÑÂv´ 2Ìñ…9@ž4 †Ioi5B©â<Ì1blÄ8¸ÜCªCºÍ1Ìñ…9@‘6ÀÆ6:'Lo@Þ|Ú=æx=ÝædäUž<¼C’qIáR‰iZäbu~×â²Y+›$¤ú"ˆéeü†ÃºðèŪ¸¬Àôãh)1à%ñóDÚ|¸à eúÆ(Ù"¯ž?“”’˜*qÅ#š8²vLÓ*ÀTOŒqIaU‰i¢)ÃïZ\¶#‹ce“¤ÙR\6bUƒ,K0f‘ñ¤ \vá²MÎ-%´ÄøÉ@Ê|@‘6¬XGÇ‹è 0œT¬lHîEï߾‡"s…ňW€&KŒÚ!ºðWQ€ìf¬6âJ´x¬À#E0lñ+ Òdde˜jÐdl¬¶ã ˆüáŒË @SKëúµkO? èQ0 FÁ(„ÀÕÝ‹$õDò}ÂÀÞô(£` B@üLÐèyA£`Œ‚Q0r@ž4 FÁ(#ÐèyA£`Œ‚Q0r@‘<0 FÁ(£`Ø€£`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ¥øöíÛhˆŒ‚Q0 FÁÈÄ4£`Œ‚Q0b@ú£1 FÁ(#£ƒƒÃh(Œ‚Q0 FÁȲn|½‡€ÑOIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig77.png0100664000212600000240000003335110322727434015561 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF6_IDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀräÀ:cÇÔ`s¦{.^8K“õ ŒħC"«3Çc:›$@äÌ=r@MC—žžÜ¿{»‡·ÿ:`9r`1Ècj°9Í=§NWSסŠÉGîuvõ¤¿O‡DVfŽGs6© €Pî#æ¼ ËÏ ‹ˆ±±³ÓÙŸ—ÏŸq§érÀräÀ:cÇÔ`sÜ=7®]36w¸|þ¸®¡%…$Èä §mìéïÓ!‘U‡™ãáÎ&@Î ‚Ü#@äÌüúùˆèïO¸óÊCÈ‘ëŒASƒÍyÈî9~hç—ÏŸ('Ö§C"«3Ç“=› @dÎððñÑÓ{_>}Bs0„9°Îä15Øœ‡éK;wH+žlé@ªúûtHdÕaæxLg“h(íÛ‰#Ö£ ‰l÷PX ™0P>Ò;†¨ãÉv6@ ¥ýCbû qäÀ:c4!‘íøh>…ý€õéÞi4DO¶³h(íÛ‰#Ö£ ‰l÷P·0P>Ò;†¨ãÉv6@ ¥ó‚†ÄqFƒÄ‘ëŒÑ„D¶{¨Û(Ÿé“dž¨ãÉv6@Qa>ÀÈÌáÜ©Tô .ñ;¨ ™KŒ“(q9©ŽDs‘.$ï 4— Fd¸¼@|LÑ:š¨84ʸ急9ž6>š,\Š˜ù€¢‰8Ø[”Â*‹¦€`@3S/Ð.ˆùp%Ƀ*å Õ3…¥7Ð0™À YÚ…5ÙŽ¤§ q9Z$Œø¹dÄÔ€DñqD÷ õÐúpYÌîV)<>E+‘KII‰Šq„•™Õ‰wÙóp]Ck>€ÈbøN¦ä: ëXóÁÄ@vb¦Eª†€¢òþ\å&Uz@´^·;PŽ$Æ^ä¦Á`«Áf;I óÈí¥|(€Œý3!°j¡õþbôqÙ o•“7PCŒüjÐú4X+J*eACȘ.Åhtý‰¿|!©ˆ'¨x$ïÀÕ•&Æy´®%É=hý\¿h d"çÈž›¥d>€Ûä3žéèÑr†*©? Ñýôs$žò×°ÙEÕ߀¿×Lçïë`š ÚÒÌüøxFÛ‰´ˆÖŽ$2pHb3Pup0i5I1…+š°N¤í´9%ÒjÌL _B¤{ˆ\„<'ŒVôS~^åÛ¸pÙ‹<'Œf8šVq\‚ÄT𣠄V»’]ÎàI{˜e©)Švó„r‡ A ׯ^äåå'éHUÊÛz_>}º÷–­£yŽ$Ò…t«Akûs²{îܺÁËÇÏÃK÷|ù 4ù¦…µ}:ÈþÎ …ލ}©ÈÎ&|ûöv‡ @Î ^GRÒ¯ذä15 æð€Á<0$ÀH› Ñû¯#É$a5šÈvÏèýtè0àài÷=æ¨Õ?¢éºÝÁéH²]5zÀrÞèýô§7Èvü€ Qîl€Ý0<9zÀrÞèý£Éc @£÷ OGŽÞ0„œ7zÀhò@gʺ Qa‚Ž9À0 FÁ( 6àááWU׿âá—”}ùü1%$дo_>?²—ƒ“s4`G°¶q ¨æõ›· °uADÚ|À™SÇÔ4tGCyŒªƒgO+n¾/Ÿ?2€w’OÂÁhn`ÇÖŽ®žÄ« æ®_½(%-÷ë×ÑP£€ê@DLìéã»T4PC[o4·Ž@ kh²÷vâ· ió¿~þ¢ÑP£`Œ‚Á ˆŸ ’÷ Î]£`Œ‚Q0 ÀÛ†HÙ.@Céþ€Q0 FÁ(Äâ s€JûFÁ(£`ˆ/Ìh(í£`Œ‚Q@TÉNta@Cé¼ Q0 FÁ(Äâ s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€Âàõ«—xdEÅÄG}4ê£Q02ñ…9@Î á @U]‚³§Ž(«ªúhÔG£`â s€†ó˜×ð’w¿Ú ÑhÆ’d&Á˦I½úÓ‡’Òrb2xÔxúElß´^ÄÐôÂkü†cõPññ·{?‚!ˆ/ÌhxΠ%eʳ¦ $™I‹¬%!!ûäÑÝÁ˜UòÐõf³Ì?‚¡ˆ/ÌhÄÍàjõÀÅ!‚.„$˜+ÐôÂó\;W«YÂ&X£©ÇÏÆå¬vÑ9Ó’Ô$µÙH‰_”Tµä½ÛWª<~>´Äæ4º?€¨\Ùx'¨—²!‘ëЪ%ú@*ƒŒj`úh0Ç1i{ -@|a@Ãs>€Ôù[bŠxäÌ6Ì2 ñCö¤*Æ>¢s-BS §ªqZ˜Ððœ #Ÿ 0‡\‡q×sLŒ>e°íOöX|Dÿ²rÆÑ(Ì€øÂ €˜9þüŃFr€§¨`éO•Q Z$†‘ÙC_˜Ðè|5s51æPË.Y9e.¼kN¾}ùtóÚ%J¼@pbœº¥áðI^~q4 † ¾0 ‘u^Ú:E´Œ„Ù†¯×Ä\àHP/1nÀj‘™ö÷¯_¿ýį€`£ÓkÇÁh·îpðûy/1ê¿h¡£`ñ…9@1^¹pB[ßüêÅ“@/¥—/žãåå½S~ #|úðQBZ‚3'kéê¡ÀõÑ(”ƒ/Ÿ>Ý¿{ËÑÕ_ÊüôH®Ù°ãÀ4z^ÐP|ü/ž>~òø.C®põÑ(ÔÄæ4:0´«-ýQúhŒô’è €Fï +o£`Ð_˜Ðèý£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@Î m (ŠUüÃû×£3 FÁˆÄæ4:0´+€Û7¯à’ ¢Q0 F& ¾0 Ñù€¡]hëc•ecã8ö(Z5@ê5ËD¬bc=Ÿxí$) Ò‘T÷8MÁèÝ/£€@|a@£óC¸WT–õ¸Ô[#W˜e ­K"­£CI‡fõhñ: †= ¾0 Ñù€! ØØØYq×ö¿I©Ñ±6“á÷•cÖ$]†µDƼ7 «uÈWw!‹àq*Áºí²6b Äô/AT UJB{ŒL@|a@£óC½`'»@+•°šXÙ¸ PÊ:0­Ã,¯‰q*ñ}b D«ˆT@­P%Û£`$â s€€›‡WðíË'ÌRŒæ$A•˜7-Sb,%Õ Gd Žba*Àã²Cu´Dâ s€A³™Iasž`cŸå-œJ;@¹kÉ«¼GÁÄæ4:0r+Z/•¡Q5„ÊAÊÍ0«êÑj`ˆ/̈ ¥B`aƃFƒuHƒ¡Õ|¡1Z^‚Äæ„R°³±áA£Á:ØÀï_¿~ÿú‰‘?¬GRù8°U 1¶cŽ­Ó¿t&5”Ðæ„G“ú( _˜Ðè|ÀÞ¿VU×9ö¨¡±5.5h{Ä0‹Bx9ˆ&EÒŒ%ysÂä•¡ðeBÄ;• É3TK‰ %\êGçF€øÂ €¯\8¡­o~õâI ‡‹‹ ÒëW/òòòóðñ†ï bX«ÌM£`Œ‚‘¾|útÿî-[G7`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`hAQ¬âÞ¿ œQ0 F, ¾0 Ñù€¡]ܾy—ìè9B£`ŒX@|a@£óC»ÐÖ5Æ*ËÆÆv|4y§ª‹xõXUÒóv‚v‘ä8{pñ?z©ÙHÄæ4:0„+yEU`YK¡±õ`¾Er5 rÁ4DË©áá‹Q0Ìñ…9@Î aÀÆÆÎŠ»Ç‡ë:IH!…õj*<÷Uá)ép颤uŒU/²Ë!‚˜ÊÈ+‘ñ8ÿ^˜æ£ÕmÄxÓ ‚ ˆ1-”°†Ûhu5\ñ…9@Î õ:€Ô:³Ç,=ÉÒA»—`YŒ\\â±—Ve¸Ì$¯!O^˜ä´¢™H$¹³Z"ÃS£`hâ s€€›‡WðíË'b )²àÞ!O ©Å+}í¬C»Ó˜ Tqóh0\ñ…9@ÎŒZJîš§D/©õÊH ÞÑKêG ¾0 Ñù€Q0h\ƒ£eM›ð£cAÃ_˜2‡  ÖQ@õ–,¼"c ¿±X ¤–´ëÄŒ‚Q@@|a@(uÀÏ_¿ð Ñ`là÷¯_¿ýÄ(Š/ü¥.Y<ºj\ˆÖ¥9fM3 -k’‚h´Š €øÂ €Fç†$øðþµªºÎù³G ­q©!usþab4Y’Ø D,6e@Z&DP/+0ûhCL˜~Äc1CçDjg ê&ÃçHFçF ¾0 Æ+Nhë›_½xÈáããÅ£ôòÅs¼¼ü<||£á;Hd§Öj`0ï£`Ð|ùôéþÝ[Ž®žxÔ|úôH®Ù°ãÀ4º?`8ô0¥F+€Q0 F2 ¾0 ÑýC¾-îGÁ(h€øÂ €FçFÁ(£`¸â s€Ý0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜ióR2\<ü£á; FÁ(ƒðð|¼÷ñóDÚ|°àææ åQ0 FÁ(Ì€øù€"a>@S[ÿâÙc’Ò²£á; FÁ(ƒœ>~ØÕÓŸøù€"m>@WßèòÅsO= èQ0 FÁ(„ÀÓ7ˆ$õDòþS  èQ0 FÁ( €F÷Œ‚Q0 FÁÈ4º?`Œ‚Q0 F. Ñý£`Œ‚Q0r@ž4 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@$Ï\8wrpúÄÀÈ|ð»yH8rØûhøÅÂhhŒ†1^À ˆ´ù€3§Ž©ièNŸÞ¿ËÑÕs»yH8rØûhøÅÂhhŒ†A/àÄxå m}ó«AUœ¨ˆ0¾ àô a1EU­AëùWzxûr7 G{ ¿X ÑÐÀã4ðúÍ[ ¹fÃŽióâ’²OÝÌžÇô tópä°÷Ñð‹…ÑÐ â s8 Òæ?¸óë×ÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m>àÍ›—""âƒÙç˜^„nŽö>~±0£¡A|aDÚþvv6vöÁìsL/ B7 G{ ¿X ÑÐ ¾0‡€"m>€˜€02s8wê~‚ZȘ^ ÆÍd8˜ÎŽº™K;·Ñ9ØÐSC"hš)ÁÁ–8¶Á dÇÐ-*‰,Ìá €H›àáågcã Æ\Le5i2.ðåóG¬^ ÒÍÀºráÝCEGêX ¹ Sd ÙÁ>€ž*±1ŸÖ¶P˜q[âØbÍïh\Z)Ä{ 8/.p6fZ§{\ ø‡\/àÉl˜FV‰‹M-Gb5ÙµxB kPSÂÔ vâ ž²Š¢›éà`L»¨XÔ’'‰ z\aÁ¯†Î¡«TÁå0ℊ^ zŸ„¿ž$»T¥ˆq0í†êÈp$ZÝ@0Tp9 ¿ ÉŽ ÊÝLgÓ(îh‘&‰ *&Z³î!;œ©øË7\~'&@¨å€¢ÕyAÈuå¡F‹Q0’º¸Tb’´v$UBŒê]u2|„§/‚Õyøs8ÜLgÃÕãIZTŒGúŸFI¢¥õXÓ€ŸœF¹‰÷@ÑêþÌ^0Uª‚€W PÝÁt»§¦AM¹0‡ puiáM2Ü<°&X xšÄ5ŒC£DKP%Ùá< 7©38F /ÐÌд§Ð XÛ\Tw0Ýîi ÛÔåÁŽÙPÀZàbír‘çMJÜLk#mcšO‹± ª¤IüsÔM´¸¦¨’þê&¬1Këä @Ãíþ€!á…áwO>ÂS~Ñga ©n¦³ƒñô¤GÓ$­SCc VIï€bBæüüõ ¢Û`%Ér7#÷È𸠹qGê>’‰Õ=˜3E;.D»¤‚æl‚AM¼7iäfÊŒg± í⑼Р&qR’©˜°I²šZ¡AR±@Ý\L|a@ô¾O-˜ðL¦‘×¢ŠÐ@áJ>ʉ™¶°.AC“"Ãåd¯"ol—§ð„?y)ŠÖ±@ãÏ®û";ãàOœ¤z–Hõx¾6”’p¦Vh,ßð¤"º%o€B9;šÒËÏIJËòððÑ´’PÓ2ºuí¿|ùtùü´ƒ³éãæu$Ù!6h}4êæÑÐ êz |úô™vv4@‘6ÀÆÆÁJû­näYÁÆö «èãæuäzpHû0póhhŒ†…^Àˆ´ýlll¬l4?8‰<+ØÀ~Æô}Ü<°Ž@‰`n ÑРР¸@‘6À ª i»~àå‹Ç”´…1½@7¬#ɱAë£Q7†ÆhhPÝ ¸@‘¶?X²±ÒÊð7¸„é…Aåæ!áÈaï£á £¡1½€ ió¿ýü5X+C Û°zaP¹yH8rØûhøÅÂhhŒ†A/àDº Øüøàôùéã‡=}ƒ¹›‡„#‡½†_,Œ†Æhhô2@^@(uA ®_½øäуAèsWOÿÁïæ!áÈaï£á £¡1Äx¾}û¯ˆ´~À(£`Œ‚¡û4ÜÎ £`Œ‚Q@< ZÝ0 FÁ(£`ð€¢÷yA£`Œ‚Q0  ¸?`Œ‚Q0 FÁ 4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Éóׯ] µQ0 FÁ(œ@SK‡$õDÚ|Àí[×UÕuFCyŒ‚Q0 '8yüˆ±©%ñꈄù€{wîHJˉIÈŒ†ò(£` Nàé±}Ó sK"Õió²OÝ åQ0 FÁ(Ì€øÉ]€"m>àÑÃ;¿~ý ßQ0 FÁ(Ì€øÍ^DÚ|ÀÛ7/…EÄG×nÀÄÂá̉XE€ Lõp)4]˜zq)Àj 5ø`µ¿I5Š Ê­Ìéx’ œ4 ¿Ù €HÛÀÎÆÁÆÎ>¾ô˜¹tþ8„«gh g#çL4A 2dÓpÅ#¦.dL»ð+Àê6\N”%h1ΣЊAˆqVÏ :ê&ÑQ0à€øÍ^DÚ|PÉh|Ó·ÀpbD âŠG4ñWÏihI Î ^²,€ˆI<) MŠo"sñ[Aе@6²š™põ¤* ÒddehjðB^bÀeAqˆ ÐÌÀÄ>€øù€"m>€‡—´uÀ½ÛW•Tµ$„ aIRëRk¬.Áª.NI€i8\ ²÷‰÷,ZˆÁÅ‘¹ÀÒ Â µ¯€“ÑÄ1ý‚ÇRë\F#ñ Ä"›&£€ÖàË—O ¤ÌÐèyAƒ@²ÙJ‹`]2 Ãï*‚ ˆ1¿8Bƒ+àq„µÍ1šy_˜ÐèyAC ($¯J€gË!š!ñ4u ªä^¦V½N¼9˜*ÑÂv´ 2Ìñ…9@ž4 †Ioi5B©â<Ì1blÄ8¸ÜCªCºÍ1Ìñ…9@‘6ÀÆ6:'Lo@Þ|Ú=æx=ÝædäUž<¼C’qIáR‰iZäbu~×â²Y+›$¤ú"ˆéeü†ÃºðèŪ¸¬Àôãh)1à%ñóDÚ|¸à eúÆ(Ù"¯ž?“”’˜*qÅ#š8²vLÓ*ÀTOŒqIaU‰i¢)ÃïZ\¶#‹ce“¤ÙR\6bUƒ,K0f‘ñ¤ \vá²MÎ-%´ÄøÉ@Ê|@‘6¬XGÇ‹è 0œT¬lHîEï߾‡"s…ňW€&KŒÚ!ºðWQ€ìf¬6âJ´x¬À#E0lñ+ Òdde˜jÐdl¬¶ã ˆüáŒË @SKëúµkO? èQ0 FÁ(„ÀÕÝ‹$õDò}ÂÀÞô(£` B@üLÐèyA£`Œ‚Q0r@ž4 FÁ(#ÐèyA£`Œ‚Q0r@‘<0 FÁ(£`Ø€£`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ¥øöíÛhˆŒ‚Q0 FÁÈÄ4£`Œ‚Q0b@ú£1 FÁ(#£ƒƒÃh(Œ‚Q0 FÁÈŸä)o}IIEND®B`‚htmldoc-1.8.27/doc/6-htmlref.html0100664000212600000240000005324010330505373015164 0ustar mikeuser

Chapter 6 - HTML Reference

This chapter defines all of the HTML elements and attributes that are recognized and supported by HTMLDOC.

General Usage

There are two types of HTML files - structured documents using headings (H1, H2, etc.) which HTMLDOC calls "books", and unstructured documents that do not use headings which HTMLDOC calls "web pages".

A very common mistake is to try converting a web page using:

    htmldoc -f filename.pdf filename.html
    

which will likely produce a PDF file with no pages. To convert web page files you must use the --webpage option at the command-line or choose Web Page in the input tab of the GUI.

Note:

HTMLDOC does not support HTML 4.0 elements, attributes, stylesheets, or scripting.

Elements

The following HTML elements are recognized by HTMLDOC:

ElementVersionSupported?Notes
!DOCTYPE3.0YesDTD is ignored
A1.0YesSee Below
ACRONYM2.0YesNo font change
ADDRESS2.0Yes 
AREA2.0No 
B1.0Yes 
BASE2.0No 
BASEFONT1.0No 
BIG2.0Yes 
BLINK2.0No 
BLOCKQUOTE2.0Yes 
BODY1.0Yes 
BR2.0Yes 
CAPTION2.0Yes 
CENTER2.0Yes 
CITE2.0YesItalic/Oblique
CODE2.0YesCourier
DD2.0Yes 
DEL2.0YesStrikethrough
DFN2.0YesHelvetica
DIR2.0Yes 
DIV3.2Yes 
DL2.0Yes 
DT2.0YesItalic/Oblique
EM2.0YesItalic/Oblique
EMBED2.0YesHTML Only
FONT2.0YesSee Below
FORM2.0No 
FRAME3.2No 
ElementVersionSupported?Notes
FRAMESET3.2No 
H11.0YesBoldface, See Below
H21.0YesBoldface, See Below
H31.0YesBoldface, See Below
H41.0YesBoldface, See Below
H51.0YesBoldface, See Below
H61.0YesBoldface, See Below
HEAD1.0Yes 
HR1.0YesSee Below
HTML1.0Yes 
I1.0Yes 
IMG1.0YesSee Below
INPUT2.0No 
INS2.0YesUnderline
ISINDEX2.0No 
KBD2.0YesCourier Bold
LI2.0Yes 
LINK2.0No 
MAP2.0No 
MENU2.0Yes 
META2.0YesSee Below
MULTICOLN3.0No 
NOBR1.0No 
NOFRAMES3.2No 
OL2.0Yes 
OPTION2.0No 
P1.0Yes 
PRE1.0Yes 
S2.0YesStrikethrough
SAMP2.0YesCourier
SCRIPT2.0No 
ElementVersionSupported?Notes
SELECT2.0No 
SMALL2.0Yes 
SPACERN3.0Yes 
STRIKE2.0Yes 
STRONG2.0YesBoldface Italic/Oblique
SUB2.0YesReduced Fontsize
SUP2.0YesReduced Fontsize
TABLE2.0YesSee Below
TD2.0Yes 
TEXTAREA2.0No 
TH2.0YesBoldface Center
TITLE2.0Yes 
TR2.0Yes 
TT2.0YesCourier
U1.0Yes 
UL2.0Yes 
VAR2.0YesHelvetica Oblique
WBR1.0No 

Comments

HTMLDOC supports many special HTML comments to initiate page breaks, set the header and footer text, and control the current media options:

<!-- FOOTER LEFT "foo" -->
Sets the left footer text; the test is applied to the current page if empty, or the next page otherwise.
<!-- FOOTER CENTER "foo" -->
Sets the center footer text; the test is applied to the current page if empty, or the next page otherwise.
<!-- FOOTER RIGHT "foo" -->
Sets the right footer text; the test is applied to the current page if empty, or the next page otherwise.
<!-- HALF PAGE -->
Break to the next half page.
<!-- HEADER LEFT "foo" -->
Sets the left header text; the test is applied to the current page if empty, or the next page otherwise.
<!-- HEADER CENTER "foo" -->
Sets the center header text; the test is applied to the current page if empty, or the next page otherwise.
<!-- HEADER RIGHT "foo" -->
Sets the right header text; the test is applied to the current page if empty, or the next page otherwise.
<!-- MEDIA BOTTOM nnn -->
Sets the bottom margin of the page. The "nnn" string can be any standard measurement value, e.g. 0.5in, 36, 12mm, etc. Breaks to a new page if the current page is already marked.
<!-- MEDIA COLOR "foo" -->
Sets the media color attribute for the page. The "foo" string is any color name that is supported by the printer, e.g. "Blue", "White", etc. Breaks to a new page or sheet if the current page is already marked.
<!-- MEDIA DUPLEX NO -->
Chooses single-sided printing for the page; breaks to a new page or sheet if the current page is already marked.
<!-- MEDIA DUPLEX YES -->
Chooses double-sided printing for the page; breaks to a new sheet if the current page is already marked.
<!-- MEDIA LANDSCAPE NO -->
Chooses portrait orientation for the page; breaks to a new page if the current page is already marked.
<!-- MEDIA LANDSCAPE YES -->
Chooses landscape orientation for the page; breaks to a new page if the current page is already marked.
<!-- MEDIA LEFT nnn -->
Sets the left margin of the page. The "nnn" string can be any standard measurement value, e.g. 0.5in, 36, 12mm, etc. Breaks to a new page if the current page is already marked.
<!-- MEDIA POSITION nnn -->
Sets the media position attribute (input tray) for the page. The "nnn" string is an integer that usually specifies the tray number. Breaks to a new page or sheet if the current page is already marked.
<!-- MEDIA RIGHT nnn -->
Sets the right margin of the page. The "nnn" string can be any standard measurement value, e.g. 0.5in, 36, 12mm, etc. Breaks to a new page if the current page is already marked.
<!-- MEDIA SIZE foo -->
Sets the media size to the specified size. The "foo" string can be "Letter", "Legal", "Universal", or "A4" for standard sizes or "WIDTHxHEIGHTunits" for custom sizes, e.g. "8.5x11in"; breaks to a new page or sheet if the current page is already marked.
<!-- MEDIA TOP nnn -->
Sets the top margin of the page. The "nnn" string can be any standard measurement value, e.g. 0.5in, 36, 12mm, etc. Breaks to a new page if the current page is already marked.
<!-- MEDIA TYPE "foo" -->
Sets the media type attribute for the page. The "foo" string is any type name that is supported by the printer, e.g. "Plain", "Glossy", etc. Breaks to a new page or sheet if the current page is already marked.
<!-- NEED length -->
Break if there is less than length units left on the current page. The length value defaults to lines of text but can be suffixed by in, mm, or cm to convert from the corresponding units.
<!-- NEW PAGE -->
Break to the next page.
<!-- NEW SHEET -->
Break to the next sheet.
<!-- NUMBER-UP nn -->
Sets the number of pages that are placed on each output page. Valid values are 1, 2, 4, 6, 9, and 16.
<!-- PAGE BREAK -->
Break to the next page.

Header/Footer Strings

The HEADER and FOOTER comments allow you to set an arbitrary string of text for the left, center, and right headers and footers. Each string consists of plain text; special values or strings can be inserted using the dollar sign ($):

$$
Inserts a single dollar sign in the header.
$CHAPTER
Inserts the current chapter heading.
$CHAPTERPAGE
$CHAPTERPAGE(format)
Inserts the current page number within a chapter or file. When a format is specified, uses that numeric format (1 = decimal, i = lowercase roman numerals, I = uppercase roman numerals, a = lowercase ascii, A = uppercase ascii) for the page numbers.
$CHAPTERPAGES
$CHAPTERPAGES(format)
Inserts the total page count within a chapter or file. When a format is specified, uses that numeric format (1 = decimal, i = lowercase roman numerals, I = uppercase roman numerals, a = lowercase ascii, A = uppercase ascii) for the page count.
$DATE
Inserts the current date.
$HEADING
Inserts the current heading.
$LOGOIMAGE
Inserts the logo image; all other text in the string will be ignored.
$PAGE
$PAGE(format)
Inserts the current page number. When a format is specified, uses that numeric format (1 = decimal, i = lowercase roman numerals, I = uppercase roman numerals, a = lowercase ascii, A = uppercase ascii) for the page numbers.
$PAGES
$PAGES(format)
Inserts the total page count. When a format is specified, uses that numeric format (1 = decimal, i = lowercase roman numerals, I = uppercase roman numerals, a = lowercase ascii, A = uppercase ascii) for the page count.
$TIME
Inserts the current time.
$TITLE
Inserts the document title.

FONT Attributes

Limited typeface specification is currently supported to ensure portability across platforms and for older PostScript printers:

Requested FontActual Font
ArialHelvetica
CourierCourier
DingbatsDingbats
HelveticaHelvetica
MonospaceDejaVu Sans Mono
SansDejaVu Sans
SerifDejaVu Serif
SymbolSymbol
TimesTimes

All other unrecognized typefaces are silently ignored.

Headings

Currently HTMLDOC supports a maximum of 1000 chapters (H1 headings). This limit can be increased by changing the MAX_CHAPTERS constant in the config.h file included with the source code.

All chapters start with a top-level heading (H1) markup. Any headings within a chapter must be of a lower level (H2 to H15). Each chapter starts a new page or the next odd-numbered page if duplexing is selected.

Note:

Heading levels 7 to 15 are not standard HTML and will not likely be recognized by most web browsers.

The headings you use within a chapter must start at level 2 (H2). If you skip levels the heading will be shown under the last level that was known. For example, if you use the following hierarchy of headings:

    <H1>Chapter Heading</H1>
    ...
    <H2>Section Heading 1</H2>
    ...
    <H2>Section Heading 2</H2>
    ...
    <H3>Sub-Section Heading 1</H3>
    ...
    <H4>Sub-Sub-Section Heading 1</H4>
    ...
    <H4>Sub-Sub-Section Heading 2</H4>
    ...
    <H3>Sub-Section Heading 2</H3>
    ...
    <H2>Section Heading 3</H2>
    ...
    <H4>Sub-Sub-Section Heading 3</H4>
    ...
    
the table-of-contents that is generated will show:
    Chapter Heading
    • Section Heading 1
    • Section Heading 2
      • Sub-Section Heading 1
        • Sub-Sub-Section Heading 1
        • Sub-Sub-Section Heading 2
      • Sub-Section Heading 2
        • Sub-Sub-Section Heading 3
    • Section Heading 3

Numbered Headings

When the numbered headings option is enabled, HTMLDOC recognizes the following additional attributes for all heading elements:
VALUE="#"
Specifies the starting value for this heading level (default is "1" for all new levels).
TYPE="1"
Specifies that decimal numbers should be generated for this heading level.
TYPE="a"
Specifies that lowercase letters should be generated for this heading level.
TYPE="A"
Specifies that uppercase letters should be generated for this heading level.
TYPE="i"
Specifies that lowercase roman numerals should be generated for this heading level.
TYPE="I"
Specifies that uppercase roman numerals should be generated for this heading level.

Images

HTMLDOC supports loading of BMP, GIF, JPEG, and PNG image files. EPS and other types of image files are not supported at this time.

Links

External URL and internal (#target and filename.html) links are fully supported for HTML and PDF output.

When generating PDF files, local PDF file links will be converted to external file links for the PDF viewer instead of URL links. That is, you can directly link to another local PDF file from your HTML document with:

    <A HREF="filename.pdf">...</A>
    

META Attributes

HTMLDOC supports the following META attributes for the title page and document information:

<META NAME="AUTHOR" CONTENT="..."
Specifies the document author.
<META NAME="COPYRIGHT" CONTENT="..."
Specifies the document copyright.
<META NAME="DOCNUMBER" CONTENT="..."
Specifies the document number.
<META NAME="GENERATOR" CONTENT="..."
Specifies the application that generated the HTML file.
<META NAME="KEYWORDS" CONTENT="..."
Specifies document search keywords.
<META NAME="SUBJECT" CONTENT="..."
Specifies document subject.

Page Breaks

HTMLDOC supports four new page comments to specify page breaks. In addition, the older BREAK attribute is still supported by the HR element:
    <HR BREAK>
    
Support for the BREAK attribute is deprecated and will be removed in a future release of HTMLDOC.

Tables

Currently HTMLDOC supports a maximum of 200 columns within a single table. This limit can be increased by changing the MAX_COLUMNS constant in the config.h file included with the source code.

HTMLDOC does not support HTML 4.0 table elements or attributes, such as TBODY, THEAD, TFOOT, or RULES.

htmldoc-1.8.27/doc/intro.html0100664000212600000240000001232010463704112014504 0ustar mikeuser HTMLDOC 1.8.27 Software Users Manual

Introduction

This document describes how to use the HTMLDOC software, version 1.8.27. HTMLDOC converts Hyper-Text Markup Language ("HTML") input files into indexed HTML, Adobe® PostScript®, or Adobe Portable Document Format ("PDF") files.

HTMLDOC supports most HTML 3.2 elements, some HTML 4.0 elements, and can generate title and table of contents pages. It does not currently support stylesheets.

HTMLDOC can be used as a standalone application, in a batch document processing environment, or as a web-based report generation application.

No restrictions are placed upon the output produced by HTMLDOC.

HTMLDOC is available both as open source software under the terms of the GNU General Public License and as commercial software under the terms of a traditional commercial End-User License Agreement.

History

Like many programs HTMLDOC was developed in response to a need our company had for generating high-quality documentation in printed and electronic forms. For a while we used FrameMaker® and a package from sgi that generated "compiled" Standard Generalized Markup Language ("SGML") files that could be used by the Electronic Book Technologies ("EBT") documentation products; EBT was bought by INSO who was bought by StellentTM who apparently has dropped the whole product line. When sgi stopped supporting these tools we turned to INSO, but the cost of their tools is prohibitive to small businesses.

In the end we decided to write our own program to generate our documentation. HTML seemed to be the source format of choice since WYSIWYG HTML editors are widely (and freely) available and at worst you can use a plain text editor. We needed HTML output for documentation on our web server, PDF for customers to read and/or print from their computers, and PostScript for our own printing needs.

The result of our efforts is the HTMLDOC software which is available for Linux®/UNIX®, MacOS® X, and Microsoft® Windows®. Among other things, this software users manual is produced using HTMLDOC.

Organization of This Manual

This manual is organized into tutorial and reference chapters and appendices:

Support

Commercial support is available from Easy Software Products when you purchase the HTMLDOC Professional Membership. More information is available at the HTMLDOC web page at the following URL:

    http://www.easysw.com/htmldoc/

Encryption Support

HTMLDOC includes code to encrypt PDF document files using the RC4 algorithm with up to a 128-bit key. While this software and code may be freely used and exported under current US laws, other countries may restrict your use and possession of this code and software.

Copyright, Trademark, and License Information

The Adobe Portable Document Format is Copyright 1985-2005 by Adobe Systems Incorporated. Adobe, FrameMaker, and PostScript are registered trademarks of Adobe Systems, Incorporated.

The Graphics Interchange Format is the copyright and GIFSM is the service mark property of CompuServe Incorporated.

Intel is a registered trademark of Intel Corporation.

Linux is a registered trademark of Linus Torvalds.

MacOS is a registered trademark of Apple Computer, Inc.

Microsoft and Windows are registered trademarks of Microsoft Corporation.

Red Hat and RPM are registered trademarks of Red Hat, Inc.

Solaris is a registered trademark of Sun Microsystems, Inc.

SPARC is a registered trademark of SPARC International, Inc.

UNIX is a registered trademark of the X/Open Company, Ltd.

HTMLDOC is the trademark property of Easy Software Products.

HTMLDOC is copyright 1997-2006 by Easy Software Products. See Appendix A - License Agreement for the terms of use.

This software is based in part on the work of the Independent JPEG Group and FLTK project.

htmldoc-1.8.27/doc/htmldoc-fig22.xcf.gz0100664000212600000240000007731110142763627016172 0ustar mikeuser‹ìZyxTU–¿ï½ÚRÙ÷ªP…l* !‘Új»t#M+ÚÖÙqÄ ã×2¤±mumD[œø¹tzü\Ú6Û£Ž,²†’TªRË«ûîœs߫ʫª€:_·þ1Szóî;÷Ü{ÏrÏù[ÅÂÅKWä­mX·`ñ=ó !B/´§ˆúIE‚Ò¡Y®ý!Øà“Í-Z–ÖG¾LxÂ3e!,ë\¼tÎÂùÎ…«Ï#ê¸`)]½æþ{æç-^¶fþªÕóÖ,^¾lõké‚… ËïY¾*¯”?œ«Γ7¦| ÿ Ò©Ð:#`êÜA¦VD3ÆvpêÚÕ+æ4,^¶0¯"´2ќ÷.[¼„oX4¥^»|Á‚Õó×äégÇ’TJäT2ðAcçÜNÈØDœô=ä´«iʪUËïC²¨ ›4«3ôŒÎqZ?V]?^×OÐõuýdm­ÐǬ yJ‘zõ¤{™œ¥(õ,‡ I+$vN8¥ˆdiÜ­,M[¡•¥"m®‚½2쥲Q¡­ÒÕá 6°+j{¡¤õ¤ù L†sÔ .”ˆŒ‰Ç—M@NŠfU% ¬"@Á•*_Ex´âG·¾4ZÏpkÅDVª²™H°•1P#^X6"Ì)"—ÊÂ#N%Hl$±h̨[Øïèeß'’À=2=2ŽÔå*Rú~ø»4¥2¥lk¸Ü‰/ŒÊwˆèw35PAÒý•àû^¡[ÆaøO¦ï ½|ÿÅ_©,È z7Åà/ËT 2ÃdÚ9S‚\Áß}|2ï×pbz§S$óÿa@†Åˈ€S1…Bfä6!Œ]Õ*j‰r ñó(äZ¿ SpÒù\ª;¾<>€H- ÂD þ÷b¼Øx¼ŒTƒN T àQj°A8™T‚oõ¨úFë[÷ðeâ`-L±4VX¨–Èõ rƦb‹ > ¤Y½ÜJR«Š0‘¯,!¥ò)PRuˆ– #%Œj6L¶­pM [1áÃƸLH9Xˆ³tdÌ€7^?½t,¤±·± HW&ää —o¡rÜ® 1PŽÛq(Lp°4]9>wM‰´7§¥FšœÓÒtV×aÃó÷Ü«öò`ï‚°@ùaY Âjrìi[6DiØ@eaÛ9ufm´:ˆß1£¹yå „²&HմçXÙ y\éÀLÚ~•W:ª;ª±¶ê`l%ˆ²)3°ú¨†˜e†ÊåYussØLnb¬³¶Æ:ž«›;Ô>ì׌ìuEÓn4òR‡ÆP£-8ƒŒš…fXZ o2&<*¢´«šQ´fì5¡h¾Gh§±¨IS’®ìàä&ˆ» cÆ Ò(p¼©{¡ßfª±dÓŠ0𬓇„&0€_ëÔhËЩujü8ÕG¦úy4ñ’®V­øjµš°V­!°Z˜€e<7x&áuFñVs Õ*Æ‚¤±Ù ëËZ¢–¥‰HùÍ_«”kˆZ!§FV]9$”Š“uõ—ø¨V/'èJ±,¨š­ºº,“xuÅ3M i$]?ÃqIJ-Ãõ³ÒÂx —²zu4˜/‹:}ýLÁVÙ¼ÊK£ëg;Ö}©DW¡ ÚŽ¥`ê Eô,Sb= ôLŒâgÑ éü=D•1ìrþžæÍ /•Þ,/,O~Xæ|baÝ ÃÖ)ÒY¯XgãRÊtÎrFøS«æ¿Ë£8tÐîÚM/ Úý!ã›3K….•7Æ¿^õüXa/f™±JH*îJÛe&Œ-“îaçØñLBæ0¶^Iû˜k„±üÆ^» ô.c«JÅRÿ'Œm.5B±¦Œƒ2•ö°{Ö°„ –73ö"åNÆAû»I)æƒ$ÝÁØeî!<Òmè!®½S}ÔE<4¢Æ‚w íf¡Ý3B×í¢ÝIBWå»8«"2BÑj÷o£Æmz/%­£GŠ¢ú‡}ÉùCÉúCïolû~›aaDƒÚíW€õÐækýIÐÆjýµ1üQ"áºUËW8²hÎ<õGŒÐÿ€/†C»ñ ?^äüx‘£DÉ ãC²@üФ}r?"¤¸òÕ1_ò“7ˆ_%Ið–)ÌÖx«Ù BÅÐ'H–›#'#Ñ, übiJæœ0¡ÒãÇ©Èä3D§®iFÃoÙK_tE òut¢A!²!m@®šjG”Ê(&Ý`@U$ÐÝçóH9Ð4™¼>«§§¯iRBþõëß<Ðéê¹Ðqôè©.¤qÓ½òÅés'öíúó_>=Ìi–œÚ%¿ÿø¿÷ôú3M¿y© i‚9kÜœ--ï·<»aÑì†õÛ8͘æüéº'Ÿú×¥·]SUwûƒp¨z Içܽlɬ©ÎaöüêÙH’¬¶QõÓ¦Œ-ÈH°¦LA’`L´åe'™ ’9½ h¯hŠONI´À)$«¿ %£»@‚‚! k~¿ßÍx³”ð¦0õ Š‹ƒ Œ ç X^ì=7Hh áÛ“3ƒÄG¶[9&°çpuÏá¤#6^`çአPÏŒ v4­ ïŸF]<ŒŽ¶GHáÐÝ0ÐÄrB … ߣšÔ¥&_hÆ8Ò? %Xz™*H_„p¢öƒ3Ö}UÝ0ï¾ÌEº½}—OËÞ?ûºrG²YÚeT©ëäþÖ.½¹rh’$z}¨Äž–'VÜèÌŠ“€Apù½}ì~塟¯#ºÎÚ¹}ýŒ±v«JìSöž;¸óå‡çN.J…}T¢×uöË??÷ÀìÉ%™qü r¯ßsñ«w·ú¶ éqR]~WÇ'Ûþùæ Øœ@rûzŽ}°µ¡67É„‡ ½'>|rÞDGŸ¿ÿÒ¡w»clvRVùÌMo¾ì *EbÅô]>üö¦™å&tô©°ˆn¯»óÐ{[~1~Hú°IK·í9ç‘aЦx‚ýçöl[:ÉaEGœ Év´«§óø§ÍÝ^‘“UrÓ†–CÝ~ªHŠ™IЇú»µl¸±(Éçå vÓ/_þë×ÇìjÞ4oJafvù¬ÇÛ:Ü2ðÇ!ÐÝÑöø,gšÁí,ÈTuÇÆæ¶Þz®ñî)%Yɶª¹Ï|zÞKQ‰g",ï=ÿé3s+3MœÊ›4÷WO?ýëå·Uψ·U/ú}{§*‚’È”¦³}Û¢ Ùf<ôçà¤OþùâE³®…¼i1ÆÙk–lÿ¢Ë¯ãîúbû’‰68%.£°êšÚ1™ñFQ´ØBÌ Kbny_ ñžçX;Ô‘ÉÓ6Ö1‹¶ÅŠQbÄJK¦8+Gi œÌJMÅ3¨øo \ÅxqeOª“Û.2Fж]–aE7j¾Á¶h¬@÷¡?©¾ÈÆÌq z·?ò•λÙX¦óÓíCgÁ Î<üΦŸñxò@ÈÑØú2¬±õæ%•hürÄÖŸB ;цĤ±çˆ.Q ±ˆçˆªY±øçˆ*b±h航j±Øèˆ*s 1H94¦ì•¢‘sXL,E"i^DIlŽDÕ|(¢êcYÖ£,”FÑÅrêæañY:G¡p9]HG£r.9]WÇ ô0r<ºÎŽAía"£êîX¦¨B|PŠY:¢4㇒£QÅúÕ!_ÁߥŽFóW@·ý!»êêýóZ¢¤ pETø'&¼RôF$•œ—®þ=QàÜWBP\”¢0Ÿ¤] è/Ç=I'_~pöï€çŠL2¾%‚hÖ·El…’ÌoÒ&%û[Á²íqØ€<߀¼Ffÿ¬5±œ«£«®†§6äªjaŽ«a&_&-lèÕ€ÑÂr¯…fV~&¤DÀ‘•Eœ$n)!oŠê3$á?íëÍ.7Ž".ià°ÈxXFá>¹`Rã¯ï9Ç- 7üÎÅœV8y.?´»û<ýž>¸ŽèþÁãpðóo# x*õÁ3:"ü6oÙ¼‘/á›STQ7íVß[ñŸG…2@ d€¼TêóÈx}&šD“~nÙ±êJJ èJI[”úqXjö Ô§9ÑÆÀÚWööêjßœÁŒÃkë®ã{Þx´¡ž×ÖŒSAñþe‡W,Þ‡EÜ T»áÍàÉÐÍ B'ʆ¡KG*ž¯üˆ» Ú“ßeJø]¦2U„e§ÕUåhßD\Œ0qøª5b° [yÔm¯Q¬#‚Y¹†ø5–ñÄ^£ŠôÜÃ*‰Gw½KÜúKS鋸!Q·¸GÝXà2L£®"N"FÝ1œäØ»8§ª+ï¹™Lf†/‘ÉLð Kp” ´«]wÛýêww»Ý­uÛŠ€Š¢€ h[Ûj«X­¥–­Ýú± Å(»›Å.d§4¤Ù„ßü&cXb¶˜ÙŽS(™ÉäÝ=çÞ——¼LÞÌ8‹ÈOc&÷½óîÿϹ÷Ýwî=÷Ý ( f±²à`3¤aŸbD_6»ŸÅ lþ>“‰²)úLæ*›…[W¬™öLVcŸNÛH JIʼn±©ªd<ͱOyM“m•Àz}Z;‹•?X±²nµ«½›_¡¿´K_©îOIž­oà“ÅxÜÖ?¯2ïþ óîÿ®ØçÙzL±©Ž¥–õæ+Vöë…†ÝtÇÍ7/[ñååw–®þä§ üm®þþ«´ú?±˜=w ÌLÌŸ7…AÛFü>ßmöü«±ì>ÇØ§?ÎØ—º»çŒ=ôߌ=q‚±g~ÁØOgìµÆÌdì—a,¼”±Ø^Æ~½˜±ß¼ÀØ©ÿb|Ìãçodü"~ÍøeÏ2Þ¶…ñ?Éø§ncüÖ ¿w ã÷}¿Ë_÷3ÆŸ0þìUŒo{ŒñŸÿ„ñ_]ÆxôQÆÿó3Œú ã©Ϭbü>ßýâNcŽ2˜ÔÆ`Ê[ ¦£|ù!W¯f0?ŽTþG,˜Êàš3hÍàº9TÓE±6™ÉØÂ˜AÉ€ŒÅê¡` Œ…q0&ˆs`"œ “ ¼Ð$šÁ-0¦äbgv`œ”ãùx>KŽ &Jy.?—Kc’tÉ&)›¡¹Ï'e‹”“ù¹§&56Jéõ6I¼Ü rÀNæõ\ö5H9fÌX)$ïªÌi4ËŠäE–r,i—rÂ)ÏáçeUD=ª9æL/± ¬éN™tÙÀøé("_©íäœ"£k> {êéÃêg—ÛTkJ“­Iu,ș֌M~Çó›“.Iƒ%›L`SÊ`)‘ʱTŠ¡ YMƒeD¦Ÿe2,ƒþ^dú4¼f&Y¼Zd»SèÁÌ 5ÀðÀé:Oeñš©ã@R ÉK&éxRõ‡›ÆLNጞ¨ÅâNª£þpÓ¼©™œ² ¬ãIm©úðL…š Y 6š&,Ó Gƒ,+$`ÚØœÂÔ6ª: &ô‰JúÙ¾­‹"8FDddaÄ d@F"ó‹a:\3àR¸ .‡™0 ®€+a6\s`.̃«á0ü¹ÈÙ‰æ—rÉî~æ,> ŘŽîœf¡3¿âÊ+¥œMûâçH9wŸ×wµ”r>ÿ¤æÏ¾JÊ9|Ž,óÐí—ÓQÍt)/™1ƒ\Þe®Ê\!y²"ù7Š,套Jy™”—_.%à–|ö€ææå\2*XîÈ.W\Î+å¼’"úTãñÛáéH/k¼7L¾œ>ý)GUÄoíE Ù~&=§è8jœµ=÷ô¢õsM49¢v¶vªcAN·¦mò;žß܉ޯÓ`M&Ðæ:›LVSÚ`i‘îgé4KÓø‘Æñƒ®™I¯Ùî$Ž–ÓЂr»Y¼fªÅñƒÔBgŽuvÒñ¤:ê7™ŒÃ r˜QæMMç”e`OjKÕ‡§+Ôlȱ1Ð4a™V8dY!ÓFk6Ç?Jš~v†o뢎!Z2(¡Ð-p‹X·Š¥b,·‰Ûá±BÜ w‰•ân¸G¬ê_z—a°§ðËørL‡‚â\}ɭ܆þÝíRÞ~ÇR® @â.)WÂÊìÝRâß=«`Hê)‹ÊWàPq§q+Aæìd~ —K¤DºKòe®ÊTT°RVäö÷V)—.•r™”Ë—Ky¿Í¸½5(6šMüÁf;³Ë 8†E¬ÄÊ‹Èê"n¡0bX:Y`o¸ßèr _ÂOGέgRsŠŠÃÆYÐ!ÿß°Õ¡ÂóoçˆmªcAN´&lò;žßEW5X´É6Å ñ‹Ç šÕ”0XB$úY"Áäìèìéš™dñj‘펣³7K€øÃ§ë<žÅk¦Ztö¤¢9Òñ¤:ê7™GgOÔbq'ÕQ¸iÞÔDNYÖñ¤¶T}x¢B͆,M–i…£A–0mlŽc jUÑÙë•ô³3|[×N`2 ȵl] ¦Âyâ|¸.„‹`à”Dئ$œ’s¦ò³Šó .äàós¦¢KÈž/%þá|:¨Iþ`B ò<^^~vº¤yé%3øœS54¹¿hÚ4<Àôœ#MÛÖk’¤¼ð")§I©æƒ|ó 5ÂQË =ýO§ÉÿФ“%ªøE|úJToƒÓhŠÎZ{pCˆ˜wöt©Ó µÅ©@¿™Ò£;µ`WMÆØ•ô']©|0z•̻;ü$ØçßçÊ䃻ø¸R<¸ J¹û:x‡Á:„N8s•¨ÄÍ”Tja™BM çԢ©šÒbR›$ÑÂ$Ôœtë9®“ˆH—ž¯[*GKG#FE¯QSgS¹(d™us–j z3"3JæèušuuYm_éÌ]¦g„hUŸŽ´?Mý(Ùí咽“îõ÷’ÜMý ó{ûü}­ b·s§ŒàsóŸ³uÓˆ"|\­p-\ ¡ °ÃáCð{p=܆߇áàá#ü£g–_‹thcz¨S­R^+åu×-ä&ÁXL‹@œþR^sM+/SÒ'/–òƒâIÇ4©  ]"o34ë_´˜/ơƉ¨,|ËäI¹p¡”mRñEDs²ñmêhh#•‹ÈD'Ò[vêj3Ì-zÛ<p]7§¦/o1"Ïž.vú±øÈ%øM—ÝÉÛkÒÆö„?OóîƒÇýÇ]ùÝGãþ8É¡½þ½®t~÷ö?äJòÝ Rî^=§:ÁA¢ìD%n5_&´û žCb€©91MÛŸª‰=&µ ÒxP_á:—›ói'‘.JÜ Kåhé¢sTt-ŠÊE!ˬ›³TSЛéQ2G¯Ó¬«ËjûJgî2=#D«úÄøP?Jõ¥žs¤ÇßCòQêg˜ßC£…)×t»±ÛáH³{ÓüM¶nR£EVÃq¯¸îkÅ:X/ÂWÅ×Ä×á!ñ ñMø<|æ1è'‡D«i¸WJü»ï¾û¹‚òõèŒ*€VK¹†ÛJÍ®—ëòÁ mN!ÁZ!a}Πlé5áRÞ¿”k¥\ÇÑt>”=Ù}=ýSýëÖ¯G C0N”(YKFqÔ#Æóuˆ®Øœƒê,†5éìì7Cc°ÏÇQü&Jîø‚ñé}1~]<¿mÿ1ÿ1W4¿-ö‡](wúwºùm/ýAWœo[°Ÿrw†yØ`a¡ôÑe'*AgV^K›ëj¹Ы‹ §?_'û Kæ‹^ÑpéÒ«3–ÊÑÒ£":*z ƒ¢rQÈ2ëæ,Õô¢¯%sô:ͺÇØJgî2=#D«ú„»ü]Ôâ4ÅG]]4ÅG9Mý ó»³þlA®‰Û°Û!wÛ†ùJ;ié²Wo˜„ù† ÔlEØf+BÍVøõUdùÞ@*®Êvá÷D #°/p U‹-”¨³ÚŽëè`5$Ôw¨å‡IØ'™`5Ö ;u6¦ø"X­õjÏ­/çY’qFÙ}ôÎPIPöV±¸8%‹¼ä½(ëoVÉ%dO‰ FY™fÒgrèÍ#0÷ðKIeYƒU±F¨ap M,\ÑÍ­êâ)ß©£îgùRª~)Ý@‰7ÝÜm°îJ¼Ý¾^ƒõ6PÒØ‹ý¡Oõ‰ŠK#ðGðÇð'ð§ðgð1ø8|> Ÿ‚OÃgà³ðçðð9øKø<üü5ÿ¿©Š­bß/ØÊëí8÷8Ž3½8q>¨fyÖ˯Zs¨¦Rõq°O¢P8AþÕz{¨ÎÆhøúW½lQky"¯^:Rv½ÑS”½ó+.'@I¸ÍE$ëoVÉ%dO‰ FY™fÒgrп¢‰îá –’:˲«b#$ŒPÃà6šX¸¢›[ÕÅS’]hCjæ|)õHÓL(ñi>j°£ ”xúz ÖÓ@Icö‡>Õ'*.&?ÂßßGÅcb<.¾+ž€'Å÷ÄSð}±Qüž?Ìoª¢ª¨wel µU\¼ˆé±@8°3 ìWq~#%ê¬6œcá0 ×PVžpÅ”qòz–sTgcŠ;ÐëY{ÜúrãPôV˜ÝG›”eÛŠq9”Ä­¼dëoVÉ%dO‰ FY™fÒgrh‹zŠá –’:˲«b#$ŒPÃà6šX¸¢›[ÕÅS’]hCjæ|)µ«© “J¼]Í%3LŸ5ÃlìÆþU}Â1*7®¿«—Â|9¥XØ`¡à*´ }BG§«€\%c(i°ÄúŽ{DÞ`‰‚p•xR)Û]1úÖ²«°Y7I`>UŒæâWטáùÚîQÓ=• ÎÛU*8QÌÊÛV+T ùÕvóÉ”LIùâÉ”Lé è7}‘n†¿/Á—á+p ¨=ǰ –Ãmp;Ü+àN¸ Vò»ážüª*ºŠ®¢5ÚXiÁr@}žÛ`‰õñ{àß`‰b}•Ž b¶»b¯e—Ž]ÕÎåÒз€*.8…É®!1ÃóµÝ£¦{*­sœ!¶«Tp(¢˜=xÅÀF°Z¡âʧE…É”L9´¨0™’)Gì'À&ø[ñ#ñ <+~,6Ãsâyñwðñ‚x^/‹¿‡€-ULóNc*o°¯¨%•Œ¡¤ÁëÃŽ¾r‚Ã2€ÊÇGªb¶»bü¯eWáw qóA¨âz‚Sí3<_Û=jº§ÒÈb»J‡"ŠÙƒl«*.:pZo˜LÉ”.(™ãF°ÔP\Àj¾7ïÂ6¼‹¥Æ²Ïò*´ }OB~¨áÛ56Õ´Å—4^ÎÔgŒ-1o¬å„ñrÊ“Êïe¼™–ãe ~ó;‡½á–}fÎÞ=Þ=ãì@Ýäy2ù[öz÷Ž«‹*ßÑR› <.æ)”±'ì »Y}˜ëŸc¸™;™šºb®˜Ábãc\ï#ð°ÊSe›yµ1Áx¬ŸÅôb@=s•³Ý”@,ËbÔH¥™5¬–²bÌ‘ïQt°í`&\'Ε0Í(¢¸ÖÂ:XÐÞNø|‚oÀ7á[üax¾ ß©b«Ø÷ ¶òVßö±É¦| ãùt}Úx!â´7ž§çsëkozßl‰Ïwz:ó[»Ú½í-{Íœ=¯z_2X¨.„<|Ú·¾€žvìAô«„omzë75èW e¼ÚîjG¿ÚÎõÐ%%òM]WÄ`‘ñ®÷ S£­ÎƱTGIÓˆPÍV€<¤IÜ ¬³‰WM­VðÅp:u§S™@¯jÈŠ¡+< Áx¾ OÀ“ð=x ¾áð4üV³áGüx~ ›ùsUlû~Á:ìb¯¿h¼Šn鵉í9ÖÞÎÚg´7Rä432@±:%RHHN #<1ÕTÊ¥ ­Ÿ@_åèDÇvP*´˜”mÈóAè”PO«³qlÕQÒ4"T³]i·°ëlâU“p«|‘À¡@ºŸ7=ª!+Æ}„{Åkðsñïbì!ñÐ.~!À/EbI¿ªbª˜wãðªöi¼þF x)ðJ`×Ä`Žƒ,8#ØHÅÌÐ…@èT˜D‘9 |†S)—b—~QØ‘£ò@©Ðb Pv´!Ïs¡@u>­ÎƱTGIÓˆPÍVÐ5¤IÜÂbƒ2¯š„[­à áläPàulÄnÕŽáñÀƒ¼dmÑüu¾Z[¤ýø¥Î<ÿT[ž?°ÆS¯,Û¶)ú„<›i³B§Yáº5F6ìÏŠkèÝZ–’PL‰5vÑEb-‰W(ì"è!ñJy‰˜[‹e)„ ÅfÇÖÏók²±z<í¼ªÓÈÒ¢oøðÂÃF,½0mtffŒÃ½ {´: /ÄÅH‘éƒ÷àþ{×öÛÆ±Þgfy]Ñ—ØÀud|À'‰o°Õ¾VÿEûàßà^Ÿ¶—ð?EÜY»îmi†rñí­\$7T°?Ä_máíq“a?B2Šd IÅO2$cHžG’JdóÃBa · oZvòÖ‡[²¥wJöVI-ٹʵŠ]X¹¶b—Ö®­Ù•Úµš½Âs¹k°w°—ª×ƒ~môÏOéSå¥Èæ•’ò/ì·Ê¿* ¬¬T”E¶¤,+ÿÆž)+Öê××ÿ5—½Úç×F×'íy<†ÿ“ÕëÞVc(ÿÀÞÌF²Cšýþ~co³'Ã~2„dÉ’ŠŸdHÆ<$•Èæš¶‰!ÿ¬ö¶Öú “·>ØÔTÈæßÉÛ›y5ogK×J¶¶xmÑί^[µKú5Ý^ä¹ì5ˆéíùòõ®°þâÛm{£qûœúÞÀ(Àþ9o`ØoØô€å€eÿY¸ë­ ­`~ih‰v¨õ¡uº7l`å„6 puÞãE{n=œÖè]üŽ,_\>±lÏáwX„Ÿ@äŠ'€ ?Yq¸Næ;ø)Z^Ë+ye"Å@º\4áøáQË:iž—†ð÷ë¶ó§O@Œ™PŠ>;.”pÔÊÆ\ŒéDÌÅ%‹x·Yk¢8šˆt‹»¦»àý¶.·L2ÝÈ& öÄ]°Š²Ý&ÇO0,÷ÙòñekA¶á•ùFn¹z¼j-Ë:ý|à9*Výd)îúŸ;67°'$£ïp2Åè o­Ño¾ù–~˾cÍþ†ý-¾Ýbsì1û;ö÷ìØ?2~O˜˜þ÷™EW†dahv¨êP•î X:ñx@àj6 Ç öwÕ8pZ£wðIÍ*'*öwø b~–+Nd]®“¹~£–{œSrÊxŠt¹h¶4㸑Ç]‰¬“æxioq¿n;‡{qØ'EÆ•‚ÏŽ %µ²1£:sqÉb ÞmÖ/Œ‡Æ#Ýâ®é.x¿­Ë-“L7r…Ri¼”(Ùã%Z² ²Ý&Ç3,÷YåxÅ*É6¼2ßÈUVޝXY§Ÿàý@W”™à~j:î`žóµw'o0_MЦùY-Æ*”`ž¡šöGD!¢9G2È–!sÁ=ÿòkòÑsósrÓ|pÞ$Ïû šÏÁ§ÀtŬÌ~c5_>!Sæyb ²ÄÌ 2b޳’­›®5jn|N¦È炳§Z[·þÐ¥O%Æ“`Ð%#Ð%зÌl€qì.fcŠ`+fk ZAwrŸÆ®}ͤ¾Î¶“;ÁÌ£žW]ðû¥Y¢îíÇ1bϪLÏ©’¢RÕ.¶ÃmZ<«Ê™(nA‘:(e€Qí¶ÅS›²!«ØÆHÚ!rX¥íC*âà´jBmµUÔ°ÙV!õÕ@¨#Ûaa†3µƒ5É,jwM"P“ ž>j¨ª´i¿*íQWTmr–ÝýÛ…óeQ¢.Ùå™ÔŒ`‹W­ò̳Ô3Å–Zå™ùS? ™Øå«… ÉšÄñì%}iÖBkváå¹—BQ¬j–gj¦YX‹@1N9‹ k±5ükªÎäh× äHš[K¬É+l­Š(HÐ[‹Ý X‚‚%ÅdÑ[‚‚»—  ËÝkPžSÁ¶OmËíuª˜:£VÃGßÑ'“]¨õ~¨+ «P!éç€)Sø®Br“wò‰ eȱ%»GÐ2ÜûAËPð¬CýTZ‡‚Å¿+ Z‡‚ë¸) Zˆ‚ª°mïC{ð8oœúzÜŽ>“Pò|Ò¿/ÏäÞ~+¨‡%c…sIÉIÒ¤]Àµ¨p6)[d¢¸EÉÁ@ (ìHÒn'£xcɦϒUð£$,F:p¾N&’­vUl¶“úª Tàb”<,ìp¦v°&™%ÙS±‚ô2õÑC“°õ«ÓuE“Mβ»Â;ðô¼ÈÁ¶ëü}Á/[ó÷+©Š(Ï[÷ó¸1âü±§­ùûó:ÓÃZRï0T^жV UmíŹBM¬lÎß× C«F Ø8k¸ìM(Õ ‰øwnÆ1ÃÒoaÃUß@O4ˆ=zàb ØàP5QدÊ.æÚê€öˆ ”{ðr÷\ ìùä¼—ë+:£ÁöŽVùW.Ø%7`}«e¬ärØÈ‡ …]¦$°|¥Vãiem ÓÌC®—f¬‡Ÿò¬Céôã ç*¬å~.iòJò[L_g²pô}—’æOVÒ%òÄtµBïÒɫտÝIMÓ¯èÍ©ÙÕÕW^4§JÙ¬qÅZÓv™’ÀòE]çiiuÓ»S\/½kM}ÌS°¥“³%Î¥­f.iúJú[L_g¢wô}—ÒæOVÒ%ò¢rté|q`VY±‹™‹:Ó˜]_/fR ñ¢qwFŸ-fòË©euݼ‹ùb5UUó"¿°žZ&Õz´NÉ ¸u~òQ¨ƒ„ëMR¯“zÿï!¼1¼…ëÎÙH« XÝ$u‚ ¡uF,UPA„êE‚‡)yBÊCpQÏNÔ=3(ÁC©üV –@8\ÚÛê¥[<õdø-R÷õì1êxÀd(TÀÆ©2ËźQu²©z|ÝXîyãÎŒGÜañˆŒDÄ´­å»_´¸Y_ÏKÃq®7üÅnCŽ`}£¢øáÎèž&•Gº…M¥nƒ°G-ŸX÷0ÐúOÅXé a´×š-÷m³#@q¼±|H‚Z²£ÒÕ1!¨¶*$ìøñÁ€²ÓÀŸð¥öTDwyË2·%| H½ vZ»%º¹¹žÝSn;ݳ[ Ú§‚ûØÛ“*Vê¤3j~× {à›ÎƒYïöN…{'çp:4Ð#BS¼8DâÐdÖË· U¼B§…Ç÷€NCWâ‡^¯»Ü`P-‡Îf”%»0}qšf3Õjaº”*Å ÆÌ3…é\%UQ×Ì;˜/¬¤VԜȗÖRkÀô˜+µh &u¸5~rT¨ƒ„kMR«‘Zÿkð!¼1¼…kÎÙR« XÍ$5‚0©×`RQT@¨VÀI½#D¡<õì4@AÍ3ƒR<ÔËo°` „Ã5˜Ô{›@½t‹§ž ¿Ej¾þ€‡ †s d(TÀÆ©2ËÅš±âdSµøšQé9ãÓŒG| ÃâÓ{¼U¹ãñE ›µµœ4GàzÃ_ì6äÖ7*ú‡Ÿ,-ñˆîiòA`Py¤[ØTê6{Ô‚qð‰u­mðTŒ%ÞF{­Ùrß6;Ç«Á‡$¨%Û‰Q1*]“:oUHØðãƒe§?á/Jí©ˆ;îò–dnKøZì´vKts/s=»§Üvºg·@´O÷±#¶'U¬ÔIgÔü®öÁ7³Öí ÷NÎáth G„&˜ÔáŠC“Y/ß.Tñ ß: a\‰z½î۸ߟ?=¯ ÜWæmmòâ$½Û¸_.k“ùT>®ŸÜ­Þ×&³0¿««æ'˜×S‹jVäó«©U`šåÄ¢ÕaJ‡+¡ósÀB$¬7‰®=„ÿóÞø?ä ëÎIa« ˜n Lé:Lé ª ‚ éNé! å!¸¨g§ tÏ JEðˆ6¿À‚%ë0¥÷6zéO=~‹è¾þ€G@Ç2*`cƒT™å¢n,:Ù”_5J"k||×#>†añˆI‰ˆÍn•>ñø¢Ú¦¾š•†ã\oø‹Ý†ÁúFEÿðã³%Ñ=M> *t ›JÝaZ0>±îa úOÅXé a´×š-÷m³#@q¼±|H‚Z²£ÒÕ10¥óV…„Ý?>Pvøþ¢Ôþ‘Ѝ±ã.oùAæ¶„Ñ»`§µ[¢›{ñ˜ëÙ=å¶Ó=»¢}*¸±=©b¥N:£æw½°÷¾é<˜z·w*Ü;9‡Ó¡š`J‡+Mf½|»PÅ+tZx|è4„q%~èõºË÷N¿8œq„–·ï‰}˜³ë{_Úá]v·t—½­Z'wÉ•¿M_Õ÷U_ø—|ïŽ;"±;¢uvH §¤œ¼ éÞ¡Çœ´óâ„z%ÒÞyãìÿû‰†D®Wwøý…¡ým1¢:»3±ýƆY}ª·sÓ¶¼· âeŠÛƒXþz3°I$Ø•Œ·éïy›¹áÂð´{<¯R¾'b:'‚|_Š/»ááe/ìëä.¹òà µ}Õþ%ß`t%"-Z‹ñðNl,`³ÕíÇœ´³ £^‰´pöuÎ^¢ŸhHäzåp·Ð_ˆÚß8ˆé‰Pfõ©ÞÎMÛòvTbcæö Vou0':Ïs©yÇRiÓîÑ­òõžX!œõè}ií¹ì.6—½E¤“»äʃƒèûª/üKUà\-æmªƒƒÀÅøb¡6ºuÇ1'í„tÔ+‘¢ 'Jt"“~¢!‘ë•ÃØ£¿#´¿-pgÝ6ÌêS½›¶åÅg"Ìs{«À'ÌÀò…ÂóÜAø2“êZRq°˜àhæLFs³0¸`-gøIIöèòÙe;ãS=S€Ÿ³Zάá õÁz« 2±u‰òcŽX v w çaâ÷ TxïüCM¯Fë^DÎo…<­QwéU{¸ÅÖ(qŽõ•n7éÔ—ë£<Úçþ £©þï ŽNŸ™'¦”KVešºcVÎVìi礕•3+ð#[ìѵ3k@8Hm°ÖZ™XU¢ü˜#ˆÈÈy˜xŒñž÷j7ÔÑôj´æ{1Áá¼ü÷T´FݨHíaàñÙ ÇúŠJ·ˆtjŒ‘ÔQœîsÀ³Ûÿ¼mPKptò̤8è#?˜·J“ü¬xÏ–ìIç€Å3‹ð“FìÑÕ3«@8ˆ>¨·A&V–(?æˆbrr&Þb(î½Ã u4½Õ½8<&8œ·¼žŠÖ¨°ª= Ü">»‚áX_Q áv‘N1È=Ê÷ ûÜòi:ÿ£3Nw5!IŸîwPÄiÿñv‘üw{ßב¦w®ì»î¤íñE”‡öXQ²XY’Ǧ'™‡`lóLv°Ád‘ƒ0H€Ø<ø!$‚òÁyŒ€ Úo†°ö¡ÁAÄ‚¤È Ù€ØD¸´  »Ùì3ù/u=—î&EÉò˜¢Î¥ªþÿ¯ª¿þSõW®ï7lâáâACft‡yq›ùÙ7S`^ wöŒ…ï!¢wg7f›§S9Z³ViúN9žI{v70Ck–›‘Óôš´§<)¤Àh&’¤¯é9;M«,)d|8…xr›;Nº,M㥕©æWÍ£HS™%Åá\|'9YåR*HTÎ, Õ¼`7µ,¥fèt*Êë±V1X_ÏÒèëñº³ùí¨#°P6e–¤W£Ê­3Û°Ìæîd]a³í4¡£IµUÓÂ\'SZZ*³`¢Y6˜f¦X¨H7K-í£–ªøi…+“f Eô`={09£óÈ´¸@«:ønŒ­”ݵ–³­bjô(iÝp;Í&vr{0‹¬«i¸Ümv2"§î¢TmqOòðz íÂà~= ªâõÂE4æaS4nGˆ3`IÓo¦ ΄ëîôfDÄïN¯O£)¥°´¦×!MŒˆv.íéuÔþzlDL)¬§Œˆv)XT¸žÓ…YÝQ²PÐrëö˜.Æ“bÔ˜˜.Ä3 £ÇÄt1¯ÇÆà}=K©¯ÇkÏ6øhE‘Žz°,³,½ZVÎ~€;˜—ÙælL‹ikš ,éÒÌq1³i–˜f¬öÀØÁDö^MUþÔÒY#c&´»3{‘L»; ­gУÉÁ1«Kƒc–iƒcfO–³:{tìlÖè˜.0}tÜ3FÅI8™JiK·)‡~ÀX"Ý‘oÜF¾úfù&¬¹Õ36쉈֪߭Ói­j ’* ãy´«5Tr z©Fä4¼!¾$dáERô5ÀrvXRÈpEp ñä6vœTYšÄK+˜ RE‚œÊ,!åç# ÈÇ.ŽRAªrVI¨Þ³°©E)5`Ì.Éëñ&1X_ÏÐçëñš³áí+©#ÊRws2ËÑ£9匌[‚mSfSw0¬°ÑvØÛ§Y©i[0pd«@#e—K4IÂüR KÕèf£¥½×Q>µleR¬¡‡î†Ó»±™}F–±==j×÷]Ô^¥ìÎë(è´œi» K£Ií³€Ûi4°këÔmYT]­Âå¾²ƒU9q…*[ÃßxCá~¼ßn%˜Dñøq~ÚÅÍU÷/Š¿~ÚmýÍ«î›z–§SÊ·+¨„—U\œ5œŒxä°ä4ÉuóÁÏhÃm \9¤zŒI“ˆ!~"äêPKиŽpU˜ò'8ÒcV0"áEèüôɧ‚GûeqíG„k¦=…¥T¬Â èh¡7(8Œ[‘ÜnšÉ9sE$P¼§K*ëË Ò«ÞŸ7å,6lʙ橔¸¨}²œÈÝgXKSX‹ëdhGVȨXj-6¡Ðöê²-g¨)‹]ØzM½o¯Ì 6u¡’ÌVÎb·êü4₲e¤·˜Ÿi’ïªJkZw'/‹ä—ŒÎdG¶8ªôaS2ÉÅ·ìc‡í#ÙÌx¿-cOiÒ>¬ÚJÊÇFÎ]ŸÆ$j‚Ô±çü )ÌŽãià*ÄØ‚!cH"H¹ •j¯0d Å@ `ÈúõÓBµ‡CÆáq8dß•!C£Å!° ?—°m®‚‚ÛÅ+ ?!¯Áñó_?-üV†Œ†^ÉÓ)5•.¨„—U\&ǸàãцŒÍǰa~׆Û@L‘ê1&9L"&W;!W‡Z‚ú;žž«04‘ãHYeÀˆ ÄTOç§O><Ú/{Œk?"\3í)D(…¤Ê`fˆÀ).·q+’Û S"M‹] oãé’Êúrƒ†Œ†\( r9ïTJ\Ô>YNdÈî3¬¥)¬Åu2´#+dT,Hµ›P àÚJÞ|–𲨛lë 4õ¾½27ØÔ…J2[9‹ÝªóÓˆ Ê–‘Þb~¦yH>2´¦uwò²H~ÉèLvd‹£J*&Ù£ø–}ì°}$›ï·©aë)MÚ‡U[IùØÈ¹ëÓØƒRMú öœ!…Ùqpqêª;q ëK?Áqè}ö…ŸvE Q{½^ÍÿZ {†o”çÅ÷.câ@f>/JedLþ 6÷ûÜÝŠîðŠ°„½^¡2JØ»ð”y|£Ì-‹ïÝÆšZå·ÕÎ,é ”\ù-Õð½}‚TŒæ· zxÝ÷u¯ïíÆò@€6¿mÀÐÃ뾯»x}oŸ@—ÅùmCŠ^÷}Ý•ð¦{Î+°áù¥ )hˆ dé:­-†‡ð$NFž#rq\ABÝrld Á)ð$²`1#ÅÅàºÑ ³À,òYò [ï¶Åm¶Å­pAŒðó ƒ9§tÙ`¨}jŸrfNŒéêói…pâ:)æê:Ú– ¶¦Š¶(Šd¡IÒ¤™v­TN–š+8VägÛtPaàR9"3èN@/ñnDé7j»°Uׯ!¢ðR7ÞˆgAð[à¹éü·‡'Ÿ†Þ9c9Gª  ´ºo ¥„”Ú§)Ýð8V x:?ì½ö3X"èB?L…a R°#ö†ÀMÀñ$Pž°qrqFÂcÝtlì X*s²@D#ÅÅð9+ƒ ³àzòYò ›oZÇÝêÅͺñ.ô ƒ9Bó„!0:¶Om÷Ò̉p}PN0ž¤£ÞJ[*Øv˜*Ú¢(’…&I“fÚY´R9Yj¬4b åX‘Ÿm<ÒA…LåˆÌ K0_XÅ»a¤ß(a«®’ED;)P¯n¼#ς෠†ÓùnO> ½sÆrŽTA–vßK )µOSº+À¬ð2t~Ø{í–±Dàd„™ [¤`m2L*  ñåI¬³<¡å⨕„_»áØè^àU`‚e®FŠ‹Â8-Ñf’å³ä6Æ~@ЇâFHØn uy¯zÐÁ¡ŸÂ˜ µÛ§P3‚4sbÄ`Ÿñ:JŒ'é(ÁÒ– ¶¦Š¶(Šd¡IÒ¤™v­TN–š+s:VägÛtP!,S9"3èa@0}ñnDé7 NEتkãÑN 4®ïij ø-hætþ€ÛÓOCœ#UІ„ñÝ·„ÇRBJíÓ”î ˆC«¼ ö^ô¦Ò¹¦2_Qw'ñ4È#‘°µ-ýдZ¬0¨•^wq·\‰öë;â»+åG~HÈqc†/?¯d|*ö­Ÿ]þÐSÉ`Ói¯W¤²˪~4J¬Åº& 1ŽËU“M³ù“FGå’ïÖiÈ ¿Çr5˜S¢ålˆéjøYrÖ/ =¦Ì䧬ü˜šŽÒ*ñmZ [A8¡&Z. SÒÈà‹Ä§žÒx´Ælm‰ƒ:«¯>ÑêÂïáé¨ëmB*þcú6©—CI¨5¦¼:ùª‰ûT‰rZÜ2¡ŒpÍK_¬KöUÑÆ—{Ìu˲üP¿ÅëÜ¡Œˆ­Wú’-0ĺÊÇ£õj–°¿'†lUžµHuLÕU` žEµ¢òŠº;‰§Aþ†„DöhJþ½˜ê¨) OÝMW+óÈ)å·YHÈqcª!¿Šc|·'ö‰–]þ>OÉ`~½×+RÙˆõ¿õ#…\û™NÇåô­Eþ>‰æ¨\{Ú< ¹ág4àYT¢ålˆéjøY‚g‘uÀ3ùÇ”™ü‘SÓQZN ¾M+aSƒ5'ÔDóö0E! ¾H|¡'GkÌÖÖ‘8~¶úXMs~OÇ@]o(ôÓ'mHm¼ÎJÂ@Mvóêä«&îS%ÊiMpË„2Â5—N|±@ÒgTED\1PÊòû*þ&/¸…2"¶pâK¶Àkè*ÖÓjaN Ùª¨c7~Y8ÙÚ?v­üŠŠÓ7‘Í©ÕsœýQM3ïp›Ý笼Àz{tÔ’âÇ^µ8Íè8:YãÅçäË#›O¿rµs‹ÇKú¼]¸ßæ: ÓvÅØ%ÆWA‘à i%åýPÜ`24' ,—ØÓT2Ÿ@y‘ÚÅÌ'ó^)­–Lüð õj N`”ƒ]sñbÃÌý„Ž’Ù¡£^zq0Ø_(>ùÑ<ƒY7]>Öt¨z5 ÅžìÆ/‹©ˆžE¸V~EÅé›xîÔê9ÎÎþf¤™÷L.Ü笼ÀZì?jIñckýG-Nó‹NŽNÖ(ù9¹Öoóé7dvnñxIŸ· ÷âÛ\xü „êb³ÏéŒh|”15 ÇþQÞ¿§ÐêSÊDU¯0pJ'”ñ’Òh*†z äç̶é V®Ûù…‚Rw&–¦žïn`ß/$õ#1ˆü44õŠÒqmQ4áêÓÕUØþ’‘].e$b7mOpûIËK³’ý`øw)f9ö}„þL¯Ü ;ômÇÙL: *¹Î}[ràÉøtHW(lsK&¶óÚ?nû÷+ƹ,˜t9Ðu@ /)­¦‚¢[]wðñ.ñ­a£» ;ËDGÏw7³ï4ú‘ð}*Ýî²ÙÃ]K‰ wí8i~©¦²hþ.å,Ç>|pØÍIûC^V7'ǼcL®s7—‡2¾ "Û'jºØès:âUÆÁÑ»á´ÑÑa¬ËF¯0´Y¨ð’Òf* z äç:BU§ã’¿Hhèn¸2ñÐó]më{†~$†pŸˆ^Q îÞEl>]eƒî—„ˆìb)ûpB½€å'm.Õ@öÀߥ”娷 ;4PIØ©C;ÎÒaÉuîÐ’#Mú×>D³à/Y’ £½c_¦ѳçî ¹3bÈÛGM+Šõ; œ^õ J¼F·}Û¾¬±uƒl„Û—87çÛ Êö%³2]`[_Z£f‰ eecË”×0Ç þ•RüÈS7Í_Qq!íÆx"Cì›ûNz«¹‰æ1agJ¦ƒX7M(lq2Œ×âÏÐX¡cÍöÊnéèÛáïªa™†aÀg=Ä¥¤µ¡¼aW‚âtgðPfÔÕT<›qOvÒuIÀV÷¦!É~ØÙv¶‡íag{ØÙ>Î6…Ü;Doj‡÷ 012÷£†•ÄßÝËc†ÎV‰× ÜoÛÁ—5x Äý’…:Þ qû%³2]Ð¥_Z£f‰ eeC¤Ë”×»WÎx*ýWJñG OÝ4GT|EÅ…´ã CcãÙ£–Jo57Ñ<&:¶QÉt¬ý¦‰Ø/N¶éiþ u:ÖÒÈ^Ù-};ü]5°Ã",ÓP" TõlC¢‡¸”´2”7ìJPœî *õn¦âÙŒ{²“–¨K]¿7 IvúÜ^&÷8öÌïïåt5øwÍ—— ®=Ž•y/'ÇÐÚÇ@6 DÝzx싱1¸ºcí/nÀÕ{ï{qtEÕýltõ2Úþì:êeô½ïÃÑ0öÖ'·nÁÕ½Õþä#¸ú·Þû dÜžAMóÕ핯U¨0Ö¸1¦7ܱ(u¾Ø xëQï˜S !#Pä¶Éܪh¹Ï—Qtd@K i2œéXQÒ[0¦¾„øµ¼­¶³¥Yl$SWç 0³Ñ¦kŒÃ¨f~ËwŠ KÌÊ –75 6Ñ›ÝôÚõ¶²è7Û29á†ÆØl ,[{K£/xÆa@ŽšJÖmå2Ž…Â7µp=Qý–® ²‚I±þ¦u¡öT¦gX<¬ü÷ˆµÂýw´ý³H;ø\ñ´ÚŒÝJì Ö¬Q´Gdد6殨°&orÔÏJ&lOÜ™H°ÀWnXßÁ´í™½CÏP1ö@»ü éýÇvëÊÞI5'ìÐ1d‰ÎɕݕÖÖñ4³Ñ¨$J\@1(%ôÊ1Ê9År=±×•K´¤ß·à}«tˆ¢ù»ÛK_©Pa´q}T®»£;2Pê|;°ðF²>Þÿ¨BF¿ Èm‰P¹YÑÛb—!lLFKÀX2–èhQÒ[¢¾Ä×µA1¼Í¶³©YlQWçÈ0³Ñx¢üiŒÃ¨f~ÆŸ†$feË›š›èÍnzízÛYô›í™œ‚pC\¶ê –­½©G< 1ð>M%ë¶rꊵ@5Qý–® ¦…I±þ¦ï¢vȦgX<¬üwüµÂÝ”´™·Hû1]~ò´ÚŒÝJì šÕ¬Q´GXÖ¯6殬&oïp¬rÔÏJ&kOÜ™0¬ÀWnVßÁ´í™½CÏP1ö@»ü éÝävëÊÞI5'ìÐJ2d‰ÎɕݕÖÖñ4³ÑH‘Ù;ô c´Ë’ư[WöNªiÀyá?õü°@óB½äâjAœ'Í´úÛKé %UÅmaQ\.w‹MÑÝêƒvóEÛb'¤Ò|»êd¨^úŒÖrmejÜ)«”â;RFŒÇ+„6dkgn*›BkËÆ âõNãõœŠ*m쉈ô³±X'à'VA‹KÚ–K6?ç ]{Æså“\>hÅéªû¿¶ ;oút« œ©Üü¹ùzíjHTŸP…<©CÞù#{ÚlM¬!þKÁ†èt)7cò~”D8ÊÔ­Ø4­•œB÷ÑD'6… ääÀSSé·‘øG}ú—xû'p«V”\{ÙÀwxÆÓ«8Çì™se[i§ŠKú@.xN.n(Ð+"Ÿ‚>ÕÜ%0WLƒÿÕ˜tBwBx[Ð Oµà;Ö4O®¢H×ú¨µ%jFÉ:¢¦k â@/‰“úÁk+צ'D®Fuõ òÇÓ€7äl=²gAVÐâ¯Y¸“ˆö¥'(ÁnGÃå êVÌën%gD}ä·Æf$ôõ<53z‰Dè­‰··jÀµg¾ÃSnOOÊÙ2ýXsV¼­4áSÅ%} g|ž“í²v+"ŸQ>ÕÜ%|.Wxµ akÌ! ;!0,èN§ÀZðËk—“âIàZµ–DÍè/Ù@G”÷ Γf ZýMt†’ªâ¶°(.—»Á¦èn@w"î±xÐH¥ùvÕÉP!<1 ŒÖrmejÄ&«”âû&FŒÇów8·37•Mahµeãñz§ñBw¢J{""½,dL¥tZàÄ*hqIÛòcÉæ‡Š<¡kÏx®|’ËÍ¡;éŠìû,à<²õ%‹—\΋Hû‚ú—g õŒ¹„ž(iß5>U½½.wh•ÂòÂój e—*p\åkÇKôìÑNט“%p– õ—ó¼|,=VõHÍ>Qµ˜#szbÈÑmÒ‘,^œXU^DÙÇ×c²Â¦RŒA o€iƒm,¨ô4_üª ®×LðkŠyçšú [}á9Û>y¯$Aœ_Žý­ñ‹qñlgQQkœXIµ‹ô«Äý‹öŸìšÏ­†o†ìÓ'Tž+6ñ³$EÐÙ—,^òË,"í0ë÷<ž%Ô3&\z6©üXõÆVÌKB«ÖT%¯æ™v©ÇU’x‰ž=^+bú×Rt!£þr2œ¥Çª©)Z ªS`dÎá 9ºM:’Å‹«Ê €‰‹}®žÑ±©càÈÆ[Ocne€3 *=—×*C6S#üê‰bÞ¹¦¾wÃV_xÎ6†OÞ+Iê—cDkü @\<ƒZTT3'–ŽRí"ý#:ñG¿Ã ‘ýÄÆWÌçÖ‚sŽ·ƒ€söéS9Ï]ùY@ª"lîK/M^,"=«Ðï6´6Öƒ÷ÙºY**í÷Îw¦I:AUaŸXÀ/w,À+P‘ï6$0n£/g£—Õ6ýLtVاtœ ¬7˜gôÆtŸ2úÃw„:ïˆú¹¢o<~Ä õ6‡78±¸Š¡³Z./sü•U¦¾R·ÂËW–{K¯¬æ–‡M¹-çÆ(HK˜e­¯ÖÞ_õVCg`µé¬s Êý7â'oãËîrä,ûxX–……š,oôZ¸ÝÕÈYõWŸ8««ÎªƒghpŽÛ†Z/¢ÆjüGž³ûhc¼îÖ#§î×wœzÝq8äÕw:FnãEdÕ2ØH«idÖ¢Ì< x"àŠˆ:ìŸÀÀRB=BÇÃjxpC•r—Ÿ8ËËβ®­4u¥úX>Ýí:”GSÕK†ò}bà*ôq=èŽ*ãÖ›ª*MlÿGèŒ,‘ƒy’-Q^ŽÆq5z|™JÞÇMá;×£)Ê^&ë Q蛢±+ØØáøPïv“‰šoÎÀº4Ç–LÐRklIf-™Å2—½£ï¾Ü±4¸|×AxÅø’…¿k/ݰhû”š³Áwí^9]b²ö鑚Ÿ5oGœññŸŸ3þîý‡ÃYD¡Ö†àð}N,.cè,‡J ÑâØÙ1N‚n®Ô¬ð•…ÞÒ+˹Å!AS®àÜØi sýMßoÚ÷ǨçÀ^‹˜‹Xö¹ûáý–sÿþØ‚»9 >žd`q3 ß{»‰¸Óvðì9"n"Hj­ˆjûÍCÿ!Œ3ïÕ²æ×vœZÍq8äÕvFnãEdÕ=ÊqÆÈ¬E™‰qƒrØ•h"£h6©"0Ð`=<¸¡Z¹ Oœ…gA×j“•Qg@w»eÒT¢‰fSÖ¨+BwT·ÖTui¢žfdQÛwæ6úÉp»s‘3çÏ=qææœ9ÏÐÖ· $t±ˆÚZzà?€åAí΢»9‹þ⎳¸è8òwEŒÜÆ‹Èi÷ÎwµF^-ÊËÀ'®(€¨Bô.Qœ°”P P°ÜPÜ™'ÎÌŒ3£êD ^ ]§>–Ow»åÑTÕiaÃâxB \ƒ>®ÝQ]ÜŦªÉ4ý4Ö•ÈÀ<Év(Í }ä€z† ÞÇ à W£)Š^AË Q蛢¥+ØÒᡞ v“‚õÖ Ì¯3L\g ¾ƒã5!ëö†O±¯²­Ð7{Bï3¸ØÈ›NBù½Þ”³+óqG‚óùíãüü,Ÿ„é‹Õ5 Ç/J«··']uÑÍDº— sS?~¥œ}©@XÍÎÝkÍ‘GWk#ã#«#u8–ãWwÕç5}^m×Õ¢­ŽÐi¸Þ¦•›Ç¼\DçV£e'g¾¾/þ[Fªpµ¡IPZXo 4ü;'äXyž_u—}ÇçÕ8ô°§8ì){ŠgÛS<„žâþÈOÏát>VÐHÃn˜•Ñ;ãM¯‰Ì¸7ƈÝÕí½TÜ nèM'+_O…6Ý‘”>dû¸G¼J?†>)Ñ(cuMƒ«ŒÒêííIW]Dt3‘î%èÜÔÏ„_)g_*V³³G\S÷Zcäôµ‘;#s#‹pÌįîœÏ³1}žk/ªéM\è4 óQœ<æ‰ý›‹f°§˜i83üwn©Â¹†&Aiáb¥áß9!ÇÊóüœ 3Ÿç]p:+(ít~¬†ÊžQEÝ¿êêVu¾î;×.]tç+äºwÄS÷¯º6wç+i9ÿáÓj %<]íó@MÕsGßk¶ÆFgg +¶Z¯Óueбc«2~Ö‰…{»Ö¶¶X^½þèÊ£ÖØSSW6ƒvãƒ}·ÅÁ¢¡º£îmÐÁèíéiÂ…½»¾N×¥IƉ½+ã§X¸·ëêæ&Ë[_xåakô³ÉÉûWîÞìýömM‹|êÞro¾×hݺY­ìøÚ]ç'v\ÆWX¸·ë½ –·¶öàʃ֭O&&jWj„-[ûਫ਼œç‰ÍJo™Øƒ;¼Ùá­a(àä±kn51À ½ä^ˆ(uï ç“z hŸ)†A˜„ˆíPé3Y4¸@+¶YÅ?\Çä­/÷ó @\CMj iòDÕ4ú€‘–—КVœTÔ[…Q75z¶qk,Î[¬7únqJßuUcö:®ìs<3ÍâV]3Æs0#¼ÙÈ™5brÂØ$%3¯ÐÞ 'wÅðµ`R2¨.ÚÔ DËÆÀ  €FíV p¯ØB‡" „QÆ­çë+—È´Ä€äHð‰¶³5•Ÿ¨Å+õ°ÞÂß×Ô]q p†ÖPê"Üvê7òˆl<^¯Gnšbû¸ZÌCÈ]ÙuVVð‡+üó\üµPHÏ®ÇÃåhvôìèþúVæ‰Í2o™xo;ücû·bp¡Øã/]s«ƒç%‹¥î}à|²‘&c nmÆ/Åpß’ûþc;$úLЊm–ðK/yëËM÷„ÔP“Úß@š|#Q5 `¤å%œ¡'õÆfá¶›=ݸ1š@D-®7âiqRßõ]“ê¸fžy3Mã3oƸÓ`f„79ÓFLŽ>@¤dæÚ›±ä® ¾LJ2eìÒ(ÐX½‘–*¶p¡Õ‘ñ×óë%+—È´Ä€äH„ˆ¶³9™ŸH±Køûg}ÝYwÅ5XˆlP€ÂmgýzÑdÇj5àÈ-AS,á3¿„Ï<„Ü¥]gi Ÿù¥È¹_À·ýÞrHÏ.ÇÂ…húöÙÛûów@”'6k¼eblíð½ßŠán…b#¾rðçøn½ ¤gç‹w™¨zóìÍýû÷äù âé˜ð‰|ÂvT¹Çyvƒ,/Šã2}¥`ÛØ-œw Z¦pÊòäÍEÆW|ák +Ç/Ëû[yC–áôM®pLH™–¤øãª¶”!Á÷ðög\æ6yú¤× T¤•ÓH[$-Œž-S¥WÏR¸~¶n„–Ï~Òœkž\³Ш  ½z2`"qh|‰úƒX;±c´‡0`a2ÄãÈÏ`ãw¯"ü¿Ð†üX>ú£©ˆ<„ ¢¾ãÚ¾¤ÝÔq/QxDJšŸæ$RÞ‰v}¤W$ pÝ]Š”´¥ÂRä,yÖ’Žé0£Ã"-FÚ"iáöéÛeª4Ú<\jgkFháìw! J¹¨0 ·ÕƒôòÆ€ Õ bðbqÆÑ.Õ€µi?Ÿ€xÎ ¿ |á0‡6&„{ÑHù©-¡>âÚηÝÔq·Z¸JšŸæUSÞX…ö¥)½ÆpÍ”´ùÂ|äÌ{Öš‹é‹*Òüi¤-’nž¾Y¦JÏ¥ðâÙE#4sö»fbUôºQýÛJ¿°Ü縂æoÈf ¼‰;™,¸‘|,´/…çEÓÇ·˜¾§§ßVú…°A#[•/ð^Ìd °à~Ð=²ÐÌžMßbú¾v’=ïô 3`/‚æoœb ¼×*™,¸Ýk,´É*…çEÓÇ·—ŽË*¼T|iµoôÝåht6œ½¸Úþ¢ZÿQ½ýÅÊT8E!Œ]Wã@.b:Ì~ß]¾²KËÑ7‚—WÃåK³Œ¿KX*Aí]BN 6.J„”‹Œz<ºÈÐ0A“÷ÿAÃMÚ¾rA§ñʹïxøÃ ü±3Ýï8¸ò®‚4-'Ú5¡°PvðŠadÄ7Á‡ÂKéãì¼æ§I…YÖ{ÛéGò¡ÚèN?–7RrTl¯¹ œ,2à]?·ÄÞ´Ë93?ñÓPᤸ‰—2Pª|¢¡ ø¢_"]ëRÇÚÉŠ¹Ö„”6Ež¸¯I#³¸«ž³³jf$þªh¨ÄÖE›ª†W4¹Š ÛØÛ ë«¹Œh/þÆåU°)|?¯@x™úÒrßíw¢ÛÓá4XògwaŠx±Öþli2œ¤0Æ/ˆ+„ñ'”tðX|d—¢Ï®×//‡‹—p{0ö.Á8¿¹È  Áý‹œá"./24š1‚\XAÒëX£M ³ZÛ©¡QÓýŽƒø *H  ÄB6®šh¯f›}Ã|¨fìãìØ °4 ˆbÐW\Cø FJß‚`ÝV°µÌ{ûÊ.äÌ ±†´Eb4ˆ=-²îF T3øD BmÂK{K«'kæJô‰Ì*6E¦¸'GÃB¸Ë`åËf®‘Aâ/‹fZüaM´ªjû‹ ‰˜a’É„Àr.Ö„Ì}qÌÛÏk^*¿4×wóÝ™èf5¬^œk2³®‹‹íOæ' cüŒ¸B_óS:н;}d—f¢O> >™»„ÛŽƒ;—pcy°t‘·‘C.¶‹_ä-àÁƒwi|ÐhÑöë ¼G>hÐŽ?Pi‹´9ôµØvѤé~ÇÁýâ*H›È‰Ÿv´¨á;xÅ­2âŽàCmÏQn^ã‰Ó ²Ìà¾ê–¸‚7Š€Ø/n¤ôq©½Æ6°²È€÷Yˆ]Üö®‹]&Èùaýhã„Ü3.vbÈšÒ¢Èì‰Êl.47¿ëMð‘®t¹Såd½\¹>³‚M‘'n$ÑÛÔÝ90ï93ÓÈ (kÜδø‡‹¢ye«_œ‰G E ì ìåí{÷kWæ‚;û}õÃ}yiÔ_} Ž#£¥ÙÖ­ååÑÙWŵ2[®ïÞ¯å5¾Têå)¸Y™z/•)à¨B rÐõ•X¸2[ÚjÕnkóª¸V¶JõÖ p×_×J½4Õº±ºúÅÔ«â roøèùü€/åPÒqx7F¶Fýî-)ŠÝGpw ØkxBí5cszkç¶± 4¶½Ðs|ÜMÚTûE JÞɸ‰WyˆÿÖY—¹ã{"]§`o€|l ˆ·½SosÌÇ7J>‘ÜÆnQ‰HÕWfîH²p/ÜxÅ;qÓÉ7*˜.Âã†òR„´S©RTÛ™›Oã»E¯ºŽÞɳoG§tÛ_~ Ž#·KÓ­ ·§_×Êty}÷¸>¯ñ¥²^ž„›¥É×øR™Ž»‚t}%®L—6[«7À;zU\+›¥õÖp¯¿*®•õÒdëúòòg“¯Š+Ƚî£óô¾”¯Ãc=6ò›‘û#›#’Çd¯‰Ü¬¶o/©tÓŸ{ Ž#7KÕÖÇ337«¯Šk¥Z^Ûýü¦×øRY+OÀÍüÄk|©LÇ8¤ ]_‰…+ÕÒFëÞÇàZ½*®•ÒZk¸×^×ÊZi¢õÑÜÜ'¯Š+ÈýÈGÏë|)ƒ6rgd‰Æ’$ £h÷èÜ=*ö¢žP{ˆÍØœÞú»-7;zó¯Ø~  î6n¨ýÄ%ïtÝÄ«<ÄkµËÜñ=³ðØd["ÅmoÔÕÛ`óñ´O$·±›Ø5÷Óvà•™;’,Ü w¢â¸éäLáqCy)BZŽ©ÎT)ªíÌÍÉñÝÄðèý˜Oår]w+½<»C~.M£5ueª…~$°ûtev‡®[—·vÈ{ª_®ïÓ4uyj‡|¥—ÉGZþÀð~¢º­—¸s÷I#¯â ÓÍýõCb@0î|ÂÕÈs÷Óï§°G1ú*atP”¡É(±>ŒÞÉîÔ˲À~´}‰L;pøR{âêžO÷Úë\ìØj.ªÁ@¡ÛbôÁ¸/WÀu‰nO_žÞ!ŸeýÊz }•É+“-ôQ ]‘+Ó;tݼ¼¹CžÈúåõr@&/Oîßqý2ù‹ÞÆ¡ÁýŽÜS»WÀ ˆnV/Wwhü_»²ÖÂqâÊD Ç{HàaýJu‡®—7vhT_»¼¶CƒùÄå‰Ã?ºLc÷ÜÆÈý5æ¼Ä#³Ï y?#fÎèÌiã7‚Hp¯îHžÇ޾ø ƒÃ1Ð(è ct¡ MF‰Qb -öˆ\–ö{¤íKdÚךØW÷|º×^¿ÆVsQä V£nXí‡aõ­Ñ~±z14;ÀËCõ^¯šêW+_‡fûźÄÐV¿Xª÷‹u çˆZ â£r\u2Ô­UÏßq~¢\çÆŸ8ñ°Ñ£™Ó3)¿ÉpU¦*c’ãs^‰”AÇ«¬&{hpÚ}Œè•â Ø ¢ó‰/‘š’,\ ƒ-°eô˜Y`×É‹÷tæ´5>%´´æZýžÌ¥T “¹{¼êü¶ã€{a¹2úzoåÙóu|¥W®Ÿ_Å—zå©óËí/¾þªü†G¿.}¾î~Q©bè+‘ZE®Uq­ÇÂ]Ò¹ƒí‡‘ü­Ûýbñahz€W†Öx¹ah²_å|šîË C›ýb9ah½_,#=¯üÐZ?8´ñßyï0Æ_X¨Ü~Æòôù¾Ö+¯ƒu‚u•'Ï/´?ûêËò—¾¶^s?«ÜÅЗ"õ.r-‹k-î’Î}z?8oÝìkCÕ^4ZàÕ‚¡‰~å>ðu¨Ú/V†6úÅjÀÐZ¿XzžþÿКþˆ#Ðq5v“·pT kÇy 7æ°<‰1ŒF¼œžìû  bópŸóJLò :~`²‡§=t‹Á>Î@ÑÍ |1FûG+É•0Ø[F™v¼¸a®¬ÄW-,­¹–¡×Rª†Éìu€wt+.ÌTn¾ƒ>j¹z~_é•×ÎÏá+½òÄù™ö'ŸZþÃ7?/~~Ñý¤2Ž¡OEê8r͉ëb,Ü%]û+#£#³pž‚B΂cw#–£ñc³¡§šf¯u‹NC½ôl’4tK[Ò³Ñ>¿ dÖj*êèU÷ÕγkÑB#_|}·xûÕà—^5?8þTäLxêŸj;)ÿrÊŠpÊ!ê‹'WÝõÏî:³ ¼ÿ%Æ6fóζœÙYgÖc dÒ¸LÃR¿„‚$ "™e#e›¢ñï$FTŒ¤L‚Ob|9½`§0Ú-6Š);5Ûj`©KÂC¹=2=²>2 ZWîF,×âЪŸ‹UwšÂ‹ùrä« w#ç®7ø…w7? V=9“žú'ÛÎö$„1éNFÛpÊ!®‰'WÝõOï:ÓÛxÿ ŒÝžÎcl8Ýr¦§iI0Iã2 KÝþÄ iÉ´ ()Û'1¢b$í`’|ãËé;…Ñîtq»˜R±SÓ­m,uIø$#7Gª#k# Õ*ôÎp7b9?6ÇBhRýZ·è4ÜQÏ&IÃå°%=oõ»@f­ã§â¾‚Uw^'-4òéÈçÆ#gÜ~êç'Àª'"g"ÀSÿDÛy2áŸN¸Ñ8å¸[‡“«îú«»Nõ ÞÿcŸTóV[NµêT=&Á@&Ë4,õÉO¡ IƒHª‚ l¤lS4þÄˆŠ‘´ƒIBðIŒ/§ìF»Õâ“bJÅNU[O°Ô¥=x!Wý‰Žc¤7ZY>7 ãÄ­Õ"΋‡gýzt«ž§ÉñpÆÅ[«yš!Où_E·–ó4MþÊÿZ¤Œ~=ü5yÜ/ÎUÇWS'§|§Ê›mW™­:{‡”0–誳ÇfÆ%ßzîÀ!ç ãÒ0YŽ%¨±OŽs1ie•`ˆBArrYV†ˆ<çŸ"Ç,O HŠÓµvùäÚY÷6òRKv¼Û•…s·¡o¼±\ÄÙßð´¿ݨåi 8¼cÁ Ṫ'ý/£ yš  ÍÊ)·±YïûÙ¹»ŠãËÉ““Ð’“Þtû.³Ý>Ý,uÄKtw§3xõÅÐ’Ómèâ¡%9ȸ4L–c ª¿—}{LZY%¢DP€œ\–•!"Ïù§È1Ë$’ât­]>¹vÖ½6Ð’ûBïfeæÜMè>ž+âg¸ê¯E/æi¢3¼ýßÇsyší OøŸFÏäiÊ3ü©ÿ¹H¹ùùðçþ8ñ¸ŸœWŸNœœ€–œðªíqf¯žÀ®…:ŸŒ%ºñêq†D¢þZ²Ú†n Z’#€ŒKÃd9– ú8ٟŤ•U‚A AÈÉeY"òœŠ³500£"㉲qMÌJå }Bx$Ä7‡ó¦!úÓ!ö' ‹dúÐÎ!MÒÓ3&xjR6Iß¼Y¢pu|™‘¬Y£Áï'ÎLðÏ4<ºé€Ü?¸Ñ¾'SÖ×Úó’gbp"úh®@  ~T2ËpgðN‰ˆ–NÓô˜ªv¿Õ¦åBË}0øBnã4bŽ“DHp¥¦½ð|NÓ7í_ma…FN£FŠÄsçôòîœÇöŸQí/ò£ö—íwfBÙ§gØÄûÏÏ|®âÇÏŒkú΢Oj&˜J‚ÏsB >3à¡Ã'㉲qMÌy¥{tBø\$Ä7§¦úÕݪ†=2}hçŒ&ééÇ‹Іëû³ž>¸6òá·¾ :#½ ×÷§#¡UÈw¦Ü'Ð>óÑ“ùÒüȽ‘5c±£c=ÍÕ¸“0¯ f=ggV¿±ÂÉÉ‚»Ðžâ´©…áo¥=Ë o³+Ã+^­½Ài µáš‡Óg·R®{bfÆ4¼å‰©µHùuíjxÊ»QAË:ÛQ‹æjÓIð%ƒi(é´~ á¼;ßžä¢Éùáyo©=Í KÓKÃKÞj{žÓæW‡W=œ²¸¥õáuOÌfÐ(‡7=1i8Ÿ)¢}Oz×+h¡g;¶‘¹šrFð  %­ê•e†§Ü©ö¯€L æÛU^8©b¹ïµ§8mêÞð=ÝD7¿6¼æ {xÃ.¤HC²ˆv><á}TAK?ÛÕpyלϊIè htmN냢Éõ‚Éþ–RéoöŸ.\{çC\à4gbj0?(Ì‚ðÔ…U``uP…žÆîo‚{0iÓçø$êbyÂeM²á Õ ° Üf£'O5íxJϹzŽOX—«ÁŸýÖÁwrŽó¿þ÷+8~&î?€ãøÖ}Çñ¥¿ûOþé?ÿ³_üËó/þƒ}pp ¨¼¸wá(ˆ{üW4îKÆ}Ù¸¯÷G…,ù/g¤÷žJõFþ4VLh¡‘¿p¼¿w Ž×àø;Vº÷á¿‚ãWpü{8þ#ÿŽÿÇÿ„ã¯á˜†c Žu89Þ!—áxŽ!8ÞãGpü}8þ!ÿŽ?‡ãßÂùþø?Àñ_ภÇpü8þŽßÀ±ëx7Ç)8á8 Ç%8~Ç?€ãÁñÏàø×p\ƒãc8þ3ÿ ŽÿÇWpTᘅãÿÂñÿàh@]IOô‘·ƒ>`6¡ŽCù¿Ûòa:ðºyôÒíüþoV4Chtmldoc-1.8.27/doc/htmldoc-fig78.png0100664000212600000240000004314510322727434015564 0ustar mikeuser‰PNG  IHDR5 pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFEÛIDATxÚb¼ráÃ(£`Œ‚‘r *ˆHi뛆Å(£`Œ(ÐØØ$ˆ¹zñähˆŒ‚Q0 FÁHÄ4£`Œ‚Q0b@fÊ%@¢’ãÒ“xBOåqŒD¡Î”…]˜R`^?ÀlÛ~|Ñ*åþu£Ô1ª?ÌpÓ)õ½¯aD9ÖGmr^’g‚t mV™ÓÍ¡>H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀräÀ:cÇÔ`sí܃iòÅ géà#}ãÁŸU‡t9CŒ³IDÎ|ÀÑ#Ô4tééÉý»·{xû †#Öƒ<¦›óhç4“O:®¦®C9¸×ÙÕsgÕ!]Ît6© €Pî#æ¼ ËÏ ‹ˆ±±³ÓÙŸ—ÏŸq§­rÀräÀ:cÇÔ`síÜ7ùƵ«Â¢bÆæ—Ï×5´¤) ²÷Âi{çAžU‡t9ƒÇÙDÈyA{Ĉœù€_?ýý wÞ@9`9r`1Ècj°9vîA6ùø¡_>¢59„²ê.gð8›T@dÎððñÑÓ{_>}Bs0„9°Îä15ØœG;÷`šliçi§Ó@új`gÕ!]Îãl’@ ¥ýCbû qäÀ:c4! ÷ ›LÓ Íü!½Óhˆ:žlgÐPÚ0$¶/ G¬3FÒ q²Éðñzšö†PVÒå  @CiÀؾ0H9°ÎMHƒÄ=È&Ó³0¤w QÇ“íl€Jç ‰ãŒ‰#Ö£ i¸Ùdzö†ôÉcCÔñd; €¨0`dæpîÔ*z—øÔ…Ì%ÆI”¸œTG¢9H’ ˆwšK#²\^ >¦hMÔ e \î9pð(šˆƒ½5.Yd)¬&#WÀòW+VY¸"çÈȧ”—$T‰ª”3TOÌ–Þ@@Ãd>3diÖd;’ž.Äå üi‘`0âç’SMÄÇÑ€»­d–û8S —Éhý´>²,)ÜcJÄÌÐ9Ÿ’g2MËúgy‚ €¨9 x=‰VÜàǪB¢….çaˆQX[X-¢µ# þV9²wˆiJ“á RƒÓUdÄ©þª9RàN¥nàc5ší´v1€*óÈû¿ð+£C.Àß’@K ˜¹•˜¦…å þÄ@0µã*ˆh—ŠˆÊó¸z=Ä÷†p+T§Ã´h ‰?Ac&bšÒtÓ¤<flb|>kéi2µ*´)¬#H¸|„«…KÝœB|ËkaJIê¥JBÐj¥" Ñýôs$þò…¤"ž â‘¼?€`ACçùJ܃gâÎÆSà™ÀU”34D°@Lcá-gh‘Šð€Ý@?Gâ)_p û]TðýøzôwÙîÁÓÆGSƒ¹ˆˆï|ÕÇ…HÀœ¡Ï„<ò<§ggª &” …™ À pÐÈ‘´XA·°ÂZc‘d;ý[ƒ-!‘á¬%>~“±.ë¤"@6—IK”3¸œM$BÖ@(u;ADÅ’‚ÔÄËXÇÊq¬x,¢©#) (RM†3#¦<›$ˆŒ)ZÔ£‰Â8BîA6™ì†?‘“Éhóúk /H­@#µœ¡]%Gd*"!k :Í`ÌBD[ú‚Ù7Ä?Ȉg´H‹híH"‡$6Uñ#‘V“S¸¢ «áDÚN‹‘S"­ÆÌ´ð•!Ôuòœ0žQ#òÎ "oª€˜ù< W“š+ FÞu}””3xÒfYAjŠ¢Ý|@¡Ü!ÃÅÅEPÃõ«yyùI:R•ò¶Þ—OŸîß½eëèFž†‡#‰t!ÂjÐÚ>äœG;÷ ›|çÖ ^>~^zøôËg ½7-¬gÀŸ›(ŒŽÚ—Šìl"Á·oß`wÈÐè|Ààu$%ýÊ «ASÃ`>€ “Ã|À#m> €F.$cüa„ÕhB$î½?ÿ ÐÐ-g¨èl€¢Ç|µúG4]·;8I¶«FïBν?€ž€`ž"Ûñ2D¹³htÀðtäèýCÈy£÷Œ&t6@Þ0<9zÀrÞèý£Éc @(ë‚DE„ j8zäÃ(£`è~Uum.>qIÙ—ÏÓŽÚõí˧ãGörprŽû@k‚j^¿yË[@¤Íœ9uLMCw4”GÁ(BàÙ“GÀ €›‡ïËç  å›´"á`´”@°cëFGWOâÕ óׯ^”’–ûõëÇh(‚Q0„€ˆ˜ØÓÇwéf†¶Þh)1€@×ÐdÿîíÄo Òæ~ýü D£¡< FÁ(ƒ?=@$þFÁ(£`0€· 3²] €†Òý£`Œ‚Q0 ˆÄæ4”öŒ‚Q0 FÁ( _˜ÐPÚ0 FÁ(£€¨’è €†ÒyA£`Œ‚Q0 ˆÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0„ÁëW/ñÈŠŠ‰Ñh,Œ‚‘ ˆ/Ìht>`=ªê:xœ=uDYU}4 FcaŒ@@|a@£óC|úðQRZNLBO¿ˆí›V`@ÄÜ|MP ¦ê^¨MªixÔ“q'‘¶Ó.ˆtó0‹¬jê¢ö¡ˆ/Ìht>`¨ Ù'î’‘«)Wƒ«è„ÙÍIDºx¿Ð"ˆtó0‹\j§? ¾0 !0€™aÛ¸¤på4"ÛM”';Z'Ü/óðà;¿ïË—OXDLDLUARÜ¡5ëïõÆÓBÄÔŽU=D„à]áT¬$h 4ÊAƒ6FÕñ…9@ ù<7þ2}Óâ ÌD6©U·!«$†MŒ2¬êñ4 :Y/Zº"£WRÕ’÷n_¥$„‰±t˜Åµºe£€ŒÂ €†Û|©É«z´tµÿ«…+óà7„a(€Óm'£b¦EiBS© üÕÀÈŒ¬ý‰Q@#@|a@£ódÙ¤"ÃÑB|iBIl¢µgÈæ©±0:ÍKO@|a@Ã|Z2ÅSš@q©!)qƒœ€< LŸŽ«ƒ5à…)°íOÌX-*€¡ £€n€øÂ €†Æ|1E9 YbÒ7Ö!‘pM!žv1Á…˜X‡¹É«ʧƒ9FþôÄæ44æh€à]ÌÄJê°)Ý’»¬œ2Þ)ß¾|ºyíýG*N±P«à ²˜£iŒÐ(Hróˆ…Q@g@|a@£óCüþõë÷¯Ÿø l3˜îÚ*I´IKLíh‚h£¸šÃøçä)Y D‹XÀãæ! xÌG›Ê¦[³oØâ s€b¼rá„¶¾ùÕ‹'>>^Ä¿¤‡Â+®é\b¦y *¦peú§%¤eñ(8sâ°–®þàZ€ø­Â£±0Hâb@À—OŸîß½åèê‰/Ý~ú $×lØqàÀ€òç‘=U@jŠÈf®^9ñ.$2Åó ð¿xúøÉã¸Ш裱0 ? ¾0 !УM³QßvÈFú4:0 Èì!únÔ£~´€øÂ €Fï£`Œ‚áˆ/Ìhôþ€Q0 FÁ(n€øÂ €Fï£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€! Fo²…Q0 °â s€ÂEÏèM¶£±0 FV@|a@£óCŒÞdK†zRo»%h&­ouf ú´»Á Äìå½O˜Š€øÂ €Fç†*½É–Z§ä&[ÚÝêLjd þX xöÜè}ÂTÄæ4:0TÁèM¶ DßdK;Ó.¨èæ…ÑBœþ€øÂ €FçF7ÙRXÑ¢J•@б@RÐ:†= ¾0 Ñù€Q@¸ÙHd)3ÂïðX̱@ɹ£€ @|a@£ó£gv´yuP]!I»Ò|¨´¨ÒõÔÄæ4:0 ¨P ΛlGN0zŸð(@Äæ4:0 (-€ùM¶C®V ÏÍ£÷ ò s€ª`ô>a‚ÅV§P=ÈpóкOx´>  ¾0 Ñù€¡ hq“-uït 7ÙÒÚ×£·:“qŸ0ÒÞ( ¾0 Ñ{Ć*½É–>Ã2· ÆÂ€ÇÂ(@¤Þ#@£óCŒÞd; £`àÄæ4:0´ -(bFÈž"ý8 £€Aˆ/Ìht>`YúqÔ…£~´€øÂ €F÷Œ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À¯_½ Q1ñÑ@C_˜Ðè|À¬TÕuFÃFàì©#˜WÀ‚Q0´ñ…9@Î 1ðéÃGIi91 ™Ñ  ðô‹Ø¾iÅh50 †4 ¾0 Ñù€¡$$dŸ<º;£`Œ\€øÂ €Fç†xôðί_?FÃaŒ‚Q€³d'º0 Ñù€¡Þ¾y),2:oI&0±p8sâÀh8Œ‚á ˆ/Ìht>`(Æ.;ûh8ô -!ÕÀ¥óÇGCc c@|a@Cx>óf"º]¢MŒ8©æØ8€u€Æâ7Ÿ¦7wã<¼ühu€’ªö½ÛWñ‹`¯N̰‰Ñ50@0«¬žýòåÓh 2 †: ¾0 a;€ënR´{PáRT¹Ë”K ª'µ&ÃZÜEàâh \H™!1eÑ”aªA¶h(V$Õ”£` 9@|a@Ãs>­…sqú¸Ôcv;ÐL@¾›Z–ÒçÒ äJ‚˜Ú2+€Ñj` c@|a@Ãs1Å(rñMO‡ ÈðÙõÄ0H £Eü(€øÂ €†ö|ZyJÉ`=‘Šá]ªÌ= ¡ú€ø–õsíh%1 † ¾0 ¡=€§Æ5CI×a@ú+£-kÊ]‹§­FÁ°Äæ4"æFÁ¸ªÑ ` W@|a@LÈœ?þâAC·> Iœ`¿’ ²-%µ€Ã5ÕIõaœ¡2.„uéÔhI1 †+ ¾0 áy^òÔ+©lr‡hpBª¥dT0˜Õr‡¶ÄY%æÚPRíB%)®¥®£` ?@|a@ŒW.œÐÖ7¿zñ$#*"ŒGé™Ó'xyùyøø†M0 Å!£O>JHËòðð¦rò€Œ¼Ê“‡wð(øòåÓå §GÏŽC|ùôéþÝ[ÞþxÔ¼~óH®Ù°ãÀ4²Î óllìll£i<ðêùBÁûs4”FÁPÄæ4²î Ê˜Ï`¨XGOx¥eðŽÂ(ê€øÂ €FÜýâÀÁ:ZNÑ2xGa u@|a@£÷ =ìŒÖ´ Þѱ Q0äñ…9@Þ0ôÀï_¿~ÿ-§h¼£0 †: ¾0 Ñû„‡àà¿vù¬„´ìhPМ9qXKW4FÁÄæ4zŸð¬^<}üäñƒÑ  ­FÁ0Äæ4:0T«-Ñ¢jŒ‚Q€_˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0 FÁ(à _˜Ðè|À¯_½ „!DÅÄGaÐ_˜Ðè|À¬TÕuFÃaȳ§ŽŒG: èˆ/Ìht>`ˆO>JJˉIȌŞ~Û7­­Fñ…9@Î = !!ûäÑÝÑp£`àÄæ4:0ôÀ£‡w~ýú1£`Œ\€øÂ €Fç†xû楰Èèìâ &gN ‡Q0ñ…9@Î Å^ûèÙу èZBªKç†Æ(p@|a@C`>ùæ/ é=0rß$I–²q°£Ýu¥¡m„̽qõ\Î& ­qdäðV£A7 AK‘ØÂ €†Æ|Zù8<®&ððò#×JªÚ÷n_EVA' Œ^©H$†6f•€5ä¿|ù4\£€>€øÂ €†ü|®ûáâ;„áR”Ü'Œ©³6‚‹`µM=„ Q !Ñ\Kyñ)Œ xi…\B! bV'he%•Ê©pUÌ£`Ð_˜ÐОÀZ¤¢‰#—ŸÔSbåŠÑÊ}Ê+¬¥r©„V7à)ÎÐʲѢ˜ `4¬FÁ€â s€Úûˆ).á mZØ…ÙÉ ÿ ®>1.sFÙuí(ƒ_˜ÐИ@+Ä1‡_È6ŠB— ¶Âˆ˜Ê€º­ÝÑ~Àh%1 ! ¾0 ¡1@ä¨ 14%ít¬vÁ»ƒa¦>Â3ÚÚ¥sl4ÜFÁ ÄæÄ„R!°0ãAƒ³@·bwÐ.Fm§†Øh0  ¾0 ”:´ì7ä~ÆÕ ÀÓ9 {`‡*#BƒmX‰˜ºd´¾!¦¸­FÁ€â s€Úç!Ï÷’ÊfÀ=.„uW~sÐz ¸,ÂcÙkC1G$ˆ/ƒÐæ“1‹x4ÁÑÒ˜` Q0à€øÂ €¯\8¡­o~õâI ‡‹‹ ÒëW/òòòóðñ ¹à Ã0ÝFŠ>}ø(!-ËÃC“X‘WyòðÎhþ¡Qè}ùòéò…Ó£gGš‚/Ÿ>Ý¿{ËÖÑ šoß¾É5v8p €†çyAÃ{#1¸3ÇA£Ä$e^=‚j8Çh." …$¶ˆû9J£€>€øÂ €†çýDŽùP«¾¡µ˜u+•bêýÛW‚ÂbÈÜÑÌCÓˆ „Q@@|a@ÃöþºÊôïp›ê¬Ô+M¾|þ8šaèq£0 èˆ/Ìhôþ€¡€ÖÑ匸ѱ Q@'@|a@£÷ =ðûׯ߿FK“!q£0 èˆ/Ìhô>á!øø¯]>+!-;Cœ9qXKW4Fñ…9@Þ'<$«O?yü`4(†­FÝñ…9@Î Õj@K`´@£``Äæ4:0 FÁ(à _˜Ðè|À(£` 7@|a@£ó£`Œ‚Q0Üñ…9@ÎŒ‚Q0 FÁpÄæ4:0$ÁëW/G „Q0’ñ…9@Î É @U]g4ð€³§ŽŒÏ9 F2 ¾0 Ñù€!>}ø()-'&!3x€§_ÄöM+F«Q0bñ…9@Î = !!ûäÑÝÑp£`àÄæ4:0ôÀ£‡w~ýú1£`Œœ%;Ñ…9@Î =ðöÍKa‘=çibápæÄÑ”0 F.@|a@£óC1v9ØØGîÙÑz†–jàÒù㣉aŒ¬€øÂ €†Û|æuð °k^Hº`—b¬×ÍÓÙlì˜7RihÁÙ7®žCGæ’ ‰9ÈÞVTqÒ(Ã_˜Ð0œÀU(S«°F3‡þwóðò£ÕJªÚ÷n_ÅÅ¥Ö†”›t%æ@´£U È>…ƒ/_>–£`$â s€AóðÂÂ@¾ÞºGæ’qQ0®KŒ‘ÍG®3°ª'µRA+ñÈŬàRX‹T¸8D#šzB"‹àÑ‹Y4£™Ly€Ëû£`Œâ s€¡óh1­¤&ÃLÌ*³ÐÇ¥ž*½ \Ý8OדV©©“¨UŒV£``Äæ4 ÷  Ùc-Ri1^DŒ^xÿƒžkùˆ§Ð¤¤<¥QY]¾pzôìèQ0Á—OŸîß½åáíGÍë7oäš ;8@£óƒ½ÐÇllìll´s0M § xõü !/üMx£`$â s€½?€æ×˜%u+-Wp±ýåaÔ:cŒ‚! ˆ/Ìht>€NÕuÛé¬4+ã¾|þ8 |ðweFÁ( ) ¾0 ÑýCÛ鬣í\A4:4 F4 ¾0 Ñù€¡~ÿúõû×hG ˆFaŒd@|a@£óC ð ð_»|VBZv4(ð€3'kéê†Ã(±€øÂ €Fç†d5ðâéã'Œ.0ZŒ‚ˆ/Ìht>`¨VZ£ÅÜ(£; ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€! ^¿z9£€@TL|4†" ¾0 Ñù€!Y¨ªëŒ†Ã( 8{êÈèñ«C_˜Ðè|ÀŸ>|””–“ ŠQ@àé±}ÓŠÑj`Èâ s€z@BBöÉ£»£á0 FÁ(Àˆ/Ìht>`èGïüúõc4FÁ(¸ñ…9@Î =ðöÍKa‘Ñ™ºQ@`bápæÄÑp~€øÂ €Fç†b/ƒ}ôìèQ@)Ð3´„T—Î aˆ/Ìh¨Î ßÌÔ½§… u ¨·Àù¤ÞD7x-lìÈ÷dihݸzY¦È(h˜H+ƒÑ3ìZŠÄæ4„çÐ Mª_ÛKdƒl/­Ý<¼ühw%óó½ÛWQê‰ÑKfFn ¤ªY% %!øòåÓhp E@|a@Ãs>×ý½pqÈ¿h y2úÈÚ1ûøfšÃˆÀÜ ÌÕXó0rn‡+€(†K!kĪ~ ï 9UŒ†ÏðÄæ4 çÐÊP8W¡K=‘\ý"d£BÅžZ®FæbeãQ? †w0ãà _˜Ð0Ü@L )vÉî[P«°¦bq§+€Kýh>`4ÞG ¾0 !<€V(cNPR¾S¥¼&µšüíÄQ0¼û£•İÄæ4„çðʸ†}èЧƒ±Ôê Œ#³€§ýaˆ/ÌhøÏŒ‚Q0 ˆ©F+€áˆ/̈ ™ZvŽ Ñú€$qš à`5–êváoåQ}Ü` Ýj`´Þ€øÂ €†áyAÈ󽤲ðîÀ´ˆHg +F³Í|òÖ†âªЪ‚ùœTõ£`xôF#zøâ s€b¼rá„¶¾ùÕ‹'...@‡A³"WCÐUÈfbŠSnðB³2 X `‚۷飯¢aøDÅËçi:52 FÁà$eCâ s€ÔóøKdÌâ—zª;«Ehå>1®ÂʦJ,è‘«²Á…óç¾|þ$.)d `J’%Òµ£%Å(®Øë½võê»·¯Œ —ìDæ4¨÷S"7¥éæjU-4/"£¥¼$tó8Íqu°º-)FÁp$ÝíL|a@ƒb>­Ç¯'Û(z:{؃Á¿t—À(¤æ4(æð4‡q ûйeM¹Ã†4—”ùúåž-Z´"Â|Ä(@Ž‚Q@‡lHü%²Äæ4”æFF@ž u˜ÈÀЈ<a xõâ1šÈ¯_¿0ÈÚØ9Œ–£`¸`6ÔÒÖVÔÝ@Cæ¼ \mm}º÷–­£C¾}û$×lØqàÀ€’ç¶”w†8å&?ES ($öþÝ+66hÓ>ß$ ìÈ*¨ ׎‚Q0àyŸøÂ €†äý¤Ž® 'ðë×` lÐúìhˆE´«lHÀ~À—/Ÿ€m¬²R2ƒÇ©£`Ðsv4ñ…9@ ÕûFr?€¦Õrò‚ÜX4xNV<<|£EÀ(­*#¾0 Ñû†v5@u“Ñ’í,£`PžCqâ s€½?`WD¦†¡bÑ(£€Z€øÂ €Fï£`Œ‚áˆ/Ìhô>áQ0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`¨6ÚÜöþ c•=Ûà¸V~Œ‚Q€5‡bÄæ4:0T+ÚÝ«Ž¼ ˆ¦‚Q0 (Ì¡¸ñ…9@Î Õ €Öû„!±±±Ñgƒž-£7ÃŒ‚Q€5‡âÄæ4:0$+šž™ 9’rfÝ*<>zñ쉄”ÌhÔ‚Q€œCñWÄæ4:0T+͆é‘Þa¥ýdÀûw¯O…2?¸#« 2é£`0wlñ…9@ Ø|Ö£ùÑng„p1Oä'Ò|"o†¡âÑChLÒîP#¶áU[½/úG§FÁ( _˜Ð@Îà¹ã…¦%)æõ´(¬izª°yŽÿþ€U+W`ÞFÌ’hÇ/Óè–4ð )½Âï6ÿáÝ\2 FÁ ïu@:ñ…9@ ºùH;×Í\¸ŽŒF¾Õ Í‚e1ä$j¸F4c‘Åñ»ÍR\—ΣUoh.§J/ëqÕ Xk<àöí;t»N> ñòùãÑ«"GÁ( /_˜Р›À,=qŽX nÍjUNø]‚ËR\ÎÆÅ¦¼@¾DžBpáü¹/Ÿ?‰KÊ4Šq)IQ"]2Z Œ‚‘ €=ãkW¯¾{ûÚÈÈ bâ s€Èý´š§Ý ÚÁT7“Z€Âë㱂—ÏŸÐ0W«¢ÑR`ŒdÀFÊp(ñ…9@ Æù’ªƒÊ1t»Nt—À(Äâ s€bûÏõa¸†û‡%—”ùúån’&êj°Ñ{lFÁÀlHüÙÄæ4º?€Ò `ðÈ ò$ñãE†F àÉ(ƒàÕ‹Çh"¿~ýÂ\üjcç0šðFÁHÀl¨¥­ ¬¨»? €†ðyAÄLÀRR ÙºœäRÎ&{ª€n‹‚Ö†Ž. £€ìlH|a@9@êœ0òJJdÅXWX2à^Šf/Úd/²Q¸Êw<Ê0-ÅåìáÑÉ  àæáƒ/ÿÿöå#d+¼€tØðy÷æÕh0 Fñ€øÂ €¯\8¡­o~õâI ‡ÒËÏñòòóðñ†ïÈyAâ’²4Ú3éiÂÏ ’‘§yàÕ‹Ç< :z(ÅËç!øY@÷¼xöDIM{4öGÁ(€çP\ç}ùôéþÝ[Ž®žx ùôé3\³aÇht>`ˆ¦ƒô1™ø9(² Øûw¯ØØ ]Wø|“0° « B—Œ‚Q0lò>ñ…9@Þ0ÄÀ¯_?€¥$°@ë³£!Ñ®²AÀ~À—/Ÿ€í¬²R2ôqÆ(Csv4ñ…9@Þ0Z àL^‹ès‚4°àáf£€ I…9@Þ0´«ª›Œ–¼hgÑ(£€òгd'º0 Ñù€!\ ™†ŠE£`Œjâ s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`hAì'ù|x?zºÃ(#_˜Ðè|ÀЮnß¼‚KVTL|4ˆFÁ(™€øÂ €Fç@ÀÈÌ™{îÔb´À•!³é\hëc•ecã8ö(r5@ž#IÕE’z\Š 2 > FÁÄæ4:€¥@!µˆ¨ @^Q• výJ@Ræõó'†ÆÖhÕÀP£åû(â s€éóX‹{ \€wà‚pY1Z—­£€fšz2zll쬵½€°ŠÿÆ‘Hr ®€Âêe̪”¼bàãW?Z‹Œ‚Q@Ra@£ó¤Õ6Z¹OdA‰ÉÆ*H|ù®PNuæ†]Äÿ»!@¼cH b‚‚ÂÀÇ_aPhÝ(Ã_˜Ðè|†&B†-Ü<|ÀBÿ×Oè=‹lìÐq! Èï/Ÿèìx—ˆž«¬­FÁÄæ4:0Àµ åÃÀ¢Xè#Wƒ§ÿD·þµsŒ‚áˆ/ÌhtÀ`édP2|1+ZÄð©´j€òÀ£`â s€Ú`pöèVÁàš˜£`„â s€bBæ°³±áAõ(Á²ÀœÏ¤]c–í¿ýúýëç×Ïl d#¡_´s.Y<ºh=.D+FÁ(*€øÂ €Fç°ThíJü+)q I37õJÞÚÐï_«ªëœ?{ÔÐØÈýöü ×ÏhjHÝ€<M–$6ÞeXø¤:¾X‹}tw0{Ó ƒÐÍC‘ÃÞGÃ/FCc44ˆ/Ìá €H›xüàί_?³Ï1½0Ý<$9ì}4üba44FCƒøÂˆ´ù€7o^ŠˆˆfŸczaºyH8rØûhøÅÂhhŒ†ñ…9iûØÙ9ØØÙ³Ï1½0Ý<$9ì}4üba44FCƒøÂˆ´ùvvvbÂÈÌáÜ©øEj!`z7“á`:;èd.íÜFç`@O ‰X i:¤<[âØb34C·¨$²0‡€"m>€‡—Ÿƒs1•ÔH¤É¸À—ϱzH7cèÊ…Tt©c`æ6L‘dûzj¨ÄÄ|ZÛBaÆl‰s`‹4¿£qiQ¤ï\ €༠`¸ÀÙ˜ižîq) àr½€'³a:Y%.6µ‰ÕLd×â 1¬AMaS7؉O$xÊü)Š>n¦ƒƒ1í¢bQK^hLœd$B‚êq…!D¿:‡®R—È*z €è}^þz’ìR•v^ ÆÁ´ª#ÑhuÁP<>Âå$ü.$;‚(w3L£¸£Eš$&d¨˜h!\̺‡ìp¦bhà/ßpù˜¡–ˆVç!×]”‡-FÁHê àR‰IÒÚ‘T 1ªwÕÉðž¾VçáÏátp3 W'iQ1éV%‰–ÖcM~rå$Þ D«û0{ÁT©Z\@uÓížš5å>Â.ÀÕ¦…7ÉpóÀ:˜`U4ài×0-A•d‡ó€Ü¤BÌà-¼@0@Ó:œB/`msQÝÁt»§nSs”;fCk‹µËEž7)q3­Œ<´i>-Æ‚¨’&ñÏP7Ñâšr Jú¨›T°Æ,­“7@ ·û†„†ß= døOùEŸ…%¤º™ÎÆÓ“M“´N!T Z%E¼ˆ ™óó×/<ˆnƒ”$wÊÝŒÜ#Ãã6䯩 øHr$V÷`Î ì¸í’ š³ 5ñÞ¤‘›)w0žÅ6´‹GòBƒ˜ÄII"¤bÂ&Éjj…IÅus1ñ…9@Ñû>a´`Â3™F^?ˆ*^@s…+ù(w$fÚº MŠ —“½vˆ¼±u\žÂþä¥(ZÇ}Œ?wP¸î‹ìŒƒ?q’êY"Õã pøÚPJ™Z¡A°|ÓŠè–¼åìh>>^~±0£¡AÐ Èy]@¡Ô\\\-¸~õâ“G¡Ï]=ý¿›‡„#‡½†_,Œ†Æhhã8øöí¼ Òú£`Œ‚Q0 †:@îÐp;/hŒ‚Q0 Fñ €huÀ(£`Œ‚ÁˆÞç‚Q0 FÁ(< €àþ€Q0 FÁ(ƒÐè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@$Ï\¿ve4ÔFÁ(£`pM-’Ôió·o]WU× åQ0 FÁ(œàäñ#Ʀ–Ä« æîݹ#)-'&!3Ê£`Œ‚Q08§_ÄöM+Ì-mˆT@¤ÍHHÈ>ytw4”GÁ(£`0â'wˆ´ù€Gïüúõc4|GÁ(£`0â7{ióoß¼ _º ‡3'`20ÕÃ¥ÐtaêÅ¥«xÔàW€Õü$Õ(‚j(·b0§bàI*tpÒ(@üf/€"m;;ûhøÒ`8DäÒù㮞¡%œœ3ÑÊMغE0í¯«Ûp9 S– QÄ8B+ ÆyX=K0訛DGÁ€â7{iól@%£ñMß:#À‰!(ˆ+ÑÄo\=§¡m$l8ƒxȲh"$ñ¤(4)b¼‰ÌÅoA×ÙÈRhfÂÕ“ª€H“‘•¡©Ácy‰—QÅ!‚@s0W¼úâ爴ù^þÑ:`HÔ÷n_URÕ’.„ $I­H­9°º«¸8%u¦áp5ÈÞ'Þ³h!GæK7(×B¼bLFÇô CH­pEŒ8ăsˆlšŒZƒ/_>12@£ç vÉf#@*-‚uÉ€8 ¿«* Ædüât b¬€ÇÖ6Çhæ@@|a@£ç ¢¼*ž-‡h†ÄÓÔ%¨~{™Zõ:ñæ`ªD ÛÑ&È0Äæ4z^Ð(&½¥!Ô¥Šó0Çdˆ±kààr©V é6Ç0ÄæDÚ|Ûèœ0½yóhô˜ãõt›‘WyòðIÄ%…K%¦h‹Õ ø]‹Ëvdq¬l’ê_ˆ ¦—ñ꣨â²Ó£¥Ä€—ÄÏióà:€c4”é£d‹¼zþDLRHbªÄhâÈÚ1M#¨S=1Ä%…U%¦x\ˆ¦ ¿kqÙŽ,Ž•M’dKqÙˆU ²,Á˜EÄ“*pÙ…Ë 4q8{´”Ðã')óDÚ|°`/¢/À pRE°²!¹¼û S"ˆÌ#^š,1j‡èÂc\ D²›±Úˆ+Ñâ±Á°Å¯€H“‘•aªA“²±ÚŽ+ Zð‡3.+ðXl,fdzöˆŸ ÷°q°Žöòè¾|þH¡V6¦üâ$©!Æ2U åÆ#‹UФ°%†M‡˜%É#$Y‡U/ZARzÔ9 ~> €H›Vø£uÀ(£o)1ZD løÿd e> €H›øýë×ï_?GCyŒ‚Q€xxù!­þÑ"b`ÁopéOü|@‘0 ¤¢ríòY iÙÑP£` ÈÉ£gË88sâ°£ ñꈴùM-­ë×®=yü`4 GÁ(£`Ww/’ÔÉ÷ {@4У`Œ‚Q0ñ3@£ç‚Q0 FÁÈ4z^Ð(£`Œ\@£ç‚Q0 FÁÈDò|À(£`Œ‚aht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. ”:àÛ·o£!2 FÁ(#ÓhŒ‚Q0 FÁˆê466ŽÄ(£`Œ@@Œ£¡0 FÁ(#67œå .¥gIEND®B`‚htmldoc-1.8.27/doc/htmldoc-fig32.xcf.gz0100664000212600000240000011205410142763627016165 0ustar mikeuser‹ìZ |TÕÕ?ïÍ’É>“u’ $„ì!$“„„`XŠ‚‚Åeð+® òŠVqÀýk‚Ú~*臢`ÇOåÓV«bƒŠ±ZJ‘5”Ù$²¾yózνofÞ$¡¿ºÕÚŸ“œß»Ë¹÷þï¹÷œ{îR=÷–E)·WÍI¹­ À¢ lþÃ0 GŠ@Ú²eK[[K^¿©S§®[·nÇŽMMM«V­ÂŒM›6ƒ…JRÑh$Ó¸UDø‹AÒ#Å"Å©aÇ…4üš«LÞÜ[fTÏΫ^ƒÉŠ”…p§ã$Åé1©i<ÂëÆ…øÌÈgNA*@ƒ4é&$ăsÌ: 1X§ ]t Òr¤Z¤g^Azé#¤=HG:DNÝ„t$¬#aÖ‘€u$` XÇ v€Á6€!ÅCq †Þ‹ôk¤5H/#½ ñ[€ì‰H½(¬+IÁiîCáSAVœP¢âqB9è•r0Pp$xê§D¡" ™OR(„Bv§O>DG˜¹®[X‚-HÿÓ3C‡MôΗäƒ#  <—É¢,oNĶ:óeY’eå±0lî|,EYj¹V¤6ƒd½,HnyW¶Û.´J”’üÎ l¿û3•%Adwׇ"yƒ$ ²¤P† ÷JrË5:ç^Äâݬ0 º÷— Z´ßUª}ÓÍEÒËúd‘T1T Še¢LO¥OÙi¨¤Aå–’q*w¥ÖP§X(-›j0S(‡Be˜·©hž£ø[¥‘ƶhD+!“øõŠT P‡) ”HŒ:¥Ã&§ž …p²R‡ªê¡EœÏî˵ÿSéa˜©¾Ì v”±„€»NQPŒ3ˆ˜%ÝÇk’Á9ô•LΩ#Ƽœ"eëÖç`ž`P²Á¤2Sdz‰Ù örx•Èaä ¹¤-•ƒÇäÊ:4y,R:Ч Û(ã —q@å¼ÊQˆ{ïLïaëõh…StjæIû¥²:i%öSWÂéŸR6ŸÉEÖÉ¢$Êîž‚qP{ã·AöP®@í×êp¤$S—WYˆC”ô¤ M¨i §©*‰iœ‡¸Œ²üº•&ávTVÕ×Ë”#8·Ð=‹YnJ>ªÚC·r—óå[%9HÖ¡KTLnLÉ뙂in®¶^F¾‹à¹‡³ŠDLèXŸ%*#É’Ú)²ÈŽce”Do{jOåã:”Ëyá43 —V“šrÁ½ “ƒ,güž—eµ°Ž,²5RÅ] U3ƒ­ñÂ+0UºÌ×Ãm^~ªá “tR¯Ü˜.l÷e`E™ [,pŽà‚•±óÑC0™ÐcÂØ¾4š{U(tÖYÊ@9ô TD’¸ ypI<òÒhâYý¯@«(Uɾ!É@½’EBÇ¡R9;ôZÕ¨NF;ö{“"öƒø± ‰„ S¹±~A¦î0™yëgRÄo骈ºÚÉ ©Æ—J¢Ò†lÃ!?kUGŽ,°•Ãq˜Ô·»JMgÈÀžH†ƒL±%q»Ì§ÕƒŠö:*E†¯"6.N\¡=L»å*Ö$ë4ö@‡3·‰g $uŒ¦V…_Ì4þ¬*|jþQ=¥¯Çôlè­’9"¹9ŸÆAd6€ãÁDdE;Ëí€UeC|yLõQ0ÈD°˜%sÈTpÝÏãŸXþ™%`–qLe*êrÞ«Q¼Ó£T™ŒâB«`"MgÁx/šn°4RN%”VÞáÀŒý0°P,÷ÂÆ>–ÛøXŠeâú‘EkˆgÖ7ødy«Q+U› ÖÔ†U*(1χٮé‰S´ƒÓ„²+u .O ”‚lk¦e¦ƒžz²¿tÜ.…RK¡»Fi®Q”f(.‡¢Ø\ŠâBߡӦ(hV”(†¬Á…Þ)ÖRJQ, àÀèèÀ0zPµŠR.†ä RH¬–"ÀÍ.Ñ%*îz— Àc£Õƒ…²Q¨Ô¡wôÔcB”0T‹Þ Éã[J­ÚÀ©û=7â8lç Åwnn‘[6ßYl ¾[Á%H~Ä‚cçY¦„+ò2Ǩm!(+‹"Ž@ÑE)òAJú:IO±Ü$pÁóÏz6š8KØøÄòOÿT|òX¨€Z\­Ì[·Ú”Ú°‡—§zž¦GöÀβÁýºnSXò÷âšæ~—KçßÜÍý½Ý?í÷~×”òŸí«éEÜk-†$L1¡!Ô ¥ØJ1*ªr”‚‘ÖœJ¾æ¨îk÷[Ë™Ãê4~ ßOîÝOîß½³zvžFä9§uéМi\9ŽFŠ¡Ãï¶¡!äÎ.Šù<´‘ÐåõÉÐvvs?LÆ ×ù*ó{\eª«UÎ|,6y Wè åÑ´¤‰>Ø>’é8fØÀ£wV§D“6$y³RaîK"|/iU’PQØF’™’}{IfbÐÒùö’ ”åK°) T‹º—L¢Vã±u+ÉâÉß"”‚ ¤úZâ”êÚ†è3|]Êðu6Ë'…Ÿx.àˆéf¢xŸ“¦"rxp­¡‹B ¡p\ÅÌiráxHµä<•CW³Ò\ZërÕàK¥èš¡‡+£“…%k©$9VÝè™5×8jуè@I \rz=îû2—ÌÎý@ÔŽfr«ì< ƒyVvîcIÍ.W=¥0ˆõh±¡btëYóä3¢§&PgœúãÜâáĹ /†^Œèõhpþ¨[y;8ƒh3#£_ÎÝ œCl#£ÇͤDpKÞ L,yN8­$ºs‰' §“ËÏ|-+h7+ ä†Y¡W³OI Í nß%‰7œZÞÝIùsÉ´åH"/™ZK¢ÖBþ\ µ®_3C|†h ¦úð§ùº–®éw†F*Y‘åhäùSŽ[QYµß¸C•½»¿•ÆÚùœgfyèü–¸<^ë[£[Ä‹xm.š³ocr-fÕraï1xË×¢ÌouRE›d:Ö\·Â0Íe+ZÂ<ïm+Ýtæi.[)Í–†xÍ+OeKEœ÷Þ•§é•8õê•Ç |‹Ì#Þ•d°7®®'6œÁ`‡Ѿ¥%‘ÇðõÅJ}‰ù7ò£´ƒôõŽpøës-WØï>ÎÞçÎÞ÷®°ÿÍ›‡¼Í¯Ýpä¸tCYö¹r“Eš7nr¬B÷"þ 79OA[î½o“+(ƯÛ(\Áò+X± Váhjj4¡Mz¶ïwF”ã;Éò–øPÒÁJÏ ÔÕ¡8žì´%‘b©¤ v.3ä›|†z«IüÎpÄÿ§0‘>B…t*L§"vRÑvuå2ºzé(ÆFÑqÁ€ÇFN ÝgIìJ­L½!+SÏclÚvW~Á¸÷F¬L=âqê‹ÙT6\àð%Gsˆ¥9\ÈÐ:¤ûŽ"Ò|Ǹ½ðŸY$Ò1û¬gã…K-XþÉ㟊€O^ P‹«•yþUG"4Šºü¯¬]>¾˜}3Êÿº‡ÏY³æ‰wF›½Ï|¼“ݬyéÃô RóØÇªX4}â5üþ3ÚÈ€5ˆ˜š5 ‘ ­©ÿÕO’ Bûð‡¥Yßþ$ñùŸÿ¨ ¾@ßâ×uåc= æ~`ö6”û‚±>a„p7.Æ'®PîFû¦zŠQ>±‡sŸ1Ú70‘(²ØŸíÛz’N¡z踶½%:‚ÕÓý}1»Ê7Òñm!tÙø°‹[–Bf šq@Dˉ­ :ÐzÔÛj\®–ïE«SOçÉìøûÑL3¼FªuÔ4󪼇Ät‘Ï ¥‘Áªg{4_´–¦D©÷™R˜Â­R¡Z@P+«¡†j0ä®w1ÈtŠfѨÈõ„Lv0XôHAçpê¼:°:Gj”¤ Ho\”Œ{,Sù8Òz¤7.iC8‡Z‘€Éˆq2òMF|“gLi¸û}¹i’i,ÒH3jV\ñ$ÒKWߌäp  6¤a×]pö¹ê!Ä|m¿GÔP¡Ü‚¨Ó‹z·NÐ@œt† àà %@+&‡[¢££"ÃLFJgDCpdœmHêAñ–0“A' ¿Ü"è‚ÂãRr KFd§XÕô8!èƒ-ƒrË/žrù¤1#²“ãÍ!Az¬& Ž ú˜¡#&MŸ=wöu?[”9(6"˜5‘GECh|æhÇü»î»÷Î7L¹¨ -):œU™‡EC˜5gÜ w<ºöŸª]>ú¤ò¼Tl1ˆ²‡B³€Ù¹ªîYû꛿ù™‡Y=mÂÈœä¸È#5<š}h|΄Ù¼ðNý'[ß~ùé‡n­ºrœ¦ýd8„Øâ²ÇÏzpãûŸ5ìÛñÑ[soÍZƒásìYLæ˜÷oüpï—_55þíƒ7ž_}÷üé—"šµÿ68 èLÑi£¯_ù GZZŽ}¹oÛŸ^{öá_Þ<íbeæ a?òY†”ýbùs[޵žm;}ìОOÞU±gЉ¦ ‘Q ŠL.¹úöµïí=ÖÖÑq¾íÔ‘ƒ;ëßÚø[8:hV‰Œ Ð(#l…S—<ùö®£íÝÝçZO~µQ®_}÷¼_\22ËJœVh á‰ù“>ñæg‡Û:{z{º;Ïž9NH_}æW·Í˜Ržc³f<4p‡Mœ·êõíÍ­=’ÔÛÓÕÑ~úè»?þã†ÕwΚRša Òk;“á„9¿~õ/MgÍmoKwçù¶“_5üå ÞvÝøáƒ,&½Ê›9v惮?qº£GÒI-¬â“_îùèÿŸrVM*L‰ V9¹<ïÙ°õ`ËùI/êíéóÞÞãgUÆîŽ3‡÷~øÊãwÜ4±(56Ô(rF¯Dwmï"ÆÓ½]çN~±íkœ³'L·FPo ­<±ëØtWû±†_úõ‚+Ge%š™8°7qvt÷=§HúmGv¿÷ÜÊ™— Ž 1°éÁ„™CÂüôЩ³B§ØÕÖÑŠ|ëœ7ŽÃ®Ì“P¹ø]ýcgZ…ÖSmíçΟk=ºïýïŸuÉpërT¥¸bý–ÝMGŽþêð±–ÖöÖ?ymÕ¢+F¦Æ`³Èv€Ëðš;Ö¼õéî}{wíÜÕpèè©3-Í;7¯[9cB^’Úì”ààâ+jV¿¼yëÖ-ï¾½yëöý‡O¶=ðɦǗN•fd½8 Óò'Uß·æw¯¾ü³k×¹Þþ¤áðÉÍ{¶lxhîä"d‘)ªö˜k—>¸úñÚû–ß¹ò‘çÞütÿ‘“ǾØþǵwß8~oç8ö7:µdòŒ…·-½eÖõ×U-~pÝÛÛ¿8vâÈþ_{l‰ÃÛ´9uA‘I¹“§M¿æç3ñ¿üêź]_?Ѽ[Ûx8ˆ‚ zèØ³PLʰ‘UŽ*ÎËα½fÉêWêŸè#ºÈˆ‚L&,Õ èM±ƒÓ³³ÓS’¬ CòÇßp×Óoþõó~˜Œ :½Ñi‰b%Eƒ)<*ÎjŠˆM)¼´úþԣΠ¢>($"*>)95 ã ,b 2…Å¥•]U³ê•ú†õ­µË}XudâÁ1I©Ù%壅„à FÁ¸Ý ×éôA‰¹c¯¿SEÜȧsÄ@­„E'¥ /?ùêé7àJ*:Q'ìÑÈ'Ûîz‚{üËÝu/úà¢8Q"q)yå§U-Xv÷=èíÄ®†Ær”õA©‘?Òš^ü³iÕËxlÍóÐCÚ…ÃçE¶íó£'7~üª™Þ`ŠLÈ,½ì¦[zjã›?¨Ç½ÂnAEt_D¡AÁÖŒ²Ëç,bã[[·ïÙÿ9.þ{úÃY³ü†q¹Iæ°ˆ¸´’)Õ+ŸÞôÁŽýÍÇZNw?0õ¯¬ZteiZ|t\Š}Ò¬kÞøx_óÉÖs¸÷Ùë…ÂÇòxÓÎͨÛ†§$öwö®:ŠrKßÿï:ÝIȾ!Kg% a „Ç* €€Êê=*h€  èCeqAÑ7bôÈ ÇAËñ‰QsâÄ€I„Ä…@BH  ! IºûŸûWUz©®ªîŒÇsæœs*ªº÷þµü÷Þï»ÿí0ñõï<~¦þZk† äL?;^ÈÅnùͼYÙÉqÉ£f¯zëÓc¿ÖßÀðh¶XP¶Úv;œ8S[{æøÁw×Η‘:ô·6ïúº²îz{—ÙB-Bªâ—°ôå¿*ûåLå±Ïv¬?aè1³WmûüÄù«mf„É‘P#Ž>ç‰7ö”œüþ»ÿu圱ÆOZôì‡Uõ-·º-V5³#™:aѺí{}ñ÷Ýo=½xJö‘S~yï±³WÛº,V/kO³>ÑCþeÉÓ[ÞË÷µµÞ=:#mÄÝo=pâÂõŽn.Ôj¹Å Ÿú缿<».wÁÔìTSÒðé+·*¯k¾e¶zsŽ,ÂMÃ'ÏY¸hîôñY ûÇ ‘·ãÈ—Z:ÍhÅÊ0]än—1jܸœ¡ÉƒÂƒC£‡LçBõ\Hg%l îšâ“LÑá~¾ý3¦-߯‡ê±3íà7‡…øúôÕûE¤Þ¹l‹pÉf~ÉÑPÇýEo0}ôè1Þ†ÐÄ ¾d¿q'Å9•ŽPŠ@‹ê;û¢<ºÑ¸ØÏϨïã¥#„¯ ˜Zãõò±Q4›3rHJ\ÿI ¶dñÂû¦ß1:ˆ¯ …@ì¥6<÷ðÜ©9é1a˜{ð`:\Û·çãü·_yzÙÜÉÃ"úáQ<ØTü}QÁ¡½;ù[•Ùç©4¸Zs®ú§²~±÷ KgŽ–÷` MMWj«+Š>ó²™#ãC<¥Â•Žö6ĵ?ÎßôÈ´¬h!y§Á4ØÙÑz­'à{ë˜ÑSK“¹»³ýFïÇ>}kÕ¬1<ù¤€—庹«ýºã–LL GóxÔv¶]=âóm+gd ðï#€DoëuK÷­–†ª‚×ÏÄ-$Cë KWÛÕ³Çö¾ôà„ăWÏAsÇõ 'lYvgj¸Q8H˜·µÙÜÙ\W~hÛòié¾Þü(e^ÖfKgKýGv¬¼+#Ò¯ tL§pTå*-<ŠÃÝ’ ǯ¡»]va¿«¦ß».0=Æuùé£X’½Š²T§Âü½Ý·¡å–™»oÚ#pp,“5c¥Íÿ­Ô:®sÜ5½¬×,æ®¶&>óìóØ6ç¿qœójâàQ‡DòÏ»%Ÿ×¼ Í5ÿ\Ð&—?k5Ù$Äq6¡N1B×iðE~Zƒ ‚ .©3BLõªŸTå|˜sÔh$Áo*ÔŽŸR¡s˜á•9B”ËŠÄŸP¤k¤(14Eº²2Eº1/º°/Þ(BÞväÅÄÏan§sy×”€lù/˜…0sôê„¢½³…â[8Wª::s Ä9xÙV²q"q~Ðê)eŒÎȧ„•%=ftgÌê‚°úÀyYÅ•üyÃyYåÄ• zC Y+€A/8'«‘(1E4Ëj#ÊÌ‘ÂYYUDÆRh–ÕC”‰%…çZˆNEhu,ƒôU Ú >–‹.*>Ö:* ö’‡ÑzIÎIÁ^ë0Zëå䪜¦6Èh*8”8tH7dÔªÞH]]Î;”6¸~½ŒÄ‚cYƒóÙKr> öº†‘ß¼3±Zéc­uáBàH.ûZ/¸Ò"p$š}gÖ©öª›e,T™@Ñ?ô[/c0™!ñåþc ÿÀHÈ{ºˆ—Ø++¶sùot¢îgeDYÅ5Îʘ³"á£pNF¥•øŸÎ³ %{]Ù¡·’bå!É,z»lzíØhÄœçXI¥äqw&˜x®Kdñ:;Ó è<Ùf_Ëÿ}(RÛÍ`¼½F{›áÞf¸ýܸIÂm7Qu“ÿvã&¢ˆ¦—"Ú."‰hygfÚ~!Hh:„ ¡éÿÓœÿ(¡4í[¦½("›í­³]Oò6û$Çó s»Ý>·æ¯pd0Ìü­.ñ펆N) Œ‚[=!#:lAa$´ÛÝ~´Ûwìž‹;vçÄ»âŽÝÇF¸¦*ðxÓß®AÝ®A9vQà„öéEݨЫæ‰nü%û&nIPGìEËDG>E0ÚS°:Ý›n ð•ŠW?{Ú(Á[<í‘R¾gíÂ+ô¨3§Åš"¸ Gý|æzÒ Á˃.ÑÿÜ6@ ¼ó ûzÐûÀ…Üv> è<ï®ñ'Kí¾«˜Oµú¬B¦Ójz°òJ§V˃  Ùï ”B5ÚÀ¤µÚŒè‡á®Ëךù­l¡YX¶u^eFÈÖì¼ÀÌ8¯-ó¥]§eeq­×aEYXëuXLFdØêè;ĺ]‹åÈÁmG:¸~¶=xŒ²ŸüÍBu"µßàœuüÏ~÷T‡Ù¹”8®¹Ó¡[©z˜W•˜ñ`¸¬Ì¨S Q¥B˜ *uÁdøM­ ª5ÀDèÖ¨ü%@½zQ#º5ª| `V/ø˜Àª\Ñ3A¡$ m$ñ`tm#Ê*uñàeUj$‰PY“7Ä*r®Ç%yY%N´¯ÐP"^¬î&Þ¼ÚV^eSh>ˆwzXß8>,ÍGìòv*in^l½z*Áu2Ù*S‰Zs°Q¥ •ì<ÙjOÉêþ¡âOM %¦4èV(.¥£?;–21PÒSY‚ÃNÁ N·Ùá1ÆaWTÜfGÅx^ ·: anÁßtDÁ‚„+üm·Á_p¾-NÀW\9Ó€¼’€:ØåùD å ç5Э4P­´t§ f…óVZÚSìÂÒž:BN«cQaåOtòx(aË&Wl‰¾!"Èfg)¤D'œ&e@;3 ó Ю!d@»¼m(SD›,ß±I ¹QÂU<7JèIH“"FÂ4Ù)"!iù-$N\~CTÿ^ˤP,÷Ò Årê%Ë)lôúÖÉyÚíìqtØ"^€Ž„[=,/:%"‡ãKT “ØRéÂ…TÚFªÐ–% ­¶3“ÐæÀ:ðÙ¸´Š‹ù=Z ëâaÜt¡0*‹‰ÁpSF\´ƒ EÎX4+êPᦱÛ%böƒr7MÝ®XÃÊÝôu»¢(sÓÛ­üà7ÞJÈÅ.¸éôVÆ4F8é¦ç[1)á‚›îoed„ZíNpåôm€:­¦p%ìd€Kíá> ¸Ê.itŠû(`.¨W§N p åÕi”Ró^r% ‡­åJè54úÌ•pjh´+!B¼o­&tE°ˆ:êDMGúh6 û(`L£Zë°"î Qè&V‚¡¡¼Ø¥¿XyZ‡A“Bϱ2F ªIòFdEçŒ*Už,±FÅVY£à¬K³Bì5ò®fWˆËënWZ£Ý¯´Æjç“ÖJk¢ÆJkŠâJk†ãJ+¼õ¯9mÒ7… ¤¯Ýòo /–~.}S·ç¿?zCú°ñÞ‡W?úhÞšÇV=%œ“Ä{ó¿9‘^~i¸çŸÒ—†í§WŒ“].ž_±èœó¸]Á­ÃùüÊ¥/çäã=ð]@UÀowt=ÄøWÜþ$l¸½@2)쯌~HN _™^Œ[9nÉûȳŸy·í[ä dO6CËp[äÛ ÿÜä‡#@ÊQ·âN §·©¤v$nã€\}·“@šð›†ãönàV¤c1nKê¦õ]4üS ñ·€9ôO“€ÞqèLÜ¿oq–n‹pû/ÜÐÙ³qÛ[>‡ŸùS˜P9ŽY*YåØJ+ÿaf••†`5R_êGüi?@I ¦!4”†‘pÑRÉe ƈÐ@b0h _…ýÞ`‘1o2ýfeæZƒNS粨ÓïMó‹šÁÞ\Öʾ6PO”‚Þ`Q‰;Yä}챘ö“#25¬Á!$ÄÊX”;Då×™Žu„ÝËfØ9›.af?ÿ~DU];øU–˜ö6 žÍy(••õZ?àu–‚ú!óØžŸ¾f;Pß‹_³úó?ÀÐ*[‚Cp—„áfxKŠ{ƒ¥ÿ;»n6¿§“&¬Ä—1™±~Œ2ÄX0c!|dÆÂË ˜þPlìØíoôíÏ¥åÛ“{o iLrÂÄ-“’3ÆVþî”@›Mð¢§&ŒQiOïÉšµyë=w,ˆö÷ƒ1£‘1OõƒƒîþÇÈÉ}SüŸw……†élú~øà®Ë Øa£¨í5wò#Ûòÿã¥C¢ÅúàhÍ6I«oX`ȸO–ÿyΔ§Æüiôè Ï´03D·kó¼ÑI1#Ã<ÔÒûE¥¤Å¤Ä›†§$Å q£Õ]éÞ“E¿ç._›S+(ÔäÔŸ=û9NûŸ÷­5𮥇D)c£õ@e|¥uW#m´ú•ü* j-GJÊLe7wÕÖýS`ÂPc=R”PÔ½«¦æh1-¶‹•Å—µqÙb8}Z0lhwíjl}ï—˜¼˜%1‰ÿ1±dŽ cjëL”yBË­G5r›?k?ÛPÍ®w›ßOë™õŒÌH*a•ƒÓãêŒef2–ÅØÐ¡Œ -ÄýÛ‹Óæ½rðÓ#ßÿrâøf¿ÿ……©æ,xeÿ܉3îúfÏã Ô-”hYðÏXòáWS×ýX÷ê])ÑáA©&c Œ98®e "lnÕ´ûN\¸rìá”Øø˜d›$Ž ’KMe¬Ç€ý!6ŠÚ^Ù±ùKŸ)8Y}ð™ÅsfMçÏ@{ÂIz}"C’:¹ÿ¹uíX0ïžYQžêÑ>‰“ï}~ßó/Þ;~¨ifŒÇzú~‰C&eM•=sôðôéÑnõº+|‹¾»˜å>ήõmeçruîúï`i9Å~•­ð*û)—äb¾uP!Oâþj²óŠ Ö!ª ÚÆ!À´­lÙ \FÔ"+PJEO.n[ðòQ6û5–¿öVæ¹¢i{ü™¿³ûv³Ïy!½Yù>'ýU¼€Šd5} ³•Mí¶xþ¶þ{vÃlÎT,Ç »‚±•+óË[ÅØO0ö$c«[³†±§[»–±u¢äÜ—f/yaßß—ürâÔ»‹zo`è²…½¸g^ö°ñW ž ·Ø/zjÂ/}Ù…3ö]«uþ걉áKss[¾œ1OõÃÃ¹âòå›?,:qʸmú+x—X;ðEmïᦷVl(þ¥á«¥‹\²Ä/—ªÎ)I£oTðàe§?X³.oãÂæ.ìï^ƒöñO¸ë¾ç^{ý¹û§ŽJ›ï^C§÷K5iØä1cï4väü8 îmŸ½—;nUN• |*ç”ðÙ³_Sí´ïñyß*S¾wýX”2V[óKâK¬[«iµõcÎÐ!C•e÷—…¦Â›[«ªöB1& §¬»&ìÞzêÔþ/é—vу…ñ…-¹ì—P\,6T‹‡;n­®Þÿe1)ÖGÓ6qnܸdZ¡0‚ÿЩŒã(¡8"-ì‚ÂBàÈ•Z¤Ow0¥«\‘¤…ÄþK·`‰JŸòm×ì,&ÿT¿wz*÷çÁpŠ÷×»á\îNöTH!¦tí7å¤É_„®Sz!ßã/Eñöü¸É`•{N*^¨]ñ™©ùíû«.ÂEAʧ },¥Ä²ÿb3iQŠûWF¡hF_…~•yPôH½p}öSâÞÆ`ã+dz°©’FÒ(ÒŸ i4Dbh,£ñœKPK ÈH:E–ðMÚ<€±ÄAÄf5%ߥcæü Æ£i Éw&‹$½ÕlKKçìÉi$ÿkÓQýûÀ¼C£uÌ‹‡¸j· Yi"‘ëvØtÑzdÁ‘/ò‘2ÍØ AŒÅ2ÇX´µ¹¯ª¯>SßÁëe¦¾G­›=x"LÆ“ðd˜‚§À©xžgàT¬‡ix&Ldzðl˜3aÎÆ9pÎuÎ=öoÈÀÉDS¦œ!Ô@=Ñ´igÂÿ¸c&ѬY³‰æÈŠ:—J€îÔP˜Ã·Îs‡èD^ð$çd¹“;Å9UöN7iûT…$:súô³ Š4xâäÉ'ÁI¿WíBtÚiD§1•Hð ðÎL^P1 ÝšÊF°ÉÎY\Ø~öŒùZ. ÷i£€‰Š³:¾Ãv+|©=æÐþ>m÷1¤gj/ªù³%ü]Ûjoªl©Ýà4 }ÝÒSÑÓÛm”ðÝM›6­ý(]‘>¾£ßèèhÚ¸qm{e{m÷®9Ð.ºwÝM[¶¨½˜#É:‚ݼ¼v;F÷a²LóJ’©6eS®¥LG—'Ým¤ÙD»{·ÑÍߨ=Äóò*†ó)[ ~ÝŽnmG¬û ÝŒÖ Û¬u‚ 2ìX©èpËÒ)C%6økÍr× ¸^IýB¸ß w$^†Úêæµ´[DÁ3T…Ùmåzxö¨ª#BS(,SÒÜë6>/å–ª–ÚmCŸ7õTõÔ§ëÛyYM×w©åµË¹ç^¸ïÃùx¿ù>ˆ p¡ù}\„áÃæ#ø\ŒâcæñG°d…ù@曟EÁÊÃb>øèîLj~È æà*3(ø!$0¹Yb˜EøŸû8 ¥‚q»=Dô0Ä%Â7ëö€¾x€èÁ‰-ü>ÿ[Dô†'ãqÿ“ãÆÙZç)Ñn|!£Ù[úl>Ñý÷¶:¾·vßG4_î6Kè/=>ßø$ÜË¢üßqCýÇüù$ü]û²½¡²±6㬢·±«¢«·Ó(á:Vlذf}ª"uüú~cýú¼¦­²­¶s×z9Ð&:wëW|ò‰Ú‹9"¬#ØÉ‹_§ct&iÀŸçS Õ¦lʵ”©ñè2Š»›hwîæ{^£;‡Øb^üÄp>¡ įÛÑ©íȃu¿¡S€Ñºa›õ¡N°T†+nY:e¨Äfíâ±YîÚ¡¡wÃëœ_÷䎤ÂËP[¼ÒuŠ(øãc†ª0»Í£ÜAÏUuDh …eJš{ÝÆg¥ümXÑXÕXû§¡ÏVtUuÕ§êÛxÑ‹ò²qüž€'âdà+Vä+V<øŠùŠꑯXqº\´#_±¨Òƒ4qâ$˜4xɆ3YîPøòÜ"8Õ9Mv¢·„\Á@¾/㪉“&‘FnŸLt’ÜâÈýßOÒà©|‡ªU>ƒs«;§uÑÙ3`¯›3…œ$z ä+W6 ¬g:…9DT‚߾˘ÈKÇ$Øãöa¦C%lgÏU òÝ^œŠønÜêª ò5Í šé)pNÕ±ãgÒ.›.kéÙ,:ƒû~ÿ™„ûR:žœÕjoÛ:Ê ŽníÓ7:3ð’¢[ÇdF«0èuc;FIX¨â®¦¸ñ¤~)¨S,×”9Ì$ 3cvÆ4Fëã¶°l–ËGªXdµ”HXTQ±C*¢Ö4,­ÜÖÒ¶Hk»¨¬ð[OW¤¥¬"'à×(ƒsI¶BZ†Y@}Bv²C¥“źäiÁv[ðüq<ð#¾‹ÁëÞ¬n𳽫’ mû1ZQ…–?–Å*rVŒÉÔ·Öç0˜Î¹çÁyx>\€ÂEx1^—âex9\WÂUx5^×âup=Þ€7ÂMx3Ü‚óþ¢ Ä8¨ÿ¢ /ºèb9Y] —ñÝÖW^)粫¯Æñ)ðºë¯¿npnÚŒ±Î<9çœÏg±¯|0]r Ñ¥—]— \ItÕUW·ì\KZÐöo"ºùæ[n!š' Ðy¬jG .aÙ%!3€vú:æ;Î ¶OT’í ÎûêÜóˆÎ/UÐ6mÄ<:×ëÉR tÖ1|‡ŠŠ/YÑ DJ‘t§¯Á¹@/~8y0x论Aºnfñ[döÛYúgÔÇrœ£ZìMc[Fy!º-=czF§V*ÖrLz´ Æ]Û>¶}”'* hŠÕè—‚:EM‰‘Ã4¯Ri>é¥y•ÒÇm!«,—ÖS±j3(ñ˜¨b3‡T\'Ÿ>µr[KÛ^8§í¢²‚@=]‘–"°Šœ°S  Î$ÙYÈ«Tõ ÙÉØMëF§ÛmÁó7ÆñÀø.¯{³º9hÎö¬Jv*´íÇhEZþX;¨ÈY1&]ßRŸK.i€s)>ŽËð s9>‰+ð)|Ú|ÿŸÅçÌ•ø<6â æª¡ÕŠ$±$,åóàãDË`™ó„œ–? Oò¹ê©§Ÿî‰1|Rzn%®„çy÷\Åg³g)iÔŸ Z¾œèÉ'‰V¬xŠèi¢g[ƒgÑEþéy¢ÆF¢^XµŠhµœåävÇÅ –óŠ”­@7½#P€â Üì,%*ïšn®ÚÆ}C´´h´iZí±ÒÀ*®ËÒ·÷DÁ—Ï­\Iä+ ’ÞóñÎã2Xq#Ïò­ä[:ö^`ÉUäµ{ ÌÉb%Õ]Sc9ÁQö†±£¼àÏÆ®1]£SKË7&5Z…y®iÛ6JÂÞe2Å—óKA"W¦ÄÈaŠ‹Ÿ{R¼Xèã¶;–Kƒ©XKµ”H?TQC*bÏbZ¹­¥m/PÐvQYá…ž®HKXEN@£Pç’l„,äÅ¢€ú„ìd‡‚&‹u#ÈÓ‚í¶àùãxàG|ƒ×½YÝ4g{V%;Úöc´¢ -,‹T䬓ªo¬'ÎfÁlœƒçà\8ù:õuòå ^Ž|„WÉ…$òuÐ*Íg²Y³gÏ9ƒtÎ9sa.ßðigÐöYD šC.høvv¹y²"–)7t¡EÎ%Ry)®Â•ÎUrA} Ðîkéºë¸jHá¶äâ.úôB¢‹ý |¾¾¿œèŠ+ˆä ÿj¢k$ÓQð0k'ããü!Ÿ‹v^Ctíµ×Í‚YÎl®p²Á ´~õ5!8Ì–ßmþ›bàÜCìŒtW\̾5úß0ô*I5q‘×¹ ïsl_JÇóbV«½¹Ž?–fÆjýRÆò²:¯ÐayDÙ„Ž—ñè¡Z]25GR«Kyå”–Z]*¬ÏʘF¥2GÆ(¸ŸrW¤ß=à1EA€žårI¦ûr·°Ëwዬ[”`ÒÕ߯ˆ©hZ¼ãm0Ææ<Ø!—ˆq¦ JXC+¦ ‚^½+¶Õëߢ|È\ׂ‡Bþ]“夥è¸È88ù½+v’ì•I×:5†¾Ã[á6¼¾…wà_ƒÊü¿ÁoÃßâw$» ¿wã=x/܇óá~|tÜ )] ˆn½í¶Ûáö!úÖp‡$Ë9wÞÃÀ¶/¸•ˆa·“B ¨4±;aØæú=œ\ÐG€Î]²æ}›ÿŽ,XßåÂ=*Á¹OÜϋᴓͥìv~+ém’œæf¦‘¤¶I^Û=D÷Í—0YEÜÚÏrUl)¤‚D ƒ îdç6®À0xsáöa¾ø0àãá6¸=» ŠÔ1(:x 4Ș Ýév Ðqèû±[Ù:´ŸÎÅ?$O ¢Õboªã¥iºZ¿”¶|º®Î+´[k7¡}À¥_®ªV—LMØÔêR^9¥¥V— ë³Ò¼d CtdŒâ€ˆ*wEúÝmÝY.±eºùòna—!9ßB^Y1¶(Á¤«¿_±dÑLqÇÛ`ŒÍy°!v0ãLA”P˜VL7%¼zW6l«×)¾Eù¹®=…ü º&ËIKqƒ‘qpò{Wì$Ù+“®ej —«± _Ä—Ì—q ¾‚¯šÍø¶àëæø&¾…oc«¹ßÁwÛV¯n‚E”H‰ÒK/½Œ/óôÊ«W|[Ûj–ozñEqx™×•‚êû=yY€^BOÜyUÎÚÍÜT‹Ô¿Á…·¤ð¶Ó*Öò²÷½û®<äoÚEѦxÍ{µ™ˆÿ½ÖBôúëDo½ù&Ñ[o½MÔº–h­¬yÿzuS½˜­`K!mc ïpë´ZÐl[ûé0#ß ^ û]|Pà¼Ôy`“‡dè·Çx‹C¶Ê:§¬†wéŸPûBÔiËÃZö†:þXš9¬õK)Ëgë¼B›å‰Ú\F( ÏjuÉÔR­.å•SZju©°>+Åë—VGÆ(¸±rW¤ß=à1iAÜœårm¦›îv’à,|šc‹LºúûqM‹v¼ ÆØœ",1ÎD «jÅtcAP«weözâ[”™ëZÐãPÈ¿ k²œ´]'¿wÅN’½2é§æ¡7Ý·è=¸Å[‘¯¨Q]FÊkFð.Ô—‘ø]øÞàÝêQûþ  á; úo¼ Š„”܆s7¯6ª/, D»ø´3Ñ<(Å'ý"1_ù¢›Üx‡} ÷CÑæí÷“l_œ»û¦Ær˜5­öæCZk4ƒYÕ7Þg.«2ã=ÊòŽš’cûÏ$ŒÃt˜Ÿ2½ÌÌÀ2Óå#b˜q–IÖñ²Lf™Ë2&©å¾ŠTl†Æ\yjËyßf.Á˜…µý7Fcë Ê/z Þ€ïB"† N\.Ï+kk»Ÿ.B:ð"!+/b8Ä,\ÒçuÔdyÀ’Iv¹¦`gáÉPÒ·`!,•Ë£ÊTÁGá1T¹Øê/<ËA=à…§ñ™ä<ò(E{„*µ-¤…D‹ÉбÂC|Ÿô0QI0Xd•Ú.iO’¾´¯qºGÌ’Üßgà>ƒÄÇÞÕ´Ø›i©Ñ¤^UÏxŸÌ«J÷X¼CÚkJ޽;<Í«ˆÒò3ƒÌ44˜.í àÂ´Ó Éµ étƒK¼%Ïã¾°Tì†8·\y}Êy+c.ç–…µý÷aFcß J¹y Þ€ïB"†VJ\.Ï+kk»Ÿ.B:ð"!+/bhµ,\Ò§ÓtTdyÀ’Iv¹¦`€eáÉPrmæ{ø>®ÃÌñǸ‚?5Ûñgøsüßý;ð#óïñ¾i9ø€O£ÃHÂ{,S¤l±Zù,÷ÑûïËy¿h`ß"|@ô!!ï[Å ý>ѺuD{_^;jgÍ1m†“‹Ïy­i´7ÒX£Yªª®ñ>;U•ïÑR‡´Õ”ßvxŠOÈ:ÊÏV]l¦`±éòH‘ )L9‹%ásq*µØe’’Џp_7*¾ C$R®¼G§ä¼S/—DÊÂÚþÛ £ñeå<oÀw!ÃÍ".—畵µ]O!x‘•1”ÌxTa.ÄÐ….†GQ]hàh\z÷Ý÷À`0Ø#€³4½“lµ7ãOykRS<ÕºTÖWæ“=ãüBY¦Ìc}Žö¾Ë;‚4Ãj]:TßúWëÒ¡ùäP­Kqre\f…©"C>¦Ê ‚’,CñYX¦îò鎲¨@Bƒ²Þ­— ¢·Ê¢‡+㛈H‡sv4p-€xù VÈùE\Zóh¨ÜyX˜ÈWÇ*c:(W4®oÓ:!4èͰcÞP…•ÈXE:^+YäàïýÉÇ7Ê•/à*÷»z`ªžB3¾-ø:¾oâ[ð6´Ž F#ˆ½‰ˆç’-ö¦qü)oIj©Z—ÊzÊ|6iœ_(K—y´ÒÑÞwy{gX­K‡jn¡Z—Í'§ø†j]Š“+Kcƒæ¢ ù˜*14² Exd=™: ÊçSÊ¢ ÊzG]:ˆ˜*‹®Œo"">Ì ØÑ`±â%„Z!Gä‡]°!(æñ\¹ $Òò:°0‘#®ŽUÆtP®h\ߦ'tFhЛaǼ¡ +‘±Št¼ V²ÈÁßû“)ŽÐÂ_a'v™ÿÈ=ÿOøÏæ¿ð…B7ö˜ÿŠc/öáóßðßñ?ð×#r#r‚\9ÅhTëRœ\Y [a¶Ë©Ò;ƒØËP”JVœ©c|Ʀ,*Р¬7³¥‚ £²èáÊø&"ÒáÃÜ€¯ ^Z§rD~ø‡c«<&-·D B^&rÄձʘÊë›Àô„Îë z3ì˜7Ta%2V‘Ž—ÁJ9ø{2å¥ÌôÓ6 žPJ†÷sèå3Ã*Ô×Wƒk–.}F#€Àœ5y(3Éè¬h­Ó$Yyߟ+ÏLð8±ŠŽº’ƒ`ŽÓo r2m£:e†˜Ópy"œóµûkÀ†l$õOIÄe/ú‘?9?@¬3 M ÎÉ—ô«âc‰Büè Ña°¹©“v^¨ K22Y™š¥áâR5£Ýz=Z.€ªu-¬…wð]lƒ÷ä¡-~€Âq=üŠíð3ü9ü‚Wó_B~òˆôW#ÈdŸBâ).Éz¬h©Ó¤VyÏŸË*OOð8¬Šöº’£bŽÓ¯ òyY‰F™!¦Ä4\^GEë|íþˆ¬!ISq~~(PÎïÖê,7LÎ+ã8û2H ^Þ ¾~¸‡¤ßÌß ¾^ÞCÀÞ¸çßäôduÏjLN$g@LJl†¹À:,ú¢Ï–¡q_è|iu¹ÄË``ub¡mF™±D)Í/rb"<­‘UíΨ÷v»Bäl ¿¢>9¤Ô¢I¾Zê|1R¼é¸V-Åë¼¥¸ÊR¯†À!5§¶°LiÇôgsÇæv|åXãÃ,…k\ÎôÍã`34ý) ³*OHŽ13UÆþ»|ºL‚™ï¿/™%óÿN¹f̉éŠþÛuIÿíºå²Ì ~-ï*ãý ¸¿‘g3Q(ì/Êeì/úGše°mø™1Œ&e”“å-2 Ç"xh½>8‰2ô¯}àmoÿ†ò;_ƒY†~8’×Y_”×{{ôоJÿ Òëè¿]è¿c O˜eb ‡…ÉSžÕ&kf_y—Ç/“óò8Ns ˆ›wƒ xAüFþFpaa»ã®ƒgГڞZLN$g@¼ýlèy¨?¦ÃÙ˜¡oÔl÷Î…Qÿ?¼ VßàÛ&<”¹K”ÒœÑ]…¦KïF¼ªÝõkn÷Qˆœ¶àWÔ'‡”ƒZ4Éçãü}pB륵]wÛ¶–´´‡‹Â-cÛ£Ÿ2='”$©æ·18-‚éÄ×ôËaÙ¬IƒýI‹˜U²x‰¥ŽÝÛØV.+¡üõ«{S'ÕðºzPlûfÆ¡*wä&ÉÆ(fÄ•v+2­ÂûäjþC2:Yƒ$+8öíqGË`Þe¶ÍpØHÖ<¸ý]›îc@<©%]¸ýÅç€Y‘ž¡ËI¹7'ÌÓp ñ%OK‹ic[§Èß³ÅQh2šñ¹ÝïƒZ‡ªmgÚ¶§«¤¥]\l èÒOý˜žJ’TóÛœÜþô OÙ¬IƒýE„˜U²x‰¥ŽÝÛØV.+¡üñ¤{S'ՅźzPlû.±¡*wä&É&fÄ•v+2­ÂûäjŽóB2:Yƒ$+8öhGË`n÷d¶ÍpØHÖ\¸ý›º'~»’Üþâ㳬HÏÐ¥…Üm‘΂i8†øî‰§¥Å<¤­SägVáéÇŒ(4M‰ø¸ë÷Á ­IÔ6¨lÛ¥SÒÒ.¼„tè‡eLÏ %Iªùm N‹nú=¡lÖ¤Á¦ØiY%‹—˜QêØ½må²Êl|÷¦Nª‹Lu ô Øö}?CUîÈMùfÄ•v+2­ÂûäjnÚB2:Yƒ$+8öEbGË`NÞd¶ÍpØHÖè €Yñ²Å“^P„wøàïÞ Ïwnof7!j»¬¼ Éõ»Ù»$™¿ òhY$áÀí¿sר|$Ã6ÜMÖ2TTE)Ûq¡i.' ‹!ÑùQO@"²É6ðv+xP‚2ëÍLÓ_©zJUE}3³é×#TÃtçnænð7±oÒßL[§¼—a¾\̇=¹XË׆¼åâÝz¾N"Ëëùu©mæ7Id½™oy-ŒÍd30š»1 ±9¬†i¯Iøg´fÂhb”œYˆ3ç7ñ˜0M>N`$Lß&³‰tü5ȹHV³E8—ÕÈÔ@‚Ì3ÿ]¸QÊ¢–’–üÌ1Y{ªòC4( £s¤VD ìë r¯¿‰ö7^œ¶öj]Á;tnvþ¤Ì/fƒ¿¹'\ÿŸ?nd7 j›ʼ É+Õl•$ó÷†A¾Ž(‹$œ‚øñoÜã1ç°-Ôv„µ÷¨ŠR¶ðâB)Ò\„{ž!ÑåLO@"²É6w+xP‚2kØ9¬ÅT=¥ªbe#³á¯D¨ñÿ¬fªÁ—îľL ƒûá"ŒÒçóóî¿8ÿ ÿ`ÈÝYœ¯®äWHdq-¿F"6ò$²† í¶0Õ9Äæ°¦Ý&ôÖ9Ы`¤þ:Îe5êëFû£s£”E-%-ù½v`¥Â0:GVÀŠˆ¡}½AŽã+o¢ýÏCç uï¸Ð98ÙÙ“N0‹V{Á9áøÿøþIö DMxàw!¹†Oì tÌCÆžƒ|MKI8#ùýî}—‚ØþT» ªÂ=ª¢”ý‘¸PŠ4«pÏ3$:'é HD6Ò¦ƒånJP¦3 ÞÈ4üzLÕSª*jO2OüZ„*`ˆÿœ ;ïL@ì|úb_Å¿[_ϬûuUŸüª­nª€¶¨gê~·E$@Á¨l‹)<‰õ"Í ¯2wHÿ0m÷¦–§ŠSµ©úÔúÔæ_è#É4þ›=–þ ñTÓ'ƒ‰<¢vpha9ÄÙM`lëϾèp[{š>gâXliX½{Ú²¶šRÐiüµ9µ9mÌÔ§`À<¢ ˜À€ù;7û#<%qÀ”pÀ\]\É®@Ô$[“gݽ삌‹ÙE’Á·ýØOs‚êâ€È°Ý ²‰ü?‹!:\´ÎÂx‘üì0x‹ÏÒ‹mAbŠ#I¤Îlðb,•hÓíHza%ϲ´žÄßä ¢øÕ•µÌš¿¢ê“_µÕMÐ+™ÿo%ŠH€‚QÙSxëEšèÕRº&ïN-NÍO=˜Z™Z›Úø#›ü˜üÊ G´aà~çd¿‡¾‡AŽïUkÙZ‚lû|îìÅ`¤.ÁûaBì§°Ÿ&^u€¦ÚÎÙšþŽ!:™³>‡‘ùÙr‹!q[âŽîê`Š#I¤Bkð,•eÓíºR’Ÿ›lÿ„^KH¾¼ïaoÔu3Šíö눺zÐz-S –º $@Ÿ¨[‹é7‰UÊTOÁÁ™¶þË™ªNÍN-‘^üÉ_èÈ šþ ñTÃ'c¾Œ$vp8»ãÀm}ˆò§lkƒžçL‹- «—`ƒ"VÃVC :-‚¿6¦ž€Aצ`è2¢ ]ްÏ"nz> 2ÌsäÙ:á™çä“tB<,IÚɈӄ·lïT§8‘|Z“PÆ´¹¥=C§Žò°™ñ Z®ó,éÿ&\ó¬ìí&D‡FÒNFœ&Ü`»§:ʼnäÓ"˜„2 ZZ?Gª%:„ªåøp㚟ópLz³$è7H’v2â4áìÛ9Õ)N$ŸÁ$”ÕÒ¬ª¥4+]!?þ¤ƒFiï·<@w¸ÐCZÏ÷– èåÒÌê-Q›Ô²íMÌ¥‹`1s•B%UkÕ‹ÞõÒja5Sß)^¿ï¼ôúv½xýæÂô&Æænn¦š­uˆ^/J,zÃò’Æ!–*C•À¨$08X '>3pM¹¡e˜˜Æ‚L§”Žoa2YR xPð–Ma$ø…–Dþ…‘Dô6Igè§ Ú¬XmõˆÛ½Ë핺AûÕÑ¥þP‰¨ª·PX`ÑÊýÂ}]¨j,zš6µibãÖÖ ëéú6´7I¬Eì3®C“§ŠÐ\¿pâ´•ÕŒrœejÑv'.§çá~¾\.”SZ+óîÕ[ 3+;óW—Ü‚›^Û^™¿zãÛÂ·é Œ]ó¬Aôê­Â-ýÖrÁh\vz«!Òæ¬š%ÇáÈ수$iC§¸çÙ.¸Ôgô}Ç{9`ÍWXBÔy$K¨MóËøS»±-/½üŸèÀ)]æ »ôã[aÆû`/˜ê6+ÜX_Ž£ñØcOJ™ÕŸcì§ÌçÿF±ÇÒz?å¾+<Y—¢1UÛQåŒ"“e¶‘^<óÇRAAQ«³‡xì²Ì#EšÕz£<@ŒémMB¶ 9íHœ†É0¿n¼_Ù¨M.5r³[ô 0€Á´¨8 á>«‹|ƒZ¨ðZA¢€[äH‘¾ñ8¿=Yë1"‘à7¾ÀÓ ?Çôl‰¾+¥s•‘RTY8»ðB©WY¨ž­þ¬Ô­,”06&*ͳMJT7ÏnR¢Iäv1±¸}†'?¸¼øÁ™TD¸.朽,„¤+ÿò™qÝáô—ÿE¨º462øJ7ƒŒ:ˆFÒƒÐ#t~³Npç°`ŒàáàÐPž˜¤3#ŽÆÁ§¹,©úÅ¢ÅIÕr?:Ò•:£NËX¹ûÐ9µ>æÈ®ðã[Êû`jÌLu›©¬/ÇÑxز'…ÌÊÏ1lTæ“£°eéz¯õ fø®ððeY\­ÈTmGu€4 j–i#½xæ%*FEEëP‡xسÌwŠ4«ÕXz£<¶Uúi·­IH!ÖA׎Äi˜Œì–ÚäR 4»E¿L5Þah}‡k<­.ò j¡7j­`ˆbue#EJbÄ÷d­Çˆ D‚S\㇧~2ŽéÙ}W çŠ#…¨8vþ…B¯8_>[þY¡[œ/àŵ³k”(oœÝ ÄŸÛÅÄïÚgxòýK¿{ÿÌû*˜\sÎ^BÒ•éÌuqÝáô—þE¨º462øJÆEƒŒ*ˆFÒƒÐ#t~³ŠºP„;#(Mˆ¤#Þ’´ž£²$® ¸û¾Äc GÖ„¥š¡1ëce1MêL÷9͆eDçBSØÖ·š”¸;to‚ô¥%–£ÇÄ&]e°åÐ6tF°ØìßÓš õá)®¾ŒêIEö•Vd*¿hh3Ø-/aæWiÂöÞ³6i9Æ„f '1ê4)7©ÿi)©/º3£ndiRt‚ïÙ³î÷À–æºI$W5˜”{ l<Ãh›Ïö:ØDF*ViÒeH2ŒB‘“Ÿ=ë<óŸù\32{Ü7CM£þò,xÆlº”ódŽPÓXaÀ Óæœ¢í`Í/vPÛùþÜ)<™²ž¢Ý•ó©wH+8oiUæm®Å`|Šür~1_˯ç[ù­w½ßìä?Ì_ÉßÈ_y×÷v(g=Âí”ÀÎ׿ Iˆÿ¨,‰#aw/î‘x(ÞÈš!R&q³>VóRÎüŠÓlXBd*´ë|«I‰9Cô%HoQZb9>6Ë%cØ2ð;#HhvŒ)…Ú©Oqè>ªgqØWÄL|Ñ@òØ-/aæ‡óáÃ=ï!!|c)Ð3:¬™€}jÛ÷ §¤®äNE¹™ ä˜×}liŽË#éÊnRîÐæl÷:ØDF*iÂñ$oƀÞˆRL² ™=n¼\7ðà.lº”ódŽPÓ< ¦ÍI{6ÖšÐé ÒäÁíØÏ”ôœØ®œÀ‚1¥Áý[Æ¿Í<†ïÈWò ùj¾žoæ7amç?È_†œË0¦¶)§a …€ü”“«Þ Ih÷¨,‰£@wÇä‘xÛÈ2É+¤Y+ˆ‰Ç í4• „.0o5)ñVèžé-JK,¿Æ¦dh_Sve‡Ìî€1¥+õá)[GµÙœ}¥,A¤ ‹ÝòfŽp(¶ö¼¡[Ãdh:Æ8&P›jØjKʤ)7Ž1Üà;Sß[šcÒHú/›”{2yà×½§ØDFê4aX’ ccœ^O÷%Y†Ì7^Ž‹qLÙt)çÉ¡¦y$6"L›Vs{ú˲ wå~çÁíÐÍô$Ä®œ1€1¥í[¾ÍÑ+F7Éóóù2Œªµü…üz?)= ÆT›rÿÑ.hGÔï¼m?êšölnìöR¾š´&°}üœ¬ ô‚K6ŠKó[â†c$¤2K›¥k]5AcL@Ó.°AEdbÉŒ,vkû2zšÑX.·_§D‚ qµKÛÀ‡€`3¸Cbˆx:攂é"KÒ¿ÂSÜ‹QúÇ™.wº9L[Üùöó±p´ãÄÇ )û3GqÁ$F?­-ï˜ÌM%5’ãfäÈl–Ÿ³}ÉŸÓäúÜ íî^ z««3ª‡uO¿ƒ¿PÜ3õ®_>@¥½ÏŽ( b›¨º…¦±™[î:†1“o&Mu ,AÏëý¢’-ÖÒ6–¸Í ©l×Ò èš>MTÐô lÔ™`w #‹ÝÚ¾Œžf4qí×)‘ÀÈB\íä4ð! îP‡"‚Ž9¥ô‘%é_á)î×&=¦L',ݦ­mí|ûùX@ßqëb†”ý™£¸×X£ÀÇÖFwL榒Éqod6ËÏÙ¾äŽâr} î6v w/Ô««3ª‡uO¿ƒ¿PÜ3%ô@дãÙ…”lûñQ·Ð´s³šv‰›žI;ZKÐǺ@O™ds²4\%n.FB*ò´ö¹vIvÇ4½e–E&ÈÈb·¶/£§¥EûuJ$@¼W»½ |׃;Ô!†ˆ‡ cN)EGdIúWxŠ{:IÓ-G7‡ik3;ß~>–&â8ú0CÊþÌQÜ(‰Qxk{;&sSIä¸62›åçl_rÇ/m¹¾w󺄻z‘ÕÕÕú§ßÁ‚_(î™ úB|‰E ;/á œò²~Äí½†«AÚ¤J´ž \&Ñh_ºáA$G7ÙdÛ0ŠŒûÌ…ýŠ%fM H(Ë@z1coŒ®·óú–¥¼Óq·”d·”P"Pš ö†€½cÔ•]*Õ{éàZvmò´¢L)râ›H~H jÇ¢«iMð‰³ê¦ô­i`,”бì¦ÌÆckë.Ia€èdzÓ¬»§wú/­Í»L[¬õÓÈ$Ø|§©åoÿ ¦û ² 2ùs7óîi“*Ñœ*pD}醑DMd“Å(2î×ö+–15€ m YŬ¿1ºnÜðësƒ,‘ì£JÄÇ@3ÀþÏv¬¼²K¥z¡q&\S¯MžV”)En˜xÉ ë˜x5­©ƒ"‘cfÞ”¾5 DøSoÊl<&°6÷’hM¦7í¼{qz§ÿÒÚÞË´ [?L‚xêVþÖ¾`úBÀ +À “?¯q‹°1 6©í«wH´Õ—nxIĽ³ÉÖc÷= ûKL–@6P„dbæà]7n ö9ì€AwXØHvX%Âb€Ä±ÿ3\³¯ìR ç5®£ƒkûµÉÓŠ2¥È ›o"ù!›¯¦5užC$rÌî›Ò·¦Ÿ»¡cûM™ÇÖöß 1™Þ4üîÅéþKk0Ó6mý42 Vá©BÆ´ ÁÅ´wlJ¤œ—û!?ù›Ï œ‰“‰œÍ5‘@£1*±à}`[é8… ÍÒ>°Pݬ³ÛqÈ=bOÄ aðïr~žÐÖY<üŒ§¤¥PZlŸH£° `Wù„µ¸Ü0ü'nT×ë‚l«ÚÙ1™[«k­«rºÞöˆs²˜¡•ÙÒöáK\|x0[²Œ‡ÝžIàI2½š™".jÜ ‹„æHÈocL™cO¨ÔK@uŠŒ³ßI¦mÉEÂØ)çå~€PB—“6üM&röÖD€Œ&nEíÓV:NáâF³´ZT7ël&r¯Ñ1¤ü»œÇ'v?ã)i°“†Ó'Ò6+Ök›6N>±­p/·Ïþ‰Û¶õ‚ͧöÕu,×Ö²ÇD#§œÖ·=âœ,fïd¶´}økÌ–,ãa·gx’, fçD棈‹7†â#¡© òïSVÑ*õP"é·˜iX2—0öaJÊy¹N”áå¤ýt“‰œ­y5‘À%£‰;ýFû´•ŽS¸pÒ,í"ÕÍ:{õ†Ü³òD @ÿ.çû ›ÅÃÏxJÚͤýò‰4‘Š…´¦©‘O€+8Ìͤâ&f½’.ÁÒ¨ýY²µ-ÑÖ(§ÿm‚8'‹™™-m¾ÄUt‡³%ËxØí™ž$C¤Ù9‘ù(â¢Æm’øHhÆ€ü@Æ”qò„J½T§ÈTùíqçóýW~$žÞo¼òä˜]—]ö÷¿'‡gybyÈ(“[̾ډZv±[[_䛑¢õ—×£ÅåÌòÞGëPbîxÒ:Þê}QÜò·Ør°ÕýH– ¾­ã[½/Ö.e]*ÚÚ9¾¼ËlÙ_|ÚZ^.ºÜ¢Ü_þaš5 Dãÿ°¨áÊñ+}„7ŽßøKk2B.'Ö`Ü%[Þ‹I@Å­LJ.†Ó^+±‚uèb1Z†ÓÞº+ÃÖË[Ñè4·îð®ŸX¾˜KÏaåÖÆA똓}¾¿ËÏ߇Òä˜]—]ö÷¿'‡§2Q2Êä6‚¯z¢š]èVë |³AT¹-T2•½¹:”˜;ª47{7ïnú›¬lvçd©àÛ<¾Ù»YGø»”t©hkûø6ðVXÅ_xÚ¬TîºÜ¢Ü¯ü°Íš¢ñŽЇ@Ôpùøå>B„…ã i BCÈJb Æ]²Ê^L*nnûÛ>t1œöš‰Ô¡‹ý…¨§½º+ÃæË›ÑMô7ºVwxë'êÑÍkékX¹µ1Q}s²Ï÷ùñyàûP˜<“¢Kà²Ëþþ÷äð'ŠCF™Ü"Gð•O”³óÝru¾1ˆª/W£ùb¦¸÷^JÌ[ÖŽ¯õ>¾µáo°b°Ñ}O– ¾ã½«ó烂.mµ··ÈŠþüÓµbñ–Ë-ÊýâóЬI ÿøû}D —Ž_êC D¸~üú_ZƒÁ²˜Xƒq—¬¸“€Š×Ú~Û‡.†ÓÞZbUèb>*Âi¯êʰñòFô1º7]­:¼ð“}|5}+/˜U'0'{€ýiþQ6ºøéòMHûõ®¹ÇÅ„šìØõ,b;[Ôx@jU·Õ¢CloûqÚ´fÛÛË$©Í?˜šù‰vûs¾ƒìò²ÑÂO—oBšÈwÍ=&Ô|Ê®gÛÙ¢ÆR«º­b{Û‰Ó¦ÁÜÞÞ$©Hm>ÁÔüËO´ÛŸódŽ”@ÿ?]¾ i…ß5cüO¨)›]Ï"¶³E¤Vu[-:Äö¶§M›¼½½FR‘Úü€©)žŸh·?ç´?¹z¼þáišƒ¿£ÚY!e;ªj7“•ÒkÇ,_Yså`à1Ø<0ÜpÙ¤òügcÍ"y2¤=?œ.~° çZÃÅ׊4x¾éŠÑÇ5Ù’žfCIwÌäRÐȼ•—Ó•LFës|?Œþ—%ÀM"l?Œnò½w½ÿK2ý¬L.ðL…ccþŽêIð”í©ÝFTJ/ ²\3Í…aÇd$ãÀðú–£ÂÛþ?ÝDÏ”eúY‰¦¦á™ ?ºüÕ“«)Û OO‹¨”^ùayšë~p¶U„. 'ÃC6©<ÿÙXqD3¯ié½èÖZ«“,×AÃÑŠ°„×O9úJO³¡¤;fr!WdÞJŒËéJ&£T9sÕFÿËÇ`h{^ú£›è™Ò£L?£ïï‹oòÍÅw½ÿ­¾6Ü+K|^â\Æçû®á‚úø0Zï~´¼I ËËñÿ!­M¡ÏÓ±òMo<ùŸyi»®ÿJ¢²×Gsg&`^DŸ%ÿ•O.‡å¬yr1ÀSVØ|¥¶»¾X./×r2Òæ©õîâòâzNÜ<ÙÚ[‡ŒVNÞ<¹E[9€3½“òüÀËíì¶°d'·#Jr;‘·ããaxç /Û¹ ôª¸ëíìÀ݉R Ä™þP¬êÏp¢¬ªƒÙŽ Í^[êh²Ð¦ð¯¤e”O¢É`13ªz¬Z½^‰Q;Z2.7É5ÌI^ÑwûßËVñPE´ÐW¶|êrèÐy*bÈГë{øXà1`ÞÊ;󕌒™õ×&Áƒ<±â)/ð-x~)ÞƒlàWr½8½&o›??7ßÁà«©ÿW~C$¾¹CA}¤¹“”øŽ¾Äý©Œ¯*w%C·}úf3Z~´´IË­Kñÿ!­ ¡¯ú±ÒMç8ùŸyi»®ÿJ¢²WÕŽ¿)æL.K†¡PâC¡t²–r<äÉ…OYò•ên}¡TªTs28ä©zw¡²PÏÉ‘'›{uÈhæd¬È“›”±™“1#ÓÛ0¶a(lï6±d;·-JrÛ‘·íãaxû /Û^zUÜõ¶·q(ˆRŒ™þ@¬uÏp¢¬ªƒÙíŽ Í^[h²Ð¦ð/§e`J¢É`13ªz¬Z½^ŽQÛZ2.7É5ÌI^ÑwûßËV!ÄS^à[ðüR¼3ØÀ¯äÚbzMÞ6ØÏM÷¾w 4$åáçå·ü'%Â`Ý÷+ãªË7Â÷êöÜØ±²ÿPìSeå/¸ºçô¾&û»©ïÊyý¿å#>Âð¿ ©qÕåû9‘¤púÅÊþC±O•xx9t-¾àjTÓûf˜ì i)ç·üDP$5®è5ùE½}I¬ì?ûTíBGÌ ®ž0½o†É’Ê7 (ìáf<| Aá`œñ°'‚ÂÁn2ã9ÒäjÙÅsµ,w΋>Zs=c¸ãEµÎ´2†^ôÑÖ™­ŒrGÛ%§»iáÀöDz¸íœÙÉ|èä}xæÃÌ'ïÊ™+™NÞ37éTÂIN´Ê½âzâÚpƒëµx–á÷Ö[GɲÜÕ-šÛzs+ÇÛ~ë÷\5»p®šåEÑ\ýÍzÆp!ŠæšgšÃk(šÛ<³™Q.4»ä(´=-œnžH¯œí3Û™œ¼Î|¹ìä]>s9³àä-œYH¤SmÇÑ*÷äé‰kÃu§×äY†¯N¯Ž’e¹{NtmóÍÍwÈùuì Ë•³óçÊYî½W}³š1Ü¢÷Öάe O‡è½35í¿KÎ íiá(ðDz´Ï´3ï;yïŸy?sÉÉ»tæR溓wýÌõD:Õ†pF­r¸6Ü zk<Ëð/èUQ²,w)ˆ®n¼¹‘ãN¿NK?…‘ýúâÐÁ¼{G("+©lɈҊ‡T™¬kÄјCÏaÀ""÷ mÈn0Rñ˜§ †IÍËuqôÃèÈÀ—…E\-ómþ¦.ÏÒËYpI/gQZ›¨õÖ‡ØFÓôm½Þ깎¶¯oõ\ï܉nËõé}mg÷æNË¡üðµwoÞ¸âTyåµ+þî‡öÆ„‘'jJ“_¶o·%½’M©Iš@·5±å«¾õ­¿®ˆ¥g±v u-N,ÆŸgâS³ß^ç³ÞÞø›m½½úÅJ~{öÄ·×i>þöšRÇßÞŸâ*†‹ÇûÍë Cs¡p·¤X$#Êv1¤Êd]#Ž]¹Í \„EzôÝ`¤bg0OYÃ“š—‹ ;2ðµtWž}[„¿©ÿ´t™\ÒeZ”V'ª½ºã]ûÏh0q›¯7{®×îë›=×Õwb»Ût„_ÛÞ]Ün:”¼öÁîâÂe§Ê˯]öº—Ú… #OÔ ”&¿lßnKº8›R ’4nsbÓW}!ê«¿®¼‘¥›²öF–ŽÙ ñç™øÔì·×yŬ·7þf[o¯~±’ß^‡=ñíuš¿½¦Ôñ·÷§¸$âÇâÖüÐÁüŽG(–0™? ’eaRe²®ÇúÜf…G.bN kÇÝ`¤âp›—߯y¹“ÔdG¾1â&ßáoêŒ-ý¯—ô¿¥å‰r¯ê¸êþ3kL¯Þµ××z® ðë=×ox¢Ý]s½_kïþ®½æP¾ÿÚû»¿»~É©òÒk—üëÝKíõ #OÔ ”&¿lßnKúK›R ’4ncbÃW}!꫾®\›¥Ï³vmuÍOÌÇŸgâS³ß^ç³ÞÞø›m½½úÅJ~{öÄ·×i>þöšRÇßÞŸâúŠ‹ç¹;ûs¾ç|_­5ÙÒe­ÉΗkD_(¶¡fôÅÜù9Îuq‹g^lþøÊ>ç{Î÷“á«6'›º¬¹=¹Íùrµè¦bjD7¯¿Æ¹.¶xæÅÆ?Š÷ês¾ç|?¾òÚäš.[kO¶9_n)úX± ­D_=•s]\å™Wa¾{ä7å|+¿“/ççò[ù&\—òÍüv¾”¿ù ¸.ä×òí|!5¿šÎ#xžæyÎó?Ч5ÕêÕÔìÑÎÓkžh@5¦ç¦æ†ù\Ò,6gŸ‡˜yÎó?§9ÕìUÕÔÅzohžèbL_›º6L™­Y"lÌ>–òœçÏÚÔZ¯¬ìæSèÓ£y¢«f1}uêê0e®ÎáÊl;)è’ÒŠãZuT>Ô˜Zä9¹f´¸<µÜ•¥âÖä–¶(­Û–¨Û“·uÙâÉ;Òå1UÔ%·¹—­â ¥-/•—‡–#o9ÀC#Ô81šeþrà±å]oyÙ[ö|oØQRíQ![~Bçe™  gW˜ö(—-?dTT¶H],NýžKg‹Ç‹Ã8Y’| dIµõ¹XŸ%ö UX®½Z‹¼Úáš¶.¯¿ºyë‡×õéµ^mE^ëpK?’uë™++"Õ ËàMQ6E´p(›â_üö+jNÝRvÌ[Ɇ®°ôýä÷J¸Bûþä}]vï÷“¿W7U¸uoòž,ó SKšë÷×’¬Ÿ¸–ìÖäñÙe÷¥é•ø¨–ª2« m)3•ít&;šO—A÷¤`[C[Qáúùë¶©öbM’\ÃÒʇjS <ºu¡2UéJ£ÖÝÍÉMmÔªÛÆ°/'¿Ôe ø Æ0ÿæÔ]]ò%÷ õ*´ˆç£’»•¡JäUœ|¨Ë˜]øõC)3•mã W|º º÷k)Xk¨}ýŸçÿÓ¶_\’¶,×¶u°ò¡¥©yž“[‰æ‹SÅ®´«ÝÚ˜ÜÐvµªm»1yC—Í6ù™´Çù÷Y•Üà³í´2‡–+½`Tr«8TŒ¼b€‡,F¨qb4Ëü"¼ÜÅ]¯XôŠør"Jª=*dÅ't.zÈ9»Bô˜ËŠO$•-R‹aЫšãµ ‡q²$ùÈ’jës±>K쪰P~aÕá²¶’Õw@=œòÚ«k‘·vxM?’ªõÌ•-•jÐeð¦(Ë*¼@Ú²ú¿…ýʇV¦>QÖÜOp$Há>ýæ»Éï”pŸ¶y¨²ÂW“_©›úôÃxì:õæúÊâúFÖO\ߨ­É+â³ËÊõɺæ[Áß}UV7»ðÓ–”™ÊÚO'Ÿj>]Ýû©luh5ú¿©†Á:ßÈ7ÑH+Ïl1Û8¿6@~Ô ¯ŸÃTÐÄe0[öó˜d[¸ ¸ŸÇ$k·£÷ó˜dàŽ Y¼sþ§)R=þ“E»–Û|Ïk¹%8ÒÒŠª°Õ÷“ž LÖ BâÄB@ÓÊ"f yÈ©¨ß„f‘ˆØ¬Aò€|v3?HXO,üŠÿË™m(™kz„úO-êØMPÛoY@ù§‰u+ùRÇ$'­Ä—ê‰Õ=C‰¢›:@`Ó¢àµ^™W^®£4ð¯÷–¹xËëç( B ™“èj­s”:\‚Dí¬o£4ÔGЀT‚s”tTŸ ÃúÊѾ—_”Ïa*h²¹,ªgçBçMç[pþ>?ÿûü½üRþþ»¾×È·òíüäv¨ä:ÐÕò˜Ûg¶­_k€¨æ!Øs˜ ¸è©Š=IÖÂUOx/€dÏcÞù/£¹Z@hö<&Y ƧYÀqA4w©ÿæä]»–/ù&Ðrl¤¥õKTá]€l0 ¤ LV£BâÄB€—Û!ˆ yÈ©¨ß„f‘ѬAò€|v3?HœK,üŠÿË™m(™kzľO-êØMPÛ¯"°íÓĺ•ü©c’L÷%^·ºg(Qt6- ^í•xå¥ê9J½WáâUêç( B ù’èªÍs”:\pFíÔ7ÏQê#Ëf@ù¥Õ'è°¾Rt ßË›¥s˜ ìZñòÙk¡ó&‹óçùÕü£üJþN¾˜ÿ6¿£`5ÿ ÿ0¿ ¹*ùO [‚ó*ü‰3›Ï.Ÿ—b¼·"¢;‡©`—¸­ëÎc’­â7(@hw“l%¸½·¼;I¶|&hæ?;ÿ§¹EõøOÞ²k¹ÁwE–›F#-­V£ o†Q€¨åe²%*$N,¼%À¢‘‡,‘ŠúøMh‰™Ì$Èg7óƒ~įø¿œÙ†’ù±¦G0øÔ¢ŽÝµÝñŠì=M¬[É?:&9áV_X«{†E7Qb`Ó¢àå^W^€¯2¦¿Ú+rñŠ82Š$š%‰®¼vŽÒ@‡Ë ©êÆ9JC}d± 4ž£´ £úÖWˆ®â{ùqᦂv5‹òìÕÐy“Åù8~—/ç¿ÊòßäË0 Vòuú5ø.ÿ”J®å“QQã—‹>‚¡Ùåî  Ù­n`Ïl¹Û¬3{®ïÌÞ²/гE¸º]ΖSÞy,/â’bñ[zvÊŠËiL‡Ú®™­GécÔ‚Eb¢”]Ãh÷¢U›¤pÏœ°'TÈH“õ­/4©¶DÕ´nÝð1H¸ìr ú¡gôG¨Ð!5—k#h~|£²,¯ ÝñuȯµFÐàøF ê\穵3»Txå#n˜-3 çÅܽȻÜëz÷îᆞxÞÛÃ+8‡^x/åáÁ««¾—‚?/B•Íx*w?òîÆˆáÏÇ‹©û{ÞýûxE݃oº>t½†×ð<ÁÿsS=º8ÒH{©ƒ9u>¢l:ü5´©F;<0¼VËkÑþ‡˜™¢-[ñœãÑ/¬ƒˆÀ±‡;xœ@EÓÚ9EÉ:ˆHNø)ô¢xÔ7ÒÕ~¹à#’›­t[ßf7» Àl³¥n €Úì—pµ€#¹uóæÝÙ»põe)[‚!Œåwqõ»g+Pv·’Æt¨­dÍz”>F-X$&ÄÚ5Lp/ZµI ÷Ì kqBeNŒ4YßúB“ªu ª†uë> §AÂe+0„Eðþˆ£,:¤±æRuoTA–J}­ˆoÔ!¿ÚAóáM¨³ÎSs{v¨ðÊGÐ3[bˆv.^Œur†ù%ä¿v¡²žÀ.Âþ6ò¾ ŒŒJøóñ"TÙŒ§@—öàWF€þ|¼ñZÙóVVðœ[<øµÒ‡®·ê­ú«<ÁÿsS«{tqd†ðAÈœ:Q6þÚÔjîAä=ŒÃ#ïÁïàˆ™©{t‘z{yûàóî~îáÆÛ"›ñTŽG²"¬‚!¼Cx†ð <ºôËya(üÄ®öœÝè®àœ-t—eÎÞ€«ùÏf?ƒ²oÍÞ‚«…l†0–ßÂ@ Åœ-BÙ­bš¿Êæ ¬GécÔ‚EbâÃ]àö¢U›¤pÏœp)N¨Œƒ‘&ë[_hR­ˆjźu`ß á²0&Ѽ?â‘i¬¹À{¿QYŠj8¯¼AcàkPg•?¦µöl¨ðÊGÄ6[`Õ.^ Ô„`n«ª…O0„1Xã7‘÷M``TŸ¡Êf<¥MLâÄr{hîœ*ÇF{׃¡í¯tð´âŒø#+0„BæÔùˆ²éð×пŸqxäÕë^ð?ÄÌT}.RõØo6|~ØÓ¿Ú”ÍxjÀï6Ú‚!ÜÆ!܆!¼˜Î6.,°æÅi4/úÍÞ–´.^ØÚýhk«,M‹Ê»5›·¥]ñÂíÝ;Ò¨xá–¹Eñ­¢Á‰æÄ”÷Oe^.¬ZYGO/w ·¡ dYËÞåSôÌFZÑŠ¢Ms|JVÀŸÄ¤;om–7æåÞuæúE­B¶C@hÛ¥@çCŽœG\D¬Í–G’Ä Ì&cÔ†œµ/­…»âæ¯3¯'+GÙ‡¹´Ê28]ë@º©¬‚ÓëHo)‹àt«馲Nou ÝP–ÀéN‹Ê…pzkÒ[Â8@¿Iö¿ ö±ÿ…÷oa|ø—æ¢Ó!ø=£®R~ÇüŽw_@tí]¼Lcšq/SŒ…÷Ÿz÷R§ñÀð@ß:l<•КÈ2 èÈAºž,'“‡þ„EÃaK@rß<¤Õp©´¶º€ä9g<®Òê2´òvR;ÐÅH¼€ct„ç“htÍÖ.,5ipFƒ«ßèmJ{ë…ÍݹV«$­J»sÆ—ÒÒzáËݹZí¶4³ÂgJïrë[w N4°Âw¡ÄË…/«0îéJrkÊd˜µ,€¾1‹ß¤­(Ú4½dG øIÌËq«eØ"á» @´ã j²Â@[särä<âÂlmÈ=’$f`6£6ä´¨}i~ÖÐÞ7GJ|då(û0—VÙJ§«H7”tºÞtKÙH§›H7”}tz³éš²NowšT.ì¢Ó›»n ›è4ÚDýYDÿõZ°E4˜Có Hà_š_HÜO‡ (u•2”Ì—¿õ)® Hcšñi™b¼(\yê­¬jœžÆÃ© ¾ÀåáêS‰×‰,³ 9ˆ@דådòП0£h˜"| p>€þ Òx`F ¾ º pxO‡,Òê2´ò¶SÛÐÅò‡ïþˆù!'3Ð ]º0,Iô4š ý•Þ†´@_ØØ}ouµ ÍÏ »ï­¬Ü¶ç 7vß[ZúLž/|†¥·¸Õù­['šœá»PàåÂò™UÀùt±¹Kʈš5 µ°1 M¾ H+ZQ´iޤɲ𓘺âÕUÃ: ßÌQ«íÚ¾-ôˆ!GÎ#.vצí#Ibf“1jCN‹Ú—y­/¸âæH³€ï‚¬eæÒ*ëñt¹ée9†ï¤W•Õxz­ée1žÞè@zIY‹§Û5*–âé]H¯ +ñ4Z‰ý²ÿëÕ`qX€—–ÇR…ïü¥eHy®LÐ!šFF]¥ Mó;ž±i„…%vŒÐ;Nèm'BÜ1bEƒý !]Ä`Ÿ>Yf:r®'ËÉä¡?aFÑ0EXÊh.¹žÆ3Rð]¨wAçà ‚YX„V^;Õ†.6Ô ø.pm ÈÉìk˜O5..¨FÌ,3Òf¶© 3eFúÂÌmFŠÂÌÂÅ"#Õó§¹Ç0#4«íÔ§8FÎ,³fÏ1`»zAV¢æñÀš’¾Ÿn6ÒXê=½û¨¡ öÙ2v8QSH›t ¨üp…!· O ¦è}õíÒ’[, JCÀïBÕ‚€NÙúÝ!T´8 ä/×fjŒT‡™uF*ÃL‹‘ªÀtkgf‡mñëu‚™r Õ_ìcݼ·¹}ŸLô3K„ÝýûÇîït‡ÿ¾™ ¨¤C—¼ˆÈaŒsHýÄÜòÏNBé.¿8]Aô,çåß7¿uÁÔ™ÌîpÞ±‹)Oãý”J¥Öhh³Âc}!Æ&ΖŠn>`Üòßá3Fpl&Lý–Ýߺ`êL™é¢Íz£’ÁŒI€=T0Œ½|YŽ;/BàÔ@ªvq!@c¦ÂHÕ˜Ùd¤cÌ”)3_2Ò*àcêÄÅ»Œôœ8Í=A_m)?Åu¦Â=Ç„î*Y©*À˜­@*ú~ŠDÚHcUøp§÷Ñ'B[3`.ìp¢Z‘6é@ QùáþÚE®‘ ={ãVû(ÚŸ"¥%·X4Œ€ß…ª¥æ -AÑ-NBùKÕ™*#=c¦ÎH¿˜i2Ò+øƒnnÏl³¿P˜)¥PwøÅ>ó ð@U™oSüG^¿•]Àùðß7“•tè’9|D8þþtùg'¡t—_ P¯ð|–ór…À7µë‚©3þá0¼c/à#¢”ƒ”J¥Öhh³ú«=P.1ÀÄÙGÂOº•Þ‘zÐás\»ð¹žÁ'¬™ë‚©3e>¦ úÐA˜1 ±‡Úˆ±+†/ËqÏ A蜜H-]œPA™)2ÒKf6)$3FšÈÌ F*ÈÌg t‹·)8Aqš{43ÂÉÚVŠ£ïL‘­ô#¾«qd¥^c¶ˆ-éûii#U¡FE ¾òÚj+ra‡u´I‰Ê÷WErEøˆù;¢oµ&¢ÝQRZr‹%A ø]¨Z–|¡à%h%¡¢Åi!!%)%ð1!edf‘ÂôZ{¦ÍVùu€ÚÆL!…ŠÆ/ö™á€ˆØSõ†™oRÖf{ž‡Ard@%oìdì;—á`ýøm‘vr…¾Ex)4þ³œ—k¾©JXL¥Ucx?Æ.^¤<­IhcHú`†6+< ÐD1“ÁÄÙGÄOº•’’ªwøl&>‡(û!¦Î”ùXº5´ð# ‹90øFŽ(ÇÝ>¡¿ïôÈèb¶qzqTù_/i×ëñ­1íu=^Ó×ã·Ç´¯õø1éf}º8¦=¬‡Aï9R5ü|õZ¿×\wáP¯$Ìõ>Îrœ/\’F]~QÌ•ƒ1×·˜‘r%f,Þ¶áP4æ6/¼æÊE£q£]»…,Ã Š¤ä=.׎nÍãµQáy|}ÔpeoNÌã[£†ûòøÎ¨á¸ eÊey¼<ʽ•_ÝG=I¡r’º—ö^ÂÄ‹÷Rj6‚£xxqIè!)u@& ?æíÝÇ)ò5ºï+oÃu‡9g¿á{½†pú9”ÌAs.©$Œ«©FÚcÐ Ô? ²Ãf­¾ò0JÛúŽÔaP _yE¦]!4G¯›8UÑ:Ôê´=‡){žR+¾ç˱ÈÐÜ൵;Þ©©Høìü2rÁÏLÍmdv¦¾¼ï?Õ‰¼ÎáÎùï}ïg}Ô‹Ñ…líô¨r%¯Œi/òñÍ1í@>^Ó¾ãã_Ži·qÝÒcüôÝ1í,> :ȑҨᲬ×ñ½æz>‡zuéc®#u–cná 4êò‹bÔÇ\7iFÊDÈбxÛ†{јÛp¼Tðš«ÆuŽöR² ƒZ’÷X©3<´Ç«£†oöx}ÔðÊoŽþØã›£†'öøö¨áƒ eÊûz¼4ʯ_ÝGUHq¸š;[¤Ô4Fñðâ·B'H¿v© Á hšü'_€¡_ùîŽ<Ì9û«0 W… Сd2ú»l¤0ýS«0 Wa@¯R0È›µúÊß(mëRŸ@)|åG$Ñ=Ø—º©8ÇðàЃÎCp{Êö6Ò hž ý÷°ëAÞ¡‡o› }j;>홀>?35)‘Ùžzy?’ú è>Pt>»tz~TyÅÇ´CüøÆ˜ö…/Œi7øñcÚ~ü³1éü~úÖ˜ö{}àHaÔð¾Ökô^s¸C½r€í1×'<Ëñ¯pWuùE1Íc®Ç7#`/çÆâmÎFcnÃñRÁk®84×9Úá^È2 =%ï±X>f8›Ãï©áfÃÛp0_5\ËÇ7þ{WG…wgçîšl~¤MÀˆX R|‘;Jé ÅGAÛŠø"-þ‚BQmðQDðEŒµ>5š&ЇRJEB ÍJºÄl iŒÔ›JY$%ìèwï¹?ggg][ì†ovvνgÎÞÜ™óí½gÎíeAå[–{Y89d.|ËD/Å?Þ‚¶‡´¨.hµ³i"tãÿzÓ«6›& ?Ý&«×¾ õ/Öõ"9Z@#ë"yXXOxWƒ5{èH¯¡Gë“Õ4Uˆ†‡\Сï+ÙÞɵf]ôQ¾þw€åöÊŠ¬‹*²L[o ñ¶<]Sr59°Ð±pçzÆûô\ ÇMGÑ~έg–½[ý|.díÕé=pN¿°,«q¦ÚY•kqf­sí©*.è Ý´;B:Ú-f#O»ÅÍÈÓn1yÚ-ÎFžv‹s‘¥ÝùRŸúÇöxî-¦ûùÜÌȧ˜µ±îê1>šT i†\¦ƒÑÚBjøàÆÝíp{;#Ê…D¬}!½´; ô“ "Sd8ñ6¬š©íN±Ù?4mbj`ŸàS »'1MÁ¬ÏÒÌk<×È’‘z1/©¿JFêÅuÉH½¸)©·%#õ9R/¦%‘ú°©¿›%8c~D:Î(Ê‘çŒb)òœQLEž3ŠÓ‘çŒèš–3æÏ÷©êOÅTŸbN›se¶­§£Ñi¯Fƒ2NVHdÜ®·mg,¯/¤—vgàí¡¥Fod8k4”©íN±ÙG· E›˜ØÐw>†Þ`°cÖ1寗iÚ5žkdÉ©¸,# ’1Rñ›dŒT,IÆHÅ-É)dŽ‘Š)IŒ4lÁHïæA@ “?"á¥Èq-ò„GLDžðˆÑÈq2²„'?Þ§œfg=b¢O¹ýÍÌí‹’@VµÑ0' |¢A¡(¤en$ж3ŠRHD@ÒK»3ðíÐw¢72ƒ œò>ÃÔv§Øìµƒ†¢ML l7Œm0ØÑ˜…×K4–éÏ5²dt w2F§Ð7¿HF§Ä5Éè”X–ŒNAæè”˜D§ÂtªÕy»]úËúd˜”寙ì„W+¼8õ •juc,U6.Ç)së¢\ŒÇL:×Õh53†ÌEsñ˜±ãBtÁ¿]Dy²|&šI-µ+ ¦FŠ„µÏœ•¨¤€‹c¼}¬dU®Ö–m;òNív½ÄÔ™“sñ1ÓrÇä±"ÏN»kÞ%߬OʼnßÎæ²9RÔÒ²¦=m´$™¦=&W¨f=”öó´&=”)ô¬æ#B¢¡Œ™—‰é˜UãˆèÐù(«‘,Í1Ë×ñÜ®$ñ™bÁq¨W¨D¯ëd©²Sòå½"¯ÄÃ&™ìJ´C*Q%6v(Ï`+Ï0l,¿]J-µKV@L‰©sU^­U¬ä†¼Q»2ÌÚ窕¬È•Ú [G]«·ê%¦NEV⣦åŽÊ£Ežw׌KýYŸ7ŸÍeGä‘¢––4)l£Õ¸4)4™J5'¤¤££šRžÒ“šÒñqMMùP/YV¸ÕW,ù9Ü,Åà*æBŠèpèhSNOãRL©bBFC@±Üõ*V«ÈY‘^H`º)§]V"L•CuŸà êéºÙHB]”•ÄøîÊé"މLª¥tÞ—¾Œ28iª2ò  ®ž «ðˆ®ê×F¿ºØâüö[—³Ù—bÁR”¿[ÎËÃ÷÷û¯ÿ ¿ÿ²0üøúã‡lçÏ£æ(£` 3@Xê&&æÒ⢢¼<)YÑÚ¼ŠÂ°0N>Áµ7fxI…ÿÿÿXËýýû÷Ù…6ˆ£!8 FÁ(˜ Ò”ŸxÅŽŽŽû÷ï'I}Z×2lèB„­`afdÍügfb’b“’²…<¢f4ôš>aч›+%{W¿•5®ÝœÏwbïhd‚Q0 F& r­Íš ;ÈSO‰.8 ,u3 ËHe ÌÇf¬ÇÊÏ ªØ~²K«·NÕíTm¸:™Û¬BÒù'ÃD¨®¯·§IµJ‚ìÍ¥> )¢_Œ,øê|7*%Õ´Ç'Ú€¤œe5y޹s Hª:6Ž&åQsj]ð5@p~S ¼8·±˜ Qæ! ¢ÿäšü«ó-B'+P-k>,ÏxleÎÑ9Ö‘S!€mÔ4ˆmÈ–B+€Å¸lT.‰s€:öÌKÙ=7¹€Tî©óvÌJÜ1+Á3Q l›iàæ©±@Ò/g ؃qåDBÃä5O£` ÀZjãéÀuÕD;1–:àï?&fð`ó?†×Ÿ¾}å f6Qi ÃÉHÔ@Ìú¹•}ôèQ4½_nA›Ÿ¼êˆfé§ë rŠ_3ÿõ‰ÈŠu Þ]6r…u‹ÐŒz}ËLÃËs]p¶¤ ´eýìt\PÚ¼Mˣ㭆¼U „ñàh3\VѶ¸w1æ£b߀fÈ­} eêNÍ4Šr`5`ä×CL€è„L<ªò,Ã&‘m¯Cì <Õàž:£FÁSà&EÁÙËäº È BŠV®é ƒ°CKVÉUÝ¡È "Ê×®è †°#+ÖAËÚá bªAó`KZüdlÍÆÅÍ~qµ›€ìEM¾ˆ  ~ r?`^½7\*¹yûh©4 †J婈; ,{Ę3°q‚ꆷ¿~{öà7¨S ©©æáª dx9¨i¨Ù;ÙÏœ=§`æ%4½¨ô_?!.\¸"¸h%±¦/<¤xÙ«{¥xéšð²5@°V@d/ï‚WQU룫À¥k\×bpMªšý€d|ÝæøúÍÀ ÍaI[“š¶=·Ös´pC®Aää@aépr²ìa¹v±¥õ×ÇÏ ||î\aÙü+UO…ñÖ»¯OJ ܾó™õûÏç¿T~{$Î?¼ôöþz¬À=5p¶¦k+z¯ 2ÀÈHT5à×s~UÇ‚`#B `>¤C°}fI­Á²¶@LA`?€˜‘(ä~À(CÀ;ðA!ü €°ÔÜj\ïŸÿ½så‹€€Œ®’—ŠòÆ%럽~ÀÆóGð/OAÉD… Ç_ÜöñÙKÎ=ÀæÚÈ h —ä›”`50äF¢!Sà û@hZ8kѺØ@Ù'L4˜® €yu^£ÅÊ(Z|>€˜j €°ÔOŽÝþüì·¡•¿©¾œJwo¯¼^´}µ·ðËNéé»/uôëé?_2üaøÆö‡ëË  …''AmpY‹*ª˜¦êØì ÜÚWGÒXÀ‰5ù  ¥A“¨[qì[J˜Uv×Üd é–2yN<Ó@ZØš´.htzuŒlÓ¹´Xå‰6 Œ6EŒ –⛃‹ëÇ‹—òßß9ZXÖ•T óÈ„:É üádç•´s[zçÒžûþ2ó³ó(2þýþõß/œuŸFî§“ásÂÄ{FT¿øõÅÞ×PMŠ•¾<×ýâ,tZ2',eZþìt'|Z˜àœ°¼uÍã-Ž@gwmë€Å”’mý½ÃwaÓ 9a¤ÂKͱéÖþ:`5@»9a<àôúBÃ,x„qr 4$ÁkCAµ ›t|UÞ±•ˆyxÐÚPFFðÒ Ã˲àâhkCáÂû¥;ÆÏB–rNœ½w~êžù).ÖùÈX¼ÀïßìÅ›§Ænš‚XꟻÔ?oÙÆIQðiaÈœ0z•ë—µ"A¦…‘A\í¦EÍ~ aÓÂÈS‰[]ÑÀ(%øëãwÆÿLâb¿ýb`beâäú÷áß¿ÿ£‘= FÁ(hó„ÎÁi @a©Ø”@Èüe`øðáÆ/`ÑÏPÙgo„8„ýâPµÇhd‚Q0 FÁ„RœZ7"£` ð{Œ ”:€w4DFÁ(£`xƒOŸ>ÃÙ„Rüùów4tFÁ(£`ä€B©XX˜GCdŒ‚Q0 F ”:€m4DFÁ(£`ä€B©~þú5"£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈDæ|À™SÇèéJ3«uÀräÀ:cÇÔ`síÜ3P>Å´÷â…³C¥4Ô70üå 1aN ræŽ9 ¦¡KOOîß½ÝÃÛ0„9°Îä15ØœG;÷ ”OÑì=u긚ºÎP©ŽÜëìê9ÈË‚aN* ”{Ĉ9/èòÅsÂ"blììtöçåógÁÑ3PBŽXg ò˜lΣ{ʧp{o\»*,*flîpùüq]CËANBá´½ó /gð„9‘r^ä1€B©¸¸¸j¾~õ"//?ý=yÿî-[G·tÀräÀ:cÇÔ`síÜ3P>…Û{çÖ ^¾AšUÑ€¥ûñC;ÁŽ¿iaí0ÈË¡9ÎBŽXg ò˜lΣ{ʧ˜ö‹Wx+{·£A.üòy”3Ä„9I €†Òþ€!±}a8r`1š‰{ʧÈöþ ‡ƒ†è6)² @CiÀؾ0H9°ÎMHƒÄ=åSd{‘‹×AÞBå ã €†Òþ€!±}a8r`1š‰{ʧÈö¹~ÀÝ&E¶³h(4$Ž3$ŽXgŒ&¤Aâžò)²½C®0DM#ÛÙD…ù#3‡s§PÑ3¸ Äï< .d.1N¢Äå¤:ÍyDºl@¼3Ð\B0‘àòñ1Eëh¢nàÐ(SàrσGÑDì­qÉ"KQ’ñ'T"ƒÏ|°JÀUøÒ®uO°"~>€Âr†ê‰™ÂÒh˜Ì`†,íšlGÒÓ…¸œ?- Fü\2bj@¢‰ø8p÷ •ìÀr"g`JQžñ§b‚×|fYLÓ^ñ&9@y9Cÿ,O Ý V AØÿÿu‡ sµB;¼ƒ¤®ifÄë|qN¦r£ä¥:¾‰/¯ LAî8šy¥îÜvñrœVúÆ+;ªH½®«œÀA ¨½ä8®“÷i<Îh±¬¢lúõ 1_X+äê,Iý>æó/`¥ÖuÞÌ rN†k¶«B4—EKQy>W¯‡øÞžGÝq:L‹Ê‘¸œ+¹Ó”¦Û˜&倿º%²ARb£baecfuª»‡`Îɽø[úDëÄw0Õ ñh#QX«J`b ;1Ó.•÷à*7©Ò¢õºÝr$1ö"7 CX 6ÛIJxxœGÆh/åCd°Ä‡Ï`-ýiÄ®ùx«œ¬™b´àWƒÖäÇZÓPhT)CB­T4º?€~ŽÄŸyH*â *Éûpu¥‰q-†k)qž‰_8Oe@vj¤°˜Ã³?¹üÅ%B0ø÷P’Šð€Ý@?GâÉ<¸†}È·#|þ^3ýG¶{ð´ñÑÔ`."";5R7àj˜cÎÐg )Ö£â†Äþ¥j€bB©X˜ ¢ ‚wI‹µ1t +¬5I¶“Ô– ‰ ÷`-ñO‘íE.å°¥O|?`H”3¸ÂœH„¬ €Pêv66‚ˆŠ%©.`+ÇU°â±ˆ¦Ž¤0 Hu6Î Œ˜ ðl’ 2¦hQÿŒ& ãh¹‡*&“GÈö’׺ÇZ[/H‰u””3´kÐ™ŠˆDÈðr-+€ Ìÿÿê˜/¦˜Â E*Ò&-é.™¥ŒªõÅ>Ws7á7A ß‡/§4§Qr0¿Fºä©ÈMîæ úæ„¶IË!³ç‘špÂõ -¸¸ÏïüBVB-¹öȈ”n%£ ¬”ÄÖ†R´/DõG‘yIGªRÞÖûòéÚaèT?Óuð;’HÒ!¬­íCÎy´sÏ@ùÙ^Èý<¼ƒñøe¬KQ¿|þ„v :ÊÜH€|@ž4xII’=/h9oô¼ #ù¼ €½?`ð:’Œñ‡AV£ i¸gôþ¬=»…‡P9CŸ zÌP«DÓu»ƒÓ‘d»jôþ€!ä¼ÑûªÉUì@ Ê @£û†§#GïBν?`0tFìý4:0<9:0„œ7:0¨:#m> €PÖ‰ŠÔpôȆQ0 FÁ( xxøUÕµ¹xøÄ%e_><øÉo_>?²—ƒ“sH»µA5¯ß¼e€­  ÒæΜ:¦¦¡;š¸GÁ(Á³'€7ß—ÏÜÁOBÀP/âvlÝèèêI¼z€"a>àúÕ‹RÒr¿~ýMÜ£`Œ‚@DLìéã»CËÍÚzC½ˆÓ54Ù¿{;ñÛˆ´ù€_?Ñhâ£`Œ‚Á ˆŸ ’÷ ªmŸ£`Œ‚Q0 Á—OŸHÙ.@Céþ€Q0 FÁ(Äâ s€JûFÁ(£`ˆ/Ìh(í£`Œ‚Q@TÉNta@Cé¼ Q0 FÁ(Äâ s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€Âàõ«—xdEÅ㙽£`Œ"ñ…9@Î á @U]‚³§Ž(«ª{GÁ(Äâ s€>óÈ×.ÂoöA¾˜¦LúðQRZNLBO¿ˆí›VÀ‹cL÷áBRíÅeÅ@ݾ= FÁÄæ4¬æU±BkÇHHÈ>yDÚ¡ŒT)yI²r%2åuÏ(£€$@|a@#b>RèÀ; Ȧ ÅȲ˜j \‰Vöa½—ED‘/^<æáÁw~ß—/Ÿˆ)‘ñ¸*öbÖð'/£`Œâñ…9@”ù¬Å®² Yñâ*a1K=ü–Ò¿ÔÃãB‚@IUHÞ»}•ŠöÒmHmŒ‚á ˆ/ÌhXíÀ,²áÅÁrY².\åU &ú—nxºdHaà©{N¤Z=ZŒ‚Q@ ¾0 Ñù€Q0u®™üѱ Q0 (Äæ4º?€ØÂkØ JPÑ/À¶?%cAxŠøÑ± Q0 (Äæ4º?`PZ ŒÂ(ƒ _˜ÐèyA äµ7¼}*+§Ì…w}η/Ÿn^»„§+@{‰ ÒѶÿ(â s€Vóxæ„ …xTb<Á¿Øm†™ø•—Ä—€¿ýúýë'~ÄûxRh/žªm*žÈà£``â s€b¼rá„¶¾ùÕ‹'>>^ÏfWê®äÃ:zƒkH‡ŠVŒ‚Q0 F…€øÂ €†Þ|ž²’êÅ(Ö‘êž3zÚÌ(£€ê€øÂ €F÷Œ‚Q0 FÁpÄæ4lç(oVc5º­uÊM½OxxûwŒòñ…9@ Ÿó‚pmû¤ŠDÎê‚‹S ˆ£÷ cÿŽ‚Q@6 ¾0 ”}¢"Âx”ž9}bÀ÷ ´‘øûuá «ÉÁï_ZN´còè4Ï( 3€ìöðöÇ£æõ›· °}Â4:0„+ ï×BÅyþe@Ú7Z‚ˆ/Ìhôþ€! Hº_³ļ ³‹€ëJá¹G—÷'3¸›÷½Êä©£€€øÂ €FïêuE÷ ÜJÍ@hkôÐò/Iĺ›ǽÊd«MÆ£€€øÂ €Fï€>÷ëâšú¦Å@ª‘ß@s$ÕïO-ÍGÁ Äæ4:0ô{¤Ü¯;ê_š‚;ÕG/¥ôÄæ4:0LŠE:ˆ{.1þE‹§O×äÊhwaÐ_˜Ðè|Àжˆ‡Ü4IþÅœ¸¦O0 FÁ€â s€bBæ°³±áA£Á:Øä~]Ðͺ @t×.ýÂÚr'£Ø<ÃÄû«×ˆ¹’Zõ•‚Q@ ¾0 Ñù€! È»_Ï6f"¥0ÅéÓøØû“ñ|Ý'ž[ˆ±ªa´Äæ4ÄîÈ€÷ëâ/åé<2ÒîO£€ @ê}Â4:0z˜R£÷ ‚Q0’ñ…9@îòÅâ€uîH»?yŒòñ…9@ÎŒ|€ê{©FÁ(tÄæ4º?`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €Fç†* „!>¼=£€n€øÂ €Fç†jpûæ•ÑpZ`twÛ(  ¾0 Ñù€¡ZhëÅll£‡ºâ s€’€¼¢*°L ¡ ­G«Q@@|a@£óC´QÉÎ:YC ükôÄæ4:0tëöÑp­FÁ(À ˆ/Ìht>`Hn¾Ñ:`ho_>Â(  ¾0 Π]•Gÿ“&1ïȩ̂]Ž^H; FÁ(  ¾0 ZÍ`–hRÆ 7Œ‚Q0 Fñ…9@Ñd>ÏÞh—Ðb²á$f!Žõ.Vdõ$•ïøoˆÅ/ˆß Ä;—]£Õ(£€@|a@ƒq>W©Š« $£ÐÄeA«‰±‹H§¢±qõ]FÁ(£€T@|a@L( 3D-ÇÁÛÂÈíbä‘ÔBŒB“-XÕ@ zT{GËýQ0 Fñ…9@ ¥ý˜s¼¤jÁœÀU?!+Æ565 FÁ(ƒ_˜ÐPÚ@Ýö>Á¡¬]“ÑÁúQ0 FÁàÄæ4B÷Œå£`Œ‚a ˆ/̈&óȃ'X‹]äÕAh+…ˆ/Ä©Xà7« å^ ‘wFÁ(£€øÂ €h5€Y PØîF3Цáaã¤Ü©¸ìí£Œ‚Q0 (ÄæÄxå m}ó«O9||¼x”^¾xŽ——Ÿ‡o4|@Î 5³tä∡¾}ùôûׯÑsCG­Á—OŸîß½åèê‰GͧOŸäš ;8@£ç‚Q0 FÁpÄæ4zÀ(£` 7@|a@£÷Œ‚Q0 FÁpÄæ4zÀ¿ýúýëçh8 ­( „Q@7@|a@£óC |xÿZU]çüÙ£†ÆÖ£¡1´Àè„ð(  ¾0 Ñù€Ñj`ŒV£`¸â s€ÚÕÀhP 0ZŒzâ s€ÂÕÀh±2 FÁ(À ˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`¨AÑÑ@BàÃû×£0 èˆ/Ìht>`¨V·o^ ‡¡F×qºâ s€ª€¶®ñhP !ÀÆÆ1ºMlÐ _˜Ðè|À¬äUeÊhh -`hl=Z Œúâ s€¢JvÖÑNÛP£Çƺâ s€ºuûh8ŒÖ£``/Ù‰.Ìht>`Hn¾Ñ:`ho_>Â(  ¾0 ›À¼9êw©£]jÏ@ñMôtQ0 FÁ( _˜Ð0Ÿ u53 FÁ(ƒ_˜Ð €7á‘‹läv=\R¬C¤H*ß±šFÐjˆ r]‚•M¤SqÙ5ZQ‚Q0 (Äæ4çp•ª¸ J2 M\¦´š»ˆt*WßeŒ‚Q0 HĿĄÌùùë4 >!¦@$£Ð$ÛXˆ ¼9Ü´'¦zÀ¥`´Ü£`P_˜Ð`œ€—ª ¸Ç‚ˆoïã)j±NcZË=£`Œ‚Q08ñ…9@ Òù¬&ÔmïŠÁjõè`ý(£`ðâ s€¡ûF‹òQ0 FÁ0Äæ4`óÈ,xZåx q*ÖøÅ*q?òô%• ½3 FÁ(Äæ4ó¸ÆÙ Ê3P<.f.6~wY½á™ÆjïheŒ‚Q@! ¾0 Æ+Nhë›_½xÈáããÅ£ôòÅs¼¼ü<||£á;€rn¨™¥#ÏhD %ðí˧߿~ž: h ¾|útÿî-GWO}ú $×lØqàÀ€=/hŒ‚Q0 † ¾0 ÑûFÁ(£`¸â s€½?`Œ‚Q0 † ¾0 Ñû†$øýë×ï_?GÃahEÙh Œºâ s€bàÃûתê:çÏ54¶ ¡F'„GÝñ…9@ÎŒV£`´à _˜Ðè|ÀЮFƒb¨€Ñ `Ð_˜Ðè|À®F‹•Q0 Fö’è €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €FçFÁ(£`¸â s€£`Œ‚áˆ/Ìht>`Œ‚Q0 † ¾0 Ñù€Q0 FÁ(n€øÂ €H›’áâá ßQ0 FÁ(œ€‡çãý»·ˆŸ Òæ€77ïh(‚Q0 FÁ`ÄÏ óšÚúÏ“”– ßQ0 FÁ(œàôñîžþÄÏióºúF—/ž{òèÁh@‚Q0 FÁ ž¾A$© ’÷˜˜ZÑh@‚Q0 FÁ04º?`Œ‚Q0 F. Ñý£`Œ‚Q0r@î£`Œ‚‘ hô¼ Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €FçFÁ(£`ä€"y>๓ƒÓ'FæƒßÍC‘ÃÞGÃ/FCc44ˆñV@¤Íœ9uLMCwpúüðþ]Ž®žƒÜÍC‘ÃÞGÃ/FCc44z Æ+Nhë›_½ªâDE„ñU§O‹ˆ)ªj ZÏïØ¸ÒÃÛ»yH8rØûhøÅÂhhŒ†/ ×oÞÉ5v8p €H›—”}úèî`ö<¦¡›‡„#‡½†_,Œ†Æhh_˜Ã@‘6ðøÁ_¿~ fŸczaºyH8rØûhøÅÂhhŒ†ñ…9ióoÞ¼Ì>Çô tópä°÷Ñð‹…ÑÐ â s8 Òö°³s°±³fŸczaºyH8rØûhøÅÂhhŒ†ñ…9ióìììÄ„‘™Ã¹Sð‹ÔBÀô1n&ÃÁtv$Ð=È\Ú¹ÎÁ>€ž±@ÓtHy ¶Ä9°Åfh ;†nQIdaDÚ|/?1æb*#¨‘H“q/Ÿ?bõ‘nÆÐ• '¨è*:RÇÀÍm˜"ÈöôÔP‰ˆù´¶…ÂŒ3ØçÀ#h~GãÒ¢H!Þ ¸@ ÀyAÀp³1Ó <ÝãR@À?äzOfÃt0²J\lj9«™È®ÅbXƒšÂ¦n°ŸHð”5øS}ÜLcÚEÅ¢–¼Ð ˜8ÉH„Õã Cˆ~5t \¥ .‡ Tô@Ñû¼ üõ$Ù¥*í¼@Œƒi7TG†#Ñê‚¡:x|„ËIø]HvQîf:;˜FqG‹4ILÈP1ÑB¸˜uÙáLÅÐÀ_¾áò;1B-/­Î B®»(5ZŒ‚‘ÔÀ¥“¤µ#©bT望á#<}¬ÎßÃéàf:;®OÒ¢b<Òÿ¬0J-­Çšüä4Ê=H¼ˆV÷`ö‚©R=´¸ê¦Û= 4 jÊ}„9\€« L o’áæu0ÁªhÀÓ$®a%Z‚*Éç¹I…˜Á1Zx €`>€¦u8…^ÀÚæ¢ºƒévOݦæ(v̆Ök—‹ KHu3Œ§'=š&iB¨µJŠx/2çç¯_xÝ+(Iî”»¹G†ÇmÈ;Rð‘äH¬îÁœ)Øq!Ú%4g jâ½I#7Sî`<‹mhä…1‰“’DHÅ„M’ÕÔ ’Šêæbâ s€¢÷}ÂhÁ„g2¼~U¼€æ WòQîHÌ´…u š.'{íycë¸<…'üÉKQ´Žú8î pÝÙâ$Õ³DªÇà𵡔„3µBƒ`ù†'Ñ-yÊÙÑ||¼x”^¾xNRZ–‡‡¦•„š–Ñ­kçÈÐøå˧ËçÏ œM7¬#ɱAë£Q7†ÆhhP× hàÓ§Ï °³£ˆ´ù66VÚou#Ï 6¶_X½@7¬#ЃC"؇›GCc44(ô.@¤í`ccce£ùÁIäYÁö3¦èãæuäzpHû0póhhŒ†…^Àˆ´ùVPeHÛõ/_<¦¤-Œé:¸y`Ivˆ Zºy44FCƒê^Àˆ´ýÀšuV†¿Á= L/ *7 G{ ¿X ÑÐ è\ €H›øýëç¯ÁZÝ†Õ ƒÊÍC‘ÃÞGÃ/FCc44z Ö1ÀæÇ§ÏO?ìé4ÈÝ<$9ì}4üba44FCƒ òº €B©¸¸¸ZpýêÅ' BŸ»zú~7 G{ ¿X ÑÐ Æ pðíÛ7x@¤õFÁ(£` u€Ü áv^Ð(£`Œâ@Ñêþ€Q0 FÁ(ƒ½Ï £`Œ‚Q0x@ Àý£`Œ‚Q0   Ñù€Q0 FÁ(¹ €FçFÁ(£`䀣`Œ‚‘ ht>`Œ‚Q0 F. Ñù€Q0 FÁ(¹ €Hž¸~íÊh¨‚Q0 FÁàšZ:$© Òænߺ®ª®3Ê£`Œ‚Q08ÁÉãGŒM-‰W@$ÌÜ»sGRZNLBf4”GÁ(£`pO¿ˆí›V˜[Ú© €H›}òèîh(‚Q0 FÁ`ÄOîióÞùõëÇhøŽ‚Q0 FÁ`Äoö ÒæÞ¾y),">¾t&gNÀ*d`ª‡K¡éÂÔ‹KVñ¨Á¯«-ø=HªQÕPnÅ`NÄ(À“Tèà¤Q0 €øÍ^DÚþv66vöÑð¥'À pˆÈ¥óÇ!\=CK89g¢ •!›†+1u!‹`Ú…_V·ár¦,A£ˆq…V *@Œó°z–`ÐQ7‰Ž‚Äoö ÒæØ8€JF㛾uF€#BPW<¢‰ß¸zNCÛHÙpñ eÑDHâIQhRÄx™‹ß ‚®²‘¥ÐÌ„«'U‘&#+CSƒÇò.£ŠCæ`&®xôÄÏió<¼ü£uÀ¨îݾª¤ª $!\H’ZZs`u V-pqJêLÃáj½O¼gÑB .ŽÌ–n6P®…xĘŒ&Žé<†Zà2Šqˆ!æÙ4´_¾|b e> €FÏ ì’ÍF €TZë’q~WT@ŒÉøÅéÄX#¬mŽÑÌ;€€øÂ €FÏ E!yU<[Ñ ‰§©KPý ÷2µêuâÍÁT‰¶£Maˆ/Ìhô¼ Q0LzKC¨JçaŽÉc#ÖÀÁåR­ÒmŽaˆ/̈´ù6¶Ñ9azòæÐè1Çëé6 #¯òäá’<ˆK —JL+Ð , «ð»—íÈâXÙ$) Õ¿AL/ã7.Ô…G/þPÅe¦GK‰/1ˆŸ ÒæÀuÇh(Ó7F9Èyõü‰˜¤ ÄT‰+ÑÄ‘µcšFP¦zb<ˆK «JL+ð¸M~×â²Y+›$ȖⲫdY‚1‹,ˆ'Uಠ—hâpöh)1 %ÆOR戴ù`À::^D_€ऊ`eCr/2xÿö¦8D™+(,F¼4Yb<ÔÑ…Ç(¸ˆd7cµW¢Åc)‚a‹_‘&#+ÃTƒ& dcµW@´àg\Và±ÙXÌÈôì?@$î`ã`íåÑ|ùü‘B¬lL-øÅIRCŒ!d8«ÊŒG«IaK ›1K’GH²«^´"‚¤ô0 ¨5r@ü|@‘6¬ðGë€Q0 FÞRb´ˆØðÿÉ@Ê|@‘6ðûׯ߿~ކò(£ ððòCZý£EÄÀ‚ßàÒŸøù€"a>@IEåÚå³Ò²£¡< FÁ(@“!FÏ–ppæÄa;GâÕióšZZׯ]{òøÁh@‚Q0 FÁ ®î^$© ’ïö€h4 GÁ(£`âg €FÏ £`Œ‚‘ hô¼ Q0 FÁ(¹ €FÏ £`Œ‚‘ ˆäù€Q0 FÁ(ÃÐè|À(£`Œ\@£ó£`Œ‚Q0r@ÎŒ‚Q0 FÁÈ4:0 FÁ(#Ðè|À(£`Œ\@(uÀ·oßFCdŒ‚Q0 F ¦Ñ £`Œ‚ Ôhll ˆQ0 FÁ( €FCaŒ‚Q0 F&0ëä¸.ctÈIEND®B`‚htmldoc-1.8.27/doc/5-cgi.html0100664000212600000240000004672510343617175014306 0ustar mikeuser

Chapter 5 - Using HTMLDOC on a Web Server

This chapter describes how to interface HTMLDOC to your web server using CGI and your own server-side scripts and programs.

The Basics

HTMLDOC can be used in a variety of ways to generate formatted reports on a web server. The most common way is to use HTMLDOC as a CGI program with your web server to provide PDF-formatted output of a web page. Examples are provided for Microsoft IIS and the Apache web servers.

HTMLDOC can also be called from your own server-side scripts and programs. Examples are provided for PHP and Java.

WARNING:

Passing information directly from the web browser to HTMLDOC can potentially expose your system to security risks. Always be sure to "sanitize" any input from the web browser so that filenames, URLs, and options passed to HTMLDOC are not acted on by the shell program or other processes.

Using HTMLDOC as a CGI Program

HTMLDOC 1.8.24 and higher supports operation as a CGI program. You can copy or symlink the htmldoc (all but Windows) or htmldoc.exe (Windows) executable to your web server's cgi-bin directory and then use it to produce PDF versions of your web pages.

The CGI converts a page on your local server to PDF and sends it to the client's web browser. For example, to convert a page called superproducts.html at the following URL:

    http://servername/superproducts.html

and if you installed HTMLDOC in your server's cgi-bin directory, you would direct your clients to the following URL:

    http://servername/cgi-bin/htmldoc/superproducts.html

The boldface portion represents the location of the HTMLDOC executable on the web server. You simply place that path before the page you want to convert.

Form data using the GET method can be passed at the end of the URL, for example:

    http://servername/cgi-bin/htmldoc/superproducts.html?name=value

Server-Side Preferences

When run as a CGI program, HTMLDOC will try to read a book file to set any preferences for the conversion to PDF. For the superproducts.html file described previously, HTMLDOC will look at the following URLs for a book file:

    http://servername/superproducts.html.book
    http://servername/.book
    http://servername/cgi-bin/.book

The first book file that is found will be used.

Configuring HTMLDOC with Apache

The Apache web server is easily configured to use HTMLDOC. The simplest way is to copy or symlink the htmldoc executable to the configured cgi-bin directory. For example, if your Apache installation is configured to look for CGI programs in the /var/www/cgi-bin directory, the default for Apache on Red Hat Linux, then the command to install HTMLDOC on your web server would be:

    ln -s /usr/bin/htmldoc /var/www/cgi-bin ENTER

If you are using Apache 2.0.30 or higher, you will also need to enable PATH_INFO support by adding the following line to your httpd.conf file:

    AcceptPathInfo On

Apache also allows you to associate CGI programs with a specific extension. If you add the following line to your httpd.conf file:

    AddHandler cgi-script .cgi

and enable CGI execution with the Options directive for a directory:

    Options +ExecCGI

then you can copy or symlink the htmldoc executable to an alternate location. For example, if you have a web directory called /var/www/htdocs/products, you can install HTMLDOC in this directory with the following command:

    ln -s /usr/bin/htmldoc /var/www/htdocs/products/htmldoc.cgi ENTER

Configuring HTMLDOC with Microsoft IIS

The IIS web server is configured to run CGI programs by either modifying the permissions of an existing directory or by creating a new virtual directory that allows for execution of programs. Start by running the Internet Services Manager program (Figure 5-1):

  1. Click on Start
  2. Click on Settings
  3. Click on Control Panel
  4. Double-click on Administrative Tools
  5. Double-click on Internet Services Manager

After the Internet Services Manager window (Figure 5-1) appears, perform the following steps to add a virtual folder for HTMLDOC:

  1. Click on your server in the list to show the default web site service in the list (Figure 5-2)
  2. Choose New->Virtual Directory from the Action menu (Figure 5-3)
  3. Click Next when the Virtual Directory Creation Wizard window appears (Figure 5-4)
  4. Enter the name htmldoc in the Alias field and click Next (Figure 5-5)
  5. Enter the HTMLDOC program folder in the Directory field and click Next (Figure 5-6)
  6. Check the Execute (such as ISAPI applications or CGI) box and click Next (Figure 5-7)
  7. Click Finish to dismiss the wizard (Figure 5-8)

If you are using IIS 6.0, proceed to the next section titled, "Additional Configuration for IIS 6.0".

The Internet Services Manager Window
Figure 5-1: The Internet Services Manager Window

The Default Web Site Service
Figure 5-2: The Default Web Site Service

Adding a New Virtual Directory
Figure 5-3: Adding a New Virtual Directory

The Virtual Directory Creation Wizard Window
Figure 5-4: The Virtual Directory Creation Wizard Window

Entering the Alias Name
Figure 5-5: Entering the Alias Name

Entering the HTMLDOC Program Folder
Figure 5-6: Entering the HTMLDOC Program Folder

Enabling CGI Mode
Figure 5-7: Enabling CGI Mode

Completion of IIS Configuration
Figure 5-8: Completion of IIS Configuration

Once configured, the htmldoc.exe program will be available in the web server directory. For example, for a virtual directory called cgi-bin, the PDF converted URL for the superproducts.html page would be as follows:

    http://servername/cgi-bin/htmldoc.exe/superproducts.html

The boldface portion represents the location of the HTMLDOC program on the web server.

Additional Configuration for IIS 6.0

IIS 6.0 requires additional configuration steps due to its increased focus on security. Start by running the Internet Services Manager program (Figure 5-1):

  1. Click on Start
  2. Click on Settings
  3. Click on Control Panel
  4. Double-click on Administrative Tools
  5. Double-click on Internet Services Manager

After the Internet Services Manager window (Figure 5-1) appears, perform the following steps to add a new Wed Service Extension for HTMLDOC:

  1. Click on Web Service Extensions
  2. Click Add a new Web Service Extension
  3. Enter the name "HTMLDOC" when the Web Service Extension window appears
  4. Click Add... and choose the htmldoc.exe file from the program folder, typically C:\Program Files\Easy Software Products\HTMLDOC
  5. Check the Set extension status to Allowed box
  6. Click OK to add the extension and dismiss the window

Finally, double-click the My Computer icon on the desktop or start the Windows Explorer. When the explorer window appears, perform the following steps to provide write access to the Windows temporary folder:

  1. Open the windows temporary file folder, typically C:\WINDOWS\TEMP
  2. Choose Properties from the File menu
  3. Click on the Security tab
  4. Click Add..., enter the username for the web server, typically "SERVER\IUSR_SERVER" where "SERVER" is the name you gave your server, and click OK
  5. Click on the username you just added in the list
  6. Check the Read and Write permissions
  7. Click OK to save the changes

Using HTMLDOC From Server-Side Scripts and Programs

To make this work the CGI script or program must send the appropriate HTTP attributes, the required empty line to signify the beginning of the document, and then execute the HTMLDOC program to generate the HTML, PostScript, or PDF file as needed. Since HTMLDOC looks for CGI environment variables when it is run, you must also set the HTMLDOC_NOCGI environment variable to a value of 1 before running HTMLDOC from your CGI script or program.

Another way to generate PDF files from your reports is to use HTMLDOC as a "portal" application. When used as a portal, HTMLDOC automatically retrieves the named document or report from your server and passes a PDF version to the web browser. See the next sections for more information.

Calling HTMLDOC from a Shell Script

Shell scripts are probably the easiest to work with, but are normally limited to GET type requests. Here is a script called topdf that acts as a portal, converting the named file to PDF:

    #!/bin/sh
    #
    # Sample "portal" script to convert the named HTML file to PDF on-the-fly.
    #
    # Usage: http://www.domain.com/path/topdf/path/filename.html
    #

    #
    # Tell HTMLDOC not to run in CGI mode...
    #

    HTMLDOC_NOCGI=1; export HTMLDOC_NOCGI

    #
    # The "options" variable contains any options you want to pass to HTMLDOC.
    #

    options='-t pdf --webpage --header ... --footer ..."

    #
    # Tell the browser to expect a PDF file...
    #

    echo "Content-Type: application/pdf"
    echo ""

    #
    # Run HTMLDOC to generate the PDF file...
    #

    htmldoc $options http://${SERVER_NAME}:${SERVER_PORT}$PATH_INFO

Users of this CGI would reference the URL "http://www.domain.com/topdf.cgi/index.html" to generate a PDF file of the site's home page.

The options variable in the script can be set to use any supported command-line option for HTMLDOC; for a complete list see Chapter 8 - Command-Line Reference.

Calling HTMLDOC from Perl

Perl scripts offer the ability to generate more complex reports, pull data from databases, etc. The easiest way to interface Perl scripts with HTMLDOC is to write a report to a temporary file and then execute HTMLDOC to generate the PDF file.

Here is a simple Perl subroutine that can be used to write a PDF report to the HTTP client:

    sub topdf {
	# Get the filename argument...
	my $filename = shift;

	# Make stdout unbuffered...
	select(STDOUT); $| = 1;

	# Tell HTMLDOC not to run in CGI mode...
        $ENV{HTMLDOC_NOCGI} = 1;

	# Write the content type to the client...
	print "Content-Type: application/pdf\n\n";

	# Run HTMLDOC to provide the PDF file to the user...
	system "htmldoc -t pdf --quiet --webpage $filename";
    }

Calling HTMLDOC from PHP

PHP is quickly becoming the most popular server-side scripting language available. PHP provides a passthru() function that can be used to run HTMLDOC. This combined with the header() function can be used to provide on-the-fly reports in PDF format.

Here is a simple PHP function that can be used to convert a HTML report to PDF and send it to the HTTP client:

    function topdf($filename, $options = "") {
	# Tell HTMLDOC not to run in CGI mode...
        putenv("HTMLDOC_NOCGI=1");

	# Write the content type to the client...
	header("Content-Type: application/pdf");
	flush();

	# Run HTMLDOC to provide the PDF file to the user...
	passthru("htmldoc -t pdf --quiet --jpeg --webpage $options '$filename'");
    }

The function accepts a filename and an optional "options" string for specifying the header, footer, fonts, etc.

To prevent malicious users from passing in unauthorized characters into this function, the following function can be used to verify that the URL/filename does not contain any characters that might be interpreted by the shell:

    function bad_url($url) {
	// See if the URL starts with http: or https:...
	if (strncmp($url, "http://", 7) != 0 &&
	    strncmp($url, "https://", 8) != 0) {
            return 1;
	}

	// Check for bad characters in the URL...
	$len = strlen($url);
	for ($i = 0; $i < $len; $i ++) {
            if (!strchr("~_*()/:%?+-&@;=,$.", $url[$i]) &&
		!ctype_alnum($url[$i])) {
		return 1;
	    }
	}

	return 0;
    }

Another method is to use the escapeshellarg() function provided with PHP 4.0.3 and higher to generate a quoted shell argument for HTMLDOC.

To make a "portal" script, add the following code to complete the example:

    global $SERVER_NAME;
    global $SERVER_PORT;
    global $PATH_INFO;
    global $QUERY_STRING;

    if ($QUERY_STRING != "") {
	$url = "http://${SERVER_NAME}:${SERVER_PORT}${PATH_INFO}?${QUERY_STRING}";
    } else {
	$url = "http://${SERVER_NAME}:${SERVER_PORT}$PATH_INFO";
    }

    if (bad_url($url)) {
      print("<html><head><title>Bad URL</title></head>\n"
	   ."<body><h1>Bad URL</h1>\n"
	   ."<p>The URL <b><tt>$url</tt></b> is bad.</p>\n"
	   ."</body></html>\n");
    } else {
      topdf($url);
    }

Calling HTMLDOC from C

C programs offer the best flexibility and easily supports on-the-fly report generation without the need for temporary files.

Here are some simple C functions that can be used to generate a PDF report to the HTTP client from a temporary file or pipe:

    #include <stdio.h>
    #include <stdlib.h>


    /* topdf() - convert a HTML file to PDF */
    FILE *topdf(const char *filename)           /* I - HTML file to convert */
    {
      char	command[1024];			/* Command to execute */


     /*
      * Tell HTMLDOC not to run in CGI mode...
      */

      putenv("HTMLDOC_NOCGI=1");

     /*
      * Write the content type to the client...
      */

      puts("Content-Type: application/pdf\n");

     /*
      * Run HTMLDOC to provide the PDF file to the user...
      */

      sprintf(command, "htmldoc --quiet -t pdf --webpage %s", filename);

      return (popen(command, "w"));
    }


    /* topdf2() - pipe HTML output to HTMLDOC for conversion to PDF */
    FILE *topdf2(void)
    {
     /*
      * Tell HTMLDOC not to run in CGI mode...
      */

      putenv("HTMLDOC_NOCGI=1");

     /*
      * Write the content type to the client...
      */

      puts("Content-Type: application/pdf\n");

     /*
      * Open a pipe to HTMLDOC...
      */

      return (popen("htmldoc --quiet -t pdf --webpage -", "w"));
    }

Calling HTMLDOC from Java

Java programs are a portable way to add PDF support to your web server. Here is a class called htmldoc that acts as a portal, converting the named file to PDF. It can also be called by your Java servlets to process an HTML file and send the result to the client in PDF format:

    class htmldoc
    {
      // Convert named file to PDF on stdout...
      public static int topdf(String filename)// I - Name of file to convert
      {
        String              command;          // Command string
        Process             process;          // Process for HTMLDOC
        Runtime             runtime;          // Local runtime object
        java.io.InputStream input;            // Output from HTMLDOC
        byte                buffer [];        // Buffer for output data
        int                 bytes;            // Number of bytes


        // First tell the client that we will be sending PDF...
        System.out.print("Content-type: application/pdf\n\n");

        // Construct the command string
        command = "htmldoc --quiet --jpeg --webpage -t pdf --left 36 " +
                  "--header .t. --footer .1. " + filename;

        // Run the process and wait for it to complete...
        runtime = Runtime.getRuntime();

        try
        {
          // Create a new HTMLDOC process...
          process = runtime.exec(command);

          // Get stdout from the process and a buffer for the data...
          input  = process.getInputStream();
          buffer = new byte[8192];

          // Read output from HTMLDOC until we have it all...
          while ((bytes = input.read(buffer)) > 0)
            System.out.write(buffer, 0, bytes);

          // Return the exit status from HTMLDOC...
          return (process.waitFor());
        }
        catch (Exception e)
        {
          // An error occurred - send it to stderr for the web server...
          System.err.print(e.toString() + " caught while running:\n\n");
          System.err.print("    " + command + "\n");
          return (1);
        }
      }

      // Main entry for htmldoc class
      public static void main(String[] args)// I - Command-line args
      {
        String server_name,                 // SERVER_NAME env var
               server_port,                 // SERVER_PORT env var
               path_info,                   // PATH_INFO env var
               query_string,                // QUERY_STRING env var
               filename;                    // File to convert


        if ((server_name = System.getProperty("SERVER_NAME")) != null &&
            (server_port = System.getProperty("SERVER_PORT")) != null &&
            (path_info = System.getProperty("PATH_INFO")) != null)
        {
          // Construct a URL for the resource specified...
          filename = "http://" + server_name + ":" + server_port + path_info;

          if ((query_string = System.getProperty("QUERY_STRING")) != null)
          {
            filename = filename + "?" + query_string;
          }
        }
        else if (args.length == 1)
        {
          // Pull the filename from the command-line...
          filename = args[0];
        }
        else
        {
          // Error - no args or env variables!
          System.err.print("Usage: htmldoc.class filename\n");
          return;
        }

        // Convert the file to PDF and send to the web client...
        topdf(filename);
      }
    }
htmldoc-1.8.27/doc/d-compile.html0100664000212600000240000001112310322727434015230 0ustar mikeuser

Appendix D - Compiling HTMLDOC from Source

This chapter describes the steps needed to install HTMLDOC on your system from the source distributions.

Requirements

HTMLDOC requires ANSI C and C++ compilers - recent versions of GCC/EGCS work fine. To build the GUI you'll also need:

Secure (https) URL support can be enabled via the OpenSSL library. You should use at least version 0.9.6l.

Compiling under UNIX/Linux

HTMLDOC uses a configuration script produced by GNU autoconf to configure itself for your system. If your ANSI C compiler is not called cc or gcc, set the CC environment variable to the name and path of your ANSI C compiler:

    % setenv CC /path/to/compiler ENTER         [C Shell]
    % CC=/path/to/compiler; export CC ENTER     [Bourne/Korn Shell]

Similarly, if your C++ compiler is not called CC, gcc, c++, or g++, set the CXX environment variable to the name and path of your C++ compiler:

    % setenv CXX /path/to/compiler ENTER        [C Shell]
    % CXX=/path/to/compiler; export CXX ENTER   [Bourne/Korn Shell]

Then run the following command to configure HTMLDOC for installation in the default directories:

    % ./configure ENTER

The default configuration will install HTMLDOC in the /usr/bin directory with the data files under /usr/share/htmldoc and the documentation and on-line help under /usr/share/doc/htmldoc. Use the --prefix option to change the installation prefix to a different directory such as /usr/local:

    % ./configure --prefix=/usr/local ENTER

If the OpenSSL library is not installed in a standard location for your compilers, use the --with-openssl-includes and --with-openssl-libs options to point to the OpenSSL library:

    % ./configure --with-openssl-libs=/path/to/openssl/lib \
        --with-openssl-includes=/path/to/openssl ENTER

HTMLDOC is built from a Makefile in the distribution's main directory. Simply run the "make" command to build HTMLDOC:

    % make ENTER

If you get any fatal errors, please report them on the htmldoc.general newsgroup at:

    http://www.easysw.com/newsgroups.php

Please note the version of HTMLDOC that you are using as well as any pertinent system information such as the operating system, OS version, compiler, and so forth. Omitting this information may delay or prevent a solution to your problem.

Once you have compiled the software successfully, you may install HTMLDOC by running the following command:

    % make install ENTER

If you are installing in a restricted directory like /usr then you'll need to be logged in as root.

Compiling on Windows Using Visual C++

A Visual C++ 6.0 workspace file and associated project files are included in the source distribution under the "visualc" directory. Open the workspace file "htmldoc.dsw", adjust the FLTK include and project file locations, and then build the HTMLDOC target.

Note:

You also need to download the OpenSSL and FLTK libraries in order to compile HTMLDOC with Visual C++.

Installing with Visual C++

To install HTMLDOC with Visual C++, create an installation directory and copy the ghtmldoc.exe and htmldoc.exe executables, the afm directoryj, the data directory, and the doc directory to it.

Then use the regedit program to create the following two string entries:

HKEY_LOCAL_MACHINE\Software\Easy Software Products\HTMLDOC\data
C:\installation\directory
HKEY_LOCAL_MACHINE\Software\Easy Software Products\HTMLDOC\doc
C:\installation\directory\doc
htmldoc-1.8.27/Makefile.in0100664000212600000240000000513410232770600013767 0ustar mikeuser# # "$Id: Makefile.in 1397 2005-04-24 19:20:32Z mike $" # # Makefile for HTMLDOC, an HTML document processing program. # # Copyright 1997-2005 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # # # Include common definitions... # include Makedefs # # Software packaging... # EPM = epm -v --output-dir dist # # Subdirectories... # DIRS = @JPEG@ @ZLIB@ @PNG@ htmldoc doc INSTALLDIRS = fonts data doc htmldoc # # Make all targets... # all: Makedefs Makefile config.h htmldoc.list for dir in $(DIRS); do\ echo Making all in $$dir...;\ (cd $$dir; $(MAKE) -$(MAKEFLAGS)) || break;\ done # # Remove object and target files... # clean: for dir in $(DIRS); do\ echo Cleaning in $$dir...;\ (cd $$dir; $(MAKE) -$(MAKEFLAGS) clean) || break;\ done $(RM) *.bak $(RM) *.bck $(RM) core $(RM) core.* $(RM) -r autom4te*.cache $(RM) config.h config.log config.status # # Install object and target files... # install: $(MAKE) all for dir in $(INSTALLDIRS); do\ echo Installing in $$dir...;\ (cd $$dir; $(MAKE) -$(MAKEFLAGS) install) || break;\ done # # Makedefs # Makedefs: Makedefs.in configure if test -f config.status; then \ ./config.status --recheck; \ ./config.status; \ else \ ./configure; \ fi touch config.h # # Makefile # Makefile: Makefile.in configure if test -f config.status; then \ ./config.status --recheck; \ ./config.status; \ else \ ./configure; \ fi touch config.h # # config.h # config.h: config.h.in configure if test -f config.status; then \ ./config.status --recheck; \ ./config.status; \ else \ ./configure; \ fi touch config.h # # htmldoc.list # htmldoc.list: htmldoc.list.in configure if test -f config.status; then \ ./config.status --recheck; \ ./config.status; \ else \ ./configure; \ fi touch config.h # # Make a portable binary distribution using EPM. # # EPM = ESP Package Manager, available at "http://www.easysw.com/epm/". # epm: $(RM) -r dist $(EPM) htmldoc # # End of "$Id: Makefile.in 1397 2005-04-24 19:20:32Z mike $". # htmldoc-1.8.27/Makedefs.in0100664000212600000240000000404210330505373013770 0ustar mikeuser# # "$Id: Makedefs.in 1439 2005-10-28 20:32:59Z mike $" # # Makefile definitions for HTMLDOC, an HTML document processing program. # # Copyright 1997-2005 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # # # Programs... # AR = @AR@ AWK = @AWK@ CC = @CC@ CXX = @CXX@ CHMOD = @CHMOD@ CP = @CP@ LN = /bin/ln -sf MKDIR = @MKDIR@ -p MV = @MV@ POST = @POST@ RANLIB = @RANLIB@ RM = @RM@ -f SHELL = /bin/sh # The extension to use for executables... EXEEXT = @EXEEXT@ # # Directories... # bindir = @bindir@ datadir = @datadir@ exec_prefix = @exec_prefix@ includedir = @includedir@ infodir = @infodir@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ top_srcdir = @top_srcdir@ # # Program options... # # OPTIM defines the common compiler optimization/debugging options. # ARFLAGS = @ARFLAGS@ CFLAGS = -I.. @CFLAGS@ @LARGEFILE@ $(OPTIM) @JPEGINC@ @PNGINC@ @ZLIBINC@ CXXFLAGS = -I.. @CXXFLAGS@ @LARGEFILE@ $(OPTIM) @JPEGINC@ @PNGINC@ @ZLIBINC@ LDFLAGS = @LDFLAGS@ $(OPTIM) LIBS = @SSLLIBS@ @LIBS@ OPTIM = @OPTIM@ @SSLFLAGS@ # # Rules... # .SILENT: .SUFFIXES: .a .c .cxx .h .o .c.o: echo Compiling $<... $(CC) $(CFLAGS) -c $< .cxx.o: echo Compiling $<... $(CXX) $(CXXFLAGS) -c $< # # End of "$Id: Makedefs.in 1439 2005-10-28 20:32:59Z mike $". # htmldoc-1.8.27/testsuite/0040775000212600000240000000000010464177315013766 5ustar mikeuserhtmldoc-1.8.27/testsuite/testsuite.book0100664000212600000240000000166310047004012016652 0ustar mikeuser#HTMLDOC 1.8.24rc1 -t pdf13 -f testsuite.pdf --webpage --no-title --linkstyle underline --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --footer h.1 --nup 1 --tocheader .t. --tocfooter ..i --portrait --color --no-pscommands --no-xrxcomments --no-compression --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont Helvetica --bodyfont Times --headfootsize 11.0 --headfootfont Helvetica --charset iso-8859-1 --links --embedfonts --pagemode document --pagelayout single --firstpage p1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 680 attributes.html basic.html color.html links.html list.html lt.html table-allspan.html table-cellpadding.html table-cellspacing.html table-colspan.html table-complex.html table-join.html table-long.html table-nested.html table-simple.html table-valign.html whitespace.html htmldoc-1.8.27/testsuite/right.gif0100664000212600000240000000024507235576310015570 0ustar mikeuserGIF87aPPðÿÿ,PP@„„©Ëߢœ´²¬Þ\â†âH–&‡¥ê î ÇòL×ö»_~ïü ‡Ä¢ñˆL*—̈¯ÙyB7Ò©¥j¥`³Ü®÷ ‹Çä²ùŒN«×ìæ¶ü&ÇÇsq=|ç¿{o¿û×&8HXhxˆ˜8Á¨ÂÕ™¡8IYiy‰™©¹ÉÙéù zX;htmldoc-1.8.27/testsuite/table-join.html0100664000212600000240000000371507236356131016701 0ustar mikeuser Joined Table Test

Joined Table Test

Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
htmldoc-1.8.27/testsuite/color.html0100664000212600000240000000036507306705630015771 0ustar mikeuser Color Test

One Fish,

Two Fish,

Red Fish,

Blue Fish.

htmldoc-1.8.27/testsuite/lt.html0100664000212600000240000000023707272351137015271 0ustar mikeuser < Test

< Test

0 < x < 100

y <= 0

<>setpagedevice htmldoc-1.8.27/testsuite/center.gif0100664000212600000240000000047607235576310015741 0ustar mikeuserGIF87a|Pðÿÿ,|P@þ„©Ëí£œ´ÚۂƼû†âH–æ‰*Z¶î ÇòL·kçúÎ÷þ ‡Ä¢ñˆ|¬–Ìæ& J§§•IÍj·Ü®÷ ‹Çä²ùŒN«×ì¶ëæŽËç8ýŽÏë÷ü¾ÿ(8HXhxˆ˜¨¸ÈØèø)9IÉgW‰™ip©Ù)ÉéÚ*ZŠHjšªºÊÚêú +;K[k{‹›«»ËÛëû ,áM~`Ž>®¾þÝî¾ O_oŸ¯¿Ïßïÿ0 À¥\9È¢ *„ .Q¸Ð!ˆ+Z¼ˆ1£Æ;zü2¤È‘$Kš<‰2¥Ê•,[º| 3¦Ì>;htmldoc-1.8.27/testsuite/links.html0100664000212600000240000000042607301241257015764 0ustar mikeuser Link Test

Link Test

This is a link test.

Click on this image: .

This is the target of the link. htmldoc-1.8.27/testsuite/table-simple.html0100664000212600000240000000246107316232536017231 0ustar mikeuser Simple Table Test

Simple Table Test

Heading 1 Heading 2 Heading 3 Heading 4
Cell 1,1 Cell 2,1 Cell 3,1 Cell 4,1
Cell 1,2 Cell 2,2 Cell 3,2 Cell 4,2
Cell 1,3 Cell 2,3 Cell 3,3 Cell 4,3
Cell 1,4 Cell 2,4 Cell 3,4 Cell 4,4

NOWRAP Table Test

This is a very long heading that should not be wrapped. Heading 2 Heading 3 Heading 4
This is a very long cell that should not be wrapped. Cell 2,1 Cell 3,1 Cell 4,1
This is a very long cell that should not be wrapped. Cell 2,2 Cell 3,2 Cell 4,2
This is a very long cell that should not be wrapped. Cell 2,3 Cell 3,3 Cell 4,3
This is a very long cell that should not be wrapped. Cell 2,4 Cell 3,4 Cell 4,4
htmldoc-1.8.27/testsuite/table-allspan.html0100664000212600000240000000107307236614204017365 0ustar mikeuser All Span Table Test

All Span Table Test

ROWSPAN=2: Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.
COLSPAN=2: Now is the time for all good men to come to the aide of their country.
htmldoc-1.8.27/testsuite/table-long.html0100664000212600000240000001322607236356131016677 0ustar mikeuser Long Table Test

Long Table Test

Number Text
1 Now is the time for all good men to come to the aide of their country.
2 Now is the time for all good men to come to the aide of their country.
3 Now is the time for all good men to come to the aide of their country.
4 Now is the time for all good men to come to the aide of their country.
5 Now is the time for all good men to come to the aide of their country.
6 Now is the time for all good men to come to the aide of their country.
7 Now is the time for all good men to come to the aide of their country.
8 Now is the time for all good men to come to the aide of their country.
9 Now is the time for all good men to come to the aide of their country.
10 Now is the time for all good men to come to the aide of their country.
11 Now is the time for all good men to come to the aide of their country.
12 Now is the time for all good men to come to the aide of their country.
13 Now is the time for all good men to come to the aide of their country.
14 Now is the time for all good men to come to the aide of their country.
15 Now is the time for all good men to come to the aide of their country.
16 Now is the time for all good men to come to the aide of their country.
17 Now is the time for all good men to come to the aide of their country.
18 Now is the time for all good men to come to the aide of their country.
19 Now is the time for all good men to come to the aide of their country.
20 Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
Now is the time for all good men to come to the aide of their country.
htmldoc-1.8.27/testsuite/basic.html0100664000212600000240000000641307500211520015716 0ustar mikeuser Basic HTML Test

Basic HTML Test

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Now is the time for all good men to come to the aide of their country.

Now is the time for all good men to come to the aide of their country.

This is the Euro symbol: €

This is the Euro symbol: €

This is a grayscale image:

This is a color image:

Image with BORDER=0:

Image with BORDER=1:

Image with BORDER=2:

Image with BORDER=3:

Image with BORDER=4:

This paragraph contains left-aligned text. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.

This paragraph contains centered text. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.

This paragraph contains right-aligned text. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country.

This paragraph contains justified text. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. Now is the time for all good men to come to the aide of their country. htmldoc-1.8.27/testsuite/attributes.html0100664000212600000240000000144007454653414017042 0ustar mikeuser Attributes Tests

Attributes Tests

Small Normal Big

Bold

Italic

Bold-Italic

Underline

Strikethrough

Strikethrough

Strikethrough

Strikethrough

Strikethrough

Strikethrough
Strikethrough

SUB/SUP Test

NormalSuperscript

NormalSubscript

Non-Breaking Space Test

The investment objectives which best describe this portfolio:  Maximum Growth: maximum capital appreciation with higher risk/volatility and no income. htmldoc-1.8.27/testsuite/ducks.jpg0100664000212600000240000010026407305754404015601 0ustar mikeuserÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀˆH"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?æþ(ŒüBÔ¸ÿžú-k+±ø£ÿ% SõÏÿE­r sZ-Œ‚>zÔ‹(Å<ž8¦ U jPè¨IœÓO4hNž”ñ2õªx4õBM‘p>iÂ2y*º«*Â;/©ˆ‘mÉ< •!'ŒS’|pjÄw1þ4 Üj@q÷OÒ¬Çèiî%9^´… óõªHKÑÛÄ1ž;õ«Q['ÞÝ­d ³ëŠrß8û¹4ô‰WÕ'œþâ°F cÉbi£S}ıÀô ,t>È[®m9š5ç°ëXÒxÉVçgÙ”ÇÆ â$ú1ö:$~òG¦jN[ˆÔ®#UõÍi^ßP‹åÚ¬ùíÁ$;‡Û"ƒc޾¹PHåþµœÆB òX§·jìäÒ,\n@…þ˜¨Å›¯£Ø;¨qlµ4Ž(”U$_­c]Mæ?+{^š&¹hcÚŠ½vô&¹ÇNO9©µàGº“4Sh4.Zî¹H8®‚ÆrÌ„·#ŽzW1;øû é4ë?;=b€©•ž0>WîµfÑI!ee¯) þF¶§NÌÂu9“­Ä’hÍŒ†Çä-Ô¥¶"ÊÆ&–æA€rW®x‰ü ܈üÄ—ÓÖ¼wÆ^&j¬V‘0¸™w x }+ª¢n¢IðÑ\ókû)¬fÛ;!‘¹eVÉ\WSá?izo‡µ[»g–âådžÚ8À¦åvÿV ù­mPIõj)^ Œàî\ö4S¸]Å0Ä=S?ôÏÿE­q¹Jî>)A»â¨}|¿ýµÆý™ª–Ä܇v)¥êo²¿¥ÑÉ?/4ÑlÕˆÆ}Í*Z6zsV¢µn1@›A9Ç« hsõ¡cdÇ4ï´•àiØ‘ÂÔÓš<ŒtëMûK{Òƒœ’h 0h™åIèjO<ðjT›pÆ9 5!PÀƒR.EL¬\ x@yÅ1\bdâ¬"näR$9è8«pŰr8õ M‘¥¸Æ{Ò'<€qÛ5ywgö«q•S—¥¹“œüü¼Õë-IXzšÝ°²k™°Àô­i-„+Âà O@Wfeµ´VÇʈfNç&ÈmسòŸÒ§XXÌv©ïJlÔ®õ95)uc½–ƒ¢åc·Òže ò€)é}A¤;£¹sñÅ:ÞÈ1¶+¤m&&è0=ꤶ1[‚KCSÊW7Bk ) lqõ­›÷²j§>¢¹{›ù¢M°³éU­¯åšM’³îis$ì>W¹³6ªÒ >[¿5•s,nÅ·ŽÕ©™ö…Èp)FÀê ¡Ý…Ò(Ú^ùlÇÐ×Sa¨[Ëïn"â®uôæSŒi¿Ù’7Þ Ãýêh™ÙZAmª ¬ÌSïÏÍùW?ây¡Ó¬_Ë“36žªv–M¥Î.¡cr¯\ÏŠ5—ÔïIvÈ^8ïG3¶£„z“Êdrǯ֪1æœÍž:Tg­IÔ„'4”´Røœ«>•ÑØÝC”k“ߊæQ¶¶jìWò$™GqÇJΤ9‘¥9ò³¹Žþ¢9¹g³t®WX˜5ÉpÙœÔSjÒÉ µëYÒM¼’ ö¬iQåwfµ*¦¬…3zf‡(Éòdâ¢^jx­‹ò¬2;µÐìŒÙXœÒäúU¹,%ŒW òþU±§èÑ]Û‰’qó®9¦U#q¨6ìaB²†ó…ëWbB±É€vŒ6¥t¶–FÁÖN$„ýìWHš™¨@.Pv¶8È=«–x•Øè…Ž7M†K}VÊâfˆ²°ÇoZôMA1ø„]n*¥Ž¹ëZ:G†¬ôøãP®>ácœ×Oiîa·!ü뎥Nw¡²÷U[(Ø!* jÔ†)bˆŽÇÒ³þжˆ»£`§¥iÃ(|ǸþµTìŒ%pÌr) »Hç"’ÞÚ$Ær3’=*ÂÌC.3Á¤·µòåv•n+d®Ñ슪Ñ<—6“‘可 ãWÍ0ÓgÑüMu§I#ÍN|—'?)äW¼kר·c#fQˆ8Íxæ¿ ¼ú‘’I$'9¼ÇãZQrom ©eêQð…ĺ~£#ÇÈÒFUIê ?Y»Ô.î1/ð1;Xä ŠÞçN¶•·<Ê…¸¢âïMdÄWnXä§ë[û;˘ÉÍÚÆd0·ÚÁ}§‚NåÈ4’<‹>Äa]>cÖ­BÚJÄñ†=Êœ¥dÏ'ÚåJÞ¸ÇéZ¤‘l|󢟕£f°àÔÑjRÇ Ií×ä8+·¢ƒK¹™†c+õ½m ,Žd¼¸Ùž¬ã$Õ$ÉrŠÐˆj67a‚X¥ï©ÍZÙŽ]f–UeÇÌ&’]?Nƒ?g»¤í» šÉv}¥ véŠ,M×bG†ÉWt:„˜ì dš*S£A2º…º·÷ #S¸îŽ‹â\dü@ÔÎ?çŸþ‹Zå’1‘+§ø)Oêj=cÿÑk\ŠÎÝ h¶3{—•8 U˜â‡ø€…f,ùêju˜sL›&ÚÜô#?J¯,?!•›¶ê‘dã­1Ì xoΛöPÕs Ž´¡yÈ¥aܤmxéùRCøVˆ‰³Z@{Š,+™e*iëoŽqZ«kê*D¶ÁÁ^  ™±ÂOjµ£žÕybU9ÆXUzr; åh­Ž*ÂDª 6=…8HYBK±·E…pX¶œ‘ô«Ö6&yFj!ìzýkFÖeƒ«P#D"ÁˆÚ=sU¦ÔWy‡q+ëY÷×û³´ƒžÆ³ÚFe#${J%\ÓŸPuçZ¯5ì±BJÈ@=³TC”äœqTçšYXàŒÓh]ï“;ˆ'Þ¦‡X–Úp“;=jÉØvH=jTÝ€².Aõ¥q„+êF MXM-·}ÐÃÐö®^ɤ³>dvÿwÒº›]v1Èì¸èwP!·‚vŸJÏ2̧ñÛ&ºÈ¥µ¾ˆ0LäuNëFóbCÒÚÇ>&ùnWèÀPbT ¡ù{VgÒæˆ€+9áìf÷¥¹$ñ;¦à»ý=k9æ’6!ƒïWí¾ÔýY«Û×A|SÎ^FßÜgÖ³®"Ý×?vi¶Rw¬»6»“?+ 3ޏ·ÈÇ5I  rAϯzêgÓ3ëY“Û²ç*+7E"®£qlÀ“ëÒº[NÖé0Î þé<×/20ìRg`s»ÔRRh§#Ñ‚é®v34dúÑý˜6ò£s\%¶³$l¤²~uÐÙkz;‘払¿ØÈ«RL‡ û«{ ŸÊŒª©9ÏJò[šg'Ö½GUÔ´wÒgKr$(vîÎ3^Y?ß>¹Í)ÑEriŽ”ò TdzÔ¢—¥ ` .F:RbŠ9õ¤ëJ8¤ а®pÇ:Z®)ÀÒhi—à»x×bVö«Ä&G—&zŽõË)ÃN=ê÷ÙZYí¿ÖuÚ;ý+”âÖ¦°¨Ó=@-¬ÑÇ#ÇßAüÅ:; ô‹ÅžÍÅŒÃ.‰ü>õÆiº³¼R[JJÊ:ŽùõÖhºü¦2²°hTí.;}kÎ)DëSOcдãížÕùáeáï!©b[ìþfY¿ÕJ}º*Ë·˜ÛÎ0ẄâÇU­K¯"âyoÔ¶ìÍX=ƒ©£§]4ˆ`¾LH€[½k€‰&¸-Ðö¬‹WKûX݆Ç_CZpIºY>úü¦¶ƒ1–åèIågÐÔww‘ÙÙ™dm§ úÒÇ2$%¥ mäšä5íZÞù|µvò”œëZΧ$t܈ÚE;¸ÅÌR“6Cd²Ô×q¡XÉ!o³F²7g“ε&Ýkq$’ÈÁ~\>àN=;VV«K†+Í¥êÀ¨®Œ,“V0ÄÁÞå)ô<għÇ5Qô+s…û Œún滓n e.ƒÚ¸Î[’„ú-bö=È”“ÁT-øWm¢q^G ÞŒ8e¶ƒØô«ÐhÒE†‚Éz’k«’X¡ÛË3ƒÈUÀSU&Ôoòc‚Ónz ü(¼P{Ì©½üJZ}‘ ä€þu“«k€ p+°ãq«¦…Q—:¬°;‘¡à}MEö=)%iL–ð¨þéÓ½Á+=®ppÛ³ËæËn=z/¹­í äªÜJ3×~qü룞ïB·$ý¡\ö qü«.ãÄ61çÊyþúŠ4/Þ} ‡EØ£eÒÈþÍÓðÍïøI¡aµàVø?ÒŠ4 LÛø Øø‡ªxÿôZ×!×ë]‡ÄñŸˆš§®cÿÑk\š)?Zµ±/q›OÖž…L±óÒ¤ŸJb¹Ýž¢¦RÜT‚OtÍ&â!Áæ§R:~´Ñ9©D#ð¦…rXÜ`sÍN&ÈóU‚`Ô˜8¦"È›åãƒN玆«l㸧ªûP"Àc“šxu yúU`¿!ö5*¼dõPÄÀ¦Gö§ ˜Å•$â£Q÷—4±e®9õÀ’9¤99Å;s“ó9ÅG1È9¤—äš@<¶_ÔZp|ñŽj²Êƒ‘V‘ã (‡.zâ—ìÛ‡Î0{Q™¶>9Éô©Ææ?¥ "û:ã-†Å,j:䞆¥XذÜ2iÞVöÉ#éE€b°FÏFíHoIÇ ÷èßQMtlàõ÷¨ ±=#õ¤3RÇRšÉÖM>nWïÁ!àÿºk±Ó|]ex‚;¤1KÐäcšówQÃ&Qû‘ÐÓ¢2ó}Ç4Xiž£4Q\s†SïU›Lld >ø®[M¾šÔ)å{‚k£ƒWœ¨hÏäg4ì-°û7Þ‡ =)Ü2‚1õdë6„¥€¹ã&¥X¬.“}¹Gï€h™‘

HP>••:Çpƺf¶‰OÜ<úÕy,íäᣠžâ˜ŽRIíú:“øU9’ÆC÷JþÖMáûyׇaõ‘wá­¤í¹Û¥Kg)s¦@ßvEüëçMdbT©ÆºË ܸ;X?û¦±/•¤º@×Ðô5¥•lÑ|èTúM Wgt,HÈÈnØãùW?}rò~'?ν:}Lmbzç5O Ûº7–ê\tç­+•ª<ªúêfÜ7#{Ís·,ûÉÛùWE¯½žŸs$!óTà®+—–æ9ä'èk ;îtAu4²Èb êgn"Rz¶ï— ­r?xt5vv7HGZ„ÕŒnqM169¹7! i_*¿Z°#ÛÉÅE)qŽ”ZÈ.VÅâ1M¨,JZZLb€ QÒÑ@Î@/zhëNSÁ¤‡ ý)§i1Ï4¹æœ¬r7ŒÓ€$Ôjfà0QÜÖ͆™m),_ÍÛŒZǶ¶šf#vçšîü§os–„“—$òn+–¼ùc£5§&Hb·±³,¨ªqÀ Ís7"Yd,Àµ{3xR;›`ûV|ž·ˆî`JçœVzð…Ü÷ М´†Ç}•›¢àúG±“  õÛ i–‘1y°õ5:« (©Žüô¯B•HTøN:¼ôþ$y2E,G•"¬'˜Ø ¹â½&çAÓcÇšëŸAY’[i°7îíž\zô­ùŸ¶gš{K°“ô«1èSI÷aʺ˜äl…µ‚8¿'ô«_g½—eÑCè"4r¢]FrƒÃ,2"jŠO\¡æü«Ñ-lšóJÿ^+^Þh€`•ùì3CŠ©#Ç·wÐ@çþKý¨ùv“ò¯b+¹hí™HþùÅ$óO°‚öÑ VE)ÈñïøG¯ËÀãð¢½V}R H ¼‰1¨rh©m"¯Q™_‡üWz™÷Oýk–SŽ•Ñ|Ig?ÔÆHOýµË.ÿζ[-ËaÀ52H Æj¢£ÐÔªŒjˆ/,Š@ÇãVb|àU£$ã®GÈ"™%¥rGâ*7žŸElH8çÒ®E¨È?¥"Ë@i»v3Ö¯¬A‚>^ÆšÑ ¸ C@Y PÇ*¼¹ I=ëBXÆÜjªñãƒÈúP d%½*7˜° ½EY’ ŒN>SÒ«´>eÅ&P+`Lœÿyi«&ÑçEÊŸ¾ÅDÁî§qMå‰hÎÉ=;‘–‡Ì ÖÇ#ø£Ï"›ˆîèNÉU=ê°sæ“0î:•¥ó[7+±»J¢‹*J3åÌ›Hãž*+‹t Ò g–È‘"wµ&2¹¸´rêÇ­i[ëÍ*CåUöÇ8'8j£=·”r‡š›´Vs·Ó/c]¥d'¡5ÒAs ëò^Ko}$m‚q[¶:Ã!R$>â®3L‡wwÞo³$²Ç;qõ©´íb9€W šÚA ƒ#J²VKP2FAþUDÙÈ õºÉl<Ϻ¼vª2é2’qùQa\ÄŽ6ÈÝŒwÕ‘a®3‘èGJ´tÙ€TŸr*X¬®:¡ÃzQ`lÍ“KÙȉŠÿz<þ¢¥H®6ü’ ìà ?*è"…‡Ær:•⯥•¬«ÙöaþÎZÏ,j‰bÿ|n_ÏŠÞ±Ô›"DÞñ¾*âé(Ày}½«]i¯Ìcöƒü¨¨Ù[…’ܸ»nÅgÜIªBŒùIWº¯øV ºœö ƒ¹àí¦KâÇDÎÐÃÛš‰S¹jeˆ®ïçfa6ŸºIúÔZŒ†òÑMz‚>†±nü^’„7°{â9dÉV|ö;ˆÅ 6[†¬§ªøµ+–xnnežñ–#ëQÁð{Wv n¢T=ÙMF|a«Y¿î®%Z‘>&kМwö…d௹ªs¶Œ´¿¯ÑÔË} Oâ)ž*Ã|0Ñ#M·7—[ÇeÆ?•g7ÄKÙÎdù[ÔTOã $|Ò~uJœ;‰º„ïà]")6Å%ÃváHÞ°¶_øõiAþñª¿ð”Æ­“#7áW,õØï¤ ¼cߊÙ(™µ3ŸÔt›HŽÔ°sŸÌS-|&ª£ìaã“nì8â½sEÐáš–â<‰‘ž„R\/ü#~dÆk`x þXæ°©8ì`¤|ù¨i·}ÃEêñÁ²ýÙê¬0k‡½kW“uª²ÕMJzrêR"Ó±M ÐX”¢“ð4€Jpéů4£“ÐÒÍ.3Í]¶ÒînaT?ÄkNÊpLlì;·•ÉsH­c¦É¨GÍ*Åd+Î w>ð†ˆ®d¹ººœªà`ŠÄ‚ÁÛk4Š©è­Èü+fk+b­ÔæOöZƤ £f rz#¹6V¥ãb€»‡¸«öqZ[6bµ~ˆszTò2àÊÛG÷È?Ê·b˜¬;™·»F9¯&§Å¡èB:jŽŠ™ Þ#éÈÅ2y..I ^þ•ewX–i~ÌÝ*{¯iG·íÑ«÷Ú¤Ö”£'önEK.¶)j7PÛ´³AÀ9|­eDö[PŽ1ÝBô¨î|W¦ظߞS9üë!ït©[zªƒýï,gùW¯‡Œ’»Iev¯½ÍÆ´°qÌžhõTþuJú{9Eh= .•g>¯k¶ ‰cþy¨þ•VMVøó雫£S #¡…æ £„\glÕzÚkˆÃ:és•%§` ü9®/ûORf]b`h€©_ºŽ3sÝ8=K0Ïò©å}ÊÐÚÔõÝEå1ÙØÃñ剨쵮ɖÿR[$_àBšånµ›³žN?Úrk)µ[Ùú ›>¬µäz̺4'}Ýü÷L?¿.AP?ˆ4ÄýN•ûn1p\:j×Gþ^¤ˆ¨ÍÑ|î•Øž¹j­ËÜꮀÑ\ºK8bçéEdw“þ+½Hú”ÿй•\v®¿â {üo¨ýSÿ@Zæ„ ¼³ šÖ+C=Yƒ1Ò­*n™ãQÊ_3ìyöE¯SŸÊ‘´»aÊ£7µzoü!º"ö7ŒqXzŸ…oí2a‘ê §Ê…Îúž}=ºÍ“céWlÞÊ ‚#ŸÎ¡Õ,õX$*Ñô'ŽËxŽ ‘ȸ=E6•bïÔö[¿Dš}›@Ä ŒtÝ?Jâ|Eã½@¤"VUS“ïXÖ­¾Ñbv~¤ãÒœ4“; b}Es(ZWF®¢µŠ÷:‹]ç¢ÈGvPjÒ 8~»+b?Ìcý£ŠQ•»aßÍaÔF õªìú™ó.† Òa”äZ€¡50ÐlÊÀ'ÔšÓ–k–ÊÙZùiýùåYÏ¥OpÛ®.‰þ¢ÈjO«3Þ &ÚB² üÿjO´é6ÅbÎ}Ö®.³î[gݹ§"bq€ûTØ|Ñ2|—¸?¹ÒãëO[]E²ˆc°·aÑ%'?hÁµ¡–©ƒ4û€ö͇µ¶Ç8÷ZÆÐ¿gUüªÅ½¶£p34Ê€ú6+ òíaØý)øòŸò£ÙÝY°öÍlŒ§[ÆùGï³5nT·fQоOõ«Ë'ü²Aþñ«ööÍq€‚,j—NšÜ=­N…k}BkhˆHâÔ„¨n5ëâGçé[£Ã×/‚UH#ŒRÂ9sœˆÓ޵Q§Od‘.¬úÜ㤗Rºr^g?JXíf'÷’9úšê%Я±„‹#Ö©¿…µ)N˜}J¾[lO´¾ìÉÚûÉ}Hº½¥¿Ü·f>¥ªñð„ªNã“êÆœž –B2àj«>‚æ‡S=¼HØÛ´Cꀚ¯.©q7,ƒðÓAà•~ôVÿá*8eãÚ‹1sÇ¢8wº¹pªò-Ë]±õ®â_ Ü‘ˆ”ý@ªRø:é2d“o=èåcUÅ=¼íԟΞì~vÅu ᩹œº‡™ˆQþÓRå/Ú)¦Gºe/Ù-"ä¹$z Ö’+uù _5¿Ùªí¦ÜË’cØ=éØ\ÝÌöžâ$b}Mf[dµ_™Ó#ÔóE"—‘ÙüDjAOBŸú×,K·S]OÄ5ÏŽ5#ž7'þ€µÍç9­ÈÊ_3žjTlr:ŠA­HWŒÓ$zÈ@êOÒŸæ±#£EójðOBN)êqíøS¸‰UÛ=x©û{ð*¸Å9bÉÁâ­Ûîã¯z™%WpBŸÐÓb´ŒŠ¿šc;A± 4#E A8V:ÔËb ®×ïïWÓr…`ã¥XKà ŽÞh&æg–p ¸¤(HÚëøÖÚéÛ†Xgý¡Rgá~`Gæ)…Î{ìì§ûËA¶VéòœÖé³Uà|ëèzŠ¬Ð¯AòŸJæA€©*Ø5^HãÁWÓ?2á…QšÁ8Èþ”¬4Ìç,8+Ѝì½H$zÖ‹Àey¨ª’ÀÕ,´P“pæ3‘ïP™K7ÍœÕà \È5@a—‘Þ¡”Ší+Áýj¤‘y}b(Øçæ·Ü Î~•6¹W±”'¡‡qSÍ !ô¨ °4¬;séNYÊœf£Û“ÍïŽ(B –È$ð+bÓQ 6;×.$x5,w¥>èíÞ­JĸÜô;;ˆæ|} lA.GÙþ÷¼¡5{ˆÎD„U¸üOqü¶f?ZÑT‰“=z6):Ë}H8­+}Ì}ùÔÿ»^.¾:¼CˆóøœÕ˜¼e­ÜàE+/û´sÅìÅìÚÜö¿ìý.4ÉüÅT¹¼Òí_1 ‰ט[·‰u¤N~­Šº¾×gæGÞO÷›ŸÎ‹ ÐèµØZ‚"‹,=?¥r×ÿõE¿È?3VO‚µ€~xÙ—Üæ¢“À—¤î{sŸPi6úqG=?ŒµyÉÍÓàöÜEeËw-ÓîpáÉûÃþ•Ö7ïG)cЮjH¼~Ä+ZF}ö‘üªm&WÇ`çzˆåç*3úb®Iô?#2 ë)€]üÝüØÇôZЊg\hEÿl—TŸÙ–÷m#ÁôN˜5évÑ®a·pÿR¿ãYr´õ2e¥ÓH‡ƒûÎsY÷‘@ M5¼cн="Õ2´Qž˜¿\U 4Ødrn¤šàÿ·À¡°VêÁ.4²Ä}¶G¦jä>EÀa¦M£8D&ªA£[´¢°€ãknÊÚêÕ÷[éÐ!þð•Ç'†[yÅÈ†ÆæF‰ üê/µj«šCgý¦ã]rËy»tЪzÔRßX©ýñ猊|¯¹*^Gךäƒh³HÏÓ5ƒÄ ùi¡ö/Šê›RÒßp×Ûš®Òéîr«ŸrqPã~¦Šmt1ÒßX`Þ[D?ØLŸÎ£ºÓBßjw2¿ñàVÓÎ=‡í%ÜÛ‹Äú±c…Gv3kú«àËuº¢°†¦Ë·È‘=8©!Ñ5þò°¤t¦¡ì/hí¹¤Þ$¹RWÏ’F€TO¬êsƒµŠ ’ÜʹcíZÖÚQûÐÙô­.‘ocŸY®äožá‰öæ´mRæ\e¤8ëWìpÛ#bÔ3v$àVV¡©ÉåçŠ!Ð*i)\my—MÒÛ 0v#¶ê¯7‰švƵÆßø†vb"'ýâ+%ï.§9vsCš)S}NÊëÆ— ¬ßEâ³dñeä§ñ¬æ·ð5YŠ ‰>ìL \Í•dC®_Îp[ØS~Ù÷ Ò7§Z…4ûÍ¥J/©ªSÁ Ûíßš«Ûq+=‹Óø‘¡·…P{ŠËº×¯îAð;⪼Ë#}Õô0û¹ý*lÕ$º¦™²îO­wɰ¢ŠV+˜ôˆ—;µ2ˆÁ¶‡œf­Äë·*Œq·qõ«Id8úÓL–\IS-N®qÅUHOqô«QB2)ˆ°“ɸsÐõ«)q&ï½Iº0ëŒö«igË‚:¢§çÉH© ËÁÿ ìxü) [;ô 33c8üj´€‘†ù‡¡ëR+»¯oZa“pÚ>¤ÓUØ/æÆÖê*›–bDyÇnƵ e³òóÛ4}2âNž”‡sHËYvžç¥DmÝ÷ŽÕÑ5  ÀÜ;UcjƒU4šÌk–ÈÃhÊNEn}”ÈçÚƒnø G¹}håÌ#m¸`®¦7^sÅmrÇ=ª#vBqëG(sÏi¸t9ª²éäz Û™Jžp?£3D¹ÜÇŸJN(i³ks8SšÏ”:õV½ÍÎVtžl­÷8¬™¬J ø&™çà Ð]5äÁ Õ¸´b78_­G,žÅsÅ/¸œg ÷¥±ë¦þËÓí†dœ; ­3iØ+b{Å?fú‡´¾ÈÆM±¶µN5c!´Ž”étÙfËD2=ª»é*£÷mžõ/™l4â÷%#ÔU¾K—_£Uˆüa­Är·ó{e«%쥖Z“oQKž}Ë´N¾×â7ˆa Â@þðÍoYüGñ Ä.bû­y˜`*ÄwÒÂ~BA«UÜ™BûÉgâoÜ€VÊ#žäV¼7>)Ÿï­½¸>•âøŸU€b+†^Ÿ/‹5ÉWkÞK¶¯Ú#/e.ç´É¦j÷ ‹e¡X V5ׇ­Öm·ºÊw`@ü«È›XÔ‰k© ÷4&§:Í+õ¡T@é>çªé ü÷‘gý™8§Eá].Gù.öžÄ0æ¼Æ-X»|Ó]›U-w·Ö¶M4g(4uwvÉ£±¤—g¾Ìgõª‰â+Œí] CîÌ¢«Ë«é?y~Ì}«2mZÀ¶#±ïRߘ(¾Æô×r]‘:DÁ•)ë£ ÔóŽ¥Ö¥ŠÒÉ—þ>&Î: pk:=FžýÜ£ÕYõ9¦ûÒžj½/éŠõ:þG­]xÂÐctª1ýÓXÓøÒ$Ü!=y'Ö¼õ%Œœ»žy©Åå¼c„$ÕF0Ž©ùš³gGsâKËÆ!€xàUl×/ºâr3ÜÖQÕ”!‡#§¥RŸP¸“€Hªs]D Î±-4;p{‚ÇÐP÷ºYØ7}kˆo9Ï9¥³°û§”û!û5Õ‰ñ›>Uº·ÔUiüc)[ÃcÔkšRŽ CDRŸ3„ wšÕíéýì®G¥QùÜôëM,GJU™ÇAS{–—bd‰³È©—ˈd·à*™žgã?€ÜJÜ*.;ÞøÇëEgŸ¿Z)65z¯ÄyXxóSQýäÿйuÜqžk¬øˆª|u©çûÉÿ -sq*3€Nµn¶9dõ`#É#9÷«Q¤ŸÆ #@9Zxb½*‘ º–éÍL«ô¬ß5ý F‘óÁä÷§{ ƶå'T©*É…æ±<ÒùÍêh¸rw1/$Ôé}³ë\°±ÓG#RæS«þÓxZ?¶àŠæBÊ_Ôg·z¹ ¬ÒvãÚŽaY#iufn­õ§.¦ÍØš¯k£Ï&6©#é[–~”¨ÊñïNìNÅ8U˜É8ùN nÛxz5ÁlŸjÑ‹K¶Œsõ¦˜·9”‰Ëp§Ú¦[™³‚+¤c§[s$±Œ{Õi¼K¤Z— }”ÎF™ÏBµšl}³ÝÞH#†1–w8À¢Æ>X-FkÎ>%øÊûPÒ—OhÕ"”äãÚ“vWeš“±ÜiÚ—‡5¢ßUµgn;mlý &¥ªøkI.óR…ôçùWÎ vðJ²& []d™<ÇMÍßqÈ5µ}ޝ«@ö}gÅZTT·:QŠþDحȤu¯:Oˆz¬“ÜÛí'… GëšÆ‹^‘œmÂ{e2?:½ejo&óžÚ s¹dˆàôôÍL봵иaÒÑ+“ë:_Š/Ûí­¥]w*Fǧӽs1jwör&8(äãèA¯KѼc+]-”žX'åòçù?^™ªž0Óô}]Zo5l5XÆ rt“êqŸ¡5̱R´Îaîû¦>‘â+KÇXoasÀc÷Iþ•Ò´P"ü°㪵p)áMI­^å ˆpÛ%~+­ðV§u§ºÙêzt—Äá$A¹“òê+¢àôl䫆’Ö(·‹†8†)ŸlÓÆ›©\q¹ÿÝdÅv7:½Š’šyçJŸÒ°n¼Y;’±[ìGå[éÜä÷Œåðäà“+}Ç?•:M>ÎÝqp"“ÞB§ó·×·lF÷Ç÷zÊ›—w;ôb=‰Åt«%Îo!$Fô" }Vå†C.=+^H2dWÛ«?Ùv`Ê·ý’(´ƒš'&ûÈϵDt9¥ $úW\óéð±ÄƒÒAUŸW†<ùpíô+Í'Õ”§.‡0|;w‘”8¨ÛH’.dâº)5©¤PŸ^*«‹Û–ÿTèj9#Ð|òêsÏåÄ:dÕw”·ÝWT4I˜ƒ-³ô¨äÑíÓï#Â¥Á”ª#“bųPÊÌ8ç5ÔIcd3ó°úŠÍ¸Óâl˜ÜIA£EQ`°îsS¥Ë,xÜ:´ù›!W4.rLjÛ?Jm1óÄ„K$ž¸5d°ã©ÍY·Ñ/È…ùö« ¤^MùVn2x”擊‘<“ÍLÚeÂŒÏâ)­e2ôSEš2b¬{þ´ñt¨:äžµµ˜õœ–2·ðšwbЕ®ÉÎÞ¨ÚiøêtÓ$=xæ¥P~P)Ù±]"ƒLp?Æ¡‘Ëv­o°[/`~‚ÚÚ`rÇéIÅI»|Ѳ I®†+ fçtŠ>•atËnOšÇëÌC˜ò‘Î&¦M9Ød£Ü×DÖP¦™þÊbš-íWþX³Ÿö5L^Ó±ˆšbœ5ja§ÂŸzaZOl#€@À«ý*¹R;e?"Ùqó–Ç¥H-¡p0­Ja}¿{ð•#pxfüè°\ìöôˆúS¼ƒ€šÔŽÞ\q“ŸöªÂZÉÁdSþñ§È.{&Sþ¥F;“R¤—ŒgýÕ­Ø–8ð@?Z”ÝZ ûê>‹þ5\¤óyñIåP66>•–³7Xÿ¥tÝC!âfǦ 1@Ù;C~ŽQ©3ìxÎà3õÍ n óo­lÉ»ô5ZHXämqJÅ)¥± b_riE»gïÀ=ÍŇù”Ÿ­[HFŸ÷Á¢Ár¹ÓC€CF=h­8B€m¿öËÿ¯EAvt_™?á:Ôò‰3ÿ|-s{Ó€w­ßˆg=ÕyÞŸú×>%O(¨Q“ÔšÑlD–¤žg8§Øš„m=ñíR©Ö™#n6ŽØ¤mÙõ©¢ML¥¡r¶ÇnØ©=¿:¸¡ #ƒšµ¶ó…è°®RK=àgó­¬"v\GŒ ×>õ¡m¥†™±ŠÖ†Æ$2sNÂr3 ÒâÀ,ü+ZÖ h±¶=ÇÖ›%ÎiÌ÷(qü Ömߌm!]¶‘óëéOAr¶tÑÜ, ¹” ô5þ*´µûÇÒ¼úçÄ7dž™éQÆêãs6O½+¢­mÎÊÌÀ˜Ö²î5ÍFï“#è+6ž‚´`ˆ¸ž¡r³-Ì¿~BGÖ–;AŸ˜ŸÎ·-´—”ƒƒŠÓ‡Ãª9v•…sš†—&q\Ïô¹n´U»Š>ÌrØÂzש<]Ÿ.èHô¬ëí^ÀÛÉn°+£©VpF9¦ÕÕ‡ã+Ÿ1¹ËSkK^Ó›LÕ§·ÚD{‰Œú©éYµÌÕ´=$î®…Î*à[ý=c˜y±,ƒ*Ýš©OjôÝ.[ {ÁÐÙ¿j·c£rp:7Ò±«>Ki¡¬"å³8…Õã™ ÞÁ½ü´Cµ«¾ðàÒ|Q¦ýŽýåÌ*]7F;>žý=q\®‹.§$‘Yk„ÏîIÃ6?»ëK¤j7~ÖD‰´íšÊîÁZjKÜÝN¥¥³;cÀºi-%y­Ü}õ<øW;å´.UäxÜt9­½Çwþ»ÚÌoô;‚Y"c öèG¥tþ%ÿ„zïK‹V¶ØÑλÕQyúê+™Îpk›[ )ü,ãí|M¬iñ˜þÐf€ðUù±§x¯L¼»¸$í¸p\œ÷VQ>è™gãÕZh¡»„<| ŽÞÄVðÓU¡D¥¤•ÏpÑ¡Òu(Ë `¬£8$PkQ¬ì"ábÇÐW‚h¾#½Ò®ãG™ü’v¶µzU†£©ÄVâÎo·Ú·,‹ówÈí] é»Lã– 3Ö éïm âp¸îsXÒè‘LpÓmÏjØ´¹·ºÚó[M~ûNô8­¦BÈ~u= ®ªuaQ{¬á©Jt߼޸NÕ†ZC×Ò›ÿÆKÍß®?»9tteùÞÿ-gÜxjYºJçê*숻9ï±höã,êØõªs]éQb‰XA]ðYb7°?QSÇà‹AËíüéz‡qæ1@Ê;`š€Ew3»”çŽkÕ#ðÖ™o°1›dœ$Õir¶>#ÇÆ—'mßU§ wûö¨ßLƒ^ÅöȵOÀb«ÍqŽ!#Úš‚vyRxl¡ÿU"{š´¶fP2r=«³¹œ©*±NV±î|ÙüŸ¥f÷9ùeFUÛòNk›Ò8ßÿ|WBlݹ1Êž–#þx Òh|Ç"ÿms‚Î ÿb‘l¯%ÏÎÞŸr»ˆ¬‡9·Î;Õø­¢Fèp}Í.AûNÇŸÅ¢^9ä·?ìÕø¼5v@˰J즽HˆÅeÞjó0!@Û¹Ri3M +uÌÓ“ŽÕŸìËi!åFÿ¾7í qø ÒIŒÐtÁžEM™\ÈÌ ž¿!S-̧ÍWžËÑsR&›'`úÓåaÌŠj$Ž@õÏÿ®Ÿ$N‰òÈ™Ï8­8´¬`’*ÉÒÔŒ…\Sådó#Hê@,? d‘»‚Cý+b]0©ã§Ò˜,Ý{~4ùF¤Œ3 ÉéIäï~U­5«`åEU6²ÃRå1Y8èÍJÙ=Û=êôv zš½ ‚²€FOÒ„äs¬¬x!›þLû;ž‹Æº‰4ÈÀÊ£géP›#“ˆÎ(å3 +W'•­[m6w…ήCh:ƒïW£ÀAڄɲ²iŒ)qì*94Y1’®+Y5Y"àîeõ¬}©']ÊÃÜdêrRéÏÊÙFíá“w®¦á¾`åY—Ç…SÜëH´Ì‰#R>î{u¢´„–Ù (ìGQJÅ]š^?û7ü&úŸ˜à6õÈ?î-s[løÄ£ó­_ˆºmÄþ=Õ¤Pv¿û \¿ö\êyÏçM=6’¾æ™K>¾pâ“e¹?+db¨&—89çŠ,§­Q:w,ùh9“õ©¢‚I 8=ê…¢9rÖ¦7ŸÈQê/CJ #9éZQ Œ}ð=«˜7—$XŠ‚MJàd,Œ)Ý!r¶urß—>`éY:̇jHp}ëí72–<Ôð´äò94¹î>[D3K'Ï–©WH’V‡±©  ‚ô­+vº8<Š\¢rd6¾ú/^Õ³iáIØeð£ÜÕx§½Uà‘Š™®/ü¢MÁ=3ƒWdEÛênÛxnÒ <û„úÕå“H±^; áe»›8iI?Z‰^Y_ÎO©£AØî'×Ó•¶@ eOy{pN$lzÉ·ŽàÉÈ­8!¹b¤ñŽiƒdNº˜üÎsš•4&êÍWÒ ÃПð©c³»V¿^Ô ç㦫¥3ÀT^@ Gþת׎}šHŽ\Àã±ô„¶'Ÿ2P?òψ^ŽÑÿµ,Þl\(=û6+:‘º¹ÑB¥Ÿ+85•M²¨P{¨éNI¦²¸Yí¦*èr®‡`Ç×±¦à£sÒ°Ý‹G¡wûJI/Rë"€Û¼ØÆ9õ Jôí6MÇúIƒSŽ8µXošœ1ôaê=«ËâÓ'ºC%²yŠ:€y…kx~¨uCÄ|§8?Jæ¯ÕÓ³FÔ孚іΗqáÝ_ûW‰_O»p¢Bp8§±ë§ÑôìãÔ4KÎLæÄã£!íZ—zd+ÑBE¼„f9 ðíYzWФÑLz?ˆ­Ü\[ü\É)ýÒ{Šä”åR:o×üΈÑêpúæ•%…ÙÈ;IàÓ4»+ë†d·)œd+¸RÞÃ5ë¾(ð]ÝÖžn£µc.ï¥yŠ4ßìmR‰ŸÊx#•9ädsúƒ[Ñ«í#ËÔʤy]ÖÅ+« èf wg*€rHSÈú×Cá}ut›õ(dPFóŽ*¶â›¸@K‹Ç*mW‡ë]‹]izšD÷pDҌѠƒØÔÖ“·,Ñt“½àÎËLñu­Ê¡gXݻㆮŸOÖ,£Ë 9Áè~†¼¬¬`d[rê3¥ºsSH³Å<ƒiÊ:òÖ¹aîKš ÚpŒÕ¤sŠHn1moZ—ÉÉèµãºŠõ9#Duètooc^¦jQ]•£v;þUéRƯ†¦Œó+`\}èjO³GüD~tֆ׸ž •Öâ*ºÀ¿w'}Qçµgf]0ÙŒ™§,–èß,`~‘-Ôù8#J£-åÐaúUX›£§2FÃ…ÕIàWèƒëŠçVûQÚ~œUˆõ-Lð˟‹i—^ÉKåS³Qú¬~¾¿?òË?…1®ï›ª0é‹BÇö*?ðQ>“jó2çÐ f½aË0¤1ܸ;älŸzZ†„Íikñ·Ú²îàVR"LZ¸-.¾óïVà´q÷†yï@|ÚDòîÏô¦'…^CËã=ë­Õtë©£_±ÎmˆêBƒüë:ÚÂö ›Rš_o”åPåä]¼Ìè¼(Èg§*ÂìéámÊs±±Û95Íø’e™F™ânw+G‘íÚ“šZ‚…÷ei4ذsüª«Ø(šüÈÚÝÁ-IÛŒÂ}kVɬuY YϽ±Èd+üÅY—MxNK(õ¢i­ ÚiÙ˜ï¸)©KdìNÔë[ù·‰¿xÊ~”ãs§•!Njæ—N=X¥õ1ÓÍÂðyªq\†aóUøØÌmŸÆ€fm·8þGÒŠé¡»™0$PÃЊ*J»9ˆ·×KãÝZ4v$P1þê×2·w#«ë¼ÿÂsª6ÞL£Ÿø®u`wÁÚúU+•'©].®¾óTÿi˜qÈ>µj;RdÀšÐLY9šUù{“OR.Œ„Jã9æ§Ú‘XŒÕ»¹mìÁXÊ1öäÖDÓ NIÓ X³\î8üÜžõ$aqÇ>Õvût©Ü/bv©JЂr£ Ǹ©"µSü5~+eE” ´ˆlŽ;™AùU‘q9çÔ5Äp– }ñUžýˆ€ª&Ä“]Ü88ªl÷3ufüéârÇjÂNrqH{Ae3œœ’kV×O(aŸj¢u)£:¤¡²$>´ô 6t‘„„`ã59¿Ž0s&1ï\dڵĿ|“Û5TÍ3¶I8'¥.d§i&¸ƒ!_Ÿ­S}bG?#nkž$wÆO5¥ƒî 2G­Ád‡Éu3òÒ¥{Ûm¤‚EÊÈ¥yúVÕ¾Ž]Æìûâ´dÑ¡HOïBàgæ40LùÂæ‚âHv²1R)¡×]ìE¯ˆ$dû²€ÿs­s=éEÝ\в¹ŠÒU”4™Ï p1[QjP\K¼¨'ÔŽErÝ)Cx$VR¦¤i´zχ¯`‰„¦ãhé´œæº-FÓO×!E¹ÓÍÔiʾàúÍxBOƒ’Oç[ºVµ5£+Euq?»!®:˜VŸ4YÕ ÑjÒGоñlvÑéZ“ÊѪ…ŽY”î èÇ¡ú×-ñOÁkVvú¦ƒ\ˆT†Ž>X©ç\sǽQð߈EéV»Sø¥Qž~•ÛG,Jlç–~­ íúW,jÊœµÝNœd®ºŸ/a¡˜‰•”à©àƒZ–ºÛÁ€ð;k«ø•àCJÕdÕ#Y.-n÷(Ê·¾?pC+62ÙíŠõbãR<Çܑկ‰å8!‡ÝeàŠÔÒü[åÎ!º”÷ëˆû%ÄrEØã3]­½¶¯RÉ—rÙ6q“ëXT§M-v7§Rm<ðï–;½<ƒŸš.˜¯BÐõ4¸Ñát.Ž«ÃŽªEqújKej‘#GùhØýk^Êe±W-{ŠÙeǽyuջɉiª-ݺ­À ノ‡ð«Ì–« xá,Gnæ¼ÂÓT¾ygÉÆS‘]n©ÜDÉœpâµ£Š©GKèr×ÂS©¯R+¿¤´qh÷2ž~Z…Þ;°¶åÌDî/õªÓ|@Ó¯–Aþœýr(º+•bÞ@ø;I¨g½ 2¬jB¤¯Jçfñvž =­³7žµ7Žï+ °ÞZWAftwzD÷³4‰ªN€ÿ yP?Z­§ønöÂv™5ëÙ2~ì§pr>.Õ¤'ª“éYRëšôÏ„¹”‚†¡ò”¯ÜõÔ•áÜg»“Ÿ›hÇÒ™s©XÃÍN~q^YŸ¬_©kËãwÞØÏëRA¢h›ÉÔ5GÀê|å Í' ÷Øíαcfìmš$õB DÞ%Þsæ寄‘1i¨³Kè\óQ!²,PNW;ÕE.„Êýnv+¯Áœ´¼ûÔãÄ–j:î85Æ¥¢I÷$GǽXT´„í‘Ôã5DÜÝ“X´gßö‰ö“¢N*D×mm…Pœɬ&ž¼„ ޤ Ú+¥[ëI$;¶kI¬ÏŸÝ _÷jŒº¥Ù$4^eF.,×LÀCÖ¥ŽöÔ}öÃS'S"âv™ÎP§°5«»!ük f´œ6“TçKU9\õ¢Ár´bvæ¦X&êÜÕI/L$íUFÕ%b~b(&ÀÈfaQI4qr\7ãYs]Ü0äç>•UÙå9æ•ÇcbMRßs§z§.¢§;Ïû4™ÎåOX ŽGãF£²[¹z§꛸z›oÝééQ¼n〸¤2ÄNdÆã‘õ©Í”,7üÍbH<þóõªí|Èyr.>[›å!‡•lý 0ëZŸÝšçÛSòj)5ÊrG4®Rƒ:oøKfQ†Eü(®9åzÑSsEuŸ/]<{«Æ2vÊ?ô\âê2àMuþ?±†Oê²3Œ™FGüW=•°<·ÔÕ¤ìg&®C ìùäü§©4ÙÕcŠždŒüˆ8õ¨ã².O_ž¤Ý)/ÌM[‚×y5f 4ç¥iÇb±–ÁÏABˆœŠÖöQ® UÕh"`fœ-Ãnäšµ–ÒñƒõÅYû•¡•?®ú“±ÊfµÛFx<ôÁ¦Ã$Š5Ñ’nf~ìzSFìò¦µ]mbn sš®÷VáNÕPÞ´¬;•ºð©OX®$^„ ´/­$Æ0{DºÚ¨!"ô F-”½ÏãJºynY¿TßUùUyo.\rÇÔ®†“5>Ïn§NjeŽÙTn=sæIvä·'Þ¥„LÎä“Ç4®§IݤêãÞݱVN­ºî™B¯uMeÛæÒÙ-Úoõmޏì+Ú¡[›I-O&¾q¼£°ßøCc…¨lÔMáôˆ~åQ½ÍW‡(yµ8Žz|ŠŸí«á/7A]–GŸf=$¹´ ¶js:Ü Y …›Ô S!¹Óî‰]ª7ûB£µ¶‚{ -ÈÉ–R b6´Œ9cmŸ½M){°ýŠÕsØŒ+£M2Õ qþö«yS µ³mí´ŽIÈÜi•ÛbûÍôŠ| ²`Va븱®¬%Û6ß´29àåwSE­í¶æŽý~n¡¢àÔò§º+™÷0ÓÃU¸#i'ÔSΓ¦ ùg‘+Ežïqó³{”¦m°˜Ÿ6xÁ=Ê«"u2¤Ò÷ÿ©¸“=˜-Q{k¸ÉTL;du­‡†48‚R£ý—#ô«Ew³-<} nÉ wg=¶ Øx¤·> œSÍ Ûº)D‹íÖ·gXT|È&ÐõLIb‡t6잣4X.ÙVÞ8Þ¬§Ôfµ!´„ûÕ9ë¸TKY˜‘â¯ZW–{Q¸Ä·)ê:Ó©˜ŒÀà-šÙħd‡5Œú²€ µ•ªµ ÖX–v?ìÈsEÂÆ´šl ÈPÃÔuªivã;\)ôj©&®ì™( õCЧ&°H*FGû\Ð5ÓÚG,Oâ:UGuA‘´Š¡=ìäŽÌ‡°^(º%Å”0Ú"1†G½8ɦF»÷ökˆmJâNüS>Ñ3¼iÝ ‘õ;Á©iñ€T}ÍWŸÅi”…6šã13œZ‘m&oþ½Ì9·&»4ÇŒäž*.ï$É9Ç^µŸœÈx8úµÌ‹Ëð}j[í#$’up)Q»óV µWÉÈãšI'†,ŒŠiûl rzRçùÐÓ«cò¥Æ8¦ÒMõ?iaŒÜR"À«P(È9éE…q‘[?wð­k[A–+L‹bÑR‰.j±ŽõIØ÷‰P–8#­U¸¹XÔaÿ.´Û—yFÄà Ëk[€NsøÒcH²Ú‚@„¢îlqše·ˆÙ²$c¸q·¥U{˜îçóY´ðuâ@qž™¨m¥sHÅ= *Ôö¥¾PÅ >­rò”'(1íZ:‰/)–có7aT£ ¼ÖMÝÜ삲#íõ¤§¤` m"Ä£94¸¤ ´æ´ìõàdŒ·¡Ïݬ¯z\ÒqOq§cª³ÕžGQ#´q»&sùÖï›ý¥i$Bãi\:»g+Ïb™‘†;WQ¦êhЫ¹Œðž§Ö¹+R¶¨é¥Rú3«Ð|lšb¶ªÁöIˆ";€¤©ô?Jë,ÅŽ£kæÜ4FGßbqö®>Ó]¶Š×P·_+?*ªŒŸ¡¢çíáV 6öFµaó[»e”ÿ*àœ ßgø1rëª4¼IðÞÇRµ’óKà»ÆB(úcµyæŸy¦Îbº‚H¤£ ÷=7Pk¥æ9Ãò1æuª^%ÓÞšËoa L "G;Ž}3UC*o’Z¢já“Ö'”i:ÕåÊ#…éÉ8¯J‡]k¸‘.¤·•€#?¯1Ô"™w,ÿ+ÆpW5Yµ[)OÀ'¨®Ú”[4a Î3¯ñ.$I,,–OºÒ„ù¿\+JÎrÌI>µ4WE:Q¦­ ÔszŽÜiÂV\`šŽŠÐƒBßV»¶ÿU3ƶ-¼]p6­ÄQÈVÆé\¾isM2\SÝ›¥êúN¤DM0†Bq¶R@üëtè×*ùƒqCüQ¸5âêät5½£ø‚çLS†gŽ bŸ=·2•åg¨4z•ÎùÆ=Fhÿ„–ì/–ÿ?­giúÍÖ£n%·”¨=U›5pݰm·Vð±îp+Tû­4ìÅ_¦’iÖ’dÇ ©—M¶àHÙ÷VAÕYÀÜ6žÇ¥2MJ|a¹_qFÊ͉´›xÆõÉüj¤‘Û(n}+(j!Ý;Šsß;.æ‹”±,Â0J§Ö©I|¯Æ4âÆEܘ#ºÔ&ÜKÐa¨±Z[Œä©9÷ªrLIê^k?ZŒé¬Ã‘Ï­KL´Ñ™#»f«ù9å=°j*(jãLê4›K•gÚ6ó¹¹üoXkÐ^Mþ“1¸îSÜf¼äÔ‘LÑJ² ç𿩆Œ®Íሔt=ÃM¾$«ÚXy…z4™lÖ•Ýë¤Lׯ%\qpOÖ¼ßAñ5õó-±ºt$ü«Æk·ûqE¾y^Y òYÀþuäÕ¤á+3¾5•ÑÌx›Ãqê.të ƒ¸ïþµçZ…”º}Ñ‚a‡ zò]A&Ø-g ¶<Épñ®^‘¤Ö'ÜÛŠ¹ú ôp²—ÂÞ‡"1Ý´”Q]Ç Q@æŠr©frMh\io ªÌqÆXzU{Do48í[M {FÜßÃRÝ„sƒŠ±+6<ŸJ€õ ¡o‡5Y4»²)CÇÍÓéÐ[Gwn—¡*Üî+^²3(*yØxWÄŒŒ¶7R6Æ8\†Šrq~FUé©®e¹èréÒ¡&YPñ("«Gkom$/q'ZžßU¹±l$²w2U·¹{¼Ooo c÷Ð/õ®ƒ‡S;È·SºÖ?,ž§Æ©Ì *É"ž˜UÆòâ´M´Ÿ½ ŸJ"Õgµ›{ƒŽñ¹Èü(°Ô‰©Y¾æ†TòH5r-zñ†É`Ždï¹3]ºá–&9RrÊTÊ ót»ôQa“ûãåëSb¯¦¨Ä6ë;y–» cÉNÔMk½vÜÀTö V¤šDð>ô—tg¡8§G1ˆm–mËŒ#švÎzKãÉ̉ïQ–3ÎMu+yŽè&XÏR¬*&µ€g{©r‡7s£ŠuÃ!SŽ«Q­«®V‰_F®‹ì1°ýÑGúj­Í„¶Ùe‰‡¹Qa©rÚHŸ1PNzŠUi>ï•|£Ë!'Ô*/³;çe+åUrã·­8Êñ€q¸zQ%³£fHÈç­K–FÞô±È³ €ßάÁ$íacY’ï·rCdR;,Ë•$?¹¦6<¨‘‹ÄvCÐÓ²¬r~SX‘j òæ9Z³ý¡ŽGj.¬ÖÈÀàPbÉÊ ŽüVP¿qJ5& ( 2ÜÉ´çoÕUå1œôZqÔÔ“žAª’̯Ö‘IkÎ:EPvÇCE+–‘ÓøÓYòˆ)ò4ÎÈÆqNÂæfrY¾ÛVV‹œSd¾c€1P§'ÿZ4BÕ––F°(i˜Œn&¨î?\Ô‰–iÜv/#±æýjUQ!ÆìÕV ÉüêäD)œSBcͪ;Tr…8V^ƒQW†ÇQŽO½Q»R¤íZ D¶º›Z0Q&9èë[ø¨"üð£qü¸¹„„œ*Ä€äÔó4_*g[qã.K+ŒöÃ.?rú¯ŽµKyc­‘»î‘RÆŽÃk#Ä–„i¦\d£š™9[Bà£ÍfŽfêSs9bĆ$“QòÊé.à¶xaåvî+–²„ÓOszr”u[‘ªê¶pØ,R-²Ë¸¤œWŽêàÿj\Ž[|çb:î5·6—<çZ:Imå™”'÷”b¨\Ø*Iò]«È„ Ö6ëÇ“z+¼}òx©¡–EdË/ 8¢÷[u,:ÝA ÈYvšy½ˆ€ßf*&¹ÜбŸZShì7K"àöïEÂÝÍ/™× åF:R¹Ž`C•füc¿î× psO†î#ò¾Cc©¦˜rš!Q{cÓÖšêeRwúÕ˜îÜd2'·ZìIò8 vÅ f’#¸JA0zÕ¨SJk“*meëÞ²&‘ÑþPG¸©¾Ð#lži¯Vû«:ùÐÝ•Ánu¢ÖëCÙgq$ˆ£r7cŠ“Î|ÃÏÜëú:jZ­Ô%Ø2Ç7qŽÕÎMàדwƒý‡«IÙRjîå!zéD™V/CRÁqm#frXàⵃ,àAæJ…ºä¾@¥5…¸Ú®³î…âªÒ"ñ W³ƒªäô\t¨Ê1듞™â®.—³æ$"út4Ù…¼Kƒó}Nj…èR|÷TS$‡åhîMOò¹PþTüwó¢Ár°€ÆpNh6êÇŒî§Ë"6>oÊ£ó¶ýÈÉ÷Í8Z–\7¢’Õ—Š{]I´g¨¨ÍÌŽ:Œ{ÓÐÄû( ‚6ŸZ´ôëæíR¤¼ü̯5.ôïgéF©TY.~f¥0ÏîÀúš‘®1÷Aüª3æ79ÅÔcC#‚^XÐT YþƒŠ²&(xPÇÔŠ˜]Hz°Øbõ2ͼ‡ÔHcpªsW¦}Ã9$ûÕ'fè>” …¡qÀ¨«{‰Ï5g8¤R+Â4Í9—£;NFÚE‹•ïEVeEв:o>6Ö ?òôÿιӴ¶sÍløäøN5“ž>×'ó®|ñÎjˆ,«"?«©*c€+¾óNYÏ­‰³ö°‚£{ÿJÍóI(ÜOQNâå.}¹úv¥Šá÷òت=éÂM§­è™ÝzÔ»$óYv÷{z7CW–ä°ê‘ 1øeïNµV[‰;UGžSÞ‹…®i±^ت2¸\óU·H{œRÌ0i\iXCrGN´‚õ†¤6æœ-I)j=íûóQ¹v•|ÏøÔÏ÷TúÓ?å§ã@ :æ¦e±ëÅ0.BëVã ÒÁÍhÆEŸz±k¤Æ±:Ü}ó÷qVa/¡ c¥<¸a€NGJMŠÍ•í¬#ƒs»ž=©ìätü)]ÀÜAô¨šBFWŠ›ŽÂáC䜚é<5¯\hš”W0¶1÷†zŠå‹Æž’±=qÇ­L•Õ™qÑÜúçÃ^ ·ÖôȧG]Är3ÍnWÌž ñtú4‚0Û£$dÒ¾ƒÐõ˜uKdu‘IeάáQÅòHrTk@ õ¾zøÙà +IëzZýžK‡"[d_žì¸èy¯¡«…ø©g=ç†bû4i$©8;ºA­Ÿr/d|‹ŠTbެ9­ïø~ûM•®d²0Û¹ã€k®ÂŒ“WGµøYµ×4ˆZâÉîn¹Ž*ñŠÜ‹G÷&¸_É70¤Á6üßQ]cjV±6ë©wž¸ëZS~íŽ:±÷ô6 ”cgÊ{ ɨçò-c`–åIîì+ oÚ‘ˆÙ•}z ¨Þ+²€– Îã =*œ‘ } W&êá± ¹'ÐH4{°þdá³ïTÛÇw’|¶¶± õÅU—_ÔnÆÙf e¥Ì™\’GDÓÛY&ÆïJ˸Õ>Òå! þ*φ'¹l¶Nz–5© ¬1._iÅ=X¬‘ vóKÐäzÔ¿`”rIǽX:Œq ±…ÏjgÛÞcó:Š4¥i!=&˜¶¬ßÂkE`yC‚)²H!OQéEÐjPkr;®ñÊjÄ·å‰Âc¸f,WÔð}©¢@Ýri y9¤3…?v‚‡–ÇÝúÒç$þUN¾œÓ ê9íH,M¸ž À¨™<a¹^ÔÏ=ï@ìIåŒu¦ù'±Í0Ü/n)Ÿj"•Çaï¡en~ZwÛ0y¢íX(*Ì€“éÅ9–6ëŠ) ÐñÃ7ü&úÏý}Éüëajë¼h‰'Œur?jçX!9ÆÚ»s-¢#µF¶Í¨uàŠì±ÔQ`R)&OJ”FçŽjxâT#5u ”ì&Ìß%Pi ³ÄV·Ÿl½qøT/{®Ê )Ö­š«0V g¹¬ÙoäUMó©ÊšWH®VξM8"ƒ½H5NKU\ð8¬Hµyz5y5"òI¦š!Á¢ßÙúb¤Èžj‰¹>œÓEãzÓÐVeóØUy$òútªí;·~*&vj.4‰Èµ v2˜.#)*‚¦±¦ÑIf0J¤v Á¬Ü;F§s’­Oasn ’3·ûÑU±Qk&žÂu¹¢@ÅÏ9Í;'n=i˜É£ž´6ì§=© b3‘@#<Ð¥#¦ˆ‘!j¢[Òœ³c4a>A­ÆH'†³Òn0ië8ÎJ‘–ZGÉèi¥›m@Ò.Þ ¦‰›§j—>¦æ…ª®óšBsÞ€4"»ÙüX®÷ÁÞ7}Š’ÌËt¯2VUïVm®Ug]ä„·ZÎ¥5$\gf}£ëö×údwA›˜æ¸êx’1 ½ÒùäŽAϯÆxS[Õïti­m"imñŒˆ© Ó£±b|ÉmŽ~t’3šœ2røìeˆ’Ž‘0î¼)w{Ã=ìoŸpýk͵]6m*ùí¦#¡õíÍ«Ãk÷%…ˆî{×ãi¡× G‰Oþ¤WkŠKC–Isk±ÊøMÇöäP»mIBsë[÷úEÕµÓÆK°ÏÊÄuÄÂò[\«®UѲ=A¯tÒõ»;íÎ[˜‡œ"·N+8ÆòÔÖ«²º<ít‰åà£1üjxü=pyò¦+±º¿ƒqÃGvêŸö½˜bV?îŠ×’(Þlç—D‘>÷åS¦ž‘rÊÝ–œÃ;û“Š­=í¬œGþ4ì…yÍ"¨ÚˆIªÏç®@ôÍhH ™Ú‡ÜU9$ò³€¡‚!RÉÔšF»cš‰åw8U,MF!”·#-SèU—RÊ^Èœ‡aøÔÑß™—NïRjŸÙ%¶i¦=½hhzZ`™ç4‚TïUãê=ÀŒçÔ\,]2`Ã!ÿ:¦ÌÇ‘‘õ¤ËçÔÑqØ·ç½8¨Ën¨ ‘ÁäÓMà brpzSCŠ…®3Ò£2óEÇbbäÒo=j.GZ7R‰ f’™¸âçÒ‚‡î>´T{Ï¥‡c¤ñ•æÏë@ž—’èF±è`1Ö¬øâMÞ6Öùä^Ê?ñã\蔃‚jùˆå6P(z‘J÷û†sÍdoÝÅ&æŽ`äEé.[¨&¡N8ÜqQZƒ¥qÙyìO!5TÈWІ>´ß,“ÍZ@1špLŒâ‰¹]A Wç§54D¯sŠSE7zŠ,¹~) jc`8¬Ä›oz·ßcÒ©2,,n§ŽGó§„äbÜg¥OèOÌúÓ¸Ì/LqPÉŽW{dN=*7´ç‚q@“3‹2ñP¼žß•h5žIÈ#ji íÅ&™I¢‰lš]„ô5|YnÎ'Ø™x¦Ås|³Ž”=qZkfÝqÅIýžÜã8úSå22E9sž+E´÷ãŠ­Š±â‹2+«çåax5•y¥39’Û¨zŠÜò‰Ï}œæ“W•ž‡ñ¼LVDe>„Sk¯’ÈKY0=c\ès£“Ò¾™¬Ü5D÷2iEY{ ¤<Â߇5ÙæýSÿß564æDx£¤ò&˜Ÿþù¢(Œ¯´2¯ûÇÑZMµ 4öý|?÷Õ[·Ó%xʬÑíîTf™.i˜4œÖĺD±©+µg¼2#ÈÀŽÄRwCROb ÍïF[ƒRc4JåüÆ—i©1JïEÀŒ'<Õ»KG¸¸Xã$Ó­,žêP 0Ã5Øèú}¾žÂBOš?¼?¥D›z!]-ÎûÂÒ§†teFRê »¹ªºÕÅÔÏ ¹ÜÌr~\V ³ÏtN °Ï~•%½´¯…‚æ0È­í–ªH”±Nk*߯Ê?y!Eþîy­ñ —‹…,«æšh—º™w8„díÜÕ ¤‚Ñr¬¬}¶îm ÏÍ5ËÿZΓMØ?u}qC]†šêf5ÕÄÀ•]‹êÜR¤;ò]†;žµaì%>YÿTDÑòÎ3H«¦L±Ä  SO2Gü¡G½g=ÁNœT&à±ÈÆ}MRäÓîäU9¾y¦™—<äÒyŠz~T®4¬0Â3ÓšŒÂàð3Sy‚“Ì8æ‘Zl`2ri ‘SAŠfä8Pvv'Q““VÎÒ1ÅFÑ©=E¹PŸJLö©Ú%üj6ON)X¤ÈƧɤ)ŠLRüÓÁ  P2~(¨ƒE±¡ãbá8ÖÏý?Mÿ¡šÂ ¿ë]ŒWw5¬ÿÏì¿ú¬Q0§a\P©ïVý>7^Ž*ÒGÞ3Ÿj¤ˆl­öGSš• $t«ÑΫÎjÈX%\© Õ\¤93(ÙÈZ²dàÖÆÃ¨§æ Ñas3j2;й-¢•Æj›Àñž(°ïrP«ÿ×§]»Üˆ÷*å Ú1Àªêì§ V#u#“Í ^2½ª,‘[TnO5Ú)Î1JÁÌRIXšfÏSÅFð2k@ô/¬¤t?¯J³ËŒæ²•Øu©ÒažE4ÉhÚŽTqÏÞ¬"£ 1íX‹q·¡â¦KõA½xÍ;“Êm-¼'pivF‡æŠÃþÐqœ6E4êMÓq£™#7 ƒo zq+ö}é ã¶k /Õ•ƒ·&¡k¡¸…$Š\Ãä6þÚŠpè4¥íeRWhlt¬/=³NYu)ó ”’[Óo)éÒÔçùSW±c†-ôu4ó7<3åM$·9Sõ§R´ìZI£™w@Ê㹟0 ƒƒLŽâXA ‹ƒè)ÿlR~xˆõ¦+^À|Å.$Ï÷sP#O ðÊÃð5­ö›bFPŠp{sѹ©²èUßS1c‚àîpÊOcÅ(±µI“ßkDEnrr?R¬ciR>”ì.c4ZF®6Æ«íÁ©VÎ0ùÛƒÖ´Ò,’v)'¿¥#[ÉÉ?ãJÁÌV ¿ÄOâk7T³G‚IC·Ê3°VÚÙJë‘Lº²•meÜÊaÍ h%+3ÏóéJ>´ ¥çÔV`ñRFÞ[gŸz‡>ôäl8>ôX—I“tŠÎŒyèÖG¬±oi“²Ö.:¼ ™CŒt®† ªˆ§Öªœ]îsÔ—B²Å"´dzæ§Y=ÀdG?×!‚šÑZ‘þ¨±úWA…É`¿·‡ƒ;ÉøÕ–n#Ê3Ô“Xòlî*ÇïŠÇ½ñ 6*Q¥v~x I»n5-‹ºŸØaÏŸr¿¸5”ÌktØ>•ÏÏ­ÜÞ^®Óò瀮ÇìñÇk‘Ár€‘ïY©s;¸r­L,”l±9Í\¶¾(G8ê;Ÿ%3´Vt³pvƒš6©ØÚë+Œ•¤Õ¶×Ó 7óá4™5j©Tš©LNš:k›ÙåY²ùŒNr? HnË «!(?6 dÚÆkǑ֫0##5®Ús0ÈÍ@Úy__¥+ I€ÿœSÁ¬=¶Ü|µ;t¤UÄì)Œ¬;Ó¼ðxÈH:ç"€Üg'šŒ±ì)ÌAéÖ¢%©…,Ý͆y4ÂZ”cÒsI½©ÛAéJBŽù nÏQI‘ž”æ+Ú˜h) Ýõ ŒÒ”†íE&ìQJå~/ÃxÃYíþ›/þ†kvÃZþ/ ø¿Xì~Ù/þ†k sÍhgbÈ‘¨ÅcFw#U]Àѹ‡sEÂÅÑy» üjUfëäzVvðzÓÔ°9F¢âå5ñ€ÇZ˜O£'å>¢²…Á#kŒzxØßêßi=;“Êj Þ?ºA_Jz^£® }k/Í’!óÄSþÐ×zQpå4^$“•ª¯o"3LÿVÿ…XPuùdN)‹Rg^¹«pÌ8ÝÚ¤Ym¦îÒ›hñò0ö¢Âl±PËÔâ¦þÉÁÚß•fîxz”ôÕ$„ŽNA§rlúÉ£ºtSõªÉ§2Á«iâ):8Ü*UÕ­çáÆ>´hò1Þ'Jˆƒ]ÙàŸ„})G,~Qš› HçH9â“ zó[ߨî ;M8hÎy G++!­J‘î÷­±¢ÉŸõgò§%ÇU4(‰ÈÈX==êQÞƒ5¤l¼¾¹ZƒŽ?« å™å§,@ñœU¼ g•‚g§8¤#ŠÐ>~qKögNÙ¤'iùI*Ü2㽩· Õ?J_±GÝjÂÞ®9©>ÙhÐZ•”@ç$cÞ¥zcpsSО~TÑ&ð£@Ô‰­Â¼ÔÐJŽ]êq(þ,S¾Fô¡¹ ¬b*žªí>,q;o#½^h”tÆj £[v8úÔ±­Ï?<)3N›p•÷Œ6Ni•‰Ø¥’–€6´‰&BMåFO%‡Ô%ÔqǼ¾@êsÅqj3À›‚ž„fœ÷ó>@;Aê5+Ê›“;¯ÚÄ]0=)“ø®Õ"bŽIì+‚f'©ÍFió±{<þ1Ô„¹æ¹Û«¹o&2Jy=½*mKmîh¢£²:ÙR?9FX÷=«qwÉÍšËð¼‰(h9ê é]JÙG´¶ñŸçZCcž¥ÔŒ§³/ÍU’Ųp2>•Ñ¢Û¯©Z8NÞjìgÌÎM­ÆEGö}¾ÕÑ\D«È_ÌÖdêøT´Z“e5eˆäçéVâÔv}ÕéTß ¨Š;t¤;.§A°3ó€MKý¦Žœ*Œ×5å8§‡d4îÅÊyå2çü+2xß$óŠ–+ÐJ¶³E0ŒÓÜ5F©¥{V¼ö„‚EfËnË“Sb“¸©*n¥&éYì¥OzA+)ëEÇËsDÅÏ­Dèz®³þ*‘I4\,5¸¨È5d)4˜µÊû;ÑŒTä­5‚‘Å 'šicS”ê) bÓ+óEXò¨¤UËþ.`Þ-Ö3ÿ?’ôÿ|Ö!$VÏ‹3ÿ n®zÿ¦Kÿ¡šÅÈìqVH™ëFH÷„Žâ“w¥ }¨ÉƒQîÍ#¡ ,IæfŒ÷T[³ÔR€zŠbe¸têr)áÒOöO¨¨žâžXñű`,ƒ•!…H'aÃÀÔ$OºsS,ÙÈ‘3L–H ·}§Ú¤Y&NU‰¦¥¼róm>†¥[9ו‡µ2t—lxqœÔËL:óL@âTÇÔU˜£€ôld‘1›•çÚ˜l%^Æ´ãóP|Œ¬1Vã½à `Èõ‘<ÌÂTš<X}*å¾§u ãÐÖÔMa7 …'®jÈÒl¦,ÉùÑa9w)[øŠHÈó!V­XðÏÖ­Çâœ|ñ ÑtÂÒE‚`1ɨŠJ;ßU°‘pËŒÓHd?¹hHì"›0vJ}*x†SëŠÒ2]†;míHíóšUžô76öÀ{1©ÊQÀùÉÍJ!mØ$Š×ŠDec ŸEÍX_°÷Æ})¤‰m˜~AãæÎ)­hã•jÝ1ÙvaJ"²ÇÞX9Œ‚_ïŒÁ)Fç8Ô,6Ç£X¾'yì¬k § dâ“V+»Eî¡ œ, œüÙ™3«¶Q{ l…™Ùˆ9'4Þk±$‚ŠL–Ä’*±Ú Á8éAC*@§}ì¬áBMËHqÀUÅP=xéI‰;ˆÀŠe9‰¤Ý4 J)â'?ÂiÂÚR>í1\èäUäš;¥ëƒTŬn2¦ýãbTãéU©.̱6šäeG³¤±‘O Öµ¶¨ð²Â´’òÂì ÛTÑd’9¥*ÈÉ] ÝŒ,3+âÝž)ZÅ)\Eºã R ˆÏjÎpÀÔ{˜R¹|¨Õ%JiQÐÎYXw©VsÞ‹‡)g‘HIÅF&Ô q¢Á¢–|Vâ¬Õý~Ù/þ†k’zŠ(¦L(¢€ ¦”)¢Š@;o¨§ý(¢©xFFE<*ž:QEÈ5"¹2æŠ($š7‹=ÔúÔ©;§1Ëø(¦„Ñ2ßÊ$@ãÖœ.m\a‘”ûQE;ŠÈzºû›Î¤[»”€ÃÚŠ)’ÀêKÒHð~”«¨B9W*G¥R¹\¨™u‰£ÿWpH‰«ø¢é?ÖâŠ(»*/AâK)€[ˆqëÅj@4Kà˜ªO­SM“(%±KT°Ó¬ÎLrº‘ñ®áúVÜè[°f‘£Fh¢”¥b©Ã™jF' |ƒýàEKm7ú›¨ŸØ5RNãœyvdÃF‘„•ö¦ýãê¬(¢ªÈÉI/V"¤C Æéˆ¢ŠL¢e‚Õñ™À§6'ånG¯Þ¢Šd݇öiòðãGöcùmÈ÷¢Š,+°:EÎÝË1üêõ´ÖPb7Lž´QS-Qm»O-92©ü*»½ƒ¼¿•Vm Œ5Ÿb¿•9LG;JQE+ÆÃYâé¹*ùê´QJãHi’Øþµh¶ýaE•Ú`ÏSùQö˜¼h¢€åCÒXÜ€ó«B È4QTˆ–ƒ¼¦§ˆ²1EV zÀ㑚•³†Z(¦®J¶àôš»ªm倢Šv!²e´ƒŒ¸÷ÍJllÈæU¢Šd•f±´‡³®-áO¸sõ¢ŠL¸”šFîšO¶¶0Ý(¢¥š%r7?5 ÜA9¢Š±,W³EüDŠ´—)? ÖŠ(Ém7Œ¨ÈªRZ:ÿ ¢Š«¤Êí ÔÝ„QECF©ŠÍ8(¢‘D¡­QL,ÿÙhtmldoc-1.8.27/testsuite/list.html0100664000212600000240000000213307235576310015623 0ustar mikeuser List Tests

List Tests

Unordered List:

  • List 1
  • List 2
  • List 3
  • List 4

Ordered List:

  1. List 1
  2. List 2
  3. List 3
  4. List 4

Nested Ordered List:

  1. List 1
    1. Sub-list 1.1
    2. Sub-list 1.2
    3. Sub-list 1.3
  2. List 2
    1. Sub-list 2.1
    2. Sub-list 2.2
    3. Sub-list 2.3
  3. List 3
    1. Sub-list 3.1
    2. Sub-list 3.2
    3. Sub-list 3.3
  4. List 4
    1. Sub-list 4.1
    2. Sub-list 4.2
    3. Sub-list 4.3

Nested Descriptive List:

Term
Description
Nested Term
Nested Description
Term 2
Description 2

Preformatted Text:

Line 1
Line 2
Line 3
Line 4

Command-Line Example:

    The Acme Speedwriter program accepts the name of a file on the command-line:

      % speedwriter filename.speed
      

    If you don't specify a filename a new, blank document will be opened.

htmldoc-1.8.27/testsuite/table-colspan.html0100664000212600000240000000136507235576310017402 0ustar mikeuser Table COLSPAN Test

Table COLSPAN Test

Simple text
Column 1 Column 2
Now is the time
for all good men
to come to the aide
of their country.
Now is the time
for all good men
to come to the aide
of their country.
Now is the time for all good men to come to the aide of their country.

Images
htmldoc-1.8.27/testsuite/left.gif0100664000212600000240000000024507235576310015405 0ustar mikeuserGIF87aPPðÿÿ,PP@„„©Ëߢœ´²¬Þ\â†âH–扎ØÊ¶P ÇòL×ö«onü ‡Ä¢ñˆL*—LÏ®ÙñA£Ï©Fj½V³Ü®÷ ‹Çä²ùŒN«×ì)6ýFÇÏss½|'çÇ{q?ü×&8HXhxˆ˜ÈæÂÈÂÕ™¡8IYiy‰™©¹ÉÙéù :R;htmldoc-1.8.27/testsuite/logo.gif0100664000212600000240000001116607305754404015417 0ustar mikeuserGIF87auA÷ÿÿÿ¿¿¿???___ŸŸŸßßß///OOOooo¯¯¯ÏÏÏïïï'''777GGGWWWgggwww‡‡‡———§§§···ÇÇÇ×××ççç÷÷÷œœœ’’’‹‹‹sssnnn†††žžžpppuuu¡¡¡£££^^^bbb¨¨¨aaa­­­xxx[[[„„„zzzˆˆˆ²²²¦¦¦VVVddd™™™kkkYYY•••«««XXX]]]\\\UUUZZZ}}}fffMMM|||šššRRRSSSeeePPPjjjrrrqqqlllQQQƒƒƒmmm°°°TTT”””JJJ‰‰‰NNNIIIŽŽŽLLLccc‚‚‚ÁÁÁiii```ÆÆÆªªªDDD¼¼¼hhhKKKAAAFFFÃÃÃ¥¥¥   ÈÈȵµµHHH¹¹¹>>>EEEttt´´´CCC@@@ÒÒÒ›››vvvËËË“““ÍÍ;¾¾BBBÕÕÕÐÐФ¤¤{{{ŠŠŠ===ÚÚÚÄÄÄ;;;ÜÜÜ–––~~~ŒŒŒ<<<ººº………˜˜˜999©©©:::888áááÞÞÞÙÙÙyyy666€€€000333‘‘‘ããã444®®®555ÉÉÉæææää䢢¢ÅÅÅÔÔÔÊÊʳ³³èèè111¶¶¶---»»»222ëëëéééÀÀÀÓÓÓÎÎÎ...ííí+++,,,±±±ðððîîî(((¬¬¬***½½½òòò¸¸¸ØØØõõõ)))%%%$$$&&&ÂÂÂóóóÝÝÝ###úúúùùùôôô!!!""" âââüüüìììñññöööÑÑÑøøøÖÖÖûûûÛÛÛååå,uAþH° Áƒ*\Ȱ¡Ã†Õœ9{ö̃‡bÅ A&Œ¯^½pá’%kÖ,V¬:"UªÔ§O–,8pé’"E‡aÂÄC @¨PåÉ#H~üðá“*Õ›7dÈœ:ņM˜0´hýùsæ ,XrähÐàÊ•;7nìÚÕ  ¿~ý(3É…‹ Ú´Y±Â”)7nNœp âÄŠ3nìø1äÈ’'S®lù2æÌš7sîìù3èТG“.mú4êÔªW³níú5ìØ²gÓ®mû6îܺwóîíû×* $^¶Œ£G"IšD9Ùå'j–iÚÄ©“§O B‰Eª”©S¨R©þZŪ•«W°bÉšE«–­[¸¿Ê”±‹G›A|ý¬ªàÂaDœq%s,9LÒeVgØ}¶hÞ•jä­vžkêÅÖmðÉG_öáÇÛ~'€ Ä,FIŒ!÷Ør¬4Wƒ51ãàf×y¦]hÝ‘Þiã©f^kéÁÆÞlïÅ%bnzågŠ n pz豃J¬Øâ‹1:¦\d6„ã%:RÇcgÙÆÝhß™&^j屆ÞkëÉæ^mñÍån~QieŠ è ,²ˆŒbE3’™à—M§&Ä@裛 )'†FÚÉ¡’iYaˆ?Ìå'öí¦•þZ¨—ìà"¢Š2êƒ£Ž‰ efVº#¦š¶9aq^Xd&™ç ¦¢ªª]¬F¹Â«(7ë‹îŠE}„‚'ž”ÀÔ8i° ªi›µH$œyÕhøÈ#‡‡Ñ¾—ê“Õº ë•…j¹¢‰&Ú­£àŠK®¹èª lt˜¹[l¼?¾Yás†¯¾ü¦ç/À§ <­ ó…m¬X*ŒkÄã–Kq]4¢³"ÀnÆ—BX ÇEÙb4…£Œb!"ˆ`8²yûöû/{¿5𪭺|0¡Y²ˆë"ކq¸5—psÎ;÷ü³¥rÀÛpÇ ÷RI/ÝôxOwµþÉS—š²Õ+·|íÖ1{í0ŸC ik¡… _pAiæDL¦× =”Üœ¿Óq7¿okÇÛTÿ ÃÕÔf=x¶ ®hØã‚›ø¹8/Þøã‘O^ù!— oçþ¶Uoðö @:¦pAêÒìúËw½ðáX„`vîŒ7Âs!…8¹ &@ ìSAE˜ÿ¤¹vGÇ­4xLß}o¾\À#¥3Ý¿Þvƒ·UkÖÂ×dÆ=‰y‚%°øÒF>óÙ}êc Ü?áI¨~p»ßç˜æ4¹íKn@UÇ:–]p±ÛÞìºW³.,n|åãä0 ÷ þBÂ&†(€h‚8Zwê·èOdy;ÃÛÂò¶“¡åm§Š[à^;í}vf;×âpfÃàЂ;L_©ðà qE<âm4¥Á„x‹âEPEÔY|[ §ÀÂÉl4 #ÎØ;¶` ¢Á#! ˜$!@Ç%Š  #^Ü8ôŠ·•VÐâ\ˆð6V ÂD¯2À €Ó%Ã5*‘»¡(X¾Fªñ‘?”$%-‰É$h’“u´›(GÉ7”Uïm.|¥Öd‰°Znï–âRäâÐxõ­oƒt#@Lc¢5ÈD&dÀN X ŸÄãþ–‰ºU¬Âo¡þà&V½­ƒ£&¡¬‰(lz/—fAsØ;oˆBg95‰Nu²Sî„§Ýœ¦¼åím,'³'>õ¹ºð³uK€¥ JKZaÀ ÚLh!.àH´QœEæ%“PÑubÔ{ØC RP‡¢Ž`@„2”±¿`Co€›E ­SåsŸýÄ4:K¹¦ÅáùlÆ Ú¢Íi%wÚÓvU¨D5*R•ÊT(:Uoq›ê=«Ú€«–”ŸqÛj,»jÍd¼ÍoËfXZ²ÖÔ‡‘ç$ךÉsÖÀ­Aª\¡…(x6¸ëö5Œa€4nUõëÀNÊ2QVó«Þzþ›ÙÞ¦KòOf…lÕjÉR4™pgfãzTÎz(X HZђִу[jIºZÜÐs +ŠÛ®–©Ð·]ðm&ˆ[ ¨ð¶ ˆqó­eÕ)\¸n¶³Q@®r™ûˆÒ‚TM%=püÈM0r»&b‚c¼í\H(Ð`ðBâmäÞ&Ä· n„øçÛ|ÚÞ÷7¹ó­Bx@â'}Ûp÷Üç?zÐ…>t€FS÷Ñ­‹´Œ¹¤¹ù€fß+#åf!€ ¡#äü2FµÞö>¾…•OÏæ ð¬ÜÍ ¹‰ám‡Ö@ni7æ7 7Ý÷}á7~P~°vY|¹w‰ƒ37Òðt?”^—ÄeP7÷6Riðmxo#€€n­;§},à?Að6“w~ð€9@DpWÀL°S0ÐvÅ~ò6whäb<¥dÒ†zq‚ e  %˜iÿˆâö6èö6c }fçx5x 77ä׃?„CX„ ~h;r·;eel¢„Nì4mpc\Qàgq£mocb8k+ø6þç9÷6?÷6§”ç}=@P~¬7CH„SàN°žˆHol%0o"àtÀ´[ãVC•p£zðˆo#‚Èm…¨‚^ˆˆ_P^æU†Žhƒ3ð6“H‰9ð6?ø6™X„œè‰[Š¢(|Kz¼3ràQETNzˆQÆ% p3_¯7  \˜h: 7‹(7‘'7à'7=7K 7‰ ŸˆiYp\À°„vHShä„—õSW‡uqãRàÔçuä -¸xcP†¹•Ç€:ȃ>(„K@„à N òØŒôhø¨ü(>§¨iÄ>7uÉþŠñågV¸_âvæ6v ž ¨–ÀYžGI’q™žÆ¹ž)šï‰ò9j†@ŸZiŸÓéšû™mþyxúeÉ“·›ú˜ ê–H©”Z—w‰œf ¡ñI: ˜·ŸSsÿ™x؇€Z E~â§–ãY”æÉ —y’O •1šœ éžŠ£†àމ@ ^* ’ £ªÙ¡ú©u@*¢BÚqc¢ßy¤)ê›lÉ¢NJœ\¥ê™U:šWŠ¡ZÊ¥^J `<Êgþ§pÞ¶á–¦ÚsŒ¹€áIB¹¤’I™Ã‰™\ žk@¥y:¡WÚ§] ¨’P •   š   ‚ÊšùaËEx]—¨c¹dWj I©lœ"Y©/*¥šJ£j£sà©_ª£Zª§šª@¨ÈõªÛæm²V›a‡˜µZ¤¸”mØ‘ÁÙ¤–ù«wú™£Y£Äʧ[š`*ª¤jª¢€ª Ð Ð òÊ œÐ¬®J†*Óúuä¶ÜɦC­JzÜZžÞŠI ®SЧã:¬åš¥çš®ÉÊ®î ¯òÚ ôø­úJsäv}Ûi–ºé¨Ú*©E¸ –ù¤Y0Êþ™x*¬ ±\ú©K±© ¯± óÊ ·p ¯ð³º  ›¯ˆ¦¨¶g¢# ž%»«S€²—–Ú²2Úž ³žJ³Èj³ïÚ 9»³=û³¯´бäv‹J‘Fú}Z~&« # µú ™ú²îY£1ë§ ª®ëzª¢€³:‹±œ 𵯠¹ À` Šë ¾0¶ Y{ÿúsmª¶oÚ¶r ·+{©˜J¥Âº§†€·KªÊÚ®~»³‚K¸†‹¸Šk ŒÕªsfÉ}iù˜É¼ú–O[Å)µÉ°œú°ÆJ z«µðʵ±@¯§ë³a« © Œ Ép Ô‹ Èjàº8w­f(»kˆµ{»-ª»šË»TÚ°ž¼ÃË·7ë·È;¸Ê´Íû¼Ñ;½Õ{½fw«’~Ù¶å¾–ڔẩñiµçz¬zÛ®ëÛµ€{º@˼‡›¸¬ë Ð[¿ÍÐ Ò ÑÁÓ0 ;htmldoc-1.8.27/testsuite/whitespace.html0100664000212600000240000000031007636677610017011 0ustar mikeuser Whitespace Test

Whitespace Test

Test italic bold strikethrough Link htmldoc-1.8.27/testsuite/table-cellpadding.html0100664000212600000240000000160610047004012020163 0ustar mikeuser Table Cell Padding Test

Table Cell Padding Test

Heading 1 Heading 2 Heading 3 Heading 4
Cell 1,1 Cell 2,1 Cell 3,1 Cell 4,1
Cell 1,2 Cell 2,2 Cell 3,2 Cell 4,2
Cell 1,3 Cell 2,3 Cell 3,3 Cell 4,3
Cell 1,4 Cell 2,4 Cell 3,4 Cell 4,4
htmldoc-1.8.27/testsuite/top.gif0100664000212600000240000000063507235576310015260 0ustar mikeuserGIF87aP𪪪,P@þ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ®Æá²m0«=èh{ o½ãtʼŽÏë÷ü¾ÿ(8HXhxˆ˜¨¸ÈØèø)9IYi ywI—©)ŹôÙi*ÚDŠtZꕪŠJÖ +;K[k{‹›«»ËÛëû ,”~>²ÎÞàÿÎöJŸ1±Ïï¿ ? ߈0¡Â… :|1¢Ä‰+Z¼ˆ1£Æ};zü2¤È‘$Kš<‰2¥Ê•,[º| 3¦Ì™4kÚ¼‰3§Î<{úü 4¨Ð¡D‹=Š4©Ò¥Lg¬ø”\ÔS%VývUFÖ‡[¹u}ñ•aØlcY”MxÖZÚkÿÙÃØöD\zs£Õ%q÷\^g{Cô÷wYàzi\NV¶;htmldoc-1.8.27/testsuite/table-complex.html0100664000212600000240000000170407236614204017403 0ustar mikeuser Complex Table Test

Complex Table Test

ROWSPAN=2: Now is the time for all good men to come to the aide of their country. Nested Table:

Heading 1 Heading 2 Heading 3 Heading 4
Cell 1,1 Cell 2,1 Cell 3,1 Cell 4,1
Cell 1,2 Cell 2,2 Cell 3,2 Cell 4,2
Cell 1,3 Cell 2,3 Cell 3,3 Cell 4,3
Cell 1,4 Cell 2,4 Cell 3,4 Cell 4,4

COLSPAN=2: Now is the time for all good men to come to the aide of their country.
htmldoc-1.8.27/testsuite/table-valign.html0100664000212600000240000000201407235576310017213 0ustar mikeuser Table VALIGN Test

Table VALIGN Test

No HEIGHT attributes:
Number Text
1 Now is the time for all good men to come to the aide of their country.
2 Now is the time for all good men to come to the aide of their country.
3 Now is the time for all good men to come to the aide of their country.

With HEIGHT attributes:
Number Text
1 Now is the time for all good men to come to the aide of their country.
2 Now is the time for all good men to come to the aide of their country.
3 Now is the time for all good men to come to the aide of their country.
htmldoc-1.8.27/testsuite/table-nested.html0100664000212600000240000000077407424411476017231 0ustar mikeuser Nested Table Test

Nested Table Test

Normal Column Nested Column
Normal cell
Nested Cell 1 Nested Cell 2
Nested Cell 3 Nested Cell 4
htmldoc-1.8.27/testsuite/template.html0100664000212600000240000000064307235576310016467 0ustar mikeuser Test Title htmldoc-1.8.27/testsuite/table-cellspacing.html0100664000212600000240000000124607241065537020226 0ustar mikeuser Table Cellspacing Test

Table Cellspacing Test

CELLSPACING="10"
Cell 1,1 Cell 1,2
Cell 2,1 Cell 2,2
Cell 3,1 Cell 3,2

CELLSPACING="0" and CELLPADDING="0"
htmldoc-1.8.27/configure.in0100664000212600000240000002736610464177325014262 0ustar mikeuser# # "$Id: configure.in 1493 2006-06-07 18:20:49Z mike $" # # Configuration script for HTMLDOC, an HTML document processing program. # # Copyright 1997-2006 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # AC_INIT(htmldoc/htmldoc.h) AC_CONFIG_HEADER(config.h) AC_PREFIX_DEFAULT(/usr) dnl Define the version number... SVERSION="1.8.27" NVERSION=10802600 AC_SUBST(SVERSION) AC_SUBST(NVERSION) AC_DEFINE_UNQUOTED(SVERSION, "$SVERSION") dnl Get the operating system and version number... uname=`uname` uversion=`uname -r | sed -e '1,$s/[[^0-9]]//g'` if test "$uname" = "IRIX64"; then uname="IRIX" fi dnl Clear the debugging options unless the user asks for them... OPTIM="${OPTIM:=}" AC_SUBST(OPTIM) CFLAGS="${CFLAGS:=}" CXXFLAGS="${CXXFLAGS:=}" LDFLAGS="${LDFLAGS:=}" AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging, default=no], [if eval "test x$enable_debug = xyes"; then OPTIM="-g " fi]) AC_ARG_WITH(gui, [ --with-gui compile the GUI version of HTMLDOC, default=yes]) dnl Checks for programs... AC_PROG_AWK AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AC_PROG_RANLIB AC_PATH_PROG(AR,ar) AC_PATH_PROG(CHMOD,chmod) AC_PATH_PROG(CP,cp) AC_PATH_PROG(FLTKCONFIG,fltk-config) AC_PATH_PROG(MV,mv) AC_PATH_PROG(MKDIR,mkdir) AC_PATH_PROG(RM,rm) dnl See if we need a .exe extension on executables... AC_EXEEXT dnl Figure out the correct "ar" command flags... if test "$ac_cv_prog_ranlib" = ":"; then ARFLAGS="crs" else ARFLAGS="cr" fi AC_SUBST(ARFLAGS) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADER(strings.h, AC_DEFINE(HAVE_STRINGS_H)) AC_CHECK_HEADER(locale.h, AC_DEFINE(HAVE_LOCALE_H)) dnl Checks for string functions. AC_CHECK_FUNCS(strdup strcasecmp strncasecmp strlcat strlcpy) if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then AC_MSG_WARN(Forcing snprintf emulation for HP-UX...) else AC_CHECK_FUNCS(snprintf vsnprintf) fi dnl See if the tm structure has the tm_gmtoff member... AC_MSG_CHECKING(for tm_gmtoff member in tm structure) AC_TRY_COMPILE([#include ],[struct tm t; int o = t.tm_gmtoff;], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_TM_GMTOFF), AC_MSG_RESULT(no)) dnl Check for libraries... LDFLAGS="${LDFLAGS:=}" AC_SUBST(LDFLAGS) AC_CHECK_LIB(m,pow) AC_SEARCH_LIBS(socket, socket) AC_SEARCH_LIBS(gethostbyaddr, nsl) AC_SEARCH_LIBS(getaddrinfo, nsl, AC_DEFINE(HAVE_GETADDRINFO)) AC_SEARCH_LIBS(getnameinfo, nsl, AC_DEFINE(HAVE_GETNAMEINFO)) AC_SEARCH_LIBS(hstrerror, nsl socket resolv, AC_DEFINE(HAVE_HSTRERROR)) dnl Check for largefile support... AC_SYS_LARGEFILE dnl Define largefile options as needed... LARGEFILE="" if test x$enable_largefile != xno; then LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" if test $ac_cv_sys_large_files = 1; then LARGEFILE="$LARGEFILE -D_LARGE_FILES" fi if test $ac_cv_sys_file_offset_bits = 64; then LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64" fi fi AC_SUBST(LARGEFILE) dnl Check for "long long" support... AC_CACHE_CHECK(for long long int, ac_cv_c_long_long, [if test "$GCC" = yes; then ac_cv_c_long_long=yes else AC_TRY_COMPILE(,[long long int i;], ac_cv_c_long_long=yes, ac_cv_c_long_long=no) fi]) if test $ac_cv_c_long_long = yes; then AC_DEFINE(HAVE_LONG_LONG) fi AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL)) dnl Check for OpenSSL libraries... AC_ARG_ENABLE(ssl, [ --enable-ssl turn on SSL/TLS support, default=yes]) AC_ARG_ENABLE(openssl, [ --enable-openssl use OpenSSL for SSL/TLS support, default=yes]) AC_ARG_ENABLE(gnutls, [ --enable-gnutls use GNU TLS for SSL/TLS support, default=yes]) AC_ARG_ENABLE(cdsassl, [ --enable-cdsassl use CDSA for SSL/TLS support, default=yes]) AC_ARG_WITH(openssl-libs, [ --with-openssl-libs set directory for OpenSSL library], LDFLAGS="-L$withval $LDFLAGS" DSOFLAGS="-L$withval $DSOFLAGS",) AC_ARG_WITH(openssl-includes, [ --with-openssl-includes set directory for OpenSSL includes], CFLAGS="-I$withval $CFLAGS" CXXFLAGS="-I$withval $CXXFLAGS" CPPFLAGS="-I$withval $CPPFLAGS",) SSLFLAGS="" SSLLIBS="" if test x$enable_ssl != xno; then dnl Check for the OpenSSL library first, which has precedence over dnl CDSA and GNUTLS... if test "x${SSLLIBS}" = "x" -a "x${enable_openssl}" != "xno"; then AC_CHECK_HEADER(openssl/ssl.h, dnl Save the current libraries so the crypto stuff isn't always dnl included... SAVELIBS="$LIBS" dnl Some ELF systems can't resolve all the symbols in libcrypto dnl if libcrypto was linked against RSAREF, and fail to link the dnl test program correctly, even though a correct installation dnl of OpenSSL exists. So we test the linking three times in dnl case the RSAREF libraries are needed. for libcrypto in \ "-lcrypto" \ "-lcrypto -lrsaref" \ "-lcrypto -lRSAglue -lrsaref" do AC_CHECK_LIB(ssl,SSL_new, [SSLFLAGS="-DOPENSSL_DISABLE_OLD_DES_SUPPORT -DOPENSSL_NO_KRB5" SSLLIBS="-lssl $libcrypto" AC_DEFINE(HAVE_SSL) AC_DEFINE(HAVE_LIBSSL)],, $libcrypto) if test "x${SSLLIBS}" != "x"; then break fi done LIBS="$SAVELIBS") fi dnl If OpenSSL wasn't found, look for CDSA... if test "x${SSLLIBS}" = "x" -a "x${enable_cdsassl}" != "xno"; then if test $uname = Darwin; then AC_CHECK_HEADER(Security/SecureTransport.h, [SSLLIBS="-framework CoreFoundation -framework Security" AC_DEFINE(HAVE_SSL) AC_DEFINE(HAVE_CDSASSL)]) fi fi dnl Then look for GNU TLS... if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno"; then AC_CHECK_HEADER(gnutls/gnutls.h, dnl Save the current libraries so the crypto stuff isn't always dnl included... SAVELIBS="$LIBS" TEST_GNUTLS_LIBS=`libgnutls-config --libs` AC_CHECK_LIB(gnutls, gnutls_init, [SSLLIBS=$TEST_GNUTLS_LIBS AC_DEFINE(HAVE_SSL) AC_DEFINE(HAVE_GNUTLS)],, $TEST_GNUTLS_LIBS) LIBS="$SAVELIBS") fi fi AC_SUBST(SSLFLAGS) AC_SUBST(SSLLIBS) dnl Check for image libraries... NEWLIBS="" AC_ARG_ENABLE(localjpeg, [ --enable-localjpeg use local JPEG library, default=auto], [if eval "test x$enable_localjpeg = xyes"; then ac_cv_lib_jpeg_jpeg_CreateCompress=no fi]) AC_CHECK_LIB(jpeg,jpeg_CreateCompress, JPEGINC="" JPEG="" LIBS="-ljpeg $LIBS", JPEGINC="-I../jpeg" JPEG="jpeg" NEWLIBS="../jpeg/libjpeg.a $NEWLIBS") AC_ARG_ENABLE(localzlib, [ --enable-localzlib use local ZLIB library, default=auto], [if eval "test x$enable_localzlib = xyes"; then ac_cv_lib_z_gzgets=no fi]) AC_CHECK_LIB(z,gzgets, ZLIBINC="" ZLIB="" LIBS="-lz $LIBS", ZLIBINC="-I../zlib" ZLIB="zlib" NEWLIBS="../zlib/libz.a $NEWLIBS") AC_ARG_ENABLE(localpng, [ --enable-localpng use local PNG library, default=auto], [if eval "test x$enable_localpng = xyes"; then ac_cv_lib_png_png_set_tRNS_to_alpha=no fi]) AC_CHECK_LIB(png,png_set_tRNS_to_alpha, PNGINC="" PNG="" LIBS="-lpng $LIBS", PNGINC="-I../png" PNG="png" NEWLIBS="../png/libpng.a $NEWLIBS") AC_SUBST(JPEG) AC_SUBST(JPEGINC) AC_SUBST(PNG) AC_SUBST(PNGINC) AC_SUBST(ZLIB) AC_SUBST(ZLIBINC) AC_DEFINE(HAVE_LIBJPEG) AC_DEFINE(HAVE_LIBPNG) AC_DEFINE(HAVE_LIBZ) dnl Check for GUI libraries... POST=: if test "x$with_gui" != xno; then if test "x$FLTKCONFIG" != x; then LIBS="$LIBS `$FLTKCONFIG --use-images --ldflags`" OPTIM="`$FLTKCONFIG --cflags` $OPTIM" AC_DEFINE(HAVE_LIBFLTK) POST="$FLTKCONFIG --post" AC_CHECK_LIB(Xpm,XpmCreatePixmapFromData) else AC_MSG_WARN(FLTK not available so no GUI will be built.) fi fi AC_SUBST(POST) LIBS="$NEWLIBS $LIBS" dnl Directories for config.h... if test "$prefix" = "NONE"; then prefix="/usr" fi if test "$exec_prefix" = "NONE"; then exec_prefix="$prefix" fi if test "$bindir" = "\${exec_prefix}/bin"; then bindir="$exec_prefix/bin" fi AC_DEFINE_UNQUOTED(DOCUMENTATION, "$prefix/share/doc/htmldoc") AC_DEFINE_UNQUOTED(HTML_DATA, "$prefix/share/htmldoc") dnl Update compiler options... if test -n "$GXX"; then dnl Starting with GCC 3.0, you must link C++ programs against either dnl libstdc++ (shared by default), or libsupc++ (always static). If dnl you care about binary portability between Linux distributions, dnl you need to either 1) build your own GCC with static C++ libraries dnl or 2) link using gcc and libsupc++. We choose the latter since dnl CUPS doesn't (currently) use any of the stdc++ library. dnl dnl Also, GCC 3.0.x still has problems compiling some code. You may dnl or may not have success with it. USE 3.0.x WITH EXTREME CAUTION! dnl dnl Previous versions of GCC do not have the reliance on the stdc++ dnl or g++ libraries, so the extra supc++ library is not needed. AC_MSG_CHECKING(if libsupc++ is required) SUPC="`$CXX -print-file-name=libsupc++.a 2>/dev/null`" case "$SUPC" in libsupc++.a*) dnl Library not found, so this is and older GCC... AC_MSG_RESULT(no) ;; *) dnl This is gcc 3.x, and it knows of libsupc++, so we need it LIBS="$LIBS -lsupc++" AC_MSG_RESULT(yes) ;; esac if test "x$uname" != xDarwin; then CXX="$CC" fi dnl Set optimization flags... if test -z "$OPTIM"; then OPTIM="-Os -g" fi dnl Show all standard warnings + unused variables when compiling... OPTIM="-Wall -Wunused -Wno-char-subscripts $OPTIM" dnl The following additional warnings are useful for tracking down problems... # OPTIM="-Wshadow -Wconversion -Winline $OPTIM" dnl See if GCC supports -fno-rtti... AC_MSG_CHECKING(if GCC supports -fno-rtti) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti" AC_TRY_COMPILE(,, CXXFLAGS="$CXXFLAGS -fno-rtti" AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" dnl See if GCC supports -fno-exceptions... AC_MSG_CHECKING(if GCC supports -fno-exceptions) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-exceptions" AC_TRY_COMPILE(,, CXXFLAGS="$CXXFLAGS -fno-exceptions" AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" dnl See if we are running Solaris; if so, try the -fpermissive option... if test "$uname" = SunOS; then AC_MSG_CHECKING(if GCC supports -fpermissive) OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fpermissive" AC_TRY_COMPILE(,, CXXFLAGS="$CXXFLAGS -fpermissive" AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) CFLAGS="$OLDCFLAGS" fi else case $uname in IRIX*) if test -z "$OPTIM"; then if test `uname -r | sed -e '1,$s/\.//g'` -ge 62; then OPTIM="-O3 -OPT:Olimit=5000" else OPTIM="-O2" fi fi ;; HP-UX*) if test -z "$OPTIM"; then OPTIM="+O2 +DAportable" fi ;; SunOS*) dnl Solaris if test -z "$OPTIM"; then OPTIM="-xO4 -xarch=generic" fi ;; UNIX_SV*) dnl NCR SVR4 MP-RAS CXXFLAGS="-Hcppext=cxx $CXXFLAGS" esac fi dnl Set build mode... if test x$enable_debug = xyes; then BUILDMODE="debug" else BUILDMODE="production" fi AC_SUBST(BUILDMODE) dnl Generate the top-level Makefile and Makedefs file... AC_OUTPUT(Makedefs Makefile htmldoc.list desktop/htmldoc.dt desktop/htmldoc.ftr desktop/htmldoc.plist) # # End of "$Id: configure.in 1493 2006-06-07 18:20:49Z mike $". # htmldoc-1.8.27/COPYING.txt0100664000212600000240000005065210412647623013610 0ustar mikeuser HTMLDOC License Agreement Copyright 1997-2006 by Easy Software Products 44141 AIRPORT VIEW DR STE 204 HOLLYWOOD, MARYLAND 20636 USA Voice: +1.301.373.9600 Email: info@easysw.com WWW: http://www.htmldoc.org INTRODUCTION HTMLDOC is distributed in both source code and binary (executable) forms. The source code is provided under the terms of the GNU General Public License ("GPL") with a license exception for the OpenSSL toolkit. A copy of the exception and license follows this introduction. The binaries are provided under a typical commercial software end-user license agreement which is more restrictive than the GNU GPL. SOURCE CODE AND THE GNU GPL For those not familiar with the GNU GPL, the license basically allows you to: - Use the HTMLDOC software at no charge. - Distribute verbatim copies of the software in source form or as binaries you create. - Sell verbatim copies of the software for a media fee, or sell support for the software. - Distribute or sell your own modified version of HTMLDOC so long as the source code is made available under the GPL. What this license *does not* allow you to do is make changes or add features to HTMLDOC and then sell a binary distribution without source code. You must provide source for any changes or additions to the software, and all code must be provided under the GPL. TRADEMARKS Easy Software Products has trademarked the HTMLDOC name. You may use the name in any direct port or binary distribution of HTMLDOC. Please contact Easy Software Products for written permission to use the name in derivative products. Our intention is to protect the value of this trademark and ensure that any derivative product meets the same high-quality standards as the original. BINARY DISTRIBUTION RIGHTS Easy Software Products also sells rights to the HTMLDOC source code under a binary distribution license for vendors that are unable to release source code for their additions and modifications to HTMLDOC under the GNU GPL. For information please contact us at the address shown above. BINARIES AND SUPPORT Easy Software Products sells commercial HTMLDOC binaries and support. You can find out more at the HTMLDOC commercial home page: http://www.easysw.com/htmldoc/ LICENSE EXCEPTIONS In addition to the terms and conditions of the GNU General Public License that follows, and as the copyright holder of HTMLDOC, Easy Software Products grants the following special exception: 1. OpenSSL Toolkit License Exception; a. Easy Software Products explicitly allows the compilation and distribution of the HTMLDOC software with the OpenSSL Toolkit. No developer is required to provide this exception in a derived work. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. htmldoc-1.8.27/CHANGES.txt0100664000212600000240000016072610463704112013545 0ustar mikeuserCHANGES.txt - 08/01/2006 ------------------------ CHANGES IN HTMLDOC v1.8.27 BUG FIXES - Fixed a crash bug that appeared when more than 10 blank pages were present in a document (PR #6223) - Color changes were not reflected in PRE text (STR #129) - Remote URLs did not always work on older operating systems (PR #6179) - Image filenames using % escapes were not decoded properly. - Rows using BGCOLOR that spanned across multiple pages did not render properly (PR #6149) - Rows no longer start on a new page due to a cell with both HEIGHT and ROWSPAN specified (PR #6086) - CMYK JPEG images caused HTMLDOC to crash (PR #6106) - Table cell width calculations didn't always account for the proper minimum width (STR #121) - Images were not copied when generating indexed HTML output to a directory (STR #117) - Changing the bottom margin resulted in text that was formatted below the bottom margin. - The Monospace-Oblique font was not embedded properly in PDF files. CHANGES IN HTMLDOC v1.8.26 BUG FIXES - Outline and keyword strings in PDF files are now stored as Unicode (STR #113) - The Flate compression code could get in an infinite loop if it ran out of memory (STR #101) - Book files saved from the GUI did not handle filenames with spaces (STR #105) - Fixed and re-enabled the ASCII85Device filter support in PostScript Level 2/3 output (STR #116) - Character entities in the first word of a file were not rendered properly (STR #111) - Fixed-size table columns were incorrectly resized when a table width was also specified and there was extra space to distribute (PR #6062) - Text could "walk" up or down when in-line images were used (PR #6034) - Row backgrounds incorrectly replaced cell backgrounds when the first cell in a row used ROWSPAN (PR #6033, PR #6036) - HTMLDOC did not correctly parse FONT FACE attributes (PR #6006) - Images in Level 2/3 PostScript output did not work on some printers (PR #6000) - The GUI did not use the first page header (PR #5978) CHANGES IN HTMLDOC v1.8.25 NEW FEATURES - Added "--overflow" and "--no-overflow" command-line options to show or hide the content-too-large errors; the default is "--no-overflow". - Added "--header1" command-line option and "HEADER1" page comments to set the page header for the first page of each chapter. - Added "timing" and "remotebytes" debug data generation. - Added DejaVu font collection to better support Cyrillic and Greek text; the new fonts are available under the generic names "monospace", "sans", and "serif". - Added "--referer" command-line option and corresponding CGI-mode support to pass Referer: information in HTTP requests (STR #91) CHANGES: - On Windows, HTMLDOC now logs CGI mode errors to a file called "htmldoc.log" in the Windows temporary directory. - HTMLDOC no longer uses Base-85 encoding for image data when producing Level 2 and 3 PostScript output. It appears that many printers and PostScript interpreters cannot properly decode this data when the original image data is not a multiple of 8 bits. - HTMLDOC now renders STRONG elements in boldface instead of bold-italic to match the W3C recommendations. - HTMLDOC now automatically inserts a TR element before a TD or TH element as needed to improve web site compatibility; this also triggers a HTML error in --strict mode. BUG FIXES - "$HFIMAGEn" didn't work in a header/footer string. - HTMLDOC could crash when rendering a table. - Book files were not used in CGI mode (STR #69) - Cookies were not sent in HTTP requests (STR #71) - Table cells were not aligned properly when the ROWSPAN attribute was set to 1 (STR #73) - HTMLDOC crashed when rendering unresolved hyperlinks in aligned images (STR #62) - Documented the HTMLDOC_NOCGI environment variable (STR #63) - HTMLDOC sometimes crashed when rendering tables with background colors (STR #65) - HTMLDOC would crash when writing encrypted strings longer than 1024 bytes (STR #66) - HTMLDOC didn't set the data directory when running in CGI mode on Windows. - HTMLDOC could crash when loading the Symbol.afm file (STR #93) - HTMLDOC did not always honor HEIGHT attributes in table rows. - Tables with a mix of colspan and rowspan sometimes caused cells to be moved vertically outside the cell. CHANGES IN HTMLDOC v1.8.24 NEW FEATURES - HTMLDOC now provides limited cookie support via the "--cookies" command-line option and via the cookies passed by a browser in CGI mode. - HTMLDOC now features a CGI mode which provides PDF conversion functionality for web servers. - HTMLDOC now generates a document outline for each input file or URL in webpage mode; the outline shows the title for the file and links to the first page containing that file. - HTMLDOC now offers an "htmlsep" output type which generates HTML output with a separate file for each heading in the table of contents. - HTMLDOC now includes LINK elements in generated HTML so that intelligent browsers like Mozilla can show next/prev/contents/top buttons. - HTMLDOC now supports the BORDERCOLOR attribute for tables, a MSIE extension. - The "strict HTML" mode now reports unresolved local links. - Added support for HP LaserJet 5000 and Xerox DocuPrint 2000/100 printer commands. - Added multiple header/footer image support. - Links to external URLs are now resolved so that the output file can be moved without affecting them. CHANGES - The command-line now allows --fontsize values from 4 to 26 to match the GUI. - Now use a 0.001 point tolerance when checking for content that overflows the page/cell. - HTMLDOC no longer enables interpolation of 2-color images. - The default vertical alignment of images is "BOTTOM" to match the HTML specification. - Paragraph spacing is only applied to the first table after a paragraph. - The tabloid media size was 10 points too short in length. - The table formatter now subtracts the outside border and padding widths for percentage-based widths. This helps to eliminate "truncation or overlapping" errors. - Dropped support for FLTK 1.0.x when building the GUI. - The default vertical alignment is now "bottom" inside paragraphs to correctly align different sized text and images to the baseline. - Indexed images are now written as PDF image objects when encryption is enabled; this works around a serious bug in Acrobat 6 which tries to decrypt the colormap of in-line images twice, causing some very strange colors! - Table captions can now be bottom aligned. - Blocks now break at the bottom of a page if the current line height + standard line height goes below the bottom of the page; this prevents images with captions from getting erroneously moved to the top of the next page. - Character entities are now supported in HTML attributes and unknown or invalid character entities are left as plain text. - Changed handling of NOWRAP for some tables. - The --permissions option now supports multiple permission keywords in a single invocation. - Dropped support for MacOS 9 and earlier. - HTMLDOC now breaks between images that are too large to fit on a single line, to match the behavior of Mozilla/Netscape (STR #7). - HTMLDOC now handles XHTML input more cleanly. - HTMLDOC no longer specifies an interpolation preference for images in PostScript or PDF output (STR #8) - The DT element no longer applies an italic style (PR #5178) - HTMLDOC now ignores content inside a STYLE element (PR #5183) BUG FIXES - Switching between landscape and portrait orientations would cause margin creepage. - Images did not default to align=bottom, and the align=bottom line spacing calculation was incorrect. - Whitespace before a link was underlined. - Fixed a table column sizing bug. - HTMLDOC didn't read back the HTTP response properly in all situations. - Fixed some more PNG transparency cases. - The PageBoundingBox comments in PostScript output did not account for the back page when duplexing was enabled. - HTMLDOC generated an incorrect image mask for some images. - The first page of each chapter did not use the custom page number if it was placed inside the heading. - HTMLDOC did not reset the rendering cache before each page when producing N-up output; this caused font errors in some cases that prevented the document from printing or displaying properly. - Eliminated a common cause of "table too wide" formatting errors, - Fixed a bug when applying a table background color to a cell without a border that cross a page boundary. - Fixed some calls to strcpy with overlapping arguments. - The names object was never set when the name objects were written. - Character entities were not decoded/encoded inside HTML comments. - The current heading was not always correctly substituted when used in the page header or footer. - When converting web pages from the GUI, the table-of-contents page number preferences were incorrectly used. - PDF page effects/transitions were not put in the right part of the page dictionary, causing them not to be used by the PDF reader application. - The _HD_OMIT_TOC attribute was not being honored for HTML output. - HTMLDOC now handles "open" messages from the MacOS X Finder (STR #3) - The GUI did not load or save the "strict HTML" setting (STR #6) - The HTML version of the title page did not set the ALT attribute for the title image (STR #10) - The HTML version of the table of contents did not correctly nest the lists in the parent items (STR #10) - Borders around left and right-aligned images were not drawn properly (PR #5112) - Grayscale PDF output was not truly grayscale (STR #32) - Fixed a table-of-contents bug introduced in 1.8.24rc1 which caused the PDF document outline and actual TOC pages were not rendered properly (STR #37) - Links were not rendered due to a bug that was introduced in 1.8.24rc2 (STR #41) CHANGES IN HTMLDOC v1.8.23 NEW FEATURES - HTMLDOC now supports a full alpha channel in PNG files. - HTMLDOC now reports an error when a table, image, or section of text overflows into an adjacent table cell or off the right edge of the page. CHANGES - The NEW SHEET page comment now breaks on N-up boundaries when N is greater than 1. BUG FIXES - HTMLDOC tried to format tables with no rows or columns. While the HTML in technically not in error, it is not exactly something you'd expect someone to do. - HTMLDOC didn't report an error when it could not find the specified title page file. - HTMLDOC could crash if it was unable to create its output files. - HTMLDOC could crash when writing HTML output containing unknown HTML elements. - HTMLDOC could crash when writing HTML output if the output document had no title. - The htmlGetText() function used a fixed-size (10k) buffer which allowed for a buffer overflow. The new code (from HTMLDOC 1.9) allocates its buffer instead. - The header/footer text was not centered properly if the header/footer font size was different than the default body font size. - The GUI interface incorrectly localized URLs when doing a "save as" operation. - The PNG background color was not correct for PNG files using <= 8 bits per pixel. - The HTML parser didn't close the current list item if an intermediate block element (P, PRE, etc.) was inside the previous, unterminated list item. CHANGES IN HTMLDOC v1.8.22 NEW FEATURES - Now support many Windows code pages in addition to ISO charsets. BUG FIXES - HTMLDOC could crash when checking if a URL is already cached. - HTMLDOC didn't adjust the top margin when changing the page header if the comment didn't appear at the top of a page. - HTMLDOC didn't initialize the right number of TOC headings. - When using a logo image in the header, the header was placed too low on the page. CHANGES IN HTMLDOC v1.8.21 NEW FEATURES - HTMLDOC now supports heading levels 1 to 15. - HTMLDOC now allows the author to omit headings from the TOC using the _HD_OMIT_TOC attribute. - HTMLDOC now supports remote book files when running from the command-line. - HTMLDOC now supports hexadecimal character constants (ÿ) CHANGES - HTMLDOC now calculates the resolution of the body image using the printable width instead of the page width. - HTMLDOC should now compile out-of-the-box using the Cygwin tools. - HTMLDOC no longer inserts whitespace between text inside DIV elements. - HTMLDOC now supports quoted usernames and passwords in URLs. - HTMLDOC now defaults unknown colors to white for background colors and black for foreground colors. This should make documents that use non-standard color names still appear readable. BUG FIXES - "make install" didn't work in the fonts directory. - "€" didn't work, while "€" did: the character name table was not sorted properly... - Links didn't always point to the right page in PDF output. - XRX comment output could crash HTMLDOC. - Fixed-width columns in tables could be resized by HTMLDOC. - When writing PostScript commands, some printers reset their duplexing state when a new setpagedevice command is received; we now cache the current duplex state and change it only as needed. - The MEDIA SIZE comment didn't adjust the printable size for the current landscape setting. - HTMLDOC placed the header one line too high. - When continuing a chapter onto the next page, H3 and higher headings would be indented the wrong amount. CHANGES IN HTMLDOC v1.8.20 NEW FEATURES - New --nup and NUMBER-UP options for PostScript and PDF output. - HTMLDOC now logs HTML errors. - HTMLDOC now supports the A3, B, Legal, and Tabloid size names. - HTMLDOC now supports embedding of the base Type1 fonts in PostScript and PDF output. CHANGES - The HTML parser now allows BODY to auto-close HEAD and visa-versa. BUG FIXES - HTMLDOC wouldn't compile using GCC under HP-UX due to a badly "fixed" system header file (vmtypes.h). - Generating a book without a table-of-contents would produce a bad PDF file. - The Xerox XRX comments used the wrong units for the media size, points instead of millimeters. - IMG elements with links that use the ALIGN attribute didn't get the links. - Header and footer comments would interfere with the top and bottom margin settings. - Fixed a bug in the htmlReadFile() function which caused user-provided title pages not to be displayed in PS or PDF output. - The table-of-contents would inherit the last media settings in the document, but use the initial settings when formatting. CHANGES IN HTMLDOC v1.8.19 NEW FEATURES - Now support the "subject" meta variable. CHANGES - Updated the HTML parser to use HTML 4.0 rules for embedding elements inside a LI. - Now check for a TYPE attribute on EMBED elements, so that embedded Flash files do not get treated as HTML. - Now put the COPYRIGHT meta data in the Author field in a PDF file along with the AUTHOR meta data (if any). - No longer embed the prolog.ps command header when PostScript commands are not being embedded in the output. - HTMLDOC now properly ignores the HTML 4.0 COL element. BUG FIXES - Squeezed tables were not centered or right-aligned properly. - Cells didn't align properly if they were the first things on the page, or if there were several intervening empty cells. - The preferred cell width handling didn't account for the minimum cell width, which could cause some tables to become too large. - Remote URLs didn't always resolve properly (like the images from the Google web page...) - The font width loading code didn't force the non-breaking space to have the same width as a regular space. - PRE text didn't adjust the line height for the tallest fragment in the line. - HTMLDOC tried to seek backwards when reading HTML from the standard input. - The media margin comments did not work properly when the current media orientation was landscape. CHANGES IN HTMLDOC v1.8.18 NEW FEATURES - Added support for remote HTML title pages. CHANGES - Now accept all JPEG files, even if they don't start with an APPn marker. - Now only start a new page for a chapter/filter if we aren't already at the top of a page. BUG FIXES - ROWSPAN handling in tables has been updated to match the MSIE behavior, where the current rowspan is reduced by the minimum rowspan in the table; that is, if you use "ROWSPAN=17" for all cells in a row, HTMLDOC now treats this as if you did not use ROWSPAN at all. It is unclear if this is what the W3C intends. - The "--webpage" option didn't force toc levels to 0, which caused a bad page object reference to be inserted in the PDF output file. - Background colors in nested tables didn't always get drawn in the right order, resulting in the wrong colors showing through. - The HEADER page comment didn't set the correct top position in landscape orientation. CHANGES IN HTMLDOC v1.8.17 NEW FEATURES - Improved table-of-contents generation, with chapter headings at the top of new TOC pages and page numbers based on the header/footer string. - Added new "--no-localfiles" option to disable access to local files for added security in web services. - Long lines in book files can not be broken up using a trailing backslash. - Added a modern "skin" to the GUI interface. CHANGES - Made some changes in how COLSPAN and ROWSPAN are handled to better match how Netscape and MSIE format things. - HTMLDOC now handles .book files with CR, LF, or CR LF line endings. - Changed the TOC numbering to use 32-bit integers instead of 8-bit integers... - Now handle local links with quoted (%HH) characters. - The command-line interface no longer sets PDF output mode when using --continuous or --webpage. - HTMLDOC now opens HTML output files in binary mode to prevent extra CR's under Windows, and strips incoming CR's from PRE text. - Now support inserting the current chapter and heading in the table-of-contents headers and footers. BUG FIXES - The table cell border and background were offset by the cellpadding when they should only be offset by the cellspacing. - The buffer used for periods that lead up to the page number in the table-of-contents was not large enough for a legal-size document in landscape format. - If a book only contained chapter headings, the PDF bookmarks would be missing the last chapter heading. - Table cells that ended with a break would render incorrectly. - Fixed the table pre-format sizing code to properly account for borders, padding, etc. - Fixed the table squeezing code to honor minimum widths and properly resize the remaining space. - The MEDIA SIZE page comment did not reset the printable width and length of the page. - Tables that used COLSPAN did not honor WIDTH values in non-spanned cells. CHANGES IN HTMLDOC v1.8.16 CHANGES - Now break before and after DIV groups to match most browsers (the HTML spec is ambivalent about it...) BUG FIXES - HR elements didn't render properly. - Background images didn't render properly and could lock up HTMLDOC. - The "HALF PAGE" comment would lock up HTMLDOC - HTMLDOC would keep adding pages until it ran out of memory. - SUP and SUB used a fixed (reduced) size instead of using a smaller size from the current one. - Empty cells could cause unnecessary vertical alignment on the same row. CHANGES IN HTMLDOC v1.8.15 NEW FEATURES - Now support media source, type, and color attributes in PS output. - Now support per-page size, margins, headers, footers, orientation, and duplexing. - Now support plain text for headers and footers, with $ variables to include page numbers and so forth. - New device control prolog file for printer-specific option commands. - Now support a new continuous web page mode that doesn't automatically insert a page break with each HTML file or URL (--continuous). - Now draw border around inline images as needed. - Now support MacOS X (only command-line at present). - Now support the "page-break-before", "text-align", "vertical-align" style attributes, but only for style information in an element's STYLE attribute. CHANGES - Now load images into memory only as needed, and unload them when no longer needed. This provides a dramatic reduction in memory usage with files that contain a lot of in-line images. - Now use the long names for the Flate and DCT filters in all non-inline PDF streams. This avoids a stupid bug in Acrobat Reader when printing to PostScript printers. - HTMLDOC now strips any trailing GET query information when saving the start of files (target) in a document. - Unqualified URLs (no leading scheme name, e.g. http:) now default to the HTTP port (80) instead of the IPP port (631). - Optimized the image writing code to do more efficient color searching. This provides a significant speed improvement when including images. - Now hide all text inside SCRIPT, SELECT, and TEXTAREA elements. - OS/2 port changes from Alexander Mai. BUG FIXES - If a document started with a heading greater than H1, HTMLDOC would crash. - Full justification would incorrectly be applied to text ending with a break. - Images using ALIGN="MIDDLE" were not centered properly on the baseline. - Table cells that used both ROWSPAN and COLSPAN did not format properly (the colspan was lost after the first row.) - Tables that used cells that exclusively used COLSPAN did not format properly. - When writing HTML output, image references would incorrectly be mapped using the current path. - Images with a width or height of 0 should not be written to PS or PDF output. - The CreationDate comment in PostScript output contained a bad timezone offset (+-0500, for example, instead of -0500). - The PHP portal example now verifies that the URL passed to it contains no illegal characters. CHANGES IN HTMLDOC v1.8.14 NEW FEATURES - Added support for 128-bit encryption. - Added support for GET form request data in the PHP and Java "portal" examples. CHANGES - Most output generation limits have been removed; HTMLDOC now dynamically allocates memory as needed for pages, images, headings, and links. This has the happy side-effect of reducing the initial memory footprint significantly. - Now call setlocale() when it is available to localize the date and time in the output. - The table parsing code now checks to see that a ROWSPAN attribute fits in the table; e.g., a ROWSPAN of 10 for a table that has only 6 rows remaining needs to be reduced to 6... BUG FIXES - Tables with a lot of COLSPANs could cause a divide- by-zero error or bad pages (NAN instead of a number.) - Table cells with a single render element would not be vertically aligned. - The --quiet option would enable progress messages on the command-line. - Table cell widths could be computed incorrectly, causing unnecessary wrapping. - The --path option disabled checking for the file with the original filename. CHANGES IN HTMLDOC v1.8.13 NEW FEATURES - Added support for secure (https) URLs via the OpenSSL library. - Added support for Acrobat 5.0 (PDF 1.4). - Added support for transparency in PostScript and PDF 1.1 and 1.2 output. - Added a --no-jpeg option (same as --jpeg=0) - Added support for the CSS2 page-break-before and page-break-after properties. - Added a PHP example. CHANGES - External file references to non-PDF files now use the "Launch" action so they can be opened/executed/saved as allowed by the OS and PDF viewer. - Changed the indexed/JPEG'd transition point to 256 colors when using Flate compression. This makes PDF files much smaller in general. - Changed the in-line image size limit to 64k. - Now allow "<" followed by whitespace, "=", or "<". This violates the HTML specification, but we're sick of people complaining about it. - Preferences are now stored in a user-specific file under Windows, just like UNIX. This provides user-specific preferences and allows preferences to be kept when upgrading to new versions of HTMLDOC. - The book loading code now allows for blank lines, even though these are not a part of the format. (added to support some scripted apps that include extra newlines...) - Changed the leading space handling of blocks to more closely match the standard browser behavior. BUG FIXES - The table formatting code adding the border width to the cell width, while Netscape and MSIE don't. This caused some interesting formatting glitches... - The table formatting code didn't account for the preferred width of colspan'd cells. - The table formatting code tried to enforce the minimum cell width when squeezing a table to fit on the page; this caused the table to still exceed the width of the page. - The PDF catalog object could contain a reference to a /Names object of "0 0 R", which is invalid. This would happen when the "--no-links" option was used. - Several HTML elements were incorrectly written with closing tags. - When piping PDF output, the temporary file that is created needed to be open for reading and writing, but HTMLDOC only opened the file for writing. - Image links did not work. - The JPEG image loading code did not correctly handle grayscale JPEG images. - JPEG images were not encrypted when writing a document with encryption enabled. - The user password was not properly encrypted. - The colormap of indexed images were not encrypted when writing a document with encryption enabled. - The temporary file creation and cleanup functions did not use the same template under Windows, causing multiple conversions to fail when temporary files were used. - Paragraphs could end up with one extra text fragment, causing the line to be too long. - The command-line program would clear the error count after reading all the files/URLs on the command-line, but before generating the document. If there were problems reading the files/URLs, HTMLDOC would return a 0 exit status instead of 1. - Image objects that were both JPEG and Flate compressed would not display (filters specified in the wrong order.) - Images with more than 256 colors would cause a segfault on some systems. - Background images would generate the error message "XObject 'Innn' is unknown". CHANGES IN HTMLDOC v1.8.12 NEW FEATURES - Added new "--batch" option to convert HTMLDOC book files from the command-line. - Added support for the "-display" option on systems that use X11. - Now use image objects in PDF output for images when the image width * height * depth > 32k. - Now use JPEG compression when the number of colors would be > 32 colors or 16 gray shades. - True transparency support for GIF files in PDF 1.3 output! - The GUI now automatically changes the extension of the output filename as needed. - The GUI now collects all error messages and shows them once after the document is generated. - Added support for HSPACE and VSPACE attributes for images with ALIGN="LEFT" or ALIGN="RIGHT". - Added new Java interface to HTMLDOC. CHANGES - Consolidated temporary file management into new file_temp() function. The new function also makes use of the Windows "short lived" open option which may improve performance with small temporary files. - Updated book file format and added an appendix describing the format. - Now default to PDF 1.3 (Acrobat 4.0) output format. - Now output length of PDF streams with the stream object; this offers a modest reduction in file size. - The HTTP file cache now keeps track of previous URLs that were downloaded. - The HTTP code now supports redirections (status codes 301 to 303) to alternate URLs. - Limit the height check for table rows to 1/8th of the page length; this seems to provide fairly consistent wrapping of tables without leaving huge expanses of blank space at the bottom of pages. - The HTML output now also includes a font-family style for PRE text; otherwise the body font would override the PRE font with some browsers. - The snprintf/vsnprintf emulation functions were not included in the HTMLDOC makefile. - RGB hex colors are now recognized with or without the leading #. This breaks HTML standards compliance but should reduce the number of problem reports from buggy HTML. - The stylesheet generated with the HTML output no longer contains absolute font sizes, just the typefaces and a relative size for SUB/SUP. - The title image is no longer scaled to 100% in the HTML output. BUG FIXES - The web page output was not divided into chapters for each input file. - The "make install" target did a clean. - The configure script would remove the image libraries if you did not have FLTK installed. - The fix_filename() function didn't handle relative URLs for images (e.g. SRC="../images/filename.gif") - Comments in the source document were being closed by a tag in the HTML output. - The alignment attribute in TR elements was not inherited by the TD and TH elements. - The HTML parser added whitespace before the title of a document (missing check for TITLE element.) - The table formatter did not reset the column width when a width was not specified explicitly. This caused the columns to be formatted with equal widths... - Paragraphs that didn't use the P element would use the alignment attribute of the first fragment instead of the parent. CHANGES IN HTMLDOC v1.8.11 NEW FEATURES - Added koi8-r character set. - Added new "TrueType" font option for PDF output. This (hopefully) should improve support for non-latin languages. - Added support for "justify" alignment; this is currently implemented by adding additional space between characters (no automatic hyphenation...) CHANGES - The "make install" target does a "make all" to ensure that the software is built before installing it. This should help users that don't read the documentation build the software. - Incorporated several OS/2 compile fixes from Alexander Mai. - Tables that exceed the printable width of the page are now squeezed to fit. BUG FIXES - The temporary file created for PDF output to stdout was not unique. - The temporary file created for PDF output to stdout did not use the GetTempPath() function under Windows. - The temporary file cleanup code did not use the GetTempPath() function under Windows. - The prefs_load() function did not check the HTMLDOC_DATA environment variable until after loading the preferences file. This could cause any saved settings to generate error messages about missing files (these were reloaded when the document data was read, however.) - The first border for a table cell that spanned multiple pages did not account for the cellpadding or border width. - Leading whitespace was not eliminated in all cases. CHANGES IN HTMLDOC v1.8.10 NEW FEATURES - New "--quiet" option to suppress all messages sent to stderr. - New chapter n/N page number format (:) - New "--links" and "--no-links" options for PDF output. - Added "€" character name support. CHANGES - Documentation updates. - If a heading already contains a link, the name assigned for the heading is stored in the existing link to avoid nested links. - The table parsing code now also traverses THEAD and TFOOT sections and handles multiple TBODY, THEAD, and TFOOT sections. The THEAD and TFOOT rows are treated as ordinary rows. - Image alignment should now match W3C recommendations. - Newlines inside quoted values (e.g. SRC="filename\r\n") are now ignored. - The STYLE data generated in HTML output now includes the TYPE="text/css" attribute. BUG FIXES - The path support was still broken. - Embedded files and images did not use path or HTTP support. - Table cell borders could be drawn on the wrong page if not all cells in a row span more than one page. - Large images could end up covering the footer at the bottom of the page (wasn't accounting for the line spacing.) - Fixed some memory leaks that would affect Windows 95/98/Me users. CHANGES IN HTMLDOC v1.8.9 NEW FEATURES - Added a "--no-numbered" option to turn heading numbers off. - Added support for "keywords" META data. - Added support for BMP images. - Added support for ROWSPAN attribute in tables. - Added support for HTTP file references. - Added new sample CGI program that can produce a PDF file for any page on a server. - Added new n/N, date, and time formats for the header and footer. CHANGES - Configuration script changes. - Now ignore file count in book files; instead, we now look at the first character of the third and subsequent lines - a dash (-) indicates the start of the options. (use a backslash to quote filenames starting with a dash) - Multiple-line paragraphs that have only 1 line on the bottom of the current page are now started on the following page. - DSC comments in PostScript output were not 100% conformant with the DSC spec. - Long table-of-contents entries are now wrapped (original patch supplied by Richard Pennington) - New color icon under UNIX when Xpm library available. BUG FIXES - Didn't allow &#nnn; character escapes inside preformatted text. - Empty TBODY groups would cause parse_table() to crash. - Comments were incorrectly terminated by ">" instead of "-->". - The command-line and GUI interfaces looked for "outlines" instead of "outline" for the page mode. - The HTML output code didn't output closing tags for empty elements. - The GUI interface started with the compression slider enabled, even for HTML output. - The beginnings of some lines could start with whitespace. - Wasn't aligning images and text on lines based on the line height. - The compression slider was enabled in the GUI even though HTML output was selected. - The Perl example code was incorrect. - Fixed the check for whether or not pages were generated. - htmlSetCharSet() wasn't reloading the character set data if the data directory changed. - The GUI did not reset the default background color. - The 'C' page number style (chapter page numbers) started at 3 instead of 1. - The chapter links were off by 1 or 2 pages when no title page was included. CHANGES IN HTMLDOC v1.8.8 NEW FEATURES - Added support for PDF security/encryption! - Now support TABLE height attribute. - Now generate an error message if no pages are generated (with a suggestion to use the webpage option.) - New "paths" option to specify additional directories to search for files. This is useful when the source files use absolute server paths. CHANGES - Added missing casts in htmllib.cxx that were causing a compile warning with some compilers. - No longer draw borders around empty cells in tables.. - Now disable the TOC tab when using webpage mode. - Now scale title image to 100% in HTML output. - Now handle comments with missing whitespace after the "" comment to force a page feed if there is not sufficient room on the page for the following text. - Page comments are now supported in tables. - Table rows are now allocated dynamically, MAX_ROWS at a time. CHANGES - Increased default MAX_PAGES to 10000 (was 5000.) - File links in book files now point to the top of the next page. - now aligns the table (previously it just set the default alignment of cells.) - Transparent GIFs now use the body color instead of white for the transparent color. - Updated to LIBPNG 1.0.6 in source distribution. - Updated the default cellpadding to be 1 pixel to match Netscape output. - Updated line and block spacing to match Netscape. - DL/DT/DD output now matches browsers (was indented from browser output.) - Now only output link (A) style if it is set to "none". Otherwise Netscape would underline all targets as well as links. - Increased the MAX_COLUMNS constant to 200, and dropped MAX_ROWS to 200. Note that the new table code now allocates rows in increments of MAX_ROWS rows, so the actual maximum number of rows depends on available memory. BUG FIXES - Now ignore illegal HTML in tables. - The VALIGN code didn't handle empty cells properly. - Wasn't offsetting the start of each row by the cell padding. - The JPEG image loading code didn't work for some JPEG images, particularly those from digital cameras (JPEG but not JFIF format.) - The strikethrough line was not being drawn in the correct position. - Wasn't setting the height of BR elements, so

didn't insert a blank line. - The table of contents would show the wrong page numbers if no title page was generated. - Cell widths did not subtract any border, padding, or spacing from the "preferred" width, causing formatting differences between web browsers and HTMLDOC. - The PNG loading code did not handle interlacing or transparency. - The HTML parsing code did not prevent elements in embedded files from completing elements in the parent file. - The table CELLSPACING amount was being applied twice in the table sizing calculations. CHANGES IN HTMLDOC v1.8.6 NEW FEATURES - New linkcolor and linkstyle options. CHANGES - Minor source changes for OS/2 compilation. - SUP and SUB now raise/lower text more to be consistent with browser look-n-feel. - Non-breaking space by itself was being output. Now check for that and ignore strings that consist entirely of whitespace. - New progress bar. BUG FIXES - Didn't add whitespace after a table caption. - Nested tables caused formatting problems (flatten_tree() didn't insert breaks for new rows) - A cell whose minimum width exceeded the available width for the table would cause the table to go off the page. - Cells that spanned more than two pages were drawn with boxes around them rather than just the sides. - The stylesheet info in the HTML output specified the H1 size for all headings. - The title page was incorrectly formatted when an image was specified - the text start position was computed using the pixel height of the title image and not the formatted height. - 1 color images didn't come out right; the "fix" to work around an Acrobat Reader bug was being done too soon, so the color lookups were wrong. - HTML file links now work properly. - Now limit all HTML input to the maximum size of input buffers to avoid potential buffer overflow problems in CGIs. - If a row had a predefined height, HTMLDOC wasn't making sure that the row would fit on the current page. - THEAD, TFOOT, and TBODY caused problems when formatting tables. Note: THEAD and TFOOT are *still* not supported, however the code now properly ignores them and parses the rows in the TBODY group. - The VALIGN code introduced in the 1.8.5 release didn't check for NULL pointers in all cases. CHANGES IN HTMLDOC v1.8.5 NEW FEATURES - New "--titlefile" option to include an HTML file for the title page(s). - New 'C' header/footer option to show current page number within chapter or HTML file. - Allow adding of .book files to import all HTML files in the book. - New "HALF PAGE" page comment to feed 1/2 page. - Added VALIGN and HEIGHT support in tables. CHANGES - Now optimize link objects in PDF files (provides a 40k reduction in file size for the HTMLDOC manual alone) - Table rows that cross page boundaries are now rendered more like Netscape and MSIE. - Now support HTMLDOC_DATA and HTMLDOC_HELP environment variables under UNIX (for alternate install directory) - Now show error messages when HTMLDOC can't open the AFM, character set, or PostScript glyph files. - The logo image is now scaled to its "natural" size (as it would appear in a web browser) - Now recognize VALIGN="MIDDLE" or VALIGN="CENTER". BUG FIXES - Generation of PDF files to the standard output (i.e. to the web server + browser) didn't work on some versions of UNIX. HTMLDOC now writes the PDF output to a temporary file and then copies it to the standard output as needed. - PDF links were missing the first 5 characters in the filename; the code was trying to skip over the "file:" prefix, but that prefix was already skipped elsewhere. - Nested descriptive lists (DL) did not get rendered properly. - Tables had extra whitespace before and after them. - Multiple aligned images confused parse_paragraph(); the images would overlap instead of stack on the sides. CHANGES IN HTMLDOC v1.8.4 CHANGES - More configure script changes for FLTK DSOs. - FileIcon.cxx was still using NULL for outline (an integer), which caused some ANSI C++ compilers to complain. BUG FIXES - The Fonts and Colors tab groups did not extend to the full width of the tab area, which prevented the Browse button from working when clicked on the right side. - The help dialog window did not scroll all the way to the bottom of the text. - The chapter ("c") header/footer string did not work. - The heading ("h") header/footer string did not always match the first heading on a page. - The header and footer fonts were not used when computing the widths of the header and footer strings. - The Windows distribution did not create the right shortcut for the Users Manual in the Start menu. - The command-line code did not accept "--grayscale", only "--gray" - Multi-file HTML output did not use the right link for the table-of-contents file if no title page was being generated. - Extra whitespace before and after tables has been eliminated. CHANGES IN HTMLDOC v1.8.3 NEW FEATURES - New "--browserwidth" option to control scaling of images and tables that use fixed pixel widths. CHANGES - The configure script now looks for the OpenGL library (required if you use a shared FLTK library with OpenGL support.) - Increased the max number of chapters to 1000. BUG FIXES - Page break comments didn't force a paragraph break. - --no-toc prevented chapters from being output in PS and PDF files. - Filenames didn't always get updated properly when doing a "save as"... - Fixed some more leading/trailing whitespace problems. - Wasn't freeing page headings after the document was generated. - Wasn't range checking the current chapter number; now limits the number of chapters to MAX_CHAPTERS and issues an error message whenever the limit is exceeded. CHANGES IN HTMLDOC v1.8.2 NEW FEATURES - New "setup" program for UNIX software installation. CHANGES - Documentation updated for new UNIX "setup" program and "..." usage for headers and footers. - Changed margins to floating point (instead of integer) to improve table column accuracy. BUG FIXES - HTMLDOC could crash under Microsoft Windows with some types of HTML files. This was caused by a stack overflow, usually when processing nested tables. - Multiple HTML files weren't being converted properly in web page mode - only the last file would be generated for PostScript output, and no file for PDF output. - Wasn't preserving the whitespace between "one" and "two" in the HTML code "one two three". - Paragraph spacing was inconsistent. -
wasn't formatted properly. - The command-line code wasn't opening HTML files in binary mode. This caused problems under Microsoft Windows. CHANGES IN HTMLDOC v1.8.1 CHANGES - The configure script didn't update the ARFLAGS variable for *BSD operating systems (no "s" option to build the symbol table...) - Changed the installation commands to only create the installation directory if it does not exist. This prevents installation errors on some platforms the second time around. - Now use the Microsoft definitions for characters 128 through 159 that are otherwise unused by the ISO-8859-x character sets. - Now set optimization settings when we know the compiler. - Now always quote attribute values in HTML output to make HTML lint programs happy. BUG FIXES - Wasn't using TOC title string in PDF document outline. - Preformatted text in tables didn't force the column width. - Cells using COLSPAN > 1 didn't contribute to the width of columns. - The table code didn't enforce the per-column minimums under certain circumstances, causing "scrambled" columns. - The configure script and makefiles didn't work when FLTK was not available. They now only build the "gui" library when it is available. - The Windows distribution was installing files under PROGRAMDIR instead of TARGETDIR. This prevented users from customizing the installation directory. - The configure script overrode the LDFLAGS environment variable, preventing FLTK from being located in a non- default directory. CHANGES IN HTMLDOC v1.8 NEW FEATURES - Now support PDF 1.1 (Acrobat 2.x) and PDF 1.3 (Acrobat 4.0). - Now support PDF page modes, layouts, and effects, and the first page that is displayed in Acrobat Reader. - Now support PostScript Level 3 output with Flate image compression. - Now support PostScript commands for page size and duplexing. - Now add filenames as needed to HTML links. - Added optimizations to output code to further reduce PDF and PostScript file size. - Now support alternate 8-bit character sets. Currently we supply data files for the ISO-8859-N character sets. - Added chapter headings to the available header/footer formats. - The GUI file chooser is significantly improved and supports selection of multiple HTML files. - The GUI now provides on-line help. - Many other GUI improvements. - Added support for DIR and MENU block elements. - The header and footer text can now be made boldface, italic, etc. - Font settings are now exported to HTML files in a style sheet. - Now support page breaks using HTML comments. - The image dimensions are now exported to HTML files. - Added landscape printing option. - Added CAPTION support for tables. - Filename links now work for HTML files included in a document. - Now support BGCOLOR in tables. CHANGES - Lots of documentation changes. - Much better table formatting. - Changed HTML output to use less invasive navigation bars at the top and bottom of each file. This also means that the "--barcolor" option is no longer supported! - Updated to use existing filenames in HTML (directory) output. - Now recognize any local PDF file as a local file link (i.e. you just need "HREF=filename.pdf" and not "HREF=file:filename.pdf") - , , and no longer reduce the font size. - Now put whitespace after image data in PDF files. This change was needed to work around a bug in Acrobat Reader 4.0. - Now generate a complete encoding vector for fonts in PDF files. This change was needed to work around a bug in all versions of Acrobat Exchange that did not recognize the WinANSI encoding defined in the PDF specifications. - Now filter out the BREAK attribute from HR elements. - Now only load images once. BUG FIXES - Wasn't escaping &,<, or > in HTML output - Wasn't preserving   - Links in multi-file HTML output were off-by-one. - BLOCKQUOTE needed to be like CENTER and DIV. - Needed to use existing link name if present for headings to avoid nested link name bug in Netscape and MSIE. - Extremely long link names could cause TOC generation to fail and HTMLDOC to crash. - PDF output was not compatible with Ghostscript/Ghostview because Ghostscript does not support inherited page resources or the "Fl" abbreviation for the "FlateDecode" compression filter. - PostScript DSC comments didn't have unique page numbers. This caused Ghostview (among others) to get confused. - Some functions didn't handle empty text fragments. - Images couldn't be scaled both horizontally and vertically. -
  • didn't support the VALUE attribute (but
      did...) - Fixed whitespace problems before and after some markups that was caused by intervening links. - The indexed image output code could generate an image with only 1 color index used, which upset Acrobat Reader. - Fixed a bug in table-of-contents handling - HTMLDOC would crash on some systems if you converted a web page on the command-line. - Wasn't setting the font size and spacing soon enough when generating files on the command-line. - Didn't hide EMBED elements when generating indexed HTML files. - Didn't always set the current drawing position before drawing a box or line. - Base85 encoding of image data was broken for PostScript output. - JPEG compression was broken for PostScript output. - Didn't set binary mode for the standard output under Windows and OS/2 needed. CHANGES IN HTMLDOC v1.7 - Added option for overriding the background color or image. - Added default font typeface and size options. - Added progress indicator for page formatting. - The HTMLDOC window is now resizeable. - The
  • and
    markups didn't start a new block. - strcasecmp and friends are not available on all platforms. - Added support for MacOS (command-line only). - The width of table cells could be off by 1 point causing unnecessary text wrapping. - The GUI's default center footer wasn't "blank". - Images could be "lost" if they reside in the current directory or use an absolute path. - Documents without titles or headings could crash HTMLDOC. - The image loading code could crash due to a MSVC++ runtime library bug. - Spacing before
    's wasn't consistent. - Buffer overflow problems causing crashes. - Didn't accept whitespace in variables, e.g. "" - Links didn't always get propagated. - The Flate compressor data was not getting freed, so HTMLDOC could use a lot of memory when compression was enabled. CHANGES IN HTMLDOC v1.6 - Now support JPEG compression of images. - Now have selectable Flate (ZIP) compression level. - Now only adjust top and bottom margins if headers and footers are used. - Better HTML output support (now remember files for links in multi-file output). - Increased maximum page count to 5000. - Needed to show headers on all pages in web page mode. - Now recognize both "in" and "inch" for measurements. -
    was not handled properly. - Selecting "web page" in the GUI clears the title toggle. - TABLE row spacing was not right... -
    now draws multi-column borders. - Column widths were computed wrong when COLSPAN was used. - Nested lists were not handled right. - Internal links didn't work for PDF output. - Block spacing should now be more consistent. - Image scaling was off - now only use page width so that images are not warped. - The footer was always one line too low. - Couldn't double-click on input filename to edit. CHANGES IN HTMLDOC v1.5 - Added customization of headers and footers. - Added new "--title" image option. - Can now put logo image in header or footer. - now works for link destinations. - The table of contents now appears as part of the document outline in PDF output. - Links to local PDF files are now treated as file links in PDF output instead of web links. - You can now turn the title page on/off as desired. - PostScript and PDF output to stdout now works. - Nested tables now format properly. -
    now provides horizontal rule; to get a page break use "
    ". - Fixed bug. - Fixed GIF loader bug (caused problems on Alpha machines) - No longer get extra line after list items. - markup nesting now works. - "&" by itself would cause loss of 15 characters. - The current directory was not tracked properly under Windows. - The right, top, and bottom margins were not being saved properly. - The htmlReadFile() function could consume too much stack space, causing a program failure. - PostScript and PDF files were corrupt when generating a web page with a title page. CHANGES IN HTMLDOC v1.4 - Now use autoconf "configure" script to build UNIX makefile. - Now handle relative filenames a lot better when loading images and files. - Added "--webpage" option to support printing of plain HTML files (i.e. not documents with chapters) - Added support for document backgrounds in PostScript and PDF output - Added "--no-toc" and "--no-title" options to disable the table-of-contents and title pages, respectively - PDF files now store all named links for use from a web page (HREF="filename.pdf#name") - Converted to C++ - Now using FLTK for the GUI under UNIX and Windows (yeah, one set of code!) - Merged GUI and command-line versions - Greatly enhanced GUI now supports nearly all command-line options. - Miscellaneous fixes to HTML parsing code - PDF links should now go to the right page all the time - Fixed DSC comments in PostScript output to conform to the standard - Fixed dumb bug in Windows version - didn't handle HTML files with only a LF at the end of each line (this is a BUG in the MSVC++ runtime libraries!) -
     inside a list didn't work
    	- parse_table() and friends didn't check for a NULL parent
    	  pointer.
    	- Paragraph text that wasn't enclosed by P markups was
    	  located on the wrong page when followed by a H1 markup.
    
    CHANGES IN HTMLDOC v1.3.1
    
    	- Fixed font encoding vector in PostScript output (minus instead
    	  of hyphen for '-' character).
    
    
    CHANGES IN HTMLDOC v1.3
    
            - New GUI for managing documents (Windows + X11/Motif)
    	- Better table printing with support for user-specified column
    	  widths and better automatic-sizing
            - PNG loading now works when grayscale output is requested
    	- No image optimization was performed in PDF or Level 2 PostScript
    	  files.  HTMLDOC now converts images to indexed (1,2,4,8 bits) if
    	  there is an advantage (fewer bits per pixel) and no loss of color
    	  would occur
    	- The filenames in links were getting lost when writing indexed
    	  HTML to a directory
    	- The logo image filename wasn't being localized when writing
    	  indexed HTML to a directory
    	- Fonts, images, and links weren't supported inside a PRE tag
    	- Added support for the  markup
    	- No longer assume that chars are unsigned by default
    	- Invalid or missing links no longer generate bad PDF files
    	- External links (http:, ftp:, etc) now work
    	- Escaped characters are now decoded correctly in the table of
    	  contents in PDF files
    	- Image scaling is now more intelligent
    
    
    CHANGES IN HTMLDOC v1.2
    
            - Now support "internal" links in a document (PDF & HTML).
            - Added "no compression" option for PDF files; this is needed for
              older PDF readers like Acroread 2.x.
            - Much better parsing of HTML; should now work very well with the
              HTML output by Netscape Composer.
            - Wasn't opening image files in "binary" mode (Windows).
            - The htmlReadString() and htmlWriteString() functions were removed
              because of portability problems to HP-UX and Windows, among others.
    
    
    CHANGES IN HTMLDOC v1.1
    
            - Ordered (numbered) lists are now supported, as are the TYPE=, START=,
              and VALUE= option variables.
            - Now support coverpages for PS and PDF output with optional logo image.
            - Running headings (at the bottom of PS/PDF pages) are now tracked
              correctly.
            - Fixed parsing of lists so lists generated by Netscape Composer work
              right...
            - Fixed HTML links when generating a single HTML file.
            - The --numbered option didn't number all headings (only those in the
              table-of-contents).
    
    
    CHANGES IN HTMLDOC v1.0
    
            - Initial version.
    htmldoc-1.8.27/htmldoc.readme0100664000212600000240000000257610232770600014542 0ustar  mikeuserINSTALLATION INSTRUCTIONS FOR HTMLDOC
    -------------------------------------
    
    REQUIREMENTS
    
        HTMLDOC requires an average of 2MB of disk space for
        installation. The following platforms are supported:
    
    	- Linux 2.4 or higher (Intel only)
    	- MacOS X 10.2 or higher
    	- Microsoft Windows 95 or higher
    	- Solaris 7 or higher (SPARC and Intel)
    
    
    INSTALLING HTMLDOC ON MICROSOFT WINDOWS
    
        HTMLDOC for Microsoft Windows is provided in a Microsoft
        Installer (.MSI) file. Double-click on the .MSI file to
        start the installation wizard.
    
    
    INSTALLING HTMLDOC ON MACOS X
    
        HTMLDOC for MacOS X is provided in a compressed archive.
        Open the file using StuffIt Expander to create a folder
        called "htmldoc-1.8.24-macosx".  Open this folder and
        double-click on the "Install" icon to start the installation
        wizard.
    
    
    INSTALLING HTMLDOC ON LINUX
    
        You must be logged in as an administrative user in order to
        install this software.
    
        HTMLDOC for Linux is provided in a RPM package file. Type the
        following command to install HTMLDOC:
    
            rpm -i htmldoc-1.8.24-linux-intel.rpm ENTER
    
    
    INSTALLING HTMLDOC ON SOLARIS
    
        You must be logged in as an administrative user in order to
        install this software.
    
        HTMLDOC for Solaris is provided in a PKG package file. Type the
        following command to install HTMLDOC:
    
            pkgadd -d htmldoc-1.8.24-linux-intel.pkg ENTER
    htmldoc-1.8.27/htmldoc/0040775000212600000240000000000010464177317013371 5ustar  mikeuserhtmldoc-1.8.27/htmldoc/http-addrlist.c0100664000212600000240000003333410446011405016304 0ustar  mikeuser/*
     * "$Id: http-addrlist.c 1513 2006-06-20 15:23:49Z mike $"
     *
     *   HTTP address list routines for the Common UNIX Printing System (CUPS).
     *
     *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
     *
     *   These coded instructions, statements, and computer programs are the
     *   property of Easy Software Products and are protected by Federal
     *   copyright law.  Distribution and use rights are outlined in the file
     *   "LICENSE.txt" which should have been included with this file.  If this
     *   file is missing or damaged please contact Easy Software Products
     *   at:
     *
     *       Attn: CUPS Licensing Information
     *       Easy Software Products
     *       44141 Airport View Drive, Suite 204
     *       Hollywood, Maryland 20636 USA
     *
     *       Voice: (301) 373-9600
     *       EMail: cups-info@cups.org
     *         WWW: http://www.cups.org
     *
     * Contents:
     *
     *   httpAddrConnect()  - Connect to any of the addresses in the list.
     *   httpAddrFreeList() - Free an address list.
     *   httpAddrGetList()  - Get a list of addresses for a hostname.
     */
    
    /*
     * Include necessary headers...
     */
    
    #include "http-private.h"
    #include "debug.h"
    #include 
    
    
    /*
     * 'httpAddrConnect()' - Connect to any of the addresses in the list.
     *
     * @since CUPS 1.2@
     */
    
    http_addrlist_t *			/* O - Connected address or NULL on failure */
    httpAddrConnect(
        http_addrlist_t *addrlist,		/* I - List of potential addresses */
        int             *sock)		/* O - Socket */
    {
      int	val;				/* Socket option value */
    
    
     /*
      * Loop through each address until we connect or run out of addresses...
      */
    
      while (addrlist)
      {
       /*
        * Create the socket...
        */
    
        if ((*sock = socket(addrlist->addr.addr.sa_family, SOCK_STREAM, 0)) < 0)
        {
         /*
          * Don't abort yet, as this could just be an issue with the local
          * system not being configured with IPv4/IPv6/domain socket enabled...
          */
    
          addrlist = addrlist->next;
          continue;
        }
    
       /*
        * Set options...
        */
    
        val = 1;
    #ifdef WIN32
        setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&val,
                   sizeof(val));
    #else
        setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
    #endif /* WIN32 */
    
    #ifdef SO_REUSEPORT
        val = 1;
        setsockopt(*sock, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val));
    #endif /* SO_REUSEPORT */
    
    #ifdef SO_NOSIGPIPE
        val = 1;
        setsockopt(*sock, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof(val));
    #endif /* SO_NOSIGPIPE */
    
       /*
        * Using TCP_NODELAY improves responsiveness, especially on systems
        * with a slow loopback interface...
        */
    
        val = 1;
    #ifdef WIN32
        setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&val,
                   sizeof(val)); 
    #else
        setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)); 
    #endif /* WIN32 */
    
    #ifdef FD_CLOEXEC
       /*
        * Close this socket when starting another process...
        */
    
        fcntl(*sock, F_SETFD, FD_CLOEXEC);
    #endif /* FD_CLOEXEC */
    
       /*
        * Then connect...
        */
    
        if (!connect(*sock, &(addrlist->addr.addr),
                     httpAddrLength(&(addrlist->addr))))
          break;
    
       /*
        * Close this socket and move to the next address...
        */
    
    #ifdef WIN32
        closesocket(*sock);
    #else
        close(*sock);
    #endif /* WIN32 */
    
        addrlist = addrlist->next;
      }
    
      return (addrlist);
    }
    
    
    /*
     * 'httpAddrFreeList()' - Free an address list.
     *
     * @since CUPS 1.2@
     */
    
    void
    httpAddrFreeList(
        http_addrlist_t *addrlist)		/* I - Address list to free */
    {
      http_addrlist_t	*next;		/* Next address in list */
    
    
     /*
      * Free each address in the list...
      */
    
      while (addrlist)
      {
        next = addrlist->next;
    
        free(addrlist);
    
        addrlist = next;
      }
    }
    
    
    /*
     * 'httpAddrGetList()' - Get a list of addresses for a hostname.
     *
     * @since CUPS 1.2@
     */
    
    http_addrlist_t	*			/* O - List of addresses or NULL */
    httpAddrGetList(const char *hostname,	/* I - Hostname, IP address, or NULL for passive listen address */
                    int        family,	/* I - Address family or AF_UNSPEC */
    		const char *service)	/* I - Service name or port number */
    {
      http_addrlist_t	*first,		/* First address in list */
    			*addr,		/* Current address in list */
    			*temp;		/* New address */
    
    
    #ifdef DEBUG
      printf("httpAddrGetList(hostname=\"%s\", family=AF_%s, service=\"%s\")\n",
             hostname ? hostname : "(nil)",
    	 family == AF_UNSPEC ? "UNSPEC" :
    #  ifdef AF_LOCAL
    	     family == AF_LOCAL ? "LOCAL" :
    #  endif /* AF_LOCAL */
    #  ifdef AF_INET6
    	     family == AF_INET6 ? "INET6" :
    #  endif /* AF_INET6 */
    	     family == AF_INET ? "INET" : "???", service);
    #endif /* DEBUG */
    
     /*
      * Lookup the address the best way we can...
      */
    
      first = addr = NULL;
    
    #ifdef AF_LOCAL
      if (hostname && hostname[0] == '/')
      {
       /*
        * Domain socket address...
        */
    
        first = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
        first->addr.un.sun_family = AF_LOCAL;
        strlcpy(first->addr.un.sun_path, hostname, sizeof(first->addr.un.sun_path));
      }
      else
    #endif /* AF_LOCAL */
      {
    #ifdef HAVE_GETADDRINFO
        struct addrinfo	hints,		/* Address lookup hints */
    			*results,	/* Address lookup results */
    			*current;	/* Current result */
        char		ipv6[1024],	/* IPv6 address */
    			*ipv6zone;	/* Pointer to zone separator */
        int			ipv6len;	/* Length of IPv6 address */
    
       /*
        * Lookup the address as needed...
        */
    
        memset(&hints, 0, sizeof(hints));
        hints.ai_family   = family;
        hints.ai_flags    = hostname ? 0 : AI_PASSIVE;
        hints.ai_socktype = SOCK_STREAM;
    
        if (hostname && *hostname == '[')
        {
         /*
          * Remove brackets from numeric IPv6 address...
          */
    
          if (!strncmp(hostname, "[v1.", 4))
          {
           /*
            * Copy the newer address format which supports link-local addresses...
    	*/
    
    	strlcpy(ipv6, hostname + 4, sizeof(ipv6));
    	if ((ipv6len = strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']')
    	{
              ipv6[ipv6len] = '\0';
    	  hostname      = ipv6;
    
             /*
    	  * Convert "+zone" in address to "%zone"...
    	  */
    
              if ((ipv6zone = strrchr(ipv6, '+')) != NULL)
    	    *ipv6zone = '%';
    	}
          }
          else
          {
           /*
            * Copy the regular non-link-local IPv6 address...
    	*/
    
    	strlcpy(ipv6, hostname + 1, sizeof(ipv6));
    	if ((ipv6len = strlen(ipv6) - 1) >= 0 && ipv6[ipv6len] == ']')
    	{
              ipv6[ipv6len] = '\0';
    	  hostname      = ipv6;
    	}
          }
        }
    
        if (!getaddrinfo(hostname, service, &hints, &results))
        {
         /*
          * Copy the results to our own address list structure...
          */
    
          for (current = results; current; current = current->ai_next)
            if (current->ai_family == AF_INET || current->ai_family == AF_INET6)
    	{
    	 /*
              * Copy the address over...
    	  */
    
    	  temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	  if (!temp)
    	  {
    	    httpAddrFreeList(first);
    	    return (NULL);
    	  }
    
              if (current->ai_family == AF_INET6)
    	    memcpy(&(temp->addr.ipv6), current->ai_addr,
    	           sizeof(temp->addr.ipv6));
    	  else
    	    memcpy(&(temp->addr.ipv4), current->ai_addr,
    	           sizeof(temp->addr.ipv4));
    
             /*
    	  * Append the address to the list...
    	  */
    
    	  if (!first)
    	    first = temp;
    
    	  if (addr)
    	    addr->next = temp;
    
    	  addr = temp;
    	}
    
         /*
          * Free the results from getaddrinfo()...
          */
    
          freeaddrinfo(results);
        }
    #else
        if (hostname)
        {
          int		i;		/* Looping vars */
          unsigned		ip[4];		/* IPv4 address components */
          const char	*ptr;		/* Pointer into hostname */
          struct hostent	*host;		/* Result of lookup */
          struct servent	*port;		/* Port number for service */
          int		portnum;	/* Port number */
    
    
         /*
          * Lookup the service...
          */
    
          if (!service)
    	portnum = 0;
          else if (isdigit(*service & 255))
    	portnum = atoi(service);
          else if ((port = getservbyname(service, NULL)) != NULL)
    	portnum = ntohs(port->s_port);
          else if (!strcmp(service, "http"))
            portnum = 80;
          else if (!strcmp(service, "https"))
            portnum = 443;
          else if (!strcmp(service, "ipp"))
            portnum = 631;
          else if (!strcmp(service, "lpd"))
            portnum = 515;
          else if (!strcmp(service, "socket"))
            portnum = 9100;
          else
    	return (NULL);
    
         /*
          * This code is needed because some operating systems have a
          * buggy implementation of gethostbyname() that does not support
          * IPv4 addresses.  If the hostname string is an IPv4 address, then
          * sscanf() is used to extract the IPv4 components.  We then pack
          * the components into an IPv4 address manually, since the
          * inet_aton() function is deprecated.  We use the htonl() macro
          * to get the right byte order for the address.
          */
    
          for (ptr = hostname; isdigit(*ptr & 255) || *ptr == '.'; ptr ++);
    
          if (!*ptr)
          {
           /*
    	* We have an IPv4 address; break it up and create an IPv4 address...
    	*/
    
    	if (sscanf(hostname, "%u.%u.%u.%u", ip, ip + 1, ip + 2, ip + 3) == 4 &&
                ip[0] <= 255 && ip[1] <= 255 && ip[2] <= 255 && ip[3] <= 255)
    	{
    	  first = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	  if (!first)
    	    return (NULL);
    
              first->addr.ipv4.sin_family = AF_INET;
              first->addr.ipv4.sin_addr.s_addr = htonl(((((((ip[0] << 8) |
    	                                               ip[1]) << 8) |
    						     ip[2]) << 8) | ip[3]));
              first->addr.ipv4.sin_port = htons(portnum);
    	}
          }
          else if ((host = gethostbyname(hostname)) != NULL &&
    #  ifdef AF_INET6
                   (host->h_addrtype == AF_INET || host->h_addrtype == AF_INET6))
    #  else
                   host->h_addrtype == AF_INET)
    #  endif /* AF_INET6 */
          {
    	for (i = 0; host->h_addr_list[i]; i ++)
    	{
    	 /*
              * Copy the address over...
    	  */
    
    	  temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	  if (!temp)
    	  {
    	    httpAddrFreeList(first);
    	    return (NULL);
    	  }
    
    #  ifdef AF_INET6
              if (host->h_addrtype == AF_INET6)
    	  {
                temp->addr.ipv6.sin6_family = AF_INET6;
    	    memcpy(&(temp->addr.ipv6.sin6_addr), host->h_addr_list[i],
    	           sizeof(temp->addr.ipv6));
                temp->addr.ipv6.sin6_port = htons(portnum);
    	  }
    	  else
    #  endif /* AF_INET6 */
    	  {
                temp->addr.ipv4.sin_family = AF_INET;
    	    memcpy(&(temp->addr.ipv4.sin_addr), host->h_addr_list[i],
    	           sizeof(temp->addr.ipv4));
                temp->addr.ipv4.sin_port = htons(portnum);
              }
    
    	 /*
    	  * Append the address to the list...
    	  */
    
    	  if (!first)
    	    first = temp;
    
    	  if (addr)
    	    addr->next = temp;
    
    	  addr = temp;
    	}
          }
        }
    #endif /* HAVE_GETADDRINFO */
      }
    
     /*
      * Detect some common errors and handle them sanely...
      */
    
      if (!addr && (!hostname || !strcmp(hostname, "localhost")))
      {
        struct servent	*port;		/* Port number for service */
        int			portnum;	/* Port number */
    
    
       /*
        * Lookup the service...
        */
    
        if (!service)
          portnum = 0;
        else if (isdigit(*service & 255))
          portnum = atoi(service);
        else if ((port = getservbyname(service, NULL)) != NULL)
          portnum = ntohs(port->s_port);
        else if (!strcmp(service, "http"))
          portnum = 80;
        else if (!strcmp(service, "https"))
          portnum = 443;
        else if (!strcmp(service, "ipp"))
          portnum = 631;
        else if (!strcmp(service, "lpd"))
          portnum = 515;
        else if (!strcmp(service, "socket"))
          portnum = 9100;
        else
          return (NULL);
    
        if (hostname && !strcmp(hostname, "localhost"))
        {
         /*
          * Unfortunately, some users ignore all of the warnings in the
          * /etc/hosts file and delete "localhost" from it. If we get here
          * then we were unable to resolve the name, so use the IPv6 and/or
          * IPv4 loopback interface addresses...
          */
    
    #ifdef AF_INET6
          if (family != AF_INET)
          {
           /*
            * Add [::1] to the address list...
    	*/
    
    	temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	if (!temp)
    	{
    	  httpAddrFreeList(first);
    	  return (NULL);
    	}
    
            temp->addr.ipv6.sin6_family            = AF_INET6;
    	temp->addr.ipv6.sin6_port              = htons(portnum);
    #  ifdef WIN32
    	temp->addr.ipv6.sin6_addr.u.Byte[15]   = 1;
    #  else
    	temp->addr.ipv6.sin6_addr.s6_addr32[3] = htonl(1);
    #  endif /* WIN32 */
    
            if (!first)
              first = temp;
    
            addr = temp;
          }
    
          if (family != AF_INET6)
    #endif /* AF_INET6 */
          {
           /*
            * Add 127.0.0.1 to the address list...
    	*/
    
    	temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	if (!temp)
    	{
    	  httpAddrFreeList(first);
    	  return (NULL);
    	}
    
            temp->addr.ipv4.sin_family      = AF_INET;
    	temp->addr.ipv4.sin_port        = htons(portnum);
    	temp->addr.ipv4.sin_addr.s_addr = htonl(0x7f000001);
    
            if (!first)
              first = temp;
    
            if (addr)
    	  addr->next = temp;
    	else
              addr = temp;
          }
        }
        else if (!hostname)
        {
         /*
          * Provide one or more passive listening addresses...
          */
    
    #ifdef AF_INET6
          if (family != AF_INET)
          {
           /*
            * Add [::] to the address list...
    	*/
    
    	temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	if (!temp)
    	{
    	  httpAddrFreeList(first);
    	  return (NULL);
    	}
    
            temp->addr.ipv6.sin6_family = AF_INET6;
    	temp->addr.ipv6.sin6_port   = htons(portnum);
    
            if (!first)
              first = temp;
    
            addr = temp;
          }
    
          if (family != AF_INET6)
    #endif /* AF_INET6 */
          {
           /*
            * Add 0.0.0.0 to the address list...
    	*/
    
    	temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
    	if (!temp)
    	{
    	  httpAddrFreeList(first);
    	  return (NULL);
    	}
    
            temp->addr.ipv4.sin_family = AF_INET;
    	temp->addr.ipv4.sin_port   = htons(portnum);
    
            if (!first)
              first = temp;
    
            if (addr)
    	  addr->next = temp;
    	else
              addr = temp;
          }
        }
      }
    
     /*
      * Return the address list...
      */
    
      return (first);
    }
    
    
    /*
     * End of "$Id: http-addrlist.c 1513 2006-06-20 15:23:49Z mike $".
     */
    htmldoc-1.8.27/htmldoc/license.cxx0100664000212600000240000004656410330505373015540 0ustar  mikeuser//
    // "$Id: license.cxx 1439 2005-10-28 20:32:59Z mike $"
    //
    //   GUI license dialog routines for HTMLDOC, an HTML document processing
    //   program.
    //
    //   Copyright 1997-2005 by Easy Software Products.
    //
    //   These coded instructions, statements, and computer programs are the
    //   property of Easy Software Products and are protected by Federal
    //   copyright law.  Distribution and use rights are outlined in the file
    //   "COPYING.txt" which should have been included with this file.  If this
    //   file is missing or damaged please contact Easy Software Products
    //   at:
    //
    //       Attn: ESP Licensing Information
    //       Easy Software Products
    //       44141 Airport View Drive, Suite 204
    //       Hollywood, Maryland 20636 USA
    //
    //       Voice: (301) 373-9600
    //       EMail: info@easysw.com
    //         WWW: http://www.easysw.com
    //
    // Contents:
    //
    //
    
    #include "htmldoc.h"
    
    #ifdef HAVE_LIBFLTK
    
    //
    // Include necessary headers.
    //
    
    #  include 
    #  include 
    #  include 
    #  include 
    #  include 
    
    
    //
    // Local functions...
    //
    
    static void	closeLicenseCB(Fl_Widget *w);
    
    
    //
    // 'GUI::showLicenseCB()' - Show the current license.
    //
    
    void
    GUI::showLicenseCB(void)
    {
      Fl_Window	*dialog;		// Dialog window
      Fl_Group	*group;			// Raised area
      Fl_Help_View	*help;			// License agreement viewer
      Fl_Button	*button;		// Button
      Fl_Box	*box;			// Text box
    
    
      // Create the window complete with the license agreement and
      // button to add a new license...
      dialog = new Fl_Window(480, 480, "HTMLDOC " SVERSION " License");
      dialog->set_modal();
      dialog->hotspot(dialog);
    
      group = new Fl_Group(10, 10, 460, 425, "HTMLDOC " SVERSION " License");
      group->align((Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_TOP | FL_ALIGN_INSIDE));
      group->box(FL_THIN_UP_BOX);
      group->labelcolor(FL_BLUE);
      group->labelfont(FL_HELVETICA_BOLD);
      group->labelsize(18);
    
      box = new Fl_Box(20, 45, 440, 110,
        "You are using the free, unsupported version of HTMLDOC which is "
        "provided under the terms of the GNU General Public License shown "
        "below. Commercial versions of HTMLDOC, which financially "
        "support the continued development of HTMLDOC, may be purchased at the "
        "following URL:\n"
        "\n"
        "                http://www.easysw.com/htmldoc/"
      );
    
      box->align((Fl_Align)(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_WRAP));
    
      help = new Fl_Help_View(20, 190, 440, 235, "Software License Agreement:");
      help->align(FL_ALIGN_TOP_LEFT);
      help->value(
        "

    GNU GENERAL PUBLIC LICENSE

    \n" "

    Version 2, June 1991 " "

    \n"
        "Copyright 1989, 1991 Free Software Foundation, Inc.\n"
        "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
        "Everyone is permitted to copy and distribute verbatim\n"
        "copies of this license document, but changing it is not\n"
        "allowed.\n"
        "\n"
        "
    \n" "

    Preamble

    \n" "

    The licenses for most software are designed to take away your " "freedom to share and change it. By contrast, the GNU General Public " "License is intended to guarantee your freedom to share and change free " "software--to make sure the software is free for all its users. This " "General Public License applies to most of the Free Software " "Foundation's software and to any other program whose authors commit to " "using it. (Some other Free Software Foundation software is covered by " "the GNU Library General Public License instead.) You can apply it to " "your programs, too. " "

    When we speak of free software, we are referring to freedom, not " "price. Our General Public Licenses are designed to make sure that you " "have the freedom to distribute copies of free software (and charge for " "this service if you wish), that you receive source code or can get it " "if you want it, that you can change the software or use pieces of it " "in new free programs; and that you know you can do these things. " "

    To protect your rights, we need to make restrictions that forbid " "anyone to deny you these rights or to ask you to surrender the rights. " "These restrictions translate to certain responsibilities for you if you " "distribute copies of the software, or if you modify it. " "

    For example, if you distribute copies of such a program, whether " "gratis or for a fee, you must give the recipients all the rights that " "you have. You must make sure that they, too, receive or can get the " "source code. And you must show them these terms so they know their " "rights. " "

    We protect your rights with two steps: (1) copyright the software, and " "(2) offer you this license which gives you legal permission to copy, " "distribute and/or modify the software. " "

    Also, for each author's protection and ours, we want to make certain " "that everyone understands that there is no warranty for this free " "software. If the software is modified by someone else and passed on, we " "want its recipients to know that what they have is not the original, so " "that any problems introduced by others will not reflect on the original " "authors' reputations. " "

    Finally, any free program is threatened constantly by software " "patents. We wish to avoid the danger that redistributors of a free " "program will individually obtain patent licenses, in effect making the " "program proprietary. To prevent this, we have made it clear that any " "patent must be licensed for everyone's free use or not licensed at all. " "

    The precise terms and conditions for copying, distribution and " "modification follow. " "

    GNU GENERAL PUBLIC LICENSE
    \n" "TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

    \n" "

    0. This License applies to any program or other work which contains " "a notice placed by the copyright holder saying it may be distributed " "under the terms of this General Public License. The \"Program\", below, " "refers to any such program or work, and a \"work based on the Program\" " "means either the Program or any derivative work under copyright law: " "that is to say, a work containing the Program or a portion of it, " "either verbatim or with modifications and/or translated into another " "language. (Hereinafter, translation is included without limitation in " "the term \"modification\".) Each licensee is addressed as \"you\". " "

    Activities other than copying, distribution and modification are not " "covered by this License; they are outside its scope. The act of " "running the Program is not restricted, and the output from the Program " "is covered only if its contents constitute a work based on the " "Program (independent of having been made by running the Program). " "Whether that is true depends on what the Program does. " "

    1. You may copy and distribute verbatim copies of the Program's " "source code as you receive it, in any medium, provided that you " "conspicuously and appropriately publish on each copy an appropriate " "copyright notice and disclaimer of warranty; keep intact all the " "notices that refer to this License and to the absence of any warranty; " "and give any other recipients of the Program a copy of this License " "along with the Program. " "

    You may charge a fee for the physical act of transferring a copy, and " "you may at your option offer warranty protection in exchange for a fee. " "

    2. You may modify your copy or copies of the Program or any portion " "of it, thus forming a work based on the Program, and copy and " "distribute such modifications or work under the terms of Section 1 " "above, provided that you also meet all of these conditions: " "

    a. You must cause the modified files to carry prominent notices " "stating that you changed the files and the date of any change. " "

    b. You must cause any work that you distribute or publish, that in " "whole or in part contains or is derived from the Program or any " "part thereof, to be licensed as a whole at no charge to all third " "parties under the terms of this License. " "

    c. if the modified program normally reads commands interactively " "when run, you must cause it, when started running for such " "interactive use in the most ordinary way, to print or display an " "announcement including an appropriate copyright notice and a " "notice that there is no warranty (or else, saying that you provide " "a warranty) and that users may redistribute the program under " "these conditions, and telling the user how to view a copy of this " "License. (Exception: if the Program itself is interactive but " "does not normally print such an announcement, your work based on " "the Program is not required to print an announcement.) " "

    These requirements apply to the modified work as a whole. If " "identifiable sections of that work are not derived from the Program, " "and can be reasonably considered independent and separate works in " "themselves, then this License, and its terms, do not apply to those " "sections when you distribute them as separate works. But when you " "distribute the same sections as part of a whole which is a work based " "on the Program, the distribution of the whole must be on the terms of " "this License, whose permissions for other licensees extend to the " "entire whole, and thus to each and every part regardless of who wrote it. " "

    Thus, it is not the intent of this section to claim rights or contest " "your rights to work written entirely by you; rather, the intent is to " "exercise the right to control the distribution of derivative or " "collective works based on the Program. " "

    In addition, mere aggregation of another work not based on the Program " "with the Program (or with a work based on the Program) on a volume of " "a storage or distribution medium does not bring the other work under " "the scope of this License. " "

    3. You may copy and distribute the Program (or a work based on it, " "under Section 2) in object code or executable form under the terms of " "Sections 1 and 2 above provided that you also do one of the following: " "

    a. Accompany it with the complete corresponding machine-readable " "source code, which must be distributed under the terms of Sections " "1 and 2 above on a medium customarily used for software interchange; or, " "

    b. Accompany it with a written offer, valid for at least three " "years, to give any third party, for a charge no more than your " "cost of physically performing source distribution, a complete " "machine-readable copy of the corresponding source code, to be " "distributed under the terms of Sections 1 and 2 above on a medium " "customarily used for software interchange; or, " "

    c. Accompany it with the information you received as to the offer " "to distribute corresponding source code. (This alternative is " "allowed only for noncommercial distribution and only if you " "received the program in object code or executable form with such " "an offer, in accord with Subsection b above.) " "

    The source code for a work means the preferred form of the work for " "making modifications to it. For an executable work, complete source " "code means all the source code for all modules it contains, plus any " "associated interface definition files, plus the scripts used to " "control compilation and installation of the executable. However, as a " "special exception, the source code distributed need not include " "anything that is normally distributed (in either source or binary " "form) with the major components (compiler, kernel, and so on) of the " "operating system on which the executable runs, unless that component " "itself accompanies the executable. " "

    If distribution of executable or object code is made by offering " "access to copy from a designated place, then offering equivalent " "access to copy the source code from the same place counts as " "distribution of the source code, even though third parties are not " "compelled to copy the source along with the object code. " "

    4. You may not copy, modify, sublicense, or distribute the Program " "except as expressly provided under this License. Any attempt " "otherwise to copy, modify, sublicense or distribute the Program is " "void, and will automatically terminate your rights under this License. " "However, parties who have received copies, or rights, from you under " "this License will not have their licenses terminated so long as such " "parties remain in full compliance. " "

    5. You are not required to accept this License, since you have not " "signed it. However, nothing else grants you permission to modify or " "distribute the Program or its derivative works. These actions are " "prohibited by law if you do not accept this License. Therefore, by " "modifying or distributing the Program (or any work based on the " "Program), you indicate your acceptance of this License to do so, and " "all its terms and conditions for copying, distributing or modifying " "the Program or works based on it. " "

    6. Each time you redistribute the Program (or any work based on the " "Program), the recipient automatically receives a license from the " "original licensor to copy, distribute or modify the Program subject to " "these terms and conditions. You may not impose any further " "restrictions on the recipients' exercise of the rights granted herein. " "You are not responsible for enforcing compliance by third parties to " "this License. " "

    7. If, as a consequence of a court judgment or allegation of patent " "infringement or for any other reason (not limited to patent issues), " "conditions are imposed on you (whether by court order, agreement or " "otherwise) that contradict the conditions of this License, they do not " "excuse you from the conditions of this License. If you cannot " "distribute so as to satisfy simultaneously your obligations under this " "License and any other pertinent obligations, then as a consequence you " "may not distribute the Program at all. For example, if a patent " "license would not permit royalty-free redistribution of the Program by " "all those who receive copies directly or indirectly through you, then " "the only way you could satisfy both it and this License would be to " "refrain entirely from distribution of the Program. " "

    If any portion of this section is held invalid or unenforceable under " "any particular circumstance, the balance of the section is intended to " "apply and the section as a whole is intended to apply in other " "circumstances. " "

    It is not the purpose of this section to induce you to infringe any " "patents or other property right claims or to contest validity of any " "such claims; this section has the sole purpose of protecting the " "integrity of the free software distribution system, which is " "implemented by public license practices. Many people have made " "generous contributions to the wide range of software distributed " "through that system in reliance on consistent application of that " "system; it is up to the author/donor to decide if he or she is willing " "to distribute software through any other system and a licensee cannot " "impose that choice. " "

    This section is intended to make thoroughly clear what is believed to " "be a consequence of the rest of this License. " "

    8. If the distribution and/or use of the Program is restricted in " "certain countries either by patents or by copyrighted interfaces, the " "original copyright holder who places the Program under this License " "may add an explicit geographical distribution limitation excluding " "those countries, so that distribution is permitted only in or among " "countries not thus excluded. In such case, this License incorporates " "the limitation as if written in the body of this License. " "

    9. The Free Software Foundation may publish revised and/or new versions " "of the General Public License from time to time. Such new versions will " "be similar in spirit to the present version, but may differ in detail to " "address new problems or concerns. " "

    Each version is given a distinguishing version number. If the Program " "specifies a version number of this License which applies to it and \"any " "later version\", you have the option of following the terms and conditions " "either of that version or of any later version published by the Free " "Software Foundation. If the Program does not specify a version number of " "this License, you may choose any version ever published by the Free Software " "Foundation. " "

    10. If you wish to incorporate parts of the Program into other free " "programs whose distribution conditions are different, write to the author " "to ask for permission. For software which is copyrighted by the Free " "Software Foundation, write to the Free Software Foundation; we sometimes " "make exceptions for this. Our decision will be guided by the two goals " "of preserving the free status of all derivatives of our free software and " "of promoting the sharing and reuse of software generally. " "

    NO WARRANTY

    \n" "

    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY " "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN " "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES " "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED " "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS " "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE " "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, " "REPAIR OR CORRECTION. " "

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING " "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR " "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, " "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING " "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED " "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY " "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER " "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE " "POSSIBILITY OF SUCH DAMAGES. " "

    END OF TERMS AND CONDITIONS

    \n" ); group->end(); button = new Fl_Button(405, 445, 65, 25, "Close"); button->callback((Fl_Callback *)closeLicenseCB); // Show the window and wait... dialog->end(); dialog->show(); while (dialog->shown()) Fl::wait(); delete dialog; } // // 'closeLicenseCB()' - Close the license window. // static void closeLicenseCB(Fl_Widget *w) // I - Close button { if (w && w->window()) w->window()->hide(); } #endif // HAVE_LIBFLTK // // End of "$Id: license.cxx 1439 2005-10-28 20:32:59Z mike $". // htmldoc-1.8.27/htmldoc/image.cxx0100664000212600000240000012004010437363662015171 0ustar mikeuser/* * "$Id: image.cxx 1488 2006-05-31 19:00:02Z mike $" * * Image handling routines for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * gif_read_cmap() - Read the colormap from a GIF file... * gif_get_block() - Read a GIF data block... * gif_get_code() - Get a LZW code from the file... * gif_read_image() - Read a GIF image stream... * gif_read_lzw() - Read a byte from the LZW stream... * image_compare() - Compare two image filenames... * image_copy() - Copy image files to the destination directory... * image_flush_cache() - Flush the image cache... * image_getlist() - Get the list of images that are loaded. * image_load() - Load an image file from disk... * image_load_bmp() - Read a BMP image file. * image_load_gif() - Load a GIF image file... * image_load_jpeg() - Load a JPEG image file. * image_load_png() - Load a PNG image file. * image_need_mask() - Allocate memory for the image mask... * image_set_mask() - Set a bit in the image mask. * jpeg_error_handler() - Handle JPEG errors by not exiting. * read_word() - Read a 16-bit unsigned integer. * read_dword() - Read a 32-bit unsigned integer. * read_long() - Read a 32-bit signed integer. */ /* * Include necessary headers. */ #include "htmldoc.h" extern "C" { /* Workaround for JPEG header problems... */ #include /* JPEG/JFIF image definitions */ } #include /* Portable Network Graphics (PNG) definitions */ /* * GIF definitions... */ #define GIF_INTERLACE 0x40 #define GIF_COLORMAP 0x80 typedef uchar gif_cmap_t[256][3]; /* * BMP definitions... */ #ifndef BI_RGB # define BI_RGB 0 /* No compression - straight BGR data */ # define BI_RLE8 1 /* 8-bit run-length compression */ # define BI_RLE4 2 /* 4-bit run-length compression */ # define BI_BITFIELDS 3 /* RGB bitmap with RGB masks */ #endif /* !BI_RGB */ /* * Local globals... */ static int num_images = 0, /* Number of images in cache */ alloc_images = 0; /* Allocated images */ static image_t **images = NULL; /* Images in cache */ static int gif_eof = 0; /* Did we hit EOF? */ /* * Local functions... */ static int gif_read_cmap(FILE *fp, int ncolors, gif_cmap_t cmap, int *gray); static int gif_get_block(FILE *fp, uchar *buffer); static int gif_get_code (FILE *fp, int code_size, int first_time); static int gif_read_image(FILE *fp, image_t *img, gif_cmap_t cmap, int interlace, int transparent); static int gif_read_lzw(FILE *fp, int first_time, int input_code_size); static int image_compare(image_t **img1, image_t **img2); static int image_load_bmp(image_t *img, FILE *fp, int gray, int load_data); static int image_load_gif(image_t *img, FILE *fp, int gray, int load_data); static int image_load_jpeg(image_t *img, FILE *fp, int gray, int load_data); static int image_load_png(image_t *img, FILE *fp, int gray, int load_data); static void image_need_mask(image_t *img, int scaling = 1); static void image_set_mask(image_t *img, int x, int y, uchar alpha = 0); static void jpeg_error_handler(j_common_ptr); static int read_long(FILE *fp); static unsigned short read_word(FILE *fp); static unsigned int read_dword(FILE *fp); /* * 'gif_read_cmap()' - Read the colormap from a GIF file... */ static int /* O - 0 on success, -1 on error */ gif_read_cmap(FILE *fp, /* I - File to read from */ int ncolors, /* I - Number of colors */ gif_cmap_t cmap, /* IO - Colormap array */ int *gray) /* IO - 1 = grayscale */ { int i; /* Looping var */ /* * Read the colormap... */ if (fread(cmap, 3, ncolors, fp) < (size_t)ncolors) { progress_error(HD_ERROR_READ_ERROR, "Unable to read GIF colormap: %s", strerror(errno)); return (-1); } /* * Check to see if the colormap is a grayscale ramp... */ for (i = 0; i < ncolors; i ++) if (cmap[i][0] != cmap[i][1] || cmap[i][1] != cmap[i][2]) break; if (i == ncolors) { *gray = 1; return (0); } /* * If this needs to be a grayscale image, convert the RGB values to * luminance values... */ if (*gray) for (i = 0; i < ncolors; i ++) cmap[i][0] = (cmap[i][0] * 31 + cmap[i][1] * 61 + cmap[i][2] * 8) / 100; return (0); } /* * 'gif_get_block()' - Read a GIF data block... */ static int /* O - Number characters read */ gif_get_block(FILE *fp, /* I - File to read from */ uchar *buf) /* I - Input buffer */ { int count; /* Number of character to read */ /* * Read the count byte followed by the data from the file... */ if ((count = getc(fp)) == EOF) { gif_eof = 1; return (-1); } else if (count == 0) gif_eof = 1; else if (fread(buf, 1, count, fp) < (size_t)count) { progress_error(HD_ERROR_READ_ERROR, "Unable to read GIF block of %d bytes: %s", count, strerror(errno)); gif_eof = 1; return (-1); } else gif_eof = 0; return (count); } /* * 'gif_get_code()' - Get a LZW code from the file... */ static int /* O - LZW code */ gif_get_code(FILE *fp, /* I - File to read from */ int code_size, /* I - Size of code in bits */ int first_time) /* I - 1 = first time, 0 = not first time */ { unsigned i, j, /* Looping vars */ ret; /* Return value */ int count; /* Number of bytes read */ static uchar buf[280]; /* Input buffer */ static unsigned curbit, /* Current bit */ lastbit, /* Last bit in buffer */ done, /* Done with this buffer? */ last_byte; /* Last byte in buffer */ static unsigned bits[8] = /* Bit masks for codes */ { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; if (first_time) { /* * Just initialize the input buffer... */ curbit = 0; lastbit = 0; last_byte = 0; done = 0; return (0); } if ((curbit + code_size) >= lastbit) { /* * Don't have enough bits to hold the code... */ if (done) { progress_error(HD_ERROR_READ_ERROR, "Not enough data left to read GIF compression code."); return (-1); /* Sorry, no more... */ } /* * Move last two bytes to front of buffer... */ if (last_byte > 1) { buf[0] = buf[last_byte - 2]; buf[1] = buf[last_byte - 1]; last_byte = 2; } else if (last_byte == 1) { buf[0] = buf[last_byte - 1]; last_byte = 1; } /* * Read in another buffer... */ if ((count = gif_get_block (fp, buf + last_byte)) <= 0) { /* * Whoops, no more data! */ done = 1; return (-1); } /* * Update buffer state... */ curbit = (curbit - lastbit) + 8 * last_byte; last_byte += count; lastbit = last_byte * 8; } ret = 0; for (ret = 0, i = curbit + code_size - 1, j = code_size; j > 0; i --, j --) ret = (ret << 1) | ((buf[i / 8] & bits[i & 7]) != 0); curbit += code_size; return ret; } /* * 'gif_read_image()' - Read a GIF image stream... */ static int /* I - 0 = success, -1 = failure */ gif_read_image(FILE *fp, /* I - Input file */ image_t *img, /* I - Image pointer */ gif_cmap_t cmap, /* I - Colormap */ int interlace, /* I - Non-zero = interlaced image */ int transparent) /* I - Transparent color */ { uchar code_size, /* Code size */ *temp; /* Current pixel */ int xpos, /* Current X position */ ypos, /* Current Y position */ pass; /* Current pass */ int pixel; /* Current pixel */ static int xpasses[4] = { 8, 8, 4, 2 }, ypasses[5] = { 0, 4, 2, 1, 999999 }; xpos = 0; ypos = 0; pass = 0; code_size = getc(fp); if (gif_read_lzw(fp, 1, code_size) < 0) return (-1); temp = img->pixels; while ((pixel = gif_read_lzw(fp, 0, code_size)) >= 0) { temp[0] = cmap[pixel][0]; if (img->depth > 1) { temp[1] = cmap[pixel][1]; temp[2] = cmap[pixel][2]; } if (pixel == transparent) image_set_mask(img, xpos, ypos); xpos ++; temp += img->depth; if (xpos == img->width) { xpos = 0; if (interlace) { ypos += xpasses[pass]; temp += (xpasses[pass] - 1) * img->width * img->depth; if (ypos >= img->height) { pass ++; ypos = ypasses[pass]; temp = img->pixels + ypos * img->width * img->depth; } } else ypos ++; } if (ypos >= img->height) break; } return (0); } /* * 'gif_read_lzw()' - Read a byte from the LZW stream... */ static int /* I - Byte from stream */ gif_read_lzw(FILE *fp, /* I - File to read from */ int first_time, /* I - 1 = first time, 0 = not first time */ int input_code_size) /* I - Code size in bits */ { int i, /* Looping var */ code, /* Current code */ incode; /* Input code */ static short fresh = 0, /* 1 = empty buffers */ code_size, /* Current code size */ set_code_size, /* Initial code size set */ max_code, /* Maximum code used */ max_code_size, /* Maximum code size */ firstcode, /* First code read */ oldcode, /* Last code read */ clear_code, /* Clear code for LZW input */ end_code, /* End code for LZW input */ table[2][4096], /* String table */ stack[8192], /* Output stack */ *sp; /* Current stack pointer */ if (first_time) { /* * Setup LZW state... */ set_code_size = input_code_size; code_size = set_code_size + 1; clear_code = 1 << set_code_size; end_code = clear_code + 1; max_code_size = 2 * clear_code; max_code = clear_code + 2; /* * Initialize input buffers... */ gif_get_code(fp, 0, 1); /* * Wipe the decompressor table... */ fresh = 1; for (i = 0; i < clear_code; i ++) { table[0][i] = 0; table[1][i] = i; } for (; i < 4096; i ++) table[0][i] = table[1][0] = 0; sp = stack; return (0); } else if (fresh) { fresh = 0; do firstcode = oldcode = gif_get_code(fp, code_size, 0); while (firstcode == clear_code); return (firstcode); } if (sp > stack) return (*--sp); while ((code = gif_get_code (fp, code_size, 0)) >= 0) { if (code == clear_code) { for (i = 0; i < clear_code; i ++) { table[0][i] = 0; table[1][i] = i; } for (; i < 4096; i ++) table[0][i] = table[1][i] = 0; code_size = set_code_size + 1; max_code_size = 2 * clear_code; max_code = clear_code + 2; sp = stack; firstcode = oldcode = gif_get_code(fp, code_size, 0); return (firstcode); } else if (code == end_code) { uchar buf[260]; if (!gif_eof) while (gif_get_block(fp, buf) > 0); return (-2); } incode = code; if (code >= max_code) { *sp++ = firstcode; code = oldcode; } while (code >= clear_code) { *sp++ = table[1][code]; if (code == table[0][code]) return (255); code = table[0][code]; } *sp++ = firstcode = table[1][code]; code = max_code; if (code < 4096) { table[0][code] = oldcode; table[1][code] = firstcode; max_code ++; if (max_code >= max_code_size && max_code_size < 4096) { max_code_size *= 2; code_size ++; } } oldcode = incode; if (sp > stack) return (*--sp); } return (code); } /* * 'image_compare()' - Compare two image filenames... */ static int /* O - Result of comparison */ image_compare(image_t **img1, /* I - First image */ image_t **img2) /* I - Second image */ { #ifdef WIN32 return (strcasecmp((*img1)->filename, (*img2)->filename)); #else return (strcmp((*img1)->filename, (*img2)->filename)); #endif /* WIN32 */ } /* * 'image_copy()' - Copy image files to the destination directory... */ void image_copy(const char *src, /* I - Source file */ const char *realsrc, /* I - Real source file */ const char *destpath) /* I - Destination path */ { char dest[255]; /* Destination file */ FILE *in, *out; /* Input/output files */ uchar buffer[8192]; /* Data buffer */ int nbytes; /* Number of bytes in buffer */ if (!src || !realsrc || !destpath) return; /* * Figure out the destination filename... */ if (!strcmp(destpath, ".")) strlcpy(dest, file_basename(src), sizeof(dest)); else snprintf(dest, sizeof(dest), "%s/%s", destpath, file_basename(src)); if (!strcmp(dest, realsrc)) return; /* * Open files and copy... */ if ((in = fopen(realsrc, "rb")) == NULL) { progress_error(HD_ERROR_READ_ERROR, "Unable to open \"%s\" - %s", realsrc, strerror(errno)); return; } if ((out = fopen(dest, "wb")) == NULL) { progress_error(HD_ERROR_READ_ERROR, "Unable to create \"%s\" - %s", dest, strerror(errno)); fclose(in); return; } while ((nbytes = fread(buffer, 1, sizeof(buffer), in)) > 0) fwrite(buffer, 1, nbytes, out); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(out)); fclose(in); fclose(out); } /* * 'image_find()' - Find an image file in memory... */ image_t * /* O - Pointer to image */ image_find(const char *filename,/* I - Name of image file */ int load_data)/* I - 1 = load image data */ { image_t key, /* Search key... */ *keyptr, /* Pointer to search key... */ **match; /* Matching image */ /* * Range check... */ if (filename == NULL) return (NULL); if (filename[0] == '\0') /* Microsoft VC++ runtime bug workaround... */ return (NULL); /* * See if we've already loaded it... */ if (num_images > 0) { strlcpy(key.filename, filename, sizeof(key.filename)); keyptr = &key; match = (image_t **)bsearch(&keyptr, images, num_images, sizeof(image_t *), (int (*)(const void *, const void *))image_compare); if (match != NULL) { if (load_data && !(*match)->pixels) return (image_load((*match)->filename, (*match)->depth == 1, 1)); else return (*match); } } return (NULL); } /* * 'image_flush_cache()' - Flush the image cache... */ void image_flush_cache(void) { int i; /* Looping var */ /* * Free the memory used by each image... */ for (i = 0; i < num_images; i ++) { if (images[i]->mask) free(images[i]->mask); if (images[i]->pixels) free(images[i]->pixels); free(images[i]); } if (alloc_images) { free(images); alloc_images = 0; } num_images = 0; } /* * 'image_getlist()' - Get the list of images that are loaded. */ int /* O - Number of images in array */ image_getlist(image_t ***ptrs) /* O - Pointer to images array */ { *ptrs = images; return (num_images); } /* * 'image_load()' - Load an image file from disk... */ image_t * /* O - Pointer to image */ image_load(const char *filename,/* I - Name of image file */ int gray, /* I - 0 = color, 1 = grayscale */ int load_data)/* I - 1 = load image data, 0 = just info */ { #ifdef DEBUG int i; /* Looping var */ #endif // DEBUG FILE *fp; /* File pointer */ uchar header[16]; /* First 16 bytes of file */ image_t *img, /* New image buffer */ key, /* Search key... */ *keyptr, /* Pointer to search key... */ **match, /* Matching image */ **temp; /* Temporary array pointer */ int status; /* Status of load... */ const char *realname; /* Real filename */ /* * Range check... */ if (filename == NULL) return (NULL); if (filename[0] == '\0') /* Microsoft VC++ runtime bug workaround... */ return (NULL); DEBUG_printf(("image_load(filename=\"%s\", gray=%d, load_data=%d)\n", filename, gray, load_data)); DEBUG_printf(("Path = \"%s\"\n", Path)); /* * See if we've already loaded it... */ if (num_images > 0) { strlcpy(key.filename, filename, sizeof(key.filename)); keyptr = &key; match = (image_t **)bsearch(&keyptr, images, num_images, sizeof(image_t *), (int (*)(const void *, const void *))image_compare); if (match != NULL && (!load_data || (*match)->pixels)) { (*match)->use ++; return (*match); } } else match = NULL; /* * Figure out the file type... */ if ((realname = file_find(Path, filename)) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to find image file \"%s\"!", filename); return (NULL); } if ((fp = fopen(realname, "rb")) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open image file \"%s\" (%s) for reading!", filename, realname); return (NULL); } if (fread(header, 1, sizeof(header), fp) == 0) { progress_error(HD_ERROR_READ_ERROR, "Unable to read image file \"%s\"!", filename); fclose(fp); return (NULL); } #ifdef DEBUG printf("Header for \"%s\" (%s): \"", filename, realname); for (i = 0; i < sizeof(header); i ++) if (header[i] < ' ' || header[i] >= 127) printf("\\x%02X", header[i]); else putchar(header[i]); puts("\"\n"); printf("match = %p\n", match); #endif // DEBUG rewind(fp); // See if the images array needs to be resized... if (!match) { if (num_images >= alloc_images) { // Yes... alloc_images += ALLOC_FILES; if (num_images == 0) temp = (image_t **)malloc(sizeof(image_t *) * alloc_images); else temp = (image_t **)realloc(images, sizeof(image_t *) * alloc_images); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d images - %s", alloc_images, strerror(errno)); fclose(fp); return (NULL); } images = temp; } // Allocate memory... img = (image_t *)calloc(sizeof(image_t), 1); if (img == NULL) { progress_error(HD_ERROR_READ_ERROR, "Unable to allocate memory for \"%s\"", filename); fclose(fp); return (NULL); } images[num_images] = img; strlcpy(img->filename, filename, sizeof(img->filename)); img->use = 1; } else img = *match; // Load the image as appropriate... if (memcmp(header, "GIF87a", 6) == 0 || memcmp(header, "GIF89a", 6) == 0) status = image_load_gif(img, fp, gray, load_data); else if (memcmp(header, "BM", 2) == 0) status = image_load_bmp(img, fp, gray, load_data); else if (memcmp(header, "\211PNG", 4) == 0) status = image_load_png(img, fp, gray, load_data); else if (memcmp(header, "\377\330\377", 3) == 0) status = image_load_jpeg(img, fp, gray, load_data); else { progress_error(HD_ERROR_BAD_FORMAT, "Unknown image file format for \"%s\"!", file_rlookup(filename)); fclose(fp); free(img); return (NULL); } fclose(fp); if (status) { progress_error(HD_ERROR_READ_ERROR, "Unable to load image file \"%s\"!", file_rlookup(filename)); if (!match) free(img); return (NULL); } if (!match) { num_images ++; if (num_images > 1) qsort(images, num_images, sizeof(image_t *), (int (*)(const void *, const void *))image_compare); } return (img); } /* * 'image_load_bmp()' - Read a BMP image file. */ static int /* O - 0 = success, -1 = fail */ image_load_bmp(image_t *img, /* I - Image to load into */ FILE *fp, /* I - File to read from */ int gray, /* I - Grayscale image? */ int load_data)/* I - 1 = load image data, 0 = just info */ { int info_size, /* Size of info header */ depth, /* Depth of image (bits) */ compression, /* Type of compression */ colors_used, /* Number of colors used */ x, y, /* Looping vars */ color, /* Color of RLE pixel */ count, /* Number of times to repeat */ temp, /* Temporary color */ align; /* Alignment bytes */ uchar bit, /* Bit in image */ byte; /* Byte in image */ uchar *ptr; /* Pointer into pixels */ uchar colormap[256][4];/* Colormap */ // Get the header... getc(fp); /* Skip "BM" sync chars */ getc(fp); read_dword(fp); /* Skip size */ read_word(fp); /* Skip reserved stuff */ read_word(fp); read_dword(fp); // Then the bitmap information... info_size = read_dword(fp); img->width = read_long(fp); img->height = read_long(fp); read_word(fp); depth = read_word(fp); compression = read_dword(fp); read_dword(fp); read_long(fp); read_long(fp); colors_used = read_dword(fp); read_dword(fp); if (info_size > 40) for (info_size -= 40; info_size > 0; info_size --) getc(fp); // Get colormap... if (colors_used == 0 && depth <= 8) colors_used = 1 << depth; fread(colormap, colors_used, 4, fp); // Setup image and buffers... img->depth = gray ? 1 : 3; // If this image is indexed and we are writing an encrypted PDF file, bump the use count so // we create an image object (Acrobat 6 bug workaround) if (depth <= 8 && Encryption) img->use ++; // Return now if we only need the dimensions... if (!load_data) return (0); img->pixels = (uchar *)malloc(img->width * img->height * img->depth); if (img->pixels == NULL) return (-1); if (gray && depth <= 8) { // Convert colormap to grayscale... for (color = colors_used - 1; color >= 0; color --) colormap[color][0] = (colormap[color][2] * 31 + colormap[color][1] * 61 + colormap[color][0] * 8) / 100; } // Read the image data... color = 0; count = 0; align = 0; byte = 0; temp = 0; for (y = img->height - 1; y >= 0; y --) { ptr = img->pixels + y * img->width * img->depth; switch (depth) { case 1 : /* Bitmap */ for (x = img->width, bit = 128; x > 0; x --) { if (bit == 128) byte = getc(fp); if (byte & bit) { if (!gray) { *ptr++ = colormap[1][2]; *ptr++ = colormap[1][1]; } *ptr++ = colormap[1][0]; } else { if (!gray) { *ptr++ = colormap[0][2]; *ptr++ = colormap[0][1]; } *ptr++ = colormap[0][0]; } if (bit > 1) bit >>= 1; else bit = 128; } /* * Read remaining bytes to align to 32 bits... */ for (temp = (img->width + 7) / 8; temp & 3; temp ++) getc(fp); break; case 4 : /* 16-color */ for (x = img->width, bit = 0xf0; x > 0; x --) { /* * Get a new count as needed... */ if (compression != BI_RLE4 && count == 0) { count = 2; color = -1; } if (count == 0) { while (align > 0) { align --; getc(fp); } if ((count = getc(fp)) == 0) { if ((count = getc(fp)) == 0) { /* * End of line... */ x ++; continue; } else if (count == 1) { /* * End of image... */ break; } else if (count == 2) { /* * Delta... */ count = getc(fp) * getc(fp) * img->width; color = 0; } else { /* * Absolute... */ color = -1; align = ((4 - (count & 3)) / 2) & 1; } } else color = getc(fp); } /* * Get a new color as needed... */ count --; if (bit == 0xf0) { if (color < 0) temp = getc(fp); else temp = color; /* * Copy the color value... */ if (!gray) { *ptr++ = colormap[temp >> 4][2]; *ptr++ = colormap[temp >> 4][1]; } *ptr++ = colormap[temp >> 4][0]; bit = 0x0f; } else { /* * Copy the color value... */ if (!gray) { *ptr++ = colormap[temp & 15][2]; *ptr++ = colormap[temp & 15][1]; } *ptr++ = colormap[temp & 15][0]; bit = 0xf0; } } break; case 8 : /* 256-color */ for (x = img->width; x > 0; x --) { /* * Get a new count as needed... */ if (compression != BI_RLE8) { count = 1; color = -1; } if (count == 0) { while (align > 0) { align --; getc(fp); } if ((count = getc(fp)) == 0) { if ((count = getc(fp)) == 0) { /* * End of line... */ x ++; continue; } else if (count == 1) { /* * End of image... */ break; } else if (count == 2) { /* * Delta... */ count = getc(fp) * getc(fp) * img->width; color = 0; } else { /* * Absolute... */ color = -1; align = (2 - (count & 1)) & 1; } } else color = getc(fp); } /* * Get a new color as needed... */ if (color < 0) temp = getc(fp); else temp = color; count --; /* * Copy the color value... */ if (!gray) { *ptr++ = colormap[temp][2]; *ptr++ = colormap[temp][1]; } *ptr++ = colormap[temp][0]; } break; case 24 : /* 24-bit RGB */ if (gray) { for (x = img->width; x > 0; x --) { temp = getc(fp) * 8; temp += getc(fp) * 61; temp += getc(fp) * 31; *ptr++ = temp / 100; } } else { for (x = img->width; x > 0; x --, ptr += 3) { ptr[2] = getc(fp); ptr[1] = getc(fp); ptr[0] = getc(fp); } } /* * Read remaining bytes to align to 32 bits... */ for (temp = img->width * 3; temp & 3; temp ++) getc(fp); break; } } return (0); } /* * 'image_load_gif()' - Load a GIF image file... */ static int /* O - 0 = success, -1 = fail */ image_load_gif(image_t *img, /* I - Image pointer */ FILE *fp, /* I - File to load from */ int gray, /* I - 0 = color, 1 = grayscale */ int load_data)/* I - 1 = load image data, 0 = just info */ { uchar buf[1024]; /* Input buffer */ gif_cmap_t cmap; /* Colormap */ int ncolors, /* Bits per pixel */ transparent; /* Transparent color index */ /* * Read the header; we already know it is a GIF file... */ fread(buf, 13, 1, fp); img->width = (buf[7] << 8) | buf[6]; img->height = (buf[9] << 8) | buf[8]; ncolors = 2 << (buf[10] & 0x07); // If we are writing an encrypted PDF file, bump the use count so we create // an image object (Acrobat 6 bug workaround) if (Encryption) img->use ++; if (buf[10] & GIF_COLORMAP) if (gif_read_cmap(fp, ncolors, cmap, &gray)) return (-1); transparent = -1; while (1) { switch (getc(fp)) { case ';' : /* End of image */ return (-1); /* Early end of file */ case '!' : /* Extension record */ buf[0] = getc(fp); if (buf[0] == 0xf9) /* Graphic Control Extension */ { gif_get_block(fp, buf); if (buf[0] & 1) /* Get transparent color index */ transparent = buf[3]; } while (gif_get_block(fp, buf) != 0); break; case ',' : /* Image data */ fread(buf, 9, 1, fp); if (buf[8] & GIF_COLORMAP) { ncolors = 2 << (buf[8] & 0x07); if (gif_read_cmap(fp, ncolors, cmap, &gray)) return (-1); } if (transparent >= 0) { /* * Map transparent color to background color... */ if (BodyColor[0]) { float rgb[3]; /* RGB color */ get_color((uchar *)BodyColor, rgb); cmap[transparent][0] = (uchar)(rgb[0] * 255.0f + 0.5f); cmap[transparent][1] = (uchar)(rgb[1] * 255.0f + 0.5f); cmap[transparent][2] = (uchar)(rgb[2] * 255.0f + 0.5f); } else { cmap[transparent][0] = 255; cmap[transparent][1] = 255; cmap[transparent][2] = 255; } /* * Allocate a mask image... */ image_need_mask(img); } img->width = (buf[5] << 8) | buf[4]; img->height = (buf[7] << 8) | buf[6]; img->depth = gray ? 1 : 3; if (!load_data) return (0); img->pixels = (uchar *)malloc(img->width * img->height * img->depth); if (img->pixels == NULL) return (-1); return (gif_read_image(fp, img, cmap, buf[8] & GIF_INTERLACE, transparent)); } } } /* * 'image_load_jpeg()' - Load a JPEG image file. */ static int /* O - 0 = success, -1 = fail */ image_load_jpeg(image_t *img, /* I - Image pointer */ FILE *fp, /* I - File to load from */ int gray, /* I - 0 = color, 1 = grayscale */ int load_data)/* I - 1 = load image data, 0 = just info */ { struct jpeg_decompress_struct cinfo; /* Decompressor info */ struct jpeg_error_mgr jerr; /* Error handler info */ JSAMPROW row; /* Sample row pointer */ jpeg_std_error(&jerr); jerr.error_exit = jpeg_error_handler; cinfo.err = &jerr; jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, 1); cinfo.quantize_colors = 0; if (gray || cinfo.num_components == 1) { cinfo.out_color_space = JCS_GRAYSCALE; cinfo.out_color_components = 1; cinfo.output_components = 1; } else if (cinfo.num_components != 3) { jpeg_destroy_decompress(&cinfo); progress_error(HD_ERROR_BAD_FORMAT, "CMYK JPEG files are not supported! (%s)", file_rlookup(img->filename)); return (-1); } else { cinfo.out_color_space = JCS_RGB; cinfo.out_color_components = 3; cinfo.output_components = 3; } jpeg_calc_output_dimensions(&cinfo); img->width = cinfo.output_width; img->height = cinfo.output_height; img->depth = cinfo.output_components; if (!load_data) { jpeg_destroy_decompress(&cinfo); return (0); } img->pixels = (uchar *)malloc(img->width * img->height * img->depth); if (img->pixels == NULL) { jpeg_destroy_decompress(&cinfo); return (-1); } jpeg_start_decompress(&cinfo); while (cinfo.output_scanline < cinfo.output_height) { row = (JSAMPROW)(img->pixels + cinfo.output_scanline * cinfo.output_width * cinfo.output_components); jpeg_read_scanlines(&cinfo, &row, (JDIMENSION)1); } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); return (0); } /* * 'image_load_png()' - Load a PNG image file. */ static int /* O - 0 = success, -1 = fail */ image_load_png(image_t *img, /* I - Image pointer */ FILE *fp, /* I - File to read from */ int gray, /* I - 0 = color, 1 = grayscale */ int load_data)/* I - 1 = load image data, 0 = just info */ { int i, j; /* Looping vars */ png_structp pp; /* PNG read pointer */ png_infop info; /* PNG info pointers */ int depth; /* Input image depth */ png_bytep *rows; /* PNG row pointers */ uchar *inptr, /* Input pixels */ *outptr; /* Output pixels */ /* * Setup the PNG data structures... */ pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!pp) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for PNG file: %s", strerror(errno)); return (-1); } info = png_create_info_struct(pp); if (!info) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for PNG info: %s", strerror(errno)); png_destroy_read_struct(&pp, NULL, NULL); return (-1); } rows = NULL; if (setjmp(pp->jmpbuf)) { progress_error(HD_ERROR_BAD_FORMAT, "PNG file contains errors!"); png_destroy_read_struct(&pp, &info, NULL); if (img != NULL && img->pixels != NULL) free(img->pixels); if (rows != NULL) free(rows); return (-1); } /* * Initialize the PNG read "engine"... */ png_init_io(pp, fp); /* * Get the image dimensions and convert to grayscale or RGB... */ png_read_info(pp, info); if (info->color_type & PNG_COLOR_MASK_PALETTE) { png_set_expand(pp); // If we are writing an encrypted PDF file, bump the use count so we create // an image object (Acrobat 6 bug workaround) if (Encryption) img->use ++; } else if (info->bit_depth < 8) { png_set_packing(pp); png_set_expand(pp); } else if (info->bit_depth == 16) png_set_strip_16(pp); if (info->color_type & PNG_COLOR_MASK_COLOR) { depth = 3; img->depth = gray ? 1 : 3; } else { depth = 1; img->depth = 1; } img->width = info->width; img->height = info->height; if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans) { if ((PSLevel == 0 && PDFVersion >= 14) || PSLevel == 3) image_need_mask(img, 8); else if (PSLevel == 0 && PDFVersion == 13) image_need_mask(img, 2); else image_need_mask(img); depth ++; } #ifdef DEBUG printf("color_type=0x%04x, depth=%d, img->width=%d, img->height=%d, img->depth=%d\n", info->color_type, depth, img->width, img->height, img->depth); if (info->color_type & PNG_COLOR_MASK_COLOR) puts(" COLOR"); else puts(" GRAYSCALE"); if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans) puts(" ALPHA"); if (info->color_type & PNG_COLOR_MASK_PALETTE) puts(" PALETTE"); #endif // DEBUG if (!load_data) { png_destroy_read_struct(&pp, &info, NULL); return (0); } img->pixels = (uchar *)malloc(img->width * img->height * depth); /* * Allocate pointers... */ rows = (png_bytep *)calloc(info->height, sizeof(png_bytep)); for (i = 0; i < (int)info->height; i ++) rows[i] = img->pixels + i * img->width * depth; /* * Read the image, handling interlacing as needed... */ for (i = png_set_interlace_handling(pp); i > 0; i --) png_read_rows(pp, rows, NULL, img->height); /* * Generate the alpha mask as necessary... */ if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans) { #ifdef DEBUG for (inptr = img->pixels, i = 0; i < img->height; i ++) { for (j = 0; j < img->width; j ++, inptr += depth) switch (depth) { case 2 : printf(" %02X%02X", inptr[0], inptr[1]); break; case 4 : printf(" %02X%02X%02X%02X", inptr[0], inptr[1], inptr[2], inptr[3]); break; } putchar('\n'); } #endif // DEBUG for (inptr = img->pixels + depth - 1, i = 0; i < img->height; i ++) for (j = 0; j < img->width; j ++, inptr += depth) image_set_mask(img, j, i, *inptr); } /* * Reformat the data as necessary for the reader... */ if (gray && info->color_type & PNG_COLOR_MASK_COLOR) { /* * Greyscale output needed... */ for (inptr = img->pixels, outptr = img->pixels, i = img->width * img->height; i > 0; inptr += depth, outptr ++, i --) *outptr = (31 * inptr[0] + 61 * inptr[1] + 8 * inptr[2]) / 100; } else if (img->depth != depth) { /* * Remove alpha from final array... */ if (depth == 4) { for (inptr = img->pixels, outptr = img->pixels, i = img->width * img->height; i > 0; inptr ++, i --) { *outptr++ = *inptr++; *outptr++ = *inptr++; *outptr++ = *inptr++; } } else { for (inptr = img->pixels, outptr = img->pixels, i = img->width * img->height; i > 0; inptr ++, i --) *outptr++ = *inptr++; } } /* * Free memory and return... */ free(rows); png_read_end(pp, info); png_destroy_read_struct(&pp, &info, NULL); return (0); } /* * 'image_need_mask()' - Allocate memory for the image mask... */ static void image_need_mask(image_t *img, /* I - Image to add mask to */ int scaling)/* I - Scaling for mask image */ { int size; /* Byte size of mask image */ if (img == NULL || img->mask != NULL) return; /* * Figure out the size of the mask image, and then allocate and set all the * bits needed... */ img->maskscale = scaling; if (scaling == 8) { // Alpha image img->maskwidth = img->width; size = img->width * img->height; } else { // Alpha mask img->maskwidth = (img->width * scaling + 7) / 8; size = img->maskwidth * img->height * scaling; } img->mask = (uchar *)calloc(size, 1); } /* * 'image_set_mask()' - Set a bit in the image mask. */ static void image_set_mask(image_t *img, /* I - Image to operate on */ int x, /* I - X coordinate */ int y, /* I - Y coordinate */ uchar alpha) /* I - Alpha value */ { int i, j; /* Looping vars */ uchar *maskptr; /* Pointer into mask image */ static uchar masks[8] = /* Masks for each bit */ { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; static uchar dither[4][4] = // Simple 4x4 clustered-dot dither { { 0, 2, 15, 6 }, { 4, 12, 9, 11 }, { 14, 7, 1, 3 }, { 8, 10, 5, 13 } }; if (img == NULL || img->mask == NULL || x < 0 || x >= img->width || y < 0 || y > img->height) return; if (img->maskscale == 8) { // Store the alpha value directly... if (PSLevel) img->mask[y * img->maskwidth + x] = 255 - alpha; else img->mask[y * img->maskwidth + x] = alpha; } else { // Store an alpha mask... x *= img->maskscale; y *= img->maskscale; alpha >>= 4; for (i = 0; i < img->maskscale; i ++, y ++, x -= img->maskscale) for (j = 0; j < img->maskscale; j ++, x ++) { maskptr = img->mask + y * img->maskwidth + x / 8; if (alpha <= dither[x & 3][y & 3]) *maskptr |= masks[x & 7]; } } } /* * 'image_unload()' - Unload an image from memory. */ void image_unload(image_t *img) // I - Image { if (!img) return; if (!img->use || !img->pixels) return; if (img->obj) img->use = 0; else img->use --; if (img->use) return; free(img->pixels); img->pixels = NULL; } /* * 'jpeg_error_handler()' - Handle JPEG errors by not exiting. */ static void jpeg_error_handler(j_common_ptr) { return; } /* * 'read_word()' - Read a 16-bit unsigned integer. */ static unsigned short /* O - 16-bit unsigned integer */ read_word(FILE *fp) /* I - File to read from */ { unsigned char b0, b1; /* Bytes from file */ b0 = getc(fp); b1 = getc(fp); return ((b1 << 8) | b0); } /* * 'read_dword()' - Read a 32-bit unsigned integer. */ static unsigned int /* O - 32-bit unsigned integer */ read_dword(FILE *fp) /* I - File to read from */ { unsigned char b0, b1, b2, b3; /* Bytes from file */ b0 = getc(fp); b1 = getc(fp); b2 = getc(fp); b3 = getc(fp); return ((((((b3 << 8) | b2) << 8) | b1) << 8) | b0); } /* * 'read_long()' - Read a 32-bit signed integer. */ static int /* O - 32-bit signed integer */ read_long(FILE *fp) /* I - File to read from */ { unsigned char b0, b1, b2, b3; /* Bytes from file */ b0 = getc(fp); b1 = getc(fp); b2 = getc(fp); b3 = getc(fp); return ((int)(((((b3 << 8) | b2) << 8) | b1) << 8) | b0); } /* * End of "$Id: image.cxx 1488 2006-05-31 19:00:02Z mike $". */ htmldoc-1.8.27/htmldoc/snprintf.c0100664000212600000240000001631510232770600015366 0ustar mikeuser/* * "$Id: snprintf.c 1397 2005-04-24 19:20:32Z mike $" * * (v)snprintf functions for HTMLDOC. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * hd_vsnprintf() - Format a string into a fixed size buffer. * hd_snprintf() - Format a string into a fixed size buffer. */ /* * Include necessary headers... */ #include "hdstring.h" #ifndef HAVE_VSNPRINTF /* * 'hd_vsnprintf()' - Format a string into a fixed size buffer. */ int /* O - Number of bytes formatted */ hd_vsnprintf(char *buffer, /* O - Output buffer */ size_t bufsize, /* O - Size of output buffer */ const char *format, /* I - printf-style format string */ va_list ap) /* I - Pointer to additional arguments */ { char *bufptr, /* Pointer to position in buffer */ *bufend, /* Pointer to end of buffer */ sign, /* Sign of format width */ size, /* Size character (h, l, L) */ type; /* Format type character */ const char *bufformat; /* Start of format */ int width, /* Width of field */ prec; /* Number of characters of precision */ char tformat[100], /* Temporary format string for sprintf() */ temp[1024]; /* Buffer for formatted numbers */ char *s; /* Pointer to string */ int slen; /* Length of string */ int bytes; /* Total number of bytes needed */ /* * Loop through the format string, formatting as needed... */ bufptr = buffer; bufend = buffer + bufsize - 1; bytes = 0; while (*format) { if (*format == '%') { bufformat = format; format ++; if (*format == '%') { *bufptr++ = *format++; continue; } else if (strchr(" -+#\'", *format)) sign = *format++; else sign = 0; width = 0; while (isdigit(*format)) width = width * 10 + *format++ - '0'; if (*format == '.') { format ++; prec = 0; while (isdigit(*format)) prec = prec * 10 + *format++ - '0'; } else prec = -1; if (*format == 'l' && format[1] == 'l') { size = 'L'; format += 2; } else if (*format == 'h' || *format == 'l' || *format == 'L') size = *format++; if (!*format) break; type = *format++; switch (type) { case 'E' : /* Floating point formats */ case 'G' : case 'e' : case 'f' : case 'g' : if ((format - bufformat + 1) > sizeof(tformat) || (width + 2) > sizeof(temp)) break; strncpy(tformat, bufformat, format - bufformat); tformat[format - bufformat] = '\0'; sprintf(temp, tformat, va_arg(ap, double)); bytes += strlen(temp); if (bufptr) { if ((bufptr + strlen(temp)) > bufend) { strncpy(bufptr, temp, bufend - bufptr); bufptr = bufend; break; } else { strcpy(bufptr, temp); bufptr += strlen(temp); } } break; case 'B' : /* Integer formats */ case 'X' : case 'b' : case 'd' : case 'i' : case 'o' : case 'u' : case 'x' : if ((format - bufformat + 1) > sizeof(tformat) || (width + 2) > sizeof(temp)) break; strncpy(tformat, bufformat, format - bufformat); tformat[format - bufformat] = '\0'; sprintf(temp, tformat, va_arg(ap, int)); bytes += strlen(temp); if (bufptr) { if ((bufptr + strlen(temp)) > bufend) { strncpy(bufptr, temp, bufend - bufptr); bufptr = bufend; break; } else { strcpy(bufptr, temp); bufptr += strlen(temp); } } break; case 'p' : /* Pointer value */ if ((format - bufformat + 1) > sizeof(tformat) || (width + 2) > sizeof(temp)) break; strncpy(tformat, bufformat, format - bufformat); tformat[format - bufformat] = '\0'; sprintf(temp, tformat, va_arg(ap, void *)); bytes += strlen(temp); if (bufptr) { if ((bufptr + strlen(temp)) > bufend) { strncpy(bufptr, temp, bufend - bufptr); bufptr = bufend; break; } else { strcpy(bufptr, temp); bufptr += strlen(temp); } } break; case 'c' : /* Character or character array */ bytes += width; if (bufptr) { if (width <= 1) *bufptr++ = va_arg(ap, int); else { if ((bufptr + width) > bufend) width = bufend - bufptr; memcpy(bufptr, va_arg(ap, char *), width); bufptr += width; } } break; case 's' : /* String */ if ((s = va_arg(ap, char *)) == NULL) s = "(null)"; slen = strlen(s); if (slen > width && prec != width) width = slen; bytes += width; if (bufptr) { if ((bufptr + width) > bufend) width = bufend - bufptr; if (slen > width) slen = width; if (sign == '-') { strncpy(bufptr, s, slen); memset(bufptr + slen, ' ', width - slen); } else { memset(bufptr, ' ', width - slen); strncpy(bufptr + width - slen, s, slen); } bufptr += width; } break; case 'n' : /* Output number of chars so far */ if ((format - bufformat + 1) > sizeof(tformat) || (width + 2) > sizeof(temp)) break; strncpy(tformat, bufformat, format - bufformat); tformat[format - bufformat] = '\0'; sprintf(temp, tformat, va_arg(ap, int)); bytes += strlen(temp); if (bufptr) { if ((bufptr + strlen(temp)) > bufend) { strncpy(bufptr, temp, bufend - bufptr); bufptr = bufend; break; } else { strcpy(bufptr, temp); bufptr += strlen(temp); } } break; } } else { bytes ++; if (bufptr && bufptr < bufend) *bufptr++ = *format++; } } /* * Nul-terminate the string and return the number of characters needed. */ *bufptr = '\0'; return (bytes); } #endif /* !HAVE_VSNPRINT */ #ifndef HAVE_SNPRINTF /* * 'hd_snprintf()' - Format a string into a fixed size buffer. */ int /* O - Number of bytes formatted */ hd_snprintf(char *buffer, /* O - Output buffer */ size_t bufsize, /* O - Size of output buffer */ const char *format, /* I - printf-style format string */ ...) /* I - Additional arguments as needed */ { int bytes; /* Number of bytes formatted */ va_list ap; /* Pointer to additional arguments */ va_start(ap, format); bytes = vsnprintf(buffer, bufsize, format, ap); va_end(ap); return (bytes); } #endif /* !HAVE_SNPRINTF */ /* * End of "$Id: snprintf.c 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/string.c0100664000212600000240000001120710232770600015024 0ustar mikeuser/* * "$Id: string.c 1397 2005-04-24 19:20:32Z mike $" * * String functions for HTMLDOC. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: cups-info@cups.org * WWW: http://www.cups.org * * This file is subject to the Apple OS-Developed Software exception. * * Contents: * * hd_strcpy() - Copy a string allowing for overlapping strings. * hd_strdup() - Duplicate a string. * hd_strcasecmp() - Do a case-insensitive comparison. * hd_strncasecmp() - Do a case-insensitive comparison on up to N chars. * hd_strlcat() - Safely concatenate two strings. * hd_strlcpy() - Safely copy two strings. */ /* * Include necessary headers... */ #include "hdstring.h" /* * 'hd_strcpy()' - Copy a string allowing for overlapping strings. */ void hd_strcpy(char *dst, /* I - Destination string */ const char *src) /* I - Source string */ { while (*src) *dst++ = *src++; *dst = '\0'; } /* * 'hd_strdup()' - Duplicate a string. */ #ifndef HAVE_STRDUP char * /* O - New string pointer */ hd_strdup(const char *s) /* I - String to duplicate */ { char *t; /* New string pointer */ if (s == NULL) return (NULL); if ((t = malloc(strlen(s) + 1)) == NULL) return (NULL); return (strcpy(t, s)); } #endif /* !HAVE_STRDUP */ /* * 'hd_strcasecmp()' - Do a case-insensitive comparison. */ #ifndef HAVE_STRCASECMP int /* O - Result of comparison (-1, 0, or 1) */ hd_strcasecmp(const char *s, /* I - First string */ const char *t) /* I - Second string */ { while (*s != '\0' && *t != '\0') { if (tolower(*s) < tolower(*t)) return (-1); else if (tolower(*s) > tolower(*t)) return (1); s ++; t ++; } if (*s == '\0' && *t == '\0') return (0); else if (*s != '\0') return (1); else return (-1); } #endif /* !HAVE_STRCASECMP */ /* * 'hd_strncasecmp()' - Do a case-insensitive comparison on up to N chars. */ #ifndef HAVE_STRNCASECMP int /* O - Result of comparison (-1, 0, or 1) */ hd_strncasecmp(const char *s, /* I - First string */ const char *t, /* I - Second string */ size_t n) /* I - Maximum number of characters to compare */ { while (*s != '\0' && *t != '\0' && n > 0) { if (tolower(*s) < tolower(*t)) return (-1); else if (tolower(*s) > tolower(*t)) return (1); s ++; t ++; n --; } if (n == 0) return (0); else if (*s == '\0' && *t == '\0') return (0); else if (*s != '\0') return (1); else return (-1); } #endif /* !HAVE_STRNCASECMP */ #ifndef HAVE_STRLCAT /* * 'hd_strlcat()' - Safely concatenate two strings. */ size_t /* O - Length of string */ hd_strlcat(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ size_t dstlen; /* Length of destination string */ /* * Figure out how much room is left... */ dstlen = strlen(dst); size -= dstlen + 1; if (!size) return (dstlen); /* No room, return immediately... */ /* * Figure out how much room is needed... */ srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memcpy(dst + dstlen, src, srclen); dst[dstlen + srclen] = '\0'; return (dstlen + srclen); } #endif /* !HAVE_STRLCAT */ #ifndef HAVE_STRLCPY /* * 'hd_strlcpy()' - Safely copy two strings. */ size_t /* O - Length of string */ hd_strlcpy(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ /* * Figure out how much room is needed... */ size --; srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memcpy(dst, src, srclen); dst[srclen] = '\0'; return (srclen); } #endif /* !HAVE_STRLCPY */ /* * End of "$Id: string.c 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/progress.h0100664000212600000240000000352110232770600015367 0ustar mikeuser/* * "$Id: progress.h 1397 2005-04-24 19:20:32Z mike $" * * Progress function definitions for HTMLDOC, a HTML document * processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _PROGRESS_H_ # define _PROGRESS_H_ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Error codes (in addition to the HTTP status codes...) */ typedef enum { HD_ERROR_NONE = 0, HD_ERROR_NO_FILES, HD_ERROR_NO_PAGES, HD_ERROR_TOO_MANY_CHAPTERS, HD_ERROR_OUT_OF_MEMORY, HD_ERROR_FILE_NOT_FOUND, HD_ERROR_BAD_COMMENT, HD_ERROR_BAD_FORMAT, HD_ERROR_DELETE_ERROR, HD_ERROR_INTERNAL_ERROR, HD_ERROR_NETWORK_ERROR, HD_ERROR_READ_ERROR, HD_ERROR_WRITE_ERROR, HD_ERROR_HTML_ERROR, HD_ERROR_CONTENT_TOO_LARGE, HD_ERROR_UNRESOLVED_LINK, HD_ERROR_BAD_HF_STRING, HD_ERROR_HTTPBASE = 100 } HDerror; /* * Prototypes... */ extern void progress_error(HDerror error, const char *format, ...); extern void progress_hide(void); extern void progress_show(const char *format, ...); extern void progress_update(int percent); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_PROGRESS_H_ */ /* * End of "$Id: progress.h 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/types.h0100664000212600000240000000177010232770600014673 0ustar mikeuser/* * "$Id: types.h 1397 2005-04-24 19:20:32Z mike $" * * Common data types for HTMLDOC, an HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _TYPES_H_ # define _TYPES_H_ # include "config.h" typedef unsigned char uchar; #endif /* !_TYPES_H_ */ /* * End of "$Id: types.h 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/htmldoc.cxx0100664000212600000240000022055510412753240015541 0ustar mikeuser/* * "$Id: htmldoc.cxx 1480 2006-03-30 13:01:20Z mike $" * * Main entry for HTMLDOC, a HTML document processing program. * * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * main() - Main entry for HTMLDOC. * prefs_getrc() - Get the rc file for preferences... * prefs_load() - Load HTMLDOC preferences... * prefs_save() - Save HTMLDOC preferences... * prefs_set_paths() - Set HTMLDOC data/help paths... * compare_strings() - Compare two command-line strings. * load_book() - Load a book file... * parse_options() - Parse options from a book file... * read_file() - Read a file into the current document. * set_permissions() - Set the PDF permission bits... * term_handler() - Handle CTRL-C or kill signals... * usage() - Show program version and command-line options. */ /* * Include necessary headers. */ #define _HTMLDOC_CXX_ #include "htmldoc.h" #include "http.h" #include #include #ifdef HAVE_LOCALE_H # include #endif // HAVE_LOCALE_H #ifdef WIN32 # include # include #else # include # include # include #endif // WIN32 #ifdef __EMX__ extern "C" { const char *__XOS2RedirRoot(const char *); } #endif /* * Local types... */ typedef int (*exportfunc_t)(tree_t *, tree_t *); /* * Local functions... */ static int compare_strings(const char *s, const char *t, int tmin); static double get_seconds(void); static int load_book(const char *filename, tree_t **document, exportfunc_t *exportfunc, int set_nolocal = 0); static void parse_options(const char *line, exportfunc_t *exportfunc); static int read_file(const char *filename, tree_t **document, const char *path); static void set_permissions(const char *p); #ifndef WIN32 extern "C" { static void term_handler(int signum); } #endif // !WIN32 static void usage(const char *arg = NULL); /* * 'main()' - Main entry for HTMLDOC. */ int main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i, j; /* Looping vars */ tree_t *document, /* Master HTML document */ *file, /* HTML document file */ *toc; /* Table of contents */ exportfunc_t exportfunc; /* Export function */ const char *extension; /* Extension of output filename */ float fontsize, /* Base font size */ fontspacing; /* Base font spacing */ int num_files; /* Number of files provided on the command-line */ double start_time, /* Start time */ load_time, /* Load time */ end_time; /* End time */ const char *debug; /* HTMLDOC_DEBUG environment variable */ start_time = get_seconds(); #ifdef __APPLE__ /* * OSX passes an extra command-line option when run from the Finder. * If the first command-line argument is "-psn..." then skip it... */ if (argc > 1 && strncmp(argv[1], "-psn", 4) == 0) { argv ++; argc --; } #endif // __APPLE__ /* * Localize as needed... */ #ifdef HAVE_LOCALE_H setlocale(LC_TIME, ""); #endif // HAVE_LOCALE_H /* * Catch CTRL-C and term signals... */ #ifdef WIN32 #else signal(SIGTERM, term_handler); #endif // WIN32 /* * Set the location of data and help files... */ prefs_set_paths(); /* * Check if we are being executed as a CGI program... * * Note: We can't short-circuit this test to include a check for * PATH_INFO since that could lead to a remote execution hole. * Instead, we'll display an error message later if we can't find * a PATH_INFO variable and advise the administrator on how to * correct the problem... */ if (!getenv("HTMLDOC_NOCGI") && getenv("GATEWAY_INTERFACE") && getenv("SERVER_NAME") && getenv("SERVER_SOFTWARE")) { const char *path_translated; // PATH_TRANSLATED env var char bookfile[1024]; // Book filename // CGI mode implies the following options: // // --no-localfiles // --webpage // -t pdf // -f - // // Additional args cannot be provided on the command-line, however // we load directory-specific options from the ".book" file in the // current web server directory... CGIMode = 1; TocLevels = 0; TitlePage = 0; OutputPath[0] = '\0'; OutputType = OUTPUT_WEBPAGES; document = NULL; exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 13; PDFPageMode = PDF_DOCUMENT; PDFFirstPage = PDF_PAGE_1; file_cookies(getenv("HTTP_COOKIE")); file_referer(getenv("HTTP_REFERER")); progress_error(HD_ERROR_NONE, "INFO: HTMLDOC " SVERSION " starting in CGI mode."); #ifdef WIN32 progress_error(HD_ERROR_NONE, "INFO: TEMP is \"%s\"", getenv("TEMP")); #else progress_error(HD_ERROR_NONE, "INFO: TMPDIR is \"%s\"", getenv("TMPDIR")); #endif // WIN32 argc = 1; // Look for a book file in the following order: // // $PATH_TRANSLATED.book // `dirname $PATH_TRANSLATED`/.book // .book // // If we find one, use it... if ((path_translated = getenv("PATH_TRANSLATED")) != NULL) { // Try $PATH_TRANSLATED.book... snprintf(bookfile, sizeof(bookfile), "%s.book", path_translated); if (access(bookfile, 0)) { // Not found, try `dirname $PATH_TRANSLATED`/.book snprintf(bookfile, sizeof(bookfile), "%s/.book", file_directory(path_translated)); if (access(bookfile, 0)) strlcpy(bookfile, ".book", sizeof(bookfile)); } } else strlcpy(bookfile, ".book", sizeof(bookfile)); if (!access(bookfile, 0)) load_book(bookfile, &document, &exportfunc, 1); else file_nolocal(); } else { /* * Default to producing HTML files. */ document = NULL; exportfunc = (exportfunc_t)html_export; /* * Load preferences... */ prefs_load(); } /* * Parse command-line options... */ fontsize = 11.0f; fontspacing = 1.2f; num_files = 0; Errors = 0; for (i = 1; i < argc; i ++) { #ifdef DEBUG printf("argv[%d] = \"%s\"\n", i, argv[i]); #endif // DEBUG if (compare_strings(argv[i], "--batch", 4) == 0) { i ++; if (i < argc) { num_files ++; load_book(argv[i], &document, &exportfunc); } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--bodycolor", 7) == 0) { i ++; if (i < argc) strlcpy((char *)BodyColor, argv[i], sizeof(BodyColor)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--bodyfont", 7) == 0 || compare_strings(argv[i], "--textfont", 7) == 0) { i ++; if (i < argc) { if (!strcasecmp(argv[i], "monospace")) _htmlBodyFont = TYPE_MONOSPACE; else if (!strcasecmp(argv[i], "serif")) _htmlBodyFont = TYPE_SERIF; else if (!strcasecmp(argv[i], "sans-serif") || !strcasecmp(argv[i], "sans")) _htmlBodyFont = TYPE_SANS_SERIF; else if (!strcasecmp(argv[i], "courier")) _htmlBodyFont = TYPE_COURIER; else if (!strcasecmp(argv[i], "times")) _htmlBodyFont = TYPE_TIMES; else if (!strcasecmp(argv[i], "helvetica") || !strcasecmp(argv[i], "arial")) _htmlBodyFont = TYPE_HELVETICA; } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--bodyimage", 7) == 0) { i ++; if (i < argc) strlcpy((char *)BodyImage, argv[i], sizeof(BodyImage)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--book", 5) == 0) OutputType = OUTPUT_BOOK; else if (compare_strings(argv[i], "--bottom", 5) == 0) { i ++; if (i < argc) PageBottom = get_measurement(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--browserwidth", 4) == 0) { i ++; if (i < argc) { _htmlBrowserWidth = atof(argv[i]); if (_htmlBrowserWidth < 1.0f) { progress_error(HD_ERROR_INTERNAL_ERROR, "Bad browser width \"%s\"!", argv[i]); usage(); } } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--charset", 4) == 0) { i ++; if (i < argc) htmlSetCharSet(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--color", 5) == 0) { OutputColor = 1; _htmlGrayscale = 0; } else if (compare_strings(argv[i], "--compression", 5) == 0 || strncmp(argv[i], "--compression=", 14) == 0) { if (strlen(argv[i]) > 14 && PDFVersion >= 12) Compression = atoi(argv[i] + 14); else if (PDFVersion >= 12) Compression = 1; } else if (compare_strings(argv[i], "--continuous", 5) == 0) { TocLevels = 0; TitlePage = 0; OutputType = OUTPUT_CONTINUOUS; PDFPageMode = PDF_DOCUMENT; PDFFirstPage = PDF_PAGE_1; } else if (compare_strings(argv[i], "--cookies", 5) == 0) { i ++; if (i < argc) file_cookies(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--datadir", 4) == 0) { i ++; if (i < argc) _htmlData = argv[i]; else usage(argv[i - 1]); } #if defined(HAVE_LIBFLTK) && !WIN32 else if (compare_strings(argv[i], "-display", 3) == 0 || compare_strings(argv[i], "--display", 4) == 0) { // The X standard requires support for the -display option, but // we also support the GNU standard --display... i ++; if (i < argc) Fl::display(argv[i]); else usage(argv[i - 1]); } #endif // HAVE_LIBFLTK && !WIN32 else if (compare_strings(argv[i], "--duplex", 4) == 0) PageDuplex = 1; else if (compare_strings(argv[i], "--effectduration", 4) == 0) { i ++; if (i < argc) { PDFEffectDuration = atof(argv[i]); if (PDFEffectDuration < 0.0f) { progress_error(HD_ERROR_INTERNAL_ERROR, "Bad effect duration \"%s\"!", argv[i]); usage(); } } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--embedfonts", 4) == 0) EmbedFonts = 1; else if (compare_strings(argv[i], "--encryption", 4) == 0) Encryption = 1; else if (compare_strings(argv[i], "--firstpage", 4) == 0) { i ++; if (i >= argc) usage(argv[i - 1]); for (j = 0; j < (int)(sizeof(PDFPages) / sizeof(PDFPages[0])); j ++) if (strcasecmp(argv[i], PDFPages[j]) == 0) { PDFFirstPage = j; break; } } else if (compare_strings(argv[i], "--fontsize", 8) == 0) { i ++; if (i < argc) { fontsize = atof(argv[i]); if (fontsize < 4.0f) fontsize = 4.0f; else if (fontsize > 24.0f) fontsize = 24.0f; htmlSetBaseSize(fontsize, fontspacing); } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--fontspacing", 8) == 0) { i ++; if (i < argc) { fontspacing = atof(argv[i]); if (fontspacing < 1.0f) fontspacing = 1.0f; else if (fontspacing > 3.0f) fontspacing = 3.0f; htmlSetBaseSize(fontsize, fontspacing); } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--footer", 5) == 0) { i ++; if (i < argc) get_format(argv[i], Footer); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--format", 5) == 0 || strcmp(argv[i], "-t") == 0) { i ++; if (i < argc) { if (strcasecmp(argv[i], "ps1") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 1; } else if (strcasecmp(argv[i], "ps2") == 0 || strcasecmp(argv[i], "ps") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 2; } else if (strcasecmp(argv[i], "ps3") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 3; } else if (strcasecmp(argv[i], "pdf14") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 14; } else if (strcasecmp(argv[i], "pdf13") == 0 || strcasecmp(argv[i], "pdf") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 13; } else if (strcasecmp(argv[i], "pdf12") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 12; } else if (strcasecmp(argv[i], "pdf11") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 11; Compression = 0; } else if (strcasecmp(argv[i], "html") == 0) exportfunc = (exportfunc_t)html_export; else if (strcasecmp(argv[i], "htmlsep") == 0) exportfunc = (exportfunc_t)htmlsep_export; else usage(argv[i - 1]); } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--grayscale", 3) == 0) { OutputColor = 0; _htmlGrayscale = 1; } else if (!strcmp(argv[i], "--header")) { i ++; if (i < argc) get_format(argv[i], Header); else usage(argv[i - 1]); } else if (!strcmp(argv[i], "--header1")) { i ++; if (i < argc) get_format(argv[i], Header1); else usage(argv[i - 1]); } else if (!compare_strings(argv[i], "--headfootfont", 11)) { i ++; if (i < argc) { if (!strcasecmp(argv[i], "courier")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(argv[i], "courier-bold")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(argv[i], "courier-oblique")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(argv[i], "courier-boldoblique")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(argv[i], "times") || !strcasecmp(argv[i], "times-roman")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(argv[i], "times-bold")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(argv[i], "times-italic")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(argv[i], "times-bolditalic")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(argv[i], "helvetica")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(argv[i], "helvetica-bold")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(argv[i], "helvetica-oblique")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(argv[i], "helvetica-boldoblique")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(argv[i], "monospace")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(argv[i], "monospace-bold")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(argv[i], "monospace-oblique")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(argv[i], "monospace-boldoblique")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(argv[i], "serif") || !strcasecmp(argv[i], "serif-roman")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(argv[i], "serif-bold")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(argv[i], "serif-italic")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(argv[i], "serif-bolditalic")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(argv[i], "sans-serif") || !strcasecmp(argv[i], "sans")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(argv[i], "sans-serif-bold") || !strcasecmp(argv[i], "sans-bold")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(argv[i], "sans-serif-oblique") || !strcasecmp(argv[i], "sans-oblique")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(argv[i], "sans-serif-boldoblique") || !strcasecmp(argv[i], "sans-boldoblique")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_BOLD_ITALIC; } } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--headfootsize", 11) == 0) { i ++; if (i < argc) { HeadFootSize = atof(argv[i]); if (HeadFootSize < 6.0f) HeadFootSize = 6.0f; else if (HeadFootSize > 24.0f) HeadFootSize = 24.0f; } else usage(argv[i - 1]); } else if (!compare_strings(argv[i], "--headingfont", 7)) { i ++; if (i < argc) { if (!strcasecmp(argv[i], "courier")) _htmlHeadingFont = TYPE_COURIER; else if (!strcasecmp(argv[i], "times")) _htmlHeadingFont = TYPE_TIMES; else if (!strcasecmp(argv[i], "helvetica") || !strcasecmp(argv[i], "arial")) _htmlHeadingFont = TYPE_HELVETICA; else if (!strcasecmp(argv[i], "monospace")) _htmlHeadingFont = TYPE_MONOSPACE; else if (!strcasecmp(argv[i], "serif")) _htmlHeadingFont = TYPE_SERIF; else if (!strcasecmp(argv[i], "sans-serif") || !strcasecmp(argv[i], "sans")) _htmlHeadingFont = TYPE_SANS_SERIF; } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--help", 6) == 0) usage(argv[i - 1]); #ifdef HAVE_LIBFLTK else if (compare_strings(argv[i], "--helpdir", 7) == 0) { i ++; if (i < argc) GUI::help_dir = argv[i]; else usage(argv[i - 1]); } #endif // HAVE_LIBFLTK else if (strncmp(argv[i], "--hfimage", 9) == 0) { int hfimgnum; // Image number char *hfptr; // Pointer into option if (strlen(argv[i]) > 9) { hfimgnum = strtol(argv[i] + 9, &hfptr, 10); if (hfimgnum < 0 || hfimgnum >= MAX_HF_IMAGES || *hfptr) usage(argv[i]); } else hfimgnum = 0; i ++; if (i >= argc) usage(argv[i - 1]); strlcpy(HFImage[hfimgnum], argv[i], sizeof(HFImage[0])); } else if (compare_strings(argv[i], "--jpeg", 3) == 0 || strncmp(argv[i], "--jpeg=", 7) == 0) { if (strlen(argv[i]) > 7) OutputJPEG = atoi(argv[i] + 7); else OutputJPEG = 90; } else if (compare_strings(argv[i], "--landscape", 4) == 0) Landscape = 1; else if (compare_strings(argv[i], "--left", 4) == 0) { i ++; if (i < argc) PageLeft = get_measurement(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--linkcolor", 7) == 0) { i ++; if (i < argc) strlcpy(LinkColor, argv[i], sizeof(LinkColor)); else usage(argv[i - 1]); } else if (strcmp(argv[i], "--links") == 0) Links = 1; else if (compare_strings(argv[i], "--linkstyle", 8) == 0) { i ++; if (i < argc) { if (strcmp(argv[i], "plain") == 0) LinkStyle = 0; else if (strcmp(argv[i], "underline") == 0) LinkStyle = 1; else usage(argv[i - 1]); } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--logoimage", 5) == 0) { i ++; if (i < argc) strlcpy(LogoImage, argv[i], sizeof(LogoImage)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--no-compression", 6) == 0) Compression = 0; else if (compare_strings(argv[i], "--no-duplex", 4) == 0) PageDuplex = 0; else if (compare_strings(argv[i], "--no-embedfonts", 7) == 0) EmbedFonts = 0; else if (compare_strings(argv[i], "--no-encryption", 7) == 0) Encryption = 0; else if (compare_strings(argv[i], "--no-jpeg", 6) == 0) OutputJPEG = 0; else if (compare_strings(argv[i], "--no-links", 7) == 0) Links = 0; else if (compare_strings(argv[i], "--no-localfiles", 7) == 0) file_nolocal(); else if (compare_strings(argv[i], "--no-numbered", 6) == 0) TocNumbers = 0; else if (compare_strings(argv[i], "--no-overflow", 6) == 0) OverflowErrors = 0; else if (compare_strings(argv[i], "--no-pscommands", 6) == 0) PSCommands = 0; else if (compare_strings(argv[i], "--no-strict", 6) == 0) StrictHTML = 0; else if (compare_strings(argv[i], "--no-title", 7) == 0) TitlePage = 0; else if (compare_strings(argv[i], "--no-toc", 7) == 0) TocLevels = 0; else if (compare_strings(argv[i], "--no-truetype", 7) == 0) { fputs("htmldoc: Warning, --no-truetype option superceded by --no-embedfonts!\n", stderr); EmbedFonts = 0; } else if (compare_strings(argv[i], "--no-xrxcomments", 6) == 0) XRXComments = 0; else if (compare_strings(argv[i], "--numbered", 5) == 0) TocNumbers = 1; else if (compare_strings(argv[i], "--nup", 5) == 0) { i ++; if (i >= argc) usage(argv[i - 1]); NumberUp = atoi(argv[i]); if (NumberUp != 1 && NumberUp != 2 && NumberUp != 4 && NumberUp != 6 && NumberUp != 9 && NumberUp != 16) usage(argv[i - 1]); } else if (compare_strings(argv[i], "--outdir", 6) == 0 || strcmp(argv[i], "-d") == 0) { i ++; if (i < argc) { strlcpy(OutputPath, argv[i], sizeof(OutputPath)); OutputFiles = 1; } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--outfile", 6) == 0 || strcmp(argv[i], "-f") == 0) { i ++; if (i < argc) { strlcpy(OutputPath, argv[i], sizeof(OutputPath)); OutputFiles = 0; if ((extension = file_extension(argv[i])) != NULL) { if (strcasecmp(extension, "ps") == 0) { exportfunc = (exportfunc_t)pspdf_export; if (PSLevel == 0) PSLevel = 2; } else if (strcasecmp(extension, "pdf") == 0) { exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; } else if (strcasecmp(extension, "html") == 0) exportfunc = (exportfunc_t)html_export; } } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--overflow", 4) == 0) OverflowErrors = 1; else if (compare_strings(argv[i], "--owner-password", 4) == 0) { i ++; if (i < argc) strlcpy(OwnerPassword, argv[i], sizeof(OwnerPassword)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--pageduration", 7) == 0) { i ++; if (i < argc) { PDFPageDuration = atof(argv[i]); if (PDFPageDuration < 1.0f) { progress_error(HD_ERROR_INTERNAL_ERROR, "Bad page duration \"%s\"!", argv[i]); usage(); } } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--pageeffect", 7) == 0) { i ++; if (i >= argc) usage(argv[i - 1]); for (j = 0; j < (int)(sizeof(PDFEffects) / sizeof(PDFEffects[0])); j ++) if (strcasecmp(argv[i], PDFEffects[j]) == 0) { PDFEffect = j; break; } } else if (compare_strings(argv[i], "--pagelayout", 7) == 0) { i ++; if (i >= argc) usage(argv[i - 1]); for (j = 0; j < (int)(sizeof(PDFLayouts) / sizeof(PDFLayouts[0])); j ++) if (strcasecmp(argv[i], PDFLayouts[j]) == 0) { PDFPageLayout = j; break; } } else if (compare_strings(argv[i], "--pagemode", 7) == 0) { i ++; if (i >= argc) usage(argv[i - 1]); for (j = 0; j < (int)(sizeof(PDFModes) / sizeof(PDFModes[0])); j ++) if (strcasecmp(argv[i], PDFModes[j]) == 0) { PDFPageMode = j; break; } } else if (compare_strings(argv[i], "--path", 5) == 0) { i ++; if (i < argc) strlcpy(Path, argv[i], sizeof(Path)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--permissions", 4) == 0) { i ++; if (i >= argc) usage(argv[i - 1]); set_permissions(argv[i]); } else if (compare_strings(argv[i], "--portrait", 4) == 0) Landscape = 0; else if (compare_strings(argv[i], "--proxy", 4) == 0) { i ++; if (i < argc) { strlcpy(Proxy, argv[i], sizeof(Proxy)); file_proxy(Proxy); } else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--pscommands", 3) == 0) PSCommands = 1; else if (compare_strings(argv[i], "--quiet", 3) == 0) Verbosity = -1; else if (!compare_strings(argv[i], "--referer", 4)) { i ++; if (i < argc) file_referer(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--right", 4) == 0) { i ++; if (i < argc) PageRight = get_measurement(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--size", 4) == 0) { i ++; if (i < argc) set_page_size(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--strict", 4) == 0) StrictHTML = 1; else if (compare_strings(argv[i], "--textcolor", 7) == 0) { i ++; if (i < argc) htmlSetTextColor((uchar *)argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--title", 7) == 0) TitlePage = 1; else if (compare_strings(argv[i], "--titlefile", 8) == 0 || compare_strings(argv[i], "--titleimage", 8) == 0) { i ++; if (i < argc) strlcpy(TitleImage, argv[i], sizeof(TitleImage)); else usage(argv[i - 1]); TitlePage = 1; } else if (compare_strings(argv[i], "--tocfooter", 6) == 0) { i ++; if (i < argc) get_format(argv[i], TocFooter); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--tocheader", 6) == 0) { i ++; if (i < argc) get_format(argv[i], TocHeader); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--toclevels", 6) == 0) { i ++; if (i < argc) TocLevels = atoi(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--toctitle", 6) == 0) { i ++; if (i < argc) strlcpy(TocTitle, argv[i], sizeof(TocTitle)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--top", 5) == 0) { i ++; if (i < argc) PageTop = get_measurement(argv[i]); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--user-password", 4) == 0) { i ++; if (i < argc) strlcpy(UserPassword, argv[i], sizeof(UserPassword)); else usage(argv[i - 1]); } else if (compare_strings(argv[i], "--truetype", 4) == 0) { fputs("htmldoc: Warning, --truetype option superceded by --embedfonts!\n", stderr); EmbedFonts = 1; } else if (compare_strings(argv[i], "--verbose", 6) == 0 || strcmp(argv[i], "-v") == 0) { Verbosity ++; } else if (compare_strings(argv[i], "--version", 6) == 0) { puts(SVERSION); return (0); } else if (compare_strings(argv[i], "--webpage", 3) == 0) { TocLevels = 0; TitlePage = 0; OutputType = OUTPUT_WEBPAGES; PDFPageMode = PDF_DOCUMENT; PDFFirstPage = PDF_PAGE_1; } else if (compare_strings(argv[i], "--xrxcomments", 3) == 0) XRXComments = 1; else if (strcmp(argv[i], "-") == 0) { /* * Read from stdin... */ num_files ++; _htmlPPI = 72.0f * _htmlBrowserWidth / (PageWidth - PageLeft - PageRight); file = htmlAddTree(NULL, MARKUP_FILE, NULL); htmlSetVariable(file, (uchar *)"_HD_FILENAME", (uchar *)""); htmlSetVariable(file, (uchar *)"_HD_BASE", (uchar *)"."); #ifdef WIN32 // Make sure stdin is in binary mode. // (I hate Microsoft... I hate Microsoft... Everybody join in!) setmode(0, O_BINARY); #elif defined(__EMX__) // OS/2 has a setmode for FILE's... fflush(stdin); _fsetmode(stdin, "b"); #endif // WIN32 || __EMX__ htmlReadFile(file, stdin, "."); if (document == NULL) document = file; else { while (document->next != NULL) document = document->next; document->next = file; file->prev = document; } } else if (argv[i][0] == '-') usage(argv[i]); #ifdef HAVE_LIBFLTK else if (strlen(argv[i]) > 5 && strcmp(argv[i] + strlen(argv[i]) - 5, ".book") == 0) { /* * GUI mode... */ if (BookGUI == NULL) BookGUI = new GUI(argv[i]); else BookGUI->loadBook(argv[i]); } #endif /* HAVE_LIBFLTK */ else { num_files ++; read_file(argv[i], &document, Path); } } if (CGIMode) { char url[1024]; // URL const char *https, // HTTPS env var, if any *path_info, // Path info, if any *query, // Query string, if any *server_name, // Server name *server_port; // Server port https = getenv("HTTPS"); path_info = getenv("PATH_INFO"); query = getenv("QUERY_STRING"); server_name = getenv("SERVER_NAME"); server_port = getenv("SERVER_PORT"); if (server_port && path_info && *path_info) { // Read the referenced file from the local server... if (https && strcmp(https, "off")) httpAssembleURI(HTTP_URI_CODING_ALL, url, sizeof(url), "https", NULL, server_name, atoi(server_port), path_info); else httpAssembleURI(HTTP_URI_CODING_ALL, url, sizeof(url), "http", NULL, server_name, atoi(server_port), path_info); if (query && *query && *query != '-') { // Include query string on end of URL, which is already URI encoded... strlcat(url, "?", sizeof(url)); strlcat(url, query, sizeof(url)); } progress_error(HD_ERROR_NONE, "INFO: HTMLDOC converting \"%s\".", url); num_files ++; read_file(url, &document, Path); } else progress_error(HD_ERROR_FILE_NOT_FOUND, "PATH_INFO is not set in the environment!"); } /* * Display the GUI if necessary... */ #ifdef HAVE_LIBFLTK if (num_files == 0 && BookGUI == NULL) BookGUI = new GUI(); if (BookGUI != NULL) { Fl_File_Icon::load_system_icons(); BookGUI->show(); i = Fl::run(); delete BookGUI; return (i); } #endif /* HAVE_LIBFLTK */ /* * We *must* have a document to process... */ if (num_files == 0 || document == NULL) usage("No HTML files!"); /* * Find the first one in the list... */ while (document->prev != NULL) document = document->prev; // Fix links... htmlFixLinks(document, document); load_time = get_seconds(); // Show debug info... htmlDebugStats("Document Tree", document); /* * Build a table of contents for the documents if necessary... */ if (OutputType == OUTPUT_BOOK && TocLevels > 0) toc = toc_build(document); else toc = NULL; htmlDebugStats("Table of Contents Tree", toc); /* * Generate the output file(s). */ (*exportfunc)(document, toc); end_time = get_seconds(); /* * Report running time statistics as needed... */ if ((debug = getenv("HTMLDOC_DEBUG")) != NULL && (strstr(debug, "all") != NULL || strstr(debug, "timing") != NULL)) progress_error(HD_ERROR_NONE, "TIMING: %.3f %.3f %.3f", load_time - start_time, end_time - load_time, end_time - start_time); /* * Cleanup... */ htmlDeleteTree(document); htmlDeleteTree(toc); file_cleanup(); image_flush_cache(); return (Errors); } /* * 'prefs_getrc()' - Get the rc file for preferences... */ const char * prefs_getrc(void) { #ifdef WIN32 HKEY key; // Registry key DWORD size; // Size of string char home[1024]; // Home (profile) directory #else const char *home; // Home directory #endif // WIN32 static char htmldocrc[1024];// HTMLDOC RC file // Find the home directory... #ifdef WIN32 // Open the registry... if (RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_READ, &key)) { // Use the install directory... strlcpy(home, _htmlData, sizeof(home)); } else { // Grab the current user's AppData directory... size = sizeof(home); if (RegQueryValueEx(key, "AppData", NULL, NULL, (unsigned char *)home, &size)) strlcpy(home, _htmlData, sizeof(home)); RegCloseKey(key); } #else if ((home = getenv("HOME")) == NULL) home = _htmlData; #endif // WIN32 // Format the rc filename and return... snprintf(htmldocrc, sizeof(htmldocrc), "%s/.htmldocrc", home); return (htmldocrc); } /* * 'prefs_load()' - Load HTMLDOC preferences... */ void prefs_load(void) { int pos; // Header/footer position char line[2048]; // Line from RC file FILE *fp; // File pointer // // Read the preferences file... // if ((fp = fopen(prefs_getrc(), "r")) != NULL) { while (fgets(line, sizeof(line), fp) != NULL) { if (line[strlen(line) - 1] == '\n') line[strlen(line) - 1] = '\0'; if (strncasecmp(line, "TEXTCOLOR=", 10) == 0) htmlSetTextColor((uchar *)(line + 10)); else if (strncasecmp(line, "BODYCOLOR=", 10) == 0) strlcpy(BodyColor, line + 10, sizeof(BodyColor)); else if (strncasecmp(line, "BODYIMAGE=", 10) == 0) strlcpy(BodyImage, line + 10, sizeof(BodyImage)); else if (strncasecmp(line, "LINKCOLOR=", 10) == 0) strlcpy(LinkColor, line + 10, sizeof(LinkColor)); else if (strncasecmp(line, "LINKSTYLE=", 10) == 0) LinkStyle = atoi(line + 10); else if (strncasecmp(line, "BROWSERWIDTH=", 13) == 0) _htmlBrowserWidth = atof(line + 13); else if (strncasecmp(line, "PAGEWIDTH=", 10) == 0) PageWidth = atoi(line + 10); else if (strncasecmp(line, "PAGELENGTH=", 11) == 0) PageLength = atoi(line + 11); else if (strncasecmp(line, "PAGELEFT=", 9) == 0) PageLeft = atoi(line + 9); else if (strncasecmp(line, "PAGERIGHT=", 10) == 0) PageRight = atoi(line + 10); else if (strncasecmp(line, "PAGETOP=", 8) == 0) PageTop = atoi(line + 8); else if (strncasecmp(line, "PAGEBOTTOM=", 11) == 0) PageBottom = atoi(line + 11); else if (strncasecmp(line, "PAGEDUPLEX=", 11) == 0) PageDuplex = atoi(line + 11); else if (strncasecmp(line, "LANDSCAPE=", 10) == 0) Landscape = atoi(line + 10); else if (strncasecmp(line, "COMPRESSION=", 12) == 0) Compression = atoi(line + 12); else if (strncasecmp(line, "OUTPUTCOLOR=", 12) == 0) { OutputColor = atoi(line + 12); _htmlGrayscale = !OutputColor; } else if (strncasecmp(line, "TOCNUMBERS=", 11) == 0) TocNumbers = atoi(line + 11); else if (strncasecmp(line, "TOCLEVELS=", 10) == 0) TocLevels = atoi(line + 10); else if (strncasecmp(line, "JPEG=", 5) == 0) OutputJPEG = atoi(line + 1); else if (strncasecmp(line, "PAGEHEADER=", 11) == 0) get_format(line + 11, Header); else if (strncasecmp(line, "PAGEFOOTER=", 11) == 0) get_format(line + 11, Footer); else if (strncasecmp(line, "NUMBERUP=", 9) == 0) NumberUp = atoi(line + 9); else if (strncasecmp(line, "TOCHEADER=", 10) == 0) get_format(line + 10, TocHeader); else if (strncasecmp(line, "TOCFOOTER=", 10) == 0) get_format(line + 10, TocFooter); else if (strncasecmp(line, "TOCTITLE=", 9) == 0) strlcpy(TocTitle, line + 9, sizeof(TocTitle)); else if (strncasecmp(line, "BODYFONT=", 9) == 0) _htmlBodyFont = (typeface_t)atoi(line + 9); else if (strncasecmp(line, "HEADINGFONT=", 12) == 0) _htmlHeadingFont = (typeface_t)atoi(line + 12); else if (strncasecmp(line, "FONTSIZE=", 9) == 0) htmlSetBaseSize(atof(line + 9), _htmlSpacings[SIZE_P] / _htmlSizes[SIZE_P]); else if (strncasecmp(line, "FONTSPACING=", 12) == 0) htmlSetBaseSize(_htmlSizes[SIZE_P], atof(line + 12)); else if (strncasecmp(line, "HEADFOOTTYPE=", 13) == 0) HeadFootType = (typeface_t)atoi(line + 13); else if (strncasecmp(line, "HEADFOOTSTYLE=", 14) == 0) HeadFootStyle = (style_t)atoi(line + 14); else if (strncasecmp(line, "HEADFOOTSIZE=", 13) == 0) HeadFootSize = atof(line + 13); else if (strncasecmp(line, "PDFVERSION=", 11) == 0) { if (strchr(line + 11, '.') != NULL) PDFVersion = (int)(atof(line + 11) * 10.0 + 0.5); else PDFVersion = atoi(line + 11); } else if (strncasecmp(line, "PSLEVEL=", 8) == 0) PSLevel = atoi(line + 8); else if (strncasecmp(line, "PSCOMMANDS=", 11) == 0) PSCommands = atoi(line + 11); else if (strncasecmp(line, "XRXCOMMENTS=", 12) == 0) XRXComments = atoi(line + 12); else if (strncasecmp(line, "CHARSET=", 8) == 0) htmlSetCharSet(line + 8); else if (strncasecmp(line, "PAGEMODE=", 9) == 0) PDFPageMode = atoi(line + 9); else if (strncasecmp(line, "PAGELAYOUT=", 11) == 0) PDFPageLayout = atoi(line + 11); else if (strncasecmp(line, "FIRSTPAGE=", 10) == 0) PDFFirstPage = atoi(line + 10); else if (strncasecmp(line, "PAGEEFFECT=", 11) == 0) PDFEffect = atoi(line + 11); else if (strncasecmp(line, "PAGEDURATION=", 14) == 0) PDFPageDuration = atof(line + 14); else if (strncasecmp(line, "EFFECTDURATION=", 16) == 0) PDFEffectDuration = atof(line + 16); else if (strncasecmp(line, "ENCRYPTION=", 11) == 0) Encryption = atoi(line + 11); else if (strncasecmp(line, "PERMISSIONS=", 12) == 0) Permissions = atoi(line + 12); else if (strncasecmp(line, "OWNERPASSWORD=", 14) == 0) strlcpy(OwnerPassword, line + 14, sizeof(OwnerPassword)); else if (strncasecmp(line, "USERPASSWORD=", 13) == 0) strlcpy(UserPassword, line + 13, sizeof(UserPassword)); else if (strncasecmp(line, "LINKS=", 6) == 0) Links = atoi(line + 6); else if (strncasecmp(line, "TRUETYPE=", 9) == 0) EmbedFonts = atoi(line + 9); else if (strncasecmp(line, "EMBEDFONTS=", 11) == 0) EmbedFonts = atoi(line + 11); else if (strncasecmp(line, "PATH=", 5) == 0) strlcpy(Path, line + 5, sizeof(Path)); else if (strncasecmp(line, "PROXY=", 6) == 0) strlcpy(Proxy, line + 6, sizeof(Proxy)); else if (strncasecmp(line, "STRICTHTML=", 11) == 0) StrictHTML = atoi(line + 11); # ifdef HAVE_LIBFLTK else if (strncasecmp(line, "EDITOR=", 7) == 0) strlcpy(HTMLEditor, line + 7, sizeof(HTMLEditor)); else if (strncasecmp(line, "TOOLTIPS=", 9) == 0) Tooltips = atoi(line + 9); else if (strncasecmp(line, "MODERN=", 7) == 0) ModernSkin = atoi(line + 7); # endif // HAVE_LIBFLTK } fclose(fp); } // Check header/footer formats... for (pos = 0; pos < 3; pos ++) if (Header[pos]) break; if (pos == 3) get_format(".t.", Header); for (pos = 0; pos < 3; pos ++) if (Footer[pos]) break; if (pos == 3) get_format("h.1", Footer); for (pos = 0; pos < 3; pos ++) if (TocHeader[pos]) break; if (pos == 3) get_format(".t.", TocHeader); for (pos = 0; pos < 3; pos ++) if (TocFooter[pos]) break; if (pos == 3) get_format("..i", TocFooter); } /* * 'prefs_save()' - Save HTMLDOC preferences... */ void prefs_save(void) { FILE *fp; // File pointer if ((fp = fopen(prefs_getrc(), "w")) != NULL) { fputs("#HTMLDOCRC " SVERSION "\n", fp); fprintf(fp, "TEXTCOLOR=%s\n", _htmlTextColor); fprintf(fp, "BODYCOLOR=%s\n", BodyColor); fprintf(fp, "BODYIMAGE=%s\n", BodyImage); fprintf(fp, "LINKCOLOR=%s\n", LinkColor); fprintf(fp, "LINKSTYLE=%d\n", LinkStyle); fprintf(fp, "BROWSERWIDTH=%.0f\n", _htmlBrowserWidth); fprintf(fp, "PAGEWIDTH=%d\n", PageWidth); fprintf(fp, "PAGELENGTH=%d\n", PageLength); fprintf(fp, "PAGELEFT=%d\n", PageLeft); fprintf(fp, "PAGERIGHT=%d\n", PageRight); fprintf(fp, "PAGETOP=%d\n", PageTop); fprintf(fp, "PAGEBOTTOM=%d\n", PageBottom); fprintf(fp, "PAGEDUPLEX=%d\n", PageDuplex); fprintf(fp, "LANDSCAPE=%d\n", Landscape); fprintf(fp, "COMPRESSION=%d\n", Compression); fprintf(fp, "OUTPUTCOLOR=%d\n", OutputColor); fprintf(fp, "TOCNUMBERS=%d\n", TocNumbers); fprintf(fp, "TOCLEVELS=%d\n", TocLevels); fprintf(fp, "JPEG=%d\n", OutputJPEG); fprintf(fp, "PAGEHEADER=%s\n", get_fmt(Header)); fprintf(fp, "PAGEFOOTER=%s\n", get_fmt(Footer)); fprintf(fp, "NUMBERUP=%d\n", NumberUp); fprintf(fp, "TOCHEADER=%s\n", get_fmt(TocHeader)); fprintf(fp, "TOCFOOTER=%s\n", get_fmt(TocFooter)); fprintf(fp, "TOCTITLE=%s\n", TocTitle); fprintf(fp, "BODYFONT=%d\n", _htmlBodyFont); fprintf(fp, "HEADINGFONT=%d\n", _htmlHeadingFont); fprintf(fp, "FONTSIZE=%.2f\n", _htmlSizes[SIZE_P]); fprintf(fp, "FONTSPACING=%.2f\n", _htmlSpacings[SIZE_P] / _htmlSizes[SIZE_P]); fprintf(fp, "HEADFOOTTYPE=%d\n", HeadFootType); fprintf(fp, "HEADFOOTSTYLE=%d\n", HeadFootStyle); fprintf(fp, "HEADFOOTSIZE=%.2f\n", HeadFootSize); fprintf(fp, "PDFVERSION=%d\n", PDFVersion); fprintf(fp, "PSLEVEL=%d\n", PSLevel); fprintf(fp, "PSCOMMANDS=%d\n", PSCommands); fprintf(fp, "XRXCOMMENTS=%d\n", XRXComments); fprintf(fp, "CHARSET=%s\n", _htmlCharSet); fprintf(fp, "PAGEMODE=%d\n", PDFPageMode); fprintf(fp, "PAGELAYOUT=%d\n", PDFPageLayout); fprintf(fp, "FIRSTPAGE=%d\n", PDFFirstPage); fprintf(fp, "PAGEEFFECT=%d\n", PDFEffect); fprintf(fp, "PAGEDURATION=%.0f\n", PDFPageDuration); fprintf(fp, "EFFECTDURATION=%.1f\n", PDFEffectDuration); fprintf(fp, "ENCRYPTION=%d\n", Encryption); fprintf(fp, "PERMISSIONS=%d\n", Permissions); fprintf(fp, "OWNERPASSWORD=%s\n", OwnerPassword); fprintf(fp, "USERPASSWORD=%s\n", UserPassword); fprintf(fp, "LINKS=%d\n", Links); fprintf(fp, "EMBEDFONTS=%d\n", EmbedFonts); fprintf(fp, "PATH=%s\n", Path); fprintf(fp, "PROXY=%s\n", Proxy); fprintf(fp, "STRICTHTML=%d\n", StrictHTML); #ifdef HAVE_LIBFLTK fprintf(fp, "EDITOR=%s\n", HTMLEditor); fprintf(fp, "TOOLTIPS=%d\n", Tooltips); fprintf(fp, "MODERN=%d\n", ModernSkin); #endif // HAVE_LIBFLTK fclose(fp); } } /* * 'prefs_set_paths()' - Set HTMLDOC data/help paths... */ void prefs_set_paths(void) { #ifdef WIN32 //// Do registry magic... HKEY key; // Registry key DWORD size; // Size of string static char data[1024]; // Data directory static char doc[1024]; // Documentation directory static char path[4096]; // PATH environment variable #endif // WIN32 // // Get the installed directories... // #ifdef WIN32 // Open the registry... if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Easy Software Products\\HTMLDOC", 0, KEY_READ, &key)) { // Grab the installed directories... size = sizeof(data); if (!RegQueryValueEx(key, "data", NULL, NULL, (unsigned char *)data, &size)) _htmlData = data; else progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to read \"data\" value from registry!"); # ifdef HAVE_LIBFLTK size = sizeof(doc); if (!RegQueryValueEx(key, "doc", NULL, NULL, (unsigned char *)doc, &size)) GUI::help_dir = doc; # endif // HAVE_LIBFLTK RegCloseKey(key); } else progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to read HTMLDOC installation from registry!"); // See if the HTMLDOC program folder is in the system execution path... if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", 0, KEY_READ | KEY_WRITE, &key)) { // Grab the current path... size = sizeof(path); if (!RegQueryValueEx(key, "Path", NULL, NULL, (unsigned char *)path, &size)) if (strstr(path, _htmlData) == NULL) { // The data directory is not in the path, so add it... strlcat(path, ";", sizeof(path)); strlcat(path, _htmlData, sizeof(path)); RegSetValueEx(key, "Path", 0, REG_EXPAND_SZ, (unsigned char *)path, strlen(path) + 1); } } #endif // WIN32 #if defined(__EMX__) && defined(HAVE_LIBFLTK) // If being installed within XFree86 OS/2 Environment // we can use those values which are overwritten by // the according environment variables. _htmlData = strdup(__XOS2RedirRoot("/XFree86/lib/X11/htmldoc")); GUI::help_dir = strdup(__XOS2RedirRoot("/XFree86/lib/X11/htmldoc/doc")); #endif // __EMX__ && HAVE_LIBFLTK // // See if the installed directories have been overridden by // environment variables... // if (getenv("HTMLDOC_DATA") != NULL) _htmlData = getenv("HTMLDOC_DATA"); #ifdef HAVE_LIBFLTK if (getenv("HTMLDOC_HELP") != NULL) GUI::help_dir = getenv("HTMLDOC_HELP"); #endif // HAVE_LIBFLTK } /* * 'compare_strings()' - Compare two command-line strings. */ static int /* O - -1 or 1 = no match, 0 = match */ compare_strings(const char *s, /* I - Command-line string */ const char *t, /* I - Option string */ int tmin)/* I - Minimum number of unique chars in option */ { int slen; /* Length of command-line string */ slen = strlen(s); if (slen < tmin) return (-1); else return (strncmp(s, t, slen)); } /* * 'get_seconds()' - Get the current fractional time in seconds. */ static double /* O - Number of seconds */ get_seconds(void) { #ifdef WIN32 return (GetTickCount() * 0.001); #else struct timeval curtime; /* Current time */ gettimeofday(&curtime, NULL); return (curtime.tv_sec + curtime.tv_usec * 0.000001); #endif /* WIN32 */ } // // 'load_book()' - Load a book file... // static int // O - 1 = success, 0 = failure load_book(const char *filename, // I - Book file tree_t **document, // IO - Document tree exportfunc_t *exportfunc, // O - Export function int set_nolocal) // I - Set file_nolocal() after lookup? { FILE *fp; // File to read from char line[10240]; // Line from file const char *dir; // Directory const char *local; // Local filename char path[2048]; // Current path // See if the filename contains a path... dir = file_directory(filename); if (dir != NULL) snprintf(path, sizeof(path), "%s;%s", dir, Path); else strlcpy(path, Path, sizeof(path)); // Open the file... local = file_find(Path, filename); if (set_nolocal) file_nolocal(); if (!local) return (0); if ((fp = fopen(local, "rb")) == NULL) { progress_error(HD_ERROR_READ_ERROR, "Unable to open book file \"%s\": %s", local, strerror(errno)); return (0); } // Get the header... file_gets(line, sizeof(line), fp); if (strncmp(line, "#HTMLDOC", 8) != 0) { fclose(fp); progress_error(HD_ERROR_BAD_FORMAT, "Bad or missing #HTMLDOC header in \"%s\".", filename); return (0); } // Read the second line from the book file; for older book files, this will // be the file count; for new files this will be the options... do { file_gets(line, sizeof(line), fp); if (line[0] == '-') { parse_options(line, exportfunc); if (dir != NULL) snprintf(path, sizeof(path), "%s;%s", dir, Path); else strlcpy(path, Path, sizeof(path)); } } while (!line[0]); // Skip blank lines // Get input files/options... while (file_gets(line, sizeof(line), fp) != NULL) { if (!line[0]) continue; // Skip blank lines else if (line[0] == '-') { parse_options(line, exportfunc); if (dir != NULL) snprintf(path, sizeof(path), "%s;%s", dir, Path); else strlcpy(path, Path, sizeof(path)); } else if (line[0] == '\\') read_file(line + 1, document, path); else read_file(line, document, path); } // Close the book file and return... fclose(fp); return (1); } // // 'parse_options()' - Parse options from a book file... // static void parse_options(const char *line, // I - Options from book file exportfunc_t *exportfunc) // O - Export function { int i; // Looping var const char *lineptr; // Pointer into line char temp[1024], // Option name temp2[1024], // Option value *tempptr; // Pointer into option float fontsize, // Size of body text fontspacing; // Spacing between lines // Parse the input line... for (lineptr = line; *lineptr != '\0';) { while (*lineptr == ' ') lineptr ++; for (tempptr = temp; *lineptr != '\0' && *lineptr != ' '; lineptr ++) if (tempptr < (temp + sizeof(temp) - 1)) *tempptr++ = *lineptr; *tempptr = '\0'; while (*lineptr == ' ') lineptr ++; if (strcmp(temp, "--duplex") == 0) { PageDuplex = 1; continue; } else if (strcmp(temp, "--landscape") == 0) { Landscape = 1; continue; } else if (strcmp(temp, "--portrait") == 0) { Landscape = 0; continue; } else if (strncmp(temp, "--jpeg", 6) == 0) { if (strlen(temp) > 7) OutputJPEG = atoi(temp + 7); else OutputJPEG = 90; continue; } else if (strcmp(temp, "--grayscale") == 0) { OutputColor = 0; continue; } else if (strcmp(temp, "--color") == 0) { OutputColor = 1; continue; } else if (strcmp(temp, "--links") == 0) { Links = 1; continue; } else if (strcmp(temp, "--no-links") == 0) { Links = 0; continue; } else if (strcmp(temp, "--embedfonts") == 0 || strcmp(temp, "--truetype") == 0) { EmbedFonts = 1; continue; } else if (strcmp(temp, "--no-embedfonts") == 0 || strcmp(temp, "--no-truetype") == 0) { EmbedFonts = 0; continue; } else if (strcmp(temp, "--pscommands") == 0) { PSCommands = 1; continue; } else if (strcmp(temp, "--no-pscommands") == 0) { PSCommands = 0; continue; } else if (strcmp(temp, "--xrxcomments") == 0) { XRXComments = 1; continue; } else if (strcmp(temp, "--no-xrxcomments") == 0) { XRXComments = 0; continue; } else if (strncmp(temp, "--compression", 13) == 0) { if (strlen(temp) > 14) Compression = atoi(temp + 14); else Compression = 1; continue; } else if (strcmp(temp, "--no-compression") == 0) { Compression = 0; continue; } else if (strcmp(temp, "--no-jpeg") == 0) { OutputJPEG = 0; continue; } else if (strcmp(temp, "--numbered") == 0) { TocNumbers = 1; continue; } else if (strcmp(temp, "--no-numbered") == 0) { TocNumbers = 0; continue; } else if (strcmp(temp, "--no-toc") == 0) { TocLevels = 0; continue; } else if (strcmp(temp, "--title") == 0) { TitlePage = 1; continue; } else if (strcmp(temp, "--no-title") == 0) { TitlePage = 0; continue; } else if (strcmp(temp, "--book") == 0) { OutputType = OUTPUT_BOOK; continue; } else if (strcmp(temp, "--continuous") == 0) { OutputType = OUTPUT_CONTINUOUS; continue; } else if (strcmp(temp, "--webpage") == 0) { OutputType = OUTPUT_WEBPAGES; continue; } else if (strcmp(temp, "--encryption") == 0) { Encryption = 1; continue; } else if (strcmp(temp, "--no-encryption") == 0) { Encryption = 0; continue; } else if (strcmp(temp, "--strict") == 0) StrictHTML = 1; else if (strcmp(temp, "--no-strict") == 0) StrictHTML = 0; else if (strcmp(temp, "--overflow") == 0) OverflowErrors = 1; else if (strcmp(temp, "--no-overflow") == 0) OverflowErrors = 0; if (*lineptr == '\"') { lineptr ++; for (tempptr = temp2; *lineptr != '\0' && *lineptr != '\"'; lineptr ++) if (tempptr < (temp2 + sizeof(temp2) - 1)) *tempptr++ = *lineptr; if (*lineptr == '\"') lineptr ++; } else { for (tempptr = temp2; *lineptr != '\0' && *lineptr != ' '; lineptr ++) if (tempptr < (temp2 + sizeof(temp2) - 1)) *tempptr++ = *lineptr; } *tempptr = '\0'; if (strcmp(temp, "-t") == 0 && !CGIMode) { if (strcmp(temp2, "html") == 0) *exportfunc = (exportfunc_t)html_export; else if (strcmp(temp2, "htmlsep") == 0) *exportfunc = (exportfunc_t)htmlsep_export; else if (strcmp(temp2, "ps1") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 1; } else if (strcmp(temp2, "ps") == 0 || strcmp(temp2, "ps2") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 2; } else if (strcmp(temp2, "ps3") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 3; } else if (strcmp(temp2, "pdf11") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 11; } else if (strcmp(temp2, "pdf12") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 12; } else if (strcmp(temp2, "pdf") == 0 || strcmp(temp2, "pdf13") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 13; } else if (strcmp(temp2, "pdf14") == 0) { *exportfunc = (exportfunc_t)pspdf_export; PSLevel = 0; PDFVersion = 14; } } else if (strcmp(temp, "--logo") == 0 || strcmp(temp, "--logoimage") == 0) strlcpy(LogoImage, temp2, sizeof(LogoImage)); else if (strcmp(temp, "--titlefile") == 0 || strcmp(temp, "--titleimage") == 0) { TitlePage = 1; strlcpy(TitleImage, temp2, sizeof(TitleImage)); } else if (strcmp(temp, "-f") == 0 && !CGIMode) { OutputFiles = 0; strlcpy(OutputPath, temp2, sizeof(OutputPath)); } else if (strcmp(temp, "-d") == 0 && !CGIMode) { OutputFiles = 1; strlcpy(OutputPath, temp2, sizeof(OutputPath)); } else if (strcmp(temp, "--browserwidth") == 0) _htmlBrowserWidth = atof(temp2); else if (strcmp(temp, "--nup") == 0) NumberUp = atoi(temp2); else if (strcmp(temp, "--size") == 0) set_page_size(temp2); else if (strcmp(temp, "--left") == 0) PageLeft = get_measurement(temp2); else if (strcmp(temp, "--right") == 0) PageRight = get_measurement(temp2); else if (strcmp(temp, "--top") == 0) PageTop = get_measurement(temp2); else if (strcmp(temp, "--bottom") == 0) PageBottom = get_measurement(temp2); else if (strcmp(temp, "--header") == 0) get_format(temp2, Header); else if (strcmp(temp, "--header1") == 0) get_format(temp2, Header1); else if (strcmp(temp, "--footer") == 0) get_format(temp2, Footer); else if (strcmp(temp, "--bodycolor") == 0) strlcpy(BodyColor, temp2, sizeof(BodyColor)); else if (strcmp(temp, "--bodyimage") == 0) strlcpy(BodyImage, temp2, sizeof(BodyImage)); else if (strcmp(temp, "--textcolor") == 0) htmlSetTextColor((uchar *)temp2); else if (strcmp(temp, "--linkcolor") == 0) strlcpy(LinkColor, temp2, sizeof(LinkColor)); else if (strcmp(temp, "--linkstyle") == 0) { if (strcmp(temp2, "plain") == 0) LinkStyle = 0; else LinkStyle = 1; } else if (strcmp(temp, "--toclevels") == 0) TocLevels = atoi(temp2); else if (strcmp(temp, "--tocheader") == 0) get_format(temp2, TocHeader); else if (strcmp(temp, "--tocfooter") == 0) get_format(temp2, TocFooter); else if (strcmp(temp, "--toctitle") == 0) strlcpy(TocTitle, temp2, sizeof(TocTitle)); else if (strcmp(temp, "--fontsize") == 0) { fontsize = atof(temp2); fontspacing = _htmlSpacings[SIZE_P] / _htmlSizes[SIZE_P]; if (fontsize < 4.0f) fontsize = 4.0f; else if (fontsize > 24.0f) fontsize = 24.0f; htmlSetBaseSize(fontsize, fontspacing); } else if (strcmp(temp, "--fontspacing") == 0) { fontsize = _htmlSizes[SIZE_P]; fontspacing = atof(temp2); if (fontspacing < 1.0f) fontspacing = 1.0f; else if (fontspacing > 3.0f) fontspacing = 3.0f; htmlSetBaseSize(fontsize, fontspacing); } else if (!strcmp(temp, "--headingfont")) { if (!strcasecmp(temp2, "courier")) _htmlHeadingFont = TYPE_COURIER; else if (!strcasecmp(temp2, "times")) _htmlHeadingFont = TYPE_TIMES; else if (!strcasecmp(temp2, "helvetica") || !strcasecmp(temp2, "arial")) _htmlHeadingFont = TYPE_HELVETICA; else if (!strcasecmp(temp2, "monospace")) _htmlHeadingFont = TYPE_MONOSPACE; else if (!strcasecmp(temp2, "serif")) _htmlHeadingFont = TYPE_SERIF; else if (!strcasecmp(temp2, "sans")) _htmlHeadingFont = TYPE_SANS_SERIF; } else if (!strcmp(temp, "--bodyfont")) { if (!strcasecmp(temp2, "monospace")) _htmlBodyFont = TYPE_MONOSPACE; else if (!strcasecmp(temp2, "serif")) _htmlBodyFont = TYPE_SERIF; else if (!strcasecmp(temp2, "sans")) _htmlBodyFont = TYPE_SANS_SERIF; else if (!strcasecmp(temp2, "courier")) _htmlBodyFont = TYPE_COURIER; else if (!strcasecmp(temp2, "times")) _htmlBodyFont = TYPE_TIMES; else if (!strcasecmp(temp2, "helvetica") || !strcasecmp(temp2, "arial")) _htmlBodyFont = TYPE_HELVETICA; } else if (strcmp(temp, "--headfootsize") == 0) HeadFootSize = atof(temp2); else if (!strcmp(temp, "--headfootfont")) { if (!strcasecmp(temp2, "courier")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(temp2, "courier-bold")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(temp2, "courier-oblique")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(temp2, "courier-boldoblique")) { HeadFootType = TYPE_COURIER; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(temp2, "times") || !strcasecmp(temp2, "times-roman")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(temp2, "times-bold")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(temp2, "times-italic")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(temp2, "times-bolditalic")) { HeadFootType = TYPE_TIMES; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(temp2, "helvetica")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(temp2, "helvetica-bold")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(temp2, "helvetica-oblique")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(temp2, "helvetica-boldoblique")) { HeadFootType = TYPE_HELVETICA; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(temp2, "monospace")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(temp2, "monospace-bold")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(temp2, "monospace-oblique")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(temp2, "monospace-boldoblique")) { HeadFootType = TYPE_MONOSPACE; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(temp2, "serif") || !strcasecmp(temp2, "serif-roman")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(temp2, "serif-bold")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(temp2, "serif-italic")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(temp2, "serif-bolditalic")) { HeadFootType = TYPE_SERIF; HeadFootStyle = STYLE_BOLD_ITALIC; } else if (!strcasecmp(temp2, "sans")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_NORMAL; } else if (!strcasecmp(temp2, "sans-bold")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_BOLD; } else if (!strcasecmp(temp2, "sans-oblique")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_ITALIC; } else if (!strcasecmp(temp2, "sans-boldoblique")) { HeadFootType = TYPE_SANS_SERIF; HeadFootStyle = STYLE_BOLD_ITALIC; } } else if (strcmp(temp, "--charset") == 0) htmlSetCharSet(temp2); else if (strcmp(temp, "--pagemode") == 0) { for (i = 0; i < (int)(sizeof(PDFModes) / sizeof(PDFModes[0])); i ++) if (strcasecmp(temp2, PDFModes[i]) == 0) { PDFPageMode = i; break; } } else if (strcmp(temp, "--pagelayout") == 0) { for (i = 0; i < (int)(sizeof(PDFLayouts) / sizeof(PDFLayouts[0])); i ++) if (strcasecmp(temp2, PDFLayouts[i]) == 0) { PDFPageLayout = i; break; } } else if (strcmp(temp, "--firstpage") == 0) { for (i = 0; i < (int)(sizeof(PDFPages) / sizeof(PDFPages[0])); i ++) if (strcasecmp(temp2, PDFPages[i]) == 0) { PDFFirstPage = i; break; } } else if (strcmp(temp, "--pageeffect") == 0) { for (i = 0; i < (int)(sizeof(PDFEffects) / sizeof(PDFEffects[0])); i ++) if (strcasecmp(temp2, PDFEffects[i]) == 0) { PDFEffect = i; break; } } else if (strcmp(temp, "--pageduration") == 0) PDFPageDuration = atof(temp2); else if (strcmp(temp, "--effectduration") == 0) PDFEffectDuration = atof(temp2); else if (strcmp(temp, "--permissions") == 0) set_permissions(temp2); else if (strcmp(temp, "--user-password") == 0) strlcpy(UserPassword, temp2, sizeof(UserPassword)); else if (strcmp(temp, "--owner-password") == 0) strlcpy(OwnerPassword, temp2, sizeof(OwnerPassword)); else if (strcmp(temp, "--path") == 0) strlcpy(Path, temp2, sizeof(Path) - 1); else if (strcmp(temp, "--proxy") == 0) { strlcpy(Proxy, temp2, sizeof(Proxy)); file_proxy(Proxy); } else if (strcmp(temp, "--cookies") == 0) file_cookies(temp2); } } // // 'read_file()' - Read a file into the current document. // static int // O - 1 on success, 0 on failure read_file(const char *filename, // I - File/URL to read tree_t **document, // IO - Current document const char *path) // I - Search path { FILE *docfile; // Document file tree_t *file; // HTML document file const char *realname; // Real name of file char base[1024]; // Base directory name of file DEBUG_printf(("read_file(filename=\"%s\", document=%p, path=\"%s\")\n", filename, document, path)); if ((realname = file_find(path, filename)) != NULL) { if ((docfile = fopen(realname, "rb")) != NULL) { /* * Read from a file... */ if (Verbosity > 0) progress_error(HD_ERROR_NONE, "INFO: Reading %s...", filename); _htmlPPI = 72.0f * _htmlBrowserWidth / (PageWidth - PageLeft - PageRight); strlcpy(base, file_directory(filename), sizeof(base)); file = htmlAddTree(NULL, MARKUP_FILE, NULL); htmlSetVariable(file, (uchar *)"_HD_FILENAME", (uchar *)file_basename(filename)); htmlSetVariable(file, (uchar *)"_HD_BASE", (uchar *)base); htmlReadFile(file, docfile, base); fclose(docfile); if (*document == NULL) *document = file; else { while ((*document)->next != NULL) *document = (*document)->next; (*document)->next = file; file->prev = *document; } } else { file = NULL; progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open \"%s\" for reading...", filename); } } else { file = NULL; progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to find \"%s\"...", filename); } return (file != NULL); } // // 'set_permissions()' - Set the PDF permission bits. // void set_permissions(const char *p) // I - Permission string { char *copyp, // Copy of string *start, // Start of current keyword *ptr; // Pointer into string // Range check input... if (!p || !*p) return; // Make a copy of the string and parse it... copyp = strdup(p); if (!copyp) return; for (start = copyp; *start; start = ptr) { for (ptr = start; *ptr; ptr ++) if (*ptr == ',') { *ptr++ = '\0'; break; } if (!strcasecmp(start, "all")) Permissions = -4; else if (!strcasecmp(start, "none")) Permissions = -64; else if (!strcasecmp(start, "print")) Permissions |= PDF_PERM_PRINT; else if (!strcasecmp(start, "no-print")) Permissions &= ~PDF_PERM_PRINT; else if (!strcasecmp(start, "modify")) Permissions |= PDF_PERM_MODIFY; else if (!strcasecmp(start, "no-modify")) Permissions &= ~PDF_PERM_MODIFY; else if (!strcasecmp(start, "copy")) Permissions |= PDF_PERM_COPY; else if (!strcasecmp(start, "no-copy")) Permissions &= ~PDF_PERM_COPY; else if (!strcasecmp(start, "annotate")) Permissions |= PDF_PERM_ANNOTATE; else if (!strcasecmp(start, "no-annotate")) Permissions &= ~PDF_PERM_ANNOTATE; } if (Permissions != -4) Encryption = 1; } #ifndef WIN32 // // 'term_handler()' - Handle CTRL-C or kill signals... // static void term_handler(int signum) // I - Signal number { REF(signum); file_cleanup(); image_flush_cache(); exit(1); } #endif // !WIN32 /* * 'usage()' - Show program version and command-line options. */ static void usage(const char *arg) // I - Bad argument string { if (CGIMode) puts("Content-Type: text/plain\r\n\r"); puts("HTMLDOC Version " SVERSION " Copyright 1997-2006 Easy Software Products, All Rights Reserved."); puts("This software is based in part on the work of the Independent JPEG Group."); puts(""); if (CGIMode) { puts("HTMLDOC is running in CGI mode. To disable CGI mode when running"); puts("from a server-side script/page, set the HTMLDOC_NOCGI environment"); puts("variable prior to running HTMLDOC."); puts(""); puts("If you are trying to use CGI mode, make sure that the ServerName"); puts("for the web server is accessible from the local system. If you"); puts("are using Apache 2.0.30 or later, make sure you set 'AcceptPathInfo'"); puts("to 'On' for the HTMLDOC/cgi-bin directory."); } else { if (arg && arg[0] == '-') printf("ERROR: Bad option argument \"%s\"!\n\n", arg); else printf("ERROR: %s\n", arg); puts(""); puts("Usage:"); puts(" htmldoc [options] filename1.html [ ... filenameN.html ]"); #ifdef HAVE_LIBFLTK puts(" htmldoc filename.book"); #endif // HAVE_LIBFLTK puts(""); puts("Options:"); puts(""); puts(" --batch filename.book"); puts(" --bodycolor color"); puts(" --bodyfont {courier,helvetica,monospace,sans,serif,times}"); puts(" --bodyimage filename.{bmp,gif,jpg,png}"); puts(" --book"); puts(" --bottom margin{in,cm,mm}"); puts(" --browserwidth pixels"); puts(" --charset {cp-874...1258,iso-8859-1...8859-15,koi8-r}"); puts(" --color"); puts(" --compression[=level]"); puts(" --continuous"); puts(" --cookies 'name=\"value with space\"; name=value'"); puts(" --datadir directory"); puts(" --duplex"); puts(" --effectduration {0.1..10.0}"); puts(" --embedfonts"); puts(" --encryption"); puts(" --firstpage {p1,toc,c1}"); puts(" --fontsize {4.0..24.0}"); puts(" --fontspacing {1.0..3.0}"); puts(" --footer fff"); puts(" {--format, -t} {ps1,ps2,ps3,pdf11,pdf12,pdf13,pdf14,html,htmlsep}"); puts(" --gray"); puts(" --header fff"); puts(" --header1 fff"); puts(" --headfootfont {courier{-bold,-oblique,-boldoblique},\n" " helvetica{-bold,-oblique,-boldoblique},\n" " monospace{-bold,-oblique,-boldoblique},\n" " sans{-bold,-oblique,-boldoblique},\n" " serif{-bold,-italic,-bolditalic},\n" " times{-roman,-bold,-italic,-bolditalic}}\n"); puts(" --headfootsize {6.0..24.0}"); puts(" --headingfont {courier,helvetica,monospace,sans,serif,times}"); puts(" --help"); #ifdef HAVE_LIBFLTK puts(" --helpdir directory"); #endif // HAVE_LIBFLTK for (int i = 0; i < MAX_HF_IMAGES; i ++) printf(" --hfimage%d filename.{bmp,gif,jpg,png}\n", i); puts(" --jpeg[=quality]"); puts(" --landscape"); puts(" --left margin{in,cm,mm}"); puts(" --linkcolor color"); puts(" --links"); puts(" --linkstyle {plain,underline}"); puts(" --logoimage filename.{bmp,gif,jpg,png}"); puts(" --no-compression"); puts(" --no-duplex"); puts(" --no-embedfonts"); puts(" --no-encryption"); puts(" --no-links"); puts(" --no-localfiles"); puts(" --no-numbered"); puts(" --no-overflow"); puts(" --no-pscommands"); puts(" --no-strict"); puts(" --no-title"); puts(" --no-toc"); puts(" --numbered"); puts(" --nup {1,2,4,6,9,16}"); puts(" {--outdir, -d} dirname"); puts(" {--outfile, -f} filename.{ps,pdf,html}"); puts(" --overflow"); puts(" --owner-password password"); puts(" --pageduration {1.0..60.0}"); puts(" --pageeffect {none,bi,bo,d,gd,gdr,gr,hb,hsi,hso,vb,vsi,vso,wd,wl,wr,wu}"); puts(" --pagelayout {single,one,twoleft,tworight}"); puts(" --pagemode {document,outline,fullscreen}"); puts(" --path \"dir1;dir2;dir3;...;dirN\""); puts(" --permissions {all,annotate,copy,modify,print,no-annotate,no-copy,no-modify,no-print,none}"); puts(" --portrait"); puts(" --proxy http://host:port"); puts(" --pscommands"); puts(" --quiet"); puts(" --referer url"); puts(" --right margin{in,cm,mm}"); puts(" --size {letter,a4,WxH{in,cm,mm},etc}"); puts(" --strict"); puts(" --textcolor color"); puts(" --textfont {courier,times,helvetica}"); puts(" --title"); puts(" --titlefile filename.{htm,html,shtml}"); puts(" --titleimage filename.{bmp,gif,jpg,png}"); puts(" --tocfooter fff"); puts(" --tocheader fff"); puts(" --toclevels levels"); puts(" --toctitle string"); puts(" --top margin{in,cm,mm}"); puts(" --user-password password"); puts(" {--verbose, -v}"); puts(" --version"); puts(" --webpage"); puts(""); puts(" fff = heading format string; each \'f\' can be one of:"); puts(""); puts(" . = blank"); puts(" / = n/N arabic page numbers (1/3, 2/3, 3/3)"); puts(" : = c/C arabic chapter page numbers (1/2, 2/2, 1/4, 2/4, ...)"); puts(" 1 = arabic numbers (1, 2, 3, ...)"); puts(" a = lowercase letters"); puts(" A = uppercase letters"); puts(" c = current chapter heading"); puts(" C = current chapter page number (arabic)"); puts(" d = current date"); puts(" D = current date and time"); puts(" h = current heading"); puts(" i = lowercase roman numerals"); puts(" I = uppercase roman numerals"); puts(" l = logo image"); puts(" t = title text"); puts(" T = current time"); } exit(1); } /* * End of "$Id: htmldoc.cxx 1480 2006-03-30 13:01:20Z mike $". */ htmldoc-1.8.27/htmldoc/htmllib.cxx0100664000212600000240000023560410441610130015533 0ustar mikeuser/* * "$Id: htmllib.cxx 1492 2006-06-07 17:43:52Z mike $" * * HTML parsing routines for HTMLDOC, a HTML document processing program. * * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * htmlReadFile() - Read a file for HTML markup codes. * write_file() - Write a tree entry to a file... * htmlWriteFile() - Write an HTML markup tree to a file. * htmlAddTree() - Add a tree node to the parent. * htmlDeleteTree() - Free all memory associated with a tree... * htmlInsertTree() - Insert a tree node to the parent. * htmlNewTree() - Create a new tree node for the parent. * htmlGetText() - Get all text from the given tree. * htmlGetMeta() - Get document "meta" data... * htmlGetStyle() - Get a style value from a node's STYLE attribute. * htmlGetVariable() - Get a variable value from a markup entry. * htmlLoadFontWidths() - Load all of the font width files. * htmlSetVariable() - Set a variable for a markup entry. * htmlSetBaseSize() - Set the font sizes and spacings... * htmlSetCharSet() - Set the character set for output. * htmlSetTextColor() - Set the default text color. * compare_variables() - Compare two markup variables. * compare_markups() - Compare two markup strings... * delete_node() - Free all memory associated with a node... * insert_space() - Insert a whitespace character before the * specified node. * parse_markup() - Parse a markup string. * parse_variable() - Parse a markup variable string. * compute_size() - Compute the width and height of a tree entry. * compute_color() - Compute the red, green, blue color from the given * get_alignment() - Get horizontal & vertical alignment values. * fix_filename() - Fix a filename to be relative to the base directory. * html_memory_used() - Figure out the amount of memory that was used. * htmlDebugStats() - Display debug statistics for HTML tree memory use. */ /* * Include necessary headers. */ #include "htmldoc.h" #include /* * Markup strings... */ const char *_htmlMarkups[] = { "", /* MARKUP_NONE */ "!--", /* MARKUP_COMMENT */ "!DOCTYPE", "A", "ACRONYM", "ADDRESS", "APPLET", "AREA", "B", "BASE", "BASEFONT", "BIG", "BLINK", "BLOCKQUOTE", "BODY", "BR", "CAPTION", "CENTER", "CITE", "CODE", "COL", "COLGROUP", "DD", "DEL", "DFN", "DIR", "DIV", "DL", "DT", "EM", "EMBED", "FONT", "FORM", "FRAME", "FRAMESET", "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10", "H11", "H12", "H13", "H14", "H15", "HEAD", "HR", "HTML", "I", "IMG", "INPUT", "INS", "ISINDEX", "KBD", "LI", "LINK", "MAP", "MENU", "META", "MULTICOL", "NOBR", "NOFRAMES", "OL", "OPTION", "P", "PRE", "S", "SAMP", "SCRIPT", "SELECT", "SMALL", "SPACER", "STRIKE", "STRONG", "STYLE", "SUB", "SUP", "TABLE", "TBODY", "TD", "TEXTAREA", "TFOOT", "TH", "THEAD", "TITLE", "TR", "TT", "U", "UL", "VAR", "WBR" }; const char *_htmlData = HTML_DATA; /* Data directory */ float _htmlPPI = 80.0f; /* Image resolution */ int _htmlGrayscale = 0; /* Grayscale output? */ uchar _htmlTextColor[255] = /* Default text color */ { 0 }; float _htmlBrowserWidth = 680.0f; /* Browser width for pixel scaling */ float _htmlSizes[8] = /* Point size for each HTML size */ { 6.0f, 8.0f, 9.0f, 11.0f, 14.0f, 17.0f, 20.0f, 24.0f }; float _htmlSpacings[8] = /* Line height for each HTML size */ { 7.2f, 9.6f, 10.8f, 13.2f, 16.8f, 20.4f, 24.0f, 28.8f }; typeface_t _htmlBodyFont = TYPE_TIMES, _htmlHeadingFont = TYPE_HELVETICA; int _htmlInitialized = 0; /* Initialized glyphs yet? */ char _htmlCharSet[256] = "iso-8859-1"; /* Character set name */ float _htmlWidths[TYPE_MAX][STYLE_MAX][256]; /* Character widths of fonts */ int _htmlUnicode[256]; /* Character to Unicode mapping */ const char *_htmlGlyphsAll[65536]; /* Character glyphs for Unicode */ const char *_htmlGlyphs[256]; /* Character glyphs for charset */ int _htmlNumSorted = 0; /* Number of sorted glyphs */ const char *_htmlSorted[256]; /* Sorted character glyphs for charset */ uchar _htmlSortedChars[256]; /* Sorted character indices */ const char *_htmlFonts[TYPE_MAX][STYLE_MAX] = { { "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique" }, { "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic" }, { "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique" }, { "Monospace", "Monospace-Bold", "Monospace-Oblique", "Monospace-BoldOblique" }, { "Serif-Roman", "Serif-Bold", "Serif-Oblique", "Serif-BoldOblique" }, { "Sans", "Sans-Bold", "Sans-Oblique", "Sans-BoldOblique" }, { "Symbol", "Symbol", "Symbol", "Symbol" }, { "Dingbats", "Dingbats", "Dingbats", "Dingbats" } }; int _htmlStandardFonts[TYPE_MAX] = { 1, // Courier 1, // Times 1, // Helvetica 0, // Monospace 0, // Sans 0, // Serif 1, // Symbol 0 // Dingbats }; /* * Local functions. */ extern "C" { typedef int (*compare_func_t)(const void *, const void *); } static int write_file(tree_t *t, FILE *fp, int col); static int compare_variables(var_t *v0, var_t *v1); static int compare_markups(uchar **m0, uchar **m1); static void delete_node(tree_t *t); static void insert_space(tree_t *parent, tree_t *t); static int parse_markup(tree_t *t, FILE *fp, int *linenum); static int parse_variable(tree_t *t, FILE *fp, int *linenum); static int compute_size(tree_t *t); static int compute_color(tree_t *t, uchar *color); static int get_alignment(tree_t *t); static const char *fix_filename(char *path, char *base); #define issuper(x) ((x) == MARKUP_CENTER || (x) == MARKUP_DIV ||\ (x) == MARKUP_BLOCKQUOTE) #define isblock(x) ((x) == MARKUP_ADDRESS || \ (x) == MARKUP_P || (x) == MARKUP_PRE ||\ ((x) >= MARKUP_H1 && (x) <= MARKUP_H6) ||\ (x) == MARKUP_HR || (x) == MARKUP_TABLE) #define islist(x) ((x) == MARKUP_DL || (x) == MARKUP_OL ||\ (x) == MARKUP_UL || (x) == MARKUP_DIR ||\ (x) == MARKUP_MENU) #define islentry(x) ((x) == MARKUP_LI || (x) == MARKUP_DD ||\ (x) == MARKUP_DT) #define istable(x) ((x) == MARKUP_TBODY || (x) == MARKUP_THEAD ||\ (x) == MARKUP_TFOOT || (x) == MARKUP_TR) #define istentry(x) ((x) == MARKUP_TD || (x) == MARKUP_TH) #ifdef DEBUG static uchar indent[255] = ""; #endif /* DEBUG */ /* * 'htmlReadFile()' - Read a file for HTML markup codes. */ tree_t * // O - Pointer to top of file tree htmlReadFile(tree_t *parent, // I - Parent tree entry FILE *fp, // I - File pointer const char *base) // I - Base directory for file { int ch; // Character from file uchar *ptr, // Pointer in string entity[16], // Character entity name (&#nnn; or &name;) *eptr; // Pointer in entity string tree_t *tree, // "top" of this tree *t, // New tree entry *prev, // Previous tree entry *temp; // Temporary looping var int descend; // Descend into node? FILE *embed; // File pointer for EMBED char newbase[1024]; // New base directory for EMBED uchar *filename, // Filename for EMBED tag *face, // Typeface for FONT tag *color, // Color for FONT tag *size, // Size for FONT tag *type; // Type for EMBED tag int sizeval; // Size value from FONT tag int linenum; // Line number in file static uchar s[10240]; // String from file static int have_whitespace = 0; // Non-zero if there was leading whitespace DEBUG_printf(("htmlReadFile(parent=%p, fp=%p, base=\"%s\")\n", parent, fp, base ? base : "(null)")); #ifdef DEBUG indent[0] = '\0'; #endif // DEBUG /* * Start off with no previous tree entry... */ prev = NULL; tree = NULL; /* * Parse data until we hit end-of-file... */ linenum = 1; while ((ch = getc(fp)) != EOF) { /* * Ignore leading whitespace... */ if (parent == NULL || !parent->preformatted) { while (isspace(ch)) { if (ch == '\n') linenum ++; have_whitespace = 1; ch = getc(fp); } if (ch == EOF) break; } /* * Allocate a new tree entry - use calloc() to get zeroed data... */ t = (tree_t *)calloc(sizeof(tree_t), 1); if (t == NULL) { #ifndef DEBUG progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for HTML tree node!"); #endif /* !DEBUG */ break; } /* * Set/copy font characteristics... */ if (parent == NULL) { t->halignment = ALIGN_LEFT; t->valignment = ALIGN_BOTTOM; t->typeface = _htmlBodyFont; t->size = SIZE_P; compute_color(t, _htmlTextColor); } else { t->link = parent->link; t->halignment = parent->halignment; t->valignment = parent->valignment; t->typeface = parent->typeface; t->size = parent->size; t->style = parent->style; t->superscript = parent->superscript; t->subscript = parent->subscript; t->preformatted = parent->preformatted; t->indent = parent->indent; t->red = parent->red; t->green = parent->green; t->blue = parent->blue; t->underline = parent->underline; t->strikethrough = parent->strikethrough; } /* * See what the character was... */ if (ch == '<') { /* * Markup char; grab the next char to see if this is a /... */ ch = getc(fp); if (isspace(ch) || ch == '=' || ch == '<') { /* * Sigh... "<" followed by anything but an element name is * invalid HTML, but so many people have asked for this to * be supported that we have added this hack... */ progress_error(HD_ERROR_HTML_ERROR, "Unquoted < on line %d.", linenum); if (ch == '\n') linenum ++; ptr = s; if (have_whitespace) { *ptr++ = ' '; have_whitespace = 0; } *ptr++ = '<'; if (ch == '=') *ptr++ = '='; else if (ch == '<') ungetc(ch, fp); else have_whitespace = 1; *ptr++ = '\0'; t->markup = MARKUP_NONE; t->data = (uchar *)strdup((char *)s); } else { /* * Start of a markup... */ if (ch != '/') ungetc(ch, fp); if (parse_markup(t, fp, &linenum) == MARKUP_ERROR) { #ifndef DEBUG progress_error(HD_ERROR_READ_ERROR, "Unable to parse HTML element on line %d!", linenum); #endif /* !DEBUG */ delete_node(t); break; } /* * Eliminate extra whitespace... */ if (issuper(t->markup) || isblock(t->markup) || islist(t->markup) || islentry(t->markup) || istable(t->markup) || istentry(t->markup) || t->markup == MARKUP_TITLE) have_whitespace = 0; /* * If this is the matching close mark, or if we are starting the same * markup, or if we've completed a list, we're done! */ if (ch == '/') { /* * Close markup; find matching markup... */ for (temp = parent; temp != NULL; temp = temp->parent) if (temp->markup == t->markup) break; else if (temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (t->markup == MARKUP_BODY || t->markup == MARKUP_HEAD) { /* * Make sure we aren't inside an existing HEAD or BODY... */ for (temp = parent; temp != NULL; temp = temp->parent) if (temp->markup == MARKUP_BODY || temp->markup == MARKUP_HEAD) break; else if (temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (t->markup == MARKUP_EMBED) { /* * Close any text blocks... */ for (temp = parent; temp != NULL; temp = temp->parent) if (isblock(temp->markup) || islentry(temp->markup)) break; else if (istentry(temp->markup) || islist(temp->markup) || issuper(temp->markup) || temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (issuper(t->markup)) { for (temp = parent; temp != NULL; temp = temp->parent) if (istentry(temp->markup) || temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (islist(t->markup)) { for (temp = parent; temp != NULL; temp = temp->parent) if (isblock(temp->markup)) break; else if (islentry(temp->markup) || istentry(temp->markup) || issuper(temp->markup) || temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (islentry(t->markup)) { for (temp = parent; temp != NULL; temp = temp->parent) if (islentry(temp->markup)) break; else if (islist(temp->markup) || issuper(temp->markup) || istentry(temp->markup) || temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (isblock(t->markup)) { for (temp = parent; temp != NULL; temp = temp->parent) if (isblock(temp->markup)) break; else if (istentry(temp->markup) || islist(temp->markup) || islentry(temp->markup) || issuper(temp->markup) || temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (istable(t->markup)) { for (temp = parent; temp != NULL; temp = temp->parent) if (istable(temp->markup)) break; else if (temp->markup == MARKUP_TABLE || temp->markup == MARKUP_EMBED) { temp = NULL; break; } } else if (istentry(t->markup)) { for (temp = parent; temp != NULL; temp = temp->parent) if (istentry(temp->markup)) break; else if (temp->markup == MARKUP_TABLE || istable(temp->markup) || temp->markup == MARKUP_EMBED) { if (temp->markup != MARKUP_TR) { // Strictly speaking, this is an error - TD/TH can only // be found under TR, but web browsers automatically // inject a TR... progress_error(HD_ERROR_HTML_ERROR, "No TR element before %s element on line %d.", _htmlMarkups[t->markup], linenum); parent = htmlAddTree(temp, MARKUP_TR, NULL); prev = NULL; DEBUG_printf(("%str (inserted) under %s, line %d\n", indent, _htmlMarkups[temp->markup], linenum)); } temp = NULL; break; } } else temp = NULL; if (temp != NULL) { DEBUG_printf(("%s>>>> Auto-ascend <<<\n", indent)); if (ch != '/' && temp->markup != MARKUP_BODY && temp->markup != MARKUP_DD && temp->markup != MARKUP_DT && temp->markup != MARKUP_HEAD && temp->markup != MARKUP_HTML && temp->markup != MARKUP_LI && temp->markup != MARKUP_OPTION && temp->markup != MARKUP_P && temp->markup != MARKUP_TBODY && temp->markup != MARKUP_TD && temp->markup != MARKUP_TFOOT && temp->markup != MARKUP_TH && temp->markup != MARKUP_THEAD && temp->markup != MARKUP_TR) { // Log this condition as an error... progress_error(HD_ERROR_HTML_ERROR, "No /%s element before %s element on line %d.", _htmlMarkups[temp->markup], _htmlMarkups[t->markup], linenum); DEBUG_printf(("%sNo /%s element before %s element on line %d.\n", indent, _htmlMarkups[temp->markup], _htmlMarkups[t->markup], linenum)); } #ifdef DEBUG for (tree_t *p = parent; p && p != temp && indent[0]; p = p->parent) indent[strlen((char *)indent) - 4] = '\0'; if (indent[0]) indent[strlen((char *)indent) - 4] = '\0'; #endif // DEBUG // Safety check; should never happen, since MARKUP_FILE is // the root node created by the caller... if (temp->parent) { parent = temp->parent; prev = parent->last_child; } else { for (prev = temp; prev->next; prev = prev->next); parent = NULL; } if (ch == '/') { // Closing element, so delete this node... delete_node(t); continue; } else { // Reparent the node... if (parent == NULL) { t->halignment = ALIGN_LEFT; t->valignment = ALIGN_BOTTOM; t->typeface = _htmlBodyFont; t->size = SIZE_P; compute_color(t, _htmlTextColor); } else { t->link = parent->link; t->halignment = parent->halignment; t->valignment = parent->valignment; t->typeface = parent->typeface; t->size = parent->size; t->style = parent->style; t->superscript = parent->superscript; t->subscript = parent->subscript; t->preformatted = parent->preformatted; t->indent = parent->indent; t->red = parent->red; t->green = parent->green; t->blue = parent->blue; t->underline = parent->underline; t->strikethrough = parent->strikethrough; } } } else if (ch == '/') { // Log this condition as an error... if (t->markup != MARKUP_UNKNOWN && t->markup != MARKUP_COMMENT) { progress_error(HD_ERROR_HTML_ERROR, "Dangling /%s element on line %d.", _htmlMarkups[t->markup], linenum); DEBUG_printf(("%sDangling /%s element on line %d.\n", indent, _htmlMarkups[t->markup], linenum)); } delete_node(t); continue; } } } else if (t->preformatted) { /* * Read a pre-formatted string into the current tree entry... */ ptr = s; while (ch != '<' && ch != EOF && ptr < (s + sizeof(s) - 1)) { if (ch == '&') { // Possibly a character entity... eptr = entity; while (eptr < (entity + sizeof(entity) - 1) && (ch = getc(fp)) != EOF) if (!isalnum(ch) && ch != '#') break; else *eptr++ = ch; if (ch != ';') { ungetc(ch, fp); ch = 0; } *eptr = '\0'; if (!ch) { progress_error(HD_ERROR_HTML_ERROR, "Unquoted & on line %d.", linenum); if (ptr < (s + sizeof(s) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(s) - (ptr - s)); ptr += strlen((char *)ptr); } else if ((ch = iso8859(entity)) == 0) { progress_error(HD_ERROR_HTML_ERROR, "Unknown character entity \"&%s;\" on line %d.", entity, linenum); if (ptr < (s + sizeof(s) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(s) - (ptr - s)); ptr += strlen((char *)ptr); if (ptr < (s + sizeof(s) - 1)) *ptr++ = ';'; } else *ptr++ = ch; } else if (ch != 0 && ch != '\r') { *ptr++ = ch; if (ch == '\n') { linenum ++; break; } } ch = getc(fp); } *ptr = '\0'; if (ch == '<') ungetc(ch, fp); t->markup = MARKUP_NONE; t->data = (uchar *)strdup((char *)s); DEBUG_printf(("%sfragment \"%s\", line %d\n", indent, s, linenum)); } else { /* * Read the next string fragment... */ ptr = s; if (have_whitespace) { *ptr++ = ' '; have_whitespace = 0; } while (!isspace(ch) && ch != '<' && ch != EOF && ptr < (s + sizeof(s) - 1)) { if (ch == '&') { // Possibly a character entity... eptr = entity; while (eptr < (entity + sizeof(entity) - 1) && (ch = getc(fp)) != EOF) if (!isalnum(ch) && ch != '#') break; else *eptr++ = ch; *eptr = '\0'; if (ch != ';') { ungetc(ch, fp); ch = 0; } if (!ch) { progress_error(HD_ERROR_HTML_ERROR, "Unquoted & on line %d.", linenum); if (ptr < (s + sizeof(s) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(s) - (ptr - s)); ptr += strlen((char *)ptr); } else if ((ch = iso8859(entity)) == 0) { progress_error(HD_ERROR_HTML_ERROR, "Unknown character entity \"&%s;\" on line %d.", entity, linenum); if (ptr < (s + sizeof(s) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(s) - (ptr - s)); ptr += strlen((char *)ptr); if (ptr < (s + sizeof(s) - 1)) *ptr++ = ';'; } else *ptr++ = ch; } else if (ch) *ptr++ = ch; ch = getc(fp); } if (ch == '\n') linenum ++; if (isspace(ch)) have_whitespace = 1; *ptr = '\0'; if (ch == '<') ungetc(ch, fp); t->markup = MARKUP_NONE; t->data = (uchar *)strdup((char *)s); DEBUG_printf(("%sfragment \"%s\" (len=%d), line %d\n", indent, s, (int)(ptr - s), linenum)); } /* * If the parent tree pointer is not null and this is the first * entry we've read, set the child pointer... */ DEBUG_printf(("%sADDING %s node to %s parent!\n", indent, _htmlMarkups[t->markup], parent ? _htmlMarkups[parent->markup] : "ROOT")); if (parent != NULL && prev == NULL) parent->child = t; if (parent != NULL) parent->last_child = t; /* * Do the prev/next links... */ t->parent = parent; t->prev = prev; if (prev != NULL) prev->next = t; if (tree == NULL) tree = t; prev = t; /* * Do markup-specific stuff... */ descend = 0; switch (t->markup) { case MARKUP_BODY : /* * Update the text color as necessary... */ if ((color = htmlGetVariable(t, (uchar *)"TEXT")) != NULL) compute_color(t, color); else compute_color(t, _htmlTextColor); if ((color = htmlGetVariable(t, (uchar *)"BGCOLOR")) != NULL && !BodyColor[0]) strlcpy(BodyColor, (char *)color, sizeof(BodyColor)); // Update the background image as necessary... if ((filename = htmlGetVariable(t, (uchar *)"BACKGROUND")) != NULL) htmlSetVariable(t, (uchar *)"BACKGROUND", (uchar *)fix_filename((char *)filename, (char *)base)); descend = 1; break; case MARKUP_IMG : if (have_whitespace) { // Insert a space before this image... insert_space(parent, t); have_whitespace = 0; } // Get the image alignment... t->valignment = ALIGN_BOTTOM; get_alignment(t); // Update the image source as necessary... if ((filename = htmlGetVariable(t, (uchar *)"SRC")) != NULL) htmlSetVariable(t, (uchar *)"REALSRC", (uchar *)fix_filename((char *)filename, (char *)base)); case MARKUP_BR : case MARKUP_NONE : case MARKUP_SPACER : /* * Figure out the width & height of this markup... */ compute_size(t); break; case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : get_alignment(t); t->typeface = _htmlHeadingFont; t->subscript = 0; t->superscript = 0; t->strikethrough = 0; t->preformatted = 0; if (t->markup > MARKUP_H6) { t->size = SIZE_H7; t->style = STYLE_ITALIC; } else { t->size = SIZE_H1 - t->markup + MARKUP_H1; t->style = STYLE_BOLD; } descend = 1; break; case MARKUP_P : get_alignment(t); t->typeface = _htmlBodyFont; t->size = SIZE_P; t->style = STYLE_NORMAL; t->subscript = 0; t->superscript = 0; t->strikethrough = 0; t->preformatted = 0; descend = 1; break; case MARKUP_PRE : t->typeface = _htmlBodyFont >= TYPE_MONOSPACE ? TYPE_MONOSPACE : TYPE_COURIER; t->size = SIZE_PRE; t->style = STYLE_NORMAL; t->subscript = 0; t->superscript = 0; t->strikethrough = 0; t->preformatted = 1; descend = 1; break; case MARKUP_BLOCKQUOTE : case MARKUP_DIR : case MARKUP_MENU : case MARKUP_UL : case MARKUP_OL : case MARKUP_DL : t->indent ++; descend = 1; break; case MARKUP_DIV : get_alignment(t); descend = 1; break; case MARKUP_HR : t->halignment = ALIGN_CENTER; get_alignment(t); break; case MARKUP_DOCTYPE : case MARKUP_AREA : case MARKUP_COMMENT : case MARKUP_INPUT : case MARKUP_ISINDEX : case MARKUP_LINK : case MARKUP_META : case MARKUP_WBR : case MARKUP_COL : break; case MARKUP_EMBED : if ((type = htmlGetVariable(t, (uchar *)"TYPE")) != NULL && strncasecmp((const char *)type, "text/html", 9) != 0) break; if ((filename = htmlGetVariable(t, (uchar *)"SRC")) != NULL) { filename = (uchar *)fix_filename((char *)filename, (char *)base); if ((embed = fopen((char *)filename, "r")) != NULL) { strlcpy(newbase, file_directory((char *)filename), sizeof(newbase)); htmlReadFile(t, embed, newbase); fclose(embed); } #ifndef DEBUG else progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to embed \"%s\" - %s", filename, strerror(errno)); #endif /* !DEBUG */ } break; case MARKUP_TH : if (htmlGetVariable(t->parent, (uchar *)"ALIGN") != NULL) t->halignment = t->parent->halignment; else t->halignment = ALIGN_CENTER; if (htmlGetVariable(t->parent, (uchar *)"VALIGN") != NULL) t->valignment = t->parent->valignment; else t->valignment = ALIGN_MIDDLE; get_alignment(t); t->style = STYLE_BOLD; descend = 1; break; case MARKUP_TD : if (htmlGetVariable(t->parent, (uchar *)"ALIGN") != NULL) t->halignment = t->parent->halignment; else t->halignment = ALIGN_LEFT; if (htmlGetVariable(t->parent, (uchar *)"VALIGN") != NULL) t->valignment = t->parent->valignment; else t->valignment = ALIGN_MIDDLE; get_alignment(t); t->style = STYLE_NORMAL; descend = 1; break; case MARKUP_FONT : if (have_whitespace) { // Insert a space before this element... insert_space(parent, t); have_whitespace = 0; } if ((face = htmlGetVariable(t, (uchar *)"FACE")) != NULL) { char font[255], // Font name *fontptr; // Pointer into font name for (ptr = face; *ptr;) { while (isspace(*ptr) || *ptr == ',') ptr ++; if (!*ptr) break; for (fontptr = font; *ptr && *ptr != ',' && !isspace(*ptr); ptr ++) if (fontptr < (font + sizeof(font) - 1)) *fontptr++ = *ptr; *fontptr = '\0'; if (!strcasecmp(font, "serif")) { t->typeface = TYPE_SERIF; break; } else if (!strcasecmp(font, "sans-serif") || !strcasecmp(font, "sans")) { t->typeface = TYPE_SANS_SERIF; break; } else if (!strcasecmp(font, "mono")) { t->typeface = TYPE_MONOSPACE; break; } else if (!strcasecmp(font, "arial") || !strcasecmp(font, "helvetica")) { t->typeface = TYPE_HELVETICA; break; } else if (!strcasecmp(font, "times")) { t->typeface = TYPE_TIMES; break; } else if (!strcasecmp(font, "courier")) { t->typeface = TYPE_COURIER; break; } else if (!strcasecmp(font, "symbol")) { t->typeface = TYPE_SYMBOL; break; } else if (!strcasecmp(font, "dingbat")) { t->typeface = TYPE_DINGBATS; break; } } } if ((color = htmlGetVariable(t, (uchar *)"COLOR")) != NULL) compute_color(t, color); if ((size = htmlGetVariable(t, (uchar *)"SIZE")) != NULL) { if (have_whitespace) { // Insert a space before sized text... insert_space(parent, t); have_whitespace = 0; } if (isdigit(size[0])) sizeval = atoi((char *)size); else sizeval = t->size + atoi((char *)size); if (sizeval < 0) t->size = 0; else if (sizeval > 7) t->size = 7; else t->size = sizeval; } descend = 1; break; case MARKUP_BIG : if (have_whitespace) { // Insert a space before big text... insert_space(parent, t); have_whitespace = 0; } if (t->size < 6) t->size += 2; else t->size = 7; descend = 1; break; case MARKUP_SMALL : if (have_whitespace) { // Insert a space before small text... insert_space(parent, t); have_whitespace = 0; } if (t->size > 2) t->size -= 2; else t->size = 0; descend = 1; break; case MARKUP_SUP : if (have_whitespace) { // Insert a space before superscript text... insert_space(parent, t); have_whitespace = 0; } t->superscript = 1; if ((sizeval = t->size + SIZE_SUP) < 0) t->size = 0; else t->size = sizeval; descend = 1; break; case MARKUP_SUB : if (have_whitespace) { // Insert a space before subscript text... insert_space(parent, t); have_whitespace = 0; } t->subscript = 1; if ((sizeval = t->size + SIZE_SUB) < 0) t->size = 0; else t->size = sizeval; descend = 1; break; case MARKUP_KBD : t->style = STYLE_BOLD; case MARKUP_TT : case MARKUP_CODE : case MARKUP_SAMP : if (isspace(ch = getc(fp))) have_whitespace = 1; else ungetc(ch, fp); if (have_whitespace) { // Insert a space before monospaced text... insert_space(parent, t); have_whitespace = 0; } t->typeface = _htmlBodyFont >= TYPE_MONOSPACE ? TYPE_MONOSPACE : TYPE_COURIER; descend = 1; break; case MARKUP_STRONG : case MARKUP_B : t->style = (style_t)(t->style | STYLE_BOLD); descend = 1; break; case MARKUP_DD : t->indent ++; descend = 1; break; case MARKUP_VAR : t->style = (style_t)(t->style | STYLE_ITALIC); case MARKUP_DFN : t->typeface = _htmlBodyFont >= TYPE_MONOSPACE ? TYPE_SANS_SERIF : TYPE_HELVETICA; descend = 1; break; case MARKUP_CITE : case MARKUP_EM : case MARKUP_I : t->style = (style_t)(t->style | STYLE_ITALIC); descend = 1; break; case MARKUP_U : case MARKUP_INS : if (have_whitespace) { // Insert a space before underlined text... insert_space(parent, t); have_whitespace = 0; } t->underline = 1; descend = 1; break; case MARKUP_STRIKE : case MARKUP_S : case MARKUP_DEL : if (have_whitespace) { // Insert a space before struck-through text... insert_space(parent, t); have_whitespace = 0; } t->strikethrough = 1; descend = 1; break; case MARKUP_CENTER : t->halignment = ALIGN_CENTER; descend = 1; break; case MARKUP_A : if (have_whitespace) { // Insert a space before this link... insert_space(parent, t); have_whitespace = 0; } descend = 1; break; default : /* * All other markup types should be using ... */ get_alignment(t); descend = 1; break; } if (descend) { #ifdef DEBUG strlcat((char *)indent, " ", sizeof(indent)); #endif // DEBUG parent = t; prev = NULL; } } return (tree); } /* * 'write_file()' - Write a tree entry to a file... */ static int /* I - New column */ write_file(tree_t *t, /* I - Tree entry */ FILE *fp, /* I - File to write to */ int col) /* I - Current column */ { int i; /* Looping var */ uchar *ptr; /* Character pointer */ while (t != NULL) { if (t->markup == MARKUP_NONE) { if (t->preformatted) { for (ptr = t->data; *ptr != '\0'; ptr ++) fputs((char *)iso8859(*ptr), fp); if (t->data[strlen((char *)t->data) - 1] == '\n') col = 0; else col += strlen((char *)t->data); } else { if ((col + strlen((char *)t->data)) > 72 && col > 0) { putc('\n', fp); col = 0; } for (ptr = t->data; *ptr != '\0'; ptr ++) fputs((char *)iso8859(*ptr), fp); col += strlen((char *)t->data); if (col > 72) { putc('\n', fp); col = 0; } } } else if (t->markup == MARKUP_COMMENT) fprintf(fp, "\n\n", t->data); else if (t->markup > 0) { switch (t->markup) { case MARKUP_AREA : case MARKUP_BR : case MARKUP_CENTER : case MARKUP_COMMENT : case MARKUP_DD : case MARKUP_DL : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_HEAD : case MARKUP_HR : case MARKUP_LI : case MARKUP_MAP : case MARKUP_OL : case MARKUP_P : case MARKUP_PRE : case MARKUP_TABLE : case MARKUP_TITLE : case MARKUP_TR : case MARKUP_UL : case MARKUP_DIR : case MARKUP_MENU : if (col > 0) { putc('\n', fp); col = 0; } default : break; } col += fprintf(fp, "<%s", _htmlMarkups[t->markup]); for (i = 0; i < t->nvars; i ++) { if (col > 72 && !t->preformatted) { putc('\n', fp); col = 0; } if (col > 0) { putc(' ', fp); col ++; } if (t->vars[i].value == NULL) col += fprintf(fp, "%s", t->vars[i].name); else if (strchr((char *)t->vars[i].value, '\"') != NULL) col += fprintf(fp, "%s=\'%s\'", t->vars[i].name, t->vars[i].value); else col += fprintf(fp, "%s=\"%s\"", t->vars[i].name, t->vars[i].value); } putc('>', fp); col ++; if (col > 72 && !t->preformatted) { putc('\n', fp); col = 0; } if (t->child != NULL) { col = write_file(t->child, fp, col); if (col > 72 && !t->preformatted) { putc('\n', fp); col = 0; } col += fprintf(fp, "", _htmlMarkups[t->markup]); switch (t->markup) { case MARKUP_AREA : case MARKUP_BR : case MARKUP_CENTER : case MARKUP_COMMENT : case MARKUP_DD : case MARKUP_DL : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_HEAD : case MARKUP_HR : case MARKUP_LI : case MARKUP_MAP : case MARKUP_OL : case MARKUP_P : case MARKUP_PRE : case MARKUP_TABLE : case MARKUP_TITLE : case MARKUP_TR : case MARKUP_UL : case MARKUP_DIR : case MARKUP_MENU : putc('\n', fp); col = 0; default : break; } } } t = t->next; } return (col); } /* * 'htmlWriteFile()' - Write an HTML markup tree to a file. */ int /* O - Write status: 0 = success, -1 = fail */ htmlWriteFile(tree_t *parent, /* I - Parent tree entry */ FILE *fp) /* I - File to write to */ { if (write_file(parent, fp, 0) < 0) return (-1); else return (0); } /* * 'htmlAddTree()' - Add a tree node to the parent. */ tree_t * /* O - New entry */ htmlAddTree(tree_t *parent, /* I - Parent entry */ markup_t markup, /* I - Markup code */ uchar *data) /* I - Data/text */ { tree_t *t; /* New tree entry */ if ((t = htmlNewTree(parent, markup, data)) == NULL) return (NULL); /* * Add the tree entry to the end of the chain of children... */ if (parent != NULL) { if (parent->last_child != NULL) { parent->last_child->next = t; t->prev = parent->last_child; } else parent->child = t; parent->last_child = t; } return (t); } /* * 'htmlDeleteTree()' - Free all memory associated with a tree... */ int /* O - 0 for success, -1 for failure */ htmlDeleteTree(tree_t *parent) /* I - Parent to delete */ { tree_t *next; /* Next tree entry */ if (parent == NULL) return (-1); while (parent != NULL) { next = parent->next; if (parent->child != NULL) if (htmlDeleteTree(parent->child)) return (-1); delete_node(parent); parent = next; } return (0); } /* * 'htmlInsertTree()' - Insert a tree node under the parent. */ tree_t * /* O - New entry */ htmlInsertTree(tree_t *parent,/* I - Parent entry */ markup_t markup, /* I - Markup code */ uchar *data) /* I - Data/text */ { tree_t *t; /* New tree entry */ if ((t = htmlNewTree(parent, markup, data)) == NULL) return (NULL); /* * Insert the tree entry at the beginning of the chain of children... */ if (parent != NULL) { if (parent->child != NULL) { parent->child->prev = t; t->next = parent->child; } else parent->last_child = t; parent->child = t; } return (t); } /* * 'htmlNewTree()' - Create a new tree node for the parent. */ tree_t * /* O - New entry */ htmlNewTree(tree_t *parent, /* I - Parent entry */ markup_t markup, /* I - Markup code */ uchar *data) /* I - Data/text */ { tree_t *t; /* New tree entry */ /* * Allocate a new tree entry - use calloc() to get zeroed data... */ t = (tree_t *)calloc(sizeof(tree_t), 1); if (t == NULL) return (NULL); /* * Set the markup code and copy the data if necessary... */ t->markup = markup; if (data != NULL) t->data = (uchar *)strdup((char *)data); /* * Set/copy font characteristics... */ if (parent == NULL) { t->halignment = ALIGN_LEFT; t->valignment = ALIGN_BOTTOM; t->typeface = _htmlBodyFont; t->size = SIZE_P; compute_color(t, _htmlTextColor); } else { t->link = parent->link; t->halignment = parent->halignment; t->valignment = parent->valignment; t->typeface = parent->typeface; t->size = parent->size; t->style = parent->style; t->preformatted = parent->preformatted; t->indent = parent->indent; t->red = parent->red; t->green = parent->green; t->blue = parent->blue; t->underline = parent->underline; t->strikethrough = parent->strikethrough; } switch (t->markup) { case MARKUP_NONE : case MARKUP_IMG : /* * Figure out the width & height of this fragment... */ compute_size(t); break; case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : get_alignment(t); t->typeface = _htmlHeadingFont; t->size = SIZE_H1 - t->markup + MARKUP_H1; t->subscript = 0; t->superscript = 0; t->strikethrough = 0; t->preformatted = 0; t->style = STYLE_BOLD; break; case MARKUP_P : get_alignment(t); t->typeface = _htmlBodyFont; t->size = SIZE_P; t->style = STYLE_NORMAL; t->subscript = 0; t->superscript = 0; t->strikethrough = 0; t->preformatted = 0; break; case MARKUP_PRE : t->typeface = _htmlBodyFont >= TYPE_MONOSPACE ? TYPE_MONOSPACE : TYPE_COURIER; t->size = SIZE_PRE; t->style = STYLE_NORMAL; t->subscript = 0; t->superscript = 0; t->strikethrough = 0; t->preformatted = 1; break; case MARKUP_DIV : get_alignment(t); break; case MARKUP_BLOCKQUOTE : t->style = STYLE_ITALIC; case MARKUP_UL : case MARKUP_DIR : case MARKUP_MENU : case MARKUP_OL : case MARKUP_DL : t->indent ++; break; case MARKUP_AREA : case MARKUP_BR : case MARKUP_COMMENT : case MARKUP_HR : case MARKUP_INPUT : case MARKUP_ISINDEX : case MARKUP_META : case MARKUP_WBR : break; case MARKUP_TH : t->style = STYLE_BOLD; case MARKUP_TD : get_alignment(t); break; case MARKUP_SUP : t->superscript = 1; t->size = SIZE_P + SIZE_SUP; break; case MARKUP_SUB : t->subscript = 1; t->size = SIZE_P + SIZE_SUB; break; case MARKUP_B : t->style = (style_t)(t->style | STYLE_BOLD); break; case MARKUP_DD : t->indent ++; break; case MARKUP_DT : case MARKUP_I : t->style = (style_t)(t->style | STYLE_ITALIC); break; case MARKUP_U : case MARKUP_INS : t->underline = 1; break; case MARKUP_STRIKE : case MARKUP_DEL : t->strikethrough = 1; break; default : break; } t->parent = parent; return (t); } /* * 'htmlGetText()' - Get all text from the given tree. */ uchar * /* O - String containing text nodes */ htmlGetText(tree_t *t) /* I - Tree to pick */ { uchar *s, // String *s2, // New string *tdata; // Temporary string data int slen, // Length of string tlen; // Length of node string // Loop through all of the nodes in the tree and collect text... slen = 0; s = NULL; while (t != NULL) { if (t->child) tdata = htmlGetText(t->child); else tdata = t->data; if (tdata != NULL) { // Add the text to this string... tlen = strlen((char *)tdata); if (slen) s2 = (uchar *)realloc(s, 1 + slen + tlen); else s2 = (uchar *)malloc(1 + tlen); if (!s2) break; s = s2; memcpy((char *)s + slen, (char *)tdata, tlen); slen += tlen; if (t->child) free(tdata); } t = t->next; } if (slen) s[slen] = '\0'; return (s); } /* * 'htmlGetMeta()' - Get document "meta" data... */ uchar * /* O - Content string */ htmlGetMeta(tree_t *tree, /* I - Document tree */ uchar *name) /* I - Metadata name */ { uchar *tname, /* Name value from tree entry */ *tcontent; /* Content value from tree entry */ while (tree != NULL) { /* * Check this tree entry... */ if (tree->markup == MARKUP_META && (tname = htmlGetVariable(tree, (uchar *)"NAME")) != NULL && (tcontent = htmlGetVariable(tree, (uchar *)"CONTENT")) != NULL) if (strcasecmp((char *)name, (char *)tname) == 0) return (tcontent); /* * Check child entries... */ if (tree->child != NULL) if ((tcontent = htmlGetMeta(tree->child, name)) != NULL) return (tcontent); /* * Next tree entry... */ tree = tree->next; } return (NULL); } /* * 'htmlGetStyle()' - Get a style value from a node's STYLE attribute. */ uchar * // O - Value or NULL htmlGetStyle(tree_t *t, // I - Node uchar *name) // I - Name (including ":") { uchar *ptr, // Pointer in STYLE attribute *bufptr; // Pointer in buffer int ptrlen, // Length of STYLE attribute namelen; // Length of name static uchar buffer[1024]; // Buffer for value // See if we have a STYLE attribute... if ((ptr = htmlGetVariable(t, (uchar *)"STYLE")) == NULL) return (NULL); // Loop through the STYLE attribute looking for the name... for (namelen = strlen((char *)name), ptrlen = strlen((char *)ptr); ptrlen > namelen; ptr ++, ptrlen --) if (strncasecmp((char *)name, (char *)ptr, namelen) == 0) { for (ptr += namelen; isspace(*ptr); ptr ++); for (bufptr = buffer; *ptr && *ptr != ';' && bufptr < (buffer + sizeof(buffer) - 1); *bufptr++ = *ptr++); *bufptr = '\0'; return (buffer); } return (NULL); } /* * 'htmlGetVariable()' - Get a variable value from a markup entry. */ uchar * /* O - Value or NULL if variable does not exist */ htmlGetVariable(tree_t *t, /* I - Tree entry */ uchar *name) /* I - Variable name */ { var_t *v, /* Matching variable */ key; /* Search key */ if (t == NULL || name == NULL || t->nvars == 0) return (NULL); key.name = name; v = (var_t *)bsearch(&key, t->vars, t->nvars, sizeof(var_t), (compare_func_t)compare_variables); if (v == NULL) return (NULL); else if (v->value == NULL) return ((uchar *)""); else return (v->value); } /* * 'htmlLoadFontWidths()' - Load all of the font width files. */ void htmlLoadFontWidths(void) { int i, j; /* Looping vars */ char filename[1024]; /* Filenames */ FILE *fp; /* Files */ int ch; /* Character */ float width; /* Width value */ char glyph[64]; /* Glyph name */ char line[1024]; /* Line from AFM file */ /* * Now read all of the font widths... */ for (i = 0; i < TYPE_MAX; i ++) for (j = 0; j < STYLE_MAX; j ++) { for (ch = 0; ch < 256; ch ++) _htmlWidths[i][j][ch] = 0.6f; snprintf(filename, sizeof(filename), "%s/fonts/%s.afm", _htmlData, _htmlFonts[i][j]); if ((fp = fopen(filename, "r")) == NULL) { #ifndef DEBUG progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open font width file %s!", filename); #endif /* !DEBUG */ continue; } while (fgets(line, sizeof(line), fp) != NULL) { if (strncmp(line, "C ", 2) != 0) continue; if (i < TYPE_SYMBOL) { /* * Handle encoding of Courier, Times, and Helvetica using * assigned charset... */ if (sscanf(line, "%*s%*s%*s%*s%f%*s%*s%s", &width, glyph) != 2) continue; for (ch = 0; ch < 256; ch ++) if (_htmlGlyphs[ch] && !strcmp(_htmlGlyphs[ch], glyph)) _htmlWidths[i][j][ch] = width * 0.001f; } else { /* * Symbol and dingbats fonts uses their own encoding... */ if (sscanf(line, "%*s%d%*s%*s%f", &ch, &width) != 2) continue; if (ch < 256 && ch >= 0) _htmlWidths[i][j][ch] = width * 0.001f; } } fclose(fp); // Make sure that non-breaking space has the same width as // a breaking space... _htmlWidths[i][j][160] = _htmlWidths[i][j][32]; } } /* * 'htmlSetVariable()' - Set a variable for a markup entry. */ int /* O - Set status: 0 = success, -1 = fail */ htmlSetVariable(tree_t *t, /* I - Tree entry */ uchar *name, /* I - Variable name */ uchar *value) /* I - Variable value */ { var_t *v, /* Matching variable */ key; /* Search key */ DEBUG_printf(("%shtmlSetVariable(%p, \"%s\", \"%s\")\n", indent, t, name, value ? (const char *)value : "(null)")); if (t->nvars == 0) v = NULL; else { key.name = name; v = (var_t *)bsearch(&key, t->vars, t->nvars, sizeof(var_t), (compare_func_t)compare_variables); } if (v == NULL) { if (t->nvars == 0) v = (var_t *)malloc(sizeof(var_t)); else v = (var_t *)realloc(t->vars, sizeof(var_t) * (t->nvars + 1)); if (v == NULL) { DEBUG_printf(("%s==== MALLOC/REALLOC FAILED! ====\n", indent)); return (-1); } t->vars = v; v += t->nvars; t->nvars ++; v->name = (uchar *)strdup((char *)name); if (value != NULL) v->value = (uchar *)strdup((char *)value); else v->value = NULL; if (strcasecmp((char *)name, "HREF") == 0) { DEBUG_printf(("%s---- Set link to %s ----\n", indent, value)); t->link = t; } if (t->nvars > 1) qsort(t->vars, t->nvars, sizeof(var_t), (compare_func_t)compare_variables); } else if (v->value != value) { if (v->value != NULL) free(v->value); if (value != NULL) v->value = (uchar *)strdup((char *)value); else v->value = NULL; } return (0); } /* * 'htmlSetBaseSize()' - Set the font sizes and spacings... */ void htmlSetBaseSize(float p, /* I - Point size of paragraph font */ float s) /* I - Spacing */ { int i; /* Looping var */ p /= 1.2 * 1.2 * 1.2; for (i = 0; i < 8; i ++, p *= 1.2) { _htmlSizes[i] = p; _htmlSpacings[i] = p * s; } } /* * 'htmlSetCharSet()' - Set the character set for output. */ void htmlSetCharSet(const char *cs) /* I - Character set file to load */ { int i; /* Looping var */ char filename[1024]; /* Filenames */ FILE *fp; /* Files */ int ch, unicode; /* Character values */ char glyph[64]; /* Glyph name */ char line[1024]; /* Line from charset file */ int chars[256]; /* Character encoding array */ strlcpy(_htmlCharSet, cs, sizeof(_htmlCharSet)); if (!_htmlInitialized) { /* * Load the PostScript glyph names for all of Unicode... */ memset(_htmlGlyphsAll, 0, sizeof(_htmlGlyphsAll)); snprintf(line, sizeof(line), "%s/data/psglyphs", _htmlData); if ((fp = fopen(line, "r")) != NULL) { while (fscanf(fp, "%x%63s", &unicode, glyph) == 2) _htmlGlyphsAll[unicode] = strdup(glyph); fclose(fp); _htmlInitialized = 1; } #ifndef DEBUG else progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open psglyphs data file!"); #endif /* !DEBUG */ } memset(_htmlGlyphs, 0, sizeof(_htmlGlyphs)); if (strncmp(cs, "8859-", 5) == 0) snprintf(filename, sizeof(filename), "%s/data/iso-%s", _htmlData, cs); else snprintf(filename, sizeof(filename), "%s/data/%s", _htmlData, cs); if ((fp = fopen(filename, "r")) == NULL) { /* * Can't open charset file; use ISO-8859-1... */ #ifndef DEBUG progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open character set file %s!", cs); #endif /* !DEBUG */ for (i = 0; i < 256; i ++) chars[i] = i; } else { /* * Read the lines from the file... */ memset(chars, 0, sizeof(chars)); while (fscanf(fp, "%x%x", &ch, &unicode) == 2) chars[ch] = unicode; fclose(fp); } /* * Build the glyph array... */ for (i = 0; i < 256; i ++) { /* * Add the glyph to the charset array... */ if (chars[i] == 0) { _htmlGlyphs[i] = NULL; continue; } else _htmlGlyphs[i] = _htmlGlyphsAll[chars[i]]; if (_htmlGlyphs[i]) _htmlUnicode[i] = chars[i]; } htmlLoadFontWidths(); } /* * 'htmlSetTextColor()' - Set the default text color. */ void htmlSetTextColor(uchar *color) /* I - Text color */ { strlcpy((char *)_htmlTextColor, (char *)color, sizeof(_htmlTextColor)); } /* * 'compare_variables()' - Compare two markup variables. */ static int /* O - -1 if v0 < v1, 0 if v0 == v1, 1 if v0 > v1 */ compare_variables(var_t *v0, /* I - First variable */ var_t *v1) /* I - Second variable */ { return (strcasecmp((char *)v0->name, (char *)v1->name)); } /* * 'compare_markups()' - Compare two markup strings... */ static int /* O - -1 if m0 < m1, 0 if m0 == m1, 1 if m0 > m1 */ compare_markups(uchar **m0, /* I - First markup */ uchar **m1) /* I - Second markup */ { if (tolower((*m0)[0]) == 'h' && isdigit((*m0)[1]) && tolower((*m1)[0]) == 'h' && isdigit((*m1)[1])) return (atoi((char *)*m0 + 1) - atoi((char *)*m1 + 1)); else return (strcasecmp((char *)*m0, (char *)*m1)); } /* * 'delete_node()' - Free all memory associated with a node... */ static void delete_node(tree_t *t) /* I - Node to delete */ { int i; /* Looping var */ var_t *var; /* Current variable */ if (t == NULL) return; if (t->data != NULL) free(t->data); for (i = t->nvars, var = t->vars; i > 0; i --, var ++) { free(var->name); if (var->value != NULL) free(var->value); } if (t->vars != NULL) free(t->vars); free(t); } // // 'insert_space()' - Insert a whitespace character before the // specified node. // static void insert_space(tree_t *parent, // I - Parent node tree_t *t) // I - Node to insert before { tree_t *space; // Space node // Allocate memory for the whitespace... space = (tree_t *)calloc(sizeof(tree_t), 1); if (space == NULL) { #ifndef DEBUG progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for HTML tree node!"); #endif /* !DEBUG */ return; } // Set/copy font characteristics... if (parent) { space->typeface = parent->typeface; space->size = parent->size; space->style = parent->style; } else { space->typeface = _htmlBodyFont; space->size = SIZE_P; } // Initialize element data... space->markup = MARKUP_NONE; space->data = (uchar *)strdup(" "); // Set tree pointers... space->parent = parent; space->prev = t->prev; space->next = t; if (space->prev) space->prev->next = space; else if (parent) parent->child = space; t->prev = space; compute_size(space); } /* * 'parse_markup()' - Parse a markup string. */ static int /* O - -1 on error, MARKUP_nnnn otherwise */ parse_markup(tree_t *t, /* I - Current tree entry */ FILE *fp, /* I - Input file */ int *linenum) /* O - Current line number */ { int ch, ch2; /* Characters from file */ uchar markup[255], /* Markup string... */ *mptr, /* Current character... */ comment[10240], /* Comment string */ *cptr, /* Current char... */ **temp; /* Markup variable entry */ mptr = markup; while ((ch = getc(fp)) != EOF && mptr < (markup + sizeof(markup) - 1)) if (ch == '>' || isspace(ch)) break; else if (ch == '/' && mptr > markup) { // Look for "/>"... ch = getc(fp); if (ch != '>') return (MARKUP_ERROR); break; } else { *mptr++ = ch; // Handle comments without whitespace... if ((mptr - markup) == 3 && strncmp((const char *)markup, "!--", 3) == 0) { ch = getc(fp); break; } } *mptr = '\0'; if (ch == EOF) return (MARKUP_ERROR); mptr = markup; temp = (uchar **)bsearch(&mptr, _htmlMarkups, sizeof(_htmlMarkups) / sizeof(_htmlMarkups[0]), sizeof(_htmlMarkups[0]), (compare_func_t)compare_markups); if (temp == NULL) { /* * Unrecognized markup stuff... */ t->markup = MARKUP_UNKNOWN; strlcpy((char *)comment, (char *)markup, sizeof(comment)); cptr = comment + strlen((char *)comment); DEBUG_printf(("%s%s (unrecognized!)\n", indent, markup)); } else { t->markup = (markup_t)((const char **)temp - _htmlMarkups); cptr = comment; DEBUG_printf(("%s%s, line %d\n", indent, markup, *linenum)); } if (t->markup == MARKUP_COMMENT || t->markup == MARKUP_UNKNOWN) { while (ch != EOF && cptr < (comment + sizeof(comment) - 1)) { if (ch == '>' && temp == NULL) break; if (ch == '\n') (*linenum) ++; if (ch == '-') { *cptr++ = ch; if ((ch2 = getc(fp)) == '>') { // Erase trailing --> cptr --; if (*cptr == '-' && cptr > comment) cptr --; break; } else ch = ch2; } else { if (ch == '&') { // Handle character entities... uchar entity[16], // Character entity name *eptr; // Pointer into name eptr = entity; while (eptr < (entity + sizeof(entity) - 1) && (ch = getc(fp)) != EOF) if (!isalnum(ch) && ch != '#') break; else *eptr++ = ch; if (ch != ';') { ungetc(ch, fp); ch = 0; } *eptr = '\0'; if (!ch) { progress_error(HD_ERROR_HTML_ERROR, "Unquoted & on line %d.", *linenum); if (cptr < (comment + sizeof(comment) - 1)) *cptr++ = '&'; strlcpy((char *)cptr, (char *)entity, sizeof(comment) - (cptr - comment)); cptr += strlen((char *)cptr); } else if ((ch = iso8859(entity)) == 0) { progress_error(HD_ERROR_HTML_ERROR, "Unknown character entity \"&%s;\" on line %d.", entity, *linenum); if (cptr < (comment + sizeof(comment) - 1)) *cptr++ = '&'; strlcpy((char *)cptr, (char *)entity, sizeof(comment) - (cptr - comment)); cptr += strlen((char *)cptr); if (cptr < (comment + sizeof(comment) - 1)) *cptr++ = ';'; } else *cptr++ = ch; } else *cptr++ = ch; ch = getc(fp); } } *cptr = '\0'; t->data = (uchar *)strdup((char *)comment); } else { while (ch != EOF && ch != '>') { if (ch == '\n') (*linenum) ++; if (!isspace(ch)) { ungetc(ch, fp); parse_variable(t, fp, linenum); } ch = getc(fp); if (ch == '/') { // Look for "/>"... ch = getc(fp); if (ch != '>') return (MARKUP_ERROR); break; } } } return (t->markup); } /* * 'parse_variable()' - Parse a markup variable string. */ static int // O - -1 on error, 0 on success parse_variable(tree_t *t, // I - Current tree entry FILE *fp, // I - Input file int *linenum) // I - Current line number { uchar name[1024], // Name of variable value[10240], // Value of variable *ptr, // Temporary pointer entity[16], // Character entity name *eptr; // Pointer into name int ch; // Character from file ptr = name; while ((ch = getc(fp)) != EOF) if (isspace(ch) || ch == '=' || ch == '>' || ch == '\r') break; else if (ch == '/' && ptr == name) break; else if (ptr < (name + sizeof(name) - 1)) *ptr++ = ch; *ptr = '\0'; if (ch == '\n') (*linenum) ++; while (isspace(ch) || ch == '\r') { ch = getc(fp); if (ch == '\n') (*linenum) ++; } switch (ch) { default : ungetc(ch, fp); return (htmlSetVariable(t, name, NULL)); case EOF : return (-1); case '=' : ptr = value; ch = getc(fp); while (isspace(ch) || ch == '\r') ch = getc(fp); if (ch == EOF) return (-1); if (ch == '\'') { while ((ch = getc(fp)) != EOF) { if (ch == '\'') break; else if (ch == '&') { // Possibly a character entity... eptr = entity; while (eptr < (entity + sizeof(entity) - 1) && (ch = getc(fp)) != EOF) if (!isalnum(ch) && ch != '#') break; else *eptr++ = ch; if (ch != ';') { ungetc(ch, fp); ch = 0; } *eptr = '\0'; if (!ch) { progress_error(HD_ERROR_HTML_ERROR, "Unquoted & on line %d.", *linenum); if (ptr < (value + sizeof(value) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(value) - (ptr - value)); ptr += strlen((char *)ptr); } else if ((ch = iso8859(entity)) == 0) { progress_error(HD_ERROR_HTML_ERROR, "Unknown character entity \"&%s;\" on line %d.", entity, *linenum); if (ptr < (value + sizeof(value) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(value) - (ptr - value)); ptr += strlen((char *)ptr); if (ptr < (value + sizeof(value) - 1)) *ptr++ = ';'; } else if (ptr < (value + sizeof(value) - 1)) *ptr++ = ch; } else if (ptr < (value + sizeof(value) - 1) && ch != '\n' && ch != '\r') *ptr++ = ch; else if (ch == '\n') { if (ptr < (value + sizeof(value) - 1)) *ptr++ = ' '; (*linenum) ++; } } *ptr = '\0'; } else if (ch == '\"') { while ((ch = getc(fp)) != EOF) { if (ch == '\"') break; else if (ch == '&') { // Possibly a character entity... eptr = entity; while (eptr < (entity + sizeof(entity) - 1) && (ch = getc(fp)) != EOF) if (!isalnum(ch) && ch != '#') break; else *eptr++ = ch; if (ch != ';') { ungetc(ch, fp); ch = 0; } *eptr = '\0'; if (!ch) { progress_error(HD_ERROR_HTML_ERROR, "Unquoted & on line %d.", *linenum); if (ptr < (value + sizeof(value) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(value) - (ptr - value)); ptr += strlen((char *)ptr); } else if ((ch = iso8859(entity)) == 0) { progress_error(HD_ERROR_HTML_ERROR, "Unknown character entity \"&%s;\" on line %d.", entity, *linenum); if (ptr < (value + sizeof(value) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(value) - (ptr - value)); ptr += strlen((char *)ptr); if (ptr < (value + sizeof(value) - 1)) *ptr++ = ';'; } else if (ptr < (value + sizeof(value) - 1)) *ptr++ = ch; } else if (ptr < (value + sizeof(value) - 1) && ch != '\n' && ch != '\r') *ptr++ = ch; else if (ch == '\n') { if (ptr < (value + sizeof(value) - 1)) *ptr++ = ' '; (*linenum) ++; } } *ptr = '\0'; } else { *ptr++ = ch; while ((ch = getc(fp)) != EOF) { if (isspace(ch) || ch == '>' || ch == '\r') break; else if (ch == '&') { // Possibly a character entity... eptr = entity; while (eptr < (entity + sizeof(entity) - 1) && (ch = getc(fp)) != EOF) if (!isalnum(ch) && ch != '#') break; else *eptr++ = ch; if (ch != ';') { ungetc(ch, fp); ch = 0; } *eptr = '\0'; if (!ch) { progress_error(HD_ERROR_HTML_ERROR, "Unquoted & on line %d.", *linenum); if (ptr < (value + sizeof(value) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(value) - (ptr - value)); ptr += strlen((char *)ptr); } else if ((ch = iso8859(entity)) == 0) { progress_error(HD_ERROR_HTML_ERROR, "Unknown character entity \"&%s;\" on line %d.", entity, *linenum); if (ptr < (value + sizeof(value) - 1)) *ptr++ = '&'; strlcpy((char *)ptr, (char *)entity, sizeof(value) - (ptr - value)); ptr += strlen((char *)ptr); if (ptr < (value + sizeof(value) - 1)) *ptr++ = ';'; } else if (ptr < (value + sizeof(value) - 1)) *ptr++ = ch; } else if (ptr < (value + sizeof(value) - 1)) *ptr++ = ch; } if (ch == '\n') (*linenum) ++; *ptr = '\0'; if (ch == '>') ungetc(ch, fp); } return (htmlSetVariable(t, name, value)); } } /* * 'compute_size()' - Compute the width and height of a tree entry. */ static int /* O - 0 = success, -1 = failure */ compute_size(tree_t *t) /* I - Tree entry */ { uchar *ptr; /* Current character */ float width, /* Current width */ max_width; /* Maximum width */ uchar *width_ptr, /* Pointer to width string */ *height_ptr, /* Pointer to height string */ *size_ptr, /* Pointer to size string */ *type_ptr; /* Pointer to spacer type string */ image_t *img; /* Image */ char number[255]; /* Width or height value */ if (!_htmlInitialized) htmlSetCharSet("iso-8859-1"); if (t->markup == MARKUP_IMG) { width_ptr = htmlGetVariable(t, (uchar *)"WIDTH"); height_ptr = htmlGetVariable(t, (uchar *)"HEIGHT"); img = image_load((char *)htmlGetVariable(t, (uchar *)"REALSRC"), _htmlGrayscale); if (width_ptr != NULL && height_ptr != NULL) { t->width = atoi((char *)width_ptr) / _htmlPPI * 72.0f; t->height = atoi((char *)height_ptr) / _htmlPPI * 72.0f; return (0); } if (img == NULL) return (-1); if (width_ptr != NULL) { t->width = atoi((char *)width_ptr) / _htmlPPI * 72.0f; t->height = t->width * img->height / img->width; sprintf(number, "%d", atoi((char *)width_ptr) * img->height / img->width); if (strchr((char *)width_ptr, '%') != NULL) strlcat(number, "%", sizeof(number)); htmlSetVariable(t, (uchar *)"HEIGHT", (uchar *)number); } else if (height_ptr != NULL) { t->height = atoi((char *)height_ptr) / _htmlPPI * 72.0f; t->width = t->height * img->width / img->height; sprintf(number, "%d", atoi((char *)height_ptr) * img->width / img->height); if (strchr((char *)height_ptr, '%') != NULL) strlcat(number, "%", sizeof(number)); htmlSetVariable(t, (uchar *)"WIDTH", (uchar *)number); } else { t->width = img->width / _htmlPPI * 72.0f; t->height = img->height / _htmlPPI * 72.0f; sprintf(number, "%d", img->width); htmlSetVariable(t, (uchar *)"WIDTH", (uchar *)number); sprintf(number, "%d", img->height); htmlSetVariable(t, (uchar *)"HEIGHT", (uchar *)number); } return (0); } else if (t->markup == MARKUP_SPACER) { width_ptr = htmlGetVariable(t, (uchar *)"WIDTH"); height_ptr = htmlGetVariable(t, (uchar *)"HEIGHT"); size_ptr = htmlGetVariable(t, (uchar *)"SIZE"); type_ptr = htmlGetVariable(t, (uchar *)"TYPE"); if (width_ptr != NULL) t->width = atoi((char *)width_ptr) / _htmlPPI * 72.0f; else if (size_ptr != NULL) t->width = atoi((char *)size_ptr) / _htmlPPI * 72.0f; else t->width = 1.0f; if (height_ptr != NULL) t->height = atoi((char *)height_ptr) / _htmlPPI * 72.0f; else if (size_ptr != NULL) t->height = atoi((char *)size_ptr) / _htmlPPI * 72.0f; else t->height = 1.0f; if (type_ptr == NULL) return (0); if (strcasecmp((char *)type_ptr, "horizontal") == 0) t->height = 0.0; else if (strcasecmp((char *)type_ptr, "vertical") == 0) t->width = 0.0; return (0); } else if (t->markup == MARKUP_BR) { t->width = 0.0; t->height = _htmlSizes[t->size]; return (0); } else if (t->preformatted && t->data) { for (max_width = 0.0, width = 0.0, ptr = t->data; *ptr != '\0'; ptr ++) if (*ptr == '\n') { if (width > max_width) max_width = width; } else if (*ptr == '\t') width = (float)(((int)width + 7) & ~7); else width += _htmlWidths[t->typeface][t->style][(int)*ptr & 255]; if (width < max_width) width = max_width; } else if (t->data) for (width = 0.0, ptr = t->data; *ptr != '\0'; ptr ++) width += _htmlWidths[t->typeface][t->style][(int)*ptr & 255]; else width = 0.0f; t->width = width * _htmlSizes[t->size]; t->height = _htmlSizes[t->size]; DEBUG_printf(("%swidth = %.1f, height = %.1f\n", indent, t->width, t->height)); return (0); } /* * 'compute_color()' - Compute the red, green, blue color from the given * string. */ static int compute_color(tree_t *t, /* I - Tree entry */ uchar *color) /* I - Color string */ { float rgb[3]; /* RGB color */ get_color(color, rgb); t->red = (uchar)(rgb[0] * 255.0f + 0.5f); t->green = (uchar)(rgb[1] * 255.0f + 0.5f); t->blue = (uchar)(rgb[2] * 255.0f + 0.5f); return (0); } /* * 'get_alignment()' - Get horizontal & vertical alignment values. */ static int /* O - 0 for success, -1 for failure */ get_alignment(tree_t *t) /* I - Tree entry */ { uchar *align; /* Alignment string */ if ((align = htmlGetVariable(t, (uchar *)"ALIGN")) == NULL) align = htmlGetStyle(t, (uchar *)"text-align"); if (align != NULL) { if (!strcasecmp((char *)align, "left")) t->halignment = ALIGN_LEFT; else if (!strcasecmp((char *)align, "center")) t->halignment = ALIGN_CENTER; else if (!strcasecmp((char *)align, "right")) t->halignment = ALIGN_RIGHT; else if (!strcasecmp((char *)align, "justify")) t->halignment = ALIGN_JUSTIFY; else if (!strcasecmp((char *)align, "top")) t->valignment = ALIGN_TOP; else if (!strcasecmp((char *)align, "middle") || !strcasecmp((char *)align, "absmiddle")) t->valignment = ALIGN_MIDDLE; else if (!strcasecmp((char *)align, "bottom")) t->valignment = ALIGN_BOTTOM; } if ((align = htmlGetVariable(t, (uchar *)"VALIGN")) == NULL) align = htmlGetStyle(t, (uchar *)"vertical-align"); if (align != NULL) { if (!strcasecmp((char *)align, "top")) t->valignment = ALIGN_TOP; else if (!strcasecmp((char *)align, "middle")) t->valignment = ALIGN_MIDDLE; else if (!strcasecmp((char *)align, "center")) t->valignment = ALIGN_MIDDLE; else if (!strcasecmp((char *)align, "bottom")) t->valignment = ALIGN_BOTTOM; } return (0); } /* * 'fix_filename()' - Fix a filename to be relative to the base directory. */ static const char * /* O - Fixed filename */ fix_filename(char *filename, /* I - Original filename */ char *base) /* I - Base directory */ { char *slash; /* Location of slash */ char temp[1024], /* Temporary filename */ *tempptr; /* Pointer into filename */ static char newfilename[1024]; /* New filename */ // printf("fix_filename(filename=\"%s\", base=\"%s\")\n", filename, base); if (filename == NULL) return (NULL); // Unescape filenames as needed... if (strchr(filename, '%') && !strstr(filename, "//")) { for (tempptr = temp; *filename && tempptr < (temp + sizeof(temp) - 1);) { if (*filename == '%') { // Decode hex-escaped filename character... filename ++; if (isxdigit(filename[0] & 255) && isxdigit(filename[1] & 255)) { if (isdigit(filename[0] & 255)) *tempptr = (filename[0] - '0') << 4; else *tempptr = (tolower(filename[0]) - 'a' + 10) << 4; if (isdigit(filename[1] & 255)) *tempptr |= filename[1] - '0'; else *tempptr |= tolower(filename[0]) - 'a' + 10; tempptr ++; filename += 2; } else *tempptr++ = '%'; } else *tempptr++ = *filename++; } filename = temp; } if (strcmp(base, ".") == 0 || strstr(filename, "//") != NULL) return (file_find(Path, filename)); if (strncmp(filename, "./", 2) == 0 || strncmp(filename, ".\\", 2) == 0) filename += 2; if (strncmp(base, "http://", 7) == 0 || strncmp(base, "https://", 8) == 0) { strlcpy(newfilename, base, sizeof(newfilename)); base = strchr(newfilename, ':') + 3; if (filename[0] == '/') { if ((slash = strchr(base, '/')) != NULL) strlcpy(slash, filename, sizeof(newfilename) - (slash - newfilename)); else strlcat(newfilename, filename, sizeof(newfilename)); return (newfilename); } else if ((slash = strchr(base, '/')) == NULL) strlcat(newfilename, "/", sizeof(newfilename)); } else { if (filename[0] == '/' || filename[0] == '\\' || base == NULL || base[0] == '\0' || (isalpha(filename[0]) && filename[1] == ':')) return (file_find(Path, filename)); /* No change needed for absolute path */ strlcpy(newfilename, base, sizeof(newfilename)); base = newfilename; } #if defined(WIN32) || defined(__EMX__) while (strncmp(filename, "../", 3) == 0 || strncmp(filename, "..\\", 3) == 0) #else while (strncmp(filename, "../", 3) == 0) #endif // WIN32 || __EMX__ { filename += 3; #if defined(WIN32) || defined(__EMX__) if ((slash = strrchr(base, '/')) != NULL) *slash = '\0'; else if ((slash = strrchr(base, '\\')) != NULL) *slash = '\0'; #else if ((slash = strrchr(base, '/')) != NULL) *slash = '\0'; #endif // WIN32 || __EMX__ else { filename -= 3; break; } } if (filename[0] != '/' && *base && base[strlen(base) - 1] != '/') strlcat(newfilename, "/", sizeof(newfilename)); strlcat(newfilename, filename, sizeof(newfilename)); // printf(" newfilename=\"%s\"\n", newfilename); return (file_find(Path, newfilename)); } // // 'html_memory_used()' - Figure out the amount of memory that was used. // static int // O - Bytes used html_memory_used(tree_t *t) // I - Tree node { int i; // Looping var int bytes; // Bytes used if (t == NULL) return (0); bytes = 0; while (t != NULL) { bytes += sizeof(tree_t); bytes += t->nvars * sizeof(var_t); for (i = 0; i < t->nvars; i ++) { bytes += (strlen((char *)t->vars[i].name) + 8) & ~7; if (t->vars[i].value != NULL) bytes += (strlen((char *)t->vars[i].value) + 8) & ~7; } if (t->data != NULL) bytes += (strlen((char *)t->data) + 8) & ~7; bytes += html_memory_used(t->child); t = t->next; } return (bytes); } // // 'htmlDebugStats()' - Display debug statistics for HTML tree memory use. // void htmlDebugStats(const char *title, // I - Title tree_t *t) // I - Document root node { const char *debug; /* HTMLDOC_DEBUG env var */ if ((debug = getenv("HTMLDOC_DEBUG")) == NULL || (strstr(debug, "all") == NULL && strstr(debug, "memory") == NULL)) return; progress_error(HD_ERROR_NONE, "DEBUG: %s = %d kbytes", title, (html_memory_used(t) + 1023) / 1024); } // // 'htmlFindFile()' - Find a file in the document. // tree_t * // O - Node for file htmlFindFile(tree_t *doc, // I - Document pointer uchar *filename) // I - Filename { tree_t *tree; // Current node uchar *treename; // Filename from node if (!filename || !doc) return (NULL); for (tree = doc; tree; tree = tree->next) if ((treename = htmlGetVariable(tree, (uchar *)"_HD_FILENAME")) != NULL && !strcmp((char *)treename, (char *)filename)) return (tree); return (NULL); } // // 'htmlFixLinks()' - Fix the external links in the document. // void htmlFixLinks(tree_t *doc, // I - Top node tree_t *tree, // I - Current node uchar *base) // I - Base directory/path { uchar *href; // HREF attribute char full_href[1024]; // Full HREF value const char *debug; // HTMLDOC_DEBUG environment variable static int show_debug = -1; // Show debug messages? if (show_debug < 0) { if ((debug = getenv("HTMLDOC_DEBUG")) == NULL || (strstr(debug, "all") == NULL && strstr(debug, "links") == NULL)) show_debug = 0; else show_debug = 1; } while (tree) { if (tree->markup == MARKUP_A && base && base[0] && (href = htmlGetVariable(tree, (uchar *)"HREF")) != NULL) { // Check if the link needs to be localized... if (href[0] != '#' && file_method((char *)href) == NULL && file_method((char *)base) != NULL && htmlFindFile(doc, (uchar *)file_basename((char *)href)) == NULL) { // Yes, localize it... if (href[0] == '/') { // Absolute URL, just copy scheme, server, etc. char *ptr; // Pointer into URL... strlcpy(full_href, (char *)base, sizeof(full_href)); if (href[1] == '/') { // Just use scheme... if ((ptr = strstr(full_href, "//")) != NULL) *ptr ='\0'; } else if ((ptr = strstr(full_href, "//")) != NULL && (ptr = strchr(ptr + 2, '/')) != NULL) *ptr ='\0'; strlcat(full_href, (char *)href, sizeof(full_href)); } else if (!strncmp((char *)href, "./", 2)) { // Relative URL of the form "./foo/bar", append href sans // "./" to base to form full href... snprintf(full_href, sizeof(full_href), "%s/%s", base, href + 2); } else { // Relative URL, append href to base to form full href... snprintf(full_href, sizeof(full_href), "%s/%s", base, href); } if (show_debug) progress_error(HD_ERROR_NONE, "DEBUG: Mapping \"%s\" to \"%s\"...\n", href, full_href); htmlSetVariable(tree, (uchar *)"_HD_FULL_HREF", (uchar *)full_href); } else { // No, just mirror the link in the _HD_FULL_HREF attribute... htmlSetVariable(tree, (uchar *)"_HD_FULL_HREF", href); } } else if (tree->markup == MARKUP_FILE) base = htmlGetVariable(tree, (uchar *)"_HD_BASE"); if (tree->child) htmlFixLinks(doc, tree->child, base); tree = tree->next; } } /* * End of "$Id: htmllib.cxx 1492 2006-06-07 17:43:52Z mike $". */ htmldoc-1.8.27/htmldoc/http.c0100664000212600000240000017012310441614401014476 0ustar mikeuser/* * "$Id: http.c 1493 2006-06-07 18:20:49Z mike $" * * HTTP routines for the Common UNIX Printing System (CUPS). * * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: cups-info@cups.org * WWW: http://www.cups.org * * This file is subject to the Apple OS-Developed Software exception. * * Contents: * * httpBlocking() - Set blocking/non-blocking behavior on a connection. * httpCheck() - Check to see if there is a pending response from * the server. * httpClearCookie() - Clear the cookie value(s). * httpClearFields() - Clear HTTP request fields. * httpClose() - Close an HTTP connection... * httpConnect() - Connect to a HTTP server. * httpConnectEncrypt() - Connect to a HTTP server using encryption. * httpDelete() - Send a DELETE request to the server. * httpEncryption() - Set the required encryption on the link. * httpError() - Get the last error on a connection. * httpFlush() - Flush data from a HTTP connection. * httpFlushWrite() - Flush data in write buffer. * httpGet() - Send a GET request to the server. * httpGetBlocking() - Get the blocking/non-block state of a connection. * httpGetCookie() - Get any cookie data from the response. * httpGetFd() - Get the file descriptor associated with a * connection. * httpGetField() - Get a field value from a request/response. * httpGetLength() - Get the amount of data remaining from the * content-length or transfer-encoding fields. * httpGetLength2() - Get the amount of data remaining from the * content-length or transfer-encoding fields. * httpGetStatus() - Get the status of the last HTTP request. * httpGetSubField() - Get a sub-field value. * httpGets() - Get a line of text from a HTTP connection. * httpHead() - Send a HEAD request to the server. * httpInitialize() - Initialize the HTTP interface library and set the * default HTTP proxy (if any). * httpOptions() - Send an OPTIONS request to the server. * httpPost() - Send a POST request to the server. * httpPrintf() - Print a formatted string to a HTTP connection. * httpPut() - Send a PUT request to the server. * httpRead() - Read data from a HTTP connection. * httpRead2() - Read data from a HTTP connection. * _httpReadCDSA() - Read function for CDSA decryption code. * httpReconnect() - Reconnect to a HTTP server... * httpSetCookie() - Set the cookie value(s)... * httpSetExpect() - Set the Expect: header in a request. * httpSetField() - Set the value of an HTTP header. * httpSetLength() - Set the content-length and transfer-encoding. * httpTrace() - Send an TRACE request to the server. * httpUpdate() - Update the current HTTP state for incoming data. * httpWait() - Wait for data available on a connection. * httpWrite() - Write data to a HTTP connection. * httpWrite2() - Write data to a HTTP connection. * _httpWriteCDSA() - Write function for CDSA encryption code. * http_field() - Return the field index for a field name. * http_read_ssl() - Read from a SSL/TLS connection. * http_send() - Send a request with all fields and the trailing * blank line. * http_setup_ssl() - Set up SSL/TLS on a connection. * http_shutdown_ssl() - Shut down SSL/TLS on a connection. * http_upgrade() - Force upgrade to TLS encryption. * http_wait() - Wait for data available on a connection. * http_write() - Write data to a connection. * http_write_ssl() - Write to a SSL/TLS connection. */ /* * Include necessary headers... */ #include "http-private.h" #include "debug.h" #include #include #include #ifndef WIN32 # include # include # include #endif /* !WIN32 */ /* * Some operating systems have done away with the Fxxxx constants for * the fcntl() call; this works around that "feature"... */ #ifndef FNONBLK # define FNONBLK O_NONBLOCK #endif /* !FNONBLK */ /* * Local functions... */ static http_field_t http_field(const char *name); static int http_send(http_t *http, http_state_t request, const char *uri); static int http_wait(http_t *http, int msec); static int http_write(http_t *http, const char *buffer, int length); static int http_write_chunk(http_t *http, const char *buffer, int length); #ifdef HAVE_SSL static int http_read_ssl(http_t *http, char *buf, int len); static int http_setup_ssl(http_t *http); static void http_shutdown_ssl(http_t *http); static int http_upgrade(http_t *http); static int http_write_ssl(http_t *http, const char *buf, int len); #endif /* HAVE_SSL */ /* * Local globals... */ static const char * const http_fields[] = { "Accept-Language", "Accept-Ranges", "Authorization", "Connection", "Content-Encoding", "Content-Language", "Content-Length", "Content-Location", "Content-MD5", "Content-Range", "Content-Type", "Content-Version", "Date", "Host", "If-Modified-Since", "If-Unmodified-since", "Keep-Alive", "Last-Modified", "Link", "Location", "Range", "Referer", "Retry-After", "Transfer-Encoding", "Upgrade", "User-Agent", "WWW-Authenticate" }; /* * 'httpBlocking()' - Set blocking/non-blocking behavior on a connection. */ void httpBlocking(http_t *http, /* I - HTTP connection */ int b) /* I - 1 = blocking, 0 = non-blocking */ { if (http) http->blocking = b; } /* * 'httpCheck()' - Check to see if there is a pending response from the server. */ int /* O - 0 = no data, 1 = data available */ httpCheck(http_t *http) /* I - HTTP connection */ { return (httpWait(http, 0)); } /* * 'httpClearCookie()' - Clear the cookie value(s). * * @since CUPS 1.1.19@ */ void httpClearCookie(http_t *http) /* I - HTTP connection */ { if (!http) return; if (http->cookie) { free(http->cookie); http->cookie = NULL; } } /* * 'httpClearFields()' - Clear HTTP request fields. */ void httpClearFields(http_t *http) /* I - HTTP connection */ { if (http) { memset(http->fields, 0, sizeof(http->fields)); httpSetField(http, HTTP_FIELD_HOST, http->hostname); http->expect = (http_status_t)0; } } /* * 'httpClose()' - Close an HTTP connection... */ void httpClose(http_t *http) /* I - HTTP connection */ { DEBUG_printf(("httpClose(http=%p)\n", http)); if (!http) return; httpAddrFreeList(http->addrlist); if (http->input_set) free(http->input_set); if (http->cookie) free(http->cookie); #ifdef HAVE_SSL if (http->tls) http_shutdown_ssl(http); #endif /* HAVE_SSL */ #ifdef WIN32 closesocket(http->fd); #else close(http->fd); #endif /* WIN32 */ free(http); } /* * 'httpConnect()' - Connect to a HTTP server. */ http_t * /* O - New HTTP connection */ httpConnect(const char *host, /* I - Host to connect to */ int port) /* I - Port number */ { http_encryption_t encryption; /* Type of encryption to use */ /* * Set the default encryption status... */ if (port == 443) encryption = HTTP_ENCRYPT_ALWAYS; else encryption = HTTP_ENCRYPT_IF_REQUESTED; return (httpConnectEncrypt(host, port, encryption)); } /* * 'httpConnectEncrypt()' - Connect to a HTTP server using encryption. */ http_t * /* O - New HTTP connection */ httpConnectEncrypt( const char *host, /* I - Host to connect to */ int port, /* I - Port number */ http_encryption_t encryption) /* I - Type of encryption to use */ { http_t *http; /* New HTTP connection */ http_addrlist_t *addrlist; /* Host address data */ char service[255]; /* Service name */ DEBUG_printf(("httpConnectEncrypt(host=\"%s\", port=%d, encryption=%d)\n", host ? host : "(null)", port, encryption)); if (!host) return (NULL); httpInitialize(); /* * Lookup the host... */ sprintf(service, "%d", port); if ((addrlist = httpAddrGetList(host, AF_UNSPEC, service)) == NULL) return (NULL); /* * Allocate memory for the structure... */ http = calloc(sizeof(http_t), 1); if (http == NULL) return (NULL); http->version = HTTP_1_1; http->blocking = 1; http->activity = time(NULL); http->fd = -1; /* * Set the encryption status... */ if (port == 443) /* Always use encryption for https */ http->encryption = HTTP_ENCRYPT_ALWAYS; else http->encryption = encryption; /* * Loop through the addresses we have until one of them connects... */ strlcpy(http->hostname, host, sizeof(http->hostname)); /* * Connect to the remote system... */ http->addrlist = addrlist; if (!httpReconnect(http)) return (http); /* * Could not connect to any known address - bail out! */ httpAddrFreeList(addrlist); free(http); return (NULL); } /* * 'httpDelete()' - Send a DELETE request to the server. */ int /* O - Status of call (0 = success) */ httpDelete(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI to delete */ { return (http_send(http, HTTP_DELETE, uri)); } /* * 'httpEncryption()' - Set the required encryption on the link. */ int /* O - -1 on error, 0 on success */ httpEncryption(http_t *http, /* I - HTTP connection */ http_encryption_t e) /* I - New encryption preference */ { DEBUG_printf(("httpEncryption(http=%p, e=%d)\n", http, e)); #ifdef HAVE_SSL if (!http) return (0); http->encryption = e; if ((http->encryption == HTTP_ENCRYPT_ALWAYS && !http->tls) || (http->encryption == HTTP_ENCRYPT_NEVER && http->tls)) return (httpReconnect(http)); else if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls) return (http_upgrade(http)); else return (0); #else if (e == HTTP_ENCRYPT_ALWAYS || e == HTTP_ENCRYPT_REQUIRED) return (-1); else return (0); #endif /* HAVE_SSL */ } /* * 'httpError()' - Get the last error on a connection. */ int /* O - Error code (errno) value */ httpError(http_t *http) /* I - HTTP connection */ { if (http) return (http->error); else return (EINVAL); } /* * 'httpFlush()' - Flush data from a HTTP connection. */ void httpFlush(http_t *http) /* I - HTTP connection */ { char buffer[8192]; /* Junk buffer */ int blocking; /* To block or not to block */ DEBUG_printf(("httpFlush(http=%p), state=%d\n", http, http->state)); /* * Temporarily set non-blocking mode so we don't get stuck in httpRead()... */ blocking = http->blocking; http->blocking = 0; /* * Read any data we can... */ while (httpRead2(http, buffer, sizeof(buffer)) > 0); /* * Restore blocking and reset the connection if we didn't get all of * the remaining data... */ http->blocking = blocking; if (http->state != HTTP_WAITING && http->fd >= 0) { /* * Didn't get the data back, so close the current connection. */ http->state = HTTP_WAITING; #ifdef HAVE_SSL if (http->tls) http_shutdown_ssl(http); #endif /* HAVE_SSL */ #ifdef WIN32 closesocket(http->fd); #else close(http->fd); #endif /* WIN32 */ http->fd = -1; } } /* * 'httpFlushWrite()' - Flush data in write buffer. * * @since CUPS 1.2@ */ int /* O - Bytes written or -1 on error */ httpFlushWrite(http_t *http) /* I - HTTP connection */ { int bytes; /* Bytes written */ DEBUG_printf(("httpFlushWrite(http=%p)\n", http)); if (!http || !http->wused) return (0); if (http->data_encoding == HTTP_ENCODE_CHUNKED) bytes = http_write_chunk(http, http->wbuffer, http->wused); else bytes = http_write(http, http->wbuffer, http->wused); http->wused = 0; return (bytes); } /* * 'httpGet()' - Send a GET request to the server. */ int /* O - Status of call (0 = success) */ httpGet(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI to get */ { return (http_send(http, HTTP_GET, uri)); } /* * 'httpGetBlocking()' - Get the blocking/non-block state of a connection. * * @since CUPS 1.2@ */ int /* O - 1 if blocking, 0 if non-blocking */ httpGetBlocking(http_t *http) /* I - HTTP connection */ { return (http ? http->blocking : 0); } /* * 'httpGetCookie()' - Get any cookie data from the response. * * @since CUPS 1.1.19@ */ const char * /* O - Cookie data or NULL */ httpGetCookie(http_t *http) /* I - HTTP connecion */ { return (http ? http->cookie : NULL); } /* * 'httpGetFd()' - Get the file descriptor associated with a connection. * * @since CUPS 1.2@ */ int /* O - File descriptor or -1 if none */ httpGetFd(http_t *http) /* I - HTTP connection */ { return (http ? http->fd : -1); } /* * 'httpGetField()' - Get a field value from a request/response. */ const char * /* O - Field value */ httpGetField(http_t *http, /* I - HTTP connection */ http_field_t field) /* I - Field to get */ { if (!http || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX) return (NULL); else return (http->fields[field]); } /* * 'httpGetLength()' - Get the amount of data remaining from the * content-length or transfer-encoding fields. * * This function is deprecated and will not return lengths larger than * 2^31 - 1; use httpGetLength2() instead. * * @deprecated@ */ int /* O - Content length */ httpGetLength(http_t *http) /* I - HTTP connection */ { /* * Get the read content length and return the 32-bit value. */ if (http) { httpGetLength2(http); return (http->_data_remaining); } else return (-1); } /* * 'httpGetLength2()' - Get the amount of data remaining from the * content-length or transfer-encoding fields. * * This function returns the complete content length, even for * content larger than 2^31 - 1. * * @since CUPS 1.2@ */ off_t /* O - Content length */ httpGetLength2(http_t *http) /* I - HTTP connection */ { DEBUG_printf(("httpGetLength2(http=%p), state=%d\n", http, http->state)); if (!http) return (-1); if (!strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked")) { DEBUG_puts("httpGetLength2: chunked request!"); http->data_encoding = HTTP_ENCODE_CHUNKED; http->data_remaining = 0; } else { http->data_encoding = HTTP_ENCODE_LENGTH; /* * The following is a hack for HTTP servers that don't send a * content-length or transfer-encoding field... * * If there is no content-length then the connection must close * after the transfer is complete... */ if (http->fields[HTTP_FIELD_CONTENT_LENGTH][0] == '\0') http->data_remaining = 2147483647; else http->data_remaining = strtoll(http->fields[HTTP_FIELD_CONTENT_LENGTH], NULL, 10); DEBUG_printf(("httpGetLength2: content_length=" HTMLDOC_LLFMT "\n", HTMLDOC_LLCAST http->data_remaining)); } if (http->data_remaining <= INT_MAX) http->_data_remaining = (int)http->data_remaining; else http->_data_remaining = INT_MAX; return (http->data_remaining); } /* * 'httpGetStatus()' - Get the status of the last HTTP request. * * @since CUPS 1.2@ */ http_status_t /* O - HTTP status */ httpGetStatus(http_t *http) /* I - HTTP connection */ { return (http ? http->status : HTTP_ERROR); } /* * 'httpGetSubField()' - Get a sub-field value. * * @deprecated@ */ char * /* O - Value or NULL */ httpGetSubField(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *name, /* I - Name of sub-field */ char *value) /* O - Value string */ { return (httpGetSubField2(http, field, name, value, HTTP_MAX_VALUE)); } /* * 'httpGetSubField2()' - Get a sub-field value. * * @since CUPS 1.2@ */ char * /* O - Value or NULL */ httpGetSubField2(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *name, /* I - Name of sub-field */ char *value, /* O - Value string */ int valuelen) /* I - Size of value buffer */ { const char *fptr; /* Pointer into field */ char temp[HTTP_MAX_VALUE], /* Temporary buffer for name */ *ptr, /* Pointer into string buffer */ *end; /* End of value buffer */ DEBUG_printf(("httpGetSubField2(http=%p, field=%d, name=\"%s\", value=%p, valuelen=%d)\n", http, field, name, value, valuelen)); if (!http || !name || !value || valuelen < 2 || field <= HTTP_FIELD_UNKNOWN || field >= HTTP_FIELD_MAX) return (NULL); end = value + valuelen - 1; for (fptr = http->fields[field]; *fptr;) { /* * Skip leading whitespace... */ while (isspace(*fptr & 255)) fptr ++; if (*fptr == ',') { fptr ++; continue; } /* * Get the sub-field name... */ for (ptr = temp; *fptr && *fptr != '=' && !isspace(*fptr & 255) && ptr < (temp + sizeof(temp) - 1); *ptr++ = *fptr++); *ptr = '\0'; DEBUG_printf(("httpGetSubField: name=\"%s\"\n", temp)); /* * Skip trailing chars up to the '='... */ while (isspace(*fptr & 255)) fptr ++; if (!*fptr) break; if (*fptr != '=') continue; /* * Skip = and leading whitespace... */ fptr ++; while (isspace(*fptr & 255)) fptr ++; if (*fptr == '\"') { /* * Read quoted string... */ for (ptr = value, fptr ++; *fptr && *fptr != '\"' && ptr < end; *ptr++ = *fptr++); *ptr = '\0'; while (*fptr && *fptr != '\"') fptr ++; if (*fptr) fptr ++; } else { /* * Read unquoted string... */ for (ptr = value; *fptr && !isspace(*fptr & 255) && *fptr != ',' && ptr < end; *ptr++ = *fptr++); *ptr = '\0'; while (*fptr && !isspace(*fptr & 255) && *fptr != ',') fptr ++; } DEBUG_printf(("httpGetSubField: value=\"%s\"\n", value)); /* * See if this is the one... */ if (!strcmp(name, temp)) return (value); } value[0] = '\0'; return (NULL); } /* * 'httpGets()' - Get a line of text from a HTTP connection. */ char * /* O - Line or NULL */ httpGets(char *line, /* I - Line to read into */ int length, /* I - Max length of buffer */ http_t *http) /* I - HTTP connection */ { char *lineptr, /* Pointer into line */ *lineend, /* End of line */ *bufptr, /* Pointer into input buffer */ *bufend; /* Pointer to end of buffer */ int bytes, /* Number of bytes read */ eol; /* End-of-line? */ DEBUG_printf(("httpGets(line=%p, length=%d, http=%p)\n", line, length, http)); if (http == NULL || line == NULL) return (NULL); /* * Read a line from the buffer... */ lineptr = line; lineend = line + length - 1; eol = 0; while (lineptr < lineend) { /* * Pre-load the buffer as needed... */ #ifdef WIN32 WSASetLastError(0); #else errno = 0; #endif /* WIN32 */ while (http->used == 0) { /* * No newline; see if there is more data to be read... */ if (!http->blocking && !http_wait(http, 10000)) { DEBUG_puts("httpGets: Timed out!"); http->error = ETIMEDOUT; return (NULL); } #ifdef HAVE_SSL if (http->tls) bytes = http_read_ssl(http, http->buffer + http->used, HTTP_MAX_BUFFER - http->used); else #endif /* HAVE_SSL */ bytes = recv(http->fd, http->buffer + http->used, HTTP_MAX_BUFFER - http->used, 0); DEBUG_printf(("httpGets: read %d bytes...\n", bytes)); if (bytes < 0) { /* * Nope, can't get a line this time... */ #ifdef WIN32 if (WSAGetLastError() != http->error) { http->error = WSAGetLastError(); continue; } DEBUG_printf(("httpGets: recv() error %d!\n", WSAGetLastError())); #else DEBUG_printf(("httpGets: recv() error %d!\n", errno)); if (errno == EINTR) continue; else if (errno != http->error) { http->error = errno; continue; } #endif /* WIN32 */ return (NULL); } else if (bytes == 0) { http->error = EPIPE; return (NULL); } /* * Yup, update the amount used... */ http->used += bytes; } /* * Now copy as much of the current line as possible... */ for (bufptr = http->buffer, bufend = http->buffer + http->used; lineptr < lineend && bufptr < bufend;) { if (*bufptr == 0x0a) { eol = 1; bufptr ++; break; } else if (*bufptr == 0x0d) bufptr ++; else *lineptr++ = *bufptr++; } http->used -= bufptr - http->buffer; if (http->used > 0) memmove(http->buffer, bufptr, http->used); if (eol) { /* * End of line... */ http->activity = time(NULL); *lineptr = '\0'; DEBUG_printf(("httpGets: Returning \"%s\"\n", line)); return (line); } } DEBUG_puts("httpGets: No new line available!"); return (NULL); } /* * 'httpHead()' - Send a HEAD request to the server. */ int /* O - Status of call (0 = success) */ httpHead(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for head */ { return (http_send(http, HTTP_HEAD, uri)); } /* * 'httpInitialize()' - Initialize the HTTP interface library and set the * default HTTP proxy (if any). */ void httpInitialize(void) { #ifdef HAVE_LIBSSL # ifndef WIN32 struct timeval curtime; /* Current time in microseconds */ # endif /* !WIN32 */ int i; /* Looping var */ unsigned char data[1024]; /* Seed data */ #endif /* HAVE_LIBSSL */ #ifdef WIN32 WSADATA winsockdata; /* WinSock data */ static int initialized = 0; /* Has WinSock been initialized? */ if (!initialized) WSAStartup(MAKEWORD(1,1), &winsockdata); #elif !defined(SO_NOSIGPIPE) /* * Ignore SIGPIPE signals... */ # ifdef HAVE_SIGSET sigset(SIGPIPE, SIG_IGN); # elif defined(HAVE_SIGACTION) struct sigaction action; /* POSIX sigaction data */ memset(&action, 0, sizeof(action)); action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); # else signal(SIGPIPE, SIG_IGN); # endif /* !SO_NOSIGPIPE */ #endif /* WIN32 */ #ifdef HAVE_GNUTLS gnutls_global_init(); #endif /* HAVE_GNUTLS */ #ifdef HAVE_LIBSSL SSL_load_error_strings(); SSL_library_init(); /* * Using the current time is a dubious random seed, but on some systems * it is the best we can do (on others, this seed isn't even used...) */ #ifdef WIN32 #else gettimeofday(&curtime, NULL); srand(curtime.tv_sec + curtime.tv_usec); #endif /* WIN32 */ for (i = 0; i < sizeof(data); i ++) data[i] = rand(); /* Yes, this is a poor source of random data... */ RAND_seed(&data, sizeof(data)); #endif /* HAVE_LIBSSL */ } /* * 'httpOptions()' - Send an OPTIONS request to the server. */ int /* O - Status of call (0 = success) */ httpOptions(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for options */ { return (http_send(http, HTTP_OPTIONS, uri)); } /* * 'httpPost()' - Send a POST request to the server. */ int /* O - Status of call (0 = success) */ httpPost(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for post */ { return (http_send(http, HTTP_POST, uri)); } /* * 'httpPrintf()' - Print a formatted string to a HTTP connection. * * @private@ */ int /* O - Number of bytes written */ httpPrintf(http_t *http, /* I - HTTP connection */ const char *format, /* I - printf-style format string */ ...) /* I - Additional args as needed */ { int bytes; /* Number of bytes to write */ char buf[16384]; /* Buffer for formatted string */ va_list ap; /* Variable argument pointer */ DEBUG_printf(("httpPrintf(http=%p, format=\"%s\", ...)\n", http, format)); va_start(ap, format); bytes = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); DEBUG_printf(("httpPrintf: %s", buf)); if (http->wused) { DEBUG_puts(" flushing existing data..."); if (httpFlushWrite(http) < 0) return (-1); } return (http_write(http, buf, bytes)); } /* * 'httpPut()' - Send a PUT request to the server. */ int /* O - Status of call (0 = success) */ httpPut(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI to put */ { return (http_send(http, HTTP_PUT, uri)); } /* * 'httpRead()' - Read data from a HTTP connection. * * This function is deprecated. Use the httpRead2() function which can * read more than 2GB of data. * * @deprecated@ */ int /* O - Number of bytes read */ httpRead(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer for data */ int length) /* I - Maximum number of bytes */ { return ((int)httpRead2(http, buffer, length)); } /* * 'httpRead2()' - Read data from a HTTP connection. * * @since CUPS 1.2@ */ ssize_t /* O - Number of bytes read */ httpRead2(http_t *http, /* I - HTTP connection */ char *buffer, /* I - Buffer for data */ size_t length) /* I - Maximum number of bytes */ { ssize_t bytes; /* Bytes read */ char len[32]; /* Length string */ DEBUG_printf(("httpRead(http=%p, buffer=%p, length=%d)\n", http, buffer, length)); if (http == NULL || buffer == NULL) return (-1); http->activity = time(NULL); if (length <= 0) return (0); if (http->data_encoding == HTTP_ENCODE_CHUNKED && http->data_remaining <= 0) { DEBUG_puts("httpRead2: Getting chunk length..."); if (httpGets(len, sizeof(len), http) == NULL) { DEBUG_puts("httpRead2: Could not get length!"); return (0); } http->data_remaining = strtoll(len, NULL, 16); if (http->data_remaining < 0) { DEBUG_puts("httpRead2: Negative chunk length!"); return (0); } } DEBUG_printf(("httpRead2: data_remaining=" HTMLDOC_LLFMT "\n", HTMLDOC_LLCAST http->data_remaining)); if (http->data_remaining <= 0) { /* * A zero-length chunk ends a transfer; unless we are reading POST * data, go idle... */ if (http->data_encoding == HTTP_ENCODE_CHUNKED) httpGets(len, sizeof(len), http); if (http->state == HTTP_POST_RECV) http->state ++; else http->state = HTTP_WAITING; /* * Prevent future reads for this request... */ http->data_encoding = HTTP_ENCODE_LENGTH; return (0); } else if (length > http->data_remaining) length = http->data_remaining; if (http->used == 0 && length <= 256) { /* * Buffer small reads for better performance... */ if (!http->blocking && !httpWait(http, 10000)) return (0); if (http->data_remaining > sizeof(http->buffer)) bytes = sizeof(http->buffer); else bytes = http->data_remaining; #ifdef HAVE_SSL if (http->tls) bytes = http_read_ssl(http, http->buffer, bytes); else #endif /* HAVE_SSL */ { DEBUG_printf(("httpRead2: reading %d bytes from socket into buffer...\n", bytes)); bytes = recv(http->fd, http->buffer, bytes, 0); DEBUG_printf(("httpRead2: read %d bytes from socket into buffer...\n", bytes)); } if (bytes > 0) http->used = bytes; else if (bytes < 0) { #ifdef WIN32 http->error = WSAGetLastError(); return (-1); #else if (errno != EINTR) { http->error = errno; return (-1); } #endif /* WIN32 */ } else { http->error = EPIPE; return (0); } } if (http->used > 0) { if (length > http->used) length = http->used; bytes = length; DEBUG_printf(("httpRead2: grabbing %d bytes from input buffer...\n", bytes)); memcpy(buffer, http->buffer, length); http->used -= length; if (http->used > 0) memmove(http->buffer, http->buffer + length, http->used); } #ifdef HAVE_SSL else if (http->tls) { if (!http->blocking && !httpWait(http, 10000)) return (0); bytes = http_read_ssl(http, buffer, length); } #endif /* HAVE_SSL */ else { if (!http->blocking && !httpWait(http, 10000)) return (0); DEBUG_printf(("httpRead2: reading %d bytes from socket...\n", length)); while ((bytes = recv(http->fd, buffer, length, 0)) < 0) if (errno != EINTR) break; DEBUG_printf(("httpRead2: read %d bytes from socket...\n", bytes)); } if (bytes > 0) { http->data_remaining -= bytes; if (http->data_remaining <= INT_MAX) http->_data_remaining = (int)http->data_remaining; else http->_data_remaining = INT_MAX; } else if (bytes < 0) { #ifdef WIN32 http->error = WSAGetLastError(); #else if (errno == EINTR) bytes = 0; else http->error = errno; #endif /* WIN32 */ } else { http->error = EPIPE; return (0); } if (http->data_remaining == 0) { if (http->data_encoding == HTTP_ENCODE_CHUNKED) httpGets(len, sizeof(len), http); if (http->data_encoding != HTTP_ENCODE_CHUNKED) { if (http->state == HTTP_POST_RECV) http->state ++; else http->state = HTTP_WAITING; } } #ifdef DEBUG { int i, j, ch; printf("httpRead2: Read %d bytes:\n", bytes); for (i = 0; i < bytes; i += 16) { printf(" "); for (j = 0; j < 16 && (i + j) < bytes; j ++) printf(" %02X", buffer[i + j] & 255); while (j < 16) { printf(" "); j ++; } printf(" "); for (j = 0; j < 16 && (i + j) < bytes; j ++) { ch = buffer[i + j] & 255; if (ch < ' ' || ch >= 127) ch = '.'; putchar(ch); } putchar('\n'); } } #endif /* DEBUG */ return (bytes); } #if defined(HAVE_SSL) && defined(HAVE_CDSASSL) /* * '_httpReadCDSA()' - Read function for CDSA decryption code. */ OSStatus /* O - -1 on error, 0 on success */ _httpReadCDSA( SSLConnectionRef connection, /* I - SSL/TLS connection */ void *data, /* I - Data buffer */ size_t *dataLength) /* IO - Number of bytes */ { OSStatus result; /* Return value */ ssize_t bytes; /* Number of bytes read */ cdsa_conn_ref_t u; /* Connection reference union */ u.connection = connection; do bytes = recv(u.sock, data, *dataLength, 0); while (bytes == -1 && errno == EINTR); if (bytes == *dataLength) result = 0; else if (bytes > 0) { *dataLength = bytes; result = errSSLWouldBlock; } else { *dataLength = 0; if (bytes == 0) result = errSSLClosedGraceful; else if (errno == EAGAIN) result = errSSLWouldBlock; else result = errSSLClosedAbort; } return result; } #endif /* HAVE_SSL && HAVE_CDSASSL */ /* * 'httpReconnect()' - Reconnect to a HTTP server. */ int /* O - 0 on success, non-zero on failure */ httpReconnect(http_t *http) /* I - HTTP connection */ { http_addrlist_t *addr; /* Connected address */ DEBUG_printf(("httpReconnect(http=%p)\n", http)); if (!http) return (-1); #ifdef HAVE_SSL if (http->tls) http_shutdown_ssl(http); #endif /* HAVE_SSL */ /* * Close any previously open socket... */ if (http->fd >= 0) { #ifdef WIN32 closesocket(http->fd); #else close(http->fd); #endif /* WIN32 */ http->fd = -1; } /* * Connect to the server... */ if ((addr = httpAddrConnect(http->addrlist, &(http->fd))) == NULL) { /* * Unable to connect... */ #ifdef WIN32 http->error = WSAGetLastError(); #else http->error = errno; #endif /* WIN32 */ http->status = HTTP_ERROR; return (-1); } http->hostaddr = &(addr->addr); http->error = 0; http->status = HTTP_CONTINUE; #ifdef HAVE_SSL if (http->encryption == HTTP_ENCRYPT_ALWAYS) { /* * Always do encryption via SSL. */ if (http_setup_ssl(http) != 0) { #ifdef WIN32 closesocket(http->fd); #else close(http->fd); #endif /* WIN32 */ return (-1); } } else if (http->encryption == HTTP_ENCRYPT_REQUIRED) return (http_upgrade(http)); #endif /* HAVE_SSL */ return (0); } /* * 'httpSetCookie()' - Set the cookie value(s)... * * @since CUPS 1.1.19@ */ void httpSetCookie(http_t *http, /* I - Connection */ const char *cookie) /* I - Cookie string */ { if (!http) return; if (http->cookie) free(http->cookie); if (cookie) http->cookie = strdup(cookie); else http->cookie = NULL; } /* * 'httpSetExpect()' - Set the Expect: header in a request. * * Currently only HTTP_CONTINUE is supported for the "expect" argument. * * @since CUPS 1.2@ */ void httpSetExpect(http_t *http, /* I - HTTP connection */ http_status_t expect) /* I - HTTP status to expect (HTTP_CONTINUE) */ { if (http) http->expect = expect; } /* * 'httpSetField()' - Set the value of an HTTP header. */ void httpSetField(http_t *http, /* I - HTTP connection */ http_field_t field, /* I - Field index */ const char *value) /* I - Value */ { if (http == NULL || field < HTTP_FIELD_ACCEPT_LANGUAGE || field > HTTP_FIELD_WWW_AUTHENTICATE || value == NULL) return; strlcpy(http->fields[field], value, HTTP_MAX_VALUE); } /* * 'httpSetLength()' - Set the content-length and content-encoding. * * @since CUPS 1.2@ */ void httpSetLength(http_t *http, /* I - HTTP connection */ size_t length) /* I - Length (0 for chunked) */ { if (!http) return; if (!length) { strcpy(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked"); http->fields[HTTP_FIELD_CONTENT_LENGTH][0] = '\0'; } else { http->fields[HTTP_FIELD_TRANSFER_ENCODING][0] = '\0'; snprintf(http->fields[HTTP_FIELD_CONTENT_LENGTH], HTTP_MAX_VALUE, HTMLDOC_LLFMT, HTMLDOC_LLCAST length); } } /* * 'httpTrace()' - Send an TRACE request to the server. */ int /* O - Status of call (0 = success) */ httpTrace(http_t *http, /* I - HTTP connection */ const char *uri) /* I - URI for trace */ { return (http_send(http, HTTP_TRACE, uri)); } /* * 'httpUpdate()' - Update the current HTTP state for incoming data. */ http_status_t /* O - HTTP status */ httpUpdate(http_t *http) /* I - HTTP connection */ { char line[32768], /* Line from connection... */ *value; /* Pointer to value on line */ http_field_t field; /* Field index */ int major, minor, /* HTTP version numbers */ status; /* Request status */ DEBUG_printf(("httpUpdate(http=%p), state=%d\n", http, http->state)); /* * Flush pending data, if any... */ if (http->wused) { DEBUG_puts(" flushing buffer..."); if (httpFlushWrite(http) < 0) return (HTTP_ERROR); } /* * If we haven't issued any commands, then there is nothing to "update"... */ if (http->state == HTTP_WAITING) return (HTTP_CONTINUE); /* * Grab all of the lines we can from the connection... */ while (httpGets(line, sizeof(line), http) != NULL) { DEBUG_printf(("httpUpdate: Got \"%s\"\n", line)); if (line[0] == '\0') { /* * Blank line means the start of the data section (if any). Return * the result code, too... * * If we get status 100 (HTTP_CONTINUE), then we *don't* change states. * Instead, we just return HTTP_CONTINUE to the caller and keep on * tryin'... */ if (http->status == HTTP_CONTINUE) return (http->status); if (http->status < HTTP_BAD_REQUEST) http->digest_tries = 0; #ifdef HAVE_SSL if (http->status == HTTP_SWITCHING_PROTOCOLS && !http->tls) { if (http_setup_ssl(http) != 0) { # ifdef WIN32 closesocket(http->fd); # else close(http->fd); # endif /* WIN32 */ return (HTTP_ERROR); } return (HTTP_CONTINUE); } #endif /* HAVE_SSL */ httpGetLength2(http); switch (http->state) { case HTTP_GET : case HTTP_POST : case HTTP_POST_RECV : case HTTP_PUT : http->state ++; case HTTP_POST_SEND : case HTTP_HEAD : break; default : http->state = HTTP_WAITING; break; } return (http->status); } else if (strncmp(line, "HTTP/", 5) == 0) { /* * Got the beginning of a response... */ if (sscanf(line, "HTTP/%d.%d%d", &major, &minor, &status) != 3) return (HTTP_ERROR); http->version = (http_version_t)(major * 100 + minor); http->status = (http_status_t)status; } else if ((value = strchr(line, ':')) != NULL) { /* * Got a value... */ *value++ = '\0'; while (isspace(*value & 255)) value ++; /* * Be tolerants of servers that send unknown attribute fields... */ if (!strcasecmp(line, "expect")) { /* * "Expect: 100-continue" or similar... */ http->expect = (http_status_t)atoi(value); } else if (!strcasecmp(line, "cookie")) { /* * "Cookie: name=value[; name=value ...]" - replaces previous cookies... */ httpSetCookie(http, value); } else if ((field = http_field(line)) == HTTP_FIELD_UNKNOWN) { DEBUG_printf(("httpUpdate: unknown field %s seen!\n", line)); continue; } else httpSetField(http, field, value); } else { http->status = HTTP_ERROR; return (HTTP_ERROR); } } /* * See if there was an error... */ if (http->error == EPIPE && http->status > HTTP_CONTINUE) return (http->status); if (http->error) { DEBUG_printf(("httpUpdate: socket error %d - %s\n", http->error, strerror(http->error))); http->status = HTTP_ERROR; return (HTTP_ERROR); } /* * If we haven't already returned, then there is nothing new... */ return (HTTP_CONTINUE); } /* * 'httpWait()' - Wait for data available on a connection. * * @since CUPS 1.1.19@ */ int /* O - 1 if data is available, 0 otherwise */ httpWait(http_t *http, /* I - HTTP connection */ int msec) /* I - Milliseconds to wait */ { /* * First see if there is data in the buffer... */ if (http == NULL) return (0); if (http->used) return (1); /* * If not, check the SSL/TLS buffers and do a select() on the connection... */ return (http_wait(http, msec)); } /* * 'httpWrite()' - Write data to a HTTP connection. * * This function is deprecated. Use the httpWrite2() function which can * write more than 2GB of data. * * @deprecated@ */ int /* O - Number of bytes written */ httpWrite(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer for data */ int length) /* I - Number of bytes to write */ { return ((int)httpWrite2(http, buffer, length)); } /* * 'httpWrite2()' - Write data to a HTTP connection. * * @since CUPS 1.2@ */ ssize_t /* O - Number of bytes written */ httpWrite2(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer for data */ size_t length) /* I - Number of bytes to write */ { ssize_t bytes; /* Bytes written */ DEBUG_printf(("httpWrite(http=%p, buffer=%p, length=%d)\n", http, buffer, length)); /* * Range check input... */ if (http == NULL || buffer == NULL) return (-1); /* * Mark activity on the connection... */ http->activity = time(NULL); /* * Buffer small writes for better performance... */ if (length > 0) { if (http->wused && (length + http->wused) > sizeof(http->wbuffer)) { DEBUG_printf((" flushing buffer (wused=%d, length=%d)\n", http->wused, length)); httpFlushWrite(http); } if ((length + http->wused) <= sizeof(http->wbuffer)) { /* * Write to buffer... */ DEBUG_printf((" copying %d bytes to wbuffer...\n", length)); memcpy(http->wbuffer + http->wused, buffer, length); http->wused += length; bytes = length; } else { /* * Otherwise write the data directly... */ DEBUG_printf((" writing %d bytes to socket...\n", length)); if (http->data_encoding == HTTP_ENCODE_CHUNKED) bytes = http_write_chunk(http, buffer, length); else bytes = http_write(http, buffer, length); DEBUG_printf((" wrote %d bytes...\n", bytes)); } if (http->data_encoding == HTTP_ENCODE_LENGTH) http->data_remaining -= bytes; } else bytes = 0; /* * Handle end-of-request processing... */ if ((http->data_encoding == HTTP_ENCODE_CHUNKED && length == 0) || (http->data_encoding == HTTP_ENCODE_LENGTH && http->data_remaining == 0)) { /* * Finished with the transfer; unless we are sending POST or PUT * data, go idle... */ DEBUG_puts("httpWrite: changing states..."); if (http->wused) httpFlushWrite(http); if (http->data_encoding == HTTP_ENCODE_CHUNKED) { /* * Send a 0-length chunk at the end of the request... */ http_write(http, "0\r\n\r\n", 5); /* * Reset the data state... */ http->data_encoding = HTTP_ENCODE_LENGTH; http->data_remaining = 0; } if (http->state == HTTP_POST_RECV) http->state ++; else if (http->state == HTTP_PUT_RECV) http->state = HTTP_STATUS; else http->state = HTTP_WAITING; } return (bytes); } #if defined(HAVE_SSL) && defined(HAVE_CDSASSL) /* * '_httpWriteCDSA()' - Write function for CDSA encryption code. */ OSStatus /* O - -1 on error, 0 on success */ _httpWriteCDSA( SSLConnectionRef connection, /* I - SSL/TLS connection */ const void *data, /* I - Data buffer */ size_t *dataLength) /* IO - Number of bytes */ { OSStatus result; /* Return value */ ssize_t bytes; /* Number of bytes read */ cdsa_conn_ref_t u; /* Connection reference union */ u.connection = connection; do bytes = write(u.sock, data, *dataLength); while (bytes == -1 && errno == EINTR); if (bytes == *dataLength) result = 0; else if (bytes >= 0) { *dataLength = bytes; result = errSSLWouldBlock; } else { *dataLength = 0; if (errno == EAGAIN) result = errSSLWouldBlock; else result = errSSLClosedAbort; } return result; } #endif /* HAVE_SSL && HAVE_CDSASSL */ /* * 'http_field()' - Return the field index for a field name. */ static http_field_t /* O - Field index */ http_field(const char *name) /* I - String name */ { int i; /* Looping var */ for (i = 0; i < HTTP_FIELD_MAX; i ++) if (strcasecmp(name, http_fields[i]) == 0) return ((http_field_t)i); return (HTTP_FIELD_UNKNOWN); } #ifdef HAVE_SSL /* * 'http_read_ssl()' - Read from a SSL/TLS connection. */ static int /* O - Bytes read */ http_read_ssl(http_t *http, /* I - HTTP connection */ char *buf, /* I - Buffer to store data */ int len) /* I - Length of buffer */ { # if defined(HAVE_LIBSSL) return (SSL_read((SSL *)(http->tls), buf, len)); # elif defined(HAVE_GNUTLS) return (gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len)); # elif defined(HAVE_CDSASSL) int result; /* Return value */ OSStatus error; /* Error info */ size_t processed; /* Number of bytes processed */ error = SSLRead(((http_tls_t *)http->tls)->session, buf, len, &processed); switch (error) { case 0 : result = (int)processed; break; case errSSLClosedGraceful : result = 0; break; case errSSLWouldBlock : if (processed) result = (int)processed; else { result = -1; errno = EINTR; } break; default : errno = EPIPE; result = -1; break; } return (result); # endif /* HAVE_LIBSSL */ } #endif /* HAVE_SSL */ /* * 'http_send()' - Send a request with all fields and the trailing blank line. */ static int /* O - 0 on success, non-zero on error */ http_send(http_t *http, /* I - HTTP connection */ http_state_t request, /* I - Request code */ const char *uri) /* I - URI */ { int i; /* Looping var */ char *ptr, /* Pointer in buffer */ buf[1024]; /* Encoded URI buffer */ static const char * const codes[] = { /* Request code strings */ NULL, "OPTIONS", "GET", NULL, "HEAD", "POST", NULL, NULL, "PUT", NULL, "DELETE", "TRACE", "CLOSE" }; static const char hex[] = "0123456789ABCDEF"; /* Hex digits */ DEBUG_printf(("http_send(http=%p, request=HTTP_%s, uri=\"%s\")\n", http, codes[request], uri)); if (http == NULL || uri == NULL) return (-1); /* * Set the User-Agent field if it isn't already... */ if (!http->fields[HTTP_FIELD_USER_AGENT][0]) httpSetField(http, HTTP_FIELD_USER_AGENT, "HTMLDOC/" SVERSION); /* * Encode the URI as needed... */ for (ptr = buf; *uri != '\0' && ptr < (buf + sizeof(buf) - 1); uri ++) if (*uri <= ' ' || *uri >= 127) { if (ptr < (buf + sizeof(buf) - 1)) *ptr ++ = '%'; if (ptr < (buf + sizeof(buf) - 1)) *ptr ++ = hex[(*uri >> 4) & 15]; if (ptr < (buf + sizeof(buf) - 1)) *ptr ++ = hex[*uri & 15]; } else *ptr ++ = *uri; *ptr = '\0'; /* * See if we had an error the last time around; if so, reconnect... */ if (http->status == HTTP_ERROR || http->status >= HTTP_BAD_REQUEST) if (httpReconnect(http)) return (-1); /* * Send the request header... */ http->state = request; if (request == HTTP_POST || request == HTTP_PUT) http->state ++; http->status = HTTP_CONTINUE; #ifdef HAVE_SSL if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls) { httpSetField(http, HTTP_FIELD_CONNECTION, "Upgrade"); httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.0,SSL/2.0,SSL/3.0"); } #endif /* HAVE_SSL */ if (httpPrintf(http, "%s %s HTTP/1.1\r\n", codes[request], buf) < 1) { http->status = HTTP_ERROR; return (-1); } for (i = 0; i < HTTP_FIELD_MAX; i ++) if (http->fields[i][0] != '\0') { DEBUG_printf(("%s: %s\n", http_fields[i], http->fields[i])); if (httpPrintf(http, "%s: %s\r\n", http_fields[i], http->fields[i]) < 1) { http->status = HTTP_ERROR; return (-1); } } if (http->cookie) if (httpPrintf(http, "Cookie: $Version=0; %s\r\n", http->cookie) < 1) { http->status = HTTP_ERROR; return (-1); } if (http->expect == HTTP_CONTINUE && (http->state == HTTP_POST_RECV || http->state == HTTP_PUT_RECV)) if (httpPrintf(http, "Expect: 100-continue\r\n") < 1) { http->status = HTTP_ERROR; return (-1); } if (httpPrintf(http, "\r\n") < 1) { http->status = HTTP_ERROR; return (-1); } httpGetLength2(http); httpClearFields(http); return (0); } #ifdef HAVE_SSL /* * 'http_setup_ssl()' - Set up SSL/TLS support on a connection. */ static int /* O - Status of connection */ http_setup_ssl(http_t *http) /* I - HTTP connection */ { # ifdef HAVE_LIBSSL SSL_CTX *context; /* Context for encryption */ SSL *conn; /* Connection for encryption */ # elif defined(HAVE_GNUTLS) http_tls_t *conn; /* TLS session object */ gnutls_certificate_client_credentials *credentials; /* TLS credentials */ # elif defined(HAVE_CDSASSL) OSStatus error; /* Error code */ http_tls_t *conn; /* CDSA connection information */ cdsa_conn_ref_t u; /* Connection reference union */ # endif /* HAVE_LIBSSL */ DEBUG_printf(("http_setup_ssl(http=%p)\n", http)); # ifdef HAVE_LIBSSL context = SSL_CTX_new(SSLv23_client_method()); SSL_CTX_set_options(context, SSL_OP_NO_SSLv2); /* Only use SSLv3 or TLS */ conn = SSL_new(context); SSL_set_fd(conn, http->fd); if (SSL_connect(conn) != 1) { # ifdef DEBUG unsigned long error; /* Error code */ while ((error = ERR_get_error()) != 0) printf("http_setup_ssl: %s\n", ERR_error_string(error, NULL)); # endif /* DEBUG */ SSL_CTX_free(context); SSL_free(conn); # ifdef WIN32 http->error = WSAGetLastError(); # else http->error = errno; # endif /* WIN32 */ http->status = HTTP_ERROR; return (HTTP_ERROR); } # elif defined(HAVE_GNUTLS) if ((conn = (http_tls_t *)malloc(sizeof(http_tls_t))) == NULL) { http->error = errno; http->status = HTTP_ERROR; return (-1); } credentials = (gnutls_certificate_client_credentials *) malloc(sizeof(gnutls_certificate_client_credentials)); if (credentials == NULL) { free(conn); http->error = errno; http->status = HTTP_ERROR; return (-1); } gnutls_certificate_allocate_credentials(credentials); gnutls_init(&(conn->session), GNUTLS_CLIENT); gnutls_set_default_priority(conn->session); gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE, *credentials); gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr)((long)http->fd)); if ((gnutls_handshake(conn->session)) != GNUTLS_E_SUCCESS) { http->error = errno; http->status = HTTP_ERROR; return (-1); } conn->credentials = credentials; # elif defined(HAVE_CDSASSL) conn = (http_tls_t *)calloc(1, sizeof(http_tls_t)); if (conn == NULL) return (-1); if ((error = SSLNewContext(false, &conn->session))) { http->error = error; http->status = HTTP_ERROR; free(conn); return (-1); } /* * Use a union to resolve warnings about int/pointer size mismatches... */ u.connection = NULL; u.sock = http->fd; error = SSLSetConnection(conn->session, u.connection); if (!error) error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA); if (!error) error = SSLSetAllowsExpiredCerts(conn->session, true); if (!error) error = SSLSetAllowsAnyRoot(conn->session, true); if (!error) error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false); if (!error) { while ((error = SSLHandshake(conn->session)) == errSSLWouldBlock) usleep(1000); } if (error) { http->error = error; http->status = HTTP_ERROR; SSLDisposeContext(conn->session); free(conn); return (-1); } # endif /* HAVE_CDSASSL */ http->tls = conn; return (0); } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /* * 'http_shutdown_ssl()' - Shut down SSL/TLS on a connection. */ static void http_shutdown_ssl(http_t *http) /* I - HTTP connection */ { # ifdef HAVE_LIBSSL SSL_CTX *context; /* Context for encryption */ SSL *conn; /* Connection for encryption */ conn = (SSL *)(http->tls); context = SSL_get_SSL_CTX(conn); SSL_shutdown(conn); SSL_CTX_free(context); SSL_free(conn); # elif defined(HAVE_GNUTLS) http_tls_t *conn; /* Encryption session */ gnutls_certificate_client_credentials *credentials; /* TLS credentials */ conn = (http_tls_t *)(http->tls); credentials = (gnutls_certificate_client_credentials *)(conn->credentials); gnutls_bye(conn->session, GNUTLS_SHUT_RDWR); gnutls_deinit(conn->session); gnutls_certificate_free_credentials(*credentials); free(credentials); free(conn); # elif defined(HAVE_CDSASSL) http_tls_t *conn; /* CDSA connection information */ conn = (http_tls_t *)(http->tls); while (SSLClose(conn->session) == errSSLWouldBlock) usleep(1000); SSLDisposeContext(conn->session); if (conn->certsArray) CFRelease(conn->certsArray); free(conn); # endif /* HAVE_LIBSSL */ http->tls = NULL; } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /* * 'http_upgrade()' - Force upgrade to TLS encryption. */ static int /* O - Status of connection */ http_upgrade(http_t *http) /* I - HTTP connection */ { int ret; /* Return value */ http_t myhttp; /* Local copy of HTTP data */ DEBUG_printf(("http_upgrade(%p)\n", http)); /* * Copy the HTTP data to a local variable so we can do the OPTIONS * request without interfering with the existing request data... */ memcpy(&myhttp, http, sizeof(myhttp)); /* * Send an OPTIONS request to the server, requiring SSL or TLS * encryption on the link... */ httpClearFields(&myhttp); httpSetField(&myhttp, HTTP_FIELD_CONNECTION, "upgrade"); httpSetField(&myhttp, HTTP_FIELD_UPGRADE, "TLS/1.0, SSL/2.0, SSL/3.0"); if ((ret = httpOptions(&myhttp, "*")) == 0) { /* * Wait for the secure connection... */ while (httpUpdate(&myhttp) == HTTP_CONTINUE); } httpFlush(&myhttp); /* * Copy the HTTP data back over, if any... */ http->fd = myhttp.fd; http->error = myhttp.error; http->activity = myhttp.activity; http->status = myhttp.status; http->version = myhttp.version; http->keep_alive = myhttp.keep_alive; http->used = myhttp.used; if (http->used) memcpy(http->buffer, myhttp.buffer, http->used); http->auth_type = myhttp.auth_type; http->nonce_count = myhttp.nonce_count; memcpy(http->nonce, myhttp.nonce, sizeof(http->nonce)); http->tls = myhttp.tls; http->encryption = myhttp.encryption; /* * See if we actually went secure... */ if (!http->tls) { /* * Server does not support HTTP upgrade... */ DEBUG_puts("Server does not support HTTP upgrade!"); # ifdef WIN32 closesocket(http->fd); # else close(http->fd); # endif http->fd = -1; return (-1); } else return (ret); } #endif /* HAVE_SSL */ /* * 'http_wait()' - Wait for data available on a connection. */ static int /* O - 1 if data is available, 0 otherwise */ http_wait(http_t *http, /* I - HTTP connection */ int msec) /* I - Milliseconds to wait */ { #ifndef WIN32 struct rlimit limit; /* Runtime limit */ int set_size; /* Size of select set */ #endif /* !WIN32 */ struct timeval timeout; /* Timeout */ int nfds; /* Result from select() */ DEBUG_printf(("http_wait(http=%p, msec=%d)\n", http, msec)); if (http->fd < 0) return (0); /* * Check the SSL/TLS buffers for data first... */ #ifdef HAVE_SSL if (http->tls) { # ifdef HAVE_LIBSSL if (SSL_pending((SSL *)(http->tls))) return (1); # elif defined(HAVE_GNUTLS) if (gnutls_record_check_pending(((http_tls_t *)(http->tls))->session)) return (1); # elif defined(HAVE_CDSASSL) size_t bytes; /* Bytes that are available */ if (!SSLGetBufferedReadSize(((http_tls_t *)http->tls)->session, &bytes) && bytes > 0) return (1); # endif /* HAVE_LIBSSL */ } #endif /* HAVE_SSL */ /* * Then try doing a select() to poll the socket... */ if (!http->input_set) { #ifdef WIN32 /* * Windows has a fixed-size select() structure, different (surprise, * surprise!) from all UNIX implementations. Just allocate this * fixed structure... */ http->input_set = calloc(1, sizeof(fd_set)); #else /* * Allocate the select() input set based upon the max number of file * descriptors available for this process... */ getrlimit(RLIMIT_NOFILE, &limit); set_size = (limit.rlim_cur + 31) / 8 + 4; if (set_size < sizeof(fd_set)) set_size = sizeof(fd_set); http->input_set = calloc(1, set_size); #endif /* WIN32 */ if (!http->input_set) return (0); } do { FD_SET(http->fd, http->input_set); DEBUG_printf(("http_wait: msec=%d, http->fd=%d\n", msec, http->fd)); if (msec >= 0) { timeout.tv_sec = msec / 1000; timeout.tv_usec = (msec % 1000) * 1000; nfds = select(http->fd + 1, http->input_set, NULL, NULL, &timeout); } else nfds = select(http->fd + 1, http->input_set, NULL, NULL, NULL); DEBUG_printf(("http_wait: select() returned %d...\n", nfds)); } #ifdef WIN32 while (nfds < 0 && WSAGetLastError() == WSAEINTR); #else while (nfds < 0 && errno == EINTR); #endif /* WIN32 */ FD_CLR(http->fd, http->input_set); DEBUG_printf(("http_wait: returning with nfds=%d...\n", nfds)); return (nfds > 0); } /* * 'http_write()' - Write a buffer to a HTTP connection. */ static int /* O - Number of bytes written */ http_write(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer for data */ int length) /* I - Number of bytes to write */ { int tbytes, /* Total bytes sent */ bytes; /* Bytes sent */ tbytes = 0; while (length > 0) { #ifdef HAVE_SSL if (http->tls) bytes = http_write_ssl(http, buffer, length); else #endif /* HAVE_SSL */ bytes = send(http->fd, buffer, length, 0); if (bytes < 0) { #ifdef WIN32 if (WSAGetLastError() != http->error) { http->error = WSAGetLastError(); continue; } #else if (errno == EINTR) continue; else if (errno != http->error && errno != ECONNRESET) { http->error = errno; continue; } #endif /* WIN32 */ DEBUG_puts("http_write: error writing data...\n"); return (-1); } buffer += bytes; tbytes += bytes; length -= bytes; } #ifdef DEBUG { int i, j, ch; printf("http_write: wrote %d bytes: \n", tbytes); for (i = 0, buffer -= tbytes; i < tbytes; i += 16) { printf(" "); for (j = 0; j < 16 && (i + j) < tbytes; j ++) printf(" %02X", buffer[i + j] & 255); while (j < 16) { printf(" "); j ++; } printf(" "); for (j = 0; j < 16 && (i + j) < tbytes; j ++) { ch = buffer[i + j] & 255; if (ch < ' ' || ch == 127) ch = '.'; putchar(ch); } putchar('\n'); } } #endif /* DEBUG */ return (tbytes); } /* * 'http_write_chunk()' - Write a chunked buffer. */ static int /* O - Number bytes written */ http_write_chunk(http_t *http, /* I - HTTP connection */ const char *buffer, /* I - Buffer to write */ int length) /* I - Length of buffer */ { char header[255]; /* Chunk header */ int bytes; /* Bytes written */ DEBUG_printf(("http_write_chunk(http=%p, buffer=%p, length=%d)\n", http, buffer, length)); /* * Write the chunk header, data, and trailer. */ sprintf(header, "%x\r\n", length); if (http_write(http, header, strlen(header)) < 0) { DEBUG_puts(" http_write of length failed!"); return (-1); } if ((bytes = http_write(http, buffer, length)) < 0) { DEBUG_puts(" http_write of buffer failed!"); return (-1); } if (http_write(http, "\r\n", 2) < 0) { DEBUG_puts(" http_write of CR LF failed!"); return (-1); } return (bytes); } #ifdef HAVE_SSL /* * 'http_write_ssl()' - Write to a SSL/TLS connection. */ static int /* O - Bytes written */ http_write_ssl(http_t *http, /* I - HTTP connection */ const char *buf, /* I - Buffer holding data */ int len) /* I - Length of buffer */ { # if defined(HAVE_LIBSSL) return (SSL_write((SSL *)(http->tls), buf, len)); # elif defined(HAVE_GNUTLS) return (gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len)); # elif defined(HAVE_CDSASSL) int result; /* Return value */ OSStatus error; /* Error info */ size_t processed; /* Number of bytes processed */ error = SSLWrite(((http_tls_t *)http->tls)->session, buf, len, &processed); switch (error) { case 0 : result = (int)processed; break; case errSSLClosedGraceful : result = 0; break; case errSSLWouldBlock : if (processed) result = (int)processed; else { result = -1; errno = EINTR; } break; default : errno = EPIPE; result = -1; break; } return (result); # endif /* HAVE_LIBSSL */ } #endif /* HAVE_SSL */ /* * End of "$Id: http.c 1493 2006-06-07 18:20:49Z mike $". */ htmldoc-1.8.27/htmldoc/html.cxx0100664000212600000240000006542310437332740015061 0ustar mikeuser/* * "$Id: html.cxx 1486 2006-05-31 15:27:28Z mike $" * * HTML exporting functions for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * html_export() - Export to HTML... * count_headers() - Count the number of first and second level headings * in a document tree. * write_header() - Output the standard "header" for a HTML file. * write_footer() - Output the standard "footer" for a HTML file. * write_all() - Write all markup text for the given tree. * get_title() - Get the title string for the given document... * add_link() - Add a named link... * find_link() - Find a named link... * compare_links() - Compare two named links. */ /* * Include necessary headers. */ #include "htmldoc.h" #include /* * Named link structure... */ typedef struct { uchar *filename; /* File for link */ uchar name[124]; /* Reference name */ } link_t; /* * Local globals... */ static int num_links = 0, alloc_links = 0; static link_t *links; /* * Local functions... */ extern "C" { typedef int (*compare_func_t)(const void *, const void *); } static void write_header(FILE **out, uchar *filename, uchar *title, uchar *author, uchar *copyright, uchar *docnumber, tree_t *t); static void write_footer(FILE **out, tree_t *t); static void write_title(FILE *out, uchar *title, uchar *author, uchar *copyright, uchar *docnumber); static int write_all(FILE *out, tree_t *t, int col); static int write_node(FILE *out, tree_t *t, int col); static int write_nodeclose(FILE *out, tree_t *t, int col); static int write_toc(FILE *out, tree_t *t, int col); static uchar *get_title(tree_t *doc); static void add_link(uchar *name, uchar *filename); static link_t *find_link(uchar *name); static int compare_links(link_t *n1, link_t *n2); static void scan_links(tree_t *t, uchar *filename); static void update_links(tree_t *t, uchar *filename); /* * 'html_export()' - Export to HTML... */ int /* O - 0 = success, -1 = failure */ html_export(tree_t *document, /* I - Document to export */ tree_t *toc) /* I - Table of contents for document */ { uchar *title, /* Title text */ *author, /* Author name */ *copyright, /* Copyright text */ *docnumber; /* Document number */ FILE *out; /* Output file */ /* * Copy logo and title images... */ if (OutputFiles) { if (LogoImage[0]) image_copy(LogoImage, file_find(LogoImage, Path), OutputPath); for (int hfi = 0; hfi < MAX_HF_IMAGES; hfi ++) if (HFImage[hfi][0]) image_copy(HFImage[hfi], file_find(HFImage[hfi], Path), OutputPath); } if (OutputFiles && TitleImage[0] && TitlePage && #ifdef WIN32 stricmp(file_extension(TitleImage), "bmp") == 0 || stricmp(file_extension(TitleImage), "gif") == 0 || stricmp(file_extension(TitleImage), "jpg") == 0 || stricmp(file_extension(TitleImage), "png") == 0) #else strcmp(file_extension(TitleImage), "bmp") == 0 || strcmp(file_extension(TitleImage), "gif") == 0 || strcmp(file_extension(TitleImage), "jpg") == 0 || strcmp(file_extension(TitleImage), "png") == 0) #endif // WIN32 image_copy(TitleImage, file_find(TitleImage, Path), OutputPath); /* * Get document strings... */ title = get_title(document); author = htmlGetMeta(document, (uchar *)"author"); copyright = htmlGetMeta(document, (uchar *)"copyright"); docnumber = htmlGetMeta(document, (uchar *)"docnumber"); /* * Scan for all links in the document, and then update them... */ num_links = 0; alloc_links = 0; links = NULL; scan_links(document, NULL); update_links(document, NULL); update_links(toc, NULL); /* * Generate title pages and a table of contents... */ out = NULL; if (TitlePage) { write_header(&out, (uchar *)"index.html", title, author, copyright, docnumber, NULL); if (out != NULL) write_title(out, title, author, copyright, docnumber); write_footer(&out, NULL); write_header(&out, (uchar *)"toc.html", title, author, copyright, docnumber, NULL); } else write_header(&out, (uchar *)"index.html", title, author, copyright, docnumber, NULL); if (out != NULL) write_toc(out, toc, 0); write_footer(&out, NULL); /* * Then write each output file... */ while (document != NULL) { write_header(&out, htmlGetVariable(document, (uchar *)"_HD_FILENAME"), title, author, copyright, docnumber, document); if (out != NULL) write_all(out, document->child, 0); write_footer(&out, document); document = document->next; } if (!OutputFiles && out != stdout && out != NULL) { fputs("\n", out); fputs("\n", out); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(out)); fclose(out); } if (title != NULL) free(title); if (alloc_links) { free(links); num_links = 0; alloc_links = 0; links = NULL; } return (out == NULL); } /* * 'write_header()' - Output the standard "header" for a HTML file. */ static void write_header(FILE **out, /* IO - Output file */ uchar *filename, /* I - Output filename */ uchar *title, /* I - Title for document */ uchar *author, /* I - Author for document */ uchar *copyright, /* I - Copyright for document */ uchar *docnumber, /* I - ID number for document */ tree_t *t) /* I - Current document file */ { char realname[1024]; /* Real filename */ const char *basename; /* Filename without directory */ int newfile; /* Non-zero if this is a new file */ static const char *families[] =/* Typeface names */ { "monospace", "serif", "sans-serif", "monospace", "serif", "sans-serif", "symbol", "dingbats" }; if (OutputFiles) { newfile = 1; basename = file_basename((char *)filename); snprintf(realname, sizeof(realname), "%s/%s", OutputPath, basename); *out = fopen(realname, "wb"); } else if (OutputPath[0]) { if (*out == NULL) { *out = fopen(OutputPath, "wb"); newfile = 1; } else newfile = 0; } else { if (*out == NULL) { *out = stdout; newfile = 1; } else newfile = 0; } if (*out == NULL) { progress_error(HD_ERROR_WRITE_ERROR, "Unable to create output file \"%s\" - %s.\n", OutputFiles ? realname : OutputPath, strerror(errno)); return; } if (newfile) { fputs("\n", *out); fputs("\n", *out); fputs("\n", *out); if (title != NULL) fprintf(*out, "%s\n", title); if (author != NULL) fprintf(*out, "\n", author); if (copyright != NULL) fprintf(*out, "\n", copyright); if (docnumber != NULL) fprintf(*out, "\n", docnumber); fprintf(*out, "\n", _htmlCharSet); if (OutputFiles) { fputs("\n", *out); if (TitlePage) fputs("\n", *out); else fputs("\n", *out); if (t) { if (t->prev != NULL) fprintf(*out, "\n", file_basename((char *)htmlGetVariable(t->prev, (uchar *)"_HD_FILENAME"))); if (t->next != NULL) fprintf(*out, "\n", file_basename((char *)htmlGetVariable(t->next, (uchar *)"_HD_FILENAME"))); } } fputs("\n", *out); fputs("\n", *out); if (BodyImage[0]) fprintf(*out, "\n", *out); } else fputs("
    \n", *out); if (OutputFiles && t != NULL && (t->prev != NULL || t->next != NULL)) { if (LogoImage[0]) fprintf(*out, "\n", file_basename(LogoImage)); for (int hfi = 0; hfi < MAX_HF_IMAGES; ++hfi) if (HFImage[hfi][0]) fprintf(*out, "\n", file_basename(HFImage[hfi])); if (TitlePage) fputs("Contents\n", *out); else fputs("Contents\n", *out); if (t->prev != NULL) fprintf(*out, "Previous\n", file_basename((char *)htmlGetVariable(t->prev, (uchar *)"_HD_FILENAME"))); if (t->next != NULL) fprintf(*out, "Next\n", file_basename((char *)htmlGetVariable(t->next, (uchar *)"_HD_FILENAME"))); fputs("
    \n", *out); } } /* * 'write_footer()' - Output the standard "footer" for a HTML file. */ static void write_footer(FILE **out, /* IO - Output file pointer */ tree_t *t) /* I - Current document file */ { if (*out == NULL) return; if (OutputFiles && t != NULL && (t->prev != NULL || t->next != NULL)) { fputs("
    \n", *out); if (LogoImage[0]) fprintf(*out, "\n", file_basename(LogoImage)); for (int hfi = 0; hfi < MAX_HF_IMAGES; ++hfi) if (HFImage[hfi][0]) fprintf(*out, "\n", file_basename(HFImage[hfi])); if (TitlePage) fputs("Contents\n", *out); else fputs("Contents\n", *out); if (t->prev != NULL) fprintf(*out, "Previous\n", file_basename((char *)htmlGetVariable(t->prev, (uchar *)"_HD_FILENAME"))); if (t->next != NULL) fprintf(*out, "Next\n", file_basename((char *)htmlGetVariable(t->next, (uchar *)"_HD_FILENAME"))); } if (OutputFiles) { fputs("\n", *out); fputs("\n", *out); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(*out)); fclose(*out); *out = NULL; } } /* * 'write_title()' - Write a title page... */ static void write_title(FILE *out, /* I - Output file */ uchar *title, /* I - Title for document */ uchar *author, /* I - Author for document */ uchar *copyright, /* I - Copyright for document */ uchar *docnumber) /* I - ID number for document */ { FILE *fp; /* Title file */ const char *title_file; /* Location of title file */ tree_t *t; /* Title file document tree */ if (out == NULL) return; #ifdef WIN32 if (TitleImage[0] && stricmp(file_extension(TitleImage), "bmp") != 0 && stricmp(file_extension(TitleImage), "gif") != 0 && stricmp(file_extension(TitleImage), "jpg") != 0 && stricmp(file_extension(TitleImage), "png") != 0) #else if (TitleImage[0] && strcmp(file_extension(TitleImage), "bmp") != 0 && strcmp(file_extension(TitleImage), "gif") != 0 && strcmp(file_extension(TitleImage), "jpg") != 0 && strcmp(file_extension(TitleImage), "png") != 0) #endif // WIN32 { // Find the title page file... if ((title_file = file_find(Path, TitleImage)) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to find title file \"%s\"!", TitleImage); return; } // Write a title page from HTML source... if ((fp = fopen(title_file, "rb")) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open title file \"%s\" - %s!", TitleImage, strerror(errno)); return; } t = htmlReadFile(NULL, fp, file_directory(TitleImage)); htmlFixLinks(t, t, (uchar *)file_directory(TitleImage)); fclose(fp); write_all(out, t, 0); htmlDeleteTree(t); } else { // Write a "standard" title page with image... if (OutputFiles) fputs("
    ", out); else fputs("
    ", out); if (TitleImage[0]) { image_t *img = image_load(TitleImage, !OutputColor); if (OutputFiles) fprintf(out, "
    \n", file_basename((char *)TitleImage), img->width, img->height, title ? (char *)title : ""); else fprintf(out, "
    \n", TitleImage, img->width, img->height, title ? (char *)title : ""); } if (title != NULL) fprintf(out, "

    %s


    \n", title); else fputs("\n", out); if (docnumber != NULL) fprintf(out, "%s
    \n", docnumber); if (author != NULL) fprintf(out, "%s
    \n", author); if (copyright != NULL) fprintf(out, "%s
    \n", copyright); fputs("
    \n", out); } } /* * 'write_all()' - Write all markup text for the given tree. */ static int /* O - Current column */ write_all(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree */ int col) /* I - Current column */ { if (out == NULL) return (0); while (t != NULL) { col = write_node(out, t, col); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) col = write_all(out, t->child, col); col = write_nodeclose(out, t, col); t = t->next; } return (col); } /* * 'write_node()' - Write a single tree node. */ static int /* O - Current column */ write_node(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree node */ int col) /* I - Current column */ { int i; /* Looping var */ uchar *ptr, /* Pointer to output string */ *entity, /* Entity string */ *src, /* Source image */ *realsrc, /* Real source image */ newsrc[1024]; /* New source image filename */ if (out == NULL) return (0); switch (t->markup) { case MARKUP_NONE : if (t->data == NULL) break; if (t->preformatted) { for (ptr = t->data; *ptr; ptr ++) fputs((char *)iso8859(*ptr), out); if (t->data[strlen((char *)t->data) - 1] == '\n') col = 0; else col += strlen((char *)t->data); } else { if ((col + strlen((char *)t->data)) > 72 && col > 0) { putc('\n', out); col = 0; } for (ptr = t->data; *ptr; ptr ++) fputs((char *)iso8859(*ptr), out); col += strlen((char *)t->data); if (col > 72) { putc('\n', out); col = 0; } } break; case MARKUP_COMMENT : case MARKUP_UNKNOWN : fputs("\n\n", out); col = 0; break; case MARKUP_AREA : case MARKUP_BODY : case MARKUP_DOCTYPE : case MARKUP_ERROR : case MARKUP_FILE : case MARKUP_HEAD : case MARKUP_HTML : case MARKUP_MAP : case MARKUP_META : case MARKUP_TITLE : break; case MARKUP_BR : case MARKUP_CENTER : case MARKUP_DD : case MARKUP_DL : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : case MARKUP_HR : case MARKUP_LI : case MARKUP_OL : case MARKUP_P : case MARKUP_PRE : case MARKUP_TABLE : case MARKUP_TR : case MARKUP_UL : if (col > 0) { putc('\n', out); col = 0; } default : if (t->markup == MARKUP_IMG && OutputFiles && (src = htmlGetVariable(t, (uchar *)"SRC")) != NULL && (realsrc = htmlGetVariable(t, (uchar *)"REALSRC")) != NULL) { /* * Update and copy local images... */ if (file_method((char *)src) == NULL && src[0] != '/' && src[0] != '\\' && (!isalpha(src[0]) || src[1] != ':')) { image_copy((char *)src, (char *)realsrc, OutputPath); strlcpy((char *)newsrc, file_basename((char *)src), sizeof(newsrc)); htmlSetVariable(t, (uchar *)"SRC", newsrc); } } if (t->markup != MARKUP_EMBED) { col += fprintf(out, "<%s", _htmlMarkups[t->markup]); for (i = 0; i < t->nvars; i ++) { if (strcasecmp((char *)t->vars[i].name, "BREAK") == 0 && t->markup == MARKUP_HR) continue; if (strcasecmp((char *)t->vars[i].name, "REALSRC") == 0 && t->markup == MARKUP_IMG) continue; if (strncasecmp((char *)t->vars[i].name, "_HD_", 4) == 0) continue; if (col > 72 && !t->preformatted) { putc('\n', out); col = 0; } if (col > 0) { putc(' ', out); col ++; } if (t->vars[i].value == NULL) col += fprintf(out, "%s", t->vars[i].name); else { col += fprintf(out, "%s=\"", t->vars[i].name); for (ptr = t->vars[i].value; *ptr; ptr ++) { entity = iso8859(*ptr); fputs((char *)entity, out); col += strlen((char *)entity); } putc('\"', out); col ++; } } putc('>', out); col ++; if (col > 72 && !t->preformatted) { putc('\n', out); col = 0; } } break; } return (col); } /* * 'write_nodeclose()' - Close a single tree node. */ static int /* O - Current column */ write_nodeclose(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree node */ int col) /* I - Current column */ { if (out == NULL) return (0); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) { if (col > 72 && !t->preformatted) { putc('\n', out); col = 0; } switch (t->markup) { case MARKUP_BODY : case MARKUP_ERROR : case MARKUP_FILE : case MARKUP_HEAD : case MARKUP_HTML : case MARKUP_NONE : case MARKUP_TITLE : case MARKUP_APPLET : case MARKUP_AREA : case MARKUP_BR : case MARKUP_COMMENT : case MARKUP_DOCTYPE : case MARKUP_EMBED : case MARKUP_HR : case MARKUP_IMG : case MARKUP_INPUT : case MARKUP_ISINDEX : case MARKUP_LINK : case MARKUP_META : case MARKUP_NOBR : case MARKUP_SPACER : case MARKUP_WBR : case MARKUP_UNKNOWN : break; case MARKUP_CENTER : case MARKUP_DD : case MARKUP_DL : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : case MARKUP_LI : case MARKUP_OL : case MARKUP_P : case MARKUP_PRE : case MARKUP_TABLE : case MARKUP_TR : case MARKUP_UL : fprintf(out, "\n", _htmlMarkups[t->markup]); col = 0; break; default : col += fprintf(out, "", _htmlMarkups[t->markup]); break; } } return (col); } /* * 'write_toc()' - Write all markup text for the given table-of-contents. */ static int /* O - Current column */ write_toc(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree */ int col) /* I - Current column */ { if (out == NULL) return (0); while (t != NULL) { if (htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC") == NULL) { col = write_node(out, t, col); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) col = write_toc(out, t->child, col); col = write_nodeclose(out, t, col); } t = t->next; } return (col); } /* * 'get_title()' - Get the title string for the given document... */ static uchar * /* O - Title string */ get_title(tree_t *doc) /* I - Document tree */ { uchar *temp; /* Temporary pointer to title */ while (doc != NULL) { if (doc->markup == MARKUP_TITLE) return (htmlGetText(doc->child)); else if (doc->child != NULL) if ((temp = get_title(doc->child)) != NULL) return (temp); doc = doc->next; } return (NULL); } /* * 'add_link()' - Add a named link... */ static void add_link(uchar *name, /* I - Name of link */ uchar *filename) /* I - File for link */ { link_t *temp; /* New name */ if ((temp = find_link(name)) != NULL) temp->filename = filename; else { // See if we need to allocate memory for links... if (num_links >= alloc_links) { // Allocate more links... alloc_links += ALLOC_LINKS; if (num_links == 0) temp = (link_t *)malloc(sizeof(link_t) * alloc_links); else temp = (link_t *)realloc(links, sizeof(link_t) * alloc_links); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d links - %s", alloc_links, strerror(errno)); alloc_links -= ALLOC_LINKS; return; } links = temp; } // Add a new link... temp = links + num_links; num_links ++; strlcpy((char *)temp->name, (char *)name, sizeof(temp->name)); temp->filename = filename; if (num_links > 1) qsort(links, num_links, sizeof(link_t), (compare_func_t)compare_links); } } /* * 'find_link()' - Find a named link... */ static link_t * find_link(uchar *name) /* I - Name to find */ { uchar *target; /* Pointer to target name portion */ link_t key, /* Search key */ *match; /* Matching name entry */ if (name == NULL || num_links == 0) return (NULL); if ((target = (uchar *)file_target((char *)name)) == NULL) return (NULL); strlcpy((char *)key.name, (char *)target, sizeof(key.name)); match = (link_t *)bsearch(&key, links, num_links, sizeof(link_t), (compare_func_t)compare_links); return (match); } /* * 'compare_links()' - Compare two named links. */ static int /* O - 0 = equal, -1 or 1 = not equal */ compare_links(link_t *n1, /* I - First name */ link_t *n2) /* I - Second name */ { return (strcasecmp((char *)n1->name, (char *)n2->name)); } /* * 'scan_links()' - Scan a document for link targets, and keep track of * the files they are in... */ static void scan_links(tree_t *t, /* I - Document tree */ uchar *filename) /* I - Filename */ { uchar *name; /* Name of link */ while (t != NULL) { if (t->markup == MARKUP_FILE) scan_links(t->child, (uchar *)file_basename((char *)htmlGetVariable(t, (uchar *)"_HD_FILENAME"))); else if (t->markup == MARKUP_A && (name = htmlGetVariable(t, (uchar *)"NAME")) != NULL) { add_link(name, filename); scan_links(t->child, filename); } else if (t->child != NULL) scan_links(t->child, filename); t = t->next; } } /* * 'update_links()' - Update links as needed. */ static void update_links(tree_t *t, /* I - Document tree */ uchar *filename) /* I - Current filename */ { link_t *link; /* Link */ uchar *href; /* Reference name */ uchar newhref[1024]; /* New reference name */ filename = (uchar *)file_basename((char *)filename); if (OutputFiles) { /* * Need to preserve/add filenames. */ while (t != NULL) { if (t->markup == MARKUP_A && (href = htmlGetVariable(t, (uchar *)"HREF")) != NULL) { /* * Update this link as needed... */ if (href[0] == '#' && (link = find_link(href)) != NULL) { #if defined(WIN32) || defined(__EMX__) if (filename == NULL || strcasecmp((char *)filename, (char *)link->filename) != 0) #else if (filename == NULL || strcmp((char *)filename, (char *)link->filename) != 0) #endif /* WIN32 || __EMX__ */ { snprintf((char *)newhref, sizeof(newhref), "%s%s", link->filename, href); htmlSetVariable(t, (uchar *)"HREF", newhref); } } } if (t->child != NULL) { if (t->markup == MARKUP_FILE) update_links(t->child, htmlGetVariable(t, (uchar *)"_HD_FILENAME")); else update_links(t->child, filename); } t = t->next; } } else { /* * Need to strip filenames. */ while (t != NULL) { if (t->markup == MARKUP_A && (href = htmlGetVariable(t, (uchar *)"HREF")) != NULL) { /* * Update this link as needed... */ if (href[0] != '#' && file_method((char *)href) == NULL && (link = find_link(href)) != NULL) { snprintf((char *)newhref, sizeof(newhref), "#%s", link->name); htmlSetVariable(t, (uchar *)"HREF", newhref); } } if (t->child != NULL) update_links(t->child, filename); t = t->next; } } } /* * End of "$Id: html.cxx 1486 2006-05-31 15:27:28Z mike $". */ htmldoc-1.8.27/htmldoc/http.h0100664000212600000240000004720010414241024014477 0ustar mikeuser/* * "$Id: http.h 1481 2006-04-03 15:41:08Z mike $" * * Hyper-Text Transport Protocol definitions for the Common UNIX Printing * System (CUPS). * * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: cups-info@cups.org * WWW: http://www.cups.org * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_HTTP_H_ # define _CUPS_HTTP_H_ /* * Include necessary headers... */ # include # include # include # ifdef WIN32 /* Windows does not support the ssize_t type, so map it to off_t... */ typedef off_t ssize_t; /* @private@ */ # include # include # else # ifdef __sgi /* IRIX needs this for IPv6 support!?! */ # define INET6 # endif /* __sgi */ # include # include # include # include # include # include # include # include # if !defined(__APPLE__) || !defined(TCP_NODELAY) # include # endif /* !__APPLE__ || !TCP_NODELAY */ # ifdef AF_LOCAL # include # endif /* AF_LOCAL */ # endif /* WIN32 */ # include "md5.h" /* * With GCC 3.0 and higher, we can mark old APIs "deprecated" so you get * a warning at compile-time. */ # if defined(__GNUC__) && __GNUC__ > 2 # define _HTTP_DEPRECATED __attribute__ ((__deprecated__)) # else # define _HTTP_DEPRECATED # endif /* __GNUC__ && __GNUC__ > 2 */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Oh, the wonderful world of IPv6 compatibility. Apparently some * implementations expose the (more logical) 32-bit address parts * to everyone, while others only expose it to kernel code... To * make supporting IPv6 even easier, each vendor chose different * core structure and union names, so the same defines or code * can't be used on all platforms. * * The following will likely need tweaking on new platforms that * support IPv6 - the "s6_addr32" define maps to the 32-bit integer * array in the in6_addr union, which is named differently on various * platforms. */ #if defined(AF_INET6) && !defined(s6_addr32) # if defined(__sun) # define s6_addr32 _S6_un._S6_u32 # elif defined(__FreeBSD__) || defined(__APPLE__) # define s6_addr32 __u6_addr.__u6_addr32 # elif defined(__osf__) # define s6_addr32 s6_un.sa6_laddr # elif defined(WIN32) /* * Windows only defines byte and 16-bit word members of the union and * requires special casing of all raw address code... */ # define s6_addr32 error_need_win32_specific_code # endif /* __sun */ #endif /* AF_INET6 && !s6_addr32 */ /* * Limits... */ # define HTTP_MAX_URI 1024 /* Max length of URI string */ # define HTTP_MAX_HOST 256 /* Max length of hostname string */ # define HTTP_MAX_BUFFER 2048 /* Max length of data buffer */ # define HTTP_MAX_VALUE 256 /* Max header field value length */ /* * Types and structures... */ typedef enum http_auth_e /**** HTTP authentication types ****/ { HTTP_AUTH_NONE, /* No authentication in use */ HTTP_AUTH_BASIC, /* Basic authentication in use */ HTTP_AUTH_MD5, /* Digest authentication in use */ HTTP_AUTH_MD5_SESS, /* MD5-session authentication in use */ HTTP_AUTH_MD5_INT, /* Digest authentication in use for body */ HTTP_AUTH_MD5_SESS_INT /* MD5-session authentication in use for body */ } http_auth_t; typedef enum http_encoding_e /**** HTTP transfer encoding values ****/ { HTTP_ENCODE_LENGTH, /* Data is sent with Content-Length */ HTTP_ENCODE_CHUNKED /* Data is chunked */ } http_encoding_t; typedef enum http_encryption_e /**** HTTP encryption values ****/ { HTTP_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */ HTTP_ENCRYPT_NEVER, /* Never encrypt */ HTTP_ENCRYPT_REQUIRED, /* Encryption is required (TLS upgrade) */ HTTP_ENCRYPT_ALWAYS /* Always encrypt (SSL) */ } http_encryption_t; typedef enum http_field_e /**** HTTP field names ****/ { HTTP_FIELD_UNKNOWN = -1, /* Unknown field */ HTTP_FIELD_ACCEPT_LANGUAGE, /* Accept-Language field */ HTTP_FIELD_ACCEPT_RANGES, /* Accept-Ranges field */ HTTP_FIELD_AUTHORIZATION, /* Authorization field */ HTTP_FIELD_CONNECTION, /* Connection field */ HTTP_FIELD_CONTENT_ENCODING, /* Content-Encoding field */ HTTP_FIELD_CONTENT_LANGUAGE, /* Content-Language field */ HTTP_FIELD_CONTENT_LENGTH, /* Content-Length field */ HTTP_FIELD_CONTENT_LOCATION, /* Content-Location field */ HTTP_FIELD_CONTENT_MD5, /* Content-MD5 field */ HTTP_FIELD_CONTENT_RANGE, /* Content-Range field */ HTTP_FIELD_CONTENT_TYPE, /* Content-Type field */ HTTP_FIELD_CONTENT_VERSION, /* Content-Version field */ HTTP_FIELD_DATE, /* Date field */ HTTP_FIELD_HOST, /* Host field */ HTTP_FIELD_IF_MODIFIED_SINCE, /* If-Modified-Since field */ HTTP_FIELD_IF_UNMODIFIED_SINCE, /* If-Unmodified-Since field */ HTTP_FIELD_KEEP_ALIVE, /* Keep-Alive field */ HTTP_FIELD_LAST_MODIFIED, /* Last-Modified field */ HTTP_FIELD_LINK, /* Link field */ HTTP_FIELD_LOCATION, /* Location field */ HTTP_FIELD_RANGE, /* Range field */ HTTP_FIELD_REFERER, /* Referer field */ HTTP_FIELD_RETRY_AFTER, /* Retry-After field */ HTTP_FIELD_TRANSFER_ENCODING, /* Transfer-Encoding field */ HTTP_FIELD_UPGRADE, /* Upgrade field */ HTTP_FIELD_USER_AGENT, /* User-Agent field */ HTTP_FIELD_WWW_AUTHENTICATE, /* WWW-Authenticate field */ HTTP_FIELD_MAX /* Maximum field index */ } http_field_t; typedef enum http_keepalive_e /**** HTTP keep-alive values ****/ { HTTP_KEEPALIVE_OFF = 0, /* No keep alive support */ HTTP_KEEPALIVE_ON /* Use keep alive */ } http_keepalive_t; typedef enum http_state_e /**** HTTP state values; states **** are server-oriented... ****/ { HTTP_WAITING, /* Waiting for command */ HTTP_OPTIONS, /* OPTIONS command, waiting for blank line */ HTTP_GET, /* GET command, waiting for blank line */ HTTP_GET_SEND, /* GET command, sending data */ HTTP_HEAD, /* HEAD command, waiting for blank line */ HTTP_POST, /* POST command, waiting for blank line */ HTTP_POST_RECV, /* POST command, receiving data */ HTTP_POST_SEND, /* POST command, sending data */ HTTP_PUT, /* PUT command, waiting for blank line */ HTTP_PUT_RECV, /* PUT command, receiving data */ HTTP_DELETE, /* DELETE command, waiting for blank line */ HTTP_TRACE, /* TRACE command, waiting for blank line */ HTTP_CLOSE, /* CLOSE command, waiting for blank line */ HTTP_STATUS /* Command complete, sending status */ } http_state_t; typedef enum http_status_e /**** HTTP status codes ****/ { HTTP_ERROR = -1, /* An error response from httpXxxx() */ HTTP_CONTINUE = 100, /* Everything OK, keep going... */ HTTP_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */ HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */ HTTP_CREATED, /* PUT command was successful */ HTTP_ACCEPTED, /* DELETE command was successful */ HTTP_NOT_AUTHORITATIVE, /* Information isn't authoritative */ HTTP_NO_CONTENT, /* Successful command, no new data */ HTTP_RESET_CONTENT, /* Content was reset/recreated */ HTTP_PARTIAL_CONTENT, /* Only a partial file was recieved/sent */ HTTP_MULTIPLE_CHOICES = 300, /* Multiple files match request */ HTTP_MOVED_PERMANENTLY, /* Document has moved permanently */ HTTP_MOVED_TEMPORARILY, /* Document has moved temporarily */ HTTP_SEE_OTHER, /* See this other link... */ HTTP_NOT_MODIFIED, /* File not modified */ HTTP_USE_PROXY, /* Must use a proxy to access this URI */ HTTP_BAD_REQUEST = 400, /* Bad request */ HTTP_UNAUTHORIZED, /* Unauthorized to access host */ HTTP_PAYMENT_REQUIRED, /* Payment required */ HTTP_FORBIDDEN, /* Forbidden to access this URI */ HTTP_NOT_FOUND, /* URI was not found */ HTTP_METHOD_NOT_ALLOWED, /* Method is not allowed */ HTTP_NOT_ACCEPTABLE, /* Not Acceptable */ HTTP_PROXY_AUTHENTICATION, /* Proxy Authentication is Required */ HTTP_REQUEST_TIMEOUT, /* Request timed out */ HTTP_CONFLICT, /* Request is self-conflicting */ HTTP_GONE, /* Server has gone away */ HTTP_LENGTH_REQUIRED, /* A content length or encoding is required */ HTTP_PRECONDITION, /* Precondition failed */ HTTP_REQUEST_TOO_LARGE, /* Request entity too large */ HTTP_URI_TOO_LONG, /* URI too long */ HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */ HTTP_REQUESTED_RANGE, /* The requested range is not satisfiable */ HTTP_EXPECTATION_FAILED, /* The expectation given in an Expect header field was not met */ HTTP_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */ HTTP_SERVER_ERROR = 500, /* Internal server error */ HTTP_NOT_IMPLEMENTED, /* Feature not implemented */ HTTP_BAD_GATEWAY, /* Bad gateway */ HTTP_SERVICE_UNAVAILABLE, /* Service is unavailable */ HTTP_GATEWAY_TIMEOUT, /* Gateway connection timed out */ HTTP_NOT_SUPPORTED /* HTTP version not supported */ } http_status_t; typedef enum http_uri_status_e /**** URI separation status @since CUPS1.2@ ****/ { HTTP_URI_OVERFLOW = -8, /* URI buffer for httpAssembleURI is too small */ HTTP_URI_BAD_ARGUMENTS = -7, /* Bad arguments to function (error) */ HTTP_URI_BAD_RESOURCE = -6, /* Bad resource in URI (error) */ HTTP_URI_BAD_PORT = -5, /* Bad port number in URI (error) */ HTTP_URI_BAD_HOSTNAME = -4, /* Bad hostname in URI (error) */ HTTP_URI_BAD_USERNAME = -3, /* Bad username in URI (error) */ HTTP_URI_BAD_SCHEME = -2, /* Bad scheme in URI (error) */ HTTP_URI_BAD_URI = -1, /* Bad/empty URI (error) */ HTTP_URI_OK = 0, /* URI decoded OK */ HTTP_URI_MISSING_SCHEME, /* Missing scheme in URI (warning) */ HTTP_URI_UNKNOWN_SCHEME, /* Unknown scheme in URI (warning) */ HTTP_URI_MISSING_RESOURCE /* Missing resource in URI (warning) */ } http_uri_status_t; typedef enum http_uri_coding_e /**** URI en/decode flags ****/ { HTTP_URI_CODING_NONE = 0, /* Don't en/decode anything */ HTTP_URI_CODING_USERNAME = 1, /* En/decode the username portion */ HTTP_URI_CODING_HOSTNAME = 2, /* En/decode the hostname portion */ HTTP_URI_CODING_RESOURCE = 4, /* En/decode the resource portion */ HTTP_URI_CODING_MOST = 7, /* En/decode all but the query */ HTTP_URI_CODING_QUERY = 8, /* En/decode the query portion */ HTTP_URI_CODING_ALL = 15 /* En/decode everything */ } http_uri_coding_t; typedef enum http_version_e /**** HTTP version numbers ****/ { HTTP_0_9 = 9, /* HTTP/0.9 */ HTTP_1_0 = 100, /* HTTP/1.0 */ HTTP_1_1 = 101 /* HTTP/1.1 */ } http_version_t; typedef union _http_addr_u /**** Socket address union, which **** makes using IPv6 and other **** address types easier and **** more portable. @since CUPS 1.2@ ****/ { struct sockaddr addr; /* Base structure for family value */ struct sockaddr_in ipv4; /* IPv4 address */ #ifdef AF_INET6 struct sockaddr_in6 ipv6; /* IPv6 address */ #endif /* AF_INET6 */ #ifdef AF_LOCAL struct sockaddr_un un; /* Domain socket file */ #endif /* AF_LOCAL */ char pad[256]; /* Padding to ensure binary compatibility */ } http_addr_t; typedef struct http_addrlist_s /**** Socket address list, which is **** used to enumerate all of the **** addresses that are associated **** with a hostname. @since CUPS 1.2@ ****/ { struct http_addrlist_s *next; /* Pointer to next address in list */ http_addr_t addr; /* Address */ } http_addrlist_t; typedef struct _http_s /**** HTTP connection structure. ****/ { int fd; /* File descriptor for this socket */ int blocking; /* To block or not to block */ int error; /* Last error on read */ time_t activity; /* Time since last read/write */ http_state_t state; /* State of client */ http_status_t status; /* Status of last request */ http_version_t version; /* Protocol version */ http_keepalive_t keep_alive; /* Keep-alive supported? */ struct sockaddr_in _hostaddr; /* Address of connected host @deprecated@ */ char hostname[HTTP_MAX_HOST], /* Name of connected host */ fields[HTTP_FIELD_MAX][HTTP_MAX_VALUE]; /* Field values */ char *data; /* Pointer to data buffer */ http_encoding_t data_encoding; /* Chunked or not */ int _data_remaining;/* Number of bytes left @deprecated@ */ int used; /* Number of bytes used in buffer */ char buffer[HTTP_MAX_BUFFER]; /* Buffer for incoming data */ int auth_type; /* Authentication in use */ md5_state_t md5_state; /* MD5 state */ char nonce[HTTP_MAX_VALUE]; /* Nonce value */ int nonce_count; /* Nonce count */ void *tls; /* TLS state information */ http_encryption_t encryption; /* Encryption requirements */ /**** New in CUPS 1.1.19 ****/ fd_set *input_set; /* select() set for httpWait() @since CUPS 1.1.19@ */ http_status_t expect; /* Expect: header @since CUPS 1.1.19@ */ char *cookie; /* Cookie value(s) @since CUPS 1.1.19@ */ /**** New in CUPS 1.1.20 ****/ char authstring[HTTP_MAX_VALUE], /* Current Authentication value @since CUPS 1.1.20@ */ userpass[HTTP_MAX_VALUE]; /* Username:password string @since CUPS 1.1.20@ */ int digest_tries; /* Number of tries for digest auth @since CUPS 1.1.20@ */ /**** New in CUPS 1.2 ****/ off_t data_remaining; /* Number of bytes left @since CUPS 1.2@ */ http_addr_t *hostaddr; /* Current host address and port @since CUPS 1.2@ */ http_addrlist_t *addrlist; /* List of valid addresses @since CUPS 1.2@ */ char wbuffer[HTTP_MAX_BUFFER]; /* Buffer for outgoing data */ int wused; /* Write buffer bytes used @since CUPS 1.2@ */ } http_t; /* * Prototypes... */ extern void httpBlocking(http_t *http, int b); extern int httpCheck(http_t *http); extern void httpClearFields(http_t *http); extern void httpClose(http_t *http); extern http_t *httpConnect(const char *host, int port); extern http_t *httpConnectEncrypt(const char *host, int port, http_encryption_t encryption); extern int httpDelete(http_t *http, const char *uri); extern int httpEncryption(http_t *http, http_encryption_t e); extern int httpError(http_t *http); extern void httpFlush(http_t *http); extern int httpGet(http_t *http, const char *uri); extern char *httpGets(char *line, int length, http_t *http); extern const char *httpGetDateString(time_t t); extern time_t httpGetDateTime(const char *s); extern const char *httpGetField(http_t *http, http_field_t field); extern struct hostent *httpGetHostByName(const char *name); extern char *httpGetSubField(http_t *http, http_field_t field, const char *name, char *value); extern int httpHead(http_t *http, const char *uri); extern void httpInitialize(void); extern int httpOptions(http_t *http, const char *uri); extern int httpPost(http_t *http, const char *uri); extern int httpPrintf(http_t *http, const char *format, ...) # ifdef __GNUC__ __attribute__ ((__format__ (__printf__, 2, 3))) # endif /* __GNUC__ */ ; extern int httpPut(http_t *http, const char *uri); extern int httpRead(http_t *http, char *buffer, int length) _HTTP_DEPRECATED; extern int httpReconnect(http_t *http); extern void httpSeparate(const char *uri, char *method, char *username, char *host, int *port, char *resource) _HTTP_DEPRECATED; extern void httpSetField(http_t *http, http_field_t field, const char *value); extern const char *httpStatus(http_status_t status); extern int httpTrace(http_t *http, const char *uri); extern http_status_t httpUpdate(http_t *http); extern int httpWrite(http_t *http, const char *buffer, int length) _HTTP_DEPRECATED; extern char *httpEncode64(char *out, const char *in) _HTTP_DEPRECATED; extern char *httpDecode64(char *out, const char *in) _HTTP_DEPRECATED; extern int httpGetLength(http_t *http) _HTTP_DEPRECATED; extern char *httpMD5(const char *, const char *, const char *, char [33]); extern char *httpMD5Final(const char *, const char *, const char *, char [33]); extern char *httpMD5String(const unsigned char *, char [33]); /**** New in CUPS 1.1.19 ****/ extern void httpClearCookie(http_t *http); extern const char *httpGetCookie(http_t *http); extern void httpSetCookie(http_t *http, const char *cookie); extern int httpWait(http_t *http, int msec); /**** New in CUPS 1.1.21 ****/ extern char *httpDecode64_2(char *out, int *outlen, const char *in); extern char *httpEncode64_2(char *out, int outlen, const char *in, int inlen); extern void httpSeparate2(const char *uri, char *method, int methodlen, char *username, int usernamelen, char *host, int hostlen, int *port, char *resource, int resourcelen) _HTTP_DEPRECATED; /**** New in CUPS 1.2 ****/ extern int httpAddrAny(const http_addr_t *addr); extern http_addrlist_t *httpAddrConnect(http_addrlist_t *addrlist, int *sock); extern int httpAddrEqual(const http_addr_t *addr1, const http_addr_t *addr2); extern void httpAddrFreeList(http_addrlist_t *addrlist); extern http_addrlist_t *httpAddrGetList(const char *hostname, int family, const char *service); extern int httpAddrLength(const http_addr_t *addr); extern int httpAddrLocalhost(const http_addr_t *addr); extern char *httpAddrLookup(const http_addr_t *addr, char *name, int namelen); extern char *httpAddrString(const http_addr_t *addr, char *s, int slen); extern http_uri_status_t httpAssembleURI(http_uri_coding_t encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resource); extern http_uri_status_t httpAssembleURIf(http_uri_coding_t encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resourcef, ...); extern int httpFlushWrite(http_t *http); extern int httpGetBlocking(http_t *http); extern const char *httpGetDateString2(time_t t, char *s, int slen); extern int httpGetFd(http_t *http); extern const char *httpGetHostname(http_t *http, char *s, int slen); extern off_t httpGetLength2(http_t *http); extern http_status_t httpGetStatus(http_t *http); extern char *httpGetSubField2(http_t *http, http_field_t field, const char *name, char *value, int valuelen); extern ssize_t httpRead2(http_t *http, char *buffer, size_t length); extern http_uri_status_t httpSeparateURI(http_uri_coding_t decoding, const char *uri, char *scheme, int schemelen, char *username, int usernamelen, char *host, int hostlen, int *port, char *resource, int resourcelen); extern void httpSetExpect(http_t *http, http_status_t expect); extern void httpSetLength(http_t *http, size_t length); extern ssize_t httpWrite2(http_t *http, const char *buffer, size_t length); /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_HTTP_H_ */ /* * End of "$Id: http.h 1481 2006-04-03 15:41:08Z mike $". */ htmldoc-1.8.27/htmldoc/image.h0100664000212600000240000000415710437332740014621 0ustar mikeuser/* * "$Id: image.h 1486 2006-05-31 15:27:28Z mike $" * * Image management definitions for HTMLDOC, a HTML document processing * program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _IMAGE_H_ # define _IMAGE_H_ /* * Include necessary headers. */ # include # include # include "hdstring.h" # include "types.h" # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Image structure... */ typedef struct /**** Image structure ****/ { char filename[1024]; /* Name of image file (for caching of images */ int width, /* Width of image in pixels */ height, /* Height of image in pixels */ depth, /* 1 for grayscale, 3 for RGB */ use, /* Number of times this image was used */ obj; /* Object number */ uchar *pixels; /* 8-bit pixel data */ uchar *mask; /* 1-bit mask data, if any */ int maskwidth, /* Byte width of mask data */ maskscale; /* Scaling of mask data */ } image_t; /* * Prototypes... */ extern void image_copy(const char *src, const char *realsrc, const char *destpath); extern image_t *image_find(const char *filename, int load_data = 0); extern void image_flush_cache(void); extern int image_getlist(image_t ***ptrs); extern image_t *image_load(const char *filename, int gray, int load_data = 0); extern void image_unload(image_t *img); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_IMAGE_H_ */ /* * End of "$Id: image.h 1486 2006-05-31 15:27:28Z mike $". */ htmldoc-1.8.27/htmldoc/md5.c0100664000212600000240000002556510047004012014206 0ustar mikeuser/* Copyright (C) 1999 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com */ /*$Id: md5.c 1189 2004-05-07 22:04:58Z mike $ */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321. It is derived directly from the text of the RFC and not from the reference implementation. The original and principal author of md5.c is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). 1999-05-03 lpd Original version. */ #include "md5.h" #include "hdstring.h" #ifdef TEST /* * Compile with -DTEST to create a self-contained executable test program. * The test program should print out the same values as given in section * A.5 of RFC 1321, reproduced below. */ main() { static const char *const test[7] = { "", /*d41d8cd98f00b204e9800998ecf8427e*/ "a", /*0cc175b9c0f1b6a831c399e269772661*/ "abc", /*900150983cd24fb0d6963f7d28e17f72*/ "message digest", /*f96b697d7cb7938d525a2f31aaf161d0*/ "abcdefghijklmnopqrstuvwxyz", /*c3fcd3d76192e4007dfb496cca67e13b*/ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", /*d174ab98d277d9f5a5611c2c9f419d9f*/ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" /*57edf4a22be3c955ac49da2e2107b67a*/ }; int i; for (i = 0; i < 7; ++i) { md5_state_t state; md5_byte_t digest[16]; int di; md5_init(&state); md5_append(&state, (const md5_byte_t *)test[i], strlen(test[i])); md5_finish(&state, digest); printf("MD5 (\"%s\") = ", test[i]); for (di = 0; di < 16; ++di) printf("%02x", digest[di]); printf("\n"); } return 0; } #endif /* TEST */ /* * For reference, here is the program that computed the T values. */ #if 0 #include main() { int i; for (i = 1; i <= 64; ++i) { unsigned long v = (unsigned long)(4294967296.0 * fabs(sin((double)i))); printf("#define T%d 0x%08lx\n", i, v); } return 0; } #endif /* * End of T computation program. */ #define T1 0xd76aa478 #define T2 0xe8c7b756 #define T3 0x242070db #define T4 0xc1bdceee #define T5 0xf57c0faf #define T6 0x4787c62a #define T7 0xa8304613 #define T8 0xfd469501 #define T9 0x698098d8 #define T10 0x8b44f7af #define T11 0xffff5bb1 #define T12 0x895cd7be #define T13 0x6b901122 #define T14 0xfd987193 #define T15 0xa679438e #define T16 0x49b40821 #define T17 0xf61e2562 #define T18 0xc040b340 #define T19 0x265e5a51 #define T20 0xe9b6c7aa #define T21 0xd62f105d #define T22 0x02441453 #define T23 0xd8a1e681 #define T24 0xe7d3fbc8 #define T25 0x21e1cde6 #define T26 0xc33707d6 #define T27 0xf4d50d87 #define T28 0x455a14ed #define T29 0xa9e3e905 #define T30 0xfcefa3f8 #define T31 0x676f02d9 #define T32 0x8d2a4c8a #define T33 0xfffa3942 #define T34 0x8771f681 #define T35 0x6d9d6122 #define T36 0xfde5380c #define T37 0xa4beea44 #define T38 0x4bdecfa9 #define T39 0xf6bb4b60 #define T40 0xbebfbc70 #define T41 0x289b7ec6 #define T42 0xeaa127fa #define T43 0xd4ef3085 #define T44 0x04881d05 #define T45 0xd9d4d039 #define T46 0xe6db99e5 #define T47 0x1fa27cf8 #define T48 0xc4ac5665 #define T49 0xf4292244 #define T50 0x432aff97 #define T51 0xab9423a7 #define T52 0xfc93a039 #define T53 0x655b59c3 #define T54 0x8f0ccc92 #define T55 0xffeff47d #define T56 0x85845dd1 #define T57 0x6fa87e4f #define T58 0xfe2ce6e0 #define T59 0xa3014314 #define T60 0x4e0811a1 #define T61 0xf7537e82 #define T62 0xbd3af235 #define T63 0x2ad7d2bb #define T64 0xeb86d391 static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) { md5_word_t a = pms->abcd[0], b = pms->abcd[1], c = pms->abcd[2], d = pms->abcd[3]; md5_word_t t; #ifndef ARCH_IS_BIG_ENDIAN # define ARCH_IS_BIG_ENDIAN 1 /* slower, default implementation */ #endif #if ARCH_IS_BIG_ENDIAN /* * On big-endian machines, we must arrange the bytes in the right * order. (This also works on machines of unknown byte order.) */ md5_word_t X[16]; const md5_byte_t *xp = data; int i; for (i = 0; i < 16; ++i, xp += 4) X[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); #else /* !ARCH_IS_BIG_ENDIAN */ /* * On little-endian machines, we can process properly aligned data * without copying it. */ md5_word_t xbuf[16]; const md5_word_t *X; if (!((data - (const md5_byte_t *)0) & 3)) { /* data are properly aligned */ X = (const md5_word_t *)data; } else { /* not aligned */ memcpy(xbuf, data, 64); X = xbuf; } #endif #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) /* Round 1. */ /* Let [abcd k s i] denote the operation a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ #define F(x, y, z) (((x) & (y)) | (~(x) & (z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + F(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 7, T1); SET(d, a, b, c, 1, 12, T2); SET(c, d, a, b, 2, 17, T3); SET(b, c, d, a, 3, 22, T4); SET(a, b, c, d, 4, 7, T5); SET(d, a, b, c, 5, 12, T6); SET(c, d, a, b, 6, 17, T7); SET(b, c, d, a, 7, 22, T8); SET(a, b, c, d, 8, 7, T9); SET(d, a, b, c, 9, 12, T10); SET(c, d, a, b, 10, 17, T11); SET(b, c, d, a, 11, 22, T12); SET(a, b, c, d, 12, 7, T13); SET(d, a, b, c, 13, 12, T14); SET(c, d, a, b, 14, 17, T15); SET(b, c, d, a, 15, 22, T16); #undef SET /* Round 2. */ /* Let [abcd k s i] denote the operation a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ #define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + G(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 1, 5, T17); SET(d, a, b, c, 6, 9, T18); SET(c, d, a, b, 11, 14, T19); SET(b, c, d, a, 0, 20, T20); SET(a, b, c, d, 5, 5, T21); SET(d, a, b, c, 10, 9, T22); SET(c, d, a, b, 15, 14, T23); SET(b, c, d, a, 4, 20, T24); SET(a, b, c, d, 9, 5, T25); SET(d, a, b, c, 14, 9, T26); SET(c, d, a, b, 3, 14, T27); SET(b, c, d, a, 8, 20, T28); SET(a, b, c, d, 13, 5, T29); SET(d, a, b, c, 2, 9, T30); SET(c, d, a, b, 7, 14, T31); SET(b, c, d, a, 12, 20, T32); #undef SET /* Round 3. */ /* Let [abcd k s t] denote the operation a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ #define H(x, y, z) ((x) ^ (y) ^ (z)) #define SET(a, b, c, d, k, s, Ti)\ t = a + H(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 5, 4, T33); SET(d, a, b, c, 8, 11, T34); SET(c, d, a, b, 11, 16, T35); SET(b, c, d, a, 14, 23, T36); SET(a, b, c, d, 1, 4, T37); SET(d, a, b, c, 4, 11, T38); SET(c, d, a, b, 7, 16, T39); SET(b, c, d, a, 10, 23, T40); SET(a, b, c, d, 13, 4, T41); SET(d, a, b, c, 0, 11, T42); SET(c, d, a, b, 3, 16, T43); SET(b, c, d, a, 6, 23, T44); SET(a, b, c, d, 9, 4, T45); SET(d, a, b, c, 12, 11, T46); SET(c, d, a, b, 15, 16, T47); SET(b, c, d, a, 2, 23, T48); #undef SET /* Round 4. */ /* Let [abcd k s t] denote the operation a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ #define I(x, y, z) ((y) ^ ((x) | ~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + I(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 6, T49); SET(d, a, b, c, 7, 10, T50); SET(c, d, a, b, 14, 15, T51); SET(b, c, d, a, 5, 21, T52); SET(a, b, c, d, 12, 6, T53); SET(d, a, b, c, 3, 10, T54); SET(c, d, a, b, 10, 15, T55); SET(b, c, d, a, 1, 21, T56); SET(a, b, c, d, 8, 6, T57); SET(d, a, b, c, 15, 10, T58); SET(c, d, a, b, 6, 15, T59); SET(b, c, d, a, 13, 21, T60); SET(a, b, c, d, 4, 6, T61); SET(d, a, b, c, 11, 10, T62); SET(c, d, a, b, 2, 15, T63); SET(b, c, d, a, 9, 21, T64); #undef SET /* Then perform the following additions. (That is increment each of the four registers by the value it had before this block was started.) */ pms->abcd[0] += a; pms->abcd[1] += b; pms->abcd[2] += c; pms->abcd[3] += d; } void md5_init(md5_state_t *pms) { pms->count[0] = pms->count[1] = 0; pms->abcd[0] = 0x67452301; pms->abcd[1] = 0xefcdab89; pms->abcd[2] = 0x98badcfe; pms->abcd[3] = 0x10325476; } void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes) { const md5_byte_t *p = data; int left = nbytes; int offset = (pms->count[0] >> 3) & 63; md5_word_t nbits = (md5_word_t)(nbytes << 3); if (nbytes <= 0) return; /* Update the message length. */ pms->count[1] += nbytes >> 29; pms->count[0] += nbits; if (pms->count[0] < nbits) pms->count[1]++; /* Process an initial partial block. */ if (offset) { int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); memcpy(pms->buf + offset, p, (size_t)copy); if (offset + copy < 64) return; p += copy; left -= copy; md5_process(pms, pms->buf); } /* Process full blocks. */ for (; left >= 64; p += 64, left -= 64) md5_process(pms, p); /* Process a final partial block. */ if (left) memcpy(pms->buf, p, (size_t)left); } void md5_finish(md5_state_t *pms, md5_byte_t digest[16]) { static const md5_byte_t pad[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; md5_byte_t data[8]; int i; /* Save the length before padding. */ for (i = 0; i < 8; ++i) data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); /* Pad to 56 bytes mod 64. */ md5_append(pms, pad, (int)(((55 - (pms->count[0] >> 3)) & 63) + 1)); /* Append the length. */ md5_append(pms, data, 8); for (i = 0; i < 16; ++i) digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); } htmldoc-1.8.27/htmldoc/http-support.c0100664000212600000240000007236410441614401016220 0ustar mikeuser/* * "$Id: http-support.c 1493 2006-06-07 18:20:49Z mike $" * * HTTP support routines for the Common UNIX Printing System (CUPS) scheduler. * * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: cups-info@cups.org * WWW: http://www.cups.org * * This file is subject to the Apple OS-Developed Software exception. * * Contents: * * httpAssembleURI() - Assemble a uniform resource identifier from its * components. * httpAssembleURIf() - Assemble a uniform resource identifier from its * components with a formatted resource. * httpDecode64() - Base64-decode a string. * httpDecode64_2() - Base64-decode a string. * httpEncode64() - Base64-encode a string. * httpEncode64_2() - Base64-encode a string. * httpGetDateString() - Get a formatted date/time string from a time value. * httpGetDateString2() - Get a formatted date/time string from a time value. * httpGetDateTime() - Get a time value from a formatted date/time string. * httpSeparate() - Separate a Universal Resource Identifier into its * components. * httpSeparate2() - Separate a Universal Resource Identifier into its * components. * httpSeparateURI() - Separate a Universal Resource Identifier into its * components. * httpStatus() - Return a short string describing a HTTP status code. * _hd_hstrerror() - hstrerror() emulation function for Solaris and * others... * http_copy_decode() - Copy and decode a URI. * http_copy_encode() - Copy and encode a URI. */ /* * Include necessary headers... */ #include "debug.h" #include "http-private.h" #include /* * Local globals... */ static const char * const http_days[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static const char * const http_months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; /* * Local functions... */ static const char *http_copy_decode(char *dst, const char *src, int dstsize, const char *term, int decode); static char *http_copy_encode(char *dst, const char *src, char *dstend, const char *reserved, const char *term, int encode); /* * 'httpAssembleURI()' - Assemble a uniform resource identifier from its * components. * * This function escapes reserved characters in the URI depending on the * value of the "encoding" argument. You should use this function in * place of traditional string functions whenever you need to create a * URI string. * * @since CUPS 1.2@ */ http_uri_status_t /* O - URI status */ httpAssembleURI( http_uri_coding_t encoding, /* I - Encoding flags */ char *uri, /* I - URI buffer */ int urilen, /* I - Size of URI buffer */ const char *scheme, /* I - Scheme name */ const char *username, /* I - Username */ const char *host, /* I - Hostname or address */ int port, /* I - Port number */ const char *resource) /* I - Resource */ { char *ptr, /* Pointer into URI buffer */ *end; /* End of URI buffer */ /* * Range check input... */ if (!uri || urilen < 1 || !scheme || port < 0) { if (uri) *uri = '\0'; return (HTTP_URI_BAD_ARGUMENTS); } /* * Assemble the URI starting with the scheme... */ end = uri + urilen - 1; ptr = http_copy_encode(uri, scheme, end, NULL, NULL, 0); if (!ptr) goto assemble_overflow; if (!strcmp(scheme, "mailto:")) { /* * mailto: only has :, no //... */ if (ptr < end) *ptr++ = ':'; else goto assemble_overflow; } else { /* * Schemes other than mailto: all have //... */ if ((ptr + 2) < end) { *ptr++ = ':'; *ptr++ = '/'; *ptr++ = '/'; } else goto assemble_overflow; } /* * Next the username and hostname, if any... */ if (host) { if (username && *username) { /* * Add username@ first... */ ptr = http_copy_encode(ptr, username, end, "/?@", NULL, encoding & HTTP_URI_CODING_USERNAME); if (!ptr) goto assemble_overflow; if (ptr < end) *ptr++ = '@'; else goto assemble_overflow; } /* * Then add the hostname. Since IPv6 is a particular pain to deal * with, we have several special cases to deal with... If we get * an IPv6 address with brackets around it, assume it is already in * URI format... */ if (host[0] != '[' && strchr(host, ':')) { /* * We have an IPv6 address... */ if (strchr(host, '%')) { /* * We have a link-local address, add "[v1." prefix... */ if ((ptr + 4) < end) { *ptr++ = '['; *ptr++ = 'v'; *ptr++ = '1'; *ptr++ = '.'; } else goto assemble_overflow; } else { /* * We have a normal address, add "[" prefix... */ if (ptr < end) *ptr++ = '['; else goto assemble_overflow; } /* * Copy the rest of the IPv6 address, and terminate with "]". */ while (ptr < end && *host) { if (*host == '%') { *ptr++ = '+'; /* Convert zone separator */ host ++; } else *ptr++ = *host++; } if (*host) goto assemble_overflow; if (ptr < end) *ptr++ = ']'; else goto assemble_overflow; } else { /* * Otherwise, just copy the host string... */ ptr = http_copy_encode(ptr, host, end, NULL, NULL, encoding & HTTP_URI_CODING_HOSTNAME); if (!ptr) goto assemble_overflow; } /* * Finish things off with the port number... */ if (port > 0) { snprintf(ptr, end - ptr + 1, ":%d", port); ptr += strlen(ptr); if (ptr >= end) goto assemble_overflow; } } /* * Last but not least, add the resource string... */ if (resource) { char *query; /* Pointer to query string */ /* * Copy the resource string up to the query string if present... */ query = strchr(resource, '?'); ptr = http_copy_encode(ptr, resource, end, NULL, "?", encoding & HTTP_URI_CODING_RESOURCE); if (!ptr) goto assemble_overflow; if (query) { /* * Copy query string without encoding... */ ptr = http_copy_encode(ptr, query, end, NULL, NULL, encoding & HTTP_URI_CODING_QUERY); if (!ptr) goto assemble_overflow; } } else if (ptr < end) *ptr++ = '/'; else goto assemble_overflow; /* * Nul-terminate the URI buffer and return with no errors... */ *ptr = '\0'; return (HTTP_URI_OK); /* * Clear the URI string and return an overflow error; I don't usually * like goto's, but in this case it makes sense... */ assemble_overflow: *uri = '\0'; return (HTTP_URI_OVERFLOW); } /* * 'httpAssembleURIf()' - Assemble a uniform resource identifier from its * components with a formatted resource. * * This function creates a formatted version of the resource string * argument "resourcef" and escapes reserved characters in the URI * depending on the value of the "encoding" argument. You should use * this function in place of traditional string functions whenever * you need to create a URI string. * * @since CUPS 1.2@ */ http_uri_status_t /* O - URI status */ httpAssembleURIf( http_uri_coding_t encoding, /* I - Encoding flags */ char *uri, /* I - URI buffer */ int urilen, /* I - Size of URI buffer */ const char *scheme, /* I - Scheme name */ const char *username, /* I - Username */ const char *host, /* I - Hostname or address */ int port, /* I - Port number */ const char *resourcef, /* I - Printf-style resource */ ...) /* I - Additional arguments as needed */ { va_list ap; /* Pointer to additional arguments */ char resource[1024]; /* Formatted resource string */ int bytes; /* Bytes in formatted string */ /* * Range check input... */ if (!uri || urilen < 1 || !scheme || port < 0 || !resourcef) { if (uri) *uri = '\0'; return (HTTP_URI_BAD_ARGUMENTS); } /* * Format the resource string and assemble the URI... */ va_start(ap, resourcef); bytes = vsnprintf(resource, sizeof(resource), resourcef, ap); va_end(ap); if (bytes >= sizeof(resource)) { *uri = '\0'; return (HTTP_URI_OVERFLOW); } else return (httpAssembleURI(encoding, uri, urilen, scheme, username, host, port, resource)); } /* * 'httpDecode64()' - Base64-decode a string. * * This function is deprecated. Use the httpDecode64_2() function instead * which provides buffer length arguments. * * @deprecated@ */ char * /* O - Decoded string */ httpDecode64(char *out, /* I - String to write to */ const char *in) /* I - String to read from */ { int outlen; /* Output buffer length */ /* * Use the old maximum buffer size for binary compatibility... */ outlen = 512; return (httpDecode64_2(out, &outlen, in)); } /* * 'httpDecode64_2()' - Base64-decode a string. * * @since CUPS 1.1.21@ */ char * /* O - Decoded string */ httpDecode64_2(char *out, /* I - String to write to */ int *outlen, /* IO - Size of output string */ const char *in) /* I - String to read from */ { int pos, /* Bit position */ base64; /* Value of this character */ char *outptr, /* Output pointer */ *outend; /* End of output buffer */ /* * Range check input... */ if (!out || !outlen || *outlen < 1 || !in) return (NULL); if (!*in) { *out = '\0'; *outlen = 0; return (out); } /* * Convert from base-64 to bytes... */ for (outptr = out, outend = out + *outlen - 1, pos = 0; *in != '\0'; in ++) { /* * Decode this character into a number from 0 to 63... */ if (*in >= 'A' && *in <= 'Z') base64 = *in - 'A'; else if (*in >= 'a' && *in <= 'z') base64 = *in - 'a' + 26; else if (*in >= '0' && *in <= '9') base64 = *in - '0' + 52; else if (*in == '+') base64 = 62; else if (*in == '/') base64 = 63; else if (*in == '=') break; else continue; /* * Store the result in the appropriate chars... */ switch (pos) { case 0 : if (outptr < outend) *outptr = base64 << 2; pos ++; break; case 1 : if (outptr < outend) *outptr++ |= (base64 >> 4) & 3; if (outptr < outend) *outptr = (base64 << 4) & 255; pos ++; break; case 2 : if (outptr < outend) *outptr++ |= (base64 >> 2) & 15; if (outptr < outend) *outptr = (base64 << 6) & 255; pos ++; break; case 3 : if (outptr < outend) *outptr++ |= base64; pos = 0; break; } } *outptr = '\0'; /* * Return the decoded string and size... */ *outlen = (int)(outptr - out); return (out); } /* * 'httpEncode64()' - Base64-encode a string. * * This function is deprecated. Use the httpEncode64_2() function instead * which provides buffer length arguments. * * @deprecated@ */ char * /* O - Encoded string */ httpEncode64(char *out, /* I - String to write to */ const char *in) /* I - String to read from */ { return (httpEncode64_2(out, 512, in, strlen(in))); } /* * 'httpEncode64_2()' - Base64-encode a string. * * @since CUPS 1.1.21@ */ char * /* O - Encoded string */ httpEncode64_2(char *out, /* I - String to write to */ int outlen, /* I - Size of output string */ const char *in, /* I - String to read from */ int inlen) /* I - Size of input string */ { char *outptr, /* Output pointer */ *outend; /* End of output buffer */ static const char base64[] = /* Base64 characters... */ { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "+/" }; /* * Range check input... */ if (!out || outlen < 1 || !in) return (NULL); /* * Convert bytes to base-64... */ for (outptr = out, outend = out + outlen - 1; inlen > 0; in ++, inlen --) { /* * Encode the up to 3 characters as 4 Base64 numbers... */ if (outptr < outend) *outptr ++ = base64[(in[0] & 255) >> 2]; if (outptr < outend) *outptr ++ = base64[(((in[0] & 255) << 4) | ((in[1] & 255) >> 4)) & 63]; in ++; inlen --; if (inlen <= 0) { if (outptr < outend) *outptr ++ = '='; if (outptr < outend) *outptr ++ = '='; break; } if (outptr < outend) *outptr ++ = base64[(((in[0] & 255) << 2) | ((in[1] & 255) >> 6)) & 63]; in ++; inlen --; if (inlen <= 0) { if (outptr < outend) *outptr ++ = '='; break; } if (outptr < outend) *outptr ++ = base64[in[0] & 63]; } *outptr = '\0'; /* * Return the encoded string... */ return (out); } /* * 'httpGetDateString()' - Get a formatted date/time string from a time value. * * @deprecated@ */ const char * /* O - Date/time string */ httpGetDateString(time_t t) /* I - UNIX time */ { static char http_date[256]; /* Date+time buffer */ return (httpGetDateString2(t, http_date, sizeof(http_date))); } /* * 'httpGetDateString2()' - Get a formatted date/time string from a time value. * * @since CUPS 1.2@ */ const char * /* O - Date/time string */ httpGetDateString2(time_t t, /* I - UNIX time */ char *s, /* I - String buffer */ int slen) /* I - Size of string buffer */ { struct tm *tdate; /* UNIX date/time data */ tdate = gmtime(&t); snprintf(s, slen, "%s, %02d %s %d %02d:%02d:%02d GMT", http_days[tdate->tm_wday], tdate->tm_mday, http_months[tdate->tm_mon], tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec); return (s); } /* * 'httpGetDateTime()' - Get a time value from a formatted date/time string. */ time_t /* O - UNIX time */ httpGetDateTime(const char *s) /* I - Date/time string */ { int i; /* Looping var */ char mon[16]; /* Abbreviated month name */ int day, year; /* Day of month and year */ int hour, min, sec; /* Time */ int days; /* Number of days since 1970 */ static const int normal_days[] = /* Days to a month, normal years */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; static const int leap_days[] = /* Days to a month, leap years */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }; DEBUG_printf(("httpGetDateTime(s=\"%s\")\n", s)); /* * Extract the date and time from the formatted string... */ if (sscanf(s, "%*s%d%15s%d%d:%d:%d", &day, mon, &year, &hour, &min, &sec) < 6) return (0); DEBUG_printf((" day=%d, mon=\"%s\", year=%d, hour=%d, min=%d, sec=%d\n", day, mon, year, hour, min, sec)); /* * Convert the month name to a number from 0 to 11. */ for (i = 0; i < 12; i ++) if (!strcasecmp(mon, http_months[i])) break; if (i >= 12) return (0); DEBUG_printf((" i=%d\n", i)); /* * Now convert the date and time to a UNIX time value in seconds since * 1970. We can't use mktime() since the timezone may not be UTC but * the date/time string *is* UTC. */ if ((year & 3) == 0 && ((year % 100) != 0 || (year % 400) == 0)) days = leap_days[i] + day - 1; else days = normal_days[i] + day - 1; DEBUG_printf((" days=%d\n", days)); days += (year - 1970) * 365 + /* 365 days per year (normally) */ ((year - 1) / 4 - 492) - /* + leap days */ ((year - 1) / 100 - 19) + /* - 100 year days */ ((year - 1) / 400 - 4); /* + 400 year days */ DEBUG_printf((" days=%d\n", days)); return (days * 86400 + hour * 3600 + min * 60 + sec); } /* * 'httpSeparate()' - Separate a Universal Resource Identifier into its * components. * * This function is deprecated; use the httpSeparateURI() function instead. * * @deprecated@ */ void httpSeparate(const char *uri, /* I - Universal Resource Identifier */ char *scheme, /* O - Scheme [32] (http, https, etc.) */ char *username, /* O - Username [1024] */ char *host, /* O - Hostname [1024] */ int *port, /* O - Port number to use */ char *resource) /* O - Resource/filename [1024] */ { httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, 32, username, HTTP_MAX_URI, host, HTTP_MAX_URI, port, resource, HTTP_MAX_URI); } /* * 'httpSeparate2()' - Separate a Universal Resource Identifier into its * components. * * This function is deprecated; use the httpSeparateURI() function instead. * * @since CUPS 1.1.21@ * @deprecated@ */ void httpSeparate2(const char *uri, /* I - Universal Resource Identifier */ char *scheme, /* O - Scheme (http, https, etc.) */ int schemelen, /* I - Size of scheme buffer */ char *username, /* O - Username */ int usernamelen, /* I - Size of username buffer */ char *host, /* O - Hostname */ int hostlen, /* I - Size of hostname buffer */ int *port, /* O - Port number to use */ char *resource, /* O - Resource/filename */ int resourcelen) /* I - Size of resource buffer */ { httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, schemelen, username, usernamelen, host, hostlen, port, resource, resourcelen); } /* * 'httpSeparateURI()' - Separate a Universal Resource Identifier into its * components. * * @since CUPS 1.2@ */ http_uri_status_t /* O - Result of separation */ httpSeparateURI( http_uri_coding_t decoding, /* I - Decoding flags */ const char *uri, /* I - Universal Resource Identifier */ char *scheme, /* O - Scheme (http, https, etc.) */ int schemelen, /* I - Size of scheme buffer */ char *username, /* O - Username */ int usernamelen, /* I - Size of username buffer */ char *host, /* O - Hostname */ int hostlen, /* I - Size of hostname buffer */ int *port, /* O - Port number to use */ char *resource, /* O - Resource/filename */ int resourcelen) /* I - Size of resource buffer */ { char *ptr, /* Pointer into string... */ *end; /* End of string */ const char *sep; /* Separator character */ http_uri_status_t status; /* Result of separation */ /* * Initialize everything to blank... */ if (scheme && schemelen > 0) *scheme = '\0'; if (username && usernamelen > 0) *username = '\0'; if (host && hostlen > 0) *host = '\0'; if (port) *port = 0; if (resource && resourcelen > 0) *resource = '\0'; /* * Range check input... */ if (!uri || !port || !scheme || schemelen <= 0 || !username || usernamelen <= 0 || !host || hostlen <= 0 || !resource || resourcelen <= 0) return (HTTP_URI_BAD_ARGUMENTS); if (!*uri) return (HTTP_URI_BAD_URI); /* * Grab the scheme portion of the URI... */ status = HTTP_URI_OK; if (!strncmp(uri, "//", 2)) { /* * Workaround for HP IPP client bug... */ strlcpy(scheme, "ipp", schemelen); status = HTTP_URI_MISSING_SCHEME; } else if (*uri == '/') { /* * Filename... */ strlcpy(scheme, "file", schemelen); status = HTTP_URI_MISSING_SCHEME; } else { /* * Standard URI with scheme... */ for (ptr = scheme, end = scheme + schemelen - 1; *uri && *uri != ':' && ptr < end;) if (isalnum(*uri & 255) || *uri == '-' || *uri == '+' || *uri == '.') *ptr++ = *uri++; else break; *ptr = '\0'; if (*uri != ':') { *scheme = '\0'; return (HTTP_URI_BAD_SCHEME); } uri ++; } /* * Set the default port number... */ if (!strcmp(scheme, "http")) *port = 80; else if (!strcmp(scheme, "https")) *port = 443; else if (!strcmp(scheme, "ipp")) *port = 631; else if (!strcasecmp(scheme, "lpd")) *port = 515; else if (!strcmp(scheme, "socket")) /* Not yet registered with IANA... */ *port = 9100; else if (strcmp(scheme, "file") && strcmp(scheme, "mailto")) status = HTTP_URI_UNKNOWN_SCHEME; /* * Now see if we have a hostname... */ if (!strncmp(uri, "//", 2)) { /* * Yes, extract it... */ uri += 2; /* * Grab the username, if any... */ if ((sep = strpbrk(uri, "@/")) != NULL && *sep == '@') { /* * Get a username:password combo... */ uri = http_copy_decode(username, uri, usernamelen, "@", decoding & HTTP_URI_CODING_USERNAME); if (!uri) { *username = '\0'; return (HTTP_URI_BAD_USERNAME); } uri ++; } /* * Then the hostname/IP address... */ if (*uri == '[') { /* * Grab IPv6 address... */ uri ++; if (!strncmp(uri, "v1.", 3)) uri += 3; /* Skip IPvN leader... */ uri = http_copy_decode(host, uri, hostlen, "]", decoding & HTTP_URI_CODING_HOSTNAME); if (!uri) { *host = '\0'; return (HTTP_URI_BAD_HOSTNAME); } /* * Validate value... */ if (*uri != ']') { *host = '\0'; return (HTTP_URI_BAD_HOSTNAME); } uri ++; for (ptr = host; *ptr; ptr ++) if (*ptr == '+') { /* * Convert zone separator to % and stop here... */ *ptr = '%'; break; } else if (*ptr != ':' && *ptr != '.' && !isxdigit(*ptr & 255)) { *host = '\0'; return (HTTP_URI_BAD_HOSTNAME); } } else { /* * Validate the hostname or IPv4 address first... */ for (ptr = (char *)uri; *ptr; ptr ++) if (strchr(":?/", *ptr)) break; else if (!strchr("abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" "-._~" "%" "!$&'()*+,;=", *ptr)) { *host = '\0'; return (HTTP_URI_BAD_HOSTNAME); } /* * Then copy the hostname or IPv4 address to the buffer... */ uri = http_copy_decode(host, uri, hostlen, ":?/", decoding & HTTP_URI_CODING_HOSTNAME); if (!uri) { *host = '\0'; return (HTTP_URI_BAD_HOSTNAME); } } /* * Validate hostname for file scheme - only empty and localhost are * acceptable. */ if (!strcmp(scheme, "file") && strcmp(host, "localhost") && host[0]) { *host = '\0'; return (HTTP_URI_BAD_HOSTNAME); } /* * See if we have a port number... */ if (*uri == ':') { /* * Yes, collect the port number... */ *port = strtol(uri + 1, (char **)&uri, 10); if (*uri != '/' && *uri) { *port = 0; return (HTTP_URI_BAD_PORT); } } } /* * The remaining portion is the resource string... */ if (*uri == '?' || !*uri) { /* * Hostname but no path... */ status = HTTP_URI_MISSING_RESOURCE; *resource = '/'; /* * Copy any query string... */ if (*uri == '?') uri = http_copy_decode(resource + 1, uri, resourcelen - 1, NULL, decoding & HTTP_URI_CODING_QUERY); else resource[1] = '\0'; } else { uri = http_copy_decode(resource, uri, resourcelen, "?", decoding & HTTP_URI_CODING_RESOURCE); if (uri && *uri == '?') { /* * Concatenate any query string... */ char *resptr = resource + strlen(resource); uri = http_copy_decode(resptr, uri, resourcelen - (resptr - resource), NULL, decoding & HTTP_URI_CODING_QUERY); } } if (!uri) { *resource = '\0'; return (HTTP_URI_BAD_RESOURCE); } /* * Return the URI separation status... */ return (status); } /* * 'httpStatus()' - Return a short string describing a HTTP status code. */ const char * /* O - String or NULL */ httpStatus(http_status_t status) /* I - HTTP status code */ { switch (status) { case HTTP_CONTINUE : return ("Continue"); case HTTP_SWITCHING_PROTOCOLS : return ("Switching Protocols"); case HTTP_OK : return ("OK"); case HTTP_CREATED : return ("Created"); case HTTP_ACCEPTED : return ("Accepted"); case HTTP_NO_CONTENT : return ("No Content"); case HTTP_MOVED_PERMANENTLY : return ("Moved Permanently"); case HTTP_SEE_OTHER : return ("See Other"); case HTTP_NOT_MODIFIED : return ("Not Modified"); case HTTP_BAD_REQUEST : return ("Bad Request"); case HTTP_UNAUTHORIZED : return ("Unauthorized"); case HTTP_FORBIDDEN : return ("Forbidden"); case HTTP_NOT_FOUND : return ("Not Found"); case HTTP_REQUEST_TOO_LARGE : return ("Request Entity Too Large"); case HTTP_URI_TOO_LONG : return ("URI Too Long"); case HTTP_UPGRADE_REQUIRED : return ("Upgrade Required"); case HTTP_NOT_IMPLEMENTED : return ("Not Implemented"); case HTTP_NOT_SUPPORTED : return ("Not Supported"); case HTTP_EXPECTATION_FAILED : return ("Expectation Failed"); default : return ("Unknown"); } } #ifndef HAVE_HSTRERROR /* * '_hd_hstrerror()' - hstrerror() emulation function for Solaris and others... */ const char * /* O - Error string */ _hd_hstrerror(int error) /* I - Error number */ { static const char * const errors[] = /* Error strings */ { "OK", "Host not found.", "Try again.", "Unrecoverable lookup error.", "No data associated with name." }; if (error < 0 || error > 4) return ("Unknown hostname lookup error."); else return (errors[error]); } #endif /* !HAVE_HSTRERROR */ /* * 'http_copy_decode()' - Copy and decode a URI. */ static const char * /* O - New source pointer or NULL on error */ http_copy_decode(char *dst, /* O - Destination buffer */ const char *src, /* I - Source pointer */ int dstsize, /* I - Destination size */ const char *term, /* I - Terminating characters */ int decode) /* I - Decode %-encoded values */ { char *ptr, /* Pointer into buffer */ *end; /* End of buffer */ int quoted; /* Quoted character */ /* * Copy the src to the destination until we hit a terminating character * or the end of the string. */ for (ptr = dst, end = dst + dstsize - 1; *src && (!term || !strchr(term, *src)); src ++) if (ptr < end) { if (*src == '%' && decode) { if (isxdigit(src[1] & 255) && isxdigit(src[2] & 255)) { /* * Grab a hex-encoded character... */ src ++; if (isalpha(*src)) quoted = (tolower(*src) - 'a' + 10) << 4; else quoted = (*src - '0') << 4; src ++; if (isalpha(*src)) quoted |= tolower(*src) - 'a' + 10; else quoted |= *src - '0'; *ptr++ = quoted; } else { /* * Bad hex-encoded character... */ *ptr = '\0'; return (NULL); } } else *ptr++ = *src; } *ptr = '\0'; return (src); } /* * 'http_copy_encode()' - Copy and encode a URI. */ static char * /* O - End of current URI */ http_copy_encode(char *dst, /* O - Destination buffer */ const char *src, /* I - Source pointer */ char *dstend, /* I - End of destination buffer */ const char *reserved, /* I - Extra reserved characters */ const char *term, /* I - Terminating characters */ int encode) /* I - %-encode reserved chars? */ { static const char *hex = "0123456789ABCDEF"; while (*src && dst < dstend) { if (term && *src == *term) return (dst); if (encode && (*src == '%' || *src <= ' ' || *src & 128 || (reserved && strchr(reserved, *src)))) { /* * Hex encode reserved characters... */ if ((dst + 2) >= dstend) break; *dst++ = '%'; *dst++ = hex[(*src >> 4) & 15]; *dst++ = hex[*src & 15]; src ++; } else *dst++ = *src++; } if (*src) return (NULL); else return (dst); } /* * End of "$Id: http-support.c 1493 2006-06-07 18:20:49Z mike $". */ htmldoc-1.8.27/htmldoc/hdstring.h0100664000212600000240000000554010232770600015350 0ustar mikeuser/* * "$Id: hdstring.h 1397 2005-04-24 19:20:32Z mike $" * * String definitions for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _HDSTRING_H_ # define _HDSTRING_H_ /* * Include necessary headers... */ # include "config.h" # include # include # include # include # include # ifdef HAVE_STRINGS_H # include # endif /* HAVE_STRINGS_H */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Define some compatibility macros for Microsoft Windows... */ # ifdef WIN32 # define strcasecmp(s,t) stricmp(s,t) # define strncasecmp(s,t,n) strnicmp(s,t,n) # define snprintf _snprintf # define vsnprintf _vsnprintf # endif /* WIN32 */ /* * Implementation of strcpy() that allows for overlapping buffers. */ extern void hd_strcpy(char *dst, const char *src); /* * Standard string functions that might not be available... */ # ifndef HAVE_STRDUP extern char *hd_strdup(const char *); # define strdup hd_strdup # endif /* !HAVE_STRDUP */ # ifndef HAVE_STRCASECMP extern int hd_strcasecmp(const char *, const char *); # define strcasecmp hd_strcasecmp # endif /* !HAVE_STRCASECMP */ # ifndef HAVE_STRNCASECMP extern int hd_strncasecmp(const char *, const char *, size_t n); # define strncasecmp hd_strncasecmp # endif /* !HAVE_STRNCASECMP */ # ifndef HAVE_STRLCAT extern size_t hd_strlcat(char *, const char *, size_t); # define strlcat hd_strlcat # endif /* !HAVE_STRLCAT */ # ifndef HAVE_STRLCPY extern size_t hd_strlcpy(char *, const char *, size_t); # define strlcpy hd_strlcpy # endif /* !HAVE_STRLCPY */ # ifndef HAVE_SNPRINTF extern int hd_snprintf(char *, size_t, const char *, ...) # ifdef __GNUC__ __attribute__ ((__format__ (__printf__, 3, 4))) # endif /* __GNUC__ */ ; # define snprintf hd_snprintf # endif /* !HAVE_SNPRINTF */ # ifndef HAVE_VSNPRINTF extern int hd_vsnprintf(char *, size_t, const char *, va_list); # define vsnprintf hd_vsnprintf # endif /* !HAVE_VSNPRINTF */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_HDSTRING_H_ */ /* * End of "$Id: hdstring.h 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/debug.h0100664000212600000240000000225110232770600014610 0ustar mikeuser/* * "$Id: debug.h 1397 2005-04-24 19:20:32Z mike $" * * Debugging macros for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _DEBUG_H_ # define _DEBUG_H_ /* * Include necessary headers. */ # include # ifdef DEBUG # define DEBUG_printf(x) printf x # define DEBUG_puts(x) puts(x) # else # define DEBUG_printf(x) # define DEBUG_puts(x) # endif /* DEBUG */ #endif /* !_DEBUG_H_ */ /* * End of "$Id: debug.h 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/md5.h0100664000212600000240000000573007116307311014216 0ustar mikeuser/* Copyright (C) 1999 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com */ /*$Id: md5.h 286 2000-06-03 23:03:37Z mike $ */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321. It is derived directly from the text of the RFC and not from the reference implementation. The original and principal author of md5.h is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); added conditionalization for C++ compilation from Martin Purschke . 1999-05-03 lpd Original version. */ #ifndef md5_INCLUDED # define md5_INCLUDED /* * This code has some adaptations for the Ghostscript environment, but it * will compile and run correctly in any environment with 8-bit chars and * 32-bit ints. Specifically, it assumes that if the following are * defined, they have the same meaning as in Ghostscript: P1, P2, P3, * ARCH_IS_BIG_ENDIAN. */ typedef unsigned char md5_byte_t; /* 8-bit byte */ typedef unsigned int md5_word_t; /* 32-bit word */ /* Define the state of the MD5 Algorithm. */ typedef struct md5_state_s { md5_word_t count[2]; /* message length in bits, lsw first */ md5_word_t abcd[4]; /* digest buffer */ md5_byte_t buf[64]; /* accumulate block */ } md5_state_t; #ifdef __cplusplus extern "C" { #endif /* Initialize the algorithm. */ #ifdef P1 void md5_init(P1(md5_state_t *pms)); #else void md5_init(md5_state_t *pms); #endif /* Append a string to the message. */ #ifdef P3 void md5_append(P3(md5_state_t *pms, const md5_byte_t *data, int nbytes)); #else void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); #endif /* Finish the message and return the digest. */ #ifdef P2 void md5_finish(P2(md5_state_t *pms, md5_byte_t digest[16])); #else void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); #endif #ifdef __cplusplus } /* end extern "C" */ #endif #endif /* md5_INCLUDED */ htmldoc-1.8.27/htmldoc/Dependencies0100664000212600000240000000000010330505373015652 0ustar mikeuserhtmldoc-1.8.27/htmldoc/http-private.h0100664000212600000240000000663510441614401016161 0ustar mikeuser/* * "$Id: http-private.h 1493 2006-06-07 18:20:49Z mike $" * * Private HTTP definitions for the Common UNIX Printing System (CUPS). * * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: cups-info@cups.org * WWW: http://www.cups.org * * This file is subject to the Apple OS-Developed Software exception. */ #ifndef _CUPS_HTTP_PRIVATE_H_ # define _CUPS_HTTP_PRIVATE_H_ /* * Include necessary headers... */ # include "hdstring.h" # include # ifdef WIN32 # include # include # else # include # include # include # define closesocket(f) close(f) # endif /* WIN32 */ # if defined(__sgi) || (defined(__APPLE__) && !defined(_SOCKLEN_T)) /* * IRIX and MacOS X 10.2.x do not define socklen_t, and in fact use an int instead of * unsigned type for length values... */ typedef int socklen_t; # endif /* __sgi || (__APPLE__ && !_SOCKLEN_T) */ # include "http.h" # if defined HAVE_LIBSSL /* * The OpenSSL library provides its own SSL/TLS context structure for its * IO and protocol management... */ # include # include # include typedef SSL http_tls_t; # elif defined HAVE_GNUTLS /* * The GNU TLS library is more of a "bare metal" SSL/TLS library... */ # include typedef struct { gnutls_session session; /* GNU TLS session object */ void *credentials; /* GNU TLS credentials object */ } http_tls_t; # elif defined(HAVE_CDSASSL) /* * Darwin's Security framework provides its own SSL/TLS context structure * for its IO and protocol management... */ # include typedef struct /**** CDSA connection information ****/ { SSLContextRef session; /* CDSA session object */ CFArrayRef certsArray; /* Certificates array */ } http_tls_t; typedef union _cdsa_conn_ref_u /**** CDSA Connection reference union **** used to resolve 64-bit casting **** warnings. ****/ { SSLConnectionRef connection; /* SSL connection pointer */ int sock; /* Socket */ } cdsa_conn_ref_t; extern OSStatus _httpReadCDSA(SSLConnectionRef connection, void *data, size_t *dataLength); extern OSStatus _httpWriteCDSA(SSLConnectionRef connection, const void *data, size_t *dataLength); # endif /* HAVE_LIBSSL */ /* * Some OS's don't have hstrerror(), most notably Solaris... */ # ifndef HAVE_HSTRERROR extern const char *_hd_hstrerror(int error); # define hstrerror _hd_hstrerror # elif defined(_AIX) || defined(__osf__) /* * AIX and Tru64 UNIX don't provide a prototype but do provide the function... */ extern const char *hstrerror(int error); # endif /* !HAVE_HSTRERROR */ #endif /* !_CUPS_HTTP_PRIVATE_H_ */ /* * End of "$Id: http-private.h 1493 2006-06-07 18:20:49Z mike $". */ htmldoc-1.8.27/htmldoc/Makefile0100664000212600000240000000340110330505373015011 0ustar mikeuser# # "$Id: Makefile 1439 2005-10-28 20:32:59Z mike $" # # Makefile for HTMLDOC, an HTML document processing program. # # Copyright 1997-2005 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # # # Include common definitions... # include ../Makedefs # # Object files... # OBJS = gui.o file.o html.o htmldoc.o htmllib.o htmlsep.o \ http.o http-addr.o http-addrlist.o http-support.o image.o \ iso8859.o license.o md5.o progress.o ps-pdf.o rc4.o \ snprintf.o string.o toc.o util.o # # Make everything... # all: htmldoc$(EXEEXT) # # Install everything... # install: all if [ ! -d $(bindir) ]; then\ $(MKDIR) $(bindir);\ fi cp htmldoc$(EXEEXT) $(bindir) chmod ugo+rx $(bindir)/htmldoc$(EXEEXT) # # Clean out object and executable files... # clean: rm -f $(OBJS) htmldoc$(EXEEXT) # # Update dependencies... # depend: makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) $(OBJS:.o=.cxx) >/dev/null 2>&1 # # htmldoc # htmldoc$(EXEEXT): $(OBJS) ../Makedefs echo Linking $@... $(CXX) $(LDFLAGS) -o htmldoc$(EXEEXT) $(OBJS) $(LIBS) $(POST) htmldoc$(EXEEXT) $(OBJS): ../Makedefs include Dependencies # # End of "$Id: Makefile 1439 2005-10-28 20:32:59Z mike $". # htmldoc-1.8.27/htmldoc/htmlsep.cxx0100664000212600000240000007065110437332740015570 0ustar mikeuser// // "$Id: htmlsep.cxx 1486 2006-05-31 15:27:28Z mike $" // // Separated HTML export functions for HTMLDOC, a HTML document processing // program. // // Copyright 1997-2005 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Easy Software Products and are protected by Federal // copyright law. Distribution and use rights are outlined in the file // "COPYING.txt" which should have been included with this file. If this // file is missing or damaged please contact Easy Software Products // at: // // Attn: ESP Licensing Information // Easy Software Products // 44141 Airport View Drive, Suite 204 // Hollywood, Maryland 20636-3142 USA // // Voice: (301) 373-9600 // EMail: info@easysw.com // WWW: http://www.easysw.com // // Contents: // // htmlsep_export() - Export to separated HTML files. // // // Include necessary headers. // #include "htmldoc.h" #include // // Named link structure... // typedef struct { uchar *filename; /* File for link */ uchar name[124]; /* Reference name */ } link_t; // // Local globals... // // Heading strings used for filenames... static int num_headings = 0, // Number of headings alloc_headings = 0; // Allocated headings static uchar **headings; // Heading strings // Links in document - used to add the correct filename to the link static int num_links = 0, // Number of links alloc_links = 0; // Allocated links static link_t *links; // Links // // Local functions... // extern "C" { typedef int (*compare_func_t)(const void *, const void *); } static void write_header(FILE **out, uchar *filename, uchar *title, uchar *author, uchar *copyright, uchar *docnumber, int heading); static void write_footer(FILE **out, int heading); static void write_title(FILE *out, uchar *title, uchar *author, uchar *copyright, uchar *docnumber); static int write_all(FILE *out, tree_t *t, int col); static int write_doc(FILE **out, tree_t *t, int col, int *heading, uchar *title, uchar *author, uchar *copyright, uchar *docnumber); static int write_node(FILE *out, tree_t *t, int col); static int write_nodeclose(FILE *out, tree_t *t, int col); static int write_toc(FILE *out, tree_t *t, int col); static uchar *get_title(tree_t *doc); static void add_heading(tree_t *t); static void add_link(uchar *name); static link_t *find_link(uchar *name); static int compare_links(link_t *n1, link_t *n2); static void scan_links(tree_t *t); static void update_links(tree_t *t, int *heading); // // 'htmlsep_export()' - Export to separated HTML files... // int // O - 0 = success, -1 = failure htmlsep_export(tree_t *document, // I - Document to export tree_t *toc) // I - Table of contents for document { int i; // Looping var int heading; // Current heading number uchar *title, // Title text *author, // Author name *copyright, // Copyright text *docnumber; // Document number FILE *out; // Output file // We only support writing to a directory... if (!OutputFiles) { progress_error(HD_ERROR_INTERNAL_ERROR, "Unable to generate separated HTML to a single file!"); return (-1); } // Copy logo and title images... if (LogoImage[0]) image_copy(LogoImage, file_find(LogoImage, Path), OutputPath); for (int hfi = 0; hfi < MAX_HF_IMAGES; hfi ++) if (HFImage[hfi][0]) image_copy(HFImage[hfi], file_find(HFImage[hfi], Path), OutputPath); if (TitleImage[0] && TitlePage && #ifdef WIN32 stricmp(file_extension(TitleImage), "bmp") == 0 || stricmp(file_extension(TitleImage), "gif") == 0 || stricmp(file_extension(TitleImage), "jpg") == 0 || stricmp(file_extension(TitleImage), "png") == 0) #else strcmp(file_extension(TitleImage), "bmp") == 0 || strcmp(file_extension(TitleImage), "gif") == 0 || strcmp(file_extension(TitleImage), "jpg") == 0 || strcmp(file_extension(TitleImage), "png") == 0) #endif // WIN32 image_copy(TitleImage, file_find(TitleImage, Path), OutputPath); // Get document strings... title = get_title(document); author = htmlGetMeta(document, (uchar *)"author"); copyright = htmlGetMeta(document, (uchar *)"copyright"); docnumber = htmlGetMeta(document, (uchar *)"docnumber"); // Scan for all links in the document, and then update them... num_links = 0; alloc_links = 0; links = NULL; scan_links(document); // printf("num_headings = %d\n", num_headings); // for (i = 0; i < num_headings; i ++) // printf("headings[%d] = \"%s\"\n", i, headings[i]); heading = -1; update_links(document, &heading); update_links(toc, NULL); // Generate title pages and a table of contents... out = NULL; if (TitlePage) { write_header(&out, (uchar *)"index.html", title, author, copyright, docnumber, -1); if (out != NULL) write_title(out, title, author, copyright, docnumber); write_footer(&out, -1); write_header(&out, (uchar *)"toc.html", title, author, copyright, docnumber, -1); } else write_header(&out, (uchar *)"index.html", title, author, copyright, docnumber, -1); if (out != NULL) write_toc(out, toc, 0); write_footer(&out, -1); // Then write each output file... heading = -1; write_doc(&out, document, 0, &heading, title, author, copyright, docnumber); if (out != NULL) write_footer(&out, heading); // Free memory... if (title != NULL) free(title); if (alloc_links) { free(links); num_links = 0; alloc_links = 0; links = NULL; } if (alloc_headings) { for (i = 0; i < num_headings; i ++) free(headings[i]); free(headings); num_headings = 0; alloc_headings = 0; headings = NULL; } return (out == NULL); } /* * 'write_header()' - Output the standard "header" for a HTML file. */ static void write_header(FILE **out, /* IO - Output file */ uchar *filename, /* I - Output filename */ uchar *title, /* I - Title for document */ uchar *author, /* I - Author for document */ uchar *copyright, /* I - Copyright for document */ uchar *docnumber, /* I - ID number for document */ int heading) /* I - Current heading */ { char realname[1024]; /* Real filename */ const char *basename; /* Filename without directory */ static const char *families[] =/* Typeface names */ { "monospace", "serif", "sans-serif", "monospace", "serif", "sans-serif", "symbol", "dingbats" }; basename = file_basename((char *)filename); snprintf(realname, sizeof(realname), "%s/%s", OutputPath, basename); *out = fopen(realname, "wb"); if (*out == NULL) { progress_error(HD_ERROR_WRITE_ERROR, "Unable to create output file \"%s\" - %s.\n", realname, strerror(errno)); return; } fputs("\n", *out); fputs("\n", *out); fputs("\n", *out); if (title != NULL) fprintf(*out, "%s\n", title); if (author != NULL) fprintf(*out, "\n", author); if (copyright != NULL) fprintf(*out, "\n", copyright); if (docnumber != NULL) fprintf(*out, "\n", docnumber); fprintf(*out, "\n", _htmlCharSet); fputs("\n", *out); if (TitlePage) fputs("\n", *out); else fputs("\n", *out); if (heading >= 0) { if (heading > 0) fprintf(*out, "\n", headings[heading - 1]); if (heading < (num_headings - 1)) fprintf(*out, "\n", headings[heading + 1]); } fputs("\n", *out); fputs("\n", *out); if (BodyImage[0]) fprintf(*out, "\n", *out); if (heading >= 0) { if (LogoImage[0]) fprintf(*out, "\n", file_basename(LogoImage)); for (int hfi = 0; hfi < MAX_HF_IMAGES; ++hfi) if (HFImage[hfi][0]) fprintf(*out, "\n", file_basename(HFImage[hfi])); if (TitlePage) fputs("Contents\n", *out); else fputs("Contents\n", *out); if (heading > 0) fprintf(*out, "Previous\n", headings[heading - 1]); if (heading < (num_headings - 1)) fprintf(*out, "Next\n", headings[heading + 1]); fputs("
    \n", *out); } } /* * 'write_footer()' - Output the standard "footer" for a HTML file. */ static void write_footer(FILE **out, /* IO - Output file pointer */ int heading) /* I - Current heading */ { if (*out == NULL) return; fputs("
    \n", *out); if (heading >= 0) { if (LogoImage[0]) fprintf(*out, "\n", file_basename(LogoImage)); for (int hfi = 0; hfi < MAX_HF_IMAGES; ++hfi) if (HFImage[hfi][0]) fprintf(*out, "\n", file_basename(HFImage[hfi])); if (TitlePage) fputs("Contents\n", *out); else fputs("Contents\n", *out); if (heading > 0) fprintf(*out, "Previous\n", headings[heading - 1]); if (heading < (num_headings - 1)) fprintf(*out, "Next\n", headings[heading + 1]); } fputs("\n", *out); fputs("\n", *out); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(*out)); fclose(*out); *out = NULL; } /* * 'write_title()' - Write a title page... */ static void write_title(FILE *out, /* I - Output file */ uchar *title, /* I - Title for document */ uchar *author, /* I - Author for document */ uchar *copyright, /* I - Copyright for document */ uchar *docnumber) /* I - ID number for document */ { FILE *fp; /* Title file */ const char *title_file; /* Location of title file */ tree_t *t; /* Title file document tree */ if (out == NULL) return; #ifdef WIN32 if (TitleImage[0] && stricmp(file_extension(TitleImage), "bmp") != 0 && stricmp(file_extension(TitleImage), "gif") != 0 && stricmp(file_extension(TitleImage), "jpg") != 0 && stricmp(file_extension(TitleImage), "png") != 0) #else if (TitleImage[0] && strcmp(file_extension(TitleImage), "bmp") != 0 && strcmp(file_extension(TitleImage), "gif") != 0 && strcmp(file_extension(TitleImage), "jpg") != 0 && strcmp(file_extension(TitleImage), "png") != 0) #endif // WIN32 { // Find the title page file... if ((title_file = file_find(Path, TitleImage)) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to find title file \"%s\"!", TitleImage); return; } // Write a title page from HTML source... if ((fp = fopen(title_file, "rb")) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open title file \"%s\" - %s!", TitleImage, strerror(errno)); return; } t = htmlReadFile(NULL, fp, file_directory(TitleImage)); htmlFixLinks(t, t, (uchar *)file_directory(TitleImage)); fclose(fp); write_all(out, t, 0); htmlDeleteTree(t); } else { // Write a "standard" title page with image... fputs("
    ", out); if (TitleImage[0]) { image_t *img = image_load(TitleImage, !OutputColor); fprintf(out, "
    \n", file_basename((char *)TitleImage), img->width, img->height, title ? (char *)title : ""); } if (title != NULL) fprintf(out, "

    %s


    \n", title); else fputs("\n", out); if (docnumber != NULL) fprintf(out, "%s
    \n", docnumber); if (author != NULL) fprintf(out, "%s
    \n", author); if (copyright != NULL) fprintf(out, "%s
    \n", copyright); fputs("Table of Contents", out); fputs("
    \n", out); } } /* * 'write_all()' - Write all markup text for the given tree. */ static int /* O - Current column */ write_all(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree */ int col) /* I - Current column */ { if (out == NULL) return (0); while (t != NULL) { col = write_node(out, t, col); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) col = write_all(out, t->child, col); col = write_nodeclose(out, t, col); t = t->next; } return (col); } /* * 'write_doc()' - Write the entire document. */ static int // O - Current column write_doc(FILE **out, // I - Output file tree_t *t, // I - Document tree int col, // I - Current column int *heading, // IO - Current heading uchar *title, // I - Title uchar *author, // I - Author uchar *copyright, // I - Copyright uchar *docnumber) // I - Document number { uchar filename[1024]; // Filename while (t != NULL) { if (t->markup >= MARKUP_H1 && t->markup < (MARKUP_H1 + TocLevels) && htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC") == NULL) { if (heading >= 0) write_footer(out, *heading); (*heading) ++; if (*heading >= 0) { snprintf((char *)filename, sizeof(filename), "%s.html", headings[*heading]); write_header(out, filename, title, author, copyright, docnumber, *heading); } } col = write_node(*out, t, col); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) col = write_doc(out, t->child, col, heading, title, author, copyright, docnumber); col = write_nodeclose(*out, t, col); t = t->next; } return (col); } /* * 'write_node()' - Write a single tree node. */ static int /* O - Current column */ write_node(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree node */ int col) /* I - Current column */ { int i; /* Looping var */ uchar *ptr, /* Pointer to output string */ *entity, /* Entity string */ *src, /* Source image */ *realsrc, /* Real source image */ newsrc[1024]; /* New source image filename */ if (out == NULL) return (0); switch (t->markup) { case MARKUP_NONE : if (t->data == NULL) break; if (t->preformatted) { for (ptr = t->data; *ptr; ptr ++) fputs((char *)iso8859(*ptr), out); if (t->data[strlen((char *)t->data) - 1] == '\n') col = 0; else col += strlen((char *)t->data); } else { if ((col + strlen((char *)t->data)) > 72 && col > 0) { putc('\n', out); col = 0; } for (ptr = t->data; *ptr; ptr ++) fputs((char *)iso8859(*ptr), out); col += strlen((char *)t->data); if (col > 72) { putc('\n', out); col = 0; } } break; case MARKUP_COMMENT : case MARKUP_UNKNOWN : fputs("\n\n", out); col = 0; break; case MARKUP_AREA : case MARKUP_BODY : case MARKUP_DOCTYPE : case MARKUP_ERROR : case MARKUP_FILE : case MARKUP_HEAD : case MARKUP_HTML : case MARKUP_MAP : case MARKUP_META : case MARKUP_TITLE : break; case MARKUP_BR : case MARKUP_CENTER : case MARKUP_DD : case MARKUP_DL : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : case MARKUP_HR : case MARKUP_LI : case MARKUP_OL : case MARKUP_P : case MARKUP_PRE : case MARKUP_TABLE : case MARKUP_TR : case MARKUP_UL : if (col > 0) { putc('\n', out); col = 0; } default : if (t->markup == MARKUP_IMG && (src = htmlGetVariable(t, (uchar *)"SRC")) != NULL && (realsrc = htmlGetVariable(t, (uchar *)"REALSRC")) != NULL) { /* * Update local images... */ if (file_method((char *)src) == NULL && src[0] != '/' && src[0] != '\\' && (!isalpha(src[0]) || src[1] != ':')) { image_copy((char *)src, (char *)realsrc, OutputPath); strlcpy((char *)newsrc, file_basename((char *)src), sizeof(newsrc)); htmlSetVariable(t, (uchar *)"SRC", newsrc); } } if (t->markup != MARKUP_EMBED) { col += fprintf(out, "<%s", _htmlMarkups[t->markup]); for (i = 0; i < t->nvars; i ++) { if (strcasecmp((char *)t->vars[i].name, "BREAK") == 0 && t->markup == MARKUP_HR) continue; if (strcasecmp((char *)t->vars[i].name, "REALSRC") == 0 && t->markup == MARKUP_IMG) continue; if (strncasecmp((char *)t->vars[i].name, "_HD_", 4) == 0) continue; if (col > 72 && !t->preformatted) { putc('\n', out); col = 0; } if (col > 0) { putc(' ', out); col ++; } if (t->vars[i].value == NULL) col += fprintf(out, "%s", t->vars[i].name); else { col += fprintf(out, "%s=\"", t->vars[i].name); for (ptr = t->vars[i].value; *ptr; ptr ++) { entity = iso8859(*ptr); fputs((char *)entity, out); col += strlen((char *)entity); } putc('\"', out); col ++; } } putc('>', out); col ++; if (col > 72 && !t->preformatted) { putc('\n', out); col = 0; } } break; } return (col); } /* * 'write_nodeclose()' - Close a single tree node. */ static int /* O - Current column */ write_nodeclose(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree node */ int col) /* I - Current column */ { if (out == NULL) return (0); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) { if (col > 72 && !t->preformatted) { putc('\n', out); col = 0; } switch (t->markup) { case MARKUP_BODY : case MARKUP_ERROR : case MARKUP_FILE : case MARKUP_HEAD : case MARKUP_HTML : case MARKUP_NONE : case MARKUP_TITLE : case MARKUP_APPLET : case MARKUP_AREA : case MARKUP_BR : case MARKUP_COMMENT : case MARKUP_DOCTYPE : case MARKUP_EMBED : case MARKUP_HR : case MARKUP_IMG : case MARKUP_INPUT : case MARKUP_ISINDEX : case MARKUP_LINK : case MARKUP_META : case MARKUP_NOBR : case MARKUP_SPACER : case MARKUP_WBR : case MARKUP_UNKNOWN : break; case MARKUP_CENTER : case MARKUP_DD : case MARKUP_DL : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : case MARKUP_LI : case MARKUP_OL : case MARKUP_P : case MARKUP_PRE : case MARKUP_TABLE : case MARKUP_TR : case MARKUP_UL : fprintf(out, "\n", _htmlMarkups[t->markup]); col = 0; break; default : col += fprintf(out, "", _htmlMarkups[t->markup]); break; } } return (col); } /* * 'write_toc()' - Write all markup text for the given table-of-contents. */ static int /* O - Current column */ write_toc(FILE *out, /* I - Output file */ tree_t *t, /* I - Document tree */ int col) /* I - Current column */ { if (out == NULL) return (0); while (t != NULL) { if (htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC") == NULL) { col = write_node(out, t, col); if (t->markup != MARKUP_HEAD && t->markup != MARKUP_TITLE) col = write_toc(out, t->child, col); col = write_nodeclose(out, t, col); } t = t->next; } return (col); } /* * 'get_title()' - Get the title string for the given document... */ static uchar * /* O - Title string */ get_title(tree_t *doc) /* I - Document tree */ { uchar *temp; /* Temporary pointer to title */ while (doc != NULL) { if (doc->markup == MARKUP_TITLE) return (htmlGetText(doc->child)); else if (doc->child != NULL) if ((temp = get_title(doc->child)) != NULL) return (temp); doc = doc->next; } return (NULL); } // // 'add_heading()' - Add a heading to the list of headings... // static void add_heading(tree_t *t) // I - Heading node { int i, // Looping var count; // Count of headings with this name uchar *heading, // Heading text for this node *ptr, // Pointer into text *ptr2, // Second pointer into text s[1024], // New text if we have a conflict **temp; // New heading array pointer // Start by getting the heading text... heading = htmlGetText(t->child); if (!heading || !*heading) return; // Nothing to do! // Sanitize the text... for (ptr = heading; *ptr;) if (!isalnum(*ptr)) { // Remove anything but letters and numbers from the filename for (ptr2 = ptr; *ptr2; ptr2 ++) *ptr2 = ptr2[1]; *ptr2 = '\0'; } else ptr ++; // Now loop through the existing headings and check for dups... for (ptr = heading, i = 0, count = 0; i < num_headings; i ++) if (strcmp((char *)headings[i], (char *)ptr) == 0) { // Create a new instance of the heading... count ++; snprintf((char *)s, sizeof(s), "%s%d", heading, count); ptr = s; } // Now add the heading... if (num_headings >= alloc_headings) { // Allocate more headings... alloc_headings += ALLOC_HEADINGS; if (num_headings == 0) temp = (uchar **)malloc(sizeof(uchar *) * alloc_headings); else temp = (uchar **)realloc(headings, sizeof(uchar *) * alloc_headings); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d headings - %s", alloc_headings, strerror(errno)); alloc_headings -= ALLOC_HEADINGS; return; } headings = temp; } if (ptr == heading) { // Reuse the already-allocated string... headings[num_headings] = ptr; } else { // Make a copy of the string "s" and free the old heading string... headings[num_headings] = (uchar *)strdup((char *)s); free(heading); } num_headings ++; } /* * 'add_link()' - Add a named link... */ static void add_link(uchar *name) /* I - Name of link */ { uchar *filename; /* File for link */ link_t *temp; /* New name */ if (num_headings) filename = headings[num_headings - 1]; else filename = (uchar *)"noheading"; if ((temp = find_link(name)) != NULL) temp->filename = filename; else { // See if we need to allocate memory for links... if (num_links >= alloc_links) { // Allocate more links... alloc_links += ALLOC_LINKS; if (num_links == 0) temp = (link_t *)malloc(sizeof(link_t) * alloc_links); else temp = (link_t *)realloc(links, sizeof(link_t) * alloc_links); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d links - %s", alloc_links, strerror(errno)); alloc_links -= ALLOC_LINKS; return; } links = temp; } // Add a new link... temp = links + num_links; num_links ++; strlcpy((char *)temp->name, (char *)name, sizeof(temp->name)); temp->filename = filename; if (num_links > 1) qsort(links, num_links, sizeof(link_t), (compare_func_t)compare_links); } } /* * 'find_link()' - Find a named link... */ static link_t * find_link(uchar *name) /* I - Name to find */ { uchar *target; /* Pointer to target name portion */ link_t key, /* Search key */ *match; /* Matching name entry */ if (name == NULL || num_links == 0) return (NULL); if ((target = (uchar *)file_target((char *)name)) == NULL) return (NULL); strlcpy((char *)key.name, (char *)target, sizeof(key.name)); key.name[sizeof(key.name) - 1] = '\0'; match = (link_t *)bsearch(&key, links, num_links, sizeof(link_t), (compare_func_t)compare_links); return (match); } /* * 'compare_links()' - Compare two named links. */ static int /* O - 0 = equal, -1 or 1 = not equal */ compare_links(link_t *n1, /* I - First name */ link_t *n2) /* I - Second name */ { return (strcasecmp((char *)n1->name, (char *)n2->name)); } /* * 'scan_links()' - Scan a document for link targets, and keep track of * the files they are in... */ static void scan_links(tree_t *t) /* I - Document tree */ { uchar *name; /* Name of link */ while (t != NULL) { if (t->markup >= MARKUP_H1 && t->markup < (MARKUP_H1 + TocLevels) && htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC") == NULL) add_heading(t); if (t->markup == MARKUP_A && (name = htmlGetVariable(t, (uchar *)"NAME")) != NULL) add_link(name); if (t->child != NULL) scan_links(t->child); t = t->next; } } /* * 'update_links()' - Update links as needed. */ static void update_links(tree_t *t, /* I - Document tree */ int *heading) /* I - Current heading */ { link_t *link; /* Link */ uchar *href; /* Reference name */ uchar newhref[1024]; /* New reference name */ uchar *filename; /* Current filename */ // Scan the document, rewriting HREF's as needed... while (t != NULL) { if (t->markup >= MARKUP_H1 && t->markup < (MARKUP_H1 + TocLevels) && htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC") == NULL && heading) (*heading) ++; // Figure out the current filename based upon the current heading number... if (!heading || *heading < 0 || *heading >= num_headings) filename = (uchar *)"noheading"; else filename = headings[*heading]; if (t->markup == MARKUP_A && (href = htmlGetVariable(t, (uchar *)"HREF")) != NULL) { // Update this link as needed... if (href[0] == '#' && (link = find_link(href)) != NULL) { // The filename in the link structure is a copy of the heading // pointer... if (filename != link->filename) { // Rewrite using the new name... snprintf((char *)newhref, sizeof(newhref), "%s.html%s", link->filename, href); htmlSetVariable(t, (uchar *)"HREF", newhref); } } } // Descend the tree as needed... if (t->child != NULL) update_links(t->child, heading); // Move to the next node at this level... t = t->next; } } // // End of "$Id: htmlsep.cxx 1486 2006-05-31 15:27:28Z mike $". // htmldoc-1.8.27/htmldoc/htmldoc.h0100664000212600000240000001705310275372705015175 0ustar mikeuser/* * "$Id: htmldoc.h 1421 2005-08-07 11:51:33Z mike $" * * Header file for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ /* * Include necessary headers. */ #include #include #include #include "html.h" #include "image.h" #include "debug.h" #include "progress.h" #ifdef HAVE_LIBFLTK # include "gui.h" #endif /* HAVE_LIBFLTK */ #ifdef WIN32 /* Include all 8 million Windows header files... */ # include #endif /* WIN32 */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Macro to get rid of "unreferenced variable xyz" warnings... */ #define REF(x) (void)x; /* * Output type... */ enum { OUTPUT_BOOK, OUTPUT_CONTINUOUS, OUTPUT_WEBPAGES }; /* * PDF constants... */ enum /* PDF page mode */ { PDF_DOCUMENT, PDF_OUTLINE, PDF_FULLSCREEN }; enum /* PDF page layout */ { PDF_SINGLE, PDF_ONE_COLUMN, PDF_TWO_COLUMN_LEFT, PDF_TWO_COLUMN_RIGHT }; enum /* PDF first page */ { PDF_PAGE_1, PDF_TOC, PDF_CHAPTER_1 }; enum /* PDF transition effect */ { PDF_NONE, PDF_BOX_INWARD, PDF_BOX_OUTWARD, PDF_DISSOLVE, PDF_GLITTER_DOWN, PDF_GLITTER_DOWN_RIGHT, PDF_GLITTER_RIGHT, PDF_HORIZONTAL_BLINDS, PDF_HORIZONTAL_SWEEP_INWARD, PDF_HORIZONTAL_SWEEP_OUTWARD, PDF_VERTICAL_BLINDS, PDF_VERTICAL_SWEEP_INWARD, PDF_VERTICAL_SWEEP_OUTWARD, PDF_WIPE_DOWN, PDF_WIPE_LEFT, PDF_WIPE_RIGHT, PDF_WIPE_UP }; enum /* PDF document permissions */ { PDF_PERM_PRINT = 4, PDF_PERM_MODIFY = 8, PDF_PERM_COPY = 16, PDF_PERM_ANNOTATE = 32 }; /* * Globals... */ #ifdef _HTMLDOC_CXX_ # define VAR # define VALUE(x) =x # define NULL3 ={0,0,0} #else # define VAR extern # define VALUE(x) # define NULL3 #endif /* _HTML_DOC_CXX_ */ VAR int Verbosity VALUE(0); /* Verbosity */ VAR int OverflowErrors VALUE(0); /* Show errors on overflow */ VAR int StrictHTML VALUE(0); /* Do strict HTML checking */ VAR int CGIMode VALUE(0); /* Running as CGI? */ VAR int Errors VALUE(0); /* Number of errors */ VAR int Compression VALUE(1); /* Non-zero means compress PDFs */ VAR int TitlePage VALUE(1), /* Need a title page */ TocLevels VALUE(3), /* Number of table-of-contents levels */ TocLinks VALUE(1), /* Generate links */ TocNumbers VALUE(0), /* Generate heading numbers */ TocDocCount VALUE(0); /* Number of chapters */ VAR int OutputType VALUE(OUTPUT_BOOK); /* Output a "book", etc. */ VAR char OutputPath[1024] VALUE(""); /* Output directory/name */ VAR int OutputFiles VALUE(0), /* Generate multiple files? */ OutputColor VALUE(1); /* Output color images */ VAR int OutputJPEG VALUE(0); /* JPEG compress images? */ VAR int PDFVersion VALUE(13); /* Version of PDF to support */ VAR int PDFPageMode VALUE(PDF_OUTLINE), /* PageMode attribute */ PDFPageLayout VALUE(PDF_SINGLE), /* PageLayout attribute */ PDFFirstPage VALUE(PDF_CHAPTER_1), /* First page */ PDFEffect VALUE(PDF_NONE);/* Page transition effect */ VAR float PDFEffectDuration VALUE(1.0), /* Page effect duration */ PDFPageDuration VALUE(10.0); /* Page duration */ VAR int Encryption VALUE(0), /* Encrypt the PDF file? */ Permissions VALUE(-4); /* File permissions? */ VAR char OwnerPassword[33] VALUE(""), /* Owner password */ UserPassword[33] VALUE(""); /* User password */ VAR int EmbedFonts VALUE(1); /* Embed fonts? */ VAR int PSLevel VALUE(2), /* Language level (0 for PDF) */ PSCommands VALUE(0), /* Output PostScript commands? */ XRXComments VALUE(0); /* Output Xerox comments? */ VAR int PageWidth VALUE(595), /* Page width in points */ PageLength VALUE(792), /* Page length in points */ PageLeft VALUE(72), /* Left margin */ PageRight VALUE(36), /* Right margin */ PageTop VALUE(36), /* Top margin */ PageBottom VALUE(36), /* Bottom margin */ PagePrintWidth, /* Printable width */ PagePrintLength, /* Printable length */ PageDuplex VALUE(0), /* Adjust margins/pages for duplexing? */ Landscape VALUE(0), /* Landscape orientation? */ NumberUp VALUE(1); /* Number-up pages */ VAR typeface_t HeadFootType VALUE(TYPE_HELVETICA); /* Typeface for header & footer */ VAR style_t HeadFootStyle VALUE(STYLE_NORMAL); /* Type style */ VAR float HeadFootSize VALUE(11.0f); /* Size of header & footer */ VAR char *Header[3] NULL3, /* Header for regular pages */ *Header1[3] NULL3, /* Header for first pages */ *TocHeader[3] NULL3, /* Header for TOC pages */ *Footer[3] NULL3, /* Regular page footer */ *TocFooter[3] NULL3, /* Footer for TOC pages */ TocTitle[1024] VALUE("Table of Contents"); /* TOC title string */ VAR char TitleImage[1024] VALUE(""), /* Title page image */ LogoImage[1024] VALUE(""), /* Logo image */ BodyColor[255] VALUE(""), /* Body color */ BodyImage[1024] VALUE(""), /* Body image */ LinkColor[255] VALUE(""); /* Link color */ VAR char HFImage[MAX_HF_IMAGES][1024] /* Header/footer images */ # ifdef _HTMLDOC_CXX_ = { "" } # endif /* _HTMLDOC_CXX_ */ ; VAR int LinkStyle VALUE(1); /* 1 = underline, 0 = plain */ VAR int Links VALUE(1); /* 1 = generate links, 0 = no links */ VAR char Path[2048] VALUE(""), /* Search path */ Proxy[1024] VALUE(""); /* Proxy URL */ VAR const char *PDFModes[3] /* Mode strings */ # ifdef _HTMLDOC_CXX_ = { "document", "outline", "fullscreen" } # endif /* _HTMLDOC_CXX_ */ ; VAR const char *PDFLayouts[4] /* Layout strings */ # ifdef _HTMLDOC_CXX_ = { "single", "one", "twoleft", "tworight" } # endif /* _HTMLDOC_CXX_ */ ; VAR const char *PDFPages[3] /* First page strings */ # ifdef _HTMLDOC_CXX_ = { "p1", "toc", "c1" } # endif /* _HTMLDOC_CXX_ */ ; VAR const char *PDFEffects[17] /* Effect strings */ # ifdef _HTMLDOC_CXX_ = { "none", "bi", "bo", "d", "gd", "gdr", "gr", "hb", "hsi", "hso", "vb", "vsi", "vso", "wd", "wl", "wr", "wu" } # endif /* _HTMLDOC_CXX_ */ ; #ifdef HAVE_LIBFLTK VAR GUI *BookGUI VALUE(NULL); /* GUI for book files */ # ifdef WIN32 /* Editor for HTML files */ VAR char HTMLEditor[1024] VALUE("notepad.exe \"%s\""); # else VAR char HTMLEditor[1024] VALUE("nedit %s"); # endif /* WIN32 */ VAR int Tooltips VALUE(1); /* Show tooltips? */ VAR int ModernSkin VALUE(1); /* Show modern skins? */ #endif /* HAVE_LIBFLTK */ /* * Prototypes... */ extern int pspdf_export(tree_t *document, tree_t *toc); extern int html_export(tree_t *document, tree_t *toc); extern int htmlsep_export(tree_t *document, tree_t *toc); extern tree_t *toc_build(tree_t *tree); extern void get_color(const uchar *c, float *rgb, int defblack = 1); extern const char *get_fmt(char **formats); extern void get_format(const char *fmt, char **formats); extern int get_measurement(const char *s, float mul = 1.0f); extern void set_page_size(const char *size); extern void prefs_load(void); extern void prefs_save(void); extern void prefs_set_paths(void); extern char *format_number(int n, char f); #ifdef __cplusplus } #endif /* __cplusplus */ /* * End of "$Id: htmldoc.h 1421 2005-08-07 11:51:33Z mike $". */ htmldoc-1.8.27/htmldoc/gui.cxx0100664000212600000240000034340610414241024014666 0ustar mikeuser// // "$Id: gui.cxx 1481 2006-04-03 15:41:08Z mike $" // // GUI routines for HTMLDOC, an HTML document processing program. // // Copyright 1997-2006 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Easy Software Products and are protected by Federal // copyright law. Distribution and use rights are outlined in the file // "COPYING.txt" which should have been included with this file. If this // file is missing or damaged please contact Easy Software Products // at: // // Attn: ESP Licensing Information // Easy Software Products // 44141 Airport View Drive, Suite 204 // Hollywood, Maryland 20636-3142 USA // // Voice: (301) 373-9600 // EMail: info@easysw.com // WWW: http://www.easysw.com // // Contents: // // GUI() - Build the HTMLDOC GUI and load the indicated book // as necessary. // ~GUI() - Destroy the HTMLDOC GUI. // GUI::show() - Display the window. // GUI::progress() - Update the progress bar on the GUI. // GUI::title() - Set the title bar of the window. // GUI::loadSettings() - Load the current settings into the HTMLDOC globals. // GUI::newBook() - Clear out the current GUI settings for a new book. // GUI::loadBook() - Load a book file from disk. // GUI::parseOptions() - Parse options in a book file... // GUI::appleOpenCB() - Handle open file events from Finder. // GUI::saveBook() - Save a book to disk. // GUI::checkSave() - Check to see if a save is needed. // GUI::changeCB() - Mark the current book as changed. // GUI::docTypeCB() - Handle input on the document type buttons. // GUI::inputFilesCB() - Handle selections in the input files browser. // GUI::addFileCB() - Add a file to the input files list. // GUI::addURLCB() - Add a URL to the input files list. // GUI::editFilesCB() - Edit one or more files in the input files list. // GUI::deleteFileCB() - Delete one or more files from the input files list. // GUI::moveUpFileCB() - Move one or more files up in the input files list. // GUI::moveDownFileCB() - Move one or more files down in the input files list. // GUI::logoImageCB() - Change the logo image file. // GUI::titleImageCB() - Change the title image file. // GUI::outputTypeCB() - Set the output file type. // GUI::outputPathCB() - Set the output path. // GUI::outputFormatCB() - Set the output format. // GUI::jpegCB() - Handle JPEG changes. // GUI::sizeCB() - Change the page size based on the menu selection. // GUI::tocCB() - Handle Table-of-Contents changes. // GUI::pdfCB() - Handle PDF version changes. // GUI::effectCB() - Handle PDF effect changes. // GUI::psCB() - Handle PS language level changes. // GUI::htmlEditorCB() - Change the HTML editor. // GUI::saveOptionsCB() - Save preferences... // GUI::bodyColorCB() - Set the body color. // GUI::bodyImageCB() - Set the body image. // GUI::textColorCB() - Set the text color. // GUI::linkColorCB() - Set the link color. // GUI::helpCB() - Show on-line help... // GUI::newBookCB() - Create a new book. // GUI::openBookCB() - Open an existing book. // GUI::saveBookCB() - Save the current book to disk. // GUI::saveAsBookCB() - Save the current book to disk to a new file. // GUI::generateBookCB() - Generate the current book. // GUI::closeBookCB() - Close the current book. // GUI::errorCB() - Close the error window. // aboutCloseCB() - Close the about window. // GUI::showAboutCB() - Show the about window. // #include "htmldoc.h" #ifdef HAVE_LIBFLTK // // Include necessary headers. // # include # include # include # include # include # include # include # include # include "../desktop/htmldoc.xpm" # ifdef WIN32 # include # include # include "icons.h" # else # include # ifdef HAVE_LIBXPM # include # elif !defined(__APPLE__) # include "../desktop/htmldoc.xbm" # endif // HAVE_LIBXPM # endif // WIN32 // // Class globals... // const char *GUI::help_dir = DOCUMENTATION; #ifdef __APPLE__ char *apple_filename = NULL; #endif // __APPLE__ // // 'GUI()' - Build the HTMLDOC GUI and load the indicated book as necessary. // GUI::GUI(const char *filename) // Book file to load initially { Fl_Group *group; // Group Fl_Box *label; // Label box static Fl_Menu sizeMenu[] = // Menu items for page size button */ { {"A3", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"A4", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Legal", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Letter", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Tabloid", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Universal", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu tocMenu[] = // Menu items for TOC chooser { {"None", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"1 level", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"2 levels", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"3 levels", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"4 Levels", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu formatMenu[] = // Menu items for header/footer choosers { {"Blank", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Title", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Chapter Title", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Heading", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Logo", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"1,2,3,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"i,ii,iii,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"I,II,III,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"a,b,c,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"A,B,C,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Chapter Page", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"1/N,2/N,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"1/C,2/C,...", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Date", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Time", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Date + Time", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu nupMenu[] = // Menu items for number-up chooser { {"1", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"2", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"4", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"6", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"9", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"16", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu typefaceMenu[] = // Menu items for typeface choosers { {"Courier", 0, 0, 0, 0, 0, FL_COURIER, 14, 0}, {"Times", 0, 0, 0, 0, 0, FL_TIMES, 14, 0}, {"Helvetica", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Monospace", 0, 0, 0, 0, 0, FL_COURIER, 14, 0}, {"Serif", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Sans", 0, 0, 0, 0, 0, FL_TIMES, 14, 0}, {0} }; static Fl_Menu fontMenu[] = // Menu items for font choosers { {"Courier", 0, 0, 0, 0, 0, FL_COURIER, 14, 0}, {"Courier-Bold", 0, 0, 0, 0, 0, FL_COURIER_BOLD, 14, 0}, {"Courier-Oblique", 0, 0, 0, 0, 0, FL_COURIER_ITALIC, 14, 0}, {"Courier-BoldOblique", 0, 0, 0, 0, 0, FL_COURIER_BOLD_ITALIC, 14, 0}, {"Times-Roman", 0, 0, 0, 0, 0, FL_TIMES, 14, 0}, {"Times-Bold", 0, 0, 0, 0, 0, FL_TIMES_BOLD, 14, 0}, {"Times-Italic", 0, 0, 0, 0, 0, FL_TIMES_ITALIC, 14, 0}, {"Times-BoldItalic", 0, 0, 0, 0, 0, FL_TIMES_BOLD_ITALIC, 14, 0}, {"Helvetica", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Helvetica-Bold", 0, 0, 0, 0, 0, FL_HELVETICA_BOLD, 14, 0}, {"Helvetica-Oblique", 0, 0, 0, 0, 0, FL_HELVETICA_ITALIC, 14, 0}, {"Helvetica-BoldOblique", 0, 0, 0, 0, 0, FL_HELVETICA_BOLD_ITALIC, 14, 0}, {"Monospace", 0, 0, 0, 0, 0, FL_COURIER, 14, 0}, {"Monospace-Bold", 0, 0, 0, 0, 0, FL_COURIER_BOLD, 14, 0}, {"Monospace-Oblique", 0, 0, 0, 0, 0, FL_COURIER_ITALIC, 14, 0}, {"Monospace-BoldOblique", 0, 0, 0, 0, 0, FL_COURIER_BOLD_ITALIC, 14, 0}, {"Serif-Roman", 0, 0, 0, 0, 0, FL_TIMES, 14, 0}, {"Serif-Bold", 0, 0, 0, 0, 0, FL_TIMES_BOLD, 14, 0}, {"Serif-Italic", 0, 0, 0, 0, 0, FL_TIMES_ITALIC, 14, 0}, {"Serif-BoldItalic", 0, 0, 0, 0, 0, FL_TIMES_BOLD_ITALIC, 14, 0}, {"Sans", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Sans-Bold", 0, 0, 0, 0, 0, FL_HELVETICA_BOLD, 14, 0}, {"Sans-Oblique", 0, 0, 0, 0, 0, FL_HELVETICA_ITALIC, 14, 0}, {"Sans-BoldOblique", 0, 0, 0, 0, 0, FL_HELVETICA_BOLD_ITALIC, 14, 0}, {0} }; static Fl_Menu charsetMenu[] = // Menu items for charset chooser { {"cp-874", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1250", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1251", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1252", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1253", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1254", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1255", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1256", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1257", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"cp-1258", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-1", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-2", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-3", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-4", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-5", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-6", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-7", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-8", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-9", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-14", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"iso-8859-15", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"koi8-r", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu modeMenu[] = // Menu items for mode chooser { {"Document", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Outline", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Full-Screen", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu layoutMenu[] = // Menu items for layout chooser { {"Single", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"One Column", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Two Column Left", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Two Column Right", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu firstMenu[] = // Menu items for first chooser { {"Page 1", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"TOC", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Chapter 1", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; static Fl_Menu effectMenu[] = // Menu items for effect chooser { {"None", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Box Inward", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Box Outward", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Dissolve", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Glitter Down", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Glitter Down+Right", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Glitter Right", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Horizontal Blinds", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Horizontal Sweep Inward", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Horizontal Sweep Outward", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Vertical Blinds", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Vertical Sweep Inward", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Vertical Sweep Outward ", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Wipe Down", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Wipe Left", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Wipe Right", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {"Wipe Up", 0, 0, 0, 0, 0, FL_HELVETICA, 14, 0}, {0} }; #ifdef __APPLE__ // Support opening of books via the finder... fl_open_callback(appleOpenCB); #endif // __APPLE__ // Enable/disable tooltips... Fl_Tooltip::enable(Tooltips); // // Create a dialog window... // window = new Fl_Double_Window(505, 370, "HTMLDOC " SVERSION); window->callback((Fl_Callback *)closeBookCB, this); controls = new Fl_Group(0, 0, 505, 330); tabs = new Fl_Tabs(10, 10, 485, 285); // // Input tab... // inputTab = new Fl_Group(10, 35, 485, 260, "Input"); group = new Fl_Group(140, 45, 250, 20, "Document Type: "); group->align(FL_ALIGN_LEFT); typeBook = new Fl_Round_Button(140, 45, 60, 20, "Book"); typeBook->type(FL_RADIO_BUTTON); typeBook->setonly(); typeBook->callback((Fl_Callback *)docTypeCB, this); typeBook->tooltip("Convert chapters into a book."); typeContinuous = new Fl_Round_Button(200, 45, 100, 20, "Continuous"); typeContinuous->type(FL_RADIO_BUTTON); typeContinuous->callback((Fl_Callback *)docTypeCB, this); typeContinuous->tooltip("Convert web pages without page breaks."); typeWebPage = new Fl_Round_Button(300, 45, 90, 20, "Web Page"); typeWebPage->type(FL_RADIO_BUTTON); typeWebPage->callback((Fl_Callback *)docTypeCB, this); typeWebPage->tooltip("Convert web pages with page breaks."); group->end(); group = new Fl_Group(140, 70, 250, 20, "Input Files: "); group->align(FL_ALIGN_LEFT); group->end(); inputFiles = new Fl_File_Browser(140, 70, 250, 150); inputFiles->iconsize(20); inputFiles->type(FL_MULTI_BROWSER); inputFiles->callback((Fl_Callback *)inputFilesCB, this); inputFiles->when(FL_WHEN_RELEASE | FL_WHEN_NOT_CHANGED); inputFiles->tooltip("This is the list of HTML files and URLs that will be converted."); addFile = new Fl_Button(390, 70, 95, 25, "Add Files..."); addFile->callback((Fl_Callback *)addFileCB, this); addFile->tooltip("Add HTML files to the list."); addURL = new Fl_Button(390, 95, 95, 25, "Add URL..."); addURL->callback((Fl_Callback *)addURLCB, this); addURL->tooltip("Add a URL to the list."); editFile = new Fl_Button(390, 120, 95, 25, "Edit Files..."); editFile->deactivate(); editFile->callback((Fl_Callback *)editFilesCB, this); editFile->tooltip("Edit HTML files in the list."); deleteFile = new Fl_Button(390, 145, 95, 25, "Delete Files"); deleteFile->deactivate(); deleteFile->callback((Fl_Callback *)deleteFilesCB, this); deleteFile->tooltip("Remove HTML files and URLs from the list."); moveUpFile = new Fl_Button(390, 170, 95, 25, "Move Up"); moveUpFile->deactivate(); moveUpFile->callback((Fl_Callback *)moveUpFilesCB, this); moveUpFile->tooltip("Move HTML files and URLs up in the list."); moveDownFile = new Fl_Button(390, 195, 95, 25, "Move Down"); moveDownFile->deactivate(); moveDownFile->callback((Fl_Callback *)moveDownFilesCB, this); moveDownFile->tooltip("Move HTML files and URLs down in the list."); logoImage = new Fl_Input(140, 230, 250, 25, "Logo Image: "); logoImage->when(FL_WHEN_CHANGED); logoImage->callback((Fl_Callback *)logoImageCB, this); logoImage->tooltip("The logo image for the navigation bar and header or footer."); logoBrowse = new Fl_Button(390, 230, 95, 25, "Browse..."); logoBrowse->callback((Fl_Callback *)logoImageCB, this); logoBrowse->tooltip("Choose a logo image file."); titleImage = new Fl_Input(140, 260, 250, 25, "Title File/Image: "); titleImage->when(FL_WHEN_CHANGED); titleImage->callback((Fl_Callback *)titleImageCB, this); titleImage->tooltip("The title image or HTML file for the title page."); titleBrowse = new Fl_Button(390, 260, 95, 25, "Browse..."); titleBrowse->callback((Fl_Callback *)titleImageCB, this); titleBrowse->tooltip("Choose a title file."); inputTab->end(); inputTab->resizable(inputFiles); // // Output tab... // outputTab = new Fl_Group(10, 35, 485, 260, "Output"); outputTab->hide(); group = new Fl_Group(140, 45, 265, 20, "Output To: "); group->align(FL_ALIGN_LEFT); outputFile = new Fl_Round_Button(140, 45, 50, 20, "File"); outputFile->type(FL_RADIO_BUTTON); outputFile->setonly(); outputFile->callback((Fl_Callback *)outputTypeCB, this); outputFile->tooltip("Generate a single output file."); outputDirectory = new Fl_Round_Button(190, 45, 105, 20, "Directory"); outputDirectory->type(FL_RADIO_BUTTON); outputDirectory->callback((Fl_Callback *)outputTypeCB, this); outputDirectory->tooltip("Generate multiple output files in a directory."); group->end(); outputPath = new Fl_Input(140, 70, 250, 25, "Output Path: "); outputPath->when(FL_WHEN_CHANGED); outputPath->callback((Fl_Callback *)outputPathCB, this); outputPath->tooltip("The name of the output file or directory."); outputBrowse = new Fl_Button(390, 70, 95, 25, "Browse..."); outputBrowse->callback((Fl_Callback *)outputPathCB, this); outputBrowse->tooltip("Choose an output file."); group = new Fl_Group(140, 100, 255, 20, "Output Format: "); group->align(FL_ALIGN_LEFT); typeHTML = new Fl_Round_Button(140, 100, 65, 20, "HTML"); typeHTML->type(FL_RADIO_BUTTON); typeHTML->setonly(); typeHTML->callback((Fl_Callback *)outputFormatCB, this); typeHTML->tooltip("Generate HTML file(s)."); typeHTMLSep = new Fl_Round_Button(205, 100, 135, 20, "Separated HTML"); typeHTMLSep->type(FL_RADIO_BUTTON); typeHTMLSep->callback((Fl_Callback *)outputFormatCB, this); typeHTMLSep->tooltip("Generate separate HTML files for each TOC heading."); typePS = new Fl_Round_Button(340, 100, 45, 20, "PS"); typePS->type(FL_RADIO_BUTTON); typePS->callback((Fl_Callback *)outputFormatCB, this); typePS->tooltip("Generate Adobe PostScript(r) file(s)."); typePDF = new Fl_Round_Button(385, 100, 55, 20, "PDF"); typePDF->type(FL_RADIO_BUTTON); typePDF->callback((Fl_Callback *)outputFormatCB, this); typePDF->tooltip("Generate an Adobe Acrobat file."); group->end(); group = new Fl_Group(140, 125, 265, 20, "Output Options: "); group->align(FL_ALIGN_LEFT); group->end(); grayscale = new Fl_Check_Button(140, 125, 90, 20, "Grayscale"); grayscale->callback((Fl_Callback *)changeCB, this); grayscale->tooltip("Check to produce grayscale output."); titlePage = new Fl_Check_Button(230, 125, 90, 20, "Title Page"); titlePage->callback((Fl_Callback *)changeCB, this); titlePage->tooltip("Check to generate a title page."); jpegCompress = new Fl_Check_Button(320, 125, 140, 20, "JPEG Big Images"); jpegCompress->callback((Fl_Callback *)jpegCB, this); jpegCompress->tooltip("Check to reduce the size of large images using the JPEG algorithm."); compGroup = new Fl_Group(140, 150, 345, 40, "Compression: \n "); compGroup->align(FL_ALIGN_LEFT); compression = new Fl_Slider(140, 150, 345, 20); compression->type(FL_HOR_NICE_SLIDER); compression->minimum(0.0); compression->maximum(9.0); compression->value(1.0); compression->step(1.0); compression->callback((Fl_Callback *)changeCB, this); compression->tooltip("Reduce the size of output files."); label = new Fl_Box(140, 170, 30, 10, "None"); label->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); label->labelsize(10); label = new Fl_Box(170, 170, 30, 10, "Fast"); label->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); label->labelsize(10); label = new Fl_Box(455, 170, 30, 10, "Best"); label->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); label->labelsize(10); compGroup->end(); jpegGroup = new Fl_Group(140, 185, 345, 40, "JPEG Quality: \n "); jpegGroup->align(FL_ALIGN_LEFT); jpegQuality = new Fl_Value_Slider(140, 185, 345, 20); jpegQuality->type(FL_HOR_NICE_SLIDER); jpegQuality->minimum(50.0); jpegQuality->maximum(100.0); jpegQuality->value(90.0); jpegQuality->step(1.0); jpegQuality->callback((Fl_Callback *)changeCB, this); jpegQuality->tooltip("Set the quality of images using JPEG compression.\n" "(lower quality produces smaller output)"); label = new Fl_Box(175, 205, 40, 10, "Good"); label->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); label->labelsize(10); label = new Fl_Box(445, 205, 40, 10, "Best"); label->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); label->labelsize(10); jpegGroup->end(); outputTab->end(); // // Page tab... // pageTab = new Fl_Group(10, 35, 485, 260, "Page"); pageTab->hide(); pageSize = new Fl_Input(145, 45, 100, 25, "Page Size: "); pageSize->when(FL_WHEN_CHANGED); pageSize->callback((Fl_Callback *)changeCB, this); pageSize->tooltip("Enter the page size."); pageSizeMenu = new Fl_Menu_Button(245, 45, 25, 25, ""); pageSizeMenu->menu(sizeMenu); pageSizeMenu->callback((Fl_Callback *)sizeCB, this); pageSizeMenu->tooltip("Click to choose a standard size."); pageDuplex = new Fl_Check_Button(275, 48, 70, 20, "2-Sided"); pageDuplex->callback((Fl_Callback *)changeCB, this); pageDuplex->tooltip("Produce output suitable for double-sided printing."); landscape = new Fl_Check_Button(350, 48, 90, 20, "Landscape"); landscape->callback((Fl_Callback *)changeCB, this); landscape->tooltip("Check to rotate the output to landscape orientation."); pageTop = new Fl_Input(230, 75, 60, 25, "Top"); pageTop->when(FL_WHEN_CHANGED); pageTop->callback((Fl_Callback *)changeCB, this); pageTop->tooltip("Enter the top margin."); pageLeft = new Fl_Input(195, 105, 60, 25, "Left"); pageLeft->when(FL_WHEN_CHANGED); pageLeft->callback((Fl_Callback *)changeCB, this); pageLeft->tooltip("Enter the left margin."); pageRight = new Fl_Input(260, 105, 60, 25, "Right"); pageRight->when(FL_WHEN_CHANGED); pageRight->align(FL_ALIGN_RIGHT); pageRight->callback((Fl_Callback *)changeCB, this); pageRight->tooltip("Enter the right margin."); pageBottom = new Fl_Input(230, 135, 60, 25, "Bottom"); pageBottom->when(FL_WHEN_CHANGED); pageBottom->callback((Fl_Callback *)changeCB, this); pageBottom->tooltip("Enter the bottom margin."); pageHeaderLeft = new Fl_Choice(145, 165, 110, 25, "Header: "); pageHeaderLeft->menu(formatMenu); pageHeaderLeft->callback((Fl_Callback *)changeCB, this); pageHeaderLeft->tooltip("Choose the left header."); pageHeaderCenter = new Fl_Choice(260, 165, 110, 25); pageHeaderCenter->menu(formatMenu); pageHeaderCenter->callback((Fl_Callback *)changeCB, this); pageHeaderCenter->tooltip("Choose the center header."); pageHeaderRight = new Fl_Choice(375, 165, 110, 25); pageHeaderRight->menu(formatMenu); pageHeaderRight->callback((Fl_Callback *)changeCB, this); pageHeaderRight->tooltip("Choose the right header."); pageHeader1Left = new Fl_Choice(145, 195, 110, 25, "Header (1st Page): "); pageHeader1Left->menu(formatMenu); pageHeader1Left->callback((Fl_Callback *)changeCB, this); pageHeader1Left->tooltip("Choose the left header1."); pageHeader1Center = new Fl_Choice(260, 195, 110, 25); pageHeader1Center->menu(formatMenu); pageHeader1Center->callback((Fl_Callback *)changeCB, this); pageHeader1Center->tooltip("Choose the center header1."); pageHeader1Right = new Fl_Choice(375, 195, 110, 25); pageHeader1Right->menu(formatMenu); pageHeader1Right->callback((Fl_Callback *)changeCB, this); pageHeader1Right->tooltip("Choose the right header1."); pageFooterLeft = new Fl_Choice(145, 225, 110, 25, "Footer: "); pageFooterLeft->menu(formatMenu); pageFooterLeft->callback((Fl_Callback *)changeCB, this); pageFooterLeft->tooltip("Choose the left footer."); pageFooterCenter = new Fl_Choice(260, 225, 110, 25); pageFooterCenter->menu(formatMenu); pageFooterCenter->callback((Fl_Callback *)changeCB, this); pageFooterCenter->tooltip("Choose the center header."); pageFooterRight = new Fl_Choice(375, 225, 110, 25); pageFooterRight->menu(formatMenu); pageFooterRight->callback((Fl_Callback *)changeCB, this); pageFooterRight->tooltip("Choose the right header."); numberUp = new Fl_Choice(145, 255, 50, 25, "Number Up: "); numberUp->menu(nupMenu); numberUp->callback((Fl_Callback *)changeCB, this); numberUp->tooltip("Set the number of pages on each sheet."); pageTab->end(); // // TOC tab... // tocTab = new Fl_Group(10, 35, 485, 260, "TOC"); tocTab->hide(); tocLevels = new Fl_Choice(140, 45, 100, 25, "Table of Contents: "); tocLevels->menu(tocMenu); tocLevels->callback((Fl_Callback *)tocCB, this); tocLevels->tooltip("Choose the number of table of contents levels."); numberedToc = new Fl_Check_Button(245, 47, 160, 20, "Numbered Headings"); numberedToc->callback((Fl_Callback *)changeCB, this); numberedToc->tooltip("Check to number all of the headings in the document."); tocHeader = new Fl_Group(140, 75, 345, 25, "Header: "); tocHeader->align(FL_ALIGN_LEFT); tocHeaderLeft = new Fl_Choice(140, 75, 110, 25); tocHeaderLeft->menu(formatMenu); tocHeaderLeft->callback((Fl_Callback *)changeCB, this); tocHeaderLeft->tooltip("Choose the left header."); tocHeaderCenter = new Fl_Choice(255, 75, 110, 25); tocHeaderCenter->menu(formatMenu); tocHeaderCenter->callback((Fl_Callback *)changeCB, this); tocHeaderCenter->tooltip("Choose the center header."); tocHeaderRight = new Fl_Choice(370, 75, 110, 25); tocHeaderRight->menu(formatMenu); tocHeaderRight->callback((Fl_Callback *)changeCB, this); tocHeaderRight->tooltip("Choose the right header."); tocHeader->end(); tocFooter = new Fl_Group(140, 105, 345, 25, "Footer: "); tocFooter->align(FL_ALIGN_LEFT); tocFooterLeft = new Fl_Choice(140, 105, 110, 25, "Footer: "); tocFooterLeft->menu(formatMenu); tocFooterLeft->callback((Fl_Callback *)changeCB, this); tocFooterLeft->tooltip("Choose the left footer."); tocFooterCenter = new Fl_Choice(255, 105, 110, 25); tocFooterCenter->menu(formatMenu); tocFooterCenter->callback((Fl_Callback *)changeCB, this); tocFooterCenter->tooltip("Choose the center footer."); tocFooterRight = new Fl_Choice(370, 105, 110, 25); tocFooterRight->menu(formatMenu); tocFooterRight->callback((Fl_Callback *)changeCB, this); tocFooterRight->tooltip("Choose the right footer."); tocFooter->end(); tocTitle = new Fl_Input(140, 135, 345, 25, "Title: "); tocTitle->when(FL_WHEN_CHANGED); tocTitle->callback((Fl_Callback *)changeCB, this); tocTitle->tooltip("Enter the title of the table of contents."); tocTab->end(); // // Colors tab... // colorsTab = new Fl_Group(10, 35, 485, 260, "Colors"); colorsTab->hide(); bodyColor = new Fl_Input(140, 45, 100, 25, "Body Color: "); bodyColor->when(FL_WHEN_CHANGED); bodyColor->callback((Fl_Callback *)bodyColorCB, this); bodyColor->tooltip("Enter the HTML color for the body (background)."); bodyLookup = new Fl_Button(240, 45, 80, 25, "Lookup..."); bodyLookup->callback((Fl_Callback *)bodyColorCB, this); bodyLookup->tooltip("Click to choose the HTML color for the body (background)."); bodyImage = new Fl_Input(140, 75, 250, 25, "Body Image: "); bodyImage->when(FL_WHEN_CHANGED); bodyImage->callback((Fl_Callback *)bodyImageCB, this); bodyImage->tooltip("Enter the image file for the body (background)."); bodyBrowse = new Fl_Button(390, 75, 95, 25, "Browse..."); bodyBrowse->callback((Fl_Callback *)bodyImageCB, this); bodyBrowse->tooltip("Click to choose the image file for the body (background)."); textColor = new Fl_Input(140, 105, 100, 25, "Text Color: "); textColor->when(FL_WHEN_CHANGED); textColor->callback((Fl_Callback *)textColorCB, this); textColor->tooltip("Enter the HTML color for the text."); textLookup = new Fl_Button(240, 105, 80, 25, "Lookup..."); textLookup->callback((Fl_Callback *)textColorCB, this); textLookup->tooltip("Click to choose the HTML color for the text."); linkColor = new Fl_Input(140, 135, 100, 25, "Link Color: "); linkColor->when(FL_WHEN_CHANGED); linkColor->callback((Fl_Callback *)linkColorCB, this); linkColor->tooltip("Enter the HTML color for links."); linkLookup = new Fl_Button(240, 135, 80, 25, "Lookup..."); linkLookup->callback((Fl_Callback *)linkColorCB, this); linkLookup->tooltip("Click to choose the HTML color for links."); linkStyle = new Fl_Choice(140, 165, 100, 25, "Link Style: "); linkStyle->add("Plain"); linkStyle->add("Underline"); linkStyle->callback((Fl_Callback *)changeCB, this); linkStyle->tooltip("Choose the appearance of links."); colorsTab->end(); // // Fonts tab... // fontsTab = new Fl_Group(10, 35, 485, 260, "Fonts"); fontsTab->hide(); fontBaseSize = new Fl_Counter(200, 45, 150, 25, "Base Font Size: "); fontBaseSize->callback((Fl_Callback *)changeCB, this); fontBaseSize->minimum(4.0); fontBaseSize->maximum(24.0); fontBaseSize->step(0.1); fontBaseSize->value(11.0); fontBaseSize->align(FL_ALIGN_LEFT); fontBaseSize->tooltip("Set the default size of text."); fontSpacing = new Fl_Counter(200, 75, 150, 25, "Line Spacing: "); fontSpacing->callback((Fl_Callback *)changeCB, this); fontSpacing->minimum(1.0); fontSpacing->maximum(3.0); fontSpacing->step(0.1); fontSpacing->value(1.2); fontSpacing->align(FL_ALIGN_LEFT); fontSpacing->tooltip("Set the spacing between lines of text."); bodyFont = new Fl_Choice(200, 105, 100, 25, "Body Typeface: "); bodyFont->menu(typefaceMenu); bodyFont->callback((Fl_Callback *)changeCB, this); bodyFont->tooltip("Choose the default typeface (font) of text."); headingFont = new Fl_Choice(200, 135, 100, 25, "Heading Typeface: "); headingFont->menu(typefaceMenu); headingFont->callback((Fl_Callback *)changeCB, this); headingFont->tooltip("Choose the default typeface (font) of headings."); headFootSize = new Fl_Counter(200, 165, 150, 25, "Header/Footer Size: "); headFootSize->callback((Fl_Callback *)changeCB, this); headFootSize->minimum(4.0); headFootSize->maximum(24.0); headFootSize->step(0.1); headFootSize->value(11.0); headFootSize->align(FL_ALIGN_LEFT); headFootSize->tooltip("Set the size of header and footer text."); headFootFont = new Fl_Choice(200, 195, 220, 25, "Header/Footer Font: "); headFootFont->menu(fontMenu); headFootFont->callback((Fl_Callback *)changeCB, this); headFootFont->tooltip("Choose the font for header and footer text."); charset = new Fl_Choice(200, 225, 110, 25, "Character Set: "); charset->menu(charsetMenu); charset->callback((Fl_Callback *)changeCB, this); charset->tooltip("Choose the encoding of text."); group = new Fl_Group(200, 255, 285, 25, "Options: "); group->align(FL_ALIGN_LEFT); embedFonts = new Fl_Check_Button(200, 255, 110, 25, "Embed Fonts"); embedFonts->callback((Fl_Callback *)changeCB, this); embedFonts->tooltip("Check to embed fonts in the output file."); group->end(); fontsTab->end(); // // PostScript tab... // psTab = new Fl_Group(10, 35, 485, 260, "PS"); psTab->hide(); psLevel = new Fl_Group(140, 45, 310, 20, "PostScript: "); psLevel->align(FL_ALIGN_LEFT); ps1 = new Fl_Round_Button(140, 45, 70, 20, "Level 1"); ps1->type(FL_RADIO_BUTTON); ps1->callback((Fl_Callback *)psCB, this); ps1->tooltip("Produce PostScript Level 1 output."); ps2 = new Fl_Round_Button(210, 45, 70, 20, "Level 2"); ps2->type(FL_RADIO_BUTTON); ps2->callback((Fl_Callback *)psCB, this); ps2->tooltip("Produce PostScript Level 2 output.\n" "(most common)"); ps3 = new Fl_Round_Button(280, 45, 70, 20, "Level 3"); ps3->type(FL_RADIO_BUTTON); ps3->callback((Fl_Callback *)psCB, this); ps3->tooltip("Produce PostScript Level 3 output."); psLevel->end(); psCommands = new Fl_Check_Button(140, 70, 310, 20, "Send Printer Commands"); psCommands->callback((Fl_Callback *)changeCB, this); psCommands->tooltip("Include PostScript commands to set the media size, etc."); xrxComments = new Fl_Check_Button(140, 95, 310, 20, "Include Xerox Job Comments"); xrxComments->callback((Fl_Callback *)changeCB, this); xrxComments->tooltip("Include Xerox job comments to set the media size, etc."); psTab->end(); // // PDF tab... // pdfTab = new Fl_Group(10, 35, 485, 260, "PDF"); pdfTab->hide(); pdfVersion = new Fl_Group(140, 45, 310, 40, "PDF Version: \n "); pdfVersion->align(FL_ALIGN_LEFT); pdf11 = new Fl_Round_Button(140, 45, 125, 20, "1.1 (Acrobat 2.x)"); pdf11->type(FL_RADIO_BUTTON); pdf11->callback((Fl_Callback *)pdfCB, this); pdf11->tooltip("Produce PDF files for Acrobat 2.x."); pdf12 = new Fl_Round_Button(270, 45, 125, 20, "1.2 (Acrobat 3.0)"); pdf12->type(FL_RADIO_BUTTON); pdf12->callback((Fl_Callback *)pdfCB, this); pdf12->tooltip("Produce PDF files for Acrobat 3.0."); pdf13 = new Fl_Round_Button(140, 65, 125, 20, "1.3 (Acrobat 4.0)"); pdf13->type(FL_RADIO_BUTTON); pdf13->callback((Fl_Callback *)pdfCB, this); pdf13->tooltip("Produce PDF files for Acrobat 4.0."); pdf14 = new Fl_Round_Button(270, 65, 125, 20, "1.4 (Acrobat 5.0)"); pdf14->type(FL_RADIO_BUTTON); pdf14->callback((Fl_Callback *)pdfCB, this); pdf14->tooltip("Produce PDF files for Acrobat 5.0."); pdfVersion->end(); pageMode = new Fl_Choice(140, 90, 120, 25, "Page Mode: "); pageMode->menu(modeMenu); pageMode->callback((Fl_Callback *)changeCB, this); pageMode->tooltip("Choose the initial viewing mode for the file."); pageLayout = new Fl_Choice(140, 120, 150, 25, "Page Layout: "); pageLayout->menu(layoutMenu); pageLayout->callback((Fl_Callback *)changeCB, this); pageLayout->tooltip("Choose the initial page layout for the file."); firstPage = new Fl_Choice(140, 150, 100, 25, "First Page: "); firstPage->menu(firstMenu); firstPage->callback((Fl_Callback *)changeCB, this); firstPage->tooltip("Choose the initial page that will be shown."); pageEffect = new Fl_Choice(140, 180, 210, 25, "Page Effect: "); pageEffect->menu(effectMenu); pageEffect->callback((Fl_Callback *)effectCB, this); pageEffect->tooltip("Choose the page transition effect."); pageDuration = new Fl_Value_Slider(140, 210, 345, 20, "Page Duration: "); pageDuration->align(FL_ALIGN_LEFT); pageDuration->type(FL_HOR_NICE_SLIDER); pageDuration->minimum(1.0); pageDuration->maximum(60.0); pageDuration->value(10.0); pageDuration->step(1.0); pageDuration->callback((Fl_Callback *)changeCB, this); pageDuration->tooltip("Set the amount of time each page is visible."); effectDuration = new Fl_Value_Slider(140, 235, 345, 20, "Effect Duration: "); effectDuration->align(FL_ALIGN_LEFT); effectDuration->type(FL_HOR_NICE_SLIDER); effectDuration->minimum(0.5); effectDuration->maximum(5.0); effectDuration->value(1.0); effectDuration->step(0.1); effectDuration->callback((Fl_Callback *)changeCB, this); effectDuration->tooltip("Set the amount of time to use for the page transition effect."); group = new Fl_Group(140, 260, 350, 25, "Options: "); group->align(FL_ALIGN_LEFT); links = new Fl_Check_Button(140, 260, 110, 25, "Include Links"); links->callback((Fl_Callback *)changeCB, this); links->tooltip("Check to include hyperlinks in the output file."); group->end(); pdfTab->end(); // // Security tab... // securityTab = new Fl_Group(10, 35, 485, 260, "Security"); securityTab->hide(); encryption = new Fl_Group(140, 45, 310, 20, "Encryption: "); encryption->align(FL_ALIGN_LEFT); encryptionNo = new Fl_Round_Button(140, 45, 40, 20, "No"); encryptionNo->type(FL_RADIO_BUTTON); encryptionNo->set(); encryptionNo->callback((Fl_Callback *)encryptionCB, this); encryptionNo->tooltip("Select to disable encryption (scrambling) of the output file."); encryptionYes = new Fl_Round_Button(180, 45, 45, 20, "Yes"); encryptionYes->type(FL_RADIO_BUTTON); encryptionYes->callback((Fl_Callback *)encryptionCB, this); encryptionYes->tooltip("Select to enable encryption (scrambling) of the output file.\n" "(128-bit encryption for Acrobat 5.0, 40-bit for older versions.)"); encryption->end(); permissions = new Fl_Group(140, 70, 310, 40, "Permissions: "); permissions->align(FL_ALIGN_LEFT); permPrint = new Fl_Check_Button(140, 70, 80, 20, "Print"); permPrint->tooltip("Check to allow the user to print the output file."); permModify = new Fl_Check_Button(220, 70, 80, 20, "Modify"); permModify->tooltip("Check to allow the user to modify the output file."); permCopy = new Fl_Check_Button(140, 90, 80, 20, "Copy"); permCopy->tooltip("Check to allow the user to copy text and images from the output file."); permAnnotate = new Fl_Check_Button(220, 90, 80, 20, "Annotate"); permAnnotate->tooltip("Check to allow the user to annotate the output file."); permissions->end(); ownerPassword = new Fl_Secret_Input(140, 115, 150, 25, "Owner Password: "); ownerPassword->maximum_size(32); ownerPassword->tooltip("Enter the password required to modify the file.\n" "(leave blank for a random password)"); userPassword = new Fl_Secret_Input(140, 145, 150, 25, "User Password: "); userPassword->maximum_size(32); userPassword->tooltip("Enter the password required to open the file.\n" "(leave blank for no password)"); securityTab->end(); // // Options tab... // optionsTab = new Fl_Group(10, 35, 485, 260, "Options"); optionsTab->hide(); htmlEditor = new Fl_Input(140, 45, 250, 25, "HTML Editor: "); htmlEditor->value(HTMLEditor); htmlEditor->when(FL_WHEN_CHANGED); htmlEditor->callback((Fl_Callback *)htmlEditorCB, this); htmlEditor->tooltip("Enter the command used to edit HTML files.\n" "(use \"%s\" to insert the filename)"); htmlBrowse = new Fl_Button(390, 45, 95, 25, "Browse..."); htmlBrowse->callback((Fl_Callback *)htmlEditorCB, this); htmlBrowse->tooltip("Click to choose the HTML editor."); browserWidth = new Fl_Value_Slider(140, 75, 345, 20, "Browser Width: "); browserWidth->align(FL_ALIGN_LEFT); browserWidth->type(FL_HOR_NICE_SLIDER); browserWidth->minimum(400.0); browserWidth->maximum(1200.0); browserWidth->value(_htmlBrowserWidth); browserWidth->step(5.0); browserWidth->callback((Fl_Callback *)changeCB, this); browserWidth->tooltip("Set the target browser width in pixels.\n" "(this determines the page scaling of images)"); path = new Fl_Input(140, 100, 345, 25, "Search Path: "); path->value(Path); path->maximum_size(sizeof(Path) - 1); path->when(FL_WHEN_CHANGED); path->callback((Fl_Callback *)changeCB, this); path->tooltip("Enter one or more directories or URLs to search for files.\n" "(separate each directory or URL with the ';' character)"); proxy = new Fl_Input(140, 130, 345, 25, "HTTP Proxy URL: "); proxy->value(Proxy); proxy->maximum_size(sizeof(Proxy) - 1); proxy->when(FL_WHEN_CHANGED); proxy->callback((Fl_Callback *)changeCB, this); proxy->tooltip("Enter a URL for your HTTP proxy server.\n" "(http://server:port)"); group = new Fl_Group(140, 160, 350, 80, "GUI Options: \n\n\n\n\n"); group->align(FL_ALIGN_LEFT); tooltips = new Fl_Check_Button(140, 160, 75, 20, "Tooltips"); tooltips->callback((Fl_Callback *)tooltipCB, this); tooltips->value(Tooltips); tooltips->tooltip("Check to show tooltips."); modern_skin = new Fl_Check_Button(140, 180, 110, 20, "Modern Look"); modern_skin->callback((Fl_Callback *)skinCB, this); modern_skin->value(ModernSkin); modern_skin->tooltip("Check to show the more modern look-n-feel."); strict_html = new Fl_Check_Button(140, 200, 100, 20, "Strict HTML"); strict_html->value(StrictHTML); strict_html->tooltip("Check to require strict HTML conformance."); overflow_errors = new Fl_Check_Button(140, 220, 135, 20, "Error on Overflow"); overflow_errors->value(OverflowErrors); overflow_errors->tooltip("Check to display an error when the HTML content\n" "is too large to fit on the page."); group->end(); showAbout = new Fl_Button(75, 260, 130, 25, "About HTMLDOC"); showAbout->callback((Fl_Callback *)showAboutCB); showAbout->tooltip("Click to show information about HTMLDOC."); showLicense = new Fl_Button(215, 260, 70, 25, "License"); showLicense->callback((Fl_Callback *)showLicenseCB); showLicense->tooltip("Click to show the software license."); saveOptions = new Fl_Button(295, 260, 190, 25, "Save Options and Defaults"); saveOptions->callback((Fl_Callback *)saveOptionsCB, this); saveOptions->tooltip("Click to save the current options."); optionsTab->end(); tabs->end(); // // Button bar... // bookHelp = new Fl_Button(10, 305, 55, 25, "Help"); bookHelp->shortcut(FL_F + 1); bookHelp->callback((Fl_Callback *)helpCB, this); bookNew = new Fl_Button(70, 305, 50, 25, "New"); bookNew->shortcut(FL_CTRL | 'n'); bookNew->callback((Fl_Callback *)newBookCB, this); bookOpen = new Fl_Button(125, 305, 65, 25, "Open..."); bookOpen->shortcut(FL_CTRL | 'o'); bookOpen->callback((Fl_Callback *)openBookCB, this); bookSave = new Fl_Button(195, 305, 55, 25, "Save"); bookSave->shortcut(FL_CTRL | 's'); bookSave->callback((Fl_Callback *)saveBookCB, this); bookSaveAs = new Fl_Button(255, 305, 85, 25, "Save As..."); bookSaveAs->shortcut(FL_CTRL | FL_SHIFT | 's'); bookSaveAs->callback((Fl_Callback *)saveAsBookCB, this); bookGenerate = new Fl_Button(345, 305, 85, 25, "Generate"); bookGenerate->shortcut(FL_CTRL | 'g'); bookGenerate->callback((Fl_Callback *)generateBookCB, this); bookClose = new Fl_Button(435, 305, 60, 25, "Close"); bookClose->shortcut(FL_CTRL | 'q'); bookClose->callback((Fl_Callback *)closeBookCB, this); controls->end(); // // Progress bar... // progressBar = new Fl_Progress(10, 340, 485, 20, "HTMLDOC " SVERSION " Ready."); window->end(); // Set the class name to "htmldoc". window->xclass("htmldoc"); # ifdef WIN32 // Load the HTMLDOC icon image... window->icon((char *)LoadImage(fl_display, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR)); # elif defined(__APPLE__) // MacOS X gets the icon from the application bundle... # elif defined(HAVE_LIBXPM) // X11 w/Xpm library Pixmap pixmap, mask; // Icon pixmaps XpmAttributes attrs; // Attributes of icon // Open the X display and load the HTMLDOC icon image... fl_open_display(); memset(&attrs, 0, sizeof(attrs)); XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display), (char **)htmldoc_xpm, &pixmap, &mask, &attrs); window->icon((char *)pixmap); # else // X11 w/o Xpm library // Open the X display and load the HTMLDOC icon image... fl_open_display(); window->icon((char *)XCreateBitmapFromData(fl_display, DefaultRootWindow(fl_display), (char *)htmldoc_bits, htmldoc_width, htmldoc_height)); # endif // WIN32 window->resizable(tabs); window->size_range(470, 360); // File chooser, icons, help dialog, error window... fc = new Fl_File_Chooser(".", "*", Fl_File_Chooser::SINGLE, "Title"); fc->iconsize(20); if (!Fl_File_Icon::first()) Fl_File_Icon::load_system_icons(); icon = Fl_File_Icon::find("file.html", Fl_File_Icon::PLAIN); help = new Fl_Help_Dialog(); error_window = new Fl_Window(400, 300, "Errors"); error_list = new Fl_Browser(10, 10, 380, 245); error_ok = new Fl_Button(335, 265, 55, 25, "Close"); error_ok->callback((Fl_Callback *)errorCB, this); error_window->end(); error_window->resizable(error_list); // // Load the given book or create a new one... // book_changed = 0; book_filename[0] = '\0'; #ifdef __APPLE__ if (apple_filename) { loadBook(apple_filename); free(apple_filename); apple_filename = NULL; } else #endif // __APPLE__ if (filename == NULL) newBookCB(NULL, this); else loadBook(filename); // Use cheesy hardcoded "style" stuff until FLTK 2.0... skinCB(0, this); # ifdef __sgi fc->color((Fl_Color)196); inputFiles->color((Fl_Color)196); # endif // __sgi // Show the window... show(); #if 0 // Wait for the window to be drawn... while (window->damage()) Fl::check(); #endif // 0 } // // '~GUI()' - Destroy the HTMLDOC GUI. // GUI::~GUI(void) { delete window; delete fc; delete help; delete error_window; while (Fl_File_Icon::first()) delete Fl_File_Icon::first(); } // // 'GUI::show()' - Display the window. // void GUI::show(void) { static char *htmldoc[1] = { (char *)"htmldoc" }; // argv[] array window->show(1, htmldoc); } // // 'GUI::progress()' - Update the progress bar on the GUI. // void GUI::progress(int percent, // I - Percent complete const char *text) // I - Text prompt { if (text != NULL) progressBar->label(text); else if (percent == 0) progressBar->label("HTMLDOC " SVERSION " Ready."); if ((percent - (int)progressBar->value()) >= 10 || percent < (int)progressBar->value()) progressBar->value(percent); if (progressBar->damage()) Fl::check(); } // // 'GUI::title()' - Set the title bar of the window. // void GUI::title(const char *filename,// Name of file being edited int changed) // Whether or not the file is modified { book_changed = changed; if (filename == NULL || filename[0] == '\0') { book_filename[0] = '\0'; strlcpy(title_string, "NewBook", sizeof(title_string)); } else { strlcpy(book_filename, filename, sizeof(book_filename)); strlcpy(title_string, file_basename(filename), sizeof(title_string)); } if (changed) strlcat(title_string, "(modified) - ", sizeof(title_string)); else strlcat(title_string, " - ", sizeof(title_string)); strlcat(title_string, "HTMLDOC " SVERSION, sizeof(title_string)); window->label(title_string); if (window->visible()) Fl::check(); } // // 'GUI::loadSettings()' - Load the current settings into the HTMLDOC globals. // void GUI::loadSettings() { char temp[4]; // Format string static const char *formats = ".tchl1iIaAC/:dTD"; // Format characters set_page_size((char *)pageSize->value()); PageLeft = get_measurement((char *)pageLeft->value()); PageRight = get_measurement((char *)pageRight->value()); PageTop = get_measurement((char *)pageTop->value()); PageBottom = get_measurement((char *)pageBottom->value()); PageDuplex = pageDuplex->value(); Landscape = landscape->value(); Compression = (int)compression->value(); OutputColor = !grayscale->value(); TocNumbers = numberedToc->value(); TocLevels = tocLevels->value(); TitlePage = titlePage->value(); if (jpegCompress->value()) OutputJPEG = (int)jpegQuality->value(); else OutputJPEG = 0; strlcpy(TocTitle, tocTitle->value(), sizeof(TocTitle)); temp[0] = formats[tocHeaderLeft->value()]; temp[1] = formats[tocHeaderCenter->value()]; temp[2] = formats[tocHeaderRight->value()]; temp[3] = '\0'; get_format(temp, TocHeader); temp[0] = formats[tocFooterLeft->value()]; temp[1] = formats[tocFooterCenter->value()]; temp[2] = formats[tocFooterRight->value()]; get_format(temp, TocFooter); temp[0] = formats[pageHeaderLeft->value()]; temp[1] = formats[pageHeaderCenter->value()]; temp[2] = formats[pageHeaderRight->value()]; get_format(temp, Header); temp[0] = formats[pageHeader1Left->value()]; temp[1] = formats[pageHeader1Center->value()]; temp[2] = formats[pageHeader1Right->value()]; get_format(temp, Header1); temp[0] = formats[pageFooterLeft->value()]; temp[1] = formats[pageFooterCenter->value()]; temp[2] = formats[pageFooterRight->value()]; get_format(temp, Footer); NumberUp = atoi(numberUp->text(numberUp->value())); _htmlBodyFont = (typeface_t)bodyFont->value(); _htmlHeadingFont = (typeface_t)headingFont->value(); htmlSetBaseSize(fontBaseSize->value(), fontSpacing->value()); HeadFootType = (typeface_t)(headFootFont->value() / 4); HeadFootStyle = (style_t)(headFootFont->value() & 3); HeadFootSize = headFootSize->value(); if (pdf11->value()) PDFVersion = 11; else if (pdf12->value()) PDFVersion = 12; else if (pdf13->value()) PDFVersion = 13; else PDFVersion = 14; PDFPageMode = pageMode->value(); PDFPageLayout = pageLayout->value(); PDFFirstPage = firstPage->value(); PDFEffect = pageEffect->value(); PDFPageDuration = pageDuration->value(); PDFEffectDuration = effectDuration->value(); Links = links->value(); EmbedFonts = embedFonts->value(); Encryption = encryptionYes->value(); Permissions = -64; if (permPrint->value()) Permissions |= PDF_PERM_PRINT; if (permModify->value()) Permissions |= PDF_PERM_MODIFY; if (permCopy->value()) Permissions |= PDF_PERM_COPY; if (permAnnotate->value()) Permissions |= PDF_PERM_ANNOTATE; strlcpy(UserPassword, userPassword->value(), sizeof(UserPassword)); strlcpy(OwnerPassword, ownerPassword->value(), sizeof(OwnerPassword)); if (ps1->value()) PSLevel = 1; else if (ps2->value()) PSLevel = 2; else PSLevel = 3; PSCommands = psCommands->value(); XRXComments = xrxComments->value(); strlcpy(BodyColor, bodyColor->value(), sizeof(BodyColor)); strlcpy(BodyImage, bodyImage->value(), sizeof(BodyImage)); htmlSetTextColor((uchar *)textColor->value()); htmlSetCharSet(charset->text(charset->value())); strlcpy(LinkColor, linkColor->value(), sizeof(LinkColor)); LinkStyle = linkStyle->value(); _htmlBrowserWidth = browserWidth->value(); strlcpy(Path, path->value(), sizeof(Path)); strlcpy(Proxy, proxy->value(), sizeof(Proxy)); StrictHTML = strict_html->value(); OverflowErrors = overflow_errors->value(); } // // 'GUI::newBook()' - Clear out the current GUI settings for a new book. // int // O - 1 on success, 0 on failure GUI::newBook(void) { int i; // Looping var char size[255]; // Page size string char formats[256]; // Format characters const char *fmt; // Old format string prefs_load(); switch (OutputType) { case OUTPUT_BOOK : typeBook->setonly(); docTypeCB(typeBook, this); break; case OUTPUT_CONTINUOUS : typeContinuous->setonly(); docTypeCB(typeContinuous, this); break; case OUTPUT_WEBPAGES : typeWebPage->setonly(); docTypeCB(typeWebPage, this); break; } inputFiles->clear(); inputFilesCB(inputFiles, this); logoImage->value(""); titleImage->value(""); outputFile->setonly(); outputTypeCB(outputFile, this); outputPath->value(""); typeHTML->setonly(); outputFormatCB(typeHTML, this); grayscale->value(!OutputColor); titlePage->value(TitlePage); bodyColor->value(BodyColor); bodyImage->value(BodyImage); textColor->value((char *)_htmlTextColor); linkColor->value(LinkColor); linkStyle->value(LinkStyle); if (PageWidth == 595 && PageLength == 842) pageSize->value("A4"); else if (PageWidth == 595 && PageLength == 792) pageSize->value("Universal"); else if (PageWidth == 612 && PageLength == 792) pageSize->value("Letter"); else { sprintf(size, "%.2fx%.2fin", PageWidth / 72.0f, PageLength / 72.0f); pageSize->value(size); } sprintf(size, "%.2fin", PageLeft / 72.0f); pageLeft->value(size); sprintf(size, "%.2fin", PageRight / 72.0f); pageRight->value(size); sprintf(size, "%.2fin", PageTop / 72.0f); pageTop->value(size); sprintf(size, "%.2fin", PageBottom / 72.0f); pageBottom->value(size); pageDuplex->value(PageDuplex); landscape->value(Landscape); memset(formats, 0, sizeof(formats)); formats[(int)'t'] = 1; formats[(int)'c'] = 2; formats[(int)'h'] = 3; formats[(int)'l'] = 4; formats[(int)'1'] = 5; formats[(int)'i'] = 6; formats[(int)'I'] = 7; formats[(int)'a'] = 8; formats[(int)'A'] = 9; formats[(int)'C'] = 10; formats[(int)'/'] = 11; formats[(int)':'] = 12; formats[(int)'d'] = 13; formats[(int)'T'] = 14; formats[(int)'D'] = 15; fmt = get_fmt(Header); pageHeaderLeft->value(formats[fmt[0]]); pageHeaderCenter->value(formats[fmt[1]]); pageHeaderRight->value(formats[fmt[2]]); fmt = get_fmt(Header1); pageHeader1Left->value(formats[fmt[0]]); pageHeader1Center->value(formats[fmt[1]]); pageHeader1Right->value(formats[fmt[2]]); fmt = get_fmt(Footer); pageFooterLeft->value(formats[fmt[0]]); pageFooterCenter->value(formats[fmt[1]]); pageFooterRight->value(formats[fmt[2]]); if (NumberUp == 1) numberUp->value(0); else if (NumberUp == 2) numberUp->value(1); else if (NumberUp == 4) numberUp->value(2); else if (NumberUp == 6) numberUp->value(3); else if (NumberUp == 9) numberUp->value(4); else if (NumberUp == 16) numberUp->value(5); tocLevels->value(TocLevels); numberedToc->value(TocNumbers); fmt = get_fmt(TocHeader); tocHeaderLeft->value(formats[fmt[0]]); tocHeaderCenter->value(formats[fmt[1]]); tocHeaderRight->value(formats[fmt[2]]); fmt = get_fmt(TocFooter); tocFooterLeft->value(formats[fmt[0]]); tocFooterCenter->value(formats[fmt[1]]); tocFooterRight->value(formats[fmt[2]]); tocTitle->value(TocTitle); headingFont->value(_htmlHeadingFont); bodyFont->value(_htmlBodyFont); headFootFont->value(HeadFootType * 4 + HeadFootStyle); fontBaseSize->value(_htmlSizes[SIZE_P]); fontSpacing->value(_htmlSpacings[SIZE_P] / _htmlSizes[SIZE_P]); headFootSize->value(HeadFootSize); for (i = 0; i < (charset->size() - 1); i ++) if (strcasecmp(_htmlCharSet, charset->text(i)) == 0) { charset->value(i); break; } compression->value(Compression); compGroup->deactivate(); jpegCompress->value(OutputJPEG > 0); jpegQuality->value(OutputJPEG > 0 ? OutputJPEG : 90); jpegGroup->deactivate(); pdfTab->deactivate(); if (PDFVersion < 12) { pdf11->setonly(); pdfCB(pdf11, this); } else if (PDFVersion < 13) { pdf12->setonly(); pdfCB(pdf12, this); } else if (PDFVersion < 14) { pdf13->setonly(); pdfCB(pdf13, this); } else { pdf14->setonly(); pdfCB(pdf14, this); } pageMode->value(PDFPageMode); pageLayout->value(PDFPageLayout); firstPage->value(PDFFirstPage); pageEffect->value(PDFEffect); effectCB(pageEffect, this); pageDuration->value(PDFPageDuration); effectDuration->value(PDFEffectDuration); links->value(Links); embedFonts->value(EmbedFonts); securityTab->deactivate(); if (Encryption) { encryptionYes->setonly(); encryptionCB(encryptionYes, this); } else { encryptionNo->setonly(); encryptionCB(encryptionNo, this); } if (Permissions & PDF_PERM_PRINT) permPrint->set(); else permPrint->clear(); if (Permissions & PDF_PERM_MODIFY) permModify->set(); else permModify->clear(); if (Permissions & PDF_PERM_COPY) permCopy->set(); else permCopy->clear(); if (Permissions & PDF_PERM_ANNOTATE) permAnnotate->set(); else permAnnotate->clear(); ownerPassword->value(OwnerPassword); userPassword->value(UserPassword); if (PSLevel == 1) ps1->setonly(); else if (PSLevel == 2) ps2->setonly(); else ps3->setonly(); if (PSLevel == 1) psCommands->deactivate(); else psCommands->activate(); psCommands->value(PSCommands); xrxComments->value(XRXComments); path->value(Path); proxy->value(Proxy); browserWidth->value(_htmlBrowserWidth); strict_html->value(StrictHTML); overflow_errors->value(OverflowErrors); title(NULL, 0); return (1); } // // 'GUI::loadBook()' - Load a book file from disk. // int // O - 1 = success, 0 = fail GUI::loadBook(const char *filename) // I - Name of book file { FILE *fp; // File to read from char line[10240]; // Line from file const char *dir; // Directory char basename[1024]; // Base filename // If the filename contains a path, chdir to it first... if ((dir = file_directory(filename)) != NULL) { /* * Filename contains a complete path - get the directory portion and do * a chdir()... */ strlcpy(basename, file_basename(filename), sizeof(basename)); filename = basename; chdir(dir); fc->directory("."); } // Open the file... fp = fopen(filename, "r"); if (fp == NULL) { fl_alert("Unable to open \"%s\"!", filename); return (0); } // Get the header... file_gets(line, sizeof(line), fp); if (strncmp(line, "#HTMLDOC", 8) != 0) { fclose(fp); fl_alert("Bad or missing #HTMLDOC header:\n%-80.80s", line); return (0); } // Reset the GUI... if (!newBook()) { fclose(fp); return (0); } // Read the second line from the book file; for older book files, this will // be the file count; for new files this will be the options... do { file_gets(line, sizeof(line), fp); if (line[0] == '-') parseOptions(line); } while (!line[0]); // Skip blank lines... // Get input files/options... while (file_gets(line, sizeof(line), fp) != NULL) { if (line[0] == '\0') continue; // Skip blank lines else if (line[0] == '-') parseOptions(line); else if (line[0] == '\\') inputFiles->add(line + 1, icon); else inputFiles->add(line, icon); } // Close the book file and update the GUI... fclose(fp); inputFiles->topline(1); title(filename, 0); return (1); } // // 'GUI::parseOptions()' - Parse options in a book file... // void GUI::parseOptions(const char *line) // I - Line from file { int i; // Looping var const char *lineptr; // Pointer into line char temp[1024], // Option name temp2[1024], // Option value *tempptr, // Pointer into option formats[256]; // Header/footer formats static const char *types[] = // Typeface names... { "Courier", "Times", "Helvetica", "Monospace", "Serif", "Sans" }; static const char *fonts[] = // Font names... { "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique", "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique", "Monospace", "Monospace-Bold", "Monospace-Oblique", "Monospace-BoldOblique", "Serif-Roman", "Serif-Bold", "Serif-Oblique", "Serif-BoldOblique", "Sans", "Sans-Bold", "Sans-Oblique", "Sans-BoldOblique" }; // Initialize the format character lookup table... memset(formats, 0, sizeof(formats)); formats[(int)'t'] = 1; formats[(int)'c'] = 2; formats[(int)'h'] = 3; formats[(int)'l'] = 4; formats[(int)'1'] = 5; formats[(int)'i'] = 6; formats[(int)'I'] = 7; formats[(int)'a'] = 8; formats[(int)'A'] = 9; formats[(int)'C'] = 10; formats[(int)'/'] = 11; formats[(int)':'] = 12; formats[(int)'d'] = 13; formats[(int)'T'] = 14; formats[(int)'D'] = 15; // Parse the input line... for (lineptr = line; *lineptr != '\0';) { while (*lineptr == ' ') lineptr ++; for (tempptr = temp; *lineptr != '\0' && *lineptr != ' ';) *tempptr++ = *lineptr++; *tempptr = '\0'; while (*lineptr == ' ') lineptr ++; if (strcmp(temp, "--duplex") == 0) { pageDuplex->set(); continue; } else if (strcmp(temp, "--landscape") == 0) { landscape->set(); continue; } else if (strcmp(temp, "--portrait") == 0) { landscape->clear(); continue; } else if (strncmp(temp, "--jpeg", 6) == 0) { if (strlen(temp) > 7) jpegQuality->value(atof(temp + 7)); else jpegQuality->value(90.0); if (jpegQuality->value() > 0.0) { jpegCompress->set(); jpegGroup->activate(); } else { jpegCompress->clear(); jpegGroup->deactivate(); } continue; } else if (strcmp(temp, "--grayscale") == 0) { grayscale->set(); continue; } else if (strcmp(temp, "--color") == 0) { grayscale->clear(); continue; } else if (strcmp(temp, "--links") == 0) { links->set(); continue; } else if (strcmp(temp, "--no-links") == 0) { links->clear(); continue; } else if (strcmp(temp, "--truetype") == 0 || strcmp(temp, "--embedfonts") == 0) { embedFonts->set(); continue; } else if (strcmp(temp, "--no-truetype") == 0 || strcmp(temp, "--no-embedfonts") == 0) { embedFonts->clear(); continue; } else if (strcmp(temp, "--pscommands") == 0) { psCommands->set(); continue; } else if (strcmp(temp, "--no-pscommands") == 0) { psCommands->clear(); continue; } else if (strcmp(temp, "--xrxcomments") == 0) { xrxComments->set(); continue; } else if (strcmp(temp, "--no-xrxcomments") == 0) { xrxComments->clear(); continue; } else if (strncmp(temp, "--compression", 13) == 0) { if (strlen(temp) > 14) compression->value(atof(temp + 14)); else compression->value(1.0); continue; } else if (strcmp(temp, "--no-compression") == 0) { compression->value(0.0); continue; } else if (strcmp(temp, "--no-jpeg") == 0) { jpegCompress->clear(); jpegGroup->deactivate(); continue; } else if (strcmp(temp, "--numbered") == 0) { numberedToc->set(); continue; } else if (strcmp(temp, "--no-numbered") == 0) { numberedToc->clear(); continue; } else if (strcmp(temp, "--no-toc") == 0) { tocLevels->value(0); continue; } else if (strcmp(temp, "--title") == 0) { titlePage->set(); continue; } else if (strcmp(temp, "--no-title") == 0) { titlePage->clear(); continue; } else if (strcmp(temp, "--strict") == 0) { strict_html->set(); continue; } else if (strcmp(temp, "--no-strict") == 0) { strict_html->clear(); continue; } else if (strcmp(temp, "--overflow") == 0) { overflow_errors->set(); continue; } else if (strcmp(temp, "--no-overflow") == 0) { overflow_errors->clear(); continue; } else if (strcmp(temp, "--book") == 0) { typeBook->setonly(); docTypeCB(typeBook, this); continue; } else if (strcmp(temp, "--continuous") == 0) { typeContinuous->setonly(); docTypeCB(typeContinuous, this); continue; } else if (strcmp(temp, "--webpage") == 0) { typeWebPage->setonly(); docTypeCB(typeWebPage, this); continue; } else if (strcmp(temp, "--encryption") == 0) { encryptionYes->setonly(); encryptionCB(encryptionYes, this); continue; } else if (strcmp(temp, "--no-encryption") == 0) { encryptionNo->setonly(); encryptionCB(encryptionNo, this); continue; } else if (temp[0] != '-') { inputFiles->add(temp, icon); continue; } if (*lineptr == '\"') { lineptr ++; for (tempptr = temp2; *lineptr != '\0' && *lineptr != '\"';) *tempptr++ = *lineptr++; if (*lineptr == '\"') lineptr ++; } else { for (tempptr = temp2; *lineptr != '\0' && *lineptr != ' ';) *tempptr++ = *lineptr++; } *tempptr = '\0'; if (strcmp(temp, "-t") == 0) { if (strcmp(temp2, "html") == 0) { typeHTML->setonly(); outputFormatCB(typeHTML, this); } else if (strcmp(temp2, "htmlsep") == 0) { typeHTMLSep->setonly(); outputFormatCB(typeHTMLSep, this); } else if (strcmp(temp2, "ps1") == 0) { typePS->setonly(); ps1->setonly(); outputFormatCB(typePS, this); psCB(ps1, this); } else if (strcmp(temp2, "ps") == 0 || strcmp(temp2, "ps2") == 0) { typePS->setonly(); ps2->setonly(); outputFormatCB(typePS, this); psCB(ps2, this); } else if (strcmp(temp2, "ps3") == 0) { typePS->setonly(); ps3->setonly(); outputFormatCB(typePS, this); psCB(ps3, this); } else if (strcmp(temp2, "pdf11") == 0) { typePDF->setonly(); pdf11->setonly(); outputFormatCB(typePDF, this); pdfCB(pdf11, this); } else if (strcmp(temp2, "pdf12") == 0) { typePDF->setonly(); pdf12->setonly(); outputFormatCB(typePDF, this); pdfCB(pdf12, this); } else if (strcmp(temp2, "pdf") == 0 || strcmp(temp2, "pdf13") == 0) { typePDF->setonly(); pdf13->setonly(); outputFormatCB(typePDF, this); pdfCB(pdf13, this); } else if (strcmp(temp2, "pdf14") == 0) { typePDF->setonly(); pdf14->setonly(); outputFormatCB(typePDF, this); pdfCB(pdf14, this); } } else if (strcmp(temp, "--logo") == 0 || strcmp(temp, "--logoimage") == 0) logoImage->value(temp2); else if (strcmp(temp, "--titlefile") == 0 || strcmp(temp, "--titleimage") == 0) { titlePage->set(); titleImage->value(temp2); } else if (strcmp(temp, "-f") == 0) { outputPath->value(temp2); outputFile->setonly(); outputTypeCB(outputFile, this); } else if (strcmp(temp, "-d") == 0) { outputPath->value(temp2); outputDirectory->setonly(); outputTypeCB(outputDirectory, this); } else if (strcmp(temp, "--browserwidth") == 0) browserWidth->value(atof(temp2)); else if (strcmp(temp, "--size") == 0) pageSize->value(temp2); else if (strcmp(temp, "--left") == 0) pageLeft->value(temp2); else if (strcmp(temp, "--right") == 0) pageRight->value(temp2); else if (strcmp(temp, "--top") == 0) pageTop->value(temp2); else if (strcmp(temp, "--bottom") == 0) pageBottom->value(temp2); else if (strcmp(temp, "--header") == 0) { pageHeaderLeft->value(formats[temp2[0]]); pageHeaderCenter->value(formats[temp2[1]]); pageHeaderRight->value(formats[temp2[2]]); } else if (strcmp(temp, "--header1") == 0) { pageHeader1Left->value(formats[temp2[0]]); pageHeader1Center->value(formats[temp2[1]]); pageHeader1Right->value(formats[temp2[2]]); } else if (strcmp(temp, "--footer") == 0) { pageFooterLeft->value(formats[temp2[0]]); pageFooterCenter->value(formats[temp2[1]]); pageFooterRight->value(formats[temp2[2]]); } else if (strcmp(temp, "--nup") == 0) { i = atoi(temp2); if (i == 1) numberUp->value(0); else if (i == 2) numberUp->value(1); else if (i == 4) numberUp->value(2); else if (i == 6) numberUp->value(3); else if (i == 9) numberUp->value(4); else if (i == 16) numberUp->value(5); } else if (strcmp(temp, "--bodycolor") == 0) bodyColor->value(temp2); else if (strcmp(temp, "--bodyimage") == 0) bodyImage->value(temp2); else if (strcmp(temp, "--textcolor") == 0) textColor->value(temp2); else if (strcmp(temp, "--linkcolor") == 0) linkColor->value(temp2); else if (strcmp(temp, "--linkstyle") == 0) { if (strcmp(temp2, "plain") == 0) linkStyle->value(0); else linkStyle->value(1); } else if (strcmp(temp, "--toclevels") == 0) tocLevels->value(atoi(temp2)); else if (strcmp(temp, "--tocheader") == 0) { tocHeaderLeft->value(formats[temp2[0]]); tocHeaderCenter->value(formats[temp2[1]]); tocHeaderRight->value(formats[temp2[2]]); } else if (strcmp(temp, "--tocfooter") == 0) { tocFooterLeft->value(formats[temp2[0]]); tocFooterCenter->value(formats[temp2[1]]); tocFooterRight->value(formats[temp2[2]]); } else if (strcmp(temp, "--toctitle") == 0) tocTitle->value(temp2); else if (strcmp(temp, "--fontsize") == 0) fontBaseSize->value(atof(temp2)); else if (strcmp(temp, "--fontspacing") == 0) fontSpacing->value(atof(temp2)); else if (strcmp(temp, "--headingfont") == 0) { for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++) if (strcasecmp(types[i], temp2) == 0) { headingFont->value(i); break; } } else if (strcmp(temp, "--bodyfont") == 0) { for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++) if (strcasecmp(types[i], temp2) == 0) { bodyFont->value(i); break; } } else if (strcmp(temp, "--headfootsize") == 0) headFootSize->value(atof(temp2)); else if (strcmp(temp, "--headfootfont") == 0) { for (i = 0; i < (int)(sizeof(fonts) / sizeof(fonts[0])); i ++) if (strcasecmp(fonts[i], temp2) == 0) { headFootFont->value(i); break; } } else if (strcmp(temp, "--charset") == 0) { for (i = 0; i < (charset->size() - 1); i ++) if (strcasecmp(temp2, charset->text(i)) == 0) { charset->value(i); break; } } else if (strcmp(temp, "--pagemode") == 0) { for (i = 0; i < (int)(sizeof(PDFModes) / sizeof(PDFModes[0])); i ++) if (strcasecmp(temp2, PDFModes[i]) == 0) { pageMode->value(i); break; } } else if (strcmp(temp, "--pagelayout") == 0) { for (i = 0; i < (int)(sizeof(PDFLayouts) / sizeof(PDFLayouts[0])); i ++) if (strcasecmp(temp2, PDFLayouts[i]) == 0) { pageLayout->value(i); break; } } else if (strcmp(temp, "--firstpage") == 0) { for (i = 0; i < (int)(sizeof(PDFPages) / sizeof(PDFPages[0])); i ++) if (strcasecmp(temp2, PDFPages[i]) == 0) { firstPage->value(i); break; } } else if (strcmp(temp, "--pageeffect") == 0) { for (i = 0; i < (int)(sizeof(PDFEffects) / sizeof(PDFEffects[0])); i ++) if (strcasecmp(temp2, PDFEffects[i]) == 0) { pageEffect->value(i); effectCB(pageEffect, this); break; } } else if (strcmp(temp, "--pageduration") == 0) pageDuration->value(atof(temp2)); else if (strcmp(temp, "--effectduration") == 0) effectDuration->value(atof(temp2)); else if (strcmp(temp, "--permissions") == 0) { if (strcmp(temp2, "all") == 0) { permPrint->set(); permModify->set(); permCopy->set(); permAnnotate->set(); } else if (strcmp(temp2, "none") == 0) { permPrint->clear(); permModify->clear(); permCopy->clear(); permAnnotate->clear(); } else if (strcmp(temp2, "print") == 0) permPrint->set(); else if (strcmp(temp2, "no-print") == 0) permPrint->clear(); else if (strcmp(temp2, "modify") == 0) permModify->set(); else if (strcmp(temp2, "no-modify") == 0) permModify->clear(); else if (strcmp(temp2, "copy") == 0) permCopy->set(); else if (strcmp(temp2, "no-copy") == 0) permCopy->clear(); else if (strcmp(temp2, "annotate") == 0) permAnnotate->set(); else if (strcmp(temp2, "no-annotate") == 0) permAnnotate->clear(); } else if (strcmp(temp, "--user-password") == 0) userPassword->value(temp2); else if (strcmp(temp, "--owner-password") == 0) ownerPassword->value(temp2); else if (strcmp(temp, "--path") == 0) path->value(temp2); else if (strcmp(temp, "--proxy") == 0) proxy->value(temp2); } } #ifdef __APPLE__ // // 'GUI::appleOpenCB()' - Handle open file events from Finder. // void GUI::appleOpenCB(const char *f) // I - Book file to open { // Save the filename if the book GUI hasn't been initialized... if (!BookGUI) { apple_filename = strdup(f); return; } // See if the user wants to save the current book... if (!BookGUI->checkSave()) return; // Load the new book... BookGUI->loadBook(f); } #endif // __APPLE__ // // 'GUI::saveBook()' - Save a book to disk. // int // O - 1 = success, 0 = fail GUI::saveBook(const char *filename) // I - Name of book file { int i, // Looping var count; // Number of files FILE *fp; // Book file pointer static const char *formats = ".tchl1iIaAC/:dTD"; // Format characters static const char *types[] = // Typeface names... { "Courier", "Times", "Helvetica", "Monospace", "Serif", "Sans" }; static const char *fonts[] = // Font names... { "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique", "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique", "Monospace", "Monospace-Bold", "Monospace-Oblique", "Monospace-BoldOblique", "Serif-Roman", "Serif-Bold", "Serif-Oblique", "Serif-BoldOblique", "Sans", "Sans-Bold", "Sans-Oblique", "Sans-BoldOblique" }; // Open the book file... fp = fopen(filename, "w"); if (fp == NULL) { fl_alert("Unable to create \"%s\"!", filename); return (0); } // Write the standard header... fputs("#HTMLDOC " SVERSION "\n", fp); // Write the options... if (typeHTML->value()) fputs("-t html", fp); else if (typeHTMLSep->value()) fputs("-t htmlsep", fp); else if (typePS->value()) { if (ps1->value()) fputs("-t ps1", fp); else if (ps2->value()) fputs("-t ps2", fp); else if (ps3->value()) fputs("-t ps3", fp); } else if (pdf11->value()) fputs("-t pdf11", fp); else if (pdf12->value()) fputs("-t pdf12", fp); else if (pdf13->value()) fputs("-t pdf13", fp); else fputs("-t pdf14", fp); if (outputFile->value()) fprintf(fp, " -f \"%s\"", outputPath->value()); else fprintf(fp, " -d \"%s\"", outputPath->value()); if (typeWebPage->value()) fputs(" --webpage", fp); else if (typeContinuous->value()) fputs(" --continuous", fp); else { fputs(" --book", fp); if (tocLevels->value() == 0) fputs(" --no-toc", fp); else fprintf(fp, " --toclevels %d", tocLevels->value()); if (numberedToc->value()) fputs(" --numbered", fp); else fputs(" --no-numbered", fp); fprintf(fp, " --toctitle \"%s\"", tocTitle->value()); } if (titlePage->value()) { fputs(" --title", fp); if (titleImage->size() > 0) fprintf(fp, " --titleimage \"%s\"", titleImage->value()); } else fputs(" --no-title", fp); if (logoImage->size() > 0) fprintf(fp, " --logoimage \"%s\"", logoImage->value()); if (textColor->size() > 0) fprintf(fp, " --textcolor %s", textColor->value()); if (linkColor->size() > 0) fprintf(fp, " --linkcolor %s", linkColor->value()); if (linkStyle->value()) fputs(" --linkstyle underline", fp); else fputs(" --linkstyle plain", fp); if (bodyColor->size() > 0) fprintf(fp, " --bodycolor %s", bodyColor->value()); if (bodyImage->size() > 0) fprintf(fp, " --bodyimage %s", bodyImage->value()); if (!typeHTML->value() && !typeHTMLSep->value()) { if (pageSize->size() > 0) fprintf(fp, " --size %s", pageSize->value()); if (pageLeft->size() > 0) fprintf(fp, " --left %s", pageLeft->value()); if (pageRight->size() > 0) fprintf(fp, " --right %s", pageRight->value()); if (pageTop->size() > 0) fprintf(fp, " --top %s", pageTop->value()); if (pageBottom->size() > 0) fprintf(fp, " --bottom %s", pageBottom->value()); fprintf(fp, " --header %c%c%c", formats[pageHeaderLeft->value()], formats[pageHeaderCenter->value()], formats[pageHeaderRight->value()]); fprintf(fp, " --header1 %c%c%c", formats[pageHeader1Left->value()], formats[pageHeader1Center->value()], formats[pageHeader1Right->value()]); fprintf(fp, " --footer %c%c%c", formats[pageFooterLeft->value()], formats[pageFooterCenter->value()], formats[pageFooterRight->value()]); fprintf(fp, " --nup %s", numberUp->text(numberUp->value())); fprintf(fp, " --tocheader %c%c%c", formats[tocHeaderLeft->value()], formats[tocHeaderCenter->value()], formats[tocHeaderRight->value()]); fprintf(fp, " --tocfooter %c%c%c", formats[tocFooterLeft->value()], formats[tocFooterCenter->value()], formats[tocFooterRight->value()]); if (pageDuplex->value()) fputs(" --duplex", fp); if (landscape->value()) fputs(" --landscape", fp); else fputs(" --portrait", fp); if (grayscale->value()) fputs(" --grayscale", fp); else fputs(" --color", fp); if (psCommands->value()) fputs(" --pscommands", fp); else fputs(" --no-pscommands", fp); if (xrxComments->value()) fputs(" --xrxcomments", fp); else fputs(" --no-xrxcomments", fp); if (compression->value() == 0.0f) fputs(" --no-compression", fp); else fprintf(fp, " --compression=%.0f", compression->value()); if (jpegCompress->value()) fprintf(fp, " --jpeg=%.0f", jpegQuality->value()); else fputs(" --jpeg=0", fp); } fprintf(fp, " --fontsize %.1f", fontBaseSize->value()); fprintf(fp, " --fontspacing %.1f", fontSpacing->value()); fprintf(fp, " --headingfont %s", types[headingFont->value()]); fprintf(fp, " --bodyfont %s", types[bodyFont->value()]); fprintf(fp, " --headfootsize %.1f", headFootSize->value()); fprintf(fp, " --headfootfont %s", fonts[headFootFont->value()]); fprintf(fp, " --charset %s", charset->text(charset->value())); if (typePDF->value()) { if (links->value()) fputs(" --links", fp); else fputs(" --no-links", fp); if (embedFonts->value()) fputs(" --embedfonts", fp); else fputs(" --no-embedfonts", fp); fprintf(fp, " --pagemode %s", PDFModes[pageMode->value()]); fprintf(fp, " --pagelayout %s", PDFLayouts[pageLayout->value()]); fprintf(fp, " --firstpage %s", PDFPages[firstPage->value()]); fprintf(fp, " --pageeffect %s", PDFEffects[pageEffect->value()]); fprintf(fp, " --pageduration %.0f", pageDuration->value()); fprintf(fp, " --effectduration %.1f", effectDuration->value()); fprintf(fp, " --%sencryption", encryptionYes->value() ? "" : "no-"); if (permPrint->value() && permModify->value() && permCopy->value() && permAnnotate->value()) fputs(" --permissions all", fp); else if (permPrint->value() || permModify->value() || permCopy->value() || permAnnotate->value()) { if (permPrint->value()) fputs(" --permissions print", fp); else fputs(" --permissions no-print", fp); if (permModify->value()) fputs(" --permissions modify", fp); else fputs(" --permissions no-modify", fp); if (permCopy->value()) fputs(" --permissions copy", fp); else fputs(" --permissions no-copy", fp); if (permAnnotate->value()) fputs(" --permissions annotate", fp); else fputs(" --permissions no-annotate", fp); } else fputs(" --permissions none", fp); fprintf(fp, " --owner-password \"%s\"", ownerPassword->value()); fprintf(fp, " --user-password \"%s\"", userPassword->value()); } fprintf(fp, " --browserwidth %.0f", browserWidth->value()); if (path->value()[0]) fprintf(fp, " --path \"%s\"", path->value()); if (proxy->value()[0]) fprintf(fp, " --proxy \"%s\"", proxy->value()); if (strict_html->value()) fputs(" --strict", fp); else fputs(" --no-strict", fp); if (overflow_errors->value()) fputs(" --overflow", fp); else fputs(" --no-overflow", fp); fputs("\n", fp); // Output the files... count = inputFiles->size(); for (i = 1; i <= count; i ++) if (inputFiles->text(i)[0] == '-') fprintf(fp, "\\%s\n", inputFiles->text(i)); else fprintf(fp, "%s\n", inputFiles->text(i)); // Close the file and update the GUI... fclose(fp); title(filename, 0); return (1); } // // 'GUI::checkSave()' - Check to see if a save is needed. // int // O - 1 if no save is needed, 0 if save is needed GUI::checkSave(void) { if (book_changed) { switch (fl_choice("The current book has been changed.\n" "Do you wish to save it first?", "Cancel", "Save", "Discard")) { case 0 : /* Cancel */ return (0); case 1 : /* Save */ if (book_filename[0] != '\0') return (saveBook(book_filename)); else { saveAsBookCB(NULL, this); return (!book_changed); } case 2 : /* Discard */ return (1); } } return (1); } // // 'GUI::changeCB()' - Mark the current book as changed. // void GUI::changeCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); gui->title(gui->book_filename, 1); } // // 'GUI::docTypeCB()' - Handle input on the document type buttons. // void GUI::docTypeCB(Fl_Widget *w, // I - Toggle button widget GUI *gui) // I - GUI { gui->title(gui->book_filename, 1); if (w == gui->typeBook) { gui->typeHTML->activate(); gui->typeHTMLSep->activate(); gui->titlePage->value(1); gui->tocTab->activate(); gui->tocLevels->value(3); gui->firstPage->activate(); gui->pageMode->value(1); } else { gui->typeHTML->deactivate(); gui->typeHTMLSep->deactivate(); if (gui->typeHTML->value() || gui->typeHTMLSep->value()) { gui->typePDF->setonly(); outputFormatCB(gui->typePDF, gui); } gui->titlePage->value(0); gui->tocTab->deactivate(); gui->firstPage->value(0); gui->firstPage->deactivate(); gui->pageMode->value(0); } } // // 'GUI::inputFilesCB()' - Handle selections in the input files browser. // void GUI::inputFilesCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i, // Looping var num_items; // Number of items in the file list REF(w); num_items = gui->inputFiles->size(); for (i = 1; i <= num_items; i ++) if (gui->inputFiles->selected(i)) break; if (i <= num_items) { gui->editFile->activate(); gui->deleteFile->activate(); } else { gui->editFile->deactivate(); gui->deleteFile->deactivate(); } if (gui->inputFiles->selected(1) || num_items == 0) gui->moveUpFile->deactivate(); else gui->moveUpFile->activate(); if (gui->inputFiles->selected(num_items) || num_items == 0) gui->moveDownFile->deactivate(); else gui->moveDownFile->activate(); if (Fl::event_clicks() && i <= num_items) editFilesCB(gui->editFile, gui); } // // 'GUI::addFileCB()' - Add a file to the input files list. // void GUI::addFileCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i; // Looping var REF(w); gui->fc->filter("WWW Files (*.{htm,html,shtml,book})"); gui->fc->type(Fl_File_Chooser::MULTI); gui->fc->label("Add HTML Files?"); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { for (i = 1; i <= gui->fc->count(); i ++) { if (strcasecmp(file_extension(gui->fc->value(i)), "book") == 0) { // Import files from the book... FILE *fp; char line[1024]; char directory[1024]; int count; getcwd(directory, sizeof(directory)); chdir(file_directory(gui->fc->value(i))); if ((fp = fopen(gui->fc->value(i), "rb")) == NULL) { fl_alert("Unable to import %s:\n%s", gui->fc->value(i), strerror(errno)); chdir(directory); continue; } if (fgets(line, sizeof(line), fp) == NULL) { fl_alert("Unable to import %s:\nShort file.", gui->fc->value(i)); fclose(fp); chdir(directory); continue; } if (strncmp(line, "#HTMLDOC", 8) != 0) { fl_alert("Unable to import %s:\nBad header line.", gui->fc->value(i)); fclose(fp); chdir(directory); continue; } if (fgets(line, sizeof(line), fp) == NULL) { fl_alert("Unable to import %s:\nNo file count.", gui->fc->value(i)); fclose(fp); chdir(directory); continue; } count = atoi(line); while (count > 0) { count --; if (fgets(line, sizeof(line), fp) == NULL) { fl_alert("Unable to import %s:\nMissing file.", gui->fc->value(i)); fclose(fp); chdir(directory); continue; } line[strlen(line) - 1] = '\0'; // strip newline gui->inputFiles->add(file_localize(line, directory), gui->icon); } fclose(fp); chdir(directory); } else gui->inputFiles->add(file_localize(gui->fc->value(i), NULL), gui->icon); } gui->title(gui->book_filename, 1); } } // // 'GUI::addURLCB()' - Add a URL to the input files list. // void GUI::addURLCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { const char *url; // New URL to add REF(w); if ((url = fl_input("URL?", "http://")) != NULL) { gui->inputFiles->add(url, gui->icon); gui->title(gui->book_filename, 1); } } // // 'GUI::editFilesCB()' - Edit one or more files in the input files list. // void GUI::editFilesCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i, // Looping var num_items; // Number of items in the file list char command[1024]; // Editor command #ifdef WIN32 STARTUPINFO suInfo; // Process startup information PROCESS_INFORMATION prInfo; // Process information #endif // WIN32 REF(w); num_items = gui->inputFiles->size(); for (i = 1; i <= num_items; i ++) if (gui->inputFiles->selected(i)) { snprintf(command, sizeof(command), gui->htmlEditor->value(), gui->inputFiles->text(i)); #ifdef WIN32 memset(&suInfo, 0, sizeof(suInfo)); suInfo.cb = sizeof(suInfo); if (!CreateProcess(NULL, command, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &suInfo, &prInfo)) fl_alert("Unable to start editor!"); #else strlcat(command, "&", sizeof(command)); if (system(command)) fl_alert("Unable to start editor!"); #endif // !WIN32 } } // // 'GUI::deleteFileCB()' - Delete one or more files from the input files list. // void GUI::deleteFilesCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i, // Looping var num_items; // Number of items in the file list REF(w); num_items = gui->inputFiles->size(); for (i = num_items; i > 0; i --) if (gui->inputFiles->selected(i)) { gui->inputFiles->select(i, 0); gui->inputFiles->remove(i); gui->title(gui->book_filename, 1); } } // // 'GUI::moveUpFileCB()' - Move one or more files up in the input files list. // void GUI::moveUpFilesCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i, // Looping var num_items; // Number of items in the file list char *file; // File to move up REF(w); num_items = gui->inputFiles->size(); for (i = 1; i <= num_items; i ++) if (gui->inputFiles->selected(i)) { file = (char *)gui->inputFiles->text(i); gui->inputFiles->insert(i - 1, file, gui->icon); gui->inputFiles->select(i - 1); gui->inputFiles->remove(i + 1); gui->inputFiles->select(i, 0); gui->title(gui->book_filename, 1); } for (i = 1; i <= num_items; i ++) if (gui->inputFiles->selected(i)) break; gui->inputFiles->make_visible(i); if (gui->inputFiles->selected(1)) gui->moveUpFile->deactivate(); if (!gui->inputFiles->selected(num_items)) gui->moveDownFile->activate(); } // // 'GUI::moveDownFileCB()' - Move one or more files down in the input files list. // void GUI::moveDownFilesCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i, // Looping var num_items; // Number of items in the file list char *file; // File to move down REF(w); num_items = gui->inputFiles->size(); for (i = num_items; i > 0; i --) if (gui->inputFiles->selected(i)) { file = (char *)gui->inputFiles->text(i); gui->inputFiles->insert(i + 2, file, gui->icon); gui->inputFiles->select(i + 2); gui->inputFiles->remove(i); gui->inputFiles->select(i, 0); gui->title(gui->book_filename, 1); } for (i = num_items; i >= 1; i --) if (gui->inputFiles->selected(i)) break; gui->inputFiles->make_visible(i); if (!gui->inputFiles->selected(1)) gui->moveUpFile->activate(); if (gui->inputFiles->selected(num_items)) gui->moveDownFile->deactivate(); } // // 'GUI::logoImageCB()' - Change the logo image file. // void GUI::logoImageCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (w == gui->logoBrowse) { gui->fc->filter("Image Files (*.{bmp,gif,jpg,png})"); gui->fc->label("Logo Image?"); gui->fc->type(Fl_File_Chooser::SINGLE); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { gui->logoImage->value(file_localize(gui->fc->value(), NULL)); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::titleImageCB()' - Change the title image file. // void GUI::titleImageCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (w == gui->titleBrowse) { gui->fc->filter("Image Files (*.{bmp,gif,jpg,png})\tWWW Files (*.{htm,html,shtml})"); gui->fc->label("Title Image?"); gui->fc->type(Fl_File_Chooser::SINGLE); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { gui->titleImage->value(file_localize(gui->fc->value(), NULL)); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::outputTypeCB()' - Set the output file type. // void GUI::outputTypeCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (w == gui->outputFile) { gui->outputBrowse->activate(); gui->typePDF->activate(); } else if (gui->typePDF->value()) gui->outputFile->setonly(); else { gui->outputBrowse->deactivate(); gui->typePDF->deactivate(); } gui->title(gui->book_filename, 1); } // // 'GUI::outputPathCB()' - Set the output path. // void GUI::outputPathCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { char filename[1024]; // Name of the output file const char *extension; // Extension of the output file if (w == gui->outputBrowse) { gui->fc->label("Output Path?"); if (gui->outputFile->value()) { gui->fc->type(Fl_File_Chooser::CREATE); if (gui->typeHTML->value()) gui->fc->filter("WWW Files (*.htm*)"); else if (gui->typePDF->value()) gui->fc->filter("PDF Files (*.pdf)"); else gui->fc->filter("PostScript Files (*.ps)"); } else { gui->fc->type(Fl_File_Chooser::DIRECTORY | Fl_File_Chooser::CREATE); gui->fc->filter("*"); } gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { // Get the selected file... strlcpy(filename, file_localize(gui->fc->value(), NULL), sizeof(filename)); extension = file_extension(filename); if (extension[0]) { // Have an extension - check it! if (strcasecmp(extension, "PS") == 0) { gui->typePS->setonly(); outputFormatCB(gui->typePS, gui); } else if (strcasecmp(extension, "PDF") == 0) { gui->typePDF->setonly(); outputFormatCB(gui->typePDF, gui); } } else if (gui->outputFile->value()) { // No extension - add one! if (gui->typeHTML->value()) strlcat(filename, ".html", sizeof(filename)); else if (gui->typePS->value()) strlcat(filename, ".ps", sizeof(filename)); else strlcat(filename, ".pdf", sizeof(filename)); } gui->outputPath->value(filename); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::outputFormatCB()' - Set the output format. // void GUI::outputFormatCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { char filename[1024], // Output filename *ptr; // Pointer to extension const char *ext; // Extension gui->title(gui->book_filename, 1); ext = NULL; // To make GCC happy... if (w == gui->typePDF) { gui->pdfTab->activate(); gui->securityTab->activate(); gui->outputDirectory->deactivate(); gui->outputFile->setonly(); ext = ".pdf"; } else { gui->pdfTab->deactivate(); gui->securityTab->deactivate(); gui->outputDirectory->activate(); } if (w == gui->typeHTMLSep) { gui->outputFile->deactivate(); gui->outputDirectory->setonly(); } else gui->outputFile->activate(); if (w == gui->typeHTML || w == gui->typeHTMLSep) { gui->compression->value(0); gui->jpegCompress->value(0); gui->jpegCompress->deactivate(); gui->jpegGroup->deactivate(); gui->grayscale->value(0); gui->grayscale->deactivate(); gui->pageTab->deactivate(); gui->tocHeaderLeft->deactivate(); gui->tocHeaderCenter->deactivate(); gui->tocHeaderRight->deactivate(); gui->tocFooterLeft->deactivate(); gui->tocFooterCenter->deactivate(); gui->tocFooterRight->deactivate(); ext = ".html"; } else { gui->grayscale->activate(); gui->pageTab->activate(); gui->tocHeaderLeft->activate(); gui->tocHeaderCenter->activate(); gui->tocHeaderRight->activate(); gui->tocFooterLeft->activate(); gui->tocFooterCenter->activate(); gui->tocFooterRight->activate(); if (w == gui->typePDF || !gui->ps1->value()) gui->jpegCompress->activate(); else gui->jpegCompress->deactivate(); } if (w == gui->typePS) { gui->psTab->activate(); if (gui->ps1->value()) gui->psCommands->deactivate(); else gui->psCommands->activate(); ext = ".ps"; } else gui->psTab->deactivate(); if ((w == gui->typePDF && !gui->pdf11->value()) || (w == gui->typePS && gui->ps3->value())) gui->compGroup->activate(); else gui->compGroup->deactivate(); // Update the output filename's extension if we are writing to a file // and the output filename is not blank... if (gui->outputFile->value() && gui->outputPath->value()[0]) { strlcpy(filename, gui->outputPath->value(), sizeof(filename)); if ((ptr = strrchr(filename, '/')) == NULL) ptr = filename; if ((ptr = strrchr(ptr, '.')) == NULL) strlcat(filename, ext, sizeof(filename)); else strlcpy(ptr, ext, sizeof(filename) - (ptr - filename)); gui->outputPath->value(filename); } } // // 'GUI::jpegCB()' - Handle JPEG changes. // void GUI::jpegCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); gui->title(gui->book_filename, 1); if (gui->jpegCompress->value()) gui->jpegGroup->activate(); else gui->jpegGroup->deactivate(); } // // 'GUI::sizeCB()' - Change the page size based on the menu selection. // void GUI::sizeCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); gui->title(gui->book_filename, 1); gui->pageSize->value(gui->pageSizeMenu->text(gui->pageSizeMenu->value())); } // // 'GUI::tocCB()' - Handle Table-of-Contents changes. // void GUI::tocCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); gui->title(gui->book_filename, 1); if (gui->tocLevels->value()) { gui->numberedToc->activate(); gui->tocHeader->activate(); gui->tocFooter->activate(); gui->tocTitle->activate(); } else { gui->numberedToc->deactivate(); gui->tocHeader->deactivate(); gui->tocFooter->deactivate(); gui->tocTitle->deactivate(); } } // // 'GUI::pdfCB()' - Handle PDF version changes. // void GUI::pdfCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); if (gui->typePDF->value()) { if (w == gui->pdf11) gui->compGroup->deactivate(); else gui->compGroup->activate(); } gui->title(gui->book_filename, 1); } // // 'GUI::encryptionCB()' - Handle PDF encryption changes. // void GUI::encryptionCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (w == gui->encryptionYes) { gui->permissions->activate(); gui->ownerPassword->activate(); gui->userPassword->activate(); } else if (w == gui->encryptionNo) { gui->permissions->deactivate(); gui->ownerPassword->deactivate(); gui->userPassword->deactivate(); } gui->title(gui->book_filename, 1); } // // 'GUI::effectCB()' - Handle PDF effect changes. // void GUI::effectCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); if (gui->pageEffect->value()) { gui->pageDuration->activate(); gui->effectDuration->activate(); } else { gui->pageDuration->deactivate(); gui->effectDuration->deactivate(); } gui->title(gui->book_filename, 1); } // // 'GUI::psCB()' - Handle PS language level changes. // void GUI::psCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (w == gui->ps1) { gui->jpegCompress->deactivate(); gui->psCommands->deactivate(); gui->psCommands->value(0); } else { gui->jpegCompress->activate(); gui->psCommands->activate(); } if (gui->typePS->value()) { if (w == gui->ps3) gui->compGroup->activate(); else gui->compGroup->deactivate(); } gui->title(gui->book_filename, 1); } // // 'GUI::htmlEditorCB()' - Change the HTML editor. // void GUI::htmlEditorCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { const char *filename; // New HTML editor file char command[1024]; // Command string if (w == gui->htmlBrowse) { # if defined(WIN32) || defined(__EMX__) gui->fc->filter("Program Files (*.exe)"); # else gui->fc->filter("*"); # endif // WIN32 || __EMX__ gui->fc->label("HTML Editor?"); gui->fc->type(Fl_File_Chooser::SINGLE); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { filename = gui->fc->value(); if (strstr(filename, "netscape") != NULL || strstr(filename, "NETSCAPE") != NULL) #if defined(WIN32) || defined(__EMX__) snprintf(command, sizeof(command), "%s -edit \"%%s\"", filename); #else snprintf(command, sizeof(command), "%s -remote \'editFile(%%s)\'", filename); #endif // WIN32 || __EMX__ else snprintf(command, sizeof(command), "%s \"%%s\"", filename); gui->htmlEditor->value(command); } } strlcpy(HTMLEditor, gui->htmlEditor->value(), sizeof(HTMLEditor)); } // // 'GUI::tooltipCB()' - Enable or disable tooltips. // void GUI::tooltipCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI interface { REF(gui); Tooltips = ((Fl_Button *)w)->value(); Fl_Tooltip::enable(Tooltips); } // // 'GUI::skinCB()' - Enable or disable the modern "skin". // void GUI::skinCB(Fl_Widget *, // I - Widget GUI *gui) // I - GUI interface { ModernSkin = gui->modern_skin->value(); Fl::scheme(ModernSkin ? "plastic" : ""); if (ModernSkin) { // Use alternate colors for the "modern" look-n-feel... gui->tabs->selection_color(FL_BLUE); gui->grayscale->color2(FL_RED); gui->titlePage->color2(FL_RED); gui->jpegCompress->color2(FL_RED); gui->pageDuplex->color2(FL_RED); gui->landscape->color2(FL_RED); gui->numberedToc->color2(FL_RED); gui->psCommands->color2(FL_RED); gui->xrxComments->color2(FL_RED); gui->links->color2(FL_RED); gui->embedFonts->color2(FL_RED); gui->permPrint->color2(FL_RED); gui->permModify->color2(FL_RED); gui->permCopy->color2(FL_RED); gui->permAnnotate->color2(FL_RED); gui->tooltips->color2(FL_RED); gui->modern_skin->color2(FL_RED); gui->strict_html->color2(FL_RED); gui->overflow_errors->color2(FL_RED); gui->progressBar->color2(FL_BLUE); gui->progressBar->box(FL_UP_BOX); } else { // Use standard colors... gui->tabs->selection_color(FL_GRAY); gui->grayscale->color2(FL_BLACK); gui->titlePage->color2(FL_BLACK); gui->jpegCompress->color2(FL_BLACK); gui->pageDuplex->color2(FL_BLACK); gui->landscape->color2(FL_BLACK); gui->numberedToc->color2(FL_BLACK); gui->psCommands->color2(FL_BLACK); gui->xrxComments->color2(FL_BLACK); gui->links->color2(FL_BLACK); gui->embedFonts->color2(FL_BLACK); gui->permPrint->color2(FL_BLACK); gui->permModify->color2(FL_BLACK); gui->permCopy->color2(FL_BLACK); gui->permAnnotate->color2(FL_BLACK); gui->tooltips->color2(FL_BLACK); gui->modern_skin->color2(FL_BLACK); gui->strict_html->color2(FL_BLACK); gui->overflow_errors->color2(FL_BLACK); gui->progressBar->color2(FL_YELLOW); gui->progressBar->box(FL_DOWN_BOX); } } // // 'GUI::saveOptionsCB()' - Save preferences... // void GUI::saveOptionsCB(Fl_Widget *w, GUI *gui) { gui->loadSettings(); prefs_save(); } // // 'GUI::bodyColorCB()' - Set the body color. // void GUI::bodyColorCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { uchar r, g, b; // Color values int color; // Color from bar color char newcolor[255]; // New color string if (w == gui->bodyLookup) { if (sscanf(gui->bodyColor->value(), "#%x", &color) == 1) { r = color >> 16; g = (color >> 8) & 255; b = color & 255; } else { r = 191; g = 191; b = 191; } if (fl_color_chooser("Body Color?", r, g, b)) { sprintf(newcolor, "#%02x%02x%02x", r, g, b); gui->bodyColor->value(newcolor); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::bodyImageCB()' - Set the body image. // void GUI::bodyImageCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (w == gui->bodyBrowse) { gui->fc->filter("Image Files (*.{bmp,gif,jpg,png})"); gui->fc->label("Body Image?"); gui->fc->type(Fl_File_Chooser::SINGLE); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { gui->bodyImage->value(file_localize(gui->fc->value(), NULL)); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::textColorCB()' - Set the text color. // void GUI::textColorCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { uchar r, g, b; // Color values int color; // Color from bar color char newcolor[255]; // New color string if (w == gui->textLookup) { if (sscanf(gui->textColor->value(), "#%x", &color) == 1) { r = color >> 16; g = (color >> 8) & 255; b = color & 255; } else { r = 0; g = 0; b = 0; } if (fl_color_chooser("Text Color?", r, g, b)) { sprintf(newcolor, "#%02x%02x%02x", r, g, b); gui->textColor->value(newcolor); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::linkColorCB()' - Set the link color. // void GUI::linkColorCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { uchar r, g, b; // Color values int color; // Color from bar color char newcolor[255]; // New color string if (w == gui->linkLookup) { if (sscanf(gui->linkColor->value(), "#%x", &color) == 1) { r = color >> 16; g = (color >> 8) & 255; b = color & 255; } else { r = 0; g = 0; b = 255; } if (fl_color_chooser("Link Color?", r, g, b)) { sprintf(newcolor, "#%02x%02x%02x", r, g, b); gui->linkColor->value(newcolor); gui->title(gui->book_filename, 1); } } else gui->title(gui->book_filename, 1); } // // 'GUI::helpCB()' - Show on-line help... // void GUI::helpCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { char link[1024]; // filename#link REF(w); snprintf(link, sizeof(link), "%s/help.html#%s", help_dir, gui->tabs->value()->label()); gui->help->load(link); gui->help->show(); } // // 'GUI::newBookCB()' - Create a new book. // void GUI::newBookCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); if (!gui->checkSave()) return; gui->newBook(); } // // 'GUI::openBookCB()' - Open an existing book. // void GUI::openBookCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); if (!gui->checkSave()) return; gui->fc->filter("Book Files (*.book)"); gui->fc->label("Book File?"); gui->fc->type(Fl_File_Chooser::SINGLE); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) gui->loadBook(gui->fc->value()); } // // 'GUI::saveBookCB()' - Save the current book to disk. // void GUI::saveBookCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { if (gui->book_filename[0] == '\0') saveAsBookCB(w, gui); else gui->saveBook(gui->book_filename); } // // 'GUI::saveAsBookCB()' - Save the current book to disk to a new file. // void GUI::saveAsBookCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { const char *filename; // Book filename char realname[1024]; // Real filename const char *extension; // Filename extension const char *newfile; // New filename const char *dir; // Book directory REF(w); gui->fc->filter("Book Files (*.book)"); gui->fc->label("Book File?"); gui->fc->type(Fl_File_Chooser::CREATE); gui->fc->show(); while (gui->fc->shown()) Fl::wait(); if (gui->fc->count()) { filename = gui->fc->value(); if (access(filename, 0) == 0) if (!fl_choice("File already exists! OK to overwrite?", "Cancel", "Overwrite", NULL)) return; extension = file_extension(filename); if (!extension[0]) { // No extension! Add .book to the name... snprintf(realname, sizeof(realname), "%s.book", filename); filename = realname; } else if (strcasecmp(extension, "pdf") == 0 || strcasecmp(extension, "html") == 0 || strcasecmp(extension, "ps") == 0) { gui->tabs->value(gui->outputTab); gui->outputPath->value(file_localize(filename, NULL)); gui->outputFile->setonly(); outputTypeCB(gui->outputFile, gui); if (strcasecmp(extension, "pdf") == 0) { gui->typePDF->setonly(); outputFormatCB(gui->typePDF, gui); } else if (strcasecmp(extension, "html") == 0) { gui->typeHTML->setonly(); outputFormatCB(gui->typeHTML, gui); } else { gui->typePS->setonly(); outputFormatCB(gui->typePS, gui); } fl_alert("To generate a HTML, PDF, or PS file you must click on " "the GENERATE button. The SAVE and SAVE AS buttons " "save the current book file."); return; } dir = file_directory(filename); for (int i = 1; i <= gui->inputFiles->size(); i ++) { newfile = file_localize(gui->inputFiles->text(i), dir); gui->inputFiles->text(i, newfile); } newfile = file_localize(gui->logoImage->value(), dir); gui->logoImage->value(newfile); newfile = file_localize(gui->titleImage->value(), dir); gui->titleImage->value(newfile); newfile = file_localize(gui->bodyImage->value(), dir); gui->bodyImage->value(newfile); newfile = file_localize(gui->outputPath->value(), dir); gui->outputPath->value(newfile); chdir(dir); gui->saveBook(filename); } } // // 'GUI::generateBookCB()' - Generate the current book. // void GUI::generateBookCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { int i, // Looping var count; // Number of files char temp[1024]; // Temporary string FILE *docfile; // Document file tree_t *document, // Master HTML document *file, // HTML document file *toc; // Table of contents const char *filename; // HTML filename char base[1024], // Base directory of HTML file bookbase[1024]; // Base directory of book file REF(w); // Do we have an output filename? if (gui->outputPath->size() == 0) { gui->tabs->value(gui->outputTab); gui->outputPath->take_focus(); fl_alert("You must specify an output directory or filename before " "you click on GENERATE."); return; } // Disable the GUI while we generate... gui->controls->deactivate(); gui->window->cursor(FL_CURSOR_WAIT); // Set global vars used for converting the HTML files to XYZ format... strlcpy(bookbase, file_directory(gui->book_filename), sizeof(bookbase)); Verbosity = 1; gui->loadSettings(); strlcpy(LogoImage, gui->logoImage->value(), sizeof(LogoImage)); strlcpy(TitleImage, gui->titleImage->value(), sizeof(TitleImage)); strlcpy(OutputPath, gui->outputPath->value(), sizeof(OutputPath)); OutputFiles = gui->outputDirectory->value(); if (gui->typeBook->value()) OutputType = OUTPUT_BOOK; else if (gui->typeContinuous->value()) OutputType = OUTPUT_CONTINUOUS; else OutputType = OUTPUT_WEBPAGES; strlcpy(UserPassword, gui->userPassword->value(), sizeof(UserPassword)); strlcpy(OwnerPassword, gui->ownerPassword->value(), sizeof(OwnerPassword)); if (gui->typePDF->value()) PSLevel = 0; else if (gui->ps1->value()) PSLevel = 1; else if (gui->ps2->value()) PSLevel = 2; else PSLevel = 3; _htmlPPI = 72.0f * _htmlBrowserWidth / (PageWidth - PageLeft - PageRight); file_proxy(gui->proxy->value()); Errors = 0; gui->error_list->clear(); /* * Load the input files... */ count = gui->inputFiles->size(); document = NULL; for (i = 1; i <= count; i ++) { filename = file_find(Path, gui->inputFiles->text(i)); if (filename != NULL && (docfile = fopen(filename, "rb")) != NULL) { /* * Read from a file... */ snprintf(temp, sizeof(temp), "Loading \"%s\"...", filename); gui->progress(100 * i / count, temp); strlcpy(base, file_directory(gui->inputFiles->text(i)), sizeof(base)); file = htmlAddTree(NULL, MARKUP_FILE, NULL); htmlSetVariable(file, (uchar *)"_HD_FILENAME", (uchar *)file_basename(filename)); htmlSetVariable(file, (uchar *)"_HD_BASE", (uchar *)base); htmlReadFile(file, docfile, base); fclose(docfile); if (file->child != NULL) { if (document == NULL) document = file; else { while (document->next != NULL) document = document->next; document->next = file; file->prev = document; } } else htmlDeleteTree(file); } else progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open \"%s\" for reading!", gui->inputFiles->text(i)); } /* * We *must* have a document to process... */ if (document == NULL) progress_error(HD_ERROR_NO_FILES, "No HTML files to format, cannot generate document!"); else { /* * Find the first one in the list... */ while (document->prev != NULL) document = document->prev; // Fix links... htmlFixLinks(document, document); // Show debug info... htmlDebugStats("Document Tree", document); // Build a table of contents for the documents... if (OutputType == OUTPUT_BOOK && TocLevels > 0) toc = toc_build(document); else toc = NULL; // Generate the output file(s). if (gui->typeHTML->value()) html_export(document, toc); else if (gui->typeHTMLSep->value()) htmlsep_export(document, toc); else pspdf_export(document, toc); htmlDeleteTree(document); htmlDeleteTree(toc); file_cleanup(); image_flush_cache(); } if (Errors == 0) fl_message("Document generated successfully!"); else if (fl_choice("%d error%s occurred while generating document.\n" "Would you like to see the list?", "Continue", "View Error List", NULL, Errors, Errors == 1 ? "" : "s")) { gui->error_window->show(); while (gui->error_window->shown()) Fl::wait(); } gui->controls->activate(); gui->window->cursor(FL_CURSOR_DEFAULT); gui->progress(0); } // // 'GUI::closeBookCB()' - Close the current book. // void GUI::closeBookCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); if (gui->checkSave()) gui->hide(); } // // 'GUI::errorCB()' - Close the error window. // void GUI::errorCB(Fl_Widget *w, // I - Widget GUI *gui) // I - GUI { REF(w); gui->error_window->hide(); } // // 'aboutCloseCB()' - Close the about window. // static void aboutCloseCB(Fl_Widget *w) // I - Widget { if (w && w->window()) w->window()->hide(); } // // 'GUI::showAboutCB()' - Show the about window. // void GUI::showAboutCB(void) { Fl_Window *about; // About window Fl_Group *group; // Group Fl_Box *label; // Labels Fl_Help_View *text; // Help text Fl_Button *button; // Close button Fl_Pixmap logo(htmldoc_xpm); // Logo image about = new Fl_Window(410, 300, "About HTMLDOC"); about->modal(); about->hotspot(about); group = new Fl_Group(10, 10, 390, 245, "About HTMLDOC"); group->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE); group->labelcolor(FL_BLUE); group->labelfont(FL_HELVETICA_BOLD); group->labelsize(18); group->box(FL_THIN_UP_BOX); label = new Fl_Box(20, 45, 35, 35); label->image(&logo); label = new Fl_Box(60, 45, 330, 35, "HTMLDOC " SVERSION "\nCopyright 1997-2006 by Easy Software Products" ); label->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_WRAP); text = new Fl_Help_View(20, 90, 370, 155); text->value( "HTMLDOC converts HTML files and web pages to PDF and PostScript.\n\n" "

    HTMLDOC is available both as free software under the terms of " "the GNU General Public License and as commercial software via " "the HTMLDOC Basic product which provides the HTMLDOC software in " "convenient, installable packages for your operating system of " "choice. Commercial support is also available in 1-year " "increments. All products provide financial support for the " "continued development of HTMLDOC as an open source product.\n\n" "

    For more information, please visit us on the web at the following " "URL:\n" "

    \n\n"
        "    http://www.easysw.com/htmldoc/\n"
        "
    \n" ); text->textsize(FL_NORMAL_SIZE); group->end(); button = new Fl_Button(340, 265, 60, 25, "Close"); button->callback((Fl_Callback *)aboutCloseCB); about->end(); about->show(); while (about->shown()) Fl::wait(); delete about; } #endif // HAVE_LIBFLTK // // End of "$Id: gui.cxx 1481 2006-04-03 15:41:08Z mike $". // htmldoc-1.8.27/htmldoc/iso8859.cxx0100664000212600000240000002443110412647623015241 0ustar mikeuser/* * "$Id: iso8859.cxx 1479 2006-03-30 03:25:07Z mike $" * * ISO-8859-1 conversion routines for HTMLDOC, an HTML document * processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * iso8859() - Return the 8-bit character value of a glyph name. * iso8859() - Return the glyph name of an 8-bit character value. * compare_lut() - Compare two glyphs. */ /* * Include necessary headers. */ #include #include #include "html.h" #include "types.h" /* * Lookup table structure... */ typedef struct { uchar name[12]; int value; } lut_t; static lut_t iso8859_numbers[] = { { "AElig", 198 }, { "Aacute", 193 }, { "Acirc", 194 }, { "Agrave", 192 }, { "Alpha", 913 }, { "Aring", 197 }, { "Atilde", 195 }, { "Auml", 196 }, { "Beta", 914 }, { "Ccedil", 199 }, { "Chi", 935 }, { "Dagger", 8225 }, { "Delta", 916 }, { "ETH", 208 }, { "Eacute", 201 }, { "Ecirc", 202 }, { "Egrave", 200 }, { "Epsilon", 917 }, { "Eta", 919 }, { "Euml", 203 }, { "Gamma", 915 }, { "Iacute", 205 }, { "Icirc", 206 }, { "Igrave", 204 }, { "Iota", 921 }, { "Iuml", 207 }, { "Kappa", 922 }, { "Lambda", 923 }, { "Mu", 924 }, { "Ntilde", 209 }, { "Nu", 925 }, { "OElig", 338 }, { "Oacute", 211 }, { "Ocirc", 212 }, { "Ograve", 210 }, { "Omega", 937 }, { "Omicron", 927 }, { "Oslash", 216 }, { "Otilde", 213 }, { "Ouml", 214 }, { "Phi", 934 }, { "Pi", 928 }, { "Prime", 8243 }, { "Psi", 936 }, { "Rho", 929 }, { "Scaron", 352 }, { "Sigma", 931 }, { "THORN", 222 }, { "Tau", 932 }, { "Theta", 920 }, { "Uacute", 218 }, { "Ucirc", 219 }, { "Ugrave", 217 }, { "Upsilon", 933 }, { "Uuml", 220 }, { "Xi", 926 }, { "Yacute", 221 }, { "Yuml", 376 }, { "Zeta", 918 }, { "aacute", 225 }, { "acirc", 226 }, { "acute", 180 }, { "aelig", 230 }, { "agrave", 224 }, { "alefsym", 8501 }, { "alpha", 945 }, { "amp", 38 }, { "and", 8743 }, { "ang", 8736 }, { "aring", 229 }, { "asymp", 8776 }, { "atilde", 227 }, { "auml", 228 }, { "bdquo", 8222 }, { "beta", 946 }, { "brvbar", 166 }, { "bull", 8226 }, { "cap", 8745 }, { "ccedil", 231 }, { "cedil", 184 }, { "cent", 162 }, { "chi", 967 }, { "circ", 710 }, { "clubs", 9827 }, { "cong", 8773 }, { "copy", 169 }, { "crarr", 8629 }, { "cup", 8746 }, { "curren", 164 }, { "dArr", 8659 }, { "dagger", 8224 }, { "darr", 8595 }, { "deg", 176 }, { "delta", 948 }, { "diams", 9830 }, { "divide", 247 }, { "eacute", 233 }, { "ecirc", 234 }, { "egrave", 232 }, { "empty", 8709 }, { "emsp", 8195 }, { "ensp", 8194 }, { "epsilon", 949 }, { "equiv", 8801 }, { "eta", 951 }, { "eth", 240 }, { "euml", 235 }, { "euro", 8364 }, { "exist", 8707 }, { "fnof", 402 }, { "forall", 8704 }, { "frac12", 189 }, { "frac14", 188 }, { "frac34", 190 }, { "frasl", 8260 }, { "gamma", 947 }, { "ge", 8805 }, { "gt", 62 }, { "hArr", 8660 }, { "harr", 8596 }, { "hearts", 9829 }, { "hellip", 8230 }, { "iacute", 237 }, { "icirc", 238 }, { "iexcl", 161 }, { "igrave", 236 }, { "image", 8465 }, { "infin", 8734 }, { "int", 8747 }, { "iota", 953 }, { "iquest", 191 }, { "isin", 8712 }, { "iuml", 239 }, { "kappa", 954 }, { "lArr", 8656 }, { "lambda", 955 }, { "lang", 9001 }, { "laquo", 171 }, { "larr", 8592 }, { "lceil", 8968 }, { "ldquo", 8220 }, { "le", 8804 }, { "lfloor", 8970 }, { "lowast", 8727 }, { "loz", 9674 }, { "lrm", 8206 }, { "lsaquo", 8249 }, { "lsquo", 8216 }, { "lt", 60 }, { "macr", 175 }, { "mdash", 8212 }, { "micro", 181 }, { "middot", 183 }, { "minus", 8722 }, { "mu", 956 }, { "nabla", 8711 }, { "nbsp", 160 }, { "ndash", 8211 }, { "ne", 8800 }, { "ni", 8715 }, { "not", 172 }, { "notin", 8713 }, { "nsub", 8836 }, { "ntilde", 241 }, { "nu", 957 }, { "oacute", 243 }, { "ocirc", 244 }, { "oelig", 339 }, { "ograve", 242 }, { "oline", 8254 }, { "omega", 969 }, { "omicron", 959 }, { "oplus", 8853 }, { "or", 8744 }, { "ordf", 170 }, { "ordm", 186 }, { "oslash", 248 }, { "otilde", 245 }, { "otimes", 8855 }, { "ouml", 246 }, { "para", 182 }, { "part", 8706 }, { "permil", 8240 }, { "perp", 8869 }, { "phi", 966 }, { "pi", 960 }, { "piv", 982 }, { "plusmn", 177 }, { "pound", 163 }, { "prime", 8242 }, { "prod", 8719 }, { "prop", 8733 }, { "psi", 968 }, { "quot", 34 }, { "rArr", 8658 }, { "radic", 8730 }, { "rang", 9002 }, { "raquo", 187 }, { "rarr", 8594 }, { "rceil", 8969 }, { "rdquo", 8221 }, { "real", 8476 }, { "reg", 174 }, { "rfloor", 8971 }, { "rho", 961 }, { "rlm", 8207 }, { "rsaquo", 8250 }, { "rsquo", 8217 }, { "sbquo", 8218 }, { "scaron", 353 }, { "sdot", 8901 }, { "sect", 167 }, { "shy", 173 }, { "sigma", 963 }, { "sigmaf", 962 }, { "sim", 8764 }, { "spades", 9824 }, { "sub", 8834 }, { "sube", 8838 }, { "sum", 8721 }, { "sup", 8835 }, { "sup1", 185 }, { "sup2", 178 }, { "sup3", 179 }, { "supe", 8839 }, { "szlig", 223 }, { "tau", 964 }, { "there4", 8756 }, { "theta", 952 }, { "thetasym", 977 }, { "thinsp", 8201 }, { "thorn", 254 }, { "tilde", 732 }, { "times", 215 }, { "trade", 8482 }, { "uArr", 8657 }, { "uacute", 250 }, { "uarr", 8593 }, { "ucirc", 251 }, { "ugrave", 249 }, { "uml", 168 }, { "upsih", 978 }, { "upsilon", 965 }, { "uuml", 252 }, { "weierp", 8472 }, { "xi", 958 }, { "yacute", 253 }, { "yen", 165 }, { "yuml", 255 }, { "zeta", 950 }, { "zwj", 8205 }, { "zwnj", 8204 } }; static lut_t *iso8859_names[256]; static int compare_lut(lut_t *, lut_t *); /* * 'iso8859()' - Return the 8-bit character value of a glyph name. */ uchar /* O - ISO-8859-1 equivalent */ iso8859(uchar *name) /* I - Glyph name */ { lut_t key, /* Lookup table key */ *match; /* Matching entry pointer */ int ch; /* Character */ if (strlen((char *)name) == 1) return (name[0]); else if (name[0] == '#') { // Return a decimal or hex character... if (name[1] == 'x') ch = strtol((char *)name + 2, NULL, 16); else ch = strtol((char *)name + 1, NULL, 10); if (ch > 0xffff || ch <= 0) return (0); } else { strlcpy((char *)key.name, (char *)name, sizeof(key.name)); match = (lut_t *)bsearch(&key, iso8859_numbers, sizeof(iso8859_numbers) / sizeof(iso8859_numbers[0]), sizeof(iso8859_numbers[0]), (int (*)(const void *, const void *))compare_lut); if (match == NULL) return (0); else ch = match->value; } if (ch > 0x7f) { // Lookup Unicode value in the current charset... const char *glyph; char uniglyph[32]; int newch; if (!_htmlInitialized) htmlSetCharSet("iso-8859-1"); if ((glyph = _htmlGlyphsAll[ch]) == NULL) { sprintf(uniglyph, "uni%04x", ch); glyph = uniglyph; } for (newch = 128; newch < 256; newch ++) if (_htmlGlyphs[newch] && !strcmp(_htmlGlyphs[newch], glyph)) break; if (newch >= 256) { // Not part of the standard charset, see if we have room for a // few extras... for (newch = 128; newch < 256; newch ++) if (!_htmlGlyphs[newch]) { // Yes, assign this character to it... if (glyph == uniglyph) _htmlGlyphsAll[ch] = _htmlGlyphs[newch] = strdup(glyph); else _htmlGlyphs[newch] = glyph; _htmlUnicode[newch] = ch; // Reload font widths... htmlLoadFontWidths(); // Return the new character... return (newch); } // No room, return nul... return (0); } else ch = newch; } return (ch); } /* * 'iso8859()' - Return the glyph name of an 8-bit character value. */ uchar * /* O - Glyph name */ iso8859(uchar value) /* I - ISO-8859-1 equivalent */ { int i; /* Looping var */ int ch; /* Current character */ static int first_time = 1; /* First time called? */ static uchar buf[255]; /* Character buffer */ if (first_time) { memset(iso8859_names, 0, sizeof(iso8859_names)); for (i = 0; i < (int)(sizeof(iso8859_numbers) / sizeof(iso8859_numbers[0])); i ++) if ((ch = iso8859_numbers[i].value) < 128) iso8859_names[ch] = iso8859_numbers + i; else { // Lookup Unicode value in the current charset... const char *glyph; char uniglyph[32]; if ((glyph = _htmlGlyphsAll[ch]) == NULL) { sprintf(uniglyph, "uni%04x", ch); glyph = uniglyph; } for (ch = 128; ch < 256; ch ++) if (_htmlGlyphs[ch] && !strcmp(_htmlGlyphs[ch], glyph)) { iso8859_names[ch] = iso8859_numbers + i; break; } } first_time = 0; } if (iso8859_names[value] == NULL) { buf[0] = value; buf[1] = '\0'; } else sprintf((char *)buf, "&%s;", iso8859_names[value]->name); return (buf); } /* * 'compare_lut()' - Compare two glyphs. */ static int /* O - 0 if equal, -1 if ab */ compare_lut(lut_t *a, /* I - First glyph */ lut_t *b) /* I - Second glyph */ { return (strcmp((char *)a->name, (char *)b->name)); } /* * End of "$Id: iso8859.cxx 1479 2006-03-30 03:25:07Z mike $". */ htmldoc-1.8.27/htmldoc/toc.cxx0100664000212600000240000002560610232770600014673 0ustar mikeuser/* * "$Id: toc.cxx 1397 2005-04-24 19:20:32Z mike $" * * Table of contents generator for HTMLDOC, a HTML document processing * program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * toc_build() - Build a table of contents of the given HTML tree. * add_heading() - Add heading records to the given toc entry... * parse_tree() - Parse headings from the given tree... */ /* * Include necessary headers. */ #include "htmldoc.h" /* * Local functions... */ static void parse_tree(tree_t *t); /* * Local globals... */ static int heading_numbers[15]; static uchar heading_types[15] = { '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' }; static int last_level; static tree_t *heading_parents[15]; /* * 'toc_build()' - Build a table of contents of the given HTML tree. */ tree_t * /* O - Table of contents tree */ toc_build(tree_t *tree) /* I - Document tree */ { tree_t *toc, /* TOC tree pointer */ *title, /* Title entry */ *link; /* Link entry */ TocDocCount = 0; last_level = 0; /* Currently at the "top" level */ heading_numbers[0] = 0; /* Start at 1 (see below) */ toc = htmlAddTree(NULL, MARKUP_BODY, NULL); title = htmlAddTree(toc, MARKUP_H1, NULL); htmlSetVariable(title, (uchar *)"ALIGN", (uchar *)"CENTER"); link = htmlAddTree(title, MARKUP_A, NULL); htmlSetVariable(link, (uchar *)"NAME", (uchar *)"CONTENTS"); htmlAddTree(link, MARKUP_NONE, (uchar *)TocTitle); heading_parents[0] = toc; heading_parents[1] = toc; heading_parents[2] = toc; heading_parents[3] = toc; heading_parents[4] = toc; heading_parents[5] = toc; heading_parents[6] = toc; heading_parents[7] = toc; heading_parents[8] = toc; heading_parents[9] = toc; heading_parents[10] = toc; heading_parents[11] = toc; heading_parents[12] = toc; heading_parents[13] = toc; heading_parents[14] = toc; parse_tree(tree); return (toc); } /* * 'add_heading()' - Add heading records to the given toc entry... */ void add_heading(tree_t *toc, /* I - Table of contents */ tree_t *heading) /* I - Heading entry */ { while (heading != NULL) { if (heading->child != NULL) add_heading(toc, heading->child); else if (heading->markup == MARKUP_NONE && heading->data != NULL) htmlAddTree(toc, MARKUP_NONE, heading->data); heading = heading->next; } } /* * 'parse_tree()' - Parse headings from the given tree... * * Note: We also add anchor points and numbers as necessary... */ static void /* O - Tree of TOC entries */ parse_tree(tree_t *t) /* I - Document tree */ { tree_t *parent; /* Parent of toc entry (DD or LI) */ tree_t *target, /* Link target */ *temp; /* Looping var */ uchar heading[255], /* Heading numbers */ link[255], /* Actual link */ baselink[255], /* Base link (numbered) */ *existing; /* Existing link string */ int i, level; /* Header level */ uchar *var; /* Starting value/type for this level */ static const char *ones[10] = { "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix" }, *tens[10] = { "", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc" }, *hundreds[10] = { "", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm" }, *ONES[10] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" }, *TENS[10] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" }, *HUNDREDS[10] = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" }; while (t != NULL) { switch (t->markup) { case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : level = t->markup - MARKUP_H1; if ((level - last_level) > 1) { /* * This step necessary to keep page numbers synced up... */ level = last_level + 1; t->markup = (markup_t)(MARKUP_H1 + level); } if ((var = htmlGetVariable(t, (uchar *)"VALUE")) != NULL) heading_numbers[level] = atoi((char *)var); else heading_numbers[level] ++; if (level == 0) TocDocCount ++; if ((var = htmlGetVariable(t, (uchar *)"TYPE")) != NULL) heading_types[level] = var[0]; for (i = level + 1; i < 15; i ++) heading_numbers[i] = 0; heading[0] = '\0'; baselink[0] = '\0'; for (i = 0; i <= level; i ++) { if (i == 0) sprintf((char *)baselink + strlen((char *)baselink), "%d", TocDocCount); else sprintf((char *)baselink + strlen((char *)baselink), "%d", heading_numbers[i]); switch (heading_types[i]) { case '1' : sprintf((char *)heading + strlen((char *)heading), "%d", heading_numbers[i]); break; case 'a' : if (heading_numbers[i] > 26) sprintf((char *)heading + strlen((char *)heading), "%c%c", 'a' + (heading_numbers[i] / 26) - 1, 'a' + (heading_numbers[i] % 26) - 1); else sprintf((char *)heading + strlen((char *)heading), "%c", 'a' + heading_numbers[i] - 1); break; case 'A' : if (heading_numbers[i] > 26) sprintf((char *)heading + strlen((char *)heading), "%c%c", 'A' + (heading_numbers[i] / 26) - 1, 'A' + (heading_numbers[i] % 26) - 1); else sprintf((char *)heading + strlen((char *)heading), "%c", 'A' + heading_numbers[i] - 1); break; case 'i' : sprintf((char *)heading + strlen((char *)heading), "%s%s%s", hundreds[heading_numbers[i] / 100], tens[(heading_numbers[i] / 10) % 10], ones[heading_numbers[i] % 10]); break; case 'I' : sprintf((char *)heading + strlen((char *)heading), "%s%s%s", HUNDREDS[heading_numbers[i] / 100], TENS[(heading_numbers[i] / 10) % 10], ONES[heading_numbers[i] % 10]); break; } if (i < level) { strlcat((char *)heading, ".", sizeof(heading)); strlcat((char *)baselink, "_", sizeof(baselink)); } } /* * See if we have an existing for this heading... */ existing = NULL; if (t->parent != NULL && t->parent->markup == MARKUP_A) existing = htmlGetVariable(t->parent, (uchar *)"NAME"); if (existing == NULL && t->child != NULL && t->child->markup == MARKUP_A) existing = htmlGetVariable(t->child, (uchar *)"NAME"); if (existing != NULL && strlen((char *)existing) >= 124) /* Max size of link name */ existing = NULL; if (existing != NULL) sprintf((char *)link, "#%s", existing); else sprintf((char *)link, "#%s", baselink); /* * Number the headings as needed... */ if (TocNumbers) { strlcat((char *)heading, " ", sizeof(heading)); htmlInsertTree(t, MARKUP_NONE, heading); } /* * Add the heading to the table of contents... */ if (level < TocLevels) { if (level > last_level) { if (heading_parents[last_level]->last_child && level > 1) heading_parents[level] = htmlAddTree(heading_parents[last_level]->last_child, MARKUP_UL, NULL); else heading_parents[level] = htmlAddTree(heading_parents[last_level], MARKUP_UL, NULL); DEBUG_printf(("level=%d, last_level=%d, created new UL parent %p\n", level, last_level, heading_parents[level])); } if (level == 0) { if (last_level == 0) { htmlAddTree(heading_parents[level], MARKUP_BR, NULL); htmlAddTree(heading_parents[level], MARKUP_BR, NULL); } parent = htmlAddTree(heading_parents[level], MARKUP_B, NULL); } else parent = htmlAddTree(heading_parents[level], MARKUP_LI, NULL); DEBUG_printf(("parent=%p\n", parent)); if ((var = htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC")) != NULL) htmlSetVariable(parent, (uchar *)"_HD_OMIT_TOC", var); if (TocLinks) { /* * Add a link for the toc... */ parent = htmlAddTree(parent, MARKUP_A, NULL); htmlSetVariable(parent, (uchar *)"HREF", link); /* * Insert a NAME marker if needed and reparent all the * heading children. */ if (existing == NULL) { /* * Add NAME to existing A element, if present. */ if (t->parent != NULL && t->parent->markup == MARKUP_A) htmlSetVariable(t->parent, (uchar *)"NAME", baselink); else if (t->child != NULL && t->child->markup == MARKUP_A) htmlSetVariable(t->child, (uchar *)"NAME", baselink); else { target = htmlNewTree(t, MARKUP_A, NULL); htmlSetVariable(target, (uchar *)"NAME", baselink); for (temp = t->child; temp != NULL; temp = temp->next) temp->parent = target; target->child = t->child; t->child = target; } } } add_heading(parent, t->child); } last_level = level; break; default : if (t->child != NULL) parse_tree(t->child); break; } t = t->next; } } /* * End of "$Id: toc.cxx 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/progress.cxx0100664000212600000240000001101210275372705015747 0ustar mikeuser/* * "$Id: progress.cxx 1421 2005-08-07 11:51:33Z mike $" * * Progress functions for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * progress_error() - Display an error message. * progress_hide() - Hide the current run status. * progress_show() - Show the current run status. * progress_update() - Update the current run status. */ /* * Include necessary headers. */ #include "htmldoc.h" #include #ifdef HAVE_LIBFLTK # include #endif // HAVE_LIBFLTK #ifdef WIN32 # define getpid GetCurrentProcessId static FILE *error_log = NULL; #else # include #endif // WIN32 /* * Local globals... */ static int progress_visible = 0; /* * 'progress_error()' - Display an error message. */ void progress_error(HDerror error, /* I - Error number */ const char *format, /* I - Printf-style format string */ ...) /* I - Additional args as needed */ { va_list ap; /* Argument pointer */ char text[2048]; /* Formatted text string */ if (error == HD_ERROR_HTML_ERROR && !StrictHTML) return; if (error) Errors ++; va_start(ap, format); vsnprintf(text, sizeof(text), format, ap); va_end(ap); #ifdef HAVE_LIBFLTK if (BookGUI != NULL) { if (error) BookGUI->add_error(text); return; } #endif /* HAVE_LIBFLTK */ #ifdef WIN32 // IIS doesn't separate stderr from stdout, so we have to send CGI errors // to a separate event log... if (CGIMode) { if (!error_log) { // Append messages to a file called "htmldoc.log"... char tmppath[1024]; // Buffer for temp dir char filename[1024]; // htmldoc.log filename GetTempPath(sizeof(tmppath), tmppath); snprintf(filename, sizeof(filename), "%s/htmldoc.log", tmppath); error_log = fopen(filename, "a"); } if (error_log) { fprintf(error_log, "HTMLDOC(%d) ", (int)getpid()); if (error) fprintf(error_log, "ERR%03d: %s\n", error, text); else fprintf(error_log, "%s\n", text); fflush(error_log); } return; } #endif // WIN32 if (Verbosity >= 0) { if (progress_visible) fprintf(stderr, "\r%-79.79s\r", ""); if (CGIMode) fprintf(stderr, "HTMLDOC(%d) ", (int)getpid()); if (error) fprintf(stderr, "ERR%03d: %s\n", error, text); else fprintf(stderr, "%s\n", text); fflush(stderr); } } /* * 'progress_hide()' - Hide the current run status. */ void progress_hide(void) { #ifdef HAVE_LIBFLTK if (BookGUI != NULL) { BookGUI->progress(0, "HTMLDOC " SVERSION " Ready."); return; } #endif /* HAVE_LIBFLTK */ if (CGIMode) return; if (Verbosity > 0) { fprintf(stderr, "\r%-79.79s\r", ""); fflush(stderr); } progress_visible = 0; } /* * 'progress_show()' - Show the current run status. */ void progress_show(const char *format, /* I - Printf-style format string */ ...) /* I - Additional args as needed */ { va_list ap; /* Argument pointer */ static char text[2048]; /* Formatted text string */ va_start(ap, format); vsnprintf(text, sizeof(text), format, ap); va_end(ap); #ifdef HAVE_LIBFLTK if (BookGUI != NULL) { BookGUI->progress(0, text); return; } #endif /* HAVE_LIBFLTK */ if (CGIMode) { if (Verbosity > 0) { fprintf(stderr, "HTMLDOC(%d) INFO: %s\n", (int)getpid(), text); fflush(stderr); } return; } if (Verbosity > 0) { fprintf(stderr, "\r%-79.79s", text); fflush(stderr); } progress_visible = 1; } /* * 'progress_update()' - Update the current run status. */ void progress_update(int percent) /* I - Percent complete */ { #ifdef HAVE_LIBFLTK if (BookGUI != NULL) { BookGUI->progress(percent); return; } #endif /* HAVE_LIBFLTK */ } /* * End of "$Id: progress.cxx 1421 2005-08-07 11:51:33Z mike $". */ htmldoc-1.8.27/htmldoc/ps-pdf.cxx0100664000212600000240000120416310463704112015276 0ustar mikeuser/* * "$Id: ps-pdf.cxx 1518 2006-08-01 16:58:50Z mike $" * * PostScript + PDF output routines for HTMLDOC, a HTML document processing * program. * * Just in case you didn't notice it, this file is too big; it will be * broken into more manageable pieces once we make all of the output * "drivers" into classes... * * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * pspdf_export() - Export PostScript/PDF file(s)... * pspdf_debug_stats() - Display debug statistics for render memory use. * pspdf_transform_coords() - Transform page coordinates. * pspdf_transform_page() - Transform a page. * pspdf_prepare_outpages() - Prepare output pages... * pspdf_prepare_page() - Add headers/footers to page before writing... * pspdf_prepare_heading() - Add headers/footers to page before writing... * ps_write_document() - Write all render entities to PostScript file(s). * ps_write_outpage() - Write an output page. * ps_write_page() - Write all render entities on a page to a * PostScript file. * ps_write_background() - Write a background image... * pdf_write_document() - Write all render entities to a PDF file. * pdf_write_resources() - Write the resources dictionary for a page. * pdf_write_outpage() - Write an output page. * pdf_write_page() - Write a page to a PDF file. * pdf_write_contents() - Write the table of contents as outline records * to a PDF file. * pdf_write_files() - Write an outline of HTML files. * pdf_count_headings() - Count the number of headings under this TOC * pdf_write_links() - Write annotation link objects for each page in * the document. * pdf_write_names() - Write named destinations for each link. * pdf_start_object() - Start a new PDF object... * pdf_start_stream() - Start a new PDF stream... * pdf_end_object() - End a PDF object... * parse_contents() - Parse the table of contents and produce a * parse_doc() - Parse a document tree and produce rendering * list output. * parse_heading() - Parse a heading tree and produce rendering list * output. * parse_paragraph() - Parse a paragraph tree and produce rendering * list output. * parse_pre() - Parse preformatted text and produce rendering * list output. * parse_table() - Parse a table and produce rendering output. * parse_list() - Parse a list entry and produce rendering output. * init_list() - Initialize the list type and value as necessary. * parse_comment() - Parse a comment for HTMLDOC comments. * real_prev() - Return the previous non-link markup in the tree. * real_next() - Return the next non-link markup in the tree. * find_background() - Find the background image/color for the given * document. * write_background() - Write the background image/color for to the * current page. * new_render() - Allocate memory for a new rendering structure. * check_pages() - Allocate memory for more pages as needed... * add_link() - Add a named link... * find_link() - Find a named link... * compare_links() - Compare two named links. * copy_tree() - Copy a markup tree... * get_cell_size() - Compute the minimum width of a cell. * get_table_size() - Compute the minimum width of a table. * flatten_tree() - Flatten an HTML tree to only include the text, * image, link, and break markups. * update_image_size() - Update the size of an image based upon the * get_width() - Get the width of a string in points. * get_title() - Get the title string for a document. * open_file() - Open an output file for the current chapter. * set_color() - Set the current text color... * set_font() - Set the current text font. * set_pos() - Set the current text position. * ps_hex() - Print binary data as a series of hexadecimal * numbers. * ps_ascii85() - Print binary data as a series of base-85 * numbers. * jpg_init() - Initialize the JPEG destination. * jpg_empty() - Empty the JPEG output buffer. * jpg_term() - Write the last JPEG data to the file. * jpg_setup() - Setup the JPEG compressor for writing an image. * compare_rgb() - Compare two RGB colors... * write_image() - Write an image to the given output file... * write_imagemask() - Write an imagemask to the output file... * write_prolog() - Write the file prolog... * write_string() - Write a text entity. * write_text() - Write a text entity. * write_trailer() - Write the file trailer. * type1_decrypt() - Decrypt Type 1 font data. * type1_encrypt() - Encrypt Type 1 font data. * write_type1() - Write an embedded Type 1 font. * encrypt_init() - Initialize the RC4 encryption context for * the current object. * flate_open_stream() - Open a deflated output stream. * flate_close_stream() - Close a deflated output stream. * flate_puts() - Write a character string to a compressed stream. * flate_printf() - Write a formatted character string to a * compressed stream. * flate_write() - Write data to a compressed stream. */ /* * Include necessary headers. */ /* * The GCC compiler on HP-UX has a nasty habit of incorrectly "fixing" * the vmtypes.h header file provided with HP-UX. The following * conditional magic makes sure that "page_t" (which we use in our * code) is not defined... */ #ifdef __hpux # define page_t hpux_page_t #endif // __hpux /*#define DEBUG*/ #include "htmldoc.h" #include "md5.h" #include "rc4.h" #include #include #include #include #ifdef WIN32 # include #else # include #endif // WIN32 #include #include extern "C" { /* Workaround for JPEG header problems... */ #include /* JPEG/JFIF image definitions */ } #ifdef __hpux # undef page_t #endif // __hpux /* * Output options... */ #define HTMLDOC_ASCII85 //#define HTMLDOC_INTERPOLATION /* * Constants... */ #define RENDER_TEXT 0 /* Text fragment */ #define RENDER_IMAGE 1 /* Image */ #define RENDER_BOX 2 /* Box */ #define RENDER_LINK 3 /* Hyperlink */ #define RENDER_BG 4 /* Background image */ /* * Structures... */ typedef struct render_str /**** Render entity structure ****/ { struct render_str *prev; /* Previous rendering entity */ struct render_str *next; /* Next rendering entity */ int type; /* Type of entity */ float x, /* Position in points */ y, /* ... */ width, /* Size in points */ height; /* ... */ union { struct { int typeface, /* Typeface for text */ style; /* Style of text */ float size; /* Size of text in points */ float spacing; /* Inter-character spacing */ float rgb[3]; /* Color of text */ uchar buffer[1]; /* String buffer */ } text; image_t *image; /* Image pointer */ float box[3]; /* Box color */ uchar link[1]; /* Link URL */ } data; } render_t; typedef struct /**** Named link position structure */ { short page, /* Page # */ top; /* Top position */ uchar name[124]; /* Reference name */ } link_t; typedef struct //// Page information { int width, // Width of page in points length, // Length of page in points left, // Left margin in points right, // Right margin in points top, // Top margin in points bottom, // Bottom margin in points duplex, // Duplex this page? landscape; // Landscape orientation? render_t *start, // First render element *end; // Last render element uchar *chapter, // Chapter text *heading; // Heading text tree_t *headnode; // Heading node uchar *header[3], // Headers for regular pages *header1[3], // Headers for first pages *footer[3]; // Footers for all pages char media_color[64], // Media color media_type[64]; // Media type int media_position; // Media position char page_text[64]; // Page number for TOC image_t *background_image; // Background image float background_color[3]; // Background color // Number-up support int nup; // Number up pages int outpage; // Output page # float outmatrix[2][3]; // Transform matrix } page_t; typedef struct //// Output page info { int nup; // Number up pages int pages[16]; // Pages on this output page int annot_object; // Annotation object } outpage_t; /* * Timezone offset for dates, below... */ #ifdef HAVE_TM_GMTOFF # define timezone (doc_date->tm_gmtoff) #elif defined(__CYGWIN__) # define timezone _timezone #endif /* HAVE_TM_GMTOFF */ /* * Local globals... */ static time_t doc_time; // Current time static struct tm *doc_date; // Current date static int title_page; static int chapter, chapter_outstarts[MAX_CHAPTERS], chapter_outends[MAX_CHAPTERS], chapter_starts[MAX_CHAPTERS], chapter_ends[MAX_CHAPTERS]; static int num_headings = 0, alloc_headings = 0, *heading_pages = NULL, *heading_tops = NULL; static int num_pages = 0, alloc_pages = 0; static page_t *pages = NULL; static tree_t *current_heading; static int num_outpages = 0; static outpage_t *outpages = NULL; static int num_links = 0, alloc_links = 0; static link_t *links = NULL; static uchar list_types[16]; static int list_values[16]; static char stdout_filename[256]; static int num_objects = 0, alloc_objects = 0, *objects = NULL, root_object, info_object, outline_object, pages_object, names_object, encrypt_object, font_objects[TYPE_MAX * STYLE_MAX]; static uchar *doc_title = NULL; static image_t *logo_image = NULL; static float logo_width, logo_height; static image_t *hfimage[MAX_HF_IMAGES]; static float hfimage_width[MAX_HF_IMAGES], hfimage_height[MAX_HF_IMAGES]; static float maxhfheight; static image_t *background_image = NULL; static float background_color[3] = { 1.0, 1.0, 1.0 }, link_color[3] = { 0.0, 0.0, 1.0 }; static int render_typeface, render_style; static float render_size, render_rgb[3], render_x, render_y, render_startx, render_spacing; static int compressor_active = 0; static z_stream compressor; static uchar comp_buffer[8192]; static uchar encrypt_key[16]; static int encrypt_len; static rc4_context_t encrypt_state; static md5_byte_t file_id[16]; /* * Local functions... */ extern "C" { typedef int (*compare_func_t)(const void *, const void *); } static void pspdf_debug_stats(); static void pspdf_transform_coords(page_t *p, float &x, float &y); static void pspdf_transform_page(int outpage, int pos, int page); static void pspdf_prepare_outpages(); static void pspdf_prepare_page(int page); static void pspdf_prepare_heading(int page, int print_page, uchar **format, int y, char *page_text, int page_len); static void ps_write_document(uchar *author, uchar *creator, uchar *copyright, uchar *keywords, uchar *subject); static void ps_write_outpage(FILE *out, int outpage); static void ps_write_page(FILE *out, int page); static void ps_write_background(FILE *out); static void pdf_write_document(uchar *author, uchar *creator, uchar *copyright, uchar *keywords, uchar *subject, tree_t *doc, tree_t *toc); static void pdf_write_outpage(FILE *out, int outpage); static void pdf_write_page(FILE *out, int page); static void pdf_write_resources(FILE *out, int page); #ifdef DEBUG_TOC static void pdf_text_contents(FILE *out, tree_t *toc, int indent = 0); #endif // DEBUG_TOC static void pdf_write_contents(FILE *out, tree_t *toc, int parent, int prev, int next, int *heading); static void pdf_write_files(FILE *out, tree_t *doc); static void pdf_write_links(FILE *out); static void pdf_write_names(FILE *out); static int pdf_count_headings(tree_t *toc); static int pdf_start_object(FILE *out, int array = 0); static void pdf_start_stream(FILE *out); static void pdf_end_object(FILE *out); static void encrypt_init(void); static void flate_open_stream(FILE *out); static void flate_close_stream(FILE *out); static void flate_puts(const char *s, FILE *out); static void flate_printf(FILE *out, const char *format, ...); static void flate_write(FILE *out, uchar *inbuf, int length, int flush=0); static void parse_contents(tree_t *t, float left, float width, float bottom, float length, float *y, int *page, int *heading, tree_t *chap); static void parse_doc(tree_t *t, float *left, float *right, float *bottom, float *top, float *x, float *y, int *page, tree_t *cpara, int *needspace); static void parse_heading(tree_t *t, float left, float width, float bottom, float length, float *x, float *y, int *page, int needspace); static void parse_paragraph(tree_t *t, float left, float width, float bottom, float length, float *x, float *y, int *page, int needspace); static void parse_pre(tree_t *t, float left, float width, float bottom, float length, float *x, float *y, int *page, int needspace); static void parse_table(tree_t *t, float left, float width, float bottom, float length, float *x, float *y, int *page, int needspace); static void parse_list(tree_t *t, float *left, float *width, float *bottom, float *length, float *x, float *y, int *page, int needspace); static void init_list(tree_t *t); static void parse_comment(tree_t *t, float *left, float *width, float *bottom, float *length, float *x, float *y, int *page, tree_t *para, int needspace); static tree_t *real_prev(tree_t *t); static tree_t *real_next(tree_t *t); static void check_pages(int page); static void add_link(uchar *name, int page, int top); static link_t *find_link(uchar *name); static int compare_links(link_t *n1, link_t *n2); static void find_background(tree_t *t); static void write_background(int page, FILE *out); static render_t *new_render(int page, int type, float x, float y, float width, float height, void *data, render_t *insert = 0); static void copy_tree(tree_t *parent, tree_t *t); static float get_cell_size(tree_t *t, float left, float right, float *minwidth, float *prefwidth, float *minheight); static float get_table_size(tree_t *t, float left, float right, float *minwidth, float *prefwidth, float *minheight); static tree_t *flatten_tree(tree_t *t); static float get_width(uchar *s, int typeface, int style, int size); static void update_image_size(tree_t *t); static uchar *get_title(tree_t *doc); static FILE *open_file(void); static void set_color(FILE *out, float *rgb); static void set_font(FILE *out, int typeface, int style, float size); static void set_pos(FILE *out, float x, float y); static void write_prolog(FILE *out, int pages, uchar *author, uchar *creator, uchar *copyright, uchar *keywords, uchar *subject); static void ps_hex(FILE *out, uchar *data, int length); #ifdef HTMLDOC_ASCII85 static void ps_ascii85(FILE *out, uchar *data, int length, int eod = 0); #endif // HTMLDOC_ASCII85 static void jpg_init(j_compress_ptr cinfo); static boolean jpg_empty(j_compress_ptr cinfo); static void jpg_term(j_compress_ptr cinfo); static void jpg_setup(FILE *out, image_t *img, j_compress_ptr cinfo); static int compare_rgb(unsigned *rgb1, unsigned *rgb2); static void write_image(FILE *out, render_t *r, int write_obj = 0); static void write_imagemask(FILE *out, render_t *r); static void write_string(FILE *out, uchar *s, int compress); static void write_text(FILE *out, render_t *r); static void write_trailer(FILE *out, int pages); static int write_type1(FILE *out, typeface_t typeface, style_t style); static void write_utf16(FILE *out, uchar *s); /* * 'pspdf_export()' - Export PostScript/PDF file(s)... */ int pspdf_export(tree_t *document, /* I - Document to export */ tree_t *toc) /* I - Table of contents for document */ { int i, j; /* Looping vars */ const char *title_file; /* Location of title image/file */ uchar *author, /* Author of document */ *creator, /* HTML file creator (Netscape, etc) */ *copyright, /* File copyright */ *docnumber, /* Document number */ *keywords, /* Search keywords */ *subject; /* Subject */ tree_t *t; /* Title page document tree */ FILE *fp; /* Title page file */ float x, y, /* Current page position */ left, right, /* Left and right margins */ bottom, top, /* Bottom and top margins */ width, /* Width of , author, etc */ height; /* Height of area */ int pos, /* Current header/footer position */ page, /* Current page # */ heading, /* Current heading # */ toc_duplex, /* Duplex TOC pages? */ toc_landscape, /* Do TOC in landscape? */ toc_width, /* Width of TOC pages */ toc_length, /* Length of TOC pages */ toc_left, /* TOC page margins */ toc_right, toc_bottom, toc_top; image_t *timage; /* Title image */ float timage_width, /* Title image width */ timage_height; /* Title image height */ render_t *r; /* Rendering structure... */ float rgb[3]; /* Text color */ int needspace; /* Need whitespace */ /* * Figure out the printable area of the output page... */ if (Landscape) { PagePrintWidth = PageLength - PageLeft - PageRight; PagePrintLength = PageWidth - PageTop - PageBottom; } else { PagePrintWidth = PageWidth - PageLeft - PageRight; PagePrintLength = PageLength - PageTop - PageBottom; } toc_width = PageWidth; toc_length = PageLength; toc_left = PageLeft; toc_right = PageRight; toc_bottom = PageBottom; toc_top = PageTop; toc_landscape = Landscape; toc_duplex = PageDuplex; /* * Get the document title, author, etc... */ doc_title = get_title(document); author = htmlGetMeta(document, (uchar *)"author"); creator = htmlGetMeta(document, (uchar *)"generator"); copyright = htmlGetMeta(document, (uchar *)"copyright"); docnumber = htmlGetMeta(document, (uchar *)"docnumber"); keywords = htmlGetMeta(document, (uchar *)"keywords"); subject = htmlGetMeta(document, (uchar *)"subject"); logo_image = image_load(LogoImage, !OutputColor); maxhfheight = 0.0f; if (logo_image != NULL) { logo_width = logo_image->width * PagePrintWidth / _htmlBrowserWidth; logo_height = logo_width * logo_image->height / logo_image->width; if (logo_height > maxhfheight) maxhfheight = logo_height; } else logo_width = logo_height = 0.0f; for (int hfi = 0; hfi < MAX_HF_IMAGES; hfi ++) { hfimage[hfi] = image_load(HFImage[hfi], !OutputColor); if (hfimage[hfi]) { hfimage_width[hfi] = hfimage[hfi]->width * PagePrintWidth / _htmlBrowserWidth; hfimage_height[hfi] = hfimage_width[hfi] * hfimage[hfi]->height / hfimage[hfi]->width; if (hfimage_height[hfi] > maxhfheight) maxhfheight = hfimage_height[hfi]; } else hfimage_width[hfi] = hfimage_height[hfi] = 0.0f; } find_background(document); get_color((uchar *)LinkColor, link_color); /* * Initialize page rendering variables... */ num_pages = 0; alloc_pages = 0; pages = NULL; memset(list_types, 0267, sizeof(list_types)); memset(list_values, 0, sizeof(list_values)); memset(chapter_starts, -1, sizeof(chapter_starts)); memset(chapter_ends, -1, sizeof(chapter_starts)); doc_time = time(NULL); doc_date = localtime(&doc_time); num_headings = 0; alloc_headings = 0; heading_pages = NULL; heading_tops = NULL; num_links = 0; alloc_links = 0; links = NULL; num_pages = 0; DEBUG_printf(("pspdf_export: TitlePage = %d, TitleImage = \"%s\"\n", TitlePage, TitleImage)); if (TitlePage) { #ifdef WIN32 if (TitleImage[0] && stricmp(file_extension(TitleImage), "bmp") != 0 && stricmp(file_extension(TitleImage), "gif") != 0 && stricmp(file_extension(TitleImage), "jpg") != 0 && stricmp(file_extension(TitleImage), "png") != 0) #else if (TitleImage[0] && strcmp(file_extension(TitleImage), "bmp") != 0 && strcmp(file_extension(TitleImage), "gif") != 0 && strcmp(file_extension(TitleImage), "jpg") != 0 && strcmp(file_extension(TitleImage), "png") != 0) #endif // WIN32 { DEBUG_printf(("pspdf_export: Generating a titlepage using \"%s\"\n", TitleImage)); // Find the title file... if ((title_file = file_find(Path, TitleImage)) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to find title file \"%s\"!", TitleImage); return (1); } // Write a title page from HTML source... if ((fp = fopen(title_file, "rb")) == NULL) { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open title file \"%s\" - %s!", TitleImage, strerror(errno)); return (1); } t = htmlReadFile(NULL, fp, file_directory(TitleImage)); htmlFixLinks(t, t, (uchar *)file_directory(TitleImage)); fclose(fp); page = 0; title_page = 1; current_heading = NULL; x = 0.0f; bottom = 0.0f; top = PagePrintLength; y = top; needspace = 0; left = 0.0f; right = PagePrintWidth; parse_doc(t, &left, &right, &bottom, &top, &x, &y, &page, NULL, &needspace); if (PageDuplex && (num_pages & 1)) check_pages(num_pages); htmlDeleteTree(t); } else { /* * Create a standard title page... */ if ((timage = image_load(TitleImage, !OutputColor)) != NULL) { timage_width = timage->width * PagePrintWidth / _htmlBrowserWidth; timage_height = timage_width * timage->height / timage->width; } else timage_width = timage_height = 0.0f; check_pages(0); if (PageDuplex) check_pages(1); height = 0.0; if (timage != NULL) height += timage_height + _htmlSpacings[SIZE_P]; if (doc_title != NULL) height += _htmlSpacings[SIZE_H1] + _htmlSpacings[SIZE_P]; if (author != NULL) height += _htmlSpacings[SIZE_P]; if (docnumber != NULL) height += _htmlSpacings[SIZE_P]; if (copyright != NULL) height += _htmlSpacings[SIZE_P]; y = 0.5f * (PagePrintLength + height); if (timage != NULL) { new_render(0, RENDER_IMAGE, 0.5f * (PagePrintWidth - timage_width), y - timage_height, timage_width, timage_height, timage); y -= timage_height + _htmlSpacings[SIZE_P]; } get_color(_htmlTextColor, rgb); if (doc_title != NULL) { width = get_width(doc_title, _htmlHeadingFont, STYLE_BOLD, SIZE_H1); r = new_render(0, RENDER_TEXT, (PagePrintWidth - width) * 0.5f, y - _htmlSpacings[SIZE_H1], width, _htmlSizes[SIZE_H1], doc_title); r->data.text.typeface = _htmlHeadingFont; r->data.text.style = STYLE_BOLD; r->data.text.size = _htmlSizes[SIZE_H1]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); y -= _htmlSpacings[SIZE_H1]; if (docnumber != NULL) { width = get_width(docnumber, _htmlBodyFont, STYLE_NORMAL, SIZE_P); r = new_render(0, RENDER_TEXT, (PagePrintWidth - width) * 0.5f, y - _htmlSpacings[SIZE_P], width, _htmlSizes[SIZE_P], docnumber); r->data.text.typeface = _htmlBodyFont; r->data.text.style = STYLE_NORMAL; r->data.text.size = _htmlSizes[SIZE_P]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); y -= _htmlSpacings[SIZE_P]; } y -= _htmlSpacings[SIZE_P]; } if (author != NULL) { width = get_width(author, _htmlBodyFont, STYLE_NORMAL, SIZE_P); r = new_render(0, RENDER_TEXT, (PagePrintWidth - width) * 0.5f, y - _htmlSpacings[SIZE_P], width, _htmlSizes[SIZE_P], author); r->data.text.typeface = _htmlBodyFont; r->data.text.style = STYLE_NORMAL; r->data.text.size = _htmlSizes[SIZE_P]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); y -= _htmlSpacings[SIZE_P]; } if (copyright != NULL) { width = get_width(copyright, _htmlBodyFont, STYLE_NORMAL, SIZE_P); r = new_render(0, RENDER_TEXT, (PagePrintWidth - width) * 0.5f, y - _htmlSpacings[SIZE_P], width, _htmlSizes[SIZE_P], copyright); r->data.text.typeface = _htmlBodyFont; r->data.text.style = STYLE_NORMAL; r->data.text.size = _htmlSizes[SIZE_P]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); } } for (page = 0; page < num_pages; page ++) // Safe because page_text is more than 6 chars strcpy((char *)pages[page].page_text, (page & 1) ? "eltit" : "title"); } else page = 0; /* * Parse the document... */ if (OutputType == OUTPUT_BOOK) chapter = 0; else { chapter = 1; TocDocCount = 1; chapter_starts[1] = num_pages; } title_page = 0; current_heading = NULL; x = 0.0f; needspace = 0; left = 0.0f; right = PagePrintWidth; // Adjust top margin as needed... for (pos = 0; pos < 3; pos ++) if (Header[pos] || Header1[pos]) break; if (pos == 3) top = PagePrintLength; else if (maxhfheight > HeadFootSize) top = PagePrintLength - maxhfheight - HeadFootSize; else top = PagePrintLength - 2 * HeadFootSize; // Adjust bottom margin as needed... for (pos = 0; pos < 3; pos ++) if (Footer[pos]) break; if (pos == 3) bottom = 0.0f; else if (maxhfheight > HeadFootSize) bottom = maxhfheight + HeadFootSize; else bottom = 2 * HeadFootSize; y = top; parse_doc(document, &left, &right, &bottom, &top, &x, &y, &page, NULL, &needspace); if (PageDuplex && (num_pages & 1)) check_pages(num_pages); chapter_ends[chapter] = num_pages - 1; for (chapter = 1; chapter <= TocDocCount; chapter ++) for (page = chapter_starts[chapter]; page <= chapter_ends[chapter]; page ++) pspdf_prepare_page(page); /* * Parse the table-of-contents if necessary... */ if (TocLevels > 0 && num_headings > 0) { // Restore default page size, etc... PageWidth = toc_width; PageLength = toc_length; PageLeft = toc_left; PageRight = toc_right; PageBottom = toc_bottom; PageTop = toc_top; Landscape = toc_landscape; PageDuplex = toc_duplex; if (Landscape) { PagePrintWidth = PageLength - PageLeft - PageRight; PagePrintLength = PageWidth - PageTop - PageBottom; } else { PagePrintWidth = PageWidth - PageLeft - PageRight; PagePrintLength = PageLength - PageTop - PageBottom; } // Adjust top margin as needed... for (pos = 0; pos < 3; pos ++) if (TocHeader[pos]) break; if (pos == 3) top = PagePrintLength; else if (maxhfheight > HeadFootSize) top = PagePrintLength - maxhfheight - HeadFootSize; else top = PagePrintLength - 2 * HeadFootSize; // Adjust bottom margin as needed... for (pos = 0; pos < 3; pos ++) if (TocFooter[pos]) break; if (pos == 3) bottom = 0.0f; else if (maxhfheight > HeadFootSize) bottom = maxhfheight + HeadFootSize; else bottom = 2 * HeadFootSize; y = 0.0; page = num_pages - 1; heading = 0; chapter_starts[0] = num_pages; chapter = 0; parse_contents(toc, 0, PagePrintWidth, bottom, top, &y, &page, &heading, 0); if (PageDuplex && (num_pages & 1)) check_pages(num_pages); chapter_ends[0] = num_pages - 1; for (page = chapter_starts[0]; page <= chapter_ends[0]; page ++) pspdf_prepare_page(page); } if (TocDocCount > MAX_CHAPTERS) TocDocCount = MAX_CHAPTERS; /* * Do we have any pages? */ if (num_pages > 0 && TocDocCount > 0) { /* * Yes, write the document to disk... */ pspdf_prepare_outpages(); pspdf_debug_stats(); progress_error(HD_ERROR_NONE, "PAGES: %d", num_outpages); if (PSLevel > 0) ps_write_document(author, creator, copyright, keywords, subject); else pdf_write_document(author, creator, copyright, keywords, subject, document, toc); } else { /* * No, show an error... */ pspdf_debug_stats(); progress_error(HD_ERROR_NO_PAGES, "Error: no pages generated! (did you remember to use webpage mode?"); } /* * Free memory... */ if (doc_title != NULL) free(doc_title); if (alloc_links) { free(links); num_links = 0; alloc_links = 0; links = NULL; } for (i = 0; i < num_pages; i ++) { if ((i == 0 || pages[i].chapter != pages[i - 1].chapter) && pages[i].chapter) free(pages[i].chapter); if ((i == 0 || pages[i].heading != pages[i - 1].heading) && pages[i].heading) free(pages[i].heading); if (!pages[i].heading) continue; for (j = 0; j < 3; j ++) { if (!pages[i].header[j]) continue; if (i == 0 || pages[i].header[j] != pages[i - 1].header[j]) free(pages[i].header[j]); } for (j = 0; j < 3; j ++) { if (!pages[i].header1[j]) continue; if (i == 0 || pages[i].header1[j] != pages[i - 1].header1[j]) free(pages[i].header1[j]); } for (j = 0; j < 3; j ++) { if (!pages[i].footer[j]) continue; if (i == 0 || pages[i].footer[j] != pages[i - 1].footer[j]) free(pages[i].footer[j]); } } for (i = 0; i < 3; i ++) { Header[i] = NULL; Header1[i] = NULL; Footer[i] = NULL; TocHeader[i] = NULL; TocFooter[i] = NULL; } if (alloc_pages) { free(pages); free(outpages); num_pages = 0; alloc_pages = 0; pages = NULL; } if (alloc_headings) { free(heading_pages); free(heading_tops); num_headings = 0; alloc_headings = 0; heading_pages = NULL; heading_tops = NULL; } return (0); } // // 'pspdf_debug_stats()' - Display debug statistics for render memory use. // static void pspdf_debug_stats() { const char *debug; // HTMLDOC_DEBUG env var int i; // Looping var render_t *r; // Render node int bytes; // Number of bytes if ((debug = getenv("HTMLDOC_DEBUG")) == NULL || (strstr(debug, "all") == NULL && strstr(debug, "memory") == NULL)) return; bytes = alloc_headings * sizeof(int) * 2; bytes += alloc_pages * sizeof(page_t); for (i = 0; i < num_pages; i ++) { for (r = pages[i].start; r != NULL; r = r->next) { bytes += sizeof(render_t); if (r->type == RENDER_TEXT) bytes += strlen((char *)r->data.text.buffer); } } bytes += num_outpages * sizeof(outpage_t); bytes += alloc_links * sizeof(link_t); bytes += alloc_objects * sizeof(int); progress_error(HD_ERROR_NONE, "DEBUG: Render Data = %d kbytes", (bytes + 1023) / 1024); } /* * 'pspdf_transform_coords()' - Transform page coordinates. */ static void pspdf_transform_coords(page_t *p, // I - Page float &x, // IO - X coordinate float &y) // IO - Y coordinate { float tx, ty; // Temporary X and Y tx = x; ty = y; x = tx * p->outmatrix[0][0] + ty * p->outmatrix[0][1] + p->outmatrix[0][2]; y = tx * p->outmatrix[1][0] + ty * p->outmatrix[1][1] + p->outmatrix[1][2]; } /* * 'pspdf_transform_page()' - Transform a page. */ static void pspdf_transform_page(int outpage, // I - Output page int pos, // I - Position on page int page) // I - Input page { outpage_t *op; // Current output page page_t *bp; // Current base page page_t *p; // Current input page int x, y; // Position on output page float w, l, // Width and length of subpage tx, ty; // Translation values for subpage float pw, pl; // Printable width and length of full page DEBUG_printf(("pspdf_transform_page(outpage = %d, pos = %d, page = %d)\n", outpage, pos, page)); if (pos > 15) progress_error(HD_ERROR_INTERNAL_ERROR, "Internal error: pos = %d", pos); op = outpages + outpage; op->pages[pos] = page; bp = pages + op->pages[0]; p = pages + page; p->outpage = outpage; pw = bp->width; pl = bp->length; DEBUG_printf((" width = %d, length = %d\n", p->width, p->length)); switch (op->nup) { default : case 1 : p->outmatrix[0][0] = 1.0f; p->outmatrix[1][0] = 0.0f; p->outmatrix[0][1] = 0.0f; p->outmatrix[1][1] = 1.0f; p->outmatrix[0][2] = 0.0f; p->outmatrix[1][2] = 0.0f; break; case 2 : x = pos & 1; l = pw; w = l * p->width / p->length; if (w > (pl * 0.5f)) { w = pl * 0.5f; l = w * p->length / p->width; } tx = 0.5 * (pl * 0.5 - w); ty = 0.5 * (pw - l); p->outmatrix[0][0] = 0.0f; p->outmatrix[1][0] = w / p->width; p->outmatrix[0][1] = -w / p->width; p->outmatrix[1][1] = 0.0f; p->outmatrix[0][2] = ty + pl * w / p->width; p->outmatrix[1][2] = tx + x * pl / 2; break; case 4 : x = pos & 1; y = 1 - pos / 2; w = pw * 0.5; l = w * p->length / p->width; if (l > (pl * 0.5)) { l = pl * 0.5; w = l * p->width / p->length; } tx = 0.5 * (pw * 0.5 - w); ty = 0.5 * (pl * 0.5 - l); p->outmatrix[0][0] = w / p->width; p->outmatrix[1][0] = 0.0f; p->outmatrix[0][1] = 0.0f; p->outmatrix[1][1] = w / p->width; p->outmatrix[0][2] = tx + x * pw / 2; p->outmatrix[1][2] = ty + y * pl / 2; break; case 6 : x = pos % 3; y = pos / 3; l = pw * 0.5; w = l * p->width / p->length; if (w > (pl * 0.333f)) { w = pl * 0.333f; l = w * p->length / p->width; } tx = 0.5 * (pl * 0.333 - w); ty = 0.5 * (pw * 0.5 - l); p->outmatrix[0][0] = 0.0f; p->outmatrix[1][0] = w / p->width; p->outmatrix[0][1] = -w / p->width; p->outmatrix[1][1] = 0.0f; p->outmatrix[0][2] = ty + y * pw / 2 + pl * w / p->width; p->outmatrix[1][2] = tx + x * pl / 3; break; case 9 : x = pos % 3; y = 2 - pos / 3; w = pw * 0.333; l = w * p->length / p->width; if (l > (pl * 0.333)) { l = pl * 0.333; w = l * p->width / p->length; } tx = 0.5 * (pw * 0.333 - w); ty = 0.5 * (pl * 0.333 - l); p->outmatrix[0][0] = w / p->width; p->outmatrix[1][0] = 0.0f; p->outmatrix[0][1] = 0.0f; p->outmatrix[1][1] = w / p->width; p->outmatrix[0][2] = tx + x * pw / 3; p->outmatrix[1][2] = ty + y * pl / 3; break; case 16 : x = pos & 3; y = 3 - pos / 4; w = pw * 0.25; l = w * p->length / p->width; if (l > (pl * 0.25)) { l = pl * 0.25; w = l * p->width / p->length; } tx = 0.5 * (pw * 0.25 - w); ty = 0.5 * (pl * 0.25 - l); p->outmatrix[0][0] = w / p->width; p->outmatrix[1][0] = 0.0f; p->outmatrix[0][1] = 0.0f; p->outmatrix[1][1] = w / p->width; p->outmatrix[0][2] = tx + x * pw / 4; p->outmatrix[1][2] = ty + y * pl / 4; break; } } /* * 'pspdf_prepare_outpages()' - Prepare output pages... */ static void pspdf_prepare_outpages() { int c, i, j; /* Looping vars */ int nup; /* Current number-up value */ page_t *page; /* Current page */ outpage_t *outpage; /* Current output page */ // Allocate an output page array... outpages = (outpage_t *)malloc(sizeof(outpage_t) * num_pages); memset(outpages, -1, sizeof(outpage_t) * num_pages); num_outpages = 0; outpage = outpages; // Handle the title page, as needed... if (TitlePage) { for (i = 0, j = 0, nup = -1, page = pages; i < chapter_starts[1]; i ++, page ++) { if (nup != page->nup) { if (j) { // Break the current output page... outpage ++; num_outpages ++; } nup = page->nup; j = 0; } if (!j) outpage->nup = nup; pspdf_transform_page(num_outpages, j, i); j ++; if (j >= nup) { j = 0; outpage ++; num_outpages ++; } } if (j) { // Break the current output page... outpage ++; num_outpages ++; } } // Loop through each chapter, adding pages as needed... if (OutputType == OUTPUT_BOOK && TocLevels > 0) c = 0; else c = 1; for (; c <= TocDocCount; c ++) { if (chapter_starts[c] < 0) continue; chapter_outstarts[c] = num_outpages; for (i = chapter_starts[c], j = 0, nup = -1, page = pages + i; i <= chapter_ends[c]; i ++, page ++) { if (nup != page->nup) { if (j) { // Break the current output page... outpage ++; num_outpages ++; } nup = page->nup; j = 0; } if (!j) outpage->nup = nup; pspdf_transform_page(num_outpages, j, i); j ++; if (j >= nup) { j = 0; outpage ++; num_outpages ++; } } if (j) { // Break the current output page... outpage ++; num_outpages ++; } chapter_outends[c] = num_outpages; } #ifdef DEBUG for (c = 0; c <= TocDocCount; c ++) printf("chapter_outstarts[%d] = %d, chapter_outends[%d] = %d\n", c, chapter_outstarts[c], c, chapter_outends[c]); printf("num_outpages = %d\n", num_outpages); for (i = 0, outpage = outpages; i < num_outpages; i ++, outpage ++) { printf("outpage[%d]:\tnup=%d, pages=[", i, outpage->nup); for (j = 0; j < outpage->nup; j ++) printf(" %d", outpage->pages[j]); puts(" ]"); page = pages + outpage->pages[0]; printf("\t\twidth = %d, length = %d\n", page->width, page->length); } for (c = 0; c <= TocDocCount; c ++) printf("chapter_starts[%d] = %d, chapter_ends[%d] = %d\n", c, chapter_starts[c], c, chapter_ends[c]); for (i = 0; i < num_pages; i ++) printf("pages[%d]->outpage = %d\n", i, pages[i].outpage); for (i = 0; i < num_headings; i ++) printf("heading_pages[%d] = %d\n", i, heading_pages[i]); for (i = 0; i < num_links; i ++) printf("links[%d].name = \"%s\", page = %d\n", i, links[i].name, links[i].page); #endif // DEBUG } /* * 'pspdf_prepare_page()' - Add headers/footers to page before writing... */ static void pspdf_prepare_page(int page) /* I - Page number */ { int print_page; /* Printed page # */ char page_text[64]; /* Page number text */ int top; /* Top of page */ DEBUG_printf(("pspdf_prepare_page(%d)\n", page)); /* * Make a page number; use roman numerals for the table of contents * and arabic numbers for all others... */ if (chapter == 0 && OutputType == OUTPUT_BOOK) { print_page = page - chapter_starts[0] + 1; strlcpy(page_text, format_number(print_page, 'i'), sizeof(page_text)); } else if (chapter < 0) { print_page = 0; // Safe because page_text is more than 6 chars strcpy(page_text, (page & 1) ? (char *)"eltit" : (char *)"title"); } else { print_page = page - chapter_starts[1] + 1; strlcpy(page_text, format_number(print_page, '1'), sizeof(page_text)); } DEBUG_printf(("BEFORE page %d page_text is \"%s\"...\n", page, page_text)); DEBUG_printf((" header[0] = \"%s\"\n", pages[page].header[0])); DEBUG_printf((" header[1] = \"%s\"\n", pages[page].header[1])); DEBUG_printf((" header[2] = \"%s\"\n", pages[page].header[2])); /* * Add page headings... */ if (pages[page].landscape) { PagePrintWidth = pages[page].length - pages[page].right - pages[page].left; PagePrintLength = pages[page].width - pages[page].top - pages[page].bottom; } else { PagePrintWidth = pages[page].width - pages[page].right - pages[page].left; PagePrintLength = pages[page].length - pages[page].top - pages[page].bottom; } top = (int)(PagePrintLength - HeadFootSize); if (chapter == 0) { /* * Add table-of-contents header & footer... */ pspdf_prepare_heading(page, print_page, pages[page].header, top, page_text, sizeof(page_text)); pspdf_prepare_heading(page, print_page, pages[page].footer, 0, page_text, sizeof(page_text)); } else if (chapter > 0 && !title_page) { /* * Add chapter header & footer... */ if (page > chapter_starts[chapter] || OutputType != OUTPUT_BOOK) pspdf_prepare_heading(page, print_page, pages[page].header, top, page_text, sizeof(page_text)); else pspdf_prepare_heading(page, print_page, pages[page].header1, top, page_text, sizeof(page_text)); pspdf_prepare_heading(page, print_page, pages[page].footer, 0, page_text, sizeof(page_text)); } /* * Copy the page number for the TOC... */ strlcpy(pages[page].page_text, page_text, sizeof(pages[page].page_text)); DEBUG_printf(("AFTER page %d page_text is \"%s\"...\n", page, page_text)); } /* * 'pspdf_prepare_heading()' - Add headers/footers to page before writing... */ static void pspdf_prepare_heading(int page, // I - Page number int print_page, // I - Printed page number uchar **format, // I - Page headings int y, // I - Baseline of heading char *page_text, // O - Page number text int page_len) // I - Size of page text { int pos, // Position in heading dir; // Direction of page char *number; // Page number char buffer[1024], // String buffer *bufptr, // Pointer into buffer *formatptr; // Pointer into format string int formatlen; // Length of format command string render_t *temp; // Render structure for titles, etc. DEBUG_printf(("pspdf_prepare_heading(%d, %d, [\"%s\",\"%s\",\"%s\"], %d, %p, %d)\n", page, print_page, format[0], format[1], format[2], y, page_text, page_len)); /* * Add page headings... */ if (PageDuplex && (page & 1)) { dir = -1; format += 2; } else dir = 1; for (pos = 0; pos < 3; pos ++, format += dir) { /* * Add the appropriate object... */ if (!*format) continue; temp = NULL; if (strncasecmp((char *)*format, "$LOGOIMAGE", 10) == 0 && logo_image) { // Insert the logo image... if (y < (PagePrintLength / 2)) temp = new_render(page, RENDER_IMAGE, 0, y, logo_width, logo_height, logo_image); else // Offset from top temp = new_render(page, RENDER_IMAGE, 0, y + HeadFootSize - logo_height, logo_width, logo_height, logo_image); } else if (strncasecmp((char *)*format, "$HFIMAGE", 8) == 0) { int hfi; // Header/footer image index char *hfp; // Pointer into $HFIMAGE hfi = strtol((char*)((*format) + 8), &hfp, 10); if (hfi < 0 || hfi >= MAX_HF_IMAGES || !(isspace(*hfp) || !*hfp)) progress_error(HD_ERROR_BAD_HF_STRING, "Bad $HFIMAGE... substitution on page %d.", page + 1); else { if (y < (PagePrintLength / 2)) temp = new_render(page, RENDER_IMAGE, 0, y, hfimage_width[hfi], hfimage_height[hfi], hfimage[hfi]); else temp = new_render(page, RENDER_IMAGE, 0, y + HeadFootSize - hfimage_height[hfi], hfimage_width[hfi], hfimage_height[hfi], hfimage[hfi]); } } else { // Otherwise format the text... buffer[sizeof(buffer) - 1] = '\0'; for (bufptr = buffer, formatptr = (char *)*format; *formatptr;) { if (*formatptr == '$') { if (formatptr[1] == '$') { if (bufptr < (buffer + sizeof(buffer) - 1)) *bufptr++ = '$'; formatptr += 2; continue; } else if (!formatptr[1]) break; formatptr ++; for (formatlen = 1; isalpha(formatptr[formatlen]); formatlen ++); if (formatlen == 4 && strncasecmp(formatptr, "PAGE", 4) == 0) { if (formatptr[4] == '(' && formatptr[5] && formatptr[6] == ')') { number = format_number(print_page, formatptr[5]); formatptr += 7; } else { number = format_number(print_page, '1'); formatptr += 4; } strlcpy(bufptr, number, sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } else if (formatlen == 5 && strncasecmp(formatptr, "PAGES", 5) == 0) { if (formatptr[5] == '(' && formatptr[6] && formatptr[7] == ')') { number = format_number(chapter_ends[TocDocCount] - chapter_starts[1] + 1, formatptr[6]); formatptr += 8; } else { number = format_number(chapter_ends[TocDocCount] - chapter_starts[1] + 1, '1'); formatptr += 5; } strlcpy(bufptr, number, sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } else if (formatlen == 11 && strncasecmp(formatptr, "CHAPTERPAGE", 11) == 0) { int chapter_page; chapter_page = print_page - chapter_starts[::chapter] + chapter_starts[1]; if (formatptr[11] == '(' && formatptr[12] && formatptr[13] == ')') { number = format_number(chapter_page, formatptr[12]); formatptr += 14; } else { number = format_number(chapter_page, '1'); formatptr += 11; } strlcpy(bufptr, number, sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } else if (formatlen == 12 && strncasecmp(formatptr, "CHAPTERPAGES", 12) == 0) { if (formatptr[12] == '(' && formatptr[13] && formatptr[14] == ')') { number = format_number(chapter_ends[::chapter] - chapter_starts[::chapter] + 1, formatptr[13]); formatptr += 15; } else { number = format_number(chapter_ends[::chapter] - chapter_starts[::chapter] + 1, '1'); formatptr += 12; } strlcpy(bufptr, number, sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } else if (formatlen == 5 && strncasecmp(formatptr, "TITLE", 5) == 0) { formatptr += 5; if (doc_title) { strlcpy(bufptr, (char *)doc_title, sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } } else if (formatlen == 7 && strncasecmp(formatptr, "CHAPTER", 7) == 0) { formatptr += 7; if (pages[page].chapter) { strlcpy(bufptr, (char *)(pages[page].chapter), sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } } else if (formatlen == 7 && strncasecmp(formatptr, "HEADING", 7) == 0) { formatptr += 7; if (pages[page].heading) { strlcpy(bufptr, (char *)(pages[page].heading), sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); } } else if (formatlen == 4 && strncasecmp(formatptr, "TIME", 4) == 0) { formatptr += 4; strftime(bufptr, sizeof(buffer) - 1 - (bufptr - buffer), "%X", doc_date); bufptr += strlen(bufptr); } else if (formatlen == 4 && strncasecmp(formatptr, "DATE", 4) == 0) { formatptr += 4; strftime(bufptr, sizeof(buffer) - 1 - (bufptr - buffer), "%x", doc_date); bufptr += strlen(bufptr); } else { progress_error(HD_ERROR_BAD_HF_STRING, "Bad header/footer $ command on page %d.", page + 1); strlcpy(bufptr, formatptr - 1, sizeof(buffer) - (bufptr - buffer)); bufptr += strlen(bufptr); formatptr += formatlen; } } else if (bufptr < (buffer + sizeof(buffer) - 1)) *bufptr++ = *formatptr++; else break; } *bufptr = '\0'; temp = new_render(page, RENDER_TEXT, 0, y, get_width((uchar *)buffer, HeadFootType, HeadFootStyle, SIZE_P) * HeadFootSize / _htmlSizes[SIZE_P], HeadFootSize, (uchar *)buffer); if (strstr((char *)*format, "$PAGE") || strstr((char *)*format, "$CHAPTERPAGE")) strlcpy(page_text, buffer, page_len); } if (temp == NULL) continue; /* * Justify the object... */ switch (pos) { case 0 : /* Left justified */ break; case 1 : /* Centered */ temp->x = (PagePrintWidth - temp->width) * 0.5; break; case 2 : /* Right justified */ temp->x = PagePrintWidth - temp->width; break; } /* * Set the text font and color... */ if (temp->type == RENDER_TEXT) { temp->data.text.typeface = HeadFootType; temp->data.text.style = HeadFootStyle; temp->data.text.size = HeadFootSize; get_color(_htmlTextColor, temp->data.text.rgb); } } } /* * 'ps_write_document()' - Write all render entities to PostScript file(s). */ static void ps_write_document(uchar *author, /* I - Author of document */ uchar *creator, /* I - Application that generated the HTML file */ uchar *copyright, /* I - Copyright (if any) on the document */ uchar *keywords, /* I - Search keywords */ uchar *subject) /* I - Subject */ { FILE *out; /* Output file */ int page; /* Current page # */ int first; /* First chapter */ /* * Write the title page(s)... */ chapter = -1; out = NULL; if (!OutputFiles) { out = open_file(); if (out == NULL) { progress_error(HD_ERROR_WRITE_ERROR, "Unable to open output file - %s\n", strerror(errno)); return; } write_prolog(out, num_outpages, author, creator, copyright, keywords, subject); } if (OutputType == OUTPUT_BOOK && TocLevels > 0) first = 0; else first = 1; if (TitlePage) { if (OutputFiles) { out = open_file(); write_prolog(out, chapter_outstarts[first], author, creator, copyright, keywords, subject); } for (page = 0; page < chapter_outstarts[first]; page ++) ps_write_outpage(out, page); if (OutputFiles) { write_trailer(out, 0); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(out)); fclose(out); } } for (chapter = first; chapter <= TocDocCount; chapter ++) { if (chapter_starts[chapter] < 0) continue; if (OutputFiles) { out = open_file(); if (out == NULL) { progress_error(HD_ERROR_WRITE_ERROR, "Unable to create output file - %s\n", strerror(errno)); return; } write_prolog(out, chapter_outends[chapter] - chapter_outstarts[chapter], author, creator, copyright, keywords, subject); } for (page = chapter_outstarts[chapter]; page < chapter_outends[chapter]; page ++) ps_write_outpage(out, page); /* * Close the output file as necessary... */ if (OutputFiles) { write_trailer(out, 0); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(out)); fclose(out); } } /* * Close the output file as necessary... */ if (!OutputFiles) { write_trailer(out, 0); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(out)); if (out != stdout) fclose(out); } if (Verbosity) progress_hide(); } /* * 'ps_write_outpage()' - Write an output page. */ static void ps_write_outpage(FILE *out, /* I - Output file */ int outpage) /* I - Output page number */ { int file_page; /* Current page # in document */ page_t *p; /* Current page */ outpage_t *op; /* Current output page */ int i; /* Looping var */ if (outpage < 0 || outpage >= num_outpages) return; op = outpages + outpage; p = pages + op->pages[0]; DEBUG_printf(("ps_write_outpage(%p, %d)\n", out, outpage)); /* * Let the user know which page we are writing... */ if (Verbosity) { progress_show("Writing page %s...", p->page_text); progress_update(100 * outpage / num_outpages); } /* * Figure out the page number in the file... */ if (OutputFiles && chapter >= 0) file_page = outpage - chapter_outstarts[chapter] + 1; else if (chapter < 0) file_page = outpage + 1; else if (chapter == 0) { if (TitlePage) file_page = outpage + 1; else file_page = outpage - chapter_outstarts[0] + 1; } else { if (TitlePage) file_page = outpage + 1; else file_page = outpage - chapter_outstarts[1] + 1; } /* * Output the page prolog... */ fprintf(out, "%%%%Page: (%s) %d\n", p->page_text, file_page); if (op->nup == 1) { if (p->duplex && !(file_page & 1)) fprintf(out, "%%%%PageBoundingBox: %d %d %d %d\n", p->right, p->bottom, p->width - p->left, p->length - p->top); else fprintf(out, "%%%%PageBoundingBox: %d %d %d %d\n", p->left, p->bottom, p->width - p->right, p->length - p->top); } else fprintf(out, "%%%%PageBoundingBox: 0 0 %d %d\n", p->width, p->length); if (PSLevel > 1 && PSCommands) { fputs("%%BeginPageSetup\n", out); if (p->width == 612 && p->length == 792) fputs("%%BeginFeature: *PageSize Letter\n", out); else if (p->width == 612 && p->length == 1008) fputs("%%BeginFeature: *PageSize Legal\n", out); else if (p->width == 792 && p->length == 1224) fputs("%%BeginFeature: *PageSize Tabloid\n", out); else if (p->width == 842 && p->length == 1190) fputs("%%BeginFeature: *PageSize A3\n", out); else if (p->width == 595 && p->length == 842) fputs("%%BeginFeature: *PageSize A4\n", out); else fprintf(out, "%%%%BeginFeature: *PageSize w%dh%d\n", p->width, p->length); fprintf(out, "%d %d SetPageSize\n", p->width, p->length); fputs("%%EndFeature\n", out); if (p->duplex) { if (p->landscape) { fputs("%%BeginFeature: *Duplex DuplexTumble\n", out); fputs("true true SetDuplexMode\n", out); fputs("%%EndFeature\n", out); } else { fputs("%%BeginFeature: *Duplex DuplexNoTumble\n", out); fputs("true false SetDuplexMode\n", out); fputs("%%EndFeature\n", out); } } else { fputs("%%BeginFeature: *Duplex None\n", out); fputs("false false SetDuplexMode\n", out); fputs("%%EndFeature\n", out); } if (p->media_color[0]) { fprintf(out, "%%%%BeginFeature: *MediaColor %s\n", p->media_color); fprintf(out, "(%s) SetMediaColor\n", p->media_color); fputs("%%EndFeature\n", out); } if (p->media_position) { fprintf(out, "%%%%BeginFeature: *InputSlot Tray%d\n", p->media_position); fprintf(out, "%d SetMediaPosition\n", p->media_position); fputs("%%EndFeature\n", out); } if (p->media_type[0]) { fprintf(out, "%%%%BeginFeature: *MediaType %s\n", p->media_type); fprintf(out, "(%s) SetMediaType\n", p->media_type); fputs("%%EndFeature\n", out); } fputs("%%EndPageSetup\n", out); } /* * Render all of the pages... */ switch (op->nup) { case 1 : ps_write_page(out, op->pages[0]); break; default : for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; fprintf(out, "GS[%.3f %.3f %.3f %.3f %.3f %.3f]CM\n", p->outmatrix[0][0], p->outmatrix[1][0], p->outmatrix[0][1], p->outmatrix[1][1], p->outmatrix[0][2], p->outmatrix[1][2]); ps_write_page(out, op->pages[i]); fputs("GR\n", out); } break; } /* * Output the page trailer... */ fputs("SP\n", out); fflush(out); } /* * 'ps_write_page()' - Write all render entities on a page to a PostScript file. */ static void ps_write_page(FILE *out, /* I - Output file */ int page) /* I - Page number */ { render_t *r, /* Render pointer */ *next; /* Next render */ page_t *p; /* Current page */ const char *debug; /* HTMLDOC_DEBUG environment variable */ if (page < 0 || page >= alloc_pages) return; p = pages + page; DEBUG_printf(("ps_write_page(%p, %d)\n", out, page)); /* * Clear the render cache... */ render_typeface = -1; render_style = -1; render_size = -1; render_rgb[0] = -1.0f; render_rgb[1] = -1.0f; render_rgb[2] = -1.0f; render_x = -1.0f; render_y = -1.0f; render_spacing = -1.0f; /* * Setup the page... */ fputs("GS\n", out); if (p->landscape) { if (p->duplex && (page & 1)) fprintf(out, "0 %d T -90 RO\n", p->length); else fprintf(out, "%d 0 T 90 RO\n", p->width); } write_background(page, out); if (p->duplex && (page & 1)) fprintf(out, "%d %d T\n", p->right, p->bottom); else fprintf(out, "%d %d T\n", p->left, p->bottom); /* * Render all graphics elements... */ for (r = p->start; r != NULL; r = r->next) switch (r->type) { case RENDER_BOX : set_color(out, r->data.box); set_pos(out, r->x, r->y); if (r->height > 0.0f) fprintf(out, " %.1f %.1f F\n", r->width, r->height); else fprintf(out, " %.1f L\n", r->width); render_x = -1.0f; break; case RENDER_IMAGE : if (r->width > 0.01f && r->height > 0.01f) write_image(out, r); break; } /* * Render all text elements, freeing used memory as we go... */ for (r = p->start, next = NULL; r != NULL; r = next) { if (r->type == RENDER_TEXT) write_text(out, r); next = r->next; free(r); } p->start = NULL; if ((debug = getenv("HTMLDOC_DEBUG")) != NULL && strstr(debug, "margin")) { // Show printable area... fprintf(out, "1 0 1 C 0 0 %d %d B\n", p->width - p->right - p->left, p->length - p->top - p->bottom); } /* * Output the page trailer... */ fputs("GR\n", out); } /* * 'ps_write_background()' - Write a background image... */ static void ps_write_background(FILE *out) /* I - Output file */ { int y, /* Current line */ pwidth; /* Pixel width */ if (!background_image->pixels) image_load(background_image->filename, !OutputColor, 1); pwidth = background_image->width * background_image->depth; fputs("/BG[", out); for (y = 0; y < background_image->height; y ++) { putc('<', out); ps_hex(out, background_image->pixels + y * pwidth, pwidth); putc('>', out); } fputs("]def", out); image_unload(background_image); } /* * 'pdf_write_document()' - Write all render entities to a PDF file. */ static void pdf_write_document(uchar *author, // I - Author of document uchar *creator, // I - Application that generated the HTML file uchar *copyright, // I - Copyright (if any) on the document uchar *keywords, // I - Search keywords uchar *subject, // I - Subject tree_t *doc, // I - Document tree_t *toc) // I - Table of contents tree { int i; // Looping variable FILE *out; // Output file int outpage, // Current page # heading; // Current heading # int bytes; // Number of bytes char buffer[8192]; // Copy buffer int num_images; // Number of images in document image_t **images; // Pointers to images render_t temp; // Dummy rendering data... // Open the output file... out = open_file(); if (out == NULL) { progress_error(HD_ERROR_WRITE_ERROR, "Unable to write document file - %s\n", strerror(errno)); return; } // Clear the objects array... num_objects = 0; alloc_objects = 0; objects = NULL; // Write the prolog... write_prolog(out, num_outpages, author, creator, copyright, keywords, subject); // Write images as needed... num_images = image_getlist(&images); for (i = 0; i < num_images; i ++) { int hfi; // Header/footer image index for (hfi = 0; hfi < MAX_HF_IMAGES; hfi ++) if (images[i] == hfimage[hfi]) break; if (images[i]->use > 1 || images[i]->mask || (images[i]->width * images[i]->height * images[i]->depth) > 65536 || images[i] == background_image || images[i] == logo_image || hfi < MAX_HF_IMAGES) { progress_show("Writing image %d (%s)...", i + 1, images[i]->filename); progress_update(100 * i / num_images); temp.data.image = images[i]; write_image(out, &temp, 1); } } // Write links and target names... pdf_write_links(out); if (PDFVersion >= 12) pdf_write_names(out); // Verify that everything is working so far... pdf_start_object(out); if (pages_object != num_objects) progress_error(HD_ERROR_INTERNAL_ERROR, "Internal error: pages_object != num_objects"); fputs("/Type/Pages", out); fprintf(out, "/Count %d", num_outpages); fputs("/Kids[", out); for (outpage = 0; outpage < num_outpages; outpage ++) fprintf(out, "%d 0 R\n", pages_object + outpage * 2 + 1); fputs("]", out); pdf_end_object(out); for (outpage = 0; outpage < num_outpages; outpage ++) pdf_write_outpage(out, outpage); if (OutputType == OUTPUT_BOOK && TocLevels > 0) { /* * Write the outline tree using the table-of-contents... */ heading = 0; #ifdef DEBUG_TOC pdf_text_contents(out, toc); #endif // DEBUG_TOC pdf_write_contents(out, toc, 0, 0, 0, &heading); } else { /* * Write the outline tree using the HTML files. */ pdf_write_files(out, doc); } /* * Write the trailer and close the output file... */ write_trailer(out, 0); progress_error(HD_ERROR_NONE, "BYTES: %ld", ftell(out)); if (CGIMode) { // In CGI mode, we only produce PDF output to stdout... printf("Content-Type: application/pdf\r\n" "Content-Length: %ld\r\n" "Content-Disposition: inline; filename=\"htmldoc.pdf\"\r\n" "Accept-Ranges: none\r\n" "X-Creator: HTMLDOC " SVERSION "\r\n" "\r\n", ftell(out)); } fclose(out); // // If we are sending the output to stdout, copy the temp file now... // if (!OutputPath[0]) { #ifdef WIN32 // Make sure we are in binary mode... stupid Microsoft! setmode(1, O_BINARY); #elif defined(__EMX__) // OS/2 has a setmode for FILE's... fflush(stdout); _fsetmode(stdout, "b"); #endif // WIN32 || __EMX__ // Open the temporary file and copy it to stdout... out = fopen(stdout_filename, "rb"); while ((bytes = fread(buffer, 1, sizeof(buffer), out)) > 0) fwrite(buffer, 1, bytes, stdout); // Close the temporary file (it is removed when the program exits...) fclose(out); } // Clear the objects array... if (alloc_objects) { free(objects); num_objects = 0; alloc_objects = 0; objects = NULL; } if (Verbosity) progress_hide(); } /* * 'pdf_write_resources()' - Write the resources dictionary for a page. */ static void pdf_write_resources(FILE *out, /* I - Output file */ int outpage) /* I - Output page for resources */ { int i; /* Looping var */ outpage_t *op; /* Current output page */ page_t *p; /* Current page */ render_t *r; /* Render pointer */ int fonts_used[TYPE_MAX * STYLE_MAX]; /* Non-zero if the page uses a font */ int images_used; /* Non-zero if the page uses an image */ int text_used; /* Non-zero if the page uses text */ static const char *effects[] = /* Effects and their commands */ { "", "/S/Box/M/I", "/S/Box/M/O", "/S/Dissolve", "/S/Glitter/Di 270", "/S/Glitter/Di 315", "/S/Glitter/Di 0", "/S/Blinds/Dm/H", "/S/Split/Dm/H/M/I", "/S/Split/Dm/H/M/O", "/S/Blinds/Dm/V", "/S/Split/Dm/V/M/I", "/S/Split/Dm/V/M/O", "/S/Wipe/Di 270", "/S/Wipe/Di 180", "/S/Wipe/Di 0", "/S/Wipe/Di 90" }; memset(fonts_used, 0, sizeof(fonts_used)); fonts_used[HeadFootType * 4 + HeadFootStyle] = 1; images_used = background_image != NULL; text_used = 0; op = outpages + outpage; for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; for (r = p->start; r != NULL; r = r->next) if (r->type == RENDER_IMAGE) images_used = 1; else if (r->type == RENDER_TEXT) { text_used = 1; fonts_used[r->data.text.typeface * 4 + r->data.text.style] = 1; } } fputs("/Resources<<", out); if (!images_used) fputs("/ProcSet[/PDF/Text]", out); else if (PDFVersion >= 12) { if (OutputColor) fputs("/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]", out); else fputs("/ProcSet[/PDF/Text/ImageB/ImageI]", out); } else { if (OutputColor) fputs("/ProcSet[/PDF/Text/ImageB/ImageC]", out); else fputs("/ProcSet[/PDF/Text/ImageB]", out); } if (text_used) { fputs("/Font<<", out); for (i = 0; i < (TYPE_MAX * STYLE_MAX); i ++) if (fonts_used[i]) fprintf(out, "/F%x %d 0 R", i, font_objects[i]); fputs(">>", out); } fputs("/XObject<<", out); for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; for (r = p->start; r != NULL; r = r->next) if (r->type == RENDER_IMAGE && r->data.image->obj) fprintf(out, "/I%d %d 0 R", r->data.image->obj, r->data.image->obj); } if (background_image) fprintf(out, "/I%d %d 0 R", background_image->obj, background_image->obj); fputs(">>>>", out); if (PDFEffect) fprintf(out, "/Dur %.0f/Trans<>", PDFPageDuration, PDFEffectDuration, effects[PDFEffect]); } /* * 'pdf_write_outpage()' - Write an output page. */ static void pdf_write_outpage(FILE *out, /* I - Output file */ int outpage) /* I - Output page number */ { int i; /* Looping var */ page_t *p; /* Current page */ outpage_t *op; /* Output page */ DEBUG_printf(("pdf_write_outpage(out = %p, outpage = %d)\n", out, outpage)); if (outpage < 0 || outpage >= num_outpages) return; op = outpages + outpage; p = pages + op->pages[0]; DEBUG_printf(("op->pages[0] = %d (%dx%d)\n", op->pages[0], p->width, p->length)); /* * Let the user know which page we are writing... */ if (Verbosity) { progress_show("Writing page %s...", p->page_text); progress_update(100 * outpage / num_outpages); } /* * Output the page prolog... */ pdf_start_object(out); fputs("/Type/Page", out); fprintf(out, "/Parent %d 0 R", pages_object); fprintf(out, "/Contents %d 0 R", num_objects + 1); if (p->landscape) fprintf(out, "/MediaBox[0 0 %d %d]", p->length, p->width); else fprintf(out, "/MediaBox[0 0 %d %d]", p->width, p->length); pdf_write_resources(out, outpage); /* * Actions (links)... */ if (op->annot_object > 0) fprintf(out, "/Annots %d 0 R", op->annot_object); pdf_end_object(out); pdf_start_object(out); if (Compression) fputs("/Filter/FlateDecode", out); pdf_start_stream(out); flate_open_stream(out); /* * Render all of the pages... */ switch (op->nup) { case 1 : pdf_write_page(out, op->pages[0]); break; default : for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; flate_printf(out, "q %.3f %.3f %.3f %.3f %.3f %.3f cm\n", p->outmatrix[0][0], p->outmatrix[1][0], p->outmatrix[0][1], p->outmatrix[1][1], p->outmatrix[0][2], p->outmatrix[1][2]); pdf_write_page(out, op->pages[i]); flate_puts("Q\n", out); } break; } /* * Close out the page... */ flate_close_stream(out); pdf_end_object(out); } /* * 'pdf_write_page()' - Write a page to a PDF file. */ static void pdf_write_page(FILE *out, /* I - Output file */ int page) /* I - Page number */ { render_t *r, /* Render pointer */ *next; /* Next render */ float box[3]; /* RGB color for boxes */ page_t *p; /* Current page */ const char *debug; /* HTMLDOC_DEBUG environment variable */ if (page < 0 || page >= alloc_pages) return; p = pages + page; /* * Clear the render cache... */ render_rgb[0] = -1.0f; render_rgb[1] = -1.0f; render_rgb[2] = -1.0f; render_x = -1.0f; render_y = -1.0f; /* * Output the page header... */ flate_puts("q\n", out); write_background(page, out); if (p->duplex && (page & 1)) flate_printf(out, "1 0 0 1 %d %d cm\n", p->right, p->bottom); else flate_printf(out, "1 0 0 1 %d %d cm\n", p->left, p->bottom); /* * Render all graphics elements... */ box[0] = -1.0f; box[1] = -1.0f; box[2] = -1.0f; for (r = p->start; r != NULL; r = r->next) switch (r->type) { case RENDER_IMAGE : if (r->width > 0.01f && r->height > 0.01f) write_image(out, r); break; case RENDER_BOX : if (r->height == 0.0) { if (box[0] != r->data.box[0] || box[1] != r->data.box[1] || box[2] != r->data.box[2]) { box[0] = r->data.box[0]; box[1] = r->data.box[1]; box[2] = r->data.box[2]; if (OutputColor) flate_printf(out, "%.2f %.2f %.2f RG\n", box[0], box[1], box[2]); else flate_printf(out, "%.2f G\n", box[0] * 0.31f + box[1] * 0.61f + box[2] * 0.08f); } flate_printf(out, "%.1f %.1f m %.1f %.1f l S\n", r->x, r->y, r->x + r->width, r->y); } else { set_color(out, r->data.box); flate_printf(out, "%.1f %.1f %.1f %.1f re f\n", r->x, r->y, r->width, r->height); } break; } /* * Render all text elements, freeing used memory as we go... */ flate_puts("BT\n", out); render_typeface = -1; render_style = -1; render_size = -1; render_x = -1.0f; render_y = -1.0f; render_spacing = -1.0f; for (r = p->start, next = NULL; r != NULL; r = next) { if (r->type == RENDER_TEXT) write_text(out, r); next = r->next; free(r); } p->start = NULL; flate_puts("ET\n", out); if ((debug = getenv("HTMLDOC_DEBUG")) != NULL && strstr(debug, "margin")) { // Show printable area... flate_printf(out, "1 0 1 RG 0 0 %d %d re S\n", p->width - p->right - p->left, p->length - p->top - p->bottom); } /* * Output the page trailer... */ flate_puts("Q\n", out); } #ifdef DEBUG_TOC static void pdf_text_contents(FILE *out, tree_t *toc, int indent) { static const char *spaces = " " " "; if (indent > 16) indent = 16; while (toc) { fprintf(out, "%% %s<%s>", spaces + 64 - 4 * indent, _htmlMarkups[toc->markup]); switch (toc->markup) { case MARKUP_A : tree_t *temp; for (temp = toc->child; temp; temp = temp->next) fputs((char *)temp->data, out); break; default : fputs("\n", out); pdf_text_contents(out, toc->child, indent + 1); fprintf(out, "%% %s", spaces + 64 - 4 * indent); break; } fprintf(out, "\n", _htmlMarkups[toc->markup]); toc = toc->next; } } #endif // DEBUG_TOC /* * 'pdf_write_contents()' - Write the table of contents as outline records to * a PDF file. */ static void pdf_write_contents(FILE *out, /* I - Output file */ tree_t *toc, /* I - Table of contents tree */ int parent, /* I - Parent outline object */ int prev, /* I - Previous outline object */ int next, /* I - Next outline object */ int *heading) /* IO - Current heading # */ { int i, /* Looping var */ thisobj, /* This object */ entry, /* TOC entry object */ count; /* Number of entries at this level */ uchar *text; /* Entry text */ tree_t *temp; /* Looping var */ int *entry_counts, /* Number of sub-entries for this entry */ *entry_objects; /* Objects for each entry */ tree_t **entries; /* Pointers to each entry */ float x, y; /* Position of link */ /* * Make an object for this entry... */ if (toc == NULL) { /* * This is for the Table of Contents page... */ thisobj = pdf_start_object(out); fprintf(out, "/Parent %d 0 R", parent); fputs("/Title", out); write_utf16(out, (uchar *)TocTitle); x = 0.0f; y = PagePrintLength + PageBottom; pspdf_transform_coords(pages + chapter_starts[0], x, y); fprintf(out, "/Dest[%d 0 R/XYZ %.0f %.0f 0]", pages_object + 2 * chapter_outstarts[0] + 1, x, y); if (prev > 0) fprintf(out, "/Prev %d 0 R", prev); if (next > 0) fprintf(out, "/Next %d 0 R", next); pdf_end_object(out); return; } /* * Allocate the arrays... Add 1 to hold the TOC at the top level... */ if ((entry_counts = (int *)calloc(sizeof(int), num_headings + 1)) == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d headings - %s", num_headings, strerror(errno)); return; } if ((entry_objects = (int *)calloc(sizeof(int), num_headings + 1)) == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d headings - %s", num_headings, strerror(errno)); free(entry_counts); return; } if ((entries = (tree_t **)calloc(sizeof(tree_t *), num_headings + 1)) == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d headings - %s", num_headings, strerror(errno)); free(entry_objects); free(entry_counts); return; } if (parent == 0 && TocLevels > 0) { /* * Add the table of contents to the top-level contents... */ entries[0] = NULL; entry_objects[0] = num_objects + 2; entry = num_objects + 3; count = 1; } else { entry = num_objects + 2; count = 0; } /* * Find and count the children (entries)... */ if (toc->markup == MARKUP_B && toc->next && toc->next->markup == MARKUP_UL) temp = toc->next->child; else if (toc->markup == MARKUP_LI && toc->last_child && toc->last_child->markup == MARKUP_UL) temp = toc->last_child->child; else temp = toc->child; for (; temp && count <= num_headings; temp = temp->next) { if (temp->markup == MARKUP_B) { entries[count] = temp; entry_objects[count] = entry; if (temp->next && temp->next->markup == MARKUP_UL) entry_counts[count] = pdf_count_headings(temp->next->child); else entry_counts[count] = 0; entry += entry_counts[count] + 1; count ++; } else if (temp->markup == MARKUP_LI) { entries[count] = temp; entry_objects[count] = entry; if (temp->last_child && temp->last_child->markup == MARKUP_UL) entry_counts[count] = pdf_count_headings(temp->last_child); else entry_counts[count] = 0; entry += entry_counts[count] + 1; count ++; } } /* * Output the top-level object... */ thisobj = pdf_start_object(out); if (parent == 0) outline_object = thisobj; else fprintf(out, "/Parent %d 0 R", parent); if (count > 0) { fprintf(out, "/Count %d", parent == 0 ? count : -count); fprintf(out, "/First %d 0 R", entry_objects[0]); fprintf(out, "/Last %d 0 R", entry_objects[count - 1]); } if (parent > 0 && toc->child && toc->child->markup == MARKUP_A) { if ((text = htmlGetText(toc->child->child)) != NULL) { fputs("/Title", out); write_utf16(out, text); free(text); } i = heading_pages[*heading]; x = 0.0f; y = heading_tops[*heading] + pages[i].bottom; pspdf_transform_coords(pages + i, x, y); fprintf(out, "/Dest[%d 0 R/XYZ %.0f %.0f 0]", pages_object + 2 * pages[i].outpage + 1, x, y); (*heading) ++; } if (prev > 0) fprintf(out, "/Prev %d 0 R", prev); if (next > 0) fprintf(out, "/Next %d 0 R", next); pdf_end_object(out); for (i = 0; i < count ; i ++) pdf_write_contents(out, entries[i], thisobj, i > 0 ? entry_objects[i - 1] : 0, i < (count - 1) ? entry_objects[i + 1] : 0, heading); free(entry_objects); free(entry_counts); free(entries); } // // 'pdf_write_files()' - Write an outline of HTML files. // static void pdf_write_files(FILE *out, // I - Output file tree_t *doc) // I - Document tree { int i, // Looping var num_files, // Number of FILE elements entry, // Entry object alloc_text; // Allocated text? uchar *text; // Entry text tree_t *temp; // Current node link_t *link; // Link to file... float x, y; // Position of link // Figure out the number of (top-level) files in the document... for (num_files = 0, temp = doc; temp; temp = temp->next) if (temp->markup == MARKUP_FILE) num_files ++; if (!num_files) { // No files to outline... outline_object = 0; return; } // Write the outline dictionary... outline_object = pdf_start_object(out); fprintf(out, "/Count %d", num_files); fprintf(out, "/First %d 0 R", outline_object + 1); fprintf(out, "/Last %d 0 R", outline_object + num_files); pdf_end_object(out); // Now write the outline items... for (i = 0, temp = doc; temp; temp = temp->next) if (temp->markup == MARKUP_FILE) { alloc_text = 0; if ((text = get_title(temp->child)) != NULL) alloc_text = 1; else if ((text = htmlGetVariable(temp, (uchar *)"_HD_FILENAME")) == NULL) text = (uchar *)"Unknown"; entry = pdf_start_object(out); fprintf(out, "/Parent %d 0 R", outline_object); fputs("/Title", out); write_utf16(out, text); if (alloc_text) free(text); if ((link = find_link(htmlGetVariable(temp, (uchar *)"_HD_FILENAME"))) != NULL) { x = 0.0f; y = link->top + pages[link->page].bottom; pspdf_transform_coords(pages + link->page, x, y); fprintf(out, "/Dest[%d 0 R/XYZ %.0f %.0f 0]", pages_object + 2 * pages[link->page].outpage + 1, x, y); } if (i > 0) fprintf(out, "/Prev %d 0 R", outline_object + i); if (i < (num_files - 1)) fprintf(out, "/Next %d 0 R", outline_object + i + 2); pdf_end_object(out); i ++; } } /* * 'pdf_count_headings()' - Count the number of headings under this TOC * entry. */ static int /* O - Number of headings found */ pdf_count_headings(tree_t *toc) /* I - TOC entry */ { int headings; /* Number of headings */ for (headings = 0; toc != NULL; toc = toc->next) { if (toc->markup == MARKUP_A) headings ++; if (toc->child != NULL) headings += pdf_count_headings(toc->child); } return (headings); } /* * PDF object state variables... */ static int pdf_stream_length = 0; static int pdf_stream_start = 0; static int pdf_object_type = 0; /* * 'pdf_start_object()' - Start a new PDF object... */ static int // O - Object number pdf_start_object(FILE *out, // I - File to write to int array) // I - 1 = array, 0 = dictionary { int *temp; // Temporary integer pointer num_objects ++; // Allocate memory as necessary... if (num_objects >= alloc_objects) { alloc_objects += ALLOC_OBJECTS; if (alloc_objects == ALLOC_OBJECTS) temp = (int *)malloc(sizeof(int) * alloc_objects); else temp = (int *)realloc(objects, sizeof(int) * alloc_objects); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d objects - %s", alloc_objects, strerror(errno)); alloc_objects -= ALLOC_OBJECTS; return (0); } objects = temp; } objects[num_objects] = ftell(out); fprintf(out, "%d 0 obj", num_objects); pdf_object_type = array; fputs(pdf_object_type ? "[" : "<<", out); return (num_objects); } /* * 'pdf_start_stream()' - Start a new PDF stream... */ static void pdf_start_stream(FILE *out) // I - File to write to { // Write the "/Length " string, get the position, and then write 10 // zeroes to cover the maximum size of a stream. fputs("/Length ", out); pdf_stream_length = ftell(out); fputs("0000000000>>stream\n", out); pdf_stream_start = ftell(out); } /* * 'pdf_end_object()' - End a PDF object... */ static void pdf_end_object(FILE *out) // I - File to write to { int length; // Total length of stream if (pdf_stream_start) { // For streams, go back and update the length field in the // object dictionary... length = ftell(out) - pdf_stream_start; fseek(out, pdf_stream_length, SEEK_SET); fprintf(out, "%-10d", length); fseek(out, 0, SEEK_END); pdf_stream_start = 0; fputs("endstream\n", out); } else fputs(pdf_object_type ? "]" : ">>", out); fputs("endobj\n", out); } /* * 'pdf_write_links()' - Write annotation link objects for each page in the * document. */ static void pdf_write_links(FILE *out) /* I - Output file */ { int i, /* Looping var */ outpage, /* Current page */ lobj, /* Current link */ num_lobjs, /* Number of links on this page */ alloc_lobjs, /* Number of links to allocate */ *lobjs; /* Link objects */ float x, y; /* Position of last link */ render_t *r, /* Current render primitive */ *rlast, /* Last render link primitive */ *rprev; /* Previous render primitive */ link_t *link; /* Local link */ page_t *p; /* Current page */ outpage_t *op; /* Current output page */ /* * First combine adjacent, identical links... */ for (outpage = 0, op = outpages; outpage < num_outpages; outpage ++, op ++) { for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; for (r = p->start, x = 0.0f, y = 0.0f, rlast = NULL, rprev = NULL; r != NULL; rprev = r, r = r->next) if (r->type == RENDER_LINK) { if (fabs(r->x - x) < 0.1f && fabs(r->y - y) < 0.1f && rlast != NULL && strcmp((const char *)rlast->data.link, (const char *)r->data.link) == 0) { // Combine this primitive with the previous one in rlast... rlast->width = r->x + r->width - rlast->x; x = rlast->x + rlast->width; // Delete this render primitive... rprev->next = r->next; free(r); r = rprev; } else { // Can't combine; just save this info for later use... rlast = r; x = r->x + r->width; y = r->y; } } } } /* * Setup the initial pages_object number... */ pages_object = num_objects + 1; /* * Add space for named links in PDF 1.2 output... */ if (PDFVersion >= 12) pages_object += num_links + 3; /* * Stop here if we won't be generating links in the output... */ if (!Links) return; /* * Figure out how many link objects we'll have... */ for (outpage = 0, op = outpages, alloc_lobjs = 0; outpage < num_pages; outpage ++, op ++) { num_lobjs = 0; for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; for (r = p->start; r != NULL; r = r->next) if (r->type == RENDER_LINK) { if (find_link(r->data.link) != NULL) num_lobjs ++; else num_lobjs += 2; } } if (num_lobjs > 0) pages_object += num_lobjs + 1; if (num_lobjs > alloc_lobjs) alloc_lobjs = num_lobjs; } if (alloc_lobjs == 0) return; /* * Allocate memory for the links... */ if ((lobjs = (int *)malloc(sizeof(int) * alloc_lobjs)) == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d link objects - %s", alloc_lobjs, strerror(errno)); return; } /* * Then generate annotation objects for all the links... */ for (outpage = 0, op = outpages; outpage < num_pages; outpage ++, op ++) { num_lobjs = 0; for (i = 0; i < op->nup; i ++) { if (op->pages[i] < 0) break; p = pages + op->pages[i]; for (r = p->start; r != NULL; r = r->next) if (r->type == RENDER_LINK) { if ((link = find_link(r->data.link)) != NULL) { /* * Local link... */ float x1, y1, x2, y2; lobjs[num_lobjs ++] = pdf_start_object(out); fputs("/Subtype/Link", out); if (PageDuplex && (op->pages[i] & 1)) { x1 = r->x + p->right; y1 = r->y + p->bottom - 2; x2 = r->x + r->width + p->right; y2 = r->y + r->height + p->bottom; } else { x1 = r->x + p->left; y1 = r->y + p->bottom - 2; x2 = r->x + r->width + p->left; y2 = r->y + r->height + p->bottom; } pspdf_transform_coords(p, x1, y1); pspdf_transform_coords(p, x2, y2); fprintf(out, "/Rect[%.1f %.1f %.1f %.1f]", x1, y1, x2, y2); fputs("/Border[0 0 0]", out); x1 = 0.0f; y1 = link->top + pages[link->page].bottom; pspdf_transform_coords(pages + link->page, x1, y1); fprintf(out, "/Dest[%d 0 R/XYZ %.0f %.0f 0]", pages_object + 2 * pages[link->page].outpage + 1, x1, y1); pdf_end_object(out); } else { /* * Remote link... */ pdf_start_object(out); if (PDFVersion >= 12 && file_method((char *)r->data.link) == NULL) { #ifdef WIN32 if (strcasecmp(file_extension((char *)r->data.link), "pdf") == 0) #else if (strcmp(file_extension((char *)r->data.link), "pdf") == 0) #endif /* WIN32 */ { /* * Link to external PDF file... */ fputs("/S/GoToR", out); fputs("/D[0/XYZ null null 0]", out); fputs("/F", out); write_string(out, r->data.link, 0); } else { /* * Link to external filename... */ fputs("/S/Launch", out); fputs("/F", out); write_string(out, r->data.link, 0); if (StrictHTML) progress_error(HD_ERROR_UNRESOLVED_LINK, "Unable to resolve link to \"%s\"!", r->data.link); } } else { /* * Link to web file... */ fputs("/S/URI", out); fputs("/URI", out); write_string(out, r->data.link, 0); } pdf_end_object(out); lobjs[num_lobjs ++] = pdf_start_object(out); fputs("/Subtype/Link", out); if (PageDuplex && (outpage & 1)) fprintf(out, "/Rect[%.1f %.1f %.1f %.1f]", r->x + PageRight, r->y + PageBottom, r->x + r->width + PageRight, r->y + r->height + PageBottom); else fprintf(out, "/Rect[%.1f %.1f %.1f %.1f]", r->x + PageLeft, r->y + PageBottom - 2, r->x + r->width + PageLeft, r->y + r->height + PageBottom); fputs("/Border[0 0 0]", out); fprintf(out, "/A %d 0 R", num_objects - 1); pdf_end_object(out); } } } if (num_lobjs > 0) { outpages[outpage].annot_object = pdf_start_object(out, 1); for (lobj = 0; lobj < num_lobjs; lobj ++) fprintf(out, "%d 0 R%s", lobjs[lobj], lobj < (num_lobjs - 1) ? "\n" : ""); pdf_end_object(out); } } free(lobjs); } /* * 'pdf_write_names()' - Write named destinations for each link. */ static void pdf_write_names(FILE *out) /* I - Output file */ { int i; /* Looping var */ uchar *s; /* Current character in name */ link_t *link; /* Local link */ /* * Convert all link names to lowercase... */ for (i = num_links, link = links; i > 0; i --, link ++) for (s = link->name; *s != '\0'; s ++) *s = tolower(*s); /* * Write the root name tree entry... */ names_object = pdf_start_object(out); fprintf(out, "/Dests %d 0 R", num_objects + 1); pdf_end_object(out); /* * Write the name tree child list... */ pdf_start_object(out); fprintf(out, "/Kids[%d 0 R]", num_objects + 1); pdf_end_object(out); /* * Write the leaf node for the name tree... */ pdf_start_object(out); fputs("/Limits[", out); write_string(out, links[0].name, 0); write_string(out, links[num_links - 1].name, 0); fputs("]", out); fputs("/Names[", out); for (i = 1, link = links; i <= num_links; i ++, link ++) { write_string(out, link->name, 0); fprintf(out, "%d 0 R", num_objects + i); } fputs("]", out); pdf_end_object(out); for (i = num_links, link = links; i > 0; i --, link ++) { pdf_start_object(out); float x, y; x = 0.0f; y = link->top + pages[link->page].bottom; pspdf_transform_coords(pages + link->page, x, y); fprintf(out, "/D[%d 0 R/XYZ %.0f %.0f 0]", pages_object + 2 * pages[link->page].outpage + 1, x, y); pdf_end_object(out); } } /* * 'render_contents()' - Render a single heading. */ static void render_contents(tree_t *t, /* I - Tree to parse */ float left, /* I - Left margin */ float right, /* I - Printable width */ float bottom, /* I - Bottom margin */ float top, /* I - Printable top */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ int heading, /* I - Heading # */ tree_t *chap) /* I - Chapter heading */ { float x, width, numberwidth, height, rgb[3]; int hpage; uchar number[1024], *nptr, *link; tree_t *flat, *temp, *next; render_t *r; #define dot_width (_htmlSizes[SIZE_P] * _htmlWidths[t->typeface][t->style]['.']) DEBUG_printf(("render_contents(t=%p, left=%.1f, right=%.1f, bottom=%.1f, top=%.1f, y=%.1f, page=%d, heading=%d, chap=%p)\n", t, left, right, bottom, top, *y, *page, heading, chap)); if (!t) return; /* * Put the text... */ flat = flatten_tree(t->child->child); for (height = 0.0, temp = flat; temp != NULL; temp = temp->next) if (temp->height > height) height = temp->height; height *= _htmlSpacings[SIZE_P] / _htmlSizes[SIZE_P]; if (t->indent) x = left + 18.0f + 18.0f * t->indent; else x = left; *y -= height; /* * Get the width of the page number, leave room for three dots... */ if (heading >= 0) { hpage = heading_pages[heading]; numberwidth = get_width((uchar *)pages[hpage].page_text, t->typeface, t->style, t->size) + 3.0f * dot_width; } else { hpage = 0; numberwidth = 0.0f; } for (temp = flat; temp != NULL; temp = next) { rgb[0] = temp->red / 255.0f; rgb[1] = temp->green / 255.0f; rgb[2] = temp->blue / 255.0f; if ((x + temp->width) >= (right - numberwidth)) { /* * Too wide to fit, continue on the next line */ *y -= _htmlSpacings[SIZE_P]; x = left + 36.0f * t->indent; } if (*y < bottom) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); width = get_width((uchar *)TocTitle, _htmlHeadingFont, STYLE_BOLD, SIZE_H1); *y = top - _htmlSpacings[SIZE_H1]; x = left + 0.5f * (right - left - width); r = new_render(*page, RENDER_TEXT, x, *y, 0, 0, TocTitle); r->data.text.typeface = _htmlHeadingFont; r->data.text.style = STYLE_BOLD; r->data.text.size = _htmlSizes[SIZE_H1]; get_color(_htmlTextColor, r->data.text.rgb); *y -= _htmlSpacings[SIZE_H1]; if (t->indent) x = left + 18.0f + 18.0f * t->indent; else x = left; if (chap != t) { *y += height; render_contents(chap, left, right, bottom, top, y, page, -1, 0); *y -= _htmlSpacings[SIZE_P]; } } if (temp->link != NULL) { link = htmlGetVariable(temp->link, (uchar *)"HREF"); /* * Add a page link... */ if (file_method((char *)link) == NULL && file_target((char *)link) != NULL) link = (uchar *)file_target((char *)link) - 1; // Include # sign new_render(*page, RENDER_LINK, x, *y, temp->width, temp->height, link); if (PSLevel == 0 && Links) { memcpy(rgb, link_color, sizeof(rgb)); temp->red = (int)(link_color[0] * 255.0); temp->green = (int)(link_color[1] * 255.0); temp->blue = (int)(link_color[2] * 255.0); if (LinkStyle) new_render(*page, RENDER_BOX, x, *y - 1, temp->width, 0, link_color); } } switch (temp->markup) { case MARKUP_A : if ((link = htmlGetVariable(temp, (uchar *)"NAME")) != NULL) { /* * Add a target link... */ add_link(link, *page, (int)(*y + height)); } break; case MARKUP_NONE : if (temp->data == NULL) break; if (temp->underline) new_render(*page, RENDER_BOX, x, *y - 1, temp->width, 0, rgb); if (temp->strikethrough) new_render(*page, RENDER_BOX, x, *y + temp->height * 0.25f, temp->width, 0, rgb); r = new_render(*page, RENDER_TEXT, x, *y, 0, 0, temp->data); r->data.text.typeface = temp->typeface; r->data.text.style = temp->style; r->data.text.size = _htmlSizes[temp->size]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); if (temp->superscript) r->y += height - temp->height; else if (temp->subscript) r->y -= height * _htmlSizes[0] / _htmlSpacings[0] - temp->height; break; case MARKUP_IMG : update_image_size(temp); new_render(*page, RENDER_IMAGE, x, *y, temp->width, temp->height, image_find((char *)htmlGetVariable(temp, (uchar *)"REALSRC"))); break; default : break; } x += temp->width; next = temp->next; free(temp); } if (numberwidth > 0.0f) { /* * Draw dots leading up to the page number... */ width = numberwidth - 3.0 * dot_width + x; for (nptr = number; nptr < (number + sizeof(number) - 1) && width < right; width += dot_width) *nptr++ = '.'; nptr --; strlcpy((char *)nptr, pages[hpage].page_text, sizeof(number) - (nptr - number)); r = new_render(*page, RENDER_TEXT, right - width + x, *y, 0, 0, number); r->data.text.typeface = t->typeface; r->data.text.style = t->style; r->data.text.size = _htmlSizes[t->size]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); } } /* * 'count_headings()' - Count the number of headings in the TOC. */ static int count_headings(tree_t *t) // I - Tree to count { int count; // Number of headings... count = 0; while (t != NULL) { switch (t->markup) { case MARKUP_B : case MARKUP_LI : count ++; if (t->last_child && t->last_child->markup == MARKUP_UL) count += count_headings(t->last_child); break; default : count += count_headings(t->child); break; } t = t->next; } return (count); } /* * 'parse_contents()' - Parse the table of contents and produce a * rendering list... */ static void parse_contents(tree_t *t, /* I - Tree to parse */ float left, /* I - Left margin */ float right, /* I - Printable width */ float bottom, /* I - Bottom margin */ float top, /* I - Printable top */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ int *heading, /* IO - Heading # */ tree_t *chap) /* I - Chapter heading */ { DEBUG_printf(("parse_contents(t=%p, left=%.1f, right=%.1f, bottom=%.1f, top=%.1f, y=%.1f, page=%d, heading=%d, chap=%p)\n", t, left, right, bottom, top, *y, *page, *heading, chap)); while (t != NULL) { switch (t->markup) { case MARKUP_B : /* Top-level TOC */ if (t->prev != NULL) /* Advance one line prior to top-levels... */ *y -= _htmlSpacings[SIZE_P]; if (*y < (bottom + _htmlSpacings[SIZE_P] * 3)) *y = 0; // Force page break chap = t; case MARKUP_LI : /* Lower-level TOC */ DEBUG_printf(("parse_contents: heading=%d, page = %d\n", *heading, heading_pages[*heading])); /* * Put the text unless the author has flagged it otherwise... */ if (htmlGetVariable(t, (uchar *)"_HD_OMIT_TOC") == NULL) { render_contents(t, left, right, bottom, top, y, page, *heading, chap); /* * Update current headings for header/footer strings in TOC. */ check_pages(*page); if (t->markup == MARKUP_B && pages[*page].chapter == pages[*page - 1].chapter) pages[*page].chapter = htmlGetText(t->child->child); if (pages[*page].heading == pages[*page - 1].heading) pages[*page].heading = htmlGetText(t->child->child); /* * Next heading... */ (*heading) ++; if (t->last_child->markup == MARKUP_UL) parse_contents(t->last_child, left, right, bottom, top, y, page, heading, chap); } else if (t->next != NULL && t->next->markup == MARKUP_UL) { /* * Skip children of omitted heading... */ t = t->next; (*heading) += count_headings(t->child) + 1; } break; default : parse_contents(t->child, left, right, bottom, top, y, page, heading, chap); break; } t = t->next; } } /* * 'parse_doc()' - Parse a document tree and produce rendering list output. */ static void parse_doc(tree_t *t, /* I - Tree to parse */ float *left, /* I - Left margin */ float *right, /* I - Printable width */ float *bottom, /* I - Bottom margin */ float *top, /* I - Printable top */ float *x, /* IO - X position */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ tree_t *cpara, /* I - Current paragraph */ int *needspace) /* I - Need whitespace before this element */ { int i; /* Looping var */ tree_t *para, /* Phoney paragraph tree entry */ *temp; /* Paragraph entry */ var_t *var; /* Variable entry */ uchar *name; /* ID name */ uchar *style; /* STYLE attribute */ float width, /* Width of horizontal rule */ height, /* Height of rule */ rgb[3]; /* RGB color of rule */ DEBUG_printf(("parse_doc(t=%p, left=%.1f, right=%.1f, bottom=%.1f, top=%.1f, x=%.1f, y=%.1f, page=%d, cpara=%p, needspace=%d\n", t, *left, *right, *bottom, *top, *x, *y, *page, cpara, *needspace)); DEBUG_printf((" title_page = %d, chapter = %d\n", title_page, chapter)); if (cpara == NULL) para = htmlNewTree(NULL, MARKUP_P, NULL); else para = cpara; while (t != NULL) { if (((t->markup == MARKUP_H1 && OutputType == OUTPUT_BOOK) || (t->markup == MARKUP_FILE && OutputType == OUTPUT_WEBPAGES)) && !title_page) { // New page on H1 in book mode or file in webpage mode... if (para->child != NULL && chapter > 0) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } if ((chapter > 0 && OutputType == OUTPUT_BOOK) || ((*page > 1 || *y < *top) && OutputType == OUTPUT_WEBPAGES)) { if (*y < *top) (*page) ++; if (PageDuplex && (*page & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); chapter_ends[chapter] = *page - 1; } // Make sure header and footer strings are correct... check_pages(*page); memcpy(pages[*page].header, Header, sizeof(pages[*page].header)); memcpy(pages[*page].header1, Header1, sizeof(pages[*page].header1)); memcpy(pages[*page].footer, Footer, sizeof(pages[*page].footer)); // Bump the chapter/file count... chapter ++; if (chapter >= MAX_CHAPTERS) { progress_error(HD_ERROR_TOO_MANY_CHAPTERS, "Too many chapters/files in document (%d > %d)!", chapter, MAX_CHAPTERS); chapter = MAX_CHAPTERS - 1; } else chapter_starts[chapter] = *page; if (chapter > TocDocCount) TocDocCount = chapter; *y = *top; *x = *left; *needspace = 0; } if ((name = htmlGetVariable(t, (uchar *)"ID")) != NULL) { /* * Add a link target using the ID=name variable... */ add_link(name, *page, (int)*y); } else if (t->markup == MARKUP_FILE) { /* * Add a file link... */ uchar newname[256], /* New filename */ *sep; /* "?" separator in links */ // Strip any trailing HTTP GET data stuff... strlcpy((char *)newname, (char *)htmlGetVariable(t, (uchar *)"_HD_FILENAME"), sizeof(newname)); if ((sep = (uchar *)strchr((char *)newname, '?')) != NULL) *sep = '\0'; // Add the link add_link(newname, *page, (int)*y); } if (chapter == 0 && !title_page) { // Need to handle page comments before the first heading... if (t->markup == MARKUP_COMMENT) parse_comment(t, left, right, bottom, top, x, y, page, para, *needspace); if (t->child != NULL) parse_doc(t->child, left, right, bottom, top, x, y, page, para, needspace); t = t->next; continue; } // Check for some basic stylesheet stuff... if ((style = htmlGetStyle(t, (uchar *)"page-break-before:")) != NULL && strcasecmp((char *)style, "avoid") != 0) { // Advance to the next page... (*page) ++; *x = *left; *y = *top; *needspace = 0; // See if we need to go to the next left/righthand page... if (PageDuplex && ((*page) & 1) && strcasecmp((char *)style, "right") == 0) (*page) ++; else if (PageDuplex && !((*page) & 1) && strcasecmp((char *)style, "left") == 0) (*page) ++; // Update the progress as necessary... if (Verbosity) progress_show("Formatting page %d", *page); } // Process the markup... switch (t->markup) { case MARKUP_IMG : update_image_size(t); case MARKUP_NONE : case MARKUP_BR : if (para->child == NULL) { if (t->parent == NULL) { para->halignment = ALIGN_LEFT; para->indent = 0; } else { para->halignment = t->parent->halignment; para->indent = t->parent->indent; } } // Skip heading whitespace... if (para->child == NULL && t->markup == MARKUP_NONE && t->data != NULL && strcmp((char *)t->data, " ") == 0) break; if ((temp = htmlAddTree(para, t->markup, t->data)) != NULL) { temp->link = t->link; temp->width = t->width; temp->height = t->height; temp->typeface = t->typeface; temp->style = t->style; temp->size = t->size; temp->underline = t->underline; temp->strikethrough = t->strikethrough; temp->superscript = t->superscript; temp->subscript = t->subscript; temp->halignment = t->halignment; temp->valignment = t->valignment; temp->red = t->red; temp->green = t->green; temp->blue = t->blue; for (i = 0, var = t->vars; i < t->nvars; i ++, var ++) htmlSetVariable(temp, var->name, var->value); } break; case MARKUP_TABLE : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } parse_table(t, *left, *right, *bottom, *top, x, y, page, *needspace); *needspace = 0; break; case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 1; } parse_heading(t, *left, *right, *bottom, *top, x, y, page, *needspace); *needspace = 1; break; case MARKUP_BLOCKQUOTE : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 1; } *left += 36; *right -= 36; parse_doc(t->child, left, right, bottom, top, x, y, page, NULL, needspace); *left -= 36; *right += 36; *x = *left; *needspace = 1; break; case MARKUP_CENTER : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 1; } parse_doc(t->child, left, right, bottom, top, x, y, page, NULL, needspace); *x = *left; *needspace = 1; break; case MARKUP_P : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 1; } parse_doc(t->child, left, right, bottom, top, x, y, page, NULL, needspace); *x = *left; *needspace = 1; break; case MARKUP_DIV : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } parse_doc(t->child, left, right, bottom, top, x, y, page, NULL, needspace); if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } break; case MARKUP_PRE : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 1; } parse_pre(t, *left, *right, *bottom, *top, x, y, page, *needspace); *x = *left; *needspace = 1; break; case MARKUP_DIR : case MARKUP_MENU : case MARKUP_UL : case MARKUP_OL : init_list(t); case MARKUP_DL : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } if (t->indent == 1) *needspace = 1; *left += 36.0f; *x = *left; parse_doc(t->child, left, right, bottom, top, x, y, page, para, needspace); *left -= 36.0f; if (t->indent == 1) *needspace = 1; break; case MARKUP_LI : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 0; } parse_list(t, left, right, bottom, top, x, y, page, *needspace); *x = *left; *needspace = t->next && t->next->markup != MARKUP_LI && t->next->markup != MARKUP_UL && t->next->markup != MARKUP_OL; break; case MARKUP_DT : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 0; } *left -= 36.0f; *x = *left; parse_doc(t->child, left, right, bottom, top, x, y, page, NULL, needspace); *left += 36.0f; *x = *left; *needspace = 0; break; case MARKUP_DD : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 0; } parse_doc(t->child, left, right, bottom, top, x, y, page, NULL, needspace); *x = *left; *needspace = 0; break; case MARKUP_HR : if (para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } if (htmlGetVariable(t, (uchar *)"BREAK") == NULL) { /* * Generate a horizontal rule... */ if ((name = htmlGetVariable(t, (uchar *)"WIDTH")) == NULL) width = *right - *left; else { if (strchr((char *)name, '%') != NULL) width = atoi((char *)name) * (*right - *left) / 100; else width = atoi((char *)name) * PagePrintWidth / _htmlBrowserWidth; } if ((name = htmlGetVariable(t, (uchar *)"SIZE")) == NULL) height = 2; else height = atoi((char *)name) * PagePrintWidth / _htmlBrowserWidth; switch (t->halignment) { case ALIGN_LEFT : *x = *left; break; case ALIGN_CENTER : *x = *left + (*right - *left - width) * 0.5f; break; case ALIGN_RIGHT : *x = *right - width; break; } if (*y < (*bottom + height + _htmlSpacings[SIZE_P])) { /* * Won't fit on this page... */ (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; } (*y) -= height + _htmlSpacings[SIZE_P]; rgb[0] = t->red / 255.0f; rgb[1] = t->green / 255.0f; rgb[2] = t->blue / 255.0f; new_render(*page, RENDER_BOX, *x, *y + _htmlSpacings[SIZE_P] * 0.5, width, height, rgb); } else { /* *
    generates a page break... */ (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; } *x = *left; *needspace = 0; break; case MARKUP_COMMENT : // Check comments for commands... parse_comment(t, left, right, bottom, top, x, y, page, para, *needspace); break; case MARKUP_HEAD : // Ignore document HEAD section case MARKUP_TITLE : // Ignore title and meta stuff case MARKUP_META : case MARKUP_SCRIPT : // Ignore script stuff case MARKUP_INPUT : // Ignore form stuff case MARKUP_SELECT : case MARKUP_OPTION : case MARKUP_TEXTAREA : break; case MARKUP_STYLE : break; case MARKUP_A : if (htmlGetVariable(t, (uchar *)"NAME") != NULL) { /* * Add this named destination to the paragraph tree... */ if (para->child == NULL) { para->halignment = t->halignment; para->indent = t->indent; } if ((temp = htmlAddTree(para, t->markup, t->data)) != NULL) { temp->link = t->link; temp->width = t->width; temp->height = t->height; temp->typeface = t->typeface; temp->style = t->style; temp->size = t->size; temp->underline = t->underline; temp->strikethrough = t->strikethrough; temp->superscript = t->superscript; temp->subscript = t->subscript; temp->halignment = t->halignment; temp->valignment = t->valignment; temp->red = t->red; temp->green = t->green; temp->blue = t->blue; for (i = 0, var = t->vars; i < t->nvars; i ++, var ++) htmlSetVariable(temp, var->name, var->value); } } default : if (t->child != NULL) parse_doc(t->child, left, right, bottom, top, x, y, page, para, needspace); break; } // Check for some basic stylesheet stuff... if ((style = htmlGetStyle(t, (uchar *)"page-break-after:")) != NULL && strcasecmp((char *)style, "avoid") != 0) { // Advance to the next page... (*page) ++; *x = *left; *y = *top; *needspace = 0; // See if we need to go to the next left/righthand page... if (PageDuplex && ((*page) & 1) && strcasecmp((char *)style, "right") == 0) (*page) ++; else if (PageDuplex && !((*page) & 1) && strcasecmp((char *)style, "left") == 0) (*page) ++; // Update the progress as necessary... if (Verbosity) progress_show("Formatting page %d", *page); } // Move to the next node... t = t->next; } if (para->child != NULL && cpara != para) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, *needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; *needspace = 0; } if (cpara != para) htmlDeleteTree(para); DEBUG_printf(("LEAVING parse_doc(), x = %.1f, y = %.1f, page = %d\n", *x, *y, *page)); } /* * 'parse_heading()' - Parse a heading tree and produce rendering list output. */ static void parse_heading(tree_t *t, /* I - Tree to parse */ float left, /* I - Left margin */ float right, /* I - Printable width */ float bottom, /* I - Bottom margin */ float top, /* I - Printable top */ float *x, /* IO - X position */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ int needspace) /* I - Need whitespace? */ { int *temp; // Temporary integer array pointer DEBUG_printf(("parse_heading(t=%p, left=%.1f, right=%.1f, bottom=%.1f, top=%.1f, x=%.1f, y=%.1f, page=%d, needspace=%d\n", t, left, right, bottom, top, *x, *y, *page, needspace)); if (((t->markup - MARKUP_H1) < TocLevels || TocLevels == 0) && !title_page) current_heading = t->child; if (*y < (5 * _htmlSpacings[SIZE_P] + bottom)) { (*page) ++; *y = top; if (Verbosity) progress_show("Formatting page %d", *page); } check_pages(*page); if (t->markup == MARKUP_H1 && !title_page) pages[*page].chapter = htmlGetText(current_heading); if ((pages[*page].heading == NULL || t->markup == MARKUP_H1 || (*page > 0 && pages[*page].heading == pages[*page - 1].heading)) && !title_page) { pages[*page].heading = htmlGetText(current_heading); pages[*page].headnode = current_heading; } if ((t->markup - MARKUP_H1) < TocLevels && !title_page) { DEBUG_printf(("H%d: heading_pages[%d] = %d\n", t->markup - MARKUP_H1 + 1, num_headings, *page - 1)); // See if we need to resize the headings arrays... if (num_headings >= alloc_headings) { alloc_headings += ALLOC_HEADINGS; if (num_headings == 0) temp = (int *)malloc(sizeof(int) * alloc_headings); else temp = (int *)realloc(heading_pages, sizeof(int) * alloc_headings); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d headings - %s", alloc_headings, strerror(errno)); alloc_headings -= ALLOC_HEADINGS; return; } memset(temp + alloc_headings - ALLOC_HEADINGS, 0, sizeof(int) * ALLOC_HEADINGS); heading_pages = temp; if (num_headings == 0) temp = (int *)malloc(sizeof(int) * alloc_headings); else temp = (int *)realloc(heading_tops, sizeof(int) * alloc_headings); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d headings - %s", alloc_headings, strerror(errno)); alloc_headings -= ALLOC_HEADINGS; return; } memset(temp + alloc_headings - ALLOC_HEADINGS, 0, sizeof(int) * ALLOC_HEADINGS); heading_tops = temp; } heading_pages[num_headings] = *page; heading_tops[num_headings] = (int)(*y + 4 * _htmlSpacings[SIZE_P]); num_headings ++; } parse_paragraph(t, left, right, bottom, top, x, y, page, needspace); if (t->halignment == ALIGN_RIGHT && t->markup == MARKUP_H1 && OutputType == OUTPUT_BOOK && !title_page) { /* * Special case - chapter heading for users manual... */ *y = bottom + 0.5f * (top - bottom); } } /* * 'parse_paragraph()' - Parse a paragraph tree and produce rendering list * output. */ static void parse_paragraph(tree_t *t, /* I - Tree to parse */ float left, /* I - Left margin */ float right, /* I - Printable width */ float bottom, /* I - Bottom margin */ float top, /* I - Printable top */ float *x, /* IO - X position */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ int needspace)/* I - Need whitespace? */ { int whitespace; /* Non-zero if a fragment ends in whitespace */ tree_t *flat, *start, *end, *prev, *temp; float width, height, offset, spacing, borderspace, temp_y, temp_width, temp_height; float format_width, image_y, image_left, image_right; float char_spacing; int num_chars; render_t *r; uchar *align, *hspace, *vspace, *link, *border; float rgb[3]; uchar line[10240], *lineptr, *dataptr; tree_t *linetype; float linex, linewidth; int firstline; DEBUG_printf(("parse_paragraph(t=%p, left=%.1f, right=%.1f, bottom=%.1f, top=%.1f, x=%.1f, y=%.1f, page=%d, needspace=%d\n", t, left, right, bottom, top, *x, *y, *page, needspace)); flat = flatten_tree(t->child); image_left = left; image_right = right; image_y = 0; if (flat == NULL) DEBUG_puts("parse_paragraph: flat == NULL!"); // Add leading whitespace... if (*y < top && needspace) *y -= _htmlSpacings[SIZE_P]; /* * First scan for images with left/right alignment tags... */ for (temp = flat, prev = NULL; temp != NULL;) { if (temp->markup == MARKUP_IMG) update_image_size(temp); if (temp->markup == MARKUP_IMG && (align = htmlGetVariable(temp, (uchar *)"ALIGN"))) { if ((border = htmlGetVariable(temp, (uchar *)"BORDER")) != NULL) borderspace = atof((char *)border); else if (temp->link) borderspace = 1; else borderspace = 0; borderspace *= PagePrintWidth / _htmlBrowserWidth; if (strcasecmp((char *)align, "LEFT") == 0) { if ((vspace = htmlGetVariable(temp, (uchar *)"VSPACE")) != NULL) *y -= atoi((char *)vspace); if (*y < (bottom + temp->height + 2 * borderspace)) { (*page) ++; *y = top; if (Verbosity) progress_show("Formatting page %d", *page); } if (borderspace > 0.0f) { if (temp->link && PSLevel == 0) memcpy(rgb, link_color, sizeof(rgb)); else { rgb[0] = temp->red / 255.0f; rgb[1] = temp->green / 255.0f; rgb[2] = temp->blue / 255.0f; } // Top new_render(*page, RENDER_BOX, image_left, *y - borderspace, temp->width + 2 * borderspace, borderspace, rgb); // Left new_render(*page, RENDER_BOX, image_left, *y - temp->height - 2 * borderspace, borderspace, temp->height + 2 * borderspace, rgb); // Right new_render(*page, RENDER_BOX, image_left + temp->width + borderspace, *y - temp->height - 2 * borderspace, borderspace, temp->height + 2 * borderspace, rgb); // Bottom new_render(*page, RENDER_BOX, image_left, *y - temp->height - 2 * borderspace, temp->width + 2 * borderspace, borderspace, rgb); } *y -= borderspace; new_render(*page, RENDER_IMAGE, image_left + borderspace, *y - temp->height, temp->width, temp->height, image_find((char *)htmlGetVariable(temp, (uchar *)"REALSRC"))); if (temp->link && (link = htmlGetVariable(temp->link, (uchar *)"_HD_FULL_HREF")) != NULL) { /* * Add a page link... */ if (file_method((char *)link) == NULL) { if (file_target((char *)link) != NULL) link = (uchar *)file_target((char *)link) - 1; // Include # sign else link = (uchar *)file_basename((char *)link); } new_render(*page, RENDER_LINK, image_left + borderspace, *y - temp->height, temp->width, temp->height, link); } *y -= borderspace; if (vspace != NULL) *y -= atoi((char *)vspace); image_left += temp->width + 2 * borderspace; temp_y = *y - temp->height; if (temp_y < image_y || image_y == 0) image_y = temp_y; if ((hspace = htmlGetVariable(temp, (uchar *)"HSPACE")) != NULL) image_left += atoi((char *)hspace); if (prev != NULL) prev->next = temp->next; else flat = temp->next; free(temp); temp = prev; } else if (strcasecmp((char *)align, "RIGHT") == 0) { if ((vspace = htmlGetVariable(temp, (uchar *)"VSPACE")) != NULL) *y -= atoi((char *)vspace); if (*y < (bottom + temp->height + 2 * borderspace)) { (*page) ++; *y = top; if (Verbosity) progress_show("Formatting page %d", *page); } image_right -= temp->width + 2 * borderspace; if (borderspace > 0.0f) { if (temp->link && PSLevel == 0) memcpy(rgb, link_color, sizeof(rgb)); else { rgb[0] = temp->red / 255.0f; rgb[1] = temp->green / 255.0f; rgb[2] = temp->blue / 255.0f; } // Top new_render(*page, RENDER_BOX, image_right, *y - borderspace, temp->width + 2 * borderspace, borderspace, rgb); // Left new_render(*page, RENDER_BOX, image_right, *y - temp->height - 2 * borderspace, borderspace, temp->height + 2 * borderspace, rgb); // Right new_render(*page, RENDER_BOX, image_right + temp->width + borderspace, *y - temp->height - 2 * borderspace, borderspace, temp->height + 2 * borderspace, rgb); // Bottom new_render(*page, RENDER_BOX, image_right, *y - temp->height - 2 * borderspace, temp->width + 2 * borderspace, borderspace, rgb); } *y -= borderspace; new_render(*page, RENDER_IMAGE, image_right + borderspace, *y - temp->height, temp->width, temp->height, image_find((char *)htmlGetVariable(temp, (uchar *)"REALSRC"))); if (temp->link && (link = htmlGetVariable(temp->link, (uchar *)"_HD_FULL_HREF")) != NULL) { /* * Add a page link... */ if (file_method((char *)link) == NULL) { if (file_target((char *)link) != NULL) link = (uchar *)file_target((char *)link) - 1; // Include # sign else link = (uchar *)file_basename((char *)link); } new_render(*page, RENDER_LINK, image_right + borderspace, *y - temp->height, temp->width, temp->height, link); } *y -= borderspace; if (vspace != NULL) *y -= atoi((char *)vspace); temp_y = *y - temp->height; if (temp_y < image_y || image_y == 0) image_y = temp_y; if ((hspace = htmlGetVariable(temp, (uchar *)"HSPACE")) != NULL) image_right -= atoi((char *)hspace); if (prev != NULL) prev->next = temp->next; else flat = temp->next; free(temp); temp = prev; } } if (temp != NULL) { prev = temp; temp = temp->next; } else temp = flat; } /* * Then format the text and inline images... */ format_width = image_right - image_left; firstline = 1; DEBUG_printf(("format_width = %.1f\n", format_width)); // Make stupid compiler warnings go away (if you can't put // enough smarts in the compiler, don't add the warning!) offset = 0.0f; temp_width = 0.0f; temp_height = 0.0f; lineptr = NULL; linex = 0.0f; linewidth = 0.0f; while (flat != NULL) { start = flat; end = flat; width = 0.0; while (flat != NULL) { // Get fragments... temp_width = 0.0; temp = flat; whitespace = 0; while (temp != NULL && !whitespace) { if (temp->markup == MARKUP_NONE && temp->data[0] == ' ') { if (temp == start) temp_width -= _htmlWidths[temp->typeface][temp->style][' '] * _htmlSizes[temp->size]; else if (temp_width > 0.0f) whitespace = 1; } else whitespace = 0; if (whitespace) break; if (temp->markup == MARKUP_IMG) { if ((border = htmlGetVariable(temp, (uchar *)"BORDER")) != NULL) borderspace = atof((char *)border); else if (temp->link) borderspace = 1; else borderspace = 0; borderspace *= PagePrintWidth / _htmlBrowserWidth; temp_width += 2 * borderspace; } prev = temp; temp = temp->next; temp_width += prev->width; if ((temp_width >= format_width && prev->markup == MARKUP_IMG) || prev->markup == MARKUP_BR) break; } if ((width + temp_width) <= format_width) { width += temp_width; end = temp; flat = temp; if (prev->markup == MARKUP_BR) break; } else if (width == 0.0) { width += temp_width; end = temp; flat = temp; break; } else break; } if (start == end) { end = start->next; flat = start->next; width = start->width; } for (height = 0.0, num_chars = 0, temp = prev = start; temp != end; temp = temp->next) { prev = temp; if (temp->markup == MARKUP_NONE) num_chars += strlen((char *)temp->data); if (temp->height > height && (temp->markup != MARKUP_IMG || temp->valignment != ALIGN_MIDDLE)) height = temp->height; else if ((0.5 * temp->height) > height && temp->markup == MARKUP_IMG && temp->valignment == ALIGN_MIDDLE) height = 0.5 * temp->height; } for (spacing = 0.0, temp = prev = start; temp != end; temp = temp->next) { prev = temp; if (temp->markup != MARKUP_IMG) temp_height = temp->height * _htmlSpacings[0] / _htmlSizes[0]; else { if ((border = htmlGetVariable(temp, (uchar *)"BORDER")) != NULL) borderspace = atof((char *)border); else if (temp->link) borderspace = 1; else borderspace = 0; borderspace *= PagePrintWidth / _htmlBrowserWidth; temp_height = temp->height + 2 * borderspace; } if (temp_height > spacing) spacing = temp_height; } if (firstline && end != NULL && *y < (bottom + height + _htmlSpacings[t->size])) { // Go to next page since only 1 line will fit on this one... (*page) ++; *y = top; if (Verbosity) progress_show("Formatting page %d", *page); } firstline = 0; if (height == 0.0f) height = spacing; for (temp = start; temp != end; temp = temp->next) if (temp->markup != MARKUP_A) break; if (temp != NULL && temp->markup == MARKUP_NONE && temp->data[0] == ' ') { // Drop leading space... for (dataptr = temp->data; *dataptr; dataptr ++) *dataptr = dataptr[1]; *dataptr = '\0'; temp_width = _htmlWidths[temp->typeface][temp->style][' '] * _htmlSizes[temp->size]; temp->width -= temp_width; num_chars --; } if (end != NULL) temp = end->prev; else temp = NULL; if (*y < (spacing + bottom)) { (*page) ++; *y = top; if (Verbosity) progress_show("Formatting page %d", *page); } *y -= height; DEBUG_printf((" y = %.1f, width = %.1f, height = %.1f\n", *y, width, height)); if (Verbosity) progress_update(100 - (int)(100 * (*y) / PagePrintLength)); char_spacing = 0.0f; whitespace = 0; temp = start; linetype = NULL; rgb[0] = temp->red / 255.0f; rgb[1] = temp->green / 255.0f; rgb[2] = temp->blue / 255.0f; switch (t->halignment) { case ALIGN_LEFT : linex = image_left; break; case ALIGN_CENTER : linex = image_left + 0.5f * (format_width - width); break; case ALIGN_RIGHT : linex = image_right - width; break; case ALIGN_JUSTIFY : linex = image_left; if (flat != NULL && flat->prev->markup != MARKUP_BR && num_chars > 1) char_spacing = (format_width - width) / (num_chars - 1); break; } while (temp != end) { if (temp->link != NULL && PSLevel == 0 && Links && temp->markup == MARKUP_NONE) { temp->red = (int)(link_color[0] * 255.0); temp->green = (int)(link_color[1] * 255.0); temp->blue = (int)(link_color[2] * 255.0); } /* * See if we are doing a run of characters in a line and need to * output this run... */ if (linetype != NULL && (temp->markup != MARKUP_NONE || temp->typeface != linetype->typeface || temp->style != linetype->style || temp->size != linetype->size || temp->superscript != linetype->superscript || temp->subscript != linetype->subscript || temp->red != linetype->red || temp->green != linetype->green || temp->blue != linetype->blue)) { r = new_render(*page, RENDER_TEXT, linex - linewidth, *y, linewidth, linetype->height, line); r->data.text.typeface = linetype->typeface; r->data.text.style = linetype->style; r->data.text.size = _htmlSizes[linetype->size]; r->data.text.spacing = char_spacing; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); if (linetype->superscript) r->y += height - linetype->height; else if (linetype->subscript) r->y -= height - linetype->height; free(linetype); linetype = NULL; } switch (temp->markup) { case MARKUP_A : if ((link = htmlGetVariable(temp, (uchar *)"NAME")) != NULL) { /* * Add a target link... */ add_link(link, *page, (int)(*y + height)); } default : temp_width = temp->width; break; case MARKUP_NONE : if (temp->data == NULL) break; if (((temp->width - right + left) > 0.001 || (temp->height - top + bottom) > 0.001) && OverflowErrors) progress_error(HD_ERROR_CONTENT_TOO_LARGE, "Text on page %d too large - " "truncation or overlapping may occur!", *page + 1); if (linetype == NULL) { linetype = temp; lineptr = line; linewidth = 0.0; rgb[0] = temp->red / 255.0f; rgb[1] = temp->green / 255.0f; rgb[2] = temp->blue / 255.0f; } strlcpy((char *)lineptr, (char *)temp->data, sizeof(line) - (lineptr - line)); temp_width = temp->width + char_spacing * strlen((char *)lineptr); if (temp->underline || (temp->link && LinkStyle && PSLevel == 0)) new_render(*page, RENDER_BOX, linex, *y - 1, temp_width, 0, rgb); if (temp->strikethrough) new_render(*page, RENDER_BOX, linex, *y + temp->height * 0.25f, temp_width, 0, rgb); linewidth += temp_width; lineptr += strlen((char *)lineptr); if (lineptr[-1] == ' ') whitespace = 1; else whitespace = 0; break; case MARKUP_IMG : if (((temp->width - right + left) > 0.001 || (temp->height - top + bottom) > 0.001) && OverflowErrors) { DEBUG_printf(("IMAGE: %.3fx%.3f > %.3fx%.3f\n", temp->width, temp->height, right - left, top - bottom)); progress_error(HD_ERROR_CONTENT_TOO_LARGE, "Image on page %d too large - " "truncation or overlapping may occur!", *page + 1); } if ((border = htmlGetVariable(temp, (uchar *)"BORDER")) != NULL) borderspace = atof((char *)border); else if (temp->link) borderspace = 1; else borderspace = 0; borderspace *= PagePrintWidth / _htmlBrowserWidth; temp_width += 2 * borderspace; switch (temp->valignment) { case ALIGN_TOP : offset = height - temp->height - 2 * borderspace; break; case ALIGN_MIDDLE : offset = 0.5f * (height - temp->height) - borderspace; break; case ALIGN_BOTTOM : offset = 0.0f; } if (borderspace > 0.0f) { // Top new_render(*page, RENDER_BOX, linex, *y + offset + temp->height + borderspace, temp->width + 2 * borderspace, borderspace, rgb); // Left new_render(*page, RENDER_BOX, linex, *y + offset, borderspace, temp->height + 2 * borderspace, rgb); // Right new_render(*page, RENDER_BOX, linex + temp->width + borderspace, *y + offset, borderspace, temp->height + 2 * borderspace, rgb); // Bottom new_render(*page, RENDER_BOX, linex, *y + offset, temp->width + 2 * borderspace, borderspace, rgb); } new_render(*page, RENDER_IMAGE, linex + borderspace, *y + offset + borderspace, temp->width, temp->height, image_find((char *)htmlGetVariable(temp, (uchar *)"REALSRC"))); whitespace = 0; temp_width = temp->width + 2 * borderspace; break; } if (temp->link != NULL && (link = htmlGetVariable(temp->link, (uchar *)"_HD_FULL_HREF")) != NULL) { /* * Add a page link... */ if (file_method((char *)link) == NULL) { if (file_target((char *)link) != NULL) link = (uchar *)file_target((char *)link) - 1; // Include # sign else link = (uchar *)file_basename((char *)link); } new_render(*page, RENDER_LINK, linex, *y + offset, temp->width, temp->height, link); } linex += temp_width; prev = temp; temp = temp->next; if (prev != linetype) free(prev); } /* * See if we have a run of characters that hasn't been output... */ if (linetype != NULL) { r = new_render(*page, RENDER_TEXT, linex - linewidth, *y, linewidth, linetype->height, line); r->data.text.typeface = linetype->typeface; r->data.text.style = linetype->style; r->data.text.spacing = char_spacing; r->data.text.size = _htmlSizes[linetype->size]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); if (linetype->superscript) r->y += height - linetype->height; else if (linetype->subscript) r->y -= height - linetype->height; free(linetype); } /* * Update the margins after we pass below the images... */ *y -= spacing - height; if (*y < image_y) { image_left = left; image_right = right; format_width = image_right - image_left; } } *x = left; if (*y > image_y && image_y > 0.0f) *y = image_y; DEBUG_printf(("LEAVING parse_paragraph(), x = %.1f, y = %.1f, page = %d\n", *x, *y, *page)); } /* * 'parse_pre()' - Parse preformatted text and produce rendering list output. */ static void parse_pre(tree_t *t, /* I - Tree to parse */ float left, /* I - Left margin */ float right, /* I - Printable width */ float bottom, /* I - Bottom margin */ float top, /* I - Printable top */ float *x, /* IO - X position */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ int needspace) /* I - Need whitespace? */ { tree_t *flat, *start, *next; uchar *link, line[10240], *lineptr, *dataptr; int col; float width, height, rgb[3]; render_t *r; REF(right); DEBUG_printf(("parse_pre(t=%p, left=%.1f, right=%.1f, x=%.1f, y=%.1f, page=%d\n", t, left, right, *x, *y, *page)); if (t->child == NULL) return; if (*y < top && needspace) *y -= _htmlSpacings[SIZE_P]; flat = flatten_tree(t->child); if (flat == NULL) return; if (flat->markup == MARKUP_NONE && flat->data != NULL) { // Skip leading blank line, if present... for (dataptr = flat->data; isspace(*dataptr); dataptr ++); if (!*dataptr) { next = flat->next; free(flat); flat = next; } } while (flat != NULL) { for (height = 0.0f, start = flat; flat != NULL; flat = flat->next) { if (flat->height > height) height = flat->height; if (flat->markup == MARKUP_BR || (flat->markup == MARKUP_NONE && flat->data && flat->data[strlen((char *)flat->data) - 1] == '\n')) break; } if (flat) flat = flat->next; if (*y < (height + bottom)) { (*page) ++; *y = top; if (Verbosity) progress_show("Formatting page %d", *page); } *x = left; *y -= height; if (Verbosity) progress_update(100 - (int)(100 * (*y) / PagePrintLength)); col = 0; while (start != flat) { rgb[0] = start->red / 255.0f; rgb[1] = start->green / 255.0f; rgb[2] = start->blue / 255.0f; if (start->link && (link = htmlGetVariable(start->link, (uchar *)"_HD_FULL_HREF")) != NULL) { /* * Add a page link... */ if (file_method((char *)link) == NULL) { if (file_target((char *)link) != NULL) link = (uchar *)file_target((char *)link) - 1; // Include # sign else link = (uchar *)file_basename((char *)link); } new_render(*page, RENDER_LINK, *x, *y, start->width, start->height, link); if (PSLevel == 0 && Links) { memcpy(rgb, link_color, sizeof(rgb)); start->red = (int)(link_color[0] * 255.0); start->green = (int)(link_color[1] * 255.0); start->blue = (int)(link_color[2] * 255.0); if (LinkStyle) new_render(*page, RENDER_BOX, *x, *y - 1, start->width, 0, link_color); } } switch (start->markup) { case MARKUP_A : if ((link = htmlGetVariable(start, (uchar *)"NAME")) != NULL) { /* * Add a target link... */ add_link(link, *page, (int)(*y + height)); } break; case MARKUP_NONE : for (lineptr = line, dataptr = start->data; *dataptr != '\0' && lineptr < (line + sizeof(line) - 1); dataptr ++) if (*dataptr == '\n') break; else if (*dataptr == '\t') { do { *lineptr++ = ' '; col ++; } while (col & 7); } else if (*dataptr != '\r') { *lineptr++ = *dataptr; col ++; } *lineptr = '\0'; width = get_width(line, start->typeface, start->style, start->size); r = new_render(*page, RENDER_TEXT, *x, *y, width, 0, line); r->data.text.typeface = start->typeface; r->data.text.style = start->style; r->data.text.size = _htmlSizes[start->size]; memcpy(r->data.text.rgb, rgb, sizeof(rgb)); if (start->underline) new_render(*page, RENDER_BOX, *x, *y - 1, start->width, 0, rgb); if (start->strikethrough) new_render(*page, RENDER_BOX, *x, *y + start->height * 0.25f, start->width, 0, rgb); *x += start->width; break; case MARKUP_IMG : new_render(*page, RENDER_IMAGE, *x, *y, start->width, start->height, image_find((char *)htmlGetVariable(start, (uchar *)"REALSRC"))); *x += start->width; col ++; break; default : break; } next = start->next; free(start); start = next; } if ((*x - right) > 0.001 && OverflowErrors) progress_error(HD_ERROR_CONTENT_TOO_LARGE, "Preformatted text on page %d too long - " "truncation or overlapping may occur!", *page + 1); *y -= _htmlSpacings[t->size] - _htmlSizes[t->size]; } *x = left; } #ifdef TABLE_DEBUG # undef DEBUG_puts # define DEBUG_puts(x) puts(x) # define DEBUG # undef DEBUG_printf # define DEBUG_printf(x) printf x #endif /* TABLE_DEBUG */ /* * 'parse_table()' - Parse a table and produce rendering output. */ static void parse_table(tree_t *t, // I - Tree to parse float left, // I - Left margin float right, // I - Printable width float bottom, // I - Bottom margin float top, // I - Printable top float *x, // IO - X position float *y, // IO - Y position int *page, // IO - Page # int needspace) // I - Need whitespace? { int col, row, tcol, colspan, rowspan, num_cols, num_rows, alloc_rows, regular_cols, tempspace, col_spans[MAX_COLUMNS], row_spans[MAX_COLUMNS]; char col_fixed[MAX_COLUMNS], col_percent[MAX_COLUMNS]; float col_lefts[MAX_COLUMNS], col_rights[MAX_COLUMNS], col_width, col_widths[MAX_COLUMNS], col_swidths[MAX_COLUMNS], col_min, col_mins[MAX_COLUMNS], col_smins[MAX_COLUMNS], col_pref, col_prefs[MAX_COLUMNS], col_height, cellpadding, cellspacing, border, border_left, border_size, width, pref_width, span_width, regular_width, actual_width, table_width, table_height, min_width, temp_width, table_y, row_y, row_starty, temp_y, temp_bottom, temp_top; int row_page, temp_page, table_page; uchar *var, *height_var; // Row HEIGHT variable tree_t *temprow, *tempcol, *tempnext, ***cells, *caption; // Caption for bottom, if any int do_valign; // True if we should do vertical alignment of cells float row_height, // Total height of the row temp_height; // Temporary holder int cell_page[MAX_COLUMNS], // Start page for cell cell_endpage[MAX_COLUMNS]; // End page for cell float cell_y[MAX_COLUMNS], // Row or each cell cell_endy[MAX_COLUMNS], // Row or each cell cell_height[MAX_COLUMNS], // Height of each cell in a row span_heights[MAX_COLUMNS]; // Height of spans render_t *cell_bg[MAX_COLUMNS]; // Background rectangles render_t *cell_start[MAX_COLUMNS]; // Start of the content for a cell in the row render_t *cell_end[MAX_COLUMNS]; // End of the content for a cell in a row uchar *bgcolor; float rgb[3], bgrgb[3]; const char *htmldoc_debug; // HTMLDOC_DEBUG env var int table_debug; // Do table debugging? DEBUG_puts("\n\nTABLE"); DEBUG_printf(("parse_table(t=%p, left=%.1f, right=%.1f, x=%.1f, y=%.1f, page=%d\n", t, left, right, *x, *y, *page)); if (t->child == NULL) return; /* Empty table... */ /* * Check debug mode... */ if ((htmldoc_debug = getenv("HTMLDOC_DEBUG")) != NULL && (strstr(htmldoc_debug, "table") || strstr(htmldoc_debug, "all"))) table_debug = 1; else table_debug = 0; /* * Figure out the # of rows, columns, and the desired widths... */ memset(col_spans, 0, sizeof(col_spans)); memset(col_fixed, 0, sizeof(col_fixed)); memset(col_percent, 0, sizeof(col_percent)); memset(col_widths, 0, sizeof(col_widths)); memset(col_swidths, 0, sizeof(col_swidths)); memset(col_mins, 0, sizeof(col_mins)); memset(col_smins, 0, sizeof(col_smins)); memset(col_prefs, 0, sizeof(col_prefs)); cells = NULL; if ((var = htmlGetVariable(t, (uchar *)"WIDTH")) != NULL) { if (var[strlen((char *)var) - 1] == '%') table_width = atof((char *)var) * (right - left) / 100.0f; else table_width = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else table_width = right - left; if ((var = htmlGetVariable(t, (uchar *)"HEIGHT")) != NULL) { if (var[strlen((char *)var) - 1] == '%') table_height = atof((char *)var) * (top - bottom) / 100.0f; else table_height = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else table_height = -1.0f; DEBUG_printf(("table_width = %.1f\n", table_width)); if ((var = htmlGetVariable(t, (uchar *)"CELLPADDING")) != NULL) cellpadding = atoi((char *)var); else cellpadding = 1.0f; if ((var = htmlGetVariable(t, (uchar *)"CELLSPACING")) != NULL) cellspacing = atoi((char *)var); else cellspacing = 0.0f; if ((var = htmlGetVariable(t, (uchar *)"BORDER")) != NULL) { if ((border = atof((char *)var)) == 0.0 && var[0] != '0') border = 1.0f; cellpadding += border; } else border = 0.0f; if (table_debug && border == 0.0f) border = 0.01f; rgb[0] = t->red / 255.0f; rgb[1] = t->green / 255.0f; rgb[2] = t->blue / 255.0f; if ((var = htmlGetVariable(t, (uchar *)"BORDERCOLOR")) != NULL) get_color(var, rgb, 0); if (border == 0.0f && cellpadding > 0.0f) { /* * Ah, the strange table formatting nightmare that is HTML. * Netscape and MSIE assign an invisible border width of 1 * pixel if no border is specified... */ cellpadding += 1.0f; } border_size = border - 1.0f; cellspacing *= PagePrintWidth / _htmlBrowserWidth; cellpadding *= PagePrintWidth / _htmlBrowserWidth; border *= PagePrintWidth / _htmlBrowserWidth; border_size *= PagePrintWidth / _htmlBrowserWidth; DEBUG_printf(("border = %.1f, cellpadding = %.1f\n", border, cellpadding)); temp_bottom = bottom - cellpadding; temp_top = top + cellpadding; memset(row_spans, 0, sizeof(row_spans)); memset(span_heights, 0, sizeof(span_heights)); for (temprow = t->child, num_cols = 0, num_rows = 0, alloc_rows = 0, caption = NULL; temprow != NULL; temprow = tempnext) { tempnext = temprow->next; if (temprow->markup == MARKUP_CAPTION) { if ((var = htmlGetVariable(temprow, (uchar *)"ALIGN")) == NULL || strcasecmp((char *)var, "bottom")) { /* * Show caption at top... */ parse_paragraph(temprow, left, right, bottom, top, x, y, page, needspace); needspace = 1; } else { /* * Flag caption for bottom of table... */ caption = temprow; } } else if (temprow->markup == MARKUP_TR || ((temprow->markup == MARKUP_TBODY || temprow->markup == MARKUP_THEAD || temprow->markup == MARKUP_TFOOT) && temprow->child != NULL)) { // Descend into table body as needed... if (temprow->markup == MARKUP_TBODY || temprow->markup == MARKUP_THEAD || temprow->markup == MARKUP_TFOOT) temprow = temprow->child; // Figure out the next row... if ((tempnext = temprow->next) == NULL) if (temprow->parent->markup == MARKUP_TBODY || temprow->parent->markup == MARKUP_THEAD || temprow->parent->markup == MARKUP_TFOOT) tempnext = temprow->parent->next; // Allocate memory for the table as needed... if (num_rows >= alloc_rows) { alloc_rows += ALLOC_ROWS; if (alloc_rows == ALLOC_ROWS) cells = (tree_t ***)malloc(sizeof(tree_t **) * alloc_rows); else cells = (tree_t ***)realloc(cells, sizeof(tree_t **) * alloc_rows); if (cells == (tree_t ***)0) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for table!"); return; } } if ((cells[num_rows] = (tree_t **)calloc(sizeof(tree_t *), MAX_COLUMNS)) == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for table!"); return; } #ifdef DEBUG printf("BEFORE row %d: num_cols = %d\n", num_rows, num_cols); if (num_rows) for (col = 0; col < num_cols; col ++) printf(" col %d: row_spans[] = %d\n", col, row_spans[col]); #endif // DEBUG // Figure out the starting column... if (num_rows) { for (col = 0, rowspan = 9999; col < num_cols; col ++) if (row_spans[col] < rowspan) rowspan = row_spans[col]; for (col = 0; col < num_cols; col ++) row_spans[col] -= rowspan; for (col = 0; row_spans[col] && col < num_cols; col ++) cells[num_rows][col] = cells[num_rows - 1][col]; } else col = 0; for (tempcol = temprow->child; tempcol != NULL && col < MAX_COLUMNS; tempcol = tempcol->next) if (tempcol->markup == MARKUP_TD || tempcol->markup == MARKUP_TH) { // Handle colspan and rowspan stuff... if ((var = htmlGetVariable(tempcol, (uchar *)"COLSPAN")) != NULL) colspan = atoi((char *)var); else colspan = 1; if ((var = htmlGetVariable(tempcol, (uchar *)"ROWSPAN")) != NULL) { row_spans[col] = atoi((char *)var); if (row_spans[col] == 1) row_spans[col] = 0; for (tcol = 1; tcol < colspan; tcol ++) row_spans[col + tcol] = row_spans[col]; } // Compute the cell size... col_width = get_cell_size(tempcol, 0.0f, table_width, &col_min, &col_pref, &col_height); if ((var = htmlGetVariable(tempcol, (uchar *)"WIDTH")) != NULL) { if (var[strlen((char *)var) - 1] == '%') { col_width -= 2.0 * cellpadding - cellspacing; if (colspan <= 1) col_percent[col] = 1; } else { col_width -= 2.0 * cellpadding; } } else col_width = 0.0f; tempcol->height = col_height; DEBUG_printf(("%d,%d: colsp=%d, rowsp=%d, width=%.1f, minw=%.1f, prefw=%.1f, minh=%.1f\n", col, num_rows, colspan, row_spans[col], col_width, col_min, col_pref, col_height)); // Add widths to columns... if (colspan > 1) { if (colspan > col_spans[col]) col_spans[col] = colspan; if (col_width > col_swidths[col]) col_swidths[col] = col_width; if (col_min > col_smins[col]) col_smins[col] = col_min; } else { if (col_width > 0.0f) col_fixed[col] = 1; if (col_width > col_widths[col]) col_widths[col] = col_width; if (col_pref > col_prefs[col]) col_prefs[col] = col_pref; if (col_min > col_mins[col]) col_mins[col] = col_min; } while (colspan > 0 && col < MAX_COLUMNS) { cells[num_rows][col] = tempcol; col ++; colspan --; } while (row_spans[col] && col < num_cols) { cells[num_rows][col] = cells[num_rows - 1][col]; col ++; } } if (col > num_cols) num_cols = col; #ifdef DEBUG printf("AFTER row %d: num_cols = %d\n", num_rows, num_cols); for (col = 0; col < num_cols; col ++) printf(" col %d: row_spans[] = %d\n", col, row_spans[col]); #endif // DEBUG num_rows ++; for (col = 0; col < num_cols; col ++) if (row_spans[col]) row_spans[col] --; } } /* * OK, some people apparently create HTML tables with no columns or * rows... If this happened, return immediately... */ if (num_cols == 0) return; /* * Now figure out the width of the table... */ if ((var = htmlGetVariable(t, (uchar *)"WIDTH")) != NULL) { if (var[strlen((char *)var) - 1] == '%') width = atof((char *)var) * (right - left) / 100.0f; else width = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else { for (col = 0, width = 0.0; col < num_cols; col ++) width += col_prefs[col]; width += (2 * cellpadding + cellspacing) * num_cols - cellspacing; if (width > (right - left)) width = right - left; } /* * Compute the width of each column based on the printable width. */ DEBUG_printf(("\nTABLE: %dx%d\n\n", num_cols, num_rows)); actual_width = (2 * cellpadding + cellspacing) * num_cols - cellspacing; regular_width = (width - actual_width) / num_cols; DEBUG_printf((" width = %.1f, actual_width = %.1f, regular_width = %.1f\n\n", width, actual_width, regular_width)); DEBUG_puts(" Col Width Min Pref Fixed? Percent?"); DEBUG_puts(" --- ------ ------ ------ ------ --------"); #ifdef DEBUG for (col = 0; col < num_cols; col ++) printf(" %-3d %-6.1f %-6.1f %-6.1f %-6s %s\n", col, col_widths[col], col_mins[col], col_prefs[col], col_fixed[col] ? "YES" : "NO", col_percent[col] ? "YES" : "NO"); puts(""); #endif /* DEBUG */ /* * The first pass just handles columns with a specified width... */ DEBUG_puts("PASS 1: fixed width handling\n"); for (col = 0, regular_cols = 0; col < num_cols; col ++) if (col_widths[col] > 0.0f) { if (col_mins[col] > col_widths[col]) { DEBUG_printf((" updating column %d to width=%.1f\n", col, col_mins[col])); col_widths[col] = col_mins[col]; } actual_width += col_widths[col]; } else { regular_cols ++; actual_width += col_mins[col]; } DEBUG_printf((" actual_width = %.1f, regular_cols = %d\n\n", actual_width, regular_cols)); /* * Pass two uses the "preferred" width whenever possible, and the * minimum otherwise... */ DEBUG_puts("PASS 2: preferred width handling\n"); for (col = 0, pref_width = 0.0f; col < num_cols; col ++) if (col_widths[col] == 0.0f) pref_width += col_prefs[col] - col_mins[col]; DEBUG_printf((" pref_width = %.1f\n", pref_width)); if (pref_width > 0.0f) { if ((regular_width = (width - actual_width) / pref_width) < 0.0f) regular_width = 0.0f; else if (regular_width > 1.0f) regular_width = 1.0f; DEBUG_printf((" regular_width = %.1f\n", regular_width)); for (col = 0; col < num_cols; col ++) if (col_widths[col] == 0.0f) { pref_width = (col_prefs[col] - col_mins[col]) * regular_width; if ((actual_width + pref_width) > width) { if (col == (num_cols - 1) && (width - actual_width) >= col_mins[col]) col_widths[col] = width - actual_width; else col_widths[col] = col_mins[col]; } else col_widths[col] = pref_width + col_mins[col]; DEBUG_printf((" col_widths[%d] = %.1f\n", col, col_widths[col])); actual_width += col_widths[col] - col_mins[col]; } } else { /* * Assign min widths for all cells... */ for (col = 0; col < num_cols; col ++) if (col_widths[col] == 0.0f) col_widths[col] = col_mins[col]; } DEBUG_printf((" actual_width = %.1f\n\n", actual_width)); /* * Pass three enforces any hard or minimum widths for COLSPAN'd * columns... */ DEBUG_puts("PASS 3: colspan handling\n\n"); for (col = 0; col < num_cols; col ++) { DEBUG_printf((" col %d, colspan %d\n", col, col_spans[col])); if (col_spans[col] > 1) { for (colspan = 0, span_width = 0.0f; colspan < col_spans[col]; colspan ++) span_width += col_widths[col + colspan]; pref_width = 0.0f; if (span_width < col_swidths[col]) pref_width = col_swidths[col]; if (span_width < col_smins[col] && pref_width < col_smins[col]) pref_width = col_smins[col]; for (colspan = 0; colspan < col_spans[col]; colspan ++) if (col_fixed[col + colspan]) { span_width -= col_widths[col + colspan]; pref_width -= col_widths[col + colspan]; } DEBUG_printf((" col_swidths=%.1f, col_smins=%.1f, span_width=%.1f, pref_width=%.1f\n", col_swidths[col], col_smins[col], span_width, pref_width)); if (pref_width > 0.0f && pref_width > span_width) { if (span_width >= 1.0f) { // Expand cells proportionately... regular_width = pref_width / span_width; for (colspan = 0; colspan < col_spans[col]; colspan ++) if (!col_fixed[col + colspan]) { actual_width -= col_widths[col + colspan]; col_widths[col + colspan] *= regular_width; actual_width += col_widths[col + colspan]; DEBUG_printf((" col_widths[%d] = %.1f\n", col + colspan, col_widths[col + colspan])); } } else { // Divide the space up equally between columns, since the // colspan area is always by itself... (this hack brought // to you by Yahoo! and their single cell tables with // colspan=2 :) regular_width = pref_width / col_spans[col]; for (colspan = 0; colspan < col_spans[col]; colspan ++) { actual_width += regular_width; col_widths[col + colspan] += regular_width; DEBUG_printf((" col_widths[%d] = %.1f\n", col, col_widths[col])); } } } } } DEBUG_printf((" actual_width = %.1f\n\n", actual_width)); /* * Pass four divides up the remaining space amongst the columns... */ DEBUG_puts("PASS 4: divide remaining space, if any...\n"); if (width > actual_width) { for (col = 0, colspan = 0; col < num_cols; col ++) if (!col_fixed[col] || col_percent[col]) colspan ++; if (colspan > 0) { regular_width = (width - actual_width) / num_cols; for (col = 0; col < num_cols; col ++) if (!col_fixed[col]) { col_widths[col] += regular_width; DEBUG_printf((" col_widths[%d] = %.1f\n", col, col_widths[col])); } } } else width = actual_width; DEBUG_puts(""); /* * The final pass is only run if the width > table_width... */ DEBUG_puts("PASS 5: Squeeze table as needed..."); if (width > table_width) { /* * Squeeze the table to fit the requested width or the printable width * as determined at the beginning... */ for (col = 0, min_width = -cellspacing; col < num_cols; col ++) min_width += col_mins[col] + 2 * cellpadding + cellspacing; DEBUG_printf((" table_width = %.1f, width = %.1f, min_width = %.1f\n", table_width, width, min_width)); temp_width = table_width - min_width; if (temp_width < 0.0f) temp_width = 0.0f; width -= min_width; if (width < 1.0f) width = 1.0f; for (col = 0; col < num_cols; col ++) { col_widths[col] = col_mins[col] + temp_width * (col_widths[col] - col_mins[col]) / width; DEBUG_printf((" col_widths[%d] = %.1f\n", col, col_widths[col])); } for (col = 0, width = -cellspacing; col < num_cols; col ++) width += col_widths[col] + 2 * cellpadding + cellspacing; DEBUG_printf((" new width = %.1f, max width = %.1f\n", width, right - left)); } if ((width - right + left) > 0.001f && OverflowErrors) progress_error(HD_ERROR_CONTENT_TOO_LARGE, "Table on page %d too wide - " "truncation or overlapping may occur!", *page + 1); DEBUG_puts(""); DEBUG_printf(("Final table width = %.1f, alignment = %d\n", width, t->halignment)); switch (t->halignment) { case ALIGN_LEFT : *x = left + cellpadding; break; case ALIGN_CENTER : *x = left + 0.5f * (right - left - width) + cellpadding; break; case ALIGN_RIGHT : *x = right - width + cellpadding; break; } for (col = 0; col < num_cols; col ++) { col_lefts[col] = *x; col_rights[col] = *x + col_widths[col]; *x = col_rights[col] + 2 * cellpadding + cellspacing; DEBUG_printf(("left[%d] = %.1f, right[%d] = %.1f\n", col, col_lefts[col], col, col_rights[col])); } /* * Now render the whole table... */ if (*y < top && needspace) *y -= _htmlSpacings[SIZE_P]; if (table_debug) { check_pages(*page); render_t *r; char table_text[255]; snprintf(table_text, sizeof(table_text), "t=%p", t); r = new_render(*page, RENDER_TEXT, left, *y, get_width((uchar *)table_text, TYPE_COURIER, STYLE_NORMAL, 3), _htmlSizes[3], table_text); r->data.text.typeface = TYPE_COURIER; r->data.text.style = STYLE_NORMAL; r->data.text.size = _htmlSizes[3]; } memset(row_spans, 0, sizeof(row_spans)); memset(cell_start, 0, sizeof(cell_start)); memset(cell_end, 0, sizeof(cell_end)); memset(cell_height, 0, sizeof(cell_height)); memset(cell_bg, 0, sizeof(cell_bg)); table_page = *page; table_y = *y; for (row = 0; row < num_rows; row ++) { height_var = NULL; if (cells[row][0] != NULL) { /* * Do page comments... */ if (cells[row][0]->parent->prev != NULL && cells[row][0]->parent->prev->markup == MARKUP_COMMENT) parse_comment(cells[row][0]->parent->prev, &left, &right, &temp_bottom, &temp_top, x, y, page, NULL, 0); /* * Get height... */ if ((height_var = htmlGetVariable(cells[row][0]->parent, (uchar *)"HEIGHT")) == NULL) for (col = 0; col < num_cols; col ++) if (htmlGetVariable(cells[row][col], (uchar *)"ROWSPAN") == NULL) if ((height_var = htmlGetVariable(cells[row][col], (uchar *)"HEIGHT")) != NULL) break; } if (cells[row][0] != NULL && height_var != NULL) { // Row height specified; make sure it'll fit... if (height_var[strlen((char *)height_var) - 1] == '%') temp_height = atof((char *)height_var) * 0.01f * (PagePrintLength - 2 * cellpadding); else temp_height = atof((char *)height_var) * PagePrintWidth / _htmlBrowserWidth; if (table_height > 0.0f && temp_height > table_height) temp_height = table_height; temp_height -= 2 * cellpadding; } else { // Use min height computed from get_cell_size()... for (col = 0, temp_height = _htmlSpacings[SIZE_P]; col < num_cols; col ++) if (cells[row][col] != NULL && cells[row][col]->height > temp_height && !htmlGetVariable(cells[row][col], (uchar *)"ROWSPAN")) temp_height = cells[row][col]->height; if (table_height > 0.0) { // Table height specified; make sure it'll fit... if (temp_height > table_height) temp_height = table_height; temp_height -= 2 * cellpadding; } else if (temp_height > (PageLength / 8) && height_var == NULL) temp_height = PageLength / 8; } DEBUG_printf(("BEFORE row = %d, temp_height = %.1f, *y = %.1f, *page = %d\n", row, temp_height, *y, *page)); if (*y < (bottom + 2 * cellpadding + temp_height) && temp_height <= (top - bottom - 2 * cellpadding)) { DEBUG_puts("NEW PAGE"); *y = top; (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); } do_valign = 1; row_y = *y - cellpadding; row_starty = row_y; row_page = *page; row_height = 0.0f; DEBUG_printf(("BEFORE row_y = %.1f, *y = %.1f, row_page = %d\n", row_y, *y, row_page)); for (col = 0, rowspan = 9999; col < num_cols; col += colspan) { if (row_spans[col] == 0) { if ((var = htmlGetVariable(cells[row][col], (uchar *)"ROWSPAN")) != NULL) row_spans[col] = atoi((char *)var); if (row_spans[col] == 1) row_spans[col] = 0; if (row_spans[col] > (num_rows - row)) row_spans[col] = num_rows - row; span_heights[col] = 0.0f; } if (row_spans[col] < rowspan) rowspan = row_spans[col]; for (colspan = 1; (col + colspan) < num_cols; colspan ++) if (cells[row][col] != cells[row][col + colspan]) break; } if (!rowspan) rowspan = 1; for (col = 0; col < num_cols;) { for (colspan = 1; (col + colspan) < num_cols; colspan ++) if (cells[row][col] != cells[row][col + colspan]) break; colspan --; DEBUG_printf((" col = %d, colspan = %d, left = %.1f, right = %.1f, cell = %p\n", col, colspan, col_lefts[col], col_rights[col + colspan], cells[row][col])); *x = col_lefts[col]; temp_y = *y - cellpadding; temp_page = *page; tempspace = 0; if (row == 0 || cells[row][col] != cells[row - 1][col]) { check_pages(*page); if (cells[row][col] == NULL) bgcolor = NULL; else if ((bgcolor = htmlGetVariable(cells[row][col], (uchar *)"BGCOLOR")) != NULL) { memcpy(bgrgb, background_color, sizeof(bgrgb)); get_color(bgcolor, bgrgb, 0); width = col_rights[col + colspan] - col_lefts[col] + 2 * cellpadding; border_left = col_lefts[col] - cellpadding; cell_bg[col] = new_render(*page, RENDER_BOX, border_left, row_y, width + border, 0.0, bgrgb); } else { cell_bg[col] = NULL; new_render(*page, RENDER_TEXT, -1.0f, -1.0f, 0.0, 0.0, (void *)""); } DEBUG_printf(("cell_bg[%d] = %p, pages[%d].end = %p\n", col, cell_bg[col], *page, pages[*page].end)); cell_start[col] = pages[*page].end; cell_page[col] = temp_page; cell_y[col] = temp_y; if (table_debug) { check_pages(*page); render_t *r; char table_text[255]; snprintf(table_text, sizeof(table_text), "cell=%p [%d,%d]", cells[row][col], row, col); r = new_render(temp_page, RENDER_TEXT, *x, temp_y, get_width((uchar *)table_text, TYPE_COURIER, STYLE_NORMAL, 1), _htmlSizes[1], table_text); r->data.text.typeface = TYPE_COURIER; r->data.text.style = STYLE_NORMAL; r->data.text.size = _htmlSizes[1]; } if (cells[row][col] != NULL && cells[row][col]->child != NULL) { DEBUG_printf((" parsing cell %d,%d; width = %.1f\n", row, col, col_rights[col + colspan] - col_lefts[col])); bottom += cellpadding; top -= cellpadding; parse_doc(cells[row][col]->child, col_lefts + col, col_rights + col + colspan, &bottom, &top, x, &temp_y, &temp_page, NULL, &tempspace); bottom -= cellpadding; top += cellpadding; } cell_endpage[col] = temp_page; cell_endy[col] = temp_y; cell_height[col] = *y - cellpadding - temp_y; cell_end[col] = pages[*page].end; if (cell_start[col] == NULL) cell_start[col] = pages[*page].start; DEBUG_printf(("row = %d, col = %d, y = %.1f, cell_y = %.1f, cell_height = %.1f\n", row, col, *y - cellpadding, temp_y, cell_height[col])); DEBUG_printf(("cell_start[%d] = %p, cell_end[%d] = %p\n", col, cell_start[col], col, cell_end[col])); } if (row_spans[col] == 0 && cell_page[col] == cell_endpage[col] && cell_height[col] > row_height) row_height = cell_height[col]; if (row_spans[col] <= rowspan) { if (cell_page[col] != cell_endpage[col]) do_valign = 0; if (cell_endpage[col] > row_page) { row_page = cell_endpage[col]; row_y = cell_endy[col]; } else if (cell_endy[col] < row_y && cell_endpage[col] == row_page) row_y = cell_endy[col]; } DEBUG_printf(("**** col = %d, row = %d, row_y = %.1f, row_page = %d\n", col, row, row_y, row_page)); for (col ++; colspan > 0; colspan --, col ++) { cell_start[col] = NULL; cell_page[col] = cell_page[col - 1]; cell_y[col] = cell_y[col - 1]; cell_end[col] = NULL; cell_endpage[col] = cell_endpage[col - 1]; cell_endy[col] = cell_endy[col - 1]; cell_height[col] = cell_height[col - 1]; } } DEBUG_printf(("row = %d, row_y = %.1f, row_height = %.1f\n", row, row_y, row_height)); for (col = 0; col < num_cols; col += colspan) { for (colspan = 1; (col + colspan) < num_cols; colspan ++) if (cells[row][col] != cells[row][col + colspan]) break; if (row_spans[col]) span_heights[col] += row_height; DEBUG_printf(("col = %d, cell_y = %.1f, cell_page = %d, cell_endpage = %d, row_spans = %d, span_heights = %.1f, cell_height = %.1f\n", col, cell_y[col], cell_page[col], cell_endpage[col], row_spans[col], span_heights[col], cell_height[col])); if (row_spans[col] == rowspan && cell_page[col] == cell_endpage[col] && cell_height[col] > span_heights[col]) { temp_height = cell_height[col] - span_heights[col]; row_height += temp_height; DEBUG_printf(("Adjusting row-span height by %.1f, new row_height = %.1f\n", temp_height, row_height)); for (tcol = 0; tcol < num_cols; tcol ++) if (row_spans[tcol]) { span_heights[tcol] += temp_height; DEBUG_printf(("col = %d, span_heights = %.1f\n", tcol, span_heights[tcol])); } } } DEBUG_printf(("AFTER row = %d, row_page = %d, row_y = %.1f, row_height = %.1f, *y = %.1f, do_valign = %d\n", row, row_page, row_y, row_height, *y, do_valign)); /* * Do the vertical alignment */ if (do_valign) { if (height_var != NULL) { // Hardcode the row height... if (height_var[strlen((char *)height_var) - 1] == '%') temp_height = atof((char *)height_var) * 0.01f * PagePrintLength; else temp_height = atof((char *)height_var) * PagePrintWidth / _htmlBrowserWidth; if (table_height > 0 && temp_height > table_height) temp_height = table_height; temp_height -= 2 * cellpadding; if (temp_height > row_height) { // Only enforce the height if it is > the actual row height. row_height = temp_height; row_y = *y - temp_height; } } for (col = 0; col < num_cols; col += colspan + 1) { render_t *p; float delta_y; for (colspan = 1; (col + colspan) < num_cols; colspan ++) if (cells[row][col] != cells[row][col + colspan]) break; colspan --; if (cell_start[col] == NULL || row_spans[col] > rowspan || cells[row][col] == NULL || cells[row][col]->child == NULL) continue; if (row_spans[col]) switch (cells[row][col]->valignment) { case ALIGN_MIDDLE : delta_y = (span_heights[col] - cell_height[col]) * 0.5f; break; case ALIGN_BOTTOM : delta_y = span_heights[col] - cell_height[col]; break; default : delta_y = 0.0f; break; } else switch (cells[row][col]->valignment) { case ALIGN_MIDDLE : delta_y = (row_height - cell_height[col]) * 0.5f; break; case ALIGN_BOTTOM : delta_y = row_height - cell_height[col]; break; default : delta_y = 0.0f; break; } DEBUG_printf(("row = %d, col = %d, valign = %d, cell_height = %.1f, span_heights = %.1f, delta_y = %.1f\n", row, col, cells[row][col]->valignment, cell_height[col], span_heights[col], delta_y)); if (delta_y > 0.0f) { if (cell_start[col] == cell_end[col]) p = cell_start[col]; else p = cell_start[col]->next; for (; p != NULL; p = p->next) { DEBUG_printf(("aligning %p (%s), y was %.1f, now %.1f\n", p, p->data.text.buffer, p->y, p->y - delta_y)); p->y -= delta_y; if (p == cell_end[col]) break; } } #ifdef DEBUG else { if (cell_start[col] == cell_end[col]) p = cell_start[col]; else p = cell_start[col]->next; for (; p != NULL; p = p->next) { printf("NOT aligning %p\n", p); if (p == cell_end[col]) break; } } #endif /* DEBUG */ } } // Update all current columns with ROWSPAN <= rowspan to use the same // end page and row... for (col = 0, temp_page = -1, temp_y = 99999999; col < num_cols; col ++) if (row_spans[col] <= rowspan && cells[row][col] != NULL && cells[row][col]->child != NULL) { if (cell_endpage[col] > temp_page) { temp_page = cell_endpage[col]; temp_y = cell_endy[col]; } else if (cell_endpage[col] == temp_page && cell_endy[col] < temp_y) temp_y = cell_endy[col]; } for (col = 0; col < num_cols; col ++) if (row_spans[col] <= rowspan && cells[row][col] != NULL && cells[row][col]->child != NULL) { cell_endpage[col] = temp_page; cell_endy[col] = temp_y; } row_y -= cellpadding; border_left = col_lefts[0] - cellpadding; width = col_rights[num_cols - 1] - col_lefts[0] + 2 * cellpadding; for (bgcolor = NULL, col = 0; col < num_cols; col ++) if (row_spans[col] <= rowspan && cells[row][col] && !htmlGetVariable(cells[row][col], (uchar *)"ROWSPAN") && (bgcolor = htmlGetVariable(cells[row][col]->parent, (uchar *)"BGCOLOR")) != NULL) break; if (bgcolor) { memcpy(bgrgb, background_color, sizeof(bgrgb)); get_color(bgcolor, bgrgb, 0); if (row_page > *page) { // Draw background on multiple pages... // Bottom of first page... new_render(*page, RENDER_BOX, border_left, bottom, width, row_starty - bottom + cellpadding, bgrgb, pages[*page].start); // Intervening pages... for (temp_page = *page + 1; temp_page < row_page; temp_page ++) { new_render(temp_page, RENDER_BOX, border_left, bottom, width, top - bottom, bgrgb, pages[temp_page].start); } // Top of last page... check_pages(*page); new_render(row_page, RENDER_BOX, border_left, row_y, width, top - row_y, bgrgb, pages[row_page].start); } else { // Draw background in row... new_render(row_page, RENDER_BOX, border_left, row_y, width, row_height + 2 * cellpadding, bgrgb, pages[row_page].start); } } for (col = 0; col < num_cols; col += colspan + 1) { for (colspan = 0; (col + colspan) < num_cols; colspan ++) if (cells[row][col] != cells[row][col + colspan]) break; else if (row_spans[col + colspan] > 0) { DEBUG_printf(("row = %d, col = %d, decrementing row_spans (%d) to %d...\n", row, col, row_spans[col + colspan], row_spans[col + colspan] - rowspan)); row_spans[col + colspan] -= rowspan; } colspan --; width = col_rights[col + colspan] - col_lefts[col] + 2 * cellpadding; if (cells[row][col] == NULL || cells[row][col]->child == NULL || row_spans[col] > 0) continue; DEBUG_printf(("DRAWING BORDER+BACKGROUND: col=%d, row=%d, cell_page=%d, cell_y=%.1f\n" " cell_endpage=%d, cell_endy=%.1f\n", col, row, cell_page[col], cell_y[col], cell_endpage[col], cell_endy[col])); if ((bgcolor = htmlGetVariable(cells[row][col], (uchar *)"BGCOLOR")) != NULL) { memcpy(bgrgb, background_color, sizeof(bgrgb)); get_color(bgcolor, bgrgb, 0); } border_left = col_lefts[col] - cellpadding; if (cell_page[col] != cell_endpage[col]) { /* * Crossing a page boundary... */ if (border > 0) { /* * +---+---+---+ * | | | | */ // Top new_render(cell_page[col], RENDER_BOX, border_left, cell_y[col] + cellpadding, width + border, border, rgb); // Left new_render(cell_page[col], RENDER_BOX, border_left, bottom, border, cell_y[col] - bottom + cellpadding + border, rgb); // Right new_render(cell_page[col], RENDER_BOX, border_left + width, bottom, border, cell_y[col] - bottom + cellpadding + border, rgb); } if (bgcolor != NULL) { cell_bg[col]->y = bottom; cell_bg[col]->height = cell_y[col] - bottom + cellpadding + border; } for (temp_page = cell_page[col] + 1; temp_page < cell_endpage[col]; temp_page ++) { /* * | | | | * | | | | */ if (border > 0.0f) { // Left new_render(temp_page, RENDER_BOX, border_left, bottom, border, top - bottom, rgb); // Right new_render(temp_page, RENDER_BOX, border_left + width, bottom, border, top - bottom, rgb); } if (bgcolor != NULL) new_render(temp_page, RENDER_BOX, border_left, bottom, width + border, top - bottom, bgrgb, pages[temp_page].start); } if (border > 0.0f) { /* * | | | | * +---+---+---+ */ // Left new_render(cell_endpage[col], RENDER_BOX, border_left, row_y, border, top - row_y, rgb); // Right new_render(cell_endpage[col], RENDER_BOX, border_left + width, row_y, border, top - row_y, rgb); // Bottom new_render(cell_endpage[col], RENDER_BOX, border_left, row_y, width + border, border, rgb); } if (bgcolor != NULL) { check_pages(cell_endpage[col]); new_render(cell_endpage[col], RENDER_BOX, border_left, row_y, width + border, top - row_y, bgrgb, pages[cell_endpage[col]].start); } } else { /* * +---+---+---+ * | | | | * +---+---+---+ */ if (border > 0.0f) { // Top new_render(cell_page[col], RENDER_BOX, border_left, cell_y[col] + cellpadding, width + border, border, rgb); // Left new_render(cell_page[col], RENDER_BOX, border_left, row_y, border, cell_y[col] - row_y + cellpadding + border, rgb); // Right new_render(cell_page[col], RENDER_BOX, border_left + width, row_y, border, cell_y[col] - row_y + cellpadding + border, rgb); // Bottom new_render(cell_page[col], RENDER_BOX, border_left, row_y, width + border, border, rgb); } if (bgcolor != NULL) { cell_bg[col]->y = row_y; cell_bg[col]->height = cell_y[col] - row_y + cellpadding + border; } } } *page = row_page; *y = row_y; if (row < (num_rows - 1)) (*y) -= cellspacing; DEBUG_printf(("END row = %d, *y = %.1f, *page = %d\n", row, *y, *page)); } /* * Handle table background color... */ if ((bgcolor = htmlGetVariable(t, (uchar *)"BGCOLOR")) != NULL) { memcpy(bgrgb, background_color, sizeof(bgrgb)); get_color(bgcolor, bgrgb, 0); border_left = col_lefts[0] - cellpadding; width = col_rights[num_cols - 1] - col_lefts[0] + 2 * cellpadding; if (table_page != *page) { // Draw background on multiple pages... // Bottom of first page... new_render(table_page, RENDER_BOX, border_left, bottom, width, table_y - bottom, bgrgb, pages[table_page].start); // Intervening pages... for (temp_page = table_page + 1; temp_page < *page; temp_page ++) { new_render(temp_page, RENDER_BOX, border_left, bottom, width, top - bottom, bgrgb, pages[temp_page].start); } // Top of last page... check_pages(*page); new_render(*page, RENDER_BOX, border_left, *y, width, top - *y, bgrgb, pages[*page].start); } else { // Draw background in row... new_render(table_page, RENDER_BOX, border_left, *y, width, table_y - *y, bgrgb, pages[table_page].start); } } *x = left; if (caption) { /* * Show caption at bottom... */ parse_paragraph(caption, left, right, bottom, top, x, y, page, needspace); needspace = 1; } /* * Free memory for the table... */ if (num_rows > 0) { for (row = 0; row < num_rows; row ++) free(cells[row]); free(cells); } } #ifdef TABLE_DEBUG # undef DEBUG # undef DEBUG_puts # define DEBUG_puts(x) # undef DEBUG_printf # define DEBUG_printf(x) #endif /* TABLE_DEBUG */ /* * 'parse_list()' - Parse a list entry and produce rendering output. */ static void parse_list(tree_t *t, /* I - Tree to parse */ float *left, /* I - Left margin */ float *right, /* I - Printable width */ float *bottom, /* I - Bottom margin */ float *top, /* I - Printable top */ float *x, /* IO - X position */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ int needspace) /* I - Need whitespace? */ { uchar number[255]; /* List number (for numbered types) */ uchar *value; /* VALUE= variable */ int typeface; /* Typeface of list number */ float width; /* Width of list number */ render_t *r; /* Render primitive */ int oldpage; /* Old page value */ float oldy; /* Old Y value */ float tempx; /* Temporary X value */ DEBUG_printf(("parse_list(t=%p, left=%.1f, right=%.1f, x=%.1f, y=%.1f, page=%d\n", t, *left, *right, *x, *y, *page)); if (needspace && *y < *top) { *y -= _htmlSpacings[t->size]; needspace = 0; } check_pages(*page); oldy = *y; oldpage = *page; r = pages[*page].end; tempx = *x; if (t->indent == 0) { // Adjust left margin when no UL/OL/DL is being used... *left += _htmlSizes[t->size]; tempx += _htmlSizes[t->size]; } parse_doc(t->child, left, right, bottom, top, &tempx, y, page, NULL, &needspace); // Handle when paragraph wrapped to new page... if (*page != oldpage) { // First see if anything was added to the old page... if ((r != NULL && r->next == NULL) || pages[oldpage].end == NULL) { // No, put the symbol on the next page... oldpage = *page; oldy = *top; } } if ((value = htmlGetVariable(t, (uchar *)"VALUE")) != NULL) { if (isdigit(value[0])) list_values[t->indent] = atoi((char *)value); else if (isupper(value[0])) list_values[t->indent] = value[0] - 'A' + 1; else list_values[t->indent] = value[0] - 'a' + 1; } switch (list_types[t->indent]) { case 'a' : case 'A' : case '1' : case 'i' : case 'I' : strlcpy((char *)number, format_number(list_values[t->indent], list_types[t->indent]), sizeof(number)); strlcat((char *)number, ". ", sizeof(number)); typeface = t->typeface; break; default : sprintf((char *)number, "%c ", list_types[t->indent]); typeface = TYPE_SYMBOL; break; } width = get_width(number, typeface, t->style, t->size); r = new_render(oldpage, RENDER_TEXT, *left - width, oldy - _htmlSizes[t->size], width, _htmlSpacings[t->size], number); r->data.text.typeface = typeface; r->data.text.style = t->style; r->data.text.size = _htmlSizes[t->size]; r->data.text.rgb[0] = t->red / 255.0f; r->data.text.rgb[1] = t->green / 255.0f; r->data.text.rgb[2] = t->blue / 255.0f; list_values[t->indent] ++; if (t->indent == 0) { // Adjust left margin when no UL/OL/DL is being used... *left -= _htmlSizes[t->size]; } } /* * 'init_list()' - Initialize the list type and value as necessary. */ static void init_list(tree_t *t) /* I - List entry */ { uchar *type, /* TYPE= variable */ *value; /* VALUE= variable */ static uchar *symbols = (uchar *)"\327\267\250\340"; if ((type = htmlGetVariable(t, (uchar *)"TYPE")) != NULL) { if (strlen((char *)type) == 1) list_types[t->indent] = type[0]; else if (strcasecmp((char *)type, "disc") == 0 || strcasecmp((char *)type, "circle") == 0) list_types[t->indent] = symbols[1]; else list_types[t->indent] = symbols[2]; } else if (t->markup == MARKUP_UL) list_types[t->indent] = symbols[t->indent & 3]; else if (t->markup == MARKUP_OL) list_types[t->indent] = '1'; if ((value = htmlGetVariable(t, (uchar *)"VALUE")) == NULL) value = htmlGetVariable(t, (uchar *)"START"); if (value != NULL) { if (isdigit(value[0])) list_values[t->indent] = atoi((char *)value); else if (isupper(value[0])) list_values[t->indent] = value[0] - 'A' + 1; else list_values[t->indent] = value[0] - 'a' + 1; } else if (t->markup == MARKUP_OL) list_values[t->indent] = 1; } /* * 'parse_comment()' - Parse a comment for HTMLDOC comments. */ #ifdef COMMENT_DEBUG # undef DEBUG_puts # define DEBUG_puts(x) puts(x) # define DEBUG # undef DEBUG_printf # define DEBUG_printf(x) printf x #endif /* COMMENT_DEBUG */ static void parse_comment(tree_t *t, /* I - Tree to parse */ float *left, /* I - Left margin */ float *right, /* I - Printable width */ float *bottom, /* I - Bottom margin */ float *top, /* I - Printable top */ float *x, /* IO - X position */ float *y, /* IO - Y position */ int *page, /* IO - Page # */ tree_t *para, /* I - Current paragraph */ int needspace) /* I - Need whitespace? */ { int i; /* Looping var */ const char *comment; /* Comment text */ char *ptr, /* Pointer into value string */ buffer[1024]; /* Buffer for strings */ int pos, /* Position (left, center, right) */ tof, /* Top of form */ hfspace; /* Space for header/footer */ DEBUG_printf(("parse_comment(t=%p, left=%.1f, right=%.1f, bottom=%.1f, " "top=%.1f, x=%.1f, y=%.1f, page=%d, para=%p, needspace=%d\n", t, *left, *right, *bottom, *top, *x, *y, *page, para, needspace)); if (t->data == NULL) return; if (para != NULL && para->child != NULL && para->child->next == NULL && para->child->child == NULL && para->child->markup == MARKUP_NONE && strcmp((const char *)para->child->data, " ") == 0) { // Remove paragraph consisting solely of whitespace... htmlDeleteTree(para->child); para->child = para->last_child = NULL; } // Mark if we are at the top of form... tof = (*y >= *top); DEBUG_printf(("BEFORE tof=%d, *y=%.1f, *top=%.1f, *page=%d, t->data=\"%s\"\n", tof, *y, *top, *page, t->data)); DEBUG_printf((" PagePrintWidth = %d\n", PagePrintWidth)); DEBUG_printf(("PagePrintLength = %d\n", PagePrintLength)); DEBUG_printf((" PageWidth = %d\n", PageWidth)); DEBUG_printf((" PageLength = %d\n", PageLength)); DEBUG_printf((" PageLeft = %d\n", PageLeft)); DEBUG_printf((" PageBottom = %d\n", PageBottom)); DEBUG_printf((" PageRight = %d\n", PageRight)); DEBUG_printf((" PageTop = %d\n", PageTop)); DEBUG_printf((" Landscape = %d\n", Landscape)); for (comment = (const char *)t->data; *comment;) { // Skip leading whitespace... while (isspace(*comment)) comment ++; if (!*comment) break; if (strncasecmp(comment, "PAGE BREAK", 10) == 0 && (!comment[10] || isspace(comment[10]))) { /* * generates a page break... */ comment += 10; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *x = *left; *y = *top; tof = 1; } else if (strncasecmp(comment, "NEW PAGE", 8) == 0 && (!comment[8] || isspace(comment[8]))) { /* * generates a page break... */ comment += 8; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *x = *left; *y = *top; tof = 1; } else if (strncasecmp(comment, "NEW SHEET", 9) == 0 && (!comment[9] || isspace(comment[9]))) { /* * generate a page break to a new sheet... */ comment += 9; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } if (NumberUp == 1) { // NEW SHEET breaks to the next sheet of paper... (*page) ++; if (PageDuplex && ((*page) & 1)) (*page) ++; } else { // NEW SHEET breaks to the next side/sheet... (*page) ++; for (i = *page - 1; i >= 0; i --) if (pages[i].nup != NumberUp) break; i ++; for (i = *page - i; (i % NumberUp) != 0; i ++, (*page) ++); } if (Verbosity) progress_show("Formatting page %d", *page); *x = *left; *y = *top; tof = 1; } else if (strncasecmp(comment, "HALF PAGE", 9) == 0 && (!comment[9] || isspace(comment[9]))) { /* * Go to the next half page. If in the * top half of a page, go to the bottom half. If in the * bottom half, go to the next page. */ float halfway; comment += 9; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; } halfway = 0.5f * (*top + *bottom); if (*y <= halfway) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *x = *left; *y = *top; tof = 1; } else { *x = *left; *y = halfway; tof = 0; } } else if (strncasecmp(comment, "NEED ", 5) == 0) { /* * generate a page break if there isn't * enough remaining space... */ comment += 5; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if ((*y - get_measurement(comment, _htmlSpacings[SIZE_P])) < *bottom) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; tof = 1; } *x = *left; // Skip amount... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA COLOR ", 12) == 0) { // Media color for page... comment += 12; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (PageDuplex && ((*page) & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; tof = 1; } *x = *left; check_pages(*page); // Get color... if (*comment == '\"') { for (ptr = pages[*page].media_color, comment ++; *comment && *comment != '\"'; comment ++) if (ptr < (pages[*page].media_color + sizeof(pages[*page].media_color) - 1)) *ptr++ = *comment; if (*comment == '\"') comment ++; } else { for (ptr = pages[*page].media_color; *comment && !isspace(*comment); comment ++) if (ptr < (pages[*page].media_color + sizeof(pages[*page].media_color) - 1)) *ptr++ = *comment; } *ptr = '\0'; } else if (strncasecmp(comment, "MEDIA POSITION ", 15) == 0) { // Media position for page... comment += 15; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (PageDuplex && ((*page) & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; tof = 1; } *x = *left; check_pages(*page); pages[*page].media_position = atoi(comment); // Skip position... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA TYPE ", 11) == 0) { // Media type for page... comment += 11; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (PageDuplex && ((*page) & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; tof = 1; } *x = *left; check_pages(*page); // Get type... if (*comment == '\"') { for (ptr = pages[*page].media_type, comment ++; *comment && *comment != '\"'; comment ++) if (ptr < (pages[*page].media_type + sizeof(pages[*page].media_type) - 1)) *ptr++ = *comment; if (*comment == '\"') comment ++; } else { for (ptr = pages[*page].media_type; *comment && !isspace(*comment); comment ++) if (ptr < (pages[*page].media_type + sizeof(pages[*page].media_type) - 1)) *ptr++ = *comment; } *ptr = '\0'; } else if (strncasecmp(comment, "MEDIA SIZE ", 11) == 0) { // Media size... comment += 11; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; tof = 1; } if (PageDuplex && ((*page) & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); check_pages(*page); *right = PagePrintWidth - *right; *top = PagePrintLength - *top; set_page_size(comment); if (Landscape) { PagePrintWidth = PageLength - PageLeft - PageRight; PagePrintLength = PageWidth - PageTop - PageBottom; } else { PagePrintWidth = PageWidth - PageLeft - PageRight; PagePrintLength = PageLength - PageTop - PageBottom; } *right = PagePrintWidth - *right; *top = PagePrintLength - *top; *x = *left; *y = *top; pages[*page].width = PageWidth; pages[*page].length = PageLength; // Skip width... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA LEFT ", 11) == 0) { // Left margin... comment += 11; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; tof = 1; } *x = *left; check_pages(*page); *right = PagePrintWidth - *right; PageLeft = pages[*page].left = get_measurement(comment); if (Landscape) PagePrintWidth = PageLength - PageRight - PageLeft; else PagePrintWidth = PageWidth - PageRight - PageLeft; *right = PagePrintWidth - *right; // Skip left... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA RIGHT ", 12) == 0) { // Right margin... comment += 12; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *y = *top; tof = 1; } *x = *left; check_pages(*page); *right = PagePrintWidth - *right; PageRight = pages[*page].right = get_measurement(comment); if (Landscape) PagePrintWidth = PageLength - PageRight - PageLeft; else PagePrintWidth = PageWidth - PageRight - PageLeft; *right = PagePrintWidth - *right; // Skip right... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA BOTTOM ", 13) == 0) { // Bottom margin... comment += 13; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); tof = 1; } *x = *left; check_pages(*page); *top = PagePrintLength - *top; PageBottom = pages[*page].bottom = get_measurement(comment); if (Landscape) PagePrintLength = PageWidth - PageTop - PageBottom; else PagePrintLength = PageLength - PageTop - PageBottom; *top = PagePrintLength - *top; *y = *top; // Skip bottom... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA TOP ", 10) == 0) { // Top margin... comment += 10; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); tof = 1; } *x = *left; check_pages(*page); *top = PagePrintLength - *top; PageTop = pages[*page].top = get_measurement(comment); if (Landscape) PagePrintLength = PageWidth - PageTop - PageBottom; else PagePrintLength = PageLength - PageTop - PageBottom; *top = PagePrintLength - *top; *y = *top; // Skip top... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA LANDSCAPE ", 16) == 0) { // Landscape on/off... comment += 16; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; tof = 1; } if (PageDuplex && ((*page) & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *x = *left; check_pages(*page); if (strncasecmp(comment, "OFF", 3) == 0 || tolower(comment[0]) == 'n') { if (Landscape) { *right = PageLength - PageRight - *right; PagePrintWidth = PageWidth - PageRight - PageLeft; *right = PageWidth - PageRight - *right; *top = PageWidth - PageTop - *top; PagePrintLength = PageLength - PageTop - PageBottom; *top = PageLength - PageTop - *top; } Landscape = pages[*page].landscape = 0; } else if (strncasecmp(comment, "ON", 2) == 0 || tolower(comment[0]) == 'y') { if (!Landscape) { *top = PageLength - PageTop - *top; PagePrintLength = PageWidth - PageTop - PageBottom; *top = PageWidth - PageTop - *top; *right = PageWidth - PageRight - *right; PagePrintWidth = PageLength - PageRight - PageLeft; *right = PageLength - PageRight - *right; } Landscape = pages[*page].landscape = 1; } *y = *top; // Skip landscape... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "MEDIA DUPLEX ", 13) == 0) { // Duplex printing on/off... comment += 13; while (isspace(*comment)) comment ++; if (!*comment) break; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (!tof) { (*page) ++; *y = *top; tof = 1; } if (PageDuplex && ((*page) & 1)) (*page) ++; if (Verbosity) progress_show("Formatting page %d", *page); *x = *left; check_pages(*page); if (strncasecmp(comment, "OFF", 3) == 0 || tolower(comment[0]) == 'n') PageDuplex = pages[*page].duplex = 0; else if (strncasecmp(comment, "ON", 2) == 0 || tolower(comment[0]) == 'y') { if ((*page) & 1) { (*page) ++; check_pages(*page); if (Verbosity) progress_show("Formatting page %d", *page); } PageDuplex = pages[*page].duplex = 1; } // Skip duplex... while (*comment && !isspace(*comment)) comment ++; } else if (strncasecmp(comment, "HEADER ", 7) == 0) { // Header string... comment += 7; while (isspace(*comment)) comment ++; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (strncasecmp(comment, "LEFT", 4) == 0 && isspace(comment[4])) { pos = 0; comment += 4; } else if (strncasecmp(comment, "CENTER", 6) == 0 && isspace(comment[6])) { pos = 1; comment += 6; } else if (strncasecmp(comment, "RIGHT", 5) == 0 && isspace(comment[5])) { pos = 2; comment += 5; } else { progress_error(HD_ERROR_BAD_COMMENT, "Bad HEADER position: \"%s\"", comment); return; } while (isspace(*comment)) comment ++; if (*comment != '\"') { progress_error(HD_ERROR_BAD_COMMENT, "Bad HEADER string: \"%s\"", comment); return; } for (ptr = buffer, comment ++; *comment && *comment != '\"'; comment ++) { if (*comment == '\\') comment ++; if (ptr < (buffer + sizeof(buffer) - 1)) *ptr++ = *comment; } if (*comment == '\"') comment ++; *ptr = '\0'; if (ptr > buffer) Header[pos] = strdup(buffer); else Header[pos] = NULL; if (tof) { DEBUG_printf(("Setting header %d for page %d to \"%s\"...\n", pos, *page, Header[pos] ? Header[pos] : "(null)")); check_pages(*page); pages[*page].header[pos] = (uchar *)Header[pos]; } // Adjust top margin as needed... for (pos = 0; pos < 3; pos ++) if (Header[pos] || Header1[pos]) break; if (pos < 3) { if (maxhfheight > HeadFootSize) hfspace = (int)(maxhfheight + HeadFootSize); else hfspace = (int)(2 * HeadFootSize); } else hfspace = 0; *top = PagePrintLength - hfspace; if (tof) *y = *top; } else if (strncasecmp(comment, "HEADER1 ", 8) == 0) { // First page header string... comment += 8; while (isspace(*comment)) comment ++; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (strncasecmp(comment, "LEFT", 4) == 0 && isspace(comment[4])) { pos = 0; comment += 4; } else if (strncasecmp(comment, "CENTER", 6) == 0 && isspace(comment[6])) { pos = 1; comment += 6; } else if (strncasecmp(comment, "RIGHT", 5) == 0 && isspace(comment[5])) { pos = 2; comment += 5; } else { progress_error(HD_ERROR_BAD_COMMENT, "Bad HEADER1 position: \"%s\"", comment); return; } while (isspace(*comment)) comment ++; if (*comment != '\"') { progress_error(HD_ERROR_BAD_COMMENT, "Bad HEADER1 string: \"%s\"", comment); return; } for (ptr = buffer, comment ++; *comment && *comment != '\"'; comment ++) { if (*comment == '\\') comment ++; if (ptr < (buffer + sizeof(buffer) - 1)) *ptr++ = *comment; } if (*comment == '\"') comment ++; *ptr = '\0'; if (ptr > buffer) Header1[pos] = strdup(buffer); else Header1[pos] = NULL; if (tof) { DEBUG_printf(("Setting header1 %d for page %d to \"%s\"...\n", pos, *page, Header1[pos] ? Header1[pos] : "(null)")); check_pages(*page); pages[*page].header1[pos] = (uchar *)Header1[pos]; } // Adjust top margin as needed... for (pos = 0; pos < 3; pos ++) if (Header[pos] || Header1[pos]) break; if (pos < 3) { if (maxhfheight > HeadFootSize) hfspace = (int)(maxhfheight + HeadFootSize); else hfspace = (int)(2 * HeadFootSize); } else hfspace = 0; *top = PagePrintLength - hfspace; if (tof) *y = *top; } else if (strncasecmp(comment, "FOOTER ", 7) == 0) { // Footer string... comment += 7; while (isspace(*comment)) comment ++; if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (strncasecmp(comment, "LEFT", 4) == 0 && isspace(comment[4])) { pos = 0; comment += 4; } else if (strncasecmp(comment, "CENTER", 6) == 0 && isspace(comment[6])) { pos = 1; comment += 6; } else if (strncasecmp(comment, "RIGHT", 5) == 0 && isspace(comment[5])) { pos = 2; comment += 5; } else { progress_error(HD_ERROR_BAD_COMMENT, "Bad FOOTER position: \"%s\"", comment); return; } while (isspace(*comment)) comment ++; if (*comment != '\"') { progress_error(HD_ERROR_BAD_COMMENT, "Bad FOOTER string: \"%s\"", comment); return; } for (ptr = buffer, comment ++; *comment && *comment != '\"'; comment ++) { if (*comment == '\\') comment ++; if (ptr < (buffer + sizeof(buffer) - 1)) *ptr++ = *comment; } if (*comment == '\"') comment ++; *ptr = '\0'; if (ptr > buffer) Footer[pos] = strdup(buffer); else Footer[pos] = NULL; if (tof) { check_pages(*page); pages[*page].footer[pos] = (uchar *)Footer[pos]; } // Adjust bottom margin as needed... for (pos = 0; pos < 3; pos ++) if (Footer[pos]) break; if (pos == 3) hfspace = 0; else if (maxhfheight > HeadFootSize) hfspace = (int)(maxhfheight + HeadFootSize); else hfspace = (int)(2 * HeadFootSize); *bottom = hfspace; } else if (strncasecmp(comment, "NUMBER-UP ", 10) == 0) { // N-up printing... comment += 10; while (isspace(*comment)) comment ++; if (!*comment) break; NumberUp = strtol(comment, (char **)&comment, 10); if (para != NULL && para->child != NULL) { parse_paragraph(para, *left, *right, *bottom, *top, x, y, page, needspace); htmlDeleteTree(para->child); para->child = para->last_child = NULL; // Mark if we are still at the top of form... tof = (*y >= *top); } if (tof) { check_pages(*page); pages[*page].nup = NumberUp; } } else break; } DEBUG_printf(("LEAVING parse_comment() x=%.1f, y=%.1f, page=%d\n", *x, *y, *page)); DEBUG_printf((" PagePrintWidth = %d\n", PagePrintWidth)); DEBUG_printf(("PagePrintLength = %d\n", PagePrintLength)); DEBUG_printf((" PageWidth = %d\n", PageWidth)); DEBUG_printf((" PageLength = %d\n", PageLength)); DEBUG_printf((" PageLeft = %d\n", PageLeft)); DEBUG_printf((" PageBottom = %d\n", PageBottom)); DEBUG_printf((" PageRight = %d\n", PageRight)); DEBUG_printf((" PageTop = %d\n", PageTop)); DEBUG_printf((" Landscape = %d\n", Landscape)); } #ifdef COMMENT_DEBUG # undef DEBUG # undef DEBUG_puts # define DEBUG_puts(x) # undef DEBUG_printf # define DEBUG_printf(x) #endif /* COMMENT_DEBUG */ /* * 'real_prev()' - Return the previous non-link markup in the tree. */ static tree_t * /* O - Pointer to previous markup */ real_prev(tree_t *t) /* I - Current markup */ { if (t == NULL) return (NULL); if (t->prev != NULL && (t->prev->markup == MARKUP_A || t->prev->markup == MARKUP_COMMENT)) t = t->prev; if (t->prev != NULL) return (t->prev); t = t->parent; if (t == NULL) return (NULL); if (t->markup != MARKUP_A && t->markup != MARKUP_EMBED && t->markup != MARKUP_COMMENT) return (t); else return (real_prev(t)); } /* * 'real_next()' - Return the next non-link markup in the tree. */ static tree_t * /* O - Pointer to next markup */ real_next(tree_t *t) /* I - Current markup */ { if (t == NULL) return (NULL); if (t->next != NULL && (t->next->markup == MARKUP_A || t->next->markup == MARKUP_COMMENT)) t = t->next; if (t->next != NULL) return (t->next); return (real_next(t->parent)); } /* * 'find_background()' - Find the background image/color for the given document. */ static void find_background(tree_t *t) /* I - Document to search */ { uchar *var; /* BGCOLOR/BACKGROUND variable */ /* * First see if the --bodycolor or --bodyimage options have been * specified... */ if (BodyImage[0] != '\0') { background_image = image_load(BodyImage, !OutputColor); return; } else if (BodyColor[0] != '\0') { get_color((uchar *)BodyColor, background_color, 0); return; } /* * If not, search the document tree... */ while (t != NULL && background_image == NULL && background_color[0] == 1.0 && background_color[1] == 1.0 && background_color[2] == 1.0) { if (t->markup == MARKUP_BODY) { if ((var = htmlGetVariable(t, (uchar *)"BACKGROUND")) != NULL) background_image = image_load((char *)var, !OutputColor); if ((var = htmlGetVariable(t, (uchar *)"BGCOLOR")) != NULL) get_color(var, background_color, 0); } if (t->child != NULL) find_background(t->child); t = t->next; } } /* * 'write_background()' - Write the background image/color for to the current * page. */ static void write_background(int page, /* I - Page we are writing for */ FILE *out) /* I - File to write to */ { float x, y; float width, height; int page_width, page_length; if (Landscape) { page_length = pages[page].width; page_width = pages[page].length; } else { page_width = pages[page].width; page_length = pages[page].length; } if (background_color[0] != 1.0 || background_color[1] != 1.0 || background_color[2] != 1.0) { if (PSLevel > 0) { render_x = -1.0; render_y = -1.0; set_color(out, background_color); fprintf(out, "0 0 M %d %d F\n", page_width, page_length); } else { set_color(out, background_color); flate_printf(out, "0 0 %d %d re f\n", page_width, page_length); } } if (background_image != NULL) { width = background_image->width * 72.0f / _htmlPPI; height = background_image->height * 72.0f / _htmlPPI; if (width < 1.0f) width = 1.0f; if (height < 1.0f) height = 1.0f; switch (PSLevel) { case 0 : for (x = 0.0; x < page_width; x += width) for (y = page_length; y >= 0.0f;) { y -= height; flate_printf(out, "q %.1f 0 0 %.1f %.1f %.1f cm", width, height, x, y); flate_printf(out, "/I%d Do\n", background_image->obj); flate_puts("Q\n", out); } break; default : fprintf(out, "0 %.1f %d{/y exch neg %d add def\n", height, page_length + (int)height - 1, page_length); fprintf(out, "0 %.1f %d{/x exch def\n", width, page_width); fprintf(out, "GS[%.1f 0 0 %.1f x y]CM/iy -1 def\n", width, height); fprintf(out, "%d %d 8[%d 0 0 %d 0 %d]", background_image->width, background_image->height, background_image->width, -background_image->height, background_image->height); fputs("{/iy iy 1 add def BG iy get}", out); if (background_image->depth == 1) fputs("image\n", out); else fputs("false 3 colorimage\n", out); fputs("GR}for}for\n", out); break; } } } /* * 'new_render()' - Allocate memory for a new rendering structure. */ static render_t * /* O - New render structure */ new_render(int page, /* I - Page number (0-n) */ int type, /* I - Type of render primitive */ float x, /* I - Horizontal position */ float y, /* I - Vertical position */ float width, /* I - Width */ float height, /* I - Height */ void *data, /* I - Data */ render_t *insert) /* I - Insert before here... */ { render_t *r; /* New render primitive */ static render_t dummy; /* Dummy var for errors... */ DEBUG_printf(("new_render(page=%d, type=%d, x=%.1f, y=%.1f, width=%.1f, height=%.1f, data=%p, insert=%p)\n", page, type, x, y, width, height, data, insert)); check_pages(page); if (page < 0 || page >= alloc_pages) { progress_error(HD_ERROR_INTERNAL_ERROR, "Page number (%d) out of range (1...%d)\n", page + 1, alloc_pages); memset(&dummy, 0, sizeof(dummy)); return (&dummy); } if ((type != RENDER_TEXT && type != RENDER_LINK) || data == NULL) r = (render_t *)calloc(sizeof(render_t), 1); else r = (render_t *)calloc(sizeof(render_t) + strlen((char *)data), 1); if (r == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory on page %s\n", page + 1); memset(&dummy, 0, sizeof(dummy)); return (&dummy); } r->type = type; r->x = x; r->y = y; r->width = width; r->height = height; switch (type) { case RENDER_TEXT : if (data == NULL) { free(r); return (NULL); } // Safe because buffer is allocated... strcpy((char *)r->data.text.buffer, (char *)data); get_color(_htmlTextColor, r->data.text.rgb); break; case RENDER_IMAGE : if (data == NULL) { free(r); return (NULL); } r->data.image = (image_t *)data; break; case RENDER_BOX : memcpy(r->data.box, data, sizeof(r->data.box)); break; case RENDER_LINK : if (data == NULL) { free(r); return (NULL); } // Safe because buffer is allocated... strcpy((char *)r->data.link, (char *)data); break; } if (insert) { if (insert->prev) insert->prev->next = r; else pages[page].start = r; r->prev = insert->prev; r->next = insert; insert->prev = r; } else { if (pages[page].end != NULL) pages[page].end->next = r; else pages[page].start = r; r->next = NULL; r->prev = pages[page].end; pages[page].end = r; } DEBUG_printf((" returning r = %p\n", r)); return (r); } /* * 'check_pages()' - Allocate memory for more pages as needed... */ static void check_pages(int page) // I - Current page { page_t *temp; // Temporary page pointer DEBUG_printf(("check_pages(%d)\n", page)); // See if we need to allocate memory for the page... if (page >= alloc_pages) { // Yes, allocate enough for ALLOC_PAGES more pages... while (page >= alloc_pages) alloc_pages += ALLOC_PAGES; // Do the pages pointers... if (num_pages == 0) temp = (page_t *)malloc(sizeof(page_t) * alloc_pages); else temp = (page_t *)realloc(pages, sizeof(page_t) * alloc_pages); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d pages - %s", alloc_pages, strerror(errno)); alloc_pages -= ALLOC_PAGES; return; } memset(temp + num_pages, 0, (alloc_pages - num_pages) * sizeof(page_t)); pages = temp; } // Initialize the page data as needed... for (temp = pages + num_pages; num_pages <= page; num_pages ++, temp ++) { if (!temp->width) { if (num_pages == 0 || !temp[-1].width || !temp[-1].length || chapter == 0) { temp->width = PageWidth; temp->length = PageLength; temp->left = PageLeft; temp->right = PageRight; temp->top = PageTop; temp->bottom = PageBottom; temp->duplex = PageDuplex; temp->landscape = Landscape; temp->nup = NumberUp; } else { memcpy(temp, temp - 1, sizeof(page_t)); temp->start = NULL; temp->end = NULL; } if (chapter == 0) { memcpy(temp->header, TocHeader, sizeof(temp->header)); memcpy(temp->footer, TocFooter, sizeof(temp->footer)); } else { memcpy(temp->header, Header, sizeof(temp->header)); memcpy(temp->header1, Header1, sizeof(temp->header1)); memcpy(temp->footer, Footer, sizeof(temp->footer)); if (current_heading != temp->headnode) { temp->heading = htmlGetText(current_heading); temp->headnode = current_heading; } } memcpy(temp->background_color, background_color, sizeof(temp->background_color)); temp->background_image = background_image; } } } /* * 'add_link()' - Add a named link... */ static void add_link(uchar *name, /* I - Name of link */ int page, /* I - Page # */ int top) /* I - Y position */ { link_t *temp; /* New name */ if (name == NULL) return; DEBUG_printf(("add_link(name=\"%s\", page=%d, top=%d)\n", name, page, top)); if ((temp = find_link(name)) != NULL) { temp->page = page; temp->top = top; } else { // See if we need to allocate memory for links... if (num_links >= alloc_links) { // Allocate more links... alloc_links += ALLOC_LINKS; if (num_links == 0) temp = (link_t *)malloc(sizeof(link_t) * alloc_links); else temp = (link_t *)realloc(links, sizeof(link_t) * alloc_links); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d links - %s", alloc_links, strerror(errno)); alloc_links -= ALLOC_LINKS; return; } links = temp; } // Add a new link... temp = links + num_links; num_links ++; strlcpy((char *)temp->name, (char *)name, sizeof(temp->name)); temp->page = page; temp->top = top; if (num_links > 1) qsort(links, num_links, sizeof(link_t), (compare_func_t)compare_links); } } /* * 'find_link()' - Find a named link... */ static link_t * find_link(uchar *name) /* I - Name to find */ { link_t key, /* Search key */ *match; /* Matching name entry */ if (name == NULL || num_links == 0) return (NULL); if (name[0] == '#') name ++; strlcpy((char *)key.name, (char *)name, sizeof(key.name)); match = (link_t *)bsearch(&key, links, num_links, sizeof(link_t), (compare_func_t)compare_links); return (match); } /* * 'compare_links()' - Compare two named links. */ static int /* O - 0 = equal, -1 or 1 = not equal */ compare_links(link_t *n1, /* I - First name */ link_t *n2) /* I - Second name */ { return (strcasecmp((char *)n1->name, (char *)n2->name)); } /* * 'copy_tree()' - Copy a markup tree... */ static void copy_tree(tree_t *parent, /* I - Source tree */ tree_t *t) /* I - Destination tree */ { int i; /* I - Looping var */ tree_t *temp; /* I - New tree entry */ var_t *var; /* I - Current markup variable */ while (t != NULL) { if ((temp = htmlAddTree(parent, t->markup, t->data)) != NULL) { temp->link = t->link; temp->typeface = t->typeface; temp->style = t->style; temp->size = t->size; temp->halignment = t->halignment; temp->valignment = t->valignment; temp->red = t->red; temp->green = t->green; temp->blue = t->blue; temp->underline = t->underline; temp->strikethrough = t->strikethrough; temp->superscript = t->superscript; temp->subscript = t->subscript; for (i = 0, var = t->vars; i < t->nvars; i ++, var ++) htmlSetVariable(temp, var->name, var->value); copy_tree(temp, t->child); } t = t->next; } } #ifdef TABLE_DEBUG # undef DEBUG_printf # undef DEBUG_puts # define DEBUG_printf(x) printf x # define DEBUG_puts(x) puts(x) #endif /* TABLE_DEBUG */ // // 'get_cell_size()' - Compute the minimum width of a cell. // static float // O - Required width of cell get_cell_size(tree_t *t, // I - Cell float left, // I - Left margin float right, // I - Right margin float *minwidth, // O - Minimum width float *prefwidth, // O - Preferred width float *minheight) // O - Minimum height { tree_t *temp, // Current tree entry *next; // Next tree entry uchar *var; // Attribute value int nowrap; // NOWRAP attribute? float width, // Width of cell frag_width, // Fragment required width frag_height, // Fragment height frag_pref, // Fragment preferred width frag_min, // Fragment minimum width minh, // Local minimum height minw, // Local minimum width prefw, // Local preferred width format_width; // Working format width for images DEBUG_printf(("get_cell_size(%p, %.1f, %.1f, %p, %p, %p)\n", t, left, right, minwidth, prefwidth, minheight)); // First see if the width has been specified for this cell... if ((var = htmlGetVariable(t, (uchar *)"WIDTH")) != NULL && (var[strlen((char *)var) - 1] != '%' || (right - left) > 0.0f)) { // Yes, use it! if (var[strlen((char *)var) - 1] == '%') width = (right - left) * atoi((char *)var) * 0.01f; else width = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else width = 0.0f; if ((format_width = right - left) <= 0.0f) format_width = PagePrintWidth; minw = 0.0f; prefw = 0.0f; // Then the height... if ((var = htmlGetVariable(t, (uchar *)"HEIGHT")) != NULL) { // Yes, use it! if (var[strlen((char *)var) - 1] == '%') minh = PagePrintLength * atoi((char *)var) * 0.01f; else minh = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else minh = 0.0f; nowrap = (htmlGetVariable(t, (uchar *)"NOWRAP") != NULL); DEBUG_printf(("nowrap = %d\n", nowrap)); for (temp = t->child, frag_width = 0.0f, frag_pref = 0.0f; temp != NULL; temp = next) { // Point to next markup, if any... next = temp->child; switch (temp->markup) { case MARKUP_TABLE : // Update widths... if (frag_pref > prefw) prefw = frag_pref; if (frag_width > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for block...\n", frag_width, minw)); minw = frag_width; } if (nowrap && frag_pref > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for break...\n", frag_pref, minw)); minw = frag_pref; } // For nested tables, compute the width of the table. frag_width = get_table_size(temp, left, right, &frag_min, &frag_pref, &frag_height); if (frag_pref > prefw) prefw = frag_pref; if (frag_min > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for nested table...\n", frag_min, minw)); minw = frag_min; } frag_width = 0.0f; frag_pref = 0.0f; frag_min = 0.0f; next = NULL; break; case MARKUP_IMG : // Update the image width as needed... if (temp->markup == MARKUP_IMG) update_image_size(temp); case MARKUP_NONE : case MARKUP_SPACER : frag_height = temp->height; #ifdef TABLE_DEBUG2 if (temp->markup == MARKUP_NONE) printf("FRAG(%s) = %.1f\n", temp->data, temp->width); else if (temp->markup == MARKUP_SPACER) printf("SPACER = %.1f\n", temp->width); else printf("IMG(%s) = %.1f\n", htmlGetVariable(temp, (uchar *)"SRC"), temp->width); #endif // TABLE_DEBUG2 // Handle min/preferred widths separately... if (temp->width > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for fragment...\n", temp->width, minw)); minw = temp->width; } if (temp->preformatted && temp->data != NULL && temp->data[strlen((char *)temp->data) - 1] == '\n') { // End of a line - check preferred width... frag_pref += temp->width + 1; if (frag_pref > prefw) prefw = frag_pref; if (temp->preformatted && frag_pref > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for preformatted...\n", frag_pref, minw)); minw = frag_pref; } frag_pref = 0.0f; } else if (temp->data != NULL) frag_pref += temp->width + 1; else if ((frag_pref + temp->width) > format_width) { // parse_paragraph() will force a break if (frag_pref > prefw) prefw = frag_pref; frag_pref = temp->width; } else frag_pref += temp->width; if (temp->preformatted && temp->data != NULL && temp->data[strlen((char *)temp->data) - 1] == '\n') { // Check required width... frag_width += temp->width + 1; if (frag_width > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for block...\n", frag_width, minw)); minw = frag_width; } frag_width = 0.0f; } else if (!temp->preformatted && temp->data != NULL && (isspace(temp->data[0]) || isspace(temp->data[strlen((char *)temp->data) - 1]))) { // Check required width... if (isspace(temp->data[0])) frag_width = temp->width + 1; else frag_width += temp->width + 1; if (frag_width > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for block...\n", frag_width, minw)); minw = frag_width; } if (!isspace(temp->data[0])) frag_width = 0.0f; DEBUG_printf(("frag_width=%.1f after whitespace processing...\n", frag_width)); } else if (temp->data != NULL) frag_width += temp->width + 1; else if ((frag_width + temp->width) > format_width) // parse_paragraph() will force a break frag_width = temp->width; else frag_width += temp->width; break; case MARKUP_ADDRESS : case MARKUP_BLOCKQUOTE : case MARKUP_BR : case MARKUP_CENTER : case MARKUP_DD : case MARKUP_DIV : case MARKUP_DT : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : case MARKUP_HR : case MARKUP_LI : case MARKUP_P : case MARKUP_PRE : DEBUG_printf(("BREAK at %.1f\n", frag_pref)); if (frag_pref > prefw) prefw = frag_pref; if (frag_width > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for block...\n", frag_width, minw)); minw = frag_width; } if (nowrap && frag_pref > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for break...\n", frag_pref, minw)); minw = frag_pref; } frag_pref = 0.0f; frag_width = 0.0f; default : frag_height = 0.0f; break; } // Update minimum height... if (frag_height > minh) minh = frag_height; // Update next pointer as needed... if (next == NULL) next = temp->next; if (next == NULL) { // This code is almost funny if you say it fast... :) for (next = temp->parent; next != NULL && next != t; next = next->parent) if (next->next != NULL) break; if (next == t) next = NULL; else if (next) next = next->next; } } // Check the last fragment's width... if (frag_pref > prefw) prefw = frag_pref; if (frag_width > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for block...\n", frag_width, minw)); minw = frag_width; } // Handle the "NOWRAP" option... if (nowrap && prefw > minw) { DEBUG_printf(("Setting minw to %.1f (was %.1f) for NOWRAP...\n", prefw, minw)); minw = prefw; } // Return the required, minimum, and preferred size of the cell... *minwidth = minw; *prefwidth = prefw; *minheight = minh; DEBUG_printf(("get_cell_size(): width=%.1f, minw=%.1f, prefw=%.1f, minh=%.1f\n", width, minw, prefw, minh)); return (width); } // // 'get_table_size()' - Compute the minimum width of a table. // static float // O - Minimum width of table get_table_size(tree_t *t, // I - Table float left, // I - Left margin float right, // I - Right margin float *minwidth, // O - Minimum width float *prefwidth, // O - Preferred width float *minheight) // O - Minimum height { tree_t *temp, // Current tree entry *next; // Next tree entry uchar *var; // Attribute value float width, // Required width of table minw, // Minimum width of table minh, // Minimum height of table prefw, // Preferred width of table cell_width, // Cell required width cell_pref, // Cell preferred width cell_min, // Cell minimum width cell_height, // Cell minimum height row_width, // Row required width row_pref, // Row preferred width row_min, // Row minimum width row_height, // Row minimum height border, // Border around cells cellpadding, // Padding inside cells cellspacing; // Spacing around cells int columns, // Current number of columns max_columns, // Maximum columns rows; // Number of rows DEBUG_printf(("get_table_size(%p, %.1f, %.1f, %p, %p, %p)\n", t, left, right, minwidth, prefwidth, minheight)); // First see if the width has been specified for this table... if ((var = htmlGetVariable(t, (uchar *)"WIDTH")) != NULL && (var[strlen((char *)var) - 1] != '%' || (right - left) > 0.0f)) { // Yes, use it! if (var[strlen((char *)var) - 1] == '%') width = (right - left) * atoi((char *)var) * 0.01f; else width = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else width = 0.0f; minw = 0.0f; prefw = 0.0f; // Then the height... if ((var = htmlGetVariable(t, (uchar *)"HEIGHT")) != NULL) { // Yes, use it! if (var[strlen((char *)var) - 1] == '%') minh = PagePrintLength * atoi((char *)var) * 0.01f; else minh = atoi((char *)var) * PagePrintWidth / _htmlBrowserWidth; } else minh = 0.0f; // Update the size as needed... for (temp = t->child, row_width = 0.0f, row_min = 0.0f, row_pref = 0.0f, row_height = 0.0f, columns = 0, rows = 0, max_columns = 0; temp != NULL; temp = next) { // Point to next markup, if any... next = temp->child; // Start a new row or add the cell width as needed... if (temp->markup == MARKUP_TR) { minh += row_height; row_width = 0.0f; row_pref = 0.0f; row_min = 0.0f; row_height = 0.0f; rows ++; columns = 0; } else if (temp->markup == MARKUP_TD || temp->markup == MARKUP_TH) { // Update columns... columns ++; if (columns > max_columns) max_columns = columns; // Get widths of cell... cell_width = get_cell_size(temp, left, right, &cell_min, &cell_pref, &cell_height); // Update row widths... row_width += cell_width; row_pref += cell_pref; row_min += cell_min; if (cell_height > row_height) row_height = cell_height; // Check current row widths against table... if (row_pref > prefw) prefw = row_pref; if (row_min > minw) minw = row_min; } // Update next pointer as needed... if (next == NULL) next = temp->next; if (next == NULL) { // This code is almost funny if you say it fast... :) for (next = temp->parent; next != NULL && next != t; next = next->parent) if (next->next != NULL) break; if (next == t) next = NULL; else if (next) next = next->next; } } // Make sure last row is counted in min height calcs. minh += row_height; // Add room for spacing and padding... if ((var = htmlGetVariable(t, (uchar *)"CELLPADDING")) != NULL) cellpadding = atoi((char *)var); else cellpadding = 1.0f; if ((var = htmlGetVariable(t, (uchar *)"CELLSPACING")) != NULL) cellspacing = atoi((char *)var); else cellspacing = 0.0f; if ((var = htmlGetVariable(t, (uchar *)"BORDER")) != NULL) { if ((border = atof((char *)var)) == 0.0 && var[0] != '0') border = 1.0f; cellpadding += border; } else border = 0.0f; if (border == 0.0f && cellpadding > 0.0f) { /* * Ah, the strange table formatting nightmare that is HTML. * Netscape and MSIE assign an invisible border width of 1 * pixel if no border is specified... */ cellpadding += 1.0f; } cellspacing *= PagePrintWidth / _htmlBrowserWidth; cellpadding *= PagePrintWidth / _htmlBrowserWidth; DEBUG_printf(("ADDING %.1f for table space for %d columns...\n", max_columns * (2 * cellpadding + cellspacing) - cellspacing, max_columns)); if (width > 0.0f) width += max_columns * (2 * cellpadding + cellspacing) - cellspacing; minw += max_columns * (2 * cellpadding + cellspacing) - cellspacing; prefw += max_columns * (2 * cellpadding + cellspacing) - cellspacing; minh += rows * (2 * cellpadding + cellspacing) - cellspacing; // Return the required, minimum, and preferred size of the table... *minwidth = minw; *prefwidth = prefw; *minheight = minh; DEBUG_printf(("get_table_size(): width=%.1f, minw=%.1f, prefw=%.1f, minh=%.1f\n", width, minw, prefw, minh)); return (width); } #ifdef TABLE_DEBUG # undef DEBUG_printf # undef DEBUG_puts # define DEBUG_printf(x) # define DEBUG_puts(x) #endif /* TABLE_DEBUG */ /* * 'flatten_tree()' - Flatten an HTML tree to only include the text, image, * link, and break markups. */ static tree_t * /* O - Flattened markup tree */ flatten_tree(tree_t *t) /* I - Markup tree to flatten */ { tree_t *temp, /* New tree node */ *flat; /* Flattened tree */ flat = NULL; while (t != NULL) { switch (t->markup) { case MARKUP_NONE : if (t->data == NULL) break; case MARKUP_BR : case MARKUP_SPACER : case MARKUP_IMG : temp = (tree_t *)calloc(sizeof(tree_t), 1); memcpy(temp, t, sizeof(tree_t)); temp->parent = NULL; temp->child = NULL; temp->prev = flat; temp->next = NULL; if (flat != NULL) flat->next = temp; flat = temp; if (temp->markup == MARKUP_IMG) update_image_size(temp); break; case MARKUP_A : if (htmlGetVariable(t, (uchar *)"NAME") != NULL) { temp = (tree_t *)calloc(sizeof(tree_t), 1); memcpy(temp, t, sizeof(tree_t)); temp->parent = NULL; temp->child = NULL; temp->prev = flat; temp->next = NULL; if (flat != NULL) flat->next = temp; flat = temp; } break; case MARKUP_P : case MARKUP_PRE : case MARKUP_H1 : case MARKUP_H2 : case MARKUP_H3 : case MARKUP_H4 : case MARKUP_H5 : case MARKUP_H6 : case MARKUP_H7 : case MARKUP_H8 : case MARKUP_H9 : case MARKUP_H10 : case MARKUP_H11 : case MARKUP_H12 : case MARKUP_H13 : case MARKUP_H14 : case MARKUP_H15 : case MARKUP_UL : case MARKUP_DIR : case MARKUP_MENU : case MARKUP_OL : case MARKUP_DL : case MARKUP_LI : case MARKUP_DD : case MARKUP_DT : case MARKUP_TR : case MARKUP_CAPTION : temp = (tree_t *)calloc(sizeof(tree_t), 1); temp->markup = MARKUP_BR; temp->parent = NULL; temp->child = NULL; temp->prev = flat; temp->next = NULL; if (flat != NULL) flat->next = temp; flat = temp; break; default : break; } if (t->child != NULL) { temp = flatten_tree(t->child); if (temp != NULL) temp->prev = flat; if (flat != NULL) flat->next = temp; else flat = temp; } if (flat != NULL) while (flat->next != NULL) flat = flat->next; t = t->next; } if (flat == NULL) return (NULL); while (flat->prev != NULL) flat = flat->prev; return (flat); } /* * 'update_image_size()' - Update the size of an image based upon the * printable width. */ static void update_image_size(tree_t *t) /* I - Tree entry */ { image_t *img; /* Image file */ uchar *width, /* Width string */ *height; /* Height string */ width = htmlGetVariable(t, (uchar *)"WIDTH"); height = htmlGetVariable(t, (uchar *)"HEIGHT"); if (width != NULL && height != NULL) { if (width[strlen((char *)width) - 1] == '%') t->width = atof((char *)width) * PagePrintWidth / 100.0f; else t->width = atoi((char *)width) * PagePrintWidth / _htmlBrowserWidth; if (height[strlen((char *)height) - 1] == '%') t->height = atof((char *)height) * PagePrintWidth / 100.0f; else t->height = atoi((char *)height) * PagePrintWidth / _htmlBrowserWidth; return; } img = image_find((char *)htmlGetVariable(t, (uchar *)"REALSRC")); if (img == NULL) return; if (width != NULL) { if (width[strlen((char *)width) - 1] == '%') t->width = atof((char *)width) * PagePrintWidth / 100.0f; else t->width = atoi((char *)width) * PagePrintWidth / _htmlBrowserWidth; t->height = t->width * img->height / img->width; } else if (height != NULL) { if (height[strlen((char *)height) - 1] == '%') t->height = atof((char *)height) * PagePrintWidth / 100.0f; else t->height = atoi((char *)height) * PagePrintWidth / _htmlBrowserWidth; t->width = t->height * img->width / img->height; } else { t->width = img->width * PagePrintWidth / _htmlBrowserWidth; t->height = img->height * PagePrintWidth / _htmlBrowserWidth; } } /* * 'get_width()' - Get the width of a string in points. */ static float /* O - Width in points */ get_width(uchar *s, /* I - String to scan */ int typeface, /* I - Typeface code */ int style, /* I - Style code */ int size) /* I - Size */ { uchar *ptr; /* Current character */ float width; /* Current width */ DEBUG_printf(("get_width(\"%s\", %d, %d, %d)\n", s == NULL ? "(null)" : (const char *)s, typeface, style, size)); if (s == NULL) return (0.0); for (width = 0.0, ptr = s; *ptr != '\0'; ptr ++) width += _htmlWidths[typeface][style][*ptr]; return (width * _htmlSizes[size]); } /* * 'get_title()' - Get the title string for a document. */ static uchar * /* O - Title string */ get_title(tree_t *doc) /* I - Document */ { uchar *temp; while (doc != NULL) { if (doc->markup == MARKUP_TITLE) return (htmlGetText(doc->child)); else if (doc->child != NULL) if ((temp = get_title(doc->child)) != NULL) return (temp); doc = doc->next; } return (NULL); } /* * 'open_file()' - Open an output file for the current chapter. */ static FILE * /* O - File pointer */ open_file(void) { char filename[255]; /* Filename */ if (OutputFiles && PSLevel > 0) { if (chapter == -1) snprintf(filename, sizeof(filename), "%s/cover.ps", OutputPath); else if (chapter == 0) snprintf(filename, sizeof(filename), "%s/contents.ps", OutputPath); else snprintf(filename, sizeof(filename), "%s/doc%d.ps", OutputPath, chapter); return (fopen(filename, "wb+")); } else if (OutputFiles) { snprintf(filename, sizeof(filename), "%s/doc.pdf", OutputPath); return (fopen(filename, "wb+")); } else if (OutputPath[0] != '\0') return (fopen(OutputPath, "wb+")); else if (PSLevel == 0) return (file_temp(stdout_filename, sizeof(stdout_filename))); else return (stdout); } /* * 'set_color()' - Set the current text color... */ static void set_color(FILE *out, /* I - File to write to */ float *rgb) /* I - RGB color */ { if (rgb[0] == render_rgb[0] && rgb[1] == render_rgb[1] && rgb[2] == render_rgb[2]) return; render_rgb[0] = rgb[0]; render_rgb[1] = rgb[1]; render_rgb[2] = rgb[2]; if (OutputColor) { // Output RGB color... if (PSLevel > 0) fprintf(out, "%.2f %.2f %.2f C ", rgb[0], rgb[1], rgb[2]); else flate_printf(out, "%.2f %.2f %.2f rg ", rgb[0], rgb[1], rgb[2]); } else { // Output grayscale... if (PSLevel > 0) fprintf(out, "%.2f G ", rgb[0] * 0.31f + rgb[1] * 0.61f + rgb[2] * 0.08f); else flate_printf(out, "%.2f g ", rgb[0] * 0.31f + rgb[1] * 0.61f + rgb[2] * 0.08f); } } /* * 'set_font()' - Set the current text font. */ static void set_font(FILE *out, /* I - File to write to */ int typeface, /* I - Typeface code */ int style, /* I - Style code */ float size) /* I - Size */ { char sizes[255], /* Formatted string for size... */ *s; /* Pointer to end of string */ if (typeface == render_typeface && style == render_style && size == render_size) return; /* * Format size and strip trailing 0's and decimals... */ sprintf(sizes, "%.1f", size); for (s = sizes + strlen(sizes) - 1; s > sizes && *s == '0'; s --) *s = '\0'; if (*s == '.') *s = '\0'; /* * Set the new typeface, style, and size. */ if (PSLevel > 0) { if (size != render_size) fprintf(out, "%s FS", sizes); fprintf(out, "/F%x SF ", typeface * 4 + style); } else flate_printf(out, "/F%x %s Tf ", typeface * 4 + style, sizes); render_typeface = typeface; render_style = style; render_size = size; } /* * 'set_pos()' - Set the current text position. */ static void set_pos(FILE *out, /* I - File to write to */ float x, /* I - X position */ float y) /* I - Y position */ { char xs[255], /* Formatted string for X... */ ys[255], /* Formatted string for Y... */ *s; /* Pointer to end of string */ if (fabs(render_x - x) < 0.1 && fabs(render_y - y) < 0.1) return; /* * Format X and Y... */ if (PSLevel > 0 || render_x == -1.0) { sprintf(xs, "%.3f", x); sprintf(ys, "%.3f", y); } else { sprintf(xs, "%.3f", x - render_startx); sprintf(ys, "%.3f", y - render_y); } /* * Strip trailing 0's and decimals... */ for (s = xs + strlen(xs) - 1; s > xs && *s == '0'; s --) *s = '\0'; if (*s == '.') *s = '\0'; for (s = ys + strlen(ys) - 1; s > ys && *s == '0'; s --) *s = '\0'; if (*s == '.') *s = '\0'; if (PSLevel > 0) fprintf(out, "%s %s M", xs, ys); else flate_printf(out, "%s %s Td", xs, ys); render_x = render_startx = x; render_y = y; } /* * 'ps_hex()' - Print binary data as a series of hexadecimal numbers. */ static void ps_hex(FILE *out, /* I - File to print to */ uchar *data, /* I - Data to print */ int length) /* I - Number of bytes to print */ { int col; static const char *hex = "0123456789ABCDEF"; col = 0; while (length > 0) { /* * Put the hex uchars out to the file; note that we don't use fprintf() * for speed reasons... */ putc(hex[*data >> 4], out); putc(hex[*data & 15], out); data ++; length --; col = (col + 1) % 40; if (col == 0) putc('\n', out); } if (col > 0) putc('\n', out); } #ifdef HTMLDOC_ASCII85 /* * 'ps_ascii85()' - Print binary data as a series of base-85 numbers. */ static void ps_ascii85(FILE *out, /* I - File to print to */ uchar *data, /* I - Data to print */ int length, /* I - Number of bytes to print */ int eod) /* I - 1 = end-of-data */ { unsigned b; /* Current 32-bit word */ uchar c[5]; /* Base-85 encoded characters */ static int col = 0; /* Column */ static uchar leftdata[4]; /* Leftover data at the end */ static int leftcount = 0; /* Size of leftover data */ length += leftcount; while (length > 3) { switch (leftcount) { case 0 : b = (((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3]; break; case 1 : b = (((((leftdata[0] << 8) | data[0]) << 8) | data[1]) << 8) | data[2]; break; case 2 : b = (((((leftdata[0] << 8) | leftdata[1]) << 8) | data[0]) << 8) | data[1]; break; case 3 : b = (((((leftdata[0] << 8) | leftdata[1]) << 8) | leftdata[2]) << 8) | data[0]; break; } if (col >= 76) { col = 0; putc('\n', out); } if (b == 0) { putc('z', out); col ++; } else { c[4] = (b % 85) + '!'; b /= 85; c[3] = (b % 85) + '!'; b /= 85; c[2] = (b % 85) + '!'; b /= 85; c[1] = (b % 85) + '!'; b /= 85; c[0] = b + '!'; fwrite(c, 1, 5, out); col += 5; } data += 4 - leftcount; length -= 4 - leftcount; leftcount = 0; } if (length > 0) { // Copy any remainder into the leftdata array... if ((length - leftcount) > 0) memcpy(leftdata + leftcount, data, length - leftcount); memset(leftdata + length, 0, 4 - length); leftcount = length; } if (eod) { // Do the end-of-data dance... if (col >= 76) { col = 0; putc('\n', out); } if (leftcount > 0) { // Write the remaining bytes as needed... b = (((((leftdata[0] << 8) | leftdata[1]) << 8) | leftdata[2]) << 8) | leftdata[3]; c[4] = (b % 85) + '!'; b /= 85; c[3] = (b % 85) + '!'; b /= 85; c[2] = (b % 85) + '!'; b /= 85; c[1] = (b % 85) + '!'; b /= 85; c[0] = b + '!'; fwrite(c, leftcount + 1, 1, out); leftcount = 0; } fputs("~>\n", out); col = 0; } } #endif // HTMLDOC_ASCII85 /* * JPEG library destination data manager. These routines direct * compressed data from libjpeg into the PDF or PostScript file. */ static FILE *jpg_file; /* JPEG file */ static uchar jpg_buf[8192]; /* JPEG buffer */ static jpeg_destination_mgr jpg_dest; /* JPEG destination manager */ static struct jpeg_error_mgr jerr; /* JPEG error handler */ /* * 'jpg_init()' - Initialize the JPEG destination. */ static void jpg_init(j_compress_ptr cinfo) /* I - Compressor info */ { (void)cinfo; jpg_dest.next_output_byte = jpg_buf; jpg_dest.free_in_buffer = sizeof(jpg_buf); } /* * 'jpg_empty()' - Empty the JPEG output buffer. */ static boolean /* O - True if buffer written OK */ jpg_empty(j_compress_ptr cinfo) /* I - Compressor info */ { (void)cinfo; if (PSLevel > 0) #ifdef HTMLDOC_ASCII85 ps_ascii85(jpg_file, jpg_buf, sizeof(jpg_buf)); #else ps_hex(jpg_file, jpg_buf, sizeof(jpg_buf)); #endif // HTMLDOC_ASCII85 else flate_write(jpg_file, jpg_buf, sizeof(jpg_buf)); jpg_dest.next_output_byte = jpg_buf; jpg_dest.free_in_buffer = sizeof(jpg_buf); return (TRUE); } /* * 'jpg_term()' - Write the last JPEG data to the file. */ static void jpg_term(j_compress_ptr cinfo) /* I - Compressor info */ { int nbytes; /* Number of bytes to write */ (void)cinfo; nbytes = sizeof(jpg_buf) - jpg_dest.free_in_buffer; if (PSLevel > 0) #ifdef HTMLDOC_ASCII85 ps_ascii85(jpg_file, jpg_buf, nbytes); #else ps_hex(jpg_file, jpg_buf, nbytes); #endif // HTMLDOC_ASCII85 else flate_write(jpg_file, jpg_buf, nbytes); } /* * 'jpg_setup()' - Setup the JPEG compressor for writing an image. */ static void jpg_setup(FILE *out, /* I - Output file */ image_t *img, /* I - Output image */ j_compress_ptr cinfo) /* I - Compressor info */ { int i; // Looping var jpg_file = out; cinfo->err = jpeg_std_error(&jerr); jpeg_create_compress(cinfo); cinfo->dest = &jpg_dest; jpg_dest.init_destination = jpg_init; jpg_dest.empty_output_buffer = jpg_empty; jpg_dest.term_destination = jpg_term; cinfo->image_width = img->width; cinfo->image_height = img->height; cinfo->input_components = img->depth; cinfo->in_color_space = img->depth == 1 ? JCS_GRAYSCALE : JCS_RGB; jpeg_set_defaults(cinfo); jpeg_set_quality(cinfo, OutputJPEG, TRUE); // Update things when writing to PS files... if (PSLevel) { // Adobe uses sampling == 1 for (i = 0; i < img->depth; i ++) { cinfo->comp_info[i].h_samp_factor = 1; cinfo->comp_info[i].v_samp_factor = 1; } } cinfo->write_JFIF_header = FALSE; cinfo->write_Adobe_marker = TRUE; jpeg_start_compress(cinfo, TRUE); } /* * 'compare_rgb()' - Compare two RGB colors... */ static int /* O - -1 if rgb1data.image; ncolors = 0; indices = NULL; indwidth = 0; if (!img->pixels && !img->obj) image_load(img->filename, !OutputColor, 1); // Note: Acrobat 6 tries to decrypt the colormap of indexed in-line images twice, which // is 1) not consistent with prior Acrobat releases and 2) in violation of their // PDF spec. The "img->use > 1 || !Encryption" test prevents the use of indexed // in-line images when encryption is enabled. // // We are filing a bug on this with Adobe, but if history is any indicator, we are // stuck with this workaround forever... if (PSLevel != 1 && PDFVersion >= 12 && img->obj == 0 && (img->use > 1 || !Encryption)) { if (img->depth == 1) { /* * Greyscale image... */ memset(grays, 0, sizeof(grays)); for (i = img->width * img->height, pixel = img->pixels; i > 0; i --, pixel ++) if (!grays[*pixel]) { if (ncolors >= 16) break; grays[*pixel] = 1; ncolors ++; } if (i == 0) { for (i = 0, j = 0; i < 256; i ++) if (grays[i]) { colors[j] = (((i << 8) | i) << 8) | i; grays[i] = j; j ++; } } else ncolors = 0; } else { /* * Color image... */ if (OutputJPEG && !Compression) max_colors = 16; else max_colors = 256; for (i = img->width * img->height, pixel = img->pixels, match = NULL; i > 0; i --, pixel += 3) { key = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]; if (!match || *match != key) { if (ncolors > 0) match = (unsigned *)bsearch(&key, colors, ncolors, sizeof(unsigned), (compare_func_t)compare_rgb); else match = NULL; } if (match == NULL) { if (ncolors >= max_colors) break; colors[ncolors] = key; ncolors ++; if (ncolors > 1) qsort(colors, ncolors, sizeof(unsigned), (compare_func_t)compare_rgb); } } if (i > 0) ncolors = 0; } } if (ncolors > 0) { if (PSLevel == 3 && img->mask) indbits = 8; else if (ncolors <= 2) indbits = 1; else if (ncolors <= 4) indbits = 2; else if (ncolors <= 16) indbits = 4; else indbits = 8; indwidth = (img->width * indbits + 7) / 8; indices = (uchar *)calloc(indwidth, img->height + 1); // height + 1 for PS odd-row-count bug if (img->depth == 1) { /* * Convert a grayscale image... */ switch (indbits) { case 1 : for (i = img->height, pixel = img->pixels, indptr = indices; i > 0; i --) { for (j = img->width, k = 7; j > 0; j --, k = (k + 7) & 7, pixel ++) switch (k) { case 7 : *indptr = grays[*pixel] << 7; break; default : *indptr |= grays[*pixel] << k; break; case 0 : *indptr++ |= grays[*pixel]; break; } if (k != 7) indptr ++; } break; case 2 : for (i = img->height, pixel = img->pixels, indptr = indices; i > 0; i --) { for (j = img->width, k = 0; j > 0; j --, k = (k + 1) & 3, pixel ++) switch (k) { case 0 : *indptr = grays[*pixel] << 6; break; case 1 : *indptr |= grays[*pixel] << 4; break; case 2 : *indptr |= grays[*pixel] << 2; break; case 3 : *indptr++ |= grays[*pixel]; break; } if (k) indptr ++; } break; case 4 : for (i = img->height, pixel = img->pixels, indptr = indices; i > 0; i --) { for (j = img->width, k = 0; j > 0; j --, k ^= 1, pixel ++) if (k) *indptr++ |= grays[*pixel]; else *indptr = grays[*pixel] << 4; if (k) indptr ++; } break; } } else { /* * Convert a color image... */ switch (indbits) { case 1 : for (i = img->height, pixel = img->pixels, indptr = indices, match = colors; i > 0; i --) { for (j = img->width, k = 7; j > 0; j --, k = (k + 7) & 7, pixel += 3) { key = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]; if (*match != key) match = (unsigned *)bsearch(&key, colors, ncolors, sizeof(unsigned), (compare_func_t)compare_rgb); m = match - colors; switch (k) { case 7 : *indptr = m << 7; break; default : *indptr |= m << k; break; case 0 : *indptr++ |= m; break; } } if (k != 7) indptr ++; } break; case 2 : for (i = img->height, pixel = img->pixels, indptr = indices, match = colors; i > 0; i --) { for (j = img->width, k = 0; j > 0; j --, k = (k + 1) & 3, pixel += 3) { key = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]; if (*match != key) match = (unsigned *)bsearch(&key, colors, ncolors, sizeof(unsigned), (compare_func_t)compare_rgb); m = match - colors; switch (k) { case 0 : *indptr = m << 6; break; case 1 : *indptr |= m << 4; break; case 2 : *indptr |= m << 2; break; case 3 : *indptr++ |= m; break; } } if (k) indptr ++; } break; case 4 : for (i = img->height, pixel = img->pixels, indptr = indices, match = colors; i > 0; i --) { for (j = img->width, k = 0; j > 0; j --, k ^= 1, pixel += 3) { key = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]; if (*match != key) match = (unsigned *)bsearch(&key, colors, ncolors, sizeof(unsigned), (compare_func_t)compare_rgb); m = match - colors; if (k) *indptr++ |= m; else *indptr = m << 4; } if (k) indptr ++; } break; case 8 : for (i = img->height, pixel = img->pixels, indptr = indices, match = colors; i > 0; i --) { for (j = img->width; j > 0; j --, pixel += 3, indptr ++) { key = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]; if (*match != key) match = (unsigned *)bsearch(&key, colors, ncolors, sizeof(unsigned), (compare_func_t)compare_rgb); *indptr = match - colors; } } break; } } } else indbits = 8; if (ncolors == 1) { /* * Adobe doesn't like 1 color images... */ ncolors = 2; colors[1] = 0; } /* * Now write the image... */ switch (PSLevel) { case 0 : /* PDF */ if (!write_obj) flate_printf(out, "q %.1f 0 0 %.1f %.1f %.1f cm\n", r->width, r->height, r->x, r->y); if (img->obj) { if (img->mask && PDFVersion < 13) write_imagemask(out, r); flate_printf(out, "/I%d Do Q\n", img->obj); break; } if (img->mask && write_obj && PDFVersion >= 13) { // We have a mask image, write it! pdf_start_object(out); fputs("/Type/XObject/Subtype/Image", out); fputs("/ColorSpace/DeviceGray", out); if (img->maskscale == 8) fprintf(out, "/Width %d/Height %d/BitsPerComponent 8", img->width, img->height); else fprintf(out, "/Width %d/Height %d/BitsPerComponent 1/ImageMask true", img->width * img->maskscale, img->height * img->maskscale); if (Compression) fputs("/Filter/FlateDecode", out); pdf_start_stream(out); flate_open_stream(out); if (img->maskscale == 8) flate_write(out, img->mask, img->width * img->height); else flate_write(out, img->mask, img->maskwidth * img->height * img->maskscale); flate_close_stream(out); pdf_end_object(out); } if (write_obj) { // Write an image object... img->obj = pdf_start_object(out); fputs("/Type/XObject/Subtype/Image", out); if (img->mask && PDFVersion >= 13) { if (img->maskscale == 8) fprintf(out, "/SMask %d 0 R", img->obj - 1); else fprintf(out, "/Mask %d 0 R", img->obj - 1); } if (ncolors > 0) { for (i = 0; i < ncolors; i ++) { cmap[i][0] = colors[i] >> 16; cmap[i][1] = colors[i] >> 8; cmap[i][2] = colors[i]; } if (Encryption) { // Encrypt the colormap... encrypt_init(); rc4_encrypt(&encrypt_state, cmap[0], cmap[0], ncolors * 3); } fprintf(out, "/ColorSpace[/Indexed/DeviceRGB %d<", ncolors - 1); for (i = 0; i < ncolors; i ++) fprintf(out, "%02X%02X%02X", cmap[i][0], cmap[i][1], cmap[i][2]); fputs(">]", out); } else if (img->depth == 1) fputs("/ColorSpace/DeviceGray", out); else fputs("/ColorSpace/DeviceRGB", out); #ifdef HTMLDOC_INTERPOLATION if (ncolors != 2) fputs("/Interpolate true", out); #endif // HTMLDOC_INTERPOLATION if (Compression && (ncolors || !OutputJPEG)) fputs("/Filter/FlateDecode", out); else if (OutputJPEG && ncolors == 0) { if (Compression) fputs("/Filter[/FlateDecode/DCTDecode]", out); else fputs("/Filter/DCTDecode", out); } fprintf(out, "/Width %d/Height %d/BitsPerComponent %d", img->width, img->height, indbits); pdf_start_stream(out); flate_open_stream(out); if (OutputJPEG && ncolors == 0) { jpg_setup(out, img, &cinfo); for (i = img->height, pixel = img->pixels; i > 0; i --, pixel += img->width * img->depth) jpeg_write_scanlines(&cinfo, &pixel, 1); jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); } else { if (ncolors > 0) flate_write(out, indices, indwidth * img->height); else flate_write(out, img->pixels, img->width * img->height * img->depth); } flate_close_stream(out); pdf_end_object(out); } else { // Put the image in-line... flate_puts("BI", out); if (ncolors > 0) { flate_printf(out, "/CS[/I/RGB %d<", ncolors - 1); for (i = 0; i < ncolors; i ++) flate_printf(out, "%02X%02X%02X", colors[i] >> 16, (colors[i] >> 8) & 255, colors[i] & 255); flate_puts(">]", out); } else if (img->depth == 1) flate_puts("/CS/G", out); else flate_puts("/CS/RGB", out); if (ncolors != 2) flate_puts("/I true", out); flate_printf(out, "/W %d/H %d/BPC %d", img->width, img->height, indbits); if (ncolors > 0) { flate_puts(" ID\n", out); flate_write(out, indices, indwidth * img->height, 1); } else if (OutputJPEG) { flate_puts("/F/DCT ID\n", out); jpg_setup(out, img, &cinfo); for (i = img->height, pixel = img->pixels; i > 0; i --, pixel += img->width * img->depth) jpeg_write_scanlines(&cinfo, &pixel, 1); jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); } else { flate_puts(" ID\n", out); flate_write(out, img->pixels, img->width * img->height * img->depth, 1); } flate_write(out, (uchar *)"\nEI\nQ\n", 6, 1); } break; case 1 : /* PostScript, Level 1 */ fputs("GS", out); fprintf(out, "[%.1f 0 0 %.1f %.1f %.1f]CM", r->width, r->height, r->x, r->y); if (img->mask) write_imagemask(out, r); fprintf(out, "/picture %d string def\n", img->width * img->depth); if (img->depth == 1) fprintf(out, "%d %d 8 [%d 0 0 %d 0 %d] {currentfile picture readhexstring pop} image\n", img->width, img->height, img->width, -img->height, img->height); else fprintf(out, "%d %d 8 [%d 0 0 %d 0 %d] {currentfile picture readhexstring pop} false 3 colorimage\n", img->width, img->height, img->width, -img->height, img->height); ps_hex(out, img->pixels, img->width * img->height * img->depth); fputs("GR\n", out); break; case 3 : /* PostScript, Level 3 */ // Fallthrough to Level 2 output if compression is disabled and // we aren't doing transparency... if ((Compression && (!OutputJPEG || ncolors > 0)) || (img->mask && img->maskscale == 8)) { fputs("GS", out); fprintf(out, "[%.1f 0 0 %.1f %.1f %.1f]CM", r->width, r->height, r->x, r->y); if (img->mask && img->maskscale != 8) write_imagemask(out, r); if (ncolors > 0) { if (ncolors <= 2) ncolors = 2; /* Adobe doesn't like 1 color images... */ fprintf(out, "[/Indexed/DeviceRGB %d\n<", ncolors - 1); for (i = 0; i < ncolors; i ++) { fprintf(out, "%02X%02X%02X", colors[i] >> 16, (colors[i] >> 8) & 255, colors[i] & 255); if ((i % 13) == 12) putc('\n', out); } fputs(">]setcolorspace\n", out); if (img->mask && img->maskscale == 8) fprintf(out, "<<" "/ImageType 3" "/InterleaveType 1" "/MaskDict<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent 8" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[0 1]" ">>\n" "/DataDict", img->width, img->height, img->width, -img->height, img->height); fprintf(out, "<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent %d" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[0 %d]", img->width, img->height, indbits, img->width, -img->height, img->height, (1 << indbits) - 1); #ifdef HTMLDOC_INTERPOLATION if (ncolors != 2) fputs("/Interpolate true", out); #endif // HTMLDOC_INTERPOLATION #ifdef HTMLDOC_ASCII85 fputs("/DataSource currentfile/ASCII85Decode filter", out); #else fputs("/DataSource currentfile/ASCIIHexDecode filter", out); #endif // HTMLDOC_ASCII85 if (Compression) fputs("/FlateDecode filter", out); fputs(">>\n", out); if (img->mask && img->maskscale == 8) fputs(">>\n", out); fputs("image\n", out); flate_open_stream(out); if (img->mask && img->maskscale == 8) { data = (uchar *)malloc(img->width * 2); for (i = 0, maskptr = img->mask, indptr = indices; i < img->height; i ++) { for (j = img->width, dataptr = data; j > 0; j --) { *dataptr++ = *maskptr++; *dataptr++ = *indptr++; } flate_write(out, data, img->width * 2); } free(data); } else flate_write(out, indices, indwidth * img->height); flate_close_stream(out); } else { if (img->depth == 1) fputs("/DeviceGray setcolorspace", out); else fputs("/DeviceRGB setcolorspace", out); if (img->mask && img->maskscale == 8) fprintf(out, "<<" "/ImageType 3" "/InterleaveType 1" "/MaskDict<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent 8" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[0 1]" ">>\n" "/DataDict", img->width, img->height, img->width, -img->height, img->height); fprintf(out, "<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent 8" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[%s]", img->width, img->height, img->width, -img->height, img->height, img->depth == 1 ? "0 1" : "0 1 0 1 0 1"); #ifdef HTMLDOC_INTERPOLATION fputs("/Interpolate true", out); #endif // HTMLDOC_INTERPOLATION #ifdef HTMLDOC_ASCII85 fputs("/DataSource currentfile/ASCII85Decode filter", out); #else fputs("/DataSource currentfile/ASCIIHexDecode filter", out); #endif // HTMLDOC_ASCII85 if (Compression) fputs("/FlateDecode filter", out); fputs(">>\n", out); if (img->mask && img->maskscale == 8) fputs(">>\n", out); fputs("image\n", out); flate_open_stream(out); if (img->mask && img->maskscale == 8) { data = (uchar *)malloc(img->width * (img->depth + 1)); for (i = 0, maskptr = img->mask, pixel = img->pixels; i < img->height; i ++) { if (img->depth == 1) { for (j = img->width, dataptr = data; j > 0; j --) { *dataptr++ = *maskptr++; *dataptr++ = *pixel++; } } else { for (j = img->width, dataptr = data; j > 0; j --) { *dataptr++ = *maskptr++; *dataptr++ = *pixel++; *dataptr++ = *pixel++; *dataptr++ = *pixel++; } } flate_write(out, data, img->width * (img->depth + 1)); } free(data); } else flate_write(out, img->pixels, img->width * img->height * img->depth); flate_close_stream(out); } fputs("GR\n", out); break; } case 2 : /* PostScript, Level 2 */ fputs("GS", out); fprintf(out, "[%.1f 0 0 %.1f %.1f %.1f]CM", r->width, r->height, r->x, r->y); if (img->mask) write_imagemask(out, r); if (ncolors > 0) { fprintf(out, "[/Indexed/DeviceRGB %d\n<", ncolors - 1); for (i = 0; i < ncolors; i ++) { fprintf(out, "%02X%02X%02X", colors[i] >> 16, (colors[i] >> 8) & 255, colors[i] & 255); if ((i % 13) == 12) putc('\n', out); } fputs(">]setcolorspace\n", out); fprintf(out, "<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent %d" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[0 %d]", img->width, img->height, indbits, img->width, -img->height, img->height, (1 << indbits) - 1); #ifdef HTMLDOC_INTERPOLATION if (ncolors != 2) fputs("/Interpolate true", out); #endif // HTMLDOC_INTERPOLATION #ifdef HTMLDOC_ASCII85 fputs("/DataSource currentfile/ASCII85Decode filter>>image\n", out); ps_ascii85(out, indices, indwidth * img->height, 1); #else fputs("/DataSource currentfile/ASCIIHexDecode filter>>image\n", out); ps_hex(out, indices, indwidth * img->height); // End of data marker... fputs(">\n", out); #endif /* HTMLDOC_ASCII85 */ } else if (OutputJPEG) { if (img->depth == 1) fputs("/DeviceGray setcolorspace\n", out); else fputs("/DeviceRGB setcolorspace\n", out); fprintf(out, "<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent 8" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[%s]", img->width, img->height, img->width, -img->height, img->height, img->depth == 1 ? "0 1" : "0 1 0 1 0 1"); #ifdef HTMLDOC_INTERPOLATION fputs("/Interpolate true", out); #endif // HTMLDOC_INTERPOLATION #ifdef HTMLDOC_ASCII85 fputs("/DataSource currentfile/ASCII85Decode filter/DCTDecode filter" ">>image\n", out); #else fputs("/DataSource currentfile/ASCIIHexDecode filter/DCTDecode filter" ">>image\n", out); #endif // HTMLDOC_ASCII85 jpg_setup(out, img, &cinfo); for (i = img->height, pixel = img->pixels; i > 0; i --, pixel += img->width * img->depth) jpeg_write_scanlines(&cinfo, &pixel, 1); jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); #ifdef HTMLDOC_ASCII85 ps_ascii85(out, (uchar *)"", 0, 1); #else // End of data marker... fputs(">\n", out); #endif // HTMLDOC_ASCII85 } else { if (img->depth == 1) fputs("/DeviceGray setcolorspace\n", out); else fputs("/DeviceRGB setcolorspace\n", out); fprintf(out, "<<" "/ImageType 1" "/Width %d" "/Height %d" "/BitsPerComponent 8" "/ImageMatrix[%d 0 0 %d 0 %d]" "/Decode[%s]", img->width, img->height, img->width, -img->height, img->height, img->depth == 1 ? "0 1" : "0 1 0 1 0 1"); #ifdef HTMLDOC_INTERPOLATION fputs("/Interpolate true", out); #endif // HTMLDOC_INTERPOLATION #ifdef HTMLDOC_ASCII85 fputs("/DataSource currentfile/ASCII85Decode filter" ">>image\n", out); ps_ascii85(out, img->pixels, img->width * img->height * img->depth, 1); #else fputs("/DataSource currentfile/ASCIIHexDecode filter" ">>image\n", out); ps_hex(out, img->pixels, img->width * img->depth * img->height); // End of data marker... fputs(">\n", out); #endif // HTMLDOC_ASCII85 } fputs("GR\n", out); break; } if (ncolors > 0) free(indices); image_unload(img); } /* * 'write_imagemask()' - Write an imagemask to the output file... */ static void write_imagemask(FILE *out, /* I - Output file */ render_t *r) /* I - Image to write */ { image_t *img; /* Current image */ int x, y; /* Position in mask image */ int startx, count; /* Start and count */ uchar *ptr, /* Pointer into mask image */ byte, /* Current byte */ bit; /* Current bit */ float scalex, scaley; /* 1/(w-1) and 1/(h-1) scaling factors */ int width, height; /* Scaled width and height */ img = r->data.image; width = img->width * img->maskscale; height = img->height * img->maskscale; scalex = 1.0f / width; scaley = 1.0f / height; switch (PSLevel) { case 0 : // PDF break; default : // PostScript fputs("\nnewpath\n", out); break; } for (y = 0; y < height; y ++) { for (x = 0, ptr = img->mask + (height - y - 1) * img->maskwidth, bit = 128, byte = *ptr++, startx = 0, count = 0; x < width; x ++) { if (!(bit & byte)) { if (!count) startx = x; count ++; } else if (count) { switch (PSLevel) { case 0 : // PDF flate_printf(out, "%.6f %.6f %.6f %.6f re\n", (float)startx * scalex, (float)y * scaley, (float)count * scalex, 1.0f * scaley); break; default : // PostScript fprintf(out, "%.6f %.6f %.6f %.6f re\n", (float)startx * scalex, (float)y * scaley, (float)count * scalex, 1.0f * scaley); break; } count = 0; } if (bit > 1) bit >>= 1; else { bit = 128; byte = *ptr++; } } if (count) { switch (PSLevel) { case 0 : // PDF flate_printf(out, "%.6f %.6f %.6f %.6f re\n", (float)startx * scalex, (float)y * scaley, (float)count * scalex, 1.0f * scaley); break; default : // PostScript fprintf(out, "%.6f %.6f %.6f %.6f re\n", (float)startx * scalex, (float)y * scaley, (float)count * scalex, 1.0f * scaley); break; } } } switch (PSLevel) { case 0 : // PDF flate_puts("W n\n", out); break; default : // PostScript fputs("clip\n", out); break; } } /* * 'write_prolog()' - Write the file prolog... */ static void write_prolog(FILE *out, /* I - Output file */ int page_count, /* I - Number of pages (0 if not known) */ uchar *author, /* I - Author of document */ uchar *creator, /* I - Application that generated the HTML file */ uchar *copyright, /* I - Copyright (if any) on the document */ uchar *keywords, /* I - Search keywords */ uchar *subject) /* I - Subject */ { FILE *prolog; /* PostScript prolog file */ int i, j, /* Looping vars */ encoding_object; /* Font encoding object */ int page; /* Current page */ render_t *r; /* Current render data */ int fonts_used[TYPE_MAX][STYLE_MAX]; /* Whether or not a font is used */ int font_desc[TYPE_MAX][STYLE_MAX]; /* Font descriptor objects */ char temp[1024]; /* Temporary string */ md5_state_t md5; /* MD5 state */ md5_byte_t digest[16]; /* MD5 digest value */ rc4_context_t rc4; /* RC4 context */ uchar owner_pad[32], /* Padded owner password */ owner_key[32], /* Owner key */ user_pad[32], /* Padded user password */ user_key[32]; /* User key */ uchar perm_bytes[4]; /* Permission bytes */ unsigned perm_value; /* Permission value, unsigned */ static unsigned char pad[32] = { /* Padding for passwords */ 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a }; /* * See what fonts are used... */ memset(fonts_used, 0, sizeof(fonts_used)); fonts_used[HeadFootType][HeadFootStyle] = 1; for (page = 0; page < num_pages; page ++) for (r = pages[page].start; r != NULL; r = r->next) if (r->type == RENDER_TEXT) fonts_used[r->data.text.typeface][r->data.text.style] = 1; #ifdef DEBUG puts("The following fonts were used:"); for (i = 0; i < TYPE_MAX; i ++) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j]) printf(" %s\n", _htmlFonts[i][j]); #endif // DEBUG /* * Generate the heading... */ if (PSLevel > 0) { /* * Write PostScript prolog stuff... */ if (XRXComments) { int start, end; // Start and end of document pages... int count; // Number of exception pages in this range... // The following comments are Xerox job ticket information that // is used on the high-end Laser Printing Systems rather than // embedded commands... fputs("%XRXbegin: 001.0300\n", out); fputs("%XRXPDLformat: PS-Adobe\n", out); if (doc_title) fprintf(out, "%%XRXtitle: %s\n", doc_title); if (OutputFiles) { // Output a single chapter... if (chapter < 0) { start = 0; end = chapter_outstarts[1] - 1; } else { start = chapter_outstarts[chapter]; end = chapter_outends[chapter]; } } else { start = 0; end = 0; } if (pages[outpages[start].pages[0]].duplex) { if (pages[outpages[start].pages[0]].landscape) fputs("%XRXrequirements: duplex(tumble)\n", out); else fputs("%XRXrequirements: duplex\n", out); } else fputs("%XRXrequirements: simplex\n", out); fputs("%XRXdisposition: PRINT\n", out); fputs("%XRXsignature: False\n", out); fprintf(out, "%%XRXpaperType-size: %.0f %.0f\n", pages[outpages[start].pages[0]].width * 25.4f / 72.0f, pages[outpages[start].pages[0]].length * 25.4f / 72.0f); if (pages[outpages[start].pages[0]].media_type[0]) fprintf(out, "%%XRXpaperType-preFinish: %s 0 0\n", pages[start].media_type); if (pages[outpages[start].pages[0]].media_color[0]) fprintf(out, "%%XRXdocumentPaperColors: %c%s\n", tolower(pages[start].media_color[0]), pages[start].media_color + 1); if (OutputFiles) { // Handle document settings per-chapter... for (i = start + 1; i < end; i += count) { if (pages[outpages[i].pages[0]].width != pages[0].width || pages[outpages[i].pages[0]].length != pages[0].length || strcmp(pages[outpages[i].pages[0]].media_type, pages[0].media_type) != 0 || strcmp(pages[outpages[i].pages[0]].media_color, pages[0].media_color) != 0 || pages[outpages[i].pages[0]].duplex != pages[0].duplex) { for (count = 1; (i + count) <= end; count ++) if (pages[outpages[i].pages[0]].width != pages[outpages[i + count].pages[0]].width || pages[outpages[i].pages[0]].length != pages[outpages[i + count].pages[0]].length || strcmp(pages[outpages[i].pages[0]].media_type, pages[outpages[i + count].pages[0]].media_type) != 0 || strcmp(pages[outpages[i].pages[0]].media_color, pages[outpages[i + count].pages[0]].media_color) != 0 || pages[outpages[i].pages[0]].duplex != pages[outpages[i + count].pages[0]].duplex) break; fprintf(out, "%%XRXpageExceptions: %d %d %.0f %.0f %c%s opaque %s 0 0\n", i + 1, i + count, pages[outpages[i].pages[0]].width * 25.4f / 72.0f, pages[outpages[i].pages[0]].length * 25.4f / 72.0f, tolower(pages[outpages[i].pages[0]].media_color[0]), pages[outpages[i].pages[0]].media_color + 1, pages[outpages[i].pages[0]].media_type[0] ? pages[outpages[i].pages[0]].media_type : "Plain"); if (pages[outpages[i].pages[0]].duplex && pages[outpages[i].pages[0]].landscape) fprintf(out, "%%XRXpageExceptions-plex: %d %d duplex(tumble)\n", i + 1, i + count); else if (pages[outpages[i].pages[0]].duplex) fprintf(out, "%%XRXpageExceptions-plex: %d %d duplex\n", i + 1, i + count); else fprintf(out, "%%XRXpageExceptions-plex: %d %d simplex\n", i + 1, i + count); } else count = 1; } } else { // All pages are in a single file... for (j = (TocLevels == 0); j <= TocDocCount; j ++) { start = chapter_outstarts[j]; end = chapter_outends[j]; for (i = start + 1; i < end; i += count) { if (pages[outpages[i].pages[0]].width != pages[0].width || pages[outpages[i].pages[0]].length != pages[0].length || strcmp(pages[outpages[i].pages[0]].media_type, pages[0].media_type) != 0 || strcmp(pages[outpages[i].pages[0]].media_color, pages[0].media_color) != 0 || pages[outpages[i].pages[0]].duplex != pages[0].duplex) { for (count = 1; (i + count) < end; count ++) if (pages[outpages[i].pages[0]].width != pages[outpages[i + count].pages[0]].width || pages[outpages[i].pages[0]].length != pages[outpages[i + count].pages[0]].length || strcmp(pages[outpages[i].pages[0]].media_type, pages[outpages[i + count].pages[0]].media_type) != 0 || strcmp(pages[outpages[i].pages[0]].media_color, pages[outpages[i + count].pages[0]].media_color) != 0 || pages[outpages[i].pages[0]].duplex != pages[outpages[i + count].pages[0]].duplex) break; fprintf(out, "%%XRXpageExceptions: %d %d %.0f %.0f %c%s opaque %s 0 0\n", i + 1, i + count, pages[outpages[i].pages[0]].width * 25.4f / 72.0f, pages[outpages[i].pages[0]].length * 25.4f / 72.0f, tolower(pages[outpages[i].pages[0]].media_color[0]), pages[outpages[i].pages[0]].media_color + 1, pages[outpages[i].pages[0]].media_type[0] ? pages[outpages[i].pages[0]].media_type : "Plain"); if (pages[outpages[i].pages[0]].duplex && pages[outpages[i].pages[0]].landscape) fprintf(out, "%%XRXpageExceptions-plex: %d %d duplex(tumble)\n", i + 1, i + count); else if (pages[outpages[i].pages[0]].duplex) fprintf(out, "%%XRXpageExceptions-plex: %d %d duplex\n", i + 1, i + count); else fprintf(out, "%%XRXpageExceptions-plex: %d %d simplex\n", i + 1, i + count); } else count = 1; } } } fputs("%XRXend\n", out); } fputs("%!PS-Adobe-3.0\n", out); if (Landscape) fprintf(out, "%%%%BoundingBox: 0 0 %d %d\n", PageLength, PageWidth); else fprintf(out, "%%%%BoundingBox: 0 0 %d %d\n", PageWidth, PageLength); fprintf(out,"%%%%LanguageLevel: %d\n", PSLevel); fputs("%%Creator: htmldoc " SVERSION " Copyright 1997-2006 Easy Software Products, All Rights Reserved.\n", out); fprintf(out, "%%%%CreationDate: D:%04d%02d%02d%02d%02d%02d%+03d%02d\n", doc_date->tm_year + 1900, doc_date->tm_mon + 1, doc_date->tm_mday, doc_date->tm_hour, doc_date->tm_min, doc_date->tm_sec, (int)(-timezone / 3600), (int)(((timezone < 0 ? -timezone : timezone) / 60) % 60)); if (doc_title != NULL) fprintf(out, "%%%%Title: %s\n", doc_title); if (author != NULL) fprintf(out, "%%%%Author: %s\n", author); if (creator != NULL) fprintf(out, "%%%%Generator: %s\n", creator); if (copyright != NULL) fprintf(out, "%%%%Copyright: %s\n", copyright); if (keywords != NULL) fprintf(out, "%%%%Keywords: %s\n", keywords); if (subject != NULL) fprintf(out, "%%%%Subject: %s\n", keywords); if (page_count > 0) fprintf(out, "%%%%Pages: %d\n", page_count); else fputs("%%Pages: (atend)\n", out); if (!EmbedFonts) { fputs("%%DocumentNeededResources:\n", out); for (i = 0; i < TYPE_MAX; i ++) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j] && _htmlStandardFonts[i]) fprintf(out, "%%%%+ font %s\n", _htmlFonts[i][j]); } fputs("%%DocumentProvidedResources:\n", out); for (i = 0; i < TYPE_MAX; i ++) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j] && (EmbedFonts || !_htmlStandardFonts[i])) fprintf(out, "%%%%+ font %s\n", _htmlFonts[i][j]); fputs("%%DocumentData: Clean7bit\n", out); fputs("%%EndComments\n", out); fputs("%%BeginProlog\n", out); /* * Embed fonts? */ for (i = 0; i < TYPE_MAX; i ++) { if (EmbedFonts || !_htmlStandardFonts[i]) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j]) write_type1(out, (typeface_t)i, (style_t)j); } /* * Procedures used throughout the document... */ fputs("%%BeginResource: procset htmldoc-page 1.8 25\n", out); fputs("/BD{bind def}bind def", out); fputs("/B{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto\n" "closepath stroke}BD", out); fputs("/C{setrgbcolor}BD\n", out); fputs("/CM{concat}BD", out); fputs("/DF{findfont dup length dict begin{1 index/FID ne{def}{pop pop}\n" "ifelse}forall/Encoding fontencoding def currentdict end definefont pop}BD\n", out); fputs("/F{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath fill}BD\n", out); fputs("/FS{/hdFontSize exch def}BD", out); fputs("/G{setgray}BD\n", out); fputs("/GS{gsave}BD", out); fputs("/GR{grestore}BD", out); fputs("/J{0 exch ashow}BD\n", out); fputs("/L{0 rlineto stroke}BD", out); fputs("/M{moveto}BD", out); fputs("/re{4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath}BD\n", out); fputs("/RO{rotate}BD", out); fputs("/S{show}BD", out); fputs("/SC{dup scale}BD\n", out); fputs("/SF{findfont hdFontSize scalefont setfont}BD", out); fputs("/SP{showpage}BD", out); fputs("/T{translate}BD\n", out); fputs("%%EndResource\n", out); /* * Output the font encoding for the current character set... For now we * just support 8-bit fonts since true Unicode support needs a very large * number of extra fonts that aren't normally available on a PS printer. */ fputs("/fontencoding[\n", out); for (i = 0, j = 0; i < 256; i ++) { if (_htmlGlyphs[i]) j += strlen(_htmlGlyphs[i]) + 1; else j += 8; if (j > 80) { if (_htmlGlyphs[i]) j = strlen(_htmlGlyphs[i]) + 1; else j = 8; putc('\n', out); } putc('/', out); if (_htmlGlyphs[i]) fputs(_htmlGlyphs[i], out); else fputs(".notdef", out); } fputs("]def\n", out); /* * Fonts... */ for (i = 0; i < TYPE_MAX; i ++) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j]) { if (i < TYPE_SYMBOL) fprintf(out, "/F%x/%s DF\n", i * 4 + j, _htmlFonts[i][j]); else fprintf(out, "/F%x/%s findfont definefont pop\n", i * 4 + j, _htmlFonts[i][j]); } if (PSCommands) { snprintf(temp, sizeof(temp), "%s/data/prolog.ps", _htmlData); if ((prolog = fopen(temp, "rb")) != NULL) { while (fgets(temp, sizeof(temp), prolog) != NULL) fputs(temp, out); fclose(prolog); } else { progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open data file \"%s\" - %s", temp, strerror(errno)); fputs("%%BeginResource: procset htmldoc-device 1.8 22\n", out); fputs("languagelevel 1 eq{/setpagedevice{pop}BD}if\n", out); fputs("/SetDuplexMode{<>setpagedevice " "pop pop}BD\n", out); fputs("/SetMediaColor{pop}BD\n", out); fputs("/SetMediaType{pop}BD\n", out); fputs("/SetMediaPosition{pop}BD\n", out); fputs("/SetPageSize{2 array astore<>setpagedevice pop}BD\n", out); fputs("%%EndResource\n", out); } } if (background_image != NULL) ps_write_background(out); fputs("%%EndProlog\n", out); } else { /* * Write PDF prolog stuff... */ fprintf(out, "%%PDF-%.1f\n", 0.1 * PDFVersion); fputs("%\342\343\317\323\n", out); num_objects = 0; /* * Compute the file ID... */ md5_init(&md5); md5_append(&md5, (md5_byte_t *)OutputPath, sizeof(OutputPath)); md5_append(&md5, (md5_byte_t *)&doc_time, sizeof(doc_time)); md5_finish(&md5, file_id); /* * Setup encryption stuff as necessary... */ if (Encryption) { /* * Copy and pad the user password... */ strlcpy((char *)user_pad, UserPassword, sizeof(user_pad)); if ((i = strlen(UserPassword)) < 32) memcpy(user_pad + i, pad, 32 - i); if (OwnerPassword[0]) { /* * Copy and pad the owner password... */ strlcpy((char *)owner_pad, OwnerPassword, sizeof(owner_pad)); if ((i = strlen(OwnerPassword)) < 32) memcpy(owner_pad + i, pad, 32 - i); } else { /* * Generate a pseudo-random owner password... */ srand(time(NULL)); for (i = 0; i < 32; i ++) owner_pad[i] = rand(); } /* * What is the key length? * * Acrobat 4.0 and earlier (PDF 1.3 and earlier) allow a maximum of * 40-bits. Acrobat 5.0 and newer support 128-bits. */ if (PDFVersion > 13) encrypt_len = 16; // 128 bits else encrypt_len = 5; // 40 bits /* * Compute the owner key... */ md5_init(&md5); md5_append(&md5, owner_pad, 32); md5_finish(&md5, digest); if (encrypt_len > 5) { // MD5 the result 50 more times... for (i = 0; i < 50; i ++) { md5_init(&md5); md5_append(&md5, digest, 16); md5_finish(&md5, digest); } // Copy the padded user password... memcpy(owner_key, user_pad, 32); // Encrypt the result 20 times... for (i = 0; i < 20; i ++) { // XOR each byte in the key with the loop counter... for (j = 0; j < encrypt_len; j ++) encrypt_key[j] = digest[j] ^ i; rc4_init(&rc4, encrypt_key, encrypt_len); rc4_encrypt(&rc4, owner_key, owner_key, 32); } } else { rc4_init(&rc4, digest, encrypt_len); rc4_encrypt(&rc4, user_pad, owner_key, 32); } /* * Figure out the permissions word; the new N-bit security * handler adds several new permission bits, which we must * simulate... */ perm_value = (unsigned)Permissions; if (encrypt_len > 5) { // N-bit encryption... if (!(perm_value & PDF_PERM_COPY)) perm_value &= ~0x00240000; // Mask additional copy perms... } /* * Compute the encryption key... */ md5_init(&md5); md5_append(&md5, user_pad, 32); md5_append(&md5, owner_key, 32); perm_bytes[0] = perm_value; perm_bytes[1] = perm_value >> 8; perm_bytes[2] = perm_value >> 16; perm_bytes[3] = perm_value >> 24; md5_append(&md5, perm_bytes, 4); md5_append(&md5, file_id, 16); md5_finish(&md5, digest); if (encrypt_len > 5) { // MD5 the result 50 times.. for (i = 0; i < 50; i ++) { md5_init(&md5); md5_append(&md5, digest, 16); md5_finish(&md5, digest); } } memcpy(encrypt_key, digest, encrypt_len); /* * Compute the user key... */ if (encrypt_len > 5) { md5_init(&md5); md5_append(&md5, pad, 32); md5_append(&md5, file_id, 16); md5_finish(&md5, user_key); memset(user_key + 16, 0, 16); // Encrypt the result 20 times... for (i = 0; i < 20; i ++) { // XOR each byte in the key with the loop counter... for (j = 0; j < encrypt_len; j ++) digest[j] = encrypt_key[j] ^ i; rc4_init(&rc4, digest, encrypt_len); rc4_encrypt(&rc4, user_key, user_key, 16); } } else { rc4_init(&rc4, encrypt_key, encrypt_len); rc4_encrypt(&rc4, pad, user_key, 32); } /* * Write the encryption dictionary... */ encrypt_object = pdf_start_object(out); fputs("/Filter/Standard/O<", out); for (i = 0; i < 32; i ++) fprintf(out, "%02x", owner_key[i]); fputs(">/U<", out); for (i = 0; i < 32; i ++) fprintf(out, "%02x", user_key[i]); fputs(">", out); if (encrypt_len > 5) { // N-bit encryption... fprintf(out, "/P %d/V 2/R 3/Length %d", (int)perm_value, encrypt_len * 8); } else fprintf(out, "/P %d/V 1/R 2", (int)perm_value); pdf_end_object(out); } else encrypt_object = 0; /* * Write info object... */ info_object = pdf_start_object(out); fputs("/Producer", out); write_string(out, (uchar *)"htmldoc " SVERSION " Copyright 1997-2006 Easy " "Software Products, All Rights Reserved.", 0); fputs("/CreationDate", out); sprintf(temp, "D:%04d%02d%02d%02d%02d%02d%+03d%02d", doc_date->tm_year + 1900, doc_date->tm_mon + 1, doc_date->tm_mday, doc_date->tm_hour, doc_date->tm_min, doc_date->tm_sec, (int)(-timezone / 3600), (int)(((timezone < 0 ? -timezone : timezone) / 60) % 60)); write_string(out, (uchar *)temp, 0); if (doc_title != NULL) { fputs("/Title", out); write_utf16(out, doc_title); } if (author != NULL || copyright != NULL) { if (author && copyright) snprintf(temp, sizeof(temp), "%s, %s", author, copyright); else if (author) strlcpy(temp, (const char *)author, sizeof(temp)); else strlcpy(temp, (const char *)copyright, sizeof(temp)); fputs("/Author", out); write_utf16(out, (uchar *)temp); } if (creator != NULL) { fputs("/Creator", out); write_utf16(out, creator); } if (keywords != NULL) { fputs("/Keywords", out); write_utf16(out, keywords); } if (subject != NULL) { fputs("/Subject", out); write_utf16(out, subject); } pdf_end_object(out); /* * Write the font encoding for the selected character set. Note that * we *should* be able to use the WinAnsiEncoding value for ISO-8859-1 * to make smaller files, however Acrobat Exchange does not like it * despite the fact that it is defined in the PDF specification... */ encoding_object = pdf_start_object(out); fputs("/Type/Encoding", out); fputs("/Differences[", out); for (i = 0, j = -1; i < 256; i ++) if (_htmlGlyphs[i]) { /* * Output a character index if we had blank ones... */ if (j != (i - 1)) fprintf(out, " %d", i); fprintf(out, "/%s", _htmlGlyphs[i]); j = i; } fputs("]", out); pdf_end_object(out); memset(font_desc, 0, sizeof(font_desc)); /* * Build font descriptors for the EmbedFonts fonts... */ for (i = 0; i < TYPE_MAX; i ++) if (EmbedFonts || !_htmlStandardFonts[i]) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j]) font_desc[i][j] = write_type1(out, (typeface_t )i, (style_t)j); for (i = 0; i < TYPE_MAX; i ++) for (j = 0; j < STYLE_MAX; j ++) if (fonts_used[i][j]) { font_objects[i * STYLE_MAX + j] = pdf_start_object(out); fputs("/Type/Font", out); fputs("/Subtype/Type1", out); fprintf(out, "/BaseFont/%s", _htmlFonts[i][j]); if (font_desc[i][j]) { // Embed Type1 font... fputs("/FirstChar 0", out); fputs("/LastChar 255", out); fprintf(out, "/Widths %d 0 R", font_desc[i][j] + 1); fprintf(out, "/FontDescriptor %d 0 R", font_desc[i][j]); } if (i < TYPE_SYMBOL) /* Use native encoding for symbols */ fprintf(out, "/Encoding %d 0 R", encoding_object); pdf_end_object(out); } } } /* * 'write_string()' - Write a text entity. */ static void write_string(FILE *out, /* I - Output file */ uchar *s, /* I - String */ int compress) /* I - Compress output? */ { int i; /* Looping var */ if (Encryption && !compress && PSLevel == 0) { int len, // Length of string bytes; // Current bytes encrypted uchar news[1024]; // New string /* * Write an encrypted string... */ putc('<', out); encrypt_init(); for (len = strlen((char *)s); len > 0; len -= bytes, s += bytes) { if (len > (int)sizeof(news)) bytes = (int)sizeof(news); else bytes = len; rc4_encrypt(&encrypt_state, s, news, bytes); for (i = 0; i < bytes; i ++) fprintf(out, "%02x", news[i]); } putc('>', out); } else { if (compress) flate_write(out, (uchar *)"(", 1); else putc('(', out); while (*s != '\0') { if (*s == 160) /*   */ { if (compress) flate_write(out, (uchar *)" ", 1); else putc(' ', out); } else if (*s < 32 || *s > 126) { if (compress) flate_printf(out, "\\%o", *s); else fprintf(out, "\\%o", *s); } else if (compress) { if (*s == '(' || *s == ')' || *s == '\\') flate_write(out, (uchar *)"\\", 1); flate_write(out, s, 1); } else { if (*s == '(' || *s == ')' || *s == '\\') putc('\\', out); putc(*s, out); } s ++; } if (compress) flate_write(out, (uchar *)")", 1); else putc(')', out); } } /* * 'write_text()' - Write a text entity. */ static void write_text(FILE *out, /* I - Output file */ render_t *r) /* I - Text entity */ { uchar *ptr; /* Pointer into text */ // Quick optimization - don't output spaces... for (ptr = r->data.text.buffer; *ptr; ptr ++) if (!isspace(*ptr) && *ptr != 0xa0) break; if (!*ptr) return; // Not just whitespace - send it out... set_color(out, r->data.text.rgb); set_font(out, r->data.text.typeface, r->data.text.style, r->data.text.size); set_pos(out, r->x, r->y); if (PSLevel > 0) { if (r->data.text.spacing > 0.0f) fprintf(out, " %.3f", r->data.text.spacing); } else if (r->data.text.spacing != render_spacing) flate_printf(out, " %.3f Tc", render_spacing = r->data.text.spacing); write_string(out, r->data.text.buffer, PSLevel == 0); if (PSLevel > 0) { if (r->data.text.spacing > 0.0f) fputs("J\n", out); else fputs("S\n", out); } else flate_puts("Tj\n", out); render_x += r->width; } /* * 'write_trailer()' - Write the file trailer. */ static void write_trailer(FILE *out, /* I - Output file */ int num_file_pages) /* I - Number of pages in file */ { int i, j, k, /* Looping vars */ type, /* Type of number */ offset, /* Offset to xref table in PDF file */ start; /* Start page number */ page_t *page; /* Start page of chapter */ char prefix[64], /* Prefix string */ *prefptr; /* Pointer into prefix string */ static const char *modes[] = /* Page modes */ { "UseNone", "UseOutlines", "FullScreen" }; static const char *layouts[] = /* Page layouts */ { "SinglePage", "OneColumn", "TwoColumnLeft", "TwoColumnRight" }; if (PSLevel > 0) { /* * PostScript... */ fputs("%%Trailer\n", out); if (num_file_pages > 0) fprintf(out, "%%%%Pages: %d\n", num_file_pages); fputs("%%EOF\n", out); } else { /* * PDF... */ root_object = pdf_start_object(out); fputs("/Type/Catalog", out); fprintf(out, "/Pages %d 0 R", pages_object); if (PDFVersion >= 12) { if (names_object) fprintf(out, "/Names %d 0 R", names_object); fprintf(out, "/PageLayout/%s", layouts[PDFPageLayout]); } if (outline_object > 0) fprintf(out, "/Outlines %d 0 R", outline_object); switch (PDFFirstPage) { case PDF_PAGE_1 : if (TitlePage) { fprintf(out, "/OpenAction[%d 0 R/XYZ null null 0]", pages_object + 1); break; } break; case PDF_TOC : if (TocLevels > 0) { fprintf(out, "/OpenAction[%d 0 R/XYZ null null 0]", pages_object + 2 * chapter_outstarts[0] + 1); break; } break; case PDF_CHAPTER_1 : fprintf(out, "/OpenAction[%d 0 R/XYZ null null 0]", pages_object + 2 * chapter_outstarts[1] + 1); break; } fprintf(out, "/PageMode/%s", modes[PDFPageMode]); if (PDFVersion > 12 && NumberUp == 1) { // Output the PageLabels tree... fputs("/PageLabels<>", out); if (PageDuplex) { fputs("1<>", out); } i += PageDuplex + 1; } if (TocLevels > 0 && OutputType == OUTPUT_BOOK) { type = 'r'; for (j = 0; j < 3; j ++) if ((TocHeader[j] && strstr(TocHeader[j], "$PAGE(1)")) || (TocFooter[j] && strstr(TocFooter[j], "$PAGE(1)"))) type = 'D'; else if ((TocHeader[j] && strstr(TocHeader[j], "$PAGE(I)")) || (TocFooter[j] && strstr(TocFooter[j], "$PAGE(I)"))) type = 'R'; else if ((TocHeader[j] && strstr(TocHeader[j], "$PAGE(a)")) || (TocFooter[j] && strstr(TocFooter[j], "$PAGE(a)"))) type = 'a'; else if ((TocHeader[j] && strstr(TocHeader[j], "$PAGE(A)")) || (TocFooter[j] && strstr(TocFooter[j], "$PAGE(A)"))) type = 'A'; fprintf(out, "%d<>", i, type); i += chapter_ends[0] - chapter_starts[0] + 1; } for (j = 1; j <= TocDocCount; j ++) { page = pages + chapter_starts[j]; start = chapter_starts[j] - chapter_starts[1] + 1; type = 'D'; prefix[0] = '\0'; for (k = 0; k < 3; k ++) { if (page->header[k] && strstr((char *)page->header[k], "PAGE")) strlcpy(prefix, (char *)page->header[k], sizeof(prefix)); else if (page->footer[k] && strstr((char *)page->footer[k], "PAGE")) strlcpy(prefix, (char *)page->footer[k], sizeof(prefix)); if ((page->header[k] && strstr((char *)page->header[k], "PAGE(i)")) || (page->footer[k] && strstr((char *)page->footer[k], "PAGE(i)"))) type = 'r'; else if ((page->header[k] && strstr((char *)page->header[k], "PAGE(I)")) || (page->footer[k] && strstr((char *)page->footer[k], "PAGE(I)"))) type = 'R'; else if ((page->header[k] && strstr((char *)page->header[k], "PAGE(a)")) || (page->footer[k] && strstr((char *)page->footer[k], "PAGE(a)"))) type = 'a'; else if ((page->header[k] && strstr((char *)page->header[k], "PAGE(A)")) || (page->footer[k] && strstr((char *)page->footer[k], "PAGE(A)"))) type = 'A'; if ((page->header[k] && strstr((char *)page->header[k], "$CHAPTERPAGE")) || (page->footer[k] && strstr((char *)page->footer[k], "$CHAPTERPAGE"))) start = 1; } if ((prefptr = strstr(prefix, "$PAGE")) == NULL) prefptr = strstr(prefix, "$CHAPTERPAGE"); fprintf(out, "%d<>", out); i += chapter_ends[j] - chapter_starts[j] + 1; } fputs("]>>", out); } pdf_end_object(out); offset = ftell(out); fputs("xref\n", out); fprintf(out, "0 %d \n", num_objects + 1); fputs("0000000000 65535 f \n", out); for (i = 1; i <= num_objects; i ++) fprintf(out, "%010d 00000 n \n", objects[i]); fputs("trailer\n", out); fputs("<<", out); fprintf(out, "/Size %d", num_objects + 1); fprintf(out, "/Root %d 0 R", root_object); fprintf(out, "/Info %d 0 R", info_object); fputs("/ID[<", out); for (i = 0; i < 16; i ++) fprintf(out, "%02x", file_id[i]); fputs("><", out); for (i = 0; i < 16; i ++) fprintf(out, "%02x", file_id[i]); fputs(">]", out); if (Encryption) fprintf(out, "/Encrypt %d 0 R", encrypt_object); fputs(">>\n", out); fputs("startxref\n", out); fprintf(out, "%d\n", offset); fputs("%%EOF\n", out); } } /* * 'write_type1()' - Write an embedded Type 1 font. */ static int /* O - Object number */ write_type1(FILE *out, /* I - File to write to */ typeface_t typeface, /* I - Typeface */ style_t style) /* I - Style */ { char filename[1024]; /* PFA filename */ FILE *fp; /* PFA file */ int ch; /* Character value */ int width; /* Width value */ char glyph[64], /* Glyph name */ line[1024], /* Line from AFM file */ *lineptr, /* Pointer into line */ *dataptr; /* Pointer for data */ int ascent, /* Ascent above baseline */ cap_height, /* Ascent of CAPITALS */ x_height, /* Ascent of lowercase */ descent, /* Decent below baseline */ bbox[4], /* Bounding box */ italic_angle; /* Angle for italics */ int widths[256]; /* Character widths */ int length1, /* Length1 value for font */ length2, /* Length2 value for font */ length3; /* Length3 value for font */ static int tflags[] = /* PDF typeface flags */ { 33, /* Courier */ 34, /* Times-Roman */ 32, /* Helvetica */ 33, /* Monospace */ 34, /* Serif */ 32, /* Sans */ 4, /* Symbol */ 4 /* Dingbats */ }; static int sflags[] = /* PDF style flags */ { 0, /* Normal */ 0, /* Bold */ 64, /* Italic */ 64 /* Bold-Italic */ }; /* * This function writes a Type1 font, either as an object for PDF * output or as an in-line font in PostScript output. This is useful * because the Type1 fonts that Adobe ships typically do not include * the full set of characters required by some of the ISO character * sets. */ /* * Try to open the PFA file for the Type1 font... */ snprintf(filename, sizeof(filename), "%s/fonts/%s.pfa", _htmlData, _htmlFonts[typeface][style]); if ((fp = fopen(filename, "r")) == NULL) { #ifndef DEBUG progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open font file %s!", filename); #endif /* !DEBUG */ return (0); } /* * Write the font (object)... */ if (PSLevel) { /* * Embed a Type1 font in the PostScript output... */ fprintf(out, "%%%%BeginResource: font %s\n", _htmlFonts[typeface][style]); line[0] = '\0'; while (fgets(line, sizeof(line), fp) != NULL) fputs(line, out); if (line[strlen(line) - 1] != '\n') fputs("\n", out); fputs("%%EndResource\n", out); fclose(fp); } else { /* * Embed a Type1 font object in the PDF output... */ length1 = 0; length2 = 0; length3 = 0; while (fgets(line, sizeof(line), fp) != NULL) { length1 += strlen(line); if (strstr(line, "currentfile eexec") != NULL) break; } while (fgets(line, sizeof(line), fp) != NULL) { if (strlen(line) == 65) break; length2 += (strlen(line) - 1) / 2; } length3 = strlen(line); while (fgets(line, sizeof(line), fp) != NULL) length3 += strlen(line); rewind(fp); pdf_start_object(out); fprintf(out, "/Length1 %d", length1); fprintf(out, "/Length2 %d", length2); fprintf(out, "/Length3 %d", length3); if (Compression) fputs("/Filter/FlateDecode", out); pdf_start_stream(out); flate_open_stream(out); while (fgets(line, sizeof(line), fp) != NULL) { flate_puts(line, out); if (strstr(line, "currentfile eexec") != NULL) break; } while (fgets(line, sizeof(line), fp) != NULL) { if (strlen(line) == 65) break; for (lineptr = line, dataptr = line; isxdigit(*lineptr); lineptr += 2) { if (isdigit(lineptr[0])) ch = (lineptr[0] - '0') << 4; else ch = (tolower(lineptr[0] & 255) - 'a' + 10) << 4; if (isdigit(lineptr[1])) ch |= lineptr[1] - '0'; else ch |= tolower(lineptr[1] & 255) - 'a' + 10; *dataptr++ = ch; } flate_write(out, (uchar *)line, dataptr - line); } flate_puts(line, out); while (fgets(line, sizeof(line), fp) != NULL) flate_puts(line, out); flate_close_stream(out); pdf_end_object(out); fclose(fp); /* * Try to open the AFM file for the Type1 font... */ snprintf(filename, sizeof(filename), "%s/fonts/%s.afm", _htmlData, _htmlFonts[typeface][style]); if ((fp = fopen(filename, "r")) == NULL) { #ifndef DEBUG progress_error(HD_ERROR_FILE_NOT_FOUND, "Unable to open font width file %s!", filename); #endif /* !DEBUG */ return (0); } /* * Set the default values (Courier)... */ for (ch = 0; ch < 256; ch ++) widths[ch] = 600; ascent = 629; cap_height = 562; x_height = 426; descent = -157; bbox[0] = -28; bbox[1] = -250; bbox[2] = 628; bbox[3] = 805; italic_angle = 0; /* * Read the AFM file... */ while (fgets(line, sizeof(line), fp) != NULL) { if (strncmp(line, "ItalicAngle ", 12) == 0) italic_angle = atoi(line + 12); else if (strncmp(line, "FontBBox ", 9) == 0) sscanf(line + 9, "%d%d%d%d", bbox + 0, bbox + 1, bbox + 2, bbox + 3); else if (strncmp(line, "CapHeight ", 10) == 0) cap_height = atoi(line + 10); else if (strncmp(line, "XHeight ", 8) == 0) x_height = atoi(line + 8); else if (strncmp(line, "Ascender ", 9) == 0) ascent = atoi(line + 9); else if (strncmp(line, "Descender ", 10) == 0) descent = atoi(line + 10); else if (strncmp(line, "C ", 2) == 0) { if (typeface < TYPE_SYMBOL) { /* * Handle encoding of Courier, Times, and Helvetica using * assigned charset... */ if (sscanf(line, "%*s%*s%*s%*s%d%*s%*s%s", &width, glyph) != 2) continue; for (ch = 0; ch < 256; ch ++) if (_htmlGlyphs[ch] && strcmp(_htmlGlyphs[ch], glyph) == 0) break; if (ch < 256) widths[ch] = width; } else { /* * Symbol font uses its own encoding... */ if (sscanf(line, "%*s%d%*s%*s%d", &ch, &width) != 2) continue; if (ch >= 0 && ch < 256) widths[ch] = width; } } } fclose(fp); /* * Write the font descriptor... */ pdf_start_object(out); fputs("/Type/FontDescriptor", out); fprintf(out, "/Ascent %d", ascent); fprintf(out, "/Descent %d", descent); fprintf(out, "/CapHeight %d", cap_height); fprintf(out, "/XHeight %d", x_height); fprintf(out, "/FontBBox[%d %d %d %d]", bbox[0], bbox[1], bbox[2], bbox[3]); fprintf(out, "/ItalicAngle %d", italic_angle); fprintf(out, "/StemV %d", widths['v']); fprintf(out, "/Flags %d", tflags[typeface] | sflags[style]); fprintf(out, "/FontName/%s", _htmlFonts[typeface][style]); fprintf(out, "/FontFile %d 0 R", num_objects - 1); pdf_end_object(out); /* * Write the character widths... */ pdf_start_object(out, 1); fprintf(out, "%d", widths[0]); for (ch = 1; ch < 256; ch ++) fprintf(out, " %d", widths[ch]); pdf_end_object(out); } /* * Return the font descriptor... */ return (num_objects - 1); } /* * 'write_utf16()' - Write a UTF-16 string... */ static void write_utf16(FILE *out, // I - File to write to uchar *s) // I - String to write { uchar *sptr; // Pointer into string /* * We start by checking to see if the string is composed only of * ASCII characters; if so, we can just write a normal string... */ for (sptr = s; *sptr && !(*sptr & 0x80); sptr ++); if (!*sptr) { /* * Write an ASCII string... */ write_string(out, s, 0); } else if (Encryption) { /* * Convert the string to Unicode and encrypt... */ int ch; // Character value uchar unicode[2], // Unicode character enicode[2]; // Encrypted unicode character putc('<', out); encrypt_init(); unicode[0] = 0xfe; // Start with BOM unicode[1] = 0xff; rc4_encrypt(&encrypt_state, unicode, enicode, 2); fprintf(out, "%02x%02x", enicode[0], enicode[1]); for (sptr = s; *sptr; sptr ++) { ch = _htmlUnicode[*sptr]; unicode[0] = ch >> 8; unicode[1] = ch; rc4_encrypt(&encrypt_state, unicode, enicode, 2); fprintf(out, "%02x%02x", enicode[0], enicode[1]); } putc('>', out); } else { /* * Convert the string to Unicode... */ fputs("', out); } } /* * 'encrypt_init()' - Initialize the RC4 encryption context for the current * object. */ static void encrypt_init(void) { int i; /* Looping var */ uchar data[21], /* Key data */ *dataptr; /* Pointer to key data */ md5_state_t md5; /* MD5 state */ md5_byte_t digest[16]; /* MD5 digest value */ /* * Compute the key data for the MD5 hash. */ for (i = 0, dataptr = data; i < encrypt_len; i ++) *dataptr++ = encrypt_key[i]; *dataptr++ = num_objects; *dataptr++ = num_objects >> 8; *dataptr++ = num_objects >> 16; *dataptr++ = 0; *dataptr++ = 0; /* * Hash it... */ md5_init(&md5); md5_append(&md5, data, encrypt_len + 5); md5_finish(&md5, digest); /* * Initialize the RC4 context using the first N+5 bytes of the digest... */ if (encrypt_len > 11) rc4_init(&encrypt_state, digest, 16); else rc4_init(&encrypt_state, digest, encrypt_len + 5); } /* * 'flate_open_stream()' - Open a deflated output stream. */ static void flate_open_stream(FILE *out) /* I - Output file */ { if (Encryption && !PSLevel) encrypt_init(); if (!Compression) return; compressor_active = 1; compressor.zalloc = (alloc_func)0; compressor.zfree = (free_func)0; compressor.opaque = (voidpf)0; deflateInit(&compressor, Compression); compressor.next_out = (Bytef *)comp_buffer; compressor.avail_out = sizeof(comp_buffer); } /* * 'flate_close_stream()' - Close a deflated output stream. */ static void flate_close_stream(FILE *out) /* I - Output file */ { int status; /* Deflate status */ if (!Compression) { #ifdef HTMLDOC_ASCII85 if (PSLevel) ps_ascii85(out, (uchar *)"", 0, 1); #endif // HTMLDOC_ASCII85 return; } while ((status = deflate(&compressor, Z_FINISH)) != Z_STREAM_END) { if (status < Z_OK && status != Z_BUF_ERROR) { progress_error(HD_ERROR_OUT_OF_MEMORY, "deflate() failed (%d)", status); return; } if (PSLevel) #ifdef HTMLDOC_ASCII85 ps_ascii85(out, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); #else ps_hex(out, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); #endif // HTMLDOC_ASCII85 else { if (Encryption) rc4_encrypt(&encrypt_state, comp_buffer, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); fwrite(comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer, 1, out); } compressor.next_out = (Bytef *)comp_buffer; compressor.avail_out = sizeof(comp_buffer); } if ((uchar *)compressor.next_out > (uchar *)comp_buffer) { if (PSLevel) #ifdef HTMLDOC_ASCII85 ps_ascii85(out, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); #else ps_hex(out, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); #endif // HTMLDOC_ASCII85 else { if (Encryption) rc4_encrypt(&encrypt_state, comp_buffer, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); fwrite(comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer, 1, out); } } deflateEnd(&compressor); compressor_active = 0; #ifdef HTMLDOC_ASCII85 if (PSLevel) ps_ascii85(out, (uchar *)"", 0, 1); #else if (PSLevel) { // End of data marker... fputs(">\n", out); } #endif // HTMLDOC_ASCII85 } /* * 'flate_puts()' - Write a character string to a compressed stream. */ static void flate_puts(const char *s, /* I - String to write */ FILE *out) /* I - Output file */ { flate_write(out, (uchar *)s, strlen(s)); } /* * 'flate_printf()' - Write a formatted character string to a compressed stream. */ static void flate_printf(FILE *out, /* I - Output file */ const char *format, /* I - Format string */ ...) /* I - Additional args as necessary */ { int length; /* Length of output string */ char buf[10240]; /* Output buffer */ va_list ap; /* Argument pointer */ va_start(ap, format); length = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); flate_write(out, (uchar *)buf, length); } /* * 'flate_write()' - Write data to a compressed stream. */ static void flate_write(FILE *out, /* I - Output file */ uchar *buf, /* I - Buffer */ int length, /* I - Number of bytes to write */ int flush) /* I - Flush when writing data? */ { int status; /* Deflate status */ if (compressor_active) { compressor.next_in = buf; compressor.avail_in = length; while (compressor.avail_in > 0) { if (compressor.avail_out < (int)(sizeof(comp_buffer) / 8)) { if (PSLevel) #ifdef HTMLDOC_ASCII85 ps_ascii85(out, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); #else ps_hex(out, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); #endif // HTMLDOC_ASCII85 else { if (Encryption) rc4_encrypt(&encrypt_state, comp_buffer, comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer); fwrite(comp_buffer, (uchar *)compressor.next_out - (uchar *)comp_buffer, 1, out); } compressor.next_out = (Bytef *)comp_buffer; compressor.avail_out = sizeof(comp_buffer); } status = deflate(&compressor, flush ? Z_FULL_FLUSH : Z_NO_FLUSH); if (status < Z_OK && status != Z_BUF_ERROR) { progress_error(HD_ERROR_OUT_OF_MEMORY, "deflate() failed (%d)", status); return; } flush = 0; } } else if (Encryption && !PSLevel) { int i, // Looping var bytes; // Number of bytes to encrypt/write uchar newbuf[1024]; // New encrypted data buffer for (i = 0; i < length; i += sizeof(newbuf)) { if ((bytes = length - i) > (int)sizeof(newbuf)) bytes = sizeof(newbuf); rc4_encrypt(&encrypt_state, buf + i, newbuf, bytes); fwrite(newbuf, bytes, 1, out); } } else if (PSLevel) #ifdef HTMLDOC_ASCII85 ps_ascii85(out, buf, length); #else ps_hex(out, buf, length); #endif // HTMLDOC_ASCII85 else fwrite(buf, length, 1, out); } /* * End of "$Id: ps-pdf.cxx 1518 2006-08-01 16:58:50Z mike $". */ htmldoc-1.8.27/htmldoc/html.h0100664000212600000240000001505610412647623014505 0ustar mikeuser/* * "$Id: html.h 1479 2006-03-30 03:25:07Z mike $" * * HTML parsing definitions for HTMLDOC, a HTML document processing program. * * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _HTML_H_ # define _HTML_H_ /* * Include necessary headers... */ # include # include # include "file.h" # include "hdstring.h" # include "iso8859.h" # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Define some compatibility macros for Microsoft Windows... */ # ifdef WIN32 # define strcasecmp(s,t) stricmp(s,t) # define strncasecmp(s,t,n) strnicmp(s,t,n) # endif /* WIN32 */ /* * Markup constants... */ typedef enum { MARKUP_FILE = -3, /* File Delimiter */ MARKUP_UNKNOWN = -2, /* Unknown element */ MARKUP_ERROR = -1, MARKUP_NONE = 0, MARKUP_COMMENT, MARKUP_DOCTYPE, MARKUP_A, MARKUP_ACRONYM, MARKUP_ADDRESS, MARKUP_APPLET, MARKUP_AREA, MARKUP_B, MARKUP_BASE, MARKUP_BASEFONT, MARKUP_BIG, MARKUP_BLINK, MARKUP_BLOCKQUOTE, MARKUP_BODY, MARKUP_BR, MARKUP_CAPTION, MARKUP_CENTER, MARKUP_CITE, MARKUP_CODE, MARKUP_COL, MARKUP_COLGROUP, MARKUP_DD, MARKUP_DEL, MARKUP_DFN, MARKUP_DIR, MARKUP_DIV, MARKUP_DL, MARKUP_DT, MARKUP_EM, MARKUP_EMBED, MARKUP_FONT, MARKUP_FORM, MARKUP_FRAME, MARKUP_FRAMESET, MARKUP_H1, MARKUP_H2, MARKUP_H3, MARKUP_H4, MARKUP_H5, MARKUP_H6, MARKUP_H7, MARKUP_H8, MARKUP_H9, MARKUP_H10, MARKUP_H11, MARKUP_H12, MARKUP_H13, MARKUP_H14, MARKUP_H15, MARKUP_HEAD, MARKUP_HR, MARKUP_HTML, MARKUP_I, MARKUP_IMG, MARKUP_INPUT, MARKUP_INS, MARKUP_ISINDEX, MARKUP_KBD, MARKUP_LI, MARKUP_LINK, MARKUP_MAP, MARKUP_MENU, MARKUP_META, MARKUP_MULTICOL, MARKUP_NOBR, MARKUP_NOFRAMES, MARKUP_OL, MARKUP_OPTION, MARKUP_P, MARKUP_PRE, MARKUP_S, MARKUP_SAMP, MARKUP_SCRIPT, MARKUP_SELECT, MARKUP_SMALL, MARKUP_SPACER, MARKUP_STRIKE, MARKUP_STRONG, MARKUP_STYLE, MARKUP_SUB, MARKUP_SUP, MARKUP_TABLE, MARKUP_TBODY, MARKUP_TD, MARKUP_TEXTAREA, MARKUP_TFOOT, MARKUP_TH, MARKUP_THEAD, MARKUP_TITLE, MARKUP_TR, MARKUP_TT, MARKUP_U, MARKUP_UL, MARKUP_VAR, MARKUP_WBR } markup_t; /* * Horizontal alignment... */ typedef enum { ALIGN_LEFT = 0, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFY } halignment_t; /* * Vertical alignment... */ typedef enum { ALIGN_TOP = 0, ALIGN_MIDDLE, ALIGN_BOTTOM } valignment_t; /* * Typeface... */ typedef enum { TYPE_COURIER = 0, TYPE_TIMES, TYPE_HELVETICA, TYPE_MONOSPACE, TYPE_SERIF, TYPE_SANS_SERIF, TYPE_SYMBOL, TYPE_DINGBATS, TYPE_MAX } typeface_t; /* * Style... */ typedef enum { STYLE_NORMAL = 0, STYLE_BOLD, STYLE_ITALIC, STYLE_BOLD_ITALIC, STYLE_MAX } style_t; /* * Sizes... */ # define SIZE_H1 6 # define SIZE_H2 5 # define SIZE_H3 4 # define SIZE_H4 3 # define SIZE_H5 2 # define SIZE_H6 1 # define SIZE_H7 0 # define SIZE_P 3 # define SIZE_PRE 2 # define SIZE_SUB -2 # define SIZE_SUP -2 /* * Markup variables... */ typedef struct { uchar *name, /* Variable name */ *value; /* Variable value */ } var_t; /* * Parsing tree... */ typedef struct tree_str { struct tree_str *parent, /* Parent tree entry */ *child, /* First child entry */ *last_child, /* Last child entry */ *prev, /* Previous entry on this level */ *next, /* Next entry on this level */ *link; /* Linked-to */ markup_t markup; /* Markup code */ uchar *data; /* Text (MARKUP_NONE or MARKUP_COMMENT) */ unsigned halignment:2, /* Horizontal alignment */ valignment:2, /* Vertical alignment */ typeface:3, /* Typeface code */ size:3, /* Size of text */ style:2, /* Style of text */ underline:1, /* Text is underlined? */ strikethrough:1,/* Text is struck-through? */ subscript:1, /* Text is subscripted? */ superscript:1, /* Text is superscripted? */ preformatted:1, /* Preformatted text? */ indent:4; /* Indentation level 0-15 */ uchar red, /* Color of this fragment */ green, blue; float width, /* Width of this fragment in points */ height; /* Height of this fragment in points */ int nvars; /* Number of variables... */ var_t *vars; /* Variables... */ } tree_t; /* * Globals... */ extern const char *_htmlMarkups[]; extern const char *_htmlData; extern float _htmlPPI; extern int _htmlGrayscale; extern uchar _htmlTextColor[]; extern float _htmlBrowserWidth; extern float _htmlSizes[], _htmlSpacings[]; extern typeface_t _htmlBodyFont, _htmlHeadingFont; extern int _htmlInitialized; extern char _htmlCharSet[]; extern float _htmlWidths[TYPE_MAX][STYLE_MAX][256]; extern int _htmlUnicode[]; extern const char *_htmlGlyphs[]; extern const char *_htmlGlyphsAll[]; extern const char *_htmlFonts[TYPE_MAX][STYLE_MAX]; extern int _htmlStandardFonts[TYPE_MAX]; /* * Prototypes... */ extern tree_t *htmlReadFile(tree_t *parent, FILE *fp, const char *base); extern int htmlWriteFile(tree_t *parent, FILE *fp); extern tree_t *htmlAddTree(tree_t *parent, markup_t markup, uchar *data); extern int htmlDeleteTree(tree_t *parent); extern tree_t *htmlInsertTree(tree_t *parent, markup_t markup, uchar *data); extern tree_t *htmlNewTree(tree_t *parent, markup_t markup, uchar *data); extern tree_t *htmlFindFile(tree_t *doc, uchar *filename); extern tree_t *htmlFindTarget(tree_t *doc, uchar *name); extern void htmlFixLinks(tree_t *doc, tree_t *tree, uchar *base = 0); extern uchar *htmlGetText(tree_t *tree); extern uchar *htmlGetMeta(tree_t *tree, uchar *name); extern uchar *htmlGetVariable(tree_t *t, uchar *name); extern int htmlSetVariable(tree_t *t, uchar *name, uchar *value); extern uchar *htmlGetStyle(tree_t *t, uchar *name); extern void htmlSetBaseSize(float p, float s); extern void htmlSetCharSet(const char *cs); extern void htmlSetTextColor(uchar *color); extern void htmlLoadFontWidths(void); extern void htmlDebugStats(const char *title, tree_t *t); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_HTML_H_ */ /* * End of "$Id: html.h 1479 2006-03-30 03:25:07Z mike $". */ htmldoc-1.8.27/htmldoc/file.c0100664000212600000240000006275610437363662014471 0ustar mikeuser/* * "$Id: file.c 1488 2006-05-31 19:00:02Z mike $" * * Filename routines for HTMLDOC, a HTML document processing program. * * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * file_basename() - Return the base filename without directory or target. * file_cleanup() - Close an open HTTP connection and remove * temporary files... * file_cookies() - Set the HTTP cookies for remote accesses. * file_directory() - Return the directory without filename or target. * file_extension() - Return the extension of a file without the target. * file_find_check() - Check to see if the specified file or URL exists... * file_find() - Find a file in one of the path directories. * file_gets() - Read a line from a file terminated with CR, LF, * or CR LF. * file_localize() - Localize a filename for the new working directory. * file_method() - Return the method for a filename or URL. * file_nolocal() - Disable access to local files. * file_proxy() - Set the proxy host for all HTTP requests. * file_referer() - Set the HTTP referer for remote accesses. * file_rlookup() - Lookup a filename to find the original URL, if * applicable. * file_target() - Return the target of a link. * file_temp() - Create and open a temporary file. */ /* * Include necessary headers. */ #include "file.h" #include "http.h" #include "progress.h" #include "debug.h" #if defined(WIN32) # include #else # include #endif /* WIN32 */ #include #include #include #include #include /* * Temporary file definitions... */ #ifdef WIN32 # define getpid GetCurrentProcessId # define TEMPLATE "%s/%08lx.%06d.tmp" # define OPENMODE (_O_CREAT | _O_RDWR | _O_TRUNC | _O_BINARY) # define OPENPERM (_S_IREAD | _S_IWRITE) #else # define TEMPLATE "%s/%06ld.%06d.tmp" # define OPENMODE (O_CREAT | O_RDWR | O_EXCL | O_TRUNC) # define OPENPERM 0600 #endif /* WIN32 */ /* * Cache file structure... */ typedef struct /* Cache for all temporary files */ { char *name; /* Temporary filename */ char *url; /* URL */ } cache_t; /* * Local globals... */ char proxy_host[HTTP_MAX_URI] = ""; /* Proxy hostname */ int proxy_port = 0; /* Proxy port */ http_t *http = NULL; /* Connection to remote server */ int web_files = 0, /* Number of temporary files */ web_alloc = 0; /* Number of allocated files */ cache_t *web_cache = NULL; /* Cache array */ int no_local = 0; /* Non-zero to disable local files */ char cookies[1024] = ""; /* HTTP cookies, if any */ char referer_url[HTTP_MAX_VALUE] = ""; /* HTTP referer, if any */ /* * 'file_basename()' - Return the base filename without directory or target. */ const char * /* O - Base filename */ file_basename(const char *s) /* I - Filename or URL */ { const char *basename; /* Pointer to directory separator */ static char buf[1024]; /* Buffer for files with targets */ if (s == NULL) return (NULL); if ((basename = strrchr(s, '/')) != NULL) basename ++; else if ((basename = strrchr(s, '\\')) != NULL) basename ++; else basename = (char *)s; if (basename[0] == '#') return (NULL); if (strchr(basename, '#') == NULL) return (basename); strlcpy(buf, basename, sizeof(buf)); *(char *)strchr(buf, '#') = '\0'; return (buf); } /* * 'file_cleanup()' - Close an open HTTP connection and remove temporary files... */ void file_cleanup(void) { int i; /* Looping var */ char filename[1024]; /* Temporary file */ struct stat fileinfo; /* File information */ size_t remotebytes; /* Size of remote data */ const char *tmpdir; /* Temporary directory */ #ifdef WIN32 char tmppath[1024]; /* Temporary directory */ #endif /* WIN32 */ const char *debug; /* HTMLDOC_DEBUG env var */ if (http) { httpClose(http); http = NULL; } #ifdef WIN32 if ((tmpdir = getenv("TEMP")) == NULL) { GetTempPath(sizeof(tmppath), tmppath); tmpdir = tmppath; } #else if ((tmpdir = getenv("TMPDIR")) == NULL) tmpdir = "/var/tmp"; #endif /* WIN32 */ /* * Report on the remote data bytes that were downloaded... */ debug = getenv("HTMLDOC_DEBUG"); if (debug && (strstr(debug, "all") != NULL || strstr(debug, "remotebytes") != NULL)) { for (i = 0, remotebytes = 0; i < web_files; i ++) if (web_cache[i].url) { snprintf(filename, sizeof(filename), TEMPLATE, tmpdir, (long)getpid(), i + 1); if (!stat(filename, &fileinfo)) remotebytes += fileinfo.st_size; } progress_error(HD_ERROR_NONE, "REMOTEBYTES: %ld", (long)remotebytes); } /* * Check to see if we want to leave the temporary files around for * debugging... */ if (debug && (strstr(debug, "all") != NULL || strstr(debug, "tempfiles") != NULL)) { /* * Yes, leave the files, but show the mapping from filename to URL... */ progress_error(HD_ERROR_NONE, "DEBUG: Temporary File Summary"); progress_error(HD_ERROR_NONE, "DEBUG:"); progress_error(HD_ERROR_NONE, "DEBUG: URL Filename"); progress_error(HD_ERROR_NONE, "DEBUG: ------------------------------- ---------------------"); for (i = 0; i < web_files; i ++) { snprintf(filename, sizeof(filename), TEMPLATE, tmpdir, (long)getpid(), i + 1); progress_error(HD_ERROR_NONE, "DEBUG: %-31.31s %s\n", web_cache[i].url ? web_cache[i].url : "none", filename); } progress_error(HD_ERROR_NONE, "DEBUG:"); return; } while (web_files > 0) { snprintf(filename, sizeof(filename), TEMPLATE, tmpdir, (long)getpid(), web_files); if (unlink(filename)) progress_error(HD_ERROR_DELETE_ERROR, "Unable to delete temporary file \"%s\": %s", filename, strerror(errno)); web_files --; if (web_cache[web_files].name) free(web_cache[web_files].name); if (web_cache[web_files].url) free(web_cache[web_files].url); } if (web_alloc) { free(web_cache); web_alloc = 0; web_cache = NULL; } } /* * 'file_cookies()' - Set the HTTP cookies for remote accesses. */ void file_cookies(const char *s) /* I - Cookie string or NULL */ { if (s) strlcpy(cookies, s, sizeof(cookies)); else cookies[0] = '\0'; } /* * 'file_directory()' - Return the directory without filename or target. */ const char * /* O - Directory for file */ file_directory(const char *s) /* I - Filename or URL */ { char *dir; /* Pointer to directory separator */ static char buf[1024]; /* Buffer for files with targets */ if (s == NULL) return (NULL); if (strncmp(s, "http://", 7) == 0 || strncmp(s, "https://", 8) == 0) { /* * Handle URLs... */ char scheme[HTTP_MAX_URI], username[HTTP_MAX_URI], hostname[HTTP_MAX_URI], resource[HTTP_MAX_URI]; int port; httpSeparateURI(HTTP_URI_CODING_ALL, s, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if ((dir = strrchr(resource, '/')) != NULL) *dir = '\0'; httpAssembleURI(HTTP_URI_CODING_ALL, buf, sizeof(buf), scheme, username, hostname, port, resource); } else { /* * Normal stuff... */ strlcpy(buf, s, sizeof(buf)); if ((dir = strrchr(buf, '/')) != NULL) *dir = '\0'; else if ((dir = strrchr(buf, '\\')) != NULL) *dir = '\0'; else return ("."); if (strncmp(buf, "file:", 5) == 0) hd_strcpy(buf, buf + 5); if (!buf[0]) /* Safe because buf is more than 2 chars long */ strcpy(buf, "/"); } return (buf); } /* * 'file_extension()' - Return the extension of a file without the target. */ const char * /* O - File extension */ file_extension(const char *s) /* I - Filename or URL */ { const char *extension; /* Pointer to directory separator */ static char buf[1024]; /* Buffer for files with targets */ if (s == NULL) return (NULL); if ((extension = strrchr(s, '/')) != NULL) extension ++; else if ((extension = strrchr(s, '\\')) != NULL) extension ++; else extension = s; if ((extension = strrchr(extension, '.')) == NULL) return (""); else extension ++; if (strchr(extension, '#') == NULL) return (extension); strlcpy(buf, extension, sizeof(buf)); *(char *)strchr(buf, '#') = '\0'; return (buf); } /* * 'file_find_check()' - Check to see if the specified file or URL exists... */ static const char * /* O - Pathname or NULL */ file_find_check(const char *filename) /* I - File or URL */ { int i; /* Looping var */ int retry; /* Current retry */ char scheme[HTTP_MAX_URI], /* Method/scheme */ username[HTTP_MAX_URI], /* Username:password */ hostname[HTTP_MAX_URI], /* Hostname */ resource[HTTP_MAX_URI]; /* Resource */ int port; /* Port number */ const char *connhost; /* Host to connect to */ int connport; /* Port to connect to */ char connpath[HTTP_MAX_URI], /* Path for GET */ connauth[HTTP_MAX_VALUE];/* Auth string */ http_status_t status; /* Status of request... */ FILE *fp; /* Web file */ ssize_t bytes, /* Bytes read */ count; /* Number of bytes so far */ off_t total; /* Total bytes in file */ char tempname[HTTP_MAX_URI]; /* Temporary filename */ DEBUG_printf(("file_find_check(filename=\"%s\")\n", filename)); if (strncmp(filename, "http:", 5) == 0 || strncmp(filename, "//", 2) == 0) strcpy(scheme, "http"); #ifdef HAVE_SSL else if (strncmp(filename, "https:", 6) == 0) strcpy(scheme, "https"); #endif /* HAVE_SSL */ else strcpy(scheme, "file"); if (strcmp(scheme, "file") == 0) { /* * Return immediately if we aren't allowing access to local files... */ if (no_local) return (NULL); /* * If the filename exists, return the filename... */ if (!access(filename, 0)) { DEBUG_printf(("file_find_check: Returning \"%s\"!\n", filename)); return (filename); } } else { /* * Remote file; look it up in the web cache, and then try getting it * from the remote system... */ for (i = 0; i < web_files; i ++) if (web_cache[i].url && strcmp(web_cache[i].url, filename) == 0) { DEBUG_printf(("file_find_check: Returning \"%s\" for \"%s\"!\n", web_cache[i].name, filename)); return (web_cache[i].name); } httpSeparateURI(HTTP_URI_CODING_ALL, filename, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); for (status = HTTP_ERROR, retry = 0; status == HTTP_ERROR && retry < 5; retry ++) { if (proxy_port) { /* * Send request to proxy host... */ connhost = proxy_host; connport = proxy_port; snprintf(connpath, sizeof(connpath), "%s://%s:%d%s", scheme, hostname, port, resource); } else { /* * Send request to host directly... */ connhost = hostname; connport = port; strlcpy(connpath, resource, sizeof(connpath)); } if (http != NULL && strcasecmp(http->hostname, hostname) != 0) { httpClose(http); http = NULL; } if (http == NULL) { progress_show("Connecting to %s...", connhost); #ifdef HAVE_SSL if (strcmp(scheme, "http") == 0) http = httpConnect(connhost, connport); else http = httpConnectEncrypt(connhost, connport, HTTP_ENCRYPT_ALWAYS); #else http = httpConnect(connhost, connport); #endif /* HAVE_SSL */ if (http == NULL) { progress_hide(); progress_error(HD_ERROR_NETWORK_ERROR, "Unable to connect to %s!", connhost); return (NULL); } } progress_show("Getting %s...", connpath); httpClearFields(http); httpSetField(http, HTTP_FIELD_HOST, hostname); httpSetField(http, HTTP_FIELD_CONNECTION, "Keep-Alive"); httpSetField(http, HTTP_FIELD_REFERER, referer_url); if (username[0]) { strcpy(connauth, "Basic "); httpEncode64_2(connauth + 6, sizeof(connauth) - 6, username, strlen(username)); httpSetField(http, HTTP_FIELD_AUTHORIZATION, connauth); } if (cookies[0]) httpSetCookie(http, cookies); if (!httpGet(http, connpath)) { while ((status = httpUpdate(http)) == HTTP_CONTINUE); } else status = HTTP_ERROR; if (status >= HTTP_MOVED_PERMANENTLY && status <= HTTP_SEE_OTHER) { /* * Flush text... */ httpFlush(http); /* * Grab new location from HTTP data... */ httpSeparateURI(HTTP_URI_CODING_ALL, httpGetField(http, HTTP_FIELD_LOCATION), scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); status = HTTP_ERROR; } } if (status != HTTP_OK) { progress_hide(); progress_error((HDerror)status, "%s (%s)", httpStatus(status), filename); httpFlush(http); return (NULL); } if ((fp = file_temp(tempname, sizeof(tempname))) == NULL) { progress_hide(); progress_error(HD_ERROR_WRITE_ERROR, "Unable to create temporary file \"%s\": %s", tempname, strerror(errno)); httpFlush(http); return (NULL); } if ((total = httpGetLength2(http)) == 0) total = 8192; count = 0; while ((bytes = httpRead2(http, resource, sizeof(resource))) > 0) { count += bytes; progress_update((100 * count / total) % 101); fwrite(resource, 1, bytes, fp); } progress_hide(); fclose(fp); web_cache[web_files - 1].url = strdup(filename); DEBUG_printf(("file_find_check: Returning \"%s\" for \"%s\"!\n", tempname, filename)); return (web_cache[web_files - 1].name); } return (NULL); } /* * 'file_find()' - Find a file in one of the path directories. */ const char * /* O - Pathname or NULL */ file_find(const char *path, /* I - Path "dir;dir;dir" */ const char *s) /* I - File to find */ { int i; /* Looping var */ char *temp; /* Current position in filename */ const char *sptr; /* Pointer into "s" */ int ch; /* Quoted character */ char basename[HTTP_MAX_URI]; /* Base (unquoted) filename */ const char *realname; /* Real filename */ static char filename[HTTP_MAX_URI]; /* Current filename */ /* * If the filename is NULL, return NULL... */ if (s == NULL) return (NULL); DEBUG_printf(("file_find(path=\"%s\", s=\"%s\")\n", path ? path : "(null)", s)); /* * See if this is a cached remote file... */ for (i = 0; i < web_files; i ++) if (strcmp(s, web_cache[i].name) == 0) { DEBUG_printf(("file_find: Returning cache file \"%s\"!\n", s)); return (s); } DEBUG_printf(("file_find: \"%s\" not in web cache of %d files...\n", s, web_files)); /* * Make sure the filename is not quoted... */ if (strchr(s, '%') == NULL) strlcpy(basename, s, sizeof(basename)); else { for (sptr = s, temp = basename; *sptr && temp < (basename + sizeof(basename) - 1);) if (*sptr == '%' && isxdigit(sptr[1]) && isxdigit(sptr[2])) { /* * Dequote %HH... */ if (isalpha(sptr[1])) ch = (tolower(sptr[1]) - 'a' + 10) << 4; else ch = (sptr[1] - '0') << 4; if (isalpha(sptr[2])) ch |= tolower(sptr[2]) - 'a' + 10; else ch |= sptr[2] - '0'; *temp++ = ch; sptr += 3; } else *temp++ = *sptr++; *temp = '\0'; } /* * If we got a complete URL, we don't use the path... */ if (path != NULL && !path[0]) { DEBUG_puts("file_find: Resetting path to NULL since path is empty..."); path = NULL; } if (strncmp(s, "http:", 5) == 0 || strncmp(s, "https:", 6) == 0 || strncmp(s, "//", 2) == 0) { DEBUG_puts("file_find: Resetting path to NULL since filename is a URL..."); path = NULL; } /* * Loop through the path as needed... */ if (path != NULL) { filename[sizeof(filename) - 1] = '\0'; while (*path != '\0') { /* * Copy the path directory... */ temp = filename; while (*path != ';' && *path && temp < (filename + sizeof(filename) - 1)) *temp++ = *path++; if (*path == ';') path ++; /* * Append a slash as needed, then the filename... */ if (temp > filename && temp < (filename + sizeof(filename) - 1) && basename[0] != '/') *temp++ = '/'; strlcpy(temp, basename, sizeof(filename) - (temp - filename)); /* * See if the file or URL exists... */ if ((realname = file_find_check(filename)) != NULL) return (realname); } } return (file_find_check(s)); } /* * 'file_gets()' - Read a line from a file terminated with CR, LF, or CR LF. */ char * /* O - Line from file or NULL on EOF */ file_gets(char *buf, /* I - Line buffer */ int buflen, /* I - Length of buffer */ FILE *fp) /* I - File to read from */ { int ch; /* Character from file */ char *ptr, /* Current position in line buffer */ *end; /* End of line buffer */ /* * Range check everything... */ if (fp == NULL || buf == NULL || buflen < 2) return (NULL); /* * Now loop until we have a valid line... */ ptr = buf; end = buf + buflen - 1; for (;;) { if ((ch = getc(fp)) == EOF) break; else if (ch == '\r') { /* * See if we have CR or CR LF... */ int nextch = getc(fp); if (nextch == EOF || nextch == '\n') break; /* * No LF, so save the next char for later... */ ungetc(nextch, fp); break; } else if (ch == '\n') break; else if (ch == '\\') { /* * Handle \ escapes, to continue to multiple lines... */ int nextch = getc(fp); if (nextch == EOF) break; else if (nextch == '\r') { nextch = getc(fp); if (nextch == EOF) break; else if (nextch != '\n') ungetc(nextch, fp); } else if (nextch != '\n' && ptr < end) *ptr++ = nextch; } else if (ptr < end) *ptr++ = ch; } *ptr = '\0'; if (ch != EOF || ptr > buf) return (buf); else return (NULL); } /* * 'file_localize()' - Localize a filename for the new working directory. */ const char * /* O - New filename */ file_localize(const char *filename, /* I - Filename */ const char *newcwd) /* I - New directory */ { const char *newslash; /* Directory separator */ char *slash; /* Directory separator */ char cwd[1024]; /* Current directory */ char temp[1024]; /* Temporary pathname */ static char newfilename[1024]; /* New filename */ if (filename[0] == '\0') return (""); if (file_method(filename)) return (filename); getcwd(cwd, sizeof(cwd)); if (newcwd == NULL) newcwd = cwd; #if defined(WIN32) || defined(__EMX__) if (filename[0] != '/' && filename[0] != '\\' && !(isalpha(filename[0]) && filename[1] == ':')) #else if (filename[0] != '/') #endif /* WIN32 || __EMX__ */ { for (newslash = filename; strncmp(newslash, "../", 3) == 0; newslash += 3) #if defined(WIN32) || defined(__EMX__) { if ((slash = strrchr(cwd, '/')) == NULL) slash = strrchr(cwd, '\\'); if (slash != NULL) *slash = '\0'; } #else if ((slash = strrchr(cwd, '/')) != NULL) *slash = '\0'; #endif /* WIN32 || __EMX__ */ sprintf(temp, "%s/%s", cwd, newslash); } else strlcpy(temp, filename, sizeof(temp)); for (slash = temp, newslash = newcwd; *slash != '\0' && *newslash != '\0'; slash ++, newslash ++) if ((*slash == '/' || *slash == '\\') && (*newslash == '/' || *newslash == '\\')) continue; else if (*slash != *newslash) break; while (*slash != '/' && *slash != '\\' && slash > temp) slash --; if (*slash == '/' || *slash == '\\') slash ++; #if defined(WIN32) || defined(__EMX__) if (isalpha(slash[0]) && slash[1] == ':') return ((char *)filename); /* Different drive letter... */ #endif /* WIN32 || __EMX__ */ if (*newslash != '\0') while (*newslash != '/' && *newslash != '\\' && newslash > newcwd) newslash --; newfilename[0] = '\0'; while (*newslash != '\0') { if (*newslash == '/' || *newslash == '\\') strlcat(newfilename, "../", sizeof(newfilename)); newslash ++; } strlcat(newfilename, slash, sizeof(newfilename)); return (newfilename); } /* * 'file_method()' - Return the method for a filename or URL. * * Returns NULL if the URL is a local file. */ const char * /* O - Method string ("http", "ftp", etc.) */ file_method(const char *s) /* I - Filename or URL */ { if (strncmp(s, "http:", 5) == 0) return ("http"); else if (strncmp(s, "https:", 6) == 0) return ("https"); else if (strncmp(s, "ftp:", 4) == 0) return ("ftp"); else if (strncmp(s, "mailto:", 7) == 0) return ("mailto"); else return (NULL); } /* * 'file_nolocal()' - Disable access to local files. */ void file_nolocal() { no_local = 1; } /* * 'file_proxy()' - Set the proxy host for all HTTP requests. */ void file_proxy(const char *url) /* I - URL of proxy server */ { char scheme[HTTP_MAX_URI], /* Method name (must be HTTP) */ username[HTTP_MAX_URI], /* Username:password information */ hostname[HTTP_MAX_URI], /* Hostname */ resource[HTTP_MAX_URI]; /* Resource name */ int port; /* Port number */ if (url == NULL || url[0] == '\0') { proxy_host[0] = '\0'; proxy_port = 0; } else { httpSeparateURI(HTTP_URI_CODING_ALL, url, scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)); if (strcmp(scheme, "http") == 0) { strlcpy(proxy_host, hostname, sizeof(proxy_host)); proxy_port = port; } } } /* * 'file_referer()' - Set the HTTP referer for remote accesses. */ void file_referer(const char *referer) /* I - Referer URL */ { if (referer) strlcpy(referer_url, referer, sizeof(referer_url)); else referer_url[0] = '\0'; } /* * 'file_rlookup()' - Lookup a filename to find the original URL, if applicable. */ const char * /* O - URL or filename */ file_rlookup(const char *filename) /* I - Filename */ { int i; /* Looping var */ cache_t *wc; /* Current cache file */ for (i = web_files, wc = web_cache; i > 0; i --, wc ++) if (!strcmp(wc->name, filename)) return (wc->url); return (filename); } /* * 'file_target()' - Return the target of a link. */ const char * /* O - Target name */ file_target(const char *s) /* I - Filename or URL */ { const char *basename; /* Pointer to directory separator */ const char *target; /* Pointer to target */ if (s == NULL) return (NULL); if ((basename = strrchr(s, '/')) != NULL) basename ++; else if ((basename = strrchr(s, '\\')) != NULL) basename ++; else basename = s; if ((target = strchr(basename, '#')) != NULL) return (target + 1); else return (NULL); } /* * 'file_temp()' - Create and open a temporary file. */ FILE * /* O - Temporary file */ file_temp(char *name, /* O - Filename */ int len) /* I - Length of filename buffer */ { cache_t *temp; /* Pointer to cache entry */ FILE *fp; /* File pointer */ int fd; /* File descriptor */ const char *tmpdir; /* Temporary directory */ #ifdef WIN32 char tmppath[1024]; /* Buffer for temp dir */ #endif /* WIN32 */ /* * Allocate memory for the file cache as needed... */ if (web_files >= web_alloc) { web_alloc += ALLOC_FILES; if (web_files == 0) temp = (cache_t *)malloc(sizeof(cache_t) * web_alloc); else temp = (cache_t *)realloc(web_cache, sizeof(cache_t) * web_alloc); if (temp == NULL) { progress_error(HD_ERROR_OUT_OF_MEMORY, "Unable to allocate memory for %d file entries - %s", web_alloc, strerror(errno)); web_alloc -= ALLOC_FILES; return (NULL); } web_cache = temp; } /* * Clear a new file cache entry... */ temp = web_cache + web_files; temp->name = NULL; temp->url = NULL; web_files ++; #ifdef WIN32 if ((tmpdir = getenv("TEMP")) == NULL) { GetTempPath(sizeof(tmppath), tmppath); tmpdir = tmppath; } #else if ((tmpdir = getenv("TMPDIR")) == NULL) tmpdir = "/var/tmp"; #endif /* WIN32 */ snprintf(name, (size_t)len, TEMPLATE, tmpdir, (long)getpid(), web_files); if ((fd = open(name, OPENMODE, OPENPERM)) >= 0) fp = fdopen(fd, "w+b"); else fp = NULL; if (!fp) web_files --; temp->name = strdup(name); return (fp); } /* * End of "$Id: file.c 1488 2006-05-31 19:00:02Z mike $". */ htmldoc-1.8.27/htmldoc/testhtml.cxx0100664000212600000240000001223510232770600015744 0ustar mikeuser/* * "$Id: testhtml.cxx 1397 2005-04-24 19:20:32Z mike $" * * Test program for HTML parsing routines for HTMLDOC, an HTML document * processing program. * * Copyright 1997-2005 by Michael Sweet. * * HTMLDOC is distributed under the terms of the Aladdin Free Public License * which is described in the file "LICENSE.txt". * * Contents: * * main() - Main entry for test program. */ /* * Include necessary headers. */ #define _HTMLDOC_CXX_ #include "htmldoc.h" void prefs_load(void) { } void prefs_save(void) { } /* * 'main()' - Main entry for test program. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int i; /* Looping var */ FILE *fp; /* Input file */ tree_t *t, /* HTML markup tree */ *doc, /* HTML document */ *toc; /* Table of contents */ char base[1024]; /* Base directory */ #ifdef DEBUG printf("MARKUP_NONE=%d\n", MARKUP_NONE); printf("MARKUP_COMMENT=%d\n", MARKUP_COMMENT); printf("MARKUP_A=%d\n", MARKUP_A); printf("MARKUP_ADDRESS=%d\n", MARKUP_ADDRESS); printf("MARKUP_APPLET=%d\n", MARKUP_APPLET); printf("MARKUP_AREA=%d\n", MARKUP_AREA); printf("MARKUP_B=%d\n", MARKUP_B); printf("MARKUP_BASE=%d\n", MARKUP_BASE); printf("MARKUP_BASEFONT=%d\n", MARKUP_BASEFONT); printf("MARKUP_BIG=%d\n", MARKUP_BIG); printf("MARKUP_BLINK=%d\n", MARKUP_BLINK); printf("MARKUP_BLOCKQUOTE=%d\n", MARKUP_BLOCKQUOTE); printf("MARKUP_BODY=%d\n", MARKUP_BODY); printf("MARKUP_BR=%d\n", MARKUP_BR); printf("MARKUP_CAPTION=%d\n", MARKUP_CAPTION); printf("MARKUP_CENTER=%d\n", MARKUP_CENTER); printf("MARKUP_CITE=%d\n", MARKUP_CITE); printf("MARKUP_CODE=%d\n", MARKUP_CODE); printf("MARKUP_DD=%d\n", MARKUP_DD); printf("MARKUP_DFN=%d\n", MARKUP_DFN); printf("MARKUP_DIR=%d\n", MARKUP_DIR); printf("MARKUP_DIV=%d\n", MARKUP_DIV); printf("MARKUP_DL=%d\n", MARKUP_DL); printf("MARKUP_DT=%d\n", MARKUP_DT); printf("MARKUP_EM=%d\n", MARKUP_EM); printf("MARKUP_EMBED=%d\n", MARKUP_EMBED); printf("MARKUP_FONT=%d\n", MARKUP_FONT); printf("MARKUP_FORM=%d\n", MARKUP_FORM); printf("MARKUP_FRAME=%d\n", MARKUP_FRAME); printf("MARKUP_FRAMESET=%d\n", MARKUP_FRAMESET); printf("MARKUP_H1=%d\n", MARKUP_H1); printf("MARKUP_H2=%d\n", MARKUP_H2); printf("MARKUP_H3=%d\n", MARKUP_H3); printf("MARKUP_H4=%d\n", MARKUP_H4); printf("MARKUP_H5=%d\n", MARKUP_H5); printf("MARKUP_H6=%d\n", MARKUP_H6); printf("MARKUP_H7=%d\n", MARKUP_H7); printf("MARKUP_HEAD=%d\n", MARKUP_HEAD); printf("MARKUP_HR=%d\n", MARKUP_HR); printf("MARKUP_HTML=%d\n", MARKUP_HTML); printf("MARKUP_I=%d\n", MARKUP_I); printf("MARKUP_IMG=%d\n", MARKUP_IMG); printf("MARKUP_INPUT=%d\n", MARKUP_INPUT); printf("MARKUP_ISINDEX=%d\n", MARKUP_ISINDEX); printf("MARKUP_KBD=%d\n", MARKUP_KBD); printf("MARKUP_LI=%d\n", MARKUP_LI); printf("MARKUP_LINK=%d\n", MARKUP_LINK); printf("MARKUP_MAP=%d\n", MARKUP_MAP); printf("MARKUP_MENU=%d\n", MARKUP_MENU); printf("MARKUP_META=%d\n", MARKUP_META); printf("MARKUP_MULTICOL=%d\n", MARKUP_MULTICOL); printf("MARKUP_NOBR=%d\n", MARKUP_NOBR); printf("MARKUP_NOFRAMES=%d\n", MARKUP_NOFRAMES); printf("MARKUP_OL=%d\n", MARKUP_OL); printf("MARKUP_OPTION=%d\n", MARKUP_OPTION); printf("MARKUP_P=%d\n", MARKUP_P); printf("MARKUP_PRE=%d\n", MARKUP_PRE); printf("MARKUP_S=%d\n", MARKUP_S); printf("MARKUP_SAMP=%d\n", MARKUP_SAMP); printf("MARKUP_SCRIPT=%d\n", MARKUP_SCRIPT); printf("MARKUP_SELECT=%d\n", MARKUP_SELECT); printf("MARKUP_SMALL=%d\n", MARKUP_SMALL); printf("MARKUP_SPACER=%d\n", MARKUP_SPACER); printf("MARKUP_STRIKE=%d\n", MARKUP_STRIKE); printf("MARKUP_STRONG=%d\n", MARKUP_STRONG); printf("MARKUP_STYLE=%d\n", MARKUP_STYLE); printf("MARKUP_SUB=%d\n", MARKUP_SUB); printf("MARKUP_SUP=%d\n", MARKUP_SUP); printf("MARKUP_TABLE=%d\n", MARKUP_TABLE); printf("MARKUP_TD=%d\n", MARKUP_TD); printf("MARKUP_TEXTAREA=%d\n", MARKUP_TEXTAREA); printf("MARKUP_TH=%d\n", MARKUP_TH); printf("MARKUP_TITLE=%d\n", MARKUP_TITLE); printf("MARKUP_TR=%d\n", MARKUP_TR); printf("MARKUP_TT=%d\n", MARKUP_TT); printf("MARKUP_U=%d\n", MARKUP_U); printf("MARKUP_UL=%d\n", MARKUP_UL); printf("MARKUP_VAR=%d\n", MARKUP_VAR); printf("MARKUP_WBR=%d\n", MARKUP_WBR); #endif /* DEBUG */ if (argc < 2) { fputs("Usage: testhtml filename.html\n", stderr); return(1); }; for (i = 1, doc = NULL; i < argc; i ++) if ((fp = fopen(file_find("", argv[i]), "r")) != NULL) { strlcpy(base, argv[i], sizeof(base)); if (strrchr(base, '/') != NULL) *strrchr(base, '/') = '\0'; else base[0] = '\0'; t = htmlReadFile(NULL, fp, base); fclose(fp); if (t != NULL) if (doc == NULL) doc = t; else { doc->next = t; t->prev = doc; }; } else fprintf(stderr, "testhtml: Unable to open input file \'%s\'!\n", argv[i]); if (doc != NULL) { htmlWriteFile(doc, stdout); toc = toc_build(doc); puts("---- TABLE OF CONTENTS ----"); htmlWriteFile(toc, stdout); } return (doc == NULL); } /* * End of "$Id: testhtml.cxx 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/file.h0100664000212600000240000000355410437363662014465 0ustar mikeuser/* * "$Id: file.h 1488 2006-05-31 19:00:02Z mike $" * * Filename definitions for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _FILE_H_ # define _FILE_H_ /* * Include necessary headers... */ # include "hdstring.h" # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Prototypes... */ extern const char *file_basename(const char *s); extern void file_cleanup(void); extern void file_cookies(const char *s); extern const char *file_directory(const char *s); extern const char *file_extension(const char *s); extern const char *file_find(const char *path, const char *s); extern char *file_gets(char *buf, int buflen, FILE *fp); extern const char *file_localize(const char *filename, const char *newcwd); extern const char *file_method(const char *s); extern void file_nolocal(); extern void file_proxy(const char *url); extern void file_referer(const char *referer); extern const char *file_rlookup(const char *filename); extern const char *file_target(const char *s); extern FILE *file_temp(char *name, int len); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_FILE_H_ */ /* * End of "$Id: file.h 1488 2006-05-31 19:00:02Z mike $". */ htmldoc-1.8.27/htmldoc/http-addr.c0100664000212600000240000003073110441614401015406 0ustar mikeuser/* * "$Id: http-addr.c 1493 2006-06-07 18:20:49Z mike $" * * HTTP address routines for the Common UNIX Printing System (CUPS). * * Copyright 1997-2006 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636 USA * * Voice: (301) 373-9600 * EMail: cups-info@cups.org * WWW: http://www.cups.org * * Contents: * * httpAddrAny() - Check for the "any" address. * httpAddrEqual() - Compare two addresses. * httpAddrLocalhost() - Check for the local loopback address. * httpAddrLookup() - Lookup the hostname associated with the address. * httpAddrString() - Convert an IP address to a dotted string. * httpGetHostByName() - Lookup a hostname or IP address, and return * address records for the specified name. * httpGetHostname() - Get the FQDN for the local system. */ /* * Include necessary headers... */ #include "http-private.h" #include "debug.h" #include #include /* * 'httpAddrAny()' - Check for the "any" address. * * @since CUPS 1.2@ */ int /* O - 1 if "any", 0 otherwise */ httpAddrAny(const http_addr_t *addr) /* I - Address to check */ { if (!addr) return (0); #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6 && IN6_IS_ADDR_UNSPECIFIED(&(addr->ipv6.sin6_addr))) return (1); #endif /* AF_INET6 */ if (addr->addr.sa_family == AF_INET && ntohl(addr->ipv4.sin_addr.s_addr) == 0x00000000) return (1); return (0); } /* * 'httpAddrEqual()' - Compare two addresses. * * @since CUPS 1.2@ */ int /* O - 1 if equal, 0 if not */ httpAddrEqual(const http_addr_t *addr1, /* I - First address */ const http_addr_t *addr2) /* I - Second address */ { if (!addr1 && !addr2) return (1); if (!addr1 || !addr2) return (0); if (addr1->addr.sa_family != addr2->addr.sa_family) return (0); #ifdef AF_LOCAL if (addr1->addr.sa_family == AF_LOCAL) return (!strcmp(addr1->un.sun_path, addr2->un.sun_path)); #endif /* AF_LOCAL */ #ifdef AF_INET6 if (addr1->addr.sa_family == AF_INET6) return (!memcmp(&(addr1->ipv6.sin6_addr), &(addr2->ipv6.sin6_addr), 16)); #endif /* AF_INET6 */ return (addr1->ipv4.sin_addr.s_addr == addr2->ipv4.sin_addr.s_addr); } /* * 'httpAddrLength()' - Return the length of the address in bytes. * * @since CUPS 1.2@ */ int /* O - Length in bytes */ httpAddrLength(const http_addr_t *addr) /* I - Address */ { if (!addr) return (0); #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6) return (sizeof(addr->ipv6)); else #endif /* AF_INET6 */ #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) return (offsetof(struct sockaddr_un, sun_path) + strlen(addr->un.sun_path) + 1); else #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET) return (sizeof(addr->ipv4)); else return (0); } /* * 'httpAddrLocalhost()' - Check for the local loopback address. * * @since CUPS 1.2@ */ int /* O - 1 if local host, 0 otherwise */ httpAddrLocalhost( const http_addr_t *addr) /* I - Address to check */ { if (!addr) return (1); #ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6 && IN6_IS_ADDR_LOOPBACK(&(addr->ipv6.sin6_addr))) return (1); #endif /* AF_INET6 */ #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) return (1); #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET && ntohl(addr->ipv4.sin_addr.s_addr) == 0x7f000001) return (1); return (0); } #ifdef __sgi # define ADDR_CAST (struct sockaddr *) #else # define ADDR_CAST (char *) #endif /* __sgi */ /* * 'httpAddrLookup()' - Lookup the hostname associated with the address. * * @since CUPS 1.2@ */ char * /* O - Host name */ httpAddrLookup( const http_addr_t *addr, /* I - Address to lookup */ char *name, /* I - Host name buffer */ int namelen) /* I - Size of name buffer */ { DEBUG_printf(("httpAddrLookup(addr=%p, name=%p, namelen=%d)\n", addr, name, namelen)); /* * Range check input... */ if (!addr || !name || namelen <= 2) { if (name && namelen >= 1) *name = '\0'; return (NULL); } #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) strlcpy(name, addr->un.sun_path, namelen); else #endif /* AF_LOCAL */ #ifdef HAVE_GETNAMEINFO { if (getnameinfo(&addr->addr, httpAddrLength(addr), name, namelen, NULL, 0, 0)) { /* * If we get an error back, then the address type is not supported * and we should zero out the buffer... */ name[0] = '\0'; return (NULL); } } #else { struct hostent *host; /* Host from name service */ # ifdef AF_INET6 if (addr->addr.sa_family == AF_INET6) host = gethostbyaddr(ADDR_CAST &(addr->ipv6.sin6_addr), sizeof(struct in_addr), AF_INET6); else # endif /* AF_INET6 */ host = gethostbyaddr(ADDR_CAST &(addr->ipv4.sin_addr), sizeof(struct in_addr), AF_INET); if (host == NULL) { /* * No hostname, so return the raw address... */ httpAddrString(addr, name, namelen); return (NULL); } strlcpy(name, host->h_name, namelen); } #endif /* HAVE_GETNAMEINFO */ return (name); } /* * 'httpAddrString()' - Convert an address to a numeric string. * * @since CUPS 1.2@ */ char * /* O - Numeric address string */ httpAddrString(const http_addr_t *addr, /* I - Address to convert */ char *s, /* I - String buffer */ int slen) /* I - Length of string */ { DEBUG_printf(("httpAddrString(addr=%p, s=%p, slen=%d)\n", addr, s, slen)); /* * Range check input... */ if (!addr || !s || slen <= 2) { if (s && slen >= 1) *s = '\0'; return (NULL); } #ifdef AF_LOCAL if (addr->addr.sa_family == AF_LOCAL) strlcpy(s, addr->un.sun_path, slen); else #endif /* AF_LOCAL */ if (addr->addr.sa_family == AF_INET) { unsigned temp; /* Temporary address */ temp = ntohl(addr->ipv4.sin_addr.s_addr); snprintf(s, slen, "%d.%d.%d.%d", (temp >> 24) & 255, (temp >> 16) & 255, (temp >> 8) & 255, temp & 255); } #ifdef AF_INET6 else if (addr->addr.sa_family == AF_INET6) { # ifdef HAVE_GETNAMEINFO if (getnameinfo(&addr->addr, httpAddrLength(addr), s, slen, NULL, 0, NI_NUMERICHOST)) { /* * If we get an error back, then the address type is not supported * and we should zero out the buffer... */ s[0] = '\0'; return (NULL); } # else char *sptr; /* Pointer into string */ int i; /* Looping var */ unsigned temp; /* Current value */ const char *prefix; /* Prefix for address */ prefix = ""; for (sptr = s, i = 0; i < 4 && addr->ipv6.sin6_addr.s6_addr32[i]; i ++) { temp = ntohl(addr->ipv6.sin6_addr.s6_addr32[i]); snprintf(sptr, slen, "%s%x", prefix, (temp >> 16) & 0xffff); prefix = ":"; slen -= strlen(sptr); sptr += strlen(sptr); temp &= 0xffff; if (temp || i == 3 || addr->ipv6.sin6_addr.s6_addr32[i + 1]) { snprintf(sptr, slen, "%s%x", prefix, temp); slen -= strlen(sptr); sptr += strlen(sptr); } } if (i < 4) { while (i < 4 && !addr->ipv6.sin6_addr.s6_addr32[i]) i ++; if (i < 4) { snprintf(sptr, slen, "%s:", prefix); prefix = ":"; slen -= strlen(sptr); sptr += strlen(sptr); for (; i < 4; i ++) { temp = ntohl(addr->ipv6.sin6_addr.s6_addr32[i]); if ((temp & 0xffff0000) || addr->ipv6.sin6_addr.s6_addr32[i - 1]) { snprintf(sptr, slen, "%s%x", prefix, (temp >> 16) & 0xffff); slen -= strlen(sptr); sptr += strlen(sptr); } snprintf(sptr, slen, "%s%x", prefix, temp & 0xffff); slen -= strlen(sptr); sptr += strlen(sptr); } } else if (sptr == s) { /* * Empty address... */ strlcpy(s, "::", slen); sptr = s + 2; slen -= 2; } else { /* * Empty at end... */ strlcpy(sptr, "::", slen); sptr += 2; slen -= 2; } } # endif /* HAVE_GETNAMEINFO */ } #endif /* AF_INET6 */ else strlcpy(s, "UNKNOWN", slen); DEBUG_printf(("httpAddrString: returning \"%s\"...\n", s)); return (s); } /* * 'httpGetHostByName()' - Lookup a hostname or IPv4 address, and return * address records for the specified name. * * @deprecated@ */ struct hostent * /* O - Host entry */ httpGetHostByName(const char *name) /* I - Hostname or IP address */ { const char *nameptr; /* Pointer into name */ unsigned ip[4]; /* IP address components */ static unsigned ip_addr; /* Packed IPv4 address */ static char *ip_ptrs[2]; /* Pointer to packed address */ static struct hostent hostent; /* Host entry for IP address */ DEBUG_printf(("httpGetHostByName(name=\"%s\")\n", name)); /* * Avoid lookup delays and configuration problems when connecting * to the localhost address... */ if (!strcmp(name, "localhost")) name = "127.0.0.1"; /* * This function is needed because some operating systems have a * buggy implementation of gethostbyname() that does not support * IP addresses. If the first character of the name string is a * number, then sscanf() is used to extract the IP components. * We then pack the components into an IPv4 address manually, * since the inet_aton() function is deprecated. We use the * htonl() macro to get the right byte order for the address. */ for (nameptr = name; isdigit(*nameptr & 255) || *nameptr == '.'; nameptr ++); if (!*nameptr) { /* * We have an IPv4 address; break it up and provide the host entry * to the caller. */ if (sscanf(name, "%u.%u.%u.%u", ip, ip + 1, ip + 2, ip + 3) != 4) return (NULL); /* Must have 4 numbers */ if (ip[0] > 255 || ip[1] > 255 || ip[2] > 255 || ip[3] > 255) return (NULL); /* Invalid byte ranges! */ ip_addr = htonl(((((((ip[0] << 8) | ip[1]) << 8) | ip[2]) << 8) | ip[3])); /* * Fill in the host entry and return it... */ hostent.h_name = (char *)name; hostent.h_aliases = NULL; hostent.h_addrtype = AF_INET; hostent.h_length = 4; hostent.h_addr_list = ip_ptrs; ip_ptrs[0] = (char *)&(ip_addr); ip_ptrs[1] = NULL; DEBUG_puts("httpGetHostByName: returning IPv4 address..."); return (&hostent); } else { /* * Use the gethostbyname() function to get the IPv4 address for * the name... */ DEBUG_puts("httpGetHostByName: returning domain lookup address(es)..."); return (gethostbyname(name)); } } /* * 'httpGetHostname()' - Get the FQDN for the connection or local system. * * When "http" points to a connected socket, return the hostname or * address that was used in the call to httpConnect() or httpConnectEncrypt(). * Otherwise, return the FQDN for the local system using both gethostname() * and gethostbyname() to get the local hostname with domain. * * @since CUPS 1.2@ */ const char * /* O - FQDN for connection or system */ httpGetHostname(http_t *http, /* I - HTTP connection or NULL */ char *s, /* I - String buffer for name */ int slen) /* I - Size of buffer */ { struct hostent *host; /* Host entry to get FQDN */ if (!s || slen <= 1) return (NULL); if (http) { if (http->hostname[0] == '/') strlcpy(s, "localhost", slen); else strlcpy(s, http->hostname, slen); } else { /* * Get the hostname... */ if (gethostname(s, slen) < 0) strlcpy(s, "localhost", slen); if (!strchr(s, '.')) { /* * The hostname is not a FQDN, so look it up... */ if ((host = gethostbyname(s)) != NULL && host->h_name) strlcpy(s, host->h_name, slen); } } /* * Return the hostname with as much domain info as we have... */ return (s); } /* * End of "$Id: http-addr.c 1493 2006-06-07 18:20:49Z mike $". */ htmldoc-1.8.27/htmldoc/rc4.c0100664000212600000240000000633707116764641014235 0ustar mikeuser/* * "$Id: rc4.c 288 2000-06-05 17:55:45Z mike $" * * RC4 functions for HTMLDOC. * * Original code by Tim Martin * Copyright 1999 by Carnegie Mellon University, All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Carnegie Mellon * University not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior * permission. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Contents: * * rc4_init() - Initialize an RC4 context with the specified key. * rc4_encrypt() - Encrypt the given buffer. */ #include "rc4.h" /* * 'rc4_init()' - Initialize an RC4 context with the specified key. */ void rc4_init(rc4_context_t *text, /* IO - Context */ const unsigned char *key, /* I - Key */ unsigned keylen) /* I - Length of key */ { int i, j; /* Looping vars */ unsigned char tmp; /* Temporary variable */ /* * Fill in linearly s0=0, s1=1, ... */ for (i = 0; i < 256; i ++) text->sbox[i] = i; for (i = 0, j = 0; i < 256; i ++) { /* * j = (j + Si + Ki) mod 256 */ j = (j + text->sbox[i] + key[i % keylen]) & 255; /* * Swap Si and Sj... */ tmp = text->sbox[i]; text->sbox[i] = text->sbox[j]; text->sbox[j] = tmp; } /* * Initialized counters to 0 and return... */ text->i = 0; text->j = 0; } /* * 'rc4_encrypt()' - Encrypt the given buffer. */ void rc4_encrypt(rc4_context_t *text, /* I - Context */ const unsigned char *input, /* I - Input buffer */ unsigned char *output, /* O - Output buffer */ unsigned len) /* I - Size of buffers */ { unsigned char tmp; /* Swap variable */ int i, j; /* Looping vars */ int t; /* Current S box */ /* * Loop through the entire buffer... */ i = text->i; j = text->j; while (len > 0) { /* * Get the next S box indices... */ i = (i + 1) & 255; j = (j + text->sbox[i]) & 255; /* * Swap Si and Sj... */ tmp = text->sbox[i]; text->sbox[i] = text->sbox[j]; text->sbox[j] = tmp; /* * Get the S box index for this byte... */ t = (text->sbox[i] + text->sbox[j]) & 255; /* * Encrypt using the S box... */ *output++ = *input++ ^ text->sbox[t]; len --; } /* * Copy current S box indices back to context... */ text->i = i; text->j = j; } /* * End of "$Id: rc4.c 288 2000-06-05 17:55:45Z mike $". */ htmldoc-1.8.27/htmldoc/gui.h0100664000212600000240000001650410232770600014314 0ustar mikeuser/* * "$Id: gui.h 1397 2005-04-24 19:20:32Z mike $" * * GUI definitions for HTMLDOC, an HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ /* * Include necessary headers. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* * Class definition for HTMLDOC dialog... */ class GUI { private: Fl_Double_Window *window; Fl_Group *controls; Fl_Tabs *tabs; Fl_Group *inputTab; Fl_Round_Button *typeBook, *typeContinuous, *typeWebPage; Fl_File_Browser *inputFiles; Fl_Button *addFile, *addURL, *editFile, *deleteFile, *moveUpFile, *moveDownFile; Fl_Input *logoImage; Fl_Button *logoBrowse; Fl_Input *titleImage; Fl_Button *titleBrowse; Fl_Group *outputTab; Fl_Round_Button *outputFile, *outputDirectory; Fl_Input *outputPath; Fl_Button *outputBrowse; Fl_Round_Button *typeHTML, *typeHTMLSep, *typePS, *typePDF; Fl_Check_Button *grayscale, *titlePage, *jpegCompress; Fl_Group *compGroup; Fl_Slider *compression; Fl_Group *jpegGroup; Fl_Value_Slider *jpegQuality; Fl_Group *pageTab; Fl_Input *pageSize; Fl_Menu_Button *pageSizeMenu; Fl_Check_Button *pageDuplex, *landscape; Fl_Input *pageTop, *pageLeft, *pageRight, *pageBottom; Fl_Choice *pageHeaderLeft, *pageHeaderCenter, *pageHeaderRight, *pageHeader1Left, *pageHeader1Center, *pageHeader1Right, *pageFooterLeft, *pageFooterCenter, *pageFooterRight; Fl_Choice *numberUp; Fl_Group *tocTab; Fl_Choice *tocLevels; Fl_Check_Button *numberedToc; Fl_Group *tocHeader; Fl_Choice *tocHeaderLeft, *tocHeaderCenter, *tocHeaderRight; Fl_Group *tocFooter; Fl_Choice *tocFooterLeft, *tocFooterCenter, *tocFooterRight; Fl_Input *tocTitle; Fl_Group *colorsTab; Fl_Input *bodyColor; Fl_Button *bodyLookup; Fl_Input *bodyImage; Fl_Button *bodyBrowse; Fl_Input *textColor; Fl_Button *textLookup; Fl_Input *linkColor; Fl_Button *linkLookup; Fl_Choice *linkStyle; Fl_Group *fontsTab; Fl_Choice *headingFont, *bodyFont, *headFootFont; Fl_Counter *fontBaseSize, *fontSpacing, *headFootSize; Fl_Choice *charset; Fl_Check_Button *embedFonts; Fl_Group *psTab; Fl_Group *psLevel; Fl_Round_Button *ps1, *ps2, *ps3; Fl_Check_Button *psCommands, *xrxComments; Fl_Group *pdfTab; Fl_Group *pdfVersion; Fl_Round_Button *pdf11, *pdf12, *pdf13, *pdf14; Fl_Choice *pageMode, *pageLayout, *firstPage, *pageEffect; Fl_Value_Slider *pageDuration, *effectDuration; Fl_Check_Button *links; Fl_Group *securityTab; Fl_Group *encryption; Fl_Round_Button *encryptionYes, *encryptionNo; Fl_Group *permissions; Fl_Check_Button *permPrint, *permModify, *permCopy, *permAnnotate; Fl_Secret_Input *ownerPassword, *userPassword; Fl_Group *optionsTab; Fl_Input *htmlEditor; Fl_Button *htmlBrowse; Fl_Value_Slider *browserWidth; Fl_Input *path; Fl_Input *proxy; Fl_Check_Button *tooltips; Fl_Check_Button *modern_skin; Fl_Check_Button *strict_html; Fl_Check_Button *overflow_errors; Fl_Button *showAbout, *showLicense, *saveOptions; Fl_Button *bookHelp, *bookNew, *bookOpen, *bookSave, *bookSaveAs, *bookGenerate, *bookClose; Fl_Progress *progressBar; char book_filename[1024]; int book_changed; char title_string[1024]; Fl_File_Chooser *fc; Fl_File_Icon *icon; Fl_Help_Dialog *help; Fl_Window *error_window; Fl_Browser *error_list; Fl_Button *error_ok; void loadSettings(); void title(const char *filename = NULL, int changed = 0); static void changeCB(Fl_Widget *w, GUI *gui); static void docTypeCB(Fl_Widget *w, GUI *gui); static void inputFilesCB(Fl_Widget *w, GUI *gui); static void addFileCB(Fl_Widget *w, GUI *gui); static void addURLCB(Fl_Widget *w, GUI *gui); static void editFilesCB(Fl_Widget *w, GUI *gui); static void deleteFilesCB(Fl_Widget *w, GUI *gui); static void moveUpFilesCB(Fl_Widget *w, GUI *gui); static void moveDownFilesCB(Fl_Widget *w, GUI *gui); static void logoImageCB(Fl_Widget *w, GUI *gui); static void titleImageCB(Fl_Widget *w, GUI *gui); static void outputTypeCB(Fl_Widget *w, GUI *gui); static void outputPathCB(Fl_Widget *w, GUI *gui); static void outputFormatCB(Fl_Widget *w, GUI *gui); static void jpegCB(Fl_Widget *w, GUI *gui); static void sizeCB(Fl_Widget *w, GUI *gui); static void tocCB(Fl_Widget *w, GUI *gui); static void bodyColorCB(Fl_Widget *w, GUI *gui); static void bodyImageCB(Fl_Widget *w, GUI *gui); static void textColorCB(Fl_Widget *w, GUI *gui); static void linkColorCB(Fl_Widget *w, GUI *gui); static void psCB(Fl_Widget *w, GUI *gui); static void pdfCB(Fl_Widget *w, GUI *gui); static void effectCB(Fl_Widget *w, GUI *gui); static void encryptionCB(Fl_Widget *w, GUI *gui); static void htmlEditorCB(Fl_Widget *w, GUI *gui); static void tooltipCB(Fl_Widget *w, GUI *gui); static void skinCB(Fl_Widget *w, GUI *gui); static void saveOptionsCB(Fl_Widget *w, GUI *gui); static void helpCB(Fl_Widget *w, GUI *gui); static void newBookCB(Fl_Widget *w, GUI *gui); static void openBookCB(Fl_Widget *w, GUI *gui); static void saveBookCB(Fl_Widget *w, GUI *gui); static void saveAsBookCB(Fl_Widget *w, GUI *gui); static void generateBookCB(Fl_Widget *w, GUI *gui); static void closeBookCB(Fl_Widget *w, GUI *gui); static void errorCB(Fl_Widget *w, GUI *gui); #ifdef __APPLE__ static void appleOpenCB(const char *f); #endif // __APPLE__ public: static const char *help_dir; static void showAboutCB(void); static void showLicenseCB(void); GUI(const char *filename = NULL); ~GUI(void); void add_error(const char *s) { error_list->add(s); } int checkSave(); void hide() { window->hide(); help->hide(); fc->hide(); }; int loadBook(const char *bookfile); int newBook(); void parseOptions(const char *line); void progress(int percent, const char *text = NULL); int saveBook(const char *bookfile); void show(); int visible() { return (window->visible()); } }; /* * End of "$Id: gui.h 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/rc4.h0100664000212600000240000000351207116616000014213 0ustar mikeuser/* * "$Id: rc4.h 287 2000-06-05 03:18:24Z mike $" * * RC4 functions for HTMLDOC. * * Original code by Rob Earhart * Copyright 1999 by Carnegie Mellon University, All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Carnegie Mellon * University not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior * permission. * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _RC4_H_ # define _RC4_H_ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * RC4 context... */ typedef struct { unsigned char sbox[256]; /* S boxes for encryption */ int i, j; /* Current indices into S boxes */ } rc4_context_t; /* * Prototypes... */ extern void rc4_init(rc4_context_t *context, const unsigned char *key, unsigned keylen); extern void rc4_encrypt(rc4_context_t *context, const unsigned char *input, unsigned char *output, unsigned len); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_RC4_H_ */ /* * End of "$Id: rc4.h 287 2000-06-05 03:18:24Z mike $". */ htmldoc-1.8.27/htmldoc/iso8859.h0100664000212600000240000000216010232770600014651 0ustar mikeuser/* * "$Id: iso8859.h 1397 2005-04-24 19:20:32Z mike $" * * ISO-8859-1 definitions for HTMLDOC, an HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ #ifndef _ISO8859_H_ # define _ISO8859_H_ /* * Include necessary headers. */ # include "types.h" /* * Prototypes... */ extern uchar iso8859(uchar *name); extern uchar *iso8859(uchar value); #endif /* !_ISO8859_H_ */ /* * End of "$Id: iso8859.h 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/htmldoc/util.cxx0100664000212600000240000002630110232770600015054 0ustar mikeuser/* * "$Id: util.cxx 1397 2005-04-24 19:20:32Z mike $" * * Utility functions for HTMLDOC, a HTML document processing program. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com * * Contents: * * format_number() - Format a number into arabic numerals, roman numerals, * or letters. * get_color() - Get a standard color value... * get_format() - Convert an old "fff" format string to the new format. * get_fmt() - Convert a new format string to the old "fff" format. * get_measurement() - Get a size measurement in inches, points, centimeters, * or millimeters. * set_page_size() - Set the output page size. */ /* * Include necessary headers. */ #include "htmldoc.h" #include /* * 'format_number()' - Format a number into arabic numerals, roman numerals, * or letters. */ char * /* O - String */ format_number(int n, /* I - Number */ char f) /* I - Format */ { static const char *ones[10] = /* Roman numerals, 0-9 */ { "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix" }, *tens[10] = /* Roman numerals, 10-90 */ { "", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc" }, *hundreds[10] = /* Roman numerals, 100-900 */ { "", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm" }; static const char *ONES[10] = /* Roman numerals, 0-9 */ { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" }, *TENS[10] = /* Roman numerals, 10-90 */ { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" }, *HUNDREDS[10] = /* Roman numerals, 100-900 */ { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" }; static char buffer[1024]; /* String buffer */ switch (f) { default : buffer[0] = '\0'; break; case 'a' : if (n >= (26 * 26)) buffer[0] = '\0'; else if (n > 26) sprintf(buffer, "%c%c", 'a' + (n / 26) - 1, 'a' + (n % 26) - 1); else sprintf(buffer, "%c", 'a' + n - 1); break; case 'A' : if (n >= (26 * 26)) buffer[0] = '\0'; else if (n > 26) sprintf(buffer, "%c%c", 'A' + (n / 26) - 1, 'A' + (n % 26) - 1); else sprintf(buffer, "%c", 'A' + n - 1); break; case '1' : sprintf(buffer, "%d", n); break; case 'i' : if (n >= 1000) buffer[0] = '\0'; else sprintf(buffer, "%s%s%s", hundreds[n / 100], tens[(n / 10) % 10], ones[n % 10]); break; case 'I' : if (n >= 1000) buffer[0] = '\0'; else sprintf(buffer, "%s%s%s", HUNDREDS[n / 100], TENS[(n / 10) % 10], ONES[n % 10]); break; } return (buffer); } /* * 'get_color()' - Get a standard color value... */ void get_color(const uchar *color, /* I - Color attribute */ float *rgb, /* O - RGB value */ int defblack) /* I - Default color is black? */ { int i; /* Looping vars */ static uchar tempcolor[8]; /* Temporary holding place for hex colors */ static struct { const char *name; /* Color name */ uchar red, /* Red value */ green, /* Green value */ blue; /* Blue value */ } colors[] = /* Color "database" */ { { "aqua", 0, 255, 255 }, /* AKA Cyan */ { "black", 0, 0, 0 }, { "blue", 0, 0, 255 }, { "cyan", 0, 255, 255 }, { "fuchsia", 255, 0, 255 }, /* AKA Magenta */ { "gray", 128, 128, 128 }, { "green", 0, 128, 0 }, { "grey", 128, 128, 128 }, { "lime", 0, 255, 0 }, { "magenta", 255, 0, 255 }, { "maroon", 128, 0, 0 }, { "navy", 0, 0, 128 }, { "olive", 128, 128, 0 }, { "purple", 128, 0, 128 }, { "red", 255, 0, 0 }, { "silver", 192, 192, 192 }, { "teal", 0, 128, 128 }, { "white", 255, 255, 255 }, { "yellow", 255, 255, 0 } }; // First, see if this is a hex color with a missing # in front... if (strlen((char *)color) == 6) { for (i = 0; i < 6; i ++) if (!isxdigit(color[i])) break; if (i == 6) { // Update the color name to be #RRGGBB instead of RRGGBB... tempcolor[0] = '#'; strlcpy((char *)tempcolor + 1, (char *)color, sizeof(tempcolor) - 1); color = tempcolor; } } if (!color[0]) { if (defblack) { rgb[0] = 0.0f; rgb[1] = 0.0f; rgb[2] = 0.0f; } else { rgb[0] = 1.0f; rgb[1] = 1.0f; rgb[2] = 1.0f; } return; } else if (color[0] == '#') { /* * RGB value in hex... */ i = strtol((char *)color + 1, NULL, 16); rgb[0] = (i >> 16) / 255.0f; rgb[1] = ((i >> 8) & 255) / 255.0f; rgb[2] = (i & 255) / 255.0f; } else { for (i = 0; i < (int)(sizeof(colors) / sizeof(colors[0])); i ++) if (strcasecmp(colors[i].name, (char *)color) == 0) break; if (i >= (int)(sizeof(colors) / sizeof(colors[0]))) { if (defblack) i = 1; /* Black */ else i = 17; /* White */ } rgb[0] = colors[i].red / 255.0f; rgb[1] = colors[i].green / 255.0f; rgb[2] = colors[i].blue / 255.0f; } } // // 'get_format()' - Convert an old "fff" format string to the new format. // void get_format(const char *fmt, // I - Old "fff" format char **formats) // O - New format strings { int i; // Looping var for (i = 0; i < 3; i ++) { if (formats[i]) { free(formats[i]); formats[i] = NULL; } switch (fmt[i]) { case '/' : formats[i] = strdup("$PAGE(1)/$PAGES"); break; case ':' : formats[i] = strdup("$CHAPTERPAGE(1)/$CHAPTERPAGES"); break; case '1' : formats[i] = strdup("$PAGE(1)"); break; case 'a' : formats[i] = strdup("$PAGE(a)"); break; case 'A' : formats[i] = strdup("$PAGE(A)"); break; case 'c' : formats[i] = strdup("$CHAPTER"); break; case 'C' : formats[i] = strdup("$CHAPTERPAGE(1)"); break; case 'd' : formats[i] = strdup("$DATE"); break; case 'D' : formats[i] = strdup("$DATE $TIME"); break; case 'h' : formats[i] = strdup("$HEADING"); break; case 'i' : formats[i] = strdup("$PAGE(i)"); break; case 'I' : formats[i] = strdup("$PAGE(I)"); break; case 'l' : formats[i] = strdup("$LOGOIMAGE"); break; case 't' : formats[i] = strdup("$TITLE"); break; case 'T' : formats[i] = strdup("$TIME"); break; default : formats[i] = NULL; break; } } } // // 'get_fmt()' - Convert a new format string to the old "fff" format. // const char * // O - Old format string get_fmt(char **formats) // I - New format strings { int i, j; // Looping vars static char fmt[4]; // Old format string static struct // Format string conversions... { char f; // Format character const char *format; // Format string } table[] = { { '/', "$PAGE(1)/$PAGES" }, { ':', "$CHAPTERPAGE(1)/$CHAPTERPAGES" }, { '1', "$PAGE(1)" }, { 'a', "$PAGE(a)" }, { 'A', "$PAGE(A)" }, { 'c', "$CHAPTER" }, { 'C', "$CHAPTERPAGE(1)" }, { 'd', "$DATE" }, { 'D', "$DATE $TIME" }, { 'h', "$HEADING" }, { 'i', "$PAGE(i)" }, { 'I', "$PAGE(I)" }, { 'l', "$LOGOIMAGE" }, { 't', "$TITLE" }, { 'T', "$TIME" } }; // Safe because fmt is 4 chars long strcpy(fmt, "..."); for (i = 0; i < 3; i ++) if (formats[i]) for (j = 0; j < (int)(sizeof(table) / sizeof(table[0])); j ++) if (strcmp(formats[i], table[j].format) == 0) { fmt[i] = table[j].f; break; } return (fmt); } /* * 'get_measurement()' - Get a size measurement in inches, points, centimeters, * or millimeters. */ int /* O - Measurement in points */ get_measurement(const char *s, /* I - Measurement string */ float mul) /* I - Multiplier */ { float val; /* Measurement value */ /* * Get the floating point value of "s" and skip all digits and decimal points. */ val = (float)atof(s); while (isdigit(*s) || *s == '.') s ++; /* * Check for a trailing unit specifier... */ if (strcasecmp(s, "mm") == 0) val *= 72.0f / 25.4f; else if (strcasecmp(s, "cm") == 0) val *= 72.0f / 2.54f; else if (strncasecmp(s, "in", 2) == 0) val *= 72.0f; else val *= mul; return ((int)val); } /* * 'set_page_size()' - Set the output page size. */ void set_page_size(const char *size) /* I - Page size string */ { float width, /* Width in points */ length; /* Length in points */ char units[255]; /* Units string */ /* * Check for common media sizes... */ if (strcasecmp(size, "letter") == 0 || strcasecmp(size, "a") == 0) { /* * US Letter - 8.5x11 inches (216x279mm). */ PageWidth = 612; PageLength = 792; } else if (strcasecmp(size, "legal") == 0) { /* * US Legal - 8.5x14 inches (216x356mm). */ PageWidth = 612; PageLength = 1008; } else if (strcasecmp(size, "tabloid") == 0 || strcasecmp(size, "b") == 0) { /* * US Tabloid - 11x17 inches (279x432mm). */ PageWidth = 792; PageLength = 1224; } else if (strcasecmp(size, "a4") == 0) { /* * European standard A4 - 210x297mm (8.27x11.69 inches). */ PageWidth = 595; PageLength = 842; } else if (strcasecmp(size, "a3") == 0) { /* * European standard A3 - 297x420mm (11.69x16.54 inches). */ PageWidth = 842; PageLength = 1190; } else if (strcasecmp(size, "universal") == 0) { /* * "Universal" size - 8.27x11.00 inches (210x279mm). */ PageWidth = 595; PageLength = 792; } else if (sscanf(size, "%fx%f%s", &width, &length, units) >= 2) { /* * Custom size... */ if (strcasecmp(units, "mm") == 0) { PageWidth = (int)(72.0 * width / 25.4); PageLength = (int)(72.0 * length / 25.4); } else if (strcasecmp(units, "cm") == 0) { PageWidth = (int)(72.0 * width / 2.54); PageLength = (int)(72.0 * length / 2.54); } else if (strncasecmp(units, "in", 2) == 0) { PageWidth = (int)(72.0 * width); PageLength = (int)(72.0 * length); } else { PageWidth = (int)width; PageLength = (int)length; } } } /* * End of "$Id: util.cxx 1397 2005-04-24 19:20:32Z mike $". */ htmldoc-1.8.27/cgi-bin/0040775000212600000240000000000010464177324013245 5ustar mikeuserhtmldoc-1.8.27/cgi-bin/htmldoc.java0100664000212600000240000000663210047553615015544 0ustar mikeuser// // "$Id: htmldoc.java 1202 2004-05-10 01:14:53Z mike $" // // Java interface to HTMLDOC. // // Copyright 2001 by Easy Software Products. // // These coded instructions, statements, and computer programs are the // property of Easy Software Products and are protected by Federal // copyright law. Distribution and use rights are outlined in the file // "COPYING.txt" which should have been included with this file. If this // file is missing or damaged please contact Easy Software Products // at: // // Attn: ESP Licensing Information // Easy Software Products // 44141 Airport View Drive, Suite 204 // Hollywood, Maryland 20636-3142 USA // // Voice: (301) 373-9600 // EMail: info@easysw.com // WWW: http://www.easysw.com // class htmldoc { // Convert named file to PDF on stdout... public static int topdf(String filename)// I - Name of file to convert { String command; // Command string Process process; // Process for HTMLDOC Runtime runtime; // Local runtime object java.io.InputStream input; // Output from HTMLDOC byte buffer []; // Buffer for output data int bytes; // Number of bytes // First tell the client that we will be sending PDF... System.out.print("Content-type: application/pdf\n\n"); // Construct the command string command = "htmldoc --quiet --jpeg --webpage -t pdf --left 36 " + "--header .t. --footer .1. " + filename; // Run the process and wait for it to complete... runtime = Runtime.getRuntime(); try { // Create a new HTMLDOC process... process = runtime.exec(command); // Get stdout from the process and a buffer for the data... input = process.getInputStream(); buffer = new byte[8192]; // Read output from HTMLDOC until we have it all... while ((bytes = input.read(buffer)) > 0) System.out.write(buffer, 0, bytes); // Return the exit status from HTMLDOC... return (process.waitFor()); } catch (Exception e) { // An error occurred - send it to stderr for the web server... System.err.print(e.toString() + " caught while running:\n\n"); System.err.print(" " + command + "\n"); return (1); } } // Main entry for htmldoc class public static void main(String[] args)// I - Command-line args { String server_name, // SERVER_NAME env var server_port, // SERVER_PORT env var path_info, // PATH_INFO env var query_string, // QUERY_STRING env var filename; // File to convert if ((server_name = System.getProperty("SERVER_NAME")) != null && (server_port = System.getProperty("SERVER_PORT")) != null && (path_info = System.getProperty("PATH_INFO")) != null) { // Construct a URL for the resource specified... filename = "http://" + server_name + ":" + server_port + path_info; if ((query_string = System.getProperty("QUERY_STRING")) != null) { filename = filename + "?" + query_string; } } else if (args.length == 1) { // Pull the filename from the command-line... filename = args[0]; } else { // Error - no args or env variables! System.err.print("Usage: htmldoc.class filename\n"); return; } // Convert the file to PDF and send to the web client... topdf(filename); } } // // End of "$Id: htmldoc.java 1202 2004-05-10 01:14:53Z mike $". // htmldoc-1.8.27/cgi-bin/topdf.php0100664000212600000240000000301007362600430015051 0ustar mikeuserBad URL\n" ."

    Bad URL

    \n", ."

    The URL $url is bad.

    \n" ."\n"); } else { topdf($url); } ?> htmldoc-1.8.27/cgi-bin/topdf.pl0100664000212600000240000000055707251527653014726 0ustar mikeusersub topdf(filename); sub topdf { # Get the filename argument... my $filename = shift; # Make stdout unbuffered... select(STDOUT); $| = 1; # Write the content type to the client... print "Content-Type: application/pdf\n\n"; # Run HTMLDOC to provide the PDF file to the user... system "htmldoc -t pdf --quiet --webpage $filename"; } htmldoc-1.8.27/cgi-bin/topdf.c0100664000212600000240000000101607014351107014506 0ustar mikeuser#include #include /* topdf() - convert a HTML file to PDF */ FILE *topdf(const char *filename) /* HTML file to convert */ { char command[1024]; /* Command to execute */ puts("Content-Type: application/pdf\n"); sprintf(command, "htmldoc -t pdf --webpage %s", filename); return (popen(command, "w")); } /* topdf2() - pipe HTML output to HTMLDOC for conversion to PDF */ FILE *topdf2(void) { puts("Content-Type: application/pdf\n"); return (popen("htmldoc -t pdf --webpage -", "w")); } htmldoc-1.8.27/cgi-bin/topdf0100664000212600000240000000101307314150527014270 0ustar mikeuser#!/bin/sh # # Sample "portal" script to convert the named HTML file to PDF on-the-fly. # # Usage: http://www.domain.com/path/topdf/path/filename.html # # # The "options" variable contains any options you want to pass to HTMLDOC. # options="-t pdf --quiet --jpeg --webpage --header .t. --footer .1." # # Tell the browser to expect a PDF file... # echo "Content-Type: application/pdf" echo "" # # Run HTMLDOC to generate the PDF file... # htmldoc $options http://${SERVER_NAME}:${SERVER_PORT}${PATH_INFO}?$QUERY_STRING htmldoc-1.8.27/desktop/0040775000212600000240000000000010464177325013407 5ustar mikeuserhtmldoc-1.8.27/desktop/htmldoc.xcf.gz0100664000212600000240000015326310063150406016153 0ustar mikeuser‹ìZ \SWÖ¿ï½ì ‹,¢Fd³‚à.V+R[µZ¬U+î"›Xe™A­b­ vF­:®¥Z—Z©£V­Z¨B[k-¨l[@B’@ÞË›{^ˆ~u:ï›o>ƒ7ïœsÿçz—sî9÷ÝÄÅ/\¤HŠUÄÆ'Ä üy—•ÈôqÄ… ð—.¢—·!œqáá„‹«™\üH0ÓÈüMILŒ\ <…ÿVX ]¬ø'?ÖrbäñÁ×,L˜|ïÍÂ/¦yØkSKB'D§qôá“å#o.ã0Ÿù—Ô\ßÁÉ¿=SæUXÆÑ÷J.„­šêÅaî¯ý6ìý0='W~üuØöPŽn-:v1D]ÄÉY·sa5·'¶aŒõKÛ0&ÚZÎõß‚±¢‰'ió\PœþÆÒŸÃÖ~2”ôÓÖr!21. œÂ+&10-šŸ™Ÿl24EBj2þnsY–’»D‘› '¥.LŠŽQD/Á{J|”YôX—­–Žwç‰5Ä“È3àµñx\ÎïŒ×t4žÿ•x P‘á€Ø¶"")ëôºôþò¯µ/Cr“£WÞ»YY!«ÐUÞ¼§Ô3Ï¢E L«N£¶S4ºVØÄÈßR!ãH õ‡B¹Žè›5vC³þÙ:‚GÜ¢¼³ªRV©«ºy_ÙòL#þ}³û{×Ûέ#ìï'ñÓúþÓ3Û¶Õè`¹T"ÕÊ\‚£ŸÙV9ßóH ©¥dþ³÷TþÇúðs½çzÏõþGõpFÚÔJ3£3¨®çZç¾OWXå°>Óv•Ö5©5„F§ª+µÎµmT˜rm\3õ Y'K¯WT•ºë¥§²&´çö6*L¹=®ø½g‰ßsnÁç#;·>¾¾~„ŸÞ×§‡›å|ô´X€Y έD–B"‘b¹„ëDBŸGrB4œ­$¾”Ê»gîînNöR!Ë =Ï¢f6Θ6uRø˜‘C‚|=\ìD<Ÿãhœ8Ê}´;{çÖ™+’c#Æííé$哸[4œ‡$äõúò²«¥‹ÏÛ¿#3uöØ^ÎL ‰šRÕ7)ÖÝ­®,=4{u|ø@…ƒÄ§^N82š2Ô·¶èuͪ†š[W öeÆ è,ÁÝ"Út”¡1ÍcZÙª×4Ü-+Ì]1ØC΃I ­¶V­"Uzµ¦Y§ÇÖÃcšèVmãËÇÖGWšoAßÀÙIãåeeå7nýZ۠ѯ†nm®¿Q°}A(VhÇ×á(ýÓ¹Ãy»wçì9ªèòϵMXÃHÕ ­WVïZð’‡Þ`˜jݽ¢m)‘3¦Ïœ½pIÖ‡G¾©¬UãD‚2jèÕ/ÅÛ£wÆÖBYj¸¬îÕ>¾>¾þý‡›•²áð…[z4˜VUuÁúˆ@G>¼*2kÜoÏ¥rGWφMNÙ~¦ò¡Tš™VeÕ±åcR²]£=“dÅÙuö |ÿxùC½IE_9wþ@k‹ß ÞÎ}@Äšã -0-Ý|§0+¼'®µ¡ @‚wŽXwú–Ê`ä›ZËö-茞‹P3)ê<`î¶oktÐt£½S°z¬§˜|+FZRìþRò'וЬªµáJöœ;êi$vRJî;ñýs÷¸FU´æÖÑÔ]qlmW—! V4ÉèkÎg¾æ!z)E÷H™Ï¤.<à<£ÑÐpyG„¯Œ´…Ä;Áˆ%'Ñš´ºjlõR†îSA±û*T4d´ÕÇRBœù¶€¤Ô{ÊÖAšÈb+¾wvÅH7aH=ÆfÕâ^b ±¥®8k¬»ð) Õð;Xvú®Î„k}xñƒ ‘ œ–ç4xñÑÛZ._T ¥Û&{‰m)‡¾ >5'–j#Ýôã®o‰- isà†ÆT•}4oÙ¶€²"?6§œ,ß=÷`¯¹{+vÔb¯¹Ö-–eOë(ï=o_{•WwNíis0”]ŸØƒ?YFmh(Ý:©ƒéqì—ß6=xÂ7„w·5á5<çÔã`<ÜÖeޱ½€·Ðågïé“EÜ=³<´‹y¾¶î뺓éh«&éÈÆ|¦n/m0˜­¶rL}V·¿Òlµ†Fp©mGv ]vêW³#à±d½æiÓ¹t¤Ìwʦï´p^Ø\}<­cu I½î­LT{ìÓ×}¿wMÚâÅ)é+2·ä-ºökƒ–‹–Zßx³àƒ9\…d{°¬3T¿üpöØß?ùeñ¥ò[5Í-4Ä}5cÐ=ºqvSTHW ÙŽëL«úÁÛÕÕ·½Wû¨©Â=†«ºE]síóõ‘!î8?–ZtZJÛŠ3ƒ)5hÑ<¼yáàªéƒºI­ Ê(giC«N]_]zb[rx›„ÂëM›R1NVrÉJÓûUߟøpù¬>N" ’H=EJý@éNíÝ[×/}yèoËæ¾Ò§›,‘†$STIUÔ_/»ZòÝùÓGöly7ajXGNw¤–„‹Ì}”óÑ®­Ö.Kš7yÔ@ß®"ÜE¹%Y#q²6'k£G èÙÕI&ĺöˆ†üPäGù6ù@’×­s';‰çÈe •m…Ài#O –RJH bÏôÆþI™È$æÃ#H’"œÌO9"ˆ($NÛ¼Ò‡$}ßÕbšù^€÷-†cTç¦{bcW¼žU‚ ðþDÄÖ`<Ž•Kÿ0Úéó¤K°ªq ¦hÃ\î¬ÒS ã2ü0úc×a¤J@ŽÇ5†ƒ~£[#kéÛØ) gøÕÀ¾ƒñÆéú¶#†€Î§c¼q6HËH/DÆPq à¹@-Âf\ T€÷•ŠƒÃîÅW€ØÁ@]ì@ ´`Ó¶('Àr²Àr#q´`yÀËÅ,'£ËÉ( Vœ°t–”°œŒoÁvî.`Úúà ÔCÀrýr³`_®°— Ø JË7Ì‚] ÜÀæ• Ø v–›Çuϼø>°¯8fþ’i=.4àœ´Nf^?ãF`oC`f$\߀õžÀ­·Ö[üèÝà6+F´ d.XØÓVÌx)XÕ"°Ù<{8ãSã9«jñö —yäŸí¶¬}ÏŸâ®ÕqÝäl™:¶Ü°eb€gÁsvÕ€-KYæ+ç0ðó³³Èϰ2ì"–Ö­âƒÏÙ}hä|n«Éç=bÅ,ý«óÙÖ–;'»âñ6{¿÷ÍCÆp¿`©'ŒJ‘{µ‘fµ· Þ•2ý™…?¤Â›¯·åŸ5!ô÷o â"Dó® ŸÑ¸xš#€ÌêÖÜ:RXß™ÿQ‘ö6ï"…OûØ×û‰~âú¾ÃRò¸¼/Ý^Ü(\ÙVD8b2߉óá>œ¹€§xB‘GOx#A’‡ë)±V$´Ü’“>:o/O7GxÛ"@OlïêÞ£gÏî®öbîuÆܨ¬SO/oo/…»ù•Ó b†fzĤñ¡ýL/b(ôˆ:x3qÊ”‰c†zÀÛ Ý ò.~ÃÆ½ùVÄÔÉFsï­2w|¸sÛÖ-³–ƾޟ{ÇB z|Žï=jVʪ¿lüà/«RfêÝY ‰n )rö>eÁÒµë7mÞ´a]܆g~~áÛ‚ÇŽþyþîՑûãd‘â.ý§¤oùøðgGˆ#õ‡÷ý-ý­þ]Ä$ÏüAýu÷'ùŸQŸ­$ÞÉßÏÝ‹_¬*9¹7;÷ЩóEÇ·ÌÖML’B×~3Öì?y2Ovöžü“§¬ÑÏUH ]‚§®Üsâ‹£vïܾ#;o/¼#Ü]ZY¸55îíe[Ž|séÌæ9}|{ÿ7WçuzOæâØØÅ™{NŸË_=Éß^dï?qÕ§_Ú´tAäì¹q‹þ ú9%W§Ž0pÔœ5ùß—÷5…LÒ-4õ@ñWyé“^ ~qRzÞWÅÒBÝÜCS÷\5{Ô€€^½ƒCBáÝfNIéÞ¨àÎÎý#²N]¹=/ÈɱWÄæ‚ ù+^ïíæààÖ;|ÅgßlŽèÝ-`ÚæÂ‹ÇÖ¼ÕÏ£“\&wpîÂéÿP’;»—üìýut\GÓ/ŒÎÑh4 Ñ03˜™™™™-‹lQ™$Û233clÇC ‰í08qÀvâ$·zÆÉóäyß÷œs¿õµî7ŽÔ£ÙS]U¿ª®®êݽǚÈö¬\{åöÉAžOóŽkç—9Óm,-lèÎE#ç¯îhжì¸vqU¹›hiÙ™¥µ™þÆzTHà‰’øÙ§ßk N!‹2¿qlZ´-¨àm…ÑÓŽß8>-Þ3aúñ›'fÄŠMÙõ—ÿNŒY1ý:ö¿wi(]§IYøöͽ­¨XÄã~´bø´í½ùö¢ìàœÅçoîmóE :ÿAŒƒÂ°vÇ­«+r³—¿ss[5* ñ¸'Tçêm7ß)Ž*^ñ×ÛÖÿA‹'*¶Ü¼¾:ßÙ9Õµ›Ëõd´ˆõ*ñòÍ7®­.-_síæærÿ?Ð^]™ç„hoþ“öæ_´[€ö¿òEË;n^Î4þSæšíod¾rkG«ý¡…ZÔ¿óÀͳóUê”VÛ?ÁZ˜œ½èüí¨š´Â]þwb ;YâœÓ7ô…‰%‘Æc7ŽO7› 3MGV‹÷ˆŸ~üö[s“å$ û/ÿå$Å:*Äó©Yùê–:6ǧ œd¤È™acœ¤xäÂ5ä$Í;®_ÙXç' Y[`FLiiecöÓÛ[ª<\¹oáàñwO/HWQ푟^Ý75é_~zv(×À×ç,9{óä¢ÇÁÞÞ-0Ñߺ{ 7%08©fþ+—67p¶<4NÞÞÔàê˜Ù½émó8á·o»|õТ†Ô`OWW¯À(Ó8½ýéŵýí]kŽ\º¸Û˜¤$[ZR5é3÷¾}jóœ¶êêö9›O½½wVº–jCU§LÛ}ñòÑõs'7ÖÔ4Nš‚ÖôW^ÿüΙ½ÛwzëüémÓ³œèÖ†âÄì'NìÛ²ví–}ÇÿŽ ç¬i[Nž;}hç¦õë6lÞbZÛ?zíÚùSÇ;´}xRš ›`\¬îeÛöÀÜÚ¿E*¿"UJÛ¢Íû=røà¾]ßË5«V,^0½-?TÃ$ WC±ÒYÜ1sÁ’Ńÿ+?ƒX©Ênœ:wñÒ¥Kgtþ¬óór³R£ýôª©&þ O ‰œcÓ²P¨6¼ ÕñÖžÆ+<1#;'+5.Øt£@‚öK=S*¤´`½™#ìÙÂÌ?b6d:O,S@Y(ä€_¡RÏ‚øòï©Ç4ÙmmMÛÂߦ¹ˆˆÞ±•l1œü …~Ü¿ fFxÜEÕ¯8ª•q )Î øìÒÖ´~;29N£«£8@…ù(ÐbŸ´ÅÙ ¹fÌ jG@Éö² ÈŒ“ˆX$hãœ8@ÒW Ž[Ù›‚–W4„£Eí²h˜ç*¥#«Ñì¬MkШ EyNþf’GÿMÆý«ü´ ˆÉHLú÷¼âÿFjõ»ÿ&¯@ɪ@Qþó?U Vo*P³´ÿÿ"ÔoëØ€ô;ƒÃ÷þó}¿÷q¸@àÿ,B—šŠ‹ H­=&(£¦œšþ¿{×íË?,&¬þuûÇ"üàçý7døÁQÆZa„üÇ…µ(áó99±ç¿^Jó8ŠJÿæ*eñ®QÑùj9ß|ýã]‡‹Ž{ÑÅÑ5bÀˆú÷(t;Ð…±rèâ_ð¸çª-h=x›GønP¹H?CÇ %ŒŠ^ÃÃØ¯øõøy¡%Îæ?®Bél]ó ºúI®Œ†^…¸aÓ€j¬Ñ2QpûçU¨Dl[¡‚ænÔ€ˆ{Ilÿa⿎„{Mšü俾OJ'â¿¼Ëø¿û!pôVLüýƒWáÆ&N¡:.aÕlPÓŒN¼$2ã«þ~ÇTë¶ø‡ÿþÖTØyMXþýÎØ÷HÍñ™¿–tG ¦w&~3-4¼yo*ÈùZ:1±óÍ›$Üh^**ûáÚut­ib"ÿïk¯Œ·Qü…¼…–öÞšuøûãF„ñ»±h1oü*K 伞8‡ûWÿTãoèCW"Ñô1ÞŒ>´‡Ë™˜hùëCܨÃì?=.†"íè3¿Yã¶MLÈÿúŒ=n”9h*BÏ"å?†—/­žNÜÃýõÜ(wè%úÈ)_TY¢, ›˜˜ý÷GèPd×"{âªìPô‰OOLøüý n‹AuøèÏ=dTo[¡•”—¿L<Æÿý*|&â úÌÓ©T$ð.° ØÃY¼Ñg,ô"ºüÛt{pÜñbt9éïË0bϢ˿Ïr¯c¡ ±gÄ¿?`ËxFÃáŒÎe€iƯ"ðš<ÌGžxñ\|¶€…£àÆ“±Áñ¿/½‚K>÷ÍŸãïAÅ|+Ü¿Já>Ü¿Jál wý÷IëÿF1lõ¦ŸÿnÒÒü+‡¸þ‡¤p=$‡KHüçû!…8\”iü¿Ã.EpÏQ1lÚŽ7o G¯ÍYfkMÄl_B• Õ Î÷Ša¶HÄF[Âq½¶¶´¡rMÆ­TÏ• —F¶çÀ‡¿F9U\œiOî¯×T[U`Rv^~~¾Ëž—¤“hp4Ü”ÅUL›VáDZÁþzíϳUL[´tùÊ5ëÖ­Y¹|é¢iU‘ž5&¨pgïÙ3íÿþûµœ!4²}ß‘3WnݺræÈ¾#“ÓÂóæ™  ]qñâŠ% 2óë\5CTÞ¿pùÆc·¿úêö±ËöWÆ„•­§¹VÙíTk¯__‹6¾à‰o^kìéʀĬâÖ¥g?ûììÒ¶âìÄ Ÿ² `×›x+Ñ–@V®»qc]ÚL…^ªÉ¶TH¢:öܽ»§#ÊI)áñ‹7€—¼‹·&1>ÝA‹ª‰õ…’……ÊS]b Ö@ÛR7ß‚jÖ™aG€b¹p=xÊ5¼•Sîá-ã芠ØÝTîD·³£;•oºuÓ\JaÚì·á&Ô±²%½¬ßýÜDé•PÖ\›â,4­¿ugw[¸^.ׇ·í¾së -î§”e¨RX Nö)3dž •½óæwg: õEÞûä̒ƼŒŒ¼Æ%g>yoÃÿDž¿ÜìcÌŠˆÈ+z— ϨW°u…î<¸stí’ÁÁÅkÝyp÷î`¼ûÞ†&ñH¨š²pdټɅ¡jMS¸áÞ÷_\9º{ÇŽÝG¯|ñý½¿z¸ð_z絡k"*¦¯Ü¼a¨¯,ÖMdo Ûp÷›{'7-Z¾éäßÜýŸ;XM’„Ö.Þ{êÈšž“h…¬µá½OßFMòKÛ—¿ýé{ÿË,)ʸIëN_:6ÒïÄ#[áñv¨Š»³m'F[‰÷þËÿ½v¢€Ò-G®í/ ×ó(Ö–&¹µí %3]*6ÿíÿ}˜µ½Ì/»cpõºe33üUL;ŠÚ¼Þ~biò™ÿ£@È Öd®>$·uÖÐòEý5ñNºößV<þâ¿íy‚… •¯Éiž¹d霦X5¼øÿ¼ðDÌ‚`î`Ú@W–‹P_¸îÝw×ý5Xÿzý†üßþ&ªò–¡Q€Yì†Ð¬ŠÒ8_—·âÒ¥¹æèû×k3ñ¿ÿMTf/‚Á÷%"æë¼ýœELEòÀÞ½ÉæHô÷ké?þ¶•$öÃxÿ H©,.‹BâùÿgÌC¯M„ÿøÛšã[áåˆÐ6ÖVVÿMl…׸?ÿí/ÈA,(R/d*Z9b±i·š©`}ó(þí/t—Â:޳‚%š ,Ѭð¯×VÿöR&Ê' ²7 ²7 f.¬ß†€ûëÇ÷­ª¢Â­{¢)Å4Ñü=ãÀì#‘ˡ´z³´IãKåbÙÚÂúû*);+ÞmÃAéï‘–…vêþ¥(wΊ‘Y0[0Ì’fHï^¼| ÒŸKæþ .އ»ìÝw/ÌÑR,ð~Øä—®“$sý=‡ ÏÜüþÑ»[|V$uÎÒ+¾»¹2WÍTçþ5m ÏÜûù·oÎΊÚZ;xÔïøèçŸï­/Ð05O¦í€x<º—{ÿÞO¿>º±"WC!ò§ÿòé/n(Ô°4OR¼üVxtKâþû|xoG½Ã^™¾àÜ—?ýôáÆB-ë_£ \þ̚ʃ²œlmZ!¸ÿîç_ÞÿèØ”pǵ|Õù¾}¡ï?H~³°º‡‡{«Ø&"ÜýË·oÞýèÂâ <¤}ó™ë?¸ó_ˆžZRÕ±UÍ•)~ˆ ¬ÿÜ…·.½}C•¯kÊôíGNßøü½ÿBö³E“Ô>opjmНŠMB„¸û§Žï>|íÖþîøðòÅ¡Ït{ýþ„' Jû—,_4µ&ÅW NÖpîß·zã™[g–åv®Ú¼rõ‰»·þ åÌŠ* ÈiXºbÉ´ºT9Ý´ÌsÿÈö ÷½{eSoû¼«ç.<ðþÍÿ µÂ]Ǭ)§È¢®Eë·¬¨‹sd¡5ŒÃ›ŒSÖ]ºy|Å¢µ[wMß}û? ­qïb–¶t™wú¤‘ƒ§.o‰VRaLZ7¹aðÔû×îÙ·yzm×ö[ÿIgƒ»YÚ±uQuK_:»eJª­À\Ý\سç½o_>µ¶=¿e Š»ÿÉoEbk‚òzVî?ºc°&Ì4ò®¬M©Yóî×>:;\žT·é_tæ ŽÇðØU ‚ƒÌ;¹Æ8¼vÍâî‚`•Zí9°¢"*{þù?|~jVzDÕÆ¿IoÞÚR鯦’É$Œô#Ñ–ÈÐF•÷-\¾tΤÂH'Óº†»r`¤40zòÁO¾û`O[D@Ù†Qߺ»¿+Þà×ët¹€«Š¨™5<4Ð^á$¤Ùš‚ɵýËŠ<}JW\xÿí¥žŦŒFϺ۟œ_ÙUUZRR\”—àì™Ö>kP:#Jdå¯v.ÎuÒÆt®Þ±²-Bí”oŠÇhl®¼þÙû§¶¯]…­úiåÈâ)…¡~qÅ•¹Î"¡5î«eýI*¾cBUKE¬Ž§L1EcøÉsŽ^½úö‰#‡±Ã¿:°}I}„‹›ŸAä€È¸¯›‹üxT–ÊÃÏ]Á¤¼‰Ó(¦ û2«VŒàG~]¾tAO®—„ËeÙÛšî$}â%¥Ø(t&lcýW„"˜W­òÏËÍŒõÛÛšn<‘pßòÙkÈ1­¬,-°¿"4?Óz¢• S>7G´q˜‚{mc»¿ý‚ßl±´ÃÍG;ií‘ [â,1K¼%f*d‚pÿZ3¾ùAuŠ}Xiy}u[ó¤¦ IysK7ºŽó¹ÿ›Oøë¿ÿ®¶qú×åDòÈ ×•8\Þ¾ŸŠÃ%½Àá2šáÕb8)nÔÚ£ÖÈ5*p£¶­F–Q 5qbŸ‘nÔáÆk4£7JOí7RŒN0‹tIFW¸Òb$ÝqcŠz#Á艓ԭ޸1y£ÑÒè‹ÓuñFÜkï>£€‹3âqã4\?©ß̳î ÏÀ¶7<“þâYÿ†gÚ_<»Í<ÚÌ<•fžÒú7<›Þðœdæéó†gÂÿȳý Ï”)ox6¼á™þ7Ïž7<ÛßðlzóÑÌSÑbæ©ï4óô›bæ™üï<'FÇ2Í÷Ÿ¡æå— ûÉôÞë/ž¢?¾ÿÊôº>öº0öǧè÷ï¦ß¿|~?þýþj|"pb|tºžè·1Ž—£8]—Ñ߈Ç'ýŒ¸1^‹ÑÇh…0z­qcÜV£§‘€®zmqcª^£›‘ˆ³ª0ºIèS.F2h×gt2Rpc¤&££Ñ7žg4ièªÞè€w5êŒtP}ŠQcdàÆè“j#7fÛjTÙ¸ñ£ÒÈÁWF.n¼Ò(7òpãF™‘¯2JÜxQbâÆ[ŒbhƬ;"£7Fë5 bܘ¨ß(0JpãŽÐHqã!F¾Q†Ï2òŒrÔ;š1RŸ‘¶WA£ÄGÙFêžÍqŠ‘ öw‚FƒÏ12ŒZÜx7ؽÉÄ ’²´EXZ÷5|¼Þh4Žˆ ͘åT“ŒÇ@ãŒï1’Q öJìú3ìÉo`o5Ãõöv3ìÉfØÕ}o`¯6Ãm†]3å ì-fØ Í°Ç˜a÷0Ã.;³ë ìíf؛̰יa¯1Ã^m†½Æ {½öV3ì6“Ͱ;ô™a—¼ÝÅ {¸ö\3ìMÿ„]c†=Æ {µv»7°»˜aÏýìŽfØ þ »¿ö3ìB3ì¹ÿG°×˜`wì5Þúöv3ì1fØyfØSͰk§¼½Î {œvíØÉífØKͰ'ša÷5îžj†Ýc†Øi†½Í {³öF3ì fØͰ·˜aŸd†Ðm†9Å »â ìfأͰ˜ao1ÃNžb†Ý`†=Á {vÒT3ìžf؋Ͱ÷šaw7Ã^n†ÝrŠöH3ìmfØåfØËͰ[›CÞxºö)fØc̰OŒ›BÒ/(HßG/_ H5þà_/Mïþö-z‰>;þéïG«ÆÆP 7}ê[S”{Þ}öý~}ý6_üôoâÿøõ©ùúà—&¢‡¦^ @øó_ÝŽþ÷§ÆÛñßþ’:A¤ÿþ¸é“_£?ýûOÔåø}zü%zõ%úõýùÝß?L'þñè {Ü„ nÍ‡Ðø™¦ øË5и!›QajÆ,ú¶0•Œgš64hŒPãfš^ƧmP“inÄÐx¡N­Q“hnx¦ †‡jÒÍÜx?LJ>h|šš sÃ1ÍT`X ÔT››s#77ÖÐø¡¡‹GM¹¹‰67sÃ27¦én¼Ïˆ¡¦ÅÜ”˜›dsbn\ÍÒÜÌ ÃÜÌ ÁÜXš šÞôóæÏ]$üƒþN•ÿ`üaJþ!(û`³ÉfÓùþ/LõOÓe™ŽÙt fÓ¹ÿÃtYæFb6]÷ÿ·¦«ùß›.òaºŠ˜ÎÑܰÿ÷¦KùïL§úïLGþj:ò?ºþƒ…Û?Ø¿1]éÿÂt½fÓ…™M×k6]¤ÙtȘK2›Îòéòþaº¦ÿÎtÙÿé’Í ÿ¦ËøhºÿóQçøÿƒ£Žñÿ¨›0rˆ­Ao^=6ÏobùïèÕçâOÿÎ?ý}áOsx|ÓÁó¿;øüïàÿzõ‰¹SøõâïpnzÏÎMŒÆÿîÊtá+ôë'3ó©of†Ïþ¾úÅßýýhžAà×3ôëú5fî¯;‹š¿Þxõ÷‡~ý›ðÛ¿;ûäo'BQùòæç?ËO»•ŸÿSÅùÿÖÝ´ÿUʼnÿ×åüþÿZqæà0Ñ•¾Ÿ‡<€ÃY†Ãýd:A'âíð¤(T›Ã¤‘ÉTÕžL"¢ÓVÖ˜5fõš@ãI¤˜t\®Ä”xõ¸J‹iÿptruw÷psv2èˆx"f‡‘þ$Sél.ŸC§Ñ0‡÷L&J±³µ±±²´´¶±±£r¤ ¥J­Öhµ:½#¢÷òöörwqr´%íHxÒ3Š=ƒ'ó™ &Æü–Ád1™ ›i}€$¦EžR­Ñÿ_ôƒ««‡··§§«³£Þ–h‡D¸O¦8°øŸÃárØ,›Åd±9|>—eO²µ±DÛÕl~±"2¤& Ž®n^žî˜û+gÑÜÅdª[ òy\>—Ãâ°4&K€ 0þ Ÿ ²X[b–­ [{¡ºpquóôòòðpuq2Kñ”D(¹"‰XÀç ù\6ƾǠ3xP$JD"> YZ[ÛØ©B½“³»›‡»'@élp´3 ñÙžÁK%¾@Àç&T…Ç)>IeR©H(â I¬ÐŠ Iääéº8¢ðvFÜq0#S ‘ŠøÀz`2(dÏðER‰L.–HÄ>ÝŽ`ÀˆD2ßÙÍÝÍÕÕÙÉÉlA²%h‘L&|#ÓLåÁBÊ$©T. y ²-IakC8!rƒ“£‰B&“À8"‰D"°“nÏj‘@(–H%"‰L¦ƒb Ïž†T¡³³æ4n@ ‘í¡¢I°¤›/Ä„÷ €Lð (@™\& ‘‹‰6vbGfÀì–’È$Şɖ|È$Å D ¼ŒÍz™X,ä *µR][†R¯=Í A’€A%sL}‰N*Ê2©XÀf 4˜ScЧB$…¥•-™ÈÔØ‚ù Õ#ðÁ«¹€Õ¼^ÙÈ r¥L*ÓXàÔj­V£Õ¤4hck‡d @ >0ò9,†½=Sˆ:øhB±@[°èrN«Ñ¨´z7wWƒ>jmê#ý¾È ‘ó‰x–ƒ½_€|n¤Ù3$ ¥B"–Ê•ÀZ¯ÓI*/ÌëOW½ŒefµAƒò5€ÈÏ»@ @•  CŸ-R(år>G†:Àô?éD*¡§§—»»Á ;$2žüLo’4aS)4.êï'p.…Ä.SÊR1!ÑêÀpO´B™\ÙÅ ÒèÔr™hÂñ"ÅÍC¶C0ÐéL³6 é=°xΠ5N~Þ®z½Z¥ÖkÔR:a"ð|iÁ³Ä6¹²\‘Å;Èd" [!3Üt”Éüýü< bD£×i•ø3…0€³`I“ÃQÈG&d0%_È$L¶X‹:x¢b‹½ü½<œõ<¡L-ÃÈ@Œbĸ4&IÎÈbÒY ŒH„¤ˆÁU¨À¸l¶ZgpttvSúøyy¸Hd½Ž'‡k22™ÞÀàšPàñØt •…ÆxœÎ—(r G ê “Ü}ý}<]r‘A&e>"PÆ$ èDš=‹Fa°‘R™ c¤‚òSíé, "—ņ×à|> C¨ÀFÜ[ÀF©ÔADt•)|Âü=Ü4*®Á‘¯€…`œ#ìéÀ—Y ¼FŠ!ð9 —ÁGvÒz* ¡A~î¹XmI…@NÎGô4ѳèt†Åq œˆÅ< —ŠLð»¸jåΡ!þÞîîr¶ÌIÌ+ÁOd 4 Ú3¸€Í¢3èL.WÀƒ 'vàƒŸË¤lŽ àì^(+œõ:Ä:Œ™^€›é^ ²y”`¦â `®àŠÅrøÄX­ÞÙÕC«u òóV»‰$®ŽzƒZ©@G3ØB0ƒ EDĦÑiÐÐCsyró#9Tz'7OƒÔ-,8ÐÇE+Öº:Ò…j¥¦^1¼×dE‚ˆ·„Ï`QíÙl—ÍbKélXQÂã‹tWµ*08À×ÓIî¢iøbèA’!P€'‚¢Äa³i5=ƒÎ²¸(‰YjÞÙÃK!÷ ö÷tªaJÉU@®‘s82f Ñ!¬ña @taC7 ®DÀ„ÉŒ¸W ±Rïìî­öŒ ðvSóµj±@£V)U:…€'U‰Œ ÓØŽÏbƒ@6ƒ-+Êa pØRƒ³«·‡“[TX€»š¯tW‹y*J­P‹|•”f/A¾ ÙT†ƒÞŦ±¹b&×4 8“«·ÞÑ5$2ØÏK/–{ºð8j`¯°B•ˆN“ˆEdÉ Ú3až`0,ÈoÀ*äB^~*×hD®Ö*¼œ|¥äç*5bˆâù ÕlDÈPì‰4{äJB¶XŽÉX%ŒY££»¯‹s`tX —£‡b™fµN£âË´<E"bˆ¨(²s9L.ƒD¦ÛQÙ –€Í„YY!c eNî>zo¯¸È?//7)W¢Ñªôz_¥Ó™r›!¤PÀy 3b,övL:OÌåÈ!” 9:ƒ›·§¿S@dˆ¿—›ØÉËÉY«Ói _ WÔ+„<  3ŒA§P˜| È0•ÁöôŒˆ‰õ÷Ö¨ô^Ž' 'æ B–@ÎÎ>8“Ãç2éd:ÀgríÅठ‘Pçèâí¯ Š ôVè\Ý5j…^E—9*Ä<‘Áa@Né fu¶=…F¡ÂÜ.ÿðy³<Ü5Þ1áA¾O“XäŽÎàŽ*.G$ <Œw‘JÔéL&…J!¡Äg­H¢Ö;º}Â|}Ü$WµÒÑ 38‰E2’DZ٠6ÐÏä€3˜t…dÂ)CÈÈj­@¦Ó»x¹y„y»zûøx ¤ÎŽƒNÅ;iÙl„n.$—<“J‡)€Át€t›Î´ç0yb9d*•ÁÑÝÇGÌËÇÛM¯v6èõ­£†Ë†ü‚°Ç³ìA:“FEÞhOŠ… ?XåµAá‘¡@/7¸¹¸@7¸x WŸ+2Yb`Ïå8Øsìíé4&ØŸD·góXl˜Æu2•Þàäéæï©‡À§rGƒ«B$sVqE2“ Éã^¥;p¸öö¦áC£’ú³DJ•VÂ~î:÷ˆ@/ÜÃI£þ."™\ã„H ¤FÜ€€ÇË£Ù€bï@¥SÈ42x €Ã’)Õ:‘T¯wq“¹ÁøñvV:‹Åž»ê¤JGglSV ä|&bÅÊ p{&$0ÁQdr½£‡»6<ÔßËUïì&Vº¸\”,½+æ r{€/âòñüˆœJs Ó>¹R§«º¸†z{éÔr wtÕkuÎz¾@ ³ŒÇ… e†<˜Ii¦.8,±¤—ÔzgO•OD··Zåéäââæä¦Tk]”B’wÏa¢†f<Ç¡’©öT:ü‚ZC¨Pë\­ÁÑM«CÁGéê,ptsvs•Ê\\Àxà¿(ä0x\´<f”÷A{*ÅÆåòd ­N¨€ Bk ñw×j]œ:Ww7 Kï®â Øö<Ï»Äáq&`,A¥f„yUÀCˆUñµŽÎ.JÏ0/g­«‹ÌÉÓÕÍE1Qس9 Ÿ%æÓQYó¿€-ƒ4›F7„ÌBªRke0»øú†øø©užZ•—«›—N¤wåK,†@Bs!ï ÐÔMçôL¶§Â<ȆÁ,‚0)Të @"ƒ}=]5.0¤›‡Jíhà±8ЃLv‰+“ yö\–¦%²=aÏ€ä’-½Lù“>,ÄÏÇÓÛM󘻧Lªvçq(©ø߈;Ó… 6]À„ôQ¥¡’Á,x°F!ö.¯°_µÁÛÃß×ÃÍ]ÍS¹« B±LR 0ùMÀ‡YY­ó 98Ø3¹Z稆üMíèç«tUé|¼Ü<4Ÿ+äŠÄz€„ó4@È€˜¤Ò:ù'Rèö0ƒ²%* ¼ÏÉ-æN›‡ÎÛÛÝß tv° lHÅ{aÂ3±é/DW­÷Ž*ì Ð¨,šÕ…Êà¬wŽ ðsòÒºû¹û¸ÊÝÜL>› U„@Ä“d(€\a0!sR¨]BÓf ÑA}&„˜ãUŽNnîž|ýüýœ]<üDzO•HÀ‚œÒE±“þ ê³íé °žÎ+®¬wñÚOh4ºÁ`± ºpY^o~V P…ÒZ×5$"2:.9%=+'7'¯  ¨¸´ +û¶¼¤¤¨†‘¤etÔiær…é@£B¶~‘J!ml,-,¡ª!Óõa@žWP\RV^QYU]S×ÐØØP_[Se#èQ})Ôž\&ƒNÃÓ0ÆúÌj‡z€òŒbÇòÎÈ/,)-Gô5µ@ßÐPô4 ‡§Àž‡êS¹Õl Ìá2eø“jG°Ä[ÛÚÙÚ•1ÅeååÀ¾¶®èë¾Òþ,.$«0K!O„‹°…ºe•æ{‚fqÏÆÎŽÈ ,¬¬¬6ñ7uP: Óü±B¡R)å>ä7ý’(tµz­ÞQÎ&ÛZâ­v23 ¤¦¦¾¾þÕ×ÔTUš–^nôÄH!áÒªe"> ¡(¼`z† ÅòzG‰ƒ5”»vd‚½wI=V5`u'@‚JˆfH&O(•«5Px õL‚R*E•VãäæååãèçÈ%¬¬­‰dÍ­¸¾¾!XUiń| ÊJR)C¹:æh*U­¦O¿ˆ˜„ µ)ìÜK€øWÐhL`©U•*9¤Æ,4I2ù"Hâ50ºÝ=<¼C¢Ó3³ÒÃÕhŸŒµ­ƒWi5ð¯0ÆôT0¢„uH‡J\&WBtr÷róñ ‹IÌÌÎ-(ȉ×;Ø$’ 5 ´²¢†"FÿÁæ¥0œ´ÈŠ/P*€ü³§Nî—š™’˜VZUì«Év¥ÛYZ€aBy98ƒ‰¼lÊÅ<6ä‰ðJ‰T©5œ½¼\ƒ#cR²3¢"’Ê*k›'Oî*sw°µ²°&;Ô9t¨ÀdCB T«5J)@À‚ž‹j š½}@€„ÌâRÿ˜ºúƦI=SçΛž§±'XXØ’lH`@ŒqELàZµB 3+f{¤R£wtwvħ”DÕ¶uLîÒ3}öÂùÝUQb²5Þ’hG`š°¹ÊÔI.*øT:À@,õ NΫ¨©oëèœ2sÞüÉ }ƒÓ»:š+Ù$+ ”±`Ü@ˆÒê´ Ãv€œ¦L­5¸TnA éÉ m]]Sf.ZÖ¶°aõ¼¾I“ÚºÚ² t[+S(ဪ5˜æ†Z!â²í©ö0m†ÀJc߈˜´‚ªÈ¨Ú©Ó ×Ož»zî”IõÍMÕñb ¨€±Œ¸w4À".ª¨—ŠŽØy†D%åVÖ¤dL5Î^¿wý²ÞEÅÓgoY³xfÝäE3£¢b ×tR.ä,ð~_ã¨7ø‡%T•å-Z·íÀ™5.ݼb~_Yë̸Ik‡g×u v„DE¥#ýùRȪµJˆÁãAî!2HTAQ™UÅÕ«7í?uzÞôS'w¬_5Ø0£#gfƒqh ~Ò©É.!Å `}H«5z\,á: [ˆ ÏÕ+5þá‰ÅõóVlÞsâíîöm\5RÔÒ1cÞ¤ùK[ÚôÄø$¥%›L;j‘P³Zþ⊡"ö ŒÊªk^°yï‰ó‹Žœ¼~|ëêUSsZ*ëWÏko™ÓW˜Œø‹JJ‚2 Hû!{Sê]µ¾a)%™Ùëv8¿ÕÚwÏíÞ°º/«f £©ah ½yêì ‚€L6ð¼5RŽŠmÅk$J ØÜšôö‘íGέ\¹æÔ¹[ÖÎ**˜]P24ØÙ2»<6=¤83, 'ŠÅBóäµ!‹ 9“€Í“I”N~á©å3–m>púÒôuw®ŸØ¾qJ_ù잊º¹]µ½9 …‘ùinAQÑr Á|vqí!Ñ RÈ´qùUå‹Öï=}yëú·nœÞ³yh][KcOÓ²}õÆií¡qù‘An©î9 >äÅJ‰BèQ ‹”KDN>¡i%±e3vŸ8¿òè¶;öoÙ´xÉœYUƒSë{gf†¦Tf‡fE²Ø|±B­”I9,ƒ EžX%•ºD§g' m=töäùe‡®ݵeyþäysVÌŸ?­¾gVAXPnaYar¤s@jЃør±BÌæ:ØCÍõ5ŒûÔ’ÖY+÷œ~çÆÞ>³{k_äùýÍ+çMkèžÑœžžèè]YàSjUJ ’1Ï•°4î~Q9i%C›¿ýΜÓï_8°¥£§oFóÔž3»¦FÆä&gÆG‡$DÔ6¢¥2¥J¡†ä˜NçÒ¸ŽÐà”‘?mÍÞ·ŽÍÙ}÷Úñ¦´L©h^0£©Õ˜”—žåU”W×P˜ +VË ‡Ic@Å)â«\üb¢2;—m;²aÕ±—ŽîÙ>TÐ6mòäÁMmÆÂÄØÔähÿ4ÿ¨Èì¦ú‚”H_ QÈ|&‡Gg;0%\™Á38%º|Îúƒç,·¾ª,'<&¿®µoꔩ½ùÓfÌÉÄRãt&iR7¸iÃÆ•w¯Ý4«yzMMS]msAfBl_TvYn}yIF¤onu[o__F{ÕÀÜùódR‰„ņ„'Õú&L[}`ßÒ7OíZ2«¡­©®ª1=123(8%%,«¶¢$ÝÛ#¸¨}rÏ´ö’©ås.Z%åK ‚q`8ð.^¡KvžÚsýì–žÁiÓ;êêŠÂBÓ²b2âò *J’ƒ|Šš'wOžœ7£gÙ²¥#ë·ÉÄ"´ÀÌdËt¾©å3×Zsë⡵Õ3ËËZª«òca²MIÌ,®­(NŒN ®mŸÜÝÙ?³¢{ÅŠ‘µ[÷½%’qYtS¬róÎï]ºçÈ•Ûï[Ñ:gZIcSusYzrJ€o\B|ueE~¼X^M{gwßÔ¹K–­X»yÇÑ·¯ó…LMgÉ >•ó·®\{ëæÙ½Ëúæ””7WÕUAà—šš 䱞Ñi “º'÷UÔ/^¶|Í–½'.ÝüXÌçq *]ókïÞtý̦•+Ö”4U7–†Åf¤Ç¦&¦å——çDDå6¶NîiÊ.­Yº|Õšõ»O¾óÞ'FíiTF{ u%x _Àg3ÑÝ{²ºkk‰Y~nemee#,®¨¬nlëì1Μ50oÁÂÅK†—.[¾léÒá!*ZxAƒržÅˆ1ñ˜é¾úT¦T’­µµ¥……¥µ ‘éWÔÙ;m`þ¢¡å+V¯[¿aÓæ­Û¶mݺeó&{*FÅ5ä0PI*¤"Ÿ–X¨8dÐÐ} t˜h+Jž2wÁ’¥#+׬[¿qÓ–­fúP}˜jcO$Ew‹ÄbˆŠl6 Ý~€Ä‚M#AxKtÂìV»hùŠU@¿ió–­ø­÷€~è`Z`rD2¥J)“HÄBT,tS ÝÝä3ȶèÉ:¿YÙ¢¬…&þ›·ZlÅ6mÜ|…ø£ºí£P¢‡³ LÓMA!$årLþ£€ŽžÖ‰° ²³‡6l¶nÁ¶`›° ˜ýw4{E ªƒÊX ŹDÈå°i{Óî‚WPoÊQ¹õ™‚ooÂÃÆÖ†ž²dó–-[· 6l LÕ-Êé0Í}µé¶!­Â³ÐM‘H&SitP¥»¹i¹$0îKk[[zÌ"a©‡õT{Z5fÁT†Š ÐBÈçsèT*RB,–¢Et-º™¢B H JÜÐæÍ7¬[¿ÞžÆ` ,®dUh“—Ic{LôZÐC›;œÝ}Ó²K«òÜé¤ Á†‘<Œø¯_üÜ­‘¨4` Lù\"€ÜœËàŠ,DFÌI¦PA¾6¨F§VµO™Öʶ}GîȺukÑJÙ’€£J©”£=& "H¤R%”›r‘‹»w`TrznE׬%+×ωãÍbÈÛV­¦ÑÐÚ=“ ôJ%ZeñùñD"±D }j Z7/ß°„ô„ä’þÁ‘ÍûZšÈ¶µ²°$PH>`F´ÈÃ+T ®J‰ö«@€‰Å Z„…êÈÅÓ/86»$8Í8麇O]xçì‚ ‚……µ­5…f2"[ –Ë*%”¦>É`¹%«zµÖÉÍ' *=/&¢sÎКœ~ëÚ »Ú)Ö0ÎfþD…dÄÛ(db¡€Í0I •¡z™/0xù‡&æV4÷L_°zÛ¾S–í¹vùô±}« %$+ +´TÇ4äÌh3ˆÅà™%P©õJ˜ª}‚¢âbë»gÍ[¶nÏÑEûo]9sìàÃ;f‡±l­ÀMÈÕ·Z!‘ˆo«UZ­@èäí–TÓ¸Ò‚U f:@,z¹ BŒbHn;¹B£ÖòU¿ðäè¬ÖúùÃëv:yáúkϼufÝÊY‡Ì®ž?»›nr@)ZÿÖªx -bÒ‹rF 1Œ›^V=°dõÖý#sN^¿ráÂÙ³§;¼b$ñâÁ©“Lú ¡¶‚ÚX(H ‰ /3âÎ(Ôj½\ãäå’Ð0}pÙ¦Ý;·»~åÒ¹õÓŸ<¶©³¶gñ¢i=3ÁL«+hqG&’°9<™T††V)R»ûÇçæ·vÎ^»sß´é.¿sñÜÙõ+›Žîo_Öµdñ@ßœ…¦Õ¨†Ñú”HÈerˆÍjJæâ陞‘9}ñŠËN<éâ…s»—Ì\wÌ8»ghñãÀÂ&¤&­N+ˆÄ"žP†62`~ð ƒÒÝ'(>5>¡ $ر¸oäü¥·Ïœ»8R»èÄ̦þ¥‹çNXÜÒŽ0ä™0PI$P#ŠÑN@ÃW;{DeħtN_¸róšåGÎ]¼pþÜÛ‹f,>¾kÆeKæõ,lÍKGwßh Gû ȯÔë=ýÃã³ó¦Í]¶nÛ¬éC À©5g¦Î>±ËÆ‘¡ùÆY çd—=O$Qh z™@,Hå2Ä^§U*]ÁÒRÚg,Z±y~Ãð[gÏÝ¿vÆÚã»s&¯4,êJ©(*@ºHªÒêuj±ŒË—½X(Ñ ¤à@aI %ýs‡Ö­ë™¼ç­3gßÚ=xdkçʦ)‹N›µxzYdFm-”÷0«uz˜DàMhÈ)%Ÿ/ÒHe®^±é‘­Sf-YßÑ¸îØ©·NžìÙ¸w[ÏÜ¡E3g,š–ŸT]—–‚ç‘Z™L‚–ÑVø “‡_hr@^³qÞÒ5Ý+7?}ö­·Öu®îm[>¼hÖŒ…ƚ첚¼¸H”’ˆ*˜‰Ðd’mµF¯röŒ‰(ê¹`ùàÔ™‡Ž8ýÖªÖGw6.Y8{ƬM±éµ¥áaå‘Ä2µVΗJ0‰›àKè ¡ÔÑÍ?2)$¯súœE]=ÓÖ:zòÄúžéGvÖ–.Y4gú‚úœöÌÚœˆ°Ê<´ÍL¢/RÈBG ‹•b™ÎÅÆPekïŒÁ¥µSw<|øØ’5sŽnhiœ³xÞô™ES§ÖfyG”籸´H¨©D,™„/K” (à_?©`A_ßÈîm?ºldÁÂÖáEóƒófä•ׯFø–æFµ#þ2‚j¯`rb™F*Ô»xEùÆ•ö̘×9|¾D©ÔÉe2.Œ•X¤qtñöŽ*¨iél6.Y3oRsË”¥‹æÎš6¯½¬¨!=2»$&¥¬½½±µ¯-!$³„'T@Vª%l…Pª* è¾shYc{{IÝÂáåkûÛV-œÚ5»¿wVi]qN¹^~HQiEkcÇ”ê¨ðô’>L]z…Dõ>œ×àèìå\PÕÚš^5uѲUëæt,¨,›3£wVoVe´®(.ËM®(mimèì+ÉŒŒ¯ª« ;^r•T¢”k´"p@À€¸ÒÆö†¼é –,ŸjÔ4Ìì™1£-¼°""»¸0?ª©¥©«³*§¸°º¾¡Uˆ‚ˆV-Jø2 (àæåWXÓZß×9}Áð’溙3»§÷t5WeD¥ææ7·477uM. ®ª©ojîË€^…V b­ Ø»y¦U6µgÔÏœ¿pYKûªYýÓ»¦TMj®NŒIÌjiomiínI M-¯khjíhø $R¹X ì]“Šj[óóŒPõ4 ÎÉêœÑ3uFu~EnHfFZfeKSKo}xbJ^]mS[kCœL®S@’ò•2™ÎÑÅÃ9,§¢®¨ múœÙM“æÍªl˜ÞÛ?­,"¯$/&3)¤ ©¾µ»)1>£²¶®©¥½¬±D¢Ð«`ƒ‘(R99¹¸{¤ÕÕ¥Wg/èm›3§¢ifoOwQvN^~QnRrVCms{u^|de]cKGWë°&~HÇÏêœÜ=s*ZêúfÌßÐ;Ô\<­gr_[Z^ADVNRlqC][k~NaYuCckgwIÿ’5ë¤j…‘T!çu6„e•––ä÷L5³«yVSCWogomM~zXPBn5"oÎÊ+«ªkjëȘÜ4´fý”wH•|H µG÷äüꪜIPŒN7Ð:©»wr_IAjaXDVZt~CC[]|HXnUMS{Cqý’uÖ¬QʵhG²\¨28éœb³Jr*ð’¶¹³gNííì®KLÈÉIOO,)®o¯M KÈ+«ilmË›9mÕz¨k6j5Z©R¨–ÊôŽ.>!)U9…]=ý}%ƪòž¾öŽÚìÌüðˆÌÔ‚Š†Æ¶ŠÜìòš†ææÞi5ýk֬ݸië…mdÕIÔÀ> !«´® ¤n«èï/ïèé˜ÚVZœœ˜Z[ÛÜV›SRÝÐÒÙ;gpxåŠÕ×C‰+WË´bXªwtt N-Ì+êèêêíé˜Y^7¥£{rQY^hPFbLq]sSIhBjeUCkgYÂ¥ËGVnØ´qãæ]PK©`ú×:s«ÊK:'·vϨ­ê›Ô×–’U•’™˜[\ÛÔX È5¶Öç”×-[>²jíú Ûö—NŒþ¶1 ÇÅ)&FŸ,Ʊpê‰Ñ{E8:N71¶/ GÃ&F?í¤á(8§‰Ñ±åŽ8Îublo(ŽˆsŸ{+GÀyNŒ]HÆYã¼'ÆÎÅà,q¾c‡Ñsâü'^¯—âpcÓ1tÂã¾éÜös:‘€êH¼ ¯Õ@îiñ:¼áw=$R>‡aO& „W¶øgƒÙX0›—Ö66²A‡éž¢}yt3L‹Îèô˜þÄgG˜Ï$|–…H ØX£xëQk+kkkÌjÌÚVg¡×j¬5£@¨Ãë~Ôœ\\]]œ!q˜TjEÌf -€ÂÆúµ•5Y,‰LûNk®qÝÝ\+¥}MÉ–`¢y¸XaVãè—¥õŸVdƒ4 §µÆBû@§wtvsóðpwsÒ«eB.ÓJ&ÚÚ fý €ÿ-¬^ÚéuzP¤ù Úpqu÷ôñrwqÔ(Å|DF"ÚÖ&vÀ ³ziM2ètZ¥æµ Ló À¤®®î>>^ž®N[£[út´lCLðV˜õ+èÀ6yaEB‚j56š10 ¦þØ:£c@ìæd€´ÎDlèØé| }à¡;ÄØFc¥~ˆœ\ݼ|¼}½Ü Zµ‰ŒI§Ø¡/±´¶4CóÊÒpLî!0MÝ=}½½¼Þ>Þ€&°ËqY4¤½•IKŸÇr¾ÈtòËʆD¢(QØ„˜ ÞÕ¢ŒZÌë 2$ N">— QÑd> ˯lé"´H,s9:™hmMr +Ü€»«³ j^xÏÇnæ%ò8,°=ŒÆûšÁAûOÑ2;Já fé!è ó"¡‰;Æ}ÈyÓ…=Å|’$ Óèô&¸Ä§1)è̈C±µ!ØÓxèàÐ#ìÐŽX.÷ èÄ›ÃìÀ¬&^ ø4 â"|$–𨠅ƒ=Ë´úò›0âZp1ÞÏf5 Á…>àý'¨ÇâÓ¹öÀã?‚‚_.¢ÙYèö,¹ ÝŒ0ëoÉçò,xß#è#è@2éÆãƒèt.:þõXÈC©È°³!²h,‰Xô†Ö‚‡@Âø¼;`ù. ¸›CG§Ñ½€¯ñðrdÚYÛ²i`Yø€φ?ŽÄzŸ‡t@Ç i|aÍB›.¡H¢TëÝý=XDk"×ÍG€[ðñ‚1¸Ž‡~ @(€Ó@^Žƒ=›i"p¸2¥Vkp÷ ‹ð¤­H|0$ÆG6_‚|tTR(‚âû.J,&`H§QØf©¹0„ÔZ½³»oHT¼ÝÖŠ,bsá};`úJ„ŽÀ©0ÕïJ4ér9T ƒº31¸J‘Zk€ÄÝ/:»"–N°¡ éÜ¿øŽ#8‰%hÉ[²,¥ŒƒÅF ^ð.ਠl‚Ÿ»y&”õ-L¥l|"3Iÿ»Il´æ ¢ æòbºFL§òLð-Æä£/r…` ÕhBAçâM[)6¶|¡ùLªÈø mËÔèÑ4€÷8i‹‚ÎEf {¾|¹R­ÑëݼC“J;f-Ýsñl Ùš(£ýç&hAy…ZgpF9–Š£îŒµûB&Ÿ.Ey š0ý¢³j{¦/ÜzæÞw·íl¨Zü‰.SB¥ìŠˆCBƒƒü}aˆ!/`ÑåhƼ©Ö9z%µö ,ßyò½‡¿>;¯·%0t|.RÝÄeÞ¾ÁáQ1Ñ‘¡nàHBí|Ð Õ¼#2«'õÏßpäòÝsŸõÇï[ø¶¡ D´IÔàdb“œœé\E»`ÆUB1ç˜PÔÜ=}xëñ[‡ßÙ¶øþ÷þnt°±ÕjyB‰\efï‡ØÇ'¥eb™¦§ø»Š&§0âi´Na™µS×ì9ÿɦ½o¯¿òû³ß^þI¶¡8 …J>$Æþ¡Ñ )é™y…E…ù¡l®Tfº¹¡Ñ»Ä—¶öÎ\¶íø¿>í{þü‡w~¸ñìõ7¢ GÏW#þaQ±‰)Ù%••¥Q ¦X‰îMhõ^Yõ]Ó¯ß{ñƒk¿?ñýËWGWÿþåÓW/w D¥Zâìf–?2Ès ʪj±Ú 5 z°±VçXÚ1uΪ]'o~´wÚ§Ï_¾~÷ðOGßzùâÕè³Nª Ù pòëþq‰iYùEåÕµuXÝÅÚD‘Ý‹pôŽÌm웽lëáw>9<л÷ãׯ/¸ùüëW¯^¾û.œhÃtRzƒõAü¤´œ‚Ò  ·¨»Ÿ`J2Ý‚Sª:û¬ÞsæýÛ»zGÞ{~åË=k^}ñztô5öúáèøØI± A©wBä1À¾°¬²º¦èÑm0ŸèüÖé Vn?výÖ‘ÙW}ýüÅæ}Ÿì}=:6:66::>þr Õš¬Õ†EuNa)ÚP]S[W_W¯Ò¹¥ÖL™·|Óþ·?øîÐÐæ{¿ÿúâõ£ã/¾Ÿ‡ÿ'Æ¿ ±#ptΑщi¹HöêZ|­EÝ· N¾1E³†7î9uó£¯ÿxî·_ßZür 8Ž[?š€fbü˜Ð–¨Òãü’òJh¿†ß‰áY Ó¯ÚuôÂíû³7üðÙÏ—6îØsyttlbb?ŽM¼6±Æ&n¿¬'[Û»»$gæ•UTèµ5HüÚÄòÞE«¶zûîG3G6ÿñðÙ ŸÞ;óó˜ù;(± ü¸õįŸ8 ¿Àœ‚’2´ «Áj¿­©ª¬ŠŸ»bóþ·n~ñÖâwßùüÞÎïw<ùöá·—?Aßh7>6A˜øulØÁ†ìá–V\^^QQYUVUQZRX±a߉+>øþáéó/YsóùëÑg_O˜¾åu|‚8ñüIÑZèãSRŽ/Ç*>+/).ÌÏNOò9záÎçw\zøxÇÝÕûúãåÞ'&^|ñúʉññ ÒÄóñC|;·Ô2¬ìà“—›žæ2Z˜ŸŸ‡å½ÎÍÎÊÌÂgaÙXæYÙYY©)Iñ±!þÞ.Z¹u-FzaG‚–hg‹ÙZ­lŸÛUUT”—•”aEX±EÑ×…EÅEE…è;PÒ“ã¢BüÝô ‹Ó'‰dgGÄmm_£¾«ÀÊÆJÝÅEÅ0PeaEÁSD™â뢕ò™0ñZðDÌ#ŒAòoiû'Á–TQŽXá‹îš¸šXæ ¹ uBD—“Zʃ–b⊾ 1ÅÛŽAðI s)ÐÇbÄ´ ¨¨ Ë-A°Â¯òs3“cÃü=´2$:™úÚÙ¢¯O! +FÀlŸƒ t€//,À ¾‚nòòó %E9é Ñ!èäŽ-=A àöxÛçÐIEY`QŒ1¾Ëû.7/¿ ¨°¨ ÉËJ‰ òvѱ=ų® ûïfMˆå¥è—ÅcEˆ3–å`¹_çÅ¥e¥Å9Éñ1A>®:—A%#ˆì£g±¿j`/ÁŠGhè›Årsà_’»+}RR˜›•–šèí¤£BÂŽh²ã ¿ØmIq‰ ´üÜ,ç«ìœÜÜ< EúäeƒõbÃ< 0d ÅÛŽ¢øb„×6DëMF+ÿËÉÎÎÀ¸¤0¾ æd§%Æ„ø¹B¶}:Ñl> ÂOˆ¾QAæwÍÎÞÏ+*)--Fއ$õSâ"ƒ|ÝôJeŸÈÁÎ$ÀÝâ7ôYˆNArp¢âb†RZRLx°Ÿ‡£J„ª8ä}V`ò_ý‹ÿâFJ6Œ“œ?r KJ‹‘ûšÀû©¤8?'3%1.:,ÀÓIÁ§SvãHùg6ÀߎŒ°Â—ù€Sff¶Eö—ùEÈ“ ¾¤´ y0Àä©—²i$;<³¹nkO²ÑfæçådÁHð²s Ll²xŒãôv&Œ?ˆÀˆÀom@y"H²¥ú#úÌLÐ ;+Çät…ù&úâ"0iøQaAnVjLˆ§A)`RÑ—È‚ïØ`6¿ZÛZ[XÙmÄÉY¨,ë•©4fL"”˜Ì— ‘ü¤(7=!Üß]'áÐHhÔÁ¶±†^ž1ˆ–Öv[Z`&>Ÿõ'ZˆÎw€°âï‘þ™ÙùÅå•¥YÉÑ!ÞNJ>ƒŠzÀ¾lòKªƒƒ.„„qWáàA!¨–‘F ^YV”“î廒M.ˆ·yJìËucÙAMiO$df_ƒæâ Åó²3Ó3À# ”cUOË‹ó2’£ݵ(Müd Pk*º ¤dk ‚=‰ 8`Ù£9¹‡W‚²3°Œ‡Ùy…0UWU•—d¥ÄyèåT¤àƘͧ„’þù“’¶–V$Ù-ôÈA:€[š$ÈÖWb•?£W˜ìíîŒ1- ØXwÍž\œídz³Àéteb&²D]dÙttœ¦¸¬Å8¯¿æe$FÂxT‰¹Èÿ6¶óê JbÅ+¼-“ÂŒÈF_2øK^NvVâž_\äÅðÞOyÙIÑ!¾nµ„ÇB¦´.ÚØ†{Çå×—åÇ+h •b vÌßËÈ@Ò PTÞò¤$À<`ZV@#ÚΖ€'q?ÛS#BójKò³c<Õ ¢…5…j‹ P0r3ÓÓR’â¢#‚| £Ö*D\:*¥ÐX¶qK,m*ÏËŽô ÷á‘­­(ŠW’?# ,XŒ¨ÓR’b£Â‚üLË¥:•t £ÕR‚mdISeQn”‹{hRfœ”bcE¦“\ÓÓLú‚+ y(>&24ÈÏÇÇËËÃÝÕI¯– 8ÕìP4!Æ&äÇ ƒÃ¢³Ê²‚$4[k;:ÅÜó3Râ ò÷õBks˜Ç\7ƒZ.âšÖ ÛúêÄç·ðÜ’ŒH? â ªNC15'3 ÂHDh ?ZÛ@+=žî.­B*äšf[‚]eIA¬Ð;-³¸<3Ì×ÝÙUÃ$ZÚ2˜ú4Ùhj71÷õƼÏ!zw´:¢W£ÚŠé`*‰sr£]ÂB2˪³"|]œÝ#sÃ9vV6L†*5f€„"¾Þ^î˜û5wè:ШÐÒ ©°'%G9ÅûVÖfGú»+Ü¢‹«ãøÐƒƒƒ<.>6<4ÐÏÏóyåm‚ï~Ã=ÚÆ€VGÍ"Ø‘Cœ=‚Òkª3£üÝ¥nNÅ5µmÍ1\’5ÉV„E„˜è1ïW^žèü)æq­U8;9j•rÊòÀ€‚Úªô(7¹Þ«¦¾¶½¥"+ˆO¶²f1„AhE ­w£µ&À­u`.óPq‡8Ñ­]Ffa}Uf´»‡*(¨¹¹½«¹þé§Ÿ;ÚÚ0ý¥j½££y}6qOJIƒé%i~ÆîöŽ–ˆôŒÒJ(S‡&Í^²ýÜoÿøÓÓßÿüíÚ‡=úz¡`-ñk PU{A]ôYÙªægguwv†ÇÔÔÕ×7O™·öØ»Ÿ?üáÇŸýãÙå[[æÝúðáƒ6¦ ÁÅ[îÊû…D@Y›œšž‰2 ¬è|A^pç¤ö¶èúú–æ¦É³Fv_úqÿå·?_ìÝûÖŠ“_?zôÛç)T+²¯Fëáã5}\BRj¢/,†dëBQhUÕ俯¶¶ÖIÆÅëÝü)ì_¼øyò?Üëþ¥§¾ífkÉõ“x™ÖˆÎ0SÃô†U\( Ïɪjïœ|éîW‘ç<{vbÙ–{Ï~ýúáá_?ñrtìõ«Ñ—¯FÇÇ?!Ùðü¼SR3Ñ™ñÒò²JTV}]Y¹yïÙw?þö@ïùÓ_~ýùâ³ç—¼|ùìÏç/_b£ãØ‹G'ÆÈ¶Ž~áYÈþ%(A´¨xPU}øíÛŸ?|òô÷§?<]°õç¯^ÜÚ¾k×ùgÏ_âG±ñ×ÀÕë7_4Ú[Ñ¢|3rò Á ”på••1WïÝÿþ'°Üó×î<÷òíë[?¿sòñ y ÒÑ×cV¿~ènk£Mç1Qcå_eeåQÝøóïþquÙ{7~}ô鞟|ûàÒÇfâ±×¯Ç'l Ô_ʲ"…¥¢Š³ ðÏ =‚Z"ì«G¿þùÇïO¾øîë»oo~ÿù+Tê¿棯FQ©ÿC,ÑRœäƒ²ÛOŠQée*²ŸüöÇo7¾ÿìõñ[<ýsôÀǨÔuåøèØyâù>‘ Ñ;(¡•å…XÁKHÌ 0öþmhñ¢E çÏ™300kö,lÖèlSóhÆÔþ¾®Öš’ìÔ¨WµˆI£R)d2…Œ'ãI#adŒôƒ‰Lظaýº5+W-[ºtù²¥ÃK‡†–â—~1´dñ¢…sgô¶Õ•åź«ø º=ýCÊ"“PGäß µ]¿~ÝÚ5«W,[º [ö`éÐð’¡¥ÃÃCCK– -Y00½grCif¤Ÿ£œKw°Çì1ê=©i=£ü ÝPHÛõè;¼VŽ,µXŠ „ˆ~ñ¢áeC çÏžÙßQ]êip I '¡Ç—Sà×sÂúõkW­ñ-–~:¼dÉâ¡ae1Hb,œÕÕX’ì㨄ÚßÁ@Þ/@²}ŸÅ32aýÚµ+V˜:_²Øbñ§‹,\‚,^6¼dîÔ¶ÚÂŒø0_g¹€"žŒžb½`äë$; aýêÕ+G–/]™ ²`pþ‚…‹ŒåË— ÏŸÞÝ\Y’›è,2(è±8É‚üš‚dÀÈ/ HúÀ¿\´pá‚ùs±Á×KÀ˱å‡L›ÜT_–›áã(F2% ÆCR^’I6kV,Ã/{ö[²èçáç}98ñÐÒ‘aɼ}]mõåÙ‰A^j‡NÜ© \ÜáG;"GÇA†—÷Á¹óæÎ‡Íû|د –,š3ÓØÓQ[”í뤰4º@#ÄÈWHd;;ÂJ„ÿ2pŸ%ÈæÌ™;wþࢥËMü—.^0wöô®æªœäP_G´~‰à‡'}F¶C+I6€‚o /˜70{`ÎÜyó‡—¯\a‚[ –œ?³·­¦(=.ÌÇU#bØS‘ p’I¦Fý†Áò€ÞœY¦æ.ZºbÅÐ/G ΞÚÑX–ÅS »šÏ¤šÜØDÆAÎÒåKAüE‹Ì˜5kølî¼ùÃ#Hÿ娇eË—,œÕ?¹©¶¬$/=6Ä]Å£##`”€‚ÑŽdc«hZ¼xÑ‚Aè`æH0wñ²lä>Ð #+†Æ©“Ûš›êkJrƒ]$,{0Œ'°ƒÝ¢ ”Aþ3€~þÜÙ³fBsç‚ î#ø‘–.ž3kZoOgwwW{cyV”¯V@§~_D–$ÚXÙlræÏŸ ü±™/g € ,Ç/Gbü¹bœyfo_ÿ lÆwÆ)õʼnAnJžÃ_8؉ÖÖ–PÒ/4tÌš9cæ¬Ùsæ .6©L¹lñ¼Szz³Á¿çÍœÒV‘ã§0Ð÷ u["цmkiiC´edMŸ1sæìÙsæ/€ñøýb°AWqÖàB£ƒ3ºê ƒ\<að­ëY—ëÐWØQì½ú¦Ïœ=0wþÂÅK–"jlä›eC f»º§Ìœ³]¶dÎÔ–òôJ@;Ìn=¡ó¡õôª@Ž­¥d'kŸ1{î¼A[~qéâÁYFȦ€k¬\¹béàô®Úܸ@'ßÁ´(ˆ~Y÷tN-U‘¬ñVvDz)XqpÁ¢áåˆþ·¥‹çô÷vM1gpxÅ*üª_F–Ìîm*J ÷2ÈX4;ÓCFA“fÏé©ô ,- ¶¤ès.F#ù—eÃC çLïë:m`!t°z¶ê×Ãó§¶V䯏©øL²•ݧÖ3fMíiÊ â-ðÖšS×üKLÑyhÁœ™S¦gÌ]¼qÿiåŠCó¦¶UæÆ‡¸k…Lp&àÿÊÀ¹]­0¡}›(§Xá­íI¼†…KÐè\´``ÆÔ©ÆYó–Œý. ^0³»©4;1ÌK'åAJ4¹Ì¥•åÅÙNöK;;‡Ê!‹Ì™1Ý8mæàÐȪU±G–-]4oV_[mQfB¸—‹œKCôx»/mªË3Ê*KŠ+ò¢}8D´Ë¾`Éð¢A#3f,챕ahƒ=fOëëhª,ÈLŒôsFëBæBëÈÊ꺒ÂÒ¤¢¦D1ÉÚÒ–NÉ\Ž=}Ö<U+°—–Ãh¦Ljk¬.+H‡aí¢²h4´¼K´Î®¬)-­ÈLih¬ÍÑRl,‰R «ƒK–‚3q§— /^8€tµ7ÕW—çeBˆvÓH9t´ÊL´©Î‹M©ÈW6TÔ6Tåº8ØZÙÉaý³Ñ@Qi „Š™ýÝ“Zëª*J s3Rb= èÉ2öd2 …ªŠäÊÀЬ¸ÜšºªšörWº­¥™â=y?„ºóŽÞ润†êÒ’ü¼œôĈOg\Àv@ëë6ÕùšäަæÆÊºö¶âXgÑÒšê1b ¶Äˆ»µpÞì™Ó¦tut´45Vü9ÙÙiñQ!¾nNZT‘T Ѻ°*?,/¯¡¥¹¦¶£©899+ ™ƒJóœ‰âÜŒiSº!eoii¬)-F+5i)q¡>îŽ*‡E£ØYä‡T§µµ´Ö7u6ÆÄ¦ä•—%쬬IT÷©sfOëï›ÜôÍ Õ•E¤'%$D…‡x»jƒF±M‹Ï¬ji®oíi÷È/­¨«KA†{×tc_wפImPìðYXÖ¹ÌäÄø¸èè¨`O'DȦS i9éPý¤žš _Hëëë3d$++{çÉSz{º;ÛZÁxEyY™©P¨bñçãb£Âƒ}=œurH{ˆmÍÍ `wuMprHyU]C}CC[[œdieOwÔÛ;©­¥´Gëd©À>)Ÿp5.2,ÈÇDà3I­í­M]“ÓÝRâJ«ë›ZZòê§Ì©U‘¬lL¯ÎÉ­õ•¥Y™™éiIø¤ñÄ$, K¸¸<œÕ"¥½£©±orZjz|Uu]CSs[[mùŒ¡¥íj²µ5‹éÙÒÜPUR“™™‘–œ”ÔFÜñĤ¤äTS†ù{ºjd4€¿§3ÑTT^´wLê™>8´býúvÉÒ†Ë ª«.Bkßié©©É©Pަ¤¤¦¦§$'ƒ>nZVcËÔο̌ªÚ†Æ–Öšª)³.[±~ÓÆ‘&©%AÄ +ÊÎDël©))i¦RPQ弄K»ó;ûZbüò«€¼½6¯°|hÍšµÖ­]µ¬^J´$ÊD!ééiX–z:€ÿÓ32³ó JŠÑ¢q\°¢¿Ñß#¼Ôon›”S6Ð4´nó–Më×­^½vuƒØÖ’$ç…§§§X§àSg¥¡¥Ò’Šêººª²âŒxCupb\yM=0nÎj,˜¿rãÖ-›6B¾¶qóæ U|[+{…(.=5-%TN6ÉW 0µtt´5Ք幅û•TÕygkRvãÂÕ›·mݼeýº [·lÙµgËÆš£V%ÆÉÉ)XŠ#C=•[XZY×ÒÑ3¥¯¯»£¡Ò/¦ü¦±­³)+«ixýöÛ¶lÞ´yçŽÛwî;~ñDÝÚZ¬uMNN‚ÿA€¬¼âŠšæöî)ÓfΞ5£¿§-"«¶¡¡©­³°1cÖªuÛ·oÞ´iãöÝ»·ïÚwðÄ;w??coMtVù'&'&¡j0¿´ª±}rŸqæÜù ˜95±¶¾¡µ½¥®8cùêMÛwlÙ²yûž½»÷ì?tâÂ;¼ÿ`Ÿ—5ÕCŠÉ¬Ü¢ŠÚæI½Æhâ„lhp <¾£+¥zÒ²M›¶oÚ´eëÎ}û÷ì=tøÜ>;{ãÎãïWªm­9žÚ¸¤´¬¼’êÆ6ó‹– cÃ!£)jjk¯H*œ:²içæ7oݳß¾CGN_¾óÅÑ·×ÍÿøÛßOáÛX«¼}Rs Êj›;º§@]844 5ÃCæ3RÖÞÙ3#oѪ-Û7oؼm÷Þ}{>qñÖ§_mØrbÕŧÏ~{þE͊誉*è'õL9å yŒ¬\½fíÚÊªæ¹ —®î¶nß³oïžGÏ\ýðËvÿöüñ;?ÞúóÅå ’%Ý[]ÚÐÒÙ3ÜBÓgtT84§oÏÇ£cï|¸ùÂø~ìòøë{qdKªŸ_¿)ç2“ïܽÄ=°¯uÃÐdë®Ý;vï?zîÖ'_½¿kʪ{£×ïï]ûúËql?öýëÑßwi V² \ Y±QïÙ»ÿÀ¡ÃØáoµ¯^»nãŽ]»wí=xúê_Ü;6÷æé‡cc[÷ºwÜrûþå‹?÷²­l]g/]¾ôÞ¹g߃‡9нx¤cõú­ÛwlݱïØyîÑ‘‘]_Œ½|âÕ7ãè6ö8åc A ٚᛲrˆ 䇎=vì8vüá±#í›¶îܹ}×ÁS×îÝÿòû_þ¸::vyxXã'°±ë£ãc££c/öjmm”~=[¶›iŸ8qòä‰cGµmÙ¶uÇÞ£Þÿ裯çmþhì=îPÛbâ2ºƒnÞp0ö´ÉÁ’¹ÆÆ‘cÇöÔ)D} eÓÖ]N_ÿðËOæ¬Ý{iüâí÷?<÷t|Âbâ•Iö «‰[ã·}‰VâØºƒ‡ßP"Æ÷ïmÞ¶÷Ø¥÷?ûúíåÞ}òíñß÷ýúý£ï.dØø(¢%L<{¾oEð [uü¤ÕÉOO=t`ßî Þz÷£/¾ûé׫ïxaë£ããÏ'.¾FÒ"*Û‰gc_&‘,ÙñGNZžüâØáCû÷îÚ¾©úÒ{Ý¿|>~ò»íÇÿx9~ðÍ:ÀÉ ÊÄã—Û66N! M¸=|pÿž›×¯.ë·Áàq£GqþèËèûq~8‹‰±[a8œÕÄø|œ7Îzbìý`œ'Ž€®zàl'ÆN+pn8âÄØy8Wib|ÎGž;#Â9á(c¢qŽ8û‰ñFœG›_„Óã&ÆöZâ´8úÄØNƒcLŒ}áŠSã˜c¿„âT8ÖÄØx"N‰ãLŒgá8îÄxNŽã¡F†ãOŒgã¤8ÁÄx2N‚NŒ‡ãÄÐŒýæáDc_Á›8ñÄØuN€“LŒ€F:1>„ããdãÍ8N>1‹ãB3öX„ãàãoA£œŸ‡cãTã™84cOø8&N:`â4ã-8N;1nÀÑQsÊtêºs@‡^Jp4œ~b|»é Äx*Î5@ã81Þ…£B3öœm:1¾gÔ5[ ¹Ã°gÑxLž=ÓÉYçè®ó ô p㩵bž@Ì•Š"±@ ¢gdâÝ…"©\ãšÙ2gõŽ#oÓ ôh¥í—2¸„zùº8y{¹ u|/“‹„"…T¤ø|–=LUï“\=}ùæý§®ßt`2àM…F®qrqòõ òÔ:ûøøy:ê|[( ÅjôPx!_@góe [Da×â »N\ºóÅ%:“ÍeËÔƒÁÙÅÏ7<(ÄUï¬ó÷õ÷–¹x*x"W.ˆ52±=×ÁÈÕŽþiÍs×€èï~ôñ;Û<H/Ö9»èÝC‚ƒÝÝ}<|ýü•*Gôh5¡\,ªµzôhM.!VèÜc+ú—o9pæÊ½Ï¶ï9kÏfråj…ÊÅÝ+04$ÄÕÛÇ70 ÀO¦u‘ñJµT(DçÀå€ ×-V9çNZ´~×ñ‹·?úäý…³§3Xb…Jèäâ®ó ñ6xú…ÊäNJ_(“ŠD`­\$°™©Ö#¡vöšm‡Þ¾zëê®Y³¦gzÐé<±Zgpõrò õqwó Ò,‘Z$Ktj¥VÜ9±Ú1¨ wÙÖƒ§ß¹~y׌Eë¦ùq˜L_®ttu÷2„‡Ü‚C‚‚ g=—Ï—ŠE—»ZS Ôy&5ÌÛ¸÷ÄÅ+ç×OÞXçæ`…7ÏTJ\<|ƒÃÂB]]<ÝBƒB2g _*ËDrtTÂtø•Áeˆ5.¡%ý+v;wùì–ô¤z{.J¦PÙ\±ÊÉÃß3<2ÌWäáê¤Ò‹x2‰B*Vê=T*™=AÝà—Ѷp˱3W.èÑ9ØIT&‹N£3„RµÂÃÇÛ#:<Ô'À=À?L's“ó„2¹T¬ÖªôJ©”v,Ÿµaßéw®½½(JJµ§‘itúJ:“§vöð ò‹ uŒ  u‘éåBO"k¼\•R™€'u È™¼|×ñ ï¾{¬#€Acr ‡ž6Á¨ ˆ¨È0gO¿ˆÀp7±AÂR*T™ÁË UÈ¥l±Ü=ºfζ£gß½}k½¿=…ÉãrÄr5¦>epñ Š l¨Ž11‘>þžáîzƒŒ«H%rÓ]=¹„Ã7äô®ÞúÛï½»£5˜aOg³y“›oPdbjv¡-Þö"éâãï®pÕð|™Déé©Õ*å™Ä-¦nÁÎSo¼ÿþ•%5> *“ÏÈUzW¯ÀàÐðؤtž€·ýPìé.ÑIÅà®b«Z¯VH¹2M@þÔM úûwo¿5¯ÊƒAcA øEªÒ:yû†Eǧdd’ˆh/Ó¢½!Ø[ç$å(Ô ±˜k€»Ð%®qxï©K·nߺ}i~¥+Ææóø…spL|xdb~YE]1ƒF6ïbZHäk]TbµH,qòRjÔ*‰HïŸ7sû±ó×oß¾yfew¹3›U'W»G„‡§äÕ4´wL®·c0i$´©†H¤Éäz¥Hæîæ¥Ó¨¤\C\ÓòCg¯Ü¸}ûê±Á9•Îè¹(b¡Tç•çŸQZßuü9¹oš5”ttÓ¦Œx$ÓJdV£  fl;yñÖ­÷nݹ¶rqƒ§ù±ƒ ÇàØŒô’ãÀ‚åë6oÛ±H°"ÐìIDl¥»^«Qi£[WzûÚ­[ï¸çâõ¥Í‘,z³Ö%(«´®sæâ¥+f÷÷Ø{šH$ØXÚ1ì)hcÖ­ØÓI§QŠ|rz·Ÿ¾rû½÷>>zmßñiõé\/Uj½¢ k+k—¬Z½f冡µG†l V64:Ë8ð´Z•6(qʾ³WoÜþøƒ‹ÇNlßUæ@çŠå*ƒ»Wxrn]o÷†Ýö??ÿ]JEð¬(T´™î<Ñ–çä›Rl³kwޝ•O¤söI¯ëšÞ5صîÈöáë?8ôÍq&Ç^l £-iÖ¸ƒ-ÑΡûâ¦íW®ì¼¶Å•S{#iÖ–Ö|©ÁÍ/ - ŠÉ’YÃï¿÷ýýï¾zù¡•çÀuáIvv‡ABß>$Ú|ëøæ{×ÖØ7¼õh¡Ÿ¥•¥ Oîìä’T6yÉœ<ùþ“ÛW/ž}ëäI K;.ƒ §’HvŸ…V‚ì|._º|ðöé ›woNæZXZ¸J7ß°¤²fã‚•[ö9¾gßQH >;ai‰'rÙ¼Xw2™dGq–s€¿¹òÎöSGÞ=±ÙÊu:K Ìb3«öôO-k3.Xµmÿ‘ã[÷ž âxoÿÈÔÒºæyK×.=¸çÂá‘%Míë²÷ž°@ýÏ ˆ¹N«"HD;[×…Ò àKkÜ:±pc- oaiÍNô‡ªÞ3:©¤ ´¥óÈŽ»úf.¬©Ü=&ÉÂÂNÁ>áœÉ!îR t@vïì¶µÇÖ6Eð-,¬,"ß©òõò‹Ími9sîPˆB)º{UÿvÄÿô@‘sëw ˆD/@-sÚéOÚ²´¿3/Ql ˆì*‹‹JÊ«î˜9¼a÷¡c'Ž[ÇŸx…žó„zø!•¬K'm †f÷©fCo~nj˜;È ØMN=0=')!³¼µpÕ–½‡P}0~ì¸ÅqÌoqz±ˆ|®ÅQˆ$û)èA”ÖåEû¸hd\^b2ãÔÚÖ¡”ø€Àä´œ†Þ…víØµyõa(°c£V …審 ~¿ˆL²U'(i0šïÙ9y”>›Æ0‰¨ût÷œê¬”À䘄”¢†•k>¹2g^ÿœ©ëg-¶4Ñ[üÎTk–¡5ZWÕ\š•_ÙÔ9eæœyÃËG††{¬ /°3yÁ%KNˆ²-ÆÎŽDäÊìÑ~G´4ŠÚ™{^þöÍçlÊL/ËJË)©nšÔ<©ÖÜù -ârÍ"üfaää^@'Úì$HÅΨélìýóûŸÜÚäŸSQ×ÛÞØÐØÔÜÚn­$™<Èoù»4ZëJ±µµæ²Ñ†Ã;Tô½B¡D¨Voýþ»ûŸ}òV~N^¤»GTvxXD|fIe}Û$+¾• A„m²HçF´¡ò)(*9 'éœÝ<¼=}F}û૯ޭJËK OH-ª…PZRRZbi)"íy$…¥…Æ™íLµ?âSa4Ø:8œÑž'ow¿à=~üUDÑð(°è¨èÔôt ÕÊÒõÀucI˜€=MC÷ì<½=ݽ5®^~¾Aq1­Ÿ<þñéo¿ìO ÍIñööòwvŽÍ©6o ¸³¹\;"ÉÚv|~î—žQpô·g/žÿùͼ°èÂÌpŸàXô`¸1z”ù#„”Mãƒ÷ÚPØ$;¢­­KhhP2—e|“—›¹àáËW¯žÿþáÜÔ¢þI¹1Ö–ÖÐDøÎ¦°ìÐñJ}ûgڰЈð°0H.CS¢£¢bbÊNþ¼øãá…[Î~ñðãkǬ@‚qK˯¨L*ô˕À·•‡øú@¶—“š˜Œ%v]}ú{ñÓ³?ÿxòåÇ?<‰0ž€´Ç,ƒ`a ϳaS‘ýÄ!Á!¡Xè— EDdLFBLLlD_ÕÑïþüó÷ߟ?ÿý§ß_BȉǑþØÑ©tÔ5 mýÙ–àååá,æÒ¨aÑXÄã &]W°â­¿ÿùâå«ß|Št7Ð{Š"µi6&ÚZ1)(1øˆ UA€·V«“Á§(ޱ‘!ÁþlšX( N.[t÷—_zBpÄ,ž¢gzÑíaÙB¦)uŒëï‡ù}ቾ̄bA¡ë#"ü½Xt>z9ÔJ©ýë! ƒŸM>hiã`OæKÓ¶×÷m9>>¾>èY< K†ƒÖÏ/0Ü“ÉTê<‡i/9…¢iÀä¿È^è4 xßC(€(\/è@®Prm©öZooŸ½ÜÉU©utÓõ 4°²|Et É@ýÚšiÊK>ã£oæsr…ª•§·—§+Ÿ§vrÑð˜L6ÓÅÍÍ‘ƒ,Þµ´³§5XI¡Át,ôòöòvÎ ¾T&Ózzy93J}Q— ƒËÑŽÃkù3ÅÁ´¯Ÿ`ˤÒhvD™:˜ê"C_†Õ\âæéáH`q îîÉFŒö:›‰èèO£©`>ƒBd@…¾ ÏIkæ¨öPê “§R8zzH¹\7Ìmu1fm:_kaIw Ò‘÷Ðö$¢Žh¿¢#ëôNNb­“§§ÞžÎW«4zƒ\©ñ÷òÍ-&ìÆ‘ïXtŠƒ-rÙžlgçêêâênP*¦o‚rÒ¹xzêh\‘H,—³Xÿ @? ²žå žÝÞtC’êØÁÅÅs}¡W›ƣĔß+Ü=<Ôö Ó—pyL™‡§§7Ìèd2 S&¡rÐð'ò¨$²-mtEbà‹ÁRWLN⊄B:G«cxñÅlMãÈ}#[oZ²íòùCóÛfOëi®ª¯ Ž K.ˆ*-/Kó,jèèêQ\¶hdŪµ[œ¼|÷󇿸P’A¡çV>gýŠçÎ^¾lJmEsuCID\z Äž‚ªŠ²´(ÿÐÒ†ö®ÞÚy=3GV®]»õÀ©wn}ñÃÏù\&Û/wñÎìY¾bÿöKÇV´M1¶”×6T•ÆÇD&G¥WT”&GÅ—7uv÷Wu ¬Z½jí†í‡Þºv狇O~}Ïãp™­wJýàŠ=[/Ÿ:8ÐÙœQY[_“”‘ž•U^Q’]Õ<¹{jUõÊõkV¯Ýºçè¹k|ýðñƒ÷Žð L*= úWÍYzúäžÙÓj*êêë3#£RÓ²bÊÊ "£‹KZ&÷NʯZ»zí¦mûO_¼õÙwí»8ðƒÃàÊô®1í‹Ön?úÖÞ™ ŒõU5µåñ‰ aáée¥Uùq95m“§N*œ4´zÕ*ýÜÕ;_~óÝ·_o¹v‡Å`‰Õ.žU3†¦n:{`xÊôöšÚšš¤ÐȘ¨ä´¼ÊÚœ˜°à‚ºöîžÆúYC«W®Ü¸óÈÛ7>úüË»'GÖ.o«+cÑybC@f÷âiC§l™Z_R_S•›áë›Q_Z•™V\7©eÊäá¡5+GVmÝwòÒ{z÷ôÈÁËïÖz99³8<…s\Ýì½ÇŽlìêïo¬«­-ŠI OŽN+­J MÉ-išdl©ž¾jÅò‘õ;öŸ¹~ïã÷¬<õéš,:¶íÀgé] ºç¯ÚydÏÌ©í9MÕµÉa±qQy1 ååÉ‘áÉUÍ=Mƒ@¾jËîÃßûàöÉ¥göä)„r•V«×q¸2·”¦Ù}[í\Ò:« ¢¦®(&28¢ >§²4),)®¢©cZm˲•ËGÖl=pòÚÝ÷/­™Õíhú"D±T!‡ªÝÑ»¤»wêÞ–Îȯ¨«Ë NŒLOÊ©.N L¯iíjž¿b¹éöé§ëw¹øþ‡·÷6¹qhèÈ)ßôÝ ®&8§múÌíÛÖõÎï­ª¯+‰‹ÏN«ÎIŒË­oïëꜳbÙÒÕ›÷œ¼ñÁ‡×W×ëùèéŽèùr •ÞÉ•HsÊï[°~ÛÚÉÝèØViPTHPQJIuNt|Tqã¤ÞºY³–¬ÙvøÂí>¾¶¶X)†R\c†¶“Lä ¬¸ÁÍ›Ïjʪ¬-M‰ +ʮΈŽ/¯­m]´dxÕÆ'n|ðÅgï®É×Hx<‘Z«Ö:º¹f´Ï\lúvÇK²²‘e³«ËKÊ"â“£rCJªRâãã*šûÚ§é—®Ù²ïÂûßÿüЪµ=ZR§sñ Ï™4tìú‡÷!Û¸`G¢87t6”††‡$'–§DúfT·v5ÍX¼dùú§®ÞûüÛ·.JÑJDR¥«pDtzí¼m'.}øå}ªÞ#]$3‚*«ÓcÃÃÒÒÑÓk³ê&ÛZç-^µùÀå;Ÿ|ûäþîá½N£uô ŠL̪œºt×Γg/|úµ2&ÌO:OV$¤$§fF•å'Ä4w÷v.ž¿hxÕ®37?üê‡Oö­^ïhPœý£’bóê»v={îê;Ÿ~Iæ ÙP F Oføå–äTäÄGä”¶§VLY¸ddã‘+w¾øî«ëë¶­IrrÒé}ƒ"¢ z¦í=wýƒÏî?øî{kk{ß‚vÖPhÞEu9 QåÓ'•Ï^0¼jçÙ[ó臯œ]“®ÕJµÎ>áIi…]‹vïã/¾zðÍ÷~ ÚX9–=ÚWB¡º%%ÆfÕuN虵`xã¡+÷¾zòóÙOž^ÞP¤ÖITÎ>‘™¹5Ó–îÿê³»?œYÛÁwx'$%å4 ¼òуÇOžþþdzç/^¼THО#æN„ºšaÚóFõ›10ÿðÕ;÷~ûæÚG_½óÅ­Ó öl½ÎÕ/:½ jòâo½÷å翽øõþµ>ÿæ[!ËàLGi€°$‘©Tûä­çnŸ¹üãGg.?þâ£w'åÓìjƒWpBNIÓôU+On¹óã;Ûíßrñìæ‡oólUøÚZSD\{ô=“̾N¼õÍ·\ÞóøÛKkÛ$d&Ké쑞”—ÙÞ?8íÀå'__úüÇï~øqôõç–4…@¥Dû1l2¾=…L¡(NüpïìßùøÎá›w%T;:]韕Ñ4tòðÝïŸŒŽ¾|ñüÙ³?ÿÄðv2±$Õ•ã‰^Œ6*QCQåñìë3—î]ßÝ*²%’íåža)¥Í}Ë÷]¸ûÕ£Ÿ~þù—§VO¸ix #BfTnô”`) èÚž^þòã_?½{òèñH;ð.™WDZauÇìÕ.øàñOß<~úô§ŸžþðËS ÃÛJdª¾D $ò+|ÄèûàDÇŸùäÁ÷W??ئ¶±±³³—xG§×N6Î;øöÍóß?þùÉå3C«nt=x ™ÌE¥Úsg"ÐÜëÝxT¨Âb~øþÄ{|½÷Ä"­µÉ^â“S1¥Ë8¼ò‡Ç¯~Ú²ÿ̱ù³¿{Šú_‰Žšä·ý€ž—àĤbÔËžß¿vå×O·Íð·µ!ñëCcâ’Ë:–,ݳçÈw?ýùÛ_~þÙ—×÷~èŸâ)®êI‡ 8/ÙGMƒ¾rÿâÛ?¼ûàúÛéd‚ö—¡Ìøô’º®Y+v}ïK@ïË_ðOÇQ{ÏtÓm_†'º¦{ í©T‡Yoœüðû×kYl»Ò9‡¦µeÕwÎÞrâêÇýøöö³Å/]ð-$Ρ·R! Póãi*Õí½ß~ýå½S^yAS¿îìÜjLL̬«o[´ùôݯ?úèæ0|°ŸÇ-1kìÁ î<¡¡’mµÅ…J¸ÿÙ­ÓëzâTkú¶¦ãܺ¼ŒúÂòºÞÁkw¿ûþÈñG·½¿ÿ<ðEŠ¿ƒgùzœ®eÀø‹ëR}ö¬í) ttu*úíì/¾oYøÝÙÎI“ç,XµüðÅ;œ³sýüÙûgñ˜v oåæ“»Ã‘B¶©Ñ6?Fd„‡——¿‹¯Ç–Ñ?^½xž~¡a±©Xê×Á'F_¾|ñdÏðÕM¹)yUsæ¬\½zí†[¶n³ÔQ9ÿŽ,×éF³ÊÑEŠWXp`BnzZ|Fäѯ`lÝ=òãûí q%e¥•uí½ÓfÏoASZá;ÿ;!×É-J&ìUödŒü+Õ“™››Ÿ•qà¥ÅËG/üðËš’¢êÚ¦É}}ݽÝ==^FCȽƒ7„ ü0\lå ´CT˜–˜’™‘“™•—‘[¶õÙ«W¯G_|úèå­Žüâ¸ü¢²òrÈ a˜Ò-À䯸ab9XÞ³áqLzgfe¤eÆ%§ç56¬úù÷ß_ŽŽýñó‹?·&%%Ädå……T`6FA«ºa"HHŠ5ƒoÚÞš\˜_˜—›WRZ^ß<©oðã¯FG_¿þãÏמ›’›™›—› Ä/­mL°ã±óx‚#³#S¬©bS¨Š.))*DºúúÓgŸøBÓë—Ïž¾þíýÝý…‰ÑaVàåVoè1ì–‚)Bk;1 r`:ÛZ R464b?6 ÞyŽv  ~^¼úãÚpe¬%RÀÚDÿ ÃÛKÙb*™B°9ßQ=‹òs2ÑŽ”’²ª¶æ–I}- ßûóõèè˜ÅØ£¿œŸ“„8 ·Æþ ñÙB€ÍÎF@§{鈎/ç`ß•5VUVÖÔ”fͼýä%?ÿýùèÓ+sù(ÎQß XB¨•IÖ:Úá¬ÎÏËËMGßS뢰sJ‹KÊŠ¹œÀîµG¾üó£S§ï}û…Ý ÖW6´ç #ZñÐ|JQ£³À±PŠl¬lD‘%…EyèY#N)U#—¾ÿñç§¿ýŠÈ/à-þBÏŠÏ¡Rí(vV<&º¥¥BÛÑb /TðmÅŠðÜâÒü.KéOš5ûÐî"ÈñøG˜Ùo­¹l*Í–@°ä2ÐkU–s?u •“ÔâðœÜ‚Ò; >9ÒQ§W*#“‹[öÞ{‰·á²tŒðÚŠÏ @|©ÎÍÉjLˆi¿gŠøá¹¹yEb¶j^LbZº¯*%-)oÒß½-—E£¬ù  þ”fÈÉÎÌŒŠä=Ëî–“Ÿ—!“‡¤e'x;;;ês ‹ò-ÞPcØ8Rà†I²'@Þ"tà@/.Y™Y‘™JÉ—±˜ ïœÜ¼T[ =ý«q¡ð©öt®ZHãò¨^éXú§¡B‰JDgè,nFn^2ŸÅIÉÊIK38¸ä!ì-÷qÔËMº€Ê„Bßš,¢ÑéTJÚ (ÉÔªàЬ˜”ÜÜ&“’ãÂñ,*)*F¼-_cf>Áð<>Šf[+:zd8†ŽŽ}áÍç‹=}bb3¼£ss¢9,QBlbJº³2¼Ü hm è™$xe#æ9°m1Û÷¬¸\*”ÿö‘Q1Ñ®<žØ#8<>.625;'„Áä»{ø‡ ™AÕåewl!ðaøŸ15—ÍB &b&JÝx¡øÐP‰4XàoAþ陾l&‹Ådr9çY0`P„a+“€¡Æ™!$ÙmìdT_Œc!¿hù\®@ëà똒–æÆaâ™/Xl‘Nq‡ô2­=WÖÑÉ%2-/»¬­³«¾¢·¿¿wR_W|J|tLzQBu}sMf@HQemsG_qùàÐв+W®Þ¸ëȹZ•\)é ç ¤œì‚¦ŽÉÍ=íÕµ==-)Yùa Ieõ­•9ÅU ­“ªº§ /Y¾bí–]'®Ü½£Q˵"•ÞQïqºª¬½³±¤¥«­±³§»=7#4!-6§¦¡¥<=2¹¤º¹µ«¢mú06Œ_~iÕÆí‡Þ¾ññýëèFDïäè–œU^ÞÖÑUW]›ÝÜÙ5¹ ¢89&;%±¶©¹$#<ÉÞ]]=´mf6âo®\·uï©+w>ûìÖqµD'Ö;Ô~±YÉ9MmU-5u]=eé©™9Ù‰õMYɉ¥Åõm“Û kæ ¡=å«@ùó7>übßÕùŸHÔR¥ÁQ둚[Z×ÖQÞÒV×0iò¤Ü¼¬¨ØL(›ëò£ã jZ»'•´ÍA‡DVnܲûôµ;Ÿ>x¸sÓçß)d­Á  NHK(im¯«hmlêœÔ•—˜’˜˜œ^ÜÐR›ŸQRÛ<©«©¡È¯Þ¼óèÅ÷>¼´eÛ@ßÜ9r‘Bíèä“–˜ÓÜÖÑV_U9©£³ª05$4«2½®µ*/:¾¢¶¥©wÒÂÅ‹ ¬Û~ðìµ÷?|gÍÚ™¹ƒ^¥P(µZ÷ÐÄÔĆ–ÖÂšÎæŽŽî˜ùbRóêšJ“ JËêZûZª§ -Z¹q×Éwn¾bÙšƒ]îlúŽ •@«ò‹LÉ)oi/«¬.˜ÔÑ]˜˜ž’ŸšÕØP”ž”]ÛØÞ×R1°dá‚E#ë¶¼ðî³Ë¯IÐÙ k ¹L©ó KŒ+ih­-h+¨ižÜ‘]˜VÚX_›VÓÜ1³¾yá¢P€ó+·Þ=wg‹—éK/Øè+гŒbâk[[šsk[:Jãr’b33Ë[jsc£ ê[º[‡,\<²nÇÑ‹·ß;ºf]ƒF£³8<6FOíꙘ\^×TÒÞ^ÓÒQŸ“T]ØT™™YÖÐ>µ§sú¢ÁPöï;{ýÎû;:|ÅL[(¡G<Ë´6$!€_TS_PSZרÑ—VœUÛX‘‘\ÞR¯pXë©H®­œ·ùÐÅ[·ÞGdÀÓˆ’¬Æº’šøÄè´òÌŠÚüT(Œ;zZgBá6¼jË¡ ·?øÅÑ=Õz—/Ñz†$OÚvñýO¿„äù1Z¦FÏ4¡xU4dÄEeåÕWç¥Ç5õÍšÔ2}`Ñòu»Î¼ûñ·?>|ëh±£F •k@\ÉÐÛ÷Ÿ<¹÷ÙwþSÌ¡M{Å)yéyI•åÙY±•íý}]ófÌZ½íèå;÷Ÿ|vdߥ|¨û5¨îl>ùîÕ_Ÿ}óÅÿöŒ$s¨vÓm_Ÿ¼Ê’ê⬔Êúɳú«»._¿ç<ÈþÍÍmo]+ÕëÕ‹WtÓÁ»Ÿ¼ÿó‹—V/Y[Ù‹!s°Ew+ÈnUõ…Ù  ÝÝýó†Vmƒúà;(­N¼w½A­’ªu®þI]Ǿd„¯G៭%#b›Öù?"’ôéyùå-SgÎëš¶`Ù†ýï~õä—óŸ¿øäæL•Zªvò Ïí>ñí‹1l {ñú“»×/cãá’µ¥—C#£ûv²¼Æ®é3j{fÌY³óÔÍÏÿvýÛw¿:ye“V£Ò»ùGæL>øùÃÏ?~1öàéƒÇŸ|¼cÂßÊšÎq0÷ l™3{RGÓÔµ/}ôí/O>}ï“ë_n‹¨îê–œkÜqáÁ“Ï^ŽOà'ðã£nè.Ç + ϼÚÿ‘c¿±¯¥wë©[÷üýó_~ô˵ƒSùd©ÎÉ;01¯wË•_¾3í?Ü?. –£gÒØ¢›àTt…ä>cÞ‚ƒï¼ïé×ï~öíõoîÝV©*'€ðœÎÝýô’é±×¾úýÁ­O¿üî¡®öd˜:€D†øqÛÈñ›Nß:sé‡ß¾úäëOn~6«„F¶×»ù'U.>ûÅŸÿð;‡Nß{õâ®Ç—YJ–,LlG$¬È">ºoiGï½ÿÃËß^Ýÿè뫇¦ªì(€ˆ¬ò¡5gÞ¾´÷öçcß_ûòÉ÷?>yýê ²\À‹Ñ¡gëØØË…H 鉇÷οxxì£÷¾ûåê,*‘B×{Å—uí½öý‡?~6þA"á§x’Ñ+™«Œ†n€‡=xðõ?¾<}áýwßZăZŸ®õ M.Ÿ²åô/>}öAg ´Ó0k±\P‰ˆÉq‘J‘H²ŸôëÅOï=ùðöɳwòíl‰$oxrå´5Ç®~øÍO¾{ùzbâõèÄËñ ”Ùˆ•²ÎÿOYßЄյmdCBv ;!a…vÈd$$ $¬0ÜqïªU«ÖY«ÖªÕÖ­­[[GÝuÕ½µ®ºˆ@øï }¿ÿÿ¯`JÏÝ÷ÜóÜq<â •# Áã œ½/wÞh~|æþá9ih O‘fäÖMXºn㹯~ìîì¾vaÝ–»_¶öê*B·8ž¸¤ORð‚ñ„àܧö]j»·õÈ&ƒ &‹3rr –úQsg}½~¨uÏîÃg¯\ܲ@žÄ$ÆæoNúÁ¥ž÷›÷Nj>¿~y ‹§R%©yù¦’AÓÖ¬ÿõÐÉ æ¯^¿|ñòöÁ—ð¸ë!%ràj1P «Î‰'âÁ‰×oŸ9qìâ‘?G !GÄÈs¬ç.†CñM{·?Bð¹z}È äåд¨UÓ™!xlJ•(O MºytÛé+~ÇŒ ï?ÄQ¬7V ž8ö÷+çïøaéð¤M±oýÁ¢19GŽ™´bÛɇ¯ß}x|§ó3|ì D¢gPq1CÖI8Lì0ØjxbãÎõKçŒdKúùaÏ»…SÞŸi±¨8|Ê⫞üsøøîßw?d줯¯YõëÙ«·.Þ¹yÉ’ƒ @÷L`’²h… ² çÉh`²V—»Ú\š¿¾··çíÓ7¾·kGŒ>ÿ[à¢>yîâåsç·Ÿ¼ƒ†º4§|’^ Ob‚ÃÇ×8MjcAIiÎÁ^_OÇÛÇO¯,Ü4yæ×ß|ÿÓvî?uæl˜4Ô÷qÞ˜58F Žà»dƒ.Ï\ž*oÑÐ!Ï:ÿi¾~b’Õ^1püœùß®\³nãÖm;vÅ’A'#Þójb!`z2¤ð<ó&^m5Jk\å%UÖ=ݾÞζOßl®)ãtøàá£ÆO›1{îüRTbH$Ú•’ ù¢ñRÿkµD·³ÄVîò¸++*¶uû|ŸÚ>ô|81¾¢²ÿÐÆ¦¦‘#šFŽFˆ( ÚïcMaÙd,‹âÑ0ožÆp:n{ͰŸ:{zºZ[;?\ZTå®6Vyû×Õ 4‰ÄÒüýÌ0ñølP_3¬8À¦%NøpÜY;z⊖>µ½|ßþ`ûÉdÎ/²(”n0)ƒQþ1’+b ÁŒ"qý—1Jjª«+=ê#'ÏZtŒ§/_´<ûm¢Ãh2[íÖ¢àË¢@¡»b¤ !(쟒‡À÷}¦:ou×[ßàÈqfÌ]°ë%X{Þ>ÿûéÕe¥))*µ2;#4tì¬d Þ_AaØðJ;^]W__W_WS¨x4tÀÀ!£¦ýòº«»óý«g·vŒ6§ÄH¥"¸ã×>C,ãQádhHÓj«+]eåžjoÀ¦áCFŒ8vú‘¶®Ïïž?{pfE½J¥„èÓűi`SF!`ñ„¸ªjøD½¦º¦¶¶¾qЀ†ÁƒV?ü¸£õá{N­3t,n¸AÝkè0JxŽ€@> ‚±¬Êô¹:UšŒÇª¨÷ÖÔTH#Ò|wâÙë×-ˆ–öWß øòË 0:)GÀ0À¬À$å®ò2s"®9‹Â êk@Z­Ä¦[ÿþ÷«¶öO°ÔH¿r`=8KÀÐé BÆ(DT³Œ‡Fê]Õ^—#B›””ÌQÙÇ·cß‘•‘ȰÙA®¡ :€êÏ]\\RZjŠŒŒJ£Äy°ñ€¾ÊX”Ÿœ˜$“™m•# éögþ9ˆAÅ£èþ¢‚%v»­X•£™<^žÃá,óD •‡Þlµ)dvG±d‹@#?£éd4T½È¢Ëe³Y­y‘‘±q±<'–Â*‹ÓYŠŠÌ¬ä„Òr— æëƒVè¸]D4N¡³(!ñP7¨Æˆ¢ù<^ºÍ^\(à'uZ]Ž*>î;ýîg<3„H>Û ;”FI…O§t‘1ñ‘n¼ˆ'0[­‘\®Ùf/,”1åÅŽ²2Pf\0|0•V+˜ŠÃ`PX.)4”¬´"¬Y4‘Q± ñ*ea¶Î`µä±9ü\ÑnO䦗€F€p?0Tü52€A'Ð:XìÉ¡¡Ä» a{¤”J¢³y¹æT­ÁbÑ ¸¢]žÁë.+uõn4øBžFñè$¬9…B%H¶âb›]!•Æ(ròŒú<­ÑbQ²ÙüÄäÔ /\Yæ*/sƒ€Êw‰±t*8í`ÀQ¡Ž øàöt‰4617W§ÕfY,|¸ÿÂ~Ë!Ûf·#A@€¾~•NáÀ8Aó)Á¡!øX›Tücz´T"NÌÑkUV¤µ;UÀæ 9Ÿ¹B®ü} ©_ﳋ÷þ{nËÇ»ïüxåãû“7À×Ýûða/±÷ÊÇ2<šž’ꩬô”Û¬f½N¥Èˆ¾qÿñÕÏ6îÜòöÍ»+Km|ëûx|ã‡Þ.àw|~Ø}þrWo`ïõߨLt¬Áã*µ™ ¹ZUVzJ¢tÎÎ'Oÿ~¹îʃ¶gßlÙ±ÿó¹GïììÅôv}ð½Þ\¾[íš[b7çkTÙ™i0†¿à—kwþñæÅßo¶n\¾ÿÚã3ßÜ; t>uíþ£·÷|²rÃ×ýù@8+”(ôþXT0 Vdûöo+Ní}rÏ”M[Ÿ?lÿ¸¯×Êöéãõ³‹Î/<~¼éëîlßö¬¢$FdõЂaÝy¬Yf®:svÂÔﯼ½8ûq\žaV§þyøc÷êëgÞ‚f õéCëëÏŸm Cဠ€Ñµ£¥ IHÈVxê–_~hDZ½ï:º vûåžxû¦Ó×Õ‰èüô©ý} ¼6†øk*‚vÛˆ ¢Dpcc"ÿ%%QL&=ŒÃMón;ô´õ]',ÁçîÞî#'€“Ûþî݇÷ïÛ^={Ü|ÿÎí;wï-£a|> ŽÝÇ"L‚ ò|R9sűGoÛ;>ïšy½·÷M燶7oZZÚÞüóøáý»·n\½|åµßåXUÀâs`Ä(9‹J"á,Î*ßzÿå?Nœ¼~®£íÅ“GOžÿóòå³G÷o߸zéÏ‹çÏÝöÝ45…ã…1þ+N`(âI!Á‘΢)¡Êog¬ýýõõ×Oï߸y·¹ùñ³'Í÷n]½xîÓÛWN7iS%¡h4C%Ã6h JD/%R.ƨýõƒۗΞ»påÆýæGï\¿tþSÇoðšb¸\ÀÜÀ „ ÌÇgÈc€“å›E§GŠùÔÐb­víÞß9uöò{÷o]¹ÜÁí3¿hT¦&±y0–‰V6ƒ€NÍÔ~‡1hT°ÞTXdÎUefÊÄ\&õô÷9yîÒ›—Îú}óšñCFdb%R^ì‚A…0ˆØ£1â½õ ¬¯°éõÙò‡BRÍÞ|èÄ…+Ïß»z EƼØÄH!§0¹a„4=Ä¿´Î–›r—ÛYh2Õ©Qü0 Å<ÿçœ8²}˶3' j0jReR!—C§ÑÃEqÑ¡AAäPøê}j¿8,*[í­­©t9M¹ EJZ¤˜NaÔ­Úôëþ?ïïX2}ò€2£:#AʇÃ)LŽ(2 ˆ'ÇÿTP vÌ”ÉMã†U”TÚi)²(`)Á¬13VT®øeÍwK¦558 Šx €Fm838ë‚™R1³¾š9qØou¾M—•&­)e†&}ãžýíŽmë¿ùrTCqfA…1NÃÃi"´|`W`Ò10æÂ¬/ÇW¸­EYò””,MŽ2‘A1-ÿn˦µs›\926•â!ˆ?ÕqAX"Þ¯Û³y×î][V/š3e=O•˜ªTåÒcÈÑS§ÑX®‰£Í'þ /ãaBÚ‰ø t0íßG¾„9¹zãëÖ¯Zôõô¦ª‚œµFŸ—Y^še’pé¡ÁðX=F™pˆà?ÔFÛI¡!¨ àIÃ…å/ÌÞm›¶lX³rÖSÆ«°™¬ª2;ƒŠ…LH4Õà,9ÜhGB;±AÆ¿›Þ»¹¿yßžŸ7­Z8k€²"Giq©Eç”1ù0R+|áýqOBZ i,˜´2•B@aðXày!š1þyþôÑýÛ\»féô‘µN{¹£T/ÏaùdÙÀ_g±3Ô¯L #(Ÿ¨D $ ÔÿF¹ô݃î.àWܱlÒw©§Ì©OIŒ ãˆl – #Ö€ÚJ%“C¦Ridt¨Ð€Þ²Ö‡žžîίÿºôÛúYCëJŠóSâùt,ŽIñŸà“¤@òëP?å-…꧸…ôx¸™ÿ7¶ý㥸”/îý±{Õœ‰ÃºÍªhàÏQØ0Ü ú´718$”L£3YLV‡Í#á A fÌÁ_=yîê×­¯_;²qñÔáuî₌H…Ê…uF„~€œÁÄP* ØÛ0dX›?H:ØlÌÀ·÷þ¼yãæëVÌŸ:fˆ·ÂQ˜“Ì g³Aÿñ$•ΠÿËÌ‹`!ÂÎ…s8ü0ØXà‰¡X¾pï÷ïÛ±mÝÒéUV}®Z)q¹DøVˆB‡Ä¾HF“ÁD0ϲÂ`Ð..ƒÃs`Ûïw75Ž™²ûÖMÆ Qç,ÒkòòÓR2å¢ J¥}A?,´—+ B± ØzèÎ#–LÜ»eúÚSJG‚ 9–µ2W#Ž ÑáëPE0Ì3ð% Xr8ž˜ã©¢pö¯[½iÓ®YûvoøáÛÑãšj}¾Ç[˜¯ÏŠ„±ÿ,xv€` ˜ÏXa¬°p6(?›+C£Á  ìߪÜÿtßÞ][×,úbDu©9¯`Ààr½ÞŸÈf²@¦H–É d½ ƒaâ9°xÜ» ôö#ö#ö!üê;~Z1wâàÊâ¶²Úb4Ê’ø sÐk]¬>FdøH¢Á`Q8\`@ð¾½»÷îÛ·gËæ¯Lœ2ÐeÓ[ui2“Q•­Qñ"6Ç{ÿ³?¤?Œ´?®px\Ÿ'$¢Ö ÂÏ›7úËy»¶®^52S©ÌV¤g((`K0Á]]¬‘ó ‘gÏ«çç—; ÒØ’4•J›Ÿ¯‹#“EÒ®²Róø !U’¦T*@³)Âádöz=Û¯ Žã&õßó¢íÖýµf36S©Ðjâ™"ÐóÅ">_Œ—O§À—¯éY\І\ð“Ö¶?¦ žwøþc‹<*y“ êšÿ^«QÅ“q¡K`p%‘âˆh™,†$ÈÈÎÑ)àS…Œ‡#r£äéòøxHÓÂbs‰‚ä tßt. ê‡&%%0pD,!>ZÀ`°¸$"_ ¦+äV’QðDäxHŠN¥X"•°aþ0¾kJ:ç3Q.OàSaCöI’¯ÊÌ€ deEóð6ø‚‹6CN ^‹ ãÓ¦‡ƒ®'Ç“ ¬0i 2æSl|83<6+™yL׬¬( ô¼,š´øøÄD#,T*æm ôá ,’“ã™Á´°4:6.ž'aŠÒ3™o³$D4¨GEÊâbdÀ,¼¥³9d‘$œ’œœNB-Eá(Éòf(+,Z¹Ð¸²$4¨CfV†Ò”ðbb¢ã!ßPb˦ˆSÓ3ÒR’äid8 $0 D¡\nlt\¼<1Á!GÁ¸`¢ƒ!&£)¤Ê“äÉPLpȳ·ï^O¹uàyDZ'[oî¾°m[7Äþ¾ûûw|pÒ 2Ê<Ï}ð¼Ôn-2“ž>oýûx÷¾#»ºÚ»|¿lë{þßÿÿà_ˆB§dç»]ÎR»Íj)4òtñ‹Žµwuto½ÿ¤çÚ]{uÿoðÿdIÓÄÃ;fS!?O§TD{þþ÷›Ýo{öíüáðçg¿}púÿÿÈÞë¾îö·[h´4Ui1ôy¹:`3R%-6\?ÑÞv|ÖžÛŸ[žøzü/ôßÓÞò¼ùö¹¢à@jNl^^ŽN•ÝD›¿jéº}Íͳ¿Úô çæÂÖž^toÇÿdïÕžöWÍ×ÏŸ:|ä+n&.1èeÁÈñ²hÎ/¿?tÒô_š×ÿqðì!ˆÙANÿâ~ç¢óÝ?¯ßÿËŽm?oÕâh©¢Ôt0¸ãb£%"¦ !CÄ~ɳ,œûcx {?ý ú}ߟ=Ýí-oþqh÷æuß­ün͆±Ìt”,2 ÕØ(‰HÀeDE€9!“Šcbì¿Ýl…JSûm=áþ-À‘îéúøêá¥ßwoZ·jقٳæÌ]úu"6Ï…ÔXŠKBéÍSFjíø ÿ 0I(ýÝs‡v¬[±`ö´)“'ŒÛÔ8Pˆ‰–Š$~f*›–‘XÖĽcþÇZï÷tw}þü©åñSû6¯Y:{ÒèÆ!•eÖ¼Êzo…‰ bJ™|0¶l€ÙOÒÅRq„(E ©êyY_ÿù¨ã3Ü/iiþóèîßÍ›6vø€:³K_”SY_SVEDKXaÐZ#¸Sûâp)`.¥ÄK3åqB67Œ%]p»åcû‡W÷ÏùeýÒYã‡Õ×”hólCyŽ·Þë±Ri(4O@ó/À™c–”¹]»^¡MK‰ Ù,î¨Ë/þ¹yê×?,þbTÿJ‹!=-?ѢɇLå€è¸¸¢Â Å"‘PÀüjþ¬É#TÚ”éq2°¹ÜûîÙ¸rÞÄa^{ž"U.OÎ4dCzƒR«A“Å& ¹äðDÄÔ~?B–1æÓ^<ºvtÓ¢1.uj¼T ~­ë«yÓ›êÊMú¡&#CeÈ/*²YÌ…ʤH.‹F!ÒYdÈl(æsh¯Þ´¶½nþ󷟯.Ê‹ƒå¹å®R›1G«‹*”¹yùz}ŽV!Oˆå0¨¡$€þÁa1ÈÇ £Üj¾ëñ㿮ܵr‚Çœ—˜ áÄF'¥‹ÓÁr|¤÷JEZbŒ˜Æ SÉ$$é,‘ˆe’b—Íb’ïß¿~áôÍ;wøqᤡgq®6+J˜£å%¤S—žîGÆ¢Q)Jù ‚G*J æAj;:éukÛÛ·­ÿܹºsùä¦þ¶’šROn¬¸0!)5%9>:‚Æ UIñQ)HÊk*Ê âhx†ŸÐŒªÿñîQÛë¿O¯_µpTµÇërªDª2q¤¾%S(T IDÐt$øƒ`>f‘ƒÐd" à1 …ôéÉÓ¿þ~ú÷½;ÇÖ¯\5{ì@ÄÀ^÷¨ vy™O %H8Pn„>A¬³á t‘ˆ5¢RC?½zòüqó½³G^»rÅüq£›ú{§&ÊË$: äB &†RX¬pDx$±‚´iœà \(&Ôæ. T¾­µååß—Û¶nÅ’IãF5è«‹Õd^#Qîô“±ý{ˆp WŒÂpD*VñiMû‡·¯ß¾xxëÚo¦™8nLq€"R˜Íc„±è” ²rAB:ü†¸Ï B•tåÖÖ'z|Ý|éðÖï玟rÜ»!KHçÆ !ÀS-€çãƒ{â]ž@ ‹"ˆØÐ`2Ðíìèèñ#ÿ/\<øÓ¢ãÇ ª°êbyÜh\LÏá……3˜\P BŠOHiAèP"4?éãÇööŽO]Ýïžß:ñóŠ9F©ušÒ"â’€sêGk¾yjç*ü‡¬,)ÈIËHŽ…q<ŽxxB|:” ":…ø )˜Š Þ$µµ=¸ÓÒÖö¶µåŸÇ·Níünö„ÆÁ •N{a9+Ž+GDFû(…$©g¢"¥QQÑà+†„#¨4ZhÛ›÷=¯¿[»µíUó_?­]¶rÞ䯡ª%N[±.ÂÄÊâd±ˆXD\'Ä|þ‡|WH¦£1!2LáõÇ®+Nþôúåöæ…[šVÏ›Ü4l@ÓYå®ÈQÊS³R!éÚôÔ4àødd*ü®GFfjƒ Æé ¶–Žw_ìkmiy~níúïçNi> Á]1tРÂ<6W«ËÉÉË…ßà­N«ðE«VÅã0!!$:Ú Æn²í^ë›];ñóʯ&6 >ÌÛ8ejS±³Ø^f³YŠ,–¢B³Ùd,@´ FsA_ àé j+ªõDË«§÷.þ¶iéÌñ#†mùåô±–ªÊÊjWytI¥¥%ÅÅöðmŸ1 téÔ––WðÚüÓ¶—¿Ù´}ÑÄÆúQ£†V ŸRÓ8°¿ÒVU] o)ºÎ–»Ê! …³Ôá„·[AXb0Èú׫ùõ峯þ8aáägň13Ï?zâ´!iŽºÚ dEGI9ä” ,C¸§ö›ç*wñƒÐ,…I¾¶fèÂÝÿõêÁá«–3kpãÐ/6ÿ´rÎÄ9SÜÉNoÛϯã•(s—Û‹J ­e¥eQ(tHp(“üÛo§Î]¾qõ♣»7-Ÿ=fpÝÐu[¾™;mƼñy ··fí()†Ì>åÛ’§·ê̶b»=…&…A?pòÁ‰£{·­_>êè!5ž/–6ÕO™¹dA}J^™¬80:<ÈYþT»0+ߨÔŠEYXOd06"6"6ÝݼqÃÚù“†¸,FË„ 3ʾ\ùí²±ÖtG]=$±ò“ Á6C8.”˜rtZM^a‘Õ’ƒÇðx}îÜ9_NŸ0b`ý€ U%¦†¥S\ÓwîÞ°°*½ ²¿"<Ç]Žb«)? ü‚BØ‹pL„  x,“>nüä™s¾œ<²¡¢Ô¬Ï³iò®Œ#Ó5šlÿn{D’w÷ýGg/¼y¶¿Á¢P”Vy½µU°ËK¬Æ\uVj’<:‚ÏHÔÙK‹a´J« ¡22¢%‘±)…3ö?üçöÕÏ..·ÓU¥U5•uUyR!G"‰’ò2¢¥1It,—ÆÉ´Âxv«M‚ÂcB©Y®0Ù4pî¾û-=xpió»1E稨¬ôV»3YL:À¸ü^¥|‘˜Ž ŸO+,…hµÅ¢ÐÁµ8#)»já±—Ÿ?þsçã†T«’0ªU­Ç­`Xaal¤€'¢‹y’ÎJ5—”ØÈ°%¢À 3NìÚqü¯¶Ž®Ï.¬>lrYLt‘ äï©õ¸\J&“¿p+ŒG¦"©whtfŠèÛ€~ Ç’¨ïÞìh÷òú¶™õÕƒœ‰,ª¼¼QùÎ]S Z^M£Q¹*¡ëÊÕái HÆ·ÉF;,@‘%ƒ!àHÔ+þ¹ýCuž:ßjËeQôtH V[¨˜aL~^¾ÑdTfW3K©Ž¡%‹íÅV0å@J™<ùÒÉVEff’,!S›—ÏLuº\5U.0bO–)é,×Ph).Ôiò L&³1†–ÃvÂr š€!1òrÔ:%>;7O«Ë5ò©Žòê 8å€éË¢3©lM¾ÑbÊÕ%'ÄÅEÉ@0„,`"ʱ@paÅ j¦¥¸È ˆCÄýšÆH+«qC{ç(sd2T.˜yE†\"5%=3+’žh%(,4[’@ °DV…§LÀ¢räYÙJevf6CQíù”þS’FgÑhôàǦCV㌄T#¹ÀÜ^h¶ÊÐèà`2Ëí)2iôs©À\(%sÕÀl#JƒWZ’F§ÒèJhòs+Ê&±ä0f)H {‘á©prX ¦F™g((4Gò9 'LQrŒ×D¼h«U+´ZHÜ‘9Hå«ÍVd6Ù¤(4M ¯ªtr8L–1×`¶Xí"z˜²aÓ “ù ƒß™j­:7OÐ_ÍÏ£Ñ(œT“¥¨¨Ðh²à|¦²¼Þr!ŸÍ5ç› 2 £±ueÈ«†pœ)-Žb2©ô°‚l•.'ÏÜi•ÌK/•(4-lŽ^UeçòÂÙ‘ÒÈ(ͨ4žÞ‰t¶@n7§-ŒD:;W­ÕhôHýÍÜ`Y”i–Ðl²0@+â謊Š‹Fg0è è(2# ]îr?Ÿ^™ÓÎc0©0dX8t¡ø¡‘%ðÖƒÏbF˜;MT4‡aöc>»õðÉÔ»‡^~>ñ|Ç}ŸïâöíÝÿ9éé½ì{UI $©‹~ÙpÿÞ]¿lßüÓÚUß,pÞyòîù©Þ¿ïñ}îm^ý/Úÿ¯£þ€ÞkÝ{¢ÑAQÊ/öÍŸ·nX÷ý·_ϘP°äTPÚÞü¼·}ízþ7Üo­#3µÛwïܾqݪo¿þrâðÕ©—OÜéízß{`÷º£wÿ9ûíÃÓÿ}ÖðÝê‚òRFïØ¼nÕ7ógNÞPU–öþÊ–Û§;ߟœ³÷nWëÓ^ßÿ‡öƒz=w»»>ý]E ÉÎ^µê›¯gŒ^_ ¬|üæÕ[½m]ðõÖæÞ[‹ÞÀìëªÿðƒ:úòýÔñ±åÇHJ”0hÞt [éç0Œ7¡Bkûå‘¶-~;w¸Ç÷?ýï#{¯ösgGûÇï^\,!“†ñóm)ÈËN¸Ì0/"²pÖ…kݰ‚ÿAû@ù |]õ è¾×òìî¹™ÜÀ ¾,Ç] ÙÿÔ© <.ÍdqtØÏºsñÈžÍßN®/Õe¹aäæô¿î¿yýèú™9Õß/[µdÞŒ‰£‡ÕyœölyœT(à0ðH -¸ !Bλûðæ¹?Ïœ=òËêiõö|M\l—.Y½yÏ¡¦-Ö¯Y½bÉÜ/F©s˜téñ‘33L)`,™9_™‘$ ò×ÕÓOž½0oÕôú »É£Js´ßOX½fçæV~3Ö„Áî"]fB¤€ÍÖšŽ¤Ÿ¢`ñ$²F™’IÿÜÕÝÕñöÙí û¾o¬¬6z¥jßµjû– ëW.˜>²Öž›.‹àB’sÿéè9€É„@4œ! uw÷ôtu´>½wéÐ3¹5n—>+äg‘ ÉA(<ž+ñyTßû­mo_=þëæÙ=ߌQ?p`½«©,ÌE¡„¨ù¥£b€ýGÄ¿“E?‹ (>¤ïVO÷§·OïÝ8·cÙø±#:Ò¤t'<œF ç ¿#‹óóŒµÈ!Q\¸IXÚ¸qò›gÍ—÷¯ž1nâ¨ÆÊÜÊ >;I·˜ERi¿•\žšž·‘}iÿur0(.øë”kwv<vªãÝ«G×nX0qêØ1î|½<œ-ôkûYÉ22²2³YÝŠ¬,Bñsv >KÀƒ&åR~=¾ü#äóio{vëäŽå_N4¬Â“Ä!R¥ñ Ôò´ŒÌ,E¶J¥Tgg©²UjmnNŽNÏùY\.‡L ܪ¼Ùýùã«ç÷¯ÿzâP0êò2„:/ä«P*U…&-Cž¦ÍÕë €ßäÈ B‚©l.‡ Ìî)Ÿ¿oÛºlÚàÊ’B½&ÏæË•àéåäæérÓU9:“Ù ÞbÆ@Z .K Ä ÝñæáÙ=«f¬tX ôÚdit|¾>U¨Væ‚\ o–V„ý€m%Ù6˜†¥··ý½.÷|zûøò¯ëæõ–Ù­öâü´Ì$}6äª.°””X!mdI1²á˜é­$è€e›ÚÛÛÓëÛ¸}¿¯§­í—-kÖ-_ï.¶•V9 yiV£Õn/†<¦Ôÿ °/dot±ÐÀÅaòøtÿe´Ÿ.íüܳ÷õÊZ4q€§ØVVWa·¦—•{Üåm¸z€ëŠp!ÊÛ\nH=)ÃbpXª€OV÷Ù«OÇ{z>¿½±iËO €z‰½Ì[ëv*Ê!kmÝU•UžŠ€ ?p‹§Úë­Öâ18B(_@¹ƒ$žúº;Zš/îÿaþØ:W‰ÍÝÐPW™3 }Cm­áí©ñVTT½®¬ª©íß¿ÎN@cñx¡ˆ/Þ#}O{àNÍíS¿¬új”×Q wÖ6 ®Ð Ô0 ¡Qß]W©´Þj¼Þo-˜¤jB‹ˆÝÝ~­{]ŸNݵùôqý‡ºL‰9UåCJLÉõ5µ^o]­×ÿUë ò^®ë?xðÀþá( ÏÓOŸØüÛ©OOŸØ6ýÛC<žþ¥&ƒgæ¤qµ¦Äª:ÈÅ‹¨ê©¬Ÿgª«ü¤ÄU5Þú†ý"Ph,†)fÜß{˜cØîG÷Î-7§Yª½j«Õ= …€ªŽÊ HKVõ¯C.n—›ƒÆ`ц>_§Ve¥§åÔNi+^tðêÍ£‹Š™†ŠjoCMMu`5Ⱦҟ=¤GVÜð@fæ ‡a0+”’¢È/ñ”Y¼ó»swÏŒ¢¢,=¤Õ­ʈê©ý–T¸Ö‚|mvFZB¬„Ÿe*‡<â`öGbÀüa0Qñ)Ùzçˆož=sóùƒ}C4z…©¢¶4½9!ZÁãóà­P'q¸‘:§ò@»]±°þtVNAIÓòç¯Ýxpùì½ûçV;º’7ÔUi¢¢"„¸K ‹—EÆÄ€¤$šRØþ_»“€:Ž6uñÆ?žµ½yrãÂÕkÇÖ Õj²ÕŽÊj`úWUé¤2)_(ŽIIˆ’ÆÀãžH]‹²OEƒÁGg]½|óykÛ«‡WOü¼pHE~Fdª³¢ºÆ[ÓŒÖ\ÿþB„$""2*ŒÀíâ‹T% s„Û—åœÈìüôñå£ö,ÓxƒRÊád{à›€/è¬<#Í/0¦2à#ÝBe ˜ŒSûMu{Ü™ Kc?µr¸Çjtx*íŠ6GÈW{ªjjj«AwçKb¥Q&3°úùyªœÜÜü9/»L`¸ÿ“ câÒYSæM°$ÄÄe(RSyF³™¯rWW×Õúù®óx±’HKI©«¸  È A€¾Ý톶àt$ü¦±­c„ˆ“©·Z n,ä«Ïh2šàs¸u± ðë84ƒ¢òÁ–D „fƒ±È^âŒâ‹rÁïA%?¤Áà ô`Á°Ü ç±£´—ŸFÚ-óÆs¹K£cųÁl)¶Zù¼½+˜éwe‰‘Q|¾Ø 7y Á¢»Á Õ•ÁbÅ”´±l^q‰I¯[ùHÃx‘&ÒènwÈ„bObÌ7 ¾Â"DÑ'3…ž[jönþ…aÐ8,—oµ«ybxrÂåù¯‘qãŠ@Ñ`ýŸ{Ü¥‘‘àßBQ„ßyŒ¦ñ“ô õînWLŸ—ÐëKéGèÄf {}ÉýðP¬"©×'釃b¡_ô| î‡í—ÜëÙ'n!ïõôÃ@± ˆ”^­Ša}â4©½¾è~((&ö‰‹@¤õú¤ý‚ hì¿‘Þë#ô „ÂÒ'÷‰«@dôúý °ö‰9}âhŸxDf¯/ª GŸ˜Þ'¶÷‰ë}¢ˆ¬^¯ UŸp÷‰1}bAŸØÐ'ö‰s}âNŸxÖ'ZûDGŸèî¾ÿÝÿõ¿´þ—úÿJúàe»à¿Šäþ¯âÂÂÿ[ðŸúß?ýþ«¤ýÇÓhtmldoc-1.8.27/desktop/htmldoc.icon0100664000212600000240000004111010063150406015667 0ustar mikeuserÚUCÿAP@V?V>Q=R%W$q#"­!Ì î ;d¼îO|¦Ååò *Naz™ Ì ÿ 5 k × Y ã q ¤HA¤@©?­>¨=¦<¦;¥:¥9©8ª7«6¬5®4°3´2¸1½0Ä/Ë.Ô-ß,ë+ü+ *)0(B'W&‚%¤$¾#Ù"÷"!8 \ƒ«Ö2c’½è -@MZhx•®Åâ B w ­  ƒ — )ÄgAù@û@>ÿ=ú<û;ú:ú9þ8ý876543 210/&.0-<,K+]*m)€(‘'¥&Æ%ñ% $%#B"b!‚ ¥ËóHv§Ö*UuŽš©µÆÜû+R … ¹ ï / ­ 1 ½ Må…TSWWTVVTVUUTUTTTSSSRRQOPOPONDMMLJKJIHGGFDDCABHHNMOMNGMKICCBB,*&&# URVWTUUUUSUUUTTTSSSRQQOPOPONDMMLKKJIHHGFDDDCBHHNMOMNGMKICCBB,*(&$!OUSWWWVUSVUUUUTTTSSRRQOPPOONCMLLKKJIHHGGFGIORQPWXWVUNSQOGGFF<*(&$!›  :• ‚:“ … Mh|:Š   8  8"! 2Z|8š  ‚5œ "#  5™ %%! „Ae{5¢   3¢"$%#  "&(%   3¢"&&#" 1e}3     !! 1¤#'($!$(+033/! 1¤%''%#"$'()%%Xv1¦   !! !"  /¢ $(&$"%)+159@C@.  /¦ ')'#""%()-29=1 (Y{/‰ œ ! "#! -¨!$('""#*-247=CLTWR:  -¨"&'&$!"%(*-07CSbiP)#Wx~~‚~~‚~~¤ ZººE !c»¼A!z»¸µ³³´‰³±7”±±š‹¢±±O*±±K°"&(&"Zº¼L)-2+uÄÆjMUÌø³³´µ´µ±7”±±š‹¢±±O*±±KÂ#'&%$ [ººG#&($nÁÃeRe­ØÍº³²³´ºÒוyÈØØËƒz}ŽÐØØ£y|“ØØ¡z|~¦ vÿÿU ÿÿK!Ÿüüûýÿÿüû‡QÖÿÿý>‹cöÿÿr<ÿÿl¦#&'&!vÿÿ[%+56’ÿÿp8R¹ýüüþÿÿüû‡TÖÿÿý>‹cöÿÿr<ÿÿlŸ$%&&#xÿÿW %,,‹ÿÿp?bÆý„þÿÿüû™tZæÿÿþ‹ku|°úÿÿ©hq™ÿÿ¨ir{¬ vÿÿS"‚ÿÿG"Jc_]©ÿÿtNLKÖÿ€Œ™þÿÿr<ÿÿl¬#&(%wÿÿX")3>”ÿÿc8]…š‘ŠÀÿÿSLJ ×ÿ€Œ™þÿÿr<ÿÿl¬$$&&"xÿÿV"*1ÿÿd>nŸ·°§ÎÿÿWLJÚÿ†ªZlyƒÌÿ‹žWg–ÿÿžYhx~¿ vÿÿQ#‚ÿÿK")( ‰ÿÿC ×ÿùÿÉ !Ôüÿÿr<ÿÿl¿ %((%xÿÿV -A—ÿÿnLb|„p\¯ÿÿc7! ×ÿùÿÉ !Ôüÿÿr<ÿÿlà %&&$ xÿÿT%5ÿÿqTt˜¥’{ÃÿÿS1ÖÿúÿØUbuŽéýÿÿ˜Nb•ÿÿ™Qbw~¿ (RvÿÿR!$‚ÿÿJ#)'&‘ÿÿC ÖÿËÿã3CùÑÿÿr<ÿÿlƒ>  ¿ &((%)RyÿÿV9GœÿÿmPkˆŠoyÂÿÿdFMA ÖÿËÿã3CùÑÿÿr<ÿÿlƒ>  Ã"&&'% -UyÿÿT/9“ÿÿqZ}¢©‹›Úÿÿhv^& ÖÿËÿëo[pžüåÿÿ—La”ÿÿ˜Oaw~…ž}~ ¿ <æÀvÿÿP"#ÿÿM#% ,8•ÿÿA"&!Øÿ|þùp‘þÿÿr<ÿÿl…í‚/ ¿#')'$>‚æÀxÿÿV*@N¡ÿÿuVv†xŠšÃÿÿbBZruCÝÿ}þùq‘þÿÿr<ÿÿl…í‚/ Ã#%&'$B…çÁxÿÿS#3?˜ÿÿy_…ަÅàÿÿzf‡’ƒJÞÿ|þú”UjÄÿ´ÿÿ—La”ÿÿ˜Oaw~‡Îõ¼y{~¿ 1}ØõØjuÿÿ»£§ªªÏÿÿM#""6:•ÿÿ>&%ÚÿQåÿ¦ ÑãSÿÿr<ÿÿl‡KÌõÙ{¿#(*9€ØöØixÿÿ½§¯¶¼Üÿÿx^~|vœ˜Áÿÿ]EY~ˆyèÿSåÿ§ ÑãSÿÿr<ÿÿl‡KÌõÙ{Ã$%);ÙöÙlxÿÿ½¥«²·Ùÿÿ|e‹Ž‰¼Èßÿÿrgy€éÿRåÿ¬>gåï–ÿÿ™Ma”ÿÿ˜Oaw~‰¤åùê´‚z|~‘ ;âýËxv ÿ¤M'/7;6’ÿÿD"!Úÿ@®ÿã#Eî¢@ÿÿr<ÿÿl ˆd¾ûèz*‘&G†äýËyz ÿ¤{g‹Ÿ¦ ÁÿÿkE^†~mæÿP°ÿã$Hî¢@ÿÿr<ÿÿl ˆd¾ûèz*‘$E†äýÌ|x ÿ¨~l”¬¾ÉÁÛÿÿ…[j‹…|éÿV²ÿã$YòȇÿÿšNa”ÿÿ˜Oaw~‹~|§×ýñ³‰x{~¿ $tÖøá~,xÿÿTUUSžÿÿM#8<73‘ÿÿB Úÿ:úýL|ôm8ÿÿr<ÿÿl ˆkÖù×r¿-{Øùá/|ÿÿ…_gsu´ÿÿex­¬—‹ÁÿÿiFj‡tlèÿUŽûýL|ôn8ÿÿr<ÿÿl ˆkÖù×rÃ.zØùá2|ÿÿ‚[ako±ÿÿh~¸ÇýÚÿÿ{Pj‡€{êÿe’ûýL|õž~ÿÿ›Oa”ÿÿ˜Oaw~‹|uz¥åûç®}y}¿ M¸øýž@ yÿÿP}ÿÿO';<5)‰ÿÿ> Úÿ8Gëÿª¶á7=ÿÿr<ÿÿl ‡+†üûºK¿U¼ùý A #~ÿÿ[(7CM£ÿÿ†X¤’{®ÿÿgNsuuéÿZmïÿª¶á9?ÿÿr<ÿÿl ‡+†üûºKÃU»øý D #}ÿÿW!-8Džÿÿ„Yƒ¸ÄÀ£ÁÿÿnNs€€éÿalïÿª¶á<]ÿÿ›Oa”ÿÿ˜Oaw~Š|xˆ¶ýüÐlv}¿ -kÈõÞˆ. zÿÿR‚ÿÿP/:60%‰ÿÿ? "Ùÿ8ÕÿñìÁ<ÿÿr<ÿÿl ‰vÖôÍe¿#8sÊõÞ‰. &ÿÿ^0GN]¶ÿÿˆX‹—Œs­ÿÿp]iobãÿcHÝÿñíÁ>ÿÿr<ÿÿl ‰vÖôÍeÃ#7sÊõÞ‹3! "&}ÿÿY'9CS¯ÿÿ…V‘ºÀ¸—Áÿÿp[o}…måÿbIÞÿñíÁ =ÿÿœOa”ÿÿ˜Oaw~‹€¹éùà™`Vdr|° fºùë‹?yÿÿR%†ÿÿP&252'ŒÿÿB Ùÿ7–ÿŒx;ÿÿr<ÿÿl‡"uâü¿h °%)& i»ùëŒA!&€ÿÿa9L[ƒÄÿÿƒs‹’“x]´ÿÿxS_bEßÿ`9¢ÿŒz;ÿÿs<ÿÿl‡"uâü¿h °#''"k¼úìF#&}ÿÿ\->Ot¼ÿÿs¶» ‚ÌÿÿwXk€kYâÿ`@©ÿ{9ÿÿœOa”ÿÿ˜Oav~ŒºñýÚ£bWW^lv}¿ #hÌô­uÿÿQ*ˆÿÿS(/.- +ŽÿÿAÚÿ8Uýÿù;;ÿÿx<ÿÿ!ˆŠóÒj¿&*&&iÌõ®$}ÿÿg>NsšÌÿÿŠv‚†‰cw¼ÿÿoJkdHOäÿZ'hýÿúH ;ÿÿ{<ÿÿ!ˆŠóÒjÓ$)'!*nÎõ¯!"zÿÿ_1Bd…Áÿÿ†|œ¨­‡¥ÒÿÿsUol^_åÿ`1výÿúR<ÿÿJa”ÿÿ¥et†ŽŽ‡}Ãùå§q^[_gox|¼ n‡sÿÿP'.‹ÿÿX',)&)(ƒÿÿBÚÿ1,»Ó¬ ?ÿÿv < ÿ…šmn ¼'+'p‰"|ÿÿm?T‘§Ôÿÿ’l{{pr|¦ÿÿhTP^Н¶œ±›vl`gpjŒ‡ngM0ESFH;5:LQD3%-Oc]' Â!'(#"!##!%#/691KlŠ’ƒ›—†„{Œ“uŒ~oU@TWJUNJKU`keD9M]Z*  /kl[RSUV‰W\isuux{~†› #!$-1/7@7-""/!&&$– ¿#'$$%/ARX\ƒ¢®Ÿ©·œƒg]~jvˆutXE@LBLE>FWQC6*1UfmgI"  Â"(%! " $!)5@CGf{…Œ§¥˜|¤|x†cYNQFXYT[b`jmJ:S`giY- .ilgffg†jry|}~ #­$)-515E>4+&,$!'(( "" # À#' "+9L`v§¸¥§É³›‡ltqy‡vxgUMK8JCRZdYE0/DbqvjXQF#  ¿$)##  #"'1;HXl{‡†¬°«œŽš…|Œ‡†rm`R>WWmpolq^KLZhlmhmo:0kyƒz|~ À "##!,4?ÎÑÓÑÎÅ£b)&')$&& I¸È¹F.h£¿Å¿°’hÀ%$""!1?VVu¡¹³éîñëæàÃ’oƒwwoPS^Pm¤ÃÖίj85Hetwmda‚°Äž±”lŸ&&%"!!& ,5@AWt…†àåëìêçÓ¢t†¡{eheVx­ÊÜÓ¶ŒfOL^hloswšÉÒȾ°”„x{}~±#$#!+29NÿÿýûþÿÿüÁM''""2Ÿõÿÿýÿÿô—'‡qÙþÿÿýÿ‚9»!'#"&'8I]h³ÁÌÿÿþüþÿÿýÙ‡mrHIQh¸÷ÿÿþÿÿõ Whswkb™âþÿÿýÿ‚?»!('' !$'&1:DOq~ˆ™ÿÿþüþÿÿýÚ{\\Zk¼øÿÿþÿÿö§W\gmop¨èþÿÿþÿ„\gx}Â"%$ (.55Lÿÿ±LV~ÔüþÊ3#$#¢úú¾eHd½ùúŸmìÿè£i\dsŸØ8 Â"'%! 0?P]‡©»°¿ÿÿÃsz™ßýþØhIJQS¶ûûΈfvÃúû¹fji^ðÿê«uju| Ø<Ã"()& !#"#!-4=Dav~‘ÿÿÅ}‹¤àýþÛs[]\YºüûÐŒuŒÊúû¶]clj›óÿñʉ‡ Ø=6l{Ã$&&+004Rÿÿœ5·ÿú‡ !iòÿ§¦ÿñb<ßÿßS #/FR" Ã"%%&5FMuœ°ª¥Êÿÿ¯HMQpÊÿû—>GD‡ôÿ½P9/&5¹ÿõŠSOeèÿãg;FYsx/Ã$&(#$'/6:Tmwuvžÿÿ³X`YtÎÿûŸNQKõÿ¾TKQ@<·ÿô‰X[yíÿì‘hhnum-Cw¨#&%!*/43?PÿÿŸ$'MîÿÄ.#¬þç>˜Cèþ¨|þ÷ !0Gj‰y( ‡"#"º/=M^¬¸ª¾Àÿÿ³OLkm~óÿÊG7I¼ÿîi7/+6[‚ðÿº??˜þø“FSr‘°Åž3  Ä$&&" $",3:DdsytŠ£ÿÿ»_UqzŒôÿÍN5þÿ ÿý7ßÿÔ8Mo•¶Á¾Âèè~%Æ $$%4COƒª®›¹»¦ÿÿ°HReSP¢ÿýV;iþÿ˜$=dyxnZ§ÿþ[Jçÿ䂞ÈçóâÊ»ÚØs/Æ"&($ $).47Vlmd~“š”ÿÿ²P_qdc¨ÿý[Bmþÿ¡.8/Aÿÿž##".‘ÿó93öÿ–ÿö6ØÿÜRcŽ½Ã±¸ÈîðäP "Ç!$!-=SjŸ¶§µ¾ª‰‰ÿÿ¯CUYDT¥ÿõUDhøÿ¥>VpvtpX»ÿøa]æÿé’¦ÐîÚ´³¼ßæÙK -Ç#'%$ #$%$-2;Gephu“‰•ÿÿ³M`hU`¨ÿöYGoùÿ§;Lbou|mÉÿùvlçÿãrƒ­ÒÇ«²ÅìïÝS .`~Â"'&!*//>?91*Bÿÿž('(²ÿÛ1,Ýÿ±"1¸ÿÞ5+Äÿéy~¬âóÆøÍÕÞ÷Ç6  Ç#%!%6D\³¨ÁÀ®Žs‰ÿÿ­@LOHOÁÿã[BWâÿÂT[lgapzÒÿèq{âÿñ£©Íîð¾íÅÌÖðº3 %)Ç %('$ $*04>\nfw„…}–ÿÿ±HXaTTÃÿã]JmæÿÀLQfhm‹žßÿêuqÙÿí’¹ßëÄøÍÖàøÁ: :oÈ &'),..@;1)/8ÿÿ(Cëþ¯°ÿã8$Jæÿ¶;G©þú²„…Ó÷êÈÑÆñùö£ %  È #!,>G€¥®›È·–r{rÿÿ®6Tfkn€ˆwxn‡ÿÿ½gu¥áüüÁG;IZqËýùÇ™µÝüýÏwzŸÅÕøÿóä¿ÉÊöüþóíïõÈA !Q~ –$( *,,5@95/-04Eÿ‹öŸ(-¨÷ÿŠùÄrj‰µÖ¶Ý÷ÿŒþÚÑãõú©(( – %6E€¢¢­Ê³”~skjwÿ‹ø±B&?auz{ÆùÿŠûÜ¥™¯Ïá¹Þ÷ÿŒþÙÏàóù§3. –$&'#!"$*/0Naae|ƒ|wsy„ÿ‹ù¶O.>WgnvÇùÿŠúÍ„}š¿Û»áøÿ‹þÙÏâôõ¤ 4j Ê!'$&,./>;.13742:ÞÜÚÚØÉšQ*^¦ÐßÖºtx‰ ™ÛÙ½ª¾àîñîæÖ´¾Ûôþõ] 1 Ê -?d™® Á¹ˆƒxnhkãàßßÞÓ®p:)Pbfozuqukyxm\P=97BHI=;AXfq‚‹˜“ˆ~uu|Ššœ—®ÌÙËÌÖ»µ¹²­­¯²»ÌæøþÿÁ2 /dƒ Ì!'%)..>?<52/750*/!%.A[t„’ ­¼Å´Ñ¼¶áìñèÐÞÏÓÑÓØàêöýÿÿö‡5! Ì0Bu ÀÅ®ŒekhbSP?D@GQI7:39978/#*" !(6Qt“¥¶Ç¹µ¶ÚÆ»ÅèÖ½õýñìÇïóõöøûþÿ†ä5 '4 Â&9[‘¢­À«‹Œwhi_GHKPMY]Q>C]owsb|’š ­¿ÐÜäèÊÁÃêÔÆÌîÚ¿õýñëÇîóõöøûþÿ†ã7.; Â'&#"$,.;S]ertoxtyoTQPUP_fbLHZfonbzŽ–˜› ¨³ÂϽ¿Æî×ÉÏðÜÀõýñìÈïôõöøûþÿ‡þÝ:'\‚ »"&(,/0?<523<:3%+!"!%.Fg‰¢µÇÈÔÔÄĺÒáÖ¬«ÞðËÚüøþ„ùôÚëÿ‡þ,»"0O|œœ½´’lmibJKCIW`aTCFcrxs‚„˜œ¢°ÀÐâëÞââÕÕÇÜëà´°ßðËÚüøþ„ùôÚëÿ‡þ‘9»($# *,5IX\ptqrmvwrVSHMZfmdQJ`kqo€’•—š¡­ÀÏÎÞåÙØÉÞîâµ°àðËÚüøþ„ùôÚëÿ‡ü7x€¹&(,06?858?;,*" ((&!#1Px›°¾À²–†{U#&3S–Çåõûø÷îüÙØõöôóóñìæàÛØØÙs  Î$8a‡‰¬©•xhieTH>LW]\OFYoryŠ’˜›¤´ÄÒÑ۬Q86887;Ki¨Øòýÿù÷îüÙÙøüüøîÝÌ»­ š›¡\ * Î"").=NRgqokjttaSEP\ei]O]mpw…‰Ž‘˜£²ÂÉÄ«‹Y650+!#/@k²Þóþÿù÷îüÙÙøýþþüúøöõóîàÌg(gÏ#+49;A42;?9*,% !(.)!*@eŽªº¿ŸxlT1.rÄëÛÐÐÀõðíêêëìèáÛÖÓÐÍĸƒ Ï*HzŸ°‰yljdRIKNK^[GNcownƒ–—©¹Ëн³–xK,+,*$'++$&DØøàÑÑÁùùüüöë×įŸ“Œ…€h"Ï""(2GS`pffltr_SRQSgfUXfnvnŽ’œ©¼Ç¼±ˆb4>’ãüáÑÑÁúûþÿýûù÷õóòñéÓ¸¥y&A{Ï(28?C<37;<,( !!#(-%! $6V€¡¸Á­s)M«ÕØßÛ×ÛßãäÞØÑËÀ¯dRC3Ï KZmmddkqaQHU[gbRXdq~u„Ž—£³ÄÅ»žJ!§ f¨·Üçøþÿýú÷öôòñîàË¡€Œ‡r; *f¢)0::B>:?<<+(#!$.*&" -Dm•²ÂÄ™Iª%0Œ¿ÈÄÈÎÖÝÛÔÌǵ¡~Y8   Ï1Tw‡¢›ŽtfhQDJMO`VJLfuv…—–›¥¸ËÒ´m+#&),01-,7,"B¬è÷÷ðá˶¡{o_TOJOMbaS: Ð#,7HQdlokip\NOQWiaTUivwƒŽ“¬¿ÍºW #('" '@¹ôÿÿýùõôóòðîÙ¾¤Šlvp`EK~Ð 1AEB48A>-' #"'/+&!$6[…«¾ËÄŒ@!').6>FKMKC=5'!b¡¹ÅÍÓÐÆº¤‹pUB+% Ð"YƒŸž|mihUDBPW_QJTjur…—®ÁÒÓ®b'#%&'),Ð 5Maicclp`NIT^g\V[mws‚‰—¤·ËÕ½q* ""%0=>72.'%$6¬ô÷ôòòðìäÉ©€…v€vi_TF&{Ð '?A?9;0-!!*/)% &Fpž¸ÈϽˆ?#,4=CJRZ_ba^UKE>0"k©ÃÊ÷“Š‚pYF2*!# Ð FŠ•|acWLFNP]RGTnvx€‘—£´ËÙÒ®[)$*.9Nl•¯»½¸¦rS9.'#/ƒŸ’}hXA:89?HJSRSG;,! Ð*Zmi`j`VMSWf^S^rxz|‹‘«ÂÕ×Âp, ,Hg}‘•’‡zl\D-,¨èïïíã¹¥‘ˆ…„yzoj[M?7! hÐ  .B9-'!%!"++*%#7]ްÃÎϵw:$-792%)~¤±¥®€ƒqWD4' !Ð "RlcUDGVU\LD^psŠ’œ«ÁÓàΙY)!%1?-U—z\<%   ‡   Ñ >Z\XHThyt|‘™­ÄØâÖ²šZ.*.9DMhÀÑÙÞäèìíìêÜÁ™hV\WB+A221+% © >^b_T`p~uzŒ—¨¿ÖãÙ¼¹m-(*2EyÃÚãöøööø¥öñéØÀq^O[T<%a¥Ÿ‘jU@0$ _Ñ '2*('(Cv§¿ËÐÉÆ³@!+@Uct‡Ž‹œ¬µ«ª¥œŽeL>@AG=:,`N;%    ¬ ;WMQi~{~ ¶ÐáßÞÕ«^-$+9KYp’´ÍÕÌÈ×ëòëé˜âЦ™ifaXO9@‡Ñ :]Z]qƒ}|ŽŸ³ÍàááßÉz-$*5KÉõûû÷æàíýýø÷õðäØÁœscebVJ6w~mWA/" "$&& HÑ   #.)'.U¶ÉÐÑÀ»®vJ%/C^hlœŸ ›ª´¶®¬©¢‘†zgRQOOIN%+   À   0Yuzq’ªÇÛèÖÔϤg+(-ƒ{sµÏæçâØÚÁr"#,7G`Èëñùþÿþ¥ýúòåÙ¿˜|wsa\:%. %),012556754+ z’  ;ƒ¦ºÁ;¯¹ X$.:SnŒœ°ÃÖÌ¿Å×ÊÀ¾òóèÓµ•u`]WE4# ‰  ½'%  O‡ ¿ÒäÕØ×ÕÁ„*1@R`v˜·ÏåãåÛÏÓáÖÍÌùúóæÐ·ž…~zdQ8&!ƒ‡ !Å'&  Lˆ ½ÑãÕÛÛÙÌ*4@YÍìôôûìêàÔ×äÙÐÎúû÷ïáɦ†}u[H1&()-1459:;‰<<==9 cÁ   x»«Ãºµ°Â©t*)4?Wltt‹¯´»ÂÎÏãÏÖßýýúóä̪‡qbQ=%  Ž ¿*  vÈÀÝÓÍÈâÌ™C)7HS^vŽšºâÇÈÍÖ×èÖÛäýýúôåг–‚xiS;9>BDEFHHG% KÒ#  !£¼ºÆ¬ª¢£K-:?Ph…¨·×ÐÉÄÁ¿½¿ÂÇÍÖÝÚ̲•|j\N8  ¤  1% '¹ØÖäÈËÆÃl+=RQWv¦ºÛìõô¡óôõö÷ø÷îÝÁ£‰yl^J6,1#! !! "$%%$%„! ½1' ! $¸ØÙæÈÊÄÍy 0>Sjµ×ÝñüûüýýþþýþþÿÿýúñÞÀ¡€fUK?* ,?ˆACED?DIMNˆPQQ: 5~¦.*  J¹µ½»ªž’' 1>Oi~“¤±´«¶¸—µ£³·´°¬¦•iXOH>+!‰¥ <5 ,& VÔÓáßÌ­; +BVdy—¹ÓåëéïžîïðîäíðïîèÜÃ¥ŠxmcVLC=)!"#''&&'(…' Ó ;6 3- VÕÑÞÛÉÃÀI /AX}«ÊÞíøüüþþýýþÿþùýþþý÷èË«ˆkXPNE22D?BDGPQOPSTSSTVXXN 'tÁE? ? n¹®À²£l *6NPTUWWXWXWX‡[^\iÃ#tA -4 #±·­³Z1yE69Nen{˜¯±šœšŠ•³²²¤œ‘²‘xodSIPXEF3#!¿.~G 3F+Î×Ñ㽊!86EJNeƒ¡ÆìôÎÍʵÆêïõèÎÁíÚÉ¢—‹yog\ceVB=@=>?†@?@@??>…< ¼/o@ :T" )ËÕÌØ·›/ -BHTr‘Ÿ±ÕüþÜÚ×ÂÒùÿÿöÛÎüåÔªŸŽr]S[cXFV]^\]Š\[\_b`+ `¬5†' .' \®’|eF7ŸsJL]rˆ›«´¶µµ¶¶´··¶’´µ¯¢w`QGXdOJ;,‹¡ B-96nÜÑÕÚ¹9 ¢}WXh|”°Êßëîíìï’ìîçØ½¢ˆwpojy}aWUWSQ„PONML†MK1 ¢!?‚* DB jÐÁÃȽJ4b9DUk†¡¿Øíúýûüúþ–ûüõäÇ©ŠmZQ\heNegfddccba‹`a`achg? V¨ O‚ ?! m^G9*-$z„…PEN^p‡ž¬®ª­µ¶“µ¶¶°¤˜‹wbSK¯Ýãñ0ŽJ¿tKçÃYkí½ÿký×Zç,I§´”˲° §ã€ãàáŽãt„T¯"ås±üªW¦.pù\"šNi!ÑhËá·Üf ”ÆŽÙÈAËui–ëxÍö ešß3#™ïUoŽTý‡gý‘{ôÿ¦BH„(epõ½‹\fbú&H¦BX±|7Ù]wÓn¶úÕ™¯WŠÃ%;y²k`U@k}PkÜñøAÌxžwª^¯çõ×__¨÷@h¤”µÐ?Ð(ÓS!R)‚HzaèBÉÉ«çÝùÏ/pUkA!DL)µ>~i×®]'Nž<ù½€D*…r!2)ðŒ„qÃQÂ+èÓ[$ý‘Oö9nëð·¾ýí¿ž“¿üòËG•RŸZ¾|ùGŸ}öÙ¿©V«fϓֆ ¾~øðáý@ø((©à(9ë}w2×µl`ÚS3„7¯%ûé}xv,y{›R>pîòåËG÷íÛ÷¯=öØnÇqNq+${öìyÜ4ÍÕs9#…¥Þ—CZ‚™IâÄãÄîZ ÒY0î´;èé:fÏmñL­ž¡ðŸy晉f³ùØíÈ¥Ó½<òȽ@h–f)ü`!ǦAKZ1ˆŠI™Þ…úN€wiawª­Ûò‘á+›Ó=…¯Ýõñ¯˜s²_|ñ5­õôÜûÆ×qC ‘Râ¹þ‚ &¯ŒýÑú nNtw¡g Dd>¯T"E»QzhüÔí•÷<ñïý÷“î£>ìß¿ȤR©®¹d”³É÷~ÿ× Ü¸F?tÌyfŒÞ{éÔJŸ(ÿøùþm)oñ»A c6RA°zÜIrÓR"ñÅÌœiã9MF?5@+tWg´‚/Êóˆï_ÃÊ» ¼ýÒ÷ò'_ºçl&&&fï6××pGÂ+³d·ÞEã|”ø2¯Rº# øãŒ56F.5 ­(|&Äý÷¬çþÍ9þáï¾ñÄGøôu`ùœÍ±cÇF€€¡•BûuGT qŠ&îõJkü©òBƒFãî>”ÕµùÎæ îK°f"ÊàÖû¸ñù"é|æ_æô¥R©|äÈ‘3@ À„Bv ±° …¦u¾Œé :“ÓxÍ…Ä¢0Ú`©>ìîù ‰5!]3É/íCZ!¾úÕ¿ÇŒÎçÈ¡C‡þÓó¼ @g–‚@ ½;d.l4Å€XÖÁ­Ö锋tbá…}B‡‰-YKÿÒ8KVÍïÝòMxžG.ÛM$AÈyÇ~ñ‹_^xüñÇ\¼Õ'0¤&;c/ô°ÜÆ7ê´ÊEœXCFè“}9voŠògkó¬ Ï' …E齃z½ÎÓO?Í·þù»}ƒ…ío\ýmmNg(¬°¹!ÅNü;­‘&¢“Ԧ®á§R˜ž»Í?ýì¤ï“5{Vv³wp9±ZÉ[—NҨ̀Ö$ ¤”Ôj5¦§§‘R²cûvLõÝDº'󹑫|ã¶£¹žå:µ4FüSK±3yÜ·]œI™ÊA&‹Ñò ¢Ý“!Û•àÞî$Û ýH!9ñ›‹LѤ7–bõàJ6¬]Iw"Ž‚‘‘”i²¤° Jí±€ï<ÿ5^øõ¿MZ¡Ãç_mvXû`šX®›ÖiÙ0i4¦ÐÉ4vÓ!(d ²IvõwóÀ@“å(Où#§ß`ºRm6!;Æ÷à¾Ý» e2äWlB^ñ˜ú‰KñòMŽ—S4ljÕrw”‹ÏÍF` [/xÂ\„¾*¿~Lò4BŽ®Þ4Ÿ,ô±}Å*þã3yêIB* ѵ„ä–ñŒ‹w½HùÌUÆÇìøÌ_ñÅ?ý‰ãç†xwú ¯Y£ŒÄfh•Fñ~ÿÐ:Z™˜¾@ÄR)ùuëPÙA‚p[KÜ%y¶ç3<´f ±žE¼ðó7ùÙ‘§ˆ¦{é_õz>þ!ºV˜¤ã-* .ÿê(“¯þŠúIvÛŸào3Ãî~ç]ã\ý<Õæº]ÂÀ¡åÖ|°óÍZyR„#amØ6ïaww“ßq/áE9>»b ²m+ +Ê_ù ?=ôM=}¬ÿà—ùÀƒÛÈf;t¥"–¤ÒnráäeÞ=þc‚›ã”¯_Ã=ãJå"m$(+‚Ä@ …S¿x7gÏ«L_ßA§ÝF"ð[mT»Ê½{Y¿c'MirìÔ9¾ÿK&“cÕâX³s'ë×(–¨yÑ!Ñ™ac.C¯©h—K4S\½Âhåž°0B]VRÆ1Œ8†ƒÀ%ðêÓ®ã¾bÌLNÒ=0ˆS«"Ì0•ã¼yâú·m¡\©òÓ^Ä©µˆ­I’ÈÆÉ/P:ÉDC0aXX‘£“Ub©$©\/êŠ&›ËÐð]ª×S  ¤œõ\‰ %fq+€tZ¦®Ž±iç§I~ñj^zîY. 1ò¸Öl±fK?KÃm1Jir‡€–ãÒ¬Õ@@Óñ);>Óm‡Ùd”Õˈ®.`®èE-Ë —$‘ƒqD!е¸ˆÕ‘hD*%åAÏu)•ªÜý¡Œ^º Êâw×.rRøÅ6|“®Üz®V‡ð[-ººLMŒÓ˜©RºYÄNŽp†¡Ó')ú£ÈLŽv©LÛ¶0CVìÀ°@™>vÜffø¢ÁT4ž<è9:­ÉžEܽÚgfhoÚKõê<üð^¦»9÷Þ1Šg/ѪNÓªW¨UÊŒ½wžáÓ§(QÈ °>gröl‘„²‰¸>1? êû„—°ëÓP(âtZÏ+ ƒ ­é8Zûx®Kø È%£Têen”ÊìÛ½‰þ{¶ó{.P:õcï^bhø<—Ξc|´ÊàŽuìùØ:~ùó7é¸alÃ@I¾v]´ëb‡#h$•‰"N«þ‚0¤Ô @kìh²\fpÃV²}´ëb„ R=9>²á.>öç»°c—°}”±C¾²m;ïR8;Ì‘—~‚+DÃÞxÓ¯(á:øŸü–-V˜áÓoSý°PRjqkz3C†mø>(EßÚµ$¢)¦/P“>ëví`ìôE¬TŒÁe‹Y»}3] ˜|ë8ÿ5R£=1NØŠX„ïz\9öÉB/F$Bc²„Ól‘]<ˆŠ0zö¥âðN=?!ÑA€¡ ßw1¤"­õzßw‰çNŸaÊkÒ©Ô™>?Jréø¥ŽƒÐ7Ð8ÕV CFBundleInfoDictionaryVersion 6.0 CFBundleExecutable htmldoc CFBundleIdentifier com.easysw.htmldoc CFBundleVersion @SVERSION@ CFBundleDevelopmentRegion English NSHumanReadableCopyright Copyright 1997-2004 by Easy Software Products (http://www.easysw.com/) CFAppleHelpAnchor help CFBundleName HTMLDOC CFBundlePackageType APPL CFBundleSignature HTDC CFBundleIconFile htmldoc.icns CFBundleShortVersionString @SVERSION@ CFBundleGetInfoString @SVERSION@, Copyright Easy Software Products 1997-2004 CFBundleDocumentTypes CFBundleTypeExtensions book CFBundleTypeIconFile htmldoc.icns CFBundleTypeName HTMLDOC Book File CFBundleTypeOSTypes htdc CFBundleTypeRole Editor htmldoc-1.8.27/desktop/htmldoc.ftr.in0100664000212600000240000000166210063346076016161 0ustar mikeuserTYPE htmldocExecutable MATCH tag == 0xfe2000; LEGEND HTMLDOC Program SUPERTYPE Executable DROPIF htmldocBook CMD OPEN $LEADER $REST CMD ALTOPEN $LEADER $REST CMD DROP $TARGET $SELECTED ICON { if (opened) { include("/usr/lib/filetype/iconlib/generic.exec.open.fti"); include("/usr/lib/filetype/install/iconlib/htmldoc.open.fti"); } else { include("/usr/lib/filetype/iconlib/generic.exec.closed.fti"); include("/usr/lib/filetype/install/iconlib/htmldoc.closed.fti"); } } TYPE htmldocBook MATCH (string(0,8) == "#HTMLDOC"); LEGEND HTMLDOC Book SUPERTYPE Binary CMD OPEN @bindir@/htmldoc $LEADER $REST CMD ALTOPEN @bindir@/htmldoc $LEADER $REST CMD PRINT for book in $LEADER $REST; do @bindir@/htmldoc --batch \$book -t ps -f - | lp; done ICON { include("/usr/lib/filetype/iconlib/generic.doc.fti"); include("/usr/lib/filetype/install/iconlib/htmldoc.book.fti"); } htmldoc-1.8.27/desktop/htmldoc.xpm0100664000212600000240000000417710063554627015574 0ustar mikeuser/* XPM */ static const char * htmldoc_xpm[] = { "32 32 64 1", " c #00007f", ". c #080604", "+ c #0E1211", "@ c #131A26", "# c #151D1E", "$ c #1E1C23", "% c #182217", "& c #192448", "* c #1C2927", "= c #24262C", "- c #21301F", "; c #1F3640", "> c #253A37", ", c #1C475A", "' c #1A5340", ") c #284B4C", "! c #25564B", "~ c #1F5859", "{ c #384D53", "] c #255664", "^ c #3C5A5B", "/ c #555246", "( c #425F41", "_ c #21726F", ": c #6D4690", "< c #455C99", "[ c #2A707C", "} c #32754D", "| c #4B5F80", "1 c #9335A1", "2 c #34745D", "3 c #4C6B5B", "4 c #4C7271", "5 c #696C6F", "6 c #318F91", "7 c #CC547D", "8 c #3F9F8A", "9 c #40A670", "0 c #5B9588", "a c #6F9093", "b c #748C9F", "c c #789278", "d c #889090", "e c #609FD3", "f c #53B5B9", "g c #C37EE3", "h c #8BAFB3", "i c #8AB1C3", "j c #99B1A5", "k c #A8ACAB", "l c #EBB273", "m c #92C9ED", "n c #9CD6B0", "o c #87DCCA", "p c #96E1ED", "q c #ADD9E7", "r c #CDCECE", "s c #D8C2F4", "t c #C0D5D2", "u c #BEEEF9", "v c #D0EEE4", "w c #E4E7EC", "x c #E1F3B7", "y c #FDFFFC", "++##+++... ", "++#=$$$#-*+. ", "++*yyy+*--~yyy. yyyyyyyyy ", "++#yyy+%>!~yyy@. yyyyyyyyyy ", "##*yyy#*-![yyy,,+dyyk wyyy ", "++*yyy+>'_6yyy,[[dyyk yyyw ", "##*yyy%>'86yyy~_]hyyk yyy ", "+*#yyy*'88fyyy]]~hyy5# yyyk ", "###yyyyyyyyyyy;,,hyyd+@ yyyk ", "@*#yyyyyyyyyyy;,]byyb&+@ yyyk ", "#*@yyy'}8]]yyy;],iyyb<[+= yyyd ", "@#@yyy}966[yyv,,_jyyk8nk+ yyy5 ", "*@@yyy}8[[]yyy;~_iyyjntr5dyyw ", "#@@yyy2[[]]yyw~_[iyykkrwwyyyd ", "#@@yyy~[])~yyy)6foyywwyyyyyk ", "@$;yyy)]]~]yyy~onvyyyyyyyyd$ ", "@$(nhd,)]]~hhj0nrwrrkrrrkkr# ", "@-}9_])~,__80jjd0akrwwrryss5# ", "=}92]{~,__0ji4--%--krwwsgg:|$ ", "%}2])]]_6hrb%*;3}(-%[sgg:<|)$+ ", "++>{~)_0ktb*{:11:&@@+. ", ".++*][drtb*{ktqh#>#@&@&&&@. ", ".*+#+4tt{+^&&&&&&&. ", ".+^+;+jo,-/biumuuquh433,,,,,,,. ", "..+/#@!8]qb4aqpiipha}0']~]]],]+ ", "...{++.,,bvm25aaha4]4c^^~]{{{{# ", "...#++.>^^avu9}3!{{an3^^^^{{]{# ", "...++++>^{^4kvxl7eoj/^^===$${{= ", "....+.+;{=#^;;^ac3);;[{@;{;@{]# ", "....+++>{$=^=);^)=);{{{=;;{@{,= ", "...+.++;;=>)=**3)=;={]{@=;;@{{# "}; htmldoc-1.8.27/desktop/htmldoc.m_m.bm0100664000212600000240000000161210063126214016107 0ustar mikeuser#define htmldoc_m_m_width 32 #define htmldoc_m_m_height 32 static unsigned char htmldoc_m_m_bits[] = { 0xff, 0x03, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x7f, 0xfe, 0x03, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0x1f, 0x0f, 0xff, 0xff, 0x1f, 0x1e, 0xff, 0xff, 0x1f, 0x1c, 0xff, 0xff, 0x3f, 0x3c, 0xff, 0xff, 0x7f, 0x3c, 0xff, 0xff, 0xff, 0x3c, 0xff, 0xff, 0xff, 0x3d, 0xff, 0xff, 0xff, 0x3d, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f }; htmldoc-1.8.27/desktop/htmldoc.l.pm0100664000212600000240000000666710063126214015627 0ustar mikeuser/* XPM */ static char * htmldoc_l_pm[] = { "48 48 64 1", " c None", ". c #0B0D0C", "+ c #121825", "@ c #1B1A20", "# c #151E1E", "$ c #131E3C", "% c #1D2D1C", "& c #21292C", "* c #192950", "= c #1F322A", "- c #153648", "; c #32255E", "> c #1E383D", ", c #2B373E", "' c #1D4D62", ") c #30484F", "! c #454828", "~ c #304869", "{ c #215559", "] c #2D5347", "^ c #404C45", "/ c #3C565D", "( c #3E5E46", "_ c #60468E", ": c #29704B", "< c #207573", "[ c #287087", "} c #8D3BA8", "| c #317866", "1 c #436E6F", "2 c #D3314D", "3 c #5A6C6C", "4 c #5067B1", "5 c #309F64", "6 c #399588", "7 c #559A6E", "8 c #658E8E", "9 c #608EA1", "0 c #758F72", "a c #828D8F", "b c #569CC8", "c c #3CB97C", "d c #50B3A5", "e c #9D94A9", "f c #E7873F", "g c #C77AE5", "h c #82ABAE", "i c #89B09A", "j c #89B3C6", "k c #A3ABAB", "l c #BDA2E7", "m c #66DECA", "n c #BFC6C7", "o c #A2D2E3", "p c #90DDDA", "q c #B4D0CB", "r c #A6DDAC", "s c #D0D6D8", "t c #E5E95D", "u c #E7D8EB", "v c #C4EDF4", "w c #D3EED4", "x c #E1E5E5", "y c #F7FAF8", "...###.@...... ", "..#.@#@.@.@#..... ", "...#&&@@@.#%==%#... ", "#.##&##@..##%==]{-... ", "..##=#@@.ks#%^x8)nxsxxy xyx yy y ", "#.##&&@.@kx#=]y8'b9oy/,@kyy yy y ", "..####@^@kx.=]y8{[[jy~~&ksy yyx y3 ", ".##=,ase@kyaakyh[[boy~[83.,nkkkk ", ".###@@@#%]|:cdd[[[<[{'>'''~*{]<-+.+ ", "##&@+.@#=]:cpqvoj<[['<8soj~{|<[jnnke ", "@##+@+@=]:5cwy8jyx['{sxaasq<{9yneeaa@ ", "###+++#=]5c5px)[8ya>ay[--1y8'ns~[60#. ", "#>#+@@#]:cccvx{[[sn-ns-><|vn~xjqn><|{so[yi7rwkxa.& ", "##+++=]:ccd'/xh'nq]<[[xn|yqixsuuu^., ", "##+++=:5cc<[qx>)8y1-8y1{[byidwyannsuyu@& ", "#+++#(55c6<[nxnsyk>]{|<<6hqii0nsnnssuknyy^@~ ", "+++&:5cc<1[{{>{)>{<<{''<<6hksn/#%&,/777(!!#,jggg}}_~~'-@.# ", "...]/){{)<<8knqj)&=,4bbpmmm7]^=,}}}}_;**++@.. ", "....#{{'</4looovpvoob833!$+@@.+++$++.. ", "#.....#3kssqo/%>/44oovovvvvoh88]=#+++$+$$$$$.. ", ".##..#.^qqqqh+#>/4bovvvvvyyysk3(^%+$$*$$****+. ", "..==.&#.avqo/.#,[loovoovvoovoh8(]]>$********$. ", "...^^.,..qqp).!^)99ovooovvopoh8(31)'~-~-~-~~-. ", "...@3#&>.]mm<*0a33bovovovovoh83:(|{[{'{'''{''.. ", "....^^.,.#|<-9vej18jojjjoppo98|78|]{{{<{{{'{'#. ", "....@/..#.#>''nyod1189hh9j983^|a0({1{/{//)))/@. ", ".....,#.#.#'{{{jyvm61111181/)/ar0,//////////)&. ", ".....##....]//13jxymc7(^]]>~. ", "..........#^/@&#^/&>=^^10(^>>>>/3/)+,)),,,-/),. ", "...........]/@@@,]>>)>>]/@&)),,///)$@),~,+,/'&. ", "........#..))@,>^]&=]>]]1&&){&>///,+@))),+)/~&. ", ".....#...#@),$&>)]+@@#{]]&+&&@)]//,+@,,,@+))/&. "}; htmldoc-1.8.27/desktop/htmldoc-16.png0100664000212600000240000000167010063126214015756 0ustar mikeuser‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs.#.#x¥?vtIMEÔ "“-pŒEIDATxÚUKh\e…¿ûß?óžÉLf2!2£-Ò—&±b›6h!%Ú….¬bë¢t!1¸PW ÁEJ‚AÅ‚ˆ©’•(ÅÖ¶6¤h’’ÚF2m6·3Íd&3É™{ïï"ÅÇÙœÕù8çhþºˆ BØ[UlɪY2Ï M~TÊ¯ßæ_i\ñ_c1542¢”Rª1Ñ¢’ÝjxlL)¥”'þüÒÏW^TJ)Çq¥”eYÖl&“9èBHMˆm´. © WS+u}'N ~= 088øn§iš·>? t)ÿé$¢!\]û¨©õo]eÜÍ­஑ÙýSÚ;S.—OÕD"q ðH!$vÕ`ùÚÌÿæÙ¨d;F®úRæ·±|4úþ«J©ŒÛí®|R {;OÛÀ \b¯tíçõc½ØºÇeï|ŒgÛBg.}uÞ¢ù|þ&`IÛè6èNV7`skûö˜Ž«¾€#õ<ïæåƒ}ïLNN^JR¯‚Ë+pæJ”ÍU ±=E_ïžî|’` @ª=ŧŸ-¼ýÖ;Ÿ¶Ç6¸ðÃ4·Ó à÷c¸,6Ö3tÅ‚x ‚õl‹Å¥E²FŽ;Óóîß—ç§rÙÌŒô§|äîÙ¤oÜD†Ã´ì}˜gvîàÛÑo0Vp,"v€7Þ!™Iruâ:ßç r÷×€sš?TµÉ$u9Ö³ŸGZwòÁЉ}'é8yÔdâË/(N\'>ßÄdiŠõò TóʲJ­ÂãóafVHl­ñÔøpx˜h ÁsÇp8lÑíòBÏQܸLQ—¸á µiÊqztˬ ¤vµ‘ž[à~2ŠStH6×jŽRt`ÁÂÒ"ÆZªÅŽÖáŠpÇ"ÿ˜•B–— ªÕ2‡Î²ëÀ!zŸ?Ε;¿R¸|‹RE§T0Ù»»‘µÅ95¶Y)ÉC º¦Ô@¥l‚.ðú¼x4ÉÔÔUZ”äОž5?¸ñË,Å•<…{ëw—ñÅê)dÿš– ¡ ¦:›Ù5ÊŽÉwçÇùñZ„J~ M  qª• ˆ„ׇã€ã¨Üßf^gI¼†yQIEND®B`‚htmldoc-1.8.27/desktop/htmldoc.ico0100664000212600000240000004003610063126214015517 0ustar mikeuser(V è~hf ¨Î 00¨%v( €XP5Rl4eb$ÚÕ¡‹“Wûþû¯²˜ÔÎÈ72 4±ƒžt([wpRŽ€ÿù™™™™ÿùçíšÿú]ÝQù•Ý„D#ÿDHª ù5qÔEÊð"W)‹±ðõÑ3wxˆ‹®c>eFfnþe7cVx†àþb7aÖå€þffaÖ€þiTcÖЀþo'aÖfþo—of`ÿÿÿ 3‡ÿ( @7%ØØª¾¥~kX)ÎvÇJo7¡¢[^1+. VR@ÏÊÒœC–Bzúýøwwwq±«z©±¡¹±·´pwwwz·«©ºº»±«¡´pwwwz±©ªh†š©± wwwzK™üT(™±zq»wwwy¹-i›F)¹›»» w{wqIó„3=™ˆ™KD¤pwywmL92#"8f”DDDpw·‚J³2""#‰”pzwx"±2""#i¡pww¨,:¤3//ÈŠqpww”‚Ĥ3"")šáqw©I‚‡®2-Ù®îáw¦iD”ØÃª¦f§3UáDwvÝ””™ØÉªª¨òüUSpzf”©IÝbˆhŒÏÌÿ[p’ˆ¤”2ÒòÌÌÌÈǯÿ”DOÿM/ÿÿÿü‡qÿ™IŸÿÒÿÏÿÿüqÿdÔOÿ™BÿÈÌÏÿ€¡ÿmDOÿ©Óÿ-üˆÿðwÿmÝOòD˜ÿ(pÿûzÿ–ÔOÿÿ>Gpÿøzÿÿÿÿÿ¤Cÿ1qÿøq¯ÿÿÿÿÿCÿ‡ÿüzÿyÝßÿ”Hÿ‡ÿøw¯ÿvßÿ™Hÿ€ÿðw¯ÿz™ßÿIHÿ€ÿðw¯ÿz¦OÿxÿÀÿÿw¯ÿz©Ÿÿwÿÿÿÿðw¯ÿzªŸÿpÿÿÿÿwzww§wwwwwwCCÃÃÃLJ€€?ÿÿ?ÿÿ( jU> 6-"½º½&œªkóëÇ NI6lTDga>$! ØØ×7A(ÒÒ™+(lfDTS9US9)& I>xj,_W!ZP9ÝÝÝŠŠg~;fxMWVBôôôUVK\W<‘‘À»¦ÒÉÏ“““1; о¯SN4º´’_Pƒ†AðïïXJC|}nBB,DG)A!êË TU»²„¨vP=4'%& ÈÆ¿ ØÌ›êᾇ€T···©©ŽZY;Ǽ1)"ÎÎÎJD3mmm"vvRY&üüüŠ}„„„çÛ¤ 471  ¼i•›š˜´µ (&°½¦XN6VO9`Ri})ieM‹‡^X'{ZG£–W[^0‡‡O,5H?.““ÇÔ31 ±ª’yˆ&"  …,;8#gYN  XP"ZR(›‹d=““ŽÕÕ¸z~-KU “t" ÖÓÖs|]ÖÖÖ   ›V2H'ííí|ƒW¦ª‹ˆQr)Y¨²‘?J?g_,œwQI!YcJæäŒüûüˆ¨¡èèè ÍÅ¥j—LÿÿÿÆÛŸ_L!u€a‚†=~xd3M.,$ ž¬’nhG-.ŽŠQA„ƒaîÑ”“ljhë¦ÏvI*MH180)XL4B9)ÓÌ© c[•‘2)aY%ËËÊŒ{S®ªG#$$82'# ÂÁ¿þþþ=7$("®6vZº/n1tÍ(¼:»M¬µ ;J.™QŠiÉ¥\ʶ2@ ½ƒN§€F!]j3U ‡£G?S8e^* ›0ª | 5Bœ–Á4Æ…¨“”#¹9°—f-z‹rˆxÂ+Œ¤’'´Wcί•¢‘¦Y=Ã$ÀHDzžbwÅž}Ÿž,˜PXTÈž_ož7dž[‚ž%ažOs)ž­Žžy¡žIK©žžžžžÄžulž±kžgpž¿Cž³·‰ž„«{žqmž`žRLžD¾"ž~&Ež†ËžÌžPš>¸hAV< 3‡ÿ( @ ÿÿÿÿ ÿÿ ÿD8)ÿB5-ÿ0&&ÿDB)ÿLP1ÿ& ÿ-, ÿ-,ÿV`7ÿHL/ÿ)"ÿ:6%ÿ/)"ÿJE,ÿ\X:ÿ[V9ÿ&ÿ1("ÿB:(ÿF>+ÿ ÿUJ3ÿ\N4ÿ"ÿ  ÿÿÿ ÿ  ÿ  ÿ ÿ9;%ÿCB0ÿ+"$ÿ+%$ÿLQ2ÿ0+ÿJL)ÿ62ÿX]2ÿLM+ÿ-$ÿKF'ÿ?7"ÿJC.ÿ]W:ÿ\V;ÿ+ÿ7.%ÿJA+ÿJ?*ÿ) ÿRH2ÿ\O6ÿ(#ÿ &ÿÿÿ ÿ ÿ ÿ ÿ8:%ÿHE3ÿ( ÿ%"ÿ]]>ÿ6.!ÿB>'ÿbaFÿ•˜pÿ•¦‚ÿapmÿTP*ÿ=:"ÿG@+ÿc^Aÿ_Y>ÿ, ÿD=+ÿNG/ÿ<2$ÿ3(ÿRH2ÿ\P8ÿ*%ÿ 8ÿÿÿ ÿÿ  ÿ  ÿA>*ÿ^X>ÿYS=ÿ][AÿsrQÿŸ¡“ÿÚçÜÿµóãÿs³êÿ}TÍÿ´ŠIÿ¿Özÿž«—ÿOV>ÿ]W9ÿc`Dÿ0$ÿ$!!ÿ)$ÿ# ÿ ÿTL6ÿ]R:ÿ(#ÿ ?ÿÿÿÿÿÿ  ÿID,ÿ[W8ÿa`?ÿ™”qÿéëÚÿèó­ÿŒ·VÿOrOÿPXDÿPY8ÿKM.ÿUD,ÿ…ˆVÿ«Í¤ÿXhNÿ\X:ÿa^Aÿ_\@ÿZU=ÿUO:ÿQJ7ÿ\T=ÿ]R:ÿ# ÿ < ÿÿÿFD9ÿÿÿ  ÿM=ÿXLÿ‰‚gÿôí×ÿÕÅ‚ÿzKÿ|\ÿ‘Žlÿœ™tÿ¢œuÿ›—nÿ~yYÿ_\Bÿ|]ÿ{˜‚ÿNS5ÿ^\;ÿ[W9ÿ[U:ÿZT:ÿWO7ÿSL5ÿ[P:ÿÿ 0ÿÿÿQWOÿ# ÿ ÿCOÿ‘ ÿ_P"ÿÓÀŸÿ»ŸÿxzTÿ‘ŠiÿÓÍŸÿǾÿȽÿÊ¿ÿçÞ¢ÿÁ¹‡ÿˆ‚^ÿ^{?ÿq„LÿSd>ÿ`_&ÿ^\$ÿ_Z$ÿ`Y%ÿ_V#ÿ\S"ÿdW'ÿ ÿ ÿ ÿMTJÿÿ;3'ÿÿ´º–ÿÆÒ„ÿMBÿ0G3ÿHRWÿ}sWÿ¼­…ÿúì²ÿéÛ§ÿçÙ¦ÿþñ¶ÿìݦÿóå«ÿ²ª~ÿrzSÿXhUÿXh@ÿbMÿaIÿ`Iÿ_Hÿ_Gÿ`Fÿ^Bÿ ÷  ÿ((ÿÿ" ÿÿqrcÿØÚ¹ÿÊʨÿVL9ÿ ÿJI5ÿœr_ÿà—ÿüì¸ÿîá°ÿôæ°ÿþð¶ÿïã°ÿöë¼ÿ¸²‘ÿnz^ÿMYAÿ5@"ÿE%ÿI$ÿM&ÿP'ÿR(ÿU)ÿA"ÿ Ïÿ ÿ ÿ ÿ*-ÿ¤¤žÿØØÄÿÙ×½ÿ°§…ÿ ÿ;9)ÿ^Qÿà¡~ÿíÛ°ÿâÜÆÿæâÒÿâàÏÿüøèÿçÛÈÿ œÿow[ÿ:C-ÿ #ÿ- ÿ5ÿ9ÿ;ÿ>ÿ@ ÿ"ÿ š ÿ ÿ  ÿ!#ÿd[+ÿzw4ÿ›œŽÿÐÒÊÿÛØ¿ÿ¡‹iÿ-,ÿGC+ÿ¿sYÿõÆÿîךÿøç¬ÿúí°ÿðå ÿÍ´xÿ}€KÿfhIÿJM8ÿV$3ÿ/ÿ ÿ ÿ$ ÿ(ÿ+ÿ ÿ  \ ÿ  ÿ59#ÿTM&ÿ]V$ÿ_U+ÿxv&ÿ‹]ÿ´¸³ÿÐÏ¿ÿ•…dÿ,,ÿD=$ÿ¨d?ÿæ±VÿëÖhÿâãyÿÌÜiÿŠ˜FÿFP1ÿ16%ÿ€=dÿ³9¡ÿ‘4€ÿu0IÿL$ÿ/ÿÿÿ ü ÿK{:ÿg€;ÿib:ÿOG#ÿ]V"ÿ\R*ÿro#ÿƒ‡5ÿ¤ˆÿÄÉ¿ÿ˜qÿ!$ÿ' ÿ@9.ÿ]m=ÿX€Jÿ?eFÿ!95ÿ"ÿƒzVÿò»¼ÿî‡ÊÿÊW©ÿžD|ÿJ=ÿqVÿRDÿÿ½% ÿAi2ÿg£?ÿgt6ÿk`7ÿRK$ÿ]U ÿZO&ÿnl$ÿ}€"ÿ’›Vÿ¬¹¤ÿ·¨ÿdfCÿ(7#ÿ'ÿ&ÿ*ÿ(1!ÿš‡ÿÜÙÑÿïìÙÿüïãÿøÍåÿóÚÿÞzÁÿªiÿ~e]ÿÿ!!^$ÿ09&ÿR3ÿk :ÿfk5ÿbV/ÿLF!ÿ`Yÿ\P#ÿdd#ÿw{ÿ…/ÿ”¢rÿ¯¿¨ÿ±ÀªÿІxÿ€†dÿ’|ÿ¶±¤ÿÜÛÓÿééèÿêêêÿÊÊÊÿÏÏÍÿòìîÿöÚîÿô½æÿwavÿ#!êH)!&ÿ'ÿ=_*ÿ­Í™ÿ£­ÿ£ ‘ÿLA"ÿLF ÿ\Vÿ_R ÿ[[ ÿ²´Šÿ¯±Œÿ°¶ ÿyjÿÅÛ¼ÿÖÙÈÿèæÚÿÎÍÉÿÀÀ¾ÿ¿¿¾ÿÍÍÍÿÏÏÏÿÂÂÂÿ¯¯¯ÿ±±±ÿÅÅÆÿ"" ÿK91{&ÿ#ÿ-0%ÿÿÿÿÿÿÿÿÿÿÿÿÿJE!ÿhZ-ÿOI"ÿYTÿcVÿÿÿÿÿÿÿÿÿÿÿÿÿdgÿ¡¼cÿ¼æ§ÿæòàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿŽŽŽÿ"ñ8 &ÿ!ÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿRV ÿtj0ÿh[+ÿOH!ÿXTÿÿÿÿÿÿÿÿÿÿÿÿÿNMÿ–Š$ÿ£¬?ÿÕéµÿÿÿÿÿÿÿÿÿãââÿßÞÞÿôòôÿþýþÿÿÿÿÿÿÿÿÿÿÿÿÿº¸¸×U %!ÿ#ÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿTo$ÿzt+ÿ{n/ÿhY(ÿWO$ÿÿÿÿÿÿÿÿÿÿÿÿÿENÿliÿŽu"ÿДÿÿÿÿÿÿÿÿÿ±µ®ÿ²²³ÿÚÔÙÿãÚáÿöðöÿûûûÿÿÿÿÿÿÿÿÿŽŽŽ¨4" ÿ%ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿKs#ÿ‹4ÿr*ÿ~q-ÿm](ÿÿÿÿÿÿÿÿÿÿÿÿÿ<2ÿblÿtrÿ¸­ÿÿÿÿÿÿÿÿÿ±¿¢ÿ­Î•ÿÀËÀÿÛÓßÿxsyÿ‹ŒŠÿÿÿÿÿÿÿÿÿíííî\ ÿ&"ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿLu ÿ†¶:ÿ‘/ÿ–…/ÿ„u+ÿÿÿÿÿÿÿÿÿÿÿÿÿH=ÿYAÿ`hÿ¶ºÿÿÿÿÿÿÿÿÿ­¦Žÿ¤Kÿµá—ÿ‘ž“ÿÿWNEmÿÿÿüÿÿÿÿÿÿÿÿ]]]ˆÿ'%ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ8OÿZ&ÿzŽ0ÿrb"ÿh\ÿÿÿÿÿÿÿÿÿÿÿÿÿ:0ÿiXÿa?ÿ¦¤‰ÿÿÿÿÿÿÿÿÿª•‹ÿ‡L.ÿ{kGÿÿ(!ˆÿÿÿØÿÿÿÿÿÿÿÿ–––¨!ÿ&$ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ71ÿXFÿq^ÿ·£Œÿÿÿÿÿÿÿÿÿž•ˆÿ^1!ÿÿ'©j6ÿÿÿÃÿÿÿÿÿÿÿÿ¬¬¬¶%ÿ$$ÿ# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@6ÿRKÿVCÿ²ªŒÿÿÿÿÿÿÿÿÿ’…ÿ ÿ&°w=&þþþÈÿÿÿÿÿÿÿÿ®®®´!ÿ""ÿ&%ÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿEWÿq…$ÿ‘¤.ÿ°®:ÿÿÿÿÿÿÿÿÿÿÿÿÿUNÿ_Qÿ^[ÿ§ ‹ÿÿÿÿÿÿÿÿÿ‚‚‚ÿ©|M,•••þþþìÿÿÿÿÿÿÿÿžžž¢ÿÿ((ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6A!ÿR`ÿ˜+ÿ˜›,ÿÿÿÿÿÿÿÿÿÿÿÿÿWUÿvÿeTÿ°¯ÿÿÿÿÿÿÿÿÿ¤£¢Ì&ïïïAÿÿÿÿÿÿÿÿÿÿÿÿmmmt  ÿÿ'(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'.ÿES"ÿglÿž™,ÿÿÿÿÿÿÿÿÿÿÿÿÿ[Hÿ†~!ÿqgÿ™”ˆÿÿÿÿÿÿÿÿÿ°°°¹'bbbùùùÏÿÿÿÿÿÿÿÿîîîç1 ÿÿ%&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$)ÿ3>!ÿLVÿ€v&ÿÿÿÿÿÿÿÿÿÿÿÿÿiEÿ\KÿÿŒðÿÿÿÿÿÿÿÿ­­­¼Q###DŸŸŸpððð×ÿÿÿÿÿÿÿÿþþþþ£££t  ÿÿ#$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%+ ÿ*4ÿAM"ÿ[Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ å\ÿÿÿ€ÿÿÿÿÿÿÿÿþþþþýýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùÏÏÏz  ÿ ÿ"!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ &ÿ'/ÿ1=!ÿJNÿÿÿÿÿÿÿÿÿÿÿÿÿ Š'ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþóüüüÑôôôÂÂÂ+ ÿ ÿÿ&%ÿ ÿÿÿ!ÿ!)ÿ$ÿ ÿ å  {  ÿ ÿÿÿÿÿÿ  ÿø ° R2%CCÃÃÃLJ€€?ÿÿ?ÿÿ(0` $ÿÿÿÿÿÿÿ ÿÿÿÿSA0ÿL=/ÿ*&ÿ3*$ÿE?'ÿEC)ÿPT3ÿ(#ÿ ÿ#ÿ"ÿEK+ÿT_7ÿR\6ÿ*#ÿ' ÿ/*!ÿ2/#ÿ#ÿC>&ÿ[Y:ÿ\X:ÿ\X:ÿA:+ÿ#ÿ( ÿ:3$ÿ=6&ÿA:)ÿ,$ÿ$ÿSH1ÿ\P7ÿ\M3ÿ-(ÿ‰ÿÿÿÿÿÿ ÿ ÿÿÿÿNJ1ÿMJ2ÿ+ %ÿ2*'ÿAC-ÿ>A)ÿOV3ÿ-)ÿ21ÿHM*ÿ67$ÿGJ*ÿX`4ÿW]3ÿ,$ÿ0*ÿKG(ÿRN/ÿ2+#ÿ?8$ÿ\W9ÿ\V9ÿ\V:ÿG?-ÿ#ÿ+!"ÿIA+ÿMD.ÿPG0ÿ6.$ÿ!ÿOD/ÿ\P8ÿ[M3ÿ4-ÿ§ÿÿÿÿÿ  ÿ  ÿ ÿ  ÿÿ ÿIL0ÿNQ5ÿ-$%ÿ)"#ÿ"!ÿ40(ÿSY5ÿ50ÿ><&ÿHH&ÿ95ÿCB#ÿZ]3ÿY[2ÿ-#ÿ3,ÿKG'ÿF?"ÿ=3ÿ?6%ÿaZ>ÿ]W:ÿ\V;ÿJC0ÿ%ÿ0'"ÿJA+ÿI@*ÿF;&ÿ@5$ÿ) ÿMC.ÿ\Q9ÿ\N5ÿ91!ÿ ¾ÿÿÿÿÿ ÿÿ ÿ  ÿ ÿ ÿIL1ÿRS7ÿ-"%ÿ*$ÿ ÿKJ/ÿ\\<ÿ92#ÿ>:#ÿA>"ÿ>;"ÿRR,ÿrvJÿ~„_ÿCj\ÿ<<=ÿIAÿB< ÿB;&ÿ;3!ÿa\?ÿb]@ÿ^X<ÿMF4ÿ&ÿ@8)ÿTN6ÿMD.ÿF<'ÿG<(ÿ1'ÿMC.ÿ\R:ÿ\P6ÿ:4#ÿ Ðÿÿÿÿÿ  ÿÿ ÿ  ÿ ÿ ÿON4ÿYV<ÿ@72ÿ3,%ÿ# ÿWS;ÿb`Cÿ@9(ÿNMBÿŒŠÿÀǵÿÙÓßÿ×ßÚÿÕÄÞÿÕ̺ÿÈÔ’ÿž³Šÿu|^ÿ;N-ÿ:5"ÿ_[<ÿc_Cÿb^BÿNH4ÿ%ÿ/&"ÿ:1$ÿ:1#ÿ"ÿ$ÿ#ÿOE0ÿ]S;ÿ]P8ÿ:4$ÿ Úÿÿÿÿÿÿÿ ÿÿ  ÿ ÿXT9ÿ`[?ÿ`[?ÿa]BÿljMÿonJÿ~^ÿº¿²ÿìòëÿçüìÿ°úÖÿbéäÿC‡æÿN4Ñÿz5wÿ¢q$ÿ»ÍAÿÌÛ¤ÿ¶½µÿ[oWÿKE+ÿ`Z;ÿdaDÿQK8ÿ)ÿ#$$ÿ'%"ÿ))"ÿ&$!ÿ""ÿ!ÿPH3ÿ]T=ÿ]R9ÿ60!ÿ ßÿÿÿÿÿ&$ÿÿ ÿÿ  ÿÿ]X:ÿ^Y;ÿ^[<ÿfgDÿ}ySÿ´±ŽÿðóéÿóúäÿÛõÿÐUÿHˆVÿIaQÿFO<ÿDR2ÿAL*ÿC?&ÿT6)ÿqp*ÿœ²ÿÁݶÿs•mÿHH,ÿ`]=ÿdcDÿa^Aÿ`\@ÿ\W=ÿVQ;ÿQK8ÿLF5ÿKC3ÿ[S;ÿ^T=ÿ]Q9ÿ2,ÿ Ü ÿ ÿÿÿ ÿ85+ÿÿ ÿÿ ÿ ÿWL%ÿXS,ÿYV2ÿ`[<ÿÁ½£ÿøöáÿôêÂÿÏØaÿxHÿcdHÿihQÿjmTÿnqXÿttWÿvxRÿhlMÿVX?ÿUG9ÿkY;ÿ–”Œÿ—Ë›ÿevÿGC(ÿ_\>ÿ[W;ÿZU;ÿYT:ÿ[U<ÿ\V>ÿ\U>ÿ\U>ÿ]U>ÿ]T>ÿ\P:ÿ+'ÿ Óÿÿÿÿ'% ÿSQEÿÿÿÿ  ÿ3(ÿJ: ÿUGÿ\Nÿ¼¸¨ÿûøàÿèɨÿµ²ZÿlpJÿxuVÿŠgÿ—nÿ¨¢vÿ¯©}ÿ³«~ÿ²©zÿ©¡sÿ”gÿvqTÿZ\Cÿq‚@ÿw~iÿ~”ÿK\=ÿZW6ÿ^]:ÿ_[;ÿ_[<ÿ]X;ÿ[T9ÿZS9ÿTJ2ÿPH0ÿQK3ÿ[P:ÿ#ÿ ÄÿÿÿÿAB7ÿRZRÿ  ÿ;4)ÿÿ ÿoÿfcÿR;ÿž‡yÿðå®ÿÖ®µÿ»®hÿvxXÿˆ‚bÿ«¥}ÿÏË¢ÿ»²†ÿ¶¬ÿ¸­‚ÿ¼²†ÿøŠÿåߟÿÊÃÿž˜pÿ{wUÿ^sAÿi™:ÿ…†YÿaxQÿLN$ÿ^a*ÿ]](ÿ\Z'ÿ]Y(ÿ^Y(ÿ_Y)ÿ]T%ÿYP$ÿZR%ÿcW,ÿ ÿ ­ÿÿÿ!!ÿkriÿÿ*% ÿ:2&ÿ  ÿZaBÿ¿Õaÿ·Ø@ÿrtÿa:-ÿ}žjÿsx€ÿ\bKÿ~uXÿ§œwÿÙÎÿôè²ÿëÞ©ÿôæ°ÿ÷é²ÿõç°ÿöè±ÿûï³ÿçÛ£ÿÅ»Œÿ—iÿovPÿMq@ÿ\sRÿdxGÿTV+ÿf_ÿdZÿdYÿdXÿcWÿbVÿbUÿcTÿhUÿgS!ÿ ÿ ‘ÿÿÿQYNÿ/4/ÿÿK?1ÿÿÿÃÇ©ÿÎ׬ÿÁÉŽÿbQ*ÿ ÿ(IHÿ@GRÿVS=ÿ…x\ÿ¬xÿÝÍÿýñ²ÿÞПÿ×ÊšÿâÕ¢ÿÿð´ÿúí¯ÿÙÌšÿõç­ÿÔÉ”ÿ¥tÿ~€ZÿZmKÿ\aWÿ]kEÿPL*ÿ`Cÿ_Bÿ_Bÿ^Bÿ^Bÿ]Bÿ]Bÿ]AÿbAÿT8ÿ ÿ mÿÿ/0%ÿ,.'ÿ ÿ4.$ÿÿ  ÿpÿÓÖµÿÚݺÿÇÅ£ÿhWCÿ ÿ ÿBB2ÿrbKÿ°…oÿÝ¿–ÿñÞ«ÿüë±ÿéÚ§ÿãÔ£ÿñâ­ÿþî´ÿøé°ÿáÓŸÿûì°ÿÞÒÿ®¦~ÿz€]ÿWkJÿRW>ÿ?K*ÿ?6ÿF$ÿJ&ÿR)ÿR(ÿS)ÿU*ÿT*ÿV+ÿY+ÿ;!ÿ ÿ Bÿ%%ÿÿ ÿÿÿ  ÿ>A=ÿÇȲÿÝÛ¿ÿÍ̲ÿÏЮÿ¦šxÿÿ ÿ<;+ÿbQ>ÿ¦e\ÿÑ|ÿåÌšÿíåÄÿìçÌÿðêÌÿóíÍÿòíÎÿü÷ÜÿýúäÿöóæÿØ×Íÿ¤¦šÿr~oÿSfTÿ9C0ÿ(ÿ5'ÿ< ÿ?ÿB ÿ>ÿAÿI"ÿJ#ÿL$ÿM%ÿ#ÿ ô  ""ÿÿ ÿ ÿÿ ÿ"ÿzzeÿ¦¥¦ÿÔÕÆÿÝÜÄÿÝÚÁÿÔÌ­ÿha@ÿ ÿ30"ÿPK5ÿ¢cYÿé›~ÿõÍ›ÿñá¶ÿèàÃÿàÚÁÿèäÏÿÙÕ¾ÿòïÙÿùôÛÿëÜÁÿÇ´“ÿ‹eÿx{YÿV^Aÿ3:%ÿ$ÿ& ÿ( ÿ/ÿ3ÿ8ÿ9ÿ:ÿ;ÿ<ÿ: ÿ ÿ Ò  ÿ ÿÿ ÿ ÿÿ`W,ÿ|w(ÿzxDÿœ›ÿÆÈÇÿããÐÿ×Ô¼ÿ˾™ÿr[?ÿ()ÿ67#ÿ[M6ÿÀn\ÿè¢tÿøÖšÿðÚ¡ÿéÖ¡ÿþðµÿûî²ÿöè¬ÿìߟÿ×»‡ÿ±›fÿy}OÿnqOÿfiJÿ@F.ÿG,#ÿ) ÿÿÿ ÿ  ÿ' ÿ+ÿ-ÿ/ÿ(ÿ ÿ  ™ ÿÿ  ÿ ÿ "ÿWT$ÿ[S(ÿ`U-ÿyt'ÿyz3ÿ’•wÿ¯³¶ÿÔÖËÿáÞÇÿÁ­ÿ_P2ÿ)*ÿ27ÿfM3ÿÌtPÿê¥aÿõÍyÿñ׆ÿùæ’ÿ÷ëšÿòë–ÿåæ‚ÿ¿¼bÿ‚‡AÿYa9ÿZ[@ÿ=B-ÿX=Nÿ›,†ÿ‡'lÿg>ÿCÿ)ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ U  ÿ ÿ  ÿÿ`S-ÿQK&ÿTOÿdZ!ÿWK(ÿd`*ÿssÿwzÿ•4ÿ”Ÿiÿ¨¶¤ÿÂÉ·ÿ¹­ÿuVÿ=P6ÿ)ÿ*ÿ%ÿ)ÿ(ÿ)ÿvu]ÿߨÈÿÓÓÐÿÑÑÎÿöõêÿüùèÿüñèÿùÙéÿö¶ãÿò˜Øÿì…ÏÿËw»ÿªx£ÿwakÿ ÿ"â'"ÿ)#!ÿ4K(ÿO‰2ÿi­>ÿm–8ÿms8ÿsg<ÿ`R,ÿLE#ÿVRÿja!ÿZM$ÿXT%ÿoqÿy|ÿ‚‰!ÿ‘›Dÿ¬ƒÿ´Ç®ÿÉÔÀÿ¸¿ªÿ„ŸÿviUÿ`f:ÿ^oOÿpr[ÿ³¬›ÿÐÍÁÿ÷öîÿÿÿýÿþþþÿøøøÿËËËÿééèÿõôðÿþøøÿüæõÿøÊìÿô±âÿæªÝÿYJZÿÿ7+"†&ÿ&ÿ,-%ÿCp-ÿZœ4ÿo´>ÿnŒ5ÿjj4ÿuh9ÿbT,ÿVN'ÿTOÿd[ÿ]O!ÿUP$ÿlpÿorÿ~ƒÿ“œ1ÿ™§^ÿ§¾•ÿÁÙ»ÿÌØÄÿÅôÿÐ˸ÿÚÕÄÿâßÏÿÉÇ»ÿÍÌÄÿèçâÿÕÕÓÿôôôÿÿÿÿÿôôôÿÝÝÝÿÊÊÊÿúúúÿùùùÿþûþÿýïùÿÏ»Ìÿÿ0.%ð`6/$'ÿ#ÿ'ÿ2C'ÿPŠ-ÿa¦5ÿs°;ÿpƒ3ÿur9ÿwh8ÿ\O)ÿKE!ÿTPÿe]ÿaRÿMGÿfkÿntÿ{ÿ”$ÿ– ?ÿž¸vÿ²Õ¥ÿËçÃÿ×ßÍÿÕÓÄÿ×ÔÅÿÞÛÑÿÚØÏÿ¾½·ÿâááÿÙÙÙÿ÷÷÷ÿùùùÿýýýÿþþþÿòòòÿîîîÿÿÿÿÿýþþÿnmmÿÿT>6š­VU%ÿ$ÿ$ÿ,,&ÿ<]'ÿ\Ÿ.ÿn¼<ÿx¯;ÿy„3ÿph3ÿug4ÿbU,ÿOI$ÿGDÿQLÿTFÿD=ÿW]ÿhoÿnpÿ’’!ÿ™œ,ÿœ¯Pÿ™¼yÿ¢Æ•ÿ±Å©ÿÇɽÿÌȽÿËȽÿáÞÚÿçååÿàßàÿÕÕÖÿÎÍÎÿÖÔÕÿÜÜÜÿíííÿüüüÿÿÿÿÿÇËÊÿÿ=80õ–OT'ÿ#ÿ"ÿ'ÿ1='ÿK{)ÿc©/ÿrº;ÿu—3ÿxz0ÿ{r6ÿtf1ÿ‡lÿœ›‹ÿ›™ˆÿ™—~ÿneGÿ:3ÿJPÿhqÿsuÿ‰…"ÿ¤¢Yÿ¶¼’ÿ²Â¢ÿš´ÿ¥ÿ—¡ÿµµ¬ÿßÛÒÿÁ¾»ÿ¿ÁÿÖÕÖÿÓÒÓÿÉÈÉÿ¸·¸ÿÈÆÈÿòòòÿøúúÿNNMÿ"þcE=ˆ$ ÿ%ÿ"ÿ$ÿ,*%ÿ6N$ÿ\™,ÿg°3ÿ~Á=ÿ€“3ÿzu-ÿti0ÿÍDzÿ÷ööÿ¾½¶ÿßÞÖÿûûùÿ¯©™ÿ6-ÿQXÿkxÿÄŤÿøøõÿÖѺÿÞÙ¾ÿúû÷ÿÊÙÁÿ{™gÿ±Æ¢ÿÉÎÃÿöõôÿüüüÿåääÿìêìÿýüýÿõôôÿÝÜßÿòôõÿ¡£¤ÿÿC6+Ý…HA$"ÿ'ÿ!ÿ"ÿ'ÿ08(ÿAd#ÿd¥-ÿf¨2ÿ†·:ÿ}‚-ÿyq+ÿÉÆ¯ÿçæâÿ90ÿOI"ÿš–{ÿþþþÿ}uWÿB3ÿˆŠcÿýýüÿ„…]ÿ^Tÿ’x"ÿ½©kÿþýüÿ°~ÿ¦_ÿæñÜÿñòðÿ‘ÿÇÁÆÿÔÐÓÿÖÐÔÿòèðÿûñùÿÓÔÙÿ#!"ÿ**!û[:/U" ÿ'#ÿ#ÿ ÿ#ÿ+)#ÿ4F%ÿU…(ÿi«.ÿ{¿=ÿŒª8ÿ{-ÿÒͱÿèçãÿKAÿ\M%ÿYQ-ÿåäÞÿ¶µ£ÿK@ÿ¹ªÿàáÙÿNVÿciÿqfÿ–v,ÿïèÜÿÇÅ­ÿ|…?ÿöùòÿ¾Ë²ÿ˜®‡ÿØå×ÿÕÒØÿÙÑÙÿÚÏÙÿíåîÿSMRÿÿ;.#¥i;.ÿ&$ÿ$ÿÿ"ÿ$ÿ18'ÿÿÔÓÂÿÏËÅÿ63ÿ]iÿpwÿjaÿÙÔÇÿÖÍÂÿ|b6ÿþþþÿ¤³†ÿ…¬]ÿ¾è ÿÄÙ½ÿ¶º½ÿèàîÿ‚{„ÿÿ/+!äH*ÿ%#ÿ&!ÿÿÿ"ÿ*)"ÿ7G'ÿU|*ÿr¯0ÿ‚Ç=ÿ”º=ÿØÚ²ÿëéãÿ]Wÿwi'ÿ|l.ÿàÝÔÿÁÀ¸ÿ<3ÿÇôÿÜÙÐÿG2ÿA9ÿ`kÿpx ÿââÒÿ޳ÿzU0ÿú÷õÿ­¤…ÿqz0ÿ™Åaÿ²å’ÿËèÈÿ›¢¢ÿÿ%%ó6$?ÿ$"ÿ&#ÿ ÿÿ!ÿ# ÿ18%ÿÿUIÿfFÿJ'ÿB:ÿƒMÿhg[ÿÿ?7.ÚÆÀ½…¨¨¨‘¡¡¡—¥¥¥”¥¥¥”NNN_) ÿÿ%&ÿ)(ÿÿÿSNLÿ‡…„ÿÿ«­¨ÿåæâÿ1>ÿbuÿž´Hÿÿÿÿÿ¤£vÿŽw*ÿz)ÿšr(ÿÁ¶ÿÿÿÿÿTLÿZOÿ_OÿÅÆ«ÿ–’†ÿ@/ÿÙÖÈÿ»±©ÿ/ÿ§¦£ÿâááþ γ®«aÿÿÿÿëëëåïïïÑüüüÇýýýÆÅÅÅNççç~°°°bB8 ÿÿ##ÿ**ÿMKFÿ´²±ÿËÊÊÿea_ÿ$#ÿ®¯«ÿãäâÿ+6ÿJWÿ‹˜Aÿÿÿÿÿ›žsÿ‚-ÿ¸“2ÿ–o%ÿÍ·’ÿÿÿÿÿVTÿrkÿk_ÿ¿¸©ÿ¡ ‰ÿc[@ÿÿÿÿÿîîíÿ%$"ÿ¡¢¢ÿïïïïe¸¸¸Xÿÿÿÿvvv 6NNN°°°†††þþþFþþþÃëëëÂpR: ÿÿ@?7ÿ¸¹µÿÝÝÜÿjhgÿÿÿ"!ÿ®®«ÿãäâÿ")ÿ8Dÿgo6ÿÿÿÿÿš›pÿxt$ÿ¾Ÿ:ÿµŠ0ÿǵ‘ÿÿÿÿÿPNÿvpÿz ÿÊǪÿ¡Ÿ‰ÿ…ÿñññÿÌÌÌÿ``_ý±°¯íñññì^¸¸¸XÿÿÿÿtttŒ4››› ×××hõõõßÝÝÝÎmmme ÿÿ$#ÿ€yÿÙÙØÿ¯­¬ÿ;87ÿÿÿ¬­ªÿôôôÿª¬¦ÿ±´§ÿ¿Â²ÿÿÿÿÿ™˜oÿ€z"ÿ»©6ÿÄ—8ÿÞŘÿÿÿÿÿ\GÿuqÿwÿÎÇ«ÿ ™ŒÿÍËÇÿ½¾¾ÿnnlöâáàÁÚÚÚºñññì_¸¸¸XÿÿÿÿtttŒ4$$$£££>âââ´÷÷÷Þßß߀WWW ÿ ÿÿ%'ÿ55+ÿ}{xÿÖÕÔÿÿÿ««©ÿïïîÿ}yÿ‹‘‚ÿ¤¬“ÿÿÿÿÿ•’oÿ~s!ÿ‘~#ÿ»˜5ÿáÇ›ÿÿÿÿÿ]?ÿ„e!ÿ‰€#ÿÆÃ¨ÿ¢¢¡ÿôôôÿ’’ÕYWThüüüæååå¹ðððíb¸¸¸XÿÿÿÿtttŒ4üüüxúúú×ááá‘‘‘" ÿ ÿÿ%%ÿ'(ÿ##ÿ+&&ÿVSSÿÿ««©ÿâãâÿÿ'/ÿTa>ÿÿÿÿÿŒnÿsc ÿ …&ÿ”w"ÿØÃ–ÿÿÿÿÿdCÿlHÿ/&ÿ££¢ÿÞßÞÿÿÿÿÿZZZ|!!!&ýýýÄúúúæïïïîd¸¸¸XÿÿÿÿtttŒ3þþþCÔÔÔ ÿ ÿÿ#"ÿ%'ÿ%$ÿÿÿÿ«ªªÿâãâÿ ÿ#*ÿMX>ÿÿÿÿÿ…ƒkÿcUÿ«Pÿ§‰SÿÍÀ¨ÿÿÿÿÿjZHÿECAÿý¬¬«óÿÿÿÿòòòéHþþþxÿÿÿÿòòòëSÁÁÁTÿÿÿÿ€€€+ ÿ ÿÿ!!ÿ&'ÿ%%ÿÿÿÿ™˜˜ÿÊËÊÿ!&ÿ(0ÿBK6ÿæçãÿƒ„eÿ\Oÿ×μÿçäàÿààßÿàààÿáááýøø÷å žœxíìë˜ÿÿÿßêêê’ÿÿÿ+ÿÿÿßùùùÈäää>ÿÿÿß¹¹¹M ÿ ÿ ÿÿ'&ÿ&&ÿ!ÿÿÿÿ!ÿ 'ÿ&.!ÿ*4ÿ0="ÿAJ ÿSNÿC3ÿ ÿÿ Þ `/!  ÿ ÿ ÿÿ&%ÿ&'ÿ"ÿÿÿÿÿ#ÿ#* ÿ&0ÿ#-ÿÿ ÿÿ Ê_H2 ÿ ÿ ÿÿ#!ÿ$"ÿÿÿÿÿÿÿÿ  ÿ ÿð ® G&  ÿ ÿ ÿÿÿÿÿÿÿ ÿ ÿÿþ Ë t !O7??ÿÿÿÿÿÿÿÿÿAÿÏŸÏçÏÇÏ¿Ïÿßÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿhtmldoc-1.8.27/desktop/htmldoc.desktop0100664000212600000240000000031410063720627016421 0ustar mikeuser[Desktop Entry] Encoding=UTF-8 Type=Application Name=HTMLDOC Comment=HTML Conversion Software TryExec=htmldoc Exec=htmldoc %F Icon=htmldoc.png Terminal=false Categories=Application;Office;X-Red-Hat-Base; htmldoc-1.8.27/desktop/htmldoc.book.fti0100664000212600000240000020153010063346076016470 0ustar mikeuser# Converted using "png2fti -d htmldoc-32.png"... color(56); bgnpolygon(); vertex(42.50, 59.33); vertex(53.25, 64.71); vertex(53.25, 63.63); vertex(45.73, 59.87); vertex(45.73, 56.65); vertex(44.65, 56.11); vertex(44.65, 51.81); vertex(45.73, 52.34); vertex(45.73, 50.19); vertex(43.58, 49.12); vertex(43.58, 48.04); vertex(45.73, 49.12); vertex(45.73, 44.82); vertex(44.65, 44.28); vertex(44.65, 42.13); vertex(43.58, 41.59); vertex(43.58, 38.37); vertex(44.65, 38.90); vertex(44.65, 37.83); vertex(46.80, 38.90); vertex(46.80, 36.75); vertex(43.58, 35.14); vertex(43.58, 34.06); vertex(44.65, 34.60); vertex(44.65, 33.53); vertex(45.73, 34.06); vertex(45.73, 31.91); vertex(50.03, 34.06); vertex(50.03, 30.84); vertex(45.73, 28.69); vertex(45.73, 27.61); vertex(42.50, 26.00); endpolygon(); color(56); bgnoutlinepolygon(); vertex(42.50, 26.00); vertex(50.03, 29.76); vertex(50.03, 28.69); vertex(42.50, 24.92); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(45.73, 59.87); vertex(46.80, 60.41); vertex(46.80, 59.33); vertex(45.73, 58.80); endoutlinepolygon(57); color(55); bgnpolygon(); vertex(45.73, 58.80); vertex(48.95, 60.41); vertex(48.95, 59.33); vertex(48.95, 58.26); vertex(45.73, 56.65); endpolygon(); color(57); bgnpolygon(); vertex(44.65, 56.11); vertex(45.73, 56.65); vertex(45.73, 53.42); vertex(45.73, 52.34); vertex(44.65, 51.81); endpolygon(); color(55); bgnpolygon(); vertex(45.73, 52.34); vertex(57.55, 58.26); vertex(57.55, 57.18); vertex(57.55, 56.11); vertex(45.73, 50.19); endpolygon(); color(57); bgnoutlinepolygon(); vertex(43.58, 49.12); vertex(44.65, 49.66); vertex(44.65, 48.58); vertex(43.58, 48.04); endoutlinepolygon(57); color(55); bgnpolygon(); vertex(45.73, 49.12); vertex(48.95, 50.73); vertex(48.95, 47.51); vertex(48.95, 46.43); vertex(45.73, 44.82); endpolygon(); color(57); bgnoutlinepolygon(); vertex(44.65, 44.28); vertex(45.73, 44.82); vertex(45.73, 43.74); vertex(44.65, 43.20); endoutlinepolygon(57); color(58); bgnoutlinepolygon(); vertex(44.65, 43.20); vertex(45.73, 43.74); vertex(45.73, 42.67); vertex(44.65, 42.13); endoutlinepolygon(58); color(57); bgnoutlinepolygon(); vertex(43.58, 41.59); vertex(44.65, 42.13); vertex(44.65, 41.05); vertex(43.58, 40.52); endoutlinepolygon(57); color(98); bgnoutlinepolygon(); vertex(43.58, 40.52); vertex(44.65, 41.05); vertex(44.65, 39.98); vertex(43.58, 39.44); endoutlinepolygon(98); color(99); bgnoutlinepolygon(); vertex(43.58, 39.44); vertex(45.73, 40.52); vertex(45.73, 39.44); vertex(43.58, 38.37); endoutlinepolygon(99); color(57); bgnoutlinepolygon(); vertex(44.65, 38.90); vertex(45.73, 39.44); vertex(45.73, 38.37); vertex(44.65, 37.83); endoutlinepolygon(57); color(98); bgnoutlinepolygon(); vertex(46.80, 38.90); vertex(47.88, 39.44); vertex(47.88, 38.37); vertex(46.80, 37.83); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(46.80, 37.83); vertex(47.88, 38.37); vertex(47.88, 37.29); vertex(46.80, 36.75); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(43.58, 35.14); vertex(44.65, 35.68); vertex(44.65, 34.60); vertex(43.58, 34.06); endoutlinepolygon(57); color(106); bgnpolygon(); vertex(44.65, 34.60); vertex(45.73, 35.14); vertex(45.73, 34.06); vertex(46.80, 34.60); vertex(46.80, 33.53); vertex(45.73, 32.99); vertex(45.73, 34.06); vertex(44.65, 33.53); endpolygon(); color(97); bgnoutlinepolygon(); vertex(45.73, 32.99); vertex(46.80, 33.53); vertex(46.80, 32.45); vertex(45.73, 31.91); endoutlinepolygon(97); color(97); bgnpolygon(); vertex(50.03, 34.06); vertex(51.10, 34.60); vertex(51.10, 33.53); vertex(51.10, 32.45); vertex(50.03, 31.91); endpolygon(); color(57); bgnoutlinepolygon(); vertex(50.03, 31.91); vertex(51.10, 32.45); vertex(51.10, 31.38); vertex(50.03, 30.84); endoutlinepolygon(57); color(32); bgnoutlinepolygon(); vertex(45.73, 28.69); vertex(46.80, 29.23); vertex(46.80, 28.15); vertex(45.73, 27.61); endoutlinepolygon(32); color(97); bgnoutlinepolygon(); vertex(50.03, 29.76); vertex(52.18, 30.84); vertex(52.18, 29.76); vertex(50.03, 28.69); endoutlinepolygon(97); color(56); bgnpolygon(); vertex(46.80, 60.41); vertex(51.10, 62.56); vertex(51.10, 61.48); vertex(50.03, 60.95); vertex(50.03, 59.87); vertex(50.03, 58.80); vertex(48.95, 58.26); vertex(48.95, 60.41); vertex(46.80, 59.33); endpolygon(); color(55); bgnpolygon(); vertex(45.73, 56.65); vertex(48.95, 58.26); vertex(48.95, 55.03); vertex(48.95, 53.96); vertex(45.73, 52.34); endpolygon(); color(97); bgnoutlinepolygon(); vertex(57.55, 58.26); vertex(58.63, 58.80); vertex(58.63, 57.72); vertex(57.55, 57.18); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(57.55, 57.18); vertex(58.63, 57.72); vertex(58.63, 56.65); vertex(57.55, 56.11); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(44.65, 49.66); vertex(45.73, 50.19); vertex(45.73, 49.12); vertex(44.65, 48.58); endoutlinepolygon(56); color(99); bgnpolygon(); vertex(48.95, 50.73); vertex(50.03, 51.27); vertex(50.03, 49.12); vertex(52.18, 50.19); vertex(52.18, 49.12); vertex(48.95, 47.51); endpolygon(); color(98); bgnoutlinepolygon(); vertex(48.95, 47.51); vertex(52.18, 49.12); vertex(52.18, 48.04); vertex(48.95, 46.43); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(45.73, 44.82); vertex(48.95, 46.43); vertex(48.95, 45.35); vertex(45.73, 43.74); endoutlinepolygon(55); color(157); bgnoutlinepolygon(); vertex(45.73, 43.74); vertex(46.80, 44.28); vertex(46.80, 43.20); vertex(45.73, 42.67); endoutlinepolygon(157); color(99); bgnoutlinepolygon(); vertex(44.65, 42.13); vertex(45.73, 42.67); vertex(45.73, 41.59); vertex(44.65, 41.05); endoutlinepolygon(99); color(100); bgnoutlinepolygon(); vertex(44.65, 41.05); vertex(45.73, 41.59); vertex(45.73, 40.52); vertex(44.65, 39.98); endoutlinepolygon(100); color(98); bgnpolygon(); vertex(45.73, 40.52); vertex(46.80, 41.05); vertex(46.80, 39.98); vertex(48.95, 41.05); vertex(48.95, 39.98); vertex(45.73, 38.37); endpolygon(); color(99); bgnoutlinepolygon(); vertex(47.88, 39.44); vertex(48.95, 39.98); vertex(48.95, 38.90); vertex(47.88, 38.37); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(47.88, 38.37); vertex(48.95, 38.90); vertex(48.95, 37.83); vertex(47.88, 37.29); endoutlinepolygon(156); color(56); bgnpolygon(); vertex(44.65, 35.68); vertex(47.88, 37.29); vertex(47.88, 36.22); vertex(46.80, 35.68); vertex(46.80, 34.60); vertex(48.95, 35.68); vertex(48.95, 34.60); vertex(50.03, 35.14); vertex(50.03, 34.06); vertex(46.80, 32.45); vertex(46.80, 34.60); vertex(45.73, 34.06); vertex(45.73, 35.14); vertex(44.65, 34.60); endpolygon(); color(98); bgnpolygon(); vertex(51.10, 34.60); vertex(53.25, 35.68); vertex(53.25, 34.60); vertex(53.25, 33.53); vertex(51.10, 32.45); endpolygon(); color(97); bgnoutlinepolygon(); vertex(51.10, 32.45); vertex(52.18, 32.99); vertex(52.18, 31.91); vertex(51.10, 31.38); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(46.80, 29.23); vertex(50.03, 30.84); vertex(50.03, 29.76); vertex(46.80, 28.15); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(52.18, 30.84); vertex(53.25, 31.38); vertex(53.25, 30.30); vertex(52.18, 29.76); endoutlinepolygon(57); color(57); bgnpolygon(); vertex(51.10, 62.56); vertex(52.18, 63.10); vertex(52.18, 62.02); vertex(53.25, 62.56); vertex(53.25, 61.48); vertex(52.18, 60.95); vertex(52.18, 59.87); vertex(50.03, 58.80); vertex(50.03, 60.95); vertex(51.10, 61.48); endpolygon(); color(56); bgnpolygon(); vertex(48.95, 58.26); vertex(50.03, 58.80); vertex(50.03, 55.57); vertex(50.03, 54.49); vertex(48.95, 53.96); endpolygon(); color(98); bgnoutlinepolygon(); vertex(58.63, 58.80); vertex(59.70, 59.33); vertex(59.70, 58.26); vertex(58.63, 57.72); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(58.63, 57.72); vertex(59.70, 58.26); vertex(59.70, 57.18); vertex(58.63, 56.65); endoutlinepolygon(97); color(55); bgnoutlinepolygon(); vertex(45.73, 50.19); vertex(48.95, 51.81); vertex(48.95, 50.73); vertex(45.73, 49.12); endoutlinepolygon(55); color(140); bgnpolygon(); vertex(50.03, 51.27); vertex(51.10, 51.81); vertex(51.10, 50.73); vertex(51.10, 49.66); vertex(50.03, 49.12); endpolygon(); color(98); bgnoutlinepolygon(); vertex(52.18, 50.19); vertex(54.33, 51.27); vertex(54.33, 50.19); vertex(52.18, 49.12); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(52.18, 49.12); vertex(53.25, 49.66); vertex(53.25, 48.58); vertex(52.18, 48.04); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(48.95, 46.43); vertex(50.03, 46.97); vertex(50.03, 45.89); vertex(48.95, 45.35); endoutlinepolygon(97); color(156); bgnoutlinepolygon(); vertex(46.80, 44.28); vertex(48.95, 45.35); vertex(48.95, 44.28); vertex(46.80, 43.20); endoutlinepolygon(156); color(100); bgnoutlinepolygon(); vertex(45.73, 42.67); vertex(46.80, 43.20); vertex(46.80, 42.13); vertex(45.73, 41.59); endoutlinepolygon(100); color(99); bgnoutlinepolygon(); vertex(45.73, 41.59); vertex(46.80, 42.13); vertex(46.80, 41.05); vertex(45.73, 40.52); endoutlinepolygon(99); color(97); bgnoutlinepolygon(); vertex(46.80, 41.05); vertex(47.88, 41.59); vertex(47.88, 40.52); vertex(46.80, 39.98); endoutlinepolygon(97); color(99); bgnoutlinepolygon(); vertex(48.95, 41.05); vertex(50.03, 41.59); vertex(50.03, 40.52); vertex(48.95, 39.98); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(48.95, 39.98); vertex(50.03, 40.52); vertex(50.03, 39.44); vertex(48.95, 38.90); endoutlinepolygon(156); color(205); bgnoutlinepolygon(); vertex(48.95, 38.90); vertex(50.03, 39.44); vertex(50.03, 38.37); vertex(48.95, 37.83); endoutlinepolygon(205); color(107); bgnoutlinepolygon(); vertex(47.88, 37.29); vertex(48.95, 37.83); vertex(48.95, 36.75); vertex(47.88, 36.22); endoutlinepolygon(107); color(57); bgnoutlinepolygon(); vertex(46.80, 35.68); vertex(47.88, 36.22); vertex(47.88, 35.14); vertex(46.80, 34.60); endoutlinepolygon(57); color(98); bgnoutlinepolygon(); vertex(48.95, 35.68); vertex(50.03, 36.22); vertex(50.03, 35.14); vertex(48.95, 34.60); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(50.03, 35.14); vertex(51.10, 35.68); vertex(51.10, 34.60); vertex(50.03, 34.06); endoutlinepolygon(97); color(148); bgnoutlinepolygon(); vertex(53.25, 35.68); vertex(54.33, 36.22); vertex(54.33, 35.14); vertex(53.25, 34.60); endoutlinepolygon(148); color(106); bgnoutlinepolygon(); vertex(53.25, 34.60); vertex(54.33, 35.14); vertex(54.33, 34.06); vertex(53.25, 33.53); endoutlinepolygon(106); color(56); bgnoutlinepolygon(); vertex(52.18, 32.99); vertex(54.33, 34.06); vertex(54.33, 32.99); vertex(52.18, 31.91); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(50.03, 30.84); vertex(51.10, 31.38); vertex(51.10, 30.30); vertex(50.03, 29.76); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(53.25, 31.38); vertex(54.33, 31.91); vertex(54.33, 30.84); vertex(53.25, 30.30); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(52.18, 63.10); vertex(55.40, 64.71); vertex(55.40, 63.63); vertex(52.18, 62.02); endoutlinepolygon(56); color(98); bgnpolygon(); vertex(53.25, 62.56); vertex(54.33, 63.10); vertex(54.33, 62.02); vertex(54.33, 60.95); vertex(52.18, 59.87); vertex(52.18, 60.95); vertex(53.25, 61.48); endpolygon(); color(57); bgnpolygon(); vertex(50.03, 58.80); vertex(52.18, 59.87); vertex(52.18, 58.80); vertex(51.10, 58.26); vertex(51.10, 57.18); vertex(51.10, 56.11); vertex(50.03, 55.57); endpolygon(); color(98); bgnoutlinepolygon(); vertex(50.03, 55.57); vertex(51.10, 56.11); vertex(51.10, 55.03); vertex(50.03, 54.49); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(59.70, 59.33); vertex(60.78, 59.87); vertex(60.78, 58.80); vertex(59.70, 58.26); endoutlinepolygon(97); color(98); bgnoutlinepolygon(); vertex(59.70, 58.26); vertex(60.78, 58.80); vertex(60.78, 57.72); vertex(59.70, 57.18); endoutlinepolygon(98); color(58); bgnoutlinepolygon(); vertex(48.95, 51.81); vertex(50.03, 52.34); vertex(50.03, 51.27); vertex(48.95, 50.73); endoutlinepolygon(58); color(139); bgnoutlinepolygon(); vertex(51.10, 51.81); vertex(54.33, 53.42); vertex(54.33, 52.34); vertex(51.10, 50.73); endoutlinepolygon(139); color(99); bgnoutlinepolygon(); vertex(51.10, 50.73); vertex(53.25, 51.81); vertex(53.25, 50.73); vertex(51.10, 49.66); endoutlinepolygon(99); color(55); bgnoutlinepolygon(); vertex(54.33, 51.27); vertex(57.55, 52.88); vertex(57.55, 51.81); vertex(54.33, 50.19); endoutlinepolygon(55); color(98); bgnpolygon(); vertex(53.25, 49.66); vertex(54.33, 50.19); vertex(54.33, 49.12); vertex(54.33, 48.04); vertex(50.03, 45.89); vertex(50.03, 46.97); vertex(53.25, 48.58); endpolygon(); color(97); bgnoutlinepolygon(); vertex(48.95, 45.35); vertex(51.10, 46.43); vertex(51.10, 45.35); vertex(48.95, 44.28); endoutlinepolygon(97); color(98); bgnpolygon(); vertex(46.80, 43.20); vertex(48.95, 44.28); vertex(48.95, 43.20); vertex(52.18, 44.82); vertex(52.18, 43.74); vertex(50.03, 42.67); vertex(50.03, 41.59); vertex(47.88, 40.52); vertex(47.88, 41.59); vertex(46.80, 41.05); endpolygon(); color(147); bgnoutlinepolygon(); vertex(50.03, 41.59); vertex(51.10, 42.13); vertex(51.10, 41.05); vertex(50.03, 40.52); endoutlinepolygon(147); color(205); bgnoutlinepolygon(); vertex(50.03, 40.52); vertex(51.10, 41.05); vertex(51.10, 39.98); vertex(50.03, 39.44); endoutlinepolygon(205); color(197); bgnpolygon(); vertex(50.03, 39.44); vertex(51.10, 39.98); vertex(51.10, 38.90); vertex(51.10, 37.83); vertex(48.95, 36.75); vertex(48.95, 37.83); vertex(50.03, 38.37); endpolygon(); color(56); bgnoutlinepolygon(); vertex(47.88, 36.22); vertex(48.95, 36.75); vertex(48.95, 35.68); vertex(47.88, 35.14); endoutlinepolygon(56); color(139); bgnoutlinepolygon(); vertex(50.03, 36.22); vertex(51.10, 36.75); vertex(51.10, 35.68); vertex(50.03, 35.14); endoutlinepolygon(139); color(98); bgnoutlinepolygon(); vertex(51.10, 35.68); vertex(52.18, 36.22); vertex(52.18, 35.14); vertex(51.10, 34.60); endoutlinepolygon(98); color(206); bgnoutlinepolygon(); vertex(54.33, 36.22); vertex(55.40, 36.75); vertex(55.40, 35.68); vertex(54.33, 35.14); endoutlinepolygon(206); color(107); bgnoutlinepolygon(); vertex(54.33, 35.14); vertex(55.40, 35.68); vertex(55.40, 34.60); vertex(54.33, 34.06); endoutlinepolygon(107); color(98); bgnoutlinepolygon(); vertex(54.33, 34.06); vertex(55.40, 34.60); vertex(55.40, 33.53); vertex(54.33, 32.99); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(51.10, 31.38); vertex(52.18, 31.91); vertex(52.18, 30.84); vertex(51.10, 30.30); endoutlinepolygon(97); color(98); bgnoutlinepolygon(); vertex(54.33, 31.91); vertex(55.40, 32.45); vertex(55.40, 31.38); vertex(54.33, 30.84); endoutlinepolygon(98); color(55); bgnpolygon(); vertex(54.33, 63.10); vertex(57.55, 64.71); vertex(57.55, 63.63); vertex(57.55, 62.56); vertex(54.33, 60.95); endpolygon(); color(98); bgnpolygon(); vertex(52.18, 59.87); vertex(53.25, 60.41); vertex(53.25, 58.26); vertex(52.18, 57.72); vertex(52.18, 56.65); vertex(51.10, 56.11); vertex(51.10, 58.26); vertex(52.18, 58.80); endpolygon(); color(99); bgnoutlinepolygon(); vertex(51.10, 56.11); vertex(52.18, 56.65); vertex(52.18, 55.57); vertex(51.10, 55.03); endoutlinepolygon(99); color(156); bgnpolygon(); vertex(60.78, 59.87); vertex(61.85, 60.41); vertex(61.85, 59.33); vertex(61.85, 58.26); vertex(60.78, 57.72); endpolygon(); color(99); bgnoutlinepolygon(); vertex(50.03, 52.34); vertex(52.18, 53.42); vertex(52.18, 52.34); vertex(50.03, 51.27); endoutlinepolygon(99); color(55); bgnoutlinepolygon(); vertex(54.33, 53.42); vertex(57.55, 55.03); vertex(57.55, 53.96); vertex(54.33, 52.34); endoutlinepolygon(55); color(98); bgnoutlinepolygon(); vertex(53.25, 51.81); vertex(54.33, 52.34); vertex(54.33, 51.27); vertex(53.25, 50.73); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(57.55, 52.88); vertex(59.70, 53.96); vertex(59.70, 52.88); vertex(57.55, 51.81); endoutlinepolygon(98); color(55); bgnpolygon(); vertex(54.33, 50.19); vertex(57.55, 51.81); vertex(57.55, 50.73); vertex(57.55, 49.66); vertex(54.33, 48.04); endpolygon(); color(98); bgnoutlinepolygon(); vertex(51.10, 46.43); vertex(54.33, 48.04); vertex(54.33, 46.97); vertex(51.10, 45.35); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(48.95, 44.28); vertex(50.03, 44.82); vertex(50.03, 43.74); vertex(48.95, 43.20); endoutlinepolygon(97); color(99); bgnoutlinepolygon(); vertex(52.18, 44.82); vertex(53.25, 45.35); vertex(53.25, 44.28); vertex(52.18, 43.74); endoutlinepolygon(99); color(99); bgnoutlinepolygon(); vertex(50.03, 42.67); vertex(51.10, 43.20); vertex(51.10, 42.13); vertex(50.03, 41.59); endoutlinepolygon(99); color(157); bgnoutlinepolygon(); vertex(51.10, 42.13); vertex(52.18, 42.67); vertex(52.18, 41.59); vertex(51.10, 41.05); endoutlinepolygon(157); color(197); bgnoutlinepolygon(); vertex(51.10, 41.05); vertex(52.18, 41.59); vertex(52.18, 40.52); vertex(51.10, 39.98); endoutlinepolygon(197); color(156); bgnoutlinepolygon(); vertex(51.10, 39.98); vertex(52.18, 40.52); vertex(52.18, 39.44); vertex(51.10, 38.90); endoutlinepolygon(156); color(98); bgnoutlinepolygon(); vertex(51.10, 38.90); vertex(52.18, 39.44); vertex(52.18, 38.37); vertex(51.10, 37.83); endoutlinepolygon(98); color(157); bgnoutlinepolygon(); vertex(48.95, 36.75); vertex(50.03, 37.29); vertex(50.03, 36.22); vertex(48.95, 35.68); endoutlinepolygon(157); color(98); bgnoutlinepolygon(); vertex(51.10, 36.75); vertex(52.18, 37.29); vertex(52.18, 36.22); vertex(51.10, 35.68); endoutlinepolygon(98); color(147); bgnoutlinepolygon(); vertex(52.18, 36.22); vertex(53.25, 36.75); vertex(53.25, 35.68); vertex(52.18, 35.14); endoutlinepolygon(147); color(198); bgnoutlinepolygon(); vertex(55.40, 36.75); vertex(56.48, 37.29); vertex(56.48, 36.22); vertex(55.40, 35.68); endoutlinepolygon(198); color(156); bgnoutlinepolygon(); vertex(55.40, 35.68); vertex(56.48, 36.22); vertex(56.48, 35.14); vertex(55.40, 34.60); endoutlinepolygon(156); color(57); bgnoutlinepolygon(); vertex(55.40, 34.60); vertex(56.48, 35.14); vertex(56.48, 34.06); vertex(55.40, 33.53); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(52.18, 31.91); vertex(53.25, 32.45); vertex(53.25, 31.38); vertex(52.18, 30.84); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(55.40, 32.45); vertex(56.48, 32.99); vertex(56.48, 31.91); vertex(55.40, 31.38); endoutlinepolygon(56); color(56); bgnpolygon(); vertex(57.55, 64.71); vertex(58.63, 65.25); vertex(58.63, 64.17); vertex(59.70, 64.71); vertex(59.70, 63.63); vertex(57.55, 62.56); endpolygon(); color(139); bgnoutlinepolygon(); vertex(53.25, 60.41); vertex(54.33, 60.95); vertex(54.33, 59.87); vertex(53.25, 59.33); endoutlinepolygon(139); color(140); bgnpolygon(); vertex(53.25, 59.33); vertex(54.33, 59.87); vertex(54.33, 57.72); vertex(54.33, 56.65); vertex(52.18, 55.57); vertex(52.18, 57.72); vertex(53.25, 58.26); endpolygon(); color(55); bgnpolygon(); vertex(61.85, 60.41); vertex(64.01, 61.48); vertex(64.01, 60.41); vertex(64.01, 59.33); vertex(61.85, 58.26); endpolygon(); color(98); bgnoutlinepolygon(); vertex(52.18, 53.42); vertex(54.33, 54.49); vertex(54.33, 53.42); vertex(52.18, 52.34); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(57.55, 55.03); vertex(59.70, 56.11); vertex(59.70, 55.03); vertex(57.55, 53.96); endoutlinepolygon(97); color(55); bgnoutlinepolygon(); vertex(54.33, 52.34); vertex(57.55, 53.96); vertex(57.55, 52.88); vertex(54.33, 51.27); endoutlinepolygon(55); color(139); bgnoutlinepolygon(); vertex(59.70, 53.96); vertex(60.78, 54.49); vertex(60.78, 53.42); vertex(59.70, 52.88); endoutlinepolygon(139); color(98); bgnpolygon(); vertex(57.55, 51.81); vertex(58.63, 52.34); vertex(58.63, 51.27); vertex(58.63, 50.19); vertex(57.55, 49.66); endpolygon(); color(156); bgnoutlinepolygon(); vertex(54.33, 48.04); vertex(57.55, 49.66); vertex(57.55, 48.58); vertex(54.33, 46.97); endoutlinepolygon(156); color(98); bgnoutlinepolygon(); vertex(50.03, 44.82); vertex(53.25, 46.43); vertex(53.25, 45.35); vertex(50.03, 43.74); endoutlinepolygon(98); color(148); bgnoutlinepolygon(); vertex(53.25, 45.35); vertex(54.33, 45.89); vertex(54.33, 44.82); vertex(53.25, 44.28); endoutlinepolygon(148); color(139); bgnoutlinepolygon(); vertex(51.10, 43.20); vertex(52.18, 43.74); vertex(52.18, 42.67); vertex(51.10, 42.13); endoutlinepolygon(139); color(197); bgnoutlinepolygon(); vertex(52.18, 42.67); vertex(53.25, 43.20); vertex(53.25, 42.13); vertex(52.18, 41.59); endoutlinepolygon(197); color(147); bgnoutlinepolygon(); vertex(52.18, 41.59); vertex(53.25, 42.13); vertex(53.25, 41.05); vertex(52.18, 40.52); endoutlinepolygon(147); color(56); bgnpolygon(); vertex(52.18, 40.52); vertex(53.25, 41.05); vertex(53.25, 39.98); vertex(53.25, 38.90); vertex(52.18, 38.37); endpolygon(); color(197); bgnoutlinepolygon(); vertex(50.03, 37.29); vertex(51.10, 37.83); vertex(51.10, 36.75); vertex(50.03, 36.22); endoutlinepolygon(197); color(197); bgnoutlinepolygon(); vertex(52.18, 37.29); vertex(53.25, 37.83); vertex(53.25, 36.75); vertex(52.18, 36.22); endoutlinepolygon(197); color(206); bgnoutlinepolygon(); vertex(53.25, 36.75); vertex(54.33, 37.29); vertex(54.33, 36.22); vertex(53.25, 35.68); endoutlinepolygon(206); color(149); bgnoutlinepolygon(); vertex(56.48, 37.29); vertex(57.55, 37.83); vertex(57.55, 36.75); vertex(56.48, 36.22); endoutlinepolygon(149); color(206); bgnoutlinepolygon(); vertex(56.48, 36.22); vertex(57.55, 36.75); vertex(57.55, 35.68); vertex(56.48, 35.14); endoutlinepolygon(206); color(97); bgnoutlinepolygon(); vertex(56.48, 35.14); vertex(57.55, 35.68); vertex(57.55, 34.60); vertex(56.48, 34.06); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(53.25, 32.45); vertex(54.33, 32.99); vertex(54.33, 31.91); vertex(53.25, 31.38); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(56.48, 32.99); vertex(58.63, 34.06); vertex(58.63, 32.99); vertex(56.48, 31.91); endoutlinepolygon(57); color(55); bgnpolygon(); vertex(60.78, 66.32); vertex(67.23, 69.55); vertex(67.23, 68.47); vertex(64.01, 66.86); vertex(64.01, 65.78); vertex(60.78, 64.17); endpolygon(); color(55); bgnpolygon(); vertex(54.33, 60.95); vertex(57.55, 62.56); vertex(57.55, 59.33); vertex(57.55, 58.26); vertex(54.33, 56.65); endpolygon(); color(155); bgnoutlinepolygon(); vertex(64.01, 61.48); vertex(65.08, 62.02); vertex(65.08, 60.95); vertex(64.01, 60.41); endoutlinepolygon(155); color(156); bgnoutlinepolygon(); vertex(64.01, 60.41); vertex(65.08, 60.95); vertex(65.08, 59.87); vertex(64.01, 59.33); endoutlinepolygon(156); color(55); bgnoutlinepolygon(); vertex(54.33, 54.49); vertex(57.55, 56.11); vertex(57.55, 55.03); vertex(54.33, 53.42); endoutlinepolygon(55); color(98); bgnoutlinepolygon(); vertex(59.70, 56.11); vertex(60.78, 56.65); vertex(60.78, 55.57); vertex(59.70, 55.03); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(57.55, 53.96); vertex(58.63, 54.49); vertex(58.63, 53.42); vertex(57.55, 52.88); endoutlinepolygon(57); color(197); bgnoutlinepolygon(); vertex(60.78, 54.49); vertex(61.85, 55.03); vertex(61.85, 53.96); vertex(60.78, 53.42); endoutlinepolygon(197); color(139); bgnoutlinepolygon(); vertex(58.63, 52.34); vertex(59.70, 52.88); vertex(59.70, 51.81); vertex(58.63, 51.27); endoutlinepolygon(139); color(149); bgnoutlinepolygon(); vertex(58.63, 51.27); vertex(59.70, 51.81); vertex(59.70, 50.73); vertex(58.63, 50.19); endoutlinepolygon(149); color(107); bgnoutlinepolygon(); vertex(57.55, 49.66); vertex(58.63, 50.19); vertex(58.63, 49.12); vertex(57.55, 48.58); endoutlinepolygon(107); color(99); bgnoutlinepolygon(); vertex(53.25, 46.43); vertex(54.33, 46.97); vertex(54.33, 45.89); vertex(53.25, 45.35); endoutlinepolygon(99); color(157); bgnoutlinepolygon(); vertex(54.33, 45.89); vertex(55.40, 46.43); vertex(55.40, 45.35); vertex(54.33, 44.82); endoutlinepolygon(157); color(156); bgnoutlinepolygon(); vertex(52.18, 43.74); vertex(53.25, 44.28); vertex(53.25, 43.20); vertex(52.18, 42.67); endoutlinepolygon(156); color(147); bgnoutlinepolygon(); vertex(53.25, 43.20); vertex(54.33, 43.74); vertex(54.33, 42.67); vertex(53.25, 42.13); endoutlinepolygon(147); color(57); bgnpolygon(); vertex(53.25, 42.13); vertex(54.33, 42.67); vertex(54.33, 41.59); vertex(54.33, 40.52); vertex(53.25, 39.98); endpolygon(); color(98); bgnoutlinepolygon(); vertex(53.25, 39.98); vertex(54.33, 40.52); vertex(54.33, 39.44); vertex(53.25, 38.90); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(51.10, 37.83); vertex(52.18, 38.37); vertex(52.18, 37.29); vertex(51.10, 36.75); endoutlinepolygon(97); color(156); bgnoutlinepolygon(); vertex(53.25, 37.83); vertex(54.33, 38.37); vertex(54.33, 37.29); vertex(53.25, 36.75); endoutlinepolygon(156); color(197); bgnoutlinepolygon(); vertex(54.33, 37.29); vertex(55.40, 37.83); vertex(55.40, 36.75); vertex(54.33, 36.22); endoutlinepolygon(197); color(107); bgnoutlinepolygon(); vertex(57.55, 37.83); vertex(58.63, 38.37); vertex(58.63, 37.29); vertex(57.55, 36.75); endoutlinepolygon(107); color(166); bgnoutlinepolygon(); vertex(57.55, 36.75); vertex(58.63, 37.29); vertex(58.63, 36.22); vertex(57.55, 35.68); endoutlinepolygon(166); color(106); bgnoutlinepolygon(); vertex(57.55, 35.68); vertex(58.63, 36.22); vertex(58.63, 35.14); vertex(57.55, 34.60); endoutlinepolygon(106); color(98); bgnoutlinepolygon(); vertex(54.33, 32.99); vertex(55.40, 33.53); vertex(55.40, 32.45); vertex(54.33, 31.91); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(58.63, 34.06); vertex(60.78, 35.14); vertex(60.78, 34.06); vertex(58.63, 32.99); endoutlinepolygon(98); color(54); bgnoutlinepolygon(); vertex(67.23, 69.55); vertex(70.46, 71.16); vertex(70.46, 70.09); vertex(67.23, 68.47); endoutlinepolygon(54); color(54); bgnoutlinepolygon(); vertex(64.01, 66.86); vertex(66.16, 67.94); vertex(66.16, 66.86); vertex(64.01, 65.78); endoutlinepolygon(54); color(97); bgnpolygon(); vertex(57.55, 62.56); vertex(58.63, 63.10); vertex(58.63, 62.02); vertex(58.63, 60.95); vertex(57.55, 60.41); endpolygon(); color(98); bgnpolygon(); vertex(57.55, 60.41); vertex(58.63, 60.95); vertex(58.63, 59.87); vertex(60.78, 60.95); vertex(60.78, 59.87); vertex(57.55, 58.26); endpolygon(); color(56); bgnoutlinepolygon(); vertex(65.08, 62.02); vertex(67.23, 63.10); vertex(67.23, 62.02); vertex(65.08, 60.95); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(65.08, 60.95); vertex(66.16, 61.48); vertex(66.16, 60.41); vertex(65.08, 59.87); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(57.55, 56.11); vertex(58.63, 56.65); vertex(58.63, 55.57); vertex(57.55, 55.03); endoutlinepolygon(57); color(157); bgnoutlinepolygon(); vertex(60.78, 56.65); vertex(61.85, 57.18); vertex(61.85, 56.11); vertex(60.78, 55.57); endoutlinepolygon(157); color(98); bgnoutlinepolygon(); vertex(58.63, 54.49); vertex(59.70, 55.03); vertex(59.70, 53.96); vertex(58.63, 53.42); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(61.85, 55.03); vertex(64.01, 56.11); vertex(64.01, 55.03); vertex(61.85, 53.96); endoutlinepolygon(55); color(140); bgnoutlinepolygon(); vertex(59.70, 52.88); vertex(60.78, 53.42); vertex(60.78, 52.34); vertex(59.70, 51.81); endoutlinepolygon(140); color(158); bgnoutlinepolygon(); vertex(59.70, 51.81); vertex(60.78, 52.34); vertex(60.78, 51.27); vertex(59.70, 50.73); endoutlinepolygon(158); color(198); bgnoutlinepolygon(); vertex(58.63, 50.19); vertex(59.70, 50.73); vertex(59.70, 49.66); vertex(58.63, 49.12); endoutlinepolygon(198); color(139); bgnoutlinepolygon(); vertex(54.33, 46.97); vertex(55.40, 47.51); vertex(55.40, 46.43); vertex(54.33, 45.89); endoutlinepolygon(139); color(156); bgnoutlinepolygon(); vertex(55.40, 46.43); vertex(56.48, 46.97); vertex(56.48, 45.89); vertex(55.40, 45.35); endoutlinepolygon(156); color(197); bgnoutlinepolygon(); vertex(53.25, 44.28); vertex(54.33, 44.82); vertex(54.33, 43.74); vertex(53.25, 43.20); endoutlinepolygon(197); color(57); bgnoutlinepolygon(); vertex(54.33, 43.74); vertex(55.40, 44.28); vertex(55.40, 43.20); vertex(54.33, 42.67); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(54.33, 42.67); vertex(55.40, 43.20); vertex(55.40, 42.13); vertex(54.33, 41.59); endoutlinepolygon(97); color(146); bgnoutlinepolygon(); vertex(54.33, 41.59); vertex(55.40, 42.13); vertex(55.40, 41.05); vertex(54.33, 40.52); endoutlinepolygon(146); color(147); bgnoutlinepolygon(); vertex(54.33, 40.52); vertex(55.40, 41.05); vertex(55.40, 39.98); vertex(54.33, 39.44); endoutlinepolygon(147); color(57); bgnoutlinepolygon(); vertex(52.18, 38.37); vertex(53.25, 38.90); vertex(53.25, 37.83); vertex(52.18, 37.29); endoutlinepolygon(57); color(107); bgnpolygon(); vertex(54.33, 38.37); vertex(55.40, 38.90); vertex(55.40, 37.83); vertex(56.48, 38.37); vertex(56.48, 37.29); vertex(55.40, 36.75); vertex(55.40, 37.83); vertex(54.33, 37.29); endpolygon(); color(106); bgnoutlinepolygon(); vertex(58.63, 38.37); vertex(59.70, 38.90); vertex(59.70, 37.83); vertex(58.63, 37.29); endoutlinepolygon(106); color(124); bgnoutlinepolygon(); vertex(58.63, 37.29); vertex(59.70, 37.83); vertex(59.70, 36.75); vertex(58.63, 36.22); endoutlinepolygon(124); color(148); bgnoutlinepolygon(); vertex(58.63, 36.22); vertex(59.70, 36.75); vertex(59.70, 35.68); vertex(58.63, 35.14); endoutlinepolygon(148); color(57); bgnoutlinepolygon(); vertex(55.40, 33.53); vertex(56.48, 34.06); vertex(56.48, 32.99); vertex(55.40, 32.45); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(60.78, 35.14); vertex(61.85, 35.68); vertex(61.85, 34.60); vertex(60.78, 34.06); endoutlinepolygon(56); color(55); bgnoutlinepolygon(); vertex(66.16, 67.94); vertex(70.46, 70.09); vertex(70.46, 69.01); vertex(66.16, 66.86); endoutlinepolygon(55); color(98); bgnoutlinepolygon(); vertex(58.63, 63.10); vertex(59.70, 63.63); vertex(59.70, 62.56); vertex(58.63, 62.02); endoutlinepolygon(98); color(139); bgnoutlinepolygon(); vertex(58.63, 62.02); vertex(59.70, 62.56); vertex(59.70, 61.48); vertex(58.63, 60.95); endoutlinepolygon(139); color(99); bgnoutlinepolygon(); vertex(58.63, 60.95); vertex(59.70, 61.48); vertex(59.70, 60.41); vertex(58.63, 59.87); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(60.78, 60.95); vertex(61.85, 61.48); vertex(61.85, 60.41); vertex(60.78, 59.87); endoutlinepolygon(156); color(54); bgnoutlinepolygon(); vertex(70.46, 64.71); vertex(71.53, 65.25); vertex(71.53, 64.17); vertex(70.46, 63.63); endoutlinepolygon(54); color(56); bgnoutlinepolygon(); vertex(66.16, 61.48); vertex(68.31, 62.56); vertex(68.31, 61.48); vertex(66.16, 60.41); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(58.63, 56.65); vertex(59.70, 57.18); vertex(59.70, 56.11); vertex(58.63, 55.57); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(61.85, 57.18); vertex(64.01, 58.26); vertex(64.01, 57.18); vertex(61.85, 56.11); endoutlinepolygon(55); color(99); bgnoutlinepolygon(); vertex(59.70, 55.03); vertex(60.78, 55.57); vertex(60.78, 54.49); vertex(59.70, 53.96); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(64.01, 56.11); vertex(66.16, 57.18); vertex(66.16, 56.11); vertex(64.01, 55.03); endoutlinepolygon(156); color(198); bgnoutlinepolygon(); vertex(60.78, 53.42); vertex(61.85, 53.96); vertex(61.85, 52.88); vertex(60.78, 52.34); endoutlinepolygon(198); color(206); bgnoutlinepolygon(); vertex(60.78, 52.34); vertex(61.85, 52.88); vertex(61.85, 51.81); vertex(60.78, 51.27); endoutlinepolygon(206); color(205); bgnoutlinepolygon(); vertex(59.70, 50.73); vertex(60.78, 51.27); vertex(60.78, 50.19); vertex(59.70, 49.66); endoutlinepolygon(205); color(148); bgnoutlinepolygon(); vertex(55.40, 47.51); vertex(56.48, 48.04); vertex(56.48, 46.97); vertex(55.40, 46.43); endoutlinepolygon(148); color(106); bgnoutlinepolygon(); vertex(56.48, 46.97); vertex(57.55, 47.51); vertex(57.55, 46.43); vertex(56.48, 45.89); endoutlinepolygon(106); color(147); bgnoutlinepolygon(); vertex(54.33, 44.82); vertex(55.40, 45.35); vertex(55.40, 44.28); vertex(54.33, 43.74); endoutlinepolygon(147); color(97); bgnoutlinepolygon(); vertex(55.40, 44.28); vertex(56.48, 44.82); vertex(56.48, 43.74); vertex(55.40, 43.20); endoutlinepolygon(97); color(147); bgnoutlinepolygon(); vertex(55.40, 43.20); vertex(56.48, 43.74); vertex(56.48, 42.67); vertex(55.40, 42.13); endoutlinepolygon(147); color(188); bgnoutlinepolygon(); vertex(55.40, 42.13); vertex(56.48, 42.67); vertex(56.48, 41.59); vertex(55.40, 41.05); endoutlinepolygon(188); color(197); bgnoutlinepolygon(); vertex(55.40, 41.05); vertex(56.48, 41.59); vertex(56.48, 40.52); vertex(55.40, 39.98); endoutlinepolygon(197); color(106); bgnoutlinepolygon(); vertex(53.25, 38.90); vertex(54.33, 39.44); vertex(54.33, 38.37); vertex(53.25, 37.83); endoutlinepolygon(106); color(147); bgnpolygon(); vertex(55.40, 38.90); vertex(56.48, 39.44); vertex(56.48, 38.37); vertex(58.63, 39.44); vertex(58.63, 38.37); vertex(56.48, 37.29); vertex(56.48, 38.37); vertex(55.40, 37.83); endpolygon(); color(98); bgnoutlinepolygon(); vertex(59.70, 38.90); vertex(61.85, 39.98); vertex(61.85, 38.90); vertex(59.70, 37.83); endoutlinepolygon(98); color(122); bgnoutlinepolygon(); vertex(59.70, 37.83); vertex(60.78, 38.37); vertex(60.78, 37.29); vertex(59.70, 36.75); endoutlinepolygon(122); color(156); bgnoutlinepolygon(); vertex(59.70, 36.75); vertex(60.78, 37.29); vertex(60.78, 36.22); vertex(59.70, 35.68); endoutlinepolygon(156); color(98); bgnoutlinepolygon(); vertex(56.48, 34.06); vertex(57.55, 34.60); vertex(57.55, 33.53); vertex(56.48, 32.99); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(61.85, 35.68); vertex(64.01, 36.75); vertex(64.01, 35.68); vertex(61.85, 34.60); endoutlinepolygon(57); color(54); bgnoutlinepolygon(); vertex(70.46, 70.09); vertex(71.53, 70.62); vertex(71.53, 69.55); vertex(70.46, 69.01); endoutlinepolygon(54); color(56); bgnoutlinepolygon(); vertex(59.70, 63.63); vertex(60.78, 64.17); vertex(60.78, 63.10); vertex(59.70, 62.56); endoutlinepolygon(56); color(98); bgnpolygon(); vertex(59.70, 62.56); vertex(60.78, 63.10); vertex(60.78, 62.02); vertex(60.78, 60.95); vertex(59.70, 60.41); endpolygon(); color(55); bgnoutlinepolygon(); vertex(61.85, 61.48); vertex(64.01, 62.56); vertex(64.01, 61.48); vertex(61.85, 60.41); endoutlinepolygon(55); color(55); bgnpolygon(); vertex(71.53, 65.25); vertex(73.68, 66.32); vertex(73.68, 65.25); vertex(73.68, 64.17); vertex(70.46, 62.56); vertex(70.46, 63.63); vertex(71.53, 64.17); endpolygon(); color(97); bgnoutlinepolygon(); vertex(59.70, 57.18); vertex(60.78, 57.72); vertex(60.78, 56.65); vertex(59.70, 56.11); endoutlinepolygon(97); color(156); bgnoutlinepolygon(); vertex(64.01, 58.26); vertex(65.08, 58.80); vertex(65.08, 57.72); vertex(64.01, 57.18); endoutlinepolygon(156); color(156); bgnoutlinepolygon(); vertex(60.78, 55.57); vertex(61.85, 56.11); vertex(61.85, 55.03); vertex(60.78, 54.49); endoutlinepolygon(156); color(205); bgnoutlinepolygon(); vertex(66.16, 57.18); vertex(68.31, 58.26); vertex(68.31, 57.18); vertex(66.16, 56.11); endoutlinepolygon(205); color(55); bgnpolygon(); vertex(61.85, 53.96); vertex(64.01, 55.03); vertex(64.01, 53.96); vertex(69.38, 56.65); vertex(69.38, 55.57); vertex(61.85, 51.81); endpolygon(); color(206); bgnoutlinepolygon(); vertex(60.78, 51.27); vertex(61.85, 51.81); vertex(61.85, 50.73); vertex(60.78, 50.19); endoutlinepolygon(206); color(157); bgnoutlinepolygon(); vertex(56.48, 48.04); vertex(58.63, 49.12); vertex(58.63, 48.04); vertex(56.48, 46.97); endoutlinepolygon(157); color(57); bgnoutlinepolygon(); vertex(57.55, 47.51); vertex(62.93, 50.19); vertex(62.93, 49.12); vertex(57.55, 46.43); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(55.40, 45.35); vertex(56.48, 45.89); vertex(56.48, 44.82); vertex(55.40, 44.28); endoutlinepolygon(56); color(138); bgnoutlinepolygon(); vertex(56.48, 44.82); vertex(57.55, 45.35); vertex(57.55, 44.28); vertex(56.48, 43.74); endoutlinepolygon(138); color(197); bgnoutlinepolygon(); vertex(56.48, 43.74); vertex(58.63, 44.82); vertex(58.63, 43.74); vertex(56.48, 42.67); endoutlinepolygon(197); color(198); bgnpolygon(); vertex(56.48, 42.67); vertex(57.55, 43.20); vertex(57.55, 42.13); vertex(62.93, 44.82); vertex(62.93, 43.74); vertex(56.48, 40.52); endpolygon(); color(107); bgnoutlinepolygon(); vertex(54.33, 39.44); vertex(55.40, 39.98); vertex(55.40, 38.90); vertex(54.33, 38.37); endoutlinepolygon(107); color(197); bgnoutlinepolygon(); vertex(56.48, 39.44); vertex(60.78, 41.59); vertex(60.78, 40.52); vertex(56.48, 38.37); endoutlinepolygon(197); color(148); bgnoutlinepolygon(); vertex(58.63, 39.44); vertex(61.85, 41.05); vertex(61.85, 39.98); vertex(58.63, 38.37); endoutlinepolygon(148); color(97); bgnoutlinepolygon(); vertex(61.85, 39.98); vertex(62.93, 40.52); vertex(62.93, 39.44); vertex(61.85, 38.90); endoutlinepolygon(97); color(147); bgnoutlinepolygon(); vertex(60.78, 38.37); vertex(61.85, 38.90); vertex(61.85, 37.83); vertex(60.78, 37.29); endoutlinepolygon(147); color(107); bgnoutlinepolygon(); vertex(60.78, 37.29); vertex(61.85, 37.83); vertex(61.85, 36.75); vertex(60.78, 36.22); endoutlinepolygon(107); color(57); bgnoutlinepolygon(); vertex(57.55, 34.60); vertex(58.63, 35.14); vertex(58.63, 34.06); vertex(57.55, 33.53); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(64.01, 36.75); vertex(65.08, 37.29); vertex(65.08, 36.22); vertex(64.01, 35.68); endoutlinepolygon(97); color(155); bgnoutlinepolygon(); vertex(60.78, 64.17); vertex(61.85, 64.71); vertex(61.85, 63.63); vertex(60.78, 63.10); endoutlinepolygon(155); color(156); bgnpolygon(); vertex(60.78, 63.10); vertex(61.85, 63.63); vertex(61.85, 62.56); vertex(61.85, 61.48); vertex(60.78, 60.95); endpolygon(); color(43); bgnoutlinepolygon(); vertex(64.01, 62.56); vertex(65.08, 63.10); vertex(65.08, 62.02); vertex(64.01, 61.48); endoutlinepolygon(43); color(47); bgnpolygon(); vertex(73.68, 66.32); vertex(74.76, 66.86); vertex(74.76, 65.78); vertex(74.76, 64.71); vertex(73.68, 64.17); endpolygon(); color(156); bgnoutlinepolygon(); vertex(60.78, 57.72); vertex(61.85, 58.26); vertex(61.85, 57.18); vertex(60.78, 56.65); endoutlinepolygon(156); color(148); bgnoutlinepolygon(); vertex(65.08, 58.80); vertex(66.16, 59.33); vertex(66.16, 58.26); vertex(65.08, 57.72); endoutlinepolygon(148); color(55); bgnoutlinepolygon(); vertex(61.85, 56.11); vertex(64.01, 57.18); vertex(64.01, 56.11); vertex(61.85, 55.03); endoutlinepolygon(55); color(206); bgnpolygon(); vertex(68.31, 58.26); vertex(69.38, 58.80); vertex(69.38, 57.72); vertex(68.31, 57.18); vertex(68.31, 56.11); vertex(64.01, 53.96); vertex(64.01, 55.03); vertex(68.31, 57.18); endpolygon(); color(53); bgnoutlinepolygon(); vertex(69.38, 56.65); vertex(70.46, 57.18); vertex(70.46, 56.11); vertex(69.38, 55.57); endoutlinepolygon(53); color(205); bgnoutlinepolygon(); vertex(61.85, 51.81); vertex(62.93, 52.34); vertex(62.93, 51.27); vertex(61.85, 50.73); endoutlinepolygon(205); color(147); bgnoutlinepolygon(); vertex(58.63, 49.12); vertex(60.78, 50.19); vertex(60.78, 49.12); vertex(58.63, 48.04); endoutlinepolygon(147); color(156); bgnoutlinepolygon(); vertex(62.93, 50.19); vertex(64.01, 50.73); vertex(64.01, 49.66); vertex(62.93, 49.12); endoutlinepolygon(156); color(57); bgnoutlinepolygon(); vertex(56.48, 45.89); vertex(57.55, 46.43); vertex(57.55, 45.35); vertex(56.48, 44.82); endoutlinepolygon(57); color(188); bgnoutlinepolygon(); vertex(57.55, 45.35); vertex(58.63, 45.89); vertex(58.63, 44.82); vertex(57.55, 44.28); endoutlinepolygon(188); color(198); bgnoutlinepolygon(); vertex(58.63, 44.82); vertex(61.85, 46.43); vertex(61.85, 45.35); vertex(58.63, 43.74); endoutlinepolygon(198); color(206); bgnoutlinepolygon(); vertex(57.55, 43.20); vertex(62.93, 45.89); vertex(62.93, 44.82); vertex(57.55, 42.13); endoutlinepolygon(206); color(156); bgnoutlinepolygon(); vertex(62.93, 44.82); vertex(64.01, 45.35); vertex(64.01, 44.28); vertex(62.93, 43.74); endoutlinepolygon(156); color(156); bgnoutlinepolygon(); vertex(55.40, 39.98); vertex(56.48, 40.52); vertex(56.48, 39.44); vertex(55.40, 38.90); endoutlinepolygon(156); color(198); bgnoutlinepolygon(); vertex(60.78, 41.59); vertex(61.85, 42.13); vertex(61.85, 41.05); vertex(60.78, 40.52); endoutlinepolygon(198); color(107); bgnoutlinepolygon(); vertex(61.85, 41.05); vertex(62.93, 41.59); vertex(62.93, 40.52); vertex(61.85, 39.98); endoutlinepolygon(107); color(147); bgnoutlinepolygon(); vertex(62.93, 40.52); vertex(64.01, 41.05); vertex(64.01, 39.98); vertex(62.93, 39.44); endoutlinepolygon(147); color(149); bgnoutlinepolygon(); vertex(61.85, 38.90); vertex(62.93, 39.44); vertex(62.93, 38.37); vertex(61.85, 37.83); endoutlinepolygon(149); color(98); bgnoutlinepolygon(); vertex(61.85, 37.83); vertex(62.93, 38.37); vertex(62.93, 37.29); vertex(61.85, 36.75); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(58.63, 35.14); vertex(60.78, 36.22); vertex(60.78, 35.14); vertex(58.63, 34.06); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(65.08, 37.29); vertex(67.23, 38.37); vertex(67.23, 37.29); vertex(65.08, 36.22); endoutlinepolygon(98); color(55); bgnpolygon(); vertex(61.85, 64.71); vertex(64.01, 65.78); vertex(64.01, 63.63); vertex(64.01, 62.56); vertex(61.85, 61.48); endpolygon(); color(56); bgnoutlinepolygon(); vertex(65.08, 63.10); vertex(66.16, 63.63); vertex(66.16, 62.56); vertex(65.08, 62.02); endoutlinepolygon(56); color(55); bgnoutlinepolygon(); vertex(61.85, 58.26); vertex(64.01, 59.33); vertex(64.01, 58.26); vertex(61.85, 57.18); endoutlinepolygon(55); color(158); bgnoutlinepolygon(); vertex(66.16, 59.33); vertex(67.23, 59.87); vertex(67.23, 58.80); vertex(66.16, 58.26); endoutlinepolygon(158); color(157); bgnoutlinepolygon(); vertex(64.01, 57.18); vertex(66.16, 58.26); vertex(66.16, 57.18); vertex(64.01, 56.11); endoutlinepolygon(157); color(54); bgnoutlinepolygon(); vertex(69.38, 58.80); vertex(70.46, 59.33); vertex(70.46, 58.26); vertex(69.38, 57.72); endoutlinepolygon(54); color(55); bgnoutlinepolygon(); vertex(68.31, 57.18); vertex(71.53, 58.80); vertex(71.53, 57.72); vertex(68.31, 56.11); endoutlinepolygon(55); color(44); bgnoutlinepolygon(); vertex(70.46, 57.18); vertex(71.53, 57.72); vertex(71.53, 56.65); vertex(70.46, 56.11); endoutlinepolygon(44); color(197); bgnoutlinepolygon(); vertex(62.93, 52.34); vertex(64.01, 52.88); vertex(64.01, 51.81); vertex(62.93, 51.27); endoutlinepolygon(197); color(148); bgnoutlinepolygon(); vertex(60.78, 50.19); vertex(61.85, 50.73); vertex(61.85, 49.66); vertex(60.78, 49.12); endoutlinepolygon(148); color(205); bgnoutlinepolygon(); vertex(64.01, 50.73); vertex(65.08, 51.27); vertex(65.08, 50.19); vertex(64.01, 49.66); endoutlinepolygon(205); color(97); bgnoutlinepolygon(); vertex(57.55, 46.43); vertex(58.63, 46.97); vertex(58.63, 45.89); vertex(57.55, 45.35); endoutlinepolygon(97); color(189); bgnoutlinepolygon(); vertex(58.63, 45.89); vertex(59.70, 46.43); vertex(59.70, 45.35); vertex(58.63, 44.82); endoutlinepolygon(189); color(188); bgnoutlinepolygon(); vertex(61.85, 46.43); vertex(62.93, 46.97); vertex(62.93, 45.89); vertex(61.85, 45.35); endoutlinepolygon(188); color(156); bgnoutlinepolygon(); vertex(62.93, 45.89); vertex(64.01, 46.43); vertex(64.01, 45.35); vertex(62.93, 44.82); endoutlinepolygon(156); color(107); bgnoutlinepolygon(); vertex(64.01, 45.35); vertex(65.08, 45.89); vertex(65.08, 44.82); vertex(64.01, 44.28); endoutlinepolygon(107); color(198); bgnoutlinepolygon(); vertex(56.48, 40.52); vertex(58.63, 41.59); vertex(58.63, 40.52); vertex(56.48, 39.44); endoutlinepolygon(198); color(197); bgnoutlinepolygon(); vertex(61.85, 42.13); vertex(62.93, 42.67); vertex(62.93, 41.59); vertex(61.85, 41.05); endoutlinepolygon(197); color(106); bgnoutlinepolygon(); vertex(62.93, 41.59); vertex(64.01, 42.13); vertex(64.01, 41.05); vertex(62.93, 40.52); endoutlinepolygon(106); color(157); bgnoutlinepolygon(); vertex(64.01, 41.05); vertex(65.08, 41.59); vertex(65.08, 40.52); vertex(64.01, 39.98); endoutlinepolygon(157); color(156); bgnoutlinepolygon(); vertex(62.93, 39.44); vertex(64.01, 39.98); vertex(64.01, 38.90); vertex(62.93, 38.37); endoutlinepolygon(156); color(57); bgnoutlinepolygon(); vertex(62.93, 38.37); vertex(64.01, 38.90); vertex(64.01, 37.83); vertex(62.93, 37.29); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(60.78, 36.22); vertex(61.85, 36.75); vertex(61.85, 35.68); vertex(60.78, 35.14); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(67.23, 38.37); vertex(68.31, 38.90); vertex(68.31, 37.83); vertex(67.23, 37.29); endoutlinepolygon(56); color(47); bgnpolygon(); vertex(64.01, 65.78); vertex(65.08, 66.32); vertex(65.08, 65.25); vertex(65.08, 64.17); vertex(64.01, 63.63); endpolygon(); color(156); bgnoutlinepolygon(); vertex(64.01, 63.63); vertex(65.08, 64.17); vertex(65.08, 63.10); vertex(64.01, 62.56); endoutlinepolygon(156); color(54); bgnoutlinepolygon(); vertex(70.46, 65.78); vertex(71.53, 66.32); vertex(71.53, 65.25); vertex(70.46, 64.71); endoutlinepolygon(54); color(156); bgnoutlinepolygon(); vertex(64.01, 59.33); vertex(65.08, 59.87); vertex(65.08, 58.80); vertex(64.01, 58.26); endoutlinepolygon(156); color(156); bgnoutlinepolygon(); vertex(67.23, 59.87); vertex(68.31, 60.41); vertex(68.31, 59.33); vertex(67.23, 58.80); endoutlinepolygon(156); color(205); bgnoutlinepolygon(); vertex(66.16, 58.26); vertex(68.31, 59.33); vertex(68.31, 58.26); vertex(66.16, 57.18); endoutlinepolygon(205); color(55); bgnoutlinepolygon(); vertex(70.46, 59.33); vertex(72.61, 60.41); vertex(72.61, 59.33); vertex(70.46, 58.26); endoutlinepolygon(55); color(157); bgnoutlinepolygon(); vertex(71.53, 58.80); vertex(72.61, 59.33); vertex(72.61, 58.26); vertex(71.53, 57.72); endoutlinepolygon(157); color(56); bgnoutlinepolygon(); vertex(71.53, 57.72); vertex(72.61, 58.26); vertex(72.61, 57.18); vertex(71.53, 56.65); endoutlinepolygon(56); color(157); bgnoutlinepolygon(); vertex(64.01, 52.88); vertex(65.08, 53.42); vertex(65.08, 52.34); vertex(64.01, 51.81); endoutlinepolygon(157); color(156); bgnoutlinepolygon(); vertex(61.85, 50.73); vertex(62.93, 51.27); vertex(62.93, 50.19); vertex(61.85, 49.66); endoutlinepolygon(156); color(206); bgnoutlinepolygon(); vertex(65.08, 51.27); vertex(67.23, 52.34); vertex(67.23, 51.27); vertex(65.08, 50.19); endoutlinepolygon(206); color(98); bgnoutlinepolygon(); vertex(58.63, 46.97); vertex(59.70, 47.51); vertex(59.70, 46.43); vertex(58.63, 45.89); endoutlinepolygon(98); color(190); bgnoutlinepolygon(); vertex(59.70, 46.43); vertex(61.85, 47.51); vertex(61.85, 46.43); vertex(59.70, 45.35); endoutlinepolygon(190); color(107); bgnpolygon(); vertex(62.93, 46.97); vertex(64.01, 47.51); vertex(64.01, 46.43); vertex(65.08, 46.97); vertex(65.08, 45.89); vertex(64.01, 45.35); vertex(64.01, 46.43); vertex(62.93, 45.89); endpolygon(); color(106); bgnoutlinepolygon(); vertex(65.08, 45.89); vertex(66.16, 46.43); vertex(66.16, 45.35); vertex(65.08, 44.82); endoutlinepolygon(106); color(197); bgnoutlinepolygon(); vertex(58.63, 41.59); vertex(59.70, 42.13); vertex(59.70, 41.05); vertex(58.63, 40.52); endoutlinepolygon(197); color(147); bgnoutlinepolygon(); vertex(62.93, 42.67); vertex(64.01, 43.20); vertex(64.01, 42.13); vertex(62.93, 41.59); endoutlinepolygon(147); color(107); bgnoutlinepolygon(); vertex(64.01, 42.13); vertex(65.08, 42.67); vertex(65.08, 41.59); vertex(64.01, 41.05); endoutlinepolygon(107); color(106); bgnoutlinepolygon(); vertex(65.08, 41.59); vertex(66.16, 42.13); vertex(66.16, 41.05); vertex(65.08, 40.52); endoutlinepolygon(106); color(98); bgnoutlinepolygon(); vertex(64.01, 39.98); vertex(66.16, 41.05); vertex(66.16, 39.98); vertex(64.01, 38.90); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(64.01, 38.90); vertex(65.08, 39.44); vertex(65.08, 38.37); vertex(64.01, 37.83); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(61.85, 36.75); vertex(62.93, 37.29); vertex(62.93, 36.22); vertex(61.85, 35.68); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(68.31, 38.90); vertex(69.38, 39.44); vertex(69.38, 38.37); vertex(68.31, 37.83); endoutlinepolygon(57); color(53); bgnoutlinepolygon(); vertex(68.31, 67.94); vertex(69.38, 68.47); vertex(69.38, 67.40); vertex(68.31, 66.86); endoutlinepolygon(53); color(54); bgnoutlinepolygon(); vertex(69.38, 67.40); vertex(70.46, 67.94); vertex(70.46, 66.86); vertex(69.38, 66.32); endoutlinepolygon(54); color(55); bgnpolygon(); vertex(70.46, 66.86); vertex(73.68, 68.47); vertex(73.68, 67.40); vertex(73.68, 66.32); vertex(71.53, 65.25); vertex(71.53, 66.32); vertex(70.46, 65.78); endpolygon(); color(138); bgnoutlinepolygon(); vertex(65.08, 59.87); vertex(66.16, 60.41); vertex(66.16, 59.33); vertex(65.08, 58.80); endoutlinepolygon(138); color(56); bgnoutlinepolygon(); vertex(68.31, 60.41); vertex(69.38, 60.95); vertex(69.38, 59.87); vertex(68.31, 59.33); endoutlinepolygon(56); color(107); bgnoutlinepolygon(); vertex(68.31, 59.33); vertex(69.38, 59.87); vertex(69.38, 58.80); vertex(68.31, 58.26); endoutlinepolygon(107); color(44); bgnoutlinepolygon(); vertex(72.61, 60.41); vertex(73.68, 60.95); vertex(73.68, 59.87); vertex(72.61, 59.33); endoutlinepolygon(44); color(50); bgnoutlinepolygon(); vertex(65.08, 53.42); vertex(67.23, 54.49); vertex(67.23, 53.42); vertex(65.08, 52.34); endoutlinepolygon(50); color(206); bgnoutlinepolygon(); vertex(62.93, 51.27); vertex(65.08, 52.34); vertex(65.08, 51.27); vertex(62.93, 50.19); endoutlinepolygon(206); color(205); bgnoutlinepolygon(); vertex(67.23, 52.34); vertex(68.31, 52.88); vertex(68.31, 51.81); vertex(67.23, 51.27); endoutlinepolygon(205); color(107); bgnoutlinepolygon(); vertex(59.70, 47.51); vertex(60.78, 48.04); vertex(60.78, 46.97); vertex(59.70, 46.43); endoutlinepolygon(107); color(148); bgnoutlinepolygon(); vertex(61.85, 47.51); vertex(62.93, 48.04); vertex(62.93, 46.97); vertex(61.85, 46.43); endoutlinepolygon(148); color(106); bgnoutlinepolygon(); vertex(64.01, 47.51); vertex(65.08, 48.04); vertex(65.08, 46.97); vertex(64.01, 46.43); endoutlinepolygon(106); color(57); bgnpolygon(); vertex(65.08, 46.97); vertex(66.16, 47.51); vertex(66.16, 46.43); vertex(67.23, 46.97); vertex(67.23, 45.89); vertex(66.16, 45.35); vertex(66.16, 46.43); vertex(65.08, 45.89); endpolygon(); color(198); bgnoutlinepolygon(); vertex(59.70, 42.13); vertex(62.93, 43.74); vertex(62.93, 42.67); vertex(59.70, 41.05); endoutlinepolygon(198); color(99); bgnoutlinepolygon(); vertex(64.01, 43.20); vertex(65.08, 43.74); vertex(65.08, 42.67); vertex(64.01, 42.13); endoutlinepolygon(99); color(116); bgnoutlinepolygon(); vertex(65.08, 42.67); vertex(66.16, 43.20); vertex(66.16, 42.13); vertex(65.08, 41.59); endoutlinepolygon(116); color(98); bgnoutlinepolygon(); vertex(66.16, 42.13); vertex(67.23, 42.67); vertex(67.23, 41.59); vertex(66.16, 41.05); endoutlinepolygon(98); color(106); bgnpolygon(); vertex(66.16, 41.05); vertex(67.23, 41.59); vertex(67.23, 40.52); vertex(66.16, 39.98); vertex(66.16, 38.90); vertex(65.08, 38.37); vertex(65.08, 39.44); vertex(66.16, 39.98); endpolygon(); color(57); bgnoutlinepolygon(); vertex(62.93, 37.29); vertex(64.01, 37.83); vertex(64.01, 36.75); vertex(62.93, 36.22); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(69.38, 39.44); vertex(71.53, 40.52); vertex(71.53, 39.44); vertex(69.38, 38.37); endoutlinepolygon(97); color(55); bgnpolygon(); vertex(69.38, 68.47); vertex(71.53, 69.55); vertex(71.53, 68.47); vertex(72.61, 69.01); vertex(72.61, 67.94); vertex(70.46, 66.86); vertex(70.46, 67.94); vertex(69.38, 67.40); endpolygon(); color(46); bgnoutlinepolygon(); vertex(73.68, 67.40); vertex(74.76, 67.94); vertex(74.76, 66.86); vertex(73.68, 66.32); endoutlinepolygon(46); color(106); bgnoutlinepolygon(); vertex(66.16, 60.41); vertex(67.23, 60.95); vertex(67.23, 59.87); vertex(66.16, 59.33); endoutlinepolygon(106); color(55); bgnoutlinepolygon(); vertex(70.46, 61.48); vertex(73.68, 63.10); vertex(73.68, 62.02); vertex(70.46, 60.41); endoutlinepolygon(55); color(155); bgnoutlinepolygon(); vertex(69.38, 59.87); vertex(70.46, 60.41); vertex(70.46, 59.33); vertex(69.38, 58.80); endoutlinepolygon(155); color(49); bgnoutlinepolygon(); vertex(67.23, 54.49); vertex(68.31, 55.03); vertex(68.31, 53.96); vertex(67.23, 53.42); endoutlinepolygon(49); color(53); bgnoutlinepolygon(); vertex(65.08, 52.34); vertex(66.16, 52.88); vertex(66.16, 51.81); vertex(65.08, 51.27); endoutlinepolygon(53); color(204); bgnoutlinepolygon(); vertex(68.31, 52.88); vertex(69.38, 53.42); vertex(69.38, 52.34); vertex(68.31, 51.81); endoutlinepolygon(204); color(66); bgnoutlinepolygon(); vertex(60.78, 48.04); vertex(61.85, 48.58); vertex(61.85, 47.51); vertex(60.78, 46.97); endoutlinepolygon(66); color(98); bgnoutlinepolygon(); vertex(62.93, 48.04); vertex(64.01, 48.58); vertex(64.01, 47.51); vertex(62.93, 46.97); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(65.08, 48.04); vertex(66.16, 48.58); vertex(66.16, 47.51); vertex(65.08, 46.97); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(66.16, 47.51); vertex(72.61, 50.73); vertex(72.61, 49.66); vertex(66.16, 46.43); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(67.23, 46.97); vertex(68.31, 47.51); vertex(68.31, 46.43); vertex(67.23, 45.89); endoutlinepolygon(97); color(148); bgnoutlinepolygon(); vertex(62.93, 43.74); vertex(64.01, 44.28); vertex(64.01, 43.20); vertex(62.93, 42.67); endoutlinepolygon(148); color(107); bgnoutlinepolygon(); vertex(65.08, 43.74); vertex(66.16, 44.28); vertex(66.16, 43.20); vertex(65.08, 42.67); endoutlinepolygon(107); color(98); bgnoutlinepolygon(); vertex(66.16, 43.20); vertex(74.76, 47.51); vertex(74.76, 46.43); vertex(66.16, 42.13); endoutlinepolygon(98); color(106); bgnoutlinepolygon(); vertex(67.23, 42.67); vertex(69.38, 43.74); vertex(69.38, 42.67); vertex(67.23, 41.59); endoutlinepolygon(106); color(56); bgnoutlinepolygon(); vertex(67.23, 41.59); vertex(72.61, 44.28); vertex(72.61, 43.20); vertex(67.23, 40.52); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(66.16, 39.98); vertex(67.23, 40.52); vertex(67.23, 39.44); vertex(66.16, 38.90); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(64.01, 37.83); vertex(65.08, 38.37); vertex(65.08, 37.29); vertex(64.01, 36.75); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(71.53, 40.52); vertex(72.61, 41.05); vertex(72.61, 39.98); vertex(71.53, 39.44); endoutlinepolygon(56); color(54); bgnoutlinepolygon(); vertex(71.53, 69.55); vertex(72.61, 70.09); vertex(72.61, 69.01); vertex(71.53, 68.47); endoutlinepolygon(54); color(53); bgnoutlinepolygon(); vertex(72.61, 69.01); vertex(73.68, 69.55); vertex(73.68, 68.47); vertex(72.61, 67.94); endoutlinepolygon(53); color(56); bgnoutlinepolygon(); vertex(67.23, 60.95); vertex(69.38, 62.02); vertex(69.38, 60.95); vertex(67.23, 59.87); endoutlinepolygon(56); color(40); bgnoutlinepolygon(); vertex(73.68, 63.10); vertex(74.76, 63.63); vertex(74.76, 62.56); vertex(73.68, 62.02); endoutlinepolygon(40); color(55); bgnoutlinepolygon(); vertex(70.46, 60.41); vertex(72.61, 61.48); vertex(72.61, 60.41); vertex(70.46, 59.33); endoutlinepolygon(55); color(47); bgnoutlinepolygon(); vertex(68.31, 55.03); vertex(70.46, 56.11); vertex(70.46, 55.03); vertex(68.31, 53.96); endoutlinepolygon(47); color(50); bgnoutlinepolygon(); vertex(66.16, 52.88); vertex(67.23, 53.42); vertex(67.23, 52.34); vertex(66.16, 51.81); endoutlinepolygon(50); color(203); bgnoutlinepolygon(); vertex(69.38, 53.42); vertex(70.46, 53.96); vertex(70.46, 52.88); vertex(69.38, 52.34); endoutlinepolygon(203); color(57); bgnoutlinepolygon(); vertex(61.85, 48.58); vertex(62.93, 49.12); vertex(62.93, 48.04); vertex(61.85, 47.51); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(64.01, 48.58); vertex(65.08, 49.12); vertex(65.08, 48.04); vertex(64.01, 47.51); endoutlinepolygon(57); color(96); bgnoutlinepolygon(); vertex(66.16, 48.58); vertex(67.23, 49.12); vertex(67.23, 48.04); vertex(66.16, 47.51); endoutlinepolygon(96); color(96); bgnoutlinepolygon(); vertex(72.61, 50.73); vertex(73.68, 51.27); vertex(73.68, 50.19); vertex(72.61, 49.66); endoutlinepolygon(96); color(96); bgnoutlinepolygon(); vertex(68.31, 47.51); vertex(69.38, 48.04); vertex(69.38, 46.97); vertex(68.31, 46.43); endoutlinepolygon(96); color(107); bgnoutlinepolygon(); vertex(64.01, 44.28); vertex(65.08, 44.82); vertex(65.08, 43.74); vertex(64.01, 43.20); endoutlinepolygon(107); color(98); bgnoutlinepolygon(); vertex(66.16, 44.28); vertex(74.76, 48.58); vertex(74.76, 47.51); vertex(66.16, 43.20); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(74.76, 47.51); vertex(75.83, 48.04); vertex(75.83, 46.97); vertex(74.76, 46.43); endoutlinepolygon(56); color(98); bgnpolygon(); vertex(69.38, 43.74); vertex(74.76, 46.43); vertex(74.76, 45.35); vertex(74.76, 44.28); vertex(72.61, 43.20); vertex(72.61, 44.28); vertex(69.38, 42.67); endpolygon(); color(56); bgnoutlinepolygon(); vertex(67.23, 40.52); vertex(68.31, 41.05); vertex(68.31, 39.98); vertex(67.23, 39.44); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(65.08, 38.37); vertex(67.23, 39.44); vertex(67.23, 38.37); vertex(65.08, 37.29); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(72.61, 41.05); vertex(74.76, 42.13); vertex(74.76, 41.05); vertex(72.61, 39.98); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(70.46, 62.56); vertex(73.68, 64.17); vertex(73.68, 63.10); vertex(70.46, 61.48); endoutlinepolygon(55); color(53); bgnoutlinepolygon(); vertex(72.61, 61.48); vertex(73.68, 62.02); vertex(73.68, 60.95); vertex(72.61, 60.41); endoutlinepolygon(53); color(205); bgnoutlinepolygon(); vertex(70.46, 56.11); vertex(71.53, 56.65); vertex(71.53, 55.57); vertex(70.46, 55.03); endoutlinepolygon(205); color(205); bgnoutlinepolygon(); vertex(67.23, 53.42); vertex(68.31, 53.96); vertex(68.31, 52.88); vertex(67.23, 52.34); endoutlinepolygon(205); color(154); bgnoutlinepolygon(); vertex(70.46, 53.96); vertex(71.53, 54.49); vertex(71.53, 53.42); vertex(70.46, 52.88); endoutlinepolygon(154); color(56); bgnoutlinepolygon(); vertex(62.93, 49.12); vertex(64.01, 49.66); vertex(64.01, 48.58); vertex(62.93, 48.04); endoutlinepolygon(56); color(145); bgnoutlinepolygon(); vertex(65.08, 49.12); vertex(66.16, 49.66); vertex(66.16, 48.58); vertex(65.08, 48.04); endoutlinepolygon(145); color(56); bgnpolygon(); vertex(67.23, 49.12); vertex(74.76, 52.88); vertex(74.76, 51.81); vertex(75.83, 52.34); vertex(75.83, 51.27); vertex(73.68, 50.19); vertex(73.68, 51.27); vertex(67.23, 48.04); endpolygon(); color(97); bgnoutlinepolygon(); vertex(69.38, 48.04); vertex(73.68, 50.19); vertex(73.68, 49.12); vertex(69.38, 46.97); endoutlinepolygon(97); color(106); bgnoutlinepolygon(); vertex(65.08, 44.82); vertex(67.23, 45.89); vertex(67.23, 44.82); vertex(65.08, 43.74); endoutlinepolygon(106); color(56); bgnoutlinepolygon(); vertex(74.76, 48.58); vertex(75.83, 49.12); vertex(75.83, 48.04); vertex(74.76, 47.51); endoutlinepolygon(56); color(56); bgnpolygon(); vertex(74.76, 46.43); vertex(75.83, 46.97); vertex(75.83, 45.89); vertex(75.83, 44.82); vertex(74.76, 44.28); endpolygon(); color(97); bgnoutlinepolygon(); vertex(68.31, 41.05); vertex(70.46, 42.13); vertex(70.46, 41.05); vertex(68.31, 39.98); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(67.23, 39.44); vertex(68.31, 39.98); vertex(68.31, 38.90); vertex(67.23, 38.37); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(74.76, 42.13); vertex(75.83, 42.67); vertex(75.83, 41.59); vertex(74.76, 41.05); endoutlinepolygon(56); color(45); bgnoutlinepolygon(); vertex(73.68, 64.17); vertex(74.76, 64.71); vertex(74.76, 63.63); vertex(73.68, 63.10); endoutlinepolygon(45); color(56); bgnoutlinepolygon(); vertex(71.53, 56.65); vertex(72.61, 57.18); vertex(72.61, 56.11); vertex(71.53, 55.57); endoutlinepolygon(56); color(206); bgnoutlinepolygon(); vertex(68.31, 53.96); vertex(69.38, 54.49); vertex(69.38, 53.42); vertex(68.31, 52.88); endoutlinepolygon(206); color(106); bgnoutlinepolygon(); vertex(71.53, 54.49); vertex(72.61, 55.03); vertex(72.61, 53.96); vertex(71.53, 53.42); endoutlinepolygon(106); color(147); bgnoutlinepolygon(); vertex(64.01, 49.66); vertex(65.08, 50.19); vertex(65.08, 49.12); vertex(64.01, 48.58); endoutlinepolygon(147); color(153); bgnoutlinepolygon(); vertex(66.16, 49.66); vertex(68.31, 50.73); vertex(68.31, 49.66); vertex(66.16, 48.58); endoutlinepolygon(153); color(96); bgnoutlinepolygon(); vertex(73.68, 50.19); vertex(74.76, 50.73); vertex(74.76, 49.66); vertex(73.68, 49.12); endoutlinepolygon(96); color(98); bgnoutlinepolygon(); vertex(67.23, 45.89); vertex(70.46, 47.51); vertex(70.46, 46.43); vertex(67.23, 44.82); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(70.46, 42.13); vertex(72.61, 43.20); vertex(72.61, 42.13); vertex(70.46, 41.05); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(68.31, 39.98); vertex(69.38, 40.52); vertex(69.38, 39.44); vertex(68.31, 38.90); endoutlinepolygon(57); color(205); bgnoutlinepolygon(); vertex(69.38, 54.49); vertex(71.53, 55.57); vertex(71.53, 54.49); vertex(69.38, 53.42); endoutlinepolygon(205); color(56); bgnoutlinepolygon(); vertex(72.61, 55.03); vertex(73.68, 55.57); vertex(73.68, 54.49); vertex(72.61, 53.96); endoutlinepolygon(56); color(197); bgnoutlinepolygon(); vertex(65.08, 50.19); vertex(66.16, 50.73); vertex(66.16, 49.66); vertex(65.08, 49.12); endoutlinepolygon(197); color(105); bgnoutlinepolygon(); vertex(68.31, 50.73); vertex(69.38, 51.27); vertex(69.38, 50.19); vertex(68.31, 49.66); endoutlinepolygon(105); color(56); bgnoutlinepolygon(); vertex(74.76, 50.73); vertex(75.83, 51.27); vertex(75.83, 50.19); vertex(74.76, 49.66); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(70.46, 47.51); vertex(74.76, 49.66); vertex(74.76, 48.58); vertex(70.46, 46.43); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(72.61, 43.20); vertex(73.68, 43.74); vertex(73.68, 42.67); vertex(72.61, 42.13); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(69.38, 40.52); vertex(71.53, 41.59); vertex(71.53, 40.52); vertex(69.38, 39.44); endoutlinepolygon(97); color(106); bgnoutlinepolygon(); vertex(71.53, 55.57); vertex(72.61, 56.11); vertex(72.61, 55.03); vertex(71.53, 54.49); endoutlinepolygon(106); color(203); bgnoutlinepolygon(); vertex(66.16, 50.73); vertex(67.23, 51.27); vertex(67.23, 50.19); vertex(66.16, 49.66); endoutlinepolygon(203); color(96); bgnoutlinepolygon(); vertex(69.38, 51.27); vertex(70.46, 51.81); vertex(70.46, 50.73); vertex(69.38, 50.19); endoutlinepolygon(96); color(56); bgnoutlinepolygon(); vertex(74.76, 49.66); vertex(75.83, 50.19); vertex(75.83, 49.12); vertex(74.76, 48.58); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(73.68, 43.74); vertex(74.76, 44.28); vertex(74.76, 43.20); vertex(73.68, 42.67); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(71.53, 41.59); vertex(72.61, 42.13); vertex(72.61, 41.05); vertex(71.53, 40.52); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(72.61, 56.11); vertex(73.68, 56.65); vertex(73.68, 55.57); vertex(72.61, 55.03); endoutlinepolygon(56); color(194); bgnoutlinepolygon(); vertex(67.23, 51.27); vertex(68.31, 51.81); vertex(68.31, 50.73); vertex(67.23, 50.19); endoutlinepolygon(194); color(56); bgnoutlinepolygon(); vertex(70.46, 51.81); vertex(74.76, 53.96); vertex(74.76, 52.88); vertex(70.46, 50.73); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(74.76, 44.28); vertex(75.83, 44.82); vertex(75.83, 43.74); vertex(74.76, 43.20); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(72.61, 42.13); vertex(73.68, 42.67); vertex(73.68, 41.59); vertex(72.61, 41.05); endoutlinepolygon(97); color(145); bgnoutlinepolygon(); vertex(68.31, 51.81); vertex(69.38, 52.34); vertex(69.38, 51.27); vertex(68.31, 50.73); endoutlinepolygon(145); color(98); bgnoutlinepolygon(); vertex(73.68, 42.67); vertex(74.76, 43.20); vertex(74.76, 42.13); vertex(73.68, 41.59); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(69.38, 52.34); vertex(71.53, 53.42); vertex(71.53, 52.34); vertex(69.38, 51.27); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(74.76, 43.20); vertex(75.83, 43.74); vertex(75.83, 42.67); vertex(74.76, 42.13); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(71.53, 53.42); vertex(72.61, 53.96); vertex(72.61, 52.88); vertex(71.53, 52.34); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(72.61, 53.96); vertex(74.76, 55.03); vertex(74.76, 53.96); vertex(72.61, 52.88); endoutlinepolygon(56); # Bounding box = [ 42.50 24.92 75.83 71.16 ] htmldoc-1.8.27/desktop/htmldoc.s_m.bm0100664000212600000240000000105310063126214016114 0ustar mikeuser#define htmldoc_s_m_width 24 #define htmldoc_s_m_height 24 static unsigned char htmldoc_s_m_bits[] = { 0xff, 0x00, 0x00, 0xff, 0xc3, 0x01, 0xff, 0xef, 0x0f, 0xff, 0xff, 0x1c, 0xff, 0xff, 0x38, 0xff, 0xff, 0x30, 0xff, 0xff, 0x31, 0xff, 0xff, 0x33, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x1f, 0xff, 0xff, 0x1f, 0xff, 0xff, 0x1f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f }; htmldoc-1.8.27/desktop/htmldoc-32i.png0100664000212600000240000000117010063126214016120 0ustar mikeuser‰PNG  IHDR TgÇ0PLTE%7 .+)Xk@RV1^[7oJzB–CœÇv΢¡~¥¾ªØØÒÊÏøýúL¾ÅtRNS@æØfbKGDˆH pHYs.#.#x¥?vtIMEÔ  9ì°hgÁIDATxÚMÐAKAàùâ¥`!1»Ùü}„h÷ð ù ¤ æ ì¢!Yp—)‘€$°ôKeÀ3PpË×`têÃ\¿!£ÍÂõ,ïÖÄÊüxëIà(”=ã=œ{ð¡p Fô h¹¹BðQœ7Ðqºrš˜YÈlBä Å‹“×m1åÖ%|¨h8ÓÜì9ŽÓù#€å±n–V++‡]¶<„îJ“õ+Uè¹Û;¢9¯ÿV£ùÉÆvÑ_Çu3S­Çš­Ï±OEEÇÕK­aÛgKE…†$Lü<Öívç+UÅCŒßÛÖ˦m_äÂÊ <ª¾Z”°‡€€>/Ì}o^اyl†€[NÍ›oR!S†&€ó~ªÖÊ-OŸ¥–“Éq lŠÔÜ/çÄb49샥«+ûKº5¢Œüo¤G#úü|ÒŠ„ü7¨aºNYJzÁ{Õ(ùÁ”ÏIEND®B`‚htmldoc-1.8.27/desktop/htmldoc.t.pm0100664000212600000240000000246710063126214015631 0ustar mikeuser/* XPM */ static char * htmldoc_t_pm[] = { "16 16 64 1", " c None", ". c #0A0807", "+ c #111314", "@ c #121825", "# c #171C19", "$ c #151D1F", "% c #18203F", "& c #152347", "* c #182829", "= c #1C2A34", "- c #262A31", "; c #233536", "> c #0E4252", ", c #253E31", "' c #243B45", ") c #284B32", "! c #304648", "~ c #5B2874", "{ c #235061", "] c #3E4A40", "^ c #2D4F57", "/ c #1E5A5F", "( c #295A52", "_ c #3D5557", ": c #4A515E", "< c #475773", "[ c #45635B", "} c #46656C", "| c #2B797D", "1 c #2F7E61", "2 c #4D7867", "3 c #666B6D", "4 c #597A7B", "5 c #5176A8", "6 c #4F7C8E", "7 c #408C83", "8 c #538581", "9 c #667F7A", "0 c #528C96", "a c #4F9769", "b c #9669BD", "c c #678E94", "d c #8A7F8E", "e c #73937D", "f c #8D9193", "g c #68AA9B", "h c #A4A785", "i c #92AEAB", "j c #91B3BA", "k c #98B4A7", "l c #8FC4C9", "m c #CDA5EE", "n c #BCBABE", "o c #86D1ED", "p c #A7C5DF", "q c #A2CAD4", "r c #9BD7CB", "s c #89E5E4", "t c #C9CACC", "u c #B8D5D2", "v c #B0DFE9", "w c #D7D8D7", "x c #D9EEF4", "y c #FDFFFC", "+$++#. ", "+fy#,iy+ yyyy ", "#fy#(ly{}y yy ", "$fy,1ly/4y3 yw ", "$fyyyyy>6y:$ yw ", "$fy1|jy>4yc9 yt ", "@fy16iy/0ykwnyf ", "@fy/^jy7ryyyyf ", "$a4>/|kkjnwttd ", ")1^/8i_,)]pmb<+ ", "+;/cj!5os8:~%@+ ", "++3u!Yœ½àÓGïýÆ“ÿŠ= â¤T $8;ÆJáiMèøÊÇiIîØ²÷›Ì`Åڜ̤h­Ã¡B œH-‘R!¤ÄyZZ"„ä^ŒQ1éjta¼¾DÖZw-J‚‹AiìóÒÙ?+nºôðüßû×€òãøzqŠûÅP ”Òh¥JáÄ@Ý`ÎØAv©‰ß÷Qz¸É (E)¤Và)ŒH­ZƒR8/?BøüÊÑÄV¼ê,B‡Ø<Á$ýAÀ®h²Î3sÏí­-ÏìXíÕ/ÃP5 ixË3~?Éð~Ìz÷”ßËŸòOË¥q'@8‹c`½1°\!q¬ˆ¤þq`ZkvŸ¿›ëß=<ú0ÿí|`˜ 2kIû—<óRÞ÷[ï>ÌõõqlßR¨¼õ/⪠vb²Ókâ²>ÎÚÁnHpA„Û6lÜôúÉñ±¥N§óÍ÷½ï}ÿë]ïz׿-[¶|йÁþcn»í¶ÿ~å•Wr c`:8çv„sŽ4M Ãð¿ ÌŠ4Ïó_VJ½FãojµÚßœñæCÕƒp R9Äßaqn˜ ç°Ö ”€‘gP©TxÖå—íÇas R`µC†¡ÖTªU.¿è¬ôè­upYryšÍÓ\ºcãÙî)O ë8×9wîwn¾eÓ_ÿÇäÂK/ïmÙ²åù凜íõz÷7kû眳Àë+¢CÐëõŠÀЖ³,›SJ] pâĉ‡ÛPºC0žnçC BªÁ†‹žG„uàέŸAÆ+•B+uRF ‚¬ƒ<3(„UHçP¡?§'×CÖn£ã ¶Pâ;{ç9Ö›lš€Ëyïë~áÔú?üÐÇÈÛ˸<Á9Ç>°qñøü¾þõ¯=úÖëÞpš;„ëÖ­ûEàaàØÐz“^¯WŒ¢èŠ3?|·Û†¬ý4MU† ¨E úÿ›(hhýNœbÓ4530j7¤I‡¬u8çð”FJ9à§3pÖbœ mu‰¨8DHyÍêB¿\%n9´À÷·HÛ ýÅy„ugð‘/|‡¤ñ$ÉÒALgg-R5V/zê‡Ú¸qãÅRÊ)km2ô€¦çy; g®KÓÔ&†ôcN½ÁN§£@ðψ îé@ž¬!·‰D 9¨ã ´`; ŠBÆÇÇQZã†1âÔþaÊ’¥~"´Æz§=@H‰ H?D†!”#D­Dž×ñÆ«T¶ž{6Ê6]@íÒWSÜölüÚ$ByƒRÇð:r䈨T*£o~ó›wU 477ZkŸ¬7ÆœªAYk%7XYkÅ”§€Ðœm^g]ιZ’$ÕÝ»wÿ³·D éÿŒà2'8E+'ß ´p饗ðŸþÓïðêW½˜ÄSk#Ï Ê÷¾Føú)O—àyˆB„q–´¹Š_*Rž\O46ó”×ú‚ÊÕK_Lí9/%>ç|„N­ùÖ·¾yj£®½öÚó‡1#~ãß8!„¸ëõúmÿ„*zêÆò3¨)€h­?xË-·¼äþàjC@½ŸÚÙ NIÉK “(Éid8똚šâ¸žþéó«ïøÆÇÇqÎï³=Ó‹/pZá|óƒ3ž¬¾ð=}T1Óà }JÓð Îz½¬”ÚÞétîÞ·o_ó/xÁÉ÷à†üïÎäçº<ø…©©©¥Ô¢(zñÞð†_}õÕ7=øàƒŸýÌg>sû'>ñ‰e *¨[‹§ú 'Ú÷ØyÞy¼èª«yåµ×2³n‡æsŸûÿpãWÙ÷è¾FRâ†ÉÛÉ+fgÖÿÄ7î8O#|¯SX·Ž ¨"S¼Ÿ’¹ì¬õ^¹Fž7ÉEЉ×cÓ:}ˆ’Skê„<ôÈ£ìÚ¹“‰‰ Îݱ­zË­·¼Eko‡º½ÛígÁS=àçN¼æææz—]vÙ‡Þýîwï‚ .xÕ† ^=>>þÒç?ÿùÏ>ï¼óþáMozÓW?øÁþছnª0g>SŸäy7ŒÈBHFGÇø­_'¿på ˜™¡Ýéð‘?ý3¾ò÷ÿÀý÷ÝOÒÆó=¤–¨“îðÚóðÃüÞûé©…Ç1V(ÎßqxǯŸ ÿÂWؤOvbÒºõhaÖRLnpòì½°¶ƒ¡ƒWÊ ›[\£ØèŸZÓ—%9t”$M) œ¿ó|J…Xí:oû¦v»cnøÚ?. “úgzáp3þ%ÊÆÝu×]É›Þô¦‡fggÿÆoüÆW_}õ5çwÞ«¦§§¯»z÷îÝ?øä'?ù¡÷¼ç=ó‰“@ odx¤yÛ[ÞÌ‹_x Ó““(¥ø›Ï~ŽO}æ3<ð½^Oûø~€Ò ¡ÚSÃfÎàj¶šÜ~ÏH_C­„Q>"ŒðFGÏPA” ]]¦ºm²k™Åfޤ[§{ì à§Ö'É DÑC— ØVí5]ÄÅg€äî9z€…Õ6NMóÌË/çu¿ôz¦§§¹é¦›Ô_ÿÕÇ~÷ÙϽꖧx€ãl©ñϹ ЙŸŸÏ>ýéOßš¦é пøâ‹Íó¼uÅbñêk®¹Æÿáøá¿û»¿Û¬ó £í°#&Ýn—ÿçÃÌ÷ÜÍ‹~áj^xÕU¼ã?ü{žsųù‡¸‘Ïîo9vt!%rÐåB*y–ó 1¨ûˆ0@VË/@ËøcgÉP—$(OÆ%D¦ÈÒœ<Ë0yA=û ZÅŒ@Ôd-ÆaÈœÑÙŒáÑ'žàø‰e6NM³mÛ6Þö¶·aŒáþûïãøñùøè‘ý×<Õ‚ŸRúgyÁ/ýÒ/™~ô£#aþ²ïû¯ô<ïÂ4Mû÷ï¿ï«_ýêƒøÀînµZ(³ët§“.† È9Çí?¼ƒx¿ùìçøÕ·¿—¼øE¼çwþ#/ºæ¾üåøÛ/~™v§j ¦Î¤ BKˆ}œïáœÀ­áTO[kšB–Q\¿a<òn†AamN÷è\zv¼’FX‰]í!f«8Ï`5±^r†t´4V[Ü÷ðc\~þùDQÄE]D½^ç¾ûî§Ûé> ¢çG¯,ËŠJ©× !Þ\êœóÆ?þññSŸúT}Ïž=ÖÓ;£¦äNÇN ža& R)ÐjwxpÏC¼ã×ßÅ9[çø•·¿k^ø‹¼ÿý¿Ï»Þõk¼ûÿ|·Ü~ëÀÏ¡N¬ï#kñ¦Y¢­³©yÒ¢Ÿâì^X!ï8Ð.ôX{ìÑæ³ëBä@+AMUp:'yè,wñ.?ÿŒ5×IùÊ ßâoxÍÉÚóǸóÁGJcòÓ‰[·—ÂÂèLÒk¬9kž¢º¤,‹Êó<¯Z­]tQðªW½ŠR©ä†‰š}Ík^“çy~±Rê³ÀVcÌʉ'nþâ¿øÅßýÝß=ÜjµNüdXOjœ¬MNWc¥ÞóÞßå›ß¸‰—^û"^øÂ«¹ä’‹¹ùÖïc-ä&?+ÁrÆZð¢o¢Œ*EÈÈ?3³Â%ƒr†ñrŒ]%¯/£UD06A¿~ølZ)"pÚ’>vÙÈ‘…5zT[oc:}îß{€•Æ£ÕÊPža©©ðâ1¤öN­_YYžÒAðz®ûTgeþ3·k×®7ÜpƒW.—[“““õjµÚ ‚àÔ‡\[[»øûV«uI¥Rk6›7ÜsÏ=ßë[ßzÿüü¼wgxŸ, ž ÀÙI/Ðâ$í¹a%TžîŽÉaIt Åw¾÷}î¾ï^>û¹ÏÅ!¹5¸,?•T8V *ªãÕŠ¨ÈCEúŒ øØÔalNždHb„“&K$æøÙ©ªˆP’[Å,¬OM¢&Bœ<ýÜdy…`dS,ñ±¯›sg§q½œ/Þð}$¼ÒºT; ˜É”ÍšÛÂâį¶=÷þ3Ÿ73337333÷OF]c¾ÜqÛm·-LMMýêÇ>ö±Ç?ñ‰O¨$IJÃMî­¾5ü¹†=MA‡pâd®tjóMnÉÓ!%&Í‘R£ÔÀaZí.wÜu7‡ 5HA§×å‡÷߃“‚‡ŸØCŒÕˆ7O£K^9¤Ùïpïò1„ì[8¹Æ*A²Ö oõ‰Ê²¬1*ÃåŽCG ÉqD¬ÉŽ­"z†ÒúYLÐYjPçö{÷€øãë‘Qˆ‰øã¯| – f9Ã4—PAŽ”éošâ¶‡ƶÛÜÿäi"úí…u/ü³/~í¶û®{Í ïȳDõz½0Ë2ï¤Z*¦S×#<Ò¶\{íµÇ€“J nvh­?=ƒ÷De‰òÄ„C(¤L4xž‡Ôky’cä9 ‰’ƒØ`18kðCrk‰«(˜‚O7I±H çÌRص…pf/ˆè^¦0>r!­‡Wé¯ôÉsGÖhV¦Qa@·5QįT°‹mòFëzt?„Y^#E†t[ ”ðQ¹GÒhâ´ÓU‹‘:DvŠÐTd£äf9âáÍŽ"j%H É#èî}›ôPJàŠD• úÅ×Ï?xÃÀ,PÖtÌÉìЪW€ãÃMÃÿ?I3ÙO“·*(®¨AÝÆS(¥R’¥Ù `9”BOO»9ƒÖ å+ŒÍ ¢]T4]%"Ï-Ѧi¢MS„ÓUŽ|¥‰ïÄ•Q\‘wÖ hÓ1Åõ›è5«6Áø¢ipý +RúÇÐ}…$ªìÓm5" ðJä#4ºVAhD'BµbLûy~ &4þ–uÈRGhàé ¢o1ý66ËÎɘͲgVÖ]þ½öò¾ù¡7ΞÍ3Þþ»7$n|þ³ä¢<1å„P(OâùZû é%€$ë'H˜AÖî>ÎYüP“‹Áæ{¥ª!ŒqµÞôr´ˆ®keÒÅ2Œ_p>YÝ£¿héžèÒ_XÁ¬ö(ŒÏÐi!•uÂÉIdgts/!]\ÅO|òæ"V'4—Êcøº€uYÁzb°í ·ª1Ë]DVÇElUàï˜A¨A/Zt4 :‘¨® ÿäÚGï§ßZ0@¡Ãõ‡t4ûÛõã÷Ý’´ÿ¸V¤;à ÌShæçkȈӵèaiÙa2‹Rš,Ë1Æ •‡u žö±Æ¢=6ñ•ï§!ö1L;Á+h¼Ñ¿3a×î¾/Šñ£yA’AÒÍh7û;ºÂ÷>@=[ÆŸGôtSdÙÇ.6-®…W h.7¨NqÅÅ—1S-S›˜F´Ã¡ãKÜqë:6d La µ®Œ?UA  ‘ˆ¾Â¥–©¸Äe]ÈdñQéQL…$é“d}N465;ú÷Û7¼çæÿüÖáFÿ¸’Å™@üó:bÎI¤§+—ÈaÓÝarƒÒ>6ÏO’E{ KŽ” é êüF ²~FxÎ$z¤€Wô‘6ŒLò«\õ㤹¥•¤<~ô>wçÜôØdõª’¬ÖI%ô}tÕ'ÏyæåüÊK_®-© „úYJ£ÕågæOþüqÏ ô¶QD!BBœÔÐUˆ¾d,.ó–?›+Ï߯ú‰1 q€ï ²ú<ÏIÓ”N§C«Ý½àÿúãÿÏ»'v¾¡³ôðÂ^²§»#¦Ïh æyÒ½”©hÁº­ýaëe0„«}ûˆ@!Š] ¦GQ³5¼jˆWðÆN=¬ÑnsßcPBS.ÄŒ×ÊLŽT¹|ûV.Ûº…O}ëfþç_§¿Ü#›_$Ðág4——yëk^Í{ßø:*Ž$áðâ+õä‚ÑJ™ë'yñó/äYÿø©óéû~€Ðg@t$®²md‚¿zïo°ijP“Z©·9xh‘N·;ˆe¾ÀSŽÑZ•õ3ÓÂô.ò”ùhXžú½~sáÑŸ•×þ©9ŸnèUÒSd½gX7ÈŽH1¨ý¤iBè…­"³ƒi9ûx¥²F³Ü…É3¤Û‡¹î÷?ˆÈ5#£U¶oá—®¹Š×=ÿy(%yÓ ŸÇ-÷ÝÇ׿u+¡öQ%^Úg×¶üÇ×½–J±@’e|èo¿Ä 7ßÊÇŸ„¶Ï¦±"/»úbÞû›ï Z*òŸ¯{ wy‚½ÇQž‡é´ÙP™à}×½–MS£8ç¸gÏ>þÙïðàÞ¬6ë‘¡Xvy“аœ»}íÛ‹°+‚(þ5¥×ÿAgõÉÎÓ]ËBÏXp $%n8VâÆäƒØà쩎™Öƒ€-|‰U`%øëjxETA‘­¶qñxÄéì×åÛî"”`5irÇÑy>xÃ×ùîpÔSŠë^ð\ÊÒbM‹vs‘[þÃË_ÆH¥Àg¿ý]>ü¹ÏóèÃÉÖi§Í¾Cò‘/ÿ-ŸýÞ·-—yÇÕ/A4S’£KȮᚠvqùÎm<°÷I>ðá/qã­wðd÷fTo­2±{’ÙË7²÷è!>ô'æÎ;Z¦¯ŽJc×=ÝÖ?lI‚°“’Ü:’4ÍpÖ!„BKoPps¥$Ö‚(D† {{¨‘"ÞLU ð*>^AB‚‘1òúé"öC±I2ÓFÅšÂäzº]ÁG¿ù=ê ¶oÞÈ…çn¢Õ8évÏmã’sÏàñ£ÇøØ—¾Bw© I ‚Þ9£Èó7ñ×wÞÆ¥ž±ã\v”*˜¥ëJ3\ý¬Ë‰µvOÞø}î9ü(rÊQÜYaꊶ\¹žíÏÛÀ¥×œÏ¯ü×·rñóž…òB’NϳE-Ú¿?µíy¯Ùý ýôzÀ°,¤<5!„B(‰5ù ³°JkÏÓ(­‘¾‚ØÃ›,ÌV‘Õ*t ˆ*1:*`,9S2X, ÁX?.#PQÈb/áþǬ¥Sc#§ `ãúIj•2í?Àâü*®ç0ÝeD!ÛÇß<…¬XÎRyò#¥ÛÖoÆóÆ­N³yzÀû‹õ5˜?€±”Ï©0}ñ8›Ÿ9Êì®&fkLŽŒóìÝó›¿ú.ºøŒô›MÂH Lý÷L¯~ñÓëb\Y1˜õ±Æb33à~ÎZ´Tƒ1kø*ré  &KȲFj‹Â”QQ…¤)Iê§Ðcé çoò”¥ÇsôÉEÂ0dtd—[2›06Z#EÅ£ÇVièàz dY ·Œ¢gÇÅA@»ã8^_ ÇL¯Ûˆ *DQÀXuйi÷{œÈëf¦Ï+±qG™õ3eÖÔ˜)L0­'™ Ƹê²Kyï;߯øÄ I?§S_¥P–çJÛzÏôö«×=}8@¨¹)…³nÐ7 H7lˆŸÌ~kgI¥Ã=ÄHˆô ]jÑ{¢NÞU$u0YížYÁ¶»Ðì#²”¤¹Jrüt:¤Y8Ž(‘¬¯¡S(Çxɺv½NouQ¶øsãèé ²"rú’þR‹µã˃x¢…B”Àó3¢áHŒÕ9þDÆôÙu%fGªl)Ž³Ã›fÖTH¯²ôØ1²–âÊg_Íï½ó7™œœ¥ÝèÐo,ë(¶¯•®óþÙó_å=-X!õ{Ç)íoA:‰ƒ i%J ´ï#=‰Œ¢äáÏÖðf*¨²‡m÷PÖQ˜'k̚Üh£epVÏ[šaYC ²fÕëÆ 90Æ’Z‹ô=dìc„85òâ kj²‚)"ü2a=H®Þ#*žšK2Î@` d1ÃjmàIÆ+ŠZè3VØL0çO’>v‚æ#ó,<ÆòBåbœ yÅ«_Îk_þ ¥*kËu°=<ݿӽæi@JJ"µÆY‡Rz0Ž»Ðâ¡[îåȾ'Iº`•b¹¹Ì÷ÝÉú ³LLLR*–ð´‡PŠóŸqÿþÍo¤R§±ÒÄtëx¡¹F¸äeÿ2°nÐm””$OùƒÃzZ¡} .W ð7TµÒz…Í£d-MºlH¶ðÂÖôqÝ5 Õ‰³1z}<åH”EÄ®yÖå¼ó5¯À÷1íóßü.…5TÒC)'tšUÅ(æ½oüe¦jã¸LNn$™FúšÉ‰_¿j7…`ð:?<ôˆ&c¥€ÑB‰µ´GßdH!8onϹô 6¬ÛL¥:Æñ•nùÁ-´ZM¶lÚÂÔø4[6o",8a°Î }Ík_ÿr®zþs‘* ¾xçš5g[×?÷Úÿ{äŸD©R»^ ‘Nb’Æ •FJï{肆’ÀŒxÄÍ '‹ˆ¢O¡ìSZ_ùÙ Ev¸éH´P˜Ë„a™uå*/{ÖÅÃÙž„N§ÃŽí›yñUWòž_¾Ž·¿â¥ã˜$ÍøÒ·oáþø/i4ÀÛ:…˜åþåcìššeCm”É‘^õœçP­Q¬Ö˜›åU—lã÷_tªeŒ5sssœ¿{ÖV뫬›^G©XfÓ¦ÁÆ«@ÑO{4Ûkä&i©2;³Žû÷<ʑÇÀåxE*+œ{Á[n>øèÙÏ_Ž– á@"q–AÆ+$8ƒ”åKD‰vxSEÄX±‡©wQ…2B˜U=‘B¦QÒ`Ö„Q‘ƒ§³÷s¶lâÃôß~äM¬6[üí7¿Ã‡?ö)\{Y `´€+E¸À'7’ÿú…/ðk/ºuc£üΫ^ü#¯ÓËúÜsøa¾vßw(¹±ê([FgÙZ˜ t|œ©žÏ²® IDATÑjµ2QÇ1»víü§ÆÎY­¯²¼¼D1*Rc߸ࢠxóu¯cï£{é4šÄå=ï±Wºü5àë?·ÕÑë…dnΡ†3ëAàE Y˜*âŸ3ŠZ_¹Á@}aÝYÓ£óð*¶%ñü"žÏJ\>840VŠyåÏø‘÷“„CÇó­;îâÿâ“|é+_céè!TÉCMÕ(”@øä«m:^Ì=Ç—xàØ"sD¾OìûäÖ²Ô¬³çÉǸáÞoq×þûIÚ)Ñ[F§i]!t1ÖÍ193Ããpï½÷°pü8¾ö‡ ‡yFžåt:Ž;ÎãûçÈ‘#t;]”Ö âbŒ„ÌÍmàöÜÅáC‡ÈÓÕu£e=ïâKÞ}˾G¾Üù¹Ž©Ö6ïp€K3”$^J:1ÎÄÄårypîÇM7}ƒwýöæ‰Ç÷1»u–±éݦ vüúMßúïñsQÍ Ò ¤“kPRá0x¡‡ ¹ï  §#á¾V”vT1‰Â6éñ>A±†Yléaçó,‡$!T°Öl‘+…ˆ `-º\éCßáúkHäH¼ Õ21Ö‚2*¢+#(í¡}I¡T`Ô׌©˜šL©hˆu@Ñ/2ê—ñʨL³-sñE; ‹V–—Èú}¦j#lZ¿ž$é155ÎC=ÄÔÔÖZ’~Ÿ<7Xër0>¥R‰r¹LECY>H(/¹ä^öÒkøØ_eùØqå¨ò‚ê»ßzÝŸÿħ¯müÌ(T!‡JèTÉA+lb,BOPcÒó©Á¦‚l)G4CÂBähÙÍñ‚ é´Û$«ËEGò(BH‡/5ø¢ãY‡˜Ç±…ë˜f‚M Z†¨ppþ8PP %ÓeŦJÄxX¤øTÂ"eQóu\â±aë&Ö'´Ûm–çJÉÜÖsaÏžÙ¶uŽÚÈçÚs‘B°´´D–çlÙ2wj@M*‰RŠ ð<­õ@µ:«_y-7ß|;>p7Í‹èÉxGsíÀkÿ÷gŽqeâza,.ÏÑR#¤%,¨²„ªÆ›« 6—q9žG¼®ŠiH²'3:;¨¾¤à¤óÀú½„Ö±Cx6¥Ýoѳ])!…Æ¿ˆî:äÊŽÞì$nzS*ât€ cònJ<·‰hf_KÊždsY²£*9·êqÎD•Ù± fjSl(L³.œdÏe|ja¡HX(°²°@) ©T™››ãèÂ1î¾û.FªU6mÜ@¯×C ÉÈè(žöa||Œ¸S(ˆ¢ˆ(ŠN•A’$Áó¼Ó#œB255Iš¥|÷æÛè®5ˆÇb’´9wùÅ¿õݽ޸ü³P»^X‡'Îeøk( Ô†"Þ\Yñ|Ÿh¢ˆK–bÜ`ÆS+dÖ·øS1z"F KáxÓ„îá6ž‰QÍyXé“ôK ø6'9=c‘2À/T0ÚÃö,^c ’5«ÖJ˜bˆñÂÒâ¥r™R±ÀöÛ4\]å‰'ž ÏsÖ¯_ÏÎ;™˜œ¤T.æÑ¸|°ñyÛ’6·é;ljU“^êÐØÌÐë´ð²Œvw SñGF0½Œ\zз„õ:t[0R!¯‘EÎqJáÕ"¼Ø§¨=&…dÎWl/EŒ—ŠT*%ª¥*ZĬ-ç8¼[ª#Âý,ï¹—Ûö9ŽfŽTõðuiºhëúeŠÕ*䂱móF.¸ôR¢8Â=ÅêdûAÐh4ظq##££ŒNLâ”Â"H ]‡mYÒGÖ²¤MKÖvØÔ€K^Êe[·sãÔ ûö?D¯±FTõw¶[<øöOLÄÆ'æœV‚0Vxcšx{=WE•BTµD8^¥ûDJ1!Ê …5š<³4+ˆN«M“ Äàô»+WÝu•B¹@R è•|L¡@–[L–ÏNQ(¨:Ë9ž`.Ž˜-ÆŒŽT‰‹„8´ÒåÉ ôûÇè»6÷Ür+ûîÛK75¸áNÕÀBµ!PÏJlê@ •I®zÙëyéU/a÷Ž9jÅ~kúò QÄ­·ÞÊ•/¸ŠñÉ š*Š0Cš!±ˆ¶…eG¶jIΰz“‚饘l +VèÉãôÄ"yó?rã÷¾†R–ÚÌ4y*¿ääÈu îìý„Á,;øz‚@¡G¼±)…ñ"¢P$k8úK}üTcN´qq kÕeòf+ ™à‡NúP,¢Û]¢v'‚OVޱq&F˜¾Â´!È}D=C1&7¬žXA¦ F9)ð”Føˆ#T»‹^YÆú>f¢F6R"WÆ*ždÄWlC²- ˜)ÆLŒÕ(–«8s磋|÷»k<øàý´V¾…éE8ƒvj@ „uH7˜eÍ~Ï…g$JyÄŸÞZ“ÒnÂ=·ÝÄÂÑ#<ÿ¹/âe/~9ÁÔºX¤„¤\^Ï4 zÕÀ²Ã4iÝ’ÔYÇ‘w,­Î2ËÝ£èå¡|žy:ã%²R@š´ÉtŽ+W¡ß¢×ꢣxÖÚìÊâºó~Ø>öÈýªçMâ¸LqC‰`¢€*xSUòޤ{¼‡L<Êi@âyà<–—ÉךädØjmVÈ0À_iç)y­J6Z&+ÅÏÇJð<Ëxì3 ló¶— Œ–Ë”Gkq•¥¶ãæûåÆ¿Âââ’:¾¶8-Ð2F …Áà‰Á|‘T ´ħ=ò~‚'%º£:}z½”,·Ì?ú0sðk~È/{=ëBÈ:ü®!h䨥S·êhŸp¤ Gw-¥ÓêQï.r¸õÇÝ*ó:aޮЫi†1yÑ‘¦ËØ~—vqÕ*¢¾DÚk“§}Oèà…¢·öà‰ ÀZ³A?ïÒW}Ö¯/n¬X\ÓâN´ÈT д;áæ²ÐG,–qZ,×ñ²”4É&«˜¸@îÖ¤”GjL„çJÉ9AÈl©ÀøÄq¥† ÊÌ7á–{÷ò½üGŽ?t*뢴E†…¯4ZøÚ'š(NÅ£>[CË •瘎O¿ ݵ”^ÛÑµŽ¾’ôzhI’'|óSaa¥ÎÕ¯|;çFñQw¸eHêŽtÕÑ<Ñ£±Vg¹ý$+Ý£IŸ¤*‰=¥é‚T'X y¯…K:ôP½¾•$~H¯Û¡ßêâÅ\ ÐÛÿIÀ‘tS–?A¯Ùgj©Çسv¢)£mŸÄ¦:Ý5\» ¡‡‘zð͹…"NH Úú…31B^.b¥Däã56úÛ}Ÿ]Å"ã•"¥±QâêÖ+r`aï?pˆ|ý+Þžé¢Å`$&ž ƒ*aeþä&ô†qü]øS^Yâù Jö!i¢WV),Öñ- ¢ðä ¦Þ¢m𩤭Ýv=7ü5ÁjŸÑË~“(‹ ’Î è6Rºí{~ˆ3-Ö\iê>"*’‹h‹m× {hÔ‘6A·G¡×£i}¥ÈÒ æe„þEà?VE…Ȭw ¾¹XP-1wÅeÄ•iz}A§“’,¯’Ù 1RFéLk´ƒhµIž$0;I>R%÷=r—S­0h.ðCvD1ëË%*“ãÄ•t±BËyìÙ7Ï]ìç–oü+Ç÷¢²O+D¡‹eâh’ ØFT¹ µy;ÞæpJŽh¼Z€=*a‚R9†.Æ´Hš-ÚËmzóÇè;‚9tŒôÈQ’Õ:ÝúI’&}¬¼òÒßâR^B%)¢RK?­SÒ†»WnA(G\¬Ñða‰+t©›6í¬K'mÓíµ1YŸ´SÇô›hÓdz)¡°X2VM—¤ß!,Å8+ž´þ†­Å=É”" ÕÚõ'fœœ=ͺ)#ÇÉ»=DTÄf–\ZŒ§BB£sG±ÑÁ8‹ÃNŒa¢hFBÅŽ8â2¿À…Õ*3£T§§ǧÉã2KÍ{­p×C¹û毲x|J€öd¹„Wªf©…S{áôf¢]©Œ)FüŒ•R’/(1ÝoQN¼µ^š¢t€ cÄZ!<’¬‹é[Pþð˜k<›Æ²Ü™§êB–ÈÒô³£%=í´lN½×aµ³ÆÊÚ +«K4V—h×—èµH;‹˜¬µ-ŒícÈÈ„!Ãáäi68ü¨UÙfÙײ~ûÉ¥ k EL–‘ö»Xg@Òë³°ÿq¢ÅeªÛÏCŒã;E¢%Q?%lõP¥2ýRˆ›%Å “.Óջ˜Ùj™êºiÂj U¬Ò³ðäó]jsÿ“}îýþ,ß‹çÌ üzxQDèOR+^Áèè¥tª1zS…±éR9À‹È´')y]GG\š t}B—‘t;$•ü5-IËkèÌHIm¤„Ëz´ÖVYòqxóÐóïêTUuîí~â¢Ñ÷½F÷í®:õMõ}ÿß³ƒƒ-ÚÛCÔ`«V*òyÁý\óÙqÌ›?úÏŒv?B‹Ì¢VBÒë1è=ɰû-ºç¿Azå,O\V †eí+báHQt²©ƒÂ»wTB!2fTl¨ˆÉ9Éî¼0mÈ2Jqxº@‰„ØÄa¼JjîßæúÅ«,®ÆLê’};æNyÄ‘=bᎨü–9žWk%% $ž$+ásšG!@&%õr†µø^ÚéýY1ŸN¾‘g-ùlB”fè8&RuYàÅ{ÉsŽ>|ŸÙŒÖŧ)·‡°ÕÅf)ÚVœ/ Îðbw“K[}6Î#ÚÚF÷ûÌó’b¹Àx¸3uÜ|Póîÿ£½kH*I‰º²^^ï"ç¿ÇÆöËè­Œ~?çüV—D,ÖRÎÆ,‹:íGÑ H£©Ú#W£éÔ±S&D~ÑÚ¢Ú\‚LÃØ•÷¤±fóÜ9ÔuÅ[£Ù¦Üøø¥Qû µá©ðÞ°–1ð©4RÇH¯9 uj3V'À£â6u¾ÄÖ¥õ6Ö<üâó2*|“)rêª$ieè8Åšgk¼óØeÎøÆ§DÝ>É•×p½6ñbʰ¨x&mó‹Ûœ¹p†öÎÒtÖb™á:Aécþá­w¹ú³àÖo‚’阨’v:$Q¬ÜB•„ttŽ,™±Ñí@œÐJ$ñf×ÜØéиGÒËð`ÃÔ5ÚšZ„òø¸CnL¢1"d‰"E± »±ÁÞƒ]Pw)–3ïëõ„¯ŠÒ0%$£°ÐR#¤j$÷dã]‰ˆ ¯*ðè¨Ñ#¼­A³-On†—cv|D™ÏÃØ¿ó³9q+E')¶6Xcð8jcØûà×ì´c.¿ô®D1⌟z‚³W%n£û=œóL¦s Sµ:T¹á÷¯ñÖOþ;7~ñI-Zô‰Ò”$Ëhµ6èéGÙj}™3=Éð‹\NØ:#ét Y$Þ⌣¥!’!Á˜šÊ¤ŽÐ­ŒÜ:[ž™Œ8О¥ëaóKY¥ kKÊeÉøh?Ô}ª‚Ã;·H:-t)qh”H‚I‘Qm@5æE5Ý⡽~-»wJpKÒ#¨¸…YNñÎõQò¥¬ÓùË|>_׆´5ÝÍIÑb~|ˆó5JkL^‚óDi†ð[<WUL~ýýn—oþÁ±uîªß§hwˆÒŒÑá1yalnaªœZZnÝÝå£OÞçæ[oP{ƒôJÇÄqLœf´³!Û§8;|–þ¹-¢´¢\΢25bï>‰Ì‹0ɨ$½V‹8Ò3šŒyú‰ÇyúÊ|,¨ÅXÇìëš=©i¹Œûu‡ý|FQæXëð*&‹µµ”ó9RJtœbjJ"¼DVÖ6^®m~ ð']þâDü*¼ŽQq;l€÷H%ŸÀùMàÞzª²@C’$ /?Îѽ;ÔuSVq§KUHêªÀ{G±XðÎ?þœï}û‡Œ—9º=f‹ï%ùr‰Ð’t£ÏÏîqõ“ë|ðÆßcò%>QH«š–Lj8m!LB{òâÆu^Ð?“°y¶“”b>C : û]â("ÒŠ~·ÍñhÂÓWÅÔ†­Á)‚p¢a#‹I°t‰Iª”nÕ¦·9<ž17J–”©Ä"´^jAí Y«]¤ÁœøÆÄ„"pïCコ©b„ŠQ2(¿IN JÕ÷ÈÅ^è¶Ð<.¤Üxh&û´= 8÷…'Ý¿G>>F(0U…ª ²nŸ2¨òÞ9ŽÇcþë_üÿþ©§9sù2ãÉœ³çÏs÷Ö t/ãp>|AÃõßc÷úxëµÂ;Б&Jcâ´+¡ªçX1cãüúçvè [léÓn).½òr¦r÷g6Vƒn\å H… -"N¨ZmT·O:ŸÓžÍ˜Í5yQ£©éµ¾Nq›e±Æ¡#ÐE+“û•þ‘ ÎU ¤«ÁM !5RDëáÅÕibåš=D›è(Ùx÷BœÖ¸%¯›²D Ô1ZÀÙGÅC™/‘œu´[dƒmê2oÈŽéx‚÷ðÒ«¯á|M¥·½Éôø'$uéxp눿ÿ_?âðæ':²"M2Úý.Y;%nõn=ÊÙó±}ù<ç{ô·;t7Zĉfja·ô/©š+Gçšš½UмtŒ-%…L­`·‚F°W{öòŠýeÁÑ|ÉÑlƤ\’›’ÂZœ“XÕÂĆ…öekêF<5D>JitÔFÊ©Dóô ©@6ÚÙƒö²ù,‚üURWKdè{Ç”ÕÚ+)åëÞyLePRà¥kxéë¯2Éçs¼÷(ï¸òôK˜ÚR9Μµìݻǥ'®pîñËLF#Ò,#ŠêÚQM+~ñÆ[¼û‹ŸRÎ'¤$$iœÑßè‘´â´M«= m¥ +º;t e± ëuˆ¤@»·nrç“O¹yícª|ÉîÝ;l9Zë…çl&¸{4áÚ¯Þd´·Ë™ ±U3–WËøxD^VÌò%‹bA^W”¶FõmtÓŠ50=j¯Qi µQŠŒ’°ÐRƒÒ uˆ•>„V‰>Ø *ލ«CÊå˜pHüÚÔ?:9ˆ×WΦ(‘Â#â6­Øñ‡ßý'ìî2™L©Ê»œñÅ—¾Á|¹ Ê—8g(òœÏ>ú?þÁÐJ3éŒçc¦“ Ýqãý·1ù¡$ýžæ;ÝÙîb"Å"ÏÉçL½@D5Gûw™í3¸øä“è$LäÜþà*I+¡ÕN¹ýÉ'¤­”ÁpÅx)h'’“%n9£Êsv.^âð`ÂUì^ÿ”åtŒóSTå"ø9kX‰ð-¢®¦k SbýuÜF¶Sˆ£0—jHUPH›L!R‰Ètøw"‘‰D&*È4'¥ÞW”ã±°ueÖ[JIù:§dÁkcˆ” ô;à ¾üòóüæÝ±Ö/$qFÒÛ”e><óéŒþÆ/¼ö6çîâ˜Y?ãã|Á­‰ãðëTãDÒ£ÿÏžã_½ìékÆ*ƒV›Ö`“ÁpÈÆÎYÎ\¼ÌÙË0¼pÞÆ§^†Ã!ý­!ÝÍ!¯\!ÊZ)I³ çƒoèd)ÃíÒv‡v·CÒé µ"Ö:,8Ëb>¡,盓`ØB “³!IY•8µE•FÐn¼Yh2u^% g.=Æb>'_ÎÀ[¦Ó)YÄè+ÏrsCpÇì±7ºÉäú'ˆ;{|õù?ä…ËÿŽËßyŽïšû\÷ÅóŒ7™Ü=¤( ‹ñŒñÁ.‹ù”ªXv;6„åÁíÛ,ç3œs˜¢ÀZCUTeÁr>§Ìs¼·¥Y*ÃñhÄ«¿åæ‡W9Ú{ÀíkWÙ½y“Ùx—LŘy=Âõ·Xæ1e%¨ìß=¤Ô]d BZ$©@iáõʬ?7BР”DE§&#P‰bqû:¶,J m*sÿDºØ?ܰ!S£#¢´Í?¾ù¿÷­¯sëúmÆGGìÝ»Nû,i·O4Ψòšº,ùägopôÚªV†¹=¦üì€úÚî[² ŽóÇÏñÃ^—çÛtç·øõôûŒ¿ÿ íŸÿ Ë]h|ÊSÌÇݳlœ9C×—´Ú)»·nP,s¢8f9›ÓlR•9;çÏqóÚÇ<õ ç¯<ÁDLñuIUæÌÆG!~wSæ FØ qöEÌò["ÁèùxŸªôDÚ£”ÃÛÔ{5dñ6!ªó,ëpu•— ï¥÷)c”ôè,ÃLG!@¬½•Ž’×qös![zƒsãyâñ‹Oìß¿OmjL± 5Ø"ŸÏ¨«œ£žÍ©ùû%åÛØënêqNrx|ÀŸ~ÿžzî2;­!ÃG{´Ç ûË'ñ¿¿CºØÇ厤Ó#kwH[-<ŽEUqœ—h‘uZ$iŠTkkzý>BI¢$¡·¹IgÐÇ9Çr–ã§KŒ©‚FjÔꧦ¬ÞPÃó—^¯ŠPùü]ž“wgrv.>ÁÁᘭ­m>ûôSp–|>Ã×9*Š©ŠÅ[?*ðÑYl±ÀÖSÈ<¢£©’„wÞy—o?~†g/œÇe=:W"z£)ïÝN˜?šàæw™ß9 XæTe‰)sæ³óéœÚ”˜Ú`½EÅ1q–= *ŽJR9ÓɈÅÁû»»ìp´·Ïñý,Žw©f‡,Zåp“­Ï69w<ãBËÒé(¦³û|üñ>BôtZ¨Ú£kˆ‘Ä^’HMKk©H…"E’‰‡Ä{¤q˜Ù’X€2K„)I…"ó‚¸ñó£ƒ ŒâüÛÖÔ? ]ù‚Î`ƒÉá~sžP^ÌrÊùˆ²ÊÐR1ØØbt¸‹w°˜ŽioœÇ†3X/ŽPæ´FÅ1º¥)JxöKßýù_b½ã¥W¿F%<òj›?¹êùÉñÓÜûj‚©þ'£÷n!¬bûÜ9’V%>Ž:ýúq(Gh©@„¶º¹»6U…¯ (ÔË%ÅbÆb4f1Ÿ’§ýì“<7ßâJqŒü’"Ó)õ|É;{”EÄ`c@'ͨL—éÃ]ahÆuAKÃÚ ÞÞ¬WÃô¢¨¦Í³F|uÜh®zÒVˆÚDàRmœÊ„íëY§C]×ØÚ¬߯åÝ=ZIz›ÛîE1ÓÑ~dÊÕµYg²¹Ckc‹DIZ‘ —*: ÚŠ¢ä£O>ãñÇÎsvû ZElo+é§šGX¼|™dSÝ;Àågj(J2_Ù%SÌrL=SÍÇ”³åbB]ÎpÕ¹8¦8>8b:³)SŒOp[—¸"Îò 'I¾&Ⱦ0dXÕܼvƒ·¯î£D^¯“ϖ˜¢Ä¦,©ŠŠºªÁY„)ôjC*T8šqE1ZGk¶‚÷žº®8~p7À‡”ü¨®Ì›b\E1Ÿ‘d-L¾—bÇ·Ñt¿|âQIvoO¯ÞåçW÷Ég°9ŒðÞàŒ"Íb”8YÀDj­+œáÛ5Õwí¬½÷¡Íу÷ O*\møÞÉ âuk R l]."Z½Y«ÓÅ Iµ˜U]kšŠ¡G5—7àt³}éQâ(ZQm]Riâ4FE)wöŽ˜U9w¶Øˆ3ZRò\»b›ˆQû,“çûDç§DÉ„âpF5]¢\‰¯Kf“FT,휅™²ÌGäӋŘr6ÅŒ<Œ¶ñù%ª ‚Á×j^ûÊe^xáU¢‹=r;æ×?úo¼s‡û›;çémvB¯XA=êjÔ`î'ð"/N˜SÌ£ 2vâU­­8~p?l€7ëÊüÅZ=Ý:‡)òSºq{ck-³ñ1q·OUÛS [×ħ4ç<W×HgI²çqóT¨H£#IÚNЩÄQò«÷>äx±äû¯½Ès¡§Z|+ªxÆ~–>Å/o2æMžþúÿF}4¢¼sïSÒ±“;CåÖ l%ð&†¢Kdºg5Å·–l}ó ßè<Åwì%Ô™ˆk£ùÕßþŒ·~~—ÃÜvw“N/A© ÙˆaD#ßæêj{Ìb]¼·Xc°e: Ú]:ÛÃ&‚[­aS¢F µ^)Õ¯uÜ´Tg¶vkКÿ] Š‡åtIŒ±õ:mö^4÷Æ6\V8‹>ü²UAÚî … Ñ`ÇV[zêeI§ï)ä Çïîríƒßðõ/_æO^ù&g·Îs>éóñ§>å~g‹»/žG¿ðsÎÚß2xg—ùÿ«¿ë8¼»³˜ku‡_&Cî÷̾¸Éô»—I_yœ§†[üÛYÆ+¾Ë1KþîþŽ7ú7>›r¼ô7vèZ()P^à­ãè“[Œìá+CÒªq* •“ˆL¢[¯´TÔ–zaÉÇ3T–‘¤ BêÕÑon+ÃØS zyJ7Ô¯õutÖ§já«“à¬ÃUU0õÎ5jêM„àÜšC‰5—ºlî“­mäÇÄzòPJE]’4Á⨥¡˜{~üÓùð7wyé™/ðÕ—¿Ä.\&Ž. Ã%ñ4Æ¥”Ï’<ý6›æÇJ…8Ȩ¼—>Êí/<Ïý·H_ŒyñÙ’ßë9¾¹¬. ïÞ{_\›ß¾÷÷o•Ìê0˜×j'(Ñ@¿<8k)ò’qîÀÁ°ð¡°æ5NH|)é°6h_X‹/m°8¬u¸•¯8†H©Ïéþiïü:”Z‡U9âUNà‚®]€hìŸ÷þdxM¼ Ïp2©§ |Ya­ea E>Ç–®|ÎæÆ;¼üæÞ~òÿ屧Îñ½ï}›/?ú?ùÛ;²É&­»àÅ«§Ì¿_’^©IF Ýö6çŸÒ½Ïl.x™­ƒ1w?Ùå¯y•Ë;ìïÝâðý1>²yf“v+ —'žÐük ÖùÐmÝ zëÒãŒm±Þâ¥B ùI¸%§|¥_ñ6›µ*«ág)°bιú”tq£HµÆú‡ÌÏj#\#gé½ÇšjžiÒq‡_ј|@‰Xg°®çqeÅôöì²Àyǃñ>Ë|NÒõ´7záÔÔS,™Œøððˆß½AgkÀÖ™M.}õK¼úüó¼xá"ÝÍMH/azuY¡¢Áÿúð×ÜŸñþûþËG7øôÖ>³Q‰1ÌoßÀÜá‰9ûÌEZ­)Ãâ+¥¨êºa$‡õï¸"X…ÍÉ…s™#dX+g9¾ú!:É3d=}Y5ŒÍ .êøÕÅ‘_³1B!LÖ¡U µ µÄ©SàW_÷Âûpm×PVÅšE³ Ó,Ž:ìxÓäU›)²ÁŽ´ÓÅãY6X,„À:ð9èmöX:ÏñGŸró³¼ù7ÿ‡öÎ;_zгÃç;}ζ7qƒ9Îý†Í7¯qã—%?ž¤ÜSIº5KXæH“ÐÙh±˜LBÀÐ,Vëum‘þd• ãt¤$Ib”ÒmE^P™šÁŸ ©€—Ïf,îÜ9Å[öë)/³yõXûÀ8EÒó|njpY}HîÊûÐrá]£ªëšÿ;í¹ÃFxáñÞ†ÍoˆÜ¾9ŠQ¡¢W¼sÔØ€>Té0±“Å´w6¨#ê¦()©–®Ý¢rš{Zñk¡‰¤BGyxƒüàaÜ`›DÇ¡4"S’>: ¹Ët2iN©G …3S×Ísµ ûÒ;Œ÷Á¦[‡’~MŒŠ´f±Xâóõa-Þš‡rÕ{¬Òèp(Ö :=Ù€Ó H!Ö´ÔßÍVú¢ÎÙF\zÝ‹„ÁàI­‚?P2dÍ q®¯UÀÞF†"E.,âp„9»‰Jc¼…²,Pq„n¾ß;G™WTKÖ ¤ më€Éòb]ƒš[Ž÷=íô³˜¨ጢÊs¦£1x‰ŽCß‚Rš$J¨L…uá†=dT`½Ã BUÓ9ê² ªÂµ£® Î97ç<ªA[ÒS?4Zm† ¾¡1EG“ôÚ„SOþ©'[4¸[W7TçB²Ñ¨® k‰Ò,˜šKi{Jܽ‰ð9ËÑ‘†Há&swîÓ}â"©M õÒ³[€#ë¦D‰"0Áy Â….F•œôÎ0ŸQŒ§¸E¤¢ˆîVB½\bFÇDZ)…1%Öºõß~‚Kö' R†®€ªþttêõj|ß{N1¿:ïC­k”Ž2`P„`­C~A…J3¢aÙN0e…L¢02*$”«©K‹õ&Üpe)FAY”Ȭ…ÔÍŸ±*máOøó",«Žt³X¿t¸EŽ‹*kÐÖž*ûž:ÑMâiüI§gœÄÄI„·¾¹ã%ŠTP~6³)º²ˆ$iÐïM› Á§ùæ=\Sö÷ÎïŸ2AkýÊu/Œø]ÓƒèY)‚¤A³U®™/ä¥|G<"¢…¯BÇ‚+=Ô_Û€éµPý •( ‘Äk¥^kj,"8ǪÀ ‰µÞÔDJ‘õ:¤qŒµ6ü¾B"ŒEáõ¥uè4 Êe ã=Ô¦ ö  N"xëðµe)Ú;´¡ŽðpÕֆĭA-®ÚøŠAªµ©F °!D q‹…ÖÚ‡N€ŽT˜µý¬íjƒuÓ YÌÆ(¥©ò|7¨(j­Ã‰`û’¬×Øÿ CêŒÃ#®¦Î—TcA´±Õt*Ôt7»x§pLeAH”u0Ñš“i¡ük9‘ñPå%yžSCj Ńƒ“?D5`ŠÚô¨$Fj*<ú%›«Äɘ]gåÑÌ&á´‰ t+5•Ug‚fsU:jJr wÖ­¹,B¬7àÿ&]t.gŸ1^IEND®B`‚htmldoc-1.8.27/desktop/htmldoc-16i.png0100664000212600000240000000050510063126214016123 0ustar mikeuser‰PNG  IHDRíÝâR0PLTE4 27[(t5PX$be4lRRpwW“‹€Žžƒ±˜²¯¡ÕÚÈÎÔûþûÍMtRNS@æØfbKGDˆH pHYs.#.#x¥?vtIMEÔ  0•lÐÃŽIDATxÚcøÿÿ?ü|¯ýžïÝ#ûIÃ; ãQÏÓº¾ ?ß½{Rçb<‹~R7Äxý´oï½ ’O#_œ{÷’áGIèî½wo10¤¹v;%ÝZòáSÄ–šΆþûºœ9ë$(ÀðI£üΙT†ÿ}ÚË[@ŒO.³§»(‚JJJNJþ«GÜ(UzIEND®B`‚htmldoc-1.8.27/desktop/htmldoc.appconfig0100775000212600000240000000005010062145531016710 0ustar mikeuser# HTMLDOC appconfig placeholder for CDE htmldoc-1.8.27/desktop/htmldoc.m.bm0100664000212600000240000000157610063150406015604 0ustar mikeuser#define htmldoc_width 32 #define htmldoc_height 32 static unsigned char htmldoc_bits[] = { 0xff, 0xd7, 0x6c, 0xaa, 0xff, 0x1f, 0x53, 0x57, 0xc7, 0xc7, 0x00, 0xa8, 0xc7, 0xc7, 0x01, 0x40, 0xc7, 0xc7, 0xf1, 0x40, 0xc7, 0xc7, 0xb1, 0xa0, 0xc7, 0xc7, 0xb1, 0x62, 0xc7, 0xc7, 0xf1, 0xe2, 0x07, 0xc0, 0x71, 0x21, 0x07, 0xc0, 0xf1, 0x61, 0xc7, 0xc7, 0xf1, 0xa3, 0xc7, 0xc7, 0xf1, 0x61, 0xc7, 0xc7, 0xf1, 0xa1, 0xc7, 0xc7, 0xf1, 0x70, 0xc7, 0xc7, 0x01, 0x38, 0xc7, 0xc7, 0x01, 0xcc, 0xff, 0xff, 0xff, 0x2f, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff }; htmldoc-1.8.27/desktop/htmldoc-128.png0100664000212600000240000010045010063126214016036 0ustar mikeuser‰PNG  IHDR€€Ã>aËbKGDÿÿÿ ½§“ pHYs.#.#x¥?vtIMEÔ #é0- IDATxÚì½y¼eUuïûÝjvú®ú*ª(¤( P0AQ!(j’‰Æ ‰Ñ—˜¯×6ÏÜ{ÍMë³}› ÆÔˆ iA骠ª ú¾êt»_kÍ9ßkŸ¢NÕ!±ƒ÷«>ë³ëì=çÚkÏ1æhc,Qè«y„ïB‚<!@¤TÀ(‰B!¼À Of32çÀ9¤i‡Àa½Å{‡sç,Þ9¼ï=л´ ÞypÔ•”×Ç}ã_ŸÚ·í[üúxVQè«C‘¹¼G” -%Zk¤PHH³ ×cáÉßôé\ï:‡'óï-Ö{œu8kpÖå !@*¤@KuDůģ'}yÿ£?ºí×dz ®Õ¼ '‚€œB‚ÏAJR£µ" %5RH2,‰Íw¹°²œøÞ;„s<¾'N¼òH@HÓf–Ô&¸Ìá2‹³®Çl/@j‰Ô*ÿÛúM¦8ô…Òò ×î½û›;M²_5ôÕ¼˜{+ÿ¿B*´Öh­1Ra¤Â‘«km®:2rï,Þú\"ä¤Ç ¡@(’ùw8 Ö:’$!KRlfqÖb³žDÑ©r‰€ó8ç1At}aô¤ÏÞrÿ¯UįLÔª>ßýs:_£@J‰R ¥1B‘!pÂç÷iÁeo.K‘=]o¥Çº ­4BBhzÅKŸ³ˆ-ÈG·Ý%ívqI†u—Ú£7šK™ß—gKXþTyå9ŸÜuÇW¦~MÆ_VôľÛBŠ£ê@H‰1 £ ÆH^Šžºï€\šßÙì¨ú°äL"¤' RÊ\²˜œ¹¼ ”T8'@‚•ÐiuIm²V;WinDJ%AI„h¥ðg¢ò'*k.øØ®;¿üð¯Éù 0@±¯æ==«Èž7II6šÐh´2H)ðÒ“ w‘™Å[‡O-Îexïñxºi‚u)%¥r!B P䆟P(£Râ…£±Rà]ÎI–Ñ©·Ig›¸nÛcGJ2 !%6u˜¨t]ÿš|xçÝ߸å×dý¹ ê½ï‰ý97½Óh´R„:DKƒÐ`X—ïnéCsût÷mĶgqi x„è@¹ £Ò ýkóƒ»ï¾þÇ=cgîðÇœâ˜óØÃ3fÁu|š¹þ˜¹ÇŽ•ÇŒ[h̳ȵšGö|~=Ÿ©$R(Œ ´F*P=÷O€È<ÒÖ‘¦Y¾û3—Gþl†1)=Zivíž¿Y¼zJ+ðe>´Z)¶›RíçÉ;˜7~É•—âRs!*,qæúÓùÆûþì—úáwß}÷EçœsÎý@潯ÿy·Û½5Š¢«zÄÉ€´÷êŽR×ûË€?aQ…èï³@Xï}vܘZï¿ ^ûÙ:$r.äAøœ7‘½|€GʧXÓû^èÖË^ÌÀã¼GäA~"gggiwZàÚLàœëÙ ŽÄ9<ЍWŠ-OŸ´3:Ó³¤õ\§ƒBÿÒ?ü?ö¹k„T£ÀÀBŸcÎ{þóŸ¿ j@нÝ;w\þ4—F> Ø›wü1Ü;û{cÌq×~Vȃ6sƘð¹B"„B PR"¹îG Ècÿ‰žØ÷xO/8ä@Œ6¹Ñ¸X³äßãð(©ÐR- §Ý™)L¹Ÿ`h«ZÝô¸A9›Â`Þ»ÍfsÁ¾mÓ½¯0Ax^aü”.¸3¤4ðpù]wÝu 0 êíh8ï½~ëiÖuÐæ‚Téc&z¯³ÇŒÉž} çþ«j³Ü*Ï lñ¤¹ëçóÌô O`­Ë™‰¿O»,O9/q©ÅÈ _TxÓsçŽ;Ú{÷ƒuDƒC%yìÀÎxç'q„ØnJZŸÆ[‹ð ;¿ðþùêæ¹WÐ>°ÛœÄei»"5 1ÚÞûÐ_?Ýâlذáà±ÞîL€öœHOÓô¹Æ˜Ñ§™:´z«ØO# Š4ú‚»ågHÇ¥ü\TPä‰ „@H2¾àóž`.áãÞwÌÇA˜ïÉÀ;—{8Z³mŒÑ”ƒˆs7îø#Bè¥MÎaˆ,@i|7Ä6’Ö§¢Ò‰s‡#«ý$‡w|—4piš3¡¨ã$Ʊǚ5kNÓZײ,K€ š#¬1æ·þ“u­ô~ùì"Ú‹½×Ö1cæ¶Þ³fʹôO£ï½?…—H!óÞãM!óhž›ÓÿÎÓyòŒ1¹D¹jX€ðÒn† q­„Ž‚\˜%€) H4Aî!”BD¥H{jáâ1T!¤oÍúç*EPªQZyÕõ—?Sª ŒÁ{MçKçC‡M@”J¥Êk^óš=ý_è1€¤sîå={f¡ÝmzãÔqÿñÒwΦ¿Àî¿ ‰!ç2Ÿëõ£*Aæ¢Òçâò(_:ѳUó,÷ïÝn›³Î:“kþøÍ©ž²ÿĂߊsž¤“`³ hD qZ"‚í%›vA D#J%DƒPïñYúNz¦6xâ\›àli"¢‘•ô=ïTŸûr¡e˜8Æ»ù7øí¾=¯¼òÊSð6mÚ´RJy*Àìììm¿ ÄÏKDïýï¤izÕ{ßûÞ9æ:–‰~!f^ÈÜõó½Ýÿg ”À+ÑóíçtCnñ žÜ€[¿þT®»î«Ütãw8÷Üsz"x×3 0ê’4E)E±VA&Bsâv*UBåL |2óèOiìØHqÅÊc‹©-Y'Šsa4Þ‚ïdè @ÐW£²þt¯x5ñ†ó1•¾yã¿û޳Î8½·ÈÁøøøQñ¿iÓ¦ÛqÏ̱Zkýõ÷¼ç=÷îÞ½ûªjµZê©’¸'uÔÏËR<µáÞzË·|> G ‘Ë gsîÔçœÂµÿúin¼ñ^xá=.ÍCÁNØ´ÀRØÌ… £pR`•Äiƒ3ñ*@æ¡á(„0B„’¾3ÎÄÄ!é¾=T–¬@x…îžøeÝú!l·#]¤ê ª½r„Ê Ï§øâËæ¿éÆï“£–/_6¼æ´3®êI£(š›dßÿþ÷ÿdu}F;RÊõ_Þ·oßm·ÜrËUq÷å“þ\Œ {[9ºõ¢=dJ(ðyüÞy‰ð溺=…?ÿ³·pÉ‹.>z¡4Mùüç¿À?þÇŽÚR¨£¶Ã±Ç]·ßy4ò8Râ¥8ê‘Ì;”B•K‡ÐNfò±Ûˆú;÷"D* “-°æÂˆ ^C§}B< ¢“ ¥&^¹l¾ÛØípë­·ò¢½èè{ç?oÃE;wlÔþþÂçÚ ‚༞‹ù“o¼±»ÀºÚg‚vîÜùÏ£££Jký6)e)Žãu\pÁ§÷ïßÿðí·ßþOW_}õt:fÏMq[Ÿö^´8&X#ruà…éð"‡­Y¹Š·]s —¾ä%ÇèXËÿíËüŸÿóìܾ=·Ô¥GzÞ¡ èêU'ý¼– Z#£€hd!2ÖlÀPÆÍZ²n†óÉ S£¡Å <íC[(®]‰«i\ÚÁµR„pp¸3Ÿ×jƒ|÷ÆïÍc€K_ö2®½öÚSDš|ä¢Ë®þÖœû¼cÇŽ[z»îYa€¥K—Nx×»Þõ¯oxÃÞ¾xñâ×*¥âJ¥²î²Ë.û—ýû÷ÿô?øÁ?]uÕU7÷\Öÿ’$P!zØÐž!è{>œ—Š“V®âÃ÷w|ÿ[ß:J|ç_þò×8ó¬çóæ7_Ã[·ö¼×s&$Ri¤V¿ô÷:7e¨QL >óLXÂw-®“àmJº€ðJ6aFJ´oÙ£`•';Ü„Î|/ ´ôT¾ÇýóÞ»øâ¡ÂÙn´h ðª¹÷?ýéOßÕS OÇÏ„pøÀ,_¾üo^õªW]úè£~ÙZ›T«ÕÓ¯¼òÊÏNNN^ÿ•¯|å%½HdéÕp‚±(óäOîË{òPpŽÚÒ¬X¾œ}ðo¹ù›ÿÎå/}Ùœ%ÊW¿~g=ï\Þü'oá‰'ŸÀ{Vª$Q=Âçù¥N4êú2¸|Ck–1¼~5#çÎÈ‹Îcà‚szé S i$Éá#46=†Ï:yr)Mq.™ó8'z±ùGÖ™FVÚwR8yUž³0?ÕÁ·3äh帲»Ýeó“ÛŽ¾W.—9÷ìsÑJrÉ%—ä‘Äí;Úÿ×ëLoa²ž‰c{Ýê×]wݧžzê^ýêW¿âÑGý†µ6èëë;ëꫯþü‘#G¾ö…/|áÅÇ„¤Ããíéñ=Ñ/B‚“x‹Mpí¿|Š«.y-”þØÇù“?ý3žxb+ÎZ²,Ú µF)…­$b@Ð ¡$„ë<é:ÎytùÄ`Ž (I÷à ‹FQ‰…&ˆ:x+ñ™¥9½ƒÉ‡î<1Ð:D{rÁØ0‚»È¡&$jyÑçju}!7=0ß¶»ô²Ë8÷œó¨V«|õ«_‰EwæSÕ±µg= ¡ž)#p.9Õš Qýë_߸aÆ÷ßqÇÿ|ìÀþþþ³_ùÊW~â£ýèK€Áž¡8 ¤@>åâõÀÂ{víÙÃo¾ôÞþîw±gïÞ£}Ë5Ìt¯~õ«p>CI…Ñ)t@Ú3êLc°(GüD JÌø…‹¨œº†``pÐtvíÆcÂ0& *ÐÌpIFÖMñ&×[amäDrbUŽ1µ<_u¸ƒŸIÑ£T¥@óáMó)Wô ¾ÿ£»O`€Ë_þò£ßpÿ“¦Í¾df×{žE7ðX“­±±±úæÍ›Ï˜ýÜ\ðÇd3›ßùÎw¾¶víÚ·]sÍ5ûzI¯ Oê÷T€8Z€èx_þÚW9ÿ’Kø«÷¼›½=FX±|9ÿïÇ?Êý?¹‡«_ù ¤Ry˜X|é@K•{ 0€a$"  RÂZK2Ý {d†pñ‰DTAŽE Š!aµBÖòd©¥ëòHcÒ8BÚœ¥;yèDИÆôUó ÕL?› ‡‹¨R@góvLc¾ …ïZ~üÀCÔ›­£ïŸ´j¿÷{¿ÀÁƒ¹ë‡wåÍg?3§Š}š¦îÞ½û'tÒW£(: ˲Æ]wÝuíi§öÖK/½ô»O>ù¤ë=XÈE”GS»" z°-Ù³‘dIÊç¿ø%Î8ç\þò¿½ƒýû÷ç‹rÒ*>ó™Oq×]·sÙå/Ë]I?'EäQobG´ÄÇAÏÛèR‰êº5èrù„áÍí;*e*ËO·$¶“a» ÞY5탇il} eŠ'J€þœø®‘â'ÛˆÁ1ÓÞ¾Ý2tv<9_¾¦>sØÔsëï›÷Y­VëE oÀyO–d½h׳+Ò4}!p»Öú&)åÙ=o¬¹eË–Oœþù¯:÷Üs¿²yóæFÏ ˜KFµz¶CvìýÉ£qÿ¤Ð+Õ’©RçF¡’8—‚|úsײþ¬³yÇ;ßÍÁƒ8ùä5ü˧>Î-7—üƹ=`¨Å ]hu”›€¤!U@uÃ)¨ZY<Ѩî[»’Ò¢Q|&°OfÖJœLmº—lò0åñ5”Vž|âwY­ ¦º¨¾ÙÒÞ¼ƒtëAÚ[¶ô'\ƒo¦|÷¦,H€þã¤1!s&8>UèûbúOw»ë×{ï µ¾8¿ç5·oßþ‰—¾ô¥—¯^½úKwß}÷\ާ Lû{ç¡^rªs,è¹”]î8T¯ˆ# èûÙåoxo}ëŸ088ÀÚµ'óÚßýî¼óÎ5œ¦¸…6H¨ð‘&m'CD¡€ªÅŸèVwö"^„ô§@‰„ÆÔ^ŠKW‘ÍL!EDyñÉd¾}âwµ3üL‚ˆÕ ÙãûD Q1˜‘ù‘Gé$®Ù¦¹g;?¸o¢‡•xŠíN‡;Ø‚. à:Ó¸ìÄT¡ÜÿvÄoMí>ðtT?õÔSK€ˆã8X»vmvÖYgÆÇÇçqT§Ó±_|ñà³,{…ÖúÂáÛûöí»öšk®ùÒ·¾õ-Û‹Rêa[½³Ñ;›=†èƒ<ÊÀ‹§0=Hfõr(R ×3j;Ý)Þ‚1iâøøÇ?É箽–7¼áu¼åOþðXŸ¡œ@„ª§FŽ3cÆ …Ôš¬Ù¦vúJd(Qa€ŠNŒFÇpm6Ù ëšH!8rÏ(,%'SuöÞñuàŠù“§»ÈÀ +!éÁI[÷SˆG_ô¸ÒüûëìØÖ /gÏž]Ü¿q3g>gÍÑÏoùá½tÛ!¦°+ .™<á~[3»£òèŸ÷-^ÿ¿¦v=¸m!xøá‡ÿþg÷¶Õj™J¥ÒžýÌ;ÞñŽÏ~ìcó½Ôóœîëôß<ŽðÉ1„Ÿ·%µô²çʳz½*¼Ê³¶—ü1&è9$Y7AÐóñ…§Ýíòá|‚Oú3lØp:Iššf£‰È·›e¨BD0\C‹ b…,œ8Þ'ßÍë„ôxaI¦§é[¾tv–#ÜBáÔ•D+†O”¯¡FT ®ÕÆlÃL¯¦‰– ã+‚ì8dQZŸ!¨bjÄÅÝpçlÛ†ïtñMË÷nú1Êi¼ÈPÕ2,¹$­ƒ…RýõÄúKgöIÓ˜$wÜqÇyä‘/¾ãï8TÉ¡js„ïü„_Ð5Õ^øÌ3W‹)d.¼ibñY†Òš¤›"¼Dë WIìsi¡<õFƒ[o¿©%N”镃ð­×jS&\<ŠˆTA£bƒ 0³¼dÍõú Ì<þ0¥á•d3Gе2ÕáÓ™9ôÑÒ‰íÍZ„m¶I÷M£2Ay|ÁpD£~;ãÑñ|£3žX…K3P)” ÜôÈCÜô£ûð‡RìŒÇ·ê‘¡LýÔè‰^KÒI¢€æÌ.!¤úÐI^Óú%`h]vÙeÛzÈ!uL, Û#ôÜÎï, êŸÖ(å¡AP¡PJ"¥Ä„ ­ (…w¶»y–GÚNBbTp4w§,Yš !ˆ4™´Xë(VÊÈ8À†J¬Q4v!$\2L¼r‚htˆ` †)™¾ÿ ª+£2pÍ-“tö5°]Å ¶›ÒÙ€êâçàmB§»´)¶ ŸX\£‹Ý=«Ïâ‚„îáäû§Œ¨€h¬BJ›öì,®•×FMKcßN‚ÁE´Žì%@4¢TDv4bÆà ßš!™yYôÈþ5R†Á2XEºë‡$›Á¦)R@ç –bßJúV^ôúÇoþ‡oö `‹{¯…9?^7çQ¤=âésp³9ŸÃéÏBø£Ò**•Þ'EO÷ Ò­Mn(‰wù®“H¼H¡Ñ"G Íùô°YŠÖš0 D…9â&(ˆHá‹”:õ6"45 ËFúËèA)ÆM7i†ou(/^BV÷d³—i"’™iÚ{wS\LyÑ Òl’LÎ`ébj5d3Ãl#Ó [ÊKÛÓ}Ó$ûa¢x|«-³û÷ã:ÕÑe¸É­Ã‡ð&ÆùŒ ¿Š¨ˆÀ ›Ù,";eè¶éÌlDU5‰oœ4¬‘2@—bt­‚¢€›™ÁÛzëD—µpí©+FN¾róÔî{ïYés!Ýæ1‰›¹Ý{ü9§Ûë=ìøöÓìúŸéPA©ø>¼È´–9ðSåˆà4Iév:9\+ë5r°¦Iõ’$íb”B… ív œ£X) "ƒ/ÄP.àK¶-¡°j3Xà ‰*1Í­ûq­.Z*K&PY‘¬.pi2 iÔI"Œûè_}:–6SÛï'Kg©œz "qø# >KQÃEÚ»wÓyb±@’Q\>Jj›4ÂgžÚâUøéi’A¡RPX²Ñ‚”ȆD´«ÈNß™¦3» ⌬`)=w²!”A•"ðÕÒhŠ(]Æux—à3‹K2‚H“´gÈZÓ/ZuÙ#3ûx¸G¸zk8Ý{ý¯ÎÙÃtÑïÙÏ’ö}ZPñ òF&ÓjeÚžv³—hYOÚí"¼ÀÈn·Rš Ž±i‚PF‰KFǪàcåßWDö•…²V@–ct%&¬”0åGnÝDqÑÃg=׉è†ä°%m{f¶nAúÙÁ)úW­§ÛždêÐCøÀRX<’L%ø™¾_2»õqŠý‹QS–öþíDCEÚÝ)fvîF—+TG–áfÛX¡‘åA¼°øÐCI⺠~*ƒz;9ƒ‘’Îìc£5ÚÌoX‰@!´#œŒ²åÑNCÛ‘D‹˜¡¡AN_1Æë¯¸˜ó×:o\£ÝæeïùŸlÝ´7Ó! *t:Ód¡‚$ã›üÖ¯Yùsu:|äßæ«·Ü›·A3`ùÈW_rö†«ˆÉEÜ¿e3—}àݸP!TŒðR…ØÙ6bªÉ×ÿç;yþióPw?°/_<ð8‡&£‚Œ tÃ.ÃÇsÏXÏE]ÄgœÁóÎ;›-oCD£·Oíyøõ=¿ùLa Ÿ†&¼Ò%=J” òŠ'A º­.®›¢TˆMÚA“u˜(&ƒÒÐ} IDAT íNm Åj+T¬1õz›`¤F´z5Ñꋪ!>ñ4ÚCuå8}'¯à»§¾~ÞMM\ñÛh‘¶Úèr…Nc/"Öüá+_É^û»ó’3ß»ý‡¼þ|íÅj 8­:ÉŸÿîïðß~ÿ5GÇNÎÖ¹â]ïå‘-›ñõº!$!$-’Ù'yÎsVòݯ|žZíèœÿûóŸáC×ÿ;*(¡¢Ý‡0²Ä_¼î÷yû+/8Fš8ÞùÁëùÚ7oÇÓÐa"A¡ (W5… yr;›|7ú c£Ã4[MD’´SLeÙµG¶ß÷ÖžŸÿ¬©)U¯<Ü‹¼k—¤YÞáÓÙ\©°YçR(l– u€Rêh{–(ŽòVnF¢ †v³CÐW"œèC ‘…ÝS$»'é;mA9&™91]ØÝw´ÑÀ”K8Ž RY¹Š/ýè^þþß®Ÿ7ö%¿qËû+ߦÝ>L}f’´Þ```œ7¿b~ùÞ[þŸóÈã›ð3]èFµÉÚû'†x¼3Í[?ñáysþ슫‰l.ò›[·D5bo~ÙóçûÀ‡¿ÍW¿}+iÐÆW²OŒ)¬ì§ïä!–¬å‚W?³^ò¢j•ý1;3KÚl• ¸Ö¾×ެ¹ðx–EHï] œGú2ë˜ó ºívÏå“(¡¥Á¨o3<­5IÚ! £¼ã‡H£ Ò8²£úKP0¨¢B—‚þˆx¤Œ’Š 6@6}¢\Y²†` Æá]8ß¡´h1Ú”0YÀg~ð#v>2oü—\€µêÓ“d­6qiˆ NYM¥ô”^¾o˾{Ǹ٠ºd¤ÓxwQ‘'QX»œÿxb3lâè¼j©ÄKÎ<‹ÎöˆNŠ›M¹êeWQ*<…[ؼý ŸýæÍ¤qQ±¨aCqe•þS†^7È¢SûYzÊ+N_ÊÕòRιä‚B !Vi;ÄÕ®¹ëO¬»ôÅϪ(„ìUÿ8¤Ê1|BK„Òè0B™¼f?ë4óŽ^½6pÚ:&Æh”T $ÊHd¬¡PX:€ˆ‘ý2Ö¨X#$(ÔÙKa°†mK²öÂ7'3ŠKG ÊU¤7È6È0@Ô¸îîùDÎZÿšõiœs¦„÷ž ^pö¼1×Ýr~64À6šøÖA¼F(œµY+!«d-æúûî7÷7×=‘IEŒç¼uóë¾ò÷`£ªb †#*' 2pÚ ãgö³d]•‘“j”Uèèãäå+ù‹?-ÏÁ…q ç`æð4¡Hˆ‹štvÏg&N{ù’gd/A,5^öн… Ëò–-pYÒ+ €4í¢´Æ˜B±€ ”‘`$6È’Æ — Æûq€.h|j "Eq¸Ä¢ËÏ$MB’º ÉN”iÒÀ‹*0…2®ž€·}¼Ü|Óür¼U˖࣠X›ÒnM³vñüÌàï{ß ð‡Oë87E°f½¼†ª•å"ƒ°÷oÛ=oîú“×Ç1Å1„’œ²|>põî­›å3h¨,/3´ºÌ’“ ,^Q ¼L©Vb0¨0¤ 9uùZþ÷;ßÄé럋‰ XGö¢P ‚Ö°mþô³çz߃y¬ëÁ¦¸$ïø)½Àe Z‡Ø´KhBBÑí6é´Z˜@#µÈ»sÅšÌZR”"(ˆ’D—d]¤µ(`[’dÚ“¶í]‡À 8°¾“â ¤A¥HãÀf7?Áî=óç Eºõº¶…ªÖX<:°í‰ÃÐJpý“®^„) G†  ò O'°ýÀ|³xb•ñBàŒ ÎO!ïš=H4P^2´"bѲ˜á¡*µB‰á°Ìâx€!=Ì ìge¯Y»z ó—obù²5($–ÃÛwP® ì‹ÆÖ\ü·ÏR ×TéÜçÕê©6qÚäÍz]5TO xŸ—þ†a€ÒDdhuºYJ'M{Ä7èXá2KgÇ õMq© ­CÚöøT`§Olá’ÍLC+…FÚmtQsäñÇp³m‚ÌÑiÍÌ…!­™#Èj ñ”ƒ–MíÝKÖØ A†^܇.!Ë1¢¨N"ÚÂ+”Øÿàcóæ– 1Bé^C›Òq [íR’ +ûBj¥"}aÈxXei0Ä"3ÀxXajû>š&™:XÇ%!gœvÿýõo pB(3mê{vSéƒÎž¿_û²«ŸqpyK°<ò—9„RyݾMÁZ\–˜ár¢2õÔ&ÊËʈNC0\¦|Ú5ª¤ÇÔ¶–Šãƒ¤³Û’ÐÕ¨® 'Vë †4o=«Ë1I«…•fâxh~5O’¦ÃÃ/P¥Y-œ`E)šˆØ#«f¨Y.æÑÊD‚ ò’õÓÔÞˆ‰*ÇedæÚÛ%ˆ² ›ƒöTKžrR‰ †%&ÂAFÍ ãªÉŸn§¾uû¶lçÛ߾ߘL‘A™—¿ò Þxõ«ˆËýx!8¼Ñ™¡6Zdòc‹×]9ñÌJÑ{j‡©5ÞZð­lfó…— ŠË¹n-ÅBi@2Çí—Cô@ÙW„BŽÁÓ±D$)a)¤ÿ´E¨b•¬)É‚ôÀ ­;AžXY%—Ç¢›9²f‡æ¶'’6:tdõù ÂLÏLN!JNoXê­ùEŸµ‰j¤‚Ä— >R` Âk¤‰‡–¢u‰ÅkÏ™7w¶ÙA†Qè>I3™_„º¨Z"VŠŠ6 ›2£¦ŸEfˆºÂ#ß½ƒdÿÉd‡n#ãìõç080J­¿+þà‰(©òŽä‡' :mÈê4²:²T&P1¯¹ì’yã¿÷=ø°®ÞÁÙÊmÌ÷å_qÁEy'´L@bqÓmZ›žD«å¥ë0ƒ@).=}Å|rÇ*ý‚~ÁHU³µ>ßM|Á)g1V(´2¶þøa¾ýMìÙ²× *fhl„‡o¹‘sÎ9‡ñEÜý“31:ND€@E—^y)¿sÅå„¥*ÖÁþ0¶.¥ø¬þÏP$°×¼V(\’!AeðD(wëða’Ç$Hmi‡L„Màí¿÷*FúŸªæÙuð ·ÝýSÈ ´Dó0¦/âÆÇ`¦õ”‡±á¤5¼ì¹çáSGrxßu˜ÂÁÀ8".!t€TŽ‹7Œ³nÑS~~½Óæ½1P’¡¯²¯yŽ}Ê(ÇE^¼áÜ}ó]lüéF–/ZN·kF!BÉ=?½‡b©Àôô<ú/¾è~ãü òŽìª×ó^¾*o}Ëë8kýY(’tSlÛN¡lhÏn|ÑÙ/~ï[Õ  ‚Jõ}9H#zÆŸ°ù3¤¢µ&s]Â0À„2¨‚ ‹I¬(¬B Õ)¡»}Šò’*ñ’A’iC:îÅÎ8¢ÚHO}Ç“Kâòo|ÑoÌ»©¿ýÐljÃk’Ð@Åeþêu¯æÍWÍ/üxçG>ÉCl†v›@¤È"d±G.A„š¬zJ]\tæYÜüÀCL¦ß”N:…°:œ?«@d¬]>À‡_q‘~ªSÙ¿Ý3›÷”ŠEJå q!F*Ø»m3¯ý÷ó“{ˆM»Ô*ô/; cG{éUßÿÆ›®ÿ•H€p`ð}ÒKæþù4C EÖm¡„DŸ?1,Ôè@¢ËŠ®r¸JHaõb(FôǨ@â4~Þ"¬S¤Ó?+ñGtPE™"݇ˆ¢#bÈd*xãBmažæè$ ÿøÅ¯ñÖ÷þ-­=»ði+Ä@=\Å—"b|b 3»ðÍ'ž¤êà´åËæa Ä :Ç-[ïá“?ø"Él‹‚(0XêgéÐK«Œ–†¨F},_¼ça`h„ÙFÀhŒþÙ»˜§iʓ۶rdòÖy„×&Àù3š*}5F†ÊÜ|û½´³$.¥’B×·nǶ;>ú+a€¸6ð>—X”Òd­Òtyw/-¶÷ÐdA’Ê”$R”Oƒ‘j FU"ºONQ+Tʤukh¦î|×UaºŽR)Fe—€ó)B*êõiþôÊKŸ¾4*MÙäw?üŸþÖ ¼åý37Ýx;nv DÝWÄŒæÄ¯a0+Iö¦°z ÝVÆmS“\wÏÔë³(  ¡ÖXç˜lÖÙrp·=~Ÿ»ókÜ·åAL*)ê2Qñbeƒ£Üñ½;hMw8åä ÔMV¬YͦÇ7rçí·ó“{îf÷®=diJ½v{½úÊÌÒiw˜žžfïž½<¶q?ýéO™šš&K,IG«E¢8Î[ìÅÒ¥lß¾“‡7n"ívH:†—OÐi:ûœ÷wßxý¿´ è[±Ö ÛëþÝé`„Æ& .AHA\ŒÑ‘DUj4"é–×`¢„ì/ÐÙ1K\0 œ1AÒ”Ø)ƒ?d9|ÏnJ‹—Ñܶí-•Ê.“diéf“Îä$±Ë0dÿ]dÝ.è›&( ¢Âç$Â*|£±]d(h·ëNZЍñÅ>ÊÛǪB„´·ïà /ž€4…vÒ."kØ„‚êR1ÕPRŽ¡ÖÄAD¤ ”M‰¸DUGÜ}Û½ŒM084ÊØÄ"žwþ ¸ûÇ?¢GlüqÎ<}ÓGްmë6ÆÆÆòç%tÛ¤Y’yn.Ë:×1oÄa´¡P,Ò×_chhˆ¾¾>ŠÅ"º÷(ðlÞô W¿ö6o|\ʢ㠯>5µ¼31qɲ/ýÛËüR°p›¥`Û]$—Y´0h¡HðÄQ€Ò :.!(”У%|-@– JiÆŸ;ŽˆY[àê‚doÆã³”—/Ev=ÚZÊå>¼›vˆ£"3õ¶Ó¡žý÷b3,UÈl)Bô@-¯XF£…ï4Ý>j ˆ ZÄG1>ŠAŒW2® ¤¦´î9H€tè‚F+Ä®MA¨Ò¢B‡’rÄRhCl ƒ"µ Ä@Xdrï$=ù¿ué+PÆ0±l)©M¹åæ›xÁyçsû|ŸË_vÍÙYÊqÌ@›·l& C-ž Ýj“¦ Y–á¼Ë;°ˆ¼)fa@¡P R©P*•Ãð¨ÔèíOV­9™7¾þjÞû×;iNäÀ®ÔFGpt£¤}ú»?ýå`á+½’×I Uˆë¶ˆƒ"ݬ‰R’b©€*HD ²’B.¯¬îG—È­5C†±^“Í€ŸR¸ýžÆ¾„¨T£þØ6 *$, Ðm·1ÚÐͳ‡öQÕ‘vØh/]›aúI;-l£CØß…ï5t¼·{¸Ê” (ܺ¨ºÕ]÷<ç9Ïy–ÿï‘s¢U=!eµìýW¿úUžxü Œ©È³¼&¬Wfɰ5ˆË¯•Ô|ß'Â0$<Ï›¹ÿïŒS,û»küò?ø§|ã«_¡*2–VçX}òý°ñÐÙøø¿þ¿ÿöÅ¿q Ðè-=ïŒEK5C¿PëÞKFµ’wä¨"Zmœì Äè^‚ç)´¿× Bq·@ B6ðuBz}]AÒœ'Ïs d2Íèß¼F‚#ð`(J¬ô¥ÉñÃ&Á\š-Ð²Ôøã‘÷ñ;!r¡‡^ÇDA¹óLV‘¯o#u=×®,ÕÀ+OàkAKIŽÄ‚ãmÁ©¶àx+b±Ý`¡Óeqn‘¥ÞÇ[s,ÇsŒ¶Gܹ¹K·X>qšcgOñÎåK4 .¼ú ¡TüÌ'>ÉÒÂÚ×üéøS¤¬®,£”bee…ímæçyûÒ%îÜ^ç±G§ÑlÐî¶hµ[4›MšÍ&I’Ç1A¼'¯÷}Aª J:±æË_{•t:"O3Ú‰‡ ¡›o_¾òÅÏý é,=o‹-=ÊlJàÅTU]ðñ# d,©bEp²<!ÅfJz$§º˜BÂH’¯¥Œo ‘"ÀK-M?Aˈ"+¼€4¯Ø¹v‰ÄWPefc²´€8@7ì0%X\Ä1È56¨~3Ü€@? s ÊØ‡0/@Ç ùæ"i<ñ0áÑ#Hž’DJ±JVÚpª'š•vÂ|³Å\»Ë|kžÅpŽ#~›Žkñ»¿ý{<ýcšœ~ðQ#áü«¯ðøÃðúK/ñÌSÏð÷x\¸ø&/¿ôÎZ~ì¹çî»n­5Ýn—ÀpƱxd‘#ËKA½Ûƒ À÷}|߯‰j³…ÿn×ÿ½& 9v|™ o]æêµëTyN™§tOat°õÄOþøÿøù7/þþÆßìМ^!pU…§<¬)ÒE*ˆlCâŸl£N4Qs!&³xÚ£u²uõu/_Ïð¼&®ÐT[‡ÐŸ¢ñɲ‚Ð÷O&ìݾF;Šh$!ûÃ>Îq¾†Pãéq#=ÀGR‚ɲ>$á™ã˜VD†à‡íSõ‡èùE¤ï,Îá·j@eà)ÚRr4tœhÎÆÇš!óQH§Ù¢Ýê2ïw‰ M\úø6!»œ{ì)înmòÜO|ŒW¿ù"û[[d£O=õ4gΜenaž·×ø“?þ#îÞ^#‰c>õ3?M¤iÊK/½Ä·¾õ-Μ>C´Ú-î¸ï-ôw~Þºu‹V«Å믿Îîî.óóó?@TCàùíVÀ¿òéèøàýÅþO}ÜóarñâE~øáÚº±¼¸ÈÅ7ßåʵw1EA•ç´ŽÌ3Ø]ô£ýŸþìÒÛ°ù×6€¸5ÿ¼@¢„„ÚÃ*DÁrŒ\N+1"Ð$óMÈɉf*‘¹"½“a ‰œZ¦×7 U^ˆ’’ÒXö6׉Œ!Ô‚Q5¥t¯‰©*D%—–¨„­$jo@TŽ(³CLâ;B‘˜(À)¼€|«’ä±søíAˆ¢«$GC8+Î4Ž6"z˜N£C·Õ¥¶éÈ:“ìmX[ßeùÄIΜ{å)οü ®,™Ÿ›ãô¹ðŸÖ\/ñ‹Ü¼v"ÏYœ_àÔ©“?vŒw/¿Ãk¯¿Î“O=M–g|ô#¹¿øÕGUU|þóŸ§ßïsêÔ)„¬¯¯óì³Ï~ÿ1à¨i¬9ãÑÔš/~óe¦“Cª¼ Pà—yÑíµÿÚÙA-œÃžS•’¨Q£Wµ%5%I£‰7 ZåAN^Iš.RAŒ$£+HÓL|ªá¸3^€‡ä` ¦˜lBžhl¡!åpŠÖþÑU*$d ¶6 ]ŽÐ–èÔq&ÂRÄ>.@{Ø¢$»½Žj%$ŸFkð+G$%‹>¬jX4K€VÑHbšÍ&qœÐT1¯¼xÞ _ÿÆ×ùøg>ÃÊò wnÜàÆ•wyì‰'ØßßçhQ—ß¼À«/¾ÈÃ?ƹäôéSdã1étÊÜÒ½ÅEúý>gOŸâÌ©“?ôMžN§Ü¼y“ÉdÂK/½ÄsÏ=Çõë×iµÞk=;wîÜw¯»›[L&w˜ÌarÃ'Ÿà¹'>Èç÷îR¦û}Ž;ÎöÖ·~õßü¿ùâ—þñ•¿^1(h>ïëSåµ¾O Q!Ïà-F„§ÚèÅ/òi.4‰Ž´@ûˆ‘dxù/l ¦±;%0 ¡b›[¶ÖoãC¤`œ˜6òˆ:=ÂF'”ž‡K+‚~oÒGxæºÍÛŠ0¾AˆÉ ùÖ>þò<ñ™U‚($¶‚9'=8ë{œiÄit’ˆN³K§Õ£4iˆmcÒ2ä­wo²¾±ÃSÏ}TÂ_þÅ—¹rkÒ HK8qæ Æ“‚û»ÿ’í»w9~ò$O>ù$§ÏœáúÕ+|îsŸã©|$ðñ%œ9{f†Ê•?Péa{{›ÃÃC^}õU>ùÉOrùòeNž<ÉÂÂ?þ8AÜŸ÷>s”CKÑwä†âÀRZʾ…RÑÔ†¿|ë ¦ãClU…«ÁdžÝÙ|õ¯ÅHs‹g°)-Qá… AêUtŸ^Bk¢Ú>é^Açì<ÑÑ.f(Iï¤Lv "¯‰7¨Ð!•sw7n#F#­H•!µà¢š!à… \ÒÄh ýœèpˆ,äv”¢QF>ø>V(ÊÑk-ÁÊ^3"Œ"+8‚åX¨8†,&!qçÑhÐJZ„^„/CЉäöÆWoÜBø‘¯Q^›ðVÖäfæ$’eI³ºƒÈÖiŒ;̵Ïú-ž~üC|àÉgxí_âì§úÌuÚŒG#~ücÓ¢Fƒ ñÿÂ… \¸püã¼õÖ[<ûì³TUE£ÑÀóýZ×å^iép¹ÃNfj)GŽb`©&›;¬u`-¨”¬Zç7þÿ^úežÒê5è:C¾oóÖÜÇ.¾ò?~ä# ?VhíåiTCÐ^n£æ"¼¦OÖ/IæDËmª¡@NB‡B`¶'ȉÃO•÷wì IDAT:c‘V²7: uÁÁ¸O \] jµI·pí+<äÞ„8c¦ûTZœÍÊp ùÐã\#àDÑk'´Û]ÚÍ.¡ŸPæ>W®nòÆå×±>‹Ï,ðæ;ø³ßûüῸÀ·îälW…Ȩ( ª…(+!0 ¥ D`Ò;*6¸rù—o^çøãïGZŸÈ÷ }¯¦ŸÎÞÈo¾ø VWVø­ßú-æççY\\DJI»ÓåÔ¹sB’9Q õÚÙnÜ¥Ú6d›–tËîÎÜýÐQŽÕÈQŽ Ê铦[PíÑǼrã.ûý]LeÂ4[䣽cãÁÁÿö£ƒzG]Åå”ÎB“Ò3t›GKðz ~;DµHš¸Lqx¹+ÞDbîNh/.cr‡’w6Ö±£CšO. £ªÂŸoc¦í¡––¨px{CâékKl#Â.õÈ# ž~D>SNÇ$!jÅ„ÖеŽZr"YzaH£“5»ø^D^6v†üû«—)>Ʊþ6/î \{åedžøšB*W·c9‡¬TÝ$ê$ÆHUzm6µXVX„Ö¨v›ŸøØßáçîðô#§i…‚׿ñU:Í&eY"„ Óé0Írær¹›A{(ëP¹EL-rèàÐR Ýý]_¥3u˜¼üœçR¬9ÀºM¦ö€ýj@ßældc^¸ôo\xtÔGkÉÂéeJ£°Õܧ·®¿òùéðýk+âF„­ãt/$h†ƒ‚x¹ƒŒ"ÌDmMÉ÷ æç™ÞØ!j4(‹O…ìGõ­4ýiŸÊó,bûüNÓl`*K°?À4š + ]ªÐÏC4;L·6¦÷ô#u·ªXpÜ÷9,&½("è´‰ãÆìö ¯\ñGÛól[Øßþo)ú×”%%¦*…”Z ¤su3,ë‰ZîÅVRÚša- ™«óy…ÙÛã ü±¾y›_ú…ÌþÍË]êú>=ñ[û9ušÜÁ]S/¾´uxS‹ÜТ¡Ôç|5uT“z·—“ÚÝÛÊbËŒÍá ö‹›lgwyy²ƒZ>Æ(ŒÍ„²L™4dÒB¤#Œ)™ Ûs“Í¿üˆài´'ð…ñ~ÇG'>ÕÄà”BG!ÕTà2p* ×ó™\Ú$Š:8?ÀG³µ·C¶½M§Õb *T«à ÕìbÚMl–"‡‡”Ö‚§p+ËT‘AD‘fqHëɇ¶ !=k8.4§Ã€Õ( Õˆi¶›$­Êkæ‚7nÜå _Ýäê7$ÿ"?ð J×ht‰B8‰«Ì}¦uïì¶¢’›áó¨ÍV@z8ÆM+2)p¨RÎýKlܼÆßýÏÿ!+ûëüÔ¯üSN-·è8A|Pà÷ þÄáÁ8òÃÙÂφc·LóC®ö_gä&èÎ/í¼JçÄÜ\§ð%biL¤”"£´“Z©Å¸¢@ä)n2ÆÞ¼E¹·‰ÍsÂF@47G6Ⱦ5Øß}îG2€šaâqüýÇYýɇ`©‡qšìÀQNj» Ø¶çðµÇaV‘õˆÉ„i1%U‚de‘ìö6Þò2®ÓBíHF#L–á1faÓŽpaŒ‘ŠìðJºÇ—éHÅQ g‚“AÀ|Ðè4Iæ»DQ &”6äúaÅË®òú /ðök_¤ÊQEŠÆ‚¶¨(À—¡•øR µOàùxøIƒp©‰>àw~ü¢Rª(i›@55dÓ‚ñ(cºWB!™LK*ç(sH…G&Ea˜V'?ý+|êgƒSÊg®”#A4o(¨g»~ìNÙm²?]cXÜ¥´)}&l¹UP¶;lŒ×ð–Ž‘ê‚Âe2§P¶Èqe†ËRD–ãM üQJ5Úe8Þ! ÑZÒ^êKLtöÑÉÝo_ú«SÁ÷°ðŠiÉÕ¯]gëò6Ç?öÝ<‚öbBa(óÓlaKË¡)ÜY§¤±&É\—t}àô ¬ïãm÷é”hq¢`ù6 pÍ„<â·bÂVHïè"‹ÎqZj΄!GÀnÍ7‰ÚsxAAƒ©Ñ¼òÎuÞÙsþó_àÚ;_¡,Fø¶Â×õÙ-„$P …¨pœE/<€8¶Lu¬Íôl>Á4 Š…oQª@ˆ—Âp€Ø;DlïãooRmÜÆ®ïÒ¾{€›N™È™åؼž^ œ%·S.þÉïÒVxOþ|Ù H=ª XÊ ô‡L•ryÿÛœßÿ:¿xâç¹a,Vöç9gÝîQú‚¸·LjG¸¬“!ME %ùá7#¦¼é”°,H*Ke ©ÔäRÕ(¿,G6Ýþà¯6çf\ø™P 0Þsé_aîµ[œþñÇK~ˆ™L)=ÅþÍ5b)9œ ±í„Öòåþ}l£ÑNŸh2e8ž W±sL`Ÿl8$ZšÃ—ŽùvÎxg£€¹(&êµh¶:ø&2lR… ûÃ)¯¿ñ&×vR^ÿêŸsëÝo`ò5xJ¡áÅ ”NP^¥Îá7žF/ƒS-Ôѯ§Ñ ×ðëb–Ø)+„¬°Á&S5Tí)ã¹ ùüã•MÔöl’ì#Ó)nk]VXY!ŠŒ¬Ìyåë¿Ï7G[ü*y9¢Wu1¹£È'H;Á#²bнr먠‰)C;apy†ª ”Í¡˜b³ [•¸ª¤ìàŠi ¤É)\ ÂṊHJÒÀ£Ê*ò´ h¸âðçßü+Aa?£®¼ßŠVÏ f‡ö.ßÄå9qg$LúC"'˜˜‚TX¢8F”·0uÐÜ’ä9Ó4C¬.bºØv×hÎæü ÝvÈñÐãòdñ@3×nÑ\^¤97jô°­.®‘0I-¯^¸ÂÕ]÷ÿüß³vý,¾Rx~ˆ CD£…—´ÑQ8Ye®õazK?NãôcpjoµE,t#I›”$›ÐŠÛàÅ, véGs’¢#:RáIA6À÷è…>~0ÑŽÒ–¸Ì‘V5É W÷4D1HEQ–lŒ®ðp¼Ê­Ë{ì·©Š=¾´ñ{ô<ŸDA¬'›Ç¨4L…cbrò*#-R²Éˆl8f23<Øg²@:ìS wÉ;3Äš!ÖŒ1¤ *J*W{#¦¨ó^ p–e¯}î÷ËÉÎþ5€Öâ‘ç¥Òïaáï‰Ì Ò¦²ní’înAMª U¨i4Zä£)f±‹ËJÚý!‘±N&ˆGq‹=\³M©&Ïhg)ñyÀ yFÇ<$,wZt–æh.-6»ˆFÛêr8ñÖ·/ðêÛk¬m^ýÓÅæíóµ:YefšDª‘4ø~›$zNõ^ò ¦Ñ¦Ò#šg—è̇,$–D[±&ÆmŠEY8‡ÈRH3&ý> ©I­ÂÓ›o¾Ž_Tƒ 6â„D"HIØi TŒF„ALe “4c£q—ŸHâüÝ·hyгÉ"‹^c&XJ¦¶`hr†ù”Ñ4e<äîá[ƒ]v‡»ôGÛL²}ŠrŸÊô±v€c .ÅQâ„­ÉlJ …tT®V±5•ÁZSwk…ÉÆ7«"ýÖ “fÃE­B*ª"§ÌRŒ©f°bf µ˜ttÏCœ8M$YIÞÐãŒî(Ååz~qäc; l»Ei ²-æ–{ï¶8«òCŽÆ¹&ÑÜ^ÒB%Mò²â`g‡Kߥ ¹>mòÊŸüŸlßz¥þ¿TN-±±ö|"¿‹–rdñ§ètN3nù ‚ŒåÇŽÑìÅĉ J¨Ñ‰”ªeø~Ê^‚>ÒdÃ)U"’×mâZ-òÑs°Ë™3«œ ôBÎ!síñB¤Ó¸ƒLšXO£¥F”w6vÑ'áÖ‚ó_ø7l^ýf­\˜•úHO"¢€ މ’9zúâä#$«Oa–:,®jY’4Ú„߃H B ž(åRàd=ÍŒÜ A†f¬`ZÚÚ1*ö[CŸäx€ßbxw/ŸCU%V8<Ï#±Ž" ™Ÿ;Âæú-n .³õðiÔ«›Zqh'lC6Ë1»fÈÀ’šJ1Ä0Š)ŽWåß%A£ü`VnV÷«N⾨³¨E^¤œÅoágç³.ä ´øxÐYlä‡;ãhZ+¬±¤ã1E‘‘´:¨8AšªÈ°¦ª¥ckhÃÖå+4ËœÖч˜s¥Ñ¸å%Ä|×haå)Zžcåô1 <ä‡,·ZÝ6ÑÂ<^³&ªÑÀ“ŠKçßdiu•`é(åÂ)n^óî×¾ÄÚÅ/!•@LKð}„FA³EÐY¤¥O²Ôþ(ÉòcDs= ­h´@« ôo¯‘Û‚|Zb~ðÃÏb´"ˆ$\Ù› AQ–)ð” 1äÏzè2 ¢ÉžÍØitñæ†øÊg:œ ÐÈ ÄäRÀ“>ƉÇùÖW¾ÊŸ¯ž§Û²\¹uHæÉì€Ò©R™„¶X“ál…5%R{Ø2Cúa½Û…DÈúx³ØLPwר.É=méñåÅ9ÅÚº$¢˜|ø£xZ?/díu¤“ ˜‚ Aé÷ÐÂ5Uà>H²ì¦#âÅ£‹sØÅ®ÝÂxŠ|{ƒ…@p.ŒyLú<Ýé±ÚíÒ]Y¤±¸ŒîÍ#Ú=¢V‹µ+WÑ:d\丨ÉW_|µ=ËÆË—yíëÿ;B ¤qH?$H"ÂV‚ßnÒlÎ3ž`µý,ós!ý€Š}*¹Çê‰qC¡‡[¨H K·ÓFKGæiwZH•†B€2WY|Oƒƒ²¬0¥ax0&;˜`ú%.U(#6Ç™™f4u„§B ÂØÇC°?³pr™­;w9ìñlpwí ‡ù»Tz‹JìbìÎf8W€5ïéƒ[‹œÑؤôQAŒBi¤ôÒ«ŸK!üÚ¤®ÓÝBÕx­±åd´(OaËj·ªª/üà~€™2RÔ­ÉJRdU¹OÜj¢Âr1`­™'»;Û”þ«´W? VZô Ïr;¡½7æ¶æé3+t–æ‰çÐí9h5  ¦4ìnm!<ŸþtBnÕÄrsgÛïœçüŸü¯ˆPâKíû¨ÀÃ÷ÃTPM#†iJå6èž;Éâ±–>íXÄ0i¥¥!šo#YY¼žJAÍàß«é&Žû”Ô²ªh!ãƒ1ãjJj Ô4¤HcJ¿ÃTQX$ëî)š<ⲊN¯Íîö.››èžö¿ÛÇ*EH³©ýZ„SH©²^Ð{ºfÈ:·Á̈çù^Xàtý=iN8$'Êó0y^³CHñ±,y˜ƒõ[äyVïr)ð­,ãÃ!Q#BG D¡¨ª[™:oçèßÝ€—¿Ìü§Ž,ùíÃ1§’&ïüA:Ë øÝyD§‹×jЈBv7¶ëf©Á˜_XdsëË—ßbmí]^ÿãß!O‡4:óˆÒCxåûx¾&ø2!áø,íÅ,¨¾r6h*Q³ àJwIõl^ë(©Àò¡hÒä¨VƒÝ>ívɱGŸ`óúuÒÁ^íZ´@9M–æà†„.Ni\êj5Qëf­Q–¾ù犿õÌ3ÜX[ÇÓšåã'熭Ý}Îõ‘áœãÄä'­à¬ãÇ?ô>B?x/Фnï×8Æz”Æ'/²,"Od:e4š’ŠÂM mŽŸ(†ÖPeìáMå$e•%mÊ¡šÝÞ$ÒÎ"ý{¼Q3˜„Ô˜r:c5–5ÕÕO¾ª…»u?â,4¿ÿVHœp( ü„bšÎ „”ü·€2Íž&'éô˜¦Åp—•‡£ªùx€tµ{QRR•RZ‚F )ë8ÁaîÿƮݼÁû>ü{æIŒP¬ßÙàÄ™³$qÄÛ.Ð;z¿ÓäÝKo㤤—,ðâKo±½ù 7߸ƀªÏÃ(jà‡aèáÇ!~Ü¡œÊI…D‰Oçè'9Ig±ÉêéU–VpJòèb“…cG©:]ý˜AÔdÏÙöbnÉM£6»Ü¶š;Îc;F²aÛVÐwŠš &îáq±Xc)Ë’¢Ì)ò‚¼ÌÈŠ Y•R™œEX‹s[:*ÏÝ'©û^D™…å#œ@8= ú4Nj '$B)¨ ¤ ðüíùh£¥‡j¦Ú¦f´×ú¹¼‡ÿEÖkã&“‡Ò!ä|‘åÿý÷€pâù2/©²)I»EéÙÁ&gž|DH6Ø¿ù )(ò’8i¢[=”˜ª¬jONSÖnÜâ'ö3ø^@¯ÛáîÚ-zÇWñ›kkTÆÐY>‚) ×·xçÚ:oþ÷™Œ&÷¢Š0Šë«_äãÅ1AØ Û^eõè£,­žäÈ©ãôV:ÄmŸùåI3Äó4ž\-ws‚´‚¼ªõ/­¡îì©¥ï?ÎpHÒ KÁF×3¸ZHn•‚µÒq77lçûiÁ MIËœ¢*(ªiM µò—@a´OÈzX5ê¯êbÆd#evXk˜ ­5^ •FI¯¦³K…”!h=K©ï8"$BhœÔüg]{§@X²tgfia)}íùPÅwI­+%Åó÷ï¾ù”¸ÑÀâ3ؼãüA³ÃÁöF=:>3‚*ÏX=ó("j#ª‚²¨y÷ÒÆ{»ÛTYÅG~ú“\»~…Öâ‡ûÌ/ÌÕ3sZ±µ±M5®ƒþìÿ?î\¹PwNê[£PDQB˜DD¡}<¿Avˆ¢˜¸•45AC4<‚X×C-ººO+´€P×—lkªÙ•HREÝúcX·öS¶F9ÝØCŠ:CèK€«,Ò:ʲ"M FÓŒÁ$eoœ±›æäêbX9òJQÚ€RÆ8UÚ¨FŒ+-Ú6Ȧ”!µ‡¶Ð~ŒP¥kïà„ÆI…ô¢Õ'ÕleÍ,œ!{ëÌ®3jö3ª~­ò=²ñmì,¹%¤DXûõ²(ßþÏ»{W!ã(³”¸S©ÃÍ5>ú3?E„lÝݘµV œ±¸tÈû>ü ÆÓšÈYäÓ{q)8ÇÚëœ{ê yæ Þ~í ºss8ãȃ½eº}ÈW¾ò5.~ûE&3Ji­`/•GÄ4A\Ó:ý°ï‡„Q„†Â iÌ7ži8ØÙ¦Ùm“¡X •¬½s‰í;wxåË/°võ*aàó¹ßùÎ=ù8~PKÊ o)žY XKákÿî¸}õ ›wÖ8zæ,iv:Å8¸ôÊ·8ÜÝap°Sf˜2ÅÖŒ3øüRSà-!ñ=¢*ñè‘ „_ó‡¥ÔH/Dh][DM`AÎà›Jâ$ ë SÜÃòy çР´¬ã ]ßó5édªÈîùzli.›Ê¼ðÝGâyñ^ùSYŠtJ§Û¡1ë×ùµÿò³NY¿½^ßC¥d:ž MÁ£ü(ûû»”EAUf³«¡ Ïs¶ï®óSŸù ‹K‹Ü|÷*Jy,,/a\~ã<(f·ðxçõטlÌêR(:Rò0Ä% 2ö)lÅx4f|x@•™f¤oØ\»Îöú-ûûŒûœzôQ2KmÅn×^}ë,GŽ­'o½òm|Orîé§ðüÚr -)X›ÂÖ;oqâ¡sŒ8zú ¹“¼ûò $Ë+\{ýÛ´{mn]¼Hgi‘ô÷ÿM³+F~D%å,'µ[´º]æ——I:VOŸ&n¶hôzôѾǮ¬‹;K½9zGŽÐlwhöæ8ûèÃôެpõÒÛ4Ú-¢8Á—°] ÖDRpty™…#«Åv IDATö8rüJBrêVXzí»w™[>‚5–,S”)¦L©\0†…ÑÑÖuÅ1LÒ1‚¥ | A½€"Ј°Þ&òf .kËñ© C „_Sٳş‘Zœª+šx çÉÚ´JÒþ8WS]¤²e^|—¼œ’B>ÿÝé…Ù³1”éˆÎâ2ë›;()ù•_ù _ûƤãñýòäø`›Å£çÈ‹%$étXœµÜ]»Å‡æ'±>ŒeÎ8\9Ú¡_Üet¸Îôîé;wÉ__'ë.nãŸûÕ¿ËÏ®¼Ÿ[»ÇÙýäûùìûðÿü6;¿Fù‰³˜#‡w¤Æ5ZdÃ!U•3ôÉ'¦ƒs++”ÎòŸŸŠ·.]&OSÖ._¢¿»Ã­·/áWÏ¿ÁhtÈöÛì­ßæ×^e°»ÍÁîÝÅ#d…aïÑ7åÆýí n½}W öéïì0ÜÛÁ¸/Täz´WœJñ6|y×Â…šnË0ÍÇìÜ¢ç– cYÏV)@ ‹¶®bÑB ±uµÑ¹ÚP„­ZÔ_+ZX¤p()ð5^Ö¿S ‡§ãÍuÊÑ ^KÖØ/›ªzó=€xþ;w¾û!ú¹Ê´WOqëú5>ñ‰RfW/_« B0’4›È¸E1:$˦õ<ûLv.ÝßÀœšcrå€ìÅMòol“¾pâÍÄ4©&A¾Æ?{þmÍÚbÄÇ»çh}0$ùúé‡Pç}ôN”´÷3*/"jµXX]¥3?Goqiv—®»}'¶b\–ìîõ¹~ñmšÝ6“Ã{Ûw¹~ù*s =.û5}ÿ3¬]ùÿÛ:¯Ë®+½ÿv8á¦ÊÝìÌfj’bIY%K£àñÈ2` Ð@Îÿ€ìçæÅ€ýà'6<À6 2 {ŒŽÇ£Ä‘9J“˜Ånvîê 7ž°ÃòÃ>÷V5ÉÇB÷½uêì½×þÖ·¾õ­·yóW¿B)¡¿¶ÎÆÎ6ηì«)g'†ÉdJŒ[ ½~¼×ÃG9*i˜ùFƒ\Ñ/Dé‹”‹'ƒÁŽ,y»ÇÍ·Ù»éoo’gtĸˆQ`‰ŒV„L F"F"VÒF01¢\À„€A…ˆ )…)Td1ÝC\ ÞQ˜ "™ª½]šƒ½Äæf­õO]ëþêHqÔü×ݘ÷ÞË( ¸¦ek{— ¹qù]¾ú·›Ÿ½ô³ñª£]5£¿¶N]-hë ß•2?©Q×3ÚW[š×ï { BÓß$´S¤_rõö]67 þñ7Ÿ¡Vðˆ-r‡Ñ§û¬ýÂóÎÝ-ÚÏ_¢¿5FÞ»NAÒ° …"/Kb xïÏ[«–á`ÈÙïg´±É`}ûΟG©ÈÚæ&<þ8û{ô×ÖxôÙç8}ñ"ë[[xïpuMsà˜O&Äà !±|®®™O&LÇT®¡ZL˜e‹OäHvŠÑþ)z3ÅUƒÉ…2¯ÏopåÖYßQX01bB “€‘L"Ú{´X16‚E“¡(´¥—ç™%7©nÞ¢£P˜@½˜ÐÏ JS¤M…,šù„ù[©ºaJë×\Ó>¿Ú§.>ò‹é‰¥Xmõ!¨$"hq<øè'yï½+lm݇„È—ßOiP-æ„fF9X£Ỷ¾]U%DLk‘Ñ9!Æ)ÞÝ…ÜAQ½ŒX”üÕ_äÑ §øöã%ÃÉ‘"gô´`^ºËË¿qŒZ§Ü˜Ð¾“¶ ÁáƒÃûß4Œg5Í"ù鹦ÆuDÄÀ`c m 1l–a³¬ãù=mÛPU3fó)óƒ »û‡ìwÈxoŸÙþõäª}ââº3=•Þfãõ5†ìs®X°‘i̺F3á½npýý)ƒµ“ Ë# MÀ„TÀ±Qc;Gµ^–“g†\[ ­ÉµIZ6¤ˆ`£ m¤Oéå9¹´´Õ~øý¿äñ'Ÿ¥ì¨fcPŠ(‘ÉÁŰÎó4™Kâ*el®¢Oœ!„2ƒl¤:wQ’•%Á¬øçÿúQJøÝ¯ÿE® B_óäïUÄT|ï†ÛŸ~†øôæú®Ò”ýýáÑÆíur,ÃÍ>³ÆÐ’¥š»ÉPÊ&à¤tW@Yf ]o€ ØÈ¥fØVè½9õá!Óà ûcêùçæÄÌcŸ8Áàá‡xì7›÷Í’sïžæ®Â7>Áæ'ÿ‚Ý?~žý·î2=<ĵAq÷î¶–"Ëè÷2eA–òÌRt‚—ˆ& ðÚ੃0«[êÅ‚¶ñ_“¡§ZLplg-UV3ñÂâ¾s„Óræ­’ß~·aö‰9Í¥^c{ÚpãÎM®Üšrp³a{ë,ƒ2#׆ªŽh1èîE›.IÚÄ<>D‚k .CX…d‘T÷7ÆÐË-ÚæØl2Qx龇ˆE9tÕE¿\ˆÍµ†Eön^cýäišÅ4‹?Æ È±ÔàÖ[†³3¼ï*zˆå=}_“Y…Ñ]hŒâæˆ÷Gÿ‰«ùö7¾E†Æ¨Œ¨„‡/Õü‹“–ÿðÆwû&'þå†ßûS^¸Fˆ-óñkEÎ(Ëô46< >Ô¸Vpµa¡Á$h¬4X)rò\8mÚ´L´g:kYÌê_Íq®&DÁT~ç/kþÎÁ”µ/¯³xæÃ-N‚Üz‹_¿q‹;W0aDT"A¨]¢´£sñÓQ*ªºb•ÑkSç“Ùte÷ ¼‡½äoÐ}‡ÖMHâÝ”þY|]C´Õë÷n€(LÆS†›ÛÃ5êñÁG†€¶u¼õêËlž¼È­·É© £ÄB5¥Ò÷ƒP£¬…èÐ] Q`¼ÏfÁ¥îž,³ˆ´JvµF%ž£ŽY¶ÎýŸ?æpÞð¾ýrkÓ0e¸°=ã÷?ãøôùkÏ2ü'CN?÷#îü——˜Ýœ‘ÛŒ«»wnž@Cf3D~ÑKêA,AZ÷ Ò nF˜¢´ÐVĦ·u2Éh6Á>†Sð@Sñ¥‘0üæÃÔõíœdÓ;6߿Ÿ¼r·wkÆ» Ö76h«š †2·èA‰‘DW#’h³ŽšHVUzEdEu´À+lÓO"ÝÔWQˆD<% Cˆ •B»úŒFF÷ƒTJ}Saò" l8ΜñÑh` ¬8Ëäð.±š£ÁµõRyBô‘<ˉ*#º–Hì¤V‚çÔC—(2›=z¬ÖLf •òb,Þ3[0¸|õ€wo¿ÏS?DO@{O® ú6ðÙ­'µå¥úûgÎpòË%Åú-f7ö ã€o´‹E.­ˆ5×/¿Ïþ]Êõ‚*,¨ã”:.hü˜0? ®&´õ„¶šPÍñÓŠ0î£gO¢ÛGñvŸ§¯òÔßèsé³_býÔÌéåüËïñ¿ÿìe^¹3çæ{ 7ÎsòìN¤5 Z§’u7; ª„V «–z¿#,Ö yï:´:zÒ[UGŸS’)Ío’äÎõkøjÞõBëÿÍ=L Ár« q)høø´ m[Nž;Çt<^52´‹IÚ¦ñÞc­Æd=B[!J¥ FN\xÞ 5†¼È±ÊÐ+2òÜ÷ L–æƒm ý²`2÷üä7Ø>½ÍƒÛ;dZcUŽÅð YðÕ¢¡v^VçìpæËs¦„ªÅÏ¡—YúÖ¤ß5è“J~NÕÌY45U;£OY,ÌsªÅ7i`<ÀN.QΣ±É“¯£~oƳ_ý"_ØüΑ2ιöÚüà¿ÿ„×¯ÎØ½¾f“§·È‹nnRã¨U(ï1ª®õëh1•¤kµC °ÊjæëJ¿¸lðVJ%µŒHwåj-ìݹ›MP&i}ëþÕê`¥—*s²,I’‚ó÷®¾Ü›*ç/=ÎÂ{ÚÙ!ýþ€ÃÛ·V²d_{Š^Foc‡ù8ÑÂ"’Âðèç¾ÂæéÓ@$Ĉ–Ns¥A[ƒ5[húÃØŒ&W=Dxkùìsñ¿ðY¶z›«~¹ |\p58þ†ó=FòT? |ÿ}xö_ësí7ŠƒÃȼ*çiÅ㯈¢‰ˆÔðkd¾Ä<Õ³í·¶Yüqþfö ÿÖ˜uæ(ÞlÞæ½—ÅÏþÇϸrîܽKƈ“gNPö Ö$ù–Q ï}öeuÂ%„ö¼'´É"º@pïâ=JGÚECtžàZ\Õ’Ÿ9Ëpk“áÆÖØÕhš ©É£"o¾ò &×.'º9Ó¡šÌWÓ­¬±†è‚"!íõ‘é÷¤†“ý›Øµ$}Ž©±DÔJµNð! •Á‰ï8†4›¨YÌP$šDjH÷9¢óTµGÍ’AÓú數nó4ÿçOnðúk/ñÝßù$Ÿä‹äv£[ò mùgRóOÕïðnôNá}‘3¿Áý߸EÿõãŸzƯÀÞ5Ïþ8²·°\m-·}ÎU³góž¢>mf‡ð©‡Q>ÌÙþß9ŒüƒÅ:[;›ìö¼{ù-~ò³çyóùרk v÷fdÅ&'ïÛ¢ìçÔDynpÎ1»±ËÁ•«Dל'ë žeTÚµ¢w&£G\ˆd´SxÆZLmÓb¢b|w¬W2X"FV‹¤¼V¨»"Pý+)‹ÐÊd/B¬ùPeP>ø¶E—î|ñ)$Eé@µJ׈,õìG ¦¢I,¡OÍ‹.¤´GbÄÕ6‹1©/®m›ÃMðxL0…aï–ãÿÓ‹|ÿ«|ë«_à±Gž£Ì  ,Â:žO©užSŸ¤Ö§™ðmùæÒeî¯+ôÔ¢& 9·ê?´÷ó—›3;}šé…3„JìšGJ>¿1廓†ßÊvð™âòä*¿øùk|ÿ—ÎôÝÛ¶·îÌè¯`sg²0)÷BfótÈ| šÍ¸3iY6³@6,ˆÊâÆ<·Lo:tÑǘ„§|ëPÆ ÚÉ ƒé@^©†±™:¾È÷\Ú6ωK«¤8„Äc‰žÈ±RèG7‚«¦F‘6—_qþËtÏ$9s’Œ/»XcjT즓JLÇV ™ÉVÝ®ª{ ɵËùÀ¡Ÿ0 qÃKg2øÉ«~ôâóäÓÁßûæ×xæü%6F; K¢:jn‡ÿ:Þ>I;z ÿÉ·(ó ¥ú¨¦„¸Å™æO àŇ.Ð>Ó'>8ûxÅg6Æü]wÀ§§9EÓçæÁ ~ñþ^xåç¼={ÁL¸z׳;vNem­L>„vZ)ïV ¹$r¨r´ŽÄ™ÃUQ‘|8À{O>\G¼#T Ĉ±7¥ dîRk…Ä@ìZÙD:årì­#b$©–î$Ö¸7,kߪ+üÜ[ÿ(LDUX$ ª!Ä®F;³ì]êlçÅç[GI€HÅ@h=íÝ©ÂyÏ¡«iëõlBt-ŸúÊß"ë•„@¹Ô¹=ïüø¯yëG‘žÿ¿<÷ÅçøâÃÏñð©Ç¸ôÜCln­%åkšüê&…zœx:pë|EõŠþçåsªM¶/”|i.‘gmËým Œ+Þ¼q•_ýú ?ÿå{| cæë·iïVüú•¼¬qö‘s¬Iw=(B^ä4M“<ÿIuúV@Ð)SÃ'! 2¯ˆQˆU Êe ™N“fp5¦{×;fï½Í¢‰˜Ð28wžbmµ²‡ Þ·(™N¢“’£“""ExOÓ¸Õ;²äÀ"‘ôÒCpĘÓÖ ìYk:1-ݽ9¸»O )‚ šèÆšŽ(>êÏ]>G”Ô±‚Núőص¶%™æÇd-þ1Y|ŒPtùK†*J$†°z)ÇÙ¢bwÊ» ¤:3«UQˆB<Ú(dÉß73š-UÏR-!wÖ…¬1BS׈±ô‡]]_%bÅXÃøÎ®Ž‰BÎLšˆ’reQáÈ# ú@}­‡j+ŒÒôÃí>ÆÄ ºTÓ“I ¤ŽÜ¬§W½ýFkúeŸ¦M­b)ñQÝa‘ÔcSTœé Õq¥5Yž¯4}"¤¶îî`•½×´¤Y预ÅÞ|Å&!éFÓ¦6·é÷)Yáƒî`Üë²ržºw…Íÿ§†J«t߉tÞêzÕŸ¾º*´Nãèz=0×´çR/Ü´t sɪ̢Œ&†€ÖäÃa¶Àˆà?¸Í,Ó 8ƒê¨Óíb–Â鮯—%U3%ˆ÷ ò¾B¢£Ý÷Ää¡î^Š2˨¦‰òÐb´& Ââê4mƒízúŒMœý!JƨŽAÍ”%uSá¼_e?êx$ Â8D†ÑQ›>6:BµàÖK/aNœÂöz«m3{‰õ2ŠÍbFžg„¦^5Ò(¥‘eEPTbd—™¹RDç»5PjïC#c><¢ðãu¨cŽeIMŠV¤Ýi³Nœ\+"ª›™§ÒNWËÐ&]h/ˆAXŽY’˜Ø2Q)"(ª HÝGyß&íx­§úà6½ó'0YªpÅ虚‚5·`¶·Ïö#çÙZ[­hZGß~c}áʤ¨•vy•üç*C¤&S‚j<£5l/Oö!:e1Ê$'ò»o½EØÝc0\'·†ÙbÞÝɪ+åCår¤´ïÙµCr_Ó—TAÍÑllob{=Bðí[ìÈŸ4¼@w_pãêo¨Ç“4f¶7\q ¬ÒxA:'‘¥î9vX­£ln,ða9ø=WÀ*¤Ëjƒ˜™ ‚Ír|åŽÄÖ1b ³zÐ:"ŽˆÂæ%–“;º¹x>¢¥CÒ> {%ª,(OoÐjaó‰ûß9 ,s¼÷˜,Ñ›ÏF;#€RÛÔÔÕ‚^¯¤W”ˆ‚ÊZ$Ï!³h£:þ “ª©n3H$w N)¼6d*g.Æsò²À˜¬Sð¦ci•b°¶Á$*ß2ìZâ>"¨ëV B d¡¡R­r†øôÿ­¡njÄG²DùT³–Ð¥(m·KC‚²v{º^zE‡jÚªÁYšìAvœ§6&†ÔcR%ÝGl"Êh´D†£!fmD¯(p>UHmÕ&4,O­µë(EÖ/ЭG…¶¤¶m¥±Ú ÎS-*ZkXÓz•+«.K8%I¸èÂw¢÷ŒÄ3ê.¤eÛ}ŒI¼!6½3­¦[%ªâ]êÿ¡3•ÒhcÒ’ÅTx_›LWZ5ˆv)ùõ¸…/ƒ€6׺U캇 <†ðmf0YIpÖZDLº–y=‚Ís¼sç±Ežˆ£@[¬. MC(ªÒÆ#§ŒÎ#@%âÀ”9náXßÚXŠ%©$Gy×iÞÕͽÔ7Ÿln@¦û‡P{ú§w@e®¿T'5¾q‘Afi¢&“„itgÃgM7Ú¨4¾õ4UE.Zc2“š;â1üt H§Ü¾K›½g¡sæ(†¾b¨!jMÖ/YLçh­ð1gÓ­ÉÒ ŠÎ­9†½»˜ ª :ÆQ:  D×ÇtWï½VŽ‘éËdåxìú?–ˆ@ÐÖ#|[‘e6Ѻ+œxjÄ…'+2¢6D ì:–QV§.š´z–EÑÎæ˜²—È¥cš ŽÞÚh…lCãR~ X«w‰Ýó8›"–EáŒF+¡iš•°B£ˆ:=¸[8eA":ÂüË„/ˆJ'3Ùê)h[PYêÄÉ,úˆõN)òr¤˜©Î¢à=6´htg>“À²w©"¨µîR>ÐV'Oà奢 •• –X›¬ý:ŸÇ£{üˆÒMÀãqô彊^IU5+3Èt‹Ë6Nž!Cæ{7éõÔû+7K“ ŘBCZT€(I&Í‘U¬@òBˆÆ¢b×RÍj¬‚ls¥ÓTó'w#Lƒo^)]±F›…IDATz¤;¸óÆ\‰,¤(“¼Ã J–)ÓQª¤ÐTãMÓPëHß·iôí[Q®J)¢YÉn(ò‚:Ï1¹I ¨ˆzµ±—øL:$(*á¡  ¢ Ú·«ÍtøÚ¯Ó îîö#JT¯î{ÁvJ…Z³ZÜå±ZiÕ   ~y´ÍtqåøøÿIìGBR«WIEND®B`‚htmldoc-1.8.27/desktop/vnd.htmldoc-book.desktop0100664000212600000240000000022610063720627020141 0ustar mikeuser[Desktop Entry] Encoding=UTF-8 Type=MimeType MimeType=application/vnd.htmldoc-book Icon=htmldoc.png Patterns=*.book;*.BOOK; Comment=HTMLDOC Book File htmldoc-1.8.27/desktop/htmldoc.info0100664000212600000240000000001110062145531015667 0ustar mikeuserHTDChtdc htmldoc-1.8.27/desktop/htmldoc.icns0100664000212600000240000021223410063364026015707 0ustar mikeusericnsœics#Hüÿüÿþÿþÿþÿþÿþÿüÿþÿþÿþÿÿÿÿÿÿÿÿÿÿüÿüÿþÿþÿþÿþÿþÿüÿþÿþÿþÿÿÿÿÿÿÿÿÿÿis32ó ‡1{ÿ|ÿ¬ÿüÿùß|ÿ‚ÿ8ÿmSîÿ¤ {ÿˆÿAÿQáÿË w‚ÿ @ÿ;ÿÓ tÿ€ÿ >ÿPMÿÂwÿ€ÿ Dÿ–Ͱÿ~ ~ÿ{ÿŽÿëûû…9M,€²Ï¿Å*/y0- Åƒ5d–!=nz<1F 8ª&2±¼•7 !C2P~8Š”q:  ,™WI?5`*+((#(Z‘nD(& $$   ‡1 ÿ*™ÿ¯ÿüÿùßÿB·ÿBOÿmSîÿ¤ÿ%uÉÿGmÿRáÿË|‚ÿ,hÿF ÿÓyÿln¦ÿ/nÿymÿÂwÿjV›ÿB„ÿ°Ê­ÿ~ÿE=›ÿkÓÿëúû‡†p6Ds¤§»ÐÀ¾n6k?Fs›C/:7±–UF KŒ®6bÇÞt7  CÌ6AÀÚç¹O&ŠRe¯8ÂÓ¤eJ?=9 M›ibTFD<= 2@j˜jp@-"; 0!5'&;($9  ‡1 ÿ!™ÿ²ÿüÿùß ÿ8¼ÿVSÿmSîÿ¤ÿfÉÿOtÿVáÿË~‚ÿ6zÿSÿÓ~ÿFr­ÿ>uÿŠaÿÂ~ÿUe¢ÿA“ÿ¡Í°ÿ~‚ÿJEŸÿg»ÿíûûˆVq>Ko˜¦½ÐÀɃ"SFMp–D&#-Æç¯h S‹´:˜êàtE^, BÌ;XååðÃF"/5,$}Xk¼8Ðâ®RGLKK SÊ‹_bZlFHCF 7AiuwiB6'E'0#2*,@0,&Es8mkÿÿÿÿê#ÿÿÿÿÿÿÿŸWÿþüØhÿÿÿÿÿÿÿÿûÿ{.¯ÿeÿÿÿÿÿÿÿÿÿÿ¦úÅÿÿÿÿÿÿÿÿÿÿÿ—âÚÿÿÿÿÿÿÿÿÿÿÿÿ}õËÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰ÿÿÿÿÿÿÿÿÿÿÿÿÿñ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒICN#ÿàÿøÿþÀÿÿÿðÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿøÿÿÿøÿÿÿðÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿàÿøÿþÀÿÿÿðÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿøÿÿÿøÿÿÿðÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþil32 N   “    €ÿ €ÿ€ƒÿüøï«‚€ÿ €ÿ€ÿüûÿû €ÿ €ÿxÿÿ›ŠêÿÿüŽ€ €ÿ €ÿ uÿÿž€9öÿÿç€ €ÿ €ÿ {ÿÿ‘ã€ÿU €ÿ )€ÿ yÿÿoüÿÿŠ ˆÿ zÿÿr €üÿÿ ˆÿ zÿÿu €ÿ› €ÿ  €ÿ  vÿÿy5 €ÿ €ÿ) €ÿ  {ÿÿ|8† .€ÿE  €ÿ$€ÿ{ÿÿ’ƒ´Øfwÿÿç€ €ÿ €ÿ ‚ÿÿŸ¥ÑÚôúÿÿy€ €ÿ €ÿ -§ÿÿÜ×ñþ€ÿ¨ €ÿ€ÿO—Ù„ÿð|€ ˆ~wzV¯½Ò¾±±ÃŶ ¢»€ #)%  ^˜›ePi”Êãå¿Ãêêàb€"-&&C”}1tÇÑÝßÒµ{I )*)%u²],74%C¯¿™i, I¥²P-CTfU4!P‘m6  $|¿²UFs‰¡e86'#  €¸°r>k¡»ÉÅã½nG €< O¬˜(%K†ª¡¡¨¡¯J/ 7 „q#DDr¤—–¨–œk@B.€d < Ž{AUŽ}}~’tJ-9,(  SÏo8HX`aZF0Io%*())&%)  '-]ÒžC<2'C”;)/.,)&,) €@,,/>ÕÝåÃ6g†,(2&)# ,4\oY/, "'€ "")* "& €!& )(#$  “    €ÿ  ,;€ÿƒÿüøï«‚ €ÿ $:E€ÿ €ÿüûÿû €ÿ ,Cb€ÿ38yÿÿ›ŠêÿÿüŽ€ €ÿ@Xˆ€ÿ6kS‚ÿÿž€9öÿÿç€ €ÿ/L‡Š€ÿBbA ÿÿ‘ã€ÿU €ÿDr”Ÿ€ÿ;>Gÿÿo 3€üÿÿŠ ˆÿ&81›ÿÿ~€üÿÿˆÿ !4J“ÿÿƒ!€ÿ›€ÿ9"I:4&1DC/-6<  '%0=L9&3EC), 7;   “    €ÿ !7€ÿƒÿüøï«‚ €ÿ /G€ÿ €ÿüûÿû €ÿ #9m€ÿUHyÿÿ›ŠêÿÿüŽ€ €ÿ3S€ÿGs]ˆÿÿž€9öÿÿç€ €ÿ&?}‡€ÿDlQ¡ÿÿ’ã€ÿU €ÿ3]¡€ÿBKJ—ÿÿof€üÿÿŠˆÿ.?C¤ÿÿ€3üÿÿˆÿ &E]©ÿÿJ €ÿ›€ÿ'Fg^T€ÿ )UM–ÿÿ›th €ÿ€ÿ9s„q€ÿ 6FL¨ÿÿž}§ A€ÿE€ÿ8ylkY€ÿ+N`ªÿÿ¢ž´Óeyÿÿ瀀ÿAghTD€ÿ3X|Æÿÿ¢¤ÒÝôúÿÿy€€ÿ?`T1nKÊ®eʼ½¿âµuJ]@LJKLKHP?4 :EvñÌgn‹’ŠkKih;JGGFD@G 6GMˆäãz<==8BrœEHMKFB>HI€ /JFI_ŽÒ§_j¦²‹¸½ƒ" ,6FMa[I6' w‰rQ+  €% #d¨À¼{"#=Mfs€‰„oN/(.;sX,€€& 2Š¼Æ¯ˆ-&H`‰‘‘§¤ŽtR<<7€/  Q–»¸µž.%FkЍ·µÅ±ÑÓµQF/ €    ,¤²¤Ÿe,Hi‰¸ÂÂÃÄÕÞàÉ[A   \§­“1"8[„œ¢—“ž¦¡Ž¡ŒkI7,   ; ! ™|6?,HeŒ¤Ž‰’¦  ‰ž‚`F8D3 ,U0M.Vm8EdŒ¤™¡¤¡¢¥“zU=.?5€7&? fŸ§TENj’snoswŽ}\B/)F> €R3  ˜Ù˜F7CSZbjkg_SA1.Un,&)*+*((" #)  "+“Ú¶M66>AED?:-(*zŠb,**)+‚,)€* )*+2@|äÞ~BC>+"l¨Y,2/.,*'%#*,(‚+(--0:7J¤çèÍÞàÇd/”§D*2' #,([$+" *10n§ØÒ×­€wJ+10$  *'!& +7KH,-.+$ &)&+ %%#" ,)* (%*!"#$# (()   '#‚   #&&€)  !&#  ž  ›   ™  $,7;# —#  ‡À 8âq<ÄÞÙÙØóŠåÿãÿÿöÕÿ¥‰#  ›ÝEÿpB~v´ÿF1 ›ÿíúÿí°ÿj‰# @œÝ MÿzOrd·ÿ16“ØÿCû÷é¥ÿ\÷·ƒ# %hÌ{œëlÿ€_k‡¼ÿ-Qm·’ñ}?ùÜë¥ÿ\øöÖx# mÑž' žñ¦¶ÿ‡g™†¹ÿ5]d¼ˆÀ±X×Ðì¥ÿ\‚*‹ÚóÕ7 -¬ÖT ŸÞ2[ÿŠ`Žw§ÿ;\g¼ŽŒîÂJŸì¥ÿ\‚3\ËñÓU 8¤¿M Þ&D‡ÿo[©ÿAWKªGÿê’é¥ÿ_?÷üäx€)  ;ržà,a¦ÿ“dg^¨ÿ9<<»€ Í¢–Ø›ÿåéøû³Þœƒ'  Rq=‹¤ÂtTXg‹.39ZH64)pS$°•’’5…"  8Rzœ¢pS_lbI3267D2"4VS3 Š#  )Bo§ËêäשpbQ?L½Æ‘,B`Z`›¸±Ÿw‰$ 5[™¥çîz–êçQ6AØßƒvØ×VRnøÃ{~ˆt ˆ% '?¢¥àã7Myú„*‚öS!#eø6ÏË;Rˆ‚ ‡& 5i ¼­ÒäDUXÖ´#·Ñ"(WeܰBõ”g¹ßã’†' 'B—¬’Äã6G>˼,ÊÀ#UdMËÃNþ¥ãÑ­Ùh  …' 4rœ²›hÃâ/:>Þ§.¬ÚCURbã¹røÀŸßÉÇÅß:…( 'P•˜©o]»à 6„þa#wýrAe™ý¡–îïµÆÆãîË'„) ;ˆ¡µaU¼ô°×ú™Ee¹öÇÑúш»ÄóûÞåûñÕñ“ #$ƒ) ,h™­†g^RtŠˆ†Q#=]ar’¯¶¦•‘§Ó±²Ìɽ©»ïù;0ƒ* Iޝ qTSB6294,I[\€‹ ¯»¹¾½½×ߨÌÃËÕéûÿÀ%+‚* 1w–¡p^T<3=I?5W`l‚ªÌâØÊËÓаÚÑõøýþïêÿþY)‚+\‹¦zVTA;QŒÂßâåééõùðÏ–kR1  nÍÖ¹D 0Nr²×çÒËÜêäÊèÉ–mWD8&! F$ - ¼Ï¾>65@eŒÃîÆ¿ÌíéÂ⾌mYMW91ƒ0Z//'^"MÌÐ`)eNa‹Äã×àäâãëÓ®}b]_eCKFFEDCBAB@0F$ nO*tߟŸeo•À¤ž¤ªØ·‡d_ˆse;MIF^A=?D  > )5;ªö¾¤\aw†’™œ™‘{]Hok‚HDIGGEA@768=% 9@CG°ôåÐ{PTY]`eXE5F‚Àn1HDBABC€B6A=  EFGSf¢ðùóÆuM841@A>€Z   AGGIVZn²ïûùät$%]ÃÓ°[3FM86A?   ;C&@L(:w¼ÊظÂË¥i;%GKJ6 !!3@=$€.  9@7H"),*?bqV+/+*#HIE4 ';2++1?=$€, 9> F +6%0IG5-#&FDC1 /.*%1>;!€Z  771/C!:&7LI5;'DCC- /25 2=:  /,-1A8KH ,FEE) #&)6=:  ž   ›  ™   /@1 —#  ˆ¿0àpHÏâÙÙØóŒåÿãÿÿöÕÿ¥‰#  œÜ:ÿrOœ—ÃÿV3 ›ÿíúÿí°ÿj‰# CœÜ Aÿ}_‚ÐÿPX “×ÿCû÷é¥ÿ\÷·ƒ# %jÍ}œëjy”ÿƒk®ÚÿIqv»’ñ}BùÜë¥ÿ\øöÖx# lÑ * ñ›¢²ÿˆm®¸×ÿHanÄðXÚÐì¥ÿ\‚*‹ÚóÕ7 .ªÖVŸÝ'Sÿ‰e±§¼ÿ=bn¿‘ŒîÂJ ì¥ÿ\‚3\ËñÓU :¦ÀQŸÝ7yÿŠ}ª„ÃÿC^W²‘Oÿê‘é¥ÿ_?÷üäx€) @tœß!Nÿ”|Œ‰µÿAFK¹„.Ñ® —Ú  ÿåéøû³Þœƒ' Ke.i‚´nv—7A=gWBR70lT+¸•’’5…#*:Voy›ˆuuqqXB7FLRRF6OUG ‰#".Lo®àç߸uqaQQ•Å̤G@T[r°Æ±žƒ‰$'>bkÏëé]GHÚàŠ‰ÚÖNU|ùՙމsˆ%!+RbmÒåFUƒú‹1‹öZ7/_øƒGØØ\_ug ‡&&B^o‚ÐçIdiÙµ+¼Õ5/L\ܹgùž]ˆ¤ÀŠ †'!+QUpƒÉä>UNϽ1ËÅ&I\VÑÍiþ”r±¸¨ão 3…($BUhznÉã8HFߨ8¶Ù;O]„ë¼iô±‡ÐÌÑÒé@ (3„( /PRsjf¾â(<‰þj0uýqJ€°þŒnàî~¼ËÍïúÊE„)&HSkmg`Ãõ±Øú &>W¸öÍ×ù¿h¢¾ôûßèýóÖï‘/aƒ)!8O^aeh`}‹ŠˆZ)7T_v”¨¤‰{†§Øµ¶Íʾª½ïö;Lƒ*+HZef\aN<5>A2DTZ€ˆ‹ˆ’¢¼ÂÀÚâÙÌÄÍÕéûÿ¼*{‚*"=M_\adH8AQM:RZh}„¤ÀÏÌÏ×Ò±ÜÑõøýþïêÿýZ >‚+1F[ZVaNCAPIBX[kˆ—µÂ¹ÆÒܾÃãÌñÿñÖ¿ùøþýÅ?+$APDP_d{‚˜¶¬a, bØÊÇôûûøôïèÀ›d€,(>VXWI=BPDPbt}¬µd%  ,ÃûûõñíÝ´ˆgaO €,CUQO 8 ·ÄµN.CrÖý×ÏÜÿùÑóË•kFHI=LKKJJ€INA€ W)F²©^Mj_Hk—Ññçñõóôú⹆[:HPAR€P9ONNOTS/?* [R?íÍ®buœÅ®¨ª¯·ß¿hJUrM9JIHIJKIFFO  €R@ #7BH¯úã§Xe~Œ˜ ¥¤™‚bF]dk8FJKKIGFA=>G' DEFLµöñÅeOUVZ`bTCBW„†Q5KGFFG€HIIH€*  IJJRj¦íðÓ{6642/1A]‹µ_6LPMLHC>98GJI"‚* ELLMX[k­èâ¡N1;g’®Â¨G8LP>=II&‚* ßMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýóÿéHxÿëSTÿ+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|&ÄæîdXÿŒ3CÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕhæ¹íbXÿŒ4x×"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÁºì_XÿŒ4>´Þ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýíì^XÿŒ4 hßÎeÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïeXÿ6FÃÂpR:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÎaÿåÑÇÆN~bB8 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ…‘—””_) ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ/"""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰it32œƒ€   „؃€  € €Õ€  €  Ó€  €  €€Ђ€   € ‚Í €  €  Ë‚€  €  Ƀ'    € Ç  € € Å   €€€ À   €  €‚ Á  ÿ ÿ<ÿµ‚ÿô…ƒÿ‚ÿŸ‚  ÿÿ ?ÿA‚ÿû!„ƒÿ‚ÿŸ   ÿÿ  <ƒóÿƒñ&ƒÿ†ƒ„ÿ‚ÿŸ€   ÿ ÿ€ÿ €ƒÿÀƒñƒÿ‚ÿŸ€ ‚   ÿ  ÿ  ÿ ƒÿÿ‚ÿŸ    ÿ ÿ ÿ€ €€ÿã€ÿD‚ûÿûÿ‚ÿŸ‚   3fÿ ÿ !ÿ  €ÿ€ÿ›Äÿÿèÿ‚ÿŠÿõ 4°ÿ¥ÿ ÿ (%ÿ  €ÿB€ÿÕëÿÿ·ÿ‚ÿŠÿÿûØŽ‚ 5®€ÿ¤ ÿ €ÿ *)(ÿ  €ÿù€ÿ€õÿÿ/ÿ‚ÿŠÿñ­Œ  4ª€ÿù ÿÑÑÓÕÕÖÕÕÿ  &+*&ÿ €ÿ­€ÿO3ÿÿïÿ‚ÿŠÒõû€ÿ€ €2¦€ÿû’ ÿ &+)&$ÿ €ÿ]€ÿŸxÿÿÉÿ‚ÿŒ`×ù€ÿ뛈  /¢€ÿ ý˜  ÿ #)+*'% ÿ €€ÿ €ÿï™ÿÿYÿ‚ÿŽ:Èù€ÿè—† *žþÿÿþ›! ÿ €  ÿ "+*($#!ÿ €ÿ Ñ€ÿ2íÿÕÿ‚ÿ<Éù€ÿæ„ #×ÿ €  ÿ ÿ  %++'#ÿ €ÿ €ÿ}1ÿÿvÿ‚ÿ’®ÿöƒ  _Þ€ÿ ÖQ ÿ €ÿ  ,+)$"ÿ  €ÿ ;€ÿÒÿÿ,ÿ‚ÿÎò€ÿô¤„  b߀ÿ ÒL ÿ  ÿ  %('##ÿ €ÿ ï€ÿëÿäÿ‚ÿÿóû€ÿø¸†   `â€ÿÏN ÿ€  ÿ $&%"# ÿ€  €ÿ  ¤‚ÿŒÿ‚ÿŒóÿùЈ€ € dä€ÿÍBÿ ÿ !"" ÿ€  €ÿ€ U‚ÿ?€ÿ‚ÿŠ‚ÿûÕ.Š€ €   içÿÿ¤ ÿ ÿ  "!!ÿ  €ÿ þ€ÿô ÿ€ÿ6X™¦›÷ÿÿûÜ6Œ    mé¤  ÿ !ÿ ! ÿ  €€ÿ€ÿ§ÿ‹ÿ÷îÿìLŽ €  < ÿ   #ÿ  ÿ  €ÿ  J„ƒ‚9  ÿ ‹ÿï¡k     ÿ #%ÿ ÿ   €ÿ   € ÿ ‹ÿè”N     "&&()       €   ¢   €, &$!0)  "    €    €¡L      %!-1)##      €     C     $(!53,'#$ €    Ÿ€     €%"' +4.+$"  €  ‚    ž €      #'„ÿ&ýíË•B  ,w·ãùùä¸v$ € M–ÊèøÿöäɧyH   "&%*‰ÿÄ6’û…ÿûŒ €lè‰ÿ$     %*,2ÿóóøƒÿ ôH Ђÿúú‚ÿ Ì »ƒÿýöƒÿ œ       &*,ÿ "N·ÿ ð, Æ€ÿów% #uô€ÿà »ÿ ½].$-BwÃÿ%›      $#&6ÿ gþ€ÿ© v€ÿé, %è€ÿo  y€ÿúa€  +4# š     "(,0ÿ yÿ( î€ÿF  G€ÿí ð€ÿl(:P_/ ™      &"&+1,ÿ Ý€ÿv V€ÿ ‚  Ä€ÿP _€ÿÑ,Tr¨Ä¥»–~Øàóðm  •    $#1/*&! ÿ ! €ÿß ë€ÿ   %€ÿéî€ÿE8KkŒ¯Ð’ž´Ž¼ðôïøåB”     !/,-,&&$ÿC€ÿ¼  Ê€ÿ 2  A€ÿÊÓ€ÿjF\­Õííiõõå»åÂôúÉ"“      %'2,&&%ÿ ~€ÿ„ –€ÿ h t€ÿ™+´€ÿ§So˜¨çôöàøù§Šð×íùøœ’€   "0-)&! ÿ ã€ÿ> S€ÿ Ä  É€ÿ]+@‹€ÿïmzq]ÆñøúÀ¥é§¯øöùûôb’   ,.*# ÿ ‡€ÿÜ  í€ÿ F U€ÿï./ $',)31/ ,6-,/ & +Ed„›©¶ÀÀ¨`+   ‚2   P§®¯±¹¾ÆÌÓÕÏǼ·µžro^,&"  †7$,2430 %)2,1" & #5Tu–§±ÀÅÄ W* €1 (,269;<:3-)) .p”¦±¸¿ÅÌÍÅ¿¹´™ŽgY](6  †k663,'*%,1#+EhŠ ®»ÅÆÀ˜]-  "(,3:>DIORUWVRJ?66,($ -u™¯·ÂÇü¶§yjeS<84! €  †‚e #2/3.'*#!%%"6V{™­·ÂÇǼT'  !&,-/16;@DFGFFGHE;998.& :{ ·½·±ž›o?—rhWS8/&€   …„(,8-%#!+Gk’§±ÀÇÊůwR$ €D&*,058=ABMOPNKGE93(++%& Q‹˜­©¢ ¤gDpkUF8.(   …‚p-&% 7Yž­¸ÄÅÄŸyQ!  -6813:GNPVKdlk`f[JBK?+&% tdqˆKˆ¡ŽŠn`SD6+    … ƒ^ &*Fq—¨µ¿ÅÅðˆfO  -211=FTX_`dWtwri[hOM5?1*&$($ "ƒHu†Ÿ“ƒsaSA) €…   #"&7Z„¤±¼ÂÅŽ¨zuQ  4C7*AMW€`(dinpqrstsgJH><*$%%*/2,! 9‡Š›˜y`G2 ‡€„ €Z$+Hp–¬·ÄÄÆÄɾˆ~X% -6A@L`mt{„“–˜—™¤¥¤›vlW@4-!&,-46' mpo^F/ €€„  '#5]ˆ¤´¾ÄÄÇÍ·¿‚[3 €= ,CMVbq~‚‡tslg¡ž®¸—‘’“‹|p`L727./64)F7 *9 € „ P%'Eh—®¼ÅÆÆÐ§¾Ÿ©nW@&5IYUQU‰Š‹ˆ€Œ§¥¥§˜›–މtole[J=7-F( €‚ ƒ€ €+,:jŸ±½ÂÅÐÌ·¨ª—›L0 #&1N^m{‰– ¦©•ž¬¬©©¬¦©€ª$‡~§ªª¬©¨Ÿ’‚p^L>63..,#   ‚€  T/?  ŠÀ†¨²·—¦‹G €?&*3>MV[w‚Œ‚¢¶¥†Z_Džªª´Ò˜^dl©žœ˜hdZ]QE<6/45&%)$ €   ‚€ ‰2!E N+»¸‹¡Äª|‘U  :**%!%5;LHM\b¦˜Â›iqzTQ ªªœ¯Ñ‘]i§›pUlC_QE<62=B.,3/  € €   5ª"€.#€Jn˱–Œ¨ŒZ23»W4(&)6F\]qqv¡¡™˜™˜™—œ‰l—ª©’˜˜¤t¨¥–‘†bf`PE=65IO;563 ‚ €€€W™+­­”‚lbF:¡›N74;FS`qœ¤¨ªƒ©€ª©©ª¬©¨§¤œŽo]MC:47UXF669 ! ‰‚€ Œv , €ThGF>0# d>¡oE;9BO]lz‰”ž¤¦€§¨…©¨¨©©¨§¤Ÿ•ˆyiXKA710KM=8:;"€ƒ€ €'¾79*#VF5' :< ­Œ]€=8+,1&98-,/-…ˆ ‚ W 9 C$ m¦2VÒœuSC=,<69=JXˆ‹Ñ¼uwlukŽr~zzbsz¤œ€vhGXI8./;/"&13C6B.ƒ‡€ƒ ¢N & K   <ôQÝ̬bUZPBDRWb^uœžrPkeSLrN’e„wpyq+.7/,../.-,*&$!€  #&(,-/,+*+& €2<#  "$&%'†ãÞÜÙÙÀR?F>.19>JUYUQLLMLOPWYK?6-*&##$>Š™z˜—F'-0%#€! !"%(+-0€/..--€.-*))(€€Z   $#%$&*#)-tÜããääÙi1@@=:52/.,**(%$##<}—‘ˆ›®[$ "),,-0//€-/..-..-.€- ,,.-*('')€€„"  € €%&%#&!&)(,76]Ñäçíïë ;/E@.€&!$-1 61.*'($" #% -`—¨Ÿœ–Q++/6€01.//--.-.--,--,-,-,€(+€ #  $,I++--/47@AH§ïôöõóÝw05IB1'-673.)% &Q—¿¹}F$(.0601//./..--./0-,-, -,,-+*((+ €€‚ €   //,€.047€AFFB{âøùùõðÍv>JlttaF6,$4 K©ÕÇ™s>"&-12510.//.,*'&$! *-,,)((+ €   €T0/2100.,,/=54466N¬ðøùùöñ⶘”±Öâо¨”`I.  mÑçÍž[5$&-0062& )€,+'(+ €€€†  € /-+('*,0347E>:9€<e½í€ö/ôóñè×ÐåõøùúúÝ”N$ I¦çâÀ‡D7&&--0551 € &,,+*'(+€€€€  €  .-.€/0/2236A9€62,)R§ßóóððõõðéðúû€ý9ÇX"T¦äíÏ”T0:),/0060/  %,++)('*€‚  € €€, -+&&$  05€2$, H‡¯ÜðóöøùöÝÒÞëí½lXz°ÕѵI-$ *-€0#60/-    %,++)&&)€„ € € *+*+&€O63.-* -  )-/0/51,-,   $++*(&'*€€€‚  €*€)Z% ,22*&  $>Plލ·±›ŸÊÄf!  *,-,32+,--   "$" #*+('%&)€€  €`''('$  )),1%  /DLSRTP-  (,,22,+,+,  &'+% #$$&$")*)&&%'€€ €f ''&'$&'&'+!   (,21+*+*++ $'$ #()''&&'€€ƒ € &Z!%&&%!  ""#""   +5.)**++*+  "%&""))(&$%'€€„  &!%&&  $#€$  €5-)()**+**  €#(('&%$'€€‡   $€&% "%$ ## ""#$#  *) *))**!‚ !!  #()&%$#&€€ €& #$%$$%$ %$€"€#   '() * €!  $)**%##' €†U   $##$$%% *&$##$   #& '()')())*(€ !! !  &'(&%"$& €€Z   !! !#  %%  *,,)+)&  $!  ())()((*('    €!  &#!#&ƒ     €!#$$  $%%&''"€  **))*)&  €     &€'#!#%ƒ€ ! !€!""# %&&%&& … €)* ))& ‚  &$"$#‚   €‚ Ø   ‚ Õ   "Ò ƒ    Ð    € Í  € €    "Ë $  !#!! É  € '   "&&'*,)€€Ç € 1  "#%).2699*Å9   #$$&,.4:@BC@1 À  €. #&"')./58@BEHHD7 !Á   ÿ$*ÿ=86=lÿµ‚ÿô…ƒÿ‚ÿŸ€    ÿ$%!-ÿ5*+6lÿH‚ÿû!„ƒÿ‚ÿŸ €    ÿ$&*/ÿ6(Ipƒöÿƒñ&ƒÿ†ƒ„ÿ‚ÿŸ €    ÿ(.2ÿ :LX^^WJGFÿ ƒÿÀƒñƒÿ‚ÿŸ €    ÿ$04ÿ 04>M_kngL>Fÿ,'ƒÿÿ‚ÿŸ   ÿ+18ÿ 26@Rfw}UjGmÿ/25,€ÿã€ÿD‚ûÿûÿ‚ÿŸ €  4fÿ $05>ÿ -8FZr~T]m~ÿ,/9AE2€ÿŽ€ÿ›Äÿÿèÿ‚ÿŠÿõ€  4±ÿ¥ ÿ )2:Eÿ 89HbyT]wwÿ1,2FU_X, €ÿB€ÿÕëÿÿ·ÿ‚ÿŠÿÿûØŽ 6®€ÿ¤ ÿ  +5>Iÿ :>Pj€‰g]˜Œwÿ&&8FXo}mF€ÿù€ÿ€õÿÿ/ÿ‚ÿŠÿñ­Œ 9­€ÿù ÿÓÓÖØÚÝßàÿ =CWqnFV”“ƒwÿ$,<>aytoi€ÿ­€ÿP3ÿÿïÿ‚ÿŠÒõû€ÿ :©€ÿû“ ÿ ?G[z“o™™Š|vÿ67)OrsijT€ÿ _€ÿŸÿÿÉÿ‚ÿŒ`×ù€ÿ뛈  :¨€ÿ ý˜  ÿ CMb™§¡’yyÿ9->€ÿ7,/ñ€ÿëÿäÿ‚ÿÿóû€ÿø¸† aâ€ÿÏOÿ />=?p€ÿ 9Hp~‚‚„\8PÿGEFBaXK"€ÿ3)+¯‚ÿÿ‚ÿŒóÿùЈ   fä€ÿÍEÿ$66@pŒÿ aelu~‡YJQtÿE;6RsW6)3€ÿ0)!b‚ÿFÿÿŠ‚ÿûÕ.Š  içÿÿ¥ÿ"+-AJ—ÿ I_dove†JKosÿ<-?ag236K€ÿ. 1þ€ÿõ ÿ €ÿ6X™¦›÷ÿÿûÜ6Œ € oé¥ÿ&,16q‰• ÿ aX\imfM]qt7ÿ-3LK*23@W€ÿË€ÿ¯ ÿ ‹ÿ÷îÿìLŽ   > ÿ,(5K}Ÿ¬ÿ [QYknUo`EqXÿ4BC.,JXQ€ÿ )3v¥œFÿ‹ÿï¡k  € ÿ/#Lj†˜©²ÿ WOXiDY_pwayÿC8"4H>I<)%:ÿ+‹ÿè”Z   !)/6:!6Sw’§µ}¢žœsYR]V?[XQWˆtWJP=',DD6-<2-09E=/%(=PM2 -¢ €K&.8B2/El„ ± ‰Šµ™vd`O9Or`ZX€t]U[W2!>E-+B.!&1>A80( BLPZU-  $¡\   #,6CM6Nn‚˜¬†ˆ‹¬¬”s]@EpqHL€zb[oH.4&A<.*E4,-)CIF7/(!$OSR]ZM=&   ]    )1=M^izˆ—§¶oÉ¿¨’ˆa`JofPVtveUhDUE.B; ,A45ABHTM=1!#,,ZZ^d[NEC:&  Ÿ^  $,7GRN{‹›ª·•Ž®¾ª™{‡ZXVeXziWmn_.6F1,!>2"DFIUN<2'19Y]`g_PK48;6%  ž    '/?L6Npœªµˆ„ÿ7þôÞ»sCZthVgqB/>HQD/WÃèúúíÌ“E&$6:[]fh\ROH=g¥ÏéøÿöäÉ©{O-     #+5@D;€•¤±¬µ‰ÿÙ~`OaoG0,FINP¨û…ÿû”-OZ[gh[SQLí‰ÿ+œ     &/>L]rˆ®»ÂÌÿøõùƒÿ öpRbW-,F51NÙ‚ÿûû‚ÿ ÖGPVbeYUHĨÿýöƒÿ#œ    #)4E?L€“¥´»u®ÿ878LoÉÿ ô`8+1C;B<Ѐÿõ—R.%9ô€ÿÒJQTSVH8Çÿ Äj9).5;EwÃÿ) ›    %,>2Gn‹ž¯¨uœÊÿ<:1=2:‘þ€ÿµ+)6<33€ÿ îY6*$3ë€ÿ“?EL68œ€ÿûr&&,36ó€ÿ~(+2;J^sŠ‘F  ™   %-=5OuŽ¢µ¤¢ª½¦ÿAA+@daOOç€ÿƒ& &2o€ÿ Ò5'" IRQØ€ÿo$1€ÿØ/07F]uޤ¹Ç¹G ˜   )6FRb‰˜­»¯r²œÿACGLbXVb¦€ÿ¸*1²€ÿ ˆ(#*MYaa€ÿ $6´€ÿŠ6=LlŽ®ÂÏÚÞàÃ;—   $-;Ri~“¤§ÄÉÊ»¤—ÿ;DMVUWh`Z€ÿÞ"'(Õ€ÿ R";H]gj^y€ÿÏ$-8Ú€ÿdCPn•¼Öà€â éê½,%—  '68PuŒ ±¢À̾¨™wÿAAFJPfP;@€ÿõ %6ñ€ÿ 16Q_hia]`€ÿï+.8ó€ÿUUm“¹Õâéíçäééê¥ *–    $..5Kƒ™ª­€’Ưž”gÿ37:B[?C76€ÿþ$,;ý€ÿ 1K^kf_`\3€ÿû-/8ý€ÿek„¦ÇÝêðóï¾ÍÏãÚ|'•   )62I{§ªmޝ¶¤–Œhÿ836NQ@>@J€ÿøIý€ÿ $EXheb`I1:€ÿû.1Eý€ÿuwŒ¯Ðåðô¹Ä”wÄÍâÜ^  &”   ".CDZ†Ÿ±¤zü©–}fjÿ3,=JF"8F>€ÿä-9>ð€ÿ 2+;P`baa_^5b€ÿî5=Uõ€ÿ†{‘µÖëõžž¯‡¬ÚããïÕ=(”   +56[~–­¡Ã¯¶©›‹`Ttÿ,38B>=6.f€ÿÉ.137Õ€ÿ W3@PY`QRd[Y~€ÿ×CLlê€ÿœ|“¹ÙïõêdååØ¯Ø¸íó´")"“€  $13:l“§´v Å°ž—[Uyeÿ1$37;.1:‘€ÿ /+/+¢€ÿ ‰9ALZUDCR_b¥€ÿ¹Sd„Þ€ÿÂ~”¶·êëèÓëåÌàîëˆ)"’  +1.g†²„~Æ»§˜lOmj>ÿ3%!07+<=é€ÿe*($m€ÿ Ò8=FJ.FaghfÝ€ÿ–fv•Ï€ÿô†‰w^¾ãëñ½¢ä¤§éèîõåY &"&’   %20R|•¢Œƒ°¿­Žf\liKQÿ!#4>/6Ÿ€ÿä/& )Fó€ÿm84D7Y€k›€ÿõztƒ¡Âû€ÿ½DF|¶éô¸Ë‘±óîëëíöúÒ/ -0‘   *5:m‹ ¤tɱŸz_noLWaÿ'4??žÿv$ &/X©€ÿ ïYA:\jpnö€ÿ¾}|®Ìêÿ¶€´ŸÅ–ˆóÏððôñëíóúû¡,$/   $3=i€™ª¶¥Ç·¥—[awTDbTÿ6;>g˜èÿ ½'0ETejÚ€ÿöœg^i‡¿ú€ÿéŠ}ƒ¾ÙÓäÿöל›À›íðøýÿîäãêõûõd &&3  +.Vz’‘ˆÊ¼§’r[oTTZVUŠÿ Æ.+=PagjnÙ‰ÿ í—‚“°Ï㤀ًÿÝÏÐÝíùýÕ.)&8€  ',9nŠ¡Ÿ‚Â홀rX^ZVRYˆÿø’'4MZdl^Ih®þ…ÿýÒ“†„‘©¾Õåç°Ýßõˆÿùô¿Ìâôþþ¦).   &/`™­€¿±¡\gznobXVVJ„ÿFù伃;!#4HX`adFn`szªÓðýûïܾ—Љ‹‘¹lŒçØó¹†œÆéöýÿúñäѶŸ¡°ÉçøþÿöY 4(=Žo (>OqŽ¢€‹Ä·¤ŒSqON\XSRG65:& ##*0.,!%>LW_`kqPeƒ~tokhkpw€„‹•Ÿ¤_z‘¯ö´¾’ɲЦ¤œ—•““”–˜˜©¾×ëùþÿÿÍ#<*7<  "&Gh‚¦¼Å»¨‡]unLYZS[N@<<("*'$544.%!3BPX`gjtvƒ†‰Šˆ€‹$Ž‘•›¡¨°“n±·ÝÙ§íè×ÓÇ¥½±¬§¦¥¦¨°¸ÄÕåôû€ÿý‚ /,:d  '2Qy•ˆŒÄñžƒiuLO[RVR>B=*'81&6@?7+*4KW^_gOW{ƒ„‹“›¤ª­±´¶½ÂÃÆÊѪ¸öÉ´“Çõùúðö¬àÝÓÐËÇÄÇÏÒÙâëôúþÿå6;'?Œc !,GmŒ¥œ’¿°’ˆˆ|TLZSYM06A@6=7;BHG>/&/@SX_eYDMT‚„‰‹Žœ¬¸ÂÉÐØÜÝÚ´—¼ëõ§Ü•¦íóû¡ÐÿþóÏî¯ççéêëîðõùûþƒÿŸ&,6Œa  (3\~’–¹µ¤y^sng[RWQ-4110."*HV^dgpKN}†‡‰Œ”¡¬¹ÊÕàéêêâjʧßôµÞœÐùûÂûÿÿþúûÑÒúùùúúûûýþ…ÿñH 7(>‹W #0Ouއ‡²µ¥„ƒjUP[SXL27@,47AHRPN?4*/MX_ehUwgq†ˆŒŒ•¡­»ÄÖåêâßâëܶû¨±¤úôûÖŒ„œðþó¶—ðÿú…ÿ×ûÀÆúƒÿ®%,3‹U  &Bg„‡ —¸¨‡^jm\OUXRM86+3<4@PPM<2,8OZbflR`t‰Š‰Œ—¤¯¾ÉÖâèîÆµôúõûœÕÞýñޤ¦¯û¿·±°¢ø‡ÿñþ褄ÿðH / AŠR &=Wz‡•¹­¢tb[AQUWT;A@71C;4OPL96,5R[dfkRSˆŽ‹ŠŒ•§²¾ÌÚâäÜÆ¦µâð´Íûøîý¨¢‘°Ñ⾆ֻ‡ÿú¥½ÿÿÑþÿ þûôî›&(ŠR  $Hl‰u‚®¬stnTPVWWB34>?C69NOH215KL\dhaGU€ŒŠŒ’– ®·ÄÓßã㟷tÌê–˷ôí¶t¦ÐùêÞþýªÿþƒÿó˾À~µƒÿ ýôêâØÐ¿< 2(‰N  !6_}Œ—§¯žq{mWRTUO8:901@PNMRG7+2ET^dkaIa€Š‰‰—¤²½É×ÝßÞÚ†¾É‹‚’¨ØØuw˜ÖýÍ~ëý†ÿã×”û˼îÿýôçØËÀ¹°±w!‰P  %Rp€k’±¡jo_TUTT;/364/=FLZam\So‰‡„†Ž˜ °¿ËÐÇ¡ˆ­Ò‹C@®Íëû€þ"·úrËÿÿêþþýýúóç×Å´¥˜’‹„}utvy‚|! ˆu   Hfy‰™¦qk_EZSU<0674F69OO<314KROJ9 ‡%&Lfhkž˜‚pGPVVC-:63@;ESK:-,@T]e[y‡„€†Ž˜¦·ÇÍÅžZ" €4%+*|ÄÚõùøööôêØÄ²¥—Šzne\UQ:G6<,2KRNF<‡v-E^oq—–hyhRWVK.208G-?SF6:7FW_iebu‡ƒ‚Š“¬ÂÌÍ¿ŠW!%)*)% )$}ÐêóôñçÕÀ±¡“‚tg[RNB04?/6F2OROI>6&  †v Gi{Ž–ŒdfSTUUM,4.,J=LSE584KYahVrr„†‹–¥¶ÅÏоŒK*6FBFHGD@6+0&%aÆäã͹­Ÿ‘€oaTK=6'&5!=/5JKLJFD>7-†€t 7z“’~rZCQUM=3-0H,DSA5-8L[dfU]}‰‘˜ªÂÌÖÓÀ‹G"",A_q~w{tk_UK?,'U¨¬¦—‰zi[O@4+&$$#)6,AEDFHC>6/& …€rN†ƒsSOLN28<4F.LR=887P[i_nd€‚‹”Ÿ¶ÇÐØÕ¤‰= '1Ea€¨¿ÍØßãäÚʲ˜dG.& Gwzp`QF96%/((-65<B4NG96,H[fhb~y}‰›°ÃÍÙåÑŸŠŒ8 )14;6FWe›±±²½»Ò×ÕÕË»ÍÑÒ‘”~jZIEA30*20 %*))''$  „   „ W )FLEPE82EM]mkPj|†‘¦¼ÉÖßÙ¿–‹; (,24HXgnž²¿ÌÓØÜßàèëíîîëãÑÉ¢‡k`T?BNCI3; "&%#  …   „B  &JVE9,4O`oaOs{‰™±ÄÐÝãåÙ¡±‹@ '1;?Ie}›µÆÐÖÙÜÝàãåéëí€ïíèÜ»“‹~aMIOGG;--F €  † €  „ B";:6CVbjtgr{‘¤¼ËÙèê±Ñí¹J '3BFTn‚™²ÅÊв°¥ åéôöÞßÙÜßÜÓѵ“‰‹ue€VOHaJF"   € … „‚Z;M]ikRjpsˆ—±ÄÕâî½Ø½Ñ™“V",7AHUhqz‹ÂѽÑÃ̸ÇéêôöçÞâÝØÓ¾² ‰ˆ{fa^^`TOm!$F   €  ƒ€  €,Unp`aUeФ½ÏßîèÑÃ̹ÄV (2877@T|œœÍÝãèéê€ë€í"îîíëêåÜÆ®’ˆjfa`bVHe1/(    €ƒ€ ƒ €9  "jngV`•±ÅØéôÕÙÓÊå°Œ` %-9;;EZ¢¼ÏÜäèíðñôõööø€ö%ôñîèÝÐðœƒpdifdQ8U+,  „ ƒ+ €R)pty¥½ÉËïݾÏÙ»ÖÄ®| !)5@HRd~˜¯Æ×âíïöîØ¾ÏÕÝÞÇÏœÞýûøóèØÅ°œŒygkjgQ=>)  ƒ   €N<•²Å°¹çϰ¹äÖÏÂÊaG &-9ELZo‰ˆ¬”Éç»—¤ ”·±“â´¨²„ôýýûøñèÙɵŸ‰tp_fY@6* ‚€ ‚l , iϪ¯Ý޶ܹäÞ¸Œ^  *2@;FB_lzn¡¹èÚ¸ÕçßåçûúÕøõõýþþýûøñåÖì•qgfWJ>1 ‚€  ‚= 4 ªå˱ñߦÐÉ¥ÃÊmL ",8F64AZ€¬¥ÊàèûýûøöõôôóôôõöøúûøïâÏ· ˆvhbYPE9& " €ƒ7>  /ÜÙÙÀôÚ°¸Ë¿œ]%0=HM[i„Ÿ¶ÊÙãéêêëŠí$ëêééåÝ͹¢‹{mdZVKB72&(# ˆ‚>I1-'  ^í¹×ÐîÒʬ§©3&2?IS`sŠ¡¹ÍÜäéÝäííééíåë€í%ÖÑêííîëêãÝϹ¢Šuh^XSKE@;7:*‚di: P'©í¦ÑÜà½Õ¢^&5>KUdmw¢´Ãµàäêè¹°€‰ÂeÜííéðý芜íçØÙ•„‰zk^ZUMDBE?A1'€€ €!€ # †Z%™:#W"6åàªÆñÚžª}&6756EPjemˆåäùé” °¨ysßííèóú䈸•èåžØ~›`zk`[UQEELHJ2,$&*‚&'&&'()()+*))*)()&&‚ <´)79 €d ƒõؾ¼îÒ–p*W/,689 G8 "ÆÜÞÚ×Ë­`&F,kÚbb•m::BVW^}“®ÊÙäãÏÃçèé‚êçé€êíå­±˜ži^RaaZJ\lN^VT,?LMMH€I‚GFGFEFFEECDEFEED …UbªK" tØÓÄ®g7ŒtYéÞT`²FAWIOVhz¾Êß঩™§–Ç µ­ª¡­åàó謔h~kSEJ]dq€y{binY&DQPJIHHGGFFG…FHHGFG‚ ($®U €S02'ŒgJ,!Jï±çöà\|ß±badu{‰„¥·ÉÏ¢u™Žys qÊŽZ~¥ÜÙçÖ°Ÿ‹‡ƒtX^Zo™•‰vivlH#EOQHJJIHGIG€FEAACA@FCF€„s"'F˜,  32$&&* ($”ûñùöäu’å¶eajs~Š•¡¨°¶¼½¶·•®½®®¹¿ÆÌÉü²¥˜‡udXQZ’›ƒynqzg4+HONHHGGDBACCDEFIIH=46>1:?A@@#€ƒ -ªûøøöè½’F=FRbuuˆŠŠŒ‘”•–€—&˜˜™—–{jYG=8=h–qFs‰†„e>'DQRJKJIIHGGFFEE€DB9210/4;<>=2€ƒ€2FB'&0-,9F@?8A3§öùøöõʦçÇ_97LbNMQV_hnsv€yvsph]VRUVSLB9S‚lGp¢¥–~L'7KSKIJ€IGDA>952321257;@BA@??=<€ € F",€ :866BDFFGCA¡‚ø1ä¶åë‹LJSUZdiifhfggfgkrvsk_SJC:64>Y`O‰¿Í»ŠS1%DHN?:8679=?F€E‚D BBAB@=<>  „W0)  ?:=BAEBCFAFN•ôùùúûöÒãøÄ`GK7GJNOOVWWVWV\[VKJE>81+.5RgŸÍåà§Y?,;DFEIHIHHG…FEECCBCB@A?>;? ‚ …0€H BCA?B7<@EHJYX‰êððøûýñêöó©];;96CF0.PPQQRKGB=6.& +[¸Çèô²^F&0GOTNMJ IHHGFGFFEEFD‚C AA>?:@ƒ…. >Aƒo5LLJIHJNQXeilmosªðûýûúøôôûúïÇœlI:50//,+&%"O¥ÕÚ¾Âéà©S=++CLOOPLKIJIFB>83.*&"$ !1@CAA@>=>€ €   ,NLMLLKIFFHYX€YOXzÉõúûýýûýûúöùñ¾Q6) %;q©×ãÐÉÖàÇ>8'-CLNKQL4( )>CBB@@>?€€  €%JGEB@CFILNR^[\ai`\|Æóúûû‚ý0ûëµuG*#9Vy¨ÕêÙÖÖÅ™d@8%1DJKKOMH)  € &;CA@??>?€€…   HHFGG€H6IKJNYRQQTTMCqÅèøúûûõðõûí¼vA(",L~µåùóãѽ—fYM-#8FHJLLPIH+€  €  &:BB?@><<=#€€€€r FFDC61FKMGE /Cs¤ÂÏÊÇÖãБM4.5>?3 'FIJKPLHFGG-45898,,%)**,. #8A@A>=<>$€€€€   € €E6D61EFHME +8<33+))" )045&EGGNLG€E!F,  6;=A;1/5799:8 "7@>?><=>$€€„ € €FEED6€ 1€F&HJ *>F6:?@(=?;742. ,34013665 &DFMJ€D#CDC*  /58=931#  "6?>>=;<>$€€… € €/ EDBB4 "DEGFA.?D9& EIJGHGD )=A<6+€-& &FNHEECDDFD) 57;<63/+&%')* !6@>?;;:="€€€;    CBAC3 &EFF> 6/.//-EJHJJIF $*(,), +MG€DCB& € $$#''&'&( & #7€>=;:>€€€€€  &€@2A/  AFF< =CE?? GIIJHIF 2:797:; .DD€C%BCBCB# ,523253566$7>><=;:>€€€E   +==?>,-/C.6=FF9 65=DE %JLJKIJE /,467;:+ED€CBBCBB! € 0.+00.2564 $6>??<:9?ƒ€  09€:/&%'66A&5:FE5 96:=@ 1QMKLLKE836:=>@ ,€DCDED€C .0.34€654 &9=<<;89=€‚€ €A 23465!$-18763>DE. #$(-/ ,PSONOOF:59;@=: 1FDDCC€D CA 7,-124€62 ';>><;:8=ƒ    /2+,*@BA( ‚ -IIJJLL@ 6EFDCDE? 3.0//63 )=??=<:9= ƒ€   €-..)+(&:=??"‚  2H€IJJ2  ;GHƒFE@   ,€>=€:9  € €   …Ø‚ €€  € $Õ  €3Ò €    Ѐ  €  €<Í€ €  €€   DË   €€ 6É€€  €   ""2Ç  €!&,3:.3Å  € #(1;DMRF#  5À  ‚€ €!#%+3QpŒ ¢pz’²ÿJK]osL€ÿ€ÿ›Äÿÿèÿ‚ÿŠÿõ€  € 7²ÿ¦€ÿ  &,4ÿ =ARq”lt‘™½¹ÿNKYz„~k6 €ÿ@€ÿÖëÿÿ·ÿ‚ÿŠÿÿûØŽ€ 9°€ÿ¦ÿ  '0<ÿ ?EYz–¤|sÀÀ¸ÿ:Car|‚ƒrN€ÿù€ÿ €õÿÿ/ÿ‚ÿŠÿñ­Œ ;®€ÿùŽ!ÿÒÒÕרÚÜÞÿ BG^€Sh±Â»·ÿ:Ga[w|vo€ÿ­€ÿO 3ÿÿïÿ‚ÿŠÒõû€ÿ :©€ÿû•#  ÿ CJb†¤|²Â¾¶¯ÿVU=_|ysqg€ÿ^€ÿžŒÿÿÉÿ‚ÿŒ`×ù€ÿ뛈 8§€ÿ ýœ% ÿ DPg†¥»À¾·°¯ÿWAH?uurfa€ÿ4.€ÿï™ÿÿYÿ‚ÿŽ:Èù€ÿè—† 2¡þÿÿþž&  ÿ  )&/ÿ FRS[œ»»¶¶±±ÿGF,brvjap€ÿ:(×€ÿ1íÿ×ÿ‚ÿ<Éù€ÿæ„ +Ùÿ „ ÿ&:ÿ KT=t˜»»¸²Žoÿ4-Abqkfqv€ÿ3.™€ÿ}0ÿÿwÿ‚ÿ’®ÿöƒ h߀ÿ ×U  ÿ$36IMÿ O9F~¨¶¶²±ŽˆÿF6Pbift|L€ÿ2/^€ÿÓÿÿ,ÿ‚ÿÎò€ÿô¤„ i߀ÿ ÓO ÿ.0,;eÿ T:L§²µ²œqÿ6DO[bq{ZS€ÿ5,2ó€ÿëÿäÿ‚ÿÿóû€ÿø¸† dâ€ÿÐSÿ#/16arÿ 6Fr¢¬±·†U}ÿECJRi{[_3€ÿ1+1¶‚ÿÿ‚ÿŒóÿùЈ iä€ÿÏGÿ(,6_mzÿ X^sޤ®²}p~©ÿD?DZpZF@D€ÿ2/,m‚ÿIÿÿŠ‚ÿûÕ.Š  nèÿÿ§ÿ#5@ku‚ÿ D_tއ¯ksª ÿ@9G`jBMJS€ÿ4*Fþ€ÿõ'ÿ €ÿ6X™¦›÷ÿÿûÜ6Œ qé¦ÿ!&,Vm|†ÿ \^pŠ‘ˆoŒ©œEÿ9>NN7NIHR€ÿ++Ѐÿ·-(ÿ‹ÿ÷îÿìLŽ @  ÿ (;asŒÿ ]^p‰v¥•bˆZÿ=CF=-?TUP€ÿ $?F€©¡ža1*#ÿ3‹ÿï¡k  ÿ#=I€ÿ .+:HPKFF9-&,7ÿU‹ÿè” €H!%&)*>Xn‹f„ƒŠvjiwrZˆh^„ziZTA2.@ME73HF*D,=AKOTWH('.:FI4  Z¢[ "(,#"4N`s‚zko™‘zzhPs¢~bY|qia]?&0IH00O@/58@DFJWbS&+?FLSP5 !P¡ N!)16'9P_kydgn‹ž˜“ŒtXf —UM}unvO:N6I?0/QF?D=VQLKYbR,&&KLNUUVO7 H N  %,6ALV_iu€Uk™¢¢Ÿžu€n¡\Yu~woqIgdDN>%1OFJ^[Z\VR_PR,;-NQU€W VZXC LŸ^   $(387U_jryii„˜žŸž’ }€uy[|ymzwpFMS51'MF3^^[]ZV``>"=7MSWYZ\\FVhqR $Pž   &,4(7Mgpw[„ÿ7þøèÌ‚F]yvlu{PF[VTF6g˜ÇêûûîРr\;;>7RSVXZ[^^YÀâñùÿöäǧ{]N  #*--.Ybksr{‰ÿÚkdnyWFAVNOX¯ý…ÿý¢ 5EKRWZ[_`b¤ñ‰ÿ>œ  %,4>NZfnw|†ÿøöúƒÿ ø~^miB@W:5TÝ‚ÿûû‚ÿ ×BELSW[]T[Öƒÿýùƒÿ#œ  "&/+5U_hq{Pwÿ?FNb}Êÿ ôiE=FTEGDÕ€ÿõœV6IUAL²€ÿýZRPQTXX9   !š€€!'$-AT^eYWkr‹ÿ0AOKK_[žÿG344-Sñ€ÿ s629B8!,*p€ÿð@?6PLö€ÿ¢XQPT\gnqo? -™  $+$6LYakaen‡ŒÿUQ4Dila_è€ÿŠ,$,A{€ÿ Ò729A3'#CHIÕ€ÿt$1K¤€ÿäZQNUds|Š‘ŠB  3˜€!'05>T]fmhJ‰ŒÿRMJRnlhp®€ÿ»"6@¸€ÿ Š27/,%0FNRR˜€ÿ¤&;fÏ€ÿ¥RNVjy‡Œ“™¤±¤A 3—  #)4ANZabpt‡ŠÿFFO_hivqi€ÿÞ+21Ø€ÿ \76$=?SWWXz€ÿÑ=Shç€ÿwMSdwƒ’› ©¹ÉÓ®5'—  &&4HT\b[m{†‹wÿEBJYdt^MT€ÿõ')@ó€ÿ H2 6FSVX]^f€ÿñITjö€ÿ`SZl”Ÿ©¶ÃÏ×ØÜŸ&$0–  %!"/NY__LV|„Œlÿ6=DPhKUKF€ÿþ(3@ý€ÿ 0.BOWX^`e>€ÿýMT`þ€ÿYU]sœ°ÂÌÓ±ÂÉäàˆ%6•  &!-HR]]@Rk}ƒ‰uÿ>;AY]PQRS€ÿø*);Iý€ÿ &">LTY^_P;K€ÿûMN]ý€ÿXTe~›²ÇÖ§´yÐÞðäj&%/”  $,+7MY_XFo{„ym{ÿ<6FWU/HPC€ÿå0;Fó€ÿ 5&4COZ^bgpF†€ÿñLO_õ€ÿeWjŒ¯ËØ”ª‰·íôïõÖH !1” "IT]Wibo{f`†ÿ6;ANRP@4j€ÿÊ01:NÝ€ÿ S,6EQ]Q[v|‚¡€ÿÜOQeä€ÿ]t¿Õââfïõä»çÄóö¹, &H“  $"%?QZ_AWqy|ƒ\_‰rÿ8,=FK85>–€ÿ 13CI­€ÿ ƒ.7FUUJNm„޾€ÿ¼RVgË€ÿ´h€¢¨Þéîßúú¨‹óÚñûó‘')V’ "!;JU]GFmty}gXzuCÿ;,,>?,AFé€ÿf1:;(s€ÿ Ð08DL5T}Š’ç€ÿ’SWkª€ÿñv|q\Âðùû¦ꩰúûýýè`  %N’  $ 0EPVJH^ousZawrQXÿ),;@4A¡€ÿä665)/Bñ€ÿ j66JFoŠ‘¯€ÿô`S\r’ø€ÿ »BF¾ôû»Í“¶þý þúË7))i‘  #$=JVV@Rms{h^uuPZqÿ$$,7CGŸÿ}4,,*,LŸ€ÿ ï[FHrˆŠ ö€ÿ©UVfƒ§Øÿ·†¼¥É˜ŠùÖýûûùøøöùð›,Do€ #%:EQX\VipvyXh€[Kngÿ?@?hèÿ Â6&&1?KUXØ€ÿö¢ws~—Äú€ÿß`Wa|¡¾¾âÿöٜƠõøúþÿñéêêïôêh  ,p  0CMMLGgkrqe[rZXehbŠÿ Ê=&,9FQX\hÙ‰ÿ äo]dz™·ÓŸ‚Ü‹ÿàÏÐÝîùùË6 (=„  #JU[^Fohw®ÖðýûíÒ¨rdis¬iŽñâù¼ˆžÇêöýÿûóåÒ·Ÿž¤´ÌçøýýíZ ,3ŽX '.=HREIegliLmROgi_`UD@B'!&!&,246.()9DMVYgnTkˆ‚zrhaZVX[_hrŒ•]z”´ý·À”̶‘­©Ÿ˜–€•—˜™Ÿ¬¾×ëùþÿþÅ(6Td+9CMV^afh^PllO`g`k^MHC+&-''66:=2&&2IFJ`eehg`qOVj`fdJNF.+;2+;DGF<&.3FIRY`MX{‚„†ˆŽŽŠ†‚„†Œ˜¥­¸ÇÕ°¾ú̶•Ìûþýñö¬âÝÕÐÌËÉÊÏÒÙâëôúþ€ÿý×; 8AœŒ€_+:FROLbd]frtURiai^=CHC=A7AFMQPC/1@LOV[VEOU€ƒ„†‰ŒŽ“— ¬¶½Æª™Àóù©ß—©ñøþ¢ÐÿþóÏêééêëîðõùûþ‚ÿø—.yŒa 3?FDN^beWPhllhaie8=856@J8QUXQ@),HOSZ_iKOz€€ƒ‡ˆˆŠ‘›¦±¿ËÒØjÍ¬ãø·âŸÕþþÞžûÿÿþúýÓÒúùùúúûûýþ„ÿþçK.<™‹W ,;EDHZ`d[g_SUg`g\=CG09;ANWY]QE22KRX]aRtfn€ƒ†„‡Œ”›ª¼ÊÉÑÞïâ¹ÿª´¦þùÿØ„œðþó¶—ñÿú…ÿ×ûÀÆú‚ÿû¦,l‹0'6BDRN_bYL\e^Ybgf_FA/9?6ETX\O@3BED:AWYZC<:MKW^d^ITw€ƒ„„‰‘›¦µÂÍÖŸ½yÑðǛлøð¸v§Òúëßÿþªÿþƒÿó˾À~µ„ÿ ýýûúöÜL,,‰M!2>FMV^`O\^VXadaFFC46BTUU[VG57HTX]faL^u€ˆ‘”œ®¾ÉÒÜâ™’Õß™œµîë}|œØÿÏî€þýƒÿã×”û˼î‚ÿþûúøöõóê” U‰P-9?9L]_VP]YZbaeF:=::<@KX\UG92LU[aeZXlu€~Š“™§·ÂË͸”–tivufhJ0?es±í›Â®¿°ýþþƒÿƑߪîéøÿþýûùøõôóñïäÃB":ˆN&6?:E[^`^WRQa`bRI>./CQ@V]RF58PU\Zha|t~~}€†—¢±¾ÇÍ»‹ŒqF;tÂÊõûþ‚ÿùûÿû±·ûþÿýûúøöôóñðïêàÒ¿r.ˆM#/:>:X\]ITb[``fXBAE6=:FVZMCYXJ@;DUY_i\Pt|{}†–¢¶À±„¥‹@   eÏøù®½·¸ËÂÿþûùøõôóðïîîííâ̯›Š‚uD "‡5&0:7LX]UH^HT[dXA>05I?MYWH9F?T[`qW[|}{{‰‘›¬¼ÄÀ²É”&€   F±„—µëÖ‚ÿþûøõõóñðïîíëéß·’t]|}qhN ‡;+67:TY]\[FU\`M7E;6BBO\UF65HW\f]z{}z~†˜§·ÅƧ‹2   &„Úâú‚ÿûöôóóñïîíëëèÜ™ªywQNdh_UI# †9!(3:60KCUYPAD56J5LZK?7AS\gjY[uyy‰‘Ÿ²ÃÐÙÕ©b  #-9@??/(#   `âéëííîíëêÞÀuj\dtTrld\VOG?83+  …+ .V_\NQTV;BB9I7RXIFDBY`laqayw}†˜§½ÊØÝ´¦W€ C/Qw“¤·ÄÄÇž¶¤“mS6$  \ÖäêëêêØÍ’Q¨}uŠtune^VRTE9/&!   …€qCYVLT8:5?OBPUG>4HX`g]qpty‰”¤¶ÅÕâÖ§S%.=>‚=%! €#0ÜÜÚÂñ×®¶ÇÀ¯} '/??€> @@ACAB,‚>I373 aî·ÒËèÍŬ±ÉG (1@A5&)"6,046;7=BB>BAABBA DDEFGG>‚>b6a2§å¢ÌØÝ¼Õ°v& (2;Qh‚’—¿Ì×ÉóûøûÊÂ’›Òsë€ÿ8ýÿþ—ž©þýíí¡›Ž’}gRHA?CLE64&>8>@@ADDCECCDDCDDCDEDDFGIIG‚‚9€4'j+3ßÚ¨ÅíÓœ±˜+ (236=Rayt|“˜øýþý¥°¾¶‰€í€ÿ"þÿþ•Å¢ùý§è‰¢i•iUIA?FQJ@>'AFFIHFHGF‚GHF€G FFGHKMLJƒ9!5™&CI%  ƒðÖ¸¯ØÀ“‡B &459BWnŽ“­¯¸ñýþþçèåäåЬå‚ÿçö¶ýýùî̘›•}iUIB@FOPHE+FL€KLKKMLKLI‚JI€H IMOOM0„2%VM2 !Ëм·µÃ±ÄaV]$2>J\m€•­ÄØéôûýþýý€þ€ÿþÿþ‚ÿþûõêØÃ©‘{eQGB?HSSQK2UTRSPP€ONO‚ML KLNPTTQ@…. &‹p%T-jͲ»Ç´fTYDA68JXkzޤ¸ËÝëôù€úû€ý€þýýþýûøïâй¡‹waOD76EP`XJ/[WSUS€RQRQ€P€ONOONOPRVVUN †3$-·:VE& ´ÇÀ°Ÿ‘‚\"q–Úl@œ‘=/9E_djˆ¸×èïñÝÑøùú‚ûøú€û#úö¹¾¤©‡pfTZG9!2LFYB9#JRNPOOQPOPOPOPP„O QTXXVT…WY’[+^¢“‚vgW?" ×ýï~lð¹_=@]RV\l€ÉÖÞã°¶¥´¥×¯Â»·™®¹öõßà·p†qYIITC96IrjfP9!LQMLM€LKN€LMLMMLLKLNORSUTS‡ -"™O €7>€Fjk\Q93A=Lîúÿé±»ýç‡Yej|€Ž‹­¾ÉЬ€¢™¬}Õ™fˆ±êèÓÝ»§“‰z[ZH?H`u}vrM-&HNKIKIJIHGGHHIHI:@EQPP €†T",<ˆ4 8J>GHM:C5“ÿÿýîßéþî]ep{†‘›¦°¸¿ÃÆ¿Àž¸É¸¸ÆËÓØÖÏÅ»­Œ{j[LBF^ywrsiA /GJHFDEFGGIILOONHCED2?HKLK(€† E$j@"€% NE9.87BC2¬ÿþýõîÝßÇX`kr|ƒŒ•ž¤©®²¶¹¼¾ÀÂ%¾»´©Ÿ”„ugUH,1FMLO<ª€þ4øãØË·j>@JVgv{†‰Ž’—œŸ¢¤¥¥¦¦¢Ÿ–Œ€o`QE:6Jn€g[gqpE+.IQOKL€KJ€KIIJHD@=659DFHF9€ † NE( D.>:6CNGFBL>¦ûþÿøíöóé™N;;Qh\X\agnquy{}~~zyrhd[ZTOI=9Qz‚{[`unT8%DNTONMM€LJFE?<€988;?CGHIIJHGD€… G% / K!HEB?FGIHKJJûþþöíñýñ·gJKTZ^``_^]`_bdfhnmha]UNH>66Rj|t„tˆˆ^=)0KMPD?>=<<;=?BF…JIJ‚IGF € † 9,  €DHBDFDEDDH@N[•øýýúëëøñÅLHM8LOTQNWWX\YYd\PMG?6//?gg`i™—uD6 7@FHGKLMLJLKJKJIJ HHJIGF € … 9€GHHFBE>BCFEPbiˆêóñöíåðôÖ–U@99:5<=+,HHDEE@:62*(5\u[D[¥·²§yF:&=MOUP€MLM‚LKJLKKJJIJ IJJIGH€… 3@BNMMKIHLLMV_ktÍøùúóåäêà®iD89:>@><7651.-*'&2Pj_?A¬ÉͲA8)6JMOSNNƒM€LKLKJK€JKK€JIKIHG€† €@9QOMNOORTV_fhqy}¤åúûúîâÜßÉ„C%%-.,,(%"#%%+5BIF=Oz¯¿ÑÒ¦q<<*6ILOQRNN€MJGD>750,(& *9FJIIJIIG€€†  € .QRRQRQN€JTZUVY^an¡èúûøðçàÏŸb:% %,6E]ƒ¬¾¼ÍâÖ¨Y/6+9JPPNTO: 1EIJIJJHG€†   U&PMKGFFIMOSU`\Y]eiep±íúùïâàÖ¼ˆT6--127B`‡¢ÀÊÌÖÆ¾ÓÕ¿E/6+>LONMSQL/ /CJ‚IH"€€†n  LMJLMNNMNPPR^WUSXXVLg°Ýõë×ÌÓÖ¹dZem€—½àíéÞÌÂÉʵ’Z0/,.DKMMOOTLL1 % .BJIIJJHG&€‡+  KIJIF631-&JRONNJ&UŠ·àèè€ê$çÜÑÉÆÍâëíç×É· ~YJ5(&EJMNONTMKL3‚-B‚IHH*€‡  FGFF:€C7RNJIF'>S€´ÜçíôöøøöóåÚ̦€dT\S,,INNMNSOLKK45768897 ‚,BIHIH)€€‡  DEDD8€V6GMOGD""#-@gŠŸ¨±À¹‰\I>8DIK@+.ILNNSPMKKJ59:>??54-23357$,AIHIIHHG)€€‡f   ABCC9 4FFIMD-8<5#!":?K]lzh= (+&&+48::-HMMQPKJIIK4=BCGA77<=@AA?$,@HHIH*€ˆ €[ @@?A6 4DDEFI,=D6:>?+@DA@>=8)6>=77;>>;-ILSOJIJIIH26;>DA;9,,+,(+$,@‚HGH(€‹ €\ ??>>4&ABCC>1=A8+)*# CFGGFFD/?BA;0)+-//KVOIIJIHIH0<>AD>:7301454!,?GHGG(€‹.    ??>>3'?@A; 81012- !BF$GD)//3445014SMIHIJIHHG.&-,,€0 113)-,AHG€HGH%€‹€[  &>?>>1  :>>7:?@;;$ADFFEFC6;;<<>@6HHIGHIIHHG+5=9;9<:=>> .B€GIHGH"€‹  ,€>1=/ -,;,16>=4318@@!'BDEFCEA417<<>?1G€H%GHGHHG(764898:>=<.AGIJHHGH€†   7@€?,*+43:&06==021468 3HFC€E@:68<@BE3HGƒH GG%676:;‚=0DGGHHGFH€„D   ?AA?@++2486408==,!#&(+,FGFFGHC:6:=A>>6„GHHF!>4589;€>; 1FGHGHGFG„$  ?@??@'!33100,<==(†,?@@AAB9 !9G‚HD85€6;€<:  3F€HIGHG…'   ?@€> '!260->&‚/‚> @.!Àÿü@ÿÿÿÿtjP.ÿÿÿÿffO.€ÿÿÿÒa ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕb7ûÿÇ9ÿÿÿÿqiP.ÿÿÿÿffO.ƒóÿÿÿÒb ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷©ÿÿ†AÿÿÿÿnhP.ÿÿÿÿffO.%™öÿÿÿÏ_ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMHÿÿÿÿkgO.ÿÿÿÿffO.A¨ùÿÿÿË[ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöRMÿÿÿÿigO.ÿÿÿÿffO.,L¯ûÿÿÿÈX ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿhfO.ÿÿÿÿffO."0Œÿÿÿÿñd% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgfO.ÿÿÿÿffO. TÑÿÿÿô«aK8#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgfO.ÿÿÿÿffO.EÈÿÿÿó¢cb_R>(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿffO.ÿÿÿÿffO.BÃÿÿÿô˜ILWZTF4!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwfO.ÿÿÿÿffP//¾ÿÿÿô˜B@INNH<. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëƒO.ÿÿÿÿrs`B+‚ÿÿö™A>GKJD:."ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ|.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ‡ö•54BIIC9."ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ-'O-)9BA9."ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞH>. %/2,"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`'DZdd`\ZYYYYXSH5" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb2CLMMLKKKKKJF=, ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb',--------,*$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷D ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè9 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ/ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùhtmldoc-1.8.27/desktop/htmldoc.xml0100664000212600000240000000056310063720627015556 0ustar mikeuser HTMLDOC Book File htmldoc-1.8.27/desktop/htmldoc.l_m.bm0100664000212600000240000000356110063126214016113 0ustar mikeuser#define htmldoc_l_m_width 48 #define htmldoc_l_m_height 48 static unsigned char htmldoc_l_m_bits[] = { 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7f, 0xc7, 0x04, 0x00, 0xff, 0xff, 0xff, 0xc7, 0x04, 0x00, 0xff, 0xff, 0xff, 0xe7, 0x0c, 0x00, 0xff, 0xff, 0xff, 0xef, 0x0c, 0x02, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x1c, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x18, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x06, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f }; htmldoc-1.8.27/desktop/htmldoc-24.png0100664000212600000240000000345010063126214015753 0ustar mikeuser‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs.#.#x¥?vtIMEÔ &4Å™ÙkµIDATxÚ•mpTWÇçÜ{÷îK²ÙlX² »Â’ðR´–´4 ´¶bGÚ2XõC«ƒø:X;ÕAf¢­vF:å‹­ŠÎ`ÇQ:ú…Á¶Žc[" $ oI !¼—f“ì&»Ù½÷žã‡ µŽß|>žsæÿ›ÿóüç<"hÓ°C¸ùÊ)¢¤¢è³ž«Ž Ã8¨¬=¾õâÿ(ŠFµmÛìܱƒÚXœ“'[éèìÀ,àø|<¶ñ!6o¸¿-*ûÕ“_ÿΟóÓcŽRê‡ZëÈ­u¡X,öuww·655Mú#BYUTÇ’I}æÜ9­µÖ^|Q'êuÝ}wéeO<ªÏt]ÕZkýƒÚ†Î„c5ëµÖýZk­J/”çy3½½½{ß})¤DšÆÇ<`D#K`–…ð-®'öø7›=Ÿqvxx8pèС×@óÁƒ·OOOŸ’R†S©ÔKG}0?0ÿ£/$"hãÅ« ~b-z­Í2¦òáí¦2-ÀòùœB¡Ð¹wïÞ×?þ˜Rê€æææg€%%€H)ѪÔ6-AÆ£øë±#~,_ 6À™@å§J6Ë—¯l‹Õ­]°cÇŽ ð'€X,¶´©©i5 L) ”§ÑºØ·{ûvïùŸ4¨lob aG@–l¹v°ªø{õòõ[ÇúßOÑ`š¦•H$âíí픆ëÁ‚>§/´Ñ>Þ‡å‹P˜pøògï'‹rÑft<ÛŸ¤níW"ýǎÇWܽéNß•R*“Éh‰4põQ°Îtqdê"‡/^ç÷—ºÍÌ-ÌÀB) çÁWr`×inÙÀ³-OW©Âäë£c›r¹\®­­m Ц’r¡†%ñ†'`.ÊåKžB&ÁôW#Téujeˆ•K“Ä݃ù-A5\¸p¡3›ÍÞ´©•Àò@ פpm#³Ã(±`-d`„jYÔЈ´¨#B¬¦fi‚ý-û† ›Íζ´´n˜Ò¿ßDÚ%€žq12óÌ¥ÇqBe Jç†?Ä'ï«ã‰ Âv)߲֟忂pãFßøö®Bçå[rFy¨ê¹ò†ræÖ9y¢ƒ¶¶n†F†På˜Bq[º\éëÁ˜Ÿä‘U Ô‘`fj†kÝÝŒ ‘N§éêꢿ¿<ÁÅöŽ`Áðõ œ‰å ºúɾš:Ô%ÉäíQT¨ i¨ú6ÖÅùtíRoôp¦µ•ñl–ºh »¾û,ŸJ-G›>å‡[“]3¼ÕýW~þÚÏz¥Q¾f|¨Ç5eØ!Tµ§[“C‚˜e5$ùꪸ9ÉKûÎO^½ŒÊd€‰.~ôý¯±óÇ/³¥ò!2ïŒp¾ï2oˆNú¼~\W­”zæàmQVÖvyÈê»±"1d,ÊkêùÒú&Ú®ó»WPßÀÊÇŸ!¹1J¤²@ßÀ5º^}•|ï Û‹O17—¡µp‘¹œù^×Ëýv.3û=ŽVjåy [·±ó ÐÔt/ç®õóò ϯYŃ_|žõ›Ã”Y.¦Ï`6ëðÏ·ÞäæÕ³t½×ÁøP­Á0ƒHa!ä§zzz•”RŽFñÛ!FNµRµ¤–Ñ|Ž#‡~ƒ›Ï²¤v5‰”¦Ü¯Râó‰Uij¬'l{*L‘Zì²øüK°ƒ ¡:,;R`±9;9EE$Ââd5398üë_rïOw3î<¼y i™ÍÞdF­Ã-8ý›§*KF@ýÚù°K޳Щ%qÃN¯2 ËÇHÿ‰å2 c #253A37", ", c #1C475A", "' c #1A5340", ") c #284B4C", "! c #25564B", "~ c #1F5859", "{ c #384D53", "] c #255664", "^ c #3C5A5B", "/ c #555246", "( c #425F41", "_ c #21726F", ": c #6D4690", "< c #455C99", "[ c #2A707C", "} c #32754D", "| c #4B5F80", "1 c #9335A1", "2 c #34745D", "3 c #4C6B5B", "4 c #4C7271", "5 c #696C6F", "6 c #318F91", "7 c #CC547D", "8 c #3F9F8A", "9 c #40A670", "0 c #5B9588", "a c #6F9093", "b c #748C9F", "c c #789278", "d c #889090", "e c #609FD3", "f c #53B5B9", "g c #C37EE3", "h c #8BAFB3", "i c #8AB1C3", "j c #99B1A5", "k c #A8ACAB", "l c #EBB273", "m c #92C9ED", "n c #9CD6B0", "o c #87DCCA", "p c #96E1ED", "q c #ADD9E7", "r c #CDCECE", "s c #D8C2F4", "t c #C0D5D2", "u c #BEEEF9", "v c #D0EEE4", "w c #E4E7EC", "x c #E1F3B7", "y c #FDFFFC", "++##+++... ", "++#=$$$#-*+. ", "++*yyy+*--~yyy. yyyyyyyyy ", "++#yyy+%>!~yyy@. yyyyyyyyyy ", "##*yyy#*-![yyy,,+dyyk wyyy ", "++*yyy+>'_6yyy,[[dyyk yyyw ", "##*yyy%>'86yyy~_]hyyk yyy ", "+*#yyy*'88fyyy]]~hyy5# yyyk ", "###yyyyyyyyyyy;,,hyyd+@ yyyk ", "@*#yyyyyyyyyyy;,]byyb&+@ yyyk ", "#*@yyy'}8]]yyy;],iyyb<[+= yyyd ", "@#@yyy}966[yyv,,_jyyk8nk+ yyy5 ", "*@@yyy}8[[]yyy;~_iyyjntr5dyyw ", "#@@yyy2[[]]yyw~_[iyykkrwwyyyd ", "#@@yyy~[])~yyy)6foyywwyyyyyk ", "@$;yyy)]]~]yyy~onvyyyyyyyyd$ ", "@$(nhd,)]]~hhj0nrwrrkrrrkkr# ", "@-}9_])~,__80jjd0akrwwrryss5# ", "=}92]{~,__0ji4--%--krwwsgg:|$ ", "%}2])]]_6hrb%*;3}(-%[sgg:<|)$+ ", "++>{~)_0ktb*{:11:&@@+. ", ".++*][drtb*{ktqh#>#@&@&&&@. ", ".*+#+4tt{+^&&&&&&&. ", ".+^+;+jo,-/biumuuquh433,,,,,,,. ", "..+/#@!8]qb4aqpiipha}0']~]]],]+ ", "...{++.,,bvm25aaha4]4c^^~]{{{{# ", "...#++.>^^avu9}3!{{an3^^^^{{]{# ", "...++++>^{^4kvxl7eoj/^^===$${{= ", "....+.+;{=#^;;^ac3);;[{@;{;@{]# ", "....+++>{$=^=);^)=);{{{=;;{@{,= ", "...+.++;;=>)=**3)=;={]{@=;;@{{# "}; htmldoc-1.8.27/desktop/htmldoc-64.png0100664000212600000240000002354210063126214015763 0ustar mikeuser‰PNG  IHDR@@ªiqÞbKGDÿÿÿ ½§“ pHYs.#.#x¥?vtIMEÔ %Bsè IDATxÚÕ»w¸]W}çýYkívöéåV]IWݲdÉE²-lc84;Äd2aüÒœ‡¼$/ÌLBœ' LB“P‰8`œØ˜`ƒq‘‹ŒeÙ’­^nï÷ôsv[kþ8W²!“åÝÏ=Ï9gß³ËúîßúþÊúþ„_,!B!Ø–…#m"£‰¢™H4˜„XÇ$:&Ž5`0„“–ë~ËËTîXš:½ÿmÂ/Œ „–eá¹.ŽrˆLBÇjLœ Ða–at’0F²BZ‡ ò+™¡M_[8öô¿ #$$BJ,Ë"•Ja+›q‚btb $ĸž´(À–$±¡ÓéÒ­·H‚!@Xªc»©o;ÙþÏ,Ýÿï܉ÛqÈx)¤­ˆŒA„ º‘Ä!Q“˜˜t6´Â’X¶p±-1‚vDk¡JT«)–—¾ßö‹[ž<ù£w¤‹#•…A#¥Âu\Òž±$I’@˜!I¬ ã.Žc㤄G!•×î}O9àg½q-¡sê$™S c¤¥PVêQ/WùðâÄñýû Tw![)¢(¸Þsýíùåí—\vEwÏî‹S)…bðGÀ8P^ü¡”’ééé/3ÀØÙ}ÀÝÀ"0½Ú/ ôˆK*ƒA"@ŒÖ$Æ`´Ávœs`éD'1I£Mf¨Ô;H‚;“aQK.øƒ¯Ñ­6ˆ–˜¼ã¸ø5´Ç·–‚›~ô÷²g÷Åôõõ]+„¸ÓÓZÀëÎÞßäää °¨¾äþÏŽ ¿,Rœ5Ù#A)$H‰@ Ñ !öY³f (g5„Q„´$Òq0Vi9XÙ<2“Fö0nDnæstûVS¾â7Éï|%–—AkÀØø˜Éårå›o¾yP¾õÖ[sÀ+ã8žÃÐRô|ÏÙÍœmxåÎŒéoµZý+¿•ÿ"HÑ ‚©dïFÒ©4·þöaÿþ}\vé¥cÀ˜•áCkœlãÙ×éÐq® …4Ý…Ir«F(¬Ú|î‚qÔÁòrT®y5ý·¼{p€{ï¹GÜ𫯽(ÜrË-7þììì#+ÓÓüö|ß÷OT«ÕÿþïÿþÆ ä¿hRJd/"ÂO¥yÏÛßÁÞ‡Â-·¼…}ôO¸çÞ{ItrÎn}Ïáäó‡9pÿ#<õ·÷ðÎ×¾q匑ñ)%Brƒë0Ý9JÚ¡^Dc¬RwÍ(ß¿ÿ6m\¥›Éýq*ýNçÐÜÜ\­wZ™¬àþ¯n‡zdqqñ÷R©ÔÍ·ÝvÛÓgΜùÓ÷½ï}ÿW $B „A©”Ï;ÿŸ·±÷‡?äío} Ÿüäg¸`ÇE|á A…HeõÜðÓgöó¥¯/~ë¯ùâwîäéÇWXE‚­°lÍÀ¥W¢[1‘~ I;šØ^"¶Câ¥&B÷vï;S¥Óérùå—SÈx»òÙô O?óì³NÇPJý›ؾ}{\©T¾rÁ\÷Øc}¶¯¯ïMŸþô§Ÿ:uêÔGßþö·¯¼³@Èö]t!o|ÔKe¾ß?òÍo‹v»ƒã¤°˵¢g{Ÿ|‚OÜþç|âo¾ÊÇïüž8y¬gK¶E´´€«,ÄRBÆ4&œ»¹P/b÷ÑómdÁC«¸·ß7ôÁÿÊÐÐøÀï¼éÀsÏ_ù’)ð‹LƒðèÑ£ã÷ÝwßW§¦¦~`YV¶P(üÆîÝ»ß ¬YAôÌAH„<¾ï ^}ã¼ý=ïe÷®Kxî™§ùŸûýý}¡XqU½CTÏÔ)ä° œþJ’/—Áºí U#\Z|Ñí}h&H[¡ë ôtÔeøá#Oð¾÷½±±1~úÔ>kiafíYý‹lQåµÖÿý#ùȾ‘‘‘kîºë®¯Zµêƒïz×»ž{)™Ês’¡FÀßß{W¿üWxïûÞÏ«^õ*öí{”]»/!Ñ úœ©ë” Ê!évT:ÕÛíXø•!¢†&ì¶i;DvÍÖ#¯ŽFCܬœ@yvïàû÷Üß;‡eqï!m˜š]ܤœ”÷ÒA 86lðßõ®weðƒäxàÜç>÷9·Õjí°,ëTÇ·<ôÐCŸ|ÛM7Ýôãv»=<¿gtcaV¼€!‘Ra0hàî»ïåÞ{À¯ýÚëˆã(‰Itc[h©H”±Ši¤ß )”å‘45‘Û&¬/ãåúi5žz$)"ƒî¶INÌá­)#2=N Ƨ™îå{>Áp.Ï÷¾¿¯´•ò˜™:³%SèûoX™s‰ÕÌÌÌŸýü“úƒûî»ïñ]»vý+®¸âÇ“““E æWâ…ÆJä¨,Ó#¤q#˜,Ë w~ç. =ÉSÏîçÓ_ÿK=¸«˜%µn§äóÔÔ)¬ž:5…ÖÉ1Ré!´×DUR|ö‡ÑÍHC|b–ìúZõ9Ýû,ÑT»2„5˜ãÝÿ"z,$®žÁɱ/hò±ÏßÎücÂÖ܆t9sÇáãã_Š»5===ݧµ–e%gÝä=÷ÜÓýÔ§>Õ¾µèÕV‚§Ÿø9‹Ìõ)m<߯r\ÂnˆŽØ ŒA( "ÁNYWáT2$9ÚíìÎÍdv®C& +Rø…uTViœ™BFv¥@;9Cª2„^hÒžŸ :>…›÷èDM<¯H´Ô&±,d%…ìÚÈåÝÅC˜¾wÓ*ãÃ\—ú#,Œãù.^~Ý‘ o®Í°ûçÈQ¯ x è®|~à/`Ð(ËÆõ¤ea7D “DX¶í)Œ¥ñKYÌb† 8›Ö`”𠢩6•­;hŸ‘4&›'ç±3išñ)¼rb1$2môée—©-Oáçѱ…,UЃ^LÐ&‡5ö†A„ã –%ÌxÕƒИ;L*›ÂòGŸ×VåÕK§Tý9 œM¨þõ\`Å¥H’^d ÄqˆmÛ=niYˆ”C’²ˆcðû|RŸ· _Ê;_u]ïl—CœhÆ—Üõè#|yÿ<Ñlã)‚ý'É”óÄ9Ÿ÷¾ö-üÆË¯aÓÚ‚cSüÍwç‹ßø"b[{°ލZ §K¼ó†+xù®¬ø8–%©ÕjŒ÷}~û£;qc·vfiżÍ/• B Œh£‘Ò"”´Jƒ4xY‘µ¾Cîâµ8}>"Žqs=’zøÀs<öìQVõ÷ñÚ«.áwn| ×_°ßøøgi[ÄO94³üÅ­â†=»9=3Ëíß½:‚7\¿‡~àMì¹|˜w~õóèIJà‚\‰oþáÈ¥Sìî ÷ÿè§ÄtÉ¥.Ú¾…²}™çÙ_èÖx°ôK VŸD‚$Š1q‚¥,ŒŽ‘ªG†Ò³Ñ8CET%…nuЉBŠ^ðăüÙ÷¢SðÙüw~ð÷رa-ÿqÛV¾|ønšVÂÍ7ü*7ìÙͳ'Oñš÷ÿ.ÍéÓ øŸŸû?øæ×xÝ•Wqã“OòwíÊ>ÿGH.âüÙßó—ß¼»(\a°ó»úé,-¡<÷õ¥‘­ÿßÒÄ ÿõ—ËEÏÓ3_Œ@ …0¥$RIlßAæ]dg´ŒSv‘:!³jˆ¸¾’ï§²Oã ”¨G.Ÿ¹·Û¿áWS¯Nc"Áͯ¸€?ùê×iL´ ÕFVbؽOÝ/¿ù²ëNOsÕö+(ñ©i¾pÏ=Ø›mFnå‚_ßȵ¿u)¿ÿçÂÏ•šM|/ú½Á {nú¥@€Q„DGczŠ©$žçb¥-tÖÆ?«ßò ¥óF)‚V/”Õ:@¥$Vâ l‹îUÇ7Ž®Á$êí{‰ÏÞG¡UÔZ÷’Qd1ϾSÓìܼ /3ʶ kxüè¼õ°áú!.þ•a¶^0Âæâzn¼üå|þ“Áq3t›Ë¸nó/†¶¼bý/`=º4@’ ŒÀRåÛÄŽ JÛˆ¡ :ìMÔ —Ѳ@×:=âSm#uDkl‚ º €çº$J r~/–&N †lœÍƒH?MÉ‘I²™4¶ÈdzjìuX½ÙeËú2ÛK#l7C8ãm¦Nqíå¯ä¿ÿöïÑ®˜°V´eí;«/¸ÉýÅPFItb@k,”aðÒ>*c#úÓxÛQEϳȮ!œ•´Ž£Tïz2îÕ âV§Q#åõ<Ðb­ŽH»cSou¨léÇZ]ÛÇ4ŽÝÏðê4ZT ‚L/ƒ\UȰ*å³==ÂÞ(µÇŽS6Eò™Aº‘æ=·¾“õF&æ°­æN.üÑ/€‘£%"÷Vǵ±|EàhÄš<öú<ñT•T¹@°lÓ<4ƒ¥|ÂúÒ¹ÊBP­aÕªtu“+.¾€ýÇŽ!¤™ïòÜ‘£=oyÙ%h­ˆæš˜ºA‰<{.¹€ç§')o²i§{çÝ5z>£¢H´œbÕáW®øUR™üŽ[(d³ÜñýøôŸ}·dao[Íá°Á–òWmÝÆ¯¹–‘á®=~핬/xjìÿðø÷Ù熫7]ÄÄᓬXÅyçÇ;wÐhÕé«TX·~~.E”,.Í4l9ÿF×R*•RrÇßàíïxk6¯¡¿ô²o>ôÀíÿá_`d³Q1X±FJM¦ìcFœ—`o,áç}¤•ÁŒ»tÏ$˜©:¶“¡ÝhB³J'hÒHÂ^a5W@t,L!2˜UeÏ'n8ƒCxCƒ¤lŪ¢ÃÖ’aµ¯(§2ôÙEô|ÄÈÀ–ë R~ŠÖÒ"mßA½¶ÌȪ!Μ9ƒÚíÙl¥$Žëàû>©T ˲V*Am^÷ú_gï£?aËÅ{-¼q÷ß{ïSÿ,¤³•ÛD¢&!•ö°ÊêüÖ¦¶åà D'5ímÒ…ÒF‹p~šv»Fà(œB U@urqkmzÍÚõ®S)ãõÑçJvV{úv¬dËÀ(³£èE›.oÛdS>él†'ŸxŒõ£kÐI‚‚J¥B©\¢T.‘ËçÈd2$IÂÒÒ™L¦·²¥lÖ®æŽ;þ-Ú[¬?ýì_ÿó¡°XBaY 'k!W¥p6ð2>~Žp"¦y¬…W×$͘ B·Cw‰3)„åbüj¹ƒUÂÚ4L2Ò¶=Œ°I­¤8XakÚâ•}.וØ9¼ŽÍþZÄ´àØÁi*#kY»v-YÏ#_,päøQ&ÇÇØ±}Ge||Û¶I§Óø¾®6yúôi\×¥Óé¼X34°g×U\wÍõ,ŒÏ°Ô8üê—¿âwÿ³JnSÒY“3¤.éÃÌâ2˜šM4¦ñj+v‰‚„Ö A{™¤œG*‘/£f–p“:zt¨R AcÈoZÃeqYÖåÊ~Ÿ­CC¬í¡bðÄ#ψ4a¬ŸÄÏxþà³LON°{÷n‚-[6SÈeY·nét€ååeŽ9ÂÓO?MŒŽŽR,1 ÄuM{:¦3©éKçù»ûïFYݤS^œ9ñ­ÿ{:l4–«PÚ˜C•S(ac ŸÆx€œ3¸QŠ 64¦' º t9‡Ð2ܙТuƒ„Ù4ÚvqŠù|Ž­J±«à³¾¿D¥Ü‡HÒ¼ðÜ‹ñýŒ?øS8-¨§Z¤å4é8ÃàÀF.Ú~9ù#§X3R!1P*•€ÖšV«ÅÁƒÙ¼e [¶žp:ÁÔ4ÁlBw.!XÔ$QÈy…uì:ÿ"ž<°kcþÆu[_=zê…ûNÿ”i(Jü yì”Kj LíP5¯HEi‚@S››ÆÈ„8›B ¼ ÞÄ4N)M³R"N§‰¢ÜšÖbWÊag)ÏÀà B¦yðÔ"‹cpòðÓxô1êݨPQàÚ†‰CGyòG÷ò“]WóÞw~€¡á5LÏLЪÕX\\äÊk¯cÛe{H”E³«‘³ÉdBg*¡» ‰›†¸Û"ŒORc\°a+Ox‚N}Q ;|7ð¡âFF6¯dQ¸¼5”%»}„ æé`- À£:3K·['Éø(/–…3=ƒ,åèWH²Ypå¾Û¥äÒ\– ƒ2Åö¯óõïŽsüÈ׉gžÅ1Ø£b¤ÄÂÆ ‘hòn£KÇø…"o¼é^ûŠW°áüÍ$é,]V'Á›‰±&5ádBgVÓ]Ô,/Í3Ù>ÃÞú>XUÚ%ŸVu–ù‡ÿZ‹d*}sÍ03Òœzþg´VU) ¯ÂÊ`­.ÌC8Ñ%Óqˆ,›¹3c„Ý¢R@ »´D8T¡;X"²\ßb}!ËÛcG_‘ÁáaðJ|÷ÑçøÛ/ßN0}ÇÖ¤Ý4J( n*ƒWÊã¸ii ƒnŤ4˵6j¿úâ§™J ¿¶~;}QBf&$=‘LªšÚL—™… N4sTÌqPOÓ(§h¥¡ÛBUD¹L¸úFVãô 2U‹¹óæßýQu Ûq°Keò¹-äû^¼à2 ™~‰5X¢ä4&!u–æk´ŸfùÀ3OP›˜¢ÓlÒm·yÓŽßå‚Öµˆ°EÉ‚#§p3y¦¬€3z™™p™ùö"ÍÖag ÝYÄI:¤HhСÕmàe2X ¶fŸkŸ³7C'1a·MØ8òãÇÉ ž!ÞØýe!É5ZHiÑݶ‰ÀU²—f2\W(±jt5™¡Ut­Ïá×*rš¢ Z—”hã%!ín—v044DÕÌ!8e­¤DäfPªK»±Ìüô$Ä!Kõc¸¾M[ Òe#°zO]Z`@ ÄŠtH ƒåéŠ9ÀlIe2Ãfs Àj5ëûúºÍ¥9â0DžŸ¡Ûi·Ûœºû{¼ï“ŸD”ú Xfjj–0Œ(ösìô4ÿøÝ;Y8}?_ÀuS¤ÒY²Îj²Ù>¹ÈÌø•U©>‚đؖ"²™\7È»‰¶,:VŠMÒc-yžé”˜˜C«KG A«E:7HÒJ!PH¬^qی֠5F9(¹búBõ~E†–:1 Jr9ð«17}}ø¹,~~# §N‡¶gðóÚµæùÜ—¾ÂîÓé„8¹ ÍåEÎÌLræø<ÇŸ~kˆÀv-¼L‰…pÛ ¬õ)­ ›Ë08t‚À@×@Õ¼(TšlƒÄ:“%)”Éä ¤—¦h·ºôå,¾>B# ØA$ 1€”Ò¶! ¶ƒR.½µîÞÚ·e nªLØžÅXb÷Y”0ÜÖm7±,‡L.ú­[˜Ÿœ$FÏ¿„8Öí:SããTéÆõ=„´ª¼ï'xø‡)píå¾~¾@e`-å¡2¥ÕyÒ9 /íÓŒ4s³óŒ?Imi‰l¾ˆFÒ Bææ˜žœDæûXlÇ;3Æt­Ét½Á|»N+Žó)\Ûay~™qX ëÌAO:g)^³Ö0¬ U_bzò9æ—ŸçØÁ½;°ŸÀ·XZ˜Çõ\¦¦XZ˜ÅvÚ¡Et;m´Ñ,·k4jË­R*”Td,I¿åÒ×W!ŸÏâTJXý%d9‹*§eQI!Ê¢ì@ÙE–TÑB,È;8…Do)äüsé°”â6³¢4ì4ë4#Á5×ì¡Vm0;3qD~p”úòA§E«Ódõu—òøòÊ W'4¦¯gfí2K/œ¤Ó‰Xœ™ Ûª“­”)º†cGÑi6 Úmµ*íFÅÙi¤R„LNŽqø±G™:uœÐn.Q÷«4½±=‚"&Ç œ,8% Ò6(Ë ¬žõK¤-Pv¯¹ÃvÒQ(OÑ8u’H߈£xQ)e݆1çÖ•“8ÆMyÇfxhˆÓ'NÒª-’© Ò¬.„ó“ãÔöWi~÷ás‹Q‡Oüá0›^ÆÎ>Ábt©+Éô"™b ×sÑ:"ççé¶›œ>z„ Ý$ :Ìœ#•ÍÒ‰»PoÒj5è¶´;-ÚI•æv›læbFÃ¾×æø‘qü\Gĸ&ÁÑN’àk< .Úv·—ð¥Ä3†ÆÌq·…´¬ïFAxJ•VÝÖm5/ÜF6vn€R¹ÌÉãÇé4j(‘Ç­#’©:ZWHÂ:dQÚçÀ3?å½×_7²Š¿ÅSãEš•i÷¦ÛjmjËu´Hˆ08f}IãIDAT™ Ò¶ˆ ؾO£Y£13ÃüøS§Ç˜>q’æüÍÕ6s«Ù4è/Xœ™:Îü T 9ìH“2O(|©H!{/cð èF+Pa›´´IC«ºH§QÅs_ÅE¡P4±6tuÌŠj`ûîËH„ ±¸ÀÜôD¯ ›.Ði,€ÔŽ—ay)¼ŒGÊ–XÖW*|äÃ"Wê£ÕîðqÁÑÖ™ÿÒß‘UY¤±Éø^ÊF9޲0XÄR™„vµA½ÞÄt›DÍ:Ít›×œÇžþ€äB‡ÎÓ§øò½)•×âºÝN¡uOü"§ÃÐ#ecJ¡”…ZYþ׉aòôa¦K¾7h´?¯â ¼-•Ív;?#¹î¶[ØéQ·M§ÝÄÄ ŽçE¥b‘¾2e:Æ·í°Ëç9ó(#Å‹#ŒNh…”e•÷)ž·†V­É¡§žãñû"¿q]/mNgÉÝã‡Y Ët4„ ¾_"{~…ÅÓc˜Ä •$ £+4H­é ( peYèXã õ”?Æ [íÞ»1çèM¿häÍu‚çZÇ /i BÈÞ“î}é5Um¬’¶…Özåa[X‰¦¢äB• ÓÂò=â8êuŸE1‰1„a 2Y)cšeêgể(­“xžC"cšÍj¥¥×µ‚ \Éõ{]lÑÊç°Ñ YÏ ¤ÂhM%£ÑÉÏLkmX¹g°ü¢Bä¥ÿ%mtʲ@¨•9"J!„!°lL&éá*#ƒ7XÀéÏÔjhF!áÒHM¡œ%ãKd·ƒP½>d„&1Kí.R<ߣ4XÄÌNá8Ý ‹Ñ=›^yŒÝ,4ºÞÀ¶,””8¶M&—![ÌÐÏþÿŸý ‘*´ „ax–FF!"Ò bb“¨˜8IP*ÑÒ0^¶÷!„õHnðês㾯ùWZ¢é€@‰mÛ¤ÝJT¡:IÐRa9&JBG~@„h¥¥eî3-ûïílûÓóçOøÿJH¤”8®KÚK‘H ûq¡Pxi ÇFÛa’à/ú4æÑq„4­-'ýÅìòMÿ8vð‰àÿ›é–¢Ò@HAÊõp]ö#âFH”ØŽ…éšHÛÀpl”mbx6*[$6[ƨž9BR/c˜æYÃN}Æ.ô<<öÕÚ¯yç›é&~iOüÒ÷o¹äë¿—B ƒDhЭJ+¤4¸çS÷ð½ï<‚Ö%%üô;?â†í×aoÿÃ}íÃÃ'8~ôØÀÑC/uìøá¯Üÿõ¿˜™û’ÖúÌôôôçVÀÔZ¯ÓZŸ ‚ày {ttôZ­õÙ½{÷ÞäÞäØ[.)dÓ I¢I”Â2 ZZZèìì$ #„)q³iz;»°µDÙ÷=}#ˆù«Ù½sïzÿGe0u²ûøÑ×>›Ïeê·½ï}×uw !~¤µÞ¯µ¾YÑAØzúôiÑÓÓÓÿüóÏoÎÃ@ü/B@ @¤4À!QZ‘ÍfÙµk'†i /žGEHËÏÀðR¹Çj5^™ŸcÞHph*dØZC=×!}ßÏœ=w–l6Û¾gÏž-íZ뛢(šH’ÄŠ¾ï›Õj5 ¸oF@)uý‘#Gºó×!c !%BB.›ãæwÜÈîØÃÞ'öò³gŸ “Éò¡?¼ ¯%G±§«IXÛFÒ$Á"¥!,Ó ‰¼ýx[ïÀî_É3ÏüŒö¶v®ÜºuO˜èY­õŠ™™™×Òéô@ýr\¾ùA)uÅààà}###ÿøè£>ø±}ìÂEtt3„@ °m‡ßÛs|ó›lÙ´‰;ïü#>ûÙÏ¡…@HmY\z饬^9Èòöžæ¿Û&‘”Ö ahD%M \M”Y$ö¦ËŒ¯xíø0—­_7ÔÙÑö×£cã'kµšBh ùMY»ví衇>$„¸â®»îúñÙ³gÿýîÝ»Ûãb ½½½\³m¦iòÔSOqæô9,ÛÁr-„Ì/”ùØ_~zÚXw97ïxÂȰY7¨W  `€Ø©âh0@“Ø‚}‡ñÇ·ÝF.—÷>õ©ÿxÍ{ÞsëBGG‡~«[çÔ©Sq£Ñx¹V«ý°T*­SJÝÒÞÞ>ü˜’ââ Œ^àÃöq>ò'Ê»ßýnüQn|×)ß5ë!K-¤/YÕŒCàå:hTCjc#i7÷m¢˜hl½XOí{Ž\.ÇÀŠ<ó³geei¡E)e¦ãü" ¥™LFÞrË-Æ£>jÞ{ï½R)õŽ;ï¼ó‰ÖÖÖ;¾üå/~ãÆÿù _øÂQ j"@3 KC¢”æà¡ÃüÁ?ÄÕÛ·²õª-<±oo“R’¸6©e8½¥¦¡–GR«7Æ0 ¥«M 5Ñè$2g“œ¨ñê‘Ó8~‚‘“ç™­§¦ÍÒR%ŸÊ?\©G_¸ûî»÷“ŸüäÛ³Ùl]¡ÛÚÚþËÔÔÔ†|m÷îÝç‚ ¨“À àJäÚ;´eÙ¸$†È‰@M„ô v\¿“².{i?­7]C±½“wu¯ç™§^ãäÈ<¦Y É5X·¢ƒAÓáë_×J;1W®ba~‘ãsÓI‘hdQj°í];ÈNñð÷³æòm'ÿÇýÜwg&Ïg‚ °MÓLzè¡{ì±€ÊEª•Æ›_ä:º´íØ8žKàG¨0A$i˜®ÀÊØ˜ËJ$=-8ƒ}¤û;±´‡c/§|¸L0Z† èLŒô!˜˜DMNè–•G µÑsÀ|…¸u{U7Fb£Ï,Q9ô ‰?‹—ï{Ú¯‡R+Ÿ­¼)`¨^4ZýJ)‘ïèÖŽç M›(ˆˆ1°m ï#Oғú´ŸÜæüÁòm\Ó½YÔk!¯Ÿå/ýŒÅJLT^DÌ-àåàŽk߯CC׿À«§ùÊW¢ÚÙÀZÞ†VÚíì¹r+kºKèpžù…2ç§÷~ú3ŸÙV&–~ÉXýÿ.%„@-J `H„ÂI;ˆ¬Õ]$µ¦©bVwôÒg¤ùÚƒßåÀþ¼ïªu|ïßþ^y5:Ž)}úÔàöwîbßË/ñã½Ïrûµ—óØŸ!Ó–G- ¶––óÄgïfÃÊå<}`˜g093‡ˆËïL¥ì¿uÒ-é‹F¿å-eJÙ4\+…ФnæÓ”˜)‡$mâ­jÃpÁD¢#ƒzð½}Ï`u886Áýz»7®ãoŽæý¿µ‡þ®Þý±?çÐ §@ú¼P柾—Û.ÙÌ·~ôŸø³[9zrŒ~ú>ŒNƒõ›Û(EK<üÅ*ØShï~M¸[þÛäñ'õ[sR4ëh¤8žƒÌÛ¸C]X½ÒíL§•¨ªB ³&Ž›ãµ‘ NžcÃÐjÂFÀÖË×qbd”£/#\wërN“pjjŠChË,ç’þö:ˆ½^°å÷ÙvÓ¸íVþêÞ{PalØfð—2Z¸ö_T i!›Ä ©À”¦!±òQÎB®( >zIИ¨jˆÖ «$KKcãø¾ã8è´C®¥¶T!eœ ½™ÁTHmÉ'_(bg%žc"ò>—njeçÊÕ¬«¶P;<ÃM×ÞÌÝüqªs³Ç ¾Õ7tcë[#` $©†8•3°7t!³&¹ÎâEÆð,BƒÐ„ˆ¥ 6>¥BŽÑùy.“ãó´¶É®ìDa£Ê‚RÛzÚZÛ™i,â­„jÔ`}g7C²ÄUI7=A‘ÞŽ•Ì”—øÈG>Ê®«¯£^žì±ÍÊç/»úÃÖoF@Jt Ä SJLËÄÊ[¨eY¬þwj_ý×¶”…åk´lÄX‰ÆMY¸ËSÈk»±/ë$SÌÓ8m\0°Q5àê–·fI”¦®åÐÁ—Ð}Œeh3MªÐÎU}=lën¡`ÇÌ,M²´X¡§èm]ÆààSÎc A[{+I’P¯×)—Ëò†Öáº6ï»ív^9òªXùö¿z橯~â×:Pì]­Í@c È´»ˆœëúÉõµ +)GŒúmјŸ£Qc)j Ü"4þ¢¿„j)¢„MzÅ*Ò)‡U%ƒK² ½)V§Õlmš¾övÒŽMÔë5Çqq\›b±H>ŸÇ0 ^|i?¿}Ë{éX¾ª¾ªcÏÚ‡¿ÿ‘ ¿B¡t¦íC)œ”‰µÌÃÞÞ…Û’ÆÐG"ì²@F•ÉqüÊ,¡ç`•:±”U—,#)¹™¾ú²6»º®[ÑÆ–åƒ xx¢ˆe{²Y\ÇæÂùJ…AР¿¿ŸŽŽÚ;Úiii!I|ßÇó<º»º9þû÷ÿ“%R:³ýªÿôø±£ßùg¹AJ¥1M;ga_ZÄiIáår„§"ÄDu¨ÎΠtHœò0ÒŒ¥–ªÂ%Ë #_ £¯“í¥·/+rÃÀJ–Ý,ž ™™ @Z¤Òi¦gg¨U+¬b©Z¡§§×u‰¢ˆsçÎñÒK/áº.étk¢Eøý[þ 2¶(/œºýŬø•L¬UŒu0–¹X]RÅ<áy…1fâ±03ƒ_™%Φ0óí³ Göu§SxY•-yvR¬ëé %ÛÆôx™#çžá¹–K¦ió£…·m¿žÁ>2ù<=­ ‚€ãÇÓ·l¥ŽN”2Iæ•ÑúDL1èàº-;ÙûÒÞ|Òæ|øwÿ,::Wè\Gþºn¼¡n’0C4áùYÊÓsE¦‘.à,VmYj¥<‰cÒÙÓÎ)‡«;Z)•ºyaÔçèásîÕýœ>I,4"2‘¦ÆÕ€°¸þ¦Ý|ôÎãFU”Rô®Z2mh€˜LO'ÔÎÇøs!³Kg™gÙ?õ2_ÿÎÉw”.Ä¡{ùôèpù¸)Afu§”ÁÐiô„À©Y,ÌNã×+D¶…•ÎãV*Ä­Yjm-¸íE3.×ò õõ°»üõ—çðóûˆýó˜ÂÄ´$žgƒç u‚#4‘òøÃpøÅçùøgþ†Á—s·ô…ûTBýLÌü… ggOsÐæ€aºѨÎC¾¿²Ø+íäFàÛoŒ³žn]ÓÎÀmW¡âê\L£®X˜%ölìT§R%ìi#Ìgh)¦ÙÙR`Gg;=+85§ù»/ÿÃÏ?Žk+ÒNŽ\qéµËÈml%“©`TæñÏLR>zž¥ñfjÙ¶œ}ôïØž¬Æ:©˜83ÉØô Îgv«\H7Xt}êµYÄìæØåùÜlî±òÔôo¿1ZÌeµJb Û`ùæ X¥* Ïah³î­êƒŒÃúÖ¿ÕÖÆÚÌR'/Ÿžã«ÿóKŒþ|?N:E®4DK÷­¤w\IËŠ§'O«W%L是W˜yùUž;@uø,K³óÍvÞ_ü…†‰I™ =Ç9Ãçx0Æxm‚¥Ú‘?UpˆY—0l$:×Y_[™|A–Eú é¶vò›®ÂÔ&–´—w‘±áí=]ì\ÖGÛÊÕÄn–ç^9Ç·¼Ÿ‰/`g=Z۷зæ.Š—ѹ6M6“É»¸–"&b6ªpîØ Î¾ø ÇqBÁÜÄ¢¶–¯g<šå°Ž3Á)–âqbUC#„Fh:n Â BÈÛk•ÚwÌ$lÄ–ã¢Eufšø¹ŸÒ³ãF¢þ^ú„b÷Š•¬_ ^O³‹UNŸ›æ±ï}Ÿ©á¤r9Jí«¸ƒÎËzܘÃ1´¦²$*! 5^à`éNÌÖË™ªûP­‘Êe8wúGË3U>O/‚Š›cNËEš„D"Ñf@Ã_BZ¼h:PìꦺP&jø˜¶e9• /îã½+?À®uëéßp‰ã±è‡,6¾ýàW9øô£´•zhiífeû;Yqé%ô­ËГÈꊹê4åÅEzº»™,ã‰&, Z©*ÍäÜ$~µB¹qa»˜fi8L¤´šU²ÍÙ­™F˜“ Ãm©LÚ«Wk¾éW–È–Z |ŸzyË1°½ þì?þgÜ|ËͶGeaØ”¼xð8‡~ò ‘xiÏnÁ&JN¢u+9ÓÅ•&¤ (àà¥0Ü®!XÝ‘&q–:8Z#rʞ͜©pÓyÂÀAh!Œ&–‹!RH !ˆÝ?±Â0d 5+só$IBDze”Z Œ9KgïJʳ“¼òÊ+ìÛû$7üÎ{q‹Y¦&çxñ'OSÁËäq›l±@©?E÷Š Å– svšzyŽ8ôIår8™,ç—BÊÓS»º™‹lFI1/]ê–I®µ‹Nצ:ɼƒ&†á‚!\œ˜7? œL'~m, £¦ÖP//2kL°ãíWãÚ#gN3pévÎ{o|é>¶½ã:ŒBš3d" A˜\½9OJ)fG™«åü™'·‘¶R†F½Fh¡qr9´)‰‚Iâûuê¾O‚‰]) §5͘¨f h­/õÅIoóYj Çï‚)‚uÀ>Ãâ „~Åjƒn¼žS'Oû òm=”§Ç™¬/1½m<Ÿ©sãôFlø½m¬°Û˜KXnŽ|©…RwiÏCHI¾¥„—ÉD!Rirm­TÊ,NM2uá<åò¦pR.±çR©†Ä¥ "%1Ò"m S‘’HÏ@x&"mcd=*gŽ"„>‡Ñ&B‚Vh óããËûo¾‰+Þù^œÂ8“Œ±ðÂSÌŒ`{&VRgtb¶)†ˆf‡gÚmkV°09Æèéaf'GYLÊ„k{qæzÑK§ ²éÊÐèDóºn!Ä‘BÇ1B ËÃtS$¥^#_j½'lø@% ôɴt01z¥¹I,Ç#¬UˆF|âšÂÈ: O\àºåílºaf=ˉ›Ùc©ÌÌ13=G#h …FȦÊSoøLœ>ÃøÉ“L=Myò<ª§õ‹)ú[àȱSØ2OJHRJ’OiÜXá& †`E!žŠIkAenš ^™O¢ø~3˜ŽCÜh0;1FºP$•ɲ0;é$ ²>GÛªU8ŽÀ6î{ð›D–ŵۮ¢{`'_ìfâñ‡X:þžicXÓ4цMdJ¢êK³ó„eliçÖ–Õ䯜üÑAf&bÚ»,’0¥QZ#…Ä’ÍkÔJ_m4ıÆv]Ðä G÷H)P‰º¨®Ä˜žGب…!R(#Ñô¯Y‹k𨦛q871M5 Ù5ØËζVÂMƒL­šÇ˜}™xbÉñ¦'˜œeæBÆ%ØÔÇÍ·\ÆÆíkyö§ÏóÔONQêìÂq,¤Hà :Šˆ Âz°îc8ÎEù j óT˳•$ŠÿV˜ÒÐB€Vo4:é–Â4ê5,Ó$QÍaïú]7b;n³•“‚t6Mb´–òÜví5lÛ¼ ‘Š˜VÈ•CÞ?ÂÌ#iþ—XÏ#׬¥ï]Ü™+R§¥H¶½•F=ÀLg*3Ó(¥ÐZ£ÞÈõfKùº,¨ßP’„(•€nž¾0M´h@©$XJÓª-‚ñ)ì¼K¬biAÊ¡6·ˆXXdjb’É1ÍèþiÏ&Õ“'R&AÕÇ6L´‚(‰Z' Zk‚òÒK¡µFkH€$h^0ú"*Ñô|s´øzÊ~ó¨Âj {†yÑPI ›S<×#3´QL¡’˜$hÔª˜x2ÁqM„¡R!…FªdóÌF -›Æk­Ñ@'(#@cš&©L ‚:ÔM{4(­Iâ­™jRH6ÆëÀHÃÀIg ªÕ¦joH¥0Mí[¨8@ÄšA›HÓ%HÂ+T扵ÆiÍcè­B+¨ûF‰,ƒpi¯TDHÍë*ºŠB@©„`ii¦IT¯# Ùä= ˆ£à<ÀÿˆEଃ8@ÞIEND®B`‚htmldoc-1.8.27/desktop/htmldoc.t_m.bm0100664000212600000240000000046210063126214016120 0ustar mikeuser#define htmldoc_t_m_width 16 #define htmldoc_t_m_height 16 static unsigned char htmldoc_t_m_bits[] = { 0x3f, 0x00, 0xff, 0x1e, 0xff, 0x33, 0xff, 0x67, 0xff, 0x6f, 0xff, 0x6f, 0xff, 0x7f, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; htmldoc-1.8.27/desktop/htmldoc.dt.in0100664000212600000240000000370110064361474015771 0ustar mikeuser# # "$Id: htmldoc.dt.in 1316 2004-06-17 18:30:20Z swdev $" # # CDE Action and DataType Definitions for HTMLDOC. # # This file adds an additional 'Print' action that allows users to set # printer options (and choose printers) prior to printing a file. # # Copyright 1997-2004 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # set DtDbVersion=1.0 # # Define the HTMLDOC book file type to be any file with the ".book" extension # or starting with the string #HTMLDOC. # DATA_CRITERIA HTMLDOCBOOK_1 { ACTIONS Open ICON htmldoc NAME_PATTERN *.book CONTENT 0 string #HTMLDOC MODE f&!x DATA_ATTRIBUTES_NAME HTMLDOCBOOK } DATA_ATTRIBUTES HTMLDOCBOOK { DESCRIPTION HTMLDOC Book File ICON htmldoc ACTIONS Open NAME_TEMPLATE %s.book IS_TEXT false MIME_TYPE application/vnd.htmldoc-book } # # The htmldoc action invokes the HTMLDOC GUI. # ACTION htmldoc { LABEL HTMLDOC ICON htmldoc TYPE COMMAND WINDOW_TYPE NO_STDIO EXEC_STRING @bindir@/htmldoc %(File)Arg_1% DESCRIPTION HTMLDOC converts HTML files and web pages to PDF and PostScript. } # # The Open action opens a HTMLDOC book file... # ACTION Open { LABEL Open ARG_TYPE HTMLDOCBOOK TYPE COMMAND WINDOW_TYPE NO_STDIO EXEC_STRING @bindir@/htmldoc %(File)Arg_1% DESCRIPTION This action opens a HTMLDOC book file. } # # End of "$Id: htmldoc.dt.in 1316 2004-06-17 18:30:20Z swdev $". # htmldoc-1.8.27/desktop/htmldoc.s.pm0100664000212600000240000000322710063126214015623 0ustar mikeuser/* XPM */ static char * htmldoc_s_pm[] = { "24 24 64 1", " c None", ". c #080604", "+ c #0E1211", "@ c #131823", "# c #0F1B2E", "$ c #141D1E", "% c #1C1B21", "& c #17254A", "* c #1F2A2B", "= c #202D38", "- c #213326", "; c #342758", "> c #253839", ", c #283C45", "' c #34462B", ") c #244B51", "! c #1C5160", "~ c #265449", "{ c #364C55", "] c #344776", "^ c #1F595C", "/ c #2C516C", "( c #3B514B", "_ c #494B4E", ": c #35585C", "< c #246F75", "[ c #7E3D9A", "} c #3B7047", "| c #42686E", "1 c #516960", "2 c #4A7464", "3 c #596E75", "4 c #6B7273", "5 c #418E66", "6 c #389595", "7 c #707C94", "8 c #3D9889", "9 c #937397", "0 c #709192", "a c #7E9584", "b c #888E8F", "c c #579ADD", "d c #58B28B", "e c #B97E9F", "f c #799FE0", "g c #8AA4AE", "h c #62BCB8", "i c #85AEB5", "j c #8EADA7", "k c #8FB29F", "l c #C989E2", "m c #A7A9A6", "n c #87D8BF", "o c #7ADEE9", "p c #B2CEBE", "q c #C1C5C6", "r c #E2C892", "s c #A7D9EA", "t c #D9BFF4", "u c #CAD3D5", "v c #BFDDE3", "w c #C2E9F0", "x c #E4E8E9", "y c #FCFFFB", "++$%+++. ", "+$4b_$--4m yyy ", "+$qyb*-~uyb. yyyyyyy ", "+*qyb$~*(}'*gtl[]:+ ", "+$))<0qg>/cooh~,[[;#@%+ ", "+.+:jui*/fsvww01,@####. ", "+$$$qp{>]sswwwi1~#&&&&@ ", ".*-*{n,14gsswsi22!!///= ", ".._++^/vi0iiii381~:^)), ", "..$++>)3wh51|:|k1:{:{{, ", "...++>{{|bpreha(3==%%{, ", "...+.->*(>,~(,,){=,,={, ", "..+++===(*>:>>*{:==,={, "}; htmldoc-1.8.27/desktop/htmldoc.open.fti0100664000212600000240000020153010063346076016477 0ustar mikeuser# Converted using "png2fti -o htmldoc-32.png"... color(56); bgnpolygon(); vertex(14.00, 71.33); vertex(24.75, 76.71); vertex(24.75, 75.63); vertex(17.23, 71.87); vertex(17.23, 68.65); vertex(16.15, 68.11); vertex(16.15, 63.81); vertex(17.23, 64.34); vertex(17.23, 62.19); vertex(15.08, 61.12); vertex(15.08, 60.04); vertex(17.23, 61.12); vertex(17.23, 56.82); vertex(16.15, 56.28); vertex(16.15, 54.13); vertex(15.08, 53.59); vertex(15.08, 50.37); vertex(16.15, 50.90); vertex(16.15, 49.83); vertex(18.30, 50.90); vertex(18.30, 48.75); vertex(15.08, 47.14); vertex(15.08, 46.06); vertex(16.15, 46.60); vertex(16.15, 45.53); vertex(17.23, 46.06); vertex(17.23, 43.91); vertex(21.53, 46.06); vertex(21.53, 42.84); vertex(17.23, 40.69); vertex(17.23, 39.61); vertex(14.00, 38.00); endpolygon(); color(56); bgnoutlinepolygon(); vertex(14.00, 38.00); vertex(21.53, 41.76); vertex(21.53, 40.69); vertex(14.00, 36.92); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(17.23, 71.87); vertex(18.30, 72.41); vertex(18.30, 71.33); vertex(17.23, 70.80); endoutlinepolygon(57); color(55); bgnpolygon(); vertex(17.23, 70.80); vertex(20.45, 72.41); vertex(20.45, 71.33); vertex(20.45, 70.26); vertex(17.23, 68.65); endpolygon(); color(57); bgnpolygon(); vertex(16.15, 68.11); vertex(17.23, 68.65); vertex(17.23, 65.42); vertex(17.23, 64.34); vertex(16.15, 63.81); endpolygon(); color(55); bgnpolygon(); vertex(17.23, 64.34); vertex(29.05, 70.26); vertex(29.05, 69.18); vertex(29.05, 68.11); vertex(17.23, 62.19); endpolygon(); color(57); bgnoutlinepolygon(); vertex(15.08, 61.12); vertex(16.15, 61.66); vertex(16.15, 60.58); vertex(15.08, 60.04); endoutlinepolygon(57); color(55); bgnpolygon(); vertex(17.23, 61.12); vertex(20.45, 62.73); vertex(20.45, 59.51); vertex(20.45, 58.43); vertex(17.23, 56.82); endpolygon(); color(57); bgnoutlinepolygon(); vertex(16.15, 56.28); vertex(17.23, 56.82); vertex(17.23, 55.74); vertex(16.15, 55.20); endoutlinepolygon(57); color(58); bgnoutlinepolygon(); vertex(16.15, 55.20); vertex(17.23, 55.74); vertex(17.23, 54.67); vertex(16.15, 54.13); endoutlinepolygon(58); color(57); bgnoutlinepolygon(); vertex(15.08, 53.59); vertex(16.15, 54.13); vertex(16.15, 53.05); vertex(15.08, 52.52); endoutlinepolygon(57); color(98); bgnoutlinepolygon(); vertex(15.08, 52.52); vertex(16.15, 53.05); vertex(16.15, 51.98); vertex(15.08, 51.44); endoutlinepolygon(98); color(99); bgnoutlinepolygon(); vertex(15.08, 51.44); vertex(17.23, 52.52); vertex(17.23, 51.44); vertex(15.08, 50.37); endoutlinepolygon(99); color(57); bgnoutlinepolygon(); vertex(16.15, 50.90); vertex(17.23, 51.44); vertex(17.23, 50.37); vertex(16.15, 49.83); endoutlinepolygon(57); color(98); bgnoutlinepolygon(); vertex(18.30, 50.90); vertex(19.38, 51.44); vertex(19.38, 50.37); vertex(18.30, 49.83); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(18.30, 49.83); vertex(19.38, 50.37); vertex(19.38, 49.29); vertex(18.30, 48.75); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(15.08, 47.14); vertex(16.15, 47.68); vertex(16.15, 46.60); vertex(15.08, 46.06); endoutlinepolygon(57); color(106); bgnpolygon(); vertex(16.15, 46.60); vertex(17.23, 47.14); vertex(17.23, 46.06); vertex(18.30, 46.60); vertex(18.30, 45.53); vertex(17.23, 44.99); vertex(17.23, 46.06); vertex(16.15, 45.53); endpolygon(); color(97); bgnoutlinepolygon(); vertex(17.23, 44.99); vertex(18.30, 45.53); vertex(18.30, 44.45); vertex(17.23, 43.91); endoutlinepolygon(97); color(97); bgnpolygon(); vertex(21.53, 46.06); vertex(22.60, 46.60); vertex(22.60, 45.53); vertex(22.60, 44.45); vertex(21.53, 43.91); endpolygon(); color(57); bgnoutlinepolygon(); vertex(21.53, 43.91); vertex(22.60, 44.45); vertex(22.60, 43.38); vertex(21.53, 42.84); endoutlinepolygon(57); color(32); bgnoutlinepolygon(); vertex(17.23, 40.69); vertex(18.30, 41.23); vertex(18.30, 40.15); vertex(17.23, 39.61); endoutlinepolygon(32); color(97); bgnoutlinepolygon(); vertex(21.53, 41.76); vertex(23.68, 42.84); vertex(23.68, 41.76); vertex(21.53, 40.69); endoutlinepolygon(97); color(56); bgnpolygon(); vertex(18.30, 72.41); vertex(22.60, 74.56); vertex(22.60, 73.48); vertex(21.53, 72.95); vertex(21.53, 71.87); vertex(21.53, 70.80); vertex(20.45, 70.26); vertex(20.45, 72.41); vertex(18.30, 71.33); endpolygon(); color(55); bgnpolygon(); vertex(17.23, 68.65); vertex(20.45, 70.26); vertex(20.45, 67.03); vertex(20.45, 65.96); vertex(17.23, 64.34); endpolygon(); color(97); bgnoutlinepolygon(); vertex(29.05, 70.26); vertex(30.13, 70.80); vertex(30.13, 69.72); vertex(29.05, 69.18); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(29.05, 69.18); vertex(30.13, 69.72); vertex(30.13, 68.65); vertex(29.05, 68.11); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(16.15, 61.66); vertex(17.23, 62.19); vertex(17.23, 61.12); vertex(16.15, 60.58); endoutlinepolygon(56); color(99); bgnpolygon(); vertex(20.45, 62.73); vertex(21.53, 63.27); vertex(21.53, 61.12); vertex(23.68, 62.19); vertex(23.68, 61.12); vertex(20.45, 59.51); endpolygon(); color(98); bgnoutlinepolygon(); vertex(20.45, 59.51); vertex(23.68, 61.12); vertex(23.68, 60.04); vertex(20.45, 58.43); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(17.23, 56.82); vertex(20.45, 58.43); vertex(20.45, 57.35); vertex(17.23, 55.74); endoutlinepolygon(55); color(157); bgnoutlinepolygon(); vertex(17.23, 55.74); vertex(18.30, 56.28); vertex(18.30, 55.20); vertex(17.23, 54.67); endoutlinepolygon(157); color(99); bgnoutlinepolygon(); vertex(16.15, 54.13); vertex(17.23, 54.67); vertex(17.23, 53.59); vertex(16.15, 53.05); endoutlinepolygon(99); color(100); bgnoutlinepolygon(); vertex(16.15, 53.05); vertex(17.23, 53.59); vertex(17.23, 52.52); vertex(16.15, 51.98); endoutlinepolygon(100); color(98); bgnpolygon(); vertex(17.23, 52.52); vertex(18.30, 53.05); vertex(18.30, 51.98); vertex(20.45, 53.05); vertex(20.45, 51.98); vertex(17.23, 50.37); endpolygon(); color(99); bgnoutlinepolygon(); vertex(19.38, 51.44); vertex(20.45, 51.98); vertex(20.45, 50.90); vertex(19.38, 50.37); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(19.38, 50.37); vertex(20.45, 50.90); vertex(20.45, 49.83); vertex(19.38, 49.29); endoutlinepolygon(156); color(56); bgnpolygon(); vertex(16.15, 47.68); vertex(19.38, 49.29); vertex(19.38, 48.22); vertex(18.30, 47.68); vertex(18.30, 46.60); vertex(20.45, 47.68); vertex(20.45, 46.60); vertex(21.53, 47.14); vertex(21.53, 46.06); vertex(18.30, 44.45); vertex(18.30, 46.60); vertex(17.23, 46.06); vertex(17.23, 47.14); vertex(16.15, 46.60); endpolygon(); color(98); bgnpolygon(); vertex(22.60, 46.60); vertex(24.75, 47.68); vertex(24.75, 46.60); vertex(24.75, 45.53); vertex(22.60, 44.45); endpolygon(); color(97); bgnoutlinepolygon(); vertex(22.60, 44.45); vertex(23.68, 44.99); vertex(23.68, 43.91); vertex(22.60, 43.38); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(18.30, 41.23); vertex(21.53, 42.84); vertex(21.53, 41.76); vertex(18.30, 40.15); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(23.68, 42.84); vertex(24.75, 43.38); vertex(24.75, 42.30); vertex(23.68, 41.76); endoutlinepolygon(57); color(57); bgnpolygon(); vertex(22.60, 74.56); vertex(23.68, 75.10); vertex(23.68, 74.02); vertex(24.75, 74.56); vertex(24.75, 73.48); vertex(23.68, 72.95); vertex(23.68, 71.87); vertex(21.53, 70.80); vertex(21.53, 72.95); vertex(22.60, 73.48); endpolygon(); color(56); bgnpolygon(); vertex(20.45, 70.26); vertex(21.53, 70.80); vertex(21.53, 67.57); vertex(21.53, 66.49); vertex(20.45, 65.96); endpolygon(); color(98); bgnoutlinepolygon(); vertex(30.13, 70.80); vertex(31.20, 71.33); vertex(31.20, 70.26); vertex(30.13, 69.72); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(30.13, 69.72); vertex(31.20, 70.26); vertex(31.20, 69.18); vertex(30.13, 68.65); endoutlinepolygon(97); color(55); bgnoutlinepolygon(); vertex(17.23, 62.19); vertex(20.45, 63.81); vertex(20.45, 62.73); vertex(17.23, 61.12); endoutlinepolygon(55); color(140); bgnpolygon(); vertex(21.53, 63.27); vertex(22.60, 63.81); vertex(22.60, 62.73); vertex(22.60, 61.66); vertex(21.53, 61.12); endpolygon(); color(98); bgnoutlinepolygon(); vertex(23.68, 62.19); vertex(25.83, 63.27); vertex(25.83, 62.19); vertex(23.68, 61.12); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(23.68, 61.12); vertex(24.75, 61.66); vertex(24.75, 60.58); vertex(23.68, 60.04); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(20.45, 58.43); vertex(21.53, 58.97); vertex(21.53, 57.89); vertex(20.45, 57.35); endoutlinepolygon(97); color(156); bgnoutlinepolygon(); vertex(18.30, 56.28); vertex(20.45, 57.35); vertex(20.45, 56.28); vertex(18.30, 55.20); endoutlinepolygon(156); color(100); bgnoutlinepolygon(); vertex(17.23, 54.67); vertex(18.30, 55.20); vertex(18.30, 54.13); vertex(17.23, 53.59); endoutlinepolygon(100); color(99); bgnoutlinepolygon(); vertex(17.23, 53.59); vertex(18.30, 54.13); vertex(18.30, 53.05); vertex(17.23, 52.52); endoutlinepolygon(99); color(97); bgnoutlinepolygon(); vertex(18.30, 53.05); vertex(19.38, 53.59); vertex(19.38, 52.52); vertex(18.30, 51.98); endoutlinepolygon(97); color(99); bgnoutlinepolygon(); vertex(20.45, 53.05); vertex(21.53, 53.59); vertex(21.53, 52.52); vertex(20.45, 51.98); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(20.45, 51.98); vertex(21.53, 52.52); vertex(21.53, 51.44); vertex(20.45, 50.90); endoutlinepolygon(156); color(205); bgnoutlinepolygon(); vertex(20.45, 50.90); vertex(21.53, 51.44); vertex(21.53, 50.37); vertex(20.45, 49.83); endoutlinepolygon(205); color(107); bgnoutlinepolygon(); vertex(19.38, 49.29); vertex(20.45, 49.83); vertex(20.45, 48.75); vertex(19.38, 48.22); endoutlinepolygon(107); color(57); bgnoutlinepolygon(); vertex(18.30, 47.68); vertex(19.38, 48.22); vertex(19.38, 47.14); vertex(18.30, 46.60); endoutlinepolygon(57); color(98); bgnoutlinepolygon(); vertex(20.45, 47.68); vertex(21.53, 48.22); vertex(21.53, 47.14); vertex(20.45, 46.60); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(21.53, 47.14); vertex(22.60, 47.68); vertex(22.60, 46.60); vertex(21.53, 46.06); endoutlinepolygon(97); color(148); bgnoutlinepolygon(); vertex(24.75, 47.68); vertex(25.83, 48.22); vertex(25.83, 47.14); vertex(24.75, 46.60); endoutlinepolygon(148); color(106); bgnoutlinepolygon(); vertex(24.75, 46.60); vertex(25.83, 47.14); vertex(25.83, 46.06); vertex(24.75, 45.53); endoutlinepolygon(106); color(56); bgnoutlinepolygon(); vertex(23.68, 44.99); vertex(25.83, 46.06); vertex(25.83, 44.99); vertex(23.68, 43.91); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(21.53, 42.84); vertex(22.60, 43.38); vertex(22.60, 42.30); vertex(21.53, 41.76); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(24.75, 43.38); vertex(25.83, 43.91); vertex(25.83, 42.84); vertex(24.75, 42.30); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(23.68, 75.10); vertex(26.90, 76.71); vertex(26.90, 75.63); vertex(23.68, 74.02); endoutlinepolygon(56); color(98); bgnpolygon(); vertex(24.75, 74.56); vertex(25.83, 75.10); vertex(25.83, 74.02); vertex(25.83, 72.95); vertex(23.68, 71.87); vertex(23.68, 72.95); vertex(24.75, 73.48); endpolygon(); color(57); bgnpolygon(); vertex(21.53, 70.80); vertex(23.68, 71.87); vertex(23.68, 70.80); vertex(22.60, 70.26); vertex(22.60, 69.18); vertex(22.60, 68.11); vertex(21.53, 67.57); endpolygon(); color(98); bgnoutlinepolygon(); vertex(21.53, 67.57); vertex(22.60, 68.11); vertex(22.60, 67.03); vertex(21.53, 66.49); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(31.20, 71.33); vertex(32.28, 71.87); vertex(32.28, 70.80); vertex(31.20, 70.26); endoutlinepolygon(97); color(98); bgnoutlinepolygon(); vertex(31.20, 70.26); vertex(32.28, 70.80); vertex(32.28, 69.72); vertex(31.20, 69.18); endoutlinepolygon(98); color(58); bgnoutlinepolygon(); vertex(20.45, 63.81); vertex(21.53, 64.34); vertex(21.53, 63.27); vertex(20.45, 62.73); endoutlinepolygon(58); color(139); bgnoutlinepolygon(); vertex(22.60, 63.81); vertex(25.83, 65.42); vertex(25.83, 64.34); vertex(22.60, 62.73); endoutlinepolygon(139); color(99); bgnoutlinepolygon(); vertex(22.60, 62.73); vertex(24.75, 63.81); vertex(24.75, 62.73); vertex(22.60, 61.66); endoutlinepolygon(99); color(55); bgnoutlinepolygon(); vertex(25.83, 63.27); vertex(29.05, 64.88); vertex(29.05, 63.81); vertex(25.83, 62.19); endoutlinepolygon(55); color(98); bgnpolygon(); vertex(24.75, 61.66); vertex(25.83, 62.19); vertex(25.83, 61.12); vertex(25.83, 60.04); vertex(21.53, 57.89); vertex(21.53, 58.97); vertex(24.75, 60.58); endpolygon(); color(97); bgnoutlinepolygon(); vertex(20.45, 57.35); vertex(22.60, 58.43); vertex(22.60, 57.35); vertex(20.45, 56.28); endoutlinepolygon(97); color(98); bgnpolygon(); vertex(18.30, 55.20); vertex(20.45, 56.28); vertex(20.45, 55.20); vertex(23.68, 56.82); vertex(23.68, 55.74); vertex(21.53, 54.67); vertex(21.53, 53.59); vertex(19.38, 52.52); vertex(19.38, 53.59); vertex(18.30, 53.05); endpolygon(); color(147); bgnoutlinepolygon(); vertex(21.53, 53.59); vertex(22.60, 54.13); vertex(22.60, 53.05); vertex(21.53, 52.52); endoutlinepolygon(147); color(205); bgnoutlinepolygon(); vertex(21.53, 52.52); vertex(22.60, 53.05); vertex(22.60, 51.98); vertex(21.53, 51.44); endoutlinepolygon(205); color(197); bgnpolygon(); vertex(21.53, 51.44); vertex(22.60, 51.98); vertex(22.60, 50.90); vertex(22.60, 49.83); vertex(20.45, 48.75); vertex(20.45, 49.83); vertex(21.53, 50.37); endpolygon(); color(56); bgnoutlinepolygon(); vertex(19.38, 48.22); vertex(20.45, 48.75); vertex(20.45, 47.68); vertex(19.38, 47.14); endoutlinepolygon(56); color(139); bgnoutlinepolygon(); vertex(21.53, 48.22); vertex(22.60, 48.75); vertex(22.60, 47.68); vertex(21.53, 47.14); endoutlinepolygon(139); color(98); bgnoutlinepolygon(); vertex(22.60, 47.68); vertex(23.68, 48.22); vertex(23.68, 47.14); vertex(22.60, 46.60); endoutlinepolygon(98); color(206); bgnoutlinepolygon(); vertex(25.83, 48.22); vertex(26.90, 48.75); vertex(26.90, 47.68); vertex(25.83, 47.14); endoutlinepolygon(206); color(107); bgnoutlinepolygon(); vertex(25.83, 47.14); vertex(26.90, 47.68); vertex(26.90, 46.60); vertex(25.83, 46.06); endoutlinepolygon(107); color(98); bgnoutlinepolygon(); vertex(25.83, 46.06); vertex(26.90, 46.60); vertex(26.90, 45.53); vertex(25.83, 44.99); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(22.60, 43.38); vertex(23.68, 43.91); vertex(23.68, 42.84); vertex(22.60, 42.30); endoutlinepolygon(97); color(98); bgnoutlinepolygon(); vertex(25.83, 43.91); vertex(26.90, 44.45); vertex(26.90, 43.38); vertex(25.83, 42.84); endoutlinepolygon(98); color(55); bgnpolygon(); vertex(25.83, 75.10); vertex(29.05, 76.71); vertex(29.05, 75.63); vertex(29.05, 74.56); vertex(25.83, 72.95); endpolygon(); color(98); bgnpolygon(); vertex(23.68, 71.87); vertex(24.75, 72.41); vertex(24.75, 70.26); vertex(23.68, 69.72); vertex(23.68, 68.65); vertex(22.60, 68.11); vertex(22.60, 70.26); vertex(23.68, 70.80); endpolygon(); color(99); bgnoutlinepolygon(); vertex(22.60, 68.11); vertex(23.68, 68.65); vertex(23.68, 67.57); vertex(22.60, 67.03); endoutlinepolygon(99); color(156); bgnpolygon(); vertex(32.28, 71.87); vertex(33.35, 72.41); vertex(33.35, 71.33); vertex(33.35, 70.26); vertex(32.28, 69.72); endpolygon(); color(99); bgnoutlinepolygon(); vertex(21.53, 64.34); vertex(23.68, 65.42); vertex(23.68, 64.34); vertex(21.53, 63.27); endoutlinepolygon(99); color(55); bgnoutlinepolygon(); vertex(25.83, 65.42); vertex(29.05, 67.03); vertex(29.05, 65.96); vertex(25.83, 64.34); endoutlinepolygon(55); color(98); bgnoutlinepolygon(); vertex(24.75, 63.81); vertex(25.83, 64.34); vertex(25.83, 63.27); vertex(24.75, 62.73); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(29.05, 64.88); vertex(31.20, 65.96); vertex(31.20, 64.88); vertex(29.05, 63.81); endoutlinepolygon(98); color(55); bgnpolygon(); vertex(25.83, 62.19); vertex(29.05, 63.81); vertex(29.05, 62.73); vertex(29.05, 61.66); vertex(25.83, 60.04); endpolygon(); color(98); bgnoutlinepolygon(); vertex(22.60, 58.43); vertex(25.83, 60.04); vertex(25.83, 58.97); vertex(22.60, 57.35); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(20.45, 56.28); vertex(21.53, 56.82); vertex(21.53, 55.74); vertex(20.45, 55.20); endoutlinepolygon(97); color(99); bgnoutlinepolygon(); vertex(23.68, 56.82); vertex(24.75, 57.35); vertex(24.75, 56.28); vertex(23.68, 55.74); endoutlinepolygon(99); color(99); bgnoutlinepolygon(); vertex(21.53, 54.67); vertex(22.60, 55.20); vertex(22.60, 54.13); vertex(21.53, 53.59); endoutlinepolygon(99); color(157); bgnoutlinepolygon(); vertex(22.60, 54.13); vertex(23.68, 54.67); vertex(23.68, 53.59); vertex(22.60, 53.05); endoutlinepolygon(157); color(197); bgnoutlinepolygon(); vertex(22.60, 53.05); vertex(23.68, 53.59); vertex(23.68, 52.52); vertex(22.60, 51.98); endoutlinepolygon(197); color(156); bgnoutlinepolygon(); vertex(22.60, 51.98); vertex(23.68, 52.52); vertex(23.68, 51.44); vertex(22.60, 50.90); endoutlinepolygon(156); color(98); bgnoutlinepolygon(); vertex(22.60, 50.90); vertex(23.68, 51.44); vertex(23.68, 50.37); vertex(22.60, 49.83); endoutlinepolygon(98); color(157); bgnoutlinepolygon(); vertex(20.45, 48.75); vertex(21.53, 49.29); vertex(21.53, 48.22); vertex(20.45, 47.68); endoutlinepolygon(157); color(98); bgnoutlinepolygon(); vertex(22.60, 48.75); vertex(23.68, 49.29); vertex(23.68, 48.22); vertex(22.60, 47.68); endoutlinepolygon(98); color(147); bgnoutlinepolygon(); vertex(23.68, 48.22); vertex(24.75, 48.75); vertex(24.75, 47.68); vertex(23.68, 47.14); endoutlinepolygon(147); color(198); bgnoutlinepolygon(); vertex(26.90, 48.75); vertex(27.98, 49.29); vertex(27.98, 48.22); vertex(26.90, 47.68); endoutlinepolygon(198); color(156); bgnoutlinepolygon(); vertex(26.90, 47.68); vertex(27.98, 48.22); vertex(27.98, 47.14); vertex(26.90, 46.60); endoutlinepolygon(156); color(57); bgnoutlinepolygon(); vertex(26.90, 46.60); vertex(27.98, 47.14); vertex(27.98, 46.06); vertex(26.90, 45.53); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(23.68, 43.91); vertex(24.75, 44.45); vertex(24.75, 43.38); vertex(23.68, 42.84); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(26.90, 44.45); vertex(27.98, 44.99); vertex(27.98, 43.91); vertex(26.90, 43.38); endoutlinepolygon(56); color(56); bgnpolygon(); vertex(29.05, 76.71); vertex(30.13, 77.25); vertex(30.13, 76.17); vertex(31.20, 76.71); vertex(31.20, 75.63); vertex(29.05, 74.56); endpolygon(); color(139); bgnoutlinepolygon(); vertex(24.75, 72.41); vertex(25.83, 72.95); vertex(25.83, 71.87); vertex(24.75, 71.33); endoutlinepolygon(139); color(140); bgnpolygon(); vertex(24.75, 71.33); vertex(25.83, 71.87); vertex(25.83, 69.72); vertex(25.83, 68.65); vertex(23.68, 67.57); vertex(23.68, 69.72); vertex(24.75, 70.26); endpolygon(); color(55); bgnpolygon(); vertex(33.35, 72.41); vertex(35.51, 73.48); vertex(35.51, 72.41); vertex(35.51, 71.33); vertex(33.35, 70.26); endpolygon(); color(98); bgnoutlinepolygon(); vertex(23.68, 65.42); vertex(25.83, 66.49); vertex(25.83, 65.42); vertex(23.68, 64.34); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(29.05, 67.03); vertex(31.20, 68.11); vertex(31.20, 67.03); vertex(29.05, 65.96); endoutlinepolygon(97); color(55); bgnoutlinepolygon(); vertex(25.83, 64.34); vertex(29.05, 65.96); vertex(29.05, 64.88); vertex(25.83, 63.27); endoutlinepolygon(55); color(139); bgnoutlinepolygon(); vertex(31.20, 65.96); vertex(32.28, 66.49); vertex(32.28, 65.42); vertex(31.20, 64.88); endoutlinepolygon(139); color(98); bgnpolygon(); vertex(29.05, 63.81); vertex(30.13, 64.34); vertex(30.13, 63.27); vertex(30.13, 62.19); vertex(29.05, 61.66); endpolygon(); color(156); bgnoutlinepolygon(); vertex(25.83, 60.04); vertex(29.05, 61.66); vertex(29.05, 60.58); vertex(25.83, 58.97); endoutlinepolygon(156); color(98); bgnoutlinepolygon(); vertex(21.53, 56.82); vertex(24.75, 58.43); vertex(24.75, 57.35); vertex(21.53, 55.74); endoutlinepolygon(98); color(148); bgnoutlinepolygon(); vertex(24.75, 57.35); vertex(25.83, 57.89); vertex(25.83, 56.82); vertex(24.75, 56.28); endoutlinepolygon(148); color(139); bgnoutlinepolygon(); vertex(22.60, 55.20); vertex(23.68, 55.74); vertex(23.68, 54.67); vertex(22.60, 54.13); endoutlinepolygon(139); color(197); bgnoutlinepolygon(); vertex(23.68, 54.67); vertex(24.75, 55.20); vertex(24.75, 54.13); vertex(23.68, 53.59); endoutlinepolygon(197); color(147); bgnoutlinepolygon(); vertex(23.68, 53.59); vertex(24.75, 54.13); vertex(24.75, 53.05); vertex(23.68, 52.52); endoutlinepolygon(147); color(56); bgnpolygon(); vertex(23.68, 52.52); vertex(24.75, 53.05); vertex(24.75, 51.98); vertex(24.75, 50.90); vertex(23.68, 50.37); endpolygon(); color(197); bgnoutlinepolygon(); vertex(21.53, 49.29); vertex(22.60, 49.83); vertex(22.60, 48.75); vertex(21.53, 48.22); endoutlinepolygon(197); color(197); bgnoutlinepolygon(); vertex(23.68, 49.29); vertex(24.75, 49.83); vertex(24.75, 48.75); vertex(23.68, 48.22); endoutlinepolygon(197); color(206); bgnoutlinepolygon(); vertex(24.75, 48.75); vertex(25.83, 49.29); vertex(25.83, 48.22); vertex(24.75, 47.68); endoutlinepolygon(206); color(149); bgnoutlinepolygon(); vertex(27.98, 49.29); vertex(29.05, 49.83); vertex(29.05, 48.75); vertex(27.98, 48.22); endoutlinepolygon(149); color(206); bgnoutlinepolygon(); vertex(27.98, 48.22); vertex(29.05, 48.75); vertex(29.05, 47.68); vertex(27.98, 47.14); endoutlinepolygon(206); color(97); bgnoutlinepolygon(); vertex(27.98, 47.14); vertex(29.05, 47.68); vertex(29.05, 46.60); vertex(27.98, 46.06); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(24.75, 44.45); vertex(25.83, 44.99); vertex(25.83, 43.91); vertex(24.75, 43.38); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(27.98, 44.99); vertex(30.13, 46.06); vertex(30.13, 44.99); vertex(27.98, 43.91); endoutlinepolygon(57); color(55); bgnpolygon(); vertex(32.28, 78.32); vertex(38.73, 81.55); vertex(38.73, 80.47); vertex(35.51, 78.86); vertex(35.51, 77.78); vertex(32.28, 76.17); endpolygon(); color(55); bgnpolygon(); vertex(25.83, 72.95); vertex(29.05, 74.56); vertex(29.05, 71.33); vertex(29.05, 70.26); vertex(25.83, 68.65); endpolygon(); color(155); bgnoutlinepolygon(); vertex(35.51, 73.48); vertex(36.58, 74.02); vertex(36.58, 72.95); vertex(35.51, 72.41); endoutlinepolygon(155); color(156); bgnoutlinepolygon(); vertex(35.51, 72.41); vertex(36.58, 72.95); vertex(36.58, 71.87); vertex(35.51, 71.33); endoutlinepolygon(156); color(55); bgnoutlinepolygon(); vertex(25.83, 66.49); vertex(29.05, 68.11); vertex(29.05, 67.03); vertex(25.83, 65.42); endoutlinepolygon(55); color(98); bgnoutlinepolygon(); vertex(31.20, 68.11); vertex(32.28, 68.65); vertex(32.28, 67.57); vertex(31.20, 67.03); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(29.05, 65.96); vertex(30.13, 66.49); vertex(30.13, 65.42); vertex(29.05, 64.88); endoutlinepolygon(57); color(197); bgnoutlinepolygon(); vertex(32.28, 66.49); vertex(33.35, 67.03); vertex(33.35, 65.96); vertex(32.28, 65.42); endoutlinepolygon(197); color(139); bgnoutlinepolygon(); vertex(30.13, 64.34); vertex(31.20, 64.88); vertex(31.20, 63.81); vertex(30.13, 63.27); endoutlinepolygon(139); color(149); bgnoutlinepolygon(); vertex(30.13, 63.27); vertex(31.20, 63.81); vertex(31.20, 62.73); vertex(30.13, 62.19); endoutlinepolygon(149); color(107); bgnoutlinepolygon(); vertex(29.05, 61.66); vertex(30.13, 62.19); vertex(30.13, 61.12); vertex(29.05, 60.58); endoutlinepolygon(107); color(99); bgnoutlinepolygon(); vertex(24.75, 58.43); vertex(25.83, 58.97); vertex(25.83, 57.89); vertex(24.75, 57.35); endoutlinepolygon(99); color(157); bgnoutlinepolygon(); vertex(25.83, 57.89); vertex(26.90, 58.43); vertex(26.90, 57.35); vertex(25.83, 56.82); endoutlinepolygon(157); color(156); bgnoutlinepolygon(); vertex(23.68, 55.74); vertex(24.75, 56.28); vertex(24.75, 55.20); vertex(23.68, 54.67); endoutlinepolygon(156); color(147); bgnoutlinepolygon(); vertex(24.75, 55.20); vertex(25.83, 55.74); vertex(25.83, 54.67); vertex(24.75, 54.13); endoutlinepolygon(147); color(57); bgnpolygon(); vertex(24.75, 54.13); vertex(25.83, 54.67); vertex(25.83, 53.59); vertex(25.83, 52.52); vertex(24.75, 51.98); endpolygon(); color(98); bgnoutlinepolygon(); vertex(24.75, 51.98); vertex(25.83, 52.52); vertex(25.83, 51.44); vertex(24.75, 50.90); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(22.60, 49.83); vertex(23.68, 50.37); vertex(23.68, 49.29); vertex(22.60, 48.75); endoutlinepolygon(97); color(156); bgnoutlinepolygon(); vertex(24.75, 49.83); vertex(25.83, 50.37); vertex(25.83, 49.29); vertex(24.75, 48.75); endoutlinepolygon(156); color(197); bgnoutlinepolygon(); vertex(25.83, 49.29); vertex(26.90, 49.83); vertex(26.90, 48.75); vertex(25.83, 48.22); endoutlinepolygon(197); color(107); bgnoutlinepolygon(); vertex(29.05, 49.83); vertex(30.13, 50.37); vertex(30.13, 49.29); vertex(29.05, 48.75); endoutlinepolygon(107); color(166); bgnoutlinepolygon(); vertex(29.05, 48.75); vertex(30.13, 49.29); vertex(30.13, 48.22); vertex(29.05, 47.68); endoutlinepolygon(166); color(106); bgnoutlinepolygon(); vertex(29.05, 47.68); vertex(30.13, 48.22); vertex(30.13, 47.14); vertex(29.05, 46.60); endoutlinepolygon(106); color(98); bgnoutlinepolygon(); vertex(25.83, 44.99); vertex(26.90, 45.53); vertex(26.90, 44.45); vertex(25.83, 43.91); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(30.13, 46.06); vertex(32.28, 47.14); vertex(32.28, 46.06); vertex(30.13, 44.99); endoutlinepolygon(98); color(54); bgnoutlinepolygon(); vertex(38.73, 81.55); vertex(41.96, 83.16); vertex(41.96, 82.09); vertex(38.73, 80.47); endoutlinepolygon(54); color(54); bgnoutlinepolygon(); vertex(35.51, 78.86); vertex(37.66, 79.94); vertex(37.66, 78.86); vertex(35.51, 77.78); endoutlinepolygon(54); color(97); bgnpolygon(); vertex(29.05, 74.56); vertex(30.13, 75.10); vertex(30.13, 74.02); vertex(30.13, 72.95); vertex(29.05, 72.41); endpolygon(); color(98); bgnpolygon(); vertex(29.05, 72.41); vertex(30.13, 72.95); vertex(30.13, 71.87); vertex(32.28, 72.95); vertex(32.28, 71.87); vertex(29.05, 70.26); endpolygon(); color(56); bgnoutlinepolygon(); vertex(36.58, 74.02); vertex(38.73, 75.10); vertex(38.73, 74.02); vertex(36.58, 72.95); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(36.58, 72.95); vertex(37.66, 73.48); vertex(37.66, 72.41); vertex(36.58, 71.87); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(29.05, 68.11); vertex(30.13, 68.65); vertex(30.13, 67.57); vertex(29.05, 67.03); endoutlinepolygon(57); color(157); bgnoutlinepolygon(); vertex(32.28, 68.65); vertex(33.35, 69.18); vertex(33.35, 68.11); vertex(32.28, 67.57); endoutlinepolygon(157); color(98); bgnoutlinepolygon(); vertex(30.13, 66.49); vertex(31.20, 67.03); vertex(31.20, 65.96); vertex(30.13, 65.42); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(33.35, 67.03); vertex(35.51, 68.11); vertex(35.51, 67.03); vertex(33.35, 65.96); endoutlinepolygon(55); color(140); bgnoutlinepolygon(); vertex(31.20, 64.88); vertex(32.28, 65.42); vertex(32.28, 64.34); vertex(31.20, 63.81); endoutlinepolygon(140); color(158); bgnoutlinepolygon(); vertex(31.20, 63.81); vertex(32.28, 64.34); vertex(32.28, 63.27); vertex(31.20, 62.73); endoutlinepolygon(158); color(198); bgnoutlinepolygon(); vertex(30.13, 62.19); vertex(31.20, 62.73); vertex(31.20, 61.66); vertex(30.13, 61.12); endoutlinepolygon(198); color(139); bgnoutlinepolygon(); vertex(25.83, 58.97); vertex(26.90, 59.51); vertex(26.90, 58.43); vertex(25.83, 57.89); endoutlinepolygon(139); color(156); bgnoutlinepolygon(); vertex(26.90, 58.43); vertex(27.98, 58.97); vertex(27.98, 57.89); vertex(26.90, 57.35); endoutlinepolygon(156); color(197); bgnoutlinepolygon(); vertex(24.75, 56.28); vertex(25.83, 56.82); vertex(25.83, 55.74); vertex(24.75, 55.20); endoutlinepolygon(197); color(57); bgnoutlinepolygon(); vertex(25.83, 55.74); vertex(26.90, 56.28); vertex(26.90, 55.20); vertex(25.83, 54.67); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(25.83, 54.67); vertex(26.90, 55.20); vertex(26.90, 54.13); vertex(25.83, 53.59); endoutlinepolygon(97); color(146); bgnoutlinepolygon(); vertex(25.83, 53.59); vertex(26.90, 54.13); vertex(26.90, 53.05); vertex(25.83, 52.52); endoutlinepolygon(146); color(147); bgnoutlinepolygon(); vertex(25.83, 52.52); vertex(26.90, 53.05); vertex(26.90, 51.98); vertex(25.83, 51.44); endoutlinepolygon(147); color(57); bgnoutlinepolygon(); vertex(23.68, 50.37); vertex(24.75, 50.90); vertex(24.75, 49.83); vertex(23.68, 49.29); endoutlinepolygon(57); color(107); bgnpolygon(); vertex(25.83, 50.37); vertex(26.90, 50.90); vertex(26.90, 49.83); vertex(27.98, 50.37); vertex(27.98, 49.29); vertex(26.90, 48.75); vertex(26.90, 49.83); vertex(25.83, 49.29); endpolygon(); color(106); bgnoutlinepolygon(); vertex(30.13, 50.37); vertex(31.20, 50.90); vertex(31.20, 49.83); vertex(30.13, 49.29); endoutlinepolygon(106); color(124); bgnoutlinepolygon(); vertex(30.13, 49.29); vertex(31.20, 49.83); vertex(31.20, 48.75); vertex(30.13, 48.22); endoutlinepolygon(124); color(148); bgnoutlinepolygon(); vertex(30.13, 48.22); vertex(31.20, 48.75); vertex(31.20, 47.68); vertex(30.13, 47.14); endoutlinepolygon(148); color(57); bgnoutlinepolygon(); vertex(26.90, 45.53); vertex(27.98, 46.06); vertex(27.98, 44.99); vertex(26.90, 44.45); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(32.28, 47.14); vertex(33.35, 47.68); vertex(33.35, 46.60); vertex(32.28, 46.06); endoutlinepolygon(56); color(55); bgnoutlinepolygon(); vertex(37.66, 79.94); vertex(41.96, 82.09); vertex(41.96, 81.01); vertex(37.66, 78.86); endoutlinepolygon(55); color(98); bgnoutlinepolygon(); vertex(30.13, 75.10); vertex(31.20, 75.63); vertex(31.20, 74.56); vertex(30.13, 74.02); endoutlinepolygon(98); color(139); bgnoutlinepolygon(); vertex(30.13, 74.02); vertex(31.20, 74.56); vertex(31.20, 73.48); vertex(30.13, 72.95); endoutlinepolygon(139); color(99); bgnoutlinepolygon(); vertex(30.13, 72.95); vertex(31.20, 73.48); vertex(31.20, 72.41); vertex(30.13, 71.87); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(32.28, 72.95); vertex(33.35, 73.48); vertex(33.35, 72.41); vertex(32.28, 71.87); endoutlinepolygon(156); color(54); bgnoutlinepolygon(); vertex(41.96, 76.71); vertex(43.03, 77.25); vertex(43.03, 76.17); vertex(41.96, 75.63); endoutlinepolygon(54); color(56); bgnoutlinepolygon(); vertex(37.66, 73.48); vertex(39.81, 74.56); vertex(39.81, 73.48); vertex(37.66, 72.41); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(30.13, 68.65); vertex(31.20, 69.18); vertex(31.20, 68.11); vertex(30.13, 67.57); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(33.35, 69.18); vertex(35.51, 70.26); vertex(35.51, 69.18); vertex(33.35, 68.11); endoutlinepolygon(55); color(99); bgnoutlinepolygon(); vertex(31.20, 67.03); vertex(32.28, 67.57); vertex(32.28, 66.49); vertex(31.20, 65.96); endoutlinepolygon(99); color(156); bgnoutlinepolygon(); vertex(35.51, 68.11); vertex(37.66, 69.18); vertex(37.66, 68.11); vertex(35.51, 67.03); endoutlinepolygon(156); color(198); bgnoutlinepolygon(); vertex(32.28, 65.42); vertex(33.35, 65.96); vertex(33.35, 64.88); vertex(32.28, 64.34); endoutlinepolygon(198); color(206); bgnoutlinepolygon(); vertex(32.28, 64.34); vertex(33.35, 64.88); vertex(33.35, 63.81); vertex(32.28, 63.27); endoutlinepolygon(206); color(205); bgnoutlinepolygon(); vertex(31.20, 62.73); vertex(32.28, 63.27); vertex(32.28, 62.19); vertex(31.20, 61.66); endoutlinepolygon(205); color(148); bgnoutlinepolygon(); vertex(26.90, 59.51); vertex(27.98, 60.04); vertex(27.98, 58.97); vertex(26.90, 58.43); endoutlinepolygon(148); color(106); bgnoutlinepolygon(); vertex(27.98, 58.97); vertex(29.05, 59.51); vertex(29.05, 58.43); vertex(27.98, 57.89); endoutlinepolygon(106); color(147); bgnoutlinepolygon(); vertex(25.83, 56.82); vertex(26.90, 57.35); vertex(26.90, 56.28); vertex(25.83, 55.74); endoutlinepolygon(147); color(97); bgnoutlinepolygon(); vertex(26.90, 56.28); vertex(27.98, 56.82); vertex(27.98, 55.74); vertex(26.90, 55.20); endoutlinepolygon(97); color(147); bgnoutlinepolygon(); vertex(26.90, 55.20); vertex(27.98, 55.74); vertex(27.98, 54.67); vertex(26.90, 54.13); endoutlinepolygon(147); color(188); bgnoutlinepolygon(); vertex(26.90, 54.13); vertex(27.98, 54.67); vertex(27.98, 53.59); vertex(26.90, 53.05); endoutlinepolygon(188); color(197); bgnoutlinepolygon(); vertex(26.90, 53.05); vertex(27.98, 53.59); vertex(27.98, 52.52); vertex(26.90, 51.98); endoutlinepolygon(197); color(106); bgnoutlinepolygon(); vertex(24.75, 50.90); vertex(25.83, 51.44); vertex(25.83, 50.37); vertex(24.75, 49.83); endoutlinepolygon(106); color(147); bgnpolygon(); vertex(26.90, 50.90); vertex(27.98, 51.44); vertex(27.98, 50.37); vertex(30.13, 51.44); vertex(30.13, 50.37); vertex(27.98, 49.29); vertex(27.98, 50.37); vertex(26.90, 49.83); endpolygon(); color(98); bgnoutlinepolygon(); vertex(31.20, 50.90); vertex(33.35, 51.98); vertex(33.35, 50.90); vertex(31.20, 49.83); endoutlinepolygon(98); color(122); bgnoutlinepolygon(); vertex(31.20, 49.83); vertex(32.28, 50.37); vertex(32.28, 49.29); vertex(31.20, 48.75); endoutlinepolygon(122); color(156); bgnoutlinepolygon(); vertex(31.20, 48.75); vertex(32.28, 49.29); vertex(32.28, 48.22); vertex(31.20, 47.68); endoutlinepolygon(156); color(98); bgnoutlinepolygon(); vertex(27.98, 46.06); vertex(29.05, 46.60); vertex(29.05, 45.53); vertex(27.98, 44.99); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(33.35, 47.68); vertex(35.51, 48.75); vertex(35.51, 47.68); vertex(33.35, 46.60); endoutlinepolygon(57); color(54); bgnoutlinepolygon(); vertex(41.96, 82.09); vertex(43.03, 82.62); vertex(43.03, 81.55); vertex(41.96, 81.01); endoutlinepolygon(54); color(56); bgnoutlinepolygon(); vertex(31.20, 75.63); vertex(32.28, 76.17); vertex(32.28, 75.10); vertex(31.20, 74.56); endoutlinepolygon(56); color(98); bgnpolygon(); vertex(31.20, 74.56); vertex(32.28, 75.10); vertex(32.28, 74.02); vertex(32.28, 72.95); vertex(31.20, 72.41); endpolygon(); color(55); bgnoutlinepolygon(); vertex(33.35, 73.48); vertex(35.51, 74.56); vertex(35.51, 73.48); vertex(33.35, 72.41); endoutlinepolygon(55); color(55); bgnpolygon(); vertex(43.03, 77.25); vertex(45.18, 78.32); vertex(45.18, 77.25); vertex(45.18, 76.17); vertex(41.96, 74.56); vertex(41.96, 75.63); vertex(43.03, 76.17); endpolygon(); color(97); bgnoutlinepolygon(); vertex(31.20, 69.18); vertex(32.28, 69.72); vertex(32.28, 68.65); vertex(31.20, 68.11); endoutlinepolygon(97); color(156); bgnoutlinepolygon(); vertex(35.51, 70.26); vertex(36.58, 70.80); vertex(36.58, 69.72); vertex(35.51, 69.18); endoutlinepolygon(156); color(156); bgnoutlinepolygon(); vertex(32.28, 67.57); vertex(33.35, 68.11); vertex(33.35, 67.03); vertex(32.28, 66.49); endoutlinepolygon(156); color(205); bgnoutlinepolygon(); vertex(37.66, 69.18); vertex(39.81, 70.26); vertex(39.81, 69.18); vertex(37.66, 68.11); endoutlinepolygon(205); color(55); bgnpolygon(); vertex(33.35, 65.96); vertex(35.51, 67.03); vertex(35.51, 65.96); vertex(40.88, 68.65); vertex(40.88, 67.57); vertex(33.35, 63.81); endpolygon(); color(206); bgnoutlinepolygon(); vertex(32.28, 63.27); vertex(33.35, 63.81); vertex(33.35, 62.73); vertex(32.28, 62.19); endoutlinepolygon(206); color(157); bgnoutlinepolygon(); vertex(27.98, 60.04); vertex(30.13, 61.12); vertex(30.13, 60.04); vertex(27.98, 58.97); endoutlinepolygon(157); color(57); bgnoutlinepolygon(); vertex(29.05, 59.51); vertex(34.43, 62.19); vertex(34.43, 61.12); vertex(29.05, 58.43); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(26.90, 57.35); vertex(27.98, 57.89); vertex(27.98, 56.82); vertex(26.90, 56.28); endoutlinepolygon(56); color(138); bgnoutlinepolygon(); vertex(27.98, 56.82); vertex(29.05, 57.35); vertex(29.05, 56.28); vertex(27.98, 55.74); endoutlinepolygon(138); color(197); bgnoutlinepolygon(); vertex(27.98, 55.74); vertex(30.13, 56.82); vertex(30.13, 55.74); vertex(27.98, 54.67); endoutlinepolygon(197); color(198); bgnpolygon(); vertex(27.98, 54.67); vertex(29.05, 55.20); vertex(29.05, 54.13); vertex(34.43, 56.82); vertex(34.43, 55.74); vertex(27.98, 52.52); endpolygon(); color(107); bgnoutlinepolygon(); vertex(25.83, 51.44); vertex(26.90, 51.98); vertex(26.90, 50.90); vertex(25.83, 50.37); endoutlinepolygon(107); color(197); bgnoutlinepolygon(); vertex(27.98, 51.44); vertex(32.28, 53.59); vertex(32.28, 52.52); vertex(27.98, 50.37); endoutlinepolygon(197); color(148); bgnoutlinepolygon(); vertex(30.13, 51.44); vertex(33.35, 53.05); vertex(33.35, 51.98); vertex(30.13, 50.37); endoutlinepolygon(148); color(97); bgnoutlinepolygon(); vertex(33.35, 51.98); vertex(34.43, 52.52); vertex(34.43, 51.44); vertex(33.35, 50.90); endoutlinepolygon(97); color(147); bgnoutlinepolygon(); vertex(32.28, 50.37); vertex(33.35, 50.90); vertex(33.35, 49.83); vertex(32.28, 49.29); endoutlinepolygon(147); color(107); bgnoutlinepolygon(); vertex(32.28, 49.29); vertex(33.35, 49.83); vertex(33.35, 48.75); vertex(32.28, 48.22); endoutlinepolygon(107); color(57); bgnoutlinepolygon(); vertex(29.05, 46.60); vertex(30.13, 47.14); vertex(30.13, 46.06); vertex(29.05, 45.53); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(35.51, 48.75); vertex(36.58, 49.29); vertex(36.58, 48.22); vertex(35.51, 47.68); endoutlinepolygon(97); color(155); bgnoutlinepolygon(); vertex(32.28, 76.17); vertex(33.35, 76.71); vertex(33.35, 75.63); vertex(32.28, 75.10); endoutlinepolygon(155); color(156); bgnpolygon(); vertex(32.28, 75.10); vertex(33.35, 75.63); vertex(33.35, 74.56); vertex(33.35, 73.48); vertex(32.28, 72.95); endpolygon(); color(43); bgnoutlinepolygon(); vertex(35.51, 74.56); vertex(36.58, 75.10); vertex(36.58, 74.02); vertex(35.51, 73.48); endoutlinepolygon(43); color(47); bgnpolygon(); vertex(45.18, 78.32); vertex(46.26, 78.86); vertex(46.26, 77.78); vertex(46.26, 76.71); vertex(45.18, 76.17); endpolygon(); color(156); bgnoutlinepolygon(); vertex(32.28, 69.72); vertex(33.35, 70.26); vertex(33.35, 69.18); vertex(32.28, 68.65); endoutlinepolygon(156); color(148); bgnoutlinepolygon(); vertex(36.58, 70.80); vertex(37.66, 71.33); vertex(37.66, 70.26); vertex(36.58, 69.72); endoutlinepolygon(148); color(55); bgnoutlinepolygon(); vertex(33.35, 68.11); vertex(35.51, 69.18); vertex(35.51, 68.11); vertex(33.35, 67.03); endoutlinepolygon(55); color(206); bgnpolygon(); vertex(39.81, 70.26); vertex(40.88, 70.80); vertex(40.88, 69.72); vertex(39.81, 69.18); vertex(39.81, 68.11); vertex(35.51, 65.96); vertex(35.51, 67.03); vertex(39.81, 69.18); endpolygon(); color(53); bgnoutlinepolygon(); vertex(40.88, 68.65); vertex(41.96, 69.18); vertex(41.96, 68.11); vertex(40.88, 67.57); endoutlinepolygon(53); color(205); bgnoutlinepolygon(); vertex(33.35, 63.81); vertex(34.43, 64.34); vertex(34.43, 63.27); vertex(33.35, 62.73); endoutlinepolygon(205); color(147); bgnoutlinepolygon(); vertex(30.13, 61.12); vertex(32.28, 62.19); vertex(32.28, 61.12); vertex(30.13, 60.04); endoutlinepolygon(147); color(156); bgnoutlinepolygon(); vertex(34.43, 62.19); vertex(35.51, 62.73); vertex(35.51, 61.66); vertex(34.43, 61.12); endoutlinepolygon(156); color(57); bgnoutlinepolygon(); vertex(27.98, 57.89); vertex(29.05, 58.43); vertex(29.05, 57.35); vertex(27.98, 56.82); endoutlinepolygon(57); color(188); bgnoutlinepolygon(); vertex(29.05, 57.35); vertex(30.13, 57.89); vertex(30.13, 56.82); vertex(29.05, 56.28); endoutlinepolygon(188); color(198); bgnoutlinepolygon(); vertex(30.13, 56.82); vertex(33.35, 58.43); vertex(33.35, 57.35); vertex(30.13, 55.74); endoutlinepolygon(198); color(206); bgnoutlinepolygon(); vertex(29.05, 55.20); vertex(34.43, 57.89); vertex(34.43, 56.82); vertex(29.05, 54.13); endoutlinepolygon(206); color(156); bgnoutlinepolygon(); vertex(34.43, 56.82); vertex(35.51, 57.35); vertex(35.51, 56.28); vertex(34.43, 55.74); endoutlinepolygon(156); color(156); bgnoutlinepolygon(); vertex(26.90, 51.98); vertex(27.98, 52.52); vertex(27.98, 51.44); vertex(26.90, 50.90); endoutlinepolygon(156); color(198); bgnoutlinepolygon(); vertex(32.28, 53.59); vertex(33.35, 54.13); vertex(33.35, 53.05); vertex(32.28, 52.52); endoutlinepolygon(198); color(107); bgnoutlinepolygon(); vertex(33.35, 53.05); vertex(34.43, 53.59); vertex(34.43, 52.52); vertex(33.35, 51.98); endoutlinepolygon(107); color(147); bgnoutlinepolygon(); vertex(34.43, 52.52); vertex(35.51, 53.05); vertex(35.51, 51.98); vertex(34.43, 51.44); endoutlinepolygon(147); color(149); bgnoutlinepolygon(); vertex(33.35, 50.90); vertex(34.43, 51.44); vertex(34.43, 50.37); vertex(33.35, 49.83); endoutlinepolygon(149); color(98); bgnoutlinepolygon(); vertex(33.35, 49.83); vertex(34.43, 50.37); vertex(34.43, 49.29); vertex(33.35, 48.75); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(30.13, 47.14); vertex(32.28, 48.22); vertex(32.28, 47.14); vertex(30.13, 46.06); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(36.58, 49.29); vertex(38.73, 50.37); vertex(38.73, 49.29); vertex(36.58, 48.22); endoutlinepolygon(98); color(55); bgnpolygon(); vertex(33.35, 76.71); vertex(35.51, 77.78); vertex(35.51, 75.63); vertex(35.51, 74.56); vertex(33.35, 73.48); endpolygon(); color(56); bgnoutlinepolygon(); vertex(36.58, 75.10); vertex(37.66, 75.63); vertex(37.66, 74.56); vertex(36.58, 74.02); endoutlinepolygon(56); color(55); bgnoutlinepolygon(); vertex(33.35, 70.26); vertex(35.51, 71.33); vertex(35.51, 70.26); vertex(33.35, 69.18); endoutlinepolygon(55); color(158); bgnoutlinepolygon(); vertex(37.66, 71.33); vertex(38.73, 71.87); vertex(38.73, 70.80); vertex(37.66, 70.26); endoutlinepolygon(158); color(157); bgnoutlinepolygon(); vertex(35.51, 69.18); vertex(37.66, 70.26); vertex(37.66, 69.18); vertex(35.51, 68.11); endoutlinepolygon(157); color(54); bgnoutlinepolygon(); vertex(40.88, 70.80); vertex(41.96, 71.33); vertex(41.96, 70.26); vertex(40.88, 69.72); endoutlinepolygon(54); color(55); bgnoutlinepolygon(); vertex(39.81, 69.18); vertex(43.03, 70.80); vertex(43.03, 69.72); vertex(39.81, 68.11); endoutlinepolygon(55); color(44); bgnoutlinepolygon(); vertex(41.96, 69.18); vertex(43.03, 69.72); vertex(43.03, 68.65); vertex(41.96, 68.11); endoutlinepolygon(44); color(197); bgnoutlinepolygon(); vertex(34.43, 64.34); vertex(35.51, 64.88); vertex(35.51, 63.81); vertex(34.43, 63.27); endoutlinepolygon(197); color(148); bgnoutlinepolygon(); vertex(32.28, 62.19); vertex(33.35, 62.73); vertex(33.35, 61.66); vertex(32.28, 61.12); endoutlinepolygon(148); color(205); bgnoutlinepolygon(); vertex(35.51, 62.73); vertex(36.58, 63.27); vertex(36.58, 62.19); vertex(35.51, 61.66); endoutlinepolygon(205); color(97); bgnoutlinepolygon(); vertex(29.05, 58.43); vertex(30.13, 58.97); vertex(30.13, 57.89); vertex(29.05, 57.35); endoutlinepolygon(97); color(189); bgnoutlinepolygon(); vertex(30.13, 57.89); vertex(31.20, 58.43); vertex(31.20, 57.35); vertex(30.13, 56.82); endoutlinepolygon(189); color(188); bgnoutlinepolygon(); vertex(33.35, 58.43); vertex(34.43, 58.97); vertex(34.43, 57.89); vertex(33.35, 57.35); endoutlinepolygon(188); color(156); bgnoutlinepolygon(); vertex(34.43, 57.89); vertex(35.51, 58.43); vertex(35.51, 57.35); vertex(34.43, 56.82); endoutlinepolygon(156); color(107); bgnoutlinepolygon(); vertex(35.51, 57.35); vertex(36.58, 57.89); vertex(36.58, 56.82); vertex(35.51, 56.28); endoutlinepolygon(107); color(198); bgnoutlinepolygon(); vertex(27.98, 52.52); vertex(30.13, 53.59); vertex(30.13, 52.52); vertex(27.98, 51.44); endoutlinepolygon(198); color(197); bgnoutlinepolygon(); vertex(33.35, 54.13); vertex(34.43, 54.67); vertex(34.43, 53.59); vertex(33.35, 53.05); endoutlinepolygon(197); color(106); bgnoutlinepolygon(); vertex(34.43, 53.59); vertex(35.51, 54.13); vertex(35.51, 53.05); vertex(34.43, 52.52); endoutlinepolygon(106); color(157); bgnoutlinepolygon(); vertex(35.51, 53.05); vertex(36.58, 53.59); vertex(36.58, 52.52); vertex(35.51, 51.98); endoutlinepolygon(157); color(156); bgnoutlinepolygon(); vertex(34.43, 51.44); vertex(35.51, 51.98); vertex(35.51, 50.90); vertex(34.43, 50.37); endoutlinepolygon(156); color(57); bgnoutlinepolygon(); vertex(34.43, 50.37); vertex(35.51, 50.90); vertex(35.51, 49.83); vertex(34.43, 49.29); endoutlinepolygon(57); color(56); bgnoutlinepolygon(); vertex(32.28, 48.22); vertex(33.35, 48.75); vertex(33.35, 47.68); vertex(32.28, 47.14); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(38.73, 50.37); vertex(39.81, 50.90); vertex(39.81, 49.83); vertex(38.73, 49.29); endoutlinepolygon(56); color(47); bgnpolygon(); vertex(35.51, 77.78); vertex(36.58, 78.32); vertex(36.58, 77.25); vertex(36.58, 76.17); vertex(35.51, 75.63); endpolygon(); color(156); bgnoutlinepolygon(); vertex(35.51, 75.63); vertex(36.58, 76.17); vertex(36.58, 75.10); vertex(35.51, 74.56); endoutlinepolygon(156); color(54); bgnoutlinepolygon(); vertex(41.96, 77.78); vertex(43.03, 78.32); vertex(43.03, 77.25); vertex(41.96, 76.71); endoutlinepolygon(54); color(156); bgnoutlinepolygon(); vertex(35.51, 71.33); vertex(36.58, 71.87); vertex(36.58, 70.80); vertex(35.51, 70.26); endoutlinepolygon(156); color(156); bgnoutlinepolygon(); vertex(38.73, 71.87); vertex(39.81, 72.41); vertex(39.81, 71.33); vertex(38.73, 70.80); endoutlinepolygon(156); color(205); bgnoutlinepolygon(); vertex(37.66, 70.26); vertex(39.81, 71.33); vertex(39.81, 70.26); vertex(37.66, 69.18); endoutlinepolygon(205); color(55); bgnoutlinepolygon(); vertex(41.96, 71.33); vertex(44.11, 72.41); vertex(44.11, 71.33); vertex(41.96, 70.26); endoutlinepolygon(55); color(157); bgnoutlinepolygon(); vertex(43.03, 70.80); vertex(44.11, 71.33); vertex(44.11, 70.26); vertex(43.03, 69.72); endoutlinepolygon(157); color(56); bgnoutlinepolygon(); vertex(43.03, 69.72); vertex(44.11, 70.26); vertex(44.11, 69.18); vertex(43.03, 68.65); endoutlinepolygon(56); color(157); bgnoutlinepolygon(); vertex(35.51, 64.88); vertex(36.58, 65.42); vertex(36.58, 64.34); vertex(35.51, 63.81); endoutlinepolygon(157); color(156); bgnoutlinepolygon(); vertex(33.35, 62.73); vertex(34.43, 63.27); vertex(34.43, 62.19); vertex(33.35, 61.66); endoutlinepolygon(156); color(206); bgnoutlinepolygon(); vertex(36.58, 63.27); vertex(38.73, 64.34); vertex(38.73, 63.27); vertex(36.58, 62.19); endoutlinepolygon(206); color(98); bgnoutlinepolygon(); vertex(30.13, 58.97); vertex(31.20, 59.51); vertex(31.20, 58.43); vertex(30.13, 57.89); endoutlinepolygon(98); color(190); bgnoutlinepolygon(); vertex(31.20, 58.43); vertex(33.35, 59.51); vertex(33.35, 58.43); vertex(31.20, 57.35); endoutlinepolygon(190); color(107); bgnpolygon(); vertex(34.43, 58.97); vertex(35.51, 59.51); vertex(35.51, 58.43); vertex(36.58, 58.97); vertex(36.58, 57.89); vertex(35.51, 57.35); vertex(35.51, 58.43); vertex(34.43, 57.89); endpolygon(); color(106); bgnoutlinepolygon(); vertex(36.58, 57.89); vertex(37.66, 58.43); vertex(37.66, 57.35); vertex(36.58, 56.82); endoutlinepolygon(106); color(197); bgnoutlinepolygon(); vertex(30.13, 53.59); vertex(31.20, 54.13); vertex(31.20, 53.05); vertex(30.13, 52.52); endoutlinepolygon(197); color(147); bgnoutlinepolygon(); vertex(34.43, 54.67); vertex(35.51, 55.20); vertex(35.51, 54.13); vertex(34.43, 53.59); endoutlinepolygon(147); color(107); bgnoutlinepolygon(); vertex(35.51, 54.13); vertex(36.58, 54.67); vertex(36.58, 53.59); vertex(35.51, 53.05); endoutlinepolygon(107); color(106); bgnoutlinepolygon(); vertex(36.58, 53.59); vertex(37.66, 54.13); vertex(37.66, 53.05); vertex(36.58, 52.52); endoutlinepolygon(106); color(98); bgnoutlinepolygon(); vertex(35.51, 51.98); vertex(37.66, 53.05); vertex(37.66, 51.98); vertex(35.51, 50.90); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(35.51, 50.90); vertex(36.58, 51.44); vertex(36.58, 50.37); vertex(35.51, 49.83); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(33.35, 48.75); vertex(34.43, 49.29); vertex(34.43, 48.22); vertex(33.35, 47.68); endoutlinepolygon(97); color(57); bgnoutlinepolygon(); vertex(39.81, 50.90); vertex(40.88, 51.44); vertex(40.88, 50.37); vertex(39.81, 49.83); endoutlinepolygon(57); color(53); bgnoutlinepolygon(); vertex(39.81, 79.94); vertex(40.88, 80.47); vertex(40.88, 79.40); vertex(39.81, 78.86); endoutlinepolygon(53); color(54); bgnoutlinepolygon(); vertex(40.88, 79.40); vertex(41.96, 79.94); vertex(41.96, 78.86); vertex(40.88, 78.32); endoutlinepolygon(54); color(55); bgnpolygon(); vertex(41.96, 78.86); vertex(45.18, 80.47); vertex(45.18, 79.40); vertex(45.18, 78.32); vertex(43.03, 77.25); vertex(43.03, 78.32); vertex(41.96, 77.78); endpolygon(); color(138); bgnoutlinepolygon(); vertex(36.58, 71.87); vertex(37.66, 72.41); vertex(37.66, 71.33); vertex(36.58, 70.80); endoutlinepolygon(138); color(56); bgnoutlinepolygon(); vertex(39.81, 72.41); vertex(40.88, 72.95); vertex(40.88, 71.87); vertex(39.81, 71.33); endoutlinepolygon(56); color(107); bgnoutlinepolygon(); vertex(39.81, 71.33); vertex(40.88, 71.87); vertex(40.88, 70.80); vertex(39.81, 70.26); endoutlinepolygon(107); color(44); bgnoutlinepolygon(); vertex(44.11, 72.41); vertex(45.18, 72.95); vertex(45.18, 71.87); vertex(44.11, 71.33); endoutlinepolygon(44); color(50); bgnoutlinepolygon(); vertex(36.58, 65.42); vertex(38.73, 66.49); vertex(38.73, 65.42); vertex(36.58, 64.34); endoutlinepolygon(50); color(206); bgnoutlinepolygon(); vertex(34.43, 63.27); vertex(36.58, 64.34); vertex(36.58, 63.27); vertex(34.43, 62.19); endoutlinepolygon(206); color(205); bgnoutlinepolygon(); vertex(38.73, 64.34); vertex(39.81, 64.88); vertex(39.81, 63.81); vertex(38.73, 63.27); endoutlinepolygon(205); color(107); bgnoutlinepolygon(); vertex(31.20, 59.51); vertex(32.28, 60.04); vertex(32.28, 58.97); vertex(31.20, 58.43); endoutlinepolygon(107); color(148); bgnoutlinepolygon(); vertex(33.35, 59.51); vertex(34.43, 60.04); vertex(34.43, 58.97); vertex(33.35, 58.43); endoutlinepolygon(148); color(106); bgnoutlinepolygon(); vertex(35.51, 59.51); vertex(36.58, 60.04); vertex(36.58, 58.97); vertex(35.51, 58.43); endoutlinepolygon(106); color(57); bgnpolygon(); vertex(36.58, 58.97); vertex(37.66, 59.51); vertex(37.66, 58.43); vertex(38.73, 58.97); vertex(38.73, 57.89); vertex(37.66, 57.35); vertex(37.66, 58.43); vertex(36.58, 57.89); endpolygon(); color(198); bgnoutlinepolygon(); vertex(31.20, 54.13); vertex(34.43, 55.74); vertex(34.43, 54.67); vertex(31.20, 53.05); endoutlinepolygon(198); color(99); bgnoutlinepolygon(); vertex(35.51, 55.20); vertex(36.58, 55.74); vertex(36.58, 54.67); vertex(35.51, 54.13); endoutlinepolygon(99); color(116); bgnoutlinepolygon(); vertex(36.58, 54.67); vertex(37.66, 55.20); vertex(37.66, 54.13); vertex(36.58, 53.59); endoutlinepolygon(116); color(98); bgnoutlinepolygon(); vertex(37.66, 54.13); vertex(38.73, 54.67); vertex(38.73, 53.59); vertex(37.66, 53.05); endoutlinepolygon(98); color(106); bgnpolygon(); vertex(37.66, 53.05); vertex(38.73, 53.59); vertex(38.73, 52.52); vertex(37.66, 51.98); vertex(37.66, 50.90); vertex(36.58, 50.37); vertex(36.58, 51.44); vertex(37.66, 51.98); endpolygon(); color(57); bgnoutlinepolygon(); vertex(34.43, 49.29); vertex(35.51, 49.83); vertex(35.51, 48.75); vertex(34.43, 48.22); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(40.88, 51.44); vertex(43.03, 52.52); vertex(43.03, 51.44); vertex(40.88, 50.37); endoutlinepolygon(97); color(55); bgnpolygon(); vertex(40.88, 80.47); vertex(43.03, 81.55); vertex(43.03, 80.47); vertex(44.11, 81.01); vertex(44.11, 79.94); vertex(41.96, 78.86); vertex(41.96, 79.94); vertex(40.88, 79.40); endpolygon(); color(46); bgnoutlinepolygon(); vertex(45.18, 79.40); vertex(46.26, 79.94); vertex(46.26, 78.86); vertex(45.18, 78.32); endoutlinepolygon(46); color(106); bgnoutlinepolygon(); vertex(37.66, 72.41); vertex(38.73, 72.95); vertex(38.73, 71.87); vertex(37.66, 71.33); endoutlinepolygon(106); color(55); bgnoutlinepolygon(); vertex(41.96, 73.48); vertex(45.18, 75.10); vertex(45.18, 74.02); vertex(41.96, 72.41); endoutlinepolygon(55); color(155); bgnoutlinepolygon(); vertex(40.88, 71.87); vertex(41.96, 72.41); vertex(41.96, 71.33); vertex(40.88, 70.80); endoutlinepolygon(155); color(49); bgnoutlinepolygon(); vertex(38.73, 66.49); vertex(39.81, 67.03); vertex(39.81, 65.96); vertex(38.73, 65.42); endoutlinepolygon(49); color(53); bgnoutlinepolygon(); vertex(36.58, 64.34); vertex(37.66, 64.88); vertex(37.66, 63.81); vertex(36.58, 63.27); endoutlinepolygon(53); color(204); bgnoutlinepolygon(); vertex(39.81, 64.88); vertex(40.88, 65.42); vertex(40.88, 64.34); vertex(39.81, 63.81); endoutlinepolygon(204); color(66); bgnoutlinepolygon(); vertex(32.28, 60.04); vertex(33.35, 60.58); vertex(33.35, 59.51); vertex(32.28, 58.97); endoutlinepolygon(66); color(98); bgnoutlinepolygon(); vertex(34.43, 60.04); vertex(35.51, 60.58); vertex(35.51, 59.51); vertex(34.43, 58.97); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(36.58, 60.04); vertex(37.66, 60.58); vertex(37.66, 59.51); vertex(36.58, 58.97); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(37.66, 59.51); vertex(44.11, 62.73); vertex(44.11, 61.66); vertex(37.66, 58.43); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(38.73, 58.97); vertex(39.81, 59.51); vertex(39.81, 58.43); vertex(38.73, 57.89); endoutlinepolygon(97); color(148); bgnoutlinepolygon(); vertex(34.43, 55.74); vertex(35.51, 56.28); vertex(35.51, 55.20); vertex(34.43, 54.67); endoutlinepolygon(148); color(107); bgnoutlinepolygon(); vertex(36.58, 55.74); vertex(37.66, 56.28); vertex(37.66, 55.20); vertex(36.58, 54.67); endoutlinepolygon(107); color(98); bgnoutlinepolygon(); vertex(37.66, 55.20); vertex(46.26, 59.51); vertex(46.26, 58.43); vertex(37.66, 54.13); endoutlinepolygon(98); color(106); bgnoutlinepolygon(); vertex(38.73, 54.67); vertex(40.88, 55.74); vertex(40.88, 54.67); vertex(38.73, 53.59); endoutlinepolygon(106); color(56); bgnoutlinepolygon(); vertex(38.73, 53.59); vertex(44.11, 56.28); vertex(44.11, 55.20); vertex(38.73, 52.52); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(37.66, 51.98); vertex(38.73, 52.52); vertex(38.73, 51.44); vertex(37.66, 50.90); endoutlinepolygon(98); color(97); bgnoutlinepolygon(); vertex(35.51, 49.83); vertex(36.58, 50.37); vertex(36.58, 49.29); vertex(35.51, 48.75); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(43.03, 52.52); vertex(44.11, 53.05); vertex(44.11, 51.98); vertex(43.03, 51.44); endoutlinepolygon(56); color(54); bgnoutlinepolygon(); vertex(43.03, 81.55); vertex(44.11, 82.09); vertex(44.11, 81.01); vertex(43.03, 80.47); endoutlinepolygon(54); color(53); bgnoutlinepolygon(); vertex(44.11, 81.01); vertex(45.18, 81.55); vertex(45.18, 80.47); vertex(44.11, 79.94); endoutlinepolygon(53); color(56); bgnoutlinepolygon(); vertex(38.73, 72.95); vertex(40.88, 74.02); vertex(40.88, 72.95); vertex(38.73, 71.87); endoutlinepolygon(56); color(40); bgnoutlinepolygon(); vertex(45.18, 75.10); vertex(46.26, 75.63); vertex(46.26, 74.56); vertex(45.18, 74.02); endoutlinepolygon(40); color(55); bgnoutlinepolygon(); vertex(41.96, 72.41); vertex(44.11, 73.48); vertex(44.11, 72.41); vertex(41.96, 71.33); endoutlinepolygon(55); color(47); bgnoutlinepolygon(); vertex(39.81, 67.03); vertex(41.96, 68.11); vertex(41.96, 67.03); vertex(39.81, 65.96); endoutlinepolygon(47); color(50); bgnoutlinepolygon(); vertex(37.66, 64.88); vertex(38.73, 65.42); vertex(38.73, 64.34); vertex(37.66, 63.81); endoutlinepolygon(50); color(203); bgnoutlinepolygon(); vertex(40.88, 65.42); vertex(41.96, 65.96); vertex(41.96, 64.88); vertex(40.88, 64.34); endoutlinepolygon(203); color(57); bgnoutlinepolygon(); vertex(33.35, 60.58); vertex(34.43, 61.12); vertex(34.43, 60.04); vertex(33.35, 59.51); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(35.51, 60.58); vertex(36.58, 61.12); vertex(36.58, 60.04); vertex(35.51, 59.51); endoutlinepolygon(57); color(96); bgnoutlinepolygon(); vertex(37.66, 60.58); vertex(38.73, 61.12); vertex(38.73, 60.04); vertex(37.66, 59.51); endoutlinepolygon(96); color(96); bgnoutlinepolygon(); vertex(44.11, 62.73); vertex(45.18, 63.27); vertex(45.18, 62.19); vertex(44.11, 61.66); endoutlinepolygon(96); color(96); bgnoutlinepolygon(); vertex(39.81, 59.51); vertex(40.88, 60.04); vertex(40.88, 58.97); vertex(39.81, 58.43); endoutlinepolygon(96); color(107); bgnoutlinepolygon(); vertex(35.51, 56.28); vertex(36.58, 56.82); vertex(36.58, 55.74); vertex(35.51, 55.20); endoutlinepolygon(107); color(98); bgnoutlinepolygon(); vertex(37.66, 56.28); vertex(46.26, 60.58); vertex(46.26, 59.51); vertex(37.66, 55.20); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(46.26, 59.51); vertex(47.33, 60.04); vertex(47.33, 58.97); vertex(46.26, 58.43); endoutlinepolygon(56); color(98); bgnpolygon(); vertex(40.88, 55.74); vertex(46.26, 58.43); vertex(46.26, 57.35); vertex(46.26, 56.28); vertex(44.11, 55.20); vertex(44.11, 56.28); vertex(40.88, 54.67); endpolygon(); color(56); bgnoutlinepolygon(); vertex(38.73, 52.52); vertex(39.81, 53.05); vertex(39.81, 51.98); vertex(38.73, 51.44); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(36.58, 50.37); vertex(38.73, 51.44); vertex(38.73, 50.37); vertex(36.58, 49.29); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(44.11, 53.05); vertex(46.26, 54.13); vertex(46.26, 53.05); vertex(44.11, 51.98); endoutlinepolygon(98); color(55); bgnoutlinepolygon(); vertex(41.96, 74.56); vertex(45.18, 76.17); vertex(45.18, 75.10); vertex(41.96, 73.48); endoutlinepolygon(55); color(53); bgnoutlinepolygon(); vertex(44.11, 73.48); vertex(45.18, 74.02); vertex(45.18, 72.95); vertex(44.11, 72.41); endoutlinepolygon(53); color(205); bgnoutlinepolygon(); vertex(41.96, 68.11); vertex(43.03, 68.65); vertex(43.03, 67.57); vertex(41.96, 67.03); endoutlinepolygon(205); color(205); bgnoutlinepolygon(); vertex(38.73, 65.42); vertex(39.81, 65.96); vertex(39.81, 64.88); vertex(38.73, 64.34); endoutlinepolygon(205); color(154); bgnoutlinepolygon(); vertex(41.96, 65.96); vertex(43.03, 66.49); vertex(43.03, 65.42); vertex(41.96, 64.88); endoutlinepolygon(154); color(56); bgnoutlinepolygon(); vertex(34.43, 61.12); vertex(35.51, 61.66); vertex(35.51, 60.58); vertex(34.43, 60.04); endoutlinepolygon(56); color(145); bgnoutlinepolygon(); vertex(36.58, 61.12); vertex(37.66, 61.66); vertex(37.66, 60.58); vertex(36.58, 60.04); endoutlinepolygon(145); color(56); bgnpolygon(); vertex(38.73, 61.12); vertex(46.26, 64.88); vertex(46.26, 63.81); vertex(47.33, 64.34); vertex(47.33, 63.27); vertex(45.18, 62.19); vertex(45.18, 63.27); vertex(38.73, 60.04); endpolygon(); color(97); bgnoutlinepolygon(); vertex(40.88, 60.04); vertex(45.18, 62.19); vertex(45.18, 61.12); vertex(40.88, 58.97); endoutlinepolygon(97); color(106); bgnoutlinepolygon(); vertex(36.58, 56.82); vertex(38.73, 57.89); vertex(38.73, 56.82); vertex(36.58, 55.74); endoutlinepolygon(106); color(56); bgnoutlinepolygon(); vertex(46.26, 60.58); vertex(47.33, 61.12); vertex(47.33, 60.04); vertex(46.26, 59.51); endoutlinepolygon(56); color(56); bgnpolygon(); vertex(46.26, 58.43); vertex(47.33, 58.97); vertex(47.33, 57.89); vertex(47.33, 56.82); vertex(46.26, 56.28); endpolygon(); color(97); bgnoutlinepolygon(); vertex(39.81, 53.05); vertex(41.96, 54.13); vertex(41.96, 53.05); vertex(39.81, 51.98); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(38.73, 51.44); vertex(39.81, 51.98); vertex(39.81, 50.90); vertex(38.73, 50.37); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(46.26, 54.13); vertex(47.33, 54.67); vertex(47.33, 53.59); vertex(46.26, 53.05); endoutlinepolygon(56); color(45); bgnoutlinepolygon(); vertex(45.18, 76.17); vertex(46.26, 76.71); vertex(46.26, 75.63); vertex(45.18, 75.10); endoutlinepolygon(45); color(56); bgnoutlinepolygon(); vertex(43.03, 68.65); vertex(44.11, 69.18); vertex(44.11, 68.11); vertex(43.03, 67.57); endoutlinepolygon(56); color(206); bgnoutlinepolygon(); vertex(39.81, 65.96); vertex(40.88, 66.49); vertex(40.88, 65.42); vertex(39.81, 64.88); endoutlinepolygon(206); color(106); bgnoutlinepolygon(); vertex(43.03, 66.49); vertex(44.11, 67.03); vertex(44.11, 65.96); vertex(43.03, 65.42); endoutlinepolygon(106); color(147); bgnoutlinepolygon(); vertex(35.51, 61.66); vertex(36.58, 62.19); vertex(36.58, 61.12); vertex(35.51, 60.58); endoutlinepolygon(147); color(153); bgnoutlinepolygon(); vertex(37.66, 61.66); vertex(39.81, 62.73); vertex(39.81, 61.66); vertex(37.66, 60.58); endoutlinepolygon(153); color(96); bgnoutlinepolygon(); vertex(45.18, 62.19); vertex(46.26, 62.73); vertex(46.26, 61.66); vertex(45.18, 61.12); endoutlinepolygon(96); color(98); bgnoutlinepolygon(); vertex(38.73, 57.89); vertex(41.96, 59.51); vertex(41.96, 58.43); vertex(38.73, 56.82); endoutlinepolygon(98); color(57); bgnoutlinepolygon(); vertex(41.96, 54.13); vertex(44.11, 55.20); vertex(44.11, 54.13); vertex(41.96, 53.05); endoutlinepolygon(57); color(57); bgnoutlinepolygon(); vertex(39.81, 51.98); vertex(40.88, 52.52); vertex(40.88, 51.44); vertex(39.81, 50.90); endoutlinepolygon(57); color(205); bgnoutlinepolygon(); vertex(40.88, 66.49); vertex(43.03, 67.57); vertex(43.03, 66.49); vertex(40.88, 65.42); endoutlinepolygon(205); color(56); bgnoutlinepolygon(); vertex(44.11, 67.03); vertex(45.18, 67.57); vertex(45.18, 66.49); vertex(44.11, 65.96); endoutlinepolygon(56); color(197); bgnoutlinepolygon(); vertex(36.58, 62.19); vertex(37.66, 62.73); vertex(37.66, 61.66); vertex(36.58, 61.12); endoutlinepolygon(197); color(105); bgnoutlinepolygon(); vertex(39.81, 62.73); vertex(40.88, 63.27); vertex(40.88, 62.19); vertex(39.81, 61.66); endoutlinepolygon(105); color(56); bgnoutlinepolygon(); vertex(46.26, 62.73); vertex(47.33, 63.27); vertex(47.33, 62.19); vertex(46.26, 61.66); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(41.96, 59.51); vertex(46.26, 61.66); vertex(46.26, 60.58); vertex(41.96, 58.43); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(44.11, 55.20); vertex(45.18, 55.74); vertex(45.18, 54.67); vertex(44.11, 54.13); endoutlinepolygon(97); color(97); bgnoutlinepolygon(); vertex(40.88, 52.52); vertex(43.03, 53.59); vertex(43.03, 52.52); vertex(40.88, 51.44); endoutlinepolygon(97); color(106); bgnoutlinepolygon(); vertex(43.03, 67.57); vertex(44.11, 68.11); vertex(44.11, 67.03); vertex(43.03, 66.49); endoutlinepolygon(106); color(203); bgnoutlinepolygon(); vertex(37.66, 62.73); vertex(38.73, 63.27); vertex(38.73, 62.19); vertex(37.66, 61.66); endoutlinepolygon(203); color(96); bgnoutlinepolygon(); vertex(40.88, 63.27); vertex(41.96, 63.81); vertex(41.96, 62.73); vertex(40.88, 62.19); endoutlinepolygon(96); color(56); bgnoutlinepolygon(); vertex(46.26, 61.66); vertex(47.33, 62.19); vertex(47.33, 61.12); vertex(46.26, 60.58); endoutlinepolygon(56); color(98); bgnoutlinepolygon(); vertex(45.18, 55.74); vertex(46.26, 56.28); vertex(46.26, 55.20); vertex(45.18, 54.67); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(43.03, 53.59); vertex(44.11, 54.13); vertex(44.11, 53.05); vertex(43.03, 52.52); endoutlinepolygon(56); color(56); bgnoutlinepolygon(); vertex(44.11, 68.11); vertex(45.18, 68.65); vertex(45.18, 67.57); vertex(44.11, 67.03); endoutlinepolygon(56); color(194); bgnoutlinepolygon(); vertex(38.73, 63.27); vertex(39.81, 63.81); vertex(39.81, 62.73); vertex(38.73, 62.19); endoutlinepolygon(194); color(56); bgnoutlinepolygon(); vertex(41.96, 63.81); vertex(46.26, 65.96); vertex(46.26, 64.88); vertex(41.96, 62.73); endoutlinepolygon(56); color(57); bgnoutlinepolygon(); vertex(46.26, 56.28); vertex(47.33, 56.82); vertex(47.33, 55.74); vertex(46.26, 55.20); endoutlinepolygon(57); color(97); bgnoutlinepolygon(); vertex(44.11, 54.13); vertex(45.18, 54.67); vertex(45.18, 53.59); vertex(44.11, 53.05); endoutlinepolygon(97); color(145); bgnoutlinepolygon(); vertex(39.81, 63.81); vertex(40.88, 64.34); vertex(40.88, 63.27); vertex(39.81, 62.73); endoutlinepolygon(145); color(98); bgnoutlinepolygon(); vertex(45.18, 54.67); vertex(46.26, 55.20); vertex(46.26, 54.13); vertex(45.18, 53.59); endoutlinepolygon(98); color(98); bgnoutlinepolygon(); vertex(40.88, 64.34); vertex(43.03, 65.42); vertex(43.03, 64.34); vertex(40.88, 63.27); endoutlinepolygon(98); color(56); bgnoutlinepolygon(); vertex(46.26, 55.20); vertex(47.33, 55.74); vertex(47.33, 54.67); vertex(46.26, 54.13); endoutlinepolygon(56); color(97); bgnoutlinepolygon(); vertex(43.03, 65.42); vertex(44.11, 65.96); vertex(44.11, 64.88); vertex(43.03, 64.34); endoutlinepolygon(97); color(56); bgnoutlinepolygon(); vertex(44.11, 65.96); vertex(46.26, 67.03); vertex(46.26, 65.96); vertex(44.11, 64.88); endoutlinepolygon(56); # Bounding box = [ 14.00 36.92 47.33 83.16 ] htmldoc-1.8.27/desktop/png2fti.cxx0100664000212600000240000002021310063346076015473 0ustar mikeuser// // "$Id: png2fti.cxx 1291 2004-06-14 16:03:10Z mike $" // // Simple utility which converts a PNG or XPM icon file to a 3D SGI FTI // icon file. // // Copyright 2004 by Michael Sweet. // #include #include #include //#define DEBUG #ifdef DEBUG # define DEBUG_printf(x) printf x #else # define DEBUG_printf(x) #endif // DEBUG // // 'print_vertex()' - Print an image vertex... // void print_vertex(Fl_Shared_Image *img, // I - Shared image int x, // I - X position in image int y, // I - Y position in image const float matrix[2][3], // I - Transform matrix float &xmin, // IO - Minimum X float &ymin, // IO - Minimum Y float &xmax, // IO - Maximum X float &ymax) // IO - Maximum Y { float fx, fy; // Floating point X/Y float tx, ty; // Transformed x/y // Map integer coords to floating point... fx = 100.0f * (float)x / (float)(img->w() - 1); fy = 100.0f - 100.0f * (float)y / (float)(img->h() - 1); // Project x, y in image space to 3D using the current matrix... tx = matrix[0][0] * fx + matrix[0][1] * fy + matrix[0][2]; ty = matrix[1][0] * fx + matrix[1][1] * fy + matrix[1][2]; // Update the bounding box... if (tx < xmin) xmin = tx; if (tx > xmax) xmax = tx; if (ty < ymin) ymin = ty; if (ty > ymax) ymax = ty; // Write the current vertex... DEBUG_printf(("\t# %d,%d\n", x, y)); printf("\tvertex(%.2f, %.2f);\n", tx, ty); } // // 'main()' - Convert a PNG image to FTI format... // int // O - Exit status main(int argc, // I - Number of command-line args char *argv[]) // I - Command-line arguments { Fl_Shared_Image *img; // PNG icon int x, y; // X & Y in image int startx, // Starting X in image endy, // Ending Y in image tempy; // Current Y in image int c, // Current color temp; // Temporary color const uchar *data; // Pointer into image float xmin, xmax, // Bounding box ymin, ymax; float matrix[2][3]; // Transform matrix int lines[256][768],// Lines (color, startx, endx) *lineptr; // Pointer into line int polys[256]; // Number of polygons per line int did_poly; // Non-zero if we did a polygon if (argc != 3 || (strcmp(argv[1], "-c") && strcmp(argv[1], "-d") && strcmp(argv[1], "-o"))) { puts("Usage: png2fti -[cdo] filename.png >filename.fti"); puts(" -c = closed exec"); puts(" -d = document"); puts(" -o = open exec"); return (1); } fl_register_images(); img = Fl_Shared_Image::get(argv[2]); if (!img || !img->count() || !img->w() || !img->h()) { printf("Unable to open image file \"%s\"!\n", argv[2]); return (1); } if (img->count() != 1) { puts("Sorry, indexed images are not supported at this time."); return (1); } xmin = 1000.0f; xmax = -1000.0f; ymin = 1000.0f; ymax = -1000.0f; printf("# Converted using \"png2fti %s %s\"...\n\n", argv[1], argv[2]); // Create the proper transform for the specified type of icon... switch (argv[1][1]) { case 'c' : // Closed exec matrix[0][0] = 1.0f / 3.0f; matrix[0][1] = -1.0f / 3.0f; matrix[0][2] = 49.0f; matrix[1][0] = 0.5f / 3.0f; matrix[1][1] = 0.5f / 3.0f; matrix[1][2] = 14.5f; break; case 'd' : // Document matrix[0][0] = 1.0f / 3.0f; matrix[0][1] = 0.0f; matrix[0][2] = 42.5f; matrix[1][0] = 0.5f / 3.0f; matrix[1][1] = 1.0f / 3.0f; matrix[1][2] = 26.0f; break; case 'o' : // Open exec matrix[0][0] = 1.0f / 3.0f; matrix[0][1] = 0.0f; matrix[0][2] = 14.0f; matrix[1][0] = 0.5f / 3.0f; matrix[1][1] = 1.0f / 3.0f; matrix[1][2] = 38.0f; break; } // Loop through grayscale or RGB image and add polys... for (y = 0, data = (const uchar *)(*(img->data())); y < img->h(); y ++, data += img->ld()) { polys[y] = 0; lineptr = lines[y]; for (x = 0, startx = 0, c = -1; x < img->w(); x ++, data += img->d()) { switch (img->d()) { case 2 : if (data[1] < 128) { temp = -1; break; } case 1 : temp = fl_gray_ramp(data[0] * (FL_NUM_GRAY - 1) / 255); break; default : if (data[3] < 128) { temp = -1; break; } case 3 : if (data[0] == data[1] && data[1] == data[2]) temp = fl_gray_ramp(data[0] * (FL_NUM_GRAY - 1) / 255); else temp = fl_color_cube(data[0] * (FL_NUM_RED - 1) / 255, data[1] * (FL_NUM_GREEN - 1) / 255, data[2] * (FL_NUM_BLUE - 1) / 255); break; } if (temp != c) { if (c != -1) { polys[y] ++; *lineptr++ = c; *lineptr++ = startx; *lineptr++ = x; } c = temp; startx = x; } } if (x > startx && c != -1) { polys[y] ++; *lineptr++ = c; *lineptr++ = startx; *lineptr++ = x; } } #if 1 // Now loop through the polygons and find polys with a common prefix color for (did_poly = 1; did_poly;) { for (y = 0, did_poly = 0; y < img->h();) { if (polys[y] == 0) { y ++; continue; } fprintf(stderr, "\ry = %d ", y); fflush(stderr); did_poly = 1; for (endy = y + 1; endy < (img->h() - 1) && polys[endy] > 0 && lines[y][0] == lines[endy][0]; endy ++) if (lines[y][1] > lines[endy][2] || lines[y][2] < lines[endy][1]) break; if ((endy - y) == 1) { // Just do a single row... DEBUG_printf(("# %d,%d to %d,%d...\n", lines[y][1], y, lines[y][2], y + 1)); printf("color(%d);\n", lines[y][0]); puts("bgnoutlinepolygon();"); print_vertex(img, lines[y][1], y, matrix, xmin, ymin, xmax, ymax); print_vertex(img, lines[y][2], y, matrix, xmin, ymin, xmax, ymax); print_vertex(img, lines[y][2], y + 1, matrix, xmin, ymin, xmax, ymax); print_vertex(img, lines[y][1], y + 1, matrix, xmin, ymin, xmax, ymax); printf("endoutlinepolygon(%d);\n", lines[y][0]); } else { // Combine multiple rows... #ifdef DEBUG for (tempy = y; tempy < endy; tempy ++) printf("# %d,%d to %d,%d...\n", lines[tempy][1], tempy, lines[tempy][2], tempy + 1); #endif // DEBUG printf("color(%d);\n", lines[y][0]); puts("bgnpolygon();"); print_vertex(img, lines[y][1], y, matrix, xmin, ymin, xmax, ymax); for (tempy = y; tempy < endy; tempy ++) { print_vertex(img, lines[tempy][2], tempy, matrix, xmin, ymin, xmax, ymax); while (tempy < (endy - 2) && lines[tempy][2] == lines[tempy + 1][2]) tempy ++; if (tempy >= (endy - 1) || lines[tempy][2] != lines[tempy + 1][2]) print_vertex(img, lines[tempy][2], tempy + 1, matrix, xmin, ymin, xmax, ymax); } for (tempy = endy - 1; tempy >= y; tempy --) { print_vertex(img, lines[tempy][1], tempy + 1, matrix, xmin, ymin, xmax, ymax); while (tempy > y && lines[tempy][1] == lines[tempy - 1][1]) tempy --; if (tempy > y && lines[tempy][1] != lines[tempy - 1][1]) print_vertex(img, lines[tempy][1], tempy, matrix, xmin, ymin, xmax, ymax); } puts("endpolygon();"); } for (tempy = y; tempy < endy; tempy ++) { polys[tempy] --; if (polys[tempy] > 0) memmove(lines[tempy], lines[tempy] + 3, 3 * polys[tempy] * sizeof(int)); } y = endy; } } #else for (y = 0; y < img->h(); y ++) { for (x = polys[y], lineptr = lines[y]; x > 0; x --, lineptr += 3) { printf("color(%d);\n", lineptr[0]); puts("bgnpolygon();"); print_vertex(img, lineptr[1], y, matrix, xmin, ymin, xmax, ymax); print_vertex(img, lineptr[2], y, matrix, xmin, ymin, xmax, ymax); print_vertex(img, lineptr[2], y + 1, matrix, xmin, ymin, xmax, ymax); print_vertex(img, lineptr[1], y + 1, matrix, xmin, ymin, xmax, ymax); puts("endpolygon();"); } } #endif // 0 printf("# Bounding box = [ %.2f %.2f %.2f %.2f ]\n", xmin, ymin, xmax, ymax); fputs("\rDone! \n", stderr); return (0); } // // End of "$Id: png2fti.cxx 1291 2004-06-14 16:03:10Z mike $". // htmldoc-1.8.27/desktop/viewfti.cxx0100664000212600000240000000424110063346076015602 0ustar mikeuser// // "$Id: viewfti.cxx 1291 2004-06-14 16:03:10Z mike $" // // FTI file viewer. // // Copyright 1999-2004 by Michael Sweet. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please report all bugs and problems to "fltk-bugs@fltk.org". // // Contents: // // main() - Show the named FTI file. // // // Include necessary headers... // #include #include #include #include #include #include // // 'main()' - Create a file chooser and wait for a selection to be made. // int // O - Exit status main(int argc, // I - Number of command-line arguments char *argv[]) // I - Command-line arguments { Fl_Window *window; // Main window Fl_Box *box; // Buttons Fl_File_Icon *icon; // New file icon int i; // Looping var if (argc < 2) { puts("Usage: viewfti filename.fti ..."); return (1); } // Make the file chooser... Fl::scheme(NULL); // Make the main window... window = new Fl_Window(200, 200, "FTI Viewer"); box = new Fl_Box(10, 10, 180, 180); box->box(FL_UP_BOX); box->labelcolor(fl_color_cube(FL_NUM_RED - 1, FL_NUM_GREEN - 1, FL_NUM_BLUE - 3)); icon = new Fl_File_Icon("", 0); for (i = 1; i < argc; i ++) icon->load_fti(argv[i]); icon->label(box); window->resizable(box); window->end(); window->show(); Fl::run(); return (0); } // // End of "$Id: viewfti.cxx 1291 2004-06-14 16:03:10Z mike $". // htmldoc-1.8.27/config.h.in0100664000212600000240000000563510330505373013755 0ustar mikeuser/* * "$Id: config.h.in 1439 2005-10-28 20:32:59Z mike $" * * Configuration file for HTMLDOC. * * Copyright 1997-2005 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "COPYING.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: ESP Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3142 USA * * Voice: (301) 373-9600 * EMail: info@easysw.com * WWW: http://www.easysw.com */ /* * What is the version number for this software? */ #define SVERSION "1.8.24" /* * Limits for the output "engines"... */ #define MAX_CHAPTERS 1000 /* Maximum number of chapters or files */ #define MAX_COLUMNS 200 /* Maximum number of columns in a table */ #define MAX_HF_IMAGES 10 /* Maximum number of header/footer images */ /* * Memory allocation units for other stuff... */ #define ALLOC_FILES 10 /* Temporary/image files */ #define ALLOC_HEADINGS 50 /* Headings */ #define ALLOC_LINKS 100 /* Web links */ #define ALLOC_OBJECTS 100 /* PDF objects */ #define ALLOC_PAGES 10 /* PS/PDF pages */ #define ALLOC_ROWS 20 /* Table rows */ /* * Locations of files... */ #define DOCUMENTATION "/usr/share/doc/htmldoc" #define HTML_DATA "/usr/share/htmldoc" /* * Do we have the FLTK library? */ #undef HAVE_LIBFLTK /* * Do we have the Xpm library? */ #undef HAVE_LIBXPM /* * Which encryption libraries do we have? */ #undef HAVE_CDSASSL #undef HAVE_GNUTLS #undef HAVE_LIBSSL #undef HAVE_SSL /* * Do we need to use ? */ #undef HAVE_STRINGS_H /* * Do we have the header file? */ #undef HAVE_LOCALE_H /* * Do we have some of the "standard" string functions? */ #undef HAVE_STRDUP #undef HAVE_STRCASECMP #undef HAVE_STRNCASECMP /* * How about snprintf() and vsnprintf()? */ #undef HAVE_SNPRINTF #undef HAVE_VSNPRINTF /* * Does the "tm" structure contain the "tm_gmtoff" member? */ #undef HAVE_TM_GMTOFF /* * Do we have hstrerror()? */ #undef HAVE_HSTRERROR /* * Do we have getaddrinfo()? */ #undef HAVE_GETADDRINFO /* * Do we have getnameinfo()? */ #undef HAVE_GETNAMEINFO /* * Do we have the long long type? */ #undef HAVE_LONG_LONG #ifdef HAVE_LONG_LONG # define HTMLDOC_LLFMT "%lld" # define HTMLDOC_LLCAST (long long) #else # define HTMLDOC_LLFMT "%ld" # define HTMLDOC_LLCAST (long) #endif /* HAVE_LONG_LONG */ /* * Do we have the strtoll() function? */ #undef HAVE_STRTOLL #ifndef HAVE_STRTOLL # define strtoll(nptr,endptr,base) strtol((nptr), (endptr), (base)) #endif /* !HAVE_STRTOLL */ /* * End of "$Id: config.h.in 1439 2005-10-28 20:32:59Z mike $". */ htmldoc-1.8.27/data/0040775000212600000240000000000010464177325012647 5ustar mikeuserhtmldoc-1.8.27/data/iso-8859-150100664000212600000240000000436610331501317014211 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x00a1 0xa2 0x00a2 0xa3 0x00a3 0xa4 0x20ac 0xa5 0x00a5 0xa6 0x0160 0xa7 0x00a7 0xa8 0x0161 0xa9 0x00a9 0xaa 0x00aa 0xab 0x00ab 0xac 0x00ac 0xad 0x00ad 0xae 0x00ae 0xaf 0x00af 0xb0 0x00b0 0xb1 0x00b1 0xb2 0x00b2 0xb3 0x00b3 0xb4 0x017d 0xb5 0x00b5 0xb6 0x00b6 0xb7 0x00b7 0xb8 0x017e 0xb9 0x00b9 0xba 0x00ba 0xbb 0x00bb 0xbc 0x0152 0xbd 0x0153 0xbe 0x0178 0xbf 0x00bf 0xc0 0x00c0 0xc1 0x00c1 0xc2 0x00c2 0xc3 0x00c3 0xc4 0x00c4 0xc5 0x00c5 0xc6 0x00c6 0xc7 0x00c7 0xc8 0x00c8 0xc9 0x00c9 0xca 0x00ca 0xcb 0x00cb 0xcc 0x00cc 0xcd 0x00cd 0xce 0x00ce 0xcf 0x00cf 0xd0 0x00d0 0xd1 0x00d1 0xd2 0x00d2 0xd3 0x00d3 0xd4 0x00d4 0xd5 0x00d5 0xd6 0x00d6 0xd7 0x00d7 0xd8 0x00d8 0xd9 0x00d9 0xda 0x00da 0xdb 0x00db 0xdc 0x00dc 0xdd 0x00dd 0xde 0x00de 0xdf 0x00df 0xe0 0x00e0 0xe1 0x00e1 0xe2 0x00e2 0xe3 0x00e3 0xe4 0x00e4 0xe5 0x00e5 0xe6 0x00e6 0xe7 0x00e7 0xe8 0x00e8 0xe9 0x00e9 0xea 0x00ea 0xeb 0x00eb 0xec 0x00ec 0xed 0x00ed 0xee 0x00ee 0xef 0x00ef 0xf0 0x00f0 0xf1 0x00f1 0xf2 0x00f2 0xf3 0x00f3 0xf4 0x00f4 0xf5 0x00f5 0xf6 0x00f6 0xf7 0x00f7 0xf8 0x00f8 0xf9 0x00f9 0xfa 0x00fa 0xfb 0x00fb 0xfc 0x00fc 0xfd 0x00fd 0xfe 0x00fe 0xff 0x00ff htmldoc-1.8.27/data/cp-12500100664000212600000240000000333007532466710013556 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 84 201E 85 2026 86 2020 87 2021 89 2030 8A 0160 8B 2039 8C 015A 8D 0164 8E 017D 8F 0179 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 99 2122 9A 0161 9B 203A 9C 015B 9D 0165 9E 017E 9F 017A A0 00A0 A1 02C7 A2 02D8 A3 0141 A4 00A4 A5 0104 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AA 015E AB 00AB AC 00AC AD 00AD AE 00AE AF 017B B0 00B0 B1 00B1 B2 02DB B3 0142 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00B8 B9 0105 BA 015F BB 00BB BC 013D BD 02DD BE 013E BF 017C C0 0154 C1 00C1 C2 00C2 C3 0102 C4 00C4 C5 0139 C6 0106 C7 00C7 C8 010C C9 00C9 CA 0118 CB 00CB CC 011A CD 00CD CE 00CE CF 010E D0 0110 D1 0143 D2 0147 D3 00D3 D4 00D4 D5 0150 D6 00D6 D7 00D7 D8 0158 D9 016E DA 00DA DB 0170 DC 00DC DD 00DD DE 0162 DF 00DF E0 0155 E1 00E1 E2 00E2 E3 0103 E4 00E4 E5 013A E6 0107 E7 00E7 E8 010D E9 00E9 EA 0119 EB 00EB EC 011B ED 00ED EE 00EE EF 010F F0 0111 F1 0144 F2 0148 F3 00F3 F4 00F4 F5 0151 F6 00F6 F7 00F7 F8 0159 F9 016F FA 00FA FB 0171 FC 00FC FD 00FD FE 0163 FF 02D9 htmldoc-1.8.27/data/cp-8740100664000212600000240000000301007532466710013504 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 85 2026 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 A0 00A0 A1 0E01 A2 0E02 A3 0E03 A4 0E04 A5 0E05 A6 0E06 A7 0E07 A8 0E08 A9 0E09 AA 0E0A AB 0E0B AC 0E0C AD 0E0D AE 0E0E AF 0E0F B0 0E10 B1 0E11 B2 0E12 B3 0E13 B4 0E14 B5 0E15 B6 0E16 B7 0E17 B8 0E18 B9 0E19 BA 0E1A BB 0E1B BC 0E1C BD 0E1D BE 0E1E BF 0E1F C0 0E20 C1 0E21 C2 0E22 C3 0E23 C4 0E24 C5 0E25 C6 0E26 C7 0E27 C8 0E28 C9 0E29 CA 0E2A CB 0E2B CC 0E2C CD 0E2D CE 0E2E CF 0E2F D0 0E30 D1 0E31 D2 0E32 D3 0E33 D4 0E34 D5 0E35 D6 0E36 D7 0E37 D8 0E38 D9 0E39 DA 0E3A DF 0E3F E0 0E40 E1 0E41 E2 0E42 E3 0E43 E4 0E44 E5 0E45 E6 0E46 E7 0E47 E8 0E48 E9 0E49 EA 0E4A EB 0E4B EC 0E4C ED 0E4D EE 0E4E EF 0E4F F0 0E50 F1 0E51 F2 0E52 F3 0E53 F4 0E54 F5 0E55 F6 0E56 F7 0E57 F8 0E58 F9 0E59 FA 0E5A FB 0E5B htmldoc-1.8.27/data/iso-8859-140100664000212600000240000000436610331501317014210 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x1e02 0xa2 0x1e03 0xa3 0x00a3 0xa4 0x010a 0xa5 0x010b 0xa6 0x1e0a 0xa7 0x00a7 0xa8 0x1e80 0xa9 0x00a9 0xaa 0x1e82 0xab 0x1e0b 0xac 0x1ef2 0xad 0x00ad 0xae 0x00ae 0xaf 0x0178 0xb0 0x1e1e 0xb1 0x1e1f 0xb2 0x0120 0xb3 0x0121 0xb4 0x1e40 0xb5 0x1e41 0xb6 0x00b6 0xb7 0x1e56 0xb8 0x1e81 0xb9 0x1e57 0xba 0x1e83 0xbb 0x1e60 0xbc 0x1ef3 0xbd 0x1e84 0xbe 0x1e85 0xbf 0x1e61 0xc0 0x00c0 0xc1 0x00c1 0xc2 0x00c2 0xc3 0x00c3 0xc4 0x00c4 0xc5 0x00c5 0xc6 0x00c6 0xc7 0x00c7 0xc8 0x00c8 0xc9 0x00c9 0xca 0x00ca 0xcb 0x00cb 0xcc 0x00cc 0xcd 0x00cd 0xce 0x00ce 0xcf 0x00cf 0xd0 0x0174 0xd1 0x00d1 0xd2 0x00d2 0xd3 0x00d3 0xd4 0x00d4 0xd5 0x00d5 0xd6 0x00d6 0xd7 0x1e6a 0xd8 0x00d8 0xd9 0x00d9 0xda 0x00da 0xdb 0x00db 0xdc 0x00dc 0xdd 0x00dd 0xde 0x0176 0xdf 0x00df 0xe0 0x00e0 0xe1 0x00e1 0xe2 0x00e2 0xe3 0x00e3 0xe4 0x00e4 0xe5 0x00e5 0xe6 0x00e6 0xe7 0x00e7 0xe8 0x00e8 0xe9 0x00e9 0xea 0x00ea 0xeb 0x00eb 0xec 0x00ec 0xed 0x00ed 0xee 0x00ee 0xef 0x00ef 0xf0 0x0175 0xf1 0x00f1 0xf2 0x00f2 0xf3 0x00f3 0xf4 0x00f4 0xf5 0x00f5 0xf6 0x00f6 0xf7 0x1e6b 0xf8 0x00f8 0xf9 0x00f9 0xfa 0x00fa 0xfb 0x00fb 0xfc 0x00fc 0xfd 0x00fd 0xfe 0x0177 0xff 0x00ff htmldoc-1.8.27/data/prolog.ps0100664000212600000240000001735207716722350014522 0ustar mikeuser%%BeginResource: procset htmldoc-device 1.8 24 % % The following procedures use setpagedevice, which is not supported by % Level 1 PostScript interpreters. For these systems, make setpagedevice % a no-op. % languagelevel 1 eq { /setpagedevice {pop} BD } if % % trayMap % % The trayMap variable defines an array of tray positions that are % used when looking up the "MEDIA POSITION nnn" page comment. The % array should be exactly 8 elements long. Unavailable trays should % be set to -1. % /trayMap [-1 -1 -1 -1 -1 -1 -1 -1] def product (Xerox DocuPrint N4025 PS3) eq { /trayMap [0 1 2 3 4 -1 -1 -1] def } if product (Xerox DocuPrint N2025 PS) eq { /trayMap [0 1 2 3 -1 -1 -1 -1] def } if product (HP LaserJet 5Si/5Si MX PS) eq { /trayMap [3 0 1 4 -1 -1 -1 -1] def } if product (HP LaserJet 2100 Series) eq { /trayMap [3 0 1 -1 -1 -1 -1 -1] def } if product (HP LaserJet 5000 Series) eq { /trayMap [3 0 1 4 -1 -1 -1 -1] def } if product (Xerox Document Centre 220/230) eq { /trayMap [1 2 3 4 -1 5 -1 -1] def } if product (Xerox Document Centre 332/340) eq { /trayMap [1 2 3 4 -1 5 -1 -1] def } if %product (Insert ModelName string here) eq % { /trayMap [-1 -1 -1 -1 -1 -1 -1 -1] def } if % % haveMediaColor % % The haveMediaColor variable defines whether a printer supports the % MediaColor attribute in the page device dictionary. % /haveMediaColor product (Xerox Document Centre 220/230) eq product (Xerox Document Centre 332/340) eq or product (Xerox DocuPrint 100 NPS PS2) eq or product (Xerox DocuPrint 2000 Series 100 EPS) eq or % product (Insert ModelName string here) eq or def % % haveMediaPosition % % The haveMediaPosition variable defines whether a printer supports % the MediaPosition attribute in the page device dictionary. % /haveMediaPosition product (Xerox DocuPrint N2025 PS) eq product (Xerox DocuPrint N4025 PS3) eq or product (Xerox Document Centre 220/230) eq or product (Xerox Document Centre 332/340) eq or product (HP LaserJet 5Si/5Si MX PS) eq or product (HP LaserJet 2100 Series) eq or product (HP LaserJet 5000 Series) eq or % product (Insert ModelName string here) eq or def % % haveMediaType % % The haveMediaType variable defines whether a printer supports % the MediaType attribute in the page device dictionary. % /haveMediaType product (Xerox DocuPrint N2025 PS) eq product (Xerox DocuPrint N4025 PS3) eq or product (Xerox Document Centre 220/230) eq or product (Xerox Document Centre 332/340) eq or product (HP LaserJet 5Si/5Si MX PS) eq or product (HP LaserJet 5000 Series) eq or product (Xerox DocuPrint 100 NPS PS2) eq or product (Xerox DocuPrint 2000 Series 100 EPS) eq or % product (Insert ModelName string here) eq or def % % haveDeferredMediaSelection % % The haveDeferredMediaSelection variable defines whether a printer supports % the DeferredMediaSelection attribute in the page device dictionary. % /haveDeferredMediaSelection product (Xerox DocuPrint N2025 PS) eq product (Xerox DocuPrint N4025 PS3) eq or product (HP LaserJet 5Si/5Si MX PS) eq or % product (Insert ModelName string here) eq or not def % % haveManualFeed % % The haveManualFeed variable defines whether a printer supports % the ManualFeed attribute in the page device dictionary. % /haveManualFeed product (Xerox DocuPrint N2025 PS) eq product (Xerox DocuPrint N4025 PS3) eq or product (HP LaserJet 5Si/5Si MX PS) eq or product (HP LaserJet 2100 Series) eq or product (HP LaserJet 5000 Series) eq or product (Xerox Document Centre 220/230) eq or product (Xerox Document Centre 332/340) eq or % product (Insert ModelName string here) eq or not def % % haveTraySwitch % % The haveTraySwitch variable defines whether a printer supports % the TraySwitch attribute in the page device dictionary. % /haveTraySwitch product (Xerox DocuPrint N2025 PS) eq product (Xerox DocuPrint N4025 PS3) eq or product (Xerox Document Centre 220/230) eq or product (Xerox Document Centre 332/340) eq or % product (Insert ModelName string here) eq or not def % % copies SetCopies - % % Set the number of copies to print. % /SetCopies { % Set the number of copies of each page. For Level 1 printers, use the % #copies variable; otherwise, use the NumCopies attribute in the % page device dictionary... languagelevel 1 eq { /#copies 1 index def } { 2 dict begin /NumCopies 1 index currentdict end setpagedevice } ifelse % Discard the argument on the stack... pop } BD % % duplex tumble SetDuplexMode - % % Set the duplexing mode; "duplex" and "tumble" are boolean values. % /CurrentDuplex false def /CurrentTumble false def /SetDuplexMode { % See if the duplex settings have changed; if not, don't change % them, otherwise some printers will reset their state and you % end up with single-sided output... 1 index CurrentDuplex ne 1 index CurrentTumble ne or { % Build a page device dictionary with the Duplex and Tumble % attributes... 4 dict begin /Duplex 2 index def /Tumble 1 index def currentdict end % Register the new attributes... setpagedevice } if % Save the arguments on the stack... /CurrentTumble exch def /CurrentDuplex exch def } BD % % string SetMediaColor - % % Set the media color for the output. % /CurrentMediaColor () def /SetMediaColor { dup CurrentMediaColor ne { haveMediaType { haveMediaColor { % Build a page device dictionary with the MediaColor attribute set to % the argument... 2 dict begin /MediaColor 1 index def currentdict end } { % Build a page device dictionary with the MediaType attribute set to % "Color"... 2 dict begin /MediaType (Color) def currentdict end } ifelse % Register any new attributes... setpagedevice } if } if % Save the media color on the stack... /CurrentMediaColor exch def } BD % % number SetMediaPosition - % % Set the media position (tray) for the output. % /CurrentMediaPosition -1 def /SetMediaPosition { dup CurrentMediaPosition ne { haveMediaPosition { % Add any tray position offset to the tray number. trayMap exch 1 sub get dup 0 ge { % Build a page device dictionary with the MediaPosition, % DeferredMediaSelection, ManualFeed, and TraySwitch attributes... 8 dict begin /MediaPosition 1 index def haveDeferredMediaSelection { /DeferredMediaSelection true def } if haveTraySwitch { /TraySwitch false def } if haveManualFeed { /ManualFeed false def } if currentdict end % Register the new attributes... setpagedevice } { pop } ifelse } if } if % Save the media position on the stack... /CurrentMediaPosition exch def } BD % % string SetMediaType - % % Set the media type for the output. Use a null string to do auto selection. % /CurrentMediaType () def /SetMediaType { dup CurrentMediaType ne { haveMediaType { % Build a page device dictionary with the MediaType attribute... 2 dict begin /MediaType 1 index def currentdict end % Register the new attribute... setpagedevice } if } if % Save the media type on the stack... /CurrentMediaType exch def } BD % % width height SetPageSize - % % Set the media size for the output. % /CurrentPageWidth 0 def /CurrentPageLength 0 def /SetPageSize { 1 index CurrentPageWidth ne 1 index CurrentPageLength ne or { % Put the arguments in an array... 2 copy 2 array astore % Build a page device dictionary with the PageSize and ImageableArea % attributes... 4 dict begin /PageSize 1 index def /ImageableArea null def currentdict end % Register the new attributes... setpagedevice % Don't need the page size array anymore... pop } if % Save the size on the stack... /CurrentPageLength exch def /CurrentPageWidth exch def } BD %%EndResource htmldoc-1.8.27/data/iso-8859-10100664000212600000240000000436410331501317014122 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x00a1 0xa2 0x00a2 0xa3 0x00a3 0xa4 0x00a4 0xa5 0x00a5 0xa6 0x00a6 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x00a9 0xaa 0x00aa 0xab 0x00ab 0xac 0x00ac 0xad 0x00ad 0xae 0x00ae 0xaf 0x00af 0xb0 0x00b0 0xb1 0x00b1 0xb2 0x00b2 0xb3 0x00b3 0xb4 0x00b4 0xb5 0x00b5 0xb6 0x00b6 0xb7 0x00b7 0xb8 0x00b8 0xb9 0x00b9 0xba 0x00ba 0xbb 0x00bb 0xbc 0x00bc 0xbd 0x00bd 0xbe 0x00be 0xbf 0x00bf 0xc0 0x00c0 0xc1 0x00c1 0xc2 0x00c2 0xc3 0x00c3 0xc4 0x00c4 0xc5 0x00c5 0xc6 0x00c6 0xc7 0x00c7 0xc8 0x00c8 0xc9 0x00c9 0xca 0x00ca 0xcb 0x00cb 0xcc 0x00cc 0xcd 0x00cd 0xce 0x00ce 0xcf 0x00cf 0xd0 0x00d0 0xd1 0x00d1 0xd2 0x00d2 0xd3 0x00d3 0xd4 0x00d4 0xd5 0x00d5 0xd6 0x00d6 0xd7 0x00d7 0xd8 0x00d8 0xd9 0x00d9 0xda 0x00da 0xdb 0x00db 0xdc 0x00dc 0xdd 0x00dd 0xde 0x00de 0xdf 0x00df 0xe0 0x00e0 0xe1 0x00e1 0xe2 0x00e2 0xe3 0x00e3 0xe4 0x00e4 0xe5 0x00e5 0xe6 0x00e6 0xe7 0x00e7 0xe8 0x00e8 0xe9 0x00e9 0xea 0x00ea 0xeb 0x00eb 0xec 0x00ec 0xed 0x00ed 0xee 0x00ee 0xef 0x00ef 0xf0 0x00f0 0xf1 0x00f1 0xf2 0x00f2 0xf3 0x00f3 0xf4 0x00f4 0xf5 0x00f5 0xf6 0x00f6 0xf7 0x00f7 0xf8 0x00f8 0xf9 0x00f9 0xfa 0x00fa 0xfb 0x00fb 0xfc 0x00fc 0xfd 0x00fd 0xfe 0x00fe 0xff 0x00ff htmldoc-1.8.27/data/cp-12510100664000212600000240000000337007532466710013563 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 0402 81 0403 82 201A 83 0453 84 201E 85 2026 86 2020 87 2021 88 20AC 89 2030 8A 0409 8B 2039 8C 040A 8D 040C 8E 040B 8F 040F 90 0452 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 99 2122 9A 0459 9B 203A 9C 045A 9D 045C 9E 045B 9F 045F A0 00A0 A1 040E A2 045E A3 0408 A4 00A4 A5 0490 A6 00A6 A7 00A7 A8 0401 A9 00A9 AA 0404 AB 00AB AC 00AC AD 00AD AE 00AE AF 0407 B0 00B0 B1 00B1 B2 0406 B3 0456 B4 0491 B5 00B5 B6 00B6 B7 00B7 B8 0451 B9 2116 BA 0454 BB 00BB BC 0458 BD 0405 BE 0455 BF 0457 C0 0410 C1 0411 C2 0412 C3 0413 C4 0414 C5 0415 C6 0416 C7 0417 C8 0418 C9 0419 CA 041A CB 041B CC 041C CD 041D CE 041E CF 041F D0 0420 D1 0421 D2 0422 D3 0423 D4 0424 D5 0425 D6 0426 D7 0427 D8 0428 D9 0429 DA 042A DB 042B DC 042C DD 042D DE 042E DF 042F E0 0430 E1 0431 E2 0432 E3 0433 E4 0434 E5 0435 E6 0436 E7 0437 E8 0438 E9 0439 EA 043A EB 043B EC 043C ED 043D EE 043E EF 043F F0 0440 F1 0441 F2 0442 F3 0443 F4 0444 F5 0445 F6 0446 F7 0447 F8 0448 F9 0449 FA 044A FB 044B FC 044C FD 044D FE 044E FF 044F htmldoc-1.8.27/data/cp-12520100664000212600000240000000333007532466710013560 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 83 0192 84 201E 85 2026 86 2020 87 2021 88 02C6 89 2030 8A 0160 8B 2039 8C 0152 8E 017D 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 98 02DC 99 2122 9A 0161 9B 203A 9C 0153 9E 017E 9F 0178 A0 00A0 A1 00A1 A2 00A2 A3 00A3 A4 00A4 A5 00A5 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AA 00AA AB 00AB AC 00AC AD 00AD AE 00AE AF 00AF B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00B8 B9 00B9 BA 00BA BB 00BB BC 00BC BD 00BD BE 00BE BF 00BF C0 00C0 C1 00C1 C2 00C2 C3 00C3 C4 00C4 C5 00C5 C6 00C6 C7 00C7 C8 00C8 C9 00C9 CA 00CA CB 00CB CC 00CC CD 00CD CE 00CE CF 00CF D0 00D0 D1 00D1 D2 00D2 D3 00D3 D4 00D4 D5 00D5 D6 00D6 D7 00D7 D8 00D8 D9 00D9 DA 00DA DB 00DB DC 00DC DD 00DD DE 00DE DF 00DF E0 00E0 E1 00E1 E2 00E2 E3 00E3 E4 00E4 E5 00E5 E6 00E6 E7 00E7 E8 00E8 E9 00E9 EA 00EA EB 00EB EC 00EC ED 00ED EE 00EE EF 00EF F0 00F0 F1 00F1 F2 00F2 F3 00F3 F4 00F4 F5 00F5 F6 00F6 F7 00F7 F8 00F8 F9 00F9 FA 00FA FB 00FB FC 00FC FD 00FD FE 00FE FF 00FF htmldoc-1.8.27/data/cp-12530100664000212600000240000000317007532466710013563 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 83 0192 84 201E 85 2026 86 2020 87 2021 89 2030 8B 2039 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 99 2122 9B 203A A0 00A0 A1 0385 A2 0386 A3 00A3 A4 00A4 A5 00A5 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AB 00AB AC 00AC AD 00AD AE 00AE AF 2015 B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 0384 B5 00B5 B6 00B6 B7 00B7 B8 0388 B9 0389 BA 038A BB 00BB BC 038C BD 00BD BE 038E BF 038F C0 0390 C1 0391 C2 0392 C3 0393 C4 0394 C5 0395 C6 0396 C7 0397 C8 0398 C9 0399 CA 039A CB 039B CC 039C CD 039D CE 039E CF 039F D0 03A0 D1 03A1 D3 03A3 D4 03A4 D5 03A5 D6 03A6 D7 03A7 D8 03A8 D9 03A9 DA 03AA DB 03AB DC 03AC DD 03AD DE 03AE DF 03AF E0 03B0 E1 03B1 E2 03B2 E3 03B3 E4 03B4 E5 03B5 E6 03B6 E7 03B7 E8 03B8 E9 03B9 EA 03BA EB 03BB EC 03BC ED 03BD EE 03BE EF 03BF F0 03C0 F1 03C1 F2 03C2 F3 03C3 F4 03C4 F5 03C5 F6 03C6 F7 03C7 F8 03C8 F9 03C9 FA 03CA FB 03CB FC 03CC FD 03CD FE 03CE htmldoc-1.8.27/data/cp-12540100664000212600000240000000331007532466710013560 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 83 0192 84 201E 85 2026 86 2020 87 2021 88 02C6 89 2030 8A 0160 8B 2039 8C 0152 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 98 02DC 99 2122 9A 0161 9B 203A 9C 0153 9F 0178 A0 00A0 A1 00A1 A2 00A2 A3 00A3 A4 00A4 A5 00A5 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AA 00AA AB 00AB AC 00AC AD 00AD AE 00AE AF 00AF B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00B8 B9 00B9 BA 00BA BB 00BB BC 00BC BD 00BD BE 00BE BF 00BF C0 00C0 C1 00C1 C2 00C2 C3 00C3 C4 00C4 C5 00C5 C6 00C6 C7 00C7 C8 00C8 C9 00C9 CA 00CA CB 00CB CC 00CC CD 00CD CE 00CE CF 00CF D0 011E D1 00D1 D2 00D2 D3 00D3 D4 00D4 D5 00D5 D6 00D6 D7 00D7 D8 00D8 D9 00D9 DA 00DA DB 00DB DC 00DC DD 0130 DE 015E DF 00DF E0 00E0 E1 00E1 E2 00E2 E3 00E3 E4 00E4 E5 00E5 E6 00E6 E7 00E7 E8 00E8 E9 00E9 EA 00EA EB 00EB EC 00EC ED 00ED EE 00EE EF 00EF F0 011F F1 00F1 F2 00F2 F3 00F3 F4 00F4 F5 00F5 F6 00F6 F7 00F7 F8 00F8 F9 00F9 FA 00FA FB 00FB FC 00FC FD 0131 FE 015F FF 00FF htmldoc-1.8.27/data/cp-12550100664000212600000240000000311007532466710013557 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 83 0192 84 201E 85 2026 86 2020 87 2021 88 02C6 89 2030 8B 2039 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 98 02DC 99 2122 9B 203A A0 00A0 A1 00A1 A2 00A2 A3 00A3 A4 20AA A5 00A5 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AA 00D7 AB 00AB AC 00AC AD 00AD AE 00AE AF 00AF B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00B8 B9 00B9 BA 00F7 BB 00BB BC 00BC BD 00BD BE 00BE BF 00BF C0 05B0 C1 05B1 C2 05B2 C3 05B3 C4 05B4 C5 05B5 C6 05B6 C7 05B7 C8 05B8 C9 05B9 CB 05BB CC 05BC CD 05BD CE 05BE CF 05BF D0 05C0 D1 05C1 D2 05C2 D3 05C3 D4 05F0 D5 05F1 D6 05F2 D7 05F3 D8 05F4 E0 05D0 E1 05D1 E2 05D2 E3 05D3 E4 05D4 E5 05D5 E6 05D6 E7 05D7 E8 05D8 E9 05D9 EA 05DA EB 05DB EC 05DC ED 05DD EE 05DE EF 05DF F0 05E0 F1 05E1 F2 05E2 F3 05E3 F4 05E4 F5 05E5 F6 05E6 F7 05E7 F8 05E8 F9 05E9 FA 05EA FD 200E FE 200F htmldoc-1.8.27/data/cp-12560100664000212600000240000000340007532466710013562 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 81 067E 82 201A 83 0192 84 201E 85 2026 86 2020 87 2021 88 02C6 89 2030 8A 0679 8B 2039 8C 0152 8D 0686 8E 0698 8F 0688 90 06AF 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 98 06A9 99 2122 9A 0691 9B 203A 9C 0153 9D 200C 9E 200D 9F 06BA A0 00A0 A1 060C A2 00A2 A3 00A3 A4 00A4 A5 00A5 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AA 06BE AB 00AB AC 00AC AD 00AD AE 00AE AF 00AF B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00B8 B9 00B9 BA 061B BB 00BB BC 00BC BD 00BD BE 00BE BF 061F C0 06C1 C1 0621 C2 0622 C3 0623 C4 0624 C5 0625 C6 0626 C7 0627 C8 0628 C9 0629 CA 062A CB 062B CC 062C CD 062D CE 062E CF 062F D0 0630 D1 0631 D2 0632 D3 0633 D4 0634 D5 0635 D6 0636 D7 00D7 D8 0637 D9 0638 DA 0639 DB 063A DC 0640 DD 0641 DE 0642 DF 0643 E0 00E0 E1 0644 E2 00E2 E3 0645 E4 0646 E5 0647 E6 0648 E7 00E7 E8 00E8 E9 00E9 EA 00EA EB 00EB EC 0649 ED 064A EE 00EE EF 00EF F0 064B F1 064C F2 064D F3 064E F4 00F4 F5 064F F6 0650 F7 00F7 F8 0651 F9 00F9 FA 0652 FB 00FB FC 00FC FD 200E FE 200F FF 06D2 htmldoc-1.8.27/data/cp-12570100664000212600000240000000324007532466710013565 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 84 201E 85 2026 86 2020 87 2021 89 2030 8B 2039 8D 00A8 8E 02C7 8F 00B8 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 99 2122 9B 203A 9D 00AF 9E 02DB A0 00A0 A2 00A2 A3 00A3 A4 00A4 A6 00A6 A7 00A7 A8 00D8 A9 00A9 AA 0156 AB 00AB AC 00AC AD 00AD AE 00AE AF 00C6 B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00F8 B9 00B9 BA 0157 BB 00BB BC 00BC BD 00BD BE 00BE BF 00E6 C0 0104 C1 012E C2 0100 C3 0106 C4 00C4 C5 00C5 C6 0118 C7 0112 C8 010C C9 00C9 CA 0179 CB 0116 CC 0122 CD 0136 CE 012A CF 013B D0 0160 D1 0143 D2 0145 D3 00D3 D4 014C D5 00D5 D6 00D6 D7 00D7 D8 0172 D9 0141 DA 015A DB 016A DC 00DC DD 017B DE 017D DF 00DF E0 0105 E1 012F E2 0101 E3 0107 E4 00E4 E5 00E5 E6 0119 E7 0113 E8 010D E9 00E9 EA 017A EB 0117 EC 0123 ED 0137 EE 012B EF 013C F0 0161 F1 0144 F2 0146 F3 00F3 F4 014D F5 00F5 F6 00F6 F7 00F7 F8 0173 F9 0142 FA 015B FB 016B FC 00FC FD 017C FE 017E FF 02D9 htmldoc-1.8.27/data/cp-12580100664000212600000240000000327007532466710013571 0ustar mikeuser20 0020 21 0021 22 0022 23 0023 24 0024 25 0025 26 0026 27 0027 28 0028 29 0029 2A 002A 2B 002B 2C 002C 2D 002D 2E 002E 2F 002F 30 0030 31 0031 32 0032 33 0033 34 0034 35 0035 36 0036 37 0037 38 0038 39 0039 3A 003A 3B 003B 3C 003C 3D 003D 3E 003E 3F 003F 40 0040 41 0041 42 0042 43 0043 44 0044 45 0045 46 0046 47 0047 48 0048 49 0049 4A 004A 4B 004B 4C 004C 4D 004D 4E 004E 4F 004F 50 0050 51 0051 52 0052 53 0053 54 0054 55 0055 56 0056 57 0057 58 0058 59 0059 5A 005A 5B 005B 5C 005C 5D 005D 5E 005E 5F 005F 60 0060 61 0061 62 0062 63 0063 64 0064 65 0065 66 0066 67 0067 68 0068 69 0069 6A 006A 6B 006B 6C 006C 6D 006D 6E 006E 6F 006F 70 0070 71 0071 72 0072 73 0073 74 0074 75 0075 76 0076 77 0077 78 0078 79 0079 7A 007A 7B 007B 7C 007C 7D 007D 7E 007E 7F 007F 80 20AC 82 201A 83 0192 84 201E 85 2026 86 2020 87 2021 88 02C6 89 2030 8B 2039 8C 0152 91 2018 92 2019 93 201C 94 201D 95 2022 96 2013 97 2014 98 02DC 99 2122 9B 203A 9C 0153 9F 0178 A0 00A0 A1 00A1 A2 00A2 A3 00A3 A4 00A4 A5 00A5 A6 00A6 A7 00A7 A8 00A8 A9 00A9 AA 00AA AB 00AB AC 00AC AD 00AD AE 00AE AF 00AF B0 00B0 B1 00B1 B2 00B2 B3 00B3 B4 00B4 B5 00B5 B6 00B6 B7 00B7 B8 00B8 B9 00B9 BA 00BA BB 00BB BC 00BC BD 00BD BE 00BE BF 00BF C0 00C0 C1 00C1 C2 00C2 C3 0102 C4 00C4 C5 00C5 C6 00C6 C7 00C7 C8 00C8 C9 00C9 CA 00CA CB 00CB CC 0300 CD 00CD CE 00CE CF 00CF D0 0110 D1 00D1 D2 0309 D3 00D3 D4 00D4 D5 01A0 D6 00D6 D7 00D7 D8 00D8 D9 00D9 DA 00DA DB 00DB DC 00DC DD 01AF DE 0303 DF 00DF E0 00E0 E1 00E1 E2 00E2 E3 0103 E4 00E4 E5 00E5 E6 00E6 E7 00E7 E8 00E8 E9 00E9 EA 00EA EB 00EB EC 0301 ED 00ED EE 00EE EF 00EF F0 0111 F1 00F1 F2 0323 F3 00F3 F4 00F4 F5 01A1 F6 00F6 F7 00F7 F8 00F8 F9 00F9 FA 00FA FB 00FB FC 00FC FD 01B0 FE 20AB FF 00FF htmldoc-1.8.27/data/iso-8859-20100664000212600000240000000436410331501317014123 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x0104 0xa2 0x02d8 0xa3 0x0141 0xa4 0x00a4 0xa5 0x013d 0xa6 0x015a 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x0160 0xaa 0x015e 0xab 0x0164 0xac 0x0179 0xad 0x00ad 0xae 0x017d 0xaf 0x017b 0xb0 0x00b0 0xb1 0x0105 0xb2 0x02db 0xb3 0x0142 0xb4 0x00b4 0xb5 0x013e 0xb6 0x015b 0xb7 0x02c7 0xb8 0x00b8 0xb9 0x0161 0xba 0x015f 0xbb 0x0165 0xbc 0x017a 0xbd 0x02dd 0xbe 0x017e 0xbf 0x017c 0xc0 0x0154 0xc1 0x00c1 0xc2 0x00c2 0xc3 0x0102 0xc4 0x00c4 0xc5 0x0139 0xc6 0x0106 0xc7 0x00c7 0xc8 0x010c 0xc9 0x00c9 0xca 0x0118 0xcb 0x00cb 0xcc 0x011a 0xcd 0x00cd 0xce 0x00ce 0xcf 0x010e 0xd0 0x0110 0xd1 0x0143 0xd2 0x0147 0xd3 0x00d3 0xd4 0x00d4 0xd5 0x0150 0xd6 0x00d6 0xd7 0x00d7 0xd8 0x0158 0xd9 0x016e 0xda 0x00da 0xdb 0x0170 0xdc 0x00dc 0xdd 0x00dd 0xde 0x0162 0xdf 0x00df 0xe0 0x0155 0xe1 0x00e1 0xe2 0x00e2 0xe3 0x0103 0xe4 0x00e4 0xe5 0x013a 0xe6 0x0107 0xe7 0x00e7 0xe8 0x010d 0xe9 0x00e9 0xea 0x0119 0xeb 0x00eb 0xec 0x011b 0xed 0x00ed 0xee 0x00ee 0xef 0x010f 0xf0 0x0111 0xf1 0x0144 0xf2 0x0148 0xf3 0x00f3 0xf4 0x00f4 0xf5 0x0151 0xf6 0x00f6 0xf7 0x00f7 0xf8 0x0159 0xf9 0x016f 0xfa 0x00fa 0xfb 0x0171 0xfc 0x00fc 0xfd 0x00fd 0xfe 0x0163 0xff 0x02d9 htmldoc-1.8.27/data/iso-8859-30100664000212600000240000000424010331501317014115 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x0126 0xa2 0x02d8 0xa3 0x00a3 0xa4 0x00a4 0xa6 0x0124 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x0130 0xaa 0x015e 0xab 0x011e 0xac 0x0134 0xad 0x00ad 0xaf 0x017b 0xb0 0x00b0 0xb1 0x0127 0xb2 0x00b2 0xb3 0x00b3 0xb4 0x00b4 0xb5 0x00b5 0xb6 0x0125 0xb7 0x00b7 0xb8 0x00b8 0xb9 0x0131 0xba 0x015f 0xbb 0x011f 0xbc 0x0135 0xbd 0x00bd 0xbf 0x017c 0xc0 0x00c0 0xc1 0x00c1 0xc2 0x00c2 0xc4 0x00c4 0xc5 0x010a 0xc6 0x0108 0xc7 0x00c7 0xc8 0x00c8 0xc9 0x00c9 0xca 0x00ca 0xcb 0x00cb 0xcc 0x00cc 0xcd 0x00cd 0xce 0x00ce 0xcf 0x00cf 0xd1 0x00d1 0xd2 0x00d2 0xd3 0x00d3 0xd4 0x00d4 0xd5 0x0120 0xd6 0x00d6 0xd7 0x00d7 0xd8 0x011c 0xd9 0x00d9 0xda 0x00da 0xdb 0x00db 0xdc 0x00dc 0xdd 0x016c 0xde 0x015c 0xdf 0x00df 0xe0 0x00e0 0xe1 0x00e1 0xe2 0x00e2 0xe4 0x00e4 0xe5 0x010b 0xe6 0x0109 0xe7 0x00e7 0xe8 0x00e8 0xe9 0x00e9 0xea 0x00ea 0xeb 0x00eb 0xec 0x00ec 0xed 0x00ed 0xee 0x00ee 0xef 0x00ef 0xf1 0x00f1 0xf2 0x00f2 0xf3 0x00f3 0xf4 0x00f4 0xf5 0x0121 0xf6 0x00f6 0xf7 0x00f7 0xf8 0x011d 0xf9 0x00f9 0xfa 0x00fa 0xfb 0x00fb 0xfc 0x00fc 0xfd 0x016d 0xfe 0x015d 0xff 0x02d9 htmldoc-1.8.27/data/iso-8859-40100664000212600000240000000436410331501317014125 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x0104 0xa2 0x0138 0xa3 0x0156 0xa4 0x00a4 0xa5 0x0128 0xa6 0x013b 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x0160 0xaa 0x0112 0xab 0x0122 0xac 0x0166 0xad 0x00ad 0xae 0x017d 0xaf 0x00af 0xb0 0x00b0 0xb1 0x0105 0xb2 0x02db 0xb3 0x0157 0xb4 0x00b4 0xb5 0x0129 0xb6 0x013c 0xb7 0x02c7 0xb8 0x00b8 0xb9 0x0161 0xba 0x0113 0xbb 0x0123 0xbc 0x0167 0xbd 0x014a 0xbe 0x017e 0xbf 0x014b 0xc0 0x0100 0xc1 0x00c1 0xc2 0x00c2 0xc3 0x00c3 0xc4 0x00c4 0xc5 0x00c5 0xc6 0x00c6 0xc7 0x012e 0xc8 0x010c 0xc9 0x00c9 0xca 0x0118 0xcb 0x00cb 0xcc 0x0116 0xcd 0x00cd 0xce 0x00ce 0xcf 0x012a 0xd0 0x0110 0xd1 0x0145 0xd2 0x014c 0xd3 0x0136 0xd4 0x00d4 0xd5 0x00d5 0xd6 0x00d6 0xd7 0x00d7 0xd8 0x00d8 0xd9 0x0172 0xda 0x00da 0xdb 0x00db 0xdc 0x00dc 0xdd 0x0168 0xde 0x016a 0xdf 0x00df 0xe0 0x0101 0xe1 0x00e1 0xe2 0x00e2 0xe3 0x00e3 0xe4 0x00e4 0xe5 0x00e5 0xe6 0x00e6 0xe7 0x012f 0xe8 0x010d 0xe9 0x00e9 0xea 0x0119 0xeb 0x00eb 0xec 0x0117 0xed 0x00ed 0xee 0x00ee 0xef 0x012b 0xf0 0x0111 0xf1 0x0146 0xf2 0x014d 0xf3 0x0137 0xf4 0x00f4 0xf5 0x00f5 0xf6 0x00f6 0xf7 0x00f7 0xf8 0x00f8 0xf9 0x0173 0xfa 0x00fa 0xfb 0x00fb 0xfc 0x00fc 0xfd 0x0169 0xfe 0x016b 0xff 0x02d9 htmldoc-1.8.27/data/iso-8859-50100664000212600000240000000436410331501317014126 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x0401 0xa2 0x0402 0xa3 0x0403 0xa4 0x0404 0xa5 0x0405 0xa6 0x0406 0xa7 0x0407 0xa8 0x0408 0xa9 0x0409 0xaa 0x040a 0xab 0x040b 0xac 0x040c 0xad 0x00ad 0xae 0x040e 0xaf 0x040f 0xb0 0x0410 0xb1 0x0411 0xb2 0x0412 0xb3 0x0413 0xb4 0x0414 0xb5 0x0415 0xb6 0x0416 0xb7 0x0417 0xb8 0x0418 0xb9 0x0419 0xba 0x041a 0xbb 0x041b 0xbc 0x041c 0xbd 0x041d 0xbe 0x041e 0xbf 0x041f 0xc0 0x0420 0xc1 0x0421 0xc2 0x0422 0xc3 0x0423 0xc4 0x0424 0xc5 0x0425 0xc6 0x0426 0xc7 0x0427 0xc8 0x0428 0xc9 0x0429 0xca 0x042a 0xcb 0x042b 0xcc 0x042c 0xcd 0x042d 0xce 0x042e 0xcf 0x042f 0xd0 0x0430 0xd1 0x0431 0xd2 0x0432 0xd3 0x0433 0xd4 0x0434 0xd5 0x0435 0xd6 0x0436 0xd7 0x0437 0xd8 0x0438 0xd9 0x0439 0xda 0x043a 0xdb 0x043b 0xdc 0x043c 0xdd 0x043d 0xde 0x043e 0xdf 0x043f 0xe0 0x0440 0xe1 0x0441 0xe2 0x0442 0xe3 0x0443 0xe4 0x0444 0xe5 0x0445 0xe6 0x0446 0xe7 0x0447 0xe8 0x0448 0xe9 0x0449 0xea 0x044a 0xeb 0x044b 0xec 0x044c 0xed 0x044d 0xee 0x044e 0xef 0x044f 0xf0 0x2116 0xf1 0x0451 0xf2 0x0452 0xf3 0x0453 0xf4 0x0454 0xf5 0x0455 0xf6 0x0456 0xf7 0x0457 0xf8 0x0458 0xf9 0x0459 0xfa 0x045a 0xfb 0x045b 0xfc 0x045c 0xfd 0x00a7 0xfe 0x045e 0xff 0x045f htmldoc-1.8.27/data/iso-8859-60100664000212600000240000000333010331501317014117 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0660 0x31 0x0661 0x32 0x0662 0x33 0x0663 0x34 0x0664 0x35 0x0665 0x36 0x0666 0x37 0x0667 0x38 0x0668 0x39 0x0669 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa4 0x00a4 0xac 0x060c 0xad 0x00ad 0xbb 0x061b 0xbf 0x061f 0xc1 0x0621 0xc2 0x0622 0xc3 0x0623 0xc4 0x0624 0xc5 0x0625 0xc6 0x0626 0xc7 0x0627 0xc8 0x0628 0xc9 0x0629 0xca 0x062a 0xcb 0x062b 0xcc 0x062c 0xcd 0x062d 0xce 0x062e 0xcf 0x062f 0xd0 0x0630 0xd1 0x0631 0xd2 0x0632 0xd3 0x0633 0xd4 0x0634 0xd5 0x0635 0xd6 0x0636 0xd7 0x0637 0xd8 0x0638 0xd9 0x0639 0xda 0x063a 0xe0 0x0640 0xe1 0x0641 0xe2 0x0642 0xe3 0x0643 0xe4 0x0644 0xe5 0x0645 0xe6 0x0646 0xe7 0x0647 0xe8 0x0648 0xe9 0x0649 0xea 0x064a 0xeb 0x064b 0xec 0x064c 0xed 0x064d 0xee 0x064e 0xef 0x064f 0xf0 0x0650 0xf1 0x0651 0xf2 0x0652 htmldoc-1.8.27/data/iso-8859-70100664000212600000240000000425410331501317014126 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x02bd 0xa2 0x02bc 0xa3 0x00a3 0xa6 0x00a6 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x00a9 0xab 0x00ab 0xac 0x00ac 0xad 0x00ad 0xaf 0x2015 0xb0 0x00b0 0xb1 0x00b1 0xb2 0x00b2 0xb3 0x00b3 0xb4 0x0384 0xb5 0x0385 0xb6 0x0386 0xb7 0x00b7 0xb8 0x0388 0xb9 0x0389 0xba 0x038a 0xbb 0x00bb 0xbc 0x038c 0xbd 0x00bd 0xbe 0x038e 0xbf 0x038f 0xc0 0x0390 0xc1 0x0391 0xc2 0x0392 0xc3 0x0393 0xc4 0x0394 0xc5 0x0395 0xc6 0x0396 0xc7 0x0397 0xc8 0x0398 0xc9 0x0399 0xca 0x039a 0xcb 0x039b 0xcc 0x039c 0xcd 0x039d 0xce 0x039e 0xcf 0x039f 0xd0 0x03a0 0xd1 0x03a1 0xd3 0x03a3 0xd4 0x03a4 0xd5 0x03a5 0xd6 0x03a6 0xd7 0x03a7 0xd8 0x03a8 0xd9 0x03a9 0xda 0x03aa 0xdb 0x03ab 0xdc 0x03ac 0xdd 0x03ad 0xde 0x03ae 0xdf 0x03af 0xe0 0x03b0 0xe1 0x03b1 0xe2 0x03b2 0xe3 0x03b3 0xe4 0x03b4 0xe5 0x03b5 0xe6 0x03b6 0xe7 0x03b7 0xe8 0x03b8 0xe9 0x03b9 0xea 0x03ba 0xeb 0x03bb 0xec 0x03bc 0xed 0x03bd 0xee 0x03be 0xef 0x03bf 0xf0 0x03c0 0xf1 0x03c1 0xf2 0x03c2 0xf3 0x03c3 0xf4 0x03c4 0xf5 0x03c5 0xf6 0x03c6 0xf7 0x03c7 0xf8 0x03c8 0xf9 0x03c9 0xfa 0x03ca 0xfb 0x03cb 0xfc 0x03cc 0xfd 0x03cd 0xfe 0x03ce htmldoc-1.8.27/data/koi8-r0100664000212600000240000000516407243050544013700 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0x80 0x2500 0x81 0x2502 0x82 0x250C 0x83 0x2510 0x84 0x2514 0x85 0x2518 0x86 0x251C 0x87 0x2524 0x88 0x252C 0x89 0x2534 0x8A 0x253C 0x8B 0x2580 0x8C 0x2584 0x8D 0x2588 0x8E 0x258C 0x8F 0x2590 0x90 0x2591 0x91 0x2592 0x92 0x2593 0x93 0x2320 0x94 0x25A0 0x95 0x2219 0x96 0x221A 0x97 0x2248 0x98 0x2264 0x99 0x2265 0x9A 0x00A0 0x9B 0x2321 0x9C 0x00B0 0x9D 0x00B2 0x9E 0x00B7 0x9F 0x00F7 0xA0 0x2550 0xA1 0x2551 0xA2 0x2552 0xA3 0x0451 0xA4 0x2553 0xA5 0x2554 0xA6 0x2555 0xA7 0x2556 0xA8 0x2557 0xA9 0x2558 0xAA 0x2559 0xAB 0x255A 0xAC 0x255B 0xAD 0x255C 0xAE 0x255D 0xAF 0x255E 0xB0 0x255F 0xB1 0x2560 0xB2 0x2561 0xB3 0x0401 0xB4 0x2562 0xB5 0x2563 0xB6 0x2564 0xB7 0x2565 0xB8 0x2566 0xB9 0x2567 0xBA 0x2568 0xBB 0x2569 0xBC 0x256A 0xBD 0x256B 0xBE 0x256C 0xBF 0x00A9 0xC0 0x044E 0xC1 0x0430 0xC2 0x0431 0xC3 0x0446 0xC4 0x0434 0xC5 0x0435 0xC6 0x0444 0xC7 0x0433 0xC8 0x0445 0xC9 0x0438 0xCA 0x0439 0xCB 0x043A 0xCC 0x043B 0xCD 0x043C 0xCE 0x043D 0xCF 0x043E 0xD0 0x043F 0xD1 0x044F 0xD2 0x0440 0xD3 0x0441 0xD4 0x0442 0xD5 0x0443 0xD6 0x0436 0xD7 0x0432 0xD8 0x044C 0xD9 0x044B 0xDA 0x0437 0xDB 0x0448 0xDC 0x044D 0xDD 0x0449 0xDE 0x0447 0xDF 0x044A 0xE0 0x042E 0xE1 0x0410 0xE2 0x0411 0xE3 0x0426 0xE4 0x0414 0xE5 0x0415 0xE6 0x0424 0xE7 0x0413 0xE8 0x0425 0xE9 0x0418 0xEA 0x0419 0xEB 0x041A 0xEC 0x041B 0xED 0x041C 0xEE 0x041D 0xEF 0x041E 0xF0 0x041F 0xF1 0x042F 0xF2 0x0420 0xF3 0x0421 0xF4 0x0422 0xF5 0x0423 0xF6 0x0416 0xF7 0x0412 0xF8 0x042C 0xF9 0x042B 0xFA 0x0417 0xFB 0x0428 0xFC 0x042D 0xFD 0x0429 0xFE 0x0427 0xFF 0x042A htmldoc-1.8.27/data/psglyphs0100664000212600000240000003515410274144361014441 0ustar mikeuser0020 space 0021 exclam 0022 quotedbl 0023 numbersign 0024 dollar 0025 percent 0026 ampersand 0027 quotesingle 0028 parenleft 0029 parenright 002a asterisk 002b plus 002c comma 002d hyphen 002e period 002f slash 0030 zero 0031 one 0032 two 0033 three 0034 four 0035 five 0036 six 0037 seven 0038 eight 0039 nine 003a colon 003b semicolon 003c less 003d equal 003e greater 003f question 0040 at 0041 A 0042 B 0043 C 0044 D 0045 E 0046 F 0047 G 0048 H 0049 I 004a J 004b K 004c L 004d M 004e N 004f O 0050 P 0051 Q 0052 R 0053 S 0054 T 0055 U 0056 V 0057 W 0058 X 0059 Y 005a Z 005b bracketleft 005c backslash 005d bracketright 005e asciicircum 005f underscore 0060 grave 0061 a 0062 b 0063 c 0064 d 0065 e 0066 f 0067 g 0068 h 0069 i 006a j 006b k 006c l 006d m 006e n 006f o 0070 p 0071 q 0072 r 0073 s 0074 t 0075 u 0076 v 0077 w 0078 x 0079 y 007a z 007b braceleft 007c bar 007d braceright 007e asciitilde 00a0 space 00a1 exclamdown 00a2 cent 00a3 sterling 00a4 currency 00a5 yen 00a6 brokenbar 00a7 section 00a8 dieresis 00a9 copyright 00aa ordfeminine 00ab guillemotleft 00ac logicalnot 00ad minus 00ae registered 00af macron 00b0 degree 00b1 plusminus 00b2 twosuperior 00b3 threesuperior 00b4 acute 00b5 mu 00b6 paragraph 00b7 periodcentered 00b8 cedilla 00b9 onesuperior 00ba ordmasculine 00bb guillemotright 00bc onequarter 00bd onehalf 00be threequarters 00bf questiondown 00c0 Agrave 00c1 Aacute 00c2 Acircumflex 00c3 Atilde 00c4 Adieresis 00c5 Aring 00c6 AE 00c7 Ccedilla 00c8 Egrave 00c9 Eacute 00ca Ecircumflex 00cb Edieresis 00cc Igrave 00cd Iacute 00ce Icircumflex 00cf Idieresis 00d0 Eth 00d1 Ntilde 00d2 Ograve 00d3 Oacute 00d4 Ocircumflex 00d5 Otilde 00d6 Odieresis 00d7 multiply 00d8 Oslash 00d9 Ugrave 00da Uacute 00db Ucircumflex 00dc Udieresis 00dd Yacute 00de Thorn 00df germandbls 00e0 agrave 00e1 aacute 00e2 acircumflex 00e3 atilde 00e4 adieresis 00e5 aring 00e6 ae 00e7 ccedilla 00e8 egrave 00e9 eacute 00ea ecircumflex 00eb edieresis 00ec igrave 00ed iacute 00ee icircumflex 00ef idieresis 00f0 eth 00f1 ntilde 00f2 ograve 00f3 oacute 00f4 ocircumflex 00f5 otilde 00f6 odieresis 00f7 divide 00f8 oslash 00f9 ugrave 00fa uacute 00fb ucircumflex 00fc udieresis 00fd yacute 00fe thorn 00ff ydieresis 0100 Amacron 0101 amacron 0102 Abreve 0103 abreve 0104 Aogonek 0105 aogonek 0106 Cacute 0107 cacute 0108 Ccircumflex 0109 ccircumflex 010a Cdotaccent 010b cdotaccent 010c Ccaron 010d ccaron 010e Dcaron 010f dcaron 0110 Dcroat 0111 dcroat 0112 Emacron 0113 emacron 0114 Ebreve 0115 ebreve 0116 Edotaccent 0117 edotaccent 0118 Eogonek 0119 eogonek 011a Ecaron 011b ecaron 011c Gcircumflex 011d gcircumflex 011e Gbreve 011f gbreve 0120 Gdotaccent 0121 gdotaccent 0122 Gcommaaccent 0123 gcommaaccent 0124 Hcircumflex 0125 hcircumflex 0126 Hbar 0127 hbar 0128 Itilde 0129 itilde 012a Imacron 012b imacron 012c Ibreve 012d ibreve 012e Iogonek 012f iogonek 0130 Idotaccent 0131 dotlessi 0132 IJ 0133 ij 0134 Jcircumflex 0135 jcircumflex 0136 Kcommaaccent 0137 kcommaaccent 0138 kgreenlandic 0139 Lacute 013a lacute 013b Lcommaaccent 013c lcommaaccent 013d Lcaron 013e lcaron 013f Ldot 0140 ldot 0141 Lslash 0142 lslash 0143 Nacute 0144 nacute 0145 Ncommaaccent 0146 ncommaaccent 0147 Ncaron 0148 ncaron 0149 napostrophe 014a Eng 014b eng 014c Omacron 014d omacron 014e Obreve 014f obreve 0150 Ohungarumlaut 0151 ohungarumlaut 0152 OE 0153 oe 0154 Racute 0155 racute 0156 Rcommaaccent 0157 rcommaaccent 0158 Rcaron 0159 rcaron 015a Sacute 015b sacute 015c Scircumflex 015d scircumflex 015e Scedilla 015f scedilla 0160 Scaron 0161 scaron 0162 Tcommaaccent 0163 tcommaaccent 0164 Tcaron 0165 tcaron 0166 Tbar 0167 tbar 0168 Utilde 0169 utilde 016a Umacron 016b umacron 016c Ubreve 016d ubreve 016e Uring 016f uring 0170 Uhungarumlaut 0171 uhungarumlaut 0172 Uogonek 0173 uogonek 0174 Wcircumflex 0175 wcircumflex 0176 Ycircumflex 0177 ycircumflex 0178 Ydieresis 0179 Zacute 017a zacute 017b Zdotaccent 017c zdotaccent 017d Zcaron 017e zcaron 017f longs 0192 florin 01a0 Ohorn 01a1 ohorn 01af Uhorn 01b0 uhorn 01e6 Gcaron 01e7 gcaron 01fa Aringacute 01fb aringacute 01fc AEacute 01fd aeacute 01fe Oslashacute 01ff oslashacute 0218 Scommaaccent 0219 scommaaccent 021a Tcommaaccent 021b tcommaaccent 02bc afii57929 02bd afii64937 02c6 circumflex 02c7 caron 02c9 macron 02d8 breve 02d9 dotaccent 02da ring 02db ogonek 02dc tilde 02dd hungarumlaut 0300 gravecomb 0301 acutecomb 0303 tildecomb 0309 hookabovecomb 0323 dotbelowcomb 0384 tonos 0385 dieresistonos 0386 Alphatonos 0387 anoteleia 0388 Epsilontonos 0389 Etatonos 038a Iotatonos 038c Omicrontonos 038e Upsilontonos 038f Omegatonos 0390 iotadieresistonos 0391 Alpha 0392 Beta 0393 Gamma 0394 Delta 0395 Epsilon 0396 Zeta 0397 Eta 0398 Theta 0399 Iota 039a Kappa 039b Lambda 039c Mu 039d Nu 039e Xi 039f Omicron 03a0 Pi 03a1 Rho 03a3 Sigma 03a4 Tau 03a5 Upsilon 03a6 Phi 03a7 Chi 03a8 Psi 03a9 Omega 03aa Iotadieresis 03ab Upsilondieresis 03ac alphatonos 03ad epsilontonos 03ae etatonos 03af iotatonos 03b0 upsilondieresistonos 03b1 alpha 03b2 beta 03b3 gamma 03b4 delta 03b5 epsilon 03b6 zeta 03b7 eta 03b8 theta 03b9 iota 03ba kappa 03bb lambda 03bc mu 03bd nu 03be xi 03bf omicron 03c0 pi 03c1 rho 03c2 sigma1 03c3 sigma 03c4 tau 03c5 upsilon 03c6 phi 03c7 chi 03c8 psi 03c9 omega 03ca iotadieresis 03cb upsilondieresis 03cc omicrontonos 03cd upsilontonos 03ce omegatonos 03d1 theta1 03d2 Upsilon1 03d5 phi1 03d6 omega1 0401 afii10023 0402 afii10051 0403 afii10052 0404 afii10053 0405 afii10054 0406 afii10055 0407 afii10056 0408 afii10057 0409 afii10058 040a afii10059 040b afii10060 040c afii10061 040e afii10062 040f afii10145 0410 afii10017 0411 afii10018 0412 afii10019 0413 afii10020 0414 afii10021 0415 afii10022 0416 afii10024 0417 afii10025 0418 afii10026 0419 afii10027 041a afii10028 041b afii10029 041c afii10030 041d afii10031 041e afii10032 041f afii10033 0420 afii10034 0421 afii10035 0422 afii10036 0423 afii10037 0424 afii10038 0425 afii10039 0426 afii10040 0427 afii10041 0428 afii10042 0429 afii10043 042a afii10044 042b afii10045 042c afii10046 042d afii10047 042e afii10048 042f afii10049 0430 afii10065 0431 afii10066 0432 afii10067 0433 afii10068 0434 afii10069 0435 afii10070 0436 afii10072 0437 afii10073 0438 afii10074 0439 afii10075 043a afii10076 043b afii10077 043c afii10078 043d afii10079 043e afii10080 043f afii10081 0440 afii10082 0441 afii10083 0442 afii10084 0443 afii10085 0444 afii10086 0445 afii10087 0446 afii10088 0447 afii10089 0448 afii10090 0449 afii10091 044a afii10092 044b afii10093 044c afii10094 044d afii10095 044e afii10096 044f afii10097 0451 afii10071 0452 afii10099 0453 afii10100 0454 afii10101 0455 afii10102 0456 afii10103 0457 afii10104 0458 afii10105 0459 afii10106 045a afii10107 045b afii10108 045c afii10109 045e afii10110 045f afii10193 0462 afii10146 0463 afii10194 0472 afii10147 0473 afii10195 0474 afii10148 0475 afii10196 0490 afii10050 0491 afii10098 04d9 afii10846 05b0 afii57799 05b1 afii57801 05b2 afii57800 05b3 afii57802 05b4 afii57793 05b5 afii57794 05b6 afii57795 05b7 afii57798 05b8 afii57797 05b9 afii57806 05bb afii57796 05bc afii57807 05bd afii57839 05be afii57645 05bf afii57841 05c0 afii57842 05c1 afii57804 05c2 afii57803 05c3 afii57658 05d0 afii57664 05d1 afii57665 05d2 afii57666 05d3 afii57667 05d4 afii57668 05d5 afii57669 05d6 afii57670 05d7 afii57671 05d8 afii57672 05d9 afii57673 05da afii57674 05db afii57675 05dc afii57676 05dd afii57677 05de afii57678 05df afii57679 05e0 afii57680 05e1 afii57681 05e2 afii57682 05e3 afii57683 05e4 afii57684 05e5 afii57685 05e6 afii57686 05e7 afii57687 05e8 afii57688 05e9 afii57689 05ea afii57690 05f0 afii57716 05f1 afii57717 05f2 afii57718 060c afii57388 061b afii57403 061f afii57407 0621 afii57409 0622 afii57410 0623 afii57411 0624 afii57412 0625 afii57413 0626 afii57414 0627 afii57415 0628 afii57416 0629 afii57417 062a afii57418 062b afii57419 062c afii57420 062d afii57421 062e afii57422 062f afii57423 0630 afii57424 0631 afii57425 0632 afii57426 0633 afii57427 0634 afii57428 0635 afii57429 0636 afii57430 0637 afii57431 0638 afii57432 0639 afii57433 063a afii57434 0640 afii57440 0641 afii57441 0642 afii57442 0643 afii57443 0644 afii57444 0645 afii57445 0646 afii57446 0647 afii57470 0648 afii57448 0649 afii57449 064a afii57450 064b afii57451 064c afii57452 064d afii57453 064e afii57454 064f afii57455 0650 afii57456 0651 afii57457 0652 afii57458 0660 afii57392 0661 afii57393 0662 afii57394 0663 afii57395 0664 afii57396 0665 afii57397 0666 afii57398 0667 afii57399 0668 afii57400 0669 afii57401 066a afii57381 066d afii63167 0679 afii57511 067e afii57506 0686 afii57507 0688 afii57512 0691 afii57513 0698 afii57508 06a4 afii57505 06af afii57509 06ba afii57514 06d2 afii57519 06d5 afii57534 1e80 Wgrave 1e81 wgrave 1e82 Wacute 1e83 wacute 1e84 Wdieresis 1e85 wdieresis 1ef2 Ygrave 1ef3 ygrave 200c afii61664 200d afii301 200e afii299 200f afii300 2012 figuredash 2013 endash 2014 emdash 2015 afii00208 2017 underscoredbl 2018 quoteleft 2019 quoteright 201a quotesinglbase 201b quotereversed 201c quotedblleft 201d quotedblright 201e quotedblbase 2020 dagger 2021 daggerdbl 2022 bullet 2024 onedotenleader 2025 twodotenleader 2026 ellipsis 202c afii61573 202d afii61574 202e afii61575 2030 perthousand 2032 minute 2033 second 2039 guilsinglleft 203a guilsinglright 203c exclamdbl 2044 fraction 2070 zerosuperior 2074 foursuperior 2075 fivesuperior 2076 sixsuperior 2077 sevensuperior 2078 eightsuperior 2079 ninesuperior 207d parenleftsuperior 207e parenrightsuperior 207f nsuperior 2080 zeroinferior 2081 oneinferior 2082 twoinferior 2083 threeinferior 2084 fourinferior 2085 fiveinferior 2086 sixinferior 2087 seveninferior 2088 eightinferior 2089 nineinferior 208d parenleftinferior 208e parenrightinferior 20a1 colonmonetary 20a3 franc 20a4 lira 20a7 peseta 20aa afii57636 20ab dong 20ac Euro 2105 afii61248 2111 Ifraktur 2113 afii61289 2116 afii61352 2118 weierstrass 211c Rfraktur 211e prescription 2122 trademark 2126 Omega 212e estimated 2135 aleph 2153 onethird 2154 twothirds 215b oneeighth 215c threeeighths 215d fiveeighths 215e seveneighths 2190 arrowleft 2191 arrowup 2192 arrowright 2193 arrowdown 2194 arrowboth 2195 arrowupdn 21a8 arrowupdnbse 21b5 carriagereturn 21d0 arrowdblleft 21d1 arrowdblup 21d2 arrowdblright 21d3 arrowdbldown 21d4 arrowdblboth 2200 universal 2202 partialdiff 2203 existential 2205 emptyset 2206 Delta 2207 gradient 2208 element 2209 notelement 220b suchthat 220f product 2211 summation 2212 minus 2215 fraction 2217 asteriskmath 2219 periodcentered 221a radical 221d proportional 221e infinity 221f orthogonal 2220 angle 2227 logicaland 2228 logicalor 2229 intersection 222a union 222b integral 2234 therefore 223c similar 2245 congruent 2248 approxequal 2260 notequal 2261 equivalence 2264 lessequal 2265 greaterequal 2282 propersubset 2283 propersuperset 2284 notsubset 2286 reflexsubset 2287 reflexsuperset 2295 circleplus 2297 circlemultiply 22a5 perpendicular 22c5 dotmath 2302 house 2310 revlogicalnot 2320 integraltp 2321 integralbt 2329 angleleft 232a angleright 2500 SF100000 2502 SF110000 250c SF010000 2510 SF030000 2514 SF020000 2518 SF040000 251c SF080000 2524 SF090000 252c SF060000 2534 SF070000 253c SF050000 2550 SF430000 2551 SF240000 2552 SF510000 2553 SF520000 2554 SF390000 2555 SF220000 2556 SF210000 2557 SF250000 2558 SF500000 2559 SF490000 255a SF380000 255b SF280000 255c SF270000 255d SF260000 255e SF360000 255f SF370000 2560 SF420000 2561 SF190000 2562 SF200000 2563 SF230000 2564 SF470000 2565 SF480000 2566 SF410000 2567 SF450000 2568 SF460000 2569 SF400000 256a SF540000 256b SF530000 256c SF440000 2580 upblock 2584 dnblock 2588 block 258c lfblock 2590 rtblock 2591 ltshade 2592 shade 2593 dkshade 25a0 filledbox 25a1 H22073 25aa H18543 25ab H18551 25ac filledrect 25b2 triagup 25ba triagrt 25bc triagdn 25c4 triaglf 25ca lozenge 25cb circle 25cf H18533 25d8 invbullet 25d9 invcircle 25e6 openbullet 263a smileface 263b invsmileface 263c sun 2640 female 2642 male 2660 spade 2663 club 2665 heart 2666 diamond 266a musicalnote 266b musicalnotedbl f6be dotlessj f6bf LL f6c0 ll f6c1 Scedilla f6c2 scedilla f6c3 commaaccent f6c4 afii10063 f6c5 afii10064 f6c6 afii10192 f6c7 afii10831 f6c8 afii10832 f6c9 Acute f6ca Caron f6cb Dieresis f6cc DieresisAcute f6cd DieresisGrave f6ce Grave f6cf Hungarumlaut f6d0 Macron f6d1 cyrBreve f6d2 cyrFlex f6d3 dblGrave f6d4 cyrbreve f6d5 cyrflex f6d6 dblgrave f6d7 dieresisacute f6d8 dieresisgrave f6d9 copyrightserif f6da registerserif f6db trademarkserif f6dc onefitted f6dd rupiah f6de threequartersemdash f6df centinferior f6e0 centsuperior f6e1 commainferior f6e2 commasuperior f6e3 dollarinferior f6e4 dollarsuperior f6e5 hypheninferior f6e6 hyphensuperior f6e7 periodinferior f6e8 periodsuperior f6e9 asuperior f6ea bsuperior f6eb dsuperior f6ec esuperior f6ed isuperior f6ee lsuperior f6ef msuperior f6f0 osuperior f6f1 rsuperior f6f2 ssuperior f6f3 tsuperior f6f4 Brevesmall f6f5 Caronsmall f6f6 Circumflexsmall f6f7 Dotaccentsmall f6f8 Hungarumlautsmall f6f9 Lslashsmall f6fa OEsmall f6fb Ogoneksmall f6fc Ringsmall f6fd Scaronsmall f6fe Tildesmall f6ff Zcaronsmall f721 exclamsmall f724 dollaroldstyle f726 ampersandsmall f730 zerooldstyle f731 oneoldstyle f732 twooldstyle f733 threeoldstyle f734 fouroldstyle f735 fiveoldstyle f736 sixoldstyle f737 sevenoldstyle f738 eightoldstyle f739 nineoldstyle f73f questionsmall f760 Gravesmall f761 Asmall f762 Bsmall f763 Csmall f764 Dsmall f765 Esmall f766 Fsmall f767 Gsmall f768 Hsmall f769 Ismall f76a Jsmall f76b Ksmall f76c Lsmall f76d Msmall f76e Nsmall f76f Osmall f770 Psmall f771 Qsmall f772 Rsmall f773 Ssmall f774 Tsmall f775 Usmall f776 Vsmall f777 Wsmall f778 Xsmall f779 Ysmall f77a Zsmall f7a1 exclamdownsmall f7a2 centoldstyle f7a8 Dieresissmall f7af Macronsmall f7b4 Acutesmall f7b8 Cedillasmall f7bf questiondownsmall f7e0 Agravesmall f7e1 Aacutesmall f7e2 Acircumflexsmall f7e3 Atildesmall f7e4 Adieresissmall f7e5 Aringsmall f7e6 AEsmall f7e7 Ccedillasmall f7e8 Egravesmall f7e9 Eacutesmall f7ea Ecircumflexsmall f7eb Edieresissmall f7ec Igravesmall f7ed Iacutesmall f7ee Icircumflexsmall f7ef Idieresissmall f7f0 Ethsmall f7f1 Ntildesmall f7f2 Ogravesmall f7f3 Oacutesmall f7f4 Ocircumflexsmall f7f5 Otildesmall f7f6 Odieresissmall f7f8 Oslashsmall f7f9 Ugravesmall f7fa Uacutesmall f7fb Ucircumflexsmall f7fc Udieresissmall f7fd Yacutesmall f7fe Thornsmall f7ff Ydieresissmall f8e5 radicalex f8e6 arrowvertex f8e7 arrowhorizex f8e8 registersans f8e9 copyrightsans f8ea trademarksans f8eb parenlefttp f8ec parenleftex f8ed parenleftbt f8ee bracketlefttp f8ef bracketleftex f8f0 bracketleftbt f8f1 bracelefttp f8f2 braceleftmid f8f3 braceleftbt f8f4 braceex f8f5 integralex f8f6 parenrighttp f8f7 parenrightex f8f8 parenrightbt f8f9 bracketrighttp f8fa bracketrightex f8fb bracketrightbt f8fc bracerighttp f8fd bracerightmid f8fe bracerightbt fb00 ff fb01 fi fb02 fl fb03 ffi fb04 ffl fb1f afii57705 fb2a afii57694 fb2b afii57695 fb35 afii57723 fb4b afii57700 htmldoc-1.8.27/data/iso-8859-80100664000212600000240000000345410331501317014130 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa2 0x00a2 0xa3 0x00a3 0xa4 0x00a4 0xa5 0x00a5 0xa6 0x00a6 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x00a9 0xaa 0x00d7 0xab 0x00ab 0xac 0x00ac 0xad 0x00ad 0xae 0x00ae 0xaf 0x203e 0xb0 0x00b0 0xb1 0x00b1 0xb2 0x00b2 0xb3 0x00b3 0xb4 0x00b4 0xb5 0x00b5 0xb6 0x00b6 0xb7 0x00b7 0xb8 0x00b8 0xb9 0x00b9 0xba 0x00f7 0xbb 0x00bb 0xbc 0x00bc 0xbd 0x00bd 0xbe 0x00be 0xdf 0x2017 0xe0 0x05d0 0xe1 0x05d1 0xe2 0x05d2 0xe3 0x05d3 0xe4 0x05d4 0xe5 0x05d5 0xe6 0x05d6 0xe7 0x05d7 0xe8 0x05d8 0xe9 0x05d9 0xea 0x05da 0xeb 0x05db 0xec 0x05dc 0xed 0x05dd 0xee 0x05de 0xef 0x05df 0xf0 0x05e0 0xf1 0x05e1 0xf2 0x05e2 0xf3 0x05e3 0xf4 0x05e4 0xf5 0x05e5 0xf6 0x05e6 0xf7 0x05e7 0xf8 0x05e8 0xf9 0x05e9 0xfa 0x05ea htmldoc-1.8.27/data/iso-8859-90100664000212600000240000000437010331501317014127 0ustar mikeuser0x20 0x0020 0x21 0x0021 0x22 0x0022 0x23 0x0023 0x24 0x0024 0x25 0x0025 0x26 0x0026 0x27 0x0027 0x28 0x0028 0x29 0x0029 0x2a 0x002a 0x2b 0x002b 0x2c 0x002c 0x2d 0x002d 0x2e 0x002e 0x2f 0x002f 0x30 0x0030 0x31 0x0031 0x32 0x0032 0x33 0x0033 0x34 0x0034 0x35 0x0035 0x36 0x0036 0x37 0x0037 0x38 0x0038 0x39 0x0039 0x3a 0x003a 0x3b 0x003b 0x3c 0x003c 0x3d 0x003d 0x3e 0x003e 0x3f 0x003f 0x40 0x0040 0x41 0x0041 0x42 0x0042 0x43 0x0043 0x44 0x0044 0x45 0x0045 0x46 0x0046 0x47 0x0047 0x48 0x0048 0x49 0x0049 0x4a 0x004a 0x4b 0x004b 0x4c 0x004c 0x4d 0x004d 0x4e 0x004e 0x4f 0x004f 0x50 0x0050 0x51 0x0051 0x52 0x0052 0x53 0x0053 0x54 0x0054 0x55 0x0055 0x56 0x0056 0x57 0x0057 0x58 0x0058 0x59 0x0059 0x5a 0x005a 0x5b 0x005b 0x5c 0x005c 0x5d 0x005d 0x5e 0x005e 0x5f 0x005f 0x60 0x0060 0x61 0x0061 0x62 0x0062 0x63 0x0063 0x64 0x0064 0x65 0x0065 0x66 0x0066 0x67 0x0067 0x68 0x0068 0x69 0x0069 0x6a 0x006a 0x6b 0x006b 0x6c 0x006c 0x6d 0x006d 0x6e 0x006e 0x6f 0x006f 0x70 0x0070 0x71 0x0071 0x72 0x0072 0x73 0x0073 0x74 0x0074 0x75 0x0075 0x76 0x0076 0x77 0x0077 0x78 0x0078 0x79 0x0079 0x7a 0x007a 0x7b 0x007b 0x7c 0x007c 0x7d 0x007d 0x7e 0x007e 0xa0 0x00a0 0xa1 0x00a1 0xa2 0x00a2 0xa3 0x00a3 0xa4 0x00a4 0xa5 0x00a5 0xa6 0x00a6 0xa7 0x00a7 0xa8 0x00a8 0xa9 0x00a9 0xaa 0x00aa 0xab 0x00ab 0xac 0x00ac 0xad 0x00ad 0xae 0x00ae 0xaf 0x00af 0xb0 0x00b0 0xb1 0x00b1 0xb2 0x00b2 0xb3 0x00b3 0xb4 0x00b4 0xb5 0x00b5 0xb6 0x00b6 0xb7 0x00b7 0xb8 0x00b8 0xb9 0x00b9 0xba 0x00ba 0xbb 0x00bb 0xbc 0x00bc 0xbd 0x00bd 0xbe 0x00be 0xbf 0x00bf 0xc0 0x00c0 0xc1 0x00c1 0xc2 0x00c2 0xc3 0x00c3 0xc4 0x00c4 0xc5 0x00c5 0xc6 0x00c6 0xc7 0x00c7 0xc8 0x00c8 0xc9 0x00c9 0xca 0x00ca 0xcb 0x00cb 0xcc 0x00cc 0xcd 0x00cd 0xce 0x00ce 0xcf 0x00cf 0xd0 0x011e 0xd1 0x00d1 0xd2 0x00d2 0xd3 0x00d3 0xd4 0x00d4 0xd5 0x00d5 0xd6 0x00d6 0xd7 0x00d7 0xd8 0x00d8 0xd9 0x00d9 0xda 0x00da 0xdb 0x00db 0xdc 0x00dc 0xdd 0x0130 0xde 0x015e 0xdf 0x00df 0xe0 0x00e0 0xe1 0x00e1 0xe2 0x00e2 0xe3 0x00e3 0xe4 0x00e4 0xe5 0x00e5 0xe6 0x00e6 0xe7 0x00e7 0xe8 0x00e8 0xe9 0x00e9 0xea 0x00ea 0xeb 0x00eb 0xec 0x00ec 0xed 0x00ed 0xee 0x00ee 0xef 0x00ef 0xf0 0x011f 0xf1 0x00f1 0xf2 0x00f2 0xf3 0x00f3 0xf4 0x00f4 0xf5 0x00f5 0xf6 0x00f6 0xf7 0x00f7 0xf8 0x00f8 0xf9 0x00f9 0xfa 0x00fa 0xfb 0x00fb 0xfc 0x00fc 0xfd 0x0131 0xfe 0x015f 0xff 0x00ff htmldoc-1.8.27/data/Makefile0100664000212600000240000000271410047553615014305 0ustar mikeuser# # "$Id: Makefile 1202 2004-05-10 01:14:53Z mike $" # # Makefile for HTMLDOC data files. # # Copyright 1997-2001 by Easy Software Products. # # These coded instructions, statements, and computer programs are the # property of Easy Software Products and are protected by Federal # copyright law. Distribution and use rights are outlined in the file # "COPYING.txt" which should have been included with this file. If this # file is missing or damaged please contact Easy Software Products # at: # # Attn: ESP Licensing Information # Easy Software Products # 44141 Airport View Drive, Suite 204 # Hollywood, Maryland 20636-3142 USA # # Voice: (301) 373-9600 # EMail: info@easysw.com # WWW: http://www.easysw.com # # # Include common definitions... # include ../Makedefs # # Character set/glyph files... # FILES = cp-1250 cp-1251 cp-1252 cp-1253 cp-1254 cp-1255 \ cp-1256 cp-1257 cp-1258 cp-874 \ iso-8859-1 iso-8859-14 iso-8859-15 iso-8859-2 iso-8859-3 \ iso-8859-4 iso-8859-5 iso-8859-6 iso-8859-7 iso-8859-8 \ iso-8859-9 \ koi8-r prolog.ps psglyphs # # Make everything... # all: # # Install everything... # install: if [ ! -d $(datadir)/htmldoc/data ]; then\ $(MKDIR) $(datadir)/htmldoc/data;\ fi $(CP) $(FILES) $(datadir)/htmldoc/data $(CHMOD) ugo+r $(datadir)/htmldoc/data/* # # Clean out object and library files... # clean: # # End of "$Id: Makefile 1202 2004-05-10 01:14:53Z mike $". # htmldoc-1.8.27/COMPILE.txt0100664000212600000240000000516210146407725013565 0ustar mikeuserCOMPILE.txt - 11/16/2004 ------------------------ REQUIREMENTS To compile HTMLDOC you'll need ANSI-compliant C and C++ compilers (gcc is fine, most vendor compilers work, too). The JPEG, PNG, and ZLIB libraries are provided with HTMLDOC. For the GUI support you'll need FLTK 1.1 or higher. FLTK is a LGPL'd cross-platform GUI toolkit and can be downloaded from: http://www.fltk.org/ COMPILING HTMLDOC UNDER WINDOWS For the Windows version we have included Visual C++ workspace and project files under the "visualc" and "vcnet" directories. You must add the FLTK and OpenSSL include and library directories to your VC++ environment options. INSTALLING HTMLDOC UNDER WINDOWS We highly recommend installing the software using the VC++.NET MSI file as provided in the project files under the "vcnet" directory. If you want to install the software by hand, create a directory for the software and copy the HTMLDOC executable, the "fonts" directory, the "data" directory, and the "doc" directory to it. Then create the following registry entries with REGEDIT: HKEY_LOCAL_MACHINE\Software\Easy Software Products\HTMLDOC\doc = C:/install/dir/doc HKEY_LOCAL_MACHINE\Software\Easy Software Products\HTMLDOC\data = C:/install/dir CONFIGURING HTMLDOC UNDER UNIX To compile the software under UNIX you just need to run the "configure" script in this directory. Usually this is just: ./configure If you don't want to install HTMLDOC in the default directories (/usr/bin, /usr/man/man1, etc.), use the "--prefix" option when you run the configure script: ./configure --prefix=/some/directory If the OpenSSL library is in a non-standard location you can specify it using: ./configure --with-openssl-includes=/some/directory/include \ --with-openssl-libs=/some/directory/lib If you aren't using "cc" or "gcc" for your ANSI C compiler, you'll need to set the CC environment variable prior to running the configure script: CC=compiler; export CC for Bourne and Korn shells, and: setenv CC "compiler" for C shell. If you aren't using "gcc", "g++", "c++", or "CC" for your C++ compiler, you'll also need to set the CXX environment variable: CXX=compiler; export CXX for Bourne and Korn shells, and: setenv CXX "compiler" for C shell. COMPILING HTMLDOC UNDER UNIX Just run "make" to build the software and generate the documentation. INSTALLING HTMLDOC UNDER UNIX Run "make install" to install the software. htmldoc-1.8.27/htmldoc.list.in0100664000212600000240000001163310412647623014667 0ustar mikeuser# # "$Id: htmldoc.list.in 1479 2006-03-30 03:25:07Z mike $" # # ESP Package Manager (EPM) file list for HTMLDOC. # # EPM can be found at "http://www.easysw.com/epm/". # %product HTMLDOC %copyright 1997-2006 by Easy Software Products, All Rights Reserved. %vendor Easy Software Products %license htmldoc.eula %readme htmldoc.readme %version @SVERSION@ @NVERSION@ %description HTMLDOC converts HTML files and web pages to PDF and PostScript. # Directories... $prefix=@prefix@ $exec_prefix=@exec_prefix@ $bindir=@bindir@ $mandir=@mandir@ $datadir=@datadir@ # Program %system darwin f 0555 root sys /Applications/htmldoc.app/Contents/MacOS/htmldoc htmldoc/htmldoc nostrip() l 0555 root sys $bindir/htmldoc /Applications/htmldoc.app/Contents/MacOS/htmldoc f 0444 root sys /Applications/htmldoc.app/Contents/Resources/htmldoc.icns desktop/htmldoc.icns f 0444 root sys /Applications/htmldoc.app/Contents/Info.plist desktop/htmldoc.plist f 0444 root sys /Applications/htmldoc.app/Contents/PkgInfo desktop/htmldoc.info %system !darwin f 0555 root sys $bindir/htmldoc htmldoc/htmldoc %system all # Font files f 0444 root sys $datadir/htmldoc/fonts/ fonts/*.afm f 0444 root sys $datadir/htmldoc/fonts/ fonts/*.pfa # Data files f 0444 root sys $datadir/htmldoc/data/cp-874 data/cp-874 f 0444 root sys $datadir/htmldoc/data/cp-1250 data/cp-1250 f 0444 root sys $datadir/htmldoc/data/cp-1251 data/cp-1251 f 0444 root sys $datadir/htmldoc/data/cp-1252 data/cp-1252 f 0444 root sys $datadir/htmldoc/data/cp-1253 data/cp-1253 f 0444 root sys $datadir/htmldoc/data/cp-1254 data/cp-1254 f 0444 root sys $datadir/htmldoc/data/cp-1255 data/cp-1255 f 0444 root sys $datadir/htmldoc/data/cp-1256 data/cp-1256 f 0444 root sys $datadir/htmldoc/data/cp-1257 data/cp-1257 f 0444 root sys $datadir/htmldoc/data/cp-1258 data/cp-1258 f 0444 root sys $datadir/htmldoc/data/iso-8859-1 data/iso-8859-1 f 0444 root sys $datadir/htmldoc/data/iso-8859-14 data/iso-8859-14 f 0444 root sys $datadir/htmldoc/data/iso-8859-15 data/iso-8859-15 f 0444 root sys $datadir/htmldoc/data/iso-8859-2 data/iso-8859-2 f 0444 root sys $datadir/htmldoc/data/iso-8859-3 data/iso-8859-3 f 0444 root sys $datadir/htmldoc/data/iso-8859-4 data/iso-8859-4 f 0444 root sys $datadir/htmldoc/data/iso-8859-5 data/iso-8859-5 f 0444 root sys $datadir/htmldoc/data/iso-8859-6 data/iso-8859-6 f 0444 root sys $datadir/htmldoc/data/iso-8859-7 data/iso-8859-7 f 0444 root sys $datadir/htmldoc/data/iso-8859-8 data/iso-8859-8 f 0444 root sys $datadir/htmldoc/data/iso-8859-9 data/iso-8859-9 f 0444 root sys $datadir/htmldoc/data/koi8-r data/koi8-r f 0444 root sys $datadir/htmldoc/data/prolog.ps data/prolog.ps f 0444 root sys $datadir/htmldoc/data/psglyphs data/psglyphs # Documentation f 0444 root sys $mandir/cat1/htmldoc.1 doc/htmldoc.1 f 0444 root sys $mandir/man1/htmldoc.1 doc/htmldoc.man %system all f 0444 root sys $datadir/doc/htmldoc/htmldoc.pdf doc/htmldoc.pdf f 0444 root sys $datadir/doc/htmldoc/help.html doc/help.html # Desktop integration... %system aix hpux solaris tru64 f 0555 root sys $datadir/htmldoc/dt/appconfig/appmanager/C/ESP/htmldoc desktop/htmldoc.appconfig f 0444 root sys $datadir/htmldoc/dt/appconfig/types/C/htmldoc.dt desktop/htmldoc.dt f 0444 root sys $datadir/htmldoc/dt/appconfig/icons/C/ desktop/*.bm f 0444 root sys $datadir/htmldoc/dt/appconfig/icons/C/ desktop/*.pm %postinstall </dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="htmldoc/htmldoc.h" ac_default_prefix=/usr # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS SVERSION NVERSION OPTIM AWK CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP RANLIB ac_ct_RANLIB AR CHMOD CP FLTKCONFIG MV MKDIR RM ARFLAGS EGREP LARGEFILE SSLFLAGS SSLLIBS JPEG JPEGINC PNG PNGINC ZLIB ZLIBINC POST BUILDMODE LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug turn on debugging, default=no --disable-largefile omit support for large files --enable-ssl turn on SSL/TLS support, default=yes --enable-openssl use OpenSSL for SSL/TLS support, default=yes --enable-gnutls use GNU TLS for SSL/TLS support, default=yes --enable-cdsassl use CDSA for SSL/TLS support, default=yes --enable-localjpeg use local JPEG library, default=auto --enable-localzlib use local ZLIB library, default=auto --enable-localpng use local PNG library, default=auto Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gui compile the GUI version of HTMLDOC, default=yes --with-openssl-libs set directory for OpenSSL library --with-openssl-includes set directory for OpenSSL includes Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" SVERSION="1.8.27" NVERSION=10802600 cat >>confdefs.h <<_ACEOF #define SVERSION "$SVERSION" _ACEOF uname=`uname` uversion=`uname -r | sed -e '1,$s/[^0-9]//g'` if test "$uname" = "IRIX64"; then uname="IRIX" fi OPTIM="${OPTIM:=}" CFLAGS="${CFLAGS:=}" CXXFLAGS="${CXXFLAGS:=}" LDFLAGS="${LDFLAGS:=}" # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" if eval "test x$enable_debug = xyes"; then OPTIM="-g " fi fi; # Check whether --with-gui or --without-gui was given. if test "${with_gui+set}" = set; then withval="$with_gui" fi; for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "chmod", so it can be a program name with args. set dummy chmod; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CHMOD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CHMOD in [\\/]* | ?:[\\/]*) ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi CHMOD=$ac_cv_path_CHMOD if test -n "$CHMOD"; then echo "$as_me:$LINENO: result: $CHMOD" >&5 echo "${ECHO_T}$CHMOD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "cp", so it can be a program name with args. set dummy cp; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_CP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CP in [\\/]* | ?:[\\/]*) ac_cv_path_CP="$CP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi CP=$ac_cv_path_CP if test -n "$CP"; then echo "$as_me:$LINENO: result: $CP" >&5 echo "${ECHO_T}$CP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "fltk-config", so it can be a program name with args. set dummy fltk-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_FLTKCONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $FLTKCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_FLTKCONFIG="$FLTKCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FLTKCONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi FLTKCONFIG=$ac_cv_path_FLTKCONFIG if test -n "$FLTKCONFIG"; then echo "$as_me:$LINENO: result: $FLTKCONFIG" >&5 echo "${ECHO_T}$FLTKCONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "mv", so it can be a program name with args. set dummy mv; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MV+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MV in [\\/]* | ?:[\\/]*) ac_cv_path_MV="$MV" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi MV=$ac_cv_path_MV if test -n "$MV"; then echo "$as_me:$LINENO: result: $MV" >&5 echo "${ECHO_T}$MV" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "mkdir", so it can be a program name with args. set dummy mkdir; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MKDIR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MKDIR in [\\/]* | ?:[\\/]*) ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi MKDIR=$ac_cv_path_MKDIR if test -n "$MKDIR"; then echo "$as_me:$LINENO: result: $MKDIR" >&5 echo "${ECHO_T}$MKDIR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_RM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi RM=$ac_cv_path_RM if test -n "$RM"; then echo "$as_me:$LINENO: result: $RM" >&5 echo "${ECHO_T}$RM" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$ac_cv_prog_ranlib" = ":"; then ARFLAGS="crs" else ARFLAGS="cr" fi echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "${ac_cv_header_strings_h+set}" = set; then echo "$as_me:$LINENO: checking for strings.h" >&5 echo $ECHO_N "checking for strings.h... $ECHO_C" >&6 if test "${ac_cv_header_strings_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_strings_h" >&5 echo "${ECHO_T}$ac_cv_header_strings_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking strings.h usability" >&5 echo $ECHO_N "checking strings.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking strings.h presence" >&5 echo $ECHO_N "checking strings.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: strings.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: strings.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: strings.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: strings.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: strings.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: strings.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: strings.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: strings.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: strings.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: strings.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for strings.h" >&5 echo $ECHO_N "checking for strings.h... $ECHO_C" >&6 if test "${ac_cv_header_strings_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_strings_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_strings_h" >&5 echo "${ECHO_T}$ac_cv_header_strings_h" >&6 fi if test $ac_cv_header_strings_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRINGS_H 1 _ACEOF fi if test "${ac_cv_header_locale_h+set}" = set; then echo "$as_me:$LINENO: checking for locale.h" >&5 echo $ECHO_N "checking for locale.h... $ECHO_C" >&6 if test "${ac_cv_header_locale_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_locale_h" >&5 echo "${ECHO_T}$ac_cv_header_locale_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking locale.h usability" >&5 echo $ECHO_N "checking locale.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking locale.h presence" >&5 echo $ECHO_N "checking locale.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: locale.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: locale.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: locale.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: locale.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: locale.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: locale.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: locale.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: locale.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: locale.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: locale.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for locale.h" >&5 echo $ECHO_N "checking for locale.h... $ECHO_C" >&6 if test "${ac_cv_header_locale_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_locale_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_locale_h" >&5 echo "${ECHO_T}$ac_cv_header_locale_h" >&6 fi if test $ac_cv_header_locale_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi for ac_func in strdup strcasecmp strncasecmp strlcat strlcpy do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then { echo "$as_me:$LINENO: WARNING: Forcing snprintf emulation for HP-UX..." >&5 echo "$as_me: WARNING: Forcing snprintf emulation for HP-UX..." >&2;} else for ac_func in snprintf vsnprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi echo "$as_me:$LINENO: checking for tm_gmtoff member in tm structure" >&5 echo $ECHO_N "checking for tm_gmtoff member in tm structure... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct tm t; int o = t.tm_gmtoff; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define HAVE_TM_GMTOFF 1 _ACEOF else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext LDFLAGS="${LDFLAGS:=}" echo "$as_me:$LINENO: checking for pow in -lm" >&5 echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6 if test "${ac_cv_lib_m_pow+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pow (); int main () { pow (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_m_pow=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_pow=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 echo "${ECHO_T}$ac_cv_lib_m_pow" >&6 if test $ac_cv_lib_m_pow = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi echo "$as_me:$LINENO: checking for library containing socket" >&5 echo $ECHO_N "checking for library containing socket... $ECHO_C" >&6 if test "${ac_cv_search_socket+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_socket=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_socket="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_socket" = no; then for ac_lib in socket; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_socket="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_socket" >&5 echo "${ECHO_T}$ac_cv_search_socket" >&6 if test "$ac_cv_search_socket" != no; then test "$ac_cv_search_socket" = "none required" || LIBS="$ac_cv_search_socket $LIBS" fi echo "$as_me:$LINENO: checking for library containing gethostbyaddr" >&5 echo $ECHO_N "checking for library containing gethostbyaddr... $ECHO_C" >&6 if test "${ac_cv_search_gethostbyaddr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_gethostbyaddr=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyaddr (); int main () { gethostbyaddr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_gethostbyaddr="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_gethostbyaddr" = no; then for ac_lib in nsl; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyaddr (); int main () { gethostbyaddr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_gethostbyaddr="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyaddr" >&5 echo "${ECHO_T}$ac_cv_search_gethostbyaddr" >&6 if test "$ac_cv_search_gethostbyaddr" != no; then test "$ac_cv_search_gethostbyaddr" = "none required" || LIBS="$ac_cv_search_gethostbyaddr $LIBS" fi echo "$as_me:$LINENO: checking for library containing getaddrinfo" >&5 echo $ECHO_N "checking for library containing getaddrinfo... $ECHO_C" >&6 if test "${ac_cv_search_getaddrinfo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_getaddrinfo=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getaddrinfo (); int main () { getaddrinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getaddrinfo="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_getaddrinfo" = no; then for ac_lib in nsl; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getaddrinfo (); int main () { getaddrinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getaddrinfo="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_getaddrinfo" >&5 echo "${ECHO_T}$ac_cv_search_getaddrinfo" >&6 if test "$ac_cv_search_getaddrinfo" != no; then test "$ac_cv_search_getaddrinfo" = "none required" || LIBS="$ac_cv_search_getaddrinfo $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_GETADDRINFO 1 _ACEOF fi echo "$as_me:$LINENO: checking for library containing getnameinfo" >&5 echo $ECHO_N "checking for library containing getnameinfo... $ECHO_C" >&6 if test "${ac_cv_search_getnameinfo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_getnameinfo=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getnameinfo (); int main () { getnameinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getnameinfo="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_getnameinfo" = no; then for ac_lib in nsl; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getnameinfo (); int main () { getnameinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_getnameinfo="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_getnameinfo" >&5 echo "${ECHO_T}$ac_cv_search_getnameinfo" >&6 if test "$ac_cv_search_getnameinfo" != no; then test "$ac_cv_search_getnameinfo" = "none required" || LIBS="$ac_cv_search_getnameinfo $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_GETNAMEINFO 1 _ACEOF fi echo "$as_me:$LINENO: checking for library containing hstrerror" >&5 echo $ECHO_N "checking for library containing hstrerror... $ECHO_C" >&6 if test "${ac_cv_search_hstrerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_hstrerror=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char hstrerror (); int main () { hstrerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_hstrerror="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_hstrerror" = no; then for ac_lib in nsl socket resolv; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char hstrerror (); int main () { hstrerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_hstrerror="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_hstrerror" >&5 echo "${ECHO_T}$ac_cv_search_hstrerror" >&6 if test "$ac_cv_search_hstrerror" != no; then test "$ac_cv_search_hstrerror" = "none required" || LIBS="$ac_cv_search_hstrerror $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_HSTRERROR 1 _ACEOF fi # Check whether --enable-largefile or --disable-largefile was given. if test "${enable_largefile+set}" = set; then enableval="$enable_largefile" fi; if test "$enable_largefile" != no; then echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext CC="$CC -n32" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_file_offset_bits=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 if test "$ac_cv_sys_file_offset_bits" != no; then cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF fi rm -f conftest* echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do ac_cv_sys_large_files=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext break done fi echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6 if test "$ac_cv_sys_large_files" != no; then cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF fi rm -f conftest* fi LARGEFILE="" if test x$enable_largefile != xno; then LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" if test $ac_cv_sys_large_files = 1; then LARGEFILE="$LARGEFILE -D_LARGE_FILES" fi if test $ac_cv_sys_file_offset_bits = 64; then LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64" fi fi echo "$as_me:$LINENO: checking for long long int" >&5 echo $ECHO_N "checking for long long int... $ECHO_C" >&6 if test "${ac_cv_c_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$GCC" = yes; then ac_cv_c_long_long=yes else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { long long int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_long_long=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_c_long_long" >&5 echo "${ECHO_T}$ac_cv_c_long_long" >&6 if test $ac_cv_c_long_long = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LONG_LONG 1 _ACEOF fi echo "$as_me:$LINENO: checking for strtoll" >&5 echo $ECHO_N "checking for strtoll... $ECHO_C" >&6 if test "${ac_cv_func_strtoll+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char strtoll (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strtoll (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_strtoll) || defined (__stub___strtoll) choke me #else char (*f) () = strtoll; #endif #ifdef __cplusplus } #endif int main () { return f != strtoll; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_strtoll=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_strtoll=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_strtoll" >&5 echo "${ECHO_T}$ac_cv_func_strtoll" >&6 if test $ac_cv_func_strtoll = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STRTOLL 1 _ACEOF fi # Check whether --enable-ssl or --disable-ssl was given. if test "${enable_ssl+set}" = set; then enableval="$enable_ssl" fi; # Check whether --enable-openssl or --disable-openssl was given. if test "${enable_openssl+set}" = set; then enableval="$enable_openssl" fi; # Check whether --enable-gnutls or --disable-gnutls was given. if test "${enable_gnutls+set}" = set; then enableval="$enable_gnutls" fi; # Check whether --enable-cdsassl or --disable-cdsassl was given. if test "${enable_cdsassl+set}" = set; then enableval="$enable_cdsassl" fi; # Check whether --with-openssl-libs or --without-openssl-libs was given. if test "${with_openssl_libs+set}" = set; then withval="$with_openssl_libs" LDFLAGS="-L$withval $LDFLAGS" DSOFLAGS="-L$withval $DSOFLAGS" fi; # Check whether --with-openssl-includes or --without-openssl-includes was given. if test "${with_openssl_includes+set}" = set; then withval="$with_openssl_includes" CFLAGS="-I$withval $CFLAGS" CXXFLAGS="-I$withval $CXXFLAGS" CPPFLAGS="-I$withval $CPPFLAGS" fi; SSLFLAGS="" SSLLIBS="" if test x$enable_ssl != xno; then if test "x${SSLLIBS}" = "x" -a "x${enable_openssl}" != "xno"; then if test "${ac_cv_header_openssl_ssl_h+set}" = set; then echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5 echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6 if test "${ac_cv_header_openssl_ssl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5 echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking openssl/ssl.h usability" >&5 echo $ECHO_N "checking openssl/ssl.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking openssl/ssl.h presence" >&5 echo $ECHO_N "checking openssl/ssl.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: openssl/ssl.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: openssl/ssl.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5 echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6 if test "${ac_cv_header_openssl_ssl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_openssl_ssl_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5 echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6 fi if test $ac_cv_header_openssl_ssl_h = yes; then SAVELIBS="$LIBS" for libcrypto in \ "-lcrypto" \ "-lcrypto -lrsaref" \ "-lcrypto -lRSAglue -lrsaref" do echo "$as_me:$LINENO: checking for SSL_new in -lssl" >&5 echo $ECHO_N "checking for SSL_new in -lssl... $ECHO_C" >&6 if test "${ac_cv_lib_ssl_SSL_new+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lssl $libcrypto $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char SSL_new (); int main () { SSL_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ssl_SSL_new=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ssl_SSL_new=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_new" >&5 echo "${ECHO_T}$ac_cv_lib_ssl_SSL_new" >&6 if test $ac_cv_lib_ssl_SSL_new = yes; then SSLFLAGS="-DOPENSSL_DISABLE_OLD_DES_SUPPORT -DOPENSSL_NO_KRB5" SSLLIBS="-lssl $libcrypto" cat >>confdefs.h <<\_ACEOF #define HAVE_SSL 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_LIBSSL 1 _ACEOF fi if test "x${SSLLIBS}" != "x"; then break fi done LIBS="$SAVELIBS" fi fi if test "x${SSLLIBS}" = "x" -a "x${enable_cdsassl}" != "xno"; then if test $uname = Darwin; then if test "${ac_cv_header_Security_SecureTransport_h+set}" = set; then echo "$as_me:$LINENO: checking for Security/SecureTransport.h" >&5 echo $ECHO_N "checking for Security/SecureTransport.h... $ECHO_C" >&6 if test "${ac_cv_header_Security_SecureTransport_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_Security_SecureTransport_h" >&5 echo "${ECHO_T}$ac_cv_header_Security_SecureTransport_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking Security/SecureTransport.h usability" >&5 echo $ECHO_N "checking Security/SecureTransport.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking Security/SecureTransport.h presence" >&5 echo $ECHO_N "checking Security/SecureTransport.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: Security/SecureTransport.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: Security/SecureTransport.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: Security/SecureTransport.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: Security/SecureTransport.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: Security/SecureTransport.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: Security/SecureTransport.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: Security/SecureTransport.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: Security/SecureTransport.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: Security/SecureTransport.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: Security/SecureTransport.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for Security/SecureTransport.h" >&5 echo $ECHO_N "checking for Security/SecureTransport.h... $ECHO_C" >&6 if test "${ac_cv_header_Security_SecureTransport_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_Security_SecureTransport_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_Security_SecureTransport_h" >&5 echo "${ECHO_T}$ac_cv_header_Security_SecureTransport_h" >&6 fi if test $ac_cv_header_Security_SecureTransport_h = yes; then SSLLIBS="-framework CoreFoundation -framework Security" cat >>confdefs.h <<\_ACEOF #define HAVE_SSL 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_CDSASSL 1 _ACEOF fi fi fi if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno"; then if test "${ac_cv_header_gnutls_gnutls_h+set}" = set; then echo "$as_me:$LINENO: checking for gnutls/gnutls.h" >&5 echo $ECHO_N "checking for gnutls/gnutls.h... $ECHO_C" >&6 if test "${ac_cv_header_gnutls_gnutls_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_gnutls_gnutls_h" >&5 echo "${ECHO_T}$ac_cv_header_gnutls_gnutls_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking gnutls/gnutls.h usability" >&5 echo $ECHO_N "checking gnutls/gnutls.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking gnutls/gnutls.h presence" >&5 echo $ECHO_N "checking gnutls/gnutls.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: gnutls/gnutls.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: gnutls/gnutls.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: gnutls/gnutls.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: gnutls/gnutls.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: gnutls/gnutls.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: gnutls/gnutls.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: gnutls/gnutls.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: gnutls/gnutls.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: gnutls/gnutls.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: gnutls/gnutls.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for gnutls/gnutls.h" >&5 echo $ECHO_N "checking for gnutls/gnutls.h... $ECHO_C" >&6 if test "${ac_cv_header_gnutls_gnutls_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_gnutls_gnutls_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_gnutls_gnutls_h" >&5 echo "${ECHO_T}$ac_cv_header_gnutls_gnutls_h" >&6 fi if test $ac_cv_header_gnutls_gnutls_h = yes; then SAVELIBS="$LIBS" TEST_GNUTLS_LIBS=`libgnutls-config --libs` echo "$as_me:$LINENO: checking for gnutls_init in -lgnutls" >&5 echo $ECHO_N "checking for gnutls_init in -lgnutls... $ECHO_C" >&6 if test "${ac_cv_lib_gnutls_gnutls_init+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgnutls $TEST_GNUTLS_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gnutls_init (); int main () { gnutls_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_gnutls_gnutls_init=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gnutls_gnutls_init=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_gnutls_gnutls_init" >&5 echo "${ECHO_T}$ac_cv_lib_gnutls_gnutls_init" >&6 if test $ac_cv_lib_gnutls_gnutls_init = yes; then SSLLIBS=$TEST_GNUTLS_LIBS cat >>confdefs.h <<\_ACEOF #define HAVE_SSL 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_GNUTLS 1 _ACEOF fi LIBS="$SAVELIBS" fi fi fi NEWLIBS="" # Check whether --enable-localjpeg or --disable-localjpeg was given. if test "${enable_localjpeg+set}" = set; then enableval="$enable_localjpeg" if eval "test x$enable_localjpeg = xyes"; then ac_cv_lib_jpeg_jpeg_CreateCompress=no fi fi; echo "$as_me:$LINENO: checking for jpeg_CreateCompress in -ljpeg" >&5 echo $ECHO_N "checking for jpeg_CreateCompress in -ljpeg... $ECHO_C" >&6 if test "${ac_cv_lib_jpeg_jpeg_CreateCompress+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char jpeg_CreateCompress (); int main () { jpeg_CreateCompress (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_jpeg_jpeg_CreateCompress=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_jpeg_jpeg_CreateCompress=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_jpeg_CreateCompress" >&5 echo "${ECHO_T}$ac_cv_lib_jpeg_jpeg_CreateCompress" >&6 if test $ac_cv_lib_jpeg_jpeg_CreateCompress = yes; then JPEGINC="" JPEG="" LIBS="-ljpeg $LIBS" else JPEGINC="-I../jpeg" JPEG="jpeg" NEWLIBS="../jpeg/libjpeg.a $NEWLIBS" fi # Check whether --enable-localzlib or --disable-localzlib was given. if test "${enable_localzlib+set}" = set; then enableval="$enable_localzlib" if eval "test x$enable_localzlib = xyes"; then ac_cv_lib_z_gzgets=no fi fi; echo "$as_me:$LINENO: checking for gzgets in -lz" >&5 echo $ECHO_N "checking for gzgets in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_gzgets+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gzgets (); int main () { gzgets (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_z_gzgets=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_gzgets=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzgets" >&5 echo "${ECHO_T}$ac_cv_lib_z_gzgets" >&6 if test $ac_cv_lib_z_gzgets = yes; then ZLIBINC="" ZLIB="" LIBS="-lz $LIBS" else ZLIBINC="-I../zlib" ZLIB="zlib" NEWLIBS="../zlib/libz.a $NEWLIBS" fi # Check whether --enable-localpng or --disable-localpng was given. if test "${enable_localpng+set}" = set; then enableval="$enable_localpng" if eval "test x$enable_localpng = xyes"; then ac_cv_lib_png_png_set_tRNS_to_alpha=no fi fi; echo "$as_me:$LINENO: checking for png_set_tRNS_to_alpha in -lpng" >&5 echo $ECHO_N "checking for png_set_tRNS_to_alpha in -lpng... $ECHO_C" >&6 if test "${ac_cv_lib_png_png_set_tRNS_to_alpha+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char png_set_tRNS_to_alpha (); int main () { png_set_tRNS_to_alpha (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_png_png_set_tRNS_to_alpha=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_png_png_set_tRNS_to_alpha=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_png_png_set_tRNS_to_alpha" >&5 echo "${ECHO_T}$ac_cv_lib_png_png_set_tRNS_to_alpha" >&6 if test $ac_cv_lib_png_png_set_tRNS_to_alpha = yes; then PNGINC="" PNG="" LIBS="-lpng $LIBS" else PNGINC="-I../png" PNG="png" NEWLIBS="../png/libpng.a $NEWLIBS" fi cat >>confdefs.h <<\_ACEOF #define HAVE_LIBJPEG 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_LIBPNG 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_LIBZ 1 _ACEOF POST=: if test "x$with_gui" != xno; then if test "x$FLTKCONFIG" != x; then LIBS="$LIBS `$FLTKCONFIG --use-images --ldflags`" OPTIM="`$FLTKCONFIG --cflags` $OPTIM" cat >>confdefs.h <<\_ACEOF #define HAVE_LIBFLTK 1 _ACEOF POST="$FLTKCONFIG --post" echo "$as_me:$LINENO: checking for XpmCreatePixmapFromData in -lXpm" >&5 echo $ECHO_N "checking for XpmCreatePixmapFromData in -lXpm... $ECHO_C" >&6 if test "${ac_cv_lib_Xpm_XpmCreatePixmapFromData+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXpm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XpmCreatePixmapFromData (); int main () { XpmCreatePixmapFromData (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_Xpm_XpmCreatePixmapFromData=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_Xpm_XpmCreatePixmapFromData=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5 echo "${ECHO_T}$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6 if test $ac_cv_lib_Xpm_XpmCreatePixmapFromData = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBXPM 1 _ACEOF LIBS="-lXpm $LIBS" fi else { echo "$as_me:$LINENO: WARNING: FLTK not available so no GUI will be built." >&5 echo "$as_me: WARNING: FLTK not available so no GUI will be built." >&2;} fi fi LIBS="$NEWLIBS $LIBS" if test "$prefix" = "NONE"; then prefix="/usr" fi if test "$exec_prefix" = "NONE"; then exec_prefix="$prefix" fi if test "$bindir" = "\${exec_prefix}/bin"; then bindir="$exec_prefix/bin" fi cat >>confdefs.h <<_ACEOF #define DOCUMENTATION "$prefix/share/doc/htmldoc" _ACEOF cat >>confdefs.h <<_ACEOF #define HTML_DATA "$prefix/share/htmldoc" _ACEOF if test -n "$GXX"; then echo "$as_me:$LINENO: checking if libsupc++ is required" >&5 echo $ECHO_N "checking if libsupc++ is required... $ECHO_C" >&6 SUPC="`$CXX -print-file-name=libsupc++.a 2>/dev/null`" case "$SUPC" in libsupc++.a*) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; *) LIBS="$LIBS -lsupc++" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 ;; esac if test "x$uname" != xDarwin; then CXX="$CC" fi if test -z "$OPTIM"; then OPTIM="-Os -g" fi OPTIM="-Wall -Wunused -Wno-char-subscripts $OPTIM" # OPTIM="-Wshadow -Wconversion -Winline $OPTIM" echo "$as_me:$LINENO: checking if GCC supports -fno-rtti" >&5 echo $ECHO_N "checking if GCC supports -fno-rtti... $ECHO_C" >&6 OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CXXFLAGS="$CXXFLAGS -fno-rtti" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" echo "$as_me:$LINENO: checking if GCC supports -fno-exceptions" >&5 echo $ECHO_N "checking if GCC supports -fno-exceptions... $ECHO_C" >&6 OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-exceptions" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CXXFLAGS="$CXXFLAGS -fno-exceptions" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" if test "$uname" = SunOS; then echo "$as_me:$LINENO: checking if GCC supports -fpermissive" >&5 echo $ECHO_N "checking if GCC supports -fpermissive... $ECHO_C" >&6 OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fpermissive" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then CXXFLAGS="$CXXFLAGS -fpermissive" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$OLDCFLAGS" fi else case $uname in IRIX*) if test -z "$OPTIM"; then if test `uname -r | sed -e '1,$s/\.//g'` -ge 62; then OPTIM="-O3 -OPT:Olimit=5000" else OPTIM="-O2" fi fi ;; HP-UX*) if test -z "$OPTIM"; then OPTIM="+O2 +DAportable" fi ;; SunOS*) if test -z "$OPTIM"; then OPTIM="-xO4 -xarch=generic" fi ;; UNIX_SV*) CXXFLAGS="-Hcppext=cxx $CXXFLAGS" esac fi if test x$enable_debug = xyes; then BUILDMODE="debug" else BUILDMODE="production" fi ac_config_files="$ac_config_files Makedefs Makefile htmldoc.list desktop/htmldoc.dt desktop/htmldoc.ftr desktop/htmldoc.plist" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makedefs" ) CONFIG_FILES="$CONFIG_FILES Makedefs" ;; "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "htmldoc.list" ) CONFIG_FILES="$CONFIG_FILES htmldoc.list" ;; "desktop/htmldoc.dt" ) CONFIG_FILES="$CONFIG_FILES desktop/htmldoc.dt" ;; "desktop/htmldoc.ftr" ) CONFIG_FILES="$CONFIG_FILES desktop/htmldoc.ftr" ;; "desktop/htmldoc.plist" ) CONFIG_FILES="$CONFIG_FILES desktop/htmldoc.plist" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@SVERSION@,$SVERSION,;t t s,@NVERSION@,$NVERSION,;t t s,@OPTIM@,$OPTIM,;t t s,@AWK@,$AWK,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CPP@,$CPP,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@AR@,$AR,;t t s,@CHMOD@,$CHMOD,;t t s,@CP@,$CP,;t t s,@FLTKCONFIG@,$FLTKCONFIG,;t t s,@MV@,$MV,;t t s,@MKDIR@,$MKDIR,;t t s,@RM@,$RM,;t t s,@ARFLAGS@,$ARFLAGS,;t t s,@EGREP@,$EGREP,;t t s,@LARGEFILE@,$LARGEFILE,;t t s,@SSLFLAGS@,$SSLFLAGS,;t t s,@SSLLIBS@,$SSLLIBS,;t t s,@JPEG@,$JPEG,;t t s,@JPEGINC@,$JPEGINC,;t t s,@PNG@,$PNG,;t t s,@PNGINC@,$PNGINC,;t t s,@ZLIB@,$ZLIB,;t t s,@ZLIBINC@,$ZLIBINC,;t t s,@POST@,$POST,;t t s,@BUILDMODE@,$BUILDMODE,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi # # End of "$Id: configure.in 1493 2006-06-07 18:20:49Z mike $". # htmldoc-1.8.27/README.txt0100664000212600000240000001406110463704112013420 0ustar mikeuserREADME.txt - 08/01/2006 ----------------------- INTRODUCTION This README file describes HTMLDOC, a HTML processing program that generates HTML, PostScript, and PDF files with a table of contents. **** HTMLDOC CURRENTLY ONLY SUPPORTS HTML 3.2 AND DOES NOT **** **** SUPPORT STYLE SHEETS! PLEASE READ THE DOCUMENTATION **** **** BEFORE ASKING QUESTIONS. **** HTMLDOC is copyright 1997-2006 by Easy Software Products. The source code is available under the GNU General Public License, version 2. Binaries are provided under a typical commercial End-User License Agreement. See the LEGAL STUFF section below for details. Documentation for HTMLDOC is available in the "doc" subdirectory and is been generated from HTML "source" files into HTML, PostScript, and PDF using HTMLDOC. HTMLDOC supports most HTML 3.2 and some HTML 4.0 markups as well as BMP, GIF, JPEG, and PNG images. Eventually HTMLDOC will be compliant with HTML 4.0 and support style sheets. Please support continued HTMLDOC development by purchasing HTMLDOC on CD-ROM from the following page: http://www.easysw.com/htmldoc/ HTMLDOC Basic is available for $49.95 and provides the software on CD-ROM and 30 days of installation support via email, telephone, and WWW. HTMLDOC Professional is available for $499.95 and provides the software on CD-ROM and one year of general support via email, telephone, and WWW. INTERNET RESOURCES For general discussions about HTMLDOC, subscribe to the HTMLDOC mailing list by opening the following page: http://lists.easysw.com/mailman/listinfo/htmldoc The HTMLDOC open source home page is located at: http://www.htmldoc.org/ The HTMLDOC commercial home page is located at: http://www.easysw.com/htmldoc/ Commercial support is provided by Easy Software Products. Submit commercial support requests using the form at: http://www.easysw.com/support.php or to the following email address: htmldoc-support@easysw.com REQUIREMENTS HTMLDOC requires an average of 2MB of disk space for installation. Binary distributions are available to any HTMLDOC commercial user at the commercial download page: http://www.easysw.com/htmldoc/software.php See the file "COMPILE.txt" for instructions on compiling HTMLDOC from the source code. USING HTMLDOC COMPLETE DOCUMENTATION FOR HTMLDOC IS AVAILABLE IN THE "doc" SUBDIRECTORY. THE FOLLOWING PROVIDES BASIC INFORMATION ON USING HTMLDOC AT THE COMMAND-LINE AND DOES NOT DISCUSS THE GUI OR WEB SERVER FUNCTIONALITY. HTMLDOC accepts a list of HTML "source" files and will generate HTML, PostScript, or PDF output via command-line options. A summary of command-line options can be shown with the "--help" option: htmldoc --help HTMLDOC normally expects "structured" documents, with chapters, etc. Chapters begin with a

    markup and continue to the end of the listed HTML files or the next

    markup, whichever comes first. To convert unstructured documents such as web pages, use the "--webpage" option to HTMLDOC: htmldoc --webpage ... To generate a Level 2 PostScript file you might use: htmldoc -f outfile.ps chapter1.html ... chapterN.html Similarly you can generate a PDF file of the same source files using: htmldoc -f outfile.pdf chapter1.html ... chapterN.html Finally, to generate HTML files for viewing (with a linked table- of-contents) do the following: htmldoc -t html -d outdir chapter1.html ... chapterN.html or: htmldoc -t html -f outfile.html chapter1.html ... chapterN.html A complete description of all command-line options and HTML guidelines can be found in the software users manual in the "doc" directory. CURRENT LIMITATIONS - No support for style sheets. - No support for HTML forms. - HTML 4.0 table elements and attributes are not supported (rules, THEAD, TFOOT, etc.) CREDITS Many thanks to Leonard Rosenthol for providing changes to support a MacOS version of HTMLDOC. The table VALIGN and "HALF PAGE" code was contributed by D. Richard Hipp. The multiple header/footer image code was contributed by Lynn Pye. The RC4 encryption code is from librc4 1.1 by the folks at Carnegie Mellon University. The MD5 hash code is from L. Peter Deutsch at Aladdin Enterprises (creators of Ghostscript, among other things). ENCRYPTION SUPPORT HTMLDOC includes code to encrypt PDF document files using the RC4 algorithm with up to a 128-bit key. While this software and code may be freely used and exported under current US laws, other countries may restrict your use and possession of this code and software. LEGAL STUFF The Adobe Portable Document Format is Copyright 1985-2003 by Adobe Systems Incorporated. Adobe, FrameMaker, and PostScript are registered trademarks of Adobe Systems, Incorporated. The Graphics Interchange Format is the copyright and GIF is the service mark property of CompuServe Incorporated. Intel is a registered trademark of Intel Corporation. IRIX and sgi are registered trademarks of Silicon Graphics, Inc. Linux is a registered trademark of Linus Torvalds. MacOS is a registered trademark of Apple Computer, Inc. Microsoft and Windows are registered trademarks of Microsoft Corporation. Solaris is a registered trademark of Sun Microsystems, Inc. SPARC is a registered trademark of SPARC International, Inc. UNIX is a registered trademark of the X/Open Company, Ltd. HTMLDOC and DOC are the trademark property of Easy Software Products. HTMLDOC is copyright 1997-2006 by Easy Software Products. See Appendix A of the HTMLDOC Software Users Manual and the files "COPYING.txt" and "htmldoc.eula" for the terms of use. This software is based in part on the work of the Independent JPEG Group and FLTK project.